Name: series-workflowr868c Phase: Succeeded StartedAt: 2026-07-16 14:55:16 +0000 UTC FinishedAt: 2026-07-16 17:13:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr868c[0] Phase: Succeeded StartedAt: 2026-07-16 14:55:16 +0000 UTC FinishedAt: 2026-07-16 15:27:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr868c[0].run-triage Phase: Succeeded StartedAt: 2026-07-16 14:55:17 +0000 UTC FinishedAt: 2026-07-16 15:27:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "37e2f878a7a660a216cc7a60459995fefd150f25", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_SWIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "37e2f878a7a660a216cc7a60459995fefd150f25", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_SWIM" ], "series_id": "f2acb52f-a55a-470e-a324-b7bfd8dd2e80" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "swim_queue_rq", "floppy_read_sectors", "swim_read_sector_range", "floppy_ioctl", "floppy_open", "floppy_release", "swim_probe", "swim_floppy_init", "swim_add_floppy", "setup_medium", "floppy_eject", "swim_track", "swim_seek", "swim_track00", "swim_step", "swim_motor", "swim_drive", "swim_action", "swim_select" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE1OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfU1dJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3aW1fcXVldWVfcnEmIzM0OywKICAgICYjMzQ7ZmxvcHB5X3JlYWRfc2VjdG9ycyYjMzQ7LAogICAgJiMzNDtzd2ltX3JlYWRfc2VjdG9yX3JhbmdlJiMzNDssCiAgICAmIzM0O2Zsb3BweV9pb2N0bCYjMzQ7LAogICAgJiMzNDtmbG9wcHlfb3BlbiYjMzQ7LAogICAgJiMzNDtmbG9wcHlfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtzd2ltX3Byb2JlJiMzNDssCiAgICAmIzM0O3N3aW1fZmxvcHB5X2luaXQmIzM0OywKICAgICYjMzQ7c3dpbV9hZGRfZmxvcHB5JiMzNDssCiAgICAmIzM0O3NldHVwX21lZGl1bSYjMzQ7LAogICAgJiMzNDtmbG9wcHlfZWplY3QmIzM0OywKICAgICYjMzQ7c3dpbV90cmFjayYjMzQ7LAogICAgJiMzNDtzd2ltX3NlZWsmIzM0OywKICAgICYjMzQ7c3dpbV90cmFjazAwJiMzNDssCiAgICAmIzM0O3N3aW1fc3RlcCYjMzQ7LAogICAgJiMzNDtzd2ltX21vdG9yJiMzNDssCiAgICAmIzM0O3N3aW1fZHJpdmUmIzM0OywKICAgICYjMzQ7c3dpbV9hY3Rpb24mIzM0OywKICAgICYjMzQ7c3dpbV9zZWxlY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBTV0lNIGZsb3BweSBjb250cm9sbGVyIGRyaXZlciBmb3IgbTY4ayBNYWNpbnRvc2ggc3lzdGVtcywgaW5jbHVkaW5nIGNoYW5nZXMgdG8gZGV2aWNlIHJlZ2lzdHJhdGlvbiwgaW5pdGlhbGl6YXRpb24sIHJlYWRpbmcgc2VjdG9ycywgYW5kIGhhbmRsaW5nIGhhcmR3YXJlIHN0YXRlLiBUaGUgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VICh1c2luZyB0aGUgYHE4MDBgIG1hY2hpbmUpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgYmxvY2sgZGV2aWNlIG9wZXJhdGlvbnMsIGlvY3RscywgYW5kIGhhcmR3YXJlIGludGVyYWN0aW9uIGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNToyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM2Y2U0Yzg3ZmJhMDkwNGJlNzkwY2JjYjBkMTJmZWNhMzVjZjUyODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAxNToyNjo1MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL2NvbmZpZy5jIGIvYXJjaC9tNjhrL21hYy9jb25maWcuY1xuaW5kZXggYzAwMzNmODg1ZWQ0ZjAuLmRiYTNkZTIxYzNjNDA1IDEwMDY0NFxuLS0tIGEvYXJjaC9tNjhrL21hYy9jb25maWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9tNjhrL21hYy9jb25maWcuY1xuQEAgLTk4NCw4ICYjNDM7OTg0LDM3IEBAIHN0YXRpYyBpbnQgX19pbml0IG1hY19wbGF0Zm9ybV9pbml0KHZvaWQpXG4gXHRcdFx0LnN0YXJ0ID0gc3dpbV9iYXNlLFxuIFx0XHRcdC5lbmQgICA9IHN3aW1fYmFzZSAmIzQzOyAweDFGRkYsXG4gXHRcdH07XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgZGF0YSA9IDA7XG4mIzQzO1xuJiM0MztcdFx0LyogTW9kZWxzIGluIHRoaXMgbGlzdCBhcmUgc3VwcG9zZWQgdG8gcnVuIEZDTEsgYXQgMzIgTUh6ICovXG4mIzQzO1x0XHRzd2l0Y2ggKG1hY2ludG9zaF9jb25maWctXHUwMDNlaWRlbnQpIHtcbiYjNDM7XHRcdGNhc2UgTUFDX01PREVMX0NDTDpcbiYjNDM7XHRcdGNhc2UgTUFDX01PREVMX0NDTElJOlxuJiM0MztcdFx0Y2FzZSBNQUNfTU9ERUxfTENJSUk6XG4mIzQzO1x0XHRjYXNlIE1BQ19NT0RFTF9RNjA1OlxuJiM0MztcdFx0Y2FzZSBNQUNfTU9ERUxfUTYwNV9BQ0M6XG4mIzQzO1x0XHRjYXNlIE1BQ19NT0RFTF9RNjEwOlxuJiM0MztcdFx0Y2FzZSBNQUNfTU9ERUxfUTYzMDpcbiYjNDM7XHRcdGNhc2UgTUFDX01PREVMX1E2NTA6XG4mIzQzO1x0XHRjYXNlIE1BQ19NT0RFTF9RODAwOlxuJiM0MztcdFx0Y2FzZSBNQUNfTU9ERUxfUDQ2MDpcbiYjNDM7XHRcdGNhc2UgTUFDX01PREVMX1A0NzU6XG4mIzQzO1x0XHRjYXNlIE1BQ19NT0RFTF9QNDc1RjpcbiYjNDM7XHRcdGNhc2UgTUFDX01PREVMX1A1MjA6XG4mIzQzO1x0XHRjYXNlIE1BQ19NT0RFTF9QNTUwOlxuJiM0MztcdFx0Y2FzZSBNQUNfTU9ERUxfUDU3NTpcbiYjNDM7XHRcdGNhc2UgTUFDX01PREVMX1A1ODg6XG4mIzQzO1x0XHRjYXNlIE1BQ19NT0RFTF9UVjpcbiYjNDM7XHRcdGNhc2UgTUFDX01PREVMX0M2MTA6XG4mIzQzO1x0XHRjYXNlIE1BQ19NT0RFTF9DNjUwOlxuJiM0MztcdFx0Y2FzZSBNQUNfTU9ERUxfUEIxOTA6XG4mIzQzO1x0XHRjYXNlIE1BQ19NT0RFTF9QQjUyMDpcbiYjNDM7XHRcdFx0ZGF0YSA9IDE7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuIFxuLVx0XHRwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKFwmIzM0O3N3aW1cJiMzNDssIC0xLCBcdTAwMjZzd2ltX3JzcmMsIDEpO1xuJiM0MztcdFx0cGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3Jlc25kYXRhKE5VTEwsIFwmIzM0O3N3aW1cJiMzNDssIC0xLCBcdTAwMjZzd2ltX3JzcmMsIDEsXG4mIzQzO1x0XHRcdFx0XHRcdCAgXHUwMDI2ZGF0YSwgc2l6ZW9mKGRhdGEpKTtcbiBcdH1cbiBcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zd2ltLmMgYi9kcml2ZXJzL2Jsb2NrL3N3aW0uY1xuaW5kZXggMGNjYzEyYTcyMzg4ZDUuLjQ2MGY3NGMxOWNmZGMyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9zd2ltLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svc3dpbS5jXG5AQCAtMiwxMiAmIzQzOzIsMjAgQEBcbiAvKlxuICAqIERyaXZlciBmb3IgU1dJTSAoU2FuZGVyIFdveiBJbnRlZ3JhdGVkIE1hY2hpbmUpIGZsb3BweSBjb250cm9sbGVyXG4gICpcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwOCBMYXVyZW50IFZpdmllciBcdTAwM2NMYXVyZW50QGx2aXZpZXIuaW5mb1x1MDAzZVxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggTGF1cmVudCBWaXZpZXIgXHUwMDNjTGF1cmVudEBsdml2aWVyLmluZm9cdTAwM2VcbiAgKlxuICAqIGJhc2VkIG9uIEFsYXN0YWlyIEJyaWRnZXdhdGVyIFNXSU0gYW5hbHlzaXMsIDIwMDFcbiAgKiBiYXNlZCBvbiBTV0lNMyBkcml2ZXIgKGMpIFBhdWwgTWFja2VycmFzLCAxOTk2XG4gICogYmFzZWQgb24gbmV0QlNEIElXTSBkcml2ZXIgKGMpIDE5OTcsIDE5OTggSGF1a2UgRmF0aC5cbiAgKlxuJiM0MzsgKiBTZWUgYWxzbzpcbiYjNDM7ICogSW5zaWRlIE1hY2ludG9zaCwgdm9sLiBJSUksIGNoLiAyXG4mIzQzOyAqIGh0dHBzOi8vYXJjaGl2ZS5vcmcvZGV0YWlscy9TV0lNRGVzaWduRG9jc1xuJiM0MzsgKiBORUMgdVBENzIwNzAgRkRDIGRhdGFzaGVldFxuJiM0MzsgKiBta0xpbnV4IHNvdXJjZSBmaWxlIHN3aW1paWljb21tb25oYWwuY1xuJiM0MzsgKiBodHRwOi8vd3d3Lm1hYy5saW51eC1tNjhrLm9yZy9kZXZlbC9pd20ucGhwLmh0bWxcbiYjNDM7ICogTUFNRSBzb3VyY2UgZmlsZSBzb255ZHJpdi5jcHBcbiYjNDM7ICpcbiAgKiAyMDA0LTA4LTIxIChsdikgLSBJbml0aWFsIGltcGxlbWVudGF0aW9uXG4gICogMjAwOC0xMC0zMCAobHYpIC0gUG9ydCB0byAyLjZcbiAgKi9cbkBAIC0xOSw2ICYjNDM7MjcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21ham9yLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaGRyZWcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG5AQCAtNjAsNyAmIzQzOzY5LDcgQEAgc3RydWN0IHN3aW0ge1xuIFx0UkVHKHJlYWRfaGFuZHNoYWtlKVxuIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7XG4gXG4tI2RlZmluZSBzd2ltX3dyaXRlKGJhc2UsIHJlZywgdikgXHRvdXRfOChcdTAwMjYoYmFzZSktXHUwMDNld3JpdGVfIyNyZWcsICh2KSlcbiYjNDM7I2RlZmluZSBzd2ltX3dyaXRlKGJhc2UsIHJlZywgdilcdG91dF84KFx1MDAyNihiYXNlKS1cdTAwM2V3cml0ZV8jI3JlZywgKHYpKVxuICNkZWZpbmUgc3dpbV9yZWFkKGJhc2UsIHJlZylcdFx0aW5fOChcdTAwMjYoYmFzZSktXHUwMDNlcmVhZF8jI3JlZylcbiBcbiAvKiBJV00gcmVnaXN0ZXJzICovXG5AQCAtODQsNjIgJiM0Mzs5Myw1MyBAQCBzdHJ1Y3QgaXdtIHtcbiBcdFJFRyhxN0gpXG4gfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTtcbiBcbi0jZGVmaW5lIGl3bV93cml0ZShiYXNlLCByZWcsIHYpIFx0b3V0XzgoXHUwMDI2KGJhc2UpLVx1MDAzZXJlZywgKHYpKVxuJiM0MzsjZGVmaW5lIGl3bV93cml0ZShiYXNlLCByZWcsIHYpXHRcdG91dF84KFx1MDAyNihiYXNlKS1cdTAwM2VyZWcsICh2KSlcbiAjZGVmaW5lIGl3bV9yZWFkKGJhc2UsIHJlZylcdFx0aW5fOChcdTAwMjYoYmFzZSktXHUwMDNlcmVnKVxuIFxuIC8qIGJpdHMgaW4gcGhhc2UgcmVnaXN0ZXIgKi9cbiBcbi0jZGVmaW5lIFNFRUtfUE9TSVRJVkVcdDB4MDcwXG4tI2RlZmluZSBTRUVLX05FR0FUSVZFXHQweDA3NFxuLSNkZWZpbmUgU1RFUFx0XHQweDA3MVxuLSNkZWZpbmUgTU9UT1JfT05cdDB4MDcyXG4tI2RlZmluZSBNT1RPUl9PRkZcdDB4MDc2XG4tI2RlZmluZSBJTkRFWFx0XHQweDA3M1xuLSNkZWZpbmUgRUpFQ1RcdFx0MHgwNzdcbi0jZGVmaW5lIFNFVE1GTVx0XHQweDE3MVxuLSNkZWZpbmUgU0VUR0NSXHRcdDB4MTc1XG4mIzQzOyNkZWZpbmUgU0VFS19QT1NJVElWRVx0MHgwRjBcbiYjNDM7I2RlZmluZSBTRUVLX05FR0FUSVZFXHQweDBGNFxuJiM0MzsjZGVmaW5lIFNURVBcdFx0MHgwRjFcbiYjNDM7I2RlZmluZSBNT1RPUl9PTlx0MHgwRjJcbiYjNDM7I2RlZmluZSBNT1RPUl9PRkZcdDB4MEY2XG4mIzQzOyNkZWZpbmUgSU5ERVhcdFx0MHgwRjNcbiYjNDM7I2RlZmluZSBFSkVDVFx0XHQweDBGN1xuJiM0MzsjZGVmaW5lIFNFVE1GTVx0XHQweDFGMVxuJiM0MzsjZGVmaW5lIFNFVEdDUlx0XHQweDFGNVxuIFxuLSNkZWZpbmUgUkVMQVhcdFx0MHgwMzNcbi0jZGVmaW5lIExTVFJCXHRcdDB4MDA4XG4mIzQzOyNkZWZpbmUgUkVMQVhcdFx0MHgwRjNcbiYjNDM7I2RlZmluZSBMU1RSQlx0XHQweDBGOFxuIFxuLSNkZWZpbmUgQ0FfTUFTS1x0XHQweDA3N1xuJiM0MzsjZGVmaW5lIENBX01BU0tcdFx0MHgwRjdcbiYjNDM7I2RlZmluZSBTRUxfTUFTS1x0MHgxMDBcbiBcbiAvKiBTZWxlY3QgdmFsdWVzIGZvciBzd2ltX3NlbGVjdCBhbmQgc3dpbV9yZWFkYml0ICovXG4gXG4tI2RlZmluZSBSRUFEX0RBVEFfMFx0MHgwNzRcbi0jZGVmaW5lIE9ORU1FR19EUklWRVx0MHgwNzVcbi0jZGVmaW5lIFNJTkdMRV9TSURFRFx0MHgwNzZcbi0jZGVmaW5lIERSSVZFX1BSRVNFTlRcdDB4MDc3XG4tI2RlZmluZSBESVNLX0lOXHRcdDB4MTcwXG4tI2RlZmluZSBXUklURV9QUk9UXHQweDE3MVxuLSNkZWZpbmUgVFJBQ0tfWkVST1x0MHgxNzJcbi0jZGVmaW5lIFRBQ0hPXHRcdDB4MTczXG4tI2RlZmluZSBSRUFEX0RBVEFfMVx0MHgxNzRcbi0jZGVmaW5lIEdDUl9NT0RFXHQweDE3NVxuLSNkZWZpbmUgU0VFS19DT01QTEVURVx0MHgxNzZcbi0jZGVmaW5lIFRXT01FR19NRURJQVx0MHgxNzdcbiYjNDM7I2RlZmluZSBTVEVQUElOR1x0MHgwRjFcbiYjNDM7I2RlZmluZSBSRUFEX0RBVEFfMFx0MHgwRjRcbiYjNDM7I2RlZmluZSBPTkVNRUdfRFJJVkVcdDB4MEY1XG4mIzQzOyNkZWZpbmUgU0lOR0xFX1NJREVEXHQweDBGNlxuJiM0MzsjZGVmaW5lIERSSVZFX1BSRVNFTlRcdDB4MEY3XG4mIzQzOyNkZWZpbmUgRElTS19JTlx0XHQweDFGMFxuJiM0MzsjZGVmaW5lIFdSSVRFX1BST1RcdDB4MUYxXG4mIzQzOyNkZWZpbmUgVFJBQ0tfWkVST1x0MHgxRjJcbiYjNDM7I2RlZmluZSBUQUNIT1x0XHQweDFGM1xuJiM0MzsjZGVmaW5lIFJFQURfREFUQV8xXHQweDFGNFxuJiM0MzsjZGVmaW5lIEdDUl9NT0RFXHQweDFGNVxuJiM0MzsjZGVmaW5lIFJFQURZXHRcdDB4MUY2XG4mIzQzOyNkZWZpbmUgVFdPTUVHX01FRElBXHQweDFGN1xuIFxuIC8qIEJpdHMgaW4gaGFuZHNoYWtlIHJlZ2lzdGVyICovXG4gXG4tI2RlZmluZSBNQVJLX0JZVEVcdDB4MDFcbi0jZGVmaW5lIENSQ19aRVJPXHQweDAyXG4tI2RlZmluZSBSRERBVEFcdFx0MHgwNFxuICNkZWZpbmUgU0VOU0VcdFx0MHgwOFxuLSNkZWZpbmUgTU9URU5cdFx0MHgxMFxuLSNkZWZpbmUgRVJST1JcdFx0MHgyMFxuICNkZWZpbmUgREFUMkJZVEVcdDB4NDBcbiAjZGVmaW5lIERBVDFCWVRFXHQweDgwXG4gXG4gLyogYml0cyBpbiBzZXR1cCByZWdpc3RlciAqL1xuIFxuLSNkZWZpbmUgU19JTlZfV0RBVEFcdDB4MDFcbi0jZGVmaW5lIFNfM181X1NFTEVDVFx0MHgwMlxuLSNkZWZpbmUgU19HQ1JcdFx0MHgwNFxuICNkZWZpbmUgU19GQ0xLX0RJVjJcdDB4MDhcbi0jZGVmaW5lIFNfRVJST1JfQ09SUlx0MHgxMFxuICNkZWZpbmUgU19JQk1fRFJJVkVcdDB4MjBcbi0jZGVmaW5lIFNfR0NSX1dSSVRFXHQweDQwXG4tI2RlZmluZSBTX1RJTUVPVVRcdDB4ODBcbiBcbiAvKiBiaXRzIGluIG1vZGUgcmVnaXN0ZXIgKi9cbiBcbkBAIC0xNDgsMTQgJiM0MzsxNDgsMTMgQEAgc3RydWN0IGl3bSB7XG4gI2RlZmluZSBFTkJMMlx0XHQweDA0XG4gI2RlZmluZSBBQ1RJT05cdFx0MHgwOFxuICNkZWZpbmUgV1JJVEVfTU9ERVx0MHgxMFxuLSNkZWZpbmUgSEVEU0VMXHRcdDB4MjBcbiYjNDM7I2RlZmluZSBJU01fU0VMRUNUXHQweDQwXG4gI2RlZmluZSBNT1RPTlx0XHQweDgwXG4gXG4tLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi1cbiBlbnVtIGRyaXZlX2xvY2F0aW9uIHtcbi1cdElOVEVSTkFMX0RSSVZFID0gMHgwMixcbi1cdEVYVEVSTkFMX0RSSVZFID0gMHgwNCxcbiYjNDM7XHROT19EUklWRSA9IDAsXG4mIzQzO1x0SU5URVJOQUxfRFJJVkUgPSBCSVQoMSksXG4mIzQzO1x0RVhURVJOQUxfRFJJVkUgPSBCSVQoMiksXG4gfTtcbiBcbiBlbnVtIG1lZGlhX3R5cGUge1xuQEAgLTE2OCwyMyAmIzQzOzE2NywyMyBAQCBzdHJ1Y3QgZmxvcHB5X3N0YXRlIHtcbiBcdC8qIHBoeXNpY2FsIHByb3BlcnRpZXMgKi9cbiBcbiBcdGVudW0gZHJpdmVfbG9jYXRpb24gbG9jYXRpb247XHQvKiBpbnRlcm5hbCBvciBleHRlcm5hbCBkcml2ZSAqL1xuLVx0aW50XHRcdCBoZWFkX251bWJlcjtcdC8qIHNpbmdsZS0gb3IgZG91YmxlLXNpZGVkIGRyaXZlICovXG4mIzQzO1x0aW50IGhlYWRfbnVtYmVyO1x0XHQvKiBzaW5nbGUtIG9yIGRvdWJsZS1zaWRlZCBkcml2ZSAqL1xuIFxuIFx0LyogbWVkaWEgKi9cbiBcbi1cdGludFx0XHQgZGlza19pbjtcbi1cdGludFx0XHQgZWplY3RlZDtcbi1cdGVudW0gbWVkaWFfdHlwZVx0IHR5cGU7XG4tXHRpbnRcdFx0IHdyaXRlX3Byb3RlY3RlZDtcbiYjNDM7XHRpbnQgZGlza19pbjtcbiYjNDM7XHRpbnQgZWplY3RlZDtcbiYjNDM7XHRlbnVtIG1lZGlhX3R5cGUgdHlwZTtcbiYjNDM7XHRpbnQgd3JpdGVfcHJvdGVjdGVkO1xuIFxuLVx0aW50XHRcdCB0b3RhbF9zZWNzO1xuLVx0aW50XHRcdCBzZWNwZXJjeWw7XG4tXHRpbnRcdFx0IHNlY3BlcnRyYWNrO1xuJiM0MztcdHVuc2lnbmVkIGludCB0b3RhbF9zZWNzO1xuJiM0MztcdHVuc2lnbmVkIGludCBzZWNwZXJjeWw7XG4mIzQzO1x0dW5zaWduZWQgaW50IHNlY3BlcnRyYWNrO1xuIFxuIFx0LyogaW4tdXNlIGluZm9ybWF0aW9uICovXG4gXG4tXHRpbnRcdFx0dHJhY2s7XG4tXHRpbnRcdFx0cmVmX2NvdW50O1xuJiM0MztcdGludCB0cmFjaztcbiYjNDM7XHRpbnQgcmVmX2NvdW50O1xuIFx0Ym9vbCByZWdpc3RlcmVkO1xuIFxuIFx0c3RydWN0IGdlbmRpc2sgKmRpc2s7XG5AQCAtMjA5LDcgJiM0MzsyMDgsNiBAQCBlbnVtIGhlYWQge1xuIFxuIHN0cnVjdCBzd2ltX3ByaXYge1xuIFx0c3RydWN0IHN3aW0gX19pb21lbSAqYmFzZTtcbi1cdHNwaW5sb2NrX3QgbG9jaztcbiBcdGludCBmbG9wcHlfY291bnQ7XG4gXHRzdHJ1Y3QgZmxvcHB5X3N0YXRlIHVuaXRbRkRfTUFYX1VOSVRdO1xuIH07XG5AQCAtMjIwLDIwICYjNDM7MjE4LDI0IEBAIGV4dGVybiBpbnQgc3dpbV9yZWFkX3NlY3Rvcl9kYXRhKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsXG4gXHRcdFx0XHQgdW5zaWduZWQgY2hhciAqZGF0YSk7XG4gXG4gc3RhdGljIERFRklORV9NVVRFWChzd2ltX211dGV4KTtcbi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3N3aW1fbW9kZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgZW5hYmxlKVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc2V0X3N3aW1fbW9kZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgZW5hYmxlKVxuIHtcbi1cdHN0cnVjdCBpd20gX19pb21lbSAqaXdtX2Jhc2U7XG4mIzQzO1x0c3RydWN0IGl3bSBfX2lvbWVtICppd21fYmFzZSA9IChzdHJ1Y3QgaXdtIF9faW9tZW0gKiliYXNlO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGlmICghZW5hYmxlKSB7XG4tXHRcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIDB4ZjgpO1xuJiM0MztcdFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgQUNUSU9OKTtcbiYjNDM7XHRcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIEVOQkwxIHwgRU5CTDIgfCBNT1RPTik7XG4mIzQzO1x0XHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBJU01fU0VMRUNUKTtcbiYjNDM7XHRcdGl3bV9yZWFkKGl3bV9iYXNlLCBxN0wpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpd21fYmFzZSA9IChzdHJ1Y3QgaXdtIF9faW9tZW0gKiliYXNlO1xuIFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuIFxuIFx0aXdtX3JlYWQoaXdtX2Jhc2UsIHE3TCk7XG4mIzQzO1x0aXdtX3JlYWQoaXdtX2Jhc2UsIHE2TCk7XG4gXHRpd21fcmVhZChpd21fYmFzZSwgbXRyT2ZmKTtcbiBcdGl3bV9yZWFkKGl3bV9iYXNlLCBxNkgpO1xuIFxuQEAgLTI0NSw3ICYjNDM7MjQ3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9zd2ltX21vZGUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IGVuYWJsZSlcbiBcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZ2V0X3N3aW1fbW9kZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKVxuJiM0MztzdGF0aWMgaW50IGdldF9zd2ltX21vZGUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuQEAgLTI3MSw3ICYjNDM7MjczLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHN3aW1fc2VsZWN0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBzZWwpXG4ge1xuIFx0c3dpbV93cml0ZShiYXNlLCBwaGFzZSwgUkVMQVgpO1xuIFxuLVx0dmlhMV9zZXRfaGVhZChzZWwgXHUwMDI2IDB4MTAwKTtcbiYjNDM7XHR2aWExX3NldF9oZWFkKHNlbCBcdTAwMjYgU0VMX01BU0spO1xuIFxuIFx0c3dpbV93cml0ZShiYXNlLCBwaGFzZSwgc2VsIFx1MDAyNiBDQV9NQVNLKTtcbiB9XG5AQCAtMjg0LDE1ICYjNDM7Mjg2LDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX2FjdGlvbihzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgYWN0aW9uKVxuIFxuIFx0c3dpbV9zZWxlY3QoYmFzZSwgYWN0aW9uKTtcbiBcdHVkZWxheSgxKTtcbi1cdHN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIChMU1RSQlx1MDAzY1x1MDAzYzQpIHwgTFNUUkIpO1xuLVx0dWRlbGF5KDEpO1xuLVx0c3dpbV93cml0ZShiYXNlLCBwaGFzZSwgKExTVFJCXHUwMDNjXHUwMDNjNCkgfCAoKH5MU1RSQikgXHUwMDI2IDB4MEYpKTtcbiYjNDM7XHRzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCBhY3Rpb24gfCBMU1RSQik7XG4mIzQzO1x0dWRlbGF5KDIpO1xuJiM0MztcdHN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIGFjdGlvbik7XG4gXHR1ZGVsYXkoMSk7XG4gXG4gXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHN3aW1fcmVhZGJpdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgYml0KVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc3dpbV9yZWFkYml0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBiaXQpXG4ge1xuIFx0aW50IHN0YXQ7XG4gXG5AQCAtMzA1LDEyNSAmIzQzOzMwNywxMTkgQEAgc3RhdGljIGlubGluZSBpbnQgc3dpbV9yZWFkYml0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBiaXQpXG4gXHRyZXR1cm4gKHN0YXQgXHUwMDI2IFNFTlNFKSA9PSAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9kcml2ZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLFxuJiM0MzsjZGVmaW5lIHN3aW1fcmVhZGJpdF90aW1lb3V0KGJhc2UsIGJpdCwgdmFsLCB0aW1lb3V0X3VzKSBcXFxuJiM0MztcdHBvbGxfdGltZW91dF91cygsIHN3aW1fcmVhZGJpdChiYXNlLCBiaXQpID09IHZhbCwgMTAwMCwgdGltZW91dF91cywgZmFsc2UpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIHN3aW1fcmVhZGJpdF90aW1lb3V0X2F0b21pYyhiYXNlLCBiaXQsIHZhbCwgdGltZW91dF91cykgXFxcbiYjNDM7XHRwb2xsX3RpbWVvdXRfdXNfYXRvbWljKCwgc3dpbV9yZWFkYml0KGJhc2UsIGJpdCkgPT0gdmFsLCAxLCB0aW1lb3V0X3VzLCBmYWxzZSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgc3dpbV9SRUFEWV90aW1lb3V0KGJhc2UpIFxcXG4mIzQzOyh7IFxcXG4mIzQzO1x0aW50IHJldCA9IHN3aW1fcmVhZGJpdF90aW1lb3V0KGJhc2UsIFJFQURZLCB0cnVlLCAxMDAwICogMTAwMCk7IFxcXG4mIzQzO1x0aWYgKHJldCkgXFxcbiYjNDM7XHRcdHByaW50ayhLRVJOX0RFQlVHIFwmIzM0OyVzOiBkcml2ZSBub3QgcmVhZHlcXG5cJiMzNDssIF9fZnVuY19fKTsgXFxcbiYjNDM7XHRyZXQ7IFxcXG4mIzQzO30pXG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzd2ltX2RyaXZlKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsXG4gXHRcdFx0ICAgICAgZW51bSBkcml2ZV9sb2NhdGlvbiBsb2NhdGlvbilcbiB7XG4gXHRpZiAobG9jYXRpb24gPT0gSU5URVJOQUxfRFJJVkUpIHtcbiBcdFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgRVhURVJOQUxfRFJJVkUpOyAvKiBjbGVhciBkcml2ZSAxIGJpdCAqL1xuIFx0XHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUxLCBJTlRFUk5BTF9EUklWRSk7IC8qIHNldCBkcml2ZSAwIGJpdCAqL1xuJiM0MztcdFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMSwgTU9UT04pO1xuIFx0fSBlbHNlIGlmIChsb2NhdGlvbiA9PSBFWFRFUk5BTF9EUklWRSkge1xuIFx0XHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBJTlRFUk5BTF9EUklWRSk7IC8qIGNsZWFyIGRyaXZlIDAgYml0ICovXG4gXHRcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTEsIEVYVEVSTkFMX0RSSVZFKTsgLyogc2V0IGRyaXZlIDEgYml0ICovXG4mIzQzO1x0XHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUxLCBNT1RPTik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIElOVEVSTkFMX0RSSVZFKTtcbiYjNDM7XHRcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIEVYVEVSTkFMX0RSSVZFKTtcbiYjNDM7XHRcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIE1PVE9OKTtcbiBcdH1cbiYjNDM7XHR1ZGVsYXkoMSk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX21vdG9yKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsXG4tXHRcdFx0ICAgICAgZW51bSBtb3Rvcl9hY3Rpb24gYWN0aW9uKVxuJiM0MztzdGF0aWMgdm9pZCBzd2ltX21vdG9yKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsXG4mIzQzO1x0XHQgICAgICAgZW51bSBtb3Rvcl9hY3Rpb24gYWN0aW9uKVxuIHtcbiBcdGlmIChhY3Rpb24gPT0gT04pIHtcbi1cdFx0aW50IGk7XG4tXG4gXHRcdHN3aW1fYWN0aW9uKGJhc2UsIE1PVE9SX09OKTtcbi1cbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgMipIWjsgaSYjNDM7JiM0MzspIHtcbi1cdFx0XHRzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7XG4tXHRcdFx0aWYgKHN3aW1fcmVhZGJpdChiYXNlLCBNT1RPUl9PTikpXG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xuLVx0XHRcdHNjaGVkdWxlX3RpbWVvdXQoMSk7XG4tXHRcdH1cbiYjNDM7XHRcdHN3aW1fcmVhZGJpdF90aW1lb3V0KGJhc2UsIE1PVE9SX09OLCB0cnVlLCAyMDAwICogMTAwMCk7XG4gXHR9IGVsc2UgaWYgKGFjdGlvbiA9PSBPRkYpIHtcbiBcdFx0c3dpbV9hY3Rpb24oYmFzZSwgTU9UT1JfT0ZGKTtcbi1cdFx0c3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpO1xuJiM0MztcdFx0c3dpbV93cml0ZShiYXNlLCBwaGFzZSwgUkVMQVgpO1xuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9lamVjdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKVxuJiM0MztzdGF0aWMgdm9pZCBzd2ltX2VqZWN0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpXG4ge1xuLVx0aW50IGk7XG4tXG4gXHRzd2ltX2FjdGlvbihiYXNlLCBFSkVDVCk7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAyKkhaOyBpJiM0MzsmIzQzOykge1xuLVx0XHRzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7XG4tXHRcdGlmICghc3dpbV9yZWFkYml0KGJhc2UsIERJU0tfSU4pKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xuLVx0XHRzY2hlZHVsZV90aW1lb3V0KDEpO1xuLVx0fVxuLVx0c3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpO1xuJiM0MztcdHN3aW1fcmVhZGJpdF90aW1lb3V0KGJhc2UsIERJU0tfSU4sIGZhbHNlLCAyMDAwICogMTAwMCk7XG4mIzQzO1x0bXNsZWVwKDEpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9oZWFkKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGVudW0gaGVhZCBoZWFkKVxuIHtcbi1cdC8qIHdhaXQgZHJpdmUgaXMgcmVhZHkgKi9cbi1cbiBcdGlmIChoZWFkID09IFVQUEVSX0hFQUQpXG4gXHRcdHN3aW1fc2VsZWN0KGJhc2UsIFJFQURfREFUQV8xKTtcbiBcdGVsc2UgaWYgKGhlYWQgPT0gTE9XRVJfSEVBRClcbiBcdFx0c3dpbV9zZWxlY3QoYmFzZSwgUkVBRF9EQVRBXzApO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzd2ltX3N0ZXAoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSlcbiYjNDM7c3RhdGljIGludCBzd2ltX3N0ZXAoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSlcbiB7XG4tXHRpbnQgd2FpdDtcbi1cbiBcdHN3aW1fYWN0aW9uKGJhc2UsIFNURVApO1xuLVxuLVx0Zm9yICh3YWl0ID0gMDsgd2FpdCBcdTAwM2MgSFo7IHdhaXQmIzQzOyYjNDM7KSB7XG4tXG4tXHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XG4tXHRcdHNjaGVkdWxlX3RpbWVvdXQoMSk7XG4tXG4tXHRcdHN3aW1fc2VsZWN0KGJhc2UsIFJFTEFYKTtcbi1cdFx0aWYgKCFzd2ltX3JlYWRiaXQoYmFzZSwgU1RFUCkpXG4tXHRcdFx0cmV0dXJuIDA7XG4tXHR9XG4tXHRyZXR1cm4gLTE7XG4mIzQzO1x0dWRlbGF5KDE1MCk7XG4mIzQzO1x0cmV0dXJuIHN3aW1fcmVhZGJpdF90aW1lb3V0X2F0b21pYyhiYXNlLCBTVEVQUElORywgZmFsc2UsIDIwICogMTAwMCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHN3aW1fdHJhY2swMChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKVxuJiM0MztzdGF0aWMgaW50IHN3aW1fdHJhY2swMChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKVxuIHtcbiBcdGludCB0cnk7XG4gXG4gXHRzd2ltX2FjdGlvbihiYXNlLCBTRUVLX05FR0FUSVZFKTtcbiBcbiBcdGZvciAodHJ5ID0gMDsgdHJ5IFx1MDAzYyAxMDA7IHRyeSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdG1zbGVlcCgzKTtcbiBcbi1cdFx0c3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpO1xuIFx0XHRpZiAoc3dpbV9yZWFkYml0KGJhc2UsIFRSQUNLX1pFUk8pKVxuLVx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0aWYgKHN3aW1fc3RlcChiYXNlKSlcbi1cdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0aWYgKHN3aW1fcmVhZGJpdChiYXNlLCBUUkFDS19aRVJPKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4mIzQzO1x0cHJfZXJyKFwmIzM0O3N3aW06IHRyYWNrIHplcm8gcmVjYWxpYnJhdGlvbiBmYWlsZWRcXG5cJiMzNDspO1xuIFx0cmV0dXJuIC0xO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzd2ltX3NlZWsoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IHN0ZXApXG4mIzQzO3N0YXRpYyBpbnQgc3dpbV9zZWVrKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBzdGVwKVxuIHtcbi1cdGlmIChzdGVwID09IDApXG4tXHRcdHJldHVybiAwO1xuLVxuIFx0aWYgKHN0ZXAgXHUwMDNjIDApIHtcbiBcdFx0c3dpbV9hY3Rpb24oYmFzZSwgU0VFS19ORUdBVElWRSk7XG4gXHRcdHN0ZXAgPSAtc3RlcDtcbi1cdH0gZWxzZVxuJiM0MztcdH0gZWxzZSBpZiAoc3RlcCBcdTAwM2UgMClcbiBcdFx0c3dpbV9hY3Rpb24oYmFzZSwgU0VFS19QT1NJVElWRSk7XG4mIzQzO1x0dWRlbGF5KDEpO1xuJiM0MztcbiYjNDM7XHRzd2ltX1JFQURZX3RpbWVvdXQoYmFzZSk7XG4mIzQzO1xuJiM0MztcdGlmIChzdGVwID09IDApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcbi1cdGZvciAoIDsgc3RlcCBcdTAwM2UgMDsgc3RlcC0tKSB7XG4mIzQzO1x0Zm9yICg7IHN0ZXAgXHUwMDNlIDA7IHN0ZXAtLSkge1xuIFx0XHRpZiAoc3dpbV9zdGVwKGJhc2UpKVxuIFx0XHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbiYjNDM7XHRtc2xlZXAoMzApO1xuJiM0MztcdHN3aW1fUkVBRFlfdGltZW91dChiYXNlKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc3dpbV90cmFjayhzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcywgIGludCB0cmFjaylcbiYjNDM7c3RhdGljIGludCBzd2ltX3RyYWNrKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzLCBpbnQgdHJhY2spXG4ge1xuIFx0c3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLVx1MDAzZXN3ZC1cdTAwM2ViYXNlO1xuIFx0aW50IHJldDtcbkBAIC00NDUsOCAmIzQzOzQ0MSwxMCBAQCBzdGF0aWMgaW50IGZsb3BweV9lamVjdChzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcylcbiBcdHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy1cdTAwM2Vzd2QtXHUwMDNlYmFzZTtcbiBcbiBcdHN3aW1fZHJpdmUoYmFzZSwgZnMtXHUwMDNlbG9jYXRpb24pO1xuJiM0MztcdHN3aW1fdHJhY2soZnMsIDEpO1xuIFx0c3dpbV9tb3RvcihiYXNlLCBPRkYpO1xuIFx0c3dpbV9lamVjdChiYXNlKTtcbiYjNDM7XHRzd2ltX2RyaXZlKGJhc2UsIE5PX0RSSVZFKTtcbiBcbiBcdGZzLVx1MDAzZWRpc2tfaW4gPSAwO1xuIFx0ZnMtXHUwMDNlZWplY3RlZCA9IDE7XG5AQCAtNDU0LDcwICYjNDM7NDUyLDgxIEBAIHN0YXRpYyBpbnQgZmxvcHB5X2VqZWN0KHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHN3aW1fcmVhZF9zZWN0b3Ioc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsXG4tXHRcdFx0XHQgICBpbnQgc2lkZSwgaW50IHRyYWNrLFxuLVx0XHRcdFx0ICAgaW50IHNlY3RvciwgdW5zaWduZWQgY2hhciAqYnVmZmVyKVxuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHN3aW1fcmVhZF9zZWN0b3JfcmFuZ2Uoc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsXG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgc2lkZSwgdW5zaWduZWQgaW50IHRyYWNrLFxuJiM0MztcdFx0XHRcdFx0dW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgY291bnQsXG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBjaGFyICpidWZmZXIpXG4ge1xuIFx0c3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLVx1MDAzZXN3ZC1cdTAwM2ViYXNlO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHN0cnVjdCBzZWN0b3JfaGVhZGVyIGhlYWRlcjtcbi1cdGludCByZXQgPSAtMTtcbi1cdHNob3J0IGk7XG4tXG4tXHRzd2ltX3RyYWNrKGZzLCB0cmFjayk7XG4mIzQzO1x0aW50IGksIGJpdHMgPSAwO1xuIFxuLVx0c3dpbV93cml0ZShiYXNlLCBtb2RlMSwgTU9UT04pO1xuLVx0c3dpbV9oZWFkKGJhc2UsIHNpZGUpO1xuLVx0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgc2lkZSk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgMTg7IGkmIzQzOyYjNDM7KSB7IC8qIEEgdHJhY2sgaGFzIGF0IG1vc3QgMTggc2VjdG9ycyAqL1xuJiM0MztcdFx0aWYgKGkgXHUwMDNlPSBjb3VudClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRiaXRzIHw9IEJJVChpKTtcbiYjNDM7XHR9XG4gXG4gXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAzNjsgaSYjNDM7JiM0MzspIHtcbi1cdFx0cmV0ID0gc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXIoYmFzZSwgXHUwMDI2aGVhZGVyKTtcbi1cdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IChoZWFkZXIuc2VjdG9yID09IHNlY3RvcikpIHtcbi1cdFx0XHQvKiBmb3VuZCAqL1xuLVxuLVx0XHRcdHJldCA9IHN3aW1fcmVhZF9zZWN0b3JfZGF0YShiYXNlLCBidWZmZXIpO1xuJiM0MztcdFx0aWYgKGJpdHMgPT0gMCkgLyogQWxsIGNvdW50IHNlY3RvcnMgd2VyZSByZWFkIG9rICovXG4gXHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHN3aW1fcmVhZF9zZWN0b3JfaGVhZGVyKGJhc2UsIFx1MDAyNmhlYWRlcikgfHxcbiYjNDM7XHRcdCAgICBzd2ltX3JlYWQoYmFzZSwgZXJyb3IpIHx8IGhlYWRlci50cmFjayAhPSB0cmFjayB8fFxuJiM0MztcdFx0ICAgIGhlYWRlci5zaWRlICE9IHNpZGUgfHwgaGVhZGVyLnNpemUgIT0gMilcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGhlYWRlci5zZWN0b3IgXHUwMDNlPSBzdGFydCBcdTAwMjZcdTAwMjYgaGVhZGVyLnNlY3RvciBcdTAwM2Mgc3RhcnQgJiM0MzsgY291bnQpIHtcbiYjNDM7XHRcdFx0dW5zaWduZWQgaW50IG9mZnNldCA9IGhlYWRlci5zZWN0b3IgLSBzdGFydDtcbiYjNDM7XHRcdFx0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICgoYml0cyBcdTAwMjYgQklUKG9mZnNldCkpID09IDApXG4mIzQzO1x0XHRcdFx0Y29udGludWU7IC8qIFRoaXMgc2VjdG9yIHdhcyBhbHJlYWR5IHJlYWQgb2sgKi9cbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHN3aW1fcmVhZF9zZWN0b3JfZGF0YShiYXNlLCBidWZmZXIgJiM0MzsgNTEyICogb2Zmc2V0KTtcbiYjNDM7XHRcdFx0aWYgKHJldCA9PSA1MTIgXHUwMDI2XHUwMDI2IHN3aW1fcmVhZChiYXNlLCBlcnJvcikgPT0gMClcbiYjNDM7XHRcdFx0XHRiaXRzIFx1MDAyNj0gfkJJVChvZmZzZXQpO1xuIFx0XHR9XG4gXHR9XG4gXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gXG4tXHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBNT1RPTik7XG4tXG4tXHRpZiAoKGhlYWRlci5zaWRlICE9IHNpZGUpICB8fCAoaGVhZGVyLnRyYWNrICE9IHRyYWNrKSB8fFxuLVx0ICAgICAoaGVhZGVyLnNlY3RvciAhPSBzZWN0b3IpKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0dXJuIGJpdHMgPyBmZnMoYml0cykgLSAxIDogY291bnQ7IC8qIE5vLiBvZiBjb250aWd1b3VzIG9rIHNlY3RvcnMgKi9cbiB9XG4gXG4gc3RhdGljIGJsa19zdGF0dXNfdCBmbG9wcHlfcmVhZF9zZWN0b3JzKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzLFxuLVx0XHRcdCAgICAgICBpbnQgcmVxX3NlY3RvciwgaW50IHNlY3RvcnNfbmIsXG4tXHRcdFx0ICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcilcbiYjNDM7XHRcdFx0XHRcdHVuc2lnbmVkIGludCByZXFfc2VjdG9yLFxuJiM0MztcdFx0XHRcdFx0dW5zaWduZWQgaW50IHNlY3RvcnNfbmIsXG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBjaGFyICpidWZmZXIpXG4ge1xuIFx0c3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLVx1MDAzZXN3ZC1cdTAwM2ViYXNlO1xuLVx0aW50IHJldDtcbi1cdGludCBzaWRlLCB0cmFjaywgc2VjdG9yO1xuLVx0aW50IGksIHRyeTtcbi1cbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmFpbHVyZXMgPSAwO1xuIFxuIFx0c3dpbV9kcml2ZShiYXNlLCBmcy1cdTAwM2Vsb2NhdGlvbik7XG4tXHRmb3IgKGkgPSByZXFfc2VjdG9yOyBpIFx1MDAzYyByZXFfc2VjdG9yICYjNDM7IHNlY3RvcnNfbmI7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGludCB4O1xuLVx0XHR0cmFjayA9IGkgLyBmcy1cdTAwM2VzZWNwZXJjeWw7XG4tXHRcdHggPSBpICUgZnMtXHUwMDNlc2VjcGVyY3lsO1xuLVx0XHRzaWRlID0geCAvIGZzLVx1MDAzZXNlY3BlcnRyYWNrO1xuLVx0XHRzZWN0b3IgPSB4ICUgZnMtXHUwMDNlc2VjcGVydHJhY2sgJiM0MzsgMTtcbi1cbi1cdFx0dHJ5ID0gNTtcbi1cdFx0ZG8ge1xuLVx0XHRcdHJldCA9IHN3aW1fcmVhZF9zZWN0b3IoZnMsIHNpZGUsIHRyYWNrLCBzZWN0b3IsXG4tXHRcdFx0XHRcdFx0YnVmZmVyKTtcbi1cdFx0XHRpZiAodHJ5LS0gPT0gMClcbi1cdFx0XHRcdHJldHVybiBCTEtfU1RTX0lPRVJSO1xuLVx0XHR9IHdoaWxlIChyZXQgIT0gNTEyKTtcbi1cbi1cdFx0YnVmZmVyICYjNDM7PSByZXQ7XG4mIzQzO1x0c3dpbV9SRUFEWV90aW1lb3V0KGJhc2UpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoc2VjdG9yc19uYikge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IGN5bCwgeCwgaGVhZCwgc2VjdG9yLCBuLCByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Y3lsID0gcmVxX3NlY3RvciAvIGZzLVx1MDAzZXNlY3BlcmN5bDtcbiYjNDM7XHRcdHggPSByZXFfc2VjdG9yICUgZnMtXHUwMDNlc2VjcGVyY3lsO1xuJiM0MztcdFx0aGVhZCA9ICh4IFx1MDAzZT0gZnMtXHUwMDNlc2VjcGVydHJhY2spID8gMSA6IDA7XG4mIzQzO1x0XHRzZWN0b3IgPSB4ICUgZnMtXHUwMDNlc2VjcGVydHJhY2s7XG4mIzQzO1x0XHRuID0gbWluKHNlY3RvcnNfbmIsIGZzLVx1MDAzZXNlY3BlcnRyYWNrIC0gc2VjdG9yKTtcbiYjNDM7XG4mIzQzO1x0XHRzd2ltX3RyYWNrKGZzLCBjeWwpO1xuJiM0MztcdFx0c3dpbV9oZWFkKGJhc2UsIGhlYWQpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHN3aW1fcmVhZF9zZWN0b3JfcmFuZ2UoZnMsIGhlYWQsIGN5bCwgc2VjdG9yICYjNDM7IDEsIG4sIGJ1ZmZlcik7XG4mIzQzO1x0XHRpZiAocmV0ICE9IG4pXG4mIzQzO1x0XHRcdCYjNDM7JiM0MztmYWlsdXJlcztcbiYjNDM7XHRcdGlmIChmYWlsdXJlcyBcdTAwM2U9IDUpXG4mIzQzO1x0XHRcdHJldHVybiBCTEtfU1RTX0lPRVJSO1xuJiM0MztcbiYjNDM7XHRcdGJ1ZmZlciAmIzQzOz0gNTEyICogcmV0O1xuJiM0MztcdFx0c2VjdG9yc19uYiAtPSByZXQ7XG4mIzQzO1x0XHRyZXFfc2VjdG9yICYjNDM7PSByZXQ7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC01MjcsMTIgJiM0Mzs1MzYsMTAgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBzd2ltX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgYmxrX21xX3F1ZXVlX2RhdGEgKmJkKVxuIHtcbiBcdHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzID0gaGN0eC1cdTAwM2VxdWV1ZS1cdTAwM2VxdWV1ZWRhdGE7XG4tXHRzdHJ1Y3Qgc3dpbV9wcml2ICpzd2QgPSBmcy1cdTAwM2Vzd2Q7XG4gXHRzdHJ1Y3QgcmVxdWVzdCAqcmVxID0gYmQtXHUwMDNlcnE7XG4gXHRibGtfc3RhdHVzX3QgZXJyO1xuIFxuLVx0aWYgKCFzcGluX3RyeWxvY2tfaXJxKFx1MDAyNnN3ZC1cdTAwM2Vsb2NrKSlcbi1cdFx0cmV0dXJuIEJMS19TVFNfREVWX1JFU09VUkNFO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2c3dpbV9tdXRleCk7XG4gXG4gXHRibGtfbXFfc3RhcnRfcmVxdWVzdChyZXEpO1xuIFxuQEAgLTU1MCwxNiAmIzQzOzU1NywxNiBAQCBzdGF0aWMgYmxrX3N0YXR1c190IHN3aW1fcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4gXG4gXHRlcnIgPSBCTEtfU1RTX09LO1xuIG91dDpcbi1cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZzd2QtXHUwMDNlbG9jayk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnN3aW1fbXV0ZXgpO1xuIFx0cmV0dXJuIGVycjtcbiBcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBmbG9wcHlfc3RydWN0IGZsb3BweV90eXBlWzRdID0ge1xuLVx0eyAgICAwLCAgMCwgMCwgIDAsIDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIE5VTEwgfSwgLyogbm8gdGVzdGluZyAgICovXG4mIzQzO1x0eyAgICAwLCAgMCwgMCwgIDAsIDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIE5VTEwgfSwgLyogbm8gdGVzdGluZyAqL1xuIFx0eyAgNzIwLCAgOSwgMSwgODAsIDAsIDB4MkEsIDB4MDIsIDB4REYsIDB4NTAsIE5VTEwgfSwgLyogMzYwS0IgU1MgMy41XCYjMzQ7Ki9cbi1cdHsgMTQ0MCwgIDksIDIsIDgwLCAwLCAweDJBLCAweDAyLCAweERGLCAweDUwLCBOVUxMIH0sIC8qIDcyMEtCIDMuNVwmIzM0OyAgICovXG4tXHR7IDI4ODAsIDE4LCAyLCA4MCwgMCwgMHgxQiwgMHgwMCwgMHhDRiwgMHg2QywgTlVMTCB9LCAvKiAxLjQ0TUIgMy41XCYjMzQ7ICAqL1xuJiM0MztcdHsgMTQ0MCwgIDksIDIsIDgwLCAwLCAweDJBLCAweDAyLCAweERGLCAweDUwLCBOVUxMIH0sIC8qIDcyMEtCIDMuNVwmIzM0OyAqL1xuJiM0MztcdHsgMjg4MCwgMTgsIDIsIDgwLCAwLCAweDFCLCAweDAwLCAweENGLCAweDZDLCBOVUxMIH0sIC8qIDEuNDRNQiAzLjVcJiMzNDsgKi9cbiB9O1xuIFxuIHN0YXRpYyBpbnQgZ2V0X2Zsb3BweV9nZW9tZXRyeShzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcywgaW50IHR5cGUsXG5AQCAtNTg2LDIzICYjNDM7NTkzLDE2IEBAIHN0YXRpYyB2b2lkIHNldHVwX21lZGl1bShzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcylcbiBcbiBcdGlmIChzd2ltX3JlYWRiaXQoYmFzZSwgRElTS19JTikpIHtcbiBcdFx0c3RydWN0IGZsb3BweV9zdHJ1Y3QgKmc7XG4mIzQzO1xuIFx0XHRmcy1cdTAwM2VkaXNrX2luID0gMTtcbiBcdFx0ZnMtXHUwMDNld3JpdGVfcHJvdGVjdGVkID0gc3dpbV9yZWFkYml0KGJhc2UsIFdSSVRFX1BST1QpO1xuLVxuLVx0XHRpZiAoc3dpbV90cmFjazAwKGJhc2UpKVxuLVx0XHRcdHByaW50ayhLRVJOX0VSUlxuLVx0XHRcdFx0XCYjMzQ7U1dJTTogY2Fubm90IG1vdmUgZmxvcHB5IGhlYWQgdG8gdHJhY2sgMFxcblwmIzM0Oyk7XG4tXG4tXHRcdHN3aW1fdHJhY2swMChiYXNlKTtcbi1cbiBcdFx0ZnMtXHUwMDNldHlwZSA9IHN3aW1fcmVhZGJpdChiYXNlLCBUV09NRUdfTUVESUEpID9cbi1cdFx0XHRIRF9NRURJQSA6IEREX01FRElBO1xuJiM0MztcdFx0XHQgICBIRF9NRURJQSA6IEREX01FRElBO1xuIFx0XHRmcy1cdTAwM2VoZWFkX251bWJlciA9IHN3aW1fcmVhZGJpdChiYXNlLCBTSU5HTEVfU0lERUQpID8gMSA6IDI7XG4gXHRcdGdldF9mbG9wcHlfZ2VvbWV0cnkoZnMsIDAsIFx1MDAyNmcpO1xuIFx0XHRmcy1cdTAwM2V0b3RhbF9zZWNzID0gZy1cdTAwM2VzaXplO1xuIFx0XHRmcy1cdTAwM2VzZWNwZXJjeWwgPSBnLVx1MDAzZWhlYWQgKiBnLVx1MDAzZXNlY3Q7XG4gXHRcdGZzLVx1MDAzZXNlY3BlcnRyYWNrID0gZy1cdTAwM2VzZWN0O1xuLVx0XHRmcy1cdTAwM2V0cmFjayA9IDA7XG4gXHR9IGVsc2Uge1xuIFx0XHRmcy1cdTAwM2VkaXNrX2luID0gMDtcbiBcdH1cbkBAIC02MjAsMTEgJiM0Mzs2MjAsOSBAQCBzdGF0aWMgaW50IGZsb3BweV9vcGVuKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpXG4gXHRcdGZzLVx1MDAzZXJlZl9jb3VudCA9IC0xO1xuIFx0ZWxzZVxuIFx0XHRmcy1cdTAwM2VyZWZfY291bnQmIzQzOyYjNDM7O1xuLVx0c3dpbV93cml0ZShiYXNlLCBzZXR1cCwgU19JQk1fRFJJVkUgIHwgU19GQ0xLX0RJVjIpO1xuLVx0dWRlbGF5KDEwKTtcbiYjNDM7XG4gXHRzd2ltX2RyaXZlKGJhc2UsIGZzLVx1MDAzZWxvY2F0aW9uKTtcbi1cdHN3aW1fbW90b3IoYmFzZSwgT04pO1xuLVx0c3dpbV9hY3Rpb24oYmFzZSwgU0VUTUZNKTtcbiYjNDM7XG4gXHRpZiAoZnMtXHUwMDNlZWplY3RlZClcbiBcdFx0c2V0dXBfbWVkaXVtKGZzKTtcbiBcdGlmICghZnMtXHUwMDNlZGlza19pbikge1xuQEAgLTYzMiw2ICYjNDM7NjMwLDExIEBAIHN0YXRpYyBpbnQgZmxvcHB5X29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4mIzQzO1x0c3dpbV9tb3RvcihiYXNlLCBPTik7XG4mIzQzO1x0c3dpbV9hY3Rpb24oYmFzZSwgU0VUTUZNKTtcbiYjNDM7XHRtc2xlZXAoMzApO1xuJiM0MztcdHN3aW1fUkVBRFlfdGltZW91dChiYXNlKTtcbiYjNDM7XG4gXHRzZXRfY2FwYWNpdHkoZnMtXHUwMDNlZGlzaywgZnMtXHUwMDNldG90YWxfc2Vjcyk7XG4gXG4gXHRpZiAobW9kZSBcdTAwMjYgQkxLX09QRU5fTkRFTEFZKVxuQEAgLTY1Miw4ICYjNDM7NjU1LDEwIEBAIHN0YXRpYyBpbnQgZmxvcHB5X29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcbiBcdGVsc2UgaWYgKGZzLVx1MDAzZXJlZl9jb3VudCBcdTAwM2UgMClcbiBcdFx0LS1mcy1cdTAwM2VyZWZfY291bnQ7XG4gXG4tXHRpZiAoZnMtXHUwMDNlcmVmX2NvdW50ID09IDApXG4mIzQzO1x0aWYgKGZzLVx1MDAzZXJlZl9jb3VudCA9PSAwKSB7XG4gXHRcdHN3aW1fbW90b3IoYmFzZSwgT0ZGKTtcbiYjNDM7XHRcdHN3aW1fZHJpdmUoYmFzZSwgTk9fRFJJVkUpO1xuJiM0MztcdH1cbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTY3OSw4ICYjNDM7Njg0LDExIEBAIHN0YXRpYyB2b2lkIGZsb3BweV9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIFx0ZWxzZSBpZiAoZnMtXHUwMDNlcmVmX2NvdW50IFx1MDAzZSAwKVxuIFx0XHQtLWZzLVx1MDAzZXJlZl9jb3VudDtcbiBcbi1cdGlmIChmcy1cdTAwM2VyZWZfY291bnQgPT0gMClcbiYjNDM7XHRpZiAoZnMtXHUwMDNlcmVmX2NvdW50ID09IDApIHtcbiYjNDM7XHRcdHN3aW1fZHJpdmUoYmFzZSwgZnMtXHUwMDNlbG9jYXRpb24pO1xuIFx0XHRzd2ltX21vdG9yKGJhc2UsIE9GRik7XG4mIzQzO1x0XHRzd2ltX2RyaXZlKGJhc2UsIE5PX0RSSVZFKTtcbiYjNDM7XHR9XG4gXHRtdXRleF91bmxvY2soXHUwMDI2c3dpbV9tdXRleCk7XG4gfVxuIFxuQEAgLTY5MSw3ICYjNDM7Njk5LDcgQEAgc3RhdGljIGludCBmbG9wcHlfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuIFx0aW50IGVycjtcbiBcbiBcdGlmICgoY21kIFx1MDAyNiAweDgwKSBcdTAwMjZcdTAwMjYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpXG4tXHRcdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XHRcdHJldHVybiAtRVBFUk07XG4gXG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBGREVKRUNUOlxuQEAgLTc1MCwxMCAmIzQzOzc1OCw5IEBAIHN0YXRpYyBpbnQgc3dpbV9hZGRfZmxvcHB5KHN0cnVjdCBzd2ltX3ByaXYgKnN3ZCwgZW51bSBkcml2ZV9sb2NhdGlvbiBsb2NhdGlvbilcbiBcdHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzID0gXHUwMDI2c3dkLVx1MDAzZXVuaXRbc3dkLVx1MDAzZWZsb3BweV9jb3VudF07XG4gXHRzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gc3dkLVx1MDAzZWJhc2U7XG4gXG4mIzQzO1x0ZnMtXHUwMDNlc3dkID0gc3dkO1xuIFx0ZnMtXHUwMDNlbG9jYXRpb24gPSBsb2NhdGlvbjtcbiBcbi1cdHN3aW1fZHJpdmUoYmFzZSwgbG9jYXRpb24pO1xuLVxuIFx0c3dpbV9tb3RvcihiYXNlLCBPRkYpO1xuIFxuIFx0ZnMtXHUwMDNldHlwZSA9IEhEX01FRElBO1xuQEAgLTc2MSw2ICYjNDM7NzY4LDcgQEAgc3RhdGljIGludCBzd2ltX2FkZF9mbG9wcHkoc3RydWN0IHN3aW1fcHJpdiAqc3dkLCBlbnVtIGRyaXZlX2xvY2F0aW9uIGxvY2F0aW9uKVxuIFxuIFx0ZnMtXHUwMDNlcmVmX2NvdW50ID0gMDtcbiBcdGZzLVx1MDAzZWVqZWN0ZWQgPSAxO1xuJiM0MztcdGZzLVx1MDAzZXRyYWNrID0gMDtcbiBcbiBcdHN3ZC1cdTAwM2VmbG9wcHlfY291bnQmIzQzOyYjNDM7O1xuIFxuQEAgLTc4NSwyNSAmIzQzOzc5Myw0MyBAQCBzdGF0aWMgdm9pZCBzd2ltX2NsZWFudXBfZmxvcHB5X2Rpc2soc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMpXG4gXHRibGtfbXFfZnJlZV90YWdfc2V0KFx1MDAyNmZzLVx1MDAzZXRhZ19zZXQpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHN3aW1fZmxvcHB5X2luaXQoc3RydWN0IHN3aW1fcHJpdiAqc3dkKVxuJiM0MztzdGF0aWMgdm9pZCBzd2ltX3NldF9wYXJhbWV0ZXJzKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XHRzdGF0aWMgY29uc3QgdTggbWVtW10gPSB7IDB4MTgsIDB4NDEsIDB4MmUsIDB4MmUsIDB4MTgsIDB4MTgsIDB4MWIsIDB4MWIsXG4mIzQzO1x0XHRcdFx0ICAweDJmLCAweDJmLCAweDE5LCAweDE5LCAweDk3LCAweDFiLCAweDU3LCAweDNiLCB9O1xuJiM0MztcbiYjNDM7XHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCAwKTsgLyogcmVzZXQgcGFyYW1ldGVyIG1lbW9yeSBpbmRleCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDE2OyAmIzQzOyYjNDM7aSlcbiYjNDM7XHRcdHN3aW1fd3JpdGUoYmFzZSwgcGFyYW1ldGVyLCBtZW1baV0pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHN3aW1fZmxvcHB5X2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiB7XG4mIzQzO1x0c3RydWN0IHN3aW1fcHJpdiAqc3dkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XG4mIzQzO1x0dW5zaWduZWQgaW50ICpkYXRhID0gcGRldi1cdTAwM2VkZXYucGxhdGZvcm1fZGF0YTtcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0ge1xuLVx0XHQuZmVhdHVyZXNcdFx0PSBCTEtfRkVBVF9ST1RBVElPTkFMLFxuJiM0MztcdFx0LmZlYXR1cmVzID0gQkxLX0ZFQVRfUk9UQVRJT05BTCxcbiBcdH07XG4gXHRpbnQgZXJyO1xuIFx0aW50IGRyaXZlO1xuIFx0c3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IHN3ZC1cdTAwM2ViYXNlO1xuIFxuJiM0MztcdHN3aW1fd3JpdGUoYmFzZSwgc2V0dXAsIFNfSUJNX0RSSVZFIHwgKCpkYXRhID8gU19GQ0xLX0RJVjIgOiAwKSk7XG4mIzQzO1xuJiM0MztcdHN3aW1fc2V0X3BhcmFtZXRlcnMoYmFzZSk7XG4mIzQzO1xuIFx0Lyogc2NhbiBmbG9wcHkgZHJpdmVzICovXG4gXG4gXHRzd2ltX2RyaXZlKGJhc2UsIElOVEVSTkFMX0RSSVZFKTtcbiBcdGlmIChzd2ltX3JlYWRiaXQoYmFzZSwgRFJJVkVfUFJFU0VOVCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIXN3aW1fcmVhZGJpdChiYXNlLCBPTkVNRUdfRFJJVkUpKVxuJiM0MztcdCAgICAhc3dpbV9yZWFkYml0KGJhc2UsIE9ORU1FR19EUklWRSkgXHUwMDI2XHUwMDI2ICFzd2ltX3RyYWNrMDAoYmFzZSkpXG4gXHRcdHN3aW1fYWRkX2Zsb3BweShzd2QsIElOVEVSTkFMX0RSSVZFKTtcbiBcdHN3aW1fZHJpdmUoYmFzZSwgRVhURVJOQUxfRFJJVkUpO1xuIFx0aWYgKHN3aW1fcmVhZGJpdChiYXNlLCBEUklWRV9QUkVTRU5UKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhc3dpbV9yZWFkYml0KGJhc2UsIE9ORU1FR19EUklWRSkpXG4mIzQzO1x0ICAgICFzd2ltX3JlYWRiaXQoYmFzZSwgT05FTUVHX0RSSVZFKSBcdTAwMjZcdTAwMjYgIXN3aW1fdHJhY2swMChiYXNlKSlcbiBcdFx0c3dpbV9hZGRfZmxvcHB5KHN3ZCwgRVhURVJOQUxfRFJJVkUpO1xuJiM0MztcdHN3aW1fZHJpdmUoYmFzZSwgTk9fRFJJVkUpO1xuIFxuIFx0LyogcmVnaXN0ZXIgZmxvcHB5IGRyaXZlcyAqL1xuIFxuQEAgLTgxNCwxMSAmIzQzOzg0MCw5IEBAIHN0YXRpYyBpbnQgc3dpbV9mbG9wcHlfaW5pdChzdHJ1Y3Qgc3dpbV9wcml2ICpzd2QpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXHR9XG4gXG4tXHRzcGluX2xvY2tfaW5pdChcdTAwMjZzd2QtXHUwMDNlbG9jayk7XG4tXG4gXHRmb3IgKGRyaXZlID0gMDsgZHJpdmUgXHUwMDNjIHN3ZC1cdTAwM2VmbG9wcHlfY291bnQ7IGRyaXZlJiM0MzsmIzQzOykge1xuIFx0XHRlcnIgPSBibGtfbXFfYWxsb2Nfc3FfdGFnX3NldChcdTAwMjZzd2QtXHUwMDNldW5pdFtkcml2ZV0udGFnX3NldCxcbi1cdFx0XHRcdFx1MDAyNnN3aW1fbXFfb3BzLCAyLCAwKTtcbiYjNDM7XHRcdFx0XHRcdTAwMjZzd2ltX21xX29wcywgMiwgQkxLX01RX0ZfQkxPQ0tJTkcpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gZXhpdF9wdXRfZGlza3M7XG4gXG5AQCAtODMwLDggJiM0Mzs4NTQsNiBAQCBzdGF0aWMgaW50IHN3aW1fZmxvcHB5X2luaXQoc3RydWN0IHN3aW1fcHJpdiAqc3dkKVxuIFx0XHRcdGVyciA9IFBUUl9FUlIoc3dkLVx1MDAzZXVuaXRbZHJpdmVdLmRpc2spO1xuIFx0XHRcdGdvdG8gZXhpdF9wdXRfZGlza3M7XG4gXHRcdH1cbi1cbi1cdFx0c3dkLVx1MDAzZXVuaXRbZHJpdmVdLnN3ZCA9IHN3ZDtcbiBcdH1cbiBcbiBcdGZvciAoZHJpdmUgPSAwOyBkcml2ZSBcdTAwM2Mgc3dkLVx1MDAzZWZsb3BweV9jb3VudDsgZHJpdmUmIzQzOyYjNDM7KSB7XG5AQCAtOTA1LDcgJiM0Mzs5MjcsNyBAQCBzdGF0aWMgaW50IHN3aW1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KVxuIFxuIFx0c3dkLVx1MDAzZWJhc2UgPSBzd2ltX2Jhc2U7XG4gXG4tXHRyZXQgPSBzd2ltX2Zsb3BweV9pbml0KHN3ZCk7XG4mIzQzO1x0cmV0ID0gc3dpbV9mbG9wcHlfaW5pdChkZXYpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfa2ZyZWU7XG4gXG5AQCAtOTQ1LDcgJiM0Mzs5NjcsNyBAQCBzdGF0aWMgdm9pZCBzd2ltX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpXG4gc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc3dpbV9kcml2ZXIgPSB7XG4gXHQucHJvYmUgID0gc3dpbV9wcm9iZSxcbiBcdC5yZW1vdmUgPSBzd2ltX3JlbW92ZSxcbi1cdC5kcml2ZXIgICA9IHtcbiYjNDM7XHQuZHJpdmVyID0ge1xuIFx0XHQubmFtZVx0PSBDQVJETkFNRSxcbiBcdH0sXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N3aW1fYXNtLlMgYi9kcml2ZXJzL2Jsb2NrL3N3aW1fYXNtLlNcbmluZGV4IDNkN2EyZDg3NTk1YTU3Li42NWI0ZTQ2NThlMTBjNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svc3dpbV9hc20uU1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TXG5AQCAtNSw3ICYjNDM7NSw3IEBAXG4gICogbmVlZHMgYXNzZW1ibHkgbGFuZ3VhZ2UgYmVjYXVzZSBpcyB2ZXJ5IHRpbWluZyBkZXBlbmRlbnRcbiAgKiB0aGlzIGNvbnRyb2xsZXIgZXhpc3RzIG9ubHkgb24gbWFjaW50b3NoIDY4MHgwIGJhc2VkXG4gICpcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwOCBMYXVyZW50IFZpdmllciBcdTAwM2NMYXVyZW50QGx2aXZpZXIuaW5mb1x1MDAzZVxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggTGF1cmVudCBWaXZpZXIgXHUwMDNjTGF1cmVudEBsdml2aWVyLmluZm9cdTAwM2VcbiAgKlxuICAqIGJhc2VkIG9uIEFsYXN0YWlyIEJyaWRnZXdhdGVyIFNXSU0gYW5hbHlzaXMsIDIwMDFcbiAgKiBiYXNlZCBvbiBuZXRCU0QgSVdNIGRyaXZlciAoYykgMTk5NywgMTk5OCBIYXVrZSBGYXRoLlxuQEAgLTE0LDEzNSAmIzQzOzE0LDEzOCBAQFxuICAqIDIwMDgtMTEtMDUgKGx2KSAtIGFkZCBnZXRfc3dpbV9tb2RlXG4gICovXG4gXG4tXHQuZXF1XHR3cml0ZV9kYXRhLFx0MHgwMDAwXG4tXHQuZXF1XHR3cml0ZV9tYXJrLFx0MHgwMjAwXG4tXHQuZXF1XHR3cml0ZV9DUkMsXHQweDA0MDBcbi1cdC5lcXVcdHdyaXRlX3BhcmFtZXRlciwweDA2MDBcbi1cdC5lcXVcdHdyaXRlX3BoYXNlLFx0MHgwODAwXG4tXHQuZXF1XHR3cml0ZV9zZXR1cCxcdDB4MGEwMFxuLVx0LmVxdVx0d3JpdGVfbW9kZTAsXHQweDBjMDBcbi1cdC5lcXVcdHdyaXRlX21vZGUxLFx0MHgwZTAwXG4tXHQuZXF1XHRyZWFkX2RhdGEsXHQweDEwMDBcbi1cdC5lcXVcdHJlYWRfbWFyayxcdDB4MTIwMFxuLVx0LmVxdVx0cmVhZF9lcnJvcixcdDB4MTQwMFxuLVx0LmVxdVx0cmVhZF9wYXJhbWV0ZXIsXHQweDE2MDBcbi1cdC5lcXVcdHJlYWRfcGhhc2UsXHQweDE4MDBcbi1cdC5lcXVcdHJlYWRfc2V0dXAsXHQweDFhMDBcbi1cdC5lcXVcdHJlYWRfc3RhdHVzLFx0MHgxYzAwXG4tXHQuZXF1XHRyZWFkX2hhbmRzaGFrZSxcdDB4MWUwMFxuLVxuLVx0LmVxdVx0b19zaWRlLCAwXG4tXHQuZXF1XHRvX3RyYWNrLCAxXG4tXHQuZXF1XHRvX3NlY3RvciwgMlxuLVx0LmVxdVx0b19zaXplLCAzXG4tXHQuZXF1XHRvX2NyYzAsIDRcbi1cdC5lcXVcdG9fY3JjMSwgNVxuLVxuLVx0LmVxdVx0c2Vla190aW1lLCAzMDAwMFxuLVx0LmVxdVx0bWF4X3JldHJ5LCA0MFxuLVx0LmVxdVx0c2VjdG9yX3NpemUsIDUxMlxuJiM0MztcdC5lcXVcdC5Md3JpdGVfZGF0YSxcdFx0MHgwMDAwXG4mIzQzO1x0LmVxdVx0Lkx3cml0ZV9tYXJrLFx0XHQweDAyMDBcbiYjNDM7XHQuZXF1XHQuTHdyaXRlX0NSQyxcdFx0MHgwNDAwXG4mIzQzO1x0LmVxdVx0Lkx3cml0ZV9wYXJhbWV0ZXIsXHQweDA2MDBcbiYjNDM7XHQuZXF1XHQuTHdyaXRlX3BoYXNlLFx0XHQweDA4MDBcbiYjNDM7XHQuZXF1XHQuTHdyaXRlX3NldHVwLFx0XHQweDBhMDBcbiYjNDM7XHQuZXF1XHQuTHdyaXRlX21vZGUwLFx0XHQweDBjMDBcbiYjNDM7XHQuZXF1XHQuTHdyaXRlX21vZGUxLFx0XHQweDBlMDBcbiYjNDM7XHQuZXF1XHQuTHJlYWRfZGF0YSxcdFx0MHgxMDAwXG4mIzQzO1x0LmVxdVx0LkxyZWFkX21hcmssXHRcdDB4MTIwMFxuJiM0MztcdC5lcXVcdC5McmVhZF9lcnJvcixcdFx0MHgxNDAwXG4mIzQzO1x0LmVxdVx0LkxyZWFkX3BhcmFtZXRlcixcdDB4MTYwMFxuJiM0MztcdC5lcXVcdC5McmVhZF9waGFzZSxcdFx0MHgxODAwXG4mIzQzO1x0LmVxdVx0LkxyZWFkX3NldHVwLFx0XHQweDFhMDBcbiYjNDM7XHQuZXF1XHQuTHJlYWRfc3RhdHVzLFx0XHQweDFjMDBcbiYjNDM7XHQuZXF1XHQuTHJlYWRfaGFuZHNoYWtlLFx0MHgxZTAwXG4mIzQzO1xuJiM0MztcdC5lcXVcdC5Mb19zaWRlLFx0XHQwXG4mIzQzO1x0LmVxdVx0LkxvX3RyYWNrLFx0XHQxXG4mIzQzO1x0LmVxdVx0LkxvX3NlY3RvcixcdFx0MlxuJiM0MztcdC5lcXVcdC5Mb19zaXplLFx0XHQzXG4mIzQzO1x0LmVxdVx0LkxvX2NyYzAsXHRcdDRcbiYjNDM7XHQuZXF1XHQuTG9fY3JjMSxcdFx0NVxuJiM0MztcbiYjNDM7XHQuZXF1XHQuTHNlZWtfdGltZSxcdFx0MzAwMDBcbiYjNDM7XHQuZXF1XHQuTG1heF9yZXRyeSxcdFx0NDBcbiYjNDM7XHQuZXF1XHQuTHNlY3Rvcl9zaXplLFx0XHQ1MTJcbiYjNDM7XG4mIzQzO1x0LmVxdVx0Lkxtcl9jbGVhcl9maWZvLFx0MHgwMVxuJiM0MztcdC5lcXVcdC5MbXJfYWN0aW9uLFx0XHQweDA4XG4mIzQzO1x0LmVxdVx0Lkxtcl93cml0ZV9hY3Rpb24sXHQweDE4XG4mIzQzO1xuJiM0MztcdC5lcXVcdC5MaHJfY3JjX2Vycm9yLFx0XHQweDAyXG4mIzQzO1x0LmVxdVx0Lkxocl9maWZvXzJieXRlcyxcdDB4NDBcbiYjNDM7XHQuZXF1XHQuTGhyX2ZpZm9fMWJ5dGUsXHQweDgwXG4gXG4gXHQuZ2xvYmFsIHN3aW1fcmVhZF9zZWN0b3JfaGVhZGVyXG4gc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXI6XG4gXHRsaW5rXHQlYTYsICMwXG4tXHRtb3ZlbWxcdCVkMS0lZDUvJWEwLSVhNCwlc3BALVxuJiM0MztcdG1vdmVtbFx0JWQxLSVkNS8lYTAtJWE1LCVzcEAtXG4gXHRtb3ZlbFx0JWE2QCgweDBjKSwgJWE0XG4tXHRic3JcdG1mbV9yZWFkX2FkZHJtYXJrXG4tXHRtb3ZlbWxcdCVzcEAmIzQzOywgJWQxLSVkNS8lYTAtJWE0XG4mIzQzO1x0bW92ZXFcdCMtMSwgJWQwXG4mIzQzO1x0YnNyXHQuTG1mbV9yZWFkX2FkZHJtYXJrXG4mIzQzO1x0bW92ZW1sXHQlc3BAJiM0MzssICVkMS0lZDUvJWEwLSVhNVxuIFx0dW5sa1x0JWE2XG4gXHRydHNcbiBcbi1zZWN0b3JfYWRkcmVzc19tYXJrOlxuJiM0MzsuTHNlY3Rvcl9hZGRyZXNzX21hcms6XG4gXHQuYnl0ZVx0MHhhMSwgMHhhMSwgMHhhMSwgMHhmZVxuLXNlY3Rvcl9kYXRhX21hcms6XG4mIzQzOy5Mc2VjdG9yX2RhdGFfbWFyazpcbiBcdC5ieXRlXHQweGExLCAweGExLCAweGExLCAweGZiXG4gXG4tbWZtX3JlYWRfYWRkcm1hcms6XG4mIzQzOy5MbWZtX3JlYWRfYWRkcm1hcms6XG4gXHRtb3ZlbFx0JWE2QCgweDA4KSwgJWEzXG4tXHRsZWFcdCVhM0AocmVhZF9oYW5kc2hha2UpLCAlYTJcbi1cdGxlYVx0JWEzQChyZWFkX21hcmspLCAlYTNcbi1cdG1vdmVxXHQjLTEsICVkMFxuLVx0bW92ZXdcdCNzZWVrX3RpbWUsICVkMlxuLVxuLXdhaXRfaGVhZGVyX2luaXQ6XG4tXHR0c3RiXHQlYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspXG4tXHRtb3ZlYlx0IzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspXG4tXHRtb3ZlYlx0IzB4MDEsICVhM0Aod3JpdGVfbW9kZTEgLSByZWFkX21hcmspXG4tXHRtb3ZlYlx0IzB4MDEsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspXG4tXHR0c3RiXHQlYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspXG4tXHRtb3ZlYlx0IzB4MDgsICVhM0Aod3JpdGVfbW9kZTEgLSByZWFkX21hcmspXG4tXG4tXHRsZWFcdHNlY3Rvcl9hZGRyZXNzX21hcmssICVhMFxuJiM0MztcdGxlYVx0JWEzQCguTHJlYWRfaGFuZHNoYWtlKSwgJWEyXG4mIzQzO1x0bGVhXHQlYTNAKC5McmVhZF9kYXRhKSwgJWE1XG4mIzQzO1x0bGVhXHQlYTNAKC5McmVhZF9tYXJrKSwgJWEzXG4mIzQzO1x0bW92ZXdcdCMuTHNlZWtfdGltZSwgJWQyXG4mIzQzO1xuJiM0MzsuTHdhaXRfaGVhZGVyX2luaXQ6XG4mIzQzO1x0bW92ZWJcdCMuTG1yX3dyaXRlX2FjdGlvbiwgJWEzQCguTHdyaXRlX21vZGUwIC0gLkxyZWFkX21hcmspXG4mIzQzO1x0bW92ZWJcdCMuTG1yX2NsZWFyX2ZpZm8sICVhM0AoLkx3cml0ZV9tb2RlMSAtIC5McmVhZF9tYXJrKVxuJiM0MztcdG1vdmViXHQjLkxtcl9jbGVhcl9maWZvLCAlYTNAKC5Md3JpdGVfbW9kZTAgLSAuTHJlYWRfbWFyaylcbiYjNDM7XHR0c3RiXHQlYTNAKC5McmVhZF9lcnJvciAtIC5McmVhZF9tYXJrKVxuJiM0MztcdG1vdmViXHQjLkxtcl9hY3Rpb24sICVhM0AoLkx3cml0ZV9tb2RlMSAtIC5McmVhZF9tYXJrKVxuJiM0MztcbiYjNDM7XHRsZWFcdC5Mc2VjdG9yX2FkZHJlc3NfbWFyaywgJWEwXG4gXHRtb3ZlcVx0IzMsICVkMVxuIFxuLXdhaXRfYWRkcl9tYXJrX2J5dGU6XG4tXG4mIzQzOy5Md2FpdF9hZGRyX21hcmtfYnl0ZTpcbiBcdHRzdGJcdCVhMkBcbi1cdGRibWlcdCVkMiwgd2FpdF9hZGRyX21hcmtfYnl0ZVxuLVx0YnBsXHRoZWFkZXJfZXhpdFxuJiM0MztcdGRibWlcdCVkMiwgLkx3YWl0X2FkZHJfbWFya19ieXRlXG4mIzQzO1x0YnBsXHQuTHNpZ25hbF9ub255YlxuIFxuIFx0bW92ZWJcdCVhM0AsICVkM1xuIFx0Y21wYlx0JWEwQCYjNDM7LCAlZDNcbi1cdGRibmVcdCVkMSwgd2FpdF9hZGRyX21hcmtfYnl0ZVxuLVx0Ym5lXHR3YWl0X2hlYWRlcl9pbml0XG4tXG4tXHRtb3ZlcVx0I21heF9yZXRyeSwgJWQyXG4mIzQzO1x0ZGJuZVx0JWQxLCAuTHdhaXRfYWRkcl9tYXJrX2J5dGVcbiYjNDM7XHRibmVcdC5Md2FpdF9oZWFkZXJfaW5pdFxuIFxuLWFtYXJrMDpcdHRzdGJcdCVhMkBcbi1cdGRibWlcdCVkMiwgYW1hcmswXG4tXHRicGxcdHNpZ25hbF9ub255YlxuLVxuLVx0bW92ZWJcdCVhM0AsICVhNEAob190cmFjaylcbi1cbi1cdG1vdmVxXHQjbWF4X3JldHJ5LCAlZDJcbi1cbi1hbWFyazE6XHR0c3RiXHQlYTJAXG4tXHRkYm1pXHQlZDIsIGFtYXJrMVxuLVx0YnBsXHRzaWduYWxfbm9ueWJcbi1cbi1cdG1vdmViXHQlYTNALCAlYTRAKG9fc2lkZSlcbi1cbi1cdG1vdmVxXHQjbWF4X3JldHJ5LCAlZDJcbiYjNDM7XHRtb3ZlcVx0Iy5MbWF4X3JldHJ5LCAlZDJcbiYjNDM7LkxhbWFyazA6XG4mIzQzO1x0dHN0Ylx0JWEyQFxuJiM0MztcdGRibWlcdCVkMiwgLkxhbWFyazBcbiYjNDM7XHRicGxcdC5Mc2lnbmFsX25vbnliXG4gXG4tYW1hcmsyOlx0dHN0Ylx0JWEyQFxuLVx0ZGJtaVx0JWQyLCBhbWFyazJcbi1cdGJwbFx0c2lnbmFsX25vbnliXG4mIzQzO1x0bW92ZWJcdCVhNUAsICVhNEAoLkxvX3RyYWNrKVxuIFxuLVx0bW92ZWJcdCVhM0AsICVhNEAob19zZWN0b3IpXG4mIzQzO1x0bW92ZXFcdCMuTG1heF9yZXRyeSwgJWQyXG4mIzQzOy5MYW1hcmsxOlxuJiM0MztcdHRzdGJcdCVhMkBcbiYjNDM7XHRkYm1pXHQlZDIsIC5MYW1hcmsxXG4mIzQzO1x0YnBsXHQuTHNpZ25hbF9ub255YlxuIFxuLVx0bW92ZXFcdCNtYXhfcmV0cnksICVkMlxuJiM0MztcdG1vdmViXHQlYTVALCAlYTRAKC5Mb19zaWRlKVxuIFxuLWFtYXJrMzpcdHRzdGJcdCVhMkBcbi1cdGRibWlcdCVkMiwgYW1hcmszXG4tXHRicGxcdHNpZ25hbF9ub255YlxuJiM0MztcdG1vdmVxXHQjLkxtYXhfcmV0cnksICVkMlxuJiM0MzsuTGFtYXJrMjpcbiYjNDM7XHR0c3RiXHQlYTJAXG4mIzQzO1x0ZGJtaVx0JWQyLCAuTGFtYXJrMlxuJiM0MztcdGJwbFx0LkxzaWduYWxfbm9ueWJcbiBcbi1cdG1vdmViXHQlYTNALCAlYTRAKG9fc2l6ZSlcbiYjNDM7XHRtb3ZlYlx0JWE1QCwgJWE0QCguTG9fc2VjdG9yKVxuIFxuLVx0bW92ZXFcdCNtYXhfcmV0cnksICVkMlxuJiM0MztcdG1vdmVxXHQjLkxtYXhfcmV0cnksICVkMlxuJiM0MzsuTGFtYXJrMzpcbiYjNDM7XHR0c3RiXHQlYTJAXG4mIzQzO1x0ZGJtaVx0JWQyLCAuTGFtYXJrM1xuJiM0MztcdGJwbFx0LkxzaWduYWxfbm9ueWJcbiBcbi1jcmMwOlx0dHN0Ylx0JWEyQFxuLVx0ZGJtaVx0JWQyLCBjcmMwXG4tXHRicGxcdHNpZ25hbF9ub255YlxuJiM0MztcdG1vdmViXHQlYTVALCAlYTRAKC5Mb19zaXplKVxuIFxuLVx0bW92ZWJcdCVhM0AsICVhNEAob19jcmMwKVxuJiM0MztcdG1vdmVxXHQjLkxtYXhfcmV0cnksICVkMlxuJiM0MzsuTGNyYzA6XG4mIzQzO1x0dHN0Ylx0JWEyQFxuJiM0MztcdGRibWlcdCVkMiwgLkxjcmMwXG4mIzQzO1x0YnBsXHQuTHNpZ25hbF9ub255YlxuIFxuLVx0bW92ZXFcdCNtYXhfcmV0cnksICVkMlxuJiM0MztcdG1vdmViXHQlYTVALCAlYTRAKC5Mb19jcmMwKVxuIFxuLWNyYzE6XHR0c3RiXHQlYTJAXG4tXHRkYm1pXHQlZDIsIGNyYzFcbi1cdGJwbFx0c2lnbmFsX25vbnliXG4mIzQzO1x0bW92ZXFcdCMuTG1heF9yZXRyeSwgJWQyXG4mIzQzOy5MY3JjMTpcdG1vdmViXHQlYTJALCAlZDVcbiYjNDM7XHRkYm1pXHQlZDIsIC5MY3JjMVxuJiM0MztcdGJwbFx0LkxzaWduYWxfbm9ueWJcbiBcbi1cdG1vdmViXHQlYTNALCAlYTRAKG9fY3JjMSlcbiYjNDM7XHRtb3ZlYlx0JWE1QCwgJWE0QCguTG9fY3JjMSlcbiBcbi1cdHRzdGJcdCVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaylcbiYjNDM7XHRhbmRiXHQjLkxocl9jcmNfZXJyb3IsICVkNVxuJiM0MztcdGJuZVx0LkxzaWduYWxfbm9ueWJcbiBcbi1oZWFkZXJfZXhpdDpcbiBcdG1vdmVxXHQjMCwgJWQwXG4tXHRtb3ZlYlx0IzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspXG4tXHRydHNcbi1zaWduYWxfbm9ueWI6XG4tXHRtb3ZlcVx0Iy0xLCAlZDBcbi1cdG1vdmViXHQjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaylcbiYjNDM7LkxzaWduYWxfbm9ueWI6XG4mIzQzO1x0bW92ZWJcdCMuTG1yX3dyaXRlX2FjdGlvbiwgJWEzQCguTHdyaXRlX21vZGUwIC0gLkxyZWFkX21hcmspXG4gXHRydHNcbiBcbiBcdC5nbG9iYWwgc3dpbV9yZWFkX3NlY3Rvcl9kYXRhXG5AQCAtMTUwLDk0ICYjNDM7MTUzLDg3IEBAIHN3aW1fcmVhZF9zZWN0b3JfZGF0YTpcbiBcdGxpbmtcdCVhNiwgIzBcbiBcdG1vdmVtbFx0JWQxLSVkNS8lYTAtJWE1LCVzcEAtXG4gXHRtb3ZlbFx0JWE2QCgweDBjKSwgJWE0XG4tXHRic3JcdG1mbV9yZWFkX2RhdGFcbiYjNDM7XHRtb3ZlcVx0Iy0xLCAlZDBcbiYjNDM7XHRic3JcdC5MbWZtX3JlYWRfZGF0YVxuIFx0bW92ZW1sXHQlc3BAJiM0MzssICVkMS0lZDUvJWEwLSVhNVxuIFx0dW5sa1x0JWE2XG4gXHRydHNcbiBcbi1tZm1fcmVhZF9kYXRhOlxuJiM0MzsuTG1mbV9yZWFkX2RhdGE6XG4gXHRtb3ZlbFx0JWE2QCgweDA4KSwgJWEzXG4tXHRsZWFcdCVhM0AocmVhZF9oYW5kc2hha2UpLCAlYTJcbi1cdGxlYVx0JWEzQChyZWFkX2RhdGEpLCAlYTVcbi1cdGxlYVx0JWEzQChyZWFkX21hcmspLCAlYTNcbi1cdG1vdmV3XHQjc2Vla190aW1lLCAlZDJcbi1cbi13YWl0X2RhdGFfaW5pdDpcbi1cdHRzdGJcdCVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaylcbi1cdG1vdmViXHQjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaylcbi1cdG1vdmViXHQjMHgwMSwgJWEzQCh3cml0ZV9tb2RlMSAtIHJlYWRfbWFyaylcbi1cdG1vdmViXHQjMHgwMSwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaylcbi1cdHRzdGJcdCVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaylcbi1cdG1vdmViXHQjMHgwOCwgJWEzQCh3cml0ZV9tb2RlMSAtIHJlYWRfbWFyaylcbi1cbi1cdGxlYVx0c2VjdG9yX2RhdGFfbWFyaywgJWEwXG4mIzQzO1x0bGVhXHQlYTNAKC5McmVhZF9oYW5kc2hha2UpLCAlYTJcbiYjNDM7XHRsZWFcdCVhM0AoLkxyZWFkX2RhdGEpLCAlYTVcbiYjNDM7XHRsZWFcdCVhM0AoLkxyZWFkX21hcmspLCAlYTNcbiYjNDM7XHRtb3Zld1x0Iy5Mc2Vla190aW1lLCAlZDJcbiYjNDM7XG4mIzQzOy5Md2FpdF9kYXRhX2luaXQ6XG4mIzQzO1x0bW92ZWJcdCMuTG1yX3dyaXRlX2FjdGlvbiwgJWEzQCguTHdyaXRlX21vZGUwIC0gLkxyZWFkX21hcmspXG4mIzQzO1x0bW92ZWJcdCMuTG1yX2NsZWFyX2ZpZm8sICVhM0AoLkx3cml0ZV9tb2RlMSAtIC5McmVhZF9tYXJrKVxuJiM0MztcdG1vdmViXHQjLkxtcl9jbGVhcl9maWZvLCAlYTNAKC5Md3JpdGVfbW9kZTAgLSAuTHJlYWRfbWFyaylcbiYjNDM7XHR0c3RiXHQlYTNAKC5McmVhZF9lcnJvciAtIC5McmVhZF9tYXJrKVxuJiM0MztcdG1vdmViXHQjLkxtcl9hY3Rpb24sICVhM0AoLkx3cml0ZV9tb2RlMSAtIC5McmVhZF9tYXJrKVxuJiM0MztcbiYjNDM7XHRsZWFcdC5Mc2VjdG9yX2RhdGFfbWFyaywgJWEwXG4gXHRtb3ZlcVx0IzMsICVkMVxuIFxuIFx0Lyogd2FpdCBkYXRhIGFkZHJlc3MgbWFyayAqL1xuIFxuLXdhaXRfZGF0YV9tYXJrX2J5dGU6XG4tXG4mIzQzOy5Md2FpdF9kYXRhX21hcmtfYnl0ZTpcbiBcdHRzdGJcdCVhMkBcbi1cdGRibWlcdCVkMiwgd2FpdF9kYXRhX21hcmtfYnl0ZVxuLVx0YnBsXHRkYXRhX2V4aXRcbiYjNDM7XHRkYm1pXHQlZDIsIC5Md2FpdF9kYXRhX21hcmtfYnl0ZVxuJiM0MztcdGJwbFx0LkxkYXRhX2V4aXRcbiBcbiBcdG1vdmViXHQlYTNALCAlZDNcbiBcdGNtcGJcdCVhMEAmIzQzOywgJWQzXG4tXHRkYm5lXHQlZDEsIHdhaXRfZGF0YV9tYXJrX2J5dGVcbi1cdGJuZVx0d2FpdF9kYXRhX2luaXRcbiYjNDM7XHRkYm5lXHQlZDEsIC5Md2FpdF9kYXRhX21hcmtfYnl0ZVxuJiM0MztcdGJuZVx0Lkx3YWl0X2RhdGFfaW5pdFxuIFxuIFx0LyogcmVhZCBkYXRhICovXG4gXG4tXHR0c3RiXHQlYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspXG4tXG4tXHRtb3ZlbFx0I3NlY3Rvcl9zaXplLTEsICVkNFx0XHQvKiBzZWN0b3Igc2l6ZSAqL1xuLXJlYWRfbmV3X2RhdGE6XG4tXHRtb3Zld1x0I21heF9yZXRyeSwgJWQyXG4tcmVhZF9kYXRhX2xvb3A6XG4mIzQzO1x0bW92ZWxcdCMuTHNlY3Rvcl9zaXplIC0gMSwgJWQ0XHRcdC8qIHNlY3RvciBzaXplICovXG4mIzQzOy5McmVhZF9uZXdfZGF0YTpcbiYjNDM7XHRtb3Zld1x0Iy5MbWF4X3JldHJ5LCAlZDJcbiYjNDM7LkxyZWFkX2RhdGFfbG9vcDpcbiBcdG1vdmViXHQlYTJALCAlZDVcbi1cdGFuZGJcdCMweGMwLCAlZDVcbi1cdGRibmVcdCVkMiwgcmVhZF9kYXRhX2xvb3Bcbi1cdGJlcVx0ZGF0YV9leGl0XG4mIzQzO1x0YW5kYlx0IyguTGhyX2ZpZm9fMmJ5dGVzICYjNDM7IC5MaHJfZmlmb18xYnl0ZSksICVkNVxuJiM0MztcdGJlcVx0MWZcbiYjNDM7XHRtb3Zld1x0Iy5MbWF4X3JldHJ5LCAlZDJcbiBcdG1vdmViXHQlYTVALCAlYTRAJiM0Mztcbi1cdGFuZGJcdCMweDQwLCAlZDVcbi1cdGRibmVcdCVkNCwgcmVhZF9uZXdfZGF0YVxuLVx0YmVxXHRleGl0X2xvb3BcbiYjNDM7XHRkYnJhXHQlZDQsIDFmXG4mIzQzO1x0YnJhXHQuTGRhdGFfY3JjMFxuJiM0MzsxOlx0YW5kYlx0Iy5MaHJfZmlmb18yYnl0ZXMsICVkNVxuJiM0MztcdGRibmVcdCVkMiwgLkxyZWFkX2RhdGFfbG9vcFxuJiM0MztcdGJlcVx0LkxkYXRhX2V4aXRcbiBcdG1vdmViXHQlYTVALCAlYTRAJiM0Mztcbi1cdGRicmFcdCVkNCwgcmVhZF9uZXdfZGF0YVxuLWV4aXRfbG9vcDpcbiYjNDM7XHRkYnJhXHQlZDQsIC5McmVhZF9uZXdfZGF0YVxuIFxuIFx0LyogcmVhZCBDUkMgKi9cbiBcbi1cdG1vdmV3XHQjbWF4X3JldHJ5LCAlZDJcbi1kYXRhX2NyYzA6XG4tXG4mIzQzO1x0bW92ZXdcdCMuTG1heF9yZXRyeSwgJWQyXG4mIzQzOy5MZGF0YV9jcmMwOlxuIFx0dHN0Ylx0JWEyQFxuLVx0ZGJtaVx0JWQyLCBkYXRhX2NyYzBcbi1cdGJwbFx0ZGF0YV9leGl0XG4mIzQzO1x0ZGJtaVx0JWQyLCAuTGRhdGFfY3JjMFxuJiM0MztcdGJwbFx0LkxkYXRhX2V4aXRcbiBcbi1cdG1vdmViXHQlYTNALCAlZDVcbiYjNDM7XHRtb3ZlYlx0JWE1QCwgJWQyXG4gXG4tXHRtb3ZlcVx0I21heF9yZXRyeSwgJWQyXG4tXG4tZGF0YV9jcmMxOlxuLVxuLVx0dHN0Ylx0JWEyQFxuLVx0ZGJtaVx0JWQyLCBkYXRhX2NyYzFcbi1cdGJwbFx0ZGF0YV9leGl0XG4tXG4tXHRtb3ZlYlx0JWEzQCwgJWQ1XG4mIzQzO1x0bW92ZXFcdCMuTG1heF9yZXRyeSwgJWQyXG4mIzQzOy5MZGF0YV9jcmMxOlxuJiM0MztcdG1vdmViXHQlYTJALCAlZDVcbiYjNDM7XHRkYm1pXHQlZDIsIC5MZGF0YV9jcmMxXG4mIzQzO1x0YnBsXHQuTGRhdGFfZXhpdFxuIFxuLVx0dHN0Ylx0JWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKVxuJiM0MztcdG1vdmViXHQlYTVALCAlZDJcbiBcbi1cdG1vdmViXHQjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaylcbiYjNDM7XHRhbmRiXHQjLkxocl9jcmNfZXJyb3IsICVkNVxuJiM0MztcdGJuZVx0LkxkYXRhX2V4aXRcbiBcbiBcdC8qIHJldHVybiBudW1iZXIgb2YgYnl0ZXMgcmVhZCAqL1xuIFxuLVx0bW92ZWxcdCNzZWN0b3Jfc2l6ZSwgJWQwXG4mIzQzO1x0bW92ZWxcdCMuTHNlY3Rvcl9zaXplLCAlZDBcbiBcdGFkZHdcdCMxLCAlZDRcbiBcdHN1YmxcdCVkNCwgJWQwXG4tXHRydHNcbi1kYXRhX2V4aXQ6XG4tXHRtb3ZlYlx0IzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspXG4tXHRtb3ZlcVx0Iy0xLCAlZDBcbiYjNDM7XG4mIzQzOy5MZGF0YV9leGl0OlxuJiM0MztcdG1vdmViXHQjLkxtcl93cml0ZV9hY3Rpb24sICVhM0AoLkx3cml0ZV9tb2RlMCAtIC5McmVhZF9tYXJrKVxuIFx0cnRzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTU6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9TV0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3dpbV9xdWV1ZV9ycSYjMzQ7LAogICAgJiMzNDtmbG9wcHlfcmVhZF9zZWN0b3JzJiMzNDssCiAgICAmIzM0O3N3aW1fcmVhZF9zZWN0b3JfcmFuZ2UmIzM0OywKICAgICYjMzQ7ZmxvcHB5X2lvY3RsJiMzNDssCiAgICAmIzM0O2Zsb3BweV9vcGVuJiMzNDssCiAgICAmIzM0O2Zsb3BweV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3N3aW1fcHJvYmUmIzM0OywKICAgICYjMzQ7c3dpbV9mbG9wcHlfaW5pdCYjMzQ7LAogICAgJiMzNDtzd2ltX2FkZF9mbG9wcHkmIzM0OywKICAgICYjMzQ7c2V0dXBfbWVkaXVtJiMzNDssCiAgICAmIzM0O2Zsb3BweV9lamVjdCYjMzQ7LAogICAgJiMzNDtzd2ltX3RyYWNrJiMzNDssCiAgICAmIzM0O3N3aW1fc2VlayYjMzQ7LAogICAgJiMzNDtzd2ltX3RyYWNrMDAmIzM0OywKICAgICYjMzQ7c3dpbV9zdGVwJiMzNDssCiAgICAmIzM0O3N3aW1fbW90b3ImIzM0OywKICAgICYjMzQ7c3dpbV9kcml2ZSYjMzQ7LAogICAgJiMzNDtzd2ltX2FjdGlvbiYjMzQ7LAogICAgJiMzNDtzd2ltX3NlbGVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFNXSU0gZmxvcHB5IGNvbnRyb2xsZXIgZHJpdmVyIGZvciBtNjhrIE1hY2ludG9zaCBzeXN0ZW1zLCBpbmNsdWRpbmcgY2hhbmdlcyB0byBkZXZpY2UgcmVnaXN0cmF0aW9uLCBpbml0aWFsaXphdGlvbiwgcmVhZGluZyBzZWN0b3JzLCBhbmQgaGFuZGxpbmcgaGFyZHdhcmUgc3RhdGUuIFRoZSBkcml2ZXIgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgKHVzaW5nIHRoZSBgcTgwMGAgbWFjaGluZSkuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBibG9jayBkZXZpY2Ugb3BlcmF0aW9ucywgaW9jdGxzLCBhbmQgaGFyZHdhcmUgaW50ZXJhY3Rpb24gZnVuY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNmNlNGM4N2ZiYTA5MDRiZTc5MGNiY2IwZDEyZmVjYTM1Y2Y1Mjg4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMTYgMTU6MjY6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL2NvbmZpZy5jIGIvYXJjaC9tNjhrL21hYy9jb25maWcuYwppbmRleCBjMDAzM2Y4ODVlZDRmMC4uZGJhM2RlMjFjM2M0MDUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9tNjhrL21hYy9jb25maWcuYwpAQCAtOTg0LDggJiM0Mzs5ODQsMzcgQEAgc3RhdGljIGludCBfX2luaXQgbWFjX3BsYXRmb3JtX2luaXQodm9pZCkKIAkJCS5zdGFydCA9IHN3aW1fYmFzZSwKIAkJCS5lbmQgICA9IHN3aW1fYmFzZSAmIzQzOyAweDFGRkYsCiAJCX07CiYjNDM7CQl1bnNpZ25lZCBpbnQgZGF0YSA9IDA7CiYjNDM7CiYjNDM7CQkvKiBNb2RlbHMgaW4gdGhpcyBsaXN0IGFyZSBzdXBwb3NlZCB0byBydW4gRkNMSyBhdCAzMiBNSHogKi8KJiM0MzsJCXN3aXRjaCAobWFjaW50b3NoX2NvbmZpZy0mZ3Q7aWRlbnQpIHsKJiM0MzsJCWNhc2UgTUFDX01PREVMX0NDTDoKJiM0MzsJCWNhc2UgTUFDX01PREVMX0NDTElJOgomIzQzOwkJY2FzZSBNQUNfTU9ERUxfTENJSUk6CiYjNDM7CQljYXNlIE1BQ19NT0RFTF9RNjA1OgomIzQzOwkJY2FzZSBNQUNfTU9ERUxfUTYwNV9BQ0M6CiYjNDM7CQljYXNlIE1BQ19NT0RFTF9RNjEwOgomIzQzOwkJY2FzZSBNQUNfTU9ERUxfUTYzMDoKJiM0MzsJCWNhc2UgTUFDX01PREVMX1E2NTA6CiYjNDM7CQljYXNlIE1BQ19NT0RFTF9RODAwOgomIzQzOwkJY2FzZSBNQUNfTU9ERUxfUDQ2MDoKJiM0MzsJCWNhc2UgTUFDX01PREVMX1A0NzU6CiYjNDM7CQljYXNlIE1BQ19NT0RFTF9QNDc1RjoKJiM0MzsJCWNhc2UgTUFDX01PREVMX1A1MjA6CiYjNDM7CQljYXNlIE1BQ19NT0RFTF9QNTUwOgomIzQzOwkJY2FzZSBNQUNfTU9ERUxfUDU3NToKJiM0MzsJCWNhc2UgTUFDX01PREVMX1A1ODg6CiYjNDM7CQljYXNlIE1BQ19NT0RFTF9UVjoKJiM0MzsJCWNhc2UgTUFDX01PREVMX0M2MTA6CiYjNDM7CQljYXNlIE1BQ19NT0RFTF9DNjUwOgomIzQzOwkJY2FzZSBNQUNfTU9ERUxfUEIxOTA6CiYjNDM7CQljYXNlIE1BQ19NT0RFTF9QQjUyMDoKJiM0MzsJCQlkYXRhID0gMTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KIAotCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCYjMzQ7c3dpbSYjMzQ7LCAtMSwgJmFtcDtzd2ltX3JzcmMsIDEpOwomIzQzOwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3Jlc25kYXRhKE5VTEwsICYjMzQ7c3dpbSYjMzQ7LCAtMSwgJmFtcDtzd2ltX3JzcmMsIDEsCiYjNDM7CQkJCQkJICAmYW1wO2RhdGEsIHNpemVvZihkYXRhKSk7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svc3dpbS5jIGIvZHJpdmVycy9ibG9jay9zd2ltLmMKaW5kZXggMGNjYzEyYTcyMzg4ZDUuLjQ2MGY3NGMxOWNmZGMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3N3aW0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3N3aW0uYwpAQCAtMiwxMiAmIzQzOzIsMjAgQEAKIC8qCiAgKiBEcml2ZXIgZm9yIFNXSU0gKFNhbmRlciBXb3ogSW50ZWdyYXRlZCBNYWNoaW5lKSBmbG9wcHkgY29udHJvbGxlcgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA4IExhdXJlbnQgVml2aWVyICZsdDtMYXVyZW50QGx2aXZpZXIuaW5mbyZndDsKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggTGF1cmVudCBWaXZpZXIgJmx0O0xhdXJlbnRAbHZpdmllci5pbmZvJmd0OwogICoKICAqIGJhc2VkIG9uIEFsYXN0YWlyIEJyaWRnZXdhdGVyIFNXSU0gYW5hbHlzaXMsIDIwMDEKICAqIGJhc2VkIG9uIFNXSU0zIGRyaXZlciAoYykgUGF1bCBNYWNrZXJyYXMsIDE5OTYKICAqIGJhc2VkIG9uIG5ldEJTRCBJV00gZHJpdmVyIChjKSAxOTk3LCAxOTk4IEhhdWtlIEZhdGguCiAgKgomIzQzOyAqIFNlZSBhbHNvOgomIzQzOyAqIEluc2lkZSBNYWNpbnRvc2gsIHZvbC4gSUlJLCBjaC4gMgomIzQzOyAqIGh0dHBzOi8vYXJjaGl2ZS5vcmcvZGV0YWlscy9TV0lNRGVzaWduRG9jcwomIzQzOyAqIE5FQyB1UEQ3MjA3MCBGREMgZGF0YXNoZWV0CiYjNDM7ICogbWtMaW51eCBzb3VyY2UgZmlsZSBzd2ltaWlpY29tbW9uaGFsLmMKJiM0MzsgKiBodHRwOi8vd3d3Lm1hYy5saW51eC1tNjhrLm9yZy9kZXZlbC9pd20ucGhwLmh0bWwKJiM0MzsgKiBNQU1FIHNvdXJjZSBmaWxlIHNvbnlkcml2LmNwcAomIzQzOyAqCiAgKiAyMDA0LTA4LTIxIChsdikgLSBJbml0aWFsIGltcGxlbWVudGF0aW9uCiAgKiAyMDA4LTEwLTMwIChsdikgLSBQb3J0IHRvIDIuNgogICovCkBAIC0xOSw2ICYjNDM7MjcsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L21ham9yLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9oZHJlZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX2RldmljZS5oJmd0OwpAQCAtNjAsNyAmIzQzOzY5LDcgQEAgc3RydWN0IHN3aW0gewogCVJFRyhyZWFkX2hhbmRzaGFrZSkKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKLSNkZWZpbmUgc3dpbV93cml0ZShiYXNlLCByZWcsIHYpIAlvdXRfOCgmYW1wOyhiYXNlKS0mZ3Q7d3JpdGVfIyNyZWcsICh2KSkKJiM0MzsjZGVmaW5lIHN3aW1fd3JpdGUoYmFzZSwgcmVnLCB2KQlvdXRfOCgmYW1wOyhiYXNlKS0mZ3Q7d3JpdGVfIyNyZWcsICh2KSkKICNkZWZpbmUgc3dpbV9yZWFkKGJhc2UsIHJlZykJCWluXzgoJmFtcDsoYmFzZSktJmd0O3JlYWRfIyNyZWcpCiAKIC8qIElXTSByZWdpc3RlcnMgKi8KQEAgLTg0LDYyICYjNDM7OTMsNTMgQEAgc3RydWN0IGl3bSB7CiAJUkVHKHE3SCkKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKLSNkZWZpbmUgaXdtX3dyaXRlKGJhc2UsIHJlZywgdikgCW91dF84KCZhbXA7KGJhc2UpLSZndDtyZWcsICh2KSkKJiM0MzsjZGVmaW5lIGl3bV93cml0ZShiYXNlLCByZWcsIHYpCQlvdXRfOCgmYW1wOyhiYXNlKS0mZ3Q7cmVnLCAodikpCiAjZGVmaW5lIGl3bV9yZWFkKGJhc2UsIHJlZykJCWluXzgoJmFtcDsoYmFzZSktJmd0O3JlZykKIAogLyogYml0cyBpbiBwaGFzZSByZWdpc3RlciAqLwogCi0jZGVmaW5lIFNFRUtfUE9TSVRJVkUJMHgwNzAKLSNkZWZpbmUgU0VFS19ORUdBVElWRQkweDA3NAotI2RlZmluZSBTVEVQCQkweDA3MQotI2RlZmluZSBNT1RPUl9PTgkweDA3MgotI2RlZmluZSBNT1RPUl9PRkYJMHgwNzYKLSNkZWZpbmUgSU5ERVgJCTB4MDczCi0jZGVmaW5lIEVKRUNUCQkweDA3NwotI2RlZmluZSBTRVRNRk0JCTB4MTcxCi0jZGVmaW5lIFNFVEdDUgkJMHgxNzUKJiM0MzsjZGVmaW5lIFNFRUtfUE9TSVRJVkUJMHgwRjAKJiM0MzsjZGVmaW5lIFNFRUtfTkVHQVRJVkUJMHgwRjQKJiM0MzsjZGVmaW5lIFNURVAJCTB4MEYxCiYjNDM7I2RlZmluZSBNT1RPUl9PTgkweDBGMgomIzQzOyNkZWZpbmUgTU9UT1JfT0ZGCTB4MEY2CiYjNDM7I2RlZmluZSBJTkRFWAkJMHgwRjMKJiM0MzsjZGVmaW5lIEVKRUNUCQkweDBGNwomIzQzOyNkZWZpbmUgU0VUTUZNCQkweDFGMQomIzQzOyNkZWZpbmUgU0VUR0NSCQkweDFGNQogCi0jZGVmaW5lIFJFTEFYCQkweDAzMwotI2RlZmluZSBMU1RSQgkJMHgwMDgKJiM0MzsjZGVmaW5lIFJFTEFYCQkweDBGMwomIzQzOyNkZWZpbmUgTFNUUkIJCTB4MEY4CiAKLSNkZWZpbmUgQ0FfTUFTSwkJMHgwNzcKJiM0MzsjZGVmaW5lIENBX01BU0sJCTB4MEY3CiYjNDM7I2RlZmluZSBTRUxfTUFTSwkweDEwMAogCiAvKiBTZWxlY3QgdmFsdWVzIGZvciBzd2ltX3NlbGVjdCBhbmQgc3dpbV9yZWFkYml0ICovCiAKLSNkZWZpbmUgUkVBRF9EQVRBXzAJMHgwNzQKLSNkZWZpbmUgT05FTUVHX0RSSVZFCTB4MDc1Ci0jZGVmaW5lIFNJTkdMRV9TSURFRAkweDA3NgotI2RlZmluZSBEUklWRV9QUkVTRU5UCTB4MDc3Ci0jZGVmaW5lIERJU0tfSU4JCTB4MTcwCi0jZGVmaW5lIFdSSVRFX1BST1QJMHgxNzEKLSNkZWZpbmUgVFJBQ0tfWkVSTwkweDE3MgotI2RlZmluZSBUQUNITwkJMHgxNzMKLSNkZWZpbmUgUkVBRF9EQVRBXzEJMHgxNzQKLSNkZWZpbmUgR0NSX01PREUJMHgxNzUKLSNkZWZpbmUgU0VFS19DT01QTEVURQkweDE3NgotI2RlZmluZSBUV09NRUdfTUVESUEJMHgxNzcKJiM0MzsjZGVmaW5lIFNURVBQSU5HCTB4MEYxCiYjNDM7I2RlZmluZSBSRUFEX0RBVEFfMAkweDBGNAomIzQzOyNkZWZpbmUgT05FTUVHX0RSSVZFCTB4MEY1CiYjNDM7I2RlZmluZSBTSU5HTEVfU0lERUQJMHgwRjYKJiM0MzsjZGVmaW5lIERSSVZFX1BSRVNFTlQJMHgwRjcKJiM0MzsjZGVmaW5lIERJU0tfSU4JCTB4MUYwCiYjNDM7I2RlZmluZSBXUklURV9QUk9UCTB4MUYxCiYjNDM7I2RlZmluZSBUUkFDS19aRVJPCTB4MUYyCiYjNDM7I2RlZmluZSBUQUNITwkJMHgxRjMKJiM0MzsjZGVmaW5lIFJFQURfREFUQV8xCTB4MUY0CiYjNDM7I2RlZmluZSBHQ1JfTU9ERQkweDFGNQomIzQzOyNkZWZpbmUgUkVBRFkJCTB4MUY2CiYjNDM7I2RlZmluZSBUV09NRUdfTUVESUEJMHgxRjcKIAogLyogQml0cyBpbiBoYW5kc2hha2UgcmVnaXN0ZXIgKi8KIAotI2RlZmluZSBNQVJLX0JZVEUJMHgwMQotI2RlZmluZSBDUkNfWkVSTwkweDAyCi0jZGVmaW5lIFJEREFUQQkJMHgwNAogI2RlZmluZSBTRU5TRQkJMHgwOAotI2RlZmluZSBNT1RFTgkJMHgxMAotI2RlZmluZSBFUlJPUgkJMHgyMAogI2RlZmluZSBEQVQyQllURQkweDQwCiAjZGVmaW5lIERBVDFCWVRFCTB4ODAKIAogLyogYml0cyBpbiBzZXR1cCByZWdpc3RlciAqLwogCi0jZGVmaW5lIFNfSU5WX1dEQVRBCTB4MDEKLSNkZWZpbmUgU18zXzVfU0VMRUNUCTB4MDIKLSNkZWZpbmUgU19HQ1IJCTB4MDQKICNkZWZpbmUgU19GQ0xLX0RJVjIJMHgwOAotI2RlZmluZSBTX0VSUk9SX0NPUlIJMHgxMAogI2RlZmluZSBTX0lCTV9EUklWRQkweDIwCi0jZGVmaW5lIFNfR0NSX1dSSVRFCTB4NDAKLSNkZWZpbmUgU19USU1FT1VUCTB4ODAKIAogLyogYml0cyBpbiBtb2RlIHJlZ2lzdGVyICovCiAKQEAgLTE0OCwxNCAmIzQzOzE0OCwxMyBAQCBzdHJ1Y3QgaXdtIHsKICNkZWZpbmUgRU5CTDIJCTB4MDQKICNkZWZpbmUgQUNUSU9OCQkweDA4CiAjZGVmaW5lIFdSSVRFX01PREUJMHgxMAotI2RlZmluZSBIRURTRUwJCTB4MjAKJiM0MzsjZGVmaW5lIElTTV9TRUxFQ1QJMHg0MAogI2RlZmluZSBNT1RPTgkJMHg4MAogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiBlbnVtIGRyaXZlX2xvY2F0aW9uIHsKLQlJTlRFUk5BTF9EUklWRSA9IDB4MDIsCi0JRVhURVJOQUxfRFJJVkUgPSAweDA0LAomIzQzOwlOT19EUklWRSA9IDAsCiYjNDM7CUlOVEVSTkFMX0RSSVZFID0gQklUKDEpLAomIzQzOwlFWFRFUk5BTF9EUklWRSA9IEJJVCgyKSwKIH07CiAKIGVudW0gbWVkaWFfdHlwZSB7CkBAIC0xNjgsMjMgJiM0MzsxNjcsMjMgQEAgc3RydWN0IGZsb3BweV9zdGF0ZSB7CiAJLyogcGh5c2ljYWwgcHJvcGVydGllcyAqLwogCiAJZW51bSBkcml2ZV9sb2NhdGlvbiBsb2NhdGlvbjsJLyogaW50ZXJuYWwgb3IgZXh0ZXJuYWwgZHJpdmUgKi8KLQlpbnQJCSBoZWFkX251bWJlcjsJLyogc2luZ2xlLSBvciBkb3VibGUtc2lkZWQgZHJpdmUgKi8KJiM0MzsJaW50IGhlYWRfbnVtYmVyOwkJLyogc2luZ2xlLSBvciBkb3VibGUtc2lkZWQgZHJpdmUgKi8KIAogCS8qIG1lZGlhICovCiAKLQlpbnQJCSBkaXNrX2luOwotCWludAkJIGVqZWN0ZWQ7Ci0JZW51bSBtZWRpYV90eXBlCSB0eXBlOwotCWludAkJIHdyaXRlX3Byb3RlY3RlZDsKJiM0MzsJaW50IGRpc2tfaW47CiYjNDM7CWludCBlamVjdGVkOwomIzQzOwllbnVtIG1lZGlhX3R5cGUgdHlwZTsKJiM0MzsJaW50IHdyaXRlX3Byb3RlY3RlZDsKIAotCWludAkJIHRvdGFsX3NlY3M7Ci0JaW50CQkgc2VjcGVyY3lsOwotCWludAkJIHNlY3BlcnRyYWNrOwomIzQzOwl1bnNpZ25lZCBpbnQgdG90YWxfc2VjczsKJiM0MzsJdW5zaWduZWQgaW50IHNlY3BlcmN5bDsKJiM0MzsJdW5zaWduZWQgaW50IHNlY3BlcnRyYWNrOwogCiAJLyogaW4tdXNlIGluZm9ybWF0aW9uICovCiAKLQlpbnQJCXRyYWNrOwotCWludAkJcmVmX2NvdW50OwomIzQzOwlpbnQgdHJhY2s7CiYjNDM7CWludCByZWZfY291bnQ7CiAJYm9vbCByZWdpc3RlcmVkOwogCiAJc3RydWN0IGdlbmRpc2sgKmRpc2s7CkBAIC0yMDksNyAmIzQzOzIwOCw2IEBAIGVudW0gaGVhZCB7CiAKIHN0cnVjdCBzd2ltX3ByaXYgewogCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2U7Ci0Jc3BpbmxvY2tfdCBsb2NrOwogCWludCBmbG9wcHlfY291bnQ7CiAJc3RydWN0IGZsb3BweV9zdGF0ZSB1bml0W0ZEX01BWF9VTklUXTsKIH07CkBAIC0yMjAsMjAgJiM0MzsyMTgsMjQgQEAgZXh0ZXJuIGludCBzd2ltX3JlYWRfc2VjdG9yX2RhdGEoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwKIAkJCQkgdW5zaWduZWQgY2hhciAqZGF0YSk7CiAKIHN0YXRpYyBERUZJTkVfTVVURVgoc3dpbV9tdXRleCk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3N3aW1fbW9kZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgZW5hYmxlKQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldF9zd2ltX21vZGUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IGVuYWJsZSkKIHsKLQlzdHJ1Y3QgaXdtIF9faW9tZW0gKml3bV9iYXNlOwomIzQzOwlzdHJ1Y3QgaXdtIF9faW9tZW0gKml3bV9iYXNlID0gKHN0cnVjdCBpd20gX19pb21lbSAqKWJhc2U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghZW5hYmxlKSB7Ci0JCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIDB4ZjgpOwomIzQzOwkJc3dpbV93cml0ZShiYXNlLCBtb2RlMCwgQUNUSU9OKTsKJiM0MzsJCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIEVOQkwxIHwgRU5CTDIgfCBNT1RPTik7CiYjNDM7CQlzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBJU01fU0VMRUNUKTsKJiM0MzsJCWl3bV9yZWFkKGl3bV9iYXNlLCBxN0wpOwogCQlyZXR1cm47CiAJfQogCi0JaXdtX2Jhc2UgPSAoc3RydWN0IGl3bSBfX2lvbWVtICopYmFzZTsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKIAlpd21fcmVhZChpd21fYmFzZSwgcTdMKTsKJiM0MzsJaXdtX3JlYWQoaXdtX2Jhc2UsIHE2TCk7CiAJaXdtX3JlYWQoaXdtX2Jhc2UsIG10ck9mZik7CiAJaXdtX3JlYWQoaXdtX2Jhc2UsIHE2SCk7CiAKQEAgLTI0NSw3ICYjNDM7MjQ3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9zd2ltX21vZGUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IGVuYWJsZSkKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGdldF9zd2ltX21vZGUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSkKJiM0MztzdGF0aWMgaW50IGdldF9zd2ltX21vZGUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0yNzEsNyAmIzQzOzI3Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX3NlbGVjdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgc2VsKQogewogCXN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIFJFTEFYKTsKIAotCXZpYTFfc2V0X2hlYWQoc2VsICZhbXA7IDB4MTAwKTsKJiM0MzsJdmlhMV9zZXRfaGVhZChzZWwgJmFtcDsgU0VMX01BU0spOwogCiAJc3dpbV93cml0ZShiYXNlLCBwaGFzZSwgc2VsICZhbXA7IENBX01BU0spOwogfQpAQCAtMjg0LDE1ICYjNDM7Mjg2LDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX2FjdGlvbihzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgYWN0aW9uKQogCiAJc3dpbV9zZWxlY3QoYmFzZSwgYWN0aW9uKTsKIAl1ZGVsYXkoMSk7Ci0Jc3dpbV93cml0ZShiYXNlLCBwaGFzZSwgKExTVFJCJmx0OyZsdDs0KSB8IExTVFJCKTsKLQl1ZGVsYXkoMSk7Ci0Jc3dpbV93cml0ZShiYXNlLCBwaGFzZSwgKExTVFJCJmx0OyZsdDs0KSB8ICgofkxTVFJCKSAmYW1wOyAweDBGKSk7CiYjNDM7CXN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIGFjdGlvbiB8IExTVFJCKTsKJiM0MzsJdWRlbGF5KDIpOwomIzQzOwlzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCBhY3Rpb24pOwogCXVkZWxheSgxKTsKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc3dpbV9yZWFkYml0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBiaXQpCiYjNDM7c3RhdGljIGlubGluZSBib29sIHN3aW1fcmVhZGJpdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgYml0KQogewogCWludCBzdGF0OwogCkBAIC0zMDUsMTI1ICYjNDM7MzA3LDExOSBAQCBzdGF0aWMgaW5saW5lIGludCBzd2ltX3JlYWRiaXQoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IGJpdCkKIAlyZXR1cm4gKHN0YXQgJmFtcDsgU0VOU0UpID09IDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX2RyaXZlKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsCiYjNDM7I2RlZmluZSBzd2ltX3JlYWRiaXRfdGltZW91dChiYXNlLCBiaXQsIHZhbCwgdGltZW91dF91cykgXAomIzQzOwlwb2xsX3RpbWVvdXRfdXMoLCBzd2ltX3JlYWRiaXQoYmFzZSwgYml0KSA9PSB2YWwsIDEwMDAsIHRpbWVvdXRfdXMsIGZhbHNlKQomIzQzOwomIzQzOyNkZWZpbmUgc3dpbV9yZWFkYml0X3RpbWVvdXRfYXRvbWljKGJhc2UsIGJpdCwgdmFsLCB0aW1lb3V0X3VzKSBcCiYjNDM7CXBvbGxfdGltZW91dF91c19hdG9taWMoLCBzd2ltX3JlYWRiaXQoYmFzZSwgYml0KSA9PSB2YWwsIDEsIHRpbWVvdXRfdXMsIGZhbHNlKQomIzQzOwomIzQzOyNkZWZpbmUgc3dpbV9SRUFEWV90aW1lb3V0KGJhc2UpIFwKJiM0MzsoeyBcCiYjNDM7CWludCByZXQgPSBzd2ltX3JlYWRiaXRfdGltZW91dChiYXNlLCBSRUFEWSwgdHJ1ZSwgMTAwMCAqIDEwMDApOyBcCiYjNDM7CWlmIChyZXQpIFwKJiM0MzsJCXByaW50ayhLRVJOX0RFQlVHICYjMzQ7JXM6IGRyaXZlIG5vdCByZWFkeVxuJiMzNDssIF9fZnVuY19fKTsgXAomIzQzOwlyZXQ7IFwKJiM0Mzt9KQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHN3aW1fZHJpdmUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwKIAkJCSAgICAgIGVudW0gZHJpdmVfbG9jYXRpb24gbG9jYXRpb24pCiB7CiAJaWYgKGxvY2F0aW9uID09IElOVEVSTkFMX0RSSVZFKSB7CiAJCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIEVYVEVSTkFMX0RSSVZFKTsgLyogY2xlYXIgZHJpdmUgMSBiaXQgKi8KIAkJc3dpbV93cml0ZShiYXNlLCBtb2RlMSwgSU5URVJOQUxfRFJJVkUpOyAvKiBzZXQgZHJpdmUgMCBiaXQgKi8KJiM0MzsJCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTEsIE1PVE9OKTsKIAl9IGVsc2UgaWYgKGxvY2F0aW9uID09IEVYVEVSTkFMX0RSSVZFKSB7CiAJCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIElOVEVSTkFMX0RSSVZFKTsgLyogY2xlYXIgZHJpdmUgMCBiaXQgKi8KIAkJc3dpbV93cml0ZShiYXNlLCBtb2RlMSwgRVhURVJOQUxfRFJJVkUpOyAvKiBzZXQgZHJpdmUgMSBiaXQgKi8KJiM0MzsJCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTEsIE1PVE9OKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIElOVEVSTkFMX0RSSVZFKTsKJiM0MzsJCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIEVYVEVSTkFMX0RSSVZFKTsKJiM0MzsJCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIE1PVE9OKTsKIAl9CiYjNDM7CXVkZWxheSgxKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHN3aW1fbW90b3Ioc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwKLQkJCSAgICAgIGVudW0gbW90b3JfYWN0aW9uIGFjdGlvbikKJiM0MztzdGF0aWMgdm9pZCBzd2ltX21vdG9yKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsCiYjNDM7CQkgICAgICAgZW51bSBtb3Rvcl9hY3Rpb24gYWN0aW9uKQogewogCWlmIChhY3Rpb24gPT0gT04pIHsKLQkJaW50IGk7Ci0KIAkJc3dpbV9hY3Rpb24oYmFzZSwgTU9UT1JfT04pOwotCi0JCWZvciAoaSA9IDA7IGkgJmx0OyAyKkhaOyBpJiM0MzsmIzQzOykgewotCQkJc3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpOwotCQkJaWYgKHN3aW1fcmVhZGJpdChiYXNlLCBNT1RPUl9PTikpCi0JCQkJYnJlYWs7Ci0JCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQkJc2NoZWR1bGVfdGltZW91dCgxKTsKLQkJfQomIzQzOwkJc3dpbV9yZWFkYml0X3RpbWVvdXQoYmFzZSwgTU9UT1JfT04sIHRydWUsIDIwMDAgKiAxMDAwKTsKIAl9IGVsc2UgaWYgKGFjdGlvbiA9PSBPRkYpIHsKIAkJc3dpbV9hY3Rpb24oYmFzZSwgTU9UT1JfT0ZGKTsKLQkJc3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpOwomIzQzOwkJc3dpbV93cml0ZShiYXNlLCBwaGFzZSwgUkVMQVgpOwogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHN3aW1fZWplY3Qoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSkKJiM0MztzdGF0aWMgdm9pZCBzd2ltX2VqZWN0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpCiB7Ci0JaW50IGk7Ci0KIAlzd2ltX2FjdGlvbihiYXNlLCBFSkVDVCk7Ci0KLQlmb3IgKGkgPSAwOyBpICZsdDsgMipIWjsgaSYjNDM7JiM0MzspIHsKLQkJc3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpOwotCQlpZiAoIXN3aW1fcmVhZGJpdChiYXNlLCBESVNLX0lOKSkKLQkJCWJyZWFrOwotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlzY2hlZHVsZV90aW1lb3V0KDEpOwotCX0KLQlzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7CiYjNDM7CXN3aW1fcmVhZGJpdF90aW1lb3V0KGJhc2UsIERJU0tfSU4sIGZhbHNlLCAyMDAwICogMTAwMCk7CiYjNDM7CW1zbGVlcCgxKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHN3aW1faGVhZChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBlbnVtIGhlYWQgaGVhZCkKIHsKLQkvKiB3YWl0IGRyaXZlIGlzIHJlYWR5ICovCi0KIAlpZiAoaGVhZCA9PSBVUFBFUl9IRUFEKQogCQlzd2ltX3NlbGVjdChiYXNlLCBSRUFEX0RBVEFfMSk7CiAJZWxzZSBpZiAoaGVhZCA9PSBMT1dFUl9IRUFEKQogCQlzd2ltX3NlbGVjdChiYXNlLCBSRUFEX0RBVEFfMCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHN3aW1fc3RlcChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKQomIzQzO3N0YXRpYyBpbnQgc3dpbV9zdGVwKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpCiB7Ci0JaW50IHdhaXQ7Ci0KIAlzd2ltX2FjdGlvbihiYXNlLCBTVEVQKTsKLQotCWZvciAod2FpdCA9IDA7IHdhaXQgJmx0OyBIWjsgd2FpdCYjNDM7JiM0MzspIHsKLQotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlzY2hlZHVsZV90aW1lb3V0KDEpOwotCi0JCXN3aW1fc2VsZWN0KGJhc2UsIFJFTEFYKTsKLQkJaWYgKCFzd2ltX3JlYWRiaXQoYmFzZSwgU1RFUCkpCi0JCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIC0xOwomIzQzOwl1ZGVsYXkoMTUwKTsKJiM0MzsJcmV0dXJuIHN3aW1fcmVhZGJpdF90aW1lb3V0X2F0b21pYyhiYXNlLCBTVEVQUElORywgZmFsc2UsIDIwICogMTAwMCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHN3aW1fdHJhY2swMChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKQomIzQzO3N0YXRpYyBpbnQgc3dpbV90cmFjazAwKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpCiB7CiAJaW50IHRyeTsKIAogCXN3aW1fYWN0aW9uKGJhc2UsIFNFRUtfTkVHQVRJVkUpOwogCiAJZm9yICh0cnkgPSAwOyB0cnkgJmx0OyAxMDA7IHRyeSYjNDM7JiM0MzspIHsKJiM0MzsJCW1zbGVlcCgzKTsKIAotCQlzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7CiAJCWlmIChzd2ltX3JlYWRiaXQoYmFzZSwgVFJBQ0tfWkVSTykpCi0JCQlicmVhazsKJiM0MzsJCQlyZXR1cm4gMDsKIAogCQlpZiAoc3dpbV9zdGVwKGJhc2UpKQotCQkJcmV0dXJuIC0xOwomIzQzOwkJCWJyZWFrOwogCX0KIAotCWlmIChzd2ltX3JlYWRiaXQoYmFzZSwgVFJBQ0tfWkVSTykpCi0JCXJldHVybiAwOwotCiYjNDM7CXByX2VycigmIzM0O3N3aW06IHRyYWNrIHplcm8gcmVjYWxpYnJhdGlvbiBmYWlsZWRcbiYjMzQ7KTsKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHN3aW1fc2VlayhzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgc3RlcCkKJiM0MztzdGF0aWMgaW50IHN3aW1fc2VlayhzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgc3RlcCkKIHsKLQlpZiAoc3RlcCA9PSAwKQotCQlyZXR1cm4gMDsKLQogCWlmIChzdGVwICZsdDsgMCkgewogCQlzd2ltX2FjdGlvbihiYXNlLCBTRUVLX05FR0FUSVZFKTsKIAkJc3RlcCA9IC1zdGVwOwotCX0gZWxzZQomIzQzOwl9IGVsc2UgaWYgKHN0ZXAgJmd0OyAwKQogCQlzd2ltX2FjdGlvbihiYXNlLCBTRUVLX1BPU0lUSVZFKTsKJiM0MzsJdWRlbGF5KDEpOwomIzQzOwomIzQzOwlzd2ltX1JFQURZX3RpbWVvdXQoYmFzZSk7CiYjNDM7CiYjNDM7CWlmIChzdGVwID09IDApCiYjNDM7CQlyZXR1cm4gMDsKIAotCWZvciAoIDsgc3RlcCAmZ3Q7IDA7IHN0ZXAtLSkgewomIzQzOwlmb3IgKDsgc3RlcCAmZ3Q7IDA7IHN0ZXAtLSkgewogCQlpZiAoc3dpbV9zdGVwKGJhc2UpKQogCQkJcmV0dXJuIC0xOwogCX0KIAomIzQzOwltc2xlZXAoMzApOwomIzQzOwlzd2ltX1JFQURZX3RpbWVvdXQoYmFzZSk7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHN3aW1fdHJhY2soc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsICBpbnQgdHJhY2spCiYjNDM7c3RhdGljIGludCBzd2ltX3RyYWNrKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzLCBpbnQgdHJhY2spCiB7CiAJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLSZndDtzd2QtJmd0O2Jhc2U7CiAJaW50IHJldDsKQEAgLTQ0NSw4ICYjNDM7NDQxLDEwIEBAIHN0YXRpYyBpbnQgZmxvcHB5X2VqZWN0KHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzKQogCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy0mZ3Q7c3dkLSZndDtiYXNlOwogCiAJc3dpbV9kcml2ZShiYXNlLCBmcy0mZ3Q7bG9jYXRpb24pOwomIzQzOwlzd2ltX3RyYWNrKGZzLCAxKTsKIAlzd2ltX21vdG9yKGJhc2UsIE9GRik7CiAJc3dpbV9lamVjdChiYXNlKTsKJiM0MzsJc3dpbV9kcml2ZShiYXNlLCBOT19EUklWRSk7CiAKIAlmcy0mZ3Q7ZGlza19pbiA9IDA7CiAJZnMtJmd0O2VqZWN0ZWQgPSAxOwpAQCAtNDU0LDcwICYjNDM7NDUyLDgxIEBAIHN0YXRpYyBpbnQgZmxvcHB5X2VqZWN0KHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzd2ltX3JlYWRfc2VjdG9yKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzLAotCQkJCSAgIGludCBzaWRlLCBpbnQgdHJhY2ssCi0JCQkJICAgaW50IHNlY3RvciwgdW5zaWduZWQgY2hhciAqYnVmZmVyKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgc3dpbV9yZWFkX3NlY3Rvcl9yYW5nZShzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcywKJiM0MzsJCQkJCXVuc2lnbmVkIGludCBzaWRlLCB1bnNpZ25lZCBpbnQgdHJhY2ssCiYjNDM7CQkJCQl1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBjb3VudCwKJiM0MzsJCQkJCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcikKIHsKIAlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gZnMtJmd0O3N3ZC0mZ3Q7YmFzZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBzZWN0b3JfaGVhZGVyIGhlYWRlcjsKLQlpbnQgcmV0ID0gLTE7Ci0Jc2hvcnQgaTsKLQotCXN3aW1fdHJhY2soZnMsIHRyYWNrKTsKJiM0MzsJaW50IGksIGJpdHMgPSAwOwogCi0Jc3dpbV93cml0ZShiYXNlLCBtb2RlMSwgTU9UT04pOwotCXN3aW1faGVhZChiYXNlLCBzaWRlKTsKLQlzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBzaWRlKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IDE4OyBpJiM0MzsmIzQzOykgeyAvKiBBIHRyYWNrIGhhcyBhdCBtb3N0IDE4IHNlY3RvcnMgKi8KJiM0MzsJCWlmIChpICZndDs9IGNvdW50KQomIzQzOwkJCWJyZWFrOwomIzQzOwkJYml0cyB8PSBCSVQoaSk7CiYjNDM7CX0KIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgMzY7IGkmIzQzOyYjNDM7KSB7Ci0JCXJldCA9IHN3aW1fcmVhZF9zZWN0b3JfaGVhZGVyKGJhc2UsICZhbXA7aGVhZGVyKTsKLQkJaWYgKCFyZXQgJmFtcDsmYW1wOyAoaGVhZGVyLnNlY3RvciA9PSBzZWN0b3IpKSB7Ci0JCQkvKiBmb3VuZCAqLwotCi0JCQlyZXQgPSBzd2ltX3JlYWRfc2VjdG9yX2RhdGEoYmFzZSwgYnVmZmVyKTsKJiM0MzsJCWlmIChiaXRzID09IDApIC8qIEFsbCBjb3VudCBzZWN0b3JzIHdlcmUgcmVhZCBvayAqLwogCQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlpZiAoc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXIoYmFzZSwgJmFtcDtoZWFkZXIpIHx8CiYjNDM7CQkgICAgc3dpbV9yZWFkKGJhc2UsIGVycm9yKSB8fCBoZWFkZXIudHJhY2sgIT0gdHJhY2sgfHwKJiM0MzsJCSAgICBoZWFkZXIuc2lkZSAhPSBzaWRlIHx8IGhlYWRlci5zaXplICE9IDIpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpZiAoaGVhZGVyLnNlY3RvciAmZ3Q7PSBzdGFydCAmYW1wOyZhbXA7IGhlYWRlci5zZWN0b3IgJmx0OyBzdGFydCAmIzQzOyBjb3VudCkgewomIzQzOwkJCXVuc2lnbmVkIGludCBvZmZzZXQgPSBoZWFkZXIuc2VjdG9yIC0gc3RhcnQ7CiYjNDM7CQkJaW50IHJldDsKJiM0MzsKJiM0MzsJCQlpZiAoKGJpdHMgJmFtcDsgQklUKG9mZnNldCkpID09IDApCiYjNDM7CQkJCWNvbnRpbnVlOyAvKiBUaGlzIHNlY3RvciB3YXMgYWxyZWFkeSByZWFkIG9rICovCiYjNDM7CiYjNDM7CQkJcmV0ID0gc3dpbV9yZWFkX3NlY3Rvcl9kYXRhKGJhc2UsIGJ1ZmZlciAmIzQzOyA1MTIgKiBvZmZzZXQpOwomIzQzOwkJCWlmIChyZXQgPT0gNTEyICZhbXA7JmFtcDsgc3dpbV9yZWFkKGJhc2UsIGVycm9yKSA9PSAwKQomIzQzOwkJCQliaXRzICZhbXA7PSB+QklUKG9mZnNldCk7CiAJCX0KIAl9CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0Jc3dpbV93cml0ZShiYXNlLCBtb2RlMCwgTU9UT04pOwotCi0JaWYgKChoZWFkZXIuc2lkZSAhPSBzaWRlKSAgfHwgKGhlYWRlci50cmFjayAhPSB0cmFjaykgfHwKLQkgICAgIChoZWFkZXIuc2VjdG9yICE9IHNlY3RvcikpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIGJpdHMgPyBmZnMoYml0cykgLSAxIDogY291bnQ7IC8qIE5vLiBvZiBjb250aWd1b3VzIG9rIHNlY3RvcnMgKi8KIH0KIAogc3RhdGljIGJsa19zdGF0dXNfdCBmbG9wcHlfcmVhZF9zZWN0b3JzKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzLAotCQkJICAgICAgIGludCByZXFfc2VjdG9yLCBpbnQgc2VjdG9yc19uYiwKLQkJCSAgICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIpCiYjNDM7CQkJCQl1bnNpZ25lZCBpbnQgcmVxX3NlY3RvciwKJiM0MzsJCQkJCXVuc2lnbmVkIGludCBzZWN0b3JzX25iLAomIzQzOwkJCQkJdW5zaWduZWQgY2hhciAqYnVmZmVyKQogewogCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy0mZ3Q7c3dkLSZndDtiYXNlOwotCWludCByZXQ7Ci0JaW50IHNpZGUsIHRyYWNrLCBzZWN0b3I7Ci0JaW50IGksIHRyeTsKLQomIzQzOwl1bnNpZ25lZCBpbnQgZmFpbHVyZXMgPSAwOwogCiAJc3dpbV9kcml2ZShiYXNlLCBmcy0mZ3Q7bG9jYXRpb24pOwotCWZvciAoaSA9IHJlcV9zZWN0b3I7IGkgJmx0OyByZXFfc2VjdG9yICYjNDM7IHNlY3RvcnNfbmI7IGkmIzQzOyYjNDM7KSB7Ci0JCWludCB4OwotCQl0cmFjayA9IGkgLyBmcy0mZ3Q7c2VjcGVyY3lsOwotCQl4ID0gaSAlIGZzLSZndDtzZWNwZXJjeWw7Ci0JCXNpZGUgPSB4IC8gZnMtJmd0O3NlY3BlcnRyYWNrOwotCQlzZWN0b3IgPSB4ICUgZnMtJmd0O3NlY3BlcnRyYWNrICYjNDM7IDE7Ci0KLQkJdHJ5ID0gNTsKLQkJZG8gewotCQkJcmV0ID0gc3dpbV9yZWFkX3NlY3Rvcihmcywgc2lkZSwgdHJhY2ssIHNlY3RvciwKLQkJCQkJCWJ1ZmZlcik7Ci0JCQlpZiAodHJ5LS0gPT0gMCkKLQkJCQlyZXR1cm4gQkxLX1NUU19JT0VSUjsKLQkJfSB3aGlsZSAocmV0ICE9IDUxMik7Ci0KLQkJYnVmZmVyICYjNDM7PSByZXQ7CiYjNDM7CXN3aW1fUkVBRFlfdGltZW91dChiYXNlKTsKJiM0MzsKJiM0MzsJd2hpbGUgKHNlY3RvcnNfbmIpIHsKJiM0MzsJCXVuc2lnbmVkIGludCBjeWwsIHgsIGhlYWQsIHNlY3RvciwgbiwgcmV0OwomIzQzOwomIzQzOwkJY3lsID0gcmVxX3NlY3RvciAvIGZzLSZndDtzZWNwZXJjeWw7CiYjNDM7CQl4ID0gcmVxX3NlY3RvciAlIGZzLSZndDtzZWNwZXJjeWw7CiYjNDM7CQloZWFkID0gKHggJmd0Oz0gZnMtJmd0O3NlY3BlcnRyYWNrKSA/IDEgOiAwOwomIzQzOwkJc2VjdG9yID0geCAlIGZzLSZndDtzZWNwZXJ0cmFjazsKJiM0MzsJCW4gPSBtaW4oc2VjdG9yc19uYiwgZnMtJmd0O3NlY3BlcnRyYWNrIC0gc2VjdG9yKTsKJiM0MzsKJiM0MzsJCXN3aW1fdHJhY2soZnMsIGN5bCk7CiYjNDM7CQlzd2ltX2hlYWQoYmFzZSwgaGVhZCk7CiYjNDM7CiYjNDM7CQlyZXQgPSBzd2ltX3JlYWRfc2VjdG9yX3JhbmdlKGZzLCBoZWFkLCBjeWwsIHNlY3RvciAmIzQzOyAxLCBuLCBidWZmZXIpOwomIzQzOwkJaWYgKHJldCAhPSBuKQomIzQzOwkJCSYjNDM7JiM0MztmYWlsdXJlczsKJiM0MzsJCWlmIChmYWlsdXJlcyAmZ3Q7PSA1KQomIzQzOwkJCXJldHVybiBCTEtfU1RTX0lPRVJSOwomIzQzOwomIzQzOwkJYnVmZmVyICYjNDM7PSA1MTIgKiByZXQ7CiYjNDM7CQlzZWN0b3JzX25iIC09IHJldDsKJiM0MzsJCXJlcV9zZWN0b3IgJiM0Mzs9IHJldDsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTUyNywxMiAmIzQzOzUzNiwxMCBAQCBzdGF0aWMgYmxrX3N0YXR1c190IHN3aW1fcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsCiAJCQkJICBjb25zdCBzdHJ1Y3QgYmxrX21xX3F1ZXVlX2RhdGEgKmJkKQogewogCXN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzID0gaGN0eC0mZ3Q7cXVldWUtJmd0O3F1ZXVlZGF0YTsKLQlzdHJ1Y3Qgc3dpbV9wcml2ICpzd2QgPSBmcy0mZ3Q7c3dkOwogCXN0cnVjdCByZXF1ZXN0ICpyZXEgPSBiZC0mZ3Q7cnE7CiAJYmxrX3N0YXR1c190IGVycjsKIAotCWlmICghc3Bpbl90cnlsb2NrX2lycSgmYW1wO3N3ZC0mZ3Q7bG9jaykpCi0JCXJldHVybiBCTEtfU1RTX0RFVl9SRVNPVVJDRTsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3N3aW1fbXV0ZXgpOwogCiAJYmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTsKIApAQCAtNTUwLDE2ICYjNDM7NTU3LDE2IEBAIHN0YXRpYyBibGtfc3RhdHVzX3Qgc3dpbV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwKIAogCWVyciA9IEJMS19TVFNfT0s7CiBvdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxKCZhbXA7c3dkLSZndDtsb2NrKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7c3dpbV9tdXRleCk7CiAJcmV0dXJuIGVycjsKIAogfQogCiBzdGF0aWMgc3RydWN0IGZsb3BweV9zdHJ1Y3QgZmxvcHB5X3R5cGVbNF0gPSB7Ci0JeyAgICAwLCAgMCwgMCwgIDAsIDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIE5VTEwgfSwgLyogbm8gdGVzdGluZyAgICovCiYjNDM7CXsgICAgMCwgIDAsIDAsICAwLCAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCBOVUxMIH0sIC8qIG5vIHRlc3RpbmcgKi8KIAl7ICA3MjAsICA5LCAxLCA4MCwgMCwgMHgyQSwgMHgwMiwgMHhERiwgMHg1MCwgTlVMTCB9LCAvKiAzNjBLQiBTUyAzLjUmIzM0OyovCi0JeyAxNDQwLCAgOSwgMiwgODAsIDAsIDB4MkEsIDB4MDIsIDB4REYsIDB4NTAsIE5VTEwgfSwgLyogNzIwS0IgMy41JiMzNDsgICAqLwotCXsgMjg4MCwgMTgsIDIsIDgwLCAwLCAweDFCLCAweDAwLCAweENGLCAweDZDLCBOVUxMIH0sIC8qIDEuNDRNQiAzLjUmIzM0OyAgKi8KJiM0MzsJeyAxNDQwLCAgOSwgMiwgODAsIDAsIDB4MkEsIDB4MDIsIDB4REYsIDB4NTAsIE5VTEwgfSwgLyogNzIwS0IgMy41JiMzNDsgKi8KJiM0MzsJeyAyODgwLCAxOCwgMiwgODAsIDAsIDB4MUIsIDB4MDAsIDB4Q0YsIDB4NkMsIE5VTEwgfSwgLyogMS40NE1CIDMuNSYjMzQ7ICovCiB9OwogCiBzdGF0aWMgaW50IGdldF9mbG9wcHlfZ2VvbWV0cnkoc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsIGludCB0eXBlLApAQCAtNTg2LDIzICYjNDM7NTkzLDE2IEBAIHN0YXRpYyB2b2lkIHNldHVwX21lZGl1bShzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcykKIAogCWlmIChzd2ltX3JlYWRiaXQoYmFzZSwgRElTS19JTikpIHsKIAkJc3RydWN0IGZsb3BweV9zdHJ1Y3QgKmc7CiYjNDM7CiAJCWZzLSZndDtkaXNrX2luID0gMTsKIAkJZnMtJmd0O3dyaXRlX3Byb3RlY3RlZCA9IHN3aW1fcmVhZGJpdChiYXNlLCBXUklURV9QUk9UKTsKLQotCQlpZiAoc3dpbV90cmFjazAwKGJhc2UpKQotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJJiMzNDtTV0lNOiBjYW5ub3QgbW92ZSBmbG9wcHkgaGVhZCB0byB0cmFjayAwXG4mIzM0Oyk7Ci0KLQkJc3dpbV90cmFjazAwKGJhc2UpOwotCiAJCWZzLSZndDt0eXBlID0gc3dpbV9yZWFkYml0KGJhc2UsIFRXT01FR19NRURJQSkgPwotCQkJSERfTUVESUEgOiBERF9NRURJQTsKJiM0MzsJCQkgICBIRF9NRURJQSA6IEREX01FRElBOwogCQlmcy0mZ3Q7aGVhZF9udW1iZXIgPSBzd2ltX3JlYWRiaXQoYmFzZSwgU0lOR0xFX1NJREVEKSA/IDEgOiAyOwogCQlnZXRfZmxvcHB5X2dlb21ldHJ5KGZzLCAwLCAmYW1wO2cpOwogCQlmcy0mZ3Q7dG90YWxfc2VjcyA9IGctJmd0O3NpemU7CiAJCWZzLSZndDtzZWNwZXJjeWwgPSBnLSZndDtoZWFkICogZy0mZ3Q7c2VjdDsKIAkJZnMtJmd0O3NlY3BlcnRyYWNrID0gZy0mZ3Q7c2VjdDsKLQkJZnMtJmd0O3RyYWNrID0gMDsKIAl9IGVsc2UgewogCQlmcy0mZ3Q7ZGlza19pbiA9IDA7CiAJfQpAQCAtNjIwLDExICYjNDM7NjIwLDkgQEAgc3RhdGljIGludCBmbG9wcHlfb3BlbihzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYmxrX21vZGVfdCBtb2RlKQogCQlmcy0mZ3Q7cmVmX2NvdW50ID0gLTE7CiAJZWxzZQogCQlmcy0mZ3Q7cmVmX2NvdW50JiM0MzsmIzQzOzsKLQlzd2ltX3dyaXRlKGJhc2UsIHNldHVwLCBTX0lCTV9EUklWRSAgfCBTX0ZDTEtfRElWMik7Ci0JdWRlbGF5KDEwKTsKJiM0MzsKIAlzd2ltX2RyaXZlKGJhc2UsIGZzLSZndDtsb2NhdGlvbik7Ci0Jc3dpbV9tb3RvcihiYXNlLCBPTik7Ci0Jc3dpbV9hY3Rpb24oYmFzZSwgU0VUTUZNKTsKJiM0MzsKIAlpZiAoZnMtJmd0O2VqZWN0ZWQpCiAJCXNldHVwX21lZGl1bShmcyk7CiAJaWYgKCFmcy0mZ3Q7ZGlza19pbikgewpAQCAtNjMyLDYgJiM0Mzs2MzAsMTEgQEAgc3RhdGljIGludCBmbG9wcHlfb3BlbihzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYmxrX21vZGVfdCBtb2RlKQogCQlnb3RvIG91dDsKIAl9CiAKJiM0MzsJc3dpbV9tb3RvcihiYXNlLCBPTik7CiYjNDM7CXN3aW1fYWN0aW9uKGJhc2UsIFNFVE1GTSk7CiYjNDM7CW1zbGVlcCgzMCk7CiYjNDM7CXN3aW1fUkVBRFlfdGltZW91dChiYXNlKTsKJiM0MzsKIAlzZXRfY2FwYWNpdHkoZnMtJmd0O2Rpc2ssIGZzLSZndDt0b3RhbF9zZWNzKTsKIAogCWlmIChtb2RlICZhbXA7IEJMS19PUEVOX05ERUxBWSkKQEAgLTY1Miw4ICYjNDM7NjU1LDEwIEBAIHN0YXRpYyBpbnQgZmxvcHB5X29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSkKIAllbHNlIGlmIChmcy0mZ3Q7cmVmX2NvdW50ICZndDsgMCkKIAkJLS1mcy0mZ3Q7cmVmX2NvdW50OwogCi0JaWYgKGZzLSZndDtyZWZfY291bnQgPT0gMCkKJiM0MzsJaWYgKGZzLSZndDtyZWZfY291bnQgPT0gMCkgewogCQlzd2ltX21vdG9yKGJhc2UsIE9GRik7CiYjNDM7CQlzd2ltX2RyaXZlKGJhc2UsIE5PX0RSSVZFKTsKJiM0MzsJfQogCXJldHVybiBlcnI7CiB9CiAKQEAgLTY3OSw4ICYjNDM7Njg0LDExIEBAIHN0YXRpYyB2b2lkIGZsb3BweV9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogCWVsc2UgaWYgKGZzLSZndDtyZWZfY291bnQgJmd0OyAwKQogCQktLWZzLSZndDtyZWZfY291bnQ7CiAKLQlpZiAoZnMtJmd0O3JlZl9jb3VudCA9PSAwKQomIzQzOwlpZiAoZnMtJmd0O3JlZl9jb3VudCA9PSAwKSB7CiYjNDM7CQlzd2ltX2RyaXZlKGJhc2UsIGZzLSZndDtsb2NhdGlvbik7CiAJCXN3aW1fbW90b3IoYmFzZSwgT0ZGKTsKJiM0MzsJCXN3aW1fZHJpdmUoYmFzZSwgTk9fRFJJVkUpOwomIzQzOwl9CiAJbXV0ZXhfdW5sb2NrKCZhbXA7c3dpbV9tdXRleCk7CiB9CiAKQEAgLTY5MSw3ICYjNDM7Njk5LDcgQEAgc3RhdGljIGludCBmbG9wcHlfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLAogCWludCBlcnI7CiAKIAlpZiAoKGNtZCAmYW1wOyAweDgwKSAmYW1wOyZhbXA7ICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKJiM0MzsJCXJldHVybiAtRVBFUk07CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgRkRFSkVDVDoKQEAgLTc1MCwxMCAmIzQzOzc1OCw5IEBAIHN0YXRpYyBpbnQgc3dpbV9hZGRfZmxvcHB5KHN0cnVjdCBzd2ltX3ByaXYgKnN3ZCwgZW51bSBkcml2ZV9sb2NhdGlvbiBsb2NhdGlvbikKIAlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9ICZhbXA7c3dkLSZndDt1bml0W3N3ZC0mZ3Q7ZmxvcHB5X2NvdW50XTsKIAlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gc3dkLSZndDtiYXNlOwogCiYjNDM7CWZzLSZndDtzd2QgPSBzd2Q7CiAJZnMtJmd0O2xvY2F0aW9uID0gbG9jYXRpb247CiAKLQlzd2ltX2RyaXZlKGJhc2UsIGxvY2F0aW9uKTsKLQogCXN3aW1fbW90b3IoYmFzZSwgT0ZGKTsKIAogCWZzLSZndDt0eXBlID0gSERfTUVESUE7CkBAIC03NjEsNiAmIzQzOzc2OCw3IEBAIHN0YXRpYyBpbnQgc3dpbV9hZGRfZmxvcHB5KHN0cnVjdCBzd2ltX3ByaXYgKnN3ZCwgZW51bSBkcml2ZV9sb2NhdGlvbiBsb2NhdGlvbikKIAogCWZzLSZndDtyZWZfY291bnQgPSAwOwogCWZzLSZndDtlamVjdGVkID0gMTsKJiM0MzsJZnMtJmd0O3RyYWNrID0gMDsKIAogCXN3ZC0mZ3Q7ZmxvcHB5X2NvdW50JiM0MzsmIzQzOzsKIApAQCAtNzg1LDI1ICYjNDM7NzkzLDQzIEBAIHN0YXRpYyB2b2lkIHN3aW1fY2xlYW51cF9mbG9wcHlfZGlzayhzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcykKIAlibGtfbXFfZnJlZV90YWdfc2V0KCZhbXA7ZnMtJmd0O3RhZ19zZXQpOwogfQogCi1zdGF0aWMgaW50IHN3aW1fZmxvcHB5X2luaXQoc3RydWN0IHN3aW1fcHJpdiAqc3dkKQomIzQzO3N0YXRpYyB2b2lkIHN3aW1fc2V0X3BhcmFtZXRlcnMoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwlzdGF0aWMgY29uc3QgdTggbWVtW10gPSB7IDB4MTgsIDB4NDEsIDB4MmUsIDB4MmUsIDB4MTgsIDB4MTgsIDB4MWIsIDB4MWIsCiYjNDM7CQkJCSAgMHgyZiwgMHgyZiwgMHgxOSwgMHgxOSwgMHg5NywgMHgxYiwgMHg1NywgMHgzYiwgfTsKJiM0MzsKJiM0MzsJc3dpbV93cml0ZShiYXNlLCBtb2RlMCwgMCk7IC8qIHJlc2V0IHBhcmFtZXRlciBtZW1vcnkgaW5kZXggKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IDE2OyAmIzQzOyYjNDM7aSkKJiM0MzsJCXN3aW1fd3JpdGUoYmFzZSwgcGFyYW1ldGVyLCBtZW1baV0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHN3aW1fZmxvcHB5X2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKJiM0MzsJc3RydWN0IHN3aW1fcHJpdiAqc3dkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CXVuc2lnbmVkIGludCAqZGF0YSA9IHBkZXYtJmd0O2Rldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gewotCQkuZmVhdHVyZXMJCT0gQkxLX0ZFQVRfUk9UQVRJT05BTCwKJiM0MzsJCS5mZWF0dXJlcyA9IEJMS19GRUFUX1JPVEFUSU9OQUwsCiAJfTsKIAlpbnQgZXJyOwogCWludCBkcml2ZTsKIAlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gc3dkLSZndDtiYXNlOwogCiYjNDM7CXN3aW1fd3JpdGUoYmFzZSwgc2V0dXAsIFNfSUJNX0RSSVZFIHwgKCpkYXRhID8gU19GQ0xLX0RJVjIgOiAwKSk7CiYjNDM7CiYjNDM7CXN3aW1fc2V0X3BhcmFtZXRlcnMoYmFzZSk7CiYjNDM7CiAJLyogc2NhbiBmbG9wcHkgZHJpdmVzICovCiAKIAlzd2ltX2RyaXZlKGJhc2UsIElOVEVSTkFMX0RSSVZFKTsKIAlpZiAoc3dpbV9yZWFkYml0KGJhc2UsIERSSVZFX1BSRVNFTlQpICZhbXA7JmFtcDsKLQkgICAgIXN3aW1fcmVhZGJpdChiYXNlLCBPTkVNRUdfRFJJVkUpKQomIzQzOwkgICAgIXN3aW1fcmVhZGJpdChiYXNlLCBPTkVNRUdfRFJJVkUpICZhbXA7JmFtcDsgIXN3aW1fdHJhY2swMChiYXNlKSkKIAkJc3dpbV9hZGRfZmxvcHB5KHN3ZCwgSU5URVJOQUxfRFJJVkUpOwogCXN3aW1fZHJpdmUoYmFzZSwgRVhURVJOQUxfRFJJVkUpOwogCWlmIChzd2ltX3JlYWRiaXQoYmFzZSwgRFJJVkVfUFJFU0VOVCkgJmFtcDsmYW1wOwotCSAgICAhc3dpbV9yZWFkYml0KGJhc2UsIE9ORU1FR19EUklWRSkpCiYjNDM7CSAgICAhc3dpbV9yZWFkYml0KGJhc2UsIE9ORU1FR19EUklWRSkgJmFtcDsmYW1wOyAhc3dpbV90cmFjazAwKGJhc2UpKQogCQlzd2ltX2FkZF9mbG9wcHkoc3dkLCBFWFRFUk5BTF9EUklWRSk7CiYjNDM7CXN3aW1fZHJpdmUoYmFzZSwgTk9fRFJJVkUpOwogCiAJLyogcmVnaXN0ZXIgZmxvcHB5IGRyaXZlcyAqLwogCkBAIC04MTQsMTEgJiM0Mzs4NDAsOSBAQCBzdGF0aWMgaW50IHN3aW1fZmxvcHB5X2luaXQoc3RydWN0IHN3aW1fcHJpdiAqc3dkKQogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCXNwaW5fbG9ja19pbml0KCZhbXA7c3dkLSZndDtsb2NrKTsKLQogCWZvciAoZHJpdmUgPSAwOyBkcml2ZSAmbHQ7IHN3ZC0mZ3Q7ZmxvcHB5X2NvdW50OyBkcml2ZSYjNDM7JiM0MzspIHsKIAkJZXJyID0gYmxrX21xX2FsbG9jX3NxX3RhZ19zZXQoJmFtcDtzd2QtJmd0O3VuaXRbZHJpdmVdLnRhZ19zZXQsCi0JCQkJJmFtcDtzd2ltX21xX29wcywgMiwgMCk7CiYjNDM7CQkJCSZhbXA7c3dpbV9tcV9vcHMsIDIsIEJMS19NUV9GX0JMT0NLSU5HKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZXhpdF9wdXRfZGlza3M7CiAKQEAgLTgzMCw4ICYjNDM7ODU0LDYgQEAgc3RhdGljIGludCBzd2ltX2Zsb3BweV9pbml0KHN0cnVjdCBzd2ltX3ByaXYgKnN3ZCkKIAkJCWVyciA9IFBUUl9FUlIoc3dkLSZndDt1bml0W2RyaXZlXS5kaXNrKTsKIAkJCWdvdG8gZXhpdF9wdXRfZGlza3M7CiAJCX0KLQotCQlzd2QtJmd0O3VuaXRbZHJpdmVdLnN3ZCA9IHN3ZDsKIAl9CiAKIAlmb3IgKGRyaXZlID0gMDsgZHJpdmUgJmx0OyBzd2QtJmd0O2Zsb3BweV9jb3VudDsgZHJpdmUmIzQzOyYjNDM7KSB7CkBAIC05MDUsNyAmIzQzOzkyNyw3IEBAIHN0YXRpYyBpbnQgc3dpbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiAKIAlzd2QtJmd0O2Jhc2UgPSBzd2ltX2Jhc2U7CiAKLQlyZXQgPSBzd2ltX2Zsb3BweV9pbml0KHN3ZCk7CiYjNDM7CXJldCA9IHN3aW1fZmxvcHB5X2luaXQoZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9rZnJlZTsKIApAQCAtOTQ1LDcgJiM0Mzs5NjcsNyBAQCBzdGF0aWMgdm9pZCBzd2ltX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzd2ltX2RyaXZlciA9IHsKIAkucHJvYmUgID0gc3dpbV9wcm9iZSwKIAkucmVtb3ZlID0gc3dpbV9yZW1vdmUsCi0JLmRyaXZlciAgID0gewomIzQzOwkuZHJpdmVyID0gewogCQkubmFtZQk9IENBUkROQU1FLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TIGIvZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TCmluZGV4IDNkN2EyZDg3NTk1YTU3Li42NWI0ZTQ2NThlMTBjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svc3dpbV9hc20uUwpAQCAtNSw3ICYjNDM7NSw3IEBACiAgKiBuZWVkcyBhc3NlbWJseSBsYW5ndWFnZSBiZWNhdXNlIGlzIHZlcnkgdGltaW5nIGRlcGVuZGVudAogICogdGhpcyBjb250cm9sbGVyIGV4aXN0cyBvbmx5IG9uIG1hY2ludG9zaCA2ODB4MCBiYXNlZAogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA4IExhdXJlbnQgVml2aWVyICZsdDtMYXVyZW50QGx2aXZpZXIuaW5mbyZndDsKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggTGF1cmVudCBWaXZpZXIgJmx0O0xhdXJlbnRAbHZpdmllci5pbmZvJmd0OwogICoKICAqIGJhc2VkIG9uIEFsYXN0YWlyIEJyaWRnZXdhdGVyIFNXSU0gYW5hbHlzaXMsIDIwMDEKICAqIGJhc2VkIG9uIG5ldEJTRCBJV00gZHJpdmVyIChjKSAxOTk3LCAxOTk4IEhhdWtlIEZhdGguCkBAIC0xNCwxMzUgJiM0MzsxNCwxMzggQEAKICAqIDIwMDgtMTEtMDUgKGx2KSAtIGFkZCBnZXRfc3dpbV9tb2RlCiAgKi8KIAotCS5lcXUJd3JpdGVfZGF0YSwJMHgwMDAwCi0JLmVxdQl3cml0ZV9tYXJrLAkweDAyMDAKLQkuZXF1CXdyaXRlX0NSQywJMHgwNDAwCi0JLmVxdQl3cml0ZV9wYXJhbWV0ZXIsMHgwNjAwCi0JLmVxdQl3cml0ZV9waGFzZSwJMHgwODAwCi0JLmVxdQl3cml0ZV9zZXR1cCwJMHgwYTAwCi0JLmVxdQl3cml0ZV9tb2RlMCwJMHgwYzAwCi0JLmVxdQl3cml0ZV9tb2RlMSwJMHgwZTAwCi0JLmVxdQlyZWFkX2RhdGEsCTB4MTAwMAotCS5lcXUJcmVhZF9tYXJrLAkweDEyMDAKLQkuZXF1CXJlYWRfZXJyb3IsCTB4MTQwMAotCS5lcXUJcmVhZF9wYXJhbWV0ZXIsCTB4MTYwMAotCS5lcXUJcmVhZF9waGFzZSwJMHgxODAwCi0JLmVxdQlyZWFkX3NldHVwLAkweDFhMDAKLQkuZXF1CXJlYWRfc3RhdHVzLAkweDFjMDAKLQkuZXF1CXJlYWRfaGFuZHNoYWtlLAkweDFlMDAKLQotCS5lcXUJb19zaWRlLCAwCi0JLmVxdQlvX3RyYWNrLCAxCi0JLmVxdQlvX3NlY3RvciwgMgotCS5lcXUJb19zaXplLCAzCi0JLmVxdQlvX2NyYzAsIDQKLQkuZXF1CW9fY3JjMSwgNQotCi0JLmVxdQlzZWVrX3RpbWUsIDMwMDAwCi0JLmVxdQltYXhfcmV0cnksIDQwCi0JLmVxdQlzZWN0b3Jfc2l6ZSwgNTEyCiYjNDM7CS5lcXUJLkx3cml0ZV9kYXRhLAkJMHgwMDAwCiYjNDM7CS5lcXUJLkx3cml0ZV9tYXJrLAkJMHgwMjAwCiYjNDM7CS5lcXUJLkx3cml0ZV9DUkMsCQkweDA0MDAKJiM0MzsJLmVxdQkuTHdyaXRlX3BhcmFtZXRlciwJMHgwNjAwCiYjNDM7CS5lcXUJLkx3cml0ZV9waGFzZSwJCTB4MDgwMAomIzQzOwkuZXF1CS5Md3JpdGVfc2V0dXAsCQkweDBhMDAKJiM0MzsJLmVxdQkuTHdyaXRlX21vZGUwLAkJMHgwYzAwCiYjNDM7CS5lcXUJLkx3cml0ZV9tb2RlMSwJCTB4MGUwMAomIzQzOwkuZXF1CS5McmVhZF9kYXRhLAkJMHgxMDAwCiYjNDM7CS5lcXUJLkxyZWFkX21hcmssCQkweDEyMDAKJiM0MzsJLmVxdQkuTHJlYWRfZXJyb3IsCQkweDE0MDAKJiM0MzsJLmVxdQkuTHJlYWRfcGFyYW1ldGVyLAkweDE2MDAKJiM0MzsJLmVxdQkuTHJlYWRfcGhhc2UsCQkweDE4MDAKJiM0MzsJLmVxdQkuTHJlYWRfc2V0dXAsCQkweDFhMDAKJiM0MzsJLmVxdQkuTHJlYWRfc3RhdHVzLAkJMHgxYzAwCiYjNDM7CS5lcXUJLkxyZWFkX2hhbmRzaGFrZSwJMHgxZTAwCiYjNDM7CiYjNDM7CS5lcXUJLkxvX3NpZGUsCQkwCiYjNDM7CS5lcXUJLkxvX3RyYWNrLAkJMQomIzQzOwkuZXF1CS5Mb19zZWN0b3IsCQkyCiYjNDM7CS5lcXUJLkxvX3NpemUsCQkzCiYjNDM7CS5lcXUJLkxvX2NyYzAsCQk0CiYjNDM7CS5lcXUJLkxvX2NyYzEsCQk1CiYjNDM7CiYjNDM7CS5lcXUJLkxzZWVrX3RpbWUsCQkzMDAwMAomIzQzOwkuZXF1CS5MbWF4X3JldHJ5LAkJNDAKJiM0MzsJLmVxdQkuTHNlY3Rvcl9zaXplLAkJNTEyCiYjNDM7CiYjNDM7CS5lcXUJLkxtcl9jbGVhcl9maWZvLAkweDAxCiYjNDM7CS5lcXUJLkxtcl9hY3Rpb24sCQkweDA4CiYjNDM7CS5lcXUJLkxtcl93cml0ZV9hY3Rpb24sCTB4MTgKJiM0MzsKJiM0MzsJLmVxdQkuTGhyX2NyY19lcnJvciwJCTB4MDIKJiM0MzsJLmVxdQkuTGhyX2ZpZm9fMmJ5dGVzLAkweDQwCiYjNDM7CS5lcXUJLkxocl9maWZvXzFieXRlLAkweDgwCiAKIAkuZ2xvYmFsIHN3aW1fcmVhZF9zZWN0b3JfaGVhZGVyCiBzd2ltX3JlYWRfc2VjdG9yX2hlYWRlcjoKIAlsaW5rCSVhNiwgIzAKLQltb3ZlbWwJJWQxLSVkNS8lYTAtJWE0LCVzcEAtCiYjNDM7CW1vdmVtbAklZDEtJWQ1LyVhMC0lYTUsJXNwQC0KIAltb3ZlbAklYTZAKDB4MGMpLCAlYTQKLQlic3IJbWZtX3JlYWRfYWRkcm1hcmsKLQltb3ZlbWwJJXNwQCYjNDM7LCAlZDEtJWQ1LyVhMC0lYTQKJiM0MzsJbW92ZXEJIy0xLCAlZDAKJiM0MzsJYnNyCS5MbWZtX3JlYWRfYWRkcm1hcmsKJiM0MzsJbW92ZW1sCSVzcEAmIzQzOywgJWQxLSVkNS8lYTAtJWE1CiAJdW5sawklYTYKIAlydHMKIAotc2VjdG9yX2FkZHJlc3NfbWFyazoKJiM0MzsuTHNlY3Rvcl9hZGRyZXNzX21hcms6CiAJLmJ5dGUJMHhhMSwgMHhhMSwgMHhhMSwgMHhmZQotc2VjdG9yX2RhdGFfbWFyazoKJiM0MzsuTHNlY3Rvcl9kYXRhX21hcms6CiAJLmJ5dGUJMHhhMSwgMHhhMSwgMHhhMSwgMHhmYgogCi1tZm1fcmVhZF9hZGRybWFyazoKJiM0MzsuTG1mbV9yZWFkX2FkZHJtYXJrOgogCW1vdmVsCSVhNkAoMHgwOCksICVhMwotCWxlYQklYTNAKHJlYWRfaGFuZHNoYWtlKSwgJWEyCi0JbGVhCSVhM0AocmVhZF9tYXJrKSwgJWEzCi0JbW92ZXEJIy0xLCAlZDAKLQltb3Zldwkjc2Vla190aW1lLCAlZDIKLQotd2FpdF9oZWFkZXJfaW5pdDoKLQl0c3RiCSVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaykKLQltb3ZlYgkjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaykKLQltb3ZlYgkjMHgwMSwgJWEzQCh3cml0ZV9tb2RlMSAtIHJlYWRfbWFyaykKLQltb3ZlYgkjMHgwMSwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaykKLQl0c3RiCSVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaykKLQltb3ZlYgkjMHgwOCwgJWEzQCh3cml0ZV9tb2RlMSAtIHJlYWRfbWFyaykKLQotCWxlYQlzZWN0b3JfYWRkcmVzc19tYXJrLCAlYTAKJiM0MzsJbGVhCSVhM0AoLkxyZWFkX2hhbmRzaGFrZSksICVhMgomIzQzOwlsZWEJJWEzQCguTHJlYWRfZGF0YSksICVhNQomIzQzOwlsZWEJJWEzQCguTHJlYWRfbWFyayksICVhMwomIzQzOwltb3ZldwkjLkxzZWVrX3RpbWUsICVkMgomIzQzOwomIzQzOy5Md2FpdF9oZWFkZXJfaW5pdDoKJiM0MzsJbW92ZWIJIy5MbXJfd3JpdGVfYWN0aW9uLCAlYTNAKC5Md3JpdGVfbW9kZTAgLSAuTHJlYWRfbWFyaykKJiM0MzsJbW92ZWIJIy5MbXJfY2xlYXJfZmlmbywgJWEzQCguTHdyaXRlX21vZGUxIC0gLkxyZWFkX21hcmspCiYjNDM7CW1vdmViCSMuTG1yX2NsZWFyX2ZpZm8sICVhM0AoLkx3cml0ZV9tb2RlMCAtIC5McmVhZF9tYXJrKQomIzQzOwl0c3RiCSVhM0AoLkxyZWFkX2Vycm9yIC0gLkxyZWFkX21hcmspCiYjNDM7CW1vdmViCSMuTG1yX2FjdGlvbiwgJWEzQCguTHdyaXRlX21vZGUxIC0gLkxyZWFkX21hcmspCiYjNDM7CiYjNDM7CWxlYQkuTHNlY3Rvcl9hZGRyZXNzX21hcmssICVhMAogCW1vdmVxCSMzLCAlZDEKIAotd2FpdF9hZGRyX21hcmtfYnl0ZToKLQomIzQzOy5Md2FpdF9hZGRyX21hcmtfYnl0ZToKIAl0c3RiCSVhMkAKLQlkYm1pCSVkMiwgd2FpdF9hZGRyX21hcmtfYnl0ZQotCWJwbAloZWFkZXJfZXhpdAomIzQzOwlkYm1pCSVkMiwgLkx3YWl0X2FkZHJfbWFya19ieXRlCiYjNDM7CWJwbAkuTHNpZ25hbF9ub255YgogCiAJbW92ZWIJJWEzQCwgJWQzCiAJY21wYgklYTBAJiM0MzssICVkMwotCWRibmUJJWQxLCB3YWl0X2FkZHJfbWFya19ieXRlCi0JYm5lCXdhaXRfaGVhZGVyX2luaXQKLQotCW1vdmVxCSNtYXhfcmV0cnksICVkMgomIzQzOwlkYm5lCSVkMSwgLkx3YWl0X2FkZHJfbWFya19ieXRlCiYjNDM7CWJuZQkuTHdhaXRfaGVhZGVyX2luaXQKIAotYW1hcmswOgl0c3RiCSVhMkAKLQlkYm1pCSVkMiwgYW1hcmswCi0JYnBsCXNpZ25hbF9ub255YgotCi0JbW92ZWIJJWEzQCwgJWE0QChvX3RyYWNrKQotCi0JbW92ZXEJI21heF9yZXRyeSwgJWQyCi0KLWFtYXJrMToJdHN0YgklYTJACi0JZGJtaQklZDIsIGFtYXJrMQotCWJwbAlzaWduYWxfbm9ueWIKLQotCW1vdmViCSVhM0AsICVhNEAob19zaWRlKQotCi0JbW92ZXEJI21heF9yZXRyeSwgJWQyCiYjNDM7CW1vdmVxCSMuTG1heF9yZXRyeSwgJWQyCiYjNDM7LkxhbWFyazA6CiYjNDM7CXRzdGIJJWEyQAomIzQzOwlkYm1pCSVkMiwgLkxhbWFyazAKJiM0MzsJYnBsCS5Mc2lnbmFsX25vbnliCiAKLWFtYXJrMjoJdHN0YgklYTJACi0JZGJtaQklZDIsIGFtYXJrMgotCWJwbAlzaWduYWxfbm9ueWIKJiM0MzsJbW92ZWIJJWE1QCwgJWE0QCguTG9fdHJhY2spCiAKLQltb3ZlYgklYTNALCAlYTRAKG9fc2VjdG9yKQomIzQzOwltb3ZlcQkjLkxtYXhfcmV0cnksICVkMgomIzQzOy5MYW1hcmsxOgomIzQzOwl0c3RiCSVhMkAKJiM0MzsJZGJtaQklZDIsIC5MYW1hcmsxCiYjNDM7CWJwbAkuTHNpZ25hbF9ub255YgogCi0JbW92ZXEJI21heF9yZXRyeSwgJWQyCiYjNDM7CW1vdmViCSVhNUAsICVhNEAoLkxvX3NpZGUpCiAKLWFtYXJrMzoJdHN0YgklYTJACi0JZGJtaQklZDIsIGFtYXJrMwotCWJwbAlzaWduYWxfbm9ueWIKJiM0MzsJbW92ZXEJIy5MbWF4X3JldHJ5LCAlZDIKJiM0MzsuTGFtYXJrMjoKJiM0MzsJdHN0YgklYTJACiYjNDM7CWRibWkJJWQyLCAuTGFtYXJrMgomIzQzOwlicGwJLkxzaWduYWxfbm9ueWIKIAotCW1vdmViCSVhM0AsICVhNEAob19zaXplKQomIzQzOwltb3ZlYgklYTVALCAlYTRAKC5Mb19zZWN0b3IpCiAKLQltb3ZlcQkjbWF4X3JldHJ5LCAlZDIKJiM0MzsJbW92ZXEJIy5MbWF4X3JldHJ5LCAlZDIKJiM0MzsuTGFtYXJrMzoKJiM0MzsJdHN0YgklYTJACiYjNDM7CWRibWkJJWQyLCAuTGFtYXJrMwomIzQzOwlicGwJLkxzaWduYWxfbm9ueWIKIAotY3JjMDoJdHN0YgklYTJACi0JZGJtaQklZDIsIGNyYzAKLQlicGwJc2lnbmFsX25vbnliCiYjNDM7CW1vdmViCSVhNUAsICVhNEAoLkxvX3NpemUpCiAKLQltb3ZlYgklYTNALCAlYTRAKG9fY3JjMCkKJiM0MzsJbW92ZXEJIy5MbWF4X3JldHJ5LCAlZDIKJiM0MzsuTGNyYzA6CiYjNDM7CXRzdGIJJWEyQAomIzQzOwlkYm1pCSVkMiwgLkxjcmMwCiYjNDM7CWJwbAkuTHNpZ25hbF9ub255YgogCi0JbW92ZXEJI21heF9yZXRyeSwgJWQyCiYjNDM7CW1vdmViCSVhNUAsICVhNEAoLkxvX2NyYzApCiAKLWNyYzE6CXRzdGIJJWEyQAotCWRibWkJJWQyLCBjcmMxCi0JYnBsCXNpZ25hbF9ub255YgomIzQzOwltb3ZlcQkjLkxtYXhfcmV0cnksICVkMgomIzQzOy5MY3JjMToJbW92ZWIJJWEyQCwgJWQ1CiYjNDM7CWRibWkJJWQyLCAuTGNyYzEKJiM0MzsJYnBsCS5Mc2lnbmFsX25vbnliCiAKLQltb3ZlYgklYTNALCAlYTRAKG9fY3JjMSkKJiM0MzsJbW92ZWIJJWE1QCwgJWE0QCguTG9fY3JjMSkKIAotCXRzdGIJJWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKQomIzQzOwlhbmRiCSMuTGhyX2NyY19lcnJvciwgJWQ1CiYjNDM7CWJuZQkuTHNpZ25hbF9ub255YgogCi1oZWFkZXJfZXhpdDoKIAltb3ZlcQkjMCwgJWQwCi0JbW92ZWIJIzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCi0JcnRzCi1zaWduYWxfbm9ueWI6Ci0JbW92ZXEJIy0xLCAlZDAKLQltb3ZlYgkjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaykKJiM0MzsuTHNpZ25hbF9ub255YjoKJiM0MzsJbW92ZWIJIy5MbXJfd3JpdGVfYWN0aW9uLCAlYTNAKC5Md3JpdGVfbW9kZTAgLSAuTHJlYWRfbWFyaykKIAlydHMKIAogCS5nbG9iYWwgc3dpbV9yZWFkX3NlY3Rvcl9kYXRhCkBAIC0xNTAsOTQgJiM0MzsxNTMsODcgQEAgc3dpbV9yZWFkX3NlY3Rvcl9kYXRhOgogCWxpbmsJJWE2LCAjMAogCW1vdmVtbAklZDEtJWQ1LyVhMC0lYTUsJXNwQC0KIAltb3ZlbAklYTZAKDB4MGMpLCAlYTQKLQlic3IJbWZtX3JlYWRfZGF0YQomIzQzOwltb3ZlcQkjLTEsICVkMAomIzQzOwlic3IJLkxtZm1fcmVhZF9kYXRhCiAJbW92ZW1sCSVzcEAmIzQzOywgJWQxLSVkNS8lYTAtJWE1CiAJdW5sawklYTYKIAlydHMKIAotbWZtX3JlYWRfZGF0YToKJiM0MzsuTG1mbV9yZWFkX2RhdGE6CiAJbW92ZWwJJWE2QCgweDA4KSwgJWEzCi0JbGVhCSVhM0AocmVhZF9oYW5kc2hha2UpLCAlYTIKLQlsZWEJJWEzQChyZWFkX2RhdGEpLCAlYTUKLQlsZWEJJWEzQChyZWFkX21hcmspLCAlYTMKLQltb3Zldwkjc2Vla190aW1lLCAlZDIKLQotd2FpdF9kYXRhX2luaXQ6Ci0JdHN0YgklYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspCi0JbW92ZWIJIzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCi0JbW92ZWIJIzB4MDEsICVhM0Aod3JpdGVfbW9kZTEgLSByZWFkX21hcmspCi0JbW92ZWIJIzB4MDEsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCi0JdHN0YgklYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspCi0JbW92ZWIJIzB4MDgsICVhM0Aod3JpdGVfbW9kZTEgLSByZWFkX21hcmspCi0KLQlsZWEJc2VjdG9yX2RhdGFfbWFyaywgJWEwCiYjNDM7CWxlYQklYTNAKC5McmVhZF9oYW5kc2hha2UpLCAlYTIKJiM0MzsJbGVhCSVhM0AoLkxyZWFkX2RhdGEpLCAlYTUKJiM0MzsJbGVhCSVhM0AoLkxyZWFkX21hcmspLCAlYTMKJiM0MzsJbW92ZXcJIy5Mc2Vla190aW1lLCAlZDIKJiM0MzsKJiM0MzsuTHdhaXRfZGF0YV9pbml0OgomIzQzOwltb3ZlYgkjLkxtcl93cml0ZV9hY3Rpb24sICVhM0AoLkx3cml0ZV9tb2RlMCAtIC5McmVhZF9tYXJrKQomIzQzOwltb3ZlYgkjLkxtcl9jbGVhcl9maWZvLCAlYTNAKC5Md3JpdGVfbW9kZTEgLSAuTHJlYWRfbWFyaykKJiM0MzsJbW92ZWIJIy5MbXJfY2xlYXJfZmlmbywgJWEzQCguTHdyaXRlX21vZGUwIC0gLkxyZWFkX21hcmspCiYjNDM7CXRzdGIJJWEzQCguTHJlYWRfZXJyb3IgLSAuTHJlYWRfbWFyaykKJiM0MzsJbW92ZWIJIy5MbXJfYWN0aW9uLCAlYTNAKC5Md3JpdGVfbW9kZTEgLSAuTHJlYWRfbWFyaykKJiM0MzsKJiM0MzsJbGVhCS5Mc2VjdG9yX2RhdGFfbWFyaywgJWEwCiAJbW92ZXEJIzMsICVkMQogCiAJLyogd2FpdCBkYXRhIGFkZHJlc3MgbWFyayAqLwogCi13YWl0X2RhdGFfbWFya19ieXRlOgotCiYjNDM7Lkx3YWl0X2RhdGFfbWFya19ieXRlOgogCXRzdGIJJWEyQAotCWRibWkJJWQyLCB3YWl0X2RhdGFfbWFya19ieXRlCi0JYnBsCWRhdGFfZXhpdAomIzQzOwlkYm1pCSVkMiwgLkx3YWl0X2RhdGFfbWFya19ieXRlCiYjNDM7CWJwbAkuTGRhdGFfZXhpdAogCiAJbW92ZWIJJWEzQCwgJWQzCiAJY21wYgklYTBAJiM0MzssICVkMwotCWRibmUJJWQxLCB3YWl0X2RhdGFfbWFya19ieXRlCi0JYm5lCXdhaXRfZGF0YV9pbml0CiYjNDM7CWRibmUJJWQxLCAuTHdhaXRfZGF0YV9tYXJrX2J5dGUKJiM0MzsJYm5lCS5Md2FpdF9kYXRhX2luaXQKIAogCS8qIHJlYWQgZGF0YSAqLwogCi0JdHN0YgklYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspCi0KLQltb3ZlbAkjc2VjdG9yX3NpemUtMSwgJWQ0CQkvKiBzZWN0b3Igc2l6ZSAqLwotcmVhZF9uZXdfZGF0YToKLQltb3ZldwkjbWF4X3JldHJ5LCAlZDIKLXJlYWRfZGF0YV9sb29wOgomIzQzOwltb3ZlbAkjLkxzZWN0b3Jfc2l6ZSAtIDEsICVkNAkJLyogc2VjdG9yIHNpemUgKi8KJiM0MzsuTHJlYWRfbmV3X2RhdGE6CiYjNDM7CW1vdmV3CSMuTG1heF9yZXRyeSwgJWQyCiYjNDM7LkxyZWFkX2RhdGFfbG9vcDoKIAltb3ZlYgklYTJALCAlZDUKLQlhbmRiCSMweGMwLCAlZDUKLQlkYm5lCSVkMiwgcmVhZF9kYXRhX2xvb3AKLQliZXEJZGF0YV9leGl0CiYjNDM7CWFuZGIJIyguTGhyX2ZpZm9fMmJ5dGVzICYjNDM7IC5MaHJfZmlmb18xYnl0ZSksICVkNQomIzQzOwliZXEJMWYKJiM0MzsJbW92ZXcJIy5MbWF4X3JldHJ5LCAlZDIKIAltb3ZlYgklYTVALCAlYTRAJiM0MzsKLQlhbmRiCSMweDQwLCAlZDUKLQlkYm5lCSVkNCwgcmVhZF9uZXdfZGF0YQotCWJlcQlleGl0X2xvb3AKJiM0MzsJZGJyYQklZDQsIDFmCiYjNDM7CWJyYQkuTGRhdGFfY3JjMAomIzQzOzE6CWFuZGIJIy5MaHJfZmlmb18yYnl0ZXMsICVkNQomIzQzOwlkYm5lCSVkMiwgLkxyZWFkX2RhdGFfbG9vcAomIzQzOwliZXEJLkxkYXRhX2V4aXQKIAltb3ZlYgklYTVALCAlYTRAJiM0MzsKLQlkYnJhCSVkNCwgcmVhZF9uZXdfZGF0YQotZXhpdF9sb29wOgomIzQzOwlkYnJhCSVkNCwgLkxyZWFkX25ld19kYXRhCiAKIAkvKiByZWFkIENSQyAqLwogCi0JbW92ZXcJI21heF9yZXRyeSwgJWQyCi1kYXRhX2NyYzA6Ci0KJiM0MzsJbW92ZXcJIy5MbWF4X3JldHJ5LCAlZDIKJiM0MzsuTGRhdGFfY3JjMDoKIAl0c3RiCSVhMkAKLQlkYm1pCSVkMiwgZGF0YV9jcmMwCi0JYnBsCWRhdGFfZXhpdAomIzQzOwlkYm1pCSVkMiwgLkxkYXRhX2NyYzAKJiM0MzsJYnBsCS5MZGF0YV9leGl0CiAKLQltb3ZlYgklYTNALCAlZDUKJiM0MzsJbW92ZWIJJWE1QCwgJWQyCiAKLQltb3ZlcQkjbWF4X3JldHJ5LCAlZDIKLQotZGF0YV9jcmMxOgotCi0JdHN0YgklYTJACi0JZGJtaQklZDIsIGRhdGFfY3JjMQotCWJwbAlkYXRhX2V4aXQKLQotCW1vdmViCSVhM0AsICVkNQomIzQzOwltb3ZlcQkjLkxtYXhfcmV0cnksICVkMgomIzQzOy5MZGF0YV9jcmMxOgomIzQzOwltb3ZlYgklYTJALCAlZDUKJiM0MzsJZGJtaQklZDIsIC5MZGF0YV9jcmMxCiYjNDM7CWJwbAkuTGRhdGFfZXhpdAogCi0JdHN0YgklYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspCiYjNDM7CW1vdmViCSVhNUAsICVkMgogCi0JbW92ZWIJIzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCiYjNDM7CWFuZGIJIy5MaHJfY3JjX2Vycm9yLCAlZDUKJiM0MzsJYm5lCS5MZGF0YV9leGl0CiAKIAkvKiByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHJlYWQgKi8KIAotCW1vdmVsCSNzZWN0b3Jfc2l6ZSwgJWQwCiYjNDM7CW1vdmVsCSMuTHNlY3Rvcl9zaXplLCAlZDAKIAlhZGR3CSMxLCAlZDQKIAlzdWJsCSVkNCwgJWQwCi0JcnRzCi1kYXRhX2V4aXQ6Ci0JbW92ZWIJIzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCi0JbW92ZXEJIy0xLCAlZDAKJiM0MzsKJiM0MzsuTGRhdGFfZXhpdDoKJiM0MzsJbW92ZWIJIy5MbXJfd3JpdGVfYWN0aW9uLCAlYTNAKC5Md3JpdGVfbW9kZTAgLSAuTHJlYWRfbWFyaykKIAlydHMKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2NTIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU1dJTSBGbG9wcHkgRHJpdmVyIFBhdGNoIGZvciBtNjhrIE1hY3MqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHRvdWNoaW5nIGBhcmNoL202OGsvbWFjL2NvbmZpZy5jYCwgYGRyaXZlcnMvYmxvY2svc3dpbS5jYCwgYW5kIGBkcml2ZXJzL2Jsb2NrL3N3aW1fYXNtLlNgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgJiMzNDtTV0lNJiMzNDsg4oCTIFNhbmRlciBXb3puaWFrIEludGVncmF0ZWQgTWFjaGluZS4gVGhhdCBzY3JlYW1zIGZsb3BweSBjb250cm9sbGVyIGRyaXZlciBmb3Igb2xkZXIgbTY4ayBNYWNzLiBBbmQgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGhvbmluZyBpbiBvbiB0aGF0LgoKSXQgbG9va3MgbGlrZSB0aGUgcHJpbWFyeSBmb2N1cyBpcyBhYm91dCBwcm9wZXJseSBjb25maWd1cmluZyB0aGUgJiMzNDtzd2ltJiMzNDsgZGV2aWNlLCBzcGVjaWZpY2FsbHkgYnkgcGFzc2luZyBhIGBkYXRhYCBwYXJhbWV0ZXIgdG8gYHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9yZXNuZGF0YWAuIFRoYXQgYGRhdGFgIGlzIGxpa2VseSBrZXlpbmcgb2ZmIHRoZSBNYWMgbW9kZWwgdG8gc2V0IGBTX0ZDTEtfRElWMmAsIHdoaWNoIG1ha2VzIHNlbnNlOyB0aGUgY2xvY2sgZnJlcXVlbmN5IHZhcmllcyBhY3Jvc3MgdGhvc2Ugb2xkIG1hY2hpbmVzLCBhbmQgdGhlIGRyaXZlciBuZWVkcyB0byBhZGp1c3QgYWNjb3JkaW5nbHkuCgpJIHNlZSBjaGFuZ2VzIHRvIGBzd2ltLmNgIHRoYXQgcmVwbGFjZSBgc2NoZWR1bGVfdGltZW91dGAgd2l0aCBgcG9sbF90aW1lb3V0X3VzYCBhbmQgYHBvbGxfdGltZW91dF91c19hdG9taWNgLiBUaGF04oCZcyBhIGdvb2Qgc2lnbjsgdGhvc2UgcG9sbGluZyBwcmltaXRpdmVzIGFyZSB1c3VhbGx5IGEgYmV0dGVyIGZpdCBmb3IgaGFyZHdhcmUgaW50ZXJhY3Rpb25zLiBQbHVzLCB0aGVyZSBhcmUgc29tZSBtYWNybyBhbmQgY29uc3RhbnQgdHdlYWtzLCBhbmQgaXQgbG9va3MgbGlrZSBhIG5ldyB0aW1lb3V0LCBgc3dpbV9SRUFEWV90aW1lb3V0YCwgaGFzIGJlZW4gYWRkZWQuIFRoZXJlIGFyZSBjaGFuZ2VzIHRvIHRoZSBgc3dpbV9yZWFkX3NlY3Rvcl9yYW5nZWAgYW5kIGBmbG9wcHlfcmVhZF9zZWN0b3JzYCBmdW5jdGlvbnMsIHNvIHRoaXMgaXMgbGlrZWx5IGFib3V0IGltcHJvdmluZyByZWFkIHBlcmZvcm1hbmNlIG9yIHJlbGlhYmlsaXR5LgoKVGhlIGBzd2ltX2FzbS5TYCBjaGFuZ2UgaXMgaW50ZXJlc3RpbmcsIHRvby4gTG9jYWwgbGFiZWxzIGFuZCBzb21lIGxvZ2ljIHVwZGF0ZXMgaW4gYXNzZW1ibHk/IEl0IHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGxpa2VseSByZWZpbmluZyB0aGUgbG93LWxldmVsIGhhcmR3YXJlIGludGVyYWN0aW9uLgoKTm93LCBteSBtaW5kIGdvZXMgdG8gdGVzdGluZy4gSXMgdGhpcyBwYXRjaCBldmVuIHRlc3RhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFRoZSBgc3dpbWAgZHJpdmVyIGlzIHNvIHNwZWNpZmljIHRvIHRob3NlIG9sZGVyIE1hY3MuIENhbiBJIGVtdWxhdGUgdGhhdD8gSG1tLCBRRU1V4oCmIGxldCBtZSBjaGVjay4gQWgsIHllcyEgUUVNVSBoYXMgdGhhdCBgcTgwMGAgbWFjaGluZSwgYSBNYWMgUXVhZHJhIDgwMC4gQW5kIHRoZSBRdWFkcmEgODAwIGlzIG9uZSBvZiB0aGUgbW9kZWxzIHRoYXQgdXNlIHRoZSAzMk1IeiBGQ0xLLCBgTUFDX01PREVMX1E4MDBgLiBHb29kLCB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IHRlc3RhYmxlLiBUaGlzIGRyaXZlciBpcyBpbiBgZHJpdmVycy9ibG9jay9zd2ltLmNgLiBOb3csIGxldCBtZSBxdWlja2x5IHZlcmlmeSB0aGF0IGBDT05GSUdfQkxLX0RFVl9TV0lNYCBpcyBhY3R1YWxseSBlbmFibGVkIGluIHRoZSBidWlsZC4gSSYjMzk7bGwgdXNlIG15IGdyZXBwZXIgdG9vbCBmb3IgYSBxdWljayBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCTEtfREVWX1NXSU0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZz0yNDg9Q09ORklHX0NPTk5FQ1RPUj1tXG5hcmNoL202OGsvY29uZmlncy9tYWNfZGVmY29uZmlnOjI0OTpDT05GSUdfQkxLX0RFVl9TV0lNPW1cbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWctMjUwLUNPTkZJR19aUkFNPW1cbi0tXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWc9Mjc2PUNPTkZJR19BVEFSSV9GTE9QUFk9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnOjI3NzpDT05GSUdfQkxLX0RFVl9TV0lNPW1cbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZy0yNzgtQ09ORklHX0FNSUdBX1oyUkFNPXlcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9NjE9Y29uZmlnIE1BQ19GTE9QUFlcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctNjctXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6Njg6Y29uZmlnIEJMS19ERVZfU1dJTVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTY5LVx0dHJpc3RhdGUgXCYjMzQ7U3VwcG9ydCBmb3IgU1dJTSBNYWNpbnRvc2ggZmxvcHB5XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay9NYWtlZmlsZT0xMj1vYmotJChDT05GSUdfTUFDX0ZMT1BQWSlcdCYjNDM7PSBzd2ltMy5vXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19CTEtfREVWX1NXSU0pXHQmIzQzOz0gc3dpbV9tb2Qub1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZS0xNC1vYmotJChDT05GSUdfQkxLX0RFVl9GRClcdCYjNDM7PSBmbG9wcHkub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODc3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLgoKKipBbmFseXppbmcgdGhlIEJMS19ERVZfU1dJTSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyB0aGUgc3lzdGVtJiMzOTtzIGNvbmZpZ3VyZWQgd2l0aCBgQkxLX0RFVl9TV0lNYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBsZXQmIzM5O3Mgc2VlIHdoYXQgZGVwZW5kcyBvbiB0aGF0LiBJIGtub3cgS2NvbmZpZyBpcyB0aGUgcGxhY2UgdG8gc3RhcnQsIHNvIEkmIzM5O2xsIGp1bXAgcmlnaHQgaW50byBgZHJpdmVycy9ibG9jay9LY29uZmlnYC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlbGF0ZWQgdG8gYEJMS19ERVZfU1dJTWAuIE1heWJlIGl0IHJlbGllcyBvbiBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIG9yIG90aGVyIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBvciBhbnkgcHJlcmVxdWlzaXRlcyB0aGF0IGFyZSBlbmZvcmNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9TV0lNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz02MT1jb25maWcgTUFDX0ZMT1BQWVxuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy02Ny1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZzo2ODpjb25maWcgQkxLX0RFVl9TV0lNXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctNjktXHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IGZvciBTV0lNIE1hY2ludG9zaCBmbG9wcHlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE3NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgZHJpdmVycy9ibG9jay9LY29uZmlnYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9uIGlzIHN0cnVjdHVyZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGhlYWQgc3RyYWlnaHQgaW50byB0aGUgc291cmNlIGFuZCBzZWUgdGhlIGFjdHVhbCBLY29uZmlnIGZpbGUuIExldCYjMzk7cyBzdGFydCB3aXRoIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgLCBhbmQgbXkgaW5zdGluY3QgdGVsbHMgbWUgdG8gem9vbSBpbiBhcm91bmQgbGluZSA2OC4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBkZXBlbmRlbmNpZXMgYW5kIG9wdGlvbnMgYXZhaWxhYmxlIGZvciBjb25maWd1cmluZyBibG9jayBkZXZpY2VzLiBJIGV4cGVjdCB0byBnZXQgYSBzZW5zZSBvZiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzeW1ib2xzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGhlbHAgdGV4dCByaWdodCBhcm91bmQgdGhlcmUuIFRoaXMgc2hvdWxkIHF1aWNrbHkgb3JpZW50IG1lIHRvIHRoZSBjb3JlIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjA6XHRcbiAgNjE6XHRjb25maWcgTUFDX0ZMT1BQWVxuICA2MjpcdFx0dHJpc3RhdGUgXCYjMzQ7U3VwcG9ydCBmb3IgUG93ZXJNYWMgZmxvcHB5XCYjMzQ7XG4gIDYzOlx0XHRkZXBlbmRzIG9uIFBQQ19QTUFDIFx1MDAyNlx1MDAyNiAhUFBDX1BNQUM2NFxuICA2NDpcdFx0aGVscFxuICA2NTpcdFx0ICBJZiB5b3UgaGF2ZSBhIFNXSU0tMyAoU3VwZXIgV296IEludGVncmF0ZWQgTWFjaGluZSAzOyBmcm9tIEFwcGxlKVxuICA2NjpcdFx0ICBmbG9wcHkgY29udHJvbGxlciwgc2F5IFkgaGVyZS4gTW9zdCBjb21tb25seSBmb3VuZCBpbiBQb3dlck1hY3MuXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIEJMS19ERVZfU1dJTVxuICA2OTpcdFx0dHJpc3RhdGUgXCYjMzQ7U3VwcG9ydCBmb3IgU1dJTSBNYWNpbnRvc2ggZmxvcHB5XCYjMzQ7XG4gIDcwOlx0XHRkZXBlbmRzIG9uIE02OEsgXHUwMDI2XHUwMDI2IE1BQyBcdTAwMjZcdTAwMjYgIUhJR0hNRU1cbiAgNzE6XHRcdGhlbHBcbiAgNzI6XHRcdCAgWW91IHNob3VsZCBzZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgZmxvcHB5IHN1cHBvcnRcbiAgNzM6XHRcdCAgYW5kIHlvdSBkb24mIzM5O3QgaGF2ZSBhIElJLCBJSWZ4LCBROTAwLCBROTUwIG9yIEFWIHNlcmllcy5cbiAgNzQ6XHRcbiAgNzU6XHRjb25maWcgQU1JR0FfWjJSQU1cbiAgNzY6XHRcdHRyaXN0YXRlIFwmIzM0O0FtaWdhIFpvcnJvIElJIHJhbWRpc2sgc3VwcG9ydFwmIzM0O1xuICA3NzpcdFx0ZGVwZW5kcyBvbiBaT1JST1xuICA3ODpcdFx0aGVscFxuICA3OTpcdFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdXNpbmcgQ2hpcCBSQU0gYW5kIFpvcnJvIElJIFJBTSBhcyBhXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2ODkKCQkJCQkJCW91dHB1dDogMjUyCgkJCQkJCQl0aG91Z2h0czogMjI2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipTV0lNIEZsb3BweSBEcml2ZXIgQW5hbHlzaXMgZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHRvdWNoaW5nIHRoZSBTV0lNIGZsb3BweSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgbTY4ayBNYWNzLiBUaGUgZGVwZW5kZW5jeSBpcyBgTTY4SyAmYW1wOyZhbXA7IE1BQyAmYW1wOyZhbXA7ICFISUdITUVNYCwgbWFraW5nIGl0IGFyY2hpdGVjdHVyZS1zcGVjaWZpYy4gQ3J1Y2lhbGx5LCBRRU1VIHN1cHBvcnRzIGEgYHE4MDBgIG1hY2hpbmUsIHdoaWNoIGlzIGEgTWFjIFF1YWRyYSA4MDAuIFRoaXMgaXMgYSBzb2xpZCBpbmRpY2F0b3IgdGhhdCB0aGlzIGRyaXZlciBpcyAqcmVhY2hhYmxlKiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCB3aGljaCBpcyBleGNlbGxlbnQgbmV3cyBmb3IgdXMuIFdoaWxlIHN5emthbGxlciB0eXBpY2FsbHkgdGFyZ2V0cyBhcmNoaXRlY3R1cmVzIGxpa2UgeDg2XzY0LCBBUk02NCwgYW5kIFJJU0MtViwgaXQgZG9lcyBoYXZlIG02OGsgc3VwcG9ydC4gSXQgbWlnaHQgbm90IGJlICphY3RpdmVseSogZnV6emVkIGluIGV2ZXJ5IGluc3RhbmNlLCBidXQgaWYgaXQmIzM5O3MgcmVhY2hhYmxlIGluIFFFTVUsIHdlIGNhbiBhYnNvbHV0ZWx5IGFzc3VtZSBpdCBjYW4gYmUgdGFyZ2V0ZWQgYnkgc3l6a2FsbGVyLgoKSXMgdGhlIGRyaXZlciBpdHNlbGYgcmVhY2hhYmxlPyBJdCBhcHBlYXJzIHRvIGJlIGEgcGxhdGZvcm0gZHJpdmVyIGZvciAmIzM0O3N3aW0uJiMzNDsgTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBieSBjaGVja2luZyBgc3dpbV9wcm9iZWAuIFllcCwgaXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgJiMzNDtzd2ltLCYjMzQ7IGFuZCBpdCYjMzk7cyBpbml0aWFsaXplZCBkdXJpbmcgYG1hY19wbGF0Zm9ybV9pbml0YCBpbiBgYXJjaC9tNjhrL21hYy9jb25maWcuY2AuIFRoaXMgbWVhbnMgaXQgKndpbGwqIGJlIHByb2JlZCBhdCBib290IGlmIHRoZSBoYXJkd2FyZSBpcyBwcmVzZW50LiBUaGUgZHJpdmVyIGlzIGV4cG9zaW5nIGEgYmxvY2sgZGV2aWNlLCBhbmQgdGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgd2Ugd2FudC4gVGhlIGJsb2NrIGRldmljZSBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIGJ5IGBzd2ltX21xX29wc2AsIHdoaWNoIGludGVybmFsbHkgdXNlcyBgc3dpbV9xdWV1ZV9ycWAuIFRoZXJlIGFyZSBhbHNvIGlvY3RscywgaGFuZGxlZCBieSBgZmxvcHB5X2lvY3RsYC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4gVGhpcyBsaXN0IGlzIGEgZ29sZG1pbmU6IGBzd2ltX2Zsb3BweV9pbml0YCwgYHN3aW1fcHJvYmVgLCBgc3dpbV9hZGRfZmxvcHB5YCwgYGZsb3BweV9pb2N0bGAsIGBmbG9wcHlfcmVsZWFzZWAsIGBmbG9wcHlfb3BlbmAsIGBzZXR1cF9tZWRpdW1gLCBgZ2V0X2Zsb3BweV9nZW9tZXRyeWAsIGBzd2ltX3F1ZXVlX3JxYCwgYGZsb3BweV9yZWFkX3NlY3RvcnNgLCBgc3dpbV9yZWFkX3NlY3Rvcl9yYW5nZWAsIGBmbG9wcHlfZWplY3RgLCBgc3dpbV90cmFja2AsIGBzd2ltX3NlZWtgLCBgc3dpbV90cmFjazAwYCwgYHN3aW1fc3RlcGAsIGBzd2ltX2hlYWRgLCBgc3dpbV9lamVjdGAsIGBzd2ltX21vdG9yYCwgYHN3aW1fZHJpdmVgLCBgc3dpbV9yZWFkYml0YCwgYHN3aW1fYWN0aW9uYCwgYHN3aW1fc2VsZWN0YCwgYGdldF9zd2ltX21vZGVgLCBgc2V0X3N3aW1fbW9kZWAsIGFuZCBldmVuIGBzd2ltX3JlYWRfc2VjdG9yX2hlYWRlcmAgYW5kIGBzd2ltX3JlYWRfc2VjdG9yX2RhdGFgIChpbiBhc3NlbWJseSkuCgpTbywgaXMgdGhpcyBkcml2ZXIgd29ydGggZnV6emluZz8gQWJzb2x1dGVseSEgSXQmIzM5O3MgYSBmbG9wcHkgZHJpdmVyIGZvciBtNjhrIE1hY3MuIEl0JiMzOTtzIGZ1bmN0aW9uYWwgY29yZSBsb2dpYy4gR2l2ZW4gUUVNVSYjMzk7cyBgcTgwMGAgbWFjaGluZSwgd2hpY2ggaGFzIGEgU1dJTSBmbG9wcHkgY29udHJvbGxlciwgd2UgY2FuIHRhcmdldCBpdC4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlICpGb2N1c1N5bWJvbHMqLiBXZSBuZWVkIHRvIHBpbnBvaW50IHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgY3JpdGljYWwgZW50cnkgcG9pbnRzLiBUaGVzZSBhcmU6IGBmbG9wcHlfaW9jdGxgLCBgZmxvcHB5X29wZW5gLCBgZmxvcHB5X3JlbGVhc2VgLCBgc3dpbV9xdWV1ZV9ycWAsIGBmbG9wcHlfcmVhZF9zZWN0b3JzYCwgYHN3aW1fcmVhZF9zZWN0b3JfcmFuZ2VgLCBgZmxvcHB5X2VqZWN0YCwgYHN3aW1fYWRkX2Zsb3BweWAsIGBzd2ltX2Zsb3BweV9pbml0YCwgYW5kIGBzd2ltX3Byb2JlYC4KCmBzd2ltX3F1ZXVlX3JxYCBpcyBjcnVjaWFsOyBpdCYjMzk7cyB0aGUgYmxvY2sgZGV2aWNlIHF1ZXVlIHJlcXVlc3QgZnVuY3Rpb24uIGBmbG9wcHlfaW9jdGxgIGhhbmRsZXMgaW9jdGxzLiBgZmxvcHB5X29wZW5gIGFuZCBgZmxvcHB5X3JlbGVhc2VgIGFyZSB0aGUgb3Blbi9yZWxlYXNlIGhhbmRsZXJzLiAgYHN3aW1fcHJvYmVgIGlzIHRoZSBwcm9iZSBmdW5jdGlvbi4KCldlIGFsc28gaGF2ZSBhIGxvdCBvZiBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgd29ydGgga25vd2luZyBhYm91dDogYGZsb3BweV9pb2N0bGAsIGBzd2ltX3F1ZXVlX3JxYCwgYGZsb3BweV9yZWFkX3NlY3RvcnNgLCBgc3dpbV9yZWFkX3NlY3Rvcl9yYW5nZWAsIGBmbG9wcHlfZWplY3RgLCBgc3dpbV90cmFja2AsIGBzd2ltX3NlZWtgLCBgc3dpbV90cmFjazAwYCwgYHN3aW1fc3RlcGAsIGBzd2ltX21vdG9yYCwgYHN3aW1fZHJpdmVgLCBgc3dpbV9hY3Rpb25gLCBgc3dpbV9zZWxlY3RgLCBgc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXJgLCBhbmQgYHN3aW1fcmVhZF9zZWN0b3JfZGF0YWAuCgpIb3dldmVyLCBgc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXJgIGFuZCBgc3dpbV9yZWFkX3NlY3Rvcl9kYXRhYCBhcmUgaW4gYXNzZW1ibHksIHNvIHRoZXkgbWlnaHQgbm90IGJlIGluc3RydW1lbnRlZCBieSBLQVNBTi9LQ09WLCB3aGljaCBpcyBjcnVjaWFsIGZvciBmdXp6aW5nLiBMZXQmIzM5O3MgZm9jdXMgb24gdGhlIEMgZnVuY3Rpb25zLgoKU28sIGxldCYjMzk7cyByZWZpbmUgdGhpcyB0byBtYWtlIGl0IGEgYml0IG1vcmUgZm9jdXNlZDogYGZsb3BweV9pb2N0bGAsIGBzd2ltX3F1ZXVlX3JxYCwgYGZsb3BweV9yZWFkX3NlY3RvcnNgLCBgc3dpbV9yZWFkX3NlY3Rvcl9yYW5nZWAsIGBmbG9wcHlfZWplY3RgLCBgc3dpbV90cmFja2AsIGBzd2ltX3NlZWtgLCBgc3dpbV90cmFjazAwYCwgYHN3aW1fc3RlcGAsIGBzd2ltX21vdG9yYCwgYHN3aW1fZHJpdmVgLCBgc3dpbV9hY3Rpb25gLCBgc3dpbQoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1NXSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzd2ltX3F1ZXVlX3JxJiMzNDssCiAgICAmIzM0O2Zsb3BweV9yZWFkX3NlY3RvcnMmIzM0OywKICAgICYjMzQ7c3dpbV9yZWFkX3NlY3Rvcl9yYW5nZSYjMzQ7LAogICAgJiMzNDtmbG9wcHlfaW9jdGwmIzM0OywKICAgICYjMzQ7ZmxvcHB5X29wZW4mIzM0OywKICAgICYjMzQ7ZmxvcHB5X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7c3dpbV9wcm9iZSYjMzQ7LAogICAgJiMzNDtzd2ltX2Zsb3BweV9pbml0JiMzNDssCiAgICAmIzM0O3N3aW1fYWRkX2Zsb3BweSYjMzQ7LAogICAgJiMzNDtzZXR1cF9tZWRpdW0mIzM0OywKICAgICYjMzQ7ZmxvcHB5X2VqZWN0JiMzNDssCiAgICAmIzM0O3N3aW1fdHJhY2smIzM0OywKICAgICYjMzQ7c3dpbV9zZWVrJiMzNDssCiAgICAmIzM0O3N3aW1fdHJhY2swMCYjMzQ7LAogICAgJiMzNDtzd2ltX3N0ZXAmIzM0OywKICAgICYjMzQ7c3dpbV9tb3RvciYjMzQ7LAogICAgJiMzNDtzd2ltX2RyaXZlJiMzNDssCiAgICAmIzM0O3N3aW1fYWN0aW9uJiMzNDssCiAgICAmIzM0O3N3aW1fc2VsZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgU1dJTSBmbG9wcHkgY29udHJvbGxlciBkcml2ZXIgZm9yIG02OGsgTWFjaW50b3NoIHN5c3RlbXMsIGluY2x1ZGluZyBjaGFuZ2VzIHRvIGRldmljZSByZWdpc3RyYXRpb24sIGluaXRpYWxpemF0aW9uLCByZWFkaW5nIHNlY3RvcnMsIGFuZCBoYW5kbGluZyBoYXJkd2FyZSBzdGF0ZS4gVGhlIGRyaXZlciBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSAodXNpbmcgdGhlIGBxODAwYCBtYWNoaW5lKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIGJsb2NrIGRldmljZSBvcGVyYXRpb25zLCBpb2N0bHMsIGFuZCBoYXJkd2FyZSBpbnRlcmFjdGlvbiBmdW5jdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfU1dJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3aW1fcXVldWVfcnEmIzM0OywKICAgICYjMzQ7ZmxvcHB5X3JlYWRfc2VjdG9ycyYjMzQ7LAogICAgJiMzNDtzd2ltX3JlYWRfc2VjdG9yX3JhbmdlJiMzNDssCiAgICAmIzM0O2Zsb3BweV9pb2N0bCYjMzQ7LAogICAgJiMzNDtmbG9wcHlfb3BlbiYjMzQ7LAogICAgJiMzNDtmbG9wcHlfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtzd2ltX3Byb2JlJiMzNDssCiAgICAmIzM0O3N3aW1fZmxvcHB5X2luaXQmIzM0OywKICAgICYjMzQ7c3dpbV9hZGRfZmxvcHB5JiMzNDssCiAgICAmIzM0O3NldHVwX21lZGl1bSYjMzQ7LAogICAgJiMzNDtmbG9wcHlfZWplY3QmIzM0OywKICAgICYjMzQ7c3dpbV90cmFjayYjMzQ7LAogICAgJiMzNDtzd2ltX3NlZWsmIzM0OywKICAgICYjMzQ7c3dpbV90cmFjazAwJiMzNDssCiAgICAmIzM0O3N3aW1fc3RlcCYjMzQ7LAogICAgJiMzNDtzd2ltX21vdG9yJiMzNDssCiAgICAmIzM0O3N3aW1fZHJpdmUmIzM0OywKICAgICYjMzQ7c3dpbV9hY3Rpb24mIzM0OywKICAgICYjMzQ7c3dpbV9zZWxlY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBTV0lNIGZsb3BweSBjb250cm9sbGVyIGRyaXZlciBmb3IgbTY4ayBNYWNpbnRvc2ggc3lzdGVtcywgaW5jbHVkaW5nIGNoYW5nZXMgdG8gZGV2aWNlIHJlZ2lzdHJhdGlvbiwgaW5pdGlhbGl6YXRpb24sIHJlYWRpbmcgc2VjdG9ycywgYW5kIGhhbmRsaW5nIGhhcmR3YXJlIHN0YXRlLiBUaGUgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VICh1c2luZyB0aGUgYHE4MDBgIG1hY2hpbmUpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgYmxvY2sgZGV2aWNlIG9wZXJhdGlvbnMsIGlvY3RscywgYW5kIGhhcmR3YXJlIGludGVyYWN0aW9uIGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE1OjI2OjU1LjM0MTI5ODk0NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDY0NDc5NDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfU1dJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN3aW1fcXVldWVfcnFcIixcbiAgICBcImZsb3BweV9yZWFkX3NlY3RvcnNcIixcbiAgICBcInN3aW1fcmVhZF9zZWN0b3JfcmFuZ2VcIixcbiAgICBcImZsb3BweV9pb2N0bFwiLFxuICAgIFwiZmxvcHB5X29wZW5cIixcbiAgICBcImZsb3BweV9yZWxlYXNlXCIsXG4gICAgXCJzd2ltX3Byb2JlXCIsXG4gICAgXCJzd2ltX2Zsb3BweV9pbml0XCIsXG4gICAgXCJzd2ltX2FkZF9mbG9wcHlcIixcbiAgICBcInNldHVwX21lZGl1bVwiLFxuICAgIFwiZmxvcHB5X2VqZWN0XCIsXG4gICAgXCJzd2ltX3RyYWNrXCIsXG4gICAgXCJzd2ltX3NlZWtcIixcbiAgICBcInN3aW1fdHJhY2swMFwiLFxuICAgIFwic3dpbV9zdGVwXCIsXG4gICAgXCJzd2ltX21vdG9yXCIsXG4gICAgXCJzd2ltX2RyaXZlXCIsXG4gICAgXCJzd2ltX2FjdGlvblwiLFxuICAgIFwic3dpbV9zZWxlY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFNXSU0gZmxvcHB5IGNvbnRyb2xsZXIgZHJpdmVyIGZvciBtNjhrIE1hY2ludG9zaCBzeXN0ZW1zLCBpbmNsdWRpbmcgY2hhbmdlcyB0byBkZXZpY2UgcmVnaXN0cmF0aW9uLCBpbml0aWFsaXphdGlvbiwgcmVhZGluZyBzZWN0b3JzLCBhbmQgaGFuZGxpbmcgaGFyZHdhcmUgc3RhdGUuIFRoZSBkcml2ZXIgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgKHVzaW5nIHRoZSBgcTgwMGAgbWFjaGluZSkuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBibG9jayBkZXZpY2Ugb3BlcmF0aW9ucywgaW9jdGxzLCBhbmQgaGFyZHdhcmUgaW50ZXJhY3Rpb24gZnVuY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNToyNjo1NS4zNDEzMDYxNzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyOTkwMjA1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM2Y2U0Yzg3ZmJhMDkwNGJlNzkwY2JjYjBkMTJmZWNhMzVjZjUyODhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMTYgMTU6MjY6NTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9jb25maWcuYyBiL2FyY2gvbTY4ay9tYWMvY29uZmlnLmNcXG5pbmRleCBjMDAzM2Y4ODVlZDRmMC4uZGJhM2RlMjFjM2M0MDUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9tNjhrL21hYy9jb25maWcuY1xcbisrKyBiL2FyY2gvbTY4ay9tYWMvY29uZmlnLmNcXG5AQCAtOTg0LDggKzk4NCwzNyBAQCBzdGF0aWMgaW50IF9faW5pdCBtYWNfcGxhdGZvcm1faW5pdCh2b2lkKVxcbiBcXHRcXHRcXHQuc3RhcnQgPSBzd2ltX2Jhc2UsXFxuIFxcdFxcdFxcdC5lbmQgICA9IHN3aW1fYmFzZSArIDB4MUZGRixcXG4gXFx0XFx0fTtcXG4rXFx0XFx0dW5zaWduZWQgaW50IGRhdGEgPSAwO1xcbitcXG4rXFx0XFx0LyogTW9kZWxzIGluIHRoaXMgbGlzdCBhcmUgc3VwcG9zZWQgdG8gcnVuIEZDTEsgYXQgMzIgTUh6ICovXFxuK1xcdFxcdHN3aXRjaCAobWFjaW50b3NoX2NvbmZpZy1cXHUwMDNlaWRlbnQpIHtcXG4rXFx0XFx0Y2FzZSBNQUNfTU9ERUxfQ0NMOlxcbitcXHRcXHRjYXNlIE1BQ19NT0RFTF9DQ0xJSTpcXG4rXFx0XFx0Y2FzZSBNQUNfTU9ERUxfTENJSUk6XFxuK1xcdFxcdGNhc2UgTUFDX01PREVMX1E2MDU6XFxuK1xcdFxcdGNhc2UgTUFDX01PREVMX1E2MDVfQUNDOlxcbitcXHRcXHRjYXNlIE1BQ19NT0RFTF9RNjEwOlxcbitcXHRcXHRjYXNlIE1BQ19NT0RFTF9RNjMwOlxcbitcXHRcXHRjYXNlIE1BQ19NT0RFTF9RNjUwOlxcbitcXHRcXHRjYXNlIE1BQ19NT0RFTF9RODAwOlxcbitcXHRcXHRjYXNlIE1BQ19NT0RFTF9QNDYwOlxcbitcXHRcXHRjYXNlIE1BQ19NT0RFTF9QNDc1OlxcbitcXHRcXHRjYXNlIE1BQ19NT0RFTF9QNDc1RjpcXG4rXFx0XFx0Y2FzZSBNQUNfTU9ERUxfUDUyMDpcXG4rXFx0XFx0Y2FzZSBNQUNfTU9ERUxfUDU1MDpcXG4rXFx0XFx0Y2FzZSBNQUNfTU9ERUxfUDU3NTpcXG4rXFx0XFx0Y2FzZSBNQUNfTU9ERUxfUDU4ODpcXG4rXFx0XFx0Y2FzZSBNQUNfTU9ERUxfVFY6XFxuK1xcdFxcdGNhc2UgTUFDX01PREVMX0M2MTA6XFxuK1xcdFxcdGNhc2UgTUFDX01PREVMX0M2NTA6XFxuK1xcdFxcdGNhc2UgTUFDX01PREVMX1BCMTkwOlxcbitcXHRcXHRjYXNlIE1BQ19NT0RFTF9QQjUyMDpcXG4rXFx0XFx0XFx0ZGF0YSA9IDE7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuIFxcbi1cXHRcXHRwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKFxcXCJzd2ltXFxcIiwgLTEsIFxcdTAwMjZzd2ltX3JzcmMsIDEpO1xcbitcXHRcXHRwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEoTlVMTCwgXFxcInN3aW1cXFwiLCAtMSwgXFx1MDAyNnN3aW1fcnNyYywgMSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2ZGF0YSwgc2l6ZW9mKGRhdGEpKTtcXG4gXFx0fVxcbiBcXG4gXFx0LypcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zd2ltLmMgYi9kcml2ZXJzL2Jsb2NrL3N3aW0uY1xcbmluZGV4IDBjY2MxMmE3MjM4OGQ1Li40NjBmNzRjMTljZmRjMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3N3aW0uY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svc3dpbS5jXFxuQEAgLTIsMTIgKzIsMjAgQEBcXG4gLypcXG4gICogRHJpdmVyIGZvciBTV0lNIChTYW5kZXIgV296IEludGVncmF0ZWQgTWFjaGluZSkgZmxvcHB5IGNvbnRyb2xsZXJcXG4gICpcXG4tICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDggTGF1cmVudCBWaXZpZXIgXFx1MDAzY0xhdXJlbnRAbHZpdmllci5pbmZvXFx1MDAzZVxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggTGF1cmVudCBWaXZpZXIgXFx1MDAzY0xhdXJlbnRAbHZpdmllci5pbmZvXFx1MDAzZVxcbiAgKlxcbiAgKiBiYXNlZCBvbiBBbGFzdGFpciBCcmlkZ2V3YXRlciBTV0lNIGFuYWx5c2lzLCAyMDAxXFxuICAqIGJhc2VkIG9uIFNXSU0zIGRyaXZlciAoYykgUGF1bCBNYWNrZXJyYXMsIDE5OTZcXG4gICogYmFzZWQgb24gbmV0QlNEIElXTSBkcml2ZXIgKGMpIDE5OTcsIDE5OTggSGF1a2UgRmF0aC5cXG4gICpcXG4rICogU2VlIGFsc286XFxuKyAqIEluc2lkZSBNYWNpbnRvc2gsIHZvbC4gSUlJLCBjaC4gMlxcbisgKiBodHRwczovL2FyY2hpdmUub3JnL2RldGFpbHMvU1dJTURlc2lnbkRvY3NcXG4rICogTkVDIHVQRDcyMDcwIEZEQyBkYXRhc2hlZXRcXG4rICogbWtMaW51eCBzb3VyY2UgZmlsZSBzd2ltaWlpY29tbW9uaGFsLmNcXG4rICogaHR0cDovL3d3dy5tYWMubGludXgtbTY4ay5vcmcvZGV2ZWwvaXdtLnBocC5odG1sXFxuKyAqIE1BTUUgc291cmNlIGZpbGUgc29ueWRyaXYuY3BwXFxuKyAqXFxuICAqIDIwMDQtMDgtMjEgKGx2KSAtIEluaXRpYWwgaW1wbGVtZW50YXRpb25cXG4gICogMjAwOC0xMC0zMCAobHYpIC0gUG9ydCB0byAyLjZcXG4gICovXFxuQEAgLTE5LDYgKzI3LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21ham9yLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaGRyZWcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvcG9sbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuQEAgLTYwLDcgKzY5LDcgQEAgc3RydWN0IHN3aW0ge1xcbiBcXHRSRUcocmVhZF9oYW5kc2hha2UpXFxuIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7XFxuIFxcbi0jZGVmaW5lIHN3aW1fd3JpdGUoYmFzZSwgcmVnLCB2KSBcXHRvdXRfOChcXHUwMDI2KGJhc2UpLVxcdTAwM2V3cml0ZV8jI3JlZywgKHYpKVxcbisjZGVmaW5lIHN3aW1fd3JpdGUoYmFzZSwgcmVnLCB2KVxcdG91dF84KFxcdTAwMjYoYmFzZSktXFx1MDAzZXdyaXRlXyMjcmVnLCAodikpXFxuICNkZWZpbmUgc3dpbV9yZWFkKGJhc2UsIHJlZylcXHRcXHRpbl84KFxcdTAwMjYoYmFzZSktXFx1MDAzZXJlYWRfIyNyZWcpXFxuIFxcbiAvKiBJV00gcmVnaXN0ZXJzICovXFxuQEAgLTg0LDYyICs5Myw1MyBAQCBzdHJ1Y3QgaXdtIHtcXG4gXFx0UkVHKHE3SClcXG4gfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTtcXG4gXFxuLSNkZWZpbmUgaXdtX3dyaXRlKGJhc2UsIHJlZywgdikgXFx0b3V0XzgoXFx1MDAyNihiYXNlKS1cXHUwMDNlcmVnLCAodikpXFxuKyNkZWZpbmUgaXdtX3dyaXRlKGJhc2UsIHJlZywgdilcXHRcXHRvdXRfOChcXHUwMDI2KGJhc2UpLVxcdTAwM2VyZWcsICh2KSlcXG4gI2RlZmluZSBpd21fcmVhZChiYXNlLCByZWcpXFx0XFx0aW5fOChcXHUwMDI2KGJhc2UpLVxcdTAwM2VyZWcpXFxuIFxcbiAvKiBiaXRzIGluIHBoYXNlIHJlZ2lzdGVyICovXFxuIFxcbi0jZGVmaW5lIFNFRUtfUE9TSVRJVkVcXHQweDA3MFxcbi0jZGVmaW5lIFNFRUtfTkVHQVRJVkVcXHQweDA3NFxcbi0jZGVmaW5lIFNURVBcXHRcXHQweDA3MVxcbi0jZGVmaW5lIE1PVE9SX09OXFx0MHgwNzJcXG4tI2RlZmluZSBNT1RPUl9PRkZcXHQweDA3Nlxcbi0jZGVmaW5lIElOREVYXFx0XFx0MHgwNzNcXG4tI2RlZmluZSBFSkVDVFxcdFxcdDB4MDc3XFxuLSNkZWZpbmUgU0VUTUZNXFx0XFx0MHgxNzFcXG4tI2RlZmluZSBTRVRHQ1JcXHRcXHQweDE3NVxcbisjZGVmaW5lIFNFRUtfUE9TSVRJVkVcXHQweDBGMFxcbisjZGVmaW5lIFNFRUtfTkVHQVRJVkVcXHQweDBGNFxcbisjZGVmaW5lIFNURVBcXHRcXHQweDBGMVxcbisjZGVmaW5lIE1PVE9SX09OXFx0MHgwRjJcXG4rI2RlZmluZSBNT1RPUl9PRkZcXHQweDBGNlxcbisjZGVmaW5lIElOREVYXFx0XFx0MHgwRjNcXG4rI2RlZmluZSBFSkVDVFxcdFxcdDB4MEY3XFxuKyNkZWZpbmUgU0VUTUZNXFx0XFx0MHgxRjFcXG4rI2RlZmluZSBTRVRHQ1JcXHRcXHQweDFGNVxcbiBcXG4tI2RlZmluZSBSRUxBWFxcdFxcdDB4MDMzXFxuLSNkZWZpbmUgTFNUUkJcXHRcXHQweDAwOFxcbisjZGVmaW5lIFJFTEFYXFx0XFx0MHgwRjNcXG4rI2RlZmluZSBMU1RSQlxcdFxcdDB4MEY4XFxuIFxcbi0jZGVmaW5lIENBX01BU0tcXHRcXHQweDA3N1xcbisjZGVmaW5lIENBX01BU0tcXHRcXHQweDBGN1xcbisjZGVmaW5lIFNFTF9NQVNLXFx0MHgxMDBcXG4gXFxuIC8qIFNlbGVjdCB2YWx1ZXMgZm9yIHN3aW1fc2VsZWN0IGFuZCBzd2ltX3JlYWRiaXQgKi9cXG4gXFxuLSNkZWZpbmUgUkVBRF9EQVRBXzBcXHQweDA3NFxcbi0jZGVmaW5lIE9ORU1FR19EUklWRVxcdDB4MDc1XFxuLSNkZWZpbmUgU0lOR0xFX1NJREVEXFx0MHgwNzZcXG4tI2RlZmluZSBEUklWRV9QUkVTRU5UXFx0MHgwNzdcXG4tI2RlZmluZSBESVNLX0lOXFx0XFx0MHgxNzBcXG4tI2RlZmluZSBXUklURV9QUk9UXFx0MHgxNzFcXG4tI2RlZmluZSBUUkFDS19aRVJPXFx0MHgxNzJcXG4tI2RlZmluZSBUQUNIT1xcdFxcdDB4MTczXFxuLSNkZWZpbmUgUkVBRF9EQVRBXzFcXHQweDE3NFxcbi0jZGVmaW5lIEdDUl9NT0RFXFx0MHgxNzVcXG4tI2RlZmluZSBTRUVLX0NPTVBMRVRFXFx0MHgxNzZcXG4tI2RlZmluZSBUV09NRUdfTUVESUFcXHQweDE3N1xcbisjZGVmaW5lIFNURVBQSU5HXFx0MHgwRjFcXG4rI2RlZmluZSBSRUFEX0RBVEFfMFxcdDB4MEY0XFxuKyNkZWZpbmUgT05FTUVHX0RSSVZFXFx0MHgwRjVcXG4rI2RlZmluZSBTSU5HTEVfU0lERURcXHQweDBGNlxcbisjZGVmaW5lIERSSVZFX1BSRVNFTlRcXHQweDBGN1xcbisjZGVmaW5lIERJU0tfSU5cXHRcXHQweDFGMFxcbisjZGVmaW5lIFdSSVRFX1BST1RcXHQweDFGMVxcbisjZGVmaW5lIFRSQUNLX1pFUk9cXHQweDFGMlxcbisjZGVmaW5lIFRBQ0hPXFx0XFx0MHgxRjNcXG4rI2RlZmluZSBSRUFEX0RBVEFfMVxcdDB4MUY0XFxuKyNkZWZpbmUgR0NSX01PREVcXHQweDFGNVxcbisjZGVmaW5lIFJFQURZXFx0XFx0MHgxRjZcXG4rI2RlZmluZSBUV09NRUdfTUVESUFcXHQweDFGN1xcbiBcXG4gLyogQml0cyBpbiBoYW5kc2hha2UgcmVnaXN0ZXIgKi9cXG4gXFxuLSNkZWZpbmUgTUFSS19CWVRFXFx0MHgwMVxcbi0jZGVmaW5lIENSQ19aRVJPXFx0MHgwMlxcbi0jZGVmaW5lIFJEREFUQVxcdFxcdDB4MDRcXG4gI2RlZmluZSBTRU5TRVxcdFxcdDB4MDhcXG4tI2RlZmluZSBNT1RFTlxcdFxcdDB4MTBcXG4tI2RlZmluZSBFUlJPUlxcdFxcdDB4MjBcXG4gI2RlZmluZSBEQVQyQllURVxcdDB4NDBcXG4gI2RlZmluZSBEQVQxQllURVxcdDB4ODBcXG4gXFxuIC8qIGJpdHMgaW4gc2V0dXAgcmVnaXN0ZXIgKi9cXG4gXFxuLSNkZWZpbmUgU19JTlZfV0RBVEFcXHQweDAxXFxuLSNkZWZpbmUgU18zXzVfU0VMRUNUXFx0MHgwMlxcbi0jZGVmaW5lIFNfR0NSXFx0XFx0MHgwNFxcbiAjZGVmaW5lIFNfRkNMS19ESVYyXFx0MHgwOFxcbi0jZGVmaW5lIFNfRVJST1JfQ09SUlxcdDB4MTBcXG4gI2RlZmluZSBTX0lCTV9EUklWRVxcdDB4MjBcXG4tI2RlZmluZSBTX0dDUl9XUklURVxcdDB4NDBcXG4tI2RlZmluZSBTX1RJTUVPVVRcXHQweDgwXFxuIFxcbiAvKiBiaXRzIGluIG1vZGUgcmVnaXN0ZXIgKi9cXG4gXFxuQEAgLTE0OCwxNCArMTQ4LDEzIEBAIHN0cnVjdCBpd20ge1xcbiAjZGVmaW5lIEVOQkwyXFx0XFx0MHgwNFxcbiAjZGVmaW5lIEFDVElPTlxcdFxcdDB4MDhcXG4gI2RlZmluZSBXUklURV9NT0RFXFx0MHgxMFxcbi0jZGVmaW5lIEhFRFNFTFxcdFxcdDB4MjBcXG4rI2RlZmluZSBJU01fU0VMRUNUXFx0MHg0MFxcbiAjZGVmaW5lIE1PVE9OXFx0XFx0MHg4MFxcbiBcXG4tLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cXG4tXFxuIGVudW0gZHJpdmVfbG9jYXRpb24ge1xcbi1cXHRJTlRFUk5BTF9EUklWRSA9IDB4MDIsXFxuLVxcdEVYVEVSTkFMX0RSSVZFID0gMHgwNCxcXG4rXFx0Tk9fRFJJVkUgPSAwLFxcbitcXHRJTlRFUk5BTF9EUklWRSA9IEJJVCgxKSxcXG4rXFx0RVhURVJOQUxfRFJJVkUgPSBCSVQoMiksXFxuIH07XFxuIFxcbiBlbnVtIG1lZGlhX3R5cGUge1xcbkBAIC0xNjgsMjMgKzE2NywyMyBAQCBzdHJ1Y3QgZmxvcHB5X3N0YXRlIHtcXG4gXFx0LyogcGh5c2ljYWwgcHJvcGVydGllcyAqL1xcbiBcXG4gXFx0ZW51bSBkcml2ZV9sb2NhdGlvbiBsb2NhdGlvbjtcXHQvKiBpbnRlcm5hbCBvciBleHRlcm5hbCBkcml2ZSAqL1xcbi1cXHRpbnRcXHRcXHQgaGVhZF9udW1iZXI7XFx0Lyogc2luZ2xlLSBvciBkb3VibGUtc2lkZWQgZHJpdmUgKi9cXG4rXFx0aW50IGhlYWRfbnVtYmVyO1xcdFxcdC8qIHNpbmdsZS0gb3IgZG91YmxlLXNpZGVkIGRyaXZlICovXFxuIFxcbiBcXHQvKiBtZWRpYSAqL1xcbiBcXG4tXFx0aW50XFx0XFx0IGRpc2tfaW47XFxuLVxcdGludFxcdFxcdCBlamVjdGVkO1xcbi1cXHRlbnVtIG1lZGlhX3R5cGVcXHQgdHlwZTtcXG4tXFx0aW50XFx0XFx0IHdyaXRlX3Byb3RlY3RlZDtcXG4rXFx0aW50IGRpc2tfaW47XFxuK1xcdGludCBlamVjdGVkO1xcbitcXHRlbnVtIG1lZGlhX3R5cGUgdHlwZTtcXG4rXFx0aW50IHdyaXRlX3Byb3RlY3RlZDtcXG4gXFxuLVxcdGludFxcdFxcdCB0b3RhbF9zZWNzO1xcbi1cXHRpbnRcXHRcXHQgc2VjcGVyY3lsO1xcbi1cXHRpbnRcXHRcXHQgc2VjcGVydHJhY2s7XFxuK1xcdHVuc2lnbmVkIGludCB0b3RhbF9zZWNzO1xcbitcXHR1bnNpZ25lZCBpbnQgc2VjcGVyY3lsO1xcbitcXHR1bnNpZ25lZCBpbnQgc2VjcGVydHJhY2s7XFxuIFxcbiBcXHQvKiBpbi11c2UgaW5mb3JtYXRpb24gKi9cXG4gXFxuLVxcdGludFxcdFxcdHRyYWNrO1xcbi1cXHRpbnRcXHRcXHRyZWZfY291bnQ7XFxuK1xcdGludCB0cmFjaztcXG4rXFx0aW50IHJlZl9jb3VudDtcXG4gXFx0Ym9vbCByZWdpc3RlcmVkO1xcbiBcXG4gXFx0c3RydWN0IGdlbmRpc2sgKmRpc2s7XFxuQEAgLTIwOSw3ICsyMDgsNiBAQCBlbnVtIGhlYWQge1xcbiBcXG4gc3RydWN0IHN3aW1fcHJpdiB7XFxuIFxcdHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2U7XFxuLVxcdHNwaW5sb2NrX3QgbG9jaztcXG4gXFx0aW50IGZsb3BweV9jb3VudDtcXG4gXFx0c3RydWN0IGZsb3BweV9zdGF0ZSB1bml0W0ZEX01BWF9VTklUXTtcXG4gfTtcXG5AQCAtMjIwLDIwICsyMTgsMjQgQEAgZXh0ZXJuIGludCBzd2ltX3JlYWRfc2VjdG9yX2RhdGEoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSxcXG4gXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGNoYXIgKmRhdGEpO1xcbiBcXG4gc3RhdGljIERFRklORV9NVVRFWChzd2ltX211dGV4KTtcXG4tc3RhdGljIGlubGluZSB2b2lkIHNldF9zd2ltX21vZGUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IGVuYWJsZSlcXG4rXFxuK3N0YXRpYyB2b2lkIHNldF9zd2ltX21vZGUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IGVuYWJsZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgaXdtIF9faW9tZW0gKml3bV9iYXNlO1xcbitcXHRzdHJ1Y3QgaXdtIF9faW9tZW0gKml3bV9iYXNlID0gKHN0cnVjdCBpd20gX19pb21lbSAqKWJhc2U7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbiBcXHRpZiAoIWVuYWJsZSkge1xcbi1cXHRcXHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCAweGY4KTtcXG4rXFx0XFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgQUNUSU9OKTtcXG4rXFx0XFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgRU5CTDEgfCBFTkJMMiB8IE1PVE9OKTtcXG4rXFx0XFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgSVNNX1NFTEVDVCk7XFxuK1xcdFxcdGl3bV9yZWFkKGl3bV9iYXNlLCBxN0wpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdGl3bV9iYXNlID0gKHN0cnVjdCBpd20gX19pb21lbSAqKWJhc2U7XFxuIFxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4gXFxuIFxcdGl3bV9yZWFkKGl3bV9iYXNlLCBxN0wpO1xcbitcXHRpd21fcmVhZChpd21fYmFzZSwgcTZMKTtcXG4gXFx0aXdtX3JlYWQoaXdtX2Jhc2UsIG10ck9mZik7XFxuIFxcdGl3bV9yZWFkKGl3bV9iYXNlLCBxNkgpO1xcbiBcXG5AQCAtMjQ1LDcgKzI0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc3dpbV9tb2RlKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBlbmFibGUpXFxuIFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgZ2V0X3N3aW1fbW9kZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKVxcbitzdGF0aWMgaW50IGdldF9zd2ltX21vZGUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG5AQCAtMjcxLDcgKzI3Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX3NlbGVjdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgc2VsKVxcbiB7XFxuIFxcdHN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIFJFTEFYKTtcXG4gXFxuLVxcdHZpYTFfc2V0X2hlYWQoc2VsIFxcdTAwMjYgMHgxMDApO1xcbitcXHR2aWExX3NldF9oZWFkKHNlbCBcXHUwMDI2IFNFTF9NQVNLKTtcXG4gXFxuIFxcdHN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIHNlbCBcXHUwMDI2IENBX01BU0spO1xcbiB9XFxuQEAgLTI4NCwxNSArMjg2LDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX2FjdGlvbihzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgYWN0aW9uKVxcbiBcXG4gXFx0c3dpbV9zZWxlY3QoYmFzZSwgYWN0aW9uKTtcXG4gXFx0dWRlbGF5KDEpO1xcbi1cXHRzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCAoTFNUUkJcXHUwMDNjXFx1MDAzYzQpIHwgTFNUUkIpO1xcbi1cXHR1ZGVsYXkoMSk7XFxuLVxcdHN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIChMU1RSQlxcdTAwM2NcXHUwMDNjNCkgfCAoKH5MU1RSQikgXFx1MDAyNiAweDBGKSk7XFxuK1xcdHN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIGFjdGlvbiB8IExTVFJCKTtcXG4rXFx0dWRlbGF5KDIpO1xcbitcXHRzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCBhY3Rpb24pO1xcbiBcXHR1ZGVsYXkoMSk7XFxuIFxcbiBcXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHN3aW1fcmVhZGJpdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgYml0KVxcbitzdGF0aWMgaW5saW5lIGJvb2wgc3dpbV9yZWFkYml0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBiaXQpXFxuIHtcXG4gXFx0aW50IHN0YXQ7XFxuIFxcbkBAIC0zMDUsMTI1ICszMDcsMTE5IEBAIHN0YXRpYyBpbmxpbmUgaW50IHN3aW1fcmVhZGJpdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgYml0KVxcbiBcXHRyZXR1cm4gKHN0YXQgXFx1MDAyNiBTRU5TRSkgPT0gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIHN3aW1fZHJpdmUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSxcXG4rI2RlZmluZSBzd2ltX3JlYWRiaXRfdGltZW91dChiYXNlLCBiaXQsIHZhbCwgdGltZW91dF91cykgXFxcXFxcbitcXHRwb2xsX3RpbWVvdXRfdXMoLCBzd2ltX3JlYWRiaXQoYmFzZSwgYml0KSA9PSB2YWwsIDEwMDAsIHRpbWVvdXRfdXMsIGZhbHNlKVxcbitcXG4rI2RlZmluZSBzd2ltX3JlYWRiaXRfdGltZW91dF9hdG9taWMoYmFzZSwgYml0LCB2YWwsIHRpbWVvdXRfdXMpIFxcXFxcXG4rXFx0cG9sbF90aW1lb3V0X3VzX2F0b21pYygsIHN3aW1fcmVhZGJpdChiYXNlLCBiaXQpID09IHZhbCwgMSwgdGltZW91dF91cywgZmFsc2UpXFxuK1xcbisjZGVmaW5lIHN3aW1fUkVBRFlfdGltZW91dChiYXNlKSBcXFxcXFxuKyh7IFxcXFxcXG4rXFx0aW50IHJldCA9IHN3aW1fcmVhZGJpdF90aW1lb3V0KGJhc2UsIFJFQURZLCB0cnVlLCAxMDAwICogMTAwMCk7IFxcXFxcXG4rXFx0aWYgKHJldCkgXFxcXFxcbitcXHRcXHRwcmludGsoS0VSTl9ERUJVRyBcXFwiJXM6IGRyaXZlIG5vdCByZWFkeVxcXFxuXFxcIiwgX19mdW5jX18pOyBcXFxcXFxuK1xcdHJldDsgXFxcXFxcbit9KVxcbitcXG4rc3RhdGljIHZvaWQgc3dpbV9kcml2ZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLFxcbiBcXHRcXHRcXHQgICAgICBlbnVtIGRyaXZlX2xvY2F0aW9uIGxvY2F0aW9uKVxcbiB7XFxuIFxcdGlmIChsb2NhdGlvbiA9PSBJTlRFUk5BTF9EUklWRSkge1xcbiBcXHRcXHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBFWFRFUk5BTF9EUklWRSk7IC8qIGNsZWFyIGRyaXZlIDEgYml0ICovXFxuIFxcdFxcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTEsIElOVEVSTkFMX0RSSVZFKTsgLyogc2V0IGRyaXZlIDAgYml0ICovXFxuK1xcdFxcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTEsIE1PVE9OKTtcXG4gXFx0fSBlbHNlIGlmIChsb2NhdGlvbiA9PSBFWFRFUk5BTF9EUklWRSkge1xcbiBcXHRcXHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBJTlRFUk5BTF9EUklWRSk7IC8qIGNsZWFyIGRyaXZlIDAgYml0ICovXFxuIFxcdFxcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTEsIEVYVEVSTkFMX0RSSVZFKTsgLyogc2V0IGRyaXZlIDEgYml0ICovXFxuK1xcdFxcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTEsIE1PVE9OKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgSU5URVJOQUxfRFJJVkUpO1xcbitcXHRcXHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBFWFRFUk5BTF9EUklWRSk7XFxuK1xcdFxcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIE1PVE9OKTtcXG4gXFx0fVxcbitcXHR1ZGVsYXkoMSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX21vdG9yKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsXFxuLVxcdFxcdFxcdCAgICAgIGVudW0gbW90b3JfYWN0aW9uIGFjdGlvbilcXG4rc3RhdGljIHZvaWQgc3dpbV9tb3RvcihzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLFxcbitcXHRcXHQgICAgICAgZW51bSBtb3Rvcl9hY3Rpb24gYWN0aW9uKVxcbiB7XFxuIFxcdGlmIChhY3Rpb24gPT0gT04pIHtcXG4tXFx0XFx0aW50IGk7XFxuLVxcbiBcXHRcXHRzd2ltX2FjdGlvbihiYXNlLCBNT1RPUl9PTik7XFxuLVxcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgMipIWjsgaSsrKSB7XFxuLVxcdFxcdFxcdHN3aW1fc2VsZWN0KGJhc2UsIFJFTEFYKTtcXG4tXFx0XFx0XFx0aWYgKHN3aW1fcmVhZGJpdChiYXNlLCBNT1RPUl9PTikpXFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xcbi1cXHRcXHRcXHRzY2hlZHVsZV90aW1lb3V0KDEpO1xcbi1cXHRcXHR9XFxuK1xcdFxcdHN3aW1fcmVhZGJpdF90aW1lb3V0KGJhc2UsIE1PVE9SX09OLCB0cnVlLCAyMDAwICogMTAwMCk7XFxuIFxcdH0gZWxzZSBpZiAoYWN0aW9uID09IE9GRikge1xcbiBcXHRcXHRzd2ltX2FjdGlvbihiYXNlLCBNT1RPUl9PRkYpO1xcbi1cXHRcXHRzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7XFxuK1xcdFxcdHN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIFJFTEFYKTtcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9lamVjdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKVxcbitzdGF0aWMgdm9pZCBzd2ltX2VqZWN0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpXFxuIHtcXG4tXFx0aW50IGk7XFxuLVxcbiBcXHRzd2ltX2FjdGlvbihiYXNlLCBFSkVDVCk7XFxuLVxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgMipIWjsgaSsrKSB7XFxuLVxcdFxcdHN3aW1fc2VsZWN0KGJhc2UsIFJFTEFYKTtcXG4tXFx0XFx0aWYgKCFzd2ltX3JlYWRiaXQoYmFzZSwgRElTS19JTikpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xcbi1cXHRcXHRzY2hlZHVsZV90aW1lb3V0KDEpO1xcbi1cXHR9XFxuLVxcdHN3aW1fc2VsZWN0KGJhc2UsIFJFTEFYKTtcXG4rXFx0c3dpbV9yZWFkYml0X3RpbWVvdXQoYmFzZSwgRElTS19JTiwgZmFsc2UsIDIwMDAgKiAxMDAwKTtcXG4rXFx0bXNsZWVwKDEpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9oZWFkKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGVudW0gaGVhZCBoZWFkKVxcbiB7XFxuLVxcdC8qIHdhaXQgZHJpdmUgaXMgcmVhZHkgKi9cXG4tXFxuIFxcdGlmIChoZWFkID09IFVQUEVSX0hFQUQpXFxuIFxcdFxcdHN3aW1fc2VsZWN0KGJhc2UsIFJFQURfREFUQV8xKTtcXG4gXFx0ZWxzZSBpZiAoaGVhZCA9PSBMT1dFUl9IRUFEKVxcbiBcXHRcXHRzd2ltX3NlbGVjdChiYXNlLCBSRUFEX0RBVEFfMCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHN3aW1fc3RlcChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKVxcbitzdGF0aWMgaW50IHN3aW1fc3RlcChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKVxcbiB7XFxuLVxcdGludCB3YWl0O1xcbi1cXG4gXFx0c3dpbV9hY3Rpb24oYmFzZSwgU1RFUCk7XFxuLVxcbi1cXHRmb3IgKHdhaXQgPSAwOyB3YWl0IFxcdTAwM2MgSFo7IHdhaXQrKykge1xcbi1cXG4tXFx0XFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcXG4tXFx0XFx0c2NoZWR1bGVfdGltZW91dCgxKTtcXG4tXFxuLVxcdFxcdHN3aW1fc2VsZWN0KGJhc2UsIFJFTEFYKTtcXG4tXFx0XFx0aWYgKCFzd2ltX3JlYWRiaXQoYmFzZSwgU1RFUCkpXFxuLVxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHR9XFxuLVxcdHJldHVybiAtMTtcXG4rXFx0dWRlbGF5KDE1MCk7XFxuK1xcdHJldHVybiBzd2ltX3JlYWRiaXRfdGltZW91dF9hdG9taWMoYmFzZSwgU1RFUFBJTkcsIGZhbHNlLCAyMCAqIDEwMDApO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBzd2ltX3RyYWNrMDAoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSlcXG4rc3RhdGljIGludCBzd2ltX3RyYWNrMDAoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSlcXG4ge1xcbiBcXHRpbnQgdHJ5O1xcbiBcXG4gXFx0c3dpbV9hY3Rpb24oYmFzZSwgU0VFS19ORUdBVElWRSk7XFxuIFxcbiBcXHRmb3IgKHRyeSA9IDA7IHRyeSBcXHUwMDNjIDEwMDsgdHJ5KyspIHtcXG4rXFx0XFx0bXNsZWVwKDMpO1xcbiBcXG4tXFx0XFx0c3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpO1xcbiBcXHRcXHRpZiAoc3dpbV9yZWFkYml0KGJhc2UsIFRSQUNLX1pFUk8pKVxcbi1cXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRcXHRpZiAoc3dpbV9zdGVwKGJhc2UpKVxcbi1cXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoc3dpbV9yZWFkYml0KGJhc2UsIFRSQUNLX1pFUk8pKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuK1xcdHByX2VycihcXFwic3dpbTogdHJhY2sgemVybyByZWNhbGlicmF0aW9uIGZhaWxlZFxcXFxuXFxcIik7XFxuIFxcdHJldHVybiAtMTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgc3dpbV9zZWVrKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBzdGVwKVxcbitzdGF0aWMgaW50IHN3aW1fc2VlayhzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgc3RlcClcXG4ge1xcbi1cXHRpZiAoc3RlcCA9PSAwKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuIFxcdGlmIChzdGVwIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRzd2ltX2FjdGlvbihiYXNlLCBTRUVLX05FR0FUSVZFKTtcXG4gXFx0XFx0c3RlcCA9IC1zdGVwO1xcbi1cXHR9IGVsc2VcXG4rXFx0fSBlbHNlIGlmIChzdGVwIFxcdTAwM2UgMClcXG4gXFx0XFx0c3dpbV9hY3Rpb24oYmFzZSwgU0VFS19QT1NJVElWRSk7XFxuK1xcdHVkZWxheSgxKTtcXG4rXFxuK1xcdHN3aW1fUkVBRFlfdGltZW91dChiYXNlKTtcXG4rXFxuK1xcdGlmIChzdGVwID09IDApXFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0Zm9yICggOyBzdGVwIFxcdTAwM2UgMDsgc3RlcC0tKSB7XFxuK1xcdGZvciAoOyBzdGVwIFxcdTAwM2UgMDsgc3RlcC0tKSB7XFxuIFxcdFxcdGlmIChzd2ltX3N0ZXAoYmFzZSkpXFxuIFxcdFxcdFxcdHJldHVybiAtMTtcXG4gXFx0fVxcbiBcXG4rXFx0bXNsZWVwKDMwKTtcXG4rXFx0c3dpbV9SRUFEWV90aW1lb3V0KGJhc2UpO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHN3aW1fdHJhY2soc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsICBpbnQgdHJhY2spXFxuK3N0YXRpYyBpbnQgc3dpbV90cmFjayhzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcywgaW50IHRyYWNrKVxcbiB7XFxuIFxcdHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy1cXHUwMDNlc3dkLVxcdTAwM2ViYXNlO1xcbiBcXHRpbnQgcmV0O1xcbkBAIC00NDUsOCArNDQxLDEwIEBAIHN0YXRpYyBpbnQgZmxvcHB5X2VqZWN0KHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzKVxcbiBcXHRzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gZnMtXFx1MDAzZXN3ZC1cXHUwMDNlYmFzZTtcXG4gXFxuIFxcdHN3aW1fZHJpdmUoYmFzZSwgZnMtXFx1MDAzZWxvY2F0aW9uKTtcXG4rXFx0c3dpbV90cmFjayhmcywgMSk7XFxuIFxcdHN3aW1fbW90b3IoYmFzZSwgT0ZGKTtcXG4gXFx0c3dpbV9lamVjdChiYXNlKTtcXG4rXFx0c3dpbV9kcml2ZShiYXNlLCBOT19EUklWRSk7XFxuIFxcbiBcXHRmcy1cXHUwMDNlZGlza19pbiA9IDA7XFxuIFxcdGZzLVxcdTAwM2VlamVjdGVkID0gMTtcXG5AQCAtNDU0LDcwICs0NTIsODEgQEAgc3RhdGljIGludCBmbG9wcHlfZWplY3Qoc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBzd2ltX3JlYWRfc2VjdG9yKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzLFxcbi1cXHRcXHRcXHRcXHQgICBpbnQgc2lkZSwgaW50IHRyYWNrLFxcbi1cXHRcXHRcXHRcXHQgICBpbnQgc2VjdG9yLCB1bnNpZ25lZCBjaGFyICpidWZmZXIpXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3dpbV9yZWFkX3NlY3Rvcl9yYW5nZShzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyxcXG4rXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IHNpZGUsIHVuc2lnbmVkIGludCB0cmFjayxcXG4rXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgY291bnQsXFxuK1xcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcilcXG4ge1xcbiBcXHRzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gZnMtXFx1MDAzZXN3ZC1cXHUwMDNlYmFzZTtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0c3RydWN0IHNlY3Rvcl9oZWFkZXIgaGVhZGVyO1xcbi1cXHRpbnQgcmV0ID0gLTE7XFxuLVxcdHNob3J0IGk7XFxuLVxcbi1cXHRzd2ltX3RyYWNrKGZzLCB0cmFjayk7XFxuK1xcdGludCBpLCBiaXRzID0gMDtcXG4gXFxuLVxcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTEsIE1PVE9OKTtcXG4tXFx0c3dpbV9oZWFkKGJhc2UsIHNpZGUpO1xcbi1cXHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBzaWRlKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDE4OyBpKyspIHsgLyogQSB0cmFjayBoYXMgYXQgbW9zdCAxOCBzZWN0b3JzICovXFxuK1xcdFxcdGlmIChpIFxcdTAwM2U9IGNvdW50KVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Yml0cyB8PSBCSVQoaSk7XFxuK1xcdH1cXG4gXFxuIFxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDM2OyBpKyspIHtcXG4tXFx0XFx0cmV0ID0gc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXIoYmFzZSwgXFx1MDAyNmhlYWRlcik7XFxuLVxcdFxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IChoZWFkZXIuc2VjdG9yID09IHNlY3RvcikpIHtcXG4tXFx0XFx0XFx0LyogZm91bmQgKi9cXG4tXFxuLVxcdFxcdFxcdHJldCA9IHN3aW1fcmVhZF9zZWN0b3JfZGF0YShiYXNlLCBidWZmZXIpO1xcbitcXHRcXHRpZiAoYml0cyA9PSAwKSAvKiBBbGwgY291bnQgc2VjdG9ycyB3ZXJlIHJlYWQgb2sgKi9cXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRpZiAoc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXIoYmFzZSwgXFx1MDAyNmhlYWRlcikgfHxcXG4rXFx0XFx0ICAgIHN3aW1fcmVhZChiYXNlLCBlcnJvcikgfHwgaGVhZGVyLnRyYWNrICE9IHRyYWNrIHx8XFxuK1xcdFxcdCAgICBoZWFkZXIuc2lkZSAhPSBzaWRlIHx8IGhlYWRlci5zaXplICE9IDIpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKGhlYWRlci5zZWN0b3IgXFx1MDAzZT0gc3RhcnQgXFx1MDAyNlxcdTAwMjYgaGVhZGVyLnNlY3RvciBcXHUwMDNjIHN0YXJ0ICsgY291bnQpIHtcXG4rXFx0XFx0XFx0dW5zaWduZWQgaW50IG9mZnNldCA9IGhlYWRlci5zZWN0b3IgLSBzdGFydDtcXG4rXFx0XFx0XFx0aW50IHJldDtcXG4rXFxuK1xcdFxcdFxcdGlmICgoYml0cyBcXHUwMDI2IEJJVChvZmZzZXQpKSA9PSAwKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTsgLyogVGhpcyBzZWN0b3Igd2FzIGFscmVhZHkgcmVhZCBvayAqL1xcbitcXG4rXFx0XFx0XFx0cmV0ID0gc3dpbV9yZWFkX3NlY3Rvcl9kYXRhKGJhc2UsIGJ1ZmZlciArIDUxMiAqIG9mZnNldCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgPT0gNTEyIFxcdTAwMjZcXHUwMDI2IHN3aW1fcmVhZChiYXNlLCBlcnJvcikgPT0gMClcXG4rXFx0XFx0XFx0XFx0Yml0cyBcXHUwMDI2PSB+QklUKG9mZnNldCk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuIFxcbi1cXHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBNT1RPTik7XFxuLVxcbi1cXHRpZiAoKGhlYWRlci5zaWRlICE9IHNpZGUpICB8fCAoaGVhZGVyLnRyYWNrICE9IHRyYWNrKSB8fFxcbi1cXHQgICAgIChoZWFkZXIuc2VjdG9yICE9IHNlY3RvcikpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0dXJuIGJpdHMgPyBmZnMoYml0cykgLSAxIDogY291bnQ7IC8qIE5vLiBvZiBjb250aWd1b3VzIG9rIHNlY3RvcnMgKi9cXG4gfVxcbiBcXG4gc3RhdGljIGJsa19zdGF0dXNfdCBmbG9wcHlfcmVhZF9zZWN0b3JzKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzLFxcbi1cXHRcXHRcXHQgICAgICAgaW50IHJlcV9zZWN0b3IsIGludCBzZWN0b3JzX25iLFxcbi1cXHRcXHRcXHQgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyKVxcbitcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcmVxX3NlY3RvcixcXG4rXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IHNlY3RvcnNfbmIsXFxuK1xcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcilcXG4ge1xcbiBcXHRzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gZnMtXFx1MDAzZXN3ZC1cXHUwMDNlYmFzZTtcXG4tXFx0aW50IHJldDtcXG4tXFx0aW50IHNpZGUsIHRyYWNrLCBzZWN0b3I7XFxuLVxcdGludCBpLCB0cnk7XFxuLVxcbitcXHR1bnNpZ25lZCBpbnQgZmFpbHVyZXMgPSAwO1xcbiBcXG4gXFx0c3dpbV9kcml2ZShiYXNlLCBmcy1cXHUwMDNlbG9jYXRpb24pO1xcbi1cXHRmb3IgKGkgPSByZXFfc2VjdG9yOyBpIFxcdTAwM2MgcmVxX3NlY3RvciArIHNlY3RvcnNfbmI7IGkrKykge1xcbi1cXHRcXHRpbnQgeDtcXG4tXFx0XFx0dHJhY2sgPSBpIC8gZnMtXFx1MDAzZXNlY3BlcmN5bDtcXG4tXFx0XFx0eCA9IGkgJSBmcy1cXHUwMDNlc2VjcGVyY3lsO1xcbi1cXHRcXHRzaWRlID0geCAvIGZzLVxcdTAwM2VzZWNwZXJ0cmFjaztcXG4tXFx0XFx0c2VjdG9yID0geCAlIGZzLVxcdTAwM2VzZWNwZXJ0cmFjayArIDE7XFxuLVxcbi1cXHRcXHR0cnkgPSA1O1xcbi1cXHRcXHRkbyB7XFxuLVxcdFxcdFxcdHJldCA9IHN3aW1fcmVhZF9zZWN0b3IoZnMsIHNpZGUsIHRyYWNrLCBzZWN0b3IsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdGJ1ZmZlcik7XFxuLVxcdFxcdFxcdGlmICh0cnktLSA9PSAwKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gQkxLX1NUU19JT0VSUjtcXG4tXFx0XFx0fSB3aGlsZSAocmV0ICE9IDUxMik7XFxuLVxcbi1cXHRcXHRidWZmZXIgKz0gcmV0O1xcbitcXHRzd2ltX1JFQURZX3RpbWVvdXQoYmFzZSk7XFxuK1xcbitcXHR3aGlsZSAoc2VjdG9yc19uYikge1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgY3lsLCB4LCBoZWFkLCBzZWN0b3IsIG4sIHJldDtcXG4rXFxuK1xcdFxcdGN5bCA9IHJlcV9zZWN0b3IgLyBmcy1cXHUwMDNlc2VjcGVyY3lsO1xcbitcXHRcXHR4ID0gcmVxX3NlY3RvciAlIGZzLVxcdTAwM2VzZWNwZXJjeWw7XFxuK1xcdFxcdGhlYWQgPSAoeCBcXHUwMDNlPSBmcy1cXHUwMDNlc2VjcGVydHJhY2spID8gMSA6IDA7XFxuK1xcdFxcdHNlY3RvciA9IHggJSBmcy1cXHUwMDNlc2VjcGVydHJhY2s7XFxuK1xcdFxcdG4gPSBtaW4oc2VjdG9yc19uYiwgZnMtXFx1MDAzZXNlY3BlcnRyYWNrIC0gc2VjdG9yKTtcXG4rXFxuK1xcdFxcdHN3aW1fdHJhY2soZnMsIGN5bCk7XFxuK1xcdFxcdHN3aW1faGVhZChiYXNlLCBoZWFkKTtcXG4rXFxuK1xcdFxcdHJldCA9IHN3aW1fcmVhZF9zZWN0b3JfcmFuZ2UoZnMsIGhlYWQsIGN5bCwgc2VjdG9yICsgMSwgbiwgYnVmZmVyKTtcXG4rXFx0XFx0aWYgKHJldCAhPSBuKVxcbitcXHRcXHRcXHQrK2ZhaWx1cmVzO1xcbitcXHRcXHRpZiAoZmFpbHVyZXMgXFx1MDAzZT0gNSlcXG4rXFx0XFx0XFx0cmV0dXJuIEJMS19TVFNfSU9FUlI7XFxuK1xcbitcXHRcXHRidWZmZXIgKz0gNTEyICogcmV0O1xcbitcXHRcXHRzZWN0b3JzX25iIC09IHJldDtcXG4rXFx0XFx0cmVxX3NlY3RvciArPSByZXQ7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC01MjcsMTIgKzUzNiwxMCBAQCBzdGF0aWMgYmxrX3N0YXR1c190IHN3aW1fcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuIFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGJsa19tcV9xdWV1ZV9kYXRhICpiZClcXG4ge1xcbiBcXHRzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IGhjdHgtXFx1MDAzZXF1ZXVlLVxcdTAwM2VxdWV1ZWRhdGE7XFxuLVxcdHN0cnVjdCBzd2ltX3ByaXYgKnN3ZCA9IGZzLVxcdTAwM2Vzd2Q7XFxuIFxcdHN0cnVjdCByZXF1ZXN0ICpyZXEgPSBiZC1cXHUwMDNlcnE7XFxuIFxcdGJsa19zdGF0dXNfdCBlcnI7XFxuIFxcbi1cXHRpZiAoIXNwaW5fdHJ5bG9ja19pcnEoXFx1MDAyNnN3ZC1cXHUwMDNlbG9jaykpXFxuLVxcdFxcdHJldHVybiBCTEtfU1RTX0RFVl9SRVNPVVJDRTtcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2c3dpbV9tdXRleCk7XFxuIFxcbiBcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChyZXEpO1xcbiBcXG5AQCAtNTUwLDE2ICs1NTcsMTYgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBzd2ltX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbiBcXG4gXFx0ZXJyID0gQkxLX1NUU19PSztcXG4gb3V0Olxcbi1cXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnN3ZC1cXHUwMDNlbG9jayk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2c3dpbV9tdXRleCk7XFxuIFxcdHJldHVybiBlcnI7XFxuIFxcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IGZsb3BweV9zdHJ1Y3QgZmxvcHB5X3R5cGVbNF0gPSB7XFxuLVxcdHsgICAgMCwgIDAsIDAsICAwLCAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCBOVUxMIH0sIC8qIG5vIHRlc3RpbmcgICAqL1xcbitcXHR7ICAgIDAsICAwLCAwLCAgMCwgMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgTlVMTCB9LCAvKiBubyB0ZXN0aW5nICovXFxuIFxcdHsgIDcyMCwgIDksIDEsIDgwLCAwLCAweDJBLCAweDAyLCAweERGLCAweDUwLCBOVUxMIH0sIC8qIDM2MEtCIFNTIDMuNVxcXCIqL1xcbi1cXHR7IDE0NDAsICA5LCAyLCA4MCwgMCwgMHgyQSwgMHgwMiwgMHhERiwgMHg1MCwgTlVMTCB9LCAvKiA3MjBLQiAzLjVcXFwiICAgKi9cXG4tXFx0eyAyODgwLCAxOCwgMiwgODAsIDAsIDB4MUIsIDB4MDAsIDB4Q0YsIDB4NkMsIE5VTEwgfSwgLyogMS40NE1CIDMuNVxcXCIgICovXFxuK1xcdHsgMTQ0MCwgIDksIDIsIDgwLCAwLCAweDJBLCAweDAyLCAweERGLCAweDUwLCBOVUxMIH0sIC8qIDcyMEtCIDMuNVxcXCIgKi9cXG4rXFx0eyAyODgwLCAxOCwgMiwgODAsIDAsIDB4MUIsIDB4MDAsIDB4Q0YsIDB4NkMsIE5VTEwgfSwgLyogMS40NE1CIDMuNVxcXCIgKi9cXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgZ2V0X2Zsb3BweV9nZW9tZXRyeShzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcywgaW50IHR5cGUsXFxuQEAgLTU4NiwyMyArNTkzLDE2IEBAIHN0YXRpYyB2b2lkIHNldHVwX21lZGl1bShzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcylcXG4gXFxuIFxcdGlmIChzd2ltX3JlYWRiaXQoYmFzZSwgRElTS19JTikpIHtcXG4gXFx0XFx0c3RydWN0IGZsb3BweV9zdHJ1Y3QgKmc7XFxuK1xcbiBcXHRcXHRmcy1cXHUwMDNlZGlza19pbiA9IDE7XFxuIFxcdFxcdGZzLVxcdTAwM2V3cml0ZV9wcm90ZWN0ZWQgPSBzd2ltX3JlYWRiaXQoYmFzZSwgV1JJVEVfUFJPVCk7XFxuLVxcbi1cXHRcXHRpZiAoc3dpbV90cmFjazAwKGJhc2UpKVxcbi1cXHRcXHRcXHRwcmludGsoS0VSTl9FUlJcXG4tXFx0XFx0XFx0XFx0XFxcIlNXSU06IGNhbm5vdCBtb3ZlIGZsb3BweSBoZWFkIHRvIHRyYWNrIDBcXFxcblxcXCIpO1xcbi1cXG4tXFx0XFx0c3dpbV90cmFjazAwKGJhc2UpO1xcbi1cXG4gXFx0XFx0ZnMtXFx1MDAzZXR5cGUgPSBzd2ltX3JlYWRiaXQoYmFzZSwgVFdPTUVHX01FRElBKSA/XFxuLVxcdFxcdFxcdEhEX01FRElBIDogRERfTUVESUE7XFxuK1xcdFxcdFxcdCAgIEhEX01FRElBIDogRERfTUVESUE7XFxuIFxcdFxcdGZzLVxcdTAwM2VoZWFkX251bWJlciA9IHN3aW1fcmVhZGJpdChiYXNlLCBTSU5HTEVfU0lERUQpID8gMSA6IDI7XFxuIFxcdFxcdGdldF9mbG9wcHlfZ2VvbWV0cnkoZnMsIDAsIFxcdTAwMjZnKTtcXG4gXFx0XFx0ZnMtXFx1MDAzZXRvdGFsX3NlY3MgPSBnLVxcdTAwM2VzaXplO1xcbiBcXHRcXHRmcy1cXHUwMDNlc2VjcGVyY3lsID0gZy1cXHUwMDNlaGVhZCAqIGctXFx1MDAzZXNlY3Q7XFxuIFxcdFxcdGZzLVxcdTAwM2VzZWNwZXJ0cmFjayA9IGctXFx1MDAzZXNlY3Q7XFxuLVxcdFxcdGZzLVxcdTAwM2V0cmFjayA9IDA7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGZzLVxcdTAwM2VkaXNrX2luID0gMDtcXG4gXFx0fVxcbkBAIC02MjAsMTEgKzYyMCw5IEBAIHN0YXRpYyBpbnQgZmxvcHB5X29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcXG4gXFx0XFx0ZnMtXFx1MDAzZXJlZl9jb3VudCA9IC0xO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGZzLVxcdTAwM2VyZWZfY291bnQrKztcXG4tXFx0c3dpbV93cml0ZShiYXNlLCBzZXR1cCwgU19JQk1fRFJJVkUgIHwgU19GQ0xLX0RJVjIpO1xcbi1cXHR1ZGVsYXkoMTApO1xcbitcXG4gXFx0c3dpbV9kcml2ZShiYXNlLCBmcy1cXHUwMDNlbG9jYXRpb24pO1xcbi1cXHRzd2ltX21vdG9yKGJhc2UsIE9OKTtcXG4tXFx0c3dpbV9hY3Rpb24oYmFzZSwgU0VUTUZNKTtcXG4rXFxuIFxcdGlmIChmcy1cXHUwMDNlZWplY3RlZClcXG4gXFx0XFx0c2V0dXBfbWVkaXVtKGZzKTtcXG4gXFx0aWYgKCFmcy1cXHUwMDNlZGlza19pbikge1xcbkBAIC02MzIsNiArNjMwLDExIEBAIHN0YXRpYyBpbnQgZmxvcHB5X29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuK1xcdHN3aW1fbW90b3IoYmFzZSwgT04pO1xcbitcXHRzd2ltX2FjdGlvbihiYXNlLCBTRVRNRk0pO1xcbitcXHRtc2xlZXAoMzApO1xcbitcXHRzd2ltX1JFQURZX3RpbWVvdXQoYmFzZSk7XFxuK1xcbiBcXHRzZXRfY2FwYWNpdHkoZnMtXFx1MDAzZWRpc2ssIGZzLVxcdTAwM2V0b3RhbF9zZWNzKTtcXG4gXFxuIFxcdGlmIChtb2RlIFxcdTAwMjYgQkxLX09QRU5fTkRFTEFZKVxcbkBAIC02NTIsOCArNjU1LDEwIEBAIHN0YXRpYyBpbnQgZmxvcHB5X29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcXG4gXFx0ZWxzZSBpZiAoZnMtXFx1MDAzZXJlZl9jb3VudCBcXHUwMDNlIDApXFxuIFxcdFxcdC0tZnMtXFx1MDAzZXJlZl9jb3VudDtcXG4gXFxuLVxcdGlmIChmcy1cXHUwMDNlcmVmX2NvdW50ID09IDApXFxuK1xcdGlmIChmcy1cXHUwMDNlcmVmX2NvdW50ID09IDApIHtcXG4gXFx0XFx0c3dpbV9tb3RvcihiYXNlLCBPRkYpO1xcbitcXHRcXHRzd2ltX2RyaXZlKGJhc2UsIE5PX0RSSVZFKTtcXG4rXFx0fVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbkBAIC02NzksOCArNjg0LDExIEBAIHN0YXRpYyB2b2lkIGZsb3BweV9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbiBcXHRlbHNlIGlmIChmcy1cXHUwMDNlcmVmX2NvdW50IFxcdTAwM2UgMClcXG4gXFx0XFx0LS1mcy1cXHUwMDNlcmVmX2NvdW50O1xcbiBcXG4tXFx0aWYgKGZzLVxcdTAwM2VyZWZfY291bnQgPT0gMClcXG4rXFx0aWYgKGZzLVxcdTAwM2VyZWZfY291bnQgPT0gMCkge1xcbitcXHRcXHRzd2ltX2RyaXZlKGJhc2UsIGZzLVxcdTAwM2Vsb2NhdGlvbik7XFxuIFxcdFxcdHN3aW1fbW90b3IoYmFzZSwgT0ZGKTtcXG4rXFx0XFx0c3dpbV9kcml2ZShiYXNlLCBOT19EUklWRSk7XFxuK1xcdH1cXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzd2ltX211dGV4KTtcXG4gfVxcbiBcXG5AQCAtNjkxLDcgKzY5OSw3IEBAIHN0YXRpYyBpbnQgZmxvcHB5X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGlmICgoY21kIFxcdTAwMjYgMHg4MCkgXFx1MDAyNlxcdTAwMjYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpXFxuLVxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuK1xcdFxcdHJldHVybiAtRVBFUk07XFxuIFxcbiBcXHRzd2l0Y2ggKGNtZCkge1xcbiBcXHRjYXNlIEZERUpFQ1Q6XFxuQEAgLTc1MCwxMCArNzU4LDkgQEAgc3RhdGljIGludCBzd2ltX2FkZF9mbG9wcHkoc3RydWN0IHN3aW1fcHJpdiAqc3dkLCBlbnVtIGRyaXZlX2xvY2F0aW9uIGxvY2F0aW9uKVxcbiBcXHRzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IFxcdTAwMjZzd2QtXFx1MDAzZXVuaXRbc3dkLVxcdTAwM2VmbG9wcHlfY291bnRdO1xcbiBcXHRzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gc3dkLVxcdTAwM2ViYXNlO1xcbiBcXG4rXFx0ZnMtXFx1MDAzZXN3ZCA9IHN3ZDtcXG4gXFx0ZnMtXFx1MDAzZWxvY2F0aW9uID0gbG9jYXRpb247XFxuIFxcbi1cXHRzd2ltX2RyaXZlKGJhc2UsIGxvY2F0aW9uKTtcXG4tXFxuIFxcdHN3aW1fbW90b3IoYmFzZSwgT0ZGKTtcXG4gXFxuIFxcdGZzLVxcdTAwM2V0eXBlID0gSERfTUVESUE7XFxuQEAgLTc2MSw2ICs3NjgsNyBAQCBzdGF0aWMgaW50IHN3aW1fYWRkX2Zsb3BweShzdHJ1Y3Qgc3dpbV9wcml2ICpzd2QsIGVudW0gZHJpdmVfbG9jYXRpb24gbG9jYXRpb24pXFxuIFxcbiBcXHRmcy1cXHUwMDNlcmVmX2NvdW50ID0gMDtcXG4gXFx0ZnMtXFx1MDAzZWVqZWN0ZWQgPSAxO1xcbitcXHRmcy1cXHUwMDNldHJhY2sgPSAwO1xcbiBcXG4gXFx0c3dkLVxcdTAwM2VmbG9wcHlfY291bnQrKztcXG4gXFxuQEAgLTc4NSwyNSArNzkzLDQzIEBAIHN0YXRpYyB2b2lkIHN3aW1fY2xlYW51cF9mbG9wcHlfZGlzayhzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcylcXG4gXFx0YmxrX21xX2ZyZWVfdGFnX3NldChcXHUwMDI2ZnMtXFx1MDAzZXRhZ19zZXQpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHN3aW1fZmxvcHB5X2luaXQoc3RydWN0IHN3aW1fcHJpdiAqc3dkKVxcbitzdGF0aWMgdm9pZCBzd2ltX3NldF9wYXJhbWV0ZXJzKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcdHN0YXRpYyBjb25zdCB1OCBtZW1bXSA9IHsgMHgxOCwgMHg0MSwgMHgyZSwgMHgyZSwgMHgxOCwgMHgxOCwgMHgxYiwgMHgxYixcXG4rXFx0XFx0XFx0XFx0ICAweDJmLCAweDJmLCAweDE5LCAweDE5LCAweDk3LCAweDFiLCAweDU3LCAweDNiLCB9O1xcbitcXG4rXFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgMCk7IC8qIHJlc2V0IHBhcmFtZXRlciBtZW1vcnkgaW5kZXggKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDE2OyArK2kpXFxuK1xcdFxcdHN3aW1fd3JpdGUoYmFzZSwgcGFyYW1ldGVyLCBtZW1baV0pO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHN3aW1fZmxvcHB5X2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4ge1xcbitcXHRzdHJ1Y3Qgc3dpbV9wcml2ICpzd2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFx0dW5zaWduZWQgaW50ICpkYXRhID0gcGRldi1cXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGE7XFxuIFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0ge1xcbi1cXHRcXHQuZmVhdHVyZXNcXHRcXHQ9IEJMS19GRUFUX1JPVEFUSU9OQUwsXFxuK1xcdFxcdC5mZWF0dXJlcyA9IEJMS19GRUFUX1JPVEFUSU9OQUwsXFxuIFxcdH07XFxuIFxcdGludCBlcnI7XFxuIFxcdGludCBkcml2ZTtcXG4gXFx0c3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IHN3ZC1cXHUwMDNlYmFzZTtcXG4gXFxuK1xcdHN3aW1fd3JpdGUoYmFzZSwgc2V0dXAsIFNfSUJNX0RSSVZFIHwgKCpkYXRhID8gU19GQ0xLX0RJVjIgOiAwKSk7XFxuK1xcbitcXHRzd2ltX3NldF9wYXJhbWV0ZXJzKGJhc2UpO1xcbitcXG4gXFx0Lyogc2NhbiBmbG9wcHkgZHJpdmVzICovXFxuIFxcbiBcXHRzd2ltX2RyaXZlKGJhc2UsIElOVEVSTkFMX0RSSVZFKTtcXG4gXFx0aWYgKHN3aW1fcmVhZGJpdChiYXNlLCBEUklWRV9QUkVTRU5UKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgIXN3aW1fcmVhZGJpdChiYXNlLCBPTkVNRUdfRFJJVkUpKVxcbitcXHQgICAgIXN3aW1fcmVhZGJpdChiYXNlLCBPTkVNRUdfRFJJVkUpIFxcdTAwMjZcXHUwMDI2ICFzd2ltX3RyYWNrMDAoYmFzZSkpXFxuIFxcdFxcdHN3aW1fYWRkX2Zsb3BweShzd2QsIElOVEVSTkFMX0RSSVZFKTtcXG4gXFx0c3dpbV9kcml2ZShiYXNlLCBFWFRFUk5BTF9EUklWRSk7XFxuIFxcdGlmIChzd2ltX3JlYWRiaXQoYmFzZSwgRFJJVkVfUFJFU0VOVCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICFzd2ltX3JlYWRiaXQoYmFzZSwgT05FTUVHX0RSSVZFKSlcXG4rXFx0ICAgICFzd2ltX3JlYWRiaXQoYmFzZSwgT05FTUVHX0RSSVZFKSBcXHUwMDI2XFx1MDAyNiAhc3dpbV90cmFjazAwKGJhc2UpKVxcbiBcXHRcXHRzd2ltX2FkZF9mbG9wcHkoc3dkLCBFWFRFUk5BTF9EUklWRSk7XFxuK1xcdHN3aW1fZHJpdmUoYmFzZSwgTk9fRFJJVkUpO1xcbiBcXG4gXFx0LyogcmVnaXN0ZXIgZmxvcHB5IGRyaXZlcyAqL1xcbiBcXG5AQCAtODE0LDExICs4NDAsOSBAQCBzdGF0aWMgaW50IHN3aW1fZmxvcHB5X2luaXQoc3RydWN0IHN3aW1fcHJpdiAqc3dkKVxcbiBcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXHR9XFxuIFxcbi1cXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2c3dkLVxcdTAwM2Vsb2NrKTtcXG4tXFxuIFxcdGZvciAoZHJpdmUgPSAwOyBkcml2ZSBcXHUwMDNjIHN3ZC1cXHUwMDNlZmxvcHB5X2NvdW50OyBkcml2ZSsrKSB7XFxuIFxcdFxcdGVyciA9IGJsa19tcV9hbGxvY19zcV90YWdfc2V0KFxcdTAwMjZzd2QtXFx1MDAzZXVuaXRbZHJpdmVdLnRhZ19zZXQsXFxuLVxcdFxcdFxcdFxcdFxcdTAwMjZzd2ltX21xX29wcywgMiwgMCk7XFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZzd2ltX21xX29wcywgMiwgQkxLX01RX0ZfQkxPQ0tJTkcpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRnb3RvIGV4aXRfcHV0X2Rpc2tzO1xcbiBcXG5AQCAtODMwLDggKzg1NCw2IEBAIHN0YXRpYyBpbnQgc3dpbV9mbG9wcHlfaW5pdChzdHJ1Y3Qgc3dpbV9wcml2ICpzd2QpXFxuIFxcdFxcdFxcdGVyciA9IFBUUl9FUlIoc3dkLVxcdTAwM2V1bml0W2RyaXZlXS5kaXNrKTtcXG4gXFx0XFx0XFx0Z290byBleGl0X3B1dF9kaXNrcztcXG4gXFx0XFx0fVxcbi1cXG4tXFx0XFx0c3dkLVxcdTAwM2V1bml0W2RyaXZlXS5zd2QgPSBzd2Q7XFxuIFxcdH1cXG4gXFxuIFxcdGZvciAoZHJpdmUgPSAwOyBkcml2ZSBcXHUwMDNjIHN3ZC1cXHUwMDNlZmxvcHB5X2NvdW50OyBkcml2ZSsrKSB7XFxuQEAgLTkwNSw3ICs5MjcsNyBAQCBzdGF0aWMgaW50IHN3aW1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KVxcbiBcXG4gXFx0c3dkLVxcdTAwM2ViYXNlID0gc3dpbV9iYXNlO1xcbiBcXG4tXFx0cmV0ID0gc3dpbV9mbG9wcHlfaW5pdChzd2QpO1xcbitcXHRyZXQgPSBzd2ltX2Zsb3BweV9pbml0KGRldik7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gb3V0X2tmcmVlO1xcbiBcXG5AQCAtOTQ1LDcgKzk2Nyw3IEBAIHN0YXRpYyB2b2lkIHN3aW1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldilcXG4gc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc3dpbV9kcml2ZXIgPSB7XFxuIFxcdC5wcm9iZSAgPSBzd2ltX3Byb2JlLFxcbiBcXHQucmVtb3ZlID0gc3dpbV9yZW1vdmUsXFxuLVxcdC5kcml2ZXIgICA9IHtcXG4rXFx0LmRyaXZlciA9IHtcXG4gXFx0XFx0Lm5hbWVcXHQ9IENBUkROQU1FLFxcbiBcXHR9LFxcbiB9O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N3aW1fYXNtLlMgYi9kcml2ZXJzL2Jsb2NrL3N3aW1fYXNtLlNcXG5pbmRleCAzZDdhMmQ4NzU5NWE1Ny4uNjViNGU0NjU4ZTEwYzcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TXFxuKysrIGIvZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TXFxuQEAgLTUsNyArNSw3IEBAXFxuICAqIG5lZWRzIGFzc2VtYmx5IGxhbmd1YWdlIGJlY2F1c2UgaXMgdmVyeSB0aW1pbmcgZGVwZW5kZW50XFxuICAqIHRoaXMgY29udHJvbGxlciBleGlzdHMgb25seSBvbiBtYWNpbnRvc2ggNjgweDAgYmFzZWRcXG4gICpcXG4tICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDggTGF1cmVudCBWaXZpZXIgXFx1MDAzY0xhdXJlbnRAbHZpdmllci5pbmZvXFx1MDAzZVxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggTGF1cmVudCBWaXZpZXIgXFx1MDAzY0xhdXJlbnRAbHZpdmllci5pbmZvXFx1MDAzZVxcbiAgKlxcbiAgKiBiYXNlZCBvbiBBbGFzdGFpciBCcmlkZ2V3YXRlciBTV0lNIGFuYWx5c2lzLCAyMDAxXFxuICAqIGJhc2VkIG9uIG5ldEJTRCBJV00gZHJpdmVyIChjKSAxOTk3LCAxOTk4IEhhdWtlIEZhdGguXFxuQEAgLTE0LDEzNSArMTQsMTM4IEBAXFxuICAqIDIwMDgtMTEtMDUgKGx2KSAtIGFkZCBnZXRfc3dpbV9tb2RlXFxuICAqL1xcbiBcXG4tXFx0LmVxdVxcdHdyaXRlX2RhdGEsXFx0MHgwMDAwXFxuLVxcdC5lcXVcXHR3cml0ZV9tYXJrLFxcdDB4MDIwMFxcbi1cXHQuZXF1XFx0d3JpdGVfQ1JDLFxcdDB4MDQwMFxcbi1cXHQuZXF1XFx0d3JpdGVfcGFyYW1ldGVyLDB4MDYwMFxcbi1cXHQuZXF1XFx0d3JpdGVfcGhhc2UsXFx0MHgwODAwXFxuLVxcdC5lcXVcXHR3cml0ZV9zZXR1cCxcXHQweDBhMDBcXG4tXFx0LmVxdVxcdHdyaXRlX21vZGUwLFxcdDB4MGMwMFxcbi1cXHQuZXF1XFx0d3JpdGVfbW9kZTEsXFx0MHgwZTAwXFxuLVxcdC5lcXVcXHRyZWFkX2RhdGEsXFx0MHgxMDAwXFxuLVxcdC5lcXVcXHRyZWFkX21hcmssXFx0MHgxMjAwXFxuLVxcdC5lcXVcXHRyZWFkX2Vycm9yLFxcdDB4MTQwMFxcbi1cXHQuZXF1XFx0cmVhZF9wYXJhbWV0ZXIsXFx0MHgxNjAwXFxuLVxcdC5lcXVcXHRyZWFkX3BoYXNlLFxcdDB4MTgwMFxcbi1cXHQuZXF1XFx0cmVhZF9zZXR1cCxcXHQweDFhMDBcXG4tXFx0LmVxdVxcdHJlYWRfc3RhdHVzLFxcdDB4MWMwMFxcbi1cXHQuZXF1XFx0cmVhZF9oYW5kc2hha2UsXFx0MHgxZTAwXFxuLVxcbi1cXHQuZXF1XFx0b19zaWRlLCAwXFxuLVxcdC5lcXVcXHRvX3RyYWNrLCAxXFxuLVxcdC5lcXVcXHRvX3NlY3RvciwgMlxcbi1cXHQuZXF1XFx0b19zaXplLCAzXFxuLVxcdC5lcXVcXHRvX2NyYzAsIDRcXG4tXFx0LmVxdVxcdG9fY3JjMSwgNVxcbi1cXG4tXFx0LmVxdVxcdHNlZWtfdGltZSwgMzAwMDBcXG4tXFx0LmVxdVxcdG1heF9yZXRyeSwgNDBcXG4tXFx0LmVxdVxcdHNlY3Rvcl9zaXplLCA1MTJcXG4rXFx0LmVxdVxcdC5Md3JpdGVfZGF0YSxcXHRcXHQweDAwMDBcXG4rXFx0LmVxdVxcdC5Md3JpdGVfbWFyayxcXHRcXHQweDAyMDBcXG4rXFx0LmVxdVxcdC5Md3JpdGVfQ1JDLFxcdFxcdDB4MDQwMFxcbitcXHQuZXF1XFx0Lkx3cml0ZV9wYXJhbWV0ZXIsXFx0MHgwNjAwXFxuK1xcdC5lcXVcXHQuTHdyaXRlX3BoYXNlLFxcdFxcdDB4MDgwMFxcbitcXHQuZXF1XFx0Lkx3cml0ZV9zZXR1cCxcXHRcXHQweDBhMDBcXG4rXFx0LmVxdVxcdC5Md3JpdGVfbW9kZTAsXFx0XFx0MHgwYzAwXFxuK1xcdC5lcXVcXHQuTHdyaXRlX21vZGUxLFxcdFxcdDB4MGUwMFxcbitcXHQuZXF1XFx0LkxyZWFkX2RhdGEsXFx0XFx0MHgxMDAwXFxuK1xcdC5lcXVcXHQuTHJlYWRfbWFyayxcXHRcXHQweDEyMDBcXG4rXFx0LmVxdVxcdC5McmVhZF9lcnJvcixcXHRcXHQweDE0MDBcXG4rXFx0LmVxdVxcdC5McmVhZF9wYXJhbWV0ZXIsXFx0MHgxNjAwXFxuK1xcdC5lcXVcXHQuTHJlYWRfcGhhc2UsXFx0XFx0MHgxODAwXFxuK1xcdC5lcXVcXHQuTHJlYWRfc2V0dXAsXFx0XFx0MHgxYTAwXFxuK1xcdC5lcXVcXHQuTHJlYWRfc3RhdHVzLFxcdFxcdDB4MWMwMFxcbitcXHQuZXF1XFx0LkxyZWFkX2hhbmRzaGFrZSxcXHQweDFlMDBcXG4rXFxuK1xcdC5lcXVcXHQuTG9fc2lkZSxcXHRcXHQwXFxuK1xcdC5lcXVcXHQuTG9fdHJhY2ssXFx0XFx0MVxcbitcXHQuZXF1XFx0LkxvX3NlY3RvcixcXHRcXHQyXFxuK1xcdC5lcXVcXHQuTG9fc2l6ZSxcXHRcXHQzXFxuK1xcdC5lcXVcXHQuTG9fY3JjMCxcXHRcXHQ0XFxuK1xcdC5lcXVcXHQuTG9fY3JjMSxcXHRcXHQ1XFxuK1xcbitcXHQuZXF1XFx0LkxzZWVrX3RpbWUsXFx0XFx0MzAwMDBcXG4rXFx0LmVxdVxcdC5MbWF4X3JldHJ5LFxcdFxcdDQwXFxuK1xcdC5lcXVcXHQuTHNlY3Rvcl9zaXplLFxcdFxcdDUxMlxcbitcXG4rXFx0LmVxdVxcdC5MbXJfY2xlYXJfZmlmbyxcXHQweDAxXFxuK1xcdC5lcXVcXHQuTG1yX2FjdGlvbixcXHRcXHQweDA4XFxuK1xcdC5lcXVcXHQuTG1yX3dyaXRlX2FjdGlvbixcXHQweDE4XFxuK1xcbitcXHQuZXF1XFx0Lkxocl9jcmNfZXJyb3IsXFx0XFx0MHgwMlxcbitcXHQuZXF1XFx0Lkxocl9maWZvXzJieXRlcyxcXHQweDQwXFxuK1xcdC5lcXVcXHQuTGhyX2ZpZm9fMWJ5dGUsXFx0MHg4MFxcbiBcXG4gXFx0Lmdsb2JhbCBzd2ltX3JlYWRfc2VjdG9yX2hlYWRlclxcbiBzd2ltX3JlYWRfc2VjdG9yX2hlYWRlcjpcXG4gXFx0bGlua1xcdCVhNiwgIzBcXG4tXFx0bW92ZW1sXFx0JWQxLSVkNS8lYTAtJWE0LCVzcEAtXFxuK1xcdG1vdmVtbFxcdCVkMS0lZDUvJWEwLSVhNSwlc3BALVxcbiBcXHRtb3ZlbFxcdCVhNkAoMHgwYyksICVhNFxcbi1cXHRic3JcXHRtZm1fcmVhZF9hZGRybWFya1xcbi1cXHRtb3ZlbWxcXHQlc3BAKywgJWQxLSVkNS8lYTAtJWE0XFxuK1xcdG1vdmVxXFx0Iy0xLCAlZDBcXG4rXFx0YnNyXFx0LkxtZm1fcmVhZF9hZGRybWFya1xcbitcXHRtb3ZlbWxcXHQlc3BAKywgJWQxLSVkNS8lYTAtJWE1XFxuIFxcdHVubGtcXHQlYTZcXG4gXFx0cnRzXFxuIFxcbi1zZWN0b3JfYWRkcmVzc19tYXJrOlxcbisuTHNlY3Rvcl9hZGRyZXNzX21hcms6XFxuIFxcdC5ieXRlXFx0MHhhMSwgMHhhMSwgMHhhMSwgMHhmZVxcbi1zZWN0b3JfZGF0YV9tYXJrOlxcbisuTHNlY3Rvcl9kYXRhX21hcms6XFxuIFxcdC5ieXRlXFx0MHhhMSwgMHhhMSwgMHhhMSwgMHhmYlxcbiBcXG4tbWZtX3JlYWRfYWRkcm1hcms6XFxuKy5MbWZtX3JlYWRfYWRkcm1hcms6XFxuIFxcdG1vdmVsXFx0JWE2QCgweDA4KSwgJWEzXFxuLVxcdGxlYVxcdCVhM0AocmVhZF9oYW5kc2hha2UpLCAlYTJcXG4tXFx0bGVhXFx0JWEzQChyZWFkX21hcmspLCAlYTNcXG4tXFx0bW92ZXFcXHQjLTEsICVkMFxcbi1cXHRtb3Zld1xcdCNzZWVrX3RpbWUsICVkMlxcbi1cXG4td2FpdF9oZWFkZXJfaW5pdDpcXG4tXFx0dHN0YlxcdCVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaylcXG4tXFx0bW92ZWJcXHQjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaylcXG4tXFx0bW92ZWJcXHQjMHgwMSwgJWEzQCh3cml0ZV9tb2RlMSAtIHJlYWRfbWFyaylcXG4tXFx0bW92ZWJcXHQjMHgwMSwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaylcXG4tXFx0dHN0YlxcdCVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaylcXG4tXFx0bW92ZWJcXHQjMHgwOCwgJWEzQCh3cml0ZV9tb2RlMSAtIHJlYWRfbWFyaylcXG4tXFxuLVxcdGxlYVxcdHNlY3Rvcl9hZGRyZXNzX21hcmssICVhMFxcbitcXHRsZWFcXHQlYTNAKC5McmVhZF9oYW5kc2hha2UpLCAlYTJcXG4rXFx0bGVhXFx0JWEzQCguTHJlYWRfZGF0YSksICVhNVxcbitcXHRsZWFcXHQlYTNAKC5McmVhZF9tYXJrKSwgJWEzXFxuK1xcdG1vdmV3XFx0Iy5Mc2Vla190aW1lLCAlZDJcXG4rXFxuKy5Md2FpdF9oZWFkZXJfaW5pdDpcXG4rXFx0bW92ZWJcXHQjLkxtcl93cml0ZV9hY3Rpb24sICVhM0AoLkx3cml0ZV9tb2RlMCAtIC5McmVhZF9tYXJrKVxcbitcXHRtb3ZlYlxcdCMuTG1yX2NsZWFyX2ZpZm8sICVhM0AoLkx3cml0ZV9tb2RlMSAtIC5McmVhZF9tYXJrKVxcbitcXHRtb3ZlYlxcdCMuTG1yX2NsZWFyX2ZpZm8sICVhM0AoLkx3cml0ZV9tb2RlMCAtIC5McmVhZF9tYXJrKVxcbitcXHR0c3RiXFx0JWEzQCguTHJlYWRfZXJyb3IgLSAuTHJlYWRfbWFyaylcXG4rXFx0bW92ZWJcXHQjLkxtcl9hY3Rpb24sICVhM0AoLkx3cml0ZV9tb2RlMSAtIC5McmVhZF9tYXJrKVxcbitcXG4rXFx0bGVhXFx0LkxzZWN0b3JfYWRkcmVzc19tYXJrLCAlYTBcXG4gXFx0bW92ZXFcXHQjMywgJWQxXFxuIFxcbi13YWl0X2FkZHJfbWFya19ieXRlOlxcbi1cXG4rLkx3YWl0X2FkZHJfbWFya19ieXRlOlxcbiBcXHR0c3RiXFx0JWEyQFxcbi1cXHRkYm1pXFx0JWQyLCB3YWl0X2FkZHJfbWFya19ieXRlXFxuLVxcdGJwbFxcdGhlYWRlcl9leGl0XFxuK1xcdGRibWlcXHQlZDIsIC5Md2FpdF9hZGRyX21hcmtfYnl0ZVxcbitcXHRicGxcXHQuTHNpZ25hbF9ub255YlxcbiBcXG4gXFx0bW92ZWJcXHQlYTNALCAlZDNcXG4gXFx0Y21wYlxcdCVhMEArLCAlZDNcXG4tXFx0ZGJuZVxcdCVkMSwgd2FpdF9hZGRyX21hcmtfYnl0ZVxcbi1cXHRibmVcXHR3YWl0X2hlYWRlcl9pbml0XFxuLVxcbi1cXHRtb3ZlcVxcdCNtYXhfcmV0cnksICVkMlxcbitcXHRkYm5lXFx0JWQxLCAuTHdhaXRfYWRkcl9tYXJrX2J5dGVcXG4rXFx0Ym5lXFx0Lkx3YWl0X2hlYWRlcl9pbml0XFxuIFxcbi1hbWFyazA6XFx0dHN0YlxcdCVhMkBcXG4tXFx0ZGJtaVxcdCVkMiwgYW1hcmswXFxuLVxcdGJwbFxcdHNpZ25hbF9ub255Ylxcbi1cXG4tXFx0bW92ZWJcXHQlYTNALCAlYTRAKG9fdHJhY2spXFxuLVxcbi1cXHRtb3ZlcVxcdCNtYXhfcmV0cnksICVkMlxcbi1cXG4tYW1hcmsxOlxcdHRzdGJcXHQlYTJAXFxuLVxcdGRibWlcXHQlZDIsIGFtYXJrMVxcbi1cXHRicGxcXHRzaWduYWxfbm9ueWJcXG4tXFxuLVxcdG1vdmViXFx0JWEzQCwgJWE0QChvX3NpZGUpXFxuLVxcbi1cXHRtb3ZlcVxcdCNtYXhfcmV0cnksICVkMlxcbitcXHRtb3ZlcVxcdCMuTG1heF9yZXRyeSwgJWQyXFxuKy5MYW1hcmswOlxcbitcXHR0c3RiXFx0JWEyQFxcbitcXHRkYm1pXFx0JWQyLCAuTGFtYXJrMFxcbitcXHRicGxcXHQuTHNpZ25hbF9ub255YlxcbiBcXG4tYW1hcmsyOlxcdHRzdGJcXHQlYTJAXFxuLVxcdGRibWlcXHQlZDIsIGFtYXJrMlxcbi1cXHRicGxcXHRzaWduYWxfbm9ueWJcXG4rXFx0bW92ZWJcXHQlYTVALCAlYTRAKC5Mb190cmFjaylcXG4gXFxuLVxcdG1vdmViXFx0JWEzQCwgJWE0QChvX3NlY3RvcilcXG4rXFx0bW92ZXFcXHQjLkxtYXhfcmV0cnksICVkMlxcbisuTGFtYXJrMTpcXG4rXFx0dHN0YlxcdCVhMkBcXG4rXFx0ZGJtaVxcdCVkMiwgLkxhbWFyazFcXG4rXFx0YnBsXFx0LkxzaWduYWxfbm9ueWJcXG4gXFxuLVxcdG1vdmVxXFx0I21heF9yZXRyeSwgJWQyXFxuK1xcdG1vdmViXFx0JWE1QCwgJWE0QCguTG9fc2lkZSlcXG4gXFxuLWFtYXJrMzpcXHR0c3RiXFx0JWEyQFxcbi1cXHRkYm1pXFx0JWQyLCBhbWFyazNcXG4tXFx0YnBsXFx0c2lnbmFsX25vbnliXFxuK1xcdG1vdmVxXFx0Iy5MbWF4X3JldHJ5LCAlZDJcXG4rLkxhbWFyazI6XFxuK1xcdHRzdGJcXHQlYTJAXFxuK1xcdGRibWlcXHQlZDIsIC5MYW1hcmsyXFxuK1xcdGJwbFxcdC5Mc2lnbmFsX25vbnliXFxuIFxcbi1cXHRtb3ZlYlxcdCVhM0AsICVhNEAob19zaXplKVxcbitcXHRtb3ZlYlxcdCVhNUAsICVhNEAoLkxvX3NlY3RvcilcXG4gXFxuLVxcdG1vdmVxXFx0I21heF9yZXRyeSwgJWQyXFxuK1xcdG1vdmVxXFx0Iy5MbWF4X3JldHJ5LCAlZDJcXG4rLkxhbWFyazM6XFxuK1xcdHRzdGJcXHQlYTJAXFxuK1xcdGRibWlcXHQlZDIsIC5MYW1hcmszXFxuK1xcdGJwbFxcdC5Mc2lnbmFsX25vbnliXFxuIFxcbi1jcmMwOlxcdHRzdGJcXHQlYTJAXFxuLVxcdGRibWlcXHQlZDIsIGNyYzBcXG4tXFx0YnBsXFx0c2lnbmFsX25vbnliXFxuK1xcdG1vdmViXFx0JWE1QCwgJWE0QCguTG9fc2l6ZSlcXG4gXFxuLVxcdG1vdmViXFx0JWEzQCwgJWE0QChvX2NyYzApXFxuK1xcdG1vdmVxXFx0Iy5MbWF4X3JldHJ5LCAlZDJcXG4rLkxjcmMwOlxcbitcXHR0c3RiXFx0JWEyQFxcbitcXHRkYm1pXFx0JWQyLCAuTGNyYzBcXG4rXFx0YnBsXFx0LkxzaWduYWxfbm9ueWJcXG4gXFxuLVxcdG1vdmVxXFx0I21heF9yZXRyeSwgJWQyXFxuK1xcdG1vdmViXFx0JWE1QCwgJWE0QCguTG9fY3JjMClcXG4gXFxuLWNyYzE6XFx0dHN0YlxcdCVhMkBcXG4tXFx0ZGJtaVxcdCVkMiwgY3JjMVxcbi1cXHRicGxcXHRzaWduYWxfbm9ueWJcXG4rXFx0bW92ZXFcXHQjLkxtYXhfcmV0cnksICVkMlxcbisuTGNyYzE6XFx0bW92ZWJcXHQlYTJALCAlZDVcXG4rXFx0ZGJtaVxcdCVkMiwgLkxjcmMxXFxuK1xcdGJwbFxcdC5Mc2lnbmFsX25vbnliXFxuIFxcbi1cXHRtb3ZlYlxcdCVhM0AsICVhNEAob19jcmMxKVxcbitcXHRtb3ZlYlxcdCVhNUAsICVhNEAoLkxvX2NyYzEpXFxuIFxcbi1cXHR0c3RiXFx0JWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKVxcbitcXHRhbmRiXFx0Iy5MaHJfY3JjX2Vycm9yLCAlZDVcXG4rXFx0Ym5lXFx0LkxzaWduYWxfbm9ueWJcXG4gXFxuLWhlYWRlcl9leGl0OlxcbiBcXHRtb3ZlcVxcdCMwLCAlZDBcXG4tXFx0bW92ZWJcXHQjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaylcXG4tXFx0cnRzXFxuLXNpZ25hbF9ub255YjpcXG4tXFx0bW92ZXFcXHQjLTEsICVkMFxcbi1cXHRtb3ZlYlxcdCMweDE4LCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKVxcbisuTHNpZ25hbF9ub255YjpcXG4rXFx0bW92ZWJcXHQjLkxtcl93cml0ZV9hY3Rpb24sICVhM0AoLkx3cml0ZV9tb2RlMCAtIC5McmVhZF9tYXJrKVxcbiBcXHRydHNcXG4gXFxuIFxcdC5nbG9iYWwgc3dpbV9yZWFkX3NlY3Rvcl9kYXRhXFxuQEAgLTE1MCw5NCArMTUzLDg3IEBAIHN3aW1fcmVhZF9zZWN0b3JfZGF0YTpcXG4gXFx0bGlua1xcdCVhNiwgIzBcXG4gXFx0bW92ZW1sXFx0JWQxLSVkNS8lYTAtJWE1LCVzcEAtXFxuIFxcdG1vdmVsXFx0JWE2QCgweDBjKSwgJWE0XFxuLVxcdGJzclxcdG1mbV9yZWFkX2RhdGFcXG4rXFx0bW92ZXFcXHQjLTEsICVkMFxcbitcXHRic3JcXHQuTG1mbV9yZWFkX2RhdGFcXG4gXFx0bW92ZW1sXFx0JXNwQCssICVkMS0lZDUvJWEwLSVhNVxcbiBcXHR1bmxrXFx0JWE2XFxuIFxcdHJ0c1xcbiBcXG4tbWZtX3JlYWRfZGF0YTpcXG4rLkxtZm1fcmVhZF9kYXRhOlxcbiBcXHRtb3ZlbFxcdCVhNkAoMHgwOCksICVhM1xcbi1cXHRsZWFcXHQlYTNAKHJlYWRfaGFuZHNoYWtlKSwgJWEyXFxuLVxcdGxlYVxcdCVhM0AocmVhZF9kYXRhKSwgJWE1XFxuLVxcdGxlYVxcdCVhM0AocmVhZF9tYXJrKSwgJWEzXFxuLVxcdG1vdmV3XFx0I3NlZWtfdGltZSwgJWQyXFxuLVxcbi13YWl0X2RhdGFfaW5pdDpcXG4tXFx0dHN0YlxcdCVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaylcXG4tXFx0bW92ZWJcXHQjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaylcXG4tXFx0bW92ZWJcXHQjMHgwMSwgJWEzQCh3cml0ZV9tb2RlMSAtIHJlYWRfbWFyaylcXG4tXFx0bW92ZWJcXHQjMHgwMSwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaylcXG4tXFx0dHN0YlxcdCVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaylcXG4tXFx0bW92ZWJcXHQjMHgwOCwgJWEzQCh3cml0ZV9tb2RlMSAtIHJlYWRfbWFyaylcXG4tXFxuLVxcdGxlYVxcdHNlY3Rvcl9kYXRhX21hcmssICVhMFxcbitcXHRsZWFcXHQlYTNAKC5McmVhZF9oYW5kc2hha2UpLCAlYTJcXG4rXFx0bGVhXFx0JWEzQCguTHJlYWRfZGF0YSksICVhNVxcbitcXHRsZWFcXHQlYTNAKC5McmVhZF9tYXJrKSwgJWEzXFxuK1xcdG1vdmV3XFx0Iy5Mc2Vla190aW1lLCAlZDJcXG4rXFxuKy5Md2FpdF9kYXRhX2luaXQ6XFxuK1xcdG1vdmViXFx0Iy5MbXJfd3JpdGVfYWN0aW9uLCAlYTNAKC5Md3JpdGVfbW9kZTAgLSAuTHJlYWRfbWFyaylcXG4rXFx0bW92ZWJcXHQjLkxtcl9jbGVhcl9maWZvLCAlYTNAKC5Md3JpdGVfbW9kZTEgLSAuTHJlYWRfbWFyaylcXG4rXFx0bW92ZWJcXHQjLkxtcl9jbGVhcl9maWZvLCAlYTNAKC5Md3JpdGVfbW9kZTAgLSAuTHJlYWRfbWFyaylcXG4rXFx0dHN0YlxcdCVhM0AoLkxyZWFkX2Vycm9yIC0gLkxyZWFkX21hcmspXFxuK1xcdG1vdmViXFx0Iy5MbXJfYWN0aW9uLCAlYTNAKC5Md3JpdGVfbW9kZTEgLSAuTHJlYWRfbWFyaylcXG4rXFxuK1xcdGxlYVxcdC5Mc2VjdG9yX2RhdGFfbWFyaywgJWEwXFxuIFxcdG1vdmVxXFx0IzMsICVkMVxcbiBcXG4gXFx0Lyogd2FpdCBkYXRhIGFkZHJlc3MgbWFyayAqL1xcbiBcXG4td2FpdF9kYXRhX21hcmtfYnl0ZTpcXG4tXFxuKy5Md2FpdF9kYXRhX21hcmtfYnl0ZTpcXG4gXFx0dHN0YlxcdCVhMkBcXG4tXFx0ZGJtaVxcdCVkMiwgd2FpdF9kYXRhX21hcmtfYnl0ZVxcbi1cXHRicGxcXHRkYXRhX2V4aXRcXG4rXFx0ZGJtaVxcdCVkMiwgLkx3YWl0X2RhdGFfbWFya19ieXRlXFxuK1xcdGJwbFxcdC5MZGF0YV9leGl0XFxuIFxcbiBcXHRtb3ZlYlxcdCVhM0AsICVkM1xcbiBcXHRjbXBiXFx0JWEwQCssICVkM1xcbi1cXHRkYm5lXFx0JWQxLCB3YWl0X2RhdGFfbWFya19ieXRlXFxuLVxcdGJuZVxcdHdhaXRfZGF0YV9pbml0XFxuK1xcdGRibmVcXHQlZDEsIC5Md2FpdF9kYXRhX21hcmtfYnl0ZVxcbitcXHRibmVcXHQuTHdhaXRfZGF0YV9pbml0XFxuIFxcbiBcXHQvKiByZWFkIGRhdGEgKi9cXG4gXFxuLVxcdHRzdGJcXHQlYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspXFxuLVxcbi1cXHRtb3ZlbFxcdCNzZWN0b3Jfc2l6ZS0xLCAlZDRcXHRcXHQvKiBzZWN0b3Igc2l6ZSAqL1xcbi1yZWFkX25ld19kYXRhOlxcbi1cXHRtb3Zld1xcdCNtYXhfcmV0cnksICVkMlxcbi1yZWFkX2RhdGFfbG9vcDpcXG4rXFx0bW92ZWxcXHQjLkxzZWN0b3Jfc2l6ZSAtIDEsICVkNFxcdFxcdC8qIHNlY3RvciBzaXplICovXFxuKy5McmVhZF9uZXdfZGF0YTpcXG4rXFx0bW92ZXdcXHQjLkxtYXhfcmV0cnksICVkMlxcbisuTHJlYWRfZGF0YV9sb29wOlxcbiBcXHRtb3ZlYlxcdCVhMkAsICVkNVxcbi1cXHRhbmRiXFx0IzB4YzAsICVkNVxcbi1cXHRkYm5lXFx0JWQyLCByZWFkX2RhdGFfbG9vcFxcbi1cXHRiZXFcXHRkYXRhX2V4aXRcXG4rXFx0YW5kYlxcdCMoLkxocl9maWZvXzJieXRlcyArIC5MaHJfZmlmb18xYnl0ZSksICVkNVxcbitcXHRiZXFcXHQxZlxcbitcXHRtb3Zld1xcdCMuTG1heF9yZXRyeSwgJWQyXFxuIFxcdG1vdmViXFx0JWE1QCwgJWE0QCtcXG4tXFx0YW5kYlxcdCMweDQwLCAlZDVcXG4tXFx0ZGJuZVxcdCVkNCwgcmVhZF9uZXdfZGF0YVxcbi1cXHRiZXFcXHRleGl0X2xvb3BcXG4rXFx0ZGJyYVxcdCVkNCwgMWZcXG4rXFx0YnJhXFx0LkxkYXRhX2NyYzBcXG4rMTpcXHRhbmRiXFx0Iy5MaHJfZmlmb18yYnl0ZXMsICVkNVxcbitcXHRkYm5lXFx0JWQyLCAuTHJlYWRfZGF0YV9sb29wXFxuK1xcdGJlcVxcdC5MZGF0YV9leGl0XFxuIFxcdG1vdmViXFx0JWE1QCwgJWE0QCtcXG4tXFx0ZGJyYVxcdCVkNCwgcmVhZF9uZXdfZGF0YVxcbi1leGl0X2xvb3A6XFxuK1xcdGRicmFcXHQlZDQsIC5McmVhZF9uZXdfZGF0YVxcbiBcXG4gXFx0LyogcmVhZCBDUkMgKi9cXG4gXFxuLVxcdG1vdmV3XFx0I21heF9yZXRyeSwgJWQyXFxuLWRhdGFfY3JjMDpcXG4tXFxuK1xcdG1vdmV3XFx0Iy5MbWF4X3JldHJ5LCAlZDJcXG4rLkxkYXRhX2NyYzA6XFxuIFxcdHRzdGJcXHQlYTJAXFxuLVxcdGRibWlcXHQlZDIsIGRhdGFfY3JjMFxcbi1cXHRicGxcXHRkYXRhX2V4aXRcXG4rXFx0ZGJtaVxcdCVkMiwgLkxkYXRhX2NyYzBcXG4rXFx0YnBsXFx0LkxkYXRhX2V4aXRcXG4gXFxuLVxcdG1vdmViXFx0JWEzQCwgJWQ1XFxuK1xcdG1vdmViXFx0JWE1QCwgJWQyXFxuIFxcbi1cXHRtb3ZlcVxcdCNtYXhfcmV0cnksICVkMlxcbi1cXG4tZGF0YV9jcmMxOlxcbi1cXG4tXFx0dHN0YlxcdCVhMkBcXG4tXFx0ZGJtaVxcdCVkMiwgZGF0YV9jcmMxXFxuLVxcdGJwbFxcdGRhdGFfZXhpdFxcbi1cXG4tXFx0bW92ZWJcXHQlYTNALCAlZDVcXG4rXFx0bW92ZXFcXHQjLkxtYXhfcmV0cnksICVkMlxcbisuTGRhdGFfY3JjMTpcXG4rXFx0bW92ZWJcXHQlYTJALCAlZDVcXG4rXFx0ZGJtaVxcdCVkMiwgLkxkYXRhX2NyYzFcXG4rXFx0YnBsXFx0LkxkYXRhX2V4aXRcXG4gXFxuLVxcdHRzdGJcXHQlYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspXFxuK1xcdG1vdmViXFx0JWE1QCwgJWQyXFxuIFxcbi1cXHRtb3ZlYlxcdCMweDE4LCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKVxcbitcXHRhbmRiXFx0Iy5MaHJfY3JjX2Vycm9yLCAlZDVcXG4rXFx0Ym5lXFx0LkxkYXRhX2V4aXRcXG4gXFxuIFxcdC8qIHJldHVybiBudW1iZXIgb2YgYnl0ZXMgcmVhZCAqL1xcbiBcXG4tXFx0bW92ZWxcXHQjc2VjdG9yX3NpemUsICVkMFxcbitcXHRtb3ZlbFxcdCMuTHNlY3Rvcl9zaXplLCAlZDBcXG4gXFx0YWRkd1xcdCMxLCAlZDRcXG4gXFx0c3VibFxcdCVkNCwgJWQwXFxuLVxcdHJ0c1xcbi1kYXRhX2V4aXQ6XFxuLVxcdG1vdmViXFx0IzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspXFxuLVxcdG1vdmVxXFx0Iy0xLCAlZDBcXG4rXFxuKy5MZGF0YV9leGl0OlxcbitcXHRtb3ZlYlxcdCMuTG1yX3dyaXRlX2FjdGlvbiwgJWEzQCguTHdyaXRlX21vZGUwIC0gLkxyZWFkX21hcmspXFxuIFxcdHJ0c1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNToyNjo1NS45NzIwMjYwMjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NDMzNzM3Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfU1dJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN3aW1fcXVldWVfcnFcIixcbiAgICBcImZsb3BweV9yZWFkX3NlY3RvcnNcIixcbiAgICBcInN3aW1fcmVhZF9zZWN0b3JfcmFuZ2VcIixcbiAgICBcImZsb3BweV9pb2N0bFwiLFxuICAgIFwiZmxvcHB5X29wZW5cIixcbiAgICBcImZsb3BweV9yZWxlYXNlXCIsXG4gICAgXCJzd2ltX3Byb2JlXCIsXG4gICAgXCJzd2ltX2Zsb3BweV9pbml0XCIsXG4gICAgXCJzd2ltX2FkZF9mbG9wcHlcIixcbiAgICBcInNldHVwX21lZGl1bVwiLFxuICAgIFwiZmxvcHB5X2VqZWN0XCIsXG4gICAgXCJzd2ltX3RyYWNrXCIsXG4gICAgXCJzd2ltX3NlZWtcIixcbiAgICBcInN3aW1fdHJhY2swMFwiLFxuICAgIFwic3dpbV9zdGVwXCIsXG4gICAgXCJzd2ltX21vdG9yXCIsXG4gICAgXCJzd2ltX2RyaXZlXCIsXG4gICAgXCJzd2ltX2FjdGlvblwiLFxuICAgIFwic3dpbV9zZWxlY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFNXSU0gZmxvcHB5IGNvbnRyb2xsZXIgZHJpdmVyIGZvciBtNjhrIE1hY2ludG9zaCBzeXN0ZW1zLCBpbmNsdWRpbmcgY2hhbmdlcyB0byBkZXZpY2UgcmVnaXN0cmF0aW9uLCBpbml0aWFsaXphdGlvbiwgcmVhZGluZyBzZWN0b3JzLCBhbmQgaGFuZGxpbmcgaGFyZHdhcmUgc3RhdGUuIFRoZSBkcml2ZXIgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgKHVzaW5nIHRoZSBgcTgwMGAgbWFjaGluZSkuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBibG9jayBkZXZpY2Ugb3BlcmF0aW9ucywgaW9jdGxzLCBhbmQgaGFyZHdhcmUgaW50ZXJhY3Rpb24gZnVuY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM2Y2U0Yzg3ZmJhMDkwNGJlNzkwY2JjYjBkMTJmZWNhMzVjZjUyODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAxNToyNjo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMgYi9hcmNoL202OGsvbWFjL2NvbmZpZy5jXG5pbmRleCBjMDAzM2Y4ODVlZDRmMC4uZGJhM2RlMjFjM2M0MDUgMTAwNjQ0XG4tLS0gYS9hcmNoL202OGsvbWFjL2NvbmZpZy5jXG4rKysgYi9hcmNoL202OGsvbWFjL2NvbmZpZy5jXG5AQCAtOTg0LDggKzk4NCwzNyBAQCBzdGF0aWMgaW50IF9faW5pdCBtYWNfcGxhdGZvcm1faW5pdCh2b2lkKVxuIFx0XHRcdC5zdGFydCA9IHN3aW1fYmFzZSxcbiBcdFx0XHQuZW5kICAgPSBzd2ltX2Jhc2UgKyAweDFGRkYsXG4gXHRcdH07XG4rXHRcdHVuc2lnbmVkIGludCBkYXRhID0gMDtcbitcbitcdFx0LyogTW9kZWxzIGluIHRoaXMgbGlzdCBhcmUgc3VwcG9zZWQgdG8gcnVuIEZDTEsgYXQgMzIgTUh6ICovXG4rXHRcdHN3aXRjaCAobWFjaW50b3NoX2NvbmZpZy1cdTAwM2VpZGVudCkge1xuK1x0XHRjYXNlIE1BQ19NT0RFTF9DQ0w6XG4rXHRcdGNhc2UgTUFDX01PREVMX0NDTElJOlxuK1x0XHRjYXNlIE1BQ19NT0RFTF9MQ0lJSTpcbitcdFx0Y2FzZSBNQUNfTU9ERUxfUTYwNTpcbitcdFx0Y2FzZSBNQUNfTU9ERUxfUTYwNV9BQ0M6XG4rXHRcdGNhc2UgTUFDX01PREVMX1E2MTA6XG4rXHRcdGNhc2UgTUFDX01PREVMX1E2MzA6XG4rXHRcdGNhc2UgTUFDX01PREVMX1E2NTA6XG4rXHRcdGNhc2UgTUFDX01PREVMX1E4MDA6XG4rXHRcdGNhc2UgTUFDX01PREVMX1A0NjA6XG4rXHRcdGNhc2UgTUFDX01PREVMX1A0NzU6XG4rXHRcdGNhc2UgTUFDX01PREVMX1A0NzVGOlxuK1x0XHRjYXNlIE1BQ19NT0RFTF9QNTIwOlxuK1x0XHRjYXNlIE1BQ19NT0RFTF9QNTUwOlxuK1x0XHRjYXNlIE1BQ19NT0RFTF9QNTc1OlxuK1x0XHRjYXNlIE1BQ19NT0RFTF9QNTg4OlxuK1x0XHRjYXNlIE1BQ19NT0RFTF9UVjpcbitcdFx0Y2FzZSBNQUNfTU9ERUxfQzYxMDpcbitcdFx0Y2FzZSBNQUNfTU9ERUxfQzY1MDpcbitcdFx0Y2FzZSBNQUNfTU9ERUxfUEIxOTA6XG4rXHRcdGNhc2UgTUFDX01PREVMX1BCNTIwOlxuK1x0XHRcdGRhdGEgPSAxO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4gXG4tXHRcdHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoXCJzd2ltXCIsIC0xLCBcdTAwMjZzd2ltX3JzcmMsIDEpO1xuK1x0XHRwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEoTlVMTCwgXCJzd2ltXCIsIC0xLCBcdTAwMjZzd2ltX3JzcmMsIDEsXG4rXHRcdFx0XHRcdFx0ICBcdTAwMjZkYXRhLCBzaXplb2YoZGF0YSkpO1xuIFx0fVxuIFxuIFx0LypcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N3aW0uYyBiL2RyaXZlcnMvYmxvY2svc3dpbS5jXG5pbmRleCAwY2NjMTJhNzIzODhkNS4uNDYwZjc0YzE5Y2ZkYzIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3N3aW0uY1xuKysrIGIvZHJpdmVycy9ibG9jay9zd2ltLmNcbkBAIC0yLDEyICsyLDIwIEBAXG4gLypcbiAgKiBEcml2ZXIgZm9yIFNXSU0gKFNhbmRlciBXb3ogSW50ZWdyYXRlZCBNYWNoaW5lKSBmbG9wcHkgY29udHJvbGxlclxuICAqXG4tICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDggTGF1cmVudCBWaXZpZXIgXHUwMDNjTGF1cmVudEBsdml2aWVyLmluZm9cdTAwM2VcbisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggTGF1cmVudCBWaXZpZXIgXHUwMDNjTGF1cmVudEBsdml2aWVyLmluZm9cdTAwM2VcbiAgKlxuICAqIGJhc2VkIG9uIEFsYXN0YWlyIEJyaWRnZXdhdGVyIFNXSU0gYW5hbHlzaXMsIDIwMDFcbiAgKiBiYXNlZCBvbiBTV0lNMyBkcml2ZXIgKGMpIFBhdWwgTWFja2VycmFzLCAxOTk2XG4gICogYmFzZWQgb24gbmV0QlNEIElXTSBkcml2ZXIgKGMpIDE5OTcsIDE5OTggSGF1a2UgRmF0aC5cbiAgKlxuKyAqIFNlZSBhbHNvOlxuKyAqIEluc2lkZSBNYWNpbnRvc2gsIHZvbC4gSUlJLCBjaC4gMlxuKyAqIGh0dHBzOi8vYXJjaGl2ZS5vcmcvZGV0YWlscy9TV0lNRGVzaWduRG9jc1xuKyAqIE5FQyB1UEQ3MjA3MCBGREMgZGF0YXNoZWV0XG4rICogbWtMaW51eCBzb3VyY2UgZmlsZSBzd2ltaWlpY29tbW9uaGFsLmNcbisgKiBodHRwOi8vd3d3Lm1hYy5saW51eC1tNjhrLm9yZy9kZXZlbC9pd20ucGhwLmh0bWxcbisgKiBNQU1FIHNvdXJjZSBmaWxlIHNvbnlkcml2LmNwcFxuKyAqXG4gICogMjAwNC0wOC0yMSAobHYpIC0gSW5pdGlhbCBpbXBsZW1lbnRhdGlvblxuICAqIDIwMDgtMTAtMzAgKGx2KSAtIFBvcnQgdG8gMi42XG4gICovXG5AQCAtMTksNiArMjcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21ham9yLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaGRyZWcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbkBAIC02MCw3ICs2OSw3IEBAIHN0cnVjdCBzd2ltIHtcbiBcdFJFRyhyZWFkX2hhbmRzaGFrZSlcbiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpO1xuIFxuLSNkZWZpbmUgc3dpbV93cml0ZShiYXNlLCByZWcsIHYpIFx0b3V0XzgoXHUwMDI2KGJhc2UpLVx1MDAzZXdyaXRlXyMjcmVnLCAodikpXG4rI2RlZmluZSBzd2ltX3dyaXRlKGJhc2UsIHJlZywgdilcdG91dF84KFx1MDAyNihiYXNlKS1cdTAwM2V3cml0ZV8jI3JlZywgKHYpKVxuICNkZWZpbmUgc3dpbV9yZWFkKGJhc2UsIHJlZylcdFx0aW5fOChcdTAwMjYoYmFzZSktXHUwMDNlcmVhZF8jI3JlZylcbiBcbiAvKiBJV00gcmVnaXN0ZXJzICovXG5AQCAtODQsNjIgKzkzLDUzIEBAIHN0cnVjdCBpd20ge1xuIFx0UkVHKHE3SClcbiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpO1xuIFxuLSNkZWZpbmUgaXdtX3dyaXRlKGJhc2UsIHJlZywgdikgXHRvdXRfOChcdTAwMjYoYmFzZSktXHUwMDNlcmVnLCAodikpXG4rI2RlZmluZSBpd21fd3JpdGUoYmFzZSwgcmVnLCB2KVx0XHRvdXRfOChcdTAwMjYoYmFzZSktXHUwMDNlcmVnLCAodikpXG4gI2RlZmluZSBpd21fcmVhZChiYXNlLCByZWcpXHRcdGluXzgoXHUwMDI2KGJhc2UpLVx1MDAzZXJlZylcbiBcbiAvKiBiaXRzIGluIHBoYXNlIHJlZ2lzdGVyICovXG4gXG4tI2RlZmluZSBTRUVLX1BPU0lUSVZFXHQweDA3MFxuLSNkZWZpbmUgU0VFS19ORUdBVElWRVx0MHgwNzRcbi0jZGVmaW5lIFNURVBcdFx0MHgwNzFcbi0jZGVmaW5lIE1PVE9SX09OXHQweDA3MlxuLSNkZWZpbmUgTU9UT1JfT0ZGXHQweDA3NlxuLSNkZWZpbmUgSU5ERVhcdFx0MHgwNzNcbi0jZGVmaW5lIEVKRUNUXHRcdDB4MDc3XG4tI2RlZmluZSBTRVRNRk1cdFx0MHgxNzFcbi0jZGVmaW5lIFNFVEdDUlx0XHQweDE3NVxuKyNkZWZpbmUgU0VFS19QT1NJVElWRVx0MHgwRjBcbisjZGVmaW5lIFNFRUtfTkVHQVRJVkVcdDB4MEY0XG4rI2RlZmluZSBTVEVQXHRcdDB4MEYxXG4rI2RlZmluZSBNT1RPUl9PTlx0MHgwRjJcbisjZGVmaW5lIE1PVE9SX09GRlx0MHgwRjZcbisjZGVmaW5lIElOREVYXHRcdDB4MEYzXG4rI2RlZmluZSBFSkVDVFx0XHQweDBGN1xuKyNkZWZpbmUgU0VUTUZNXHRcdDB4MUYxXG4rI2RlZmluZSBTRVRHQ1JcdFx0MHgxRjVcbiBcbi0jZGVmaW5lIFJFTEFYXHRcdDB4MDMzXG4tI2RlZmluZSBMU1RSQlx0XHQweDAwOFxuKyNkZWZpbmUgUkVMQVhcdFx0MHgwRjNcbisjZGVmaW5lIExTVFJCXHRcdDB4MEY4XG4gXG4tI2RlZmluZSBDQV9NQVNLXHRcdDB4MDc3XG4rI2RlZmluZSBDQV9NQVNLXHRcdDB4MEY3XG4rI2RlZmluZSBTRUxfTUFTS1x0MHgxMDBcbiBcbiAvKiBTZWxlY3QgdmFsdWVzIGZvciBzd2ltX3NlbGVjdCBhbmQgc3dpbV9yZWFkYml0ICovXG4gXG4tI2RlZmluZSBSRUFEX0RBVEFfMFx0MHgwNzRcbi0jZGVmaW5lIE9ORU1FR19EUklWRVx0MHgwNzVcbi0jZGVmaW5lIFNJTkdMRV9TSURFRFx0MHgwNzZcbi0jZGVmaW5lIERSSVZFX1BSRVNFTlRcdDB4MDc3XG4tI2RlZmluZSBESVNLX0lOXHRcdDB4MTcwXG4tI2RlZmluZSBXUklURV9QUk9UXHQweDE3MVxuLSNkZWZpbmUgVFJBQ0tfWkVST1x0MHgxNzJcbi0jZGVmaW5lIFRBQ0hPXHRcdDB4MTczXG4tI2RlZmluZSBSRUFEX0RBVEFfMVx0MHgxNzRcbi0jZGVmaW5lIEdDUl9NT0RFXHQweDE3NVxuLSNkZWZpbmUgU0VFS19DT01QTEVURVx0MHgxNzZcbi0jZGVmaW5lIFRXT01FR19NRURJQVx0MHgxNzdcbisjZGVmaW5lIFNURVBQSU5HXHQweDBGMVxuKyNkZWZpbmUgUkVBRF9EQVRBXzBcdDB4MEY0XG4rI2RlZmluZSBPTkVNRUdfRFJJVkVcdDB4MEY1XG4rI2RlZmluZSBTSU5HTEVfU0lERURcdDB4MEY2XG4rI2RlZmluZSBEUklWRV9QUkVTRU5UXHQweDBGN1xuKyNkZWZpbmUgRElTS19JTlx0XHQweDFGMFxuKyNkZWZpbmUgV1JJVEVfUFJPVFx0MHgxRjFcbisjZGVmaW5lIFRSQUNLX1pFUk9cdDB4MUYyXG4rI2RlZmluZSBUQUNIT1x0XHQweDFGM1xuKyNkZWZpbmUgUkVBRF9EQVRBXzFcdDB4MUY0XG4rI2RlZmluZSBHQ1JfTU9ERVx0MHgxRjVcbisjZGVmaW5lIFJFQURZXHRcdDB4MUY2XG4rI2RlZmluZSBUV09NRUdfTUVESUFcdDB4MUY3XG4gXG4gLyogQml0cyBpbiBoYW5kc2hha2UgcmVnaXN0ZXIgKi9cbiBcbi0jZGVmaW5lIE1BUktfQllURVx0MHgwMVxuLSNkZWZpbmUgQ1JDX1pFUk9cdDB4MDJcbi0jZGVmaW5lIFJEREFUQVx0XHQweDA0XG4gI2RlZmluZSBTRU5TRVx0XHQweDA4XG4tI2RlZmluZSBNT1RFTlx0XHQweDEwXG4tI2RlZmluZSBFUlJPUlx0XHQweDIwXG4gI2RlZmluZSBEQVQyQllURVx0MHg0MFxuICNkZWZpbmUgREFUMUJZVEVcdDB4ODBcbiBcbiAvKiBiaXRzIGluIHNldHVwIHJlZ2lzdGVyICovXG4gXG4tI2RlZmluZSBTX0lOVl9XREFUQVx0MHgwMVxuLSNkZWZpbmUgU18zXzVfU0VMRUNUXHQweDAyXG4tI2RlZmluZSBTX0dDUlx0XHQweDA0XG4gI2RlZmluZSBTX0ZDTEtfRElWMlx0MHgwOFxuLSNkZWZpbmUgU19FUlJPUl9DT1JSXHQweDEwXG4gI2RlZmluZSBTX0lCTV9EUklWRVx0MHgyMFxuLSNkZWZpbmUgU19HQ1JfV1JJVEVcdDB4NDBcbi0jZGVmaW5lIFNfVElNRU9VVFx0MHg4MFxuIFxuIC8qIGJpdHMgaW4gbW9kZSByZWdpc3RlciAqL1xuIFxuQEAgLTE0OCwxNCArMTQ4LDEzIEBAIHN0cnVjdCBpd20ge1xuICNkZWZpbmUgRU5CTDJcdFx0MHgwNFxuICNkZWZpbmUgQUNUSU9OXHRcdDB4MDhcbiAjZGVmaW5lIFdSSVRFX01PREVcdDB4MTBcbi0jZGVmaW5lIEhFRFNFTFx0XHQweDIwXG4rI2RlZmluZSBJU01fU0VMRUNUXHQweDQwXG4gI2RlZmluZSBNT1RPTlx0XHQweDgwXG4gXG4tLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi1cbiBlbnVtIGRyaXZlX2xvY2F0aW9uIHtcbi1cdElOVEVSTkFMX0RSSVZFID0gMHgwMixcbi1cdEVYVEVSTkFMX0RSSVZFID0gMHgwNCxcbitcdE5PX0RSSVZFID0gMCxcbitcdElOVEVSTkFMX0RSSVZFID0gQklUKDEpLFxuK1x0RVhURVJOQUxfRFJJVkUgPSBCSVQoMiksXG4gfTtcbiBcbiBlbnVtIG1lZGlhX3R5cGUge1xuQEAgLTE2OCwyMyArMTY3LDIzIEBAIHN0cnVjdCBmbG9wcHlfc3RhdGUge1xuIFx0LyogcGh5c2ljYWwgcHJvcGVydGllcyAqL1xuIFxuIFx0ZW51bSBkcml2ZV9sb2NhdGlvbiBsb2NhdGlvbjtcdC8qIGludGVybmFsIG9yIGV4dGVybmFsIGRyaXZlICovXG4tXHRpbnRcdFx0IGhlYWRfbnVtYmVyO1x0Lyogc2luZ2xlLSBvciBkb3VibGUtc2lkZWQgZHJpdmUgKi9cbitcdGludCBoZWFkX251bWJlcjtcdFx0Lyogc2luZ2xlLSBvciBkb3VibGUtc2lkZWQgZHJpdmUgKi9cbiBcbiBcdC8qIG1lZGlhICovXG4gXG4tXHRpbnRcdFx0IGRpc2tfaW47XG4tXHRpbnRcdFx0IGVqZWN0ZWQ7XG4tXHRlbnVtIG1lZGlhX3R5cGVcdCB0eXBlO1xuLVx0aW50XHRcdCB3cml0ZV9wcm90ZWN0ZWQ7XG4rXHRpbnQgZGlza19pbjtcbitcdGludCBlamVjdGVkO1xuK1x0ZW51bSBtZWRpYV90eXBlIHR5cGU7XG4rXHRpbnQgd3JpdGVfcHJvdGVjdGVkO1xuIFxuLVx0aW50XHRcdCB0b3RhbF9zZWNzO1xuLVx0aW50XHRcdCBzZWNwZXJjeWw7XG4tXHRpbnRcdFx0IHNlY3BlcnRyYWNrO1xuK1x0dW5zaWduZWQgaW50IHRvdGFsX3NlY3M7XG4rXHR1bnNpZ25lZCBpbnQgc2VjcGVyY3lsO1xuK1x0dW5zaWduZWQgaW50IHNlY3BlcnRyYWNrO1xuIFxuIFx0LyogaW4tdXNlIGluZm9ybWF0aW9uICovXG4gXG4tXHRpbnRcdFx0dHJhY2s7XG4tXHRpbnRcdFx0cmVmX2NvdW50O1xuK1x0aW50IHRyYWNrO1xuK1x0aW50IHJlZl9jb3VudDtcbiBcdGJvb2wgcmVnaXN0ZXJlZDtcbiBcbiBcdHN0cnVjdCBnZW5kaXNrICpkaXNrO1xuQEAgLTIwOSw3ICsyMDgsNiBAQCBlbnVtIGhlYWQge1xuIFxuIHN0cnVjdCBzd2ltX3ByaXYge1xuIFx0c3RydWN0IHN3aW0gX19pb21lbSAqYmFzZTtcbi1cdHNwaW5sb2NrX3QgbG9jaztcbiBcdGludCBmbG9wcHlfY291bnQ7XG4gXHRzdHJ1Y3QgZmxvcHB5X3N0YXRlIHVuaXRbRkRfTUFYX1VOSVRdO1xuIH07XG5AQCAtMjIwLDIwICsyMTgsMjQgQEAgZXh0ZXJuIGludCBzd2ltX3JlYWRfc2VjdG9yX2RhdGEoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSxcbiBcdFx0XHRcdCB1bnNpZ25lZCBjaGFyICpkYXRhKTtcbiBcbiBzdGF0aWMgREVGSU5FX01VVEVYKHN3aW1fbXV0ZXgpO1xuLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc3dpbV9tb2RlKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBlbmFibGUpXG4rXG4rc3RhdGljIHZvaWQgc2V0X3N3aW1fbW9kZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgZW5hYmxlKVxuIHtcbi1cdHN0cnVjdCBpd20gX19pb21lbSAqaXdtX2Jhc2U7XG4rXHRzdHJ1Y3QgaXdtIF9faW9tZW0gKml3bV9iYXNlID0gKHN0cnVjdCBpd20gX19pb21lbSAqKWJhc2U7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0aWYgKCFlbmFibGUpIHtcbi1cdFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgMHhmOCk7XG4rXHRcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIEFDVElPTik7XG4rXHRcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIEVOQkwxIHwgRU5CTDIgfCBNT1RPTik7XG4rXHRcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIElTTV9TRUxFQ1QpO1xuK1x0XHRpd21fcmVhZChpd21fYmFzZSwgcTdMKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0aXdtX2Jhc2UgPSAoc3RydWN0IGl3bSBfX2lvbWVtICopYmFzZTtcbiBcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiBcbiBcdGl3bV9yZWFkKGl3bV9iYXNlLCBxN0wpO1xuK1x0aXdtX3JlYWQoaXdtX2Jhc2UsIHE2TCk7XG4gXHRpd21fcmVhZChpd21fYmFzZSwgbXRyT2ZmKTtcbiBcdGl3bV9yZWFkKGl3bV9iYXNlLCBxNkgpO1xuIFxuQEAgLTI0NSw3ICsyNDcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3N3aW1fbW9kZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgZW5hYmxlKVxuIFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBnZXRfc3dpbV9tb2RlKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpXG4rc3RhdGljIGludCBnZXRfc3dpbV9tb2RlKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbkBAIC0yNzEsNyArMjczLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHN3aW1fc2VsZWN0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBzZWwpXG4ge1xuIFx0c3dpbV93cml0ZShiYXNlLCBwaGFzZSwgUkVMQVgpO1xuIFxuLVx0dmlhMV9zZXRfaGVhZChzZWwgXHUwMDI2IDB4MTAwKTtcbitcdHZpYTFfc2V0X2hlYWQoc2VsIFx1MDAyNiBTRUxfTUFTSyk7XG4gXG4gXHRzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCBzZWwgXHUwMDI2IENBX01BU0spO1xuIH1cbkBAIC0yODQsMTUgKzI4NiwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9hY3Rpb24oc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IGFjdGlvbilcbiBcbiBcdHN3aW1fc2VsZWN0KGJhc2UsIGFjdGlvbik7XG4gXHR1ZGVsYXkoMSk7XG4tXHRzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCAoTFNUUkJcdTAwM2NcdTAwM2M0KSB8IExTVFJCKTtcbi1cdHVkZWxheSgxKTtcbi1cdHN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIChMU1RSQlx1MDAzY1x1MDAzYzQpIHwgKCh+TFNUUkIpIFx1MDAyNiAweDBGKSk7XG4rXHRzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCBhY3Rpb24gfCBMU1RSQik7XG4rXHR1ZGVsYXkoMik7XG4rXHRzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCBhY3Rpb24pO1xuIFx0dWRlbGF5KDEpO1xuIFxuIFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzd2ltX3JlYWRiaXQoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IGJpdClcbitzdGF0aWMgaW5saW5lIGJvb2wgc3dpbV9yZWFkYml0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBiaXQpXG4ge1xuIFx0aW50IHN0YXQ7XG4gXG5AQCAtMzA1LDEyNSArMzA3LDExOSBAQCBzdGF0aWMgaW5saW5lIGludCBzd2ltX3JlYWRiaXQoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IGJpdClcbiBcdHJldHVybiAoc3RhdCBcdTAwMjYgU0VOU0UpID09IDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX2RyaXZlKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsXG4rI2RlZmluZSBzd2ltX3JlYWRiaXRfdGltZW91dChiYXNlLCBiaXQsIHZhbCwgdGltZW91dF91cykgXFxcbitcdHBvbGxfdGltZW91dF91cygsIHN3aW1fcmVhZGJpdChiYXNlLCBiaXQpID09IHZhbCwgMTAwMCwgdGltZW91dF91cywgZmFsc2UpXG4rXG4rI2RlZmluZSBzd2ltX3JlYWRiaXRfdGltZW91dF9hdG9taWMoYmFzZSwgYml0LCB2YWwsIHRpbWVvdXRfdXMpIFxcXG4rXHRwb2xsX3RpbWVvdXRfdXNfYXRvbWljKCwgc3dpbV9yZWFkYml0KGJhc2UsIGJpdCkgPT0gdmFsLCAxLCB0aW1lb3V0X3VzLCBmYWxzZSlcbitcbisjZGVmaW5lIHN3aW1fUkVBRFlfdGltZW91dChiYXNlKSBcXFxuKyh7IFxcXG4rXHRpbnQgcmV0ID0gc3dpbV9yZWFkYml0X3RpbWVvdXQoYmFzZSwgUkVBRFksIHRydWUsIDEwMDAgKiAxMDAwKTsgXFxcbitcdGlmIChyZXQpIFxcXG4rXHRcdHByaW50ayhLRVJOX0RFQlVHIFwiJXM6IGRyaXZlIG5vdCByZWFkeVxcblwiLCBfX2Z1bmNfXyk7IFxcXG4rXHRyZXQ7IFxcXG4rfSlcbitcbitzdGF0aWMgdm9pZCBzd2ltX2RyaXZlKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsXG4gXHRcdFx0ICAgICAgZW51bSBkcml2ZV9sb2NhdGlvbiBsb2NhdGlvbilcbiB7XG4gXHRpZiAobG9jYXRpb24gPT0gSU5URVJOQUxfRFJJVkUpIHtcbiBcdFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgRVhURVJOQUxfRFJJVkUpOyAvKiBjbGVhciBkcml2ZSAxIGJpdCAqL1xuIFx0XHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUxLCBJTlRFUk5BTF9EUklWRSk7IC8qIHNldCBkcml2ZSAwIGJpdCAqL1xuK1x0XHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUxLCBNT1RPTik7XG4gXHR9IGVsc2UgaWYgKGxvY2F0aW9uID09IEVYVEVSTkFMX0RSSVZFKSB7XG4gXHRcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIElOVEVSTkFMX0RSSVZFKTsgLyogY2xlYXIgZHJpdmUgMCBiaXQgKi9cbiBcdFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMSwgRVhURVJOQUxfRFJJVkUpOyAvKiBzZXQgZHJpdmUgMSBiaXQgKi9cbitcdFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMSwgTU9UT04pO1xuK1x0fSBlbHNlIHtcbitcdFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgSU5URVJOQUxfRFJJVkUpO1xuK1x0XHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBFWFRFUk5BTF9EUklWRSk7XG4rXHRcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIE1PVE9OKTtcbiBcdH1cbitcdHVkZWxheSgxKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHN3aW1fbW90b3Ioc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSxcbi1cdFx0XHQgICAgICBlbnVtIG1vdG9yX2FjdGlvbiBhY3Rpb24pXG4rc3RhdGljIHZvaWQgc3dpbV9tb3RvcihzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLFxuK1x0XHQgICAgICAgZW51bSBtb3Rvcl9hY3Rpb24gYWN0aW9uKVxuIHtcbiBcdGlmIChhY3Rpb24gPT0gT04pIHtcbi1cdFx0aW50IGk7XG4tXG4gXHRcdHN3aW1fYWN0aW9uKGJhc2UsIE1PVE9SX09OKTtcbi1cbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgMipIWjsgaSsrKSB7XG4tXHRcdFx0c3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpO1xuLVx0XHRcdGlmIChzd2ltX3JlYWRiaXQoYmFzZSwgTU9UT1JfT04pKVxuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcbi1cdFx0XHRzY2hlZHVsZV90aW1lb3V0KDEpO1xuLVx0XHR9XG4rXHRcdHN3aW1fcmVhZGJpdF90aW1lb3V0KGJhc2UsIE1PVE9SX09OLCB0cnVlLCAyMDAwICogMTAwMCk7XG4gXHR9IGVsc2UgaWYgKGFjdGlvbiA9PSBPRkYpIHtcbiBcdFx0c3dpbV9hY3Rpb24oYmFzZSwgTU9UT1JfT0ZGKTtcbi1cdFx0c3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpO1xuK1x0XHRzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCBSRUxBWCk7XG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX2VqZWN0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpXG4rc3RhdGljIHZvaWQgc3dpbV9lamVjdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKVxuIHtcbi1cdGludCBpO1xuLVxuIFx0c3dpbV9hY3Rpb24oYmFzZSwgRUpFQ1QpO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgMipIWjsgaSsrKSB7XG4tXHRcdHN3aW1fc2VsZWN0KGJhc2UsIFJFTEFYKTtcbi1cdFx0aWYgKCFzd2ltX3JlYWRiaXQoYmFzZSwgRElTS19JTikpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XG4tXHRcdHNjaGVkdWxlX3RpbWVvdXQoMSk7XG4tXHR9XG4tXHRzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7XG4rXHRzd2ltX3JlYWRiaXRfdGltZW91dChiYXNlLCBESVNLX0lOLCBmYWxzZSwgMjAwMCAqIDEwMDApO1xuK1x0bXNsZWVwKDEpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9oZWFkKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGVudW0gaGVhZCBoZWFkKVxuIHtcbi1cdC8qIHdhaXQgZHJpdmUgaXMgcmVhZHkgKi9cbi1cbiBcdGlmIChoZWFkID09IFVQUEVSX0hFQUQpXG4gXHRcdHN3aW1fc2VsZWN0KGJhc2UsIFJFQURfREFUQV8xKTtcbiBcdGVsc2UgaWYgKGhlYWQgPT0gTE9XRVJfSEVBRClcbiBcdFx0c3dpbV9zZWxlY3QoYmFzZSwgUkVBRF9EQVRBXzApO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzd2ltX3N0ZXAoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSlcbitzdGF0aWMgaW50IHN3aW1fc3RlcChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKVxuIHtcbi1cdGludCB3YWl0O1xuLVxuIFx0c3dpbV9hY3Rpb24oYmFzZSwgU1RFUCk7XG4tXG4tXHRmb3IgKHdhaXQgPSAwOyB3YWl0IFx1MDAzYyBIWjsgd2FpdCsrKSB7XG4tXG4tXHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XG4tXHRcdHNjaGVkdWxlX3RpbWVvdXQoMSk7XG4tXG4tXHRcdHN3aW1fc2VsZWN0KGJhc2UsIFJFTEFYKTtcbi1cdFx0aWYgKCFzd2ltX3JlYWRiaXQoYmFzZSwgU1RFUCkpXG4tXHRcdFx0cmV0dXJuIDA7XG4tXHR9XG4tXHRyZXR1cm4gLTE7XG4rXHR1ZGVsYXkoMTUwKTtcbitcdHJldHVybiBzd2ltX3JlYWRiaXRfdGltZW91dF9hdG9taWMoYmFzZSwgU1RFUFBJTkcsIGZhbHNlLCAyMCAqIDEwMDApO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzd2ltX3RyYWNrMDAoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSlcbitzdGF0aWMgaW50IHN3aW1fdHJhY2swMChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKVxuIHtcbiBcdGludCB0cnk7XG4gXG4gXHRzd2ltX2FjdGlvbihiYXNlLCBTRUVLX05FR0FUSVZFKTtcbiBcbiBcdGZvciAodHJ5ID0gMDsgdHJ5IFx1MDAzYyAxMDA7IHRyeSsrKSB7XG4rXHRcdG1zbGVlcCgzKTtcbiBcbi1cdFx0c3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpO1xuIFx0XHRpZiAoc3dpbV9yZWFkYml0KGJhc2UsIFRSQUNLX1pFUk8pKVxuLVx0XHRcdGJyZWFrO1xuK1x0XHRcdHJldHVybiAwO1xuIFxuIFx0XHRpZiAoc3dpbV9zdGVwKGJhc2UpKVxuLVx0XHRcdHJldHVybiAtMTtcbitcdFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdGlmIChzd2ltX3JlYWRiaXQoYmFzZSwgVFJBQ0tfWkVSTykpXG4tXHRcdHJldHVybiAwO1xuLVxuK1x0cHJfZXJyKFwic3dpbTogdHJhY2sgemVybyByZWNhbGlicmF0aW9uIGZhaWxlZFxcblwiKTtcbiBcdHJldHVybiAtMTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc3dpbV9zZWVrKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBzdGVwKVxuK3N0YXRpYyBpbnQgc3dpbV9zZWVrKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBzdGVwKVxuIHtcbi1cdGlmIChzdGVwID09IDApXG4tXHRcdHJldHVybiAwO1xuLVxuIFx0aWYgKHN0ZXAgXHUwMDNjIDApIHtcbiBcdFx0c3dpbV9hY3Rpb24oYmFzZSwgU0VFS19ORUdBVElWRSk7XG4gXHRcdHN0ZXAgPSAtc3RlcDtcbi1cdH0gZWxzZVxuK1x0fSBlbHNlIGlmIChzdGVwIFx1MDAzZSAwKVxuIFx0XHRzd2ltX2FjdGlvbihiYXNlLCBTRUVLX1BPU0lUSVZFKTtcbitcdHVkZWxheSgxKTtcbitcbitcdHN3aW1fUkVBRFlfdGltZW91dChiYXNlKTtcbitcbitcdGlmIChzdGVwID09IDApXG4rXHRcdHJldHVybiAwO1xuIFxuLVx0Zm9yICggOyBzdGVwIFx1MDAzZSAwOyBzdGVwLS0pIHtcbitcdGZvciAoOyBzdGVwIFx1MDAzZSAwOyBzdGVwLS0pIHtcbiBcdFx0aWYgKHN3aW1fc3RlcChiYXNlKSlcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG4rXHRtc2xlZXAoMzApO1xuK1x0c3dpbV9SRUFEWV90aW1lb3V0KGJhc2UpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHN3aW1fdHJhY2soc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsICBpbnQgdHJhY2spXG4rc3RhdGljIGludCBzd2ltX3RyYWNrKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzLCBpbnQgdHJhY2spXG4ge1xuIFx0c3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLVx1MDAzZXN3ZC1cdTAwM2ViYXNlO1xuIFx0aW50IHJldDtcbkBAIC00NDUsOCArNDQxLDEwIEBAIHN0YXRpYyBpbnQgZmxvcHB5X2VqZWN0KHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzKVxuIFx0c3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLVx1MDAzZXN3ZC1cdTAwM2ViYXNlO1xuIFxuIFx0c3dpbV9kcml2ZShiYXNlLCBmcy1cdTAwM2Vsb2NhdGlvbik7XG4rXHRzd2ltX3RyYWNrKGZzLCAxKTtcbiBcdHN3aW1fbW90b3IoYmFzZSwgT0ZGKTtcbiBcdHN3aW1fZWplY3QoYmFzZSk7XG4rXHRzd2ltX2RyaXZlKGJhc2UsIE5PX0RSSVZFKTtcbiBcbiBcdGZzLVx1MDAzZWRpc2tfaW4gPSAwO1xuIFx0ZnMtXHUwMDNlZWplY3RlZCA9IDE7XG5AQCAtNDU0LDcwICs0NTIsODEgQEAgc3RhdGljIGludCBmbG9wcHlfZWplY3Qoc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc3dpbV9yZWFkX3NlY3RvcihzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyxcbi1cdFx0XHRcdCAgIGludCBzaWRlLCBpbnQgdHJhY2ssXG4tXHRcdFx0XHQgICBpbnQgc2VjdG9yLCB1bnNpZ25lZCBjaGFyICpidWZmZXIpXG4rc3RhdGljIHVuc2lnbmVkIGludCBzd2ltX3JlYWRfc2VjdG9yX3JhbmdlKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzLFxuK1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgc2lkZSwgdW5zaWduZWQgaW50IHRyYWNrLFxuK1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBjb3VudCxcbitcdFx0XHRcdFx0dW5zaWduZWQgY2hhciAqYnVmZmVyKVxuIHtcbiBcdHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy1cdTAwM2Vzd2QtXHUwMDNlYmFzZTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRzdHJ1Y3Qgc2VjdG9yX2hlYWRlciBoZWFkZXI7XG4tXHRpbnQgcmV0ID0gLTE7XG4tXHRzaG9ydCBpO1xuLVxuLVx0c3dpbV90cmFjayhmcywgdHJhY2spO1xuK1x0aW50IGksIGJpdHMgPSAwO1xuIFxuLVx0c3dpbV93cml0ZShiYXNlLCBtb2RlMSwgTU9UT04pO1xuLVx0c3dpbV9oZWFkKGJhc2UsIHNpZGUpO1xuLVx0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgc2lkZSk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxODsgaSsrKSB7IC8qIEEgdHJhY2sgaGFzIGF0IG1vc3QgMTggc2VjdG9ycyAqL1xuK1x0XHRpZiAoaSBcdTAwM2U9IGNvdW50KVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRiaXRzIHw9IEJJVChpKTtcbitcdH1cbiBcbiBcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDM2OyBpKyspIHtcbi1cdFx0cmV0ID0gc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXIoYmFzZSwgXHUwMDI2aGVhZGVyKTtcbi1cdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IChoZWFkZXIuc2VjdG9yID09IHNlY3RvcikpIHtcbi1cdFx0XHQvKiBmb3VuZCAqL1xuLVxuLVx0XHRcdHJldCA9IHN3aW1fcmVhZF9zZWN0b3JfZGF0YShiYXNlLCBidWZmZXIpO1xuK1x0XHRpZiAoYml0cyA9PSAwKSAvKiBBbGwgY291bnQgc2VjdG9ycyB3ZXJlIHJlYWQgb2sgKi9cbiBcdFx0XHRicmVhaztcbitcbitcdFx0aWYgKHN3aW1fcmVhZF9zZWN0b3JfaGVhZGVyKGJhc2UsIFx1MDAyNmhlYWRlcikgfHxcbitcdFx0ICAgIHN3aW1fcmVhZChiYXNlLCBlcnJvcikgfHwgaGVhZGVyLnRyYWNrICE9IHRyYWNrIHx8XG4rXHRcdCAgICBoZWFkZXIuc2lkZSAhPSBzaWRlIHx8IGhlYWRlci5zaXplICE9IDIpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlmIChoZWFkZXIuc2VjdG9yIFx1MDAzZT0gc3RhcnQgXHUwMDI2XHUwMDI2IGhlYWRlci5zZWN0b3IgXHUwMDNjIHN0YXJ0ICsgY291bnQpIHtcbitcdFx0XHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gaGVhZGVyLnNlY3RvciAtIHN0YXJ0O1xuK1x0XHRcdGludCByZXQ7XG4rXG4rXHRcdFx0aWYgKChiaXRzIFx1MDAyNiBCSVQob2Zmc2V0KSkgPT0gMClcbitcdFx0XHRcdGNvbnRpbnVlOyAvKiBUaGlzIHNlY3RvciB3YXMgYWxyZWFkeSByZWFkIG9rICovXG4rXG4rXHRcdFx0cmV0ID0gc3dpbV9yZWFkX3NlY3Rvcl9kYXRhKGJhc2UsIGJ1ZmZlciArIDUxMiAqIG9mZnNldCk7XG4rXHRcdFx0aWYgKHJldCA9PSA1MTIgXHUwMDI2XHUwMDI2IHN3aW1fcmVhZChiYXNlLCBlcnJvcikgPT0gMClcbitcdFx0XHRcdGJpdHMgXHUwMDI2PSB+QklUKG9mZnNldCk7XG4gXHRcdH1cbiBcdH1cbiBcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiBcbi1cdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIE1PVE9OKTtcbi1cbi1cdGlmICgoaGVhZGVyLnNpZGUgIT0gc2lkZSkgIHx8IChoZWFkZXIudHJhY2sgIT0gdHJhY2spIHx8XG4tXHQgICAgIChoZWFkZXIuc2VjdG9yICE9IHNlY3RvcikpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHJldDtcbitcdHJldHVybiBiaXRzID8gZmZzKGJpdHMpIC0gMSA6IGNvdW50OyAvKiBOby4gb2YgY29udGlndW91cyBvayBzZWN0b3JzICovXG4gfVxuIFxuIHN0YXRpYyBibGtfc3RhdHVzX3QgZmxvcHB5X3JlYWRfc2VjdG9ycyhzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyxcbi1cdFx0XHQgICAgICAgaW50IHJlcV9zZWN0b3IsIGludCBzZWN0b3JzX25iLFxuLVx0XHRcdCAgICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIpXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGludCByZXFfc2VjdG9yLFxuK1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgc2VjdG9yc19uYixcbitcdFx0XHRcdFx0dW5zaWduZWQgY2hhciAqYnVmZmVyKVxuIHtcbiBcdHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy1cdTAwM2Vzd2QtXHUwMDNlYmFzZTtcbi1cdGludCByZXQ7XG4tXHRpbnQgc2lkZSwgdHJhY2ssIHNlY3Rvcjtcbi1cdGludCBpLCB0cnk7XG4tXG4rXHR1bnNpZ25lZCBpbnQgZmFpbHVyZXMgPSAwO1xuIFxuIFx0c3dpbV9kcml2ZShiYXNlLCBmcy1cdTAwM2Vsb2NhdGlvbik7XG4tXHRmb3IgKGkgPSByZXFfc2VjdG9yOyBpIFx1MDAzYyByZXFfc2VjdG9yICsgc2VjdG9yc19uYjsgaSsrKSB7XG4tXHRcdGludCB4O1xuLVx0XHR0cmFjayA9IGkgLyBmcy1cdTAwM2VzZWNwZXJjeWw7XG4tXHRcdHggPSBpICUgZnMtXHUwMDNlc2VjcGVyY3lsO1xuLVx0XHRzaWRlID0geCAvIGZzLVx1MDAzZXNlY3BlcnRyYWNrO1xuLVx0XHRzZWN0b3IgPSB4ICUgZnMtXHUwMDNlc2VjcGVydHJhY2sgKyAxO1xuLVxuLVx0XHR0cnkgPSA1O1xuLVx0XHRkbyB7XG4tXHRcdFx0cmV0ID0gc3dpbV9yZWFkX3NlY3Rvcihmcywgc2lkZSwgdHJhY2ssIHNlY3Rvcixcbi1cdFx0XHRcdFx0XHRidWZmZXIpO1xuLVx0XHRcdGlmICh0cnktLSA9PSAwKVxuLVx0XHRcdFx0cmV0dXJuIEJMS19TVFNfSU9FUlI7XG4tXHRcdH0gd2hpbGUgKHJldCAhPSA1MTIpO1xuLVxuLVx0XHRidWZmZXIgKz0gcmV0O1xuK1x0c3dpbV9SRUFEWV90aW1lb3V0KGJhc2UpO1xuK1xuK1x0d2hpbGUgKHNlY3RvcnNfbmIpIHtcbitcdFx0dW5zaWduZWQgaW50IGN5bCwgeCwgaGVhZCwgc2VjdG9yLCBuLCByZXQ7XG4rXG4rXHRcdGN5bCA9IHJlcV9zZWN0b3IgLyBmcy1cdTAwM2VzZWNwZXJjeWw7XG4rXHRcdHggPSByZXFfc2VjdG9yICUgZnMtXHUwMDNlc2VjcGVyY3lsO1xuK1x0XHRoZWFkID0gKHggXHUwMDNlPSBmcy1cdTAwM2VzZWNwZXJ0cmFjaykgPyAxIDogMDtcbitcdFx0c2VjdG9yID0geCAlIGZzLVx1MDAzZXNlY3BlcnRyYWNrO1xuK1x0XHRuID0gbWluKHNlY3RvcnNfbmIsIGZzLVx1MDAzZXNlY3BlcnRyYWNrIC0gc2VjdG9yKTtcbitcbitcdFx0c3dpbV90cmFjayhmcywgY3lsKTtcbitcdFx0c3dpbV9oZWFkKGJhc2UsIGhlYWQpO1xuK1xuK1x0XHRyZXQgPSBzd2ltX3JlYWRfc2VjdG9yX3JhbmdlKGZzLCBoZWFkLCBjeWwsIHNlY3RvciArIDEsIG4sIGJ1ZmZlcik7XG4rXHRcdGlmIChyZXQgIT0gbilcbitcdFx0XHQrK2ZhaWx1cmVzO1xuK1x0XHRpZiAoZmFpbHVyZXMgXHUwMDNlPSA1KVxuK1x0XHRcdHJldHVybiBCTEtfU1RTX0lPRVJSO1xuK1xuK1x0XHRidWZmZXIgKz0gNTEyICogcmV0O1xuK1x0XHRzZWN0b3JzX25iIC09IHJldDtcbitcdFx0cmVxX3NlY3RvciArPSByZXQ7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC01MjcsMTIgKzUzNiwxMCBAQCBzdGF0aWMgYmxrX3N0YXR1c190IHN3aW1fcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBibGtfbXFfcXVldWVfZGF0YSAqYmQpXG4ge1xuIFx0c3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSBoY3R4LVx1MDAzZXF1ZXVlLVx1MDAzZXF1ZXVlZGF0YTtcbi1cdHN0cnVjdCBzd2ltX3ByaXYgKnN3ZCA9IGZzLVx1MDAzZXN3ZDtcbiBcdHN0cnVjdCByZXF1ZXN0ICpyZXEgPSBiZC1cdTAwM2VycTtcbiBcdGJsa19zdGF0dXNfdCBlcnI7XG4gXG4tXHRpZiAoIXNwaW5fdHJ5bG9ja19pcnEoXHUwMDI2c3dkLVx1MDAzZWxvY2spKVxuLVx0XHRyZXR1cm4gQkxLX1NUU19ERVZfUkVTT1VSQ0U7XG4rXHRtdXRleF9sb2NrKFx1MDAyNnN3aW1fbXV0ZXgpO1xuIFxuIFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcbiBcbkBAIC01NTAsMTYgKzU1NywxNiBAQCBzdGF0aWMgYmxrX3N0YXR1c190IHN3aW1fcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4gXG4gXHRlcnIgPSBCTEtfU1RTX09LO1xuIG91dDpcbi1cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZzd2QtXHUwMDNlbG9jayk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2c3dpbV9tdXRleCk7XG4gXHRyZXR1cm4gZXJyO1xuIFxuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGZsb3BweV9zdHJ1Y3QgZmxvcHB5X3R5cGVbNF0gPSB7XG4tXHR7ICAgIDAsICAwLCAwLCAgMCwgMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgTlVMTCB9LCAvKiBubyB0ZXN0aW5nICAgKi9cbitcdHsgICAgMCwgIDAsIDAsICAwLCAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCBOVUxMIH0sIC8qIG5vIHRlc3RpbmcgKi9cbiBcdHsgIDcyMCwgIDksIDEsIDgwLCAwLCAweDJBLCAweDAyLCAweERGLCAweDUwLCBOVUxMIH0sIC8qIDM2MEtCIFNTIDMuNVwiKi9cbi1cdHsgMTQ0MCwgIDksIDIsIDgwLCAwLCAweDJBLCAweDAyLCAweERGLCAweDUwLCBOVUxMIH0sIC8qIDcyMEtCIDMuNVwiICAgKi9cbi1cdHsgMjg4MCwgMTgsIDIsIDgwLCAwLCAweDFCLCAweDAwLCAweENGLCAweDZDLCBOVUxMIH0sIC8qIDEuNDRNQiAzLjVcIiAgKi9cbitcdHsgMTQ0MCwgIDksIDIsIDgwLCAwLCAweDJBLCAweDAyLCAweERGLCAweDUwLCBOVUxMIH0sIC8qIDcyMEtCIDMuNVwiICovXG4rXHR7IDI4ODAsIDE4LCAyLCA4MCwgMCwgMHgxQiwgMHgwMCwgMHhDRiwgMHg2QywgTlVMTCB9LCAvKiAxLjQ0TUIgMy41XCIgKi9cbiB9O1xuIFxuIHN0YXRpYyBpbnQgZ2V0X2Zsb3BweV9nZW9tZXRyeShzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcywgaW50IHR5cGUsXG5AQCAtNTg2LDIzICs1OTMsMTYgQEAgc3RhdGljIHZvaWQgc2V0dXBfbWVkaXVtKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzKVxuIFxuIFx0aWYgKHN3aW1fcmVhZGJpdChiYXNlLCBESVNLX0lOKSkge1xuIFx0XHRzdHJ1Y3QgZmxvcHB5X3N0cnVjdCAqZztcbitcbiBcdFx0ZnMtXHUwMDNlZGlza19pbiA9IDE7XG4gXHRcdGZzLVx1MDAzZXdyaXRlX3Byb3RlY3RlZCA9IHN3aW1fcmVhZGJpdChiYXNlLCBXUklURV9QUk9UKTtcbi1cbi1cdFx0aWYgKHN3aW1fdHJhY2swMChiYXNlKSlcbi1cdFx0XHRwcmludGsoS0VSTl9FUlJcbi1cdFx0XHRcdFwiU1dJTTogY2Fubm90IG1vdmUgZmxvcHB5IGhlYWQgdG8gdHJhY2sgMFxcblwiKTtcbi1cbi1cdFx0c3dpbV90cmFjazAwKGJhc2UpO1xuLVxuIFx0XHRmcy1cdTAwM2V0eXBlID0gc3dpbV9yZWFkYml0KGJhc2UsIFRXT01FR19NRURJQSkgP1xuLVx0XHRcdEhEX01FRElBIDogRERfTUVESUE7XG4rXHRcdFx0ICAgSERfTUVESUEgOiBERF9NRURJQTtcbiBcdFx0ZnMtXHUwMDNlaGVhZF9udW1iZXIgPSBzd2ltX3JlYWRiaXQoYmFzZSwgU0lOR0xFX1NJREVEKSA/IDEgOiAyO1xuIFx0XHRnZXRfZmxvcHB5X2dlb21ldHJ5KGZzLCAwLCBcdTAwMjZnKTtcbiBcdFx0ZnMtXHUwMDNldG90YWxfc2VjcyA9IGctXHUwMDNlc2l6ZTtcbiBcdFx0ZnMtXHUwMDNlc2VjcGVyY3lsID0gZy1cdTAwM2VoZWFkICogZy1cdTAwM2VzZWN0O1xuIFx0XHRmcy1cdTAwM2VzZWNwZXJ0cmFjayA9IGctXHUwMDNlc2VjdDtcbi1cdFx0ZnMtXHUwMDNldHJhY2sgPSAwO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZnMtXHUwMDNlZGlza19pbiA9IDA7XG4gXHR9XG5AQCAtNjIwLDExICs2MjAsOSBAQCBzdGF0aWMgaW50IGZsb3BweV9vcGVuKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpXG4gXHRcdGZzLVx1MDAzZXJlZl9jb3VudCA9IC0xO1xuIFx0ZWxzZVxuIFx0XHRmcy1cdTAwM2VyZWZfY291bnQrKztcbi1cdHN3aW1fd3JpdGUoYmFzZSwgc2V0dXAsIFNfSUJNX0RSSVZFICB8IFNfRkNMS19ESVYyKTtcbi1cdHVkZWxheSgxMCk7XG4rXG4gXHRzd2ltX2RyaXZlKGJhc2UsIGZzLVx1MDAzZWxvY2F0aW9uKTtcbi1cdHN3aW1fbW90b3IoYmFzZSwgT04pO1xuLVx0c3dpbV9hY3Rpb24oYmFzZSwgU0VUTUZNKTtcbitcbiBcdGlmIChmcy1cdTAwM2VlamVjdGVkKVxuIFx0XHRzZXR1cF9tZWRpdW0oZnMpO1xuIFx0aWYgKCFmcy1cdTAwM2VkaXNrX2luKSB7XG5AQCAtNjMyLDYgKzYzMCwxMSBAQCBzdGF0aWMgaW50IGZsb3BweV9vcGVuKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuK1x0c3dpbV9tb3RvcihiYXNlLCBPTik7XG4rXHRzd2ltX2FjdGlvbihiYXNlLCBTRVRNRk0pO1xuK1x0bXNsZWVwKDMwKTtcbitcdHN3aW1fUkVBRFlfdGltZW91dChiYXNlKTtcbitcbiBcdHNldF9jYXBhY2l0eShmcy1cdTAwM2VkaXNrLCBmcy1cdTAwM2V0b3RhbF9zZWNzKTtcbiBcbiBcdGlmIChtb2RlIFx1MDAyNiBCTEtfT1BFTl9OREVMQVkpXG5AQCAtNjUyLDggKzY1NSwxMCBAQCBzdGF0aWMgaW50IGZsb3BweV9vcGVuKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpXG4gXHRlbHNlIGlmIChmcy1cdTAwM2VyZWZfY291bnQgXHUwMDNlIDApXG4gXHRcdC0tZnMtXHUwMDNlcmVmX2NvdW50O1xuIFxuLVx0aWYgKGZzLVx1MDAzZXJlZl9jb3VudCA9PSAwKVxuK1x0aWYgKGZzLVx1MDAzZXJlZl9jb3VudCA9PSAwKSB7XG4gXHRcdHN3aW1fbW90b3IoYmFzZSwgT0ZGKTtcbitcdFx0c3dpbV9kcml2ZShiYXNlLCBOT19EUklWRSk7XG4rXHR9XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC02NzksOCArNjg0LDExIEBAIHN0YXRpYyB2b2lkIGZsb3BweV9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIFx0ZWxzZSBpZiAoZnMtXHUwMDNlcmVmX2NvdW50IFx1MDAzZSAwKVxuIFx0XHQtLWZzLVx1MDAzZXJlZl9jb3VudDtcbiBcbi1cdGlmIChmcy1cdTAwM2VyZWZfY291bnQgPT0gMClcbitcdGlmIChmcy1cdTAwM2VyZWZfY291bnQgPT0gMCkge1xuK1x0XHRzd2ltX2RyaXZlKGJhc2UsIGZzLVx1MDAzZWxvY2F0aW9uKTtcbiBcdFx0c3dpbV9tb3RvcihiYXNlLCBPRkYpO1xuK1x0XHRzd2ltX2RyaXZlKGJhc2UsIE5PX0RSSVZFKTtcbitcdH1cbiBcdG11dGV4X3VubG9jayhcdTAwMjZzd2ltX211dGV4KTtcbiB9XG4gXG5AQCAtNjkxLDcgKzY5OSw3IEBAIHN0YXRpYyBpbnQgZmxvcHB5X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbiBcdGludCBlcnI7XG4gXG4gXHRpZiAoKGNtZCBcdTAwMjYgMHg4MCkgXHUwMDI2XHUwMDI2ICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxuLVx0XHRcdHJldHVybiAtRVBFUk07XG4rXHRcdHJldHVybiAtRVBFUk07XG4gXG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBGREVKRUNUOlxuQEAgLTc1MCwxMCArNzU4LDkgQEAgc3RhdGljIGludCBzd2ltX2FkZF9mbG9wcHkoc3RydWN0IHN3aW1fcHJpdiAqc3dkLCBlbnVtIGRyaXZlX2xvY2F0aW9uIGxvY2F0aW9uKVxuIFx0c3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSBcdTAwMjZzd2QtXHUwMDNldW5pdFtzd2QtXHUwMDNlZmxvcHB5X2NvdW50XTtcbiBcdHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBzd2QtXHUwMDNlYmFzZTtcbiBcbitcdGZzLVx1MDAzZXN3ZCA9IHN3ZDtcbiBcdGZzLVx1MDAzZWxvY2F0aW9uID0gbG9jYXRpb247XG4gXG4tXHRzd2ltX2RyaXZlKGJhc2UsIGxvY2F0aW9uKTtcbi1cbiBcdHN3aW1fbW90b3IoYmFzZSwgT0ZGKTtcbiBcbiBcdGZzLVx1MDAzZXR5cGUgPSBIRF9NRURJQTtcbkBAIC03NjEsNiArNzY4LDcgQEAgc3RhdGljIGludCBzd2ltX2FkZF9mbG9wcHkoc3RydWN0IHN3aW1fcHJpdiAqc3dkLCBlbnVtIGRyaXZlX2xvY2F0aW9uIGxvY2F0aW9uKVxuIFxuIFx0ZnMtXHUwMDNlcmVmX2NvdW50ID0gMDtcbiBcdGZzLVx1MDAzZWVqZWN0ZWQgPSAxO1xuK1x0ZnMtXHUwMDNldHJhY2sgPSAwO1xuIFxuIFx0c3dkLVx1MDAzZWZsb3BweV9jb3VudCsrO1xuIFxuQEAgLTc4NSwyNSArNzkzLDQzIEBAIHN0YXRpYyB2b2lkIHN3aW1fY2xlYW51cF9mbG9wcHlfZGlzayhzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcylcbiBcdGJsa19tcV9mcmVlX3RhZ19zZXQoXHUwMDI2ZnMtXHUwMDNldGFnX3NldCk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc3dpbV9mbG9wcHlfaW5pdChzdHJ1Y3Qgc3dpbV9wcml2ICpzd2QpXG4rc3RhdGljIHZvaWQgc3dpbV9zZXRfcGFyYW1ldGVycyhzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKVxuK3tcbitcdHVuc2lnbmVkIGludCBpO1xuK1x0c3RhdGljIGNvbnN0IHU4IG1lbVtdID0geyAweDE4LCAweDQxLCAweDJlLCAweDJlLCAweDE4LCAweDE4LCAweDFiLCAweDFiLFxuK1x0XHRcdFx0ICAweDJmLCAweDJmLCAweDE5LCAweDE5LCAweDk3LCAweDFiLCAweDU3LCAweDNiLCB9O1xuK1xuK1x0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgMCk7IC8qIHJlc2V0IHBhcmFtZXRlciBtZW1vcnkgaW5kZXggKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDE2OyArK2kpXG4rXHRcdHN3aW1fd3JpdGUoYmFzZSwgcGFyYW1ldGVyLCBtZW1baV0pO1xuK31cbitcbitzdGF0aWMgaW50IHN3aW1fZmxvcHB5X2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiB7XG4rXHRzdHJ1Y3Qgc3dpbV9wcml2ICpzd2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcbitcdHVuc2lnbmVkIGludCAqZGF0YSA9IHBkZXYtXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGE7XG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHtcbi1cdFx0LmZlYXR1cmVzXHRcdD0gQkxLX0ZFQVRfUk9UQVRJT05BTCxcbitcdFx0LmZlYXR1cmVzID0gQkxLX0ZFQVRfUk9UQVRJT05BTCxcbiBcdH07XG4gXHRpbnQgZXJyO1xuIFx0aW50IGRyaXZlO1xuIFx0c3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IHN3ZC1cdTAwM2ViYXNlO1xuIFxuK1x0c3dpbV93cml0ZShiYXNlLCBzZXR1cCwgU19JQk1fRFJJVkUgfCAoKmRhdGEgPyBTX0ZDTEtfRElWMiA6IDApKTtcbitcbitcdHN3aW1fc2V0X3BhcmFtZXRlcnMoYmFzZSk7XG4rXG4gXHQvKiBzY2FuIGZsb3BweSBkcml2ZXMgKi9cbiBcbiBcdHN3aW1fZHJpdmUoYmFzZSwgSU5URVJOQUxfRFJJVkUpO1xuIFx0aWYgKHN3aW1fcmVhZGJpdChiYXNlLCBEUklWRV9QUkVTRU5UKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhc3dpbV9yZWFkYml0KGJhc2UsIE9ORU1FR19EUklWRSkpXG4rXHQgICAgIXN3aW1fcmVhZGJpdChiYXNlLCBPTkVNRUdfRFJJVkUpIFx1MDAyNlx1MDAyNiAhc3dpbV90cmFjazAwKGJhc2UpKVxuIFx0XHRzd2ltX2FkZF9mbG9wcHkoc3dkLCBJTlRFUk5BTF9EUklWRSk7XG4gXHRzd2ltX2RyaXZlKGJhc2UsIEVYVEVSTkFMX0RSSVZFKTtcbiBcdGlmIChzd2ltX3JlYWRiaXQoYmFzZSwgRFJJVkVfUFJFU0VOVCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIXN3aW1fcmVhZGJpdChiYXNlLCBPTkVNRUdfRFJJVkUpKVxuK1x0ICAgICFzd2ltX3JlYWRiaXQoYmFzZSwgT05FTUVHX0RSSVZFKSBcdTAwMjZcdTAwMjYgIXN3aW1fdHJhY2swMChiYXNlKSlcbiBcdFx0c3dpbV9hZGRfZmxvcHB5KHN3ZCwgRVhURVJOQUxfRFJJVkUpO1xuK1x0c3dpbV9kcml2ZShiYXNlLCBOT19EUklWRSk7XG4gXG4gXHQvKiByZWdpc3RlciBmbG9wcHkgZHJpdmVzICovXG4gXG5AQCAtODE0LDExICs4NDAsOSBAQCBzdGF0aWMgaW50IHN3aW1fZmxvcHB5X2luaXQoc3RydWN0IHN3aW1fcHJpdiAqc3dkKVxuIFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0fVxuIFxuLVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c3dkLVx1MDAzZWxvY2spO1xuLVxuIFx0Zm9yIChkcml2ZSA9IDA7IGRyaXZlIFx1MDAzYyBzd2QtXHUwMDNlZmxvcHB5X2NvdW50OyBkcml2ZSsrKSB7XG4gXHRcdGVyciA9IGJsa19tcV9hbGxvY19zcV90YWdfc2V0KFx1MDAyNnN3ZC1cdTAwM2V1bml0W2RyaXZlXS50YWdfc2V0LFxuLVx0XHRcdFx0XHUwMDI2c3dpbV9tcV9vcHMsIDIsIDApO1xuK1x0XHRcdFx0XHUwMDI2c3dpbV9tcV9vcHMsIDIsIEJMS19NUV9GX0JMT0NLSU5HKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIGV4aXRfcHV0X2Rpc2tzO1xuIFxuQEAgLTgzMCw4ICs4NTQsNiBAQCBzdGF0aWMgaW50IHN3aW1fZmxvcHB5X2luaXQoc3RydWN0IHN3aW1fcHJpdiAqc3dkKVxuIFx0XHRcdGVyciA9IFBUUl9FUlIoc3dkLVx1MDAzZXVuaXRbZHJpdmVdLmRpc2spO1xuIFx0XHRcdGdvdG8gZXhpdF9wdXRfZGlza3M7XG4gXHRcdH1cbi1cbi1cdFx0c3dkLVx1MDAzZXVuaXRbZHJpdmVdLnN3ZCA9IHN3ZDtcbiBcdH1cbiBcbiBcdGZvciAoZHJpdmUgPSAwOyBkcml2ZSBcdTAwM2Mgc3dkLVx1MDAzZWZsb3BweV9jb3VudDsgZHJpdmUrKykge1xuQEAgLTkwNSw3ICs5MjcsNyBAQCBzdGF0aWMgaW50IHN3aW1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KVxuIFxuIFx0c3dkLVx1MDAzZWJhc2UgPSBzd2ltX2Jhc2U7XG4gXG4tXHRyZXQgPSBzd2ltX2Zsb3BweV9pbml0KHN3ZCk7XG4rXHRyZXQgPSBzd2ltX2Zsb3BweV9pbml0KGRldik7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dF9rZnJlZTtcbiBcbkBAIC05NDUsNyArOTY3LDcgQEAgc3RhdGljIHZvaWQgc3dpbV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KVxuIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHN3aW1fZHJpdmVyID0ge1xuIFx0LnByb2JlICA9IHN3aW1fcHJvYmUsXG4gXHQucmVtb3ZlID0gc3dpbV9yZW1vdmUsXG4tXHQuZHJpdmVyICAgPSB7XG4rXHQuZHJpdmVyID0ge1xuIFx0XHQubmFtZVx0PSBDQVJETkFNRSxcbiBcdH0sXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N3aW1fYXNtLlMgYi9kcml2ZXJzL2Jsb2NrL3N3aW1fYXNtLlNcbmluZGV4IDNkN2EyZDg3NTk1YTU3Li42NWI0ZTQ2NThlMTBjNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svc3dpbV9hc20uU1xuKysrIGIvZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TXG5AQCAtNSw3ICs1LDcgQEBcbiAgKiBuZWVkcyBhc3NlbWJseSBsYW5ndWFnZSBiZWNhdXNlIGlzIHZlcnkgdGltaW5nIGRlcGVuZGVudFxuICAqIHRoaXMgY29udHJvbGxlciBleGlzdHMgb25seSBvbiBtYWNpbnRvc2ggNjgweDAgYmFzZWRcbiAgKlxuLSAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA4IExhdXJlbnQgVml2aWVyIFx1MDAzY0xhdXJlbnRAbHZpdmllci5pbmZvXHUwMDNlXG4rICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4IExhdXJlbnQgVml2aWVyIFx1MDAzY0xhdXJlbnRAbHZpdmllci5pbmZvXHUwMDNlXG4gICpcbiAgKiBiYXNlZCBvbiBBbGFzdGFpciBCcmlkZ2V3YXRlciBTV0lNIGFuYWx5c2lzLCAyMDAxXG4gICogYmFzZWQgb24gbmV0QlNEIElXTSBkcml2ZXIgKGMpIDE5OTcsIDE5OTggSGF1a2UgRmF0aC5cbkBAIC0xNCwxMzUgKzE0LDEzOCBAQFxuICAqIDIwMDgtMTEtMDUgKGx2KSAtIGFkZCBnZXRfc3dpbV9tb2RlXG4gICovXG4gXG4tXHQuZXF1XHR3cml0ZV9kYXRhLFx0MHgwMDAwXG4tXHQuZXF1XHR3cml0ZV9tYXJrLFx0MHgwMjAwXG4tXHQuZXF1XHR3cml0ZV9DUkMsXHQweDA0MDBcbi1cdC5lcXVcdHdyaXRlX3BhcmFtZXRlciwweDA2MDBcbi1cdC5lcXVcdHdyaXRlX3BoYXNlLFx0MHgwODAwXG4tXHQuZXF1XHR3cml0ZV9zZXR1cCxcdDB4MGEwMFxuLVx0LmVxdVx0d3JpdGVfbW9kZTAsXHQweDBjMDBcbi1cdC5lcXVcdHdyaXRlX21vZGUxLFx0MHgwZTAwXG4tXHQuZXF1XHRyZWFkX2RhdGEsXHQweDEwMDBcbi1cdC5lcXVcdHJlYWRfbWFyayxcdDB4MTIwMFxuLVx0LmVxdVx0cmVhZF9lcnJvcixcdDB4MTQwMFxuLVx0LmVxdVx0cmVhZF9wYXJhbWV0ZXIsXHQweDE2MDBcbi1cdC5lcXVcdHJlYWRfcGhhc2UsXHQweDE4MDBcbi1cdC5lcXVcdHJlYWRfc2V0dXAsXHQweDFhMDBcbi1cdC5lcXVcdHJlYWRfc3RhdHVzLFx0MHgxYzAwXG4tXHQuZXF1XHRyZWFkX2hhbmRzaGFrZSxcdDB4MWUwMFxuLVxuLVx0LmVxdVx0b19zaWRlLCAwXG4tXHQuZXF1XHRvX3RyYWNrLCAxXG4tXHQuZXF1XHRvX3NlY3RvciwgMlxuLVx0LmVxdVx0b19zaXplLCAzXG4tXHQuZXF1XHRvX2NyYzAsIDRcbi1cdC5lcXVcdG9fY3JjMSwgNVxuLVxuLVx0LmVxdVx0c2Vla190aW1lLCAzMDAwMFxuLVx0LmVxdVx0bWF4X3JldHJ5LCA0MFxuLVx0LmVxdVx0c2VjdG9yX3NpemUsIDUxMlxuK1x0LmVxdVx0Lkx3cml0ZV9kYXRhLFx0XHQweDAwMDBcbitcdC5lcXVcdC5Md3JpdGVfbWFyayxcdFx0MHgwMjAwXG4rXHQuZXF1XHQuTHdyaXRlX0NSQyxcdFx0MHgwNDAwXG4rXHQuZXF1XHQuTHdyaXRlX3BhcmFtZXRlcixcdDB4MDYwMFxuK1x0LmVxdVx0Lkx3cml0ZV9waGFzZSxcdFx0MHgwODAwXG4rXHQuZXF1XHQuTHdyaXRlX3NldHVwLFx0XHQweDBhMDBcbitcdC5lcXVcdC5Md3JpdGVfbW9kZTAsXHRcdDB4MGMwMFxuK1x0LmVxdVx0Lkx3cml0ZV9tb2RlMSxcdFx0MHgwZTAwXG4rXHQuZXF1XHQuTHJlYWRfZGF0YSxcdFx0MHgxMDAwXG4rXHQuZXF1XHQuTHJlYWRfbWFyayxcdFx0MHgxMjAwXG4rXHQuZXF1XHQuTHJlYWRfZXJyb3IsXHRcdDB4MTQwMFxuK1x0LmVxdVx0LkxyZWFkX3BhcmFtZXRlcixcdDB4MTYwMFxuK1x0LmVxdVx0LkxyZWFkX3BoYXNlLFx0XHQweDE4MDBcbitcdC5lcXVcdC5McmVhZF9zZXR1cCxcdFx0MHgxYTAwXG4rXHQuZXF1XHQuTHJlYWRfc3RhdHVzLFx0XHQweDFjMDBcbitcdC5lcXVcdC5McmVhZF9oYW5kc2hha2UsXHQweDFlMDBcbitcbitcdC5lcXVcdC5Mb19zaWRlLFx0XHQwXG4rXHQuZXF1XHQuTG9fdHJhY2ssXHRcdDFcbitcdC5lcXVcdC5Mb19zZWN0b3IsXHRcdDJcbitcdC5lcXVcdC5Mb19zaXplLFx0XHQzXG4rXHQuZXF1XHQuTG9fY3JjMCxcdFx0NFxuK1x0LmVxdVx0LkxvX2NyYzEsXHRcdDVcbitcbitcdC5lcXVcdC5Mc2Vla190aW1lLFx0XHQzMDAwMFxuK1x0LmVxdVx0LkxtYXhfcmV0cnksXHRcdDQwXG4rXHQuZXF1XHQuTHNlY3Rvcl9zaXplLFx0XHQ1MTJcbitcbitcdC5lcXVcdC5MbXJfY2xlYXJfZmlmbyxcdDB4MDFcbitcdC5lcXVcdC5MbXJfYWN0aW9uLFx0XHQweDA4XG4rXHQuZXF1XHQuTG1yX3dyaXRlX2FjdGlvbixcdDB4MThcbitcbitcdC5lcXVcdC5MaHJfY3JjX2Vycm9yLFx0XHQweDAyXG4rXHQuZXF1XHQuTGhyX2ZpZm9fMmJ5dGVzLFx0MHg0MFxuK1x0LmVxdVx0Lkxocl9maWZvXzFieXRlLFx0MHg4MFxuIFxuIFx0Lmdsb2JhbCBzd2ltX3JlYWRfc2VjdG9yX2hlYWRlclxuIHN3aW1fcmVhZF9zZWN0b3JfaGVhZGVyOlxuIFx0bGlua1x0JWE2LCAjMFxuLVx0bW92ZW1sXHQlZDEtJWQ1LyVhMC0lYTQsJXNwQC1cbitcdG1vdmVtbFx0JWQxLSVkNS8lYTAtJWE1LCVzcEAtXG4gXHRtb3ZlbFx0JWE2QCgweDBjKSwgJWE0XG4tXHRic3JcdG1mbV9yZWFkX2FkZHJtYXJrXG4tXHRtb3ZlbWxcdCVzcEArLCAlZDEtJWQ1LyVhMC0lYTRcbitcdG1vdmVxXHQjLTEsICVkMFxuK1x0YnNyXHQuTG1mbV9yZWFkX2FkZHJtYXJrXG4rXHRtb3ZlbWxcdCVzcEArLCAlZDEtJWQ1LyVhMC0lYTVcbiBcdHVubGtcdCVhNlxuIFx0cnRzXG4gXG4tc2VjdG9yX2FkZHJlc3NfbWFyazpcbisuTHNlY3Rvcl9hZGRyZXNzX21hcms6XG4gXHQuYnl0ZVx0MHhhMSwgMHhhMSwgMHhhMSwgMHhmZVxuLXNlY3Rvcl9kYXRhX21hcms6XG4rLkxzZWN0b3JfZGF0YV9tYXJrOlxuIFx0LmJ5dGVcdDB4YTEsIDB4YTEsIDB4YTEsIDB4ZmJcbiBcbi1tZm1fcmVhZF9hZGRybWFyazpcbisuTG1mbV9yZWFkX2FkZHJtYXJrOlxuIFx0bW92ZWxcdCVhNkAoMHgwOCksICVhM1xuLVx0bGVhXHQlYTNAKHJlYWRfaGFuZHNoYWtlKSwgJWEyXG4tXHRsZWFcdCVhM0AocmVhZF9tYXJrKSwgJWEzXG4tXHRtb3ZlcVx0Iy0xLCAlZDBcbi1cdG1vdmV3XHQjc2Vla190aW1lLCAlZDJcbi1cbi13YWl0X2hlYWRlcl9pbml0OlxuLVx0dHN0Ylx0JWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKVxuLVx0bW92ZWJcdCMweDE4LCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKVxuLVx0bW92ZWJcdCMweDAxLCAlYTNAKHdyaXRlX21vZGUxIC0gcmVhZF9tYXJrKVxuLVx0bW92ZWJcdCMweDAxLCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKVxuLVx0dHN0Ylx0JWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKVxuLVx0bW92ZWJcdCMweDA4LCAlYTNAKHdyaXRlX21vZGUxIC0gcmVhZF9tYXJrKVxuLVxuLVx0bGVhXHRzZWN0b3JfYWRkcmVzc19tYXJrLCAlYTBcbitcdGxlYVx0JWEzQCguTHJlYWRfaGFuZHNoYWtlKSwgJWEyXG4rXHRsZWFcdCVhM0AoLkxyZWFkX2RhdGEpLCAlYTVcbitcdGxlYVx0JWEzQCguTHJlYWRfbWFyayksICVhM1xuK1x0bW92ZXdcdCMuTHNlZWtfdGltZSwgJWQyXG4rXG4rLkx3YWl0X2hlYWRlcl9pbml0OlxuK1x0bW92ZWJcdCMuTG1yX3dyaXRlX2FjdGlvbiwgJWEzQCguTHdyaXRlX21vZGUwIC0gLkxyZWFkX21hcmspXG4rXHRtb3ZlYlx0Iy5MbXJfY2xlYXJfZmlmbywgJWEzQCguTHdyaXRlX21vZGUxIC0gLkxyZWFkX21hcmspXG4rXHRtb3ZlYlx0Iy5MbXJfY2xlYXJfZmlmbywgJWEzQCguTHdyaXRlX21vZGUwIC0gLkxyZWFkX21hcmspXG4rXHR0c3RiXHQlYTNAKC5McmVhZF9lcnJvciAtIC5McmVhZF9tYXJrKVxuK1x0bW92ZWJcdCMuTG1yX2FjdGlvbiwgJWEzQCguTHdyaXRlX21vZGUxIC0gLkxyZWFkX21hcmspXG4rXG4rXHRsZWFcdC5Mc2VjdG9yX2FkZHJlc3NfbWFyaywgJWEwXG4gXHRtb3ZlcVx0IzMsICVkMVxuIFxuLXdhaXRfYWRkcl9tYXJrX2J5dGU6XG4tXG4rLkx3YWl0X2FkZHJfbWFya19ieXRlOlxuIFx0dHN0Ylx0JWEyQFxuLVx0ZGJtaVx0JWQyLCB3YWl0X2FkZHJfbWFya19ieXRlXG4tXHRicGxcdGhlYWRlcl9leGl0XG4rXHRkYm1pXHQlZDIsIC5Md2FpdF9hZGRyX21hcmtfYnl0ZVxuK1x0YnBsXHQuTHNpZ25hbF9ub255YlxuIFxuIFx0bW92ZWJcdCVhM0AsICVkM1xuIFx0Y21wYlx0JWEwQCssICVkM1xuLVx0ZGJuZVx0JWQxLCB3YWl0X2FkZHJfbWFya19ieXRlXG4tXHRibmVcdHdhaXRfaGVhZGVyX2luaXRcbi1cbi1cdG1vdmVxXHQjbWF4X3JldHJ5LCAlZDJcbitcdGRibmVcdCVkMSwgLkx3YWl0X2FkZHJfbWFya19ieXRlXG4rXHRibmVcdC5Md2FpdF9oZWFkZXJfaW5pdFxuIFxuLWFtYXJrMDpcdHRzdGJcdCVhMkBcbi1cdGRibWlcdCVkMiwgYW1hcmswXG4tXHRicGxcdHNpZ25hbF9ub255YlxuLVxuLVx0bW92ZWJcdCVhM0AsICVhNEAob190cmFjaylcbi1cbi1cdG1vdmVxXHQjbWF4X3JldHJ5LCAlZDJcbi1cbi1hbWFyazE6XHR0c3RiXHQlYTJAXG4tXHRkYm1pXHQlZDIsIGFtYXJrMVxuLVx0YnBsXHRzaWduYWxfbm9ueWJcbi1cbi1cdG1vdmViXHQlYTNALCAlYTRAKG9fc2lkZSlcbi1cbi1cdG1vdmVxXHQjbWF4X3JldHJ5LCAlZDJcbitcdG1vdmVxXHQjLkxtYXhfcmV0cnksICVkMlxuKy5MYW1hcmswOlxuK1x0dHN0Ylx0JWEyQFxuK1x0ZGJtaVx0JWQyLCAuTGFtYXJrMFxuK1x0YnBsXHQuTHNpZ25hbF9ub255YlxuIFxuLWFtYXJrMjpcdHRzdGJcdCVhMkBcbi1cdGRibWlcdCVkMiwgYW1hcmsyXG4tXHRicGxcdHNpZ25hbF9ub255YlxuK1x0bW92ZWJcdCVhNUAsICVhNEAoLkxvX3RyYWNrKVxuIFxuLVx0bW92ZWJcdCVhM0AsICVhNEAob19zZWN0b3IpXG4rXHRtb3ZlcVx0Iy5MbWF4X3JldHJ5LCAlZDJcbisuTGFtYXJrMTpcbitcdHRzdGJcdCVhMkBcbitcdGRibWlcdCVkMiwgLkxhbWFyazFcbitcdGJwbFx0LkxzaWduYWxfbm9ueWJcbiBcbi1cdG1vdmVxXHQjbWF4X3JldHJ5LCAlZDJcbitcdG1vdmViXHQlYTVALCAlYTRAKC5Mb19zaWRlKVxuIFxuLWFtYXJrMzpcdHRzdGJcdCVhMkBcbi1cdGRibWlcdCVkMiwgYW1hcmszXG4tXHRicGxcdHNpZ25hbF9ub255YlxuK1x0bW92ZXFcdCMuTG1heF9yZXRyeSwgJWQyXG4rLkxhbWFyazI6XG4rXHR0c3RiXHQlYTJAXG4rXHRkYm1pXHQlZDIsIC5MYW1hcmsyXG4rXHRicGxcdC5Mc2lnbmFsX25vbnliXG4gXG4tXHRtb3ZlYlx0JWEzQCwgJWE0QChvX3NpemUpXG4rXHRtb3ZlYlx0JWE1QCwgJWE0QCguTG9fc2VjdG9yKVxuIFxuLVx0bW92ZXFcdCNtYXhfcmV0cnksICVkMlxuK1x0bW92ZXFcdCMuTG1heF9yZXRyeSwgJWQyXG4rLkxhbWFyazM6XG4rXHR0c3RiXHQlYTJAXG4rXHRkYm1pXHQlZDIsIC5MYW1hcmszXG4rXHRicGxcdC5Mc2lnbmFsX25vbnliXG4gXG4tY3JjMDpcdHRzdGJcdCVhMkBcbi1cdGRibWlcdCVkMiwgY3JjMFxuLVx0YnBsXHRzaWduYWxfbm9ueWJcbitcdG1vdmViXHQlYTVALCAlYTRAKC5Mb19zaXplKVxuIFxuLVx0bW92ZWJcdCVhM0AsICVhNEAob19jcmMwKVxuK1x0bW92ZXFcdCMuTG1heF9yZXRyeSwgJWQyXG4rLkxjcmMwOlxuK1x0dHN0Ylx0JWEyQFxuK1x0ZGJtaVx0JWQyLCAuTGNyYzBcbitcdGJwbFx0LkxzaWduYWxfbm9ueWJcbiBcbi1cdG1vdmVxXHQjbWF4X3JldHJ5LCAlZDJcbitcdG1vdmViXHQlYTVALCAlYTRAKC5Mb19jcmMwKVxuIFxuLWNyYzE6XHR0c3RiXHQlYTJAXG4tXHRkYm1pXHQlZDIsIGNyYzFcbi1cdGJwbFx0c2lnbmFsX25vbnliXG4rXHRtb3ZlcVx0Iy5MbWF4X3JldHJ5LCAlZDJcbisuTGNyYzE6XHRtb3ZlYlx0JWEyQCwgJWQ1XG4rXHRkYm1pXHQlZDIsIC5MY3JjMVxuK1x0YnBsXHQuTHNpZ25hbF9ub255YlxuIFxuLVx0bW92ZWJcdCVhM0AsICVhNEAob19jcmMxKVxuK1x0bW92ZWJcdCVhNUAsICVhNEAoLkxvX2NyYzEpXG4gXG4tXHR0c3RiXHQlYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspXG4rXHRhbmRiXHQjLkxocl9jcmNfZXJyb3IsICVkNVxuK1x0Ym5lXHQuTHNpZ25hbF9ub255YlxuIFxuLWhlYWRlcl9leGl0OlxuIFx0bW92ZXFcdCMwLCAlZDBcbi1cdG1vdmViXHQjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaylcbi1cdHJ0c1xuLXNpZ25hbF9ub255Yjpcbi1cdG1vdmVxXHQjLTEsICVkMFxuLVx0bW92ZWJcdCMweDE4LCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKVxuKy5Mc2lnbmFsX25vbnliOlxuK1x0bW92ZWJcdCMuTG1yX3dyaXRlX2FjdGlvbiwgJWEzQCguTHdyaXRlX21vZGUwIC0gLkxyZWFkX21hcmspXG4gXHRydHNcbiBcbiBcdC5nbG9iYWwgc3dpbV9yZWFkX3NlY3Rvcl9kYXRhXG5AQCAtMTUwLDk0ICsxNTMsODcgQEAgc3dpbV9yZWFkX3NlY3Rvcl9kYXRhOlxuIFx0bGlua1x0JWE2LCAjMFxuIFx0bW92ZW1sXHQlZDEtJWQ1LyVhMC0lYTUsJXNwQC1cbiBcdG1vdmVsXHQlYTZAKDB4MGMpLCAlYTRcbi1cdGJzclx0bWZtX3JlYWRfZGF0YVxuK1x0bW92ZXFcdCMtMSwgJWQwXG4rXHRic3JcdC5MbWZtX3JlYWRfZGF0YVxuIFx0bW92ZW1sXHQlc3BAKywgJWQxLSVkNS8lYTAtJWE1XG4gXHR1bmxrXHQlYTZcbiBcdHJ0c1xuIFxuLW1mbV9yZWFkX2RhdGE6XG4rLkxtZm1fcmVhZF9kYXRhOlxuIFx0bW92ZWxcdCVhNkAoMHgwOCksICVhM1xuLVx0bGVhXHQlYTNAKHJlYWRfaGFuZHNoYWtlKSwgJWEyXG4tXHRsZWFcdCVhM0AocmVhZF9kYXRhKSwgJWE1XG4tXHRsZWFcdCVhM0AocmVhZF9tYXJrKSwgJWEzXG4tXHRtb3Zld1x0I3NlZWtfdGltZSwgJWQyXG4tXG4td2FpdF9kYXRhX2luaXQ6XG4tXHR0c3RiXHQlYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspXG4tXHRtb3ZlYlx0IzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspXG4tXHRtb3ZlYlx0IzB4MDEsICVhM0Aod3JpdGVfbW9kZTEgLSByZWFkX21hcmspXG4tXHRtb3ZlYlx0IzB4MDEsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspXG4tXHR0c3RiXHQlYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspXG4tXHRtb3ZlYlx0IzB4MDgsICVhM0Aod3JpdGVfbW9kZTEgLSByZWFkX21hcmspXG4tXG4tXHRsZWFcdHNlY3Rvcl9kYXRhX21hcmssICVhMFxuK1x0bGVhXHQlYTNAKC5McmVhZF9oYW5kc2hha2UpLCAlYTJcbitcdGxlYVx0JWEzQCguTHJlYWRfZGF0YSksICVhNVxuK1x0bGVhXHQlYTNAKC5McmVhZF9tYXJrKSwgJWEzXG4rXHRtb3Zld1x0Iy5Mc2Vla190aW1lLCAlZDJcbitcbisuTHdhaXRfZGF0YV9pbml0OlxuK1x0bW92ZWJcdCMuTG1yX3dyaXRlX2FjdGlvbiwgJWEzQCguTHdyaXRlX21vZGUwIC0gLkxyZWFkX21hcmspXG4rXHRtb3ZlYlx0Iy5MbXJfY2xlYXJfZmlmbywgJWEzQCguTHdyaXRlX21vZGUxIC0gLkxyZWFkX21hcmspXG4rXHRtb3ZlYlx0Iy5MbXJfY2xlYXJfZmlmbywgJWEzQCguTHdyaXRlX21vZGUwIC0gLkxyZWFkX21hcmspXG4rXHR0c3RiXHQlYTNAKC5McmVhZF9lcnJvciAtIC5McmVhZF9tYXJrKVxuK1x0bW92ZWJcdCMuTG1yX2FjdGlvbiwgJWEzQCguTHdyaXRlX21vZGUxIC0gLkxyZWFkX21hcmspXG4rXG4rXHRsZWFcdC5Mc2VjdG9yX2RhdGFfbWFyaywgJWEwXG4gXHRtb3ZlcVx0IzMsICVkMVxuIFxuIFx0Lyogd2FpdCBkYXRhIGFkZHJlc3MgbWFyayAqL1xuIFxuLXdhaXRfZGF0YV9tYXJrX2J5dGU6XG4tXG4rLkx3YWl0X2RhdGFfbWFya19ieXRlOlxuIFx0dHN0Ylx0JWEyQFxuLVx0ZGJtaVx0JWQyLCB3YWl0X2RhdGFfbWFya19ieXRlXG4tXHRicGxcdGRhdGFfZXhpdFxuK1x0ZGJtaVx0JWQyLCAuTHdhaXRfZGF0YV9tYXJrX2J5dGVcbitcdGJwbFx0LkxkYXRhX2V4aXRcbiBcbiBcdG1vdmViXHQlYTNALCAlZDNcbiBcdGNtcGJcdCVhMEArLCAlZDNcbi1cdGRibmVcdCVkMSwgd2FpdF9kYXRhX21hcmtfYnl0ZVxuLVx0Ym5lXHR3YWl0X2RhdGFfaW5pdFxuK1x0ZGJuZVx0JWQxLCAuTHdhaXRfZGF0YV9tYXJrX2J5dGVcbitcdGJuZVx0Lkx3YWl0X2RhdGFfaW5pdFxuIFxuIFx0LyogcmVhZCBkYXRhICovXG4gXG4tXHR0c3RiXHQlYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspXG4tXG4tXHRtb3ZlbFx0I3NlY3Rvcl9zaXplLTEsICVkNFx0XHQvKiBzZWN0b3Igc2l6ZSAqL1xuLXJlYWRfbmV3X2RhdGE6XG4tXHRtb3Zld1x0I21heF9yZXRyeSwgJWQyXG4tcmVhZF9kYXRhX2xvb3A6XG4rXHRtb3ZlbFx0Iy5Mc2VjdG9yX3NpemUgLSAxLCAlZDRcdFx0Lyogc2VjdG9yIHNpemUgKi9cbisuTHJlYWRfbmV3X2RhdGE6XG4rXHRtb3Zld1x0Iy5MbWF4X3JldHJ5LCAlZDJcbisuTHJlYWRfZGF0YV9sb29wOlxuIFx0bW92ZWJcdCVhMkAsICVkNVxuLVx0YW5kYlx0IzB4YzAsICVkNVxuLVx0ZGJuZVx0JWQyLCByZWFkX2RhdGFfbG9vcFxuLVx0YmVxXHRkYXRhX2V4aXRcbitcdGFuZGJcdCMoLkxocl9maWZvXzJieXRlcyArIC5MaHJfZmlmb18xYnl0ZSksICVkNVxuK1x0YmVxXHQxZlxuK1x0bW92ZXdcdCMuTG1heF9yZXRyeSwgJWQyXG4gXHRtb3ZlYlx0JWE1QCwgJWE0QCtcbi1cdGFuZGJcdCMweDQwLCAlZDVcbi1cdGRibmVcdCVkNCwgcmVhZF9uZXdfZGF0YVxuLVx0YmVxXHRleGl0X2xvb3BcbitcdGRicmFcdCVkNCwgMWZcbitcdGJyYVx0LkxkYXRhX2NyYzBcbisxOlx0YW5kYlx0Iy5MaHJfZmlmb18yYnl0ZXMsICVkNVxuK1x0ZGJuZVx0JWQyLCAuTHJlYWRfZGF0YV9sb29wXG4rXHRiZXFcdC5MZGF0YV9leGl0XG4gXHRtb3ZlYlx0JWE1QCwgJWE0QCtcbi1cdGRicmFcdCVkNCwgcmVhZF9uZXdfZGF0YVxuLWV4aXRfbG9vcDpcbitcdGRicmFcdCVkNCwgLkxyZWFkX25ld19kYXRhXG4gXG4gXHQvKiByZWFkIENSQyAqL1xuIFxuLVx0bW92ZXdcdCNtYXhfcmV0cnksICVkMlxuLWRhdGFfY3JjMDpcbi1cbitcdG1vdmV3XHQjLkxtYXhfcmV0cnksICVkMlxuKy5MZGF0YV9jcmMwOlxuIFx0dHN0Ylx0JWEyQFxuLVx0ZGJtaVx0JWQyLCBkYXRhX2NyYzBcbi1cdGJwbFx0ZGF0YV9leGl0XG4rXHRkYm1pXHQlZDIsIC5MZGF0YV9jcmMwXG4rXHRicGxcdC5MZGF0YV9leGl0XG4gXG4tXHRtb3ZlYlx0JWEzQCwgJWQ1XG4rXHRtb3ZlYlx0JWE1QCwgJWQyXG4gXG4tXHRtb3ZlcVx0I21heF9yZXRyeSwgJWQyXG4tXG4tZGF0YV9jcmMxOlxuLVxuLVx0dHN0Ylx0JWEyQFxuLVx0ZGJtaVx0JWQyLCBkYXRhX2NyYzFcbi1cdGJwbFx0ZGF0YV9leGl0XG4tXG4tXHRtb3ZlYlx0JWEzQCwgJWQ1XG4rXHRtb3ZlcVx0Iy5MbWF4X3JldHJ5LCAlZDJcbisuTGRhdGFfY3JjMTpcbitcdG1vdmViXHQlYTJALCAlZDVcbitcdGRibWlcdCVkMiwgLkxkYXRhX2NyYzFcbitcdGJwbFx0LkxkYXRhX2V4aXRcbiBcbi1cdHRzdGJcdCVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaylcbitcdG1vdmViXHQlYTVALCAlZDJcbiBcbi1cdG1vdmViXHQjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaylcbitcdGFuZGJcdCMuTGhyX2NyY19lcnJvciwgJWQ1XG4rXHRibmVcdC5MZGF0YV9leGl0XG4gXG4gXHQvKiByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHJlYWQgKi9cbiBcbi1cdG1vdmVsXHQjc2VjdG9yX3NpemUsICVkMFxuK1x0bW92ZWxcdCMuTHNlY3Rvcl9zaXplLCAlZDBcbiBcdGFkZHdcdCMxLCAlZDRcbiBcdHN1YmxcdCVkNCwgJWQwXG4tXHRydHNcbi1kYXRhX2V4aXQ6XG4tXHRtb3ZlYlx0IzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspXG4tXHRtb3ZlcVx0Iy0xLCAlZDBcbitcbisuTGRhdGFfZXhpdDpcbitcdG1vdmViXHQjLkxtcl93cml0ZV9hY3Rpb24sICVhM0AoLkx3cml0ZV9tb2RlMCAtIC5McmVhZF9tYXJrKVxuIFx0cnRzXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNToyNjo1NS45NzIwMjcyMzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTYwOTIyMDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFNXSU0gRmxvcHB5IERyaXZlciBQYXRjaCBmb3IgbTY4ayBNYWNzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyB0b3VjaGluZyBgYXJjaC9tNjhrL21hYy9jb25maWcuY2AsIGBkcml2ZXJzL2Jsb2NrL3N3aW0uY2AsIGFuZCBgZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIFwiU1dJTVwiIOKAkyBTYW5kZXIgV296bmlhayBJbnRlZ3JhdGVkIE1hY2hpbmUuIFRoYXQgc2NyZWFtcyBmbG9wcHkgY29udHJvbGxlciBkcml2ZXIgZm9yIG9sZGVyIG02OGsgTWFjcy4gQW5kIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBob25pbmcgaW4gb24gdGhhdC5cblxuSXQgbG9va3MgbGlrZSB0aGUgcHJpbWFyeSBmb2N1cyBpcyBhYm91dCBwcm9wZXJseSBjb25maWd1cmluZyB0aGUgXCJzd2ltXCIgZGV2aWNlLCBzcGVjaWZpY2FsbHkgYnkgcGFzc2luZyBhIGBkYXRhYCBwYXJhbWV0ZXIgdG8gYHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9yZXNuZGF0YWAuIFRoYXQgYGRhdGFgIGlzIGxpa2VseSBrZXlpbmcgb2ZmIHRoZSBNYWMgbW9kZWwgdG8gc2V0IGBTX0ZDTEtfRElWMmAsIHdoaWNoIG1ha2VzIHNlbnNlOyB0aGUgY2xvY2sgZnJlcXVlbmN5IHZhcmllcyBhY3Jvc3MgdGhvc2Ugb2xkIG1hY2hpbmVzLCBhbmQgdGhlIGRyaXZlciBuZWVkcyB0byBhZGp1c3QgYWNjb3JkaW5nbHkuXG5cbkkgc2VlIGNoYW5nZXMgdG8gYHN3aW0uY2AgdGhhdCByZXBsYWNlIGBzY2hlZHVsZV90aW1lb3V0YCB3aXRoIGBwb2xsX3RpbWVvdXRfdXNgIGFuZCBgcG9sbF90aW1lb3V0X3VzX2F0b21pY2AuIFRoYXTigJlzIGEgZ29vZCBzaWduOyB0aG9zZSBwb2xsaW5nIHByaW1pdGl2ZXMgYXJlIHVzdWFsbHkgYSBiZXR0ZXIgZml0IGZvciBoYXJkd2FyZSBpbnRlcmFjdGlvbnMuIFBsdXMsIHRoZXJlIGFyZSBzb21lIG1hY3JvIGFuZCBjb25zdGFudCB0d2Vha3MsIGFuZCBpdCBsb29rcyBsaWtlIGEgbmV3IHRpbWVvdXQsIGBzd2ltX1JFQURZX3RpbWVvdXRgLCBoYXMgYmVlbiBhZGRlZC4gVGhlcmUgYXJlIGNoYW5nZXMgdG8gdGhlIGBzd2ltX3JlYWRfc2VjdG9yX3JhbmdlYCBhbmQgYGZsb3BweV9yZWFkX3NlY3RvcnNgIGZ1bmN0aW9ucywgc28gdGhpcyBpcyBsaWtlbHkgYWJvdXQgaW1wcm92aW5nIHJlYWQgcGVyZm9ybWFuY2Ugb3IgcmVsaWFiaWxpdHkuXG5cblRoZSBgc3dpbV9hc20uU2AgY2hhbmdlIGlzIGludGVyZXN0aW5nLCB0b28uIExvY2FsIGxhYmVscyBhbmQgc29tZSBsb2dpYyB1cGRhdGVzIGluIGFzc2VtYmx5PyBJdCBzdWdnZXN0cyB0aGV5J3JlIGxpa2VseSByZWZpbmluZyB0aGUgbG93LWxldmVsIGhhcmR3YXJlIGludGVyYWN0aW9uLlxuXG5Ob3csIG15IG1pbmQgZ29lcyB0byB0ZXN0aW5nLiBJcyB0aGlzIHBhdGNoIGV2ZW4gdGVzdGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhlIGBzd2ltYCBkcml2ZXIgaXMgc28gc3BlY2lmaWMgdG8gdGhvc2Ugb2xkZXIgTWFjcy4gQ2FuIEkgZW11bGF0ZSB0aGF0PyBIbW0sIFFFTVXigKYgbGV0IG1lIGNoZWNrLiBBaCwgeWVzISBRRU1VIGhhcyB0aGF0IGBxODAwYCBtYWNoaW5lLCBhIE1hYyBRdWFkcmEgODAwLiBBbmQgdGhlIFF1YWRyYSA4MDAgaXMgb25lIG9mIHRoZSBtb2RlbHMgdGhhdCB1c2UgdGhlIDMyTUh6IEZDTEssIGBNQUNfTU9ERUxfUTgwMGAuIEdvb2QsIHRoYXQncyBwb3RlbnRpYWxseSB0ZXN0YWJsZS4gVGhpcyBkcml2ZXIgaXMgaW4gYGRyaXZlcnMvYmxvY2svc3dpbS5jYC4gTm93LCBsZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhhdCBgQ09ORklHX0JMS19ERVZfU1dJTWAgaXMgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUgYnVpbGQuIEknbGwgdXNlIG15IGdyZXBwZXIgdG9vbCBmb3IgYSBxdWljayBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2NTIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNToyNzowMy41MzI5NTE4MjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY0NDA3NjMxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCTEtfREVWX1NXSU1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZz0yNDg9Q09ORklHX0NPTk5FQ1RPUj1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZzoyNDk6Q09ORklHX0JMS19ERVZfU1dJTT1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZy0yNTAtQ09ORklHX1pSQU09bVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnPTI3Nj1DT05GSUdfQVRBUklfRkxPUFBZPXlcXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWc6Mjc3OkNPTkZJR19CTEtfREVWX1NXSU09bVxcbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZy0yNzgtQ09ORklHX0FNSUdBX1oyUkFNPXlcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZz02MT1jb25maWcgTUFDX0ZMT1BQWVxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTY3LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzo2ODpjb25maWcgQkxLX0RFVl9TV0lNXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTY5LVxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IGZvciBTV0lNIE1hY2ludG9zaCBmbG9wcHlcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTEyPW9iai0kKENPTkZJR19NQUNfRkxPUFBZKVxcdCs9IHN3aW0zLm9cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19CTEtfREVWX1NXSU0pXFx0Kz0gc3dpbV9tb2Qub1xcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtMTQtb2JqLSQoQ09ORklHX0JMS19ERVZfRkQpXFx0Kz0gZmxvcHB5Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTU6Mjc6MDYuMTc3MDM3NjQxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2ODE1NTQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiBoZXJlLlxuXG4qKkFuYWx5emluZyB0aGUgQkxLX0RFVl9TV0lNIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gdGhlIHN5c3RlbSdzIGNvbmZpZ3VyZWQgd2l0aCBgQkxLX0RFVl9TV0lNYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBsZXQncyBzZWUgd2hhdCBkZXBlbmRzIG9uIHRoYXQuIEkga25vdyBLY29uZmlnIGlzIHRoZSBwbGFjZSB0byBzdGFydCwgc28gSSdsbCBqdW1wIHJpZ2h0IGludG8gYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlbGF0ZWQgdG8gYEJMS19ERVZfU1dJTWAuIE1heWJlIGl0IHJlbGllcyBvbiBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIG9yIG90aGVyIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIG9yIGFueSBwcmVyZXF1aXNpdGVzIHRoYXQgYXJlIGVuZm9yY2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg3NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE1OjI3OjEwLjU0NTE5ODE3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTQ4NjAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9TV0lNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWc9NjE9Y29uZmlnIE1BQ19GTE9QUFlcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy02Ny1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6Njg6Y29uZmlnIEJMS19ERVZfU1dJTVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy02OS1cXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCBmb3IgU1dJTSBNYWNpbnRvc2ggZmxvcHB5XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNToyNzoxMC42NTA2OTAwMzhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjUxNzgwMTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9uIGlzIHN0cnVjdHVyZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGhlYWQgc3RyYWlnaHQgaW50byB0aGUgc291cmNlIGFuZCBzZWUgdGhlIGFjdHVhbCBLY29uZmlnIGZpbGUuIExldCdzIHN0YXJ0IHdpdGggYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AsIGFuZCBteSBpbnN0aW5jdCB0ZWxscyBtZSB0byB6b29tIGluIGFyb3VuZCBsaW5lIDY4LiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGRlcGVuZGVuY2llcyBhbmQgb3B0aW9ucyBhdmFpbGFibGUgZm9yIGNvbmZpZ3VyaW5nIGJsb2NrIGRldmljZXMuIEkgZXhwZWN0IHRvIGdldCBhIHNlbnNlIG9mIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIHN5bWJvbHMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgaGVscCB0ZXh0IHJpZ2h0IGFyb3VuZCB0aGVyZS4gVGhpcyBzaG91bGQgcXVpY2tseSBvcmllbnQgbWUgdG8gdGhlIGNvcmUgYmxvY2sgZGV2aWNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE3NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE1OjI3OjE0LjkwMjQ3Mjg1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRcXG4gIDYxOlxcdGNvbmZpZyBNQUNfRkxPUFBZXFxuICA2MjpcXHRcXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCBmb3IgUG93ZXJNYWMgZmxvcHB5XFxcIlxcbiAgNjM6XFx0XFx0ZGVwZW5kcyBvbiBQUENfUE1BQyBcXHUwMDI2XFx1MDAyNiAhUFBDX1BNQUM2NFxcbiAgNjQ6XFx0XFx0aGVscFxcbiAgNjU6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIFNXSU0tMyAoU3VwZXIgV296IEludGVncmF0ZWQgTWFjaGluZSAzOyBmcm9tIEFwcGxlKVxcbiAgNjY6XFx0XFx0ICBmbG9wcHkgY29udHJvbGxlciwgc2F5IFkgaGVyZS4gTW9zdCBjb21tb25seSBmb3VuZCBpbiBQb3dlck1hY3MuXFxuICA2NzpcXHRcXG4gIDY4OlxcdGNvbmZpZyBCTEtfREVWX1NXSU1cXG4gIDY5OlxcdFxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IGZvciBTV0lNIE1hY2ludG9zaCBmbG9wcHlcXFwiXFxuICA3MDpcXHRcXHRkZXBlbmRzIG9uIE02OEsgXFx1MDAyNlxcdTAwMjYgTUFDIFxcdTAwMjZcXHUwMDI2ICFISUdITUVNXFxuICA3MTpcXHRcXHRoZWxwXFxuICA3MjpcXHRcXHQgIFlvdSBzaG91bGQgc2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IGZsb3BweSBzdXBwb3J0XFxuICA3MzpcXHRcXHQgIGFuZCB5b3UgZG9uJ3QgaGF2ZSBhIElJLCBJSWZ4LCBROTAwLCBROTUwIG9yIEFWIHNlcmllcy5cXG4gIDc0OlxcdFxcbiAgNzU6XFx0Y29uZmlnIEFNSUdBX1oyUkFNXFxuICA3NjpcXHRcXHR0cmlzdGF0ZSBcXFwiQW1pZ2EgWm9ycm8gSUkgcmFtZGlzayBzdXBwb3J0XFxcIlxcbiAgNzc6XFx0XFx0ZGVwZW5kcyBvbiBaT1JST1xcbiAgNzg6XFx0XFx0aGVscFxcbiAgNzk6XFx0XFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdXNpbmcgQ2hpcCBSQU0gYW5kIFpvcnJvIElJIFJBTSBhcyBhXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE1OjI3OjE0LjkwMjYxODQ5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUzNTYzNjAyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqU1dJTSBGbG9wcHkgRHJpdmVyIEFuYWx5c2lzIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggdG91Y2hpbmcgdGhlIFNXSU0gZmxvcHB5IGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciBtNjhrIE1hY3MuIFRoZSBkZXBlbmRlbmN5IGlzIGBNNjhLIFx1MDAyNlx1MDAyNiBNQUMgXHUwMDI2XHUwMDI2ICFISUdITUVNYCwgbWFraW5nIGl0IGFyY2hpdGVjdHVyZS1zcGVjaWZpYy4gQ3J1Y2lhbGx5LCBRRU1VIHN1cHBvcnRzIGEgYHE4MDBgIG1hY2hpbmUsIHdoaWNoIGlzIGEgTWFjIFF1YWRyYSA4MDAuIFRoaXMgaXMgYSBzb2xpZCBpbmRpY2F0b3IgdGhhdCB0aGlzIGRyaXZlciBpcyAqcmVhY2hhYmxlKiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCB3aGljaCBpcyBleGNlbGxlbnQgbmV3cyBmb3IgdXMuIFdoaWxlIHN5emthbGxlciB0eXBpY2FsbHkgdGFyZ2V0cyBhcmNoaXRlY3R1cmVzIGxpa2UgeDg2XzY0LCBBUk02NCwgYW5kIFJJU0MtViwgaXQgZG9lcyBoYXZlIG02OGsgc3VwcG9ydC4gSXQgbWlnaHQgbm90IGJlICphY3RpdmVseSogZnV6emVkIGluIGV2ZXJ5IGluc3RhbmNlLCBidXQgaWYgaXQncyByZWFjaGFibGUgaW4gUUVNVSwgd2UgY2FuIGFic29sdXRlbHkgYXNzdW1lIGl0IGNhbiBiZSB0YXJnZXRlZCBieSBzeXprYWxsZXIuXG5cbklzIHRoZSBkcml2ZXIgaXRzZWxmIHJlYWNoYWJsZT8gSXQgYXBwZWFycyB0byBiZSBhIHBsYXRmb3JtIGRyaXZlciBmb3IgXCJzd2ltLlwiIExldCdzIGNvbmZpcm0gdGhhdCBieSBjaGVja2luZyBgc3dpbV9wcm9iZWAuIFllcCwgaXQncyBhIHBsYXRmb3JtIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciBcInN3aW0sXCIgYW5kIGl0J3MgaW5pdGlhbGl6ZWQgZHVyaW5nIGBtYWNfcGxhdGZvcm1faW5pdGAgaW4gYGFyY2gvbTY4ay9tYWMvY29uZmlnLmNgLiBUaGlzIG1lYW5zIGl0ICp3aWxsKiBiZSBwcm9iZWQgYXQgYm9vdCBpZiB0aGUgaGFyZHdhcmUgaXMgcHJlc2VudC4gVGhlIGRyaXZlciBpcyBleHBvc2luZyBhIGJsb2NrIGRldmljZSwgYW5kIHRoYXQncyBleGFjdGx5IHdoYXQgd2Ugd2FudC4gVGhlIGJsb2NrIGRldmljZSBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIGJ5IGBzd2ltX21xX29wc2AsIHdoaWNoIGludGVybmFsbHkgdXNlcyBgc3dpbV9xdWV1ZV9ycWAuIFRoZXJlIGFyZSBhbHNvIGlvY3RscywgaGFuZGxlZCBieSBgZmxvcHB5X2lvY3RsYC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIFRoaXMgbGlzdCBpcyBhIGdvbGRtaW5lOiBgc3dpbV9mbG9wcHlfaW5pdGAsIGBzd2ltX3Byb2JlYCwgYHN3aW1fYWRkX2Zsb3BweWAsIGBmbG9wcHlfaW9jdGxgLCBgZmxvcHB5X3JlbGVhc2VgLCBgZmxvcHB5X29wZW5gLCBgc2V0dXBfbWVkaXVtYCwgYGdldF9mbG9wcHlfZ2VvbWV0cnlgLCBgc3dpbV9xdWV1ZV9ycWAsIGBmbG9wcHlfcmVhZF9zZWN0b3JzYCwgYHN3aW1fcmVhZF9zZWN0b3JfcmFuZ2VgLCBgZmxvcHB5X2VqZWN0YCwgYHN3aW1fdHJhY2tgLCBgc3dpbV9zZWVrYCwgYHN3aW1fdHJhY2swMGAsIGBzd2ltX3N0ZXBgLCBgc3dpbV9oZWFkYCwgYHN3aW1fZWplY3RgLCBgc3dpbV9tb3RvcmAsIGBzd2ltX2RyaXZlYCwgYHN3aW1fcmVhZGJpdGAsIGBzd2ltX2FjdGlvbmAsIGBzd2ltX3NlbGVjdGAsIGBnZXRfc3dpbV9tb2RlYCwgYHNldF9zd2ltX21vZGVgLCBhbmQgZXZlbiBgc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXJgIGFuZCBgc3dpbV9yZWFkX3NlY3Rvcl9kYXRhYCAoaW4gYXNzZW1ibHkpLlxuXG5TbywgaXMgdGhpcyBkcml2ZXIgd29ydGggZnV6emluZz8gQWJzb2x1dGVseSEgSXQncyBhIGZsb3BweSBkcml2ZXIgZm9yIG02OGsgTWFjcy4gSXQncyBmdW5jdGlvbmFsIGNvcmUgbG9naWMuIEdpdmVuIFFFTVUncyBgcTgwMGAgbWFjaGluZSwgd2hpY2ggaGFzIGEgU1dJTSBmbG9wcHkgY29udHJvbGxlciwgd2UgY2FuIHRhcmdldCBpdC4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSAqRm9jdXNTeW1ib2xzKi4gV2UgbmVlZCB0byBwaW5wb2ludCB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGNyaXRpY2FsIGVudHJ5IHBvaW50cy4gVGhlc2UgYXJlOiBgZmxvcHB5X2lvY3RsYCwgYGZsb3BweV9vcGVuYCwgYGZsb3BweV9yZWxlYXNlYCwgYHN3aW1fcXVldWVfcnFgLCBgZmxvcHB5X3JlYWRfc2VjdG9yc2AsIGBzd2ltX3JlYWRfc2VjdG9yX3JhbmdlYCwgYGZsb3BweV9lamVjdGAsIGBzd2ltX2FkZF9mbG9wcHlgLCBgc3dpbV9mbG9wcHlfaW5pdGAsIGFuZCBgc3dpbV9wcm9iZWAuXG5cbmBzd2ltX3F1ZXVlX3JxYCBpcyBjcnVjaWFsOyBpdCdzIHRoZSBibG9jayBkZXZpY2UgcXVldWUgcmVxdWVzdCBmdW5jdGlvbi4gYGZsb3BweV9pb2N0bGAgaGFuZGxlcyBpb2N0bHMuIGBmbG9wcHlfb3BlbmAgYW5kIGBmbG9wcHlfcmVsZWFzZWAgYXJlIHRoZSBvcGVuL3JlbGVhc2UgaGFuZGxlcnMuICBgc3dpbV9wcm9iZWAgaXMgdGhlIHByb2JlIGZ1bmN0aW9uLlxuXG5XZSBhbHNvIGhhdmUgYSBsb3Qgb2Ygb3RoZXIgZnVuY3Rpb25zIHRoYXQgYXJlIHdvcnRoIGtub3dpbmcgYWJvdXQ6IGBmbG9wcHlfaW9jdGxgLCBgc3dpbV9xdWV1ZV9ycWAsIGBmbG9wcHlfcmVhZF9zZWN0b3JzYCwgYHN3aW1fcmVhZF9zZWN0b3JfcmFuZ2VgLCBgZmxvcHB5X2VqZWN0YCwgYHN3aW1fdHJhY2tgLCBgc3dpbV9zZWVrYCwgYHN3aW1fdHJhY2swMGAsIGBzd2ltX3N0ZXBgLCBgc3dpbV9tb3RvcmAsIGBzd2ltX2RyaXZlYCwgYHN3aW1fYWN0aW9uYCwgYHN3aW1fc2VsZWN0YCwgYHN3aW1fcmVhZF9zZWN0b3JfaGVhZGVyYCwgYW5kIGBzd2ltX3JlYWRfc2VjdG9yX2RhdGFgLlxuXG5Ib3dldmVyLCBgc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXJgIGFuZCBgc3dpbV9yZWFkX3NlY3Rvcl9kYXRhYCBhcmUgaW4gYXNzZW1ibHksIHNvIHRoZXkgbWlnaHQgbm90IGJlIGluc3RydW1lbnRlZCBieSBLQVNBTi9LQ09WLCB3aGljaCBpcyBjcnVjaWFsIGZvciBmdXp6aW5nLiBMZXQncyBmb2N1cyBvbiB0aGUgQyBmdW5jdGlvbnMuXG5cblNvLCBsZXQncyByZWZpbmUgdGhpcyB0byBtYWtlIGl0IGEgYml0IG1vcmUgZm9jdXNlZDogYGZsb3BweV9pb2N0bGAsIGBzd2ltX3F1ZXVlX3JxYCwgYGZsb3BweV9yZWFkX3NlY3RvcnNgLCBgc3dpbV9yZWFkX3NlY3Rvcl9yYW5nZWAsIGBmbG9wcHlfZWplY3RgLCBgc3dpbV90cmFja2AsIGBzd2ltX3NlZWtgLCBgc3dpbV90cmFjazAwYCwgYHN3aW1fc3RlcGAsIGBzd2ltX21vdG9yYCwgYHN3aW1fZHJpdmVgLCBgc3dpbV9hY3Rpb25gLCBgc3dpbVxuXG4iLCJJbnB1dFRva2VucyI6MTg2ODksIk91dHB1dFRva2VucyI6MjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE1OjI3OjQwLjI1ODk4MTM2NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Njc3NDY5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9TV0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3dpbV9xdWV1ZV9ycVwiLFxuICAgIFwiZmxvcHB5X3JlYWRfc2VjdG9yc1wiLFxuICAgIFwic3dpbV9yZWFkX3NlY3Rvcl9yYW5nZVwiLFxuICAgIFwiZmxvcHB5X2lvY3RsXCIsXG4gICAgXCJmbG9wcHlfb3BlblwiLFxuICAgIFwiZmxvcHB5X3JlbGVhc2VcIixcbiAgICBcInN3aW1fcHJvYmVcIixcbiAgICBcInN3aW1fZmxvcHB5X2luaXRcIixcbiAgICBcInN3aW1fYWRkX2Zsb3BweVwiLFxuICAgIFwic2V0dXBfbWVkaXVtXCIsXG4gICAgXCJmbG9wcHlfZWplY3RcIixcbiAgICBcInN3aW1fdHJhY2tcIixcbiAgICBcInN3aW1fc2Vla1wiLFxuICAgIFwic3dpbV90cmFjazAwXCIsXG4gICAgXCJzd2ltX3N0ZXBcIixcbiAgICBcInN3aW1fbW90b3JcIixcbiAgICBcInN3aW1fZHJpdmVcIixcbiAgICBcInN3aW1fYWN0aW9uXCIsXG4gICAgXCJzd2ltX3NlbGVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgU1dJTSBmbG9wcHkgY29udHJvbGxlciBkcml2ZXIgZm9yIG02OGsgTWFjaW50b3NoIHN5c3RlbXMsIGluY2x1ZGluZyBjaGFuZ2VzIHRvIGRldmljZSByZWdpc3RyYXRpb24sIGluaXRpYWxpemF0aW9uLCByZWFkaW5nIHNlY3RvcnMsIGFuZCBoYW5kbGluZyBoYXJkd2FyZSBzdGF0ZS4gVGhlIGRyaXZlciBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSAodXNpbmcgdGhlIGBxODAwYCBtYWNoaW5lKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIGJsb2NrIGRldmljZSBvcGVyYXRpb25zLCBpb2N0bHMsIGFuZCBoYXJkd2FyZSBpbnRlcmFjdGlvbiBmdW5jdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9TV0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3dpbV9xdWV1ZV9ycVwiLFxuICAgIFwiZmxvcHB5X3JlYWRfc2VjdG9yc1wiLFxuICAgIFwic3dpbV9yZWFkX3NlY3Rvcl9yYW5nZVwiLFxuICAgIFwiZmxvcHB5X2lvY3RsXCIsXG4gICAgXCJmbG9wcHlfb3BlblwiLFxuICAgIFwiZmxvcHB5X3JlbGVhc2VcIixcbiAgICBcInN3aW1fcHJvYmVcIixcbiAgICBcInN3aW1fZmxvcHB5X2luaXRcIixcbiAgICBcInN3aW1fYWRkX2Zsb3BweVwiLFxuICAgIFwic2V0dXBfbWVkaXVtXCIsXG4gICAgXCJmbG9wcHlfZWplY3RcIixcbiAgICBcInN3aW1fdHJhY2tcIixcbiAgICBcInN3aW1fc2Vla1wiLFxuICAgIFwic3dpbV90cmFjazAwXCIsXG4gICAgXCJzd2ltX3N0ZXBcIixcbiAgICBcInN3aW1fbW90b3JcIixcbiAgICBcInN3aW1fZHJpdmVcIixcbiAgICBcInN3aW1fYWN0aW9uXCIsXG4gICAgXCJzd2ltX3NlbGVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgU1dJTSBmbG9wcHkgY29udHJvbGxlciBkcml2ZXIgZm9yIG02OGsgTWFjaW50b3NoIHN5c3RlbXMsIGluY2x1ZGluZyBjaGFuZ2VzIHRvIGRldmljZSByZWdpc3RyYXRpb24sIGluaXRpYWxpemF0aW9uLCByZWFkaW5nIHNlY3RvcnMsIGFuZCBoYW5kbGluZyBoYXJkd2FyZSBzdGF0ZS4gVGhlIGRyaXZlciBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSAodXNpbmcgdGhlIGBxODAwYCBtYWNoaW5lKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIGJsb2NrIGRldmljZSBvcGVyYXRpb25zLCBpb2N0bHMsIGFuZCBoYXJkd2FyZSBpbnRlcmFjdGlvbiBmdW5jdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowr868c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-16 14:55:17 +0000 UTC FinishedAt: 2026-07-16 15:27:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "37e2f878a7a660a216cc7a60459995fefd150f25", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_SWIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "37e2f878a7a660a216cc7a60459995fefd150f25", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_SWIM" ], "series_id": "f2acb52f-a55a-470e-a324-b7bfd8dd2e80" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "swim_queue_rq", "floppy_read_sectors", "swim_read_sector_range", "floppy_ioctl", "floppy_open", "floppy_release", "swim_probe", "swim_floppy_init", "swim_add_floppy", "setup_medium", "floppy_eject", "swim_track", "swim_seek", "swim_track00", "swim_step", "swim_motor", "swim_drive", "swim_action", "swim_select" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE1OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfU1dJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3aW1fcXVldWVfcnEmIzM0OywKICAgICYjMzQ7ZmxvcHB5X3JlYWRfc2VjdG9ycyYjMzQ7LAogICAgJiMzNDtzd2ltX3JlYWRfc2VjdG9yX3JhbmdlJiMzNDssCiAgICAmIzM0O2Zsb3BweV9pb2N0bCYjMzQ7LAogICAgJiMzNDtmbG9wcHlfb3BlbiYjMzQ7LAogICAgJiMzNDtmbG9wcHlfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtzd2ltX3Byb2JlJiMzNDssCiAgICAmIzM0O3N3aW1fZmxvcHB5X2luaXQmIzM0OywKICAgICYjMzQ7c3dpbV9hZGRfZmxvcHB5JiMzNDssCiAgICAmIzM0O3NldHVwX21lZGl1bSYjMzQ7LAogICAgJiMzNDtmbG9wcHlfZWplY3QmIzM0OywKICAgICYjMzQ7c3dpbV90cmFjayYjMzQ7LAogICAgJiMzNDtzd2ltX3NlZWsmIzM0OywKICAgICYjMzQ7c3dpbV90cmFjazAwJiMzNDssCiAgICAmIzM0O3N3aW1fc3RlcCYjMzQ7LAogICAgJiMzNDtzd2ltX21vdG9yJiMzNDssCiAgICAmIzM0O3N3aW1fZHJpdmUmIzM0OywKICAgICYjMzQ7c3dpbV9hY3Rpb24mIzM0OywKICAgICYjMzQ7c3dpbV9zZWxlY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBTV0lNIGZsb3BweSBjb250cm9sbGVyIGRyaXZlciBmb3IgbTY4ayBNYWNpbnRvc2ggc3lzdGVtcywgaW5jbHVkaW5nIGNoYW5nZXMgdG8gZGV2aWNlIHJlZ2lzdHJhdGlvbiwgaW5pdGlhbGl6YXRpb24sIHJlYWRpbmcgc2VjdG9ycywgYW5kIGhhbmRsaW5nIGhhcmR3YXJlIHN0YXRlLiBUaGUgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VICh1c2luZyB0aGUgYHE4MDBgIG1hY2hpbmUpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgYmxvY2sgZGV2aWNlIG9wZXJhdGlvbnMsIGlvY3RscywgYW5kIGhhcmR3YXJlIGludGVyYWN0aW9uIGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNToyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM2Y2U0Yzg3ZmJhMDkwNGJlNzkwY2JjYjBkMTJmZWNhMzVjZjUyODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAxNToyNjo1MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL2NvbmZpZy5jIGIvYXJjaC9tNjhrL21hYy9jb25maWcuY1xuaW5kZXggYzAwMzNmODg1ZWQ0ZjAuLmRiYTNkZTIxYzNjNDA1IDEwMDY0NFxuLS0tIGEvYXJjaC9tNjhrL21hYy9jb25maWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9tNjhrL21hYy9jb25maWcuY1xuQEAgLTk4NCw4ICYjNDM7OTg0LDM3IEBAIHN0YXRpYyBpbnQgX19pbml0IG1hY19wbGF0Zm9ybV9pbml0KHZvaWQpXG4gXHRcdFx0LnN0YXJ0ID0gc3dpbV9iYXNlLFxuIFx0XHRcdC5lbmQgICA9IHN3aW1fYmFzZSAmIzQzOyAweDFGRkYsXG4gXHRcdH07XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgZGF0YSA9IDA7XG4mIzQzO1xuJiM0MztcdFx0LyogTW9kZWxzIGluIHRoaXMgbGlzdCBhcmUgc3VwcG9zZWQgdG8gcnVuIEZDTEsgYXQgMzIgTUh6ICovXG4mIzQzO1x0XHRzd2l0Y2ggKG1hY2ludG9zaF9jb25maWctXHUwMDNlaWRlbnQpIHtcbiYjNDM7XHRcdGNhc2UgTUFDX01PREVMX0NDTDpcbiYjNDM7XHRcdGNhc2UgTUFDX01PREVMX0NDTElJOlxuJiM0MztcdFx0Y2FzZSBNQUNfTU9ERUxfTENJSUk6XG4mIzQzO1x0XHRjYXNlIE1BQ19NT0RFTF9RNjA1OlxuJiM0MztcdFx0Y2FzZSBNQUNfTU9ERUxfUTYwNV9BQ0M6XG4mIzQzO1x0XHRjYXNlIE1BQ19NT0RFTF9RNjEwOlxuJiM0MztcdFx0Y2FzZSBNQUNfTU9ERUxfUTYzMDpcbiYjNDM7XHRcdGNhc2UgTUFDX01PREVMX1E2NTA6XG4mIzQzO1x0XHRjYXNlIE1BQ19NT0RFTF9RODAwOlxuJiM0MztcdFx0Y2FzZSBNQUNfTU9ERUxfUDQ2MDpcbiYjNDM7XHRcdGNhc2UgTUFDX01PREVMX1A0NzU6XG4mIzQzO1x0XHRjYXNlIE1BQ19NT0RFTF9QNDc1RjpcbiYjNDM7XHRcdGNhc2UgTUFDX01PREVMX1A1MjA6XG4mIzQzO1x0XHRjYXNlIE1BQ19NT0RFTF9QNTUwOlxuJiM0MztcdFx0Y2FzZSBNQUNfTU9ERUxfUDU3NTpcbiYjNDM7XHRcdGNhc2UgTUFDX01PREVMX1A1ODg6XG4mIzQzO1x0XHRjYXNlIE1BQ19NT0RFTF9UVjpcbiYjNDM7XHRcdGNhc2UgTUFDX01PREVMX0M2MTA6XG4mIzQzO1x0XHRjYXNlIE1BQ19NT0RFTF9DNjUwOlxuJiM0MztcdFx0Y2FzZSBNQUNfTU9ERUxfUEIxOTA6XG4mIzQzO1x0XHRjYXNlIE1BQ19NT0RFTF9QQjUyMDpcbiYjNDM7XHRcdFx0ZGF0YSA9IDE7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuIFxuLVx0XHRwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKFwmIzM0O3N3aW1cJiMzNDssIC0xLCBcdTAwMjZzd2ltX3JzcmMsIDEpO1xuJiM0MztcdFx0cGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3Jlc25kYXRhKE5VTEwsIFwmIzM0O3N3aW1cJiMzNDssIC0xLCBcdTAwMjZzd2ltX3JzcmMsIDEsXG4mIzQzO1x0XHRcdFx0XHRcdCAgXHUwMDI2ZGF0YSwgc2l6ZW9mKGRhdGEpKTtcbiBcdH1cbiBcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zd2ltLmMgYi9kcml2ZXJzL2Jsb2NrL3N3aW0uY1xuaW5kZXggMGNjYzEyYTcyMzg4ZDUuLjQ2MGY3NGMxOWNmZGMyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9zd2ltLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svc3dpbS5jXG5AQCAtMiwxMiAmIzQzOzIsMjAgQEBcbiAvKlxuICAqIERyaXZlciBmb3IgU1dJTSAoU2FuZGVyIFdveiBJbnRlZ3JhdGVkIE1hY2hpbmUpIGZsb3BweSBjb250cm9sbGVyXG4gICpcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwOCBMYXVyZW50IFZpdmllciBcdTAwM2NMYXVyZW50QGx2aXZpZXIuaW5mb1x1MDAzZVxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggTGF1cmVudCBWaXZpZXIgXHUwMDNjTGF1cmVudEBsdml2aWVyLmluZm9cdTAwM2VcbiAgKlxuICAqIGJhc2VkIG9uIEFsYXN0YWlyIEJyaWRnZXdhdGVyIFNXSU0gYW5hbHlzaXMsIDIwMDFcbiAgKiBiYXNlZCBvbiBTV0lNMyBkcml2ZXIgKGMpIFBhdWwgTWFja2VycmFzLCAxOTk2XG4gICogYmFzZWQgb24gbmV0QlNEIElXTSBkcml2ZXIgKGMpIDE5OTcsIDE5OTggSGF1a2UgRmF0aC5cbiAgKlxuJiM0MzsgKiBTZWUgYWxzbzpcbiYjNDM7ICogSW5zaWRlIE1hY2ludG9zaCwgdm9sLiBJSUksIGNoLiAyXG4mIzQzOyAqIGh0dHBzOi8vYXJjaGl2ZS5vcmcvZGV0YWlscy9TV0lNRGVzaWduRG9jc1xuJiM0MzsgKiBORUMgdVBENzIwNzAgRkRDIGRhdGFzaGVldFxuJiM0MzsgKiBta0xpbnV4IHNvdXJjZSBmaWxlIHN3aW1paWljb21tb25oYWwuY1xuJiM0MzsgKiBodHRwOi8vd3d3Lm1hYy5saW51eC1tNjhrLm9yZy9kZXZlbC9pd20ucGhwLmh0bWxcbiYjNDM7ICogTUFNRSBzb3VyY2UgZmlsZSBzb255ZHJpdi5jcHBcbiYjNDM7ICpcbiAgKiAyMDA0LTA4LTIxIChsdikgLSBJbml0aWFsIGltcGxlbWVudGF0aW9uXG4gICogMjAwOC0xMC0zMCAobHYpIC0gUG9ydCB0byAyLjZcbiAgKi9cbkBAIC0xOSw2ICYjNDM7MjcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21ham9yLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaGRyZWcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG5AQCAtNjAsNyAmIzQzOzY5LDcgQEAgc3RydWN0IHN3aW0ge1xuIFx0UkVHKHJlYWRfaGFuZHNoYWtlKVxuIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7XG4gXG4tI2RlZmluZSBzd2ltX3dyaXRlKGJhc2UsIHJlZywgdikgXHRvdXRfOChcdTAwMjYoYmFzZSktXHUwMDNld3JpdGVfIyNyZWcsICh2KSlcbiYjNDM7I2RlZmluZSBzd2ltX3dyaXRlKGJhc2UsIHJlZywgdilcdG91dF84KFx1MDAyNihiYXNlKS1cdTAwM2V3cml0ZV8jI3JlZywgKHYpKVxuICNkZWZpbmUgc3dpbV9yZWFkKGJhc2UsIHJlZylcdFx0aW5fOChcdTAwMjYoYmFzZSktXHUwMDNlcmVhZF8jI3JlZylcbiBcbiAvKiBJV00gcmVnaXN0ZXJzICovXG5AQCAtODQsNjIgJiM0Mzs5Myw1MyBAQCBzdHJ1Y3QgaXdtIHtcbiBcdFJFRyhxN0gpXG4gfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTtcbiBcbi0jZGVmaW5lIGl3bV93cml0ZShiYXNlLCByZWcsIHYpIFx0b3V0XzgoXHUwMDI2KGJhc2UpLVx1MDAzZXJlZywgKHYpKVxuJiM0MzsjZGVmaW5lIGl3bV93cml0ZShiYXNlLCByZWcsIHYpXHRcdG91dF84KFx1MDAyNihiYXNlKS1cdTAwM2VyZWcsICh2KSlcbiAjZGVmaW5lIGl3bV9yZWFkKGJhc2UsIHJlZylcdFx0aW5fOChcdTAwMjYoYmFzZSktXHUwMDNlcmVnKVxuIFxuIC8qIGJpdHMgaW4gcGhhc2UgcmVnaXN0ZXIgKi9cbiBcbi0jZGVmaW5lIFNFRUtfUE9TSVRJVkVcdDB4MDcwXG4tI2RlZmluZSBTRUVLX05FR0FUSVZFXHQweDA3NFxuLSNkZWZpbmUgU1RFUFx0XHQweDA3MVxuLSNkZWZpbmUgTU9UT1JfT05cdDB4MDcyXG4tI2RlZmluZSBNT1RPUl9PRkZcdDB4MDc2XG4tI2RlZmluZSBJTkRFWFx0XHQweDA3M1xuLSNkZWZpbmUgRUpFQ1RcdFx0MHgwNzdcbi0jZGVmaW5lIFNFVE1GTVx0XHQweDE3MVxuLSNkZWZpbmUgU0VUR0NSXHRcdDB4MTc1XG4mIzQzOyNkZWZpbmUgU0VFS19QT1NJVElWRVx0MHgwRjBcbiYjNDM7I2RlZmluZSBTRUVLX05FR0FUSVZFXHQweDBGNFxuJiM0MzsjZGVmaW5lIFNURVBcdFx0MHgwRjFcbiYjNDM7I2RlZmluZSBNT1RPUl9PTlx0MHgwRjJcbiYjNDM7I2RlZmluZSBNT1RPUl9PRkZcdDB4MEY2XG4mIzQzOyNkZWZpbmUgSU5ERVhcdFx0MHgwRjNcbiYjNDM7I2RlZmluZSBFSkVDVFx0XHQweDBGN1xuJiM0MzsjZGVmaW5lIFNFVE1GTVx0XHQweDFGMVxuJiM0MzsjZGVmaW5lIFNFVEdDUlx0XHQweDFGNVxuIFxuLSNkZWZpbmUgUkVMQVhcdFx0MHgwMzNcbi0jZGVmaW5lIExTVFJCXHRcdDB4MDA4XG4mIzQzOyNkZWZpbmUgUkVMQVhcdFx0MHgwRjNcbiYjNDM7I2RlZmluZSBMU1RSQlx0XHQweDBGOFxuIFxuLSNkZWZpbmUgQ0FfTUFTS1x0XHQweDA3N1xuJiM0MzsjZGVmaW5lIENBX01BU0tcdFx0MHgwRjdcbiYjNDM7I2RlZmluZSBTRUxfTUFTS1x0MHgxMDBcbiBcbiAvKiBTZWxlY3QgdmFsdWVzIGZvciBzd2ltX3NlbGVjdCBhbmQgc3dpbV9yZWFkYml0ICovXG4gXG4tI2RlZmluZSBSRUFEX0RBVEFfMFx0MHgwNzRcbi0jZGVmaW5lIE9ORU1FR19EUklWRVx0MHgwNzVcbi0jZGVmaW5lIFNJTkdMRV9TSURFRFx0MHgwNzZcbi0jZGVmaW5lIERSSVZFX1BSRVNFTlRcdDB4MDc3XG4tI2RlZmluZSBESVNLX0lOXHRcdDB4MTcwXG4tI2RlZmluZSBXUklURV9QUk9UXHQweDE3MVxuLSNkZWZpbmUgVFJBQ0tfWkVST1x0MHgxNzJcbi0jZGVmaW5lIFRBQ0hPXHRcdDB4MTczXG4tI2RlZmluZSBSRUFEX0RBVEFfMVx0MHgxNzRcbi0jZGVmaW5lIEdDUl9NT0RFXHQweDE3NVxuLSNkZWZpbmUgU0VFS19DT01QTEVURVx0MHgxNzZcbi0jZGVmaW5lIFRXT01FR19NRURJQVx0MHgxNzdcbiYjNDM7I2RlZmluZSBTVEVQUElOR1x0MHgwRjFcbiYjNDM7I2RlZmluZSBSRUFEX0RBVEFfMFx0MHgwRjRcbiYjNDM7I2RlZmluZSBPTkVNRUdfRFJJVkVcdDB4MEY1XG4mIzQzOyNkZWZpbmUgU0lOR0xFX1NJREVEXHQweDBGNlxuJiM0MzsjZGVmaW5lIERSSVZFX1BSRVNFTlRcdDB4MEY3XG4mIzQzOyNkZWZpbmUgRElTS19JTlx0XHQweDFGMFxuJiM0MzsjZGVmaW5lIFdSSVRFX1BST1RcdDB4MUYxXG4mIzQzOyNkZWZpbmUgVFJBQ0tfWkVST1x0MHgxRjJcbiYjNDM7I2RlZmluZSBUQUNIT1x0XHQweDFGM1xuJiM0MzsjZGVmaW5lIFJFQURfREFUQV8xXHQweDFGNFxuJiM0MzsjZGVmaW5lIEdDUl9NT0RFXHQweDFGNVxuJiM0MzsjZGVmaW5lIFJFQURZXHRcdDB4MUY2XG4mIzQzOyNkZWZpbmUgVFdPTUVHX01FRElBXHQweDFGN1xuIFxuIC8qIEJpdHMgaW4gaGFuZHNoYWtlIHJlZ2lzdGVyICovXG4gXG4tI2RlZmluZSBNQVJLX0JZVEVcdDB4MDFcbi0jZGVmaW5lIENSQ19aRVJPXHQweDAyXG4tI2RlZmluZSBSRERBVEFcdFx0MHgwNFxuICNkZWZpbmUgU0VOU0VcdFx0MHgwOFxuLSNkZWZpbmUgTU9URU5cdFx0MHgxMFxuLSNkZWZpbmUgRVJST1JcdFx0MHgyMFxuICNkZWZpbmUgREFUMkJZVEVcdDB4NDBcbiAjZGVmaW5lIERBVDFCWVRFXHQweDgwXG4gXG4gLyogYml0cyBpbiBzZXR1cCByZWdpc3RlciAqL1xuIFxuLSNkZWZpbmUgU19JTlZfV0RBVEFcdDB4MDFcbi0jZGVmaW5lIFNfM181X1NFTEVDVFx0MHgwMlxuLSNkZWZpbmUgU19HQ1JcdFx0MHgwNFxuICNkZWZpbmUgU19GQ0xLX0RJVjJcdDB4MDhcbi0jZGVmaW5lIFNfRVJST1JfQ09SUlx0MHgxMFxuICNkZWZpbmUgU19JQk1fRFJJVkVcdDB4MjBcbi0jZGVmaW5lIFNfR0NSX1dSSVRFXHQweDQwXG4tI2RlZmluZSBTX1RJTUVPVVRcdDB4ODBcbiBcbiAvKiBiaXRzIGluIG1vZGUgcmVnaXN0ZXIgKi9cbiBcbkBAIC0xNDgsMTQgJiM0MzsxNDgsMTMgQEAgc3RydWN0IGl3bSB7XG4gI2RlZmluZSBFTkJMMlx0XHQweDA0XG4gI2RlZmluZSBBQ1RJT05cdFx0MHgwOFxuICNkZWZpbmUgV1JJVEVfTU9ERVx0MHgxMFxuLSNkZWZpbmUgSEVEU0VMXHRcdDB4MjBcbiYjNDM7I2RlZmluZSBJU01fU0VMRUNUXHQweDQwXG4gI2RlZmluZSBNT1RPTlx0XHQweDgwXG4gXG4tLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi1cbiBlbnVtIGRyaXZlX2xvY2F0aW9uIHtcbi1cdElOVEVSTkFMX0RSSVZFID0gMHgwMixcbi1cdEVYVEVSTkFMX0RSSVZFID0gMHgwNCxcbiYjNDM7XHROT19EUklWRSA9IDAsXG4mIzQzO1x0SU5URVJOQUxfRFJJVkUgPSBCSVQoMSksXG4mIzQzO1x0RVhURVJOQUxfRFJJVkUgPSBCSVQoMiksXG4gfTtcbiBcbiBlbnVtIG1lZGlhX3R5cGUge1xuQEAgLTE2OCwyMyAmIzQzOzE2NywyMyBAQCBzdHJ1Y3QgZmxvcHB5X3N0YXRlIHtcbiBcdC8qIHBoeXNpY2FsIHByb3BlcnRpZXMgKi9cbiBcbiBcdGVudW0gZHJpdmVfbG9jYXRpb24gbG9jYXRpb247XHQvKiBpbnRlcm5hbCBvciBleHRlcm5hbCBkcml2ZSAqL1xuLVx0aW50XHRcdCBoZWFkX251bWJlcjtcdC8qIHNpbmdsZS0gb3IgZG91YmxlLXNpZGVkIGRyaXZlICovXG4mIzQzO1x0aW50IGhlYWRfbnVtYmVyO1x0XHQvKiBzaW5nbGUtIG9yIGRvdWJsZS1zaWRlZCBkcml2ZSAqL1xuIFxuIFx0LyogbWVkaWEgKi9cbiBcbi1cdGludFx0XHQgZGlza19pbjtcbi1cdGludFx0XHQgZWplY3RlZDtcbi1cdGVudW0gbWVkaWFfdHlwZVx0IHR5cGU7XG4tXHRpbnRcdFx0IHdyaXRlX3Byb3RlY3RlZDtcbiYjNDM7XHRpbnQgZGlza19pbjtcbiYjNDM7XHRpbnQgZWplY3RlZDtcbiYjNDM7XHRlbnVtIG1lZGlhX3R5cGUgdHlwZTtcbiYjNDM7XHRpbnQgd3JpdGVfcHJvdGVjdGVkO1xuIFxuLVx0aW50XHRcdCB0b3RhbF9zZWNzO1xuLVx0aW50XHRcdCBzZWNwZXJjeWw7XG4tXHRpbnRcdFx0IHNlY3BlcnRyYWNrO1xuJiM0MztcdHVuc2lnbmVkIGludCB0b3RhbF9zZWNzO1xuJiM0MztcdHVuc2lnbmVkIGludCBzZWNwZXJjeWw7XG4mIzQzO1x0dW5zaWduZWQgaW50IHNlY3BlcnRyYWNrO1xuIFxuIFx0LyogaW4tdXNlIGluZm9ybWF0aW9uICovXG4gXG4tXHRpbnRcdFx0dHJhY2s7XG4tXHRpbnRcdFx0cmVmX2NvdW50O1xuJiM0MztcdGludCB0cmFjaztcbiYjNDM7XHRpbnQgcmVmX2NvdW50O1xuIFx0Ym9vbCByZWdpc3RlcmVkO1xuIFxuIFx0c3RydWN0IGdlbmRpc2sgKmRpc2s7XG5AQCAtMjA5LDcgJiM0MzsyMDgsNiBAQCBlbnVtIGhlYWQge1xuIFxuIHN0cnVjdCBzd2ltX3ByaXYge1xuIFx0c3RydWN0IHN3aW0gX19pb21lbSAqYmFzZTtcbi1cdHNwaW5sb2NrX3QgbG9jaztcbiBcdGludCBmbG9wcHlfY291bnQ7XG4gXHRzdHJ1Y3QgZmxvcHB5X3N0YXRlIHVuaXRbRkRfTUFYX1VOSVRdO1xuIH07XG5AQCAtMjIwLDIwICYjNDM7MjE4LDI0IEBAIGV4dGVybiBpbnQgc3dpbV9yZWFkX3NlY3Rvcl9kYXRhKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsXG4gXHRcdFx0XHQgdW5zaWduZWQgY2hhciAqZGF0YSk7XG4gXG4gc3RhdGljIERFRklORV9NVVRFWChzd2ltX211dGV4KTtcbi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3N3aW1fbW9kZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgZW5hYmxlKVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc2V0X3N3aW1fbW9kZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgZW5hYmxlKVxuIHtcbi1cdHN0cnVjdCBpd20gX19pb21lbSAqaXdtX2Jhc2U7XG4mIzQzO1x0c3RydWN0IGl3bSBfX2lvbWVtICppd21fYmFzZSA9IChzdHJ1Y3QgaXdtIF9faW9tZW0gKiliYXNlO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGlmICghZW5hYmxlKSB7XG4tXHRcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIDB4ZjgpO1xuJiM0MztcdFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgQUNUSU9OKTtcbiYjNDM7XHRcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIEVOQkwxIHwgRU5CTDIgfCBNT1RPTik7XG4mIzQzO1x0XHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBJU01fU0VMRUNUKTtcbiYjNDM7XHRcdGl3bV9yZWFkKGl3bV9iYXNlLCBxN0wpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpd21fYmFzZSA9IChzdHJ1Y3QgaXdtIF9faW9tZW0gKiliYXNlO1xuIFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuIFxuIFx0aXdtX3JlYWQoaXdtX2Jhc2UsIHE3TCk7XG4mIzQzO1x0aXdtX3JlYWQoaXdtX2Jhc2UsIHE2TCk7XG4gXHRpd21fcmVhZChpd21fYmFzZSwgbXRyT2ZmKTtcbiBcdGl3bV9yZWFkKGl3bV9iYXNlLCBxNkgpO1xuIFxuQEAgLTI0NSw3ICYjNDM7MjQ3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9zd2ltX21vZGUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IGVuYWJsZSlcbiBcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZ2V0X3N3aW1fbW9kZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKVxuJiM0MztzdGF0aWMgaW50IGdldF9zd2ltX21vZGUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuQEAgLTI3MSw3ICYjNDM7MjczLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHN3aW1fc2VsZWN0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBzZWwpXG4ge1xuIFx0c3dpbV93cml0ZShiYXNlLCBwaGFzZSwgUkVMQVgpO1xuIFxuLVx0dmlhMV9zZXRfaGVhZChzZWwgXHUwMDI2IDB4MTAwKTtcbiYjNDM7XHR2aWExX3NldF9oZWFkKHNlbCBcdTAwMjYgU0VMX01BU0spO1xuIFxuIFx0c3dpbV93cml0ZShiYXNlLCBwaGFzZSwgc2VsIFx1MDAyNiBDQV9NQVNLKTtcbiB9XG5AQCAtMjg0LDE1ICYjNDM7Mjg2LDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX2FjdGlvbihzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgYWN0aW9uKVxuIFxuIFx0c3dpbV9zZWxlY3QoYmFzZSwgYWN0aW9uKTtcbiBcdHVkZWxheSgxKTtcbi1cdHN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIChMU1RSQlx1MDAzY1x1MDAzYzQpIHwgTFNUUkIpO1xuLVx0dWRlbGF5KDEpO1xuLVx0c3dpbV93cml0ZShiYXNlLCBwaGFzZSwgKExTVFJCXHUwMDNjXHUwMDNjNCkgfCAoKH5MU1RSQikgXHUwMDI2IDB4MEYpKTtcbiYjNDM7XHRzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCBhY3Rpb24gfCBMU1RSQik7XG4mIzQzO1x0dWRlbGF5KDIpO1xuJiM0MztcdHN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIGFjdGlvbik7XG4gXHR1ZGVsYXkoMSk7XG4gXG4gXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHN3aW1fcmVhZGJpdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgYml0KVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc3dpbV9yZWFkYml0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBiaXQpXG4ge1xuIFx0aW50IHN0YXQ7XG4gXG5AQCAtMzA1LDEyNSAmIzQzOzMwNywxMTkgQEAgc3RhdGljIGlubGluZSBpbnQgc3dpbV9yZWFkYml0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBiaXQpXG4gXHRyZXR1cm4gKHN0YXQgXHUwMDI2IFNFTlNFKSA9PSAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9kcml2ZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLFxuJiM0MzsjZGVmaW5lIHN3aW1fcmVhZGJpdF90aW1lb3V0KGJhc2UsIGJpdCwgdmFsLCB0aW1lb3V0X3VzKSBcXFxuJiM0MztcdHBvbGxfdGltZW91dF91cygsIHN3aW1fcmVhZGJpdChiYXNlLCBiaXQpID09IHZhbCwgMTAwMCwgdGltZW91dF91cywgZmFsc2UpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIHN3aW1fcmVhZGJpdF90aW1lb3V0X2F0b21pYyhiYXNlLCBiaXQsIHZhbCwgdGltZW91dF91cykgXFxcbiYjNDM7XHRwb2xsX3RpbWVvdXRfdXNfYXRvbWljKCwgc3dpbV9yZWFkYml0KGJhc2UsIGJpdCkgPT0gdmFsLCAxLCB0aW1lb3V0X3VzLCBmYWxzZSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgc3dpbV9SRUFEWV90aW1lb3V0KGJhc2UpIFxcXG4mIzQzOyh7IFxcXG4mIzQzO1x0aW50IHJldCA9IHN3aW1fcmVhZGJpdF90aW1lb3V0KGJhc2UsIFJFQURZLCB0cnVlLCAxMDAwICogMTAwMCk7IFxcXG4mIzQzO1x0aWYgKHJldCkgXFxcbiYjNDM7XHRcdHByaW50ayhLRVJOX0RFQlVHIFwmIzM0OyVzOiBkcml2ZSBub3QgcmVhZHlcXG5cJiMzNDssIF9fZnVuY19fKTsgXFxcbiYjNDM7XHRyZXQ7IFxcXG4mIzQzO30pXG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzd2ltX2RyaXZlKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsXG4gXHRcdFx0ICAgICAgZW51bSBkcml2ZV9sb2NhdGlvbiBsb2NhdGlvbilcbiB7XG4gXHRpZiAobG9jYXRpb24gPT0gSU5URVJOQUxfRFJJVkUpIHtcbiBcdFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgRVhURVJOQUxfRFJJVkUpOyAvKiBjbGVhciBkcml2ZSAxIGJpdCAqL1xuIFx0XHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUxLCBJTlRFUk5BTF9EUklWRSk7IC8qIHNldCBkcml2ZSAwIGJpdCAqL1xuJiM0MztcdFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMSwgTU9UT04pO1xuIFx0fSBlbHNlIGlmIChsb2NhdGlvbiA9PSBFWFRFUk5BTF9EUklWRSkge1xuIFx0XHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBJTlRFUk5BTF9EUklWRSk7IC8qIGNsZWFyIGRyaXZlIDAgYml0ICovXG4gXHRcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTEsIEVYVEVSTkFMX0RSSVZFKTsgLyogc2V0IGRyaXZlIDEgYml0ICovXG4mIzQzO1x0XHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUxLCBNT1RPTik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIElOVEVSTkFMX0RSSVZFKTtcbiYjNDM7XHRcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIEVYVEVSTkFMX0RSSVZFKTtcbiYjNDM7XHRcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIE1PVE9OKTtcbiBcdH1cbiYjNDM7XHR1ZGVsYXkoMSk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX21vdG9yKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsXG4tXHRcdFx0ICAgICAgZW51bSBtb3Rvcl9hY3Rpb24gYWN0aW9uKVxuJiM0MztzdGF0aWMgdm9pZCBzd2ltX21vdG9yKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsXG4mIzQzO1x0XHQgICAgICAgZW51bSBtb3Rvcl9hY3Rpb24gYWN0aW9uKVxuIHtcbiBcdGlmIChhY3Rpb24gPT0gT04pIHtcbi1cdFx0aW50IGk7XG4tXG4gXHRcdHN3aW1fYWN0aW9uKGJhc2UsIE1PVE9SX09OKTtcbi1cbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgMipIWjsgaSYjNDM7JiM0MzspIHtcbi1cdFx0XHRzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7XG4tXHRcdFx0aWYgKHN3aW1fcmVhZGJpdChiYXNlLCBNT1RPUl9PTikpXG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xuLVx0XHRcdHNjaGVkdWxlX3RpbWVvdXQoMSk7XG4tXHRcdH1cbiYjNDM7XHRcdHN3aW1fcmVhZGJpdF90aW1lb3V0KGJhc2UsIE1PVE9SX09OLCB0cnVlLCAyMDAwICogMTAwMCk7XG4gXHR9IGVsc2UgaWYgKGFjdGlvbiA9PSBPRkYpIHtcbiBcdFx0c3dpbV9hY3Rpb24oYmFzZSwgTU9UT1JfT0ZGKTtcbi1cdFx0c3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpO1xuJiM0MztcdFx0c3dpbV93cml0ZShiYXNlLCBwaGFzZSwgUkVMQVgpO1xuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9lamVjdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKVxuJiM0MztzdGF0aWMgdm9pZCBzd2ltX2VqZWN0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpXG4ge1xuLVx0aW50IGk7XG4tXG4gXHRzd2ltX2FjdGlvbihiYXNlLCBFSkVDVCk7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAyKkhaOyBpJiM0MzsmIzQzOykge1xuLVx0XHRzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7XG4tXHRcdGlmICghc3dpbV9yZWFkYml0KGJhc2UsIERJU0tfSU4pKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xuLVx0XHRzY2hlZHVsZV90aW1lb3V0KDEpO1xuLVx0fVxuLVx0c3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpO1xuJiM0MztcdHN3aW1fcmVhZGJpdF90aW1lb3V0KGJhc2UsIERJU0tfSU4sIGZhbHNlLCAyMDAwICogMTAwMCk7XG4mIzQzO1x0bXNsZWVwKDEpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9oZWFkKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGVudW0gaGVhZCBoZWFkKVxuIHtcbi1cdC8qIHdhaXQgZHJpdmUgaXMgcmVhZHkgKi9cbi1cbiBcdGlmIChoZWFkID09IFVQUEVSX0hFQUQpXG4gXHRcdHN3aW1fc2VsZWN0KGJhc2UsIFJFQURfREFUQV8xKTtcbiBcdGVsc2UgaWYgKGhlYWQgPT0gTE9XRVJfSEVBRClcbiBcdFx0c3dpbV9zZWxlY3QoYmFzZSwgUkVBRF9EQVRBXzApO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzd2ltX3N0ZXAoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSlcbiYjNDM7c3RhdGljIGludCBzd2ltX3N0ZXAoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSlcbiB7XG4tXHRpbnQgd2FpdDtcbi1cbiBcdHN3aW1fYWN0aW9uKGJhc2UsIFNURVApO1xuLVxuLVx0Zm9yICh3YWl0ID0gMDsgd2FpdCBcdTAwM2MgSFo7IHdhaXQmIzQzOyYjNDM7KSB7XG4tXG4tXHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XG4tXHRcdHNjaGVkdWxlX3RpbWVvdXQoMSk7XG4tXG4tXHRcdHN3aW1fc2VsZWN0KGJhc2UsIFJFTEFYKTtcbi1cdFx0aWYgKCFzd2ltX3JlYWRiaXQoYmFzZSwgU1RFUCkpXG4tXHRcdFx0cmV0dXJuIDA7XG4tXHR9XG4tXHRyZXR1cm4gLTE7XG4mIzQzO1x0dWRlbGF5KDE1MCk7XG4mIzQzO1x0cmV0dXJuIHN3aW1fcmVhZGJpdF90aW1lb3V0X2F0b21pYyhiYXNlLCBTVEVQUElORywgZmFsc2UsIDIwICogMTAwMCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHN3aW1fdHJhY2swMChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKVxuJiM0MztzdGF0aWMgaW50IHN3aW1fdHJhY2swMChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKVxuIHtcbiBcdGludCB0cnk7XG4gXG4gXHRzd2ltX2FjdGlvbihiYXNlLCBTRUVLX05FR0FUSVZFKTtcbiBcbiBcdGZvciAodHJ5ID0gMDsgdHJ5IFx1MDAzYyAxMDA7IHRyeSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdG1zbGVlcCgzKTtcbiBcbi1cdFx0c3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpO1xuIFx0XHRpZiAoc3dpbV9yZWFkYml0KGJhc2UsIFRSQUNLX1pFUk8pKVxuLVx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0aWYgKHN3aW1fc3RlcChiYXNlKSlcbi1cdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0aWYgKHN3aW1fcmVhZGJpdChiYXNlLCBUUkFDS19aRVJPKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4mIzQzO1x0cHJfZXJyKFwmIzM0O3N3aW06IHRyYWNrIHplcm8gcmVjYWxpYnJhdGlvbiBmYWlsZWRcXG5cJiMzNDspO1xuIFx0cmV0dXJuIC0xO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzd2ltX3NlZWsoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IHN0ZXApXG4mIzQzO3N0YXRpYyBpbnQgc3dpbV9zZWVrKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBzdGVwKVxuIHtcbi1cdGlmIChzdGVwID09IDApXG4tXHRcdHJldHVybiAwO1xuLVxuIFx0aWYgKHN0ZXAgXHUwMDNjIDApIHtcbiBcdFx0c3dpbV9hY3Rpb24oYmFzZSwgU0VFS19ORUdBVElWRSk7XG4gXHRcdHN0ZXAgPSAtc3RlcDtcbi1cdH0gZWxzZVxuJiM0MztcdH0gZWxzZSBpZiAoc3RlcCBcdTAwM2UgMClcbiBcdFx0c3dpbV9hY3Rpb24oYmFzZSwgU0VFS19QT1NJVElWRSk7XG4mIzQzO1x0dWRlbGF5KDEpO1xuJiM0MztcbiYjNDM7XHRzd2ltX1JFQURZX3RpbWVvdXQoYmFzZSk7XG4mIzQzO1xuJiM0MztcdGlmIChzdGVwID09IDApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcbi1cdGZvciAoIDsgc3RlcCBcdTAwM2UgMDsgc3RlcC0tKSB7XG4mIzQzO1x0Zm9yICg7IHN0ZXAgXHUwMDNlIDA7IHN0ZXAtLSkge1xuIFx0XHRpZiAoc3dpbV9zdGVwKGJhc2UpKVxuIFx0XHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbiYjNDM7XHRtc2xlZXAoMzApO1xuJiM0MztcdHN3aW1fUkVBRFlfdGltZW91dChiYXNlKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc3dpbV90cmFjayhzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcywgIGludCB0cmFjaylcbiYjNDM7c3RhdGljIGludCBzd2ltX3RyYWNrKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzLCBpbnQgdHJhY2spXG4ge1xuIFx0c3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLVx1MDAzZXN3ZC1cdTAwM2ViYXNlO1xuIFx0aW50IHJldDtcbkBAIC00NDUsOCAmIzQzOzQ0MSwxMCBAQCBzdGF0aWMgaW50IGZsb3BweV9lamVjdChzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcylcbiBcdHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy1cdTAwM2Vzd2QtXHUwMDNlYmFzZTtcbiBcbiBcdHN3aW1fZHJpdmUoYmFzZSwgZnMtXHUwMDNlbG9jYXRpb24pO1xuJiM0MztcdHN3aW1fdHJhY2soZnMsIDEpO1xuIFx0c3dpbV9tb3RvcihiYXNlLCBPRkYpO1xuIFx0c3dpbV9lamVjdChiYXNlKTtcbiYjNDM7XHRzd2ltX2RyaXZlKGJhc2UsIE5PX0RSSVZFKTtcbiBcbiBcdGZzLVx1MDAzZWRpc2tfaW4gPSAwO1xuIFx0ZnMtXHUwMDNlZWplY3RlZCA9IDE7XG5AQCAtNDU0LDcwICYjNDM7NDUyLDgxIEBAIHN0YXRpYyBpbnQgZmxvcHB5X2VqZWN0KHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHN3aW1fcmVhZF9zZWN0b3Ioc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsXG4tXHRcdFx0XHQgICBpbnQgc2lkZSwgaW50IHRyYWNrLFxuLVx0XHRcdFx0ICAgaW50IHNlY3RvciwgdW5zaWduZWQgY2hhciAqYnVmZmVyKVxuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHN3aW1fcmVhZF9zZWN0b3JfcmFuZ2Uoc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsXG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgc2lkZSwgdW5zaWduZWQgaW50IHRyYWNrLFxuJiM0MztcdFx0XHRcdFx0dW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgY291bnQsXG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBjaGFyICpidWZmZXIpXG4ge1xuIFx0c3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLVx1MDAzZXN3ZC1cdTAwM2ViYXNlO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHN0cnVjdCBzZWN0b3JfaGVhZGVyIGhlYWRlcjtcbi1cdGludCByZXQgPSAtMTtcbi1cdHNob3J0IGk7XG4tXG4tXHRzd2ltX3RyYWNrKGZzLCB0cmFjayk7XG4mIzQzO1x0aW50IGksIGJpdHMgPSAwO1xuIFxuLVx0c3dpbV93cml0ZShiYXNlLCBtb2RlMSwgTU9UT04pO1xuLVx0c3dpbV9oZWFkKGJhc2UsIHNpZGUpO1xuLVx0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgc2lkZSk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgMTg7IGkmIzQzOyYjNDM7KSB7IC8qIEEgdHJhY2sgaGFzIGF0IG1vc3QgMTggc2VjdG9ycyAqL1xuJiM0MztcdFx0aWYgKGkgXHUwMDNlPSBjb3VudClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRiaXRzIHw9IEJJVChpKTtcbiYjNDM7XHR9XG4gXG4gXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAzNjsgaSYjNDM7JiM0MzspIHtcbi1cdFx0cmV0ID0gc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXIoYmFzZSwgXHUwMDI2aGVhZGVyKTtcbi1cdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IChoZWFkZXIuc2VjdG9yID09IHNlY3RvcikpIHtcbi1cdFx0XHQvKiBmb3VuZCAqL1xuLVxuLVx0XHRcdHJldCA9IHN3aW1fcmVhZF9zZWN0b3JfZGF0YShiYXNlLCBidWZmZXIpO1xuJiM0MztcdFx0aWYgKGJpdHMgPT0gMCkgLyogQWxsIGNvdW50IHNlY3RvcnMgd2VyZSByZWFkIG9rICovXG4gXHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHN3aW1fcmVhZF9zZWN0b3JfaGVhZGVyKGJhc2UsIFx1MDAyNmhlYWRlcikgfHxcbiYjNDM7XHRcdCAgICBzd2ltX3JlYWQoYmFzZSwgZXJyb3IpIHx8IGhlYWRlci50cmFjayAhPSB0cmFjayB8fFxuJiM0MztcdFx0ICAgIGhlYWRlci5zaWRlICE9IHNpZGUgfHwgaGVhZGVyLnNpemUgIT0gMilcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGhlYWRlci5zZWN0b3IgXHUwMDNlPSBzdGFydCBcdTAwMjZcdTAwMjYgaGVhZGVyLnNlY3RvciBcdTAwM2Mgc3RhcnQgJiM0MzsgY291bnQpIHtcbiYjNDM7XHRcdFx0dW5zaWduZWQgaW50IG9mZnNldCA9IGhlYWRlci5zZWN0b3IgLSBzdGFydDtcbiYjNDM7XHRcdFx0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICgoYml0cyBcdTAwMjYgQklUKG9mZnNldCkpID09IDApXG4mIzQzO1x0XHRcdFx0Y29udGludWU7IC8qIFRoaXMgc2VjdG9yIHdhcyBhbHJlYWR5IHJlYWQgb2sgKi9cbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHN3aW1fcmVhZF9zZWN0b3JfZGF0YShiYXNlLCBidWZmZXIgJiM0MzsgNTEyICogb2Zmc2V0KTtcbiYjNDM7XHRcdFx0aWYgKHJldCA9PSA1MTIgXHUwMDI2XHUwMDI2IHN3aW1fcmVhZChiYXNlLCBlcnJvcikgPT0gMClcbiYjNDM7XHRcdFx0XHRiaXRzIFx1MDAyNj0gfkJJVChvZmZzZXQpO1xuIFx0XHR9XG4gXHR9XG4gXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gXG4tXHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBNT1RPTik7XG4tXG4tXHRpZiAoKGhlYWRlci5zaWRlICE9IHNpZGUpICB8fCAoaGVhZGVyLnRyYWNrICE9IHRyYWNrKSB8fFxuLVx0ICAgICAoaGVhZGVyLnNlY3RvciAhPSBzZWN0b3IpKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0dXJuIGJpdHMgPyBmZnMoYml0cykgLSAxIDogY291bnQ7IC8qIE5vLiBvZiBjb250aWd1b3VzIG9rIHNlY3RvcnMgKi9cbiB9XG4gXG4gc3RhdGljIGJsa19zdGF0dXNfdCBmbG9wcHlfcmVhZF9zZWN0b3JzKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzLFxuLVx0XHRcdCAgICAgICBpbnQgcmVxX3NlY3RvciwgaW50IHNlY3RvcnNfbmIsXG4tXHRcdFx0ICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcilcbiYjNDM7XHRcdFx0XHRcdHVuc2lnbmVkIGludCByZXFfc2VjdG9yLFxuJiM0MztcdFx0XHRcdFx0dW5zaWduZWQgaW50IHNlY3RvcnNfbmIsXG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBjaGFyICpidWZmZXIpXG4ge1xuIFx0c3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLVx1MDAzZXN3ZC1cdTAwM2ViYXNlO1xuLVx0aW50IHJldDtcbi1cdGludCBzaWRlLCB0cmFjaywgc2VjdG9yO1xuLVx0aW50IGksIHRyeTtcbi1cbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmFpbHVyZXMgPSAwO1xuIFxuIFx0c3dpbV9kcml2ZShiYXNlLCBmcy1cdTAwM2Vsb2NhdGlvbik7XG4tXHRmb3IgKGkgPSByZXFfc2VjdG9yOyBpIFx1MDAzYyByZXFfc2VjdG9yICYjNDM7IHNlY3RvcnNfbmI7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGludCB4O1xuLVx0XHR0cmFjayA9IGkgLyBmcy1cdTAwM2VzZWNwZXJjeWw7XG4tXHRcdHggPSBpICUgZnMtXHUwMDNlc2VjcGVyY3lsO1xuLVx0XHRzaWRlID0geCAvIGZzLVx1MDAzZXNlY3BlcnRyYWNrO1xuLVx0XHRzZWN0b3IgPSB4ICUgZnMtXHUwMDNlc2VjcGVydHJhY2sgJiM0MzsgMTtcbi1cbi1cdFx0dHJ5ID0gNTtcbi1cdFx0ZG8ge1xuLVx0XHRcdHJldCA9IHN3aW1fcmVhZF9zZWN0b3IoZnMsIHNpZGUsIHRyYWNrLCBzZWN0b3IsXG4tXHRcdFx0XHRcdFx0YnVmZmVyKTtcbi1cdFx0XHRpZiAodHJ5LS0gPT0gMClcbi1cdFx0XHRcdHJldHVybiBCTEtfU1RTX0lPRVJSO1xuLVx0XHR9IHdoaWxlIChyZXQgIT0gNTEyKTtcbi1cbi1cdFx0YnVmZmVyICYjNDM7PSByZXQ7XG4mIzQzO1x0c3dpbV9SRUFEWV90aW1lb3V0KGJhc2UpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoc2VjdG9yc19uYikge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IGN5bCwgeCwgaGVhZCwgc2VjdG9yLCBuLCByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Y3lsID0gcmVxX3NlY3RvciAvIGZzLVx1MDAzZXNlY3BlcmN5bDtcbiYjNDM7XHRcdHggPSByZXFfc2VjdG9yICUgZnMtXHUwMDNlc2VjcGVyY3lsO1xuJiM0MztcdFx0aGVhZCA9ICh4IFx1MDAzZT0gZnMtXHUwMDNlc2VjcGVydHJhY2spID8gMSA6IDA7XG4mIzQzO1x0XHRzZWN0b3IgPSB4ICUgZnMtXHUwMDNlc2VjcGVydHJhY2s7XG4mIzQzO1x0XHRuID0gbWluKHNlY3RvcnNfbmIsIGZzLVx1MDAzZXNlY3BlcnRyYWNrIC0gc2VjdG9yKTtcbiYjNDM7XG4mIzQzO1x0XHRzd2ltX3RyYWNrKGZzLCBjeWwpO1xuJiM0MztcdFx0c3dpbV9oZWFkKGJhc2UsIGhlYWQpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHN3aW1fcmVhZF9zZWN0b3JfcmFuZ2UoZnMsIGhlYWQsIGN5bCwgc2VjdG9yICYjNDM7IDEsIG4sIGJ1ZmZlcik7XG4mIzQzO1x0XHRpZiAocmV0ICE9IG4pXG4mIzQzO1x0XHRcdCYjNDM7JiM0MztmYWlsdXJlcztcbiYjNDM7XHRcdGlmIChmYWlsdXJlcyBcdTAwM2U9IDUpXG4mIzQzO1x0XHRcdHJldHVybiBCTEtfU1RTX0lPRVJSO1xuJiM0MztcbiYjNDM7XHRcdGJ1ZmZlciAmIzQzOz0gNTEyICogcmV0O1xuJiM0MztcdFx0c2VjdG9yc19uYiAtPSByZXQ7XG4mIzQzO1x0XHRyZXFfc2VjdG9yICYjNDM7PSByZXQ7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC01MjcsMTIgJiM0Mzs1MzYsMTAgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBzd2ltX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgYmxrX21xX3F1ZXVlX2RhdGEgKmJkKVxuIHtcbiBcdHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzID0gaGN0eC1cdTAwM2VxdWV1ZS1cdTAwM2VxdWV1ZWRhdGE7XG4tXHRzdHJ1Y3Qgc3dpbV9wcml2ICpzd2QgPSBmcy1cdTAwM2Vzd2Q7XG4gXHRzdHJ1Y3QgcmVxdWVzdCAqcmVxID0gYmQtXHUwMDNlcnE7XG4gXHRibGtfc3RhdHVzX3QgZXJyO1xuIFxuLVx0aWYgKCFzcGluX3RyeWxvY2tfaXJxKFx1MDAyNnN3ZC1cdTAwM2Vsb2NrKSlcbi1cdFx0cmV0dXJuIEJMS19TVFNfREVWX1JFU09VUkNFO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2c3dpbV9tdXRleCk7XG4gXG4gXHRibGtfbXFfc3RhcnRfcmVxdWVzdChyZXEpO1xuIFxuQEAgLTU1MCwxNiAmIzQzOzU1NywxNiBAQCBzdGF0aWMgYmxrX3N0YXR1c190IHN3aW1fcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4gXG4gXHRlcnIgPSBCTEtfU1RTX09LO1xuIG91dDpcbi1cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZzd2QtXHUwMDNlbG9jayk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnN3aW1fbXV0ZXgpO1xuIFx0cmV0dXJuIGVycjtcbiBcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBmbG9wcHlfc3RydWN0IGZsb3BweV90eXBlWzRdID0ge1xuLVx0eyAgICAwLCAgMCwgMCwgIDAsIDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIE5VTEwgfSwgLyogbm8gdGVzdGluZyAgICovXG4mIzQzO1x0eyAgICAwLCAgMCwgMCwgIDAsIDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIE5VTEwgfSwgLyogbm8gdGVzdGluZyAqL1xuIFx0eyAgNzIwLCAgOSwgMSwgODAsIDAsIDB4MkEsIDB4MDIsIDB4REYsIDB4NTAsIE5VTEwgfSwgLyogMzYwS0IgU1MgMy41XCYjMzQ7Ki9cbi1cdHsgMTQ0MCwgIDksIDIsIDgwLCAwLCAweDJBLCAweDAyLCAweERGLCAweDUwLCBOVUxMIH0sIC8qIDcyMEtCIDMuNVwmIzM0OyAgICovXG4tXHR7IDI4ODAsIDE4LCAyLCA4MCwgMCwgMHgxQiwgMHgwMCwgMHhDRiwgMHg2QywgTlVMTCB9LCAvKiAxLjQ0TUIgMy41XCYjMzQ7ICAqL1xuJiM0MztcdHsgMTQ0MCwgIDksIDIsIDgwLCAwLCAweDJBLCAweDAyLCAweERGLCAweDUwLCBOVUxMIH0sIC8qIDcyMEtCIDMuNVwmIzM0OyAqL1xuJiM0MztcdHsgMjg4MCwgMTgsIDIsIDgwLCAwLCAweDFCLCAweDAwLCAweENGLCAweDZDLCBOVUxMIH0sIC8qIDEuNDRNQiAzLjVcJiMzNDsgKi9cbiB9O1xuIFxuIHN0YXRpYyBpbnQgZ2V0X2Zsb3BweV9nZW9tZXRyeShzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcywgaW50IHR5cGUsXG5AQCAtNTg2LDIzICYjNDM7NTkzLDE2IEBAIHN0YXRpYyB2b2lkIHNldHVwX21lZGl1bShzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcylcbiBcbiBcdGlmIChzd2ltX3JlYWRiaXQoYmFzZSwgRElTS19JTikpIHtcbiBcdFx0c3RydWN0IGZsb3BweV9zdHJ1Y3QgKmc7XG4mIzQzO1xuIFx0XHRmcy1cdTAwM2VkaXNrX2luID0gMTtcbiBcdFx0ZnMtXHUwMDNld3JpdGVfcHJvdGVjdGVkID0gc3dpbV9yZWFkYml0KGJhc2UsIFdSSVRFX1BST1QpO1xuLVxuLVx0XHRpZiAoc3dpbV90cmFjazAwKGJhc2UpKVxuLVx0XHRcdHByaW50ayhLRVJOX0VSUlxuLVx0XHRcdFx0XCYjMzQ7U1dJTTogY2Fubm90IG1vdmUgZmxvcHB5IGhlYWQgdG8gdHJhY2sgMFxcblwmIzM0Oyk7XG4tXG4tXHRcdHN3aW1fdHJhY2swMChiYXNlKTtcbi1cbiBcdFx0ZnMtXHUwMDNldHlwZSA9IHN3aW1fcmVhZGJpdChiYXNlLCBUV09NRUdfTUVESUEpID9cbi1cdFx0XHRIRF9NRURJQSA6IEREX01FRElBO1xuJiM0MztcdFx0XHQgICBIRF9NRURJQSA6IEREX01FRElBO1xuIFx0XHRmcy1cdTAwM2VoZWFkX251bWJlciA9IHN3aW1fcmVhZGJpdChiYXNlLCBTSU5HTEVfU0lERUQpID8gMSA6IDI7XG4gXHRcdGdldF9mbG9wcHlfZ2VvbWV0cnkoZnMsIDAsIFx1MDAyNmcpO1xuIFx0XHRmcy1cdTAwM2V0b3RhbF9zZWNzID0gZy1cdTAwM2VzaXplO1xuIFx0XHRmcy1cdTAwM2VzZWNwZXJjeWwgPSBnLVx1MDAzZWhlYWQgKiBnLVx1MDAzZXNlY3Q7XG4gXHRcdGZzLVx1MDAzZXNlY3BlcnRyYWNrID0gZy1cdTAwM2VzZWN0O1xuLVx0XHRmcy1cdTAwM2V0cmFjayA9IDA7XG4gXHR9IGVsc2Uge1xuIFx0XHRmcy1cdTAwM2VkaXNrX2luID0gMDtcbiBcdH1cbkBAIC02MjAsMTEgJiM0Mzs2MjAsOSBAQCBzdGF0aWMgaW50IGZsb3BweV9vcGVuKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpXG4gXHRcdGZzLVx1MDAzZXJlZl9jb3VudCA9IC0xO1xuIFx0ZWxzZVxuIFx0XHRmcy1cdTAwM2VyZWZfY291bnQmIzQzOyYjNDM7O1xuLVx0c3dpbV93cml0ZShiYXNlLCBzZXR1cCwgU19JQk1fRFJJVkUgIHwgU19GQ0xLX0RJVjIpO1xuLVx0dWRlbGF5KDEwKTtcbiYjNDM7XG4gXHRzd2ltX2RyaXZlKGJhc2UsIGZzLVx1MDAzZWxvY2F0aW9uKTtcbi1cdHN3aW1fbW90b3IoYmFzZSwgT04pO1xuLVx0c3dpbV9hY3Rpb24oYmFzZSwgU0VUTUZNKTtcbiYjNDM7XG4gXHRpZiAoZnMtXHUwMDNlZWplY3RlZClcbiBcdFx0c2V0dXBfbWVkaXVtKGZzKTtcbiBcdGlmICghZnMtXHUwMDNlZGlza19pbikge1xuQEAgLTYzMiw2ICYjNDM7NjMwLDExIEBAIHN0YXRpYyBpbnQgZmxvcHB5X29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4mIzQzO1x0c3dpbV9tb3RvcihiYXNlLCBPTik7XG4mIzQzO1x0c3dpbV9hY3Rpb24oYmFzZSwgU0VUTUZNKTtcbiYjNDM7XHRtc2xlZXAoMzApO1xuJiM0MztcdHN3aW1fUkVBRFlfdGltZW91dChiYXNlKTtcbiYjNDM7XG4gXHRzZXRfY2FwYWNpdHkoZnMtXHUwMDNlZGlzaywgZnMtXHUwMDNldG90YWxfc2Vjcyk7XG4gXG4gXHRpZiAobW9kZSBcdTAwMjYgQkxLX09QRU5fTkRFTEFZKVxuQEAgLTY1Miw4ICYjNDM7NjU1LDEwIEBAIHN0YXRpYyBpbnQgZmxvcHB5X29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcbiBcdGVsc2UgaWYgKGZzLVx1MDAzZXJlZl9jb3VudCBcdTAwM2UgMClcbiBcdFx0LS1mcy1cdTAwM2VyZWZfY291bnQ7XG4gXG4tXHRpZiAoZnMtXHUwMDNlcmVmX2NvdW50ID09IDApXG4mIzQzO1x0aWYgKGZzLVx1MDAzZXJlZl9jb3VudCA9PSAwKSB7XG4gXHRcdHN3aW1fbW90b3IoYmFzZSwgT0ZGKTtcbiYjNDM7XHRcdHN3aW1fZHJpdmUoYmFzZSwgTk9fRFJJVkUpO1xuJiM0MztcdH1cbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTY3OSw4ICYjNDM7Njg0LDExIEBAIHN0YXRpYyB2b2lkIGZsb3BweV9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIFx0ZWxzZSBpZiAoZnMtXHUwMDNlcmVmX2NvdW50IFx1MDAzZSAwKVxuIFx0XHQtLWZzLVx1MDAzZXJlZl9jb3VudDtcbiBcbi1cdGlmIChmcy1cdTAwM2VyZWZfY291bnQgPT0gMClcbiYjNDM7XHRpZiAoZnMtXHUwMDNlcmVmX2NvdW50ID09IDApIHtcbiYjNDM7XHRcdHN3aW1fZHJpdmUoYmFzZSwgZnMtXHUwMDNlbG9jYXRpb24pO1xuIFx0XHRzd2ltX21vdG9yKGJhc2UsIE9GRik7XG4mIzQzO1x0XHRzd2ltX2RyaXZlKGJhc2UsIE5PX0RSSVZFKTtcbiYjNDM7XHR9XG4gXHRtdXRleF91bmxvY2soXHUwMDI2c3dpbV9tdXRleCk7XG4gfVxuIFxuQEAgLTY5MSw3ICYjNDM7Njk5LDcgQEAgc3RhdGljIGludCBmbG9wcHlfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuIFx0aW50IGVycjtcbiBcbiBcdGlmICgoY21kIFx1MDAyNiAweDgwKSBcdTAwMjZcdTAwMjYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpXG4tXHRcdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XHRcdHJldHVybiAtRVBFUk07XG4gXG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBGREVKRUNUOlxuQEAgLTc1MCwxMCAmIzQzOzc1OCw5IEBAIHN0YXRpYyBpbnQgc3dpbV9hZGRfZmxvcHB5KHN0cnVjdCBzd2ltX3ByaXYgKnN3ZCwgZW51bSBkcml2ZV9sb2NhdGlvbiBsb2NhdGlvbilcbiBcdHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzID0gXHUwMDI2c3dkLVx1MDAzZXVuaXRbc3dkLVx1MDAzZWZsb3BweV9jb3VudF07XG4gXHRzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gc3dkLVx1MDAzZWJhc2U7XG4gXG4mIzQzO1x0ZnMtXHUwMDNlc3dkID0gc3dkO1xuIFx0ZnMtXHUwMDNlbG9jYXRpb24gPSBsb2NhdGlvbjtcbiBcbi1cdHN3aW1fZHJpdmUoYmFzZSwgbG9jYXRpb24pO1xuLVxuIFx0c3dpbV9tb3RvcihiYXNlLCBPRkYpO1xuIFxuIFx0ZnMtXHUwMDNldHlwZSA9IEhEX01FRElBO1xuQEAgLTc2MSw2ICYjNDM7NzY4LDcgQEAgc3RhdGljIGludCBzd2ltX2FkZF9mbG9wcHkoc3RydWN0IHN3aW1fcHJpdiAqc3dkLCBlbnVtIGRyaXZlX2xvY2F0aW9uIGxvY2F0aW9uKVxuIFxuIFx0ZnMtXHUwMDNlcmVmX2NvdW50ID0gMDtcbiBcdGZzLVx1MDAzZWVqZWN0ZWQgPSAxO1xuJiM0MztcdGZzLVx1MDAzZXRyYWNrID0gMDtcbiBcbiBcdHN3ZC1cdTAwM2VmbG9wcHlfY291bnQmIzQzOyYjNDM7O1xuIFxuQEAgLTc4NSwyNSAmIzQzOzc5Myw0MyBAQCBzdGF0aWMgdm9pZCBzd2ltX2NsZWFudXBfZmxvcHB5X2Rpc2soc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMpXG4gXHRibGtfbXFfZnJlZV90YWdfc2V0KFx1MDAyNmZzLVx1MDAzZXRhZ19zZXQpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHN3aW1fZmxvcHB5X2luaXQoc3RydWN0IHN3aW1fcHJpdiAqc3dkKVxuJiM0MztzdGF0aWMgdm9pZCBzd2ltX3NldF9wYXJhbWV0ZXJzKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XHRzdGF0aWMgY29uc3QgdTggbWVtW10gPSB7IDB4MTgsIDB4NDEsIDB4MmUsIDB4MmUsIDB4MTgsIDB4MTgsIDB4MWIsIDB4MWIsXG4mIzQzO1x0XHRcdFx0ICAweDJmLCAweDJmLCAweDE5LCAweDE5LCAweDk3LCAweDFiLCAweDU3LCAweDNiLCB9O1xuJiM0MztcbiYjNDM7XHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCAwKTsgLyogcmVzZXQgcGFyYW1ldGVyIG1lbW9yeSBpbmRleCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDE2OyAmIzQzOyYjNDM7aSlcbiYjNDM7XHRcdHN3aW1fd3JpdGUoYmFzZSwgcGFyYW1ldGVyLCBtZW1baV0pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHN3aW1fZmxvcHB5X2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiB7XG4mIzQzO1x0c3RydWN0IHN3aW1fcHJpdiAqc3dkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XG4mIzQzO1x0dW5zaWduZWQgaW50ICpkYXRhID0gcGRldi1cdTAwM2VkZXYucGxhdGZvcm1fZGF0YTtcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0ge1xuLVx0XHQuZmVhdHVyZXNcdFx0PSBCTEtfRkVBVF9ST1RBVElPTkFMLFxuJiM0MztcdFx0LmZlYXR1cmVzID0gQkxLX0ZFQVRfUk9UQVRJT05BTCxcbiBcdH07XG4gXHRpbnQgZXJyO1xuIFx0aW50IGRyaXZlO1xuIFx0c3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IHN3ZC1cdTAwM2ViYXNlO1xuIFxuJiM0MztcdHN3aW1fd3JpdGUoYmFzZSwgc2V0dXAsIFNfSUJNX0RSSVZFIHwgKCpkYXRhID8gU19GQ0xLX0RJVjIgOiAwKSk7XG4mIzQzO1xuJiM0MztcdHN3aW1fc2V0X3BhcmFtZXRlcnMoYmFzZSk7XG4mIzQzO1xuIFx0Lyogc2NhbiBmbG9wcHkgZHJpdmVzICovXG4gXG4gXHRzd2ltX2RyaXZlKGJhc2UsIElOVEVSTkFMX0RSSVZFKTtcbiBcdGlmIChzd2ltX3JlYWRiaXQoYmFzZSwgRFJJVkVfUFJFU0VOVCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIXN3aW1fcmVhZGJpdChiYXNlLCBPTkVNRUdfRFJJVkUpKVxuJiM0MztcdCAgICAhc3dpbV9yZWFkYml0KGJhc2UsIE9ORU1FR19EUklWRSkgXHUwMDI2XHUwMDI2ICFzd2ltX3RyYWNrMDAoYmFzZSkpXG4gXHRcdHN3aW1fYWRkX2Zsb3BweShzd2QsIElOVEVSTkFMX0RSSVZFKTtcbiBcdHN3aW1fZHJpdmUoYmFzZSwgRVhURVJOQUxfRFJJVkUpO1xuIFx0aWYgKHN3aW1fcmVhZGJpdChiYXNlLCBEUklWRV9QUkVTRU5UKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhc3dpbV9yZWFkYml0KGJhc2UsIE9ORU1FR19EUklWRSkpXG4mIzQzO1x0ICAgICFzd2ltX3JlYWRiaXQoYmFzZSwgT05FTUVHX0RSSVZFKSBcdTAwMjZcdTAwMjYgIXN3aW1fdHJhY2swMChiYXNlKSlcbiBcdFx0c3dpbV9hZGRfZmxvcHB5KHN3ZCwgRVhURVJOQUxfRFJJVkUpO1xuJiM0MztcdHN3aW1fZHJpdmUoYmFzZSwgTk9fRFJJVkUpO1xuIFxuIFx0LyogcmVnaXN0ZXIgZmxvcHB5IGRyaXZlcyAqL1xuIFxuQEAgLTgxNCwxMSAmIzQzOzg0MCw5IEBAIHN0YXRpYyBpbnQgc3dpbV9mbG9wcHlfaW5pdChzdHJ1Y3Qgc3dpbV9wcml2ICpzd2QpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXHR9XG4gXG4tXHRzcGluX2xvY2tfaW5pdChcdTAwMjZzd2QtXHUwMDNlbG9jayk7XG4tXG4gXHRmb3IgKGRyaXZlID0gMDsgZHJpdmUgXHUwMDNjIHN3ZC1cdTAwM2VmbG9wcHlfY291bnQ7IGRyaXZlJiM0MzsmIzQzOykge1xuIFx0XHRlcnIgPSBibGtfbXFfYWxsb2Nfc3FfdGFnX3NldChcdTAwMjZzd2QtXHUwMDNldW5pdFtkcml2ZV0udGFnX3NldCxcbi1cdFx0XHRcdFx1MDAyNnN3aW1fbXFfb3BzLCAyLCAwKTtcbiYjNDM7XHRcdFx0XHRcdTAwMjZzd2ltX21xX29wcywgMiwgQkxLX01RX0ZfQkxPQ0tJTkcpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gZXhpdF9wdXRfZGlza3M7XG4gXG5AQCAtODMwLDggJiM0Mzs4NTQsNiBAQCBzdGF0aWMgaW50IHN3aW1fZmxvcHB5X2luaXQoc3RydWN0IHN3aW1fcHJpdiAqc3dkKVxuIFx0XHRcdGVyciA9IFBUUl9FUlIoc3dkLVx1MDAzZXVuaXRbZHJpdmVdLmRpc2spO1xuIFx0XHRcdGdvdG8gZXhpdF9wdXRfZGlza3M7XG4gXHRcdH1cbi1cbi1cdFx0c3dkLVx1MDAzZXVuaXRbZHJpdmVdLnN3ZCA9IHN3ZDtcbiBcdH1cbiBcbiBcdGZvciAoZHJpdmUgPSAwOyBkcml2ZSBcdTAwM2Mgc3dkLVx1MDAzZWZsb3BweV9jb3VudDsgZHJpdmUmIzQzOyYjNDM7KSB7XG5AQCAtOTA1LDcgJiM0Mzs5MjcsNyBAQCBzdGF0aWMgaW50IHN3aW1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KVxuIFxuIFx0c3dkLVx1MDAzZWJhc2UgPSBzd2ltX2Jhc2U7XG4gXG4tXHRyZXQgPSBzd2ltX2Zsb3BweV9pbml0KHN3ZCk7XG4mIzQzO1x0cmV0ID0gc3dpbV9mbG9wcHlfaW5pdChkZXYpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfa2ZyZWU7XG4gXG5AQCAtOTQ1LDcgJiM0Mzs5NjcsNyBAQCBzdGF0aWMgdm9pZCBzd2ltX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpXG4gc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc3dpbV9kcml2ZXIgPSB7XG4gXHQucHJvYmUgID0gc3dpbV9wcm9iZSxcbiBcdC5yZW1vdmUgPSBzd2ltX3JlbW92ZSxcbi1cdC5kcml2ZXIgICA9IHtcbiYjNDM7XHQuZHJpdmVyID0ge1xuIFx0XHQubmFtZVx0PSBDQVJETkFNRSxcbiBcdH0sXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N3aW1fYXNtLlMgYi9kcml2ZXJzL2Jsb2NrL3N3aW1fYXNtLlNcbmluZGV4IDNkN2EyZDg3NTk1YTU3Li42NWI0ZTQ2NThlMTBjNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svc3dpbV9hc20uU1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TXG5AQCAtNSw3ICYjNDM7NSw3IEBAXG4gICogbmVlZHMgYXNzZW1ibHkgbGFuZ3VhZ2UgYmVjYXVzZSBpcyB2ZXJ5IHRpbWluZyBkZXBlbmRlbnRcbiAgKiB0aGlzIGNvbnRyb2xsZXIgZXhpc3RzIG9ubHkgb24gbWFjaW50b3NoIDY4MHgwIGJhc2VkXG4gICpcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwOCBMYXVyZW50IFZpdmllciBcdTAwM2NMYXVyZW50QGx2aXZpZXIuaW5mb1x1MDAzZVxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggTGF1cmVudCBWaXZpZXIgXHUwMDNjTGF1cmVudEBsdml2aWVyLmluZm9cdTAwM2VcbiAgKlxuICAqIGJhc2VkIG9uIEFsYXN0YWlyIEJyaWRnZXdhdGVyIFNXSU0gYW5hbHlzaXMsIDIwMDFcbiAgKiBiYXNlZCBvbiBuZXRCU0QgSVdNIGRyaXZlciAoYykgMTk5NywgMTk5OCBIYXVrZSBGYXRoLlxuQEAgLTE0LDEzNSAmIzQzOzE0LDEzOCBAQFxuICAqIDIwMDgtMTEtMDUgKGx2KSAtIGFkZCBnZXRfc3dpbV9tb2RlXG4gICovXG4gXG4tXHQuZXF1XHR3cml0ZV9kYXRhLFx0MHgwMDAwXG4tXHQuZXF1XHR3cml0ZV9tYXJrLFx0MHgwMjAwXG4tXHQuZXF1XHR3cml0ZV9DUkMsXHQweDA0MDBcbi1cdC5lcXVcdHdyaXRlX3BhcmFtZXRlciwweDA2MDBcbi1cdC5lcXVcdHdyaXRlX3BoYXNlLFx0MHgwODAwXG4tXHQuZXF1XHR3cml0ZV9zZXR1cCxcdDB4MGEwMFxuLVx0LmVxdVx0d3JpdGVfbW9kZTAsXHQweDBjMDBcbi1cdC5lcXVcdHdyaXRlX21vZGUxLFx0MHgwZTAwXG4tXHQuZXF1XHRyZWFkX2RhdGEsXHQweDEwMDBcbi1cdC5lcXVcdHJlYWRfbWFyayxcdDB4MTIwMFxuLVx0LmVxdVx0cmVhZF9lcnJvcixcdDB4MTQwMFxuLVx0LmVxdVx0cmVhZF9wYXJhbWV0ZXIsXHQweDE2MDBcbi1cdC5lcXVcdHJlYWRfcGhhc2UsXHQweDE4MDBcbi1cdC5lcXVcdHJlYWRfc2V0dXAsXHQweDFhMDBcbi1cdC5lcXVcdHJlYWRfc3RhdHVzLFx0MHgxYzAwXG4tXHQuZXF1XHRyZWFkX2hhbmRzaGFrZSxcdDB4MWUwMFxuLVxuLVx0LmVxdVx0b19zaWRlLCAwXG4tXHQuZXF1XHRvX3RyYWNrLCAxXG4tXHQuZXF1XHRvX3NlY3RvciwgMlxuLVx0LmVxdVx0b19zaXplLCAzXG4tXHQuZXF1XHRvX2NyYzAsIDRcbi1cdC5lcXVcdG9fY3JjMSwgNVxuLVxuLVx0LmVxdVx0c2Vla190aW1lLCAzMDAwMFxuLVx0LmVxdVx0bWF4X3JldHJ5LCA0MFxuLVx0LmVxdVx0c2VjdG9yX3NpemUsIDUxMlxuJiM0MztcdC5lcXVcdC5Md3JpdGVfZGF0YSxcdFx0MHgwMDAwXG4mIzQzO1x0LmVxdVx0Lkx3cml0ZV9tYXJrLFx0XHQweDAyMDBcbiYjNDM7XHQuZXF1XHQuTHdyaXRlX0NSQyxcdFx0MHgwNDAwXG4mIzQzO1x0LmVxdVx0Lkx3cml0ZV9wYXJhbWV0ZXIsXHQweDA2MDBcbiYjNDM7XHQuZXF1XHQuTHdyaXRlX3BoYXNlLFx0XHQweDA4MDBcbiYjNDM7XHQuZXF1XHQuTHdyaXRlX3NldHVwLFx0XHQweDBhMDBcbiYjNDM7XHQuZXF1XHQuTHdyaXRlX21vZGUwLFx0XHQweDBjMDBcbiYjNDM7XHQuZXF1XHQuTHdyaXRlX21vZGUxLFx0XHQweDBlMDBcbiYjNDM7XHQuZXF1XHQuTHJlYWRfZGF0YSxcdFx0MHgxMDAwXG4mIzQzO1x0LmVxdVx0LkxyZWFkX21hcmssXHRcdDB4MTIwMFxuJiM0MztcdC5lcXVcdC5McmVhZF9lcnJvcixcdFx0MHgxNDAwXG4mIzQzO1x0LmVxdVx0LkxyZWFkX3BhcmFtZXRlcixcdDB4MTYwMFxuJiM0MztcdC5lcXVcdC5McmVhZF9waGFzZSxcdFx0MHgxODAwXG4mIzQzO1x0LmVxdVx0LkxyZWFkX3NldHVwLFx0XHQweDFhMDBcbiYjNDM7XHQuZXF1XHQuTHJlYWRfc3RhdHVzLFx0XHQweDFjMDBcbiYjNDM7XHQuZXF1XHQuTHJlYWRfaGFuZHNoYWtlLFx0MHgxZTAwXG4mIzQzO1xuJiM0MztcdC5lcXVcdC5Mb19zaWRlLFx0XHQwXG4mIzQzO1x0LmVxdVx0LkxvX3RyYWNrLFx0XHQxXG4mIzQzO1x0LmVxdVx0LkxvX3NlY3RvcixcdFx0MlxuJiM0MztcdC5lcXVcdC5Mb19zaXplLFx0XHQzXG4mIzQzO1x0LmVxdVx0LkxvX2NyYzAsXHRcdDRcbiYjNDM7XHQuZXF1XHQuTG9fY3JjMSxcdFx0NVxuJiM0MztcbiYjNDM7XHQuZXF1XHQuTHNlZWtfdGltZSxcdFx0MzAwMDBcbiYjNDM7XHQuZXF1XHQuTG1heF9yZXRyeSxcdFx0NDBcbiYjNDM7XHQuZXF1XHQuTHNlY3Rvcl9zaXplLFx0XHQ1MTJcbiYjNDM7XG4mIzQzO1x0LmVxdVx0Lkxtcl9jbGVhcl9maWZvLFx0MHgwMVxuJiM0MztcdC5lcXVcdC5MbXJfYWN0aW9uLFx0XHQweDA4XG4mIzQzO1x0LmVxdVx0Lkxtcl93cml0ZV9hY3Rpb24sXHQweDE4XG4mIzQzO1xuJiM0MztcdC5lcXVcdC5MaHJfY3JjX2Vycm9yLFx0XHQweDAyXG4mIzQzO1x0LmVxdVx0Lkxocl9maWZvXzJieXRlcyxcdDB4NDBcbiYjNDM7XHQuZXF1XHQuTGhyX2ZpZm9fMWJ5dGUsXHQweDgwXG4gXG4gXHQuZ2xvYmFsIHN3aW1fcmVhZF9zZWN0b3JfaGVhZGVyXG4gc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXI6XG4gXHRsaW5rXHQlYTYsICMwXG4tXHRtb3ZlbWxcdCVkMS0lZDUvJWEwLSVhNCwlc3BALVxuJiM0MztcdG1vdmVtbFx0JWQxLSVkNS8lYTAtJWE1LCVzcEAtXG4gXHRtb3ZlbFx0JWE2QCgweDBjKSwgJWE0XG4tXHRic3JcdG1mbV9yZWFkX2FkZHJtYXJrXG4tXHRtb3ZlbWxcdCVzcEAmIzQzOywgJWQxLSVkNS8lYTAtJWE0XG4mIzQzO1x0bW92ZXFcdCMtMSwgJWQwXG4mIzQzO1x0YnNyXHQuTG1mbV9yZWFkX2FkZHJtYXJrXG4mIzQzO1x0bW92ZW1sXHQlc3BAJiM0MzssICVkMS0lZDUvJWEwLSVhNVxuIFx0dW5sa1x0JWE2XG4gXHRydHNcbiBcbi1zZWN0b3JfYWRkcmVzc19tYXJrOlxuJiM0MzsuTHNlY3Rvcl9hZGRyZXNzX21hcms6XG4gXHQuYnl0ZVx0MHhhMSwgMHhhMSwgMHhhMSwgMHhmZVxuLXNlY3Rvcl9kYXRhX21hcms6XG4mIzQzOy5Mc2VjdG9yX2RhdGFfbWFyazpcbiBcdC5ieXRlXHQweGExLCAweGExLCAweGExLCAweGZiXG4gXG4tbWZtX3JlYWRfYWRkcm1hcms6XG4mIzQzOy5MbWZtX3JlYWRfYWRkcm1hcms6XG4gXHRtb3ZlbFx0JWE2QCgweDA4KSwgJWEzXG4tXHRsZWFcdCVhM0AocmVhZF9oYW5kc2hha2UpLCAlYTJcbi1cdGxlYVx0JWEzQChyZWFkX21hcmspLCAlYTNcbi1cdG1vdmVxXHQjLTEsICVkMFxuLVx0bW92ZXdcdCNzZWVrX3RpbWUsICVkMlxuLVxuLXdhaXRfaGVhZGVyX2luaXQ6XG4tXHR0c3RiXHQlYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspXG4tXHRtb3ZlYlx0IzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspXG4tXHRtb3ZlYlx0IzB4MDEsICVhM0Aod3JpdGVfbW9kZTEgLSByZWFkX21hcmspXG4tXHRtb3ZlYlx0IzB4MDEsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspXG4tXHR0c3RiXHQlYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspXG4tXHRtb3ZlYlx0IzB4MDgsICVhM0Aod3JpdGVfbW9kZTEgLSByZWFkX21hcmspXG4tXG4tXHRsZWFcdHNlY3Rvcl9hZGRyZXNzX21hcmssICVhMFxuJiM0MztcdGxlYVx0JWEzQCguTHJlYWRfaGFuZHNoYWtlKSwgJWEyXG4mIzQzO1x0bGVhXHQlYTNAKC5McmVhZF9kYXRhKSwgJWE1XG4mIzQzO1x0bGVhXHQlYTNAKC5McmVhZF9tYXJrKSwgJWEzXG4mIzQzO1x0bW92ZXdcdCMuTHNlZWtfdGltZSwgJWQyXG4mIzQzO1xuJiM0MzsuTHdhaXRfaGVhZGVyX2luaXQ6XG4mIzQzO1x0bW92ZWJcdCMuTG1yX3dyaXRlX2FjdGlvbiwgJWEzQCguTHdyaXRlX21vZGUwIC0gLkxyZWFkX21hcmspXG4mIzQzO1x0bW92ZWJcdCMuTG1yX2NsZWFyX2ZpZm8sICVhM0AoLkx3cml0ZV9tb2RlMSAtIC5McmVhZF9tYXJrKVxuJiM0MztcdG1vdmViXHQjLkxtcl9jbGVhcl9maWZvLCAlYTNAKC5Md3JpdGVfbW9kZTAgLSAuTHJlYWRfbWFyaylcbiYjNDM7XHR0c3RiXHQlYTNAKC5McmVhZF9lcnJvciAtIC5McmVhZF9tYXJrKVxuJiM0MztcdG1vdmViXHQjLkxtcl9hY3Rpb24sICVhM0AoLkx3cml0ZV9tb2RlMSAtIC5McmVhZF9tYXJrKVxuJiM0MztcbiYjNDM7XHRsZWFcdC5Mc2VjdG9yX2FkZHJlc3NfbWFyaywgJWEwXG4gXHRtb3ZlcVx0IzMsICVkMVxuIFxuLXdhaXRfYWRkcl9tYXJrX2J5dGU6XG4tXG4mIzQzOy5Md2FpdF9hZGRyX21hcmtfYnl0ZTpcbiBcdHRzdGJcdCVhMkBcbi1cdGRibWlcdCVkMiwgd2FpdF9hZGRyX21hcmtfYnl0ZVxuLVx0YnBsXHRoZWFkZXJfZXhpdFxuJiM0MztcdGRibWlcdCVkMiwgLkx3YWl0X2FkZHJfbWFya19ieXRlXG4mIzQzO1x0YnBsXHQuTHNpZ25hbF9ub255YlxuIFxuIFx0bW92ZWJcdCVhM0AsICVkM1xuIFx0Y21wYlx0JWEwQCYjNDM7LCAlZDNcbi1cdGRibmVcdCVkMSwgd2FpdF9hZGRyX21hcmtfYnl0ZVxuLVx0Ym5lXHR3YWl0X2hlYWRlcl9pbml0XG4tXG4tXHRtb3ZlcVx0I21heF9yZXRyeSwgJWQyXG4mIzQzO1x0ZGJuZVx0JWQxLCAuTHdhaXRfYWRkcl9tYXJrX2J5dGVcbiYjNDM7XHRibmVcdC5Md2FpdF9oZWFkZXJfaW5pdFxuIFxuLWFtYXJrMDpcdHRzdGJcdCVhMkBcbi1cdGRibWlcdCVkMiwgYW1hcmswXG4tXHRicGxcdHNpZ25hbF9ub255YlxuLVxuLVx0bW92ZWJcdCVhM0AsICVhNEAob190cmFjaylcbi1cbi1cdG1vdmVxXHQjbWF4X3JldHJ5LCAlZDJcbi1cbi1hbWFyazE6XHR0c3RiXHQlYTJAXG4tXHRkYm1pXHQlZDIsIGFtYXJrMVxuLVx0YnBsXHRzaWduYWxfbm9ueWJcbi1cbi1cdG1vdmViXHQlYTNALCAlYTRAKG9fc2lkZSlcbi1cbi1cdG1vdmVxXHQjbWF4X3JldHJ5LCAlZDJcbiYjNDM7XHRtb3ZlcVx0Iy5MbWF4X3JldHJ5LCAlZDJcbiYjNDM7LkxhbWFyazA6XG4mIzQzO1x0dHN0Ylx0JWEyQFxuJiM0MztcdGRibWlcdCVkMiwgLkxhbWFyazBcbiYjNDM7XHRicGxcdC5Mc2lnbmFsX25vbnliXG4gXG4tYW1hcmsyOlx0dHN0Ylx0JWEyQFxuLVx0ZGJtaVx0JWQyLCBhbWFyazJcbi1cdGJwbFx0c2lnbmFsX25vbnliXG4mIzQzO1x0bW92ZWJcdCVhNUAsICVhNEAoLkxvX3RyYWNrKVxuIFxuLVx0bW92ZWJcdCVhM0AsICVhNEAob19zZWN0b3IpXG4mIzQzO1x0bW92ZXFcdCMuTG1heF9yZXRyeSwgJWQyXG4mIzQzOy5MYW1hcmsxOlxuJiM0MztcdHRzdGJcdCVhMkBcbiYjNDM7XHRkYm1pXHQlZDIsIC5MYW1hcmsxXG4mIzQzO1x0YnBsXHQuTHNpZ25hbF9ub255YlxuIFxuLVx0bW92ZXFcdCNtYXhfcmV0cnksICVkMlxuJiM0MztcdG1vdmViXHQlYTVALCAlYTRAKC5Mb19zaWRlKVxuIFxuLWFtYXJrMzpcdHRzdGJcdCVhMkBcbi1cdGRibWlcdCVkMiwgYW1hcmszXG4tXHRicGxcdHNpZ25hbF9ub255YlxuJiM0MztcdG1vdmVxXHQjLkxtYXhfcmV0cnksICVkMlxuJiM0MzsuTGFtYXJrMjpcbiYjNDM7XHR0c3RiXHQlYTJAXG4mIzQzO1x0ZGJtaVx0JWQyLCAuTGFtYXJrMlxuJiM0MztcdGJwbFx0LkxzaWduYWxfbm9ueWJcbiBcbi1cdG1vdmViXHQlYTNALCAlYTRAKG9fc2l6ZSlcbiYjNDM7XHRtb3ZlYlx0JWE1QCwgJWE0QCguTG9fc2VjdG9yKVxuIFxuLVx0bW92ZXFcdCNtYXhfcmV0cnksICVkMlxuJiM0MztcdG1vdmVxXHQjLkxtYXhfcmV0cnksICVkMlxuJiM0MzsuTGFtYXJrMzpcbiYjNDM7XHR0c3RiXHQlYTJAXG4mIzQzO1x0ZGJtaVx0JWQyLCAuTGFtYXJrM1xuJiM0MztcdGJwbFx0LkxzaWduYWxfbm9ueWJcbiBcbi1jcmMwOlx0dHN0Ylx0JWEyQFxuLVx0ZGJtaVx0JWQyLCBjcmMwXG4tXHRicGxcdHNpZ25hbF9ub255YlxuJiM0MztcdG1vdmViXHQlYTVALCAlYTRAKC5Mb19zaXplKVxuIFxuLVx0bW92ZWJcdCVhM0AsICVhNEAob19jcmMwKVxuJiM0MztcdG1vdmVxXHQjLkxtYXhfcmV0cnksICVkMlxuJiM0MzsuTGNyYzA6XG4mIzQzO1x0dHN0Ylx0JWEyQFxuJiM0MztcdGRibWlcdCVkMiwgLkxjcmMwXG4mIzQzO1x0YnBsXHQuTHNpZ25hbF9ub255YlxuIFxuLVx0bW92ZXFcdCNtYXhfcmV0cnksICVkMlxuJiM0MztcdG1vdmViXHQlYTVALCAlYTRAKC5Mb19jcmMwKVxuIFxuLWNyYzE6XHR0c3RiXHQlYTJAXG4tXHRkYm1pXHQlZDIsIGNyYzFcbi1cdGJwbFx0c2lnbmFsX25vbnliXG4mIzQzO1x0bW92ZXFcdCMuTG1heF9yZXRyeSwgJWQyXG4mIzQzOy5MY3JjMTpcdG1vdmViXHQlYTJALCAlZDVcbiYjNDM7XHRkYm1pXHQlZDIsIC5MY3JjMVxuJiM0MztcdGJwbFx0LkxzaWduYWxfbm9ueWJcbiBcbi1cdG1vdmViXHQlYTNALCAlYTRAKG9fY3JjMSlcbiYjNDM7XHRtb3ZlYlx0JWE1QCwgJWE0QCguTG9fY3JjMSlcbiBcbi1cdHRzdGJcdCVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaylcbiYjNDM7XHRhbmRiXHQjLkxocl9jcmNfZXJyb3IsICVkNVxuJiM0MztcdGJuZVx0LkxzaWduYWxfbm9ueWJcbiBcbi1oZWFkZXJfZXhpdDpcbiBcdG1vdmVxXHQjMCwgJWQwXG4tXHRtb3ZlYlx0IzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspXG4tXHRydHNcbi1zaWduYWxfbm9ueWI6XG4tXHRtb3ZlcVx0Iy0xLCAlZDBcbi1cdG1vdmViXHQjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaylcbiYjNDM7LkxzaWduYWxfbm9ueWI6XG4mIzQzO1x0bW92ZWJcdCMuTG1yX3dyaXRlX2FjdGlvbiwgJWEzQCguTHdyaXRlX21vZGUwIC0gLkxyZWFkX21hcmspXG4gXHRydHNcbiBcbiBcdC5nbG9iYWwgc3dpbV9yZWFkX3NlY3Rvcl9kYXRhXG5AQCAtMTUwLDk0ICYjNDM7MTUzLDg3IEBAIHN3aW1fcmVhZF9zZWN0b3JfZGF0YTpcbiBcdGxpbmtcdCVhNiwgIzBcbiBcdG1vdmVtbFx0JWQxLSVkNS8lYTAtJWE1LCVzcEAtXG4gXHRtb3ZlbFx0JWE2QCgweDBjKSwgJWE0XG4tXHRic3JcdG1mbV9yZWFkX2RhdGFcbiYjNDM7XHRtb3ZlcVx0Iy0xLCAlZDBcbiYjNDM7XHRic3JcdC5MbWZtX3JlYWRfZGF0YVxuIFx0bW92ZW1sXHQlc3BAJiM0MzssICVkMS0lZDUvJWEwLSVhNVxuIFx0dW5sa1x0JWE2XG4gXHRydHNcbiBcbi1tZm1fcmVhZF9kYXRhOlxuJiM0MzsuTG1mbV9yZWFkX2RhdGE6XG4gXHRtb3ZlbFx0JWE2QCgweDA4KSwgJWEzXG4tXHRsZWFcdCVhM0AocmVhZF9oYW5kc2hha2UpLCAlYTJcbi1cdGxlYVx0JWEzQChyZWFkX2RhdGEpLCAlYTVcbi1cdGxlYVx0JWEzQChyZWFkX21hcmspLCAlYTNcbi1cdG1vdmV3XHQjc2Vla190aW1lLCAlZDJcbi1cbi13YWl0X2RhdGFfaW5pdDpcbi1cdHRzdGJcdCVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaylcbi1cdG1vdmViXHQjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaylcbi1cdG1vdmViXHQjMHgwMSwgJWEzQCh3cml0ZV9tb2RlMSAtIHJlYWRfbWFyaylcbi1cdG1vdmViXHQjMHgwMSwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaylcbi1cdHRzdGJcdCVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaylcbi1cdG1vdmViXHQjMHgwOCwgJWEzQCh3cml0ZV9tb2RlMSAtIHJlYWRfbWFyaylcbi1cbi1cdGxlYVx0c2VjdG9yX2RhdGFfbWFyaywgJWEwXG4mIzQzO1x0bGVhXHQlYTNAKC5McmVhZF9oYW5kc2hha2UpLCAlYTJcbiYjNDM7XHRsZWFcdCVhM0AoLkxyZWFkX2RhdGEpLCAlYTVcbiYjNDM7XHRsZWFcdCVhM0AoLkxyZWFkX21hcmspLCAlYTNcbiYjNDM7XHRtb3Zld1x0Iy5Mc2Vla190aW1lLCAlZDJcbiYjNDM7XG4mIzQzOy5Md2FpdF9kYXRhX2luaXQ6XG4mIzQzO1x0bW92ZWJcdCMuTG1yX3dyaXRlX2FjdGlvbiwgJWEzQCguTHdyaXRlX21vZGUwIC0gLkxyZWFkX21hcmspXG4mIzQzO1x0bW92ZWJcdCMuTG1yX2NsZWFyX2ZpZm8sICVhM0AoLkx3cml0ZV9tb2RlMSAtIC5McmVhZF9tYXJrKVxuJiM0MztcdG1vdmViXHQjLkxtcl9jbGVhcl9maWZvLCAlYTNAKC5Md3JpdGVfbW9kZTAgLSAuTHJlYWRfbWFyaylcbiYjNDM7XHR0c3RiXHQlYTNAKC5McmVhZF9lcnJvciAtIC5McmVhZF9tYXJrKVxuJiM0MztcdG1vdmViXHQjLkxtcl9hY3Rpb24sICVhM0AoLkx3cml0ZV9tb2RlMSAtIC5McmVhZF9tYXJrKVxuJiM0MztcbiYjNDM7XHRsZWFcdC5Mc2VjdG9yX2RhdGFfbWFyaywgJWEwXG4gXHRtb3ZlcVx0IzMsICVkMVxuIFxuIFx0Lyogd2FpdCBkYXRhIGFkZHJlc3MgbWFyayAqL1xuIFxuLXdhaXRfZGF0YV9tYXJrX2J5dGU6XG4tXG4mIzQzOy5Md2FpdF9kYXRhX21hcmtfYnl0ZTpcbiBcdHRzdGJcdCVhMkBcbi1cdGRibWlcdCVkMiwgd2FpdF9kYXRhX21hcmtfYnl0ZVxuLVx0YnBsXHRkYXRhX2V4aXRcbiYjNDM7XHRkYm1pXHQlZDIsIC5Md2FpdF9kYXRhX21hcmtfYnl0ZVxuJiM0MztcdGJwbFx0LkxkYXRhX2V4aXRcbiBcbiBcdG1vdmViXHQlYTNALCAlZDNcbiBcdGNtcGJcdCVhMEAmIzQzOywgJWQzXG4tXHRkYm5lXHQlZDEsIHdhaXRfZGF0YV9tYXJrX2J5dGVcbi1cdGJuZVx0d2FpdF9kYXRhX2luaXRcbiYjNDM7XHRkYm5lXHQlZDEsIC5Md2FpdF9kYXRhX21hcmtfYnl0ZVxuJiM0MztcdGJuZVx0Lkx3YWl0X2RhdGFfaW5pdFxuIFxuIFx0LyogcmVhZCBkYXRhICovXG4gXG4tXHR0c3RiXHQlYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspXG4tXG4tXHRtb3ZlbFx0I3NlY3Rvcl9zaXplLTEsICVkNFx0XHQvKiBzZWN0b3Igc2l6ZSAqL1xuLXJlYWRfbmV3X2RhdGE6XG4tXHRtb3Zld1x0I21heF9yZXRyeSwgJWQyXG4tcmVhZF9kYXRhX2xvb3A6XG4mIzQzO1x0bW92ZWxcdCMuTHNlY3Rvcl9zaXplIC0gMSwgJWQ0XHRcdC8qIHNlY3RvciBzaXplICovXG4mIzQzOy5McmVhZF9uZXdfZGF0YTpcbiYjNDM7XHRtb3Zld1x0Iy5MbWF4X3JldHJ5LCAlZDJcbiYjNDM7LkxyZWFkX2RhdGFfbG9vcDpcbiBcdG1vdmViXHQlYTJALCAlZDVcbi1cdGFuZGJcdCMweGMwLCAlZDVcbi1cdGRibmVcdCVkMiwgcmVhZF9kYXRhX2xvb3Bcbi1cdGJlcVx0ZGF0YV9leGl0XG4mIzQzO1x0YW5kYlx0IyguTGhyX2ZpZm9fMmJ5dGVzICYjNDM7IC5MaHJfZmlmb18xYnl0ZSksICVkNVxuJiM0MztcdGJlcVx0MWZcbiYjNDM7XHRtb3Zld1x0Iy5MbWF4X3JldHJ5LCAlZDJcbiBcdG1vdmViXHQlYTVALCAlYTRAJiM0Mztcbi1cdGFuZGJcdCMweDQwLCAlZDVcbi1cdGRibmVcdCVkNCwgcmVhZF9uZXdfZGF0YVxuLVx0YmVxXHRleGl0X2xvb3BcbiYjNDM7XHRkYnJhXHQlZDQsIDFmXG4mIzQzO1x0YnJhXHQuTGRhdGFfY3JjMFxuJiM0MzsxOlx0YW5kYlx0Iy5MaHJfZmlmb18yYnl0ZXMsICVkNVxuJiM0MztcdGRibmVcdCVkMiwgLkxyZWFkX2RhdGFfbG9vcFxuJiM0MztcdGJlcVx0LkxkYXRhX2V4aXRcbiBcdG1vdmViXHQlYTVALCAlYTRAJiM0Mztcbi1cdGRicmFcdCVkNCwgcmVhZF9uZXdfZGF0YVxuLWV4aXRfbG9vcDpcbiYjNDM7XHRkYnJhXHQlZDQsIC5McmVhZF9uZXdfZGF0YVxuIFxuIFx0LyogcmVhZCBDUkMgKi9cbiBcbi1cdG1vdmV3XHQjbWF4X3JldHJ5LCAlZDJcbi1kYXRhX2NyYzA6XG4tXG4mIzQzO1x0bW92ZXdcdCMuTG1heF9yZXRyeSwgJWQyXG4mIzQzOy5MZGF0YV9jcmMwOlxuIFx0dHN0Ylx0JWEyQFxuLVx0ZGJtaVx0JWQyLCBkYXRhX2NyYzBcbi1cdGJwbFx0ZGF0YV9leGl0XG4mIzQzO1x0ZGJtaVx0JWQyLCAuTGRhdGFfY3JjMFxuJiM0MztcdGJwbFx0LkxkYXRhX2V4aXRcbiBcbi1cdG1vdmViXHQlYTNALCAlZDVcbiYjNDM7XHRtb3ZlYlx0JWE1QCwgJWQyXG4gXG4tXHRtb3ZlcVx0I21heF9yZXRyeSwgJWQyXG4tXG4tZGF0YV9jcmMxOlxuLVxuLVx0dHN0Ylx0JWEyQFxuLVx0ZGJtaVx0JWQyLCBkYXRhX2NyYzFcbi1cdGJwbFx0ZGF0YV9leGl0XG4tXG4tXHRtb3ZlYlx0JWEzQCwgJWQ1XG4mIzQzO1x0bW92ZXFcdCMuTG1heF9yZXRyeSwgJWQyXG4mIzQzOy5MZGF0YV9jcmMxOlxuJiM0MztcdG1vdmViXHQlYTJALCAlZDVcbiYjNDM7XHRkYm1pXHQlZDIsIC5MZGF0YV9jcmMxXG4mIzQzO1x0YnBsXHQuTGRhdGFfZXhpdFxuIFxuLVx0dHN0Ylx0JWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKVxuJiM0MztcdG1vdmViXHQlYTVALCAlZDJcbiBcbi1cdG1vdmViXHQjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaylcbiYjNDM7XHRhbmRiXHQjLkxocl9jcmNfZXJyb3IsICVkNVxuJiM0MztcdGJuZVx0LkxkYXRhX2V4aXRcbiBcbiBcdC8qIHJldHVybiBudW1iZXIgb2YgYnl0ZXMgcmVhZCAqL1xuIFxuLVx0bW92ZWxcdCNzZWN0b3Jfc2l6ZSwgJWQwXG4mIzQzO1x0bW92ZWxcdCMuTHNlY3Rvcl9zaXplLCAlZDBcbiBcdGFkZHdcdCMxLCAlZDRcbiBcdHN1YmxcdCVkNCwgJWQwXG4tXHRydHNcbi1kYXRhX2V4aXQ6XG4tXHRtb3ZlYlx0IzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspXG4tXHRtb3ZlcVx0Iy0xLCAlZDBcbiYjNDM7XG4mIzQzOy5MZGF0YV9leGl0OlxuJiM0MztcdG1vdmViXHQjLkxtcl93cml0ZV9hY3Rpb24sICVhM0AoLkx3cml0ZV9tb2RlMCAtIC5McmVhZF9tYXJrKVxuIFx0cnRzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTU6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9TV0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3dpbV9xdWV1ZV9ycSYjMzQ7LAogICAgJiMzNDtmbG9wcHlfcmVhZF9zZWN0b3JzJiMzNDssCiAgICAmIzM0O3N3aW1fcmVhZF9zZWN0b3JfcmFuZ2UmIzM0OywKICAgICYjMzQ7ZmxvcHB5X2lvY3RsJiMzNDssCiAgICAmIzM0O2Zsb3BweV9vcGVuJiMzNDssCiAgICAmIzM0O2Zsb3BweV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3N3aW1fcHJvYmUmIzM0OywKICAgICYjMzQ7c3dpbV9mbG9wcHlfaW5pdCYjMzQ7LAogICAgJiMzNDtzd2ltX2FkZF9mbG9wcHkmIzM0OywKICAgICYjMzQ7c2V0dXBfbWVkaXVtJiMzNDssCiAgICAmIzM0O2Zsb3BweV9lamVjdCYjMzQ7LAogICAgJiMzNDtzd2ltX3RyYWNrJiMzNDssCiAgICAmIzM0O3N3aW1fc2VlayYjMzQ7LAogICAgJiMzNDtzd2ltX3RyYWNrMDAmIzM0OywKICAgICYjMzQ7c3dpbV9zdGVwJiMzNDssCiAgICAmIzM0O3N3aW1fbW90b3ImIzM0OywKICAgICYjMzQ7c3dpbV9kcml2ZSYjMzQ7LAogICAgJiMzNDtzd2ltX2FjdGlvbiYjMzQ7LAogICAgJiMzNDtzd2ltX3NlbGVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFNXSU0gZmxvcHB5IGNvbnRyb2xsZXIgZHJpdmVyIGZvciBtNjhrIE1hY2ludG9zaCBzeXN0ZW1zLCBpbmNsdWRpbmcgY2hhbmdlcyB0byBkZXZpY2UgcmVnaXN0cmF0aW9uLCBpbml0aWFsaXphdGlvbiwgcmVhZGluZyBzZWN0b3JzLCBhbmQgaGFuZGxpbmcgaGFyZHdhcmUgc3RhdGUuIFRoZSBkcml2ZXIgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgKHVzaW5nIHRoZSBgcTgwMGAgbWFjaGluZSkuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBibG9jayBkZXZpY2Ugb3BlcmF0aW9ucywgaW9jdGxzLCBhbmQgaGFyZHdhcmUgaW50ZXJhY3Rpb24gZnVuY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNmNlNGM4N2ZiYTA5MDRiZTc5MGNiY2IwZDEyZmVjYTM1Y2Y1Mjg4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMTYgMTU6MjY6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL2NvbmZpZy5jIGIvYXJjaC9tNjhrL21hYy9jb25maWcuYwppbmRleCBjMDAzM2Y4ODVlZDRmMC4uZGJhM2RlMjFjM2M0MDUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9tNjhrL21hYy9jb25maWcuYwpAQCAtOTg0LDggJiM0Mzs5ODQsMzcgQEAgc3RhdGljIGludCBfX2luaXQgbWFjX3BsYXRmb3JtX2luaXQodm9pZCkKIAkJCS5zdGFydCA9IHN3aW1fYmFzZSwKIAkJCS5lbmQgICA9IHN3aW1fYmFzZSAmIzQzOyAweDFGRkYsCiAJCX07CiYjNDM7CQl1bnNpZ25lZCBpbnQgZGF0YSA9IDA7CiYjNDM7CiYjNDM7CQkvKiBNb2RlbHMgaW4gdGhpcyBsaXN0IGFyZSBzdXBwb3NlZCB0byBydW4gRkNMSyBhdCAzMiBNSHogKi8KJiM0MzsJCXN3aXRjaCAobWFjaW50b3NoX2NvbmZpZy0mZ3Q7aWRlbnQpIHsKJiM0MzsJCWNhc2UgTUFDX01PREVMX0NDTDoKJiM0MzsJCWNhc2UgTUFDX01PREVMX0NDTElJOgomIzQzOwkJY2FzZSBNQUNfTU9ERUxfTENJSUk6CiYjNDM7CQljYXNlIE1BQ19NT0RFTF9RNjA1OgomIzQzOwkJY2FzZSBNQUNfTU9ERUxfUTYwNV9BQ0M6CiYjNDM7CQljYXNlIE1BQ19NT0RFTF9RNjEwOgomIzQzOwkJY2FzZSBNQUNfTU9ERUxfUTYzMDoKJiM0MzsJCWNhc2UgTUFDX01PREVMX1E2NTA6CiYjNDM7CQljYXNlIE1BQ19NT0RFTF9RODAwOgomIzQzOwkJY2FzZSBNQUNfTU9ERUxfUDQ2MDoKJiM0MzsJCWNhc2UgTUFDX01PREVMX1A0NzU6CiYjNDM7CQljYXNlIE1BQ19NT0RFTF9QNDc1RjoKJiM0MzsJCWNhc2UgTUFDX01PREVMX1A1MjA6CiYjNDM7CQljYXNlIE1BQ19NT0RFTF9QNTUwOgomIzQzOwkJY2FzZSBNQUNfTU9ERUxfUDU3NToKJiM0MzsJCWNhc2UgTUFDX01PREVMX1A1ODg6CiYjNDM7CQljYXNlIE1BQ19NT0RFTF9UVjoKJiM0MzsJCWNhc2UgTUFDX01PREVMX0M2MTA6CiYjNDM7CQljYXNlIE1BQ19NT0RFTF9DNjUwOgomIzQzOwkJY2FzZSBNQUNfTU9ERUxfUEIxOTA6CiYjNDM7CQljYXNlIE1BQ19NT0RFTF9QQjUyMDoKJiM0MzsJCQlkYXRhID0gMTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KIAotCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCYjMzQ7c3dpbSYjMzQ7LCAtMSwgJmFtcDtzd2ltX3JzcmMsIDEpOwomIzQzOwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3Jlc25kYXRhKE5VTEwsICYjMzQ7c3dpbSYjMzQ7LCAtMSwgJmFtcDtzd2ltX3JzcmMsIDEsCiYjNDM7CQkJCQkJICAmYW1wO2RhdGEsIHNpemVvZihkYXRhKSk7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svc3dpbS5jIGIvZHJpdmVycy9ibG9jay9zd2ltLmMKaW5kZXggMGNjYzEyYTcyMzg4ZDUuLjQ2MGY3NGMxOWNmZGMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3N3aW0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3N3aW0uYwpAQCAtMiwxMiAmIzQzOzIsMjAgQEAKIC8qCiAgKiBEcml2ZXIgZm9yIFNXSU0gKFNhbmRlciBXb3ogSW50ZWdyYXRlZCBNYWNoaW5lKSBmbG9wcHkgY29udHJvbGxlcgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA4IExhdXJlbnQgVml2aWVyICZsdDtMYXVyZW50QGx2aXZpZXIuaW5mbyZndDsKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggTGF1cmVudCBWaXZpZXIgJmx0O0xhdXJlbnRAbHZpdmllci5pbmZvJmd0OwogICoKICAqIGJhc2VkIG9uIEFsYXN0YWlyIEJyaWRnZXdhdGVyIFNXSU0gYW5hbHlzaXMsIDIwMDEKICAqIGJhc2VkIG9uIFNXSU0zIGRyaXZlciAoYykgUGF1bCBNYWNrZXJyYXMsIDE5OTYKICAqIGJhc2VkIG9uIG5ldEJTRCBJV00gZHJpdmVyIChjKSAxOTk3LCAxOTk4IEhhdWtlIEZhdGguCiAgKgomIzQzOyAqIFNlZSBhbHNvOgomIzQzOyAqIEluc2lkZSBNYWNpbnRvc2gsIHZvbC4gSUlJLCBjaC4gMgomIzQzOyAqIGh0dHBzOi8vYXJjaGl2ZS5vcmcvZGV0YWlscy9TV0lNRGVzaWduRG9jcwomIzQzOyAqIE5FQyB1UEQ3MjA3MCBGREMgZGF0YXNoZWV0CiYjNDM7ICogbWtMaW51eCBzb3VyY2UgZmlsZSBzd2ltaWlpY29tbW9uaGFsLmMKJiM0MzsgKiBodHRwOi8vd3d3Lm1hYy5saW51eC1tNjhrLm9yZy9kZXZlbC9pd20ucGhwLmh0bWwKJiM0MzsgKiBNQU1FIHNvdXJjZSBmaWxlIHNvbnlkcml2LmNwcAomIzQzOyAqCiAgKiAyMDA0LTA4LTIxIChsdikgLSBJbml0aWFsIGltcGxlbWVudGF0aW9uCiAgKiAyMDA4LTEwLTMwIChsdikgLSBQb3J0IHRvIDIuNgogICovCkBAIC0xOSw2ICYjNDM7MjcsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L21ham9yLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9oZHJlZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX2RldmljZS5oJmd0OwpAQCAtNjAsNyAmIzQzOzY5LDcgQEAgc3RydWN0IHN3aW0gewogCVJFRyhyZWFkX2hhbmRzaGFrZSkKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKLSNkZWZpbmUgc3dpbV93cml0ZShiYXNlLCByZWcsIHYpIAlvdXRfOCgmYW1wOyhiYXNlKS0mZ3Q7d3JpdGVfIyNyZWcsICh2KSkKJiM0MzsjZGVmaW5lIHN3aW1fd3JpdGUoYmFzZSwgcmVnLCB2KQlvdXRfOCgmYW1wOyhiYXNlKS0mZ3Q7d3JpdGVfIyNyZWcsICh2KSkKICNkZWZpbmUgc3dpbV9yZWFkKGJhc2UsIHJlZykJCWluXzgoJmFtcDsoYmFzZSktJmd0O3JlYWRfIyNyZWcpCiAKIC8qIElXTSByZWdpc3RlcnMgKi8KQEAgLTg0LDYyICYjNDM7OTMsNTMgQEAgc3RydWN0IGl3bSB7CiAJUkVHKHE3SCkKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKLSNkZWZpbmUgaXdtX3dyaXRlKGJhc2UsIHJlZywgdikgCW91dF84KCZhbXA7KGJhc2UpLSZndDtyZWcsICh2KSkKJiM0MzsjZGVmaW5lIGl3bV93cml0ZShiYXNlLCByZWcsIHYpCQlvdXRfOCgmYW1wOyhiYXNlKS0mZ3Q7cmVnLCAodikpCiAjZGVmaW5lIGl3bV9yZWFkKGJhc2UsIHJlZykJCWluXzgoJmFtcDsoYmFzZSktJmd0O3JlZykKIAogLyogYml0cyBpbiBwaGFzZSByZWdpc3RlciAqLwogCi0jZGVmaW5lIFNFRUtfUE9TSVRJVkUJMHgwNzAKLSNkZWZpbmUgU0VFS19ORUdBVElWRQkweDA3NAotI2RlZmluZSBTVEVQCQkweDA3MQotI2RlZmluZSBNT1RPUl9PTgkweDA3MgotI2RlZmluZSBNT1RPUl9PRkYJMHgwNzYKLSNkZWZpbmUgSU5ERVgJCTB4MDczCi0jZGVmaW5lIEVKRUNUCQkweDA3NwotI2RlZmluZSBTRVRNRk0JCTB4MTcxCi0jZGVmaW5lIFNFVEdDUgkJMHgxNzUKJiM0MzsjZGVmaW5lIFNFRUtfUE9TSVRJVkUJMHgwRjAKJiM0MzsjZGVmaW5lIFNFRUtfTkVHQVRJVkUJMHgwRjQKJiM0MzsjZGVmaW5lIFNURVAJCTB4MEYxCiYjNDM7I2RlZmluZSBNT1RPUl9PTgkweDBGMgomIzQzOyNkZWZpbmUgTU9UT1JfT0ZGCTB4MEY2CiYjNDM7I2RlZmluZSBJTkRFWAkJMHgwRjMKJiM0MzsjZGVmaW5lIEVKRUNUCQkweDBGNwomIzQzOyNkZWZpbmUgU0VUTUZNCQkweDFGMQomIzQzOyNkZWZpbmUgU0VUR0NSCQkweDFGNQogCi0jZGVmaW5lIFJFTEFYCQkweDAzMwotI2RlZmluZSBMU1RSQgkJMHgwMDgKJiM0MzsjZGVmaW5lIFJFTEFYCQkweDBGMwomIzQzOyNkZWZpbmUgTFNUUkIJCTB4MEY4CiAKLSNkZWZpbmUgQ0FfTUFTSwkJMHgwNzcKJiM0MzsjZGVmaW5lIENBX01BU0sJCTB4MEY3CiYjNDM7I2RlZmluZSBTRUxfTUFTSwkweDEwMAogCiAvKiBTZWxlY3QgdmFsdWVzIGZvciBzd2ltX3NlbGVjdCBhbmQgc3dpbV9yZWFkYml0ICovCiAKLSNkZWZpbmUgUkVBRF9EQVRBXzAJMHgwNzQKLSNkZWZpbmUgT05FTUVHX0RSSVZFCTB4MDc1Ci0jZGVmaW5lIFNJTkdMRV9TSURFRAkweDA3NgotI2RlZmluZSBEUklWRV9QUkVTRU5UCTB4MDc3Ci0jZGVmaW5lIERJU0tfSU4JCTB4MTcwCi0jZGVmaW5lIFdSSVRFX1BST1QJMHgxNzEKLSNkZWZpbmUgVFJBQ0tfWkVSTwkweDE3MgotI2RlZmluZSBUQUNITwkJMHgxNzMKLSNkZWZpbmUgUkVBRF9EQVRBXzEJMHgxNzQKLSNkZWZpbmUgR0NSX01PREUJMHgxNzUKLSNkZWZpbmUgU0VFS19DT01QTEVURQkweDE3NgotI2RlZmluZSBUV09NRUdfTUVESUEJMHgxNzcKJiM0MzsjZGVmaW5lIFNURVBQSU5HCTB4MEYxCiYjNDM7I2RlZmluZSBSRUFEX0RBVEFfMAkweDBGNAomIzQzOyNkZWZpbmUgT05FTUVHX0RSSVZFCTB4MEY1CiYjNDM7I2RlZmluZSBTSU5HTEVfU0lERUQJMHgwRjYKJiM0MzsjZGVmaW5lIERSSVZFX1BSRVNFTlQJMHgwRjcKJiM0MzsjZGVmaW5lIERJU0tfSU4JCTB4MUYwCiYjNDM7I2RlZmluZSBXUklURV9QUk9UCTB4MUYxCiYjNDM7I2RlZmluZSBUUkFDS19aRVJPCTB4MUYyCiYjNDM7I2RlZmluZSBUQUNITwkJMHgxRjMKJiM0MzsjZGVmaW5lIFJFQURfREFUQV8xCTB4MUY0CiYjNDM7I2RlZmluZSBHQ1JfTU9ERQkweDFGNQomIzQzOyNkZWZpbmUgUkVBRFkJCTB4MUY2CiYjNDM7I2RlZmluZSBUV09NRUdfTUVESUEJMHgxRjcKIAogLyogQml0cyBpbiBoYW5kc2hha2UgcmVnaXN0ZXIgKi8KIAotI2RlZmluZSBNQVJLX0JZVEUJMHgwMQotI2RlZmluZSBDUkNfWkVSTwkweDAyCi0jZGVmaW5lIFJEREFUQQkJMHgwNAogI2RlZmluZSBTRU5TRQkJMHgwOAotI2RlZmluZSBNT1RFTgkJMHgxMAotI2RlZmluZSBFUlJPUgkJMHgyMAogI2RlZmluZSBEQVQyQllURQkweDQwCiAjZGVmaW5lIERBVDFCWVRFCTB4ODAKIAogLyogYml0cyBpbiBzZXR1cCByZWdpc3RlciAqLwogCi0jZGVmaW5lIFNfSU5WX1dEQVRBCTB4MDEKLSNkZWZpbmUgU18zXzVfU0VMRUNUCTB4MDIKLSNkZWZpbmUgU19HQ1IJCTB4MDQKICNkZWZpbmUgU19GQ0xLX0RJVjIJMHgwOAotI2RlZmluZSBTX0VSUk9SX0NPUlIJMHgxMAogI2RlZmluZSBTX0lCTV9EUklWRQkweDIwCi0jZGVmaW5lIFNfR0NSX1dSSVRFCTB4NDAKLSNkZWZpbmUgU19USU1FT1VUCTB4ODAKIAogLyogYml0cyBpbiBtb2RlIHJlZ2lzdGVyICovCiAKQEAgLTE0OCwxNCAmIzQzOzE0OCwxMyBAQCBzdHJ1Y3QgaXdtIHsKICNkZWZpbmUgRU5CTDIJCTB4MDQKICNkZWZpbmUgQUNUSU9OCQkweDA4CiAjZGVmaW5lIFdSSVRFX01PREUJMHgxMAotI2RlZmluZSBIRURTRUwJCTB4MjAKJiM0MzsjZGVmaW5lIElTTV9TRUxFQ1QJMHg0MAogI2RlZmluZSBNT1RPTgkJMHg4MAogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiBlbnVtIGRyaXZlX2xvY2F0aW9uIHsKLQlJTlRFUk5BTF9EUklWRSA9IDB4MDIsCi0JRVhURVJOQUxfRFJJVkUgPSAweDA0LAomIzQzOwlOT19EUklWRSA9IDAsCiYjNDM7CUlOVEVSTkFMX0RSSVZFID0gQklUKDEpLAomIzQzOwlFWFRFUk5BTF9EUklWRSA9IEJJVCgyKSwKIH07CiAKIGVudW0gbWVkaWFfdHlwZSB7CkBAIC0xNjgsMjMgJiM0MzsxNjcsMjMgQEAgc3RydWN0IGZsb3BweV9zdGF0ZSB7CiAJLyogcGh5c2ljYWwgcHJvcGVydGllcyAqLwogCiAJZW51bSBkcml2ZV9sb2NhdGlvbiBsb2NhdGlvbjsJLyogaW50ZXJuYWwgb3IgZXh0ZXJuYWwgZHJpdmUgKi8KLQlpbnQJCSBoZWFkX251bWJlcjsJLyogc2luZ2xlLSBvciBkb3VibGUtc2lkZWQgZHJpdmUgKi8KJiM0MzsJaW50IGhlYWRfbnVtYmVyOwkJLyogc2luZ2xlLSBvciBkb3VibGUtc2lkZWQgZHJpdmUgKi8KIAogCS8qIG1lZGlhICovCiAKLQlpbnQJCSBkaXNrX2luOwotCWludAkJIGVqZWN0ZWQ7Ci0JZW51bSBtZWRpYV90eXBlCSB0eXBlOwotCWludAkJIHdyaXRlX3Byb3RlY3RlZDsKJiM0MzsJaW50IGRpc2tfaW47CiYjNDM7CWludCBlamVjdGVkOwomIzQzOwllbnVtIG1lZGlhX3R5cGUgdHlwZTsKJiM0MzsJaW50IHdyaXRlX3Byb3RlY3RlZDsKIAotCWludAkJIHRvdGFsX3NlY3M7Ci0JaW50CQkgc2VjcGVyY3lsOwotCWludAkJIHNlY3BlcnRyYWNrOwomIzQzOwl1bnNpZ25lZCBpbnQgdG90YWxfc2VjczsKJiM0MzsJdW5zaWduZWQgaW50IHNlY3BlcmN5bDsKJiM0MzsJdW5zaWduZWQgaW50IHNlY3BlcnRyYWNrOwogCiAJLyogaW4tdXNlIGluZm9ybWF0aW9uICovCiAKLQlpbnQJCXRyYWNrOwotCWludAkJcmVmX2NvdW50OwomIzQzOwlpbnQgdHJhY2s7CiYjNDM7CWludCByZWZfY291bnQ7CiAJYm9vbCByZWdpc3RlcmVkOwogCiAJc3RydWN0IGdlbmRpc2sgKmRpc2s7CkBAIC0yMDksNyAmIzQzOzIwOCw2IEBAIGVudW0gaGVhZCB7CiAKIHN0cnVjdCBzd2ltX3ByaXYgewogCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2U7Ci0Jc3BpbmxvY2tfdCBsb2NrOwogCWludCBmbG9wcHlfY291bnQ7CiAJc3RydWN0IGZsb3BweV9zdGF0ZSB1bml0W0ZEX01BWF9VTklUXTsKIH07CkBAIC0yMjAsMjAgJiM0MzsyMTgsMjQgQEAgZXh0ZXJuIGludCBzd2ltX3JlYWRfc2VjdG9yX2RhdGEoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwKIAkJCQkgdW5zaWduZWQgY2hhciAqZGF0YSk7CiAKIHN0YXRpYyBERUZJTkVfTVVURVgoc3dpbV9tdXRleCk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3N3aW1fbW9kZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgZW5hYmxlKQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldF9zd2ltX21vZGUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IGVuYWJsZSkKIHsKLQlzdHJ1Y3QgaXdtIF9faW9tZW0gKml3bV9iYXNlOwomIzQzOwlzdHJ1Y3QgaXdtIF9faW9tZW0gKml3bV9iYXNlID0gKHN0cnVjdCBpd20gX19pb21lbSAqKWJhc2U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghZW5hYmxlKSB7Ci0JCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIDB4ZjgpOwomIzQzOwkJc3dpbV93cml0ZShiYXNlLCBtb2RlMCwgQUNUSU9OKTsKJiM0MzsJCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIEVOQkwxIHwgRU5CTDIgfCBNT1RPTik7CiYjNDM7CQlzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBJU01fU0VMRUNUKTsKJiM0MzsJCWl3bV9yZWFkKGl3bV9iYXNlLCBxN0wpOwogCQlyZXR1cm47CiAJfQogCi0JaXdtX2Jhc2UgPSAoc3RydWN0IGl3bSBfX2lvbWVtICopYmFzZTsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKIAlpd21fcmVhZChpd21fYmFzZSwgcTdMKTsKJiM0MzsJaXdtX3JlYWQoaXdtX2Jhc2UsIHE2TCk7CiAJaXdtX3JlYWQoaXdtX2Jhc2UsIG10ck9mZik7CiAJaXdtX3JlYWQoaXdtX2Jhc2UsIHE2SCk7CiAKQEAgLTI0NSw3ICYjNDM7MjQ3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9zd2ltX21vZGUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IGVuYWJsZSkKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGdldF9zd2ltX21vZGUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSkKJiM0MztzdGF0aWMgaW50IGdldF9zd2ltX21vZGUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0yNzEsNyAmIzQzOzI3Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX3NlbGVjdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgc2VsKQogewogCXN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIFJFTEFYKTsKIAotCXZpYTFfc2V0X2hlYWQoc2VsICZhbXA7IDB4MTAwKTsKJiM0MzsJdmlhMV9zZXRfaGVhZChzZWwgJmFtcDsgU0VMX01BU0spOwogCiAJc3dpbV93cml0ZShiYXNlLCBwaGFzZSwgc2VsICZhbXA7IENBX01BU0spOwogfQpAQCAtMjg0LDE1ICYjNDM7Mjg2LDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX2FjdGlvbihzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgYWN0aW9uKQogCiAJc3dpbV9zZWxlY3QoYmFzZSwgYWN0aW9uKTsKIAl1ZGVsYXkoMSk7Ci0Jc3dpbV93cml0ZShiYXNlLCBwaGFzZSwgKExTVFJCJmx0OyZsdDs0KSB8IExTVFJCKTsKLQl1ZGVsYXkoMSk7Ci0Jc3dpbV93cml0ZShiYXNlLCBwaGFzZSwgKExTVFJCJmx0OyZsdDs0KSB8ICgofkxTVFJCKSAmYW1wOyAweDBGKSk7CiYjNDM7CXN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIGFjdGlvbiB8IExTVFJCKTsKJiM0MzsJdWRlbGF5KDIpOwomIzQzOwlzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCBhY3Rpb24pOwogCXVkZWxheSgxKTsKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc3dpbV9yZWFkYml0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBiaXQpCiYjNDM7c3RhdGljIGlubGluZSBib29sIHN3aW1fcmVhZGJpdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgYml0KQogewogCWludCBzdGF0OwogCkBAIC0zMDUsMTI1ICYjNDM7MzA3LDExOSBAQCBzdGF0aWMgaW5saW5lIGludCBzd2ltX3JlYWRiaXQoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IGJpdCkKIAlyZXR1cm4gKHN0YXQgJmFtcDsgU0VOU0UpID09IDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX2RyaXZlKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsCiYjNDM7I2RlZmluZSBzd2ltX3JlYWRiaXRfdGltZW91dChiYXNlLCBiaXQsIHZhbCwgdGltZW91dF91cykgXAomIzQzOwlwb2xsX3RpbWVvdXRfdXMoLCBzd2ltX3JlYWRiaXQoYmFzZSwgYml0KSA9PSB2YWwsIDEwMDAsIHRpbWVvdXRfdXMsIGZhbHNlKQomIzQzOwomIzQzOyNkZWZpbmUgc3dpbV9yZWFkYml0X3RpbWVvdXRfYXRvbWljKGJhc2UsIGJpdCwgdmFsLCB0aW1lb3V0X3VzKSBcCiYjNDM7CXBvbGxfdGltZW91dF91c19hdG9taWMoLCBzd2ltX3JlYWRiaXQoYmFzZSwgYml0KSA9PSB2YWwsIDEsIHRpbWVvdXRfdXMsIGZhbHNlKQomIzQzOwomIzQzOyNkZWZpbmUgc3dpbV9SRUFEWV90aW1lb3V0KGJhc2UpIFwKJiM0MzsoeyBcCiYjNDM7CWludCByZXQgPSBzd2ltX3JlYWRiaXRfdGltZW91dChiYXNlLCBSRUFEWSwgdHJ1ZSwgMTAwMCAqIDEwMDApOyBcCiYjNDM7CWlmIChyZXQpIFwKJiM0MzsJCXByaW50ayhLRVJOX0RFQlVHICYjMzQ7JXM6IGRyaXZlIG5vdCByZWFkeVxuJiMzNDssIF9fZnVuY19fKTsgXAomIzQzOwlyZXQ7IFwKJiM0Mzt9KQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHN3aW1fZHJpdmUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwKIAkJCSAgICAgIGVudW0gZHJpdmVfbG9jYXRpb24gbG9jYXRpb24pCiB7CiAJaWYgKGxvY2F0aW9uID09IElOVEVSTkFMX0RSSVZFKSB7CiAJCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIEVYVEVSTkFMX0RSSVZFKTsgLyogY2xlYXIgZHJpdmUgMSBiaXQgKi8KIAkJc3dpbV93cml0ZShiYXNlLCBtb2RlMSwgSU5URVJOQUxfRFJJVkUpOyAvKiBzZXQgZHJpdmUgMCBiaXQgKi8KJiM0MzsJCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTEsIE1PVE9OKTsKIAl9IGVsc2UgaWYgKGxvY2F0aW9uID09IEVYVEVSTkFMX0RSSVZFKSB7CiAJCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIElOVEVSTkFMX0RSSVZFKTsgLyogY2xlYXIgZHJpdmUgMCBiaXQgKi8KIAkJc3dpbV93cml0ZShiYXNlLCBtb2RlMSwgRVhURVJOQUxfRFJJVkUpOyAvKiBzZXQgZHJpdmUgMSBiaXQgKi8KJiM0MzsJCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTEsIE1PVE9OKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIElOVEVSTkFMX0RSSVZFKTsKJiM0MzsJCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIEVYVEVSTkFMX0RSSVZFKTsKJiM0MzsJCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIE1PVE9OKTsKIAl9CiYjNDM7CXVkZWxheSgxKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHN3aW1fbW90b3Ioc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwKLQkJCSAgICAgIGVudW0gbW90b3JfYWN0aW9uIGFjdGlvbikKJiM0MztzdGF0aWMgdm9pZCBzd2ltX21vdG9yKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsCiYjNDM7CQkgICAgICAgZW51bSBtb3Rvcl9hY3Rpb24gYWN0aW9uKQogewogCWlmIChhY3Rpb24gPT0gT04pIHsKLQkJaW50IGk7Ci0KIAkJc3dpbV9hY3Rpb24oYmFzZSwgTU9UT1JfT04pOwotCi0JCWZvciAoaSA9IDA7IGkgJmx0OyAyKkhaOyBpJiM0MzsmIzQzOykgewotCQkJc3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpOwotCQkJaWYgKHN3aW1fcmVhZGJpdChiYXNlLCBNT1RPUl9PTikpCi0JCQkJYnJlYWs7Ci0JCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQkJc2NoZWR1bGVfdGltZW91dCgxKTsKLQkJfQomIzQzOwkJc3dpbV9yZWFkYml0X3RpbWVvdXQoYmFzZSwgTU9UT1JfT04sIHRydWUsIDIwMDAgKiAxMDAwKTsKIAl9IGVsc2UgaWYgKGFjdGlvbiA9PSBPRkYpIHsKIAkJc3dpbV9hY3Rpb24oYmFzZSwgTU9UT1JfT0ZGKTsKLQkJc3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpOwomIzQzOwkJc3dpbV93cml0ZShiYXNlLCBwaGFzZSwgUkVMQVgpOwogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHN3aW1fZWplY3Qoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSkKJiM0MztzdGF0aWMgdm9pZCBzd2ltX2VqZWN0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpCiB7Ci0JaW50IGk7Ci0KIAlzd2ltX2FjdGlvbihiYXNlLCBFSkVDVCk7Ci0KLQlmb3IgKGkgPSAwOyBpICZsdDsgMipIWjsgaSYjNDM7JiM0MzspIHsKLQkJc3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpOwotCQlpZiAoIXN3aW1fcmVhZGJpdChiYXNlLCBESVNLX0lOKSkKLQkJCWJyZWFrOwotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlzY2hlZHVsZV90aW1lb3V0KDEpOwotCX0KLQlzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7CiYjNDM7CXN3aW1fcmVhZGJpdF90aW1lb3V0KGJhc2UsIERJU0tfSU4sIGZhbHNlLCAyMDAwICogMTAwMCk7CiYjNDM7CW1zbGVlcCgxKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHN3aW1faGVhZChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBlbnVtIGhlYWQgaGVhZCkKIHsKLQkvKiB3YWl0IGRyaXZlIGlzIHJlYWR5ICovCi0KIAlpZiAoaGVhZCA9PSBVUFBFUl9IRUFEKQogCQlzd2ltX3NlbGVjdChiYXNlLCBSRUFEX0RBVEFfMSk7CiAJZWxzZSBpZiAoaGVhZCA9PSBMT1dFUl9IRUFEKQogCQlzd2ltX3NlbGVjdChiYXNlLCBSRUFEX0RBVEFfMCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHN3aW1fc3RlcChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKQomIzQzO3N0YXRpYyBpbnQgc3dpbV9zdGVwKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpCiB7Ci0JaW50IHdhaXQ7Ci0KIAlzd2ltX2FjdGlvbihiYXNlLCBTVEVQKTsKLQotCWZvciAod2FpdCA9IDA7IHdhaXQgJmx0OyBIWjsgd2FpdCYjNDM7JiM0MzspIHsKLQotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlzY2hlZHVsZV90aW1lb3V0KDEpOwotCi0JCXN3aW1fc2VsZWN0KGJhc2UsIFJFTEFYKTsKLQkJaWYgKCFzd2ltX3JlYWRiaXQoYmFzZSwgU1RFUCkpCi0JCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIC0xOwomIzQzOwl1ZGVsYXkoMTUwKTsKJiM0MzsJcmV0dXJuIHN3aW1fcmVhZGJpdF90aW1lb3V0X2F0b21pYyhiYXNlLCBTVEVQUElORywgZmFsc2UsIDIwICogMTAwMCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHN3aW1fdHJhY2swMChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKQomIzQzO3N0YXRpYyBpbnQgc3dpbV90cmFjazAwKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpCiB7CiAJaW50IHRyeTsKIAogCXN3aW1fYWN0aW9uKGJhc2UsIFNFRUtfTkVHQVRJVkUpOwogCiAJZm9yICh0cnkgPSAwOyB0cnkgJmx0OyAxMDA7IHRyeSYjNDM7JiM0MzspIHsKJiM0MzsJCW1zbGVlcCgzKTsKIAotCQlzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7CiAJCWlmIChzd2ltX3JlYWRiaXQoYmFzZSwgVFJBQ0tfWkVSTykpCi0JCQlicmVhazsKJiM0MzsJCQlyZXR1cm4gMDsKIAogCQlpZiAoc3dpbV9zdGVwKGJhc2UpKQotCQkJcmV0dXJuIC0xOwomIzQzOwkJCWJyZWFrOwogCX0KIAotCWlmIChzd2ltX3JlYWRiaXQoYmFzZSwgVFJBQ0tfWkVSTykpCi0JCXJldHVybiAwOwotCiYjNDM7CXByX2VycigmIzM0O3N3aW06IHRyYWNrIHplcm8gcmVjYWxpYnJhdGlvbiBmYWlsZWRcbiYjMzQ7KTsKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHN3aW1fc2VlayhzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgc3RlcCkKJiM0MztzdGF0aWMgaW50IHN3aW1fc2VlayhzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgc3RlcCkKIHsKLQlpZiAoc3RlcCA9PSAwKQotCQlyZXR1cm4gMDsKLQogCWlmIChzdGVwICZsdDsgMCkgewogCQlzd2ltX2FjdGlvbihiYXNlLCBTRUVLX05FR0FUSVZFKTsKIAkJc3RlcCA9IC1zdGVwOwotCX0gZWxzZQomIzQzOwl9IGVsc2UgaWYgKHN0ZXAgJmd0OyAwKQogCQlzd2ltX2FjdGlvbihiYXNlLCBTRUVLX1BPU0lUSVZFKTsKJiM0MzsJdWRlbGF5KDEpOwomIzQzOwomIzQzOwlzd2ltX1JFQURZX3RpbWVvdXQoYmFzZSk7CiYjNDM7CiYjNDM7CWlmIChzdGVwID09IDApCiYjNDM7CQlyZXR1cm4gMDsKIAotCWZvciAoIDsgc3RlcCAmZ3Q7IDA7IHN0ZXAtLSkgewomIzQzOwlmb3IgKDsgc3RlcCAmZ3Q7IDA7IHN0ZXAtLSkgewogCQlpZiAoc3dpbV9zdGVwKGJhc2UpKQogCQkJcmV0dXJuIC0xOwogCX0KIAomIzQzOwltc2xlZXAoMzApOwomIzQzOwlzd2ltX1JFQURZX3RpbWVvdXQoYmFzZSk7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHN3aW1fdHJhY2soc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsICBpbnQgdHJhY2spCiYjNDM7c3RhdGljIGludCBzd2ltX3RyYWNrKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzLCBpbnQgdHJhY2spCiB7CiAJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLSZndDtzd2QtJmd0O2Jhc2U7CiAJaW50IHJldDsKQEAgLTQ0NSw4ICYjNDM7NDQxLDEwIEBAIHN0YXRpYyBpbnQgZmxvcHB5X2VqZWN0KHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzKQogCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy0mZ3Q7c3dkLSZndDtiYXNlOwogCiAJc3dpbV9kcml2ZShiYXNlLCBmcy0mZ3Q7bG9jYXRpb24pOwomIzQzOwlzd2ltX3RyYWNrKGZzLCAxKTsKIAlzd2ltX21vdG9yKGJhc2UsIE9GRik7CiAJc3dpbV9lamVjdChiYXNlKTsKJiM0MzsJc3dpbV9kcml2ZShiYXNlLCBOT19EUklWRSk7CiAKIAlmcy0mZ3Q7ZGlza19pbiA9IDA7CiAJZnMtJmd0O2VqZWN0ZWQgPSAxOwpAQCAtNDU0LDcwICYjNDM7NDUyLDgxIEBAIHN0YXRpYyBpbnQgZmxvcHB5X2VqZWN0KHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzd2ltX3JlYWRfc2VjdG9yKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzLAotCQkJCSAgIGludCBzaWRlLCBpbnQgdHJhY2ssCi0JCQkJICAgaW50IHNlY3RvciwgdW5zaWduZWQgY2hhciAqYnVmZmVyKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgc3dpbV9yZWFkX3NlY3Rvcl9yYW5nZShzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcywKJiM0MzsJCQkJCXVuc2lnbmVkIGludCBzaWRlLCB1bnNpZ25lZCBpbnQgdHJhY2ssCiYjNDM7CQkJCQl1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBjb3VudCwKJiM0MzsJCQkJCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcikKIHsKIAlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gZnMtJmd0O3N3ZC0mZ3Q7YmFzZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBzZWN0b3JfaGVhZGVyIGhlYWRlcjsKLQlpbnQgcmV0ID0gLTE7Ci0Jc2hvcnQgaTsKLQotCXN3aW1fdHJhY2soZnMsIHRyYWNrKTsKJiM0MzsJaW50IGksIGJpdHMgPSAwOwogCi0Jc3dpbV93cml0ZShiYXNlLCBtb2RlMSwgTU9UT04pOwotCXN3aW1faGVhZChiYXNlLCBzaWRlKTsKLQlzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBzaWRlKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IDE4OyBpJiM0MzsmIzQzOykgeyAvKiBBIHRyYWNrIGhhcyBhdCBtb3N0IDE4IHNlY3RvcnMgKi8KJiM0MzsJCWlmIChpICZndDs9IGNvdW50KQomIzQzOwkJCWJyZWFrOwomIzQzOwkJYml0cyB8PSBCSVQoaSk7CiYjNDM7CX0KIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgMzY7IGkmIzQzOyYjNDM7KSB7Ci0JCXJldCA9IHN3aW1fcmVhZF9zZWN0b3JfaGVhZGVyKGJhc2UsICZhbXA7aGVhZGVyKTsKLQkJaWYgKCFyZXQgJmFtcDsmYW1wOyAoaGVhZGVyLnNlY3RvciA9PSBzZWN0b3IpKSB7Ci0JCQkvKiBmb3VuZCAqLwotCi0JCQlyZXQgPSBzd2ltX3JlYWRfc2VjdG9yX2RhdGEoYmFzZSwgYnVmZmVyKTsKJiM0MzsJCWlmIChiaXRzID09IDApIC8qIEFsbCBjb3VudCBzZWN0b3JzIHdlcmUgcmVhZCBvayAqLwogCQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlpZiAoc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXIoYmFzZSwgJmFtcDtoZWFkZXIpIHx8CiYjNDM7CQkgICAgc3dpbV9yZWFkKGJhc2UsIGVycm9yKSB8fCBoZWFkZXIudHJhY2sgIT0gdHJhY2sgfHwKJiM0MzsJCSAgICBoZWFkZXIuc2lkZSAhPSBzaWRlIHx8IGhlYWRlci5zaXplICE9IDIpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpZiAoaGVhZGVyLnNlY3RvciAmZ3Q7PSBzdGFydCAmYW1wOyZhbXA7IGhlYWRlci5zZWN0b3IgJmx0OyBzdGFydCAmIzQzOyBjb3VudCkgewomIzQzOwkJCXVuc2lnbmVkIGludCBvZmZzZXQgPSBoZWFkZXIuc2VjdG9yIC0gc3RhcnQ7CiYjNDM7CQkJaW50IHJldDsKJiM0MzsKJiM0MzsJCQlpZiAoKGJpdHMgJmFtcDsgQklUKG9mZnNldCkpID09IDApCiYjNDM7CQkJCWNvbnRpbnVlOyAvKiBUaGlzIHNlY3RvciB3YXMgYWxyZWFkeSByZWFkIG9rICovCiYjNDM7CiYjNDM7CQkJcmV0ID0gc3dpbV9yZWFkX3NlY3Rvcl9kYXRhKGJhc2UsIGJ1ZmZlciAmIzQzOyA1MTIgKiBvZmZzZXQpOwomIzQzOwkJCWlmIChyZXQgPT0gNTEyICZhbXA7JmFtcDsgc3dpbV9yZWFkKGJhc2UsIGVycm9yKSA9PSAwKQomIzQzOwkJCQliaXRzICZhbXA7PSB+QklUKG9mZnNldCk7CiAJCX0KIAl9CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0Jc3dpbV93cml0ZShiYXNlLCBtb2RlMCwgTU9UT04pOwotCi0JaWYgKChoZWFkZXIuc2lkZSAhPSBzaWRlKSAgfHwgKGhlYWRlci50cmFjayAhPSB0cmFjaykgfHwKLQkgICAgIChoZWFkZXIuc2VjdG9yICE9IHNlY3RvcikpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIGJpdHMgPyBmZnMoYml0cykgLSAxIDogY291bnQ7IC8qIE5vLiBvZiBjb250aWd1b3VzIG9rIHNlY3RvcnMgKi8KIH0KIAogc3RhdGljIGJsa19zdGF0dXNfdCBmbG9wcHlfcmVhZF9zZWN0b3JzKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzLAotCQkJICAgICAgIGludCByZXFfc2VjdG9yLCBpbnQgc2VjdG9yc19uYiwKLQkJCSAgICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIpCiYjNDM7CQkJCQl1bnNpZ25lZCBpbnQgcmVxX3NlY3RvciwKJiM0MzsJCQkJCXVuc2lnbmVkIGludCBzZWN0b3JzX25iLAomIzQzOwkJCQkJdW5zaWduZWQgY2hhciAqYnVmZmVyKQogewogCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy0mZ3Q7c3dkLSZndDtiYXNlOwotCWludCByZXQ7Ci0JaW50IHNpZGUsIHRyYWNrLCBzZWN0b3I7Ci0JaW50IGksIHRyeTsKLQomIzQzOwl1bnNpZ25lZCBpbnQgZmFpbHVyZXMgPSAwOwogCiAJc3dpbV9kcml2ZShiYXNlLCBmcy0mZ3Q7bG9jYXRpb24pOwotCWZvciAoaSA9IHJlcV9zZWN0b3I7IGkgJmx0OyByZXFfc2VjdG9yICYjNDM7IHNlY3RvcnNfbmI7IGkmIzQzOyYjNDM7KSB7Ci0JCWludCB4OwotCQl0cmFjayA9IGkgLyBmcy0mZ3Q7c2VjcGVyY3lsOwotCQl4ID0gaSAlIGZzLSZndDtzZWNwZXJjeWw7Ci0JCXNpZGUgPSB4IC8gZnMtJmd0O3NlY3BlcnRyYWNrOwotCQlzZWN0b3IgPSB4ICUgZnMtJmd0O3NlY3BlcnRyYWNrICYjNDM7IDE7Ci0KLQkJdHJ5ID0gNTsKLQkJZG8gewotCQkJcmV0ID0gc3dpbV9yZWFkX3NlY3Rvcihmcywgc2lkZSwgdHJhY2ssIHNlY3RvciwKLQkJCQkJCWJ1ZmZlcik7Ci0JCQlpZiAodHJ5LS0gPT0gMCkKLQkJCQlyZXR1cm4gQkxLX1NUU19JT0VSUjsKLQkJfSB3aGlsZSAocmV0ICE9IDUxMik7Ci0KLQkJYnVmZmVyICYjNDM7PSByZXQ7CiYjNDM7CXN3aW1fUkVBRFlfdGltZW91dChiYXNlKTsKJiM0MzsKJiM0MzsJd2hpbGUgKHNlY3RvcnNfbmIpIHsKJiM0MzsJCXVuc2lnbmVkIGludCBjeWwsIHgsIGhlYWQsIHNlY3RvciwgbiwgcmV0OwomIzQzOwomIzQzOwkJY3lsID0gcmVxX3NlY3RvciAvIGZzLSZndDtzZWNwZXJjeWw7CiYjNDM7CQl4ID0gcmVxX3NlY3RvciAlIGZzLSZndDtzZWNwZXJjeWw7CiYjNDM7CQloZWFkID0gKHggJmd0Oz0gZnMtJmd0O3NlY3BlcnRyYWNrKSA/IDEgOiAwOwomIzQzOwkJc2VjdG9yID0geCAlIGZzLSZndDtzZWNwZXJ0cmFjazsKJiM0MzsJCW4gPSBtaW4oc2VjdG9yc19uYiwgZnMtJmd0O3NlY3BlcnRyYWNrIC0gc2VjdG9yKTsKJiM0MzsKJiM0MzsJCXN3aW1fdHJhY2soZnMsIGN5bCk7CiYjNDM7CQlzd2ltX2hlYWQoYmFzZSwgaGVhZCk7CiYjNDM7CiYjNDM7CQlyZXQgPSBzd2ltX3JlYWRfc2VjdG9yX3JhbmdlKGZzLCBoZWFkLCBjeWwsIHNlY3RvciAmIzQzOyAxLCBuLCBidWZmZXIpOwomIzQzOwkJaWYgKHJldCAhPSBuKQomIzQzOwkJCSYjNDM7JiM0MztmYWlsdXJlczsKJiM0MzsJCWlmIChmYWlsdXJlcyAmZ3Q7PSA1KQomIzQzOwkJCXJldHVybiBCTEtfU1RTX0lPRVJSOwomIzQzOwomIzQzOwkJYnVmZmVyICYjNDM7PSA1MTIgKiByZXQ7CiYjNDM7CQlzZWN0b3JzX25iIC09IHJldDsKJiM0MzsJCXJlcV9zZWN0b3IgJiM0Mzs9IHJldDsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTUyNywxMiAmIzQzOzUzNiwxMCBAQCBzdGF0aWMgYmxrX3N0YXR1c190IHN3aW1fcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsCiAJCQkJICBjb25zdCBzdHJ1Y3QgYmxrX21xX3F1ZXVlX2RhdGEgKmJkKQogewogCXN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzID0gaGN0eC0mZ3Q7cXVldWUtJmd0O3F1ZXVlZGF0YTsKLQlzdHJ1Y3Qgc3dpbV9wcml2ICpzd2QgPSBmcy0mZ3Q7c3dkOwogCXN0cnVjdCByZXF1ZXN0ICpyZXEgPSBiZC0mZ3Q7cnE7CiAJYmxrX3N0YXR1c190IGVycjsKIAotCWlmICghc3Bpbl90cnlsb2NrX2lycSgmYW1wO3N3ZC0mZ3Q7bG9jaykpCi0JCXJldHVybiBCTEtfU1RTX0RFVl9SRVNPVVJDRTsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3N3aW1fbXV0ZXgpOwogCiAJYmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTsKIApAQCAtNTUwLDE2ICYjNDM7NTU3LDE2IEBAIHN0YXRpYyBibGtfc3RhdHVzX3Qgc3dpbV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwKIAogCWVyciA9IEJMS19TVFNfT0s7CiBvdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxKCZhbXA7c3dkLSZndDtsb2NrKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7c3dpbV9tdXRleCk7CiAJcmV0dXJuIGVycjsKIAogfQogCiBzdGF0aWMgc3RydWN0IGZsb3BweV9zdHJ1Y3QgZmxvcHB5X3R5cGVbNF0gPSB7Ci0JeyAgICAwLCAgMCwgMCwgIDAsIDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIE5VTEwgfSwgLyogbm8gdGVzdGluZyAgICovCiYjNDM7CXsgICAgMCwgIDAsIDAsICAwLCAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCBOVUxMIH0sIC8qIG5vIHRlc3RpbmcgKi8KIAl7ICA3MjAsICA5LCAxLCA4MCwgMCwgMHgyQSwgMHgwMiwgMHhERiwgMHg1MCwgTlVMTCB9LCAvKiAzNjBLQiBTUyAzLjUmIzM0OyovCi0JeyAxNDQwLCAgOSwgMiwgODAsIDAsIDB4MkEsIDB4MDIsIDB4REYsIDB4NTAsIE5VTEwgfSwgLyogNzIwS0IgMy41JiMzNDsgICAqLwotCXsgMjg4MCwgMTgsIDIsIDgwLCAwLCAweDFCLCAweDAwLCAweENGLCAweDZDLCBOVUxMIH0sIC8qIDEuNDRNQiAzLjUmIzM0OyAgKi8KJiM0MzsJeyAxNDQwLCAgOSwgMiwgODAsIDAsIDB4MkEsIDB4MDIsIDB4REYsIDB4NTAsIE5VTEwgfSwgLyogNzIwS0IgMy41JiMzNDsgKi8KJiM0MzsJeyAyODgwLCAxOCwgMiwgODAsIDAsIDB4MUIsIDB4MDAsIDB4Q0YsIDB4NkMsIE5VTEwgfSwgLyogMS40NE1CIDMuNSYjMzQ7ICovCiB9OwogCiBzdGF0aWMgaW50IGdldF9mbG9wcHlfZ2VvbWV0cnkoc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsIGludCB0eXBlLApAQCAtNTg2LDIzICYjNDM7NTkzLDE2IEBAIHN0YXRpYyB2b2lkIHNldHVwX21lZGl1bShzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcykKIAogCWlmIChzd2ltX3JlYWRiaXQoYmFzZSwgRElTS19JTikpIHsKIAkJc3RydWN0IGZsb3BweV9zdHJ1Y3QgKmc7CiYjNDM7CiAJCWZzLSZndDtkaXNrX2luID0gMTsKIAkJZnMtJmd0O3dyaXRlX3Byb3RlY3RlZCA9IHN3aW1fcmVhZGJpdChiYXNlLCBXUklURV9QUk9UKTsKLQotCQlpZiAoc3dpbV90cmFjazAwKGJhc2UpKQotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJJiMzNDtTV0lNOiBjYW5ub3QgbW92ZSBmbG9wcHkgaGVhZCB0byB0cmFjayAwXG4mIzM0Oyk7Ci0KLQkJc3dpbV90cmFjazAwKGJhc2UpOwotCiAJCWZzLSZndDt0eXBlID0gc3dpbV9yZWFkYml0KGJhc2UsIFRXT01FR19NRURJQSkgPwotCQkJSERfTUVESUEgOiBERF9NRURJQTsKJiM0MzsJCQkgICBIRF9NRURJQSA6IEREX01FRElBOwogCQlmcy0mZ3Q7aGVhZF9udW1iZXIgPSBzd2ltX3JlYWRiaXQoYmFzZSwgU0lOR0xFX1NJREVEKSA/IDEgOiAyOwogCQlnZXRfZmxvcHB5X2dlb21ldHJ5KGZzLCAwLCAmYW1wO2cpOwogCQlmcy0mZ3Q7dG90YWxfc2VjcyA9IGctJmd0O3NpemU7CiAJCWZzLSZndDtzZWNwZXJjeWwgPSBnLSZndDtoZWFkICogZy0mZ3Q7c2VjdDsKIAkJZnMtJmd0O3NlY3BlcnRyYWNrID0gZy0mZ3Q7c2VjdDsKLQkJZnMtJmd0O3RyYWNrID0gMDsKIAl9IGVsc2UgewogCQlmcy0mZ3Q7ZGlza19pbiA9IDA7CiAJfQpAQCAtNjIwLDExICYjNDM7NjIwLDkgQEAgc3RhdGljIGludCBmbG9wcHlfb3BlbihzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYmxrX21vZGVfdCBtb2RlKQogCQlmcy0mZ3Q7cmVmX2NvdW50ID0gLTE7CiAJZWxzZQogCQlmcy0mZ3Q7cmVmX2NvdW50JiM0MzsmIzQzOzsKLQlzd2ltX3dyaXRlKGJhc2UsIHNldHVwLCBTX0lCTV9EUklWRSAgfCBTX0ZDTEtfRElWMik7Ci0JdWRlbGF5KDEwKTsKJiM0MzsKIAlzd2ltX2RyaXZlKGJhc2UsIGZzLSZndDtsb2NhdGlvbik7Ci0Jc3dpbV9tb3RvcihiYXNlLCBPTik7Ci0Jc3dpbV9hY3Rpb24oYmFzZSwgU0VUTUZNKTsKJiM0MzsKIAlpZiAoZnMtJmd0O2VqZWN0ZWQpCiAJCXNldHVwX21lZGl1bShmcyk7CiAJaWYgKCFmcy0mZ3Q7ZGlza19pbikgewpAQCAtNjMyLDYgJiM0Mzs2MzAsMTEgQEAgc3RhdGljIGludCBmbG9wcHlfb3BlbihzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYmxrX21vZGVfdCBtb2RlKQogCQlnb3RvIG91dDsKIAl9CiAKJiM0MzsJc3dpbV9tb3RvcihiYXNlLCBPTik7CiYjNDM7CXN3aW1fYWN0aW9uKGJhc2UsIFNFVE1GTSk7CiYjNDM7CW1zbGVlcCgzMCk7CiYjNDM7CXN3aW1fUkVBRFlfdGltZW91dChiYXNlKTsKJiM0MzsKIAlzZXRfY2FwYWNpdHkoZnMtJmd0O2Rpc2ssIGZzLSZndDt0b3RhbF9zZWNzKTsKIAogCWlmIChtb2RlICZhbXA7IEJMS19PUEVOX05ERUxBWSkKQEAgLTY1Miw4ICYjNDM7NjU1LDEwIEBAIHN0YXRpYyBpbnQgZmxvcHB5X29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSkKIAllbHNlIGlmIChmcy0mZ3Q7cmVmX2NvdW50ICZndDsgMCkKIAkJLS1mcy0mZ3Q7cmVmX2NvdW50OwogCi0JaWYgKGZzLSZndDtyZWZfY291bnQgPT0gMCkKJiM0MzsJaWYgKGZzLSZndDtyZWZfY291bnQgPT0gMCkgewogCQlzd2ltX21vdG9yKGJhc2UsIE9GRik7CiYjNDM7CQlzd2ltX2RyaXZlKGJhc2UsIE5PX0RSSVZFKTsKJiM0MzsJfQogCXJldHVybiBlcnI7CiB9CiAKQEAgLTY3OSw4ICYjNDM7Njg0LDExIEBAIHN0YXRpYyB2b2lkIGZsb3BweV9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogCWVsc2UgaWYgKGZzLSZndDtyZWZfY291bnQgJmd0OyAwKQogCQktLWZzLSZndDtyZWZfY291bnQ7CiAKLQlpZiAoZnMtJmd0O3JlZl9jb3VudCA9PSAwKQomIzQzOwlpZiAoZnMtJmd0O3JlZl9jb3VudCA9PSAwKSB7CiYjNDM7CQlzd2ltX2RyaXZlKGJhc2UsIGZzLSZndDtsb2NhdGlvbik7CiAJCXN3aW1fbW90b3IoYmFzZSwgT0ZGKTsKJiM0MzsJCXN3aW1fZHJpdmUoYmFzZSwgTk9fRFJJVkUpOwomIzQzOwl9CiAJbXV0ZXhfdW5sb2NrKCZhbXA7c3dpbV9tdXRleCk7CiB9CiAKQEAgLTY5MSw3ICYjNDM7Njk5LDcgQEAgc3RhdGljIGludCBmbG9wcHlfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLAogCWludCBlcnI7CiAKIAlpZiAoKGNtZCAmYW1wOyAweDgwKSAmYW1wOyZhbXA7ICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKJiM0MzsJCXJldHVybiAtRVBFUk07CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgRkRFSkVDVDoKQEAgLTc1MCwxMCAmIzQzOzc1OCw5IEBAIHN0YXRpYyBpbnQgc3dpbV9hZGRfZmxvcHB5KHN0cnVjdCBzd2ltX3ByaXYgKnN3ZCwgZW51bSBkcml2ZV9sb2NhdGlvbiBsb2NhdGlvbikKIAlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9ICZhbXA7c3dkLSZndDt1bml0W3N3ZC0mZ3Q7ZmxvcHB5X2NvdW50XTsKIAlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gc3dkLSZndDtiYXNlOwogCiYjNDM7CWZzLSZndDtzd2QgPSBzd2Q7CiAJZnMtJmd0O2xvY2F0aW9uID0gbG9jYXRpb247CiAKLQlzd2ltX2RyaXZlKGJhc2UsIGxvY2F0aW9uKTsKLQogCXN3aW1fbW90b3IoYmFzZSwgT0ZGKTsKIAogCWZzLSZndDt0eXBlID0gSERfTUVESUE7CkBAIC03NjEsNiAmIzQzOzc2OCw3IEBAIHN0YXRpYyBpbnQgc3dpbV9hZGRfZmxvcHB5KHN0cnVjdCBzd2ltX3ByaXYgKnN3ZCwgZW51bSBkcml2ZV9sb2NhdGlvbiBsb2NhdGlvbikKIAogCWZzLSZndDtyZWZfY291bnQgPSAwOwogCWZzLSZndDtlamVjdGVkID0gMTsKJiM0MzsJZnMtJmd0O3RyYWNrID0gMDsKIAogCXN3ZC0mZ3Q7ZmxvcHB5X2NvdW50JiM0MzsmIzQzOzsKIApAQCAtNzg1LDI1ICYjNDM7NzkzLDQzIEBAIHN0YXRpYyB2b2lkIHN3aW1fY2xlYW51cF9mbG9wcHlfZGlzayhzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcykKIAlibGtfbXFfZnJlZV90YWdfc2V0KCZhbXA7ZnMtJmd0O3RhZ19zZXQpOwogfQogCi1zdGF0aWMgaW50IHN3aW1fZmxvcHB5X2luaXQoc3RydWN0IHN3aW1fcHJpdiAqc3dkKQomIzQzO3N0YXRpYyB2b2lkIHN3aW1fc2V0X3BhcmFtZXRlcnMoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwlzdGF0aWMgY29uc3QgdTggbWVtW10gPSB7IDB4MTgsIDB4NDEsIDB4MmUsIDB4MmUsIDB4MTgsIDB4MTgsIDB4MWIsIDB4MWIsCiYjNDM7CQkJCSAgMHgyZiwgMHgyZiwgMHgxOSwgMHgxOSwgMHg5NywgMHgxYiwgMHg1NywgMHgzYiwgfTsKJiM0MzsKJiM0MzsJc3dpbV93cml0ZShiYXNlLCBtb2RlMCwgMCk7IC8qIHJlc2V0IHBhcmFtZXRlciBtZW1vcnkgaW5kZXggKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IDE2OyAmIzQzOyYjNDM7aSkKJiM0MzsJCXN3aW1fd3JpdGUoYmFzZSwgcGFyYW1ldGVyLCBtZW1baV0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHN3aW1fZmxvcHB5X2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKJiM0MzsJc3RydWN0IHN3aW1fcHJpdiAqc3dkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CXVuc2lnbmVkIGludCAqZGF0YSA9IHBkZXYtJmd0O2Rldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gewotCQkuZmVhdHVyZXMJCT0gQkxLX0ZFQVRfUk9UQVRJT05BTCwKJiM0MzsJCS5mZWF0dXJlcyA9IEJMS19GRUFUX1JPVEFUSU9OQUwsCiAJfTsKIAlpbnQgZXJyOwogCWludCBkcml2ZTsKIAlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gc3dkLSZndDtiYXNlOwogCiYjNDM7CXN3aW1fd3JpdGUoYmFzZSwgc2V0dXAsIFNfSUJNX0RSSVZFIHwgKCpkYXRhID8gU19GQ0xLX0RJVjIgOiAwKSk7CiYjNDM7CiYjNDM7CXN3aW1fc2V0X3BhcmFtZXRlcnMoYmFzZSk7CiYjNDM7CiAJLyogc2NhbiBmbG9wcHkgZHJpdmVzICovCiAKIAlzd2ltX2RyaXZlKGJhc2UsIElOVEVSTkFMX0RSSVZFKTsKIAlpZiAoc3dpbV9yZWFkYml0KGJhc2UsIERSSVZFX1BSRVNFTlQpICZhbXA7JmFtcDsKLQkgICAgIXN3aW1fcmVhZGJpdChiYXNlLCBPTkVNRUdfRFJJVkUpKQomIzQzOwkgICAgIXN3aW1fcmVhZGJpdChiYXNlLCBPTkVNRUdfRFJJVkUpICZhbXA7JmFtcDsgIXN3aW1fdHJhY2swMChiYXNlKSkKIAkJc3dpbV9hZGRfZmxvcHB5KHN3ZCwgSU5URVJOQUxfRFJJVkUpOwogCXN3aW1fZHJpdmUoYmFzZSwgRVhURVJOQUxfRFJJVkUpOwogCWlmIChzd2ltX3JlYWRiaXQoYmFzZSwgRFJJVkVfUFJFU0VOVCkgJmFtcDsmYW1wOwotCSAgICAhc3dpbV9yZWFkYml0KGJhc2UsIE9ORU1FR19EUklWRSkpCiYjNDM7CSAgICAhc3dpbV9yZWFkYml0KGJhc2UsIE9ORU1FR19EUklWRSkgJmFtcDsmYW1wOyAhc3dpbV90cmFjazAwKGJhc2UpKQogCQlzd2ltX2FkZF9mbG9wcHkoc3dkLCBFWFRFUk5BTF9EUklWRSk7CiYjNDM7CXN3aW1fZHJpdmUoYmFzZSwgTk9fRFJJVkUpOwogCiAJLyogcmVnaXN0ZXIgZmxvcHB5IGRyaXZlcyAqLwogCkBAIC04MTQsMTEgJiM0Mzs4NDAsOSBAQCBzdGF0aWMgaW50IHN3aW1fZmxvcHB5X2luaXQoc3RydWN0IHN3aW1fcHJpdiAqc3dkKQogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCXNwaW5fbG9ja19pbml0KCZhbXA7c3dkLSZndDtsb2NrKTsKLQogCWZvciAoZHJpdmUgPSAwOyBkcml2ZSAmbHQ7IHN3ZC0mZ3Q7ZmxvcHB5X2NvdW50OyBkcml2ZSYjNDM7JiM0MzspIHsKIAkJZXJyID0gYmxrX21xX2FsbG9jX3NxX3RhZ19zZXQoJmFtcDtzd2QtJmd0O3VuaXRbZHJpdmVdLnRhZ19zZXQsCi0JCQkJJmFtcDtzd2ltX21xX29wcywgMiwgMCk7CiYjNDM7CQkJCSZhbXA7c3dpbV9tcV9vcHMsIDIsIEJMS19NUV9GX0JMT0NLSU5HKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZXhpdF9wdXRfZGlza3M7CiAKQEAgLTgzMCw4ICYjNDM7ODU0LDYgQEAgc3RhdGljIGludCBzd2ltX2Zsb3BweV9pbml0KHN0cnVjdCBzd2ltX3ByaXYgKnN3ZCkKIAkJCWVyciA9IFBUUl9FUlIoc3dkLSZndDt1bml0W2RyaXZlXS5kaXNrKTsKIAkJCWdvdG8gZXhpdF9wdXRfZGlza3M7CiAJCX0KLQotCQlzd2QtJmd0O3VuaXRbZHJpdmVdLnN3ZCA9IHN3ZDsKIAl9CiAKIAlmb3IgKGRyaXZlID0gMDsgZHJpdmUgJmx0OyBzd2QtJmd0O2Zsb3BweV9jb3VudDsgZHJpdmUmIzQzOyYjNDM7KSB7CkBAIC05MDUsNyAmIzQzOzkyNyw3IEBAIHN0YXRpYyBpbnQgc3dpbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiAKIAlzd2QtJmd0O2Jhc2UgPSBzd2ltX2Jhc2U7CiAKLQlyZXQgPSBzd2ltX2Zsb3BweV9pbml0KHN3ZCk7CiYjNDM7CXJldCA9IHN3aW1fZmxvcHB5X2luaXQoZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9rZnJlZTsKIApAQCAtOTQ1LDcgJiM0Mzs5NjcsNyBAQCBzdGF0aWMgdm9pZCBzd2ltX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzd2ltX2RyaXZlciA9IHsKIAkucHJvYmUgID0gc3dpbV9wcm9iZSwKIAkucmVtb3ZlID0gc3dpbV9yZW1vdmUsCi0JLmRyaXZlciAgID0gewomIzQzOwkuZHJpdmVyID0gewogCQkubmFtZQk9IENBUkROQU1FLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TIGIvZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TCmluZGV4IDNkN2EyZDg3NTk1YTU3Li42NWI0ZTQ2NThlMTBjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svc3dpbV9hc20uUwpAQCAtNSw3ICYjNDM7NSw3IEBACiAgKiBuZWVkcyBhc3NlbWJseSBsYW5ndWFnZSBiZWNhdXNlIGlzIHZlcnkgdGltaW5nIGRlcGVuZGVudAogICogdGhpcyBjb250cm9sbGVyIGV4aXN0cyBvbmx5IG9uIG1hY2ludG9zaCA2ODB4MCBiYXNlZAogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA4IExhdXJlbnQgVml2aWVyICZsdDtMYXVyZW50QGx2aXZpZXIuaW5mbyZndDsKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggTGF1cmVudCBWaXZpZXIgJmx0O0xhdXJlbnRAbHZpdmllci5pbmZvJmd0OwogICoKICAqIGJhc2VkIG9uIEFsYXN0YWlyIEJyaWRnZXdhdGVyIFNXSU0gYW5hbHlzaXMsIDIwMDEKICAqIGJhc2VkIG9uIG5ldEJTRCBJV00gZHJpdmVyIChjKSAxOTk3LCAxOTk4IEhhdWtlIEZhdGguCkBAIC0xNCwxMzUgJiM0MzsxNCwxMzggQEAKICAqIDIwMDgtMTEtMDUgKGx2KSAtIGFkZCBnZXRfc3dpbV9tb2RlCiAgKi8KIAotCS5lcXUJd3JpdGVfZGF0YSwJMHgwMDAwCi0JLmVxdQl3cml0ZV9tYXJrLAkweDAyMDAKLQkuZXF1CXdyaXRlX0NSQywJMHgwNDAwCi0JLmVxdQl3cml0ZV9wYXJhbWV0ZXIsMHgwNjAwCi0JLmVxdQl3cml0ZV9waGFzZSwJMHgwODAwCi0JLmVxdQl3cml0ZV9zZXR1cCwJMHgwYTAwCi0JLmVxdQl3cml0ZV9tb2RlMCwJMHgwYzAwCi0JLmVxdQl3cml0ZV9tb2RlMSwJMHgwZTAwCi0JLmVxdQlyZWFkX2RhdGEsCTB4MTAwMAotCS5lcXUJcmVhZF9tYXJrLAkweDEyMDAKLQkuZXF1CXJlYWRfZXJyb3IsCTB4MTQwMAotCS5lcXUJcmVhZF9wYXJhbWV0ZXIsCTB4MTYwMAotCS5lcXUJcmVhZF9waGFzZSwJMHgxODAwCi0JLmVxdQlyZWFkX3NldHVwLAkweDFhMDAKLQkuZXF1CXJlYWRfc3RhdHVzLAkweDFjMDAKLQkuZXF1CXJlYWRfaGFuZHNoYWtlLAkweDFlMDAKLQotCS5lcXUJb19zaWRlLCAwCi0JLmVxdQlvX3RyYWNrLCAxCi0JLmVxdQlvX3NlY3RvciwgMgotCS5lcXUJb19zaXplLCAzCi0JLmVxdQlvX2NyYzAsIDQKLQkuZXF1CW9fY3JjMSwgNQotCi0JLmVxdQlzZWVrX3RpbWUsIDMwMDAwCi0JLmVxdQltYXhfcmV0cnksIDQwCi0JLmVxdQlzZWN0b3Jfc2l6ZSwgNTEyCiYjNDM7CS5lcXUJLkx3cml0ZV9kYXRhLAkJMHgwMDAwCiYjNDM7CS5lcXUJLkx3cml0ZV9tYXJrLAkJMHgwMjAwCiYjNDM7CS5lcXUJLkx3cml0ZV9DUkMsCQkweDA0MDAKJiM0MzsJLmVxdQkuTHdyaXRlX3BhcmFtZXRlciwJMHgwNjAwCiYjNDM7CS5lcXUJLkx3cml0ZV9waGFzZSwJCTB4MDgwMAomIzQzOwkuZXF1CS5Md3JpdGVfc2V0dXAsCQkweDBhMDAKJiM0MzsJLmVxdQkuTHdyaXRlX21vZGUwLAkJMHgwYzAwCiYjNDM7CS5lcXUJLkx3cml0ZV9tb2RlMSwJCTB4MGUwMAomIzQzOwkuZXF1CS5McmVhZF9kYXRhLAkJMHgxMDAwCiYjNDM7CS5lcXUJLkxyZWFkX21hcmssCQkweDEyMDAKJiM0MzsJLmVxdQkuTHJlYWRfZXJyb3IsCQkweDE0MDAKJiM0MzsJLmVxdQkuTHJlYWRfcGFyYW1ldGVyLAkweDE2MDAKJiM0MzsJLmVxdQkuTHJlYWRfcGhhc2UsCQkweDE4MDAKJiM0MzsJLmVxdQkuTHJlYWRfc2V0dXAsCQkweDFhMDAKJiM0MzsJLmVxdQkuTHJlYWRfc3RhdHVzLAkJMHgxYzAwCiYjNDM7CS5lcXUJLkxyZWFkX2hhbmRzaGFrZSwJMHgxZTAwCiYjNDM7CiYjNDM7CS5lcXUJLkxvX3NpZGUsCQkwCiYjNDM7CS5lcXUJLkxvX3RyYWNrLAkJMQomIzQzOwkuZXF1CS5Mb19zZWN0b3IsCQkyCiYjNDM7CS5lcXUJLkxvX3NpemUsCQkzCiYjNDM7CS5lcXUJLkxvX2NyYzAsCQk0CiYjNDM7CS5lcXUJLkxvX2NyYzEsCQk1CiYjNDM7CiYjNDM7CS5lcXUJLkxzZWVrX3RpbWUsCQkzMDAwMAomIzQzOwkuZXF1CS5MbWF4X3JldHJ5LAkJNDAKJiM0MzsJLmVxdQkuTHNlY3Rvcl9zaXplLAkJNTEyCiYjNDM7CiYjNDM7CS5lcXUJLkxtcl9jbGVhcl9maWZvLAkweDAxCiYjNDM7CS5lcXUJLkxtcl9hY3Rpb24sCQkweDA4CiYjNDM7CS5lcXUJLkxtcl93cml0ZV9hY3Rpb24sCTB4MTgKJiM0MzsKJiM0MzsJLmVxdQkuTGhyX2NyY19lcnJvciwJCTB4MDIKJiM0MzsJLmVxdQkuTGhyX2ZpZm9fMmJ5dGVzLAkweDQwCiYjNDM7CS5lcXUJLkxocl9maWZvXzFieXRlLAkweDgwCiAKIAkuZ2xvYmFsIHN3aW1fcmVhZF9zZWN0b3JfaGVhZGVyCiBzd2ltX3JlYWRfc2VjdG9yX2hlYWRlcjoKIAlsaW5rCSVhNiwgIzAKLQltb3ZlbWwJJWQxLSVkNS8lYTAtJWE0LCVzcEAtCiYjNDM7CW1vdmVtbAklZDEtJWQ1LyVhMC0lYTUsJXNwQC0KIAltb3ZlbAklYTZAKDB4MGMpLCAlYTQKLQlic3IJbWZtX3JlYWRfYWRkcm1hcmsKLQltb3ZlbWwJJXNwQCYjNDM7LCAlZDEtJWQ1LyVhMC0lYTQKJiM0MzsJbW92ZXEJIy0xLCAlZDAKJiM0MzsJYnNyCS5MbWZtX3JlYWRfYWRkcm1hcmsKJiM0MzsJbW92ZW1sCSVzcEAmIzQzOywgJWQxLSVkNS8lYTAtJWE1CiAJdW5sawklYTYKIAlydHMKIAotc2VjdG9yX2FkZHJlc3NfbWFyazoKJiM0MzsuTHNlY3Rvcl9hZGRyZXNzX21hcms6CiAJLmJ5dGUJMHhhMSwgMHhhMSwgMHhhMSwgMHhmZQotc2VjdG9yX2RhdGFfbWFyazoKJiM0MzsuTHNlY3Rvcl9kYXRhX21hcms6CiAJLmJ5dGUJMHhhMSwgMHhhMSwgMHhhMSwgMHhmYgogCi1tZm1fcmVhZF9hZGRybWFyazoKJiM0MzsuTG1mbV9yZWFkX2FkZHJtYXJrOgogCW1vdmVsCSVhNkAoMHgwOCksICVhMwotCWxlYQklYTNAKHJlYWRfaGFuZHNoYWtlKSwgJWEyCi0JbGVhCSVhM0AocmVhZF9tYXJrKSwgJWEzCi0JbW92ZXEJIy0xLCAlZDAKLQltb3Zldwkjc2Vla190aW1lLCAlZDIKLQotd2FpdF9oZWFkZXJfaW5pdDoKLQl0c3RiCSVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaykKLQltb3ZlYgkjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaykKLQltb3ZlYgkjMHgwMSwgJWEzQCh3cml0ZV9tb2RlMSAtIHJlYWRfbWFyaykKLQltb3ZlYgkjMHgwMSwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaykKLQl0c3RiCSVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaykKLQltb3ZlYgkjMHgwOCwgJWEzQCh3cml0ZV9tb2RlMSAtIHJlYWRfbWFyaykKLQotCWxlYQlzZWN0b3JfYWRkcmVzc19tYXJrLCAlYTAKJiM0MzsJbGVhCSVhM0AoLkxyZWFkX2hhbmRzaGFrZSksICVhMgomIzQzOwlsZWEJJWEzQCguTHJlYWRfZGF0YSksICVhNQomIzQzOwlsZWEJJWEzQCguTHJlYWRfbWFyayksICVhMwomIzQzOwltb3ZldwkjLkxzZWVrX3RpbWUsICVkMgomIzQzOwomIzQzOy5Md2FpdF9oZWFkZXJfaW5pdDoKJiM0MzsJbW92ZWIJIy5MbXJfd3JpdGVfYWN0aW9uLCAlYTNAKC5Md3JpdGVfbW9kZTAgLSAuTHJlYWRfbWFyaykKJiM0MzsJbW92ZWIJIy5MbXJfY2xlYXJfZmlmbywgJWEzQCguTHdyaXRlX21vZGUxIC0gLkxyZWFkX21hcmspCiYjNDM7CW1vdmViCSMuTG1yX2NsZWFyX2ZpZm8sICVhM0AoLkx3cml0ZV9tb2RlMCAtIC5McmVhZF9tYXJrKQomIzQzOwl0c3RiCSVhM0AoLkxyZWFkX2Vycm9yIC0gLkxyZWFkX21hcmspCiYjNDM7CW1vdmViCSMuTG1yX2FjdGlvbiwgJWEzQCguTHdyaXRlX21vZGUxIC0gLkxyZWFkX21hcmspCiYjNDM7CiYjNDM7CWxlYQkuTHNlY3Rvcl9hZGRyZXNzX21hcmssICVhMAogCW1vdmVxCSMzLCAlZDEKIAotd2FpdF9hZGRyX21hcmtfYnl0ZToKLQomIzQzOy5Md2FpdF9hZGRyX21hcmtfYnl0ZToKIAl0c3RiCSVhMkAKLQlkYm1pCSVkMiwgd2FpdF9hZGRyX21hcmtfYnl0ZQotCWJwbAloZWFkZXJfZXhpdAomIzQzOwlkYm1pCSVkMiwgLkx3YWl0X2FkZHJfbWFya19ieXRlCiYjNDM7CWJwbAkuTHNpZ25hbF9ub255YgogCiAJbW92ZWIJJWEzQCwgJWQzCiAJY21wYgklYTBAJiM0MzssICVkMwotCWRibmUJJWQxLCB3YWl0X2FkZHJfbWFya19ieXRlCi0JYm5lCXdhaXRfaGVhZGVyX2luaXQKLQotCW1vdmVxCSNtYXhfcmV0cnksICVkMgomIzQzOwlkYm5lCSVkMSwgLkx3YWl0X2FkZHJfbWFya19ieXRlCiYjNDM7CWJuZQkuTHdhaXRfaGVhZGVyX2luaXQKIAotYW1hcmswOgl0c3RiCSVhMkAKLQlkYm1pCSVkMiwgYW1hcmswCi0JYnBsCXNpZ25hbF9ub255YgotCi0JbW92ZWIJJWEzQCwgJWE0QChvX3RyYWNrKQotCi0JbW92ZXEJI21heF9yZXRyeSwgJWQyCi0KLWFtYXJrMToJdHN0YgklYTJACi0JZGJtaQklZDIsIGFtYXJrMQotCWJwbAlzaWduYWxfbm9ueWIKLQotCW1vdmViCSVhM0AsICVhNEAob19zaWRlKQotCi0JbW92ZXEJI21heF9yZXRyeSwgJWQyCiYjNDM7CW1vdmVxCSMuTG1heF9yZXRyeSwgJWQyCiYjNDM7LkxhbWFyazA6CiYjNDM7CXRzdGIJJWEyQAomIzQzOwlkYm1pCSVkMiwgLkxhbWFyazAKJiM0MzsJYnBsCS5Mc2lnbmFsX25vbnliCiAKLWFtYXJrMjoJdHN0YgklYTJACi0JZGJtaQklZDIsIGFtYXJrMgotCWJwbAlzaWduYWxfbm9ueWIKJiM0MzsJbW92ZWIJJWE1QCwgJWE0QCguTG9fdHJhY2spCiAKLQltb3ZlYgklYTNALCAlYTRAKG9fc2VjdG9yKQomIzQzOwltb3ZlcQkjLkxtYXhfcmV0cnksICVkMgomIzQzOy5MYW1hcmsxOgomIzQzOwl0c3RiCSVhMkAKJiM0MzsJZGJtaQklZDIsIC5MYW1hcmsxCiYjNDM7CWJwbAkuTHNpZ25hbF9ub255YgogCi0JbW92ZXEJI21heF9yZXRyeSwgJWQyCiYjNDM7CW1vdmViCSVhNUAsICVhNEAoLkxvX3NpZGUpCiAKLWFtYXJrMzoJdHN0YgklYTJACi0JZGJtaQklZDIsIGFtYXJrMwotCWJwbAlzaWduYWxfbm9ueWIKJiM0MzsJbW92ZXEJIy5MbWF4X3JldHJ5LCAlZDIKJiM0MzsuTGFtYXJrMjoKJiM0MzsJdHN0YgklYTJACiYjNDM7CWRibWkJJWQyLCAuTGFtYXJrMgomIzQzOwlicGwJLkxzaWduYWxfbm9ueWIKIAotCW1vdmViCSVhM0AsICVhNEAob19zaXplKQomIzQzOwltb3ZlYgklYTVALCAlYTRAKC5Mb19zZWN0b3IpCiAKLQltb3ZlcQkjbWF4X3JldHJ5LCAlZDIKJiM0MzsJbW92ZXEJIy5MbWF4X3JldHJ5LCAlZDIKJiM0MzsuTGFtYXJrMzoKJiM0MzsJdHN0YgklYTJACiYjNDM7CWRibWkJJWQyLCAuTGFtYXJrMwomIzQzOwlicGwJLkxzaWduYWxfbm9ueWIKIAotY3JjMDoJdHN0YgklYTJACi0JZGJtaQklZDIsIGNyYzAKLQlicGwJc2lnbmFsX25vbnliCiYjNDM7CW1vdmViCSVhNUAsICVhNEAoLkxvX3NpemUpCiAKLQltb3ZlYgklYTNALCAlYTRAKG9fY3JjMCkKJiM0MzsJbW92ZXEJIy5MbWF4X3JldHJ5LCAlZDIKJiM0MzsuTGNyYzA6CiYjNDM7CXRzdGIJJWEyQAomIzQzOwlkYm1pCSVkMiwgLkxjcmMwCiYjNDM7CWJwbAkuTHNpZ25hbF9ub255YgogCi0JbW92ZXEJI21heF9yZXRyeSwgJWQyCiYjNDM7CW1vdmViCSVhNUAsICVhNEAoLkxvX2NyYzApCiAKLWNyYzE6CXRzdGIJJWEyQAotCWRibWkJJWQyLCBjcmMxCi0JYnBsCXNpZ25hbF9ub255YgomIzQzOwltb3ZlcQkjLkxtYXhfcmV0cnksICVkMgomIzQzOy5MY3JjMToJbW92ZWIJJWEyQCwgJWQ1CiYjNDM7CWRibWkJJWQyLCAuTGNyYzEKJiM0MzsJYnBsCS5Mc2lnbmFsX25vbnliCiAKLQltb3ZlYgklYTNALCAlYTRAKG9fY3JjMSkKJiM0MzsJbW92ZWIJJWE1QCwgJWE0QCguTG9fY3JjMSkKIAotCXRzdGIJJWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKQomIzQzOwlhbmRiCSMuTGhyX2NyY19lcnJvciwgJWQ1CiYjNDM7CWJuZQkuTHNpZ25hbF9ub255YgogCi1oZWFkZXJfZXhpdDoKIAltb3ZlcQkjMCwgJWQwCi0JbW92ZWIJIzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCi0JcnRzCi1zaWduYWxfbm9ueWI6Ci0JbW92ZXEJIy0xLCAlZDAKLQltb3ZlYgkjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaykKJiM0MzsuTHNpZ25hbF9ub255YjoKJiM0MzsJbW92ZWIJIy5MbXJfd3JpdGVfYWN0aW9uLCAlYTNAKC5Md3JpdGVfbW9kZTAgLSAuTHJlYWRfbWFyaykKIAlydHMKIAogCS5nbG9iYWwgc3dpbV9yZWFkX3NlY3Rvcl9kYXRhCkBAIC0xNTAsOTQgJiM0MzsxNTMsODcgQEAgc3dpbV9yZWFkX3NlY3Rvcl9kYXRhOgogCWxpbmsJJWE2LCAjMAogCW1vdmVtbAklZDEtJWQ1LyVhMC0lYTUsJXNwQC0KIAltb3ZlbAklYTZAKDB4MGMpLCAlYTQKLQlic3IJbWZtX3JlYWRfZGF0YQomIzQzOwltb3ZlcQkjLTEsICVkMAomIzQzOwlic3IJLkxtZm1fcmVhZF9kYXRhCiAJbW92ZW1sCSVzcEAmIzQzOywgJWQxLSVkNS8lYTAtJWE1CiAJdW5sawklYTYKIAlydHMKIAotbWZtX3JlYWRfZGF0YToKJiM0MzsuTG1mbV9yZWFkX2RhdGE6CiAJbW92ZWwJJWE2QCgweDA4KSwgJWEzCi0JbGVhCSVhM0AocmVhZF9oYW5kc2hha2UpLCAlYTIKLQlsZWEJJWEzQChyZWFkX2RhdGEpLCAlYTUKLQlsZWEJJWEzQChyZWFkX21hcmspLCAlYTMKLQltb3Zldwkjc2Vla190aW1lLCAlZDIKLQotd2FpdF9kYXRhX2luaXQ6Ci0JdHN0YgklYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspCi0JbW92ZWIJIzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCi0JbW92ZWIJIzB4MDEsICVhM0Aod3JpdGVfbW9kZTEgLSByZWFkX21hcmspCi0JbW92ZWIJIzB4MDEsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCi0JdHN0YgklYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspCi0JbW92ZWIJIzB4MDgsICVhM0Aod3JpdGVfbW9kZTEgLSByZWFkX21hcmspCi0KLQlsZWEJc2VjdG9yX2RhdGFfbWFyaywgJWEwCiYjNDM7CWxlYQklYTNAKC5McmVhZF9oYW5kc2hha2UpLCAlYTIKJiM0MzsJbGVhCSVhM0AoLkxyZWFkX2RhdGEpLCAlYTUKJiM0MzsJbGVhCSVhM0AoLkxyZWFkX21hcmspLCAlYTMKJiM0MzsJbW92ZXcJIy5Mc2Vla190aW1lLCAlZDIKJiM0MzsKJiM0MzsuTHdhaXRfZGF0YV9pbml0OgomIzQzOwltb3ZlYgkjLkxtcl93cml0ZV9hY3Rpb24sICVhM0AoLkx3cml0ZV9tb2RlMCAtIC5McmVhZF9tYXJrKQomIzQzOwltb3ZlYgkjLkxtcl9jbGVhcl9maWZvLCAlYTNAKC5Md3JpdGVfbW9kZTEgLSAuTHJlYWRfbWFyaykKJiM0MzsJbW92ZWIJIy5MbXJfY2xlYXJfZmlmbywgJWEzQCguTHdyaXRlX21vZGUwIC0gLkxyZWFkX21hcmspCiYjNDM7CXRzdGIJJWEzQCguTHJlYWRfZXJyb3IgLSAuTHJlYWRfbWFyaykKJiM0MzsJbW92ZWIJIy5MbXJfYWN0aW9uLCAlYTNAKC5Md3JpdGVfbW9kZTEgLSAuTHJlYWRfbWFyaykKJiM0MzsKJiM0MzsJbGVhCS5Mc2VjdG9yX2RhdGFfbWFyaywgJWEwCiAJbW92ZXEJIzMsICVkMQogCiAJLyogd2FpdCBkYXRhIGFkZHJlc3MgbWFyayAqLwogCi13YWl0X2RhdGFfbWFya19ieXRlOgotCiYjNDM7Lkx3YWl0X2RhdGFfbWFya19ieXRlOgogCXRzdGIJJWEyQAotCWRibWkJJWQyLCB3YWl0X2RhdGFfbWFya19ieXRlCi0JYnBsCWRhdGFfZXhpdAomIzQzOwlkYm1pCSVkMiwgLkx3YWl0X2RhdGFfbWFya19ieXRlCiYjNDM7CWJwbAkuTGRhdGFfZXhpdAogCiAJbW92ZWIJJWEzQCwgJWQzCiAJY21wYgklYTBAJiM0MzssICVkMwotCWRibmUJJWQxLCB3YWl0X2RhdGFfbWFya19ieXRlCi0JYm5lCXdhaXRfZGF0YV9pbml0CiYjNDM7CWRibmUJJWQxLCAuTHdhaXRfZGF0YV9tYXJrX2J5dGUKJiM0MzsJYm5lCS5Md2FpdF9kYXRhX2luaXQKIAogCS8qIHJlYWQgZGF0YSAqLwogCi0JdHN0YgklYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspCi0KLQltb3ZlbAkjc2VjdG9yX3NpemUtMSwgJWQ0CQkvKiBzZWN0b3Igc2l6ZSAqLwotcmVhZF9uZXdfZGF0YToKLQltb3ZldwkjbWF4X3JldHJ5LCAlZDIKLXJlYWRfZGF0YV9sb29wOgomIzQzOwltb3ZlbAkjLkxzZWN0b3Jfc2l6ZSAtIDEsICVkNAkJLyogc2VjdG9yIHNpemUgKi8KJiM0MzsuTHJlYWRfbmV3X2RhdGE6CiYjNDM7CW1vdmV3CSMuTG1heF9yZXRyeSwgJWQyCiYjNDM7LkxyZWFkX2RhdGFfbG9vcDoKIAltb3ZlYgklYTJALCAlZDUKLQlhbmRiCSMweGMwLCAlZDUKLQlkYm5lCSVkMiwgcmVhZF9kYXRhX2xvb3AKLQliZXEJZGF0YV9leGl0CiYjNDM7CWFuZGIJIyguTGhyX2ZpZm9fMmJ5dGVzICYjNDM7IC5MaHJfZmlmb18xYnl0ZSksICVkNQomIzQzOwliZXEJMWYKJiM0MzsJbW92ZXcJIy5MbWF4X3JldHJ5LCAlZDIKIAltb3ZlYgklYTVALCAlYTRAJiM0MzsKLQlhbmRiCSMweDQwLCAlZDUKLQlkYm5lCSVkNCwgcmVhZF9uZXdfZGF0YQotCWJlcQlleGl0X2xvb3AKJiM0MzsJZGJyYQklZDQsIDFmCiYjNDM7CWJyYQkuTGRhdGFfY3JjMAomIzQzOzE6CWFuZGIJIy5MaHJfZmlmb18yYnl0ZXMsICVkNQomIzQzOwlkYm5lCSVkMiwgLkxyZWFkX2RhdGFfbG9vcAomIzQzOwliZXEJLkxkYXRhX2V4aXQKIAltb3ZlYgklYTVALCAlYTRAJiM0MzsKLQlkYnJhCSVkNCwgcmVhZF9uZXdfZGF0YQotZXhpdF9sb29wOgomIzQzOwlkYnJhCSVkNCwgLkxyZWFkX25ld19kYXRhCiAKIAkvKiByZWFkIENSQyAqLwogCi0JbW92ZXcJI21heF9yZXRyeSwgJWQyCi1kYXRhX2NyYzA6Ci0KJiM0MzsJbW92ZXcJIy5MbWF4X3JldHJ5LCAlZDIKJiM0MzsuTGRhdGFfY3JjMDoKIAl0c3RiCSVhMkAKLQlkYm1pCSVkMiwgZGF0YV9jcmMwCi0JYnBsCWRhdGFfZXhpdAomIzQzOwlkYm1pCSVkMiwgLkxkYXRhX2NyYzAKJiM0MzsJYnBsCS5MZGF0YV9leGl0CiAKLQltb3ZlYgklYTNALCAlZDUKJiM0MzsJbW92ZWIJJWE1QCwgJWQyCiAKLQltb3ZlcQkjbWF4X3JldHJ5LCAlZDIKLQotZGF0YV9jcmMxOgotCi0JdHN0YgklYTJACi0JZGJtaQklZDIsIGRhdGFfY3JjMQotCWJwbAlkYXRhX2V4aXQKLQotCW1vdmViCSVhM0AsICVkNQomIzQzOwltb3ZlcQkjLkxtYXhfcmV0cnksICVkMgomIzQzOy5MZGF0YV9jcmMxOgomIzQzOwltb3ZlYgklYTJALCAlZDUKJiM0MzsJZGJtaQklZDIsIC5MZGF0YV9jcmMxCiYjNDM7CWJwbAkuTGRhdGFfZXhpdAogCi0JdHN0YgklYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspCiYjNDM7CW1vdmViCSVhNUAsICVkMgogCi0JbW92ZWIJIzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCiYjNDM7CWFuZGIJIy5MaHJfY3JjX2Vycm9yLCAlZDUKJiM0MzsJYm5lCS5MZGF0YV9leGl0CiAKIAkvKiByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHJlYWQgKi8KIAotCW1vdmVsCSNzZWN0b3Jfc2l6ZSwgJWQwCiYjNDM7CW1vdmVsCSMuTHNlY3Rvcl9zaXplLCAlZDAKIAlhZGR3CSMxLCAlZDQKIAlzdWJsCSVkNCwgJWQwCi0JcnRzCi1kYXRhX2V4aXQ6Ci0JbW92ZWIJIzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCi0JbW92ZXEJIy0xLCAlZDAKJiM0MzsKJiM0MzsuTGRhdGFfZXhpdDoKJiM0MzsJbW92ZWIJIy5MbXJfd3JpdGVfYWN0aW9uLCAlYTNAKC5Md3JpdGVfbW9kZTAgLSAuTHJlYWRfbWFyaykKIAlydHMKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2NTIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU1dJTSBGbG9wcHkgRHJpdmVyIFBhdGNoIGZvciBtNjhrIE1hY3MqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHRvdWNoaW5nIGBhcmNoL202OGsvbWFjL2NvbmZpZy5jYCwgYGRyaXZlcnMvYmxvY2svc3dpbS5jYCwgYW5kIGBkcml2ZXJzL2Jsb2NrL3N3aW1fYXNtLlNgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgJiMzNDtTV0lNJiMzNDsg4oCTIFNhbmRlciBXb3puaWFrIEludGVncmF0ZWQgTWFjaGluZS4gVGhhdCBzY3JlYW1zIGZsb3BweSBjb250cm9sbGVyIGRyaXZlciBmb3Igb2xkZXIgbTY4ayBNYWNzLiBBbmQgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGhvbmluZyBpbiBvbiB0aGF0LgoKSXQgbG9va3MgbGlrZSB0aGUgcHJpbWFyeSBmb2N1cyBpcyBhYm91dCBwcm9wZXJseSBjb25maWd1cmluZyB0aGUgJiMzNDtzd2ltJiMzNDsgZGV2aWNlLCBzcGVjaWZpY2FsbHkgYnkgcGFzc2luZyBhIGBkYXRhYCBwYXJhbWV0ZXIgdG8gYHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9yZXNuZGF0YWAuIFRoYXQgYGRhdGFgIGlzIGxpa2VseSBrZXlpbmcgb2ZmIHRoZSBNYWMgbW9kZWwgdG8gc2V0IGBTX0ZDTEtfRElWMmAsIHdoaWNoIG1ha2VzIHNlbnNlOyB0aGUgY2xvY2sgZnJlcXVlbmN5IHZhcmllcyBhY3Jvc3MgdGhvc2Ugb2xkIG1hY2hpbmVzLCBhbmQgdGhlIGRyaXZlciBuZWVkcyB0byBhZGp1c3QgYWNjb3JkaW5nbHkuCgpJIHNlZSBjaGFuZ2VzIHRvIGBzd2ltLmNgIHRoYXQgcmVwbGFjZSBgc2NoZWR1bGVfdGltZW91dGAgd2l0aCBgcG9sbF90aW1lb3V0X3VzYCBhbmQgYHBvbGxfdGltZW91dF91c19hdG9taWNgLiBUaGF04oCZcyBhIGdvb2Qgc2lnbjsgdGhvc2UgcG9sbGluZyBwcmltaXRpdmVzIGFyZSB1c3VhbGx5IGEgYmV0dGVyIGZpdCBmb3IgaGFyZHdhcmUgaW50ZXJhY3Rpb25zLiBQbHVzLCB0aGVyZSBhcmUgc29tZSBtYWNybyBhbmQgY29uc3RhbnQgdHdlYWtzLCBhbmQgaXQgbG9va3MgbGlrZSBhIG5ldyB0aW1lb3V0LCBgc3dpbV9SRUFEWV90aW1lb3V0YCwgaGFzIGJlZW4gYWRkZWQuIFRoZXJlIGFyZSBjaGFuZ2VzIHRvIHRoZSBgc3dpbV9yZWFkX3NlY3Rvcl9yYW5nZWAgYW5kIGBmbG9wcHlfcmVhZF9zZWN0b3JzYCBmdW5jdGlvbnMsIHNvIHRoaXMgaXMgbGlrZWx5IGFib3V0IGltcHJvdmluZyByZWFkIHBlcmZvcm1hbmNlIG9yIHJlbGlhYmlsaXR5LgoKVGhlIGBzd2ltX2FzbS5TYCBjaGFuZ2UgaXMgaW50ZXJlc3RpbmcsIHRvby4gTG9jYWwgbGFiZWxzIGFuZCBzb21lIGxvZ2ljIHVwZGF0ZXMgaW4gYXNzZW1ibHk/IEl0IHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGxpa2VseSByZWZpbmluZyB0aGUgbG93LWxldmVsIGhhcmR3YXJlIGludGVyYWN0aW9uLgoKTm93LCBteSBtaW5kIGdvZXMgdG8gdGVzdGluZy4gSXMgdGhpcyBwYXRjaCBldmVuIHRlc3RhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFRoZSBgc3dpbWAgZHJpdmVyIGlzIHNvIHNwZWNpZmljIHRvIHRob3NlIG9sZGVyIE1hY3MuIENhbiBJIGVtdWxhdGUgdGhhdD8gSG1tLCBRRU1V4oCmIGxldCBtZSBjaGVjay4gQWgsIHllcyEgUUVNVSBoYXMgdGhhdCBgcTgwMGAgbWFjaGluZSwgYSBNYWMgUXVhZHJhIDgwMC4gQW5kIHRoZSBRdWFkcmEgODAwIGlzIG9uZSBvZiB0aGUgbW9kZWxzIHRoYXQgdXNlIHRoZSAzMk1IeiBGQ0xLLCBgTUFDX01PREVMX1E4MDBgLiBHb29kLCB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IHRlc3RhYmxlLiBUaGlzIGRyaXZlciBpcyBpbiBgZHJpdmVycy9ibG9jay9zd2ltLmNgLiBOb3csIGxldCBtZSBxdWlja2x5IHZlcmlmeSB0aGF0IGBDT05GSUdfQkxLX0RFVl9TV0lNYCBpcyBhY3R1YWxseSBlbmFibGVkIGluIHRoZSBidWlsZC4gSSYjMzk7bGwgdXNlIG15IGdyZXBwZXIgdG9vbCBmb3IgYSBxdWljayBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCTEtfREVWX1NXSU0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZz0yNDg9Q09ORklHX0NPTk5FQ1RPUj1tXG5hcmNoL202OGsvY29uZmlncy9tYWNfZGVmY29uZmlnOjI0OTpDT05GSUdfQkxLX0RFVl9TV0lNPW1cbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWctMjUwLUNPTkZJR19aUkFNPW1cbi0tXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWc9Mjc2PUNPTkZJR19BVEFSSV9GTE9QUFk9eVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnOjI3NzpDT05GSUdfQkxLX0RFVl9TV0lNPW1cbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZy0yNzgtQ09ORklHX0FNSUdBX1oyUkFNPXlcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9NjE9Y29uZmlnIE1BQ19GTE9QUFlcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctNjctXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6Njg6Y29uZmlnIEJMS19ERVZfU1dJTVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTY5LVx0dHJpc3RhdGUgXCYjMzQ7U3VwcG9ydCBmb3IgU1dJTSBNYWNpbnRvc2ggZmxvcHB5XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay9NYWtlZmlsZT0xMj1vYmotJChDT05GSUdfTUFDX0ZMT1BQWSlcdCYjNDM7PSBzd2ltMy5vXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19CTEtfREVWX1NXSU0pXHQmIzQzOz0gc3dpbV9tb2Qub1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZS0xNC1vYmotJChDT05GSUdfQkxLX0RFVl9GRClcdCYjNDM7PSBmbG9wcHkub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODc3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLgoKKipBbmFseXppbmcgdGhlIEJMS19ERVZfU1dJTSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyB0aGUgc3lzdGVtJiMzOTtzIGNvbmZpZ3VyZWQgd2l0aCBgQkxLX0RFVl9TV0lNYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBsZXQmIzM5O3Mgc2VlIHdoYXQgZGVwZW5kcyBvbiB0aGF0LiBJIGtub3cgS2NvbmZpZyBpcyB0aGUgcGxhY2UgdG8gc3RhcnQsIHNvIEkmIzM5O2xsIGp1bXAgcmlnaHQgaW50byBgZHJpdmVycy9ibG9jay9LY29uZmlnYC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlbGF0ZWQgdG8gYEJMS19ERVZfU1dJTWAuIE1heWJlIGl0IHJlbGllcyBvbiBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIG9yIG90aGVyIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBvciBhbnkgcHJlcmVxdWlzaXRlcyB0aGF0IGFyZSBlbmZvcmNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9TV0lNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz02MT1jb25maWcgTUFDX0ZMT1BQWVxuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy02Ny1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZzo2ODpjb25maWcgQkxLX0RFVl9TV0lNXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctNjktXHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IGZvciBTV0lNIE1hY2ludG9zaCBmbG9wcHlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE3NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgZHJpdmVycy9ibG9jay9LY29uZmlnYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9uIGlzIHN0cnVjdHVyZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGhlYWQgc3RyYWlnaHQgaW50byB0aGUgc291cmNlIGFuZCBzZWUgdGhlIGFjdHVhbCBLY29uZmlnIGZpbGUuIExldCYjMzk7cyBzdGFydCB3aXRoIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgLCBhbmQgbXkgaW5zdGluY3QgdGVsbHMgbWUgdG8gem9vbSBpbiBhcm91bmQgbGluZSA2OC4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBkZXBlbmRlbmNpZXMgYW5kIG9wdGlvbnMgYXZhaWxhYmxlIGZvciBjb25maWd1cmluZyBibG9jayBkZXZpY2VzLiBJIGV4cGVjdCB0byBnZXQgYSBzZW5zZSBvZiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzeW1ib2xzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGhlbHAgdGV4dCByaWdodCBhcm91bmQgdGhlcmUuIFRoaXMgc2hvdWxkIHF1aWNrbHkgb3JpZW50IG1lIHRvIHRoZSBjb3JlIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjA6XHRcbiAgNjE6XHRjb25maWcgTUFDX0ZMT1BQWVxuICA2MjpcdFx0dHJpc3RhdGUgXCYjMzQ7U3VwcG9ydCBmb3IgUG93ZXJNYWMgZmxvcHB5XCYjMzQ7XG4gIDYzOlx0XHRkZXBlbmRzIG9uIFBQQ19QTUFDIFx1MDAyNlx1MDAyNiAhUFBDX1BNQUM2NFxuICA2NDpcdFx0aGVscFxuICA2NTpcdFx0ICBJZiB5b3UgaGF2ZSBhIFNXSU0tMyAoU3VwZXIgV296IEludGVncmF0ZWQgTWFjaGluZSAzOyBmcm9tIEFwcGxlKVxuICA2NjpcdFx0ICBmbG9wcHkgY29udHJvbGxlciwgc2F5IFkgaGVyZS4gTW9zdCBjb21tb25seSBmb3VuZCBpbiBQb3dlck1hY3MuXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIEJMS19ERVZfU1dJTVxuICA2OTpcdFx0dHJpc3RhdGUgXCYjMzQ7U3VwcG9ydCBmb3IgU1dJTSBNYWNpbnRvc2ggZmxvcHB5XCYjMzQ7XG4gIDcwOlx0XHRkZXBlbmRzIG9uIE02OEsgXHUwMDI2XHUwMDI2IE1BQyBcdTAwMjZcdTAwMjYgIUhJR0hNRU1cbiAgNzE6XHRcdGhlbHBcbiAgNzI6XHRcdCAgWW91IHNob3VsZCBzZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgZmxvcHB5IHN1cHBvcnRcbiAgNzM6XHRcdCAgYW5kIHlvdSBkb24mIzM5O3QgaGF2ZSBhIElJLCBJSWZ4LCBROTAwLCBROTUwIG9yIEFWIHNlcmllcy5cbiAgNzQ6XHRcbiAgNzU6XHRjb25maWcgQU1JR0FfWjJSQU1cbiAgNzY6XHRcdHRyaXN0YXRlIFwmIzM0O0FtaWdhIFpvcnJvIElJIHJhbWRpc2sgc3VwcG9ydFwmIzM0O1xuICA3NzpcdFx0ZGVwZW5kcyBvbiBaT1JST1xuICA3ODpcdFx0aGVscFxuICA3OTpcdFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdXNpbmcgQ2hpcCBSQU0gYW5kIFpvcnJvIElJIFJBTSBhcyBhXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2ODkKCQkJCQkJCW91dHB1dDogMjUyCgkJCQkJCQl0aG91Z2h0czogMjI2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipTV0lNIEZsb3BweSBEcml2ZXIgQW5hbHlzaXMgZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHRvdWNoaW5nIHRoZSBTV0lNIGZsb3BweSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgbTY4ayBNYWNzLiBUaGUgZGVwZW5kZW5jeSBpcyBgTTY4SyAmYW1wOyZhbXA7IE1BQyAmYW1wOyZhbXA7ICFISUdITUVNYCwgbWFraW5nIGl0IGFyY2hpdGVjdHVyZS1zcGVjaWZpYy4gQ3J1Y2lhbGx5LCBRRU1VIHN1cHBvcnRzIGEgYHE4MDBgIG1hY2hpbmUsIHdoaWNoIGlzIGEgTWFjIFF1YWRyYSA4MDAuIFRoaXMgaXMgYSBzb2xpZCBpbmRpY2F0b3IgdGhhdCB0aGlzIGRyaXZlciBpcyAqcmVhY2hhYmxlKiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCB3aGljaCBpcyBleGNlbGxlbnQgbmV3cyBmb3IgdXMuIFdoaWxlIHN5emthbGxlciB0eXBpY2FsbHkgdGFyZ2V0cyBhcmNoaXRlY3R1cmVzIGxpa2UgeDg2XzY0LCBBUk02NCwgYW5kIFJJU0MtViwgaXQgZG9lcyBoYXZlIG02OGsgc3VwcG9ydC4gSXQgbWlnaHQgbm90IGJlICphY3RpdmVseSogZnV6emVkIGluIGV2ZXJ5IGluc3RhbmNlLCBidXQgaWYgaXQmIzM5O3MgcmVhY2hhYmxlIGluIFFFTVUsIHdlIGNhbiBhYnNvbHV0ZWx5IGFzc3VtZSBpdCBjYW4gYmUgdGFyZ2V0ZWQgYnkgc3l6a2FsbGVyLgoKSXMgdGhlIGRyaXZlciBpdHNlbGYgcmVhY2hhYmxlPyBJdCBhcHBlYXJzIHRvIGJlIGEgcGxhdGZvcm0gZHJpdmVyIGZvciAmIzM0O3N3aW0uJiMzNDsgTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBieSBjaGVja2luZyBgc3dpbV9wcm9iZWAuIFllcCwgaXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgJiMzNDtzd2ltLCYjMzQ7IGFuZCBpdCYjMzk7cyBpbml0aWFsaXplZCBkdXJpbmcgYG1hY19wbGF0Zm9ybV9pbml0YCBpbiBgYXJjaC9tNjhrL21hYy9jb25maWcuY2AuIFRoaXMgbWVhbnMgaXQgKndpbGwqIGJlIHByb2JlZCBhdCBib290IGlmIHRoZSBoYXJkd2FyZSBpcyBwcmVzZW50LiBUaGUgZHJpdmVyIGlzIGV4cG9zaW5nIGEgYmxvY2sgZGV2aWNlLCBhbmQgdGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgd2Ugd2FudC4gVGhlIGJsb2NrIGRldmljZSBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIGJ5IGBzd2ltX21xX29wc2AsIHdoaWNoIGludGVybmFsbHkgdXNlcyBgc3dpbV9xdWV1ZV9ycWAuIFRoZXJlIGFyZSBhbHNvIGlvY3RscywgaGFuZGxlZCBieSBgZmxvcHB5X2lvY3RsYC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4gVGhpcyBsaXN0IGlzIGEgZ29sZG1pbmU6IGBzd2ltX2Zsb3BweV9pbml0YCwgYHN3aW1fcHJvYmVgLCBgc3dpbV9hZGRfZmxvcHB5YCwgYGZsb3BweV9pb2N0bGAsIGBmbG9wcHlfcmVsZWFzZWAsIGBmbG9wcHlfb3BlbmAsIGBzZXR1cF9tZWRpdW1gLCBgZ2V0X2Zsb3BweV9nZW9tZXRyeWAsIGBzd2ltX3F1ZXVlX3JxYCwgYGZsb3BweV9yZWFkX3NlY3RvcnNgLCBgc3dpbV9yZWFkX3NlY3Rvcl9yYW5nZWAsIGBmbG9wcHlfZWplY3RgLCBgc3dpbV90cmFja2AsIGBzd2ltX3NlZWtgLCBgc3dpbV90cmFjazAwYCwgYHN3aW1fc3RlcGAsIGBzd2ltX2hlYWRgLCBgc3dpbV9lamVjdGAsIGBzd2ltX21vdG9yYCwgYHN3aW1fZHJpdmVgLCBgc3dpbV9yZWFkYml0YCwgYHN3aW1fYWN0aW9uYCwgYHN3aW1fc2VsZWN0YCwgYGdldF9zd2ltX21vZGVgLCBgc2V0X3N3aW1fbW9kZWAsIGFuZCBldmVuIGBzd2ltX3JlYWRfc2VjdG9yX2hlYWRlcmAgYW5kIGBzd2ltX3JlYWRfc2VjdG9yX2RhdGFgIChpbiBhc3NlbWJseSkuCgpTbywgaXMgdGhpcyBkcml2ZXIgd29ydGggZnV6emluZz8gQWJzb2x1dGVseSEgSXQmIzM5O3MgYSBmbG9wcHkgZHJpdmVyIGZvciBtNjhrIE1hY3MuIEl0JiMzOTtzIGZ1bmN0aW9uYWwgY29yZSBsb2dpYy4gR2l2ZW4gUUVNVSYjMzk7cyBgcTgwMGAgbWFjaGluZSwgd2hpY2ggaGFzIGEgU1dJTSBmbG9wcHkgY29udHJvbGxlciwgd2UgY2FuIHRhcmdldCBpdC4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlICpGb2N1c1N5bWJvbHMqLiBXZSBuZWVkIHRvIHBpbnBvaW50IHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgY3JpdGljYWwgZW50cnkgcG9pbnRzLiBUaGVzZSBhcmU6IGBmbG9wcHlfaW9jdGxgLCBgZmxvcHB5X29wZW5gLCBgZmxvcHB5X3JlbGVhc2VgLCBgc3dpbV9xdWV1ZV9ycWAsIGBmbG9wcHlfcmVhZF9zZWN0b3JzYCwgYHN3aW1fcmVhZF9zZWN0b3JfcmFuZ2VgLCBgZmxvcHB5X2VqZWN0YCwgYHN3aW1fYWRkX2Zsb3BweWAsIGBzd2ltX2Zsb3BweV9pbml0YCwgYW5kIGBzd2ltX3Byb2JlYC4KCmBzd2ltX3F1ZXVlX3JxYCBpcyBjcnVjaWFsOyBpdCYjMzk7cyB0aGUgYmxvY2sgZGV2aWNlIHF1ZXVlIHJlcXVlc3QgZnVuY3Rpb24uIGBmbG9wcHlfaW9jdGxgIGhhbmRsZXMgaW9jdGxzLiBgZmxvcHB5X29wZW5gIGFuZCBgZmxvcHB5X3JlbGVhc2VgIGFyZSB0aGUgb3Blbi9yZWxlYXNlIGhhbmRsZXJzLiAgYHN3aW1fcHJvYmVgIGlzIHRoZSBwcm9iZSBmdW5jdGlvbi4KCldlIGFsc28gaGF2ZSBhIGxvdCBvZiBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgd29ydGgga25vd2luZyBhYm91dDogYGZsb3BweV9pb2N0bGAsIGBzd2ltX3F1ZXVlX3JxYCwgYGZsb3BweV9yZWFkX3NlY3RvcnNgLCBgc3dpbV9yZWFkX3NlY3Rvcl9yYW5nZWAsIGBmbG9wcHlfZWplY3RgLCBgc3dpbV90cmFja2AsIGBzd2ltX3NlZWtgLCBgc3dpbV90cmFjazAwYCwgYHN3aW1fc3RlcGAsIGBzd2ltX21vdG9yYCwgYHN3aW1fZHJpdmVgLCBgc3dpbV9hY3Rpb25gLCBgc3dpbV9zZWxlY3RgLCBgc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXJgLCBhbmQgYHN3aW1fcmVhZF9zZWN0b3JfZGF0YWAuCgpIb3dldmVyLCBgc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXJgIGFuZCBgc3dpbV9yZWFkX3NlY3Rvcl9kYXRhYCBhcmUgaW4gYXNzZW1ibHksIHNvIHRoZXkgbWlnaHQgbm90IGJlIGluc3RydW1lbnRlZCBieSBLQVNBTi9LQ09WLCB3aGljaCBpcyBjcnVjaWFsIGZvciBmdXp6aW5nLiBMZXQmIzM5O3MgZm9jdXMgb24gdGhlIEMgZnVuY3Rpb25zLgoKU28sIGxldCYjMzk7cyByZWZpbmUgdGhpcyB0byBtYWtlIGl0IGEgYml0IG1vcmUgZm9jdXNlZDogYGZsb3BweV9pb2N0bGAsIGBzd2ltX3F1ZXVlX3JxYCwgYGZsb3BweV9yZWFkX3NlY3RvcnNgLCBgc3dpbV9yZWFkX3NlY3Rvcl9yYW5nZWAsIGBmbG9wcHlfZWplY3RgLCBgc3dpbV90cmFja2AsIGBzd2ltX3NlZWtgLCBgc3dpbV90cmFjazAwYCwgYHN3aW1fc3RlcGAsIGBzd2ltX21vdG9yYCwgYHN3aW1fZHJpdmVgLCBgc3dpbV9hY3Rpb25gLCBgc3dpbQoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1NXSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzd2ltX3F1ZXVlX3JxJiMzNDssCiAgICAmIzM0O2Zsb3BweV9yZWFkX3NlY3RvcnMmIzM0OywKICAgICYjMzQ7c3dpbV9yZWFkX3NlY3Rvcl9yYW5nZSYjMzQ7LAogICAgJiMzNDtmbG9wcHlfaW9jdGwmIzM0OywKICAgICYjMzQ7ZmxvcHB5X29wZW4mIzM0OywKICAgICYjMzQ7ZmxvcHB5X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7c3dpbV9wcm9iZSYjMzQ7LAogICAgJiMzNDtzd2ltX2Zsb3BweV9pbml0JiMzNDssCiAgICAmIzM0O3N3aW1fYWRkX2Zsb3BweSYjMzQ7LAogICAgJiMzNDtzZXR1cF9tZWRpdW0mIzM0OywKICAgICYjMzQ7ZmxvcHB5X2VqZWN0JiMzNDssCiAgICAmIzM0O3N3aW1fdHJhY2smIzM0OywKICAgICYjMzQ7c3dpbV9zZWVrJiMzNDssCiAgICAmIzM0O3N3aW1fdHJhY2swMCYjMzQ7LAogICAgJiMzNDtzd2ltX3N0ZXAmIzM0OywKICAgICYjMzQ7c3dpbV9tb3RvciYjMzQ7LAogICAgJiMzNDtzd2ltX2RyaXZlJiMzNDssCiAgICAmIzM0O3N3aW1fYWN0aW9uJiMzNDssCiAgICAmIzM0O3N3aW1fc2VsZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgU1dJTSBmbG9wcHkgY29udHJvbGxlciBkcml2ZXIgZm9yIG02OGsgTWFjaW50b3NoIHN5c3RlbXMsIGluY2x1ZGluZyBjaGFuZ2VzIHRvIGRldmljZSByZWdpc3RyYXRpb24sIGluaXRpYWxpemF0aW9uLCByZWFkaW5nIHNlY3RvcnMsIGFuZCBoYW5kbGluZyBoYXJkd2FyZSBzdGF0ZS4gVGhlIGRyaXZlciBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSAodXNpbmcgdGhlIGBxODAwYCBtYWNoaW5lKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIGJsb2NrIGRldmljZSBvcGVyYXRpb25zLCBpb2N0bHMsIGFuZCBoYXJkd2FyZSBpbnRlcmFjdGlvbiBmdW5jdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfU1dJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3aW1fcXVldWVfcnEmIzM0OywKICAgICYjMzQ7ZmxvcHB5X3JlYWRfc2VjdG9ycyYjMzQ7LAogICAgJiMzNDtzd2ltX3JlYWRfc2VjdG9yX3JhbmdlJiMzNDssCiAgICAmIzM0O2Zsb3BweV9pb2N0bCYjMzQ7LAogICAgJiMzNDtmbG9wcHlfb3BlbiYjMzQ7LAogICAgJiMzNDtmbG9wcHlfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtzd2ltX3Byb2JlJiMzNDssCiAgICAmIzM0O3N3aW1fZmxvcHB5X2luaXQmIzM0OywKICAgICYjMzQ7c3dpbV9hZGRfZmxvcHB5JiMzNDssCiAgICAmIzM0O3NldHVwX21lZGl1bSYjMzQ7LAogICAgJiMzNDtmbG9wcHlfZWplY3QmIzM0OywKICAgICYjMzQ7c3dpbV90cmFjayYjMzQ7LAogICAgJiMzNDtzd2ltX3NlZWsmIzM0OywKICAgICYjMzQ7c3dpbV90cmFjazAwJiMzNDssCiAgICAmIzM0O3N3aW1fc3RlcCYjMzQ7LAogICAgJiMzNDtzd2ltX21vdG9yJiMzNDssCiAgICAmIzM0O3N3aW1fZHJpdmUmIzM0OywKICAgICYjMzQ7c3dpbV9hY3Rpb24mIzM0OywKICAgICYjMzQ7c3dpbV9zZWxlY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBTV0lNIGZsb3BweSBjb250cm9sbGVyIGRyaXZlciBmb3IgbTY4ayBNYWNpbnRvc2ggc3lzdGVtcywgaW5jbHVkaW5nIGNoYW5nZXMgdG8gZGV2aWNlIHJlZ2lzdHJhdGlvbiwgaW5pdGlhbGl6YXRpb24sIHJlYWRpbmcgc2VjdG9ycywgYW5kIGhhbmRsaW5nIGhhcmR3YXJlIHN0YXRlLiBUaGUgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VICh1c2luZyB0aGUgYHE4MDBgIG1hY2hpbmUpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgYmxvY2sgZGV2aWNlIG9wZXJhdGlvbnMsIGlvY3RscywgYW5kIGhhcmR3YXJlIGludGVyYWN0aW9uIGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE1OjI2OjU1LjM0MTI5ODk0NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDY0NDc5NDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfU1dJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN3aW1fcXVldWVfcnFcIixcbiAgICBcImZsb3BweV9yZWFkX3NlY3RvcnNcIixcbiAgICBcInN3aW1fcmVhZF9zZWN0b3JfcmFuZ2VcIixcbiAgICBcImZsb3BweV9pb2N0bFwiLFxuICAgIFwiZmxvcHB5X29wZW5cIixcbiAgICBcImZsb3BweV9yZWxlYXNlXCIsXG4gICAgXCJzd2ltX3Byb2JlXCIsXG4gICAgXCJzd2ltX2Zsb3BweV9pbml0XCIsXG4gICAgXCJzd2ltX2FkZF9mbG9wcHlcIixcbiAgICBcInNldHVwX21lZGl1bVwiLFxuICAgIFwiZmxvcHB5X2VqZWN0XCIsXG4gICAgXCJzd2ltX3RyYWNrXCIsXG4gICAgXCJzd2ltX3NlZWtcIixcbiAgICBcInN3aW1fdHJhY2swMFwiLFxuICAgIFwic3dpbV9zdGVwXCIsXG4gICAgXCJzd2ltX21vdG9yXCIsXG4gICAgXCJzd2ltX2RyaXZlXCIsXG4gICAgXCJzd2ltX2FjdGlvblwiLFxuICAgIFwic3dpbV9zZWxlY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFNXSU0gZmxvcHB5IGNvbnRyb2xsZXIgZHJpdmVyIGZvciBtNjhrIE1hY2ludG9zaCBzeXN0ZW1zLCBpbmNsdWRpbmcgY2hhbmdlcyB0byBkZXZpY2UgcmVnaXN0cmF0aW9uLCBpbml0aWFsaXphdGlvbiwgcmVhZGluZyBzZWN0b3JzLCBhbmQgaGFuZGxpbmcgaGFyZHdhcmUgc3RhdGUuIFRoZSBkcml2ZXIgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgKHVzaW5nIHRoZSBgcTgwMGAgbWFjaGluZSkuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBibG9jayBkZXZpY2Ugb3BlcmF0aW9ucywgaW9jdGxzLCBhbmQgaGFyZHdhcmUgaW50ZXJhY3Rpb24gZnVuY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNToyNjo1NS4zNDEzMDYxNzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyOTkwMjA1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM2Y2U0Yzg3ZmJhMDkwNGJlNzkwY2JjYjBkMTJmZWNhMzVjZjUyODhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMTYgMTU6MjY6NTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9jb25maWcuYyBiL2FyY2gvbTY4ay9tYWMvY29uZmlnLmNcXG5pbmRleCBjMDAzM2Y4ODVlZDRmMC4uZGJhM2RlMjFjM2M0MDUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9tNjhrL21hYy9jb25maWcuY1xcbisrKyBiL2FyY2gvbTY4ay9tYWMvY29uZmlnLmNcXG5AQCAtOTg0LDggKzk4NCwzNyBAQCBzdGF0aWMgaW50IF9faW5pdCBtYWNfcGxhdGZvcm1faW5pdCh2b2lkKVxcbiBcXHRcXHRcXHQuc3RhcnQgPSBzd2ltX2Jhc2UsXFxuIFxcdFxcdFxcdC5lbmQgICA9IHN3aW1fYmFzZSArIDB4MUZGRixcXG4gXFx0XFx0fTtcXG4rXFx0XFx0dW5zaWduZWQgaW50IGRhdGEgPSAwO1xcbitcXG4rXFx0XFx0LyogTW9kZWxzIGluIHRoaXMgbGlzdCBhcmUgc3VwcG9zZWQgdG8gcnVuIEZDTEsgYXQgMzIgTUh6ICovXFxuK1xcdFxcdHN3aXRjaCAobWFjaW50b3NoX2NvbmZpZy1cXHUwMDNlaWRlbnQpIHtcXG4rXFx0XFx0Y2FzZSBNQUNfTU9ERUxfQ0NMOlxcbitcXHRcXHRjYXNlIE1BQ19NT0RFTF9DQ0xJSTpcXG4rXFx0XFx0Y2FzZSBNQUNfTU9ERUxfTENJSUk6XFxuK1xcdFxcdGNhc2UgTUFDX01PREVMX1E2MDU6XFxuK1xcdFxcdGNhc2UgTUFDX01PREVMX1E2MDVfQUNDOlxcbitcXHRcXHRjYXNlIE1BQ19NT0RFTF9RNjEwOlxcbitcXHRcXHRjYXNlIE1BQ19NT0RFTF9RNjMwOlxcbitcXHRcXHRjYXNlIE1BQ19NT0RFTF9RNjUwOlxcbitcXHRcXHRjYXNlIE1BQ19NT0RFTF9RODAwOlxcbitcXHRcXHRjYXNlIE1BQ19NT0RFTF9QNDYwOlxcbitcXHRcXHRjYXNlIE1BQ19NT0RFTF9QNDc1OlxcbitcXHRcXHRjYXNlIE1BQ19NT0RFTF9QNDc1RjpcXG4rXFx0XFx0Y2FzZSBNQUNfTU9ERUxfUDUyMDpcXG4rXFx0XFx0Y2FzZSBNQUNfTU9ERUxfUDU1MDpcXG4rXFx0XFx0Y2FzZSBNQUNfTU9ERUxfUDU3NTpcXG4rXFx0XFx0Y2FzZSBNQUNfTU9ERUxfUDU4ODpcXG4rXFx0XFx0Y2FzZSBNQUNfTU9ERUxfVFY6XFxuK1xcdFxcdGNhc2UgTUFDX01PREVMX0M2MTA6XFxuK1xcdFxcdGNhc2UgTUFDX01PREVMX0M2NTA6XFxuK1xcdFxcdGNhc2UgTUFDX01PREVMX1BCMTkwOlxcbitcXHRcXHRjYXNlIE1BQ19NT0RFTF9QQjUyMDpcXG4rXFx0XFx0XFx0ZGF0YSA9IDE7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuIFxcbi1cXHRcXHRwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKFxcXCJzd2ltXFxcIiwgLTEsIFxcdTAwMjZzd2ltX3JzcmMsIDEpO1xcbitcXHRcXHRwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEoTlVMTCwgXFxcInN3aW1cXFwiLCAtMSwgXFx1MDAyNnN3aW1fcnNyYywgMSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2ZGF0YSwgc2l6ZW9mKGRhdGEpKTtcXG4gXFx0fVxcbiBcXG4gXFx0LypcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zd2ltLmMgYi9kcml2ZXJzL2Jsb2NrL3N3aW0uY1xcbmluZGV4IDBjY2MxMmE3MjM4OGQ1Li40NjBmNzRjMTljZmRjMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3N3aW0uY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svc3dpbS5jXFxuQEAgLTIsMTIgKzIsMjAgQEBcXG4gLypcXG4gICogRHJpdmVyIGZvciBTV0lNIChTYW5kZXIgV296IEludGVncmF0ZWQgTWFjaGluZSkgZmxvcHB5IGNvbnRyb2xsZXJcXG4gICpcXG4tICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDggTGF1cmVudCBWaXZpZXIgXFx1MDAzY0xhdXJlbnRAbHZpdmllci5pbmZvXFx1MDAzZVxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggTGF1cmVudCBWaXZpZXIgXFx1MDAzY0xhdXJlbnRAbHZpdmllci5pbmZvXFx1MDAzZVxcbiAgKlxcbiAgKiBiYXNlZCBvbiBBbGFzdGFpciBCcmlkZ2V3YXRlciBTV0lNIGFuYWx5c2lzLCAyMDAxXFxuICAqIGJhc2VkIG9uIFNXSU0zIGRyaXZlciAoYykgUGF1bCBNYWNrZXJyYXMsIDE5OTZcXG4gICogYmFzZWQgb24gbmV0QlNEIElXTSBkcml2ZXIgKGMpIDE5OTcsIDE5OTggSGF1a2UgRmF0aC5cXG4gICpcXG4rICogU2VlIGFsc286XFxuKyAqIEluc2lkZSBNYWNpbnRvc2gsIHZvbC4gSUlJLCBjaC4gMlxcbisgKiBodHRwczovL2FyY2hpdmUub3JnL2RldGFpbHMvU1dJTURlc2lnbkRvY3NcXG4rICogTkVDIHVQRDcyMDcwIEZEQyBkYXRhc2hlZXRcXG4rICogbWtMaW51eCBzb3VyY2UgZmlsZSBzd2ltaWlpY29tbW9uaGFsLmNcXG4rICogaHR0cDovL3d3dy5tYWMubGludXgtbTY4ay5vcmcvZGV2ZWwvaXdtLnBocC5odG1sXFxuKyAqIE1BTUUgc291cmNlIGZpbGUgc29ueWRyaXYuY3BwXFxuKyAqXFxuICAqIDIwMDQtMDgtMjEgKGx2KSAtIEluaXRpYWwgaW1wbGVtZW50YXRpb25cXG4gICogMjAwOC0xMC0zMCAobHYpIC0gUG9ydCB0byAyLjZcXG4gICovXFxuQEAgLTE5LDYgKzI3LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21ham9yLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaGRyZWcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvcG9sbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuQEAgLTYwLDcgKzY5LDcgQEAgc3RydWN0IHN3aW0ge1xcbiBcXHRSRUcocmVhZF9oYW5kc2hha2UpXFxuIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7XFxuIFxcbi0jZGVmaW5lIHN3aW1fd3JpdGUoYmFzZSwgcmVnLCB2KSBcXHRvdXRfOChcXHUwMDI2KGJhc2UpLVxcdTAwM2V3cml0ZV8jI3JlZywgKHYpKVxcbisjZGVmaW5lIHN3aW1fd3JpdGUoYmFzZSwgcmVnLCB2KVxcdG91dF84KFxcdTAwMjYoYmFzZSktXFx1MDAzZXdyaXRlXyMjcmVnLCAodikpXFxuICNkZWZpbmUgc3dpbV9yZWFkKGJhc2UsIHJlZylcXHRcXHRpbl84KFxcdTAwMjYoYmFzZSktXFx1MDAzZXJlYWRfIyNyZWcpXFxuIFxcbiAvKiBJV00gcmVnaXN0ZXJzICovXFxuQEAgLTg0LDYyICs5Myw1MyBAQCBzdHJ1Y3QgaXdtIHtcXG4gXFx0UkVHKHE3SClcXG4gfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTtcXG4gXFxuLSNkZWZpbmUgaXdtX3dyaXRlKGJhc2UsIHJlZywgdikgXFx0b3V0XzgoXFx1MDAyNihiYXNlKS1cXHUwMDNlcmVnLCAodikpXFxuKyNkZWZpbmUgaXdtX3dyaXRlKGJhc2UsIHJlZywgdilcXHRcXHRvdXRfOChcXHUwMDI2KGJhc2UpLVxcdTAwM2VyZWcsICh2KSlcXG4gI2RlZmluZSBpd21fcmVhZChiYXNlLCByZWcpXFx0XFx0aW5fOChcXHUwMDI2KGJhc2UpLVxcdTAwM2VyZWcpXFxuIFxcbiAvKiBiaXRzIGluIHBoYXNlIHJlZ2lzdGVyICovXFxuIFxcbi0jZGVmaW5lIFNFRUtfUE9TSVRJVkVcXHQweDA3MFxcbi0jZGVmaW5lIFNFRUtfTkVHQVRJVkVcXHQweDA3NFxcbi0jZGVmaW5lIFNURVBcXHRcXHQweDA3MVxcbi0jZGVmaW5lIE1PVE9SX09OXFx0MHgwNzJcXG4tI2RlZmluZSBNT1RPUl9PRkZcXHQweDA3Nlxcbi0jZGVmaW5lIElOREVYXFx0XFx0MHgwNzNcXG4tI2RlZmluZSBFSkVDVFxcdFxcdDB4MDc3XFxuLSNkZWZpbmUgU0VUTUZNXFx0XFx0MHgxNzFcXG4tI2RlZmluZSBTRVRHQ1JcXHRcXHQweDE3NVxcbisjZGVmaW5lIFNFRUtfUE9TSVRJVkVcXHQweDBGMFxcbisjZGVmaW5lIFNFRUtfTkVHQVRJVkVcXHQweDBGNFxcbisjZGVmaW5lIFNURVBcXHRcXHQweDBGMVxcbisjZGVmaW5lIE1PVE9SX09OXFx0MHgwRjJcXG4rI2RlZmluZSBNT1RPUl9PRkZcXHQweDBGNlxcbisjZGVmaW5lIElOREVYXFx0XFx0MHgwRjNcXG4rI2RlZmluZSBFSkVDVFxcdFxcdDB4MEY3XFxuKyNkZWZpbmUgU0VUTUZNXFx0XFx0MHgxRjFcXG4rI2RlZmluZSBTRVRHQ1JcXHRcXHQweDFGNVxcbiBcXG4tI2RlZmluZSBSRUxBWFxcdFxcdDB4MDMzXFxuLSNkZWZpbmUgTFNUUkJcXHRcXHQweDAwOFxcbisjZGVmaW5lIFJFTEFYXFx0XFx0MHgwRjNcXG4rI2RlZmluZSBMU1RSQlxcdFxcdDB4MEY4XFxuIFxcbi0jZGVmaW5lIENBX01BU0tcXHRcXHQweDA3N1xcbisjZGVmaW5lIENBX01BU0tcXHRcXHQweDBGN1xcbisjZGVmaW5lIFNFTF9NQVNLXFx0MHgxMDBcXG4gXFxuIC8qIFNlbGVjdCB2YWx1ZXMgZm9yIHN3aW1fc2VsZWN0IGFuZCBzd2ltX3JlYWRiaXQgKi9cXG4gXFxuLSNkZWZpbmUgUkVBRF9EQVRBXzBcXHQweDA3NFxcbi0jZGVmaW5lIE9ORU1FR19EUklWRVxcdDB4MDc1XFxuLSNkZWZpbmUgU0lOR0xFX1NJREVEXFx0MHgwNzZcXG4tI2RlZmluZSBEUklWRV9QUkVTRU5UXFx0MHgwNzdcXG4tI2RlZmluZSBESVNLX0lOXFx0XFx0MHgxNzBcXG4tI2RlZmluZSBXUklURV9QUk9UXFx0MHgxNzFcXG4tI2RlZmluZSBUUkFDS19aRVJPXFx0MHgxNzJcXG4tI2RlZmluZSBUQUNIT1xcdFxcdDB4MTczXFxuLSNkZWZpbmUgUkVBRF9EQVRBXzFcXHQweDE3NFxcbi0jZGVmaW5lIEdDUl9NT0RFXFx0MHgxNzVcXG4tI2RlZmluZSBTRUVLX0NPTVBMRVRFXFx0MHgxNzZcXG4tI2RlZmluZSBUV09NRUdfTUVESUFcXHQweDE3N1xcbisjZGVmaW5lIFNURVBQSU5HXFx0MHgwRjFcXG4rI2RlZmluZSBSRUFEX0RBVEFfMFxcdDB4MEY0XFxuKyNkZWZpbmUgT05FTUVHX0RSSVZFXFx0MHgwRjVcXG4rI2RlZmluZSBTSU5HTEVfU0lERURcXHQweDBGNlxcbisjZGVmaW5lIERSSVZFX1BSRVNFTlRcXHQweDBGN1xcbisjZGVmaW5lIERJU0tfSU5cXHRcXHQweDFGMFxcbisjZGVmaW5lIFdSSVRFX1BST1RcXHQweDFGMVxcbisjZGVmaW5lIFRSQUNLX1pFUk9cXHQweDFGMlxcbisjZGVmaW5lIFRBQ0hPXFx0XFx0MHgxRjNcXG4rI2RlZmluZSBSRUFEX0RBVEFfMVxcdDB4MUY0XFxuKyNkZWZpbmUgR0NSX01PREVcXHQweDFGNVxcbisjZGVmaW5lIFJFQURZXFx0XFx0MHgxRjZcXG4rI2RlZmluZSBUV09NRUdfTUVESUFcXHQweDFGN1xcbiBcXG4gLyogQml0cyBpbiBoYW5kc2hha2UgcmVnaXN0ZXIgKi9cXG4gXFxuLSNkZWZpbmUgTUFSS19CWVRFXFx0MHgwMVxcbi0jZGVmaW5lIENSQ19aRVJPXFx0MHgwMlxcbi0jZGVmaW5lIFJEREFUQVxcdFxcdDB4MDRcXG4gI2RlZmluZSBTRU5TRVxcdFxcdDB4MDhcXG4tI2RlZmluZSBNT1RFTlxcdFxcdDB4MTBcXG4tI2RlZmluZSBFUlJPUlxcdFxcdDB4MjBcXG4gI2RlZmluZSBEQVQyQllURVxcdDB4NDBcXG4gI2RlZmluZSBEQVQxQllURVxcdDB4ODBcXG4gXFxuIC8qIGJpdHMgaW4gc2V0dXAgcmVnaXN0ZXIgKi9cXG4gXFxuLSNkZWZpbmUgU19JTlZfV0RBVEFcXHQweDAxXFxuLSNkZWZpbmUgU18zXzVfU0VMRUNUXFx0MHgwMlxcbi0jZGVmaW5lIFNfR0NSXFx0XFx0MHgwNFxcbiAjZGVmaW5lIFNfRkNMS19ESVYyXFx0MHgwOFxcbi0jZGVmaW5lIFNfRVJST1JfQ09SUlxcdDB4MTBcXG4gI2RlZmluZSBTX0lCTV9EUklWRVxcdDB4MjBcXG4tI2RlZmluZSBTX0dDUl9XUklURVxcdDB4NDBcXG4tI2RlZmluZSBTX1RJTUVPVVRcXHQweDgwXFxuIFxcbiAvKiBiaXRzIGluIG1vZGUgcmVnaXN0ZXIgKi9cXG4gXFxuQEAgLTE0OCwxNCArMTQ4LDEzIEBAIHN0cnVjdCBpd20ge1xcbiAjZGVmaW5lIEVOQkwyXFx0XFx0MHgwNFxcbiAjZGVmaW5lIEFDVElPTlxcdFxcdDB4MDhcXG4gI2RlZmluZSBXUklURV9NT0RFXFx0MHgxMFxcbi0jZGVmaW5lIEhFRFNFTFxcdFxcdDB4MjBcXG4rI2RlZmluZSBJU01fU0VMRUNUXFx0MHg0MFxcbiAjZGVmaW5lIE1PVE9OXFx0XFx0MHg4MFxcbiBcXG4tLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cXG4tXFxuIGVudW0gZHJpdmVfbG9jYXRpb24ge1xcbi1cXHRJTlRFUk5BTF9EUklWRSA9IDB4MDIsXFxuLVxcdEVYVEVSTkFMX0RSSVZFID0gMHgwNCxcXG4rXFx0Tk9fRFJJVkUgPSAwLFxcbitcXHRJTlRFUk5BTF9EUklWRSA9IEJJVCgxKSxcXG4rXFx0RVhURVJOQUxfRFJJVkUgPSBCSVQoMiksXFxuIH07XFxuIFxcbiBlbnVtIG1lZGlhX3R5cGUge1xcbkBAIC0xNjgsMjMgKzE2NywyMyBAQCBzdHJ1Y3QgZmxvcHB5X3N0YXRlIHtcXG4gXFx0LyogcGh5c2ljYWwgcHJvcGVydGllcyAqL1xcbiBcXG4gXFx0ZW51bSBkcml2ZV9sb2NhdGlvbiBsb2NhdGlvbjtcXHQvKiBpbnRlcm5hbCBvciBleHRlcm5hbCBkcml2ZSAqL1xcbi1cXHRpbnRcXHRcXHQgaGVhZF9udW1iZXI7XFx0Lyogc2luZ2xlLSBvciBkb3VibGUtc2lkZWQgZHJpdmUgKi9cXG4rXFx0aW50IGhlYWRfbnVtYmVyO1xcdFxcdC8qIHNpbmdsZS0gb3IgZG91YmxlLXNpZGVkIGRyaXZlICovXFxuIFxcbiBcXHQvKiBtZWRpYSAqL1xcbiBcXG4tXFx0aW50XFx0XFx0IGRpc2tfaW47XFxuLVxcdGludFxcdFxcdCBlamVjdGVkO1xcbi1cXHRlbnVtIG1lZGlhX3R5cGVcXHQgdHlwZTtcXG4tXFx0aW50XFx0XFx0IHdyaXRlX3Byb3RlY3RlZDtcXG4rXFx0aW50IGRpc2tfaW47XFxuK1xcdGludCBlamVjdGVkO1xcbitcXHRlbnVtIG1lZGlhX3R5cGUgdHlwZTtcXG4rXFx0aW50IHdyaXRlX3Byb3RlY3RlZDtcXG4gXFxuLVxcdGludFxcdFxcdCB0b3RhbF9zZWNzO1xcbi1cXHRpbnRcXHRcXHQgc2VjcGVyY3lsO1xcbi1cXHRpbnRcXHRcXHQgc2VjcGVydHJhY2s7XFxuK1xcdHVuc2lnbmVkIGludCB0b3RhbF9zZWNzO1xcbitcXHR1bnNpZ25lZCBpbnQgc2VjcGVyY3lsO1xcbitcXHR1bnNpZ25lZCBpbnQgc2VjcGVydHJhY2s7XFxuIFxcbiBcXHQvKiBpbi11c2UgaW5mb3JtYXRpb24gKi9cXG4gXFxuLVxcdGludFxcdFxcdHRyYWNrO1xcbi1cXHRpbnRcXHRcXHRyZWZfY291bnQ7XFxuK1xcdGludCB0cmFjaztcXG4rXFx0aW50IHJlZl9jb3VudDtcXG4gXFx0Ym9vbCByZWdpc3RlcmVkO1xcbiBcXG4gXFx0c3RydWN0IGdlbmRpc2sgKmRpc2s7XFxuQEAgLTIwOSw3ICsyMDgsNiBAQCBlbnVtIGhlYWQge1xcbiBcXG4gc3RydWN0IHN3aW1fcHJpdiB7XFxuIFxcdHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2U7XFxuLVxcdHNwaW5sb2NrX3QgbG9jaztcXG4gXFx0aW50IGZsb3BweV9jb3VudDtcXG4gXFx0c3RydWN0IGZsb3BweV9zdGF0ZSB1bml0W0ZEX01BWF9VTklUXTtcXG4gfTtcXG5AQCAtMjIwLDIwICsyMTgsMjQgQEAgZXh0ZXJuIGludCBzd2ltX3JlYWRfc2VjdG9yX2RhdGEoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSxcXG4gXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGNoYXIgKmRhdGEpO1xcbiBcXG4gc3RhdGljIERFRklORV9NVVRFWChzd2ltX211dGV4KTtcXG4tc3RhdGljIGlubGluZSB2b2lkIHNldF9zd2ltX21vZGUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IGVuYWJsZSlcXG4rXFxuK3N0YXRpYyB2b2lkIHNldF9zd2ltX21vZGUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IGVuYWJsZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgaXdtIF9faW9tZW0gKml3bV9iYXNlO1xcbitcXHRzdHJ1Y3QgaXdtIF9faW9tZW0gKml3bV9iYXNlID0gKHN0cnVjdCBpd20gX19pb21lbSAqKWJhc2U7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbiBcXHRpZiAoIWVuYWJsZSkge1xcbi1cXHRcXHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCAweGY4KTtcXG4rXFx0XFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgQUNUSU9OKTtcXG4rXFx0XFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgRU5CTDEgfCBFTkJMMiB8IE1PVE9OKTtcXG4rXFx0XFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgSVNNX1NFTEVDVCk7XFxuK1xcdFxcdGl3bV9yZWFkKGl3bV9iYXNlLCBxN0wpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdGl3bV9iYXNlID0gKHN0cnVjdCBpd20gX19pb21lbSAqKWJhc2U7XFxuIFxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4gXFxuIFxcdGl3bV9yZWFkKGl3bV9iYXNlLCBxN0wpO1xcbitcXHRpd21fcmVhZChpd21fYmFzZSwgcTZMKTtcXG4gXFx0aXdtX3JlYWQoaXdtX2Jhc2UsIG10ck9mZik7XFxuIFxcdGl3bV9yZWFkKGl3bV9iYXNlLCBxNkgpO1xcbiBcXG5AQCAtMjQ1LDcgKzI0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc3dpbV9tb2RlKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBlbmFibGUpXFxuIFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgZ2V0X3N3aW1fbW9kZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKVxcbitzdGF0aWMgaW50IGdldF9zd2ltX21vZGUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG5AQCAtMjcxLDcgKzI3Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX3NlbGVjdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgc2VsKVxcbiB7XFxuIFxcdHN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIFJFTEFYKTtcXG4gXFxuLVxcdHZpYTFfc2V0X2hlYWQoc2VsIFxcdTAwMjYgMHgxMDApO1xcbitcXHR2aWExX3NldF9oZWFkKHNlbCBcXHUwMDI2IFNFTF9NQVNLKTtcXG4gXFxuIFxcdHN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIHNlbCBcXHUwMDI2IENBX01BU0spO1xcbiB9XFxuQEAgLTI4NCwxNSArMjg2LDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX2FjdGlvbihzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgYWN0aW9uKVxcbiBcXG4gXFx0c3dpbV9zZWxlY3QoYmFzZSwgYWN0aW9uKTtcXG4gXFx0dWRlbGF5KDEpO1xcbi1cXHRzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCAoTFNUUkJcXHUwMDNjXFx1MDAzYzQpIHwgTFNUUkIpO1xcbi1cXHR1ZGVsYXkoMSk7XFxuLVxcdHN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIChMU1RSQlxcdTAwM2NcXHUwMDNjNCkgfCAoKH5MU1RSQikgXFx1MDAyNiAweDBGKSk7XFxuK1xcdHN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIGFjdGlvbiB8IExTVFJCKTtcXG4rXFx0dWRlbGF5KDIpO1xcbitcXHRzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCBhY3Rpb24pO1xcbiBcXHR1ZGVsYXkoMSk7XFxuIFxcbiBcXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHN3aW1fcmVhZGJpdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgYml0KVxcbitzdGF0aWMgaW5saW5lIGJvb2wgc3dpbV9yZWFkYml0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBiaXQpXFxuIHtcXG4gXFx0aW50IHN0YXQ7XFxuIFxcbkBAIC0zMDUsMTI1ICszMDcsMTE5IEBAIHN0YXRpYyBpbmxpbmUgaW50IHN3aW1fcmVhZGJpdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgYml0KVxcbiBcXHRyZXR1cm4gKHN0YXQgXFx1MDAyNiBTRU5TRSkgPT0gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIHN3aW1fZHJpdmUoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSxcXG4rI2RlZmluZSBzd2ltX3JlYWRiaXRfdGltZW91dChiYXNlLCBiaXQsIHZhbCwgdGltZW91dF91cykgXFxcXFxcbitcXHRwb2xsX3RpbWVvdXRfdXMoLCBzd2ltX3JlYWRiaXQoYmFzZSwgYml0KSA9PSB2YWwsIDEwMDAsIHRpbWVvdXRfdXMsIGZhbHNlKVxcbitcXG4rI2RlZmluZSBzd2ltX3JlYWRiaXRfdGltZW91dF9hdG9taWMoYmFzZSwgYml0LCB2YWwsIHRpbWVvdXRfdXMpIFxcXFxcXG4rXFx0cG9sbF90aW1lb3V0X3VzX2F0b21pYygsIHN3aW1fcmVhZGJpdChiYXNlLCBiaXQpID09IHZhbCwgMSwgdGltZW91dF91cywgZmFsc2UpXFxuK1xcbisjZGVmaW5lIHN3aW1fUkVBRFlfdGltZW91dChiYXNlKSBcXFxcXFxuKyh7IFxcXFxcXG4rXFx0aW50IHJldCA9IHN3aW1fcmVhZGJpdF90aW1lb3V0KGJhc2UsIFJFQURZLCB0cnVlLCAxMDAwICogMTAwMCk7IFxcXFxcXG4rXFx0aWYgKHJldCkgXFxcXFxcbitcXHRcXHRwcmludGsoS0VSTl9ERUJVRyBcXFwiJXM6IGRyaXZlIG5vdCByZWFkeVxcXFxuXFxcIiwgX19mdW5jX18pOyBcXFxcXFxuK1xcdHJldDsgXFxcXFxcbit9KVxcbitcXG4rc3RhdGljIHZvaWQgc3dpbV9kcml2ZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLFxcbiBcXHRcXHRcXHQgICAgICBlbnVtIGRyaXZlX2xvY2F0aW9uIGxvY2F0aW9uKVxcbiB7XFxuIFxcdGlmIChsb2NhdGlvbiA9PSBJTlRFUk5BTF9EUklWRSkge1xcbiBcXHRcXHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBFWFRFUk5BTF9EUklWRSk7IC8qIGNsZWFyIGRyaXZlIDEgYml0ICovXFxuIFxcdFxcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTEsIElOVEVSTkFMX0RSSVZFKTsgLyogc2V0IGRyaXZlIDAgYml0ICovXFxuK1xcdFxcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTEsIE1PVE9OKTtcXG4gXFx0fSBlbHNlIGlmIChsb2NhdGlvbiA9PSBFWFRFUk5BTF9EUklWRSkge1xcbiBcXHRcXHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBJTlRFUk5BTF9EUklWRSk7IC8qIGNsZWFyIGRyaXZlIDAgYml0ICovXFxuIFxcdFxcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTEsIEVYVEVSTkFMX0RSSVZFKTsgLyogc2V0IGRyaXZlIDEgYml0ICovXFxuK1xcdFxcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTEsIE1PVE9OKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgSU5URVJOQUxfRFJJVkUpO1xcbitcXHRcXHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBFWFRFUk5BTF9EUklWRSk7XFxuK1xcdFxcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIE1PVE9OKTtcXG4gXFx0fVxcbitcXHR1ZGVsYXkoMSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX21vdG9yKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsXFxuLVxcdFxcdFxcdCAgICAgIGVudW0gbW90b3JfYWN0aW9uIGFjdGlvbilcXG4rc3RhdGljIHZvaWQgc3dpbV9tb3RvcihzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLFxcbitcXHRcXHQgICAgICAgZW51bSBtb3Rvcl9hY3Rpb24gYWN0aW9uKVxcbiB7XFxuIFxcdGlmIChhY3Rpb24gPT0gT04pIHtcXG4tXFx0XFx0aW50IGk7XFxuLVxcbiBcXHRcXHRzd2ltX2FjdGlvbihiYXNlLCBNT1RPUl9PTik7XFxuLVxcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgMipIWjsgaSsrKSB7XFxuLVxcdFxcdFxcdHN3aW1fc2VsZWN0KGJhc2UsIFJFTEFYKTtcXG4tXFx0XFx0XFx0aWYgKHN3aW1fcmVhZGJpdChiYXNlLCBNT1RPUl9PTikpXFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xcbi1cXHRcXHRcXHRzY2hlZHVsZV90aW1lb3V0KDEpO1xcbi1cXHRcXHR9XFxuK1xcdFxcdHN3aW1fcmVhZGJpdF90aW1lb3V0KGJhc2UsIE1PVE9SX09OLCB0cnVlLCAyMDAwICogMTAwMCk7XFxuIFxcdH0gZWxzZSBpZiAoYWN0aW9uID09IE9GRikge1xcbiBcXHRcXHRzd2ltX2FjdGlvbihiYXNlLCBNT1RPUl9PRkYpO1xcbi1cXHRcXHRzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7XFxuK1xcdFxcdHN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIFJFTEFYKTtcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9lamVjdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKVxcbitzdGF0aWMgdm9pZCBzd2ltX2VqZWN0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpXFxuIHtcXG4tXFx0aW50IGk7XFxuLVxcbiBcXHRzd2ltX2FjdGlvbihiYXNlLCBFSkVDVCk7XFxuLVxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgMipIWjsgaSsrKSB7XFxuLVxcdFxcdHN3aW1fc2VsZWN0KGJhc2UsIFJFTEFYKTtcXG4tXFx0XFx0aWYgKCFzd2ltX3JlYWRiaXQoYmFzZSwgRElTS19JTikpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xcbi1cXHRcXHRzY2hlZHVsZV90aW1lb3V0KDEpO1xcbi1cXHR9XFxuLVxcdHN3aW1fc2VsZWN0KGJhc2UsIFJFTEFYKTtcXG4rXFx0c3dpbV9yZWFkYml0X3RpbWVvdXQoYmFzZSwgRElTS19JTiwgZmFsc2UsIDIwMDAgKiAxMDAwKTtcXG4rXFx0bXNsZWVwKDEpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9oZWFkKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGVudW0gaGVhZCBoZWFkKVxcbiB7XFxuLVxcdC8qIHdhaXQgZHJpdmUgaXMgcmVhZHkgKi9cXG4tXFxuIFxcdGlmIChoZWFkID09IFVQUEVSX0hFQUQpXFxuIFxcdFxcdHN3aW1fc2VsZWN0KGJhc2UsIFJFQURfREFUQV8xKTtcXG4gXFx0ZWxzZSBpZiAoaGVhZCA9PSBMT1dFUl9IRUFEKVxcbiBcXHRcXHRzd2ltX3NlbGVjdChiYXNlLCBSRUFEX0RBVEFfMCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHN3aW1fc3RlcChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKVxcbitzdGF0aWMgaW50IHN3aW1fc3RlcChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKVxcbiB7XFxuLVxcdGludCB3YWl0O1xcbi1cXG4gXFx0c3dpbV9hY3Rpb24oYmFzZSwgU1RFUCk7XFxuLVxcbi1cXHRmb3IgKHdhaXQgPSAwOyB3YWl0IFxcdTAwM2MgSFo7IHdhaXQrKykge1xcbi1cXG4tXFx0XFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcXG4tXFx0XFx0c2NoZWR1bGVfdGltZW91dCgxKTtcXG4tXFxuLVxcdFxcdHN3aW1fc2VsZWN0KGJhc2UsIFJFTEFYKTtcXG4tXFx0XFx0aWYgKCFzd2ltX3JlYWRiaXQoYmFzZSwgU1RFUCkpXFxuLVxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHR9XFxuLVxcdHJldHVybiAtMTtcXG4rXFx0dWRlbGF5KDE1MCk7XFxuK1xcdHJldHVybiBzd2ltX3JlYWRiaXRfdGltZW91dF9hdG9taWMoYmFzZSwgU1RFUFBJTkcsIGZhbHNlLCAyMCAqIDEwMDApO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBzd2ltX3RyYWNrMDAoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSlcXG4rc3RhdGljIGludCBzd2ltX3RyYWNrMDAoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSlcXG4ge1xcbiBcXHRpbnQgdHJ5O1xcbiBcXG4gXFx0c3dpbV9hY3Rpb24oYmFzZSwgU0VFS19ORUdBVElWRSk7XFxuIFxcbiBcXHRmb3IgKHRyeSA9IDA7IHRyeSBcXHUwMDNjIDEwMDsgdHJ5KyspIHtcXG4rXFx0XFx0bXNsZWVwKDMpO1xcbiBcXG4tXFx0XFx0c3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpO1xcbiBcXHRcXHRpZiAoc3dpbV9yZWFkYml0KGJhc2UsIFRSQUNLX1pFUk8pKVxcbi1cXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRcXHRpZiAoc3dpbV9zdGVwKGJhc2UpKVxcbi1cXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoc3dpbV9yZWFkYml0KGJhc2UsIFRSQUNLX1pFUk8pKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuK1xcdHByX2VycihcXFwic3dpbTogdHJhY2sgemVybyByZWNhbGlicmF0aW9uIGZhaWxlZFxcXFxuXFxcIik7XFxuIFxcdHJldHVybiAtMTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgc3dpbV9zZWVrKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBzdGVwKVxcbitzdGF0aWMgaW50IHN3aW1fc2VlayhzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgc3RlcClcXG4ge1xcbi1cXHRpZiAoc3RlcCA9PSAwKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuIFxcdGlmIChzdGVwIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRzd2ltX2FjdGlvbihiYXNlLCBTRUVLX05FR0FUSVZFKTtcXG4gXFx0XFx0c3RlcCA9IC1zdGVwO1xcbi1cXHR9IGVsc2VcXG4rXFx0fSBlbHNlIGlmIChzdGVwIFxcdTAwM2UgMClcXG4gXFx0XFx0c3dpbV9hY3Rpb24oYmFzZSwgU0VFS19QT1NJVElWRSk7XFxuK1xcdHVkZWxheSgxKTtcXG4rXFxuK1xcdHN3aW1fUkVBRFlfdGltZW91dChiYXNlKTtcXG4rXFxuK1xcdGlmIChzdGVwID09IDApXFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0Zm9yICggOyBzdGVwIFxcdTAwM2UgMDsgc3RlcC0tKSB7XFxuK1xcdGZvciAoOyBzdGVwIFxcdTAwM2UgMDsgc3RlcC0tKSB7XFxuIFxcdFxcdGlmIChzd2ltX3N0ZXAoYmFzZSkpXFxuIFxcdFxcdFxcdHJldHVybiAtMTtcXG4gXFx0fVxcbiBcXG4rXFx0bXNsZWVwKDMwKTtcXG4rXFx0c3dpbV9SRUFEWV90aW1lb3V0KGJhc2UpO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHN3aW1fdHJhY2soc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsICBpbnQgdHJhY2spXFxuK3N0YXRpYyBpbnQgc3dpbV90cmFjayhzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcywgaW50IHRyYWNrKVxcbiB7XFxuIFxcdHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy1cXHUwMDNlc3dkLVxcdTAwM2ViYXNlO1xcbiBcXHRpbnQgcmV0O1xcbkBAIC00NDUsOCArNDQxLDEwIEBAIHN0YXRpYyBpbnQgZmxvcHB5X2VqZWN0KHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzKVxcbiBcXHRzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gZnMtXFx1MDAzZXN3ZC1cXHUwMDNlYmFzZTtcXG4gXFxuIFxcdHN3aW1fZHJpdmUoYmFzZSwgZnMtXFx1MDAzZWxvY2F0aW9uKTtcXG4rXFx0c3dpbV90cmFjayhmcywgMSk7XFxuIFxcdHN3aW1fbW90b3IoYmFzZSwgT0ZGKTtcXG4gXFx0c3dpbV9lamVjdChiYXNlKTtcXG4rXFx0c3dpbV9kcml2ZShiYXNlLCBOT19EUklWRSk7XFxuIFxcbiBcXHRmcy1cXHUwMDNlZGlza19pbiA9IDA7XFxuIFxcdGZzLVxcdTAwM2VlamVjdGVkID0gMTtcXG5AQCAtNDU0LDcwICs0NTIsODEgQEAgc3RhdGljIGludCBmbG9wcHlfZWplY3Qoc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBzd2ltX3JlYWRfc2VjdG9yKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzLFxcbi1cXHRcXHRcXHRcXHQgICBpbnQgc2lkZSwgaW50IHRyYWNrLFxcbi1cXHRcXHRcXHRcXHQgICBpbnQgc2VjdG9yLCB1bnNpZ25lZCBjaGFyICpidWZmZXIpXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3dpbV9yZWFkX3NlY3Rvcl9yYW5nZShzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyxcXG4rXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IHNpZGUsIHVuc2lnbmVkIGludCB0cmFjayxcXG4rXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgY291bnQsXFxuK1xcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcilcXG4ge1xcbiBcXHRzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gZnMtXFx1MDAzZXN3ZC1cXHUwMDNlYmFzZTtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0c3RydWN0IHNlY3Rvcl9oZWFkZXIgaGVhZGVyO1xcbi1cXHRpbnQgcmV0ID0gLTE7XFxuLVxcdHNob3J0IGk7XFxuLVxcbi1cXHRzd2ltX3RyYWNrKGZzLCB0cmFjayk7XFxuK1xcdGludCBpLCBiaXRzID0gMDtcXG4gXFxuLVxcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTEsIE1PVE9OKTtcXG4tXFx0c3dpbV9oZWFkKGJhc2UsIHNpZGUpO1xcbi1cXHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBzaWRlKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDE4OyBpKyspIHsgLyogQSB0cmFjayBoYXMgYXQgbW9zdCAxOCBzZWN0b3JzICovXFxuK1xcdFxcdGlmIChpIFxcdTAwM2U9IGNvdW50KVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Yml0cyB8PSBCSVQoaSk7XFxuK1xcdH1cXG4gXFxuIFxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDM2OyBpKyspIHtcXG4tXFx0XFx0cmV0ID0gc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXIoYmFzZSwgXFx1MDAyNmhlYWRlcik7XFxuLVxcdFxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IChoZWFkZXIuc2VjdG9yID09IHNlY3RvcikpIHtcXG4tXFx0XFx0XFx0LyogZm91bmQgKi9cXG4tXFxuLVxcdFxcdFxcdHJldCA9IHN3aW1fcmVhZF9zZWN0b3JfZGF0YShiYXNlLCBidWZmZXIpO1xcbitcXHRcXHRpZiAoYml0cyA9PSAwKSAvKiBBbGwgY291bnQgc2VjdG9ycyB3ZXJlIHJlYWQgb2sgKi9cXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRpZiAoc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXIoYmFzZSwgXFx1MDAyNmhlYWRlcikgfHxcXG4rXFx0XFx0ICAgIHN3aW1fcmVhZChiYXNlLCBlcnJvcikgfHwgaGVhZGVyLnRyYWNrICE9IHRyYWNrIHx8XFxuK1xcdFxcdCAgICBoZWFkZXIuc2lkZSAhPSBzaWRlIHx8IGhlYWRlci5zaXplICE9IDIpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKGhlYWRlci5zZWN0b3IgXFx1MDAzZT0gc3RhcnQgXFx1MDAyNlxcdTAwMjYgaGVhZGVyLnNlY3RvciBcXHUwMDNjIHN0YXJ0ICsgY291bnQpIHtcXG4rXFx0XFx0XFx0dW5zaWduZWQgaW50IG9mZnNldCA9IGhlYWRlci5zZWN0b3IgLSBzdGFydDtcXG4rXFx0XFx0XFx0aW50IHJldDtcXG4rXFxuK1xcdFxcdFxcdGlmICgoYml0cyBcXHUwMDI2IEJJVChvZmZzZXQpKSA9PSAwKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTsgLyogVGhpcyBzZWN0b3Igd2FzIGFscmVhZHkgcmVhZCBvayAqL1xcbitcXG4rXFx0XFx0XFx0cmV0ID0gc3dpbV9yZWFkX3NlY3Rvcl9kYXRhKGJhc2UsIGJ1ZmZlciArIDUxMiAqIG9mZnNldCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgPT0gNTEyIFxcdTAwMjZcXHUwMDI2IHN3aW1fcmVhZChiYXNlLCBlcnJvcikgPT0gMClcXG4rXFx0XFx0XFx0XFx0Yml0cyBcXHUwMDI2PSB+QklUKG9mZnNldCk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuIFxcbi1cXHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBNT1RPTik7XFxuLVxcbi1cXHRpZiAoKGhlYWRlci5zaWRlICE9IHNpZGUpICB8fCAoaGVhZGVyLnRyYWNrICE9IHRyYWNrKSB8fFxcbi1cXHQgICAgIChoZWFkZXIuc2VjdG9yICE9IHNlY3RvcikpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0dXJuIGJpdHMgPyBmZnMoYml0cykgLSAxIDogY291bnQ7IC8qIE5vLiBvZiBjb250aWd1b3VzIG9rIHNlY3RvcnMgKi9cXG4gfVxcbiBcXG4gc3RhdGljIGJsa19zdGF0dXNfdCBmbG9wcHlfcmVhZF9zZWN0b3JzKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzLFxcbi1cXHRcXHRcXHQgICAgICAgaW50IHJlcV9zZWN0b3IsIGludCBzZWN0b3JzX25iLFxcbi1cXHRcXHRcXHQgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyKVxcbitcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcmVxX3NlY3RvcixcXG4rXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IHNlY3RvcnNfbmIsXFxuK1xcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcilcXG4ge1xcbiBcXHRzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gZnMtXFx1MDAzZXN3ZC1cXHUwMDNlYmFzZTtcXG4tXFx0aW50IHJldDtcXG4tXFx0aW50IHNpZGUsIHRyYWNrLCBzZWN0b3I7XFxuLVxcdGludCBpLCB0cnk7XFxuLVxcbitcXHR1bnNpZ25lZCBpbnQgZmFpbHVyZXMgPSAwO1xcbiBcXG4gXFx0c3dpbV9kcml2ZShiYXNlLCBmcy1cXHUwMDNlbG9jYXRpb24pO1xcbi1cXHRmb3IgKGkgPSByZXFfc2VjdG9yOyBpIFxcdTAwM2MgcmVxX3NlY3RvciArIHNlY3RvcnNfbmI7IGkrKykge1xcbi1cXHRcXHRpbnQgeDtcXG4tXFx0XFx0dHJhY2sgPSBpIC8gZnMtXFx1MDAzZXNlY3BlcmN5bDtcXG4tXFx0XFx0eCA9IGkgJSBmcy1cXHUwMDNlc2VjcGVyY3lsO1xcbi1cXHRcXHRzaWRlID0geCAvIGZzLVxcdTAwM2VzZWNwZXJ0cmFjaztcXG4tXFx0XFx0c2VjdG9yID0geCAlIGZzLVxcdTAwM2VzZWNwZXJ0cmFjayArIDE7XFxuLVxcbi1cXHRcXHR0cnkgPSA1O1xcbi1cXHRcXHRkbyB7XFxuLVxcdFxcdFxcdHJldCA9IHN3aW1fcmVhZF9zZWN0b3IoZnMsIHNpZGUsIHRyYWNrLCBzZWN0b3IsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdGJ1ZmZlcik7XFxuLVxcdFxcdFxcdGlmICh0cnktLSA9PSAwKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gQkxLX1NUU19JT0VSUjtcXG4tXFx0XFx0fSB3aGlsZSAocmV0ICE9IDUxMik7XFxuLVxcbi1cXHRcXHRidWZmZXIgKz0gcmV0O1xcbitcXHRzd2ltX1JFQURZX3RpbWVvdXQoYmFzZSk7XFxuK1xcbitcXHR3aGlsZSAoc2VjdG9yc19uYikge1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgY3lsLCB4LCBoZWFkLCBzZWN0b3IsIG4sIHJldDtcXG4rXFxuK1xcdFxcdGN5bCA9IHJlcV9zZWN0b3IgLyBmcy1cXHUwMDNlc2VjcGVyY3lsO1xcbitcXHRcXHR4ID0gcmVxX3NlY3RvciAlIGZzLVxcdTAwM2VzZWNwZXJjeWw7XFxuK1xcdFxcdGhlYWQgPSAoeCBcXHUwMDNlPSBmcy1cXHUwMDNlc2VjcGVydHJhY2spID8gMSA6IDA7XFxuK1xcdFxcdHNlY3RvciA9IHggJSBmcy1cXHUwMDNlc2VjcGVydHJhY2s7XFxuK1xcdFxcdG4gPSBtaW4oc2VjdG9yc19uYiwgZnMtXFx1MDAzZXNlY3BlcnRyYWNrIC0gc2VjdG9yKTtcXG4rXFxuK1xcdFxcdHN3aW1fdHJhY2soZnMsIGN5bCk7XFxuK1xcdFxcdHN3aW1faGVhZChiYXNlLCBoZWFkKTtcXG4rXFxuK1xcdFxcdHJldCA9IHN3aW1fcmVhZF9zZWN0b3JfcmFuZ2UoZnMsIGhlYWQsIGN5bCwgc2VjdG9yICsgMSwgbiwgYnVmZmVyKTtcXG4rXFx0XFx0aWYgKHJldCAhPSBuKVxcbitcXHRcXHRcXHQrK2ZhaWx1cmVzO1xcbitcXHRcXHRpZiAoZmFpbHVyZXMgXFx1MDAzZT0gNSlcXG4rXFx0XFx0XFx0cmV0dXJuIEJMS19TVFNfSU9FUlI7XFxuK1xcbitcXHRcXHRidWZmZXIgKz0gNTEyICogcmV0O1xcbitcXHRcXHRzZWN0b3JzX25iIC09IHJldDtcXG4rXFx0XFx0cmVxX3NlY3RvciArPSByZXQ7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC01MjcsMTIgKzUzNiwxMCBAQCBzdGF0aWMgYmxrX3N0YXR1c190IHN3aW1fcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuIFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGJsa19tcV9xdWV1ZV9kYXRhICpiZClcXG4ge1xcbiBcXHRzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IGhjdHgtXFx1MDAzZXF1ZXVlLVxcdTAwM2VxdWV1ZWRhdGE7XFxuLVxcdHN0cnVjdCBzd2ltX3ByaXYgKnN3ZCA9IGZzLVxcdTAwM2Vzd2Q7XFxuIFxcdHN0cnVjdCByZXF1ZXN0ICpyZXEgPSBiZC1cXHUwMDNlcnE7XFxuIFxcdGJsa19zdGF0dXNfdCBlcnI7XFxuIFxcbi1cXHRpZiAoIXNwaW5fdHJ5bG9ja19pcnEoXFx1MDAyNnN3ZC1cXHUwMDNlbG9jaykpXFxuLVxcdFxcdHJldHVybiBCTEtfU1RTX0RFVl9SRVNPVVJDRTtcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2c3dpbV9tdXRleCk7XFxuIFxcbiBcXHRibGtfbXFfc3RhcnRfcmVxdWVzdChyZXEpO1xcbiBcXG5AQCAtNTUwLDE2ICs1NTcsMTYgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBzd2ltX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxcbiBcXG4gXFx0ZXJyID0gQkxLX1NUU19PSztcXG4gb3V0Olxcbi1cXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnN3ZC1cXHUwMDNlbG9jayk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2c3dpbV9tdXRleCk7XFxuIFxcdHJldHVybiBlcnI7XFxuIFxcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IGZsb3BweV9zdHJ1Y3QgZmxvcHB5X3R5cGVbNF0gPSB7XFxuLVxcdHsgICAgMCwgIDAsIDAsICAwLCAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCBOVUxMIH0sIC8qIG5vIHRlc3RpbmcgICAqL1xcbitcXHR7ICAgIDAsICAwLCAwLCAgMCwgMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgTlVMTCB9LCAvKiBubyB0ZXN0aW5nICovXFxuIFxcdHsgIDcyMCwgIDksIDEsIDgwLCAwLCAweDJBLCAweDAyLCAweERGLCAweDUwLCBOVUxMIH0sIC8qIDM2MEtCIFNTIDMuNVxcXCIqL1xcbi1cXHR7IDE0NDAsICA5LCAyLCA4MCwgMCwgMHgyQSwgMHgwMiwgMHhERiwgMHg1MCwgTlVMTCB9LCAvKiA3MjBLQiAzLjVcXFwiICAgKi9cXG4tXFx0eyAyODgwLCAxOCwgMiwgODAsIDAsIDB4MUIsIDB4MDAsIDB4Q0YsIDB4NkMsIE5VTEwgfSwgLyogMS40NE1CIDMuNVxcXCIgICovXFxuK1xcdHsgMTQ0MCwgIDksIDIsIDgwLCAwLCAweDJBLCAweDAyLCAweERGLCAweDUwLCBOVUxMIH0sIC8qIDcyMEtCIDMuNVxcXCIgKi9cXG4rXFx0eyAyODgwLCAxOCwgMiwgODAsIDAsIDB4MUIsIDB4MDAsIDB4Q0YsIDB4NkMsIE5VTEwgfSwgLyogMS40NE1CIDMuNVxcXCIgKi9cXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgZ2V0X2Zsb3BweV9nZW9tZXRyeShzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcywgaW50IHR5cGUsXFxuQEAgLTU4NiwyMyArNTkzLDE2IEBAIHN0YXRpYyB2b2lkIHNldHVwX21lZGl1bShzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcylcXG4gXFxuIFxcdGlmIChzd2ltX3JlYWRiaXQoYmFzZSwgRElTS19JTikpIHtcXG4gXFx0XFx0c3RydWN0IGZsb3BweV9zdHJ1Y3QgKmc7XFxuK1xcbiBcXHRcXHRmcy1cXHUwMDNlZGlza19pbiA9IDE7XFxuIFxcdFxcdGZzLVxcdTAwM2V3cml0ZV9wcm90ZWN0ZWQgPSBzd2ltX3JlYWRiaXQoYmFzZSwgV1JJVEVfUFJPVCk7XFxuLVxcbi1cXHRcXHRpZiAoc3dpbV90cmFjazAwKGJhc2UpKVxcbi1cXHRcXHRcXHRwcmludGsoS0VSTl9FUlJcXG4tXFx0XFx0XFx0XFx0XFxcIlNXSU06IGNhbm5vdCBtb3ZlIGZsb3BweSBoZWFkIHRvIHRyYWNrIDBcXFxcblxcXCIpO1xcbi1cXG4tXFx0XFx0c3dpbV90cmFjazAwKGJhc2UpO1xcbi1cXG4gXFx0XFx0ZnMtXFx1MDAzZXR5cGUgPSBzd2ltX3JlYWRiaXQoYmFzZSwgVFdPTUVHX01FRElBKSA/XFxuLVxcdFxcdFxcdEhEX01FRElBIDogRERfTUVESUE7XFxuK1xcdFxcdFxcdCAgIEhEX01FRElBIDogRERfTUVESUE7XFxuIFxcdFxcdGZzLVxcdTAwM2VoZWFkX251bWJlciA9IHN3aW1fcmVhZGJpdChiYXNlLCBTSU5HTEVfU0lERUQpID8gMSA6IDI7XFxuIFxcdFxcdGdldF9mbG9wcHlfZ2VvbWV0cnkoZnMsIDAsIFxcdTAwMjZnKTtcXG4gXFx0XFx0ZnMtXFx1MDAzZXRvdGFsX3NlY3MgPSBnLVxcdTAwM2VzaXplO1xcbiBcXHRcXHRmcy1cXHUwMDNlc2VjcGVyY3lsID0gZy1cXHUwMDNlaGVhZCAqIGctXFx1MDAzZXNlY3Q7XFxuIFxcdFxcdGZzLVxcdTAwM2VzZWNwZXJ0cmFjayA9IGctXFx1MDAzZXNlY3Q7XFxuLVxcdFxcdGZzLVxcdTAwM2V0cmFjayA9IDA7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGZzLVxcdTAwM2VkaXNrX2luID0gMDtcXG4gXFx0fVxcbkBAIC02MjAsMTEgKzYyMCw5IEBAIHN0YXRpYyBpbnQgZmxvcHB5X29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcXG4gXFx0XFx0ZnMtXFx1MDAzZXJlZl9jb3VudCA9IC0xO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGZzLVxcdTAwM2VyZWZfY291bnQrKztcXG4tXFx0c3dpbV93cml0ZShiYXNlLCBzZXR1cCwgU19JQk1fRFJJVkUgIHwgU19GQ0xLX0RJVjIpO1xcbi1cXHR1ZGVsYXkoMTApO1xcbitcXG4gXFx0c3dpbV9kcml2ZShiYXNlLCBmcy1cXHUwMDNlbG9jYXRpb24pO1xcbi1cXHRzd2ltX21vdG9yKGJhc2UsIE9OKTtcXG4tXFx0c3dpbV9hY3Rpb24oYmFzZSwgU0VUTUZNKTtcXG4rXFxuIFxcdGlmIChmcy1cXHUwMDNlZWplY3RlZClcXG4gXFx0XFx0c2V0dXBfbWVkaXVtKGZzKTtcXG4gXFx0aWYgKCFmcy1cXHUwMDNlZGlza19pbikge1xcbkBAIC02MzIsNiArNjMwLDExIEBAIHN0YXRpYyBpbnQgZmxvcHB5X29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuK1xcdHN3aW1fbW90b3IoYmFzZSwgT04pO1xcbitcXHRzd2ltX2FjdGlvbihiYXNlLCBTRVRNRk0pO1xcbitcXHRtc2xlZXAoMzApO1xcbitcXHRzd2ltX1JFQURZX3RpbWVvdXQoYmFzZSk7XFxuK1xcbiBcXHRzZXRfY2FwYWNpdHkoZnMtXFx1MDAzZWRpc2ssIGZzLVxcdTAwM2V0b3RhbF9zZWNzKTtcXG4gXFxuIFxcdGlmIChtb2RlIFxcdTAwMjYgQkxLX09QRU5fTkRFTEFZKVxcbkBAIC02NTIsOCArNjU1LDEwIEBAIHN0YXRpYyBpbnQgZmxvcHB5X29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcXG4gXFx0ZWxzZSBpZiAoZnMtXFx1MDAzZXJlZl9jb3VudCBcXHUwMDNlIDApXFxuIFxcdFxcdC0tZnMtXFx1MDAzZXJlZl9jb3VudDtcXG4gXFxuLVxcdGlmIChmcy1cXHUwMDNlcmVmX2NvdW50ID09IDApXFxuK1xcdGlmIChmcy1cXHUwMDNlcmVmX2NvdW50ID09IDApIHtcXG4gXFx0XFx0c3dpbV9tb3RvcihiYXNlLCBPRkYpO1xcbitcXHRcXHRzd2ltX2RyaXZlKGJhc2UsIE5PX0RSSVZFKTtcXG4rXFx0fVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbkBAIC02NzksOCArNjg0LDExIEBAIHN0YXRpYyB2b2lkIGZsb3BweV9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbiBcXHRlbHNlIGlmIChmcy1cXHUwMDNlcmVmX2NvdW50IFxcdTAwM2UgMClcXG4gXFx0XFx0LS1mcy1cXHUwMDNlcmVmX2NvdW50O1xcbiBcXG4tXFx0aWYgKGZzLVxcdTAwM2VyZWZfY291bnQgPT0gMClcXG4rXFx0aWYgKGZzLVxcdTAwM2VyZWZfY291bnQgPT0gMCkge1xcbitcXHRcXHRzd2ltX2RyaXZlKGJhc2UsIGZzLVxcdTAwM2Vsb2NhdGlvbik7XFxuIFxcdFxcdHN3aW1fbW90b3IoYmFzZSwgT0ZGKTtcXG4rXFx0XFx0c3dpbV9kcml2ZShiYXNlLCBOT19EUklWRSk7XFxuK1xcdH1cXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzd2ltX211dGV4KTtcXG4gfVxcbiBcXG5AQCAtNjkxLDcgKzY5OSw3IEBAIHN0YXRpYyBpbnQgZmxvcHB5X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGlmICgoY21kIFxcdTAwMjYgMHg4MCkgXFx1MDAyNlxcdTAwMjYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpXFxuLVxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuK1xcdFxcdHJldHVybiAtRVBFUk07XFxuIFxcbiBcXHRzd2l0Y2ggKGNtZCkge1xcbiBcXHRjYXNlIEZERUpFQ1Q6XFxuQEAgLTc1MCwxMCArNzU4LDkgQEAgc3RhdGljIGludCBzd2ltX2FkZF9mbG9wcHkoc3RydWN0IHN3aW1fcHJpdiAqc3dkLCBlbnVtIGRyaXZlX2xvY2F0aW9uIGxvY2F0aW9uKVxcbiBcXHRzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IFxcdTAwMjZzd2QtXFx1MDAzZXVuaXRbc3dkLVxcdTAwM2VmbG9wcHlfY291bnRdO1xcbiBcXHRzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gc3dkLVxcdTAwM2ViYXNlO1xcbiBcXG4rXFx0ZnMtXFx1MDAzZXN3ZCA9IHN3ZDtcXG4gXFx0ZnMtXFx1MDAzZWxvY2F0aW9uID0gbG9jYXRpb247XFxuIFxcbi1cXHRzd2ltX2RyaXZlKGJhc2UsIGxvY2F0aW9uKTtcXG4tXFxuIFxcdHN3aW1fbW90b3IoYmFzZSwgT0ZGKTtcXG4gXFxuIFxcdGZzLVxcdTAwM2V0eXBlID0gSERfTUVESUE7XFxuQEAgLTc2MSw2ICs3NjgsNyBAQCBzdGF0aWMgaW50IHN3aW1fYWRkX2Zsb3BweShzdHJ1Y3Qgc3dpbV9wcml2ICpzd2QsIGVudW0gZHJpdmVfbG9jYXRpb24gbG9jYXRpb24pXFxuIFxcbiBcXHRmcy1cXHUwMDNlcmVmX2NvdW50ID0gMDtcXG4gXFx0ZnMtXFx1MDAzZWVqZWN0ZWQgPSAxO1xcbitcXHRmcy1cXHUwMDNldHJhY2sgPSAwO1xcbiBcXG4gXFx0c3dkLVxcdTAwM2VmbG9wcHlfY291bnQrKztcXG4gXFxuQEAgLTc4NSwyNSArNzkzLDQzIEBAIHN0YXRpYyB2b2lkIHN3aW1fY2xlYW51cF9mbG9wcHlfZGlzayhzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcylcXG4gXFx0YmxrX21xX2ZyZWVfdGFnX3NldChcXHUwMDI2ZnMtXFx1MDAzZXRhZ19zZXQpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHN3aW1fZmxvcHB5X2luaXQoc3RydWN0IHN3aW1fcHJpdiAqc3dkKVxcbitzdGF0aWMgdm9pZCBzd2ltX3NldF9wYXJhbWV0ZXJzKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcdHN0YXRpYyBjb25zdCB1OCBtZW1bXSA9IHsgMHgxOCwgMHg0MSwgMHgyZSwgMHgyZSwgMHgxOCwgMHgxOCwgMHgxYiwgMHgxYixcXG4rXFx0XFx0XFx0XFx0ICAweDJmLCAweDJmLCAweDE5LCAweDE5LCAweDk3LCAweDFiLCAweDU3LCAweDNiLCB9O1xcbitcXG4rXFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgMCk7IC8qIHJlc2V0IHBhcmFtZXRlciBtZW1vcnkgaW5kZXggKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDE2OyArK2kpXFxuK1xcdFxcdHN3aW1fd3JpdGUoYmFzZSwgcGFyYW1ldGVyLCBtZW1baV0pO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHN3aW1fZmxvcHB5X2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4ge1xcbitcXHRzdHJ1Y3Qgc3dpbV9wcml2ICpzd2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFx0dW5zaWduZWQgaW50ICpkYXRhID0gcGRldi1cXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGE7XFxuIFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0ge1xcbi1cXHRcXHQuZmVhdHVyZXNcXHRcXHQ9IEJMS19GRUFUX1JPVEFUSU9OQUwsXFxuK1xcdFxcdC5mZWF0dXJlcyA9IEJMS19GRUFUX1JPVEFUSU9OQUwsXFxuIFxcdH07XFxuIFxcdGludCBlcnI7XFxuIFxcdGludCBkcml2ZTtcXG4gXFx0c3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IHN3ZC1cXHUwMDNlYmFzZTtcXG4gXFxuK1xcdHN3aW1fd3JpdGUoYmFzZSwgc2V0dXAsIFNfSUJNX0RSSVZFIHwgKCpkYXRhID8gU19GQ0xLX0RJVjIgOiAwKSk7XFxuK1xcbitcXHRzd2ltX3NldF9wYXJhbWV0ZXJzKGJhc2UpO1xcbitcXG4gXFx0Lyogc2NhbiBmbG9wcHkgZHJpdmVzICovXFxuIFxcbiBcXHRzd2ltX2RyaXZlKGJhc2UsIElOVEVSTkFMX0RSSVZFKTtcXG4gXFx0aWYgKHN3aW1fcmVhZGJpdChiYXNlLCBEUklWRV9QUkVTRU5UKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgIXN3aW1fcmVhZGJpdChiYXNlLCBPTkVNRUdfRFJJVkUpKVxcbitcXHQgICAgIXN3aW1fcmVhZGJpdChiYXNlLCBPTkVNRUdfRFJJVkUpIFxcdTAwMjZcXHUwMDI2ICFzd2ltX3RyYWNrMDAoYmFzZSkpXFxuIFxcdFxcdHN3aW1fYWRkX2Zsb3BweShzd2QsIElOVEVSTkFMX0RSSVZFKTtcXG4gXFx0c3dpbV9kcml2ZShiYXNlLCBFWFRFUk5BTF9EUklWRSk7XFxuIFxcdGlmIChzd2ltX3JlYWRiaXQoYmFzZSwgRFJJVkVfUFJFU0VOVCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICFzd2ltX3JlYWRiaXQoYmFzZSwgT05FTUVHX0RSSVZFKSlcXG4rXFx0ICAgICFzd2ltX3JlYWRiaXQoYmFzZSwgT05FTUVHX0RSSVZFKSBcXHUwMDI2XFx1MDAyNiAhc3dpbV90cmFjazAwKGJhc2UpKVxcbiBcXHRcXHRzd2ltX2FkZF9mbG9wcHkoc3dkLCBFWFRFUk5BTF9EUklWRSk7XFxuK1xcdHN3aW1fZHJpdmUoYmFzZSwgTk9fRFJJVkUpO1xcbiBcXG4gXFx0LyogcmVnaXN0ZXIgZmxvcHB5IGRyaXZlcyAqL1xcbiBcXG5AQCAtODE0LDExICs4NDAsOSBAQCBzdGF0aWMgaW50IHN3aW1fZmxvcHB5X2luaXQoc3RydWN0IHN3aW1fcHJpdiAqc3dkKVxcbiBcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXHR9XFxuIFxcbi1cXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2c3dkLVxcdTAwM2Vsb2NrKTtcXG4tXFxuIFxcdGZvciAoZHJpdmUgPSAwOyBkcml2ZSBcXHUwMDNjIHN3ZC1cXHUwMDNlZmxvcHB5X2NvdW50OyBkcml2ZSsrKSB7XFxuIFxcdFxcdGVyciA9IGJsa19tcV9hbGxvY19zcV90YWdfc2V0KFxcdTAwMjZzd2QtXFx1MDAzZXVuaXRbZHJpdmVdLnRhZ19zZXQsXFxuLVxcdFxcdFxcdFxcdFxcdTAwMjZzd2ltX21xX29wcywgMiwgMCk7XFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZzd2ltX21xX29wcywgMiwgQkxLX01RX0ZfQkxPQ0tJTkcpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRnb3RvIGV4aXRfcHV0X2Rpc2tzO1xcbiBcXG5AQCAtODMwLDggKzg1NCw2IEBAIHN0YXRpYyBpbnQgc3dpbV9mbG9wcHlfaW5pdChzdHJ1Y3Qgc3dpbV9wcml2ICpzd2QpXFxuIFxcdFxcdFxcdGVyciA9IFBUUl9FUlIoc3dkLVxcdTAwM2V1bml0W2RyaXZlXS5kaXNrKTtcXG4gXFx0XFx0XFx0Z290byBleGl0X3B1dF9kaXNrcztcXG4gXFx0XFx0fVxcbi1cXG4tXFx0XFx0c3dkLVxcdTAwM2V1bml0W2RyaXZlXS5zd2QgPSBzd2Q7XFxuIFxcdH1cXG4gXFxuIFxcdGZvciAoZHJpdmUgPSAwOyBkcml2ZSBcXHUwMDNjIHN3ZC1cXHUwMDNlZmxvcHB5X2NvdW50OyBkcml2ZSsrKSB7XFxuQEAgLTkwNSw3ICs5MjcsNyBAQCBzdGF0aWMgaW50IHN3aW1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KVxcbiBcXG4gXFx0c3dkLVxcdTAwM2ViYXNlID0gc3dpbV9iYXNlO1xcbiBcXG4tXFx0cmV0ID0gc3dpbV9mbG9wcHlfaW5pdChzd2QpO1xcbitcXHRyZXQgPSBzd2ltX2Zsb3BweV9pbml0KGRldik7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gb3V0X2tmcmVlO1xcbiBcXG5AQCAtOTQ1LDcgKzk2Nyw3IEBAIHN0YXRpYyB2b2lkIHN3aW1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldilcXG4gc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc3dpbV9kcml2ZXIgPSB7XFxuIFxcdC5wcm9iZSAgPSBzd2ltX3Byb2JlLFxcbiBcXHQucmVtb3ZlID0gc3dpbV9yZW1vdmUsXFxuLVxcdC5kcml2ZXIgICA9IHtcXG4rXFx0LmRyaXZlciA9IHtcXG4gXFx0XFx0Lm5hbWVcXHQ9IENBUkROQU1FLFxcbiBcXHR9LFxcbiB9O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N3aW1fYXNtLlMgYi9kcml2ZXJzL2Jsb2NrL3N3aW1fYXNtLlNcXG5pbmRleCAzZDdhMmQ4NzU5NWE1Ny4uNjViNGU0NjU4ZTEwYzcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TXFxuKysrIGIvZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TXFxuQEAgLTUsNyArNSw3IEBAXFxuICAqIG5lZWRzIGFzc2VtYmx5IGxhbmd1YWdlIGJlY2F1c2UgaXMgdmVyeSB0aW1pbmcgZGVwZW5kZW50XFxuICAqIHRoaXMgY29udHJvbGxlciBleGlzdHMgb25seSBvbiBtYWNpbnRvc2ggNjgweDAgYmFzZWRcXG4gICpcXG4tICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDggTGF1cmVudCBWaXZpZXIgXFx1MDAzY0xhdXJlbnRAbHZpdmllci5pbmZvXFx1MDAzZVxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggTGF1cmVudCBWaXZpZXIgXFx1MDAzY0xhdXJlbnRAbHZpdmllci5pbmZvXFx1MDAzZVxcbiAgKlxcbiAgKiBiYXNlZCBvbiBBbGFzdGFpciBCcmlkZ2V3YXRlciBTV0lNIGFuYWx5c2lzLCAyMDAxXFxuICAqIGJhc2VkIG9uIG5ldEJTRCBJV00gZHJpdmVyIChjKSAxOTk3LCAxOTk4IEhhdWtlIEZhdGguXFxuQEAgLTE0LDEzNSArMTQsMTM4IEBAXFxuICAqIDIwMDgtMTEtMDUgKGx2KSAtIGFkZCBnZXRfc3dpbV9tb2RlXFxuICAqL1xcbiBcXG4tXFx0LmVxdVxcdHdyaXRlX2RhdGEsXFx0MHgwMDAwXFxuLVxcdC5lcXVcXHR3cml0ZV9tYXJrLFxcdDB4MDIwMFxcbi1cXHQuZXF1XFx0d3JpdGVfQ1JDLFxcdDB4MDQwMFxcbi1cXHQuZXF1XFx0d3JpdGVfcGFyYW1ldGVyLDB4MDYwMFxcbi1cXHQuZXF1XFx0d3JpdGVfcGhhc2UsXFx0MHgwODAwXFxuLVxcdC5lcXVcXHR3cml0ZV9zZXR1cCxcXHQweDBhMDBcXG4tXFx0LmVxdVxcdHdyaXRlX21vZGUwLFxcdDB4MGMwMFxcbi1cXHQuZXF1XFx0d3JpdGVfbW9kZTEsXFx0MHgwZTAwXFxuLVxcdC5lcXVcXHRyZWFkX2RhdGEsXFx0MHgxMDAwXFxuLVxcdC5lcXVcXHRyZWFkX21hcmssXFx0MHgxMjAwXFxuLVxcdC5lcXVcXHRyZWFkX2Vycm9yLFxcdDB4MTQwMFxcbi1cXHQuZXF1XFx0cmVhZF9wYXJhbWV0ZXIsXFx0MHgxNjAwXFxuLVxcdC5lcXVcXHRyZWFkX3BoYXNlLFxcdDB4MTgwMFxcbi1cXHQuZXF1XFx0cmVhZF9zZXR1cCxcXHQweDFhMDBcXG4tXFx0LmVxdVxcdHJlYWRfc3RhdHVzLFxcdDB4MWMwMFxcbi1cXHQuZXF1XFx0cmVhZF9oYW5kc2hha2UsXFx0MHgxZTAwXFxuLVxcbi1cXHQuZXF1XFx0b19zaWRlLCAwXFxuLVxcdC5lcXVcXHRvX3RyYWNrLCAxXFxuLVxcdC5lcXVcXHRvX3NlY3RvciwgMlxcbi1cXHQuZXF1XFx0b19zaXplLCAzXFxuLVxcdC5lcXVcXHRvX2NyYzAsIDRcXG4tXFx0LmVxdVxcdG9fY3JjMSwgNVxcbi1cXG4tXFx0LmVxdVxcdHNlZWtfdGltZSwgMzAwMDBcXG4tXFx0LmVxdVxcdG1heF9yZXRyeSwgNDBcXG4tXFx0LmVxdVxcdHNlY3Rvcl9zaXplLCA1MTJcXG4rXFx0LmVxdVxcdC5Md3JpdGVfZGF0YSxcXHRcXHQweDAwMDBcXG4rXFx0LmVxdVxcdC5Md3JpdGVfbWFyayxcXHRcXHQweDAyMDBcXG4rXFx0LmVxdVxcdC5Md3JpdGVfQ1JDLFxcdFxcdDB4MDQwMFxcbitcXHQuZXF1XFx0Lkx3cml0ZV9wYXJhbWV0ZXIsXFx0MHgwNjAwXFxuK1xcdC5lcXVcXHQuTHdyaXRlX3BoYXNlLFxcdFxcdDB4MDgwMFxcbitcXHQuZXF1XFx0Lkx3cml0ZV9zZXR1cCxcXHRcXHQweDBhMDBcXG4rXFx0LmVxdVxcdC5Md3JpdGVfbW9kZTAsXFx0XFx0MHgwYzAwXFxuK1xcdC5lcXVcXHQuTHdyaXRlX21vZGUxLFxcdFxcdDB4MGUwMFxcbitcXHQuZXF1XFx0LkxyZWFkX2RhdGEsXFx0XFx0MHgxMDAwXFxuK1xcdC5lcXVcXHQuTHJlYWRfbWFyayxcXHRcXHQweDEyMDBcXG4rXFx0LmVxdVxcdC5McmVhZF9lcnJvcixcXHRcXHQweDE0MDBcXG4rXFx0LmVxdVxcdC5McmVhZF9wYXJhbWV0ZXIsXFx0MHgxNjAwXFxuK1xcdC5lcXVcXHQuTHJlYWRfcGhhc2UsXFx0XFx0MHgxODAwXFxuK1xcdC5lcXVcXHQuTHJlYWRfc2V0dXAsXFx0XFx0MHgxYTAwXFxuK1xcdC5lcXVcXHQuTHJlYWRfc3RhdHVzLFxcdFxcdDB4MWMwMFxcbitcXHQuZXF1XFx0LkxyZWFkX2hhbmRzaGFrZSxcXHQweDFlMDBcXG4rXFxuK1xcdC5lcXVcXHQuTG9fc2lkZSxcXHRcXHQwXFxuK1xcdC5lcXVcXHQuTG9fdHJhY2ssXFx0XFx0MVxcbitcXHQuZXF1XFx0LkxvX3NlY3RvcixcXHRcXHQyXFxuK1xcdC5lcXVcXHQuTG9fc2l6ZSxcXHRcXHQzXFxuK1xcdC5lcXVcXHQuTG9fY3JjMCxcXHRcXHQ0XFxuK1xcdC5lcXVcXHQuTG9fY3JjMSxcXHRcXHQ1XFxuK1xcbitcXHQuZXF1XFx0LkxzZWVrX3RpbWUsXFx0XFx0MzAwMDBcXG4rXFx0LmVxdVxcdC5MbWF4X3JldHJ5LFxcdFxcdDQwXFxuK1xcdC5lcXVcXHQuTHNlY3Rvcl9zaXplLFxcdFxcdDUxMlxcbitcXG4rXFx0LmVxdVxcdC5MbXJfY2xlYXJfZmlmbyxcXHQweDAxXFxuK1xcdC5lcXVcXHQuTG1yX2FjdGlvbixcXHRcXHQweDA4XFxuK1xcdC5lcXVcXHQuTG1yX3dyaXRlX2FjdGlvbixcXHQweDE4XFxuK1xcbitcXHQuZXF1XFx0Lkxocl9jcmNfZXJyb3IsXFx0XFx0MHgwMlxcbitcXHQuZXF1XFx0Lkxocl9maWZvXzJieXRlcyxcXHQweDQwXFxuK1xcdC5lcXVcXHQuTGhyX2ZpZm9fMWJ5dGUsXFx0MHg4MFxcbiBcXG4gXFx0Lmdsb2JhbCBzd2ltX3JlYWRfc2VjdG9yX2hlYWRlclxcbiBzd2ltX3JlYWRfc2VjdG9yX2hlYWRlcjpcXG4gXFx0bGlua1xcdCVhNiwgIzBcXG4tXFx0bW92ZW1sXFx0JWQxLSVkNS8lYTAtJWE0LCVzcEAtXFxuK1xcdG1vdmVtbFxcdCVkMS0lZDUvJWEwLSVhNSwlc3BALVxcbiBcXHRtb3ZlbFxcdCVhNkAoMHgwYyksICVhNFxcbi1cXHRic3JcXHRtZm1fcmVhZF9hZGRybWFya1xcbi1cXHRtb3ZlbWxcXHQlc3BAKywgJWQxLSVkNS8lYTAtJWE0XFxuK1xcdG1vdmVxXFx0Iy0xLCAlZDBcXG4rXFx0YnNyXFx0LkxtZm1fcmVhZF9hZGRybWFya1xcbitcXHRtb3ZlbWxcXHQlc3BAKywgJWQxLSVkNS8lYTAtJWE1XFxuIFxcdHVubGtcXHQlYTZcXG4gXFx0cnRzXFxuIFxcbi1zZWN0b3JfYWRkcmVzc19tYXJrOlxcbisuTHNlY3Rvcl9hZGRyZXNzX21hcms6XFxuIFxcdC5ieXRlXFx0MHhhMSwgMHhhMSwgMHhhMSwgMHhmZVxcbi1zZWN0b3JfZGF0YV9tYXJrOlxcbisuTHNlY3Rvcl9kYXRhX21hcms6XFxuIFxcdC5ieXRlXFx0MHhhMSwgMHhhMSwgMHhhMSwgMHhmYlxcbiBcXG4tbWZtX3JlYWRfYWRkcm1hcms6XFxuKy5MbWZtX3JlYWRfYWRkcm1hcms6XFxuIFxcdG1vdmVsXFx0JWE2QCgweDA4KSwgJWEzXFxuLVxcdGxlYVxcdCVhM0AocmVhZF9oYW5kc2hha2UpLCAlYTJcXG4tXFx0bGVhXFx0JWEzQChyZWFkX21hcmspLCAlYTNcXG4tXFx0bW92ZXFcXHQjLTEsICVkMFxcbi1cXHRtb3Zld1xcdCNzZWVrX3RpbWUsICVkMlxcbi1cXG4td2FpdF9oZWFkZXJfaW5pdDpcXG4tXFx0dHN0YlxcdCVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaylcXG4tXFx0bW92ZWJcXHQjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaylcXG4tXFx0bW92ZWJcXHQjMHgwMSwgJWEzQCh3cml0ZV9tb2RlMSAtIHJlYWRfbWFyaylcXG4tXFx0bW92ZWJcXHQjMHgwMSwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaylcXG4tXFx0dHN0YlxcdCVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaylcXG4tXFx0bW92ZWJcXHQjMHgwOCwgJWEzQCh3cml0ZV9tb2RlMSAtIHJlYWRfbWFyaylcXG4tXFxuLVxcdGxlYVxcdHNlY3Rvcl9hZGRyZXNzX21hcmssICVhMFxcbitcXHRsZWFcXHQlYTNAKC5McmVhZF9oYW5kc2hha2UpLCAlYTJcXG4rXFx0bGVhXFx0JWEzQCguTHJlYWRfZGF0YSksICVhNVxcbitcXHRsZWFcXHQlYTNAKC5McmVhZF9tYXJrKSwgJWEzXFxuK1xcdG1vdmV3XFx0Iy5Mc2Vla190aW1lLCAlZDJcXG4rXFxuKy5Md2FpdF9oZWFkZXJfaW5pdDpcXG4rXFx0bW92ZWJcXHQjLkxtcl93cml0ZV9hY3Rpb24sICVhM0AoLkx3cml0ZV9tb2RlMCAtIC5McmVhZF9tYXJrKVxcbitcXHRtb3ZlYlxcdCMuTG1yX2NsZWFyX2ZpZm8sICVhM0AoLkx3cml0ZV9tb2RlMSAtIC5McmVhZF9tYXJrKVxcbitcXHRtb3ZlYlxcdCMuTG1yX2NsZWFyX2ZpZm8sICVhM0AoLkx3cml0ZV9tb2RlMCAtIC5McmVhZF9tYXJrKVxcbitcXHR0c3RiXFx0JWEzQCguTHJlYWRfZXJyb3IgLSAuTHJlYWRfbWFyaylcXG4rXFx0bW92ZWJcXHQjLkxtcl9hY3Rpb24sICVhM0AoLkx3cml0ZV9tb2RlMSAtIC5McmVhZF9tYXJrKVxcbitcXG4rXFx0bGVhXFx0LkxzZWN0b3JfYWRkcmVzc19tYXJrLCAlYTBcXG4gXFx0bW92ZXFcXHQjMywgJWQxXFxuIFxcbi13YWl0X2FkZHJfbWFya19ieXRlOlxcbi1cXG4rLkx3YWl0X2FkZHJfbWFya19ieXRlOlxcbiBcXHR0c3RiXFx0JWEyQFxcbi1cXHRkYm1pXFx0JWQyLCB3YWl0X2FkZHJfbWFya19ieXRlXFxuLVxcdGJwbFxcdGhlYWRlcl9leGl0XFxuK1xcdGRibWlcXHQlZDIsIC5Md2FpdF9hZGRyX21hcmtfYnl0ZVxcbitcXHRicGxcXHQuTHNpZ25hbF9ub255YlxcbiBcXG4gXFx0bW92ZWJcXHQlYTNALCAlZDNcXG4gXFx0Y21wYlxcdCVhMEArLCAlZDNcXG4tXFx0ZGJuZVxcdCVkMSwgd2FpdF9hZGRyX21hcmtfYnl0ZVxcbi1cXHRibmVcXHR3YWl0X2hlYWRlcl9pbml0XFxuLVxcbi1cXHRtb3ZlcVxcdCNtYXhfcmV0cnksICVkMlxcbitcXHRkYm5lXFx0JWQxLCAuTHdhaXRfYWRkcl9tYXJrX2J5dGVcXG4rXFx0Ym5lXFx0Lkx3YWl0X2hlYWRlcl9pbml0XFxuIFxcbi1hbWFyazA6XFx0dHN0YlxcdCVhMkBcXG4tXFx0ZGJtaVxcdCVkMiwgYW1hcmswXFxuLVxcdGJwbFxcdHNpZ25hbF9ub255Ylxcbi1cXG4tXFx0bW92ZWJcXHQlYTNALCAlYTRAKG9fdHJhY2spXFxuLVxcbi1cXHRtb3ZlcVxcdCNtYXhfcmV0cnksICVkMlxcbi1cXG4tYW1hcmsxOlxcdHRzdGJcXHQlYTJAXFxuLVxcdGRibWlcXHQlZDIsIGFtYXJrMVxcbi1cXHRicGxcXHRzaWduYWxfbm9ueWJcXG4tXFxuLVxcdG1vdmViXFx0JWEzQCwgJWE0QChvX3NpZGUpXFxuLVxcbi1cXHRtb3ZlcVxcdCNtYXhfcmV0cnksICVkMlxcbitcXHRtb3ZlcVxcdCMuTG1heF9yZXRyeSwgJWQyXFxuKy5MYW1hcmswOlxcbitcXHR0c3RiXFx0JWEyQFxcbitcXHRkYm1pXFx0JWQyLCAuTGFtYXJrMFxcbitcXHRicGxcXHQuTHNpZ25hbF9ub255YlxcbiBcXG4tYW1hcmsyOlxcdHRzdGJcXHQlYTJAXFxuLVxcdGRibWlcXHQlZDIsIGFtYXJrMlxcbi1cXHRicGxcXHRzaWduYWxfbm9ueWJcXG4rXFx0bW92ZWJcXHQlYTVALCAlYTRAKC5Mb190cmFjaylcXG4gXFxuLVxcdG1vdmViXFx0JWEzQCwgJWE0QChvX3NlY3RvcilcXG4rXFx0bW92ZXFcXHQjLkxtYXhfcmV0cnksICVkMlxcbisuTGFtYXJrMTpcXG4rXFx0dHN0YlxcdCVhMkBcXG4rXFx0ZGJtaVxcdCVkMiwgLkxhbWFyazFcXG4rXFx0YnBsXFx0LkxzaWduYWxfbm9ueWJcXG4gXFxuLVxcdG1vdmVxXFx0I21heF9yZXRyeSwgJWQyXFxuK1xcdG1vdmViXFx0JWE1QCwgJWE0QCguTG9fc2lkZSlcXG4gXFxuLWFtYXJrMzpcXHR0c3RiXFx0JWEyQFxcbi1cXHRkYm1pXFx0JWQyLCBhbWFyazNcXG4tXFx0YnBsXFx0c2lnbmFsX25vbnliXFxuK1xcdG1vdmVxXFx0Iy5MbWF4X3JldHJ5LCAlZDJcXG4rLkxhbWFyazI6XFxuK1xcdHRzdGJcXHQlYTJAXFxuK1xcdGRibWlcXHQlZDIsIC5MYW1hcmsyXFxuK1xcdGJwbFxcdC5Mc2lnbmFsX25vbnliXFxuIFxcbi1cXHRtb3ZlYlxcdCVhM0AsICVhNEAob19zaXplKVxcbitcXHRtb3ZlYlxcdCVhNUAsICVhNEAoLkxvX3NlY3RvcilcXG4gXFxuLVxcdG1vdmVxXFx0I21heF9yZXRyeSwgJWQyXFxuK1xcdG1vdmVxXFx0Iy5MbWF4X3JldHJ5LCAlZDJcXG4rLkxhbWFyazM6XFxuK1xcdHRzdGJcXHQlYTJAXFxuK1xcdGRibWlcXHQlZDIsIC5MYW1hcmszXFxuK1xcdGJwbFxcdC5Mc2lnbmFsX25vbnliXFxuIFxcbi1jcmMwOlxcdHRzdGJcXHQlYTJAXFxuLVxcdGRibWlcXHQlZDIsIGNyYzBcXG4tXFx0YnBsXFx0c2lnbmFsX25vbnliXFxuK1xcdG1vdmViXFx0JWE1QCwgJWE0QCguTG9fc2l6ZSlcXG4gXFxuLVxcdG1vdmViXFx0JWEzQCwgJWE0QChvX2NyYzApXFxuK1xcdG1vdmVxXFx0Iy5MbWF4X3JldHJ5LCAlZDJcXG4rLkxjcmMwOlxcbitcXHR0c3RiXFx0JWEyQFxcbitcXHRkYm1pXFx0JWQyLCAuTGNyYzBcXG4rXFx0YnBsXFx0LkxzaWduYWxfbm9ueWJcXG4gXFxuLVxcdG1vdmVxXFx0I21heF9yZXRyeSwgJWQyXFxuK1xcdG1vdmViXFx0JWE1QCwgJWE0QCguTG9fY3JjMClcXG4gXFxuLWNyYzE6XFx0dHN0YlxcdCVhMkBcXG4tXFx0ZGJtaVxcdCVkMiwgY3JjMVxcbi1cXHRicGxcXHRzaWduYWxfbm9ueWJcXG4rXFx0bW92ZXFcXHQjLkxtYXhfcmV0cnksICVkMlxcbisuTGNyYzE6XFx0bW92ZWJcXHQlYTJALCAlZDVcXG4rXFx0ZGJtaVxcdCVkMiwgLkxjcmMxXFxuK1xcdGJwbFxcdC5Mc2lnbmFsX25vbnliXFxuIFxcbi1cXHRtb3ZlYlxcdCVhM0AsICVhNEAob19jcmMxKVxcbitcXHRtb3ZlYlxcdCVhNUAsICVhNEAoLkxvX2NyYzEpXFxuIFxcbi1cXHR0c3RiXFx0JWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKVxcbitcXHRhbmRiXFx0Iy5MaHJfY3JjX2Vycm9yLCAlZDVcXG4rXFx0Ym5lXFx0LkxzaWduYWxfbm9ueWJcXG4gXFxuLWhlYWRlcl9leGl0OlxcbiBcXHRtb3ZlcVxcdCMwLCAlZDBcXG4tXFx0bW92ZWJcXHQjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaylcXG4tXFx0cnRzXFxuLXNpZ25hbF9ub255YjpcXG4tXFx0bW92ZXFcXHQjLTEsICVkMFxcbi1cXHRtb3ZlYlxcdCMweDE4LCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKVxcbisuTHNpZ25hbF9ub255YjpcXG4rXFx0bW92ZWJcXHQjLkxtcl93cml0ZV9hY3Rpb24sICVhM0AoLkx3cml0ZV9tb2RlMCAtIC5McmVhZF9tYXJrKVxcbiBcXHRydHNcXG4gXFxuIFxcdC5nbG9iYWwgc3dpbV9yZWFkX3NlY3Rvcl9kYXRhXFxuQEAgLTE1MCw5NCArMTUzLDg3IEBAIHN3aW1fcmVhZF9zZWN0b3JfZGF0YTpcXG4gXFx0bGlua1xcdCVhNiwgIzBcXG4gXFx0bW92ZW1sXFx0JWQxLSVkNS8lYTAtJWE1LCVzcEAtXFxuIFxcdG1vdmVsXFx0JWE2QCgweDBjKSwgJWE0XFxuLVxcdGJzclxcdG1mbV9yZWFkX2RhdGFcXG4rXFx0bW92ZXFcXHQjLTEsICVkMFxcbitcXHRic3JcXHQuTG1mbV9yZWFkX2RhdGFcXG4gXFx0bW92ZW1sXFx0JXNwQCssICVkMS0lZDUvJWEwLSVhNVxcbiBcXHR1bmxrXFx0JWE2XFxuIFxcdHJ0c1xcbiBcXG4tbWZtX3JlYWRfZGF0YTpcXG4rLkxtZm1fcmVhZF9kYXRhOlxcbiBcXHRtb3ZlbFxcdCVhNkAoMHgwOCksICVhM1xcbi1cXHRsZWFcXHQlYTNAKHJlYWRfaGFuZHNoYWtlKSwgJWEyXFxuLVxcdGxlYVxcdCVhM0AocmVhZF9kYXRhKSwgJWE1XFxuLVxcdGxlYVxcdCVhM0AocmVhZF9tYXJrKSwgJWEzXFxuLVxcdG1vdmV3XFx0I3NlZWtfdGltZSwgJWQyXFxuLVxcbi13YWl0X2RhdGFfaW5pdDpcXG4tXFx0dHN0YlxcdCVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaylcXG4tXFx0bW92ZWJcXHQjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaylcXG4tXFx0bW92ZWJcXHQjMHgwMSwgJWEzQCh3cml0ZV9tb2RlMSAtIHJlYWRfbWFyaylcXG4tXFx0bW92ZWJcXHQjMHgwMSwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaylcXG4tXFx0dHN0YlxcdCVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaylcXG4tXFx0bW92ZWJcXHQjMHgwOCwgJWEzQCh3cml0ZV9tb2RlMSAtIHJlYWRfbWFyaylcXG4tXFxuLVxcdGxlYVxcdHNlY3Rvcl9kYXRhX21hcmssICVhMFxcbitcXHRsZWFcXHQlYTNAKC5McmVhZF9oYW5kc2hha2UpLCAlYTJcXG4rXFx0bGVhXFx0JWEzQCguTHJlYWRfZGF0YSksICVhNVxcbitcXHRsZWFcXHQlYTNAKC5McmVhZF9tYXJrKSwgJWEzXFxuK1xcdG1vdmV3XFx0Iy5Mc2Vla190aW1lLCAlZDJcXG4rXFxuKy5Md2FpdF9kYXRhX2luaXQ6XFxuK1xcdG1vdmViXFx0Iy5MbXJfd3JpdGVfYWN0aW9uLCAlYTNAKC5Md3JpdGVfbW9kZTAgLSAuTHJlYWRfbWFyaylcXG4rXFx0bW92ZWJcXHQjLkxtcl9jbGVhcl9maWZvLCAlYTNAKC5Md3JpdGVfbW9kZTEgLSAuTHJlYWRfbWFyaylcXG4rXFx0bW92ZWJcXHQjLkxtcl9jbGVhcl9maWZvLCAlYTNAKC5Md3JpdGVfbW9kZTAgLSAuTHJlYWRfbWFyaylcXG4rXFx0dHN0YlxcdCVhM0AoLkxyZWFkX2Vycm9yIC0gLkxyZWFkX21hcmspXFxuK1xcdG1vdmViXFx0Iy5MbXJfYWN0aW9uLCAlYTNAKC5Md3JpdGVfbW9kZTEgLSAuTHJlYWRfbWFyaylcXG4rXFxuK1xcdGxlYVxcdC5Mc2VjdG9yX2RhdGFfbWFyaywgJWEwXFxuIFxcdG1vdmVxXFx0IzMsICVkMVxcbiBcXG4gXFx0Lyogd2FpdCBkYXRhIGFkZHJlc3MgbWFyayAqL1xcbiBcXG4td2FpdF9kYXRhX21hcmtfYnl0ZTpcXG4tXFxuKy5Md2FpdF9kYXRhX21hcmtfYnl0ZTpcXG4gXFx0dHN0YlxcdCVhMkBcXG4tXFx0ZGJtaVxcdCVkMiwgd2FpdF9kYXRhX21hcmtfYnl0ZVxcbi1cXHRicGxcXHRkYXRhX2V4aXRcXG4rXFx0ZGJtaVxcdCVkMiwgLkx3YWl0X2RhdGFfbWFya19ieXRlXFxuK1xcdGJwbFxcdC5MZGF0YV9leGl0XFxuIFxcbiBcXHRtb3ZlYlxcdCVhM0AsICVkM1xcbiBcXHRjbXBiXFx0JWEwQCssICVkM1xcbi1cXHRkYm5lXFx0JWQxLCB3YWl0X2RhdGFfbWFya19ieXRlXFxuLVxcdGJuZVxcdHdhaXRfZGF0YV9pbml0XFxuK1xcdGRibmVcXHQlZDEsIC5Md2FpdF9kYXRhX21hcmtfYnl0ZVxcbitcXHRibmVcXHQuTHdhaXRfZGF0YV9pbml0XFxuIFxcbiBcXHQvKiByZWFkIGRhdGEgKi9cXG4gXFxuLVxcdHRzdGJcXHQlYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspXFxuLVxcbi1cXHRtb3ZlbFxcdCNzZWN0b3Jfc2l6ZS0xLCAlZDRcXHRcXHQvKiBzZWN0b3Igc2l6ZSAqL1xcbi1yZWFkX25ld19kYXRhOlxcbi1cXHRtb3Zld1xcdCNtYXhfcmV0cnksICVkMlxcbi1yZWFkX2RhdGFfbG9vcDpcXG4rXFx0bW92ZWxcXHQjLkxzZWN0b3Jfc2l6ZSAtIDEsICVkNFxcdFxcdC8qIHNlY3RvciBzaXplICovXFxuKy5McmVhZF9uZXdfZGF0YTpcXG4rXFx0bW92ZXdcXHQjLkxtYXhfcmV0cnksICVkMlxcbisuTHJlYWRfZGF0YV9sb29wOlxcbiBcXHRtb3ZlYlxcdCVhMkAsICVkNVxcbi1cXHRhbmRiXFx0IzB4YzAsICVkNVxcbi1cXHRkYm5lXFx0JWQyLCByZWFkX2RhdGFfbG9vcFxcbi1cXHRiZXFcXHRkYXRhX2V4aXRcXG4rXFx0YW5kYlxcdCMoLkxocl9maWZvXzJieXRlcyArIC5MaHJfZmlmb18xYnl0ZSksICVkNVxcbitcXHRiZXFcXHQxZlxcbitcXHRtb3Zld1xcdCMuTG1heF9yZXRyeSwgJWQyXFxuIFxcdG1vdmViXFx0JWE1QCwgJWE0QCtcXG4tXFx0YW5kYlxcdCMweDQwLCAlZDVcXG4tXFx0ZGJuZVxcdCVkNCwgcmVhZF9uZXdfZGF0YVxcbi1cXHRiZXFcXHRleGl0X2xvb3BcXG4rXFx0ZGJyYVxcdCVkNCwgMWZcXG4rXFx0YnJhXFx0LkxkYXRhX2NyYzBcXG4rMTpcXHRhbmRiXFx0Iy5MaHJfZmlmb18yYnl0ZXMsICVkNVxcbitcXHRkYm5lXFx0JWQyLCAuTHJlYWRfZGF0YV9sb29wXFxuK1xcdGJlcVxcdC5MZGF0YV9leGl0XFxuIFxcdG1vdmViXFx0JWE1QCwgJWE0QCtcXG4tXFx0ZGJyYVxcdCVkNCwgcmVhZF9uZXdfZGF0YVxcbi1leGl0X2xvb3A6XFxuK1xcdGRicmFcXHQlZDQsIC5McmVhZF9uZXdfZGF0YVxcbiBcXG4gXFx0LyogcmVhZCBDUkMgKi9cXG4gXFxuLVxcdG1vdmV3XFx0I21heF9yZXRyeSwgJWQyXFxuLWRhdGFfY3JjMDpcXG4tXFxuK1xcdG1vdmV3XFx0Iy5MbWF4X3JldHJ5LCAlZDJcXG4rLkxkYXRhX2NyYzA6XFxuIFxcdHRzdGJcXHQlYTJAXFxuLVxcdGRibWlcXHQlZDIsIGRhdGFfY3JjMFxcbi1cXHRicGxcXHRkYXRhX2V4aXRcXG4rXFx0ZGJtaVxcdCVkMiwgLkxkYXRhX2NyYzBcXG4rXFx0YnBsXFx0LkxkYXRhX2V4aXRcXG4gXFxuLVxcdG1vdmViXFx0JWEzQCwgJWQ1XFxuK1xcdG1vdmViXFx0JWE1QCwgJWQyXFxuIFxcbi1cXHRtb3ZlcVxcdCNtYXhfcmV0cnksICVkMlxcbi1cXG4tZGF0YV9jcmMxOlxcbi1cXG4tXFx0dHN0YlxcdCVhMkBcXG4tXFx0ZGJtaVxcdCVkMiwgZGF0YV9jcmMxXFxuLVxcdGJwbFxcdGRhdGFfZXhpdFxcbi1cXG4tXFx0bW92ZWJcXHQlYTNALCAlZDVcXG4rXFx0bW92ZXFcXHQjLkxtYXhfcmV0cnksICVkMlxcbisuTGRhdGFfY3JjMTpcXG4rXFx0bW92ZWJcXHQlYTJALCAlZDVcXG4rXFx0ZGJtaVxcdCVkMiwgLkxkYXRhX2NyYzFcXG4rXFx0YnBsXFx0LkxkYXRhX2V4aXRcXG4gXFxuLVxcdHRzdGJcXHQlYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspXFxuK1xcdG1vdmViXFx0JWE1QCwgJWQyXFxuIFxcbi1cXHRtb3ZlYlxcdCMweDE4LCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKVxcbitcXHRhbmRiXFx0Iy5MaHJfY3JjX2Vycm9yLCAlZDVcXG4rXFx0Ym5lXFx0LkxkYXRhX2V4aXRcXG4gXFxuIFxcdC8qIHJldHVybiBudW1iZXIgb2YgYnl0ZXMgcmVhZCAqL1xcbiBcXG4tXFx0bW92ZWxcXHQjc2VjdG9yX3NpemUsICVkMFxcbitcXHRtb3ZlbFxcdCMuTHNlY3Rvcl9zaXplLCAlZDBcXG4gXFx0YWRkd1xcdCMxLCAlZDRcXG4gXFx0c3VibFxcdCVkNCwgJWQwXFxuLVxcdHJ0c1xcbi1kYXRhX2V4aXQ6XFxuLVxcdG1vdmViXFx0IzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspXFxuLVxcdG1vdmVxXFx0Iy0xLCAlZDBcXG4rXFxuKy5MZGF0YV9leGl0OlxcbitcXHRtb3ZlYlxcdCMuTG1yX3dyaXRlX2FjdGlvbiwgJWEzQCguTHdyaXRlX21vZGUwIC0gLkxyZWFkX21hcmspXFxuIFxcdHJ0c1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNToyNjo1NS45NzIwMjYwMjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NDMzNzM3Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfU1dJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN3aW1fcXVldWVfcnFcIixcbiAgICBcImZsb3BweV9yZWFkX3NlY3RvcnNcIixcbiAgICBcInN3aW1fcmVhZF9zZWN0b3JfcmFuZ2VcIixcbiAgICBcImZsb3BweV9pb2N0bFwiLFxuICAgIFwiZmxvcHB5X29wZW5cIixcbiAgICBcImZsb3BweV9yZWxlYXNlXCIsXG4gICAgXCJzd2ltX3Byb2JlXCIsXG4gICAgXCJzd2ltX2Zsb3BweV9pbml0XCIsXG4gICAgXCJzd2ltX2FkZF9mbG9wcHlcIixcbiAgICBcInNldHVwX21lZGl1bVwiLFxuICAgIFwiZmxvcHB5X2VqZWN0XCIsXG4gICAgXCJzd2ltX3RyYWNrXCIsXG4gICAgXCJzd2ltX3NlZWtcIixcbiAgICBcInN3aW1fdHJhY2swMFwiLFxuICAgIFwic3dpbV9zdGVwXCIsXG4gICAgXCJzd2ltX21vdG9yXCIsXG4gICAgXCJzd2ltX2RyaXZlXCIsXG4gICAgXCJzd2ltX2FjdGlvblwiLFxuICAgIFwic3dpbV9zZWxlY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFNXSU0gZmxvcHB5IGNvbnRyb2xsZXIgZHJpdmVyIGZvciBtNjhrIE1hY2ludG9zaCBzeXN0ZW1zLCBpbmNsdWRpbmcgY2hhbmdlcyB0byBkZXZpY2UgcmVnaXN0cmF0aW9uLCBpbml0aWFsaXphdGlvbiwgcmVhZGluZyBzZWN0b3JzLCBhbmQgaGFuZGxpbmcgaGFyZHdhcmUgc3RhdGUuIFRoZSBkcml2ZXIgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgKHVzaW5nIHRoZSBgcTgwMGAgbWFjaGluZSkuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBibG9jayBkZXZpY2Ugb3BlcmF0aW9ucywgaW9jdGxzLCBhbmQgaGFyZHdhcmUgaW50ZXJhY3Rpb24gZnVuY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM2Y2U0Yzg3ZmJhMDkwNGJlNzkwY2JjYjBkMTJmZWNhMzVjZjUyODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAxNToyNjo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMgYi9hcmNoL202OGsvbWFjL2NvbmZpZy5jXG5pbmRleCBjMDAzM2Y4ODVlZDRmMC4uZGJhM2RlMjFjM2M0MDUgMTAwNjQ0XG4tLS0gYS9hcmNoL202OGsvbWFjL2NvbmZpZy5jXG4rKysgYi9hcmNoL202OGsvbWFjL2NvbmZpZy5jXG5AQCAtOTg0LDggKzk4NCwzNyBAQCBzdGF0aWMgaW50IF9faW5pdCBtYWNfcGxhdGZvcm1faW5pdCh2b2lkKVxuIFx0XHRcdC5zdGFydCA9IHN3aW1fYmFzZSxcbiBcdFx0XHQuZW5kICAgPSBzd2ltX2Jhc2UgKyAweDFGRkYsXG4gXHRcdH07XG4rXHRcdHVuc2lnbmVkIGludCBkYXRhID0gMDtcbitcbitcdFx0LyogTW9kZWxzIGluIHRoaXMgbGlzdCBhcmUgc3VwcG9zZWQgdG8gcnVuIEZDTEsgYXQgMzIgTUh6ICovXG4rXHRcdHN3aXRjaCAobWFjaW50b3NoX2NvbmZpZy1cdTAwM2VpZGVudCkge1xuK1x0XHRjYXNlIE1BQ19NT0RFTF9DQ0w6XG4rXHRcdGNhc2UgTUFDX01PREVMX0NDTElJOlxuK1x0XHRjYXNlIE1BQ19NT0RFTF9MQ0lJSTpcbitcdFx0Y2FzZSBNQUNfTU9ERUxfUTYwNTpcbitcdFx0Y2FzZSBNQUNfTU9ERUxfUTYwNV9BQ0M6XG4rXHRcdGNhc2UgTUFDX01PREVMX1E2MTA6XG4rXHRcdGNhc2UgTUFDX01PREVMX1E2MzA6XG4rXHRcdGNhc2UgTUFDX01PREVMX1E2NTA6XG4rXHRcdGNhc2UgTUFDX01PREVMX1E4MDA6XG4rXHRcdGNhc2UgTUFDX01PREVMX1A0NjA6XG4rXHRcdGNhc2UgTUFDX01PREVMX1A0NzU6XG4rXHRcdGNhc2UgTUFDX01PREVMX1A0NzVGOlxuK1x0XHRjYXNlIE1BQ19NT0RFTF9QNTIwOlxuK1x0XHRjYXNlIE1BQ19NT0RFTF9QNTUwOlxuK1x0XHRjYXNlIE1BQ19NT0RFTF9QNTc1OlxuK1x0XHRjYXNlIE1BQ19NT0RFTF9QNTg4OlxuK1x0XHRjYXNlIE1BQ19NT0RFTF9UVjpcbitcdFx0Y2FzZSBNQUNfTU9ERUxfQzYxMDpcbitcdFx0Y2FzZSBNQUNfTU9ERUxfQzY1MDpcbitcdFx0Y2FzZSBNQUNfTU9ERUxfUEIxOTA6XG4rXHRcdGNhc2UgTUFDX01PREVMX1BCNTIwOlxuK1x0XHRcdGRhdGEgPSAxO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4gXG4tXHRcdHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoXCJzd2ltXCIsIC0xLCBcdTAwMjZzd2ltX3JzcmMsIDEpO1xuK1x0XHRwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEoTlVMTCwgXCJzd2ltXCIsIC0xLCBcdTAwMjZzd2ltX3JzcmMsIDEsXG4rXHRcdFx0XHRcdFx0ICBcdTAwMjZkYXRhLCBzaXplb2YoZGF0YSkpO1xuIFx0fVxuIFxuIFx0LypcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N3aW0uYyBiL2RyaXZlcnMvYmxvY2svc3dpbS5jXG5pbmRleCAwY2NjMTJhNzIzODhkNS4uNDYwZjc0YzE5Y2ZkYzIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3N3aW0uY1xuKysrIGIvZHJpdmVycy9ibG9jay9zd2ltLmNcbkBAIC0yLDEyICsyLDIwIEBAXG4gLypcbiAgKiBEcml2ZXIgZm9yIFNXSU0gKFNhbmRlciBXb3ogSW50ZWdyYXRlZCBNYWNoaW5lKSBmbG9wcHkgY29udHJvbGxlclxuICAqXG4tICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDggTGF1cmVudCBWaXZpZXIgXHUwMDNjTGF1cmVudEBsdml2aWVyLmluZm9cdTAwM2VcbisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggTGF1cmVudCBWaXZpZXIgXHUwMDNjTGF1cmVudEBsdml2aWVyLmluZm9cdTAwM2VcbiAgKlxuICAqIGJhc2VkIG9uIEFsYXN0YWlyIEJyaWRnZXdhdGVyIFNXSU0gYW5hbHlzaXMsIDIwMDFcbiAgKiBiYXNlZCBvbiBTV0lNMyBkcml2ZXIgKGMpIFBhdWwgTWFja2VycmFzLCAxOTk2XG4gICogYmFzZWQgb24gbmV0QlNEIElXTSBkcml2ZXIgKGMpIDE5OTcsIDE5OTggSGF1a2UgRmF0aC5cbiAgKlxuKyAqIFNlZSBhbHNvOlxuKyAqIEluc2lkZSBNYWNpbnRvc2gsIHZvbC4gSUlJLCBjaC4gMlxuKyAqIGh0dHBzOi8vYXJjaGl2ZS5vcmcvZGV0YWlscy9TV0lNRGVzaWduRG9jc1xuKyAqIE5FQyB1UEQ3MjA3MCBGREMgZGF0YXNoZWV0XG4rICogbWtMaW51eCBzb3VyY2UgZmlsZSBzd2ltaWlpY29tbW9uaGFsLmNcbisgKiBodHRwOi8vd3d3Lm1hYy5saW51eC1tNjhrLm9yZy9kZXZlbC9pd20ucGhwLmh0bWxcbisgKiBNQU1FIHNvdXJjZSBmaWxlIHNvbnlkcml2LmNwcFxuKyAqXG4gICogMjAwNC0wOC0yMSAobHYpIC0gSW5pdGlhbCBpbXBsZW1lbnRhdGlvblxuICAqIDIwMDgtMTAtMzAgKGx2KSAtIFBvcnQgdG8gMi42XG4gICovXG5AQCAtMTksNiArMjcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21ham9yLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaGRyZWcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbkBAIC02MCw3ICs2OSw3IEBAIHN0cnVjdCBzd2ltIHtcbiBcdFJFRyhyZWFkX2hhbmRzaGFrZSlcbiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpO1xuIFxuLSNkZWZpbmUgc3dpbV93cml0ZShiYXNlLCByZWcsIHYpIFx0b3V0XzgoXHUwMDI2KGJhc2UpLVx1MDAzZXdyaXRlXyMjcmVnLCAodikpXG4rI2RlZmluZSBzd2ltX3dyaXRlKGJhc2UsIHJlZywgdilcdG91dF84KFx1MDAyNihiYXNlKS1cdTAwM2V3cml0ZV8jI3JlZywgKHYpKVxuICNkZWZpbmUgc3dpbV9yZWFkKGJhc2UsIHJlZylcdFx0aW5fOChcdTAwMjYoYmFzZSktXHUwMDNlcmVhZF8jI3JlZylcbiBcbiAvKiBJV00gcmVnaXN0ZXJzICovXG5AQCAtODQsNjIgKzkzLDUzIEBAIHN0cnVjdCBpd20ge1xuIFx0UkVHKHE3SClcbiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpO1xuIFxuLSNkZWZpbmUgaXdtX3dyaXRlKGJhc2UsIHJlZywgdikgXHRvdXRfOChcdTAwMjYoYmFzZSktXHUwMDNlcmVnLCAodikpXG4rI2RlZmluZSBpd21fd3JpdGUoYmFzZSwgcmVnLCB2KVx0XHRvdXRfOChcdTAwMjYoYmFzZSktXHUwMDNlcmVnLCAodikpXG4gI2RlZmluZSBpd21fcmVhZChiYXNlLCByZWcpXHRcdGluXzgoXHUwMDI2KGJhc2UpLVx1MDAzZXJlZylcbiBcbiAvKiBiaXRzIGluIHBoYXNlIHJlZ2lzdGVyICovXG4gXG4tI2RlZmluZSBTRUVLX1BPU0lUSVZFXHQweDA3MFxuLSNkZWZpbmUgU0VFS19ORUdBVElWRVx0MHgwNzRcbi0jZGVmaW5lIFNURVBcdFx0MHgwNzFcbi0jZGVmaW5lIE1PVE9SX09OXHQweDA3MlxuLSNkZWZpbmUgTU9UT1JfT0ZGXHQweDA3NlxuLSNkZWZpbmUgSU5ERVhcdFx0MHgwNzNcbi0jZGVmaW5lIEVKRUNUXHRcdDB4MDc3XG4tI2RlZmluZSBTRVRNRk1cdFx0MHgxNzFcbi0jZGVmaW5lIFNFVEdDUlx0XHQweDE3NVxuKyNkZWZpbmUgU0VFS19QT1NJVElWRVx0MHgwRjBcbisjZGVmaW5lIFNFRUtfTkVHQVRJVkVcdDB4MEY0XG4rI2RlZmluZSBTVEVQXHRcdDB4MEYxXG4rI2RlZmluZSBNT1RPUl9PTlx0MHgwRjJcbisjZGVmaW5lIE1PVE9SX09GRlx0MHgwRjZcbisjZGVmaW5lIElOREVYXHRcdDB4MEYzXG4rI2RlZmluZSBFSkVDVFx0XHQweDBGN1xuKyNkZWZpbmUgU0VUTUZNXHRcdDB4MUYxXG4rI2RlZmluZSBTRVRHQ1JcdFx0MHgxRjVcbiBcbi0jZGVmaW5lIFJFTEFYXHRcdDB4MDMzXG4tI2RlZmluZSBMU1RSQlx0XHQweDAwOFxuKyNkZWZpbmUgUkVMQVhcdFx0MHgwRjNcbisjZGVmaW5lIExTVFJCXHRcdDB4MEY4XG4gXG4tI2RlZmluZSBDQV9NQVNLXHRcdDB4MDc3XG4rI2RlZmluZSBDQV9NQVNLXHRcdDB4MEY3XG4rI2RlZmluZSBTRUxfTUFTS1x0MHgxMDBcbiBcbiAvKiBTZWxlY3QgdmFsdWVzIGZvciBzd2ltX3NlbGVjdCBhbmQgc3dpbV9yZWFkYml0ICovXG4gXG4tI2RlZmluZSBSRUFEX0RBVEFfMFx0MHgwNzRcbi0jZGVmaW5lIE9ORU1FR19EUklWRVx0MHgwNzVcbi0jZGVmaW5lIFNJTkdMRV9TSURFRFx0MHgwNzZcbi0jZGVmaW5lIERSSVZFX1BSRVNFTlRcdDB4MDc3XG4tI2RlZmluZSBESVNLX0lOXHRcdDB4MTcwXG4tI2RlZmluZSBXUklURV9QUk9UXHQweDE3MVxuLSNkZWZpbmUgVFJBQ0tfWkVST1x0MHgxNzJcbi0jZGVmaW5lIFRBQ0hPXHRcdDB4MTczXG4tI2RlZmluZSBSRUFEX0RBVEFfMVx0MHgxNzRcbi0jZGVmaW5lIEdDUl9NT0RFXHQweDE3NVxuLSNkZWZpbmUgU0VFS19DT01QTEVURVx0MHgxNzZcbi0jZGVmaW5lIFRXT01FR19NRURJQVx0MHgxNzdcbisjZGVmaW5lIFNURVBQSU5HXHQweDBGMVxuKyNkZWZpbmUgUkVBRF9EQVRBXzBcdDB4MEY0XG4rI2RlZmluZSBPTkVNRUdfRFJJVkVcdDB4MEY1XG4rI2RlZmluZSBTSU5HTEVfU0lERURcdDB4MEY2XG4rI2RlZmluZSBEUklWRV9QUkVTRU5UXHQweDBGN1xuKyNkZWZpbmUgRElTS19JTlx0XHQweDFGMFxuKyNkZWZpbmUgV1JJVEVfUFJPVFx0MHgxRjFcbisjZGVmaW5lIFRSQUNLX1pFUk9cdDB4MUYyXG4rI2RlZmluZSBUQUNIT1x0XHQweDFGM1xuKyNkZWZpbmUgUkVBRF9EQVRBXzFcdDB4MUY0XG4rI2RlZmluZSBHQ1JfTU9ERVx0MHgxRjVcbisjZGVmaW5lIFJFQURZXHRcdDB4MUY2XG4rI2RlZmluZSBUV09NRUdfTUVESUFcdDB4MUY3XG4gXG4gLyogQml0cyBpbiBoYW5kc2hha2UgcmVnaXN0ZXIgKi9cbiBcbi0jZGVmaW5lIE1BUktfQllURVx0MHgwMVxuLSNkZWZpbmUgQ1JDX1pFUk9cdDB4MDJcbi0jZGVmaW5lIFJEREFUQVx0XHQweDA0XG4gI2RlZmluZSBTRU5TRVx0XHQweDA4XG4tI2RlZmluZSBNT1RFTlx0XHQweDEwXG4tI2RlZmluZSBFUlJPUlx0XHQweDIwXG4gI2RlZmluZSBEQVQyQllURVx0MHg0MFxuICNkZWZpbmUgREFUMUJZVEVcdDB4ODBcbiBcbiAvKiBiaXRzIGluIHNldHVwIHJlZ2lzdGVyICovXG4gXG4tI2RlZmluZSBTX0lOVl9XREFUQVx0MHgwMVxuLSNkZWZpbmUgU18zXzVfU0VMRUNUXHQweDAyXG4tI2RlZmluZSBTX0dDUlx0XHQweDA0XG4gI2RlZmluZSBTX0ZDTEtfRElWMlx0MHgwOFxuLSNkZWZpbmUgU19FUlJPUl9DT1JSXHQweDEwXG4gI2RlZmluZSBTX0lCTV9EUklWRVx0MHgyMFxuLSNkZWZpbmUgU19HQ1JfV1JJVEVcdDB4NDBcbi0jZGVmaW5lIFNfVElNRU9VVFx0MHg4MFxuIFxuIC8qIGJpdHMgaW4gbW9kZSByZWdpc3RlciAqL1xuIFxuQEAgLTE0OCwxNCArMTQ4LDEzIEBAIHN0cnVjdCBpd20ge1xuICNkZWZpbmUgRU5CTDJcdFx0MHgwNFxuICNkZWZpbmUgQUNUSU9OXHRcdDB4MDhcbiAjZGVmaW5lIFdSSVRFX01PREVcdDB4MTBcbi0jZGVmaW5lIEhFRFNFTFx0XHQweDIwXG4rI2RlZmluZSBJU01fU0VMRUNUXHQweDQwXG4gI2RlZmluZSBNT1RPTlx0XHQweDgwXG4gXG4tLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi1cbiBlbnVtIGRyaXZlX2xvY2F0aW9uIHtcbi1cdElOVEVSTkFMX0RSSVZFID0gMHgwMixcbi1cdEVYVEVSTkFMX0RSSVZFID0gMHgwNCxcbitcdE5PX0RSSVZFID0gMCxcbitcdElOVEVSTkFMX0RSSVZFID0gQklUKDEpLFxuK1x0RVhURVJOQUxfRFJJVkUgPSBCSVQoMiksXG4gfTtcbiBcbiBlbnVtIG1lZGlhX3R5cGUge1xuQEAgLTE2OCwyMyArMTY3LDIzIEBAIHN0cnVjdCBmbG9wcHlfc3RhdGUge1xuIFx0LyogcGh5c2ljYWwgcHJvcGVydGllcyAqL1xuIFxuIFx0ZW51bSBkcml2ZV9sb2NhdGlvbiBsb2NhdGlvbjtcdC8qIGludGVybmFsIG9yIGV4dGVybmFsIGRyaXZlICovXG4tXHRpbnRcdFx0IGhlYWRfbnVtYmVyO1x0Lyogc2luZ2xlLSBvciBkb3VibGUtc2lkZWQgZHJpdmUgKi9cbitcdGludCBoZWFkX251bWJlcjtcdFx0Lyogc2luZ2xlLSBvciBkb3VibGUtc2lkZWQgZHJpdmUgKi9cbiBcbiBcdC8qIG1lZGlhICovXG4gXG4tXHRpbnRcdFx0IGRpc2tfaW47XG4tXHRpbnRcdFx0IGVqZWN0ZWQ7XG4tXHRlbnVtIG1lZGlhX3R5cGVcdCB0eXBlO1xuLVx0aW50XHRcdCB3cml0ZV9wcm90ZWN0ZWQ7XG4rXHRpbnQgZGlza19pbjtcbitcdGludCBlamVjdGVkO1xuK1x0ZW51bSBtZWRpYV90eXBlIHR5cGU7XG4rXHRpbnQgd3JpdGVfcHJvdGVjdGVkO1xuIFxuLVx0aW50XHRcdCB0b3RhbF9zZWNzO1xuLVx0aW50XHRcdCBzZWNwZXJjeWw7XG4tXHRpbnRcdFx0IHNlY3BlcnRyYWNrO1xuK1x0dW5zaWduZWQgaW50IHRvdGFsX3NlY3M7XG4rXHR1bnNpZ25lZCBpbnQgc2VjcGVyY3lsO1xuK1x0dW5zaWduZWQgaW50IHNlY3BlcnRyYWNrO1xuIFxuIFx0LyogaW4tdXNlIGluZm9ybWF0aW9uICovXG4gXG4tXHRpbnRcdFx0dHJhY2s7XG4tXHRpbnRcdFx0cmVmX2NvdW50O1xuK1x0aW50IHRyYWNrO1xuK1x0aW50IHJlZl9jb3VudDtcbiBcdGJvb2wgcmVnaXN0ZXJlZDtcbiBcbiBcdHN0cnVjdCBnZW5kaXNrICpkaXNrO1xuQEAgLTIwOSw3ICsyMDgsNiBAQCBlbnVtIGhlYWQge1xuIFxuIHN0cnVjdCBzd2ltX3ByaXYge1xuIFx0c3RydWN0IHN3aW0gX19pb21lbSAqYmFzZTtcbi1cdHNwaW5sb2NrX3QgbG9jaztcbiBcdGludCBmbG9wcHlfY291bnQ7XG4gXHRzdHJ1Y3QgZmxvcHB5X3N0YXRlIHVuaXRbRkRfTUFYX1VOSVRdO1xuIH07XG5AQCAtMjIwLDIwICsyMTgsMjQgQEAgZXh0ZXJuIGludCBzd2ltX3JlYWRfc2VjdG9yX2RhdGEoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSxcbiBcdFx0XHRcdCB1bnNpZ25lZCBjaGFyICpkYXRhKTtcbiBcbiBzdGF0aWMgREVGSU5FX01VVEVYKHN3aW1fbXV0ZXgpO1xuLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc3dpbV9tb2RlKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBlbmFibGUpXG4rXG4rc3RhdGljIHZvaWQgc2V0X3N3aW1fbW9kZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgZW5hYmxlKVxuIHtcbi1cdHN0cnVjdCBpd20gX19pb21lbSAqaXdtX2Jhc2U7XG4rXHRzdHJ1Y3QgaXdtIF9faW9tZW0gKml3bV9iYXNlID0gKHN0cnVjdCBpd20gX19pb21lbSAqKWJhc2U7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0aWYgKCFlbmFibGUpIHtcbi1cdFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgMHhmOCk7XG4rXHRcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIEFDVElPTik7XG4rXHRcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIEVOQkwxIHwgRU5CTDIgfCBNT1RPTik7XG4rXHRcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIElTTV9TRUxFQ1QpO1xuK1x0XHRpd21fcmVhZChpd21fYmFzZSwgcTdMKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0aXdtX2Jhc2UgPSAoc3RydWN0IGl3bSBfX2lvbWVtICopYmFzZTtcbiBcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiBcbiBcdGl3bV9yZWFkKGl3bV9iYXNlLCBxN0wpO1xuK1x0aXdtX3JlYWQoaXdtX2Jhc2UsIHE2TCk7XG4gXHRpd21fcmVhZChpd21fYmFzZSwgbXRyT2ZmKTtcbiBcdGl3bV9yZWFkKGl3bV9iYXNlLCBxNkgpO1xuIFxuQEAgLTI0NSw3ICsyNDcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3N3aW1fbW9kZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgZW5hYmxlKVxuIFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBnZXRfc3dpbV9tb2RlKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpXG4rc3RhdGljIGludCBnZXRfc3dpbV9tb2RlKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbkBAIC0yNzEsNyArMjczLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHN3aW1fc2VsZWN0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBzZWwpXG4ge1xuIFx0c3dpbV93cml0ZShiYXNlLCBwaGFzZSwgUkVMQVgpO1xuIFxuLVx0dmlhMV9zZXRfaGVhZChzZWwgXHUwMDI2IDB4MTAwKTtcbitcdHZpYTFfc2V0X2hlYWQoc2VsIFx1MDAyNiBTRUxfTUFTSyk7XG4gXG4gXHRzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCBzZWwgXHUwMDI2IENBX01BU0spO1xuIH1cbkBAIC0yODQsMTUgKzI4NiwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9hY3Rpb24oc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IGFjdGlvbilcbiBcbiBcdHN3aW1fc2VsZWN0KGJhc2UsIGFjdGlvbik7XG4gXHR1ZGVsYXkoMSk7XG4tXHRzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCAoTFNUUkJcdTAwM2NcdTAwM2M0KSB8IExTVFJCKTtcbi1cdHVkZWxheSgxKTtcbi1cdHN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIChMU1RSQlx1MDAzY1x1MDAzYzQpIHwgKCh+TFNUUkIpIFx1MDAyNiAweDBGKSk7XG4rXHRzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCBhY3Rpb24gfCBMU1RSQik7XG4rXHR1ZGVsYXkoMik7XG4rXHRzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCBhY3Rpb24pO1xuIFx0dWRlbGF5KDEpO1xuIFxuIFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzd2ltX3JlYWRiaXQoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IGJpdClcbitzdGF0aWMgaW5saW5lIGJvb2wgc3dpbV9yZWFkYml0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBiaXQpXG4ge1xuIFx0aW50IHN0YXQ7XG4gXG5AQCAtMzA1LDEyNSArMzA3LDExOSBAQCBzdGF0aWMgaW5saW5lIGludCBzd2ltX3JlYWRiaXQoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgaW50IGJpdClcbiBcdHJldHVybiAoc3RhdCBcdTAwMjYgU0VOU0UpID09IDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX2RyaXZlKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsXG4rI2RlZmluZSBzd2ltX3JlYWRiaXRfdGltZW91dChiYXNlLCBiaXQsIHZhbCwgdGltZW91dF91cykgXFxcbitcdHBvbGxfdGltZW91dF91cygsIHN3aW1fcmVhZGJpdChiYXNlLCBiaXQpID09IHZhbCwgMTAwMCwgdGltZW91dF91cywgZmFsc2UpXG4rXG4rI2RlZmluZSBzd2ltX3JlYWRiaXRfdGltZW91dF9hdG9taWMoYmFzZSwgYml0LCB2YWwsIHRpbWVvdXRfdXMpIFxcXG4rXHRwb2xsX3RpbWVvdXRfdXNfYXRvbWljKCwgc3dpbV9yZWFkYml0KGJhc2UsIGJpdCkgPT0gdmFsLCAxLCB0aW1lb3V0X3VzLCBmYWxzZSlcbitcbisjZGVmaW5lIHN3aW1fUkVBRFlfdGltZW91dChiYXNlKSBcXFxuKyh7IFxcXG4rXHRpbnQgcmV0ID0gc3dpbV9yZWFkYml0X3RpbWVvdXQoYmFzZSwgUkVBRFksIHRydWUsIDEwMDAgKiAxMDAwKTsgXFxcbitcdGlmIChyZXQpIFxcXG4rXHRcdHByaW50ayhLRVJOX0RFQlVHIFwiJXM6IGRyaXZlIG5vdCByZWFkeVxcblwiLCBfX2Z1bmNfXyk7IFxcXG4rXHRyZXQ7IFxcXG4rfSlcbitcbitzdGF0aWMgdm9pZCBzd2ltX2RyaXZlKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsXG4gXHRcdFx0ICAgICAgZW51bSBkcml2ZV9sb2NhdGlvbiBsb2NhdGlvbilcbiB7XG4gXHRpZiAobG9jYXRpb24gPT0gSU5URVJOQUxfRFJJVkUpIHtcbiBcdFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgRVhURVJOQUxfRFJJVkUpOyAvKiBjbGVhciBkcml2ZSAxIGJpdCAqL1xuIFx0XHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUxLCBJTlRFUk5BTF9EUklWRSk7IC8qIHNldCBkcml2ZSAwIGJpdCAqL1xuK1x0XHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUxLCBNT1RPTik7XG4gXHR9IGVsc2UgaWYgKGxvY2F0aW9uID09IEVYVEVSTkFMX0RSSVZFKSB7XG4gXHRcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIElOVEVSTkFMX0RSSVZFKTsgLyogY2xlYXIgZHJpdmUgMCBiaXQgKi9cbiBcdFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMSwgRVhURVJOQUxfRFJJVkUpOyAvKiBzZXQgZHJpdmUgMSBiaXQgKi9cbitcdFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMSwgTU9UT04pO1xuK1x0fSBlbHNlIHtcbitcdFx0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgSU5URVJOQUxfRFJJVkUpO1xuK1x0XHRzd2ltX3dyaXRlKGJhc2UsIG1vZGUwLCBFWFRFUk5BTF9EUklWRSk7XG4rXHRcdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIE1PVE9OKTtcbiBcdH1cbitcdHVkZWxheSgxKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHN3aW1fbW90b3Ioc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSxcbi1cdFx0XHQgICAgICBlbnVtIG1vdG9yX2FjdGlvbiBhY3Rpb24pXG4rc3RhdGljIHZvaWQgc3dpbV9tb3RvcihzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLFxuK1x0XHQgICAgICAgZW51bSBtb3Rvcl9hY3Rpb24gYWN0aW9uKVxuIHtcbiBcdGlmIChhY3Rpb24gPT0gT04pIHtcbi1cdFx0aW50IGk7XG4tXG4gXHRcdHN3aW1fYWN0aW9uKGJhc2UsIE1PVE9SX09OKTtcbi1cbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgMipIWjsgaSsrKSB7XG4tXHRcdFx0c3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpO1xuLVx0XHRcdGlmIChzd2ltX3JlYWRiaXQoYmFzZSwgTU9UT1JfT04pKVxuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcbi1cdFx0XHRzY2hlZHVsZV90aW1lb3V0KDEpO1xuLVx0XHR9XG4rXHRcdHN3aW1fcmVhZGJpdF90aW1lb3V0KGJhc2UsIE1PVE9SX09OLCB0cnVlLCAyMDAwICogMTAwMCk7XG4gXHR9IGVsc2UgaWYgKGFjdGlvbiA9PSBPRkYpIHtcbiBcdFx0c3dpbV9hY3Rpb24oYmFzZSwgTU9UT1JfT0ZGKTtcbi1cdFx0c3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpO1xuK1x0XHRzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCBSRUxBWCk7XG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX2VqZWN0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpXG4rc3RhdGljIHZvaWQgc3dpbV9lamVjdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKVxuIHtcbi1cdGludCBpO1xuLVxuIFx0c3dpbV9hY3Rpb24oYmFzZSwgRUpFQ1QpO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgMipIWjsgaSsrKSB7XG4tXHRcdHN3aW1fc2VsZWN0KGJhc2UsIFJFTEFYKTtcbi1cdFx0aWYgKCFzd2ltX3JlYWRiaXQoYmFzZSwgRElTS19JTikpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XG4tXHRcdHNjaGVkdWxlX3RpbWVvdXQoMSk7XG4tXHR9XG4tXHRzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7XG4rXHRzd2ltX3JlYWRiaXRfdGltZW91dChiYXNlLCBESVNLX0lOLCBmYWxzZSwgMjAwMCAqIDEwMDApO1xuK1x0bXNsZWVwKDEpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9oZWFkKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGVudW0gaGVhZCBoZWFkKVxuIHtcbi1cdC8qIHdhaXQgZHJpdmUgaXMgcmVhZHkgKi9cbi1cbiBcdGlmIChoZWFkID09IFVQUEVSX0hFQUQpXG4gXHRcdHN3aW1fc2VsZWN0KGJhc2UsIFJFQURfREFUQV8xKTtcbiBcdGVsc2UgaWYgKGhlYWQgPT0gTE9XRVJfSEVBRClcbiBcdFx0c3dpbV9zZWxlY3QoYmFzZSwgUkVBRF9EQVRBXzApO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzd2ltX3N0ZXAoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSlcbitzdGF0aWMgaW50IHN3aW1fc3RlcChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKVxuIHtcbi1cdGludCB3YWl0O1xuLVxuIFx0c3dpbV9hY3Rpb24oYmFzZSwgU1RFUCk7XG4tXG4tXHRmb3IgKHdhaXQgPSAwOyB3YWl0IFx1MDAzYyBIWjsgd2FpdCsrKSB7XG4tXG4tXHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XG4tXHRcdHNjaGVkdWxlX3RpbWVvdXQoMSk7XG4tXG4tXHRcdHN3aW1fc2VsZWN0KGJhc2UsIFJFTEFYKTtcbi1cdFx0aWYgKCFzd2ltX3JlYWRiaXQoYmFzZSwgU1RFUCkpXG4tXHRcdFx0cmV0dXJuIDA7XG4tXHR9XG4tXHRyZXR1cm4gLTE7XG4rXHR1ZGVsYXkoMTUwKTtcbitcdHJldHVybiBzd2ltX3JlYWRiaXRfdGltZW91dF9hdG9taWMoYmFzZSwgU1RFUFBJTkcsIGZhbHNlLCAyMCAqIDEwMDApO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzd2ltX3RyYWNrMDAoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSlcbitzdGF0aWMgaW50IHN3aW1fdHJhY2swMChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKVxuIHtcbiBcdGludCB0cnk7XG4gXG4gXHRzd2ltX2FjdGlvbihiYXNlLCBTRUVLX05FR0FUSVZFKTtcbiBcbiBcdGZvciAodHJ5ID0gMDsgdHJ5IFx1MDAzYyAxMDA7IHRyeSsrKSB7XG4rXHRcdG1zbGVlcCgzKTtcbiBcbi1cdFx0c3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpO1xuIFx0XHRpZiAoc3dpbV9yZWFkYml0KGJhc2UsIFRSQUNLX1pFUk8pKVxuLVx0XHRcdGJyZWFrO1xuK1x0XHRcdHJldHVybiAwO1xuIFxuIFx0XHRpZiAoc3dpbV9zdGVwKGJhc2UpKVxuLVx0XHRcdHJldHVybiAtMTtcbitcdFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdGlmIChzd2ltX3JlYWRiaXQoYmFzZSwgVFJBQ0tfWkVSTykpXG4tXHRcdHJldHVybiAwO1xuLVxuK1x0cHJfZXJyKFwic3dpbTogdHJhY2sgemVybyByZWNhbGlicmF0aW9uIGZhaWxlZFxcblwiKTtcbiBcdHJldHVybiAtMTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc3dpbV9zZWVrKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBzdGVwKVxuK3N0YXRpYyBpbnQgc3dpbV9zZWVrKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBzdGVwKVxuIHtcbi1cdGlmIChzdGVwID09IDApXG4tXHRcdHJldHVybiAwO1xuLVxuIFx0aWYgKHN0ZXAgXHUwMDNjIDApIHtcbiBcdFx0c3dpbV9hY3Rpb24oYmFzZSwgU0VFS19ORUdBVElWRSk7XG4gXHRcdHN0ZXAgPSAtc3RlcDtcbi1cdH0gZWxzZVxuK1x0fSBlbHNlIGlmIChzdGVwIFx1MDAzZSAwKVxuIFx0XHRzd2ltX2FjdGlvbihiYXNlLCBTRUVLX1BPU0lUSVZFKTtcbitcdHVkZWxheSgxKTtcbitcbitcdHN3aW1fUkVBRFlfdGltZW91dChiYXNlKTtcbitcbitcdGlmIChzdGVwID09IDApXG4rXHRcdHJldHVybiAwO1xuIFxuLVx0Zm9yICggOyBzdGVwIFx1MDAzZSAwOyBzdGVwLS0pIHtcbitcdGZvciAoOyBzdGVwIFx1MDAzZSAwOyBzdGVwLS0pIHtcbiBcdFx0aWYgKHN3aW1fc3RlcChiYXNlKSlcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG4rXHRtc2xlZXAoMzApO1xuK1x0c3dpbV9SRUFEWV90aW1lb3V0KGJhc2UpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHN3aW1fdHJhY2soc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsICBpbnQgdHJhY2spXG4rc3RhdGljIGludCBzd2ltX3RyYWNrKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzLCBpbnQgdHJhY2spXG4ge1xuIFx0c3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLVx1MDAzZXN3ZC1cdTAwM2ViYXNlO1xuIFx0aW50IHJldDtcbkBAIC00NDUsOCArNDQxLDEwIEBAIHN0YXRpYyBpbnQgZmxvcHB5X2VqZWN0KHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzKVxuIFx0c3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLVx1MDAzZXN3ZC1cdTAwM2ViYXNlO1xuIFxuIFx0c3dpbV9kcml2ZShiYXNlLCBmcy1cdTAwM2Vsb2NhdGlvbik7XG4rXHRzd2ltX3RyYWNrKGZzLCAxKTtcbiBcdHN3aW1fbW90b3IoYmFzZSwgT0ZGKTtcbiBcdHN3aW1fZWplY3QoYmFzZSk7XG4rXHRzd2ltX2RyaXZlKGJhc2UsIE5PX0RSSVZFKTtcbiBcbiBcdGZzLVx1MDAzZWRpc2tfaW4gPSAwO1xuIFx0ZnMtXHUwMDNlZWplY3RlZCA9IDE7XG5AQCAtNDU0LDcwICs0NTIsODEgQEAgc3RhdGljIGludCBmbG9wcHlfZWplY3Qoc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc3dpbV9yZWFkX3NlY3RvcihzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyxcbi1cdFx0XHRcdCAgIGludCBzaWRlLCBpbnQgdHJhY2ssXG4tXHRcdFx0XHQgICBpbnQgc2VjdG9yLCB1bnNpZ25lZCBjaGFyICpidWZmZXIpXG4rc3RhdGljIHVuc2lnbmVkIGludCBzd2ltX3JlYWRfc2VjdG9yX3JhbmdlKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzLFxuK1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgc2lkZSwgdW5zaWduZWQgaW50IHRyYWNrLFxuK1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBjb3VudCxcbitcdFx0XHRcdFx0dW5zaWduZWQgY2hhciAqYnVmZmVyKVxuIHtcbiBcdHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy1cdTAwM2Vzd2QtXHUwMDNlYmFzZTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRzdHJ1Y3Qgc2VjdG9yX2hlYWRlciBoZWFkZXI7XG4tXHRpbnQgcmV0ID0gLTE7XG4tXHRzaG9ydCBpO1xuLVxuLVx0c3dpbV90cmFjayhmcywgdHJhY2spO1xuK1x0aW50IGksIGJpdHMgPSAwO1xuIFxuLVx0c3dpbV93cml0ZShiYXNlLCBtb2RlMSwgTU9UT04pO1xuLVx0c3dpbV9oZWFkKGJhc2UsIHNpZGUpO1xuLVx0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgc2lkZSk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxODsgaSsrKSB7IC8qIEEgdHJhY2sgaGFzIGF0IG1vc3QgMTggc2VjdG9ycyAqL1xuK1x0XHRpZiAoaSBcdTAwM2U9IGNvdW50KVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRiaXRzIHw9IEJJVChpKTtcbitcdH1cbiBcbiBcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDM2OyBpKyspIHtcbi1cdFx0cmV0ID0gc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXIoYmFzZSwgXHUwMDI2aGVhZGVyKTtcbi1cdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IChoZWFkZXIuc2VjdG9yID09IHNlY3RvcikpIHtcbi1cdFx0XHQvKiBmb3VuZCAqL1xuLVxuLVx0XHRcdHJldCA9IHN3aW1fcmVhZF9zZWN0b3JfZGF0YShiYXNlLCBidWZmZXIpO1xuK1x0XHRpZiAoYml0cyA9PSAwKSAvKiBBbGwgY291bnQgc2VjdG9ycyB3ZXJlIHJlYWQgb2sgKi9cbiBcdFx0XHRicmVhaztcbitcbitcdFx0aWYgKHN3aW1fcmVhZF9zZWN0b3JfaGVhZGVyKGJhc2UsIFx1MDAyNmhlYWRlcikgfHxcbitcdFx0ICAgIHN3aW1fcmVhZChiYXNlLCBlcnJvcikgfHwgaGVhZGVyLnRyYWNrICE9IHRyYWNrIHx8XG4rXHRcdCAgICBoZWFkZXIuc2lkZSAhPSBzaWRlIHx8IGhlYWRlci5zaXplICE9IDIpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlmIChoZWFkZXIuc2VjdG9yIFx1MDAzZT0gc3RhcnQgXHUwMDI2XHUwMDI2IGhlYWRlci5zZWN0b3IgXHUwMDNjIHN0YXJ0ICsgY291bnQpIHtcbitcdFx0XHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gaGVhZGVyLnNlY3RvciAtIHN0YXJ0O1xuK1x0XHRcdGludCByZXQ7XG4rXG4rXHRcdFx0aWYgKChiaXRzIFx1MDAyNiBCSVQob2Zmc2V0KSkgPT0gMClcbitcdFx0XHRcdGNvbnRpbnVlOyAvKiBUaGlzIHNlY3RvciB3YXMgYWxyZWFkeSByZWFkIG9rICovXG4rXG4rXHRcdFx0cmV0ID0gc3dpbV9yZWFkX3NlY3Rvcl9kYXRhKGJhc2UsIGJ1ZmZlciArIDUxMiAqIG9mZnNldCk7XG4rXHRcdFx0aWYgKHJldCA9PSA1MTIgXHUwMDI2XHUwMDI2IHN3aW1fcmVhZChiYXNlLCBlcnJvcikgPT0gMClcbitcdFx0XHRcdGJpdHMgXHUwMDI2PSB+QklUKG9mZnNldCk7XG4gXHRcdH1cbiBcdH1cbiBcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiBcbi1cdHN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIE1PVE9OKTtcbi1cbi1cdGlmICgoaGVhZGVyLnNpZGUgIT0gc2lkZSkgIHx8IChoZWFkZXIudHJhY2sgIT0gdHJhY2spIHx8XG4tXHQgICAgIChoZWFkZXIuc2VjdG9yICE9IHNlY3RvcikpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHJldDtcbitcdHJldHVybiBiaXRzID8gZmZzKGJpdHMpIC0gMSA6IGNvdW50OyAvKiBOby4gb2YgY29udGlndW91cyBvayBzZWN0b3JzICovXG4gfVxuIFxuIHN0YXRpYyBibGtfc3RhdHVzX3QgZmxvcHB5X3JlYWRfc2VjdG9ycyhzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyxcbi1cdFx0XHQgICAgICAgaW50IHJlcV9zZWN0b3IsIGludCBzZWN0b3JzX25iLFxuLVx0XHRcdCAgICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIpXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGludCByZXFfc2VjdG9yLFxuK1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgc2VjdG9yc19uYixcbitcdFx0XHRcdFx0dW5zaWduZWQgY2hhciAqYnVmZmVyKVxuIHtcbiBcdHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy1cdTAwM2Vzd2QtXHUwMDNlYmFzZTtcbi1cdGludCByZXQ7XG4tXHRpbnQgc2lkZSwgdHJhY2ssIHNlY3Rvcjtcbi1cdGludCBpLCB0cnk7XG4tXG4rXHR1bnNpZ25lZCBpbnQgZmFpbHVyZXMgPSAwO1xuIFxuIFx0c3dpbV9kcml2ZShiYXNlLCBmcy1cdTAwM2Vsb2NhdGlvbik7XG4tXHRmb3IgKGkgPSByZXFfc2VjdG9yOyBpIFx1MDAzYyByZXFfc2VjdG9yICsgc2VjdG9yc19uYjsgaSsrKSB7XG4tXHRcdGludCB4O1xuLVx0XHR0cmFjayA9IGkgLyBmcy1cdTAwM2VzZWNwZXJjeWw7XG4tXHRcdHggPSBpICUgZnMtXHUwMDNlc2VjcGVyY3lsO1xuLVx0XHRzaWRlID0geCAvIGZzLVx1MDAzZXNlY3BlcnRyYWNrO1xuLVx0XHRzZWN0b3IgPSB4ICUgZnMtXHUwMDNlc2VjcGVydHJhY2sgKyAxO1xuLVxuLVx0XHR0cnkgPSA1O1xuLVx0XHRkbyB7XG4tXHRcdFx0cmV0ID0gc3dpbV9yZWFkX3NlY3Rvcihmcywgc2lkZSwgdHJhY2ssIHNlY3Rvcixcbi1cdFx0XHRcdFx0XHRidWZmZXIpO1xuLVx0XHRcdGlmICh0cnktLSA9PSAwKVxuLVx0XHRcdFx0cmV0dXJuIEJMS19TVFNfSU9FUlI7XG4tXHRcdH0gd2hpbGUgKHJldCAhPSA1MTIpO1xuLVxuLVx0XHRidWZmZXIgKz0gcmV0O1xuK1x0c3dpbV9SRUFEWV90aW1lb3V0KGJhc2UpO1xuK1xuK1x0d2hpbGUgKHNlY3RvcnNfbmIpIHtcbitcdFx0dW5zaWduZWQgaW50IGN5bCwgeCwgaGVhZCwgc2VjdG9yLCBuLCByZXQ7XG4rXG4rXHRcdGN5bCA9IHJlcV9zZWN0b3IgLyBmcy1cdTAwM2VzZWNwZXJjeWw7XG4rXHRcdHggPSByZXFfc2VjdG9yICUgZnMtXHUwMDNlc2VjcGVyY3lsO1xuK1x0XHRoZWFkID0gKHggXHUwMDNlPSBmcy1cdTAwM2VzZWNwZXJ0cmFjaykgPyAxIDogMDtcbitcdFx0c2VjdG9yID0geCAlIGZzLVx1MDAzZXNlY3BlcnRyYWNrO1xuK1x0XHRuID0gbWluKHNlY3RvcnNfbmIsIGZzLVx1MDAzZXNlY3BlcnRyYWNrIC0gc2VjdG9yKTtcbitcbitcdFx0c3dpbV90cmFjayhmcywgY3lsKTtcbitcdFx0c3dpbV9oZWFkKGJhc2UsIGhlYWQpO1xuK1xuK1x0XHRyZXQgPSBzd2ltX3JlYWRfc2VjdG9yX3JhbmdlKGZzLCBoZWFkLCBjeWwsIHNlY3RvciArIDEsIG4sIGJ1ZmZlcik7XG4rXHRcdGlmIChyZXQgIT0gbilcbitcdFx0XHQrK2ZhaWx1cmVzO1xuK1x0XHRpZiAoZmFpbHVyZXMgXHUwMDNlPSA1KVxuK1x0XHRcdHJldHVybiBCTEtfU1RTX0lPRVJSO1xuK1xuK1x0XHRidWZmZXIgKz0gNTEyICogcmV0O1xuK1x0XHRzZWN0b3JzX25iIC09IHJldDtcbitcdFx0cmVxX3NlY3RvciArPSByZXQ7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC01MjcsMTIgKzUzNiwxMCBAQCBzdGF0aWMgYmxrX3N0YXR1c190IHN3aW1fcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBibGtfbXFfcXVldWVfZGF0YSAqYmQpXG4ge1xuIFx0c3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSBoY3R4LVx1MDAzZXF1ZXVlLVx1MDAzZXF1ZXVlZGF0YTtcbi1cdHN0cnVjdCBzd2ltX3ByaXYgKnN3ZCA9IGZzLVx1MDAzZXN3ZDtcbiBcdHN0cnVjdCByZXF1ZXN0ICpyZXEgPSBiZC1cdTAwM2VycTtcbiBcdGJsa19zdGF0dXNfdCBlcnI7XG4gXG4tXHRpZiAoIXNwaW5fdHJ5bG9ja19pcnEoXHUwMDI2c3dkLVx1MDAzZWxvY2spKVxuLVx0XHRyZXR1cm4gQkxLX1NUU19ERVZfUkVTT1VSQ0U7XG4rXHRtdXRleF9sb2NrKFx1MDAyNnN3aW1fbXV0ZXgpO1xuIFxuIFx0YmxrX21xX3N0YXJ0X3JlcXVlc3QocmVxKTtcbiBcbkBAIC01NTAsMTYgKzU1NywxNiBAQCBzdGF0aWMgYmxrX3N0YXR1c190IHN3aW1fcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG4gXG4gXHRlcnIgPSBCTEtfU1RTX09LO1xuIG91dDpcbi1cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZzd2QtXHUwMDNlbG9jayk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2c3dpbV9tdXRleCk7XG4gXHRyZXR1cm4gZXJyO1xuIFxuIH1cbiBcbiBzdGF0aWMgc3RydWN0IGZsb3BweV9zdHJ1Y3QgZmxvcHB5X3R5cGVbNF0gPSB7XG4tXHR7ICAgIDAsICAwLCAwLCAgMCwgMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgTlVMTCB9LCAvKiBubyB0ZXN0aW5nICAgKi9cbitcdHsgICAgMCwgIDAsIDAsICAwLCAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCBOVUxMIH0sIC8qIG5vIHRlc3RpbmcgKi9cbiBcdHsgIDcyMCwgIDksIDEsIDgwLCAwLCAweDJBLCAweDAyLCAweERGLCAweDUwLCBOVUxMIH0sIC8qIDM2MEtCIFNTIDMuNVwiKi9cbi1cdHsgMTQ0MCwgIDksIDIsIDgwLCAwLCAweDJBLCAweDAyLCAweERGLCAweDUwLCBOVUxMIH0sIC8qIDcyMEtCIDMuNVwiICAgKi9cbi1cdHsgMjg4MCwgMTgsIDIsIDgwLCAwLCAweDFCLCAweDAwLCAweENGLCAweDZDLCBOVUxMIH0sIC8qIDEuNDRNQiAzLjVcIiAgKi9cbitcdHsgMTQ0MCwgIDksIDIsIDgwLCAwLCAweDJBLCAweDAyLCAweERGLCAweDUwLCBOVUxMIH0sIC8qIDcyMEtCIDMuNVwiICovXG4rXHR7IDI4ODAsIDE4LCAyLCA4MCwgMCwgMHgxQiwgMHgwMCwgMHhDRiwgMHg2QywgTlVMTCB9LCAvKiAxLjQ0TUIgMy41XCIgKi9cbiB9O1xuIFxuIHN0YXRpYyBpbnQgZ2V0X2Zsb3BweV9nZW9tZXRyeShzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcywgaW50IHR5cGUsXG5AQCAtNTg2LDIzICs1OTMsMTYgQEAgc3RhdGljIHZvaWQgc2V0dXBfbWVkaXVtKHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzKVxuIFxuIFx0aWYgKHN3aW1fcmVhZGJpdChiYXNlLCBESVNLX0lOKSkge1xuIFx0XHRzdHJ1Y3QgZmxvcHB5X3N0cnVjdCAqZztcbitcbiBcdFx0ZnMtXHUwMDNlZGlza19pbiA9IDE7XG4gXHRcdGZzLVx1MDAzZXdyaXRlX3Byb3RlY3RlZCA9IHN3aW1fcmVhZGJpdChiYXNlLCBXUklURV9QUk9UKTtcbi1cbi1cdFx0aWYgKHN3aW1fdHJhY2swMChiYXNlKSlcbi1cdFx0XHRwcmludGsoS0VSTl9FUlJcbi1cdFx0XHRcdFwiU1dJTTogY2Fubm90IG1vdmUgZmxvcHB5IGhlYWQgdG8gdHJhY2sgMFxcblwiKTtcbi1cbi1cdFx0c3dpbV90cmFjazAwKGJhc2UpO1xuLVxuIFx0XHRmcy1cdTAwM2V0eXBlID0gc3dpbV9yZWFkYml0KGJhc2UsIFRXT01FR19NRURJQSkgP1xuLVx0XHRcdEhEX01FRElBIDogRERfTUVESUE7XG4rXHRcdFx0ICAgSERfTUVESUEgOiBERF9NRURJQTtcbiBcdFx0ZnMtXHUwMDNlaGVhZF9udW1iZXIgPSBzd2ltX3JlYWRiaXQoYmFzZSwgU0lOR0xFX1NJREVEKSA/IDEgOiAyO1xuIFx0XHRnZXRfZmxvcHB5X2dlb21ldHJ5KGZzLCAwLCBcdTAwMjZnKTtcbiBcdFx0ZnMtXHUwMDNldG90YWxfc2VjcyA9IGctXHUwMDNlc2l6ZTtcbiBcdFx0ZnMtXHUwMDNlc2VjcGVyY3lsID0gZy1cdTAwM2VoZWFkICogZy1cdTAwM2VzZWN0O1xuIFx0XHRmcy1cdTAwM2VzZWNwZXJ0cmFjayA9IGctXHUwMDNlc2VjdDtcbi1cdFx0ZnMtXHUwMDNldHJhY2sgPSAwO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZnMtXHUwMDNlZGlza19pbiA9IDA7XG4gXHR9XG5AQCAtNjIwLDExICs2MjAsOSBAQCBzdGF0aWMgaW50IGZsb3BweV9vcGVuKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpXG4gXHRcdGZzLVx1MDAzZXJlZl9jb3VudCA9IC0xO1xuIFx0ZWxzZVxuIFx0XHRmcy1cdTAwM2VyZWZfY291bnQrKztcbi1cdHN3aW1fd3JpdGUoYmFzZSwgc2V0dXAsIFNfSUJNX0RSSVZFICB8IFNfRkNMS19ESVYyKTtcbi1cdHVkZWxheSgxMCk7XG4rXG4gXHRzd2ltX2RyaXZlKGJhc2UsIGZzLVx1MDAzZWxvY2F0aW9uKTtcbi1cdHN3aW1fbW90b3IoYmFzZSwgT04pO1xuLVx0c3dpbV9hY3Rpb24oYmFzZSwgU0VUTUZNKTtcbitcbiBcdGlmIChmcy1cdTAwM2VlamVjdGVkKVxuIFx0XHRzZXR1cF9tZWRpdW0oZnMpO1xuIFx0aWYgKCFmcy1cdTAwM2VkaXNrX2luKSB7XG5AQCAtNjMyLDYgKzYzMCwxMSBAQCBzdGF0aWMgaW50IGZsb3BweV9vcGVuKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuK1x0c3dpbV9tb3RvcihiYXNlLCBPTik7XG4rXHRzd2ltX2FjdGlvbihiYXNlLCBTRVRNRk0pO1xuK1x0bXNsZWVwKDMwKTtcbitcdHN3aW1fUkVBRFlfdGltZW91dChiYXNlKTtcbitcbiBcdHNldF9jYXBhY2l0eShmcy1cdTAwM2VkaXNrLCBmcy1cdTAwM2V0b3RhbF9zZWNzKTtcbiBcbiBcdGlmIChtb2RlIFx1MDAyNiBCTEtfT1BFTl9OREVMQVkpXG5AQCAtNjUyLDggKzY1NSwxMCBAQCBzdGF0aWMgaW50IGZsb3BweV9vcGVuKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpXG4gXHRlbHNlIGlmIChmcy1cdTAwM2VyZWZfY291bnQgXHUwMDNlIDApXG4gXHRcdC0tZnMtXHUwMDNlcmVmX2NvdW50O1xuIFxuLVx0aWYgKGZzLVx1MDAzZXJlZl9jb3VudCA9PSAwKVxuK1x0aWYgKGZzLVx1MDAzZXJlZl9jb3VudCA9PSAwKSB7XG4gXHRcdHN3aW1fbW90b3IoYmFzZSwgT0ZGKTtcbitcdFx0c3dpbV9kcml2ZShiYXNlLCBOT19EUklWRSk7XG4rXHR9XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC02NzksOCArNjg0LDExIEBAIHN0YXRpYyB2b2lkIGZsb3BweV9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIFx0ZWxzZSBpZiAoZnMtXHUwMDNlcmVmX2NvdW50IFx1MDAzZSAwKVxuIFx0XHQtLWZzLVx1MDAzZXJlZl9jb3VudDtcbiBcbi1cdGlmIChmcy1cdTAwM2VyZWZfY291bnQgPT0gMClcbitcdGlmIChmcy1cdTAwM2VyZWZfY291bnQgPT0gMCkge1xuK1x0XHRzd2ltX2RyaXZlKGJhc2UsIGZzLVx1MDAzZWxvY2F0aW9uKTtcbiBcdFx0c3dpbV9tb3RvcihiYXNlLCBPRkYpO1xuK1x0XHRzd2ltX2RyaXZlKGJhc2UsIE5PX0RSSVZFKTtcbitcdH1cbiBcdG11dGV4X3VubG9jayhcdTAwMjZzd2ltX211dGV4KTtcbiB9XG4gXG5AQCAtNjkxLDcgKzY5OSw3IEBAIHN0YXRpYyBpbnQgZmxvcHB5X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbiBcdGludCBlcnI7XG4gXG4gXHRpZiAoKGNtZCBcdTAwMjYgMHg4MCkgXHUwMDI2XHUwMDI2ICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxuLVx0XHRcdHJldHVybiAtRVBFUk07XG4rXHRcdHJldHVybiAtRVBFUk07XG4gXG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBGREVKRUNUOlxuQEAgLTc1MCwxMCArNzU4LDkgQEAgc3RhdGljIGludCBzd2ltX2FkZF9mbG9wcHkoc3RydWN0IHN3aW1fcHJpdiAqc3dkLCBlbnVtIGRyaXZlX2xvY2F0aW9uIGxvY2F0aW9uKVxuIFx0c3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSBcdTAwMjZzd2QtXHUwMDNldW5pdFtzd2QtXHUwMDNlZmxvcHB5X2NvdW50XTtcbiBcdHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBzd2QtXHUwMDNlYmFzZTtcbiBcbitcdGZzLVx1MDAzZXN3ZCA9IHN3ZDtcbiBcdGZzLVx1MDAzZWxvY2F0aW9uID0gbG9jYXRpb247XG4gXG4tXHRzd2ltX2RyaXZlKGJhc2UsIGxvY2F0aW9uKTtcbi1cbiBcdHN3aW1fbW90b3IoYmFzZSwgT0ZGKTtcbiBcbiBcdGZzLVx1MDAzZXR5cGUgPSBIRF9NRURJQTtcbkBAIC03NjEsNiArNzY4LDcgQEAgc3RhdGljIGludCBzd2ltX2FkZF9mbG9wcHkoc3RydWN0IHN3aW1fcHJpdiAqc3dkLCBlbnVtIGRyaXZlX2xvY2F0aW9uIGxvY2F0aW9uKVxuIFxuIFx0ZnMtXHUwMDNlcmVmX2NvdW50ID0gMDtcbiBcdGZzLVx1MDAzZWVqZWN0ZWQgPSAxO1xuK1x0ZnMtXHUwMDNldHJhY2sgPSAwO1xuIFxuIFx0c3dkLVx1MDAzZWZsb3BweV9jb3VudCsrO1xuIFxuQEAgLTc4NSwyNSArNzkzLDQzIEBAIHN0YXRpYyB2b2lkIHN3aW1fY2xlYW51cF9mbG9wcHlfZGlzayhzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcylcbiBcdGJsa19tcV9mcmVlX3RhZ19zZXQoXHUwMDI2ZnMtXHUwMDNldGFnX3NldCk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc3dpbV9mbG9wcHlfaW5pdChzdHJ1Y3Qgc3dpbV9wcml2ICpzd2QpXG4rc3RhdGljIHZvaWQgc3dpbV9zZXRfcGFyYW1ldGVycyhzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKVxuK3tcbitcdHVuc2lnbmVkIGludCBpO1xuK1x0c3RhdGljIGNvbnN0IHU4IG1lbVtdID0geyAweDE4LCAweDQxLCAweDJlLCAweDJlLCAweDE4LCAweDE4LCAweDFiLCAweDFiLFxuK1x0XHRcdFx0ICAweDJmLCAweDJmLCAweDE5LCAweDE5LCAweDk3LCAweDFiLCAweDU3LCAweDNiLCB9O1xuK1xuK1x0c3dpbV93cml0ZShiYXNlLCBtb2RlMCwgMCk7IC8qIHJlc2V0IHBhcmFtZXRlciBtZW1vcnkgaW5kZXggKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDE2OyArK2kpXG4rXHRcdHN3aW1fd3JpdGUoYmFzZSwgcGFyYW1ldGVyLCBtZW1baV0pO1xuK31cbitcbitzdGF0aWMgaW50IHN3aW1fZmxvcHB5X2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiB7XG4rXHRzdHJ1Y3Qgc3dpbV9wcml2ICpzd2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcbitcdHVuc2lnbmVkIGludCAqZGF0YSA9IHBkZXYtXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGE7XG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHtcbi1cdFx0LmZlYXR1cmVzXHRcdD0gQkxLX0ZFQVRfUk9UQVRJT05BTCxcbitcdFx0LmZlYXR1cmVzID0gQkxLX0ZFQVRfUk9UQVRJT05BTCxcbiBcdH07XG4gXHRpbnQgZXJyO1xuIFx0aW50IGRyaXZlO1xuIFx0c3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IHN3ZC1cdTAwM2ViYXNlO1xuIFxuK1x0c3dpbV93cml0ZShiYXNlLCBzZXR1cCwgU19JQk1fRFJJVkUgfCAoKmRhdGEgPyBTX0ZDTEtfRElWMiA6IDApKTtcbitcbitcdHN3aW1fc2V0X3BhcmFtZXRlcnMoYmFzZSk7XG4rXG4gXHQvKiBzY2FuIGZsb3BweSBkcml2ZXMgKi9cbiBcbiBcdHN3aW1fZHJpdmUoYmFzZSwgSU5URVJOQUxfRFJJVkUpO1xuIFx0aWYgKHN3aW1fcmVhZGJpdChiYXNlLCBEUklWRV9QUkVTRU5UKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhc3dpbV9yZWFkYml0KGJhc2UsIE9ORU1FR19EUklWRSkpXG4rXHQgICAgIXN3aW1fcmVhZGJpdChiYXNlLCBPTkVNRUdfRFJJVkUpIFx1MDAyNlx1MDAyNiAhc3dpbV90cmFjazAwKGJhc2UpKVxuIFx0XHRzd2ltX2FkZF9mbG9wcHkoc3dkLCBJTlRFUk5BTF9EUklWRSk7XG4gXHRzd2ltX2RyaXZlKGJhc2UsIEVYVEVSTkFMX0RSSVZFKTtcbiBcdGlmIChzd2ltX3JlYWRiaXQoYmFzZSwgRFJJVkVfUFJFU0VOVCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIXN3aW1fcmVhZGJpdChiYXNlLCBPTkVNRUdfRFJJVkUpKVxuK1x0ICAgICFzd2ltX3JlYWRiaXQoYmFzZSwgT05FTUVHX0RSSVZFKSBcdTAwMjZcdTAwMjYgIXN3aW1fdHJhY2swMChiYXNlKSlcbiBcdFx0c3dpbV9hZGRfZmxvcHB5KHN3ZCwgRVhURVJOQUxfRFJJVkUpO1xuK1x0c3dpbV9kcml2ZShiYXNlLCBOT19EUklWRSk7XG4gXG4gXHQvKiByZWdpc3RlciBmbG9wcHkgZHJpdmVzICovXG4gXG5AQCAtODE0LDExICs4NDAsOSBAQCBzdGF0aWMgaW50IHN3aW1fZmxvcHB5X2luaXQoc3RydWN0IHN3aW1fcHJpdiAqc3dkKVxuIFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0fVxuIFxuLVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c3dkLVx1MDAzZWxvY2spO1xuLVxuIFx0Zm9yIChkcml2ZSA9IDA7IGRyaXZlIFx1MDAzYyBzd2QtXHUwMDNlZmxvcHB5X2NvdW50OyBkcml2ZSsrKSB7XG4gXHRcdGVyciA9IGJsa19tcV9hbGxvY19zcV90YWdfc2V0KFx1MDAyNnN3ZC1cdTAwM2V1bml0W2RyaXZlXS50YWdfc2V0LFxuLVx0XHRcdFx0XHUwMDI2c3dpbV9tcV9vcHMsIDIsIDApO1xuK1x0XHRcdFx0XHUwMDI2c3dpbV9tcV9vcHMsIDIsIEJMS19NUV9GX0JMT0NLSU5HKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIGV4aXRfcHV0X2Rpc2tzO1xuIFxuQEAgLTgzMCw4ICs4NTQsNiBAQCBzdGF0aWMgaW50IHN3aW1fZmxvcHB5X2luaXQoc3RydWN0IHN3aW1fcHJpdiAqc3dkKVxuIFx0XHRcdGVyciA9IFBUUl9FUlIoc3dkLVx1MDAzZXVuaXRbZHJpdmVdLmRpc2spO1xuIFx0XHRcdGdvdG8gZXhpdF9wdXRfZGlza3M7XG4gXHRcdH1cbi1cbi1cdFx0c3dkLVx1MDAzZXVuaXRbZHJpdmVdLnN3ZCA9IHN3ZDtcbiBcdH1cbiBcbiBcdGZvciAoZHJpdmUgPSAwOyBkcml2ZSBcdTAwM2Mgc3dkLVx1MDAzZWZsb3BweV9jb3VudDsgZHJpdmUrKykge1xuQEAgLTkwNSw3ICs5MjcsNyBAQCBzdGF0aWMgaW50IHN3aW1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KVxuIFxuIFx0c3dkLVx1MDAzZWJhc2UgPSBzd2ltX2Jhc2U7XG4gXG4tXHRyZXQgPSBzd2ltX2Zsb3BweV9pbml0KHN3ZCk7XG4rXHRyZXQgPSBzd2ltX2Zsb3BweV9pbml0KGRldik7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dF9rZnJlZTtcbiBcbkBAIC05NDUsNyArOTY3LDcgQEAgc3RhdGljIHZvaWQgc3dpbV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KVxuIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHN3aW1fZHJpdmVyID0ge1xuIFx0LnByb2JlICA9IHN3aW1fcHJvYmUsXG4gXHQucmVtb3ZlID0gc3dpbV9yZW1vdmUsXG4tXHQuZHJpdmVyICAgPSB7XG4rXHQuZHJpdmVyID0ge1xuIFx0XHQubmFtZVx0PSBDQVJETkFNRSxcbiBcdH0sXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N3aW1fYXNtLlMgYi9kcml2ZXJzL2Jsb2NrL3N3aW1fYXNtLlNcbmluZGV4IDNkN2EyZDg3NTk1YTU3Li42NWI0ZTQ2NThlMTBjNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svc3dpbV9hc20uU1xuKysrIGIvZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TXG5AQCAtNSw3ICs1LDcgQEBcbiAgKiBuZWVkcyBhc3NlbWJseSBsYW5ndWFnZSBiZWNhdXNlIGlzIHZlcnkgdGltaW5nIGRlcGVuZGVudFxuICAqIHRoaXMgY29udHJvbGxlciBleGlzdHMgb25seSBvbiBtYWNpbnRvc2ggNjgweDAgYmFzZWRcbiAgKlxuLSAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA4IExhdXJlbnQgVml2aWVyIFx1MDAzY0xhdXJlbnRAbHZpdmllci5pbmZvXHUwMDNlXG4rICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4IExhdXJlbnQgVml2aWVyIFx1MDAzY0xhdXJlbnRAbHZpdmllci5pbmZvXHUwMDNlXG4gICpcbiAgKiBiYXNlZCBvbiBBbGFzdGFpciBCcmlkZ2V3YXRlciBTV0lNIGFuYWx5c2lzLCAyMDAxXG4gICogYmFzZWQgb24gbmV0QlNEIElXTSBkcml2ZXIgKGMpIDE5OTcsIDE5OTggSGF1a2UgRmF0aC5cbkBAIC0xNCwxMzUgKzE0LDEzOCBAQFxuICAqIDIwMDgtMTEtMDUgKGx2KSAtIGFkZCBnZXRfc3dpbV9tb2RlXG4gICovXG4gXG4tXHQuZXF1XHR3cml0ZV9kYXRhLFx0MHgwMDAwXG4tXHQuZXF1XHR3cml0ZV9tYXJrLFx0MHgwMjAwXG4tXHQuZXF1XHR3cml0ZV9DUkMsXHQweDA0MDBcbi1cdC5lcXVcdHdyaXRlX3BhcmFtZXRlciwweDA2MDBcbi1cdC5lcXVcdHdyaXRlX3BoYXNlLFx0MHgwODAwXG4tXHQuZXF1XHR3cml0ZV9zZXR1cCxcdDB4MGEwMFxuLVx0LmVxdVx0d3JpdGVfbW9kZTAsXHQweDBjMDBcbi1cdC5lcXVcdHdyaXRlX21vZGUxLFx0MHgwZTAwXG4tXHQuZXF1XHRyZWFkX2RhdGEsXHQweDEwMDBcbi1cdC5lcXVcdHJlYWRfbWFyayxcdDB4MTIwMFxuLVx0LmVxdVx0cmVhZF9lcnJvcixcdDB4MTQwMFxuLVx0LmVxdVx0cmVhZF9wYXJhbWV0ZXIsXHQweDE2MDBcbi1cdC5lcXVcdHJlYWRfcGhhc2UsXHQweDE4MDBcbi1cdC5lcXVcdHJlYWRfc2V0dXAsXHQweDFhMDBcbi1cdC5lcXVcdHJlYWRfc3RhdHVzLFx0MHgxYzAwXG4tXHQuZXF1XHRyZWFkX2hhbmRzaGFrZSxcdDB4MWUwMFxuLVxuLVx0LmVxdVx0b19zaWRlLCAwXG4tXHQuZXF1XHRvX3RyYWNrLCAxXG4tXHQuZXF1XHRvX3NlY3RvciwgMlxuLVx0LmVxdVx0b19zaXplLCAzXG4tXHQuZXF1XHRvX2NyYzAsIDRcbi1cdC5lcXVcdG9fY3JjMSwgNVxuLVxuLVx0LmVxdVx0c2Vla190aW1lLCAzMDAwMFxuLVx0LmVxdVx0bWF4X3JldHJ5LCA0MFxuLVx0LmVxdVx0c2VjdG9yX3NpemUsIDUxMlxuK1x0LmVxdVx0Lkx3cml0ZV9kYXRhLFx0XHQweDAwMDBcbitcdC5lcXVcdC5Md3JpdGVfbWFyayxcdFx0MHgwMjAwXG4rXHQuZXF1XHQuTHdyaXRlX0NSQyxcdFx0MHgwNDAwXG4rXHQuZXF1XHQuTHdyaXRlX3BhcmFtZXRlcixcdDB4MDYwMFxuK1x0LmVxdVx0Lkx3cml0ZV9waGFzZSxcdFx0MHgwODAwXG4rXHQuZXF1XHQuTHdyaXRlX3NldHVwLFx0XHQweDBhMDBcbitcdC5lcXVcdC5Md3JpdGVfbW9kZTAsXHRcdDB4MGMwMFxuK1x0LmVxdVx0Lkx3cml0ZV9tb2RlMSxcdFx0MHgwZTAwXG4rXHQuZXF1XHQuTHJlYWRfZGF0YSxcdFx0MHgxMDAwXG4rXHQuZXF1XHQuTHJlYWRfbWFyayxcdFx0MHgxMjAwXG4rXHQuZXF1XHQuTHJlYWRfZXJyb3IsXHRcdDB4MTQwMFxuK1x0LmVxdVx0LkxyZWFkX3BhcmFtZXRlcixcdDB4MTYwMFxuK1x0LmVxdVx0LkxyZWFkX3BoYXNlLFx0XHQweDE4MDBcbitcdC5lcXVcdC5McmVhZF9zZXR1cCxcdFx0MHgxYTAwXG4rXHQuZXF1XHQuTHJlYWRfc3RhdHVzLFx0XHQweDFjMDBcbitcdC5lcXVcdC5McmVhZF9oYW5kc2hha2UsXHQweDFlMDBcbitcbitcdC5lcXVcdC5Mb19zaWRlLFx0XHQwXG4rXHQuZXF1XHQuTG9fdHJhY2ssXHRcdDFcbitcdC5lcXVcdC5Mb19zZWN0b3IsXHRcdDJcbitcdC5lcXVcdC5Mb19zaXplLFx0XHQzXG4rXHQuZXF1XHQuTG9fY3JjMCxcdFx0NFxuK1x0LmVxdVx0LkxvX2NyYzEsXHRcdDVcbitcbitcdC5lcXVcdC5Mc2Vla190aW1lLFx0XHQzMDAwMFxuK1x0LmVxdVx0LkxtYXhfcmV0cnksXHRcdDQwXG4rXHQuZXF1XHQuTHNlY3Rvcl9zaXplLFx0XHQ1MTJcbitcbitcdC5lcXVcdC5MbXJfY2xlYXJfZmlmbyxcdDB4MDFcbitcdC5lcXVcdC5MbXJfYWN0aW9uLFx0XHQweDA4XG4rXHQuZXF1XHQuTG1yX3dyaXRlX2FjdGlvbixcdDB4MThcbitcbitcdC5lcXVcdC5MaHJfY3JjX2Vycm9yLFx0XHQweDAyXG4rXHQuZXF1XHQuTGhyX2ZpZm9fMmJ5dGVzLFx0MHg0MFxuK1x0LmVxdVx0Lkxocl9maWZvXzFieXRlLFx0MHg4MFxuIFxuIFx0Lmdsb2JhbCBzd2ltX3JlYWRfc2VjdG9yX2hlYWRlclxuIHN3aW1fcmVhZF9zZWN0b3JfaGVhZGVyOlxuIFx0bGlua1x0JWE2LCAjMFxuLVx0bW92ZW1sXHQlZDEtJWQ1LyVhMC0lYTQsJXNwQC1cbitcdG1vdmVtbFx0JWQxLSVkNS8lYTAtJWE1LCVzcEAtXG4gXHRtb3ZlbFx0JWE2QCgweDBjKSwgJWE0XG4tXHRic3JcdG1mbV9yZWFkX2FkZHJtYXJrXG4tXHRtb3ZlbWxcdCVzcEArLCAlZDEtJWQ1LyVhMC0lYTRcbitcdG1vdmVxXHQjLTEsICVkMFxuK1x0YnNyXHQuTG1mbV9yZWFkX2FkZHJtYXJrXG4rXHRtb3ZlbWxcdCVzcEArLCAlZDEtJWQ1LyVhMC0lYTVcbiBcdHVubGtcdCVhNlxuIFx0cnRzXG4gXG4tc2VjdG9yX2FkZHJlc3NfbWFyazpcbisuTHNlY3Rvcl9hZGRyZXNzX21hcms6XG4gXHQuYnl0ZVx0MHhhMSwgMHhhMSwgMHhhMSwgMHhmZVxuLXNlY3Rvcl9kYXRhX21hcms6XG4rLkxzZWN0b3JfZGF0YV9tYXJrOlxuIFx0LmJ5dGVcdDB4YTEsIDB4YTEsIDB4YTEsIDB4ZmJcbiBcbi1tZm1fcmVhZF9hZGRybWFyazpcbisuTG1mbV9yZWFkX2FkZHJtYXJrOlxuIFx0bW92ZWxcdCVhNkAoMHgwOCksICVhM1xuLVx0bGVhXHQlYTNAKHJlYWRfaGFuZHNoYWtlKSwgJWEyXG4tXHRsZWFcdCVhM0AocmVhZF9tYXJrKSwgJWEzXG4tXHRtb3ZlcVx0Iy0xLCAlZDBcbi1cdG1vdmV3XHQjc2Vla190aW1lLCAlZDJcbi1cbi13YWl0X2hlYWRlcl9pbml0OlxuLVx0dHN0Ylx0JWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKVxuLVx0bW92ZWJcdCMweDE4LCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKVxuLVx0bW92ZWJcdCMweDAxLCAlYTNAKHdyaXRlX21vZGUxIC0gcmVhZF9tYXJrKVxuLVx0bW92ZWJcdCMweDAxLCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKVxuLVx0dHN0Ylx0JWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKVxuLVx0bW92ZWJcdCMweDA4LCAlYTNAKHdyaXRlX21vZGUxIC0gcmVhZF9tYXJrKVxuLVxuLVx0bGVhXHRzZWN0b3JfYWRkcmVzc19tYXJrLCAlYTBcbitcdGxlYVx0JWEzQCguTHJlYWRfaGFuZHNoYWtlKSwgJWEyXG4rXHRsZWFcdCVhM0AoLkxyZWFkX2RhdGEpLCAlYTVcbitcdGxlYVx0JWEzQCguTHJlYWRfbWFyayksICVhM1xuK1x0bW92ZXdcdCMuTHNlZWtfdGltZSwgJWQyXG4rXG4rLkx3YWl0X2hlYWRlcl9pbml0OlxuK1x0bW92ZWJcdCMuTG1yX3dyaXRlX2FjdGlvbiwgJWEzQCguTHdyaXRlX21vZGUwIC0gLkxyZWFkX21hcmspXG4rXHRtb3ZlYlx0Iy5MbXJfY2xlYXJfZmlmbywgJWEzQCguTHdyaXRlX21vZGUxIC0gLkxyZWFkX21hcmspXG4rXHRtb3ZlYlx0Iy5MbXJfY2xlYXJfZmlmbywgJWEzQCguTHdyaXRlX21vZGUwIC0gLkxyZWFkX21hcmspXG4rXHR0c3RiXHQlYTNAKC5McmVhZF9lcnJvciAtIC5McmVhZF9tYXJrKVxuK1x0bW92ZWJcdCMuTG1yX2FjdGlvbiwgJWEzQCguTHdyaXRlX21vZGUxIC0gLkxyZWFkX21hcmspXG4rXG4rXHRsZWFcdC5Mc2VjdG9yX2FkZHJlc3NfbWFyaywgJWEwXG4gXHRtb3ZlcVx0IzMsICVkMVxuIFxuLXdhaXRfYWRkcl9tYXJrX2J5dGU6XG4tXG4rLkx3YWl0X2FkZHJfbWFya19ieXRlOlxuIFx0dHN0Ylx0JWEyQFxuLVx0ZGJtaVx0JWQyLCB3YWl0X2FkZHJfbWFya19ieXRlXG4tXHRicGxcdGhlYWRlcl9leGl0XG4rXHRkYm1pXHQlZDIsIC5Md2FpdF9hZGRyX21hcmtfYnl0ZVxuK1x0YnBsXHQuTHNpZ25hbF9ub255YlxuIFxuIFx0bW92ZWJcdCVhM0AsICVkM1xuIFx0Y21wYlx0JWEwQCssICVkM1xuLVx0ZGJuZVx0JWQxLCB3YWl0X2FkZHJfbWFya19ieXRlXG4tXHRibmVcdHdhaXRfaGVhZGVyX2luaXRcbi1cbi1cdG1vdmVxXHQjbWF4X3JldHJ5LCAlZDJcbitcdGRibmVcdCVkMSwgLkx3YWl0X2FkZHJfbWFya19ieXRlXG4rXHRibmVcdC5Md2FpdF9oZWFkZXJfaW5pdFxuIFxuLWFtYXJrMDpcdHRzdGJcdCVhMkBcbi1cdGRibWlcdCVkMiwgYW1hcmswXG4tXHRicGxcdHNpZ25hbF9ub255YlxuLVxuLVx0bW92ZWJcdCVhM0AsICVhNEAob190cmFjaylcbi1cbi1cdG1vdmVxXHQjbWF4X3JldHJ5LCAlZDJcbi1cbi1hbWFyazE6XHR0c3RiXHQlYTJAXG4tXHRkYm1pXHQlZDIsIGFtYXJrMVxuLVx0YnBsXHRzaWduYWxfbm9ueWJcbi1cbi1cdG1vdmViXHQlYTNALCAlYTRAKG9fc2lkZSlcbi1cbi1cdG1vdmVxXHQjbWF4X3JldHJ5LCAlZDJcbitcdG1vdmVxXHQjLkxtYXhfcmV0cnksICVkMlxuKy5MYW1hcmswOlxuK1x0dHN0Ylx0JWEyQFxuK1x0ZGJtaVx0JWQyLCAuTGFtYXJrMFxuK1x0YnBsXHQuTHNpZ25hbF9ub255YlxuIFxuLWFtYXJrMjpcdHRzdGJcdCVhMkBcbi1cdGRibWlcdCVkMiwgYW1hcmsyXG4tXHRicGxcdHNpZ25hbF9ub255YlxuK1x0bW92ZWJcdCVhNUAsICVhNEAoLkxvX3RyYWNrKVxuIFxuLVx0bW92ZWJcdCVhM0AsICVhNEAob19zZWN0b3IpXG4rXHRtb3ZlcVx0Iy5MbWF4X3JldHJ5LCAlZDJcbisuTGFtYXJrMTpcbitcdHRzdGJcdCVhMkBcbitcdGRibWlcdCVkMiwgLkxhbWFyazFcbitcdGJwbFx0LkxzaWduYWxfbm9ueWJcbiBcbi1cdG1vdmVxXHQjbWF4X3JldHJ5LCAlZDJcbitcdG1vdmViXHQlYTVALCAlYTRAKC5Mb19zaWRlKVxuIFxuLWFtYXJrMzpcdHRzdGJcdCVhMkBcbi1cdGRibWlcdCVkMiwgYW1hcmszXG4tXHRicGxcdHNpZ25hbF9ub255YlxuK1x0bW92ZXFcdCMuTG1heF9yZXRyeSwgJWQyXG4rLkxhbWFyazI6XG4rXHR0c3RiXHQlYTJAXG4rXHRkYm1pXHQlZDIsIC5MYW1hcmsyXG4rXHRicGxcdC5Mc2lnbmFsX25vbnliXG4gXG4tXHRtb3ZlYlx0JWEzQCwgJWE0QChvX3NpemUpXG4rXHRtb3ZlYlx0JWE1QCwgJWE0QCguTG9fc2VjdG9yKVxuIFxuLVx0bW92ZXFcdCNtYXhfcmV0cnksICVkMlxuK1x0bW92ZXFcdCMuTG1heF9yZXRyeSwgJWQyXG4rLkxhbWFyazM6XG4rXHR0c3RiXHQlYTJAXG4rXHRkYm1pXHQlZDIsIC5MYW1hcmszXG4rXHRicGxcdC5Mc2lnbmFsX25vbnliXG4gXG4tY3JjMDpcdHRzdGJcdCVhMkBcbi1cdGRibWlcdCVkMiwgY3JjMFxuLVx0YnBsXHRzaWduYWxfbm9ueWJcbitcdG1vdmViXHQlYTVALCAlYTRAKC5Mb19zaXplKVxuIFxuLVx0bW92ZWJcdCVhM0AsICVhNEAob19jcmMwKVxuK1x0bW92ZXFcdCMuTG1heF9yZXRyeSwgJWQyXG4rLkxjcmMwOlxuK1x0dHN0Ylx0JWEyQFxuK1x0ZGJtaVx0JWQyLCAuTGNyYzBcbitcdGJwbFx0LkxzaWduYWxfbm9ueWJcbiBcbi1cdG1vdmVxXHQjbWF4X3JldHJ5LCAlZDJcbitcdG1vdmViXHQlYTVALCAlYTRAKC5Mb19jcmMwKVxuIFxuLWNyYzE6XHR0c3RiXHQlYTJAXG4tXHRkYm1pXHQlZDIsIGNyYzFcbi1cdGJwbFx0c2lnbmFsX25vbnliXG4rXHRtb3ZlcVx0Iy5MbWF4X3JldHJ5LCAlZDJcbisuTGNyYzE6XHRtb3ZlYlx0JWEyQCwgJWQ1XG4rXHRkYm1pXHQlZDIsIC5MY3JjMVxuK1x0YnBsXHQuTHNpZ25hbF9ub255YlxuIFxuLVx0bW92ZWJcdCVhM0AsICVhNEAob19jcmMxKVxuK1x0bW92ZWJcdCVhNUAsICVhNEAoLkxvX2NyYzEpXG4gXG4tXHR0c3RiXHQlYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspXG4rXHRhbmRiXHQjLkxocl9jcmNfZXJyb3IsICVkNVxuK1x0Ym5lXHQuTHNpZ25hbF9ub255YlxuIFxuLWhlYWRlcl9leGl0OlxuIFx0bW92ZXFcdCMwLCAlZDBcbi1cdG1vdmViXHQjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaylcbi1cdHJ0c1xuLXNpZ25hbF9ub255Yjpcbi1cdG1vdmVxXHQjLTEsICVkMFxuLVx0bW92ZWJcdCMweDE4LCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKVxuKy5Mc2lnbmFsX25vbnliOlxuK1x0bW92ZWJcdCMuTG1yX3dyaXRlX2FjdGlvbiwgJWEzQCguTHdyaXRlX21vZGUwIC0gLkxyZWFkX21hcmspXG4gXHRydHNcbiBcbiBcdC5nbG9iYWwgc3dpbV9yZWFkX3NlY3Rvcl9kYXRhXG5AQCAtMTUwLDk0ICsxNTMsODcgQEAgc3dpbV9yZWFkX3NlY3Rvcl9kYXRhOlxuIFx0bGlua1x0JWE2LCAjMFxuIFx0bW92ZW1sXHQlZDEtJWQ1LyVhMC0lYTUsJXNwQC1cbiBcdG1vdmVsXHQlYTZAKDB4MGMpLCAlYTRcbi1cdGJzclx0bWZtX3JlYWRfZGF0YVxuK1x0bW92ZXFcdCMtMSwgJWQwXG4rXHRic3JcdC5MbWZtX3JlYWRfZGF0YVxuIFx0bW92ZW1sXHQlc3BAKywgJWQxLSVkNS8lYTAtJWE1XG4gXHR1bmxrXHQlYTZcbiBcdHJ0c1xuIFxuLW1mbV9yZWFkX2RhdGE6XG4rLkxtZm1fcmVhZF9kYXRhOlxuIFx0bW92ZWxcdCVhNkAoMHgwOCksICVhM1xuLVx0bGVhXHQlYTNAKHJlYWRfaGFuZHNoYWtlKSwgJWEyXG4tXHRsZWFcdCVhM0AocmVhZF9kYXRhKSwgJWE1XG4tXHRsZWFcdCVhM0AocmVhZF9tYXJrKSwgJWEzXG4tXHRtb3Zld1x0I3NlZWtfdGltZSwgJWQyXG4tXG4td2FpdF9kYXRhX2luaXQ6XG4tXHR0c3RiXHQlYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspXG4tXHRtb3ZlYlx0IzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspXG4tXHRtb3ZlYlx0IzB4MDEsICVhM0Aod3JpdGVfbW9kZTEgLSByZWFkX21hcmspXG4tXHRtb3ZlYlx0IzB4MDEsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspXG4tXHR0c3RiXHQlYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspXG4tXHRtb3ZlYlx0IzB4MDgsICVhM0Aod3JpdGVfbW9kZTEgLSByZWFkX21hcmspXG4tXG4tXHRsZWFcdHNlY3Rvcl9kYXRhX21hcmssICVhMFxuK1x0bGVhXHQlYTNAKC5McmVhZF9oYW5kc2hha2UpLCAlYTJcbitcdGxlYVx0JWEzQCguTHJlYWRfZGF0YSksICVhNVxuK1x0bGVhXHQlYTNAKC5McmVhZF9tYXJrKSwgJWEzXG4rXHRtb3Zld1x0Iy5Mc2Vla190aW1lLCAlZDJcbitcbisuTHdhaXRfZGF0YV9pbml0OlxuK1x0bW92ZWJcdCMuTG1yX3dyaXRlX2FjdGlvbiwgJWEzQCguTHdyaXRlX21vZGUwIC0gLkxyZWFkX21hcmspXG4rXHRtb3ZlYlx0Iy5MbXJfY2xlYXJfZmlmbywgJWEzQCguTHdyaXRlX21vZGUxIC0gLkxyZWFkX21hcmspXG4rXHRtb3ZlYlx0Iy5MbXJfY2xlYXJfZmlmbywgJWEzQCguTHdyaXRlX21vZGUwIC0gLkxyZWFkX21hcmspXG4rXHR0c3RiXHQlYTNAKC5McmVhZF9lcnJvciAtIC5McmVhZF9tYXJrKVxuK1x0bW92ZWJcdCMuTG1yX2FjdGlvbiwgJWEzQCguTHdyaXRlX21vZGUxIC0gLkxyZWFkX21hcmspXG4rXG4rXHRsZWFcdC5Mc2VjdG9yX2RhdGFfbWFyaywgJWEwXG4gXHRtb3ZlcVx0IzMsICVkMVxuIFxuIFx0Lyogd2FpdCBkYXRhIGFkZHJlc3MgbWFyayAqL1xuIFxuLXdhaXRfZGF0YV9tYXJrX2J5dGU6XG4tXG4rLkx3YWl0X2RhdGFfbWFya19ieXRlOlxuIFx0dHN0Ylx0JWEyQFxuLVx0ZGJtaVx0JWQyLCB3YWl0X2RhdGFfbWFya19ieXRlXG4tXHRicGxcdGRhdGFfZXhpdFxuK1x0ZGJtaVx0JWQyLCAuTHdhaXRfZGF0YV9tYXJrX2J5dGVcbitcdGJwbFx0LkxkYXRhX2V4aXRcbiBcbiBcdG1vdmViXHQlYTNALCAlZDNcbiBcdGNtcGJcdCVhMEArLCAlZDNcbi1cdGRibmVcdCVkMSwgd2FpdF9kYXRhX21hcmtfYnl0ZVxuLVx0Ym5lXHR3YWl0X2RhdGFfaW5pdFxuK1x0ZGJuZVx0JWQxLCAuTHdhaXRfZGF0YV9tYXJrX2J5dGVcbitcdGJuZVx0Lkx3YWl0X2RhdGFfaW5pdFxuIFxuIFx0LyogcmVhZCBkYXRhICovXG4gXG4tXHR0c3RiXHQlYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspXG4tXG4tXHRtb3ZlbFx0I3NlY3Rvcl9zaXplLTEsICVkNFx0XHQvKiBzZWN0b3Igc2l6ZSAqL1xuLXJlYWRfbmV3X2RhdGE6XG4tXHRtb3Zld1x0I21heF9yZXRyeSwgJWQyXG4tcmVhZF9kYXRhX2xvb3A6XG4rXHRtb3ZlbFx0Iy5Mc2VjdG9yX3NpemUgLSAxLCAlZDRcdFx0Lyogc2VjdG9yIHNpemUgKi9cbisuTHJlYWRfbmV3X2RhdGE6XG4rXHRtb3Zld1x0Iy5MbWF4X3JldHJ5LCAlZDJcbisuTHJlYWRfZGF0YV9sb29wOlxuIFx0bW92ZWJcdCVhMkAsICVkNVxuLVx0YW5kYlx0IzB4YzAsICVkNVxuLVx0ZGJuZVx0JWQyLCByZWFkX2RhdGFfbG9vcFxuLVx0YmVxXHRkYXRhX2V4aXRcbitcdGFuZGJcdCMoLkxocl9maWZvXzJieXRlcyArIC5MaHJfZmlmb18xYnl0ZSksICVkNVxuK1x0YmVxXHQxZlxuK1x0bW92ZXdcdCMuTG1heF9yZXRyeSwgJWQyXG4gXHRtb3ZlYlx0JWE1QCwgJWE0QCtcbi1cdGFuZGJcdCMweDQwLCAlZDVcbi1cdGRibmVcdCVkNCwgcmVhZF9uZXdfZGF0YVxuLVx0YmVxXHRleGl0X2xvb3BcbitcdGRicmFcdCVkNCwgMWZcbitcdGJyYVx0LkxkYXRhX2NyYzBcbisxOlx0YW5kYlx0Iy5MaHJfZmlmb18yYnl0ZXMsICVkNVxuK1x0ZGJuZVx0JWQyLCAuTHJlYWRfZGF0YV9sb29wXG4rXHRiZXFcdC5MZGF0YV9leGl0XG4gXHRtb3ZlYlx0JWE1QCwgJWE0QCtcbi1cdGRicmFcdCVkNCwgcmVhZF9uZXdfZGF0YVxuLWV4aXRfbG9vcDpcbitcdGRicmFcdCVkNCwgLkxyZWFkX25ld19kYXRhXG4gXG4gXHQvKiByZWFkIENSQyAqL1xuIFxuLVx0bW92ZXdcdCNtYXhfcmV0cnksICVkMlxuLWRhdGFfY3JjMDpcbi1cbitcdG1vdmV3XHQjLkxtYXhfcmV0cnksICVkMlxuKy5MZGF0YV9jcmMwOlxuIFx0dHN0Ylx0JWEyQFxuLVx0ZGJtaVx0JWQyLCBkYXRhX2NyYzBcbi1cdGJwbFx0ZGF0YV9leGl0XG4rXHRkYm1pXHQlZDIsIC5MZGF0YV9jcmMwXG4rXHRicGxcdC5MZGF0YV9leGl0XG4gXG4tXHRtb3ZlYlx0JWEzQCwgJWQ1XG4rXHRtb3ZlYlx0JWE1QCwgJWQyXG4gXG4tXHRtb3ZlcVx0I21heF9yZXRyeSwgJWQyXG4tXG4tZGF0YV9jcmMxOlxuLVxuLVx0dHN0Ylx0JWEyQFxuLVx0ZGJtaVx0JWQyLCBkYXRhX2NyYzFcbi1cdGJwbFx0ZGF0YV9leGl0XG4tXG4tXHRtb3ZlYlx0JWEzQCwgJWQ1XG4rXHRtb3ZlcVx0Iy5MbWF4X3JldHJ5LCAlZDJcbisuTGRhdGFfY3JjMTpcbitcdG1vdmViXHQlYTJALCAlZDVcbitcdGRibWlcdCVkMiwgLkxkYXRhX2NyYzFcbitcdGJwbFx0LkxkYXRhX2V4aXRcbiBcbi1cdHRzdGJcdCVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaylcbitcdG1vdmViXHQlYTVALCAlZDJcbiBcbi1cdG1vdmViXHQjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaylcbitcdGFuZGJcdCMuTGhyX2NyY19lcnJvciwgJWQ1XG4rXHRibmVcdC5MZGF0YV9leGl0XG4gXG4gXHQvKiByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHJlYWQgKi9cbiBcbi1cdG1vdmVsXHQjc2VjdG9yX3NpemUsICVkMFxuK1x0bW92ZWxcdCMuTHNlY3Rvcl9zaXplLCAlZDBcbiBcdGFkZHdcdCMxLCAlZDRcbiBcdHN1YmxcdCVkNCwgJWQwXG4tXHRydHNcbi1kYXRhX2V4aXQ6XG4tXHRtb3ZlYlx0IzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspXG4tXHRtb3ZlcVx0Iy0xLCAlZDBcbitcbisuTGRhdGFfZXhpdDpcbitcdG1vdmViXHQjLkxtcl93cml0ZV9hY3Rpb24sICVhM0AoLkx3cml0ZV9tb2RlMCAtIC5McmVhZF9tYXJrKVxuIFx0cnRzXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNToyNjo1NS45NzIwMjcyMzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTYwOTIyMDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFNXSU0gRmxvcHB5IERyaXZlciBQYXRjaCBmb3IgbTY4ayBNYWNzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyB0b3VjaGluZyBgYXJjaC9tNjhrL21hYy9jb25maWcuY2AsIGBkcml2ZXJzL2Jsb2NrL3N3aW0uY2AsIGFuZCBgZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIFwiU1dJTVwiIOKAkyBTYW5kZXIgV296bmlhayBJbnRlZ3JhdGVkIE1hY2hpbmUuIFRoYXQgc2NyZWFtcyBmbG9wcHkgY29udHJvbGxlciBkcml2ZXIgZm9yIG9sZGVyIG02OGsgTWFjcy4gQW5kIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBob25pbmcgaW4gb24gdGhhdC5cblxuSXQgbG9va3MgbGlrZSB0aGUgcHJpbWFyeSBmb2N1cyBpcyBhYm91dCBwcm9wZXJseSBjb25maWd1cmluZyB0aGUgXCJzd2ltXCIgZGV2aWNlLCBzcGVjaWZpY2FsbHkgYnkgcGFzc2luZyBhIGBkYXRhYCBwYXJhbWV0ZXIgdG8gYHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9yZXNuZGF0YWAuIFRoYXQgYGRhdGFgIGlzIGxpa2VseSBrZXlpbmcgb2ZmIHRoZSBNYWMgbW9kZWwgdG8gc2V0IGBTX0ZDTEtfRElWMmAsIHdoaWNoIG1ha2VzIHNlbnNlOyB0aGUgY2xvY2sgZnJlcXVlbmN5IHZhcmllcyBhY3Jvc3MgdGhvc2Ugb2xkIG1hY2hpbmVzLCBhbmQgdGhlIGRyaXZlciBuZWVkcyB0byBhZGp1c3QgYWNjb3JkaW5nbHkuXG5cbkkgc2VlIGNoYW5nZXMgdG8gYHN3aW0uY2AgdGhhdCByZXBsYWNlIGBzY2hlZHVsZV90aW1lb3V0YCB3aXRoIGBwb2xsX3RpbWVvdXRfdXNgIGFuZCBgcG9sbF90aW1lb3V0X3VzX2F0b21pY2AuIFRoYXTigJlzIGEgZ29vZCBzaWduOyB0aG9zZSBwb2xsaW5nIHByaW1pdGl2ZXMgYXJlIHVzdWFsbHkgYSBiZXR0ZXIgZml0IGZvciBoYXJkd2FyZSBpbnRlcmFjdGlvbnMuIFBsdXMsIHRoZXJlIGFyZSBzb21lIG1hY3JvIGFuZCBjb25zdGFudCB0d2Vha3MsIGFuZCBpdCBsb29rcyBsaWtlIGEgbmV3IHRpbWVvdXQsIGBzd2ltX1JFQURZX3RpbWVvdXRgLCBoYXMgYmVlbiBhZGRlZC4gVGhlcmUgYXJlIGNoYW5nZXMgdG8gdGhlIGBzd2ltX3JlYWRfc2VjdG9yX3JhbmdlYCBhbmQgYGZsb3BweV9yZWFkX3NlY3RvcnNgIGZ1bmN0aW9ucywgc28gdGhpcyBpcyBsaWtlbHkgYWJvdXQgaW1wcm92aW5nIHJlYWQgcGVyZm9ybWFuY2Ugb3IgcmVsaWFiaWxpdHkuXG5cblRoZSBgc3dpbV9hc20uU2AgY2hhbmdlIGlzIGludGVyZXN0aW5nLCB0b28uIExvY2FsIGxhYmVscyBhbmQgc29tZSBsb2dpYyB1cGRhdGVzIGluIGFzc2VtYmx5PyBJdCBzdWdnZXN0cyB0aGV5J3JlIGxpa2VseSByZWZpbmluZyB0aGUgbG93LWxldmVsIGhhcmR3YXJlIGludGVyYWN0aW9uLlxuXG5Ob3csIG15IG1pbmQgZ29lcyB0byB0ZXN0aW5nLiBJcyB0aGlzIHBhdGNoIGV2ZW4gdGVzdGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhlIGBzd2ltYCBkcml2ZXIgaXMgc28gc3BlY2lmaWMgdG8gdGhvc2Ugb2xkZXIgTWFjcy4gQ2FuIEkgZW11bGF0ZSB0aGF0PyBIbW0sIFFFTVXigKYgbGV0IG1lIGNoZWNrLiBBaCwgeWVzISBRRU1VIGhhcyB0aGF0IGBxODAwYCBtYWNoaW5lLCBhIE1hYyBRdWFkcmEgODAwLiBBbmQgdGhlIFF1YWRyYSA4MDAgaXMgb25lIG9mIHRoZSBtb2RlbHMgdGhhdCB1c2UgdGhlIDMyTUh6IEZDTEssIGBNQUNfTU9ERUxfUTgwMGAuIEdvb2QsIHRoYXQncyBwb3RlbnRpYWxseSB0ZXN0YWJsZS4gVGhpcyBkcml2ZXIgaXMgaW4gYGRyaXZlcnMvYmxvY2svc3dpbS5jYC4gTm93LCBsZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhhdCBgQ09ORklHX0JMS19ERVZfU1dJTWAgaXMgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUgYnVpbGQuIEknbGwgdXNlIG15IGdyZXBwZXIgdG9vbCBmb3IgYSBxdWljayBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2NTIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNToyNzowMy41MzI5NTE4MjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY0NDA3NjMxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCTEtfREVWX1NXSU1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZz0yNDg9Q09ORklHX0NPTk5FQ1RPUj1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZzoyNDk6Q09ORklHX0JMS19ERVZfU1dJTT1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZy0yNTAtQ09ORklHX1pSQU09bVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnPTI3Nj1DT05GSUdfQVRBUklfRkxPUFBZPXlcXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWc6Mjc3OkNPTkZJR19CTEtfREVWX1NXSU09bVxcbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZy0yNzgtQ09ORklHX0FNSUdBX1oyUkFNPXlcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZz02MT1jb25maWcgTUFDX0ZMT1BQWVxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTY3LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzo2ODpjb25maWcgQkxLX0RFVl9TV0lNXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTY5LVxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IGZvciBTV0lNIE1hY2ludG9zaCBmbG9wcHlcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTEyPW9iai0kKENPTkZJR19NQUNfRkxPUFBZKVxcdCs9IHN3aW0zLm9cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19CTEtfREVWX1NXSU0pXFx0Kz0gc3dpbV9tb2Qub1xcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtMTQtb2JqLSQoQ09ORklHX0JMS19ERVZfRkQpXFx0Kz0gZmxvcHB5Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTU6Mjc6MDYuMTc3MDM3NjQxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2ODE1NTQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiBoZXJlLlxuXG4qKkFuYWx5emluZyB0aGUgQkxLX0RFVl9TV0lNIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gdGhlIHN5c3RlbSdzIGNvbmZpZ3VyZWQgd2l0aCBgQkxLX0RFVl9TV0lNYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBsZXQncyBzZWUgd2hhdCBkZXBlbmRzIG9uIHRoYXQuIEkga25vdyBLY29uZmlnIGlzIHRoZSBwbGFjZSB0byBzdGFydCwgc28gSSdsbCBqdW1wIHJpZ2h0IGludG8gYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlbGF0ZWQgdG8gYEJMS19ERVZfU1dJTWAuIE1heWJlIGl0IHJlbGllcyBvbiBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIG9yIG90aGVyIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIG9yIGFueSBwcmVyZXF1aXNpdGVzIHRoYXQgYXJlIGVuZm9yY2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg3NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE1OjI3OjEwLjU0NTE5ODE3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTQ4NjAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9TV0lNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWc9NjE9Y29uZmlnIE1BQ19GTE9QUFlcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy02Ny1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6Njg6Y29uZmlnIEJMS19ERVZfU1dJTVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy02OS1cXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCBmb3IgU1dJTSBNYWNpbnRvc2ggZmxvcHB5XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNToyNzoxMC42NTA2OTAwMzhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjUxNzgwMTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9uIGlzIHN0cnVjdHVyZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGhlYWQgc3RyYWlnaHQgaW50byB0aGUgc291cmNlIGFuZCBzZWUgdGhlIGFjdHVhbCBLY29uZmlnIGZpbGUuIExldCdzIHN0YXJ0IHdpdGggYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AsIGFuZCBteSBpbnN0aW5jdCB0ZWxscyBtZSB0byB6b29tIGluIGFyb3VuZCBsaW5lIDY4LiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGRlcGVuZGVuY2llcyBhbmQgb3B0aW9ucyBhdmFpbGFibGUgZm9yIGNvbmZpZ3VyaW5nIGJsb2NrIGRldmljZXMuIEkgZXhwZWN0IHRvIGdldCBhIHNlbnNlIG9mIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIHN5bWJvbHMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgaGVscCB0ZXh0IHJpZ2h0IGFyb3VuZCB0aGVyZS4gVGhpcyBzaG91bGQgcXVpY2tseSBvcmllbnQgbWUgdG8gdGhlIGNvcmUgYmxvY2sgZGV2aWNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE3NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE1OjI3OjE0LjkwMjQ3Mjg1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRcXG4gIDYxOlxcdGNvbmZpZyBNQUNfRkxPUFBZXFxuICA2MjpcXHRcXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCBmb3IgUG93ZXJNYWMgZmxvcHB5XFxcIlxcbiAgNjM6XFx0XFx0ZGVwZW5kcyBvbiBQUENfUE1BQyBcXHUwMDI2XFx1MDAyNiAhUFBDX1BNQUM2NFxcbiAgNjQ6XFx0XFx0aGVscFxcbiAgNjU6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIFNXSU0tMyAoU3VwZXIgV296IEludGVncmF0ZWQgTWFjaGluZSAzOyBmcm9tIEFwcGxlKVxcbiAgNjY6XFx0XFx0ICBmbG9wcHkgY29udHJvbGxlciwgc2F5IFkgaGVyZS4gTW9zdCBjb21tb25seSBmb3VuZCBpbiBQb3dlck1hY3MuXFxuICA2NzpcXHRcXG4gIDY4OlxcdGNvbmZpZyBCTEtfREVWX1NXSU1cXG4gIDY5OlxcdFxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IGZvciBTV0lNIE1hY2ludG9zaCBmbG9wcHlcXFwiXFxuICA3MDpcXHRcXHRkZXBlbmRzIG9uIE02OEsgXFx1MDAyNlxcdTAwMjYgTUFDIFxcdTAwMjZcXHUwMDI2ICFISUdITUVNXFxuICA3MTpcXHRcXHRoZWxwXFxuICA3MjpcXHRcXHQgIFlvdSBzaG91bGQgc2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IGZsb3BweSBzdXBwb3J0XFxuICA3MzpcXHRcXHQgIGFuZCB5b3UgZG9uJ3QgaGF2ZSBhIElJLCBJSWZ4LCBROTAwLCBROTUwIG9yIEFWIHNlcmllcy5cXG4gIDc0OlxcdFxcbiAgNzU6XFx0Y29uZmlnIEFNSUdBX1oyUkFNXFxuICA3NjpcXHRcXHR0cmlzdGF0ZSBcXFwiQW1pZ2EgWm9ycm8gSUkgcmFtZGlzayBzdXBwb3J0XFxcIlxcbiAgNzc6XFx0XFx0ZGVwZW5kcyBvbiBaT1JST1xcbiAgNzg6XFx0XFx0aGVscFxcbiAgNzk6XFx0XFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdXNpbmcgQ2hpcCBSQU0gYW5kIFpvcnJvIElJIFJBTSBhcyBhXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE1OjI3OjE0LjkwMjYxODQ5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUzNTYzNjAyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqU1dJTSBGbG9wcHkgRHJpdmVyIEFuYWx5c2lzIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggdG91Y2hpbmcgdGhlIFNXSU0gZmxvcHB5IGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciBtNjhrIE1hY3MuIFRoZSBkZXBlbmRlbmN5IGlzIGBNNjhLIFx1MDAyNlx1MDAyNiBNQUMgXHUwMDI2XHUwMDI2ICFISUdITUVNYCwgbWFraW5nIGl0IGFyY2hpdGVjdHVyZS1zcGVjaWZpYy4gQ3J1Y2lhbGx5LCBRRU1VIHN1cHBvcnRzIGEgYHE4MDBgIG1hY2hpbmUsIHdoaWNoIGlzIGEgTWFjIFF1YWRyYSA4MDAuIFRoaXMgaXMgYSBzb2xpZCBpbmRpY2F0b3IgdGhhdCB0aGlzIGRyaXZlciBpcyAqcmVhY2hhYmxlKiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCB3aGljaCBpcyBleGNlbGxlbnQgbmV3cyBmb3IgdXMuIFdoaWxlIHN5emthbGxlciB0eXBpY2FsbHkgdGFyZ2V0cyBhcmNoaXRlY3R1cmVzIGxpa2UgeDg2XzY0LCBBUk02NCwgYW5kIFJJU0MtViwgaXQgZG9lcyBoYXZlIG02OGsgc3VwcG9ydC4gSXQgbWlnaHQgbm90IGJlICphY3RpdmVseSogZnV6emVkIGluIGV2ZXJ5IGluc3RhbmNlLCBidXQgaWYgaXQncyByZWFjaGFibGUgaW4gUUVNVSwgd2UgY2FuIGFic29sdXRlbHkgYXNzdW1lIGl0IGNhbiBiZSB0YXJnZXRlZCBieSBzeXprYWxsZXIuXG5cbklzIHRoZSBkcml2ZXIgaXRzZWxmIHJlYWNoYWJsZT8gSXQgYXBwZWFycyB0byBiZSBhIHBsYXRmb3JtIGRyaXZlciBmb3IgXCJzd2ltLlwiIExldCdzIGNvbmZpcm0gdGhhdCBieSBjaGVja2luZyBgc3dpbV9wcm9iZWAuIFllcCwgaXQncyBhIHBsYXRmb3JtIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciBcInN3aW0sXCIgYW5kIGl0J3MgaW5pdGlhbGl6ZWQgZHVyaW5nIGBtYWNfcGxhdGZvcm1faW5pdGAgaW4gYGFyY2gvbTY4ay9tYWMvY29uZmlnLmNgLiBUaGlzIG1lYW5zIGl0ICp3aWxsKiBiZSBwcm9iZWQgYXQgYm9vdCBpZiB0aGUgaGFyZHdhcmUgaXMgcHJlc2VudC4gVGhlIGRyaXZlciBpcyBleHBvc2luZyBhIGJsb2NrIGRldmljZSwgYW5kIHRoYXQncyBleGFjdGx5IHdoYXQgd2Ugd2FudC4gVGhlIGJsb2NrIGRldmljZSBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIGJ5IGBzd2ltX21xX29wc2AsIHdoaWNoIGludGVybmFsbHkgdXNlcyBgc3dpbV9xdWV1ZV9ycWAuIFRoZXJlIGFyZSBhbHNvIGlvY3RscywgaGFuZGxlZCBieSBgZmxvcHB5X2lvY3RsYC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIFRoaXMgbGlzdCBpcyBhIGdvbGRtaW5lOiBgc3dpbV9mbG9wcHlfaW5pdGAsIGBzd2ltX3Byb2JlYCwgYHN3aW1fYWRkX2Zsb3BweWAsIGBmbG9wcHlfaW9jdGxgLCBgZmxvcHB5X3JlbGVhc2VgLCBgZmxvcHB5X29wZW5gLCBgc2V0dXBfbWVkaXVtYCwgYGdldF9mbG9wcHlfZ2VvbWV0cnlgLCBgc3dpbV9xdWV1ZV9ycWAsIGBmbG9wcHlfcmVhZF9zZWN0b3JzYCwgYHN3aW1fcmVhZF9zZWN0b3JfcmFuZ2VgLCBgZmxvcHB5X2VqZWN0YCwgYHN3aW1fdHJhY2tgLCBgc3dpbV9zZWVrYCwgYHN3aW1fdHJhY2swMGAsIGBzd2ltX3N0ZXBgLCBgc3dpbV9oZWFkYCwgYHN3aW1fZWplY3RgLCBgc3dpbV9tb3RvcmAsIGBzd2ltX2RyaXZlYCwgYHN3aW1fcmVhZGJpdGAsIGBzd2ltX2FjdGlvbmAsIGBzd2ltX3NlbGVjdGAsIGBnZXRfc3dpbV9tb2RlYCwgYHNldF9zd2ltX21vZGVgLCBhbmQgZXZlbiBgc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXJgIGFuZCBgc3dpbV9yZWFkX3NlY3Rvcl9kYXRhYCAoaW4gYXNzZW1ibHkpLlxuXG5TbywgaXMgdGhpcyBkcml2ZXIgd29ydGggZnV6emluZz8gQWJzb2x1dGVseSEgSXQncyBhIGZsb3BweSBkcml2ZXIgZm9yIG02OGsgTWFjcy4gSXQncyBmdW5jdGlvbmFsIGNvcmUgbG9naWMuIEdpdmVuIFFFTVUncyBgcTgwMGAgbWFjaGluZSwgd2hpY2ggaGFzIGEgU1dJTSBmbG9wcHkgY29udHJvbGxlciwgd2UgY2FuIHRhcmdldCBpdC4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSAqRm9jdXNTeW1ib2xzKi4gV2UgbmVlZCB0byBwaW5wb2ludCB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGNyaXRpY2FsIGVudHJ5IHBvaW50cy4gVGhlc2UgYXJlOiBgZmxvcHB5X2lvY3RsYCwgYGZsb3BweV9vcGVuYCwgYGZsb3BweV9yZWxlYXNlYCwgYHN3aW1fcXVldWVfcnFgLCBgZmxvcHB5X3JlYWRfc2VjdG9yc2AsIGBzd2ltX3JlYWRfc2VjdG9yX3JhbmdlYCwgYGZsb3BweV9lamVjdGAsIGBzd2ltX2FkZF9mbG9wcHlgLCBgc3dpbV9mbG9wcHlfaW5pdGAsIGFuZCBgc3dpbV9wcm9iZWAuXG5cbmBzd2ltX3F1ZXVlX3JxYCBpcyBjcnVjaWFsOyBpdCdzIHRoZSBibG9jayBkZXZpY2UgcXVldWUgcmVxdWVzdCBmdW5jdGlvbi4gYGZsb3BweV9pb2N0bGAgaGFuZGxlcyBpb2N0bHMuIGBmbG9wcHlfb3BlbmAgYW5kIGBmbG9wcHlfcmVsZWFzZWAgYXJlIHRoZSBvcGVuL3JlbGVhc2UgaGFuZGxlcnMuICBgc3dpbV9wcm9iZWAgaXMgdGhlIHByb2JlIGZ1bmN0aW9uLlxuXG5XZSBhbHNvIGhhdmUgYSBsb3Qgb2Ygb3RoZXIgZnVuY3Rpb25zIHRoYXQgYXJlIHdvcnRoIGtub3dpbmcgYWJvdXQ6IGBmbG9wcHlfaW9jdGxgLCBgc3dpbV9xdWV1ZV9ycWAsIGBmbG9wcHlfcmVhZF9zZWN0b3JzYCwgYHN3aW1fcmVhZF9zZWN0b3JfcmFuZ2VgLCBgZmxvcHB5X2VqZWN0YCwgYHN3aW1fdHJhY2tgLCBgc3dpbV9zZWVrYCwgYHN3aW1fdHJhY2swMGAsIGBzd2ltX3N0ZXBgLCBgc3dpbV9tb3RvcmAsIGBzd2ltX2RyaXZlYCwgYHN3aW1fYWN0aW9uYCwgYHN3aW1fc2VsZWN0YCwgYHN3aW1fcmVhZF9zZWN0b3JfaGVhZGVyYCwgYW5kIGBzd2ltX3JlYWRfc2VjdG9yX2RhdGFgLlxuXG5Ib3dldmVyLCBgc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXJgIGFuZCBgc3dpbV9yZWFkX3NlY3Rvcl9kYXRhYCBhcmUgaW4gYXNzZW1ibHksIHNvIHRoZXkgbWlnaHQgbm90IGJlIGluc3RydW1lbnRlZCBieSBLQVNBTi9LQ09WLCB3aGljaCBpcyBjcnVjaWFsIGZvciBmdXp6aW5nLiBMZXQncyBmb2N1cyBvbiB0aGUgQyBmdW5jdGlvbnMuXG5cblNvLCBsZXQncyByZWZpbmUgdGhpcyB0byBtYWtlIGl0IGEgYml0IG1vcmUgZm9jdXNlZDogYGZsb3BweV9pb2N0bGAsIGBzd2ltX3F1ZXVlX3JxYCwgYGZsb3BweV9yZWFkX3NlY3RvcnNgLCBgc3dpbV9yZWFkX3NlY3Rvcl9yYW5nZWAsIGBmbG9wcHlfZWplY3RgLCBgc3dpbV90cmFja2AsIGBzd2ltX3NlZWtgLCBgc3dpbV90cmFjazAwYCwgYHN3aW1fc3RlcGAsIGBzd2ltX21vdG9yYCwgYHN3aW1fZHJpdmVgLCBgc3dpbV9hY3Rpb25gLCBgc3dpbVxuXG4iLCJJbnB1dFRva2VucyI6MTg2ODksIk91dHB1dFRva2VucyI6MjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE1OjI3OjQwLjI1ODk4MTM2NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Njc3NDY5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9TV0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3dpbV9xdWV1ZV9ycVwiLFxuICAgIFwiZmxvcHB5X3JlYWRfc2VjdG9yc1wiLFxuICAgIFwic3dpbV9yZWFkX3NlY3Rvcl9yYW5nZVwiLFxuICAgIFwiZmxvcHB5X2lvY3RsXCIsXG4gICAgXCJmbG9wcHlfb3BlblwiLFxuICAgIFwiZmxvcHB5X3JlbGVhc2VcIixcbiAgICBcInN3aW1fcHJvYmVcIixcbiAgICBcInN3aW1fZmxvcHB5X2luaXRcIixcbiAgICBcInN3aW1fYWRkX2Zsb3BweVwiLFxuICAgIFwic2V0dXBfbWVkaXVtXCIsXG4gICAgXCJmbG9wcHlfZWplY3RcIixcbiAgICBcInN3aW1fdHJhY2tcIixcbiAgICBcInN3aW1fc2Vla1wiLFxuICAgIFwic3dpbV90cmFjazAwXCIsXG4gICAgXCJzd2ltX3N0ZXBcIixcbiAgICBcInN3aW1fbW90b3JcIixcbiAgICBcInN3aW1fZHJpdmVcIixcbiAgICBcInN3aW1fYWN0aW9uXCIsXG4gICAgXCJzd2ltX3NlbGVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgU1dJTSBmbG9wcHkgY29udHJvbGxlciBkcml2ZXIgZm9yIG02OGsgTWFjaW50b3NoIHN5c3RlbXMsIGluY2x1ZGluZyBjaGFuZ2VzIHRvIGRldmljZSByZWdpc3RyYXRpb24sIGluaXRpYWxpemF0aW9uLCByZWFkaW5nIHNlY3RvcnMsIGFuZCBoYW5kbGluZyBoYXJkd2FyZSBzdGF0ZS4gVGhlIGRyaXZlciBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSAodXNpbmcgdGhlIGBxODAwYCBtYWNoaW5lKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIGJsb2NrIGRldmljZSBvcGVyYXRpb25zLCBpb2N0bHMsIGFuZCBoYXJkd2FyZSBpbnRlcmFjdGlvbiBmdW5jdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9TV0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3dpbV9xdWV1ZV9ycVwiLFxuICAgIFwiZmxvcHB5X3JlYWRfc2VjdG9yc1wiLFxuICAgIFwic3dpbV9yZWFkX3NlY3Rvcl9yYW5nZVwiLFxuICAgIFwiZmxvcHB5X2lvY3RsXCIsXG4gICAgXCJmbG9wcHlfb3BlblwiLFxuICAgIFwiZmxvcHB5X3JlbGVhc2VcIixcbiAgICBcInN3aW1fcHJvYmVcIixcbiAgICBcInN3aW1fZmxvcHB5X2luaXRcIixcbiAgICBcInN3aW1fYWRkX2Zsb3BweVwiLFxuICAgIFwic2V0dXBfbWVkaXVtXCIsXG4gICAgXCJmbG9wcHlfZWplY3RcIixcbiAgICBcInN3aW1fdHJhY2tcIixcbiAgICBcInN3aW1fc2Vla1wiLFxuICAgIFwic3dpbV90cmFjazAwXCIsXG4gICAgXCJzd2ltX3N0ZXBcIixcbiAgICBcInN3aW1fbW90b3JcIixcbiAgICBcInN3aW1fZHJpdmVcIixcbiAgICBcInN3aW1fYWN0aW9uXCIsXG4gICAgXCJzd2ltX3NlbGVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgU1dJTSBmbG9wcHkgY29udHJvbGxlciBkcml2ZXIgZm9yIG02OGsgTWFjaW50b3NoIHN5c3RlbXMsIGluY2x1ZGluZyBjaGFuZ2VzIHRvIGRldmljZSByZWdpc3RyYXRpb24sIGluaXRpYWxpemF0aW9uLCByZWFkaW5nIHNlY3RvcnMsIGFuZCBoYW5kbGluZyBoYXJkd2FyZSBzdGF0ZS4gVGhlIGRyaXZlciBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSAodXNpbmcgdGhlIGBxODAwYCBtYWNoaW5lKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIGJsb2NrIGRldmljZSBvcGVyYXRpb25zLCBpb2N0bHMsIGFuZCBoYXJkd2FyZSBpbnRlcmFjdGlvbiBmdW5jdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowr868c[1] Phase: Succeeded StartedAt: 2026-07-16 15:27:43 +0000 UTC FinishedAt: 2026-07-16 15:27:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr868c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-16 15:27:43 +0000 UTC FinishedAt: 2026-07-16 15:27:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr868c[2] Phase: Succeeded StartedAt: 2026-07-16 15:27:43 +0000 UTC FinishedAt: 2026-07-16 17:13:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-16 15:27:43 +0000 UTC FinishedAt: 2026-07-16 17:13:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-16 15:27:43 +0000 UTC FinishedAt: 2026-07-16 15:27:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-16 15:27:43 +0000 UTC FinishedAt: 2026-07-16 15:27:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowr868c/series-workflowr868c-convert-artifact-3323904682/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-16 15:27:54 +0000 UTC FinishedAt: 2026-07-16 16:09:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-16 15:27:54 +0000 UTC FinishedAt: 2026-07-16 16:09:07 +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:*1865ebcb-861d-497c-b3c4-35f2c0bf4a1c,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-workflowr868c/series-workflowr868c-convert-artifact-3323904682/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": "da0da5eb-abc4-4524-b91a-8811a979f27f", "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-workflowr868c/series-workflowr868c-build-action-711212056/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-16 15:27:54 +0000 UTC FinishedAt: 2026-07-16 16:08:57 +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:*1865ebcb-861d-497c-b3c4-35f2c0bf4a1c,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-workflowr868c/series-workflowr868c-convert-artifact-3323904682/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": "da0da5eb-abc4-4524-b91a-8811a979f27f", "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-workflowr868c/series-workflowr868c-build-action-711212056/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-16 16:09:07 +0000 UTC FinishedAt: 2026-07-16 16:09:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-16 16:09:07 +0000 UTC FinishedAt: 2026-07-16 16:09:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-16 16:09:07 +0000 UTC FinishedAt: 2026-07-16 16:09:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-16 16:09:07 +0000 UTC FinishedAt: 2026-07-16 16:09:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowr868c/series-workflowr868c-convert-artifact-1525014981/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-16 16:09:17 +0000 UTC FinishedAt: 2026-07-16 16:11:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-16 16:09:17 +0000 UTC FinishedAt: 2026-07-16 16:11:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*da0da5eb-abc4-4524-b91a-8811a979f27f,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-workflowr868c/series-workflowr868c-build-action-711212056/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-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-16 16:11:18 +0000 UTC FinishedAt: 2026-07-16 16:11:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-16 16:11:18 +0000 UTC FinishedAt: 2026-07-16 16:11:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-16 16:11:18 +0000 UTC FinishedAt: 2026-07-16 17:06:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-16 16:11:18 +0000 UTC FinishedAt: 2026-07-16 17:06:12 +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:*1865ebcb-861d-497c-b3c4-35f2c0bf4a1c,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-workflowr868c/series-workflowr868c-convert-artifact-1525014981/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": "66a96844-9bd1-450e-a393-6e4ac353037d", "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-workflowr868c/series-workflowr868c-build-action-3367061009/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-16 16:11:18 +0000 UTC FinishedAt: 2026-07-16 17:05:44 +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:*1865ebcb-861d-497c-b3c4-35f2c0bf4a1c,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-workflowr868c/series-workflowr868c-convert-artifact-1525014981/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": "66a96844-9bd1-450e-a393-6e4ac353037d", "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-workflowr868c/series-workflowr868c-build-action-3367061009/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-16 17:06:12 +0000 UTC FinishedAt: 2026-07-16 17:06:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-16 17:06:12 +0000 UTC FinishedAt: 2026-07-16 17:06:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-16 17:06:12 +0000 UTC FinishedAt: 2026-07-16 17:08:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-16 17:06:12 +0000 UTC FinishedAt: 2026-07-16 17:07:56 +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:*66a96844-9bd1-450e-a393-6e4ac353037d,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-workflowr868c/series-workflowr868c-build-action-3367061009/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-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-16 17:08:06 +0000 UTC FinishedAt: 2026-07-16 17:13:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-16 17:08:06 +0000 UTC FinishedAt: 2026-07-16 17:13:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*da0da5eb-abc4-4524-b91a-8811a979f27f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*66a96844-9bd1-450e-a393-6e4ac353037d,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-workflowr868c/series-workflowr868c-build-action-711212056/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-workflowr868c/series-workflowr868c-build-action-3367061009/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-16 17:08:06 +0000 UTC FinishedAt: 2026-07-16 17:08:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-16 17:08:06 +0000 UTC FinishedAt: 2026-07-16 17:08:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr868c/series-workflowr868c-convert-artifact-3051024202/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-16 17:08:06 +0000 UTC FinishedAt: 2026-07-16 17:08:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-16 17:08:06 +0000 UTC FinishedAt: 2026-07-16 17:08:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-16 17:08:06 +0000 UTC FinishedAt: 2026-07-16 17:08:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-16 17:08:16 +0000 UTC FinishedAt: 2026-07-16 17:13:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr868c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["swim_queue_rq","floppy_read_sectors","swim_read_sector_range","floppy_ioctl","floppy_open","floppy_release","swim_probe","swim_floppy_init","swim_add_floppy","setup_medium","floppy_eject","swim_track","swim_seek","swim_track00","swim_step","swim_motor","swim_drive","swim_action","swim_select"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_SWIM"],"series_id":"f2acb52f-a55a-470e-a324-b7bfd8dd2e80","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-16 17:08:16 +0000 UTC FinishedAt: 2026-07-16 17:13:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*da0da5eb-abc4-4524-b91a-8811a979f27f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*66a96844-9bd1-450e-a393-6e4ac353037d,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-workflowr868c/series-workflowr868c-build-action-711212056/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-workflowr868c/series-workflowr868c-build-action-3367061009/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-workflowr868c/series-workflowr868c-convert-artifact-3051024202/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,}