Name: series-workflow2n5bz Phase: Running StartedAt: 2026-07-02 03:21:22 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n5bz[0] Phase: Running StartedAt: 2026-07-02 03:21:22 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n5bz[0].run-triage Phase: Running StartedAt: 2026-07-02 03:21:22 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n5bz[0].run-triage(0) Phase: Running StartedAt: 2026-07-02 03:21:22 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4f441960e691d37c880d2cc004de06bb5b6bd5e4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4f441960e691d37c880d2cc004de06bb5b6bd5e4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING" ], "series_id": "268abf8e-c3f8-4239-8cb8-e82db1416a72" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "alloc_frozen_pages_nolock_noprof", "alloc_pages_node_noprof" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAzOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19mcm96ZW5fcGFnZXNfbm9sb2NrX25vcHJvZiYjMzQ7LAogICAgJiMzNDthbGxvY19wYWdlc19ub2RlX25vcHJvZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGludGVybmFsIHBhZ2UgYWxsb2NhdG9yIEFQSSBieSBpbnRyb2R1Y2luZyBgYWxsb2NfZmxhZ3NgIHRvIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAgYW5kIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgLCByZXBsYWNpbmcgYF9fR0ZQX05PX09CSl9FWFRgIGFuZCBgQUxMT0NfVFJZTE9DS2Agd2l0aCBgQUxMT0NfTk9fQ09ERVRBR2AgYW5kIGBBTExPQ19OT0xPQ0tgLiBJdCBhbHNvIG1vdmVzIGBhbGxvY19wYWdlc19ub2RlX25vcHJvZmAgb3V0LW9mLWxpbmUuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gcGFnZSBhbGxvY2F0aW9uLCBlc3BlY2lhbGx5IGluIG5vbi1ibG9ja2luZy9ub2xvY2sgY29udGV4dHMgYW5kIG1lbW9yeSBwcm9maWxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDM6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlYmY0MDE4M2U2ZmJmMjcwNDZjODhlNTY0ODRkNzE3MDZkMDBiM2FiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAwMzoyOTozNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9jcHVzZXRzLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2NwdXNldHMucnN0XG5pbmRleCBjNzkwOWU1YWMxMzYxYS4uNTJhMjEzYWZmMDRlNWYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9jcHVzZXRzLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3RcbkBAIC0yODQsNyAmIzQzOzI4NCw3IEBAIHRha2UgYWN0aW9uLlxuID09XHUwMDNlXG4gICAgIFVubGVzcyB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBieSB3cml0aW5nIFwmIzM0OzFcJiMzNDsgdG8gdGhlIHNwZWNpYWwgZmlsZVxuICAgICAvZGV2L2NwdXNldC9tZW1vcnlfcHJlc3N1cmVfZW5hYmxlZCwgdGhlIGhvb2sgaW4gdGhlIHJlYmFsYW5jZVxuLSAgICBjb2RlIG9mIF9fYWxsb2NfcGFnZXMoKSBmb3IgdGhpcyBtZXRyaWMgcmVkdWNlcyB0byBzaW1wbHkgbm90aWNpbmdcbiYjNDM7ICAgIGNvZGUgb2YgdGhlIHBhZ2UgYWxsb2NhdG9yIGZvciB0aGlzIG1ldHJpYyByZWR1Y2VzIHRvIHNpbXBseSBub3RpY2luZ1xuICAgICB0aGF0IHRoZSBjcHVzZXRfbWVtb3J5X3ByZXNzdXJlX2VuYWJsZWQgZmxhZyBpcyB6ZXJvLiAgU28gb25seVxuICAgICBzeXN0ZW1zIHRoYXQgZW5hYmxlIHRoaXMgZmVhdHVyZSB3aWxsIGNvbXB1dGUgdGhlIG1ldHJpYy5cbiBcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3RcbmluZGV4IDIzZjhkMTNjMjYyOWQ2Li4xNmYzNzEzNWVkODBkZiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0XG5AQCAtNzYxLDcgJiM0Mzs3NjEsNyBAQCBjb21wYWN0X2ZhaWxcbiBcdGJ1dCBmYWlsZWQuXG4gXG4gSXQgaXMgcG9zc2libGUgdG8gZXN0YWJsaXNoIGhvdyBsb25nIHRoZSBzdGFsbHMgd2VyZSB1c2luZyB0aGUgZnVuY3Rpb25cbi10cmFjZXIgdG8gcmVjb3JkIGhvdyBsb25nIHdhcyBzcGVudCBpbiBfX2FsbG9jX3BhZ2VzKCkgYW5kXG4mIzQzO3RyYWNlciB0byByZWNvcmQgaG93IGxvbmcgd2FzIHNwZW50IGluIHRoZSBwYWdlIGFsbG9jYXRvciBhbmRcbiB1c2luZyB0aGUgbW1fcGFnZV9hbGxvYyB0cmFjZXBvaW50IHRvIGlkZW50aWZ5IHdoaWNoIGFsbG9jYXRpb25zIHdlcmVcbiBmb3IgaHVnZSBwYWdlcy5cbiBcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCBkYjNkOGM0NDFlNGMwMC4uZGU4NzkyMTE3NmIwZGMgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC0xNzE4MSw2ICYjNDM7MTcxODEsNyBAQCBGOlx0bW0vZGVidWdfcGFnZV9hbGxvYy5jXG4gRjpcdG1tL2RlYnVnX3BhZ2VfcmVmLmNcbiBGOlx0bW0vZmFpbF9wYWdlX2FsbG9jLmNcbiBGOlx0bW0vcGFnZV9hbGxvYy5jXG4mIzQzO0Y6XHRtbS9wYWdlX2FsbG9jLmhcbiBGOlx0bW0vcGFnZV9leHQuY1xuIEY6XHRtbS9wYWdlX2ZyYWdfY2FjaGUuY1xuIEY6XHRtbS9wYWdlX2lzb2xhdGlvbi5jXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmMgYi9hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuY1xuaW5kZXggZTg2ZTRiYTkxZTFiMzcuLjg5NDBmMDI5MjIyOWY1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jXG5AQCAtODMyLDcgJiM0Mzs4MzIsNyBAQCBzdGF0aWMgdm9pZCAqZHNhbGxvY19wYWdlcyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBjcHUpXG4gXHRpbnQgbm9kZSA9IGNwdV90b19ub2RlKGNwdSk7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcbi1cdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzX25vZGUobm9kZSwgZmxhZ3MgfCBfX0dGUF9aRVJPLCBvcmRlcik7XG4mIzQzO1x0cGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgZmxhZ3MgfCBfX0dGUF9aRVJPLCBvcmRlcik7XG4gXHRyZXR1cm4gcGFnZSA/IHBhZ2VfYWRkcmVzcyhwYWdlKSA6IE5VTEw7XG4gfVxuIFxuQEAgLTEwODgsOSAmIzQzOzEwODgsOSBAQCB2b2lkIGluaXRfYXJjaF9wZWJzX29uX2NwdShpbnQgY3B1KVxuIFxuIFx0LypcbiBcdCAqIDRLQi1hbGlnbmVkIHBvaW50ZXIgb2YgdGhlIG91dHB1dCBidWZmZXJcbi1cdCAqIChfX2FsbG9jX3BhZ2VzX25vZGUoKSByZXR1cm4gcGFnZSBhbGlnbmVkIGFkZHJlc3MpXG4mIzQzO1x0ICogKGFsbG9jX3BhZ2VzX25vZGUoKSByZXR1cm5zIHBhZ2UgYWxpZ25lZCBhZGRyZXNzKVxuIFx0ICogQnVmZmVyIFNpemUgPSA0S0IgKiAyXlNJWkVcbi1cdCAqIGNvbnRpZ3VvdXMgcGh5c2ljYWwgYnVmZmVyIChfX2FsbG9jX3BhZ2VzX25vZGUoKSB3aXRoIG9yZGVyKVxuJiM0MztcdCAqIGNvbnRpZ3VvdXMgcGh5c2ljYWwgYnVmZmVyIChhbGxvY19wYWdlc19ub2RlKCkgd2l0aCBvcmRlcilcbiBcdCAqL1xuIFx0YXJjaF9wZWJzX2Jhc2UgPSB2aXJ0X3RvX3BoeXMoY3B1Yy1cdTAwM2VwZWJzX3ZhZGRyKSB8IFBFQlNfQlVGRkVSX1NISUZUO1xuIFx0d3Jtc3JxX29uX2NwdShjcHUsIE1TUl9JQTMyX1BFQlNfQkFTRSwgYXJjaF9wZWJzX2Jhc2UpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5pbmRleCBhMDNhZGQwMGY5MjNlYy4uMjZmMTU1ODRkNGI1MDUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5AQCAtMzA0MCw3ICYjNDM7MzA0MCw3IEBAIHN0cnVjdCB2bWNzICphbGxvY192bWNzX2NwdShib29sIHNoYWRvdywgaW50IGNwdSwgZ2ZwX3QgZmxhZ3MpXG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZXM7XG4gXHRzdHJ1Y3Qgdm1jcyAqdm1jcztcbiBcbi1cdHBhZ2VzID0gX19hbGxvY19wYWdlc19ub2RlKG5vZGUsIGZsYWdzLCAwKTtcbiYjNDM7XHRwYWdlcyA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgZmxhZ3MsIDApO1xuIFx0aWYgKCFwYWdlcylcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR2bWNzID0gcGFnZV9hZGRyZXNzKHBhZ2VzKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L2h3LmMgYi9hcmNoL3g4Ni92aXJ0L2h3LmNcbmluZGV4IDdlOTA5MWM2NDBiZTBiLi5hMjM2NDQ3YWM3YTI2MiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3ZpcnQvaHcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvdmlydC9ody5jXG5AQCAtMTk2LDcgJiM0MzsxOTYsNyBAQCBzdGF0aWMgX19pbml0IGludCBfX3g4Nl92bXhfaW5pdCh2b2lkKVxuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdFx0c3RydWN0IHZtY3MgKnZtY3M7XG4gXG4tXHRcdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzX25vZGUobm9kZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIDApO1xuJiM0MztcdFx0cGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIDApO1xuIFx0XHRpZiAoV0FSTl9PTl9PTkNFKCFwYWdlKSkge1xuIFx0XHRcdHg4Nl92bXhfZXhpdCgpO1xuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX3V2LmMgYi9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY191di5jXG5pbmRleCA3NzJjNzg3MjY4OTMyNy4uYWFjZmY3MDIwNDI0MTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY191di5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY191di5jXG5AQCAtMTcwLDcgJiM0MzsxNzAsNyBAQCB4cGNfY3JlYXRlX2dydV9tcV91dih1bnNpZ25lZCBpbnQgbXFfc2l6ZSwgaW50IGNwdSwgY2hhciAqaXJxX25hbWUsXG4gXHRtcS1cdTAwM2VtbXJfYmxhZGUgPSB1dl9jcHVfdG9fYmxhZGVfaWQoY3B1KTtcbiBcbiBcdG5pZCA9IGNwdV90b19ub2RlKGNwdSk7XG4tXHRwYWdlID0gX19hbGxvY19wYWdlc19ub2RlKG5pZCxcbiYjNDM7XHRwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShuaWQsXG4gXHRcdFx0XHQgICAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyB8IF9fR0ZQX1RISVNOT0RFLFxuIFx0XHRcdFx0ICAgICAgcGdfb3JkZXIpO1xuIFx0aWYgKHBhZ2UgPT0gTlVMTCkge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9mdW5ldGhfcnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9mdW5ldGhfcnguY1xuaW5kZXggN2UyNTg0ODk1ZGUzOWIuLmQ3MDAwMDE3YWMyYmRjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnVuZ2libGUvZnVuZXRoL2Z1bmV0aF9yeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvZnVuZXRoX3J4LmNcbkBAIC0xMDMsNyAmIzQzOzEwMyw3IEBAIHN0YXRpYyBpbnQgZnVuZXRoX2FsbG9jX3BhZ2Uoc3RydWN0IGZ1bmV0aF9yeHEgKnEsIHN0cnVjdCBmdW5ldGhfcnhidWYgKnJiLFxuIFx0aWYgKGNhY2hlX2dldChxLCByYikpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cCA9IF9fYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAgfCBfX0dGUF9OT1dBUk4sIDApO1xuJiM0MztcdHAgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCB8IF9fR0ZQX05PV0FSTiwgMCk7XG4gXHRpZiAodW5saWtlbHkoIXApKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmcC5oIGIvaW5jbHVkZS9saW51eC9nZnAuaFxuaW5kZXggY2RmOTVhOWYwYjg3YzEuLjRkNTdlOWMwYmYyMDRkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9nZnAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9nZnAuaFxuQEAgLTE3LDI4ICYjNDM7MTcsNiBAQCBzdHJ1Y3QgbWVtcG9saWN5O1xuICNkZWZpbmUgX19kZWZhdWx0X2dmcChhLGIsLi4uKSBiXG4gI2RlZmluZSBkZWZhdWx0X2dmcCguLi4pIF9fZGVmYXVsdF9nZnAoLCMjX19WQV9BUkdTX18sR0ZQX0tFUk5FTClcbiBcbi0vKiBDb252ZXJ0IEdGUCBmbGFncyB0byB0aGVpciBjb3JyZXNwb25kaW5nIG1pZ3JhdGUgdHlwZSAqL1xuLSNkZWZpbmUgR0ZQX01PVkFCTEVfTUFTSyAoX19HRlBfUkVDTEFJTUFCTEV8X19HRlBfTU9WQUJMRSlcbi0jZGVmaW5lIEdGUF9NT1ZBQkxFX1NISUZUIDNcbi1cbi1zdGF0aWMgaW5saW5lIGludCBnZnBfbWlncmF0ZXR5cGUoY29uc3QgZ2ZwX3QgZ2ZwX2ZsYWdzKVxuLXtcbi1cdFZNX1dBUk5fT04oKGdmcF9mbGFncyBcdTAwMjYgR0ZQX01PVkFCTEVfTUFTSykgPT0gR0ZQX01PVkFCTEVfTUFTSyk7XG4tXHRCVUlMRF9CVUdfT04oKDFVTCBcdTAwM2NcdTAwM2MgR0ZQX01PVkFCTEVfU0hJRlQpICE9IF9fX0dGUF9NT1ZBQkxFKTtcbi1cdEJVSUxEX0JVR19PTigoX19fR0ZQX01PVkFCTEUgXHUwMDNlXHUwMDNlIEdGUF9NT1ZBQkxFX1NISUZUKSAhPSBNSUdSQVRFX01PVkFCTEUpO1xuLVx0QlVJTERfQlVHX09OKChfX19HRlBfUkVDTEFJTUFCTEUgXHUwMDNlXHUwMDNlIEdGUF9NT1ZBQkxFX1NISUZUKSAhPSBNSUdSQVRFX1JFQ0xBSU1BQkxFKTtcbi1cdEJVSUxEX0JVR19PTigoKF9fX0dGUF9NT1ZBQkxFIHwgX19fR0ZQX1JFQ0xBSU1BQkxFKSBcdTAwM2VcdTAwM2Vcbi1cdFx0ICAgICAgR0ZQX01PVkFCTEVfU0hJRlQpICE9IE1JR1JBVEVfSElHSEFUT01JQyk7XG4tXG4tXHRpZiAodW5saWtlbHkocGFnZV9ncm91cF9ieV9tb2JpbGl0eV9kaXNhYmxlZCkpXG4tXHRcdHJldHVybiBNSUdSQVRFX1VOTU9WQUJMRTtcbi1cbi1cdC8qIEdyb3VwIGJhc2VkIG9uIG1vYmlsaXR5ICovXG4tXHRyZXR1cm4gKF9fZm9yY2UgdW5zaWduZWQgbG9uZykoZ2ZwX2ZsYWdzIFx1MDAyNiBHRlBfTU9WQUJMRV9NQVNLKSBcdTAwM2VcdTAwM2UgR0ZQX01PVkFCTEVfU0hJRlQ7XG4tfVxuLSN1bmRlZiBHRlBfTU9WQUJMRV9NQVNLXG4tI3VuZGVmIEdGUF9NT1ZBQkxFX1NISUZUXG4tXG4gc3RhdGljIGlubGluZSBib29sIGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGNvbnN0IGdmcF90IGdmcF9mbGFncylcbiB7XG4gXHRyZXR1cm4gISEoZ2ZwX2ZsYWdzIFx1MDAyNiBfX0dGUF9ESVJFQ1RfUkVDTEFJTSk7XG5AQCAtMjI2LDEwICYjNDM7MjA0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZnJlZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpIHsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcikgeyB9XG4gI2VuZGlmXG4gXG4tc3RydWN0IHBhZ2UgKl9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcbi1cdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2spO1xuLSNkZWZpbmUgX19hbGxvY19wYWdlcyguLi4pXHRcdFx0YWxsb2NfaG9va3MoX19hbGxvY19wYWdlc19ub3Byb2YoX19WQV9BUkdTX18pKVxuLVxuIHN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxuIFx0XHRub2RlbWFza190ICpub2RlbWFzayk7XG4gI2RlZmluZSBfX2ZvbGlvX2FsbG9jKC4uLilcdFx0XHRhbGxvY19ob29rcyhfX2ZvbGlvX2FsbG9jX25vcHJvZihfX1ZBX0FSR1NfXykpXG5AQCAtMjc4LDIxICYjNDM7MjUyLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHdhcm5faWZfbm9kZV9vZmZsaW5lKGludCB0aGlzX25vZGUsIGdmcF90IGdmcF9tYXNrKVxuIFx0ZHVtcF9zdGFjaygpO1xuIH1cbiBcbi0vKlxuLSAqIEFsbG9jYXRlIHBhZ2VzLCBwcmVmZXJyaW5nIHRoZSBub2RlIGdpdmVuIGFzIG5pZC4gVGhlIG5vZGUgbXVzdCBiZSB2YWxpZCBhbmRcbi0gKiBvbmxpbmUuIEZvciBtb3JlIGdlbmVyYWwgaW50ZXJmYWNlLCBzZWUgYWxsb2NfcGFnZXNfbm9kZSgpLlxuLSAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKlxuLV9fYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YoaW50IG5pZCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcbi17XG4tXHRWTV9CVUdfT04obmlkIFx1MDAzYyAwIHx8IG5pZCBcdTAwM2U9IE1BWF9OVU1OT0RFUyk7XG4tXHR3YXJuX2lmX25vZGVfb2ZmbGluZShuaWQsIGdmcF9tYXNrKTtcbi1cbi1cdHJldHVybiBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnBfbWFzaywgb3JkZXIsIG5pZCwgTlVMTCk7XG4tfVxuLVxuLSNkZWZpbmUgIF9fYWxsb2NfcGFnZXNfbm9kZSguLi4pXHRcdGFsbG9jX2hvb2tzKF9fYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxuLVxuIHN0YXRpYyBpbmxpbmVcbiBzdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBuaWQpXG4ge1xuQEAgLTMwOSwxNCAmIzQzOzI2OCw3IEBAIHN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub2RlX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IG5pZClcbiAgKiBwcmVmZXIgdGhlIGN1cnJlbnQgQ1BVJiMzOTtzIGNsb3Nlc3Qgbm9kZS4gT3RoZXJ3aXNlIG5vZGUgbXVzdCBiZSB2YWxpZCBhbmRcbiAgKiBvbmxpbmUuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YoaW50IG5pZCwgZ2ZwX3QgZ2ZwX21hc2ssXG4tXHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgaW50IG9yZGVyKVxuLXtcbi1cdGlmIChuaWQgPT0gTlVNQV9OT19OT0RFKVxuLVx0XHRuaWQgPSBudW1hX21lbV9pZCgpO1xuLVxuLVx0cmV0dXJuIF9fYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YobmlkLCBnZnBfbWFzaywgb3JkZXIpO1xuLX1cbiYjNDM7c3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKGludCBuaWQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuIFxuICNkZWZpbmUgIGFsbG9jX3BhZ2VzX25vZGUoLi4uKVx0XHRcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKF9fVkFfQVJHU19fKSlcbiBcbkBAIC0zOTUsMTAgJiM0MzszNDcsNiBAQCBleHRlcm4gdm9pZCBmcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IG9yZGVyKTtcbiAjZGVmaW5lIF9fZnJlZV9wYWdlKHBhZ2UpIF9fZnJlZV9wYWdlcygocGFnZSksIDApXG4gI2RlZmluZSBmcmVlX3BhZ2UoYWRkcikgZnJlZV9wYWdlcygoYWRkciksIDApXG4gXG4tdm9pZCBwYWdlX2FsbG9jX2luaXRfY3B1aHAodm9pZCk7XG4tYm9vbCBkZWNheV9wY3BfaGlnaChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcCk7XG4tdm9pZCBkcmFpbl96b25lX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwKTtcbi12b2lkIGRyYWluX2FsbF9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSk7XG4gdm9pZCBkcmFpbl9sb2NhbF9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSk7XG4gXG4gdm9pZCBwYWdlX2FsbG9jX2luaXRfbGF0ZSh2b2lkKTtcbmRpZmYgLS1naXQgYS9tbS9hbGxvY190YWcuYyBiL21tL2FsbG9jX3RhZy5jXG5pbmRleCBkOWJlMWNmNTE4N2Q5Ny4uYTMyYTk0ZTc1OWI5NGIgMTAwNjQ0XG4tLS0gYS9tbS9hbGxvY190YWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vYWxsb2NfdGFnLmNcbkBAIC0xNSw2ICYjNDM7MTUsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ttZW1sZWFrLmhcdTAwM2VcbiBcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aW50ZXJuYWwuaFwmIzM0O1xuJiM0MztcbiAjZGVmaW5lIEFMTE9DSU5GT19GSUxFX05BTUVcdFx0XCYjMzQ7YWxsb2NpbmZvXCYjMzQ7XG4gI2RlZmluZSBNT0RVTEVfQUxMT0NfVEFHX1ZNQVBfU0laRVx0KDEwMDAwMFVMICogc2l6ZW9mKHN0cnVjdCBhbGxvY190YWcpKVxuICNkZWZpbmUgU0VDVElPTl9TVEFSVChOQU1FKVx0XHQoQ09ERVRBR19TRUNUSU9OX1NUQVJUX1BSRUZJWCBOQU1FKVxuQEAgLTc4MywxOSAmIzQzOzc4NSw2IEBAIHN0cnVjdCBwZm5fcG9vbCB7XG4gXG4gI2RlZmluZSBQRk5fUE9PTF9TSVpFXHRcdFx0KChQQUdFX1NJWkUgLSBvZmZzZXRvZihzdHJ1Y3QgcGZuX3Bvb2wsIHBmbnMpKSAvIFxcXG4gXHRcdFx0XHRcdCBzaXplb2YodW5zaWduZWQgbG9uZykpXG4tXG4tLypcbi0gKiBTa2lwIGVhcmx5IFBGTiByZWNvcmRpbmcgZm9yIGEgcGFnZSBhbGxvY2F0aW9uLiAgUmV1c2VzIHRoZVxuLSAqICVfX0dGUF9OT19PQkpfRVhUIGJpdC4gIFVzZWQgYnkgX19hbGxvY190YWdfYWRkX2Vhcmx5X3BmbigpIHRvIGF2b2lkXG4tICogcmVjdXJzaW9uIHdoZW4gYWxsb2NhdGluZyBwYWdlcyBmb3IgdGhlIGVhcmx5IFBGTiB0cmFja2luZyBsaXN0XG4tICogaXRzZWxmLlxuLSAqXG4tICogQ29kZXRhZ3Mgb2YgdGhlIHBhZ2VzIGFsbG9jYXRlZCB3aXRoIF9fR0ZQX05PX0NPREVUQUcgc2hvdWxkIGJlXG4tICogY2xlYXJlZCAodmlhIGNsZWFyX3BhZ2VfdGFnX3JlZigpKSBiZWZvcmUgZnJlZWluZyB0aGUgcGFnZXMgdG8gcHJldmVudFxuLSAqIGFsbG9jX3RhZ19zdWJfY2hlY2soKSBmcm9tIHRyaWdnZXJpbmcgYSB3YXJuaW5nLlxuLSAqL1xuLSNkZWZpbmUgX19HRlBfTk9fQ09ERVRBR1x0XHRfX0dGUF9OT19PQkpfRVhUXG4tXG4gc3RhdGljIHN0cnVjdCBwZm5fcG9vbCAqY3VycmVudF9wZm5fcG9vbCBfX2luaXRkYXRhO1xuIFxuIHN0YXRpYyB2b2lkIF9faW5pdCBfX2FsbG9jX3RhZ19hZGRfZWFybHlfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKVxuQEAgLTgwNiw3ICYjNDM7Nzk1LDggQEAgc3RhdGljIHZvaWQgX19pbml0IF9fYWxsb2NfdGFnX2FkZF9lYXJseV9wZm4odW5zaWduZWQgbG9uZyBwZm4pXG4gXHRkbyB7XG4gXHRcdHBvb2wgPSBSRUFEX09OQ0UoY3VycmVudF9wZm5fcG9vbCk7XG4gXHRcdGlmICghcG9vbCB8fCBhdG9taWNfcmVhZChcdTAwMjZwb29sLVx1MDAzZWNvdW50KSBcdTAwM2U9IFBGTl9QT09MX1NJWkUpIHtcbi1cdFx0XHRzdHJ1Y3QgcGFnZSAqbmV3X3BhZ2UgPSBhbGxvY19wYWdlKF9fR0ZQX0hJR0ggfCBfX0dGUF9OT19DT0RFVEFHKTtcbiYjNDM7XHRcdFx0c3RydWN0IHBhZ2UgKm5ld19wYWdlID0gX19hbGxvY19wYWdlcyhfX0dGUF9ISUdILCAwLCBudW1hX21lbV9pZCgpLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgIE5VTEwsIEFMTE9DX05PX0NPREVUQUcpO1xuIFx0XHRcdHN0cnVjdCBwZm5fcG9vbCAqbmV3O1xuIFxuIFx0XHRcdGlmICghbmV3X3BhZ2UpIHtcbkBAIC04MzcsNyAmIzQzOzgyNyw3IEBAIHR5cGVkZWYgdm9pZCBhbGxvY190YWdfYWRkX2Z1bmModW5zaWduZWQgbG9uZyBwZm4pO1xuIHN0YXRpYyBhbGxvY190YWdfYWRkX2Z1bmMgX19yY3UgKmFsbG9jX3RhZ19hZGRfZWFybHlfcGZuX3B0ciBfX3JlZmRhdGEgPVxuIFx0UkNVX0lOSVRJQUxJWkVSKF9fYWxsb2NfdGFnX2FkZF9lYXJseV9wZm4pO1xuIFxuLXZvaWQgYWxsb2NfdGFnX2FkZF9lYXJseV9wZm4odW5zaWduZWQgbG9uZyBwZm4sIGdmcF90IGdmcF9mbGFncylcbiYjNDM7dm9pZCBhbGxvY190YWdfYWRkX2Vhcmx5X3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuIHtcbiBcdGFsbG9jX3RhZ19hZGRfZnVuYyAqYWxsb2NfdGFnX2FkZDtcbiBcbkBAIC04NDUsNyAmIzQzOzgzNSw3IEBAIHZvaWQgYWxsb2NfdGFnX2FkZF9lYXJseV9wZm4odW5zaWduZWQgbG9uZyBwZm4sIGdmcF90IGdmcF9mbGFncylcbiBcdFx0cmV0dXJuO1xuIFxuIFx0LyogU2tpcCBhbGxvY2F0aW9ucyBmb3IgdGhlIHRyYWNraW5nIGxpc3QgaXRzZWxmIHRvIGF2b2lkIHJlY3Vyc2lvbi4gKi9cbi1cdGlmIChnZnBfZmxhZ3MgXHUwMDI2IF9fR0ZQX05PX0NPREVUQUcpXG4mIzQzO1x0aWYgKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19OT19DT0RFVEFHKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG5kaWZmIC0tZ2l0IGEvbW0vY29tcGFjdGlvbi5jIGIvbW0vY29tcGFjdGlvbi5jXG5pbmRleCBmMDg3NjVhZGUwMTRjZS4uNGIyMzE4ZmFkNGViNTkgMTAwNjQ0XG4tLS0gYS9tbS9jb21wYWN0aW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2NvbXBhY3Rpb24uY1xuQEAgLTI0LDYgJiM0MzsyNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9vd25lci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHNpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jcHVzZXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtwYWdlX2FsbG9jLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gXG4gI2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5AQCAtODIsNyAmIzQzOzgzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3ZpYV9jb21wYWN0X21lbW9yeShpbnQgb3JkZXIpIHsgcmV0dXJuIGZhbHNlOyB9XG4gXG4gc3RhdGljIHN0cnVjdCBwYWdlICptYXJrX2FsbG9jYXRlZF9ub3Byb2Yoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzKVxuIHtcbi1cdHBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgX19HRlBfTU9WQUJMRSk7XG4mIzQzO1x0cG9zdF9hbGxvY19ob29rKHBhZ2UsIG9yZGVyLCBfX0dGUF9NT1ZBQkxFLCBBTExPQ19ERUZBVUxUKTtcbiBcdHNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7XG4gXHRyZXR1cm4gcGFnZTtcbiB9XG5AQCAtMTg1MCw3ICYjNDM7MTg1MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mKHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIGRhXG4gXHR9XG4gXHRkc3QgPSAoc3RydWN0IGZvbGlvICopZnJlZXBhZ2U7XG4gXG4tXHRwb3N0X2FsbG9jX2hvb2soXHUwMDI2ZHN0LVx1MDAzZXBhZ2UsIG9yZGVyLCBfX0dGUF9NT1ZBQkxFKTtcbiYjNDM7XHRwb3N0X2FsbG9jX2hvb2soXHUwMDI2ZHN0LVx1MDAzZXBhZ2UsIG9yZGVyLCBfX0dGUF9NT1ZBQkxFLCBBTExPQ19ERUZBVUxUKTtcbiBcdHNldF9wYWdlX3JlZmNvdW50ZWQoXHUwMDI2ZHN0LVx1MDAzZXBhZ2UpO1xuIFx0aWYgKG9yZGVyKVxuIFx0XHRwcmVwX2NvbXBvdW5kX3BhZ2UoXHUwMDI2ZHN0LVx1MDAzZXBhZ2UsIG9yZGVyKTtcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IGUxYmI4MTYzMWQ1ZWIwLi45OTdhMDhiYTM1NDIzZCAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jXG5AQCAtNDcsNiAmIzQzOzQ3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ub2RlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX293bmVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3BhZ2VfYWxsb2MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2h1Z2V0bGJfdm1lbW1hcC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aHVnZXRsYl9jbWEuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2h1Z2V0bGJfaW50ZXJuYWwuaFwmIzM0O1xuQEAgLTE4MDUsNyAmIzQzOzE4MDYsOCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19idWRkeV9mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbiBcdGlmIChhbGxvY190cnlfaGFyZClcbiBcdFx0Z2ZwX21hc2sgfD0gX19HRlBfUkVUUllfTUFZRkFJTDtcbiBcbi1cdGZvbGlvID0gKHN0cnVjdCBmb2xpbyAqKV9fYWxsb2NfZnJvemVuX3BhZ2VzKGdmcF9tYXNrLCBvcmRlciwgbmlkLCBubWFzayk7XG4mIzQzO1x0Zm9saW8gPSAoc3RydWN0IGZvbGlvICopX19hbGxvY19mcm96ZW5fcGFnZXMoZ2ZwX21hc2ssIG9yZGVyLCBuaWQsIG5tYXNrLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIEFMTE9DX0RFRkFVTFQpO1xuIFxuIFx0LypcbiBcdCAqIElmIHdlIGRpZCBub3Qgc3BlY2lmeSBfX0dGUF9SRVRSWV9NQVlGQUlMLCBidXQgc3RpbGwgZ290IGFcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggNDMwYWE3MmE0NTc1ODEuLjM2OWM2NTZjNjNmYTgwIDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaFxuQEAgLTY1OCwxNjUgJiM0Mzs2NTgsNiBAQCBleHRlcm4gaW50IGRlZnJhZ19tb2RlO1xuIHZvaWQgc2V0dXBfcGVyX3pvbmVfd21hcmtzKHZvaWQpO1xuIHZvaWQgY2FsY3VsYXRlX21pbl9mcmVlX2tieXRlcyh2b2lkKTtcbiBpbnQgX19tZW1pbml0IGluaXRfcGVyX3pvbmVfd21hcmtfbWluKHZvaWQpO1xuLXZvaWQgcGFnZV9hbGxvY19zeXNjdGxfaW5pdCh2b2lkKTtcbi1cbi0vKlxuLSAqIFN0cnVjdHVyZSBmb3IgaG9sZGluZyB0aGUgbW9zdGx5IGltbXV0YWJsZSBhbGxvY2F0aW9uIHBhcmFtZXRlcnMgcGFzc2VkXG4tICogYmV0d2VlbiBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gYWxsb2NhdGlvbnMsIGluY2x1ZGluZyB0aGUgYWxsb2NfcGFnZXMqXG4tICogZmFtaWx5IG9mIGZ1bmN0aW9ucy5cbi0gKlxuLSAqIG5vZGVtYXNrLCBtaWdyYXRldHlwZSBhbmQgaGlnaGVzdF96b25laWR4IGFyZSBpbml0aWFsaXplZCBvbmx5IG9uY2UgaW5cbi0gKiBfX2FsbG9jX3BhZ2VzKCkgYW5kIHRoZW4gbmV2ZXIgY2hhbmdlLlxuLSAqXG4tICogem9uZWxpc3QsIHByZWZlcnJlZF96b25lIGFuZCBoaWdoZXN0X3pvbmVpZHggYXJlIHNldCBmaXJzdCBpblxuLSAqIF9fYWxsb2NfcGFnZXMoKSBmb3IgdGhlIGZhc3QgcGF0aCwgYW5kIG1pZ2h0IGJlIGxhdGVyIGNoYW5nZWRcbi0gKiBpbiBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKCkuIEFsbCBvdGhlciBmdW5jdGlvbnMgcGFzcyB0aGUgd2hvbGUgc3RydWN0dXJlXG4tICogYnkgYSBjb25zdCBwb2ludGVyLlxuLSAqL1xuLXN0cnVjdCBhbGxvY19jb250ZXh0IHtcbi1cdHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3Q7XG4tXHRjb25zdCBub2RlbWFza190ICpub2RlbWFzaztcbi1cdHN0cnVjdCB6b25lcmVmICpwcmVmZXJyZWRfem9uZXJlZjtcbi1cdGludCBtaWdyYXRldHlwZTtcbi1cbi1cdC8qXG4tXHQgKiBoaWdoZXN0X3pvbmVpZHggcmVwcmVzZW50cyBoaWdoZXN0IHVzYWJsZSB6b25lIGluZGV4IG9mXG4tXHQgKiB0aGUgYWxsb2NhdGlvbiByZXF1ZXN0LiBEdWUgdG8gdGhlIG5hdHVyZSBvZiB0aGUgem9uZSxcbi1cdCAqIG1lbW9yeSBvbiBsb3dlciB6b25lIHRoYW4gdGhlIGhpZ2hlc3Rfem9uZWlkeCB3aWxsIGJlXG4tXHQgKiBwcm90ZWN0ZWQgYnkgbG93bWVtX3Jlc2VydmVbaGlnaGVzdF96b25laWR4XS5cbi1cdCAqXG4tXHQgKiBoaWdoZXN0X3pvbmVpZHggaXMgYWxzbyB1c2VkIGJ5IHJlY2xhaW0vY29tcGFjdGlvbiB0byBsaW1pdFxuLVx0ICogdGhlIHRhcmdldCB6b25lIHNpbmNlIGhpZ2hlciB6b25lIHRoYW4gdGhpcyBpbmRleCBjYW5ub3QgYmVcbi1cdCAqIHVzYWJsZSBmb3IgdGhpcyBhbGxvY2F0aW9uIHJlcXVlc3QuXG4tXHQgKi9cbi1cdGVudW0gem9uZV90eXBlIGhpZ2hlc3Rfem9uZWlkeDtcbi1cdGJvb2wgc3ByZWFkX2RpcnR5X3BhZ2VzO1xuLX07XG4tXG4tLypcbi0gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG9yZGVyIG9mIGEgZnJlZSBwYWdlIGluIHRoZSBidWRkeSBzeXN0ZW0uIEluXG4tICogZ2VuZXJhbCwgcGFnZV96b25lKHBhZ2UpLVx1MDAzZWxvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIgdG8gcHJldmVudCB0aGVcbi0gKiBwYWdlIGZyb20gYmVpbmcgYWxsb2NhdGVkIGluIHBhcmFsbGVsIGFuZCByZXR1cm5pbmcgZ2FyYmFnZSBhcyB0aGUgb3JkZXIuXG4tICogSWYgYSBjYWxsZXIgZG9lcyBub3QgaG9sZCBwYWdlX3pvbmUocGFnZSktXHUwMDNlbG9jaywgaXQgbXVzdCBndWFyYW50ZWUgdGhhdCB0aGVcbi0gKiBwYWdlIGNhbm5vdCBiZSBhbGxvY2F0ZWQgb3IgbWVyZ2VkIGluIHBhcmFsbGVsLiBBbHRlcm5hdGl2ZWx5LCBpdCBtdXN0XG4tICogaGFuZGxlIGludmFsaWQgdmFsdWVzIGdyYWNlZnVsbHksIGFuZCB1c2UgYnVkZHlfb3JkZXJfdW5zYWZlKCkgYmVsb3cuXG4tICovXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYnVkZHlfb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UpXG4te1xuLVx0LyogUGFnZUJ1ZGR5KCkgbXVzdCBiZSBjaGVja2VkIGJ5IHRoZSBjYWxsZXIgKi9cbi1cdHJldHVybiBwYWdlX3ByaXZhdGUocGFnZSk7XG4tfVxuLVxuLS8qXG4tICogTGlrZSBidWRkeV9vcmRlcigpLCBidXQgZm9yIGNhbGxlcnMgd2hvIGNhbm5vdCBhZmZvcmQgdG8gaG9sZCB0aGUgem9uZSBsb2NrLlxuLSAqIFBhZ2VCdWRkeSgpIHNob3VsZCBiZSBjaGVja2VkIGZpcnN0IGJ5IHRoZSBjYWxsZXIgdG8gbWluaW1pemUgcmFjZSB3aW5kb3csXG4tICogYW5kIGludmFsaWQgdmFsdWVzIG11c3QgYmUgaGFuZGxlZCBncmFjZWZ1bGx5LlxuLSAqXG4tICogUkVBRF9PTkNFIGlzIHVzZWQgc28gdGhhdCBpZiB0aGUgY2FsbGVyIGFzc2lnbnMgdGhlIHJlc3VsdCBpbnRvIGEgbG9jYWxcbi0gKiB2YXJpYWJsZSBhbmQgZS5nLiB0ZXN0cyBpdCBmb3IgdmFsaWQgcmFuZ2UgYmVmb3JlIHVzaW5nLCB0aGUgY29tcGlsZXIgY2Fubm90XG4tICogZGVjaWRlIHRvIHJlbW92ZSB0aGUgdmFyaWFibGUgYW5kIGlubGluZSB0aGUgcGFnZV9wcml2YXRlKHBhZ2UpIG11bHRpcGxlXG4tICogdGltZXMsIHBvdGVudGlhbGx5IG9ic2VydmluZyBkaWZmZXJlbnQgdmFsdWVzIGluIHRoZSB0ZXN0cyBhbmQgdGhlIGFjdHVhbFxuLSAqIHVzZSBvZiB0aGUgcmVzdWx0LlxuLSAqL1xuLSNkZWZpbmUgYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpXHRSRUFEX09OQ0UocGFnZV9wcml2YXRlKHBhZ2UpKVxuLVxuLS8qXG4tICogVGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciBhIHBhZ2UgaXMgZnJlZSBcdTAwMjZcdTAwMjYgaXMgdGhlIGJ1ZGR5XG4tICogd2UgY2FuIGNvYWxlc2NlIGEgcGFnZSBhbmQgaXRzIGJ1ZGR5IGlmXG4tICogKGEpIHRoZSBidWRkeSBpcyBub3QgaW4gYSBob2xlIChjaGVjayBiZWZvcmUgY2FsbGluZyEpIFx1MDAyNlx1MDAyNlxuLSAqIChiKSB0aGUgYnVkZHkgaXMgaW4gdGhlIGJ1ZGR5IHN5c3RlbSBcdTAwMjZcdTAwMjZcbi0gKiAoYykgYSBwYWdlIGFuZCBpdHMgYnVkZHkgaGF2ZSB0aGUgc2FtZSBvcmRlciBcdTAwMjZcdTAwMjZcbi0gKiAoZCkgYSBwYWdlIGFuZCBpdHMgYnVkZHkgYXJlIGluIHRoZSBzYW1lIHpvbmUuXG4tICpcbi0gKiBGb3IgcmVjb3JkaW5nIHdoZXRoZXIgYSBwYWdlIGlzIGluIHRoZSBidWRkeSBzeXN0ZW0sIHdlIHNldCBQYWdlQnVkZHkuXG4tICogU2V0dGluZywgY2xlYXJpbmcsIGFuZCB0ZXN0aW5nIFBhZ2VCdWRkeSBpcyBzZXJpYWxpemVkIGJ5IHpvbmUtXHUwMDNlbG9jay5cbi0gKlxuLSAqIEZvciByZWNvcmRpbmcgcGFnZSYjMzk7cyBvcmRlciwgd2UgdXNlIHBhZ2VfcHJpdmF0ZShwYWdlKS5cbi0gKi9cbi1zdGF0aWMgaW5saW5lIGJvb2wgcGFnZV9pc19idWRkeShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHBhZ2UgKmJ1ZGR5LFxuLVx0XHRcdFx0IHVuc2lnbmVkIGludCBvcmRlcilcbi17XG4tXHRpZiAoIXBhZ2VfaXNfZ3VhcmQoYnVkZHkpIFx1MDAyNlx1MDAyNiAhUGFnZUJ1ZGR5KGJ1ZGR5KSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0aWYgKGJ1ZGR5X29yZGVyKGJ1ZGR5KSAhPSBvcmRlcilcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0Lypcbi1cdCAqIHpvbmUgY2hlY2sgaXMgZG9uZSBsYXRlIHRvIGF2b2lkIHVzZWxlc3NseSBjYWxjdWxhdGluZ1xuLVx0ICogem9uZS9ub2RlIGlkcyBmb3IgcGFnZXMgdGhhdCBjb3VsZCBuZXZlciBtZXJnZS5cbi1cdCAqL1xuLVx0aWYgKHBhZ2Vfem9uZV9pZChwYWdlKSAhPSBwYWdlX3pvbmVfaWQoYnVkZHkpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHRWTV9CVUdfT05fUEFHRShwYWdlX2NvdW50KGJ1ZGR5KSAhPSAwLCBidWRkeSk7XG4tXG4tXHRyZXR1cm4gdHJ1ZTtcbi19XG4tXG4tLypcbi0gKiBMb2NhdGUgdGhlIHN0cnVjdCBwYWdlIGZvciBib3RoIHRoZSBtYXRjaGluZyBidWRkeSBpbiBvdXJcbi0gKiBwYWlyIChidWRkeTEpIGFuZCB0aGUgY29tYmluZWQgTyhuJiM0MzsxKSBwYWdlIHRoZXkgZm9ybSAocGFnZSkuXG4tICpcbi0gKiAxKSBBbnkgYnVkZHkgQjEgd2lsbCBoYXZlIGFuIG9yZGVyIE8gdHdpbiBCMiB3aGljaCBzYXRpc2ZpZXNcbi0gKiB0aGUgZm9sbG93aW5nIGVxdWF0aW9uOlxuLSAqICAgICBCMiA9IEIxIF4gKDEgXHUwMDNjXHUwMDNjIE8pXG4tICogRm9yIGV4YW1wbGUsIGlmIHRoZSBzdGFydGluZyBidWRkeSAoYnVkZHkyKSBpcyAjOCBpdHMgb3JkZXJcbi0gKiAxIGJ1ZGR5IGlzICMxMDpcbi0gKiAgICAgQjIgPSA4IF4gKDEgXHUwMDNjXHUwMDNjIDEpID0gOCBeIDIgPSAxMFxuLSAqXG4tICogMikgQW55IGJ1ZGR5IEIgd2lsbCBoYXZlIGFuIG9yZGVyIE8mIzQzOzEgcGFyZW50IFAgd2hpY2hcbi0gKiBzYXRpc2ZpZXMgdGhlIGZvbGxvd2luZyBlcXVhdGlvbjpcbi0gKiAgICAgUCA9IEIgXHUwMDI2IH4oMSBcdTAwM2NcdTAwM2MgTylcbi0gKlxuLSAqIEFzc3VtcHRpb246ICpfbWVtX21hcCBpcyBjb250aWd1b3VzIGF0IGxlYXN0IHVwIHRvIE1BWF9QQUdFX09SREVSXG4tICovXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nXG4tX19maW5kX2J1ZGR5X3Bmbih1bnNpZ25lZCBsb25nIHBhZ2VfcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4te1xuLVx0cmV0dXJuIHBhZ2VfcGZuIF4gKDEgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbi19XG4tXG4tLypcbi0gKiBGaW5kIHRoZSBidWRkeSBvZiBAcGFnZSBhbmQgdmFsaWRhdGUgaXQuXG4tICogQHBhZ2U6IFRoZSBpbnB1dCBwYWdlXG4tICogQHBmbjogVGhlIHBmbiBvZiB0aGUgcGFnZSwgaXQgc2F2ZXMgYSBjYWxsIHRvIHBhZ2VfdG9fcGZuKCkgd2hlbiB0aGVcbi0gKiAgICAgICBmdW5jdGlvbiBpcyB1c2VkIGluIHRoZSBwZXJmb3JtYW5jZS1jcml0aWNhbCBfX2ZyZWVfb25lX3BhZ2UoKS5cbi0gKiBAb3JkZXI6IFRoZSBvcmRlciBvZiB0aGUgcGFnZVxuLSAqIEBidWRkeV9wZm46IFRoZSBvdXRwdXQgcG9pbnRlciB0byB0aGUgYnVkZHkgcGZuLCBpdCBhbHNvIHNhdmVzIGEgY2FsbCB0b1xuLSAqICAgICAgICAgICAgIHBhZ2VfdG9fcGZuKCkuXG4tICpcbi0gKiBUaGUgZm91bmQgYnVkZHkgY2FuIGJlIGEgbm9uIFBhZ2VCdWRkeSwgb3V0IG9mIEBwYWdlJiMzOTtzIHpvbmUsIG9yIGl0cyBvcmRlciBpc1xuLSAqIG5vdCB0aGUgc2FtZSBhcyBAcGFnZS4gVGhlIHZhbGlkYXRpb24gaXMgbmVjZXNzYXJ5IGJlZm9yZSB1c2UgaXQuXG4tICpcbi0gKiBSZXR1cm46IHRoZSBmb3VuZCBidWRkeSBwYWdlIG9yIE5VTEwgaWYgbm90IGZvdW5kLlxuLSAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmZpbmRfYnVkZHlfcGFnZV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGludCBvcmRlciwgdW5zaWduZWQgbG9uZyAqYnVkZHlfcGZuKVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgX19idWRkeV9wZm4gPSBfX2ZpbmRfYnVkZHlfcGZuKHBmbiwgb3JkZXIpO1xuLVx0c3RydWN0IHBhZ2UgKmJ1ZGR5O1xuLVxuLVx0YnVkZHkgPSBwYWdlICYjNDM7IChfX2J1ZGR5X3BmbiAtIHBmbik7XG4tXHRpZiAoYnVkZHlfcGZuKVxuLVx0XHQqYnVkZHlfcGZuID0gX19idWRkeV9wZm47XG4tXG4tXHRpZiAocGFnZV9pc19idWRkeShwYWdlLCBidWRkeSwgb3JkZXIpKVxuLVx0XHRyZXR1cm4gYnVkZHk7XG4tXHRyZXR1cm4gTlVMTDtcbi19XG4tXG4tZXh0ZXJuIHN0cnVjdCBwYWdlICpfX3BhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbixcbi1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgZW5kX3Bmbiwgc3RydWN0IHpvbmUgKnpvbmUpO1xuLVxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnBhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbixcbi1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgZW5kX3Bmbiwgc3RydWN0IHpvbmUgKnpvbmUpXG4te1xuLVx0aWYgKHpvbmUtXHUwMDNlY29udGlndW91cylcbi1cdFx0cmV0dXJuIHBmbl90b19wYWdlKHN0YXJ0X3Bmbik7XG4tXG4tXHRyZXR1cm4gX19wYWdlYmxvY2tfcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuLCBlbmRfcGZuLCB6b25lKTtcbi19XG4gXG4gdm9pZCBzZXRfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKTtcbiBib29sIHBmbl9yYW5nZV9pbnRlcnNlY3RzX3pvbmVzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuQEAgLTgzMSw4ICYjNDM7NjcyLDYgQEAgZXh0ZXJuIGludCBfX2lzb2xhdGVfZnJlZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuIGV4dGVybiB2b2lkIF9fcHV0YmFja19pc29sYXRlZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdFx0XHQgICAgaW50IG10KTtcbiBleHRlcm4gdm9pZCBtZW1ibG9ja19mcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuLWV4dGVybiB2b2lkIF9fZnJlZV9wYWdlc19jb3JlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tXHRcdGVudW0gbWVtaW5pdF9jb250ZXh0IGNvbnRleHQpO1xuIFxuIC8qXG4gICogVGhpcyB3aWxsIGhhdmUgbm8gZWZmZWN0LCBvdGhlciB0aGFuIHBvc3NpYmx5IGdlbmVyYXRpbmcgYSB3YXJuaW5nLCBpZiB0aGVcbkBAIC05MTQsNDAgJiM0Mzs3NTMsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9jb21wb3VuZF90YWlsKHN0cnVjdCBwYWdlICp0YWlsLFxuIFx0cHJlcF9jb21wb3VuZF90YWlsKHRhaWwsIGhlYWQsIG9yZGVyKTtcbiB9XG4gXG4tdm9pZCBwb3N0X2FsbG9jX2hvb2soc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzKTtcbi1leHRlcm4gYm9vbCBmcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG4tXG4tZXh0ZXJuIGludCB1c2VyX21pbl9mcmVlX2tieXRlcztcbi1cbi1zdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90LCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBuaWQsXG4tXHRcdG5vZGVtYXNrX3QgKik7XG4tI2RlZmluZSBfX2FsbG9jX2Zyb3plbl9wYWdlcyguLi4pIFxcXG4tXHRhbGxvY19ob29rcyhfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoX19WQV9BUkdTX18pKVxuLXZvaWQgZnJlZV9mcm96ZW5fcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG4tdm9pZCBmcmVlX3VucmVmX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCk7XG4tXG4tI2lmZGVmIENPTkZJR19OVU1BXG4tc3RydWN0IHBhZ2UgKmFsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QsIHVuc2lnbmVkIGludCBvcmRlcik7XG4tI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICphbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyKVxuLXtcbi1cdHJldHVybiBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwLCBvcmRlciwgbnVtYV9ub2RlX2lkKCksIE5VTEwpO1xuLX1cbi0jZW5kaWZcbi1cbi0jZGVmaW5lIGFsbG9jX2Zyb3plbl9wYWdlcyguLi4pIFxcXG4tXHRhbGxvY19ob29rcyhhbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKF9fVkFfQVJHU19fKSlcbi1cbi1zdHJ1Y3QgcGFnZSAqYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9ja19ub3Byb2YoZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbmlkLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuLSNkZWZpbmUgYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9jayguLi4pIFxcXG4tXHRhbGxvY19ob29rcyhhbGxvY19mcm96ZW5fcGFnZXNfbm9sb2NrX25vcHJvZihfX1ZBX0FSR1NfXykpXG4tdm9pZCBmcmVlX2Zyb3plbl9wYWdlc19ub2xvY2soc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG4tXG4tZXh0ZXJuIHZvaWQgem9uZV9wY3BfcmVzZXQoc3RydWN0IHpvbmUgKnpvbmUpO1xuLWV4dGVybiB2b2lkIHpvbmVfcGNwX2Rpc2FibGUoc3RydWN0IHpvbmUgKnpvbmUpO1xuLWV4dGVybiB2b2lkIHpvbmVfcGNwX2VuYWJsZShzdHJ1Y3Qgem9uZSAqem9uZSk7XG4tZXh0ZXJuIHZvaWQgem9uZV9wY3BfaW5pdChzdHJ1Y3Qgem9uZSAqem9uZSk7XG4tXG4gZXh0ZXJuIHZvaWQgKm1lbW1hcF9hbGxvYyhwaHlzX2FkZHJfdCBzaXplLCBwaHlzX2FkZHJfdCBhbGlnbixcbiBcdFx0XHQgIHBoeXNfYWRkcl90IG1pbl9hZGRyLFxuIFx0XHRcdCAgaW50IG5pZCwgYm9vbCBleGFjdF9uaWQpO1xuQEAgLTExMDEsMjMgJiM0Mzs5MDYsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9jbWFfcGFnZWJsb2NrKHN0cnVjdCBwYWdlICpwYWdlKVxuIH1cbiAjZW5kaWZcbiBcbi1lbnVtIGZhbGxiYWNrX3Jlc3VsdCB7XG4tXHQvKiBGb3VuZCBzdWl0YWJsZSBtaWdyYXRldHlwZSwgKm10X291dCBpcyB2YWxpZC4gKi9cbi1cdEZBTExCQUNLX0ZPVU5ELFxuLVx0LyogTm8gZmFsbGJhY2sgZm91bmQgaW4gcmVxdWVzdGVkIG9yZGVyLiAqL1xuLVx0RkFMTEJBQ0tfRU1QVFksXG4tXHQvKiBQYXNzZWQgQGNsYWltYWJsZSwgYnV0IGNsYWltaW5nIHdob2xlIGJsb2NrIGlzIGEgYmFkIGlkZWEuICovXG4tXHRGQUxMQkFDS19OT0NMQUlNLFxuLX07XG4tZW51bSBmYWxsYmFja19yZXN1bHRcbi1maW5kX3N1aXRhYmxlX2ZhbGxiYWNrKHN0cnVjdCBmcmVlX2FyZWEgKmFyZWEsIHVuc2lnbmVkIGludCBvcmRlcixcbi1cdFx0ICAgICAgIGludCBtaWdyYXRldHlwZSwgYm9vbCBjbGFpbWFibGUsIGludCAqbXRfb3V0KTtcbi1cbi1zdGF0aWMgaW5saW5lIGJvb2wgZnJlZV9hcmVhX2VtcHR5KHN0cnVjdCBmcmVlX2FyZWEgKmFyZWEsIGludCBtaWdyYXRldHlwZSlcbi17XG4tXHRyZXR1cm4gbGlzdF9lbXB0eShcdTAwMjZhcmVhLVx1MDAzZWZyZWVfbGlzdFttaWdyYXRldHlwZV0pO1xuLX1cbi1cbiAvKiBtbS91dGlsLmMgKi9cbiBzdHJ1Y3QgYW5vbl92bWEgKmZvbGlvX2Fub25fdm1hKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIFxuQEAgLTE0NDUsNTEgJiM0MzsxMjMzLDEwIEBAIGV4dGVybiB1bnNpZ25lZCBsb25nICBfX211c3RfY2hlY2sgdm1fbW1hcF9wZ29mZihzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBsb25nLFxuIHVuc2lnbmVkIGxvbmcgcmVjbGFpbV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KTtcbiB1bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXG4gXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KTtcbi0vKiBUaGUgQUxMT0NfV01BUksgYml0cyBhcmUgdXNlZCBhcyBhbiBpbmRleCB0byB6b25lLVx1MDAzZXdhdGVybWFyayAqL1xuLSNkZWZpbmUgQUxMT0NfV01BUktfTUlOXHRcdFdNQVJLX01JTlxuLSNkZWZpbmUgQUxMT0NfV01BUktfTE9XXHRcdFdNQVJLX0xPV1xuLSNkZWZpbmUgQUxMT0NfV01BUktfSElHSFx0V01BUktfSElHSFxuLSNkZWZpbmUgQUxMT0NfTk9fV0FURVJNQVJLU1x0MHgwNCAvKiBkb24mIzM5O3QgY2hlY2sgd2F0ZXJtYXJrcyBhdCBhbGwgKi9cbi1cbi0vKiBNYXNrIHRvIGdldCB0aGUgd2F0ZXJtYXJrIGJpdHMgKi9cbi0jZGVmaW5lIEFMTE9DX1dNQVJLX01BU0tcdChBTExPQ19OT19XQVRFUk1BUktTLTEpXG4tXG4tLypcbi0gKiBPbmx5IE1NVSBhcmNocyBoYXZlIGFzeW5jIG9vbSB2aWN0aW0gcmVjbGFpbSAtIGFrYSBvb21fcmVhcGVyIHNvIHdlXG4tICogY2Fubm90IGFzc3VtZSBhIHJlZHVjZWQgYWNjZXNzIHRvIG1lbW9yeSByZXNlcnZlcyBpcyBzdWZmaWNpZW50IGZvclxuLSAqICFNTVVcbi0gKi9cbi0jaWZkZWYgQ09ORklHX01NVVxuLSNkZWZpbmUgQUxMT0NfT09NXHRcdDB4MDhcbi0jZWxzZVxuLSNkZWZpbmUgQUxMT0NfT09NXHRcdEFMTE9DX05PX1dBVEVSTUFSS1Ncbi0jZW5kaWZcbi1cbi0jZGVmaW5lIEFMTE9DX05PTl9CTE9DS1x0XHQgMHgxMCAvKiBDYWxsZXIgY2Fubm90IGJsb2NrLiBBbGxvdyBhY2Nlc3Ncbi1cdFx0XHRcdCAgICAgICAqIHRvIDI1JSBvZiB0aGUgbWluIHdhdGVybWFyayBvclxuLVx0XHRcdFx0ICAgICAgICogNjIuNSUgaWYgX19HRlBfSElHSCBpcyBzZXQuXG4tXHRcdFx0XHQgICAgICAgKi9cbi0jZGVmaW5lIEFMTE9DX01JTl9SRVNFUlZFXHQgMHgyMCAvKiBfX0dGUF9ISUdIIHNldC4gQWxsb3cgYWNjZXNzIHRvIDUwJVxuLVx0XHRcdFx0ICAgICAgICogb2YgdGhlIG1pbiB3YXRlcm1hcmsuXG4tXHRcdFx0XHQgICAgICAgKi9cbi0jZGVmaW5lIEFMTE9DX0NQVVNFVFx0XHQgMHg0MCAvKiBjaGVjayBmb3IgY29ycmVjdCBjcHVzZXQgKi9cbi0jZGVmaW5lIEFMTE9DX0NNQVx0XHQgMHg4MCAvKiBhbGxvdyBhbGxvY2F0aW9ucyBmcm9tIENNQSBhcmVhcyAqL1xuLSNpZmRlZiBDT05GSUdfWk9ORV9ETUEzMlxuLSNkZWZpbmUgQUxMT0NfTk9GUkFHTUVOVFx0MHgxMDAgLyogYXZvaWQgbWl4aW5nIHBhZ2VibG9jayB0eXBlcyAqL1xuLSNlbHNlXG4tI2RlZmluZSBBTExPQ19OT0ZSQUdNRU5UXHQgIDB4MFxuLSNlbmRpZlxuLSNkZWZpbmUgQUxMT0NfSElHSEFUT01JQ1x0MHgyMDAgLyogQWxsb3dzIGFjY2VzcyB0byBNSUdSQVRFX0hJR0hBVE9NSUMgKi9cbi0jZGVmaW5lIEFMTE9DX1RSWUxPQ0tcdFx0MHg0MDAgLyogT25seSB1c2Ugc3Bpbl90cnlsb2NrIGluIGFsbG9jYXRpb24gcGF0aCAqL1xuLSNkZWZpbmUgQUxMT0NfS1NXQVBEXHRcdDB4ODAwIC8qIGFsbG93IHdha2luZyBvZiBrc3dhcGQsIF9fR0ZQX0tTV0FQRF9SRUNMQUlNIHNldCAqL1xuLVxuLS8qIEZsYWdzIHRoYXQgYWxsb3cgYWxsb2NhdGlvbnMgYmVsb3cgdGhlIG1pbiB3YXRlcm1hcmsuICovXG4tI2RlZmluZSBBTExPQ19SRVNFUlZFUyAoQUxMT0NfTk9OX0JMT0NLfEFMTE9DX01JTl9SRVNFUlZFfEFMTE9DX0hJR0hBVE9NSUN8QUxMT0NfT09NKVxuIFxuIGVudW0gdHR1X2ZsYWdzO1xuIHN0cnVjdCB0bGJmbHVzaF91bm1hcF9iYXRjaDtcbiBcbi1cbiAvKlxuICAqIG9ubHkgZm9yIE1NIGludGVybmFsIHdvcmsgaXRlbXMgd2hpY2ggZG8gbm90IGRlcGVuZCBvblxuICAqIGFueSBhbGxvY2F0aW9ucyBvciBsb2NrcyB3aGljaCBtaWdodCBkZXBlbmQgb24gYWxsb2NhdGlvbnNcbmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDYxN2JjYTc2ZGI0OWI2Li41OGUxNGQxNTQzZWNiNCAxMDA2NDRcbi0tLSBhL21tL2todWdlcGFnZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0va2h1Z2VwYWdlZC5jXG5AQCAtMjYsNiAmIzQzOzI2LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGxiLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3BhZ2VfYWxsb2MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O21tX3Nsb3QuaFwmIzM0O1xuIFxuIGVudW0gc2Nhbl9yZXN1bHQge1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCA0OTE2YWIxNDUzMjU3My4uYmY3MTdlYzU5NTA4N2QgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5AQCAtNjYsNiAmIzQzOzY2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvbWVtb3J5LWZhaWx1cmUuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3N3YXAuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtwYWdlX2FsbG9jLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gXG4gc3RhdGljIGludCBzeXNjdGxfbWVtb3J5X2ZhaWx1cmVfZWFybHlfa2lsbCBfX3JlYWRfbW9zdGx5O1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXG5pbmRleCA3YWMxOWZhYjIyNjMyNC4uOTUzOWU0MGM0NzhlZGIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXG5AQCAtNDAsNiAmIzQzOzQwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGxiZmx1c2guaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cGFnZV9hbGxvYy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7c2h1ZmZsZS5oXCYjMzQ7XG4gXG4gZW51bSB7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuY1xuaW5kZXggMzY2OTlmYWJkM2MyMjMuLjQxZDYzMGYwZWE4MjEyIDEwMDY0NFxuLS0tIGEvbW0vbWVtcG9saWN5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbXBvbGljeS5jXG5AQCAtMTE5LDYgJiM0MzsxMTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbW9yeS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7aW50ZXJuYWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtwYWdlX2FsbG9jLmhcJiMzNDtcbiBcbiAvKiBJbnRlcm5hbCBmbGFncyAqL1xuICNkZWZpbmUgTVBPTF9NRl9ESVNDT05USUdfT0sgKE1QT0xfTUZfSU5URVJOQUwgXHUwMDNjXHUwMDNjIDApXHQvKiBTa2lwIGNoZWNrcyBmb3IgY29udGludW91cyB2bWFzICovXG5AQCAtMjQyNSw5ICYjNDM7MjQyNiwxMSBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX3ByZWZlcnJlZF9tYW55KGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0ICovXG4gXHRwcmVmZXJyZWRfZ2ZwID0gZ2ZwIHwgX19HRlBfTk9XQVJOO1xuIFx0cHJlZmVycmVkX2dmcCBcdTAwMjY9IH4oX19HRlBfRElSRUNUX1JFQ0xBSU0gfCBfX0dGUF9OT0ZBSUwpO1xuLVx0cGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihwcmVmZXJyZWRfZ2ZwLCBvcmRlciwgbmlkLCBub2RlbWFzayk7XG4mIzQzO1x0cGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihwcmVmZXJyZWRfZ2ZwLCBvcmRlciwgbmlkLCBub2RlbWFzayxcbiYjNDM7XHRcdFx0XHRcdCAgIEFMTE9DX0RFRkFVTFQpO1xuIFx0aWYgKCFwYWdlKVxuLVx0XHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcCwgb3JkZXIsIG5pZCwgTlVMTCk7XG4mIzQzO1x0XHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcCwgb3JkZXIsIG5pZCwgTlVMTCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgQUxMT0NfREVGQVVMVCk7XG4gXG4gXHRyZXR1cm4gcGFnZTtcbiB9XG5AQCAtMjQ3NSw3ICYjNDM7MjQ3OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbXBvbChnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdFx0XHQgKi9cbiBcdFx0XHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKFxuIFx0XHRcdFx0Z2ZwIHwgX19HRlBfVEhJU05PREUgfCBfX0dGUF9OT1JFVFJZLCBvcmRlcixcbi1cdFx0XHRcdG5pZCwgTlVMTCk7XG4mIzQzO1x0XHRcdFx0bmlkLCBOVUxMLCBBTExPQ19ERUZBVUxUKTtcbiBcdFx0XHRpZiAocGFnZSB8fCAhKGdmcCBcdTAwMjYgX19HRlBfRElSRUNUX1JFQ0xBSU0pKVxuIFx0XHRcdFx0cmV0dXJuIHBhZ2U7XG4gXHRcdFx0LypcbkBAIC0yNDg3LDcgJiM0MzsyNDkwLDcgQEAgc3RhdGljIHN0cnVjdCBwYWdlICphbGxvY19wYWdlc19tcG9sKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcCwgb3JkZXIsIG5pZCwgbm9kZW1hc2spO1xuJiM0MztcdHBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwLCBvcmRlciwgbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XG4gXG4gXHRpZiAodW5saWtlbHkocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9JTlRFUkxFQVZFIHx8XG4gXHRcdCAgICAgcG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKSBcdTAwMjZcdTAwMjYgcGFnZSkge1xuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xuaW5kZXggNmI4OWUyZTc3NDMxMTIuLjM1NjQxZmFjMTA5ZDUzIDEwMDY0NFxuLS0tIGEvbW0vbW1faW5pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tbV9pbml0LmNcbkBAIC0zMyw2ICYjNDM7MzMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdldGxiLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3BhZ2VfYWxsb2MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3NsYWIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3NodWZmbGUuaFwmIzM0O1xuIFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggNjJmNzFlY2U3Y2ExNzcuLjgwM2IzMmU1YTVlNDdmIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC01Niw2ICYjNDM7NTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BnYWxsb2NfdGFnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZGl2NjQuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cGFnZV9hbGxvYy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7c2h1ZmZsZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7cGFnZV9yZXBvcnRpbmcuaFwmIzM0O1xuIFxuQEAgLTEyNDgsNyAmIzQzOzEyNDksNyBAQCB2b2lkIF9fY2xlYXJfcGFnZV90YWdfcmVmKHN0cnVjdCBwYWdlICpwYWdlKVxuIC8qIFNob3VsZCBiZSBjYWxsZWQgb25seSBpZiBtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSAqL1xuIHN0YXRpYyBub2lubGluZVxuIHZvaWQgX19wZ2FsbG9jX3RhZ19hZGQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBuciwgZ2ZwX3QgZ2ZwX2ZsYWdzKVxuJiM0MztcdFx0ICAgICAgIHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuIHtcbiBcdHVuaW9uIHBndGFnX3JlZl9oYW5kbGUgaGFuZGxlO1xuIFx0dW5pb24gY29kZXRhZ19yZWYgcmVmO1xuQEAgLTEyNjIsMTcgJiM0MzsxMjYzLDE3IEBAIHZvaWQgX19wZ2FsbG9jX3RhZ19hZGQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcbiBcdFx0ICogcGFnZV9leHQgaXMgbm90IGF2YWlsYWJsZSB5ZXQsIHJlY29yZCB0aGUgcGZuIHNvIHdlIGNhblxuIFx0XHQgKiBjbGVhciB0aGUgdGFnIHJlZiBsYXRlciB3aGVuIHBhZ2VfZXh0IGlzIGluaXRpYWxpemVkLlxuIFx0XHQgKi9cbi1cdFx0YWxsb2NfdGFnX2FkZF9lYXJseV9wZm4ocGFnZV90b19wZm4ocGFnZSksIGdmcF9mbGFncyk7XG4mIzQzO1x0XHRhbGxvY190YWdfYWRkX2Vhcmx5X3BmbihwYWdlX3RvX3BmbihwYWdlKSwgYWxsb2NfZmxhZ3MpO1xuIFx0XHRpZiAodGFzay1cdTAwM2VhbGxvY190YWcpXG4gXHRcdFx0YWxsb2NfdGFnX3NldF9pbmFjY3VyYXRlKHRhc2stXHUwMDNlYWxsb2NfdGFnKTtcbiBcdH1cbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHBnYWxsb2NfdGFnX2FkZChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuLVx0XHRcdFx0ICAgdW5zaWduZWQgaW50IG5yLCBnZnBfdCBnZnBfZmxhZ3MpXG4mIzQzO1x0XHRcdFx0ICAgdW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4ge1xuIFx0aWYgKG1lbV9hbGxvY19wcm9maWxpbmdfZW5hYmxlZCgpKVxuLVx0XHRfX3BnYWxsb2NfdGFnX2FkZChwYWdlLCB0YXNrLCBuciwgZ2ZwX2ZsYWdzKTtcbiYjNDM7XHRcdF9fcGdhbGxvY190YWdfYWRkKHBhZ2UsIHRhc2ssIG5yLCBhbGxvY19mbGFncyk7XG4gfVxuIFxuIC8qIFNob3VsZCBiZSBjYWxsZWQgb25seSBpZiBtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSAqL1xuQEAgLTE4MDksNyAmIzQzOzE4MTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3NraXBfaW5pdChnZnBfdCBmbGFncylcbiB9XG4gXG4gaW5saW5lIHZvaWQgcG9zdF9hbGxvY19ob29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tXHRcdFx0XHRnZnBfdCBnZnBfZmxhZ3MpXG4mIzQzO1x0XHRcdFx0Z2ZwX3QgZ2ZwX2ZsYWdzLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4ge1xuIFx0Y29uc3QgYm9vbCB6ZXJvX3RhZ3MgPSBnZnBfZmxhZ3MgXHUwMDI2IF9fR0ZQX1pFUk9UQUdTO1xuIFx0Ym9vbCBpbml0ID0gIXdhbnRfaW5pdF9vbl9mcmVlKCkgXHUwMDI2XHUwMDI2IHdhbnRfaW5pdF9vbl9hbGxvYyhnZnBfZmxhZ3MpIFx1MDAyNlx1MDAyNlxuQEAgLTE4NjAsMTMgJiM0MzsxODYxLDEzIEBAIGlubGluZSB2b2lkIHBvc3RfYWxsb2NfaG9vayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFxuIFx0c2V0X3BhZ2Vfb3duZXIocGFnZSwgb3JkZXIsIGdmcF9mbGFncyk7XG4gXHRwYWdlX3RhYmxlX2NoZWNrX2FsbG9jKHBhZ2UsIG9yZGVyKTtcbi1cdHBnYWxsb2NfdGFnX2FkZChwYWdlLCBjdXJyZW50LCAxIFx1MDAzY1x1MDAzYyBvcmRlciwgZ2ZwX2ZsYWdzKTtcbiYjNDM7XHRwZ2FsbG9jX3RhZ19hZGQocGFnZSwgY3VycmVudCwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIsIGFsbG9jX2ZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcHJlcF9uZXdfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBnZnBfZmxhZ3MsXG4gXHRcdFx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4ge1xuLVx0cG9zdF9hbGxvY19ob29rKHBhZ2UsIG9yZGVyLCBnZnBfZmxhZ3MpO1xuJiM0MztcdHBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgZ2ZwX2ZsYWdzLCBhbGxvY19mbGFncyk7XG4gXG4gXHRpZiAob3JkZXIgXHUwMDI2XHUwMDI2IChnZnBfZmxhZ3MgXHUwMDI2IF9fR0ZQX0NPTVApKVxuIFx0XHRwcmVwX2NvbXBvdW5kX3BhZ2UocGFnZSwgb3JkZXIpO1xuQEAgLTI1MzAsNyAmIzQzOzI1MzEsNyBAQCBzdGF0aWMgaW50IHJtcXVldWVfYnVsayhzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBpO1xuIFxuLVx0aWYgKHVubGlrZWx5KGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19UUllMT0NLKSkge1xuJiM0MztcdGlmICh1bmxpa2VseShhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfTk9MT0NLKSkge1xuIFx0XHRpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKFx1MDAyNnpvbmUtXHUwMDNlbG9jaywgZmxhZ3MpKVxuIFx0XHRcdHJldHVybiAwO1xuIFx0fSBlbHNlIHtcbkBAIC0zMjE4LDcgJiM0MzszMjE5LDcgQEAgc3RydWN0IHBhZ2UgKnJtcXVldWVfYnVkZHkoc3RydWN0IHpvbmUgKnByZWZlcnJlZF96b25lLCBzdHJ1Y3Qgem9uZSAqem9uZSxcbiBcbiBcdGRvIHtcbiBcdFx0cGFnZSA9IE5VTEw7XG4tXHRcdGlmICh1bmxpa2VseShhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfVFJZTE9DSykpIHtcbiYjNDM7XHRcdGlmICh1bmxpa2VseShhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfTk9MT0NLKSkge1xuIFx0XHRcdGlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoXHUwMDI2em9uZS1cdTAwM2Vsb2NrLCBmbGFncykpXG4gXHRcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0fSBlbHNlIHtcbkBAIC0zNzc0LDggJiM0MzszNzc1LDggQEAgYWxsb2NfZmxhZ3Nfbm9mcmFnbWVudChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX21hc2spXG4gfVxuIFxuIC8qIE11c3QgYmUgY2FsbGVkIGFmdGVyIGN1cnJlbnRfZ2ZwX2NvbnRleHQoKSB3aGljaCBjYW4gY2hhbmdlIGdmcF9tYXNrICovXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2ZwX3RvX2FsbG9jX2ZsYWdzX2NtYShnZnBfdCBnZnBfbWFzayxcbi1cdFx0XHRcdFx0XHQgIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3NfY21hKGdmcF90IGdmcF9tYXNrLFxuJiM0MztcdFx0XHRcdFx0ICAgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuIHtcbiAjaWZkZWYgQ09ORklHX0NNQVxuIFx0aWYgKGdmcF9taWdyYXRldHlwZShnZnBfbWFzaykgPT0gTUlHUkFURV9NT1ZBQkxFKVxuQEAgLTQ0NzQsNyAmIzQzOzQ0NzUsNyBAQCBzdGF0aWMgdm9pZCB3YWtlX2FsbF9rc3dhcGRzKHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XG4tZ2ZwX3RvX2FsbG9jX2ZsYWdzX25vbmJsb2NraW5nKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4mIzQzO2FsbG9jX2ZsYWdzX25vbmJsb2NraW5nKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4ge1xuIFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzID0gMDtcbiBcbkBAIC00NDk3LDcgJiM0Mzs0NDk4LDcgQEAgZ2ZwX3RvX2FsbG9jX2ZsYWdzX25vbmJsb2NraW5nKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XG4tZ2ZwX3RvX2FsbG9jX2ZsYWdzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4mIzQzO2FsbG9jX2ZsYWdzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4ge1xuIFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzID0gQUxMT0NfV01BUktfTUlOIHwgQUxMT0NfQ1BVU0VUO1xuIFxuQEAgLTQ1MTIsNyAmIzQzOzQ1MTMsNyBAQCBnZnBfdG9fYWxsb2NfZmxhZ3MoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcbiBcdGlmIChnZnBfbWFzayBcdTAwMjYgX19HRlBfS1NXQVBEX1JFQ0xBSU0pXG4gXHRcdGFsbG9jX2ZsYWdzIHw9IEFMTE9DX0tTV0FQRDtcbiBcbi1cdGFsbG9jX2ZsYWdzIHw9IGdmcF90b19hbGxvY19mbGFnc19ub25ibG9ja2luZyhnZnBfbWFzaywgb3JkZXIpO1xuJiM0MztcdGFsbG9jX2ZsYWdzIHw9IGFsbG9jX2ZsYWdzX25vbmJsb2NraW5nKGdmcF9tYXNrLCBvcmRlcik7XG4gXG4gXHRpZiAoIShnZnBfbWFzayBcdTAwMjYgX19HRlBfRElSRUNUX1JFQ0xBSU0pKSB7XG4gXHRcdC8qXG5AQCAtNDUyNSw3ICYjNDM7NDUyNiw3IEBAIGdmcF90b19hbGxvY19mbGFncyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxuIFx0fSBlbHNlIGlmICh1bmxpa2VseShydF9vcl9kbF90YXNrKGN1cnJlbnQpKSBcdTAwMjZcdTAwMjYgaW5fdGFzaygpKVxuIFx0XHRhbGxvY19mbGFncyB8PSBBTExPQ19NSU5fUkVTRVJWRTtcbiBcbi1cdGFsbG9jX2ZsYWdzID0gZ2ZwX3RvX2FsbG9jX2ZsYWdzX2NtYShnZnBfbWFzaywgYWxsb2NfZmxhZ3MpO1xuJiM0MztcdGFsbG9jX2ZsYWdzID0gYWxsb2NfZmxhZ3NfY21hKGdmcF9tYXNrLCBhbGxvY19mbGFncyk7XG4gXG4gXHRpZiAoZGVmcmFnX21vZGUpXG4gXHRcdGFsbG9jX2ZsYWdzIHw9IEFMTE9DX05PRlJBR01FTlQ7XG5AQCAtNDc5MCw4ICYjNDM7NDc5MSwxMiBAQCBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHQgKiBUaGUgZmFzdCBwYXRoIHVzZXMgY29uc2VydmF0aXZlIGFsbG9jX2ZsYWdzIHRvIHN1Y2NlZWQgb25seSB1bnRpbFxuIFx0ICoga3N3YXBkIG5lZWRzIHRvIGJlIHdva2VuIHVwLCBhbmQgdG8gYXZvaWQgdGhlIGNvc3Qgb2Ygc2V0dGluZyB1cFxuIFx0ICogYWxsb2NfZmxhZ3MgcHJlY2lzZWx5LiBTbyB3ZSBkbyB0aGF0IG5vdy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIENhbiYjMzk7dCBqdXN0IG9yIGFsbG9jX2ZsYWdzIGlmIGl0IGNvbnRhaW5zIFdNQVJLIGJpdHMsIGJ1dCB0aG9zZSBmbGFnc1xuJiM0MztcdCAqIHNob3VsZG4mIzM5O3QgYmUgc2V0IGluIGFjLVx1MDAzZWFsbG9jX2ZsYWdzLlxuIFx0ICovXG4tXHRhbGxvY19mbGFncyA9IGdmcF90b19hbGxvY19mbGFncyhnZnBfbWFzaywgb3JkZXIpO1xuJiM0MztcdFZNX1dBUk5fT04oYWMtXHUwMDNlYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX1dNQVJLX01BU0spO1xuJiM0MztcdGFsbG9jX2ZsYWdzID0gYWMtXHUwMDNlYWxsb2NfZmxhZ3MgfCBhbGxvY19mbGFnc19zbG93cGF0aChnZnBfbWFzaywgb3JkZXIpO1xuIFxuIFx0LypcbiBcdCAqIFdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgem9uZWxpc3QgaXRlcmF0b3JcbkBAIC00ODMyLDggJiM0Mzs0ODM3LDggQEAgX19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFxuIFx0cmVzZXJ2ZV9mbGFncyA9IF9fZ2ZwX3BmbWVtYWxsb2NfZmxhZ3MoZ2ZwX21hc2spO1xuIFx0aWYgKHJlc2VydmVfZmxhZ3MpXG4tXHRcdGFsbG9jX2ZsYWdzID0gZ2ZwX3RvX2FsbG9jX2ZsYWdzX2NtYShnZnBfbWFzaywgcmVzZXJ2ZV9mbGFncykgfFxuLVx0XHRcdFx0XHQgIChhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfS1NXQVBEKTtcbiYjNDM7XHRcdGFsbG9jX2ZsYWdzID0gYWxsb2NfZmxhZ3NfY21hKGdmcF9tYXNrLCByZXNlcnZlX2ZsYWdzKSB8XG4mIzQzO1x0XHRcdFx0YWMtXHUwMDNlYWxsb2NfZmxhZ3MgfCAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX0tTV0FQRCk7XG4gXG4gXHQvKlxuIFx0ICogUmVzZXQgdGhlIG5vZGVtYXNrIGFuZCB6b25lbGlzdCBpdGVyYXRvcnMgaWYgbWVtb3J5IHBvbGljaWVzIGNhbiBiZVxuQEAgLTUwNTksMTEgJiM0Mzs1MDY0LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHQgKiBEb24mIzM5O3QgaW52b2tlIHNob3VsZF9mYWlsIGxvZ2ljLCBzaW5jZSBpdCBtYXkgY2FsbFxuIFx0ICogZ2V0X3JhbmRvbV91MzIoKSBhbmQgcHJpbnRrKCkgd2hpY2ggbmVlZCB0byBzcGluX2xvY2suXG4gXHQgKi9cbi1cdGlmICghKCphbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfVFJZTE9DSykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0aWYgKCEoKmFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19OT0xPQ0spIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHNob3VsZF9mYWlsX2FsbG9jX3BhZ2UoZ2ZwX21hc2ssIG9yZGVyKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0KmFsbG9jX2ZsYWdzID0gZ2ZwX3RvX2FsbG9jX2ZsYWdzX2NtYShnZnBfbWFzaywgKmFsbG9jX2ZsYWdzKTtcbiYjNDM7XHQqYWxsb2NfZmxhZ3MgPSBhbGxvY19mbGFnc19jbWEoZ2ZwX21hc2ssICphbGxvY19mbGFncyk7XG4gXG4gXHQvKiBEaXJ0eSB6b25lIGJhbGFuY2luZyBvbmx5IGRvbmUgaW4gdGhlIGZhc3QgcGF0aCAqL1xuIFx0YWMtXHUwMDNlc3ByZWFkX2RpcnR5X3BhZ2VzID0gKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9XUklURSk7XG5AQCAtNTIyMSw3ICYjNDM7NTIyNiw3IEBAIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbiBcdFx0fVxuIFx0XHRucl9hY2NvdW50JiM0MzsmIzQzOztcbiBcbi1cdFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIDApO1xuJiM0MztcdFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xuIFx0XHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xuIFx0XHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTtcbiBcdH1cbkBAIC01MjM1LDcgJiM0Mzs1MjQwLDcgQEAgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxuIFx0cmV0dXJuIG5yX3BvcHVsYXRlZDtcbiBcbiBmYWlsZWQ6XG4tXHRwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzayk7XG4mIzQzO1x0cGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIEFMTE9DX0RFRkFVTFQpO1xuIFx0aWYgKHBhZ2UpXG4gXHRcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkJiM0MzsmIzQzO10gPSBwYWdlO1xuIFx0Z290byBvdXQ7XG5AQCAtNTI3MCwyNCAmIzQzOzUyNzUsMTAxIEBAIHZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBhbGxvY19vcmRlcl9hbGxvd2VkKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuJiM0MztcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX05PTE9DSylcbiYjNDM7XHRcdHJldHVybiBwY3BfYWxsb3dlZF9vcmRlcihvcmRlcik7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlcmUgYXJlIHNldmVyYWwgcGxhY2VzIHdoZXJlIHdlIGFzc3VtZSB0aGF0IHRoZSBvcmRlciB2YWx1ZSBpcyBzYW5lXG4mIzQzO1x0ICogc28gYmFpbCBvdXQgZWFybHkgaWYgdGhlIHJlcXVlc3QgaXMgb3V0IG9mIGJvdW5kLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiAhKFdBUk5fT05fT05DRV9HRlAob3JkZXIgXHUwMDNlIE1BWF9QQUdFX09SREVSLCBnZnApKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGFsbG9jX3RyeWxvY2tfYWxsb3dlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJbiBQUkVFTVBUX1JUIHNwaW5fdHJ5bG9jaygpIHdpbGwgY2FsbCByYXdfc3Bpbl9sb2NrKCkgd2hpY2ggaXNcbiYjNDM7XHQgKiB1bnNhZmUgaW4gTk1JLiBJZiBzcGluX3RyeWxvY2soKSBpcyBjYWxsZWQgZnJvbSBoYXJkIElSUSB0aGUgY3VycmVudFxuJiM0MztcdCAqIHRhc2sgbWF5IGJlIHdhaXRpbmcgZm9yIG9uZSBydF9zcGluX2xvY2ssIGJ1dCBydF9zcGluX3RyeWxvY2soKSB3aWxsXG4mIzQzO1x0ICogbWFyayB0aGUgdGFzayBhcyB0aGUgb3duZXIgb2YgYW5vdGhlciBydF9zcGluX2xvY2sgd2hpY2ggd2lsbFxuJiM0MztcdCAqIGNvbmZ1c2UgUEkgbG9naWMsIHNvIHJldHVybiBpbW1lZGlhdGVseSBpZiBjYWxsZWQgZnJvbSBoYXJkIElSUSBvclxuJiM0MztcdCAqIE5NSS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIE5vdGUsIGlycXNfZGlzYWJsZWQoKSBjYXNlIGlzIG9rLiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWRcbiYjNDM7XHQgKiBmcm9tIHJhd19zcGluX2xvY2tfaXJxc2F2ZSByZWdpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpIFx1MDAyNlx1MDAyNiAoaW5fbm1pKCkgfHwgaW5faGFyZGlycSgpKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0LyogT24gVVAsIHNwaW5fdHJ5bG9jaygpIGFsd2F5cyBzdWNjZWVkcyBldmVuIHdoZW4gaXQgaXMgbG9ja2VkICovXG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19TTVApIFx1MDAyNlx1MDAyNiBpbl9ubWkoKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0LyogQmFpbG91dCwgc2luY2UgX2RlZmVycmVkX2dyb3dfem9uZSgpIG5lZWRzIHRvIHRha2UgYSBsb2NrICovXG4mIzQzO1x0aWYgKGRlZmVycmVkX3BhZ2VzX2VuYWJsZWQoKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEdGUCBmbGFncyB0byBzZXQgZm9yIEFMTE9DX05PTE9DSyBpLmUuIGFsbG9jX3BhZ2VzX25vbG9jaygpLlxuJiM0MzsgKlxuJiM0MzsgKiBEbyBub3Qgc3BlY2lmeSBfX0dGUF9ESVJFQ1RfUkVDTEFJTSwgc2luY2UgZGlyZWN0IGNsYWltIGlzIG5vdCBhbGxvd2VkLlxuJiM0MzsgKiBEbyBub3Qgc3BlY2lmeSBfX0dGUF9LU1dBUERfUkVDTEFJTSBlaXRoZXIsIHNpbmNlIHdha2UgdXAgb2Yga3N3YXBkXG4mIzQzOyAqIGlzIG5vdCBzYWZlIGluIGFyYml0cmFyeSBjb250ZXh0LlxuJiM0MzsgKlxuJiM0MzsgKiBUaGVzZSB0d28gYXJlIHRoZSBjb25kaXRpb25zIGZvciBnZnBmbGFnc19hbGxvd19zcGlubmluZygpIGJlaW5nIHRydWUuXG4mIzQzOyAqXG4mIzQzOyAqIFNwZWNpZnkgX19HRlBfTk9XQVJOIHNpbmNlIGZhaWxpbmcgYWxsb2NfcGFnZXNfbm9sb2NrKCkgaXMgbm90IGEgcmVhc29uXG4mIzQzOyAqIHRvIHdhcm4uIEFsc28gd2FybiB3b3VsZCB0cmlnZ2VyIHByaW50aygpIHdoaWNoIGlzIHVuc2FmZSBmcm9tXG4mIzQzOyAqIHZhcmlvdXMgY29udGV4dHMuIFdlIGNhbm5vdCB1c2UgcHJpbnRrX2RlZmVycmVkX2VudGVyKCkgdG8gbWl0aWdhdGUsXG4mIzQzOyAqIHNpbmNlIHRoZSBydW5uaW5nIGNvbnRleHQgaXMgdW5rbm93bi5cbiYjNDM7ICpcbiYjNDM7ICogU3BlY2lmeSBfX0dGUF9aRVJPIHRvIG1ha2Ugc3VyZSB0aGF0IGNhbGwgdG8ga21zYW5fYWxsb2NfcGFnZSgpIGJlbG93XG4mIzQzOyAqIGlzIHNhZmUgaW4gYW55IGNvbnRleHQuIEFsc28gemVyb2luZyB0aGUgcGFnZSBpcyBtYW5kYXRvcnkgZm9yXG4mIzQzOyAqIEJQRiB1c2UgY2FzZXMuXG4mIzQzOyAqXG4mIzQzOyAqIFRob3VnaCBfX0dGUF9OT01FTUFMTE9DIGlzIG5vdCBjaGVja2VkIGluIHRoZSBjb2RlIHBhdGggYmVsb3csXG4mIzQzOyAqIHNwZWNpZnkgaXQgaGVyZSB0byBoaWdobGlnaHQgdGhhdCBhbGxvY19wYWdlc19ub2xvY2soKVxuJiM0MzsgKiBkb2VzbiYjMzk7dCB3YW50IHRvIGRlcGxldGUgcmVzZXJ2ZXMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgY29uc3QgZ2ZwX3QgZ2ZwX25vbG9jayA9IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9OT01FTUFMTE9DIHxcbiYjNDM7XHRcdFx0XHRfX0dGUF9DT01QO1xuJiM0MztcbiAvKlxuICAqIFRoaXMgaXMgdGhlICYjMzk7aGVhcnQmIzM5OyBvZiB0aGUgem9uZWQgYnVkZHkgYWxsb2NhdG9yLlxuICAqL1xuIHN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tXHRcdGludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbiYjNDM7XHRcdGludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzaywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuLVx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzID0gQUxMT0NfV01BUktfTE9XO1xuIFx0Z2ZwX3QgYWxsb2NfZ2ZwOyAvKiBUaGUgZ2ZwX3QgdGhhdCB3YXMgYWN0dWFsbHkgdXNlZCBmb3IgYWxsb2NhdGlvbiAqL1xuLVx0c3RydWN0IGFsbG9jX2NvbnRleHQgYWMgPSB7IH07XG4mIzQzO1x0c3RydWN0IGFsbG9jX2NvbnRleHQgYWMgPSB7XG4mIzQzO1x0XHQuYWxsb2NfZmxhZ3MgPSBhbGxvY19mbGFncyxcbiYjNDM7XHR9O1xuJiM0MztcdHVuc2lnbmVkIGludCBmYXN0cGF0aF9hbGxvY19mbGFncyA9IGFsbG9jX2ZsYWdzO1xuIFxuLVx0Lypcbi1cdCAqIFRoZXJlIGFyZSBzZXZlcmFsIHBsYWNlcyB3aGVyZSB3ZSBhc3N1bWUgdGhhdCB0aGUgb3JkZXIgdmFsdWUgaXMgc2FuZVxuLVx0ICogc28gYmFpbCBvdXQgZWFybHkgaWYgdGhlIHJlcXVlc3QgaXMgb3V0IG9mIGJvdW5kLlxuLVx0ICovXG4tXHRpZiAoV0FSTl9PTl9PTkNFX0dGUChvcmRlciBcdTAwM2UgTUFYX1BBR0VfT1JERVIsIGdmcCkpXG4mIzQzO1x0LyogT3RoZXIgZmxhZ3MgY291bGQgYmUgc3VwcG9ydGVkIGxhdGVyIGlmIG5lZWRlZC4gKi9cbiYjNDM7XHRpZiAoV0FSTl9PTihhbGxvY19mbGFncyBcdTAwMjYgfihBTExPQ19OT0xPQ0sgfCBBTExPQ19OT19DT0RFVEFHKSkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFhbGxvY19vcmRlcl9hbGxvd2VkKGdmcCwgb3JkZXIsIGFsbG9jX2ZsYWdzKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4mIzQzO1x0aWYgKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19OT0xPQ0spIHtcbiYjNDM7XHRcdC8qIENlcnRhaW4gb3RoZXIgZmxhZ3MgY291bGQgYmUgc3VwcG9ydGVkIGxhdGVyIGlmIG5lZWRlZC4gKi9cbiYjNDM7XHRcdFZNX1dBUk5fT05fT05DRShnZnAgXHUwMDI2IH4oX19HRlBfQUNDT1VOVCB8IGdmcF9ub2xvY2spKTtcbiYjNDM7XHRcdGlmICghYWxsb2NfdHJ5bG9ja19hbGxvd2VkKCkpXG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdFx0Z2ZwIHw9IGdmcF9ub2xvY2s7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGZhc3RwYXRoX2FsbG9jX2ZsYWdzIHw9IEFMTE9DX1dNQVJLX0xPVztcbiYjNDM7XHR9XG4mIzQzO1xuIFx0Z2ZwIFx1MDAyNj0gZ2ZwX2FsbG93ZWRfbWFzaztcbiBcdC8qXG4gXHQgKiBBcHBseSBzY29wZWQgYWxsb2NhdGlvbiBjb25zdHJhaW50cy4gVGhpcyBpcyBtYWlubHkgYWJvdXQgR0ZQX05PRlNcbkBAIC01Mjk5LDE5ICYjNDM7NTM4MSwxOSBAQCBzdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0Z2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApO1xuIFx0YWxsb2NfZ2ZwID0gZ2ZwO1xuIFx0aWYgKCFwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcCwgb3JkZXIsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBcdTAwMjZhYyxcbi1cdFx0XHRcdTAwMjZhbGxvY19nZnAsIFx1MDAyNmFsbG9jX2ZsYWdzKSlcbiYjNDM7XHRcdFx0XHUwMDI2YWxsb2NfZ2ZwLCBcdTAwMjZmYXN0cGF0aF9hbGxvY19mbGFncykpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0LypcbiBcdCAqIEZvcmJpZCB0aGUgZmlyc3QgcGFzcyBmcm9tIGZhbGxpbmcgYmFjayB0byB0eXBlcyB0aGF0IGZyYWdtZW50XG4gXHQgKiBtZW1vcnkgdW50aWwgYWxsIGxvY2FsIHpvbmVzIGFyZSBjb25zaWRlcmVkLlxuIFx0ICovXG4tXHRhbGxvY19mbGFncyB8PSBhbGxvY19mbGFnc19ub2ZyYWdtZW50KHpvbmVsaXN0X3pvbmUoYWMucHJlZmVycmVkX3pvbmVyZWYpLCBnZnApO1xuLVx0YWxsb2NfZmxhZ3MgfD0gZ2ZwX3RvX2FsbG9jX2ZsYWdzX25vbmJsb2NraW5nKGdmcCwgb3JkZXIpIFx1MDAyNiBBTExPQ19ISUdIQVRPTUlDO1xuJiM0MztcdGZhc3RwYXRoX2FsbG9jX2ZsYWdzIHw9IGFsbG9jX2ZsYWdzX25vZnJhZ21lbnQoem9uZWxpc3Rfem9uZShhYy5wcmVmZXJyZWRfem9uZXJlZiksIGdmcCk7XG4mIzQzO1x0ZmFzdHBhdGhfYWxsb2NfZmxhZ3MgfD0gYWxsb2NfZmxhZ3Nfbm9uYmxvY2tpbmcoZ2ZwLCBvcmRlcikgXHUwMDI2IEFMTE9DX0hJR0hBVE9NSUM7XG4gXG4tXHQvKiBGaXJzdCBhbGxvY2F0aW9uIGF0dGVtcHQgKi9cbi1cdHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KGFsbG9jX2dmcCwgb3JkZXIsIGFsbG9jX2ZsYWdzLCBcdTAwMjZhYyk7XG4tXHRpZiAobGlrZWx5KHBhZ2UpKVxuJiM0MztcdC8qIEZpcnN0IGFsbG9jYXRpb24gYXR0ZW1wdCAob3IsIGZvciBub2xvY2ssIG9ubHkgYXR0ZW1wdCkgKi9cbiYjNDM7XHRwYWdlID0gZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChhbGxvY19nZnAsIG9yZGVyLCBmYXN0cGF0aF9hbGxvY19mbGFncywgXHUwMDI2YWMpO1xuJiM0MztcdGlmIChsaWtlbHkocGFnZSkgfHwgKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19OT0xPQ0spKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdGFsbG9jX2dmcCA9IGdmcDtcbkBAIC01MzI4LDcgJiM0Mzs1NDEwLDggQEAgc3RydWN0IHBhZ2UgKl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbiBvdXQ6XG4gXHRpZiAobWVtY2dfa21lbV9vbmxpbmUoKSBcdTAwMjZcdTAwMjYgKGdmcCBcdTAwMjYgX19HRlBfQUNDT1VOVCkgXHUwMDI2XHUwMDI2IHBhZ2UgXHUwMDI2XHUwMDI2XG4gXHQgICAgdW5saWtlbHkoX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHBhZ2UsIGdmcCwgb3JkZXIpICE9IDApKSB7XG4tXHRcdGZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyKTtcbiYjNDM7XHRcdF9fZnJlZV9mcm96ZW5fcGFnZXMocGFnZSwgb3JkZXIsXG4mIzQzO1x0XHRcdFx0ICAgIGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19OT0xPQ0sgPyBGUElfVFJZTE9DSyA6IDApO1xuIFx0XHRwYWdlID0gTlVMTDtcbiBcdH1cbiBcbkBAIC01MzQwLDIyICYjNDM7NTQyMywzNCBAQCBzdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuIEVYUE9SVF9TWU1CT0woX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKTtcbiBcbiBzdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tXHRcdGludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbiYjNDM7XHRcdGludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzaywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFxuLVx0cGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnAsIG9yZGVyLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzayk7XG4mIzQzO1x0cGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnAsIG9yZGVyLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzayxcbiYjNDM7XHRcdFx0XHRcdCAgIGFsbG9jX2ZsYWdzKTtcbiBcdGlmIChwYWdlKVxuIFx0XHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xuIFx0cmV0dXJuIHBhZ2U7XG4gfVxuLUVYUE9SVF9TWU1CT0woX19hbGxvY19wYWdlc19ub3Byb2YpO1xuJiM0MztcbiYjNDM7c3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKGludCBuaWQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4mIzQzO3tcbiYjNDM7XHRpZiAobmlkID09IE5VTUFfTk9fTk9ERSlcbiYjNDM7XHRcdG5pZCA9IG51bWFfbWVtX2lkKCk7XG4mIzQzO1xuJiM0MztcdFZNX0JVR19PTihuaWQgXHUwMDNjIDAgfHwgbmlkIFx1MDAzZT0gTUFYX05VTU5PREVTKTtcbiYjNDM7XHR3YXJuX2lmX25vZGVfb2ZmbGluZShuaWQsIGdmcF9tYXNrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcF9tYXNrLCBvcmRlciwgbmlkLCBOVUxMLCBBTExPQ19ERUZBVUxUKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKTtcbiBcbiBzdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcbiBcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2spXG4ge1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnAgfCBfX0dGUF9DT01QLCBvcmRlcixcbi1cdFx0XHRcdFx0cHJlZmVycmVkX25pZCwgbm9kZW1hc2spO1xuJiM0MztcdFx0XHRcdFx0cHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIEFMTE9DX0RFRkFVTFQpO1xuIFx0cmV0dXJuIHBhZ2Vfcm1hcHBhYmxlX2ZvbGlvKHBhZ2UpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKF9fZm9saW9fYWxsb2Nfbm9wcm9mKTtcbkBAIC03MDM3LDcgJiM0Mzs3MTMyLDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfZnJlZV9mcm96ZW5fcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgZ2ZwX3QgZ2ZwX21hc2spXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlLCBuZXh0LCBcdTAwMjZsaXN0W29yZGVyXSwgbHJ1KSB7XG4gXHRcdFx0aW50IGk7XG4gXG4tXHRcdFx0cG9zdF9hbGxvY19ob29rKHBhZ2UsIG9yZGVyLCBnZnBfbWFzayk7XG4mIzQzO1x0XHRcdHBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgZ2ZwX21hc2ssIEFMTE9DX0RFRkFVTFQpO1xuIFx0XHRcdGlmICghb3JkZXIpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbkBAIC03MjQyLDcgJiM0Mzs3MzM3LDcgQEAgaW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRzdHJ1Y3QgcGFnZSAqaGVhZCA9IHBmbl90b19wYWdlKHN0YXJ0KTtcbiBcbiBcdFx0Y2hlY2tfbmV3X3BhZ2VzKGhlYWQsIG9yZGVyKTtcbi1cdFx0cHJlcF9uZXdfcGFnZShoZWFkLCBvcmRlciwgZ2ZwX21hc2ssIDApO1xuJiM0MztcdFx0cHJlcF9uZXdfcGFnZShoZWFkLCBvcmRlciwgZ2ZwX21hc2ssIEFMTE9DX0RFRkFVTFQpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0V0FSTih0cnVlLCBcJiMzNDtQRk4gcmFuZ2U6IHJlcXVlc3RlZCBbJWx1LCAlbHUpLCBhbGxvY2F0ZWQgWyVsdSwgJWx1KVxcblwmIzM0OyxcbkBAIC03ODA0LDcgJiM0Mzs3ODk5LDcgQEAgc3RhdGljIGJvb2wgY29uZF9hY2NlcHRfbWVtb3J5KHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qIEJhaWxvdXQsIHNpbmNlIHRyeV90b19hY2NlcHRfbWVtb3J5X29uZSgpIG5lZWRzIHRvIHRha2UgYSBsb2NrICovXG4tXHRpZiAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX1RSWUxPQ0spXG4mIzQzO1x0aWYgKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19OT0xPQ0spXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdHdtYXJrID0gcHJvbW9fd21hcmtfcGFnZXMoem9uZSk7XG5AQCAtNzg3NCw4MCAmIzQzOzc5NjksMTAgQEAgc3RhdGljIGJvb2wgX19mcmVlX3VuYWNjZXB0ZWQoc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXG4gc3RydWN0IHBhZ2UgKmFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mKGdmcF90IGdmcF9mbGFncywgaW50IG5pZCwgdW5zaWduZWQgaW50IG9yZGVyKVxuIHtcbi1cdC8qXG4tXHQgKiBEbyBub3Qgc3BlY2lmeSBfX0dGUF9ESVJFQ1RfUkVDTEFJTSwgc2luY2UgZGlyZWN0IGNsYWltIGlzIG5vdCBhbGxvd2VkLlxuLVx0ICogRG8gbm90IHNwZWNpZnkgX19HRlBfS1NXQVBEX1JFQ0xBSU0gZWl0aGVyLCBzaW5jZSB3YWtlIHVwIG9mIGtzd2FwZFxuLVx0ICogaXMgbm90IHNhZmUgaW4gYXJiaXRyYXJ5IGNvbnRleHQuXG4tXHQgKlxuLVx0ICogVGhlc2UgdHdvIGFyZSB0aGUgY29uZGl0aW9ucyBmb3IgZ2ZwZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoKSBiZWluZyB0cnVlLlxuLVx0ICpcbi1cdCAqIFNwZWNpZnkgX19HRlBfTk9XQVJOIHNpbmNlIGZhaWxpbmcgYWxsb2NfcGFnZXNfbm9sb2NrKCkgaXMgbm90IGEgcmVhc29uXG4tXHQgKiB0byB3YXJuLiBBbHNvIHdhcm4gd291bGQgdHJpZ2dlciBwcmludGsoKSB3aGljaCBpcyB1bnNhZmUgZnJvbVxuLVx0ICogdmFyaW91cyBjb250ZXh0cy4gV2UgY2Fubm90IHVzZSBwcmludGtfZGVmZXJyZWRfZW50ZXIoKSB0byBtaXRpZ2F0ZSxcbi1cdCAqIHNpbmNlIHRoZSBydW5uaW5nIGNvbnRleHQgaXMgdW5rbm93bi5cbi1cdCAqXG4tXHQgKiBTcGVjaWZ5IF9fR0ZQX1pFUk8gdG8gbWFrZSBzdXJlIHRoYXQgY2FsbCB0byBrbXNhbl9hbGxvY19wYWdlKCkgYmVsb3dcbi1cdCAqIGlzIHNhZmUgaW4gYW55IGNvbnRleHQuIEFsc28gemVyb2luZyB0aGUgcGFnZSBpcyBtYW5kYXRvcnkgZm9yXG4tXHQgKiBCUEYgdXNlIGNhc2VzLlxuLVx0ICpcbi1cdCAqIFRob3VnaCBfX0dGUF9OT01FTUFMTE9DIGlzIG5vdCBjaGVja2VkIGluIHRoZSBjb2RlIHBhdGggYmVsb3csXG4tXHQgKiBzcGVjaWZ5IGl0IGhlcmUgdG8gaGlnaGxpZ2h0IHRoYXQgYWxsb2NfcGFnZXNfbm9sb2NrKClcbi1cdCAqIGRvZXNuJiMzOTt0IHdhbnQgdG8gZGVwbGV0ZSByZXNlcnZlcy5cbi1cdCAqL1xuLVx0Z2ZwX3QgYWxsb2NfZ2ZwID0gX19HRlBfTk9XQVJOIHwgX19HRlBfWkVSTyB8IF9fR0ZQX05PTUVNQUxMT0MgfCBfX0dGUF9DT01QXG4tXHRcdFx0fCBnZnBfZmxhZ3M7XG4tXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MgPSBBTExPQ19UUllMT0NLO1xuLVx0c3RydWN0IGFsbG9jX2NvbnRleHQgYWMgPSB7IH07XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbi1cbi1cdFZNX1dBUk5fT05fT05DRShnZnBfZmxhZ3MgXHUwMDI2IH5fX0dGUF9BQ0NPVU5UKTtcbi1cdC8qXG4tXHQgKiBJbiBQUkVFTVBUX1JUIHNwaW5fdHJ5bG9jaygpIHdpbGwgY2FsbCByYXdfc3Bpbl9sb2NrKCkgd2hpY2ggaXNcbi1cdCAqIHVuc2FmZSBpbiBOTUkuIElmIHNwaW5fdHJ5bG9jaygpIGlzIGNhbGxlZCBmcm9tIGhhcmQgSVJRIHRoZSBjdXJyZW50XG4tXHQgKiB0YXNrIG1heSBiZSB3YWl0aW5nIGZvciBvbmUgcnRfc3Bpbl9sb2NrLCBidXQgcnRfc3Bpbl90cnlsb2NrKCkgd2lsbFxuLVx0ICogbWFyayB0aGUgdGFzayBhcyB0aGUgb3duZXIgb2YgYW5vdGhlciBydF9zcGluX2xvY2sgd2hpY2ggd2lsbFxuLVx0ICogY29uZnVzZSBQSSBsb2dpYywgc28gcmV0dXJuIGltbWVkaWF0ZWx5IGlmIGNhbGxlZCBmcm9tIGhhcmQgSVJRIG9yXG4tXHQgKiBOTUkuXG4tXHQgKlxuLVx0ICogTm90ZSwgaXJxc19kaXNhYmxlZCgpIGNhc2UgaXMgb2suIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZFxuLVx0ICogZnJvbSByYXdfc3Bpbl9sb2NrX2lycXNhdmUgcmVnaW9uLlxuLVx0ICovXG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkgXHUwMDI2XHUwMDI2IChpbl9ubWkoKSB8fCBpbl9oYXJkaXJxKCkpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbi1cdC8qIE9uIFVQLCBzcGluX3RyeWxvY2soKSBhbHdheXMgc3VjY2VlZHMgZXZlbiB3aGVuIGl0IGlzIGxvY2tlZCAqL1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19TTVApIFx1MDAyNlx1MDAyNiBpbl9ubWkoKSlcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRpZiAoIXBjcF9hbGxvd2VkX29yZGVyKG9yZGVyKSlcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHQvKiBCYWlsb3V0LCBzaW5jZSBfZGVmZXJyZWRfZ3Jvd196b25lKCkgbmVlZHMgdG8gdGFrZSBhIGxvY2sgKi9cbi1cdGlmIChkZWZlcnJlZF9wYWdlc19lbmFibGVkKCkpXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuIFx0aWYgKG5pZCA9PSBOVU1BX05PX05PREUpXG4gXHRcdG5pZCA9IG51bWFfbm9kZV9pZCgpO1xuIFxuLVx0cHJlcGFyZV9hbGxvY19wYWdlcyhhbGxvY19nZnAsIG9yZGVyLCBuaWQsIE5VTEwsIFx1MDAyNmFjLFxuLVx0XHRcdCAgICBcdTAwMjZhbGxvY19nZnAsIFx1MDAyNmFsbG9jX2ZsYWdzKTtcbi1cbi1cdC8qXG4tXHQgKiBCZXN0IGVmZm9ydCBhbGxvY2F0aW9uIGZyb20gcGVyY3B1IGZyZWUgbGlzdC5cbi1cdCAqIElmIGl0JiMzOTtzIGVtcHR5IGF0dGVtcHQgdG8gc3Bpbl90cnlsb2NrIHpvbmUtXHUwMDNlbG9jay5cbi1cdCAqL1xuLVx0cGFnZSA9IGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoYWxsb2NfZ2ZwLCBvcmRlciwgYWxsb2NfZmxhZ3MsIFx1MDAyNmFjKTtcbi1cbi1cdC8qIFVubGlrZSByZWd1bGFyIGFsbG9jX3BhZ2VzKCkgdGhlcmUgaXMgbm8gX19hbGxvY19wYWdlc19zbG93cGF0aCgpLiAqL1xuLVxuLVx0aWYgKG1lbWNnX2ttZW1fb25saW5lKCkgXHUwMDI2XHUwMDI2IHBhZ2UgXHUwMDI2XHUwMDI2IChnZnBfZmxhZ3MgXHUwMDI2IF9fR0ZQX0FDQ09VTlQpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHVubGlrZWx5KF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShwYWdlLCBhbGxvY19nZnAsIG9yZGVyKSAhPSAwKSkge1xuLVx0XHRfX2ZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyLCBGUElfVFJZTE9DSyk7XG4tXHRcdHBhZ2UgPSBOVUxMO1xuLVx0fVxuLVx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCBvcmRlciwgYWxsb2NfZ2ZwLCBhYy5taWdyYXRldHlwZSk7XG4tXHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnApO1xuLVx0cmV0dXJuIHBhZ2U7XG4mIzQzO1x0cmV0dXJuIF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfZmxhZ3MsIG9yZGVyLCBuaWQsIE5VTEwsIEFMTE9DX05PTE9DSyk7XG4gfVxuIC8qKlxuICAqIGFsbG9jX3BhZ2VzX25vbG9jayAtIG9wcG9ydHVuaXN0aWMgcmVlbnRyYW50IGFsbG9jYXRpb24gZnJvbSBhbnkgY29udGV4dFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuaCBiL21tL3BhZ2VfYWxsb2MuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yNjE0YmZmNjc5NWIwOFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5oXG5AQCAtMCwwICYjNDM7MSwzMTYgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbiYjNDM7LypcbiYjNDM7ICogbW0taW50ZXJuYWwgQVBJIGZvciB0aGUgcGFnZSAoYnVkZHkpIGFsbG9jYXRvci4gUHVibGljIEFQSSBsaXZlcyBpblxuJiM0MzsgKiBpbmNsdWRlL2xpbnV4L2dmcC5oLlxuJiM0MzsgKi9cbiYjNDM7I2lmbmRlZiBfX01NX1BBR0VfQUxMT0NfSFxuJiM0MzsjZGVmaW5lIF9fTU1fUEFHRV9BTExPQ19IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tem9uZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25vZGVtYXNrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBBTExPQ19ERUZBVUxUXHRcdDBcbiYjNDM7LyogVGhlIEFMTE9DX1dNQVJLIGJpdHMgYXJlIHVzZWQgYXMgYW4gaW5kZXggdG8gem9uZS1cdTAwM2V3YXRlcm1hcmsgKi9cbiYjNDM7I2RlZmluZSBBTExPQ19XTUFSS19NSU5cdFx0V01BUktfTUlOXG4mIzQzOyNkZWZpbmUgQUxMT0NfV01BUktfTE9XXHRcdFdNQVJLX0xPV1xuJiM0MzsjZGVmaW5lIEFMTE9DX1dNQVJLX0hJR0hcdFdNQVJLX0hJR0hcbiYjNDM7I2RlZmluZSBBTExPQ19OT19XQVRFUk1BUktTXHQweDA0IC8qIGRvbiYjMzk7dCBjaGVjayB3YXRlcm1hcmtzIGF0IGFsbCAqL1xuJiM0MztcbiYjNDM7LyogTWFzayB0byBnZXQgdGhlIHdhdGVybWFyayBiaXRzICovXG4mIzQzOyNkZWZpbmUgQUxMT0NfV01BUktfTUFTS1x0KEFMTE9DX05PX1dBVEVSTUFSS1MtMSlcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE9ubHkgTU1VIGFyY2hzIGhhdmUgYXN5bmMgb29tIHZpY3RpbSByZWNsYWltIC0gYWthIG9vbV9yZWFwZXIgc28gd2VcbiYjNDM7ICogY2Fubm90IGFzc3VtZSBhIHJlZHVjZWQgYWNjZXNzIHRvIG1lbW9yeSByZXNlcnZlcyBpcyBzdWZmaWNpZW50IGZvclxuJiM0MzsgKiAhTU1VXG4mIzQzOyAqL1xuJiM0MzsjaWZkZWYgQ09ORklHX01NVVxuJiM0MzsjZGVmaW5lIEFMTE9DX09PTVx0XHQweDA4XG4mIzQzOyNlbHNlXG4mIzQzOyNkZWZpbmUgQUxMT0NfT09NXHRcdEFMTE9DX05PX1dBVEVSTUFSS1NcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFMTE9DX05PTl9CTE9DS1x0XHQgMHgxMCAvKiBDYWxsZXIgY2Fubm90IGJsb2NrLiBBbGxvdyBhY2Nlc3NcbiYjNDM7XHRcdFx0XHQgICAgICAgKiB0byAyNSUgb2YgdGhlIG1pbiB3YXRlcm1hcmsgb3JcbiYjNDM7XHRcdFx0XHQgICAgICAgKiA2Mi41JSBpZiBfX0dGUF9ISUdIIGlzIHNldC5cbiYjNDM7XHRcdFx0XHQgICAgICAgKi9cbiYjNDM7I2RlZmluZSBBTExPQ19NSU5fUkVTRVJWRVx0IDB4MjAgLyogX19HRlBfSElHSCBzZXQuIEFsbG93IGFjY2VzcyB0byA1MCVcbiYjNDM7XHRcdFx0XHQgICAgICAgKiBvZiB0aGUgbWluIHdhdGVybWFyay5cbiYjNDM7XHRcdFx0XHQgICAgICAgKi9cbiYjNDM7I2RlZmluZSBBTExPQ19DUFVTRVRcdFx0IDB4NDAgLyogY2hlY2sgZm9yIGNvcnJlY3QgY3B1c2V0ICovXG4mIzQzOyNkZWZpbmUgQUxMT0NfQ01BXHRcdCAweDgwIC8qIGFsbG93IGFsbG9jYXRpb25zIGZyb20gQ01BIGFyZWFzICovXG4mIzQzOyNpZmRlZiBDT05GSUdfWk9ORV9ETUEzMlxuJiM0MzsjZGVmaW5lIEFMTE9DX05PRlJBR01FTlRcdDB4MTAwIC8qIGF2b2lkIG1peGluZyBwYWdlYmxvY2sgdHlwZXMgKi9cbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBBTExPQ19OT0ZSQUdNRU5UXHQgIDB4MFxuJiM0MzsjZW5kaWZcbiYjNDM7I2RlZmluZSBBTExPQ19ISUdIQVRPTUlDXHQweDIwMCAvKiBBbGxvd3MgYWNjZXNzIHRvIE1JR1JBVEVfSElHSEFUT01JQyAqL1xuJiM0MzsjZGVmaW5lIEFMTE9DX05PTE9DS1x0XHQweDQwMCAvKiBPbmx5IHVzZSBzcGluX3RyeWxvY2sgaW4gYWxsb2NhdGlvbiBwYXRoICovXG4mIzQzOyNkZWZpbmUgQUxMT0NfS1NXQVBEXHRcdDB4ODAwIC8qIGFsbG93IHdha2luZyBvZiBrc3dhcGQsIF9fR0ZQX0tTV0FQRF9SRUNMQUlNIHNldCAqL1xuJiM0MzsvKlxuJiM0MzsgKiBTa2lwIGVhcmx5IFBGTiByZWNvcmRpbmcgZm9yIGEgcGFnZSBhbGxvY2F0aW9uLiAgVXNlZCBieVxuJiM0MzsgKiBfX2FsbG9jX3RhZ19hZGRfZWFybHlfcGZuKCkgdG8gYXZvaWQgcmVjdXJzaW9uIHdoZW4gYWxsb2NhdGluZyBwYWdlcyBmb3IgdGhlXG4mIzQzOyAqIGVhcmx5IFBGTiB0cmFja2luZyBsaXN0IGl0c2VsZi5cbiYjNDM7ICpcbiYjNDM7ICogQ29kZXRhZ3Mgb2YgdGhlIHBhZ2VzIGFsbG9jYXRlZCB3aXRoIF9fR0ZQX05PX0NPREVUQUcgc2hvdWxkIGJlXG4mIzQzOyAqIGNsZWFyZWQgKHZpYSBjbGVhcl9wYWdlX3RhZ19yZWYoKSkgYmVmb3JlIGZyZWVpbmcgdGhlIHBhZ2VzIHRvIHByZXZlbnRcbiYjNDM7ICogYWxsb2NfdGFnX3N1Yl9jaGVjaygpIGZyb20gdHJpZ2dlcmluZyBhIHdhcm5pbmcuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEFMTE9DX05PX0NPREVUQUcgICAgICAgMHgxMDAwXG4mIzQzO1xuJiM0MzsvKiBGbGFncyB0aGF0IGFsbG93IGFsbG9jYXRpb25zIGJlbG93IHRoZSBtaW4gd2F0ZXJtYXJrLiAqL1xuJiM0MzsjZGVmaW5lIEFMTE9DX1JFU0VSVkVTIChBTExPQ19OT05fQkxPQ0t8QUxMT0NfTUlOX1JFU0VSVkV8QUxMT0NfSElHSEFUT01JQ3xBTExPQ19PT00pXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBTdHJ1Y3R1cmUgZm9yIGhvbGRpbmcgdGhlIG1vc3RseSBpbW11dGFibGUgYWxsb2NhdGlvbiBwYXJhbWV0ZXJzIHBhc3NlZFxuJiM0MzsgKiBiZXR3ZWVuIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBhbGxvY2F0aW9ucywgaW5jbHVkaW5nIHRoZSBhbGxvY19wYWdlcypcbiYjNDM7ICogZmFtaWx5IG9mIGZ1bmN0aW9ucy5cbiYjNDM7ICpcbiYjNDM7ICogbm9kZW1hc2ssIG1pZ3JhdGV0eXBlIGFuZCBoaWdoZXN0X3pvbmVpZHggYXJlIGluaXRpYWxpemVkIG9ubHkgb25jZSBpblxuJiM0MzsgKiBfX2FsbG9jX3BhZ2VzKCkgYW5kIHRoZW4gbmV2ZXIgY2hhbmdlLlxuJiM0MzsgKlxuJiM0MzsgKiB6b25lbGlzdCwgcHJlZmVycmVkX3pvbmUgYW5kIGhpZ2hlc3Rfem9uZWlkeCBhcmUgc2V0IGZpcnN0IGluXG4mIzQzOyAqIF9fYWxsb2NfcGFnZXMoKSBmb3IgdGhlIGZhc3QgcGF0aCwgYW5kIG1pZ2h0IGJlIGxhdGVyIGNoYW5nZWRcbiYjNDM7ICogaW4gX19hbGxvY19wYWdlc19zbG93cGF0aCgpLiBBbGwgb3RoZXIgZnVuY3Rpb25zIHBhc3MgdGhlIHdob2xlIHN0cnVjdHVyZVxuJiM0MzsgKiBieSBhIGNvbnN0IHBvaW50ZXIuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgYWxsb2NfY29udGV4dCB7XG4mIzQzO1x0c3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdDtcbiYjNDM7XHRjb25zdCBub2RlbWFza190ICpub2RlbWFzaztcbiYjNDM7XHRzdHJ1Y3Qgem9uZXJlZiAqcHJlZmVycmVkX3pvbmVyZWY7XG4mIzQzO1x0aW50IG1pZ3JhdGV0eXBlO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGhpZ2hlc3Rfem9uZWlkeCByZXByZXNlbnRzIGhpZ2hlc3QgdXNhYmxlIHpvbmUgaW5kZXggb2ZcbiYjNDM7XHQgKiB0aGUgYWxsb2NhdGlvbiByZXF1ZXN0LiBEdWUgdG8gdGhlIG5hdHVyZSBvZiB0aGUgem9uZSxcbiYjNDM7XHQgKiBtZW1vcnkgb24gbG93ZXIgem9uZSB0aGFuIHRoZSBoaWdoZXN0X3pvbmVpZHggd2lsbCBiZVxuJiM0MztcdCAqIHByb3RlY3RlZCBieSBsb3dtZW1fcmVzZXJ2ZVtoaWdoZXN0X3pvbmVpZHhdLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogaGlnaGVzdF96b25laWR4IGlzIGFsc28gdXNlZCBieSByZWNsYWltL2NvbXBhY3Rpb24gdG8gbGltaXRcbiYjNDM7XHQgKiB0aGUgdGFyZ2V0IHpvbmUgc2luY2UgaGlnaGVyIHpvbmUgdGhhbiB0aGlzIGluZGV4IGNhbm5vdCBiZVxuJiM0MztcdCAqIHVzYWJsZSBmb3IgdGhpcyBhbGxvY2F0aW9uIHJlcXVlc3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZW51bSB6b25lX3R5cGUgaGlnaGVzdF96b25laWR4O1xuJiM0MztcdGJvb2wgc3ByZWFkX2RpcnR5X3BhZ2VzO1xuJiM0MztcdC8qIE9ubHkgZmxhZ3MgdGhhdCBhcmUgZ2xvYmFsIHRvIHRoZSB3aG9sZSBhbGxvY2F0aW9uIGdvIGhlcmUuICovXG4mIzQzO1x0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBvcmRlciBvZiBhIGZyZWUgcGFnZSBpbiB0aGUgYnVkZHkgc3lzdGVtLiBJblxuJiM0MzsgKiBnZW5lcmFsLCBwYWdlX3pvbmUocGFnZSktXHUwMDNlbG9jayBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlciB0byBwcmV2ZW50IHRoZVxuJiM0MzsgKiBwYWdlIGZyb20gYmVpbmcgYWxsb2NhdGVkIGluIHBhcmFsbGVsIGFuZCByZXR1cm5pbmcgZ2FyYmFnZSBhcyB0aGUgb3JkZXIuXG4mIzQzOyAqIElmIGEgY2FsbGVyIGRvZXMgbm90IGhvbGQgcGFnZV96b25lKHBhZ2UpLVx1MDAzZWxvY2ssIGl0IG11c3QgZ3VhcmFudGVlIHRoYXQgdGhlXG4mIzQzOyAqIHBhZ2UgY2Fubm90IGJlIGFsbG9jYXRlZCBvciBtZXJnZWQgaW4gcGFyYWxsZWwuIEFsdGVybmF0aXZlbHksIGl0IG11c3RcbiYjNDM7ICogaGFuZGxlIGludmFsaWQgdmFsdWVzIGdyYWNlZnVsbHksIGFuZCB1c2UgYnVkZHlfb3JkZXJfdW5zYWZlKCkgYmVsb3cuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBidWRkeV9vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSlcbiYjNDM7e1xuJiM0MztcdC8qIFBhZ2VCdWRkeSgpIG11c3QgYmUgY2hlY2tlZCBieSB0aGUgY2FsbGVyICovXG4mIzQzO1x0cmV0dXJuIHBhZ2VfcHJpdmF0ZShwYWdlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogTGlrZSBidWRkeV9vcmRlcigpLCBidXQgZm9yIGNhbGxlcnMgd2hvIGNhbm5vdCBhZmZvcmQgdG8gaG9sZCB0aGUgem9uZSBsb2NrLlxuJiM0MzsgKiBQYWdlQnVkZHkoKSBzaG91bGQgYmUgY2hlY2tlZCBmaXJzdCBieSB0aGUgY2FsbGVyIHRvIG1pbmltaXplIHJhY2Ugd2luZG93LFxuJiM0MzsgKiBhbmQgaW52YWxpZCB2YWx1ZXMgbXVzdCBiZSBoYW5kbGVkIGdyYWNlZnVsbHkuXG4mIzQzOyAqXG4mIzQzOyAqIFJFQURfT05DRSBpcyB1c2VkIHNvIHRoYXQgaWYgdGhlIGNhbGxlciBhc3NpZ25zIHRoZSByZXN1bHQgaW50byBhIGxvY2FsXG4mIzQzOyAqIHZhcmlhYmxlIGFuZCBlLmcuIHRlc3RzIGl0IGZvciB2YWxpZCByYW5nZSBiZWZvcmUgdXNpbmcsIHRoZSBjb21waWxlciBjYW5ub3RcbiYjNDM7ICogZGVjaWRlIHRvIHJlbW92ZSB0aGUgdmFyaWFibGUgYW5kIGlubGluZSB0aGUgcGFnZV9wcml2YXRlKHBhZ2UpIG11bHRpcGxlXG4mIzQzOyAqIHRpbWVzLCBwb3RlbnRpYWxseSBvYnNlcnZpbmcgZGlmZmVyZW50IHZhbHVlcyBpbiB0aGUgdGVzdHMgYW5kIHRoZSBhY3R1YWxcbiYjNDM7ICogdXNlIG9mIHRoZSByZXN1bHQuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKVx0UkVBRF9PTkNFKHBhZ2VfcHJpdmF0ZShwYWdlKSlcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgYSBwYWdlIGlzIGZyZWUgXHUwMDI2XHUwMDI2IGlzIHRoZSBidWRkeVxuJiM0MzsgKiB3ZSBjYW4gY29hbGVzY2UgYSBwYWdlIGFuZCBpdHMgYnVkZHkgaWZcbiYjNDM7ICogKGEpIHRoZSBidWRkeSBpcyBub3QgaW4gYSBob2xlIChjaGVjayBiZWZvcmUgY2FsbGluZyEpIFx1MDAyNlx1MDAyNlxuJiM0MzsgKiAoYikgdGhlIGJ1ZGR5IGlzIGluIHRoZSBidWRkeSBzeXN0ZW0gXHUwMDI2XHUwMDI2XG4mIzQzOyAqIChjKSBhIHBhZ2UgYW5kIGl0cyBidWRkeSBoYXZlIHRoZSBzYW1lIG9yZGVyIFx1MDAyNlx1MDAyNlxuJiM0MzsgKiAoZCkgYSBwYWdlIGFuZCBpdHMgYnVkZHkgYXJlIGluIHRoZSBzYW1lIHpvbmUuXG4mIzQzOyAqXG4mIzQzOyAqIEZvciByZWNvcmRpbmcgd2hldGhlciBhIHBhZ2UgaXMgaW4gdGhlIGJ1ZGR5IHN5c3RlbSwgd2Ugc2V0IFBhZ2VCdWRkeS5cbiYjNDM7ICogU2V0dGluZywgY2xlYXJpbmcsIGFuZCB0ZXN0aW5nIFBhZ2VCdWRkeSBpcyBzZXJpYWxpemVkIGJ5IHpvbmUtXHUwMDNlbG9jay5cbiYjNDM7ICpcbiYjNDM7ICogRm9yIHJlY29yZGluZyBwYWdlJiMzOTtzIG9yZGVyLCB3ZSB1c2UgcGFnZV9wcml2YXRlKHBhZ2UpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sIHBhZ2VfaXNfYnVkZHkoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBwYWdlICpidWRkeSxcbiYjNDM7XHRcdFx0XHQgdW5zaWduZWQgaW50IG9yZGVyKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFwYWdlX2lzX2d1YXJkKGJ1ZGR5KSBcdTAwMjZcdTAwMjYgIVBhZ2VCdWRkeShidWRkeSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChidWRkeV9vcmRlcihidWRkeSkgIT0gb3JkZXIpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogem9uZSBjaGVjayBpcyBkb25lIGxhdGUgdG8gYXZvaWQgdXNlbGVzc2x5IGNhbGN1bGF0aW5nXG4mIzQzO1x0ICogem9uZS9ub2RlIGlkcyBmb3IgcGFnZXMgdGhhdCBjb3VsZCBuZXZlciBtZXJnZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocGFnZV96b25lX2lkKHBhZ2UpICE9IHBhZ2Vfem9uZV9pZChidWRkeSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFZNX0JVR19PTl9QQUdFKHBhZ2VfY291bnQoYnVkZHkpICE9IDAsIGJ1ZGR5KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIExvY2F0ZSB0aGUgc3RydWN0IHBhZ2UgZm9yIGJvdGggdGhlIG1hdGNoaW5nIGJ1ZGR5IGluIG91clxuJiM0MzsgKiBwYWlyIChidWRkeTEpIGFuZCB0aGUgY29tYmluZWQgTyhuJiM0MzsxKSBwYWdlIHRoZXkgZm9ybSAocGFnZSkuXG4mIzQzOyAqXG4mIzQzOyAqIDEpIEFueSBidWRkeSBCMSB3aWxsIGhhdmUgYW4gb3JkZXIgTyB0d2luIEIyIHdoaWNoIHNhdGlzZmllc1xuJiM0MzsgKiB0aGUgZm9sbG93aW5nIGVxdWF0aW9uOlxuJiM0MzsgKiAgICAgQjIgPSBCMSBeICgxIFx1MDAzY1x1MDAzYyBPKVxuJiM0MzsgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIHN0YXJ0aW5nIGJ1ZGR5IChidWRkeTIpIGlzICM4IGl0cyBvcmRlclxuJiM0MzsgKiAxIGJ1ZGR5IGlzICMxMDpcbiYjNDM7ICogICAgIEIyID0gOCBeICgxIFx1MDAzY1x1MDAzYyAxKSA9IDggXiAyID0gMTBcbiYjNDM7ICpcbiYjNDM7ICogMikgQW55IGJ1ZGR5IEIgd2lsbCBoYXZlIGFuIG9yZGVyIE8mIzQzOzEgcGFyZW50IFAgd2hpY2hcbiYjNDM7ICogc2F0aXNmaWVzIHRoZSBmb2xsb3dpbmcgZXF1YXRpb246XG4mIzQzOyAqICAgICBQID0gQiBcdTAwMjYgfigxIFx1MDAzY1x1MDAzYyBPKVxuJiM0MzsgKlxuJiM0MzsgKiBBc3N1bXB0aW9uOiAqX21lbV9tYXAgaXMgY29udGlndW91cyBhdCBsZWFzdCB1cCB0byBNQVhfUEFHRV9PUkRFUlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nXG4mIzQzO19fZmluZF9idWRkeV9wZm4odW5zaWduZWQgbG9uZyBwYWdlX3BmbiwgdW5zaWduZWQgaW50IG9yZGVyKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHBhZ2VfcGZuIF4gKDEgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRmluZCB0aGUgYnVkZHkgb2YgQHBhZ2UgYW5kIHZhbGlkYXRlIGl0LlxuJiM0MzsgKiBAcGFnZTogVGhlIGlucHV0IHBhZ2VcbiYjNDM7ICogQHBmbjogVGhlIHBmbiBvZiB0aGUgcGFnZSwgaXQgc2F2ZXMgYSBjYWxsIHRvIHBhZ2VfdG9fcGZuKCkgd2hlbiB0aGVcbiYjNDM7ICogICAgICAgZnVuY3Rpb24gaXMgdXNlZCBpbiB0aGUgcGVyZm9ybWFuY2UtY3JpdGljYWwgX19mcmVlX29uZV9wYWdlKCkuXG4mIzQzOyAqIEBvcmRlcjogVGhlIG9yZGVyIG9mIHRoZSBwYWdlXG4mIzQzOyAqIEBidWRkeV9wZm46IFRoZSBvdXRwdXQgcG9pbnRlciB0byB0aGUgYnVkZHkgcGZuLCBpdCBhbHNvIHNhdmVzIGEgY2FsbCB0b1xuJiM0MzsgKiAgICAgICAgICAgICBwYWdlX3RvX3BmbigpLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgZm91bmQgYnVkZHkgY2FuIGJlIGEgbm9uIFBhZ2VCdWRkeSwgb3V0IG9mIEBwYWdlJiMzOTtzIHpvbmUsIG9yIGl0cyBvcmRlciBpc1xuJiM0MzsgKiBub3QgdGhlIHNhbWUgYXMgQHBhZ2UuIFRoZSB2YWxpZGF0aW9uIGlzIG5lY2Vzc2FyeSBiZWZvcmUgdXNlIGl0LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRoZSBmb3VuZCBidWRkeSBwYWdlIG9yIE5VTEwgaWYgbm90IGZvdW5kLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZmluZF9idWRkeV9wYWdlX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSxcbiYjNDM7XHRcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGludCBvcmRlciwgdW5zaWduZWQgbG9uZyAqYnVkZHlfcGZuKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBfX2J1ZGR5X3BmbiA9IF9fZmluZF9idWRkeV9wZm4ocGZuLCBvcmRlcik7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKmJ1ZGR5O1xuJiM0MztcbiYjNDM7XHRidWRkeSA9IHBhZ2UgJiM0MzsgKF9fYnVkZHlfcGZuIC0gcGZuKTtcbiYjNDM7XHRpZiAoYnVkZHlfcGZuKVxuJiM0MztcdFx0KmJ1ZGR5X3BmbiA9IF9fYnVkZHlfcGZuO1xuJiM0MztcbiYjNDM7XHRpZiAocGFnZV9pc19idWRkeShwYWdlLCBidWRkeSwgb3JkZXIpKVxuJiM0MztcdFx0cmV0dXJuIGJ1ZGR5O1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztleHRlcm4gc3RydWN0IHBhZ2UgKl9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuJiM0MztcdFx0XHRcdHVuc2lnbmVkIGxvbmcgZW5kX3Bmbiwgc3RydWN0IHpvbmUgKnpvbmUpO1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqcGFnZWJsb2NrX3Bmbl90b19wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuJiM0MztcdFx0XHRcdHVuc2lnbmVkIGxvbmcgZW5kX3Bmbiwgc3RydWN0IHpvbmUgKnpvbmUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoem9uZS1cdTAwM2Vjb250aWd1b3VzKVxuJiM0MztcdFx0cmV0dXJuIHBmbl90b19wYWdlKHN0YXJ0X3Bmbik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX3BhZ2VibG9ja19wZm5fdG9fcGFnZShzdGFydF9wZm4sIGVuZF9wZm4sIHpvbmUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztleHRlcm4gdm9pZCBfX2ZyZWVfcGFnZXNfY29yZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuJiM0MztcdFx0ZW51bSBtZW1pbml0X2NvbnRleHQgY29udGV4dCk7XG4mIzQzO1xuJiM0Mzt2b2lkIHBvc3RfYWxsb2NfaG9vayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBnZnBfZmxhZ3MsXG4mIzQzO1x0XHQgICAgIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyk7XG4mIzQzO2V4dGVybiBib29sIGZyZWVfcGFnZXNfcHJlcGFyZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbiYjNDM7XG4mIzQzO2V4dGVybiBpbnQgdXNlcl9taW5fZnJlZV9rYnl0ZXM7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgbmlkLFxuJiM0MztcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyk7XG4mIzQzOyNkZWZpbmUgX19hbGxvY19mcm96ZW5fcGFnZXMoLi4uKSBcXFxuJiM0MztcdGFsbG9jX2hvb2tzKF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihfX1ZBX0FSR1NfXykpXG4mIzQzO3ZvaWQgZnJlZV9mcm96ZW5fcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG4mIzQzO3ZvaWQgZnJlZV91bnJlZl9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19OVU1BXG4mIzQzO3N0cnVjdCBwYWdlICphbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90LCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICphbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnAsIG9yZGVyLCBudW1hX25vZGVfaWQoKSwgTlVMTCxcbiYjNDM7XHRcdFx0XHRcdCAgIDAgLyogQUxMT0NfREVGQVVMVCAqLyk7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjZGVmaW5lIGFsbG9jX2Zyb3plbl9wYWdlcyguLi4pIFxcXG4mIzQzO1x0YWxsb2NfaG9va3MoYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihfX1ZBX0FSR1NfXykpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgcGFnZSAqYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9ja19ub3Byb2YoZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbmlkLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuJiM0MzsjZGVmaW5lIGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2soLi4uKSBcXFxuJiM0MztcdGFsbG9jX2hvb2tzKGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mKF9fVkFfQVJHU19fKSlcbiYjNDM7dm9pZCBmcmVlX2Zyb3plbl9wYWdlc19ub2xvY2soc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxuJiM0MztcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2ssIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyk7XG4mIzQzOyNkZWZpbmUgX19hbGxvY19wYWdlcyguLi4pXHRcdFx0YWxsb2NfaG9va3MoX19hbGxvY19wYWdlc19ub3Byb2YoX19WQV9BUkdTX18pKVxuJiM0MztcbiYjNDM7ZXh0ZXJuIHZvaWQgem9uZV9wY3BfcmVzZXQoc3RydWN0IHpvbmUgKnpvbmUpO1xuJiM0MztleHRlcm4gdm9pZCB6b25lX3BjcF9kaXNhYmxlKHN0cnVjdCB6b25lICp6b25lKTtcbiYjNDM7ZXh0ZXJuIHZvaWQgem9uZV9wY3BfZW5hYmxlKHN0cnVjdCB6b25lICp6b25lKTtcbiYjNDM7ZXh0ZXJuIHZvaWQgem9uZV9wY3BfaW5pdChzdHJ1Y3Qgem9uZSAqem9uZSk7XG4mIzQzO1xuJiM0MztlbnVtIGZhbGxiYWNrX3Jlc3VsdCB7XG4mIzQzO1x0LyogRm91bmQgc3VpdGFibGUgbWlncmF0ZXR5cGUsICptdF9vdXQgaXMgdmFsaWQuICovXG4mIzQzO1x0RkFMTEJBQ0tfRk9VTkQsXG4mIzQzO1x0LyogTm8gZmFsbGJhY2sgZm91bmQgaW4gcmVxdWVzdGVkIG9yZGVyLiAqL1xuJiM0MztcdEZBTExCQUNLX0VNUFRZLFxuJiM0MztcdC8qIFBhc3NlZCBAY2xhaW1hYmxlLCBidXQgY2xhaW1pbmcgd2hvbGUgYmxvY2sgaXMgYSBiYWQgaWRlYS4gKi9cbiYjNDM7XHRGQUxMQkFDS19OT0NMQUlNLFxuJiM0Mzt9O1xuJiM0MztlbnVtIGZhbGxiYWNrX3Jlc3VsdFxuJiM0MztmaW5kX3N1aXRhYmxlX2ZhbGxiYWNrKHN0cnVjdCBmcmVlX2FyZWEgKmFyZWEsIHVuc2lnbmVkIGludCBvcmRlcixcbiYjNDM7XHRcdCAgICAgICBpbnQgbWlncmF0ZXR5cGUsIGJvb2wgY2xhaW1hYmxlLCBpbnQgKm10X291dCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZnJlZV9hcmVhX2VtcHR5KHN0cnVjdCBmcmVlX2FyZWEgKmFyZWEsIGludCBtaWdyYXRldHlwZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBsaXN0X2VtcHR5KFx1MDAyNmFyZWEtXHUwMDNlZnJlZV9saXN0W21pZ3JhdGV0eXBlXSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIENvbnZlcnQgR0ZQIGZsYWdzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgbWlncmF0ZSB0eXBlICovXG4mIzQzOyNkZWZpbmUgR0ZQX01PVkFCTEVfTUFTSyAoX19HRlBfUkVDTEFJTUFCTEV8X19HRlBfTU9WQUJMRSlcbiYjNDM7I2RlZmluZSBHRlBfTU9WQUJMRV9TSElGVCAzXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBnZnBfbWlncmF0ZXR5cGUoY29uc3QgZ2ZwX3QgZ2ZwX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0Vk1fV0FSTl9PTigoZ2ZwX2ZsYWdzIFx1MDAyNiBHRlBfTU9WQUJMRV9NQVNLKSA9PSBHRlBfTU9WQUJMRV9NQVNLKTtcbiYjNDM7XHRCVUlMRF9CVUdfT04oKDFVTCBcdTAwM2NcdTAwM2MgR0ZQX01PVkFCTEVfU0hJRlQpICE9IF9fX0dGUF9NT1ZBQkxFKTtcbiYjNDM7XHRCVUlMRF9CVUdfT04oKF9fX0dGUF9NT1ZBQkxFIFx1MDAzZVx1MDAzZSBHRlBfTU9WQUJMRV9TSElGVCkgIT0gTUlHUkFURV9NT1ZBQkxFKTtcbiYjNDM7XHRCVUlMRF9CVUdfT04oKF9fX0dGUF9SRUNMQUlNQUJMRSBcdTAwM2VcdTAwM2UgR0ZQX01PVkFCTEVfU0hJRlQpICE9IE1JR1JBVEVfUkVDTEFJTUFCTEUpO1xuJiM0MztcdEJVSUxEX0JVR19PTigoKF9fX0dGUF9NT1ZBQkxFIHwgX19fR0ZQX1JFQ0xBSU1BQkxFKSBcdTAwM2VcdTAwM2VcbiYjNDM7XHRcdCAgICAgIEdGUF9NT1ZBQkxFX1NISUZUKSAhPSBNSUdSQVRFX0hJR0hBVE9NSUMpO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkocGFnZV9ncm91cF9ieV9tb2JpbGl0eV9kaXNhYmxlZCkpXG4mIzQzO1x0XHRyZXR1cm4gTUlHUkFURV9VTk1PVkFCTEU7XG4mIzQzO1xuJiM0MztcdC8qIEdyb3VwIGJhc2VkIG9uIG1vYmlsaXR5ICovXG4mIzQzO1x0cmV0dXJuIChfX2ZvcmNlIHVuc2lnbmVkIGxvbmcpKGdmcF9mbGFncyBcdTAwMjYgR0ZQX01PVkFCTEVfTUFTSykgXHUwMDNlXHUwMDNlIEdGUF9NT1ZBQkxFX1NISUZUO1xuJiM0Mzt9XG4mIzQzOyN1bmRlZiBHRlBfTU9WQUJMRV9NQVNLXG4mIzQzOyN1bmRlZiBHRlBfTU9WQUJMRV9TSElGVFxuJiM0MztcbiYjNDM7Ym9vbCBkZWNheV9wY3BfaGlnaChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcCk7XG4mIzQzO3ZvaWQgZHJhaW5fem9uZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcCk7XG4mIzQzO3ZvaWQgZHJhaW5fYWxsX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKTtcbiYjNDM7dm9pZCBkcmFpbl9sb2NhbF9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSk7XG4mIzQzO1xuJiM0Mzt2b2lkIHBhZ2VfYWxsb2NfaW5pdF9jcHVocCh2b2lkKTtcbiYjNDM7dm9pZCBwYWdlX2FsbG9jX3N5c2N0bF9pbml0KHZvaWQpO1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9fTU1fUEFHRV9BTExPQ19IICovXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9mcmFnX2NhY2hlLmMgYi9tbS9wYWdlX2ZyYWdfY2FjaGUuY1xuaW5kZXggZDI0MjNmMzA1NzdlNDkuLmU2M2VmZTc4YjdkNGI0IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9mcmFnX2NhY2hlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfZnJhZ19jYWNoZS5jXG5AQCAtMTgsNyAmIzQzOzE4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9mcmFnX2NhY2hlLmhcdTAwM2Vcbi0jaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3BhZ2VfYWxsb2MuaFwmIzM0O1xuIFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVuY29kZWRfcGFnZV9jcmVhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdFx0XHRcdFx0IGJvb2wgcGZtZW1hbGxvYylcbkBAIC01NywxMCAmIzQzOzU3LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19wYWdlX2ZyYWdfY2FjaGVfcmVmaWxsKHN0cnVjdCBwYWdlX2ZyYWdfY2FjaGUgKm5jLFxuIFx0Z2ZwX21hc2sgPSAoZ2ZwX21hc2sgXHUwMDI2IH5fX0dGUF9ESVJFQ1RfUkVDTEFJTSkgfCAgX19HRlBfQ09NUCB8XG4gXHRcdCAgIF9fR0ZQX05PV0FSTiB8IF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT01FTUFMTE9DO1xuIFx0cGFnZSA9IF9fYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIFBBR0VfRlJBR19DQUNIRV9NQVhfT1JERVIsXG4tXHRcdFx0ICAgICBudW1hX21lbV9pZCgpLCBOVUxMKTtcbiYjNDM7XHRcdFx0ICAgICBudW1hX21lbV9pZCgpLCBOVUxMLCBBTExPQ19ERUZBVUxUKTtcbiAjZW5kaWZcbiBcdGlmICh1bmxpa2VseSghcGFnZSkpIHtcbi1cdFx0cGFnZSA9IF9fYWxsb2NfcGFnZXMoZ2ZwLCAwLCBudW1hX21lbV9pZCgpLCBOVUxMKTtcbiYjNDM7XHRcdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzKGdmcCwgMCwgbnVtYV9tZW1faWQoKSwgTlVMTCwgQUxMT0NfREVGQVVMVCk7XG4gXHRcdG9yZGVyID0gMDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2lzb2xhdGlvbi5jIGIvbW0vcGFnZV9pc29sYXRpb24uY1xuaW5kZXggMzJjZThhN2Q5ZGYzNTUuLmU1ZGZjN2JmNDk0NDYwIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9pc29sYXRpb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9pc29sYXRpb24uY1xuQEAgLTExLDYgJiM0MzsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9vd25lci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWlncmF0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7aW50ZXJuYWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtwYWdlX2FsbG9jLmhcJiMzNDtcbiBcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvcGFnZV9pc29sYXRpb24uaFx1MDAzZVxuZGlmZiAtLWdpdCBhL21tL3BhZ2Vfb3duZXIuYyBiL21tL3BhZ2Vfb3duZXIuY1xuaW5kZXggZmZiYWJhM2Q2OWQzY2UuLjI5MGU0N2UxZmEwOWUxIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9vd25lci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX293bmVyLmNcbkBAIC0xMyw3ICYjNDM7MTMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL2Nsb2NrLmhcdTAwM2VcbiBcbi0jaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3BhZ2VfYWxsb2MuaFwmIzM0O1xuIFxuIC8qXG4gICogVE9ETzogdGVhY2ggUEFHRV9PV05FUl9TVEFDS19ERVBUSCAoX19kdW1wX3BhZ2Vfb3duZXIgYW5kIHNhdmVfc3RhY2spXG5kaWZmIC0tZ2l0IGEvbW0vc2hvd19tZW0uYyBiL21tL3Nob3dfbWVtLmNcbmluZGV4IDFiNzIxYThhZGU2N2RkLi5kMTI4OGI0YzJiNjQwMSAxMDA2NDRcbi0tLSBhL21tL3Nob3dfbWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Nob3dfbWVtLmNcbkBAIC0xNiw2ICYjNDM7MTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Ztc3RhdC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7aW50ZXJuYWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtwYWdlX2FsbG9jLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtzd2FwLmhcJiMzNDtcbiBcbiBhdG9taWNfbG9uZ190IF90b3RhbHJhbV9wYWdlcyBfX3JlYWRfbW9zdGx5O1xuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xuaW5kZXggOWY3NTRjZjFjMTg3NGMuLmZmNDRmNDM3M2Q1MjJiIDEwMDY0NFxuLS0tIGEvbW0vc2x1Yi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmNcbkBAIC01Myw2ICYjNDM7NTMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9rbWVtLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3BhZ2VfYWxsb2MuaFwmIzM0O1xuIFxuIC8qXG4gICogTG9jayBvcmRlcjpcbkBAIC0zMjkxLDcgJiM0MzszMjkyLDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYiAqYWxsb2Nfc2xhYl9wYWdlKGdmcF90IGZsYWdzLCBpbnQgbm9kZSxcbiBcdGVsc2UgaWYgKG5vZGUgPT0gTlVNQV9OT19OT0RFKVxuIFx0XHRwYWdlID0gYWxsb2NfZnJvemVuX3BhZ2VzKGZsYWdzLCBvcmRlcik7XG4gXHRlbHNlXG4tXHRcdHBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlcyhmbGFncywgb3JkZXIsIG5vZGUsIE5VTEwpO1xuJiM0MztcdFx0cGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzKGZsYWdzLCBvcmRlciwgbm9kZSwgTlVMTCxcbiYjNDM7XHRcdFx0XHRcdCAgICBBTExPQ19ERUZBVUxUKTtcbiBcbiBcdGlmICghcGFnZSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtNTI3NSw3ICYjNDM7NTI3Nyw4IEBAIHN0YXRpYyB2b2lkICpfX19rbWFsbG9jX2xhcmdlX25vZGUoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSlcbiBcdGlmIChub2RlID09IE5VTUFfTk9fTk9ERSlcbiBcdFx0cGFnZSA9IGFsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZmxhZ3MsIG9yZGVyKTtcbiBcdGVsc2Vcbi1cdFx0cGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihmbGFncywgb3JkZXIsIG5vZGUsIE5VTEwpO1xuJiM0MztcdFx0cGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihmbGFncywgb3JkZXIsIG5vZGUsIE5VTEwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIEFMTE9DX0RFRkFVTFQpO1xuIFxuIFx0aWYgKHBhZ2UpIHtcbiBcdFx0cHRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpO1xuZGlmZiAtLWdpdCBhL21tL3N3YXAuYyBiL21tL3N3YXAuY1xuaW5kZXggNThlNGVmZjY5OGNjNGUuLmQyNTEzMTMwNWM5NGNiIDEwMDY0NFxuLS0tIGEvbW0vc3dhcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwLmNcbkBAIC0zOSw2ICYjNDM7MzksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1ZmZlcl9oZWFkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3BhZ2VfYWxsb2MuaFwmIzM0O1xuIFxuICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UU1xuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9wYWdlbWFwLmhcdTAwM2VcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA3NTRjNWY1ZDcxNmFhZC4uZGUxODc5ZGIzOTE2MGIgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC02Niw2ICYjNDM7NjYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3N5c2N0bC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7aW50ZXJuYWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtwYWdlX2FsbG9jLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtzd2FwLmhcJiMzNDtcbiBcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbmRpZmYgLS1naXQgYS9tbS92bXN0YXQuYyBiL21tL3Ztc3RhdC5jXG5pbmRleCA3YjkzZmJmOWFmMDkyNi4uM2I1Y2IxMDMxZjcyMDkgMTAwNjQ0XG4tLS0gYS9tbS92bXN0YXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zdGF0LmNcbkBAIC0zMCw2ICYjNDM7MzAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL2lzb2xhdGlvbi5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7aW50ZXJuYWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtwYWdlX2FsbG9jLmhcJiMzNDtcbiBcbiAjaWZkZWYgQ09ORklHX1BST0NfRlNcbiAjaWZkZWYgQ09ORklHX05VTUFcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oIGIvdG9vbHMvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaFxuaW5kZXggNmM3NWRmMzBhMjgxZDEuLmE5M2I4YmQyMDBiNzYwIDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaFxuQEAgLTU1LDcgJiM0Mzs1NSw2IEBAIGVudW0ge1xuICNpZmRlZiBDT05GSUdfTE9DS0RFUFxuIFx0X19fR0ZQX05PTE9DS0RFUF9CSVQsXG4gI2VuZGlmXG4tXHRfX19HRlBfTk9fT0JKX0VYVF9CSVQsXG4gXHRfX19HRlBfTEFTVF9CSVRcbiB9O1xuIFxuQEAgLTk2LDcgJiM0Mzs5NSw2IEBAIGVudW0ge1xuICNlbHNlXG4gI2RlZmluZSBfX19HRlBfTk9MT0NLREVQXHQwXG4gI2VuZGlmXG4tI2RlZmluZSBfX19HRlBfTk9fT0JKX0VYVCAgICAgICBCSVQoX19fR0ZQX05PX09CSl9FWFRfQklUKVxuIFxuIC8qXG4gICogUGh5c2ljYWwgYWRkcmVzcyB6b25lIG1vZGlmaWVycyAoc2VlIGxpbnV4L21tem9uZS5oIC0gbG93IGZvdXIgYml0cylcbkBAIC0xMzcsMTcgJiM0MzsxMzUsMTIgQEAgZW51bSB7XG4gICogbm9kZSB3aXRoIG5vIGZhbGxiYWNrcyBvciBwbGFjZW1lbnQgcG9saWN5IGVuZm9yY2VtZW50cy5cbiAgKlxuICAqICVfX0dGUF9BQ0NPVU5UIGNhdXNlcyB0aGUgYWxsb2NhdGlvbiB0byBiZSBhY2NvdW50ZWQgdG8ga21lbWNnLlxuLSAqXG4tICogJV9fR0ZQX05PX09CSl9FWFQgY2F1c2VzIHNsYWIgYWxsb2NhdGlvbiB0byBoYXZlIG5vIG9iamVjdCBleHRlbnNpb24uXG4tICogbWFya19vYmpfY29kZXRhZ19lbXB0eSgpIHNob3VsZCBiZSBjYWxsZWQgdXBvbiBmcmVlaW5nIGZvciBvYmplY3RzIGFsbG9jYXRlZFxuLSAqIHdpdGggdGhpcyBmbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlaXIgTlVMTCB0YWdzIGFyZSBleHBlY3RlZCBhbmQgbm9ybWFsLlxuICAqL1xuICNkZWZpbmUgX19HRlBfUkVDTEFJTUFCTEUgKChfX2ZvcmNlIGdmcF90KV9fX0dGUF9SRUNMQUlNQUJMRSlcbiAjZGVmaW5lIF9fR0ZQX1dSSVRFXHQoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX1dSSVRFKVxuICNkZWZpbmUgX19HRlBfSEFSRFdBTEwgICAoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX0hBUkRXQUxMKVxuICNkZWZpbmUgX19HRlBfVEhJU05PREVcdCgoX19mb3JjZSBnZnBfdClfX19HRlBfVEhJU05PREUpXG4gI2RlZmluZSBfX0dGUF9BQ0NPVU5UXHQoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX0FDQ09VTlQpXG4tI2RlZmluZSBfX0dGUF9OT19PQkpfRVhUICAgKChfX2ZvcmNlIGdmcF90KV9fX0dGUF9OT19PQkpfRVhUKVxuIFxuIC8qKlxuICAqIERPQzogV2F0ZXJtYXJrIG1vZGlmaWVyc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAzOjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19mcm96ZW5fcGFnZXNfbm9sb2NrX25vcHJvZiYjMzQ7LAogICAgJiMzNDthbGxvY19wYWdlc19ub2RlX25vcHJvZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGludGVybmFsIHBhZ2UgYWxsb2NhdG9yIEFQSSBieSBpbnRyb2R1Y2luZyBgYWxsb2NfZmxhZ3NgIHRvIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAgYW5kIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgLCByZXBsYWNpbmcgYF9fR0ZQX05PX09CSl9FWFRgIGFuZCBgQUxMT0NfVFJZTE9DS2Agd2l0aCBgQUxMT0NfTk9fQ09ERVRBR2AgYW5kIGBBTExPQ19OT0xPQ0tgLiBJdCBhbHNvIG1vdmVzIGBhbGxvY19wYWdlc19ub2RlX25vcHJvZmAgb3V0LW9mLWxpbmUuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gcGFnZSBhbGxvY2F0aW9uLCBlc3BlY2lhbGx5IGluIG5vbi1ibG9ja2luZy9ub2xvY2sgY29udGV4dHMgYW5kIG1lbW9yeSBwcm9maWxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGViZjQwMTgzZTZmYmYyNzA0NmM4OGU1NjQ4NGQ3MTcwNmQwMGIzYWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAyIDAzOjI5OjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9jcHVzZXRzLnJzdAppbmRleCBjNzkwOWU1YWMxMzYxYS4uNTJhMjEzYWZmMDRlNWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2NwdXNldHMucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2NwdXNldHMucnN0CkBAIC0yODQsNyAmIzQzOzI4NCw3IEBAIHRha2UgYWN0aW9uLgogPT0mZ3Q7CiAgICAgVW5sZXNzIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkIGJ5IHdyaXRpbmcgJiMzNDsxJiMzNDsgdG8gdGhlIHNwZWNpYWwgZmlsZQogICAgIC9kZXYvY3B1c2V0L21lbW9yeV9wcmVzc3VyZV9lbmFibGVkLCB0aGUgaG9vayBpbiB0aGUgcmViYWxhbmNlCi0gICAgY29kZSBvZiBfX2FsbG9jX3BhZ2VzKCkgZm9yIHRoaXMgbWV0cmljIHJlZHVjZXMgdG8gc2ltcGx5IG5vdGljaW5nCiYjNDM7ICAgIGNvZGUgb2YgdGhlIHBhZ2UgYWxsb2NhdG9yIGZvciB0aGlzIG1ldHJpYyByZWR1Y2VzIHRvIHNpbXBseSBub3RpY2luZwogICAgIHRoYXQgdGhlIGNwdXNldF9tZW1vcnlfcHJlc3N1cmVfZW5hYmxlZCBmbGFnIGlzIHplcm8uICBTbyBvbmx5CiAgICAgc3lzdGVtcyB0aGF0IGVuYWJsZSB0aGlzIGZlYXR1cmUgd2lsbCBjb21wdXRlIHRoZSBtZXRyaWMuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdAppbmRleCAyM2Y4ZDEzYzI2MjlkNi4uMTZmMzcxMzVlZDgwZGYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QKQEAgLTc2MSw3ICYjNDM7NzYxLDcgQEAgY29tcGFjdF9mYWlsCiAJYnV0IGZhaWxlZC4KIAogSXQgaXMgcG9zc2libGUgdG8gZXN0YWJsaXNoIGhvdyBsb25nIHRoZSBzdGFsbHMgd2VyZSB1c2luZyB0aGUgZnVuY3Rpb24KLXRyYWNlciB0byByZWNvcmQgaG93IGxvbmcgd2FzIHNwZW50IGluIF9fYWxsb2NfcGFnZXMoKSBhbmQKJiM0Mzt0cmFjZXIgdG8gcmVjb3JkIGhvdyBsb25nIHdhcyBzcGVudCBpbiB0aGUgcGFnZSBhbGxvY2F0b3IgYW5kCiB1c2luZyB0aGUgbW1fcGFnZV9hbGxvYyB0cmFjZXBvaW50IHRvIGlkZW50aWZ5IHdoaWNoIGFsbG9jYXRpb25zIHdlcmUKIGZvciBodWdlIHBhZ2VzLgogCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGRiM2Q4YzQ0MWU0YzAwLi5kZTg3OTIxMTc2YjBkYyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTE3MTgxLDYgJiM0MzsxNzE4MSw3IEBAIEY6CW1tL2RlYnVnX3BhZ2VfYWxsb2MuYwogRjoJbW0vZGVidWdfcGFnZV9yZWYuYwogRjoJbW0vZmFpbF9wYWdlX2FsbG9jLmMKIEY6CW1tL3BhZ2VfYWxsb2MuYwomIzQzO0Y6CW1tL3BhZ2VfYWxsb2MuaAogRjoJbW0vcGFnZV9leHQuYwogRjoJbW0vcGFnZV9mcmFnX2NhY2hlLmMKIEY6CW1tL3BhZ2VfaXNvbGF0aW9uLmMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jIGIvYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmMKaW5kZXggZTg2ZTRiYTkxZTFiMzcuLjg5NDBmMDI5MjIyOWY1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYwpAQCAtODMyLDcgJiM0Mzs4MzIsNyBAQCBzdGF0aWMgdm9pZCAqZHNhbGxvY19wYWdlcyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBjcHUpCiAJaW50IG5vZGUgPSBjcHVfdG9fbm9kZShjcHUpOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCi0JcGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9kZShub2RlLCBmbGFncyB8IF9fR0ZQX1pFUk8sIG9yZGVyKTsKJiM0MzsJcGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgZmxhZ3MgfCBfX0dGUF9aRVJPLCBvcmRlcik7CiAJcmV0dXJuIHBhZ2UgPyBwYWdlX2FkZHJlc3MocGFnZSkgOiBOVUxMOwogfQogCkBAIC0xMDg4LDkgJiM0MzsxMDg4LDkgQEAgdm9pZCBpbml0X2FyY2hfcGVic19vbl9jcHUoaW50IGNwdSkKIAogCS8qCiAJICogNEtCLWFsaWduZWQgcG9pbnRlciBvZiB0aGUgb3V0cHV0IGJ1ZmZlcgotCSAqIChfX2FsbG9jX3BhZ2VzX25vZGUoKSByZXR1cm4gcGFnZSBhbGlnbmVkIGFkZHJlc3MpCiYjNDM7CSAqIChhbGxvY19wYWdlc19ub2RlKCkgcmV0dXJucyBwYWdlIGFsaWduZWQgYWRkcmVzcykKIAkgKiBCdWZmZXIgU2l6ZSA9IDRLQiAqIDJeU0laRQotCSAqIGNvbnRpZ3VvdXMgcGh5c2ljYWwgYnVmZmVyIChfX2FsbG9jX3BhZ2VzX25vZGUoKSB3aXRoIG9yZGVyKQomIzQzOwkgKiBjb250aWd1b3VzIHBoeXNpY2FsIGJ1ZmZlciAoYWxsb2NfcGFnZXNfbm9kZSgpIHdpdGggb3JkZXIpCiAJICovCiAJYXJjaF9wZWJzX2Jhc2UgPSB2aXJ0X3RvX3BoeXMoY3B1Yy0mZ3Q7cGVic192YWRkcikgfCBQRUJTX0JVRkZFUl9TSElGVDsKIAl3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0lBMzJfUEVCU19CQVNFLCBhcmNoX3BlYnNfYmFzZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguYwppbmRleCBhMDNhZGQwMGY5MjNlYy4uMjZmMTU1ODRkNGI1MDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguYwpAQCAtMzA0MCw3ICYjNDM7MzA0MCw3IEBAIHN0cnVjdCB2bWNzICphbGxvY192bWNzX2NwdShib29sIHNoYWRvdywgaW50IGNwdSwgZ2ZwX3QgZmxhZ3MpCiAJc3RydWN0IHBhZ2UgKnBhZ2VzOwogCXN0cnVjdCB2bWNzICp2bWNzOwogCi0JcGFnZXMgPSBfX2FsbG9jX3BhZ2VzX25vZGUobm9kZSwgZmxhZ3MsIDApOwomIzQzOwlwYWdlcyA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgZmxhZ3MsIDApOwogCWlmICghcGFnZXMpCiAJCXJldHVybiBOVUxMOwogCXZtY3MgPSBwYWdlX2FkZHJlc3MocGFnZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC9ody5jIGIvYXJjaC94ODYvdmlydC9ody5jCmluZGV4IDdlOTA5MWM2NDBiZTBiLi5hMjM2NDQ3YWM3YTI2MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdmlydC9ody5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L3ZpcnQvaHcuYwpAQCAtMTk2LDcgJiM0MzsxOTYsNyBAQCBzdGF0aWMgX19pbml0IGludCBfX3g4Nl92bXhfaW5pdCh2b2lkKQogCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAkJc3RydWN0IHZtY3MgKnZtY3M7CiAKLQkJcGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9kZShub2RlLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgMCk7CiYjNDM7CQlwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgMCk7CiAJCWlmIChXQVJOX09OX09OQ0UoIXBhZ2UpKSB7CiAJCQl4ODZfdm14X2V4aXQoKTsKIAkJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS14cC94cGNfdXYuYyBiL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX3V2LmMKaW5kZXggNzcyYzc4NzI2ODkzMjcuLmFhY2ZmNzAyMDQyNDE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY191di5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX3V2LmMKQEAgLTE3MCw3ICYjNDM7MTcwLDcgQEAgeHBjX2NyZWF0ZV9ncnVfbXFfdXYodW5zaWduZWQgaW50IG1xX3NpemUsIGludCBjcHUsIGNoYXIgKmlycV9uYW1lLAogCW1xLSZndDttbXJfYmxhZGUgPSB1dl9jcHVfdG9fYmxhZGVfaWQoY3B1KTsKIAogCW5pZCA9IGNwdV90b19ub2RlKGNwdSk7Ci0JcGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9kZShuaWQsCiYjNDM7CXBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKG5pZCwKIAkJCQkgICAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyB8IF9fR0ZQX1RISVNOT0RFLAogCQkJCSAgICAgIHBnX29yZGVyKTsKIAlpZiAocGFnZSA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvZnVuZXRoX3J4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvZnVuZXRoX3J4LmMKaW5kZXggN2UyNTg0ODk1ZGUzOWIuLmQ3MDAwMDE3YWMyYmRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvZnVuZXRoX3J4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnVuZ2libGUvZnVuZXRoL2Z1bmV0aF9yeC5jCkBAIC0xMDMsNyAmIzQzOzEwMyw3IEBAIHN0YXRpYyBpbnQgZnVuZXRoX2FsbG9jX3BhZ2Uoc3RydWN0IGZ1bmV0aF9yeHEgKnEsIHN0cnVjdCBmdW5ldGhfcnhidWYgKnJiLAogCWlmIChjYWNoZV9nZXQocSwgcmIpKQogCQlyZXR1cm4gMDsKIAotCXAgPSBfX2FsbG9jX3BhZ2VzX25vZGUobm9kZSwgZ2ZwIHwgX19HRlBfTk9XQVJOLCAwKTsKJiM0MzsJcCA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgZ2ZwIHwgX19HRlBfTk9XQVJOLCAwKTsKIAlpZiAodW5saWtlbHkoIXApKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnAuaCBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKaW5kZXggY2RmOTVhOWYwYjg3YzEuLjRkNTdlOWMwYmYyMDRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dmcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKQEAgLTE3LDI4ICYjNDM7MTcsNiBAQCBzdHJ1Y3QgbWVtcG9saWN5OwogI2RlZmluZSBfX2RlZmF1bHRfZ2ZwKGEsYiwuLi4pIGIKICNkZWZpbmUgZGVmYXVsdF9nZnAoLi4uKSBfX2RlZmF1bHRfZ2ZwKCwjI19fVkFfQVJHU19fLEdGUF9LRVJORUwpCiAKLS8qIENvbnZlcnQgR0ZQIGZsYWdzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgbWlncmF0ZSB0eXBlICovCi0jZGVmaW5lIEdGUF9NT1ZBQkxFX01BU0sgKF9fR0ZQX1JFQ0xBSU1BQkxFfF9fR0ZQX01PVkFCTEUpCi0jZGVmaW5lIEdGUF9NT1ZBQkxFX1NISUZUIDMKLQotc3RhdGljIGlubGluZSBpbnQgZ2ZwX21pZ3JhdGV0eXBlKGNvbnN0IGdmcF90IGdmcF9mbGFncykKLXsKLQlWTV9XQVJOX09OKChnZnBfZmxhZ3MgJmFtcDsgR0ZQX01PVkFCTEVfTUFTSykgPT0gR0ZQX01PVkFCTEVfTUFTSyk7Ci0JQlVJTERfQlVHX09OKCgxVUwgJmx0OyZsdDsgR0ZQX01PVkFCTEVfU0hJRlQpICE9IF9fX0dGUF9NT1ZBQkxFKTsKLQlCVUlMRF9CVUdfT04oKF9fX0dGUF9NT1ZBQkxFICZndDsmZ3Q7IEdGUF9NT1ZBQkxFX1NISUZUKSAhPSBNSUdSQVRFX01PVkFCTEUpOwotCUJVSUxEX0JVR19PTigoX19fR0ZQX1JFQ0xBSU1BQkxFICZndDsmZ3Q7IEdGUF9NT1ZBQkxFX1NISUZUKSAhPSBNSUdSQVRFX1JFQ0xBSU1BQkxFKTsKLQlCVUlMRF9CVUdfT04oKChfX19HRlBfTU9WQUJMRSB8IF9fX0dGUF9SRUNMQUlNQUJMRSkgJmd0OyZndDsKLQkJICAgICAgR0ZQX01PVkFCTEVfU0hJRlQpICE9IE1JR1JBVEVfSElHSEFUT01JQyk7Ci0KLQlpZiAodW5saWtlbHkocGFnZV9ncm91cF9ieV9tb2JpbGl0eV9kaXNhYmxlZCkpCi0JCXJldHVybiBNSUdSQVRFX1VOTU9WQUJMRTsKLQotCS8qIEdyb3VwIGJhc2VkIG9uIG1vYmlsaXR5ICovCi0JcmV0dXJuIChfX2ZvcmNlIHVuc2lnbmVkIGxvbmcpKGdmcF9mbGFncyAmYW1wOyBHRlBfTU9WQUJMRV9NQVNLKSAmZ3Q7Jmd0OyBHRlBfTU9WQUJMRV9TSElGVDsKLX0KLSN1bmRlZiBHRlBfTU9WQUJMRV9NQVNLCi0jdW5kZWYgR0ZQX01PVkFCTEVfU0hJRlQKLQogc3RhdGljIGlubGluZSBib29sIGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGNvbnN0IGdmcF90IGdmcF9mbGFncykKIHsKIAlyZXR1cm4gISEoZ2ZwX2ZsYWdzICZhbXA7IF9fR0ZQX0RJUkVDVF9SRUNMQUlNKTsKQEAgLTIyNiwxMCAmIzQzOzIwNCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2ZyZWVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2FsbG9jX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcikgeyB9CiAjZW5kaWYKIAotc3RydWN0IHBhZ2UgKl9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCwKLQkJbm9kZW1hc2tfdCAqbm9kZW1hc2spOwotI2RlZmluZSBfX2FsbG9jX3BhZ2VzKC4uLikJCQlhbGxvY19ob29rcyhfX2FsbG9jX3BhZ2VzX25vcHJvZihfX1ZBX0FSR1NfXykpCi0KIHN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLAogCQlub2RlbWFza190ICpub2RlbWFzayk7CiAjZGVmaW5lIF9fZm9saW9fYWxsb2MoLi4uKQkJCWFsbG9jX2hvb2tzKF9fZm9saW9fYWxsb2Nfbm9wcm9mKF9fVkFfQVJHU19fKSkKQEAgLTI3OCwyMSAmIzQzOzI1Miw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB3YXJuX2lmX25vZGVfb2ZmbGluZShpbnQgdGhpc19ub2RlLCBnZnBfdCBnZnBfbWFzaykKIAlkdW1wX3N0YWNrKCk7CiB9CiAKLS8qCi0gKiBBbGxvY2F0ZSBwYWdlcywgcHJlZmVycmluZyB0aGUgbm9kZSBnaXZlbiBhcyBuaWQuIFRoZSBub2RlIG11c3QgYmUgdmFsaWQgYW5kCi0gKiBvbmxpbmUuIEZvciBtb3JlIGdlbmVyYWwgaW50ZXJmYWNlLCBzZWUgYWxsb2NfcGFnZXNfbm9kZSgpLgotICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICoKLV9fYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YoaW50IG5pZCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcikKLXsKLQlWTV9CVUdfT04obmlkICZsdDsgMCB8fCBuaWQgJmd0Oz0gTUFYX05VTU5PREVTKTsKLQl3YXJuX2lmX25vZGVfb2ZmbGluZShuaWQsIGdmcF9tYXNrKTsKLQotCXJldHVybiBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnBfbWFzaywgb3JkZXIsIG5pZCwgTlVMTCk7Ci19Ci0KLSNkZWZpbmUgIF9fYWxsb2NfcGFnZXNfbm9kZSguLi4pCQlhbGxvY19ob29rcyhfX2FsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKF9fVkFfQVJHU19fKSkKLQogc3RhdGljIGlubGluZQogc3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgbmlkKQogewpAQCAtMzA5LDE0ICYjNDM7MjY4LDcgQEAgc3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgbmlkKQogICogcHJlZmVyIHRoZSBjdXJyZW50IENQVSYjMzk7cyBjbG9zZXN0IG5vZGUuIE90aGVyd2lzZSBub2RlIG11c3QgYmUgdmFsaWQgYW5kCiAgKiBvbmxpbmUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKGludCBuaWQsIGdmcF90IGdmcF9tYXNrLAotCQkJCQkJICAgdW5zaWduZWQgaW50IG9yZGVyKQotewotCWlmIChuaWQgPT0gTlVNQV9OT19OT0RFKQotCQluaWQgPSBudW1hX21lbV9pZCgpOwotCi0JcmV0dXJuIF9fYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YobmlkLCBnZnBfbWFzaywgb3JkZXIpOwotfQomIzQzO3N0cnVjdCBwYWdlICphbGxvY19wYWdlc19ub2RlX25vcHJvZihpbnQgbmlkLCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKTsKIAogI2RlZmluZSAgYWxsb2NfcGFnZXNfbm9kZSguLi4pCQkJYWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKQogCkBAIC0zOTUsMTAgJiM0MzszNDcsNiBAQCBleHRlcm4gdm9pZCBmcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IG9yZGVyKTsKICNkZWZpbmUgX19mcmVlX3BhZ2UocGFnZSkgX19mcmVlX3BhZ2VzKChwYWdlKSwgMCkKICNkZWZpbmUgZnJlZV9wYWdlKGFkZHIpIGZyZWVfcGFnZXMoKGFkZHIpLCAwKQogCi12b2lkIHBhZ2VfYWxsb2NfaW5pdF9jcHVocCh2b2lkKTsKLWJvb2wgZGVjYXlfcGNwX2hpZ2goc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwZXJfY3B1X3BhZ2VzICpwY3ApOwotdm9pZCBkcmFpbl96b25lX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwKTsKLXZvaWQgZHJhaW5fYWxsX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKTsKIHZvaWQgZHJhaW5fbG9jYWxfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUpOwogCiB2b2lkIHBhZ2VfYWxsb2NfaW5pdF9sYXRlKHZvaWQpOwpkaWZmIC0tZ2l0IGEvbW0vYWxsb2NfdGFnLmMgYi9tbS9hbGxvY190YWcuYwppbmRleCBkOWJlMWNmNTE4N2Q5Ny4uYTMyYTk0ZTc1OWI5NGIgMTAwNjQ0Ci0tLSBhL21tL2FsbG9jX3RhZy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2FsbG9jX3RhZy5jCkBAIC0xNSw2ICYjNDM7MTUsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3ZtYWxsb2MuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rbWVtbGVhay5oJmd0OwogCiYjNDM7I2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKJiM0MzsKICNkZWZpbmUgQUxMT0NJTkZPX0ZJTEVfTkFNRQkJJiMzNDthbGxvY2luZm8mIzM0OwogI2RlZmluZSBNT0RVTEVfQUxMT0NfVEFHX1ZNQVBfU0laRQkoMTAwMDAwVUwgKiBzaXplb2Yoc3RydWN0IGFsbG9jX3RhZykpCiAjZGVmaW5lIFNFQ1RJT05fU1RBUlQoTkFNRSkJCShDT0RFVEFHX1NFQ1RJT05fU1RBUlRfUFJFRklYIE5BTUUpCkBAIC03ODMsMTkgJiM0Mzs3ODUsNiBAQCBzdHJ1Y3QgcGZuX3Bvb2wgewogCiAjZGVmaW5lIFBGTl9QT09MX1NJWkUJCQkoKFBBR0VfU0laRSAtIG9mZnNldG9mKHN0cnVjdCBwZm5fcG9vbCwgcGZucykpIC8gXAogCQkJCQkgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQotCi0vKgotICogU2tpcCBlYXJseSBQRk4gcmVjb3JkaW5nIGZvciBhIHBhZ2UgYWxsb2NhdGlvbi4gIFJldXNlcyB0aGUKLSAqICVfX0dGUF9OT19PQkpfRVhUIGJpdC4gIFVzZWQgYnkgX19hbGxvY190YWdfYWRkX2Vhcmx5X3BmbigpIHRvIGF2b2lkCi0gKiByZWN1cnNpb24gd2hlbiBhbGxvY2F0aW5nIHBhZ2VzIGZvciB0aGUgZWFybHkgUEZOIHRyYWNraW5nIGxpc3QKLSAqIGl0c2VsZi4KLSAqCi0gKiBDb2RldGFncyBvZiB0aGUgcGFnZXMgYWxsb2NhdGVkIHdpdGggX19HRlBfTk9fQ09ERVRBRyBzaG91bGQgYmUKLSAqIGNsZWFyZWQgKHZpYSBjbGVhcl9wYWdlX3RhZ19yZWYoKSkgYmVmb3JlIGZyZWVpbmcgdGhlIHBhZ2VzIHRvIHByZXZlbnQKLSAqIGFsbG9jX3RhZ19zdWJfY2hlY2soKSBmcm9tIHRyaWdnZXJpbmcgYSB3YXJuaW5nLgotICovCi0jZGVmaW5lIF9fR0ZQX05PX0NPREVUQUcJCV9fR0ZQX05PX09CSl9FWFQKLQogc3RhdGljIHN0cnVjdCBwZm5fcG9vbCAqY3VycmVudF9wZm5fcG9vbCBfX2luaXRkYXRhOwogCiBzdGF0aWMgdm9pZCBfX2luaXQgX19hbGxvY190YWdfYWRkX2Vhcmx5X3Bmbih1bnNpZ25lZCBsb25nIHBmbikKQEAgLTgwNiw3ICYjNDM7Nzk1LDggQEAgc3RhdGljIHZvaWQgX19pbml0IF9fYWxsb2NfdGFnX2FkZF9lYXJseV9wZm4odW5zaWduZWQgbG9uZyBwZm4pCiAJZG8gewogCQlwb29sID0gUkVBRF9PTkNFKGN1cnJlbnRfcGZuX3Bvb2wpOwogCQlpZiAoIXBvb2wgfHwgYXRvbWljX3JlYWQoJmFtcDtwb29sLSZndDtjb3VudCkgJmd0Oz0gUEZOX1BPT0xfU0laRSkgewotCQkJc3RydWN0IHBhZ2UgKm5ld19wYWdlID0gYWxsb2NfcGFnZShfX0dGUF9ISUdIIHwgX19HRlBfTk9fQ09ERVRBRyk7CiYjNDM7CQkJc3RydWN0IHBhZ2UgKm5ld19wYWdlID0gX19hbGxvY19wYWdlcyhfX0dGUF9ISUdILCAwLCBudW1hX21lbV9pZCgpLAomIzQzOwkJCQkJCQkgICAgICBOVUxMLCBBTExPQ19OT19DT0RFVEFHKTsKIAkJCXN0cnVjdCBwZm5fcG9vbCAqbmV3OwogCiAJCQlpZiAoIW5ld19wYWdlKSB7CkBAIC04MzcsNyAmIzQzOzgyNyw3IEBAIHR5cGVkZWYgdm9pZCBhbGxvY190YWdfYWRkX2Z1bmModW5zaWduZWQgbG9uZyBwZm4pOwogc3RhdGljIGFsbG9jX3RhZ19hZGRfZnVuYyBfX3JjdSAqYWxsb2NfdGFnX2FkZF9lYXJseV9wZm5fcHRyIF9fcmVmZGF0YSA9CiAJUkNVX0lOSVRJQUxJWkVSKF9fYWxsb2NfdGFnX2FkZF9lYXJseV9wZm4pOwogCi12b2lkIGFsbG9jX3RhZ19hZGRfZWFybHlfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBnZnBfdCBnZnBfZmxhZ3MpCiYjNDM7dm9pZCBhbGxvY190YWdfYWRkX2Vhcmx5X3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKQogewogCWFsbG9jX3RhZ19hZGRfZnVuYyAqYWxsb2NfdGFnX2FkZDsKIApAQCAtODQ1LDcgJiM0Mzs4MzUsNyBAQCB2b2lkIGFsbG9jX3RhZ19hZGRfZWFybHlfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBnZnBfdCBnZnBfZmxhZ3MpCiAJCXJldHVybjsKIAogCS8qIFNraXAgYWxsb2NhdGlvbnMgZm9yIHRoZSB0cmFja2luZyBsaXN0IGl0c2VsZiB0byBhdm9pZCByZWN1cnNpb24uICovCi0JaWYgKGdmcF9mbGFncyAmYW1wOyBfX0dGUF9OT19DT0RFVEFHKQomIzQzOwlpZiAoYWxsb2NfZmxhZ3MgJmFtcDsgQUxMT0NfTk9fQ09ERVRBRykKIAkJcmV0dXJuOwogCiAJcmN1X3JlYWRfbG9jaygpOwpkaWZmIC0tZ2l0IGEvbW0vY29tcGFjdGlvbi5jIGIvbW0vY29tcGFjdGlvbi5jCmluZGV4IGYwODc2NWFkZTAxNGNlLi40YjIzMThmYWQ0ZWI1OSAxMDA2NDQKLS0tIGEvbW0vY29tcGFjdGlvbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2NvbXBhY3Rpb24uYwpAQCAtMjQsNiAmIzQzOzI0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wYWdlX293bmVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY3B1c2V0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtwYWdlX2FsbG9jLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKIAogI2lmZGVmIENPTkZJR19DT01QQUNUSU9OCkBAIC04Miw3ICYjNDM7ODMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGludCBvcmRlcikgeyByZXR1cm4gZmFsc2U7IH0KIAogc3RhdGljIHN0cnVjdCBwYWdlICptYXJrX2FsbG9jYXRlZF9ub3Byb2Yoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewotCXBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgX19HRlBfTU9WQUJMRSk7CiYjNDM7CXBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgX19HRlBfTU9WQUJMRSwgQUxMT0NfREVGQVVMVCk7CiAJc2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTsKIAlyZXR1cm4gcGFnZTsKIH0KQEAgLTE4NTAsNyAmIzQzOzE4NTEsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpjb21wYWN0aW9uX2FsbG9jX25vcHJvZihzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBkYQogCX0KIAlkc3QgPSAoc3RydWN0IGZvbGlvICopZnJlZXBhZ2U7CiAKLQlwb3N0X2FsbG9jX2hvb2soJmFtcDtkc3QtJmd0O3BhZ2UsIG9yZGVyLCBfX0dGUF9NT1ZBQkxFKTsKJiM0MzsJcG9zdF9hbGxvY19ob29rKCZhbXA7ZHN0LSZndDtwYWdlLCBvcmRlciwgX19HRlBfTU9WQUJMRSwgQUxMT0NfREVGQVVMVCk7CiAJc2V0X3BhZ2VfcmVmY291bnRlZCgmYW1wO2RzdC0mZ3Q7cGFnZSk7CiAJaWYgKG9yZGVyKQogCQlwcmVwX2NvbXBvdW5kX3BhZ2UoJmFtcDtkc3QtJmd0O3BhZ2UsIG9yZGVyKTsKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCBlMWJiODE2MzFkNWViMC4uOTk3YTA4YmEzNTQyM2QgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTQ3LDYgJiM0Mzs0Nyw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbm9kZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2Vfb3duZXIuaCZndDsKICNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtwYWdlX2FsbG9jLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtodWdldGxiX3ZtZW1tYXAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2h1Z2V0bGJfY21hLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtodWdldGxiX2ludGVybmFsLmgmIzM0OwpAQCAtMTgwNSw3ICYjNDM7MTgwNiw4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2J1ZGR5X2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLAogCWlmIChhbGxvY190cnlfaGFyZCkKIAkJZ2ZwX21hc2sgfD0gX19HRlBfUkVUUllfTUFZRkFJTDsKIAotCWZvbGlvID0gKHN0cnVjdCBmb2xpbyAqKV9fYWxsb2NfZnJvemVuX3BhZ2VzKGdmcF9tYXNrLCBvcmRlciwgbmlkLCBubWFzayk7CiYjNDM7CWZvbGlvID0gKHN0cnVjdCBmb2xpbyAqKV9fYWxsb2NfZnJvemVuX3BhZ2VzKGdmcF9tYXNrLCBvcmRlciwgbmlkLCBubWFzaywKJiM0MzsJCQkJCQkgICAgIEFMTE9DX0RFRkFVTFQpOwogCiAJLyoKIAkgKiBJZiB3ZSBkaWQgbm90IHNwZWNpZnkgX19HRlBfUkVUUllfTUFZRkFJTCwgYnV0IHN0aWxsIGdvdCBhCmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCA0MzBhYTcyYTQ1NzU4MS4uMzY5YzY1NmM2M2ZhODAgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaApAQCAtNjU4LDE2NSAmIzQzOzY1OCw2IEBAIGV4dGVybiBpbnQgZGVmcmFnX21vZGU7CiB2b2lkIHNldHVwX3Blcl96b25lX3dtYXJrcyh2b2lkKTsKIHZvaWQgY2FsY3VsYXRlX21pbl9mcmVlX2tieXRlcyh2b2lkKTsKIGludCBfX21lbWluaXQgaW5pdF9wZXJfem9uZV93bWFya19taW4odm9pZCk7Ci12b2lkIHBhZ2VfYWxsb2Nfc3lzY3RsX2luaXQodm9pZCk7Ci0KLS8qCi0gKiBTdHJ1Y3R1cmUgZm9yIGhvbGRpbmcgdGhlIG1vc3RseSBpbW11dGFibGUgYWxsb2NhdGlvbiBwYXJhbWV0ZXJzIHBhc3NlZAotICogYmV0d2VlbiBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gYWxsb2NhdGlvbnMsIGluY2x1ZGluZyB0aGUgYWxsb2NfcGFnZXMqCi0gKiBmYW1pbHkgb2YgZnVuY3Rpb25zLgotICoKLSAqIG5vZGVtYXNrLCBtaWdyYXRldHlwZSBhbmQgaGlnaGVzdF96b25laWR4IGFyZSBpbml0aWFsaXplZCBvbmx5IG9uY2UgaW4KLSAqIF9fYWxsb2NfcGFnZXMoKSBhbmQgdGhlbiBuZXZlciBjaGFuZ2UuCi0gKgotICogem9uZWxpc3QsIHByZWZlcnJlZF96b25lIGFuZCBoaWdoZXN0X3pvbmVpZHggYXJlIHNldCBmaXJzdCBpbgotICogX19hbGxvY19wYWdlcygpIGZvciB0aGUgZmFzdCBwYXRoLCBhbmQgbWlnaHQgYmUgbGF0ZXIgY2hhbmdlZAotICogaW4gX19hbGxvY19wYWdlc19zbG93cGF0aCgpLiBBbGwgb3RoZXIgZnVuY3Rpb25zIHBhc3MgdGhlIHdob2xlIHN0cnVjdHVyZQotICogYnkgYSBjb25zdCBwb2ludGVyLgotICovCi1zdHJ1Y3QgYWxsb2NfY29udGV4dCB7Ci0Jc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdDsKLQljb25zdCBub2RlbWFza190ICpub2RlbWFzazsKLQlzdHJ1Y3Qgem9uZXJlZiAqcHJlZmVycmVkX3pvbmVyZWY7Ci0JaW50IG1pZ3JhdGV0eXBlOwotCi0JLyoKLQkgKiBoaWdoZXN0X3pvbmVpZHggcmVwcmVzZW50cyBoaWdoZXN0IHVzYWJsZSB6b25lIGluZGV4IG9mCi0JICogdGhlIGFsbG9jYXRpb24gcmVxdWVzdC4gRHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhlIHpvbmUsCi0JICogbWVtb3J5IG9uIGxvd2VyIHpvbmUgdGhhbiB0aGUgaGlnaGVzdF96b25laWR4IHdpbGwgYmUKLQkgKiBwcm90ZWN0ZWQgYnkgbG93bWVtX3Jlc2VydmVbaGlnaGVzdF96b25laWR4XS4KLQkgKgotCSAqIGhpZ2hlc3Rfem9uZWlkeCBpcyBhbHNvIHVzZWQgYnkgcmVjbGFpbS9jb21wYWN0aW9uIHRvIGxpbWl0Ci0JICogdGhlIHRhcmdldCB6b25lIHNpbmNlIGhpZ2hlciB6b25lIHRoYW4gdGhpcyBpbmRleCBjYW5ub3QgYmUKLQkgKiB1c2FibGUgZm9yIHRoaXMgYWxsb2NhdGlvbiByZXF1ZXN0LgotCSAqLwotCWVudW0gem9uZV90eXBlIGhpZ2hlc3Rfem9uZWlkeDsKLQlib29sIHNwcmVhZF9kaXJ0eV9wYWdlczsKLX07Ci0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG9yZGVyIG9mIGEgZnJlZSBwYWdlIGluIHRoZSBidWRkeSBzeXN0ZW0uIEluCi0gKiBnZW5lcmFsLCBwYWdlX3pvbmUocGFnZSktJmd0O2xvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIgdG8gcHJldmVudCB0aGUKLSAqIHBhZ2UgZnJvbSBiZWluZyBhbGxvY2F0ZWQgaW4gcGFyYWxsZWwgYW5kIHJldHVybmluZyBnYXJiYWdlIGFzIHRoZSBvcmRlci4KLSAqIElmIGEgY2FsbGVyIGRvZXMgbm90IGhvbGQgcGFnZV96b25lKHBhZ2UpLSZndDtsb2NrLCBpdCBtdXN0IGd1YXJhbnRlZSB0aGF0IHRoZQotICogcGFnZSBjYW5ub3QgYmUgYWxsb2NhdGVkIG9yIG1lcmdlZCBpbiBwYXJhbGxlbC4gQWx0ZXJuYXRpdmVseSwgaXQgbXVzdAotICogaGFuZGxlIGludmFsaWQgdmFsdWVzIGdyYWNlZnVsbHksIGFuZCB1c2UgYnVkZHlfb3JkZXJfdW5zYWZlKCkgYmVsb3cuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJ1ZGR5X29yZGVyKHN0cnVjdCBwYWdlICpwYWdlKQotewotCS8qIFBhZ2VCdWRkeSgpIG11c3QgYmUgY2hlY2tlZCBieSB0aGUgY2FsbGVyICovCi0JcmV0dXJuIHBhZ2VfcHJpdmF0ZShwYWdlKTsKLX0KLQotLyoKLSAqIExpa2UgYnVkZHlfb3JkZXIoKSwgYnV0IGZvciBjYWxsZXJzIHdobyBjYW5ub3QgYWZmb3JkIHRvIGhvbGQgdGhlIHpvbmUgbG9jay4KLSAqIFBhZ2VCdWRkeSgpIHNob3VsZCBiZSBjaGVja2VkIGZpcnN0IGJ5IHRoZSBjYWxsZXIgdG8gbWluaW1pemUgcmFjZSB3aW5kb3csCi0gKiBhbmQgaW52YWxpZCB2YWx1ZXMgbXVzdCBiZSBoYW5kbGVkIGdyYWNlZnVsbHkuCi0gKgotICogUkVBRF9PTkNFIGlzIHVzZWQgc28gdGhhdCBpZiB0aGUgY2FsbGVyIGFzc2lnbnMgdGhlIHJlc3VsdCBpbnRvIGEgbG9jYWwKLSAqIHZhcmlhYmxlIGFuZCBlLmcuIHRlc3RzIGl0IGZvciB2YWxpZCByYW5nZSBiZWZvcmUgdXNpbmcsIHRoZSBjb21waWxlciBjYW5ub3QKLSAqIGRlY2lkZSB0byByZW1vdmUgdGhlIHZhcmlhYmxlIGFuZCBpbmxpbmUgdGhlIHBhZ2VfcHJpdmF0ZShwYWdlKSBtdWx0aXBsZQotICogdGltZXMsIHBvdGVudGlhbGx5IG9ic2VydmluZyBkaWZmZXJlbnQgdmFsdWVzIGluIHRoZSB0ZXN0cyBhbmQgdGhlIGFjdHVhbAotICogdXNlIG9mIHRoZSByZXN1bHQuCi0gKi8KLSNkZWZpbmUgYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpCVJFQURfT05DRShwYWdlX3ByaXZhdGUocGFnZSkpCi0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIGEgcGFnZSBpcyBmcmVlICZhbXA7JmFtcDsgaXMgdGhlIGJ1ZGR5Ci0gKiB3ZSBjYW4gY29hbGVzY2UgYSBwYWdlIGFuZCBpdHMgYnVkZHkgaWYKLSAqIChhKSB0aGUgYnVkZHkgaXMgbm90IGluIGEgaG9sZSAoY2hlY2sgYmVmb3JlIGNhbGxpbmchKSAmYW1wOyZhbXA7Ci0gKiAoYikgdGhlIGJ1ZGR5IGlzIGluIHRoZSBidWRkeSBzeXN0ZW0gJmFtcDsmYW1wOwotICogKGMpIGEgcGFnZSBhbmQgaXRzIGJ1ZGR5IGhhdmUgdGhlIHNhbWUgb3JkZXIgJmFtcDsmYW1wOwotICogKGQpIGEgcGFnZSBhbmQgaXRzIGJ1ZGR5IGFyZSBpbiB0aGUgc2FtZSB6b25lLgotICoKLSAqIEZvciByZWNvcmRpbmcgd2hldGhlciBhIHBhZ2UgaXMgaW4gdGhlIGJ1ZGR5IHN5c3RlbSwgd2Ugc2V0IFBhZ2VCdWRkeS4KLSAqIFNldHRpbmcsIGNsZWFyaW5nLCBhbmQgdGVzdGluZyBQYWdlQnVkZHkgaXMgc2VyaWFsaXplZCBieSB6b25lLSZndDtsb2NrLgotICoKLSAqIEZvciByZWNvcmRpbmcgcGFnZSYjMzk7cyBvcmRlciwgd2UgdXNlIHBhZ2VfcHJpdmF0ZShwYWdlKS4KLSAqLwotc3RhdGljIGlubGluZSBib29sIHBhZ2VfaXNfYnVkZHkoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBwYWdlICpidWRkeSwKLQkJCQkgdW5zaWduZWQgaW50IG9yZGVyKQotewotCWlmICghcGFnZV9pc19ndWFyZChidWRkeSkgJmFtcDsmYW1wOyAhUGFnZUJ1ZGR5KGJ1ZGR5KSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKGJ1ZGR5X29yZGVyKGJ1ZGR5KSAhPSBvcmRlcikKLQkJcmV0dXJuIGZhbHNlOwotCi0JLyoKLQkgKiB6b25lIGNoZWNrIGlzIGRvbmUgbGF0ZSB0byBhdm9pZCB1c2VsZXNzbHkgY2FsY3VsYXRpbmcKLQkgKiB6b25lL25vZGUgaWRzIGZvciBwYWdlcyB0aGF0IGNvdWxkIG5ldmVyIG1lcmdlLgotCSAqLwotCWlmIChwYWdlX3pvbmVfaWQocGFnZSkgIT0gcGFnZV96b25lX2lkKGJ1ZGR5KSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JVk1fQlVHX09OX1BBR0UocGFnZV9jb3VudChidWRkeSkgIT0gMCwgYnVkZHkpOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBMb2NhdGUgdGhlIHN0cnVjdCBwYWdlIGZvciBib3RoIHRoZSBtYXRjaGluZyBidWRkeSBpbiBvdXIKLSAqIHBhaXIgKGJ1ZGR5MSkgYW5kIHRoZSBjb21iaW5lZCBPKG4mIzQzOzEpIHBhZ2UgdGhleSBmb3JtIChwYWdlKS4KLSAqCi0gKiAxKSBBbnkgYnVkZHkgQjEgd2lsbCBoYXZlIGFuIG9yZGVyIE8gdHdpbiBCMiB3aGljaCBzYXRpc2ZpZXMKLSAqIHRoZSBmb2xsb3dpbmcgZXF1YXRpb246Ci0gKiAgICAgQjIgPSBCMSBeICgxICZsdDsmbHQ7IE8pCi0gKiBGb3IgZXhhbXBsZSwgaWYgdGhlIHN0YXJ0aW5nIGJ1ZGR5IChidWRkeTIpIGlzICM4IGl0cyBvcmRlcgotICogMSBidWRkeSBpcyAjMTA6Ci0gKiAgICAgQjIgPSA4IF4gKDEgJmx0OyZsdDsgMSkgPSA4IF4gMiA9IDEwCi0gKgotICogMikgQW55IGJ1ZGR5IEIgd2lsbCBoYXZlIGFuIG9yZGVyIE8mIzQzOzEgcGFyZW50IFAgd2hpY2gKLSAqIHNhdGlzZmllcyB0aGUgZm9sbG93aW5nIGVxdWF0aW9uOgotICogICAgIFAgPSBCICZhbXA7IH4oMSAmbHQ7Jmx0OyBPKQotICoKLSAqIEFzc3VtcHRpb246ICpfbWVtX21hcCBpcyBjb250aWd1b3VzIGF0IGxlYXN0IHVwIHRvIE1BWF9QQUdFX09SREVSCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotX19maW5kX2J1ZGR5X3Bmbih1bnNpZ25lZCBsb25nIHBhZ2VfcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIpCi17Ci0JcmV0dXJuIHBhZ2VfcGZuIF4gKDEgJmx0OyZsdDsgb3JkZXIpOwotfQotCi0vKgotICogRmluZCB0aGUgYnVkZHkgb2YgQHBhZ2UgYW5kIHZhbGlkYXRlIGl0LgotICogQHBhZ2U6IFRoZSBpbnB1dCBwYWdlCi0gKiBAcGZuOiBUaGUgcGZuIG9mIHRoZSBwYWdlLCBpdCBzYXZlcyBhIGNhbGwgdG8gcGFnZV90b19wZm4oKSB3aGVuIHRoZQotICogICAgICAgZnVuY3Rpb24gaXMgdXNlZCBpbiB0aGUgcGVyZm9ybWFuY2UtY3JpdGljYWwgX19mcmVlX29uZV9wYWdlKCkuCi0gKiBAb3JkZXI6IFRoZSBvcmRlciBvZiB0aGUgcGFnZQotICogQGJ1ZGR5X3BmbjogVGhlIG91dHB1dCBwb2ludGVyIHRvIHRoZSBidWRkeSBwZm4sIGl0IGFsc28gc2F2ZXMgYSBjYWxsIHRvCi0gKiAgICAgICAgICAgICBwYWdlX3RvX3BmbigpLgotICoKLSAqIFRoZSBmb3VuZCBidWRkeSBjYW4gYmUgYSBub24gUGFnZUJ1ZGR5LCBvdXQgb2YgQHBhZ2UmIzM5O3Mgem9uZSwgb3IgaXRzIG9yZGVyIGlzCi0gKiBub3QgdGhlIHNhbWUgYXMgQHBhZ2UuIFRoZSB2YWxpZGF0aW9uIGlzIG5lY2Vzc2FyeSBiZWZvcmUgdXNlIGl0LgotICoKLSAqIFJldHVybjogdGhlIGZvdW5kIGJ1ZGR5IHBhZ2Ugb3IgTlVMTCBpZiBub3QgZm91bmQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmZpbmRfYnVkZHlfcGFnZV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQl1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBsb25nICpidWRkeV9wZm4pCi17Ci0JdW5zaWduZWQgbG9uZyBfX2J1ZGR5X3BmbiA9IF9fZmluZF9idWRkeV9wZm4ocGZuLCBvcmRlcik7Ci0Jc3RydWN0IHBhZ2UgKmJ1ZGR5OwotCi0JYnVkZHkgPSBwYWdlICYjNDM7IChfX2J1ZGR5X3BmbiAtIHBmbik7Ci0JaWYgKGJ1ZGR5X3BmbikKLQkJKmJ1ZGR5X3BmbiA9IF9fYnVkZHlfcGZuOwotCi0JaWYgKHBhZ2VfaXNfYnVkZHkocGFnZSwgYnVkZHksIG9yZGVyKSkKLQkJcmV0dXJuIGJ1ZGR5OwotCXJldHVybiBOVUxMOwotfQotCi1leHRlcm4gc3RydWN0IHBhZ2UgKl9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAotCQkJCXVuc2lnbmVkIGxvbmcgZW5kX3Bmbiwgc3RydWN0IHpvbmUgKnpvbmUpOwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpwYWdlYmxvY2tfcGZuX3RvX3BhZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCi0JCQkJdW5zaWduZWQgbG9uZyBlbmRfcGZuLCBzdHJ1Y3Qgem9uZSAqem9uZSkKLXsKLQlpZiAoem9uZS0mZ3Q7Y29udGlndW91cykKLQkJcmV0dXJuIHBmbl90b19wYWdlKHN0YXJ0X3Bmbik7Ci0KLQlyZXR1cm4gX19wYWdlYmxvY2tfcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuLCBlbmRfcGZuLCB6b25lKTsKLX0KIAogdm9pZCBzZXRfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKTsKIGJvb2wgcGZuX3JhbmdlX2ludGVyc2VjdHNfem9uZXMoaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCkBAIC04MzEsOCAmIzQzOzY3Miw2IEBAIGV4dGVybiBpbnQgX19pc29sYXRlX2ZyZWVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTsKIGV4dGVybiB2b2lkIF9fcHV0YmFja19pc29sYXRlZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJCQkJICAgIGludCBtdCk7CiBleHRlcm4gdm9pZCBtZW1ibG9ja19mcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIpOwotZXh0ZXJuIHZvaWQgX19mcmVlX3BhZ2VzX2NvcmUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwKLQkJZW51bSBtZW1pbml0X2NvbnRleHQgY29udGV4dCk7CiAKIC8qCiAgKiBUaGlzIHdpbGwgaGF2ZSBubyBlZmZlY3QsIG90aGVyIHRoYW4gcG9zc2libHkgZ2VuZXJhdGluZyBhIHdhcm5pbmcsIGlmIHRoZQpAQCAtOTE0LDQwICYjNDM7NzUzLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGluaXRfY29tcG91bmRfdGFpbChzdHJ1Y3QgcGFnZSAqdGFpbCwKIAlwcmVwX2NvbXBvdW5kX3RhaWwodGFpbCwgaGVhZCwgb3JkZXIpOwogfQogCi12b2lkIHBvc3RfYWxsb2NfaG9vayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBnZnBfZmxhZ3MpOwotZXh0ZXJuIGJvb2wgZnJlZV9wYWdlc19wcmVwYXJlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpOwotCi1leHRlcm4gaW50IHVzZXJfbWluX2ZyZWVfa2J5dGVzOwotCi1zdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90LCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBuaWQsCi0JCW5vZGVtYXNrX3QgKik7Ci0jZGVmaW5lIF9fYWxsb2NfZnJvemVuX3BhZ2VzKC4uLikgXAotCWFsbG9jX2hvb2tzKF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihfX1ZBX0FSR1NfXykpCi12b2lkIGZyZWVfZnJvemVuX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpOwotdm9pZCBmcmVlX3VucmVmX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCk7Ci0KLSNpZmRlZiBDT05GSUdfTlVNQQotc3RydWN0IHBhZ2UgKmFsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QsIHVuc2lnbmVkIGludCBvcmRlcik7Ci0jZWxzZQotc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcikKLXsKLQlyZXR1cm4gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcCwgb3JkZXIsIG51bWFfbm9kZV9pZCgpLCBOVUxMKTsKLX0KLSNlbmRpZgotCi0jZGVmaW5lIGFsbG9jX2Zyb3plbl9wYWdlcyguLi4pIFwKLQlhbGxvY19ob29rcyhhbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKF9fVkFfQVJHU19fKSkKLQotc3RydWN0IHBhZ2UgKmFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mKGdmcF90IGdmcF9mbGFncywgaW50IG5pZCwgdW5zaWduZWQgaW50IG9yZGVyKTsKLSNkZWZpbmUgYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9jayguLi4pIFwKLQlhbGxvY19ob29rcyhhbGxvY19mcm96ZW5fcGFnZXNfbm9sb2NrX25vcHJvZihfX1ZBX0FSR1NfXykpCi12b2lkIGZyZWVfZnJvemVuX3BhZ2VzX25vbG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTsKLQotZXh0ZXJuIHZvaWQgem9uZV9wY3BfcmVzZXQoc3RydWN0IHpvbmUgKnpvbmUpOwotZXh0ZXJuIHZvaWQgem9uZV9wY3BfZGlzYWJsZShzdHJ1Y3Qgem9uZSAqem9uZSk7Ci1leHRlcm4gdm9pZCB6b25lX3BjcF9lbmFibGUoc3RydWN0IHpvbmUgKnpvbmUpOwotZXh0ZXJuIHZvaWQgem9uZV9wY3BfaW5pdChzdHJ1Y3Qgem9uZSAqem9uZSk7Ci0KIGV4dGVybiB2b2lkICptZW1tYXBfYWxsb2MocGh5c19hZGRyX3Qgc2l6ZSwgcGh5c19hZGRyX3QgYWxpZ24sCiAJCQkgIHBoeXNfYWRkcl90IG1pbl9hZGRyLAogCQkJICBpbnQgbmlkLCBib29sIGV4YWN0X25pZCk7CkBAIC0xMTAxLDIzICYjNDM7OTA2LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGluaXRfY21hX3BhZ2VibG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSkKIH0KICNlbmRpZgogCi1lbnVtIGZhbGxiYWNrX3Jlc3VsdCB7Ci0JLyogRm91bmQgc3VpdGFibGUgbWlncmF0ZXR5cGUsICptdF9vdXQgaXMgdmFsaWQuICovCi0JRkFMTEJBQ0tfRk9VTkQsCi0JLyogTm8gZmFsbGJhY2sgZm91bmQgaW4gcmVxdWVzdGVkIG9yZGVyLiAqLwotCUZBTExCQUNLX0VNUFRZLAotCS8qIFBhc3NlZCBAY2xhaW1hYmxlLCBidXQgY2xhaW1pbmcgd2hvbGUgYmxvY2sgaXMgYSBiYWQgaWRlYS4gKi8KLQlGQUxMQkFDS19OT0NMQUlNLAotfTsKLWVudW0gZmFsbGJhY2tfcmVzdWx0Ci1maW5kX3N1aXRhYmxlX2ZhbGxiYWNrKHN0cnVjdCBmcmVlX2FyZWEgKmFyZWEsIHVuc2lnbmVkIGludCBvcmRlciwKLQkJICAgICAgIGludCBtaWdyYXRldHlwZSwgYm9vbCBjbGFpbWFibGUsIGludCAqbXRfb3V0KTsKLQotc3RhdGljIGlubGluZSBib29sIGZyZWVfYXJlYV9lbXB0eShzdHJ1Y3QgZnJlZV9hcmVhICphcmVhLCBpbnQgbWlncmF0ZXR5cGUpCi17Ci0JcmV0dXJuIGxpc3RfZW1wdHkoJmFtcDthcmVhLSZndDtmcmVlX2xpc3RbbWlncmF0ZXR5cGVdKTsKLX0KLQogLyogbW0vdXRpbC5jICovCiBzdHJ1Y3QgYW5vbl92bWEgKmZvbGlvX2Fub25fdm1hKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pOwogCkBAIC0xNDQ1LDUxICYjNDM7MTIzMywxMCBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyAgX19tdXN0X2NoZWNrIHZtX21tYXBfcGdvZmYoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgbG9uZywKIHVuc2lnbmVkIGxvbmcgcmVjbGFpbV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KTsKIHVuc2lnbmVkIGludCByZWNsYWltX2NsZWFuX3BhZ2VzX2Zyb21fbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSwKIAkJCQkJICAgIHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpOwotLyogVGhlIEFMTE9DX1dNQVJLIGJpdHMgYXJlIHVzZWQgYXMgYW4gaW5kZXggdG8gem9uZS0mZ3Q7d2F0ZXJtYXJrICovCi0jZGVmaW5lIEFMTE9DX1dNQVJLX01JTgkJV01BUktfTUlOCi0jZGVmaW5lIEFMTE9DX1dNQVJLX0xPVwkJV01BUktfTE9XCi0jZGVmaW5lIEFMTE9DX1dNQVJLX0hJR0gJV01BUktfSElHSAotI2RlZmluZSBBTExPQ19OT19XQVRFUk1BUktTCTB4MDQgLyogZG9uJiMzOTt0IGNoZWNrIHdhdGVybWFya3MgYXQgYWxsICovCi0KLS8qIE1hc2sgdG8gZ2V0IHRoZSB3YXRlcm1hcmsgYml0cyAqLwotI2RlZmluZSBBTExPQ19XTUFSS19NQVNLCShBTExPQ19OT19XQVRFUk1BUktTLTEpCi0KLS8qCi0gKiBPbmx5IE1NVSBhcmNocyBoYXZlIGFzeW5jIG9vbSB2aWN0aW0gcmVjbGFpbSAtIGFrYSBvb21fcmVhcGVyIHNvIHdlCi0gKiBjYW5ub3QgYXNzdW1lIGEgcmVkdWNlZCBhY2Nlc3MgdG8gbWVtb3J5IHJlc2VydmVzIGlzIHN1ZmZpY2llbnQgZm9yCi0gKiAhTU1VCi0gKi8KLSNpZmRlZiBDT05GSUdfTU1VCi0jZGVmaW5lIEFMTE9DX09PTQkJMHgwOAotI2Vsc2UKLSNkZWZpbmUgQUxMT0NfT09NCQlBTExPQ19OT19XQVRFUk1BUktTCi0jZW5kaWYKLQotI2RlZmluZSBBTExPQ19OT05fQkxPQ0sJCSAweDEwIC8qIENhbGxlciBjYW5ub3QgYmxvY2suIEFsbG93IGFjY2VzcwotCQkJCSAgICAgICAqIHRvIDI1JSBvZiB0aGUgbWluIHdhdGVybWFyayBvcgotCQkJCSAgICAgICAqIDYyLjUlIGlmIF9fR0ZQX0hJR0ggaXMgc2V0LgotCQkJCSAgICAgICAqLwotI2RlZmluZSBBTExPQ19NSU5fUkVTRVJWRQkgMHgyMCAvKiBfX0dGUF9ISUdIIHNldC4gQWxsb3cgYWNjZXNzIHRvIDUwJQotCQkJCSAgICAgICAqIG9mIHRoZSBtaW4gd2F0ZXJtYXJrLgotCQkJCSAgICAgICAqLwotI2RlZmluZSBBTExPQ19DUFVTRVQJCSAweDQwIC8qIGNoZWNrIGZvciBjb3JyZWN0IGNwdXNldCAqLwotI2RlZmluZSBBTExPQ19DTUEJCSAweDgwIC8qIGFsbG93IGFsbG9jYXRpb25zIGZyb20gQ01BIGFyZWFzICovCi0jaWZkZWYgQ09ORklHX1pPTkVfRE1BMzIKLSNkZWZpbmUgQUxMT0NfTk9GUkFHTUVOVAkweDEwMCAvKiBhdm9pZCBtaXhpbmcgcGFnZWJsb2NrIHR5cGVzICovCi0jZWxzZQotI2RlZmluZSBBTExPQ19OT0ZSQUdNRU5UCSAgMHgwCi0jZW5kaWYKLSNkZWZpbmUgQUxMT0NfSElHSEFUT01JQwkweDIwMCAvKiBBbGxvd3MgYWNjZXNzIHRvIE1JR1JBVEVfSElHSEFUT01JQyAqLwotI2RlZmluZSBBTExPQ19UUllMT0NLCQkweDQwMCAvKiBPbmx5IHVzZSBzcGluX3RyeWxvY2sgaW4gYWxsb2NhdGlvbiBwYXRoICovCi0jZGVmaW5lIEFMTE9DX0tTV0FQRAkJMHg4MDAgLyogYWxsb3cgd2FraW5nIG9mIGtzd2FwZCwgX19HRlBfS1NXQVBEX1JFQ0xBSU0gc2V0ICovCi0KLS8qIEZsYWdzIHRoYXQgYWxsb3cgYWxsb2NhdGlvbnMgYmVsb3cgdGhlIG1pbiB3YXRlcm1hcmsuICovCi0jZGVmaW5lIEFMTE9DX1JFU0VSVkVTIChBTExPQ19OT05fQkxPQ0t8QUxMT0NfTUlOX1JFU0VSVkV8QUxMT0NfSElHSEFUT01JQ3xBTExPQ19PT00pCiAKIGVudW0gdHR1X2ZsYWdzOwogc3RydWN0IHRsYmZsdXNoX3VubWFwX2JhdGNoOwogCi0KIC8qCiAgKiBvbmx5IGZvciBNTSBpbnRlcm5hbCB3b3JrIGl0ZW1zIHdoaWNoIGRvIG5vdCBkZXBlbmQgb24KICAqIGFueSBhbGxvY2F0aW9ucyBvciBsb2NrcyB3aGljaCBtaWdodCBkZXBlbmQgb24gYWxsb2NhdGlvbnMKZGlmZiAtLWdpdCBhL21tL2todWdlcGFnZWQuYyBiL21tL2todWdlcGFnZWQuYwppbmRleCA2MTdiY2E3NmRiNDliNi4uNThlMTRkMTU0M2VjYjQgMTAwNjQ0Ci0tLSBhL21tL2todWdlcGFnZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9raHVnZXBhZ2VkLmMKQEAgLTI2LDYgJiM0MzsyNiw3IEBACiAKICNpbmNsdWRlICZsdDthc20vdGxiLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7cGFnZV9hbGxvYy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bW1fc2xvdC5oJiMzNDsKIAogZW51bSBzY2FuX3Jlc3VsdCB7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCA0OTE2YWIxNDUzMjU3My4uYmY3MTdlYzU5NTA4N2QgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuYwpAQCAtNjYsNiAmIzQzOzY2LDcgQEAKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMvbWVtb3J5LWZhaWx1cmUuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtzd2FwLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7cGFnZV9hbGxvYy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7CiAKIHN0YXRpYyBpbnQgc3lzY3RsX21lbW9yeV9mYWlsdXJlX2Vhcmx5X2tpbGwgX19yZWFkX21vc3RseTsKZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCmluZGV4IDdhYzE5ZmFiMjI2MzI0Li45NTM5ZTQwYzQ3OGVkYiAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCkBAIC00MCw2ICYjNDM7NDAsNyBAQAogI2luY2x1ZGUgJmx0O2FzbS90bGJmbHVzaC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7cGFnZV9hbGxvYy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7c2h1ZmZsZS5oJiMzNDsKIAogZW51bSB7CmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IDM2Njk5ZmFiZDNjMjIzLi40MWQ2MzBmMGVhODIxMiAxMDA2NDQKLS0tIGEvbW0vbWVtcG9saWN5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtcG9saWN5LmMKQEAgLTExOSw2ICYjNDM7MTE5LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9tZW1vcnkuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3BhZ2VfYWxsb2MuaCYjMzQ7CiAKIC8qIEludGVybmFsIGZsYWdzICovCiAjZGVmaW5lIE1QT0xfTUZfRElTQ09OVElHX09LIChNUE9MX01GX0lOVEVSTkFMICZsdDsmbHQ7IDApCS8qIFNraXAgY2hlY2tzIGZvciBjb250aW51b3VzIHZtYXMgKi8KQEAgLTI0MjUsOSAmIzQzOzI0MjYsMTEgQEAgc3RhdGljIHN0cnVjdCBwYWdlICphbGxvY19wYWdlc19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwKIAkgKi8KIAlwcmVmZXJyZWRfZ2ZwID0gZ2ZwIHwgX19HRlBfTk9XQVJOOwogCXByZWZlcnJlZF9nZnAgJmFtcDs9IH4oX19HRlBfRElSRUNUX1JFQ0xBSU0gfCBfX0dGUF9OT0ZBSUwpOwotCXBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YocHJlZmVycmVkX2dmcCwgb3JkZXIsIG5pZCwgbm9kZW1hc2spOwomIzQzOwlwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKHByZWZlcnJlZF9nZnAsIG9yZGVyLCBuaWQsIG5vZGVtYXNrLAomIzQzOwkJCQkJICAgQUxMT0NfREVGQVVMVCk7CiAJaWYgKCFwYWdlKQotCQlwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcCwgb3JkZXIsIG5pZCwgTlVMTCk7CiYjNDM7CQlwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcCwgb3JkZXIsIG5pZCwgTlVMTCwKJiM0MzsJCQkJCQkgICBBTExPQ19ERUZBVUxUKTsKIAogCXJldHVybiBwYWdlOwogfQpAQCAtMjQ3NSw3ICYjNDM7MjQ3OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbXBvbChnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwKIAkJCSAqLwogCQkJcGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZigKIAkJCQlnZnAgfCBfX0dGUF9USElTTk9ERSB8IF9fR0ZQX05PUkVUUlksIG9yZGVyLAotCQkJCW5pZCwgTlVMTCk7CiYjNDM7CQkJCW5pZCwgTlVMTCwgQUxMT0NfREVGQVVMVCk7CiAJCQlpZiAocGFnZSB8fCAhKGdmcCAmYW1wOyBfX0dGUF9ESVJFQ1RfUkVDTEFJTSkpCiAJCQkJcmV0dXJuIHBhZ2U7CiAJCQkvKgpAQCAtMjQ4Nyw3ICYjNDM7MjQ5MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbXBvbChnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwKIAkJfQogCX0KIAotCXBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwLCBvcmRlciwgbmlkLCBub2RlbWFzayk7CiYjNDM7CXBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwLCBvcmRlciwgbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7CiAKIAlpZiAodW5saWtlbHkocG9sLSZndDttb2RlID09IE1QT0xfSU5URVJMRUFWRSB8fAogCQkgICAgIHBvbC0mZ3Q7bW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpICZhbXA7JmFtcDsgcGFnZSkgewpkaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jCmluZGV4IDZiODllMmU3NzQzMTEyLi4zNTY0MWZhYzEwOWQ1MyAxMDA2NDQKLS0tIGEvbW0vbW1faW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuYwpAQCAtMzMsNiAmIzQzOzMzLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9rZXhlY19oYW5kb3Zlci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2h1Z2V0bGIuaCZndDsKICNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtwYWdlX2FsbG9jLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzbGFiLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzaHVmZmxlLmgmIzM0OwogCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggNjJmNzFlY2U3Y2ExNzcuLjgwM2IzMmU1YTVlNDdmIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jCkBAIC01Niw2ICYjNDM7NTYsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BnYWxsb2NfdGFnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2RpdjY0LmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7cGFnZV9hbGxvYy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7c2h1ZmZsZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7cGFnZV9yZXBvcnRpbmcuaCYjMzQ7CiAKQEAgLTEyNDgsNyAmIzQzOzEyNDksNyBAQCB2b2lkIF9fY2xlYXJfcGFnZV90YWdfcmVmKHN0cnVjdCBwYWdlICpwYWdlKQogLyogU2hvdWxkIGJlIGNhbGxlZCBvbmx5IGlmIG1lbV9hbGxvY19wcm9maWxpbmdfZW5hYmxlZCgpICovCiBzdGF0aWMgbm9pbmxpbmUKIHZvaWQgX19wZ2FsbG9jX3RhZ19hZGQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKLQkJICAgICAgIHVuc2lnbmVkIGludCBuciwgZ2ZwX3QgZ2ZwX2ZsYWdzKQomIzQzOwkJICAgICAgIHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKQogewogCXVuaW9uIHBndGFnX3JlZl9oYW5kbGUgaGFuZGxlOwogCXVuaW9uIGNvZGV0YWdfcmVmIHJlZjsKQEAgLTEyNjIsMTcgJiM0MzsxMjYzLDE3IEBAIHZvaWQgX19wZ2FsbG9jX3RhZ19hZGQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKIAkJICogcGFnZV9leHQgaXMgbm90IGF2YWlsYWJsZSB5ZXQsIHJlY29yZCB0aGUgcGZuIHNvIHdlIGNhbgogCQkgKiBjbGVhciB0aGUgdGFnIHJlZiBsYXRlciB3aGVuIHBhZ2VfZXh0IGlzIGluaXRpYWxpemVkLgogCQkgKi8KLQkJYWxsb2NfdGFnX2FkZF9lYXJseV9wZm4ocGFnZV90b19wZm4ocGFnZSksIGdmcF9mbGFncyk7CiYjNDM7CQlhbGxvY190YWdfYWRkX2Vhcmx5X3BmbihwYWdlX3RvX3BmbihwYWdlKSwgYWxsb2NfZmxhZ3MpOwogCQlpZiAodGFzay0mZ3Q7YWxsb2NfdGFnKQogCQkJYWxsb2NfdGFnX3NldF9pbmFjY3VyYXRlKHRhc2stJmd0O2FsbG9jX3RhZyk7CiAJfQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcGdhbGxvY190YWdfYWRkKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCi0JCQkJICAgdW5zaWduZWQgaW50IG5yLCBnZnBfdCBnZnBfZmxhZ3MpCiYjNDM7CQkJCSAgIHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKQogewogCWlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSkKLQkJX19wZ2FsbG9jX3RhZ19hZGQocGFnZSwgdGFzaywgbnIsIGdmcF9mbGFncyk7CiYjNDM7CQlfX3BnYWxsb2NfdGFnX2FkZChwYWdlLCB0YXNrLCBuciwgYWxsb2NfZmxhZ3MpOwogfQogCiAvKiBTaG91bGQgYmUgY2FsbGVkIG9ubHkgaWYgbWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkgKi8KQEAgLTE4MDksNyAmIzQzOzE4MTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3NraXBfaW5pdChnZnBfdCBmbGFncykKIH0KIAogaW5saW5lIHZvaWQgcG9zdF9hbGxvY19ob29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsCi0JCQkJZ2ZwX3QgZ2ZwX2ZsYWdzKQomIzQzOwkJCQlnZnBfdCBnZnBfZmxhZ3MsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncykKIHsKIAljb25zdCBib29sIHplcm9fdGFncyA9IGdmcF9mbGFncyAmYW1wOyBfX0dGUF9aRVJPVEFHUzsKIAlib29sIGluaXQgPSAhd2FudF9pbml0X29uX2ZyZWUoKSAmYW1wOyZhbXA7IHdhbnRfaW5pdF9vbl9hbGxvYyhnZnBfZmxhZ3MpICZhbXA7JmFtcDsKQEAgLTE4NjAsMTMgJiM0MzsxODYxLDEzIEBAIGlubGluZSB2b2lkIHBvc3RfYWxsb2NfaG9vayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLAogCiAJc2V0X3BhZ2Vfb3duZXIocGFnZSwgb3JkZXIsIGdmcF9mbGFncyk7CiAJcGFnZV90YWJsZV9jaGVja19hbGxvYyhwYWdlLCBvcmRlcik7Ci0JcGdhbGxvY190YWdfYWRkKHBhZ2UsIGN1cnJlbnQsIDEgJmx0OyZsdDsgb3JkZXIsIGdmcF9mbGFncyk7CiYjNDM7CXBnYWxsb2NfdGFnX2FkZChwYWdlLCBjdXJyZW50LCAxICZsdDsmbHQ7IG9yZGVyLCBhbGxvY19mbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHByZXBfbmV3X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzLAogCQkJCQkJCXVuc2lnbmVkIGludCBhbGxvY19mbGFncykKIHsKLQlwb3N0X2FsbG9jX2hvb2socGFnZSwgb3JkZXIsIGdmcF9mbGFncyk7CiYjNDM7CXBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgZ2ZwX2ZsYWdzLCBhbGxvY19mbGFncyk7CiAKIAlpZiAob3JkZXIgJmFtcDsmYW1wOyAoZ2ZwX2ZsYWdzICZhbXA7IF9fR0ZQX0NPTVApKQogCQlwcmVwX2NvbXBvdW5kX3BhZ2UocGFnZSwgb3JkZXIpOwpAQCAtMjUzMCw3ICYjNDM7MjUzMSw3IEBAIHN0YXRpYyBpbnQgcm1xdWV1ZV9idWxrKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKIAotCWlmICh1bmxpa2VseShhbGxvY19mbGFncyAmYW1wOyBBTExPQ19UUllMT0NLKSkgewomIzQzOwlpZiAodW5saWtlbHkoYWxsb2NfZmxhZ3MgJmFtcDsgQUxMT0NfTk9MT0NLKSkgewogCQlpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKCZhbXA7em9uZS0mZ3Q7bG9jaywgZmxhZ3MpKQogCQkJcmV0dXJuIDA7CiAJfSBlbHNlIHsKQEAgLTMyMTgsNyAmIzQzOzMyMTksNyBAQCBzdHJ1Y3QgcGFnZSAqcm1xdWV1ZV9idWRkeShzdHJ1Y3Qgem9uZSAqcHJlZmVycmVkX3pvbmUsIHN0cnVjdCB6b25lICp6b25lLAogCiAJZG8gewogCQlwYWdlID0gTlVMTDsKLQkJaWYgKHVubGlrZWx5KGFsbG9jX2ZsYWdzICZhbXA7IEFMTE9DX1RSWUxPQ0spKSB7CiYjNDM7CQlpZiAodW5saWtlbHkoYWxsb2NfZmxhZ3MgJmFtcDsgQUxMT0NfTk9MT0NLKSkgewogCQkJaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZSgmYW1wO3pvbmUtJmd0O2xvY2ssIGZsYWdzKSkKIAkJCQlyZXR1cm4gTlVMTDsKIAkJfSBlbHNlIHsKQEAgLTM3NzQsOCAmIzQzOzM3NzUsOCBAQCBhbGxvY19mbGFnc19ub2ZyYWdtZW50KHN0cnVjdCB6b25lICp6b25lLCBnZnBfdCBnZnBfbWFzaykKIH0KIAogLyogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgY3VycmVudF9nZnBfY29udGV4dCgpIHdoaWNoIGNhbiBjaGFuZ2UgZ2ZwX21hc2sgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdmcF90b19hbGxvY19mbGFnc19jbWEoZ2ZwX3QgZ2ZwX21hc2ssCi0JCQkJCQkgIHVuc2lnbmVkIGludCBhbGxvY19mbGFncykKJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhbGxvY19mbGFnc19jbWEoZ2ZwX3QgZ2ZwX21hc2ssCiYjNDM7CQkJCQkgICB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpCiB7CiAjaWZkZWYgQ09ORklHX0NNQQogCWlmIChnZnBfbWlncmF0ZXR5cGUoZ2ZwX21hc2spID09IE1JR1JBVEVfTU9WQUJMRSkKQEAgLTQ0NzQsNyAmIzQzOzQ0NzUsNyBAQCBzdGF0aWMgdm9pZCB3YWtlX2FsbF9rc3dhcGRzKHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssCiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Ci1nZnBfdG9fYWxsb2NfZmxhZ3Nfbm9uYmxvY2tpbmcoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcikKJiM0MzthbGxvY19mbGFnc19ub25ibG9ja2luZyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKQogewogCXVuc2lnbmVkIGludCBhbGxvY19mbGFncyA9IDA7CiAKQEAgLTQ0OTcsNyAmIzQzOzQ0OTgsNyBAQCBnZnBfdG9fYWxsb2NfZmxhZ3Nfbm9uYmxvY2tpbmcoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcikKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKLWdmcF90b19hbGxvY19mbGFncyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKQomIzQzO2FsbG9jX2ZsYWdzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpCiB7CiAJdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzID0gQUxMT0NfV01BUktfTUlOIHwgQUxMT0NfQ1BVU0VUOwogCkBAIC00NTEyLDcgJiM0Mzs0NTEzLDcgQEAgZ2ZwX3RvX2FsbG9jX2ZsYWdzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpCiAJaWYgKGdmcF9tYXNrICZhbXA7IF9fR0ZQX0tTV0FQRF9SRUNMQUlNKQogCQlhbGxvY19mbGFncyB8PSBBTExPQ19LU1dBUEQ7CiAKLQlhbGxvY19mbGFncyB8PSBnZnBfdG9fYWxsb2NfZmxhZ3Nfbm9uYmxvY2tpbmcoZ2ZwX21hc2ssIG9yZGVyKTsKJiM0MzsJYWxsb2NfZmxhZ3MgfD0gYWxsb2NfZmxhZ3Nfbm9uYmxvY2tpbmcoZ2ZwX21hc2ssIG9yZGVyKTsKIAogCWlmICghKGdmcF9tYXNrICZhbXA7IF9fR0ZQX0RJUkVDVF9SRUNMQUlNKSkgewogCQkvKgpAQCAtNDUyNSw3ICYjNDM7NDUyNiw3IEBAIGdmcF90b19hbGxvY19mbGFncyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKQogCX0gZWxzZSBpZiAodW5saWtlbHkocnRfb3JfZGxfdGFzayhjdXJyZW50KSkgJmFtcDsmYW1wOyBpbl90YXNrKCkpCiAJCWFsbG9jX2ZsYWdzIHw9IEFMTE9DX01JTl9SRVNFUlZFOwogCi0JYWxsb2NfZmxhZ3MgPSBnZnBfdG9fYWxsb2NfZmxhZ3NfY21hKGdmcF9tYXNrLCBhbGxvY19mbGFncyk7CiYjNDM7CWFsbG9jX2ZsYWdzID0gYWxsb2NfZmxhZ3NfY21hKGdmcF9tYXNrLCBhbGxvY19mbGFncyk7CiAKIAlpZiAoZGVmcmFnX21vZGUpCiAJCWFsbG9jX2ZsYWdzIHw9IEFMTE9DX05PRlJBR01FTlQ7CkBAIC00NzkwLDggJiM0Mzs0NzkxLDEyIEBAIF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwKIAkgKiBUaGUgZmFzdCBwYXRoIHVzZXMgY29uc2VydmF0aXZlIGFsbG9jX2ZsYWdzIHRvIHN1Y2NlZWQgb25seSB1bnRpbAogCSAqIGtzd2FwZCBuZWVkcyB0byBiZSB3b2tlbiB1cCwgYW5kIHRvIGF2b2lkIHRoZSBjb3N0IG9mIHNldHRpbmcgdXAKIAkgKiBhbGxvY19mbGFncyBwcmVjaXNlbHkuIFNvIHdlIGRvIHRoYXQgbm93LgomIzQzOwkgKgomIzQzOwkgKiBDYW4mIzM5O3QganVzdCBvciBhbGxvY19mbGFncyBpZiBpdCBjb250YWlucyBXTUFSSyBiaXRzLCBidXQgdGhvc2UgZmxhZ3MKJiM0MzsJICogc2hvdWxkbiYjMzk7dCBiZSBzZXQgaW4gYWMtJmd0O2FsbG9jX2ZsYWdzLgogCSAqLwotCWFsbG9jX2ZsYWdzID0gZ2ZwX3RvX2FsbG9jX2ZsYWdzKGdmcF9tYXNrLCBvcmRlcik7CiYjNDM7CVZNX1dBUk5fT04oYWMtJmd0O2FsbG9jX2ZsYWdzICZhbXA7IEFMTE9DX1dNQVJLX01BU0spOwomIzQzOwlhbGxvY19mbGFncyA9IGFjLSZndDthbGxvY19mbGFncyB8IGFsbG9jX2ZsYWdzX3Nsb3dwYXRoKGdmcF9tYXNrLCBvcmRlcik7CiAKIAkvKgogCSAqIFdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgem9uZWxpc3QgaXRlcmF0b3IKQEAgLTQ4MzIsOCAmIzQzOzQ4MzcsOCBAQCBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAKIAlyZXNlcnZlX2ZsYWdzID0gX19nZnBfcGZtZW1hbGxvY19mbGFncyhnZnBfbWFzayk7CiAJaWYgKHJlc2VydmVfZmxhZ3MpCi0JCWFsbG9jX2ZsYWdzID0gZ2ZwX3RvX2FsbG9jX2ZsYWdzX2NtYShnZnBfbWFzaywgcmVzZXJ2ZV9mbGFncykgfAotCQkJCQkgIChhbGxvY19mbGFncyAmYW1wOyBBTExPQ19LU1dBUEQpOwomIzQzOwkJYWxsb2NfZmxhZ3MgPSBhbGxvY19mbGFnc19jbWEoZ2ZwX21hc2ssIHJlc2VydmVfZmxhZ3MpIHwKJiM0MzsJCQkJYWMtJmd0O2FsbG9jX2ZsYWdzIHwgKGFsbG9jX2ZsYWdzICZhbXA7IEFMTE9DX0tTV0FQRCk7CiAKIAkvKgogCSAqIFJlc2V0IHRoZSBub2RlbWFzayBhbmQgem9uZWxpc3QgaXRlcmF0b3JzIGlmIG1lbW9yeSBwb2xpY2llcyBjYW4gYmUKQEAgLTUwNTksMTEgJiM0Mzs1MDY0LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJICogRG9uJiMzOTt0IGludm9rZSBzaG91bGRfZmFpbCBsb2dpYywgc2luY2UgaXQgbWF5IGNhbGwKIAkgKiBnZXRfcmFuZG9tX3UzMigpIGFuZCBwcmludGsoKSB3aGljaCBuZWVkIHRvIHNwaW5fbG9jay4KIAkgKi8KLQlpZiAoISgqYWxsb2NfZmxhZ3MgJmFtcDsgQUxMT0NfVFJZTE9DSykgJmFtcDsmYW1wOwomIzQzOwlpZiAoISgqYWxsb2NfZmxhZ3MgJmFtcDsgQUxMT0NfTk9MT0NLKSAmYW1wOyZhbXA7CiAJICAgIHNob3VsZF9mYWlsX2FsbG9jX3BhZ2UoZ2ZwX21hc2ssIG9yZGVyKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JKmFsbG9jX2ZsYWdzID0gZ2ZwX3RvX2FsbG9jX2ZsYWdzX2NtYShnZnBfbWFzaywgKmFsbG9jX2ZsYWdzKTsKJiM0MzsJKmFsbG9jX2ZsYWdzID0gYWxsb2NfZmxhZ3NfY21hKGdmcF9tYXNrLCAqYWxsb2NfZmxhZ3MpOwogCiAJLyogRGlydHkgem9uZSBiYWxhbmNpbmcgb25seSBkb25lIGluIHRoZSBmYXN0IHBhdGggKi8KIAlhYy0mZ3Q7c3ByZWFkX2RpcnR5X3BhZ2VzID0gKGdmcF9tYXNrICZhbXA7IF9fR0ZQX1dSSVRFKTsKQEAgLTUyMjEsNyAmIzQzOzUyMjYsNyBAQCB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsCiAJCX0KIAkJbnJfYWNjb3VudCYjNDM7JiM0Mzs7CiAKLQkJcHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIDApOwomIzQzOwkJcHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpOwogCQlzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpOwogCQlwYWdlX2FycmF5W25yX3BvcHVsYXRlZCYjNDM7JiM0MztdID0gcGFnZTsKIAl9CkBAIC01MjM1LDcgJiM0Mzs1MjQwLDcgQEAgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLAogCXJldHVybiBucl9wb3B1bGF0ZWQ7CiAKIGZhaWxlZDoKLQlwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzayk7CiYjNDM7CXBhZ2UgPSBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBBTExPQ19ERUZBVUxUKTsKIAlpZiAocGFnZSkKIAkJcGFnZV9hcnJheVtucl9wb3B1bGF0ZWQmIzQzOyYjNDM7XSA9IHBhZ2U7CiAJZ290byBvdXQ7CkBAIC01MjcwLDI0ICYjNDM7NTI3NSwxMDEgQEAgdm9pZCBmcmVlX3BhZ2VzX2J1bGsoc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQogCX0KIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBhbGxvY19vcmRlcl9hbGxvd2VkKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKQomIzQzO3sKJiM0MzsJaWYgKGFsbG9jX2ZsYWdzICZhbXA7IEFMTE9DX05PTE9DSykKJiM0MzsJCXJldHVybiBwY3BfYWxsb3dlZF9vcmRlcihvcmRlcik7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZXJlIGFyZSBzZXZlcmFsIHBsYWNlcyB3aGVyZSB3ZSBhc3N1bWUgdGhhdCB0aGUgb3JkZXIgdmFsdWUgaXMgc2FuZQomIzQzOwkgKiBzbyBiYWlsIG91dCBlYXJseSBpZiB0aGUgcmVxdWVzdCBpcyBvdXQgb2YgYm91bmQuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gIShXQVJOX09OX09OQ0VfR0ZQKG9yZGVyICZndDsgTUFYX1BBR0VfT1JERVIsIGdmcCkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgYWxsb2NfdHJ5bG9ja19hbGxvd2VkKHZvaWQpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBJbiBQUkVFTVBUX1JUIHNwaW5fdHJ5bG9jaygpIHdpbGwgY2FsbCByYXdfc3Bpbl9sb2NrKCkgd2hpY2ggaXMKJiM0MzsJICogdW5zYWZlIGluIE5NSS4gSWYgc3Bpbl90cnlsb2NrKCkgaXMgY2FsbGVkIGZyb20gaGFyZCBJUlEgdGhlIGN1cnJlbnQKJiM0MzsJICogdGFzayBtYXkgYmUgd2FpdGluZyBmb3Igb25lIHJ0X3NwaW5fbG9jaywgYnV0IHJ0X3NwaW5fdHJ5bG9jaygpIHdpbGwKJiM0MzsJICogbWFyayB0aGUgdGFzayBhcyB0aGUgb3duZXIgb2YgYW5vdGhlciBydF9zcGluX2xvY2sgd2hpY2ggd2lsbAomIzQzOwkgKiBjb25mdXNlIFBJIGxvZ2ljLCBzbyByZXR1cm4gaW1tZWRpYXRlbHkgaWYgY2FsbGVkIGZyb20gaGFyZCBJUlEgb3IKJiM0MzsJICogTk1JLgomIzQzOwkgKgomIzQzOwkgKiBOb3RlLCBpcnFzX2Rpc2FibGVkKCkgY2FzZSBpcyBvay4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkCiYjNDM7CSAqIGZyb20gcmF3X3NwaW5fbG9ja19pcnFzYXZlIHJlZ2lvbi4KJiM0MzsJICovCiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSAmYW1wOyZhbXA7IChpbl9ubWkoKSB8fCBpbl9oYXJkaXJxKCkpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBPbiBVUCwgc3Bpbl90cnlsb2NrKCkgYWx3YXlzIHN1Y2NlZWRzIGV2ZW4gd2hlbiBpdCBpcyBsb2NrZWQgKi8KJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19TTVApICZhbXA7JmFtcDsgaW5fbm1pKCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIEJhaWxvdXQsIHNpbmNlIF9kZWZlcnJlZF9ncm93X3pvbmUoKSBuZWVkcyB0byB0YWtlIGEgbG9jayAqLwomIzQzOwlpZiAoZGVmZXJyZWRfcGFnZXNfZW5hYmxlZCgpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBHRlAgZmxhZ3MgdG8gc2V0IGZvciBBTExPQ19OT0xPQ0sgaS5lLiBhbGxvY19wYWdlc19ub2xvY2soKS4KJiM0MzsgKgomIzQzOyAqIERvIG5vdCBzcGVjaWZ5IF9fR0ZQX0RJUkVDVF9SRUNMQUlNLCBzaW5jZSBkaXJlY3QgY2xhaW0gaXMgbm90IGFsbG93ZWQuCiYjNDM7ICogRG8gbm90IHNwZWNpZnkgX19HRlBfS1NXQVBEX1JFQ0xBSU0gZWl0aGVyLCBzaW5jZSB3YWtlIHVwIG9mIGtzd2FwZAomIzQzOyAqIGlzIG5vdCBzYWZlIGluIGFyYml0cmFyeSBjb250ZXh0LgomIzQzOyAqCiYjNDM7ICogVGhlc2UgdHdvIGFyZSB0aGUgY29uZGl0aW9ucyBmb3IgZ2ZwZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoKSBiZWluZyB0cnVlLgomIzQzOyAqCiYjNDM7ICogU3BlY2lmeSBfX0dGUF9OT1dBUk4gc2luY2UgZmFpbGluZyBhbGxvY19wYWdlc19ub2xvY2soKSBpcyBub3QgYSByZWFzb24KJiM0MzsgKiB0byB3YXJuLiBBbHNvIHdhcm4gd291bGQgdHJpZ2dlciBwcmludGsoKSB3aGljaCBpcyB1bnNhZmUgZnJvbQomIzQzOyAqIHZhcmlvdXMgY29udGV4dHMuIFdlIGNhbm5vdCB1c2UgcHJpbnRrX2RlZmVycmVkX2VudGVyKCkgdG8gbWl0aWdhdGUsCiYjNDM7ICogc2luY2UgdGhlIHJ1bm5pbmcgY29udGV4dCBpcyB1bmtub3duLgomIzQzOyAqCiYjNDM7ICogU3BlY2lmeSBfX0dGUF9aRVJPIHRvIG1ha2Ugc3VyZSB0aGF0IGNhbGwgdG8ga21zYW5fYWxsb2NfcGFnZSgpIGJlbG93CiYjNDM7ICogaXMgc2FmZSBpbiBhbnkgY29udGV4dC4gQWxzbyB6ZXJvaW5nIHRoZSBwYWdlIGlzIG1hbmRhdG9yeSBmb3IKJiM0MzsgKiBCUEYgdXNlIGNhc2VzLgomIzQzOyAqCiYjNDM7ICogVGhvdWdoIF9fR0ZQX05PTUVNQUxMT0MgaXMgbm90IGNoZWNrZWQgaW4gdGhlIGNvZGUgcGF0aCBiZWxvdywKJiM0MzsgKiBzcGVjaWZ5IGl0IGhlcmUgdG8gaGlnaGxpZ2h0IHRoYXQgYWxsb2NfcGFnZXNfbm9sb2NrKCkKJiM0MzsgKiBkb2VzbiYjMzk7dCB3YW50IHRvIGRlcGxldGUgcmVzZXJ2ZXMuCiYjNDM7ICovCiYjNDM7c3RhdGljIGNvbnN0IGdmcF90IGdmcF9ub2xvY2sgPSBfX0dGUF9OT1dBUk4gfCBfX0dGUF9aRVJPIHwgX19HRlBfTk9NRU1BTExPQyB8CiYjNDM7CQkJCV9fR0ZQX0NPTVA7CiYjNDM7CiAvKgogICogVGhpcyBpcyB0aGUgJiMzOTtoZWFydCYjMzk7IG9mIHRoZSB6b25lZCBidWRkeSBhbGxvY2F0b3IuCiAgKi8KIHN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsCi0JCWludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzaykKJiM0MzsJCWludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzaywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKQogewogCXN0cnVjdCBwYWdlICpwYWdlOwotCXVuc2lnbmVkIGludCBhbGxvY19mbGFncyA9IEFMTE9DX1dNQVJLX0xPVzsKIAlnZnBfdCBhbGxvY19nZnA7IC8qIFRoZSBnZnBfdCB0aGF0IHdhcyBhY3R1YWxseSB1c2VkIGZvciBhbGxvY2F0aW9uICovCi0Jc3RydWN0IGFsbG9jX2NvbnRleHQgYWMgPSB7IH07CiYjNDM7CXN0cnVjdCBhbGxvY19jb250ZXh0IGFjID0gewomIzQzOwkJLmFsbG9jX2ZsYWdzID0gYWxsb2NfZmxhZ3MsCiYjNDM7CX07CiYjNDM7CXVuc2lnbmVkIGludCBmYXN0cGF0aF9hbGxvY19mbGFncyA9IGFsbG9jX2ZsYWdzOwogCi0JLyoKLQkgKiBUaGVyZSBhcmUgc2V2ZXJhbCBwbGFjZXMgd2hlcmUgd2UgYXNzdW1lIHRoYXQgdGhlIG9yZGVyIHZhbHVlIGlzIHNhbmUKLQkgKiBzbyBiYWlsIG91dCBlYXJseSBpZiB0aGUgcmVxdWVzdCBpcyBvdXQgb2YgYm91bmQuCi0JICovCi0JaWYgKFdBUk5fT05fT05DRV9HRlAob3JkZXIgJmd0OyBNQVhfUEFHRV9PUkRFUiwgZ2ZwKSkKJiM0MzsJLyogT3RoZXIgZmxhZ3MgY291bGQgYmUgc3VwcG9ydGVkIGxhdGVyIGlmIG5lZWRlZC4gKi8KJiM0MzsJaWYgKFdBUk5fT04oYWxsb2NfZmxhZ3MgJmFtcDsgfihBTExPQ19OT0xPQ0sgfCBBTExPQ19OT19DT0RFVEFHKSkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJaWYgKCFhbGxvY19vcmRlcl9hbGxvd2VkKGdmcCwgb3JkZXIsIGFsbG9jX2ZsYWdzKSkKIAkJcmV0dXJuIE5VTEw7CiAKJiM0MzsJaWYgKGFsbG9jX2ZsYWdzICZhbXA7IEFMTE9DX05PTE9DSykgewomIzQzOwkJLyogQ2VydGFpbiBvdGhlciBmbGFncyBjb3VsZCBiZSBzdXBwb3J0ZWQgbGF0ZXIgaWYgbmVlZGVkLiAqLwomIzQzOwkJVk1fV0FSTl9PTl9PTkNFKGdmcCAmYW1wOyB+KF9fR0ZQX0FDQ09VTlQgfCBnZnBfbm9sb2NrKSk7CiYjNDM7CQlpZiAoIWFsbG9jX3RyeWxvY2tfYWxsb3dlZCgpKQomIzQzOwkJCXJldHVybiBOVUxMOwomIzQzOwkJZ2ZwIHw9IGdmcF9ub2xvY2s7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlmYXN0cGF0aF9hbGxvY19mbGFncyB8PSBBTExPQ19XTUFSS19MT1c7CiYjNDM7CX0KJiM0MzsKIAlnZnAgJmFtcDs9IGdmcF9hbGxvd2VkX21hc2s7CiAJLyoKIAkgKiBBcHBseSBzY29wZWQgYWxsb2NhdGlvbiBjb25zdHJhaW50cy4gVGhpcyBpcyBtYWlubHkgYWJvdXQgR0ZQX05PRlMKQEAgLTUyOTksMTkgJiM0Mzs1MzgxLDE5IEBAIHN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJZ2ZwID0gY3VycmVudF9nZnBfY29udGV4dChnZnApOwogCWFsbG9jX2dmcCA9IGdmcDsKIAlpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCBvcmRlciwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssICZhbXA7YWMsCi0JCQkmYW1wO2FsbG9jX2dmcCwgJmFtcDthbGxvY19mbGFncykpCiYjNDM7CQkJJmFtcDthbGxvY19nZnAsICZhbXA7ZmFzdHBhdGhfYWxsb2NfZmxhZ3MpKQogCQlyZXR1cm4gTlVMTDsKIAogCS8qCiAJICogRm9yYmlkIHRoZSBmaXJzdCBwYXNzIGZyb20gZmFsbGluZyBiYWNrIHRvIHR5cGVzIHRoYXQgZnJhZ21lbnQKIAkgKiBtZW1vcnkgdW50aWwgYWxsIGxvY2FsIHpvbmVzIGFyZSBjb25zaWRlcmVkLgogCSAqLwotCWFsbG9jX2ZsYWdzIHw9IGFsbG9jX2ZsYWdzX25vZnJhZ21lbnQoem9uZWxpc3Rfem9uZShhYy5wcmVmZXJyZWRfem9uZXJlZiksIGdmcCk7Ci0JYWxsb2NfZmxhZ3MgfD0gZ2ZwX3RvX2FsbG9jX2ZsYWdzX25vbmJsb2NraW5nKGdmcCwgb3JkZXIpICZhbXA7IEFMTE9DX0hJR0hBVE9NSUM7CiYjNDM7CWZhc3RwYXRoX2FsbG9jX2ZsYWdzIHw9IGFsbG9jX2ZsYWdzX25vZnJhZ21lbnQoem9uZWxpc3Rfem9uZShhYy5wcmVmZXJyZWRfem9uZXJlZiksIGdmcCk7CiYjNDM7CWZhc3RwYXRoX2FsbG9jX2ZsYWdzIHw9IGFsbG9jX2ZsYWdzX25vbmJsb2NraW5nKGdmcCwgb3JkZXIpICZhbXA7IEFMTE9DX0hJR0hBVE9NSUM7CiAKLQkvKiBGaXJzdCBhbGxvY2F0aW9uIGF0dGVtcHQgKi8KLQlwYWdlID0gZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChhbGxvY19nZnAsIG9yZGVyLCBhbGxvY19mbGFncywgJmFtcDthYyk7Ci0JaWYgKGxpa2VseShwYWdlKSkKJiM0MzsJLyogRmlyc3QgYWxsb2NhdGlvbiBhdHRlbXB0IChvciwgZm9yIG5vbG9jaywgb25seSBhdHRlbXB0KSAqLwomIzQzOwlwYWdlID0gZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChhbGxvY19nZnAsIG9yZGVyLCBmYXN0cGF0aF9hbGxvY19mbGFncywgJmFtcDthYyk7CiYjNDM7CWlmIChsaWtlbHkocGFnZSkgfHwgKGFsbG9jX2ZsYWdzICZhbXA7IEFMTE9DX05PTE9DSykpCiAJCWdvdG8gb3V0OwogCiAJYWxsb2NfZ2ZwID0gZ2ZwOwpAQCAtNTMyOCw3ICYjNDM7NTQxMCw4IEBAIHN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiBvdXQ6CiAJaWYgKG1lbWNnX2ttZW1fb25saW5lKCkgJmFtcDsmYW1wOyAoZ2ZwICZhbXA7IF9fR0ZQX0FDQ09VTlQpICZhbXA7JmFtcDsgcGFnZSAmYW1wOyZhbXA7CiAJICAgIHVubGlrZWx5KF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShwYWdlLCBnZnAsIG9yZGVyKSAhPSAwKSkgewotCQlmcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBvcmRlcik7CiYjNDM7CQlfX2ZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyLAomIzQzOwkJCQkgICAgYWxsb2NfZmxhZ3MgJmFtcDsgQUxMT0NfTk9MT0NLID8gRlBJX1RSWUxPQ0sgOiAwKTsKIAkJcGFnZSA9IE5VTEw7CiAJfQogCkBAIC01MzQwLDIyICYjNDM7NTQyMywzNCBAQCBzdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLAogRVhQT1JUX1NZTUJPTChfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YpOwogCiBzdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsCi0JCWludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzaykKJiM0MzsJCWludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzaywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKQogewogCXN0cnVjdCBwYWdlICpwYWdlOwogCi0JcGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnAsIG9yZGVyLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzayk7CiYjNDM7CXBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwLCBvcmRlciwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssCiYjNDM7CQkJCQkgICBhbGxvY19mbGFncyk7CiAJaWYgKHBhZ2UpCiAJCXNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7CiAJcmV0dXJuIHBhZ2U7CiB9Ci1FWFBPUlRfU1lNQk9MKF9fYWxsb2NfcGFnZXNfbm9wcm9mKTsKJiM0MzsKJiM0MztzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YoaW50IG5pZCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcikKJiM0Mzt7CiYjNDM7CWlmIChuaWQgPT0gTlVNQV9OT19OT0RFKQomIzQzOwkJbmlkID0gbnVtYV9tZW1faWQoKTsKJiM0MzsKJiM0MzsJVk1fQlVHX09OKG5pZCAmbHQ7IDAgfHwgbmlkICZndDs9IE1BWF9OVU1OT0RFUyk7CiYjNDM7CXdhcm5faWZfbm9kZV9vZmZsaW5lKG5pZCwgZ2ZwX21hc2spOwomIzQzOwomIzQzOwlyZXR1cm4gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX21hc2ssIG9yZGVyLCBuaWQsIE5VTEwsIEFMTE9DX0RFRkFVTFQpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKTsKIAogc3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IHByZWZlcnJlZF9uaWQsCiAJCW5vZGVtYXNrX3QgKm5vZGVtYXNrKQogewogCXN0cnVjdCBwYWdlICpwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwIHwgX19HRlBfQ09NUCwgb3JkZXIsCi0JCQkJCXByZWZlcnJlZF9uaWQsIG5vZGVtYXNrKTsKJiM0MzsJCQkJCXByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBBTExPQ19ERUZBVUxUKTsKIAlyZXR1cm4gcGFnZV9ybWFwcGFibGVfZm9saW8ocGFnZSk7CiB9CiBFWFBPUlRfU1lNQk9MKF9fZm9saW9fYWxsb2Nfbm9wcm9mKTsKQEAgLTcwMzcsNyAmIzQzOzcxMzIsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9mcmVlX2Zyb3plbl9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBnZnBfdCBnZnBfbWFzaykKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhZ2UsIG5leHQsICZhbXA7bGlzdFtvcmRlcl0sIGxydSkgewogCQkJaW50IGk7CiAKLQkJCXBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgZ2ZwX21hc2spOwomIzQzOwkJCXBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgZ2ZwX21hc2ssIEFMTE9DX0RFRkFVTFQpOwogCQkJaWYgKCFvcmRlcikKIAkJCQljb250aW51ZTsKIApAQCAtNzI0Miw3ICYjNDM7NzMzNyw3IEBAIGludCBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJc3RydWN0IHBhZ2UgKmhlYWQgPSBwZm5fdG9fcGFnZShzdGFydCk7CiAKIAkJY2hlY2tfbmV3X3BhZ2VzKGhlYWQsIG9yZGVyKTsKLQkJcHJlcF9uZXdfcGFnZShoZWFkLCBvcmRlciwgZ2ZwX21hc2ssIDApOwomIzQzOwkJcHJlcF9uZXdfcGFnZShoZWFkLCBvcmRlciwgZ2ZwX21hc2ssIEFMTE9DX0RFRkFVTFQpOwogCX0gZWxzZSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCVdBUk4odHJ1ZSwgJiMzNDtQRk4gcmFuZ2U6IHJlcXVlc3RlZCBbJWx1LCAlbHUpLCBhbGxvY2F0ZWQgWyVsdSwgJWx1KVxuJiMzNDssCkBAIC03ODA0LDcgJiM0Mzs3ODk5LDcgQEAgc3RhdGljIGJvb2wgY29uZF9hY2NlcHRfbWVtb3J5KHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJCXJldHVybiBmYWxzZTsKIAogCS8qIEJhaWxvdXQsIHNpbmNlIHRyeV90b19hY2NlcHRfbWVtb3J5X29uZSgpIG5lZWRzIHRvIHRha2UgYSBsb2NrICovCi0JaWYgKGFsbG9jX2ZsYWdzICZhbXA7IEFMTE9DX1RSWUxPQ0spCiYjNDM7CWlmIChhbGxvY19mbGFncyAmYW1wOyBBTExPQ19OT0xPQ0spCiAJCXJldHVybiBmYWxzZTsKIAogCXdtYXJrID0gcHJvbW9fd21hcmtfcGFnZXMoem9uZSk7CkBAIC03ODc0LDgwICYjNDM7Nzk2OSwxMCBAQCBzdGF0aWMgYm9vbCBfX2ZyZWVfdW5hY2NlcHRlZChzdHJ1Y3QgcGFnZSAqcGFnZSkKIAogc3RydWN0IHBhZ2UgKmFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mKGdmcF90IGdmcF9mbGFncywgaW50IG5pZCwgdW5zaWduZWQgaW50IG9yZGVyKQogewotCS8qCi0JICogRG8gbm90IHNwZWNpZnkgX19HRlBfRElSRUNUX1JFQ0xBSU0sIHNpbmNlIGRpcmVjdCBjbGFpbSBpcyBub3QgYWxsb3dlZC4KLQkgKiBEbyBub3Qgc3BlY2lmeSBfX0dGUF9LU1dBUERfUkVDTEFJTSBlaXRoZXIsIHNpbmNlIHdha2UgdXAgb2Yga3N3YXBkCi0JICogaXMgbm90IHNhZmUgaW4gYXJiaXRyYXJ5IGNvbnRleHQuCi0JICoKLQkgKiBUaGVzZSB0d28gYXJlIHRoZSBjb25kaXRpb25zIGZvciBnZnBmbGFnc19hbGxvd19zcGlubmluZygpIGJlaW5nIHRydWUuCi0JICoKLQkgKiBTcGVjaWZ5IF9fR0ZQX05PV0FSTiBzaW5jZSBmYWlsaW5nIGFsbG9jX3BhZ2VzX25vbG9jaygpIGlzIG5vdCBhIHJlYXNvbgotCSAqIHRvIHdhcm4uIEFsc28gd2FybiB3b3VsZCB0cmlnZ2VyIHByaW50aygpIHdoaWNoIGlzIHVuc2FmZSBmcm9tCi0JICogdmFyaW91cyBjb250ZXh0cy4gV2UgY2Fubm90IHVzZSBwcmludGtfZGVmZXJyZWRfZW50ZXIoKSB0byBtaXRpZ2F0ZSwKLQkgKiBzaW5jZSB0aGUgcnVubmluZyBjb250ZXh0IGlzIHVua25vd24uCi0JICoKLQkgKiBTcGVjaWZ5IF9fR0ZQX1pFUk8gdG8gbWFrZSBzdXJlIHRoYXQgY2FsbCB0byBrbXNhbl9hbGxvY19wYWdlKCkgYmVsb3cKLQkgKiBpcyBzYWZlIGluIGFueSBjb250ZXh0LiBBbHNvIHplcm9pbmcgdGhlIHBhZ2UgaXMgbWFuZGF0b3J5IGZvcgotCSAqIEJQRiB1c2UgY2FzZXMuCi0JICoKLQkgKiBUaG91Z2ggX19HRlBfTk9NRU1BTExPQyBpcyBub3QgY2hlY2tlZCBpbiB0aGUgY29kZSBwYXRoIGJlbG93LAotCSAqIHNwZWNpZnkgaXQgaGVyZSB0byBoaWdobGlnaHQgdGhhdCBhbGxvY19wYWdlc19ub2xvY2soKQotCSAqIGRvZXNuJiMzOTt0IHdhbnQgdG8gZGVwbGV0ZSByZXNlcnZlcy4KLQkgKi8KLQlnZnBfdCBhbGxvY19nZnAgPSBfX0dGUF9OT1dBUk4gfCBfX0dGUF9aRVJPIHwgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX0NPTVAKLQkJCXwgZ2ZwX2ZsYWdzOwotCXVuc2lnbmVkIGludCBhbGxvY19mbGFncyA9IEFMTE9DX1RSWUxPQ0s7Ci0Jc3RydWN0IGFsbG9jX2NvbnRleHQgYWMgPSB7IH07Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0KLQlWTV9XQVJOX09OX09OQ0UoZ2ZwX2ZsYWdzICZhbXA7IH5fX0dGUF9BQ0NPVU5UKTsKLQkvKgotCSAqIEluIFBSRUVNUFRfUlQgc3Bpbl90cnlsb2NrKCkgd2lsbCBjYWxsIHJhd19zcGluX2xvY2soKSB3aGljaCBpcwotCSAqIHVuc2FmZSBpbiBOTUkuIElmIHNwaW5fdHJ5bG9jaygpIGlzIGNhbGxlZCBmcm9tIGhhcmQgSVJRIHRoZSBjdXJyZW50Ci0JICogdGFzayBtYXkgYmUgd2FpdGluZyBmb3Igb25lIHJ0X3NwaW5fbG9jaywgYnV0IHJ0X3NwaW5fdHJ5bG9jaygpIHdpbGwKLQkgKiBtYXJrIHRoZSB0YXNrIGFzIHRoZSBvd25lciBvZiBhbm90aGVyIHJ0X3NwaW5fbG9jayB3aGljaCB3aWxsCi0JICogY29uZnVzZSBQSSBsb2dpYywgc28gcmV0dXJuIGltbWVkaWF0ZWx5IGlmIGNhbGxlZCBmcm9tIGhhcmQgSVJRIG9yCi0JICogTk1JLgotCSAqCi0JICogTm90ZSwgaXJxc19kaXNhYmxlZCgpIGNhc2UgaXMgb2suIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZAotCSAqIGZyb20gcmF3X3NwaW5fbG9ja19pcnFzYXZlIHJlZ2lvbi4KLQkgKi8KLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkgJmFtcDsmYW1wOyAoaW5fbm1pKCkgfHwgaW5faGFyZGlycSgpKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQkvKiBPbiBVUCwgc3Bpbl90cnlsb2NrKCkgYWx3YXlzIHN1Y2NlZWRzIGV2ZW4gd2hlbiBpdCBpcyBsb2NrZWQgKi8KLQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1NNUCkgJmFtcDsmYW1wOyBpbl9ubWkoKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAoIXBjcF9hbGxvd2VkX29yZGVyKG9yZGVyKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQkvKiBCYWlsb3V0LCBzaW5jZSBfZGVmZXJyZWRfZ3Jvd196b25lKCkgbmVlZHMgdG8gdGFrZSBhIGxvY2sgKi8KLQlpZiAoZGVmZXJyZWRfcGFnZXNfZW5hYmxlZCgpKQotCQlyZXR1cm4gTlVMTDsKLQogCWlmIChuaWQgPT0gTlVNQV9OT19OT0RFKQogCQluaWQgPSBudW1hX25vZGVfaWQoKTsKIAotCXByZXBhcmVfYWxsb2NfcGFnZXMoYWxsb2NfZ2ZwLCBvcmRlciwgbmlkLCBOVUxMLCAmYW1wO2FjLAotCQkJICAgICZhbXA7YWxsb2NfZ2ZwLCAmYW1wO2FsbG9jX2ZsYWdzKTsKLQotCS8qCi0JICogQmVzdCBlZmZvcnQgYWxsb2NhdGlvbiBmcm9tIHBlcmNwdSBmcmVlIGxpc3QuCi0JICogSWYgaXQmIzM5O3MgZW1wdHkgYXR0ZW1wdCB0byBzcGluX3RyeWxvY2sgem9uZS0mZ3Q7bG9jay4KLQkgKi8KLQlwYWdlID0gZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChhbGxvY19nZnAsIG9yZGVyLCBhbGxvY19mbGFncywgJmFtcDthYyk7Ci0KLQkvKiBVbmxpa2UgcmVndWxhciBhbGxvY19wYWdlcygpIHRoZXJlIGlzIG5vIF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoKS4gKi8KLQotCWlmIChtZW1jZ19rbWVtX29ubGluZSgpICZhbXA7JmFtcDsgcGFnZSAmYW1wOyZhbXA7IChnZnBfZmxhZ3MgJmFtcDsgX19HRlBfQUNDT1VOVCkgJmFtcDsmYW1wOwotCSAgICB1bmxpa2VseShfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2UocGFnZSwgYWxsb2NfZ2ZwLCBvcmRlcikgIT0gMCkpIHsKLQkJX19mcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBvcmRlciwgRlBJX1RSWUxPQ0spOwotCQlwYWdlID0gTlVMTDsKLQl9Ci0JdHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCBvcmRlciwgYWxsb2NfZ2ZwLCBhYy5taWdyYXRldHlwZSk7Ci0Ja21zYW5fYWxsb2NfcGFnZShwYWdlLCBvcmRlciwgYWxsb2NfZ2ZwKTsKLQlyZXR1cm4gcGFnZTsKJiM0MzsJcmV0dXJuIF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfZmxhZ3MsIG9yZGVyLCBuaWQsIE5VTEwsIEFMTE9DX05PTE9DSyk7CiB9CiAvKioKICAqIGFsbG9jX3BhZ2VzX25vbG9jayAtIG9wcG9ydHVuaXN0aWMgcmVlbnRyYW50IGFsbG9jYXRpb24gZnJvbSBhbnkgY29udGV4dApkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5oIGIvbW0vcGFnZV9hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yNjE0YmZmNjc5NWIwOAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuaApAQCAtMCwwICYjNDM7MSwzMTYgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqLwomIzQzOy8qCiYjNDM7ICogbW0taW50ZXJuYWwgQVBJIGZvciB0aGUgcGFnZSAoYnVkZHkpIGFsbG9jYXRvci4gUHVibGljIEFQSSBsaXZlcyBpbgomIzQzOyAqIGluY2x1ZGUvbGludXgvZ2ZwLmguCiYjNDM7ICovCiYjNDM7I2lmbmRlZiBfX01NX1BBR0VfQUxMT0NfSAomIzQzOyNkZWZpbmUgX19NTV9QQUdFX0FMTE9DX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW16b25lLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25vZGVtYXNrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBBTExPQ19ERUZBVUxUCQkwCiYjNDM7LyogVGhlIEFMTE9DX1dNQVJLIGJpdHMgYXJlIHVzZWQgYXMgYW4gaW5kZXggdG8gem9uZS0mZ3Q7d2F0ZXJtYXJrICovCiYjNDM7I2RlZmluZSBBTExPQ19XTUFSS19NSU4JCVdNQVJLX01JTgomIzQzOyNkZWZpbmUgQUxMT0NfV01BUktfTE9XCQlXTUFSS19MT1cKJiM0MzsjZGVmaW5lIEFMTE9DX1dNQVJLX0hJR0gJV01BUktfSElHSAomIzQzOyNkZWZpbmUgQUxMT0NfTk9fV0FURVJNQVJLUwkweDA0IC8qIGRvbiYjMzk7dCBjaGVjayB3YXRlcm1hcmtzIGF0IGFsbCAqLwomIzQzOwomIzQzOy8qIE1hc2sgdG8gZ2V0IHRoZSB3YXRlcm1hcmsgYml0cyAqLwomIzQzOyNkZWZpbmUgQUxMT0NfV01BUktfTUFTSwkoQUxMT0NfTk9fV0FURVJNQVJLUy0xKQomIzQzOwomIzQzOy8qCiYjNDM7ICogT25seSBNTVUgYXJjaHMgaGF2ZSBhc3luYyBvb20gdmljdGltIHJlY2xhaW0gLSBha2Egb29tX3JlYXBlciBzbyB3ZQomIzQzOyAqIGNhbm5vdCBhc3N1bWUgYSByZWR1Y2VkIGFjY2VzcyB0byBtZW1vcnkgcmVzZXJ2ZXMgaXMgc3VmZmljaWVudCBmb3IKJiM0MzsgKiAhTU1VCiYjNDM7ICovCiYjNDM7I2lmZGVmIENPTkZJR19NTVUKJiM0MzsjZGVmaW5lIEFMTE9DX09PTQkJMHgwOAomIzQzOyNlbHNlCiYjNDM7I2RlZmluZSBBTExPQ19PT00JCUFMTE9DX05PX1dBVEVSTUFSS1MKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjZGVmaW5lIEFMTE9DX05PTl9CTE9DSwkJIDB4MTAgLyogQ2FsbGVyIGNhbm5vdCBibG9jay4gQWxsb3cgYWNjZXNzCiYjNDM7CQkJCSAgICAgICAqIHRvIDI1JSBvZiB0aGUgbWluIHdhdGVybWFyayBvcgomIzQzOwkJCQkgICAgICAgKiA2Mi41JSBpZiBfX0dGUF9ISUdIIGlzIHNldC4KJiM0MzsJCQkJICAgICAgICovCiYjNDM7I2RlZmluZSBBTExPQ19NSU5fUkVTRVJWRQkgMHgyMCAvKiBfX0dGUF9ISUdIIHNldC4gQWxsb3cgYWNjZXNzIHRvIDUwJQomIzQzOwkJCQkgICAgICAgKiBvZiB0aGUgbWluIHdhdGVybWFyay4KJiM0MzsJCQkJICAgICAgICovCiYjNDM7I2RlZmluZSBBTExPQ19DUFVTRVQJCSAweDQwIC8qIGNoZWNrIGZvciBjb3JyZWN0IGNwdXNldCAqLwomIzQzOyNkZWZpbmUgQUxMT0NfQ01BCQkgMHg4MCAvKiBhbGxvdyBhbGxvY2F0aW9ucyBmcm9tIENNQSBhcmVhcyAqLwomIzQzOyNpZmRlZiBDT05GSUdfWk9ORV9ETUEzMgomIzQzOyNkZWZpbmUgQUxMT0NfTk9GUkFHTUVOVAkweDEwMCAvKiBhdm9pZCBtaXhpbmcgcGFnZWJsb2NrIHR5cGVzICovCiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIEFMTE9DX05PRlJBR01FTlQJICAweDAKJiM0MzsjZW5kaWYKJiM0MzsjZGVmaW5lIEFMTE9DX0hJR0hBVE9NSUMJMHgyMDAgLyogQWxsb3dzIGFjY2VzcyB0byBNSUdSQVRFX0hJR0hBVE9NSUMgKi8KJiM0MzsjZGVmaW5lIEFMTE9DX05PTE9DSwkJMHg0MDAgLyogT25seSB1c2Ugc3Bpbl90cnlsb2NrIGluIGFsbG9jYXRpb24gcGF0aCAqLwomIzQzOyNkZWZpbmUgQUxMT0NfS1NXQVBECQkweDgwMCAvKiBhbGxvdyB3YWtpbmcgb2Yga3N3YXBkLCBfX0dGUF9LU1dBUERfUkVDTEFJTSBzZXQgKi8KJiM0MzsvKgomIzQzOyAqIFNraXAgZWFybHkgUEZOIHJlY29yZGluZyBmb3IgYSBwYWdlIGFsbG9jYXRpb24uICBVc2VkIGJ5CiYjNDM7ICogX19hbGxvY190YWdfYWRkX2Vhcmx5X3BmbigpIHRvIGF2b2lkIHJlY3Vyc2lvbiB3aGVuIGFsbG9jYXRpbmcgcGFnZXMgZm9yIHRoZQomIzQzOyAqIGVhcmx5IFBGTiB0cmFja2luZyBsaXN0IGl0c2VsZi4KJiM0MzsgKgomIzQzOyAqIENvZGV0YWdzIG9mIHRoZSBwYWdlcyBhbGxvY2F0ZWQgd2l0aCBfX0dGUF9OT19DT0RFVEFHIHNob3VsZCBiZQomIzQzOyAqIGNsZWFyZWQgKHZpYSBjbGVhcl9wYWdlX3RhZ19yZWYoKSkgYmVmb3JlIGZyZWVpbmcgdGhlIHBhZ2VzIHRvIHByZXZlbnQKJiM0MzsgKiBhbGxvY190YWdfc3ViX2NoZWNrKCkgZnJvbSB0cmlnZ2VyaW5nIGEgd2FybmluZy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEFMTE9DX05PX0NPREVUQUcgICAgICAgMHgxMDAwCiYjNDM7CiYjNDM7LyogRmxhZ3MgdGhhdCBhbGxvdyBhbGxvY2F0aW9ucyBiZWxvdyB0aGUgbWluIHdhdGVybWFyay4gKi8KJiM0MzsjZGVmaW5lIEFMTE9DX1JFU0VSVkVTIChBTExPQ19OT05fQkxPQ0t8QUxMT0NfTUlOX1JFU0VSVkV8QUxMT0NfSElHSEFUT01JQ3xBTExPQ19PT00pCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBTdHJ1Y3R1cmUgZm9yIGhvbGRpbmcgdGhlIG1vc3RseSBpbW11dGFibGUgYWxsb2NhdGlvbiBwYXJhbWV0ZXJzIHBhc3NlZAomIzQzOyAqIGJldHdlZW4gZnVuY3Rpb25zIGludm9sdmVkIGluIGFsbG9jYXRpb25zLCBpbmNsdWRpbmcgdGhlIGFsbG9jX3BhZ2VzKgomIzQzOyAqIGZhbWlseSBvZiBmdW5jdGlvbnMuCiYjNDM7ICoKJiM0MzsgKiBub2RlbWFzaywgbWlncmF0ZXR5cGUgYW5kIGhpZ2hlc3Rfem9uZWlkeCBhcmUgaW5pdGlhbGl6ZWQgb25seSBvbmNlIGluCiYjNDM7ICogX19hbGxvY19wYWdlcygpIGFuZCB0aGVuIG5ldmVyIGNoYW5nZS4KJiM0MzsgKgomIzQzOyAqIHpvbmVsaXN0LCBwcmVmZXJyZWRfem9uZSBhbmQgaGlnaGVzdF96b25laWR4IGFyZSBzZXQgZmlyc3QgaW4KJiM0MzsgKiBfX2FsbG9jX3BhZ2VzKCkgZm9yIHRoZSBmYXN0IHBhdGgsIGFuZCBtaWdodCBiZSBsYXRlciBjaGFuZ2VkCiYjNDM7ICogaW4gX19hbGxvY19wYWdlc19zbG93cGF0aCgpLiBBbGwgb3RoZXIgZnVuY3Rpb25zIHBhc3MgdGhlIHdob2xlIHN0cnVjdHVyZQomIzQzOyAqIGJ5IGEgY29uc3QgcG9pbnRlci4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgYWxsb2NfY29udGV4dCB7CiYjNDM7CXN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3Q7CiYjNDM7CWNvbnN0IG5vZGVtYXNrX3QgKm5vZGVtYXNrOwomIzQzOwlzdHJ1Y3Qgem9uZXJlZiAqcHJlZmVycmVkX3pvbmVyZWY7CiYjNDM7CWludCBtaWdyYXRldHlwZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogaGlnaGVzdF96b25laWR4IHJlcHJlc2VudHMgaGlnaGVzdCB1c2FibGUgem9uZSBpbmRleCBvZgomIzQzOwkgKiB0aGUgYWxsb2NhdGlvbiByZXF1ZXN0LiBEdWUgdG8gdGhlIG5hdHVyZSBvZiB0aGUgem9uZSwKJiM0MzsJICogbWVtb3J5IG9uIGxvd2VyIHpvbmUgdGhhbiB0aGUgaGlnaGVzdF96b25laWR4IHdpbGwgYmUKJiM0MzsJICogcHJvdGVjdGVkIGJ5IGxvd21lbV9yZXNlcnZlW2hpZ2hlc3Rfem9uZWlkeF0uCiYjNDM7CSAqCiYjNDM7CSAqIGhpZ2hlc3Rfem9uZWlkeCBpcyBhbHNvIHVzZWQgYnkgcmVjbGFpbS9jb21wYWN0aW9uIHRvIGxpbWl0CiYjNDM7CSAqIHRoZSB0YXJnZXQgem9uZSBzaW5jZSBoaWdoZXIgem9uZSB0aGFuIHRoaXMgaW5kZXggY2Fubm90IGJlCiYjNDM7CSAqIHVzYWJsZSBmb3IgdGhpcyBhbGxvY2F0aW9uIHJlcXVlc3QuCiYjNDM7CSAqLwomIzQzOwllbnVtIHpvbmVfdHlwZSBoaWdoZXN0X3pvbmVpZHg7CiYjNDM7CWJvb2wgc3ByZWFkX2RpcnR5X3BhZ2VzOwomIzQzOwkvKiBPbmx5IGZsYWdzIHRoYXQgYXJlIGdsb2JhbCB0byB0aGUgd2hvbGUgYWxsb2NhdGlvbiBnbyBoZXJlLiAqLwomIzQzOwl1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3M7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgb3JkZXIgb2YgYSBmcmVlIHBhZ2UgaW4gdGhlIGJ1ZGR5IHN5c3RlbS4gSW4KJiM0MzsgKiBnZW5lcmFsLCBwYWdlX3pvbmUocGFnZSktJmd0O2xvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIgdG8gcHJldmVudCB0aGUKJiM0MzsgKiBwYWdlIGZyb20gYmVpbmcgYWxsb2NhdGVkIGluIHBhcmFsbGVsIGFuZCByZXR1cm5pbmcgZ2FyYmFnZSBhcyB0aGUgb3JkZXIuCiYjNDM7ICogSWYgYSBjYWxsZXIgZG9lcyBub3QgaG9sZCBwYWdlX3pvbmUocGFnZSktJmd0O2xvY2ssIGl0IG11c3QgZ3VhcmFudGVlIHRoYXQgdGhlCiYjNDM7ICogcGFnZSBjYW5ub3QgYmUgYWxsb2NhdGVkIG9yIG1lcmdlZCBpbiBwYXJhbGxlbC4gQWx0ZXJuYXRpdmVseSwgaXQgbXVzdAomIzQzOyAqIGhhbmRsZSBpbnZhbGlkIHZhbHVlcyBncmFjZWZ1bGx5LCBhbmQgdXNlIGJ1ZGR5X29yZGVyX3Vuc2FmZSgpIGJlbG93LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJ1ZGR5X29yZGVyKHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO3sKJiM0MzsJLyogUGFnZUJ1ZGR5KCkgbXVzdCBiZSBjaGVja2VkIGJ5IHRoZSBjYWxsZXIgKi8KJiM0MzsJcmV0dXJuIHBhZ2VfcHJpdmF0ZShwYWdlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBMaWtlIGJ1ZGR5X29yZGVyKCksIGJ1dCBmb3IgY2FsbGVycyB3aG8gY2Fubm90IGFmZm9yZCB0byBob2xkIHRoZSB6b25lIGxvY2suCiYjNDM7ICogUGFnZUJ1ZGR5KCkgc2hvdWxkIGJlIGNoZWNrZWQgZmlyc3QgYnkgdGhlIGNhbGxlciB0byBtaW5pbWl6ZSByYWNlIHdpbmRvdywKJiM0MzsgKiBhbmQgaW52YWxpZCB2YWx1ZXMgbXVzdCBiZSBoYW5kbGVkIGdyYWNlZnVsbHkuCiYjNDM7ICoKJiM0MzsgKiBSRUFEX09OQ0UgaXMgdXNlZCBzbyB0aGF0IGlmIHRoZSBjYWxsZXIgYXNzaWducyB0aGUgcmVzdWx0IGludG8gYSBsb2NhbAomIzQzOyAqIHZhcmlhYmxlIGFuZCBlLmcuIHRlc3RzIGl0IGZvciB2YWxpZCByYW5nZSBiZWZvcmUgdXNpbmcsIHRoZSBjb21waWxlciBjYW5ub3QKJiM0MzsgKiBkZWNpZGUgdG8gcmVtb3ZlIHRoZSB2YXJpYWJsZSBhbmQgaW5saW5lIHRoZSBwYWdlX3ByaXZhdGUocGFnZSkgbXVsdGlwbGUKJiM0MzsgKiB0aW1lcywgcG90ZW50aWFsbHkgb2JzZXJ2aW5nIGRpZmZlcmVudCB2YWx1ZXMgaW4gdGhlIHRlc3RzIGFuZCB0aGUgYWN0dWFsCiYjNDM7ICogdXNlIG9mIHRoZSByZXN1bHQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSkJUkVBRF9PTkNFKHBhZ2VfcHJpdmF0ZShwYWdlKSkKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgYSBwYWdlIGlzIGZyZWUgJmFtcDsmYW1wOyBpcyB0aGUgYnVkZHkKJiM0MzsgKiB3ZSBjYW4gY29hbGVzY2UgYSBwYWdlIGFuZCBpdHMgYnVkZHkgaWYKJiM0MzsgKiAoYSkgdGhlIGJ1ZGR5IGlzIG5vdCBpbiBhIGhvbGUgKGNoZWNrIGJlZm9yZSBjYWxsaW5nISkgJmFtcDsmYW1wOwomIzQzOyAqIChiKSB0aGUgYnVkZHkgaXMgaW4gdGhlIGJ1ZGR5IHN5c3RlbSAmYW1wOyZhbXA7CiYjNDM7ICogKGMpIGEgcGFnZSBhbmQgaXRzIGJ1ZGR5IGhhdmUgdGhlIHNhbWUgb3JkZXIgJmFtcDsmYW1wOwomIzQzOyAqIChkKSBhIHBhZ2UgYW5kIGl0cyBidWRkeSBhcmUgaW4gdGhlIHNhbWUgem9uZS4KJiM0MzsgKgomIzQzOyAqIEZvciByZWNvcmRpbmcgd2hldGhlciBhIHBhZ2UgaXMgaW4gdGhlIGJ1ZGR5IHN5c3RlbSwgd2Ugc2V0IFBhZ2VCdWRkeS4KJiM0MzsgKiBTZXR0aW5nLCBjbGVhcmluZywgYW5kIHRlc3RpbmcgUGFnZUJ1ZGR5IGlzIHNlcmlhbGl6ZWQgYnkgem9uZS0mZ3Q7bG9jay4KJiM0MzsgKgomIzQzOyAqIEZvciByZWNvcmRpbmcgcGFnZSYjMzk7cyBvcmRlciwgd2UgdXNlIHBhZ2VfcHJpdmF0ZShwYWdlKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcGFnZV9pc19idWRkeShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHBhZ2UgKmJ1ZGR5LAomIzQzOwkJCQkgdW5zaWduZWQgaW50IG9yZGVyKQomIzQzO3sKJiM0MzsJaWYgKCFwYWdlX2lzX2d1YXJkKGJ1ZGR5KSAmYW1wOyZhbXA7ICFQYWdlQnVkZHkoYnVkZHkpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAoYnVkZHlfb3JkZXIoYnVkZHkpICE9IG9yZGVyKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiB6b25lIGNoZWNrIGlzIGRvbmUgbGF0ZSB0byBhdm9pZCB1c2VsZXNzbHkgY2FsY3VsYXRpbmcKJiM0MzsJICogem9uZS9ub2RlIGlkcyBmb3IgcGFnZXMgdGhhdCBjb3VsZCBuZXZlciBtZXJnZS4KJiM0MzsJICovCiYjNDM7CWlmIChwYWdlX3pvbmVfaWQocGFnZSkgIT0gcGFnZV96b25lX2lkKGJ1ZGR5KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJVk1fQlVHX09OX1BBR0UocGFnZV9jb3VudChidWRkeSkgIT0gMCwgYnVkZHkpOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBMb2NhdGUgdGhlIHN0cnVjdCBwYWdlIGZvciBib3RoIHRoZSBtYXRjaGluZyBidWRkeSBpbiBvdXIKJiM0MzsgKiBwYWlyIChidWRkeTEpIGFuZCB0aGUgY29tYmluZWQgTyhuJiM0MzsxKSBwYWdlIHRoZXkgZm9ybSAocGFnZSkuCiYjNDM7ICoKJiM0MzsgKiAxKSBBbnkgYnVkZHkgQjEgd2lsbCBoYXZlIGFuIG9yZGVyIE8gdHdpbiBCMiB3aGljaCBzYXRpc2ZpZXMKJiM0MzsgKiB0aGUgZm9sbG93aW5nIGVxdWF0aW9uOgomIzQzOyAqICAgICBCMiA9IEIxIF4gKDEgJmx0OyZsdDsgTykKJiM0MzsgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIHN0YXJ0aW5nIGJ1ZGR5IChidWRkeTIpIGlzICM4IGl0cyBvcmRlcgomIzQzOyAqIDEgYnVkZHkgaXMgIzEwOgomIzQzOyAqICAgICBCMiA9IDggXiAoMSAmbHQ7Jmx0OyAxKSA9IDggXiAyID0gMTAKJiM0MzsgKgomIzQzOyAqIDIpIEFueSBidWRkeSBCIHdpbGwgaGF2ZSBhbiBvcmRlciBPJiM0MzsxIHBhcmVudCBQIHdoaWNoCiYjNDM7ICogc2F0aXNmaWVzIHRoZSBmb2xsb3dpbmcgZXF1YXRpb246CiYjNDM7ICogICAgIFAgPSBCICZhbXA7IH4oMSAmbHQ7Jmx0OyBPKQomIzQzOyAqCiYjNDM7ICogQXNzdW1wdGlvbjogKl9tZW1fbWFwIGlzIGNvbnRpZ3VvdXMgYXQgbGVhc3QgdXAgdG8gTUFYX1BBR0VfT1JERVIKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKJiM0MztfX2ZpbmRfYnVkZHlfcGZuKHVuc2lnbmVkIGxvbmcgcGFnZV9wZm4sIHVuc2lnbmVkIGludCBvcmRlcikKJiM0Mzt7CiYjNDM7CXJldHVybiBwYWdlX3BmbiBeICgxICZsdDsmbHQ7IG9yZGVyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBGaW5kIHRoZSBidWRkeSBvZiBAcGFnZSBhbmQgdmFsaWRhdGUgaXQuCiYjNDM7ICogQHBhZ2U6IFRoZSBpbnB1dCBwYWdlCiYjNDM7ICogQHBmbjogVGhlIHBmbiBvZiB0aGUgcGFnZSwgaXQgc2F2ZXMgYSBjYWxsIHRvIHBhZ2VfdG9fcGZuKCkgd2hlbiB0aGUKJiM0MzsgKiAgICAgICBmdW5jdGlvbiBpcyB1c2VkIGluIHRoZSBwZXJmb3JtYW5jZS1jcml0aWNhbCBfX2ZyZWVfb25lX3BhZ2UoKS4KJiM0MzsgKiBAb3JkZXI6IFRoZSBvcmRlciBvZiB0aGUgcGFnZQomIzQzOyAqIEBidWRkeV9wZm46IFRoZSBvdXRwdXQgcG9pbnRlciB0byB0aGUgYnVkZHkgcGZuLCBpdCBhbHNvIHNhdmVzIGEgY2FsbCB0bwomIzQzOyAqICAgICAgICAgICAgIHBhZ2VfdG9fcGZuKCkuCiYjNDM7ICoKJiM0MzsgKiBUaGUgZm91bmQgYnVkZHkgY2FuIGJlIGEgbm9uIFBhZ2VCdWRkeSwgb3V0IG9mIEBwYWdlJiMzOTtzIHpvbmUsIG9yIGl0cyBvcmRlciBpcwomIzQzOyAqIG5vdCB0aGUgc2FtZSBhcyBAcGFnZS4gVGhlIHZhbGlkYXRpb24gaXMgbmVjZXNzYXJ5IGJlZm9yZSB1c2UgaXQuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRoZSBmb3VuZCBidWRkeSBwYWdlIG9yIE5VTEwgaWYgbm90IGZvdW5kLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmZpbmRfYnVkZHlfcGFnZV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQkJdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGludCBvcmRlciwgdW5zaWduZWQgbG9uZyAqYnVkZHlfcGZuKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBfX2J1ZGR5X3BmbiA9IF9fZmluZF9idWRkeV9wZm4ocGZuLCBvcmRlcik7CiYjNDM7CXN0cnVjdCBwYWdlICpidWRkeTsKJiM0MzsKJiM0MzsJYnVkZHkgPSBwYWdlICYjNDM7IChfX2J1ZGR5X3BmbiAtIHBmbik7CiYjNDM7CWlmIChidWRkeV9wZm4pCiYjNDM7CQkqYnVkZHlfcGZuID0gX19idWRkeV9wZm47CiYjNDM7CiYjNDM7CWlmIChwYWdlX2lzX2J1ZGR5KHBhZ2UsIGJ1ZGR5LCBvcmRlcikpCiYjNDM7CQlyZXR1cm4gYnVkZHk7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztleHRlcm4gc3RydWN0IHBhZ2UgKl9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAomIzQzOwkJCQl1bnNpZ25lZCBsb25nIGVuZF9wZm4sIHN0cnVjdCB6b25lICp6b25lKTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpwYWdlYmxvY2tfcGZuX3RvX3BhZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCiYjNDM7CQkJCXVuc2lnbmVkIGxvbmcgZW5kX3Bmbiwgc3RydWN0IHpvbmUgKnpvbmUpCiYjNDM7ewomIzQzOwlpZiAoem9uZS0mZ3Q7Y29udGlndW91cykKJiM0MzsJCXJldHVybiBwZm5fdG9fcGFnZShzdGFydF9wZm4pOwomIzQzOwomIzQzOwlyZXR1cm4gX19wYWdlYmxvY2tfcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuLCBlbmRfcGZuLCB6b25lKTsKJiM0Mzt9CiYjNDM7CiYjNDM7ZXh0ZXJuIHZvaWQgX19mcmVlX3BhZ2VzX2NvcmUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwKJiM0MzsJCWVudW0gbWVtaW5pdF9jb250ZXh0IGNvbnRleHQpOwomIzQzOwomIzQzO3ZvaWQgcG9zdF9hbGxvY19ob29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGdmcF9mbGFncywKJiM0MzsJCSAgICAgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKTsKJiM0MztleHRlcm4gYm9vbCBmcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7CiYjNDM7CiYjNDM7ZXh0ZXJuIGludCB1c2VyX21pbl9mcmVlX2tieXRlczsKJiM0MzsKJiM0MztzdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgbmlkLAomIzQzOwkJbm9kZW1hc2tfdCAqbm9kZW1hc2ssIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyk7CiYjNDM7I2RlZmluZSBfX2FsbG9jX2Zyb3plbl9wYWdlcyguLi4pIFwKJiM0MzsJYWxsb2NfaG9va3MoX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKF9fVkFfQVJHU19fKSkKJiM0Mzt2b2lkIGZyZWVfZnJvemVuX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpOwomIzQzO3ZvaWQgZnJlZV91bnJlZl9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfTlVNQQomIzQzO3N0cnVjdCBwYWdlICphbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90LCB1bnNpZ25lZCBpbnQgb3JkZXIpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcikKJiM0Mzt7CiYjNDM7CXJldHVybiBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwLCBvcmRlciwgbnVtYV9ub2RlX2lkKCksIE5VTEwsCiYjNDM7CQkJCQkgICAwIC8qIEFMTE9DX0RFRkFVTFQgKi8pOwomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjZGVmaW5lIGFsbG9jX2Zyb3plbl9wYWdlcyguLi4pIFwKJiM0MzsJYWxsb2NfaG9va3MoYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihfX1ZBX0FSR1NfXykpCiYjNDM7CiYjNDM7c3RydWN0IHBhZ2UgKmFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mKGdmcF90IGdmcF9mbGFncywgaW50IG5pZCwgdW5zaWduZWQgaW50IG9yZGVyKTsKJiM0MzsjZGVmaW5lIGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2soLi4uKSBcCiYjNDM7CWFsbG9jX2hvb2tzKGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mKF9fVkFfQVJHU19fKSkKJiM0Mzt2b2lkIGZyZWVfZnJvemVuX3BhZ2VzX25vbG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTsKJiM0MzsKJiM0MztzdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLAomIzQzOwkJbm9kZW1hc2tfdCAqbm9kZW1hc2ssIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyk7CiYjNDM7I2RlZmluZSBfX2FsbG9jX3BhZ2VzKC4uLikJCQlhbGxvY19ob29rcyhfX2FsbG9jX3BhZ2VzX25vcHJvZihfX1ZBX0FSR1NfXykpCiYjNDM7CiYjNDM7ZXh0ZXJuIHZvaWQgem9uZV9wY3BfcmVzZXQoc3RydWN0IHpvbmUgKnpvbmUpOwomIzQzO2V4dGVybiB2b2lkIHpvbmVfcGNwX2Rpc2FibGUoc3RydWN0IHpvbmUgKnpvbmUpOwomIzQzO2V4dGVybiB2b2lkIHpvbmVfcGNwX2VuYWJsZShzdHJ1Y3Qgem9uZSAqem9uZSk7CiYjNDM7ZXh0ZXJuIHZvaWQgem9uZV9wY3BfaW5pdChzdHJ1Y3Qgem9uZSAqem9uZSk7CiYjNDM7CiYjNDM7ZW51bSBmYWxsYmFja19yZXN1bHQgewomIzQzOwkvKiBGb3VuZCBzdWl0YWJsZSBtaWdyYXRldHlwZSwgKm10X291dCBpcyB2YWxpZC4gKi8KJiM0MzsJRkFMTEJBQ0tfRk9VTkQsCiYjNDM7CS8qIE5vIGZhbGxiYWNrIGZvdW5kIGluIHJlcXVlc3RlZCBvcmRlci4gKi8KJiM0MzsJRkFMTEJBQ0tfRU1QVFksCiYjNDM7CS8qIFBhc3NlZCBAY2xhaW1hYmxlLCBidXQgY2xhaW1pbmcgd2hvbGUgYmxvY2sgaXMgYSBiYWQgaWRlYS4gKi8KJiM0MzsJRkFMTEJBQ0tfTk9DTEFJTSwKJiM0Mzt9OwomIzQzO2VudW0gZmFsbGJhY2tfcmVzdWx0CiYjNDM7ZmluZF9zdWl0YWJsZV9mYWxsYmFjayhzdHJ1Y3QgZnJlZV9hcmVhICphcmVhLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiYjNDM7CQkgICAgICAgaW50IG1pZ3JhdGV0eXBlLCBib29sIGNsYWltYWJsZSwgaW50ICptdF9vdXQpOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBmcmVlX2FyZWFfZW1wdHkoc3RydWN0IGZyZWVfYXJlYSAqYXJlYSwgaW50IG1pZ3JhdGV0eXBlKQomIzQzO3sKJiM0MzsJcmV0dXJuIGxpc3RfZW1wdHkoJmFtcDthcmVhLSZndDtmcmVlX2xpc3RbbWlncmF0ZXR5cGVdKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQ29udmVydCBHRlAgZmxhZ3MgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBtaWdyYXRlIHR5cGUgKi8KJiM0MzsjZGVmaW5lIEdGUF9NT1ZBQkxFX01BU0sgKF9fR0ZQX1JFQ0xBSU1BQkxFfF9fR0ZQX01PVkFCTEUpCiYjNDM7I2RlZmluZSBHRlBfTU9WQUJMRV9TSElGVCAzCiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgZ2ZwX21pZ3JhdGV0eXBlKGNvbnN0IGdmcF90IGdmcF9mbGFncykKJiM0Mzt7CiYjNDM7CVZNX1dBUk5fT04oKGdmcF9mbGFncyAmYW1wOyBHRlBfTU9WQUJMRV9NQVNLKSA9PSBHRlBfTU9WQUJMRV9NQVNLKTsKJiM0MzsJQlVJTERfQlVHX09OKCgxVUwgJmx0OyZsdDsgR0ZQX01PVkFCTEVfU0hJRlQpICE9IF9fX0dGUF9NT1ZBQkxFKTsKJiM0MzsJQlVJTERfQlVHX09OKChfX19HRlBfTU9WQUJMRSAmZ3Q7Jmd0OyBHRlBfTU9WQUJMRV9TSElGVCkgIT0gTUlHUkFURV9NT1ZBQkxFKTsKJiM0MzsJQlVJTERfQlVHX09OKChfX19HRlBfUkVDTEFJTUFCTEUgJmd0OyZndDsgR0ZQX01PVkFCTEVfU0hJRlQpICE9IE1JR1JBVEVfUkVDTEFJTUFCTEUpOwomIzQzOwlCVUlMRF9CVUdfT04oKChfX19HRlBfTU9WQUJMRSB8IF9fX0dGUF9SRUNMQUlNQUJMRSkgJmd0OyZndDsKJiM0MzsJCSAgICAgIEdGUF9NT1ZBQkxFX1NISUZUKSAhPSBNSUdSQVRFX0hJR0hBVE9NSUMpOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkocGFnZV9ncm91cF9ieV9tb2JpbGl0eV9kaXNhYmxlZCkpCiYjNDM7CQlyZXR1cm4gTUlHUkFURV9VTk1PVkFCTEU7CiYjNDM7CiYjNDM7CS8qIEdyb3VwIGJhc2VkIG9uIG1vYmlsaXR5ICovCiYjNDM7CXJldHVybiAoX19mb3JjZSB1bnNpZ25lZCBsb25nKShnZnBfZmxhZ3MgJmFtcDsgR0ZQX01PVkFCTEVfTUFTSykgJmd0OyZndDsgR0ZQX01PVkFCTEVfU0hJRlQ7CiYjNDM7fQomIzQzOyN1bmRlZiBHRlBfTU9WQUJMRV9NQVNLCiYjNDM7I3VuZGVmIEdGUF9NT1ZBQkxFX1NISUZUCiYjNDM7CiYjNDM7Ym9vbCBkZWNheV9wY3BfaGlnaChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcCk7CiYjNDM7dm9pZCBkcmFpbl96b25lX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwKTsKJiM0Mzt2b2lkIGRyYWluX2FsbF9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSk7CiYjNDM7dm9pZCBkcmFpbl9sb2NhbF9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSk7CiYjNDM7CiYjNDM7dm9pZCBwYWdlX2FsbG9jX2luaXRfY3B1aHAodm9pZCk7CiYjNDM7dm9pZCBwYWdlX2FsbG9jX3N5c2N0bF9pbml0KHZvaWQpOwomIzQzOwomIzQzOyNlbmRpZiAvKiBfX01NX1BBR0VfQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9mcmFnX2NhY2hlLmMgYi9tbS9wYWdlX2ZyYWdfY2FjaGUuYwppbmRleCBkMjQyM2YzMDU3N2U0OS4uZTYzZWZlNzhiN2Q0YjQgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfZnJhZ19jYWNoZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfZnJhZ19jYWNoZS5jCkBAIC0xOCw3ICYjNDM7MTgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2luaXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VfZnJhZ19jYWNoZS5oJmd0OwotI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3BhZ2VfYWxsb2MuaCYjMzQ7CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVuY29kZWRfcGFnZV9jcmVhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwKIAkJCQkJIGJvb2wgcGZtZW1hbGxvYykKQEAgLTU3LDEwICYjNDM7NTcsMTAgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpfX3BhZ2VfZnJhZ19jYWNoZV9yZWZpbGwoc3RydWN0IHBhZ2VfZnJhZ19jYWNoZSAqbmMsCiAJZ2ZwX21hc2sgPSAoZ2ZwX21hc2sgJmFtcDsgfl9fR0ZQX0RJUkVDVF9SRUNMQUlNKSB8ICBfX0dGUF9DT01QIHwKIAkJICAgX19HRlBfTk9XQVJOIHwgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PTUVNQUxMT0M7CiAJcGFnZSA9IF9fYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIFBBR0VfRlJBR19DQUNIRV9NQVhfT1JERVIsCi0JCQkgICAgIG51bWFfbWVtX2lkKCksIE5VTEwpOwomIzQzOwkJCSAgICAgbnVtYV9tZW1faWQoKSwgTlVMTCwgQUxMT0NfREVGQVVMVCk7CiAjZW5kaWYKIAlpZiAodW5saWtlbHkoIXBhZ2UpKSB7Ci0JCXBhZ2UgPSBfX2FsbG9jX3BhZ2VzKGdmcCwgMCwgbnVtYV9tZW1faWQoKSwgTlVMTCk7CiYjNDM7CQlwYWdlID0gX19hbGxvY19wYWdlcyhnZnAsIDAsIG51bWFfbWVtX2lkKCksIE5VTEwsIEFMTE9DX0RFRkFVTFQpOwogCQlvcmRlciA9IDA7CiAJfQogCmRpZmYgLS1naXQgYS9tbS9wYWdlX2lzb2xhdGlvbi5jIGIvbW0vcGFnZV9pc29sYXRpb24uYwppbmRleCAzMmNlOGE3ZDlkZjM1NS4uZTVkZmM3YmY0OTQ0NjAgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfaXNvbGF0aW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9pc29sYXRpb24uYwpAQCAtMTEsNiAmIzQzOzExLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wYWdlX293bmVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWlncmF0ZS5oJmd0OwogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3BhZ2VfYWxsb2MuaCYjMzQ7CiAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgJmx0O3RyYWNlL2V2ZW50cy9wYWdlX2lzb2xhdGlvbi5oJmd0OwpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9vd25lci5jIGIvbW0vcGFnZV9vd25lci5jCmluZGV4IGZmYmFiYTNkNjlkM2NlLi4yOTBlNDdlMWZhMDllMSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9vd25lci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2Vfb3duZXIuYwpAQCAtMTMsNyAmIzQzOzEzLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9tZW1jb250cm9sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvY2xvY2suaCZndDsKIAotI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3BhZ2VfYWxsb2MuaCYjMzQ7CiAKIC8qCiAgKiBUT0RPOiB0ZWFjaCBQQUdFX09XTkVSX1NUQUNLX0RFUFRIIChfX2R1bXBfcGFnZV9vd25lciBhbmQgc2F2ZV9zdGFjaykKZGlmZiAtLWdpdCBhL21tL3Nob3dfbWVtLmMgYi9tbS9zaG93X21lbS5jCmluZGV4IDFiNzIxYThhZGU2N2RkLi5kMTI4OGI0YzJiNjQwMSAxMDA2NDQKLS0tIGEvbW0vc2hvd19tZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG93X21lbS5jCkBAIC0xNiw2ICYjNDM7MTYsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3Ztc3RhdC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7cGFnZV9hbGxvYy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7c3dhcC5oJiMzNDsKIAogYXRvbWljX2xvbmdfdCBfdG90YWxyYW1fcGFnZXMgX19yZWFkX21vc3RseTsKZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCA5Zjc1NGNmMWMxODc0Yy4uZmY0NGY0MzczZDUyMmIgMTAwNjQ0Ci0tLSBhL21tL3NsdWIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmMKQEAgLTUzLDYgJiM0Mzs1Myw3IEBACiAjaW5jbHVkZSAmbHQ7dHJhY2UvZXZlbnRzL2ttZW0uaCZndDsKIAogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3BhZ2VfYWxsb2MuaCYjMzQ7CiAKIC8qCiAgKiBMb2NrIG9yZGVyOgpAQCAtMzI5MSw3ICYjNDM7MzI5Miw4IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWIgKmFsbG9jX3NsYWJfcGFnZShnZnBfdCBmbGFncywgaW50IG5vZGUsCiAJZWxzZSBpZiAobm9kZSA9PSBOVU1BX05PX05PREUpCiAJCXBhZ2UgPSBhbGxvY19mcm96ZW5fcGFnZXMoZmxhZ3MsIG9yZGVyKTsKIAllbHNlCi0JCXBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlcyhmbGFncywgb3JkZXIsIG5vZGUsIE5VTEwpOwomIzQzOwkJcGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzKGZsYWdzLCBvcmRlciwgbm9kZSwgTlVMTCwKJiM0MzsJCQkJCSAgICBBTExPQ19ERUZBVUxUKTsKIAogCWlmICghcGFnZSkKIAkJcmV0dXJuIE5VTEw7CkBAIC01Mjc1LDcgJiM0Mzs1Mjc3LDggQEAgc3RhdGljIHZvaWQgKl9fX2ttYWxsb2NfbGFyZ2Vfbm9kZShzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKQogCWlmIChub2RlID09IE5VTUFfTk9fTk9ERSkKIAkJcGFnZSA9IGFsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZmxhZ3MsIG9yZGVyKTsKIAllbHNlCi0JCXBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZmxhZ3MsIG9yZGVyLCBub2RlLCBOVUxMKTsKJiM0MzsJCXBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZmxhZ3MsIG9yZGVyLCBub2RlLCBOVUxMLAomIzQzOwkJCQkJCSAgIEFMTE9DX0RFRkFVTFQpOwogCiAJaWYgKHBhZ2UpIHsKIAkJcHRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vc3dhcC5jCmluZGV4IDU4ZTRlZmY2OThjYzRlLi5kMjUxMzEzMDVjOTRjYiAxMDA2NDQKLS0tIGEvbW0vc3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuYwpAQCAtMzksNiAmIzQzOzM5LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9idWZmZXJfaGVhZC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7cGFnZV9hbGxvYy5oJiMzNDsKIAogI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCiAjaW5jbHVkZSAmbHQ7dHJhY2UvZXZlbnRzL3BhZ2VtYXAuaCZndDsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggNzU0YzVmNWQ3MTZhYWQuLmRlMTg3OWRiMzkxNjBiIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNjYsNiAmIzQzOzY2LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9zeXNjdGwuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3BhZ2VfYWxsb2MuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3N3YXAuaCYjMzQ7CiAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwpkaWZmIC0tZ2l0IGEvbW0vdm1zdGF0LmMgYi9tbS92bXN0YXQuYwppbmRleCA3YjkzZmJmOWFmMDkyNi4uM2I1Y2IxMDMxZjcyMDkgMTAwNjQ0Ci0tLSBhL21tL3Ztc3RhdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc3RhdC5jCkBAIC0zMCw2ICYjNDM7MzAsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL2lzb2xhdGlvbi5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7cGFnZV9hbGxvYy5oJiMzNDsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAjaWZkZWYgQ09ORklHX05VTUEKZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmggYi90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oCmluZGV4IDZjNzVkZjMwYTI4MWQxLi5hOTNiOGJkMjAwYjc2MCAxMDA2NDQKLS0tIGEvdG9vbHMvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oCkBAIC01NSw3ICYjNDM7NTUsNiBAQCBlbnVtIHsKICNpZmRlZiBDT05GSUdfTE9DS0RFUAogCV9fX0dGUF9OT0xPQ0tERVBfQklULAogI2VuZGlmCi0JX19fR0ZQX05PX09CSl9FWFRfQklULAogCV9fX0dGUF9MQVNUX0JJVAogfTsKIApAQCAtOTYsNyAmIzQzOzk1LDYgQEAgZW51bSB7CiAjZWxzZQogI2RlZmluZSBfX19HRlBfTk9MT0NLREVQCTAKICNlbmRpZgotI2RlZmluZSBfX19HRlBfTk9fT0JKX0VYVCAgICAgICBCSVQoX19fR0ZQX05PX09CSl9FWFRfQklUKQogCiAvKgogICogUGh5c2ljYWwgYWRkcmVzcyB6b25lIG1vZGlmaWVycyAoc2VlIGxpbnV4L21tem9uZS5oIC0gbG93IGZvdXIgYml0cykKQEAgLTEzNywxNyAmIzQzOzEzNSwxMiBAQCBlbnVtIHsKICAqIG5vZGUgd2l0aCBubyBmYWxsYmFja3Mgb3IgcGxhY2VtZW50IHBvbGljeSBlbmZvcmNlbWVudHMuCiAgKgogICogJV9fR0ZQX0FDQ09VTlQgY2F1c2VzIHRoZSBhbGxvY2F0aW9uIHRvIGJlIGFjY291bnRlZCB0byBrbWVtY2cuCi0gKgotICogJV9fR0ZQX05PX09CSl9FWFQgY2F1c2VzIHNsYWIgYWxsb2NhdGlvbiB0byBoYXZlIG5vIG9iamVjdCBleHRlbnNpb24uCi0gKiBtYXJrX29ial9jb2RldGFnX2VtcHR5KCkgc2hvdWxkIGJlIGNhbGxlZCB1cG9uIGZyZWVpbmcgZm9yIG9iamVjdHMgYWxsb2NhdGVkCi0gKiB3aXRoIHRoaXMgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZWlyIE5VTEwgdGFncyBhcmUgZXhwZWN0ZWQgYW5kIG5vcm1hbC4KICAqLwogI2RlZmluZSBfX0dGUF9SRUNMQUlNQUJMRSAoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX1JFQ0xBSU1BQkxFKQogI2RlZmluZSBfX0dGUF9XUklURQkoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX1dSSVRFKQogI2RlZmluZSBfX0dGUF9IQVJEV0FMTCAgICgoX19mb3JjZSBnZnBfdClfX19HRlBfSEFSRFdBTEwpCiAjZGVmaW5lIF9fR0ZQX1RISVNOT0RFCSgoX19mb3JjZSBnZnBfdClfX19HRlBfVEhJU05PREUpCiAjZGVmaW5lIF9fR0ZQX0FDQ09VTlQJKChfX2ZvcmNlIGdmcF90KV9fX0dGUF9BQ0NPVU5UKQotI2RlZmluZSBfX0dGUF9OT19PQkpfRVhUICAgKChfX2ZvcmNlIGdmcF90KV9fX0dGUF9OT19PQkpfRVhUKQogCiAvKioKICAqIERPQzogV2F0ZXJtYXJrIG1vZGlmaWVycwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMzoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQ2NQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQ3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZhY3RvcmluZyB0aGUgTGludXggS2VybmVsJiMzOTtzIFBhZ2UgQWxsb2NhdG9yKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZGl2ZXMgZGVlcCBpbnRvIHRoZSBMaW51eCBrZXJuZWwmIzM5O3MgcGFnZSBhbGxvY2F0b3IuIEl0IGxvb2tzIGxpa2UgYSBzaWduaWZpY2FudCByZWZhY3RvcmluZyBvZiB0aGUgaW50ZXJuYWwgQVBJcywgd2hpY2ggaXMgYWx3YXlzIGEgYml0IG5lcnZlLXdyYWNraW5nIGdpdmVuIGhvdyBmdW5kYW1lbnRhbCBhbmQgZnJlcXVlbnRseSB1c2VkIHRoaXMgY29kZSBpcy4gVGhlIGNvcmUgb2YgdGhpcyB3b3JrIHNlZW1zIHRvIGJlIGFpbWVkIGF0IG1ha2luZyB0aGluZ3MgY2xlYW5lciBhbmQgcG90ZW50aWFsbHkgbW9yZSBmbGV4aWJsZSBmb3IgZnV0dXJlIGRldmVsb3BtZW50LgoKVGhlIHBhdGNoIGNyZWF0ZXMgYSBuZXcgaGVhZGVyLCBgbW0vcGFnZV9hbGxvYy5oYCwgYW5kIHNoaWZ0cyBzb21lIGludGVybmFsIGRlZmluaXRpb25zIGZyb20gYG1tL2ludGVybmFsLmhgIG92ZXIgdGhlcmUuIFRoYXQmIzM5O3MgZ29vZCBoeWdpZW5lOyBzZXBhcmF0aW5nIGNvbmNlcm5zIGlzIGFsd2F5cyBhIHNvbGlkIG1vdmUuIFRoZXkmIzM5O3JlIGFsc28gbW9kaWZ5aW5nIHRoZSBzaWduYXR1cmVzIG9mIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAgYW5kIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgIHRvIHRha2UgYW4gYGFsbG9jX2ZsYWdzYCBhcmd1bWVudC4gUmVwbGFjaW5nIHNwZWNpZmljIGZsYWdzIGxpa2UgYF9fR0ZQX05PX09CSl9FWFRgIGFuZCBgX19HRlBfTk9fQ09ERVRBR2Agd2l0aCBhIGNvbnNvbGlkYXRlZCBgYWxsb2NfZmxhZ3NgIGFuZCBgQUxMT0NfTk9fQ09ERVRBR2AgaXMgYW5vdGhlciB3ZWxjb21lIGNoYW5nZS4gVGhlIG9sZCBsb2NrIGRlZmluaXRpb24gaXMgYWxzbyBjaGFuZ2VkIGZyb20gYEFMTE9DX1RSWUxPQ0tgIHRvIGBBTExPQ19OT0xPQ0tgIGFuZCB0aGUgZnVuY3Rpb24gYGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mYCBpcyBvdXQgb2YgbGluZWQgZnJvbSBgaW5jbHVkZS9saW51eC9nZnAuaGAsIHdoaWxlIGBnZnBfdG9fYWxsb2NfZmxhZ3NgIGlzIHJlcGxhY2VkIHdpdGggYGFsbG9jX2ZsYWdzX3Nsb3dwYXRoYCBhbmQgYGdmcF90b19hbGxvY19mbGFnc19jbWFgIGlzIHJlcGxhY2VkIHdpdGggYGFsbG9jX2ZsYWdzX2NtYWAuCgpHaXZlbiB0aGF0IGl0IHRvdWNoZXMgYG1tL3BhZ2VfYWxsb2MuY2AsIGBtbS9pbnRlcm5hbC5oYCwgYG1tL3BhZ2VfYWxsb2MuaGAsIGFuZCBgaW5jbHVkZS9saW51eC9nZnAuaGAsIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdG8gc2VlIGlmIHRoaXMgaW50cm9kdWNlcyBhbnkgbmV3IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBUaGUgcGFnZSBhbGxvY2F0b3IgaXMgYWx3YXlzIGVuYWJsZWQsIHNvIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LiBCdXQgSSBuZWVkIHRvIGNoZWNrIGlmIHRoaW5ncyBsaWtlIGBDT05GSUdfTlVNQWAsIGBDT05GSUdfTUVNQ0dgLCBvciBtYXliZSBldmVuIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgY29tZSBpbnRvIHBsYXkgaGVyZS4gVGhlIHVzZSBvZiBgQUxMT0NfTk9fQ09ERVRBR2AgaW4gYG1tL2FsbG9jX3RhZy5jYCBmZWVscyBsaWtlIGl0IGNvdWxkIGJlIHJlbGF0ZWQgdG8gYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYC4gSSB0aGluayBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIGJlIHN1cmUgYWJvdXQgdGhlIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgZGVwZW5kZW5jeS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBiZWZvcmUgd2UgcHVzaCB0aGlzIHVwc3RyZWFtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAzOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdD0yNT1DdXJyZW50bHksIHRoZXNlIGZpbGVzIGFyZSBpbiAvcHJvYy9zeXMvdm06XG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0LTQ2LS0gbWF4X21hcF9jb3VudFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0OjQ3Oi0gbWVtX3Byb2ZpbGluZyAgICAgICAgIChvbmx5IGlmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HPXkpXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QtNDgtLSBtZW1vcnlfZmFpbHVyZV9lYXJseV9raWxsXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0PTQ3OT1tZW1fcHJvZmlsaW5nXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0LTQ4MS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdDo0ODI6RW5hYmxlIG1lbW9yeSBwcm9maWxpbmcgKHdoZW4gQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkc9eSlcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdC00ODMtXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0PTQ4OT1tZW1vcnkgYWxsb2NhdGlvbnMuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QtNDkwLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0OjQ5MTpUaGUgZGVmYXVsdCB2YWx1ZSBkZXBlbmRzIG9uIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVC5cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdC00OTItXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3Q6NDkzOldoZW4gQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUc9eSwgdGhpcyBjb250cm9sIGlzIHJlYWQtb25seSB0byBhdm9pZFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0LTQ5NC13YXJuaW5ncyBwcm9kdWNlZCBieSBhbGxvY2F0aW9ucyBtYWRlIHdoaWxlIHByb2ZpbGluZyBpcyBkaXNhYmxlZCBhbmQgZnJlZWRcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdD0xMT1rY29uZmlnIG9wdGlvbnM6XG5Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdDoxMjotIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG5Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdC0xMy1cbkRvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0OjE0Oi0gQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXG5Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdC0xNS1cbkRvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0OjE2Oi0gQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcbkRvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0LTE3LSAgYWRkcyB3YXJuaW5ncyBmb3IgYWxsb2NhdGlvbnMgdGhhdCB3ZXJlbiYjMzk7dCBhY2NvdW50ZWQgYmVjYXVzZSBvZiBhXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3Q9MjA9Qm9vdCBwYXJhbWV0ZXI6XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3QtMjQtICBjYW5ub3QgYmUgZW5hYmxlZCBhdCBydW50aW1lIChzeXNjdGwgYmVjb21lcyByZWFkLW9ubHkpLlxuRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3Q6MjU6ICBXaGVuIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVD15LCBkZWZhdWx0IHZhbHVlIGlzIFwmIzM0OzFcJiMzNDsuXG5Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdDoyNjogIFdoZW4gQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUPW4sIGRlZmF1bHQgdmFsdWUgaXMgXCYjMzQ7bmV2ZXJcJiMzNDsuXG5Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdC0yNy0gIFwmIzM0O2NvbXByZXNzZWRcJiMzNDsgb3B0aW9uYWwgcGFyYW1ldGVyIHdpbGwgdHJ5IHRvIHN0b3JlIHBhZ2UgdGFnIHJlZmVyZW5jZXMgaW4gYVxuLS1cbkRvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0PTMzPXN5c2N0bDpcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdC0zOS1cbkRvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0OjQwOiAgVGhlIGRlZmF1bHQgdmFsdWUgZGVwZW5kcyBvbiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFQuXG5Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdC00MS1cbkRvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0OjQyOiAgV2hlbiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRz15LCB0aGlzIGNvbnRyb2wgaXMgcmVhZC1vbmx5IHRvIGF2b2lkXG5Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdC00My0gIHdhcm5pbmdzIHByb2R1Y2VkIGJ5IGFsbG9jYXRpb25zIG1hZGUgd2hpbGUgcHJvZmlsaW5nIGlzIGRpc2FibGVkIGFuZCBmcmVlZFxuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvY29kZXRhZy5sZHMuaC00LVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9jb2RldGFnLmxkcy5oOjU6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG5pbmNsdWRlL2FzbS1nZW5lcmljL2NvZGV0YWcubGRzLmgtNi0jZGVmaW5lIElGX01FTV9BTExPQ19QUk9GSUxJTkcoLi4uKSBfX1ZBX0FSR1NfX1xuLS1cbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmg9Mzg9c3RydWN0IGFsbG9jX3RhZ19tb2R1bGVfc2VjdGlvbiB7XG4tLVxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaC00Ny1cbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmg6NDg6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXG5pbmNsdWRlL2xpbnV4L2FsbG9jX3RhZy5oLTQ5LVxuLS1cbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmg9NTc9c3RhdGljIGlubGluZSB2b2lkIHNldF9jb2RldGFnX2VtcHR5KHVuaW9uIGNvZGV0YWdfcmVmICpyZWYpXG4tLVxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaC02Mi1cbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmg6NjM6I2Vsc2UgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmgtNjQtXG4tLVxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaD02Nz1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2NvZGV0YWdfZW1wdHkodW5pb24gY29kZXRhZ19yZWYgKnJlZilcbi0tXG5pbmNsdWRlL2xpbnV4L2FsbG9jX3RhZy5oLTcyLVxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaDo3MzojZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmgtNzQtXG5pbmNsdWRlL2xpbnV4L2FsbG9jX3RhZy5oOjc1OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaC03Ni1cbi0tXG5pbmNsdWRlL2xpbnV4L2FsbG9jX3RhZy5oPTk3PURFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzLCBfc2hhcmVkX2FsbG9jX3RhZyk7XG4tLVxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaC0xMjctXG5pbmNsdWRlL2xpbnV4L2FsbG9jX3RhZy5oOjEyODpERUNMQVJFX1NUQVRJQ19LRVlfTUFZQkUoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxULFxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaC0xMjktXHRcdFx0bWVtX2FsbG9jX3Byb2ZpbGluZ19rZXkpO1xuLS1cbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmg9MTMxPXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQodm9pZClcbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmgtMTMyLXtcbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmg6MTMzOlx0cmV0dXJuIHN0YXRpY19icmFuY2hfbWF5YmUoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxULFxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaC0xMzQtXHRcdFx0XHQgICBcdTAwMjZtZW1fYWxsb2NfcHJvZmlsaW5nX2tleSk7XG4tLVxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaD0xMzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGFsbG9jX3RhZ19yZWFkKHN0cnVjdCBhbGxvY190YWcgKnRhZylcbi0tXG5pbmNsdWRlL2xpbnV4L2FsbG9jX3RhZy5oLTE1MS1cbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmg6MTUyOiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaC0xNTMtc3RhdGljIGlubGluZSB2b2lkIGFsbG9jX3RhZ19hZGRfY2hlY2sodW5pb24gY29kZXRhZ19yZWYgKnJlZiwgc3RydWN0IGFsbG9jX3RhZyAqdGFnKVxuLS1cbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmg9MjMxPXN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvY190YWdfaXNfaW5hY2N1cmF0ZShzdHJ1Y3QgYWxsb2NfdGFnICp0YWcpXG4tLVxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaC0yMzctXG5pbmNsdWRlL2xpbnV4L2FsbG9jX3RhZy5oOjIzODojZWxzZSAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaC0yMzktXG4tLVxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaD0yNDY9c3RhdGljIGlubGluZSBib29sIGFsbG9jX3RhZ19pc19pbmFjY3VyYXRlKHN0cnVjdCBhbGxvY190YWcgKnRhZykgeyByZXR1cm4gZmFsc2U7IH1cbi0tXG5pbmNsdWRlL2xpbnV4L2FsbG9jX3RhZy5oLTI0OC1cbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmg6MjQ5OiNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaC0yNTAtXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTQ0Nz1zdHJ1Y3Qgc2xhYm9ial9leHQge1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE0NTAtI2VuZGlmXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNDUxOiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTQ1Mi1cdHVuaW9uIGNvZGV0YWdfcmVmIHJlZjtcbi0tXG5pbmNsdWRlL2xpbnV4L3BnYWxsb2NfdGFnLmgtOS1cbmluY2x1ZGUvbGludXgvcGdhbGxvY190YWcuaDoxMDojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcbmluY2x1ZGUvbGludXgvcGdhbGxvY190YWcuaC0xMS1cbi0tXG5pbmNsdWRlL2xpbnV4L3BnYWxsb2NfdGFnLmg9MjAyPXZvaWQgX19pbml0IGFsbG9jX3RhZ19zZWNfaW5pdCh2b2lkKTtcbmluY2x1ZGUvbGludXgvcGdhbGxvY190YWcuaC0yMDMtXG5pbmNsdWRlL2xpbnV4L3BnYWxsb2NfdGFnLmg6MjA0OiNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXG5pbmNsdWRlL2xpbnV4L3BnYWxsb2NfdGFnLmgtMjA1LVxuLS1cbmluY2x1ZGUvbGludXgvcGdhbGxvY190YWcuaD0yMTA9c3RhdGljIGlubGluZSBzdHJ1Y3QgYWxsb2NfdGFnICpwZ2FsbG9jX3RhZ19nZXQoc3RydWN0IHBhZ2UgKnBhZ2UpIHsgcmV0dXJuIE5VTEw7IH1cbmluY2x1ZGUvbGludXgvcGdhbGxvY190YWcuaC0yMTEtXG5pbmNsdWRlL2xpbnV4L3BnYWxsb2NfdGFnLmg6MjEyOiNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xuaW5jbHVkZS9saW51eC9wZ2FsbG9jX3RhZy5oLTIxMy1cbi0tXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaD04Nj1zdHJ1Y3Qgcmhhc2h0YWJsZSB7XG4tLVxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmgtOTYtXHRhdG9taWNfdFx0XHRcdG5lbGVtcztcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oOjk3OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmgtOTgtXHRzdHJ1Y3QgYWxsb2NfdGFnXHRcdCphbGxvY190YWc7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oPTgyND1zdHJ1Y3QgdGFza19zdHJ1Y3Qge1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaC04NDgtXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6ODQ5OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xuaW5jbHVkZS9saW51eC9zY2hlZC5oLTg1MC1cdHN0cnVjdCBhbGxvY190YWdcdFx0KmFsbG9jX3RhZztcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9MjMzOT1leHRlcm4gdm9pZCBzY2hlZF9zZXRfc3RvcF90YXNrKGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3RvcCk7XG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMjM0MC1cbmluY2x1ZGUvbGludXgvc2NoZWQuaDoyMzQxOiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xuaW5jbHVkZS9saW51eC9zY2hlZC5oLTIzNDItc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3QgYWxsb2NfdGFnICphbGxvY190YWdfc2F2ZShzdHJ1Y3QgYWxsb2NfdGFnICp0YWcpXG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oPTIzNDg9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGFsbG9jX3RhZ19yZXN0b3JlKHN0cnVjdCBhbGxvY190YWcgKnRhZywgc3RydWN0IGFsbG9jX3RhZyAqb2xkKVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTIzNDkte1xuaW5jbHVkZS9saW51eC9zY2hlZC5oOjIzNTA6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMjM1MS1cdFdBUk4oY3VycmVudC1cdTAwM2VhbGxvY190YWcgIT0gdGFnLCBcJiMzNDtjdXJyZW50LVx1MDAzZWFsbG9jX3RhZyB3YXMgY2hhbmdlZDpcXG5cJiMzNDspO1xuLS1cbm1tL01ha2VmaWxlPTE0OT1vYmotJChDT05GSUdfTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUKSAmIzQzOz0gdGVzdHMvbGF6eV9tbXVfbW9kZV9rdW5pdC5vXG5tbS9NYWtlZmlsZToxNTA6b2JqLSQoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcpICYjNDM7PSBhbGxvY190YWcub1xuLS1cbm1tL2FsbG9jX3RhZy5jLTI0LVxubW0vYWxsb2NfdGFnLmM6MjU6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxubW0vYWxsb2NfdGFnLmMtMjYtc3RhdGljIGJvb2wgbWVtX3Byb2ZpbGluZ19zdXBwb3J0ID0gdHJ1ZTtcbi0tXG5tbS9hbGxvY190YWcuYz0zNT1FWFBPUlRfU1lNQk9MKF9zaGFyZWRfYWxsb2NfdGFnKTtcbi0tXG5tbS9hbGxvY190YWcuYy0zNy1cbm1tL2FsbG9jX3RhZy5jOjM4OkRFRklORV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcbm1tL2FsbG9jX3RhZy5jLTM5LVx0XHRcdG1lbV9hbGxvY19wcm9maWxpbmdfa2V5KTtcbi0tXG5tbS9hbGxvY190YWcuYz03NjI9c3RhdGljIF9faW5pdCBib29sIG5lZWRfcGFnZV9hbGxvY190YWdnaW5nKHZvaWQpXG4tLVxubW0vYWxsb2NfdGFnLmMtNzY5LVxubW0vYWxsb2NfdGFnLmM6NzcwOiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xubW0vYWxsb2NfdGFnLmMtNzcxLS8qXG4tLVxubW0vYWxsb2NfdGFnLmM9ODQ4PXN0YXRpYyB2b2lkIF9faW5pdCBjbGVhcl9lYXJseV9hbGxvY19wZm5fdGFnX3JlZnModm9pZClcbi0tXG5tbS9hbGxvY190YWcuYy05MDEtfVxubW0vYWxsb2NfdGFnLmM6OTAyOiNlbHNlIC8qICFDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xubW0vYWxsb2NfdGFnLmMtOTAzLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgY2xlYXJfZWFybHlfYWxsb2NfcGZuX3RhZ19yZWZzKHZvaWQpIHt9XG5tbS9hbGxvY190YWcuYzo5MDQ6I2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXG5tbS9hbGxvY190YWcuYy05MDUtXG4tLVxubW0vYWxsb2NfdGFnLmM9OTIzPXN0YXRpYyBpbnQgcHJvY19tZW1fcHJvZmlsaW5nX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbi0tXG5tbS9hbGxvY190YWcuYy05MzQtXG5tbS9hbGxvY190YWcuYzo5MzU6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXG5tbS9hbGxvY190YWcuYy05MzYtXHRcdC8qIFVzZXIgY2FuJiMzOTt0IHRvZ2dsZSBwcm9maWxpbmcgd2hpbGUgZGVidWdnaW5nICovXG4tLVxubW0vcGFnZV9hbGxvYy5jPTEyMTk9c3RhdGljIHZvaWQgY2xlYXJfaGlnaHBhZ2VzX2thc2FuX3RhZ2dlZChzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy0xMjMzLVxubW0vcGFnZV9hbGxvYy5jOjEyMzQ6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG5tbS9wYWdlX2FsbG9jLmMtMTIzNS1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9MTMwMD1zdGF0aWMgaW5saW5lIHZvaWQgcGdhbGxvY190YWdfc3ViX3BhZ2VzKHN0cnVjdCBhbGxvY190YWcgKnRhZywgdW5zaWduZWQgaW50IG5yKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy0xMzA1LVxubW0vcGFnZV9hbGxvYy5jOjEzMDY6I2Vsc2UgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcgKi9cbm1tL3BhZ2VfYWxsb2MuYy0xMzA3LVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz0xMzExPXN0YXRpYyBpbmxpbmUgdm9pZCBwZ2FsbG9jX3RhZ19zdWJfcGFnZXMoc3RydWN0IGFsbG9jX3RhZyAqdGFnLCB1bnNpZ25lZCBpbnQgbnIpIHt9XG5tbS9wYWdlX2FsbG9jLmMtMTMxMi1cbm1tL3BhZ2VfYWxsb2MuYzoxMzEzOiNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xubW0vcGFnZV9hbGxvYy5jLTEzMTQtXG4tLVxubW0vcGFnZV9leHQuYz04MD1zdGF0aWMgc3RydWN0IHBhZ2VfZXh0X29wZXJhdGlvbnMgKnBhZ2VfZXh0X29wc1tdIF9faW5pdGRhdGEgPSB7XG4tLVxubW0vcGFnZV9leHQuYy04Ni0jZW5kaWZcbm1tL3BhZ2VfZXh0LmM6ODc6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG5tbS9wYWdlX2V4dC5jLTg4LVx0XHUwMDI2cGFnZV9hbGxvY190YWdnaW5nX29wcyxcbi0tXG5tbS9wYWdlX2V4dC5jPTEwMD1zdGF0aWMgdW5zaWduZWQgbG9uZyB0b3RhbF91c2FnZTtcbm1tL3BhZ2VfZXh0LmMtMTAxLVxubW0vcGFnZV9leHQuYzoxMDI6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXG5tbS9wYWdlX2V4dC5jLTEwMy0vKlxuLS1cbm1tL3BlcmNwdS1pbnRlcm5hbC5oPTM1PXN0cnVjdCBwY3B1b2JqX2V4dCB7XG4tLVxubW0vcGVyY3B1LWludGVybmFsLmgtMzgtI2VuZGlmXG5tbS9wZXJjcHUtaW50ZXJuYWwuaDozOTojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTQwLVx0dW5pb24gY29kZXRhZ19yZWZcdHRhZztcbi0tXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC00My1cbm1tL3BlcmNwdS1pbnRlcm5hbC5oOjQ0OiNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgfHwgZGVmaW5lZChDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORylcbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTQ1LSNkZWZpbmUgTkVFRF9QQ1BVT0JKX0VYVFxuLS1cbm1tL3BlcmNwdS1pbnRlcm5hbC5oPTkwPXN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX3BjcHVvYmpfZXh0KHZvaWQpXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC05MS17XG5tbS9wZXJjcHUtaW50ZXJuYWwuaDo5MjpcdGlmIChJU19FTkFCTEVEKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HKSlcbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTkzLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS9wZXJjcHUuYz0xNjkwPXN0YXRpYyB2b2lkIHBjcHVfbWVtY2dfZnJlZV9ob29rKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IG9mZiwgc2l6ZV90IHNpemUpXG4tLVxubW0vcGVyY3B1LmMtMTY5NC1cbm1tL3BlcmNwdS5jOjE2OTU6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG5tbS9wZXJjcHUuYy0xNjk2LXN0YXRpYyB2b2lkIHBjcHVfYWxsb2NfdGFnX2FsbG9jX2hvb2soc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgb2ZmLFxuLS1cbm1tL3Nob3dfbWVtLmM9NDA4PXZvaWQgX19zaG93X21lbSh1bnNpZ25lZCBpbnQgZmlsdGVyLCBjb25zdCBub2RlbWFza190ICpub2RlbWFzayxcbi0tXG5tbS9zaG93X21lbS5jLTQzNC0jZW5kaWZcbm1tL3Nob3dfbWVtLmM6NDM1OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xubW0vc2hvd19tZW0uYy00MzYtXHRzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1lbV9hbGxvY19wcm9maWxpbmdfc3BpbmxvY2spO1xuLS1cbm1tL3NsdWIuYz0yMDQ2PXN0YXRpYyBpbmxpbmUgdm9pZCBkZWNfc2xhYnNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgaW50IG5vZGUsXG4tLVxubW0vc2x1Yi5jLTIwNjMtXG5tbS9zbHViLmM6MjA2NDojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcbm1tL3NsdWIuYy0yMDY1LVxuLS1cbm1tL3NsdWIuYz0yMDk3PXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbi0tXG5tbS9zbHViLmMtMjExMi1cbm1tL3NsdWIuYzoyMTEzOiNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXG5tbS9zbHViLmMtMjExNC1cbi0tXG5tbS9zbHViLmM9MjExNz1zdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4tLVxubW0vc2x1Yi5jLTIxMTktXG5tbS9zbHViLmM6MjEyMDojZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cbm1tL3NsdWIuYy0yMTIxLVxuLS1cbm1tL3NsdWIuYz0yMzQyPXN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy0yMzQ4LVxubW0vc2x1Yi5jOjIzNDk6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG5tbS9zbHViLmMtMjM1MC1cbi0tXG5tbS9zbHViLmM9MjQzNz1hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXG4tLVxubW0vc2x1Yi5jLTI0NDMtXG5tbS9zbHViLmM6MjQ0NDojZWxzZSAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xubW0vc2x1Yi5jLTI0NDUtXG4tLVxubW0vc2x1Yi5jPTI0NTM9YWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxuLS1cbm1tL3NsdWIuYy0yNDU3LVxubW0vc2x1Yi5jOjI0NTg6I2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXG5tbS9zbHViLmMtMjQ1OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMzoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDA1MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDIwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhZ2UgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBzdHVmZiDigJMgYG1tL3BhZ2VfYWxsb2MuY2AgYW5kIGBtbS9hbGxvY190YWcuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aHkgdGhlc2UgdHdvIGZpbGVzPyBUaGUgbWVudGlvbiBvZiBgQUxMT0NfTk9fQ09ERVRBR2AgaW4gYG1tL2FsbG9jX3RhZy5jYCBpcyB0aGUga2V5LiBUaGF04oCZcyBjb25kaXRpb25hbCBvbiBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgLiBTbywgaXQmIzM5O3MgcHJldHR5IGNsZWFyOiB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHByb2ZpbGluZyBjb25maWd1cmF0aW9uIGlzIGVuYWJsZWQuCgpBbmQgdGhlIGNoYW5nZXMgdG8gYG1tL3BhZ2VfYWxsb2MuY2AgYXJlIHNpZ25pZmljYW50LiBJdCYjMzk7cyB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCYjMzk7cyBwYWdlIGFsbG9jYXRpb24gbG9naWMuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIHNldmVyYWwgZnVuY3Rpb25zIHdpdGggdGhlIGBub3Byb2ZgIHN1ZmZpeDogYF9fYWxsb2NfcGFnZXNfbm9wcm9mYCwgYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAsIGBhbGxvY19wYWdlc19ub2RlX25vcHJvZmAsIGFuZCBgYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9ja19ub3Byb2ZgLiBSaWdodCBhd2F5LCB0aGUgJiMzNDtub3Byb2YmIzM0OyBpbmRpY2F0ZXMgaXQmIzM5O3MgcmVsYXRlZCB0byB0aGUgcHJvZmlsaW5nLiBCdXQgdGhlc2UgYXJlIGNvcmUgYWxsb2NhdGlvbiBmdW5jdGlvbnMsIGhlYXZpbHkgdXNlZCwgd2hpY2ggbWVhbnMgZXZlbiBhIHNtYWxsIGJ1ZyBoZXJlIHdvdWxkIGhhdmUgYSBodWdlIGltcGFjdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGluIHRoaXMgY29udGV4dCwgZXNwZWNpYWxseSBzaW5jZSB0aGV5IGltcGFjdCBhbGxvY2F0aW9uIGxvZ2ljLgoKYGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mYCBzdGFuZHMgb3V0IGEgYml0LiBJdCBpcyB1c2VkIGZvciByZWVudHJhbnQgYWxsb2NhdGlvbiwgd2hpY2ggY2FuIGJlIHRyaWNreS4gSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBjYWxsZXJzIG9mIHRoYXQgZnVuY3Rpb24gYW5kIHJldmlldyB0aGVtIHZlcnkgY2FyZWZ1bGx5IHRvIHNlZSBob3cgdGhlIGNoYW5nZXMgaW50ZXJhY3Qgd2l0aGluIHRob3NlIG9wcG9ydHVuaXN0aWMgY29udGV4dHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDM6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfZnJvemVuX3BhZ2VzX25vbG9jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmM9Nzk2Mj1zdGF0aWMgYm9vbCBfX2ZyZWVfdW5hY2NlcHRlZChzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzk2OS1cbm1tL3BhZ2VfYWxsb2MuYzo3OTcwOnN0cnVjdCBwYWdlICphbGxvY19mcm96ZW5fcGFnZXNfbm9sb2NrX25vcHJvZihnZnBfdCBnZnBfZmxhZ3MsIGludCBuaWQsIHVuc2lnbmVkIGludCBvcmRlcilcbm1tL3BhZ2VfYWxsb2MuYy03OTcxLXtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9Nzk5Mz1zdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbm9sb2NrX25vcHJvZihnZnBfdCBnZnBfZmxhZ3MsIGludCBuaWQsIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzk5Ni1cbm1tL3BhZ2VfYWxsb2MuYzo3OTk3Olx0cGFnZSA9IGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mKGdmcF9mbGFncywgbmlkLCBvcmRlcik7XG5tbS9wYWdlX2FsbG9jLmMtNzk5OC1cdGlmIChwYWdlKVxuLS1cbm1tL3BhZ2VfYWxsb2MuaD0yNDU9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS9wYWdlX2FsbG9jLmgtMjU0LVxubW0vcGFnZV9hbGxvYy5oOjI1NTpzdHJ1Y3QgcGFnZSAqYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9ja19ub3Byb2YoZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbmlkLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xubW0vcGFnZV9hbGxvYy5oOjI1NjojZGVmaW5lIGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2soLi4uKSBcXFxubW0vcGFnZV9hbGxvYy5oOjI1NzpcdGFsbG9jX2hvb2tzKGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mKF9fVkFfQVJHU19fKSlcbm1tL3BhZ2VfYWxsb2MuaC0yNTgtdm9pZCBmcmVlX2Zyb3plbl9wYWdlc19ub2xvY2soc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG4tLVxubW0vc2x1Yi5jPTMyODE9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYiAqYWxsb2Nfc2xhYl9wYWdlKGdmcF90IGZsYWdzLCBpbnQgbm9kZSxcbi0tXG5tbS9zbHViLmMtMzI4OS1cdGlmICh1bmxpa2VseSghYWxsb3dfc3BpbikpXG5tbS9zbHViLmM6MzI5MDpcdFx0cGFnZSA9IGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2soMC8qIF9fR0ZQX0NPTVAgaXMgaW1wbGllZCAqLyxcbm1tL3NsdWIuYy0zMjkxLVx0XHRcdFx0XHRcdFx0XHQgIG5vZGUsIG9yZGVyKTtcbi0tXG5tbS9zbHViLmM9NTM2OT1zdGF0aWMgdm9pZCAqX19rbWFsbG9jX25vbG9ja19ub3Byb2YoREVDTF9UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBnZnBfdCBnZnBfZmxhZ3MsXG4tLVxubW0vc2x1Yi5jLTUzODYtXHQgKiBTZWUgdGhlIGNvbW1lbnQgZm9yIHRoZSBzYW1lIGNoZWNrIGluXG5tbS9zbHViLmM6NTM4NzpcdCAqIGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mKClcbm1tL3NsdWIuYy01Mzg4LVx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDM6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEyNzAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA3MjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGb2N1czogS2VybmVsIE1lbW9yeSBBbGxvY2F0aW9uIFBhdGNoZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBzcGlkZXIgc2Vuc2VzIGFyZSB0aW5nbGluZyDigJMgdGhpcyBuZWVkcyBmdXp6aW5nLCBkZWZpbml0ZWx5LiBJIHNlZSB0aGF0IGBhbGxvY19mcm96ZW5fcGFnZXNfbm9sb2NrYCBpcyBiZWluZyB1c2VkIHdpdGhpbiBgc2x1Yi5jYCBmb3IgYm90aCBgYWxsb2Nfc2xhYl9wYWdlYCBhbmQgYF9fa21hbGxvY19ub2xvY2tfbm9wcm9mYCwgYW5kIHRoZSBwYXRjaCBhbHNvIGRpdmVzIGludG8gdGhlIGNvcmUgcGFnZSBhbGxvY2F0aW9uIGZ1bmN0aW9uczogYF9fYWxsb2NfcGFnZXNfbm9wcm9mYCBhbmQgYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAuCgpOb3csIHRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBhdm9pZCBsaXN0aW5nICpnZW5lcmljKiBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCB0ZXN0IGRpc3RyaWJ1dGlvbiBza2V3LiAgU28sIHdoaWxlIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAgYW5kIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgIGFyZSAqY3JpdGljYWwqLCB0aGV5JiMzOTtyZSB0b28gY29tbW9uIHRvIGJlIHByaW1hcnkgZnV6emluZyB0YXJnZXRzIGhlcmUuIEkgbmVlZCB0byBnZXQgbW9yZSB0YXJnZXRlZC4gIEkgc2VlIHRoYXQgYGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mYCBpcyBhbHNvIGJlaW5nIHRvdWNoZWQsIGJ1dCB0aGF0JiMzOTtzIGFsc28gcHJldHR5IGdlbmVyaWMuCgpMZXQgbWUgcmV2aWV3IHRoZSBjaGFuZ2VzIGluIGBtbS9wYWdlX2FsbG9jLmNgIGFnYWluIOKAkyBpdCYjMzk7cyBjcnVjaWFsIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcuIE9rYXksIHNvIGluIGFkZGl0aW9uIHRvIHRoZSBjb3JlIGZ1bmN0aW9ucyBtZW50aW9uZWQgcHJldmlvdXNseToKCiogICBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYAoqICAgYF9fYWxsb2NfcGFnZXNfbm9wcm9mYAoqICAgYGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mYAoqICAgYGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mYAoKSSBzZWUgYGFsbG9jX3RhZ19hZGRfZWFybHlfcGZuYCBpbiBgbW0vYWxsb2NfdGFnLmNgIGlzIGJlaW5nIG1vZGlmaWVkLiBgcG9zdF9hbGxvY19ob29rYCwgYHByZXBfbmV3X3BhZ2VgLCBhbmQgc2V2ZXJhbCBgZ2ZwX3RvX2FsbG9jX2ZsYWdzYCBmdW5jdGlvbnMgYXJlIGJlaW5nIGNoYW5nZWQsIGFuZCBzb21lIG5ldyBmdW5jdGlvbnMgYGFsbG9jX29yZGVyX2FsbG93ZWRgIGFuZCBgYWxsb2NfdHJ5bG9ja19hbGxvd2VkYC4KCkdpdmVuIHRoZSBuZWVkIGZvciBmb2N1c2VkIGZ1enppbmcgYW5kIHRvIHN0YXkgd2l0aGluIHRoZSBzcGlyaXQgb2YgdGhlIGluc3RydWN0aW9ucywgSSB0aGluayBhIHByaW1lIGNhbmRpZGF0ZSBlbWVyZ2VzOiBgYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9ja19ub3Byb2ZgLiAgSXQmIzM5O3MgYSBzcGVjaWZpYyBBUEkgdGhhdCYjMzk7cyBub3cgbGV2ZXJhZ2luZyBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCB3aXRoIGBBTExPQ19OT0xPQ0tgLCBhbmQgdGhhdCYjMzk7cyBhbiBpbnRlcmVzdGluZyBpbnRlcnNlY3Rpb24uICBQbHVzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbmV3IGNhbGxzIHRoYXQgaGF2ZSB0byBiZSBwcm90ZWN0ZWQgZnJvbSByZWVudHJhbnQgYWxsb2NhdGlvbiBieSB0aGlzIHBhdGguIEFuZCwgYGFsbG9jX3RhZ19hZGRfZWFybHlfcGZuYCBpcyBhIHN0cm9uZyBzZWNvbmQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gYm90aCBvZiB0aG9zZSBhbmQgZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAzOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3RhZ19hZGRfZWFybHlfcGZuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYWxsb2NfdGFnLmg9MTYyPXN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY190YWdfc3ViX2NoZWNrKHVuaW9uIGNvZGV0YWdfcmVmICpyZWYpXG4tLVxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaC0xNjUtfVxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaDoxNjY6dm9pZCBhbGxvY190YWdfYWRkX2Vhcmx5X3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgZ2ZwX3QgZ2ZwX2ZsYWdzKTtcbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmgtMTY3LSNlbHNlXG4tLVxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaD0xNjk9c3RhdGljIGlubGluZSB2b2lkIGFsbG9jX3RhZ19zdWJfY2hlY2sodW5pb24gY29kZXRhZ19yZWYgKnJlZikge31cbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmg6MTcwOnN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY190YWdfYWRkX2Vhcmx5X3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgZ2ZwX3QgZ2ZwX2ZsYWdzKSB7fVxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaC0xNzEtI2VuZGlmXG4tLVxubW0vYWxsb2NfdGFnLmM9Nzg4PXN0YXRpYyBzdHJ1Y3QgcGZuX3Bvb2wgKmN1cnJlbnRfcGZuX3Bvb2wgX19pbml0ZGF0YTtcbm1tL2FsbG9jX3RhZy5jLTc4OS1cbm1tL2FsbG9jX3RhZy5jOjc5MDpzdGF0aWMgdm9pZCBfX2luaXQgX19hbGxvY190YWdfYWRkX2Vhcmx5X3Bmbih1bnNpZ25lZCBsb25nIHBmbilcbm1tL2FsbG9jX3RhZy5jLTc5MS17XG4tLVxubW0vYWxsb2NfdGFnLmM9ODI2PXR5cGVkZWYgdm9pZCBhbGxvY190YWdfYWRkX2Z1bmModW5zaWduZWQgbG9uZyBwZm4pO1xubW0vYWxsb2NfdGFnLmM6ODI3OnN0YXRpYyBhbGxvY190YWdfYWRkX2Z1bmMgX19yY3UgKmFsbG9jX3RhZ19hZGRfZWFybHlfcGZuX3B0ciBfX3JlZmRhdGEgPVxubW0vYWxsb2NfdGFnLmM6ODI4Olx0UkNVX0lOSVRJQUxJWkVSKF9fYWxsb2NfdGFnX2FkZF9lYXJseV9wZm4pO1xubW0vYWxsb2NfdGFnLmMtODI5LVxubW0vYWxsb2NfdGFnLmM6ODMwOnZvaWQgYWxsb2NfdGFnX2FkZF9lYXJseV9wZm4odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbm1tL2FsbG9jX3RhZy5jLTgzMS17XG4tLVxubW0vYWxsb2NfdGFnLmMtODQxLVx0cmN1X3JlYWRfbG9jaygpO1xubW0vYWxsb2NfdGFnLmM6ODQyOlx0YWxsb2NfdGFnX2FkZCA9IHJjdV9kZXJlZmVyZW5jZShhbGxvY190YWdfYWRkX2Vhcmx5X3Bmbl9wdHIpO1xubW0vYWxsb2NfdGFnLmMtODQzLVx0aWYgKGFsbG9jX3RhZ19hZGQpXG4tLVxubW0vYWxsb2NfdGFnLmM9ODQ4PXN0YXRpYyB2b2lkIF9faW5pdCBjbGVhcl9lYXJseV9hbGxvY19wZm5fdGFnX3JlZnModm9pZClcbi0tXG5tbS9hbGxvY190YWcuYy04NTYtXG5tbS9hbGxvY190YWcuYzo4NTc6XHRyY3VfYXNzaWduX3BvaW50ZXIoYWxsb2NfdGFnX2FkZF9lYXJseV9wZm5fcHRyLCBOVUxMKTtcbm1tL2FsbG9jX3RhZy5jOjg1ODpcdC8qIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHJhY2luZyB3aXRoIF9fYWxsb2NfdGFnX2FkZF9lYXJseV9wZm4oKSAqL1xubW0vYWxsb2NfdGFnLmMtODU5LVx0c3luY2hyb25pemVfcmN1KCk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTEyNTE9dm9pZCBfX3BnYWxsb2NfdGFnX2FkZChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy0xMjY1LVx0XHQgKi9cbm1tL3BhZ2VfYWxsb2MuYzoxMjY2Olx0XHRhbGxvY190YWdfYWRkX2Vhcmx5X3BmbihwYWdlX3RvX3BmbihwYWdlKSwgYWxsb2NfZmxhZ3MpO1xubW0vcGFnZV9hbGxvYy5jLTEyNjctXHRcdGlmICh0YXNrLVx1MDAzZWFsbG9jX3RhZylcbi0tXG5tbS9wYWdlX2FsbG9jLmgtNTMtICogU2tpcCBlYXJseSBQRk4gcmVjb3JkaW5nIGZvciBhIHBhZ2UgYWxsb2NhdGlvbi4gIFVzZWQgYnlcbm1tL3BhZ2VfYWxsb2MuaDo1NDogKiBfX2FsbG9jX3RhZ19hZGRfZWFybHlfcGZuKCkgdG8gYXZvaWQgcmVjdXJzaW9uIHdoZW4gYWxsb2NhdGluZyBwYWdlcyBmb3IgdGhlXG5tbS9wYWdlX2FsbG9jLmgtNTUtICogZWFybHkgUEZOIHRyYWNraW5nIGxpc3QgaXRzZWxmLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAzOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNDU0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldHM6CgoqKkVhcmx5IEluaXRpYWxpemF0aW9uIHZzLiBGdXp6aW5nIFRhcmdldCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBTZWVpbmcgYGFsbG9jX3RhZ19hZGRfZWFybHlfcGZuYCB0YWdnZWQgYXMgYW4gYF9faW5pdGAgb3IgZWFybHkgYm9vdCBmdW5jdGlvbiBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0JiMzOTtzIG5vdCBnb2luZyB0byBiZSBhIGZydWl0ZnVsIHRhcmdldCBmb3IgZnV6emluZy4gSXQmIzM5O3MgZXNzZW50aWFsbHkgb2ZmLWxpbWl0cyBkdXJpbmcgdGhlIG5vcm1hbCBydW50aW1lIGFuZCBvcGVyYXRpb24uIE15IGludGVyZXN0IGxpZXMgZWxzZXdoZXJlLgoKVGhlIG5leHQgcG9pbnQgemVyb2VzIGluIG9uIGBhbGxvY19mcm96ZW5fcGFnZXNfbm9sb2NrX25vcHJvZmAuIE5vdywgdGhhdCYjMzk7cyBtb3JlIGludGVyZXN0aW5nLiBLbm93aW5nIGl0JiMzOTtzIHV0aWxpemVkIHdpdGhpbiBgc2x1Yi5jYCBmb3IgYm90aCBgYWxsb2Nfc2xhYl9wYWdlYCAqYW5kKiBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgIHN1Z2dlc3RzIGl0JiMzOTtzIGEgY3JpdGljYWwgY29tcG9uZW50IG9mIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBtYWNoaW5lcnkuIFRoaXMgbWVhbnMgaXQmIzM5O3Mgd29ydGggdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgYF9fa21hbGxvY19ub2xvY2tfbm9wcm9mYCBub3cuCgpUaGUgbWFpbiBxdWVzdGlvbiBub3cgYmVjb21lczogaXMgYF9fa21hbGxvY19ub2xvY2tfbm9wcm9mYCBhY3R1YWxseSByZWFjaGFibGUgZHVyaW5nIHRoZSBmdXp6aW5nIHN0YWdlPyBJZiBpdCYjMzk7cyBhIHBhdGggdGhhdCBjYW4gYmUgZXhlcmNpc2VkIGR5bmFtaWNhbGx5LCB0aGVuIHdlIGhhdmUgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQgZm9yIHVuY292ZXJpbmcgbWVtb3J5IGFsbG9jYXRpb24gZmxhd3MuIFRoaXMgd291bGQgcmVxdWlyZSBzb21lIGludmVzdGlnYXRpb24gdG8gZGV0ZXJtaW5lIGl0cyBjYWxsaW5nIGNvbnRleHQgYW5kIHRyaWdnZXJpbmcgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDM6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19rbWFsbG9jX25vbG9ja19ub3Byb2YmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTUzNjc9RVhQT1JUX1NZTUJPTChfX2ttYWxsb2Nfbm9wcm9mKTtcbm1tL3NsdWIuYy01MzY4LVxubW0vc2x1Yi5jOjUzNjk6c3RhdGljIHZvaWQgKl9fa21hbGxvY19ub2xvY2tfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZ2ZwX2ZsYWdzLFxubW0vc2x1Yi5jLTUzNzAtXHRcdFx0XHQgICAgIGludCBub2RlLCBjb25zdCBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0ICphYylcbi0tXG5tbS9zbHViLmM9NTQ1ND12b2lkICpfa21hbGxvY19ub2xvY2tfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbm9kZSlcbi0tXG5tbS9zbHViLmMtNTQ2MS1cbm1tL3NsdWIuYzo1NDYyOlx0cmV0dXJuIF9fa21hbGxvY19ub2xvY2tfbm9wcm9mKFBBU1NfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSxcbm1tL3NsdWIuYy01NDYzLVx0XHRcdFx0ICAgICAgIGdmcF9mbGFncywgbm9kZSwgXHUwMDI2YWMpO1xuLS1cbm1tL3NsdWIuYz01NTIzPXZvaWQgKl9fa21hbGxvY19mbGFnc19ub3Byb2YoREVDTF9UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtNTUzNS1cdH0gZWxzZSB7XG5tbS9zbHViLmM6NTUzNjpcdFx0cmV0dXJuIF9fa21hbGxvY19ub2xvY2tfbm9wcm9mKFBBU1NfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSxcbm1tL3NsdWIuYy01NTM3LVx0XHRcdFx0XHQgICAgICAgZmxhZ3MsIG5vZGUsIFx1MDAyNmFjKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDM6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyMDQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQ6CgoqKkRpZ2dpbmcgaW50byBLZXJuZWwgTWVtb3J5IEFsbG9jYXRpb24gd2l0aCBGbGFncyBhbmQgUHJvZmlsZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBrZXJuZWwgbWVtb3J5IGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSB1c2luZyBga21hbGxvY2AuIEkgc2VlIHRoYXQgYF9fa21hbGxvY19mbGFnc19ub3Byb2ZgIGlzIGEgd3JhcHBlciBmdW5jdGlvbiB0aGF0IGNhbGxzIGBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAuIFRoZSAmIzM0O25vcHJvZiYjMzQ7IHN1ZmZpeCBwcm9iYWJseSBtZWFucyBpdCYjMzk7cyBkZXNpZ25lZCB0byBhdm9pZCBjZXJ0YWluIHByb2ZpbGluZyBvdmVyaGVhZCwgd2hpY2ggaXMgYSBrZXkgb3B0aW1pemF0aW9uIHRlY2huaXF1ZS4KClRoZSBzaWduaWZpY2FudCBwb2ludCBoZXJlIGlzIGxpa2VseSB3aGVyZSBgX19rbWFsbG9jX2ZsYWdzX25vcHJvZmAgaXMgZGVwbG95ZWQuIFRoZSBtZW50aW9uIG9mIEJQRiBhbmQgJiMzNDtvdGhlciBzcGVjaWZpYyBjb250ZXh0cyYjMzQ7IGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgaW50ZXJlc3RpbmcuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBgX19rbWFsbG9jX2ZsYWdzX25vcHJvZmAgaXMgY3J1Y2lhbCBpbiBzY2VuYXJpb3Mgd2hlcmUgbG93IG92ZXJoZWFkIGFuZCBsYXRlbmN5IGFyZSBwYXJhbW91bnQuIEJQRiwgaW4gcGFydGljdWxhciwgaXMgbm90b3Jpb3VzIGZvciBpdHMgc3RyaWN0IHBlcmZvcm1hbmNlIHJlcXVpcmVtZW50cywgc2luY2UgQlBGIHByb2dyYW1zIGRpcmVjdGx5IGludGVyYWN0IHdpdGggdGhlIGtlcm5lbCBpbiByZWFsIHRpbWUuIFdlIGFyZSB0YWxraW5nIGFib3V0IGNyaXRpY2FsIHBhdGggY29kZSBoZXJlLgoKSSYjMzk7ZCB3YW50IHRvIGNoZWNrIHdoaWNoIGZsYWdzIGFyZSBiZWluZyBwYXNzZWQgaW50byBgX19rbWFsbG9jX2ZsYWdzX25vcHJvZmAuIEl0JiMzOTtzIHBvc3NpYmxlIHRoYXQgdGhlc2UgYXJlIGBHRlBfTk9XQUlUYCwgYEdGUF9BVE9NSUNgLCBvciBwb3NzaWJseSBhIGN1c3RvbSBzZXQgb2YgZmxhZ3MuIFRoZSBpbnRlbnQgaGVyZSBpcyB0byBtaW5pbWl6ZSBsYXRlbmN5LCBieSBhdm9pZGluZyBibG9ja2luZy4gVGhlICYjMzk7bm9sb2NrJiMzOTsgcGFydCBvZiB0aGUgY2FsbCBzdWdnZXN0cyBpdCBkb2VzIG5vdCBuZWVkIHRvIGJsb2NrIG9uIGxvY2tzLiBHaXZlbiB0aGUgY29udGV4dHMgbGlzdGVkLCBJJiMzOTtkIGJldCB0aGVzZSBhbGxvY2F0aW9ucyBuZWVkIHRvIGJlIHN1cGVyIGZhc3QgYW5kIHBvdGVudGlhbGx5IG5vbi1ibG9ja2luZyB0byBhdm9pZCBkZWFkbG9ja3MuIFRoaXMgc291bmRzIHJpZ2h0LCBnaXZlbiB0aGUgY29udGV4dCBpbiB3aGljaCBpdCYjMzk7cyBiZWluZyB1c2VkLgoKVW5kZXJzdGFuZGluZyB0aGUgKndoeSogYmVoaW5kIHRoaXMgcGFydGljdWxhciBjaG9pY2Ugb2YgYWxsb2NhdGlvbiByb3V0aW5lIHdpbGwgYmUgY3JpdGljYWwuIEZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBpcyB3YXJyYW50ZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCB3aGVyZSBgX19rbWFsbG9jX2ZsYWdzX25vcHJvZmAgaXMgdXNlZCwgYW5kIGl0JiMzOTtzIHVzZSByZWxhdGl2ZSB0byBvdGhlciBhbGxvY2F0aW9uIHJvdXRpbmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ttYWxsb2NfZmxhZ3Nfbm9wcm9mJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsYWIuaD0yNj1zdGF0aWMgaW5saW5lIGJvb2wgYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoY29uc3QgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuLS1cbm1tL3NsYWIuaC0zMC1cbm1tL3NsYWIuaDozMTp2b2lkICpfX2ttYWxsb2NfZmxhZ3Nfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZmxhZ3MsXG5tbS9zbGFiLmgtMzItXHRcdFx0XHQgIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgaW50IG5vZGUpXG4tLVxubW0vc2xhYi5oPTM1PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19hbGxvY19zaXplKDEpIHZvaWQgKl9rbWFsbG9jX2ZsYWdzX25vcHJvZihzaXplX3Qgc2l6ZSxcbi0tXG5tbS9zbGFiLmgtMzcte1xubW0vc2xhYi5oOjM4Olx0cmV0dXJuIF9fa21hbGxvY19mbGFnc19ub3Byb2YoUEFTU19UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBmbGFncywgYWxsb2NfZmxhZ3MsIG5vZGUpO1xubW0vc2xhYi5oLTM5LX1cbi0tXG5tbS9zbHViLmM9NTUxNj1FWFBPUlRfU1lNQk9MKF9fa21hbGxvY19jYWNoZV9ub2RlX25vcHJvZik7XG4tLVxubW0vc2x1Yi5jLTU1MjItICovXG5tbS9zbHViLmM6NTUyMzp2b2lkICpfX2ttYWxsb2NfZmxhZ3Nfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZmxhZ3MsXG5tbS9zbHViLmMtNTUyNC1cdFx0XHQgICAgIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgaW50IG5vZGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAzOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MDA0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKlRyYWNpbmcgdGhlIFVzYWdlIG9mIGBfa21hbGxvY19mbGFnc19ub3Byb2ZgKioKCkFscmlnaHQsIHNvIHRoZSBxdWVzdGlvbiBpcywgd2hlcmUgZXhhY3RseSBpcyB0aGlzIGBfa21hbGxvY19mbGFnc19ub3Byb2ZgIHRoaW5nIGJlaW5nIHVzZWQ/IEl0JiMzOTtzIHRoYXQgc3VidGxlIGRldGFpbCB0aGF0IGxpa2VseSB0ZWxscyBhIHN0b3J5IGFib3V0IG9wdGltaXphdGlvbiwgb3IgcGVyaGFwcyBhIG5pY2hlIGNhc2Ugd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IGFsbG9jYXRpb24gc3lzdGVtLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC4gTGV0IG1lIHRoaW5rLi4uIGlzIGl0IGEgbWFjcm8/IEEgZnVuY3Rpb24/IEkmIzM5O2xsIHByb2JhYmx5IG5lZWQgdG8gY3JhY2sgb3BlbiB0aGUgY29kZSBhbmQgZG8gYSBmaW5kLWFsbCwgYnV0IHRoYXQmIzM5O3MganVzdCB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgY2FuJiMzOTt0IGp1c3QgbG9vayBmb3IgaXQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIGl0JiMzOTtzIGJlaW5nIHVzZWQgdGhlcmUuIFdoYXQgc3BlY2lmaWMgZmxhZ3Mgb3IgYWxsb2NhdGlvbnMgaXMgaXQgYXZvaWRpbmc/IElzIGl0IHJlbGF0ZWQgdG8gcGVyZm9ybWFuY2UsIHRvIGEgcGFydGljdWxhciBzdWJzeXN0ZW0sIG9yIHBlcmhhcHMgYSBsb3ctbGF0ZW5jeSByZXF1aXJlbWVudD8gSXMgdGhlcmUgc29tZSBwYXJ0IG9mIHRoZSBrZXJuZWwgd2hpY2ggbmVlZHMga21hbGxvYyB3aXRoIGEgZGlmZmVyZW50IHByb2ZpbGU/IEhhcyBpdCBiZWVuIHJlbW92ZWQgaW4gbGF0ZXIga2VybmVscz8gUGVyaGFwcyB0aGlzIGlzIGEgaGlzdG9yaWNhbCBhcnRpZmFjdC4gV2FzIGl0IGV2ZW4gZXZlciB1c2VkPyBXaGF0IGRlcGVuZGVuY2llcyBkb2VzIGl0IGhhdmU/IEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBjYWxsIHNpdGVzLCBjcm9zcy1yZWZlcmVuY2VzLCBhbmQgdWx0aW1hdGVseSwgZm9sbG93IHRoZSBleGVjdXRpb24gZmxvdyB0byBmb3JtIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUgaW4gY29udGV4dC4gVGhhdCBpcyB0aGUgb25seSB0aGluZyB0aGF0IG1hdHRlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAzOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19rbWFsbG9jX2ZsYWdzX25vcHJvZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbGFiLmg9MjY9c3RhdGljIGlubGluZSBib29sIGFsbG9jX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGNvbnN0IHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9zbGFiLmgtMzAtXG5tbS9zbGFiLmg6MzE6dm9pZCAqX19rbWFsbG9jX2ZsYWdzX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGZsYWdzLFxubW0vc2xhYi5oLTMyLVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGludCBub2RlKVxuLS1cbm1tL3NsYWIuaC0zNC1cbm1tL3NsYWIuaDozNTpzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fYWxsb2Nfc2l6ZSgxKSB2b2lkICpfa21hbGxvY19mbGFnc19ub3Byb2Yoc2l6ZV90IHNpemUsXG5tbS9zbGFiLmgtMzYtXHRcdGdmcF90IGZsYWdzLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGludCBub2RlLCBrbWFsbG9jX3Rva2VuX3QgdG9rZW4pXG5tbS9zbGFiLmgtMzcte1xubW0vc2xhYi5oOjM4Olx0cmV0dXJuIF9fa21hbGxvY19mbGFnc19ub3Byb2YoUEFTU19UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBmbGFncywgYWxsb2NfZmxhZ3MsIG5vZGUpO1xubW0vc2xhYi5oLTM5LX1cbm1tL3NsYWIuaDo0MDojZGVmaW5lIGttYWxsb2NfZmxhZ3Nfbm9wcm9mKC4uLilcdF9rbWFsbG9jX2ZsYWdzX25vcHJvZihfX1ZBX0FSR1NfXywgX19rbWFsbG9jX3Rva2VuKF9fVkFfQVJHU19fKSlcbm1tL3NsYWIuaC00MS0jZGVmaW5lIGttYWxsb2NfZmxhZ3MoLi4uKVx0XHRhbGxvY19ob29rcyhrbWFsbG9jX2ZsYWdzX25vcHJvZihfX1ZBX0FSR1NfXykpXG4tLVxubW0vc2x1Yi5jPTU1MTY9RVhQT1JUX1NZTUJPTChfX2ttYWxsb2NfY2FjaGVfbm9kZV9ub3Byb2YpO1xuLS1cbm1tL3NsdWIuYy01NTIyLSAqL1xubW0vc2x1Yi5jOjU1MjM6dm9pZCAqX19rbWFsbG9jX2ZsYWdzX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGZsYWdzLFxubW0vc2x1Yi5jLTU1MjQtXHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGludCBub2RlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTc1NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqVHJhY2luZyBga21hbGxvY19mbGFnc2AgVXNhZ2UqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMsICYjMzQ7V2hlcmUgZXhhY3RseSBkb2VzIGBrbWFsbG9jX2ZsYWdzYCBjb21lIGludG8gcGxheSBpbiB0aGUga2VybmVsPyYjMzQ7IEl0JiMzOTtzIGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGEgcGFydGljdWxhciBmbGFnIGlzIGltcGxlbWVudGVkLCBob3cgdGhlIGtlcm5lbCBpcyBhY3RpbmcsIGFuZCB3aGV0aGVyIEkgY2FuIHJlbHkgb24gYSBnaXZlbiBhc3N1bXB0aW9uIGFib3V0IGl0LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUsIHRoZSBjb250ZXh0LiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gZGlnIHRocm91Z2ggc29tZSBvZiB0aGUga2VybmVsIHNvdXJjZSB0byBzZWUgd2hpY2ggZnVuY3Rpb25zLCB3aGljaCBzdWJzeXN0ZW1zLCBldmVuIHdoaWNoIGRyaXZlcnMsIGFyZSBtYWtpbmcgdXNlIG9mIHRoaXMuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcXVlc3Rpb24gLSBJIG5lZWQgdG8ga25vdyB0aGUgbGFuZHNjYXBlIGJlZm9yZSBJIGNhbiBldmFsdWF0ZSBhIHBhcnRpY3VsYXIgdXNlIGNhc2UuIExldCYjMzk7cyBzdGFydCB0aGUgc2VhcmNoLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAzOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttYWxsb2NfZmxhZ3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmM9MTY4PXN0cnVjdCB1c2JfcmVxdWVzdCAqXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYzoxNjk6Z3NfYWxsb2NfcmVxKHN0cnVjdCB1c2JfZXAgKmVwLCB1bnNpZ25lZCBsZW4sIGdmcF90IGttYWxsb2NfZmxhZ3MpXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYy0xNzAte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jLTE3Mi1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jOjE3MzpcdHJlcSA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0KGVwLCBrbWFsbG9jX2ZsYWdzKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jLTE3NC1cbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYy0xNzYtXHRcdHJlcS1cdTAwM2VsZW5ndGggPSBsZW47XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYzoxNzc6XHRcdHJlcS1cdTAwM2VidWYgPSBrbWFsbG9jKGxlbiwga21hbGxvY19mbGFncyk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYy0xNzgtXHRcdGlmIChyZXEtXHUwMDNlYnVmID09IE5VTEwpIHtcbi0tXG5tbS9zbGFiLmg9MjY9c3RhdGljIGlubGluZSBib29sIGFsbG9jX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGNvbnN0IHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9zbGFiLmgtMzAtXG5tbS9zbGFiLmg6MzE6dm9pZCAqX19rbWFsbG9jX2ZsYWdzX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGZsYWdzLFxubW0vc2xhYi5oLTMyLVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGludCBub2RlKVxuLS1cbm1tL3NsYWIuaC0zNC1cbm1tL3NsYWIuaDozNTpzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fYWxsb2Nfc2l6ZSgxKSB2b2lkICpfa21hbGxvY19mbGFnc19ub3Byb2Yoc2l6ZV90IHNpemUsXG5tbS9zbGFiLmgtMzYtXHRcdGdmcF90IGZsYWdzLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGludCBub2RlLCBrbWFsbG9jX3Rva2VuX3QgdG9rZW4pXG5tbS9zbGFiLmgtMzcte1xubW0vc2xhYi5oOjM4Olx0cmV0dXJuIF9fa21hbGxvY19mbGFnc19ub3Byb2YoUEFTU19UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBmbGFncywgYWxsb2NfZmxhZ3MsIG5vZGUpO1xubW0vc2xhYi5oLTM5LX1cbm1tL3NsYWIuaDo0MDojZGVmaW5lIGttYWxsb2NfZmxhZ3Nfbm9wcm9mKC4uLilcdF9rbWFsbG9jX2ZsYWdzX25vcHJvZihfX1ZBX0FSR1NfXywgX19rbWFsbG9jX3Rva2VuKF9fVkFfQVJHU19fKSlcbm1tL3NsYWIuaDo0MTojZGVmaW5lIGttYWxsb2NfZmxhZ3MoLi4uKVx0XHRhbGxvY19ob29rcyhrbWFsbG9jX2ZsYWdzX25vcHJvZihfX1ZBX0FSR1NfXykpXG5tbS9zbGFiLmgtNDItXG4tLVxubW0vc2x1Yi5jPTIxNjM9aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy0yMTgxLVx0LyogVGhpcyB3aWxsIHVzZSBrbWFsbG9jX25vbG9jaygpIGlmIGFsbG9jX2ZsYWdzIHNheSBzbyAqL1xubW0vc2x1Yi5jOjIxODI6XHR2ZWMgPSBrbWFsbG9jX2ZsYWdzKHN6LCBnZnAgfCBfX0dGUF9aRVJPLCBhbGxvY19mbGFncywgc2xhYl9uaWQoc2xhYikpO1xubW0vc2x1Yi5jLTIxODMtXG4tLVxubW0vc2x1Yi5jPTI3NjU9c3RhdGljIHN0cnVjdCBzbGFiX3NoZWFmICpfX2FsbG9jX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXG4tLVxubW0vc2x1Yi5jLTI3NzktXHRzaGVhZl9zaXplID0gc3RydWN0X3NpemUoc2hlYWYsIG9iamVjdHMsIGNhcGFjaXR5KTtcbm1tL3NsdWIuYzoyNzgwOlx0c2hlYWYgPSBrbWFsbG9jX2ZsYWdzKHNoZWFmX3NpemUsIGdmcCB8IF9fR0ZQX1pFUk8sIGFsbG9jX2ZsYWdzLCBOVU1BX05PX05PREUpO1xubW0vc2x1Yi5jLTI3ODEtXG4tLVxubW0vc2x1Yi5jPTU1MTY9RVhQT1JUX1NZTUJPTChfX2ttYWxsb2NfY2FjaGVfbm9kZV9ub3Byb2YpO1xuLS1cbm1tL3NsdWIuYy01NTIyLSAqL1xubW0vc2x1Yi5jOjU1MjM6dm9pZCAqX19rbWFsbG9jX2ZsYWdzX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGZsYWdzLFxubW0vc2x1Yi5jLTU1MjQtXHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGludCBub2RlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjk0MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEludmVzdGlnYXRpb24gaW50byBNZW1vcnkgQWxsb2NhdGlvbiBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gbWVtb3J5IGFsbG9jYXRpb24gd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBJIHNlZSB0aGF0IGBrbWFsbG9jX2ZsYWdzYCBpcyB1dGlsaXplZCB3aXRoaW4gYG1tL3NsdWIuY2Agc3BlY2lmaWNhbGx5IGJ5IGBhbGxvY19zbGFiX29ial9leHRzYCBhbmQgYF9fYWxsb2NfZW1wdHlfc2hlYWZgLiBUaGUgZm9ybWVyLCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AsIGRlYWxzIHdpdGggYWxsb2NhdGluZyBvYmplY3QgZXh0ZW5zaW9ucyBmb3Igc2xhYiBvYmplY3RzLCB3aGljaCBzZWVtcyBsaWtlIGEgcmVhY2hhYmxlIGFuZCBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBhcmVhIHRvIGV4cGxvcmUuIEkmIzM5O2xsIG1ha2UgYSBtZW50YWwgbm90ZSBvZiB0aGF0LgoKTmV4dCwgSSBzdGFydGVkIGxvb2tpbmcgYXQgYGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mYCBhbmQgYGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mYCwgYW5kIGl0IGltbWVkaWF0ZWx5IHN0cmlrZXMgbWUgdGhhdCBgYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2ZgIGlzIGV4dHJlbWVseSBjb21tb24uIEFoLCB5ZXMsIGBhbGxvY19wYWdlc19ub2RlYCBpcyBhIG1hY3JvIHRoYXQgY2FsbHMgYGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mYCwgYW5kIGl0JiMzOTtzIHByYWN0aWNhbGx5IHViaXF1aXRvdXMgaW4gdGhlIGNvZGUuIERpcmVjdGx5IGZ1enppbmcgc29tZXRoaW5nIHRoYXQgZnVuZGFtZW50YWwgd291bGQgbGlrZWx5IGJlIHRvbyBicm9hZCB0byBiZSBlZmZlY3RpdmUgYXQgdGhpcyBzdGFnZS4KCkJ1dCB3aGF0IGFib3V0IGBhbGxvY19mcm96ZW5fcGFnZXNfbm9sb2NrX25vcHJvZmA/IElzIHRoYXQgYW5vdGhlciBjYW5kaWRhdGU/IExldCBtZSBjaGVjayBxdWlja2x5IGlmIGl0JiMzOTtzIGFuIGV4cG9ydGVkIHN5bWJvbC4gSG1tLCBubywgaXQmIzM5O3Mgbm90IGV4cG9ydGVkLiBJdCBhcHBlYXJzIHRvIGJlIHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2AgYW5kIGFsc28gd2l0aGluIGBtbS9zbHViLmNgLiBBaCwgdGhlcmUmIzM5O3MgYGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tgIHdoaWNoIGlzIGEgbWFjcm8gdGhhdCBjYWxscyBgYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9ja19ub3Byb2ZgLiBJJiMzOTtsbCBoYXZlIHRvIGludmVzdGlnYXRlIHRoYXQgdG8gc2VlIGlmIGl0JiMzOTtzIGV4cG9ydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzU5MwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDQ4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhZ2UgQWxsb2NhdG9yIEFQSSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIG9uIHRoZSBwYWdlIGFsbG9jYXRvci4gRmlyc3QgdGhpbmdzIGZpcnN0OiBpcyB0aGlzIGZ1bmN0aW9uYWxpdHkgZXZlbiAqYWNjZXNzaWJsZSogZnJvbSBvdXRzaWRlIHRoZSBrZXJuZWw/IExldCYjMzk7cyBjaGVjayB3aGljaCBzeW1ib2xzIGFyZSBleHBvcnRlZC4gSG1tLCBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgIGlzbiYjMzk7dC4gQnV0LCBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCwgYF9fYWxsb2NfcGFnZXNfbm9wcm9mYCwgYW5kIGBhbGxvY19wYWdlc19ub2RlX25vcHJvZmAgYXJlLiBFeGNlbGxlbnQsIHRoZXkmIzM5O3JlIGV4cG9ydGVkLiBTaW5jZSB0aGUgcGF0Y2ggdG91Y2hlcyB0aGUgY29yZSBhbGxvY2F0b3IsIHRoZXNlIGNoYW5nZXMgYXJlIGRlZmluaXRlbHkgaW1wYWN0ZnVsIGFuZCAqcmVhY2hhYmxlKiBjb2RlLgoKVGhlIHBhdGNoIGludHJvZHVjZXMgYGFsbG9jX2ZsYWdzYCB0byBgX19hbGxvY19wYWdlc19ub3Byb2ZgIGFuZCBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCwgYW5kIGFkZHMgYEFMTE9DX05PTE9DS2AgYW5kIGBBTExPQ19OT19DT0RFVEFHYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgaXMsIHNvIEkgbmVlZCB0byBob25lIGluIG9uIGZ1bmN0aW9ucyB0aGF0ICp1c2UqIHRoZXNlIG5ldyBmbGFncy4gSSBzZWUgYGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mYCB1c2VzIGBBTExPQ19OT0xPQ0tgLCB3aGlsZSBgX19hbGxvY190YWdfYWRkX2Vhcmx5X3BmbmAgdXNlcyBgQUxMT0NfTk9fQ09ERVRBR2AuIEFsc28gYGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mYCwgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCwgYW5kIGBfX2ZvbGlvX2FsbG9jX25vcHJvZmAgdXNlIGBBTExPQ19ERUZBVUxUYC4KCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBhbGxvY19mcm96ZW5fcGFnZXNfbm9sb2NrX25vcHJvZmAuIEl0IGxvb2tzIGxpa2UgYSBwcmltZSBmdXp6aW5nIHRhcmdldC4gSXQmIzM5O3MgYSBzcGVjaWZpYyBBUEkgdGhhdCB1c2VzIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgIHdpdGggYEFMTE9DX05PTE9DS2AsIGFuZCB0aGUgcGF0Y2ggY2hhbmdlZCBpdC4gV2FpdCBhIG1pbnV0ZS4uLiBpdCYjMzk7cyAqbm90KiBleHBvcnRlZCwgbWVhbmluZyBpdCBjYW4mIzM5O3QgYmUgY2FsbGVkIGRpcmVjdGx5IGZyb20ga2VybmVsIG1vZHVsZXMuIEJ1dCwgaXQgY291bGQgc3RpbGwgYmUgcmVhY2hlZCB2aWEgYGttYWxsb2NgIHdpdGggYEFMTE9DX05PTE9DS2Agb3IgdmlhIGBhbGxvY19zbGFiX3BhZ2VgIHdoZW4gYGFsbG93X3NwaW5gIGlzIGZhbHNlLiBJbnRlcmVzdGluZyEgU28sIGBhbGxvY19zbGFiX3BhZ2VgIHVzZXMgYGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tgIHdoZW4gYGFsbG93X3NwaW5gIGlzIGZhbHNlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FzZXMgd2hlcmUgYGFsbG93X3NwaW5gIGlzIGZhbHNlLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gcmVhY2hpbmcgdGhpcyBjb2RlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAzOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG93X3NwaW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9nZnAuaD0yMD1zdGF0aWMgaW5saW5lIGJvb2wgZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoY29uc3QgZ2ZwX3QgZ2ZwX2ZsYWdzKVxuLS1cbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQtXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjI1OnN0YXRpYyBpbmxpbmUgYm9vbCBnZnBmbGFnc19hbGxvd19zcGlubmluZyhjb25zdCBnZnBfdCBnZnBfZmxhZ3MpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTI2LXtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD05ODA9dm9pZCBfX21lbWNnX21lbW9yeV9ldmVudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo5ODE6XHRcdFx0ICBlbnVtIG1lbWNnX21lbW9yeV9ldmVudCBldmVudCwgYm9vbCBhbGxvd19zcGlubmluZyk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05ODItXG4tLVxua2VybmVsL3ByaW50ay9wcmludGsuYz0zMDI3PWJvb2wgcHJpbnRrX2dldF9uZXh0X21lc3NhZ2Uoc3RydWN0IHByaW50a19tZXNzYWdlICpwbXNnLCB1NjQgc2VxLFxuLS1cbmtlcm5lbC9wcmludGsvcHJpbnRrLmMtMzA4Ny0jaWZkZWYgQ09ORklHX1BSRUVNUFRfUlRcbmtlcm5lbC9wcmludGsvcHJpbnRrLmM6MzA4ODpzdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRrX2xlZ2FjeV9hbGxvd19zcGlubG9ja19lbnRlcih2b2lkKSB7IH1cbmtlcm5lbC9wcmludGsvcHJpbnRrLmM6MzA4OTpzdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRrX2xlZ2FjeV9hbGxvd19zcGlubG9ja19leGl0KHZvaWQpIHsgfVxua2VybmVsL3ByaW50ay9wcmludGsuYy0zMDkwLSNlbHNlXG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jPTMwOTE9c3RhdGljIERFRklORV9XQUlUX09WRVJSSURFX01BUChwcmludGtfbGVnYWN5X21hcCwgTERfV0FJVF9DT05GSUcpO1xua2VybmVsL3ByaW50ay9wcmludGsuYy0zMDkyLVxua2VybmVsL3ByaW50ay9wcmludGsuYzozMDkzOnN0YXRpYyBpbmxpbmUgdm9pZCBwcmludGtfbGVnYWN5X2FsbG93X3NwaW5sb2NrX2VudGVyKHZvaWQpXG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jLTMwOTQte1xuLS1cbmtlcm5lbC9wcmludGsvcHJpbnRrLmMtMzA5Ny1cbmtlcm5lbC9wcmludGsvcHJpbnRrLmM6MzA5ODpzdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRrX2xlZ2FjeV9hbGxvd19zcGlubG9ja19leGl0KHZvaWQpXG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jLTMwOTkte1xuLS1cbmtlcm5lbC9wcmludGsvcHJpbnRrLmM9MzEyNj1zdGF0aWMgYm9vbCBjb25zb2xlX2VtaXRfbmV4dF9yZWNvcmQoc3RydWN0IGNvbnNvbGUgKmNvbiwgYm9vbCAqaGFuZG92ZXIsIGludCBjb29raWUpXG4tLVxua2VybmVsL3ByaW50ay9wcmludGsuYy0zMTgxLVxua2VybmVsL3ByaW50ay9wcmludGsuYzozMTgyOlx0XHRwcmludGtfbGVnYWN5X2FsbG93X3NwaW5sb2NrX2VudGVyKCk7XG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jLTMxODMtXHRcdGNvbi1cdTAwM2V3cml0ZShjb24sIG91dGJ1ZiwgcG1zZy5vdXRidWZfbGVuKTtcbmtlcm5lbC9wcmludGsvcHJpbnRrLmM6MzE4NDpcdFx0cHJpbnRrX2xlZ2FjeV9hbGxvd19zcGlubG9ja19leGl0KCk7XG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jLTMxODUtXG4tLVxubGliL3N0YWNrZGVwb3QuYz02NDE9ZGVwb3Rfc3RhY2tfaGFuZGxlX3Qgc3RhY2tfZGVwb3Rfc2F2ZV9mbGFncyh1bnNpZ25lZCBsb25nICplbnRyaWVzLFxuLS1cbmxpYi9zdGFja2RlcG90LmMtNjUwLVx0dm9pZCAqcHJlYWxsb2MgPSBOVUxMO1xubGliL3N0YWNrZGVwb3QuYzo2NTE6XHRib29sIGFsbG93X3NwaW4gPSBnZnBmbGFnc19hbGxvd19zcGlubmluZyhhbGxvY19mbGFncyk7XG5saWIvc3RhY2tkZXBvdC5jOjY1MjpcdGJvb2wgY2FuX2FsbG9jID0gKGRlcG90X2ZsYWdzIFx1MDAyNiBTVEFDS19ERVBPVF9GTEFHX0NBTl9BTExPQykgXHUwMDI2XHUwMDI2IGFsbG93X3NwaW47XG5saWIvc3RhY2tkZXBvdC5jLTY1My1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tLVxubGliL3N0YWNrZGVwb3QuYy02OTAtXG5saWIvc3RhY2tkZXBvdC5jOjY5MTpcdGlmIChpbl9ubWkoKSB8fCAhYWxsb3dfc3Bpbikge1xubGliL3N0YWNrZGVwb3QuYy02OTItXHRcdC8qIFdlIGNhbiBuZXZlciBhbGxvY2F0ZSBpbiBOTUkgY29udGV4dC4gKi9cbi0tXG5saWIvc3RhY2tkZXBvdC5jLTczMS1cdFx0LyogU3RhY2sgZGVwb3QgZGlkbiYjMzk7dCB1c2UgdGhpcyBtZW1vcnksIGZyZWUgaXQuICovXG5saWIvc3RhY2tkZXBvdC5jOjczMjpcdFx0aWYgKCFhbGxvd19zcGluKVxubGliL3N0YWNrZGVwb3QuYy03MzMtXHRcdFx0ZnJlZV9wYWdlc19ub2xvY2sodmlydF90b19wYWdlKHByZWFsbG9jKSwgREVQT1RfUE9PTF9PUkRFUik7XG4tLVxubW0vbWVtY29udHJvbC5jPTE4NTQ9dm9pZCBfX21lbWNnX21lbW9yeV9ldmVudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9tZW1jb250cm9sLmM6MTg1NTpcdFx0XHQgIGVudW0gbWVtY2dfbWVtb3J5X2V2ZW50IGV2ZW50LCBib29sIGFsbG93X3NwaW5uaW5nKVxubW0vbWVtY29udHJvbC5jLTE4NTYte1xuLS1cbm1tL21lbWNvbnRyb2wuYy0xODU5LVxubW0vbWVtY29udHJvbC5jOjE4NjA6XHQvKiBGb3Igbm93IG9ubHkgTUVNQ0dfTUFYIGNhbiBoYXBwZW4gd2l0aCAhYWxsb3dfc3Bpbm5pbmcgY29udGV4dC4gKi9cbm1tL21lbWNvbnRyb2wuYzoxODYxOlx0Vk1fV0FSTl9PTl9PTkNFKCFhbGxvd19zcGlubmluZyBcdTAwMjZcdTAwMjYgZXZlbnQgIT0gTUVNQ0dfTUFYKTtcbm1tL21lbWNvbnRyb2wuYy0xODYyLVxubW0vbWVtY29udHJvbC5jLTE4NjMtXHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X2V2ZW50c19sb2NhbFtldmVudF0pO1xubW0vbWVtY29udHJvbC5jOjE4NjQ6XHRpZiAoIXN3YXBfZXZlbnQgXHUwMDI2XHUwMDI2IGFsbG93X3NwaW5uaW5nKVxubW0vbWVtY29udHJvbC5jLTE4NjUtXHRcdGNncm91cF9maWxlX25vdGlmeShcdTAwMjZtZW1jZy1cdTAwM2VldmVudHNfbG9jYWxfZmlsZSk7XG4tLVxubW0vbWVtY29udHJvbC5jLTE4NjgtXHRcdGF0b21pY19sb25nX2luYyhcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnlfZXZlbnRzW2V2ZW50XSk7XG5tbS9tZW1jb250cm9sLmM6MTg2OTpcdFx0aWYgKGFsbG93X3NwaW5uaW5nKSB7XG5tbS9tZW1jb250cm9sLmMtMTg3MC1cdFx0XHRpZiAoc3dhcF9ldmVudClcbi0tXG5tbS9tZW1jb250cm9sLmM9MjU5NT1zdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjYwNy1cdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xubW0vbWVtY29udHJvbC5jOjI2MDg6XHRib29sIGFsbG93X3NwaW5uaW5nID0gZ2ZwZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoZ2ZwX21hc2spO1xubW0vbWVtY29udHJvbC5jLTI2MDktXG4tLVxubW0vbWVtY29udHJvbC5jLTI2MTMtXG5tbS9tZW1jb250cm9sLmM6MjYxNDpcdGlmICghYWxsb3dfc3Bpbm5pbmcpXG5tbS9tZW1jb250cm9sLmMtMjYxNS1cdFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXG4tLVxubW0vbWVtY29udHJvbC5jLTI2NTAtXG5tbS9tZW1jb250cm9sLmM6MjY1MTpcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcbm1tL21lbWNvbnRyb2wuYy0yNjUyLVx0cmFpc2VkX21heF9ldmVudCA9IHRydWU7XG4tLVxubW0vbWVtY29udHJvbC5jLTI3MTctXHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpXG5tbS9tZW1jb250cm9sLmM6MjcxODpcdFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xubW0vbWVtY29udHJvbC5jLTI3MTktXG4tLVxubW0vcGFnZV9hbGxvYy5jPTUyOTE9c3RhdGljIGlubGluZSBib29sIGFsbG9jX3RyeWxvY2tfYWxsb3dlZCh2b2lkKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MzI0LSAqXG5tbS9wYWdlX2FsbG9jLmM6NTMyNTogKiBUaGVzZSB0d28gYXJlIHRoZSBjb25kaXRpb25zIGZvciBnZnBmbGFnc19hbGxvd19zcGlubmluZygpIGJlaW5nIHRydWUuXG5tbS9wYWdlX2FsbG9jLmMtNTMyNi0gKlxuLS1cbm1tL3BhZ2Vfb3duZXIuYz0xOTM9c3RhdGljIHZvaWQgYWRkX3N0YWNrX3JlY29yZF90b19saXN0KHN0cnVjdCBzdGFja19yZWNvcmQgKnN0YWNrX3JlY29yZCxcbi0tXG5tbS9wYWdlX293bmVyLmMtMTk4LVxubW0vcGFnZV9vd25lci5jOjE5OTpcdGlmICghZ2ZwZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoZ2ZwX21hc2spKVxubW0vcGFnZV9vd25lci5jLTIwMC1cdFx0cmV0dXJuO1xuLS1cbm1tL3BhZ2Vfb3duZXIuYz0zMTc9dm9pZCBfX3Jlc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIHNob3J0IG9yZGVyKVxuLS1cbm1tL3BhZ2Vfb3duZXIuYy0zMzMtXHQvKlxubW0vcGFnZV9vd25lci5jOjMzNDpcdCAqIERvIG5vdCBzcGVjaWZ5IEdGUF9OT1dBSVQgdG8gbWFrZSBnZnBmbGFnc19hbGxvd19zcGlubmluZygpID09IGZhbHNlXG5tbS9wYWdlX293bmVyLmMtMzM1LVx0ICogdG8gcHJldmVudCBpc3N1ZXMgaW4gc3RhY2tfZGVwb3Rfc2F2ZSgpLlxuLS1cbm1tL3NsYWIuaC0yNS1cbm1tL3NsYWIuaDoyNjpzdGF0aWMgaW5saW5lIGJvb2wgYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoY29uc3QgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxubW0vc2xhYi5oLTI3LXtcbi0tXG5tbS9zbHViLmM9MjE2Mz1pbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTIxNjUte1xubW0vc2x1Yi5jOjIxNjY6XHRjb25zdCBib29sIGFsbG93X3NwaW4gPSBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhbGxvY19mbGFncyk7XG5tbS9zbHViLmMtMjE2Ny1cdHVuc2lnbmVkIGludCBvYmplY3RzID0gb2Jqc19wZXJfc2xhYihzLCBzbGFiKTtcbi0tXG5tbS9zbHViLmMtMjIyMS1cdFx0bWFya19vYmpfY29kZXRhZ19lbXB0eSh2ZWMpO1xubW0vc2x1Yi5jOjIyMjI6XHRcdGlmICh1bmxpa2VseSghYWxsb3dfc3BpbikpXG5tbS9zbHViLmMtMjIyMy1cdFx0XHRrZnJlZV9ub2xvY2sodmVjKTtcbi0tXG5tbS9zbHViLmMtMjIzMS1cbm1tL3NsdWIuYzoyMjMyOlx0aWYgKGFsbG93X3NwaW4pXG5tbS9zbHViLmMtMjIzMy1cdFx0a21lbWxlYWtfbm90X2xlYWsodmVjKTtcbi0tXG5tbS9zbHViLmMtMjIzNi1cbm1tL3NsdWIuYzoyMjM3OnN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgYWxsb3dfc3Bpbilcbm1tL3NsdWIuYy0yMjM4LXtcbi0tXG5tbS9zbHViLmMtMjI2NC1cdG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkob2JqX2V4dHMpO1xubW0vc2x1Yi5jOjIyNjU6XHRpZiAoYWxsb3dfc3Bpbilcbm1tL3NsdWIuYy0yMjY2LVx0XHRrZnJlZShvYmpfZXh0cyk7XG4tLVxubW0vc2x1Yi5jPTIzMzI9c3RhdGljIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtMjMzNy1cbm1tL3NsdWIuYzoyMzM4OnN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgYWxsb3dfc3Bpbilcbm1tL3NsdWIuYy0yMzM5LXtcbi0tXG5tbS9zbHViLmM9MzA4OT1zdGF0aWMgc3RydWN0IHNsYWJfc2hlYWYgKmJhcm5fZ2V0X2VtcHR5X3NoZWFmKHN0cnVjdCBub2RlX2Jhcm4gKmJhcm4sXG5tbS9zbHViLmM6MzA5MDpcdFx0XHRcdFx0ICAgICAgIGJvb2wgYWxsb3dfc3Bpbilcbm1tL3NsdWIuYy0zMDkxLXtcbi0tXG5tbS9zbHViLmMtMzA5Ny1cbm1tL3NsdWIuYzozMDk4Olx0aWYgKGxpa2VseShhbGxvd19zcGluKSlcbm1tL3NsdWIuYy0zMDk5LVx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZiYXJuLVx1MDAzZWxvY2ssIGZsYWdzKTtcbi0tXG5tbS9zbHViLmM9MzE3OD1iYXJuX3JlcGxhY2VfZW1wdHlfc2hlYWYoc3RydWN0IG5vZGVfYmFybiAqYmFybiwgc3RydWN0IHNsYWJfc2hlYWYgKmVtcHR5LFxubW0vc2x1Yi5jOjMxNzk6XHRcdFx0IGJvb2wgYWxsb3dfc3Bpbilcbm1tL3NsdWIuYy0zMTgwLXtcbi0tXG5tbS9zbHViLmMtMzE4Ni1cbm1tL3NsdWIuYzozMTg3Olx0aWYgKGxpa2VseShhbGxvd19zcGluKSlcbm1tL3NsdWIuYy0zMTg4LVx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZiYXJuLVx1MDAzZWxvY2ssIGZsYWdzKTtcbi0tXG5tbS9zbHViLmM9MzIxMT1iYXJuX3JlcGxhY2VfZnVsbF9zaGVhZihzdHJ1Y3Qgbm9kZV9iYXJuICpiYXJuLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqZnVsbCxcbm1tL3NsdWIuYzozMjEyOlx0XHRcdGJvb2wgYWxsb3dfc3Bpbilcbm1tL3NsdWIuYy0zMjEzLXtcbi0tXG5tbS9zbHViLmMtMzIyMi1cbm1tL3NsdWIuYzozMjIzOlx0aWYgKGxpa2VseShhbGxvd19zcGluKSlcbm1tL3NsdWIuYy0zMjI0LVx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZiYXJuLVx1MDAzZWxvY2ssIGZsYWdzKTtcbi0tXG5tbS9zbHViLmM9MzI4MT1zdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFiICphbGxvY19zbGFiX3BhZ2UoZ2ZwX3QgZmxhZ3MsIGludCBub2RlLFxubW0vc2x1Yi5jLTMyODItXHRcdFx0XHRcdCAgIHN0cnVjdCBrbWVtX2NhY2hlX29yZGVyX29iamVjdHMgb28sXG5tbS9zbHViLmM6MzI4MzpcdFx0XHRcdFx0ICAgYm9vbCBhbGxvd19zcGluKVxubW0vc2x1Yi5jLTMyODQte1xuLS1cbm1tL3NsdWIuYy0zMjg4LVxubW0vc2x1Yi5jOjMyODk6XHRpZiAodW5saWtlbHkoIWFsbG93X3NwaW4pKVxubW0vc2x1Yi5jLTMyOTAtXHRcdHBhZ2UgPSBhbGxvY19mcm96ZW5fcGFnZXNfbm9sb2NrKDAvKiBfX0dGUF9DT01QIGlzIGltcGxpZWQgKi8sXG4tLVxubW0vc2x1Yi5jPTMzNzQ9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHVuYWNjb3VudF9zbGFiKHN0cnVjdCBzbGFiICpzbGFiLCBpbnQgb3JkZXIsXG5tbS9zbHViLmM6MzM3NTpcdFx0XHRcdFx0ICAgc3RydWN0IGttZW1fY2FjaGUgKnMsIGJvb2wgYWxsb3dfc3Bpbilcbm1tL3NsdWIuYy0zMzc2LXtcbi0tXG5tbS9zbHViLmMtMzM4MS1cdCAqL1xubW0vc2x1Yi5jOjMzODI6XHRmcmVlX3NsYWJfb2JqX2V4dHMoc2xhYiwgYWxsb3dfc3Bpbik7XG5tbS9zbHViLmMtMzM4My1cbi0tXG5tbS9zbHViLmM9MzM4OT1zdGF0aWMgc3RydWN0IHNsYWIgKmFsbG9jYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuLS1cbm1tL3NsdWIuYy0zMzkxLXtcbm1tL3NsdWIuYzozMzkyOlx0Ym9vbCBhbGxvd19zcGluID0gYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWxsb2NfZmxhZ3MpO1xubW0vc2x1Yi5jLTMzOTMtXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcbi0tXG5tbS9zbHViLmMtMzQwOS1cbm1tL3NsdWIuYzozNDEwOlx0c2xhYiA9IGFsbG9jX3NsYWJfcGFnZShhbGxvY19nZnAsIG5vZGUsIG9vLCBhbGxvd19zcGluKTtcbm1tL3NsdWIuYy0zNDExLVx0aWYgKHVubGlrZWx5KCFzbGFiKSkge1xuLS1cbm1tL3NsdWIuYy0zNDE3LVx0XHQgKi9cbm1tL3NsdWIuYzozNDE4Olx0XHRzbGFiID0gYWxsb2Nfc2xhYl9wYWdlKGFsbG9jX2dmcCwgbm9kZSwgb28sIGFsbG93X3NwaW4pO1xubW0vc2x1Yi5jLTM0MTktXHRcdGlmICh1bmxpa2VseSghc2xhYikpXG4tLVxubW0vc2x1Yi5jPTM0NDY9c3RhdGljIHN0cnVjdCBzbGFiICpuZXdfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXG4tLVxubW0vc2x1Yi5jLTM0NTgtXG5tbS9zbHViLmM6MzQ1OTpzdGF0aWMgdm9pZCBfX2ZyZWVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgYWxsb3dfc3Bpbilcbm1tL3NsdWIuYy0zNDYwLXtcbi0tXG5tbS9zbHViLmMtMzQ2OC1cdG1tX2FjY291bnRfcmVjbGFpbWVkX3BhZ2VzKHBhZ2VzKTtcbm1tL3NsdWIuYzozNDY5Olx0dW5hY2NvdW50X3NsYWIoc2xhYiwgb3JkZXIsIHMsIGFsbG93X3NwaW4pO1xubW0vc2x1Yi5jOjM0NzA6XHRpZiAoYWxsb3dfc3Bpbilcbm1tL3NsdWIuYy0zNDcxLVx0XHRmcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBvcmRlcik7XG4tLVxubW0vc2x1Yi5jPTM2NjE9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfaXRlcihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG5tbS9zbHViLmMtMzY2Mi1cdFx0XHRcdCAgICAgIHN0cnVjdCBzbGFiX29ial9pdGVyICppdGVyLFxubW0vc2x1Yi5jOjM2NjM6XHRcdFx0XHQgICAgICBib29sIGFsbG93X3NwaW4pXG5tbS9zbHViLmMtMzY2NC17XG4tLVxubW0vc2x1Yi5jLTM2NzUtXG5tbS9zbHViLmM6MzY3NjpcdGlmIChhbGxvd19zcGluKSB7XG5tbS9zbHViLmMtMzY3Ny1cdFx0aXRlci1cdTAwM2Vwb3MgPSBnZXRfcmFuZG9tX3UzMl9iZWxvdyhpdGVyLVx1MDAzZWZyZWVsaXN0X2NvdW50KTtcbi0tXG5tbS9zbHViLmM9MzY5Nz1zdGF0aWMgdm9pZCAqYWxsb2Nfc2luZ2xlX2Zyb21fbmV3X3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsdWIuYy0zNjk5LXtcbm1tL3NsdWIuYzozNzAwOlx0Ym9vbCBhbGxvd19zcGluID0gYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWMtXHUwMDNlYWxsb2NfZmxhZ3MpO1xubW0vc2x1Yi5jLTM3MDEtXHRzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuO1xuLS1cbm1tL3NsdWIuYy0zNzA2LVxubW0vc2x1Yi5jOjM3MDc6XHRpbml0X3NsYWJfb2JqX2l0ZXIocywgc2xhYiwgXHUwMDI2aXRlciwgYWxsb3dfc3Bpbik7XG5tbS9zbHViLmMtMzcwOC1cdG9iamVjdCA9IG5leHRfc2xhYl9vYmoocywgXHUwMDI2aXRlcik7XG4tLVxubW0vc2x1Yi5jLTM3MjctXHRuID0gZ2V0X25vZGUocywgc2xhYl9uaWQoc2xhYikpO1xubW0vc2x1Yi5jOjM3Mjg6XHRpZiAoYWxsb3dfc3Bpbikge1xubW0vc2x1Yi5jLTM3MjktXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4tLVxubW0vc2x1Yi5jPTM3NTc9c3RhdGljIGJvb2wgZ2V0X3BhcnRpYWxfbm9kZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy0zNzU5LVx0XHRcdFx0ICBzdHJ1Y3QgcGFydGlhbF9idWxrX2NvbnRleHQgKnBjLFxubW0vc2x1Yi5jOjM3NjA6XHRcdFx0XHQgIGJvb2wgYWxsb3dfc3Bpbilcbm1tL3NsdWIuYy0zNzYxLXtcbi0tXG5tbS9zbHViLmMtMzc3Mi1cbm1tL3NsdWIuYzozNzczOlx0aWYgKGFsbG93X3NwaW4pXG5tbS9zbHViLmMtMzc3NC1cdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbi0tXG5tbS9zbHViLmM9MzgyOD1zdGF0aWMgdm9pZCAqZ2V0X2Zyb21fcGFydGlhbF9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy0zODQ1LVxubW0vc2x1Yi5jOjM4NDY6XHRpZiAoYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWMtXHUwMDNlYWxsb2NfZmxhZ3MpKVxubW0vc2x1Yi5jLTM4NDctXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm4tXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XG4tLVxubW0vc2x1Yi5jPTM4OTM9c3RhdGljIHZvaWQgKmdldF9mcm9tX2FueV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBfZmxhZ3MsXG4tLVxubW0vc2x1Yi5jLTM5MDEtXHR1bnNpZ25lZCBpbnQgY3B1c2V0X21lbXNfY29va2llO1xubW0vc2x1Yi5jOjM5MDI6XHRib29sIGFsbG93X3NwaW4gPSBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhYy1cdTAwM2VhbGxvY19mbGFncyk7XG5tbS9zbHViLmMtMzkwMy1cbi0tXG5tbS9zbHViLmMtMzkzMi1cdFx0ICovXG5tbS9zbHViLmM6MzkzMzpcdFx0aWYgKGFsbG93X3NwaW4pXG5tbS9zbHViLmMtMzkzNC1cdFx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xuLS1cbm1tL3NsdWIuYy0zOTU5LVx0XHR9XG5tbS9zbHViLmM6Mzk2MDpcdH0gd2hpbGUgKGFsbG93X3NwaW4gXHUwMDI2XHUwMDI2IHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpO1xubW0vc2x1Yi5jLTM5NjEtI2VuZGlmXHQvKiBDT05GSUdfTlVNQSAqL1xuLS1cbm1tL3NsdWIuYz00NDAzPXN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb2NfZnJvbV9uZXdfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG5tbS9zbHViLmM6NDQwNDpcdFx0dm9pZCAqKnAsIHVuc2lnbmVkIGludCBjb3VudCwgYm9vbCBhbGxvd19zcGluKVxubW0vc2x1Yi5jLTQ0MDUte1xuLS1cbm1tL3NsdWIuYy00NDE5LVxubW0vc2x1Yi5jOjQ0MjA6XHRpbml0X3NsYWJfb2JqX2l0ZXIocywgc2xhYiwgXHUwMDI2aXRlciwgYWxsb3dfc3Bpbik7XG5tbS9zbHViLmMtNDQyMS1cbi0tXG5tbS9zbHViLmMtNDQzMS1cbm1tL3NsdWIuYzo0NDMyOlx0XHRpZiAoYWxsb3dfc3Bpbikge1xubW0vc2x1Yi5jLTQ0MzMtXHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bi1cdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcbi0tXG5tbS9zbHViLmM9NDQ1OD1zdGF0aWMgdm9pZCAqX19fc2xhYl9hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlLFxuLS1cbm1tL3NsdWIuYy00NDYwLXtcbm1tL3NsdWIuYzo0NDYxOlx0Ym9vbCBhbGxvd19zcGluID0gYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWMtXHUwMDNlYWxsb2NfZmxhZ3MpO1xubW0vc2x1Yi5jLTQ0NjItXHRnZnBfdCB0cnlub2RlX2ZsYWdzO1xuLS1cbm1tL3NsdWIuYy00NTEzLVx0XHQvKiB3ZSBkb24mIzM5O3QgbmVlZCB0byBjaGVjayBTTEFCX1NUT1JFX1VTRVIgaGVyZSAqL1xubW0vc2x1Yi5jOjQ1MTQ6XHRcdGlmIChhbGxvY19mcm9tX25ld19zbGFiKHMsIHNsYWIsIFx1MDAyNm9iamVjdCwgMSwgYWxsb3dfc3BpbikpXG5tbS9zbHViLmMtNDUxNS1cdFx0XHRyZXR1cm4gb2JqZWN0O1xuLS1cbm1tL3NsdWIuYy00NTE3LVxubW0vc2x1Yi5jOjQ1MTg6XHRpZiAoYWxsb3dfc3Bpbilcbm1tL3NsdWIuYy00NTE5LVx0XHRnb3RvIG5ld19vYmplY3RzO1xuLS1cbm1tL3NsdWIuYz00NTcwPWJvb2wgc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLCBzaXplX3Qgc2l6ZSxcbi0tXG5tbS9zbHViLmMtNDYxOS1cbm1tL3NsdWIuYzo0NjIwOlx0XHRpZiAoYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWMtXHUwMDNlYWxsb2NfZmxhZ3MpKVxubW0vc2x1Yi5jLTQ2MjEtXHRcdFx0a21lbWxlYWtfYWxsb2NfcmVjdXJzaXZlKHBbaV0sIHMtXHUwMDNlb2JqZWN0X3NpemUsIDEsXG4tLVxubW0vc2x1Yi5jPTQ2Mzk9X19wY3NfcmVwbGFjZV9lbXB0eV9tYWluKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2x1Yl9wZXJjcHVfc2hlYXZlcyAqcGNzLFxuLS1cbm1tL3NsdWIuYy00NjQ0LVx0c3RydWN0IG5vZGVfYmFybiAqYmFybjtcbm1tL3NsdWIuYzo0NjQ1Olx0Ym9vbCBhbGxvd19zcGluO1xubW0vc2x1Yi5jLTQ2NDYtXG4tLVxubW0vc2x1Yi5jLTQ2NjUtXG5tbS9zbHViLmM6NDY2NjpcdGFsbG93X3NwaW4gPSBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhbGxvY19mbGFncyk7XG5tbS9zbHViLmMtNDY2Ny1cbm1tL3NsdWIuYzo0NjY4Olx0ZnVsbCA9IGJhcm5fcmVwbGFjZV9lbXB0eV9zaGVhZihiYXJuLCBwY3MtXHUwMDNlbWFpbiwgYWxsb3dfc3Bpbik7XG5tbS9zbHViLmMtNDY2OS1cbi0tXG5tbS9zbHViLmMtNDY3Ny1cbm1tL3NsdWIuYzo0Njc4Olx0aWYgKGFsbG93X3NwaW4pIHtcbm1tL3NsdWIuYy00Njc5LVx0XHRpZiAocGNzLVx1MDAzZXNwYXJlKSB7XG4tLVxubW0vc2x1Yi5jLTQ2ODktXG5tbS9zbHViLmM6NDY5MDpcdGlmICghYWxsb3dfc3Bpbilcbm1tL3NsdWIuYy00NjkxLVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5tbS9zbHViLmM9NDgwNT11bnNpZ25lZCBpbnQgYWxsb2NfZnJvbV9wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxuLS1cbm1tL3NsdWIuYy00ODM5LVx0XHRmdWxsID0gYmFybl9yZXBsYWNlX2VtcHR5X3NoZWFmKGJhcm4sIHBjcy1cdTAwM2VtYWluLFxubW0vc2x1Yi5jOjQ4NDA6XHRcdFx0XHRcdFx0LyogYWxsb3dfc3BpbiA9ICovIHRydWUpO1xubW0vc2x1Yi5jLTQ4NDEtXG4tLVxubW0vc2x1Yi5jPTUzNjk9c3RhdGljIHZvaWQgKl9fa21hbGxvY19ub2xvY2tfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuLS1cbm1tL3NsdWIuYy01Mzc1LVxubW0vc2x1Yi5jOjUzNzY6XHRWTV9XQVJOX09OX09OQ0UoYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWMtXHUwMDNlYWxsb2NfZmxhZ3MpKTtcbm1tL3NsdWIuYy01Mzc3LVx0Vk1fV0FSTl9PTl9PTkNFKGdmcF9mbGFncyBcdTAwMjYgfihfX0dGUF9BQ0NPVU5UIHwgX19HRlBfWkVSTyB8XG4tLVxubW0vc2x1Yi5jPTU1MjM9dm9pZCAqX19rbWFsbG9jX2ZsYWdzX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGZsYWdzLFxuLS1cbm1tL3NsdWIuYy01NTMxLVxubW0vc2x1Yi5jOjU1MzI6XHRpZiAoYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWxsb2NfZmxhZ3MpKSB7XG5tbS9zbHViLmMtNTUzMy1cdFx0cmV0dXJuIF9fZG9fa21hbGxvY19ub2RlKE5VTEwsIGZsYWdzLCBub2RlLFxuLS1cbm1tL3NsdWIuYz01ODE0PV9fcGNzX3JlcGxhY2VfZnVsbF9tYWluKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2x1Yl9wZXJjcHVfc2hlYXZlcyAqcGNzLFxubW0vc2x1Yi5jOjU4MTU6XHRcdFx0Ym9vbCBhbGxvd19zcGluKVxubW0vc2x1Yi5jLTU4MTYte1xuLS1cbm1tL3NsdWIuYy01ODM4LVx0aWYgKCFwY3MtXHUwMDNlc3BhcmUpIHtcbm1tL3NsdWIuYzo1ODM5Olx0XHRlbXB0eSA9IGJhcm5fZ2V0X2VtcHR5X3NoZWFmKGJhcm4sIGFsbG93X3NwaW4pO1xubW0vc2x1Yi5jLTU4NDAtXHRcdGlmIChlbXB0eSkge1xuLS1cbm1tL3NsdWIuYy01ODUyLVxubW0vc2x1Yi5jOjU4NTM6XHRlbXB0eSA9IGJhcm5fcmVwbGFjZV9mdWxsX3NoZWFmKGJhcm4sIHBjcy1cdTAwM2VtYWluLCBhbGxvd19zcGluKTtcbm1tL3NsdWIuYy01ODU0LVxuLS1cbm1tL3NsdWIuYy01ODYwLVxubW0vc2x1Yi5jOjU4NjE6XHQvKiBzaGVhZl9mbHVzaF91bnVzZWQoKSBkb2VzbiYjMzk7dCBzdXBwb3J0ICFhbGxvd19zcGluICovXG5tbS9zbHViLmM6NTg2MjpcdGlmIChQVFJfRVJSKGVtcHR5KSA9PSAtRTJCSUcgXHUwMDI2XHUwMDI2IGFsbG93X3NwaW4pIHtcbm1tL3NsdWIuYy01ODYzLVx0XHQvKiBTaW5jZSB3ZSBnb3QgaGVyZSwgc3BhcmUgZXhpc3RzIGFuZCBpcyBmdWxsICovXG4tLVxubW0vc2x1Yi5jLTU4ODctXHQvKlxubW0vc2x1Yi5jOjU4ODg6XHQgKiBhbGxvY19lbXB0eV9zaGVhZigpIGRvZXNuJiMzOTt0IHN1cHBvcnQgIWFsbG93X3NwaW4gYW5kIGl0JiMzOTtzXG5tbS9zbHViLmMtNTg4OS1cdCAqIGVhc2llciB0byBmYWxsIGJhY2sgdG8gZnJlZWluZyBkaXJlY3RseSB3aXRob3V0IHNoZWF2ZXNcbi0tXG5tbS9zbHViLmMtNTg5MS1cdCAqL1xubW0vc2x1Yi5jOjU4OTI6XHRpZiAoIWFsbG93X3NwaW4pXG5tbS9zbHViLmMtNTg5My1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubW0vc2x1Yi5jPTU5MzY9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXG5tbS9zbHViLmM6NTkzNzpib29sIGZyZWVfdG9fcGNzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIGJvb2wgYWxsb3dfc3Bpbilcbm1tL3NsdWIuYy01OTM4LXtcbi0tXG5tbS9zbHViLmMtNTk0Ny1cbm1tL3NsdWIuYzo1OTQ4Olx0XHRwY3MgPSBfX3Bjc19yZXBsYWNlX2Z1bGxfbWFpbihzLCBwY3MsIGFsbG93X3NwaW4pO1xubW0vc2x1Yi5jLTU5NDktXHRcdGlmICh1bmxpa2VseSghcGNzKSlcbi0tXG5tbS9zbHViLmM9NzE2Mj1fX3JlZmlsbF9vYmplY3RzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXG5tbS9zbHViLmMtNzE2My1cdFx0ICAgICAgdW5zaWduZWQgaW50IG1heCwgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcbm1tL3NsdWIuYzo3MTY0Olx0XHQgICAgICBib29sIGFsbG93X3NwaW4pXG5tbS9zbHViLmMtNzE2NS17XG4tLVxubW0vc2x1Yi5jLTcxNzUtXG5tbS9zbHViLmM6NzE3NjpcdGlmICghZ2V0X3BhcnRpYWxfbm9kZV9idWxrKHMsIG4sIFx1MDAyNnBjLCBhbGxvd19zcGluKSlcbm1tL3NsdWIuYy03MTc3LVx0XHRyZXR1cm4gMDtcbi0tXG5tbS9zbHViLmM9NzIzOD1fX3JlZmlsbF9vYmplY3RzX2FueShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcbi0tXG5tbS9zbHViLmMtNzI2Ni1cdFx0XHRyID0gX19yZWZpbGxfb2JqZWN0c19ub2RlKHMsIHAsIGdmcCwgbWluLCBtYXgsIG4sXG5tbS9zbHViLmM6NzI2NzpcdFx0XHRcdFx0XHQgIC8qIGFsbG93X3NwaW4gPSAqLyBmYWxzZSk7XG5tbS9zbHViLmMtNzI2OC1cdFx0XHRyZWZpbGxlZCAmIzQzOz0gcjtcbi0tXG5tbS9zbHViLmM9NzI5Nz1yZWZpbGxfb2JqZWN0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcbi0tXG5tbS9zbHViLmMtNzMwNS1cdFx0XHRcdFx0IGdldF9ub2RlKHMsIGxvY2FsX25vZGUpLFxubW0vc2x1Yi5jOjczMDY6XHRcdFx0XHRcdCAvKiBhbGxvd19zcGluID0gKi8gdHJ1ZSk7XG5tbS9zbHViLmMtNzMwNy1cdGlmIChyZWZpbGxlZCBcdTAwM2U9IG1pbilcbi0tXG5tbS9zbHViLmMtNzMyMy1cdHJlZmlsbGVkICYjNDM7PSBhbGxvY19mcm9tX25ld19zbGFiKHMsIHNsYWIsIHAgJiM0MzsgcmVmaWxsZWQsIG1heCAtIHJlZmlsbGVkLFxubW0vc2x1Yi5jOjczMjQ6XHRcdFx0XHRcdC8qIGFsbG93X3NwaW4gPSAqLyB0cnVlKTtcbm1tL3NsdWIuYy03MzI1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTQ1NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE5MDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgUGFnZSBBbGxvY2F0b3IgUmVmYWN0b3JpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgbWVtb3J5IG1hbmFnZW1lbnQgZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlLiBJdCBhcHBlYXJzIHdlIGhhdmUgYSByZWZhY3RvcmluZyBvZiB0aGUgcGFnZSBhbGxvY2F0b3IgQVBJIHRoYXQmIzM5O3MgaW50cm9kdWNpbmcgYGFsbG9jX2ZsYWdzYCB0byBgX19hbGxvY19wYWdlc19ub3Byb2ZgIGFuZCBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCwgYW5kIHJlcGxhY2luZyBzb21lIG9sZCBmbGFncyB3aXRoIGBBTExPQ19OT19DT0RFVEFHYCBhbmQgYEFMTE9DX05PTE9DS2AuIFRoZSBnb2FsIGhlcmUgaXMgdG8gbWFrZSB0aGUgY29kZSBtb3JlIHJvYnVzdCBhbmQgZmxleGlibGUsIGJ1dCB3ZSBuZWVkIHRvIGVuc3VyZSB3ZSYjMzk7cmUgbm90IGludHJvZHVjaW5nIGFueSByZWdyZXNzaW9ucy4gVGhlIG1vc3QgY3JpdGljYWwgYXNwZWN0IG9mIHRoaXMgY2hhbmdlIGlzIGFib3V0IG5vbi1ibG9ja2luZyBhbGxvY2F0aW9ucyBhbmQgcG90ZW50aWFsIGxvY2tpbmcgaXNzdWVzLgoKRmlyc3QsIGxldCYjMzk7cyBpZGVudGlmeSB0aGUga2V5IGFyZWFzIHRvIGZvY3VzIG91ciBmdXp6aW5nIGVmZm9ydHMuIFRoZSBjb2RlIGlzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmlsZXMsIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIGhvdyBwYWdlcyBhcmUgYWxsb2NhdGVkLCBwYXJ0aWN1bGFybHkgd2l0aCByZXNwZWN0IHRvIGxvY2tpbmcgYW5kIHByb2ZpbGluZy4gVGhpcyBtZWFucyB3ZSBtdXN0IGNoZWNrIGZvciBsb2NrIHJlbGF0ZWQgYnVncyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gYnVncy4KClRoZSBwcmltYXJ5IGZ1bmN0aW9uIG9mIGludGVyZXN0LCBhZnRlciBkaWdnaW5nIGludG8gdGhpcyBhIGJpdCwgaXMgZGVmaW5pdGVseSBgYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9ja19ub3Byb2ZgLiBJdCYjMzk7cyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBvcHBvcnR1bmlzdGljIHJlZW50cmFudCBhbGxvY2F0aW9uIGluIHRoZSBub2xvY2sgY29udGV4dCBhbmQgaXMgYSBzdHJvbmcgY2FuZGlkYXRlIGZvciBmdXp6aW5nIGFzIGl0JiMzOTtzIGJlZW4gdXBkYXRlZCB0byB1c2UgdGhlIG5ldyBmbGFncy4gQW5vdGhlciBmdW5jdGlvbiwgYGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mYCwgdGhhdCYjMzk7cyBub3cgYW4gb3V0LW9mLWxpbmUgZnVuY3Rpb24gYXMgcGFydCBvZiB0aGlzIHJlZmFjdG9yaW5nLCB3YXJyYW50cyBhdHRlbnRpb24gYXMgd2VsbC4KClRoZSBgQUxMT0NfTk9fQ09ERVRBR2AgZmxhZyBpcyBpbnRlcmVzdGluZyBhcyBpdCBzZWVtcyBpdCBhZGRzIHByb2ZpbGluZyBkYXRhIHRvIHRoZSBhbGxvY2F0aW9ucy4gVGhpcyBmbGFnIHNlZW1zIHRvIGJlIGltcG9ydGFudCwgc28gd2Ugc2hvdWxkIGVuYWJsZSBgTUVNX0FMTE9DX1BST0ZJTElOR2AuCgpTbywgaGVyZSYjMzk7cyB0aGUgZmluYWwgbGlzdDoKCioqRm9jdXNTeW1ib2xzOioqCiogICBgYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9ja19ub3Byb2ZgCiogICBgYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2ZgCgoqKkVuYWJsZUNvbmZpZ3M6KioKKiAgIGBNRU1fQUxMT0NfUFJPRklMSU5HYAoKVGhlIHJlYXNvbmluZyBoZXJlIGlzIHRoYXQgYnkgdGFyZ2V0aW5nIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucyBhbmQgY29uZmlndXJhdGlvbnMsIHdlJiMzOTtsbCBnYWluIHNpZ25pZmljYW50IGNvdmVyYWdlIG9mIHRoZSBwYWdlIGFsbG9jYXRvciBBUEkgY2hhbmdlcywgcGF5aW5nIHNwZWNpZmljIGF0dGVudGlvbiB0byB0aGUgcmVmYWN0b3JlZCBsb2NraW5nIGFuZCBwcm9maWxpbmcgbWVjaGFuaXNtcywgbWluaW1pemluZyB0aGUgcmlzayBvZiBpbnRyb2R1Y2luZyByZWdyZXNzaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDM6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz0zMTE9Y29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xuLS1cbm1tL0tjb25maWcuZGVidWctMzIzLVxubW0vS2NvbmZpZy5kZWJ1ZzozMjQ6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcbm1tL0tjb25maWcuZGVidWctMzI1LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0zMzctXG5tbS9LY29uZmlnLmRlYnVnOjMzODpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcbm1tL0tjb25maWcuZGVidWctMzM5LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTM0Mi1cbm1tL0tjb25maWcuZGVidWc6MzQzOmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXG5tbS9LY29uZmlnLmRlYnVnLTM0NC1cdGJvb2wgXCYjMzQ7TWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsZXIgZGVidWdnaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAzOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MDQ3CgkJCQkJCQlvdXRwdXQ6IDE5OAoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENob2ljZXMgZm9yIE1lbW9yeSBBbGxvY2F0aW9uIFByb2ZpbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgbmVlZGVkIHRvIGVmZmVjdGl2ZWx5IHByb2ZpbGUgdGhlc2UgbWVtb3J5IGFsbG9jYXRpb24gY2hhbmdlcyByZWxhdGVkIHRvIGBBTExPQ19OT19DT0RFVEFHYC4gUmlnaHQsIHRoZSBrZXkgaXMgYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBUaGF0JiMzOTtzIHRoZSBvbmUuIEkgYWxzbyBuZWVkIHRvIGVuc3VyZSBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQsIHNvIEkmIzM5O2xsIGFkZCBgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRgIGFzIHdlbGwuIFdhaXQgYSBzZWNvbmQsIHRoZSBndWlkYW5jZSBpcyBub3QgdG8gbGlzdCBnZW5lcmljIGNvbmZpZ3MuIFRoaXMgaXMgc3BlY2lmaWMsIGhvd2V2ZXIsIGFzIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBkaXJlY3RseSBhZGRyZXNzZXMgdGhlIG1vZGlmaWNhdGlvbnMgbWFkZSB3aXRoIGBBTExPQ19OT19DT0RFVEFHYC4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRob3NlIEZvY3VzU3ltYm9scyBvbmUgbW9yZSB0aW1lLiBJIHNlZSBgYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9ja19ub3Byb2ZgIGFuZCBgYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2ZgIGFyZSBpbmNsdWRlZCBpbiB0aGUgY2hhbmdlcywgYW5kIGFyZSBleGFjdGx5IHdoYXQgSSBuZWVkLiBQZXJmZWN0LgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcywgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAzOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1fQUxMT0NfUFJPRklMSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfZnJvemVuX3BhZ2VzX25vbG9ja19ub3Byb2YmIzM0OywKICAgICYjMzQ7YWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBpbnRlcm5hbCBwYWdlIGFsbG9jYXRvciBBUEkgYnkgaW50cm9kdWNpbmcgYGFsbG9jX2ZsYWdzYCB0byBgX19hbGxvY19wYWdlc19ub3Byb2ZgIGFuZCBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCwgcmVwbGFjaW5nIGBfX0dGUF9OT19PQkpfRVhUYCBhbmQgYEFMTE9DX1RSWUxPQ0tgIHdpdGggYEFMTE9DX05PX0NPREVUQUdgIGFuZCBgQUxMT0NfTk9MT0NLYC4gSXQgYWxzbyBtb3ZlcyBgYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2ZgIG91dC1vZi1saW5lLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHBhZ2UgYWxsb2NhdGlvbiwgZXNwZWNpYWxseSBpbiBub24tYmxvY2tpbmcvbm9sb2NrIGNvbnRleHRzIGFuZCBtZW1vcnkgcHJvZmlsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1fQUxMT0NfUFJPRklMSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfZnJvemVuX3BhZ2VzX25vbG9ja19ub3Byb2YmIzM0OywKICAgICYjMzQ7YWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBpbnRlcm5hbCBwYWdlIGFsbG9jYXRvciBBUEkgYnkgaW50cm9kdWNpbmcgYGFsbG9jX2ZsYWdzYCB0byBgX19hbGxvY19wYWdlc19ub3Byb2ZgIGFuZCBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCwgcmVwbGFjaW5nIGBfX0dGUF9OT19PQkpfRVhUYCBhbmQgYEFMTE9DX1RSWUxPQ0tgIHdpdGggYEFMTE9DX05PX0NPREVUQUdgIGFuZCBgQUxMT0NfTk9MT0NLYC4gSXQgYWxzbyBtb3ZlcyBgYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2ZgIG91dC1vZi1saW5lLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHBhZ2UgYWxsb2NhdGlvbiwgZXNwZWNpYWxseSBpbiBub24tYmxvY2tpbmcvbm9sb2NrIGNvbnRleHRzIGFuZCBtZW1vcnkgcHJvZmlsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDJUMDM6Mjk6MzYuMDEzMTM0NDI3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk2MjAwNDE0NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19wYWdlc19ub2RlX25vcHJvZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgaW50ZXJuYWwgcGFnZSBhbGxvY2F0b3IgQVBJIGJ5IGludHJvZHVjaW5nIGBhbGxvY19mbGFnc2AgdG8gYF9fYWxsb2NfcGFnZXNfbm9wcm9mYCBhbmQgYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAsIHJlcGxhY2luZyBgX19HRlBfTk9fT0JKX0VYVGAgYW5kIGBBTExPQ19UUllMT0NLYCB3aXRoIGBBTExPQ19OT19DT0RFVEFHYCBhbmQgYEFMTE9DX05PTE9DS2AuIEl0IGFsc28gbW92ZXMgYGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mYCBvdXQtb2YtbGluZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiBwYWdlIGFsbG9jYXRpb24sIGVzcGVjaWFsbHkgaW4gbm9uLWJsb2NraW5nL25vbG9jayBjb250ZXh0cyBhbmQgbWVtb3J5IHByb2ZpbGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDM6Mjk6MzYuMDEzMTM5OTE4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mzk0ODI3ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlYmY0MDE4M2U2ZmJmMjcwNDZjODhlNTY0ODRkNzE3MDZkMDBiM2FiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIgMDM6Mjk6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9jcHVzZXRzLnJzdFxcbmluZGV4IGM3OTA5ZTVhYzEzNjFhLi41MmEyMTNhZmYwNGU1ZiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9jcHVzZXRzLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2NwdXNldHMucnN0XFxuQEAgLTI4NCw3ICsyODQsNyBAQCB0YWtlIGFjdGlvbi5cXG4gPT1cXHUwMDNlXFxuICAgICBVbmxlc3MgdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQgYnkgd3JpdGluZyBcXFwiMVxcXCIgdG8gdGhlIHNwZWNpYWwgZmlsZVxcbiAgICAgL2Rldi9jcHVzZXQvbWVtb3J5X3ByZXNzdXJlX2VuYWJsZWQsIHRoZSBob29rIGluIHRoZSByZWJhbGFuY2VcXG4tICAgIGNvZGUgb2YgX19hbGxvY19wYWdlcygpIGZvciB0aGlzIG1ldHJpYyByZWR1Y2VzIHRvIHNpbXBseSBub3RpY2luZ1xcbisgICAgY29kZSBvZiB0aGUgcGFnZSBhbGxvY2F0b3IgZm9yIHRoaXMgbWV0cmljIHJlZHVjZXMgdG8gc2ltcGx5IG5vdGljaW5nXFxuICAgICB0aGF0IHRoZSBjcHVzZXRfbWVtb3J5X3ByZXNzdXJlX2VuYWJsZWQgZmxhZyBpcyB6ZXJvLiAgU28gb25seVxcbiAgICAgc3lzdGVtcyB0aGF0IGVuYWJsZSB0aGlzIGZlYXR1cmUgd2lsbCBjb21wdXRlIHRoZSBtZXRyaWMuXFxuIFxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3RcXG5pbmRleCAyM2Y4ZDEzYzI2MjlkNi4uMTZmMzcxMzVlZDgwZGYgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0XFxuQEAgLTc2MSw3ICs3NjEsNyBAQCBjb21wYWN0X2ZhaWxcXG4gXFx0YnV0IGZhaWxlZC5cXG4gXFxuIEl0IGlzIHBvc3NpYmxlIHRvIGVzdGFibGlzaCBob3cgbG9uZyB0aGUgc3RhbGxzIHdlcmUgdXNpbmcgdGhlIGZ1bmN0aW9uXFxuLXRyYWNlciB0byByZWNvcmQgaG93IGxvbmcgd2FzIHNwZW50IGluIF9fYWxsb2NfcGFnZXMoKSBhbmRcXG4rdHJhY2VyIHRvIHJlY29yZCBob3cgbG9uZyB3YXMgc3BlbnQgaW4gdGhlIHBhZ2UgYWxsb2NhdG9yIGFuZFxcbiB1c2luZyB0aGUgbW1fcGFnZV9hbGxvYyB0cmFjZXBvaW50IHRvIGlkZW50aWZ5IHdoaWNoIGFsbG9jYXRpb25zIHdlcmVcXG4gZm9yIGh1Z2UgcGFnZXMuXFxuIFxcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggZGIzZDhjNDQxZTRjMDAuLmRlODc5MjExNzZiMGRjIDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtMTcxODEsNiArMTcxODEsNyBAQCBGOlxcdG1tL2RlYnVnX3BhZ2VfYWxsb2MuY1xcbiBGOlxcdG1tL2RlYnVnX3BhZ2VfcmVmLmNcXG4gRjpcXHRtbS9mYWlsX3BhZ2VfYWxsb2MuY1xcbiBGOlxcdG1tL3BhZ2VfYWxsb2MuY1xcbitGOlxcdG1tL3BhZ2VfYWxsb2MuaFxcbiBGOlxcdG1tL3BhZ2VfZXh0LmNcXG4gRjpcXHRtbS9wYWdlX2ZyYWdfY2FjaGUuY1xcbiBGOlxcdG1tL3BhZ2VfaXNvbGF0aW9uLmNcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmMgYi9hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuY1xcbmluZGV4IGU4NmU0YmE5MWUxYjM3Li44OTQwZjAyOTIyMjlmNSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuY1xcbisrKyBiL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jXFxuQEAgLTgzMiw3ICs4MzIsNyBAQCBzdGF0aWMgdm9pZCAqZHNhbGxvY19wYWdlcyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBjcHUpXFxuIFxcdGludCBub2RlID0gY3B1X3RvX25vZGUoY3B1KTtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIFxcbi1cXHRwYWdlID0gX19hbGxvY19wYWdlc19ub2RlKG5vZGUsIGZsYWdzIHwgX19HRlBfWkVSTywgb3JkZXIpO1xcbitcXHRwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBmbGFncyB8IF9fR0ZQX1pFUk8sIG9yZGVyKTtcXG4gXFx0cmV0dXJuIHBhZ2UgPyBwYWdlX2FkZHJlc3MocGFnZSkgOiBOVUxMO1xcbiB9XFxuIFxcbkBAIC0xMDg4LDkgKzEwODgsOSBAQCB2b2lkIGluaXRfYXJjaF9wZWJzX29uX2NwdShpbnQgY3B1KVxcbiBcXG4gXFx0LypcXG4gXFx0ICogNEtCLWFsaWduZWQgcG9pbnRlciBvZiB0aGUgb3V0cHV0IGJ1ZmZlclxcbi1cXHQgKiAoX19hbGxvY19wYWdlc19ub2RlKCkgcmV0dXJuIHBhZ2UgYWxpZ25lZCBhZGRyZXNzKVxcbitcXHQgKiAoYWxsb2NfcGFnZXNfbm9kZSgpIHJldHVybnMgcGFnZSBhbGlnbmVkIGFkZHJlc3MpXFxuIFxcdCAqIEJ1ZmZlciBTaXplID0gNEtCICogMl5TSVpFXFxuLVxcdCAqIGNvbnRpZ3VvdXMgcGh5c2ljYWwgYnVmZmVyIChfX2FsbG9jX3BhZ2VzX25vZGUoKSB3aXRoIG9yZGVyKVxcbitcXHQgKiBjb250aWd1b3VzIHBoeXNpY2FsIGJ1ZmZlciAoYWxsb2NfcGFnZXNfbm9kZSgpIHdpdGggb3JkZXIpXFxuIFxcdCAqL1xcbiBcXHRhcmNoX3BlYnNfYmFzZSA9IHZpcnRfdG9fcGh5cyhjcHVjLVxcdTAwM2VwZWJzX3ZhZGRyKSB8IFBFQlNfQlVGRkVSX1NISUZUO1xcbiBcXHR3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0lBMzJfUEVCU19CQVNFLCBhcmNoX3BlYnNfYmFzZSk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuaW5kZXggYTAzYWRkMDBmOTIzZWMuLjI2ZjE1NTg0ZDRiNTA1IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuQEAgLTMwNDAsNyArMzA0MCw3IEBAIHN0cnVjdCB2bWNzICphbGxvY192bWNzX2NwdShib29sIHNoYWRvdywgaW50IGNwdSwgZ2ZwX3QgZmxhZ3MpXFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlcztcXG4gXFx0c3RydWN0IHZtY3MgKnZtY3M7XFxuIFxcbi1cXHRwYWdlcyA9IF9fYWxsb2NfcGFnZXNfbm9kZShub2RlLCBmbGFncywgMCk7XFxuK1xcdHBhZ2VzID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBmbGFncywgMCk7XFxuIFxcdGlmICghcGFnZXMpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR2bWNzID0gcGFnZV9hZGRyZXNzKHBhZ2VzKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC9ody5jIGIvYXJjaC94ODYvdmlydC9ody5jXFxuaW5kZXggN2U5MDkxYzY0MGJlMGIuLmEyMzY0NDdhYzdhMjYyIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L3ZpcnQvaHcuY1xcbisrKyBiL2FyY2gveDg2L3ZpcnQvaHcuY1xcbkBAIC0xOTYsNyArMTk2LDcgQEAgc3RhdGljIF9faW5pdCBpbnQgX194ODZfdm14X2luaXQodm9pZClcXG4gXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIFxcdFxcdHN0cnVjdCB2bWNzICp2bWNzO1xcbiBcXG4tXFx0XFx0cGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9kZShub2RlLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgMCk7XFxuK1xcdFxcdHBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCAwKTtcXG4gXFx0XFx0aWYgKFdBUk5fT05fT05DRSghcGFnZSkpIHtcXG4gXFx0XFx0XFx0eDg2X3ZteF9leGl0KCk7XFxuIFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY191di5jIGIvZHJpdmVycy9taXNjL3NnaS14cC94cGNfdXYuY1xcbmluZGV4IDc3MmM3ODcyNjg5MzI3Li5hYWNmZjcwMjA0MjQxNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY191di5jXFxuKysrIGIvZHJpdmVycy9taXNjL3NnaS14cC94cGNfdXYuY1xcbkBAIC0xNzAsNyArMTcwLDcgQEAgeHBjX2NyZWF0ZV9ncnVfbXFfdXYodW5zaWduZWQgaW50IG1xX3NpemUsIGludCBjcHUsIGNoYXIgKmlycV9uYW1lLFxcbiBcXHRtcS1cXHUwMDNlbW1yX2JsYWRlID0gdXZfY3B1X3RvX2JsYWRlX2lkKGNwdSk7XFxuIFxcbiBcXHRuaWQgPSBjcHVfdG9fbm9kZShjcHUpO1xcbi1cXHRwYWdlID0gX19hbGxvY19wYWdlc19ub2RlKG5pZCxcXG4rXFx0cGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobmlkLFxcbiBcXHRcXHRcXHRcXHQgICAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyB8IF9fR0ZQX1RISVNOT0RFLFxcbiBcXHRcXHRcXHRcXHQgICAgICBwZ19vcmRlcik7XFxuIFxcdGlmIChwYWdlID09IE5VTEwpIHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnVuZ2libGUvZnVuZXRoL2Z1bmV0aF9yeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnVuZ2libGUvZnVuZXRoL2Z1bmV0aF9yeC5jXFxuaW5kZXggN2UyNTg0ODk1ZGUzOWIuLmQ3MDAwMDE3YWMyYmRjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9mdW5ldGhfcnguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9mdW5ldGhfcnguY1xcbkBAIC0xMDMsNyArMTAzLDcgQEAgc3RhdGljIGludCBmdW5ldGhfYWxsb2NfcGFnZShzdHJ1Y3QgZnVuZXRoX3J4cSAqcSwgc3RydWN0IGZ1bmV0aF9yeGJ1ZiAqcmIsXFxuIFxcdGlmIChjYWNoZV9nZXQocSwgcmIpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHAgPSBfX2FsbG9jX3BhZ2VzX25vZGUobm9kZSwgZ2ZwIHwgX19HRlBfTk9XQVJOLCAwKTtcXG4rXFx0cCA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgZ2ZwIHwgX19HRlBfTk9XQVJOLCAwKTtcXG4gXFx0aWYgKHVubGlrZWx5KCFwKSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmcC5oIGIvaW5jbHVkZS9saW51eC9nZnAuaFxcbmluZGV4IGNkZjk1YTlmMGI4N2MxLi40ZDU3ZTljMGJmMjA0ZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2dmcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9nZnAuaFxcbkBAIC0xNywyOCArMTcsNiBAQCBzdHJ1Y3QgbWVtcG9saWN5O1xcbiAjZGVmaW5lIF9fZGVmYXVsdF9nZnAoYSxiLC4uLikgYlxcbiAjZGVmaW5lIGRlZmF1bHRfZ2ZwKC4uLikgX19kZWZhdWx0X2dmcCgsIyNfX1ZBX0FSR1NfXyxHRlBfS0VSTkVMKVxcbiBcXG4tLyogQ29udmVydCBHRlAgZmxhZ3MgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBtaWdyYXRlIHR5cGUgKi9cXG4tI2RlZmluZSBHRlBfTU9WQUJMRV9NQVNLIChfX0dGUF9SRUNMQUlNQUJMRXxfX0dGUF9NT1ZBQkxFKVxcbi0jZGVmaW5lIEdGUF9NT1ZBQkxFX1NISUZUIDNcXG4tXFxuLXN0YXRpYyBpbmxpbmUgaW50IGdmcF9taWdyYXRldHlwZShjb25zdCBnZnBfdCBnZnBfZmxhZ3MpXFxuLXtcXG4tXFx0Vk1fV0FSTl9PTigoZ2ZwX2ZsYWdzIFxcdTAwMjYgR0ZQX01PVkFCTEVfTUFTSykgPT0gR0ZQX01PVkFCTEVfTUFTSyk7XFxuLVxcdEJVSUxEX0JVR19PTigoMVVMIFxcdTAwM2NcXHUwMDNjIEdGUF9NT1ZBQkxFX1NISUZUKSAhPSBfX19HRlBfTU9WQUJMRSk7XFxuLVxcdEJVSUxEX0JVR19PTigoX19fR0ZQX01PVkFCTEUgXFx1MDAzZVxcdTAwM2UgR0ZQX01PVkFCTEVfU0hJRlQpICE9IE1JR1JBVEVfTU9WQUJMRSk7XFxuLVxcdEJVSUxEX0JVR19PTigoX19fR0ZQX1JFQ0xBSU1BQkxFIFxcdTAwM2VcXHUwMDNlIEdGUF9NT1ZBQkxFX1NISUZUKSAhPSBNSUdSQVRFX1JFQ0xBSU1BQkxFKTtcXG4tXFx0QlVJTERfQlVHX09OKCgoX19fR0ZQX01PVkFCTEUgfCBfX19HRlBfUkVDTEFJTUFCTEUpIFxcdTAwM2VcXHUwMDNlXFxuLVxcdFxcdCAgICAgIEdGUF9NT1ZBQkxFX1NISUZUKSAhPSBNSUdSQVRFX0hJR0hBVE9NSUMpO1xcbi1cXG4tXFx0aWYgKHVubGlrZWx5KHBhZ2VfZ3JvdXBfYnlfbW9iaWxpdHlfZGlzYWJsZWQpKVxcbi1cXHRcXHRyZXR1cm4gTUlHUkFURV9VTk1PVkFCTEU7XFxuLVxcbi1cXHQvKiBHcm91cCBiYXNlZCBvbiBtb2JpbGl0eSAqL1xcbi1cXHRyZXR1cm4gKF9fZm9yY2UgdW5zaWduZWQgbG9uZykoZ2ZwX2ZsYWdzIFxcdTAwMjYgR0ZQX01PVkFCTEVfTUFTSykgXFx1MDAzZVxcdTAwM2UgR0ZQX01PVkFCTEVfU0hJRlQ7XFxuLX1cXG4tI3VuZGVmIEdGUF9NT1ZBQkxFX01BU0tcXG4tI3VuZGVmIEdGUF9NT1ZBQkxFX1NISUZUXFxuLVxcbiBzdGF0aWMgaW5saW5lIGJvb2wgZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoY29uc3QgZ2ZwX3QgZ2ZwX2ZsYWdzKVxcbiB7XFxuIFxcdHJldHVybiAhIShnZnBfZmxhZ3MgXFx1MDAyNiBfX0dGUF9ESVJFQ1RfUkVDTEFJTSk7XFxuQEAgLTIyNiwxMCArMjA0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZnJlZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpIHsgfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9hbGxvY19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpIHsgfVxcbiAjZW5kaWZcXG4gXFxuLXN0cnVjdCBwYWdlICpfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IHByZWZlcnJlZF9uaWQsXFxuLVxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrKTtcXG4tI2RlZmluZSBfX2FsbG9jX3BhZ2VzKC4uLilcXHRcXHRcXHRhbGxvY19ob29rcyhfX2FsbG9jX3BhZ2VzX25vcHJvZihfX1ZBX0FSR1NfXykpXFxuLVxcbiBzdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcXG4gXFx0XFx0bm9kZW1hc2tfdCAqbm9kZW1hc2spO1xcbiAjZGVmaW5lIF9fZm9saW9fYWxsb2MoLi4uKVxcdFxcdFxcdGFsbG9jX2hvb2tzKF9fZm9saW9fYWxsb2Nfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5AQCAtMjc4LDIxICsyNTIsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgd2Fybl9pZl9ub2RlX29mZmxpbmUoaW50IHRoaXNfbm9kZSwgZ2ZwX3QgZ2ZwX21hc2spXFxuIFxcdGR1bXBfc3RhY2soKTtcXG4gfVxcbiBcXG4tLypcXG4tICogQWxsb2NhdGUgcGFnZXMsIHByZWZlcnJpbmcgdGhlIG5vZGUgZ2l2ZW4gYXMgbmlkLiBUaGUgbm9kZSBtdXN0IGJlIHZhbGlkIGFuZFxcbi0gKiBvbmxpbmUuIEZvciBtb3JlIGdlbmVyYWwgaW50ZXJmYWNlLCBzZWUgYWxsb2NfcGFnZXNfbm9kZSgpLlxcbi0gKi9cXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqXFxuLV9fYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YoaW50IG5pZCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcXG4te1xcbi1cXHRWTV9CVUdfT04obmlkIFxcdTAwM2MgMCB8fCBuaWQgXFx1MDAzZT0gTUFYX05VTU5PREVTKTtcXG4tXFx0d2Fybl9pZl9ub2RlX29mZmxpbmUobmlkLCBnZnBfbWFzayk7XFxuLVxcbi1cXHRyZXR1cm4gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX21hc2ssIG9yZGVyLCBuaWQsIE5VTEwpO1xcbi19XFxuLVxcbi0jZGVmaW5lICBfX2FsbG9jX3BhZ2VzX25vZGUoLi4uKVxcdFxcdGFsbG9jX2hvb2tzKF9fYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbi1cXG4gc3RhdGljIGlubGluZVxcbiBzdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBuaWQpXFxuIHtcXG5AQCAtMzA5LDE0ICsyNjgsNyBAQCBzdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9kZV9ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBuaWQpXFxuICAqIHByZWZlciB0aGUgY3VycmVudCBDUFUncyBjbG9zZXN0IG5vZGUuIE90aGVyd2lzZSBub2RlIG11c3QgYmUgdmFsaWQgYW5kXFxuICAqIG9ubGluZS5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKGludCBuaWQsIGdmcF90IGdmcF9tYXNrLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLXtcXG4tXFx0aWYgKG5pZCA9PSBOVU1BX05PX05PREUpXFxuLVxcdFxcdG5pZCA9IG51bWFfbWVtX2lkKCk7XFxuLVxcbi1cXHRyZXR1cm4gX19hbGxvY19wYWdlc19ub2RlX25vcHJvZihuaWQsIGdmcF9tYXNrLCBvcmRlcik7XFxuLX1cXG4rc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKGludCBuaWQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbiBcXG4gI2RlZmluZSAgYWxsb2NfcGFnZXNfbm9kZSguLi4pXFx0XFx0XFx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbiBcXG5AQCAtMzk1LDEwICszNDcsNiBAQCBleHRlcm4gdm9pZCBmcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG4gI2RlZmluZSBfX2ZyZWVfcGFnZShwYWdlKSBfX2ZyZWVfcGFnZXMoKHBhZ2UpLCAwKVxcbiAjZGVmaW5lIGZyZWVfcGFnZShhZGRyKSBmcmVlX3BhZ2VzKChhZGRyKSwgMClcXG4gXFxuLXZvaWQgcGFnZV9hbGxvY19pbml0X2NwdWhwKHZvaWQpO1xcbi1ib29sIGRlY2F5X3BjcF9oaWdoKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwKTtcXG4tdm9pZCBkcmFpbl96b25lX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwKTtcXG4tdm9pZCBkcmFpbl9hbGxfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUpO1xcbiB2b2lkIGRyYWluX2xvY2FsX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKTtcXG4gXFxuIHZvaWQgcGFnZV9hbGxvY19pbml0X2xhdGUodm9pZCk7XFxuZGlmZiAtLWdpdCBhL21tL2FsbG9jX3RhZy5jIGIvbW0vYWxsb2NfdGFnLmNcXG5pbmRleCBkOWJlMWNmNTE4N2Q5Ny4uYTMyYTk0ZTc1OWI5NGIgMTAwNjQ0XFxuLS0tIGEvbW0vYWxsb2NfdGFnLmNcXG4rKysgYi9tbS9hbGxvY190YWcuY1xcbkBAIC0xNSw2ICsxNSw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC92bWFsbG9jLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rbWVtbGVhay5oXFx1MDAzZVxcbiBcXG4rI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuK1xcbiAjZGVmaW5lIEFMTE9DSU5GT19GSUxFX05BTUVcXHRcXHRcXFwiYWxsb2NpbmZvXFxcIlxcbiAjZGVmaW5lIE1PRFVMRV9BTExPQ19UQUdfVk1BUF9TSVpFXFx0KDEwMDAwMFVMICogc2l6ZW9mKHN0cnVjdCBhbGxvY190YWcpKVxcbiAjZGVmaW5lIFNFQ1RJT05fU1RBUlQoTkFNRSlcXHRcXHQoQ09ERVRBR19TRUNUSU9OX1NUQVJUX1BSRUZJWCBOQU1FKVxcbkBAIC03ODMsMTkgKzc4NSw2IEBAIHN0cnVjdCBwZm5fcG9vbCB7XFxuIFxcbiAjZGVmaW5lIFBGTl9QT09MX1NJWkVcXHRcXHRcXHQoKFBBR0VfU0laRSAtIG9mZnNldG9mKHN0cnVjdCBwZm5fcG9vbCwgcGZucykpIC8gXFxcXFxcbiBcXHRcXHRcXHRcXHRcXHQgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKVxcbi1cXG4tLypcXG4tICogU2tpcCBlYXJseSBQRk4gcmVjb3JkaW5nIGZvciBhIHBhZ2UgYWxsb2NhdGlvbi4gIFJldXNlcyB0aGVcXG4tICogJV9fR0ZQX05PX09CSl9FWFQgYml0LiAgVXNlZCBieSBfX2FsbG9jX3RhZ19hZGRfZWFybHlfcGZuKCkgdG8gYXZvaWRcXG4tICogcmVjdXJzaW9uIHdoZW4gYWxsb2NhdGluZyBwYWdlcyBmb3IgdGhlIGVhcmx5IFBGTiB0cmFja2luZyBsaXN0XFxuLSAqIGl0c2VsZi5cXG4tICpcXG4tICogQ29kZXRhZ3Mgb2YgdGhlIHBhZ2VzIGFsbG9jYXRlZCB3aXRoIF9fR0ZQX05PX0NPREVUQUcgc2hvdWxkIGJlXFxuLSAqIGNsZWFyZWQgKHZpYSBjbGVhcl9wYWdlX3RhZ19yZWYoKSkgYmVmb3JlIGZyZWVpbmcgdGhlIHBhZ2VzIHRvIHByZXZlbnRcXG4tICogYWxsb2NfdGFnX3N1Yl9jaGVjaygpIGZyb20gdHJpZ2dlcmluZyBhIHdhcm5pbmcuXFxuLSAqL1xcbi0jZGVmaW5lIF9fR0ZQX05PX0NPREVUQUdcXHRcXHRfX0dGUF9OT19PQkpfRVhUXFxuLVxcbiBzdGF0aWMgc3RydWN0IHBmbl9wb29sICpjdXJyZW50X3Bmbl9wb29sIF9faW5pdGRhdGE7XFxuIFxcbiBzdGF0aWMgdm9pZCBfX2luaXQgX19hbGxvY190YWdfYWRkX2Vhcmx5X3Bmbih1bnNpZ25lZCBsb25nIHBmbilcXG5AQCAtODA2LDcgKzc5NSw4IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBfX2FsbG9jX3RhZ19hZGRfZWFybHlfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKVxcbiBcXHRkbyB7XFxuIFxcdFxcdHBvb2wgPSBSRUFEX09OQ0UoY3VycmVudF9wZm5fcG9vbCk7XFxuIFxcdFxcdGlmICghcG9vbCB8fCBhdG9taWNfcmVhZChcXHUwMDI2cG9vbC1cXHUwMDNlY291bnQpIFxcdTAwM2U9IFBGTl9QT09MX1NJWkUpIHtcXG4tXFx0XFx0XFx0c3RydWN0IHBhZ2UgKm5ld19wYWdlID0gYWxsb2NfcGFnZShfX0dGUF9ISUdIIHwgX19HRlBfTk9fQ09ERVRBRyk7XFxuK1xcdFxcdFxcdHN0cnVjdCBwYWdlICpuZXdfcGFnZSA9IF9fYWxsb2NfcGFnZXMoX19HRlBfSElHSCwgMCwgbnVtYV9tZW1faWQoKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgTlVMTCwgQUxMT0NfTk9fQ09ERVRBRyk7XFxuIFxcdFxcdFxcdHN0cnVjdCBwZm5fcG9vbCAqbmV3O1xcbiBcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcGFnZSkge1xcbkBAIC04MzcsNyArODI3LDcgQEAgdHlwZWRlZiB2b2lkIGFsbG9jX3RhZ19hZGRfZnVuYyh1bnNpZ25lZCBsb25nIHBmbik7XFxuIHN0YXRpYyBhbGxvY190YWdfYWRkX2Z1bmMgX19yY3UgKmFsbG9jX3RhZ19hZGRfZWFybHlfcGZuX3B0ciBfX3JlZmRhdGEgPVxcbiBcXHRSQ1VfSU5JVElBTElaRVIoX19hbGxvY190YWdfYWRkX2Vhcmx5X3Bmbik7XFxuIFxcbi12b2lkIGFsbG9jX3RhZ19hZGRfZWFybHlfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBnZnBfdCBnZnBfZmxhZ3MpXFxuK3ZvaWQgYWxsb2NfdGFnX2FkZF9lYXJseV9wZm4odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcXG4ge1xcbiBcXHRhbGxvY190YWdfYWRkX2Z1bmMgKmFsbG9jX3RhZ19hZGQ7XFxuIFxcbkBAIC04NDUsNyArODM1LDcgQEAgdm9pZCBhbGxvY190YWdfYWRkX2Vhcmx5X3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgZ2ZwX3QgZ2ZwX2ZsYWdzKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHQvKiBTa2lwIGFsbG9jYXRpb25zIGZvciB0aGUgdHJhY2tpbmcgbGlzdCBpdHNlbGYgdG8gYXZvaWQgcmVjdXJzaW9uLiAqL1xcbi1cXHRpZiAoZ2ZwX2ZsYWdzIFxcdTAwMjYgX19HRlBfTk9fQ09ERVRBRylcXG4rXFx0aWYgKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfTk9fQ09ERVRBRylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbmRpZmYgLS1naXQgYS9tbS9jb21wYWN0aW9uLmMgYi9tbS9jb21wYWN0aW9uLmNcXG5pbmRleCBmMDg3NjVhZGUwMTRjZS4uNGIyMzE4ZmFkNGViNTkgMTAwNjQ0XFxuLS0tIGEvbW0vY29tcGFjdGlvbi5jXFxuKysrIGIvbW0vY29tcGFjdGlvbi5jXFxuQEAgLTI0LDYgKzI0LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2Vfb3duZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BzaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY3B1c2V0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJwYWdlX2FsbG9jLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbiBcXG4gI2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxuQEAgLTgyLDcgKzgzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3ZpYV9jb21wYWN0X21lbW9yeShpbnQgb3JkZXIpIHsgcmV0dXJuIGZhbHNlOyB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IHBhZ2UgKm1hcmtfYWxsb2NhdGVkX25vcHJvZihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBnZnBfZmxhZ3MpXFxuIHtcXG4tXFx0cG9zdF9hbGxvY19ob29rKHBhZ2UsIG9yZGVyLCBfX0dGUF9NT1ZBQkxFKTtcXG4rXFx0cG9zdF9hbGxvY19ob29rKHBhZ2UsIG9yZGVyLCBfX0dGUF9NT1ZBQkxFLCBBTExPQ19ERUZBVUxUKTtcXG4gXFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcXG4gXFx0cmV0dXJuIHBhZ2U7XFxuIH1cXG5AQCAtMTg1MCw3ICsxODUxLDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqY29tcGFjdGlvbl9hbGxvY19ub3Byb2Yoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgZGFcXG4gXFx0fVxcbiBcXHRkc3QgPSAoc3RydWN0IGZvbGlvICopZnJlZXBhZ2U7XFxuIFxcbi1cXHRwb3N0X2FsbG9jX2hvb2soXFx1MDAyNmRzdC1cXHUwMDNlcGFnZSwgb3JkZXIsIF9fR0ZQX01PVkFCTEUpO1xcbitcXHRwb3N0X2FsbG9jX2hvb2soXFx1MDAyNmRzdC1cXHUwMDNlcGFnZSwgb3JkZXIsIF9fR0ZQX01PVkFCTEUsIEFMTE9DX0RFRkFVTFQpO1xcbiBcXHRzZXRfcGFnZV9yZWZjb3VudGVkKFxcdTAwMjZkc3QtXFx1MDAzZXBhZ2UpO1xcbiBcXHRpZiAob3JkZXIpXFxuIFxcdFxcdHByZXBfY29tcG91bmRfcGFnZShcXHUwMDI2ZHN0LVxcdTAwM2VwYWdlLCBvcmRlcik7XFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xcbmluZGV4IGUxYmI4MTYzMWQ1ZWIwLi45OTdhMDhiYTM1NDIzZCAxMDA2NDRcXG4tLS0gYS9tbS9odWdldGxiLmNcXG4rKysgYi9tbS9odWdldGxiLmNcXG5AQCAtNDcsNiArNDcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbm9kZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZV9vd25lci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInBhZ2VfYWxsb2MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImh1Z2V0bGJfdm1lbW1hcC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiaHVnZXRsYl9jbWEuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImh1Z2V0bGJfaW50ZXJuYWwuaFxcXCJcXG5AQCAtMTgwNSw3ICsxODA2LDggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxuIFxcdGlmIChhbGxvY190cnlfaGFyZClcXG4gXFx0XFx0Z2ZwX21hc2sgfD0gX19HRlBfUkVUUllfTUFZRkFJTDtcXG4gXFxuLVxcdGZvbGlvID0gKHN0cnVjdCBmb2xpbyAqKV9fYWxsb2NfZnJvemVuX3BhZ2VzKGdmcF9tYXNrLCBvcmRlciwgbmlkLCBubWFzayk7XFxuK1xcdGZvbGlvID0gKHN0cnVjdCBmb2xpbyAqKV9fYWxsb2NfZnJvemVuX3BhZ2VzKGdmcF9tYXNrLCBvcmRlciwgbmlkLCBubWFzayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBBTExPQ19ERUZBVUxUKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIElmIHdlIGRpZCBub3Qgc3BlY2lmeSBfX0dGUF9SRVRSWV9NQVlGQUlMLCBidXQgc3RpbGwgZ290IGFcXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcXG5pbmRleCA0MzBhYTcyYTQ1NzU4MS4uMzY5YzY1NmM2M2ZhODAgMTAwNjQ0XFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxcbisrKyBiL21tL2ludGVybmFsLmhcXG5AQCAtNjU4LDE2NSArNjU4LDYgQEAgZXh0ZXJuIGludCBkZWZyYWdfbW9kZTtcXG4gdm9pZCBzZXR1cF9wZXJfem9uZV93bWFya3Modm9pZCk7XFxuIHZvaWQgY2FsY3VsYXRlX21pbl9mcmVlX2tieXRlcyh2b2lkKTtcXG4gaW50IF9fbWVtaW5pdCBpbml0X3Blcl96b25lX3dtYXJrX21pbih2b2lkKTtcXG4tdm9pZCBwYWdlX2FsbG9jX3N5c2N0bF9pbml0KHZvaWQpO1xcbi1cXG4tLypcXG4tICogU3RydWN0dXJlIGZvciBob2xkaW5nIHRoZSBtb3N0bHkgaW1tdXRhYmxlIGFsbG9jYXRpb24gcGFyYW1ldGVycyBwYXNzZWRcXG4tICogYmV0d2VlbiBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gYWxsb2NhdGlvbnMsIGluY2x1ZGluZyB0aGUgYWxsb2NfcGFnZXMqXFxuLSAqIGZhbWlseSBvZiBmdW5jdGlvbnMuXFxuLSAqXFxuLSAqIG5vZGVtYXNrLCBtaWdyYXRldHlwZSBhbmQgaGlnaGVzdF96b25laWR4IGFyZSBpbml0aWFsaXplZCBvbmx5IG9uY2UgaW5cXG4tICogX19hbGxvY19wYWdlcygpIGFuZCB0aGVuIG5ldmVyIGNoYW5nZS5cXG4tICpcXG4tICogem9uZWxpc3QsIHByZWZlcnJlZF96b25lIGFuZCBoaWdoZXN0X3pvbmVpZHggYXJlIHNldCBmaXJzdCBpblxcbi0gKiBfX2FsbG9jX3BhZ2VzKCkgZm9yIHRoZSBmYXN0IHBhdGgsIGFuZCBtaWdodCBiZSBsYXRlciBjaGFuZ2VkXFxuLSAqIGluIF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoKS4gQWxsIG90aGVyIGZ1bmN0aW9ucyBwYXNzIHRoZSB3aG9sZSBzdHJ1Y3R1cmVcXG4tICogYnkgYSBjb25zdCBwb2ludGVyLlxcbi0gKi9cXG4tc3RydWN0IGFsbG9jX2NvbnRleHQge1xcbi1cXHRzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0O1xcbi1cXHRjb25zdCBub2RlbWFza190ICpub2RlbWFzaztcXG4tXFx0c3RydWN0IHpvbmVyZWYgKnByZWZlcnJlZF96b25lcmVmO1xcbi1cXHRpbnQgbWlncmF0ZXR5cGU7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBoaWdoZXN0X3pvbmVpZHggcmVwcmVzZW50cyBoaWdoZXN0IHVzYWJsZSB6b25lIGluZGV4IG9mXFxuLVxcdCAqIHRoZSBhbGxvY2F0aW9uIHJlcXVlc3QuIER1ZSB0byB0aGUgbmF0dXJlIG9mIHRoZSB6b25lLFxcbi1cXHQgKiBtZW1vcnkgb24gbG93ZXIgem9uZSB0aGFuIHRoZSBoaWdoZXN0X3pvbmVpZHggd2lsbCBiZVxcbi1cXHQgKiBwcm90ZWN0ZWQgYnkgbG93bWVtX3Jlc2VydmVbaGlnaGVzdF96b25laWR4XS5cXG4tXFx0ICpcXG4tXFx0ICogaGlnaGVzdF96b25laWR4IGlzIGFsc28gdXNlZCBieSByZWNsYWltL2NvbXBhY3Rpb24gdG8gbGltaXRcXG4tXFx0ICogdGhlIHRhcmdldCB6b25lIHNpbmNlIGhpZ2hlciB6b25lIHRoYW4gdGhpcyBpbmRleCBjYW5ub3QgYmVcXG4tXFx0ICogdXNhYmxlIGZvciB0aGlzIGFsbG9jYXRpb24gcmVxdWVzdC5cXG4tXFx0ICovXFxuLVxcdGVudW0gem9uZV90eXBlIGhpZ2hlc3Rfem9uZWlkeDtcXG4tXFx0Ym9vbCBzcHJlYWRfZGlydHlfcGFnZXM7XFxuLX07XFxuLVxcbi0vKlxcbi0gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG9yZGVyIG9mIGEgZnJlZSBwYWdlIGluIHRoZSBidWRkeSBzeXN0ZW0uIEluXFxuLSAqIGdlbmVyYWwsIHBhZ2Vfem9uZShwYWdlKS1cXHUwMDNlbG9jayBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlciB0byBwcmV2ZW50IHRoZVxcbi0gKiBwYWdlIGZyb20gYmVpbmcgYWxsb2NhdGVkIGluIHBhcmFsbGVsIGFuZCByZXR1cm5pbmcgZ2FyYmFnZSBhcyB0aGUgb3JkZXIuXFxuLSAqIElmIGEgY2FsbGVyIGRvZXMgbm90IGhvbGQgcGFnZV96b25lKHBhZ2UpLVxcdTAwM2Vsb2NrLCBpdCBtdXN0IGd1YXJhbnRlZSB0aGF0IHRoZVxcbi0gKiBwYWdlIGNhbm5vdCBiZSBhbGxvY2F0ZWQgb3IgbWVyZ2VkIGluIHBhcmFsbGVsLiBBbHRlcm5hdGl2ZWx5LCBpdCBtdXN0XFxuLSAqIGhhbmRsZSBpbnZhbGlkIHZhbHVlcyBncmFjZWZ1bGx5LCBhbmQgdXNlIGJ1ZGR5X29yZGVyX3Vuc2FmZSgpIGJlbG93Llxcbi0gKi9cXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYnVkZHlfb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLXtcXG4tXFx0LyogUGFnZUJ1ZGR5KCkgbXVzdCBiZSBjaGVja2VkIGJ5IHRoZSBjYWxsZXIgKi9cXG4tXFx0cmV0dXJuIHBhZ2VfcHJpdmF0ZShwYWdlKTtcXG4tfVxcbi1cXG4tLypcXG4tICogTGlrZSBidWRkeV9vcmRlcigpLCBidXQgZm9yIGNhbGxlcnMgd2hvIGNhbm5vdCBhZmZvcmQgdG8gaG9sZCB0aGUgem9uZSBsb2NrLlxcbi0gKiBQYWdlQnVkZHkoKSBzaG91bGQgYmUgY2hlY2tlZCBmaXJzdCBieSB0aGUgY2FsbGVyIHRvIG1pbmltaXplIHJhY2Ugd2luZG93LFxcbi0gKiBhbmQgaW52YWxpZCB2YWx1ZXMgbXVzdCBiZSBoYW5kbGVkIGdyYWNlZnVsbHkuXFxuLSAqXFxuLSAqIFJFQURfT05DRSBpcyB1c2VkIHNvIHRoYXQgaWYgdGhlIGNhbGxlciBhc3NpZ25zIHRoZSByZXN1bHQgaW50byBhIGxvY2FsXFxuLSAqIHZhcmlhYmxlIGFuZCBlLmcuIHRlc3RzIGl0IGZvciB2YWxpZCByYW5nZSBiZWZvcmUgdXNpbmcsIHRoZSBjb21waWxlciBjYW5ub3RcXG4tICogZGVjaWRlIHRvIHJlbW92ZSB0aGUgdmFyaWFibGUgYW5kIGlubGluZSB0aGUgcGFnZV9wcml2YXRlKHBhZ2UpIG11bHRpcGxlXFxuLSAqIHRpbWVzLCBwb3RlbnRpYWxseSBvYnNlcnZpbmcgZGlmZmVyZW50IHZhbHVlcyBpbiB0aGUgdGVzdHMgYW5kIHRoZSBhY3R1YWxcXG4tICogdXNlIG9mIHRoZSByZXN1bHQuXFxuLSAqL1xcbi0jZGVmaW5lIGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKVxcdFJFQURfT05DRShwYWdlX3ByaXZhdGUocGFnZSkpXFxuLVxcbi0vKlxcbi0gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIGEgcGFnZSBpcyBmcmVlIFxcdTAwMjZcXHUwMDI2IGlzIHRoZSBidWRkeVxcbi0gKiB3ZSBjYW4gY29hbGVzY2UgYSBwYWdlIGFuZCBpdHMgYnVkZHkgaWZcXG4tICogKGEpIHRoZSBidWRkeSBpcyBub3QgaW4gYSBob2xlIChjaGVjayBiZWZvcmUgY2FsbGluZyEpIFxcdTAwMjZcXHUwMDI2XFxuLSAqIChiKSB0aGUgYnVkZHkgaXMgaW4gdGhlIGJ1ZGR5IHN5c3RlbSBcXHUwMDI2XFx1MDAyNlxcbi0gKiAoYykgYSBwYWdlIGFuZCBpdHMgYnVkZHkgaGF2ZSB0aGUgc2FtZSBvcmRlciBcXHUwMDI2XFx1MDAyNlxcbi0gKiAoZCkgYSBwYWdlIGFuZCBpdHMgYnVkZHkgYXJlIGluIHRoZSBzYW1lIHpvbmUuXFxuLSAqXFxuLSAqIEZvciByZWNvcmRpbmcgd2hldGhlciBhIHBhZ2UgaXMgaW4gdGhlIGJ1ZGR5IHN5c3RlbSwgd2Ugc2V0IFBhZ2VCdWRkeS5cXG4tICogU2V0dGluZywgY2xlYXJpbmcsIGFuZCB0ZXN0aW5nIFBhZ2VCdWRkeSBpcyBzZXJpYWxpemVkIGJ5IHpvbmUtXFx1MDAzZWxvY2suXFxuLSAqXFxuLSAqIEZvciByZWNvcmRpbmcgcGFnZSdzIG9yZGVyLCB3ZSB1c2UgcGFnZV9wcml2YXRlKHBhZ2UpLlxcbi0gKi9cXG4tc3RhdGljIGlubGluZSBib29sIHBhZ2VfaXNfYnVkZHkoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBwYWdlICpidWRkeSxcXG4tXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBvcmRlcilcXG4te1xcbi1cXHRpZiAoIXBhZ2VfaXNfZ3VhcmQoYnVkZHkpIFxcdTAwMjZcXHUwMDI2ICFQYWdlQnVkZHkoYnVkZHkpKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcbi1cXHRpZiAoYnVkZHlfb3JkZXIoYnVkZHkpICE9IG9yZGVyKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiB6b25lIGNoZWNrIGlzIGRvbmUgbGF0ZSB0byBhdm9pZCB1c2VsZXNzbHkgY2FsY3VsYXRpbmdcXG4tXFx0ICogem9uZS9ub2RlIGlkcyBmb3IgcGFnZXMgdGhhdCBjb3VsZCBuZXZlciBtZXJnZS5cXG4tXFx0ICovXFxuLVxcdGlmIChwYWdlX3pvbmVfaWQocGFnZSkgIT0gcGFnZV96b25lX2lkKGJ1ZGR5KSlcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXG4tXFx0Vk1fQlVHX09OX1BBR0UocGFnZV9jb3VudChidWRkeSkgIT0gMCwgYnVkZHkpO1xcbi1cXG4tXFx0cmV0dXJuIHRydWU7XFxuLX1cXG4tXFxuLS8qXFxuLSAqIExvY2F0ZSB0aGUgc3RydWN0IHBhZ2UgZm9yIGJvdGggdGhlIG1hdGNoaW5nIGJ1ZGR5IGluIG91clxcbi0gKiBwYWlyIChidWRkeTEpIGFuZCB0aGUgY29tYmluZWQgTyhuKzEpIHBhZ2UgdGhleSBmb3JtIChwYWdlKS5cXG4tICpcXG4tICogMSkgQW55IGJ1ZGR5IEIxIHdpbGwgaGF2ZSBhbiBvcmRlciBPIHR3aW4gQjIgd2hpY2ggc2F0aXNmaWVzXFxuLSAqIHRoZSBmb2xsb3dpbmcgZXF1YXRpb246XFxuLSAqICAgICBCMiA9IEIxIF4gKDEgXFx1MDAzY1xcdTAwM2MgTylcXG4tICogRm9yIGV4YW1wbGUsIGlmIHRoZSBzdGFydGluZyBidWRkeSAoYnVkZHkyKSBpcyAjOCBpdHMgb3JkZXJcXG4tICogMSBidWRkeSBpcyAjMTA6XFxuLSAqICAgICBCMiA9IDggXiAoMSBcXHUwMDNjXFx1MDAzYyAxKSA9IDggXiAyID0gMTBcXG4tICpcXG4tICogMikgQW55IGJ1ZGR5IEIgd2lsbCBoYXZlIGFuIG9yZGVyIE8rMSBwYXJlbnQgUCB3aGljaFxcbi0gKiBzYXRpc2ZpZXMgdGhlIGZvbGxvd2luZyBlcXVhdGlvbjpcXG4tICogICAgIFAgPSBCIFxcdTAwMjYgfigxIFxcdTAwM2NcXHUwMDNjIE8pXFxuLSAqXFxuLSAqIEFzc3VtcHRpb246ICpfbWVtX21hcCBpcyBjb250aWd1b3VzIGF0IGxlYXN0IHVwIHRvIE1BWF9QQUdFX09SREVSXFxuLSAqL1xcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcXG4tX19maW5kX2J1ZGR5X3Bmbih1bnNpZ25lZCBsb25nIHBhZ2VfcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLXtcXG4tXFx0cmV0dXJuIHBhZ2VfcGZuIF4gKDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbi19XFxuLVxcbi0vKlxcbi0gKiBGaW5kIHRoZSBidWRkeSBvZiBAcGFnZSBhbmQgdmFsaWRhdGUgaXQuXFxuLSAqIEBwYWdlOiBUaGUgaW5wdXQgcGFnZVxcbi0gKiBAcGZuOiBUaGUgcGZuIG9mIHRoZSBwYWdlLCBpdCBzYXZlcyBhIGNhbGwgdG8gcGFnZV90b19wZm4oKSB3aGVuIHRoZVxcbi0gKiAgICAgICBmdW5jdGlvbiBpcyB1c2VkIGluIHRoZSBwZXJmb3JtYW5jZS1jcml0aWNhbCBfX2ZyZWVfb25lX3BhZ2UoKS5cXG4tICogQG9yZGVyOiBUaGUgb3JkZXIgb2YgdGhlIHBhZ2VcXG4tICogQGJ1ZGR5X3BmbjogVGhlIG91dHB1dCBwb2ludGVyIHRvIHRoZSBidWRkeSBwZm4sIGl0IGFsc28gc2F2ZXMgYSBjYWxsIHRvXFxuLSAqICAgICAgICAgICAgIHBhZ2VfdG9fcGZuKCkuXFxuLSAqXFxuLSAqIFRoZSBmb3VuZCBidWRkeSBjYW4gYmUgYSBub24gUGFnZUJ1ZGR5LCBvdXQgb2YgQHBhZ2UncyB6b25lLCBvciBpdHMgb3JkZXIgaXNcXG4tICogbm90IHRoZSBzYW1lIGFzIEBwYWdlLiBUaGUgdmFsaWRhdGlvbiBpcyBuZWNlc3NhcnkgYmVmb3JlIHVzZSBpdC5cXG4tICpcXG4tICogUmV0dXJuOiB0aGUgZm91bmQgYnVkZHkgcGFnZSBvciBOVUxMIGlmIG5vdCBmb3VuZC5cXG4tICovXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmZpbmRfYnVkZHlfcGFnZV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGxvbmcgKmJ1ZGR5X3BmbilcXG4te1xcbi1cXHR1bnNpZ25lZCBsb25nIF9fYnVkZHlfcGZuID0gX19maW5kX2J1ZGR5X3BmbihwZm4sIG9yZGVyKTtcXG4tXFx0c3RydWN0IHBhZ2UgKmJ1ZGR5O1xcbi1cXG4tXFx0YnVkZHkgPSBwYWdlICsgKF9fYnVkZHlfcGZuIC0gcGZuKTtcXG4tXFx0aWYgKGJ1ZGR5X3BmbilcXG4tXFx0XFx0KmJ1ZGR5X3BmbiA9IF9fYnVkZHlfcGZuO1xcbi1cXG4tXFx0aWYgKHBhZ2VfaXNfYnVkZHkocGFnZSwgYnVkZHksIG9yZGVyKSlcXG4tXFx0XFx0cmV0dXJuIGJ1ZGR5O1xcbi1cXHRyZXR1cm4gTlVMTDtcXG4tfVxcbi1cXG4tZXh0ZXJuIHN0cnVjdCBwYWdlICpfX3BhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4tXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBlbmRfcGZuLCBzdHJ1Y3Qgem9uZSAqem9uZSk7XFxuLVxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpwYWdlYmxvY2tfcGZuX3RvX3BhZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuLVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kX3Bmbiwgc3RydWN0IHpvbmUgKnpvbmUpXFxuLXtcXG4tXFx0aWYgKHpvbmUtXFx1MDAzZWNvbnRpZ3VvdXMpXFxuLVxcdFxcdHJldHVybiBwZm5fdG9fcGFnZShzdGFydF9wZm4pO1xcbi1cXG4tXFx0cmV0dXJuIF9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKHN0YXJ0X3BmbiwgZW5kX3Bmbiwgem9uZSk7XFxuLX1cXG4gXFxuIHZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSk7XFxuIGJvb2wgcGZuX3JhbmdlX2ludGVyc2VjdHNfem9uZXMoaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuQEAgLTgzMSw4ICs2NzIsNiBAQCBleHRlcm4gaW50IF9faXNvbGF0ZV9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XFxuIGV4dGVybiB2b2lkIF9fcHV0YmFja19pc29sYXRlZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuIFxcdFxcdFxcdFxcdCAgICBpbnQgbXQpO1xcbiBleHRlcm4gdm9pZCBtZW1ibG9ja19mcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbi1leHRlcm4gdm9pZCBfX2ZyZWVfcGFnZXNfY29yZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi1cXHRcXHRlbnVtIG1lbWluaXRfY29udGV4dCBjb250ZXh0KTtcXG4gXFxuIC8qXFxuICAqIFRoaXMgd2lsbCBoYXZlIG5vIGVmZmVjdCwgb3RoZXIgdGhhbiBwb3NzaWJseSBnZW5lcmF0aW5nIGEgd2FybmluZywgaWYgdGhlXFxuQEAgLTkxNCw0MCArNzUzLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGluaXRfY29tcG91bmRfdGFpbChzdHJ1Y3QgcGFnZSAqdGFpbCxcXG4gXFx0cHJlcF9jb21wb3VuZF90YWlsKHRhaWwsIGhlYWQsIG9yZGVyKTtcXG4gfVxcbiBcXG4tdm9pZCBwb3N0X2FsbG9jX2hvb2soc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzKTtcXG4tZXh0ZXJuIGJvb2wgZnJlZV9wYWdlc19wcmVwYXJlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbi1cXG4tZXh0ZXJuIGludCB1c2VyX21pbl9mcmVlX2tieXRlcztcXG4tXFxuLXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IG5pZCxcXG4tXFx0XFx0bm9kZW1hc2tfdCAqKTtcXG4tI2RlZmluZSBfX2FsbG9jX2Zyb3plbl9wYWdlcyguLi4pIFxcXFxcXG4tXFx0YWxsb2NfaG9va3MoX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG4tdm9pZCBmcmVlX2Zyb3plbl9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG4tdm9pZCBmcmVlX3VucmVmX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCk7XFxuLVxcbi0jaWZkZWYgQ09ORklHX05VTUFcXG4tc3RydWN0IHBhZ2UgKmFsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QsIHVuc2lnbmVkIGludCBvcmRlcik7XFxuLSNlbHNlXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmFsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLXtcXG4tXFx0cmV0dXJuIF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnAsIG9yZGVyLCBudW1hX25vZGVfaWQoKSwgTlVMTCk7XFxuLX1cXG4tI2VuZGlmXFxuLVxcbi0jZGVmaW5lIGFsbG9jX2Zyb3plbl9wYWdlcyguLi4pIFxcXFxcXG4tXFx0YWxsb2NfaG9va3MoYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihfX1ZBX0FSR1NfXykpXFxuLVxcbi1zdHJ1Y3QgcGFnZSAqYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9ja19ub3Byb2YoZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbmlkLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbi0jZGVmaW5lIGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2soLi4uKSBcXFxcXFxuLVxcdGFsbG9jX2hvb2tzKGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG4tdm9pZCBmcmVlX2Zyb3plbl9wYWdlc19ub2xvY2soc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XFxuLVxcbi1leHRlcm4gdm9pZCB6b25lX3BjcF9yZXNldChzdHJ1Y3Qgem9uZSAqem9uZSk7XFxuLWV4dGVybiB2b2lkIHpvbmVfcGNwX2Rpc2FibGUoc3RydWN0IHpvbmUgKnpvbmUpO1xcbi1leHRlcm4gdm9pZCB6b25lX3BjcF9lbmFibGUoc3RydWN0IHpvbmUgKnpvbmUpO1xcbi1leHRlcm4gdm9pZCB6b25lX3BjcF9pbml0KHN0cnVjdCB6b25lICp6b25lKTtcXG4tXFxuIGV4dGVybiB2b2lkICptZW1tYXBfYWxsb2MocGh5c19hZGRyX3Qgc2l6ZSwgcGh5c19hZGRyX3QgYWxpZ24sXFxuIFxcdFxcdFxcdCAgcGh5c19hZGRyX3QgbWluX2FkZHIsXFxuIFxcdFxcdFxcdCAgaW50IG5pZCwgYm9vbCBleGFjdF9uaWQpO1xcbkBAIC0xMTAxLDIzICs5MDYsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9jbWFfcGFnZWJsb2NrKHN0cnVjdCBwYWdlICpwYWdlKVxcbiB9XFxuICNlbmRpZlxcbiBcXG4tZW51bSBmYWxsYmFja19yZXN1bHQge1xcbi1cXHQvKiBGb3VuZCBzdWl0YWJsZSBtaWdyYXRldHlwZSwgKm10X291dCBpcyB2YWxpZC4gKi9cXG4tXFx0RkFMTEJBQ0tfRk9VTkQsXFxuLVxcdC8qIE5vIGZhbGxiYWNrIGZvdW5kIGluIHJlcXVlc3RlZCBvcmRlci4gKi9cXG4tXFx0RkFMTEJBQ0tfRU1QVFksXFxuLVxcdC8qIFBhc3NlZCBAY2xhaW1hYmxlLCBidXQgY2xhaW1pbmcgd2hvbGUgYmxvY2sgaXMgYSBiYWQgaWRlYS4gKi9cXG4tXFx0RkFMTEJBQ0tfTk9DTEFJTSxcXG4tfTtcXG4tZW51bSBmYWxsYmFja19yZXN1bHRcXG4tZmluZF9zdWl0YWJsZV9mYWxsYmFjayhzdHJ1Y3QgZnJlZV9hcmVhICphcmVhLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLVxcdFxcdCAgICAgICBpbnQgbWlncmF0ZXR5cGUsIGJvb2wgY2xhaW1hYmxlLCBpbnQgKm10X291dCk7XFxuLVxcbi1zdGF0aWMgaW5saW5lIGJvb2wgZnJlZV9hcmVhX2VtcHR5KHN0cnVjdCBmcmVlX2FyZWEgKmFyZWEsIGludCBtaWdyYXRldHlwZSlcXG4te1xcbi1cXHRyZXR1cm4gbGlzdF9lbXB0eShcXHUwMDI2YXJlYS1cXHUwMDNlZnJlZV9saXN0W21pZ3JhdGV0eXBlXSk7XFxuLX1cXG4tXFxuIC8qIG1tL3V0aWwuYyAqL1xcbiBzdHJ1Y3QgYW5vbl92bWEgKmZvbGlvX2Fub25fdm1hKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBcXG5AQCAtMTQ0NSw1MSArMTIzMywxMCBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyAgX19tdXN0X2NoZWNrIHZtX21tYXBfcGdvZmYoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgbG9uZyxcXG4gdW5zaWduZWQgbG9uZyByZWNsYWltX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpO1xcbiB1bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KTtcXG4tLyogVGhlIEFMTE9DX1dNQVJLIGJpdHMgYXJlIHVzZWQgYXMgYW4gaW5kZXggdG8gem9uZS1cXHUwMDNld2F0ZXJtYXJrICovXFxuLSNkZWZpbmUgQUxMT0NfV01BUktfTUlOXFx0XFx0V01BUktfTUlOXFxuLSNkZWZpbmUgQUxMT0NfV01BUktfTE9XXFx0XFx0V01BUktfTE9XXFxuLSNkZWZpbmUgQUxMT0NfV01BUktfSElHSFxcdFdNQVJLX0hJR0hcXG4tI2RlZmluZSBBTExPQ19OT19XQVRFUk1BUktTXFx0MHgwNCAvKiBkb24ndCBjaGVjayB3YXRlcm1hcmtzIGF0IGFsbCAqL1xcbi1cXG4tLyogTWFzayB0byBnZXQgdGhlIHdhdGVybWFyayBiaXRzICovXFxuLSNkZWZpbmUgQUxMT0NfV01BUktfTUFTS1xcdChBTExPQ19OT19XQVRFUk1BUktTLTEpXFxuLVxcbi0vKlxcbi0gKiBPbmx5IE1NVSBhcmNocyBoYXZlIGFzeW5jIG9vbSB2aWN0aW0gcmVjbGFpbSAtIGFrYSBvb21fcmVhcGVyIHNvIHdlXFxuLSAqIGNhbm5vdCBhc3N1bWUgYSByZWR1Y2VkIGFjY2VzcyB0byBtZW1vcnkgcmVzZXJ2ZXMgaXMgc3VmZmljaWVudCBmb3JcXG4tICogIU1NVVxcbi0gKi9cXG4tI2lmZGVmIENPTkZJR19NTVVcXG4tI2RlZmluZSBBTExPQ19PT01cXHRcXHQweDA4XFxuLSNlbHNlXFxuLSNkZWZpbmUgQUxMT0NfT09NXFx0XFx0QUxMT0NfTk9fV0FURVJNQVJLU1xcbi0jZW5kaWZcXG4tXFxuLSNkZWZpbmUgQUxMT0NfTk9OX0JMT0NLXFx0XFx0IDB4MTAgLyogQ2FsbGVyIGNhbm5vdCBibG9jay4gQWxsb3cgYWNjZXNzXFxuLVxcdFxcdFxcdFxcdCAgICAgICAqIHRvIDI1JSBvZiB0aGUgbWluIHdhdGVybWFyayBvclxcbi1cXHRcXHRcXHRcXHQgICAgICAgKiA2Mi41JSBpZiBfX0dGUF9ISUdIIGlzIHNldC5cXG4tXFx0XFx0XFx0XFx0ICAgICAgICovXFxuLSNkZWZpbmUgQUxMT0NfTUlOX1JFU0VSVkVcXHQgMHgyMCAvKiBfX0dGUF9ISUdIIHNldC4gQWxsb3cgYWNjZXNzIHRvIDUwJVxcbi1cXHRcXHRcXHRcXHQgICAgICAgKiBvZiB0aGUgbWluIHdhdGVybWFyay5cXG4tXFx0XFx0XFx0XFx0ICAgICAgICovXFxuLSNkZWZpbmUgQUxMT0NfQ1BVU0VUXFx0XFx0IDB4NDAgLyogY2hlY2sgZm9yIGNvcnJlY3QgY3B1c2V0ICovXFxuLSNkZWZpbmUgQUxMT0NfQ01BXFx0XFx0IDB4ODAgLyogYWxsb3cgYWxsb2NhdGlvbnMgZnJvbSBDTUEgYXJlYXMgKi9cXG4tI2lmZGVmIENPTkZJR19aT05FX0RNQTMyXFxuLSNkZWZpbmUgQUxMT0NfTk9GUkFHTUVOVFxcdDB4MTAwIC8qIGF2b2lkIG1peGluZyBwYWdlYmxvY2sgdHlwZXMgKi9cXG4tI2Vsc2VcXG4tI2RlZmluZSBBTExPQ19OT0ZSQUdNRU5UXFx0ICAweDBcXG4tI2VuZGlmXFxuLSNkZWZpbmUgQUxMT0NfSElHSEFUT01JQ1xcdDB4MjAwIC8qIEFsbG93cyBhY2Nlc3MgdG8gTUlHUkFURV9ISUdIQVRPTUlDICovXFxuLSNkZWZpbmUgQUxMT0NfVFJZTE9DS1xcdFxcdDB4NDAwIC8qIE9ubHkgdXNlIHNwaW5fdHJ5bG9jayBpbiBhbGxvY2F0aW9uIHBhdGggKi9cXG4tI2RlZmluZSBBTExPQ19LU1dBUERcXHRcXHQweDgwMCAvKiBhbGxvdyB3YWtpbmcgb2Yga3N3YXBkLCBfX0dGUF9LU1dBUERfUkVDTEFJTSBzZXQgKi9cXG4tXFxuLS8qIEZsYWdzIHRoYXQgYWxsb3cgYWxsb2NhdGlvbnMgYmVsb3cgdGhlIG1pbiB3YXRlcm1hcmsuICovXFxuLSNkZWZpbmUgQUxMT0NfUkVTRVJWRVMgKEFMTE9DX05PTl9CTE9DS3xBTExPQ19NSU5fUkVTRVJWRXxBTExPQ19ISUdIQVRPTUlDfEFMTE9DX09PTSlcXG4gXFxuIGVudW0gdHR1X2ZsYWdzO1xcbiBzdHJ1Y3QgdGxiZmx1c2hfdW5tYXBfYmF0Y2g7XFxuIFxcbi1cXG4gLypcXG4gICogb25seSBmb3IgTU0gaW50ZXJuYWwgd29yayBpdGVtcyB3aGljaCBkbyBub3QgZGVwZW5kIG9uXFxuICAqIGFueSBhbGxvY2F0aW9ucyBvciBsb2NrcyB3aGljaCBtaWdodCBkZXBlbmQgb24gYWxsb2NhdGlvbnNcXG5kaWZmIC0tZ2l0IGEvbW0va2h1Z2VwYWdlZC5jIGIvbW0va2h1Z2VwYWdlZC5jXFxuaW5kZXggNjE3YmNhNzZkYjQ5YjYuLjU4ZTE0ZDE1NDNlY2I0IDEwMDY0NFxcbi0tLSBhL21tL2todWdlcGFnZWQuY1xcbisrKyBiL21tL2todWdlcGFnZWQuY1xcbkBAIC0yNiw2ICsyNiw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3RsYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInBhZ2VfYWxsb2MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm1tX3Nsb3QuaFxcXCJcXG4gXFxuIGVudW0gc2Nhbl9yZXN1bHQge1xcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbmluZGV4IDQ5MTZhYjE0NTMyNTczLi5iZjcxN2VjNTk1MDg3ZCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXFxuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbkBAIC02Niw2ICs2Niw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMvbWVtb3J5LWZhaWx1cmUuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJzd2FwLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJwYWdlX2FsbG9jLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbiBcXG4gc3RhdGljIGludCBzeXNjdGxfbWVtb3J5X2ZhaWx1cmVfZWFybHlfa2lsbCBfX3JlYWRfbW9zdGx5O1xcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xcbmluZGV4IDdhYzE5ZmFiMjI2MzI0Li45NTM5ZTQwYzQ3OGVkYiAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jXFxuKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xcbkBAIC00MCw2ICs0MCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vdGxiZmx1c2guaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwicGFnZV9hbGxvYy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwic2h1ZmZsZS5oXFxcIlxcbiBcXG4gZW51bSB7XFxuZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmNcXG5pbmRleCAzNjY5OWZhYmQzYzIyMy4uNDFkNjMwZjBlYTgyMTIgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtcG9saWN5LmNcXG4rKysgYi9tbS9tZW1wb2xpY3kuY1xcbkBAIC0xMTksNiArMTE5LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbW9yeS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJwYWdlX2FsbG9jLmhcXFwiXFxuIFxcbiAvKiBJbnRlcm5hbCBmbGFncyAqL1xcbiAjZGVmaW5lIE1QT0xfTUZfRElTQ09OVElHX09LIChNUE9MX01GX0lOVEVSTkFMIFxcdTAwM2NcXHUwMDNjIDApXFx0LyogU2tpcCBjaGVja3MgZm9yIGNvbnRpbnVvdXMgdm1hcyAqL1xcbkBAIC0yNDI1LDkgKzI0MjYsMTEgQEAgc3RhdGljIHN0cnVjdCBwYWdlICphbGxvY19wYWdlc19wcmVmZXJyZWRfbWFueShnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcXG4gXFx0ICovXFxuIFxcdHByZWZlcnJlZF9nZnAgPSBnZnAgfCBfX0dGUF9OT1dBUk47XFxuIFxcdHByZWZlcnJlZF9nZnAgXFx1MDAyNj0gfihfX0dGUF9ESVJFQ1RfUkVDTEFJTSB8IF9fR0ZQX05PRkFJTCk7XFxuLVxcdHBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YocHJlZmVycmVkX2dmcCwgb3JkZXIsIG5pZCwgbm9kZW1hc2spO1xcbitcXHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKHByZWZlcnJlZF9nZnAsIG9yZGVyLCBuaWQsIG5vZGVtYXNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICBBTExPQ19ERUZBVUxUKTtcXG4gXFx0aWYgKCFwYWdlKVxcbi1cXHRcXHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcCwgb3JkZXIsIG5pZCwgTlVMTCk7XFxuK1xcdFxcdHBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwLCBvcmRlciwgbmlkLCBOVUxMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBBTExPQ19ERUZBVUxUKTtcXG4gXFxuIFxcdHJldHVybiBwYWdlO1xcbiB9XFxuQEAgLTI0NzUsNyArMjQ3OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbXBvbChnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdHBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoXFxuIFxcdFxcdFxcdFxcdGdmcCB8IF9fR0ZQX1RISVNOT0RFIHwgX19HRlBfTk9SRVRSWSwgb3JkZXIsXFxuLVxcdFxcdFxcdFxcdG5pZCwgTlVMTCk7XFxuK1xcdFxcdFxcdFxcdG5pZCwgTlVMTCwgQUxMT0NfREVGQVVMVCk7XFxuIFxcdFxcdFxcdGlmIChwYWdlIHx8ICEoZ2ZwIFxcdTAwMjYgX19HRlBfRElSRUNUX1JFQ0xBSU0pKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gcGFnZTtcXG4gXFx0XFx0XFx0LypcXG5AQCAtMjQ4Nyw3ICsyNDkwLDcgQEAgc3RhdGljIHN0cnVjdCBwYWdlICphbGxvY19wYWdlc19tcG9sKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdHBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwLCBvcmRlciwgbmlkLCBub2RlbWFzayk7XFxuK1xcdHBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwLCBvcmRlciwgbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkocG9sLVxcdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSB8fFxcbiBcXHRcXHQgICAgIHBvbC1cXHUwMDNlbW9kZSA9PSBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkUpIFxcdTAwMjZcXHUwMDI2IHBhZ2UpIHtcXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXFxuaW5kZXggNmI4OWUyZTc3NDMxMTIuLjM1NjQxZmFjMTA5ZDUzIDEwMDY0NFxcbi0tLSBhL21tL21tX2luaXQuY1xcbisrKyBiL21tL21tX2luaXQuY1xcbkBAIC0zMyw2ICszMyw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXhlY19oYW5kb3Zlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaHVnZXRsYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInBhZ2VfYWxsb2MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInNsYWIuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInNodWZmbGUuaFxcXCJcXG4gXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xcbmluZGV4IDYyZjcxZWNlN2NhMTc3Li44MDNiMzJlNWE1ZTQ3ZiAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcXG4rKysgYi9tbS9wYWdlX2FsbG9jLmNcXG5AQCAtNTYsNiArNTYsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGdhbGxvY190YWcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9kaXY2NC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInBhZ2VfYWxsb2MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInNodWZmbGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInBhZ2VfcmVwb3J0aW5nLmhcXFwiXFxuIFxcbkBAIC0xMjQ4LDcgKzEyNDksNyBAQCB2b2lkIF9fY2xlYXJfcGFnZV90YWdfcmVmKHN0cnVjdCBwYWdlICpwYWdlKVxcbiAvKiBTaG91bGQgYmUgY2FsbGVkIG9ubHkgaWYgbWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkgKi9cXG4gc3RhdGljIG5vaW5saW5lXFxuIHZvaWQgX19wZ2FsbG9jX3RhZ19hZGQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG4tXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBuciwgZ2ZwX3QgZ2ZwX2ZsYWdzKVxcbitcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuIHtcXG4gXFx0dW5pb24gcGd0YWdfcmVmX2hhbmRsZSBoYW5kbGU7XFxuIFxcdHVuaW9uIGNvZGV0YWdfcmVmIHJlZjtcXG5AQCAtMTI2MiwxNyArMTI2MywxNyBAQCB2b2lkIF9fcGdhbGxvY190YWdfYWRkKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXFxuIFxcdFxcdCAqIHBhZ2VfZXh0IGlzIG5vdCBhdmFpbGFibGUgeWV0LCByZWNvcmQgdGhlIHBmbiBzbyB3ZSBjYW5cXG4gXFx0XFx0ICogY2xlYXIgdGhlIHRhZyByZWYgbGF0ZXIgd2hlbiBwYWdlX2V4dCBpcyBpbml0aWFsaXplZC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGFsbG9jX3RhZ19hZGRfZWFybHlfcGZuKHBhZ2VfdG9fcGZuKHBhZ2UpLCBnZnBfZmxhZ3MpO1xcbitcXHRcXHRhbGxvY190YWdfYWRkX2Vhcmx5X3BmbihwYWdlX3RvX3BmbihwYWdlKSwgYWxsb2NfZmxhZ3MpO1xcbiBcXHRcXHRpZiAodGFzay1cXHUwMDNlYWxsb2NfdGFnKVxcbiBcXHRcXHRcXHRhbGxvY190YWdfc2V0X2luYWNjdXJhdGUodGFzay1cXHUwMDNlYWxsb2NfdGFnKTtcXG4gXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgcGdhbGxvY190YWdfYWRkKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXFxuLVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBuciwgZ2ZwX3QgZ2ZwX2ZsYWdzKVxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcXG4ge1xcbiBcXHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkpXFxuLVxcdFxcdF9fcGdhbGxvY190YWdfYWRkKHBhZ2UsIHRhc2ssIG5yLCBnZnBfZmxhZ3MpO1xcbitcXHRcXHRfX3BnYWxsb2NfdGFnX2FkZChwYWdlLCB0YXNrLCBuciwgYWxsb2NfZmxhZ3MpO1xcbiB9XFxuIFxcbiAvKiBTaG91bGQgYmUgY2FsbGVkIG9ubHkgaWYgbWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkgKi9cXG5AQCAtMTgwOSw3ICsxODEwLDcgQEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZF9za2lwX2luaXQoZ2ZwX3QgZmxhZ3MpXFxuIH1cXG4gXFxuIGlubGluZSB2b2lkIHBvc3RfYWxsb2NfaG9vayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi1cXHRcXHRcXHRcXHRnZnBfdCBnZnBfZmxhZ3MpXFxuK1xcdFxcdFxcdFxcdGdmcF90IGdmcF9mbGFncywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbiB7XFxuIFxcdGNvbnN0IGJvb2wgemVyb190YWdzID0gZ2ZwX2ZsYWdzIFxcdTAwMjYgX19HRlBfWkVST1RBR1M7XFxuIFxcdGJvb2wgaW5pdCA9ICF3YW50X2luaXRfb25fZnJlZSgpIFxcdTAwMjZcXHUwMDI2IHdhbnRfaW5pdF9vbl9hbGxvYyhnZnBfZmxhZ3MpIFxcdTAwMjZcXHUwMDI2XFxuQEAgLTE4NjAsMTMgKzE4NjEsMTMgQEAgaW5saW5lIHZvaWQgcG9zdF9hbGxvY19ob29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuIFxcbiBcXHRzZXRfcGFnZV9vd25lcihwYWdlLCBvcmRlciwgZ2ZwX2ZsYWdzKTtcXG4gXFx0cGFnZV90YWJsZV9jaGVja19hbGxvYyhwYWdlLCBvcmRlcik7XFxuLVxcdHBnYWxsb2NfdGFnX2FkZChwYWdlLCBjdXJyZW50LCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyLCBnZnBfZmxhZ3MpO1xcbitcXHRwZ2FsbG9jX3RhZ19hZGQocGFnZSwgY3VycmVudCwgMSBcXHUwMDNjXFx1MDAzYyBvcmRlciwgYWxsb2NfZmxhZ3MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBwcmVwX25ld19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGdmcF9mbGFncyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbiB7XFxuLVxcdHBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgZ2ZwX2ZsYWdzKTtcXG4rXFx0cG9zdF9hbGxvY19ob29rKHBhZ2UsIG9yZGVyLCBnZnBfZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcXG4gXFxuIFxcdGlmIChvcmRlciBcXHUwMDI2XFx1MDAyNiAoZ2ZwX2ZsYWdzIFxcdTAwMjYgX19HRlBfQ09NUCkpXFxuIFxcdFxcdHByZXBfY29tcG91bmRfcGFnZShwYWdlLCBvcmRlcik7XFxuQEAgLTI1MzAsNyArMjUzMSw3IEBAIHN0YXRpYyBpbnQgcm1xdWV1ZV9idWxrKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdGludCBpO1xcbiBcXG4tXFx0aWYgKHVubGlrZWx5KGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfVFJZTE9DSykpIHtcXG4rXFx0aWYgKHVubGlrZWx5KGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfTk9MT0NLKSkge1xcbiBcXHRcXHRpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKFxcdTAwMjZ6b25lLVxcdTAwM2Vsb2NrLCBmbGFncykpXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXHR9IGVsc2Uge1xcbkBAIC0zMjE4LDcgKzMyMTksNyBAQCBzdHJ1Y3QgcGFnZSAqcm1xdWV1ZV9idWRkeShzdHJ1Y3Qgem9uZSAqcHJlZmVycmVkX3pvbmUsIHN0cnVjdCB6b25lICp6b25lLFxcbiBcXG4gXFx0ZG8ge1xcbiBcXHRcXHRwYWdlID0gTlVMTDtcXG4tXFx0XFx0aWYgKHVubGlrZWx5KGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfVFJZTE9DSykpIHtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfTk9MT0NLKSkge1xcbiBcXHRcXHRcXHRpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKFxcdTAwMjZ6b25lLVxcdTAwM2Vsb2NrLCBmbGFncykpXFxuIFxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRcXHR9IGVsc2Uge1xcbkBAIC0zNzc0LDggKzM3NzUsOCBAQCBhbGxvY19mbGFnc19ub2ZyYWdtZW50KHN0cnVjdCB6b25lICp6b25lLCBnZnBfdCBnZnBfbWFzaylcXG4gfVxcbiBcXG4gLyogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgY3VycmVudF9nZnBfY29udGV4dCgpIHdoaWNoIGNhbiBjaGFuZ2UgZ2ZwX21hc2sgKi9cXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2ZwX3RvX2FsbG9jX2ZsYWdzX2NtYShnZnBfdCBnZnBfbWFzayxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzX2NtYShnZnBfdCBnZnBfbWFzayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbiB7XFxuICNpZmRlZiBDT05GSUdfQ01BXFxuIFxcdGlmIChnZnBfbWlncmF0ZXR5cGUoZ2ZwX21hc2spID09IE1JR1JBVEVfTU9WQUJMRSlcXG5AQCAtNDQ3NCw3ICs0NDc1LDcgQEAgc3RhdGljIHZvaWQgd2FrZV9hbGxfa3N3YXBkcyh1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxcbi1nZnBfdG9fYWxsb2NfZmxhZ3Nfbm9uYmxvY2tpbmcoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcXG4rYWxsb2NfZmxhZ3Nfbm9uYmxvY2tpbmcoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MgPSAwO1xcbiBcXG5AQCAtNDQ5Nyw3ICs0NDk4LDcgQEAgZ2ZwX3RvX2FsbG9jX2ZsYWdzX25vbmJsb2NraW5nKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XFxuLWdmcF90b19hbGxvY19mbGFncyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxcbithbGxvY19mbGFnc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncyA9IEFMTE9DX1dNQVJLX01JTiB8IEFMTE9DX0NQVVNFVDtcXG4gXFxuQEAgLTQ1MTIsNyArNDUxMyw3IEBAIGdmcF90b19hbGxvY19mbGFncyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxcbiBcXHRpZiAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9LU1dBUERfUkVDTEFJTSlcXG4gXFx0XFx0YWxsb2NfZmxhZ3MgfD0gQUxMT0NfS1NXQVBEO1xcbiBcXG4tXFx0YWxsb2NfZmxhZ3MgfD0gZ2ZwX3RvX2FsbG9jX2ZsYWdzX25vbmJsb2NraW5nKGdmcF9tYXNrLCBvcmRlcik7XFxuK1xcdGFsbG9jX2ZsYWdzIHw9IGFsbG9jX2ZsYWdzX25vbmJsb2NraW5nKGdmcF9tYXNrLCBvcmRlcik7XFxuIFxcbiBcXHRpZiAoIShnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX0RJUkVDVF9SRUNMQUlNKSkge1xcbiBcXHRcXHQvKlxcbkBAIC00NTI1LDcgKzQ1MjYsNyBAQCBnZnBfdG9fYWxsb2NfZmxhZ3MoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcXG4gXFx0fSBlbHNlIGlmICh1bmxpa2VseShydF9vcl9kbF90YXNrKGN1cnJlbnQpKSBcXHUwMDI2XFx1MDAyNiBpbl90YXNrKCkpXFxuIFxcdFxcdGFsbG9jX2ZsYWdzIHw9IEFMTE9DX01JTl9SRVNFUlZFO1xcbiBcXG4tXFx0YWxsb2NfZmxhZ3MgPSBnZnBfdG9fYWxsb2NfZmxhZ3NfY21hKGdmcF9tYXNrLCBhbGxvY19mbGFncyk7XFxuK1xcdGFsbG9jX2ZsYWdzID0gYWxsb2NfZmxhZ3NfY21hKGdmcF9tYXNrLCBhbGxvY19mbGFncyk7XFxuIFxcbiBcXHRpZiAoZGVmcmFnX21vZGUpXFxuIFxcdFxcdGFsbG9jX2ZsYWdzIHw9IEFMTE9DX05PRlJBR01FTlQ7XFxuQEAgLTQ3OTAsOCArNDc5MSwxMiBAQCBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuIFxcdCAqIFRoZSBmYXN0IHBhdGggdXNlcyBjb25zZXJ2YXRpdmUgYWxsb2NfZmxhZ3MgdG8gc3VjY2VlZCBvbmx5IHVudGlsXFxuIFxcdCAqIGtzd2FwZCBuZWVkcyB0byBiZSB3b2tlbiB1cCwgYW5kIHRvIGF2b2lkIHRoZSBjb3N0IG9mIHNldHRpbmcgdXBcXG4gXFx0ICogYWxsb2NfZmxhZ3MgcHJlY2lzZWx5LiBTbyB3ZSBkbyB0aGF0IG5vdy5cXG4rXFx0ICpcXG4rXFx0ICogQ2FuJ3QganVzdCBvciBhbGxvY19mbGFncyBpZiBpdCBjb250YWlucyBXTUFSSyBiaXRzLCBidXQgdGhvc2UgZmxhZ3NcXG4rXFx0ICogc2hvdWxkbid0IGJlIHNldCBpbiBhYy1cXHUwMDNlYWxsb2NfZmxhZ3MuXFxuIFxcdCAqL1xcbi1cXHRhbGxvY19mbGFncyA9IGdmcF90b19hbGxvY19mbGFncyhnZnBfbWFzaywgb3JkZXIpO1xcbitcXHRWTV9XQVJOX09OKGFjLVxcdTAwM2VhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX1dNQVJLX01BU0spO1xcbitcXHRhbGxvY19mbGFncyA9IGFjLVxcdTAwM2VhbGxvY19mbGFncyB8IGFsbG9jX2ZsYWdzX3Nsb3dwYXRoKGdmcF9tYXNrLCBvcmRlcik7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBXZSBuZWVkIHRvIHJlY2FsY3VsYXRlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhlIHpvbmVsaXN0IGl0ZXJhdG9yXFxuQEAgLTQ4MzIsOCArNDgzNyw4IEBAIF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4gXFxuIFxcdHJlc2VydmVfZmxhZ3MgPSBfX2dmcF9wZm1lbWFsbG9jX2ZsYWdzKGdmcF9tYXNrKTtcXG4gXFx0aWYgKHJlc2VydmVfZmxhZ3MpXFxuLVxcdFxcdGFsbG9jX2ZsYWdzID0gZ2ZwX3RvX2FsbG9jX2ZsYWdzX2NtYShnZnBfbWFzaywgcmVzZXJ2ZV9mbGFncykgfFxcbi1cXHRcXHRcXHRcXHRcXHQgIChhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX0tTV0FQRCk7XFxuK1xcdFxcdGFsbG9jX2ZsYWdzID0gYWxsb2NfZmxhZ3NfY21hKGdmcF9tYXNrLCByZXNlcnZlX2ZsYWdzKSB8XFxuK1xcdFxcdFxcdFxcdGFjLVxcdTAwM2VhbGxvY19mbGFncyB8IChhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX0tTV0FQRCk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBSZXNldCB0aGUgbm9kZW1hc2sgYW5kIHpvbmVsaXN0IGl0ZXJhdG9ycyBpZiBtZW1vcnkgcG9saWNpZXMgY2FuIGJlXFxuQEAgLTUwNTksMTEgKzUwNjQsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4gXFx0ICogRG9uJ3QgaW52b2tlIHNob3VsZF9mYWlsIGxvZ2ljLCBzaW5jZSBpdCBtYXkgY2FsbFxcbiBcXHQgKiBnZXRfcmFuZG9tX3UzMigpIGFuZCBwcmludGsoKSB3aGljaCBuZWVkIHRvIHNwaW5fbG9jay5cXG4gXFx0ICovXFxuLVxcdGlmICghKCphbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX1RSWUxPQ0spIFxcdTAwMjZcXHUwMDI2XFxuK1xcdGlmICghKCphbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX05PTE9DSykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIHNob3VsZF9mYWlsX2FsbG9jX3BhZ2UoZ2ZwX21hc2ssIG9yZGVyKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0KmFsbG9jX2ZsYWdzID0gZ2ZwX3RvX2FsbG9jX2ZsYWdzX2NtYShnZnBfbWFzaywgKmFsbG9jX2ZsYWdzKTtcXG4rXFx0KmFsbG9jX2ZsYWdzID0gYWxsb2NfZmxhZ3NfY21hKGdmcF9tYXNrLCAqYWxsb2NfZmxhZ3MpO1xcbiBcXG4gXFx0LyogRGlydHkgem9uZSBiYWxhbmNpbmcgb25seSBkb25lIGluIHRoZSBmYXN0IHBhdGggKi9cXG4gXFx0YWMtXFx1MDAzZXNwcmVhZF9kaXJ0eV9wYWdlcyA9IChnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX1dSSVRFKTtcXG5AQCAtNTIyMSw3ICs1MjI2LDcgQEAgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxcbiBcXHRcXHR9XFxuIFxcdFxcdG5yX2FjY291bnQrKztcXG4gXFxuLVxcdFxcdHByZXBfbmV3X3BhZ2UocGFnZSwgMCwgZ2ZwLCAwKTtcXG4rXFx0XFx0cHJlcF9uZXdfcGFnZShwYWdlLCAwLCBnZnAsIEFMTE9DX0RFRkFVTFQpO1xcbiBcXHRcXHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xcbiBcXHRcXHRwYWdlX2FycmF5W25yX3BvcHVsYXRlZCsrXSA9IHBhZ2U7XFxuIFxcdH1cXG5AQCAtNTIzNSw3ICs1MjQwLDcgQEAgdW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX25vcHJvZihnZnBfdCBnZnAsIGludCBwcmVmZXJyZWRfbmlkLFxcbiBcXHRyZXR1cm4gbnJfcG9wdWxhdGVkO1xcbiBcXG4gZmFpbGVkOlxcbi1cXHRwYWdlID0gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwLCAwLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzayk7XFxuK1xcdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnAsIDAsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrLCBBTExPQ19ERUZBVUxUKTtcXG4gXFx0aWYgKHBhZ2UpXFxuIFxcdFxcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcXG4gXFx0Z290byBvdXQ7XFxuQEAgLTUyNzAsMjQgKzUyNzUsMTAxIEBAIHZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgYWxsb2Nfb3JkZXJfYWxsb3dlZChnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcXG4re1xcbitcXHRpZiAoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19OT0xPQ0spXFxuK1xcdFxcdHJldHVybiBwY3BfYWxsb3dlZF9vcmRlcihvcmRlcik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGVyZSBhcmUgc2V2ZXJhbCBwbGFjZXMgd2hlcmUgd2UgYXNzdW1lIHRoYXQgdGhlIG9yZGVyIHZhbHVlIGlzIHNhbmVcXG4rXFx0ICogc28gYmFpbCBvdXQgZWFybHkgaWYgdGhlIHJlcXVlc3QgaXMgb3V0IG9mIGJvdW5kLlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuICEoV0FSTl9PTl9PTkNFX0dGUChvcmRlciBcXHUwMDNlIE1BWF9QQUdFX09SREVSLCBnZnApKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIGFsbG9jX3RyeWxvY2tfYWxsb3dlZCh2b2lkKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIEluIFBSRUVNUFRfUlQgc3Bpbl90cnlsb2NrKCkgd2lsbCBjYWxsIHJhd19zcGluX2xvY2soKSB3aGljaCBpc1xcbitcXHQgKiB1bnNhZmUgaW4gTk1JLiBJZiBzcGluX3RyeWxvY2soKSBpcyBjYWxsZWQgZnJvbSBoYXJkIElSUSB0aGUgY3VycmVudFxcbitcXHQgKiB0YXNrIG1heSBiZSB3YWl0aW5nIGZvciBvbmUgcnRfc3Bpbl9sb2NrLCBidXQgcnRfc3Bpbl90cnlsb2NrKCkgd2lsbFxcbitcXHQgKiBtYXJrIHRoZSB0YXNrIGFzIHRoZSBvd25lciBvZiBhbm90aGVyIHJ0X3NwaW5fbG9jayB3aGljaCB3aWxsXFxuK1xcdCAqIGNvbmZ1c2UgUEkgbG9naWMsIHNvIHJldHVybiBpbW1lZGlhdGVseSBpZiBjYWxsZWQgZnJvbSBoYXJkIElSUSBvclxcbitcXHQgKiBOTUkuXFxuK1xcdCAqXFxuK1xcdCAqIE5vdGUsIGlycXNfZGlzYWJsZWQoKSBjYXNlIGlzIG9rLiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWRcXG4rXFx0ICogZnJvbSByYXdfc3Bpbl9sb2NrX2lycXNhdmUgcmVnaW9uLlxcbitcXHQgKi9cXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpIFxcdTAwMjZcXHUwMDI2IChpbl9ubWkoKSB8fCBpbl9oYXJkaXJxKCkpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHQvKiBPbiBVUCwgc3Bpbl90cnlsb2NrKCkgYWx3YXlzIHN1Y2NlZWRzIGV2ZW4gd2hlbiBpdCBpcyBsb2NrZWQgKi9cXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19TTVApIFxcdTAwMjZcXHUwMDI2IGluX25taSgpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHQvKiBCYWlsb3V0LCBzaW5jZSBfZGVmZXJyZWRfZ3Jvd196b25lKCkgbmVlZHMgdG8gdGFrZSBhIGxvY2sgKi9cXG4rXFx0aWYgKGRlZmVycmVkX3BhZ2VzX2VuYWJsZWQoKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEdGUCBmbGFncyB0byBzZXQgZm9yIEFMTE9DX05PTE9DSyBpLmUuIGFsbG9jX3BhZ2VzX25vbG9jaygpLlxcbisgKlxcbisgKiBEbyBub3Qgc3BlY2lmeSBfX0dGUF9ESVJFQ1RfUkVDTEFJTSwgc2luY2UgZGlyZWN0IGNsYWltIGlzIG5vdCBhbGxvd2VkLlxcbisgKiBEbyBub3Qgc3BlY2lmeSBfX0dGUF9LU1dBUERfUkVDTEFJTSBlaXRoZXIsIHNpbmNlIHdha2UgdXAgb2Yga3N3YXBkXFxuKyAqIGlzIG5vdCBzYWZlIGluIGFyYml0cmFyeSBjb250ZXh0LlxcbisgKlxcbisgKiBUaGVzZSB0d28gYXJlIHRoZSBjb25kaXRpb25zIGZvciBnZnBmbGFnc19hbGxvd19zcGlubmluZygpIGJlaW5nIHRydWUuXFxuKyAqXFxuKyAqIFNwZWNpZnkgX19HRlBfTk9XQVJOIHNpbmNlIGZhaWxpbmcgYWxsb2NfcGFnZXNfbm9sb2NrKCkgaXMgbm90IGEgcmVhc29uXFxuKyAqIHRvIHdhcm4uIEFsc28gd2FybiB3b3VsZCB0cmlnZ2VyIHByaW50aygpIHdoaWNoIGlzIHVuc2FmZSBmcm9tXFxuKyAqIHZhcmlvdXMgY29udGV4dHMuIFdlIGNhbm5vdCB1c2UgcHJpbnRrX2RlZmVycmVkX2VudGVyKCkgdG8gbWl0aWdhdGUsXFxuKyAqIHNpbmNlIHRoZSBydW5uaW5nIGNvbnRleHQgaXMgdW5rbm93bi5cXG4rICpcXG4rICogU3BlY2lmeSBfX0dGUF9aRVJPIHRvIG1ha2Ugc3VyZSB0aGF0IGNhbGwgdG8ga21zYW5fYWxsb2NfcGFnZSgpIGJlbG93XFxuKyAqIGlzIHNhZmUgaW4gYW55IGNvbnRleHQuIEFsc28gemVyb2luZyB0aGUgcGFnZSBpcyBtYW5kYXRvcnkgZm9yXFxuKyAqIEJQRiB1c2UgY2FzZXMuXFxuKyAqXFxuKyAqIFRob3VnaCBfX0dGUF9OT01FTUFMTE9DIGlzIG5vdCBjaGVja2VkIGluIHRoZSBjb2RlIHBhdGggYmVsb3csXFxuKyAqIHNwZWNpZnkgaXQgaGVyZSB0byBoaWdobGlnaHQgdGhhdCBhbGxvY19wYWdlc19ub2xvY2soKVxcbisgKiBkb2Vzbid0IHdhbnQgdG8gZGVwbGV0ZSByZXNlcnZlcy5cXG4rICovXFxuK3N0YXRpYyBjb25zdCBnZnBfdCBnZnBfbm9sb2NrID0gX19HRlBfTk9XQVJOIHwgX19HRlBfWkVSTyB8IF9fR0ZQX05PTUVNQUxMT0MgfFxcbitcXHRcXHRcXHRcXHRfX0dGUF9DT01QO1xcbitcXG4gLypcXG4gICogVGhpcyBpcyB0aGUgJ2hlYXJ0JyBvZiB0aGUgem9uZWQgYnVkZHkgYWxsb2NhdG9yLlxcbiAgKi9cXG4gc3RydWN0IHBhZ2UgKl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcXG4tXFx0XFx0aW50IHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbitcXHRcXHRpbnQgcHJlZmVycmVkX25pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2ssIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcXG4ge1xcbiBcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4tXFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzID0gQUxMT0NfV01BUktfTE9XO1xcbiBcXHRnZnBfdCBhbGxvY19nZnA7IC8qIFRoZSBnZnBfdCB0aGF0IHdhcyBhY3R1YWxseSB1c2VkIGZvciBhbGxvY2F0aW9uICovXFxuLVxcdHN0cnVjdCBhbGxvY19jb250ZXh0IGFjID0geyB9O1xcbitcXHRzdHJ1Y3QgYWxsb2NfY29udGV4dCBhYyA9IHtcXG4rXFx0XFx0LmFsbG9jX2ZsYWdzID0gYWxsb2NfZmxhZ3MsXFxuK1xcdH07XFxuK1xcdHVuc2lnbmVkIGludCBmYXN0cGF0aF9hbGxvY19mbGFncyA9IGFsbG9jX2ZsYWdzO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogVGhlcmUgYXJlIHNldmVyYWwgcGxhY2VzIHdoZXJlIHdlIGFzc3VtZSB0aGF0IHRoZSBvcmRlciB2YWx1ZSBpcyBzYW5lXFxuLVxcdCAqIHNvIGJhaWwgb3V0IGVhcmx5IGlmIHRoZSByZXF1ZXN0IGlzIG91dCBvZiBib3VuZC5cXG4tXFx0ICovXFxuLVxcdGlmIChXQVJOX09OX09OQ0VfR0ZQKG9yZGVyIFxcdTAwM2UgTUFYX1BBR0VfT1JERVIsIGdmcCkpXFxuK1xcdC8qIE90aGVyIGZsYWdzIGNvdWxkIGJlIHN1cHBvcnRlZCBsYXRlciBpZiBuZWVkZWQuICovXFxuK1xcdGlmIChXQVJOX09OKGFsbG9jX2ZsYWdzIFxcdTAwMjYgfihBTExPQ19OT0xPQ0sgfCBBTExPQ19OT19DT0RFVEFHKSkpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0aWYgKCFhbGxvY19vcmRlcl9hbGxvd2VkKGdmcCwgb3JkZXIsIGFsbG9jX2ZsYWdzKSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbitcXHRpZiAoYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19OT0xPQ0spIHtcXG4rXFx0XFx0LyogQ2VydGFpbiBvdGhlciBmbGFncyBjb3VsZCBiZSBzdXBwb3J0ZWQgbGF0ZXIgaWYgbmVlZGVkLiAqL1xcbitcXHRcXHRWTV9XQVJOX09OX09OQ0UoZ2ZwIFxcdTAwMjYgfihfX0dGUF9BQ0NPVU5UIHwgZ2ZwX25vbG9jaykpO1xcbitcXHRcXHRpZiAoIWFsbG9jX3RyeWxvY2tfYWxsb3dlZCgpKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0Z2ZwIHw9IGdmcF9ub2xvY2s7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGZhc3RwYXRoX2FsbG9jX2ZsYWdzIHw9IEFMTE9DX1dNQVJLX0xPVztcXG4rXFx0fVxcbitcXG4gXFx0Z2ZwIFxcdTAwMjY9IGdmcF9hbGxvd2VkX21hc2s7XFxuIFxcdC8qXFxuIFxcdCAqIEFwcGx5IHNjb3BlZCBhbGxvY2F0aW9uIGNvbnN0cmFpbnRzLiBUaGlzIGlzIG1haW5seSBhYm91dCBHRlBfTk9GU1xcbkBAIC01Mjk5LDE5ICs1MzgxLDE5IEBAIHN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuIFxcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcXG4gXFx0YWxsb2NfZ2ZwID0gZ2ZwO1xcbiBcXHRpZiAoIXByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwLCBvcmRlciwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIFxcdTAwMjZhYyxcXG4tXFx0XFx0XFx0XFx1MDAyNmFsbG9jX2dmcCwgXFx1MDAyNmFsbG9jX2ZsYWdzKSlcXG4rXFx0XFx0XFx0XFx1MDAyNmFsbG9jX2dmcCwgXFx1MDAyNmZhc3RwYXRoX2FsbG9jX2ZsYWdzKSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBGb3JiaWQgdGhlIGZpcnN0IHBhc3MgZnJvbSBmYWxsaW5nIGJhY2sgdG8gdHlwZXMgdGhhdCBmcmFnbWVudFxcbiBcXHQgKiBtZW1vcnkgdW50aWwgYWxsIGxvY2FsIHpvbmVzIGFyZSBjb25zaWRlcmVkLlxcbiBcXHQgKi9cXG4tXFx0YWxsb2NfZmxhZ3MgfD0gYWxsb2NfZmxhZ3Nfbm9mcmFnbWVudCh6b25lbGlzdF96b25lKGFjLnByZWZlcnJlZF96b25lcmVmKSwgZ2ZwKTtcXG4tXFx0YWxsb2NfZmxhZ3MgfD0gZ2ZwX3RvX2FsbG9jX2ZsYWdzX25vbmJsb2NraW5nKGdmcCwgb3JkZXIpIFxcdTAwMjYgQUxMT0NfSElHSEFUT01JQztcXG4rXFx0ZmFzdHBhdGhfYWxsb2NfZmxhZ3MgfD0gYWxsb2NfZmxhZ3Nfbm9mcmFnbWVudCh6b25lbGlzdF96b25lKGFjLnByZWZlcnJlZF96b25lcmVmKSwgZ2ZwKTtcXG4rXFx0ZmFzdHBhdGhfYWxsb2NfZmxhZ3MgfD0gYWxsb2NfZmxhZ3Nfbm9uYmxvY2tpbmcoZ2ZwLCBvcmRlcikgXFx1MDAyNiBBTExPQ19ISUdIQVRPTUlDO1xcbiBcXG4tXFx0LyogRmlyc3QgYWxsb2NhdGlvbiBhdHRlbXB0ICovXFxuLVxcdHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KGFsbG9jX2dmcCwgb3JkZXIsIGFsbG9jX2ZsYWdzLCBcXHUwMDI2YWMpO1xcbi1cXHRpZiAobGlrZWx5KHBhZ2UpKVxcbitcXHQvKiBGaXJzdCBhbGxvY2F0aW9uIGF0dGVtcHQgKG9yLCBmb3Igbm9sb2NrLCBvbmx5IGF0dGVtcHQpICovXFxuK1xcdHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KGFsbG9jX2dmcCwgb3JkZXIsIGZhc3RwYXRoX2FsbG9jX2ZsYWdzLCBcXHUwMDI2YWMpO1xcbitcXHRpZiAobGlrZWx5KHBhZ2UpIHx8IChhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX05PTE9DSykpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0YWxsb2NfZ2ZwID0gZ2ZwO1xcbkBAIC01MzI4LDcgKzU0MTAsOCBAQCBzdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbiBvdXQ6XFxuIFxcdGlmIChtZW1jZ19rbWVtX29ubGluZSgpIFxcdTAwMjZcXHUwMDI2IChnZnAgXFx1MDAyNiBfX0dGUF9BQ0NPVU5UKSBcXHUwMDI2XFx1MDAyNiBwYWdlIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICB1bmxpa2VseShfX21lbWNnX2ttZW1fY2hhcmdlX3BhZ2UocGFnZSwgZ2ZwLCBvcmRlcikgIT0gMCkpIHtcXG4tXFx0XFx0ZnJlZV9mcm96ZW5fcGFnZXMocGFnZSwgb3JkZXIpO1xcbitcXHRcXHRfX2ZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyLFxcbitcXHRcXHRcXHRcXHQgICAgYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19OT0xPQ0sgPyBGUElfVFJZTE9DSyA6IDApO1xcbiBcXHRcXHRwYWdlID0gTlVMTDtcXG4gXFx0fVxcbiBcXG5AQCAtNTM0MCwyMiArNTQyMywzNCBAQCBzdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbiBFWFBPUlRfU1lNQk9MKF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZik7XFxuIFxcbiBzdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLVxcdFxcdGludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG4rXFx0XFx0aW50IHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuIHtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIFxcbi1cXHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcCwgb3JkZXIsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrKTtcXG4rXFx0cGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnAsIG9yZGVyLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgYWxsb2NfZmxhZ3MpO1xcbiBcXHRpZiAocGFnZSlcXG4gXFx0XFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcXG4gXFx0cmV0dXJuIHBhZ2U7XFxuIH1cXG4tRVhQT1JUX1NZTUJPTChfX2FsbG9jX3BhZ2VzX25vcHJvZik7XFxuK1xcbitzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YoaW50IG5pZCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcXG4re1xcbitcXHRpZiAobmlkID09IE5VTUFfTk9fTk9ERSlcXG4rXFx0XFx0bmlkID0gbnVtYV9tZW1faWQoKTtcXG4rXFxuK1xcdFZNX0JVR19PTihuaWQgXFx1MDAzYyAwIHx8IG5pZCBcXHUwMDNlPSBNQVhfTlVNTk9ERVMpO1xcbitcXHR3YXJuX2lmX25vZGVfb2ZmbGluZShuaWQsIGdmcF9tYXNrKTtcXG4rXFxuK1xcdHJldHVybiBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnBfbWFzaywgb3JkZXIsIG5pZCwgTlVMTCwgQUxMT0NfREVGQVVMVCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChhbGxvY19wYWdlc19ub2RlX25vcHJvZik7XFxuIFxcbiBzdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcXG4gXFx0XFx0bm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuIHtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnAgfCBfX0dGUF9DT01QLCBvcmRlcixcXG4tXFx0XFx0XFx0XFx0XFx0cHJlZmVycmVkX25pZCwgbm9kZW1hc2spO1xcbitcXHRcXHRcXHRcXHRcXHRwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XFxuIFxcdHJldHVybiBwYWdlX3JtYXBwYWJsZV9mb2xpbyhwYWdlKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKF9fZm9saW9fYWxsb2Nfbm9wcm9mKTtcXG5AQCAtNzAzNyw3ICs3MTMyLDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfZnJlZV9mcm96ZW5fcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgZ2ZwX3QgZ2ZwX21hc2spXFxuIFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlLCBuZXh0LCBcXHUwMDI2bGlzdFtvcmRlcl0sIGxydSkge1xcbiBcXHRcXHRcXHRpbnQgaTtcXG4gXFxuLVxcdFxcdFxcdHBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgZ2ZwX21hc2spO1xcbitcXHRcXHRcXHRwb3N0X2FsbG9jX2hvb2socGFnZSwgb3JkZXIsIGdmcF9tYXNrLCBBTExPQ19ERUZBVUxUKTtcXG4gXFx0XFx0XFx0aWYgKCFvcmRlcilcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbkBAIC03MjQyLDcgKzczMzcsNyBAQCBpbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdFxcdHN0cnVjdCBwYWdlICpoZWFkID0gcGZuX3RvX3BhZ2Uoc3RhcnQpO1xcbiBcXG4gXFx0XFx0Y2hlY2tfbmV3X3BhZ2VzKGhlYWQsIG9yZGVyKTtcXG4tXFx0XFx0cHJlcF9uZXdfcGFnZShoZWFkLCBvcmRlciwgZ2ZwX21hc2ssIDApO1xcbitcXHRcXHRwcmVwX25ld19wYWdlKGhlYWQsIG9yZGVyLCBnZnBfbWFzaywgQUxMT0NfREVGQVVMVCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcdFxcdFdBUk4odHJ1ZSwgXFxcIlBGTiByYW5nZTogcmVxdWVzdGVkIFslbHUsICVsdSksIGFsbG9jYXRlZCBbJWx1LCAlbHUpXFxcXG5cXFwiLFxcbkBAIC03ODA0LDcgKzc4OTksNyBAQCBzdGF0aWMgYm9vbCBjb25kX2FjY2VwdF9tZW1vcnkoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcixcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0LyogQmFpbG91dCwgc2luY2UgdHJ5X3RvX2FjY2VwdF9tZW1vcnlfb25lKCkgbmVlZHMgdG8gdGFrZSBhIGxvY2sgKi9cXG4tXFx0aWYgKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfVFJZTE9DSylcXG4rXFx0aWYgKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfTk9MT0NLKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHR3bWFyayA9IHByb21vX3dtYXJrX3BhZ2VzKHpvbmUpO1xcbkBAIC03ODc0LDgwICs3OTY5LDEwIEBAIHN0YXRpYyBib29sIF9fZnJlZV91bmFjY2VwdGVkKHN0cnVjdCBwYWdlICpwYWdlKVxcbiBcXG4gc3RydWN0IHBhZ2UgKmFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mKGdmcF90IGdmcF9mbGFncywgaW50IG5pZCwgdW5zaWduZWQgaW50IG9yZGVyKVxcbiB7XFxuLVxcdC8qXFxuLVxcdCAqIERvIG5vdCBzcGVjaWZ5IF9fR0ZQX0RJUkVDVF9SRUNMQUlNLCBzaW5jZSBkaXJlY3QgY2xhaW0gaXMgbm90IGFsbG93ZWQuXFxuLVxcdCAqIERvIG5vdCBzcGVjaWZ5IF9fR0ZQX0tTV0FQRF9SRUNMQUlNIGVpdGhlciwgc2luY2Ugd2FrZSB1cCBvZiBrc3dhcGRcXG4tXFx0ICogaXMgbm90IHNhZmUgaW4gYXJiaXRyYXJ5IGNvbnRleHQuXFxuLVxcdCAqXFxuLVxcdCAqIFRoZXNlIHR3byBhcmUgdGhlIGNvbmRpdGlvbnMgZm9yIGdmcGZsYWdzX2FsbG93X3NwaW5uaW5nKCkgYmVpbmcgdHJ1ZS5cXG4tXFx0ICpcXG4tXFx0ICogU3BlY2lmeSBfX0dGUF9OT1dBUk4gc2luY2UgZmFpbGluZyBhbGxvY19wYWdlc19ub2xvY2soKSBpcyBub3QgYSByZWFzb25cXG4tXFx0ICogdG8gd2Fybi4gQWxzbyB3YXJuIHdvdWxkIHRyaWdnZXIgcHJpbnRrKCkgd2hpY2ggaXMgdW5zYWZlIGZyb21cXG4tXFx0ICogdmFyaW91cyBjb250ZXh0cy4gV2UgY2Fubm90IHVzZSBwcmludGtfZGVmZXJyZWRfZW50ZXIoKSB0byBtaXRpZ2F0ZSxcXG4tXFx0ICogc2luY2UgdGhlIHJ1bm5pbmcgY29udGV4dCBpcyB1bmtub3duLlxcbi1cXHQgKlxcbi1cXHQgKiBTcGVjaWZ5IF9fR0ZQX1pFUk8gdG8gbWFrZSBzdXJlIHRoYXQgY2FsbCB0byBrbXNhbl9hbGxvY19wYWdlKCkgYmVsb3dcXG4tXFx0ICogaXMgc2FmZSBpbiBhbnkgY29udGV4dC4gQWxzbyB6ZXJvaW5nIHRoZSBwYWdlIGlzIG1hbmRhdG9yeSBmb3JcXG4tXFx0ICogQlBGIHVzZSBjYXNlcy5cXG4tXFx0ICpcXG4tXFx0ICogVGhvdWdoIF9fR0ZQX05PTUVNQUxMT0MgaXMgbm90IGNoZWNrZWQgaW4gdGhlIGNvZGUgcGF0aCBiZWxvdyxcXG4tXFx0ICogc3BlY2lmeSBpdCBoZXJlIHRvIGhpZ2hsaWdodCB0aGF0IGFsbG9jX3BhZ2VzX25vbG9jaygpXFxuLVxcdCAqIGRvZXNuJ3Qgd2FudCB0byBkZXBsZXRlIHJlc2VydmVzLlxcbi1cXHQgKi9cXG4tXFx0Z2ZwX3QgYWxsb2NfZ2ZwID0gX19HRlBfTk9XQVJOIHwgX19HRlBfWkVSTyB8IF9fR0ZQX05PTUVNQUxMT0MgfCBfX0dGUF9DT01QXFxuLVxcdFxcdFxcdHwgZ2ZwX2ZsYWdzO1xcbi1cXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MgPSBBTExPQ19UUllMT0NLO1xcbi1cXHRzdHJ1Y3QgYWxsb2NfY29udGV4dCBhYyA9IHsgfTtcXG4tXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuLVxcbi1cXHRWTV9XQVJOX09OX09OQ0UoZ2ZwX2ZsYWdzIFxcdTAwMjYgfl9fR0ZQX0FDQ09VTlQpO1xcbi1cXHQvKlxcbi1cXHQgKiBJbiBQUkVFTVBUX1JUIHNwaW5fdHJ5bG9jaygpIHdpbGwgY2FsbCByYXdfc3Bpbl9sb2NrKCkgd2hpY2ggaXNcXG4tXFx0ICogdW5zYWZlIGluIE5NSS4gSWYgc3Bpbl90cnlsb2NrKCkgaXMgY2FsbGVkIGZyb20gaGFyZCBJUlEgdGhlIGN1cnJlbnRcXG4tXFx0ICogdGFzayBtYXkgYmUgd2FpdGluZyBmb3Igb25lIHJ0X3NwaW5fbG9jaywgYnV0IHJ0X3NwaW5fdHJ5bG9jaygpIHdpbGxcXG4tXFx0ICogbWFyayB0aGUgdGFzayBhcyB0aGUgb3duZXIgb2YgYW5vdGhlciBydF9zcGluX2xvY2sgd2hpY2ggd2lsbFxcbi1cXHQgKiBjb25mdXNlIFBJIGxvZ2ljLCBzbyByZXR1cm4gaW1tZWRpYXRlbHkgaWYgY2FsbGVkIGZyb20gaGFyZCBJUlEgb3JcXG4tXFx0ICogTk1JLlxcbi1cXHQgKlxcbi1cXHQgKiBOb3RlLCBpcnFzX2Rpc2FibGVkKCkgY2FzZSBpcyBvay4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkXFxuLVxcdCAqIGZyb20gcmF3X3NwaW5fbG9ja19pcnFzYXZlIHJlZ2lvbi5cXG4tXFx0ICovXFxuLVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSBcXHUwMDI2XFx1MDAyNiAoaW5fbm1pKCkgfHwgaW5faGFyZGlycSgpKSlcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcbi1cXHQvKiBPbiBVUCwgc3Bpbl90cnlsb2NrKCkgYWx3YXlzIHN1Y2NlZWRzIGV2ZW4gd2hlbiBpdCBpcyBsb2NrZWQgKi9cXG4tXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19TTVApIFxcdTAwMjZcXHUwMDI2IGluX25taSgpKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFxuLVxcdGlmICghcGNwX2FsbG93ZWRfb3JkZXIob3JkZXIpKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFxuLVxcdC8qIEJhaWxvdXQsIHNpbmNlIF9kZWZlcnJlZF9ncm93X3pvbmUoKSBuZWVkcyB0byB0YWtlIGEgbG9jayAqL1xcbi1cXHRpZiAoZGVmZXJyZWRfcGFnZXNfZW5hYmxlZCgpKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFxuIFxcdGlmIChuaWQgPT0gTlVNQV9OT19OT0RFKVxcbiBcXHRcXHRuaWQgPSBudW1hX25vZGVfaWQoKTtcXG4gXFxuLVxcdHByZXBhcmVfYWxsb2NfcGFnZXMoYWxsb2NfZ2ZwLCBvcmRlciwgbmlkLCBOVUxMLCBcXHUwMDI2YWMsXFxuLVxcdFxcdFxcdCAgICBcXHUwMDI2YWxsb2NfZ2ZwLCBcXHUwMDI2YWxsb2NfZmxhZ3MpO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogQmVzdCBlZmZvcnQgYWxsb2NhdGlvbiBmcm9tIHBlcmNwdSBmcmVlIGxpc3QuXFxuLVxcdCAqIElmIGl0J3MgZW1wdHkgYXR0ZW1wdCB0byBzcGluX3RyeWxvY2sgem9uZS1cXHUwMDNlbG9jay5cXG4tXFx0ICovXFxuLVxcdHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KGFsbG9jX2dmcCwgb3JkZXIsIGFsbG9jX2ZsYWdzLCBcXHUwMDI2YWMpO1xcbi1cXG4tXFx0LyogVW5saWtlIHJlZ3VsYXIgYWxsb2NfcGFnZXMoKSB0aGVyZSBpcyBubyBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKCkuICovXFxuLVxcbi1cXHRpZiAobWVtY2dfa21lbV9vbmxpbmUoKSBcXHUwMDI2XFx1MDAyNiBwYWdlIFxcdTAwMjZcXHUwMDI2IChnZnBfZmxhZ3MgXFx1MDAyNiBfX0dGUF9BQ0NPVU5UKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgdW5saWtlbHkoX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHBhZ2UsIGFsbG9jX2dmcCwgb3JkZXIpICE9IDApKSB7XFxuLVxcdFxcdF9fZnJlZV9mcm96ZW5fcGFnZXMocGFnZSwgb3JkZXIsIEZQSV9UUllMT0NLKTtcXG4tXFx0XFx0cGFnZSA9IE5VTEw7XFxuLVxcdH1cXG4tXFx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCBvcmRlciwgYWxsb2NfZ2ZwLCBhYy5taWdyYXRldHlwZSk7XFxuLVxcdGttc2FuX2FsbG9jX3BhZ2UocGFnZSwgb3JkZXIsIGFsbG9jX2dmcCk7XFxuLVxcdHJldHVybiBwYWdlO1xcbitcXHRyZXR1cm4gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF9mbGFncywgb3JkZXIsIG5pZCwgTlVMTCwgQUxMT0NfTk9MT0NLKTtcXG4gfVxcbiAvKipcXG4gICogYWxsb2NfcGFnZXNfbm9sb2NrIC0gb3Bwb3J0dW5pc3RpYyByZWVudHJhbnQgYWxsb2NhdGlvbiBmcm9tIGFueSBjb250ZXh0XFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuaCBiL21tL3BhZ2VfYWxsb2MuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjI2MTRiZmY2Nzk1YjA4XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL21tL3BhZ2VfYWxsb2MuaFxcbkBAIC0wLDAgKzEsMzE2IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxuKy8qXFxuKyAqIG1tLWludGVybmFsIEFQSSBmb3IgdGhlIHBhZ2UgKGJ1ZGR5KSBhbGxvY2F0b3IuIFB1YmxpYyBBUEkgbGl2ZXMgaW5cXG4rICogaW5jbHVkZS9saW51eC9nZnAuaC5cXG4rICovXFxuKyNpZm5kZWYgX19NTV9QQUdFX0FMTE9DX0hcXG4rI2RlZmluZSBfX01NX1BBR0VfQUxMT0NfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbXpvbmUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25vZGVtYXNrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBBTExPQ19ERUZBVUxUXFx0XFx0MFxcbisvKiBUaGUgQUxMT0NfV01BUksgYml0cyBhcmUgdXNlZCBhcyBhbiBpbmRleCB0byB6b25lLVxcdTAwM2V3YXRlcm1hcmsgKi9cXG4rI2RlZmluZSBBTExPQ19XTUFSS19NSU5cXHRcXHRXTUFSS19NSU5cXG4rI2RlZmluZSBBTExPQ19XTUFSS19MT1dcXHRcXHRXTUFSS19MT1dcXG4rI2RlZmluZSBBTExPQ19XTUFSS19ISUdIXFx0V01BUktfSElHSFxcbisjZGVmaW5lIEFMTE9DX05PX1dBVEVSTUFSS1NcXHQweDA0IC8qIGRvbid0IGNoZWNrIHdhdGVybWFya3MgYXQgYWxsICovXFxuK1xcbisvKiBNYXNrIHRvIGdldCB0aGUgd2F0ZXJtYXJrIGJpdHMgKi9cXG4rI2RlZmluZSBBTExPQ19XTUFSS19NQVNLXFx0KEFMTE9DX05PX1dBVEVSTUFSS1MtMSlcXG4rXFxuKy8qXFxuKyAqIE9ubHkgTU1VIGFyY2hzIGhhdmUgYXN5bmMgb29tIHZpY3RpbSByZWNsYWltIC0gYWthIG9vbV9yZWFwZXIgc28gd2VcXG4rICogY2Fubm90IGFzc3VtZSBhIHJlZHVjZWQgYWNjZXNzIHRvIG1lbW9yeSByZXNlcnZlcyBpcyBzdWZmaWNpZW50IGZvclxcbisgKiAhTU1VXFxuKyAqL1xcbisjaWZkZWYgQ09ORklHX01NVVxcbisjZGVmaW5lIEFMTE9DX09PTVxcdFxcdDB4MDhcXG4rI2Vsc2VcXG4rI2RlZmluZSBBTExPQ19PT01cXHRcXHRBTExPQ19OT19XQVRFUk1BUktTXFxuKyNlbmRpZlxcbitcXG4rI2RlZmluZSBBTExPQ19OT05fQkxPQ0tcXHRcXHQgMHgxMCAvKiBDYWxsZXIgY2Fubm90IGJsb2NrLiBBbGxvdyBhY2Nlc3NcXG4rXFx0XFx0XFx0XFx0ICAgICAgICogdG8gMjUlIG9mIHRoZSBtaW4gd2F0ZXJtYXJrIG9yXFxuK1xcdFxcdFxcdFxcdCAgICAgICAqIDYyLjUlIGlmIF9fR0ZQX0hJR0ggaXMgc2V0LlxcbitcXHRcXHRcXHRcXHQgICAgICAgKi9cXG4rI2RlZmluZSBBTExPQ19NSU5fUkVTRVJWRVxcdCAweDIwIC8qIF9fR0ZQX0hJR0ggc2V0LiBBbGxvdyBhY2Nlc3MgdG8gNTAlXFxuK1xcdFxcdFxcdFxcdCAgICAgICAqIG9mIHRoZSBtaW4gd2F0ZXJtYXJrLlxcbitcXHRcXHRcXHRcXHQgICAgICAgKi9cXG4rI2RlZmluZSBBTExPQ19DUFVTRVRcXHRcXHQgMHg0MCAvKiBjaGVjayBmb3IgY29ycmVjdCBjcHVzZXQgKi9cXG4rI2RlZmluZSBBTExPQ19DTUFcXHRcXHQgMHg4MCAvKiBhbGxvdyBhbGxvY2F0aW9ucyBmcm9tIENNQSBhcmVhcyAqL1xcbisjaWZkZWYgQ09ORklHX1pPTkVfRE1BMzJcXG4rI2RlZmluZSBBTExPQ19OT0ZSQUdNRU5UXFx0MHgxMDAgLyogYXZvaWQgbWl4aW5nIHBhZ2VibG9jayB0eXBlcyAqL1xcbisjZWxzZVxcbisjZGVmaW5lIEFMTE9DX05PRlJBR01FTlRcXHQgIDB4MFxcbisjZW5kaWZcXG4rI2RlZmluZSBBTExPQ19ISUdIQVRPTUlDXFx0MHgyMDAgLyogQWxsb3dzIGFjY2VzcyB0byBNSUdSQVRFX0hJR0hBVE9NSUMgKi9cXG4rI2RlZmluZSBBTExPQ19OT0xPQ0tcXHRcXHQweDQwMCAvKiBPbmx5IHVzZSBzcGluX3RyeWxvY2sgaW4gYWxsb2NhdGlvbiBwYXRoICovXFxuKyNkZWZpbmUgQUxMT0NfS1NXQVBEXFx0XFx0MHg4MDAgLyogYWxsb3cgd2FraW5nIG9mIGtzd2FwZCwgX19HRlBfS1NXQVBEX1JFQ0xBSU0gc2V0ICovXFxuKy8qXFxuKyAqIFNraXAgZWFybHkgUEZOIHJlY29yZGluZyBmb3IgYSBwYWdlIGFsbG9jYXRpb24uICBVc2VkIGJ5XFxuKyAqIF9fYWxsb2NfdGFnX2FkZF9lYXJseV9wZm4oKSB0byBhdm9pZCByZWN1cnNpb24gd2hlbiBhbGxvY2F0aW5nIHBhZ2VzIGZvciB0aGVcXG4rICogZWFybHkgUEZOIHRyYWNraW5nIGxpc3QgaXRzZWxmLlxcbisgKlxcbisgKiBDb2RldGFncyBvZiB0aGUgcGFnZXMgYWxsb2NhdGVkIHdpdGggX19HRlBfTk9fQ09ERVRBRyBzaG91bGQgYmVcXG4rICogY2xlYXJlZCAodmlhIGNsZWFyX3BhZ2VfdGFnX3JlZigpKSBiZWZvcmUgZnJlZWluZyB0aGUgcGFnZXMgdG8gcHJldmVudFxcbisgKiBhbGxvY190YWdfc3ViX2NoZWNrKCkgZnJvbSB0cmlnZ2VyaW5nIGEgd2FybmluZy5cXG4rICovXFxuKyNkZWZpbmUgQUxMT0NfTk9fQ09ERVRBRyAgICAgICAweDEwMDBcXG4rXFxuKy8qIEZsYWdzIHRoYXQgYWxsb3cgYWxsb2NhdGlvbnMgYmVsb3cgdGhlIG1pbiB3YXRlcm1hcmsuICovXFxuKyNkZWZpbmUgQUxMT0NfUkVTRVJWRVMgKEFMTE9DX05PTl9CTE9DS3xBTExPQ19NSU5fUkVTRVJWRXxBTExPQ19ISUdIQVRPTUlDfEFMTE9DX09PTSlcXG4rXFxuKy8qXFxuKyAqIFN0cnVjdHVyZSBmb3IgaG9sZGluZyB0aGUgbW9zdGx5IGltbXV0YWJsZSBhbGxvY2F0aW9uIHBhcmFtZXRlcnMgcGFzc2VkXFxuKyAqIGJldHdlZW4gZnVuY3Rpb25zIGludm9sdmVkIGluIGFsbG9jYXRpb25zLCBpbmNsdWRpbmcgdGhlIGFsbG9jX3BhZ2VzKlxcbisgKiBmYW1pbHkgb2YgZnVuY3Rpb25zLlxcbisgKlxcbisgKiBub2RlbWFzaywgbWlncmF0ZXR5cGUgYW5kIGhpZ2hlc3Rfem9uZWlkeCBhcmUgaW5pdGlhbGl6ZWQgb25seSBvbmNlIGluXFxuKyAqIF9fYWxsb2NfcGFnZXMoKSBhbmQgdGhlbiBuZXZlciBjaGFuZ2UuXFxuKyAqXFxuKyAqIHpvbmVsaXN0LCBwcmVmZXJyZWRfem9uZSBhbmQgaGlnaGVzdF96b25laWR4IGFyZSBzZXQgZmlyc3QgaW5cXG4rICogX19hbGxvY19wYWdlcygpIGZvciB0aGUgZmFzdCBwYXRoLCBhbmQgbWlnaHQgYmUgbGF0ZXIgY2hhbmdlZFxcbisgKiBpbiBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKCkuIEFsbCBvdGhlciBmdW5jdGlvbnMgcGFzcyB0aGUgd2hvbGUgc3RydWN0dXJlXFxuKyAqIGJ5IGEgY29uc3QgcG9pbnRlci5cXG4rICovXFxuK3N0cnVjdCBhbGxvY19jb250ZXh0IHtcXG4rXFx0c3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdDtcXG4rXFx0Y29uc3Qgbm9kZW1hc2tfdCAqbm9kZW1hc2s7XFxuK1xcdHN0cnVjdCB6b25lcmVmICpwcmVmZXJyZWRfem9uZXJlZjtcXG4rXFx0aW50IG1pZ3JhdGV0eXBlO1xcbitcXG4rXFx0LypcXG4rXFx0ICogaGlnaGVzdF96b25laWR4IHJlcHJlc2VudHMgaGlnaGVzdCB1c2FibGUgem9uZSBpbmRleCBvZlxcbitcXHQgKiB0aGUgYWxsb2NhdGlvbiByZXF1ZXN0LiBEdWUgdG8gdGhlIG5hdHVyZSBvZiB0aGUgem9uZSxcXG4rXFx0ICogbWVtb3J5IG9uIGxvd2VyIHpvbmUgdGhhbiB0aGUgaGlnaGVzdF96b25laWR4IHdpbGwgYmVcXG4rXFx0ICogcHJvdGVjdGVkIGJ5IGxvd21lbV9yZXNlcnZlW2hpZ2hlc3Rfem9uZWlkeF0uXFxuK1xcdCAqXFxuK1xcdCAqIGhpZ2hlc3Rfem9uZWlkeCBpcyBhbHNvIHVzZWQgYnkgcmVjbGFpbS9jb21wYWN0aW9uIHRvIGxpbWl0XFxuK1xcdCAqIHRoZSB0YXJnZXQgem9uZSBzaW5jZSBoaWdoZXIgem9uZSB0aGFuIHRoaXMgaW5kZXggY2Fubm90IGJlXFxuK1xcdCAqIHVzYWJsZSBmb3IgdGhpcyBhbGxvY2F0aW9uIHJlcXVlc3QuXFxuK1xcdCAqL1xcbitcXHRlbnVtIHpvbmVfdHlwZSBoaWdoZXN0X3pvbmVpZHg7XFxuK1xcdGJvb2wgc3ByZWFkX2RpcnR5X3BhZ2VzO1xcbitcXHQvKiBPbmx5IGZsYWdzIHRoYXQgYXJlIGdsb2JhbCB0byB0aGUgd2hvbGUgYWxsb2NhdGlvbiBnbyBoZXJlLiAqL1xcbitcXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3M7XFxuK307XFxuK1xcbisvKlxcbisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG9yZGVyIG9mIGEgZnJlZSBwYWdlIGluIHRoZSBidWRkeSBzeXN0ZW0uIEluXFxuKyAqIGdlbmVyYWwsIHBhZ2Vfem9uZShwYWdlKS1cXHUwMDNlbG9jayBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlciB0byBwcmV2ZW50IHRoZVxcbisgKiBwYWdlIGZyb20gYmVpbmcgYWxsb2NhdGVkIGluIHBhcmFsbGVsIGFuZCByZXR1cm5pbmcgZ2FyYmFnZSBhcyB0aGUgb3JkZXIuXFxuKyAqIElmIGEgY2FsbGVyIGRvZXMgbm90IGhvbGQgcGFnZV96b25lKHBhZ2UpLVxcdTAwM2Vsb2NrLCBpdCBtdXN0IGd1YXJhbnRlZSB0aGF0IHRoZVxcbisgKiBwYWdlIGNhbm5vdCBiZSBhbGxvY2F0ZWQgb3IgbWVyZ2VkIGluIHBhcmFsbGVsLiBBbHRlcm5hdGl2ZWx5LCBpdCBtdXN0XFxuKyAqIGhhbmRsZSBpbnZhbGlkIHZhbHVlcyBncmFjZWZ1bGx5LCBhbmQgdXNlIGJ1ZGR5X29yZGVyX3Vuc2FmZSgpIGJlbG93LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYnVkZHlfb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuK3tcXG4rXFx0LyogUGFnZUJ1ZGR5KCkgbXVzdCBiZSBjaGVja2VkIGJ5IHRoZSBjYWxsZXIgKi9cXG4rXFx0cmV0dXJuIHBhZ2VfcHJpdmF0ZShwYWdlKTtcXG4rfVxcbitcXG4rLypcXG4rICogTGlrZSBidWRkeV9vcmRlcigpLCBidXQgZm9yIGNhbGxlcnMgd2hvIGNhbm5vdCBhZmZvcmQgdG8gaG9sZCB0aGUgem9uZSBsb2NrLlxcbisgKiBQYWdlQnVkZHkoKSBzaG91bGQgYmUgY2hlY2tlZCBmaXJzdCBieSB0aGUgY2FsbGVyIHRvIG1pbmltaXplIHJhY2Ugd2luZG93LFxcbisgKiBhbmQgaW52YWxpZCB2YWx1ZXMgbXVzdCBiZSBoYW5kbGVkIGdyYWNlZnVsbHkuXFxuKyAqXFxuKyAqIFJFQURfT05DRSBpcyB1c2VkIHNvIHRoYXQgaWYgdGhlIGNhbGxlciBhc3NpZ25zIHRoZSByZXN1bHQgaW50byBhIGxvY2FsXFxuKyAqIHZhcmlhYmxlIGFuZCBlLmcuIHRlc3RzIGl0IGZvciB2YWxpZCByYW5nZSBiZWZvcmUgdXNpbmcsIHRoZSBjb21waWxlciBjYW5ub3RcXG4rICogZGVjaWRlIHRvIHJlbW92ZSB0aGUgdmFyaWFibGUgYW5kIGlubGluZSB0aGUgcGFnZV9wcml2YXRlKHBhZ2UpIG11bHRpcGxlXFxuKyAqIHRpbWVzLCBwb3RlbnRpYWxseSBvYnNlcnZpbmcgZGlmZmVyZW50IHZhbHVlcyBpbiB0aGUgdGVzdHMgYW5kIHRoZSBhY3R1YWxcXG4rICogdXNlIG9mIHRoZSByZXN1bHQuXFxuKyAqL1xcbisjZGVmaW5lIGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKVxcdFJFQURfT05DRShwYWdlX3ByaXZhdGUocGFnZSkpXFxuK1xcbisvKlxcbisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIGEgcGFnZSBpcyBmcmVlIFxcdTAwMjZcXHUwMDI2IGlzIHRoZSBidWRkeVxcbisgKiB3ZSBjYW4gY29hbGVzY2UgYSBwYWdlIGFuZCBpdHMgYnVkZHkgaWZcXG4rICogKGEpIHRoZSBidWRkeSBpcyBub3QgaW4gYSBob2xlIChjaGVjayBiZWZvcmUgY2FsbGluZyEpIFxcdTAwMjZcXHUwMDI2XFxuKyAqIChiKSB0aGUgYnVkZHkgaXMgaW4gdGhlIGJ1ZGR5IHN5c3RlbSBcXHUwMDI2XFx1MDAyNlxcbisgKiAoYykgYSBwYWdlIGFuZCBpdHMgYnVkZHkgaGF2ZSB0aGUgc2FtZSBvcmRlciBcXHUwMDI2XFx1MDAyNlxcbisgKiAoZCkgYSBwYWdlIGFuZCBpdHMgYnVkZHkgYXJlIGluIHRoZSBzYW1lIHpvbmUuXFxuKyAqXFxuKyAqIEZvciByZWNvcmRpbmcgd2hldGhlciBhIHBhZ2UgaXMgaW4gdGhlIGJ1ZGR5IHN5c3RlbSwgd2Ugc2V0IFBhZ2VCdWRkeS5cXG4rICogU2V0dGluZywgY2xlYXJpbmcsIGFuZCB0ZXN0aW5nIFBhZ2VCdWRkeSBpcyBzZXJpYWxpemVkIGJ5IHpvbmUtXFx1MDAzZWxvY2suXFxuKyAqXFxuKyAqIEZvciByZWNvcmRpbmcgcGFnZSdzIG9yZGVyLCB3ZSB1c2UgcGFnZV9wcml2YXRlKHBhZ2UpLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sIHBhZ2VfaXNfYnVkZHkoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBwYWdlICpidWRkeSxcXG4rXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBvcmRlcilcXG4re1xcbitcXHRpZiAoIXBhZ2VfaXNfZ3VhcmQoYnVkZHkpIFxcdTAwMjZcXHUwMDI2ICFQYWdlQnVkZHkoYnVkZHkpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAoYnVkZHlfb3JkZXIoYnVkZHkpICE9IG9yZGVyKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHQvKlxcbitcXHQgKiB6b25lIGNoZWNrIGlzIGRvbmUgbGF0ZSB0byBhdm9pZCB1c2VsZXNzbHkgY2FsY3VsYXRpbmdcXG4rXFx0ICogem9uZS9ub2RlIGlkcyBmb3IgcGFnZXMgdGhhdCBjb3VsZCBuZXZlciBtZXJnZS5cXG4rXFx0ICovXFxuK1xcdGlmIChwYWdlX3pvbmVfaWQocGFnZSkgIT0gcGFnZV96b25lX2lkKGJ1ZGR5KSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Vk1fQlVHX09OX1BBR0UocGFnZV9jb3VudChidWRkeSkgIT0gMCwgYnVkZHkpO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuKy8qXFxuKyAqIExvY2F0ZSB0aGUgc3RydWN0IHBhZ2UgZm9yIGJvdGggdGhlIG1hdGNoaW5nIGJ1ZGR5IGluIG91clxcbisgKiBwYWlyIChidWRkeTEpIGFuZCB0aGUgY29tYmluZWQgTyhuKzEpIHBhZ2UgdGhleSBmb3JtIChwYWdlKS5cXG4rICpcXG4rICogMSkgQW55IGJ1ZGR5IEIxIHdpbGwgaGF2ZSBhbiBvcmRlciBPIHR3aW4gQjIgd2hpY2ggc2F0aXNmaWVzXFxuKyAqIHRoZSBmb2xsb3dpbmcgZXF1YXRpb246XFxuKyAqICAgICBCMiA9IEIxIF4gKDEgXFx1MDAzY1xcdTAwM2MgTylcXG4rICogRm9yIGV4YW1wbGUsIGlmIHRoZSBzdGFydGluZyBidWRkeSAoYnVkZHkyKSBpcyAjOCBpdHMgb3JkZXJcXG4rICogMSBidWRkeSBpcyAjMTA6XFxuKyAqICAgICBCMiA9IDggXiAoMSBcXHUwMDNjXFx1MDAzYyAxKSA9IDggXiAyID0gMTBcXG4rICpcXG4rICogMikgQW55IGJ1ZGR5IEIgd2lsbCBoYXZlIGFuIG9yZGVyIE8rMSBwYXJlbnQgUCB3aGljaFxcbisgKiBzYXRpc2ZpZXMgdGhlIGZvbGxvd2luZyBlcXVhdGlvbjpcXG4rICogICAgIFAgPSBCIFxcdTAwMjYgfigxIFxcdTAwM2NcXHUwMDNjIE8pXFxuKyAqXFxuKyAqIEFzc3VtcHRpb246ICpfbWVtX21hcCBpcyBjb250aWd1b3VzIGF0IGxlYXN0IHVwIHRvIE1BWF9QQUdFX09SREVSXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcXG4rX19maW5kX2J1ZGR5X3Bmbih1bnNpZ25lZCBsb25nIHBhZ2VfcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuK3tcXG4rXFx0cmV0dXJuIHBhZ2VfcGZuIF4gKDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbit9XFxuK1xcbisvKlxcbisgKiBGaW5kIHRoZSBidWRkeSBvZiBAcGFnZSBhbmQgdmFsaWRhdGUgaXQuXFxuKyAqIEBwYWdlOiBUaGUgaW5wdXQgcGFnZVxcbisgKiBAcGZuOiBUaGUgcGZuIG9mIHRoZSBwYWdlLCBpdCBzYXZlcyBhIGNhbGwgdG8gcGFnZV90b19wZm4oKSB3aGVuIHRoZVxcbisgKiAgICAgICBmdW5jdGlvbiBpcyB1c2VkIGluIHRoZSBwZXJmb3JtYW5jZS1jcml0aWNhbCBfX2ZyZWVfb25lX3BhZ2UoKS5cXG4rICogQG9yZGVyOiBUaGUgb3JkZXIgb2YgdGhlIHBhZ2VcXG4rICogQGJ1ZGR5X3BmbjogVGhlIG91dHB1dCBwb2ludGVyIHRvIHRoZSBidWRkeSBwZm4sIGl0IGFsc28gc2F2ZXMgYSBjYWxsIHRvXFxuKyAqICAgICAgICAgICAgIHBhZ2VfdG9fcGZuKCkuXFxuKyAqXFxuKyAqIFRoZSBmb3VuZCBidWRkeSBjYW4gYmUgYSBub24gUGFnZUJ1ZGR5LCBvdXQgb2YgQHBhZ2UncyB6b25lLCBvciBpdHMgb3JkZXIgaXNcXG4rICogbm90IHRoZSBzYW1lIGFzIEBwYWdlLiBUaGUgdmFsaWRhdGlvbiBpcyBuZWNlc3NhcnkgYmVmb3JlIHVzZSBpdC5cXG4rICpcXG4rICogUmV0dXJuOiB0aGUgZm91bmQgYnVkZHkgcGFnZSBvciBOVUxMIGlmIG5vdCBmb3VuZC5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmZpbmRfYnVkZHlfcGFnZV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGxvbmcgKmJ1ZGR5X3BmbilcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIF9fYnVkZHlfcGZuID0gX19maW5kX2J1ZGR5X3BmbihwZm4sIG9yZGVyKTtcXG4rXFx0c3RydWN0IHBhZ2UgKmJ1ZGR5O1xcbitcXG4rXFx0YnVkZHkgPSBwYWdlICsgKF9fYnVkZHlfcGZuIC0gcGZuKTtcXG4rXFx0aWYgKGJ1ZGR5X3BmbilcXG4rXFx0XFx0KmJ1ZGR5X3BmbiA9IF9fYnVkZHlfcGZuO1xcbitcXG4rXFx0aWYgKHBhZ2VfaXNfYnVkZHkocGFnZSwgYnVkZHksIG9yZGVyKSlcXG4rXFx0XFx0cmV0dXJuIGJ1ZGR5O1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rZXh0ZXJuIHN0cnVjdCBwYWdlICpfX3BhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4rXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBlbmRfcGZuLCBzdHJ1Y3Qgem9uZSAqem9uZSk7XFxuK1xcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpwYWdlYmxvY2tfcGZuX3RvX3BhZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuK1xcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kX3Bmbiwgc3RydWN0IHpvbmUgKnpvbmUpXFxuK3tcXG4rXFx0aWYgKHpvbmUtXFx1MDAzZWNvbnRpZ3VvdXMpXFxuK1xcdFxcdHJldHVybiBwZm5fdG9fcGFnZShzdGFydF9wZm4pO1xcbitcXG4rXFx0cmV0dXJuIF9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKHN0YXJ0X3BmbiwgZW5kX3Bmbiwgem9uZSk7XFxuK31cXG4rXFxuK2V4dGVybiB2b2lkIF9fZnJlZV9wYWdlc19jb3JlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuK1xcdFxcdGVudW0gbWVtaW5pdF9jb250ZXh0IGNvbnRleHQpO1xcbitcXG4rdm9pZCBwb3N0X2FsbG9jX2hvb2soc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzLFxcbitcXHRcXHQgICAgIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyk7XFxuK2V4dGVybiBib29sIGZyZWVfcGFnZXNfcHJlcGFyZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG4rXFxuK2V4dGVybiBpbnQgdXNlcl9taW5fZnJlZV9rYnl0ZXM7XFxuK1xcbitzdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgbmlkLFxcbitcXHRcXHRub2RlbWFza190ICpub2RlbWFzaywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKTtcXG4rI2RlZmluZSBfX2FsbG9jX2Zyb3plbl9wYWdlcyguLi4pIFxcXFxcXG4rXFx0YWxsb2NfaG9va3MoX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG4rdm9pZCBmcmVlX2Zyb3plbl9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG4rdm9pZCBmcmVlX3VucmVmX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCk7XFxuK1xcbisjaWZkZWYgQ09ORklHX05VTUFcXG4rc3RydWN0IHBhZ2UgKmFsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QsIHVuc2lnbmVkIGludCBvcmRlcik7XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmFsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuK3tcXG4rXFx0cmV0dXJuIF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnAsIG9yZGVyLCBudW1hX25vZGVfaWQoKSwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgMCAvKiBBTExPQ19ERUZBVUxUICovKTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuKyNkZWZpbmUgYWxsb2NfZnJvemVuX3BhZ2VzKC4uLikgXFxcXFxcbitcXHRhbGxvY19ob29rcyhhbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG4rXFxuK3N0cnVjdCBwYWdlICphbGxvY19mcm96ZW5fcGFnZXNfbm9sb2NrX25vcHJvZihnZnBfdCBnZnBfZmxhZ3MsIGludCBuaWQsIHVuc2lnbmVkIGludCBvcmRlcik7XFxuKyNkZWZpbmUgYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9jayguLi4pIFxcXFxcXG4rXFx0YWxsb2NfaG9va3MoYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9ja19ub3Byb2YoX19WQV9BUkdTX18pKVxcbit2b2lkIGZyZWVfZnJvemVuX3BhZ2VzX25vbG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG4rXFxuK3N0cnVjdCBwYWdlICpfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IHByZWZlcnJlZF9uaWQsXFxuK1xcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpO1xcbisjZGVmaW5lIF9fYWxsb2NfcGFnZXMoLi4uKVxcdFxcdFxcdGFsbG9jX2hvb2tzKF9fYWxsb2NfcGFnZXNfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG4rXFxuK2V4dGVybiB2b2lkIHpvbmVfcGNwX3Jlc2V0KHN0cnVjdCB6b25lICp6b25lKTtcXG4rZXh0ZXJuIHZvaWQgem9uZV9wY3BfZGlzYWJsZShzdHJ1Y3Qgem9uZSAqem9uZSk7XFxuK2V4dGVybiB2b2lkIHpvbmVfcGNwX2VuYWJsZShzdHJ1Y3Qgem9uZSAqem9uZSk7XFxuK2V4dGVybiB2b2lkIHpvbmVfcGNwX2luaXQoc3RydWN0IHpvbmUgKnpvbmUpO1xcbitcXG4rZW51bSBmYWxsYmFja19yZXN1bHQge1xcbitcXHQvKiBGb3VuZCBzdWl0YWJsZSBtaWdyYXRldHlwZSwgKm10X291dCBpcyB2YWxpZC4gKi9cXG4rXFx0RkFMTEJBQ0tfRk9VTkQsXFxuK1xcdC8qIE5vIGZhbGxiYWNrIGZvdW5kIGluIHJlcXVlc3RlZCBvcmRlci4gKi9cXG4rXFx0RkFMTEJBQ0tfRU1QVFksXFxuK1xcdC8qIFBhc3NlZCBAY2xhaW1hYmxlLCBidXQgY2xhaW1pbmcgd2hvbGUgYmxvY2sgaXMgYSBiYWQgaWRlYS4gKi9cXG4rXFx0RkFMTEJBQ0tfTk9DTEFJTSxcXG4rfTtcXG4rZW51bSBmYWxsYmFja19yZXN1bHRcXG4rZmluZF9zdWl0YWJsZV9mYWxsYmFjayhzdHJ1Y3QgZnJlZV9hcmVhICphcmVhLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuK1xcdFxcdCAgICAgICBpbnQgbWlncmF0ZXR5cGUsIGJvb2wgY2xhaW1hYmxlLCBpbnQgKm10X291dCk7XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgZnJlZV9hcmVhX2VtcHR5KHN0cnVjdCBmcmVlX2FyZWEgKmFyZWEsIGludCBtaWdyYXRldHlwZSlcXG4re1xcbitcXHRyZXR1cm4gbGlzdF9lbXB0eShcXHUwMDI2YXJlYS1cXHUwMDNlZnJlZV9saXN0W21pZ3JhdGV0eXBlXSk7XFxuK31cXG4rXFxuKy8qIENvbnZlcnQgR0ZQIGZsYWdzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgbWlncmF0ZSB0eXBlICovXFxuKyNkZWZpbmUgR0ZQX01PVkFCTEVfTUFTSyAoX19HRlBfUkVDTEFJTUFCTEV8X19HRlBfTU9WQUJMRSlcXG4rI2RlZmluZSBHRlBfTU9WQUJMRV9TSElGVCAzXFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBnZnBfbWlncmF0ZXR5cGUoY29uc3QgZ2ZwX3QgZ2ZwX2ZsYWdzKVxcbit7XFxuK1xcdFZNX1dBUk5fT04oKGdmcF9mbGFncyBcXHUwMDI2IEdGUF9NT1ZBQkxFX01BU0spID09IEdGUF9NT1ZBQkxFX01BU0spO1xcbitcXHRCVUlMRF9CVUdfT04oKDFVTCBcXHUwMDNjXFx1MDAzYyBHRlBfTU9WQUJMRV9TSElGVCkgIT0gX19fR0ZQX01PVkFCTEUpO1xcbitcXHRCVUlMRF9CVUdfT04oKF9fX0dGUF9NT1ZBQkxFIFxcdTAwM2VcXHUwMDNlIEdGUF9NT1ZBQkxFX1NISUZUKSAhPSBNSUdSQVRFX01PVkFCTEUpO1xcbitcXHRCVUlMRF9CVUdfT04oKF9fX0dGUF9SRUNMQUlNQUJMRSBcXHUwMDNlXFx1MDAzZSBHRlBfTU9WQUJMRV9TSElGVCkgIT0gTUlHUkFURV9SRUNMQUlNQUJMRSk7XFxuK1xcdEJVSUxEX0JVR19PTigoKF9fX0dGUF9NT1ZBQkxFIHwgX19fR0ZQX1JFQ0xBSU1BQkxFKSBcXHUwMDNlXFx1MDAzZVxcbitcXHRcXHQgICAgICBHRlBfTU9WQUJMRV9TSElGVCkgIT0gTUlHUkFURV9ISUdIQVRPTUlDKTtcXG4rXFxuK1xcdGlmICh1bmxpa2VseShwYWdlX2dyb3VwX2J5X21vYmlsaXR5X2Rpc2FibGVkKSlcXG4rXFx0XFx0cmV0dXJuIE1JR1JBVEVfVU5NT1ZBQkxFO1xcbitcXG4rXFx0LyogR3JvdXAgYmFzZWQgb24gbW9iaWxpdHkgKi9cXG4rXFx0cmV0dXJuIChfX2ZvcmNlIHVuc2lnbmVkIGxvbmcpKGdmcF9mbGFncyBcXHUwMDI2IEdGUF9NT1ZBQkxFX01BU0spIFxcdTAwM2VcXHUwMDNlIEdGUF9NT1ZBQkxFX1NISUZUO1xcbit9XFxuKyN1bmRlZiBHRlBfTU9WQUJMRV9NQVNLXFxuKyN1bmRlZiBHRlBfTU9WQUJMRV9TSElGVFxcbitcXG4rYm9vbCBkZWNheV9wY3BfaGlnaChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcCk7XFxuK3ZvaWQgZHJhaW5fem9uZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcCk7XFxuK3ZvaWQgZHJhaW5fYWxsX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKTtcXG4rdm9pZCBkcmFpbl9sb2NhbF9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSk7XFxuK1xcbit2b2lkIHBhZ2VfYWxsb2NfaW5pdF9jcHVocCh2b2lkKTtcXG4rdm9pZCBwYWdlX2FsbG9jX3N5c2N0bF9pbml0KHZvaWQpO1xcbitcXG4rI2VuZGlmIC8qIF9fTU1fUEFHRV9BTExPQ19IICovXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfZnJhZ19jYWNoZS5jIGIvbW0vcGFnZV9mcmFnX2NhY2hlLmNcXG5pbmRleCBkMjQyM2YzMDU3N2U0OS4uZTYzZWZlNzhiN2Q0YjQgMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZV9mcmFnX2NhY2hlLmNcXG4rKysgYi9tbS9wYWdlX2ZyYWdfY2FjaGUuY1xcbkBAIC0xOCw3ICsxOCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZV9mcmFnX2NhY2hlLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwicGFnZV9hbGxvYy5oXFxcIlxcbiBcXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgZW5jb2RlZF9wYWdlX2NyZWF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbiBcXHRcXHRcXHRcXHRcXHQgYm9vbCBwZm1lbWFsbG9jKVxcbkBAIC01NywxMCArNTcsMTAgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpfX3BhZ2VfZnJhZ19jYWNoZV9yZWZpbGwoc3RydWN0IHBhZ2VfZnJhZ19jYWNoZSAqbmMsXFxuIFxcdGdmcF9tYXNrID0gKGdmcF9tYXNrIFxcdTAwMjYgfl9fR0ZQX0RJUkVDVF9SRUNMQUlNKSB8ICBfX0dGUF9DT01QIHxcXG4gXFx0XFx0ICAgX19HRlBfTk9XQVJOIHwgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PTUVNQUxMT0M7XFxuIFxcdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzKGdmcF9tYXNrLCBQQUdFX0ZSQUdfQ0FDSEVfTUFYX09SREVSLFxcbi1cXHRcXHRcXHQgICAgIG51bWFfbWVtX2lkKCksIE5VTEwpO1xcbitcXHRcXHRcXHQgICAgIG51bWFfbWVtX2lkKCksIE5VTEwsIEFMTE9DX0RFRkFVTFQpO1xcbiAjZW5kaWZcXG4gXFx0aWYgKHVubGlrZWx5KCFwYWdlKSkge1xcbi1cXHRcXHRwYWdlID0gX19hbGxvY19wYWdlcyhnZnAsIDAsIG51bWFfbWVtX2lkKCksIE5VTEwpO1xcbitcXHRcXHRwYWdlID0gX19hbGxvY19wYWdlcyhnZnAsIDAsIG51bWFfbWVtX2lkKCksIE5VTEwsIEFMTE9DX0RFRkFVTFQpO1xcbiBcXHRcXHRvcmRlciA9IDA7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfaXNvbGF0aW9uLmMgYi9tbS9wYWdlX2lzb2xhdGlvbi5jXFxuaW5kZXggMzJjZThhN2Q5ZGYzNTUuLmU1ZGZjN2JmNDk0NDYwIDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfaXNvbGF0aW9uLmNcXG4rKysgYi9tbS9wYWdlX2lzb2xhdGlvbi5jXFxuQEAgLTExLDYgKzExLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2Vfb3duZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21pZ3JhdGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJwYWdlX2FsbG9jLmhcXFwiXFxuIFxcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9wYWdlX2lzb2xhdGlvbi5oXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmNcXG5pbmRleCBmZmJhYmEzZDY5ZDNjZS4uMjkwZTQ3ZTFmYTA5ZTEgMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZV9vd25lci5jXFxuKysrIGIvbW0vcGFnZV9vd25lci5jXFxuQEAgLTEzLDcgKzEzLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL2Nsb2NrLmhcXHUwMDNlXFxuIFxcbi0jaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInBhZ2VfYWxsb2MuaFxcXCJcXG4gXFxuIC8qXFxuICAqIFRPRE86IHRlYWNoIFBBR0VfT1dORVJfU1RBQ0tfREVQVEggKF9fZHVtcF9wYWdlX293bmVyIGFuZCBzYXZlX3N0YWNrKVxcbmRpZmYgLS1naXQgYS9tbS9zaG93X21lbS5jIGIvbW0vc2hvd19tZW0uY1xcbmluZGV4IDFiNzIxYThhZGU2N2RkLi5kMTI4OGI0YzJiNjQwMSAxMDA2NDRcXG4tLS0gYS9tbS9zaG93X21lbS5jXFxuKysrIGIvbW0vc2hvd19tZW0uY1xcbkBAIC0xNiw2ICsxNiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC92bXN0YXQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwicGFnZV9hbGxvYy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwic3dhcC5oXFxcIlxcbiBcXG4gYXRvbWljX2xvbmdfdCBfdG90YWxyYW1fcGFnZXMgX19yZWFkX21vc3RseTtcXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXFxuaW5kZXggOWY3NTRjZjFjMTg3NGMuLmZmNDRmNDM3M2Q1MjJiIDEwMDY0NFxcbi0tLSBhL21tL3NsdWIuY1xcbisrKyBiL21tL3NsdWIuY1xcbkBAIC01Myw2ICs1Myw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMva21lbS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJwYWdlX2FsbG9jLmhcXFwiXFxuIFxcbiAvKlxcbiAgKiBMb2NrIG9yZGVyOlxcbkBAIC0zMjkxLDcgKzMyOTIsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFiICphbGxvY19zbGFiX3BhZ2UoZ2ZwX3QgZmxhZ3MsIGludCBub2RlLFxcbiBcXHRlbHNlIGlmIChub2RlID09IE5VTUFfTk9fTk9ERSlcXG4gXFx0XFx0cGFnZSA9IGFsbG9jX2Zyb3plbl9wYWdlcyhmbGFncywgb3JkZXIpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdHBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlcyhmbGFncywgb3JkZXIsIG5vZGUsIE5VTEwpO1xcbitcXHRcXHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXMoZmxhZ3MsIG9yZGVyLCBub2RlLCBOVUxMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgQUxMT0NfREVGQVVMVCk7XFxuIFxcbiBcXHRpZiAoIXBhZ2UpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbkBAIC01Mjc1LDcgKzUyNzcsOCBAQCBzdGF0aWMgdm9pZCAqX19fa21hbGxvY19sYXJnZV9ub2RlKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpXFxuIFxcdGlmIChub2RlID09IE5VTUFfTk9fTk9ERSlcXG4gXFx0XFx0cGFnZSA9IGFsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZmxhZ3MsIG9yZGVyKTtcXG4gXFx0ZWxzZVxcbi1cXHRcXHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGZsYWdzLCBvcmRlciwgbm9kZSwgTlVMTCk7XFxuK1xcdFxcdHBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZmxhZ3MsIG9yZGVyLCBub2RlLCBOVUxMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBBTExPQ19ERUZBVUxUKTtcXG4gXFxuIFxcdGlmIChwYWdlKSB7XFxuIFxcdFxcdHB0ciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTtcXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vc3dhcC5jXFxuaW5kZXggNThlNGVmZjY5OGNjNGUuLmQyNTEzMTMwNWM5NGNiIDEwMDY0NFxcbi0tLSBhL21tL3N3YXAuY1xcbisrKyBiL21tL3N3YXAuY1xcbkBAIC0zOSw2ICszOSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9idWZmZXJfaGVhZC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJwYWdlX2FsbG9jLmhcXFwiXFxuIFxcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9wYWdlbWFwLmhcXHUwMDNlXFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCA3NTRjNWY1ZDcxNmFhZC4uZGUxODc5ZGIzOTE2MGIgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC02Niw2ICs2Niw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9zeXNjdGwuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwicGFnZV9hbGxvYy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwic3dhcC5oXFxcIlxcbiBcXG4gI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTXFxuZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmNcXG5pbmRleCA3YjkzZmJmOWFmMDkyNi4uM2I1Y2IxMDMxZjcyMDkgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zdGF0LmNcXG4rKysgYi9tbS92bXN0YXQuY1xcbkBAIC0zMCw2ICszMCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9pc29sYXRpb24uaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwicGFnZV9hbGxvYy5oXFxcIlxcbiBcXG4gI2lmZGVmIENPTkZJR19QUk9DX0ZTXFxuICNpZmRlZiBDT05GSUdfTlVNQVxcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oIGIvdG9vbHMvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaFxcbmluZGV4IDZjNzVkZjMwYTI4MWQxLi5hOTNiOGJkMjAwYjc2MCAxMDA2NDRcXG4tLS0gYS90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oXFxuKysrIGIvdG9vbHMvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaFxcbkBAIC01NSw3ICs1NSw2IEBAIGVudW0ge1xcbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcXG4gXFx0X19fR0ZQX05PTE9DS0RFUF9CSVQsXFxuICNlbmRpZlxcbi1cXHRfX19HRlBfTk9fT0JKX0VYVF9CSVQsXFxuIFxcdF9fX0dGUF9MQVNUX0JJVFxcbiB9O1xcbiBcXG5AQCAtOTYsNyArOTUsNiBAQCBlbnVtIHtcXG4gI2Vsc2VcXG4gI2RlZmluZSBfX19HRlBfTk9MT0NLREVQXFx0MFxcbiAjZW5kaWZcXG4tI2RlZmluZSBfX19HRlBfTk9fT0JKX0VYVCAgICAgICBCSVQoX19fR0ZQX05PX09CSl9FWFRfQklUKVxcbiBcXG4gLypcXG4gICogUGh5c2ljYWwgYWRkcmVzcyB6b25lIG1vZGlmaWVycyAoc2VlIGxpbnV4L21tem9uZS5oIC0gbG93IGZvdXIgYml0cylcXG5AQCAtMTM3LDE3ICsxMzUsMTIgQEAgZW51bSB7XFxuICAqIG5vZGUgd2l0aCBubyBmYWxsYmFja3Mgb3IgcGxhY2VtZW50IHBvbGljeSBlbmZvcmNlbWVudHMuXFxuICAqXFxuICAqICVfX0dGUF9BQ0NPVU5UIGNhdXNlcyB0aGUgYWxsb2NhdGlvbiB0byBiZSBhY2NvdW50ZWQgdG8ga21lbWNnLlxcbi0gKlxcbi0gKiAlX19HRlBfTk9fT0JKX0VYVCBjYXVzZXMgc2xhYiBhbGxvY2F0aW9uIHRvIGhhdmUgbm8gb2JqZWN0IGV4dGVuc2lvbi5cXG4tICogbWFya19vYmpfY29kZXRhZ19lbXB0eSgpIHNob3VsZCBiZSBjYWxsZWQgdXBvbiBmcmVlaW5nIGZvciBvYmplY3RzIGFsbG9jYXRlZFxcbi0gKiB3aXRoIHRoaXMgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZWlyIE5VTEwgdGFncyBhcmUgZXhwZWN0ZWQgYW5kIG5vcm1hbC5cXG4gICovXFxuICNkZWZpbmUgX19HRlBfUkVDTEFJTUFCTEUgKChfX2ZvcmNlIGdmcF90KV9fX0dGUF9SRUNMQUlNQUJMRSlcXG4gI2RlZmluZSBfX0dGUF9XUklURVxcdCgoX19mb3JjZSBnZnBfdClfX19HRlBfV1JJVEUpXFxuICNkZWZpbmUgX19HRlBfSEFSRFdBTEwgICAoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX0hBUkRXQUxMKVxcbiAjZGVmaW5lIF9fR0ZQX1RISVNOT0RFXFx0KChfX2ZvcmNlIGdmcF90KV9fX0dGUF9USElTTk9ERSlcXG4gI2RlZmluZSBfX0dGUF9BQ0NPVU5UXFx0KChfX2ZvcmNlIGdmcF90KV9fX0dGUF9BQ0NPVU5UKVxcbi0jZGVmaW5lIF9fR0ZQX05PX09CSl9FWFQgICAoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX05PX09CSl9FWFQpXFxuIFxcbiAvKipcXG4gICogRE9DOiBXYXRlcm1hcmsgbW9kaWZpZXJzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAzOjI5OjM2Ljc1MzM0NTI4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODg3OTgxODUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9ja19ub3Byb2ZcIixcbiAgICBcImFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBpbnRlcm5hbCBwYWdlIGFsbG9jYXRvciBBUEkgYnkgaW50cm9kdWNpbmcgYGFsbG9jX2ZsYWdzYCB0byBgX19hbGxvY19wYWdlc19ub3Byb2ZgIGFuZCBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCwgcmVwbGFjaW5nIGBfX0dGUF9OT19PQkpfRVhUYCBhbmQgYEFMTE9DX1RSWUxPQ0tgIHdpdGggYEFMTE9DX05PX0NPREVUQUdgIGFuZCBgQUxMT0NfTk9MT0NLYC4gSXQgYWxzbyBtb3ZlcyBgYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2ZgIG91dC1vZi1saW5lLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHBhZ2UgYWxsb2NhdGlvbiwgZXNwZWNpYWxseSBpbiBub24tYmxvY2tpbmcvbm9sb2NrIGNvbnRleHRzIGFuZCBtZW1vcnkgcHJvZmlsaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGViZjQwMTgzZTZmYmYyNzA0NmM4OGU1NjQ4NGQ3MTcwNmQwMGIzYWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDAzOjI5OjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9jcHVzZXRzLnJzdFxuaW5kZXggYzc5MDllNWFjMTM2MWEuLjUyYTIxM2FmZjA0ZTVmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2NwdXNldHMucnN0XG5AQCAtMjg0LDcgKzI4NCw3IEBAIHRha2UgYWN0aW9uLlxuID09XHUwMDNlXG4gICAgIFVubGVzcyB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBieSB3cml0aW5nIFwiMVwiIHRvIHRoZSBzcGVjaWFsIGZpbGVcbiAgICAgL2Rldi9jcHVzZXQvbWVtb3J5X3ByZXNzdXJlX2VuYWJsZWQsIHRoZSBob29rIGluIHRoZSByZWJhbGFuY2Vcbi0gICAgY29kZSBvZiBfX2FsbG9jX3BhZ2VzKCkgZm9yIHRoaXMgbWV0cmljIHJlZHVjZXMgdG8gc2ltcGx5IG5vdGljaW5nXG4rICAgIGNvZGUgb2YgdGhlIHBhZ2UgYWxsb2NhdG9yIGZvciB0aGlzIG1ldHJpYyByZWR1Y2VzIHRvIHNpbXBseSBub3RpY2luZ1xuICAgICB0aGF0IHRoZSBjcHVzZXRfbWVtb3J5X3ByZXNzdXJlX2VuYWJsZWQgZmxhZyBpcyB6ZXJvLiAgU28gb25seVxuICAgICBzeXN0ZW1zIHRoYXQgZW5hYmxlIHRoaXMgZmVhdHVyZSB3aWxsIGNvbXB1dGUgdGhlIG1ldHJpYy5cbiBcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3RcbmluZGV4IDIzZjhkMTNjMjYyOWQ2Li4xNmYzNzEzNWVkODBkZiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0XG5AQCAtNzYxLDcgKzc2MSw3IEBAIGNvbXBhY3RfZmFpbFxuIFx0YnV0IGZhaWxlZC5cbiBcbiBJdCBpcyBwb3NzaWJsZSB0byBlc3RhYmxpc2ggaG93IGxvbmcgdGhlIHN0YWxscyB3ZXJlIHVzaW5nIHRoZSBmdW5jdGlvblxuLXRyYWNlciB0byByZWNvcmQgaG93IGxvbmcgd2FzIHNwZW50IGluIF9fYWxsb2NfcGFnZXMoKSBhbmRcbit0cmFjZXIgdG8gcmVjb3JkIGhvdyBsb25nIHdhcyBzcGVudCBpbiB0aGUgcGFnZSBhbGxvY2F0b3IgYW5kXG4gdXNpbmcgdGhlIG1tX3BhZ2VfYWxsb2MgdHJhY2Vwb2ludCB0byBpZGVudGlmeSB3aGljaCBhbGxvY2F0aW9ucyB3ZXJlXG4gZm9yIGh1Z2UgcGFnZXMuXG4gXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggZGIzZDhjNDQxZTRjMDAuLmRlODc5MjExNzZiMGRjIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMTcxODEsNiArMTcxODEsNyBAQCBGOlx0bW0vZGVidWdfcGFnZV9hbGxvYy5jXG4gRjpcdG1tL2RlYnVnX3BhZ2VfcmVmLmNcbiBGOlx0bW0vZmFpbF9wYWdlX2FsbG9jLmNcbiBGOlx0bW0vcGFnZV9hbGxvYy5jXG4rRjpcdG1tL3BhZ2VfYWxsb2MuaFxuIEY6XHRtbS9wYWdlX2V4dC5jXG4gRjpcdG1tL3BhZ2VfZnJhZ19jYWNoZS5jXG4gRjpcdG1tL3BhZ2VfaXNvbGF0aW9uLmNcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuYyBiL2FyY2gveDg2L2V2ZW50cy9pbnRlbC9kcy5jXG5pbmRleCBlODZlNGJhOTFlMWIzNy4uODk0MGYwMjkyMjI5ZjUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9ldmVudHMvaW50ZWwvZHMuY1xuKysrIGIvYXJjaC94ODYvZXZlbnRzL2ludGVsL2RzLmNcbkBAIC04MzIsNyArODMyLDcgQEAgc3RhdGljIHZvaWQgKmRzYWxsb2NfcGFnZXMoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCBpbnQgY3B1KVxuIFx0aW50IG5vZGUgPSBjcHVfdG9fbm9kZShjcHUpO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4tXHRwYWdlID0gX19hbGxvY19wYWdlc19ub2RlKG5vZGUsIGZsYWdzIHwgX19HRlBfWkVSTywgb3JkZXIpO1xuK1x0cGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgZmxhZ3MgfCBfX0dGUF9aRVJPLCBvcmRlcik7XG4gXHRyZXR1cm4gcGFnZSA/IHBhZ2VfYWRkcmVzcyhwYWdlKSA6IE5VTEw7XG4gfVxuIFxuQEAgLTEwODgsOSArMTA4OCw5IEBAIHZvaWQgaW5pdF9hcmNoX3BlYnNfb25fY3B1KGludCBjcHUpXG4gXG4gXHQvKlxuIFx0ICogNEtCLWFsaWduZWQgcG9pbnRlciBvZiB0aGUgb3V0cHV0IGJ1ZmZlclxuLVx0ICogKF9fYWxsb2NfcGFnZXNfbm9kZSgpIHJldHVybiBwYWdlIGFsaWduZWQgYWRkcmVzcylcbitcdCAqIChhbGxvY19wYWdlc19ub2RlKCkgcmV0dXJucyBwYWdlIGFsaWduZWQgYWRkcmVzcylcbiBcdCAqIEJ1ZmZlciBTaXplID0gNEtCICogMl5TSVpFXG4tXHQgKiBjb250aWd1b3VzIHBoeXNpY2FsIGJ1ZmZlciAoX19hbGxvY19wYWdlc19ub2RlKCkgd2l0aCBvcmRlcilcbitcdCAqIGNvbnRpZ3VvdXMgcGh5c2ljYWwgYnVmZmVyIChhbGxvY19wYWdlc19ub2RlKCkgd2l0aCBvcmRlcilcbiBcdCAqL1xuIFx0YXJjaF9wZWJzX2Jhc2UgPSB2aXJ0X3RvX3BoeXMoY3B1Yy1cdTAwM2VwZWJzX3ZhZGRyKSB8IFBFQlNfQlVGRkVSX1NISUZUO1xuIFx0d3Jtc3JxX29uX2NwdShjcHUsIE1TUl9JQTMyX1BFQlNfQkFTRSwgYXJjaF9wZWJzX2Jhc2UpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5pbmRleCBhMDNhZGQwMGY5MjNlYy4uMjZmMTU1ODRkNGI1MDUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5AQCAtMzA0MCw3ICszMDQwLDcgQEAgc3RydWN0IHZtY3MgKmFsbG9jX3ZtY3NfY3B1KGJvb2wgc2hhZG93LCBpbnQgY3B1LCBnZnBfdCBmbGFncylcbiBcdHN0cnVjdCBwYWdlICpwYWdlcztcbiBcdHN0cnVjdCB2bWNzICp2bWNzO1xuIFxuLVx0cGFnZXMgPSBfX2FsbG9jX3BhZ2VzX25vZGUobm9kZSwgZmxhZ3MsIDApO1xuK1x0cGFnZXMgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGZsYWdzLCAwKTtcbiBcdGlmICghcGFnZXMpXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0dm1jcyA9IHBhZ2VfYWRkcmVzcyhwYWdlcyk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC9ody5jIGIvYXJjaC94ODYvdmlydC9ody5jXG5pbmRleCA3ZTkwOTFjNjQwYmUwYi4uYTIzNjQ0N2FjN2EyNjIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni92aXJ0L2h3LmNcbisrKyBiL2FyY2gveDg2L3ZpcnQvaHcuY1xuQEAgLTE5Niw3ICsxOTYsNyBAQCBzdGF0aWMgX19pbml0IGludCBfX3g4Nl92bXhfaW5pdCh2b2lkKVxuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdFx0c3RydWN0IHZtY3MgKnZtY3M7XG4gXG4tXHRcdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzX25vZGUobm9kZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIDApO1xuK1x0XHRwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgMCk7XG4gXHRcdGlmIChXQVJOX09OX09OQ0UoIXBhZ2UpKSB7XG4gXHRcdFx0eDg2X3ZteF9leGl0KCk7XG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS14cC94cGNfdXYuYyBiL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX3V2LmNcbmluZGV4IDc3MmM3ODcyNjg5MzI3Li5hYWNmZjcwMjA0MjQxNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX3V2LmNcbisrKyBiL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX3V2LmNcbkBAIC0xNzAsNyArMTcwLDcgQEAgeHBjX2NyZWF0ZV9ncnVfbXFfdXYodW5zaWduZWQgaW50IG1xX3NpemUsIGludCBjcHUsIGNoYXIgKmlycV9uYW1lLFxuIFx0bXEtXHUwMDNlbW1yX2JsYWRlID0gdXZfY3B1X3RvX2JsYWRlX2lkKGNwdSk7XG4gXG4gXHRuaWQgPSBjcHVfdG9fbm9kZShjcHUpO1xuLVx0cGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9kZShuaWQsXG4rXHRwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShuaWQsXG4gXHRcdFx0XHQgICAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyB8IF9fR0ZQX1RISVNOT0RFLFxuIFx0XHRcdFx0ICAgICAgcGdfb3JkZXIpO1xuIFx0aWYgKHBhZ2UgPT0gTlVMTCkge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9mdW5ldGhfcnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9mdW5ldGhfcnguY1xuaW5kZXggN2UyNTg0ODk1ZGUzOWIuLmQ3MDAwMDE3YWMyYmRjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnVuZ2libGUvZnVuZXRoL2Z1bmV0aF9yeC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvZnVuZXRoX3J4LmNcbkBAIC0xMDMsNyArMTAzLDcgQEAgc3RhdGljIGludCBmdW5ldGhfYWxsb2NfcGFnZShzdHJ1Y3QgZnVuZXRoX3J4cSAqcSwgc3RydWN0IGZ1bmV0aF9yeGJ1ZiAqcmIsXG4gXHRpZiAoY2FjaGVfZ2V0KHEsIHJiKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRwID0gX19hbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCB8IF9fR0ZQX05PV0FSTiwgMCk7XG4rXHRwID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAgfCBfX0dGUF9OT1dBUk4sIDApO1xuIFx0aWYgKHVubGlrZWx5KCFwKSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnAuaCBiL2luY2x1ZGUvbGludXgvZ2ZwLmhcbmluZGV4IGNkZjk1YTlmMGI4N2MxLi40ZDU3ZTljMGJmMjA0ZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZ2ZwLmhcbkBAIC0xNywyOCArMTcsNiBAQCBzdHJ1Y3QgbWVtcG9saWN5O1xuICNkZWZpbmUgX19kZWZhdWx0X2dmcChhLGIsLi4uKSBiXG4gI2RlZmluZSBkZWZhdWx0X2dmcCguLi4pIF9fZGVmYXVsdF9nZnAoLCMjX19WQV9BUkdTX18sR0ZQX0tFUk5FTClcbiBcbi0vKiBDb252ZXJ0IEdGUCBmbGFncyB0byB0aGVpciBjb3JyZXNwb25kaW5nIG1pZ3JhdGUgdHlwZSAqL1xuLSNkZWZpbmUgR0ZQX01PVkFCTEVfTUFTSyAoX19HRlBfUkVDTEFJTUFCTEV8X19HRlBfTU9WQUJMRSlcbi0jZGVmaW5lIEdGUF9NT1ZBQkxFX1NISUZUIDNcbi1cbi1zdGF0aWMgaW5saW5lIGludCBnZnBfbWlncmF0ZXR5cGUoY29uc3QgZ2ZwX3QgZ2ZwX2ZsYWdzKVxuLXtcbi1cdFZNX1dBUk5fT04oKGdmcF9mbGFncyBcdTAwMjYgR0ZQX01PVkFCTEVfTUFTSykgPT0gR0ZQX01PVkFCTEVfTUFTSyk7XG4tXHRCVUlMRF9CVUdfT04oKDFVTCBcdTAwM2NcdTAwM2MgR0ZQX01PVkFCTEVfU0hJRlQpICE9IF9fX0dGUF9NT1ZBQkxFKTtcbi1cdEJVSUxEX0JVR19PTigoX19fR0ZQX01PVkFCTEUgXHUwMDNlXHUwMDNlIEdGUF9NT1ZBQkxFX1NISUZUKSAhPSBNSUdSQVRFX01PVkFCTEUpO1xuLVx0QlVJTERfQlVHX09OKChfX19HRlBfUkVDTEFJTUFCTEUgXHUwMDNlXHUwMDNlIEdGUF9NT1ZBQkxFX1NISUZUKSAhPSBNSUdSQVRFX1JFQ0xBSU1BQkxFKTtcbi1cdEJVSUxEX0JVR19PTigoKF9fX0dGUF9NT1ZBQkxFIHwgX19fR0ZQX1JFQ0xBSU1BQkxFKSBcdTAwM2VcdTAwM2Vcbi1cdFx0ICAgICAgR0ZQX01PVkFCTEVfU0hJRlQpICE9IE1JR1JBVEVfSElHSEFUT01JQyk7XG4tXG4tXHRpZiAodW5saWtlbHkocGFnZV9ncm91cF9ieV9tb2JpbGl0eV9kaXNhYmxlZCkpXG4tXHRcdHJldHVybiBNSUdSQVRFX1VOTU9WQUJMRTtcbi1cbi1cdC8qIEdyb3VwIGJhc2VkIG9uIG1vYmlsaXR5ICovXG4tXHRyZXR1cm4gKF9fZm9yY2UgdW5zaWduZWQgbG9uZykoZ2ZwX2ZsYWdzIFx1MDAyNiBHRlBfTU9WQUJMRV9NQVNLKSBcdTAwM2VcdTAwM2UgR0ZQX01PVkFCTEVfU0hJRlQ7XG4tfVxuLSN1bmRlZiBHRlBfTU9WQUJMRV9NQVNLXG4tI3VuZGVmIEdGUF9NT1ZBQkxFX1NISUZUXG4tXG4gc3RhdGljIGlubGluZSBib29sIGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGNvbnN0IGdmcF90IGdmcF9mbGFncylcbiB7XG4gXHRyZXR1cm4gISEoZ2ZwX2ZsYWdzIFx1MDAyNiBfX0dGUF9ESVJFQ1RfUkVDTEFJTSk7XG5AQCAtMjI2LDEwICsyMDQsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcikgeyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGFyY2hfYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKSB7IH1cbiAjZW5kaWZcbiBcbi1zdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBwcmVmZXJyZWRfbmlkLFxuLVx0XHRub2RlbWFza190ICpub2RlbWFzayk7XG4tI2RlZmluZSBfX2FsbG9jX3BhZ2VzKC4uLilcdFx0XHRhbGxvY19ob29rcyhfX2FsbG9jX3BhZ2VzX25vcHJvZihfX1ZBX0FSR1NfXykpXG4tXG4gc3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IHByZWZlcnJlZF9uaWQsXG4gXHRcdG5vZGVtYXNrX3QgKm5vZGVtYXNrKTtcbiAjZGVmaW5lIF9fZm9saW9fYWxsb2MoLi4uKVx0XHRcdGFsbG9jX2hvb2tzKF9fZm9saW9fYWxsb2Nfbm9wcm9mKF9fVkFfQVJHU19fKSlcbkBAIC0yNzgsMjEgKzI1Miw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB3YXJuX2lmX25vZGVfb2ZmbGluZShpbnQgdGhpc19ub2RlLCBnZnBfdCBnZnBfbWFzaylcbiBcdGR1bXBfc3RhY2soKTtcbiB9XG4gXG4tLypcbi0gKiBBbGxvY2F0ZSBwYWdlcywgcHJlZmVycmluZyB0aGUgbm9kZSBnaXZlbiBhcyBuaWQuIFRoZSBub2RlIG11c3QgYmUgdmFsaWQgYW5kXG4tICogb25saW5lLiBGb3IgbW9yZSBnZW5lcmFsIGludGVyZmFjZSwgc2VlIGFsbG9jX3BhZ2VzX25vZGUoKS5cbi0gKi9cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpcbi1fX2FsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKGludCBuaWQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4te1xuLVx0Vk1fQlVHX09OKG5pZCBcdTAwM2MgMCB8fCBuaWQgXHUwMDNlPSBNQVhfTlVNTk9ERVMpO1xuLVx0d2Fybl9pZl9ub2RlX29mZmxpbmUobmlkLCBnZnBfbWFzayk7XG4tXG4tXHRyZXR1cm4gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX21hc2ssIG9yZGVyLCBuaWQsIE5VTEwpO1xuLX1cbi1cbi0jZGVmaW5lICBfX2FsbG9jX3BhZ2VzX25vZGUoLi4uKVx0XHRhbGxvY19ob29rcyhfX2FsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKF9fVkFfQVJHU19fKSlcbi1cbiBzdGF0aWMgaW5saW5lXG4gc3RydWN0IGZvbGlvICpfX2ZvbGlvX2FsbG9jX25vZGVfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgbmlkKVxuIHtcbkBAIC0zMDksMTQgKzI2OCw3IEBAIHN0cnVjdCBmb2xpbyAqX19mb2xpb19hbGxvY19ub2RlX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IG5pZClcbiAgKiBwcmVmZXIgdGhlIGN1cnJlbnQgQ1BVJ3MgY2xvc2VzdCBub2RlLiBPdGhlcndpc2Ugbm9kZSBtdXN0IGJlIHZhbGlkIGFuZFxuICAqIG9ubGluZS5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICphbGxvY19wYWdlc19ub2RlX25vcHJvZihpbnQgbmlkLCBnZnBfdCBnZnBfbWFzayxcbi1cdFx0XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgb3JkZXIpXG4te1xuLVx0aWYgKG5pZCA9PSBOVU1BX05PX05PREUpXG4tXHRcdG5pZCA9IG51bWFfbWVtX2lkKCk7XG4tXG4tXHRyZXR1cm4gX19hbGxvY19wYWdlc19ub2RlX25vcHJvZihuaWQsIGdmcF9tYXNrLCBvcmRlcik7XG4tfVxuK3N0cnVjdCBwYWdlICphbGxvY19wYWdlc19ub2RlX25vcHJvZihpbnQgbmlkLCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKTtcbiBcbiAjZGVmaW5lICBhbGxvY19wYWdlc19ub2RlKC4uLilcdFx0XHRhbGxvY19ob29rcyhhbGxvY19wYWdlc19ub2RlX25vcHJvZihfX1ZBX0FSR1NfXykpXG4gXG5AQCAtMzk1LDEwICszNDcsNiBAQCBleHRlcm4gdm9pZCBmcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IG9yZGVyKTtcbiAjZGVmaW5lIF9fZnJlZV9wYWdlKHBhZ2UpIF9fZnJlZV9wYWdlcygocGFnZSksIDApXG4gI2RlZmluZSBmcmVlX3BhZ2UoYWRkcikgZnJlZV9wYWdlcygoYWRkciksIDApXG4gXG4tdm9pZCBwYWdlX2FsbG9jX2luaXRfY3B1aHAodm9pZCk7XG4tYm9vbCBkZWNheV9wY3BfaGlnaChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcCk7XG4tdm9pZCBkcmFpbl96b25lX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwKTtcbi12b2lkIGRyYWluX2FsbF9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSk7XG4gdm9pZCBkcmFpbl9sb2NhbF9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSk7XG4gXG4gdm9pZCBwYWdlX2FsbG9jX2luaXRfbGF0ZSh2b2lkKTtcbmRpZmYgLS1naXQgYS9tbS9hbGxvY190YWcuYyBiL21tL2FsbG9jX3RhZy5jXG5pbmRleCBkOWJlMWNmNTE4N2Q5Ny4uYTMyYTk0ZTc1OWI5NGIgMTAwNjQ0XG4tLS0gYS9tbS9hbGxvY190YWcuY1xuKysrIGIvbW0vYWxsb2NfdGFnLmNcbkBAIC0xNSw2ICsxNSw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva21lbWxlYWsuaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4rXG4gI2RlZmluZSBBTExPQ0lORk9fRklMRV9OQU1FXHRcdFwiYWxsb2NpbmZvXCJcbiAjZGVmaW5lIE1PRFVMRV9BTExPQ19UQUdfVk1BUF9TSVpFXHQoMTAwMDAwVUwgKiBzaXplb2Yoc3RydWN0IGFsbG9jX3RhZykpXG4gI2RlZmluZSBTRUNUSU9OX1NUQVJUKE5BTUUpXHRcdChDT0RFVEFHX1NFQ1RJT05fU1RBUlRfUFJFRklYIE5BTUUpXG5AQCAtNzgzLDE5ICs3ODUsNiBAQCBzdHJ1Y3QgcGZuX3Bvb2wge1xuIFxuICNkZWZpbmUgUEZOX1BPT0xfU0laRVx0XHRcdCgoUEFHRV9TSVpFIC0gb2Zmc2V0b2Yoc3RydWN0IHBmbl9wb29sLCBwZm5zKSkgLyBcXFxuIFx0XHRcdFx0XHQgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKVxuLVxuLS8qXG4tICogU2tpcCBlYXJseSBQRk4gcmVjb3JkaW5nIGZvciBhIHBhZ2UgYWxsb2NhdGlvbi4gIFJldXNlcyB0aGVcbi0gKiAlX19HRlBfTk9fT0JKX0VYVCBiaXQuICBVc2VkIGJ5IF9fYWxsb2NfdGFnX2FkZF9lYXJseV9wZm4oKSB0byBhdm9pZFxuLSAqIHJlY3Vyc2lvbiB3aGVuIGFsbG9jYXRpbmcgcGFnZXMgZm9yIHRoZSBlYXJseSBQRk4gdHJhY2tpbmcgbGlzdFxuLSAqIGl0c2VsZi5cbi0gKlxuLSAqIENvZGV0YWdzIG9mIHRoZSBwYWdlcyBhbGxvY2F0ZWQgd2l0aCBfX0dGUF9OT19DT0RFVEFHIHNob3VsZCBiZVxuLSAqIGNsZWFyZWQgKHZpYSBjbGVhcl9wYWdlX3RhZ19yZWYoKSkgYmVmb3JlIGZyZWVpbmcgdGhlIHBhZ2VzIHRvIHByZXZlbnRcbi0gKiBhbGxvY190YWdfc3ViX2NoZWNrKCkgZnJvbSB0cmlnZ2VyaW5nIGEgd2FybmluZy5cbi0gKi9cbi0jZGVmaW5lIF9fR0ZQX05PX0NPREVUQUdcdFx0X19HRlBfTk9fT0JKX0VYVFxuLVxuIHN0YXRpYyBzdHJ1Y3QgcGZuX3Bvb2wgKmN1cnJlbnRfcGZuX3Bvb2wgX19pbml0ZGF0YTtcbiBcbiBzdGF0aWMgdm9pZCBfX2luaXQgX19hbGxvY190YWdfYWRkX2Vhcmx5X3Bmbih1bnNpZ25lZCBsb25nIHBmbilcbkBAIC04MDYsNyArNzk1LDggQEAgc3RhdGljIHZvaWQgX19pbml0IF9fYWxsb2NfdGFnX2FkZF9lYXJseV9wZm4odW5zaWduZWQgbG9uZyBwZm4pXG4gXHRkbyB7XG4gXHRcdHBvb2wgPSBSRUFEX09OQ0UoY3VycmVudF9wZm5fcG9vbCk7XG4gXHRcdGlmICghcG9vbCB8fCBhdG9taWNfcmVhZChcdTAwMjZwb29sLVx1MDAzZWNvdW50KSBcdTAwM2U9IFBGTl9QT09MX1NJWkUpIHtcbi1cdFx0XHRzdHJ1Y3QgcGFnZSAqbmV3X3BhZ2UgPSBhbGxvY19wYWdlKF9fR0ZQX0hJR0ggfCBfX0dGUF9OT19DT0RFVEFHKTtcbitcdFx0XHRzdHJ1Y3QgcGFnZSAqbmV3X3BhZ2UgPSBfX2FsbG9jX3BhZ2VzKF9fR0ZQX0hJR0gsIDAsIG51bWFfbWVtX2lkKCksXG4rXHRcdFx0XHRcdFx0XHQgICAgICBOVUxMLCBBTExPQ19OT19DT0RFVEFHKTtcbiBcdFx0XHRzdHJ1Y3QgcGZuX3Bvb2wgKm5ldztcbiBcbiBcdFx0XHRpZiAoIW5ld19wYWdlKSB7XG5AQCAtODM3LDcgKzgyNyw3IEBAIHR5cGVkZWYgdm9pZCBhbGxvY190YWdfYWRkX2Z1bmModW5zaWduZWQgbG9uZyBwZm4pO1xuIHN0YXRpYyBhbGxvY190YWdfYWRkX2Z1bmMgX19yY3UgKmFsbG9jX3RhZ19hZGRfZWFybHlfcGZuX3B0ciBfX3JlZmRhdGEgPVxuIFx0UkNVX0lOSVRJQUxJWkVSKF9fYWxsb2NfdGFnX2FkZF9lYXJseV9wZm4pO1xuIFxuLXZvaWQgYWxsb2NfdGFnX2FkZF9lYXJseV9wZm4odW5zaWduZWQgbG9uZyBwZm4sIGdmcF90IGdmcF9mbGFncylcbit2b2lkIGFsbG9jX3RhZ19hZGRfZWFybHlfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4ge1xuIFx0YWxsb2NfdGFnX2FkZF9mdW5jICphbGxvY190YWdfYWRkO1xuIFxuQEAgLTg0NSw3ICs4MzUsNyBAQCB2b2lkIGFsbG9jX3RhZ19hZGRfZWFybHlfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBnZnBfdCBnZnBfZmxhZ3MpXG4gXHRcdHJldHVybjtcbiBcbiBcdC8qIFNraXAgYWxsb2NhdGlvbnMgZm9yIHRoZSB0cmFja2luZyBsaXN0IGl0c2VsZiB0byBhdm9pZCByZWN1cnNpb24uICovXG4tXHRpZiAoZ2ZwX2ZsYWdzIFx1MDAyNiBfX0dGUF9OT19DT0RFVEFHKVxuK1x0aWYgKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19OT19DT0RFVEFHKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG5kaWZmIC0tZ2l0IGEvbW0vY29tcGFjdGlvbi5jIGIvbW0vY29tcGFjdGlvbi5jXG5pbmRleCBmMDg3NjVhZGUwMTRjZS4uNGIyMzE4ZmFkNGViNTkgMTAwNjQ0XG4tLS0gYS9tbS9jb21wYWN0aW9uLmNcbisrKyBiL21tL2NvbXBhY3Rpb24uY1xuQEAgLTI0LDYgKzI0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX293bmVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdXNldC5oXHUwMDNlXG4rI2luY2x1ZGUgXCJwYWdlX2FsbG9jLmhcIlxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gXG4gI2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5AQCAtODIsNyArODMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGludCBvcmRlcikgeyByZXR1cm4gZmFsc2U7IH1cbiBcbiBzdGF0aWMgc3RydWN0IHBhZ2UgKm1hcmtfYWxsb2NhdGVkX25vcHJvZihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBnZnBfZmxhZ3MpXG4ge1xuLVx0cG9zdF9hbGxvY19ob29rKHBhZ2UsIG9yZGVyLCBfX0dGUF9NT1ZBQkxFKTtcbitcdHBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgX19HRlBfTU9WQUJMRSwgQUxMT0NfREVGQVVMVCk7XG4gXHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xuIFx0cmV0dXJuIHBhZ2U7XG4gfVxuQEAgLTE4NTAsNyArMTg1MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmNvbXBhY3Rpb25fYWxsb2Nfbm9wcm9mKHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIGRhXG4gXHR9XG4gXHRkc3QgPSAoc3RydWN0IGZvbGlvICopZnJlZXBhZ2U7XG4gXG4tXHRwb3N0X2FsbG9jX2hvb2soXHUwMDI2ZHN0LVx1MDAzZXBhZ2UsIG9yZGVyLCBfX0dGUF9NT1ZBQkxFKTtcbitcdHBvc3RfYWxsb2NfaG9vayhcdTAwMjZkc3QtXHUwMDNlcGFnZSwgb3JkZXIsIF9fR0ZQX01PVkFCTEUsIEFMTE9DX0RFRkFVTFQpO1xuIFx0c2V0X3BhZ2VfcmVmY291bnRlZChcdTAwMjZkc3QtXHUwMDNlcGFnZSk7XG4gXHRpZiAob3JkZXIpXG4gXHRcdHByZXBfY29tcG91bmRfcGFnZShcdTAwMjZkc3QtXHUwMDNlcGFnZSwgb3JkZXIpO1xuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggZTFiYjgxNjMxZDVlYjAuLjk5N2EwOGJhMzU0MjNkIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4rKysgYi9tbS9odWdldGxiLmNcbkBAIC00Nyw2ICs0Nyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbm9kZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9vd25lci5oXHUwMDNlXG4gI2luY2x1ZGUgXCJpbnRlcm5hbC5oXCJcbisjaW5jbHVkZSBcInBhZ2VfYWxsb2MuaFwiXG4gI2luY2x1ZGUgXCJodWdldGxiX3ZtZW1tYXAuaFwiXG4gI2luY2x1ZGUgXCJodWdldGxiX2NtYS5oXCJcbiAjaW5jbHVkZSBcImh1Z2V0bGJfaW50ZXJuYWwuaFwiXG5AQCAtMTgwNSw3ICsxODA2LDggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRpZiAoYWxsb2NfdHJ5X2hhcmQpXG4gXHRcdGdmcF9tYXNrIHw9IF9fR0ZQX1JFVFJZX01BWUZBSUw7XG4gXG4tXHRmb2xpbyA9IChzdHJ1Y3QgZm9saW8gKilfX2FsbG9jX2Zyb3plbl9wYWdlcyhnZnBfbWFzaywgb3JkZXIsIG5pZCwgbm1hc2spO1xuK1x0Zm9saW8gPSAoc3RydWN0IGZvbGlvICopX19hbGxvY19mcm96ZW5fcGFnZXMoZ2ZwX21hc2ssIG9yZGVyLCBuaWQsIG5tYXNrLFxuK1x0XHRcdFx0XHRcdCAgICAgQUxMT0NfREVGQVVMVCk7XG4gXG4gXHQvKlxuIFx0ICogSWYgd2UgZGlkIG5vdCBzcGVjaWZ5IF9fR0ZQX1JFVFJZX01BWUZBSUwsIGJ1dCBzdGlsbCBnb3QgYVxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCA0MzBhYTcyYTQ1NzU4MS4uMzY5YzY1NmM2M2ZhODAgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4rKysgYi9tbS9pbnRlcm5hbC5oXG5AQCAtNjU4LDE2NSArNjU4LDYgQEAgZXh0ZXJuIGludCBkZWZyYWdfbW9kZTtcbiB2b2lkIHNldHVwX3Blcl96b25lX3dtYXJrcyh2b2lkKTtcbiB2b2lkIGNhbGN1bGF0ZV9taW5fZnJlZV9rYnl0ZXModm9pZCk7XG4gaW50IF9fbWVtaW5pdCBpbml0X3Blcl96b25lX3dtYXJrX21pbih2b2lkKTtcbi12b2lkIHBhZ2VfYWxsb2Nfc3lzY3RsX2luaXQodm9pZCk7XG4tXG4tLypcbi0gKiBTdHJ1Y3R1cmUgZm9yIGhvbGRpbmcgdGhlIG1vc3RseSBpbW11dGFibGUgYWxsb2NhdGlvbiBwYXJhbWV0ZXJzIHBhc3NlZFxuLSAqIGJldHdlZW4gZnVuY3Rpb25zIGludm9sdmVkIGluIGFsbG9jYXRpb25zLCBpbmNsdWRpbmcgdGhlIGFsbG9jX3BhZ2VzKlxuLSAqIGZhbWlseSBvZiBmdW5jdGlvbnMuXG4tICpcbi0gKiBub2RlbWFzaywgbWlncmF0ZXR5cGUgYW5kIGhpZ2hlc3Rfem9uZWlkeCBhcmUgaW5pdGlhbGl6ZWQgb25seSBvbmNlIGluXG4tICogX19hbGxvY19wYWdlcygpIGFuZCB0aGVuIG5ldmVyIGNoYW5nZS5cbi0gKlxuLSAqIHpvbmVsaXN0LCBwcmVmZXJyZWRfem9uZSBhbmQgaGlnaGVzdF96b25laWR4IGFyZSBzZXQgZmlyc3QgaW5cbi0gKiBfX2FsbG9jX3BhZ2VzKCkgZm9yIHRoZSBmYXN0IHBhdGgsIGFuZCBtaWdodCBiZSBsYXRlciBjaGFuZ2VkXG4tICogaW4gX19hbGxvY19wYWdlc19zbG93cGF0aCgpLiBBbGwgb3RoZXIgZnVuY3Rpb25zIHBhc3MgdGhlIHdob2xlIHN0cnVjdHVyZVxuLSAqIGJ5IGEgY29uc3QgcG9pbnRlci5cbi0gKi9cbi1zdHJ1Y3QgYWxsb2NfY29udGV4dCB7XG4tXHRzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0O1xuLVx0Y29uc3Qgbm9kZW1hc2tfdCAqbm9kZW1hc2s7XG4tXHRzdHJ1Y3Qgem9uZXJlZiAqcHJlZmVycmVkX3pvbmVyZWY7XG4tXHRpbnQgbWlncmF0ZXR5cGU7XG4tXG4tXHQvKlxuLVx0ICogaGlnaGVzdF96b25laWR4IHJlcHJlc2VudHMgaGlnaGVzdCB1c2FibGUgem9uZSBpbmRleCBvZlxuLVx0ICogdGhlIGFsbG9jYXRpb24gcmVxdWVzdC4gRHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhlIHpvbmUsXG4tXHQgKiBtZW1vcnkgb24gbG93ZXIgem9uZSB0aGFuIHRoZSBoaWdoZXN0X3pvbmVpZHggd2lsbCBiZVxuLVx0ICogcHJvdGVjdGVkIGJ5IGxvd21lbV9yZXNlcnZlW2hpZ2hlc3Rfem9uZWlkeF0uXG4tXHQgKlxuLVx0ICogaGlnaGVzdF96b25laWR4IGlzIGFsc28gdXNlZCBieSByZWNsYWltL2NvbXBhY3Rpb24gdG8gbGltaXRcbi1cdCAqIHRoZSB0YXJnZXQgem9uZSBzaW5jZSBoaWdoZXIgem9uZSB0aGFuIHRoaXMgaW5kZXggY2Fubm90IGJlXG4tXHQgKiB1c2FibGUgZm9yIHRoaXMgYWxsb2NhdGlvbiByZXF1ZXN0LlxuLVx0ICovXG4tXHRlbnVtIHpvbmVfdHlwZSBoaWdoZXN0X3pvbmVpZHg7XG4tXHRib29sIHNwcmVhZF9kaXJ0eV9wYWdlcztcbi19O1xuLVxuLS8qXG4tICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBvcmRlciBvZiBhIGZyZWUgcGFnZSBpbiB0aGUgYnVkZHkgc3lzdGVtLiBJblxuLSAqIGdlbmVyYWwsIHBhZ2Vfem9uZShwYWdlKS1cdTAwM2Vsb2NrIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyIHRvIHByZXZlbnQgdGhlXG4tICogcGFnZSBmcm9tIGJlaW5nIGFsbG9jYXRlZCBpbiBwYXJhbGxlbCBhbmQgcmV0dXJuaW5nIGdhcmJhZ2UgYXMgdGhlIG9yZGVyLlxuLSAqIElmIGEgY2FsbGVyIGRvZXMgbm90IGhvbGQgcGFnZV96b25lKHBhZ2UpLVx1MDAzZWxvY2ssIGl0IG11c3QgZ3VhcmFudGVlIHRoYXQgdGhlXG4tICogcGFnZSBjYW5ub3QgYmUgYWxsb2NhdGVkIG9yIG1lcmdlZCBpbiBwYXJhbGxlbC4gQWx0ZXJuYXRpdmVseSwgaXQgbXVzdFxuLSAqIGhhbmRsZSBpbnZhbGlkIHZhbHVlcyBncmFjZWZ1bGx5LCBhbmQgdXNlIGJ1ZGR5X29yZGVyX3Vuc2FmZSgpIGJlbG93LlxuLSAqL1xuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJ1ZGR5X29yZGVyKHN0cnVjdCBwYWdlICpwYWdlKVxuLXtcbi1cdC8qIFBhZ2VCdWRkeSgpIG11c3QgYmUgY2hlY2tlZCBieSB0aGUgY2FsbGVyICovXG4tXHRyZXR1cm4gcGFnZV9wcml2YXRlKHBhZ2UpO1xuLX1cbi1cbi0vKlxuLSAqIExpa2UgYnVkZHlfb3JkZXIoKSwgYnV0IGZvciBjYWxsZXJzIHdobyBjYW5ub3QgYWZmb3JkIHRvIGhvbGQgdGhlIHpvbmUgbG9jay5cbi0gKiBQYWdlQnVkZHkoKSBzaG91bGQgYmUgY2hlY2tlZCBmaXJzdCBieSB0aGUgY2FsbGVyIHRvIG1pbmltaXplIHJhY2Ugd2luZG93LFxuLSAqIGFuZCBpbnZhbGlkIHZhbHVlcyBtdXN0IGJlIGhhbmRsZWQgZ3JhY2VmdWxseS5cbi0gKlxuLSAqIFJFQURfT05DRSBpcyB1c2VkIHNvIHRoYXQgaWYgdGhlIGNhbGxlciBhc3NpZ25zIHRoZSByZXN1bHQgaW50byBhIGxvY2FsXG4tICogdmFyaWFibGUgYW5kIGUuZy4gdGVzdHMgaXQgZm9yIHZhbGlkIHJhbmdlIGJlZm9yZSB1c2luZywgdGhlIGNvbXBpbGVyIGNhbm5vdFxuLSAqIGRlY2lkZSB0byByZW1vdmUgdGhlIHZhcmlhYmxlIGFuZCBpbmxpbmUgdGhlIHBhZ2VfcHJpdmF0ZShwYWdlKSBtdWx0aXBsZVxuLSAqIHRpbWVzLCBwb3RlbnRpYWxseSBvYnNlcnZpbmcgZGlmZmVyZW50IHZhbHVlcyBpbiB0aGUgdGVzdHMgYW5kIHRoZSBhY3R1YWxcbi0gKiB1c2Ugb2YgdGhlIHJlc3VsdC5cbi0gKi9cbi0jZGVmaW5lIGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKVx0UkVBRF9PTkNFKHBhZ2VfcHJpdmF0ZShwYWdlKSlcbi1cbi0vKlxuLSAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgYSBwYWdlIGlzIGZyZWUgXHUwMDI2XHUwMDI2IGlzIHRoZSBidWRkeVxuLSAqIHdlIGNhbiBjb2FsZXNjZSBhIHBhZ2UgYW5kIGl0cyBidWRkeSBpZlxuLSAqIChhKSB0aGUgYnVkZHkgaXMgbm90IGluIGEgaG9sZSAoY2hlY2sgYmVmb3JlIGNhbGxpbmchKSBcdTAwMjZcdTAwMjZcbi0gKiAoYikgdGhlIGJ1ZGR5IGlzIGluIHRoZSBidWRkeSBzeXN0ZW0gXHUwMDI2XHUwMDI2XG4tICogKGMpIGEgcGFnZSBhbmQgaXRzIGJ1ZGR5IGhhdmUgdGhlIHNhbWUgb3JkZXIgXHUwMDI2XHUwMDI2XG4tICogKGQpIGEgcGFnZSBhbmQgaXRzIGJ1ZGR5IGFyZSBpbiB0aGUgc2FtZSB6b25lLlxuLSAqXG4tICogRm9yIHJlY29yZGluZyB3aGV0aGVyIGEgcGFnZSBpcyBpbiB0aGUgYnVkZHkgc3lzdGVtLCB3ZSBzZXQgUGFnZUJ1ZGR5LlxuLSAqIFNldHRpbmcsIGNsZWFyaW5nLCBhbmQgdGVzdGluZyBQYWdlQnVkZHkgaXMgc2VyaWFsaXplZCBieSB6b25lLVx1MDAzZWxvY2suXG4tICpcbi0gKiBGb3IgcmVjb3JkaW5nIHBhZ2UncyBvcmRlciwgd2UgdXNlIHBhZ2VfcHJpdmF0ZShwYWdlKS5cbi0gKi9cbi1zdGF0aWMgaW5saW5lIGJvb2wgcGFnZV9pc19idWRkeShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHBhZ2UgKmJ1ZGR5LFxuLVx0XHRcdFx0IHVuc2lnbmVkIGludCBvcmRlcilcbi17XG4tXHRpZiAoIXBhZ2VfaXNfZ3VhcmQoYnVkZHkpIFx1MDAyNlx1MDAyNiAhUGFnZUJ1ZGR5KGJ1ZGR5KSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0aWYgKGJ1ZGR5X29yZGVyKGJ1ZGR5KSAhPSBvcmRlcilcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0Lypcbi1cdCAqIHpvbmUgY2hlY2sgaXMgZG9uZSBsYXRlIHRvIGF2b2lkIHVzZWxlc3NseSBjYWxjdWxhdGluZ1xuLVx0ICogem9uZS9ub2RlIGlkcyBmb3IgcGFnZXMgdGhhdCBjb3VsZCBuZXZlciBtZXJnZS5cbi1cdCAqL1xuLVx0aWYgKHBhZ2Vfem9uZV9pZChwYWdlKSAhPSBwYWdlX3pvbmVfaWQoYnVkZHkpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHRWTV9CVUdfT05fUEFHRShwYWdlX2NvdW50KGJ1ZGR5KSAhPSAwLCBidWRkeSk7XG4tXG4tXHRyZXR1cm4gdHJ1ZTtcbi19XG4tXG4tLypcbi0gKiBMb2NhdGUgdGhlIHN0cnVjdCBwYWdlIGZvciBib3RoIHRoZSBtYXRjaGluZyBidWRkeSBpbiBvdXJcbi0gKiBwYWlyIChidWRkeTEpIGFuZCB0aGUgY29tYmluZWQgTyhuKzEpIHBhZ2UgdGhleSBmb3JtIChwYWdlKS5cbi0gKlxuLSAqIDEpIEFueSBidWRkeSBCMSB3aWxsIGhhdmUgYW4gb3JkZXIgTyB0d2luIEIyIHdoaWNoIHNhdGlzZmllc1xuLSAqIHRoZSBmb2xsb3dpbmcgZXF1YXRpb246XG4tICogICAgIEIyID0gQjEgXiAoMSBcdTAwM2NcdTAwM2MgTylcbi0gKiBGb3IgZXhhbXBsZSwgaWYgdGhlIHN0YXJ0aW5nIGJ1ZGR5IChidWRkeTIpIGlzICM4IGl0cyBvcmRlclxuLSAqIDEgYnVkZHkgaXMgIzEwOlxuLSAqICAgICBCMiA9IDggXiAoMSBcdTAwM2NcdTAwM2MgMSkgPSA4IF4gMiA9IDEwXG4tICpcbi0gKiAyKSBBbnkgYnVkZHkgQiB3aWxsIGhhdmUgYW4gb3JkZXIgTysxIHBhcmVudCBQIHdoaWNoXG4tICogc2F0aXNmaWVzIHRoZSBmb2xsb3dpbmcgZXF1YXRpb246XG4tICogICAgIFAgPSBCIFx1MDAyNiB+KDEgXHUwMDNjXHUwMDNjIE8pXG4tICpcbi0gKiBBc3N1bXB0aW9uOiAqX21lbV9tYXAgaXMgY29udGlndW91cyBhdCBsZWFzdCB1cCB0byBNQVhfUEFHRV9PUkRFUlxuLSAqL1xuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xuLV9fZmluZF9idWRkeV9wZm4odW5zaWduZWQgbG9uZyBwYWdlX3BmbiwgdW5zaWduZWQgaW50IG9yZGVyKVxuLXtcbi1cdHJldHVybiBwYWdlX3BmbiBeICgxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4tfVxuLVxuLS8qXG4tICogRmluZCB0aGUgYnVkZHkgb2YgQHBhZ2UgYW5kIHZhbGlkYXRlIGl0LlxuLSAqIEBwYWdlOiBUaGUgaW5wdXQgcGFnZVxuLSAqIEBwZm46IFRoZSBwZm4gb2YgdGhlIHBhZ2UsIGl0IHNhdmVzIGEgY2FsbCB0byBwYWdlX3RvX3BmbigpIHdoZW4gdGhlXG4tICogICAgICAgZnVuY3Rpb24gaXMgdXNlZCBpbiB0aGUgcGVyZm9ybWFuY2UtY3JpdGljYWwgX19mcmVlX29uZV9wYWdlKCkuXG4tICogQG9yZGVyOiBUaGUgb3JkZXIgb2YgdGhlIHBhZ2Vcbi0gKiBAYnVkZHlfcGZuOiBUaGUgb3V0cHV0IHBvaW50ZXIgdG8gdGhlIGJ1ZGR5IHBmbiwgaXQgYWxzbyBzYXZlcyBhIGNhbGwgdG9cbi0gKiAgICAgICAgICAgICBwYWdlX3RvX3BmbigpLlxuLSAqXG4tICogVGhlIGZvdW5kIGJ1ZGR5IGNhbiBiZSBhIG5vbiBQYWdlQnVkZHksIG91dCBvZiBAcGFnZSdzIHpvbmUsIG9yIGl0cyBvcmRlciBpc1xuLSAqIG5vdCB0aGUgc2FtZSBhcyBAcGFnZS4gVGhlIHZhbGlkYXRpb24gaXMgbmVjZXNzYXJ5IGJlZm9yZSB1c2UgaXQuXG4tICpcbi0gKiBSZXR1cm46IHRoZSBmb3VuZCBidWRkeSBwYWdlIG9yIE5VTEwgaWYgbm90IGZvdW5kLlxuLSAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmZpbmRfYnVkZHlfcGFnZV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGludCBvcmRlciwgdW5zaWduZWQgbG9uZyAqYnVkZHlfcGZuKVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgX19idWRkeV9wZm4gPSBfX2ZpbmRfYnVkZHlfcGZuKHBmbiwgb3JkZXIpO1xuLVx0c3RydWN0IHBhZ2UgKmJ1ZGR5O1xuLVxuLVx0YnVkZHkgPSBwYWdlICsgKF9fYnVkZHlfcGZuIC0gcGZuKTtcbi1cdGlmIChidWRkeV9wZm4pXG4tXHRcdCpidWRkeV9wZm4gPSBfX2J1ZGR5X3Bmbjtcbi1cbi1cdGlmIChwYWdlX2lzX2J1ZGR5KHBhZ2UsIGJ1ZGR5LCBvcmRlcikpXG4tXHRcdHJldHVybiBidWRkeTtcbi1cdHJldHVybiBOVUxMO1xuLX1cbi1cbi1leHRlcm4gc3RydWN0IHBhZ2UgKl9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBlbmRfcGZuLCBzdHJ1Y3Qgem9uZSAqem9uZSk7XG4tXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqcGFnZWJsb2NrX3Bmbl90b19wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBlbmRfcGZuLCBzdHJ1Y3Qgem9uZSAqem9uZSlcbi17XG4tXHRpZiAoem9uZS1cdTAwM2Vjb250aWd1b3VzKVxuLVx0XHRyZXR1cm4gcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKTtcbi1cbi1cdHJldHVybiBfX3BhZ2VibG9ja19wZm5fdG9fcGFnZShzdGFydF9wZm4sIGVuZF9wZm4sIHpvbmUpO1xuLX1cbiBcbiB2b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpO1xuIGJvb2wgcGZuX3JhbmdlX2ludGVyc2VjdHNfem9uZXMoaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG5AQCAtODMxLDggKzY3Miw2IEBAIGV4dGVybiBpbnQgX19pc29sYXRlX2ZyZWVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbiBleHRlcm4gdm9pZCBfX3B1dGJhY2tfaXNvbGF0ZWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0XHRcdFx0ICAgIGludCBtdCk7XG4gZXh0ZXJuIHZvaWQgbWVtYmxvY2tfZnJlZV9wYWdlcyh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgaW50IG9yZGVyKTtcbi1leHRlcm4gdm9pZCBfX2ZyZWVfcGFnZXNfY29yZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuLVx0XHRlbnVtIG1lbWluaXRfY29udGV4dCBjb250ZXh0KTtcbiBcbiAvKlxuICAqIFRoaXMgd2lsbCBoYXZlIG5vIGVmZmVjdCwgb3RoZXIgdGhhbiBwb3NzaWJseSBnZW5lcmF0aW5nIGEgd2FybmluZywgaWYgdGhlXG5AQCAtOTE0LDQwICs3NTMsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9jb21wb3VuZF90YWlsKHN0cnVjdCBwYWdlICp0YWlsLFxuIFx0cHJlcF9jb21wb3VuZF90YWlsKHRhaWwsIGhlYWQsIG9yZGVyKTtcbiB9XG4gXG4tdm9pZCBwb3N0X2FsbG9jX2hvb2soc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzKTtcbi1leHRlcm4gYm9vbCBmcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG4tXG4tZXh0ZXJuIGludCB1c2VyX21pbl9mcmVlX2tieXRlcztcbi1cbi1zdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90LCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBuaWQsXG4tXHRcdG5vZGVtYXNrX3QgKik7XG4tI2RlZmluZSBfX2FsbG9jX2Zyb3plbl9wYWdlcyguLi4pIFxcXG4tXHRhbGxvY19ob29rcyhfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoX19WQV9BUkdTX18pKVxuLXZvaWQgZnJlZV9mcm96ZW5fcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG4tdm9pZCBmcmVlX3VucmVmX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCk7XG4tXG4tI2lmZGVmIENPTkZJR19OVU1BXG4tc3RydWN0IHBhZ2UgKmFsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QsIHVuc2lnbmVkIGludCBvcmRlcik7XG4tI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICphbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyKVxuLXtcbi1cdHJldHVybiBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwLCBvcmRlciwgbnVtYV9ub2RlX2lkKCksIE5VTEwpO1xuLX1cbi0jZW5kaWZcbi1cbi0jZGVmaW5lIGFsbG9jX2Zyb3plbl9wYWdlcyguLi4pIFxcXG4tXHRhbGxvY19ob29rcyhhbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKF9fVkFfQVJHU19fKSlcbi1cbi1zdHJ1Y3QgcGFnZSAqYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9ja19ub3Byb2YoZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbmlkLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuLSNkZWZpbmUgYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9jayguLi4pIFxcXG4tXHRhbGxvY19ob29rcyhhbGxvY19mcm96ZW5fcGFnZXNfbm9sb2NrX25vcHJvZihfX1ZBX0FSR1NfXykpXG4tdm9pZCBmcmVlX2Zyb3plbl9wYWdlc19ub2xvY2soc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG4tXG4tZXh0ZXJuIHZvaWQgem9uZV9wY3BfcmVzZXQoc3RydWN0IHpvbmUgKnpvbmUpO1xuLWV4dGVybiB2b2lkIHpvbmVfcGNwX2Rpc2FibGUoc3RydWN0IHpvbmUgKnpvbmUpO1xuLWV4dGVybiB2b2lkIHpvbmVfcGNwX2VuYWJsZShzdHJ1Y3Qgem9uZSAqem9uZSk7XG4tZXh0ZXJuIHZvaWQgem9uZV9wY3BfaW5pdChzdHJ1Y3Qgem9uZSAqem9uZSk7XG4tXG4gZXh0ZXJuIHZvaWQgKm1lbW1hcF9hbGxvYyhwaHlzX2FkZHJfdCBzaXplLCBwaHlzX2FkZHJfdCBhbGlnbixcbiBcdFx0XHQgIHBoeXNfYWRkcl90IG1pbl9hZGRyLFxuIFx0XHRcdCAgaW50IG5pZCwgYm9vbCBleGFjdF9uaWQpO1xuQEAgLTExMDEsMjMgKzkwNiw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2NtYV9wYWdlYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpXG4gfVxuICNlbmRpZlxuIFxuLWVudW0gZmFsbGJhY2tfcmVzdWx0IHtcbi1cdC8qIEZvdW5kIHN1aXRhYmxlIG1pZ3JhdGV0eXBlLCAqbXRfb3V0IGlzIHZhbGlkLiAqL1xuLVx0RkFMTEJBQ0tfRk9VTkQsXG4tXHQvKiBObyBmYWxsYmFjayBmb3VuZCBpbiByZXF1ZXN0ZWQgb3JkZXIuICovXG4tXHRGQUxMQkFDS19FTVBUWSxcbi1cdC8qIFBhc3NlZCBAY2xhaW1hYmxlLCBidXQgY2xhaW1pbmcgd2hvbGUgYmxvY2sgaXMgYSBiYWQgaWRlYS4gKi9cbi1cdEZBTExCQUNLX05PQ0xBSU0sXG4tfTtcbi1lbnVtIGZhbGxiYWNrX3Jlc3VsdFxuLWZpbmRfc3VpdGFibGVfZmFsbGJhY2soc3RydWN0IGZyZWVfYXJlYSAqYXJlYSwgdW5zaWduZWQgaW50IG9yZGVyLFxuLVx0XHQgICAgICAgaW50IG1pZ3JhdGV0eXBlLCBib29sIGNsYWltYWJsZSwgaW50ICptdF9vdXQpO1xuLVxuLXN0YXRpYyBpbmxpbmUgYm9vbCBmcmVlX2FyZWFfZW1wdHkoc3RydWN0IGZyZWVfYXJlYSAqYXJlYSwgaW50IG1pZ3JhdGV0eXBlKVxuLXtcbi1cdHJldHVybiBsaXN0X2VtcHR5KFx1MDAyNmFyZWEtXHUwMDNlZnJlZV9saXN0W21pZ3JhdGV0eXBlXSk7XG4tfVxuLVxuIC8qIG1tL3V0aWwuYyAqL1xuIHN0cnVjdCBhbm9uX3ZtYSAqZm9saW9fYW5vbl92bWEoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG5AQCAtMTQ0NSw1MSArMTIzMywxMCBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyAgX19tdXN0X2NoZWNrIHZtX21tYXBfcGdvZmYoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgbG9uZyxcbiB1bnNpZ25lZCBsb25nIHJlY2xhaW1fcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCk7XG4gdW5zaWduZWQgaW50IHJlY2xhaW1fY2xlYW5fcGFnZXNfZnJvbV9saXN0KHN0cnVjdCB6b25lICp6b25lLFxuIFx0XHRcdFx0XHQgICAgc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCk7XG4tLyogVGhlIEFMTE9DX1dNQVJLIGJpdHMgYXJlIHVzZWQgYXMgYW4gaW5kZXggdG8gem9uZS1cdTAwM2V3YXRlcm1hcmsgKi9cbi0jZGVmaW5lIEFMTE9DX1dNQVJLX01JTlx0XHRXTUFSS19NSU5cbi0jZGVmaW5lIEFMTE9DX1dNQVJLX0xPV1x0XHRXTUFSS19MT1dcbi0jZGVmaW5lIEFMTE9DX1dNQVJLX0hJR0hcdFdNQVJLX0hJR0hcbi0jZGVmaW5lIEFMTE9DX05PX1dBVEVSTUFSS1NcdDB4MDQgLyogZG9uJ3QgY2hlY2sgd2F0ZXJtYXJrcyBhdCBhbGwgKi9cbi1cbi0vKiBNYXNrIHRvIGdldCB0aGUgd2F0ZXJtYXJrIGJpdHMgKi9cbi0jZGVmaW5lIEFMTE9DX1dNQVJLX01BU0tcdChBTExPQ19OT19XQVRFUk1BUktTLTEpXG4tXG4tLypcbi0gKiBPbmx5IE1NVSBhcmNocyBoYXZlIGFzeW5jIG9vbSB2aWN0aW0gcmVjbGFpbSAtIGFrYSBvb21fcmVhcGVyIHNvIHdlXG4tICogY2Fubm90IGFzc3VtZSBhIHJlZHVjZWQgYWNjZXNzIHRvIG1lbW9yeSByZXNlcnZlcyBpcyBzdWZmaWNpZW50IGZvclxuLSAqICFNTVVcbi0gKi9cbi0jaWZkZWYgQ09ORklHX01NVVxuLSNkZWZpbmUgQUxMT0NfT09NXHRcdDB4MDhcbi0jZWxzZVxuLSNkZWZpbmUgQUxMT0NfT09NXHRcdEFMTE9DX05PX1dBVEVSTUFSS1Ncbi0jZW5kaWZcbi1cbi0jZGVmaW5lIEFMTE9DX05PTl9CTE9DS1x0XHQgMHgxMCAvKiBDYWxsZXIgY2Fubm90IGJsb2NrLiBBbGxvdyBhY2Nlc3Ncbi1cdFx0XHRcdCAgICAgICAqIHRvIDI1JSBvZiB0aGUgbWluIHdhdGVybWFyayBvclxuLVx0XHRcdFx0ICAgICAgICogNjIuNSUgaWYgX19HRlBfSElHSCBpcyBzZXQuXG4tXHRcdFx0XHQgICAgICAgKi9cbi0jZGVmaW5lIEFMTE9DX01JTl9SRVNFUlZFXHQgMHgyMCAvKiBfX0dGUF9ISUdIIHNldC4gQWxsb3cgYWNjZXNzIHRvIDUwJVxuLVx0XHRcdFx0ICAgICAgICogb2YgdGhlIG1pbiB3YXRlcm1hcmsuXG4tXHRcdFx0XHQgICAgICAgKi9cbi0jZGVmaW5lIEFMTE9DX0NQVVNFVFx0XHQgMHg0MCAvKiBjaGVjayBmb3IgY29ycmVjdCBjcHVzZXQgKi9cbi0jZGVmaW5lIEFMTE9DX0NNQVx0XHQgMHg4MCAvKiBhbGxvdyBhbGxvY2F0aW9ucyBmcm9tIENNQSBhcmVhcyAqL1xuLSNpZmRlZiBDT05GSUdfWk9ORV9ETUEzMlxuLSNkZWZpbmUgQUxMT0NfTk9GUkFHTUVOVFx0MHgxMDAgLyogYXZvaWQgbWl4aW5nIHBhZ2VibG9jayB0eXBlcyAqL1xuLSNlbHNlXG4tI2RlZmluZSBBTExPQ19OT0ZSQUdNRU5UXHQgIDB4MFxuLSNlbmRpZlxuLSNkZWZpbmUgQUxMT0NfSElHSEFUT01JQ1x0MHgyMDAgLyogQWxsb3dzIGFjY2VzcyB0byBNSUdSQVRFX0hJR0hBVE9NSUMgKi9cbi0jZGVmaW5lIEFMTE9DX1RSWUxPQ0tcdFx0MHg0MDAgLyogT25seSB1c2Ugc3Bpbl90cnlsb2NrIGluIGFsbG9jYXRpb24gcGF0aCAqL1xuLSNkZWZpbmUgQUxMT0NfS1NXQVBEXHRcdDB4ODAwIC8qIGFsbG93IHdha2luZyBvZiBrc3dhcGQsIF9fR0ZQX0tTV0FQRF9SRUNMQUlNIHNldCAqL1xuLVxuLS8qIEZsYWdzIHRoYXQgYWxsb3cgYWxsb2NhdGlvbnMgYmVsb3cgdGhlIG1pbiB3YXRlcm1hcmsuICovXG4tI2RlZmluZSBBTExPQ19SRVNFUlZFUyAoQUxMT0NfTk9OX0JMT0NLfEFMTE9DX01JTl9SRVNFUlZFfEFMTE9DX0hJR0hBVE9NSUN8QUxMT0NfT09NKVxuIFxuIGVudW0gdHR1X2ZsYWdzO1xuIHN0cnVjdCB0bGJmbHVzaF91bm1hcF9iYXRjaDtcbiBcbi1cbiAvKlxuICAqIG9ubHkgZm9yIE1NIGludGVybmFsIHdvcmsgaXRlbXMgd2hpY2ggZG8gbm90IGRlcGVuZCBvblxuICAqIGFueSBhbGxvY2F0aW9ucyBvciBsb2NrcyB3aGljaCBtaWdodCBkZXBlbmQgb24gYWxsb2NhdGlvbnNcbmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDYxN2JjYTc2ZGI0OWI2Li41OGUxNGQxNTQzZWNiNCAxMDA2NDRcbi0tLSBhL21tL2todWdlcGFnZWQuY1xuKysrIGIvbW0va2h1Z2VwYWdlZC5jXG5AQCAtMjYsNiArMjYsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS90bGIuaFx1MDAzZVxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4rI2luY2x1ZGUgXCJwYWdlX2FsbG9jLmhcIlxuICNpbmNsdWRlIFwibW1fc2xvdC5oXCJcbiBcbiBlbnVtIHNjYW5fcmVzdWx0IHtcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggNDkxNmFiMTQ1MzI1NzMuLmJmNzE3ZWM1OTUwODdkIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTY2LDYgKzY2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvbWVtb3J5LWZhaWx1cmUuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwic3dhcC5oXCJcbisjaW5jbHVkZSBcInBhZ2VfYWxsb2MuaFwiXG4gI2luY2x1ZGUgXCJpbnRlcm5hbC5oXCJcbiBcbiBzdGF0aWMgaW50IHN5c2N0bF9tZW1vcnlfZmFpbHVyZV9lYXJseV9raWxsIF9fcmVhZF9tb3N0bHk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbmluZGV4IDdhYzE5ZmFiMjI2MzI0Li45NTM5ZTQwYzQ3OGVkYiAxMDA2NDRcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcbisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbkBAIC00MCw2ICs0MCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RsYmZsdXNoLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuKyNpbmNsdWRlIFwicGFnZV9hbGxvYy5oXCJcbiAjaW5jbHVkZSBcInNodWZmbGUuaFwiXG4gXG4gZW51bSB7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuY1xuaW5kZXggMzY2OTlmYWJkM2MyMjMuLjQxZDYzMGYwZWE4MjEyIDEwMDY0NFxuLS0tIGEvbW0vbWVtcG9saWN5LmNcbisrKyBiL21tL21lbXBvbGljeS5jXG5AQCAtMTE5LDYgKzExOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtb3J5LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuKyNpbmNsdWRlIFwicGFnZV9hbGxvYy5oXCJcbiBcbiAvKiBJbnRlcm5hbCBmbGFncyAqL1xuICNkZWZpbmUgTVBPTF9NRl9ESVNDT05USUdfT0sgKE1QT0xfTUZfSU5URVJOQUwgXHUwMDNjXHUwMDNjIDApXHQvKiBTa2lwIGNoZWNrcyBmb3IgY29udGludW91cyB2bWFzICovXG5AQCAtMjQyNSw5ICsyNDI2LDExIEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfcHJlZmVycmVkX21hbnkoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHQgKi9cbiBcdHByZWZlcnJlZF9nZnAgPSBnZnAgfCBfX0dGUF9OT1dBUk47XG4gXHRwcmVmZXJyZWRfZ2ZwIFx1MDAyNj0gfihfX0dGUF9ESVJFQ1RfUkVDTEFJTSB8IF9fR0ZQX05PRkFJTCk7XG4tXHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKHByZWZlcnJlZF9nZnAsIG9yZGVyLCBuaWQsIG5vZGVtYXNrKTtcbitcdHBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YocHJlZmVycmVkX2dmcCwgb3JkZXIsIG5pZCwgbm9kZW1hc2ssXG4rXHRcdFx0XHRcdCAgIEFMTE9DX0RFRkFVTFQpO1xuIFx0aWYgKCFwYWdlKVxuLVx0XHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcCwgb3JkZXIsIG5pZCwgTlVMTCk7XG4rXHRcdHBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwLCBvcmRlciwgbmlkLCBOVUxMLFxuK1x0XHRcdFx0XHRcdCAgIEFMTE9DX0RFRkFVTFQpO1xuIFxuIFx0cmV0dXJuIHBhZ2U7XG4gfVxuQEAgLTI0NzUsNyArMjQ3OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbXBvbChnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdFx0XHQgKi9cbiBcdFx0XHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKFxuIFx0XHRcdFx0Z2ZwIHwgX19HRlBfVEhJU05PREUgfCBfX0dGUF9OT1JFVFJZLCBvcmRlcixcbi1cdFx0XHRcdG5pZCwgTlVMTCk7XG4rXHRcdFx0XHRuaWQsIE5VTEwsIEFMTE9DX0RFRkFVTFQpO1xuIFx0XHRcdGlmIChwYWdlIHx8ICEoZ2ZwIFx1MDAyNiBfX0dGUF9ESVJFQ1RfUkVDTEFJTSkpXG4gXHRcdFx0XHRyZXR1cm4gcGFnZTtcbiBcdFx0XHQvKlxuQEAgLTI0ODcsNyArMjQ5MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbXBvbChnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdFx0fVxuIFx0fVxuIFxuLVx0cGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnAsIG9yZGVyLCBuaWQsIG5vZGVtYXNrKTtcbitcdHBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwLCBvcmRlciwgbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XG4gXG4gXHRpZiAodW5saWtlbHkocG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9JTlRFUkxFQVZFIHx8XG4gXHRcdCAgICAgcG9sLVx1MDAzZW1vZGUgPT0gTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFKSBcdTAwMjZcdTAwMjYgcGFnZSkge1xuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xuaW5kZXggNmI4OWUyZTc3NDMxMTIuLjM1NjQxZmFjMTA5ZDUzIDEwMDY0NFxuLS0tIGEvbW0vbW1faW5pdC5jXG4rKysgYi9tbS9tbV9pbml0LmNcbkBAIC0zMyw2ICszMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2V4ZWNfaGFuZG92ZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2h1Z2V0bGIuaFx1MDAzZVxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4rI2luY2x1ZGUgXCJwYWdlX2FsbG9jLmhcIlxuICNpbmNsdWRlIFwic2xhYi5oXCJcbiAjaW5jbHVkZSBcInNodWZmbGUuaFwiXG4gXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXG5pbmRleCA2MmY3MWVjZTdjYTE3Ny4uODAzYjMyZTVhNWU0N2YgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTU2LDYgKzU2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZ2FsbG9jX3RhZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2RpdjY0LmhcdTAwM2VcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuKyNpbmNsdWRlIFwicGFnZV9hbGxvYy5oXCJcbiAjaW5jbHVkZSBcInNodWZmbGUuaFwiXG4gI2luY2x1ZGUgXCJwYWdlX3JlcG9ydGluZy5oXCJcbiBcbkBAIC0xMjQ4LDcgKzEyNDksNyBAQCB2b2lkIF9fY2xlYXJfcGFnZV90YWdfcmVmKHN0cnVjdCBwYWdlICpwYWdlKVxuIC8qIFNob3VsZCBiZSBjYWxsZWQgb25seSBpZiBtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSAqL1xuIHN0YXRpYyBub2lubGluZVxuIHZvaWQgX19wZ2FsbG9jX3RhZ19hZGQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBuciwgZ2ZwX3QgZ2ZwX2ZsYWdzKVxuK1x0XHQgICAgICAgdW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4ge1xuIFx0dW5pb24gcGd0YWdfcmVmX2hhbmRsZSBoYW5kbGU7XG4gXHR1bmlvbiBjb2RldGFnX3JlZiByZWY7XG5AQCAtMTI2MiwxNyArMTI2MywxNyBAQCB2b2lkIF9fcGdhbGxvY190YWdfYWRkKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4gXHRcdCAqIHBhZ2VfZXh0IGlzIG5vdCBhdmFpbGFibGUgeWV0LCByZWNvcmQgdGhlIHBmbiBzbyB3ZSBjYW5cbiBcdFx0ICogY2xlYXIgdGhlIHRhZyByZWYgbGF0ZXIgd2hlbiBwYWdlX2V4dCBpcyBpbml0aWFsaXplZC5cbiBcdFx0ICovXG4tXHRcdGFsbG9jX3RhZ19hZGRfZWFybHlfcGZuKHBhZ2VfdG9fcGZuKHBhZ2UpLCBnZnBfZmxhZ3MpO1xuK1x0XHRhbGxvY190YWdfYWRkX2Vhcmx5X3BmbihwYWdlX3RvX3BmbihwYWdlKSwgYWxsb2NfZmxhZ3MpO1xuIFx0XHRpZiAodGFzay1cdTAwM2VhbGxvY190YWcpXG4gXHRcdFx0YWxsb2NfdGFnX3NldF9pbmFjY3VyYXRlKHRhc2stXHUwMDNlYWxsb2NfdGFnKTtcbiBcdH1cbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHBnYWxsb2NfdGFnX2FkZChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuLVx0XHRcdFx0ICAgdW5zaWduZWQgaW50IG5yLCBnZnBfdCBnZnBfZmxhZ3MpXG4rXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbiB7XG4gXHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkpXG4tXHRcdF9fcGdhbGxvY190YWdfYWRkKHBhZ2UsIHRhc2ssIG5yLCBnZnBfZmxhZ3MpO1xuK1x0XHRfX3BnYWxsb2NfdGFnX2FkZChwYWdlLCB0YXNrLCBuciwgYWxsb2NfZmxhZ3MpO1xuIH1cbiBcbiAvKiBTaG91bGQgYmUgY2FsbGVkIG9ubHkgaWYgbWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkgKi9cbkBAIC0xODA5LDcgKzE4MTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3NraXBfaW5pdChnZnBfdCBmbGFncylcbiB9XG4gXG4gaW5saW5lIHZvaWQgcG9zdF9hbGxvY19ob29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tXHRcdFx0XHRnZnBfdCBnZnBfZmxhZ3MpXG4rXHRcdFx0XHRnZnBfdCBnZnBfZmxhZ3MsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbiB7XG4gXHRjb25zdCBib29sIHplcm9fdGFncyA9IGdmcF9mbGFncyBcdTAwMjYgX19HRlBfWkVST1RBR1M7XG4gXHRib29sIGluaXQgPSAhd2FudF9pbml0X29uX2ZyZWUoKSBcdTAwMjZcdTAwMjYgd2FudF9pbml0X29uX2FsbG9jKGdmcF9mbGFncykgXHUwMDI2XHUwMDI2XG5AQCAtMTg2MCwxMyArMTg2MSwxMyBAQCBpbmxpbmUgdm9pZCBwb3N0X2FsbG9jX2hvb2soc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcbiBcbiBcdHNldF9wYWdlX293bmVyKHBhZ2UsIG9yZGVyLCBnZnBfZmxhZ3MpO1xuIFx0cGFnZV90YWJsZV9jaGVja19hbGxvYyhwYWdlLCBvcmRlcik7XG4tXHRwZ2FsbG9jX3RhZ19hZGQocGFnZSwgY3VycmVudCwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIsIGdmcF9mbGFncyk7XG4rXHRwZ2FsbG9jX3RhZ19hZGQocGFnZSwgY3VycmVudCwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIsIGFsbG9jX2ZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcHJlcF9uZXdfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBnZnBfZmxhZ3MsXG4gXHRcdFx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4ge1xuLVx0cG9zdF9hbGxvY19ob29rKHBhZ2UsIG9yZGVyLCBnZnBfZmxhZ3MpO1xuK1x0cG9zdF9hbGxvY19ob29rKHBhZ2UsIG9yZGVyLCBnZnBfZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcbiBcbiBcdGlmIChvcmRlciBcdTAwMjZcdTAwMjYgKGdmcF9mbGFncyBcdTAwMjYgX19HRlBfQ09NUCkpXG4gXHRcdHByZXBfY29tcG91bmRfcGFnZShwYWdlLCBvcmRlcik7XG5AQCAtMjUzMCw3ICsyNTMxLDcgQEAgc3RhdGljIGludCBybXF1ZXVlX2J1bGsoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgaTtcbiBcbi1cdGlmICh1bmxpa2VseShhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfVFJZTE9DSykpIHtcbitcdGlmICh1bmxpa2VseShhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfTk9MT0NLKSkge1xuIFx0XHRpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKFx1MDAyNnpvbmUtXHUwMDNlbG9jaywgZmxhZ3MpKVxuIFx0XHRcdHJldHVybiAwO1xuIFx0fSBlbHNlIHtcbkBAIC0zMjE4LDcgKzMyMTksNyBAQCBzdHJ1Y3QgcGFnZSAqcm1xdWV1ZV9idWRkeShzdHJ1Y3Qgem9uZSAqcHJlZmVycmVkX3pvbmUsIHN0cnVjdCB6b25lICp6b25lLFxuIFxuIFx0ZG8ge1xuIFx0XHRwYWdlID0gTlVMTDtcbi1cdFx0aWYgKHVubGlrZWx5KGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19UUllMT0NLKSkge1xuK1x0XHRpZiAodW5saWtlbHkoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX05PTE9DSykpIHtcbiBcdFx0XHRpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKFx1MDAyNnpvbmUtXHUwMDNlbG9jaywgZmxhZ3MpKVxuIFx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gXHRcdH0gZWxzZSB7XG5AQCAtMzc3NCw4ICszNzc1LDggQEAgYWxsb2NfZmxhZ3Nfbm9mcmFnbWVudChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX21hc2spXG4gfVxuIFxuIC8qIE11c3QgYmUgY2FsbGVkIGFmdGVyIGN1cnJlbnRfZ2ZwX2NvbnRleHQoKSB3aGljaCBjYW4gY2hhbmdlIGdmcF9tYXNrICovXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2ZwX3RvX2FsbG9jX2ZsYWdzX2NtYShnZnBfdCBnZnBfbWFzayxcbi1cdFx0XHRcdFx0XHQgIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhbGxvY19mbGFnc19jbWEoZ2ZwX3QgZ2ZwX21hc2ssXG4rXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbiB7XG4gI2lmZGVmIENPTkZJR19DTUFcbiBcdGlmIChnZnBfbWlncmF0ZXR5cGUoZ2ZwX21hc2spID09IE1JR1JBVEVfTU9WQUJMRSlcbkBAIC00NDc0LDcgKzQ0NzUsNyBAQCBzdGF0aWMgdm9pZCB3YWtlX2FsbF9rc3dhcGRzKHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XG4tZ2ZwX3RvX2FsbG9jX2ZsYWdzX25vbmJsb2NraW5nKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4rYWxsb2NfZmxhZ3Nfbm9uYmxvY2tpbmcoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcbiB7XG4gXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MgPSAwO1xuIFxuQEAgLTQ0OTcsNyArNDQ5OCw3IEBAIGdmcF90b19hbGxvY19mbGFnc19ub25ibG9ja2luZyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxuLWdmcF90b19hbGxvY19mbGFncyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxuK2FsbG9jX2ZsYWdzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4ge1xuIFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzID0gQUxMT0NfV01BUktfTUlOIHwgQUxMT0NfQ1BVU0VUO1xuIFxuQEAgLTQ1MTIsNyArNDUxMyw3IEBAIGdmcF90b19hbGxvY19mbGFncyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxuIFx0aWYgKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9LU1dBUERfUkVDTEFJTSlcbiBcdFx0YWxsb2NfZmxhZ3MgfD0gQUxMT0NfS1NXQVBEO1xuIFxuLVx0YWxsb2NfZmxhZ3MgfD0gZ2ZwX3RvX2FsbG9jX2ZsYWdzX25vbmJsb2NraW5nKGdmcF9tYXNrLCBvcmRlcik7XG4rXHRhbGxvY19mbGFncyB8PSBhbGxvY19mbGFnc19ub25ibG9ja2luZyhnZnBfbWFzaywgb3JkZXIpO1xuIFxuIFx0aWYgKCEoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX0RJUkVDVF9SRUNMQUlNKSkge1xuIFx0XHQvKlxuQEAgLTQ1MjUsNyArNDUyNiw3IEBAIGdmcF90b19hbGxvY19mbGFncyhnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxuIFx0fSBlbHNlIGlmICh1bmxpa2VseShydF9vcl9kbF90YXNrKGN1cnJlbnQpKSBcdTAwMjZcdTAwMjYgaW5fdGFzaygpKVxuIFx0XHRhbGxvY19mbGFncyB8PSBBTExPQ19NSU5fUkVTRVJWRTtcbiBcbi1cdGFsbG9jX2ZsYWdzID0gZ2ZwX3RvX2FsbG9jX2ZsYWdzX2NtYShnZnBfbWFzaywgYWxsb2NfZmxhZ3MpO1xuK1x0YWxsb2NfZmxhZ3MgPSBhbGxvY19mbGFnc19jbWEoZ2ZwX21hc2ssIGFsbG9jX2ZsYWdzKTtcbiBcbiBcdGlmIChkZWZyYWdfbW9kZSlcbiBcdFx0YWxsb2NfZmxhZ3MgfD0gQUxMT0NfTk9GUkFHTUVOVDtcbkBAIC00NzkwLDggKzQ3OTEsMTIgQEAgX19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0ICogVGhlIGZhc3QgcGF0aCB1c2VzIGNvbnNlcnZhdGl2ZSBhbGxvY19mbGFncyB0byBzdWNjZWVkIG9ubHkgdW50aWxcbiBcdCAqIGtzd2FwZCBuZWVkcyB0byBiZSB3b2tlbiB1cCwgYW5kIHRvIGF2b2lkIHRoZSBjb3N0IG9mIHNldHRpbmcgdXBcbiBcdCAqIGFsbG9jX2ZsYWdzIHByZWNpc2VseS4gU28gd2UgZG8gdGhhdCBub3cuXG4rXHQgKlxuK1x0ICogQ2FuJ3QganVzdCBvciBhbGxvY19mbGFncyBpZiBpdCBjb250YWlucyBXTUFSSyBiaXRzLCBidXQgdGhvc2UgZmxhZ3NcbitcdCAqIHNob3VsZG4ndCBiZSBzZXQgaW4gYWMtXHUwMDNlYWxsb2NfZmxhZ3MuXG4gXHQgKi9cbi1cdGFsbG9jX2ZsYWdzID0gZ2ZwX3RvX2FsbG9jX2ZsYWdzKGdmcF9tYXNrLCBvcmRlcik7XG4rXHRWTV9XQVJOX09OKGFjLVx1MDAzZWFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19XTUFSS19NQVNLKTtcbitcdGFsbG9jX2ZsYWdzID0gYWMtXHUwMDNlYWxsb2NfZmxhZ3MgfCBhbGxvY19mbGFnc19zbG93cGF0aChnZnBfbWFzaywgb3JkZXIpO1xuIFxuIFx0LypcbiBcdCAqIFdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgem9uZWxpc3QgaXRlcmF0b3JcbkBAIC00ODMyLDggKzQ4MzcsOCBAQCBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXG4gXHRyZXNlcnZlX2ZsYWdzID0gX19nZnBfcGZtZW1hbGxvY19mbGFncyhnZnBfbWFzayk7XG4gXHRpZiAocmVzZXJ2ZV9mbGFncylcbi1cdFx0YWxsb2NfZmxhZ3MgPSBnZnBfdG9fYWxsb2NfZmxhZ3NfY21hKGdmcF9tYXNrLCByZXNlcnZlX2ZsYWdzKSB8XG4tXHRcdFx0XHRcdCAgKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19LU1dBUEQpO1xuK1x0XHRhbGxvY19mbGFncyA9IGFsbG9jX2ZsYWdzX2NtYShnZnBfbWFzaywgcmVzZXJ2ZV9mbGFncykgfFxuK1x0XHRcdFx0YWMtXHUwMDNlYWxsb2NfZmxhZ3MgfCAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX0tTV0FQRCk7XG4gXG4gXHQvKlxuIFx0ICogUmVzZXQgdGhlIG5vZGVtYXNrIGFuZCB6b25lbGlzdCBpdGVyYXRvcnMgaWYgbWVtb3J5IHBvbGljaWVzIGNhbiBiZVxuQEAgLTUwNTksMTEgKzUwNjQsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHByZXBhcmVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdCAqIERvbid0IGludm9rZSBzaG91bGRfZmFpbCBsb2dpYywgc2luY2UgaXQgbWF5IGNhbGxcbiBcdCAqIGdldF9yYW5kb21fdTMyKCkgYW5kIHByaW50aygpIHdoaWNoIG5lZWQgdG8gc3Bpbl9sb2NrLlxuIFx0ICovXG4tXHRpZiAoISgqYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX1RSWUxPQ0spIFx1MDAyNlx1MDAyNlxuK1x0aWYgKCEoKmFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19OT0xPQ0spIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHNob3VsZF9mYWlsX2FsbG9jX3BhZ2UoZ2ZwX21hc2ssIG9yZGVyKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0KmFsbG9jX2ZsYWdzID0gZ2ZwX3RvX2FsbG9jX2ZsYWdzX2NtYShnZnBfbWFzaywgKmFsbG9jX2ZsYWdzKTtcbitcdCphbGxvY19mbGFncyA9IGFsbG9jX2ZsYWdzX2NtYShnZnBfbWFzaywgKmFsbG9jX2ZsYWdzKTtcbiBcbiBcdC8qIERpcnR5IHpvbmUgYmFsYW5jaW5nIG9ubHkgZG9uZSBpbiB0aGUgZmFzdCBwYXRoICovXG4gXHRhYy1cdTAwM2VzcHJlYWRfZGlydHlfcGFnZXMgPSAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX1dSSVRFKTtcbkBAIC01MjIxLDcgKzUyMjYsNyBAQCB1bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXG4gXHRcdH1cbiBcdFx0bnJfYWNjb3VudCsrO1xuIFxuLVx0XHRwcmVwX25ld19wYWdlKHBhZ2UsIDAsIGdmcCwgMCk7XG4rXHRcdHByZXBfbmV3X3BhZ2UocGFnZSwgMCwgZ2ZwLCBBTExPQ19ERUZBVUxUKTtcbiBcdFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcbiBcdFx0cGFnZV9hcnJheVtucl9wb3B1bGF0ZWQrK10gPSBwYWdlO1xuIFx0fVxuQEAgLTUyMzUsNyArNTI0MCw3IEBAIHVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbiBcdHJldHVybiBucl9wb3B1bGF0ZWQ7XG4gXG4gZmFpbGVkOlxuLVx0cGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2spO1xuK1x0cGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9wcm9mKGdmcCwgMCwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssIEFMTE9DX0RFRkFVTFQpO1xuIFx0aWYgKHBhZ2UpXG4gXHRcdHBhZ2VfYXJyYXlbbnJfcG9wdWxhdGVkKytdID0gcGFnZTtcbiBcdGdvdG8gb3V0O1xuQEAgLTUyNzAsMjQgKzUyNzUsMTAxIEBAIHZvaWQgZnJlZV9wYWdlc19idWxrKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIGFsbG9jX29yZGVyX2FsbG93ZWQoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4rXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuK3tcbitcdGlmIChhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfTk9MT0NLKVxuK1x0XHRyZXR1cm4gcGNwX2FsbG93ZWRfb3JkZXIob3JkZXIpO1xuK1xuK1x0LypcbitcdCAqIFRoZXJlIGFyZSBzZXZlcmFsIHBsYWNlcyB3aGVyZSB3ZSBhc3N1bWUgdGhhdCB0aGUgb3JkZXIgdmFsdWUgaXMgc2FuZVxuK1x0ICogc28gYmFpbCBvdXQgZWFybHkgaWYgdGhlIHJlcXVlc3QgaXMgb3V0IG9mIGJvdW5kLlxuK1x0ICovXG4rXHRyZXR1cm4gIShXQVJOX09OX09OQ0VfR0ZQKG9yZGVyIFx1MDAzZSBNQVhfUEFHRV9PUkRFUiwgZ2ZwKSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBhbGxvY190cnlsb2NrX2FsbG93ZWQodm9pZClcbit7XG4rXHQvKlxuK1x0ICogSW4gUFJFRU1QVF9SVCBzcGluX3RyeWxvY2soKSB3aWxsIGNhbGwgcmF3X3NwaW5fbG9jaygpIHdoaWNoIGlzXG4rXHQgKiB1bnNhZmUgaW4gTk1JLiBJZiBzcGluX3RyeWxvY2soKSBpcyBjYWxsZWQgZnJvbSBoYXJkIElSUSB0aGUgY3VycmVudFxuK1x0ICogdGFzayBtYXkgYmUgd2FpdGluZyBmb3Igb25lIHJ0X3NwaW5fbG9jaywgYnV0IHJ0X3NwaW5fdHJ5bG9jaygpIHdpbGxcbitcdCAqIG1hcmsgdGhlIHRhc2sgYXMgdGhlIG93bmVyIG9mIGFub3RoZXIgcnRfc3Bpbl9sb2NrIHdoaWNoIHdpbGxcbitcdCAqIGNvbmZ1c2UgUEkgbG9naWMsIHNvIHJldHVybiBpbW1lZGlhdGVseSBpZiBjYWxsZWQgZnJvbSBoYXJkIElSUSBvclxuK1x0ICogTk1JLlxuK1x0ICpcbitcdCAqIE5vdGUsIGlycXNfZGlzYWJsZWQoKSBjYXNlIGlzIG9rLiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWRcbitcdCAqIGZyb20gcmF3X3NwaW5fbG9ja19pcnFzYXZlIHJlZ2lvbi5cbitcdCAqL1xuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpIFx1MDAyNlx1MDAyNiAoaW5fbm1pKCkgfHwgaW5faGFyZGlycSgpKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LyogT24gVVAsIHNwaW5fdHJ5bG9jaygpIGFsd2F5cyBzdWNjZWVkcyBldmVuIHdoZW4gaXQgaXMgbG9ja2VkICovXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1NNUCkgXHUwMDI2XHUwMDI2IGluX25taSgpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiBCYWlsb3V0LCBzaW5jZSBfZGVmZXJyZWRfZ3Jvd196b25lKCkgbmVlZHMgdG8gdGFrZSBhIGxvY2sgKi9cbitcdGlmIChkZWZlcnJlZF9wYWdlc19lbmFibGVkKCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbisvKlxuKyAqIEdGUCBmbGFncyB0byBzZXQgZm9yIEFMTE9DX05PTE9DSyBpLmUuIGFsbG9jX3BhZ2VzX25vbG9jaygpLlxuKyAqXG4rICogRG8gbm90IHNwZWNpZnkgX19HRlBfRElSRUNUX1JFQ0xBSU0sIHNpbmNlIGRpcmVjdCBjbGFpbSBpcyBub3QgYWxsb3dlZC5cbisgKiBEbyBub3Qgc3BlY2lmeSBfX0dGUF9LU1dBUERfUkVDTEFJTSBlaXRoZXIsIHNpbmNlIHdha2UgdXAgb2Yga3N3YXBkXG4rICogaXMgbm90IHNhZmUgaW4gYXJiaXRyYXJ5IGNvbnRleHQuXG4rICpcbisgKiBUaGVzZSB0d28gYXJlIHRoZSBjb25kaXRpb25zIGZvciBnZnBmbGFnc19hbGxvd19zcGlubmluZygpIGJlaW5nIHRydWUuXG4rICpcbisgKiBTcGVjaWZ5IF9fR0ZQX05PV0FSTiBzaW5jZSBmYWlsaW5nIGFsbG9jX3BhZ2VzX25vbG9jaygpIGlzIG5vdCBhIHJlYXNvblxuKyAqIHRvIHdhcm4uIEFsc28gd2FybiB3b3VsZCB0cmlnZ2VyIHByaW50aygpIHdoaWNoIGlzIHVuc2FmZSBmcm9tXG4rICogdmFyaW91cyBjb250ZXh0cy4gV2UgY2Fubm90IHVzZSBwcmludGtfZGVmZXJyZWRfZW50ZXIoKSB0byBtaXRpZ2F0ZSxcbisgKiBzaW5jZSB0aGUgcnVubmluZyBjb250ZXh0IGlzIHVua25vd24uXG4rICpcbisgKiBTcGVjaWZ5IF9fR0ZQX1pFUk8gdG8gbWFrZSBzdXJlIHRoYXQgY2FsbCB0byBrbXNhbl9hbGxvY19wYWdlKCkgYmVsb3dcbisgKiBpcyBzYWZlIGluIGFueSBjb250ZXh0LiBBbHNvIHplcm9pbmcgdGhlIHBhZ2UgaXMgbWFuZGF0b3J5IGZvclxuKyAqIEJQRiB1c2UgY2FzZXMuXG4rICpcbisgKiBUaG91Z2ggX19HRlBfTk9NRU1BTExPQyBpcyBub3QgY2hlY2tlZCBpbiB0aGUgY29kZSBwYXRoIGJlbG93LFxuKyAqIHNwZWNpZnkgaXQgaGVyZSB0byBoaWdobGlnaHQgdGhhdCBhbGxvY19wYWdlc19ub2xvY2soKVxuKyAqIGRvZXNuJ3Qgd2FudCB0byBkZXBsZXRlIHJlc2VydmVzLlxuKyAqL1xuK3N0YXRpYyBjb25zdCBnZnBfdCBnZnBfbm9sb2NrID0gX19HRlBfTk9XQVJOIHwgX19HRlBfWkVSTyB8IF9fR0ZQX05PTUVNQUxMT0MgfFxuK1x0XHRcdFx0X19HRlBfQ09NUDtcbitcbiAvKlxuICAqIFRoaXMgaXMgdGhlICdoZWFydCcgb2YgdGhlIHpvbmVkIGJ1ZGR5IGFsbG9jYXRvci5cbiAgKi9cbiBzdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuLVx0XHRpbnQgcHJlZmVycmVkX25pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4rXHRcdGludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzaywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuLVx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzID0gQUxMT0NfV01BUktfTE9XO1xuIFx0Z2ZwX3QgYWxsb2NfZ2ZwOyAvKiBUaGUgZ2ZwX3QgdGhhdCB3YXMgYWN0dWFsbHkgdXNlZCBmb3IgYWxsb2NhdGlvbiAqL1xuLVx0c3RydWN0IGFsbG9jX2NvbnRleHQgYWMgPSB7IH07XG4rXHRzdHJ1Y3QgYWxsb2NfY29udGV4dCBhYyA9IHtcbitcdFx0LmFsbG9jX2ZsYWdzID0gYWxsb2NfZmxhZ3MsXG4rXHR9O1xuK1x0dW5zaWduZWQgaW50IGZhc3RwYXRoX2FsbG9jX2ZsYWdzID0gYWxsb2NfZmxhZ3M7XG4gXG4tXHQvKlxuLVx0ICogVGhlcmUgYXJlIHNldmVyYWwgcGxhY2VzIHdoZXJlIHdlIGFzc3VtZSB0aGF0IHRoZSBvcmRlciB2YWx1ZSBpcyBzYW5lXG4tXHQgKiBzbyBiYWlsIG91dCBlYXJseSBpZiB0aGUgcmVxdWVzdCBpcyBvdXQgb2YgYm91bmQuXG4tXHQgKi9cbi1cdGlmIChXQVJOX09OX09OQ0VfR0ZQKG9yZGVyIFx1MDAzZSBNQVhfUEFHRV9PUkRFUiwgZ2ZwKSlcbitcdC8qIE90aGVyIGZsYWdzIGNvdWxkIGJlIHN1cHBvcnRlZCBsYXRlciBpZiBuZWVkZWQuICovXG4rXHRpZiAoV0FSTl9PTihhbGxvY19mbGFncyBcdTAwMjYgfihBTExPQ19OT0xPQ0sgfCBBTExPQ19OT19DT0RFVEFHKSkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0aWYgKCFhbGxvY19vcmRlcl9hbGxvd2VkKGdmcCwgb3JkZXIsIGFsbG9jX2ZsYWdzKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4rXHRpZiAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX05PTE9DSykge1xuK1x0XHQvKiBDZXJ0YWluIG90aGVyIGZsYWdzIGNvdWxkIGJlIHN1cHBvcnRlZCBsYXRlciBpZiBuZWVkZWQuICovXG4rXHRcdFZNX1dBUk5fT05fT05DRShnZnAgXHUwMDI2IH4oX19HRlBfQUNDT1VOVCB8IGdmcF9ub2xvY2spKTtcbitcdFx0aWYgKCFhbGxvY190cnlsb2NrX2FsbG93ZWQoKSlcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcdFx0Z2ZwIHw9IGdmcF9ub2xvY2s7XG4rXHR9IGVsc2Uge1xuK1x0XHRmYXN0cGF0aF9hbGxvY19mbGFncyB8PSBBTExPQ19XTUFSS19MT1c7XG4rXHR9XG4rXG4gXHRnZnAgXHUwMDI2PSBnZnBfYWxsb3dlZF9tYXNrO1xuIFx0LypcbiBcdCAqIEFwcGx5IHNjb3BlZCBhbGxvY2F0aW9uIGNvbnN0cmFpbnRzLiBUaGlzIGlzIG1haW5seSBhYm91dCBHRlBfTk9GU1xuQEAgLTUyOTksMTkgKzUzODEsMTkgQEAgc3RydWN0IHBhZ2UgKl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdGdmcCA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKTtcbiBcdGFsbG9jX2dmcCA9IGdmcDtcbiBcdGlmICghcHJlcGFyZV9hbGxvY19wYWdlcyhnZnAsIG9yZGVyLCBwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgXHUwMDI2YWMsXG4tXHRcdFx0XHUwMDI2YWxsb2NfZ2ZwLCBcdTAwMjZhbGxvY19mbGFncykpXG4rXHRcdFx0XHUwMDI2YWxsb2NfZ2ZwLCBcdTAwMjZmYXN0cGF0aF9hbGxvY19mbGFncykpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0LypcbiBcdCAqIEZvcmJpZCB0aGUgZmlyc3QgcGFzcyBmcm9tIGZhbGxpbmcgYmFjayB0byB0eXBlcyB0aGF0IGZyYWdtZW50XG4gXHQgKiBtZW1vcnkgdW50aWwgYWxsIGxvY2FsIHpvbmVzIGFyZSBjb25zaWRlcmVkLlxuIFx0ICovXG4tXHRhbGxvY19mbGFncyB8PSBhbGxvY19mbGFnc19ub2ZyYWdtZW50KHpvbmVsaXN0X3pvbmUoYWMucHJlZmVycmVkX3pvbmVyZWYpLCBnZnApO1xuLVx0YWxsb2NfZmxhZ3MgfD0gZ2ZwX3RvX2FsbG9jX2ZsYWdzX25vbmJsb2NraW5nKGdmcCwgb3JkZXIpIFx1MDAyNiBBTExPQ19ISUdIQVRPTUlDO1xuK1x0ZmFzdHBhdGhfYWxsb2NfZmxhZ3MgfD0gYWxsb2NfZmxhZ3Nfbm9mcmFnbWVudCh6b25lbGlzdF96b25lKGFjLnByZWZlcnJlZF96b25lcmVmKSwgZ2ZwKTtcbitcdGZhc3RwYXRoX2FsbG9jX2ZsYWdzIHw9IGFsbG9jX2ZsYWdzX25vbmJsb2NraW5nKGdmcCwgb3JkZXIpIFx1MDAyNiBBTExPQ19ISUdIQVRPTUlDO1xuIFxuLVx0LyogRmlyc3QgYWxsb2NhdGlvbiBhdHRlbXB0ICovXG4tXHRwYWdlID0gZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChhbGxvY19nZnAsIG9yZGVyLCBhbGxvY19mbGFncywgXHUwMDI2YWMpO1xuLVx0aWYgKGxpa2VseShwYWdlKSlcbitcdC8qIEZpcnN0IGFsbG9jYXRpb24gYXR0ZW1wdCAob3IsIGZvciBub2xvY2ssIG9ubHkgYXR0ZW1wdCkgKi9cbitcdHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KGFsbG9jX2dmcCwgb3JkZXIsIGZhc3RwYXRoX2FsbG9jX2ZsYWdzLCBcdTAwMjZhYyk7XG4rXHRpZiAobGlrZWx5KHBhZ2UpIHx8IChhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfTk9MT0NLKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRhbGxvY19nZnAgPSBnZnA7XG5AQCAtNTMyOCw3ICs1NDEwLDggQEAgc3RydWN0IHBhZ2UgKl9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcbiBvdXQ6XG4gXHRpZiAobWVtY2dfa21lbV9vbmxpbmUoKSBcdTAwMjZcdTAwMjYgKGdmcCBcdTAwMjYgX19HRlBfQUNDT1VOVCkgXHUwMDI2XHUwMDI2IHBhZ2UgXHUwMDI2XHUwMDI2XG4gXHQgICAgdW5saWtlbHkoX19tZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHBhZ2UsIGdmcCwgb3JkZXIpICE9IDApKSB7XG4tXHRcdGZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyKTtcbitcdFx0X19mcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBvcmRlcixcbitcdFx0XHRcdCAgICBhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfTk9MT0NLID8gRlBJX1RSWUxPQ0sgOiAwKTtcbiBcdFx0cGFnZSA9IE5VTEw7XG4gXHR9XG4gXG5AQCAtNTM0MCwyMiArNTQyMywzNCBAQCBzdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuIEVYUE9SVF9TWU1CT0woX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKTtcbiBcbiBzdHJ1Y3QgcGFnZSAqX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tXHRcdGludCBwcmVmZXJyZWRfbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbitcdFx0aW50IHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4ge1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4tXHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcCwgb3JkZXIsIHByZWZlcnJlZF9uaWQsIG5vZGVtYXNrKTtcbitcdHBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwLCBvcmRlciwgcHJlZmVycmVkX25pZCwgbm9kZW1hc2ssXG4rXHRcdFx0XHRcdCAgIGFsbG9jX2ZsYWdzKTtcbiBcdGlmIChwYWdlKVxuIFx0XHRzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpO1xuIFx0cmV0dXJuIHBhZ2U7XG4gfVxuLUVYUE9SVF9TWU1CT0woX19hbGxvY19wYWdlc19ub3Byb2YpO1xuK1xuK3N0cnVjdCBwYWdlICphbGxvY19wYWdlc19ub2RlX25vcHJvZihpbnQgbmlkLCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxuK3tcbitcdGlmIChuaWQgPT0gTlVNQV9OT19OT0RFKVxuK1x0XHRuaWQgPSBudW1hX21lbV9pZCgpO1xuK1xuK1x0Vk1fQlVHX09OKG5pZCBcdTAwM2MgMCB8fCBuaWQgXHUwMDNlPSBNQVhfTlVNTk9ERVMpO1xuK1x0d2Fybl9pZl9ub2RlX29mZmxpbmUobmlkLCBnZnBfbWFzayk7XG4rXG4rXHRyZXR1cm4gX19hbGxvY19wYWdlc19ub3Byb2YoZ2ZwX21hc2ssIG9yZGVyLCBuaWQsIE5VTEwsIEFMTE9DX0RFRkFVTFQpO1xuK31cbitFWFBPUlRfU1lNQk9MKGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKTtcbiBcbiBzdHJ1Y3QgZm9saW8gKl9fZm9saW9fYWxsb2Nfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgcHJlZmVycmVkX25pZCxcbiBcdFx0bm9kZW1hc2tfdCAqbm9kZW1hc2spXG4ge1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnAgfCBfX0dGUF9DT01QLCBvcmRlcixcbi1cdFx0XHRcdFx0cHJlZmVycmVkX25pZCwgbm9kZW1hc2spO1xuK1x0XHRcdFx0XHRwcmVmZXJyZWRfbmlkLCBub2RlbWFzaywgQUxMT0NfREVGQVVMVCk7XG4gXHRyZXR1cm4gcGFnZV9ybWFwcGFibGVfZm9saW8ocGFnZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0woX19mb2xpb19hbGxvY19ub3Byb2YpO1xuQEAgLTcwMzcsNyArNzEzMiw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X2ZyZWVfZnJvemVuX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGdmcF90IGdmcF9tYXNrKVxuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFnZSwgbmV4dCwgXHUwMDI2bGlzdFtvcmRlcl0sIGxydSkge1xuIFx0XHRcdGludCBpO1xuIFxuLVx0XHRcdHBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgZ2ZwX21hc2spO1xuK1x0XHRcdHBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgZ2ZwX21hc2ssIEFMTE9DX0RFRkFVTFQpO1xuIFx0XHRcdGlmICghb3JkZXIpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbkBAIC03MjQyLDcgKzczMzcsNyBAQCBpbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdHN0cnVjdCBwYWdlICpoZWFkID0gcGZuX3RvX3BhZ2Uoc3RhcnQpO1xuIFxuIFx0XHRjaGVja19uZXdfcGFnZXMoaGVhZCwgb3JkZXIpO1xuLVx0XHRwcmVwX25ld19wYWdlKGhlYWQsIG9yZGVyLCBnZnBfbWFzaywgMCk7XG4rXHRcdHByZXBfbmV3X3BhZ2UoaGVhZCwgb3JkZXIsIGdmcF9tYXNrLCBBTExPQ19ERUZBVUxUKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdFdBUk4odHJ1ZSwgXCJQRk4gcmFuZ2U6IHJlcXVlc3RlZCBbJWx1LCAlbHUpLCBhbGxvY2F0ZWQgWyVsdSwgJWx1KVxcblwiLFxuQEAgLTc4MDQsNyArNzg5OSw3IEBAIHN0YXRpYyBib29sIGNvbmRfYWNjZXB0X21lbW9yeShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKiBCYWlsb3V0LCBzaW5jZSB0cnlfdG9fYWNjZXB0X21lbW9yeV9vbmUoKSBuZWVkcyB0byB0YWtlIGEgbG9jayAqL1xuLVx0aWYgKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19UUllMT0NLKVxuK1x0aWYgKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19OT0xPQ0spXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdHdtYXJrID0gcHJvbW9fd21hcmtfcGFnZXMoem9uZSk7XG5AQCAtNzg3NCw4MCArNzk2OSwxMCBAQCBzdGF0aWMgYm9vbCBfX2ZyZWVfdW5hY2NlcHRlZChzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcbiBzdHJ1Y3QgcGFnZSAqYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9ja19ub3Byb2YoZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbmlkLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4ge1xuLVx0Lypcbi1cdCAqIERvIG5vdCBzcGVjaWZ5IF9fR0ZQX0RJUkVDVF9SRUNMQUlNLCBzaW5jZSBkaXJlY3QgY2xhaW0gaXMgbm90IGFsbG93ZWQuXG4tXHQgKiBEbyBub3Qgc3BlY2lmeSBfX0dGUF9LU1dBUERfUkVDTEFJTSBlaXRoZXIsIHNpbmNlIHdha2UgdXAgb2Yga3N3YXBkXG4tXHQgKiBpcyBub3Qgc2FmZSBpbiBhcmJpdHJhcnkgY29udGV4dC5cbi1cdCAqXG4tXHQgKiBUaGVzZSB0d28gYXJlIHRoZSBjb25kaXRpb25zIGZvciBnZnBmbGFnc19hbGxvd19zcGlubmluZygpIGJlaW5nIHRydWUuXG4tXHQgKlxuLVx0ICogU3BlY2lmeSBfX0dGUF9OT1dBUk4gc2luY2UgZmFpbGluZyBhbGxvY19wYWdlc19ub2xvY2soKSBpcyBub3QgYSByZWFzb25cbi1cdCAqIHRvIHdhcm4uIEFsc28gd2FybiB3b3VsZCB0cmlnZ2VyIHByaW50aygpIHdoaWNoIGlzIHVuc2FmZSBmcm9tXG4tXHQgKiB2YXJpb3VzIGNvbnRleHRzLiBXZSBjYW5ub3QgdXNlIHByaW50a19kZWZlcnJlZF9lbnRlcigpIHRvIG1pdGlnYXRlLFxuLVx0ICogc2luY2UgdGhlIHJ1bm5pbmcgY29udGV4dCBpcyB1bmtub3duLlxuLVx0ICpcbi1cdCAqIFNwZWNpZnkgX19HRlBfWkVSTyB0byBtYWtlIHN1cmUgdGhhdCBjYWxsIHRvIGttc2FuX2FsbG9jX3BhZ2UoKSBiZWxvd1xuLVx0ICogaXMgc2FmZSBpbiBhbnkgY29udGV4dC4gQWxzbyB6ZXJvaW5nIHRoZSBwYWdlIGlzIG1hbmRhdG9yeSBmb3Jcbi1cdCAqIEJQRiB1c2UgY2FzZXMuXG4tXHQgKlxuLVx0ICogVGhvdWdoIF9fR0ZQX05PTUVNQUxMT0MgaXMgbm90IGNoZWNrZWQgaW4gdGhlIGNvZGUgcGF0aCBiZWxvdyxcbi1cdCAqIHNwZWNpZnkgaXQgaGVyZSB0byBoaWdobGlnaHQgdGhhdCBhbGxvY19wYWdlc19ub2xvY2soKVxuLVx0ICogZG9lc24ndCB3YW50IHRvIGRlcGxldGUgcmVzZXJ2ZXMuXG4tXHQgKi9cbi1cdGdmcF90IGFsbG9jX2dmcCA9IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfQ09NUFxuLVx0XHRcdHwgZ2ZwX2ZsYWdzO1xuLVx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzID0gQUxMT0NfVFJZTE9DSztcbi1cdHN0cnVjdCBhbGxvY19jb250ZXh0IGFjID0geyB9O1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4tXG4tXHRWTV9XQVJOX09OX09OQ0UoZ2ZwX2ZsYWdzIFx1MDAyNiB+X19HRlBfQUNDT1VOVCk7XG4tXHQvKlxuLVx0ICogSW4gUFJFRU1QVF9SVCBzcGluX3RyeWxvY2soKSB3aWxsIGNhbGwgcmF3X3NwaW5fbG9jaygpIHdoaWNoIGlzXG4tXHQgKiB1bnNhZmUgaW4gTk1JLiBJZiBzcGluX3RyeWxvY2soKSBpcyBjYWxsZWQgZnJvbSBoYXJkIElSUSB0aGUgY3VycmVudFxuLVx0ICogdGFzayBtYXkgYmUgd2FpdGluZyBmb3Igb25lIHJ0X3NwaW5fbG9jaywgYnV0IHJ0X3NwaW5fdHJ5bG9jaygpIHdpbGxcbi1cdCAqIG1hcmsgdGhlIHRhc2sgYXMgdGhlIG93bmVyIG9mIGFub3RoZXIgcnRfc3Bpbl9sb2NrIHdoaWNoIHdpbGxcbi1cdCAqIGNvbmZ1c2UgUEkgbG9naWMsIHNvIHJldHVybiBpbW1lZGlhdGVseSBpZiBjYWxsZWQgZnJvbSBoYXJkIElSUSBvclxuLVx0ICogTk1JLlxuLVx0ICpcbi1cdCAqIE5vdGUsIGlycXNfZGlzYWJsZWQoKSBjYXNlIGlzIG9rLiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWRcbi1cdCAqIGZyb20gcmF3X3NwaW5fbG9ja19pcnFzYXZlIHJlZ2lvbi5cbi1cdCAqL1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpIFx1MDAyNlx1MDAyNiAoaW5fbm1pKCkgfHwgaW5faGFyZGlycSgpKSlcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHQvKiBPbiBVUCwgc3Bpbl90cnlsb2NrKCkgYWx3YXlzIHN1Y2NlZWRzIGV2ZW4gd2hlbiBpdCBpcyBsb2NrZWQgKi9cbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfU01QKSBcdTAwMjZcdTAwMjYgaW5fbm1pKCkpXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0aWYgKCFwY3BfYWxsb3dlZF9vcmRlcihvcmRlcikpXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0LyogQmFpbG91dCwgc2luY2UgX2RlZmVycmVkX2dyb3dfem9uZSgpIG5lZWRzIHRvIHRha2UgYSBsb2NrICovXG4tXHRpZiAoZGVmZXJyZWRfcGFnZXNfZW5hYmxlZCgpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbiBcdGlmIChuaWQgPT0gTlVNQV9OT19OT0RFKVxuIFx0XHRuaWQgPSBudW1hX25vZGVfaWQoKTtcbiBcbi1cdHByZXBhcmVfYWxsb2NfcGFnZXMoYWxsb2NfZ2ZwLCBvcmRlciwgbmlkLCBOVUxMLCBcdTAwMjZhYyxcbi1cdFx0XHQgICAgXHUwMDI2YWxsb2NfZ2ZwLCBcdTAwMjZhbGxvY19mbGFncyk7XG4tXG4tXHQvKlxuLVx0ICogQmVzdCBlZmZvcnQgYWxsb2NhdGlvbiBmcm9tIHBlcmNwdSBmcmVlIGxpc3QuXG4tXHQgKiBJZiBpdCdzIGVtcHR5IGF0dGVtcHQgdG8gc3Bpbl90cnlsb2NrIHpvbmUtXHUwMDNlbG9jay5cbi1cdCAqL1xuLVx0cGFnZSA9IGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoYWxsb2NfZ2ZwLCBvcmRlciwgYWxsb2NfZmxhZ3MsIFx1MDAyNmFjKTtcbi1cbi1cdC8qIFVubGlrZSByZWd1bGFyIGFsbG9jX3BhZ2VzKCkgdGhlcmUgaXMgbm8gX19hbGxvY19wYWdlc19zbG93cGF0aCgpLiAqL1xuLVxuLVx0aWYgKG1lbWNnX2ttZW1fb25saW5lKCkgXHUwMDI2XHUwMDI2IHBhZ2UgXHUwMDI2XHUwMDI2IChnZnBfZmxhZ3MgXHUwMDI2IF9fR0ZQX0FDQ09VTlQpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHVubGlrZWx5KF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShwYWdlLCBhbGxvY19nZnAsIG9yZGVyKSAhPSAwKSkge1xuLVx0XHRfX2ZyZWVfZnJvemVuX3BhZ2VzKHBhZ2UsIG9yZGVyLCBGUElfVFJZTE9DSyk7XG4tXHRcdHBhZ2UgPSBOVUxMO1xuLVx0fVxuLVx0dHJhY2VfbW1fcGFnZV9hbGxvYyhwYWdlLCBvcmRlciwgYWxsb2NfZ2ZwLCBhYy5taWdyYXRldHlwZSk7XG4tXHRrbXNhbl9hbGxvY19wYWdlKHBhZ2UsIG9yZGVyLCBhbGxvY19nZnApO1xuLVx0cmV0dXJuIHBhZ2U7XG4rXHRyZXR1cm4gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF9mbGFncywgb3JkZXIsIG5pZCwgTlVMTCwgQUxMT0NfTk9MT0NLKTtcbiB9XG4gLyoqXG4gICogYWxsb2NfcGFnZXNfbm9sb2NrIC0gb3Bwb3J0dW5pc3RpYyByZWVudHJhbnQgYWxsb2NhdGlvbiBmcm9tIGFueSBjb250ZXh0XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5oIGIvbW0vcGFnZV9hbGxvYy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjI2MTRiZmY2Nzk1YjA4XG4tLS0gL2Rldi9udWxsXG4rKysgYi9tbS9wYWdlX2FsbG9jLmhcbkBAIC0wLDAgKzEsMzE2IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbisvKlxuKyAqIG1tLWludGVybmFsIEFQSSBmb3IgdGhlIHBhZ2UgKGJ1ZGR5KSBhbGxvY2F0b3IuIFB1YmxpYyBBUEkgbGl2ZXMgaW5cbisgKiBpbmNsdWRlL2xpbnV4L2dmcC5oLlxuKyAqL1xuKyNpZm5kZWYgX19NTV9QQUdFX0FMTE9DX0hcbisjZGVmaW5lIF9fTU1fUEFHRV9BTExPQ19IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tem9uZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbm9kZW1hc2suaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbitcbisjZGVmaW5lIEFMTE9DX0RFRkFVTFRcdFx0MFxuKy8qIFRoZSBBTExPQ19XTUFSSyBiaXRzIGFyZSB1c2VkIGFzIGFuIGluZGV4IHRvIHpvbmUtXHUwMDNld2F0ZXJtYXJrICovXG4rI2RlZmluZSBBTExPQ19XTUFSS19NSU5cdFx0V01BUktfTUlOXG4rI2RlZmluZSBBTExPQ19XTUFSS19MT1dcdFx0V01BUktfTE9XXG4rI2RlZmluZSBBTExPQ19XTUFSS19ISUdIXHRXTUFSS19ISUdIXG4rI2RlZmluZSBBTExPQ19OT19XQVRFUk1BUktTXHQweDA0IC8qIGRvbid0IGNoZWNrIHdhdGVybWFya3MgYXQgYWxsICovXG4rXG4rLyogTWFzayB0byBnZXQgdGhlIHdhdGVybWFyayBiaXRzICovXG4rI2RlZmluZSBBTExPQ19XTUFSS19NQVNLXHQoQUxMT0NfTk9fV0FURVJNQVJLUy0xKVxuK1xuKy8qXG4rICogT25seSBNTVUgYXJjaHMgaGF2ZSBhc3luYyBvb20gdmljdGltIHJlY2xhaW0gLSBha2Egb29tX3JlYXBlciBzbyB3ZVxuKyAqIGNhbm5vdCBhc3N1bWUgYSByZWR1Y2VkIGFjY2VzcyB0byBtZW1vcnkgcmVzZXJ2ZXMgaXMgc3VmZmljaWVudCBmb3JcbisgKiAhTU1VXG4rICovXG4rI2lmZGVmIENPTkZJR19NTVVcbisjZGVmaW5lIEFMTE9DX09PTVx0XHQweDA4XG4rI2Vsc2VcbisjZGVmaW5lIEFMTE9DX09PTVx0XHRBTExPQ19OT19XQVRFUk1BUktTXG4rI2VuZGlmXG4rXG4rI2RlZmluZSBBTExPQ19OT05fQkxPQ0tcdFx0IDB4MTAgLyogQ2FsbGVyIGNhbm5vdCBibG9jay4gQWxsb3cgYWNjZXNzXG4rXHRcdFx0XHQgICAgICAgKiB0byAyNSUgb2YgdGhlIG1pbiB3YXRlcm1hcmsgb3JcbitcdFx0XHRcdCAgICAgICAqIDYyLjUlIGlmIF9fR0ZQX0hJR0ggaXMgc2V0LlxuK1x0XHRcdFx0ICAgICAgICovXG4rI2RlZmluZSBBTExPQ19NSU5fUkVTRVJWRVx0IDB4MjAgLyogX19HRlBfSElHSCBzZXQuIEFsbG93IGFjY2VzcyB0byA1MCVcbitcdFx0XHRcdCAgICAgICAqIG9mIHRoZSBtaW4gd2F0ZXJtYXJrLlxuK1x0XHRcdFx0ICAgICAgICovXG4rI2RlZmluZSBBTExPQ19DUFVTRVRcdFx0IDB4NDAgLyogY2hlY2sgZm9yIGNvcnJlY3QgY3B1c2V0ICovXG4rI2RlZmluZSBBTExPQ19DTUFcdFx0IDB4ODAgLyogYWxsb3cgYWxsb2NhdGlvbnMgZnJvbSBDTUEgYXJlYXMgKi9cbisjaWZkZWYgQ09ORklHX1pPTkVfRE1BMzJcbisjZGVmaW5lIEFMTE9DX05PRlJBR01FTlRcdDB4MTAwIC8qIGF2b2lkIG1peGluZyBwYWdlYmxvY2sgdHlwZXMgKi9cbisjZWxzZVxuKyNkZWZpbmUgQUxMT0NfTk9GUkFHTUVOVFx0ICAweDBcbisjZW5kaWZcbisjZGVmaW5lIEFMTE9DX0hJR0hBVE9NSUNcdDB4MjAwIC8qIEFsbG93cyBhY2Nlc3MgdG8gTUlHUkFURV9ISUdIQVRPTUlDICovXG4rI2RlZmluZSBBTExPQ19OT0xPQ0tcdFx0MHg0MDAgLyogT25seSB1c2Ugc3Bpbl90cnlsb2NrIGluIGFsbG9jYXRpb24gcGF0aCAqL1xuKyNkZWZpbmUgQUxMT0NfS1NXQVBEXHRcdDB4ODAwIC8qIGFsbG93IHdha2luZyBvZiBrc3dhcGQsIF9fR0ZQX0tTV0FQRF9SRUNMQUlNIHNldCAqL1xuKy8qXG4rICogU2tpcCBlYXJseSBQRk4gcmVjb3JkaW5nIGZvciBhIHBhZ2UgYWxsb2NhdGlvbi4gIFVzZWQgYnlcbisgKiBfX2FsbG9jX3RhZ19hZGRfZWFybHlfcGZuKCkgdG8gYXZvaWQgcmVjdXJzaW9uIHdoZW4gYWxsb2NhdGluZyBwYWdlcyBmb3IgdGhlXG4rICogZWFybHkgUEZOIHRyYWNraW5nIGxpc3QgaXRzZWxmLlxuKyAqXG4rICogQ29kZXRhZ3Mgb2YgdGhlIHBhZ2VzIGFsbG9jYXRlZCB3aXRoIF9fR0ZQX05PX0NPREVUQUcgc2hvdWxkIGJlXG4rICogY2xlYXJlZCAodmlhIGNsZWFyX3BhZ2VfdGFnX3JlZigpKSBiZWZvcmUgZnJlZWluZyB0aGUgcGFnZXMgdG8gcHJldmVudFxuKyAqIGFsbG9jX3RhZ19zdWJfY2hlY2soKSBmcm9tIHRyaWdnZXJpbmcgYSB3YXJuaW5nLlxuKyAqL1xuKyNkZWZpbmUgQUxMT0NfTk9fQ09ERVRBRyAgICAgICAweDEwMDBcbitcbisvKiBGbGFncyB0aGF0IGFsbG93IGFsbG9jYXRpb25zIGJlbG93IHRoZSBtaW4gd2F0ZXJtYXJrLiAqL1xuKyNkZWZpbmUgQUxMT0NfUkVTRVJWRVMgKEFMTE9DX05PTl9CTE9DS3xBTExPQ19NSU5fUkVTRVJWRXxBTExPQ19ISUdIQVRPTUlDfEFMTE9DX09PTSlcbitcbisvKlxuKyAqIFN0cnVjdHVyZSBmb3IgaG9sZGluZyB0aGUgbW9zdGx5IGltbXV0YWJsZSBhbGxvY2F0aW9uIHBhcmFtZXRlcnMgcGFzc2VkXG4rICogYmV0d2VlbiBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gYWxsb2NhdGlvbnMsIGluY2x1ZGluZyB0aGUgYWxsb2NfcGFnZXMqXG4rICogZmFtaWx5IG9mIGZ1bmN0aW9ucy5cbisgKlxuKyAqIG5vZGVtYXNrLCBtaWdyYXRldHlwZSBhbmQgaGlnaGVzdF96b25laWR4IGFyZSBpbml0aWFsaXplZCBvbmx5IG9uY2UgaW5cbisgKiBfX2FsbG9jX3BhZ2VzKCkgYW5kIHRoZW4gbmV2ZXIgY2hhbmdlLlxuKyAqXG4rICogem9uZWxpc3QsIHByZWZlcnJlZF96b25lIGFuZCBoaWdoZXN0X3pvbmVpZHggYXJlIHNldCBmaXJzdCBpblxuKyAqIF9fYWxsb2NfcGFnZXMoKSBmb3IgdGhlIGZhc3QgcGF0aCwgYW5kIG1pZ2h0IGJlIGxhdGVyIGNoYW5nZWRcbisgKiBpbiBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKCkuIEFsbCBvdGhlciBmdW5jdGlvbnMgcGFzcyB0aGUgd2hvbGUgc3RydWN0dXJlXG4rICogYnkgYSBjb25zdCBwb2ludGVyLlxuKyAqL1xuK3N0cnVjdCBhbGxvY19jb250ZXh0IHtcbitcdHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3Q7XG4rXHRjb25zdCBub2RlbWFza190ICpub2RlbWFzaztcbitcdHN0cnVjdCB6b25lcmVmICpwcmVmZXJyZWRfem9uZXJlZjtcbitcdGludCBtaWdyYXRldHlwZTtcbitcbitcdC8qXG4rXHQgKiBoaWdoZXN0X3pvbmVpZHggcmVwcmVzZW50cyBoaWdoZXN0IHVzYWJsZSB6b25lIGluZGV4IG9mXG4rXHQgKiB0aGUgYWxsb2NhdGlvbiByZXF1ZXN0LiBEdWUgdG8gdGhlIG5hdHVyZSBvZiB0aGUgem9uZSxcbitcdCAqIG1lbW9yeSBvbiBsb3dlciB6b25lIHRoYW4gdGhlIGhpZ2hlc3Rfem9uZWlkeCB3aWxsIGJlXG4rXHQgKiBwcm90ZWN0ZWQgYnkgbG93bWVtX3Jlc2VydmVbaGlnaGVzdF96b25laWR4XS5cbitcdCAqXG4rXHQgKiBoaWdoZXN0X3pvbmVpZHggaXMgYWxzbyB1c2VkIGJ5IHJlY2xhaW0vY29tcGFjdGlvbiB0byBsaW1pdFxuK1x0ICogdGhlIHRhcmdldCB6b25lIHNpbmNlIGhpZ2hlciB6b25lIHRoYW4gdGhpcyBpbmRleCBjYW5ub3QgYmVcbitcdCAqIHVzYWJsZSBmb3IgdGhpcyBhbGxvY2F0aW9uIHJlcXVlc3QuXG4rXHQgKi9cbitcdGVudW0gem9uZV90eXBlIGhpZ2hlc3Rfem9uZWlkeDtcbitcdGJvb2wgc3ByZWFkX2RpcnR5X3BhZ2VzO1xuK1x0LyogT25seSBmbGFncyB0aGF0IGFyZSBnbG9iYWwgdG8gdGhlIHdob2xlIGFsbG9jYXRpb24gZ28gaGVyZS4gKi9cbitcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncztcbit9O1xuK1xuKy8qXG4rICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBvcmRlciBvZiBhIGZyZWUgcGFnZSBpbiB0aGUgYnVkZHkgc3lzdGVtLiBJblxuKyAqIGdlbmVyYWwsIHBhZ2Vfem9uZShwYWdlKS1cdTAwM2Vsb2NrIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyIHRvIHByZXZlbnQgdGhlXG4rICogcGFnZSBmcm9tIGJlaW5nIGFsbG9jYXRlZCBpbiBwYXJhbGxlbCBhbmQgcmV0dXJuaW5nIGdhcmJhZ2UgYXMgdGhlIG9yZGVyLlxuKyAqIElmIGEgY2FsbGVyIGRvZXMgbm90IGhvbGQgcGFnZV96b25lKHBhZ2UpLVx1MDAzZWxvY2ssIGl0IG11c3QgZ3VhcmFudGVlIHRoYXQgdGhlXG4rICogcGFnZSBjYW5ub3QgYmUgYWxsb2NhdGVkIG9yIG1lcmdlZCBpbiBwYXJhbGxlbC4gQWx0ZXJuYXRpdmVseSwgaXQgbXVzdFxuKyAqIGhhbmRsZSBpbnZhbGlkIHZhbHVlcyBncmFjZWZ1bGx5LCBhbmQgdXNlIGJ1ZGR5X29yZGVyX3Vuc2FmZSgpIGJlbG93LlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJ1ZGR5X29yZGVyKHN0cnVjdCBwYWdlICpwYWdlKVxuK3tcbitcdC8qIFBhZ2VCdWRkeSgpIG11c3QgYmUgY2hlY2tlZCBieSB0aGUgY2FsbGVyICovXG4rXHRyZXR1cm4gcGFnZV9wcml2YXRlKHBhZ2UpO1xuK31cbitcbisvKlxuKyAqIExpa2UgYnVkZHlfb3JkZXIoKSwgYnV0IGZvciBjYWxsZXJzIHdobyBjYW5ub3QgYWZmb3JkIHRvIGhvbGQgdGhlIHpvbmUgbG9jay5cbisgKiBQYWdlQnVkZHkoKSBzaG91bGQgYmUgY2hlY2tlZCBmaXJzdCBieSB0aGUgY2FsbGVyIHRvIG1pbmltaXplIHJhY2Ugd2luZG93LFxuKyAqIGFuZCBpbnZhbGlkIHZhbHVlcyBtdXN0IGJlIGhhbmRsZWQgZ3JhY2VmdWxseS5cbisgKlxuKyAqIFJFQURfT05DRSBpcyB1c2VkIHNvIHRoYXQgaWYgdGhlIGNhbGxlciBhc3NpZ25zIHRoZSByZXN1bHQgaW50byBhIGxvY2FsXG4rICogdmFyaWFibGUgYW5kIGUuZy4gdGVzdHMgaXQgZm9yIHZhbGlkIHJhbmdlIGJlZm9yZSB1c2luZywgdGhlIGNvbXBpbGVyIGNhbm5vdFxuKyAqIGRlY2lkZSB0byByZW1vdmUgdGhlIHZhcmlhYmxlIGFuZCBpbmxpbmUgdGhlIHBhZ2VfcHJpdmF0ZShwYWdlKSBtdWx0aXBsZVxuKyAqIHRpbWVzLCBwb3RlbnRpYWxseSBvYnNlcnZpbmcgZGlmZmVyZW50IHZhbHVlcyBpbiB0aGUgdGVzdHMgYW5kIHRoZSBhY3R1YWxcbisgKiB1c2Ugb2YgdGhlIHJlc3VsdC5cbisgKi9cbisjZGVmaW5lIGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKVx0UkVBRF9PTkNFKHBhZ2VfcHJpdmF0ZShwYWdlKSlcbitcbisvKlxuKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgYSBwYWdlIGlzIGZyZWUgXHUwMDI2XHUwMDI2IGlzIHRoZSBidWRkeVxuKyAqIHdlIGNhbiBjb2FsZXNjZSBhIHBhZ2UgYW5kIGl0cyBidWRkeSBpZlxuKyAqIChhKSB0aGUgYnVkZHkgaXMgbm90IGluIGEgaG9sZSAoY2hlY2sgYmVmb3JlIGNhbGxpbmchKSBcdTAwMjZcdTAwMjZcbisgKiAoYikgdGhlIGJ1ZGR5IGlzIGluIHRoZSBidWRkeSBzeXN0ZW0gXHUwMDI2XHUwMDI2XG4rICogKGMpIGEgcGFnZSBhbmQgaXRzIGJ1ZGR5IGhhdmUgdGhlIHNhbWUgb3JkZXIgXHUwMDI2XHUwMDI2XG4rICogKGQpIGEgcGFnZSBhbmQgaXRzIGJ1ZGR5IGFyZSBpbiB0aGUgc2FtZSB6b25lLlxuKyAqXG4rICogRm9yIHJlY29yZGluZyB3aGV0aGVyIGEgcGFnZSBpcyBpbiB0aGUgYnVkZHkgc3lzdGVtLCB3ZSBzZXQgUGFnZUJ1ZGR5LlxuKyAqIFNldHRpbmcsIGNsZWFyaW5nLCBhbmQgdGVzdGluZyBQYWdlQnVkZHkgaXMgc2VyaWFsaXplZCBieSB6b25lLVx1MDAzZWxvY2suXG4rICpcbisgKiBGb3IgcmVjb3JkaW5nIHBhZ2UncyBvcmRlciwgd2UgdXNlIHBhZ2VfcHJpdmF0ZShwYWdlKS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgcGFnZV9pc19idWRkeShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHBhZ2UgKmJ1ZGR5LFxuK1x0XHRcdFx0IHVuc2lnbmVkIGludCBvcmRlcilcbit7XG4rXHRpZiAoIXBhZ2VfaXNfZ3VhcmQoYnVkZHkpIFx1MDAyNlx1MDAyNiAhUGFnZUJ1ZGR5KGJ1ZGR5KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKGJ1ZGR5X29yZGVyKGJ1ZGR5KSAhPSBvcmRlcilcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LypcbitcdCAqIHpvbmUgY2hlY2sgaXMgZG9uZSBsYXRlIHRvIGF2b2lkIHVzZWxlc3NseSBjYWxjdWxhdGluZ1xuK1x0ICogem9uZS9ub2RlIGlkcyBmb3IgcGFnZXMgdGhhdCBjb3VsZCBuZXZlciBtZXJnZS5cbitcdCAqL1xuK1x0aWYgKHBhZ2Vfem9uZV9pZChwYWdlKSAhPSBwYWdlX3pvbmVfaWQoYnVkZHkpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRWTV9CVUdfT05fUEFHRShwYWdlX2NvdW50KGJ1ZGR5KSAhPSAwLCBidWRkeSk7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rLypcbisgKiBMb2NhdGUgdGhlIHN0cnVjdCBwYWdlIGZvciBib3RoIHRoZSBtYXRjaGluZyBidWRkeSBpbiBvdXJcbisgKiBwYWlyIChidWRkeTEpIGFuZCB0aGUgY29tYmluZWQgTyhuKzEpIHBhZ2UgdGhleSBmb3JtIChwYWdlKS5cbisgKlxuKyAqIDEpIEFueSBidWRkeSBCMSB3aWxsIGhhdmUgYW4gb3JkZXIgTyB0d2luIEIyIHdoaWNoIHNhdGlzZmllc1xuKyAqIHRoZSBmb2xsb3dpbmcgZXF1YXRpb246XG4rICogICAgIEIyID0gQjEgXiAoMSBcdTAwM2NcdTAwM2MgTylcbisgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIHN0YXJ0aW5nIGJ1ZGR5IChidWRkeTIpIGlzICM4IGl0cyBvcmRlclxuKyAqIDEgYnVkZHkgaXMgIzEwOlxuKyAqICAgICBCMiA9IDggXiAoMSBcdTAwM2NcdTAwM2MgMSkgPSA4IF4gMiA9IDEwXG4rICpcbisgKiAyKSBBbnkgYnVkZHkgQiB3aWxsIGhhdmUgYW4gb3JkZXIgTysxIHBhcmVudCBQIHdoaWNoXG4rICogc2F0aXNmaWVzIHRoZSBmb2xsb3dpbmcgZXF1YXRpb246XG4rICogICAgIFAgPSBCIFx1MDAyNiB+KDEgXHUwMDNjXHUwMDNjIE8pXG4rICpcbisgKiBBc3N1bXB0aW9uOiAqX21lbV9tYXAgaXMgY29udGlndW91cyBhdCBsZWFzdCB1cCB0byBNQVhfUEFHRV9PUkRFUlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xuK19fZmluZF9idWRkeV9wZm4odW5zaWduZWQgbG9uZyBwYWdlX3BmbiwgdW5zaWduZWQgaW50IG9yZGVyKVxuK3tcbitcdHJldHVybiBwYWdlX3BmbiBeICgxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4rfVxuK1xuKy8qXG4rICogRmluZCB0aGUgYnVkZHkgb2YgQHBhZ2UgYW5kIHZhbGlkYXRlIGl0LlxuKyAqIEBwYWdlOiBUaGUgaW5wdXQgcGFnZVxuKyAqIEBwZm46IFRoZSBwZm4gb2YgdGhlIHBhZ2UsIGl0IHNhdmVzIGEgY2FsbCB0byBwYWdlX3RvX3BmbigpIHdoZW4gdGhlXG4rICogICAgICAgZnVuY3Rpb24gaXMgdXNlZCBpbiB0aGUgcGVyZm9ybWFuY2UtY3JpdGljYWwgX19mcmVlX29uZV9wYWdlKCkuXG4rICogQG9yZGVyOiBUaGUgb3JkZXIgb2YgdGhlIHBhZ2VcbisgKiBAYnVkZHlfcGZuOiBUaGUgb3V0cHV0IHBvaW50ZXIgdG8gdGhlIGJ1ZGR5IHBmbiwgaXQgYWxzbyBzYXZlcyBhIGNhbGwgdG9cbisgKiAgICAgICAgICAgICBwYWdlX3RvX3BmbigpLlxuKyAqXG4rICogVGhlIGZvdW5kIGJ1ZGR5IGNhbiBiZSBhIG5vbiBQYWdlQnVkZHksIG91dCBvZiBAcGFnZSdzIHpvbmUsIG9yIGl0cyBvcmRlciBpc1xuKyAqIG5vdCB0aGUgc2FtZSBhcyBAcGFnZS4gVGhlIHZhbGlkYXRpb24gaXMgbmVjZXNzYXJ5IGJlZm9yZSB1c2UgaXQuXG4rICpcbisgKiBSZXR1cm46IHRoZSBmb3VuZCBidWRkeSBwYWdlIG9yIE5VTEwgaWYgbm90IGZvdW5kLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmZpbmRfYnVkZHlfcGFnZV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGludCBvcmRlciwgdW5zaWduZWQgbG9uZyAqYnVkZHlfcGZuKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgX19idWRkeV9wZm4gPSBfX2ZpbmRfYnVkZHlfcGZuKHBmbiwgb3JkZXIpO1xuK1x0c3RydWN0IHBhZ2UgKmJ1ZGR5O1xuK1xuK1x0YnVkZHkgPSBwYWdlICsgKF9fYnVkZHlfcGZuIC0gcGZuKTtcbitcdGlmIChidWRkeV9wZm4pXG4rXHRcdCpidWRkeV9wZm4gPSBfX2J1ZGR5X3BmbjtcbitcbitcdGlmIChwYWdlX2lzX2J1ZGR5KHBhZ2UsIGJ1ZGR5LCBvcmRlcikpXG4rXHRcdHJldHVybiBidWRkeTtcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitleHRlcm4gc3RydWN0IHBhZ2UgKl9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuK1x0XHRcdFx0dW5zaWduZWQgbG9uZyBlbmRfcGZuLCBzdHJ1Y3Qgem9uZSAqem9uZSk7XG4rXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqcGFnZWJsb2NrX3Bmbl90b19wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuK1x0XHRcdFx0dW5zaWduZWQgbG9uZyBlbmRfcGZuLCBzdHJ1Y3Qgem9uZSAqem9uZSlcbit7XG4rXHRpZiAoem9uZS1cdTAwM2Vjb250aWd1b3VzKVxuK1x0XHRyZXR1cm4gcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKTtcbitcbitcdHJldHVybiBfX3BhZ2VibG9ja19wZm5fdG9fcGFnZShzdGFydF9wZm4sIGVuZF9wZm4sIHpvbmUpO1xuK31cbitcbitleHRlcm4gdm9pZCBfX2ZyZWVfcGFnZXNfY29yZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuK1x0XHRlbnVtIG1lbWluaXRfY29udGV4dCBjb250ZXh0KTtcbitcbit2b2lkIHBvc3RfYWxsb2NfaG9vayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBnZnBfZmxhZ3MsXG4rXHRcdCAgICAgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKTtcbitleHRlcm4gYm9vbCBmcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG4rXG4rZXh0ZXJuIGludCB1c2VyX21pbl9mcmVlX2tieXRlcztcbitcbitzdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgbmlkLFxuK1x0XHRub2RlbWFza190ICpub2RlbWFzaywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKTtcbisjZGVmaW5lIF9fYWxsb2NfZnJvemVuX3BhZ2VzKC4uLikgXFxcbitcdGFsbG9jX2hvb2tzKF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihfX1ZBX0FSR1NfXykpXG4rdm9pZCBmcmVlX2Zyb3plbl9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbit2b2lkIGZyZWVfdW5yZWZfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKTtcbitcbisjaWZkZWYgQ09ORklHX05VTUFcbitzdHJ1Y3QgcGFnZSAqYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnBfdCwgdW5zaWduZWQgaW50IG9yZGVyKTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmFsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4re1xuK1x0cmV0dXJuIF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihnZnAsIG9yZGVyLCBudW1hX25vZGVfaWQoKSwgTlVMTCxcbitcdFx0XHRcdFx0ICAgMCAvKiBBTExPQ19ERUZBVUxUICovKTtcbit9XG4rI2VuZGlmXG4rXG4rI2RlZmluZSBhbGxvY19mcm96ZW5fcGFnZXMoLi4uKSBcXFxuK1x0YWxsb2NfaG9va3MoYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihfX1ZBX0FSR1NfXykpXG4rXG4rc3RydWN0IHBhZ2UgKmFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mKGdmcF90IGdmcF9mbGFncywgaW50IG5pZCwgdW5zaWduZWQgaW50IG9yZGVyKTtcbisjZGVmaW5lIGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2soLi4uKSBcXFxuK1x0YWxsb2NfaG9va3MoYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9ja19ub3Byb2YoX19WQV9BUkdTX18pKVxuK3ZvaWQgZnJlZV9mcm96ZW5fcGFnZXNfbm9sb2NrKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuK1xuK3N0cnVjdCBwYWdlICpfX2FsbG9jX3BhZ2VzX25vcHJvZihnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlciwgaW50IHByZWZlcnJlZF9uaWQsXG4rXHRcdG5vZGVtYXNrX3QgKm5vZGVtYXNrLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpO1xuKyNkZWZpbmUgX19hbGxvY19wYWdlcyguLi4pXHRcdFx0YWxsb2NfaG9va3MoX19hbGxvY19wYWdlc19ub3Byb2YoX19WQV9BUkdTX18pKVxuK1xuK2V4dGVybiB2b2lkIHpvbmVfcGNwX3Jlc2V0KHN0cnVjdCB6b25lICp6b25lKTtcbitleHRlcm4gdm9pZCB6b25lX3BjcF9kaXNhYmxlKHN0cnVjdCB6b25lICp6b25lKTtcbitleHRlcm4gdm9pZCB6b25lX3BjcF9lbmFibGUoc3RydWN0IHpvbmUgKnpvbmUpO1xuK2V4dGVybiB2b2lkIHpvbmVfcGNwX2luaXQoc3RydWN0IHpvbmUgKnpvbmUpO1xuK1xuK2VudW0gZmFsbGJhY2tfcmVzdWx0IHtcbitcdC8qIEZvdW5kIHN1aXRhYmxlIG1pZ3JhdGV0eXBlLCAqbXRfb3V0IGlzIHZhbGlkLiAqL1xuK1x0RkFMTEJBQ0tfRk9VTkQsXG4rXHQvKiBObyBmYWxsYmFjayBmb3VuZCBpbiByZXF1ZXN0ZWQgb3JkZXIuICovXG4rXHRGQUxMQkFDS19FTVBUWSxcbitcdC8qIFBhc3NlZCBAY2xhaW1hYmxlLCBidXQgY2xhaW1pbmcgd2hvbGUgYmxvY2sgaXMgYSBiYWQgaWRlYS4gKi9cbitcdEZBTExCQUNLX05PQ0xBSU0sXG4rfTtcbitlbnVtIGZhbGxiYWNrX3Jlc3VsdFxuK2ZpbmRfc3VpdGFibGVfZmFsbGJhY2soc3RydWN0IGZyZWVfYXJlYSAqYXJlYSwgdW5zaWduZWQgaW50IG9yZGVyLFxuK1x0XHQgICAgICAgaW50IG1pZ3JhdGV0eXBlLCBib29sIGNsYWltYWJsZSwgaW50ICptdF9vdXQpO1xuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBmcmVlX2FyZWFfZW1wdHkoc3RydWN0IGZyZWVfYXJlYSAqYXJlYSwgaW50IG1pZ3JhdGV0eXBlKVxuK3tcbitcdHJldHVybiBsaXN0X2VtcHR5KFx1MDAyNmFyZWEtXHUwMDNlZnJlZV9saXN0W21pZ3JhdGV0eXBlXSk7XG4rfVxuK1xuKy8qIENvbnZlcnQgR0ZQIGZsYWdzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgbWlncmF0ZSB0eXBlICovXG4rI2RlZmluZSBHRlBfTU9WQUJMRV9NQVNLIChfX0dGUF9SRUNMQUlNQUJMRXxfX0dGUF9NT1ZBQkxFKVxuKyNkZWZpbmUgR0ZQX01PVkFCTEVfU0hJRlQgM1xuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGdmcF9taWdyYXRldHlwZShjb25zdCBnZnBfdCBnZnBfZmxhZ3MpXG4re1xuK1x0Vk1fV0FSTl9PTigoZ2ZwX2ZsYWdzIFx1MDAyNiBHRlBfTU9WQUJMRV9NQVNLKSA9PSBHRlBfTU9WQUJMRV9NQVNLKTtcbitcdEJVSUxEX0JVR19PTigoMVVMIFx1MDAzY1x1MDAzYyBHRlBfTU9WQUJMRV9TSElGVCkgIT0gX19fR0ZQX01PVkFCTEUpO1xuK1x0QlVJTERfQlVHX09OKChfX19HRlBfTU9WQUJMRSBcdTAwM2VcdTAwM2UgR0ZQX01PVkFCTEVfU0hJRlQpICE9IE1JR1JBVEVfTU9WQUJMRSk7XG4rXHRCVUlMRF9CVUdfT04oKF9fX0dGUF9SRUNMQUlNQUJMRSBcdTAwM2VcdTAwM2UgR0ZQX01PVkFCTEVfU0hJRlQpICE9IE1JR1JBVEVfUkVDTEFJTUFCTEUpO1xuK1x0QlVJTERfQlVHX09OKCgoX19fR0ZQX01PVkFCTEUgfCBfX19HRlBfUkVDTEFJTUFCTEUpIFx1MDAzZVx1MDAzZVxuK1x0XHQgICAgICBHRlBfTU9WQUJMRV9TSElGVCkgIT0gTUlHUkFURV9ISUdIQVRPTUlDKTtcbitcbitcdGlmICh1bmxpa2VseShwYWdlX2dyb3VwX2J5X21vYmlsaXR5X2Rpc2FibGVkKSlcbitcdFx0cmV0dXJuIE1JR1JBVEVfVU5NT1ZBQkxFO1xuK1xuK1x0LyogR3JvdXAgYmFzZWQgb24gbW9iaWxpdHkgKi9cbitcdHJldHVybiAoX19mb3JjZSB1bnNpZ25lZCBsb25nKShnZnBfZmxhZ3MgXHUwMDI2IEdGUF9NT1ZBQkxFX01BU0spIFx1MDAzZVx1MDAzZSBHRlBfTU9WQUJMRV9TSElGVDtcbit9XG4rI3VuZGVmIEdGUF9NT1ZBQkxFX01BU0tcbisjdW5kZWYgR0ZQX01PVkFCTEVfU0hJRlRcbitcbitib29sIGRlY2F5X3BjcF9oaWdoKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwKTtcbit2b2lkIGRyYWluX3pvbmVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwZXJfY3B1X3BhZ2VzICpwY3ApO1xuK3ZvaWQgZHJhaW5fYWxsX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKTtcbit2b2lkIGRyYWluX2xvY2FsX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKTtcbitcbit2b2lkIHBhZ2VfYWxsb2NfaW5pdF9jcHVocCh2b2lkKTtcbit2b2lkIHBhZ2VfYWxsb2Nfc3lzY3RsX2luaXQodm9pZCk7XG4rXG4rI2VuZGlmIC8qIF9fTU1fUEFHRV9BTExPQ19IICovXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9mcmFnX2NhY2hlLmMgYi9tbS9wYWdlX2ZyYWdfY2FjaGUuY1xuaW5kZXggZDI0MjNmMzA1NzdlNDkuLmU2M2VmZTc4YjdkNGI0IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9mcmFnX2NhY2hlLmNcbisrKyBiL21tL3BhZ2VfZnJhZ19jYWNoZS5jXG5AQCAtMTgsNyArMTgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX2ZyYWdfY2FjaGUuaFx1MDAzZVxuLSNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4rI2luY2x1ZGUgXCJwYWdlX2FsbG9jLmhcIlxuIFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVuY29kZWRfcGFnZV9jcmVhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdFx0XHRcdFx0IGJvb2wgcGZtZW1hbGxvYylcbkBAIC01NywxMCArNTcsMTAgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpfX3BhZ2VfZnJhZ19jYWNoZV9yZWZpbGwoc3RydWN0IHBhZ2VfZnJhZ19jYWNoZSAqbmMsXG4gXHRnZnBfbWFzayA9IChnZnBfbWFzayBcdTAwMjYgfl9fR0ZQX0RJUkVDVF9SRUNMQUlNKSB8ICBfX0dGUF9DT01QIHxcbiBcdFx0ICAgX19HRlBfTk9XQVJOIHwgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PTUVNQUxMT0M7XG4gXHRwYWdlID0gX19hbGxvY19wYWdlcyhnZnBfbWFzaywgUEFHRV9GUkFHX0NBQ0hFX01BWF9PUkRFUixcbi1cdFx0XHQgICAgIG51bWFfbWVtX2lkKCksIE5VTEwpO1xuK1x0XHRcdCAgICAgbnVtYV9tZW1faWQoKSwgTlVMTCwgQUxMT0NfREVGQVVMVCk7XG4gI2VuZGlmXG4gXHRpZiAodW5saWtlbHkoIXBhZ2UpKSB7XG4tXHRcdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzKGdmcCwgMCwgbnVtYV9tZW1faWQoKSwgTlVMTCk7XG4rXHRcdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzKGdmcCwgMCwgbnVtYV9tZW1faWQoKSwgTlVMTCwgQUxMT0NfREVGQVVMVCk7XG4gXHRcdG9yZGVyID0gMDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2lzb2xhdGlvbi5jIGIvbW0vcGFnZV9pc29sYXRpb24uY1xuaW5kZXggMzJjZThhN2Q5ZGYzNTUuLmU1ZGZjN2JmNDk0NDYwIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9pc29sYXRpb24uY1xuKysrIGIvbW0vcGFnZV9pc29sYXRpb24uY1xuQEAgLTExLDYgKzExLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX293bmVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9taWdyYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuKyNpbmNsdWRlIFwicGFnZV9hbGxvYy5oXCJcbiBcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvcGFnZV9pc29sYXRpb24uaFx1MDAzZVxuZGlmZiAtLWdpdCBhL21tL3BhZ2Vfb3duZXIuYyBiL21tL3BhZ2Vfb3duZXIuY1xuaW5kZXggZmZiYWJhM2Q2OWQzY2UuLjI5MGU0N2UxZmEwOWUxIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9vd25lci5jXG4rKysgYi9tbS9wYWdlX293bmVyLmNcbkBAIC0xMyw3ICsxMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvY2xvY2suaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4rI2luY2x1ZGUgXCJwYWdlX2FsbG9jLmhcIlxuIFxuIC8qXG4gICogVE9ETzogdGVhY2ggUEFHRV9PV05FUl9TVEFDS19ERVBUSCAoX19kdW1wX3BhZ2Vfb3duZXIgYW5kIHNhdmVfc3RhY2spXG5kaWZmIC0tZ2l0IGEvbW0vc2hvd19tZW0uYyBiL21tL3Nob3dfbWVtLmNcbmluZGV4IDFiNzIxYThhZGU2N2RkLi5kMTI4OGI0YzJiNjQwMSAxMDA2NDRcbi0tLSBhL21tL3Nob3dfbWVtLmNcbisrKyBiL21tL3Nob3dfbWVtLmNcbkBAIC0xNiw2ICsxNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1zdGF0LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuKyNpbmNsdWRlIFwicGFnZV9hbGxvYy5oXCJcbiAjaW5jbHVkZSBcInN3YXAuaFwiXG4gXG4gYXRvbWljX2xvbmdfdCBfdG90YWxyYW1fcGFnZXMgX19yZWFkX21vc3RseTtcbmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmNcbmluZGV4IDlmNzU0Y2YxYzE4NzRjLi5mZjQ0ZjQzNzNkNTIyYiAxMDA2NDRcbi0tLSBhL21tL3NsdWIuY1xuKysrIGIvbW0vc2x1Yi5jXG5AQCAtNTMsNiArNTMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9rbWVtLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuKyNpbmNsdWRlIFwicGFnZV9hbGxvYy5oXCJcbiBcbiAvKlxuICAqIExvY2sgb3JkZXI6XG5AQCAtMzI5MSw3ICszMjkyLDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYiAqYWxsb2Nfc2xhYl9wYWdlKGdmcF90IGZsYWdzLCBpbnQgbm9kZSxcbiBcdGVsc2UgaWYgKG5vZGUgPT0gTlVNQV9OT19OT0RFKVxuIFx0XHRwYWdlID0gYWxsb2NfZnJvemVuX3BhZ2VzKGZsYWdzLCBvcmRlcik7XG4gXHRlbHNlXG4tXHRcdHBhZ2UgPSBfX2FsbG9jX2Zyb3plbl9wYWdlcyhmbGFncywgb3JkZXIsIG5vZGUsIE5VTEwpO1xuK1x0XHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXMoZmxhZ3MsIG9yZGVyLCBub2RlLCBOVUxMLFxuK1x0XHRcdFx0XHQgICAgQUxMT0NfREVGQVVMVCk7XG4gXG4gXHRpZiAoIXBhZ2UpXG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTUyNzUsNyArNTI3Nyw4IEBAIHN0YXRpYyB2b2lkICpfX19rbWFsbG9jX2xhcmdlX25vZGUoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSlcbiBcdGlmIChub2RlID09IE5VTUFfTk9fTk9ERSlcbiBcdFx0cGFnZSA9IGFsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZmxhZ3MsIG9yZGVyKTtcbiBcdGVsc2Vcbi1cdFx0cGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihmbGFncywgb3JkZXIsIG5vZGUsIE5VTEwpO1xuK1x0XHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGZsYWdzLCBvcmRlciwgbm9kZSwgTlVMTCxcbitcdFx0XHRcdFx0XHQgICBBTExPQ19ERUZBVUxUKTtcbiBcbiBcdGlmIChwYWdlKSB7XG4gXHRcdHB0ciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwLmMgYi9tbS9zd2FwLmNcbmluZGV4IDU4ZTRlZmY2OThjYzRlLi5kMjUxMzEzMDVjOTRjYiAxMDA2NDRcbi0tLSBhL21tL3N3YXAuY1xuKysrIGIvbW0vc3dhcC5jXG5AQCAtMzksNiArMzksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1ZmZlcl9oZWFkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuKyNpbmNsdWRlIFwicGFnZV9hbGxvYy5oXCJcbiBcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvcGFnZW1hcC5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggNzU0YzVmNWQ3MTZhYWQuLmRlMTg3OWRiMzkxNjBiIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNjYsNiArNjYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3N5c2N0bC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJpbnRlcm5hbC5oXCJcbisjaW5jbHVkZSBcInBhZ2VfYWxsb2MuaFwiXG4gI2luY2x1ZGUgXCJzd2FwLmhcIlxuIFxuICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UU1xuZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmNcbmluZGV4IDdiOTNmYmY5YWYwOTI2Li4zYjVjYjEwMzFmNzIwOSAxMDA2NDRcbi0tLSBhL21tL3Ztc3RhdC5jXG4rKysgYi9tbS92bXN0YXQuY1xuQEAgLTMwLDYgKzMwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9pc29sYXRpb24uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4rI2luY2x1ZGUgXCJwYWdlX2FsbG9jLmhcIlxuIFxuICNpZmRlZiBDT05GSUdfUFJPQ19GU1xuICNpZmRlZiBDT05GSUdfTlVNQVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmggYi90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oXG5pbmRleCA2Yzc1ZGYzMGEyODFkMS4uYTkzYjhiZDIwMGI3NjAgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oXG4rKysgYi90b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oXG5AQCAtNTUsNyArNTUsNiBAQCBlbnVtIHtcbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiBcdF9fX0dGUF9OT0xPQ0tERVBfQklULFxuICNlbmRpZlxuLVx0X19fR0ZQX05PX09CSl9FWFRfQklULFxuIFx0X19fR0ZQX0xBU1RfQklUXG4gfTtcbiBcbkBAIC05Niw3ICs5NSw2IEBAIGVudW0ge1xuICNlbHNlXG4gI2RlZmluZSBfX19HRlBfTk9MT0NLREVQXHQwXG4gI2VuZGlmXG4tI2RlZmluZSBfX19HRlBfTk9fT0JKX0VYVCAgICAgICBCSVQoX19fR0ZQX05PX09CSl9FWFRfQklUKVxuIFxuIC8qXG4gICogUGh5c2ljYWwgYWRkcmVzcyB6b25lIG1vZGlmaWVycyAoc2VlIGxpbnV4L21tem9uZS5oIC0gbG93IGZvdXIgYml0cylcbkBAIC0xMzcsMTcgKzEzNSwxMiBAQCBlbnVtIHtcbiAgKiBub2RlIHdpdGggbm8gZmFsbGJhY2tzIG9yIHBsYWNlbWVudCBwb2xpY3kgZW5mb3JjZW1lbnRzLlxuICAqXG4gICogJV9fR0ZQX0FDQ09VTlQgY2F1c2VzIHRoZSBhbGxvY2F0aW9uIHRvIGJlIGFjY291bnRlZCB0byBrbWVtY2cuXG4tICpcbi0gKiAlX19HRlBfTk9fT0JKX0VYVCBjYXVzZXMgc2xhYiBhbGxvY2F0aW9uIHRvIGhhdmUgbm8gb2JqZWN0IGV4dGVuc2lvbi5cbi0gKiBtYXJrX29ial9jb2RldGFnX2VtcHR5KCkgc2hvdWxkIGJlIGNhbGxlZCB1cG9uIGZyZWVpbmcgZm9yIG9iamVjdHMgYWxsb2NhdGVkXG4tICogd2l0aCB0aGlzIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGVpciBOVUxMIHRhZ3MgYXJlIGV4cGVjdGVkIGFuZCBub3JtYWwuXG4gICovXG4gI2RlZmluZSBfX0dGUF9SRUNMQUlNQUJMRSAoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX1JFQ0xBSU1BQkxFKVxuICNkZWZpbmUgX19HRlBfV1JJVEVcdCgoX19mb3JjZSBnZnBfdClfX19HRlBfV1JJVEUpXG4gI2RlZmluZSBfX0dGUF9IQVJEV0FMTCAgICgoX19mb3JjZSBnZnBfdClfX19HRlBfSEFSRFdBTEwpXG4gI2RlZmluZSBfX0dGUF9USElTTk9ERVx0KChfX2ZvcmNlIGdmcF90KV9fX0dGUF9USElTTk9ERSlcbiAjZGVmaW5lIF9fR0ZQX0FDQ09VTlRcdCgoX19mb3JjZSBnZnBfdClfX19HRlBfQUNDT1VOVClcbi0jZGVmaW5lIF9fR0ZQX05PX09CSl9FWFQgICAoKF9fZm9yY2UgZ2ZwX3QpX19fR0ZQX05PX09CSl9FWFQpXG4gXG4gLyoqXG4gICogRE9DOiBXYXRlcm1hcmsgbW9kaWZpZXJzXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMzoyOTozNi43NTMzNDY3NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNDQ4MzAxMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgdGhlIExpbnV4IEtlcm5lbCdzIFBhZ2UgQWxsb2NhdG9yKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGRpdmVzIGRlZXAgaW50byB0aGUgTGludXgga2VybmVsJ3MgcGFnZSBhbGxvY2F0b3IuIEl0IGxvb2tzIGxpa2UgYSBzaWduaWZpY2FudCByZWZhY3RvcmluZyBvZiB0aGUgaW50ZXJuYWwgQVBJcywgd2hpY2ggaXMgYWx3YXlzIGEgYml0IG5lcnZlLXdyYWNraW5nIGdpdmVuIGhvdyBmdW5kYW1lbnRhbCBhbmQgZnJlcXVlbnRseSB1c2VkIHRoaXMgY29kZSBpcy4gVGhlIGNvcmUgb2YgdGhpcyB3b3JrIHNlZW1zIHRvIGJlIGFpbWVkIGF0IG1ha2luZyB0aGluZ3MgY2xlYW5lciBhbmQgcG90ZW50aWFsbHkgbW9yZSBmbGV4aWJsZSBmb3IgZnV0dXJlIGRldmVsb3BtZW50LlxuXG5UaGUgcGF0Y2ggY3JlYXRlcyBhIG5ldyBoZWFkZXIsIGBtbS9wYWdlX2FsbG9jLmhgLCBhbmQgc2hpZnRzIHNvbWUgaW50ZXJuYWwgZGVmaW5pdGlvbnMgZnJvbSBgbW0vaW50ZXJuYWwuaGAgb3ZlciB0aGVyZS4gVGhhdCdzIGdvb2QgaHlnaWVuZTsgc2VwYXJhdGluZyBjb25jZXJucyBpcyBhbHdheXMgYSBzb2xpZCBtb3ZlLiBUaGV5J3JlIGFsc28gbW9kaWZ5aW5nIHRoZSBzaWduYXR1cmVzIG9mIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAgYW5kIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgIHRvIHRha2UgYW4gYGFsbG9jX2ZsYWdzYCBhcmd1bWVudC4gUmVwbGFjaW5nIHNwZWNpZmljIGZsYWdzIGxpa2UgYF9fR0ZQX05PX09CSl9FWFRgIGFuZCBgX19HRlBfTk9fQ09ERVRBR2Agd2l0aCBhIGNvbnNvbGlkYXRlZCBgYWxsb2NfZmxhZ3NgIGFuZCBgQUxMT0NfTk9fQ09ERVRBR2AgaXMgYW5vdGhlciB3ZWxjb21lIGNoYW5nZS4gVGhlIG9sZCBsb2NrIGRlZmluaXRpb24gaXMgYWxzbyBjaGFuZ2VkIGZyb20gYEFMTE9DX1RSWUxPQ0tgIHRvIGBBTExPQ19OT0xPQ0tgIGFuZCB0aGUgZnVuY3Rpb24gYGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mYCBpcyBvdXQgb2YgbGluZWQgZnJvbSBgaW5jbHVkZS9saW51eC9nZnAuaGAsIHdoaWxlIGBnZnBfdG9fYWxsb2NfZmxhZ3NgIGlzIHJlcGxhY2VkIHdpdGggYGFsbG9jX2ZsYWdzX3Nsb3dwYXRoYCBhbmQgYGdmcF90b19hbGxvY19mbGFnc19jbWFgIGlzIHJlcGxhY2VkIHdpdGggYGFsbG9jX2ZsYWdzX2NtYWAuXG5cbkdpdmVuIHRoYXQgaXQgdG91Y2hlcyBgbW0vcGFnZV9hbGxvYy5jYCwgYG1tL2ludGVybmFsLmhgLCBgbW0vcGFnZV9hbGxvYy5oYCwgYW5kIGBpbmNsdWRlL2xpbnV4L2dmcC5oYCwgSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiB0byBzZWUgaWYgdGhpcyBpbnRyb2R1Y2VzIGFueSBuZXcgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFRoZSBwYWdlIGFsbG9jYXRvciBpcyBhbHdheXMgZW5hYmxlZCwgc28gdGhhdCdzIGEgZ29vZCBzdGFydC4gQnV0IEkgbmVlZCB0byBjaGVjayBpZiB0aGluZ3MgbGlrZSBgQ09ORklHX05VTUFgLCBgQ09ORklHX01FTUNHYCwgb3IgbWF5YmUgZXZlbiBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIGNvbWUgaW50byBwbGF5IGhlcmUuIFRoZSB1c2Ugb2YgYEFMTE9DX05PX0NPREVUQUdgIGluIGBtbS9hbGxvY190YWcuY2AgZmVlbHMgbGlrZSBpdCBjb3VsZCBiZSByZWxhdGVkIHRvIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AuIEkgdGhpbmsgSSdsbCB1c2UgYGdyZXBwZXJgIHRvIGJlIHN1cmUgYWJvdXQgdGhlIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgZGVwZW5kZW5jeS4gTGV0J3MgbWFrZSBzdXJlIGJlZm9yZSB3ZSBwdXNoIHRoaXMgdXBzdHJlYW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NDY1LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDM6Mjk6NDMuODk4MTgwOTYzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTYzNjU4NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0PTI1PUN1cnJlbnRseSwgdGhlc2UgZmlsZXMgYXJlIGluIC9wcm9jL3N5cy92bTpcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdC00Ni0tIG1heF9tYXBfY291bnRcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3Q6NDc6LSBtZW1fcHJvZmlsaW5nICAgICAgICAgKG9ubHkgaWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkc9eSlcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QtNDgtLSBtZW1vcnlfZmFpbHVyZV9lYXJseV9raWxsXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3Q9NDc5PW1lbV9wcm9maWxpbmdcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdC00ODEtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0OjQ4MjpFbmFibGUgbWVtb3J5IHByb2ZpbGluZyAod2hlbiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORz15KVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdC00ODMtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3Q9NDg5PW1lbW9yeSBhbGxvY2F0aW9ucy5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QtNDkwLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdDo0OTE6VGhlIGRlZmF1bHQgdmFsdWUgZGVwZW5kcyBvbiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFQuXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0LTQ5Mi1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3Q6NDkzOldoZW4gQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUc9eSwgdGhpcyBjb250cm9sIGlzIHJlYWQtb25seSB0byBhdm9pZFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdC00OTQtd2FybmluZ3MgcHJvZHVjZWQgYnkgYWxsb2NhdGlvbnMgbWFkZSB3aGlsZSBwcm9maWxpbmcgaXMgZGlzYWJsZWQgYW5kIGZyZWVkXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdD0xMT1rY29uZmlnIG9wdGlvbnM6XFxuRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3Q6MTI6LSBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xcbkRvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0LTEzLVxcbkRvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0OjE0Oi0gQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXFxuRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3QtMTUtXFxuRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3Q6MTY6LSBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xcbkRvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0LTE3LSAgYWRkcyB3YXJuaW5ncyBmb3IgYWxsb2NhdGlvbnMgdGhhdCB3ZXJlbid0IGFjY291bnRlZCBiZWNhdXNlIG9mIGFcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0PTIwPUJvb3QgcGFyYW1ldGVyOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3QtMjQtICBjYW5ub3QgYmUgZW5hYmxlZCBhdCBydW50aW1lIChzeXNjdGwgYmVjb21lcyByZWFkLW9ubHkpLlxcbkRvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0OjI1OiAgV2hlbiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFQ9eSwgZGVmYXVsdCB2YWx1ZSBpcyBcXFwiMVxcXCIuXFxuRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3Q6MjY6ICBXaGVuIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVD1uLCBkZWZhdWx0IHZhbHVlIGlzIFxcXCJuZXZlclxcXCIuXFxuRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3QtMjctICBcXFwiY29tcHJlc3NlZFxcXCIgb3B0aW9uYWwgcGFyYW1ldGVyIHdpbGwgdHJ5IHRvIHN0b3JlIHBhZ2UgdGFnIHJlZmVyZW5jZXMgaW4gYVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3Q9MzM9c3lzY3RsOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3QtMzktXFxuRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3Q6NDA6ICBUaGUgZGVmYXVsdCB2YWx1ZSBkZXBlbmRzIG9uIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVC5cXG5Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdC00MS1cXG5Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdDo0MjogIFdoZW4gQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUc9eSwgdGhpcyBjb250cm9sIGlzIHJlYWQtb25seSB0byBhdm9pZFxcbkRvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0LTQzLSAgd2FybmluZ3MgcHJvZHVjZWQgYnkgYWxsb2NhdGlvbnMgbWFkZSB3aGlsZSBwcm9maWxpbmcgaXMgZGlzYWJsZWQgYW5kIGZyZWVkXFxuLS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL2NvZGV0YWcubGRzLmgtNC1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL2NvZGV0YWcubGRzLmg6NTojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2NvZGV0YWcubGRzLmgtNi0jZGVmaW5lIElGX01FTV9BTExPQ19QUk9GSUxJTkcoLi4uKSBfX1ZBX0FSR1NfX1xcbi0tXFxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaD0zOD1zdHJ1Y3QgYWxsb2NfdGFnX21vZHVsZV9zZWN0aW9uIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmgtNDctXFxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaDo0ODojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcXG5pbmNsdWRlL2xpbnV4L2FsbG9jX3RhZy5oLTQ5LVxcbi0tXFxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaD01Nz1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2NvZGV0YWdfZW1wdHkodW5pb24gY29kZXRhZ19yZWYgKnJlZilcXG4tLVxcbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmgtNjItXFxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaDo2MzojZWxzZSAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xcbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmgtNjQtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2FsbG9jX3RhZy5oPTY3PXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY29kZXRhZ19lbXB0eSh1bmlvbiBjb2RldGFnX3JlZiAqcmVmKVxcbi0tXFxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaC03Mi1cXG5pbmNsdWRlL2xpbnV4L2FsbG9jX3RhZy5oOjczOiNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xcbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmgtNzQtXFxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaDo3NTojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG5pbmNsdWRlL2xpbnV4L2FsbG9jX3RhZy5oLTc2LVxcbi0tXFxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaD05Nz1ERUNMQVJFX1BFUl9DUFUoc3RydWN0IGFsbG9jX3RhZ19jb3VudGVycywgX3NoYXJlZF9hbGxvY190YWcpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaC0xMjctXFxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaDoxMjg6REVDTEFSRV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcXG5pbmNsdWRlL2xpbnV4L2FsbG9jX3RhZy5oLTEyOS1cXHRcXHRcXHRtZW1fYWxsb2NfcHJvZmlsaW5nX2tleSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2FsbG9jX3RhZy5oPTEzMT1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKHZvaWQpXFxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaC0xMzIte1xcbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmg6MTMzOlxcdHJldHVybiBzdGF0aWNfYnJhbmNoX21heWJlKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcXG5pbmNsdWRlL2xpbnV4L2FsbG9jX3RhZy5oLTEzNC1cXHRcXHRcXHRcXHQgICBcXHUwMDI2bWVtX2FsbG9jX3Byb2ZpbGluZ19rZXkpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaD0xMzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGFsbG9jX3RhZ19yZWFkKHN0cnVjdCBhbGxvY190YWcgKnRhZylcXG4tLVxcbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmgtMTUxLVxcbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmg6MTUyOiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xcbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmgtMTUzLXN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY190YWdfYWRkX2NoZWNrKHVuaW9uIGNvZGV0YWdfcmVmICpyZWYsIHN0cnVjdCBhbGxvY190YWcgKnRhZylcXG4tLVxcbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmg9MjMxPXN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvY190YWdfaXNfaW5hY2N1cmF0ZShzdHJ1Y3QgYWxsb2NfdGFnICp0YWcpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2FsbG9jX3RhZy5oLTIzNy1cXG5pbmNsdWRlL2xpbnV4L2FsbG9jX3RhZy5oOjIzODojZWxzZSAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xcbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmgtMjM5LVxcbi0tXFxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaD0yNDY9c3RhdGljIGlubGluZSBib29sIGFsbG9jX3RhZ19pc19pbmFjY3VyYXRlKHN0cnVjdCBhbGxvY190YWcgKnRhZykgeyByZXR1cm4gZmFsc2U7IH1cXG4tLVxcbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmgtMjQ4LVxcbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmg6MjQ5OiNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xcbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmgtMjUwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTQ0Nz1zdHJ1Y3Qgc2xhYm9ial9leHQge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTQ1MC0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNDUxOiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE0NTItXFx0dW5pb24gY29kZXRhZ19yZWYgcmVmO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wZ2FsbG9jX3RhZy5oLTktXFxuaW5jbHVkZS9saW51eC9wZ2FsbG9jX3RhZy5oOjEwOiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xcbmluY2x1ZGUvbGludXgvcGdhbGxvY190YWcuaC0xMS1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGdhbGxvY190YWcuaD0yMDI9dm9pZCBfX2luaXQgYWxsb2NfdGFnX3NlY19pbml0KHZvaWQpO1xcbmluY2x1ZGUvbGludXgvcGdhbGxvY190YWcuaC0yMDMtXFxuaW5jbHVkZS9saW51eC9wZ2FsbG9jX3RhZy5oOjIwNDojZWxzZSAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xcbmluY2x1ZGUvbGludXgvcGdhbGxvY190YWcuaC0yMDUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BnYWxsb2NfdGFnLmg9MjEwPXN0YXRpYyBpbmxpbmUgc3RydWN0IGFsbG9jX3RhZyAqcGdhbGxvY190YWdfZ2V0KHN0cnVjdCBwYWdlICpwYWdlKSB7IHJldHVybiBOVUxMOyB9XFxuaW5jbHVkZS9saW51eC9wZ2FsbG9jX3RhZy5oLTIxMS1cXG5pbmNsdWRlL2xpbnV4L3BnYWxsb2NfdGFnLmg6MjEyOiNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xcbmluY2x1ZGUvbGludXgvcGdhbGxvY190YWcuaC0yMTMtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaD04Nj1zdHJ1Y3Qgcmhhc2h0YWJsZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaC05Ni1cXHRhdG9taWNfdFxcdFxcdFxcdG5lbGVtcztcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaDo5NzojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaC05OC1cXHRzdHJ1Y3QgYWxsb2NfdGFnXFx0XFx0KmFsbG9jX3RhZztcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaD04MjQ9c3RydWN0IHRhc2tfc3RydWN0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaC04NDgtXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjg0OTojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtODUwLVxcdHN0cnVjdCBhbGxvY190YWdcXHRcXHQqYWxsb2NfdGFnO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oPTIzMzk9ZXh0ZXJuIHZvaWQgc2NoZWRfc2V0X3N0b3BfdGFzayhpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnN0b3ApO1xcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0yMzQwLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoyMzQxOiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0yMzQyLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IGFsbG9jX3RhZyAqYWxsb2NfdGFnX3NhdmUoc3RydWN0IGFsbG9jX3RhZyAqdGFnKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oPTIzNDg9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGFsbG9jX3RhZ19yZXN0b3JlKHN0cnVjdCBhbGxvY190YWcgKnRhZywgc3RydWN0IGFsbG9jX3RhZyAqb2xkKVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0yMzQ5LXtcXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MjM1MDojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMjM1MS1cXHRXQVJOKGN1cnJlbnQtXFx1MDAzZWFsbG9jX3RhZyAhPSB0YWcsIFxcXCJjdXJyZW50LVxcdTAwM2VhbGxvY190YWcgd2FzIGNoYW5nZWQ6XFxcXG5cXFwiKTtcXG4tLVxcbm1tL01ha2VmaWxlPTE0OT1vYmotJChDT05GSUdfTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUKSArPSB0ZXN0cy9sYXp5X21tdV9tb2RlX2t1bml0Lm9cXG5tbS9NYWtlZmlsZToxNTA6b2JqLSQoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcpICs9IGFsbG9jX3RhZy5vXFxuLS1cXG5tbS9hbGxvY190YWcuYy0yNC1cXG5tbS9hbGxvY190YWcuYzoyNTojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXFxubW0vYWxsb2NfdGFnLmMtMjYtc3RhdGljIGJvb2wgbWVtX3Byb2ZpbGluZ19zdXBwb3J0ID0gdHJ1ZTtcXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTM1PUVYUE9SVF9TWU1CT0woX3NoYXJlZF9hbGxvY190YWcpO1xcbi0tXFxubW0vYWxsb2NfdGFnLmMtMzctXFxubW0vYWxsb2NfdGFnLmM6Mzg6REVGSU5FX1NUQVRJQ19LRVlfTUFZQkUoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxULFxcbm1tL2FsbG9jX3RhZy5jLTM5LVxcdFxcdFxcdG1lbV9hbGxvY19wcm9maWxpbmdfa2V5KTtcXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTc2Mj1zdGF0aWMgX19pbml0IGJvb2wgbmVlZF9wYWdlX2FsbG9jX3RhZ2dpbmcodm9pZClcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTc2OS1cXG5tbS9hbGxvY190YWcuYzo3NzA6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXFxubW0vYWxsb2NfdGFnLmMtNzcxLS8qXFxuLS1cXG5tbS9hbGxvY190YWcuYz04NDg9c3RhdGljIHZvaWQgX19pbml0IGNsZWFyX2Vhcmx5X2FsbG9jX3Bmbl90YWdfcmVmcyh2b2lkKVxcbi0tXFxubW0vYWxsb2NfdGFnLmMtOTAxLX1cXG5tbS9hbGxvY190YWcuYzo5MDI6I2Vsc2UgLyogIUNPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXFxubW0vYWxsb2NfdGFnLmMtOTAzLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgY2xlYXJfZWFybHlfYWxsb2NfcGZuX3RhZ19yZWZzKHZvaWQpIHt9XFxubW0vYWxsb2NfdGFnLmM6OTA0OiNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xcbm1tL2FsbG9jX3RhZy5jLTkwNS1cXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTkyMz1zdGF0aWMgaW50IHByb2NfbWVtX3Byb2ZpbGluZ19oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxuLS1cXG5tbS9hbGxvY190YWcuYy05MzQtXFxubW0vYWxsb2NfdGFnLmM6OTM1OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xcbm1tL2FsbG9jX3RhZy5jLTkzNi1cXHRcXHQvKiBVc2VyIGNhbid0IHRvZ2dsZSBwcm9maWxpbmcgd2hpbGUgZGVidWdnaW5nICovXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MTIxOT1zdGF0aWMgdm9pZCBjbGVhcl9oaWdocGFnZXNfa2FzYW5fdGFnZ2VkKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMTIzMy1cXG5tbS9wYWdlX2FsbG9jLmM6MTIzNDojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG5tbS9wYWdlX2FsbG9jLmMtMTIzNS1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0xMzAwPXN0YXRpYyBpbmxpbmUgdm9pZCBwZ2FsbG9jX3RhZ19zdWJfcGFnZXMoc3RydWN0IGFsbG9jX3RhZyAqdGFnLCB1bnNpZ25lZCBpbnQgbnIpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMTMwNS1cXG5tbS9wYWdlX2FsbG9jLmM6MTMwNjojZWxzZSAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xcbm1tL3BhZ2VfYWxsb2MuYy0xMzA3LVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTEzMTE9c3RhdGljIGlubGluZSB2b2lkIHBnYWxsb2NfdGFnX3N1Yl9wYWdlcyhzdHJ1Y3QgYWxsb2NfdGFnICp0YWcsIHVuc2lnbmVkIGludCBucikge31cXG5tbS9wYWdlX2FsbG9jLmMtMTMxMi1cXG5tbS9wYWdlX2FsbG9jLmM6MTMxMzojZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcgKi9cXG5tbS9wYWdlX2FsbG9jLmMtMTMxNC1cXG4tLVxcbm1tL3BhZ2VfZXh0LmM9ODA9c3RhdGljIHN0cnVjdCBwYWdlX2V4dF9vcGVyYXRpb25zICpwYWdlX2V4dF9vcHNbXSBfX2luaXRkYXRhID0ge1xcbi0tXFxubW0vcGFnZV9leHQuYy04Ni0jZW5kaWZcXG5tbS9wYWdlX2V4dC5jOjg3OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xcbm1tL3BhZ2VfZXh0LmMtODgtXFx0XFx1MDAyNnBhZ2VfYWxsb2NfdGFnZ2luZ19vcHMsXFxuLS1cXG5tbS9wYWdlX2V4dC5jPTEwMD1zdGF0aWMgdW5zaWduZWQgbG9uZyB0b3RhbF91c2FnZTtcXG5tbS9wYWdlX2V4dC5jLTEwMS1cXG5tbS9wYWdlX2V4dC5jOjEwMjojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcXG5tbS9wYWdlX2V4dC5jLTEwMy0vKlxcbi0tXFxubW0vcGVyY3B1LWludGVybmFsLmg9MzU9c3RydWN0IHBjcHVvYmpfZXh0IHtcXG4tLVxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTM4LSNlbmRpZlxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oOjM5OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xcbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTQwLVxcdHVuaW9uIGNvZGV0YWdfcmVmXFx0dGFnO1xcbi0tXFxubW0vcGVyY3B1LWludGVybmFsLmgtNDMtXFxubW0vcGVyY3B1LWludGVybmFsLmg6NDQ6I2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSB8fCBkZWZpbmVkKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HKVxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTQ1LSNkZWZpbmUgTkVFRF9QQ1BVT0JKX0VYVFxcbi0tXFxubW0vcGVyY3B1LWludGVybmFsLmg9OTA9c3RhdGljIGlubGluZSBib29sIG5lZWRfcGNwdW9ial9leHQodm9pZClcXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC05MS17XFxubW0vcGVyY3B1LWludGVybmFsLmg6OTI6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcpKVxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTkzLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vcGVyY3B1LmM9MTY5MD1zdGF0aWMgdm9pZCBwY3B1X21lbWNnX2ZyZWVfaG9vayhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBvZmYsIHNpemVfdCBzaXplKVxcbi0tXFxubW0vcGVyY3B1LmMtMTY5NC1cXG5tbS9wZXJjcHUuYzoxNjk1OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xcbm1tL3BlcmNwdS5jLTE2OTYtc3RhdGljIHZvaWQgcGNwdV9hbGxvY190YWdfYWxsb2NfaG9vayhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBvZmYsXFxuLS1cXG5tbS9zaG93X21lbS5jPTQwOD12b2lkIF9fc2hvd19tZW0odW5zaWduZWQgaW50IGZpbHRlciwgY29uc3Qgbm9kZW1hc2tfdCAqbm9kZW1hc2ssXFxuLS1cXG5tbS9zaG93X21lbS5jLTQzNC0jZW5kaWZcXG5tbS9zaG93X21lbS5jOjQzNTojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG5tbS9zaG93X21lbS5jLTQzNi1cXHRzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1lbV9hbGxvY19wcm9maWxpbmdfc3BpbmxvY2spO1xcbi0tXFxubW0vc2x1Yi5jPTIwNDY9c3RhdGljIGlubGluZSB2b2lkIGRlY19zbGFic19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBpbnQgbm9kZSxcXG4tLVxcbm1tL3NsdWIuYy0yMDYzLVxcbm1tL3NsdWIuYzoyMDY0OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xcbm1tL3NsdWIuYy0yMDY1LVxcbi0tXFxubW0vc2x1Yi5jPTIwOTc9c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyh1bnNpZ25lZCBsb25nIG9ial9leHRzLFxcbi0tXFxubW0vc2x1Yi5jLTIxMTItXFxubW0vc2x1Yi5jOjIxMTM6I2Vsc2UgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cXG5tbS9zbHViLmMtMjExNC1cXG4tLVxcbm1tL3NsdWIuYz0yMTE3PXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcXG4tLVxcbm1tL3NsdWIuYy0yMTE5LVxcbm1tL3NsdWIuYzoyMTIwOiNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xcbm1tL3NsdWIuYy0yMTIxLVxcbi0tXFxubW0vc2x1Yi5jPTIzNDI9c3RhdGljIGlubGluZSB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtMjM0OC1cXG5tbS9zbHViLmM6MjM0OTojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG5tbS9zbHViLmMtMjM1MC1cXG4tLVxcbm1tL3NsdWIuYz0yNDM3PWFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcXG4tLVxcbm1tL3NsdWIuYy0yNDQzLVxcbm1tL3NsdWIuYzoyNDQ0OiNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXFxubW0vc2x1Yi5jLTI0NDUtXFxuLS1cXG5tbS9zbHViLmM9MjQ1Mz1hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXFxuLS1cXG5tbS9zbHViLmMtMjQ1Ny1cXG5tbS9zbHViLmM6MjQ1ODojZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcgKi9cXG5tbS9zbHViLmMtMjQ1OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDM6Mjk6NDYuMzU0NTUyOTY1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1NDE1Njg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhZ2UgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHNvbWUgcHJldHR5IGZ1bmRhbWVudGFsIHN0dWZmIOKAkyBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgYG1tL2FsbG9jX3RhZy5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoeSB0aGVzZSB0d28gZmlsZXM/IFRoZSBtZW50aW9uIG9mIGBBTExPQ19OT19DT0RFVEFHYCBpbiBgbW0vYWxsb2NfdGFnLmNgIGlzIHRoZSBrZXkuIFRoYXTigJlzIGNvbmRpdGlvbmFsIG9uIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AuIFNvLCBpdCdzIHByZXR0eSBjbGVhcjogd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBwcm9maWxpbmcgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkLlxuXG5BbmQgdGhlIGNoYW5nZXMgdG8gYG1tL3BhZ2VfYWxsb2MuY2AgYXJlIHNpZ25pZmljYW50LiBJdCdzIHRoZSBoZWFydCBvZiB0aGUga2VybmVsJ3MgcGFnZSBhbGxvY2F0aW9uIGxvZ2ljLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBzZXZlcmFsIGZ1bmN0aW9ucyB3aXRoIHRoZSBgbm9wcm9mYCBzdWZmaXg6IGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAsIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgLCBgYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2ZgLCBhbmQgYGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mYC4gUmlnaHQgYXdheSwgdGhlIFwibm9wcm9mXCIgaW5kaWNhdGVzIGl0J3MgcmVsYXRlZCB0byB0aGUgcHJvZmlsaW5nLiBCdXQgdGhlc2UgYXJlIGNvcmUgYWxsb2NhdGlvbiBmdW5jdGlvbnMsIGhlYXZpbHkgdXNlZCwgd2hpY2ggbWVhbnMgZXZlbiBhIHNtYWxsIGJ1ZyBoZXJlIHdvdWxkIGhhdmUgYSBodWdlIGltcGFjdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGluIHRoaXMgY29udGV4dCwgZXNwZWNpYWxseSBzaW5jZSB0aGV5IGltcGFjdCBhbGxvY2F0aW9uIGxvZ2ljLlxuXG5gYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9ja19ub3Byb2ZgIHN0YW5kcyBvdXQgYSBiaXQuIEl0IGlzIHVzZWQgZm9yIHJlZW50cmFudCBhbGxvY2F0aW9uLCB3aGljaCBjYW4gYmUgdHJpY2t5LiBJJ20gZ29pbmcgdG8gdHJhY2sgZG93biB0aGUgY2FsbGVycyBvZiB0aGF0IGZ1bmN0aW9uIGFuZCByZXZpZXcgdGhlbSB2ZXJ5IGNhcmVmdWxseSB0byBzZWUgaG93IHRoZSBjaGFuZ2VzIGludGVyYWN0IHdpdGhpbiB0aG9zZSBvcHBvcnR1bmlzdGljIGNvbnRleHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDA1MywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMzoyOTo1MC45MDg3MTI3NDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0Njk0Mzc5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19mcm96ZW5fcGFnZXNfbm9sb2NrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfYWxsb2MuYz03OTYyPXN0YXRpYyBib29sIF9fZnJlZV91bmFjY2VwdGVkKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTc5NjktXFxubW0vcGFnZV9hbGxvYy5jOjc5NzA6c3RydWN0IHBhZ2UgKmFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mKGdmcF90IGdmcF9mbGFncywgaW50IG5pZCwgdW5zaWduZWQgaW50IG9yZGVyKVxcbm1tL3BhZ2VfYWxsb2MuYy03OTcxLXtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz03OTkzPXN0cnVjdCBwYWdlICphbGxvY19wYWdlc19ub2xvY2tfbm9wcm9mKGdmcF90IGdmcF9mbGFncywgaW50IG5pZCwgdW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTc5OTYtXFxubW0vcGFnZV9hbGxvYy5jOjc5OTc6XFx0cGFnZSA9IGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mKGdmcF9mbGFncywgbmlkLCBvcmRlcik7XFxubW0vcGFnZV9hbGxvYy5jLTc5OTgtXFx0aWYgKHBhZ2UpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmg9MjQ1PXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmFsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmgtMjU0LVxcbm1tL3BhZ2VfYWxsb2MuaDoyNTU6c3RydWN0IHBhZ2UgKmFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mKGdmcF90IGdmcF9mbGFncywgaW50IG5pZCwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5tbS9wYWdlX2FsbG9jLmg6MjU2OiNkZWZpbmUgYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9jayguLi4pIFxcXFxcXG5tbS9wYWdlX2FsbG9jLmg6MjU3OlxcdGFsbG9jX2hvb2tzKGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5tbS9wYWdlX2FsbG9jLmgtMjU4LXZvaWQgZnJlZV9mcm96ZW5fcGFnZXNfbm9sb2NrKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbi0tXFxubW0vc2x1Yi5jPTMyODE9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYiAqYWxsb2Nfc2xhYl9wYWdlKGdmcF90IGZsYWdzLCBpbnQgbm9kZSxcXG4tLVxcbm1tL3NsdWIuYy0zMjg5LVxcdGlmICh1bmxpa2VseSghYWxsb3dfc3BpbikpXFxubW0vc2x1Yi5jOjMyOTA6XFx0XFx0cGFnZSA9IGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2soMC8qIF9fR0ZQX0NPTVAgaXMgaW1wbGllZCAqLyxcXG5tbS9zbHViLmMtMzI5MS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIG5vZGUsIG9yZGVyKTtcXG4tLVxcbm1tL3NsdWIuYz01MzY5PXN0YXRpYyB2b2lkICpfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGdmcF9mbGFncyxcXG4tLVxcbm1tL3NsdWIuYy01Mzg2LVxcdCAqIFNlZSB0aGUgY29tbWVudCBmb3IgdGhlIHNhbWUgY2hlY2sgaW5cXG5tbS9zbHViLmM6NTM4NzpcXHQgKiBhbGxvY19mcm96ZW5fcGFnZXNfbm9sb2NrX25vcHJvZigpXFxubW0vc2x1Yi5jLTUzODgtXFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAzOjI5OjUzLjE1NTY2NzAwNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzOTcwNTk4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGb2N1czogS2VybmVsIE1lbW9yeSBBbGxvY2F0aW9uIFBhdGNoZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgc3BpZGVyIHNlbnNlcyBhcmUgdGluZ2xpbmcg4oCTIHRoaXMgbmVlZHMgZnV6emluZywgZGVmaW5pdGVseS4gSSBzZWUgdGhhdCBgYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9ja2AgaXMgYmVpbmcgdXNlZCB3aXRoaW4gYHNsdWIuY2AgZm9yIGJvdGggYGFsbG9jX3NsYWJfcGFnZWAgYW5kIGBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAsIGFuZCB0aGUgcGF0Y2ggYWxzbyBkaXZlcyBpbnRvIHRoZSBjb3JlIHBhZ2UgYWxsb2NhdGlvbiBmdW5jdGlvbnM6IGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAgYW5kIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgLlxuXG5Ob3csIHRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBhdm9pZCBsaXN0aW5nICpnZW5lcmljKiBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCB0ZXN0IGRpc3RyaWJ1dGlvbiBza2V3LiAgU28sIHdoaWxlIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmAgYW5kIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgIGFyZSAqY3JpdGljYWwqLCB0aGV5J3JlIHRvbyBjb21tb24gdG8gYmUgcHJpbWFyeSBmdXp6aW5nIHRhcmdldHMgaGVyZS4gSSBuZWVkIHRvIGdldCBtb3JlIHRhcmdldGVkLiAgSSBzZWUgdGhhdCBgYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2ZgIGlzIGFsc28gYmVpbmcgdG91Y2hlZCwgYnV0IHRoYXQncyBhbHNvIHByZXR0eSBnZW5lcmljLlxuXG5MZXQgbWUgcmV2aWV3IHRoZSBjaGFuZ2VzIGluIGBtbS9wYWdlX2FsbG9jLmNgIGFnYWluIOKAkyBpdCdzIGNydWNpYWwgSSBkb24ndCBtaXNzIGFueXRoaW5nLiBPa2F5LCBzbyBpbiBhZGRpdGlvbiB0byB0aGUgY29yZSBmdW5jdGlvbnMgbWVudGlvbmVkIHByZXZpb3VzbHk6XG5cbiogICBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYFxuKiAgIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmBcbiogICBgYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2ZgXG4qICAgYGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mYFxuXG5JIHNlZSBgYWxsb2NfdGFnX2FkZF9lYXJseV9wZm5gIGluIGBtbS9hbGxvY190YWcuY2AgaXMgYmVpbmcgbW9kaWZpZWQuIGBwb3N0X2FsbG9jX2hvb2tgLCBgcHJlcF9uZXdfcGFnZWAsIGFuZCBzZXZlcmFsIGBnZnBfdG9fYWxsb2NfZmxhZ3NgIGZ1bmN0aW9ucyBhcmUgYmVpbmcgY2hhbmdlZCwgYW5kIHNvbWUgbmV3IGZ1bmN0aW9ucyBgYWxsb2Nfb3JkZXJfYWxsb3dlZGAgYW5kIGBhbGxvY190cnlsb2NrX2FsbG93ZWRgLlxuXG5HaXZlbiB0aGUgbmVlZCBmb3IgZm9jdXNlZCBmdXp6aW5nIGFuZCB0byBzdGF5IHdpdGhpbiB0aGUgc3Bpcml0IG9mIHRoZSBpbnN0cnVjdGlvbnMsIEkgdGhpbmsgYSBwcmltZSBjYW5kaWRhdGUgZW1lcmdlczogYGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mYC4gIEl0J3MgYSBzcGVjaWZpYyBBUEkgdGhhdCdzIG5vdyBsZXZlcmFnaW5nIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgIHdpdGggYEFMTE9DX05PTE9DS2AsIGFuZCB0aGF0J3MgYW4gaW50ZXJlc3RpbmcgaW50ZXJzZWN0aW9uLiAgUGx1cywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG5ldyBjYWxscyB0aGF0IGhhdmUgdG8gYmUgcHJvdGVjdGVkIGZyb20gcmVlbnRyYW50IGFsbG9jYXRpb24gYnkgdGhpcyBwYXRoLiBBbmQsIGBhbGxvY190YWdfYWRkX2Vhcmx5X3BmbmAgaXMgYSBzdHJvbmcgc2Vjb25kLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYm90aCBvZiB0aG9zZSBhbmQgZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTI3MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMzozMDowMS41NTI3MzEzMTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwMjkxMzY0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY190YWdfYWRkX2Vhcmx5X3BmblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2FsbG9jX3RhZy5oPTE2Mj1zdGF0aWMgaW5saW5lIHZvaWQgYWxsb2NfdGFnX3N1Yl9jaGVjayh1bmlvbiBjb2RldGFnX3JlZiAqcmVmKVxcbi0tXFxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaC0xNjUtfVxcbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmg6MTY2OnZvaWQgYWxsb2NfdGFnX2FkZF9lYXJseV9wZm4odW5zaWduZWQgbG9uZyBwZm4sIGdmcF90IGdmcF9mbGFncyk7XFxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaC0xNjctI2Vsc2VcXG4tLVxcbmluY2x1ZGUvbGludXgvYWxsb2NfdGFnLmg9MTY5PXN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY190YWdfc3ViX2NoZWNrKHVuaW9uIGNvZGV0YWdfcmVmICpyZWYpIHt9XFxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaDoxNzA6c3RhdGljIGlubGluZSB2b2lkIGFsbG9jX3RhZ19hZGRfZWFybHlfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBnZnBfdCBnZnBfZmxhZ3MpIHt9XFxuaW5jbHVkZS9saW51eC9hbGxvY190YWcuaC0xNzEtI2VuZGlmXFxuLS1cXG5tbS9hbGxvY190YWcuYz03ODg9c3RhdGljIHN0cnVjdCBwZm5fcG9vbCAqY3VycmVudF9wZm5fcG9vbCBfX2luaXRkYXRhO1xcbm1tL2FsbG9jX3RhZy5jLTc4OS1cXG5tbS9hbGxvY190YWcuYzo3OTA6c3RhdGljIHZvaWQgX19pbml0IF9fYWxsb2NfdGFnX2FkZF9lYXJseV9wZm4odW5zaWduZWQgbG9uZyBwZm4pXFxubW0vYWxsb2NfdGFnLmMtNzkxLXtcXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTgyNj10eXBlZGVmIHZvaWQgYWxsb2NfdGFnX2FkZF9mdW5jKHVuc2lnbmVkIGxvbmcgcGZuKTtcXG5tbS9hbGxvY190YWcuYzo4Mjc6c3RhdGljIGFsbG9jX3RhZ19hZGRfZnVuYyBfX3JjdSAqYWxsb2NfdGFnX2FkZF9lYXJseV9wZm5fcHRyIF9fcmVmZGF0YSA9XFxubW0vYWxsb2NfdGFnLmM6ODI4OlxcdFJDVV9JTklUSUFMSVpFUihfX2FsbG9jX3RhZ19hZGRfZWFybHlfcGZuKTtcXG5tbS9hbGxvY190YWcuYy04MjktXFxubW0vYWxsb2NfdGFnLmM6ODMwOnZvaWQgYWxsb2NfdGFnX2FkZF9lYXJseV9wZm4odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcXG5tbS9hbGxvY190YWcuYy04MzEte1xcbi0tXFxubW0vYWxsb2NfdGFnLmMtODQxLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5tbS9hbGxvY190YWcuYzo4NDI6XFx0YWxsb2NfdGFnX2FkZCA9IHJjdV9kZXJlZmVyZW5jZShhbGxvY190YWdfYWRkX2Vhcmx5X3Bmbl9wdHIpO1xcbm1tL2FsbG9jX3RhZy5jLTg0My1cXHRpZiAoYWxsb2NfdGFnX2FkZClcXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTg0OD1zdGF0aWMgdm9pZCBfX2luaXQgY2xlYXJfZWFybHlfYWxsb2NfcGZuX3RhZ19yZWZzKHZvaWQpXFxuLS1cXG5tbS9hbGxvY190YWcuYy04NTYtXFxubW0vYWxsb2NfdGFnLmM6ODU3OlxcdHJjdV9hc3NpZ25fcG9pbnRlcihhbGxvY190YWdfYWRkX2Vhcmx5X3Bmbl9wdHIsIE5VTEwpO1xcbm1tL2FsbG9jX3RhZy5jOjg1ODpcXHQvKiBNYWtlIHN1cmUgd2UgYXJlIG5vdCByYWNpbmcgd2l0aCBfX2FsbG9jX3RhZ19hZGRfZWFybHlfcGZuKCkgKi9cXG5tbS9hbGxvY190YWcuYy04NTktXFx0c3luY2hyb25pemVfcmN1KCk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MTI1MT12b2lkIF9fcGdhbGxvY190YWdfYWRkKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMTI2NS1cXHRcXHQgKi9cXG5tbS9wYWdlX2FsbG9jLmM6MTI2NjpcXHRcXHRhbGxvY190YWdfYWRkX2Vhcmx5X3BmbihwYWdlX3RvX3BmbihwYWdlKSwgYWxsb2NfZmxhZ3MpO1xcbm1tL3BhZ2VfYWxsb2MuYy0xMjY3LVxcdFxcdGlmICh0YXNrLVxcdTAwM2VhbGxvY190YWcpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmgtNTMtICogU2tpcCBlYXJseSBQRk4gcmVjb3JkaW5nIGZvciBhIHBhZ2UgYWxsb2NhdGlvbi4gIFVzZWQgYnlcXG5tbS9wYWdlX2FsbG9jLmg6NTQ6ICogX19hbGxvY190YWdfYWRkX2Vhcmx5X3BmbigpIHRvIGF2b2lkIHJlY3Vyc2lvbiB3aGVuIGFsbG9jYXRpbmcgcGFnZXMgZm9yIHRoZVxcbm1tL3BhZ2VfYWxsb2MuaC01NS0gKiBlYXJseSBQRk4gdHJhY2tpbmcgbGlzdCBpdHNlbGYuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAzOjMwOjAzLjc1NTY1MDE4N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTcyMDAzNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29kZSBzbmlwcGV0czpcblxuKipFYXJseSBJbml0aWFsaXphdGlvbiB2cy4gRnV6emluZyBUYXJnZXQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFNlZWluZyBgYWxsb2NfdGFnX2FkZF9lYXJseV9wZm5gIHRhZ2dlZCBhcyBhbiBgX19pbml0YCBvciBlYXJseSBib290IGZ1bmN0aW9uIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQncyBub3QgZ29pbmcgdG8gYmUgYSBmcnVpdGZ1bCB0YXJnZXQgZm9yIGZ1enppbmcuIEl0J3MgZXNzZW50aWFsbHkgb2ZmLWxpbWl0cyBkdXJpbmcgdGhlIG5vcm1hbCBydW50aW1lIGFuZCBvcGVyYXRpb24uIE15IGludGVyZXN0IGxpZXMgZWxzZXdoZXJlLlxuXG5UaGUgbmV4dCBwb2ludCB6ZXJvZXMgaW4gb24gYGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mYC4gTm93LCB0aGF0J3MgbW9yZSBpbnRlcmVzdGluZy4gS25vd2luZyBpdCdzIHV0aWxpemVkIHdpdGhpbiBgc2x1Yi5jYCBmb3IgYm90aCBgYWxsb2Nfc2xhYl9wYWdlYCAqYW5kKiBgX19rbWFsbG9jX25vbG9ja19ub3Byb2ZgIHN1Z2dlc3RzIGl0J3MgYSBjcml0aWNhbCBjb21wb25lbnQgb2YgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIG1hY2hpbmVyeS4gVGhpcyBtZWFucyBpdCdzIHdvcnRoIHRha2luZyBhIGNsb3NlciBsb29rIGF0IGBfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZmAgbm93LlxuXG5UaGUgbWFpbiBxdWVzdGlvbiBub3cgYmVjb21lczogaXMgYF9fa21hbGxvY19ub2xvY2tfbm9wcm9mYCBhY3R1YWxseSByZWFjaGFibGUgZHVyaW5nIHRoZSBmdXp6aW5nIHN0YWdlPyBJZiBpdCdzIGEgcGF0aCB0aGF0IGNhbiBiZSBleGVyY2lzZWQgZHluYW1pY2FsbHksIHRoZW4gd2UgaGF2ZSBhIHBvdGVudGlhbCBlbnRyeSBwb2ludCBmb3IgdW5jb3ZlcmluZyBtZW1vcnkgYWxsb2NhdGlvbiBmbGF3cy4gVGhpcyB3b3VsZCByZXF1aXJlIHNvbWUgaW52ZXN0aWdhdGlvbiB0byBkZXRlcm1pbmUgaXRzIGNhbGxpbmcgY29udGV4dCBhbmQgdHJpZ2dlcmluZyBjb25kaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzQ1NCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAzOjMwOjA3LjI3Mjg1MzYyNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4MjAwNTc0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9NTM2Nz1FWFBPUlRfU1lNQk9MKF9fa21hbGxvY19ub3Byb2YpO1xcbm1tL3NsdWIuYy01MzY4LVxcbm1tL3NsdWIuYzo1MzY5OnN0YXRpYyB2b2lkICpfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGdmcF9mbGFncyxcXG5tbS9zbHViLmMtNTM3MC1cXHRcXHRcXHRcXHQgICAgIGludCBub2RlLCBjb25zdCBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0ICphYylcXG4tLVxcbm1tL3NsdWIuYz01NDU0PXZvaWQgKl9rbWFsbG9jX25vbG9ja19ub3Byb2YoREVDTF9UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBub2RlKVxcbi0tXFxubW0vc2x1Yi5jLTU0NjEtXFxubW0vc2x1Yi5jOjU0NjI6XFx0cmV0dXJuIF9fa21hbGxvY19ub2xvY2tfbm9wcm9mKFBBU1NfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSxcXG5tbS9zbHViLmMtNTQ2My1cXHRcXHRcXHRcXHQgICAgICAgZ2ZwX2ZsYWdzLCBub2RlLCBcXHUwMDI2YWMpO1xcbi0tXFxubW0vc2x1Yi5jPTU1MjM9dm9pZCAqX19rbWFsbG9jX2ZsYWdzX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTU1MzUtXFx0fSBlbHNlIHtcXG5tbS9zbHViLmM6NTUzNjpcXHRcXHRyZXR1cm4gX19rbWFsbG9jX25vbG9ja19ub3Byb2YoUEFTU19UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLFxcbm1tL3NsdWIuYy01NTM3LVxcdFxcdFxcdFxcdFxcdCAgICAgICBmbGFncywgbm9kZSwgXFx1MDAyNmFjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDM6MzA6MDkuMzU0ODY1Mjk2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTQ2MjQ2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQ6XG5cbioqRGlnZ2luZyBpbnRvIEtlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbiB3aXRoIEZsYWdzIGFuZCBQcm9maWxlcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgbGlrZSB3ZSdyZSBsb29raW5nIGF0IGtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHVzaW5nIGBrbWFsbG9jYC4gSSBzZWUgdGhhdCBgX19rbWFsbG9jX2ZsYWdzX25vcHJvZmAgaXMgYSB3cmFwcGVyIGZ1bmN0aW9uIHRoYXQgY2FsbHMgYF9fa21hbGxvY19ub2xvY2tfbm9wcm9mYC4gVGhlIFwibm9wcm9mXCIgc3VmZml4IHByb2JhYmx5IG1lYW5zIGl0J3MgZGVzaWduZWQgdG8gYXZvaWQgY2VydGFpbiBwcm9maWxpbmcgb3ZlcmhlYWQsIHdoaWNoIGlzIGEga2V5IG9wdGltaXphdGlvbiB0ZWNobmlxdWUuXG5cblRoZSBzaWduaWZpY2FudCBwb2ludCBoZXJlIGlzIGxpa2VseSB3aGVyZSBgX19rbWFsbG9jX2ZsYWdzX25vcHJvZmAgaXMgZGVwbG95ZWQuIFRoZSBtZW50aW9uIG9mIEJQRiBhbmQgXCJvdGhlciBzcGVjaWZpYyBjb250ZXh0c1wiIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgaW50ZXJlc3RpbmcuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBgX19rbWFsbG9jX2ZsYWdzX25vcHJvZmAgaXMgY3J1Y2lhbCBpbiBzY2VuYXJpb3Mgd2hlcmUgbG93IG92ZXJoZWFkIGFuZCBsYXRlbmN5IGFyZSBwYXJhbW91bnQuIEJQRiwgaW4gcGFydGljdWxhciwgaXMgbm90b3Jpb3VzIGZvciBpdHMgc3RyaWN0IHBlcmZvcm1hbmNlIHJlcXVpcmVtZW50cywgc2luY2UgQlBGIHByb2dyYW1zIGRpcmVjdGx5IGludGVyYWN0IHdpdGggdGhlIGtlcm5lbCBpbiByZWFsIHRpbWUuIFdlIGFyZSB0YWxraW5nIGFib3V0IGNyaXRpY2FsIHBhdGggY29kZSBoZXJlLlxuXG5JJ2Qgd2FudCB0byBjaGVjayB3aGljaCBmbGFncyBhcmUgYmVpbmcgcGFzc2VkIGludG8gYF9fa21hbGxvY19mbGFnc19ub3Byb2ZgLiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlc2UgYXJlIGBHRlBfTk9XQUlUYCwgYEdGUF9BVE9NSUNgLCBvciBwb3NzaWJseSBhIGN1c3RvbSBzZXQgb2YgZmxhZ3MuIFRoZSBpbnRlbnQgaGVyZSBpcyB0byBtaW5pbWl6ZSBsYXRlbmN5LCBieSBhdm9pZGluZyBibG9ja2luZy4gVGhlICdub2xvY2snIHBhcnQgb2YgdGhlIGNhbGwgc3VnZ2VzdHMgaXQgZG9lcyBub3QgbmVlZCB0byBibG9jayBvbiBsb2Nrcy4gR2l2ZW4gdGhlIGNvbnRleHRzIGxpc3RlZCwgSSdkIGJldCB0aGVzZSBhbGxvY2F0aW9ucyBuZWVkIHRvIGJlIHN1cGVyIGZhc3QgYW5kIHBvdGVudGlhbGx5IG5vbi1ibG9ja2luZyB0byBhdm9pZCBkZWFkbG9ja3MuIFRoaXMgc291bmRzIHJpZ2h0LCBnaXZlbiB0aGUgY29udGV4dCBpbiB3aGljaCBpdCdzIGJlaW5nIHVzZWQuXG5cblVuZGVyc3RhbmRpbmcgdGhlICp3aHkqIGJlaGluZCB0aGlzIHBhcnRpY3VsYXIgY2hvaWNlIG9mIGFsbG9jYXRpb24gcm91dGluZSB3aWxsIGJlIGNyaXRpY2FsLiBGdXJ0aGVyIGludmVzdGlnYXRpb24gaXMgd2FycmFudGVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgd2hlcmUgYF9fa21hbGxvY19mbGFnc19ub3Byb2ZgIGlzIHVzZWQsIGFuZCBpdCdzIHVzZSByZWxhdGl2ZSB0byBvdGhlciBhbGxvY2F0aW9uIHJvdXRpbmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDIwNCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAzOjMwOjEzLjY2OTQ5NDg0NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5NjI0ODQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ttYWxsb2NfZmxhZ3Nfbm9wcm9mXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsYWIuaD0yNj1zdGF0aWMgaW5saW5lIGJvb2wgYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoY29uc3QgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vc2xhYi5oLTMwLVxcbm1tL3NsYWIuaDozMTp2b2lkICpfX2ttYWxsb2NfZmxhZ3Nfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZmxhZ3MsXFxubW0vc2xhYi5oLTMyLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBpbnQgbm9kZSlcXG4tLVxcbm1tL3NsYWIuaD0zNT1zdGF0aWMgX19hbHdheXNfaW5saW5lIF9fYWxsb2Nfc2l6ZSgxKSB2b2lkICpfa21hbGxvY19mbGFnc19ub3Byb2Yoc2l6ZV90IHNpemUsXFxuLS1cXG5tbS9zbGFiLmgtMzcte1xcbm1tL3NsYWIuaDozODpcXHRyZXR1cm4gX19rbWFsbG9jX2ZsYWdzX25vcHJvZihQQVNTX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGZsYWdzLCBhbGxvY19mbGFncywgbm9kZSk7XFxubW0vc2xhYi5oLTM5LX1cXG4tLVxcbm1tL3NsdWIuYz01NTE2PUVYUE9SVF9TWU1CT0woX19rbWFsbG9jX2NhY2hlX25vZGVfbm9wcm9mKTtcXG4tLVxcbm1tL3NsdWIuYy01NTIyLSAqL1xcbm1tL3NsdWIuYzo1NTIzOnZvaWQgKl9fa21hbGxvY19mbGFnc19ub3Byb2YoREVDTF9UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBnZnBfdCBmbGFncyxcXG5tbS9zbHViLmMtNTUyNC1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgaW50IG5vZGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAzOjMwOjE1Ljc2NTc1MTAzNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzY2MDY1MzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYF9rbWFsbG9jX2ZsYWdzX25vcHJvZmAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgcXVlc3Rpb24gaXMsIHdoZXJlIGV4YWN0bHkgaXMgdGhpcyBgX2ttYWxsb2NfZmxhZ3Nfbm9wcm9mYCB0aGluZyBiZWluZyB1c2VkPyBJdCdzIHRoYXQgc3VidGxlIGRldGFpbCB0aGF0IGxpa2VseSB0ZWxscyBhIHN0b3J5IGFib3V0IG9wdGltaXphdGlvbiwgb3IgcGVyaGFwcyBhIG5pY2hlIGNhc2Ugd2l0aGluIHRoZSBrZXJuZWwncyBtZW1vcnkgYWxsb2NhdGlvbiBzeXN0ZW0uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0LiBMZXQgbWUgdGhpbmsuLi4gaXMgaXQgYSBtYWNybz8gQSBmdW5jdGlvbj8gSSdsbCBwcm9iYWJseSBuZWVkIHRvIGNyYWNrIG9wZW4gdGhlIGNvZGUgYW5kIGRvIGEgZmluZC1hbGwsIGJ1dCB0aGF0J3MganVzdCB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgY2FuJ3QganVzdCBsb29rIGZvciBpdDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogaXQncyBiZWluZyB1c2VkIHRoZXJlLiBXaGF0IHNwZWNpZmljIGZsYWdzIG9yIGFsbG9jYXRpb25zIGlzIGl0IGF2b2lkaW5nPyBJcyBpdCByZWxhdGVkIHRvIHBlcmZvcm1hbmNlLCB0byBhIHBhcnRpY3VsYXIgc3Vic3lzdGVtLCBvciBwZXJoYXBzIGEgbG93LWxhdGVuY3kgcmVxdWlyZW1lbnQ/IElzIHRoZXJlIHNvbWUgcGFydCBvZiB0aGUga2VybmVsIHdoaWNoIG5lZWRzIGttYWxsb2Mgd2l0aCBhIGRpZmZlcmVudCBwcm9maWxlPyBIYXMgaXQgYmVlbiByZW1vdmVkIGluIGxhdGVyIGtlcm5lbHM/IFBlcmhhcHMgdGhpcyBpcyBhIGhpc3RvcmljYWwgYXJ0aWZhY3QuIFdhcyBpdCBldmVuIGV2ZXIgdXNlZD8gV2hhdCBkZXBlbmRlbmNpZXMgZG9lcyBpdCBoYXZlPyBJJ2xsIG5lZWQgdG8gbG9vayBhdCBjYWxsIHNpdGVzLCBjcm9zcy1yZWZlcmVuY2VzLCBhbmQgdWx0aW1hdGVseSwgZm9sbG93IHRoZSBleGVjdXRpb24gZmxvdyB0byBmb3JtIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUgaW4gY29udGV4dC4gVGhhdCBpcyB0aGUgb25seSB0aGluZyB0aGF0IG1hdHRlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MDA0LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDM6MzA6MTkuNTMxODE5MzA3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDM3NDE3MjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9rbWFsbG9jX2ZsYWdzX25vcHJvZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbGFiLmg9MjY9c3RhdGljIGlubGluZSBib29sIGFsbG9jX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGNvbnN0IHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcXG4tLVxcbm1tL3NsYWIuaC0zMC1cXG5tbS9zbGFiLmg6MzE6dm9pZCAqX19rbWFsbG9jX2ZsYWdzX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGZsYWdzLFxcbm1tL3NsYWIuaC0zMi1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgaW50IG5vZGUpXFxuLS1cXG5tbS9zbGFiLmgtMzQtXFxubW0vc2xhYi5oOjM1OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19hbGxvY19zaXplKDEpIHZvaWQgKl9rbWFsbG9jX2ZsYWdzX25vcHJvZihzaXplX3Qgc2l6ZSxcXG5tbS9zbGFiLmgtMzYtXFx0XFx0Z2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgaW50IG5vZGUsIGttYWxsb2NfdG9rZW5fdCB0b2tlbilcXG5tbS9zbGFiLmgtMzcte1xcbm1tL3NsYWIuaDozODpcXHRyZXR1cm4gX19rbWFsbG9jX2ZsYWdzX25vcHJvZihQQVNTX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGZsYWdzLCBhbGxvY19mbGFncywgbm9kZSk7XFxubW0vc2xhYi5oLTM5LX1cXG5tbS9zbGFiLmg6NDA6I2RlZmluZSBrbWFsbG9jX2ZsYWdzX25vcHJvZiguLi4pXFx0X2ttYWxsb2NfZmxhZ3Nfbm9wcm9mKF9fVkFfQVJHU19fLCBfX2ttYWxsb2NfdG9rZW4oX19WQV9BUkdTX18pKVxcbm1tL3NsYWIuaC00MS0jZGVmaW5lIGttYWxsb2NfZmxhZ3MoLi4uKVxcdFxcdGFsbG9jX2hvb2tzKGttYWxsb2NfZmxhZ3Nfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG4tLVxcbm1tL3NsdWIuYz01NTE2PUVYUE9SVF9TWU1CT0woX19rbWFsbG9jX2NhY2hlX25vZGVfbm9wcm9mKTtcXG4tLVxcbm1tL3NsdWIuYy01NTIyLSAqL1xcbm1tL3NsdWIuYzo1NTIzOnZvaWQgKl9fa21hbGxvY19mbGFnc19ub3Byb2YoREVDTF9UT0tFTl9QQVJBTVMoc2l6ZSwgdG9rZW4pLCBnZnBfdCBmbGFncyxcXG5tbS9zbHViLmMtNTUyNC1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgaW50IG5vZGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAzOjMwOjIxLjU2OTI0Nzk2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2MjEzOTUyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipUcmFjaW5nIGBrbWFsbG9jX2ZsYWdzYCBVc2FnZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzLCBcIldoZXJlIGV4YWN0bHkgZG9lcyBga21hbGxvY19mbGFnc2AgY29tZSBpbnRvIHBsYXkgaW4gdGhlIGtlcm5lbD9cIiBJdCdzIGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGEgcGFydGljdWxhciBmbGFnIGlzIGltcGxlbWVudGVkLCBob3cgdGhlIGtlcm5lbCBpcyBhY3RpbmcsIGFuZCB3aGV0aGVyIEkgY2FuIHJlbHkgb24gYSBnaXZlbiBhc3N1bXB0aW9uIGFib3V0IGl0LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUsIHRoZSBjb250ZXh0LiBJJ20gdGhpbmtpbmcgSSdsbCBuZWVkIHRvIGRpZyB0aHJvdWdoIHNvbWUgb2YgdGhlIGtlcm5lbCBzb3VyY2UgdG8gc2VlIHdoaWNoIGZ1bmN0aW9ucywgd2hpY2ggc3Vic3lzdGVtcywgZXZlbiB3aGljaCBkcml2ZXJzLCBhcmUgbWFraW5nIHVzZSBvZiB0aGlzLiBJdCdzIGEgZnVuZGFtZW50YWwgcXVlc3Rpb24gLSBJIG5lZWQgdG8ga25vdyB0aGUgbGFuZHNjYXBlIGJlZm9yZSBJIGNhbiBldmFsdWF0ZSBhIHBhcnRpY3VsYXIgdXNlIGNhc2UuIExldCdzIHN0YXJ0IHRoZSBzZWFyY2guLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU3NTUsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMzozMDoyNC4xOTA2NDY3MThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTQ2MDAwNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia21hbGxvY19mbGFnc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYz0xNjg9c3RydWN0IHVzYl9yZXF1ZXN0ICpcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYzoxNjk6Z3NfYWxsb2NfcmVxKHN0cnVjdCB1c2JfZXAgKmVwLCB1bnNpZ25lZCBsZW4sIGdmcF90IGttYWxsb2NfZmxhZ3MpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMtMTcwLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jLTE3Mi1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYzoxNzM6XFx0cmVxID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QoZXAsIGttYWxsb2NfZmxhZ3MpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jLTE3NC1cXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jLTE3Ni1cXHRcXHRyZXEtXFx1MDAzZWxlbmd0aCA9IGxlbjtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYzoxNzc6XFx0XFx0cmVxLVxcdTAwM2VidWYgPSBrbWFsbG9jKGxlbiwga21hbGxvY19mbGFncyk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMtMTc4LVxcdFxcdGlmIChyZXEtXFx1MDAzZWJ1ZiA9PSBOVUxMKSB7XFxuLS1cXG5tbS9zbGFiLmg9MjY9c3RhdGljIGlubGluZSBib29sIGFsbG9jX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGNvbnN0IHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcXG4tLVxcbm1tL3NsYWIuaC0zMC1cXG5tbS9zbGFiLmg6MzE6dm9pZCAqX19rbWFsbG9jX2ZsYWdzX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGZsYWdzLFxcbm1tL3NsYWIuaC0zMi1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgaW50IG5vZGUpXFxuLS1cXG5tbS9zbGFiLmgtMzQtXFxubW0vc2xhYi5oOjM1OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19hbGxvY19zaXplKDEpIHZvaWQgKl9rbWFsbG9jX2ZsYWdzX25vcHJvZihzaXplX3Qgc2l6ZSxcXG5tbS9zbGFiLmgtMzYtXFx0XFx0Z2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgaW50IG5vZGUsIGttYWxsb2NfdG9rZW5fdCB0b2tlbilcXG5tbS9zbGFiLmgtMzcte1xcbm1tL3NsYWIuaDozODpcXHRyZXR1cm4gX19rbWFsbG9jX2ZsYWdzX25vcHJvZihQQVNTX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGZsYWdzLCBhbGxvY19mbGFncywgbm9kZSk7XFxubW0vc2xhYi5oLTM5LX1cXG5tbS9zbGFiLmg6NDA6I2RlZmluZSBrbWFsbG9jX2ZsYWdzX25vcHJvZiguLi4pXFx0X2ttYWxsb2NfZmxhZ3Nfbm9wcm9mKF9fVkFfQVJHU19fLCBfX2ttYWxsb2NfdG9rZW4oX19WQV9BUkdTX18pKVxcbm1tL3NsYWIuaDo0MTojZGVmaW5lIGttYWxsb2NfZmxhZ3MoLi4uKVxcdFxcdGFsbG9jX2hvb2tzKGttYWxsb2NfZmxhZ3Nfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5tbS9zbGFiLmgtNDItXFxuLS1cXG5tbS9zbHViLmM9MjE2Mz1pbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtMjE4MS1cXHQvKiBUaGlzIHdpbGwgdXNlIGttYWxsb2Nfbm9sb2NrKCkgaWYgYWxsb2NfZmxhZ3Mgc2F5IHNvICovXFxubW0vc2x1Yi5jOjIxODI6XFx0dmVjID0ga21hbGxvY19mbGFncyhzeiwgZ2ZwIHwgX19HRlBfWkVSTywgYWxsb2NfZmxhZ3MsIHNsYWJfbmlkKHNsYWIpKTtcXG5tbS9zbHViLmMtMjE4My1cXG4tLVxcbm1tL3NsdWIuYz0yNzY1PXN0YXRpYyBzdHJ1Y3Qgc2xhYl9zaGVhZiAqX19hbGxvY19lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vc2x1Yi5jLTI3NzktXFx0c2hlYWZfc2l6ZSA9IHN0cnVjdF9zaXplKHNoZWFmLCBvYmplY3RzLCBjYXBhY2l0eSk7XFxubW0vc2x1Yi5jOjI3ODA6XFx0c2hlYWYgPSBrbWFsbG9jX2ZsYWdzKHNoZWFmX3NpemUsIGdmcCB8IF9fR0ZQX1pFUk8sIGFsbG9jX2ZsYWdzLCBOVU1BX05PX05PREUpO1xcbm1tL3NsdWIuYy0yNzgxLVxcbi0tXFxubW0vc2x1Yi5jPTU1MTY9RVhQT1JUX1NZTUJPTChfX2ttYWxsb2NfY2FjaGVfbm9kZV9ub3Byb2YpO1xcbi0tXFxubW0vc2x1Yi5jLTU1MjItICovXFxubW0vc2x1Yi5jOjU1MjM6dm9pZCAqX19rbWFsbG9jX2ZsYWdzX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGZsYWdzLFxcbm1tL3NsdWIuYy01NTI0LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBpbnQgbm9kZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDM6MzA6MjYuMjA1MjU3ODUxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwOTk4MzI4NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gTWVtb3J5IEFsbG9jYXRpb24gRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIEkgc2VlIHRoYXQgYGttYWxsb2NfZmxhZ3NgIGlzIHV0aWxpemVkIHdpdGhpbiBgbW0vc2x1Yi5jYCBzcGVjaWZpY2FsbHkgYnkgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGFuZCBgX19hbGxvY19lbXB0eV9zaGVhZmAuIFRoZSBmb3JtZXIsIGBhbGxvY19zbGFiX29ial9leHRzYCwgZGVhbHMgd2l0aCBhbGxvY2F0aW5nIG9iamVjdCBleHRlbnNpb25zIGZvciBzbGFiIG9iamVjdHMsIHdoaWNoIHNlZW1zIGxpa2UgYSByZWFjaGFibGUgYW5kIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIGFyZWEgdG8gZXhwbG9yZS4gSSdsbCBtYWtlIGEgbWVudGFsIG5vdGUgb2YgdGhhdC5cblxuTmV4dCwgSSBzdGFydGVkIGxvb2tpbmcgYXQgYGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mYCBhbmQgYGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mYCwgYW5kIGl0IGltbWVkaWF0ZWx5IHN0cmlrZXMgbWUgdGhhdCBgYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2ZgIGlzIGV4dHJlbWVseSBjb21tb24uIEFoLCB5ZXMsIGBhbGxvY19wYWdlc19ub2RlYCBpcyBhIG1hY3JvIHRoYXQgY2FsbHMgYGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mYCwgYW5kIGl0J3MgcHJhY3RpY2FsbHkgdWJpcXVpdG91cyBpbiB0aGUgY29kZS4gRGlyZWN0bHkgZnV6emluZyBzb21ldGhpbmcgdGhhdCBmdW5kYW1lbnRhbCB3b3VsZCBsaWtlbHkgYmUgdG9vIGJyb2FkIHRvIGJlIGVmZmVjdGl2ZSBhdCB0aGlzIHN0YWdlLlxuXG5CdXQgd2hhdCBhYm91dCBgYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9ja19ub3Byb2ZgPyBJcyB0aGF0IGFub3RoZXIgY2FuZGlkYXRlPyBMZXQgbWUgY2hlY2sgcXVpY2tseSBpZiBpdCdzIGFuIGV4cG9ydGVkIHN5bWJvbC4gSG1tLCBubywgaXQncyBub3QgZXhwb3J0ZWQuIEl0IGFwcGVhcnMgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgYWxzbyB3aXRoaW4gYG1tL3NsdWIuY2AuIEFoLCB0aGVyZSdzIGBhbGxvY19mcm96ZW5fcGFnZXNfbm9sb2NrYCB3aGljaCBpcyBhIG1hY3JvIHRoYXQgY2FsbHMgYGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mYC4gSSdsbCBoYXZlIHRvIGludmVzdGlnYXRlIHRoYXQgdG8gc2VlIGlmIGl0J3MgZXhwb3J0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2OTQyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAzOjMwOjMxLjMwNTA5MzQ0MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc3MTA0OTI2NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDM6MzA6MzQuMDc2MTUyODI2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MTYxMDc1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYWdlIEFsbG9jYXRvciBBUEkgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgb24gdGhlIHBhZ2UgYWxsb2NhdG9yLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IGlzIHRoaXMgZnVuY3Rpb25hbGl0eSBldmVuICphY2Nlc3NpYmxlKiBmcm9tIG91dHNpZGUgdGhlIGtlcm5lbD8gTGV0J3MgY2hlY2sgd2hpY2ggc3ltYm9scyBhcmUgZXhwb3J0ZWQuIEhtbSwgYF9fa21hbGxvY19ub2xvY2tfbm9wcm9mYCBpc24ndC4gQnV0LCBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCwgYF9fYWxsb2NfcGFnZXNfbm9wcm9mYCwgYW5kIGBhbGxvY19wYWdlc19ub2RlX25vcHJvZmAgYXJlLiBFeGNlbGxlbnQsIHRoZXkncmUgZXhwb3J0ZWQuIFNpbmNlIHRoZSBwYXRjaCB0b3VjaGVzIHRoZSBjb3JlIGFsbG9jYXRvciwgdGhlc2UgY2hhbmdlcyBhcmUgZGVmaW5pdGVseSBpbXBhY3RmdWwgYW5kICpyZWFjaGFibGUqIGNvZGUuXG5cblRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBhbGxvY19mbGFnc2AgdG8gYF9fYWxsb2NfcGFnZXNfbm9wcm9mYCBhbmQgYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAsIGFuZCBhZGRzIGBBTExPQ19OT0xPQ0tgIGFuZCBgQUxMT0NfTk9fQ09ERVRBR2AuIFRoYXQncyB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgaXMsIHNvIEkgbmVlZCB0byBob25lIGluIG9uIGZ1bmN0aW9ucyB0aGF0ICp1c2UqIHRoZXNlIG5ldyBmbGFncy4gSSBzZWUgYGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mYCB1c2VzIGBBTExPQ19OT0xPQ0tgLCB3aGlsZSBgX19hbGxvY190YWdfYWRkX2Vhcmx5X3BmbmAgdXNlcyBgQUxMT0NfTk9fQ09ERVRBR2AuIEFsc28gYGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mYCwgYGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mYCwgYW5kIGBfX2ZvbGlvX2FsbG9jX25vcHJvZmAgdXNlIGBBTExPQ19ERUZBVUxUYC5cblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiBgYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9ja19ub3Byb2ZgLiBJdCBsb29rcyBsaWtlIGEgcHJpbWUgZnV6emluZyB0YXJnZXQuIEl0J3MgYSBzcGVjaWZpYyBBUEkgdGhhdCB1c2VzIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgIHdpdGggYEFMTE9DX05PTE9DS2AsIGFuZCB0aGUgcGF0Y2ggY2hhbmdlZCBpdC4gV2FpdCBhIG1pbnV0ZS4uLiBpdCdzICpub3QqIGV4cG9ydGVkLCBtZWFuaW5nIGl0IGNhbid0IGJlIGNhbGxlZCBkaXJlY3RseSBmcm9tIGtlcm5lbCBtb2R1bGVzLiBCdXQsIGl0IGNvdWxkIHN0aWxsIGJlIHJlYWNoZWQgdmlhIGBrbWFsbG9jYCB3aXRoIGBBTExPQ19OT0xPQ0tgIG9yIHZpYSBgYWxsb2Nfc2xhYl9wYWdlYCB3aGVuIGBhbGxvd19zcGluYCBpcyBmYWxzZS4gSW50ZXJlc3RpbmchIFNvLCBgYWxsb2Nfc2xhYl9wYWdlYCB1c2VzIGBhbGxvY19mcm96ZW5fcGFnZXNfbm9sb2NrYCB3aGVuIGBhbGxvd19zcGluYCBpcyBmYWxzZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhc2VzIHdoZXJlIGBhbGxvd19zcGluYCBpcyBmYWxzZS4gVGhhdCdzIHRoZSBrZXkgdG8gcmVhY2hpbmcgdGhpcyBjb2RlIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NTkzLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAzOjMwOjQwLjU5MjI2MjcxNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3ODM2NzE4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvd19zcGluXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZ2ZwLmg9MjA9c3RhdGljIGlubGluZSBib29sIGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGNvbnN0IGdmcF90IGdmcF9mbGFncylcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjQtXFxuaW5jbHVkZS9saW51eC9nZnAuaDoyNTpzdGF0aWMgaW5saW5lIGJvb2wgZ2ZwZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoY29uc3QgZ2ZwX3QgZ2ZwX2ZsYWdzKVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMjYte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9OTgwPXZvaWQgX19tZW1jZ19tZW1vcnlfZXZlbnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjk4MTpcXHRcXHRcXHQgIGVudW0gbWVtY2dfbWVtb3J5X2V2ZW50IGV2ZW50LCBib29sIGFsbG93X3NwaW5uaW5nKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05ODItXFxuLS1cXG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jPTMwMjc9Ym9vbCBwcmludGtfZ2V0X25leHRfbWVzc2FnZShzdHJ1Y3QgcHJpbnRrX21lc3NhZ2UgKnBtc2csIHU2NCBzZXEsXFxuLS1cXG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jLTMwODctI2lmZGVmIENPTkZJR19QUkVFTVBUX1JUXFxua2VybmVsL3ByaW50ay9wcmludGsuYzozMDg4OnN0YXRpYyBpbmxpbmUgdm9pZCBwcmludGtfbGVnYWN5X2FsbG93X3NwaW5sb2NrX2VudGVyKHZvaWQpIHsgfVxcbmtlcm5lbC9wcmludGsvcHJpbnRrLmM6MzA4OTpzdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRrX2xlZ2FjeV9hbGxvd19zcGlubG9ja19leGl0KHZvaWQpIHsgfVxcbmtlcm5lbC9wcmludGsvcHJpbnRrLmMtMzA5MC0jZWxzZVxcbmtlcm5lbC9wcmludGsvcHJpbnRrLmM9MzA5MT1zdGF0aWMgREVGSU5FX1dBSVRfT1ZFUlJJREVfTUFQKHByaW50a19sZWdhY3lfbWFwLCBMRF9XQUlUX0NPTkZJRyk7XFxua2VybmVsL3ByaW50ay9wcmludGsuYy0zMDkyLVxcbmtlcm5lbC9wcmludGsvcHJpbnRrLmM6MzA5MzpzdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRrX2xlZ2FjeV9hbGxvd19zcGlubG9ja19lbnRlcih2b2lkKVxcbmtlcm5lbC9wcmludGsvcHJpbnRrLmMtMzA5NC17XFxuLS1cXG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jLTMwOTctXFxua2VybmVsL3ByaW50ay9wcmludGsuYzozMDk4OnN0YXRpYyBpbmxpbmUgdm9pZCBwcmludGtfbGVnYWN5X2FsbG93X3NwaW5sb2NrX2V4aXQodm9pZClcXG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jLTMwOTkte1xcbi0tXFxua2VybmVsL3ByaW50ay9wcmludGsuYz0zMTI2PXN0YXRpYyBib29sIGNvbnNvbGVfZW1pdF9uZXh0X3JlY29yZChzdHJ1Y3QgY29uc29sZSAqY29uLCBib29sICpoYW5kb3ZlciwgaW50IGNvb2tpZSlcXG4tLVxcbmtlcm5lbC9wcmludGsvcHJpbnRrLmMtMzE4MS1cXG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jOjMxODI6XFx0XFx0cHJpbnRrX2xlZ2FjeV9hbGxvd19zcGlubG9ja19lbnRlcigpO1xcbmtlcm5lbC9wcmludGsvcHJpbnRrLmMtMzE4My1cXHRcXHRjb24tXFx1MDAzZXdyaXRlKGNvbiwgb3V0YnVmLCBwbXNnLm91dGJ1Zl9sZW4pO1xcbmtlcm5lbC9wcmludGsvcHJpbnRrLmM6MzE4NDpcXHRcXHRwcmludGtfbGVnYWN5X2FsbG93X3NwaW5sb2NrX2V4aXQoKTtcXG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jLTMxODUtXFxuLS1cXG5saWIvc3RhY2tkZXBvdC5jPTY0MT1kZXBvdF9zdGFja19oYW5kbGVfdCBzdGFja19kZXBvdF9zYXZlX2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmVudHJpZXMsXFxuLS1cXG5saWIvc3RhY2tkZXBvdC5jLTY1MC1cXHR2b2lkICpwcmVhbGxvYyA9IE5VTEw7XFxubGliL3N0YWNrZGVwb3QuYzo2NTE6XFx0Ym9vbCBhbGxvd19zcGluID0gZ2ZwZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWxsb2NfZmxhZ3MpO1xcbmxpYi9zdGFja2RlcG90LmM6NjUyOlxcdGJvb2wgY2FuX2FsbG9jID0gKGRlcG90X2ZsYWdzIFxcdTAwMjYgU1RBQ0tfREVQT1RfRkxBR19DQU5fQUxMT0MpIFxcdTAwMjZcXHUwMDI2IGFsbG93X3NwaW47XFxubGliL3N0YWNrZGVwb3QuYy02NTMtXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tLVxcbmxpYi9zdGFja2RlcG90LmMtNjkwLVxcbmxpYi9zdGFja2RlcG90LmM6NjkxOlxcdGlmIChpbl9ubWkoKSB8fCAhYWxsb3dfc3Bpbikge1xcbmxpYi9zdGFja2RlcG90LmMtNjkyLVxcdFxcdC8qIFdlIGNhbiBuZXZlciBhbGxvY2F0ZSBpbiBOTUkgY29udGV4dC4gKi9cXG4tLVxcbmxpYi9zdGFja2RlcG90LmMtNzMxLVxcdFxcdC8qIFN0YWNrIGRlcG90IGRpZG4ndCB1c2UgdGhpcyBtZW1vcnksIGZyZWUgaXQuICovXFxubGliL3N0YWNrZGVwb3QuYzo3MzI6XFx0XFx0aWYgKCFhbGxvd19zcGluKVxcbmxpYi9zdGFja2RlcG90LmMtNzMzLVxcdFxcdFxcdGZyZWVfcGFnZXNfbm9sb2NrKHZpcnRfdG9fcGFnZShwcmVhbGxvYyksIERFUE9UX1BPT0xfT1JERVIpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTE4NTQ9dm9pZCBfX21lbWNnX21lbW9yeV9ldmVudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vbWVtY29udHJvbC5jOjE4NTU6XFx0XFx0XFx0ICBlbnVtIG1lbWNnX21lbW9yeV9ldmVudCBldmVudCwgYm9vbCBhbGxvd19zcGlubmluZylcXG5tbS9tZW1jb250cm9sLmMtMTg1Ni17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTg1OS1cXG5tbS9tZW1jb250cm9sLmM6MTg2MDpcXHQvKiBGb3Igbm93IG9ubHkgTUVNQ0dfTUFYIGNhbiBoYXBwZW4gd2l0aCAhYWxsb3dfc3Bpbm5pbmcgY29udGV4dC4gKi9cXG5tbS9tZW1jb250cm9sLmM6MTg2MTpcXHRWTV9XQVJOX09OX09OQ0UoIWFsbG93X3NwaW5uaW5nIFxcdTAwMjZcXHUwMDI2IGV2ZW50ICE9IE1FTUNHX01BWCk7XFxubW0vbWVtY29udHJvbC5jLTE4NjItXFxubW0vbWVtY29udHJvbC5jLTE4NjMtXFx0YXRvbWljX2xvbmdfaW5jKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5X2V2ZW50c19sb2NhbFtldmVudF0pO1xcbm1tL21lbWNvbnRyb2wuYzoxODY0OlxcdGlmICghc3dhcF9ldmVudCBcXHUwMDI2XFx1MDAyNiBhbGxvd19zcGlubmluZylcXG5tbS9tZW1jb250cm9sLmMtMTg2NS1cXHRcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNm1lbWNnLVxcdTAwM2VldmVudHNfbG9jYWxfZmlsZSk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTg2OC1cXHRcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnlfZXZlbnRzW2V2ZW50XSk7XFxubW0vbWVtY29udHJvbC5jOjE4Njk6XFx0XFx0aWYgKGFsbG93X3NwaW5uaW5nKSB7XFxubW0vbWVtY29udHJvbC5jLTE4NzAtXFx0XFx0XFx0aWYgKHN3YXBfZXZlbnQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjU5NT1zdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNjA3LVxcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xcbm1tL21lbWNvbnRyb2wuYzoyNjA4OlxcdGJvb2wgYWxsb3dfc3Bpbm5pbmcgPSBnZnBmbGFnc19hbGxvd19zcGlubmluZyhnZnBfbWFzayk7XFxubW0vbWVtY29udHJvbC5jLTI2MDktXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjYxMy1cXG5tbS9tZW1jb250cm9sLmM6MjYxNDpcXHRpZiAoIWFsbG93X3NwaW5uaW5nKVxcbm1tL21lbWNvbnRyb2wuYy0yNjE1LVxcdFxcdC8qIEF2b2lkIHRoZSByZWZpbGwgYW5kIGZsdXNoIG9mIHRoZSBvbGRlciBzdG9jayAqL1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTI2NTAtXFxubW0vbWVtY29udHJvbC5jOjI2NTE6XFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xcbm1tL21lbWNvbnRyb2wuYy0yNjUyLVxcdHJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlO1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTI3MTctXFx0aWYgKCFyYWlzZWRfbWF4X2V2ZW50KVxcbm1tL21lbWNvbnRyb2wuYzoyNzE4OlxcdFxcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcXG5tbS9tZW1jb250cm9sLmMtMjcxOS1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01MjkxPXN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvY190cnlsb2NrX2FsbG93ZWQodm9pZClcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01MzI0LSAqXFxubW0vcGFnZV9hbGxvYy5jOjUzMjU6ICogVGhlc2UgdHdvIGFyZSB0aGUgY29uZGl0aW9ucyBmb3IgZ2ZwZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoKSBiZWluZyB0cnVlLlxcbm1tL3BhZ2VfYWxsb2MuYy01MzI2LSAqXFxuLS1cXG5tbS9wYWdlX293bmVyLmM9MTkzPXN0YXRpYyB2b2lkIGFkZF9zdGFja19yZWNvcmRfdG9fbGlzdChzdHJ1Y3Qgc3RhY2tfcmVjb3JkICpzdGFja19yZWNvcmQsXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtMTk4LVxcbm1tL3BhZ2Vfb3duZXIuYzoxOTk6XFx0aWYgKCFnZnBmbGFnc19hbGxvd19zcGlubmluZyhnZnBfbWFzaykpXFxubW0vcGFnZV9vd25lci5jLTIwMC1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9wYWdlX293bmVyLmM9MzE3PXZvaWQgX19yZXNldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlcilcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy0zMzMtXFx0LypcXG5tbS9wYWdlX293bmVyLmM6MzM0OlxcdCAqIERvIG5vdCBzcGVjaWZ5IEdGUF9OT1dBSVQgdG8gbWFrZSBnZnBmbGFnc19hbGxvd19zcGlubmluZygpID09IGZhbHNlXFxubW0vcGFnZV9vd25lci5jLTMzNS1cXHQgKiB0byBwcmV2ZW50IGlzc3VlcyBpbiBzdGFja19kZXBvdF9zYXZlKCkuXFxuLS1cXG5tbS9zbGFiLmgtMjUtXFxubW0vc2xhYi5oOjI2OnN0YXRpYyBpbmxpbmUgYm9vbCBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhjb25zdCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxubW0vc2xhYi5oLTI3LXtcXG4tLVxcbm1tL3NsdWIuYz0yMTYzPWludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy0yMTY1LXtcXG5tbS9zbHViLmM6MjE2NjpcXHRjb25zdCBib29sIGFsbG93X3NwaW4gPSBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhbGxvY19mbGFncyk7XFxubW0vc2x1Yi5jLTIxNjctXFx0dW5zaWduZWQgaW50IG9iamVjdHMgPSBvYmpzX3Blcl9zbGFiKHMsIHNsYWIpO1xcbi0tXFxubW0vc2x1Yi5jLTIyMjEtXFx0XFx0bWFya19vYmpfY29kZXRhZ19lbXB0eSh2ZWMpO1xcbm1tL3NsdWIuYzoyMjIyOlxcdFxcdGlmICh1bmxpa2VseSghYWxsb3dfc3BpbikpXFxubW0vc2x1Yi5jLTIyMjMtXFx0XFx0XFx0a2ZyZWVfbm9sb2NrKHZlYyk7XFxuLS1cXG5tbS9zbHViLmMtMjIzMS1cXG5tbS9zbHViLmM6MjIzMjpcXHRpZiAoYWxsb3dfc3BpbilcXG5tbS9zbHViLmMtMjIzMy1cXHRcXHRrbWVtbGVha19ub3RfbGVhayh2ZWMpO1xcbi0tXFxubW0vc2x1Yi5jLTIyMzYtXFxubW0vc2x1Yi5jOjIyMzc6c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxcbm1tL3NsdWIuYy0yMjM4LXtcXG4tLVxcbm1tL3NsdWIuYy0yMjY0LVxcdG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkob2JqX2V4dHMpO1xcbm1tL3NsdWIuYzoyMjY1OlxcdGlmIChhbGxvd19zcGluKVxcbm1tL3NsdWIuYy0yMjY2LVxcdFxcdGtmcmVlKG9ial9leHRzKTtcXG4tLVxcbm1tL3NsdWIuYz0yMzMyPXN0YXRpYyBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtMjMzNy1cXG5tbS9zbHViLmM6MjMzODpzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxubW0vc2x1Yi5jLTIzMzkte1xcbi0tXFxubW0vc2x1Yi5jPTMwODk9c3RhdGljIHN0cnVjdCBzbGFiX3NoZWFmICpiYXJuX2dldF9lbXB0eV9zaGVhZihzdHJ1Y3Qgbm9kZV9iYXJuICpiYXJuLFxcbm1tL3NsdWIuYzozMDkwOlxcdFxcdFxcdFxcdFxcdCAgICAgICBib29sIGFsbG93X3NwaW4pXFxubW0vc2x1Yi5jLTMwOTEte1xcbi0tXFxubW0vc2x1Yi5jLTMwOTctXFxubW0vc2x1Yi5jOjMwOTg6XFx0aWYgKGxpa2VseShhbGxvd19zcGluKSlcXG5tbS9zbHViLmMtMzA5OS1cXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2YmFybi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbi0tXFxubW0vc2x1Yi5jPTMxNzg9YmFybl9yZXBsYWNlX2VtcHR5X3NoZWFmKHN0cnVjdCBub2RlX2Jhcm4gKmJhcm4sIHN0cnVjdCBzbGFiX3NoZWFmICplbXB0eSxcXG5tbS9zbHViLmM6MzE3OTpcXHRcXHRcXHQgYm9vbCBhbGxvd19zcGluKVxcbm1tL3NsdWIuYy0zMTgwLXtcXG4tLVxcbm1tL3NsdWIuYy0zMTg2LVxcbm1tL3NsdWIuYzozMTg3OlxcdGlmIChsaWtlbHkoYWxsb3dfc3BpbikpXFxubW0vc2x1Yi5jLTMxODgtXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmJhcm4tXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4tLVxcbm1tL3NsdWIuYz0zMjExPWJhcm5fcmVwbGFjZV9mdWxsX3NoZWFmKHN0cnVjdCBub2RlX2Jhcm4gKmJhcm4sIHN0cnVjdCBzbGFiX3NoZWFmICpmdWxsLFxcbm1tL3NsdWIuYzozMjEyOlxcdFxcdFxcdGJvb2wgYWxsb3dfc3BpbilcXG5tbS9zbHViLmMtMzIxMy17XFxuLS1cXG5tbS9zbHViLmMtMzIyMi1cXG5tbS9zbHViLmM6MzIyMzpcXHRpZiAobGlrZWx5KGFsbG93X3NwaW4pKVxcbm1tL3NsdWIuYy0zMjI0LVxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZiYXJuLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuLS1cXG5tbS9zbHViLmM9MzI4MT1zdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFiICphbGxvY19zbGFiX3BhZ2UoZ2ZwX3QgZmxhZ3MsIGludCBub2RlLFxcbm1tL3NsdWIuYy0zMjgyLVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrbWVtX2NhY2hlX29yZGVyX29iamVjdHMgb28sXFxubW0vc2x1Yi5jOjMyODM6XFx0XFx0XFx0XFx0XFx0ICAgYm9vbCBhbGxvd19zcGluKVxcbm1tL3NsdWIuYy0zMjg0LXtcXG4tLVxcbm1tL3NsdWIuYy0zMjg4LVxcbm1tL3NsdWIuYzozMjg5OlxcdGlmICh1bmxpa2VseSghYWxsb3dfc3BpbikpXFxubW0vc2x1Yi5jLTMyOTAtXFx0XFx0cGFnZSA9IGFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2soMC8qIF9fR0ZQX0NPTVAgaXMgaW1wbGllZCAqLyxcXG4tLVxcbm1tL3NsdWIuYz0zMzc0PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB1bmFjY291bnRfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgaW50IG9yZGVyLFxcbm1tL3NsdWIuYzozMzc1OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrbWVtX2NhY2hlICpzLCBib29sIGFsbG93X3NwaW4pXFxubW0vc2x1Yi5jLTMzNzYte1xcbi0tXFxubW0vc2x1Yi5jLTMzODEtXFx0ICovXFxubW0vc2x1Yi5jOjMzODI6XFx0ZnJlZV9zbGFiX29ial9leHRzKHNsYWIsIGFsbG93X3NwaW4pO1xcbm1tL3NsdWIuYy0zMzgzLVxcbi0tXFxubW0vc2x1Yi5jPTMzODk9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0zMzkxLXtcXG5tbS9zbHViLmM6MzM5MjpcXHRib29sIGFsbG93X3NwaW4gPSBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhbGxvY19mbGFncyk7XFxubW0vc2x1Yi5jLTMzOTMtXFx0c3RydWN0IHNsYWIgKnNsYWI7XFxuLS1cXG5tbS9zbHViLmMtMzQwOS1cXG5tbS9zbHViLmM6MzQxMDpcXHRzbGFiID0gYWxsb2Nfc2xhYl9wYWdlKGFsbG9jX2dmcCwgbm9kZSwgb28sIGFsbG93X3NwaW4pO1xcbm1tL3NsdWIuYy0zNDExLVxcdGlmICh1bmxpa2VseSghc2xhYikpIHtcXG4tLVxcbm1tL3NsdWIuYy0zNDE3LVxcdFxcdCAqL1xcbm1tL3NsdWIuYzozNDE4OlxcdFxcdHNsYWIgPSBhbGxvY19zbGFiX3BhZ2UoYWxsb2NfZ2ZwLCBub2RlLCBvbywgYWxsb3dfc3Bpbik7XFxubW0vc2x1Yi5jLTM0MTktXFx0XFx0aWYgKHVubGlrZWx5KCFzbGFiKSlcXG4tLVxcbm1tL3NsdWIuYz0zNDQ2PXN0YXRpYyBzdHJ1Y3Qgc2xhYiAqbmV3X3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTM0NTgtXFxubW0vc2x1Yi5jOjM0NTk6c3RhdGljIHZvaWQgX19mcmVlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxubW0vc2x1Yi5jLTM0NjAte1xcbi0tXFxubW0vc2x1Yi5jLTM0NjgtXFx0bW1fYWNjb3VudF9yZWNsYWltZWRfcGFnZXMocGFnZXMpO1xcbm1tL3NsdWIuYzozNDY5OlxcdHVuYWNjb3VudF9zbGFiKHNsYWIsIG9yZGVyLCBzLCBhbGxvd19zcGluKTtcXG5tbS9zbHViLmM6MzQ3MDpcXHRpZiAoYWxsb3dfc3BpbilcXG5tbS9zbHViLmMtMzQ3MS1cXHRcXHRmcmVlX2Zyb3plbl9wYWdlcyhwYWdlLCBvcmRlcik7XFxuLS1cXG5tbS9zbHViLmM9MzY2MT1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9pdGVyKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG5tbS9zbHViLmMtMzY2Mi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2xhYl9vYmpfaXRlciAqaXRlcixcXG5tbS9zbHViLmM6MzY2MzpcXHRcXHRcXHRcXHQgICAgICBib29sIGFsbG93X3NwaW4pXFxubW0vc2x1Yi5jLTM2NjQte1xcbi0tXFxubW0vc2x1Yi5jLTM2NzUtXFxubW0vc2x1Yi5jOjM2NzY6XFx0aWYgKGFsbG93X3NwaW4pIHtcXG5tbS9zbHViLmMtMzY3Ny1cXHRcXHRpdGVyLVxcdTAwM2Vwb3MgPSBnZXRfcmFuZG9tX3UzMl9iZWxvdyhpdGVyLVxcdTAwM2VmcmVlbGlzdF9jb3VudCk7XFxuLS1cXG5tbS9zbHViLmM9MzY5Nz1zdGF0aWMgdm9pZCAqYWxsb2Nfc2luZ2xlX2Zyb21fbmV3X3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbi0tXFxubW0vc2x1Yi5jLTM2OTkte1xcbm1tL3NsdWIuYzozNzAwOlxcdGJvb2wgYWxsb3dfc3BpbiA9IGFsbG9jX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGFjLVxcdTAwM2VhbGxvY19mbGFncyk7XFxubW0vc2x1Yi5jLTM3MDEtXFx0c3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbjtcXG4tLVxcbm1tL3NsdWIuYy0zNzA2LVxcbm1tL3NsdWIuYzozNzA3OlxcdGluaXRfc2xhYl9vYmpfaXRlcihzLCBzbGFiLCBcXHUwMDI2aXRlciwgYWxsb3dfc3Bpbik7XFxubW0vc2x1Yi5jLTM3MDgtXFx0b2JqZWN0ID0gbmV4dF9zbGFiX29iaihzLCBcXHUwMDI2aXRlcik7XFxuLS1cXG5tbS9zbHViLmMtMzcyNy1cXHRuID0gZ2V0X25vZGUocywgc2xhYl9uaWQoc2xhYikpO1xcbm1tL3NsdWIuYzozNzI4OlxcdGlmIChhbGxvd19zcGluKSB7XFxubW0vc2x1Yi5jLTM3MjktXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xcbi0tXFxubW0vc2x1Yi5jPTM3NTc9c3RhdGljIGJvb2wgZ2V0X3BhcnRpYWxfbm9kZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbi0tXFxubW0vc2x1Yi5jLTM3NTktXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcGFydGlhbF9idWxrX2NvbnRleHQgKnBjLFxcbm1tL3NsdWIuYzozNzYwOlxcdFxcdFxcdFxcdCAgYm9vbCBhbGxvd19zcGluKVxcbm1tL3NsdWIuYy0zNzYxLXtcXG4tLVxcbm1tL3NsdWIuYy0zNzcyLVxcbm1tL3NsdWIuYzozNzczOlxcdGlmIChhbGxvd19zcGluKVxcbm1tL3NsdWIuYy0zNzc0LVxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZuLVxcdTAwM2VsaXN0X2xvY2ssIGZsYWdzKTtcXG4tLVxcbm1tL3NsdWIuYz0zODI4PXN0YXRpYyB2b2lkICpnZXRfZnJvbV9wYXJ0aWFsX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtMzg0NS1cXG5tbS9zbHViLmM6Mzg0NjpcXHRpZiAoYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWMtXFx1MDAzZWFsbG9jX2ZsYWdzKSlcXG5tbS9zbHViLmMtMzg0Ny1cXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bi1cXHUwMDNlbGlzdF9sb2NrLCBmbGFncyk7XFxuLS1cXG5tbS9zbHViLmM9Mzg5Mz1zdGF0aWMgdm9pZCAqZ2V0X2Zyb21fYW55X3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcF9mbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0zOTAxLVxcdHVuc2lnbmVkIGludCBjcHVzZXRfbWVtc19jb29raWU7XFxubW0vc2x1Yi5jOjM5MDI6XFx0Ym9vbCBhbGxvd19zcGluID0gYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWMtXFx1MDAzZWFsbG9jX2ZsYWdzKTtcXG5tbS9zbHViLmMtMzkwMy1cXG4tLVxcbm1tL3NsdWIuYy0zOTMyLVxcdFxcdCAqL1xcbm1tL3NsdWIuYzozOTMzOlxcdFxcdGlmIChhbGxvd19zcGluKVxcbm1tL3NsdWIuYy0zOTM0LVxcdFxcdFxcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XFxuLS1cXG5tbS9zbHViLmMtMzk1OS1cXHRcXHR9XFxubW0vc2x1Yi5jOjM5NjA6XFx0fSB3aGlsZSAoYWxsb3dfc3BpbiBcXHUwMDI2XFx1MDAyNiByZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKTtcXG5tbS9zbHViLmMtMzk2MS0jZW5kaWZcXHQvKiBDT05GSUdfTlVNQSAqL1xcbi0tXFxubW0vc2x1Yi5jPTQ0MDM9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvY19mcm9tX25ld19zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG5tbS9zbHViLmM6NDQwNDpcXHRcXHR2b2lkICoqcCwgdW5zaWduZWQgaW50IGNvdW50LCBib29sIGFsbG93X3NwaW4pXFxubW0vc2x1Yi5jLTQ0MDUte1xcbi0tXFxubW0vc2x1Yi5jLTQ0MTktXFxubW0vc2x1Yi5jOjQ0MjA6XFx0aW5pdF9zbGFiX29ial9pdGVyKHMsIHNsYWIsIFxcdTAwMjZpdGVyLCBhbGxvd19zcGluKTtcXG5tbS9zbHViLmMtNDQyMS1cXG4tLVxcbm1tL3NsdWIuYy00NDMxLVxcbm1tL3NsdWIuYzo0NDMyOlxcdFxcdGlmIChhbGxvd19zcGluKSB7XFxubW0vc2x1Yi5jLTQ0MzMtXFx0XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNm4tXFx1MDAzZWxpc3RfbG9jaywgZmxhZ3MpO1xcbi0tXFxubW0vc2x1Yi5jPTQ0NTg9c3RhdGljIHZvaWQgKl9fX3NsYWJfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzLCBpbnQgbm9kZSxcXG4tLVxcbm1tL3NsdWIuYy00NDYwLXtcXG5tbS9zbHViLmM6NDQ2MTpcXHRib29sIGFsbG93X3NwaW4gPSBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhYy1cXHUwMDNlYWxsb2NfZmxhZ3MpO1xcbm1tL3NsdWIuYy00NDYyLVxcdGdmcF90IHRyeW5vZGVfZmxhZ3M7XFxuLS1cXG5tbS9zbHViLmMtNDUxMy1cXHRcXHQvKiB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIFNMQUJfU1RPUkVfVVNFUiBoZXJlICovXFxubW0vc2x1Yi5jOjQ1MTQ6XFx0XFx0aWYgKGFsbG9jX2Zyb21fbmV3X3NsYWIocywgc2xhYiwgXFx1MDAyNm9iamVjdCwgMSwgYWxsb3dfc3BpbikpXFxubW0vc2x1Yi5jLTQ1MTUtXFx0XFx0XFx0cmV0dXJuIG9iamVjdDtcXG4tLVxcbm1tL3NsdWIuYy00NTE3LVxcbm1tL3NsdWIuYzo0NTE4OlxcdGlmIChhbGxvd19zcGluKVxcbm1tL3NsdWIuYy00NTE5LVxcdFxcdGdvdG8gbmV3X29iamVjdHM7XFxuLS1cXG5tbS9zbHViLmM9NDU3MD1ib29sIHNsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncywgc2l6ZV90IHNpemUsXFxuLS1cXG5tbS9zbHViLmMtNDYxOS1cXG5tbS9zbHViLmM6NDYyMDpcXHRcXHRpZiAoYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWMtXFx1MDAzZWFsbG9jX2ZsYWdzKSlcXG5tbS9zbHViLmMtNDYyMS1cXHRcXHRcXHRrbWVtbGVha19hbGxvY19yZWN1cnNpdmUocFtpXSwgcy1cXHUwMDNlb2JqZWN0X3NpemUsIDEsXFxuLS1cXG5tbS9zbHViLmM9NDYzOT1fX3Bjc19yZXBsYWNlX2VtcHR5X21haW4oc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3MsXFxuLS1cXG5tbS9zbHViLmMtNDY0NC1cXHRzdHJ1Y3Qgbm9kZV9iYXJuICpiYXJuO1xcbm1tL3NsdWIuYzo0NjQ1OlxcdGJvb2wgYWxsb3dfc3BpbjtcXG5tbS9zbHViLmMtNDY0Ni1cXG4tLVxcbm1tL3NsdWIuYy00NjY1LVxcbm1tL3NsdWIuYzo0NjY2OlxcdGFsbG93X3NwaW4gPSBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhbGxvY19mbGFncyk7XFxubW0vc2x1Yi5jLTQ2NjctXFxubW0vc2x1Yi5jOjQ2Njg6XFx0ZnVsbCA9IGJhcm5fcmVwbGFjZV9lbXB0eV9zaGVhZihiYXJuLCBwY3MtXFx1MDAzZW1haW4sIGFsbG93X3NwaW4pO1xcbm1tL3NsdWIuYy00NjY5LVxcbi0tXFxubW0vc2x1Yi5jLTQ2NzctXFxubW0vc2x1Yi5jOjQ2Nzg6XFx0aWYgKGFsbG93X3NwaW4pIHtcXG5tbS9zbHViLmMtNDY3OS1cXHRcXHRpZiAocGNzLVxcdTAwM2VzcGFyZSkge1xcbi0tXFxubW0vc2x1Yi5jLTQ2ODktXFxubW0vc2x1Yi5jOjQ2OTA6XFx0aWYgKCFhbGxvd19zcGluKVxcbm1tL3NsdWIuYy00NjkxLVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubW0vc2x1Yi5jPTQ4MDU9dW5zaWduZWQgaW50IGFsbG9jX2Zyb21fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcXG4tLVxcbm1tL3NsdWIuYy00ODM5LVxcdFxcdGZ1bGwgPSBiYXJuX3JlcGxhY2VfZW1wdHlfc2hlYWYoYmFybiwgcGNzLVxcdTAwM2VtYWluLFxcbm1tL3NsdWIuYzo0ODQwOlxcdFxcdFxcdFxcdFxcdFxcdC8qIGFsbG93X3NwaW4gPSAqLyB0cnVlKTtcXG5tbS9zbHViLmMtNDg0MS1cXG4tLVxcbm1tL3NsdWIuYz01MzY5PXN0YXRpYyB2b2lkICpfX2ttYWxsb2Nfbm9sb2NrX25vcHJvZihERUNMX1RPS0VOX1BBUkFNUyhzaXplLCB0b2tlbiksIGdmcF90IGdmcF9mbGFncyxcXG4tLVxcbm1tL3NsdWIuYy01Mzc1LVxcbm1tL3NsdWIuYzo1Mzc2OlxcdFZNX1dBUk5fT05fT05DRShhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhYy1cXHUwMDNlYWxsb2NfZmxhZ3MpKTtcXG5tbS9zbHViLmMtNTM3Ny1cXHRWTV9XQVJOX09OX09OQ0UoZ2ZwX2ZsYWdzIFxcdTAwMjYgfihfX0dGUF9BQ0NPVU5UIHwgX19HRlBfWkVSTyB8XFxuLS1cXG5tbS9zbHViLmM9NTUyMz12b2lkICpfX2ttYWxsb2NfZmxhZ3Nfbm9wcm9mKERFQ0xfVE9LRU5fUEFSQU1TKHNpemUsIHRva2VuKSwgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtNTUzMS1cXG5tbS9zbHViLmM6NTUzMjpcXHRpZiAoYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWxsb2NfZmxhZ3MpKSB7XFxubW0vc2x1Yi5jLTU1MzMtXFx0XFx0cmV0dXJuIF9fZG9fa21hbGxvY19ub2RlKE5VTEwsIGZsYWdzLCBub2RlLFxcbi0tXFxubW0vc2x1Yi5jPTU4MTQ9X19wY3NfcmVwbGFjZV9mdWxsX21haW4oc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3MsXFxubW0vc2x1Yi5jOjU4MTU6XFx0XFx0XFx0Ym9vbCBhbGxvd19zcGluKVxcbm1tL3NsdWIuYy01ODE2LXtcXG4tLVxcbm1tL3NsdWIuYy01ODM4LVxcdGlmICghcGNzLVxcdTAwM2VzcGFyZSkge1xcbm1tL3NsdWIuYzo1ODM5OlxcdFxcdGVtcHR5ID0gYmFybl9nZXRfZW1wdHlfc2hlYWYoYmFybiwgYWxsb3dfc3Bpbik7XFxubW0vc2x1Yi5jLTU4NDAtXFx0XFx0aWYgKGVtcHR5KSB7XFxuLS1cXG5tbS9zbHViLmMtNTg1Mi1cXG5tbS9zbHViLmM6NTg1MzpcXHRlbXB0eSA9IGJhcm5fcmVwbGFjZV9mdWxsX3NoZWFmKGJhcm4sIHBjcy1cXHUwMDNlbWFpbiwgYWxsb3dfc3Bpbik7XFxubW0vc2x1Yi5jLTU4NTQtXFxuLS1cXG5tbS9zbHViLmMtNTg2MC1cXG5tbS9zbHViLmM6NTg2MTpcXHQvKiBzaGVhZl9mbHVzaF91bnVzZWQoKSBkb2Vzbid0IHN1cHBvcnQgIWFsbG93X3NwaW4gKi9cXG5tbS9zbHViLmM6NTg2MjpcXHRpZiAoUFRSX0VSUihlbXB0eSkgPT0gLUUyQklHIFxcdTAwMjZcXHUwMDI2IGFsbG93X3NwaW4pIHtcXG5tbS9zbHViLmMtNTg2My1cXHRcXHQvKiBTaW5jZSB3ZSBnb3QgaGVyZSwgc3BhcmUgZXhpc3RzIGFuZCBpcyBmdWxsICovXFxuLS1cXG5tbS9zbHViLmMtNTg4Ny1cXHQvKlxcbm1tL3NsdWIuYzo1ODg4OlxcdCAqIGFsbG9jX2VtcHR5X3NoZWFmKCkgZG9lc24ndCBzdXBwb3J0ICFhbGxvd19zcGluIGFuZCBpdCdzXFxubW0vc2x1Yi5jLTU4ODktXFx0ICogZWFzaWVyIHRvIGZhbGwgYmFjayB0byBmcmVlaW5nIGRpcmVjdGx5IHdpdGhvdXQgc2hlYXZlc1xcbi0tXFxubW0vc2x1Yi5jLTU4OTEtXFx0ICovXFxubW0vc2x1Yi5jOjU4OTI6XFx0aWYgKCFhbGxvd19zcGluKVxcbm1tL3NsdWIuYy01ODkzLVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubW0vc2x1Yi5jPTU5MzY9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXFxubW0vc2x1Yi5jOjU5Mzc6Ym9vbCBmcmVlX3RvX3BjcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCBib29sIGFsbG93X3NwaW4pXFxubW0vc2x1Yi5jLTU5Mzgte1xcbi0tXFxubW0vc2x1Yi5jLTU5NDctXFxubW0vc2x1Yi5jOjU5NDg6XFx0XFx0cGNzID0gX19wY3NfcmVwbGFjZV9mdWxsX21haW4ocywgcGNzLCBhbGxvd19zcGluKTtcXG5tbS9zbHViLmMtNTk0OS1cXHRcXHRpZiAodW5saWtlbHkoIXBjcykpXFxuLS1cXG5tbS9zbHViLmM9NzE2Mj1fX3JlZmlsbF9vYmplY3RzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXFxubW0vc2x1Yi5jLTcxNjMtXFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG1heCwgc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcXG5tbS9zbHViLmM6NzE2NDpcXHRcXHQgICAgICBib29sIGFsbG93X3NwaW4pXFxubW0vc2x1Yi5jLTcxNjUte1xcbi0tXFxubW0vc2x1Yi5jLTcxNzUtXFxubW0vc2x1Yi5jOjcxNzY6XFx0aWYgKCFnZXRfcGFydGlhbF9ub2RlX2J1bGsocywgbiwgXFx1MDAyNnBjLCBhbGxvd19zcGluKSlcXG5tbS9zbHViLmMtNzE3Ny1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL3NsdWIuYz03MjM4PV9fcmVmaWxsX29iamVjdHNfYW55KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxcbi0tXFxubW0vc2x1Yi5jLTcyNjYtXFx0XFx0XFx0ciA9IF9fcmVmaWxsX29iamVjdHNfbm9kZShzLCBwLCBnZnAsIG1pbiwgbWF4LCBuLFxcbm1tL3NsdWIuYzo3MjY3OlxcdFxcdFxcdFxcdFxcdFxcdCAgLyogYWxsb3dfc3BpbiA9ICovIGZhbHNlKTtcXG5tbS9zbHViLmMtNzI2OC1cXHRcXHRcXHRyZWZpbGxlZCArPSByO1xcbi0tXFxubW0vc2x1Yi5jPTcyOTc9cmVmaWxsX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKipwLCBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBtaW4sXFxuLS1cXG5tbS9zbHViLmMtNzMwNS1cXHRcXHRcXHRcXHRcXHQgZ2V0X25vZGUocywgbG9jYWxfbm9kZSksXFxubW0vc2x1Yi5jOjczMDY6XFx0XFx0XFx0XFx0XFx0IC8qIGFsbG93X3NwaW4gPSAqLyB0cnVlKTtcXG5tbS9zbHViLmMtNzMwNy1cXHRpZiAocmVmaWxsZWQgXFx1MDAzZT0gbWluKVxcbi0tXFxubW0vc2x1Yi5jLTczMjMtXFx0cmVmaWxsZWQgKz0gYWxsb2NfZnJvbV9uZXdfc2xhYihzLCBzbGFiLCBwICsgcmVmaWxsZWQsIG1heCAtIHJlZmlsbGVkLFxcbm1tL3NsdWIuYzo3MzI0OlxcdFxcdFxcdFxcdFxcdC8qIGFsbG93X3NwaW4gPSAqLyB0cnVlKTtcXG5tbS9zbHViLmMtNzMyNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDM6MzA6NDIuNjcwNjQxNDE1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1ODk0MTczNjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFBhZ2UgQWxsb2NhdG9yIFJlZmFjdG9yaW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBtZW1vcnkgbWFuYWdlbWVudCBleHBlcnQncyBwZXJzcGVjdGl2ZS4gSXQgYXBwZWFycyB3ZSBoYXZlIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIHBhZ2UgYWxsb2NhdG9yIEFQSSB0aGF0J3MgaW50cm9kdWNpbmcgYGFsbG9jX2ZsYWdzYCB0byBgX19hbGxvY19wYWdlc19ub3Byb2ZgIGFuZCBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCwgYW5kIHJlcGxhY2luZyBzb21lIG9sZCBmbGFncyB3aXRoIGBBTExPQ19OT19DT0RFVEFHYCBhbmQgYEFMTE9DX05PTE9DS2AuIFRoZSBnb2FsIGhlcmUgaXMgdG8gbWFrZSB0aGUgY29kZSBtb3JlIHJvYnVzdCBhbmQgZmxleGlibGUsIGJ1dCB3ZSBuZWVkIHRvIGVuc3VyZSB3ZSdyZSBub3QgaW50cm9kdWNpbmcgYW55IHJlZ3Jlc3Npb25zLiBUaGUgbW9zdCBjcml0aWNhbCBhc3BlY3Qgb2YgdGhpcyBjaGFuZ2UgaXMgYWJvdXQgbm9uLWJsb2NraW5nIGFsbG9jYXRpb25zIGFuZCBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMuXG5cbkZpcnN0LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IGFyZWFzIHRvIGZvY3VzIG91ciBmdXp6aW5nIGVmZm9ydHMuIFRoZSBjb2RlIGlzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmlsZXMsIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIGhvdyBwYWdlcyBhcmUgYWxsb2NhdGVkLCBwYXJ0aWN1bGFybHkgd2l0aCByZXNwZWN0IHRvIGxvY2tpbmcgYW5kIHByb2ZpbGluZy4gVGhpcyBtZWFucyB3ZSBtdXN0IGNoZWNrIGZvciBsb2NrIHJlbGF0ZWQgYnVncyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gYnVncy5cblxuVGhlIHByaW1hcnkgZnVuY3Rpb24gb2YgaW50ZXJlc3QsIGFmdGVyIGRpZ2dpbmcgaW50byB0aGlzIGEgYml0LCBpcyBkZWZpbml0ZWx5IGBhbGxvY19mcm96ZW5fcGFnZXNfbm9sb2NrX25vcHJvZmAuIEl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3Igb3Bwb3J0dW5pc3RpYyByZWVudHJhbnQgYWxsb2NhdGlvbiBpbiB0aGUgbm9sb2NrIGNvbnRleHQgYW5kIGlzIGEgc3Ryb25nIGNhbmRpZGF0ZSBmb3IgZnV6emluZyBhcyBpdCdzIGJlZW4gdXBkYXRlZCB0byB1c2UgdGhlIG5ldyBmbGFncy4gQW5vdGhlciBmdW5jdGlvbiwgYGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mYCwgdGhhdCdzIG5vdyBhbiBvdXQtb2YtbGluZSBmdW5jdGlvbiBhcyBwYXJ0IG9mIHRoaXMgcmVmYWN0b3JpbmcsIHdhcnJhbnRzIGF0dGVudGlvbiBhcyB3ZWxsLlxuXG5UaGUgYEFMTE9DX05PX0NPREVUQUdgIGZsYWcgaXMgaW50ZXJlc3RpbmcgYXMgaXQgc2VlbXMgaXQgYWRkcyBwcm9maWxpbmcgZGF0YSB0byB0aGUgYWxsb2NhdGlvbnMuIFRoaXMgZmxhZyBzZWVtcyB0byBiZSBpbXBvcnRhbnQsIHNvIHdlIHNob3VsZCBlbmFibGUgYE1FTV9BTExPQ19QUk9GSUxJTkdgLlxuXG5TbywgaGVyZSdzIHRoZSBmaW5hbCBsaXN0OlxuXG4qKkZvY3VzU3ltYm9sczoqKlxuKiAgIGBhbGxvY19mcm96ZW5fcGFnZXNfbm9sb2NrX25vcHJvZmBcbiogICBgYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2ZgXG5cbioqRW5hYmxlQ29uZmlnczoqKlxuKiAgIGBNRU1fQUxMT0NfUFJPRklMSU5HYFxuXG5UaGUgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCBieSB0YXJnZXRpbmcgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGFuZCBjb25maWd1cmF0aW9ucywgd2UnbGwgZ2FpbiBzaWduaWZpY2FudCBjb3ZlcmFnZSBvZiB0aGUgcGFnZSBhbGxvY2F0b3IgQVBJIGNoYW5nZXMsIHBheWluZyBzcGVjaWZpYyBhdHRlbnRpb24gdG8gdGhlIHJlZmFjdG9yZWQgbG9ja2luZyBhbmQgcHJvZmlsaW5nIG1lY2hhbmlzbXMsIG1pbmltaXppbmcgdGhlIHJpc2sgb2YgaW50cm9kdWNpbmcgcmVncmVzc2lvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NDU2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMzozMDo1OC41NjQ4MTcwNzJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDU4ODk0NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZy5kZWJ1Zz0zMTE9Y29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMjMtXFxubW0vS2NvbmZpZy5kZWJ1ZzozMjQ6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcXG5tbS9LY29uZmlnLmRlYnVnLTMyNS1cXHRib29sIFxcXCJFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMzctXFxubW0vS2NvbmZpZy5kZWJ1ZzozMzg6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMzktXFx0Ym9vbCBcXFwiRW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0zNDItXFxubW0vS2NvbmZpZy5kZWJ1ZzozNDM6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcXG5tbS9LY29uZmlnLmRlYnVnLTM0NC1cXHRib29sIFxcXCJNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxlciBkZWJ1Z2dpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAzOjMxOjAwLjY3MDcxMTU2M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODc2MzY3NjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ2hvaWNlcyBmb3IgTWVtb3J5IEFsbG9jYXRpb24gUHJvZmlsaW5nKipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgbmVlZGVkIHRvIGVmZmVjdGl2ZWx5IHByb2ZpbGUgdGhlc2UgbWVtb3J5IGFsbG9jYXRpb24gY2hhbmdlcyByZWxhdGVkIHRvIGBBTExPQ19OT19DT0RFVEFHYC4gUmlnaHQsIHRoZSBrZXkgaXMgYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBUaGF0J3MgdGhlIG9uZS4gSSBhbHNvIG5lZWQgdG8gZW5zdXJlIGl0J3MgZW5hYmxlZCBieSBkZWZhdWx0LCBzbyBJJ2xsIGFkZCBgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRgIGFzIHdlbGwuIFdhaXQgYSBzZWNvbmQsIHRoZSBndWlkYW5jZSBpcyBub3QgdG8gbGlzdCBnZW5lcmljIGNvbmZpZ3MuIFRoaXMgaXMgc3BlY2lmaWMsIGhvd2V2ZXIsIGFzIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBkaXJlY3RseSBhZGRyZXNzZXMgdGhlIG1vZGlmaWNhdGlvbnMgbWFkZSB3aXRoIGBBTExPQ19OT19DT0RFVEFHYC5cblxuTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhvc2UgRm9jdXNTeW1ib2xzIG9uZSBtb3JlIHRpbWUuIEkgc2VlIGBhbGxvY19mcm96ZW5fcGFnZXNfbm9sb2NrX25vcHJvZmAgYW5kIGBhbGxvY19wYWdlc19ub2RlX25vcHJvZmAgYXJlIGluY2x1ZGVkIGluIHRoZSBjaGFuZ2VzLCBhbmQgYXJlIGV4YWN0bHkgd2hhdCBJIG5lZWQuIFBlcmZlY3QuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gdGhpcywgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MDQ3LCJPdXRwdXRUb2tlbnMiOjE5OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMzozMTowNS41NDcwODM2MzlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjA2OTgwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX2Zyb3plbl9wYWdlc19ub2xvY2tfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19wYWdlc19ub2RlX25vcHJvZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgaW50ZXJuYWwgcGFnZSBhbGxvY2F0b3IgQVBJIGJ5IGludHJvZHVjaW5nIGBhbGxvY19mbGFnc2AgdG8gYF9fYWxsb2NfcGFnZXNfbm9wcm9mYCBhbmQgYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAsIHJlcGxhY2luZyBgX19HRlBfTk9fT0JKX0VYVGAgYW5kIGBBTExPQ19UUllMT0NLYCB3aXRoIGBBTExPQ19OT19DT0RFVEFHYCBhbmQgYEFMTE9DX05PTE9DS2AuIEl0IGFsc28gbW92ZXMgYGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mYCBvdXQtb2YtbGluZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiBwYWdlIGFsbG9jYXRpb24sIGVzcGVjaWFsbHkgaW4gbm9uLWJsb2NraW5nL25vbG9jayBjb250ZXh0cyBhbmQgbWVtb3J5IHByb2ZpbGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfZnJvemVuX3BhZ2VzX25vbG9ja19ub3Byb2ZcIixcbiAgICBcImFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBpbnRlcm5hbCBwYWdlIGFsbG9jYXRvciBBUEkgYnkgaW50cm9kdWNpbmcgYGFsbG9jX2ZsYWdzYCB0byBgX19hbGxvY19wYWdlc19ub3Byb2ZgIGFuZCBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCwgcmVwbGFjaW5nIGBfX0dGUF9OT19PQkpfRVhUYCBhbmQgYEFMTE9DX1RSWUxPQ0tgIHdpdGggYEFMTE9DX05PX0NPREVUQUdgIGFuZCBgQUxMT0NfTk9MT0NLYC4gSXQgYWxzbyBtb3ZlcyBgYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2ZgIG91dC1vZi1saW5lLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHBhZ2UgYWxsb2NhdGlvbiwgZXNwZWNpYWxseSBpbiBub24tYmxvY2tpbmcvbm9sb2NrIGNvbnRleHRzIGFuZCBtZW1vcnkgcHJvZmlsaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:nil,}