Name: series-workflowknn8x Phase: Succeeded StartedAt: 2026-08-10 00:36:55 +0000 UTC FinishedAt: 2026-08-10 04:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknn8x[0] Phase: Succeeded StartedAt: 2026-08-10 00:36:55 +0000 UTC FinishedAt: 2026-08-10 00:55:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknn8x[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 00:36:55 +0000 UTC FinishedAt: 2026-08-10 00:55:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUTEX", "FUTEX_PI", "RT_MUTEXES", "MMU" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUTEX", "FUTEX_PI", "RT_MUTEXES", "MMU" ], "series_id": "8b1a9396-77fb-4def-99f3-7c9dfd99d413" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "futex_lock_pi", "futex_wait_requeue_pi", "futex_requeue", "futex_exec_release_begin", "futex_exec_release_end" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAwOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYJiMzNDssCiAgICAmIzM0O0ZVVEVYX1BJJiMzNDssCiAgICAmIzM0O1JUX01VVEVYRVMmIzM0OywKICAgICYjMzQ7TU1VJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnV0ZXhfbG9ja19waSYjMzQ7LAogICAgJiMzNDtmdXRleF93YWl0X3JlcXVldWVfcGkmIzM0OywKICAgICYjMzQ7ZnV0ZXhfcmVxdWV1ZSYjMzQ7LAogICAgJiMzNDtmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4mIzM0OywKICAgICYjMzQ7ZnV0ZXhfZXhlY19yZWxlYXNlX2VuZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGlzc3VlIHJlbGF0ZWQgdG8gZnV0ZXhlcyBhbmQgYGV4ZWN2ZWAuIEl0IHNwbGl0cyBgZnV0ZXhfZXhlY19yZWxlYXNlYCBpbnRvIGEgYmVnaW4vZW5kIHBhaXIgdG8gaG9sZCB0aGUgYGV4aXRfbXV0ZXhgIGFjcm9zcyB0aGUgYG1tYCByZXBsYWNlbWVudCBpbiBgZXhlY19tbWFwYCwgYW5kIGFkZHMgYSBjaGVjayBpbiBgYXR0YWNoX3RvX3BpX293bmVyYCB0byBlbnN1cmUgdGhlIHRhc2smIzM5O3MgYG1tYCBtYXRjaGVzIHRoZSBmdXRleCBrZXkmIzM5O3MgYG1tYC4gVGhlc2UgY2hhbmdlcyBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgYnVncyBkdXJpbmcgZXhlYy4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCB0aGUgYnVncyB0aGlzIHBhdGNoIGFpbXMgdG8gZml4LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gYSBmdXRleCBQSSBvd25lciBleGVjaW5nIGFuZCBhbm90aGVyIHRhc2sgdHJ5aW5nIHRvIGF0dGFjaCB0byB0aGUgUEkgb3duZXIuIEl0IHNwbGl0cyBgZnV0ZXhfZXhlY19yZWxlYXNlYCBpbnRvIHR3byBwaGFzZXMgKGBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5gIGFuZCBgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZGApIGFuZCBhZGRzIGEgY2hlY2sgaW4gYGF0dGFjaF90b19waV9vd25lcmAgdG8gdmVyaWZ5IHRoZSB0YXNrJiMzOTtzIGBtbWAgaGFzbiYjMzk7dCBjaGFuZ2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIGFuZCBwcm9jZXNzIGV4ZWN1dGlvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAwOjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzIzYTc4ZjI2ODY4MmY2NjQ3NWI1ZDkyNTVmNWNlMGQ2ZmQwOGUzMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDAwOjUyOjU4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xuaW5kZXggYzdiOGYyZDYzNjZjNC4uNDJlYjk4ZmJkMTI1OSAxMDA2NDRcbi0tLSBhL2ZzL2V4ZWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXhlYy5jXG5AQCAtNjUsNiAmIzQzOzY1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb191cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb3JlZHVtcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Z1dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lX25hbWVzcGFjZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcl9ldmVudHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JzZXEuaFx1MDAzZVxuQEAgLTg1Nyw4ICYjNDM7ODU4LDEwIEBAIHN0YXRpYyBpbnQgZXhlY19tbWFwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4gXHRleGVjX21tX3JlbGVhc2UodHNrLCBvbGRfbW0pO1xuIFxuIFx0cmV0ID0gZG93bl93cml0ZV9raWxsYWJsZShcdTAwMjZ0c2stXHUwMDNlc2lnbmFsLVx1MDAzZWV4ZWNfdXBkYXRlX2xvY2spO1xuLVx0aWYgKHJldClcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRmdXRleF9leGVjX3JlbGVhc2VfZW5kKHRzayk7XG4gXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKG9sZF9tbSkge1xuIFx0XHQvKlxuQEAgLTg2OSw2ICYjNDM7ODcyLDcgQEAgc3RhdGljIGludCBleGVjX21tYXAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcdFx0cmV0ID0gbW1hcF9yZWFkX2xvY2tfa2lsbGFibGUob2xkX21tKTtcbiBcdFx0aWYgKHJldCkge1xuIFx0XHRcdHVwX3dyaXRlKFx1MDAyNnRzay1cdTAwM2VzaWduYWwtXHUwMDNlZXhlY191cGRhdGVfbG9jayk7XG4mIzQzO1x0XHRcdGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmQodHNrKTtcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4gXHR9XG5AQCAtODk2LDYgJiM0Mzs5MDAsNyBAQCBzdGF0aWMgaW50IGV4ZWNfbW1hcChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFx0XHRsb2NhbF9pcnFfZW5hYmxlKCk7XG4gXHRscnVfZ2VuX2FkZF9tbShtbSk7XG4gXHR0YXNrX3VubG9jayh0c2spO1xuJiM0MztcdGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmQodHNrKTtcbiBcdGxydV9nZW5fdXNlX21tKG1tKTtcbiBcdGlmIChvbGRfbW0pIHtcbiBcdFx0bW1hcF9yZWFkX3VubG9jayhvbGRfbW0pO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnV0ZXguaCBiL2luY2x1ZGUvbGludXgvZnV0ZXguaFxuaW5kZXggNTFmNGNjZGM5MDkyNy4uMzI0ZjQ5NDkzY2JiNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnV0ZXguaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mdXRleC5oXG5AQCAtNzIsNyAmIzQzOzcyLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4gXG4gdm9pZCBmdXRleF9leGl0X3JlY3Vyc2l2ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7XG4gdm9pZCBmdXRleF9leGl0X3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xuLXZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTtcbiYjNDM7dm9pZCBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4mIzQzO1x0X19hY3F1aXJlcyhcdTAwMjZ0c2stXHUwMDNlZnV0ZXguZXhpdF9tdXRleCk7XG4mIzQzO3ZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbiYjNDM7XHRfX3JlbGVhc2VzKFx1MDAyNnRzay1cdTAwM2VmdXRleC5leGl0X211dGV4KTtcbiBcbiBsb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXG4gXHQgICAgICB1MzIgX191c2VyICp1YWRkcjIsIHUzMiB2YWwyLCB1MzIgdmFsMyk7XG5AQCAtOTAsNyAmIzQzOzkzLDggQEAgc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykgeyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2V4aXRfcmVjdXJzaXZlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhpdF9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH1cbi1zdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH1cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykgeyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9leGVjX3JlbGVhc2VfZW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH1cbiBzdGF0aWMgaW5saW5lIGxvbmcgZG9fZnV0ZXgodTMyIF9fdXNlciAqdWFkZHIsIGludCBvcCwgdTMyIHZhbCwga3RpbWVfdCAqdGltZW91dCxcbiBcdFx0XHQgICAgdTMyIF9fdXNlciAqdWFkZHIyLCB1MzIgdmFsMiwgdTMyIHZhbDMpXG4ge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jXG5pbmRleCBmMGUyZTEzMWE5YTVhLi5kMjczNmIyNGZmNzUyIDEwMDY0NFxuLS0tIGEva2VybmVsL2ZvcmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2ZvcmsuY1xuQEAgLTE1MTAsNyAmIzQzOzE1MTAsNyBAQCB2b2lkIGV4aXRfbW1fcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXG4gdm9pZCBleGVjX21tX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbi1cdGZ1dGV4X2V4ZWNfcmVsZWFzZSh0c2spO1xuJiM0MztcdGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbih0c2spO1xuIFx0bW1fcmVsZWFzZSh0c2ssIG1tKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4L2NvcmUuYyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbmluZGV4IDEyOGM1NzUyZjIyNWMuLmE5MjBkZmJkMDM5MGQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZnV0ZXgvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZnV0ZXgvY29yZS5jXG5AQCAtMTUzOSw3ICYjNDM7MTUzOSw4IEBAIHN0YXRpYyB2b2lkIGZ1dGV4X2NsZWFudXBfZW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgc3RhdGUpXG4gXHRtdXRleF91bmxvY2soXHUwMDI2dHNrLVx1MDAzZWZ1dGV4LmV4aXRfbXV0ZXgpO1xuIH1cbiBcbi12b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbiYjNDM7dm9pZCBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4mIzQzO1x0X19hY3F1aXJlcyhcdTAwMjZ0c2stXHUwMDNlZnV0ZXguZXhpdF9tdXRleClcbiB7XG4gXHQvKlxuIFx0ICogVGhlIHN0YXRlIGhhbmRsaW5nIGlzIGRvbmUgZm9yIGNvbnNpc3RlbmN5LCBidXQgaW4gdGhlIGNhc2Ugb2ZcbkBAIC0xNTUwLDYgJiM0MzsxNTUxLDExIEBAIHZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuIFx0ICovXG4gXHRmdXRleF9jbGVhbnVwX2JlZ2luKHRzayk7XG4gXHRmdXRleF9jbGVhbnVwKHRzayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbiYjNDM7XHRfX3JlbGVhc2VzKFx1MDAyNnRzay1cdTAwM2VmdXRleC5leGl0X211dGV4KVxuJiM0Mzt7XG4gXHQvKlxuIFx0ICogUmVzZXQgdGhlIHN0YXRlIHRvIEZVVEVYX1NUQVRFX09LLiBUaGUgdGFzayBpcyBhbGl2ZSBhbmQgYWJvdXRcbiBcdCAqIGV4ZWMgYSBuZXcgYmluYXJ5LlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC9waS5jIGIva2VybmVsL2Z1dGV4L3BpLmNcbmluZGV4IDc5NTAxMWVhMTIwMmYuLmQ5NzYxMTE5NmIzNGEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZnV0ZXgvcGkuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2Z1dGV4L3BpLmNcbkBAIC00NjUsNiAmIzQzOzQ2NSwxMyBAQCBzdGF0aWMgaW50IGF0dGFjaF90b19waV9vd25lcih1MzIgX191c2VyICp1YWRkciwgdTMyIHV2YWwsIHVuaW9uIGZ1dGV4X2tleSAqa2V5LFxuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuJiM0MztcdGlmIChJU19FTkFCTEVEKENPTkZJR19NTVUpIFx1MDAyNlx1MDAyNiBmdXRleF9rZXlfaXNfcHJpdmF0ZShrZXkpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBSRUFEX09OQ0UocC1cdTAwM2VtbSkgIT0ga2V5LVx1MDAzZXByaXZhdGUubW0pIHtcbiYjNDM7XHRcdHJhd19zcGluX3VubG9ja19pcnEoXHUwMDI2cC1cdTAwM2VwaV9sb2NrKTtcbiYjNDM7XHRcdHB1dF90YXNrX3N0cnVjdChwKTtcbiYjNDM7XHRcdHJldHVybiAtRVNSQ0g7XG4mIzQzO1x0fVxuJiM0MztcbiBcdF9fYXR0YWNoX3RvX3BpX293bmVyKHAsIGtleSwgcHMpO1xuIFx0cmF3X3NwaW5fdW5sb2NrX2lycShcdTAwMjZwLVx1MDAzZXBpX2xvY2spO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAwOjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGVVRFWCYjMzQ7LAogICAgJiMzNDtGVVRFWF9QSSYjMzQ7LAogICAgJiMzNDtSVF9NVVRFWEVTJiMzNDssCiAgICAmIzM0O01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2xvY2tfcGkmIzM0OywKICAgICYjMzQ7ZnV0ZXhfd2FpdF9yZXF1ZXVlX3BpJiMzNDssCiAgICAmIzM0O2Z1dGV4X3JlcXVldWUmIzM0OywKICAgICYjMzQ7ZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luJiMzNDssCiAgICAmIzM0O2Z1dGV4X2V4ZWNfcmVsZWFzZV9lbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGEgZnV0ZXggUEkgb3duZXIgZXhlY2luZyBhbmQgYW5vdGhlciB0YXNrIHRyeWluZyB0byBhdHRhY2ggdG8gdGhlIFBJIG93bmVyLiBJdCBzcGxpdHMgYGZ1dGV4X2V4ZWNfcmVsZWFzZWAgaW50byB0d28gcGhhc2VzIChgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luYCBhbmQgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRgKSBhbmQgYWRkcyBhIGNoZWNrIGluIGBhdHRhY2hfdG9fcGlfb3duZXJgIHRvIHZlcmlmeSB0aGUgdGFzayYjMzk7cyBgbW1gIGhhc24mIzM5O3QgY2hhbmdlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBhbmQgcHJvY2VzcyBleGVjdXRpb24gbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMyM2E3OGYyNjg2ODJmNjY0NzViNWQ5MjU1ZjVjZTBkNmZkMDhlMzAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAwMDo1Mjo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCBjN2I4ZjJkNjM2NmM0Li40MmViOThmYmQxMjU5IDEwMDY0NAotLS0gYS9mcy9leGVjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXhlYy5jCkBAIC02NSw2ICYjNDM7NjUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2lvX3VyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY29yZWR1bXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnV0ZXguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90aW1lX25hbWVzcGFjZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VzZXJfZXZlbnRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcnNlcS5oJmd0OwpAQCAtODU3LDggJiM0Mzs4NTgsMTAgQEAgc3RhdGljIGludCBleGVjX21tYXAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIAlleGVjX21tX3JlbGVhc2UodHNrLCBvbGRfbW0pOwogCiAJcmV0ID0gZG93bl93cml0ZV9raWxsYWJsZSgmYW1wO3Rzay0mZ3Q7c2lnbmFsLSZndDtleGVjX3VwZGF0ZV9sb2NrKTsKLQlpZiAocmV0KQomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlmdXRleF9leGVjX3JlbGVhc2VfZW5kKHRzayk7CiAJCXJldHVybiByZXQ7CiYjNDM7CX0KIAogCWlmIChvbGRfbW0pIHsKIAkJLyoKQEAgLTg2OSw2ICYjNDM7ODcyLDcgQEAgc3RhdGljIGludCBleGVjX21tYXAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIAkJcmV0ID0gbW1hcF9yZWFkX2xvY2tfa2lsbGFibGUob2xkX21tKTsKIAkJaWYgKHJldCkgewogCQkJdXBfd3JpdGUoJmFtcDt0c2stJmd0O3NpZ25hbC0mZ3Q7ZXhlY191cGRhdGVfbG9jayk7CiYjNDM7CQkJZnV0ZXhfZXhlY19yZWxlYXNlX2VuZCh0c2spOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KQEAgLTg5Niw2ICYjNDM7OTAwLDcgQEAgc3RhdGljIGludCBleGVjX21tYXAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCWxydV9nZW5fYWRkX21tKG1tKTsKIAl0YXNrX3VubG9jayh0c2spOwomIzQzOwlmdXRleF9leGVjX3JlbGVhc2VfZW5kKHRzayk7CiAJbHJ1X2dlbl91c2VfbW0obW0pOwogCWlmIChvbGRfbW0pIHsKIAkJbW1hcF9yZWFkX3VubG9jayhvbGRfbW0pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdXRleC5oIGIvaW5jbHVkZS9saW51eC9mdXRleC5oCmluZGV4IDUxZjRjY2RjOTA5MjcuLjMyNGY0OTQ5M2NiYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnV0ZXguaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Z1dGV4LmgKQEAgLTcyLDcgJiM0Mzs3MiwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogCiB2b2lkIGZ1dGV4X2V4aXRfcmVjdXJzaXZlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKIHZvaWQgZnV0ZXhfZXhpdF9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKLXZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKJiM0Mzt2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKJiM0MzsJX19hY3F1aXJlcygmYW1wO3Rzay0mZ3Q7ZnV0ZXguZXhpdF9tdXRleCk7CiYjNDM7dm9pZCBmdXRleF9leGVjX3JlbGVhc2VfZW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQomIzQzOwlfX3JlbGVhc2VzKCZhbXA7dHNrLSZndDtmdXRleC5leGl0X211dGV4KTsKIAogbG9uZyBkb19mdXRleCh1MzIgX191c2VyICp1YWRkciwgaW50IG9wLCB1MzIgdmFsLCBrdGltZV90ICp0aW1lb3V0LAogCSAgICAgIHUzMiBfX3VzZXIgKnVhZGRyMiwgdTMyIHZhbDIsIHUzMiB2YWwzKTsKQEAgLTkwLDcgJiM0Mzs5Myw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhpdF9yZWN1cnNpdmUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHsgfQogc3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2V4aXRfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykgeyB9CiBzdGF0aWMgaW5saW5lIGxvbmcgZG9fZnV0ZXgodTMyIF9fdXNlciAqdWFkZHIsIGludCBvcCwgdTMyIHZhbCwga3RpbWVfdCAqdGltZW91dCwKIAkJCSAgICB1MzIgX191c2VyICp1YWRkcjIsIHUzMiB2YWwyLCB1MzIgdmFsMykKIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IGYwZTJlMTMxYTlhNWEuLmQyNzM2YjI0ZmY3NTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2ZvcmsuYwpAQCAtMTUxMCw3ICYjNDM7MTUxMCw3IEBAIHZvaWQgZXhpdF9tbV9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIAogdm9pZCBleGVjX21tX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewotCWZ1dGV4X2V4ZWNfcmVsZWFzZSh0c2spOwomIzQzOwlmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4odHNrKTsKIAltbV9yZWxlYXNlKHRzaywgbW0pOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuYwppbmRleCAxMjhjNTc1MmYyMjVjLi5hOTIwZGZiZDAzOTBkIDEwMDY0NAotLS0gYS9rZXJuZWwvZnV0ZXgvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mdXRleC9jb3JlLmMKQEAgLTE1MzksNyAmIzQzOzE1MzksOCBAQCBzdGF0aWMgdm9pZCBmdXRleF9jbGVhbnVwX2VuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHN0YXRlKQogCW11dGV4X3VubG9jaygmYW1wO3Rzay0mZ3Q7ZnV0ZXguZXhpdF9tdXRleCk7CiB9CiAKLXZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQomIzQzO3ZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQomIzQzOwlfX2FjcXVpcmVzKCZhbXA7dHNrLSZndDtmdXRleC5leGl0X211dGV4KQogewogCS8qCiAJICogVGhlIHN0YXRlIGhhbmRsaW5nIGlzIGRvbmUgZm9yIGNvbnNpc3RlbmN5LCBidXQgaW4gdGhlIGNhc2Ugb2YKQEAgLTE1NTAsNiAmIzQzOzE1NTEsMTEgQEAgdm9pZCBmdXRleF9leGVjX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiAJICovCiAJZnV0ZXhfY2xlYW51cF9iZWdpbih0c2spOwogCWZ1dGV4X2NsZWFudXAodHNrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBmdXRleF9leGVjX3JlbGVhc2VfZW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQomIzQzOwlfX3JlbGVhc2VzKCZhbXA7dHNrLSZndDtmdXRleC5leGl0X211dGV4KQomIzQzO3sKIAkvKgogCSAqIFJlc2V0IHRoZSBzdGF0ZSB0byBGVVRFWF9TVEFURV9PSy4gVGhlIHRhc2sgaXMgYWxpdmUgYW5kIGFib3V0CiAJICogZXhlYyBhIG5ldyBiaW5hcnkuCmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvcGkuYyBiL2tlcm5lbC9mdXRleC9waS5jCmluZGV4IDc5NTAxMWVhMTIwMmYuLmQ5NzYxMTE5NmIzNGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mdXRleC9waS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mdXRleC9waS5jCkBAIC00NjUsNiAmIzQzOzQ2NSwxMyBAQCBzdGF0aWMgaW50IGF0dGFjaF90b19waV9vd25lcih1MzIgX191c2VyICp1YWRkciwgdTMyIHV2YWwsIHVuaW9uIGZ1dGV4X2tleSAqa2V5LAogCQlyZXR1cm4gcmV0OwogCX0KIAomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfTU1VKSAmYW1wOyZhbXA7IGZ1dGV4X2tleV9pc19wcml2YXRlKGtleSkgJmFtcDsmYW1wOwomIzQzOwkgICAgUkVBRF9PTkNFKHAtJmd0O21tKSAhPSBrZXktJmd0O3ByaXZhdGUubW0pIHsKJiM0MzsJCXJhd19zcGluX3VubG9ja19pcnEoJmFtcDtwLSZndDtwaV9sb2NrKTsKJiM0MzsJCXB1dF90YXNrX3N0cnVjdChwKTsKJiM0MzsJCXJldHVybiAtRVNSQ0g7CiYjNDM7CX0KJiM0MzsKIAlfX2F0dGFjaF90b19waV9vd25lcihwLCBrZXksIHBzKTsKIAlyYXdfc3Bpbl91bmxvY2tfaXJxKCZhbXA7cC0mZ3Q7cGlfbG9jayk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYxMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldyBGdXRleCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgYSBmZXcgY3J1Y2lhbCBhcmVhczogYGZzL2V4ZWMuY2AsIGBpbmNsdWRlL2xpbnV4L2Z1dGV4LmhgLCBga2VybmVsL2ZvcmsuY2AsIGFuZCwgbW9zdCBub3RhYmx5LCBga2VybmVsL2Z1dGV4L2NvcmUuY2AgYW5kIGBrZXJuZWwvZnV0ZXgvcGkuY2AuIEltbWVkaWF0ZWx5LCBteSBzcGlkZXkgc2Vuc2VzIGFyZSB0aW5nbGluZyDigJMgdGhpcyB3YXJyYW50cyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgaXMgYSBjb3JlIGtlcm5lbCBtb2RpZmljYXRpb24gaW52b2x2aW5nIGZ1dGV4ZXMgYW5kIGV4ZWMsIHdoaWNoLCBhcyB3ZSBrbm93LCBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyBhbmQgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4KClRoZSBwYXRjaCBzZWVtcyB0byBzcGxpdCBgZnV0ZXhfZXhlY19yZWxlYXNlYCBpbnRvIGEgYmVnaW4gYW5kIGVuZCBzZXF1ZW5jZSwgYW5kIHRoZXJlJiMzOTtzIGEgbmV3IGNoZWNrIGFkZGVkIGluIGBhdHRhY2hfdG9fcGlfb3duZXJgIHdpdGhpbiBga2VybmVsL2Z1dGV4L3BpLmNgLiAgU3BlY2lmaWNhbGx5LCB0aGF0IGBhdHRhY2hfdG9fcGlfb3duZXJgIGNoZWNrIGlzIGludGVyZXN0aW5nOiBJdCBhcHBlYXJzIHRvIGJlIHZlcmlmeWluZyB0aGF0IHRoZSBtZW1vcnkgbWFwIGFzc29jaWF0ZWQgd2l0aCBhIHByaXZhdGUgZnV0ZXgga2V5IG1hdGNoZXMgdGhlIHByb2Nlc3MmIzM5O3MgbW0gKG1lbW9yeSBtYW5hZ2VtZW50KS4gSSBuZWVkIHRvIGRpZyBpbnRvIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGlmIHRoYXQgY2hlY2sgZmFpbHMuCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldCBkdXJpbmcgZnV6emluZy4gSSYjMzk7bSB0aGlua2luZzoKCiogICBgYXR0YWNoX3RvX3BpX293bmVyYCDigJMgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIEkmIzM5O2xsIHdhbnQgdG8gZm9jdXMgb24gaXRzIGNhbGxlcnMgYXMgd2VsbC4KKiAgIGBleGVjX21tYXBgIOKAkyBhbHNvIHN0YXRpYy4gVGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiByZXF1aXJlIHNjcnV0aW55IGFzIHdlbGwuCiogICBgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luYCBhbmQgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRgIOKAkyB0aGVzZSBhcmUgdGhlIG5ld2x5IGludHJvZHVjZWQgc3BsaXQgZnVuY3Rpb25zLiBDbGVhcmx5IHRoZXkgYXJlIGEgaGlnaCBwcmlvcml0eS4KKiAgIGBleGl0X21tX3JlbGVhc2VgIGFuZCBgZXhlY19tbV9yZWxlYXNlYCDigJMgc2luY2UgdGhpcyBjb25jZXJucyBleGVjLCB0aGVzZSBmdW5jdGlvbnMgdGhhdCBtYW5hZ2UgbWVtb3J5IG1hcHBpbmcgZHVyaW5nIGV4ZWN1dGlvbiB3b3VsZCBiZSBlc3NlbnRpYWwgYXMgd2VsbC4KCkkgc2hvdWxkIHByb2JhYmx5IGRpdmUgaW50byBga2VybmVsL2Z1dGV4L3BpLmNgIHJpZ2h0IG5vdyB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2Ygd2hvIGNhbGxzIGBhdHRhY2hfdG9fcGlfb3duZXJgLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGdyYXBoIHdpbGwgYmUgY3JpdGljYWwgZm9yIGNyYWZ0aW5nIGVmZmVjdGl2ZSBmdXp6aW5nIHNjZW5hcmlvcy4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0dGFjaF90b19waV9vd25lciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9waS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9waS5jPTMyMT1zdGF0aWMgaW50IGhhbmRsZV9leGl0X3JhY2UodTMyIF9fdXNlciAqdWFkZHIsIHUzMiB1dmFsLFxuLS1cbmtlcm5lbC9mdXRleC9waS5jLTM0NC1cdCAqICAgZXhpdF9yb2J1c3RfbGlzdCh0c2spIHtcdCAgICAqdWFkZHIgPSAweDgwMDAwUElEO1xua2VybmVsL2Z1dGV4L3BpLmM6MzQ1Olx0ICogICAgICBTZXQgb3duZXIgZGllZFx0XHQgICAgYXR0YWNoX3RvX3BpX293bmVyKCkge1xua2VybmVsL2Z1dGV4L3BpLmMtMzQ2LVx0ICogICAgKnVhZGRyID0gMHhDMDAwMDAwMDtcdCAgICAgdHNrID0gZ2V0X3Rhc2soUElEKTtcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy0zNzYtXG5rZXJuZWwvZnV0ZXgvcGkuYzozNzc6c3RhdGljIHZvaWQgX19hdHRhY2hfdG9fcGlfb3duZXIoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bmlvbiBmdXRleF9rZXkgKmtleSxcbmtlcm5lbC9mdXRleC9waS5jLTM3OC1cdFx0XHRcdCBzdHJ1Y3QgZnV0ZXhfcGlfc3RhdGUgKipwcylcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy00MTEtICovXG5rZXJuZWwvZnV0ZXgvcGkuYzo0MTI6c3RhdGljIGludCBhdHRhY2hfdG9fcGlfb3duZXIodTMyIF9fdXNlciAqdWFkZHIsIHUzMiB1dmFsLCB1bmlvbiBmdXRleF9rZXkgKmtleSxcbmtlcm5lbC9mdXRleC9waS5jLTQxMy1cdFx0XHQgICAgICBzdHJ1Y3QgZnV0ZXhfcGlfc3RhdGUgKipwcyxcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy00NzQtXG5rZXJuZWwvZnV0ZXgvcGkuYzo0NzU6XHRfX2F0dGFjaF90b19waV9vd25lcihwLCBrZXksIHBzKTtcbmtlcm5lbC9mdXRleC9waS5jLTQ3Ni1cdHJhd19zcGluX3VubG9ja19pcnEoXHUwMDI2cC1cdTAwM2VwaV9sb2NrKTtcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYz01MjM9aW50IGZ1dGV4X2xvY2tfcGlfYXRvbWljKHUzMiBfX3VzZXIgKnVhZGRyLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxuLS1cbmtlcm5lbC9mdXRleC9waS5jLTU5MC1cdFx0ICpcbmtlcm5lbC9mdXRleC9waS5jOjU5MTpcdFx0ICogTm8gbmVlZCB0byBkbyB0aGUgZnVsbCBhdHRhY2hfdG9fcGlfb3duZXIoKSBleGVyY2lzZVxua2VybmVsL2Z1dGV4L3BpLmMtNTkyLVx0XHQgKiBiZWNhdXNlIEB0YXNrIGlzIGtub3duIGFuZCB2YWxpZC5cbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy01OTUtXHRcdFx0cmF3X3NwaW5fbG9ja19pcnEoXHUwMDI2dGFzay1cdTAwM2VwaV9sb2NrKTtcbmtlcm5lbC9mdXRleC9waS5jOjU5NjpcdFx0XHRfX2F0dGFjaF90b19waV9vd25lcih0YXNrLCBrZXksIHBzKTtcbmtlcm5lbC9mdXRleC9waS5jLTU5Ny1cdFx0XHRyYXdfc3Bpbl91bmxvY2tfaXJxKFx1MDAyNnRhc2stXHUwMDNlcGlfbG9jayk7XG4tLVxua2VybmVsL2Z1dGV4L3BpLmMtNjE1LVx0ICovXG5rZXJuZWwvZnV0ZXgvcGkuYzo2MTY6XHRyZXR1cm4gYXR0YWNoX3RvX3BpX293bmVyKHVhZGRyLCBuZXd2YWwsIGtleSwgcHMsIGV4aXRpbmcpO1xua2VybmVsL2Z1dGV4L3BpLmMtNjE3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTM1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldCwgcmVmbGVjdGluZyBteSBleHBlcnQgdW5kZXJzdGFuZGluZzoKCioqQW5hbHl6aW5nIGBmdXRleF9sb2NrX3BpX2F0b21pY2AmIzM5O3MgQ2FsbGVycyoqCgpPa2F5LCBzbyBgYXR0YWNoX3RvX3BpX293bmVyYCBpcyBiZWluZyBjYWxsZWQgZnJvbSB3aXRoaW4gYGZ1dGV4X2xvY2tfcGlfYXRvbWljYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hvICplbHNlKiBjYWxscyBgZnV0ZXhfbG9ja19waV9hdG9taWNgPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgYWJzb2x1dGVseSBjcml0aWNhbCBoZXJlLiBJdCYjMzk7cyB0aGUgb25seSB3YXkgdG8gZ3Jhc3AgdGhlIGJyb2FkZXIgY29uY3VycmVuY3kgaW1wbGljYXRpb25zLCBwb3RlbnRpYWwgY29udGVudGlvbiBwb2ludHMsIGFuZCB0aGUgcm9sZSBvZiB0aGlzIGBhdHRhY2hfdG9fcGlfb3duZXJgIGNhbGwgd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZSBvZiBwcmlvcml0eSBpbmhlcml0YW5jZSBsb2NraW5nLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBmdXRleF9sb2NrX3BpX2F0b21pY2AgdG8gc2VlIGl0cyB1cHN0cmVhbSBkZXBlbmRlbmNpZXMuIEtub3dpbmcgdGhlIGNhbGwgZ3JhcGggaXMgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgd2h5IGl04oCZcyBiZWluZyBpbnZva2VkIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGxvY2tpbmcgc3RyYXRlZ3kuIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgYWxsIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBmdW5jdGlvbiB0byBhc3Nlc3Mgd2hlcmUgYW5kIGhvdyBwcmlvcml0eSBpbmhlcml0YW5jZSBpcyBiZWluZyBlbXBsb3llZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9sb2NrX3BpX2F0b21pYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2Z1dGV4Lmg9Mzg0PWV4dGVybiB2b2lkIGZ1dGV4X3FfdW5sb2NrKHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIpXG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzg2LVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6Mzg3OmV4dGVybiBpbnQgZnV0ZXhfbG9ja19waV9hdG9taWModTMyIF9fdXNlciAqdWFkZHIsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIsXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zODgtXHRcdFx0XHR1bmlvbiBmdXRleF9rZXkgKmtleSxcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYz0zMjE9c3RhdGljIGludCBoYW5kbGVfZXhpdF9yYWNlKHUzMiBfX3VzZXIgKnVhZGRyLCB1MzIgdXZhbCxcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy0zMzktXHQgKiAgZG9fZXhpdCgpXHRcdFx0IGZ1dGV4X2xvY2tfcGkoKVxua2VybmVsL2Z1dGV4L3BpLmM6MzQwOlx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1dGV4X2xvY2tfcGlfYXRvbWljKClcbmtlcm5lbC9mdXRleC9waS5jLTM0MS1cdCAqICAgZXhpdF9zaWduYWxzKHRzaylcdFx0ICAgIE5vIHdhaXRlcnM6XG4tLVxua2VybmVsL2Z1dGV4L3BpLmM9NDgzPXN0YXRpYyBpbnQgbG9ja19waV91cGRhdGVfYXRvbWljKHUzMiBfX3VzZXIgKnVhZGRyLCB1MzIgdXZhbCwgdTMyIG5ld3ZhbClcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy00OTktLyoqXG5rZXJuZWwvZnV0ZXgvcGkuYzo1MDA6ICogZnV0ZXhfbG9ja19waV9hdG9taWMoKSAtIEF0b21pYyB3b3JrIHJlcXVpcmVkIHRvIGFjcXVpcmUgYSBwaSBhd2FyZSBmdXRleFxua2VybmVsL2Z1dGV4L3BpLmMtNTAxLSAqIEB1YWRkcjpcdFx0dGhlIHBpIGZ1dGV4IHVzZXIgYWRkcmVzc1xuLS1cbmtlcm5lbC9mdXRleC9waS5jLTUyMi0gKi9cbmtlcm5lbC9mdXRleC9waS5jOjUyMzppbnQgZnV0ZXhfbG9ja19waV9hdG9taWModTMyIF9fdXNlciAqdWFkZHIsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIsXG5rZXJuZWwvZnV0ZXgvcGkuYy01MjQtXHRcdFx0IHVuaW9uIGZ1dGV4X2tleSAqa2V5LFxuLS1cbmtlcm5lbC9mdXRleC9waS5jPTkzMD1pbnQgZnV0ZXhfbG9ja19waSh1MzIgX191c2VyICp1YWRkciwgdW5zaWduZWQgaW50IGZsYWdzLCBrdGltZV90ICp0aW1lLCBpbnQgdHJ5bG9jaylcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy05NTktXG5rZXJuZWwvZnV0ZXgvcGkuYzo5NjA6XHRcdHJldCA9IGZ1dGV4X2xvY2tfcGlfYXRvbWljKHVhZGRyLCBoYiwgXHUwMDI2cS5rZXksIFx1MDAyNnEucGlfc3RhdGUsIGN1cnJlbnQsXG5rZXJuZWwvZnV0ZXgvcGkuYy05NjEtXHRcdFx0XHRcdCAgIFx1MDAyNmV4aXRpbmcsIDApO1xuLS1cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM9MjMwPXZvaWQgcmVxdWV1ZV9waV93YWtlX2Z1dGV4KHN0cnVjdCBmdXRleF9xICpxLCB1bmlvbiBmdXRleF9rZXkgKmtleSxcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTI2Ny0gKiBXYWtlIHRoZSB0b3Agd2FpdGVyIGlmIHdlIHN1Y2NlZWQuICBJZiB0aGUgY2FsbGVyIHNwZWNpZmllZCBzZXRfd2FpdGVycyxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MjY4OiAqIHRoZW4gZGlyZWN0IGZ1dGV4X2xvY2tfcGlfYXRvbWljKCkgdG8gZm9yY2Ugc2V0dGluZyB0aGUgRlVURVhfV0FJVEVSUyBiaXQuXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTI2OS0gKiBoYjEgYW5kIGhiMiBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlci5cbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTI4MT1mdXRleF9wcm94eV90cnlsb2NrX2F0b21pYyh1MzIgX191c2VyICpwaWZ1dGV4LCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMSxcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTI5OC1cdCAqIElmIHRoZSBjYWxsZXIgaW50ZW5kcyB0byByZXF1ZXVlIG1vcmUgdGhhbiAxIHdhaXRlciB0byBwaWZ1dGV4LFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzoyOTk6XHQgKiBmb3JjZSBmdXRleF9sb2NrX3BpX2F0b21pYygpIHRvIHNldCB0aGUgRlVURVhfV0FJVEVSUyBiaXQgbm93LFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zMDAtXHQgKiBhcyB3ZSBoYXZlIG1lYW5zIHRvIGhhbmRsZSB0aGUgcG9zc2libGUgZmF1bHQuICBJZiBub3QsIGRvbiYjMzk7dCBzZXRcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTMzNS1cdCAqL1xua2VybmVsL2Z1dGV4L3JlcXVldWUuYzozMzY6XHRyZXQgPSBmdXRleF9sb2NrX3BpX2F0b21pYyhwaWZ1dGV4LCBoYjIsIGtleTIsIHBzLCB0b3Bfd2FpdGVyLVx1MDAzZXRhc2ssXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTMzNy1cdFx0XHRcdCAgIGV4aXRpbmcsIHNldF93YWl0ZXJzKTtcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTM1MC1cdFx0Lypcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MzUxOlx0XHQgKiBmdXRleF9sb2NrX3BpX2F0b21pYygpIGRpZCBub3QgYWNxdWlyZSB0aGUgdXNlciBzcGFjZVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zNTItXHRcdCAqIGZ1dGV4LCBidXQgbWFuYWdlZCB0byBlc3RhYmxpc2ggdGhlIHByb3h5IGxvY2sgYW5kIHBpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDA6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ5MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgS2VybmVsJiMzOTtzIEZ1dGV4IEltcGxlbWVudGF0aW9uIGFuZCBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGZ1dGV4IGxvY2tpbmcsIHNwZWNpZmljYWxseSB0aGUgcHJvY2VzcyBpc29sYXRpb24gdmFyaWFudC4gSSBzZWUgdGhhdCBib3RoIGBmdXRleF9sb2NrX3BpYCBhbmQgYGZ1dGV4X3Byb3h5X3RyeWxvY2tfYXRvbWljYCB1bHRpbWF0ZWx5IGNhbGwgYGZ1dGV4X2xvY2tfcGlfYXRvbWljYC4gTWFrZXMgc2Vuc2UsIHRoZXkmIzM5O3JlIGxpa2VseSBqdXN0IGRpZmZlcmVudCB3cmFwcGVycyBhcm91bmQgdGhlIGNvcmUgYXRvbWljIG9wZXJhdGlvbi4gTm93LCBJIHdhbnQgdG8gdHJhY2UgaG93IHRoaXMgbG9ja2luZyBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBkdXJpbmcgcHJvY2VzcyBsaWZlY3ljbGUgZXZlbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBpcyBoYW5kbGVkIHdoZW4gdGhyZWFkcyBhcmUgcmVsZWFzZWQuIExldCBtZSBjaGVjayB0aGUgYGV4ZWNfbW1fcmVsZWFzZWAgYW5kIGBleGl0X21tX3JlbGVhc2VgIGZ1bmN0aW9ucyB3aXRoaW4gYGtlcm5lbC9mb3JrLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzaG91bGQgYmUgaGFuZGxlZCB3aGVuIHByb2Nlc3NlcyBhcmUgc3dhcHBlZCBvciB0ZXJtaW5hdGVkLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBwcm9jZXNzIGlzb2xhdGlvbiBhbmQgbWVtb3J5IHJlbGVhc2VzIGFyZSBjb3VwbGVkIHdpdGggdGhlc2UgZnV0ZXggb3BlcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleGVjX21tX3JlbGVhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZm9yay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mb3JrLmM9MTUwNT12b2lkIGV4aXRfbW1fcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxua2VybmVsL2ZvcmsuYy0xNTEwLVxua2VybmVsL2ZvcmsuYzoxNTExOnZvaWQgZXhlY19tbV9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbmtlcm5lbC9mb3JrLmMtMTUxMi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDA6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg3MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBQcm9jZXNzIFRlcm1pbmF0aW9uIGFuZCBGdXRleCBJbnRlcmFjdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGZ1dGV4ZXMgaW50ZXJhY3Qgd2l0aCBwcm9jZXNzIHRlcm1pbmF0aW9uIGFuZCBleGVjdXRpb24uIFRoZSBzdGFydGluZyBwb2ludCBzZWVtcyB0byBiZSB0aGF0IGBleGVjX21tX3JlbGVhc2VgLCB0cmlnZ2VyZWQgYnkgYGV4ZWNfbW1hcGAgaW4gYGZzL2V4ZWMuY2AsIGFuZCBgZXhpdF9tbV9yZWxlYXNlYCwgdHJpZ2dlcmVkIGJ5IGBleGl0X21tYCBpbiBga2VybmVsL2V4aXQuY2AsIGFyZSB0aGUga2V5IHBsYXllcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSByZWxhdGUgdG8gZnV0ZXggb3BlcmF0aW9ucyBkdXJpbmcgcHJvY2VzcyB0cmFuc2l0aW9ucy4KCkkgc2VlIHRoYXQgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbmAgYW5kIGBmdXRleF9leGVjX3JlbGVhc2VfZW5kYCBhcmUgY2FsbGVkIGJ5IGBleGVjX21tX3JlbGVhc2VgIGFuZCBgZXhlY19tbWFwYCByZXNwZWN0aXZlbHkuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBmb2N1cy4gTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBvbiB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGludm9sdmVkLgoKVGhlcmVmb3JlLCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBhcmU6CgoqICAgYGZ1dGV4X2xvY2tfcGlgIC0gVGhlIHByb2JhYmxlIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBwcmlvcml0eSBpbmhlcml0YW5jZSBsb2NrcyBhcmUgaGFuZGxlZC4KKiAgIGBmdXRleF9wcm94eV90cnlsb2NrX2F0b21pY2Agb3IgYGZ1dGV4X3JlcXVldWVgIC0gQ3J1Y2lhbCBmb3IgdGhlIHByb2Nlc3Mgb2YgbWFuYWdpbmcgdGhlIHF1ZXVlIGFuZCB0aGUgbG9jayBzdGF0dXMuCiogICBgZXhlY19tbWFwYCAob3IgYGRvX2V4ZWN2ZWF0X2NvbW1vbmAgLyBgYnBybV9leGVjdmVgKSAtIFRoZSBlbnRyeSBwb2ludCBmb3IgZXhlY3V0aW9uIG9yIHJlbGF0ZWQgZXhlY3V0aW9uIG9wZXJhdGlvbnMuCiogICBgZXhpdF9tbV9yZWxlYXNlYCAob3IgYGV4aXRfbW1gIC8gYGRvX2V4aXRgKSAtIEhvdyBtZW1vcnkgbWFuYWdlbWVudCByZXNvdXJjZXMgYXJlIGNsZWFuZWQgdXAgZHVyaW5nIGV4aXQuCgpHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBjb250ZW50aW9uIGR1cmluZyBleGVjIGFuZCBleGl0LCBJIHNob3VsZCBjaGVjayBob3cgdGhlc2UgaW50ZXJhY3Qgd2l0aCBmdXRleGVzLiBOZXh0IHVwIGlzIGxvb2tpbmcgaW50byB0aGUgYGZ1dGV4X2xvY2tfcGlgIGFuZCBgZnV0ZXhfcmVxdWV1ZWAgaW1wbGVtZW50YXRpb25zLiBUaGlzIHNob3VsZCByZXZlYWwgaG93IHByaW9yaXR5IGluaGVyaXRhbmNlIGFuZCBxdWV1ZSBtYW5hZ2VtZW50IGFyZSBwZXJmb3JtZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1dGV4X2xvY2tfcGkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9mdXRleC5oPTM4ND1leHRlcm4gdm9pZCBmdXRleF9xX3VubG9jayhzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKVxuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oLTM4Ni1cbmtlcm5lbC9mdXRleC9mdXRleC5oOjM4NzpleHRlcm4gaW50IGZ1dGV4X2xvY2tfcGlfYXRvbWljKHUzMiBfX3VzZXIgKnVhZGRyLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzg4LVx0XHRcdFx0dW5pb24gZnV0ZXhfa2V5ICprZXksXG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9NDc1PWV4dGVybiBpbnQgZnV0ZXhfdW5sb2NrX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHZvaWQgX191c2VyICpwb3ApO1xua2VybmVsL2Z1dGV4L2Z1dGV4LmgtNDc2LVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6NDc3OmV4dGVybiBpbnQgZnV0ZXhfbG9ja19waSh1MzIgX191c2VyICp1YWRkciwgdW5zaWduZWQgaW50IGZsYWdzLCBrdGltZV90ICp0aW1lLCBpbnQgdHJ5bG9jayk7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC00NzgtXG4tLVxua2VybmVsL2Z1dGV4L3BpLmM9MjAzPXN0YXRpYyBpbnQgYXR0YWNoX3RvX3BpX3N0YXRlKHUzMiBfX3VzZXIgKnVhZGRyLCB1MzIgdXZhbCxcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy0yMTgtXHQgKiBXZSBnZXQgaGVyZSB3aXRoIGhiLVx1MDAzZWxvY2sgaGVsZCwgYW5kIGhhdmluZyBmb3VuZCBhXG5rZXJuZWwvZnV0ZXgvcGkuYzoyMTk6XHQgKiBmdXRleF90b3Bfd2FpdGVyKCkuIFRoaXMgbWVhbnMgdGhhdCBmdXRleF9sb2NrX3BpKCkgb2Ygc2FpZCBmdXRleF9xXG5rZXJuZWwvZnV0ZXgvcGkuYy0yMjAtXHQgKiBoYXMgZHJvcHBlZCB0aGUgaGItXHUwMDNlbG9jayBpbiBiZXR3ZWVuIGZ1dGV4X3F1ZXVlKCkgYW5kIGZ1dGV4X3VucXVldWVfcGkoKSxcbmtlcm5lbC9mdXRleC9waS5jOjIyMTpcdCAqIHdoaWNoIGluIHR1cm4gbWVhbnMgdGhhdCBmdXRleF9sb2NrX3BpKCkgc3RpbGwgaGFzIGEgcmVmZXJlbmNlIG9uXG5rZXJuZWwvZnV0ZXgvcGkuYy0yMjItXHQgKiBvdXIgcGlfc3RhdGUuXG4tLVxua2VybmVsL2Z1dGV4L3BpLmMtMjI0LVx0ICogVGhlIHdhaXRlciBob2xkaW5nIGEgcmVmZXJlbmNlIG9uIEBwaV9zdGF0ZSBhbHNvIHByb3RlY3RzIGFnYWluc3Rcbmtlcm5lbC9mdXRleC9waS5jOjIyNTpcdCAqIHRoZSB1bmxvY2tlZCBwdXRfcGlfc3RhdGUoKSBpbiBmdXRleF91bmxvY2tfcGkoKSwgZnV0ZXhfbG9ja19waSgpXG5rZXJuZWwvZnV0ZXgvcGkuYy0yMjYtXHQgKiBhbmQgZnV0ZXhfd2FpdF9yZXF1ZXVlX3BpKCkgYXMgaXQgY2Fubm90IGdvIHRvIDAgYW5kIGNvbnNlcXVlbnRseVxuLS1cbmtlcm5lbC9mdXRleC9waS5jPTMyMT1zdGF0aWMgaW50IGhhbmRsZV9leGl0X3JhY2UodTMyIF9fdXNlciAqdWFkZHIsIHUzMiB1dmFsLFxuLS1cbmtlcm5lbC9mdXRleC9waS5jLTMzOC1cdCAqIHN5c19leGl0KClcdFx0XHRzeXNfZnV0ZXgoKVxua2VybmVsL2Z1dGV4L3BpLmM6MzM5Olx0ICogIGRvX2V4aXQoKVx0XHRcdCBmdXRleF9sb2NrX3BpKClcbmtlcm5lbC9mdXRleC9waS5jOjM0MDpcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdXRleF9sb2NrX3BpX2F0b21pYygpXG5rZXJuZWwvZnV0ZXgvcGkuYy0zNDEtXHQgKiAgIGV4aXRfc2lnbmFscyh0c2spXHRcdCAgICBObyB3YWl0ZXJzOlxuLS1cbmtlcm5lbC9mdXRleC9waS5jPTQ4Mz1zdGF0aWMgaW50IGxvY2tfcGlfdXBkYXRlX2F0b21pYyh1MzIgX191c2VyICp1YWRkciwgdTMyIHV2YWwsIHUzMiBuZXd2YWwpXG4tLVxua2VybmVsL2Z1dGV4L3BpLmMtNDk5LS8qKlxua2VybmVsL2Z1dGV4L3BpLmM6NTAwOiAqIGZ1dGV4X2xvY2tfcGlfYXRvbWljKCkgLSBBdG9taWMgd29yayByZXF1aXJlZCB0byBhY3F1aXJlIGEgcGkgYXdhcmUgZnV0ZXhcbmtlcm5lbC9mdXRleC9waS5jLTUwMS0gKiBAdWFkZHI6XHRcdHRoZSBwaSBmdXRleCB1c2VyIGFkZHJlc3Ncbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy01MjItICovXG5rZXJuZWwvZnV0ZXgvcGkuYzo1MjM6aW50IGZ1dGV4X2xvY2tfcGlfYXRvbWljKHUzMiBfX3VzZXIgKnVhZGRyLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxua2VybmVsL2Z1dGV4L3BpLmMtNTI0LVx0XHRcdCB1bmlvbiBmdXRleF9rZXkgKmtleSxcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYz04ODQ9aW50IGZpeHVwX3BpX293bmVyKHUzMiBfX3VzZXIgKnVhZGRyLCBzdHJ1Y3QgZnV0ZXhfcSAqcSwgaW50IGxvY2tlZClcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy05MjktICovXG5rZXJuZWwvZnV0ZXgvcGkuYzo5MzA6aW50IGZ1dGV4X2xvY2tfcGkodTMyIF9fdXNlciAqdWFkZHIsIHVuc2lnbmVkIGludCBmbGFncywga3RpbWVfdCAqdGltZSwgaW50IHRyeWxvY2spXG5rZXJuZWwvZnV0ZXgvcGkuYy05MzEte1xuLS1cbmtlcm5lbC9mdXRleC9waS5jLTk1OS1cbmtlcm5lbC9mdXRleC9waS5jOjk2MDpcdFx0cmV0ID0gZnV0ZXhfbG9ja19waV9hdG9taWModWFkZHIsIGhiLCBcdTAwMjZxLmtleSwgXHUwMDI2cS5waV9zdGF0ZSwgY3VycmVudCxcbmtlcm5lbC9mdXRleC9waS5jLTk2MS1cdFx0XHRcdFx0ICAgXHUwMDI2ZXhpdGluZywgMCk7XG4tLVxua2VybmVsL2Z1dGV4L3BpLmM9MTE0OD1zdGF0aWMgaW50IF9fZnV0ZXhfdW5sb2NrX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL2Z1dGV4L3BpLmMtMTIwMC1cdFx0ICpcbmtlcm5lbC9mdXRleC9waS5jOjEyMDE6XHRcdCAqIFNpbmNlIHRoZSBjbGVhbnVwOiBjYXNlIGluIGZ1dGV4X2xvY2tfcGkoKSByZW1vdmVzIHRoZVxua2VybmVsL2Z1dGV4L3BpLmMtMTIwMi1cdFx0ICogcnRfd2FpdGVyIHdpdGhvdXQgaG9sZGluZyBoYi1cdTAwM2Vsb2NrLCBpdCBpcyBwb3NzaWJsZSBmb3Jcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy0xMjE2LVx0XHQgKiBpcyBsZWF2aW5nLiBUaGUgZW50cnkgbmVlZHMgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IHNvIGFcbmtlcm5lbC9mdXRleC9waS5jOjEyMTc6XHRcdCAqIG5ldyBmdXRleF9sb2NrX3BpKCkgaXMgbm90IHVzaW5nIHRoaXMgc3RhbGUgUEktc3RhdGUgd2hpbGVcbmtlcm5lbC9mdXRleC9waS5jLTEyMTgtXHRcdCAqIHRoZSBmdXRleCBpcyBhdmFpbGFibGUgaW4gdXNlciBzcGFjZSBhZ2Fpbi5cbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTIzMD12b2lkIHJlcXVldWVfcGlfd2FrZV9mdXRleChzdHJ1Y3QgZnV0ZXhfcSAqcSwgdW5pb24gZnV0ZXhfa2V5ICprZXksXG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0yNjctICogV2FrZSB0aGUgdG9wIHdhaXRlciBpZiB3ZSBzdWNjZWVkLiAgSWYgdGhlIGNhbGxlciBzcGVjaWZpZWQgc2V0X3dhaXRlcnMsXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjI2ODogKiB0aGVuIGRpcmVjdCBmdXRleF9sb2NrX3BpX2F0b21pYygpIHRvIGZvcmNlIHNldHRpbmcgdGhlIEZVVEVYX1dBSVRFUlMgYml0Llxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0yNjktICogaGIxIGFuZCBoYjIgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIuXG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYz0yODE9ZnV0ZXhfcHJveHlfdHJ5bG9ja19hdG9taWModTMyIF9fdXNlciAqcGlmdXRleCwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjEsXG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0yOTgtXHQgKiBJZiB0aGUgY2FsbGVyIGludGVuZHMgdG8gcmVxdWV1ZSBtb3JlIHRoYW4gMSB3YWl0ZXIgdG8gcGlmdXRleCxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6Mjk5Olx0ICogZm9yY2UgZnV0ZXhfbG9ja19waV9hdG9taWMoKSB0byBzZXQgdGhlIEZVVEVYX1dBSVRFUlMgYml0IG5vdyxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMzAwLVx0ICogYXMgd2UgaGF2ZSBtZWFucyB0byBoYW5kbGUgdGhlIHBvc3NpYmxlIGZhdWx0LiAgSWYgbm90LCBkb24mIzM5O3Qgc2V0XG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zMzUtXHQgKi9cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MzM2Olx0cmV0ID0gZnV0ZXhfbG9ja19waV9hdG9taWMocGlmdXRleCwgaGIyLCBrZXkyLCBwcywgdG9wX3dhaXRlci1cdTAwM2V0YXNrLFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zMzctXHRcdFx0XHQgICBleGl0aW5nLCBzZXRfd2FpdGVycyk7XG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zNTAtXHRcdC8qXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjM1MTpcdFx0ICogZnV0ZXhfbG9ja19waV9hdG9taWMoKSBkaWQgbm90IGFjcXVpcmUgdGhlIHVzZXIgc3BhY2Vcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMzUyLVx0XHQgKiBmdXRleCwgYnV0IG1hbmFnZWQgdG8gZXN0YWJsaXNoIHRoZSBwcm94eSBsb2NrIGFuZCBwaVxuLS1cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM9Nzg2PWludCBmdXRleF93YWl0X3JlcXVldWVfcGkodTMyIF9fdXNlciAqdWFkZHIsIHVuc2lnbmVkIGludCBmbGFncyxcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTg5NS1cdFx0XHQgKiBXZSYjMzk7dmUgYWxyZWFkeSBiZWVuIHJlcXVldWVkLCBidXQgY2Fubm90IHJlc3RhcnRcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6ODk2Olx0XHRcdCAqIGJ5IGNhbGxpbmcgZnV0ZXhfbG9ja19waSgpIGRpcmVjdGx5LiBXZSBjb3VsZFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy04OTctXHRcdFx0ICogcmVzdGFydCB0aGlzIHN5c2NhbGwsIGJ1dCBpdCB3b3VsZCBkZXRlY3QgdGhhdFxuLS1cbmtlcm5lbC9mdXRleC9zeXNjYWxscy5jPTEwOD1sb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXG4tLVxua2VybmVsL2Z1dGV4L3N5c2NhbGxzLmMtMTQ4LVx0Y2FzZSBGVVRFWF9MT0NLX1BJMjpcbmtlcm5lbC9mdXRleC9zeXNjYWxscy5jOjE0OTpcdFx0cmV0dXJuIGZ1dGV4X2xvY2tfcGkodWFkZHIsIGZsYWdzLCB0aW1lb3V0LCAwKTtcbmtlcm5lbC9mdXRleC9zeXNjYWxscy5jLTE1MC1cdGNhc2UgRlVURVhfVU5MT0NLX1BJOlxuLS1cbmtlcm5lbC9mdXRleC9zeXNjYWxscy5jLTE1Mi1cdGNhc2UgRlVURVhfVFJZTE9DS19QSTpcbmtlcm5lbC9mdXRleC9zeXNjYWxscy5jOjE1MzpcdFx0cmV0dXJuIGZ1dGV4X2xvY2tfcGkodWFkZHIsIGZsYWdzLCBOVUxMLCAxKTtcbmtlcm5lbC9mdXRleC9zeXNjYWxscy5jLTE1NC1cdGNhc2UgRlVURVhfV0FJVF9SRVFVRVVFX1BJOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjUyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGdXRleCBhbmQgRXhlY3V0aW9uIFBhdGggSW50ZXJhY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlc2UgZnV0ZXggb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBwcmlvcml0eSBpbmhlcml0YW5jZSB2YXJpYW50cywgaW50ZXJhY3Qgd2l0aCBwcm9jZXNzIGV4ZWN1dGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgdXNlZCB3aXRoaW4gYGRvX2Z1dGV4YCBmb3IgdGhlIHZhcmlvdXMgcHJpb3JpdHkgaW5oZXJpdGFuY2UgRlVURVggb3BlcmF0aW9ucy4gSSBzZWUgdGhhdCBgZnV0ZXhfbG9ja19waWAgaGFuZGxlcyBgRlVURVhfTE9DS19QSWAsIGBGVVRFWF9MT0NLX1BJMmAsIGFuZCBgRlVURVhfVFJZTE9DS19QSWAuIFRoZW4sIGBmdXRleF93YWl0X3JlcXVldWVfcGlgIGlzIGVtcGxveWVkIGZvciBgRlVURVhfV0FJVF9SRVFVRVVFX1BJYCwgYW5kIGBmdXRleF9yZXF1ZXVlYCBnZXRzIHVzZWQgd2hlbiBhIGBGVVRFWF9DTVBfUkVRVUVVRV9QSWAgY2FsbCBpcyBtYWRlLgoKVGhlcmVmb3JlLCB0aGUgY3JpdGljYWwgcGF0aHMgSSBuZWVkIHRvIGV4YW1pbmUgaW52b2x2ZSB0aG9zZSB0aHJlZSBmdXRleCBmdW5jdGlvbnMuIEFkZGl0aW9uYWxseSwgY29uc2lkZXJpbmcgdGhlIGR5bmFtaWMgbmF0dXJlIG9mIHByb2Nlc3MgZXhlY3V0aW9uIGFuZCBtZW1vcnkgbWFwcGluZyBkdXJpbmcgYSBuZXcgcHJvZ3JhbSBsYXVuY2gsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZXhlYyBzeXN0ZW0gY2FsbCBpbnRlcmZhY2VzIHdpdGggYWxsIG9mIHRoaXMuIFRodXMsIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSBob3cgYGV4ZWNfbW1hcGAgKG9yIHBvdGVudGlhbGx5IGBicHJtX2V4ZWN2ZWAsIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIHZlcnNpb24gYW5kIHNwZWNpZmljIGFyY2hpdGVjdHVyZSkgcGxheXMgYSByb2xlIGluIHRoaXMuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGBleGVjX21tYXBgIGluIGBmcy9leGVjLmNgLiBJJiMzOTttIGhvcGluZyB0byBkaXNjb3ZlciBhbnkgaW50ZXJhY3Rpb25zIGJldHdlZW4gZnV0ZXhlcyBhbmQgdGhlIG1lbW9yeSBzcGFjZSBzZXR1cCBvciB0ZWFyZG93biB0aGF0IGhhcHBlbnMgZHVyaW5nIGEgcHJvY2VzcyBpbWFnZSBzd2FwLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGludGVyYWN0aW9ucyBpcyBrZXkgdG8gcGlucG9pbnRpbmcgcG90ZW50aWFsIHByaW9yaXR5IGludmVyc2lvbiBpc3N1ZXMgb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXhlY19tbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXhlYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4ZWMuYz0xMTc9Ym9vbCBwYXRoX25vZXhlYyhjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcbi0tXG5mcy9leGVjLmMtMTI3LS8qXG5mcy9leGVjLmM6MTI4OiAqIFRoZSBuYXNjZW50IGJwcm0tXHUwMDNlbW0gaXMgbm90IHZpc2libGUgdW50aWwgZXhlY19tbWFwKCkgYnV0IGl0IGNhblxuZnMvZXhlYy5jLTEyOS0gKiB1c2UgYSBsb3Qgb2YgbWVtb3J5LCBhY2NvdW50IHRoZXNlIHBhZ2VzIGluIGN1cnJlbnQtXHUwMDNlbW0gdGVtcG9yYXJ5XG4tLVxuZnMvZXhlYy5jPTgzND1FWFBPUlRfU1lNQk9MKHJlYWRfY29kZSk7XG4tLVxuZnMvZXhlYy5jLTg0Mi0gKi9cbmZzL2V4ZWMuYzo4NDM6c3RhdGljIGludCBleGVjX21tYXAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbmZzL2V4ZWMuYy04NDQte1xuLS1cbmZzL2V4ZWMuYy04ODAtXHR0YXNrX2xvY2sodHNrKTtcbmZzL2V4ZWMuYzo4ODE6XHRtZW1iYXJyaWVyX2V4ZWNfbW1hcChtbSk7XG5mcy9leGVjLmMtODgyLVxuLS1cbmZzL2V4ZWMuYz0xMDk5PXZvaWQgX19zZXRfdGFza19jb21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBjb25zdCBjaGFyICpidWYsIGJvb2wgZXhlYylcbi0tXG5mcy9leGVjLmMtMTExMi0gKiBzaWduYWwgKHZpYSBkZV90aHJlYWQoKSBvciBjb3JlZHVtcCksIG9yIHdpbGwgaGF2ZSBTRUdWIHJhaXNlZFxuZnMvZXhlYy5jOjExMTM6ICogKGFmdGVyIGV4ZWNfbW1hcCgpKSBieSBzZWFyY2hfYmluYXJ5X2hhbmRsZXIgKHNlZSBiZWxvdykuXG5mcy9leGVjLmMtMTExNC0gKi9cbmZzL2V4ZWMuYz0xMTE1PWludCBiZWdpbl9uZXdfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICogYnBybSlcbi0tXG5mcy9leGVjLmMtMTE1NC1cdC8qXG5mcy9leGVjLmM6MTE1NTpcdCAqIE11c3QgYmUgY2FsbGVkIF9iZWZvcmVfIGV4ZWNfbW1hcCgpIGFzIGJwcm0tXHUwMDNlbW0gaXNcbmZzL2V4ZWMuYy0xMTU2LVx0ICogbm90IHZpc2libGUgdW50aWwgdGhlbi4gRG9pbmcgaXQgaGVyZSBhbHNvIGVuc3VyZXNcbi0tXG5mcy9leGVjLmMtMTE3MS1cdGFjY3RfYXJnX3NpemUoYnBybSwgMCk7XG5mcy9leGVjLmM6MTE3MjpcdHJldHZhbCA9IGV4ZWNfbW1hcChicHJtKTtcbmZzL2V4ZWMuYy0xMTczLVx0aWYgKHJldHZhbClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDA6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MDMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2hlcmUgYW0gSSBsaWtlbHkgdG8gZmluZCB0aGUgcm9vdCBvZiB0aGlzIGJlaGF2aW9yPwoKKipSb290IENhdXNlIEludmVzdGlnYXRpb24qKgoKUmlnaHQsIGBleGVjX21tYXBgLi4uIHRoYXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gZm9yIG1lbW9yeSBtYXBwaW5nIGR1cmluZyBleGVjdXRpb24uIFRoZSBjYWxsIGNoYWluIGZvciB0aGF0LCBmcm9tIHdoYXQgSSYjMzk7dmUgc2VlbiwgZ29lcyB0aHJvdWdoIGBiZWdpbl9uZXdfZXhlY2AuIFRoYXQgZnVuY3Rpb24gaXRzZWxmIGlzIGNhbGxlZCBieSB0aGUgYGxvYWRfZWxmX2JpbmFyeWAgZnVuY3Rpb24gYXMgd2VsbCBhcyBvdGhlciBiaW5hcnkgaGFuZGxlcnMuIFNvIHRoYXQgbWVhbnMgYGJlZ2luX25ld19leGVjYCBvciBwb3RlbnRpYWxseSBgYnBybV9leGVjdmVgIGFyZSB2ZXJ5IGxpa2VseSBzcG90cyB0byBzdGFydC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGJlZ2luX25ld19leGVjYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiZWdpbl9uZXdfZXhlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9iaW5mbXRfZWxmLmM9ODMyPXN0YXRpYyBpbnQgbG9hZF9lbGZfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvYmluZm10X2VsZi5jLTEwMDktXHQvKiBGbHVzaCBhbGwgdHJhY2VzIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBleGVjdXRhYmxlICovXG5mcy9iaW5mbXRfZWxmLmM6MTAxMDpcdHJldHZhbCA9IGJlZ2luX25ld19leGVjKGJwcm0pO1xuZnMvYmluZm10X2VsZi5jLTEwMTEtXHRpZiAocmV0dmFsKVxuLS1cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYz0xODI9c3RhdGljIGludCBsb2FkX2VsZl9mZHBpY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtMzQ0LVx0LyogZmx1c2ggYWxsIHRyYWNlcyBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgZXhlY3V0YWJsZSAqL1xuZnMvYmluZm10X2VsZl9mZHBpYy5jOjM0NTpcdHJldHZhbCA9IGJlZ2luX25ld19leGVjKGJwcm0pO1xuZnMvYmluZm10X2VsZl9mZHBpYy5jLTM0Ni1cdGlmIChyZXR2YWwpXG4tLVxuZnMvYmluZm10X2ZsYXQuYz00MDY9c3RhdGljIGludCBsb2FkX2ZsYXRfZmlsZShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuLS1cbmZzL2JpbmZtdF9mbGF0LmMtNTA4LVx0LyogRmx1c2ggYWxsIHRyYWNlcyBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgZXhlY3V0YWJsZSAqL1xuZnMvYmluZm10X2ZsYXQuYzo1MDk6XHRyZXQgPSBiZWdpbl9uZXdfZXhlYyhicHJtKTtcbmZzL2JpbmZtdF9mbGF0LmMtNTEwLVx0aWYgKHJldClcbi0tXG5mcy9leGVjLmM9MjU4PXN0YXRpYyBpbnQgYnBybV9tbV9pbml0KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvZXhlYy5jLTI2Ny1cbmZzL2V4ZWMuYzoyNjg6XHQvKiBTdGFnZWQgZm9yIHdvdWxkX2R1bXAoKSBuYXJyb3dpbmc7IGNvbnN1bWVkIGJ5IGJlZ2luX25ld19leGVjKCkuICovXG5mcy9leGVjLmMtMjY5LVx0YnBybS1cdTAwM2V1c2VyX25zID0gZ2V0X3VzZXJfbnMoY3VycmVudF91c2VyX25zKCkpO1xuLS1cbmZzL2V4ZWMuYz0xMDk5PXZvaWQgX19zZXRfdGFza19jb21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBjb25zdCBjaGFyICpidWYsIGJvb2wgZXhlYylcbi0tXG5mcy9leGVjLmMtMTExNC0gKi9cbmZzL2V4ZWMuYzoxMTE1OmludCBiZWdpbl9uZXdfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICogYnBybSlcbmZzL2V4ZWMuYy0xMTE2LXtcbi0tXG5mcy9leGVjLmMtMTMxNC19XG5mcy9leGVjLmM6MTMxNTpFWFBPUlRfU1lNQk9MKGJlZ2luX25ld19leGVjKTtcbmZzL2V4ZWMuYy0xMzE2LVxuLS1cbmZzL2V4ZWMuYz0xNjgwPXN0YXRpYyBpbnQgc2VhcmNoX2JpbmFyeV9oYW5kbGVyKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvZXhlYy5jLTE3MTItXG5mcy9leGVjLmM6MTcxMzovKiBiaW5mbXQgaGFuZGxlcnMgd2lsbCBjYWxsIGJhY2sgaW50byBiZWdpbl9uZXdfZXhlYygpIG9uIHN1Y2Nlc3MuICovXG5mcy9leGVjLmMtMTcxNC1zdGF0aWMgaW50IGV4ZWNfYmlucHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvZXhlYy5jPTE3NTk9c3RhdGljIGludCBicHJtX2V4ZWN2ZShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbmZzL2V4ZWMuYy0xNzY4LVx0ICogQ2hlY2sgZm9yIHVuc2FmZSBleGVjdXRpb24gc3RhdGVzIGJlZm9yZSBleGVjX2JpbnBybSgpLCB3aGljaFxuZnMvZXhlYy5jOjE3Njk6XHQgKiB3aWxsIGNhbGwgYmFjayBpbnRvIGJlZ2luX25ld19leGVjKCksIGludG8gYnBybV9jcmVkc19mcm9tX2ZpbGUoKSxcbmZzL2V4ZWMuYy0xNzcwLVx0ICogd2hlcmUgc2V0dWlkLW5lc3MgaXMgZXZhbHVhdGVkLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc1NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFNlY3VyaXR5IFZ1bG5lcmFiaWxpdGllcyBEdXJpbmcgUHJvY2VzcyBFeGVjdXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBwcm9jZXNzIGV4ZWN1dGlvbiBhbmQgbG9va2luZyBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGJwcm1fZXhlY3ZlYCBpcyBhIHByb21pc2luZyBhcmVhIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIExldCYjMzk7cyBzZWUuLi4gd2hhdCBhYm91dCBgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luYCBhbmQgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRgPyBUaGV5JiMzOTtyZSBvZnRlbiByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQsIHNvIGl0IG1ha2VzIHNlbnNlIHRvIGNoZWNrIHRob3NlLiBBaCwgSSBzZWUsIHRoZXkmIzM5O3JlIGNhbGxlZCBmcm9tIGBleGVjX21tX3JlbGVhc2VgIGFuZCBgZXhlY19tbWFwYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gTm93LCBgZXhlY19tbV9yZWxlYXNlYCBpcyBhbHNvIGNhbGxlZCBmcm9tIGBleGVjX21tYXBgLiBXYWl0IGEgc2Vjb25k4oCmIHRoYXQgbG9va3MgbGlrZSBhIGNhbGwgd2l0aGluIGBleGVjX21tYXBgIGluIGBmcy9leGVjLmNgLCBzbyBJIHJlYWxseSBzaG91bGQgZG91YmxlLWNoZWNrIGBmcy9leGVjLmNgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBtaXNzZWQgb3IgdGhhdCB3YXJyYW50cyBmdXJ0aGVyIGFuYWx5c2lzLiBCYWNrIHRvIHRoZSBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleGVjX21tX3JlbGVhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leGVjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXhlYy5jPTg0Mz1zdGF0aWMgaW50IGV4ZWNfbW1hcChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbmZzL2V4ZWMuYy04NTctXHRvbGRfbW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuZnMvZXhlYy5jOjg1ODpcdGV4ZWNfbW1fcmVsZWFzZSh0c2ssIG9sZF9tbSk7XG5mcy9leGVjLmMtODU5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE5OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZ1dGV4IFBJIE93bmVyIFJlbGVhc2UgZm9yIEV4ZWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGV4ZWNfbW1fcmVsZWFzZWAgZnVuY3Rpb24gYW5kIGl0JiMzOTtzIGNhbGxlZCByaWdodCBmcm9tIHdpdGhpbiBgZXhlY19tbWFwYC4gVGhpcyBwYXRjaCBpcyBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGEgcmFjZSBjb25kaXRpb24gaW52b2x2aW5nIGZ1dGV4IFBJIG93bmVycyBkdXJpbmcgYW4gZXhlY3ZlLiBJIHNlZSB0aGF0IGBmdXRleF9leGVjX3JlbGVhc2VgIGlzIGJlaW5nIGJyb2tlbiBkb3duIGludG8gYGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbmAgYW5kIGBmdXRleF9leGVjX3JlbGVhc2VfZW5kYC4gVGhlIGBiZWdpbmAgdmVyc2lvbiBnb2VzIGludG8gYGV4ZWNfbW1fcmVsZWFzZWAsIHNvIGl0JiMzOTtzIGhhcHBlbmluZyBlYXJseSBpbiBgZXhlY19tbWFwYCwgYmVmb3JlIHRoZSBuZXcgbWVtb3J5IG1hcCAobW0pIGlzIGV2ZW4gc2V0IHVwLiBUaGUgYGVuZGAgdmVyc2lvbiBraWNrcyBpbiBsYXRlciwgYWZ0ZXIgdGhlIG5ldyBgbW1gIGlzIGluc3RhbGxlZC4KClRoZSBjb3JlIG9mIHRoZSBmaXggaXMgdG8gbWFuYWdlIHRoZSBzdGF0ZSBvZiB0aGUgZnV0ZXggUEkgb3duZXIgZHVyaW5nIHRoZSBleGVjIHByb2Nlc3MuIEl0JiMzOTtzIG1lYW50IHRvIGFkZHJlc3MgdGhlIHNjZW5hcmlvIHdoZXJlIHRoZSBQSSBvd25lciBpcyBlaXRoZXIgZXhpdGluZyBvciwgaW4gdGhpcyBjYXNlLCBwZXJmb3JtaW5nIGFuIGBleGVjYC4gSSBzZWUgdGhlIGtleSBjaGVjayBpcyBpbiBgYXR0YWNoX3RvX3BpX293bmVyYDoKCmBgYGMKCWlmIChJU19FTkFCTEVEKENPTkZJR19NTVUpICZhbXA7JmFtcDsgZnV0ZXhfa2V5X2lzX3ByaXZhdGUoa2V5KSAmYW1wOyZhbXA7CgkgICAgUkVBRF9PTkNFKHAtJmd0O21tKSAhPSBrZXktJmd0O3ByaXZhdGUubW0pIHsKCQlyYXdfc3Bpbl91bmxvY2tfaXJxKCZhbXA7cC0mZ3Q7cGlfbG9jayk7CgkJcHV0X3Rhc2tfc3RydWN0KHApOwoJCXJldHVybiAtRVNSQ0g7Cgl9CmBgYAoKRXNzZW50aWFsbHksIGlmIHRoZSB0YXNrJiMzOTtzIGBtbWAgaGFzIGNoYW5nZWQgKmFmdGVyKiB0aGUgaW5pdGlhbCBgZnV0ZXhfa2V5YCBjaGVjayAodXNpbmcgYFJFQURfT05DRWAgdG8gZW5zdXJlIHdlIHNlZSB0aGUgbGF0ZXN0IHZhbHVlKSwgd2UgKmRvbiYjMzk7dCogYXR0YWNoIHRvIGl0LiBJdCYjMzk7cyBhIGNyaXRpY2FsIHNhZmV0eSBtZWFzdXJlIHRvIGF2b2lkIHN0YWxlIHBvaW50ZXJzIG9yIGluY29ycmVjdCBhc3NvY2lhdGlvbnMgYWZ0ZXIgdGhlIGV4ZWMuIEkgdGhpbmsgdGhlIGlkZWEgaXMgdGhhdCB0aGUgdGFzayBpcyAmIzM0O2V4ZWMtaW5nJiMzNDsgYW5kIGl0cyBtbSBoYXMgY2hhbmdlZCwgc28gd2UgY2Fubm90IGF0dGFjaCB0byBpdCBhbnkgbW9yZSwgb3IgaXQgd2lsbCBjYXVzZSBhbiBpc3N1ZS4KClRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBhcmUgYEZVVEVYYCBhbmQgYEZVVEVYX1BJYCwgb2YgY291cnNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBGVVRFWF9QSWAgaXMgYWN0dWFsbHkgZGVmaW5lZCwgdGhhdCYjMzk7cyBpbXBvcnRhbnQgZm9yIHRoZSB3aG9sZSB0aGluZyB0byB3b3JrLCBhbmQgdG8gYmUgdGVzdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGVVRFWF9QSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTgzND1jb25maWcgRlVURVhcbi0tXG5pbml0L0tjb25maWctMTg0My1cbmluaXQvS2NvbmZpZzoxODQ0OmNvbmZpZyBGVVRFWF9QSVxuaW5pdC9LY29uZmlnLTE4NDUtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDYzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGBGVVRFWF9QSWAgYW5kIGBNTVVgKioKCk9rYXksIHNvIGBGVVRFWF9QSWAgaXMgZGVmaW5pdGVseSBhIHRoaW5nLCBnb29kLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBVbml0LCBvciBgTU1VYCwgaXMgYSBjcnVjaWFsIHBpZWNlIG9mIHRoaXMgcHV6emxlLiBUaGUgY29kZSB1c2VzIGBJU19FTkFCTEVEKENPTkZJR19NTVUpYCwgc28gdGhlIGRlcGVuZGVuY3kgaXMgY2xlYXJseSB0aGVyZS4gQWx0aG91Z2ggaXQmIzM5O3MgdXN1YWxseSBlbmFibGVkIGJ5IGRlZmF1bHQgb24gbW9zdCBvZiB0aGUgYXJjaGl0ZWN0dXJlcyBJIHdvcmsgd2l0aCwgaXQmIzM5O3MgYSBnb29kIHByYWN0aWNlIHRvIGNvbmZpcm0uIFdpdGggdGhlIGRlcGVuZGVuY3kgZXN0YWJsaXNoZWQsIEkmIzM5O2xsIG1vdmUgb24gdG8gYSBkZWVwZXIgZGl2ZS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEZVVEVYX1BJYCBpdHNlbGYgYW5kIHNlZSB3aGF0IG90aGVyIGNvbmRpdGlvbnMgb3IgbW9kdWxlcyBpdCByZWxpZXMgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGVVRFWF9QSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTgzND1jb25maWcgRlVURVhcbi0tXG5pbml0L0tjb25maWctMTg0My1cbmluaXQvS2NvbmZpZzoxODQ0OmNvbmZpZyBGVVRFWF9QSVxuaW5pdC9LY29uZmlnLTE4NDUtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzg0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlJiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHVudGFuZ2xpbmcgdGhpcyBjb25maWd1cmF0aW9uIGlzc3VlPyBHaXZlbiB0aGUgbmF0dXJlIG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciwgYGluaXQvS2NvbmZpZ2Agc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHNlY3Rpb25zLCBhbmQgSSYjMzk7bSBwcmV0dHkgc3VyZSBJIHJlbWVtYmVyIHRoZXJlIGJlaW5nIHNvbWUgY3J1Y2lhbCBkZWZpbml0aW9ucyBhcm91bmQgbGluZSAxODQ0LiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIGFyZWEgZm9yIGxvb2tpbmcgYXQgYmFzZSBvcHRpb25zIG9yIGNvcmUgbW9kdWxlIHNldHRpbmdzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUg4oCTIGhvcGVmdWxseSwgSSBjYW4gc3BvdCB0aGUga2V5IGRlcGVuZGVuY2llcyBvciBkZWZhdWx0IGJlaGF2aW9ycyB0aGF0IGFyZSBjYXVzaW5nIHRoZSBjdXJyZW50IGhpY2N1cC4gSXQmIzM5O3MgYSBiaXQgb2YgYSBjb2RlIGFyY2hhZW9sb2d5IHByb2plY3QsIGJ1dCBzdGFydGluZyB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGRlZmluaXRpb25zIGlzIGFsbW9zdCBhbHdheXMgdGhlIHJpZ2h0IHdheSB0byBhcHByb2FjaCB0aGVzZSBraW5kcyBvZiBwcm9ibGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODM0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MzQ6XHRjb25maWcgRlVURVhcbjE4MzU6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGZ1dGV4IHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4xODM2Olx0XHRkZXBlbmRzIG9uICEoU1BBUkMzMiBcdTAwMjZcdTAwMjYgU01QKVxuMTgzNzpcdFx0ZGVmYXVsdCB5XG4xODM4Olx0XHRpbXBseSBSVF9NVVRFWEVTXG4xODM5Olx0XHRoZWxwXG4xODQwOlx0XHQgIERpc2FibGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRoZSBrZXJuZWwgdG8gYmUgYnVpbHQgd2l0aG91dFxuMTg0MTpcdFx0ICBzdXBwb3J0IGZvciBcJiMzNDtmYXN0IHVzZXJzcGFjZSBtdXRleGVzXCYjMzQ7LiAgVGhlIHJlc3VsdGluZyBrZXJuZWwgbWF5IG5vdFxuMTg0MjpcdFx0ICBydW4gZ2xpYmMtYmFzZWQgYXBwbGljYXRpb25zIGNvcnJlY3RseS5cbjE4NDM6XHRcbjE4NDQ6XHRjb25maWcgRlVURVhfUElcbjE4NDU6XHRcdGJvb2xcbjE4NDY6XHRcdGRlcGVuZHMgb24gRlVURVggXHUwMDI2XHUwMDI2IFJUX01VVEVYRVNcbjE4NDc6XHRcdGRlZmF1bHQgeVxuMTg0ODpcdFxuMTg0OTpcdGNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcbjE4NTA6XHRcdGJvb2xcbjE4NTE6XHRcdGRlcGVuZHMgb24gRlVURVggXHUwMDI2XHUwMDI2ICFCQVNFX1NNQUxMIFx1MDAyNlx1MDAyNiBNTVVcbjE4NTI6XHRcdGRlZmF1bHQgeVxuMTg1MzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg4MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFbmFibGluZyBGdXRleCBhbmQgUmVhbC1UaW1lIE11dGV4ZXMgZm9yIFByaW9yaXR5IEluaGVyaXRhbmNlIFN1cHBvcnQqKgoKT2theSwgc28gYEZVVEVYX1BJYCBpcyBpbmhlcmVudGx5IHJlbGlhbnQgb24gYm90aCBgRlVURVhgIGFuZCBgUlRfTVVURVhFU2AuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlcmVmb3JlLCB3ZSBhYnNvbHV0ZWx5ICptdXN0KiBlbmFibGUgdGhvc2UgdHdvIG9wdGlvbnMgYXMgcHJlcmVxdWlzaXRlcy4gVGhpcyBpcyBmdW5kYW1lbnRhbC4KCk5vdywgbGV0JiMzOTtzIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBhcmUgZ29pbmcgdG8gZGVtYW5kIG91ciBhdHRlbnRpb24sIHRoZSBhcmVhcyB3aGVyZSB0aGUgcHJpb3JpdHkgaW5oZXJpdGFuY2UgbG9naWMgaXMgbW9zdCBjcml0aWNhbC4gSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIGZvY3VzIG9uOiBgZnV0ZXhfbG9ja19waWAsIGBmdXRleF93YWl0X3JlcXVldWVfcGlgLCBgZnV0ZXhfcmVxdWV1ZWAsIGFuZCBgZG9fZnV0ZXhgLiBUaGVzZSBhcmUgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnRzLgoKV2FpdCBhIHNlY29uZC4uLkkgc2VlIGBicHJtX2V4ZWN2ZWAgb24gdGhpcyBsaXN0LiBEaWRuJiMzOTt0IEkganVzdCBzcG90IHRoYXQ/IEhtbW0uIElzIHRoaXMgc3RhdGljLCBJIHdvbmRlcj8gTGV0IG1lIGNoZWNrIGBmcy9leGVjLmNgIGFuZCBtYWtlIHN1cmUgaXQgaXMgbm90IHVzZWQgaW4gYW5vdGhlciBjb250ZXh0LiBCZXN0IHRvIGJlIHN1cmUgb2YgdGhlIHNjb3BlIG9mIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jwcm1fZXhlY3ZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXhlYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4ZWMuYz0xNDMwPXN0YXRpYyBzdHJ1Y3QgbGludXhfYmlucHJtICphbGxvY19icHJtKGludCBmZCwgc3RydWN0IGZpbGVuYW1lICpmaWxlbmFtZSwgaW50IGZsYWdzKVxuLS1cbmZzL2V4ZWMuYy0xNDgwLVx0ICogc3RvcCBqdXN0IGFmdGVyIHRoZSBzZWN1cml0eV9icHJtX2NyZWRzX2Zvcl9leGVjKCkgY2FsbCBpblxuZnMvZXhlYy5jOjE0ODE6XHQgKiBicHJtX2V4ZWN2ZSgpLiAgSW5kZWVkLCB0aGUga2VybmVsIHNob3VsZCBub3QgdHJ5IHRvIHBhcnNlIHRoZVxuZnMvZXhlYy5jLTE0ODItXHQgKiBjb250ZW50IG9mIHRoZSBmaWxlIHdpdGggZXhlY19iaW5wcm0oKSBub3IgY2hhbmdlIHRoZSBjYWxsaW5nXG4tLVxuZnMvZXhlYy5jPTE3MTQ9c3RhdGljIGludCBleGVjX2JpbnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbmZzL2V4ZWMuYy0xNzU4LVxuZnMvZXhlYy5jOjE3NTk6c3RhdGljIGludCBicHJtX2V4ZWN2ZShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuZnMvZXhlYy5jLTE3NjAte1xuLS1cbmZzL2V4ZWMuYz0xODEzPXN0YXRpYyBpbnQgZG9fZXhlY3ZlYXRfY29tbW9uKGludCBmZCwgc3RydWN0IGZpbGVuYW1lICpmaWxlbmFtZSxcbi0tXG5mcy9leGVjLmMtMTg4MC1cbmZzL2V4ZWMuYzoxODgxOlx0cmV0dXJuIGJwcm1fZXhlY3ZlKGJwcm0pO1xuZnMvZXhlYy5jLTE4ODItfVxuLS1cbmZzL2V4ZWMuYz0xODg0PWludCBrZXJuZWxfZXhlY3ZlKGNvbnN0IGNoYXIgKmtlcm5lbF9maWxlbmFtZSxcbi0tXG5mcy9leGVjLmMtMTkyNi1cbmZzL2V4ZWMuYzoxOTI3Olx0cmV0dXJuIGJwcm1fZXhlY3ZlKGJwcm0pO1xuZnMvZXhlYy5jLTE5MjgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY0MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipBbmFseXppbmcgYGRvX2V4ZWN2ZWF0X2NvbW1vbmAgYW5kIEl0cyBDYWxsZXJzKioKCk9rYXksIHNvIGBkb19leGVjdmVhdF9jb21tb25gIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nOyBpdCBtZWFucyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LCB3aGljaCBsaW1pdHMgaXRzIHNjb3BlIGFuZCBwb3RlbnRpYWwgcG9pbnRzIG9mIGludGVyYWN0aW9uLiBUaGF0JiMzOTtzIGdyZWF0IGZvciBjb2RlIG9yZ2FuaXphdGlvbiwgZ2VuZXJhbGx5IHNwZWFraW5nLCBidXQgaXQgbWVhbnMgSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2hlbiBmaWd1cmluZyBvdXQgaG93IGl0JiMzOTtzICphY3R1YWxseSogdXNlZCB3aXRoaW4gdGhlIHN5c3RlbS4KCk15IG5leHQgbW92ZSBpcyBjbGVhcjogSSBuZWVkIHRvIGlkZW50aWZ5IGFsbCB0aGUgcGxhY2VzIHdoZXJlIGBkb19leGVjdmVhdF9jb21tb25gIGlzIGNhbGxlZC4gRmluZGluZyB0aGUgY2FsbGVycyB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjb250ZXh0IOKAkyB0aGUgcmVhc29ucyBmb3IgaXRzIGludm9jYXRpb24sIHRoZSBkYXRhIGl0JiMzOTtzIHBhc3NlZCwgYW5kIHRoZSBvdmVyYWxsIGV4ZWN1dGlvbiBmbG93IGl0JiMzOTtzIGVtYmVkZGVkIHdpdGhpbi4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBleGVjdmVhdCBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjYWxsIGdyYXBoIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gSSBleHBlY3QgaXQmIzM5O3MgZ29pbmcgdG8gYmUgY2VudHJhbCB0byB0aGUgb3ZlcmFsbCBleGVjdmVhdCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX2V4ZWN2ZWF0X2NvbW1vbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4ZWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leGVjLmM9NDAzPXN0YXRpYyBpbnQgYnBybV9zdGFja19saW1pdHMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9leGVjLmMtNDM1LVx0ICogYXJnYyBjYW4gbmV2ZXIgYmUgMCwgdG8ga2VlcCB0aGVtIGZyb20gd2Fsa2luZyBlbnZwIGJ5IGFjY2lkZW50LlxuZnMvZXhlYy5jOjQzNjpcdCAqIFNlZSBkb19leGVjdmVhdF9jb21tb24oKS5cbmZzL2V4ZWMuYy00MzctXHQgKi9cbi0tXG5mcy9leGVjLmM9MTc1OT1zdGF0aWMgaW50IGJwcm1fZXhlY3ZlKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvZXhlYy5jLTE4MTItXG5mcy9leGVjLmM6MTgxMzpzdGF0aWMgaW50IGRvX2V4ZWN2ZWF0X2NvbW1vbihpbnQgZmQsIHN0cnVjdCBmaWxlbmFtZSAqZmlsZW5hbWUsXG5mcy9leGVjLmMtMTgxNC1cdFx0XHQgICAgICBzdHJ1Y3QgdXNlcl9hcmdfcHRyIGFyZ3YsXG4tLVxuZnMvZXhlYy5jPTE5NDg9U1lTQ0FMTF9ERUZJTkUzKGV4ZWN2ZSxcbi0tXG5mcy9leGVjLmMtMTk1My1cdENMQVNTKGZpbGVuYW1lLCBuYW1lKShmaWxlbmFtZSk7XG5mcy9leGVjLmM6MTk1NDpcdHJldHVybiBkb19leGVjdmVhdF9jb21tb24oQVRfRkRDV0QsIG5hbWUsXG5mcy9leGVjLmMtMTk1NS1cdFx0XHRcdCAgbmF0aXZlX2FyZyhhcmd2KSwgbmF0aXZlX2FyZyhlbnZwKSwgMCk7XG4tLVxuZnMvZXhlYy5jPTE5NTg9U1lTQ0FMTF9ERUZJTkU1KGV4ZWN2ZWF0LFxuLS1cbmZzL2V4ZWMuYy0xOTY0LVx0Q0xBU1MoZmlsZW5hbWVfdWZsYWdzLCBuYW1lKShmaWxlbmFtZSwgZmxhZ3MpO1xuZnMvZXhlYy5jOjE5NjU6XHRyZXR1cm4gZG9fZXhlY3ZlYXRfY29tbW9uKGZkLCBuYW1lLFxuZnMvZXhlYy5jLTE5NjYtXHRcdFx0XHQgIG5hdGl2ZV9hcmcoYXJndiksIG5hdGl2ZV9hcmcoZW52cCksIGZsYWdzKTtcbi0tXG5mcy9leGVjLmM9MTk3Nj1DT01QQVRfU1lTQ0FMTF9ERUZJTkUzKGV4ZWN2ZSwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsXG4tLVxuZnMvZXhlYy5jLTE5ODAtXHRDTEFTUyhmaWxlbmFtZSwgbmFtZSkoZmlsZW5hbWUpO1xuZnMvZXhlYy5jOjE5ODE6XHRyZXR1cm4gZG9fZXhlY3ZlYXRfY29tbW9uKEFUX0ZEQ1dELCBuYW1lLFxuZnMvZXhlYy5jLTE5ODItXHRcdFx0XHQgIGNvbXBhdF9hcmcoYXJndiksIGNvbXBhdF9hcmcoZW52cCksIDApO1xuLS1cbmZzL2V4ZWMuYz0xOTg1PUNPTVBBVF9TWVNDQUxMX0RFRklORTUoZXhlY3ZlYXQsIGludCwgZmQsXG4tLVxuZnMvZXhlYy5jLTE5OTEtXHRDTEFTUyhmaWxlbmFtZV91ZmxhZ3MsIG5hbWUpKGZpbGVuYW1lLCBmbGFncyk7XG5mcy9leGVjLmM6MTk5MjpcdHJldHVybiBkb19leGVjdmVhdF9jb21tb24oZmQsIG5hbWUsXG5mcy9leGVjLmMtMTk5My1cdFx0XHRcdCAgY29tcGF0X2FyZyhhcmd2KSwgY29tcGF0X2FyZyhlbnZwKSwgZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU4NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBGdXRleGVzIGFuZCBFeGVjdXRpb24qKgoKT2theSwgc28gYGRvX2V4ZWN2ZWF0X2NvbW1vbmAgaXMgdGhlIHdvcmtob3JzZSBiZWhpbmQgYm90aCBgZXhlY3ZlYCBhbmQgYGV4ZWN2ZWF0YC4gVGhhdCYjMzk7cyBnb29kLCBpdCBzaW1wbGlmaWVzIHRoaW5ncy4gU3l6a2FsbGVyIHdpbGwgaGFuZGxlIGZ1enppbmcgdGhvc2Ugc3lzdGVtIGNhbGxzIGRpcmVjdGx5LCBzbyBJIGRvbiYjMzk7dCBuZWVkIHRvIGV4cGxpY2l0bHkgdGFyZ2V0IHRoZSBjb21tb24gZnVuY3Rpb24uIEl0IG1ha2VzIHNlbnNlLCBmb2N1c2luZyBvbiB0aGUgaGlnaGVyIGxldmVsIGNhbGxzIHdpbGwgYmUgbW9yZSBlZmZpY2llbnQgZm9yIGlkZW50aWZ5aW5nIHZ1bG5lcmFiaWxpdGllcy4KCk15IGF0dGVudGlvbiBub3cgbmVlZHMgdG8gc2hpZnQgdG8gdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIGZ1dGV4IGFuZCBleGVjdXRpb24gcHJvY2Vzcy4gSSBzaG91bGQgcmVhbGx5IGZvY3VzIG9uIGBmdXRleF9sb2NrX3BpYCwgYGZ1dGV4X3dhaXRfcmVxdWV1ZV9waWAsIGBmdXRleF9yZXF1ZXVlYCwgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbmAsIGBmdXRleF9leGVjX3JlbGVhc2VfZW5kYCwgYW5kIGBleGVjX21tX3JlbGVhc2VgLiBUaGVzZSBmdW5jdGlvbnMgcHJvYmFibHkgaGF2ZSBhIHJvbGUgaW4gdGhlIGNvcnJlY3Qgc3luY2hyb25pemF0aW9uIG9mIHNoYXJlZCBtZW1vcnkgYXJlYXMsIGFuZCBjb250ZXh0IHN3aXRjaGluZywgYXJvdW5kIHByb2Nlc3MgZXhlY3V0aW9uLgoKV2FpdCBhIHNlY29uZC4uLiBhcmVuJiMzOTt0IGBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5gIGFuZCBgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZGAgbm90IHN0YXRpYz8gVGhleSYjMzk7cmUgZ2xvYmFsLCBvciBhdCBsZWFzdCBleHBvcnRlZC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgbWVhbnMgdGhleSBtaWdodCBiZSB1c2VkIGV4dGVybmFsbHkuIE5lZWQgdG8gY2hlY2sgaW4gYGtlcm5lbC9mdXRleC9jb3JlLmNgIGZvciBtb3JlIGluZm8uIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRldGFpbHMgb2YgdGhlaXIgaW50ZW5kZWQgdXNlLCBhbmQgaWYgdGhleSByZXByZXNlbnQgYSBwb3NzaWJsZSBhdHRhY2sgdmVjdG9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmM9MTUyNz1zdGF0aWMgdm9pZCBmdXRleF9jbGVhbnVwX2VuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHN0YXRlKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTU0MS1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTU0Mjp2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTU0My1cdF9fYWNxdWlyZXMoXHUwMDI2dHNrLVx1MDAzZWZ1dGV4LmV4aXRfbXV0ZXgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjE2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyBGdXRleCBGdW5jdGlvbnMgZm9yIFBvdGVudGlhbCBJc3N1ZXMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdXRleCBmdW5jdGlvbnM6IGBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5gLCBgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZGAsIGBmdXRleF9sb2NrX3BpYCwgYGZ1dGV4X3dhaXRfcmVxdWV1ZV9waWAsIGFuZCBgZnV0ZXhfcmVxdWV1ZWAuIFRoZXkmIzM5O3JlIGFsbCBnbG9iYWwsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHRoZW0gYXMgcG90ZW50aWFsIHBvaW50cyBvZiBjb250ZW50aW9uIGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyYWN0IGFuZCB3aGVyZSB0aGV5JiMzOTtyZSB1c2VkLiBgZnV0ZXhfcmVxdWV1ZWAgc2VlbXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCBzbyBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBpdHMgaW1wbGVtZW50YXRpb24uIFRoZSBmaWxlIHRvIGxvb2sgYXQgaXMgYGtlcm5lbC9mdXRleC9yZXF1ZXVlLmNgLiBJIG5lZWQgdG8gcmV2aWV3IGl0cyBsb2dpYywgcGFydGljdWxhcmx5IGFueSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBmdXRleCBmdW5jdGlvbnMsIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2sgcG9zc2liaWxpdGllcywgb3Igb3RoZXIgY29uY3VycmVuY3kgaXNzdWVzIGx1cmtpbmcgd2l0aGluLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGdldCBhIGdvb2QgZ3Jhc3Agb2YgdGhlIHJlLXF1ZXVlIGZ1bmN0aW9uYWxpdHkgYW5kIGl0cyByb2xlIGluIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnV0ZXhfcmVxdWV1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9yZXF1ZXVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L3JlcXVldWUuYz03Nj12b2lkIHJlcXVldWVfZnV0ZXgoc3RydWN0IGZ1dGV4X3EgKnEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIxLFxuLS1cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtOTgtXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjk5OnN0YXRpYyBpbmxpbmUgYm9vbCBmdXRleF9yZXF1ZXVlX3BpX3ByZXBhcmUoc3RydWN0IGZ1dGV4X3EgKnEsXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTEwMC1cdFx0XHRcdFx0ICAgIHN0cnVjdCBmdXRleF9waV9zdGF0ZSAqcGlfc3RhdGUpXG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0xMzEtXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjEzMjpzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfcmVxdWV1ZV9waV9jb21wbGV0ZShzdHJ1Y3QgZnV0ZXhfcSAqcSwgaW50IGxvY2tlZClcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMTMzLXtcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTE2Mi1cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MTYzOnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X3JlcXVldWVfcGlfd2FrZXVwX3N5bmMoc3RydWN0IGZ1dGV4X3EgKnEpXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTE2NC17XG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0yMDYtICpcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MjA3OiAqIER1cmluZyBmdXRleF9yZXF1ZXVlLCB3aXRoIHJlcXVldWVfcGk9MSwgaXQgaXMgcG9zc2libGUgdG8gYWNxdWlyZSB0aGVcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMjA4LSAqIHRhcmdldCBmdXRleCBpZiBpdCBpcyB1bmNvbnRlbmRlZCBvciB2aWEgYSBsb2NrIHN0ZWFsLlxuLS1cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM9MjMwPXZvaWQgcmVxdWV1ZV9waV93YWtlX2Z1dGV4KHN0cnVjdCBmdXRleF9xICpxLCB1bmlvbiBmdXRleF9rZXkgKmtleSxcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTI0OS1cdC8qIFNpZ25hbCBsb2NrZWQgc3RhdGUgdG8gdGhlIHdhaXRlciAqL1xua2VybmVsL2Z1dGV4L3JlcXVldWUuYzoyNTA6XHRmdXRleF9yZXF1ZXVlX3BpX2NvbXBsZXRlKHEsIDEpO1xua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0yNTEtXHR3YWtlX3VwX3N0YXRlKHRhc2ssIFRBU0tfTk9STUFMKTtcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTI4MT1mdXRleF9wcm94eV90cnlsb2NrX2F0b21pYyh1MzIgX191c2VyICpwaWZ1dGV4LCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMSxcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTMyMS1cdC8qIEVuc3VyZSB0aGF0IHRoaXMgZG9lcyBub3QgcmFjZSBhZ2FpbnN0IGFuIGVhcmx5IHdha2V1cCAqL1xua2VybmVsL2Z1dGV4L3JlcXVldWUuYzozMjI6XHRpZiAoIWZ1dGV4X3JlcXVldWVfcGlfcHJlcGFyZSh0b3Bfd2FpdGVyLCBOVUxMKSkge1xua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zMjMtXHRcdHBsaXN0X2RlbChcdTAwMjZ0b3Bfd2FpdGVyLVx1MDAzZWxpc3QsIFx1MDAyNmhiMS1cdTAwM2VjaGFpbik7XG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zNDctXHRcdC8qIFJld2luZCB0b3Bfd2FpdGVyOjpyZXF1ZXVlX3N0YXRlICovXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjM0ODpcdFx0ZnV0ZXhfcmVxdWV1ZV9waV9jb21wbGV0ZSh0b3Bfd2FpdGVyLCByZXQpO1xua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zNDktXHR9IGVsc2Uge1xuLS1cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMzYzLS8qKlxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzozNjQ6ICogZnV0ZXhfcmVxdWV1ZSgpIC0gUmVxdWV1ZSB3YWl0ZXJzIGZyb20gdWFkZHIxIHRvIHVhZGRyMlxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zNjUtICogQHVhZGRyMTpcdHNvdXJjZSBmdXRleCB1c2VyIGFkZHJlc3Ncbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTM4MS0gKi9cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MzgyOmludCBmdXRleF9yZXF1ZXVlKHUzMiBfX3VzZXIgKnVhZGRyMSwgdW5zaWduZWQgaW50IGZsYWdzMSxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMzgzLVx0XHQgIHUzMiBfX3VzZXIgKnVhZGRyMiwgdW5zaWduZWQgaW50IGZsYWdzMixcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTQxMi1cdFx0Lypcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6NDEzOlx0XHQgKiBmdXRleF9yZXF1ZXVlKCkgYWxsb3dzIHRoZSBjYWxsZXIgdG8gZGVmaW5lIHRoZSBudW1iZXJcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtNDE0LVx0XHQgKiBvZiB3YWl0ZXJzIHRvIHdha2UgdXAgdmlhIHRoZSBAbnJfd2FrZSBhcmd1bWVudC4gV2l0aFxuLS1cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtNjM3LVx0XHRcdC8qIERvbiYjMzk7dCByZXF1ZXVlIHdoZW4gdGhlIHdhaXRlciBpcyBhbHJlYWR5IG9uIHRoZSB3YXkgb3V0LiAqL1xua2VybmVsL2Z1dGV4L3JlcXVldWUuYzo2Mzg6XHRcdFx0aWYgKCFmdXRleF9yZXF1ZXVlX3BpX3ByZXBhcmUodGhpcywgcGlfc3RhdGUpKSB7XG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTYzOS1cdFx0XHRcdC8qXG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy02NjUtXHRcdFx0XHRyZXF1ZXVlX2Z1dGV4KHRoaXMsIGhiMSwgaGIyLCBcdTAwMjZrZXkyKTtcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6NjY2Olx0XHRcdFx0ZnV0ZXhfcmVxdWV1ZV9waV9jb21wbGV0ZSh0aGlzLCAwKTtcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtNjY3LVx0XHRcdFx0dGFza19jb3VudCYjNDM7JiM0Mzs7XG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy02NzctXHRcdFx0XHRwdXRfcGlfc3RhdGUocGlfc3RhdGUpO1xua2VybmVsL2Z1dGV4L3JlcXVldWUuYzo2Nzg6XHRcdFx0XHRmdXRleF9yZXF1ZXVlX3BpX2NvbXBsZXRlKHRoaXMsIHJldCk7XG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTY3OS1cdFx0XHRcdC8qXG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYz03MTM9aW50IGhhbmRsZV9lYXJseV9yZXF1ZXVlX3BpX3dha2V1cChzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxuLS1cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtNzU1LSAqXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjc1NjogKiBUaGUgY2FsbGVyIHdpbGwgd2FpdCBvbiB1YWRkciBhbmQgd2lsbCBiZSByZXF1ZXVlZCBieSBmdXRleF9yZXF1ZXVlKCkgdG9cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtNzU3LSAqIHVhZGRyMiB3aGljaCBtdXN0IGJlIFBJIGF3YXJlIGFuZCB1bmlxdWUgZnJvbSB1YWRkci4gIE5vcm1hbCB3YWtldXAgd2lsbCB3YWtlXG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy03NjQtICogdmlhIHRoZSBmb2xsb3dpbmctLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzo3NjU6ICogMSkgd2FrZXVwIG9uIHVhZGRyMiBhZnRlciBhbiBhdG9taWMgbG9jayBhY3F1aXNpdGlvbiBieSBmdXRleF9yZXF1ZXVlKClcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtNzY2LSAqIDIpIHdha2V1cCBvbiB1YWRkcjIgYWZ0ZXIgYSByZXF1ZXVlXG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYz03ODY9aW50IGZ1dGV4X3dhaXRfcmVxdWV1ZV9waSh1MzIgX191c2VyICp1YWRkciwgdW5zaWduZWQgaW50IGZsYWdzLFxuLS1cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtODMzLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzo4MzQ6XHRzd2l0Y2ggKGZ1dGV4X3JlcXVldWVfcGlfd2FrZXVwX3N5bmMoXHUwMDI2cSkpIHtcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtODM1LVx0Y2FzZSBRX1JFUVVFVUVfUElfSUdOT1JFOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODEwMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRnV0ZXggYW5kIFByb2Nlc3MgSW5oZXJpdGFuY2UgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBgZnV0ZXhfcmVxdWV1ZWAsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIGdsb2JhbCBzeW1ib2wuIExldCYjMzk7cyBkaWcgaW50byB0aGUgZXhlY3V0aW9uIHBhdGggYSBiaXQgZGVlcGVyLCBzdGFydGluZyB3aXRoIGBleGVjX21tYXBgIGluIGBmcy9leGVjLmNgLiBJJiMzOTtsbCB3YW50IHRvIHRyYWNlIGhvdyBmdXRleGVzIGFyZSBtYW5hZ2VkIGR1cmluZyBhbiBgZXhlY2AuIEl0JiMzOTtzIHN0YXRpYywgc28gdGhhdCBuYXJyb3dzIHRoZSBzY29wZSBvZiB0aGUgc2VhcmNoIGEgYml0LiBUaGUga2V5IGZ1bmN0aW9ucyB0byBleGFtaW5lIHdpdGhpbiB0aGF0IGNvbnRleHQgYXJlIGBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5gIGFuZCBgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZGAuCgpUaGF0IG1lYW5zIG15IG1haW4gZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlc2Ugc3BlY2lmaWMgc3ltYm9scyBmb3IgdGhlIGNvZGUgZGl2ZToKKiAgIGBmdXRleF9sb2NrX3BpYAoqICAgYGZ1dGV4X3dhaXRfcmVxdWV1ZV9waWAKKiAgIGBmdXRleF9yZXF1ZXVlYAoqICAgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbmAKKiAgIGBmdXRleF9leGVjX3JlbGVhc2VfZW5kYAoKTm93LCByZWdhcmRpbmcgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhcmUgb2J2aW91c2x5IGBGVVRFWGAsIGBGVVRFWF9QSWAsIGFuZCBgUlRfTVVURVhFU2AuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYEtjb25maWdgIGZvciBgRlVURVhfUElgLiBJdCBkZXBlbmRzIG9uIGJvdGggYEZVVEVYYCBhbmQgYFJUX01VVEVYRVNgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBib3RoIG9mIHRob3NlIGFyZSBlbmFibGVkLiBBaCwgd2FpdCwgaG9sZCBvbi4gYEZVVEVYX1BJYCBpcyBhIGhpZGRlbiBjb25maWc7IGl0IGRvZXNuJiMzOTt0IGV2ZW4gaGF2ZSBhIHByb21wdC4gSXQgZGVmYXVsdHMgdG8gJiMzOTt5JiMzOTsgaWYgYm90aCBgRlVURVhgIGFuZCBgUlRfTVVURVhFU2AgYXJlIGVuYWJsZWQuIFNvLCB0byBiZSBjbGVhciwgZW5hYmxpbmcgKm9ubHkqIGBGVVRFWGAgYW5kIGBSVF9NVVRFWEVTYCBpcyB0aGUgcmVhbCB0YXJnZXQuIExldCYjMzk7cyBtYWtlIHN1cmUgYFJUX01VVEVYRVNgIGlzIGNvbmZpZ3VyYWJsZSwganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSVF9NVVRFWEVTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL0tjb25maWcubG9ja3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgzNQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbi4gTXkgZ29hbCBpcyB0byBmaW5kIHdoZXJlIHRoZSBgUlRfTVVURVhFU2Agc2V0dGluZyBpcyBkZWZpbmVkIGFuZCB1c2VkLiBJJiMzOTtsbCBuZWVkIHRvIHNlYXJjaCB0aGUgZW50aXJlIHNvdXJjZSB0cmVlIGZvciBvY2N1cnJlbmNlcyBvZiB0aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIG15IHNlYXJjaCB0b29scyBhbmQgc3RhcnQgd2l0aCBhIGJyb2FkIGFwcHJvYWNoLCBlbnN1cmluZyBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nLiBMZXQmIzM5O3MgZ2V0IGNyYWNraW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUlRfTVVURVhFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MjI2ND1zb3VyY2UgXCYjMzQ7YXJjaC9LY29uZmlnXCYjMzQ7XG5pbml0L0tjb25maWctMjI2NS1cbmluaXQvS2NvbmZpZzoyMjY2OmNvbmZpZyBSVF9NVVRFWEVTXG5pbml0L0tjb25maWctMjI2Ny1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwNjcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipOYXZpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpSaWdodCwgc28gdGhlIGlzc3VlIHNlZW1zIHRvIGJlIGNvbmZpZ3VyYXRpb24tcmVsYXRlZC4gTXkgaW5pdGlhbCBpbnR1aXRpb24gcG9pbnRzIG1lIHRvd2FyZHMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBmaWxlcywgYW5kLCBiYXNlZCBvbiBleHBlcmllbmNlLCBteSBtb25leSYjMzk7cyBvbiB0aGUgYGluaXQvS2NvbmZpZ2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGdvLXRvIHNwb3QgZm9yIGluaXRpYWxpemluZyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3MgZGl2ZSBpbiBhbmQgdGFrZSBhIGxvb2sgYXQgd2hhdCYjMzk7cyBkZWZpbmVkIGluIHRoZXJlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSByZWxldmFudCBvcHRpb24gZGVmaW5pdGlvbiBvciBhIGxpa2VseSBpbmNsdWRlIGZpbGUgcmVsYXRlZCB0byBteSBwcm9ibGVtLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb25maWd1cmF0aW9uIGtleSBpcyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNjYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI2NjpcdGNvbmZpZyBSVF9NVVRFWEVTXG4yMjY3Olx0XHRib29sXG4yMjY4Olx0XHRkZWZhdWx0IHkgaWYgUFJFRU1QVF9SVFxuMjI2OTpcdFxuMjI3MDpcdGNvbmZpZyBNT0RVTEVfU0lHX0ZPUk1BVFxuMjI3MTpcdFx0ZGVmX2Jvb2wgblxuMjI3MjpcdFx0c2VsZWN0IFNZU1RFTV9EQVRBX1ZFUklGSUNBVElPTlxuMjI3MzpcdFxuMjI3NDpcdHNvdXJjZSBcJiMzNDtrZXJuZWwvbW9kdWxlL0tjb25maWdcJiMzNDtcbjIyNzU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkzNzQKCQkJCQkJCW91dHB1dDogMjE2CgkJCQkJCQl0aG91Z2h0czogNjg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBTeW5jaHJvbml6YXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBSVF9NVVRFWEVTYCBpcyBhIGhpZGRlbiBjb25maWcsIGJ1dCBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQgaWYgYFBSRUVNUFRfUlRgIGlzIGVuYWJsZWQuIEltcG9ydGFudGx5LCBgRlVURVhgICppbXBsaWVzKiBgUlRfTVVURVhFU2AsIHdoaWNoIGlzIGdyZWF0LCBtZWFuaW5nIHdlIGRvbiYjMzk7dCBoYXZlIHRvIHdvcnJ5IGFib3V0IGVuYWJsaW5nIGBSVF9NVVRFWEVTYCBleHBsaWNpdGx5LiBTaW5jZSBgUlRfTVVURVhFU2AgaXMgaGlkZGVuLCB3ZSBjYW4mIzM5O3QgZGlyZWN0bHkgZW5hYmxlIGl0IGluIEtjb25maWcsIGJ1dCB0aGUgYGltcGx5YCBkaXJlY3RpdmUgdGFrZXMgY2FyZSBvZiBpdCB3aGVuIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBGVVRFWGAgYXJlIG1ldC4KCkkgc2VlIGBGVVRFWGAgaGFzIGJlZW4gZW5hYmxlZCwgYXMgdGhlIGBkZWZhdWx0IHlgIGxpbmUgaW1wbGllcy4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIE5vdywgbGV0JiMzOTtzIGtlZXAgYW4gZXllIG91dCBmb3IgYEZVVEVYX1BJYCBiZWNhdXNlLCB3ZWxsLCBldmVuIHRob3VnaCBpdCYjMzk7cyBoaWRkZW4sIGFuZCBkZWZhdWx0cyB0byBgeWAgaWYgYEZVVEVYYCBhbmQgYFJUX01VVEVYRVNgIGFyZSBlbmFibGVkLCB3ZSBtaWdodCBuZWVkIGl0LgoKTG9va2luZyBhdCB0aGUgY29kZSwgYENPTkZJR19NTVVgIGlzIGFsc28gaW52b2x2ZWQsIGFuZCB0aGF0JiMzOTtzIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0IG9uIG1vc3QgYXJjaGl0ZWN0dXJlcy4KClRoZSBwYXRjaCBpdHNlbGYgaXMgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIHNwbGl0dGluZyBgZnV0ZXhfZXhlY19yZWxlYXNlYCBpbnRvIGBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5gIGFuZCBgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZGAuIFRoZSBjb250ZXh0IGlzIGZpeGluZyBhIHJhY2UgY29uZGl0aW9uIHdoZW4gYSBmdXRleCBQSSBvd25lciBpcyBleGVjdXRpbmcuIFNwZWNpZmljYWxseSwgYSB0YXNrIHRyaWVzIHRvIGF0dGFjaCB0byB0aGUgUEkgb3duZXIuIFRoZSBrZXkgcGFydCBpcyB0aGUgY2hlY2sgaW4gYGF0dGFjaF90b19waV9vd25lcmAgdG8gbWFrZSBzdXJlIHRoZSB0YXNrJiMzOTtzIGBtbWAgaGFzbiYjMzk7dCBjaGFuZ2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIGFuZCBwcm9jZXNzIGV4ZWN1dGlvbi4KClNvLCB0aGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBgYXR0YWNoX3RvX3BpX293bmVyYCBmdW5jdGlvbiB0byBmaXggYSByYWNlIGNvbmRpdGlvbi4gVGhlIHByaW1hcnkgZm9jdXMgb2YgdGhpcyBjaGFuZ2UgaXMgdG8gcHJldmVudCBpc3N1ZXMgd2l0aCBmdXRleCBQSSBvd25lciBleGVjaW5nLiBJdCYjMzk7cyB0b3VjaGluZyBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gYW5kIHByb2Nlc3MgZXhlY3V0aW9uIGxvZ2ljLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKTXkgZm9jdXMgc3ltYm9scywgdGhlbiwgc2hvdWxkIGJlOiBgZnV0ZXhfbG9ja19waWAsIGBmdXRleF93YWl0X3JlcXVldWVfcGlgLCBgZnV0ZXhfcmVxdWV1ZWAsIGBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5gLCBhbmQgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRgLgoKRm9yIGNvbmZpZ3VyYXRpb24sIEkgc2hvdWxkIGVuc3VyZSBgRlVURVhgIGlzIGVuYWJsZWQgYmVjYXVzZSBpdCYjMzk7cyByZXF1aXJlZC4gQW5kIGJ5IGltcGxpY2F0aW9uLCB0aGF0IGFsc28gY292ZXJzIGBSVF9NVVRFWEVTYCBhbmQgYEZVVEVYX1BJYCwgc28gSSBkb24mIzM5O3QgbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSB0aGUgbGFzdCB0d28uIE5vdywgSSYjMzk7bSByZWFkeSB0byB1c2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYJiMzNDssCiAgICAmIzM0O0ZVVEVYX1BJJiMzNDssCiAgICAmIzM0O1JUX01VVEVYRVMmIzM0OywKICAgICYjMzQ7TU1VJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnV0ZXhfbG9ja19waSYjMzQ7LAogICAgJiMzNDtmdXRleF93YWl0X3JlcXVldWVfcGkmIzM0OywKICAgICYjMzQ7ZnV0ZXhfcmVxdWV1ZSYjMzQ7LAogICAgJiMzNDtmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4mIzM0OywKICAgICYjMzQ7ZnV0ZXhfZXhlY19yZWxlYXNlX2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gYSBmdXRleCBQSSBvd25lciBleGVjaW5nIGFuZCBhbm90aGVyIHRhc2sgdHJ5aW5nIHRvIGF0dGFjaCB0byB0aGUgUEkgb3duZXIuIEl0IHNwbGl0cyBgZnV0ZXhfZXhlY19yZWxlYXNlYCBpbnRvIHR3byBwaGFzZXMgKGBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5gIGFuZCBgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZGApIGFuZCBhZGRzIGEgY2hlY2sgaW4gYGF0dGFjaF90b19waV9vd25lcmAgdG8gdmVyaWZ5IHRoZSB0YXNrJiMzOTtzIGBtbWAgaGFzbiYjMzk7dCBjaGFuZ2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIGFuZCBwcm9jZXNzIGV4ZWN1dGlvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGVVRFWCYjMzQ7LAogICAgJiMzNDtGVVRFWF9QSSYjMzQ7LAogICAgJiMzNDtSVF9NVVRFWEVTJiMzNDssCiAgICAmIzM0O01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2xvY2tfcGkmIzM0OywKICAgICYjMzQ7ZnV0ZXhfd2FpdF9yZXF1ZXVlX3BpJiMzNDssCiAgICAmIzM0O2Z1dGV4X3JlcXVldWUmIzM0OywKICAgICYjMzQ7ZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luJiMzNDssCiAgICAmIzM0O2Z1dGV4X2V4ZWNfcmVsZWFzZV9lbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGEgZnV0ZXggUEkgb3duZXIgZXhlY2luZyBhbmQgYW5vdGhlciB0YXNrIHRyeWluZyB0byBhdHRhY2ggdG8gdGhlIFBJIG93bmVyLiBJdCBzcGxpdHMgYGZ1dGV4X2V4ZWNfcmVsZWFzZWAgaW50byB0d28gcGhhc2VzIChgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luYCBhbmQgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRgKSBhbmQgYWRkcyBhIGNoZWNrIGluIGBhdHRhY2hfdG9fcGlfb3duZXJgIHRvIHZlcmlmeSB0aGUgdGFzayYjMzk7cyBgbW1gIGhhc24mIzM5O3QgY2hhbmdlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBhbmQgcHJvY2VzcyBleGVjdXRpb24gbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDA6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpc3N1ZSByZWxhdGVkIHRvIGZ1dGV4ZXMgYW5kIGBleGVjdmVgLiBJdCBzcGxpdHMgYGZ1dGV4X2V4ZWNfcmVsZWFzZWAgaW50byBhIGJlZ2luL2VuZCBwYWlyIHRvIGhvbGQgdGhlIGBleGl0X211dGV4YCBhY3Jvc3MgdGhlIGBtbWAgcmVwbGFjZW1lbnQgaW4gYGV4ZWNfbW1hcGAsIGFuZCBhZGRzIGEgY2hlY2sgaW4gYGF0dGFjaF90b19waV9vd25lcmAgdG8gZW5zdXJlIHRoZSB0YXNrJiMzOTtzIGBtbWAgbWF0Y2hlcyB0aGUgZnV0ZXgga2V5JiMzOTtzIGBtbWAuIFRoZXNlIGNoYW5nZXMgcHJldmVudCByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGJ1Z3MgZHVyaW5nIGV4ZWMuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgdGhlIGJ1Z3MgdGhpcyBwYXRjaCBhaW1zIHRvIGZpeC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzIzYTc4ZjI2ODY4MmY2NjQ3NWI1ZDkyNTVmNWNlMGQ2ZmQwOGUzMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDAwOjUyOjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IGM3YjhmMmQ2MzY2YzQuLjQyZWI5OGZiZDEyNTkgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leGVjLmMKQEAgLTY1LDYgJiM0Mzs2NSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaW9fdXJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb3JlZHVtcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9mdXRleC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3RpbWVfbmFtZXNwYWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdXNlcl9ldmVudHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yc2VxLmgmZ3Q7CkBAIC04NTcsOCAmIzQzOzg1OCwxMCBAQCBzdGF0aWMgaW50IGV4ZWNfbW1hcChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQogCWV4ZWNfbW1fcmVsZWFzZSh0c2ssIG9sZF9tbSk7CiAKIAlyZXQgPSBkb3duX3dyaXRlX2tpbGxhYmxlKCZhbXA7dHNrLSZndDtzaWduYWwtJmd0O2V4ZWNfdXBkYXRlX2xvY2spOwotCWlmIChyZXQpCiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmQodHNrKTsKIAkJcmV0dXJuIHJldDsKJiM0MzsJfQogCiAJaWYgKG9sZF9tbSkgewogCQkvKgpAQCAtODY5LDYgJiM0Mzs4NzIsNyBAQCBzdGF0aWMgaW50IGV4ZWNfbW1hcChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQogCQlyZXQgPSBtbWFwX3JlYWRfbG9ja19raWxsYWJsZShvbGRfbW0pOwogCQlpZiAocmV0KSB7CiAJCQl1cF93cml0ZSgmYW1wO3Rzay0mZ3Q7c2lnbmFsLSZndDtleGVjX3VwZGF0ZV9sb2NrKTsKJiM0MzsJCQlmdXRleF9leGVjX3JlbGVhc2VfZW5kKHRzayk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQpAQCAtODk2LDYgJiM0Mzs5MDAsNyBAQCBzdGF0aWMgaW50IGV4ZWNfbW1hcChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJbHJ1X2dlbl9hZGRfbW0obW0pOwogCXRhc2tfdW5sb2NrKHRzayk7CiYjNDM7CWZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmQodHNrKTsKIAlscnVfZ2VuX3VzZV9tbShtbSk7CiAJaWYgKG9sZF9tbSkgewogCQltbWFwX3JlYWRfdW5sb2NrKG9sZF9tbSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z1dGV4LmggYi9pbmNsdWRlL2xpbnV4L2Z1dGV4LmgKaW5kZXggNTFmNGNjZGM5MDkyNy4uMzI0ZjQ5NDkzY2JiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mdXRleC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnV0ZXguaApAQCAtNzIsNyAmIzQzOzcyLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiAKIHZvaWQgZnV0ZXhfZXhpdF9yZWN1cnNpdmUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwogdm9pZCBmdXRleF9leGl0X3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwotdm9pZCBmdXRleF9leGVjX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwomIzQzO3ZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQomIzQzOwlfX2FjcXVpcmVzKCZhbXA7dHNrLSZndDtmdXRleC5leGl0X211dGV4KTsKJiM0Mzt2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiYjNDM7CV9fcmVsZWFzZXMoJmFtcDt0c2stJmd0O2Z1dGV4LmV4aXRfbXV0ZXgpOwogCiBsb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsCiAJICAgICAgdTMyIF9fdXNlciAqdWFkZHIyLCB1MzIgdmFsMiwgdTMyIHZhbDMpOwpAQCAtOTAsNyAmIzQzOzkzLDggQEAgc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9leGl0X3JlY3Vyc2l2ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhpdF9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9leGVjX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9leGVjX3JlbGVhc2VfZW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH0KIHN0YXRpYyBpbmxpbmUgbG9uZyBkb19mdXRleCh1MzIgX191c2VyICp1YWRkciwgaW50IG9wLCB1MzIgdmFsLCBrdGltZV90ICp0aW1lb3V0LAogCQkJICAgIHUzMiBfX3VzZXIgKnVhZGRyMiwgdTMyIHZhbDIsIHUzMiB2YWwzKQogewpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggZjBlMmUxMzFhOWE1YS4uZDI3MzZiMjRmZjc1MiAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZm9yay5jCkBAIC0xNTEwLDcgJiM0MzsxNTEwLDcgQEAgdm9pZCBleGl0X21tX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCiB2b2lkIGV4ZWNfbW1fcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7Ci0JZnV0ZXhfZXhlY19yZWxlYXNlKHRzayk7CiYjNDM7CWZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbih0c2spOwogCW1tX3JlbGVhc2UodHNrLCBtbSk7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC9jb3JlLmMgYi9rZXJuZWwvZnV0ZXgvY29yZS5jCmluZGV4IDEyOGM1NzUyZjIyNWMuLmE5MjBkZmJkMDM5MGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2Z1dGV4L2NvcmUuYwpAQCAtMTUzOSw3ICYjNDM7MTUzOSw4IEBAIHN0YXRpYyB2b2lkIGZ1dGV4X2NsZWFudXBfZW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgc3RhdGUpCiAJbXV0ZXhfdW5sb2NrKCZhbXA7dHNrLSZndDtmdXRleC5leGl0X211dGV4KTsKIH0KIAotdm9pZCBmdXRleF9leGVjX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiYjNDM7dm9pZCBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiYjNDM7CV9fYWNxdWlyZXMoJmFtcDt0c2stJmd0O2Z1dGV4LmV4aXRfbXV0ZXgpCiB7CiAJLyoKIAkgKiBUaGUgc3RhdGUgaGFuZGxpbmcgaXMgZG9uZSBmb3IgY29uc2lzdGVuY3ksIGJ1dCBpbiB0aGUgY2FzZSBvZgpAQCAtMTU1MCw2ICYjNDM7MTU1MSwxMSBAQCB2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIAkgKi8KIAlmdXRleF9jbGVhbnVwX2JlZ2luKHRzayk7CiAJZnV0ZXhfY2xlYW51cCh0c2spOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiYjNDM7CV9fcmVsZWFzZXMoJmFtcDt0c2stJmd0O2Z1dGV4LmV4aXRfbXV0ZXgpCiYjNDM7ewogCS8qCiAJICogUmVzZXQgdGhlIHN0YXRlIHRvIEZVVEVYX1NUQVRFX09LLiBUaGUgdGFzayBpcyBhbGl2ZSBhbmQgYWJvdXQKIAkgKiBleGVjIGEgbmV3IGJpbmFyeS4KZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC9waS5jIGIva2VybmVsL2Z1dGV4L3BpLmMKaW5kZXggNzk1MDExZWExMjAyZi4uZDk3NjExMTk2YjM0YSAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4L3BpLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2Z1dGV4L3BpLmMKQEAgLTQ2NSw2ICYjNDM7NDY1LDEzIEBAIHN0YXRpYyBpbnQgYXR0YWNoX3RvX3BpX293bmVyKHUzMiBfX3VzZXIgKnVhZGRyLCB1MzIgdXZhbCwgdW5pb24gZnV0ZXhfa2V5ICprZXksCiAJCXJldHVybiByZXQ7CiAJfQogCiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19NTVUpICZhbXA7JmFtcDsgZnV0ZXhfa2V5X2lzX3ByaXZhdGUoa2V5KSAmYW1wOyZhbXA7CiYjNDM7CSAgICBSRUFEX09OQ0UocC0mZ3Q7bW0pICE9IGtleS0mZ3Q7cHJpdmF0ZS5tbSkgewomIzQzOwkJcmF3X3NwaW5fdW5sb2NrX2lycSgmYW1wO3AtJmd0O3BpX2xvY2spOwomIzQzOwkJcHV0X3Rhc2tfc3RydWN0KHApOwomIzQzOwkJcmV0dXJuIC1FU1JDSDsKJiM0MzsJfQomIzQzOwogCV9fYXR0YWNoX3RvX3BpX293bmVyKHAsIGtleSwgcHMpOwogCXJhd19zcGluX3VubG9ja19pcnEoJmFtcDtwLSZndDtwaV9sb2NrKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwNwoJCQkJCQkJb3V0cHV0OiAxNzQKCQkJCQkJCXRob3VnaHRzOiA2NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXRleCBhbmQgRXhlY3ZlIFN5bmNocm9uaXphdGlvbiBGaXgqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCYjMzk7cyB0YWNrbGluZyBhIGNvbmN1cnJlbmN5IGlzc3VlLCBsaWtlbHkgYSByYWNlIGNvbmRpdGlvbiBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8sIGluIHRoZSBmdXRleCBpbXBsZW1lbnRhdGlvbiByZWxhdGVkIHRvIGBleGVjdmVgLiBUaGUgY2hhbmdlcyBhcmUgY29uY2VudHJhdGVkIGluIGBmcy9leGVjLmNgLCBgaW5jbHVkZS9saW51eC9mdXRleC5oYCwgYGtlcm5lbC9mb3JrLmNgLCBga2VybmVsL2Z1dGV4L2NvcmUuY2AsIGFuZCBga2VybmVsL2Z1dGV4L3BpLmNgLCBzbyBpdCYjMzk7cyBhbGwgcmlnaHQgd2hlcmUgSSYjMzk7ZCBleHBlY3QgaXQgdG8gYmUuCgpUaGUgY29yZSBvZiB0aGUgZml4IGFwcGVhcnMgdG8gYmUgc3BsaXR0aW5nIGBmdXRleF9leGVjX3JlbGVhc2VgIGludG8gYGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbmAgYW5kIGBmdXRleF9leGVjX3JlbGVhc2VfZW5kYC4gVGhpcywgYWxvbmcgd2l0aCB0aGUgYGV4aXRfbXV0ZXhgIGxvY2ssIGlzIGtleS4gVGhlIGBiZWdpbmAgZnVuY3Rpb24gYWNxdWlyZXMgYHRzay0mZ3Q7ZnV0ZXguZXhpdF9tdXRleGAsIGFuZCB0aGUgYGVuZGAgZnVuY3Rpb24gcmVsZWFzZXMgaXQuIFRoaXMgbG9ja2luZyBzcGFucyB0aGUgY3J1Y2lhbCBgbW1fcmVsZWFzZWAgb3BlcmF0aW9uIGFuZCB0aGUgc3Vic2VxdWVudCBgZXhlY19tbWFwYCBtbSByZXBsYWNlbWVudC4gQnkgaG9sZGluZyB0aGlzIG11dGV4LCBpdCBlbnN1cmVzIHRoYXQgbm8gb3RoZXIgdGhyZWFkIGNhbiBhdHRhY2ggdG8gdGhlIGZ1dGV4IHdoaWxlIHRoZSBtbSBpcyBiZWluZyByZXBsYWNlZCBkdXJpbmcgZXhlYywgd2hpY2ggaXMgY3JpdGljYWwuIFRoaXMgaXMgYSBzb2xpZCwgY2xlYW4gc3luY2hyb25pemF0aW9uIHN0cmF0ZWd5LgoKVGhlIGFkZGVkIGNoZWNrIGluIGBhdHRhY2hfdG9fcGlfb3duZXJgIHdpdGhpbiBga2VybmVsL2Z1dGV4L3BpLmNgIGlzIGFsc28gaW1wb3J0YW50LiAgU3BlY2lmaWNhbGx5LCB0aGUgYElTX0VOQUJMRUQoQ09ORklHX01NVSkgJmFtcDsmYW1wOyBmdXRleF9rZXlfaXNfcHJpdmF0ZShrZXkpICZhbXA7JmFtcDsgUkVBRF9PTkNFKHAtJmd0O21tKSAhPSBrZXktJmd0O3ByaXZhdGUubW1gIGNvbmRpdGlvbiBpcyBjbGV2ZXIuIEl0JiMzOTtzIHZlcmlmeWluZyB0aGF0IGZvciAqcHJpdmF0ZSogZnV0ZXhlcywgdGhlIHRhc2smIzM5O3MgYG1tYCAobWVtb3J5IG1hcCkgbWF0Y2hlcyB0aGUgYG1tYCBhc3NvY2lhdGVkIHdpdGggdGhlIGZ1dGV4IGtleS4gVGhpcyBwcmV2ZW50cyBhIHRhc2sgZnJvbSBhdHRhY2hpbmcgdG8gYSBmdXRleCBvZiBhIHRhc2sgdGhhdCBoYXMgYWxyZWFkeSBleGVjJiMzOTtkIGFuZCBjaGFuZ2VkIGl0cyBtZW1vcnkgbWFwLiBUaGlzIGlzIGEgdmVyeSBzcGVjaWZpYywgYW5kIHByb2JhYmx5IHZlcnkgc3VidGxlLCBidWcgZml4LgoKSSYjMzk7bSBub3Qgc2VlaW5nIGFueSByZWQgZmxhZ3MgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvIGxlYWtzLCBvciBuZXcgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBiZSB1bmluaXRpYWxpemVkLiBJdCYjMzk7cyBhIGNvbmN1cnJlbmN5L2xvY2tpbmcgYnVnIGZpeCB0aGF0IHRoZSBleGlzdGluZyBrZXJuZWwgY2hlY2tlcnMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUCB3b3VsZCBsaWtlbHkgY2F0Y2jigJQgb3IgcmF0aGVyLCB0aGV5IHdpbGwgY2F0Y2ggdGhlIGVmZmVjdHMgb2YgdGhlIGJ1ZyB0aGlzIHBhdGNoIGlzIHByZXZlbnRpbmcgKFVBRiBvciBkZWFkbG9ja3MpLiBObyBuZWVkIHRvIGJyaW5nIEtNU0FOIGludG8gdGhlIHBpY3R1cmUgaGVyZS4gVGhlIGlzc3VlIGlzIHB1cmVseSBhYm91dCBzeW5jaHJvbml6YXRpb24gYW5kIHByZXZlbnRpbmcgcmFjZXMsIG5vdCBhYm91dCBtZW1vcnkgaW5pdGlhbGl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGlzc3VlIHJlbGF0ZWQgdG8gZnV0ZXhlcyBhbmQgYGV4ZWN2ZWAuIEl0IHNwbGl0cyBgZnV0ZXhfZXhlY19yZWxlYXNlYCBpbnRvIGEgYmVnaW4vZW5kIHBhaXIgdG8gaG9sZCB0aGUgYGV4aXRfbXV0ZXhgIGFjcm9zcyB0aGUgYG1tYCByZXBsYWNlbWVudCBpbiBgZXhlY19tbWFwYCwgYW5kIGFkZHMgYSBjaGVjayBpbiBgYXR0YWNoX3RvX3BpX293bmVyYCB0byBlbnN1cmUgdGhlIHRhc2smIzM5O3MgYG1tYCBtYXRjaGVzIHRoZSBmdXRleCBrZXkmIzM5O3MgYG1tYC4gVGhlc2UgY2hhbmdlcyBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgYnVncyBkdXJpbmcgZXhlYy4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCB0aGUgYnVncyB0aGlzIHBhdGNoIGFpbXMgdG8gZml4LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgaXNzdWUgcmVsYXRlZCB0byBmdXRleGVzIGFuZCBgZXhlY3ZlYC4gSXQgc3BsaXRzIGBmdXRleF9leGVjX3JlbGVhc2VgIGludG8gYSBiZWdpbi9lbmQgcGFpciB0byBob2xkIHRoZSBgZXhpdF9tdXRleGAgYWNyb3NzIHRoZSBgbW1gIHJlcGxhY2VtZW50IGluIGBleGVjX21tYXBgLCBhbmQgYWRkcyBhIGNoZWNrIGluIGBhdHRhY2hfdG9fcGlfb3duZXJgIHRvIGVuc3VyZSB0aGUgdGFzayYjMzk7cyBgbW1gIG1hdGNoZXMgdGhlIGZ1dGV4IGtleSYjMzk7cyBgbW1gLiBUaGVzZSBjaGFuZ2VzIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBidWdzIGR1cmluZyBleGVjLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHRoZSBidWdzIHRoaXMgcGF0Y2ggYWltcyB0byBmaXguJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjUyOjU5LjI3MzU3MDYyOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTY4NTk2NTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVVRFWFwiLFxuICAgIFwiRlVURVhfUElcIixcbiAgICBcIlJUX01VVEVYRVNcIixcbiAgICBcIk1NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1dGV4X2xvY2tfcGlcIixcbiAgICBcImZ1dGV4X3dhaXRfcmVxdWV1ZV9waVwiLFxuICAgIFwiZnV0ZXhfcmVxdWV1ZVwiLFxuICAgIFwiZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luXCIsXG4gICAgXCJmdXRleF9leGVjX3JlbGVhc2VfZW5kXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpc3N1ZSByZWxhdGVkIHRvIGZ1dGV4ZXMgYW5kIGBleGVjdmVgLiBJdCBzcGxpdHMgYGZ1dGV4X2V4ZWNfcmVsZWFzZWAgaW50byBhIGJlZ2luL2VuZCBwYWlyIHRvIGhvbGQgdGhlIGBleGl0X211dGV4YCBhY3Jvc3MgdGhlIGBtbWAgcmVwbGFjZW1lbnQgaW4gYGV4ZWNfbW1hcGAsIGFuZCBhZGRzIGEgY2hlY2sgaW4gYGF0dGFjaF90b19waV9vd25lcmAgdG8gZW5zdXJlIHRoZSB0YXNrJ3MgYG1tYCBtYXRjaGVzIHRoZSBmdXRleCBrZXkncyBgbW1gLiBUaGVzZSBjaGFuZ2VzIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBidWdzIGR1cmluZyBleGVjLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHRoZSBidWdzIHRoaXMgcGF0Y2ggYWltcyB0byBmaXguXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGEgZnV0ZXggUEkgb3duZXIgZXhlY2luZyBhbmQgYW5vdGhlciB0YXNrIHRyeWluZyB0byBhdHRhY2ggdG8gdGhlIFBJIG93bmVyLiBJdCBzcGxpdHMgYGZ1dGV4X2V4ZWNfcmVsZWFzZWAgaW50byB0d28gcGhhc2VzIChgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luYCBhbmQgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRgKSBhbmQgYWRkcyBhIGNoZWNrIGluIGBhdHRhY2hfdG9fcGlfb3duZXJgIHRvIHZlcmlmeSB0aGUgdGFzaydzIGBtbWAgaGFzbid0IGNoYW5nZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gYW5kIHByb2Nlc3MgZXhlY3V0aW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjUyOjU5LjI3MzU3NjA0OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUzMDE0ODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzIzYTc4ZjI2ODY4MmY2NjQ3NWI1ZDkyNTVmNWNlMGQ2ZmQwOGUzMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwMDo1Mjo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmNcXG5pbmRleCBjN2I4ZjJkNjM2NmM0Li40MmViOThmYmQxMjU5IDEwMDY0NFxcbi0tLSBhL2ZzL2V4ZWMuY1xcbisrKyBiL2ZzL2V4ZWMuY1xcbkBAIC02NSw2ICs2NSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb191cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb3JlZHVtcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZnV0ZXguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWVfbmFtZXNwYWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2VyX2V2ZW50cy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcnNlcS5oXFx1MDAzZVxcbkBAIC04NTcsOCArODU4LDEwIEBAIHN0YXRpYyBpbnQgZXhlY19tbWFwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuIFxcdGV4ZWNfbW1fcmVsZWFzZSh0c2ssIG9sZF9tbSk7XFxuIFxcbiBcXHRyZXQgPSBkb3duX3dyaXRlX2tpbGxhYmxlKFxcdTAwMjZ0c2stXFx1MDAzZXNpZ25hbC1cXHUwMDNlZXhlY191cGRhdGVfbG9jayk7XFxuLVxcdGlmIChyZXQpXFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZnV0ZXhfZXhlY19yZWxlYXNlX2VuZCh0c2spO1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuIFxcbiBcXHRpZiAob2xkX21tKSB7XFxuIFxcdFxcdC8qXFxuQEAgLTg2OSw2ICs4NzIsNyBAQCBzdGF0aWMgaW50IGV4ZWNfbW1hcChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbiBcXHRcXHRyZXQgPSBtbWFwX3JlYWRfbG9ja19raWxsYWJsZShvbGRfbW0pO1xcbiBcXHRcXHRpZiAocmV0KSB7XFxuIFxcdFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZ0c2stXFx1MDAzZXNpZ25hbC1cXHUwMDNlZXhlY191cGRhdGVfbG9jayk7XFxuK1xcdFxcdFxcdGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmQodHNrKTtcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuQEAgLTg5Niw2ICs5MDAsNyBAQCBzdGF0aWMgaW50IGV4ZWNfbW1hcChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbiBcXHRcXHRsb2NhbF9pcnFfZW5hYmxlKCk7XFxuIFxcdGxydV9nZW5fYWRkX21tKG1tKTtcXG4gXFx0dGFza191bmxvY2sodHNrKTtcXG4rXFx0ZnV0ZXhfZXhlY19yZWxlYXNlX2VuZCh0c2spO1xcbiBcXHRscnVfZ2VuX3VzZV9tbShtbSk7XFxuIFxcdGlmIChvbGRfbW0pIHtcXG4gXFx0XFx0bW1hcF9yZWFkX3VubG9jayhvbGRfbW0pO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z1dGV4LmggYi9pbmNsdWRlL2xpbnV4L2Z1dGV4LmhcXG5pbmRleCA1MWY0Y2NkYzkwOTI3Li4zMjRmNDk0OTNjYmI0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZnV0ZXguaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZnV0ZXguaFxcbkBAIC03Miw3ICs3MiwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbiBcXG4gdm9pZCBmdXRleF9leGl0X3JlY3Vyc2l2ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7XFxuIHZvaWQgZnV0ZXhfZXhpdF9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTtcXG4tdm9pZCBmdXRleF9leGVjX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xcbit2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4rXFx0X19hY3F1aXJlcyhcXHUwMDI2dHNrLVxcdTAwM2VmdXRleC5leGl0X211dGV4KTtcXG4rdm9pZCBmdXRleF9leGVjX3JlbGVhc2VfZW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbitcXHRfX3JlbGVhc2VzKFxcdTAwMjZ0c2stXFx1MDAzZWZ1dGV4LmV4aXRfbXV0ZXgpO1xcbiBcXG4gbG9uZyBkb19mdXRleCh1MzIgX191c2VyICp1YWRkciwgaW50IG9wLCB1MzIgdmFsLCBrdGltZV90ICp0aW1lb3V0LFxcbiBcXHQgICAgICB1MzIgX191c2VyICp1YWRkcjIsIHUzMiB2YWwyLCB1MzIgdmFsMyk7XFxuQEAgLTkwLDcgKzkzLDggQEAgc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHsgfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhpdF9yZWN1cnNpdmUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHsgfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhpdF9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH1cXG4tc3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykgeyB9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHsgfVxcbitzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykgeyB9XFxuIHN0YXRpYyBpbmxpbmUgbG9uZyBkb19mdXRleCh1MzIgX191c2VyICp1YWRkciwgaW50IG9wLCB1MzIgdmFsLCBrdGltZV90ICp0aW1lb3V0LFxcbiBcXHRcXHRcXHQgICAgdTMyIF9fdXNlciAqdWFkZHIyLCB1MzIgdmFsMiwgdTMyIHZhbDMpXFxuIHtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmNcXG5pbmRleCBmMGUyZTEzMWE5YTVhLi5kMjczNmIyNGZmNzUyIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9mb3JrLmNcXG4rKysgYi9rZXJuZWwvZm9yay5jXFxuQEAgLTE1MTAsNyArMTUxMCw3IEBAIHZvaWQgZXhpdF9tbV9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gXFxuIHZvaWQgZXhlY19tbV9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4ge1xcbi1cXHRmdXRleF9leGVjX3JlbGVhc2UodHNrKTtcXG4rXFx0ZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luKHRzayk7XFxuIFxcdG1tX3JlbGVhc2UodHNrLCBtbSk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC9jb3JlLmMgYi9rZXJuZWwvZnV0ZXgvY29yZS5jXFxuaW5kZXggMTI4YzU3NTJmMjI1Yy4uYTkyMGRmYmQwMzkwZCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvZnV0ZXgvY29yZS5jXFxuKysrIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xcbkBAIC0xNTM5LDcgKzE1MzksOCBAQCBzdGF0aWMgdm9pZCBmdXRleF9jbGVhbnVwX2VuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHN0YXRlKVxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnRzay1cXHUwMDNlZnV0ZXguZXhpdF9tdXRleCk7XFxuIH1cXG4gXFxuLXZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbit2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4rXFx0X19hY3F1aXJlcyhcXHUwMDI2dHNrLVxcdTAwM2VmdXRleC5leGl0X211dGV4KVxcbiB7XFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBzdGF0ZSBoYW5kbGluZyBpcyBkb25lIGZvciBjb25zaXN0ZW5jeSwgYnV0IGluIHRoZSBjYXNlIG9mXFxuQEAgLTE1NTAsNiArMTU1MSwxMSBAQCB2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4gXFx0ICovXFxuIFxcdGZ1dGV4X2NsZWFudXBfYmVnaW4odHNrKTtcXG4gXFx0ZnV0ZXhfY2xlYW51cCh0c2spO1xcbit9XFxuK1xcbit2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuK1xcdF9fcmVsZWFzZXMoXFx1MDAyNnRzay1cXHUwMDNlZnV0ZXguZXhpdF9tdXRleClcXG4re1xcbiBcXHQvKlxcbiBcXHQgKiBSZXNldCB0aGUgc3RhdGUgdG8gRlVURVhfU1RBVEVfT0suIFRoZSB0YXNrIGlzIGFsaXZlIGFuZCBhYm91dFxcbiBcXHQgKiBleGVjIGEgbmV3IGJpbmFyeS5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4L3BpLmMgYi9rZXJuZWwvZnV0ZXgvcGkuY1xcbmluZGV4IDc5NTAxMWVhMTIwMmYuLmQ5NzYxMTE5NmIzNGEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2Z1dGV4L3BpLmNcXG4rKysgYi9rZXJuZWwvZnV0ZXgvcGkuY1xcbkBAIC00NjUsNiArNDY1LDEzIEBAIHN0YXRpYyBpbnQgYXR0YWNoX3RvX3BpX293bmVyKHUzMiBfX3VzZXIgKnVhZGRyLCB1MzIgdXZhbCwgdW5pb24gZnV0ZXhfa2V5ICprZXksXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19NTVUpIFxcdTAwMjZcXHUwMDI2IGZ1dGV4X2tleV9pc19wcml2YXRlKGtleSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIFJFQURfT05DRShwLVxcdTAwM2VtbSkgIT0ga2V5LVxcdTAwM2Vwcml2YXRlLm1tKSB7XFxuK1xcdFxcdHJhd19zcGluX3VubG9ja19pcnEoXFx1MDAyNnAtXFx1MDAzZXBpX2xvY2spO1xcbitcXHRcXHRwdXRfdGFza19zdHJ1Y3QocCk7XFxuK1xcdFxcdHJldHVybiAtRVNSQ0g7XFxuK1xcdH1cXG4rXFxuIFxcdF9fYXR0YWNoX3RvX3BpX293bmVyKHAsIGtleSwgcHMpO1xcbiBcXHRyYXdfc3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZwLVxcdTAwM2VwaV9sb2NrKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjUyOjU5LjgyNzMxNTM2MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEzMjIyMjM0MDg3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVVRFWFwiLFxuICAgIFwiRlVURVhfUElcIixcbiAgICBcIlJUX01VVEVYRVNcIixcbiAgICBcIk1NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1dGV4X2xvY2tfcGlcIixcbiAgICBcImZ1dGV4X3dhaXRfcmVxdWV1ZV9waVwiLFxuICAgIFwiZnV0ZXhfcmVxdWV1ZVwiLFxuICAgIFwiZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luXCIsXG4gICAgXCJmdXRleF9leGVjX3JlbGVhc2VfZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGEgZnV0ZXggUEkgb3duZXIgZXhlY2luZyBhbmQgYW5vdGhlciB0YXNrIHRyeWluZyB0byBhdHRhY2ggdG8gdGhlIFBJIG93bmVyLiBJdCBzcGxpdHMgYGZ1dGV4X2V4ZWNfcmVsZWFzZWAgaW50byB0d28gcGhhc2VzIChgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luYCBhbmQgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRgKSBhbmQgYWRkcyBhIGNoZWNrIGluIGBhdHRhY2hfdG9fcGlfb3duZXJgIHRvIHZlcmlmeSB0aGUgdGFzaydzIGBtbWAgaGFzbid0IGNoYW5nZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gYW5kIHByb2Nlc3MgZXhlY3V0aW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDMyM2E3OGYyNjg2ODJmNjY0NzViNWQ5MjU1ZjVjZTBkNmZkMDhlMzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwMDo1Mjo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xuaW5kZXggYzdiOGYyZDYzNjZjNC4uNDJlYjk4ZmJkMTI1OSAxMDA2NDRcbi0tLSBhL2ZzL2V4ZWMuY1xuKysrIGIvZnMvZXhlYy5jXG5AQCAtNjUsNiArNjUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvX3VyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvcmVkdW1wLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZV9uYW1lc3BhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXJfZXZlbnRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yc2VxLmhcdTAwM2VcbkBAIC04NTcsOCArODU4LDEwIEBAIHN0YXRpYyBpbnQgZXhlY19tbWFwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4gXHRleGVjX21tX3JlbGVhc2UodHNrLCBvbGRfbW0pO1xuIFxuIFx0cmV0ID0gZG93bl93cml0ZV9raWxsYWJsZShcdTAwMjZ0c2stXHUwMDNlc2lnbmFsLVx1MDAzZWV4ZWNfdXBkYXRlX2xvY2spO1xuLVx0aWYgKHJldClcbitcdGlmIChyZXQpIHtcbitcdFx0ZnV0ZXhfZXhlY19yZWxlYXNlX2VuZCh0c2spO1xuIFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuIFxuIFx0aWYgKG9sZF9tbSkge1xuIFx0XHQvKlxuQEAgLTg2OSw2ICs4NzIsNyBAQCBzdGF0aWMgaW50IGV4ZWNfbW1hcChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFx0XHRyZXQgPSBtbWFwX3JlYWRfbG9ja19raWxsYWJsZShvbGRfbW0pO1xuIFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0dXBfd3JpdGUoXHUwMDI2dHNrLVx1MDAzZXNpZ25hbC1cdTAwM2VleGVjX3VwZGF0ZV9sb2NrKTtcbitcdFx0XHRmdXRleF9leGVjX3JlbGVhc2VfZW5kKHRzayk7XG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuIFx0fVxuQEAgLTg5Niw2ICs5MDAsNyBAQCBzdGF0aWMgaW50IGV4ZWNfbW1hcChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFx0XHRsb2NhbF9pcnFfZW5hYmxlKCk7XG4gXHRscnVfZ2VuX2FkZF9tbShtbSk7XG4gXHR0YXNrX3VubG9jayh0c2spO1xuK1x0ZnV0ZXhfZXhlY19yZWxlYXNlX2VuZCh0c2spO1xuIFx0bHJ1X2dlbl91c2VfbW0obW0pO1xuIFx0aWYgKG9sZF9tbSkge1xuIFx0XHRtbWFwX3JlYWRfdW5sb2NrKG9sZF9tbSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdXRleC5oIGIvaW5jbHVkZS9saW51eC9mdXRleC5oXG5pbmRleCA1MWY0Y2NkYzkwOTI3Li4zMjRmNDk0OTNjYmI0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mdXRleC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Z1dGV4LmhcbkBAIC03Miw3ICs3MiwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuIFxuIHZvaWQgZnV0ZXhfZXhpdF9yZWN1cnNpdmUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xuIHZvaWQgZnV0ZXhfZXhpdF9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTtcbi12b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7XG4rdm9pZCBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4rXHRfX2FjcXVpcmVzKFx1MDAyNnRzay1cdTAwM2VmdXRleC5leGl0X211dGV4KTtcbit2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4rXHRfX3JlbGVhc2VzKFx1MDAyNnRzay1cdTAwM2VmdXRleC5leGl0X211dGV4KTtcbiBcbiBsb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXG4gXHQgICAgICB1MzIgX191c2VyICp1YWRkcjIsIHUzMiB2YWwyLCB1MzIgdmFsMyk7XG5AQCAtOTAsNyArOTMsOCBAQCBzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhpdF9yZWN1cnNpdmUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9leGl0X3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHsgfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9leGVjX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHsgfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHsgfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9leGVjX3JlbGVhc2VfZW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH1cbiBzdGF0aWMgaW5saW5lIGxvbmcgZG9fZnV0ZXgodTMyIF9fdXNlciAqdWFkZHIsIGludCBvcCwgdTMyIHZhbCwga3RpbWVfdCAqdGltZW91dCxcbiBcdFx0XHQgICAgdTMyIF9fdXNlciAqdWFkZHIyLCB1MzIgdmFsMiwgdTMyIHZhbDMpXG4ge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jXG5pbmRleCBmMGUyZTEzMWE5YTVhLi5kMjczNmIyNGZmNzUyIDEwMDY0NFxuLS0tIGEva2VybmVsL2ZvcmsuY1xuKysrIGIva2VybmVsL2ZvcmsuY1xuQEAgLTE1MTAsNyArMTUxMCw3IEBAIHZvaWQgZXhpdF9tbV9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcbiB2b2lkIGV4ZWNfbW1fcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuLVx0ZnV0ZXhfZXhlY19yZWxlYXNlKHRzayk7XG4rXHRmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4odHNrKTtcbiBcdG1tX3JlbGVhc2UodHNrLCBtbSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC9jb3JlLmMgYi9rZXJuZWwvZnV0ZXgvY29yZS5jXG5pbmRleCAxMjhjNTc1MmYyMjVjLi5hOTIwZGZiZDAzOTBkIDEwMDY0NFxuLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuY1xuKysrIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuQEAgLTE1MzksNyArMTUzOSw4IEBAIHN0YXRpYyB2b2lkIGZ1dGV4X2NsZWFudXBfZW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgc3RhdGUpXG4gXHRtdXRleF91bmxvY2soXHUwMDI2dHNrLVx1MDAzZWZ1dGV4LmV4aXRfbXV0ZXgpO1xuIH1cbiBcbi12b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbit2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbitcdF9fYWNxdWlyZXMoXHUwMDI2dHNrLVx1MDAzZWZ1dGV4LmV4aXRfbXV0ZXgpXG4ge1xuIFx0LypcbiBcdCAqIFRoZSBzdGF0ZSBoYW5kbGluZyBpcyBkb25lIGZvciBjb25zaXN0ZW5jeSwgYnV0IGluIHRoZSBjYXNlIG9mXG5AQCAtMTU1MCw2ICsxNTUxLDExIEBAIHZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuIFx0ICovXG4gXHRmdXRleF9jbGVhbnVwX2JlZ2luKHRzayk7XG4gXHRmdXRleF9jbGVhbnVwKHRzayk7XG4rfVxuK1xuK3ZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbitcdF9fcmVsZWFzZXMoXHUwMDI2dHNrLVx1MDAzZWZ1dGV4LmV4aXRfbXV0ZXgpXG4re1xuIFx0LypcbiBcdCAqIFJlc2V0IHRoZSBzdGF0ZSB0byBGVVRFWF9TVEFURV9PSy4gVGhlIHRhc2sgaXMgYWxpdmUgYW5kIGFib3V0XG4gXHQgKiBleGVjIGEgbmV3IGJpbmFyeS5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvcGkuYyBiL2tlcm5lbC9mdXRleC9waS5jXG5pbmRleCA3OTUwMTFlYTEyMDJmLi5kOTc2MTExOTZiMzRhIDEwMDY0NFxuLS0tIGEva2VybmVsL2Z1dGV4L3BpLmNcbisrKyBiL2tlcm5lbC9mdXRleC9waS5jXG5AQCAtNDY1LDYgKzQ2NSwxMyBAQCBzdGF0aWMgaW50IGF0dGFjaF90b19waV9vd25lcih1MzIgX191c2VyICp1YWRkciwgdTMyIHV2YWwsIHVuaW9uIGZ1dGV4X2tleSAqa2V5LFxuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX01NVSkgXHUwMDI2XHUwMDI2IGZ1dGV4X2tleV9pc19wcml2YXRlKGtleSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgUkVBRF9PTkNFKHAtXHUwMDNlbW0pICE9IGtleS1cdTAwM2Vwcml2YXRlLm1tKSB7XG4rXHRcdHJhd19zcGluX3VubG9ja19pcnEoXHUwMDI2cC1cdTAwM2VwaV9sb2NrKTtcbitcdFx0cHV0X3Rhc2tfc3RydWN0KHApO1xuK1x0XHRyZXR1cm4gLUVTUkNIO1xuK1x0fVxuK1xuIFx0X19hdHRhY2hfdG9fcGlfb3duZXIocCwga2V5LCBwcyk7XG4gXHRyYXdfc3Bpbl91bmxvY2tfaXJxKFx1MDAyNnAtXHUwMDNlcGlfbG9jayk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1Mjo1OS44MjczMTY4MzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDg2MDA1NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV3IEZ1dGV4IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgYSBmZXcgY3J1Y2lhbCBhcmVhczogYGZzL2V4ZWMuY2AsIGBpbmNsdWRlL2xpbnV4L2Z1dGV4LmhgLCBga2VybmVsL2ZvcmsuY2AsIGFuZCwgbW9zdCBub3RhYmx5LCBga2VybmVsL2Z1dGV4L2NvcmUuY2AgYW5kIGBrZXJuZWwvZnV0ZXgvcGkuY2AuIEltbWVkaWF0ZWx5LCBteSBzcGlkZXkgc2Vuc2VzIGFyZSB0aW5nbGluZyDigJMgdGhpcyB3YXJyYW50cyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgaXMgYSBjb3JlIGtlcm5lbCBtb2RpZmljYXRpb24gaW52b2x2aW5nIGZ1dGV4ZXMgYW5kIGV4ZWMsIHdoaWNoLCBhcyB3ZSBrbm93LCBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyBhbmQgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy5cblxuVGhlIHBhdGNoIHNlZW1zIHRvIHNwbGl0IGBmdXRleF9leGVjX3JlbGVhc2VgIGludG8gYSBiZWdpbiBhbmQgZW5kIHNlcXVlbmNlLCBhbmQgdGhlcmUncyBhIG5ldyBjaGVjayBhZGRlZCBpbiBgYXR0YWNoX3RvX3BpX293bmVyYCB3aXRoaW4gYGtlcm5lbC9mdXRleC9waS5jYC4gIFNwZWNpZmljYWxseSwgdGhhdCBgYXR0YWNoX3RvX3BpX293bmVyYCBjaGVjayBpcyBpbnRlcmVzdGluZzogSXQgYXBwZWFycyB0byBiZSB2ZXJpZnlpbmcgdGhhdCB0aGUgbWVtb3J5IG1hcCBhc3NvY2lhdGVkIHdpdGggYSBwcml2YXRlIGZ1dGV4IGtleSBtYXRjaGVzIHRoZSBwcm9jZXNzJ3MgbW0gKG1lbW9yeSBtYW5hZ2VtZW50KS4gSSBuZWVkIHRvIGRpZyBpbnRvIHdoYXQncyBoYXBwZW5pbmcgaWYgdGhhdCBjaGVjayBmYWlscy5cblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldCBkdXJpbmcgZnV6emluZy4gSSdtIHRoaW5raW5nOlxuXG4qICAgYGF0dGFjaF90b19waV9vd25lcmAg4oCTIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIEknbGwgd2FudCB0byBmb2N1cyBvbiBpdHMgY2FsbGVycyBhcyB3ZWxsLlxuKiAgIGBleGVjX21tYXBgIOKAkyBhbHNvIHN0YXRpYy4gVGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiByZXF1aXJlIHNjcnV0aW55IGFzIHdlbGwuXG4qICAgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbmAgYW5kIGBmdXRleF9leGVjX3JlbGVhc2VfZW5kYCDigJMgdGhlc2UgYXJlIHRoZSBuZXdseSBpbnRyb2R1Y2VkIHNwbGl0IGZ1bmN0aW9ucy4gQ2xlYXJseSB0aGV5IGFyZSBhIGhpZ2ggcHJpb3JpdHkuXG4qICAgYGV4aXRfbW1fcmVsZWFzZWAgYW5kIGBleGVjX21tX3JlbGVhc2VgIOKAkyBzaW5jZSB0aGlzIGNvbmNlcm5zIGV4ZWMsIHRoZXNlIGZ1bmN0aW9ucyB0aGF0IG1hbmFnZSBtZW1vcnkgbWFwcGluZyBkdXJpbmcgZXhlY3V0aW9uIHdvdWxkIGJlIGVzc2VudGlhbCBhcyB3ZWxsLlxuXG5JIHNob3VsZCBwcm9iYWJseSBkaXZlIGludG8gYGtlcm5lbC9mdXRleC9waS5jYCByaWdodCBub3cgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIHdobyBjYWxscyBgYXR0YWNoX3RvX3BpX293bmVyYC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBncmFwaCB3aWxsIGJlIGNyaXRpY2FsIGZvciBjcmFmdGluZyBlZmZlY3RpdmUgZnV6emluZyBzY2VuYXJpb3MuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjEwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTM6MDguOTEzMzI1ODdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0OTgyODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXR0YWNoX3RvX3BpX293bmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9waS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mdXRleC9waS5jPTMyMT1zdGF0aWMgaW50IGhhbmRsZV9leGl0X3JhY2UodTMyIF9fdXNlciAqdWFkZHIsIHUzMiB1dmFsLFxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmMtMzQ0LVxcdCAqICAgZXhpdF9yb2J1c3RfbGlzdCh0c2spIHtcXHQgICAgKnVhZGRyID0gMHg4MDAwMFBJRDtcXG5rZXJuZWwvZnV0ZXgvcGkuYzozNDU6XFx0ICogICAgICBTZXQgb3duZXIgZGllZFxcdFxcdCAgICBhdHRhY2hfdG9fcGlfb3duZXIoKSB7XFxua2VybmVsL2Z1dGV4L3BpLmMtMzQ2LVxcdCAqICAgICp1YWRkciA9IDB4QzAwMDAwMDA7XFx0ICAgICB0c2sgPSBnZXRfdGFzayhQSUQpO1xcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmMtMzc2LVxcbmtlcm5lbC9mdXRleC9waS5jOjM3NzpzdGF0aWMgdm9pZCBfX2F0dGFjaF90b19waV9vd25lcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuaW9uIGZ1dGV4X2tleSAqa2V5LFxcbmtlcm5lbC9mdXRleC9waS5jLTM3OC1cXHRcXHRcXHRcXHQgc3RydWN0IGZ1dGV4X3BpX3N0YXRlICoqcHMpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy00MTEtICovXFxua2VybmVsL2Z1dGV4L3BpLmM6NDEyOnN0YXRpYyBpbnQgYXR0YWNoX3RvX3BpX293bmVyKHUzMiBfX3VzZXIgKnVhZGRyLCB1MzIgdXZhbCwgdW5pb24gZnV0ZXhfa2V5ICprZXksXFxua2VybmVsL2Z1dGV4L3BpLmMtNDEzLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBmdXRleF9waV9zdGF0ZSAqKnBzLFxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmMtNDc0LVxcbmtlcm5lbC9mdXRleC9waS5jOjQ3NTpcXHRfX2F0dGFjaF90b19waV9vd25lcihwLCBrZXksIHBzKTtcXG5rZXJuZWwvZnV0ZXgvcGkuYy00NzYtXFx0cmF3X3NwaW5fdW5sb2NrX2lycShcXHUwMDI2cC1cXHUwMDNlcGlfbG9jayk7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYz01MjM9aW50IGZ1dGV4X2xvY2tfcGlfYXRvbWljKHUzMiBfX3VzZXIgKnVhZGRyLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmMtNTkwLVxcdFxcdCAqXFxua2VybmVsL2Z1dGV4L3BpLmM6NTkxOlxcdFxcdCAqIE5vIG5lZWQgdG8gZG8gdGhlIGZ1bGwgYXR0YWNoX3RvX3BpX293bmVyKCkgZXhlcmNpc2VcXG5rZXJuZWwvZnV0ZXgvcGkuYy01OTItXFx0XFx0ICogYmVjYXVzZSBAdGFzayBpcyBrbm93biBhbmQgdmFsaWQuXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy01OTUtXFx0XFx0XFx0cmF3X3NwaW5fbG9ja19pcnEoXFx1MDAyNnRhc2stXFx1MDAzZXBpX2xvY2spO1xcbmtlcm5lbC9mdXRleC9waS5jOjU5NjpcXHRcXHRcXHRfX2F0dGFjaF90b19waV9vd25lcih0YXNrLCBrZXksIHBzKTtcXG5rZXJuZWwvZnV0ZXgvcGkuYy01OTctXFx0XFx0XFx0cmF3X3NwaW5fdW5sb2NrX2lycShcXHUwMDI2dGFzay1cXHUwMDNlcGlfbG9jayk7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy02MTUtXFx0ICovXFxua2VybmVsL2Z1dGV4L3BpLmM6NjE2OlxcdHJldHVybiBhdHRhY2hfdG9fcGlfb3duZXIodWFkZHIsIG5ld3ZhbCwga2V5LCBwcywgZXhpdGluZyk7XFxua2VybmVsL2Z1dGV4L3BpLmMtNjE3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTM6MDguOTYxODMwNTU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ3OTMwMDAzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQsIHJlZmxlY3RpbmcgbXkgZXhwZXJ0IHVuZGVyc3RhbmRpbmc6XG5cbioqQW5hbHl6aW5nIGBmdXRleF9sb2NrX3BpX2F0b21pY2AncyBDYWxsZXJzKipcblxuT2theSwgc28gYGF0dGFjaF90b19waV9vd25lcmAgaXMgYmVpbmcgY2FsbGVkIGZyb20gd2l0aGluIGBmdXRleF9sb2NrX3BpX2F0b21pY2AuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hvICplbHNlKiBjYWxscyBgZnV0ZXhfbG9ja19waV9hdG9taWNgPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgYWJzb2x1dGVseSBjcml0aWNhbCBoZXJlLiBJdCdzIHRoZSBvbmx5IHdheSB0byBncmFzcCB0aGUgYnJvYWRlciBjb25jdXJyZW5jeSBpbXBsaWNhdGlvbnMsIHBvdGVudGlhbCBjb250ZW50aW9uIHBvaW50cywgYW5kIHRoZSByb2xlIG9mIHRoaXMgYGF0dGFjaF90b19waV9vd25lcmAgY2FsbCB3aXRoaW4gdGhlIGxhcmdlciBwaWN0dXJlIG9mIHByaW9yaXR5IGluaGVyaXRhbmNlIGxvY2tpbmcuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGZ1dGV4X2xvY2tfcGlfYXRvbWljYCB0byBzZWUgaXRzIHVwc3RyZWFtIGRlcGVuZGVuY2llcy4gS25vd2luZyB0aGUgY2FsbCBncmFwaCBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB3aHkgaXTigJlzIGJlaW5nIGludm9rZWQgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgbG9ja2luZyBzdHJhdGVneS4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IGFsbCBlbnRyeSBwb2ludHMgaW50byB0aGUgZnVuY3Rpb24gdG8gYXNzZXNzIHdoZXJlIGFuZCBob3cgcHJpb3JpdHkgaW5oZXJpdGFuY2UgaXMgYmVpbmcgZW1wbG95ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMzUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1MzoxNC40NDExMzMyODJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3NTg1NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnV0ZXhfbG9ja19waV9hdG9taWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2Z1dGV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZnV0ZXgvZnV0ZXguaD0zODQ9ZXh0ZXJuIHZvaWQgZnV0ZXhfcV91bmxvY2soc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYilcXG4tLVxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTM4Ni1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDozODc6ZXh0ZXJuIGludCBmdXRleF9sb2NrX3BpX2F0b21pYyh1MzIgX191c2VyICp1YWRkciwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYixcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zODgtXFx0XFx0XFx0XFx0dW5pb24gZnV0ZXhfa2V5ICprZXksXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYz0zMjE9c3RhdGljIGludCBoYW5kbGVfZXhpdF9yYWNlKHUzMiBfX3VzZXIgKnVhZGRyLCB1MzIgdXZhbCxcXG4tLVxcbmtlcm5lbC9mdXRleC9waS5jLTMzOS1cXHQgKiAgZG9fZXhpdCgpXFx0XFx0XFx0IGZ1dGV4X2xvY2tfcGkoKVxcbmtlcm5lbC9mdXRleC9waS5jOjM0MDpcXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnV0ZXhfbG9ja19waV9hdG9taWMoKVxcbmtlcm5lbC9mdXRleC9waS5jLTM0MS1cXHQgKiAgIGV4aXRfc2lnbmFscyh0c2spXFx0XFx0ICAgIE5vIHdhaXRlcnM6XFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYz00ODM9c3RhdGljIGludCBsb2NrX3BpX3VwZGF0ZV9hdG9taWModTMyIF9fdXNlciAqdWFkZHIsIHUzMiB1dmFsLCB1MzIgbmV3dmFsKVxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmMtNDk5LS8qKlxcbmtlcm5lbC9mdXRleC9waS5jOjUwMDogKiBmdXRleF9sb2NrX3BpX2F0b21pYygpIC0gQXRvbWljIHdvcmsgcmVxdWlyZWQgdG8gYWNxdWlyZSBhIHBpIGF3YXJlIGZ1dGV4XFxua2VybmVsL2Z1dGV4L3BpLmMtNTAxLSAqIEB1YWRkcjpcXHRcXHR0aGUgcGkgZnV0ZXggdXNlciBhZGRyZXNzXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy01MjItICovXFxua2VybmVsL2Z1dGV4L3BpLmM6NTIzOmludCBmdXRleF9sb2NrX3BpX2F0b21pYyh1MzIgX191c2VyICp1YWRkciwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYixcXG5rZXJuZWwvZnV0ZXgvcGkuYy01MjQtXFx0XFx0XFx0IHVuaW9uIGZ1dGV4X2tleSAqa2V5LFxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmM9OTMwPWludCBmdXRleF9sb2NrX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGt0aW1lX3QgKnRpbWUsIGludCB0cnlsb2NrKVxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmMtOTU5LVxcbmtlcm5lbC9mdXRleC9waS5jOjk2MDpcXHRcXHRyZXQgPSBmdXRleF9sb2NrX3BpX2F0b21pYyh1YWRkciwgaGIsIFxcdTAwMjZxLmtleSwgXFx1MDAyNnEucGlfc3RhdGUsIGN1cnJlbnQsXFxua2VybmVsL2Z1dGV4L3BpLmMtOTYxLVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZleGl0aW5nLCAwKTtcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM9MjMwPXZvaWQgcmVxdWV1ZV9waV93YWtlX2Z1dGV4KHN0cnVjdCBmdXRleF9xICpxLCB1bmlvbiBmdXRleF9rZXkgKmtleSxcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMjY3LSAqIFdha2UgdGhlIHRvcCB3YWl0ZXIgaWYgd2Ugc3VjY2VlZC4gIElmIHRoZSBjYWxsZXIgc3BlY2lmaWVkIHNldF93YWl0ZXJzLFxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MjY4OiAqIHRoZW4gZGlyZWN0IGZ1dGV4X2xvY2tfcGlfYXRvbWljKCkgdG8gZm9yY2Ugc2V0dGluZyB0aGUgRlVURVhfV0FJVEVSUyBiaXQuXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0yNjktICogaGIxIGFuZCBoYjIgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIuXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTI4MT1mdXRleF9wcm94eV90cnlsb2NrX2F0b21pYyh1MzIgX191c2VyICpwaWZ1dGV4LCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMSxcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMjk4LVxcdCAqIElmIHRoZSBjYWxsZXIgaW50ZW5kcyB0byByZXF1ZXVlIG1vcmUgdGhhbiAxIHdhaXRlciB0byBwaWZ1dGV4LFxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6Mjk5OlxcdCAqIGZvcmNlIGZ1dGV4X2xvY2tfcGlfYXRvbWljKCkgdG8gc2V0IHRoZSBGVVRFWF9XQUlURVJTIGJpdCBub3csXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zMDAtXFx0ICogYXMgd2UgaGF2ZSBtZWFucyB0byBoYW5kbGUgdGhlIHBvc3NpYmxlIGZhdWx0LiAgSWYgbm90LCBkb24ndCBzZXRcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMzM1LVxcdCAqL1xcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MzM2OlxcdHJldCA9IGZ1dGV4X2xvY2tfcGlfYXRvbWljKHBpZnV0ZXgsIGhiMiwga2V5MiwgcHMsIHRvcF93YWl0ZXItXFx1MDAzZXRhc2ssXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zMzctXFx0XFx0XFx0XFx0ICAgZXhpdGluZywgc2V0X3dhaXRlcnMpO1xcbi0tXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zNTAtXFx0XFx0LypcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjM1MTpcXHRcXHQgKiBmdXRleF9sb2NrX3BpX2F0b21pYygpIGRpZCBub3QgYWNxdWlyZSB0aGUgdXNlciBzcGFjZVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMzUyLVxcdFxcdCAqIGZ1dGV4LCBidXQgbWFuYWdlZCB0byBlc3RhYmxpc2ggdGhlIHByb3h5IGxvY2sgYW5kIHBpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjUzOjE0LjQ5MDkwMjM4N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NzM0NTkyMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBLZXJuZWwncyBGdXRleCBJbXBsZW1lbnRhdGlvbiBhbmQgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgZnV0ZXggbG9ja2luZywgc3BlY2lmaWNhbGx5IHRoZSBwcm9jZXNzIGlzb2xhdGlvbiB2YXJpYW50LiBJIHNlZSB0aGF0IGJvdGggYGZ1dGV4X2xvY2tfcGlgIGFuZCBgZnV0ZXhfcHJveHlfdHJ5bG9ja19hdG9taWNgIHVsdGltYXRlbHkgY2FsbCBgZnV0ZXhfbG9ja19waV9hdG9taWNgLiBNYWtlcyBzZW5zZSwgdGhleSdyZSBsaWtlbHkganVzdCBkaWZmZXJlbnQgd3JhcHBlcnMgYXJvdW5kIHRoZSBjb3JlIGF0b21pYyBvcGVyYXRpb24uIE5vdywgSSB3YW50IHRvIHRyYWNlIGhvdyB0aGlzIGxvY2tpbmcgaW50ZXJhY3RzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgZHVyaW5nIHByb2Nlc3MgbGlmZWN5Y2xlIGV2ZW50cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgaXMgaGFuZGxlZCB3aGVuIHRocmVhZHMgYXJlIHJlbGVhc2VkLiBMZXQgbWUgY2hlY2sgdGhlIGBleGVjX21tX3JlbGVhc2VgIGFuZCBgZXhpdF9tbV9yZWxlYXNlYCBmdW5jdGlvbnMgd2l0aGluIGBrZXJuZWwvZm9yay5jYC4gVGhhdCdzIHdoZXJlIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzaG91bGQgYmUgaGFuZGxlZCB3aGVuIHByb2Nlc3NlcyBhcmUgc3dhcHBlZCBvciB0ZXJtaW5hdGVkLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBwcm9jZXNzIGlzb2xhdGlvbiBhbmQgbWVtb3J5IHJlbGVhc2VzIGFyZSBjb3VwbGVkIHdpdGggdGhlc2UgZnV0ZXggb3BlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ5MiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjUzOjE5LjM2NDM2NDExNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU1MTc5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleGVjX21tX3JlbGVhc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2ZvcmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZm9yay5jPTE1MDU9dm9pZCBleGl0X21tX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2ZvcmsuYy0xNTEwLVxcbmtlcm5lbC9mb3JrLmM6MTUxMTp2b2lkIGV4ZWNfbW1fcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxua2VybmVsL2ZvcmsuYy0xNTEyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTM6MTkuNDA5OTIxNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MjE3NDkzMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUHJvY2VzcyBUZXJtaW5hdGlvbiBhbmQgRnV0ZXggSW50ZXJhY3Rpb25zKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgZnV0ZXhlcyBpbnRlcmFjdCB3aXRoIHByb2Nlc3MgdGVybWluYXRpb24gYW5kIGV4ZWN1dGlvbi4gVGhlIHN0YXJ0aW5nIHBvaW50IHNlZW1zIHRvIGJlIHRoYXQgYGV4ZWNfbW1fcmVsZWFzZWAsIHRyaWdnZXJlZCBieSBgZXhlY19tbWFwYCBpbiBgZnMvZXhlYy5jYCwgYW5kIGBleGl0X21tX3JlbGVhc2VgLCB0cmlnZ2VyZWQgYnkgYGV4aXRfbW1gIGluIGBrZXJuZWwvZXhpdC5jYCwgYXJlIHRoZSBrZXkgcGxheWVycy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJlbGF0ZSB0byBmdXRleCBvcGVyYXRpb25zIGR1cmluZyBwcm9jZXNzIHRyYW5zaXRpb25zLlxuXG5JIHNlZSB0aGF0IGBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5gIGFuZCBgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZGAgYXJlIGNhbGxlZCBieSBgZXhlY19tbV9yZWxlYXNlYCBhbmQgYGV4ZWNfbW1hcGAgcmVzcGVjdGl2ZWx5LiBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgZm9jdXMuIE5vdywgbGV0J3MgZHJpbGwgZG93biBvbiB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGludm9sdmVkLlxuXG5UaGVyZWZvcmUsIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGFyZTpcblxuKiAgIGBmdXRleF9sb2NrX3BpYCAtIFRoZSBwcm9iYWJsZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgcHJpb3JpdHkgaW5oZXJpdGFuY2UgbG9ja3MgYXJlIGhhbmRsZWQuXG4qICAgYGZ1dGV4X3Byb3h5X3RyeWxvY2tfYXRvbWljYCBvciBgZnV0ZXhfcmVxdWV1ZWAgLSBDcnVjaWFsIGZvciB0aGUgcHJvY2VzcyBvZiBtYW5hZ2luZyB0aGUgcXVldWUgYW5kIHRoZSBsb2NrIHN0YXR1cy5cbiogICBgZXhlY19tbWFwYCAob3IgYGRvX2V4ZWN2ZWF0X2NvbW1vbmAgLyBgYnBybV9leGVjdmVgKSAtIFRoZSBlbnRyeSBwb2ludCBmb3IgZXhlY3V0aW9uIG9yIHJlbGF0ZWQgZXhlY3V0aW9uIG9wZXJhdGlvbnMuXG4qICAgYGV4aXRfbW1fcmVsZWFzZWAgKG9yIGBleGl0X21tYCAvIGBkb19leGl0YCkgLSBIb3cgbWVtb3J5IG1hbmFnZW1lbnQgcmVzb3VyY2VzIGFyZSBjbGVhbmVkIHVwIGR1cmluZyBleGl0LlxuXG5HaXZlbiB0aGUgcG90ZW50aWFsIGZvciBjb250ZW50aW9uIGR1cmluZyBleGVjIGFuZCBleGl0LCBJIHNob3VsZCBjaGVjayBob3cgdGhlc2UgaW50ZXJhY3Qgd2l0aCBmdXRleGVzLiBOZXh0IHVwIGlzIGxvb2tpbmcgaW50byB0aGUgYGZ1dGV4X2xvY2tfcGlgIGFuZCBgZnV0ZXhfcmVxdWV1ZWAgaW1wbGVtZW50YXRpb25zLiBUaGlzIHNob3VsZCByZXZlYWwgaG93IHByaW9yaXR5IGluaGVyaXRhbmNlIGFuZCBxdWV1ZSBtYW5hZ2VtZW50IGFyZSBwZXJmb3JtZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NzEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTM6MjQuODMxNjczMTIzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQyNTEzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9sb2NrX3BpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L2Z1dGV4Lmg9Mzg0PWV4dGVybiB2b2lkIGZ1dGV4X3FfdW5sb2NrKHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zODYtXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6Mzg3OmV4dGVybiBpbnQgZnV0ZXhfbG9ja19waV9hdG9taWModTMyIF9fdXNlciAqdWFkZHIsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIsXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzg4LVxcdFxcdFxcdFxcdHVuaW9uIGZ1dGV4X2tleSAqa2V5LFxcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9NDc1PWV4dGVybiBpbnQgZnV0ZXhfdW5sb2NrX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHZvaWQgX191c2VyICpwb3ApO1xcbmtlcm5lbC9mdXRleC9mdXRleC5oLTQ3Ni1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDo0Nzc6ZXh0ZXJuIGludCBmdXRleF9sb2NrX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGt0aW1lX3QgKnRpbWUsIGludCB0cnlsb2NrKTtcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC00NzgtXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYz0yMDM9c3RhdGljIGludCBhdHRhY2hfdG9fcGlfc3RhdGUodTMyIF9fdXNlciAqdWFkZHIsIHUzMiB1dmFsLFxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmMtMjE4LVxcdCAqIFdlIGdldCBoZXJlIHdpdGggaGItXFx1MDAzZWxvY2sgaGVsZCwgYW5kIGhhdmluZyBmb3VuZCBhXFxua2VybmVsL2Z1dGV4L3BpLmM6MjE5OlxcdCAqIGZ1dGV4X3RvcF93YWl0ZXIoKS4gVGhpcyBtZWFucyB0aGF0IGZ1dGV4X2xvY2tfcGkoKSBvZiBzYWlkIGZ1dGV4X3FcXG5rZXJuZWwvZnV0ZXgvcGkuYy0yMjAtXFx0ICogaGFzIGRyb3BwZWQgdGhlIGhiLVxcdTAwM2Vsb2NrIGluIGJldHdlZW4gZnV0ZXhfcXVldWUoKSBhbmQgZnV0ZXhfdW5xdWV1ZV9waSgpLFxcbmtlcm5lbC9mdXRleC9waS5jOjIyMTpcXHQgKiB3aGljaCBpbiB0dXJuIG1lYW5zIHRoYXQgZnV0ZXhfbG9ja19waSgpIHN0aWxsIGhhcyBhIHJlZmVyZW5jZSBvblxcbmtlcm5lbC9mdXRleC9waS5jLTIyMi1cXHQgKiBvdXIgcGlfc3RhdGUuXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy0yMjQtXFx0ICogVGhlIHdhaXRlciBob2xkaW5nIGEgcmVmZXJlbmNlIG9uIEBwaV9zdGF0ZSBhbHNvIHByb3RlY3RzIGFnYWluc3RcXG5rZXJuZWwvZnV0ZXgvcGkuYzoyMjU6XFx0ICogdGhlIHVubG9ja2VkIHB1dF9waV9zdGF0ZSgpIGluIGZ1dGV4X3VubG9ja19waSgpLCBmdXRleF9sb2NrX3BpKClcXG5rZXJuZWwvZnV0ZXgvcGkuYy0yMjYtXFx0ICogYW5kIGZ1dGV4X3dhaXRfcmVxdWV1ZV9waSgpIGFzIGl0IGNhbm5vdCBnbyB0byAwIGFuZCBjb25zZXF1ZW50bHlcXG4tLVxcbmtlcm5lbC9mdXRleC9waS5jPTMyMT1zdGF0aWMgaW50IGhhbmRsZV9leGl0X3JhY2UodTMyIF9fdXNlciAqdWFkZHIsIHUzMiB1dmFsLFxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmMtMzM4LVxcdCAqIHN5c19leGl0KClcXHRcXHRcXHRzeXNfZnV0ZXgoKVxcbmtlcm5lbC9mdXRleC9waS5jOjMzOTpcXHQgKiAgZG9fZXhpdCgpXFx0XFx0XFx0IGZ1dGV4X2xvY2tfcGkoKVxcbmtlcm5lbC9mdXRleC9waS5jOjM0MDpcXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnV0ZXhfbG9ja19waV9hdG9taWMoKVxcbmtlcm5lbC9mdXRleC9waS5jLTM0MS1cXHQgKiAgIGV4aXRfc2lnbmFscyh0c2spXFx0XFx0ICAgIE5vIHdhaXRlcnM6XFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYz00ODM9c3RhdGljIGludCBsb2NrX3BpX3VwZGF0ZV9hdG9taWModTMyIF9fdXNlciAqdWFkZHIsIHUzMiB1dmFsLCB1MzIgbmV3dmFsKVxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmMtNDk5LS8qKlxcbmtlcm5lbC9mdXRleC9waS5jOjUwMDogKiBmdXRleF9sb2NrX3BpX2F0b21pYygpIC0gQXRvbWljIHdvcmsgcmVxdWlyZWQgdG8gYWNxdWlyZSBhIHBpIGF3YXJlIGZ1dGV4XFxua2VybmVsL2Z1dGV4L3BpLmMtNTAxLSAqIEB1YWRkcjpcXHRcXHR0aGUgcGkgZnV0ZXggdXNlciBhZGRyZXNzXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy01MjItICovXFxua2VybmVsL2Z1dGV4L3BpLmM6NTIzOmludCBmdXRleF9sb2NrX3BpX2F0b21pYyh1MzIgX191c2VyICp1YWRkciwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYixcXG5rZXJuZWwvZnV0ZXgvcGkuYy01MjQtXFx0XFx0XFx0IHVuaW9uIGZ1dGV4X2tleSAqa2V5LFxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmM9ODg0PWludCBmaXh1cF9waV9vd25lcih1MzIgX191c2VyICp1YWRkciwgc3RydWN0IGZ1dGV4X3EgKnEsIGludCBsb2NrZWQpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy05MjktICovXFxua2VybmVsL2Z1dGV4L3BpLmM6OTMwOmludCBmdXRleF9sb2NrX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGt0aW1lX3QgKnRpbWUsIGludCB0cnlsb2NrKVxcbmtlcm5lbC9mdXRleC9waS5jLTkzMS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy05NTktXFxua2VybmVsL2Z1dGV4L3BpLmM6OTYwOlxcdFxcdHJldCA9IGZ1dGV4X2xvY2tfcGlfYXRvbWljKHVhZGRyLCBoYiwgXFx1MDAyNnEua2V5LCBcXHUwMDI2cS5waV9zdGF0ZSwgY3VycmVudCxcXG5rZXJuZWwvZnV0ZXgvcGkuYy05NjEtXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmV4aXRpbmcsIDApO1xcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmM9MTE0OD1zdGF0aWMgaW50IF9fZnV0ZXhfdW5sb2NrX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy0xMjAwLVxcdFxcdCAqXFxua2VybmVsL2Z1dGV4L3BpLmM6MTIwMTpcXHRcXHQgKiBTaW5jZSB0aGUgY2xlYW51cDogY2FzZSBpbiBmdXRleF9sb2NrX3BpKCkgcmVtb3ZlcyB0aGVcXG5rZXJuZWwvZnV0ZXgvcGkuYy0xMjAyLVxcdFxcdCAqIHJ0X3dhaXRlciB3aXRob3V0IGhvbGRpbmcgaGItXFx1MDAzZWxvY2ssIGl0IGlzIHBvc3NpYmxlIGZvclxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmMtMTIxNi1cXHRcXHQgKiBpcyBsZWF2aW5nLiBUaGUgZW50cnkgbmVlZHMgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IHNvIGFcXG5rZXJuZWwvZnV0ZXgvcGkuYzoxMjE3OlxcdFxcdCAqIG5ldyBmdXRleF9sb2NrX3BpKCkgaXMgbm90IHVzaW5nIHRoaXMgc3RhbGUgUEktc3RhdGUgd2hpbGVcXG5rZXJuZWwvZnV0ZXgvcGkuYy0xMjE4LVxcdFxcdCAqIHRoZSBmdXRleCBpcyBhdmFpbGFibGUgaW4gdXNlciBzcGFjZSBhZ2Fpbi5cXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM9MjMwPXZvaWQgcmVxdWV1ZV9waV93YWtlX2Z1dGV4KHN0cnVjdCBmdXRleF9xICpxLCB1bmlvbiBmdXRleF9rZXkgKmtleSxcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMjY3LSAqIFdha2UgdGhlIHRvcCB3YWl0ZXIgaWYgd2Ugc3VjY2VlZC4gIElmIHRoZSBjYWxsZXIgc3BlY2lmaWVkIHNldF93YWl0ZXJzLFxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MjY4OiAqIHRoZW4gZGlyZWN0IGZ1dGV4X2xvY2tfcGlfYXRvbWljKCkgdG8gZm9yY2Ugc2V0dGluZyB0aGUgRlVURVhfV0FJVEVSUyBiaXQuXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0yNjktICogaGIxIGFuZCBoYjIgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIuXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTI4MT1mdXRleF9wcm94eV90cnlsb2NrX2F0b21pYyh1MzIgX191c2VyICpwaWZ1dGV4LCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMSxcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMjk4LVxcdCAqIElmIHRoZSBjYWxsZXIgaW50ZW5kcyB0byByZXF1ZXVlIG1vcmUgdGhhbiAxIHdhaXRlciB0byBwaWZ1dGV4LFxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6Mjk5OlxcdCAqIGZvcmNlIGZ1dGV4X2xvY2tfcGlfYXRvbWljKCkgdG8gc2V0IHRoZSBGVVRFWF9XQUlURVJTIGJpdCBub3csXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zMDAtXFx0ICogYXMgd2UgaGF2ZSBtZWFucyB0byBoYW5kbGUgdGhlIHBvc3NpYmxlIGZhdWx0LiAgSWYgbm90LCBkb24ndCBzZXRcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMzM1LVxcdCAqL1xcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MzM2OlxcdHJldCA9IGZ1dGV4X2xvY2tfcGlfYXRvbWljKHBpZnV0ZXgsIGhiMiwga2V5MiwgcHMsIHRvcF93YWl0ZXItXFx1MDAzZXRhc2ssXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zMzctXFx0XFx0XFx0XFx0ICAgZXhpdGluZywgc2V0X3dhaXRlcnMpO1xcbi0tXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zNTAtXFx0XFx0LypcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjM1MTpcXHRcXHQgKiBmdXRleF9sb2NrX3BpX2F0b21pYygpIGRpZCBub3QgYWNxdWlyZSB0aGUgdXNlciBzcGFjZVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMzUyLVxcdFxcdCAqIGZ1dGV4LCBidXQgbWFuYWdlZCB0byBlc3RhYmxpc2ggdGhlIHByb3h5IGxvY2sgYW5kIHBpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTc4Nj1pbnQgZnV0ZXhfd2FpdF9yZXF1ZXVlX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTg5NS1cXHRcXHRcXHQgKiBXZSd2ZSBhbHJlYWR5IGJlZW4gcmVxdWV1ZWQsIGJ1dCBjYW5ub3QgcmVzdGFydFxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6ODk2OlxcdFxcdFxcdCAqIGJ5IGNhbGxpbmcgZnV0ZXhfbG9ja19waSgpIGRpcmVjdGx5LiBXZSBjb3VsZFxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtODk3LVxcdFxcdFxcdCAqIHJlc3RhcnQgdGhpcyBzeXNjYWxsLCBidXQgaXQgd291bGQgZGV0ZWN0IHRoYXRcXG4tLVxcbmtlcm5lbC9mdXRleC9zeXNjYWxscy5jPTEwOD1sb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXFxuLS1cXG5rZXJuZWwvZnV0ZXgvc3lzY2FsbHMuYy0xNDgtXFx0Y2FzZSBGVVRFWF9MT0NLX1BJMjpcXG5rZXJuZWwvZnV0ZXgvc3lzY2FsbHMuYzoxNDk6XFx0XFx0cmV0dXJuIGZ1dGV4X2xvY2tfcGkodWFkZHIsIGZsYWdzLCB0aW1lb3V0LCAwKTtcXG5rZXJuZWwvZnV0ZXgvc3lzY2FsbHMuYy0xNTAtXFx0Y2FzZSBGVVRFWF9VTkxPQ0tfUEk6XFxuLS1cXG5rZXJuZWwvZnV0ZXgvc3lzY2FsbHMuYy0xNTItXFx0Y2FzZSBGVVRFWF9UUllMT0NLX1BJOlxcbmtlcm5lbC9mdXRleC9zeXNjYWxscy5jOjE1MzpcXHRcXHRyZXR1cm4gZnV0ZXhfbG9ja19waSh1YWRkciwgZmxhZ3MsIE5VTEwsIDEpO1xcbmtlcm5lbC9mdXRleC9zeXNjYWxscy5jLTE1NC1cXHRjYXNlIEZVVEVYX1dBSVRfUkVRVUVVRV9QSTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTM6MjQuODgwMTA2Mzc4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMjA1OTM3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZ1dGV4IGFuZCBFeGVjdXRpb24gUGF0aCBJbnRlcmFjdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhlc2UgZnV0ZXggb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBwcmlvcml0eSBpbmhlcml0YW5jZSB2YXJpYW50cywgaW50ZXJhY3Qgd2l0aCBwcm9jZXNzIGV4ZWN1dGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgdXNlZCB3aXRoaW4gYGRvX2Z1dGV4YCBmb3IgdGhlIHZhcmlvdXMgcHJpb3JpdHkgaW5oZXJpdGFuY2UgRlVURVggb3BlcmF0aW9ucy4gSSBzZWUgdGhhdCBgZnV0ZXhfbG9ja19waWAgaGFuZGxlcyBgRlVURVhfTE9DS19QSWAsIGBGVVRFWF9MT0NLX1BJMmAsIGFuZCBgRlVURVhfVFJZTE9DS19QSWAuIFRoZW4sIGBmdXRleF93YWl0X3JlcXVldWVfcGlgIGlzIGVtcGxveWVkIGZvciBgRlVURVhfV0FJVF9SRVFVRVVFX1BJYCwgYW5kIGBmdXRleF9yZXF1ZXVlYCBnZXRzIHVzZWQgd2hlbiBhIGBGVVRFWF9DTVBfUkVRVUVVRV9QSWAgY2FsbCBpcyBtYWRlLlxuXG5UaGVyZWZvcmUsIHRoZSBjcml0aWNhbCBwYXRocyBJIG5lZWQgdG8gZXhhbWluZSBpbnZvbHZlIHRob3NlIHRocmVlIGZ1dGV4IGZ1bmN0aW9ucy4gQWRkaXRpb25hbGx5LCBjb25zaWRlcmluZyB0aGUgZHluYW1pYyBuYXR1cmUgb2YgcHJvY2VzcyBleGVjdXRpb24gYW5kIG1lbW9yeSBtYXBwaW5nIGR1cmluZyBhIG5ldyBwcm9ncmFtIGxhdW5jaCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBleGVjIHN5c3RlbSBjYWxsIGludGVyZmFjZXMgd2l0aCBhbGwgb2YgdGhpcy4gVGh1cywgSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IGBleGVjX21tYXBgIChvciBwb3RlbnRpYWxseSBgYnBybV9leGVjdmVgLCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uIGFuZCBzcGVjaWZpYyBhcmNoaXRlY3R1cmUpIHBsYXlzIGEgcm9sZSBpbiB0aGlzLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGBleGVjX21tYXBgIGluIGBmcy9leGVjLmNgLiBJJ20gaG9waW5nIHRvIGRpc2NvdmVyIGFueSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBmdXRleGVzIGFuZCB0aGUgbWVtb3J5IHNwYWNlIHNldHVwIG9yIHRlYXJkb3duIHRoYXQgaGFwcGVucyBkdXJpbmcgYSBwcm9jZXNzIGltYWdlIHN3YXAuIFVuZGVyc3RhbmRpbmcgdGhlc2UgaW50ZXJhY3Rpb25zIGlzIGtleSB0byBwaW5wb2ludGluZyBwb3RlbnRpYWwgcHJpb3JpdHkgaW52ZXJzaW9uIGlzc3VlcyBvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjUyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjUzOjMwLjAwMDcwMjgzOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4NzMyMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXhlY19tbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4ZWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leGVjLmM9MTE3PWJvb2wgcGF0aF9ub2V4ZWMoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXFxuLS1cXG5mcy9leGVjLmMtMTI3LS8qXFxuZnMvZXhlYy5jOjEyODogKiBUaGUgbmFzY2VudCBicHJtLVxcdTAwM2VtbSBpcyBub3QgdmlzaWJsZSB1bnRpbCBleGVjX21tYXAoKSBidXQgaXQgY2FuXFxuZnMvZXhlYy5jLTEyOS0gKiB1c2UgYSBsb3Qgb2YgbWVtb3J5LCBhY2NvdW50IHRoZXNlIHBhZ2VzIGluIGN1cnJlbnQtXFx1MDAzZW1tIHRlbXBvcmFyeVxcbi0tXFxuZnMvZXhlYy5jPTgzND1FWFBPUlRfU1lNQk9MKHJlYWRfY29kZSk7XFxuLS1cXG5mcy9leGVjLmMtODQyLSAqL1xcbmZzL2V4ZWMuYzo4NDM6c3RhdGljIGludCBleGVjX21tYXAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG5mcy9leGVjLmMtODQ0LXtcXG4tLVxcbmZzL2V4ZWMuYy04ODAtXFx0dGFza19sb2NrKHRzayk7XFxuZnMvZXhlYy5jOjg4MTpcXHRtZW1iYXJyaWVyX2V4ZWNfbW1hcChtbSk7XFxuZnMvZXhlYy5jLTg4Mi1cXG4tLVxcbmZzL2V4ZWMuYz0xMDk5PXZvaWQgX19zZXRfdGFza19jb21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBjb25zdCBjaGFyICpidWYsIGJvb2wgZXhlYylcXG4tLVxcbmZzL2V4ZWMuYy0xMTEyLSAqIHNpZ25hbCAodmlhIGRlX3RocmVhZCgpIG9yIGNvcmVkdW1wKSwgb3Igd2lsbCBoYXZlIFNFR1YgcmFpc2VkXFxuZnMvZXhlYy5jOjExMTM6ICogKGFmdGVyIGV4ZWNfbW1hcCgpKSBieSBzZWFyY2hfYmluYXJ5X2hhbmRsZXIgKHNlZSBiZWxvdykuXFxuZnMvZXhlYy5jLTExMTQtICovXFxuZnMvZXhlYy5jPTExMTU9aW50IGJlZ2luX25ld19leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtKVxcbi0tXFxuZnMvZXhlYy5jLTExNTQtXFx0LypcXG5mcy9leGVjLmM6MTE1NTpcXHQgKiBNdXN0IGJlIGNhbGxlZCBfYmVmb3JlXyBleGVjX21tYXAoKSBhcyBicHJtLVxcdTAwM2VtbSBpc1xcbmZzL2V4ZWMuYy0xMTU2LVxcdCAqIG5vdCB2aXNpYmxlIHVudGlsIHRoZW4uIERvaW5nIGl0IGhlcmUgYWxzbyBlbnN1cmVzXFxuLS1cXG5mcy9leGVjLmMtMTE3MS1cXHRhY2N0X2FyZ19zaXplKGJwcm0sIDApO1xcbmZzL2V4ZWMuYzoxMTcyOlxcdHJldHZhbCA9IGV4ZWNfbW1hcChicHJtKTtcXG5mcy9leGVjLmMtMTE3My1cXHRpZiAocmV0dmFsKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1MzozMC4wNDg1ODA5NTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxOTQ3NzgyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXaGVyZSBhbSBJIGxpa2VseSB0byBmaW5kIHRoZSByb290IG9mIHRoaXMgYmVoYXZpb3I/XG5cbioqUm9vdCBDYXVzZSBJbnZlc3RpZ2F0aW9uKipcblxuUmlnaHQsIGBleGVjX21tYXBgLi4uIHRoYXQncyBhIGtleSBmdW5jdGlvbiBmb3IgbWVtb3J5IG1hcHBpbmcgZHVyaW5nIGV4ZWN1dGlvbi4gVGhlIGNhbGwgY2hhaW4gZm9yIHRoYXQsIGZyb20gd2hhdCBJJ3ZlIHNlZW4sIGdvZXMgdGhyb3VnaCBgYmVnaW5fbmV3X2V4ZWNgLiBUaGF0IGZ1bmN0aW9uIGl0c2VsZiBpcyBjYWxsZWQgYnkgdGhlIGBsb2FkX2VsZl9iaW5hcnlgIGZ1bmN0aW9uIGFzIHdlbGwgYXMgb3RoZXIgYmluYXJ5IGhhbmRsZXJzLiBTbyB0aGF0IG1lYW5zIGBiZWdpbl9uZXdfZXhlY2Agb3IgcG90ZW50aWFsbHkgYGJwcm1fZXhlY3ZlYCBhcmUgdmVyeSBsaWtlbHkgc3BvdHMgdG8gc3RhcnQuIExldCdzIHN0YXJ0IHdpdGggYGJlZ2luX25ld19leGVjYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzAzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTM6MzMuNzY4MDYyMjQ2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTg0NjQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiZWdpbl9uZXdfZXhlY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYmluZm10X2VsZi5jPTgzMj1zdGF0aWMgaW50IGxvYWRfZWxmX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvYmluZm10X2VsZi5jLTEwMDktXFx0LyogRmx1c2ggYWxsIHRyYWNlcyBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgZXhlY3V0YWJsZSAqL1xcbmZzL2JpbmZtdF9lbGYuYzoxMDEwOlxcdHJldHZhbCA9IGJlZ2luX25ld19leGVjKGJwcm0pO1xcbmZzL2JpbmZtdF9lbGYuYy0xMDExLVxcdGlmIChyZXR2YWwpXFxuLS1cXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM9MTgyPXN0YXRpYyBpbnQgbG9hZF9lbGZfZmRwaWNfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtMzQ0LVxcdC8qIGZsdXNoIGFsbCB0cmFjZXMgb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIGV4ZWN1dGFibGUgKi9cXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM6MzQ1OlxcdHJldHZhbCA9IGJlZ2luX25ld19leGVjKGJwcm0pO1xcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy0zNDYtXFx0aWYgKHJldHZhbClcXG4tLVxcbmZzL2JpbmZtdF9mbGF0LmM9NDA2PXN0YXRpYyBpbnQgbG9hZF9mbGF0X2ZpbGUoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG4tLVxcbmZzL2JpbmZtdF9mbGF0LmMtNTA4LVxcdC8qIEZsdXNoIGFsbCB0cmFjZXMgb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIGV4ZWN1dGFibGUgKi9cXG5mcy9iaW5mbXRfZmxhdC5jOjUwOTpcXHRyZXQgPSBiZWdpbl9uZXdfZXhlYyhicHJtKTtcXG5mcy9iaW5mbXRfZmxhdC5jLTUxMC1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZXhlYy5jPTI1OD1zdGF0aWMgaW50IGJwcm1fbW1faW5pdChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvZXhlYy5jLTI2Ny1cXG5mcy9leGVjLmM6MjY4OlxcdC8qIFN0YWdlZCBmb3Igd291bGRfZHVtcCgpIG5hcnJvd2luZzsgY29uc3VtZWQgYnkgYmVnaW5fbmV3X2V4ZWMoKS4gKi9cXG5mcy9leGVjLmMtMjY5LVxcdGJwcm0tXFx1MDAzZXVzZXJfbnMgPSBnZXRfdXNlcl9ucyhjdXJyZW50X3VzZXJfbnMoKSk7XFxuLS1cXG5mcy9leGVjLmM9MTA5OT12b2lkIF9fc2V0X3Rhc2tfY29tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgY29uc3QgY2hhciAqYnVmLCBib29sIGV4ZWMpXFxuLS1cXG5mcy9leGVjLmMtMTExNC0gKi9cXG5mcy9leGVjLmM6MTExNTppbnQgYmVnaW5fbmV3X2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pXFxuZnMvZXhlYy5jLTExMTYte1xcbi0tXFxuZnMvZXhlYy5jLTEzMTQtfVxcbmZzL2V4ZWMuYzoxMzE1OkVYUE9SVF9TWU1CT0woYmVnaW5fbmV3X2V4ZWMpO1xcbmZzL2V4ZWMuYy0xMzE2LVxcbi0tXFxuZnMvZXhlYy5jPTE2ODA9c3RhdGljIGludCBzZWFyY2hfYmluYXJ5X2hhbmRsZXIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2V4ZWMuYy0xNzEyLVxcbmZzL2V4ZWMuYzoxNzEzOi8qIGJpbmZtdCBoYW5kbGVycyB3aWxsIGNhbGwgYmFjayBpbnRvIGJlZ2luX25ld19leGVjKCkgb24gc3VjY2Vzcy4gKi9cXG5mcy9leGVjLmMtMTcxNC1zdGF0aWMgaW50IGV4ZWNfYmlucHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5mcy9leGVjLmM9MTc1OT1zdGF0aWMgaW50IGJwcm1fZXhlY3ZlKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5mcy9leGVjLmMtMTc2OC1cXHQgKiBDaGVjayBmb3IgdW5zYWZlIGV4ZWN1dGlvbiBzdGF0ZXMgYmVmb3JlIGV4ZWNfYmlucHJtKCksIHdoaWNoXFxuZnMvZXhlYy5jOjE3Njk6XFx0ICogd2lsbCBjYWxsIGJhY2sgaW50byBiZWdpbl9uZXdfZXhlYygpLCBpbnRvIGJwcm1fY3JlZHNfZnJvbV9maWxlKCksXFxuZnMvZXhlYy5jLTE3NzAtXFx0ICogd2hlcmUgc2V0dWlkLW5lc3MgaXMgZXZhbHVhdGVkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1MzozMy44NDM5MTQ5MDhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA5NjUyMzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFNlY3VyaXR5IFZ1bG5lcmFiaWxpdGllcyBEdXJpbmcgUHJvY2VzcyBFeGVjdXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gcHJvY2VzcyBleGVjdXRpb24gYW5kIGxvb2tpbmcgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBicHJtX2V4ZWN2ZWAgaXMgYSBwcm9taXNpbmcgYXJlYSB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBMZXQncyBzZWUuLi4gd2hhdCBhYm91dCBgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luYCBhbmQgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRgPyBUaGV5J3JlIG9mdGVuIHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCwgc28gaXQgbWFrZXMgc2Vuc2UgdG8gY2hlY2sgdGhvc2UuIEFoLCBJIHNlZSwgdGhleSdyZSBjYWxsZWQgZnJvbSBgZXhlY19tbV9yZWxlYXNlYCBhbmQgYGV4ZWNfbW1hcGAuIFRoYXQncyBpbnRlcmVzdGluZy4gTm93LCBgZXhlY19tbV9yZWxlYXNlYCBpcyBhbHNvIGNhbGxlZCBmcm9tIGBleGVjX21tYXBgLiBXYWl0IGEgc2Vjb25k4oCmIHRoYXQgbG9va3MgbGlrZSBhIGNhbGwgd2l0aGluIGBleGVjX21tYXBgIGluIGBmcy9leGVjLmNgLCBzbyBJIHJlYWxseSBzaG91bGQgZG91YmxlLWNoZWNrIGBmcy9leGVjLmNgIHRvIHNlZSBpZiB0aGVyZSdzIGFueXRoaW5nIG1pc3NlZCBvciB0aGF0IHdhcnJhbnRzIGZ1cnRoZXIgYW5hbHlzaXMuIEJhY2sgdG8gdGhlIGNvZGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzU3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjUzOjQyLjk0MDQ0MDM5OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzMDkwMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXhlY19tbV9yZWxlYXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4ZWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leGVjLmM9ODQzPXN0YXRpYyBpbnQgZXhlY19tbWFwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5mcy9leGVjLmMtODU3LVxcdG9sZF9tbSA9IGN1cnJlbnQtXFx1MDAzZW1tO1xcbmZzL2V4ZWMuYzo4NTg6XFx0ZXhlY19tbV9yZWxlYXNlKHRzaywgb2xkX21tKTtcXG5mcy9leGVjLmMtODU5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1Mzo0Mi45ODk3NTU3ODNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI4NDAzMjcxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1dGV4IFBJIE93bmVyIFJlbGVhc2UgZm9yIEV4ZWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBleGVjX21tX3JlbGVhc2VgIGZ1bmN0aW9uIGFuZCBpdCdzIGNhbGxlZCByaWdodCBmcm9tIHdpdGhpbiBgZXhlY19tbWFwYC4gVGhpcyBwYXRjaCBpcyBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGEgcmFjZSBjb25kaXRpb24gaW52b2x2aW5nIGZ1dGV4IFBJIG93bmVycyBkdXJpbmcgYW4gZXhlY3ZlLiBJIHNlZSB0aGF0IGBmdXRleF9leGVjX3JlbGVhc2VgIGlzIGJlaW5nIGJyb2tlbiBkb3duIGludG8gYGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbmAgYW5kIGBmdXRleF9leGVjX3JlbGVhc2VfZW5kYC4gVGhlIGBiZWdpbmAgdmVyc2lvbiBnb2VzIGludG8gYGV4ZWNfbW1fcmVsZWFzZWAsIHNvIGl0J3MgaGFwcGVuaW5nIGVhcmx5IGluIGBleGVjX21tYXBgLCBiZWZvcmUgdGhlIG5ldyBtZW1vcnkgbWFwIChtbSkgaXMgZXZlbiBzZXQgdXAuIFRoZSBgZW5kYCB2ZXJzaW9uIGtpY2tzIGluIGxhdGVyLCBhZnRlciB0aGUgbmV3IGBtbWAgaXMgaW5zdGFsbGVkLlxuXG5UaGUgY29yZSBvZiB0aGUgZml4IGlzIHRvIG1hbmFnZSB0aGUgc3RhdGUgb2YgdGhlIGZ1dGV4IFBJIG93bmVyIGR1cmluZyB0aGUgZXhlYyBwcm9jZXNzLiBJdCdzIG1lYW50IHRvIGFkZHJlc3MgdGhlIHNjZW5hcmlvIHdoZXJlIHRoZSBQSSBvd25lciBpcyBlaXRoZXIgZXhpdGluZyBvciwgaW4gdGhpcyBjYXNlLCBwZXJmb3JtaW5nIGFuIGBleGVjYC4gSSBzZWUgdGhlIGtleSBjaGVjayBpcyBpbiBgYXR0YWNoX3RvX3BpX293bmVyYDpcblxuYGBgY1xuXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTU1VKSBcdTAwMjZcdTAwMjYgZnV0ZXhfa2V5X2lzX3ByaXZhdGUoa2V5KSBcdTAwMjZcdTAwMjZcblx0ICAgIFJFQURfT05DRShwLVx1MDAzZW1tKSAhPSBrZXktXHUwMDNlcHJpdmF0ZS5tbSkge1xuXHRcdHJhd19zcGluX3VubG9ja19pcnEoXHUwMDI2cC1cdTAwM2VwaV9sb2NrKTtcblx0XHRwdXRfdGFza19zdHJ1Y3QocCk7XG5cdFx0cmV0dXJuIC1FU1JDSDtcblx0fVxuYGBgXG5cbkVzc2VudGlhbGx5LCBpZiB0aGUgdGFzaydzIGBtbWAgaGFzIGNoYW5nZWQgKmFmdGVyKiB0aGUgaW5pdGlhbCBgZnV0ZXhfa2V5YCBjaGVjayAodXNpbmcgYFJFQURfT05DRWAgdG8gZW5zdXJlIHdlIHNlZSB0aGUgbGF0ZXN0IHZhbHVlKSwgd2UgKmRvbid0KiBhdHRhY2ggdG8gaXQuIEl0J3MgYSBjcml0aWNhbCBzYWZldHkgbWVhc3VyZSB0byBhdm9pZCBzdGFsZSBwb2ludGVycyBvciBpbmNvcnJlY3QgYXNzb2NpYXRpb25zIGFmdGVyIHRoZSBleGVjLiBJIHRoaW5rIHRoZSBpZGVhIGlzIHRoYXQgdGhlIHRhc2sgaXMgXCJleGVjLWluZ1wiIGFuZCBpdHMgbW0gaGFzIGNoYW5nZWQsIHNvIHdlIGNhbm5vdCBhdHRhY2ggdG8gaXQgYW55IG1vcmUsIG9yIGl0IHdpbGwgY2F1c2UgYW4gaXNzdWUuXG5cblRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBhcmUgYEZVVEVYYCBhbmQgYEZVVEVYX1BJYCwgb2YgY291cnNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBGVVRFWF9QSWAgaXMgYWN0dWFsbHkgZGVmaW5lZCwgdGhhdCdzIGltcG9ydGFudCBmb3IgdGhlIHdob2xlIHRoaW5nIHRvIHdvcmssIGFuZCB0byBiZSB0ZXN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTk4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjUzOjUxLjI3Mzc5MTA2NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE2NjI4NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRlVURVhfUElcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xODM0PWNvbmZpZyBGVVRFWFxcbi0tXFxuaW5pdC9LY29uZmlnLTE4NDMtXFxuaW5pdC9LY29uZmlnOjE4NDQ6Y29uZmlnIEZVVEVYX1BJXFxuaW5pdC9LY29uZmlnLTE4NDUtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1Mzo1MS4zMjU0NTk1MDhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQxMjY2Njc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgYEZVVEVYX1BJYCBhbmQgYE1NVWAqKlxuXG5Pa2F5LCBzbyBgRlVURVhfUElgIGlzIGRlZmluaXRlbHkgYSB0aGluZywgZ29vZC4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCwgb3IgYE1NVWAsIGlzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGlzIHB1enpsZS4gVGhlIGNvZGUgdXNlcyBgSVNfRU5BQkxFRChDT05GSUdfTU1VKWAsIHNvIHRoZSBkZXBlbmRlbmN5IGlzIGNsZWFybHkgdGhlcmUuIEFsdGhvdWdoIGl0J3MgdXN1YWxseSBlbmFibGVkIGJ5IGRlZmF1bHQgb24gbW9zdCBvZiB0aGUgYXJjaGl0ZWN0dXJlcyBJIHdvcmsgd2l0aCwgaXQncyBhIGdvb2QgcHJhY3RpY2UgdG8gY29uZmlybS4gV2l0aCB0aGUgZGVwZW5kZW5jeSBlc3RhYmxpc2hlZCwgSSdsbCBtb3ZlIG9uIHRvIGEgZGVlcGVyIGRpdmUuIExldCdzIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEZVVEVYX1BJYCBpdHNlbGYgYW5kIHNlZSB3aGF0IG90aGVyIGNvbmRpdGlvbnMgb3IgbW9kdWxlcyBpdCByZWxpZXMgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDYzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTM6NTUuNzM4MTI4MjgyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODkwMTkwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlVURVhfUElcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xODM0PWNvbmZpZyBGVVRFWFxcbi0tXFxuaW5pdC9LY29uZmlnLTE4NDMtXFxuaW5pdC9LY29uZmlnOjE4NDQ6Y29uZmlnIEZVVEVYX1BJXFxuaW5pdC9LY29uZmlnLTE4NDUtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1Mzo1NS43ODcwNDg2MDdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwNzQ3NTE5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCB3aGVyZSdzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHVudGFuZ2xpbmcgdGhpcyBjb25maWd1cmF0aW9uIGlzc3VlPyBHaXZlbiB0aGUgbmF0dXJlIG9mIHdoYXQgSSdtIGxvb2tpbmcgZm9yLCBgaW5pdC9LY29uZmlnYCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJIHdhbnQgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbnMsIGFuZCBJJ20gcHJldHR5IHN1cmUgSSByZW1lbWJlciB0aGVyZSBiZWluZyBzb21lIGNydWNpYWwgZGVmaW5pdGlvbnMgYXJvdW5kIGxpbmUgMTg0NC4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIGFyZWEgZm9yIGxvb2tpbmcgYXQgYmFzZSBvcHRpb25zIG9yIGNvcmUgbW9kdWxlIHNldHRpbmdzLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlIOKAkyBob3BlZnVsbHksIEkgY2FuIHNwb3QgdGhlIGtleSBkZXBlbmRlbmNpZXMgb3IgZGVmYXVsdCBiZWhhdmlvcnMgdGhhdCBhcmUgY2F1c2luZyB0aGUgY3VycmVudCBoaWNjdXAuIEl0J3MgYSBiaXQgb2YgYSBjb2RlIGFyY2hhZW9sb2d5IHByb2plY3QsIGJ1dCBzdGFydGluZyB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGRlZmluaXRpb25zIGlzIGFsbW9zdCBhbHdheXMgdGhlIHJpZ2h0IHdheSB0byBhcHByb2FjaCB0aGVzZSBraW5kcyBvZiBwcm9ibGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzODQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1NDowMC4yOTQ1MjYyODlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODM0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODM0OlxcdGNvbmZpZyBGVVRFWFxcbjE4MzU6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGZ1dGV4IHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbjE4MzY6XFx0XFx0ZGVwZW5kcyBvbiAhKFNQQVJDMzIgXFx1MDAyNlxcdTAwMjYgU01QKVxcbjE4Mzc6XFx0XFx0ZGVmYXVsdCB5XFxuMTgzODpcXHRcXHRpbXBseSBSVF9NVVRFWEVTXFxuMTgzOTpcXHRcXHRoZWxwXFxuMTg0MDpcXHRcXHQgIERpc2FibGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRoZSBrZXJuZWwgdG8gYmUgYnVpbHQgd2l0aG91dFxcbjE4NDE6XFx0XFx0ICBzdXBwb3J0IGZvciBcXFwiZmFzdCB1c2Vyc3BhY2UgbXV0ZXhlc1xcXCIuICBUaGUgcmVzdWx0aW5nIGtlcm5lbCBtYXkgbm90XFxuMTg0MjpcXHRcXHQgIHJ1biBnbGliYy1iYXNlZCBhcHBsaWNhdGlvbnMgY29ycmVjdGx5LlxcbjE4NDM6XFx0XFxuMTg0NDpcXHRjb25maWcgRlVURVhfUElcXG4xODQ1OlxcdFxcdGJvb2xcXG4xODQ2OlxcdFxcdGRlcGVuZHMgb24gRlVURVggXFx1MDAyNlxcdTAwMjYgUlRfTVVURVhFU1xcbjE4NDc6XFx0XFx0ZGVmYXVsdCB5XFxuMTg0ODpcXHRcXG4xODQ5OlxcdGNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcXG4xODUwOlxcdFxcdGJvb2xcXG4xODUxOlxcdFxcdGRlcGVuZHMgb24gRlVURVggXFx1MDAyNlxcdTAwMjYgIUJBU0VfU01BTEwgXFx1MDAyNlxcdTAwMjYgTU1VXFxuMTg1MjpcXHRcXHRkZWZhdWx0IHlcXG4xODUzOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1NDowMC4yOTQ2NTQ0NjlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTk5ODI3NjMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFbmFibGluZyBGdXRleCBhbmQgUmVhbC1UaW1lIE11dGV4ZXMgZm9yIFByaW9yaXR5IEluaGVyaXRhbmNlIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBgRlVURVhfUElgIGlzIGluaGVyZW50bHkgcmVsaWFudCBvbiBib3RoIGBGVVRFWGAgYW5kIGBSVF9NVVRFWEVTYC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIFRoZXJlZm9yZSwgd2UgYWJzb2x1dGVseSAqbXVzdCogZW5hYmxlIHRob3NlIHR3byBvcHRpb25zIGFzIHByZXJlcXVpc2l0ZXMuIFRoaXMgaXMgZnVuZGFtZW50YWwuXG5cbk5vdywgbGV0J3MgcGlucG9pbnQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSBnb2luZyB0byBkZW1hbmQgb3VyIGF0dGVudGlvbiwgdGhlIGFyZWFzIHdoZXJlIHRoZSBwcmlvcml0eSBpbmhlcml0YW5jZSBsb2dpYyBpcyBtb3N0IGNyaXRpY2FsLiBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBmb2N1cyBvbjogYGZ1dGV4X2xvY2tfcGlgLCBgZnV0ZXhfd2FpdF9yZXF1ZXVlX3BpYCwgYGZ1dGV4X3JlcXVldWVgLCBhbmQgYGRvX2Z1dGV4YC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cy5cblxuV2FpdCBhIHNlY29uZC4uLkkgc2VlIGBicHJtX2V4ZWN2ZWAgb24gdGhpcyBsaXN0LiBEaWRuJ3QgSSBqdXN0IHNwb3QgdGhhdD8gSG1tbS4gSXMgdGhpcyBzdGF0aWMsIEkgd29uZGVyPyBMZXQgbWUgY2hlY2sgYGZzL2V4ZWMuY2AgYW5kIG1ha2Ugc3VyZSBpdCBpcyBub3QgdXNlZCBpbiBhbm90aGVyIGNvbnRleHQuIEJlc3QgdG8gYmUgc3VyZSBvZiB0aGUgc2NvcGUgb2YgdGhpcyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4ODEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1NDoxMC4yOTI5MzQzNjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzgyMzM0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicHJtX2V4ZWN2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leGVjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXhlYy5jPTE0MzA9c3RhdGljIHN0cnVjdCBsaW51eF9iaW5wcm0gKmFsbG9jX2Jwcm0oaW50IGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLCBpbnQgZmxhZ3MpXFxuLS1cXG5mcy9leGVjLmMtMTQ4MC1cXHQgKiBzdG9wIGp1c3QgYWZ0ZXIgdGhlIHNlY3VyaXR5X2Jwcm1fY3JlZHNfZm9yX2V4ZWMoKSBjYWxsIGluXFxuZnMvZXhlYy5jOjE0ODE6XFx0ICogYnBybV9leGVjdmUoKS4gIEluZGVlZCwgdGhlIGtlcm5lbCBzaG91bGQgbm90IHRyeSB0byBwYXJzZSB0aGVcXG5mcy9leGVjLmMtMTQ4Mi1cXHQgKiBjb250ZW50IG9mIHRoZSBmaWxlIHdpdGggZXhlY19iaW5wcm0oKSBub3IgY2hhbmdlIHRoZSBjYWxsaW5nXFxuLS1cXG5mcy9leGVjLmM9MTcxND1zdGF0aWMgaW50IGV4ZWNfYmlucHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5mcy9leGVjLmMtMTc1OC1cXG5mcy9leGVjLmM6MTc1OTpzdGF0aWMgaW50IGJwcm1fZXhlY3ZlKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuZnMvZXhlYy5jLTE3NjAte1xcbi0tXFxuZnMvZXhlYy5jPTE4MTM9c3RhdGljIGludCBkb19leGVjdmVhdF9jb21tb24oaW50IGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLFxcbi0tXFxuZnMvZXhlYy5jLTE4ODAtXFxuZnMvZXhlYy5jOjE4ODE6XFx0cmV0dXJuIGJwcm1fZXhlY3ZlKGJwcm0pO1xcbmZzL2V4ZWMuYy0xODgyLX1cXG4tLVxcbmZzL2V4ZWMuYz0xODg0PWludCBrZXJuZWxfZXhlY3ZlKGNvbnN0IGNoYXIgKmtlcm5lbF9maWxlbmFtZSxcXG4tLVxcbmZzL2V4ZWMuYy0xOTI2LVxcbmZzL2V4ZWMuYzoxOTI3OlxcdHJldHVybiBicHJtX2V4ZWN2ZShicHJtKTtcXG5mcy9leGVjLmMtMTkyOC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjU0OjEwLjcyNjc2MjkwNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjAzNDg4NzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqQW5hbHl6aW5nIGBkb19leGVjdmVhdF9jb21tb25gIGFuZCBJdHMgQ2FsbGVycyoqXG5cbk9rYXksIHNvIGBkb19leGVjdmVhdF9jb21tb25gIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3Rpbmc7IGl0IG1lYW5zIGl0J3Mgb25seSB2aXNpYmxlIHdpdGhpbiBpdHMgY29tcGlsYXRpb24gdW5pdCwgd2hpY2ggbGltaXRzIGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIHBvaW50cyBvZiBpbnRlcmFjdGlvbi4gVGhhdCdzIGdyZWF0IGZvciBjb2RlIG9yZ2FuaXphdGlvbiwgZ2VuZXJhbGx5IHNwZWFraW5nLCBidXQgaXQgbWVhbnMgSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2hlbiBmaWd1cmluZyBvdXQgaG93IGl0J3MgKmFjdHVhbGx5KiB1c2VkIHdpdGhpbiB0aGUgc3lzdGVtLlxuXG5NeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyB3aGVyZSBgZG9fZXhlY3ZlYXRfY29tbW9uYCBpcyBjYWxsZWQuIEZpbmRpbmcgdGhlIGNhbGxlcnMgd2lsbCBwcm92aWRlIGNydWNpYWwgY29udGV4dCDigJMgdGhlIHJlYXNvbnMgZm9yIGl0cyBpbnZvY2F0aW9uLCB0aGUgZGF0YSBpdCdzIHBhc3NlZCwgYW5kIHRoZSBvdmVyYWxsIGV4ZWN1dGlvbiBmbG93IGl0J3MgZW1iZWRkZWQgd2l0aGluLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGV4ZWN2ZWF0IGltcGxlbWVudGF0aW9uLiBMZXQncyBkaWcgaW50byB0aGUgY2FsbCBncmFwaCBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEkgZXhwZWN0IGl0J3MgZ29pbmcgdG8gYmUgY2VudHJhbCB0byB0aGUgb3ZlcmFsbCBleGVjdmVhdCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjQwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTQ6MjIuNzYxNjUyNzg0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTE2MTA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19leGVjdmVhdF9jb21tb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXhlYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4ZWMuYz00MDM9c3RhdGljIGludCBicHJtX3N0YWNrX2xpbWl0cyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvZXhlYy5jLTQzNS1cXHQgKiBhcmdjIGNhbiBuZXZlciBiZSAwLCB0byBrZWVwIHRoZW0gZnJvbSB3YWxraW5nIGVudnAgYnkgYWNjaWRlbnQuXFxuZnMvZXhlYy5jOjQzNjpcXHQgKiBTZWUgZG9fZXhlY3ZlYXRfY29tbW9uKCkuXFxuZnMvZXhlYy5jLTQzNy1cXHQgKi9cXG4tLVxcbmZzL2V4ZWMuYz0xNzU5PXN0YXRpYyBpbnQgYnBybV9leGVjdmUoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2V4ZWMuYy0xODEyLVxcbmZzL2V4ZWMuYzoxODEzOnN0YXRpYyBpbnQgZG9fZXhlY3ZlYXRfY29tbW9uKGludCBmZCwgc3RydWN0IGZpbGVuYW1lICpmaWxlbmFtZSxcXG5mcy9leGVjLmMtMTgxNC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgdXNlcl9hcmdfcHRyIGFyZ3YsXFxuLS1cXG5mcy9leGVjLmM9MTk0OD1TWVNDQUxMX0RFRklORTMoZXhlY3ZlLFxcbi0tXFxuZnMvZXhlYy5jLTE5NTMtXFx0Q0xBU1MoZmlsZW5hbWUsIG5hbWUpKGZpbGVuYW1lKTtcXG5mcy9leGVjLmM6MTk1NDpcXHRyZXR1cm4gZG9fZXhlY3ZlYXRfY29tbW9uKEFUX0ZEQ1dELCBuYW1lLFxcbmZzL2V4ZWMuYy0xOTU1LVxcdFxcdFxcdFxcdCAgbmF0aXZlX2FyZyhhcmd2KSwgbmF0aXZlX2FyZyhlbnZwKSwgMCk7XFxuLS1cXG5mcy9leGVjLmM9MTk1OD1TWVNDQUxMX0RFRklORTUoZXhlY3ZlYXQsXFxuLS1cXG5mcy9leGVjLmMtMTk2NC1cXHRDTEFTUyhmaWxlbmFtZV91ZmxhZ3MsIG5hbWUpKGZpbGVuYW1lLCBmbGFncyk7XFxuZnMvZXhlYy5jOjE5NjU6XFx0cmV0dXJuIGRvX2V4ZWN2ZWF0X2NvbW1vbihmZCwgbmFtZSxcXG5mcy9leGVjLmMtMTk2Ni1cXHRcXHRcXHRcXHQgIG5hdGl2ZV9hcmcoYXJndiksIG5hdGl2ZV9hcmcoZW52cCksIGZsYWdzKTtcXG4tLVxcbmZzL2V4ZWMuYz0xOTc2PUNPTVBBVF9TWVNDQUxMX0RFRklORTMoZXhlY3ZlLCBjb25zdCBjaGFyIF9fdXNlciAqLCBmaWxlbmFtZSxcXG4tLVxcbmZzL2V4ZWMuYy0xOTgwLVxcdENMQVNTKGZpbGVuYW1lLCBuYW1lKShmaWxlbmFtZSk7XFxuZnMvZXhlYy5jOjE5ODE6XFx0cmV0dXJuIGRvX2V4ZWN2ZWF0X2NvbW1vbihBVF9GRENXRCwgbmFtZSxcXG5mcy9leGVjLmMtMTk4Mi1cXHRcXHRcXHRcXHQgIGNvbXBhdF9hcmcoYXJndiksIGNvbXBhdF9hcmcoZW52cCksIDApO1xcbi0tXFxuZnMvZXhlYy5jPTE5ODU9Q09NUEFUX1NZU0NBTExfREVGSU5FNShleGVjdmVhdCwgaW50LCBmZCxcXG4tLVxcbmZzL2V4ZWMuYy0xOTkxLVxcdENMQVNTKGZpbGVuYW1lX3VmbGFncywgbmFtZSkoZmlsZW5hbWUsIGZsYWdzKTtcXG5mcy9leGVjLmM6MTk5MjpcXHRyZXR1cm4gZG9fZXhlY3ZlYXRfY29tbW9uKGZkLCBuYW1lLFxcbmZzL2V4ZWMuYy0xOTkzLVxcdFxcdFxcdFxcdCAgY29tcGF0X2FyZyhhcmd2KSwgY29tcGF0X2FyZyhlbnZwKSwgZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1NDoyMi44MTI4MTkyODlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQzNTQ0MzExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBGdXRleGVzIGFuZCBFeGVjdXRpb24qKlxuXG5Pa2F5LCBzbyBgZG9fZXhlY3ZlYXRfY29tbW9uYCBpcyB0aGUgd29ya2hvcnNlIGJlaGluZCBib3RoIGBleGVjdmVgIGFuZCBgZXhlY3ZlYXRgLiBUaGF0J3MgZ29vZCwgaXQgc2ltcGxpZmllcyB0aGluZ3MuIFN5emthbGxlciB3aWxsIGhhbmRsZSBmdXp6aW5nIHRob3NlIHN5c3RlbSBjYWxscyBkaXJlY3RseSwgc28gSSBkb24ndCBuZWVkIHRvIGV4cGxpY2l0bHkgdGFyZ2V0IHRoZSBjb21tb24gZnVuY3Rpb24uIEl0IG1ha2VzIHNlbnNlLCBmb2N1c2luZyBvbiB0aGUgaGlnaGVyIGxldmVsIGNhbGxzIHdpbGwgYmUgbW9yZSBlZmZpY2llbnQgZm9yIGlkZW50aWZ5aW5nIHZ1bG5lcmFiaWxpdGllcy5cblxuTXkgYXR0ZW50aW9uIG5vdyBuZWVkcyB0byBzaGlmdCB0byB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgZnV0ZXggYW5kIGV4ZWN1dGlvbiBwcm9jZXNzLiBJIHNob3VsZCByZWFsbHkgZm9jdXMgb24gYGZ1dGV4X2xvY2tfcGlgLCBgZnV0ZXhfd2FpdF9yZXF1ZXVlX3BpYCwgYGZ1dGV4X3JlcXVldWVgLCBgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luYCwgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRgLCBhbmQgYGV4ZWNfbW1fcmVsZWFzZWAuIFRoZXNlIGZ1bmN0aW9ucyBwcm9iYWJseSBoYXZlIGEgcm9sZSBpbiB0aGUgY29ycmVjdCBzeW5jaHJvbml6YXRpb24gb2Ygc2hhcmVkIG1lbW9yeSBhcmVhcywgYW5kIGNvbnRleHQgc3dpdGNoaW5nLCBhcm91bmQgcHJvY2VzcyBleGVjdXRpb24uXG5cbldhaXQgYSBzZWNvbmQuLi4gYXJlbid0IGBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5gIGFuZCBgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZGAgbm90IHN0YXRpYz8gVGhleSdyZSBnbG9iYWwsIG9yIGF0IGxlYXN0IGV4cG9ydGVkLiBUaGF0J3MgaW50ZXJlc3RpbmcsIG1lYW5zIHRoZXkgbWlnaHQgYmUgdXNlZCBleHRlcm5hbGx5LiBOZWVkIHRvIGNoZWNrIGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCBmb3IgbW9yZSBpbmZvLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZXRhaWxzIG9mIHRoZWlyIGludGVuZGVkIHVzZSwgYW5kIGlmIHRoZXkgcmVwcmVzZW50IGEgcG9zc2libGUgYXR0YWNrIHZlY3Rvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1ODQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTQ6MjguMjQ4MjY2MDM5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc2ODExNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jPTE1Mjc9c3RhdGljIHZvaWQgZnV0ZXhfY2xlYW51cF9lbmQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBzdGF0ZSlcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTU0MS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE1NDI6dm9pZCBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNTQzLVxcdF9fYWNxdWlyZXMoXFx1MDAyNnRzay1cXHUwMDNlZnV0ZXguZXhpdF9tdXRleClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTQ6MjguMjk0MDM5MDA1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMDYwMjUzNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgRnV0ZXggRnVuY3Rpb25zIGZvciBQb3RlbnRpYWwgSXNzdWVzKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1dGV4IGZ1bmN0aW9uczogYGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbmAsIGBmdXRleF9leGVjX3JlbGVhc2VfZW5kYCwgYGZ1dGV4X2xvY2tfcGlgLCBgZnV0ZXhfd2FpdF9yZXF1ZXVlX3BpYCwgYW5kIGBmdXRleF9yZXF1ZXVlYC4gVGhleSdyZSBhbGwgZ2xvYmFsLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyB0aGVtIGFzIHBvdGVudGlhbCBwb2ludHMgb2YgY29udGVudGlvbiBpbiBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdCBhbmQgd2hlcmUgdGhleSdyZSB1c2VkLiBgZnV0ZXhfcmVxdWV1ZWAgc2VlbXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCBzbyBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGl0cyBpbXBsZW1lbnRhdGlvbi4gVGhlIGZpbGUgdG8gbG9vayBhdCBpcyBga2VybmVsL2Z1dGV4L3JlcXVldWUuY2AuIEkgbmVlZCB0byByZXZpZXcgaXRzIGxvZ2ljLCBwYXJ0aWN1bGFybHkgYW55IGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGZ1dGV4IGZ1bmN0aW9ucywgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9jayBwb3NzaWJpbGl0aWVzLCBvciBvdGhlciBjb25jdXJyZW5jeSBpc3N1ZXMgbHVya2luZyB3aXRoaW4uIFRoaXMgaXMgd2hlcmUgSSdsbCBnZXQgYSBnb29kIGdyYXNwIG9mIHRoZSByZS1xdWV1ZSBmdW5jdGlvbmFsaXR5IGFuZCBpdHMgcm9sZSBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjE2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTQ6MzQuMzAwMDY2Nzg1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc1MjExNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9yZXF1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9yZXF1ZXVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L3JlcXVldWUuYz03Nj12b2lkIHJlcXVldWVfZnV0ZXgoc3RydWN0IGZ1dGV4X3EgKnEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIxLFxcbi0tXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy05OC1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjk5OnN0YXRpYyBpbmxpbmUgYm9vbCBmdXRleF9yZXF1ZXVlX3BpX3ByZXBhcmUoc3RydWN0IGZ1dGV4X3EgKnEsXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0xMDAtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBmdXRleF9waV9zdGF0ZSAqcGlfc3RhdGUpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTEzMS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjEzMjpzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfcmVxdWV1ZV9waV9jb21wbGV0ZShzdHJ1Y3QgZnV0ZXhfcSAqcSwgaW50IGxvY2tlZClcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTEzMy17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTE2Mi1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjE2MzpzdGF0aWMgaW5saW5lIGludCBmdXRleF9yZXF1ZXVlX3BpX3dha2V1cF9zeW5jKHN0cnVjdCBmdXRleF9xICpxKVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMTY0LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMjA2LSAqXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzoyMDc6ICogRHVyaW5nIGZ1dGV4X3JlcXVldWUsIHdpdGggcmVxdWV1ZV9waT0xLCBpdCBpcyBwb3NzaWJsZSB0byBhY3F1aXJlIHRoZVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMjA4LSAqIHRhcmdldCBmdXRleCBpZiBpdCBpcyB1bmNvbnRlbmRlZCBvciB2aWEgYSBsb2NrIHN0ZWFsLlxcbi0tXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYz0yMzA9dm9pZCByZXF1ZXVlX3BpX3dha2VfZnV0ZXgoc3RydWN0IGZ1dGV4X3EgKnEsIHVuaW9uIGZ1dGV4X2tleSAqa2V5LFxcbi0tXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0yNDktXFx0LyogU2lnbmFsIGxvY2tlZCBzdGF0ZSB0byB0aGUgd2FpdGVyICovXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzoyNTA6XFx0ZnV0ZXhfcmVxdWV1ZV9waV9jb21wbGV0ZShxLCAxKTtcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTI1MS1cXHR3YWtlX3VwX3N0YXRlKHRhc2ssIFRBU0tfTk9STUFMKTtcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM9MjgxPWZ1dGV4X3Byb3h5X3RyeWxvY2tfYXRvbWljKHUzMiBfX3VzZXIgKnBpZnV0ZXgsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIxLFxcbi0tXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zMjEtXFx0LyogRW5zdXJlIHRoYXQgdGhpcyBkb2VzIG5vdCByYWNlIGFnYWluc3QgYW4gZWFybHkgd2FrZXVwICovXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzozMjI6XFx0aWYgKCFmdXRleF9yZXF1ZXVlX3BpX3ByZXBhcmUodG9wX3dhaXRlciwgTlVMTCkpIHtcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTMyMy1cXHRcXHRwbGlzdF9kZWwoXFx1MDAyNnRvcF93YWl0ZXItXFx1MDAzZWxpc3QsIFxcdTAwMjZoYjEtXFx1MDAzZWNoYWluKTtcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMzQ3LVxcdFxcdC8qIFJld2luZCB0b3Bfd2FpdGVyOjpyZXF1ZXVlX3N0YXRlICovXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzozNDg6XFx0XFx0ZnV0ZXhfcmVxdWV1ZV9waV9jb21wbGV0ZSh0b3Bfd2FpdGVyLCByZXQpO1xcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMzQ5LVxcdH0gZWxzZSB7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTM2My0vKipcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjM2NDogKiBmdXRleF9yZXF1ZXVlKCkgLSBSZXF1ZXVlIHdhaXRlcnMgZnJvbSB1YWRkcjEgdG8gdWFkZHIyXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zNjUtICogQHVhZGRyMTpcXHRzb3VyY2UgZnV0ZXggdXNlciBhZGRyZXNzXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTM4MS0gKi9cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjM4MjppbnQgZnV0ZXhfcmVxdWV1ZSh1MzIgX191c2VyICp1YWRkcjEsIHVuc2lnbmVkIGludCBmbGFnczEsXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zODMtXFx0XFx0ICB1MzIgX191c2VyICp1YWRkcjIsIHVuc2lnbmVkIGludCBmbGFnczIsXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTQxMi1cXHRcXHQvKlxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6NDEzOlxcdFxcdCAqIGZ1dGV4X3JlcXVldWUoKSBhbGxvd3MgdGhlIGNhbGxlciB0byBkZWZpbmUgdGhlIG51bWJlclxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtNDE0LVxcdFxcdCAqIG9mIHdhaXRlcnMgdG8gd2FrZSB1cCB2aWEgdGhlIEBucl93YWtlIGFyZ3VtZW50LiBXaXRoXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTYzNy1cXHRcXHRcXHQvKiBEb24ndCByZXF1ZXVlIHdoZW4gdGhlIHdhaXRlciBpcyBhbHJlYWR5IG9uIHRoZSB3YXkgb3V0LiAqL1xcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6NjM4OlxcdFxcdFxcdGlmICghZnV0ZXhfcmVxdWV1ZV9waV9wcmVwYXJlKHRoaXMsIHBpX3N0YXRlKSkge1xcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtNjM5LVxcdFxcdFxcdFxcdC8qXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTY2NS1cXHRcXHRcXHRcXHRyZXF1ZXVlX2Z1dGV4KHRoaXMsIGhiMSwgaGIyLCBcXHUwMDI2a2V5Mik7XFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzo2NjY6XFx0XFx0XFx0XFx0ZnV0ZXhfcmVxdWV1ZV9waV9jb21wbGV0ZSh0aGlzLCAwKTtcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTY2Ny1cXHRcXHRcXHRcXHR0YXNrX2NvdW50Kys7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTY3Ny1cXHRcXHRcXHRcXHRwdXRfcGlfc3RhdGUocGlfc3RhdGUpO1xcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6Njc4OlxcdFxcdFxcdFxcdGZ1dGV4X3JlcXVldWVfcGlfY29tcGxldGUodGhpcywgcmV0KTtcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTY3OS1cXHRcXHRcXHRcXHQvKlxcbi0tXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYz03MTM9aW50IGhhbmRsZV9lYXJseV9yZXF1ZXVlX3BpX3dha2V1cChzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxcbi0tXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy03NTUtICpcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjc1NjogKiBUaGUgY2FsbGVyIHdpbGwgd2FpdCBvbiB1YWRkciBhbmQgd2lsbCBiZSByZXF1ZXVlZCBieSBmdXRleF9yZXF1ZXVlKCkgdG9cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTc1Ny0gKiB1YWRkcjIgd2hpY2ggbXVzdCBiZSBQSSBhd2FyZSBhbmQgdW5pcXVlIGZyb20gdWFkZHIuICBOb3JtYWwgd2FrZXVwIHdpbGwgd2FrZVxcbi0tXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy03NjQtICogdmlhIHRoZSBmb2xsb3dpbmctLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6NzY1OiAqIDEpIHdha2V1cCBvbiB1YWRkcjIgYWZ0ZXIgYW4gYXRvbWljIGxvY2sgYWNxdWlzaXRpb24gYnkgZnV0ZXhfcmVxdWV1ZSgpXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy03NjYtICogMikgd2FrZXVwIG9uIHVhZGRyMiBhZnRlciBhIHJlcXVldWVcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM9Nzg2PWludCBmdXRleF93YWl0X3JlcXVldWVfcGkodTMyIF9fdXNlciAqdWFkZHIsIHVuc2lnbmVkIGludCBmbGFncyxcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtODMzLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6ODM0OlxcdHN3aXRjaCAoZnV0ZXhfcmVxdWV1ZV9waV93YWtldXBfc3luYyhcXHUwMDI2cSkpIHtcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTgzNS1cXHRjYXNlIFFfUkVRVUVVRV9QSV9JR05PUkU6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjU0OjM0LjM0NzgyMzM4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTg4NzE0ODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBGdXRleCBhbmQgUHJvY2VzcyBJbmhlcml0YW5jZSBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gYGZ1dGV4X3JlcXVldWVgLCB0aGF0J3MgZGVmaW5pdGVseSBhIGdsb2JhbCBzeW1ib2wuIExldCdzIGRpZyBpbnRvIHRoZSBleGVjdXRpb24gcGF0aCBhIGJpdCBkZWVwZXIsIHN0YXJ0aW5nIHdpdGggYGV4ZWNfbW1hcGAgaW4gYGZzL2V4ZWMuY2AuIEknbGwgd2FudCB0byB0cmFjZSBob3cgZnV0ZXhlcyBhcmUgbWFuYWdlZCBkdXJpbmcgYW4gYGV4ZWNgLiBJdCdzIHN0YXRpYywgc28gdGhhdCBuYXJyb3dzIHRoZSBzY29wZSBvZiB0aGUgc2VhcmNoIGEgYml0LiBUaGUga2V5IGZ1bmN0aW9ucyB0byBleGFtaW5lIHdpdGhpbiB0aGF0IGNvbnRleHQgYXJlIGBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5gIGFuZCBgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZGAuXG5cblRoYXQgbWVhbnMgbXkgbWFpbiBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzIGZvciB0aGUgY29kZSBkaXZlOlxuKiAgIGBmdXRleF9sb2NrX3BpYFxuKiAgIGBmdXRleF93YWl0X3JlcXVldWVfcGlgXG4qICAgYGZ1dGV4X3JlcXVldWVgXG4qICAgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbmBcbiogICBgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZGBcblxuTm93LCByZWdhcmRpbmcgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhcmUgb2J2aW91c2x5IGBGVVRFWGAsIGBGVVRFWF9QSWAsIGFuZCBgUlRfTVVURVhFU2AuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYEtjb25maWdgIGZvciBgRlVURVhfUElgLiBJdCBkZXBlbmRzIG9uIGJvdGggYEZVVEVYYCBhbmQgYFJUX01VVEVYRVNgLiBUaGF0J3MgaW1wb3J0YW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIGJvdGggb2YgdGhvc2UgYXJlIGVuYWJsZWQuIEFoLCB3YWl0LCBob2xkIG9uLiBgRlVURVhfUElgIGlzIGEgaGlkZGVuIGNvbmZpZzsgaXQgZG9lc24ndCBldmVuIGhhdmUgYSBwcm9tcHQuIEl0IGRlZmF1bHRzIHRvICd5JyBpZiBib3RoIGBGVVRFWGAgYW5kIGBSVF9NVVRFWEVTYCBhcmUgZW5hYmxlZC4gU28sIHRvIGJlIGNsZWFyLCBlbmFibGluZyAqb25seSogYEZVVEVYYCBhbmQgYFJUX01VVEVYRVNgIGlzIHRoZSByZWFsIHRhcmdldC4gTGV0J3MgbWFrZSBzdXJlIGBSVF9NVVRFWEVTYCBpcyBjb25maWd1cmFibGUsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxMDEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTQ6NDUuMzM2NTQyNzg3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTc1MzY1NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFJUX01VVEVYRVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL0tjb25maWcubG9ja3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjU0OjQ1LjM4NjMwNDY0MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjM5OTk0MTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uLiBNeSBnb2FsIGlzIHRvIGZpbmQgd2hlcmUgdGhlIGBSVF9NVVRFWEVTYCBzZXR0aW5nIGlzIGRlZmluZWQgYW5kIHVzZWQuIEknbGwgbmVlZCB0byBzZWFyY2ggdGhlIGVudGlyZSBzb3VyY2UgdHJlZSBmb3Igb2NjdXJyZW5jZXMgb2YgdGhhdCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSdtIGdvaW5nIHRvIGxldmVyYWdlIG15IHNlYXJjaCB0b29scyBhbmQgc3RhcnQgd2l0aCBhIGJyb2FkIGFwcHJvYWNoLCBlbnN1cmluZyBJIGRvbid0IG1pc3MgYW55dGhpbmcuIExldCdzIGdldCBjcmFja2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4MzUsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1NDo1Mi4wMjYzMDE3NzhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODcwODMwNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFJUX01VVEVYRVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0yMjY0PXNvdXJjZSBcXFwiYXJjaC9LY29uZmlnXFxcIlxcbmluaXQvS2NvbmZpZy0yMjY1LVxcbmluaXQvS2NvbmZpZzoyMjY2OmNvbmZpZyBSVF9NVVRFWEVTXFxuaW5pdC9LY29uZmlnLTIyNjctXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1NDo1My44MTMzOTM5ODdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAyNDU2MjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTmF2aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gdGhlIGlzc3VlIHNlZW1zIHRvIGJlIGNvbmZpZ3VyYXRpb24tcmVsYXRlZC4gTXkgaW5pdGlhbCBpbnR1aXRpb24gcG9pbnRzIG1lIHRvd2FyZHMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBmaWxlcywgYW5kLCBiYXNlZCBvbiBleHBlcmllbmNlLCBteSBtb25leSdzIG9uIHRoZSBgaW5pdC9LY29uZmlnYCBkaXJlY3RvcnkuIFRoYXQncyB1c3VhbGx5IHRoZSBnby10byBzcG90IGZvciBpbml0aWFsaXppbmcga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0J3MgZGl2ZSBpbiBhbmQgdGFrZSBhIGxvb2sgYXQgd2hhdCdzIGRlZmluZWQgaW4gdGhlcmUuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgb3B0aW9uIGRlZmluaXRpb24gb3IgYSBsaWtlbHkgaW5jbHVkZSBmaWxlIHJlbGF0ZWQgdG8gbXkgcHJvYmxlbS4gTGV0J3Mgc2VlIGlmIHRoZSBjb25maWd1cmF0aW9uIGtleSBpcyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA2NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjU0OjU5LjgzNzk2MDcxN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg5OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyNjYsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyNjY6XFx0Y29uZmlnIFJUX01VVEVYRVNcXG4yMjY3OlxcdFxcdGJvb2xcXG4yMjY4OlxcdFxcdGRlZmF1bHQgeSBpZiBQUkVFTVBUX1JUXFxuMjI2OTpcXHRcXG4yMjcwOlxcdGNvbmZpZyBNT0RVTEVfU0lHX0ZPUk1BVFxcbjIyNzE6XFx0XFx0ZGVmX2Jvb2wgblxcbjIyNzI6XFx0XFx0c2VsZWN0IFNZU1RFTV9EQVRBX1ZFUklGSUNBVElPTlxcbjIyNzM6XFx0XFxuMjI3NDpcXHRzb3VyY2UgXFxcImtlcm5lbC9tb2R1bGUvS2NvbmZpZ1xcXCJcXG4yMjc1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1NDo1OS44MzgwOTE2NDZaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxMzc0MzUyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFN5bmNocm9uaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBSVF9NVVRFWEVTYCBpcyBhIGhpZGRlbiBjb25maWcsIGJ1dCBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCBpZiBgUFJFRU1QVF9SVGAgaXMgZW5hYmxlZC4gSW1wb3J0YW50bHksIGBGVVRFWGAgKmltcGxpZXMqIGBSVF9NVVRFWEVTYCwgd2hpY2ggaXMgZ3JlYXQsIG1lYW5pbmcgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBlbmFibGluZyBgUlRfTVVURVhFU2AgZXhwbGljaXRseS4gU2luY2UgYFJUX01VVEVYRVNgIGlzIGhpZGRlbiwgd2UgY2FuJ3QgZGlyZWN0bHkgZW5hYmxlIGl0IGluIEtjb25maWcsIGJ1dCB0aGUgYGltcGx5YCBkaXJlY3RpdmUgdGFrZXMgY2FyZSBvZiBpdCB3aGVuIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBGVVRFWGAgYXJlIG1ldC5cblxuSSBzZWUgYEZVVEVYYCBoYXMgYmVlbiBlbmFibGVkLCBhcyB0aGUgYGRlZmF1bHQgeWAgbGluZSBpbXBsaWVzLiBUaGF0J3MgZ29vZCB0byBrbm93LiBOb3csIGxldCdzIGtlZXAgYW4gZXllIG91dCBmb3IgYEZVVEVYX1BJYCBiZWNhdXNlLCB3ZWxsLCBldmVuIHRob3VnaCBpdCdzIGhpZGRlbiwgYW5kIGRlZmF1bHRzIHRvIGB5YCBpZiBgRlVURVhgIGFuZCBgUlRfTVVURVhFU2AgYXJlIGVuYWJsZWQsIHdlIG1pZ2h0IG5lZWQgaXQuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIGBDT05GSUdfTU1VYCBpcyBhbHNvIGludm9sdmVkLCBhbmQgdGhhdCdzIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0IG9uIG1vc3QgYXJjaGl0ZWN0dXJlcy5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyBpbnRlcmVzdGluZy4gSXQncyBzcGxpdHRpbmcgYGZ1dGV4X2V4ZWNfcmVsZWFzZWAgaW50byBgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luYCBhbmQgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRgLiBUaGUgY29udGV4dCBpcyBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiB3aGVuIGEgZnV0ZXggUEkgb3duZXIgaXMgZXhlY3V0aW5nLiBTcGVjaWZpY2FsbHksIGEgdGFzayB0cmllcyB0byBhdHRhY2ggdG8gdGhlIFBJIG93bmVyLiBUaGUga2V5IHBhcnQgaXMgdGhlIGNoZWNrIGluIGBhdHRhY2hfdG9fcGlfb3duZXJgIHRvIG1ha2Ugc3VyZSB0aGUgdGFzaydzIGBtbWAgaGFzbid0IGNoYW5nZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gYW5kIHByb2Nlc3MgZXhlY3V0aW9uLlxuXG5TbywgdGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgYGF0dGFjaF90b19waV9vd25lcmAgZnVuY3Rpb24gdG8gZml4IGEgcmFjZSBjb25kaXRpb24uIFRoZSBwcmltYXJ5IGZvY3VzIG9mIHRoaXMgY2hhbmdlIGlzIHRvIHByZXZlbnQgaXNzdWVzIHdpdGggZnV0ZXggUEkgb3duZXIgZXhlY2luZy4gSXQncyB0b3VjaGluZyBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gYW5kIHByb2Nlc3MgZXhlY3V0aW9uIGxvZ2ljLCB3aGljaCBtZWFucyBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbk15IGZvY3VzIHN5bWJvbHMsIHRoZW4sIHNob3VsZCBiZTogYGZ1dGV4X2xvY2tfcGlgLCBgZnV0ZXhfd2FpdF9yZXF1ZXVlX3BpYCwgYGZ1dGV4X3JlcXVldWVgLCBgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luYCwgYW5kIGBmdXRleF9leGVjX3JlbGVhc2VfZW5kYC5cblxuRm9yIGNvbmZpZ3VyYXRpb24sIEkgc2hvdWxkIGVuc3VyZSBgRlVURVhgIGlzIGVuYWJsZWQgYmVjYXVzZSBpdCdzIHJlcXVpcmVkLiBBbmQgYnkgaW1wbGljYXRpb24sIHRoYXQgYWxzbyBjb3ZlcnMgYFJUX01VVEVYRVNgIGFuZCBgRlVURVhfUElgLCBzbyBJIGRvbid0IG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgdGhlIGxhc3QgdHdvLiBOb3csIEknbSByZWFkeSB0byB1c2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzNzQsIk91dHB1dFRva2VucyI6MjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTU6MTEuOTc1NTMwNDU2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQxMjMwNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZVVEVYXCIsXG4gICAgXCJGVVRFWF9QSVwiLFxuICAgIFwiUlRfTVVURVhFU1wiLFxuICAgIFwiTU1VXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnV0ZXhfbG9ja19waVwiLFxuICAgIFwiZnV0ZXhfd2FpdF9yZXF1ZXVlX3BpXCIsXG4gICAgXCJmdXRleF9yZXF1ZXVlXCIsXG4gICAgXCJmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5cIixcbiAgICBcImZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gYSBmdXRleCBQSSBvd25lciBleGVjaW5nIGFuZCBhbm90aGVyIHRhc2sgdHJ5aW5nIHRvIGF0dGFjaCB0byB0aGUgUEkgb3duZXIuIEl0IHNwbGl0cyBgZnV0ZXhfZXhlY19yZWxlYXNlYCBpbnRvIHR3byBwaGFzZXMgKGBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5gIGFuZCBgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZGApIGFuZCBhZGRzIGEgY2hlY2sgaW4gYGF0dGFjaF90b19waV9vd25lcmAgdG8gdmVyaWZ5IHRoZSB0YXNrJ3MgYG1tYCBoYXNuJ3QgY2hhbmdlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBhbmQgcHJvY2VzcyBleGVjdXRpb24gbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVVRFWFwiLFxuICAgIFwiRlVURVhfUElcIixcbiAgICBcIlJUX01VVEVYRVNcIixcbiAgICBcIk1NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1dGV4X2xvY2tfcGlcIixcbiAgICBcImZ1dGV4X3dhaXRfcmVxdWV1ZV9waVwiLFxuICAgIFwiZnV0ZXhfcmVxdWV1ZVwiLFxuICAgIFwiZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luXCIsXG4gICAgXCJmdXRleF9leGVjX3JlbGVhc2VfZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGEgZnV0ZXggUEkgb3duZXIgZXhlY2luZyBhbmQgYW5vdGhlciB0YXNrIHRyeWluZyB0byBhdHRhY2ggdG8gdGhlIFBJIG93bmVyLiBJdCBzcGxpdHMgYGZ1dGV4X2V4ZWNfcmVsZWFzZWAgaW50byB0d28gcGhhc2VzIChgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luYCBhbmQgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRgKSBhbmQgYWRkcyBhIGNoZWNrIGluIGBhdHRhY2hfdG9fcGlfb3duZXJgIHRvIHZlcmlmeSB0aGUgdGFzaydzIGBtbWAgaGFzbid0IGNoYW5nZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gYW5kIHByb2Nlc3MgZXhlY3V0aW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjU1OjEyLjA0OTY2MDc3OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5MDk4NjQ4NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1NToxMi4wNTAyMjY5MThaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTI5MDkyOTQ1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGlzc3VlIHJlbGF0ZWQgdG8gZnV0ZXhlcyBhbmQgYGV4ZWN2ZWAuIEl0IHNwbGl0cyBgZnV0ZXhfZXhlY19yZWxlYXNlYCBpbnRvIGEgYmVnaW4vZW5kIHBhaXIgdG8gaG9sZCB0aGUgYGV4aXRfbXV0ZXhgIGFjcm9zcyB0aGUgYG1tYCByZXBsYWNlbWVudCBpbiBgZXhlY19tbWFwYCwgYW5kIGFkZHMgYSBjaGVjayBpbiBgYXR0YWNoX3RvX3BpX293bmVyYCB0byBlbnN1cmUgdGhlIHRhc2sncyBgbW1gIG1hdGNoZXMgdGhlIGZ1dGV4IGtleSdzIGBtbWAuIFRoZXNlIGNoYW5nZXMgcHJldmVudCByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGJ1Z3MgZHVyaW5nIGV4ZWMuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgdGhlIGJ1Z3MgdGhpcyBwYXRjaCBhaW1zIHRvIGZpeC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMjNhNzhmMjY4NjgyZjY2NDc1YjVkOTI1NWY1Y2UwZDZmZDA4ZTMwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMDA6NTI6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmNcbmluZGV4IGM3YjhmMmQ2MzY2YzQuLjQyZWI5OGZiZDEyNTkgMTAwNjQ0XG4tLS0gYS9mcy9leGVjLmNcbisrKyBiL2ZzL2V4ZWMuY1xuQEAgLTY1LDYgKzY1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb191cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb3JlZHVtcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZnV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVfbmFtZXNwYWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyX2V2ZW50cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcnNlcS5oXHUwMDNlXG5AQCAtODU3LDggKzg1OCwxMCBAQCBzdGF0aWMgaW50IGV4ZWNfbW1hcChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFx0ZXhlY19tbV9yZWxlYXNlKHRzaywgb2xkX21tKTtcbiBcbiBcdHJldCA9IGRvd25fd3JpdGVfa2lsbGFibGUoXHUwMDI2dHNrLVx1MDAzZXNpZ25hbC1cdTAwM2VleGVjX3VwZGF0ZV9sb2NrKTtcbi1cdGlmIChyZXQpXG4rXHRpZiAocmV0KSB7XG4rXHRcdGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmQodHNrKTtcbiBcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbiBcdGlmIChvbGRfbW0pIHtcbiBcdFx0LypcbkBAIC04NjksNiArODcyLDcgQEAgc3RhdGljIGludCBleGVjX21tYXAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcdFx0cmV0ID0gbW1hcF9yZWFkX2xvY2tfa2lsbGFibGUob2xkX21tKTtcbiBcdFx0aWYgKHJldCkge1xuIFx0XHRcdHVwX3dyaXRlKFx1MDAyNnRzay1cdTAwM2VzaWduYWwtXHUwMDNlZXhlY191cGRhdGVfbG9jayk7XG4rXHRcdFx0ZnV0ZXhfZXhlY19yZWxlYXNlX2VuZCh0c2spO1xuIFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbiBcdH1cbkBAIC04OTYsNiArOTAwLDcgQEAgc3RhdGljIGludCBleGVjX21tYXAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcdFx0bG9jYWxfaXJxX2VuYWJsZSgpO1xuIFx0bHJ1X2dlbl9hZGRfbW0obW0pO1xuIFx0dGFza191bmxvY2sodHNrKTtcbitcdGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmQodHNrKTtcbiBcdGxydV9nZW5fdXNlX21tKG1tKTtcbiBcdGlmIChvbGRfbW0pIHtcbiBcdFx0bW1hcF9yZWFkX3VubG9jayhvbGRfbW0pO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnV0ZXguaCBiL2luY2x1ZGUvbGludXgvZnV0ZXguaFxuaW5kZXggNTFmNGNjZGM5MDkyNy4uMzI0ZjQ5NDkzY2JiNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnV0ZXguaFxuKysrIGIvaW5jbHVkZS9saW51eC9mdXRleC5oXG5AQCAtNzIsNyArNzIsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbiBcbiB2b2lkIGZ1dGV4X2V4aXRfcmVjdXJzaXZlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTtcbiB2b2lkIGZ1dGV4X2V4aXRfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7XG4tdm9pZCBmdXRleF9leGVjX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xuK3ZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuK1x0X19hY3F1aXJlcyhcdTAwMjZ0c2stXHUwMDNlZnV0ZXguZXhpdF9tdXRleCk7XG4rdm9pZCBmdXRleF9leGVjX3JlbGVhc2VfZW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuK1x0X19yZWxlYXNlcyhcdTAwMjZ0c2stXHUwMDNlZnV0ZXguZXhpdF9tdXRleCk7XG4gXG4gbG9uZyBkb19mdXRleCh1MzIgX191c2VyICp1YWRkciwgaW50IG9wLCB1MzIgdmFsLCBrdGltZV90ICp0aW1lb3V0LFxuIFx0ICAgICAgdTMyIF9fdXNlciAqdWFkZHIyLCB1MzIgdmFsMiwgdTMyIHZhbDMpO1xuQEAgLTkwLDcgKzkzLDggQEAgc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykgeyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2V4aXRfcmVjdXJzaXZlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhpdF9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH1cbi1zdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykgeyB9XG4gc3RhdGljIGlubGluZSBsb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXG4gXHRcdFx0ICAgIHUzMiBfX3VzZXIgKnVhZGRyMiwgdTMyIHZhbDIsIHUzMiB2YWwzKVxuIHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuY1xuaW5kZXggZjBlMmUxMzFhOWE1YS4uZDI3MzZiMjRmZjc1MiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mb3JrLmNcbisrKyBiL2tlcm5lbC9mb3JrLmNcbkBAIC0xNTEwLDcgKzE1MTAsNyBAQCB2b2lkIGV4aXRfbW1fcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXG4gdm9pZCBleGVjX21tX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbi1cdGZ1dGV4X2V4ZWNfcmVsZWFzZSh0c2spO1xuK1x0ZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luKHRzayk7XG4gXHRtbV9yZWxlYXNlKHRzaywgbW0pO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuaW5kZXggMTI4YzU3NTJmMjI1Yy4uYTkyMGRmYmQwMzkwZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmNcbisrKyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbkBAIC0xNTM5LDcgKzE1MzksOCBAQCBzdGF0aWMgdm9pZCBmdXRleF9jbGVhbnVwX2VuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHN0YXRlKVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnRzay1cdTAwM2VmdXRleC5leGl0X211dGV4KTtcbiB9XG4gXG4tdm9pZCBmdXRleF9leGVjX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4rdm9pZCBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4rXHRfX2FjcXVpcmVzKFx1MDAyNnRzay1cdTAwM2VmdXRleC5leGl0X211dGV4KVxuIHtcbiBcdC8qXG4gXHQgKiBUaGUgc3RhdGUgaGFuZGxpbmcgaXMgZG9uZSBmb3IgY29uc2lzdGVuY3ksIGJ1dCBpbiB0aGUgY2FzZSBvZlxuQEAgLTE1NTAsNiArMTU1MSwxMSBAQCB2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbiBcdCAqL1xuIFx0ZnV0ZXhfY2xlYW51cF9iZWdpbih0c2spO1xuIFx0ZnV0ZXhfY2xlYW51cCh0c2spO1xuK31cbitcbit2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4rXHRfX3JlbGVhc2VzKFx1MDAyNnRzay1cdTAwM2VmdXRleC5leGl0X211dGV4KVxuK3tcbiBcdC8qXG4gXHQgKiBSZXNldCB0aGUgc3RhdGUgdG8gRlVURVhfU1RBVEVfT0suIFRoZSB0YXNrIGlzIGFsaXZlIGFuZCBhYm91dFxuIFx0ICogZXhlYyBhIG5ldyBiaW5hcnkuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4L3BpLmMgYi9rZXJuZWwvZnV0ZXgvcGkuY1xuaW5kZXggNzk1MDExZWExMjAyZi4uZDk3NjExMTk2YjM0YSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mdXRleC9waS5jXG4rKysgYi9rZXJuZWwvZnV0ZXgvcGkuY1xuQEAgLTQ2NSw2ICs0NjUsMTMgQEAgc3RhdGljIGludCBhdHRhY2hfdG9fcGlfb3duZXIodTMyIF9fdXNlciAqdWFkZHIsIHUzMiB1dmFsLCB1bmlvbiBmdXRleF9rZXkgKmtleSxcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19NTVUpIFx1MDAyNlx1MDAyNiBmdXRleF9rZXlfaXNfcHJpdmF0ZShrZXkpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIFJFQURfT05DRShwLVx1MDAzZW1tKSAhPSBrZXktXHUwMDNlcHJpdmF0ZS5tbSkge1xuK1x0XHRyYXdfc3Bpbl91bmxvY2tfaXJxKFx1MDAyNnAtXHUwMDNlcGlfbG9jayk7XG4rXHRcdHB1dF90YXNrX3N0cnVjdChwKTtcbitcdFx0cmV0dXJuIC1FU1JDSDtcbitcdH1cbitcbiBcdF9fYXR0YWNoX3RvX3BpX293bmVyKHAsIGtleSwgcHMpO1xuIFx0cmF3X3NwaW5fdW5sb2NrX2lycShcdTAwMjZwLVx1MDAzZXBpX2xvY2spO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTU6MTIuMDUwMjI4MDI4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyOTA5MjcyNjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV0ZXggYW5kIEV4ZWN2ZSBTeW5jaHJvbml6YXRpb24gRml4KipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIHRhY2tsaW5nIGEgY29uY3VycmVuY3kgaXNzdWUsIGxpa2VseSBhIHJhY2UgY29uZGl0aW9uIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbywgaW4gdGhlIGZ1dGV4IGltcGxlbWVudGF0aW9uIHJlbGF0ZWQgdG8gYGV4ZWN2ZWAuIFRoZSBjaGFuZ2VzIGFyZSBjb25jZW50cmF0ZWQgaW4gYGZzL2V4ZWMuY2AsIGBpbmNsdWRlL2xpbnV4L2Z1dGV4LmhgLCBga2VybmVsL2ZvcmsuY2AsIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCwgYW5kIGBrZXJuZWwvZnV0ZXgvcGkuY2AsIHNvIGl0J3MgYWxsIHJpZ2h0IHdoZXJlIEknZCBleHBlY3QgaXQgdG8gYmUuXG5cblRoZSBjb3JlIG9mIHRoZSBmaXggYXBwZWFycyB0byBiZSBzcGxpdHRpbmcgYGZ1dGV4X2V4ZWNfcmVsZWFzZWAgaW50byBgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luYCBhbmQgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRgLiBUaGlzLCBhbG9uZyB3aXRoIHRoZSBgZXhpdF9tdXRleGAgbG9jaywgaXMga2V5LiBUaGUgYGJlZ2luYCBmdW5jdGlvbiBhY3F1aXJlcyBgdHNrLVx1MDAzZWZ1dGV4LmV4aXRfbXV0ZXhgLCBhbmQgdGhlIGBlbmRgIGZ1bmN0aW9uIHJlbGVhc2VzIGl0LiBUaGlzIGxvY2tpbmcgc3BhbnMgdGhlIGNydWNpYWwgYG1tX3JlbGVhc2VgIG9wZXJhdGlvbiBhbmQgdGhlIHN1YnNlcXVlbnQgYGV4ZWNfbW1hcGAgbW0gcmVwbGFjZW1lbnQuIEJ5IGhvbGRpbmcgdGhpcyBtdXRleCwgaXQgZW5zdXJlcyB0aGF0IG5vIG90aGVyIHRocmVhZCBjYW4gYXR0YWNoIHRvIHRoZSBmdXRleCB3aGlsZSB0aGUgbW0gaXMgYmVpbmcgcmVwbGFjZWQgZHVyaW5nIGV4ZWMsIHdoaWNoIGlzIGNyaXRpY2FsLiBUaGlzIGlzIGEgc29saWQsIGNsZWFuIHN5bmNocm9uaXphdGlvbiBzdHJhdGVneS5cblxuVGhlIGFkZGVkIGNoZWNrIGluIGBhdHRhY2hfdG9fcGlfb3duZXJgIHdpdGhpbiBga2VybmVsL2Z1dGV4L3BpLmNgIGlzIGFsc28gaW1wb3J0YW50LiAgU3BlY2lmaWNhbGx5LCB0aGUgYElTX0VOQUJMRUQoQ09ORklHX01NVSkgXHUwMDI2XHUwMDI2IGZ1dGV4X2tleV9pc19wcml2YXRlKGtleSkgXHUwMDI2XHUwMDI2IFJFQURfT05DRShwLVx1MDAzZW1tKSAhPSBrZXktXHUwMDNlcHJpdmF0ZS5tbWAgY29uZGl0aW9uIGlzIGNsZXZlci4gSXQncyB2ZXJpZnlpbmcgdGhhdCBmb3IgKnByaXZhdGUqIGZ1dGV4ZXMsIHRoZSB0YXNrJ3MgYG1tYCAobWVtb3J5IG1hcCkgbWF0Y2hlcyB0aGUgYG1tYCBhc3NvY2lhdGVkIHdpdGggdGhlIGZ1dGV4IGtleS4gVGhpcyBwcmV2ZW50cyBhIHRhc2sgZnJvbSBhdHRhY2hpbmcgdG8gYSBmdXRleCBvZiBhIHRhc2sgdGhhdCBoYXMgYWxyZWFkeSBleGVjJ2QgYW5kIGNoYW5nZWQgaXRzIG1lbW9yeSBtYXAuIFRoaXMgaXMgYSB2ZXJ5IHNwZWNpZmljLCBhbmQgcHJvYmFibHkgdmVyeSBzdWJ0bGUsIGJ1ZyBmaXguXG5cbkknbSBub3Qgc2VlaW5nIGFueSByZWQgZmxhZ3MgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvIGxlYWtzLCBvciBuZXcgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBiZSB1bmluaXRpYWxpemVkLiBJdCdzIGEgY29uY3VycmVuY3kvbG9ja2luZyBidWcgZml4IHRoYXQgdGhlIGV4aXN0aW5nIGtlcm5lbCBjaGVja2VycyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQIHdvdWxkIGxpa2VseSBjYXRjaOKAlCBvciByYXRoZXIsIHRoZXkgd2lsbCBjYXRjaCB0aGUgZWZmZWN0cyBvZiB0aGUgYnVnIHRoaXMgcGF0Y2ggaXMgcHJldmVudGluZyAoVUFGIG9yIGRlYWRsb2NrcykuIE5vIG5lZWQgdG8gYnJpbmcgS01TQU4gaW50byB0aGUgcGljdHVyZSBoZXJlLiBUaGUgaXNzdWUgaXMgcHVyZWx5IGFib3V0IHN5bmNocm9uaXphdGlvbiBhbmQgcHJldmVudGluZyByYWNlcywgbm90IGFib3V0IG1lbW9yeSBpbml0aWFsaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYwNywiT3V0cHV0VG9rZW5zIjoxNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1NToyNC45NTk1MDQyMjlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGlzc3VlIHJlbGF0ZWQgdG8gZnV0ZXhlcyBhbmQgYGV4ZWN2ZWAuIEl0IHNwbGl0cyBgZnV0ZXhfZXhlY19yZWxlYXNlYCBpbnRvIGEgYmVnaW4vZW5kIHBhaXIgdG8gaG9sZCB0aGUgYGV4aXRfbXV0ZXhgIGFjcm9zcyB0aGUgYG1tYCByZXBsYWNlbWVudCBpbiBgZXhlY19tbWFwYCwgYW5kIGFkZHMgYSBjaGVjayBpbiBgYXR0YWNoX3RvX3BpX293bmVyYCB0byBlbnN1cmUgdGhlIHRhc2sncyBgbW1gIG1hdGNoZXMgdGhlIGZ1dGV4IGtleSdzIGBtbWAuIFRoZXNlIGNoYW5nZXMgcHJldmVudCByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGJ1Z3MgZHVyaW5nIGV4ZWMuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgdGhlIGJ1Z3MgdGhpcyBwYXRjaCBhaW1zIHRvIGZpeC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpc3N1ZSByZWxhdGVkIHRvIGZ1dGV4ZXMgYW5kIGBleGVjdmVgLiBJdCBzcGxpdHMgYGZ1dGV4X2V4ZWNfcmVsZWFzZWAgaW50byBhIGJlZ2luL2VuZCBwYWlyIHRvIGhvbGQgdGhlIGBleGl0X211dGV4YCBhY3Jvc3MgdGhlIGBtbWAgcmVwbGFjZW1lbnQgaW4gYGV4ZWNfbW1hcGAsIGFuZCBhZGRzIGEgY2hlY2sgaW4gYGF0dGFjaF90b19waV9vd25lcmAgdG8gZW5zdXJlIHRoZSB0YXNrJ3MgYG1tYCBtYXRjaGVzIHRoZSBmdXRleCBrZXkncyBgbW1gLiBUaGVzZSBjaGFuZ2VzIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBidWdzIGR1cmluZyBleGVjLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHRoZSBidWdzIHRoaXMgcGF0Y2ggYWltcyB0byBmaXguXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowknn8x[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 00:36:55 +0000 UTC FinishedAt: 2026-08-10 00:55:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUTEX", "FUTEX_PI", "RT_MUTEXES", "MMU" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUTEX", "FUTEX_PI", "RT_MUTEXES", "MMU" ], "series_id": "8b1a9396-77fb-4def-99f3-7c9dfd99d413" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "futex_lock_pi", "futex_wait_requeue_pi", "futex_requeue", "futex_exec_release_begin", "futex_exec_release_end" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAwOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYJiMzNDssCiAgICAmIzM0O0ZVVEVYX1BJJiMzNDssCiAgICAmIzM0O1JUX01VVEVYRVMmIzM0OywKICAgICYjMzQ7TU1VJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnV0ZXhfbG9ja19waSYjMzQ7LAogICAgJiMzNDtmdXRleF93YWl0X3JlcXVldWVfcGkmIzM0OywKICAgICYjMzQ7ZnV0ZXhfcmVxdWV1ZSYjMzQ7LAogICAgJiMzNDtmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4mIzM0OywKICAgICYjMzQ7ZnV0ZXhfZXhlY19yZWxlYXNlX2VuZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGlzc3VlIHJlbGF0ZWQgdG8gZnV0ZXhlcyBhbmQgYGV4ZWN2ZWAuIEl0IHNwbGl0cyBgZnV0ZXhfZXhlY19yZWxlYXNlYCBpbnRvIGEgYmVnaW4vZW5kIHBhaXIgdG8gaG9sZCB0aGUgYGV4aXRfbXV0ZXhgIGFjcm9zcyB0aGUgYG1tYCByZXBsYWNlbWVudCBpbiBgZXhlY19tbWFwYCwgYW5kIGFkZHMgYSBjaGVjayBpbiBgYXR0YWNoX3RvX3BpX293bmVyYCB0byBlbnN1cmUgdGhlIHRhc2smIzM5O3MgYG1tYCBtYXRjaGVzIHRoZSBmdXRleCBrZXkmIzM5O3MgYG1tYC4gVGhlc2UgY2hhbmdlcyBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgYnVncyBkdXJpbmcgZXhlYy4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCB0aGUgYnVncyB0aGlzIHBhdGNoIGFpbXMgdG8gZml4LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gYSBmdXRleCBQSSBvd25lciBleGVjaW5nIGFuZCBhbm90aGVyIHRhc2sgdHJ5aW5nIHRvIGF0dGFjaCB0byB0aGUgUEkgb3duZXIuIEl0IHNwbGl0cyBgZnV0ZXhfZXhlY19yZWxlYXNlYCBpbnRvIHR3byBwaGFzZXMgKGBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5gIGFuZCBgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZGApIGFuZCBhZGRzIGEgY2hlY2sgaW4gYGF0dGFjaF90b19waV9vd25lcmAgdG8gdmVyaWZ5IHRoZSB0YXNrJiMzOTtzIGBtbWAgaGFzbiYjMzk7dCBjaGFuZ2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIGFuZCBwcm9jZXNzIGV4ZWN1dGlvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAwOjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzIzYTc4ZjI2ODY4MmY2NjQ3NWI1ZDkyNTVmNWNlMGQ2ZmQwOGUzMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDAwOjUyOjU4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xuaW5kZXggYzdiOGYyZDYzNjZjNC4uNDJlYjk4ZmJkMTI1OSAxMDA2NDRcbi0tLSBhL2ZzL2V4ZWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXhlYy5jXG5AQCAtNjUsNiAmIzQzOzY1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb191cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb3JlZHVtcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Z1dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lX25hbWVzcGFjZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcl9ldmVudHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JzZXEuaFx1MDAzZVxuQEAgLTg1Nyw4ICYjNDM7ODU4LDEwIEBAIHN0YXRpYyBpbnQgZXhlY19tbWFwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4gXHRleGVjX21tX3JlbGVhc2UodHNrLCBvbGRfbW0pO1xuIFxuIFx0cmV0ID0gZG93bl93cml0ZV9raWxsYWJsZShcdTAwMjZ0c2stXHUwMDNlc2lnbmFsLVx1MDAzZWV4ZWNfdXBkYXRlX2xvY2spO1xuLVx0aWYgKHJldClcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRmdXRleF9leGVjX3JlbGVhc2VfZW5kKHRzayk7XG4gXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKG9sZF9tbSkge1xuIFx0XHQvKlxuQEAgLTg2OSw2ICYjNDM7ODcyLDcgQEAgc3RhdGljIGludCBleGVjX21tYXAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcdFx0cmV0ID0gbW1hcF9yZWFkX2xvY2tfa2lsbGFibGUob2xkX21tKTtcbiBcdFx0aWYgKHJldCkge1xuIFx0XHRcdHVwX3dyaXRlKFx1MDAyNnRzay1cdTAwM2VzaWduYWwtXHUwMDNlZXhlY191cGRhdGVfbG9jayk7XG4mIzQzO1x0XHRcdGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmQodHNrKTtcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4gXHR9XG5AQCAtODk2LDYgJiM0Mzs5MDAsNyBAQCBzdGF0aWMgaW50IGV4ZWNfbW1hcChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFx0XHRsb2NhbF9pcnFfZW5hYmxlKCk7XG4gXHRscnVfZ2VuX2FkZF9tbShtbSk7XG4gXHR0YXNrX3VubG9jayh0c2spO1xuJiM0MztcdGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmQodHNrKTtcbiBcdGxydV9nZW5fdXNlX21tKG1tKTtcbiBcdGlmIChvbGRfbW0pIHtcbiBcdFx0bW1hcF9yZWFkX3VubG9jayhvbGRfbW0pO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnV0ZXguaCBiL2luY2x1ZGUvbGludXgvZnV0ZXguaFxuaW5kZXggNTFmNGNjZGM5MDkyNy4uMzI0ZjQ5NDkzY2JiNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnV0ZXguaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mdXRleC5oXG5AQCAtNzIsNyAmIzQzOzcyLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4gXG4gdm9pZCBmdXRleF9leGl0X3JlY3Vyc2l2ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7XG4gdm9pZCBmdXRleF9leGl0X3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xuLXZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTtcbiYjNDM7dm9pZCBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4mIzQzO1x0X19hY3F1aXJlcyhcdTAwMjZ0c2stXHUwMDNlZnV0ZXguZXhpdF9tdXRleCk7XG4mIzQzO3ZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbiYjNDM7XHRfX3JlbGVhc2VzKFx1MDAyNnRzay1cdTAwM2VmdXRleC5leGl0X211dGV4KTtcbiBcbiBsb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXG4gXHQgICAgICB1MzIgX191c2VyICp1YWRkcjIsIHUzMiB2YWwyLCB1MzIgdmFsMyk7XG5AQCAtOTAsNyAmIzQzOzkzLDggQEAgc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykgeyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2V4aXRfcmVjdXJzaXZlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhpdF9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH1cbi1zdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH1cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykgeyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9leGVjX3JlbGVhc2VfZW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH1cbiBzdGF0aWMgaW5saW5lIGxvbmcgZG9fZnV0ZXgodTMyIF9fdXNlciAqdWFkZHIsIGludCBvcCwgdTMyIHZhbCwga3RpbWVfdCAqdGltZW91dCxcbiBcdFx0XHQgICAgdTMyIF9fdXNlciAqdWFkZHIyLCB1MzIgdmFsMiwgdTMyIHZhbDMpXG4ge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jXG5pbmRleCBmMGUyZTEzMWE5YTVhLi5kMjczNmIyNGZmNzUyIDEwMDY0NFxuLS0tIGEva2VybmVsL2ZvcmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2ZvcmsuY1xuQEAgLTE1MTAsNyAmIzQzOzE1MTAsNyBAQCB2b2lkIGV4aXRfbW1fcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXG4gdm9pZCBleGVjX21tX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbi1cdGZ1dGV4X2V4ZWNfcmVsZWFzZSh0c2spO1xuJiM0MztcdGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbih0c2spO1xuIFx0bW1fcmVsZWFzZSh0c2ssIG1tKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4L2NvcmUuYyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbmluZGV4IDEyOGM1NzUyZjIyNWMuLmE5MjBkZmJkMDM5MGQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZnV0ZXgvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZnV0ZXgvY29yZS5jXG5AQCAtMTUzOSw3ICYjNDM7MTUzOSw4IEBAIHN0YXRpYyB2b2lkIGZ1dGV4X2NsZWFudXBfZW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgc3RhdGUpXG4gXHRtdXRleF91bmxvY2soXHUwMDI2dHNrLVx1MDAzZWZ1dGV4LmV4aXRfbXV0ZXgpO1xuIH1cbiBcbi12b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbiYjNDM7dm9pZCBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4mIzQzO1x0X19hY3F1aXJlcyhcdTAwMjZ0c2stXHUwMDNlZnV0ZXguZXhpdF9tdXRleClcbiB7XG4gXHQvKlxuIFx0ICogVGhlIHN0YXRlIGhhbmRsaW5nIGlzIGRvbmUgZm9yIGNvbnNpc3RlbmN5LCBidXQgaW4gdGhlIGNhc2Ugb2ZcbkBAIC0xNTUwLDYgJiM0MzsxNTUxLDExIEBAIHZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuIFx0ICovXG4gXHRmdXRleF9jbGVhbnVwX2JlZ2luKHRzayk7XG4gXHRmdXRleF9jbGVhbnVwKHRzayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbiYjNDM7XHRfX3JlbGVhc2VzKFx1MDAyNnRzay1cdTAwM2VmdXRleC5leGl0X211dGV4KVxuJiM0Mzt7XG4gXHQvKlxuIFx0ICogUmVzZXQgdGhlIHN0YXRlIHRvIEZVVEVYX1NUQVRFX09LLiBUaGUgdGFzayBpcyBhbGl2ZSBhbmQgYWJvdXRcbiBcdCAqIGV4ZWMgYSBuZXcgYmluYXJ5LlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC9waS5jIGIva2VybmVsL2Z1dGV4L3BpLmNcbmluZGV4IDc5NTAxMWVhMTIwMmYuLmQ5NzYxMTE5NmIzNGEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZnV0ZXgvcGkuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2Z1dGV4L3BpLmNcbkBAIC00NjUsNiAmIzQzOzQ2NSwxMyBAQCBzdGF0aWMgaW50IGF0dGFjaF90b19waV9vd25lcih1MzIgX191c2VyICp1YWRkciwgdTMyIHV2YWwsIHVuaW9uIGZ1dGV4X2tleSAqa2V5LFxuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuJiM0MztcdGlmIChJU19FTkFCTEVEKENPTkZJR19NTVUpIFx1MDAyNlx1MDAyNiBmdXRleF9rZXlfaXNfcHJpdmF0ZShrZXkpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBSRUFEX09OQ0UocC1cdTAwM2VtbSkgIT0ga2V5LVx1MDAzZXByaXZhdGUubW0pIHtcbiYjNDM7XHRcdHJhd19zcGluX3VubG9ja19pcnEoXHUwMDI2cC1cdTAwM2VwaV9sb2NrKTtcbiYjNDM7XHRcdHB1dF90YXNrX3N0cnVjdChwKTtcbiYjNDM7XHRcdHJldHVybiAtRVNSQ0g7XG4mIzQzO1x0fVxuJiM0MztcbiBcdF9fYXR0YWNoX3RvX3BpX293bmVyKHAsIGtleSwgcHMpO1xuIFx0cmF3X3NwaW5fdW5sb2NrX2lycShcdTAwMjZwLVx1MDAzZXBpX2xvY2spO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAwOjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGVVRFWCYjMzQ7LAogICAgJiMzNDtGVVRFWF9QSSYjMzQ7LAogICAgJiMzNDtSVF9NVVRFWEVTJiMzNDssCiAgICAmIzM0O01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2xvY2tfcGkmIzM0OywKICAgICYjMzQ7ZnV0ZXhfd2FpdF9yZXF1ZXVlX3BpJiMzNDssCiAgICAmIzM0O2Z1dGV4X3JlcXVldWUmIzM0OywKICAgICYjMzQ7ZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luJiMzNDssCiAgICAmIzM0O2Z1dGV4X2V4ZWNfcmVsZWFzZV9lbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGEgZnV0ZXggUEkgb3duZXIgZXhlY2luZyBhbmQgYW5vdGhlciB0YXNrIHRyeWluZyB0byBhdHRhY2ggdG8gdGhlIFBJIG93bmVyLiBJdCBzcGxpdHMgYGZ1dGV4X2V4ZWNfcmVsZWFzZWAgaW50byB0d28gcGhhc2VzIChgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luYCBhbmQgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRgKSBhbmQgYWRkcyBhIGNoZWNrIGluIGBhdHRhY2hfdG9fcGlfb3duZXJgIHRvIHZlcmlmeSB0aGUgdGFzayYjMzk7cyBgbW1gIGhhc24mIzM5O3QgY2hhbmdlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBhbmQgcHJvY2VzcyBleGVjdXRpb24gbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMyM2E3OGYyNjg2ODJmNjY0NzViNWQ5MjU1ZjVjZTBkNmZkMDhlMzAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAwMDo1Mjo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCBjN2I4ZjJkNjM2NmM0Li40MmViOThmYmQxMjU5IDEwMDY0NAotLS0gYS9mcy9leGVjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXhlYy5jCkBAIC02NSw2ICYjNDM7NjUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2lvX3VyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY29yZWR1bXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnV0ZXguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90aW1lX25hbWVzcGFjZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VzZXJfZXZlbnRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcnNlcS5oJmd0OwpAQCAtODU3LDggJiM0Mzs4NTgsMTAgQEAgc3RhdGljIGludCBleGVjX21tYXAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIAlleGVjX21tX3JlbGVhc2UodHNrLCBvbGRfbW0pOwogCiAJcmV0ID0gZG93bl93cml0ZV9raWxsYWJsZSgmYW1wO3Rzay0mZ3Q7c2lnbmFsLSZndDtleGVjX3VwZGF0ZV9sb2NrKTsKLQlpZiAocmV0KQomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlmdXRleF9leGVjX3JlbGVhc2VfZW5kKHRzayk7CiAJCXJldHVybiByZXQ7CiYjNDM7CX0KIAogCWlmIChvbGRfbW0pIHsKIAkJLyoKQEAgLTg2OSw2ICYjNDM7ODcyLDcgQEAgc3RhdGljIGludCBleGVjX21tYXAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIAkJcmV0ID0gbW1hcF9yZWFkX2xvY2tfa2lsbGFibGUob2xkX21tKTsKIAkJaWYgKHJldCkgewogCQkJdXBfd3JpdGUoJmFtcDt0c2stJmd0O3NpZ25hbC0mZ3Q7ZXhlY191cGRhdGVfbG9jayk7CiYjNDM7CQkJZnV0ZXhfZXhlY19yZWxlYXNlX2VuZCh0c2spOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KQEAgLTg5Niw2ICYjNDM7OTAwLDcgQEAgc3RhdGljIGludCBleGVjX21tYXAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCWxydV9nZW5fYWRkX21tKG1tKTsKIAl0YXNrX3VubG9jayh0c2spOwomIzQzOwlmdXRleF9leGVjX3JlbGVhc2VfZW5kKHRzayk7CiAJbHJ1X2dlbl91c2VfbW0obW0pOwogCWlmIChvbGRfbW0pIHsKIAkJbW1hcF9yZWFkX3VubG9jayhvbGRfbW0pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdXRleC5oIGIvaW5jbHVkZS9saW51eC9mdXRleC5oCmluZGV4IDUxZjRjY2RjOTA5MjcuLjMyNGY0OTQ5M2NiYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnV0ZXguaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Z1dGV4LmgKQEAgLTcyLDcgJiM0Mzs3MiwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogCiB2b2lkIGZ1dGV4X2V4aXRfcmVjdXJzaXZlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKIHZvaWQgZnV0ZXhfZXhpdF9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKLXZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKJiM0Mzt2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKJiM0MzsJX19hY3F1aXJlcygmYW1wO3Rzay0mZ3Q7ZnV0ZXguZXhpdF9tdXRleCk7CiYjNDM7dm9pZCBmdXRleF9leGVjX3JlbGVhc2VfZW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQomIzQzOwlfX3JlbGVhc2VzKCZhbXA7dHNrLSZndDtmdXRleC5leGl0X211dGV4KTsKIAogbG9uZyBkb19mdXRleCh1MzIgX191c2VyICp1YWRkciwgaW50IG9wLCB1MzIgdmFsLCBrdGltZV90ICp0aW1lb3V0LAogCSAgICAgIHUzMiBfX3VzZXIgKnVhZGRyMiwgdTMyIHZhbDIsIHUzMiB2YWwzKTsKQEAgLTkwLDcgJiM0Mzs5Myw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhpdF9yZWN1cnNpdmUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHsgfQogc3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2V4aXRfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykgeyB9CiBzdGF0aWMgaW5saW5lIGxvbmcgZG9fZnV0ZXgodTMyIF9fdXNlciAqdWFkZHIsIGludCBvcCwgdTMyIHZhbCwga3RpbWVfdCAqdGltZW91dCwKIAkJCSAgICB1MzIgX191c2VyICp1YWRkcjIsIHUzMiB2YWwyLCB1MzIgdmFsMykKIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IGYwZTJlMTMxYTlhNWEuLmQyNzM2YjI0ZmY3NTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2ZvcmsuYwpAQCAtMTUxMCw3ICYjNDM7MTUxMCw3IEBAIHZvaWQgZXhpdF9tbV9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIAogdm9pZCBleGVjX21tX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewotCWZ1dGV4X2V4ZWNfcmVsZWFzZSh0c2spOwomIzQzOwlmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4odHNrKTsKIAltbV9yZWxlYXNlKHRzaywgbW0pOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuYwppbmRleCAxMjhjNTc1MmYyMjVjLi5hOTIwZGZiZDAzOTBkIDEwMDY0NAotLS0gYS9rZXJuZWwvZnV0ZXgvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mdXRleC9jb3JlLmMKQEAgLTE1MzksNyAmIzQzOzE1MzksOCBAQCBzdGF0aWMgdm9pZCBmdXRleF9jbGVhbnVwX2VuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHN0YXRlKQogCW11dGV4X3VubG9jaygmYW1wO3Rzay0mZ3Q7ZnV0ZXguZXhpdF9tdXRleCk7CiB9CiAKLXZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQomIzQzO3ZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQomIzQzOwlfX2FjcXVpcmVzKCZhbXA7dHNrLSZndDtmdXRleC5leGl0X211dGV4KQogewogCS8qCiAJICogVGhlIHN0YXRlIGhhbmRsaW5nIGlzIGRvbmUgZm9yIGNvbnNpc3RlbmN5LCBidXQgaW4gdGhlIGNhc2Ugb2YKQEAgLTE1NTAsNiAmIzQzOzE1NTEsMTEgQEAgdm9pZCBmdXRleF9leGVjX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiAJICovCiAJZnV0ZXhfY2xlYW51cF9iZWdpbih0c2spOwogCWZ1dGV4X2NsZWFudXAodHNrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBmdXRleF9leGVjX3JlbGVhc2VfZW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQomIzQzOwlfX3JlbGVhc2VzKCZhbXA7dHNrLSZndDtmdXRleC5leGl0X211dGV4KQomIzQzO3sKIAkvKgogCSAqIFJlc2V0IHRoZSBzdGF0ZSB0byBGVVRFWF9TVEFURV9PSy4gVGhlIHRhc2sgaXMgYWxpdmUgYW5kIGFib3V0CiAJICogZXhlYyBhIG5ldyBiaW5hcnkuCmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvcGkuYyBiL2tlcm5lbC9mdXRleC9waS5jCmluZGV4IDc5NTAxMWVhMTIwMmYuLmQ5NzYxMTE5NmIzNGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mdXRleC9waS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mdXRleC9waS5jCkBAIC00NjUsNiAmIzQzOzQ2NSwxMyBAQCBzdGF0aWMgaW50IGF0dGFjaF90b19waV9vd25lcih1MzIgX191c2VyICp1YWRkciwgdTMyIHV2YWwsIHVuaW9uIGZ1dGV4X2tleSAqa2V5LAogCQlyZXR1cm4gcmV0OwogCX0KIAomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfTU1VKSAmYW1wOyZhbXA7IGZ1dGV4X2tleV9pc19wcml2YXRlKGtleSkgJmFtcDsmYW1wOwomIzQzOwkgICAgUkVBRF9PTkNFKHAtJmd0O21tKSAhPSBrZXktJmd0O3ByaXZhdGUubW0pIHsKJiM0MzsJCXJhd19zcGluX3VubG9ja19pcnEoJmFtcDtwLSZndDtwaV9sb2NrKTsKJiM0MzsJCXB1dF90YXNrX3N0cnVjdChwKTsKJiM0MzsJCXJldHVybiAtRVNSQ0g7CiYjNDM7CX0KJiM0MzsKIAlfX2F0dGFjaF90b19waV9vd25lcihwLCBrZXksIHBzKTsKIAlyYXdfc3Bpbl91bmxvY2tfaXJxKCZhbXA7cC0mZ3Q7cGlfbG9jayk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYxMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldyBGdXRleCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgYSBmZXcgY3J1Y2lhbCBhcmVhczogYGZzL2V4ZWMuY2AsIGBpbmNsdWRlL2xpbnV4L2Z1dGV4LmhgLCBga2VybmVsL2ZvcmsuY2AsIGFuZCwgbW9zdCBub3RhYmx5LCBga2VybmVsL2Z1dGV4L2NvcmUuY2AgYW5kIGBrZXJuZWwvZnV0ZXgvcGkuY2AuIEltbWVkaWF0ZWx5LCBteSBzcGlkZXkgc2Vuc2VzIGFyZSB0aW5nbGluZyDigJMgdGhpcyB3YXJyYW50cyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgaXMgYSBjb3JlIGtlcm5lbCBtb2RpZmljYXRpb24gaW52b2x2aW5nIGZ1dGV4ZXMgYW5kIGV4ZWMsIHdoaWNoLCBhcyB3ZSBrbm93LCBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyBhbmQgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4KClRoZSBwYXRjaCBzZWVtcyB0byBzcGxpdCBgZnV0ZXhfZXhlY19yZWxlYXNlYCBpbnRvIGEgYmVnaW4gYW5kIGVuZCBzZXF1ZW5jZSwgYW5kIHRoZXJlJiMzOTtzIGEgbmV3IGNoZWNrIGFkZGVkIGluIGBhdHRhY2hfdG9fcGlfb3duZXJgIHdpdGhpbiBga2VybmVsL2Z1dGV4L3BpLmNgLiAgU3BlY2lmaWNhbGx5LCB0aGF0IGBhdHRhY2hfdG9fcGlfb3duZXJgIGNoZWNrIGlzIGludGVyZXN0aW5nOiBJdCBhcHBlYXJzIHRvIGJlIHZlcmlmeWluZyB0aGF0IHRoZSBtZW1vcnkgbWFwIGFzc29jaWF0ZWQgd2l0aCBhIHByaXZhdGUgZnV0ZXgga2V5IG1hdGNoZXMgdGhlIHByb2Nlc3MmIzM5O3MgbW0gKG1lbW9yeSBtYW5hZ2VtZW50KS4gSSBuZWVkIHRvIGRpZyBpbnRvIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGlmIHRoYXQgY2hlY2sgZmFpbHMuCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldCBkdXJpbmcgZnV6emluZy4gSSYjMzk7bSB0aGlua2luZzoKCiogICBgYXR0YWNoX3RvX3BpX293bmVyYCDigJMgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIEkmIzM5O2xsIHdhbnQgdG8gZm9jdXMgb24gaXRzIGNhbGxlcnMgYXMgd2VsbC4KKiAgIGBleGVjX21tYXBgIOKAkyBhbHNvIHN0YXRpYy4gVGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiByZXF1aXJlIHNjcnV0aW55IGFzIHdlbGwuCiogICBgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luYCBhbmQgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRgIOKAkyB0aGVzZSBhcmUgdGhlIG5ld2x5IGludHJvZHVjZWQgc3BsaXQgZnVuY3Rpb25zLiBDbGVhcmx5IHRoZXkgYXJlIGEgaGlnaCBwcmlvcml0eS4KKiAgIGBleGl0X21tX3JlbGVhc2VgIGFuZCBgZXhlY19tbV9yZWxlYXNlYCDigJMgc2luY2UgdGhpcyBjb25jZXJucyBleGVjLCB0aGVzZSBmdW5jdGlvbnMgdGhhdCBtYW5hZ2UgbWVtb3J5IG1hcHBpbmcgZHVyaW5nIGV4ZWN1dGlvbiB3b3VsZCBiZSBlc3NlbnRpYWwgYXMgd2VsbC4KCkkgc2hvdWxkIHByb2JhYmx5IGRpdmUgaW50byBga2VybmVsL2Z1dGV4L3BpLmNgIHJpZ2h0IG5vdyB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2Ygd2hvIGNhbGxzIGBhdHRhY2hfdG9fcGlfb3duZXJgLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGdyYXBoIHdpbGwgYmUgY3JpdGljYWwgZm9yIGNyYWZ0aW5nIGVmZmVjdGl2ZSBmdXp6aW5nIHNjZW5hcmlvcy4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0dGFjaF90b19waV9vd25lciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9waS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9waS5jPTMyMT1zdGF0aWMgaW50IGhhbmRsZV9leGl0X3JhY2UodTMyIF9fdXNlciAqdWFkZHIsIHUzMiB1dmFsLFxuLS1cbmtlcm5lbC9mdXRleC9waS5jLTM0NC1cdCAqICAgZXhpdF9yb2J1c3RfbGlzdCh0c2spIHtcdCAgICAqdWFkZHIgPSAweDgwMDAwUElEO1xua2VybmVsL2Z1dGV4L3BpLmM6MzQ1Olx0ICogICAgICBTZXQgb3duZXIgZGllZFx0XHQgICAgYXR0YWNoX3RvX3BpX293bmVyKCkge1xua2VybmVsL2Z1dGV4L3BpLmMtMzQ2LVx0ICogICAgKnVhZGRyID0gMHhDMDAwMDAwMDtcdCAgICAgdHNrID0gZ2V0X3Rhc2soUElEKTtcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy0zNzYtXG5rZXJuZWwvZnV0ZXgvcGkuYzozNzc6c3RhdGljIHZvaWQgX19hdHRhY2hfdG9fcGlfb3duZXIoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bmlvbiBmdXRleF9rZXkgKmtleSxcbmtlcm5lbC9mdXRleC9waS5jLTM3OC1cdFx0XHRcdCBzdHJ1Y3QgZnV0ZXhfcGlfc3RhdGUgKipwcylcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy00MTEtICovXG5rZXJuZWwvZnV0ZXgvcGkuYzo0MTI6c3RhdGljIGludCBhdHRhY2hfdG9fcGlfb3duZXIodTMyIF9fdXNlciAqdWFkZHIsIHUzMiB1dmFsLCB1bmlvbiBmdXRleF9rZXkgKmtleSxcbmtlcm5lbC9mdXRleC9waS5jLTQxMy1cdFx0XHQgICAgICBzdHJ1Y3QgZnV0ZXhfcGlfc3RhdGUgKipwcyxcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy00NzQtXG5rZXJuZWwvZnV0ZXgvcGkuYzo0NzU6XHRfX2F0dGFjaF90b19waV9vd25lcihwLCBrZXksIHBzKTtcbmtlcm5lbC9mdXRleC9waS5jLTQ3Ni1cdHJhd19zcGluX3VubG9ja19pcnEoXHUwMDI2cC1cdTAwM2VwaV9sb2NrKTtcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYz01MjM9aW50IGZ1dGV4X2xvY2tfcGlfYXRvbWljKHUzMiBfX3VzZXIgKnVhZGRyLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxuLS1cbmtlcm5lbC9mdXRleC9waS5jLTU5MC1cdFx0ICpcbmtlcm5lbC9mdXRleC9waS5jOjU5MTpcdFx0ICogTm8gbmVlZCB0byBkbyB0aGUgZnVsbCBhdHRhY2hfdG9fcGlfb3duZXIoKSBleGVyY2lzZVxua2VybmVsL2Z1dGV4L3BpLmMtNTkyLVx0XHQgKiBiZWNhdXNlIEB0YXNrIGlzIGtub3duIGFuZCB2YWxpZC5cbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy01OTUtXHRcdFx0cmF3X3NwaW5fbG9ja19pcnEoXHUwMDI2dGFzay1cdTAwM2VwaV9sb2NrKTtcbmtlcm5lbC9mdXRleC9waS5jOjU5NjpcdFx0XHRfX2F0dGFjaF90b19waV9vd25lcih0YXNrLCBrZXksIHBzKTtcbmtlcm5lbC9mdXRleC9waS5jLTU5Ny1cdFx0XHRyYXdfc3Bpbl91bmxvY2tfaXJxKFx1MDAyNnRhc2stXHUwMDNlcGlfbG9jayk7XG4tLVxua2VybmVsL2Z1dGV4L3BpLmMtNjE1LVx0ICovXG5rZXJuZWwvZnV0ZXgvcGkuYzo2MTY6XHRyZXR1cm4gYXR0YWNoX3RvX3BpX293bmVyKHVhZGRyLCBuZXd2YWwsIGtleSwgcHMsIGV4aXRpbmcpO1xua2VybmVsL2Z1dGV4L3BpLmMtNjE3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTM1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldCwgcmVmbGVjdGluZyBteSBleHBlcnQgdW5kZXJzdGFuZGluZzoKCioqQW5hbHl6aW5nIGBmdXRleF9sb2NrX3BpX2F0b21pY2AmIzM5O3MgQ2FsbGVycyoqCgpPa2F5LCBzbyBgYXR0YWNoX3RvX3BpX293bmVyYCBpcyBiZWluZyBjYWxsZWQgZnJvbSB3aXRoaW4gYGZ1dGV4X2xvY2tfcGlfYXRvbWljYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hvICplbHNlKiBjYWxscyBgZnV0ZXhfbG9ja19waV9hdG9taWNgPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgYWJzb2x1dGVseSBjcml0aWNhbCBoZXJlLiBJdCYjMzk7cyB0aGUgb25seSB3YXkgdG8gZ3Jhc3AgdGhlIGJyb2FkZXIgY29uY3VycmVuY3kgaW1wbGljYXRpb25zLCBwb3RlbnRpYWwgY29udGVudGlvbiBwb2ludHMsIGFuZCB0aGUgcm9sZSBvZiB0aGlzIGBhdHRhY2hfdG9fcGlfb3duZXJgIGNhbGwgd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZSBvZiBwcmlvcml0eSBpbmhlcml0YW5jZSBsb2NraW5nLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBmdXRleF9sb2NrX3BpX2F0b21pY2AgdG8gc2VlIGl0cyB1cHN0cmVhbSBkZXBlbmRlbmNpZXMuIEtub3dpbmcgdGhlIGNhbGwgZ3JhcGggaXMgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgd2h5IGl04oCZcyBiZWluZyBpbnZva2VkIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGxvY2tpbmcgc3RyYXRlZ3kuIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgYWxsIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBmdW5jdGlvbiB0byBhc3Nlc3Mgd2hlcmUgYW5kIGhvdyBwcmlvcml0eSBpbmhlcml0YW5jZSBpcyBiZWluZyBlbXBsb3llZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9sb2NrX3BpX2F0b21pYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2Z1dGV4Lmg9Mzg0PWV4dGVybiB2b2lkIGZ1dGV4X3FfdW5sb2NrKHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIpXG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzg2LVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6Mzg3OmV4dGVybiBpbnQgZnV0ZXhfbG9ja19waV9hdG9taWModTMyIF9fdXNlciAqdWFkZHIsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIsXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zODgtXHRcdFx0XHR1bmlvbiBmdXRleF9rZXkgKmtleSxcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYz0zMjE9c3RhdGljIGludCBoYW5kbGVfZXhpdF9yYWNlKHUzMiBfX3VzZXIgKnVhZGRyLCB1MzIgdXZhbCxcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy0zMzktXHQgKiAgZG9fZXhpdCgpXHRcdFx0IGZ1dGV4X2xvY2tfcGkoKVxua2VybmVsL2Z1dGV4L3BpLmM6MzQwOlx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1dGV4X2xvY2tfcGlfYXRvbWljKClcbmtlcm5lbC9mdXRleC9waS5jLTM0MS1cdCAqICAgZXhpdF9zaWduYWxzKHRzaylcdFx0ICAgIE5vIHdhaXRlcnM6XG4tLVxua2VybmVsL2Z1dGV4L3BpLmM9NDgzPXN0YXRpYyBpbnQgbG9ja19waV91cGRhdGVfYXRvbWljKHUzMiBfX3VzZXIgKnVhZGRyLCB1MzIgdXZhbCwgdTMyIG5ld3ZhbClcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy00OTktLyoqXG5rZXJuZWwvZnV0ZXgvcGkuYzo1MDA6ICogZnV0ZXhfbG9ja19waV9hdG9taWMoKSAtIEF0b21pYyB3b3JrIHJlcXVpcmVkIHRvIGFjcXVpcmUgYSBwaSBhd2FyZSBmdXRleFxua2VybmVsL2Z1dGV4L3BpLmMtNTAxLSAqIEB1YWRkcjpcdFx0dGhlIHBpIGZ1dGV4IHVzZXIgYWRkcmVzc1xuLS1cbmtlcm5lbC9mdXRleC9waS5jLTUyMi0gKi9cbmtlcm5lbC9mdXRleC9waS5jOjUyMzppbnQgZnV0ZXhfbG9ja19waV9hdG9taWModTMyIF9fdXNlciAqdWFkZHIsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIsXG5rZXJuZWwvZnV0ZXgvcGkuYy01MjQtXHRcdFx0IHVuaW9uIGZ1dGV4X2tleSAqa2V5LFxuLS1cbmtlcm5lbC9mdXRleC9waS5jPTkzMD1pbnQgZnV0ZXhfbG9ja19waSh1MzIgX191c2VyICp1YWRkciwgdW5zaWduZWQgaW50IGZsYWdzLCBrdGltZV90ICp0aW1lLCBpbnQgdHJ5bG9jaylcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy05NTktXG5rZXJuZWwvZnV0ZXgvcGkuYzo5NjA6XHRcdHJldCA9IGZ1dGV4X2xvY2tfcGlfYXRvbWljKHVhZGRyLCBoYiwgXHUwMDI2cS5rZXksIFx1MDAyNnEucGlfc3RhdGUsIGN1cnJlbnQsXG5rZXJuZWwvZnV0ZXgvcGkuYy05NjEtXHRcdFx0XHRcdCAgIFx1MDAyNmV4aXRpbmcsIDApO1xuLS1cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM9MjMwPXZvaWQgcmVxdWV1ZV9waV93YWtlX2Z1dGV4KHN0cnVjdCBmdXRleF9xICpxLCB1bmlvbiBmdXRleF9rZXkgKmtleSxcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTI2Ny0gKiBXYWtlIHRoZSB0b3Agd2FpdGVyIGlmIHdlIHN1Y2NlZWQuICBJZiB0aGUgY2FsbGVyIHNwZWNpZmllZCBzZXRfd2FpdGVycyxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MjY4OiAqIHRoZW4gZGlyZWN0IGZ1dGV4X2xvY2tfcGlfYXRvbWljKCkgdG8gZm9yY2Ugc2V0dGluZyB0aGUgRlVURVhfV0FJVEVSUyBiaXQuXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTI2OS0gKiBoYjEgYW5kIGhiMiBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlci5cbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTI4MT1mdXRleF9wcm94eV90cnlsb2NrX2F0b21pYyh1MzIgX191c2VyICpwaWZ1dGV4LCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMSxcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTI5OC1cdCAqIElmIHRoZSBjYWxsZXIgaW50ZW5kcyB0byByZXF1ZXVlIG1vcmUgdGhhbiAxIHdhaXRlciB0byBwaWZ1dGV4LFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzoyOTk6XHQgKiBmb3JjZSBmdXRleF9sb2NrX3BpX2F0b21pYygpIHRvIHNldCB0aGUgRlVURVhfV0FJVEVSUyBiaXQgbm93LFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zMDAtXHQgKiBhcyB3ZSBoYXZlIG1lYW5zIHRvIGhhbmRsZSB0aGUgcG9zc2libGUgZmF1bHQuICBJZiBub3QsIGRvbiYjMzk7dCBzZXRcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTMzNS1cdCAqL1xua2VybmVsL2Z1dGV4L3JlcXVldWUuYzozMzY6XHRyZXQgPSBmdXRleF9sb2NrX3BpX2F0b21pYyhwaWZ1dGV4LCBoYjIsIGtleTIsIHBzLCB0b3Bfd2FpdGVyLVx1MDAzZXRhc2ssXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTMzNy1cdFx0XHRcdCAgIGV4aXRpbmcsIHNldF93YWl0ZXJzKTtcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTM1MC1cdFx0Lypcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MzUxOlx0XHQgKiBmdXRleF9sb2NrX3BpX2F0b21pYygpIGRpZCBub3QgYWNxdWlyZSB0aGUgdXNlciBzcGFjZVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zNTItXHRcdCAqIGZ1dGV4LCBidXQgbWFuYWdlZCB0byBlc3RhYmxpc2ggdGhlIHByb3h5IGxvY2sgYW5kIHBpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDA6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ5MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgS2VybmVsJiMzOTtzIEZ1dGV4IEltcGxlbWVudGF0aW9uIGFuZCBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGZ1dGV4IGxvY2tpbmcsIHNwZWNpZmljYWxseSB0aGUgcHJvY2VzcyBpc29sYXRpb24gdmFyaWFudC4gSSBzZWUgdGhhdCBib3RoIGBmdXRleF9sb2NrX3BpYCBhbmQgYGZ1dGV4X3Byb3h5X3RyeWxvY2tfYXRvbWljYCB1bHRpbWF0ZWx5IGNhbGwgYGZ1dGV4X2xvY2tfcGlfYXRvbWljYC4gTWFrZXMgc2Vuc2UsIHRoZXkmIzM5O3JlIGxpa2VseSBqdXN0IGRpZmZlcmVudCB3cmFwcGVycyBhcm91bmQgdGhlIGNvcmUgYXRvbWljIG9wZXJhdGlvbi4gTm93LCBJIHdhbnQgdG8gdHJhY2UgaG93IHRoaXMgbG9ja2luZyBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBkdXJpbmcgcHJvY2VzcyBsaWZlY3ljbGUgZXZlbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBpcyBoYW5kbGVkIHdoZW4gdGhyZWFkcyBhcmUgcmVsZWFzZWQuIExldCBtZSBjaGVjayB0aGUgYGV4ZWNfbW1fcmVsZWFzZWAgYW5kIGBleGl0X21tX3JlbGVhc2VgIGZ1bmN0aW9ucyB3aXRoaW4gYGtlcm5lbC9mb3JrLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzaG91bGQgYmUgaGFuZGxlZCB3aGVuIHByb2Nlc3NlcyBhcmUgc3dhcHBlZCBvciB0ZXJtaW5hdGVkLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBwcm9jZXNzIGlzb2xhdGlvbiBhbmQgbWVtb3J5IHJlbGVhc2VzIGFyZSBjb3VwbGVkIHdpdGggdGhlc2UgZnV0ZXggb3BlcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleGVjX21tX3JlbGVhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZm9yay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mb3JrLmM9MTUwNT12b2lkIGV4aXRfbW1fcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxua2VybmVsL2ZvcmsuYy0xNTEwLVxua2VybmVsL2ZvcmsuYzoxNTExOnZvaWQgZXhlY19tbV9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbmtlcm5lbC9mb3JrLmMtMTUxMi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDA6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg3MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBQcm9jZXNzIFRlcm1pbmF0aW9uIGFuZCBGdXRleCBJbnRlcmFjdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGZ1dGV4ZXMgaW50ZXJhY3Qgd2l0aCBwcm9jZXNzIHRlcm1pbmF0aW9uIGFuZCBleGVjdXRpb24uIFRoZSBzdGFydGluZyBwb2ludCBzZWVtcyB0byBiZSB0aGF0IGBleGVjX21tX3JlbGVhc2VgLCB0cmlnZ2VyZWQgYnkgYGV4ZWNfbW1hcGAgaW4gYGZzL2V4ZWMuY2AsIGFuZCBgZXhpdF9tbV9yZWxlYXNlYCwgdHJpZ2dlcmVkIGJ5IGBleGl0X21tYCBpbiBga2VybmVsL2V4aXQuY2AsIGFyZSB0aGUga2V5IHBsYXllcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSByZWxhdGUgdG8gZnV0ZXggb3BlcmF0aW9ucyBkdXJpbmcgcHJvY2VzcyB0cmFuc2l0aW9ucy4KCkkgc2VlIHRoYXQgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbmAgYW5kIGBmdXRleF9leGVjX3JlbGVhc2VfZW5kYCBhcmUgY2FsbGVkIGJ5IGBleGVjX21tX3JlbGVhc2VgIGFuZCBgZXhlY19tbWFwYCByZXNwZWN0aXZlbHkuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBmb2N1cy4gTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBvbiB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGludm9sdmVkLgoKVGhlcmVmb3JlLCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBhcmU6CgoqICAgYGZ1dGV4X2xvY2tfcGlgIC0gVGhlIHByb2JhYmxlIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBwcmlvcml0eSBpbmhlcml0YW5jZSBsb2NrcyBhcmUgaGFuZGxlZC4KKiAgIGBmdXRleF9wcm94eV90cnlsb2NrX2F0b21pY2Agb3IgYGZ1dGV4X3JlcXVldWVgIC0gQ3J1Y2lhbCBmb3IgdGhlIHByb2Nlc3Mgb2YgbWFuYWdpbmcgdGhlIHF1ZXVlIGFuZCB0aGUgbG9jayBzdGF0dXMuCiogICBgZXhlY19tbWFwYCAob3IgYGRvX2V4ZWN2ZWF0X2NvbW1vbmAgLyBgYnBybV9leGVjdmVgKSAtIFRoZSBlbnRyeSBwb2ludCBmb3IgZXhlY3V0aW9uIG9yIHJlbGF0ZWQgZXhlY3V0aW9uIG9wZXJhdGlvbnMuCiogICBgZXhpdF9tbV9yZWxlYXNlYCAob3IgYGV4aXRfbW1gIC8gYGRvX2V4aXRgKSAtIEhvdyBtZW1vcnkgbWFuYWdlbWVudCByZXNvdXJjZXMgYXJlIGNsZWFuZWQgdXAgZHVyaW5nIGV4aXQuCgpHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBjb250ZW50aW9uIGR1cmluZyBleGVjIGFuZCBleGl0LCBJIHNob3VsZCBjaGVjayBob3cgdGhlc2UgaW50ZXJhY3Qgd2l0aCBmdXRleGVzLiBOZXh0IHVwIGlzIGxvb2tpbmcgaW50byB0aGUgYGZ1dGV4X2xvY2tfcGlgIGFuZCBgZnV0ZXhfcmVxdWV1ZWAgaW1wbGVtZW50YXRpb25zLiBUaGlzIHNob3VsZCByZXZlYWwgaG93IHByaW9yaXR5IGluaGVyaXRhbmNlIGFuZCBxdWV1ZSBtYW5hZ2VtZW50IGFyZSBwZXJmb3JtZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1dGV4X2xvY2tfcGkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9mdXRleC5oPTM4ND1leHRlcm4gdm9pZCBmdXRleF9xX3VubG9jayhzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKVxuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oLTM4Ni1cbmtlcm5lbC9mdXRleC9mdXRleC5oOjM4NzpleHRlcm4gaW50IGZ1dGV4X2xvY2tfcGlfYXRvbWljKHUzMiBfX3VzZXIgKnVhZGRyLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzg4LVx0XHRcdFx0dW5pb24gZnV0ZXhfa2V5ICprZXksXG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9NDc1PWV4dGVybiBpbnQgZnV0ZXhfdW5sb2NrX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHZvaWQgX191c2VyICpwb3ApO1xua2VybmVsL2Z1dGV4L2Z1dGV4LmgtNDc2LVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6NDc3OmV4dGVybiBpbnQgZnV0ZXhfbG9ja19waSh1MzIgX191c2VyICp1YWRkciwgdW5zaWduZWQgaW50IGZsYWdzLCBrdGltZV90ICp0aW1lLCBpbnQgdHJ5bG9jayk7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC00NzgtXG4tLVxua2VybmVsL2Z1dGV4L3BpLmM9MjAzPXN0YXRpYyBpbnQgYXR0YWNoX3RvX3BpX3N0YXRlKHUzMiBfX3VzZXIgKnVhZGRyLCB1MzIgdXZhbCxcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy0yMTgtXHQgKiBXZSBnZXQgaGVyZSB3aXRoIGhiLVx1MDAzZWxvY2sgaGVsZCwgYW5kIGhhdmluZyBmb3VuZCBhXG5rZXJuZWwvZnV0ZXgvcGkuYzoyMTk6XHQgKiBmdXRleF90b3Bfd2FpdGVyKCkuIFRoaXMgbWVhbnMgdGhhdCBmdXRleF9sb2NrX3BpKCkgb2Ygc2FpZCBmdXRleF9xXG5rZXJuZWwvZnV0ZXgvcGkuYy0yMjAtXHQgKiBoYXMgZHJvcHBlZCB0aGUgaGItXHUwMDNlbG9jayBpbiBiZXR3ZWVuIGZ1dGV4X3F1ZXVlKCkgYW5kIGZ1dGV4X3VucXVldWVfcGkoKSxcbmtlcm5lbC9mdXRleC9waS5jOjIyMTpcdCAqIHdoaWNoIGluIHR1cm4gbWVhbnMgdGhhdCBmdXRleF9sb2NrX3BpKCkgc3RpbGwgaGFzIGEgcmVmZXJlbmNlIG9uXG5rZXJuZWwvZnV0ZXgvcGkuYy0yMjItXHQgKiBvdXIgcGlfc3RhdGUuXG4tLVxua2VybmVsL2Z1dGV4L3BpLmMtMjI0LVx0ICogVGhlIHdhaXRlciBob2xkaW5nIGEgcmVmZXJlbmNlIG9uIEBwaV9zdGF0ZSBhbHNvIHByb3RlY3RzIGFnYWluc3Rcbmtlcm5lbC9mdXRleC9waS5jOjIyNTpcdCAqIHRoZSB1bmxvY2tlZCBwdXRfcGlfc3RhdGUoKSBpbiBmdXRleF91bmxvY2tfcGkoKSwgZnV0ZXhfbG9ja19waSgpXG5rZXJuZWwvZnV0ZXgvcGkuYy0yMjYtXHQgKiBhbmQgZnV0ZXhfd2FpdF9yZXF1ZXVlX3BpKCkgYXMgaXQgY2Fubm90IGdvIHRvIDAgYW5kIGNvbnNlcXVlbnRseVxuLS1cbmtlcm5lbC9mdXRleC9waS5jPTMyMT1zdGF0aWMgaW50IGhhbmRsZV9leGl0X3JhY2UodTMyIF9fdXNlciAqdWFkZHIsIHUzMiB1dmFsLFxuLS1cbmtlcm5lbC9mdXRleC9waS5jLTMzOC1cdCAqIHN5c19leGl0KClcdFx0XHRzeXNfZnV0ZXgoKVxua2VybmVsL2Z1dGV4L3BpLmM6MzM5Olx0ICogIGRvX2V4aXQoKVx0XHRcdCBmdXRleF9sb2NrX3BpKClcbmtlcm5lbC9mdXRleC9waS5jOjM0MDpcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdXRleF9sb2NrX3BpX2F0b21pYygpXG5rZXJuZWwvZnV0ZXgvcGkuYy0zNDEtXHQgKiAgIGV4aXRfc2lnbmFscyh0c2spXHRcdCAgICBObyB3YWl0ZXJzOlxuLS1cbmtlcm5lbC9mdXRleC9waS5jPTQ4Mz1zdGF0aWMgaW50IGxvY2tfcGlfdXBkYXRlX2F0b21pYyh1MzIgX191c2VyICp1YWRkciwgdTMyIHV2YWwsIHUzMiBuZXd2YWwpXG4tLVxua2VybmVsL2Z1dGV4L3BpLmMtNDk5LS8qKlxua2VybmVsL2Z1dGV4L3BpLmM6NTAwOiAqIGZ1dGV4X2xvY2tfcGlfYXRvbWljKCkgLSBBdG9taWMgd29yayByZXF1aXJlZCB0byBhY3F1aXJlIGEgcGkgYXdhcmUgZnV0ZXhcbmtlcm5lbC9mdXRleC9waS5jLTUwMS0gKiBAdWFkZHI6XHRcdHRoZSBwaSBmdXRleCB1c2VyIGFkZHJlc3Ncbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy01MjItICovXG5rZXJuZWwvZnV0ZXgvcGkuYzo1MjM6aW50IGZ1dGV4X2xvY2tfcGlfYXRvbWljKHUzMiBfX3VzZXIgKnVhZGRyLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxua2VybmVsL2Z1dGV4L3BpLmMtNTI0LVx0XHRcdCB1bmlvbiBmdXRleF9rZXkgKmtleSxcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYz04ODQ9aW50IGZpeHVwX3BpX293bmVyKHUzMiBfX3VzZXIgKnVhZGRyLCBzdHJ1Y3QgZnV0ZXhfcSAqcSwgaW50IGxvY2tlZClcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy05MjktICovXG5rZXJuZWwvZnV0ZXgvcGkuYzo5MzA6aW50IGZ1dGV4X2xvY2tfcGkodTMyIF9fdXNlciAqdWFkZHIsIHVuc2lnbmVkIGludCBmbGFncywga3RpbWVfdCAqdGltZSwgaW50IHRyeWxvY2spXG5rZXJuZWwvZnV0ZXgvcGkuYy05MzEte1xuLS1cbmtlcm5lbC9mdXRleC9waS5jLTk1OS1cbmtlcm5lbC9mdXRleC9waS5jOjk2MDpcdFx0cmV0ID0gZnV0ZXhfbG9ja19waV9hdG9taWModWFkZHIsIGhiLCBcdTAwMjZxLmtleSwgXHUwMDI2cS5waV9zdGF0ZSwgY3VycmVudCxcbmtlcm5lbC9mdXRleC9waS5jLTk2MS1cdFx0XHRcdFx0ICAgXHUwMDI2ZXhpdGluZywgMCk7XG4tLVxua2VybmVsL2Z1dGV4L3BpLmM9MTE0OD1zdGF0aWMgaW50IF9fZnV0ZXhfdW5sb2NrX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL2Z1dGV4L3BpLmMtMTIwMC1cdFx0ICpcbmtlcm5lbC9mdXRleC9waS5jOjEyMDE6XHRcdCAqIFNpbmNlIHRoZSBjbGVhbnVwOiBjYXNlIGluIGZ1dGV4X2xvY2tfcGkoKSByZW1vdmVzIHRoZVxua2VybmVsL2Z1dGV4L3BpLmMtMTIwMi1cdFx0ICogcnRfd2FpdGVyIHdpdGhvdXQgaG9sZGluZyBoYi1cdTAwM2Vsb2NrLCBpdCBpcyBwb3NzaWJsZSBmb3Jcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy0xMjE2LVx0XHQgKiBpcyBsZWF2aW5nLiBUaGUgZW50cnkgbmVlZHMgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IHNvIGFcbmtlcm5lbC9mdXRleC9waS5jOjEyMTc6XHRcdCAqIG5ldyBmdXRleF9sb2NrX3BpKCkgaXMgbm90IHVzaW5nIHRoaXMgc3RhbGUgUEktc3RhdGUgd2hpbGVcbmtlcm5lbC9mdXRleC9waS5jLTEyMTgtXHRcdCAqIHRoZSBmdXRleCBpcyBhdmFpbGFibGUgaW4gdXNlciBzcGFjZSBhZ2Fpbi5cbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTIzMD12b2lkIHJlcXVldWVfcGlfd2FrZV9mdXRleChzdHJ1Y3QgZnV0ZXhfcSAqcSwgdW5pb24gZnV0ZXhfa2V5ICprZXksXG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0yNjctICogV2FrZSB0aGUgdG9wIHdhaXRlciBpZiB3ZSBzdWNjZWVkLiAgSWYgdGhlIGNhbGxlciBzcGVjaWZpZWQgc2V0X3dhaXRlcnMsXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjI2ODogKiB0aGVuIGRpcmVjdCBmdXRleF9sb2NrX3BpX2F0b21pYygpIHRvIGZvcmNlIHNldHRpbmcgdGhlIEZVVEVYX1dBSVRFUlMgYml0Llxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0yNjktICogaGIxIGFuZCBoYjIgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIuXG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYz0yODE9ZnV0ZXhfcHJveHlfdHJ5bG9ja19hdG9taWModTMyIF9fdXNlciAqcGlmdXRleCwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjEsXG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0yOTgtXHQgKiBJZiB0aGUgY2FsbGVyIGludGVuZHMgdG8gcmVxdWV1ZSBtb3JlIHRoYW4gMSB3YWl0ZXIgdG8gcGlmdXRleCxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6Mjk5Olx0ICogZm9yY2UgZnV0ZXhfbG9ja19waV9hdG9taWMoKSB0byBzZXQgdGhlIEZVVEVYX1dBSVRFUlMgYml0IG5vdyxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMzAwLVx0ICogYXMgd2UgaGF2ZSBtZWFucyB0byBoYW5kbGUgdGhlIHBvc3NpYmxlIGZhdWx0LiAgSWYgbm90LCBkb24mIzM5O3Qgc2V0XG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zMzUtXHQgKi9cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MzM2Olx0cmV0ID0gZnV0ZXhfbG9ja19waV9hdG9taWMocGlmdXRleCwgaGIyLCBrZXkyLCBwcywgdG9wX3dhaXRlci1cdTAwM2V0YXNrLFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zMzctXHRcdFx0XHQgICBleGl0aW5nLCBzZXRfd2FpdGVycyk7XG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zNTAtXHRcdC8qXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjM1MTpcdFx0ICogZnV0ZXhfbG9ja19waV9hdG9taWMoKSBkaWQgbm90IGFjcXVpcmUgdGhlIHVzZXIgc3BhY2Vcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMzUyLVx0XHQgKiBmdXRleCwgYnV0IG1hbmFnZWQgdG8gZXN0YWJsaXNoIHRoZSBwcm94eSBsb2NrIGFuZCBwaVxuLS1cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM9Nzg2PWludCBmdXRleF93YWl0X3JlcXVldWVfcGkodTMyIF9fdXNlciAqdWFkZHIsIHVuc2lnbmVkIGludCBmbGFncyxcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTg5NS1cdFx0XHQgKiBXZSYjMzk7dmUgYWxyZWFkeSBiZWVuIHJlcXVldWVkLCBidXQgY2Fubm90IHJlc3RhcnRcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6ODk2Olx0XHRcdCAqIGJ5IGNhbGxpbmcgZnV0ZXhfbG9ja19waSgpIGRpcmVjdGx5LiBXZSBjb3VsZFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy04OTctXHRcdFx0ICogcmVzdGFydCB0aGlzIHN5c2NhbGwsIGJ1dCBpdCB3b3VsZCBkZXRlY3QgdGhhdFxuLS1cbmtlcm5lbC9mdXRleC9zeXNjYWxscy5jPTEwOD1sb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXG4tLVxua2VybmVsL2Z1dGV4L3N5c2NhbGxzLmMtMTQ4LVx0Y2FzZSBGVVRFWF9MT0NLX1BJMjpcbmtlcm5lbC9mdXRleC9zeXNjYWxscy5jOjE0OTpcdFx0cmV0dXJuIGZ1dGV4X2xvY2tfcGkodWFkZHIsIGZsYWdzLCB0aW1lb3V0LCAwKTtcbmtlcm5lbC9mdXRleC9zeXNjYWxscy5jLTE1MC1cdGNhc2UgRlVURVhfVU5MT0NLX1BJOlxuLS1cbmtlcm5lbC9mdXRleC9zeXNjYWxscy5jLTE1Mi1cdGNhc2UgRlVURVhfVFJZTE9DS19QSTpcbmtlcm5lbC9mdXRleC9zeXNjYWxscy5jOjE1MzpcdFx0cmV0dXJuIGZ1dGV4X2xvY2tfcGkodWFkZHIsIGZsYWdzLCBOVUxMLCAxKTtcbmtlcm5lbC9mdXRleC9zeXNjYWxscy5jLTE1NC1cdGNhc2UgRlVURVhfV0FJVF9SRVFVRVVFX1BJOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjUyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGdXRleCBhbmQgRXhlY3V0aW9uIFBhdGggSW50ZXJhY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlc2UgZnV0ZXggb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBwcmlvcml0eSBpbmhlcml0YW5jZSB2YXJpYW50cywgaW50ZXJhY3Qgd2l0aCBwcm9jZXNzIGV4ZWN1dGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgdXNlZCB3aXRoaW4gYGRvX2Z1dGV4YCBmb3IgdGhlIHZhcmlvdXMgcHJpb3JpdHkgaW5oZXJpdGFuY2UgRlVURVggb3BlcmF0aW9ucy4gSSBzZWUgdGhhdCBgZnV0ZXhfbG9ja19waWAgaGFuZGxlcyBgRlVURVhfTE9DS19QSWAsIGBGVVRFWF9MT0NLX1BJMmAsIGFuZCBgRlVURVhfVFJZTE9DS19QSWAuIFRoZW4sIGBmdXRleF93YWl0X3JlcXVldWVfcGlgIGlzIGVtcGxveWVkIGZvciBgRlVURVhfV0FJVF9SRVFVRVVFX1BJYCwgYW5kIGBmdXRleF9yZXF1ZXVlYCBnZXRzIHVzZWQgd2hlbiBhIGBGVVRFWF9DTVBfUkVRVUVVRV9QSWAgY2FsbCBpcyBtYWRlLgoKVGhlcmVmb3JlLCB0aGUgY3JpdGljYWwgcGF0aHMgSSBuZWVkIHRvIGV4YW1pbmUgaW52b2x2ZSB0aG9zZSB0aHJlZSBmdXRleCBmdW5jdGlvbnMuIEFkZGl0aW9uYWxseSwgY29uc2lkZXJpbmcgdGhlIGR5bmFtaWMgbmF0dXJlIG9mIHByb2Nlc3MgZXhlY3V0aW9uIGFuZCBtZW1vcnkgbWFwcGluZyBkdXJpbmcgYSBuZXcgcHJvZ3JhbSBsYXVuY2gsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZXhlYyBzeXN0ZW0gY2FsbCBpbnRlcmZhY2VzIHdpdGggYWxsIG9mIHRoaXMuIFRodXMsIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSBob3cgYGV4ZWNfbW1hcGAgKG9yIHBvdGVudGlhbGx5IGBicHJtX2V4ZWN2ZWAsIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIHZlcnNpb24gYW5kIHNwZWNpZmljIGFyY2hpdGVjdHVyZSkgcGxheXMgYSByb2xlIGluIHRoaXMuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGBleGVjX21tYXBgIGluIGBmcy9leGVjLmNgLiBJJiMzOTttIGhvcGluZyB0byBkaXNjb3ZlciBhbnkgaW50ZXJhY3Rpb25zIGJldHdlZW4gZnV0ZXhlcyBhbmQgdGhlIG1lbW9yeSBzcGFjZSBzZXR1cCBvciB0ZWFyZG93biB0aGF0IGhhcHBlbnMgZHVyaW5nIGEgcHJvY2VzcyBpbWFnZSBzd2FwLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGludGVyYWN0aW9ucyBpcyBrZXkgdG8gcGlucG9pbnRpbmcgcG90ZW50aWFsIHByaW9yaXR5IGludmVyc2lvbiBpc3N1ZXMgb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXhlY19tbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXhlYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4ZWMuYz0xMTc9Ym9vbCBwYXRoX25vZXhlYyhjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcbi0tXG5mcy9leGVjLmMtMTI3LS8qXG5mcy9leGVjLmM6MTI4OiAqIFRoZSBuYXNjZW50IGJwcm0tXHUwMDNlbW0gaXMgbm90IHZpc2libGUgdW50aWwgZXhlY19tbWFwKCkgYnV0IGl0IGNhblxuZnMvZXhlYy5jLTEyOS0gKiB1c2UgYSBsb3Qgb2YgbWVtb3J5LCBhY2NvdW50IHRoZXNlIHBhZ2VzIGluIGN1cnJlbnQtXHUwMDNlbW0gdGVtcG9yYXJ5XG4tLVxuZnMvZXhlYy5jPTgzND1FWFBPUlRfU1lNQk9MKHJlYWRfY29kZSk7XG4tLVxuZnMvZXhlYy5jLTg0Mi0gKi9cbmZzL2V4ZWMuYzo4NDM6c3RhdGljIGludCBleGVjX21tYXAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbmZzL2V4ZWMuYy04NDQte1xuLS1cbmZzL2V4ZWMuYy04ODAtXHR0YXNrX2xvY2sodHNrKTtcbmZzL2V4ZWMuYzo4ODE6XHRtZW1iYXJyaWVyX2V4ZWNfbW1hcChtbSk7XG5mcy9leGVjLmMtODgyLVxuLS1cbmZzL2V4ZWMuYz0xMDk5PXZvaWQgX19zZXRfdGFza19jb21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBjb25zdCBjaGFyICpidWYsIGJvb2wgZXhlYylcbi0tXG5mcy9leGVjLmMtMTExMi0gKiBzaWduYWwgKHZpYSBkZV90aHJlYWQoKSBvciBjb3JlZHVtcCksIG9yIHdpbGwgaGF2ZSBTRUdWIHJhaXNlZFxuZnMvZXhlYy5jOjExMTM6ICogKGFmdGVyIGV4ZWNfbW1hcCgpKSBieSBzZWFyY2hfYmluYXJ5X2hhbmRsZXIgKHNlZSBiZWxvdykuXG5mcy9leGVjLmMtMTExNC0gKi9cbmZzL2V4ZWMuYz0xMTE1PWludCBiZWdpbl9uZXdfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICogYnBybSlcbi0tXG5mcy9leGVjLmMtMTE1NC1cdC8qXG5mcy9leGVjLmM6MTE1NTpcdCAqIE11c3QgYmUgY2FsbGVkIF9iZWZvcmVfIGV4ZWNfbW1hcCgpIGFzIGJwcm0tXHUwMDNlbW0gaXNcbmZzL2V4ZWMuYy0xMTU2LVx0ICogbm90IHZpc2libGUgdW50aWwgdGhlbi4gRG9pbmcgaXQgaGVyZSBhbHNvIGVuc3VyZXNcbi0tXG5mcy9leGVjLmMtMTE3MS1cdGFjY3RfYXJnX3NpemUoYnBybSwgMCk7XG5mcy9leGVjLmM6MTE3MjpcdHJldHZhbCA9IGV4ZWNfbW1hcChicHJtKTtcbmZzL2V4ZWMuYy0xMTczLVx0aWYgKHJldHZhbClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDA6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MDMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2hlcmUgYW0gSSBsaWtlbHkgdG8gZmluZCB0aGUgcm9vdCBvZiB0aGlzIGJlaGF2aW9yPwoKKipSb290IENhdXNlIEludmVzdGlnYXRpb24qKgoKUmlnaHQsIGBleGVjX21tYXBgLi4uIHRoYXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gZm9yIG1lbW9yeSBtYXBwaW5nIGR1cmluZyBleGVjdXRpb24uIFRoZSBjYWxsIGNoYWluIGZvciB0aGF0LCBmcm9tIHdoYXQgSSYjMzk7dmUgc2VlbiwgZ29lcyB0aHJvdWdoIGBiZWdpbl9uZXdfZXhlY2AuIFRoYXQgZnVuY3Rpb24gaXRzZWxmIGlzIGNhbGxlZCBieSB0aGUgYGxvYWRfZWxmX2JpbmFyeWAgZnVuY3Rpb24gYXMgd2VsbCBhcyBvdGhlciBiaW5hcnkgaGFuZGxlcnMuIFNvIHRoYXQgbWVhbnMgYGJlZ2luX25ld19leGVjYCBvciBwb3RlbnRpYWxseSBgYnBybV9leGVjdmVgIGFyZSB2ZXJ5IGxpa2VseSBzcG90cyB0byBzdGFydC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGJlZ2luX25ld19leGVjYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiZWdpbl9uZXdfZXhlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9iaW5mbXRfZWxmLmM9ODMyPXN0YXRpYyBpbnQgbG9hZF9lbGZfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvYmluZm10X2VsZi5jLTEwMDktXHQvKiBGbHVzaCBhbGwgdHJhY2VzIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBleGVjdXRhYmxlICovXG5mcy9iaW5mbXRfZWxmLmM6MTAxMDpcdHJldHZhbCA9IGJlZ2luX25ld19leGVjKGJwcm0pO1xuZnMvYmluZm10X2VsZi5jLTEwMTEtXHRpZiAocmV0dmFsKVxuLS1cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYz0xODI9c3RhdGljIGludCBsb2FkX2VsZl9mZHBpY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtMzQ0LVx0LyogZmx1c2ggYWxsIHRyYWNlcyBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgZXhlY3V0YWJsZSAqL1xuZnMvYmluZm10X2VsZl9mZHBpYy5jOjM0NTpcdHJldHZhbCA9IGJlZ2luX25ld19leGVjKGJwcm0pO1xuZnMvYmluZm10X2VsZl9mZHBpYy5jLTM0Ni1cdGlmIChyZXR2YWwpXG4tLVxuZnMvYmluZm10X2ZsYXQuYz00MDY9c3RhdGljIGludCBsb2FkX2ZsYXRfZmlsZShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuLS1cbmZzL2JpbmZtdF9mbGF0LmMtNTA4LVx0LyogRmx1c2ggYWxsIHRyYWNlcyBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgZXhlY3V0YWJsZSAqL1xuZnMvYmluZm10X2ZsYXQuYzo1MDk6XHRyZXQgPSBiZWdpbl9uZXdfZXhlYyhicHJtKTtcbmZzL2JpbmZtdF9mbGF0LmMtNTEwLVx0aWYgKHJldClcbi0tXG5mcy9leGVjLmM9MjU4PXN0YXRpYyBpbnQgYnBybV9tbV9pbml0KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvZXhlYy5jLTI2Ny1cbmZzL2V4ZWMuYzoyNjg6XHQvKiBTdGFnZWQgZm9yIHdvdWxkX2R1bXAoKSBuYXJyb3dpbmc7IGNvbnN1bWVkIGJ5IGJlZ2luX25ld19leGVjKCkuICovXG5mcy9leGVjLmMtMjY5LVx0YnBybS1cdTAwM2V1c2VyX25zID0gZ2V0X3VzZXJfbnMoY3VycmVudF91c2VyX25zKCkpO1xuLS1cbmZzL2V4ZWMuYz0xMDk5PXZvaWQgX19zZXRfdGFza19jb21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBjb25zdCBjaGFyICpidWYsIGJvb2wgZXhlYylcbi0tXG5mcy9leGVjLmMtMTExNC0gKi9cbmZzL2V4ZWMuYzoxMTE1OmludCBiZWdpbl9uZXdfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICogYnBybSlcbmZzL2V4ZWMuYy0xMTE2LXtcbi0tXG5mcy9leGVjLmMtMTMxNC19XG5mcy9leGVjLmM6MTMxNTpFWFBPUlRfU1lNQk9MKGJlZ2luX25ld19leGVjKTtcbmZzL2V4ZWMuYy0xMzE2LVxuLS1cbmZzL2V4ZWMuYz0xNjgwPXN0YXRpYyBpbnQgc2VhcmNoX2JpbmFyeV9oYW5kbGVyKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvZXhlYy5jLTE3MTItXG5mcy9leGVjLmM6MTcxMzovKiBiaW5mbXQgaGFuZGxlcnMgd2lsbCBjYWxsIGJhY2sgaW50byBiZWdpbl9uZXdfZXhlYygpIG9uIHN1Y2Nlc3MuICovXG5mcy9leGVjLmMtMTcxNC1zdGF0aWMgaW50IGV4ZWNfYmlucHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvZXhlYy5jPTE3NTk9c3RhdGljIGludCBicHJtX2V4ZWN2ZShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbmZzL2V4ZWMuYy0xNzY4LVx0ICogQ2hlY2sgZm9yIHVuc2FmZSBleGVjdXRpb24gc3RhdGVzIGJlZm9yZSBleGVjX2JpbnBybSgpLCB3aGljaFxuZnMvZXhlYy5jOjE3Njk6XHQgKiB3aWxsIGNhbGwgYmFjayBpbnRvIGJlZ2luX25ld19leGVjKCksIGludG8gYnBybV9jcmVkc19mcm9tX2ZpbGUoKSxcbmZzL2V4ZWMuYy0xNzcwLVx0ICogd2hlcmUgc2V0dWlkLW5lc3MgaXMgZXZhbHVhdGVkLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc1NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFNlY3VyaXR5IFZ1bG5lcmFiaWxpdGllcyBEdXJpbmcgUHJvY2VzcyBFeGVjdXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBwcm9jZXNzIGV4ZWN1dGlvbiBhbmQgbG9va2luZyBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGJwcm1fZXhlY3ZlYCBpcyBhIHByb21pc2luZyBhcmVhIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIExldCYjMzk7cyBzZWUuLi4gd2hhdCBhYm91dCBgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luYCBhbmQgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRgPyBUaGV5JiMzOTtyZSBvZnRlbiByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQsIHNvIGl0IG1ha2VzIHNlbnNlIHRvIGNoZWNrIHRob3NlLiBBaCwgSSBzZWUsIHRoZXkmIzM5O3JlIGNhbGxlZCBmcm9tIGBleGVjX21tX3JlbGVhc2VgIGFuZCBgZXhlY19tbWFwYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gTm93LCBgZXhlY19tbV9yZWxlYXNlYCBpcyBhbHNvIGNhbGxlZCBmcm9tIGBleGVjX21tYXBgLiBXYWl0IGEgc2Vjb25k4oCmIHRoYXQgbG9va3MgbGlrZSBhIGNhbGwgd2l0aGluIGBleGVjX21tYXBgIGluIGBmcy9leGVjLmNgLCBzbyBJIHJlYWxseSBzaG91bGQgZG91YmxlLWNoZWNrIGBmcy9leGVjLmNgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBtaXNzZWQgb3IgdGhhdCB3YXJyYW50cyBmdXJ0aGVyIGFuYWx5c2lzLiBCYWNrIHRvIHRoZSBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleGVjX21tX3JlbGVhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leGVjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXhlYy5jPTg0Mz1zdGF0aWMgaW50IGV4ZWNfbW1hcChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbmZzL2V4ZWMuYy04NTctXHRvbGRfbW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuZnMvZXhlYy5jOjg1ODpcdGV4ZWNfbW1fcmVsZWFzZSh0c2ssIG9sZF9tbSk7XG5mcy9leGVjLmMtODU5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE5OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZ1dGV4IFBJIE93bmVyIFJlbGVhc2UgZm9yIEV4ZWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGV4ZWNfbW1fcmVsZWFzZWAgZnVuY3Rpb24gYW5kIGl0JiMzOTtzIGNhbGxlZCByaWdodCBmcm9tIHdpdGhpbiBgZXhlY19tbWFwYC4gVGhpcyBwYXRjaCBpcyBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGEgcmFjZSBjb25kaXRpb24gaW52b2x2aW5nIGZ1dGV4IFBJIG93bmVycyBkdXJpbmcgYW4gZXhlY3ZlLiBJIHNlZSB0aGF0IGBmdXRleF9leGVjX3JlbGVhc2VgIGlzIGJlaW5nIGJyb2tlbiBkb3duIGludG8gYGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbmAgYW5kIGBmdXRleF9leGVjX3JlbGVhc2VfZW5kYC4gVGhlIGBiZWdpbmAgdmVyc2lvbiBnb2VzIGludG8gYGV4ZWNfbW1fcmVsZWFzZWAsIHNvIGl0JiMzOTtzIGhhcHBlbmluZyBlYXJseSBpbiBgZXhlY19tbWFwYCwgYmVmb3JlIHRoZSBuZXcgbWVtb3J5IG1hcCAobW0pIGlzIGV2ZW4gc2V0IHVwLiBUaGUgYGVuZGAgdmVyc2lvbiBraWNrcyBpbiBsYXRlciwgYWZ0ZXIgdGhlIG5ldyBgbW1gIGlzIGluc3RhbGxlZC4KClRoZSBjb3JlIG9mIHRoZSBmaXggaXMgdG8gbWFuYWdlIHRoZSBzdGF0ZSBvZiB0aGUgZnV0ZXggUEkgb3duZXIgZHVyaW5nIHRoZSBleGVjIHByb2Nlc3MuIEl0JiMzOTtzIG1lYW50IHRvIGFkZHJlc3MgdGhlIHNjZW5hcmlvIHdoZXJlIHRoZSBQSSBvd25lciBpcyBlaXRoZXIgZXhpdGluZyBvciwgaW4gdGhpcyBjYXNlLCBwZXJmb3JtaW5nIGFuIGBleGVjYC4gSSBzZWUgdGhlIGtleSBjaGVjayBpcyBpbiBgYXR0YWNoX3RvX3BpX293bmVyYDoKCmBgYGMKCWlmIChJU19FTkFCTEVEKENPTkZJR19NTVUpICZhbXA7JmFtcDsgZnV0ZXhfa2V5X2lzX3ByaXZhdGUoa2V5KSAmYW1wOyZhbXA7CgkgICAgUkVBRF9PTkNFKHAtJmd0O21tKSAhPSBrZXktJmd0O3ByaXZhdGUubW0pIHsKCQlyYXdfc3Bpbl91bmxvY2tfaXJxKCZhbXA7cC0mZ3Q7cGlfbG9jayk7CgkJcHV0X3Rhc2tfc3RydWN0KHApOwoJCXJldHVybiAtRVNSQ0g7Cgl9CmBgYAoKRXNzZW50aWFsbHksIGlmIHRoZSB0YXNrJiMzOTtzIGBtbWAgaGFzIGNoYW5nZWQgKmFmdGVyKiB0aGUgaW5pdGlhbCBgZnV0ZXhfa2V5YCBjaGVjayAodXNpbmcgYFJFQURfT05DRWAgdG8gZW5zdXJlIHdlIHNlZSB0aGUgbGF0ZXN0IHZhbHVlKSwgd2UgKmRvbiYjMzk7dCogYXR0YWNoIHRvIGl0LiBJdCYjMzk7cyBhIGNyaXRpY2FsIHNhZmV0eSBtZWFzdXJlIHRvIGF2b2lkIHN0YWxlIHBvaW50ZXJzIG9yIGluY29ycmVjdCBhc3NvY2lhdGlvbnMgYWZ0ZXIgdGhlIGV4ZWMuIEkgdGhpbmsgdGhlIGlkZWEgaXMgdGhhdCB0aGUgdGFzayBpcyAmIzM0O2V4ZWMtaW5nJiMzNDsgYW5kIGl0cyBtbSBoYXMgY2hhbmdlZCwgc28gd2UgY2Fubm90IGF0dGFjaCB0byBpdCBhbnkgbW9yZSwgb3IgaXQgd2lsbCBjYXVzZSBhbiBpc3N1ZS4KClRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBhcmUgYEZVVEVYYCBhbmQgYEZVVEVYX1BJYCwgb2YgY291cnNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBGVVRFWF9QSWAgaXMgYWN0dWFsbHkgZGVmaW5lZCwgdGhhdCYjMzk7cyBpbXBvcnRhbnQgZm9yIHRoZSB3aG9sZSB0aGluZyB0byB3b3JrLCBhbmQgdG8gYmUgdGVzdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGVVRFWF9QSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTgzND1jb25maWcgRlVURVhcbi0tXG5pbml0L0tjb25maWctMTg0My1cbmluaXQvS2NvbmZpZzoxODQ0OmNvbmZpZyBGVVRFWF9QSVxuaW5pdC9LY29uZmlnLTE4NDUtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDYzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGBGVVRFWF9QSWAgYW5kIGBNTVVgKioKCk9rYXksIHNvIGBGVVRFWF9QSWAgaXMgZGVmaW5pdGVseSBhIHRoaW5nLCBnb29kLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBVbml0LCBvciBgTU1VYCwgaXMgYSBjcnVjaWFsIHBpZWNlIG9mIHRoaXMgcHV6emxlLiBUaGUgY29kZSB1c2VzIGBJU19FTkFCTEVEKENPTkZJR19NTVUpYCwgc28gdGhlIGRlcGVuZGVuY3kgaXMgY2xlYXJseSB0aGVyZS4gQWx0aG91Z2ggaXQmIzM5O3MgdXN1YWxseSBlbmFibGVkIGJ5IGRlZmF1bHQgb24gbW9zdCBvZiB0aGUgYXJjaGl0ZWN0dXJlcyBJIHdvcmsgd2l0aCwgaXQmIzM5O3MgYSBnb29kIHByYWN0aWNlIHRvIGNvbmZpcm0uIFdpdGggdGhlIGRlcGVuZGVuY3kgZXN0YWJsaXNoZWQsIEkmIzM5O2xsIG1vdmUgb24gdG8gYSBkZWVwZXIgZGl2ZS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEZVVEVYX1BJYCBpdHNlbGYgYW5kIHNlZSB3aGF0IG90aGVyIGNvbmRpdGlvbnMgb3IgbW9kdWxlcyBpdCByZWxpZXMgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGVVRFWF9QSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTgzND1jb25maWcgRlVURVhcbi0tXG5pbml0L0tjb25maWctMTg0My1cbmluaXQvS2NvbmZpZzoxODQ0OmNvbmZpZyBGVVRFWF9QSVxuaW5pdC9LY29uZmlnLTE4NDUtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzg0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlJiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHVudGFuZ2xpbmcgdGhpcyBjb25maWd1cmF0aW9uIGlzc3VlPyBHaXZlbiB0aGUgbmF0dXJlIG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciwgYGluaXQvS2NvbmZpZ2Agc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHNlY3Rpb25zLCBhbmQgSSYjMzk7bSBwcmV0dHkgc3VyZSBJIHJlbWVtYmVyIHRoZXJlIGJlaW5nIHNvbWUgY3J1Y2lhbCBkZWZpbml0aW9ucyBhcm91bmQgbGluZSAxODQ0LiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIGFyZWEgZm9yIGxvb2tpbmcgYXQgYmFzZSBvcHRpb25zIG9yIGNvcmUgbW9kdWxlIHNldHRpbmdzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUg4oCTIGhvcGVmdWxseSwgSSBjYW4gc3BvdCB0aGUga2V5IGRlcGVuZGVuY2llcyBvciBkZWZhdWx0IGJlaGF2aW9ycyB0aGF0IGFyZSBjYXVzaW5nIHRoZSBjdXJyZW50IGhpY2N1cC4gSXQmIzM5O3MgYSBiaXQgb2YgYSBjb2RlIGFyY2hhZW9sb2d5IHByb2plY3QsIGJ1dCBzdGFydGluZyB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGRlZmluaXRpb25zIGlzIGFsbW9zdCBhbHdheXMgdGhlIHJpZ2h0IHdheSB0byBhcHByb2FjaCB0aGVzZSBraW5kcyBvZiBwcm9ibGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODM0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MzQ6XHRjb25maWcgRlVURVhcbjE4MzU6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGZ1dGV4IHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4xODM2Olx0XHRkZXBlbmRzIG9uICEoU1BBUkMzMiBcdTAwMjZcdTAwMjYgU01QKVxuMTgzNzpcdFx0ZGVmYXVsdCB5XG4xODM4Olx0XHRpbXBseSBSVF9NVVRFWEVTXG4xODM5Olx0XHRoZWxwXG4xODQwOlx0XHQgIERpc2FibGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRoZSBrZXJuZWwgdG8gYmUgYnVpbHQgd2l0aG91dFxuMTg0MTpcdFx0ICBzdXBwb3J0IGZvciBcJiMzNDtmYXN0IHVzZXJzcGFjZSBtdXRleGVzXCYjMzQ7LiAgVGhlIHJlc3VsdGluZyBrZXJuZWwgbWF5IG5vdFxuMTg0MjpcdFx0ICBydW4gZ2xpYmMtYmFzZWQgYXBwbGljYXRpb25zIGNvcnJlY3RseS5cbjE4NDM6XHRcbjE4NDQ6XHRjb25maWcgRlVURVhfUElcbjE4NDU6XHRcdGJvb2xcbjE4NDY6XHRcdGRlcGVuZHMgb24gRlVURVggXHUwMDI2XHUwMDI2IFJUX01VVEVYRVNcbjE4NDc6XHRcdGRlZmF1bHQgeVxuMTg0ODpcdFxuMTg0OTpcdGNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcbjE4NTA6XHRcdGJvb2xcbjE4NTE6XHRcdGRlcGVuZHMgb24gRlVURVggXHUwMDI2XHUwMDI2ICFCQVNFX1NNQUxMIFx1MDAyNlx1MDAyNiBNTVVcbjE4NTI6XHRcdGRlZmF1bHQgeVxuMTg1MzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg4MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFbmFibGluZyBGdXRleCBhbmQgUmVhbC1UaW1lIE11dGV4ZXMgZm9yIFByaW9yaXR5IEluaGVyaXRhbmNlIFN1cHBvcnQqKgoKT2theSwgc28gYEZVVEVYX1BJYCBpcyBpbmhlcmVudGx5IHJlbGlhbnQgb24gYm90aCBgRlVURVhgIGFuZCBgUlRfTVVURVhFU2AuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlcmVmb3JlLCB3ZSBhYnNvbHV0ZWx5ICptdXN0KiBlbmFibGUgdGhvc2UgdHdvIG9wdGlvbnMgYXMgcHJlcmVxdWlzaXRlcy4gVGhpcyBpcyBmdW5kYW1lbnRhbC4KCk5vdywgbGV0JiMzOTtzIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBhcmUgZ29pbmcgdG8gZGVtYW5kIG91ciBhdHRlbnRpb24sIHRoZSBhcmVhcyB3aGVyZSB0aGUgcHJpb3JpdHkgaW5oZXJpdGFuY2UgbG9naWMgaXMgbW9zdCBjcml0aWNhbC4gSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIGZvY3VzIG9uOiBgZnV0ZXhfbG9ja19waWAsIGBmdXRleF93YWl0X3JlcXVldWVfcGlgLCBgZnV0ZXhfcmVxdWV1ZWAsIGFuZCBgZG9fZnV0ZXhgLiBUaGVzZSBhcmUgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnRzLgoKV2FpdCBhIHNlY29uZC4uLkkgc2VlIGBicHJtX2V4ZWN2ZWAgb24gdGhpcyBsaXN0LiBEaWRuJiMzOTt0IEkganVzdCBzcG90IHRoYXQ/IEhtbW0uIElzIHRoaXMgc3RhdGljLCBJIHdvbmRlcj8gTGV0IG1lIGNoZWNrIGBmcy9leGVjLmNgIGFuZCBtYWtlIHN1cmUgaXQgaXMgbm90IHVzZWQgaW4gYW5vdGhlciBjb250ZXh0LiBCZXN0IHRvIGJlIHN1cmUgb2YgdGhlIHNjb3BlIG9mIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jwcm1fZXhlY3ZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXhlYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4ZWMuYz0xNDMwPXN0YXRpYyBzdHJ1Y3QgbGludXhfYmlucHJtICphbGxvY19icHJtKGludCBmZCwgc3RydWN0IGZpbGVuYW1lICpmaWxlbmFtZSwgaW50IGZsYWdzKVxuLS1cbmZzL2V4ZWMuYy0xNDgwLVx0ICogc3RvcCBqdXN0IGFmdGVyIHRoZSBzZWN1cml0eV9icHJtX2NyZWRzX2Zvcl9leGVjKCkgY2FsbCBpblxuZnMvZXhlYy5jOjE0ODE6XHQgKiBicHJtX2V4ZWN2ZSgpLiAgSW5kZWVkLCB0aGUga2VybmVsIHNob3VsZCBub3QgdHJ5IHRvIHBhcnNlIHRoZVxuZnMvZXhlYy5jLTE0ODItXHQgKiBjb250ZW50IG9mIHRoZSBmaWxlIHdpdGggZXhlY19iaW5wcm0oKSBub3IgY2hhbmdlIHRoZSBjYWxsaW5nXG4tLVxuZnMvZXhlYy5jPTE3MTQ9c3RhdGljIGludCBleGVjX2JpbnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbmZzL2V4ZWMuYy0xNzU4LVxuZnMvZXhlYy5jOjE3NTk6c3RhdGljIGludCBicHJtX2V4ZWN2ZShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuZnMvZXhlYy5jLTE3NjAte1xuLS1cbmZzL2V4ZWMuYz0xODEzPXN0YXRpYyBpbnQgZG9fZXhlY3ZlYXRfY29tbW9uKGludCBmZCwgc3RydWN0IGZpbGVuYW1lICpmaWxlbmFtZSxcbi0tXG5mcy9leGVjLmMtMTg4MC1cbmZzL2V4ZWMuYzoxODgxOlx0cmV0dXJuIGJwcm1fZXhlY3ZlKGJwcm0pO1xuZnMvZXhlYy5jLTE4ODItfVxuLS1cbmZzL2V4ZWMuYz0xODg0PWludCBrZXJuZWxfZXhlY3ZlKGNvbnN0IGNoYXIgKmtlcm5lbF9maWxlbmFtZSxcbi0tXG5mcy9leGVjLmMtMTkyNi1cbmZzL2V4ZWMuYzoxOTI3Olx0cmV0dXJuIGJwcm1fZXhlY3ZlKGJwcm0pO1xuZnMvZXhlYy5jLTE5MjgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY0MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipBbmFseXppbmcgYGRvX2V4ZWN2ZWF0X2NvbW1vbmAgYW5kIEl0cyBDYWxsZXJzKioKCk9rYXksIHNvIGBkb19leGVjdmVhdF9jb21tb25gIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nOyBpdCBtZWFucyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LCB3aGljaCBsaW1pdHMgaXRzIHNjb3BlIGFuZCBwb3RlbnRpYWwgcG9pbnRzIG9mIGludGVyYWN0aW9uLiBUaGF0JiMzOTtzIGdyZWF0IGZvciBjb2RlIG9yZ2FuaXphdGlvbiwgZ2VuZXJhbGx5IHNwZWFraW5nLCBidXQgaXQgbWVhbnMgSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2hlbiBmaWd1cmluZyBvdXQgaG93IGl0JiMzOTtzICphY3R1YWxseSogdXNlZCB3aXRoaW4gdGhlIHN5c3RlbS4KCk15IG5leHQgbW92ZSBpcyBjbGVhcjogSSBuZWVkIHRvIGlkZW50aWZ5IGFsbCB0aGUgcGxhY2VzIHdoZXJlIGBkb19leGVjdmVhdF9jb21tb25gIGlzIGNhbGxlZC4gRmluZGluZyB0aGUgY2FsbGVycyB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjb250ZXh0IOKAkyB0aGUgcmVhc29ucyBmb3IgaXRzIGludm9jYXRpb24sIHRoZSBkYXRhIGl0JiMzOTtzIHBhc3NlZCwgYW5kIHRoZSBvdmVyYWxsIGV4ZWN1dGlvbiBmbG93IGl0JiMzOTtzIGVtYmVkZGVkIHdpdGhpbi4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBleGVjdmVhdCBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjYWxsIGdyYXBoIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gSSBleHBlY3QgaXQmIzM5O3MgZ29pbmcgdG8gYmUgY2VudHJhbCB0byB0aGUgb3ZlcmFsbCBleGVjdmVhdCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX2V4ZWN2ZWF0X2NvbW1vbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4ZWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leGVjLmM9NDAzPXN0YXRpYyBpbnQgYnBybV9zdGFja19saW1pdHMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9leGVjLmMtNDM1LVx0ICogYXJnYyBjYW4gbmV2ZXIgYmUgMCwgdG8ga2VlcCB0aGVtIGZyb20gd2Fsa2luZyBlbnZwIGJ5IGFjY2lkZW50LlxuZnMvZXhlYy5jOjQzNjpcdCAqIFNlZSBkb19leGVjdmVhdF9jb21tb24oKS5cbmZzL2V4ZWMuYy00MzctXHQgKi9cbi0tXG5mcy9leGVjLmM9MTc1OT1zdGF0aWMgaW50IGJwcm1fZXhlY3ZlKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvZXhlYy5jLTE4MTItXG5mcy9leGVjLmM6MTgxMzpzdGF0aWMgaW50IGRvX2V4ZWN2ZWF0X2NvbW1vbihpbnQgZmQsIHN0cnVjdCBmaWxlbmFtZSAqZmlsZW5hbWUsXG5mcy9leGVjLmMtMTgxNC1cdFx0XHQgICAgICBzdHJ1Y3QgdXNlcl9hcmdfcHRyIGFyZ3YsXG4tLVxuZnMvZXhlYy5jPTE5NDg9U1lTQ0FMTF9ERUZJTkUzKGV4ZWN2ZSxcbi0tXG5mcy9leGVjLmMtMTk1My1cdENMQVNTKGZpbGVuYW1lLCBuYW1lKShmaWxlbmFtZSk7XG5mcy9leGVjLmM6MTk1NDpcdHJldHVybiBkb19leGVjdmVhdF9jb21tb24oQVRfRkRDV0QsIG5hbWUsXG5mcy9leGVjLmMtMTk1NS1cdFx0XHRcdCAgbmF0aXZlX2FyZyhhcmd2KSwgbmF0aXZlX2FyZyhlbnZwKSwgMCk7XG4tLVxuZnMvZXhlYy5jPTE5NTg9U1lTQ0FMTF9ERUZJTkU1KGV4ZWN2ZWF0LFxuLS1cbmZzL2V4ZWMuYy0xOTY0LVx0Q0xBU1MoZmlsZW5hbWVfdWZsYWdzLCBuYW1lKShmaWxlbmFtZSwgZmxhZ3MpO1xuZnMvZXhlYy5jOjE5NjU6XHRyZXR1cm4gZG9fZXhlY3ZlYXRfY29tbW9uKGZkLCBuYW1lLFxuZnMvZXhlYy5jLTE5NjYtXHRcdFx0XHQgIG5hdGl2ZV9hcmcoYXJndiksIG5hdGl2ZV9hcmcoZW52cCksIGZsYWdzKTtcbi0tXG5mcy9leGVjLmM9MTk3Nj1DT01QQVRfU1lTQ0FMTF9ERUZJTkUzKGV4ZWN2ZSwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsXG4tLVxuZnMvZXhlYy5jLTE5ODAtXHRDTEFTUyhmaWxlbmFtZSwgbmFtZSkoZmlsZW5hbWUpO1xuZnMvZXhlYy5jOjE5ODE6XHRyZXR1cm4gZG9fZXhlY3ZlYXRfY29tbW9uKEFUX0ZEQ1dELCBuYW1lLFxuZnMvZXhlYy5jLTE5ODItXHRcdFx0XHQgIGNvbXBhdF9hcmcoYXJndiksIGNvbXBhdF9hcmcoZW52cCksIDApO1xuLS1cbmZzL2V4ZWMuYz0xOTg1PUNPTVBBVF9TWVNDQUxMX0RFRklORTUoZXhlY3ZlYXQsIGludCwgZmQsXG4tLVxuZnMvZXhlYy5jLTE5OTEtXHRDTEFTUyhmaWxlbmFtZV91ZmxhZ3MsIG5hbWUpKGZpbGVuYW1lLCBmbGFncyk7XG5mcy9leGVjLmM6MTk5MjpcdHJldHVybiBkb19leGVjdmVhdF9jb21tb24oZmQsIG5hbWUsXG5mcy9leGVjLmMtMTk5My1cdFx0XHRcdCAgY29tcGF0X2FyZyhhcmd2KSwgY29tcGF0X2FyZyhlbnZwKSwgZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU4NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBGdXRleGVzIGFuZCBFeGVjdXRpb24qKgoKT2theSwgc28gYGRvX2V4ZWN2ZWF0X2NvbW1vbmAgaXMgdGhlIHdvcmtob3JzZSBiZWhpbmQgYm90aCBgZXhlY3ZlYCBhbmQgYGV4ZWN2ZWF0YC4gVGhhdCYjMzk7cyBnb29kLCBpdCBzaW1wbGlmaWVzIHRoaW5ncy4gU3l6a2FsbGVyIHdpbGwgaGFuZGxlIGZ1enppbmcgdGhvc2Ugc3lzdGVtIGNhbGxzIGRpcmVjdGx5LCBzbyBJIGRvbiYjMzk7dCBuZWVkIHRvIGV4cGxpY2l0bHkgdGFyZ2V0IHRoZSBjb21tb24gZnVuY3Rpb24uIEl0IG1ha2VzIHNlbnNlLCBmb2N1c2luZyBvbiB0aGUgaGlnaGVyIGxldmVsIGNhbGxzIHdpbGwgYmUgbW9yZSBlZmZpY2llbnQgZm9yIGlkZW50aWZ5aW5nIHZ1bG5lcmFiaWxpdGllcy4KCk15IGF0dGVudGlvbiBub3cgbmVlZHMgdG8gc2hpZnQgdG8gdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIGZ1dGV4IGFuZCBleGVjdXRpb24gcHJvY2Vzcy4gSSBzaG91bGQgcmVhbGx5IGZvY3VzIG9uIGBmdXRleF9sb2NrX3BpYCwgYGZ1dGV4X3dhaXRfcmVxdWV1ZV9waWAsIGBmdXRleF9yZXF1ZXVlYCwgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbmAsIGBmdXRleF9leGVjX3JlbGVhc2VfZW5kYCwgYW5kIGBleGVjX21tX3JlbGVhc2VgLiBUaGVzZSBmdW5jdGlvbnMgcHJvYmFibHkgaGF2ZSBhIHJvbGUgaW4gdGhlIGNvcnJlY3Qgc3luY2hyb25pemF0aW9uIG9mIHNoYXJlZCBtZW1vcnkgYXJlYXMsIGFuZCBjb250ZXh0IHN3aXRjaGluZywgYXJvdW5kIHByb2Nlc3MgZXhlY3V0aW9uLgoKV2FpdCBhIHNlY29uZC4uLiBhcmVuJiMzOTt0IGBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5gIGFuZCBgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZGAgbm90IHN0YXRpYz8gVGhleSYjMzk7cmUgZ2xvYmFsLCBvciBhdCBsZWFzdCBleHBvcnRlZC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgbWVhbnMgdGhleSBtaWdodCBiZSB1c2VkIGV4dGVybmFsbHkuIE5lZWQgdG8gY2hlY2sgaW4gYGtlcm5lbC9mdXRleC9jb3JlLmNgIGZvciBtb3JlIGluZm8uIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRldGFpbHMgb2YgdGhlaXIgaW50ZW5kZWQgdXNlLCBhbmQgaWYgdGhleSByZXByZXNlbnQgYSBwb3NzaWJsZSBhdHRhY2sgdmVjdG9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmM9MTUyNz1zdGF0aWMgdm9pZCBmdXRleF9jbGVhbnVwX2VuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHN0YXRlKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTU0MS1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTU0Mjp2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTU0My1cdF9fYWNxdWlyZXMoXHUwMDI2dHNrLVx1MDAzZWZ1dGV4LmV4aXRfbXV0ZXgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjE2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyBGdXRleCBGdW5jdGlvbnMgZm9yIFBvdGVudGlhbCBJc3N1ZXMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdXRleCBmdW5jdGlvbnM6IGBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5gLCBgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZGAsIGBmdXRleF9sb2NrX3BpYCwgYGZ1dGV4X3dhaXRfcmVxdWV1ZV9waWAsIGFuZCBgZnV0ZXhfcmVxdWV1ZWAuIFRoZXkmIzM5O3JlIGFsbCBnbG9iYWwsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHRoZW0gYXMgcG90ZW50aWFsIHBvaW50cyBvZiBjb250ZW50aW9uIGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyYWN0IGFuZCB3aGVyZSB0aGV5JiMzOTtyZSB1c2VkLiBgZnV0ZXhfcmVxdWV1ZWAgc2VlbXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCBzbyBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBpdHMgaW1wbGVtZW50YXRpb24uIFRoZSBmaWxlIHRvIGxvb2sgYXQgaXMgYGtlcm5lbC9mdXRleC9yZXF1ZXVlLmNgLiBJIG5lZWQgdG8gcmV2aWV3IGl0cyBsb2dpYywgcGFydGljdWxhcmx5IGFueSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBmdXRleCBmdW5jdGlvbnMsIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2sgcG9zc2liaWxpdGllcywgb3Igb3RoZXIgY29uY3VycmVuY3kgaXNzdWVzIGx1cmtpbmcgd2l0aGluLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGdldCBhIGdvb2QgZ3Jhc3Agb2YgdGhlIHJlLXF1ZXVlIGZ1bmN0aW9uYWxpdHkgYW5kIGl0cyByb2xlIGluIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnV0ZXhfcmVxdWV1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9yZXF1ZXVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L3JlcXVldWUuYz03Nj12b2lkIHJlcXVldWVfZnV0ZXgoc3RydWN0IGZ1dGV4X3EgKnEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIxLFxuLS1cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtOTgtXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjk5OnN0YXRpYyBpbmxpbmUgYm9vbCBmdXRleF9yZXF1ZXVlX3BpX3ByZXBhcmUoc3RydWN0IGZ1dGV4X3EgKnEsXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTEwMC1cdFx0XHRcdFx0ICAgIHN0cnVjdCBmdXRleF9waV9zdGF0ZSAqcGlfc3RhdGUpXG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0xMzEtXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjEzMjpzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfcmVxdWV1ZV9waV9jb21wbGV0ZShzdHJ1Y3QgZnV0ZXhfcSAqcSwgaW50IGxvY2tlZClcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMTMzLXtcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTE2Mi1cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MTYzOnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X3JlcXVldWVfcGlfd2FrZXVwX3N5bmMoc3RydWN0IGZ1dGV4X3EgKnEpXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTE2NC17XG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0yMDYtICpcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MjA3OiAqIER1cmluZyBmdXRleF9yZXF1ZXVlLCB3aXRoIHJlcXVldWVfcGk9MSwgaXQgaXMgcG9zc2libGUgdG8gYWNxdWlyZSB0aGVcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMjA4LSAqIHRhcmdldCBmdXRleCBpZiBpdCBpcyB1bmNvbnRlbmRlZCBvciB2aWEgYSBsb2NrIHN0ZWFsLlxuLS1cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM9MjMwPXZvaWQgcmVxdWV1ZV9waV93YWtlX2Z1dGV4KHN0cnVjdCBmdXRleF9xICpxLCB1bmlvbiBmdXRleF9rZXkgKmtleSxcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTI0OS1cdC8qIFNpZ25hbCBsb2NrZWQgc3RhdGUgdG8gdGhlIHdhaXRlciAqL1xua2VybmVsL2Z1dGV4L3JlcXVldWUuYzoyNTA6XHRmdXRleF9yZXF1ZXVlX3BpX2NvbXBsZXRlKHEsIDEpO1xua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0yNTEtXHR3YWtlX3VwX3N0YXRlKHRhc2ssIFRBU0tfTk9STUFMKTtcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTI4MT1mdXRleF9wcm94eV90cnlsb2NrX2F0b21pYyh1MzIgX191c2VyICpwaWZ1dGV4LCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMSxcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTMyMS1cdC8qIEVuc3VyZSB0aGF0IHRoaXMgZG9lcyBub3QgcmFjZSBhZ2FpbnN0IGFuIGVhcmx5IHdha2V1cCAqL1xua2VybmVsL2Z1dGV4L3JlcXVldWUuYzozMjI6XHRpZiAoIWZ1dGV4X3JlcXVldWVfcGlfcHJlcGFyZSh0b3Bfd2FpdGVyLCBOVUxMKSkge1xua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zMjMtXHRcdHBsaXN0X2RlbChcdTAwMjZ0b3Bfd2FpdGVyLVx1MDAzZWxpc3QsIFx1MDAyNmhiMS1cdTAwM2VjaGFpbik7XG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zNDctXHRcdC8qIFJld2luZCB0b3Bfd2FpdGVyOjpyZXF1ZXVlX3N0YXRlICovXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjM0ODpcdFx0ZnV0ZXhfcmVxdWV1ZV9waV9jb21wbGV0ZSh0b3Bfd2FpdGVyLCByZXQpO1xua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zNDktXHR9IGVsc2Uge1xuLS1cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMzYzLS8qKlxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzozNjQ6ICogZnV0ZXhfcmVxdWV1ZSgpIC0gUmVxdWV1ZSB3YWl0ZXJzIGZyb20gdWFkZHIxIHRvIHVhZGRyMlxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zNjUtICogQHVhZGRyMTpcdHNvdXJjZSBmdXRleCB1c2VyIGFkZHJlc3Ncbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTM4MS0gKi9cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MzgyOmludCBmdXRleF9yZXF1ZXVlKHUzMiBfX3VzZXIgKnVhZGRyMSwgdW5zaWduZWQgaW50IGZsYWdzMSxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMzgzLVx0XHQgIHUzMiBfX3VzZXIgKnVhZGRyMiwgdW5zaWduZWQgaW50IGZsYWdzMixcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTQxMi1cdFx0Lypcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6NDEzOlx0XHQgKiBmdXRleF9yZXF1ZXVlKCkgYWxsb3dzIHRoZSBjYWxsZXIgdG8gZGVmaW5lIHRoZSBudW1iZXJcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtNDE0LVx0XHQgKiBvZiB3YWl0ZXJzIHRvIHdha2UgdXAgdmlhIHRoZSBAbnJfd2FrZSBhcmd1bWVudC4gV2l0aFxuLS1cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtNjM3LVx0XHRcdC8qIERvbiYjMzk7dCByZXF1ZXVlIHdoZW4gdGhlIHdhaXRlciBpcyBhbHJlYWR5IG9uIHRoZSB3YXkgb3V0LiAqL1xua2VybmVsL2Z1dGV4L3JlcXVldWUuYzo2Mzg6XHRcdFx0aWYgKCFmdXRleF9yZXF1ZXVlX3BpX3ByZXBhcmUodGhpcywgcGlfc3RhdGUpKSB7XG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTYzOS1cdFx0XHRcdC8qXG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy02NjUtXHRcdFx0XHRyZXF1ZXVlX2Z1dGV4KHRoaXMsIGhiMSwgaGIyLCBcdTAwMjZrZXkyKTtcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6NjY2Olx0XHRcdFx0ZnV0ZXhfcmVxdWV1ZV9waV9jb21wbGV0ZSh0aGlzLCAwKTtcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtNjY3LVx0XHRcdFx0dGFza19jb3VudCYjNDM7JiM0Mzs7XG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy02NzctXHRcdFx0XHRwdXRfcGlfc3RhdGUocGlfc3RhdGUpO1xua2VybmVsL2Z1dGV4L3JlcXVldWUuYzo2Nzg6XHRcdFx0XHRmdXRleF9yZXF1ZXVlX3BpX2NvbXBsZXRlKHRoaXMsIHJldCk7XG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTY3OS1cdFx0XHRcdC8qXG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYz03MTM9aW50IGhhbmRsZV9lYXJseV9yZXF1ZXVlX3BpX3dha2V1cChzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxuLS1cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtNzU1LSAqXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjc1NjogKiBUaGUgY2FsbGVyIHdpbGwgd2FpdCBvbiB1YWRkciBhbmQgd2lsbCBiZSByZXF1ZXVlZCBieSBmdXRleF9yZXF1ZXVlKCkgdG9cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtNzU3LSAqIHVhZGRyMiB3aGljaCBtdXN0IGJlIFBJIGF3YXJlIGFuZCB1bmlxdWUgZnJvbSB1YWRkci4gIE5vcm1hbCB3YWtldXAgd2lsbCB3YWtlXG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy03NjQtICogdmlhIHRoZSBmb2xsb3dpbmctLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzo3NjU6ICogMSkgd2FrZXVwIG9uIHVhZGRyMiBhZnRlciBhbiBhdG9taWMgbG9jayBhY3F1aXNpdGlvbiBieSBmdXRleF9yZXF1ZXVlKClcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtNzY2LSAqIDIpIHdha2V1cCBvbiB1YWRkcjIgYWZ0ZXIgYSByZXF1ZXVlXG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYz03ODY9aW50IGZ1dGV4X3dhaXRfcmVxdWV1ZV9waSh1MzIgX191c2VyICp1YWRkciwgdW5zaWduZWQgaW50IGZsYWdzLFxuLS1cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtODMzLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzo4MzQ6XHRzd2l0Y2ggKGZ1dGV4X3JlcXVldWVfcGlfd2FrZXVwX3N5bmMoXHUwMDI2cSkpIHtcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtODM1LVx0Y2FzZSBRX1JFUVVFVUVfUElfSUdOT1JFOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODEwMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRnV0ZXggYW5kIFByb2Nlc3MgSW5oZXJpdGFuY2UgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBgZnV0ZXhfcmVxdWV1ZWAsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIGdsb2JhbCBzeW1ib2wuIExldCYjMzk7cyBkaWcgaW50byB0aGUgZXhlY3V0aW9uIHBhdGggYSBiaXQgZGVlcGVyLCBzdGFydGluZyB3aXRoIGBleGVjX21tYXBgIGluIGBmcy9leGVjLmNgLiBJJiMzOTtsbCB3YW50IHRvIHRyYWNlIGhvdyBmdXRleGVzIGFyZSBtYW5hZ2VkIGR1cmluZyBhbiBgZXhlY2AuIEl0JiMzOTtzIHN0YXRpYywgc28gdGhhdCBuYXJyb3dzIHRoZSBzY29wZSBvZiB0aGUgc2VhcmNoIGEgYml0LiBUaGUga2V5IGZ1bmN0aW9ucyB0byBleGFtaW5lIHdpdGhpbiB0aGF0IGNvbnRleHQgYXJlIGBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5gIGFuZCBgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZGAuCgpUaGF0IG1lYW5zIG15IG1haW4gZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlc2Ugc3BlY2lmaWMgc3ltYm9scyBmb3IgdGhlIGNvZGUgZGl2ZToKKiAgIGBmdXRleF9sb2NrX3BpYAoqICAgYGZ1dGV4X3dhaXRfcmVxdWV1ZV9waWAKKiAgIGBmdXRleF9yZXF1ZXVlYAoqICAgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbmAKKiAgIGBmdXRleF9leGVjX3JlbGVhc2VfZW5kYAoKTm93LCByZWdhcmRpbmcgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhcmUgb2J2aW91c2x5IGBGVVRFWGAsIGBGVVRFWF9QSWAsIGFuZCBgUlRfTVVURVhFU2AuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYEtjb25maWdgIGZvciBgRlVURVhfUElgLiBJdCBkZXBlbmRzIG9uIGJvdGggYEZVVEVYYCBhbmQgYFJUX01VVEVYRVNgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBib3RoIG9mIHRob3NlIGFyZSBlbmFibGVkLiBBaCwgd2FpdCwgaG9sZCBvbi4gYEZVVEVYX1BJYCBpcyBhIGhpZGRlbiBjb25maWc7IGl0IGRvZXNuJiMzOTt0IGV2ZW4gaGF2ZSBhIHByb21wdC4gSXQgZGVmYXVsdHMgdG8gJiMzOTt5JiMzOTsgaWYgYm90aCBgRlVURVhgIGFuZCBgUlRfTVVURVhFU2AgYXJlIGVuYWJsZWQuIFNvLCB0byBiZSBjbGVhciwgZW5hYmxpbmcgKm9ubHkqIGBGVVRFWGAgYW5kIGBSVF9NVVRFWEVTYCBpcyB0aGUgcmVhbCB0YXJnZXQuIExldCYjMzk7cyBtYWtlIHN1cmUgYFJUX01VVEVYRVNgIGlzIGNvbmZpZ3VyYWJsZSwganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSVF9NVVRFWEVTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL0tjb25maWcubG9ja3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgzNQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbi4gTXkgZ29hbCBpcyB0byBmaW5kIHdoZXJlIHRoZSBgUlRfTVVURVhFU2Agc2V0dGluZyBpcyBkZWZpbmVkIGFuZCB1c2VkLiBJJiMzOTtsbCBuZWVkIHRvIHNlYXJjaCB0aGUgZW50aXJlIHNvdXJjZSB0cmVlIGZvciBvY2N1cnJlbmNlcyBvZiB0aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIG15IHNlYXJjaCB0b29scyBhbmQgc3RhcnQgd2l0aCBhIGJyb2FkIGFwcHJvYWNoLCBlbnN1cmluZyBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nLiBMZXQmIzM5O3MgZ2V0IGNyYWNraW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUlRfTVVURVhFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MjI2ND1zb3VyY2UgXCYjMzQ7YXJjaC9LY29uZmlnXCYjMzQ7XG5pbml0L0tjb25maWctMjI2NS1cbmluaXQvS2NvbmZpZzoyMjY2OmNvbmZpZyBSVF9NVVRFWEVTXG5pbml0L0tjb25maWctMjI2Ny1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwNjcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipOYXZpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpSaWdodCwgc28gdGhlIGlzc3VlIHNlZW1zIHRvIGJlIGNvbmZpZ3VyYXRpb24tcmVsYXRlZC4gTXkgaW5pdGlhbCBpbnR1aXRpb24gcG9pbnRzIG1lIHRvd2FyZHMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBmaWxlcywgYW5kLCBiYXNlZCBvbiBleHBlcmllbmNlLCBteSBtb25leSYjMzk7cyBvbiB0aGUgYGluaXQvS2NvbmZpZ2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGdvLXRvIHNwb3QgZm9yIGluaXRpYWxpemluZyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3MgZGl2ZSBpbiBhbmQgdGFrZSBhIGxvb2sgYXQgd2hhdCYjMzk7cyBkZWZpbmVkIGluIHRoZXJlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSByZWxldmFudCBvcHRpb24gZGVmaW5pdGlvbiBvciBhIGxpa2VseSBpbmNsdWRlIGZpbGUgcmVsYXRlZCB0byBteSBwcm9ibGVtLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb25maWd1cmF0aW9uIGtleSBpcyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNjYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI2NjpcdGNvbmZpZyBSVF9NVVRFWEVTXG4yMjY3Olx0XHRib29sXG4yMjY4Olx0XHRkZWZhdWx0IHkgaWYgUFJFRU1QVF9SVFxuMjI2OTpcdFxuMjI3MDpcdGNvbmZpZyBNT0RVTEVfU0lHX0ZPUk1BVFxuMjI3MTpcdFx0ZGVmX2Jvb2wgblxuMjI3MjpcdFx0c2VsZWN0IFNZU1RFTV9EQVRBX1ZFUklGSUNBVElPTlxuMjI3MzpcdFxuMjI3NDpcdHNvdXJjZSBcJiMzNDtrZXJuZWwvbW9kdWxlL0tjb25maWdcJiMzNDtcbjIyNzU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkzNzQKCQkJCQkJCW91dHB1dDogMjE2CgkJCQkJCQl0aG91Z2h0czogNjg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBTeW5jaHJvbml6YXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBSVF9NVVRFWEVTYCBpcyBhIGhpZGRlbiBjb25maWcsIGJ1dCBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQgaWYgYFBSRUVNUFRfUlRgIGlzIGVuYWJsZWQuIEltcG9ydGFudGx5LCBgRlVURVhgICppbXBsaWVzKiBgUlRfTVVURVhFU2AsIHdoaWNoIGlzIGdyZWF0LCBtZWFuaW5nIHdlIGRvbiYjMzk7dCBoYXZlIHRvIHdvcnJ5IGFib3V0IGVuYWJsaW5nIGBSVF9NVVRFWEVTYCBleHBsaWNpdGx5LiBTaW5jZSBgUlRfTVVURVhFU2AgaXMgaGlkZGVuLCB3ZSBjYW4mIzM5O3QgZGlyZWN0bHkgZW5hYmxlIGl0IGluIEtjb25maWcsIGJ1dCB0aGUgYGltcGx5YCBkaXJlY3RpdmUgdGFrZXMgY2FyZSBvZiBpdCB3aGVuIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBGVVRFWGAgYXJlIG1ldC4KCkkgc2VlIGBGVVRFWGAgaGFzIGJlZW4gZW5hYmxlZCwgYXMgdGhlIGBkZWZhdWx0IHlgIGxpbmUgaW1wbGllcy4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIE5vdywgbGV0JiMzOTtzIGtlZXAgYW4gZXllIG91dCBmb3IgYEZVVEVYX1BJYCBiZWNhdXNlLCB3ZWxsLCBldmVuIHRob3VnaCBpdCYjMzk7cyBoaWRkZW4sIGFuZCBkZWZhdWx0cyB0byBgeWAgaWYgYEZVVEVYYCBhbmQgYFJUX01VVEVYRVNgIGFyZSBlbmFibGVkLCB3ZSBtaWdodCBuZWVkIGl0LgoKTG9va2luZyBhdCB0aGUgY29kZSwgYENPTkZJR19NTVVgIGlzIGFsc28gaW52b2x2ZWQsIGFuZCB0aGF0JiMzOTtzIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0IG9uIG1vc3QgYXJjaGl0ZWN0dXJlcy4KClRoZSBwYXRjaCBpdHNlbGYgaXMgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIHNwbGl0dGluZyBgZnV0ZXhfZXhlY19yZWxlYXNlYCBpbnRvIGBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5gIGFuZCBgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZGAuIFRoZSBjb250ZXh0IGlzIGZpeGluZyBhIHJhY2UgY29uZGl0aW9uIHdoZW4gYSBmdXRleCBQSSBvd25lciBpcyBleGVjdXRpbmcuIFNwZWNpZmljYWxseSwgYSB0YXNrIHRyaWVzIHRvIGF0dGFjaCB0byB0aGUgUEkgb3duZXIuIFRoZSBrZXkgcGFydCBpcyB0aGUgY2hlY2sgaW4gYGF0dGFjaF90b19waV9vd25lcmAgdG8gbWFrZSBzdXJlIHRoZSB0YXNrJiMzOTtzIGBtbWAgaGFzbiYjMzk7dCBjaGFuZ2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIGFuZCBwcm9jZXNzIGV4ZWN1dGlvbi4KClNvLCB0aGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBgYXR0YWNoX3RvX3BpX293bmVyYCBmdW5jdGlvbiB0byBmaXggYSByYWNlIGNvbmRpdGlvbi4gVGhlIHByaW1hcnkgZm9jdXMgb2YgdGhpcyBjaGFuZ2UgaXMgdG8gcHJldmVudCBpc3N1ZXMgd2l0aCBmdXRleCBQSSBvd25lciBleGVjaW5nLiBJdCYjMzk7cyB0b3VjaGluZyBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gYW5kIHByb2Nlc3MgZXhlY3V0aW9uIGxvZ2ljLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKTXkgZm9jdXMgc3ltYm9scywgdGhlbiwgc2hvdWxkIGJlOiBgZnV0ZXhfbG9ja19waWAsIGBmdXRleF93YWl0X3JlcXVldWVfcGlgLCBgZnV0ZXhfcmVxdWV1ZWAsIGBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5gLCBhbmQgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRgLgoKRm9yIGNvbmZpZ3VyYXRpb24sIEkgc2hvdWxkIGVuc3VyZSBgRlVURVhgIGlzIGVuYWJsZWQgYmVjYXVzZSBpdCYjMzk7cyByZXF1aXJlZC4gQW5kIGJ5IGltcGxpY2F0aW9uLCB0aGF0IGFsc28gY292ZXJzIGBSVF9NVVRFWEVTYCBhbmQgYEZVVEVYX1BJYCwgc28gSSBkb24mIzM5O3QgbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSB0aGUgbGFzdCB0d28uIE5vdywgSSYjMzk7bSByZWFkeSB0byB1c2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYJiMzNDssCiAgICAmIzM0O0ZVVEVYX1BJJiMzNDssCiAgICAmIzM0O1JUX01VVEVYRVMmIzM0OywKICAgICYjMzQ7TU1VJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnV0ZXhfbG9ja19waSYjMzQ7LAogICAgJiMzNDtmdXRleF93YWl0X3JlcXVldWVfcGkmIzM0OywKICAgICYjMzQ7ZnV0ZXhfcmVxdWV1ZSYjMzQ7LAogICAgJiMzNDtmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4mIzM0OywKICAgICYjMzQ7ZnV0ZXhfZXhlY19yZWxlYXNlX2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gYSBmdXRleCBQSSBvd25lciBleGVjaW5nIGFuZCBhbm90aGVyIHRhc2sgdHJ5aW5nIHRvIGF0dGFjaCB0byB0aGUgUEkgb3duZXIuIEl0IHNwbGl0cyBgZnV0ZXhfZXhlY19yZWxlYXNlYCBpbnRvIHR3byBwaGFzZXMgKGBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5gIGFuZCBgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZGApIGFuZCBhZGRzIGEgY2hlY2sgaW4gYGF0dGFjaF90b19waV9vd25lcmAgdG8gdmVyaWZ5IHRoZSB0YXNrJiMzOTtzIGBtbWAgaGFzbiYjMzk7dCBjaGFuZ2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIGFuZCBwcm9jZXNzIGV4ZWN1dGlvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGVVRFWCYjMzQ7LAogICAgJiMzNDtGVVRFWF9QSSYjMzQ7LAogICAgJiMzNDtSVF9NVVRFWEVTJiMzNDssCiAgICAmIzM0O01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2xvY2tfcGkmIzM0OywKICAgICYjMzQ7ZnV0ZXhfd2FpdF9yZXF1ZXVlX3BpJiMzNDssCiAgICAmIzM0O2Z1dGV4X3JlcXVldWUmIzM0OywKICAgICYjMzQ7ZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luJiMzNDssCiAgICAmIzM0O2Z1dGV4X2V4ZWNfcmVsZWFzZV9lbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGEgZnV0ZXggUEkgb3duZXIgZXhlY2luZyBhbmQgYW5vdGhlciB0YXNrIHRyeWluZyB0byBhdHRhY2ggdG8gdGhlIFBJIG93bmVyLiBJdCBzcGxpdHMgYGZ1dGV4X2V4ZWNfcmVsZWFzZWAgaW50byB0d28gcGhhc2VzIChgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luYCBhbmQgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRgKSBhbmQgYWRkcyBhIGNoZWNrIGluIGBhdHRhY2hfdG9fcGlfb3duZXJgIHRvIHZlcmlmeSB0aGUgdGFzayYjMzk7cyBgbW1gIGhhc24mIzM5O3QgY2hhbmdlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBhbmQgcHJvY2VzcyBleGVjdXRpb24gbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDA6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMDo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpc3N1ZSByZWxhdGVkIHRvIGZ1dGV4ZXMgYW5kIGBleGVjdmVgLiBJdCBzcGxpdHMgYGZ1dGV4X2V4ZWNfcmVsZWFzZWAgaW50byBhIGJlZ2luL2VuZCBwYWlyIHRvIGhvbGQgdGhlIGBleGl0X211dGV4YCBhY3Jvc3MgdGhlIGBtbWAgcmVwbGFjZW1lbnQgaW4gYGV4ZWNfbW1hcGAsIGFuZCBhZGRzIGEgY2hlY2sgaW4gYGF0dGFjaF90b19waV9vd25lcmAgdG8gZW5zdXJlIHRoZSB0YXNrJiMzOTtzIGBtbWAgbWF0Y2hlcyB0aGUgZnV0ZXgga2V5JiMzOTtzIGBtbWAuIFRoZXNlIGNoYW5nZXMgcHJldmVudCByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGJ1Z3MgZHVyaW5nIGV4ZWMuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgdGhlIGJ1Z3MgdGhpcyBwYXRjaCBhaW1zIHRvIGZpeC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzIzYTc4ZjI2ODY4MmY2NjQ3NWI1ZDkyNTVmNWNlMGQ2ZmQwOGUzMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDAwOjUyOjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IGM3YjhmMmQ2MzY2YzQuLjQyZWI5OGZiZDEyNTkgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leGVjLmMKQEAgLTY1LDYgJiM0Mzs2NSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaW9fdXJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb3JlZHVtcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9mdXRleC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3RpbWVfbmFtZXNwYWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdXNlcl9ldmVudHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yc2VxLmgmZ3Q7CkBAIC04NTcsOCAmIzQzOzg1OCwxMCBAQCBzdGF0aWMgaW50IGV4ZWNfbW1hcChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQogCWV4ZWNfbW1fcmVsZWFzZSh0c2ssIG9sZF9tbSk7CiAKIAlyZXQgPSBkb3duX3dyaXRlX2tpbGxhYmxlKCZhbXA7dHNrLSZndDtzaWduYWwtJmd0O2V4ZWNfdXBkYXRlX2xvY2spOwotCWlmIChyZXQpCiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmQodHNrKTsKIAkJcmV0dXJuIHJldDsKJiM0MzsJfQogCiAJaWYgKG9sZF9tbSkgewogCQkvKgpAQCAtODY5LDYgJiM0Mzs4NzIsNyBAQCBzdGF0aWMgaW50IGV4ZWNfbW1hcChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQogCQlyZXQgPSBtbWFwX3JlYWRfbG9ja19raWxsYWJsZShvbGRfbW0pOwogCQlpZiAocmV0KSB7CiAJCQl1cF93cml0ZSgmYW1wO3Rzay0mZ3Q7c2lnbmFsLSZndDtleGVjX3VwZGF0ZV9sb2NrKTsKJiM0MzsJCQlmdXRleF9leGVjX3JlbGVhc2VfZW5kKHRzayk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQpAQCAtODk2LDYgJiM0Mzs5MDAsNyBAQCBzdGF0aWMgaW50IGV4ZWNfbW1hcChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJbHJ1X2dlbl9hZGRfbW0obW0pOwogCXRhc2tfdW5sb2NrKHRzayk7CiYjNDM7CWZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmQodHNrKTsKIAlscnVfZ2VuX3VzZV9tbShtbSk7CiAJaWYgKG9sZF9tbSkgewogCQltbWFwX3JlYWRfdW5sb2NrKG9sZF9tbSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z1dGV4LmggYi9pbmNsdWRlL2xpbnV4L2Z1dGV4LmgKaW5kZXggNTFmNGNjZGM5MDkyNy4uMzI0ZjQ5NDkzY2JiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mdXRleC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnV0ZXguaApAQCAtNzIsNyAmIzQzOzcyLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiAKIHZvaWQgZnV0ZXhfZXhpdF9yZWN1cnNpdmUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwogdm9pZCBmdXRleF9leGl0X3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwotdm9pZCBmdXRleF9leGVjX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwomIzQzO3ZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQomIzQzOwlfX2FjcXVpcmVzKCZhbXA7dHNrLSZndDtmdXRleC5leGl0X211dGV4KTsKJiM0Mzt2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiYjNDM7CV9fcmVsZWFzZXMoJmFtcDt0c2stJmd0O2Z1dGV4LmV4aXRfbXV0ZXgpOwogCiBsb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsCiAJICAgICAgdTMyIF9fdXNlciAqdWFkZHIyLCB1MzIgdmFsMiwgdTMyIHZhbDMpOwpAQCAtOTAsNyAmIzQzOzkzLDggQEAgc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9leGl0X3JlY3Vyc2l2ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhpdF9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9leGVjX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9leGVjX3JlbGVhc2VfZW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH0KIHN0YXRpYyBpbmxpbmUgbG9uZyBkb19mdXRleCh1MzIgX191c2VyICp1YWRkciwgaW50IG9wLCB1MzIgdmFsLCBrdGltZV90ICp0aW1lb3V0LAogCQkJICAgIHUzMiBfX3VzZXIgKnVhZGRyMiwgdTMyIHZhbDIsIHUzMiB2YWwzKQogewpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggZjBlMmUxMzFhOWE1YS4uZDI3MzZiMjRmZjc1MiAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZm9yay5jCkBAIC0xNTEwLDcgJiM0MzsxNTEwLDcgQEAgdm9pZCBleGl0X21tX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCiB2b2lkIGV4ZWNfbW1fcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7Ci0JZnV0ZXhfZXhlY19yZWxlYXNlKHRzayk7CiYjNDM7CWZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbih0c2spOwogCW1tX3JlbGVhc2UodHNrLCBtbSk7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC9jb3JlLmMgYi9rZXJuZWwvZnV0ZXgvY29yZS5jCmluZGV4IDEyOGM1NzUyZjIyNWMuLmE5MjBkZmJkMDM5MGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2Z1dGV4L2NvcmUuYwpAQCAtMTUzOSw3ICYjNDM7MTUzOSw4IEBAIHN0YXRpYyB2b2lkIGZ1dGV4X2NsZWFudXBfZW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgc3RhdGUpCiAJbXV0ZXhfdW5sb2NrKCZhbXA7dHNrLSZndDtmdXRleC5leGl0X211dGV4KTsKIH0KIAotdm9pZCBmdXRleF9leGVjX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiYjNDM7dm9pZCBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiYjNDM7CV9fYWNxdWlyZXMoJmFtcDt0c2stJmd0O2Z1dGV4LmV4aXRfbXV0ZXgpCiB7CiAJLyoKIAkgKiBUaGUgc3RhdGUgaGFuZGxpbmcgaXMgZG9uZSBmb3IgY29uc2lzdGVuY3ksIGJ1dCBpbiB0aGUgY2FzZSBvZgpAQCAtMTU1MCw2ICYjNDM7MTU1MSwxMSBAQCB2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIAkgKi8KIAlmdXRleF9jbGVhbnVwX2JlZ2luKHRzayk7CiAJZnV0ZXhfY2xlYW51cCh0c2spOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiYjNDM7CV9fcmVsZWFzZXMoJmFtcDt0c2stJmd0O2Z1dGV4LmV4aXRfbXV0ZXgpCiYjNDM7ewogCS8qCiAJICogUmVzZXQgdGhlIHN0YXRlIHRvIEZVVEVYX1NUQVRFX09LLiBUaGUgdGFzayBpcyBhbGl2ZSBhbmQgYWJvdXQKIAkgKiBleGVjIGEgbmV3IGJpbmFyeS4KZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC9waS5jIGIva2VybmVsL2Z1dGV4L3BpLmMKaW5kZXggNzk1MDExZWExMjAyZi4uZDk3NjExMTk2YjM0YSAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4L3BpLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2Z1dGV4L3BpLmMKQEAgLTQ2NSw2ICYjNDM7NDY1LDEzIEBAIHN0YXRpYyBpbnQgYXR0YWNoX3RvX3BpX293bmVyKHUzMiBfX3VzZXIgKnVhZGRyLCB1MzIgdXZhbCwgdW5pb24gZnV0ZXhfa2V5ICprZXksCiAJCXJldHVybiByZXQ7CiAJfQogCiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19NTVUpICZhbXA7JmFtcDsgZnV0ZXhfa2V5X2lzX3ByaXZhdGUoa2V5KSAmYW1wOyZhbXA7CiYjNDM7CSAgICBSRUFEX09OQ0UocC0mZ3Q7bW0pICE9IGtleS0mZ3Q7cHJpdmF0ZS5tbSkgewomIzQzOwkJcmF3X3NwaW5fdW5sb2NrX2lycSgmYW1wO3AtJmd0O3BpX2xvY2spOwomIzQzOwkJcHV0X3Rhc2tfc3RydWN0KHApOwomIzQzOwkJcmV0dXJuIC1FU1JDSDsKJiM0MzsJfQomIzQzOwogCV9fYXR0YWNoX3RvX3BpX293bmVyKHAsIGtleSwgcHMpOwogCXJhd19zcGluX3VubG9ja19pcnEoJmFtcDtwLSZndDtwaV9sb2NrKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwNwoJCQkJCQkJb3V0cHV0OiAxNzQKCQkJCQkJCXRob3VnaHRzOiA2NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXRleCBhbmQgRXhlY3ZlIFN5bmNocm9uaXphdGlvbiBGaXgqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCYjMzk7cyB0YWNrbGluZyBhIGNvbmN1cnJlbmN5IGlzc3VlLCBsaWtlbHkgYSByYWNlIGNvbmRpdGlvbiBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8sIGluIHRoZSBmdXRleCBpbXBsZW1lbnRhdGlvbiByZWxhdGVkIHRvIGBleGVjdmVgLiBUaGUgY2hhbmdlcyBhcmUgY29uY2VudHJhdGVkIGluIGBmcy9leGVjLmNgLCBgaW5jbHVkZS9saW51eC9mdXRleC5oYCwgYGtlcm5lbC9mb3JrLmNgLCBga2VybmVsL2Z1dGV4L2NvcmUuY2AsIGFuZCBga2VybmVsL2Z1dGV4L3BpLmNgLCBzbyBpdCYjMzk7cyBhbGwgcmlnaHQgd2hlcmUgSSYjMzk7ZCBleHBlY3QgaXQgdG8gYmUuCgpUaGUgY29yZSBvZiB0aGUgZml4IGFwcGVhcnMgdG8gYmUgc3BsaXR0aW5nIGBmdXRleF9leGVjX3JlbGVhc2VgIGludG8gYGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbmAgYW5kIGBmdXRleF9leGVjX3JlbGVhc2VfZW5kYC4gVGhpcywgYWxvbmcgd2l0aCB0aGUgYGV4aXRfbXV0ZXhgIGxvY2ssIGlzIGtleS4gVGhlIGBiZWdpbmAgZnVuY3Rpb24gYWNxdWlyZXMgYHRzay0mZ3Q7ZnV0ZXguZXhpdF9tdXRleGAsIGFuZCB0aGUgYGVuZGAgZnVuY3Rpb24gcmVsZWFzZXMgaXQuIFRoaXMgbG9ja2luZyBzcGFucyB0aGUgY3J1Y2lhbCBgbW1fcmVsZWFzZWAgb3BlcmF0aW9uIGFuZCB0aGUgc3Vic2VxdWVudCBgZXhlY19tbWFwYCBtbSByZXBsYWNlbWVudC4gQnkgaG9sZGluZyB0aGlzIG11dGV4LCBpdCBlbnN1cmVzIHRoYXQgbm8gb3RoZXIgdGhyZWFkIGNhbiBhdHRhY2ggdG8gdGhlIGZ1dGV4IHdoaWxlIHRoZSBtbSBpcyBiZWluZyByZXBsYWNlZCBkdXJpbmcgZXhlYywgd2hpY2ggaXMgY3JpdGljYWwuIFRoaXMgaXMgYSBzb2xpZCwgY2xlYW4gc3luY2hyb25pemF0aW9uIHN0cmF0ZWd5LgoKVGhlIGFkZGVkIGNoZWNrIGluIGBhdHRhY2hfdG9fcGlfb3duZXJgIHdpdGhpbiBga2VybmVsL2Z1dGV4L3BpLmNgIGlzIGFsc28gaW1wb3J0YW50LiAgU3BlY2lmaWNhbGx5LCB0aGUgYElTX0VOQUJMRUQoQ09ORklHX01NVSkgJmFtcDsmYW1wOyBmdXRleF9rZXlfaXNfcHJpdmF0ZShrZXkpICZhbXA7JmFtcDsgUkVBRF9PTkNFKHAtJmd0O21tKSAhPSBrZXktJmd0O3ByaXZhdGUubW1gIGNvbmRpdGlvbiBpcyBjbGV2ZXIuIEl0JiMzOTtzIHZlcmlmeWluZyB0aGF0IGZvciAqcHJpdmF0ZSogZnV0ZXhlcywgdGhlIHRhc2smIzM5O3MgYG1tYCAobWVtb3J5IG1hcCkgbWF0Y2hlcyB0aGUgYG1tYCBhc3NvY2lhdGVkIHdpdGggdGhlIGZ1dGV4IGtleS4gVGhpcyBwcmV2ZW50cyBhIHRhc2sgZnJvbSBhdHRhY2hpbmcgdG8gYSBmdXRleCBvZiBhIHRhc2sgdGhhdCBoYXMgYWxyZWFkeSBleGVjJiMzOTtkIGFuZCBjaGFuZ2VkIGl0cyBtZW1vcnkgbWFwLiBUaGlzIGlzIGEgdmVyeSBzcGVjaWZpYywgYW5kIHByb2JhYmx5IHZlcnkgc3VidGxlLCBidWcgZml4LgoKSSYjMzk7bSBub3Qgc2VlaW5nIGFueSByZWQgZmxhZ3MgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvIGxlYWtzLCBvciBuZXcgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBiZSB1bmluaXRpYWxpemVkLiBJdCYjMzk7cyBhIGNvbmN1cnJlbmN5L2xvY2tpbmcgYnVnIGZpeCB0aGF0IHRoZSBleGlzdGluZyBrZXJuZWwgY2hlY2tlcnMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUCB3b3VsZCBsaWtlbHkgY2F0Y2jigJQgb3IgcmF0aGVyLCB0aGV5IHdpbGwgY2F0Y2ggdGhlIGVmZmVjdHMgb2YgdGhlIGJ1ZyB0aGlzIHBhdGNoIGlzIHByZXZlbnRpbmcgKFVBRiBvciBkZWFkbG9ja3MpLiBObyBuZWVkIHRvIGJyaW5nIEtNU0FOIGludG8gdGhlIHBpY3R1cmUgaGVyZS4gVGhlIGlzc3VlIGlzIHB1cmVseSBhYm91dCBzeW5jaHJvbml6YXRpb24gYW5kIHByZXZlbnRpbmcgcmFjZXMsIG5vdCBhYm91dCBtZW1vcnkgaW5pdGlhbGl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGlzc3VlIHJlbGF0ZWQgdG8gZnV0ZXhlcyBhbmQgYGV4ZWN2ZWAuIEl0IHNwbGl0cyBgZnV0ZXhfZXhlY19yZWxlYXNlYCBpbnRvIGEgYmVnaW4vZW5kIHBhaXIgdG8gaG9sZCB0aGUgYGV4aXRfbXV0ZXhgIGFjcm9zcyB0aGUgYG1tYCByZXBsYWNlbWVudCBpbiBgZXhlY19tbWFwYCwgYW5kIGFkZHMgYSBjaGVjayBpbiBgYXR0YWNoX3RvX3BpX293bmVyYCB0byBlbnN1cmUgdGhlIHRhc2smIzM5O3MgYG1tYCBtYXRjaGVzIHRoZSBmdXRleCBrZXkmIzM5O3MgYG1tYC4gVGhlc2UgY2hhbmdlcyBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgYnVncyBkdXJpbmcgZXhlYy4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCB0aGUgYnVncyB0aGlzIHBhdGNoIGFpbXMgdG8gZml4LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgaXNzdWUgcmVsYXRlZCB0byBmdXRleGVzIGFuZCBgZXhlY3ZlYC4gSXQgc3BsaXRzIGBmdXRleF9leGVjX3JlbGVhc2VgIGludG8gYSBiZWdpbi9lbmQgcGFpciB0byBob2xkIHRoZSBgZXhpdF9tdXRleGAgYWNyb3NzIHRoZSBgbW1gIHJlcGxhY2VtZW50IGluIGBleGVjX21tYXBgLCBhbmQgYWRkcyBhIGNoZWNrIGluIGBhdHRhY2hfdG9fcGlfb3duZXJgIHRvIGVuc3VyZSB0aGUgdGFzayYjMzk7cyBgbW1gIG1hdGNoZXMgdGhlIGZ1dGV4IGtleSYjMzk7cyBgbW1gLiBUaGVzZSBjaGFuZ2VzIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBidWdzIGR1cmluZyBleGVjLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHRoZSBidWdzIHRoaXMgcGF0Y2ggYWltcyB0byBmaXguJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjUyOjU5LjI3MzU3MDYyOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTY4NTk2NTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVVRFWFwiLFxuICAgIFwiRlVURVhfUElcIixcbiAgICBcIlJUX01VVEVYRVNcIixcbiAgICBcIk1NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1dGV4X2xvY2tfcGlcIixcbiAgICBcImZ1dGV4X3dhaXRfcmVxdWV1ZV9waVwiLFxuICAgIFwiZnV0ZXhfcmVxdWV1ZVwiLFxuICAgIFwiZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luXCIsXG4gICAgXCJmdXRleF9leGVjX3JlbGVhc2VfZW5kXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpc3N1ZSByZWxhdGVkIHRvIGZ1dGV4ZXMgYW5kIGBleGVjdmVgLiBJdCBzcGxpdHMgYGZ1dGV4X2V4ZWNfcmVsZWFzZWAgaW50byBhIGJlZ2luL2VuZCBwYWlyIHRvIGhvbGQgdGhlIGBleGl0X211dGV4YCBhY3Jvc3MgdGhlIGBtbWAgcmVwbGFjZW1lbnQgaW4gYGV4ZWNfbW1hcGAsIGFuZCBhZGRzIGEgY2hlY2sgaW4gYGF0dGFjaF90b19waV9vd25lcmAgdG8gZW5zdXJlIHRoZSB0YXNrJ3MgYG1tYCBtYXRjaGVzIHRoZSBmdXRleCBrZXkncyBgbW1gLiBUaGVzZSBjaGFuZ2VzIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBidWdzIGR1cmluZyBleGVjLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHRoZSBidWdzIHRoaXMgcGF0Y2ggYWltcyB0byBmaXguXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGEgZnV0ZXggUEkgb3duZXIgZXhlY2luZyBhbmQgYW5vdGhlciB0YXNrIHRyeWluZyB0byBhdHRhY2ggdG8gdGhlIFBJIG93bmVyLiBJdCBzcGxpdHMgYGZ1dGV4X2V4ZWNfcmVsZWFzZWAgaW50byB0d28gcGhhc2VzIChgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luYCBhbmQgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRgKSBhbmQgYWRkcyBhIGNoZWNrIGluIGBhdHRhY2hfdG9fcGlfb3duZXJgIHRvIHZlcmlmeSB0aGUgdGFzaydzIGBtbWAgaGFzbid0IGNoYW5nZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gYW5kIHByb2Nlc3MgZXhlY3V0aW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjUyOjU5LjI3MzU3NjA0OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUzMDE0ODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzIzYTc4ZjI2ODY4MmY2NjQ3NWI1ZDkyNTVmNWNlMGQ2ZmQwOGUzMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwMDo1Mjo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmNcXG5pbmRleCBjN2I4ZjJkNjM2NmM0Li40MmViOThmYmQxMjU5IDEwMDY0NFxcbi0tLSBhL2ZzL2V4ZWMuY1xcbisrKyBiL2ZzL2V4ZWMuY1xcbkBAIC02NSw2ICs2NSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb191cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb3JlZHVtcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZnV0ZXguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWVfbmFtZXNwYWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2VyX2V2ZW50cy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcnNlcS5oXFx1MDAzZVxcbkBAIC04NTcsOCArODU4LDEwIEBAIHN0YXRpYyBpbnQgZXhlY19tbWFwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuIFxcdGV4ZWNfbW1fcmVsZWFzZSh0c2ssIG9sZF9tbSk7XFxuIFxcbiBcXHRyZXQgPSBkb3duX3dyaXRlX2tpbGxhYmxlKFxcdTAwMjZ0c2stXFx1MDAzZXNpZ25hbC1cXHUwMDNlZXhlY191cGRhdGVfbG9jayk7XFxuLVxcdGlmIChyZXQpXFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZnV0ZXhfZXhlY19yZWxlYXNlX2VuZCh0c2spO1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuIFxcbiBcXHRpZiAob2xkX21tKSB7XFxuIFxcdFxcdC8qXFxuQEAgLTg2OSw2ICs4NzIsNyBAQCBzdGF0aWMgaW50IGV4ZWNfbW1hcChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbiBcXHRcXHRyZXQgPSBtbWFwX3JlYWRfbG9ja19raWxsYWJsZShvbGRfbW0pO1xcbiBcXHRcXHRpZiAocmV0KSB7XFxuIFxcdFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZ0c2stXFx1MDAzZXNpZ25hbC1cXHUwMDNlZXhlY191cGRhdGVfbG9jayk7XFxuK1xcdFxcdFxcdGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmQodHNrKTtcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuQEAgLTg5Niw2ICs5MDAsNyBAQCBzdGF0aWMgaW50IGV4ZWNfbW1hcChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbiBcXHRcXHRsb2NhbF9pcnFfZW5hYmxlKCk7XFxuIFxcdGxydV9nZW5fYWRkX21tKG1tKTtcXG4gXFx0dGFza191bmxvY2sodHNrKTtcXG4rXFx0ZnV0ZXhfZXhlY19yZWxlYXNlX2VuZCh0c2spO1xcbiBcXHRscnVfZ2VuX3VzZV9tbShtbSk7XFxuIFxcdGlmIChvbGRfbW0pIHtcXG4gXFx0XFx0bW1hcF9yZWFkX3VubG9jayhvbGRfbW0pO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z1dGV4LmggYi9pbmNsdWRlL2xpbnV4L2Z1dGV4LmhcXG5pbmRleCA1MWY0Y2NkYzkwOTI3Li4zMjRmNDk0OTNjYmI0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZnV0ZXguaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZnV0ZXguaFxcbkBAIC03Miw3ICs3MiwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbiBcXG4gdm9pZCBmdXRleF9leGl0X3JlY3Vyc2l2ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7XFxuIHZvaWQgZnV0ZXhfZXhpdF9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTtcXG4tdm9pZCBmdXRleF9leGVjX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xcbit2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4rXFx0X19hY3F1aXJlcyhcXHUwMDI2dHNrLVxcdTAwM2VmdXRleC5leGl0X211dGV4KTtcXG4rdm9pZCBmdXRleF9leGVjX3JlbGVhc2VfZW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbitcXHRfX3JlbGVhc2VzKFxcdTAwMjZ0c2stXFx1MDAzZWZ1dGV4LmV4aXRfbXV0ZXgpO1xcbiBcXG4gbG9uZyBkb19mdXRleCh1MzIgX191c2VyICp1YWRkciwgaW50IG9wLCB1MzIgdmFsLCBrdGltZV90ICp0aW1lb3V0LFxcbiBcXHQgICAgICB1MzIgX191c2VyICp1YWRkcjIsIHUzMiB2YWwyLCB1MzIgdmFsMyk7XFxuQEAgLTkwLDcgKzkzLDggQEAgc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHsgfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhpdF9yZWN1cnNpdmUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHsgfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhpdF9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH1cXG4tc3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykgeyB9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHsgfVxcbitzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykgeyB9XFxuIHN0YXRpYyBpbmxpbmUgbG9uZyBkb19mdXRleCh1MzIgX191c2VyICp1YWRkciwgaW50IG9wLCB1MzIgdmFsLCBrdGltZV90ICp0aW1lb3V0LFxcbiBcXHRcXHRcXHQgICAgdTMyIF9fdXNlciAqdWFkZHIyLCB1MzIgdmFsMiwgdTMyIHZhbDMpXFxuIHtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmNcXG5pbmRleCBmMGUyZTEzMWE5YTVhLi5kMjczNmIyNGZmNzUyIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9mb3JrLmNcXG4rKysgYi9rZXJuZWwvZm9yay5jXFxuQEAgLTE1MTAsNyArMTUxMCw3IEBAIHZvaWQgZXhpdF9tbV9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gXFxuIHZvaWQgZXhlY19tbV9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4ge1xcbi1cXHRmdXRleF9leGVjX3JlbGVhc2UodHNrKTtcXG4rXFx0ZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luKHRzayk7XFxuIFxcdG1tX3JlbGVhc2UodHNrLCBtbSk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC9jb3JlLmMgYi9rZXJuZWwvZnV0ZXgvY29yZS5jXFxuaW5kZXggMTI4YzU3NTJmMjI1Yy4uYTkyMGRmYmQwMzkwZCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvZnV0ZXgvY29yZS5jXFxuKysrIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xcbkBAIC0xNTM5LDcgKzE1MzksOCBAQCBzdGF0aWMgdm9pZCBmdXRleF9jbGVhbnVwX2VuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHN0YXRlKVxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnRzay1cXHUwMDNlZnV0ZXguZXhpdF9tdXRleCk7XFxuIH1cXG4gXFxuLXZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbit2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4rXFx0X19hY3F1aXJlcyhcXHUwMDI2dHNrLVxcdTAwM2VmdXRleC5leGl0X211dGV4KVxcbiB7XFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBzdGF0ZSBoYW5kbGluZyBpcyBkb25lIGZvciBjb25zaXN0ZW5jeSwgYnV0IGluIHRoZSBjYXNlIG9mXFxuQEAgLTE1NTAsNiArMTU1MSwxMSBAQCB2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4gXFx0ICovXFxuIFxcdGZ1dGV4X2NsZWFudXBfYmVnaW4odHNrKTtcXG4gXFx0ZnV0ZXhfY2xlYW51cCh0c2spO1xcbit9XFxuK1xcbit2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuK1xcdF9fcmVsZWFzZXMoXFx1MDAyNnRzay1cXHUwMDNlZnV0ZXguZXhpdF9tdXRleClcXG4re1xcbiBcXHQvKlxcbiBcXHQgKiBSZXNldCB0aGUgc3RhdGUgdG8gRlVURVhfU1RBVEVfT0suIFRoZSB0YXNrIGlzIGFsaXZlIGFuZCBhYm91dFxcbiBcXHQgKiBleGVjIGEgbmV3IGJpbmFyeS5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4L3BpLmMgYi9rZXJuZWwvZnV0ZXgvcGkuY1xcbmluZGV4IDc5NTAxMWVhMTIwMmYuLmQ5NzYxMTE5NmIzNGEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2Z1dGV4L3BpLmNcXG4rKysgYi9rZXJuZWwvZnV0ZXgvcGkuY1xcbkBAIC00NjUsNiArNDY1LDEzIEBAIHN0YXRpYyBpbnQgYXR0YWNoX3RvX3BpX293bmVyKHUzMiBfX3VzZXIgKnVhZGRyLCB1MzIgdXZhbCwgdW5pb24gZnV0ZXhfa2V5ICprZXksXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19NTVUpIFxcdTAwMjZcXHUwMDI2IGZ1dGV4X2tleV9pc19wcml2YXRlKGtleSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIFJFQURfT05DRShwLVxcdTAwM2VtbSkgIT0ga2V5LVxcdTAwM2Vwcml2YXRlLm1tKSB7XFxuK1xcdFxcdHJhd19zcGluX3VubG9ja19pcnEoXFx1MDAyNnAtXFx1MDAzZXBpX2xvY2spO1xcbitcXHRcXHRwdXRfdGFza19zdHJ1Y3QocCk7XFxuK1xcdFxcdHJldHVybiAtRVNSQ0g7XFxuK1xcdH1cXG4rXFxuIFxcdF9fYXR0YWNoX3RvX3BpX293bmVyKHAsIGtleSwgcHMpO1xcbiBcXHRyYXdfc3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZwLVxcdTAwM2VwaV9sb2NrKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjUyOjU5LjgyNzMxNTM2MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEzMjIyMjM0MDg3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVVRFWFwiLFxuICAgIFwiRlVURVhfUElcIixcbiAgICBcIlJUX01VVEVYRVNcIixcbiAgICBcIk1NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1dGV4X2xvY2tfcGlcIixcbiAgICBcImZ1dGV4X3dhaXRfcmVxdWV1ZV9waVwiLFxuICAgIFwiZnV0ZXhfcmVxdWV1ZVwiLFxuICAgIFwiZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luXCIsXG4gICAgXCJmdXRleF9leGVjX3JlbGVhc2VfZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGEgZnV0ZXggUEkgb3duZXIgZXhlY2luZyBhbmQgYW5vdGhlciB0YXNrIHRyeWluZyB0byBhdHRhY2ggdG8gdGhlIFBJIG93bmVyLiBJdCBzcGxpdHMgYGZ1dGV4X2V4ZWNfcmVsZWFzZWAgaW50byB0d28gcGhhc2VzIChgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luYCBhbmQgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRgKSBhbmQgYWRkcyBhIGNoZWNrIGluIGBhdHRhY2hfdG9fcGlfb3duZXJgIHRvIHZlcmlmeSB0aGUgdGFzaydzIGBtbWAgaGFzbid0IGNoYW5nZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gYW5kIHByb2Nlc3MgZXhlY3V0aW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDMyM2E3OGYyNjg2ODJmNjY0NzViNWQ5MjU1ZjVjZTBkNmZkMDhlMzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwMDo1Mjo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xuaW5kZXggYzdiOGYyZDYzNjZjNC4uNDJlYjk4ZmJkMTI1OSAxMDA2NDRcbi0tLSBhL2ZzL2V4ZWMuY1xuKysrIGIvZnMvZXhlYy5jXG5AQCAtNjUsNiArNjUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvX3VyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjYWxsX3VzZXJfZGlzcGF0Y2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvcmVkdW1wLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZV9uYW1lc3BhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXJfZXZlbnRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yc2VxLmhcdTAwM2VcbkBAIC04NTcsOCArODU4LDEwIEBAIHN0YXRpYyBpbnQgZXhlY19tbWFwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4gXHRleGVjX21tX3JlbGVhc2UodHNrLCBvbGRfbW0pO1xuIFxuIFx0cmV0ID0gZG93bl93cml0ZV9raWxsYWJsZShcdTAwMjZ0c2stXHUwMDNlc2lnbmFsLVx1MDAzZWV4ZWNfdXBkYXRlX2xvY2spO1xuLVx0aWYgKHJldClcbitcdGlmIChyZXQpIHtcbitcdFx0ZnV0ZXhfZXhlY19yZWxlYXNlX2VuZCh0c2spO1xuIFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuIFxuIFx0aWYgKG9sZF9tbSkge1xuIFx0XHQvKlxuQEAgLTg2OSw2ICs4NzIsNyBAQCBzdGF0aWMgaW50IGV4ZWNfbW1hcChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFx0XHRyZXQgPSBtbWFwX3JlYWRfbG9ja19raWxsYWJsZShvbGRfbW0pO1xuIFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0dXBfd3JpdGUoXHUwMDI2dHNrLVx1MDAzZXNpZ25hbC1cdTAwM2VleGVjX3VwZGF0ZV9sb2NrKTtcbitcdFx0XHRmdXRleF9leGVjX3JlbGVhc2VfZW5kKHRzayk7XG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuIFx0fVxuQEAgLTg5Niw2ICs5MDAsNyBAQCBzdGF0aWMgaW50IGV4ZWNfbW1hcChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFx0XHRsb2NhbF9pcnFfZW5hYmxlKCk7XG4gXHRscnVfZ2VuX2FkZF9tbShtbSk7XG4gXHR0YXNrX3VubG9jayh0c2spO1xuK1x0ZnV0ZXhfZXhlY19yZWxlYXNlX2VuZCh0c2spO1xuIFx0bHJ1X2dlbl91c2VfbW0obW0pO1xuIFx0aWYgKG9sZF9tbSkge1xuIFx0XHRtbWFwX3JlYWRfdW5sb2NrKG9sZF9tbSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdXRleC5oIGIvaW5jbHVkZS9saW51eC9mdXRleC5oXG5pbmRleCA1MWY0Y2NkYzkwOTI3Li4zMjRmNDk0OTNjYmI0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mdXRleC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Z1dGV4LmhcbkBAIC03Miw3ICs3MiwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuIFxuIHZvaWQgZnV0ZXhfZXhpdF9yZWN1cnNpdmUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xuIHZvaWQgZnV0ZXhfZXhpdF9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTtcbi12b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7XG4rdm9pZCBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4rXHRfX2FjcXVpcmVzKFx1MDAyNnRzay1cdTAwM2VmdXRleC5leGl0X211dGV4KTtcbit2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4rXHRfX3JlbGVhc2VzKFx1MDAyNnRzay1cdTAwM2VmdXRleC5leGl0X211dGV4KTtcbiBcbiBsb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXG4gXHQgICAgICB1MzIgX191c2VyICp1YWRkcjIsIHUzMiB2YWwyLCB1MzIgdmFsMyk7XG5AQCAtOTAsNyArOTMsOCBAQCBzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhpdF9yZWN1cnNpdmUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9leGl0X3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHsgfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9leGVjX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHsgfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHsgfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9leGVjX3JlbGVhc2VfZW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH1cbiBzdGF0aWMgaW5saW5lIGxvbmcgZG9fZnV0ZXgodTMyIF9fdXNlciAqdWFkZHIsIGludCBvcCwgdTMyIHZhbCwga3RpbWVfdCAqdGltZW91dCxcbiBcdFx0XHQgICAgdTMyIF9fdXNlciAqdWFkZHIyLCB1MzIgdmFsMiwgdTMyIHZhbDMpXG4ge1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jXG5pbmRleCBmMGUyZTEzMWE5YTVhLi5kMjczNmIyNGZmNzUyIDEwMDY0NFxuLS0tIGEva2VybmVsL2ZvcmsuY1xuKysrIGIva2VybmVsL2ZvcmsuY1xuQEAgLTE1MTAsNyArMTUxMCw3IEBAIHZvaWQgZXhpdF9tbV9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcbiB2b2lkIGV4ZWNfbW1fcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuLVx0ZnV0ZXhfZXhlY19yZWxlYXNlKHRzayk7XG4rXHRmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4odHNrKTtcbiBcdG1tX3JlbGVhc2UodHNrLCBtbSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC9jb3JlLmMgYi9rZXJuZWwvZnV0ZXgvY29yZS5jXG5pbmRleCAxMjhjNTc1MmYyMjVjLi5hOTIwZGZiZDAzOTBkIDEwMDY0NFxuLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuY1xuKysrIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuQEAgLTE1MzksNyArMTUzOSw4IEBAIHN0YXRpYyB2b2lkIGZ1dGV4X2NsZWFudXBfZW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgc3RhdGUpXG4gXHRtdXRleF91bmxvY2soXHUwMDI2dHNrLVx1MDAzZWZ1dGV4LmV4aXRfbXV0ZXgpO1xuIH1cbiBcbi12b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbit2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbitcdF9fYWNxdWlyZXMoXHUwMDI2dHNrLVx1MDAzZWZ1dGV4LmV4aXRfbXV0ZXgpXG4ge1xuIFx0LypcbiBcdCAqIFRoZSBzdGF0ZSBoYW5kbGluZyBpcyBkb25lIGZvciBjb25zaXN0ZW5jeSwgYnV0IGluIHRoZSBjYXNlIG9mXG5AQCAtMTU1MCw2ICsxNTUxLDExIEBAIHZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuIFx0ICovXG4gXHRmdXRleF9jbGVhbnVwX2JlZ2luKHRzayk7XG4gXHRmdXRleF9jbGVhbnVwKHRzayk7XG4rfVxuK1xuK3ZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbitcdF9fcmVsZWFzZXMoXHUwMDI2dHNrLVx1MDAzZWZ1dGV4LmV4aXRfbXV0ZXgpXG4re1xuIFx0LypcbiBcdCAqIFJlc2V0IHRoZSBzdGF0ZSB0byBGVVRFWF9TVEFURV9PSy4gVGhlIHRhc2sgaXMgYWxpdmUgYW5kIGFib3V0XG4gXHQgKiBleGVjIGEgbmV3IGJpbmFyeS5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvcGkuYyBiL2tlcm5lbC9mdXRleC9waS5jXG5pbmRleCA3OTUwMTFlYTEyMDJmLi5kOTc2MTExOTZiMzRhIDEwMDY0NFxuLS0tIGEva2VybmVsL2Z1dGV4L3BpLmNcbisrKyBiL2tlcm5lbC9mdXRleC9waS5jXG5AQCAtNDY1LDYgKzQ2NSwxMyBAQCBzdGF0aWMgaW50IGF0dGFjaF90b19waV9vd25lcih1MzIgX191c2VyICp1YWRkciwgdTMyIHV2YWwsIHVuaW9uIGZ1dGV4X2tleSAqa2V5LFxuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX01NVSkgXHUwMDI2XHUwMDI2IGZ1dGV4X2tleV9pc19wcml2YXRlKGtleSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgUkVBRF9PTkNFKHAtXHUwMDNlbW0pICE9IGtleS1cdTAwM2Vwcml2YXRlLm1tKSB7XG4rXHRcdHJhd19zcGluX3VubG9ja19pcnEoXHUwMDI2cC1cdTAwM2VwaV9sb2NrKTtcbitcdFx0cHV0X3Rhc2tfc3RydWN0KHApO1xuK1x0XHRyZXR1cm4gLUVTUkNIO1xuK1x0fVxuK1xuIFx0X19hdHRhY2hfdG9fcGlfb3duZXIocCwga2V5LCBwcyk7XG4gXHRyYXdfc3Bpbl91bmxvY2tfaXJxKFx1MDAyNnAtXHUwMDNlcGlfbG9jayk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1Mjo1OS44MjczMTY4MzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDg2MDA1NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV3IEZ1dGV4IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgYSBmZXcgY3J1Y2lhbCBhcmVhczogYGZzL2V4ZWMuY2AsIGBpbmNsdWRlL2xpbnV4L2Z1dGV4LmhgLCBga2VybmVsL2ZvcmsuY2AsIGFuZCwgbW9zdCBub3RhYmx5LCBga2VybmVsL2Z1dGV4L2NvcmUuY2AgYW5kIGBrZXJuZWwvZnV0ZXgvcGkuY2AuIEltbWVkaWF0ZWx5LCBteSBzcGlkZXkgc2Vuc2VzIGFyZSB0aW5nbGluZyDigJMgdGhpcyB3YXJyYW50cyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgaXMgYSBjb3JlIGtlcm5lbCBtb2RpZmljYXRpb24gaW52b2x2aW5nIGZ1dGV4ZXMgYW5kIGV4ZWMsIHdoaWNoLCBhcyB3ZSBrbm93LCBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyBhbmQgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy5cblxuVGhlIHBhdGNoIHNlZW1zIHRvIHNwbGl0IGBmdXRleF9leGVjX3JlbGVhc2VgIGludG8gYSBiZWdpbiBhbmQgZW5kIHNlcXVlbmNlLCBhbmQgdGhlcmUncyBhIG5ldyBjaGVjayBhZGRlZCBpbiBgYXR0YWNoX3RvX3BpX293bmVyYCB3aXRoaW4gYGtlcm5lbC9mdXRleC9waS5jYC4gIFNwZWNpZmljYWxseSwgdGhhdCBgYXR0YWNoX3RvX3BpX293bmVyYCBjaGVjayBpcyBpbnRlcmVzdGluZzogSXQgYXBwZWFycyB0byBiZSB2ZXJpZnlpbmcgdGhhdCB0aGUgbWVtb3J5IG1hcCBhc3NvY2lhdGVkIHdpdGggYSBwcml2YXRlIGZ1dGV4IGtleSBtYXRjaGVzIHRoZSBwcm9jZXNzJ3MgbW0gKG1lbW9yeSBtYW5hZ2VtZW50KS4gSSBuZWVkIHRvIGRpZyBpbnRvIHdoYXQncyBoYXBwZW5pbmcgaWYgdGhhdCBjaGVjayBmYWlscy5cblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldCBkdXJpbmcgZnV6emluZy4gSSdtIHRoaW5raW5nOlxuXG4qICAgYGF0dGFjaF90b19waV9vd25lcmAg4oCTIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIEknbGwgd2FudCB0byBmb2N1cyBvbiBpdHMgY2FsbGVycyBhcyB3ZWxsLlxuKiAgIGBleGVjX21tYXBgIOKAkyBhbHNvIHN0YXRpYy4gVGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiByZXF1aXJlIHNjcnV0aW55IGFzIHdlbGwuXG4qICAgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbmAgYW5kIGBmdXRleF9leGVjX3JlbGVhc2VfZW5kYCDigJMgdGhlc2UgYXJlIHRoZSBuZXdseSBpbnRyb2R1Y2VkIHNwbGl0IGZ1bmN0aW9ucy4gQ2xlYXJseSB0aGV5IGFyZSBhIGhpZ2ggcHJpb3JpdHkuXG4qICAgYGV4aXRfbW1fcmVsZWFzZWAgYW5kIGBleGVjX21tX3JlbGVhc2VgIOKAkyBzaW5jZSB0aGlzIGNvbmNlcm5zIGV4ZWMsIHRoZXNlIGZ1bmN0aW9ucyB0aGF0IG1hbmFnZSBtZW1vcnkgbWFwcGluZyBkdXJpbmcgZXhlY3V0aW9uIHdvdWxkIGJlIGVzc2VudGlhbCBhcyB3ZWxsLlxuXG5JIHNob3VsZCBwcm9iYWJseSBkaXZlIGludG8gYGtlcm5lbC9mdXRleC9waS5jYCByaWdodCBub3cgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIHdobyBjYWxscyBgYXR0YWNoX3RvX3BpX293bmVyYC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBncmFwaCB3aWxsIGJlIGNyaXRpY2FsIGZvciBjcmFmdGluZyBlZmZlY3RpdmUgZnV6emluZyBzY2VuYXJpb3MuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjEwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTM6MDguOTEzMzI1ODdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0OTgyODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXR0YWNoX3RvX3BpX293bmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9waS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mdXRleC9waS5jPTMyMT1zdGF0aWMgaW50IGhhbmRsZV9leGl0X3JhY2UodTMyIF9fdXNlciAqdWFkZHIsIHUzMiB1dmFsLFxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmMtMzQ0LVxcdCAqICAgZXhpdF9yb2J1c3RfbGlzdCh0c2spIHtcXHQgICAgKnVhZGRyID0gMHg4MDAwMFBJRDtcXG5rZXJuZWwvZnV0ZXgvcGkuYzozNDU6XFx0ICogICAgICBTZXQgb3duZXIgZGllZFxcdFxcdCAgICBhdHRhY2hfdG9fcGlfb3duZXIoKSB7XFxua2VybmVsL2Z1dGV4L3BpLmMtMzQ2LVxcdCAqICAgICp1YWRkciA9IDB4QzAwMDAwMDA7XFx0ICAgICB0c2sgPSBnZXRfdGFzayhQSUQpO1xcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmMtMzc2LVxcbmtlcm5lbC9mdXRleC9waS5jOjM3NzpzdGF0aWMgdm9pZCBfX2F0dGFjaF90b19waV9vd25lcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuaW9uIGZ1dGV4X2tleSAqa2V5LFxcbmtlcm5lbC9mdXRleC9waS5jLTM3OC1cXHRcXHRcXHRcXHQgc3RydWN0IGZ1dGV4X3BpX3N0YXRlICoqcHMpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy00MTEtICovXFxua2VybmVsL2Z1dGV4L3BpLmM6NDEyOnN0YXRpYyBpbnQgYXR0YWNoX3RvX3BpX293bmVyKHUzMiBfX3VzZXIgKnVhZGRyLCB1MzIgdXZhbCwgdW5pb24gZnV0ZXhfa2V5ICprZXksXFxua2VybmVsL2Z1dGV4L3BpLmMtNDEzLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBmdXRleF9waV9zdGF0ZSAqKnBzLFxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmMtNDc0LVxcbmtlcm5lbC9mdXRleC9waS5jOjQ3NTpcXHRfX2F0dGFjaF90b19waV9vd25lcihwLCBrZXksIHBzKTtcXG5rZXJuZWwvZnV0ZXgvcGkuYy00NzYtXFx0cmF3X3NwaW5fdW5sb2NrX2lycShcXHUwMDI2cC1cXHUwMDNlcGlfbG9jayk7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYz01MjM9aW50IGZ1dGV4X2xvY2tfcGlfYXRvbWljKHUzMiBfX3VzZXIgKnVhZGRyLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmMtNTkwLVxcdFxcdCAqXFxua2VybmVsL2Z1dGV4L3BpLmM6NTkxOlxcdFxcdCAqIE5vIG5lZWQgdG8gZG8gdGhlIGZ1bGwgYXR0YWNoX3RvX3BpX293bmVyKCkgZXhlcmNpc2VcXG5rZXJuZWwvZnV0ZXgvcGkuYy01OTItXFx0XFx0ICogYmVjYXVzZSBAdGFzayBpcyBrbm93biBhbmQgdmFsaWQuXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy01OTUtXFx0XFx0XFx0cmF3X3NwaW5fbG9ja19pcnEoXFx1MDAyNnRhc2stXFx1MDAzZXBpX2xvY2spO1xcbmtlcm5lbC9mdXRleC9waS5jOjU5NjpcXHRcXHRcXHRfX2F0dGFjaF90b19waV9vd25lcih0YXNrLCBrZXksIHBzKTtcXG5rZXJuZWwvZnV0ZXgvcGkuYy01OTctXFx0XFx0XFx0cmF3X3NwaW5fdW5sb2NrX2lycShcXHUwMDI2dGFzay1cXHUwMDNlcGlfbG9jayk7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy02MTUtXFx0ICovXFxua2VybmVsL2Z1dGV4L3BpLmM6NjE2OlxcdHJldHVybiBhdHRhY2hfdG9fcGlfb3duZXIodWFkZHIsIG5ld3ZhbCwga2V5LCBwcywgZXhpdGluZyk7XFxua2VybmVsL2Z1dGV4L3BpLmMtNjE3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTM6MDguOTYxODMwNTU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ3OTMwMDAzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQsIHJlZmxlY3RpbmcgbXkgZXhwZXJ0IHVuZGVyc3RhbmRpbmc6XG5cbioqQW5hbHl6aW5nIGBmdXRleF9sb2NrX3BpX2F0b21pY2AncyBDYWxsZXJzKipcblxuT2theSwgc28gYGF0dGFjaF90b19waV9vd25lcmAgaXMgYmVpbmcgY2FsbGVkIGZyb20gd2l0aGluIGBmdXRleF9sb2NrX3BpX2F0b21pY2AuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hvICplbHNlKiBjYWxscyBgZnV0ZXhfbG9ja19waV9hdG9taWNgPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgYWJzb2x1dGVseSBjcml0aWNhbCBoZXJlLiBJdCdzIHRoZSBvbmx5IHdheSB0byBncmFzcCB0aGUgYnJvYWRlciBjb25jdXJyZW5jeSBpbXBsaWNhdGlvbnMsIHBvdGVudGlhbCBjb250ZW50aW9uIHBvaW50cywgYW5kIHRoZSByb2xlIG9mIHRoaXMgYGF0dGFjaF90b19waV9vd25lcmAgY2FsbCB3aXRoaW4gdGhlIGxhcmdlciBwaWN0dXJlIG9mIHByaW9yaXR5IGluaGVyaXRhbmNlIGxvY2tpbmcuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGZ1dGV4X2xvY2tfcGlfYXRvbWljYCB0byBzZWUgaXRzIHVwc3RyZWFtIGRlcGVuZGVuY2llcy4gS25vd2luZyB0aGUgY2FsbCBncmFwaCBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB3aHkgaXTigJlzIGJlaW5nIGludm9rZWQgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgbG9ja2luZyBzdHJhdGVneS4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IGFsbCBlbnRyeSBwb2ludHMgaW50byB0aGUgZnVuY3Rpb24gdG8gYXNzZXNzIHdoZXJlIGFuZCBob3cgcHJpb3JpdHkgaW5oZXJpdGFuY2UgaXMgYmVpbmcgZW1wbG95ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMzUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1MzoxNC40NDExMzMyODJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3NTg1NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnV0ZXhfbG9ja19waV9hdG9taWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2Z1dGV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZnV0ZXgvZnV0ZXguaD0zODQ9ZXh0ZXJuIHZvaWQgZnV0ZXhfcV91bmxvY2soc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYilcXG4tLVxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTM4Ni1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDozODc6ZXh0ZXJuIGludCBmdXRleF9sb2NrX3BpX2F0b21pYyh1MzIgX191c2VyICp1YWRkciwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYixcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zODgtXFx0XFx0XFx0XFx0dW5pb24gZnV0ZXhfa2V5ICprZXksXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYz0zMjE9c3RhdGljIGludCBoYW5kbGVfZXhpdF9yYWNlKHUzMiBfX3VzZXIgKnVhZGRyLCB1MzIgdXZhbCxcXG4tLVxcbmtlcm5lbC9mdXRleC9waS5jLTMzOS1cXHQgKiAgZG9fZXhpdCgpXFx0XFx0XFx0IGZ1dGV4X2xvY2tfcGkoKVxcbmtlcm5lbC9mdXRleC9waS5jOjM0MDpcXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnV0ZXhfbG9ja19waV9hdG9taWMoKVxcbmtlcm5lbC9mdXRleC9waS5jLTM0MS1cXHQgKiAgIGV4aXRfc2lnbmFscyh0c2spXFx0XFx0ICAgIE5vIHdhaXRlcnM6XFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYz00ODM9c3RhdGljIGludCBsb2NrX3BpX3VwZGF0ZV9hdG9taWModTMyIF9fdXNlciAqdWFkZHIsIHUzMiB1dmFsLCB1MzIgbmV3dmFsKVxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmMtNDk5LS8qKlxcbmtlcm5lbC9mdXRleC9waS5jOjUwMDogKiBmdXRleF9sb2NrX3BpX2F0b21pYygpIC0gQXRvbWljIHdvcmsgcmVxdWlyZWQgdG8gYWNxdWlyZSBhIHBpIGF3YXJlIGZ1dGV4XFxua2VybmVsL2Z1dGV4L3BpLmMtNTAxLSAqIEB1YWRkcjpcXHRcXHR0aGUgcGkgZnV0ZXggdXNlciBhZGRyZXNzXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy01MjItICovXFxua2VybmVsL2Z1dGV4L3BpLmM6NTIzOmludCBmdXRleF9sb2NrX3BpX2F0b21pYyh1MzIgX191c2VyICp1YWRkciwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYixcXG5rZXJuZWwvZnV0ZXgvcGkuYy01MjQtXFx0XFx0XFx0IHVuaW9uIGZ1dGV4X2tleSAqa2V5LFxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmM9OTMwPWludCBmdXRleF9sb2NrX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGt0aW1lX3QgKnRpbWUsIGludCB0cnlsb2NrKVxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmMtOTU5LVxcbmtlcm5lbC9mdXRleC9waS5jOjk2MDpcXHRcXHRyZXQgPSBmdXRleF9sb2NrX3BpX2F0b21pYyh1YWRkciwgaGIsIFxcdTAwMjZxLmtleSwgXFx1MDAyNnEucGlfc3RhdGUsIGN1cnJlbnQsXFxua2VybmVsL2Z1dGV4L3BpLmMtOTYxLVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZleGl0aW5nLCAwKTtcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM9MjMwPXZvaWQgcmVxdWV1ZV9waV93YWtlX2Z1dGV4KHN0cnVjdCBmdXRleF9xICpxLCB1bmlvbiBmdXRleF9rZXkgKmtleSxcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMjY3LSAqIFdha2UgdGhlIHRvcCB3YWl0ZXIgaWYgd2Ugc3VjY2VlZC4gIElmIHRoZSBjYWxsZXIgc3BlY2lmaWVkIHNldF93YWl0ZXJzLFxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MjY4OiAqIHRoZW4gZGlyZWN0IGZ1dGV4X2xvY2tfcGlfYXRvbWljKCkgdG8gZm9yY2Ugc2V0dGluZyB0aGUgRlVURVhfV0FJVEVSUyBiaXQuXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0yNjktICogaGIxIGFuZCBoYjIgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIuXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTI4MT1mdXRleF9wcm94eV90cnlsb2NrX2F0b21pYyh1MzIgX191c2VyICpwaWZ1dGV4LCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMSxcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMjk4LVxcdCAqIElmIHRoZSBjYWxsZXIgaW50ZW5kcyB0byByZXF1ZXVlIG1vcmUgdGhhbiAxIHdhaXRlciB0byBwaWZ1dGV4LFxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6Mjk5OlxcdCAqIGZvcmNlIGZ1dGV4X2xvY2tfcGlfYXRvbWljKCkgdG8gc2V0IHRoZSBGVVRFWF9XQUlURVJTIGJpdCBub3csXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zMDAtXFx0ICogYXMgd2UgaGF2ZSBtZWFucyB0byBoYW5kbGUgdGhlIHBvc3NpYmxlIGZhdWx0LiAgSWYgbm90LCBkb24ndCBzZXRcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMzM1LVxcdCAqL1xcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MzM2OlxcdHJldCA9IGZ1dGV4X2xvY2tfcGlfYXRvbWljKHBpZnV0ZXgsIGhiMiwga2V5MiwgcHMsIHRvcF93YWl0ZXItXFx1MDAzZXRhc2ssXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zMzctXFx0XFx0XFx0XFx0ICAgZXhpdGluZywgc2V0X3dhaXRlcnMpO1xcbi0tXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zNTAtXFx0XFx0LypcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjM1MTpcXHRcXHQgKiBmdXRleF9sb2NrX3BpX2F0b21pYygpIGRpZCBub3QgYWNxdWlyZSB0aGUgdXNlciBzcGFjZVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMzUyLVxcdFxcdCAqIGZ1dGV4LCBidXQgbWFuYWdlZCB0byBlc3RhYmxpc2ggdGhlIHByb3h5IGxvY2sgYW5kIHBpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjUzOjE0LjQ5MDkwMjM4N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NzM0NTkyMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBLZXJuZWwncyBGdXRleCBJbXBsZW1lbnRhdGlvbiBhbmQgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgZnV0ZXggbG9ja2luZywgc3BlY2lmaWNhbGx5IHRoZSBwcm9jZXNzIGlzb2xhdGlvbiB2YXJpYW50LiBJIHNlZSB0aGF0IGJvdGggYGZ1dGV4X2xvY2tfcGlgIGFuZCBgZnV0ZXhfcHJveHlfdHJ5bG9ja19hdG9taWNgIHVsdGltYXRlbHkgY2FsbCBgZnV0ZXhfbG9ja19waV9hdG9taWNgLiBNYWtlcyBzZW5zZSwgdGhleSdyZSBsaWtlbHkganVzdCBkaWZmZXJlbnQgd3JhcHBlcnMgYXJvdW5kIHRoZSBjb3JlIGF0b21pYyBvcGVyYXRpb24uIE5vdywgSSB3YW50IHRvIHRyYWNlIGhvdyB0aGlzIGxvY2tpbmcgaW50ZXJhY3RzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgZHVyaW5nIHByb2Nlc3MgbGlmZWN5Y2xlIGV2ZW50cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgaXMgaGFuZGxlZCB3aGVuIHRocmVhZHMgYXJlIHJlbGVhc2VkLiBMZXQgbWUgY2hlY2sgdGhlIGBleGVjX21tX3JlbGVhc2VgIGFuZCBgZXhpdF9tbV9yZWxlYXNlYCBmdW5jdGlvbnMgd2l0aGluIGBrZXJuZWwvZm9yay5jYC4gVGhhdCdzIHdoZXJlIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzaG91bGQgYmUgaGFuZGxlZCB3aGVuIHByb2Nlc3NlcyBhcmUgc3dhcHBlZCBvciB0ZXJtaW5hdGVkLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBwcm9jZXNzIGlzb2xhdGlvbiBhbmQgbWVtb3J5IHJlbGVhc2VzIGFyZSBjb3VwbGVkIHdpdGggdGhlc2UgZnV0ZXggb3BlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ5MiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjUzOjE5LjM2NDM2NDExNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU1MTc5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleGVjX21tX3JlbGVhc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2ZvcmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZm9yay5jPTE1MDU9dm9pZCBleGl0X21tX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2ZvcmsuYy0xNTEwLVxcbmtlcm5lbC9mb3JrLmM6MTUxMTp2b2lkIGV4ZWNfbW1fcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxua2VybmVsL2ZvcmsuYy0xNTEyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTM6MTkuNDA5OTIxNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MjE3NDkzMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUHJvY2VzcyBUZXJtaW5hdGlvbiBhbmQgRnV0ZXggSW50ZXJhY3Rpb25zKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgZnV0ZXhlcyBpbnRlcmFjdCB3aXRoIHByb2Nlc3MgdGVybWluYXRpb24gYW5kIGV4ZWN1dGlvbi4gVGhlIHN0YXJ0aW5nIHBvaW50IHNlZW1zIHRvIGJlIHRoYXQgYGV4ZWNfbW1fcmVsZWFzZWAsIHRyaWdnZXJlZCBieSBgZXhlY19tbWFwYCBpbiBgZnMvZXhlYy5jYCwgYW5kIGBleGl0X21tX3JlbGVhc2VgLCB0cmlnZ2VyZWQgYnkgYGV4aXRfbW1gIGluIGBrZXJuZWwvZXhpdC5jYCwgYXJlIHRoZSBrZXkgcGxheWVycy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJlbGF0ZSB0byBmdXRleCBvcGVyYXRpb25zIGR1cmluZyBwcm9jZXNzIHRyYW5zaXRpb25zLlxuXG5JIHNlZSB0aGF0IGBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5gIGFuZCBgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZGAgYXJlIGNhbGxlZCBieSBgZXhlY19tbV9yZWxlYXNlYCBhbmQgYGV4ZWNfbW1hcGAgcmVzcGVjdGl2ZWx5LiBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgZm9jdXMuIE5vdywgbGV0J3MgZHJpbGwgZG93biBvbiB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGludm9sdmVkLlxuXG5UaGVyZWZvcmUsIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGFyZTpcblxuKiAgIGBmdXRleF9sb2NrX3BpYCAtIFRoZSBwcm9iYWJsZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgcHJpb3JpdHkgaW5oZXJpdGFuY2UgbG9ja3MgYXJlIGhhbmRsZWQuXG4qICAgYGZ1dGV4X3Byb3h5X3RyeWxvY2tfYXRvbWljYCBvciBgZnV0ZXhfcmVxdWV1ZWAgLSBDcnVjaWFsIGZvciB0aGUgcHJvY2VzcyBvZiBtYW5hZ2luZyB0aGUgcXVldWUgYW5kIHRoZSBsb2NrIHN0YXR1cy5cbiogICBgZXhlY19tbWFwYCAob3IgYGRvX2V4ZWN2ZWF0X2NvbW1vbmAgLyBgYnBybV9leGVjdmVgKSAtIFRoZSBlbnRyeSBwb2ludCBmb3IgZXhlY3V0aW9uIG9yIHJlbGF0ZWQgZXhlY3V0aW9uIG9wZXJhdGlvbnMuXG4qICAgYGV4aXRfbW1fcmVsZWFzZWAgKG9yIGBleGl0X21tYCAvIGBkb19leGl0YCkgLSBIb3cgbWVtb3J5IG1hbmFnZW1lbnQgcmVzb3VyY2VzIGFyZSBjbGVhbmVkIHVwIGR1cmluZyBleGl0LlxuXG5HaXZlbiB0aGUgcG90ZW50aWFsIGZvciBjb250ZW50aW9uIGR1cmluZyBleGVjIGFuZCBleGl0LCBJIHNob3VsZCBjaGVjayBob3cgdGhlc2UgaW50ZXJhY3Qgd2l0aCBmdXRleGVzLiBOZXh0IHVwIGlzIGxvb2tpbmcgaW50byB0aGUgYGZ1dGV4X2xvY2tfcGlgIGFuZCBgZnV0ZXhfcmVxdWV1ZWAgaW1wbGVtZW50YXRpb25zLiBUaGlzIHNob3VsZCByZXZlYWwgaG93IHByaW9yaXR5IGluaGVyaXRhbmNlIGFuZCBxdWV1ZSBtYW5hZ2VtZW50IGFyZSBwZXJmb3JtZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NzEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTM6MjQuODMxNjczMTIzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQyNTEzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9sb2NrX3BpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L2Z1dGV4Lmg9Mzg0PWV4dGVybiB2b2lkIGZ1dGV4X3FfdW5sb2NrKHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zODYtXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6Mzg3OmV4dGVybiBpbnQgZnV0ZXhfbG9ja19waV9hdG9taWModTMyIF9fdXNlciAqdWFkZHIsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIsXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzg4LVxcdFxcdFxcdFxcdHVuaW9uIGZ1dGV4X2tleSAqa2V5LFxcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9NDc1PWV4dGVybiBpbnQgZnV0ZXhfdW5sb2NrX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHZvaWQgX191c2VyICpwb3ApO1xcbmtlcm5lbC9mdXRleC9mdXRleC5oLTQ3Ni1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDo0Nzc6ZXh0ZXJuIGludCBmdXRleF9sb2NrX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGt0aW1lX3QgKnRpbWUsIGludCB0cnlsb2NrKTtcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC00NzgtXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYz0yMDM9c3RhdGljIGludCBhdHRhY2hfdG9fcGlfc3RhdGUodTMyIF9fdXNlciAqdWFkZHIsIHUzMiB1dmFsLFxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmMtMjE4LVxcdCAqIFdlIGdldCBoZXJlIHdpdGggaGItXFx1MDAzZWxvY2sgaGVsZCwgYW5kIGhhdmluZyBmb3VuZCBhXFxua2VybmVsL2Z1dGV4L3BpLmM6MjE5OlxcdCAqIGZ1dGV4X3RvcF93YWl0ZXIoKS4gVGhpcyBtZWFucyB0aGF0IGZ1dGV4X2xvY2tfcGkoKSBvZiBzYWlkIGZ1dGV4X3FcXG5rZXJuZWwvZnV0ZXgvcGkuYy0yMjAtXFx0ICogaGFzIGRyb3BwZWQgdGhlIGhiLVxcdTAwM2Vsb2NrIGluIGJldHdlZW4gZnV0ZXhfcXVldWUoKSBhbmQgZnV0ZXhfdW5xdWV1ZV9waSgpLFxcbmtlcm5lbC9mdXRleC9waS5jOjIyMTpcXHQgKiB3aGljaCBpbiB0dXJuIG1lYW5zIHRoYXQgZnV0ZXhfbG9ja19waSgpIHN0aWxsIGhhcyBhIHJlZmVyZW5jZSBvblxcbmtlcm5lbC9mdXRleC9waS5jLTIyMi1cXHQgKiBvdXIgcGlfc3RhdGUuXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy0yMjQtXFx0ICogVGhlIHdhaXRlciBob2xkaW5nIGEgcmVmZXJlbmNlIG9uIEBwaV9zdGF0ZSBhbHNvIHByb3RlY3RzIGFnYWluc3RcXG5rZXJuZWwvZnV0ZXgvcGkuYzoyMjU6XFx0ICogdGhlIHVubG9ja2VkIHB1dF9waV9zdGF0ZSgpIGluIGZ1dGV4X3VubG9ja19waSgpLCBmdXRleF9sb2NrX3BpKClcXG5rZXJuZWwvZnV0ZXgvcGkuYy0yMjYtXFx0ICogYW5kIGZ1dGV4X3dhaXRfcmVxdWV1ZV9waSgpIGFzIGl0IGNhbm5vdCBnbyB0byAwIGFuZCBjb25zZXF1ZW50bHlcXG4tLVxcbmtlcm5lbC9mdXRleC9waS5jPTMyMT1zdGF0aWMgaW50IGhhbmRsZV9leGl0X3JhY2UodTMyIF9fdXNlciAqdWFkZHIsIHUzMiB1dmFsLFxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmMtMzM4LVxcdCAqIHN5c19leGl0KClcXHRcXHRcXHRzeXNfZnV0ZXgoKVxcbmtlcm5lbC9mdXRleC9waS5jOjMzOTpcXHQgKiAgZG9fZXhpdCgpXFx0XFx0XFx0IGZ1dGV4X2xvY2tfcGkoKVxcbmtlcm5lbC9mdXRleC9waS5jOjM0MDpcXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnV0ZXhfbG9ja19waV9hdG9taWMoKVxcbmtlcm5lbC9mdXRleC9waS5jLTM0MS1cXHQgKiAgIGV4aXRfc2lnbmFscyh0c2spXFx0XFx0ICAgIE5vIHdhaXRlcnM6XFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYz00ODM9c3RhdGljIGludCBsb2NrX3BpX3VwZGF0ZV9hdG9taWModTMyIF9fdXNlciAqdWFkZHIsIHUzMiB1dmFsLCB1MzIgbmV3dmFsKVxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmMtNDk5LS8qKlxcbmtlcm5lbC9mdXRleC9waS5jOjUwMDogKiBmdXRleF9sb2NrX3BpX2F0b21pYygpIC0gQXRvbWljIHdvcmsgcmVxdWlyZWQgdG8gYWNxdWlyZSBhIHBpIGF3YXJlIGZ1dGV4XFxua2VybmVsL2Z1dGV4L3BpLmMtNTAxLSAqIEB1YWRkcjpcXHRcXHR0aGUgcGkgZnV0ZXggdXNlciBhZGRyZXNzXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy01MjItICovXFxua2VybmVsL2Z1dGV4L3BpLmM6NTIzOmludCBmdXRleF9sb2NrX3BpX2F0b21pYyh1MzIgX191c2VyICp1YWRkciwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYixcXG5rZXJuZWwvZnV0ZXgvcGkuYy01MjQtXFx0XFx0XFx0IHVuaW9uIGZ1dGV4X2tleSAqa2V5LFxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmM9ODg0PWludCBmaXh1cF9waV9vd25lcih1MzIgX191c2VyICp1YWRkciwgc3RydWN0IGZ1dGV4X3EgKnEsIGludCBsb2NrZWQpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy05MjktICovXFxua2VybmVsL2Z1dGV4L3BpLmM6OTMwOmludCBmdXRleF9sb2NrX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGt0aW1lX3QgKnRpbWUsIGludCB0cnlsb2NrKVxcbmtlcm5lbC9mdXRleC9waS5jLTkzMS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy05NTktXFxua2VybmVsL2Z1dGV4L3BpLmM6OTYwOlxcdFxcdHJldCA9IGZ1dGV4X2xvY2tfcGlfYXRvbWljKHVhZGRyLCBoYiwgXFx1MDAyNnEua2V5LCBcXHUwMDI2cS5waV9zdGF0ZSwgY3VycmVudCxcXG5rZXJuZWwvZnV0ZXgvcGkuYy05NjEtXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmV4aXRpbmcsIDApO1xcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmM9MTE0OD1zdGF0aWMgaW50IF9fZnV0ZXhfdW5sb2NrX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy0xMjAwLVxcdFxcdCAqXFxua2VybmVsL2Z1dGV4L3BpLmM6MTIwMTpcXHRcXHQgKiBTaW5jZSB0aGUgY2xlYW51cDogY2FzZSBpbiBmdXRleF9sb2NrX3BpKCkgcmVtb3ZlcyB0aGVcXG5rZXJuZWwvZnV0ZXgvcGkuYy0xMjAyLVxcdFxcdCAqIHJ0X3dhaXRlciB3aXRob3V0IGhvbGRpbmcgaGItXFx1MDAzZWxvY2ssIGl0IGlzIHBvc3NpYmxlIGZvclxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmMtMTIxNi1cXHRcXHQgKiBpcyBsZWF2aW5nLiBUaGUgZW50cnkgbmVlZHMgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IHNvIGFcXG5rZXJuZWwvZnV0ZXgvcGkuYzoxMjE3OlxcdFxcdCAqIG5ldyBmdXRleF9sb2NrX3BpKCkgaXMgbm90IHVzaW5nIHRoaXMgc3RhbGUgUEktc3RhdGUgd2hpbGVcXG5rZXJuZWwvZnV0ZXgvcGkuYy0xMjE4LVxcdFxcdCAqIHRoZSBmdXRleCBpcyBhdmFpbGFibGUgaW4gdXNlciBzcGFjZSBhZ2Fpbi5cXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM9MjMwPXZvaWQgcmVxdWV1ZV9waV93YWtlX2Z1dGV4KHN0cnVjdCBmdXRleF9xICpxLCB1bmlvbiBmdXRleF9rZXkgKmtleSxcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMjY3LSAqIFdha2UgdGhlIHRvcCB3YWl0ZXIgaWYgd2Ugc3VjY2VlZC4gIElmIHRoZSBjYWxsZXIgc3BlY2lmaWVkIHNldF93YWl0ZXJzLFxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MjY4OiAqIHRoZW4gZGlyZWN0IGZ1dGV4X2xvY2tfcGlfYXRvbWljKCkgdG8gZm9yY2Ugc2V0dGluZyB0aGUgRlVURVhfV0FJVEVSUyBiaXQuXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0yNjktICogaGIxIGFuZCBoYjIgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIuXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTI4MT1mdXRleF9wcm94eV90cnlsb2NrX2F0b21pYyh1MzIgX191c2VyICpwaWZ1dGV4LCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMSxcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMjk4LVxcdCAqIElmIHRoZSBjYWxsZXIgaW50ZW5kcyB0byByZXF1ZXVlIG1vcmUgdGhhbiAxIHdhaXRlciB0byBwaWZ1dGV4LFxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6Mjk5OlxcdCAqIGZvcmNlIGZ1dGV4X2xvY2tfcGlfYXRvbWljKCkgdG8gc2V0IHRoZSBGVVRFWF9XQUlURVJTIGJpdCBub3csXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zMDAtXFx0ICogYXMgd2UgaGF2ZSBtZWFucyB0byBoYW5kbGUgdGhlIHBvc3NpYmxlIGZhdWx0LiAgSWYgbm90LCBkb24ndCBzZXRcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMzM1LVxcdCAqL1xcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MzM2OlxcdHJldCA9IGZ1dGV4X2xvY2tfcGlfYXRvbWljKHBpZnV0ZXgsIGhiMiwga2V5MiwgcHMsIHRvcF93YWl0ZXItXFx1MDAzZXRhc2ssXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zMzctXFx0XFx0XFx0XFx0ICAgZXhpdGluZywgc2V0X3dhaXRlcnMpO1xcbi0tXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zNTAtXFx0XFx0LypcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjM1MTpcXHRcXHQgKiBmdXRleF9sb2NrX3BpX2F0b21pYygpIGRpZCBub3QgYWNxdWlyZSB0aGUgdXNlciBzcGFjZVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMzUyLVxcdFxcdCAqIGZ1dGV4LCBidXQgbWFuYWdlZCB0byBlc3RhYmxpc2ggdGhlIHByb3h5IGxvY2sgYW5kIHBpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTc4Nj1pbnQgZnV0ZXhfd2FpdF9yZXF1ZXVlX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTg5NS1cXHRcXHRcXHQgKiBXZSd2ZSBhbHJlYWR5IGJlZW4gcmVxdWV1ZWQsIGJ1dCBjYW5ub3QgcmVzdGFydFxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6ODk2OlxcdFxcdFxcdCAqIGJ5IGNhbGxpbmcgZnV0ZXhfbG9ja19waSgpIGRpcmVjdGx5LiBXZSBjb3VsZFxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtODk3LVxcdFxcdFxcdCAqIHJlc3RhcnQgdGhpcyBzeXNjYWxsLCBidXQgaXQgd291bGQgZGV0ZWN0IHRoYXRcXG4tLVxcbmtlcm5lbC9mdXRleC9zeXNjYWxscy5jPTEwOD1sb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXFxuLS1cXG5rZXJuZWwvZnV0ZXgvc3lzY2FsbHMuYy0xNDgtXFx0Y2FzZSBGVVRFWF9MT0NLX1BJMjpcXG5rZXJuZWwvZnV0ZXgvc3lzY2FsbHMuYzoxNDk6XFx0XFx0cmV0dXJuIGZ1dGV4X2xvY2tfcGkodWFkZHIsIGZsYWdzLCB0aW1lb3V0LCAwKTtcXG5rZXJuZWwvZnV0ZXgvc3lzY2FsbHMuYy0xNTAtXFx0Y2FzZSBGVVRFWF9VTkxPQ0tfUEk6XFxuLS1cXG5rZXJuZWwvZnV0ZXgvc3lzY2FsbHMuYy0xNTItXFx0Y2FzZSBGVVRFWF9UUllMT0NLX1BJOlxcbmtlcm5lbC9mdXRleC9zeXNjYWxscy5jOjE1MzpcXHRcXHRyZXR1cm4gZnV0ZXhfbG9ja19waSh1YWRkciwgZmxhZ3MsIE5VTEwsIDEpO1xcbmtlcm5lbC9mdXRleC9zeXNjYWxscy5jLTE1NC1cXHRjYXNlIEZVVEVYX1dBSVRfUkVRVUVVRV9QSTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTM6MjQuODgwMTA2Mzc4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMjA1OTM3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZ1dGV4IGFuZCBFeGVjdXRpb24gUGF0aCBJbnRlcmFjdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhlc2UgZnV0ZXggb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBwcmlvcml0eSBpbmhlcml0YW5jZSB2YXJpYW50cywgaW50ZXJhY3Qgd2l0aCBwcm9jZXNzIGV4ZWN1dGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgdXNlZCB3aXRoaW4gYGRvX2Z1dGV4YCBmb3IgdGhlIHZhcmlvdXMgcHJpb3JpdHkgaW5oZXJpdGFuY2UgRlVURVggb3BlcmF0aW9ucy4gSSBzZWUgdGhhdCBgZnV0ZXhfbG9ja19waWAgaGFuZGxlcyBgRlVURVhfTE9DS19QSWAsIGBGVVRFWF9MT0NLX1BJMmAsIGFuZCBgRlVURVhfVFJZTE9DS19QSWAuIFRoZW4sIGBmdXRleF93YWl0X3JlcXVldWVfcGlgIGlzIGVtcGxveWVkIGZvciBgRlVURVhfV0FJVF9SRVFVRVVFX1BJYCwgYW5kIGBmdXRleF9yZXF1ZXVlYCBnZXRzIHVzZWQgd2hlbiBhIGBGVVRFWF9DTVBfUkVRVUVVRV9QSWAgY2FsbCBpcyBtYWRlLlxuXG5UaGVyZWZvcmUsIHRoZSBjcml0aWNhbCBwYXRocyBJIG5lZWQgdG8gZXhhbWluZSBpbnZvbHZlIHRob3NlIHRocmVlIGZ1dGV4IGZ1bmN0aW9ucy4gQWRkaXRpb25hbGx5LCBjb25zaWRlcmluZyB0aGUgZHluYW1pYyBuYXR1cmUgb2YgcHJvY2VzcyBleGVjdXRpb24gYW5kIG1lbW9yeSBtYXBwaW5nIGR1cmluZyBhIG5ldyBwcm9ncmFtIGxhdW5jaCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBleGVjIHN5c3RlbSBjYWxsIGludGVyZmFjZXMgd2l0aCBhbGwgb2YgdGhpcy4gVGh1cywgSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IGBleGVjX21tYXBgIChvciBwb3RlbnRpYWxseSBgYnBybV9leGVjdmVgLCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uIGFuZCBzcGVjaWZpYyBhcmNoaXRlY3R1cmUpIHBsYXlzIGEgcm9sZSBpbiB0aGlzLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGBleGVjX21tYXBgIGluIGBmcy9leGVjLmNgLiBJJ20gaG9waW5nIHRvIGRpc2NvdmVyIGFueSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBmdXRleGVzIGFuZCB0aGUgbWVtb3J5IHNwYWNlIHNldHVwIG9yIHRlYXJkb3duIHRoYXQgaGFwcGVucyBkdXJpbmcgYSBwcm9jZXNzIGltYWdlIHN3YXAuIFVuZGVyc3RhbmRpbmcgdGhlc2UgaW50ZXJhY3Rpb25zIGlzIGtleSB0byBwaW5wb2ludGluZyBwb3RlbnRpYWwgcHJpb3JpdHkgaW52ZXJzaW9uIGlzc3VlcyBvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjUyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjUzOjMwLjAwMDcwMjgzOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4NzMyMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXhlY19tbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4ZWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leGVjLmM9MTE3PWJvb2wgcGF0aF9ub2V4ZWMoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXFxuLS1cXG5mcy9leGVjLmMtMTI3LS8qXFxuZnMvZXhlYy5jOjEyODogKiBUaGUgbmFzY2VudCBicHJtLVxcdTAwM2VtbSBpcyBub3QgdmlzaWJsZSB1bnRpbCBleGVjX21tYXAoKSBidXQgaXQgY2FuXFxuZnMvZXhlYy5jLTEyOS0gKiB1c2UgYSBsb3Qgb2YgbWVtb3J5LCBhY2NvdW50IHRoZXNlIHBhZ2VzIGluIGN1cnJlbnQtXFx1MDAzZW1tIHRlbXBvcmFyeVxcbi0tXFxuZnMvZXhlYy5jPTgzND1FWFBPUlRfU1lNQk9MKHJlYWRfY29kZSk7XFxuLS1cXG5mcy9leGVjLmMtODQyLSAqL1xcbmZzL2V4ZWMuYzo4NDM6c3RhdGljIGludCBleGVjX21tYXAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG5mcy9leGVjLmMtODQ0LXtcXG4tLVxcbmZzL2V4ZWMuYy04ODAtXFx0dGFza19sb2NrKHRzayk7XFxuZnMvZXhlYy5jOjg4MTpcXHRtZW1iYXJyaWVyX2V4ZWNfbW1hcChtbSk7XFxuZnMvZXhlYy5jLTg4Mi1cXG4tLVxcbmZzL2V4ZWMuYz0xMDk5PXZvaWQgX19zZXRfdGFza19jb21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBjb25zdCBjaGFyICpidWYsIGJvb2wgZXhlYylcXG4tLVxcbmZzL2V4ZWMuYy0xMTEyLSAqIHNpZ25hbCAodmlhIGRlX3RocmVhZCgpIG9yIGNvcmVkdW1wKSwgb3Igd2lsbCBoYXZlIFNFR1YgcmFpc2VkXFxuZnMvZXhlYy5jOjExMTM6ICogKGFmdGVyIGV4ZWNfbW1hcCgpKSBieSBzZWFyY2hfYmluYXJ5X2hhbmRsZXIgKHNlZSBiZWxvdykuXFxuZnMvZXhlYy5jLTExMTQtICovXFxuZnMvZXhlYy5jPTExMTU9aW50IGJlZ2luX25ld19leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtKVxcbi0tXFxuZnMvZXhlYy5jLTExNTQtXFx0LypcXG5mcy9leGVjLmM6MTE1NTpcXHQgKiBNdXN0IGJlIGNhbGxlZCBfYmVmb3JlXyBleGVjX21tYXAoKSBhcyBicHJtLVxcdTAwM2VtbSBpc1xcbmZzL2V4ZWMuYy0xMTU2LVxcdCAqIG5vdCB2aXNpYmxlIHVudGlsIHRoZW4uIERvaW5nIGl0IGhlcmUgYWxzbyBlbnN1cmVzXFxuLS1cXG5mcy9leGVjLmMtMTE3MS1cXHRhY2N0X2FyZ19zaXplKGJwcm0sIDApO1xcbmZzL2V4ZWMuYzoxMTcyOlxcdHJldHZhbCA9IGV4ZWNfbW1hcChicHJtKTtcXG5mcy9leGVjLmMtMTE3My1cXHRpZiAocmV0dmFsKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1MzozMC4wNDg1ODA5NTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxOTQ3NzgyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXaGVyZSBhbSBJIGxpa2VseSB0byBmaW5kIHRoZSByb290IG9mIHRoaXMgYmVoYXZpb3I/XG5cbioqUm9vdCBDYXVzZSBJbnZlc3RpZ2F0aW9uKipcblxuUmlnaHQsIGBleGVjX21tYXBgLi4uIHRoYXQncyBhIGtleSBmdW5jdGlvbiBmb3IgbWVtb3J5IG1hcHBpbmcgZHVyaW5nIGV4ZWN1dGlvbi4gVGhlIGNhbGwgY2hhaW4gZm9yIHRoYXQsIGZyb20gd2hhdCBJJ3ZlIHNlZW4sIGdvZXMgdGhyb3VnaCBgYmVnaW5fbmV3X2V4ZWNgLiBUaGF0IGZ1bmN0aW9uIGl0c2VsZiBpcyBjYWxsZWQgYnkgdGhlIGBsb2FkX2VsZl9iaW5hcnlgIGZ1bmN0aW9uIGFzIHdlbGwgYXMgb3RoZXIgYmluYXJ5IGhhbmRsZXJzLiBTbyB0aGF0IG1lYW5zIGBiZWdpbl9uZXdfZXhlY2Agb3IgcG90ZW50aWFsbHkgYGJwcm1fZXhlY3ZlYCBhcmUgdmVyeSBsaWtlbHkgc3BvdHMgdG8gc3RhcnQuIExldCdzIHN0YXJ0IHdpdGggYGJlZ2luX25ld19leGVjYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzAzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTM6MzMuNzY4MDYyMjQ2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTg0NjQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiZWdpbl9uZXdfZXhlY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYmluZm10X2VsZi5jPTgzMj1zdGF0aWMgaW50IGxvYWRfZWxmX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvYmluZm10X2VsZi5jLTEwMDktXFx0LyogRmx1c2ggYWxsIHRyYWNlcyBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgZXhlY3V0YWJsZSAqL1xcbmZzL2JpbmZtdF9lbGYuYzoxMDEwOlxcdHJldHZhbCA9IGJlZ2luX25ld19leGVjKGJwcm0pO1xcbmZzL2JpbmZtdF9lbGYuYy0xMDExLVxcdGlmIChyZXR2YWwpXFxuLS1cXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM9MTgyPXN0YXRpYyBpbnQgbG9hZF9lbGZfZmRwaWNfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtMzQ0LVxcdC8qIGZsdXNoIGFsbCB0cmFjZXMgb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIGV4ZWN1dGFibGUgKi9cXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM6MzQ1OlxcdHJldHZhbCA9IGJlZ2luX25ld19leGVjKGJwcm0pO1xcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy0zNDYtXFx0aWYgKHJldHZhbClcXG4tLVxcbmZzL2JpbmZtdF9mbGF0LmM9NDA2PXN0YXRpYyBpbnQgbG9hZF9mbGF0X2ZpbGUoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG4tLVxcbmZzL2JpbmZtdF9mbGF0LmMtNTA4LVxcdC8qIEZsdXNoIGFsbCB0cmFjZXMgb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIGV4ZWN1dGFibGUgKi9cXG5mcy9iaW5mbXRfZmxhdC5jOjUwOTpcXHRyZXQgPSBiZWdpbl9uZXdfZXhlYyhicHJtKTtcXG5mcy9iaW5mbXRfZmxhdC5jLTUxMC1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZXhlYy5jPTI1OD1zdGF0aWMgaW50IGJwcm1fbW1faW5pdChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvZXhlYy5jLTI2Ny1cXG5mcy9leGVjLmM6MjY4OlxcdC8qIFN0YWdlZCBmb3Igd291bGRfZHVtcCgpIG5hcnJvd2luZzsgY29uc3VtZWQgYnkgYmVnaW5fbmV3X2V4ZWMoKS4gKi9cXG5mcy9leGVjLmMtMjY5LVxcdGJwcm0tXFx1MDAzZXVzZXJfbnMgPSBnZXRfdXNlcl9ucyhjdXJyZW50X3VzZXJfbnMoKSk7XFxuLS1cXG5mcy9leGVjLmM9MTA5OT12b2lkIF9fc2V0X3Rhc2tfY29tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgY29uc3QgY2hhciAqYnVmLCBib29sIGV4ZWMpXFxuLS1cXG5mcy9leGVjLmMtMTExNC0gKi9cXG5mcy9leGVjLmM6MTExNTppbnQgYmVnaW5fbmV3X2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pXFxuZnMvZXhlYy5jLTExMTYte1xcbi0tXFxuZnMvZXhlYy5jLTEzMTQtfVxcbmZzL2V4ZWMuYzoxMzE1OkVYUE9SVF9TWU1CT0woYmVnaW5fbmV3X2V4ZWMpO1xcbmZzL2V4ZWMuYy0xMzE2LVxcbi0tXFxuZnMvZXhlYy5jPTE2ODA9c3RhdGljIGludCBzZWFyY2hfYmluYXJ5X2hhbmRsZXIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2V4ZWMuYy0xNzEyLVxcbmZzL2V4ZWMuYzoxNzEzOi8qIGJpbmZtdCBoYW5kbGVycyB3aWxsIGNhbGwgYmFjayBpbnRvIGJlZ2luX25ld19leGVjKCkgb24gc3VjY2Vzcy4gKi9cXG5mcy9leGVjLmMtMTcxNC1zdGF0aWMgaW50IGV4ZWNfYmlucHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5mcy9leGVjLmM9MTc1OT1zdGF0aWMgaW50IGJwcm1fZXhlY3ZlKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5mcy9leGVjLmMtMTc2OC1cXHQgKiBDaGVjayBmb3IgdW5zYWZlIGV4ZWN1dGlvbiBzdGF0ZXMgYmVmb3JlIGV4ZWNfYmlucHJtKCksIHdoaWNoXFxuZnMvZXhlYy5jOjE3Njk6XFx0ICogd2lsbCBjYWxsIGJhY2sgaW50byBiZWdpbl9uZXdfZXhlYygpLCBpbnRvIGJwcm1fY3JlZHNfZnJvbV9maWxlKCksXFxuZnMvZXhlYy5jLTE3NzAtXFx0ICogd2hlcmUgc2V0dWlkLW5lc3MgaXMgZXZhbHVhdGVkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1MzozMy44NDM5MTQ5MDhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA5NjUyMzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFNlY3VyaXR5IFZ1bG5lcmFiaWxpdGllcyBEdXJpbmcgUHJvY2VzcyBFeGVjdXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gcHJvY2VzcyBleGVjdXRpb24gYW5kIGxvb2tpbmcgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBicHJtX2V4ZWN2ZWAgaXMgYSBwcm9taXNpbmcgYXJlYSB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBMZXQncyBzZWUuLi4gd2hhdCBhYm91dCBgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luYCBhbmQgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRgPyBUaGV5J3JlIG9mdGVuIHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCwgc28gaXQgbWFrZXMgc2Vuc2UgdG8gY2hlY2sgdGhvc2UuIEFoLCBJIHNlZSwgdGhleSdyZSBjYWxsZWQgZnJvbSBgZXhlY19tbV9yZWxlYXNlYCBhbmQgYGV4ZWNfbW1hcGAuIFRoYXQncyBpbnRlcmVzdGluZy4gTm93LCBgZXhlY19tbV9yZWxlYXNlYCBpcyBhbHNvIGNhbGxlZCBmcm9tIGBleGVjX21tYXBgLiBXYWl0IGEgc2Vjb25k4oCmIHRoYXQgbG9va3MgbGlrZSBhIGNhbGwgd2l0aGluIGBleGVjX21tYXBgIGluIGBmcy9leGVjLmNgLCBzbyBJIHJlYWxseSBzaG91bGQgZG91YmxlLWNoZWNrIGBmcy9leGVjLmNgIHRvIHNlZSBpZiB0aGVyZSdzIGFueXRoaW5nIG1pc3NlZCBvciB0aGF0IHdhcnJhbnRzIGZ1cnRoZXIgYW5hbHlzaXMuIEJhY2sgdG8gdGhlIGNvZGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzU3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjUzOjQyLjk0MDQ0MDM5OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzMDkwMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXhlY19tbV9yZWxlYXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4ZWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leGVjLmM9ODQzPXN0YXRpYyBpbnQgZXhlY19tbWFwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5mcy9leGVjLmMtODU3LVxcdG9sZF9tbSA9IGN1cnJlbnQtXFx1MDAzZW1tO1xcbmZzL2V4ZWMuYzo4NTg6XFx0ZXhlY19tbV9yZWxlYXNlKHRzaywgb2xkX21tKTtcXG5mcy9leGVjLmMtODU5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1Mzo0Mi45ODk3NTU3ODNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI4NDAzMjcxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1dGV4IFBJIE93bmVyIFJlbGVhc2UgZm9yIEV4ZWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBleGVjX21tX3JlbGVhc2VgIGZ1bmN0aW9uIGFuZCBpdCdzIGNhbGxlZCByaWdodCBmcm9tIHdpdGhpbiBgZXhlY19tbWFwYC4gVGhpcyBwYXRjaCBpcyBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGEgcmFjZSBjb25kaXRpb24gaW52b2x2aW5nIGZ1dGV4IFBJIG93bmVycyBkdXJpbmcgYW4gZXhlY3ZlLiBJIHNlZSB0aGF0IGBmdXRleF9leGVjX3JlbGVhc2VgIGlzIGJlaW5nIGJyb2tlbiBkb3duIGludG8gYGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbmAgYW5kIGBmdXRleF9leGVjX3JlbGVhc2VfZW5kYC4gVGhlIGBiZWdpbmAgdmVyc2lvbiBnb2VzIGludG8gYGV4ZWNfbW1fcmVsZWFzZWAsIHNvIGl0J3MgaGFwcGVuaW5nIGVhcmx5IGluIGBleGVjX21tYXBgLCBiZWZvcmUgdGhlIG5ldyBtZW1vcnkgbWFwIChtbSkgaXMgZXZlbiBzZXQgdXAuIFRoZSBgZW5kYCB2ZXJzaW9uIGtpY2tzIGluIGxhdGVyLCBhZnRlciB0aGUgbmV3IGBtbWAgaXMgaW5zdGFsbGVkLlxuXG5UaGUgY29yZSBvZiB0aGUgZml4IGlzIHRvIG1hbmFnZSB0aGUgc3RhdGUgb2YgdGhlIGZ1dGV4IFBJIG93bmVyIGR1cmluZyB0aGUgZXhlYyBwcm9jZXNzLiBJdCdzIG1lYW50IHRvIGFkZHJlc3MgdGhlIHNjZW5hcmlvIHdoZXJlIHRoZSBQSSBvd25lciBpcyBlaXRoZXIgZXhpdGluZyBvciwgaW4gdGhpcyBjYXNlLCBwZXJmb3JtaW5nIGFuIGBleGVjYC4gSSBzZWUgdGhlIGtleSBjaGVjayBpcyBpbiBgYXR0YWNoX3RvX3BpX293bmVyYDpcblxuYGBgY1xuXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTU1VKSBcdTAwMjZcdTAwMjYgZnV0ZXhfa2V5X2lzX3ByaXZhdGUoa2V5KSBcdTAwMjZcdTAwMjZcblx0ICAgIFJFQURfT05DRShwLVx1MDAzZW1tKSAhPSBrZXktXHUwMDNlcHJpdmF0ZS5tbSkge1xuXHRcdHJhd19zcGluX3VubG9ja19pcnEoXHUwMDI2cC1cdTAwM2VwaV9sb2NrKTtcblx0XHRwdXRfdGFza19zdHJ1Y3QocCk7XG5cdFx0cmV0dXJuIC1FU1JDSDtcblx0fVxuYGBgXG5cbkVzc2VudGlhbGx5LCBpZiB0aGUgdGFzaydzIGBtbWAgaGFzIGNoYW5nZWQgKmFmdGVyKiB0aGUgaW5pdGlhbCBgZnV0ZXhfa2V5YCBjaGVjayAodXNpbmcgYFJFQURfT05DRWAgdG8gZW5zdXJlIHdlIHNlZSB0aGUgbGF0ZXN0IHZhbHVlKSwgd2UgKmRvbid0KiBhdHRhY2ggdG8gaXQuIEl0J3MgYSBjcml0aWNhbCBzYWZldHkgbWVhc3VyZSB0byBhdm9pZCBzdGFsZSBwb2ludGVycyBvciBpbmNvcnJlY3QgYXNzb2NpYXRpb25zIGFmdGVyIHRoZSBleGVjLiBJIHRoaW5rIHRoZSBpZGVhIGlzIHRoYXQgdGhlIHRhc2sgaXMgXCJleGVjLWluZ1wiIGFuZCBpdHMgbW0gaGFzIGNoYW5nZWQsIHNvIHdlIGNhbm5vdCBhdHRhY2ggdG8gaXQgYW55IG1vcmUsIG9yIGl0IHdpbGwgY2F1c2UgYW4gaXNzdWUuXG5cblRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBhcmUgYEZVVEVYYCBhbmQgYEZVVEVYX1BJYCwgb2YgY291cnNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBGVVRFWF9QSWAgaXMgYWN0dWFsbHkgZGVmaW5lZCwgdGhhdCdzIGltcG9ydGFudCBmb3IgdGhlIHdob2xlIHRoaW5nIHRvIHdvcmssIGFuZCB0byBiZSB0ZXN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTk4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjUzOjUxLjI3Mzc5MTA2NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE2NjI4NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRlVURVhfUElcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xODM0PWNvbmZpZyBGVVRFWFxcbi0tXFxuaW5pdC9LY29uZmlnLTE4NDMtXFxuaW5pdC9LY29uZmlnOjE4NDQ6Y29uZmlnIEZVVEVYX1BJXFxuaW5pdC9LY29uZmlnLTE4NDUtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1Mzo1MS4zMjU0NTk1MDhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQxMjY2Njc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgYEZVVEVYX1BJYCBhbmQgYE1NVWAqKlxuXG5Pa2F5LCBzbyBgRlVURVhfUElgIGlzIGRlZmluaXRlbHkgYSB0aGluZywgZ29vZC4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCwgb3IgYE1NVWAsIGlzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGlzIHB1enpsZS4gVGhlIGNvZGUgdXNlcyBgSVNfRU5BQkxFRChDT05GSUdfTU1VKWAsIHNvIHRoZSBkZXBlbmRlbmN5IGlzIGNsZWFybHkgdGhlcmUuIEFsdGhvdWdoIGl0J3MgdXN1YWxseSBlbmFibGVkIGJ5IGRlZmF1bHQgb24gbW9zdCBvZiB0aGUgYXJjaGl0ZWN0dXJlcyBJIHdvcmsgd2l0aCwgaXQncyBhIGdvb2QgcHJhY3RpY2UgdG8gY29uZmlybS4gV2l0aCB0aGUgZGVwZW5kZW5jeSBlc3RhYmxpc2hlZCwgSSdsbCBtb3ZlIG9uIHRvIGEgZGVlcGVyIGRpdmUuIExldCdzIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEZVVEVYX1BJYCBpdHNlbGYgYW5kIHNlZSB3aGF0IG90aGVyIGNvbmRpdGlvbnMgb3IgbW9kdWxlcyBpdCByZWxpZXMgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDYzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTM6NTUuNzM4MTI4MjgyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODkwMTkwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlVURVhfUElcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xODM0PWNvbmZpZyBGVVRFWFxcbi0tXFxuaW5pdC9LY29uZmlnLTE4NDMtXFxuaW5pdC9LY29uZmlnOjE4NDQ6Y29uZmlnIEZVVEVYX1BJXFxuaW5pdC9LY29uZmlnLTE4NDUtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1Mzo1NS43ODcwNDg2MDdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwNzQ3NTE5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCB3aGVyZSdzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHVudGFuZ2xpbmcgdGhpcyBjb25maWd1cmF0aW9uIGlzc3VlPyBHaXZlbiB0aGUgbmF0dXJlIG9mIHdoYXQgSSdtIGxvb2tpbmcgZm9yLCBgaW5pdC9LY29uZmlnYCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJIHdhbnQgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbnMsIGFuZCBJJ20gcHJldHR5IHN1cmUgSSByZW1lbWJlciB0aGVyZSBiZWluZyBzb21lIGNydWNpYWwgZGVmaW5pdGlvbnMgYXJvdW5kIGxpbmUgMTg0NC4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIGFyZWEgZm9yIGxvb2tpbmcgYXQgYmFzZSBvcHRpb25zIG9yIGNvcmUgbW9kdWxlIHNldHRpbmdzLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlIOKAkyBob3BlZnVsbHksIEkgY2FuIHNwb3QgdGhlIGtleSBkZXBlbmRlbmNpZXMgb3IgZGVmYXVsdCBiZWhhdmlvcnMgdGhhdCBhcmUgY2F1c2luZyB0aGUgY3VycmVudCBoaWNjdXAuIEl0J3MgYSBiaXQgb2YgYSBjb2RlIGFyY2hhZW9sb2d5IHByb2plY3QsIGJ1dCBzdGFydGluZyB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGRlZmluaXRpb25zIGlzIGFsbW9zdCBhbHdheXMgdGhlIHJpZ2h0IHdheSB0byBhcHByb2FjaCB0aGVzZSBraW5kcyBvZiBwcm9ibGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzODQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1NDowMC4yOTQ1MjYyODlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODM0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODM0OlxcdGNvbmZpZyBGVVRFWFxcbjE4MzU6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGZ1dGV4IHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbjE4MzY6XFx0XFx0ZGVwZW5kcyBvbiAhKFNQQVJDMzIgXFx1MDAyNlxcdTAwMjYgU01QKVxcbjE4Mzc6XFx0XFx0ZGVmYXVsdCB5XFxuMTgzODpcXHRcXHRpbXBseSBSVF9NVVRFWEVTXFxuMTgzOTpcXHRcXHRoZWxwXFxuMTg0MDpcXHRcXHQgIERpc2FibGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRoZSBrZXJuZWwgdG8gYmUgYnVpbHQgd2l0aG91dFxcbjE4NDE6XFx0XFx0ICBzdXBwb3J0IGZvciBcXFwiZmFzdCB1c2Vyc3BhY2UgbXV0ZXhlc1xcXCIuICBUaGUgcmVzdWx0aW5nIGtlcm5lbCBtYXkgbm90XFxuMTg0MjpcXHRcXHQgIHJ1biBnbGliYy1iYXNlZCBhcHBsaWNhdGlvbnMgY29ycmVjdGx5LlxcbjE4NDM6XFx0XFxuMTg0NDpcXHRjb25maWcgRlVURVhfUElcXG4xODQ1OlxcdFxcdGJvb2xcXG4xODQ2OlxcdFxcdGRlcGVuZHMgb24gRlVURVggXFx1MDAyNlxcdTAwMjYgUlRfTVVURVhFU1xcbjE4NDc6XFx0XFx0ZGVmYXVsdCB5XFxuMTg0ODpcXHRcXG4xODQ5OlxcdGNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcXG4xODUwOlxcdFxcdGJvb2xcXG4xODUxOlxcdFxcdGRlcGVuZHMgb24gRlVURVggXFx1MDAyNlxcdTAwMjYgIUJBU0VfU01BTEwgXFx1MDAyNlxcdTAwMjYgTU1VXFxuMTg1MjpcXHRcXHRkZWZhdWx0IHlcXG4xODUzOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1NDowMC4yOTQ2NTQ0NjlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTk5ODI3NjMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFbmFibGluZyBGdXRleCBhbmQgUmVhbC1UaW1lIE11dGV4ZXMgZm9yIFByaW9yaXR5IEluaGVyaXRhbmNlIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBgRlVURVhfUElgIGlzIGluaGVyZW50bHkgcmVsaWFudCBvbiBib3RoIGBGVVRFWGAgYW5kIGBSVF9NVVRFWEVTYC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIFRoZXJlZm9yZSwgd2UgYWJzb2x1dGVseSAqbXVzdCogZW5hYmxlIHRob3NlIHR3byBvcHRpb25zIGFzIHByZXJlcXVpc2l0ZXMuIFRoaXMgaXMgZnVuZGFtZW50YWwuXG5cbk5vdywgbGV0J3MgcGlucG9pbnQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSBnb2luZyB0byBkZW1hbmQgb3VyIGF0dGVudGlvbiwgdGhlIGFyZWFzIHdoZXJlIHRoZSBwcmlvcml0eSBpbmhlcml0YW5jZSBsb2dpYyBpcyBtb3N0IGNyaXRpY2FsLiBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBmb2N1cyBvbjogYGZ1dGV4X2xvY2tfcGlgLCBgZnV0ZXhfd2FpdF9yZXF1ZXVlX3BpYCwgYGZ1dGV4X3JlcXVldWVgLCBhbmQgYGRvX2Z1dGV4YC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cy5cblxuV2FpdCBhIHNlY29uZC4uLkkgc2VlIGBicHJtX2V4ZWN2ZWAgb24gdGhpcyBsaXN0LiBEaWRuJ3QgSSBqdXN0IHNwb3QgdGhhdD8gSG1tbS4gSXMgdGhpcyBzdGF0aWMsIEkgd29uZGVyPyBMZXQgbWUgY2hlY2sgYGZzL2V4ZWMuY2AgYW5kIG1ha2Ugc3VyZSBpdCBpcyBub3QgdXNlZCBpbiBhbm90aGVyIGNvbnRleHQuIEJlc3QgdG8gYmUgc3VyZSBvZiB0aGUgc2NvcGUgb2YgdGhpcyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4ODEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1NDoxMC4yOTI5MzQzNjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzgyMzM0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicHJtX2V4ZWN2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leGVjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXhlYy5jPTE0MzA9c3RhdGljIHN0cnVjdCBsaW51eF9iaW5wcm0gKmFsbG9jX2Jwcm0oaW50IGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLCBpbnQgZmxhZ3MpXFxuLS1cXG5mcy9leGVjLmMtMTQ4MC1cXHQgKiBzdG9wIGp1c3QgYWZ0ZXIgdGhlIHNlY3VyaXR5X2Jwcm1fY3JlZHNfZm9yX2V4ZWMoKSBjYWxsIGluXFxuZnMvZXhlYy5jOjE0ODE6XFx0ICogYnBybV9leGVjdmUoKS4gIEluZGVlZCwgdGhlIGtlcm5lbCBzaG91bGQgbm90IHRyeSB0byBwYXJzZSB0aGVcXG5mcy9leGVjLmMtMTQ4Mi1cXHQgKiBjb250ZW50IG9mIHRoZSBmaWxlIHdpdGggZXhlY19iaW5wcm0oKSBub3IgY2hhbmdlIHRoZSBjYWxsaW5nXFxuLS1cXG5mcy9leGVjLmM9MTcxND1zdGF0aWMgaW50IGV4ZWNfYmlucHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5mcy9leGVjLmMtMTc1OC1cXG5mcy9leGVjLmM6MTc1OTpzdGF0aWMgaW50IGJwcm1fZXhlY3ZlKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuZnMvZXhlYy5jLTE3NjAte1xcbi0tXFxuZnMvZXhlYy5jPTE4MTM9c3RhdGljIGludCBkb19leGVjdmVhdF9jb21tb24oaW50IGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLFxcbi0tXFxuZnMvZXhlYy5jLTE4ODAtXFxuZnMvZXhlYy5jOjE4ODE6XFx0cmV0dXJuIGJwcm1fZXhlY3ZlKGJwcm0pO1xcbmZzL2V4ZWMuYy0xODgyLX1cXG4tLVxcbmZzL2V4ZWMuYz0xODg0PWludCBrZXJuZWxfZXhlY3ZlKGNvbnN0IGNoYXIgKmtlcm5lbF9maWxlbmFtZSxcXG4tLVxcbmZzL2V4ZWMuYy0xOTI2LVxcbmZzL2V4ZWMuYzoxOTI3OlxcdHJldHVybiBicHJtX2V4ZWN2ZShicHJtKTtcXG5mcy9leGVjLmMtMTkyOC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjU0OjEwLjcyNjc2MjkwNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjAzNDg4NzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqQW5hbHl6aW5nIGBkb19leGVjdmVhdF9jb21tb25gIGFuZCBJdHMgQ2FsbGVycyoqXG5cbk9rYXksIHNvIGBkb19leGVjdmVhdF9jb21tb25gIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3Rpbmc7IGl0IG1lYW5zIGl0J3Mgb25seSB2aXNpYmxlIHdpdGhpbiBpdHMgY29tcGlsYXRpb24gdW5pdCwgd2hpY2ggbGltaXRzIGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIHBvaW50cyBvZiBpbnRlcmFjdGlvbi4gVGhhdCdzIGdyZWF0IGZvciBjb2RlIG9yZ2FuaXphdGlvbiwgZ2VuZXJhbGx5IHNwZWFraW5nLCBidXQgaXQgbWVhbnMgSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2hlbiBmaWd1cmluZyBvdXQgaG93IGl0J3MgKmFjdHVhbGx5KiB1c2VkIHdpdGhpbiB0aGUgc3lzdGVtLlxuXG5NeSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyB3aGVyZSBgZG9fZXhlY3ZlYXRfY29tbW9uYCBpcyBjYWxsZWQuIEZpbmRpbmcgdGhlIGNhbGxlcnMgd2lsbCBwcm92aWRlIGNydWNpYWwgY29udGV4dCDigJMgdGhlIHJlYXNvbnMgZm9yIGl0cyBpbnZvY2F0aW9uLCB0aGUgZGF0YSBpdCdzIHBhc3NlZCwgYW5kIHRoZSBvdmVyYWxsIGV4ZWN1dGlvbiBmbG93IGl0J3MgZW1iZWRkZWQgd2l0aGluLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGV4ZWN2ZWF0IGltcGxlbWVudGF0aW9uLiBMZXQncyBkaWcgaW50byB0aGUgY2FsbCBncmFwaCBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEkgZXhwZWN0IGl0J3MgZ29pbmcgdG8gYmUgY2VudHJhbCB0byB0aGUgb3ZlcmFsbCBleGVjdmVhdCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjQwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTQ6MjIuNzYxNjUyNzg0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTE2MTA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19leGVjdmVhdF9jb21tb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXhlYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4ZWMuYz00MDM9c3RhdGljIGludCBicHJtX3N0YWNrX2xpbWl0cyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvZXhlYy5jLTQzNS1cXHQgKiBhcmdjIGNhbiBuZXZlciBiZSAwLCB0byBrZWVwIHRoZW0gZnJvbSB3YWxraW5nIGVudnAgYnkgYWNjaWRlbnQuXFxuZnMvZXhlYy5jOjQzNjpcXHQgKiBTZWUgZG9fZXhlY3ZlYXRfY29tbW9uKCkuXFxuZnMvZXhlYy5jLTQzNy1cXHQgKi9cXG4tLVxcbmZzL2V4ZWMuYz0xNzU5PXN0YXRpYyBpbnQgYnBybV9leGVjdmUoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2V4ZWMuYy0xODEyLVxcbmZzL2V4ZWMuYzoxODEzOnN0YXRpYyBpbnQgZG9fZXhlY3ZlYXRfY29tbW9uKGludCBmZCwgc3RydWN0IGZpbGVuYW1lICpmaWxlbmFtZSxcXG5mcy9leGVjLmMtMTgxNC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgdXNlcl9hcmdfcHRyIGFyZ3YsXFxuLS1cXG5mcy9leGVjLmM9MTk0OD1TWVNDQUxMX0RFRklORTMoZXhlY3ZlLFxcbi0tXFxuZnMvZXhlYy5jLTE5NTMtXFx0Q0xBU1MoZmlsZW5hbWUsIG5hbWUpKGZpbGVuYW1lKTtcXG5mcy9leGVjLmM6MTk1NDpcXHRyZXR1cm4gZG9fZXhlY3ZlYXRfY29tbW9uKEFUX0ZEQ1dELCBuYW1lLFxcbmZzL2V4ZWMuYy0xOTU1LVxcdFxcdFxcdFxcdCAgbmF0aXZlX2FyZyhhcmd2KSwgbmF0aXZlX2FyZyhlbnZwKSwgMCk7XFxuLS1cXG5mcy9leGVjLmM9MTk1OD1TWVNDQUxMX0RFRklORTUoZXhlY3ZlYXQsXFxuLS1cXG5mcy9leGVjLmMtMTk2NC1cXHRDTEFTUyhmaWxlbmFtZV91ZmxhZ3MsIG5hbWUpKGZpbGVuYW1lLCBmbGFncyk7XFxuZnMvZXhlYy5jOjE5NjU6XFx0cmV0dXJuIGRvX2V4ZWN2ZWF0X2NvbW1vbihmZCwgbmFtZSxcXG5mcy9leGVjLmMtMTk2Ni1cXHRcXHRcXHRcXHQgIG5hdGl2ZV9hcmcoYXJndiksIG5hdGl2ZV9hcmcoZW52cCksIGZsYWdzKTtcXG4tLVxcbmZzL2V4ZWMuYz0xOTc2PUNPTVBBVF9TWVNDQUxMX0RFRklORTMoZXhlY3ZlLCBjb25zdCBjaGFyIF9fdXNlciAqLCBmaWxlbmFtZSxcXG4tLVxcbmZzL2V4ZWMuYy0xOTgwLVxcdENMQVNTKGZpbGVuYW1lLCBuYW1lKShmaWxlbmFtZSk7XFxuZnMvZXhlYy5jOjE5ODE6XFx0cmV0dXJuIGRvX2V4ZWN2ZWF0X2NvbW1vbihBVF9GRENXRCwgbmFtZSxcXG5mcy9leGVjLmMtMTk4Mi1cXHRcXHRcXHRcXHQgIGNvbXBhdF9hcmcoYXJndiksIGNvbXBhdF9hcmcoZW52cCksIDApO1xcbi0tXFxuZnMvZXhlYy5jPTE5ODU9Q09NUEFUX1NZU0NBTExfREVGSU5FNShleGVjdmVhdCwgaW50LCBmZCxcXG4tLVxcbmZzL2V4ZWMuYy0xOTkxLVxcdENMQVNTKGZpbGVuYW1lX3VmbGFncywgbmFtZSkoZmlsZW5hbWUsIGZsYWdzKTtcXG5mcy9leGVjLmM6MTk5MjpcXHRyZXR1cm4gZG9fZXhlY3ZlYXRfY29tbW9uKGZkLCBuYW1lLFxcbmZzL2V4ZWMuYy0xOTkzLVxcdFxcdFxcdFxcdCAgY29tcGF0X2FyZyhhcmd2KSwgY29tcGF0X2FyZyhlbnZwKSwgZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1NDoyMi44MTI4MTkyODlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQzNTQ0MzExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBGdXRleGVzIGFuZCBFeGVjdXRpb24qKlxuXG5Pa2F5LCBzbyBgZG9fZXhlY3ZlYXRfY29tbW9uYCBpcyB0aGUgd29ya2hvcnNlIGJlaGluZCBib3RoIGBleGVjdmVgIGFuZCBgZXhlY3ZlYXRgLiBUaGF0J3MgZ29vZCwgaXQgc2ltcGxpZmllcyB0aGluZ3MuIFN5emthbGxlciB3aWxsIGhhbmRsZSBmdXp6aW5nIHRob3NlIHN5c3RlbSBjYWxscyBkaXJlY3RseSwgc28gSSBkb24ndCBuZWVkIHRvIGV4cGxpY2l0bHkgdGFyZ2V0IHRoZSBjb21tb24gZnVuY3Rpb24uIEl0IG1ha2VzIHNlbnNlLCBmb2N1c2luZyBvbiB0aGUgaGlnaGVyIGxldmVsIGNhbGxzIHdpbGwgYmUgbW9yZSBlZmZpY2llbnQgZm9yIGlkZW50aWZ5aW5nIHZ1bG5lcmFiaWxpdGllcy5cblxuTXkgYXR0ZW50aW9uIG5vdyBuZWVkcyB0byBzaGlmdCB0byB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGUgZnV0ZXggYW5kIGV4ZWN1dGlvbiBwcm9jZXNzLiBJIHNob3VsZCByZWFsbHkgZm9jdXMgb24gYGZ1dGV4X2xvY2tfcGlgLCBgZnV0ZXhfd2FpdF9yZXF1ZXVlX3BpYCwgYGZ1dGV4X3JlcXVldWVgLCBgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luYCwgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRgLCBhbmQgYGV4ZWNfbW1fcmVsZWFzZWAuIFRoZXNlIGZ1bmN0aW9ucyBwcm9iYWJseSBoYXZlIGEgcm9sZSBpbiB0aGUgY29ycmVjdCBzeW5jaHJvbml6YXRpb24gb2Ygc2hhcmVkIG1lbW9yeSBhcmVhcywgYW5kIGNvbnRleHQgc3dpdGNoaW5nLCBhcm91bmQgcHJvY2VzcyBleGVjdXRpb24uXG5cbldhaXQgYSBzZWNvbmQuLi4gYXJlbid0IGBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5gIGFuZCBgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZGAgbm90IHN0YXRpYz8gVGhleSdyZSBnbG9iYWwsIG9yIGF0IGxlYXN0IGV4cG9ydGVkLiBUaGF0J3MgaW50ZXJlc3RpbmcsIG1lYW5zIHRoZXkgbWlnaHQgYmUgdXNlZCBleHRlcm5hbGx5LiBOZWVkIHRvIGNoZWNrIGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCBmb3IgbW9yZSBpbmZvLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZXRhaWxzIG9mIHRoZWlyIGludGVuZGVkIHVzZSwgYW5kIGlmIHRoZXkgcmVwcmVzZW50IGEgcG9zc2libGUgYXR0YWNrIHZlY3Rvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1ODQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTQ6MjguMjQ4MjY2MDM5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc2ODExNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jPTE1Mjc9c3RhdGljIHZvaWQgZnV0ZXhfY2xlYW51cF9lbmQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBzdGF0ZSlcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTU0MS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE1NDI6dm9pZCBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNTQzLVxcdF9fYWNxdWlyZXMoXFx1MDAyNnRzay1cXHUwMDNlZnV0ZXguZXhpdF9tdXRleClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTQ6MjguMjk0MDM5MDA1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMDYwMjUzNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgRnV0ZXggRnVuY3Rpb25zIGZvciBQb3RlbnRpYWwgSXNzdWVzKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1dGV4IGZ1bmN0aW9uczogYGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbmAsIGBmdXRleF9leGVjX3JlbGVhc2VfZW5kYCwgYGZ1dGV4X2xvY2tfcGlgLCBgZnV0ZXhfd2FpdF9yZXF1ZXVlX3BpYCwgYW5kIGBmdXRleF9yZXF1ZXVlYC4gVGhleSdyZSBhbGwgZ2xvYmFsLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyB0aGVtIGFzIHBvdGVudGlhbCBwb2ludHMgb2YgY29udGVudGlvbiBpbiBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdCBhbmQgd2hlcmUgdGhleSdyZSB1c2VkLiBgZnV0ZXhfcmVxdWV1ZWAgc2VlbXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCBzbyBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGl0cyBpbXBsZW1lbnRhdGlvbi4gVGhlIGZpbGUgdG8gbG9vayBhdCBpcyBga2VybmVsL2Z1dGV4L3JlcXVldWUuY2AuIEkgbmVlZCB0byByZXZpZXcgaXRzIGxvZ2ljLCBwYXJ0aWN1bGFybHkgYW55IGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGZ1dGV4IGZ1bmN0aW9ucywgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9jayBwb3NzaWJpbGl0aWVzLCBvciBvdGhlciBjb25jdXJyZW5jeSBpc3N1ZXMgbHVya2luZyB3aXRoaW4uIFRoaXMgaXMgd2hlcmUgSSdsbCBnZXQgYSBnb29kIGdyYXNwIG9mIHRoZSByZS1xdWV1ZSBmdW5jdGlvbmFsaXR5IGFuZCBpdHMgcm9sZSBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjE2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTQ6MzQuMzAwMDY2Nzg1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc1MjExNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9yZXF1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9yZXF1ZXVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L3JlcXVldWUuYz03Nj12b2lkIHJlcXVldWVfZnV0ZXgoc3RydWN0IGZ1dGV4X3EgKnEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIxLFxcbi0tXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy05OC1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjk5OnN0YXRpYyBpbmxpbmUgYm9vbCBmdXRleF9yZXF1ZXVlX3BpX3ByZXBhcmUoc3RydWN0IGZ1dGV4X3EgKnEsXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0xMDAtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBmdXRleF9waV9zdGF0ZSAqcGlfc3RhdGUpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTEzMS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjEzMjpzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfcmVxdWV1ZV9waV9jb21wbGV0ZShzdHJ1Y3QgZnV0ZXhfcSAqcSwgaW50IGxvY2tlZClcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTEzMy17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTE2Mi1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjE2MzpzdGF0aWMgaW5saW5lIGludCBmdXRleF9yZXF1ZXVlX3BpX3dha2V1cF9zeW5jKHN0cnVjdCBmdXRleF9xICpxKVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMTY0LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMjA2LSAqXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzoyMDc6ICogRHVyaW5nIGZ1dGV4X3JlcXVldWUsIHdpdGggcmVxdWV1ZV9waT0xLCBpdCBpcyBwb3NzaWJsZSB0byBhY3F1aXJlIHRoZVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMjA4LSAqIHRhcmdldCBmdXRleCBpZiBpdCBpcyB1bmNvbnRlbmRlZCBvciB2aWEgYSBsb2NrIHN0ZWFsLlxcbi0tXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYz0yMzA9dm9pZCByZXF1ZXVlX3BpX3dha2VfZnV0ZXgoc3RydWN0IGZ1dGV4X3EgKnEsIHVuaW9uIGZ1dGV4X2tleSAqa2V5LFxcbi0tXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0yNDktXFx0LyogU2lnbmFsIGxvY2tlZCBzdGF0ZSB0byB0aGUgd2FpdGVyICovXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzoyNTA6XFx0ZnV0ZXhfcmVxdWV1ZV9waV9jb21wbGV0ZShxLCAxKTtcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTI1MS1cXHR3YWtlX3VwX3N0YXRlKHRhc2ssIFRBU0tfTk9STUFMKTtcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM9MjgxPWZ1dGV4X3Byb3h5X3RyeWxvY2tfYXRvbWljKHUzMiBfX3VzZXIgKnBpZnV0ZXgsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIxLFxcbi0tXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zMjEtXFx0LyogRW5zdXJlIHRoYXQgdGhpcyBkb2VzIG5vdCByYWNlIGFnYWluc3QgYW4gZWFybHkgd2FrZXVwICovXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzozMjI6XFx0aWYgKCFmdXRleF9yZXF1ZXVlX3BpX3ByZXBhcmUodG9wX3dhaXRlciwgTlVMTCkpIHtcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTMyMy1cXHRcXHRwbGlzdF9kZWwoXFx1MDAyNnRvcF93YWl0ZXItXFx1MDAzZWxpc3QsIFxcdTAwMjZoYjEtXFx1MDAzZWNoYWluKTtcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMzQ3LVxcdFxcdC8qIFJld2luZCB0b3Bfd2FpdGVyOjpyZXF1ZXVlX3N0YXRlICovXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzozNDg6XFx0XFx0ZnV0ZXhfcmVxdWV1ZV9waV9jb21wbGV0ZSh0b3Bfd2FpdGVyLCByZXQpO1xcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMzQ5LVxcdH0gZWxzZSB7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTM2My0vKipcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjM2NDogKiBmdXRleF9yZXF1ZXVlKCkgLSBSZXF1ZXVlIHdhaXRlcnMgZnJvbSB1YWRkcjEgdG8gdWFkZHIyXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zNjUtICogQHVhZGRyMTpcXHRzb3VyY2UgZnV0ZXggdXNlciBhZGRyZXNzXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTM4MS0gKi9cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjM4MjppbnQgZnV0ZXhfcmVxdWV1ZSh1MzIgX191c2VyICp1YWRkcjEsIHVuc2lnbmVkIGludCBmbGFnczEsXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0zODMtXFx0XFx0ICB1MzIgX191c2VyICp1YWRkcjIsIHVuc2lnbmVkIGludCBmbGFnczIsXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTQxMi1cXHRcXHQvKlxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6NDEzOlxcdFxcdCAqIGZ1dGV4X3JlcXVldWUoKSBhbGxvd3MgdGhlIGNhbGxlciB0byBkZWZpbmUgdGhlIG51bWJlclxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtNDE0LVxcdFxcdCAqIG9mIHdhaXRlcnMgdG8gd2FrZSB1cCB2aWEgdGhlIEBucl93YWtlIGFyZ3VtZW50LiBXaXRoXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTYzNy1cXHRcXHRcXHQvKiBEb24ndCByZXF1ZXVlIHdoZW4gdGhlIHdhaXRlciBpcyBhbHJlYWR5IG9uIHRoZSB3YXkgb3V0LiAqL1xcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6NjM4OlxcdFxcdFxcdGlmICghZnV0ZXhfcmVxdWV1ZV9waV9wcmVwYXJlKHRoaXMsIHBpX3N0YXRlKSkge1xcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtNjM5LVxcdFxcdFxcdFxcdC8qXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTY2NS1cXHRcXHRcXHRcXHRyZXF1ZXVlX2Z1dGV4KHRoaXMsIGhiMSwgaGIyLCBcXHUwMDI2a2V5Mik7XFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzo2NjY6XFx0XFx0XFx0XFx0ZnV0ZXhfcmVxdWV1ZV9waV9jb21wbGV0ZSh0aGlzLCAwKTtcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTY2Ny1cXHRcXHRcXHRcXHR0YXNrX2NvdW50Kys7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTY3Ny1cXHRcXHRcXHRcXHRwdXRfcGlfc3RhdGUocGlfc3RhdGUpO1xcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6Njc4OlxcdFxcdFxcdFxcdGZ1dGV4X3JlcXVldWVfcGlfY29tcGxldGUodGhpcywgcmV0KTtcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTY3OS1cXHRcXHRcXHRcXHQvKlxcbi0tXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYz03MTM9aW50IGhhbmRsZV9lYXJseV9yZXF1ZXVlX3BpX3dha2V1cChzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxcbi0tXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy03NTUtICpcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjc1NjogKiBUaGUgY2FsbGVyIHdpbGwgd2FpdCBvbiB1YWRkciBhbmQgd2lsbCBiZSByZXF1ZXVlZCBieSBmdXRleF9yZXF1ZXVlKCkgdG9cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTc1Ny0gKiB1YWRkcjIgd2hpY2ggbXVzdCBiZSBQSSBhd2FyZSBhbmQgdW5pcXVlIGZyb20gdWFkZHIuICBOb3JtYWwgd2FrZXVwIHdpbGwgd2FrZVxcbi0tXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy03NjQtICogdmlhIHRoZSBmb2xsb3dpbmctLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6NzY1OiAqIDEpIHdha2V1cCBvbiB1YWRkcjIgYWZ0ZXIgYW4gYXRvbWljIGxvY2sgYWNxdWlzaXRpb24gYnkgZnV0ZXhfcmVxdWV1ZSgpXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy03NjYtICogMikgd2FrZXVwIG9uIHVhZGRyMiBhZnRlciBhIHJlcXVldWVcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM9Nzg2PWludCBmdXRleF93YWl0X3JlcXVldWVfcGkodTMyIF9fdXNlciAqdWFkZHIsIHVuc2lnbmVkIGludCBmbGFncyxcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtODMzLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6ODM0OlxcdHN3aXRjaCAoZnV0ZXhfcmVxdWV1ZV9waV93YWtldXBfc3luYyhcXHUwMDI2cSkpIHtcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTgzNS1cXHRjYXNlIFFfUkVRVUVVRV9QSV9JR05PUkU6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjU0OjM0LjM0NzgyMzM4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTg4NzE0ODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBGdXRleCBhbmQgUHJvY2VzcyBJbmhlcml0YW5jZSBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gYGZ1dGV4X3JlcXVldWVgLCB0aGF0J3MgZGVmaW5pdGVseSBhIGdsb2JhbCBzeW1ib2wuIExldCdzIGRpZyBpbnRvIHRoZSBleGVjdXRpb24gcGF0aCBhIGJpdCBkZWVwZXIsIHN0YXJ0aW5nIHdpdGggYGV4ZWNfbW1hcGAgaW4gYGZzL2V4ZWMuY2AuIEknbGwgd2FudCB0byB0cmFjZSBob3cgZnV0ZXhlcyBhcmUgbWFuYWdlZCBkdXJpbmcgYW4gYGV4ZWNgLiBJdCdzIHN0YXRpYywgc28gdGhhdCBuYXJyb3dzIHRoZSBzY29wZSBvZiB0aGUgc2VhcmNoIGEgYml0LiBUaGUga2V5IGZ1bmN0aW9ucyB0byBleGFtaW5lIHdpdGhpbiB0aGF0IGNvbnRleHQgYXJlIGBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5gIGFuZCBgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZGAuXG5cblRoYXQgbWVhbnMgbXkgbWFpbiBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzIGZvciB0aGUgY29kZSBkaXZlOlxuKiAgIGBmdXRleF9sb2NrX3BpYFxuKiAgIGBmdXRleF93YWl0X3JlcXVldWVfcGlgXG4qICAgYGZ1dGV4X3JlcXVldWVgXG4qICAgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9iZWdpbmBcbiogICBgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZGBcblxuTm93LCByZWdhcmRpbmcgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhcmUgb2J2aW91c2x5IGBGVVRFWGAsIGBGVVRFWF9QSWAsIGFuZCBgUlRfTVVURVhFU2AuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYEtjb25maWdgIGZvciBgRlVURVhfUElgLiBJdCBkZXBlbmRzIG9uIGJvdGggYEZVVEVYYCBhbmQgYFJUX01VVEVYRVNgLiBUaGF0J3MgaW1wb3J0YW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIGJvdGggb2YgdGhvc2UgYXJlIGVuYWJsZWQuIEFoLCB3YWl0LCBob2xkIG9uLiBgRlVURVhfUElgIGlzIGEgaGlkZGVuIGNvbmZpZzsgaXQgZG9lc24ndCBldmVuIGhhdmUgYSBwcm9tcHQuIEl0IGRlZmF1bHRzIHRvICd5JyBpZiBib3RoIGBGVVRFWGAgYW5kIGBSVF9NVVRFWEVTYCBhcmUgZW5hYmxlZC4gU28sIHRvIGJlIGNsZWFyLCBlbmFibGluZyAqb25seSogYEZVVEVYYCBhbmQgYFJUX01VVEVYRVNgIGlzIHRoZSByZWFsIHRhcmdldC4gTGV0J3MgbWFrZSBzdXJlIGBSVF9NVVRFWEVTYCBpcyBjb25maWd1cmFibGUsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxMDEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTQ6NDUuMzM2NTQyNzg3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTc1MzY1NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFJUX01VVEVYRVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL0tjb25maWcubG9ja3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjU0OjQ1LjM4NjMwNDY0MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjM5OTk0MTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uLiBNeSBnb2FsIGlzIHRvIGZpbmQgd2hlcmUgdGhlIGBSVF9NVVRFWEVTYCBzZXR0aW5nIGlzIGRlZmluZWQgYW5kIHVzZWQuIEknbGwgbmVlZCB0byBzZWFyY2ggdGhlIGVudGlyZSBzb3VyY2UgdHJlZSBmb3Igb2NjdXJyZW5jZXMgb2YgdGhhdCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSdtIGdvaW5nIHRvIGxldmVyYWdlIG15IHNlYXJjaCB0b29scyBhbmQgc3RhcnQgd2l0aCBhIGJyb2FkIGFwcHJvYWNoLCBlbnN1cmluZyBJIGRvbid0IG1pc3MgYW55dGhpbmcuIExldCdzIGdldCBjcmFja2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4MzUsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1NDo1Mi4wMjYzMDE3NzhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODcwODMwNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFJUX01VVEVYRVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0yMjY0PXNvdXJjZSBcXFwiYXJjaC9LY29uZmlnXFxcIlxcbmluaXQvS2NvbmZpZy0yMjY1LVxcbmluaXQvS2NvbmZpZzoyMjY2OmNvbmZpZyBSVF9NVVRFWEVTXFxuaW5pdC9LY29uZmlnLTIyNjctXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1NDo1My44MTMzOTM5ODdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAyNDU2MjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTmF2aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gdGhlIGlzc3VlIHNlZW1zIHRvIGJlIGNvbmZpZ3VyYXRpb24tcmVsYXRlZC4gTXkgaW5pdGlhbCBpbnR1aXRpb24gcG9pbnRzIG1lIHRvd2FyZHMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBmaWxlcywgYW5kLCBiYXNlZCBvbiBleHBlcmllbmNlLCBteSBtb25leSdzIG9uIHRoZSBgaW5pdC9LY29uZmlnYCBkaXJlY3RvcnkuIFRoYXQncyB1c3VhbGx5IHRoZSBnby10byBzcG90IGZvciBpbml0aWFsaXppbmcga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0J3MgZGl2ZSBpbiBhbmQgdGFrZSBhIGxvb2sgYXQgd2hhdCdzIGRlZmluZWQgaW4gdGhlcmUuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgb3B0aW9uIGRlZmluaXRpb24gb3IgYSBsaWtlbHkgaW5jbHVkZSBmaWxlIHJlbGF0ZWQgdG8gbXkgcHJvYmxlbS4gTGV0J3Mgc2VlIGlmIHRoZSBjb25maWd1cmF0aW9uIGtleSBpcyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA2NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjU0OjU5LjgzNzk2MDcxN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg5OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyNjYsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyNjY6XFx0Y29uZmlnIFJUX01VVEVYRVNcXG4yMjY3OlxcdFxcdGJvb2xcXG4yMjY4OlxcdFxcdGRlZmF1bHQgeSBpZiBQUkVFTVBUX1JUXFxuMjI2OTpcXHRcXG4yMjcwOlxcdGNvbmZpZyBNT0RVTEVfU0lHX0ZPUk1BVFxcbjIyNzE6XFx0XFx0ZGVmX2Jvb2wgblxcbjIyNzI6XFx0XFx0c2VsZWN0IFNZU1RFTV9EQVRBX1ZFUklGSUNBVElPTlxcbjIyNzM6XFx0XFxuMjI3NDpcXHRzb3VyY2UgXFxcImtlcm5lbC9tb2R1bGUvS2NvbmZpZ1xcXCJcXG4yMjc1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1NDo1OS44MzgwOTE2NDZaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxMzc0MzUyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFN5bmNocm9uaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBSVF9NVVRFWEVTYCBpcyBhIGhpZGRlbiBjb25maWcsIGJ1dCBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCBpZiBgUFJFRU1QVF9SVGAgaXMgZW5hYmxlZC4gSW1wb3J0YW50bHksIGBGVVRFWGAgKmltcGxpZXMqIGBSVF9NVVRFWEVTYCwgd2hpY2ggaXMgZ3JlYXQsIG1lYW5pbmcgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBlbmFibGluZyBgUlRfTVVURVhFU2AgZXhwbGljaXRseS4gU2luY2UgYFJUX01VVEVYRVNgIGlzIGhpZGRlbiwgd2UgY2FuJ3QgZGlyZWN0bHkgZW5hYmxlIGl0IGluIEtjb25maWcsIGJ1dCB0aGUgYGltcGx5YCBkaXJlY3RpdmUgdGFrZXMgY2FyZSBvZiBpdCB3aGVuIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBGVVRFWGAgYXJlIG1ldC5cblxuSSBzZWUgYEZVVEVYYCBoYXMgYmVlbiBlbmFibGVkLCBhcyB0aGUgYGRlZmF1bHQgeWAgbGluZSBpbXBsaWVzLiBUaGF0J3MgZ29vZCB0byBrbm93LiBOb3csIGxldCdzIGtlZXAgYW4gZXllIG91dCBmb3IgYEZVVEVYX1BJYCBiZWNhdXNlLCB3ZWxsLCBldmVuIHRob3VnaCBpdCdzIGhpZGRlbiwgYW5kIGRlZmF1bHRzIHRvIGB5YCBpZiBgRlVURVhgIGFuZCBgUlRfTVVURVhFU2AgYXJlIGVuYWJsZWQsIHdlIG1pZ2h0IG5lZWQgaXQuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIGBDT05GSUdfTU1VYCBpcyBhbHNvIGludm9sdmVkLCBhbmQgdGhhdCdzIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0IG9uIG1vc3QgYXJjaGl0ZWN0dXJlcy5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyBpbnRlcmVzdGluZy4gSXQncyBzcGxpdHRpbmcgYGZ1dGV4X2V4ZWNfcmVsZWFzZWAgaW50byBgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luYCBhbmQgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRgLiBUaGUgY29udGV4dCBpcyBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiB3aGVuIGEgZnV0ZXggUEkgb3duZXIgaXMgZXhlY3V0aW5nLiBTcGVjaWZpY2FsbHksIGEgdGFzayB0cmllcyB0byBhdHRhY2ggdG8gdGhlIFBJIG93bmVyLiBUaGUga2V5IHBhcnQgaXMgdGhlIGNoZWNrIGluIGBhdHRhY2hfdG9fcGlfb3duZXJgIHRvIG1ha2Ugc3VyZSB0aGUgdGFzaydzIGBtbWAgaGFzbid0IGNoYW5nZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gYW5kIHByb2Nlc3MgZXhlY3V0aW9uLlxuXG5TbywgdGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgYGF0dGFjaF90b19waV9vd25lcmAgZnVuY3Rpb24gdG8gZml4IGEgcmFjZSBjb25kaXRpb24uIFRoZSBwcmltYXJ5IGZvY3VzIG9mIHRoaXMgY2hhbmdlIGlzIHRvIHByZXZlbnQgaXNzdWVzIHdpdGggZnV0ZXggUEkgb3duZXIgZXhlY2luZy4gSXQncyB0b3VjaGluZyBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gYW5kIHByb2Nlc3MgZXhlY3V0aW9uIGxvZ2ljLCB3aGljaCBtZWFucyBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbk15IGZvY3VzIHN5bWJvbHMsIHRoZW4sIHNob3VsZCBiZTogYGZ1dGV4X2xvY2tfcGlgLCBgZnV0ZXhfd2FpdF9yZXF1ZXVlX3BpYCwgYGZ1dGV4X3JlcXVldWVgLCBgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luYCwgYW5kIGBmdXRleF9leGVjX3JlbGVhc2VfZW5kYC5cblxuRm9yIGNvbmZpZ3VyYXRpb24sIEkgc2hvdWxkIGVuc3VyZSBgRlVURVhgIGlzIGVuYWJsZWQgYmVjYXVzZSBpdCdzIHJlcXVpcmVkLiBBbmQgYnkgaW1wbGljYXRpb24sIHRoYXQgYWxzbyBjb3ZlcnMgYFJUX01VVEVYRVNgIGFuZCBgRlVURVhfUElgLCBzbyBJIGRvbid0IG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgdGhlIGxhc3QgdHdvLiBOb3csIEknbSByZWFkeSB0byB1c2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzNzQsIk91dHB1dFRva2VucyI6MjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTU6MTEuOTc1NTMwNDU2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQxMjMwNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZVVEVYXCIsXG4gICAgXCJGVVRFWF9QSVwiLFxuICAgIFwiUlRfTVVURVhFU1wiLFxuICAgIFwiTU1VXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnV0ZXhfbG9ja19waVwiLFxuICAgIFwiZnV0ZXhfd2FpdF9yZXF1ZXVlX3BpXCIsXG4gICAgXCJmdXRleF9yZXF1ZXVlXCIsXG4gICAgXCJmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5cIixcbiAgICBcImZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gYSBmdXRleCBQSSBvd25lciBleGVjaW5nIGFuZCBhbm90aGVyIHRhc2sgdHJ5aW5nIHRvIGF0dGFjaCB0byB0aGUgUEkgb3duZXIuIEl0IHNwbGl0cyBgZnV0ZXhfZXhlY19yZWxlYXNlYCBpbnRvIHR3byBwaGFzZXMgKGBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW5gIGFuZCBgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZGApIGFuZCBhZGRzIGEgY2hlY2sgaW4gYGF0dGFjaF90b19waV9vd25lcmAgdG8gdmVyaWZ5IHRoZSB0YXNrJ3MgYG1tYCBoYXNuJ3QgY2hhbmdlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBhbmQgcHJvY2VzcyBleGVjdXRpb24gbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVVRFWFwiLFxuICAgIFwiRlVURVhfUElcIixcbiAgICBcIlJUX01VVEVYRVNcIixcbiAgICBcIk1NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1dGV4X2xvY2tfcGlcIixcbiAgICBcImZ1dGV4X3dhaXRfcmVxdWV1ZV9waVwiLFxuICAgIFwiZnV0ZXhfcmVxdWV1ZVwiLFxuICAgIFwiZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luXCIsXG4gICAgXCJmdXRleF9leGVjX3JlbGVhc2VfZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGEgZnV0ZXggUEkgb3duZXIgZXhlY2luZyBhbmQgYW5vdGhlciB0YXNrIHRyeWluZyB0byBhdHRhY2ggdG8gdGhlIFBJIG93bmVyLiBJdCBzcGxpdHMgYGZ1dGV4X2V4ZWNfcmVsZWFzZWAgaW50byB0d28gcGhhc2VzIChgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luYCBhbmQgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRgKSBhbmQgYWRkcyBhIGNoZWNrIGluIGBhdHRhY2hfdG9fcGlfb3duZXJgIHRvIHZlcmlmeSB0aGUgdGFzaydzIGBtbWAgaGFzbid0IGNoYW5nZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gYW5kIHByb2Nlc3MgZXhlY3V0aW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAwOjU1OjEyLjA0OTY2MDc3OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5MDk4NjQ4NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1NToxMi4wNTAyMjY5MThaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTI5MDkyOTQ1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGlzc3VlIHJlbGF0ZWQgdG8gZnV0ZXhlcyBhbmQgYGV4ZWN2ZWAuIEl0IHNwbGl0cyBgZnV0ZXhfZXhlY19yZWxlYXNlYCBpbnRvIGEgYmVnaW4vZW5kIHBhaXIgdG8gaG9sZCB0aGUgYGV4aXRfbXV0ZXhgIGFjcm9zcyB0aGUgYG1tYCByZXBsYWNlbWVudCBpbiBgZXhlY19tbWFwYCwgYW5kIGFkZHMgYSBjaGVjayBpbiBgYXR0YWNoX3RvX3BpX293bmVyYCB0byBlbnN1cmUgdGhlIHRhc2sncyBgbW1gIG1hdGNoZXMgdGhlIGZ1dGV4IGtleSdzIGBtbWAuIFRoZXNlIGNoYW5nZXMgcHJldmVudCByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGJ1Z3MgZHVyaW5nIGV4ZWMuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgdGhlIGJ1Z3MgdGhpcyBwYXRjaCBhaW1zIHRvIGZpeC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMjNhNzhmMjY4NjgyZjY2NDc1YjVkOTI1NWY1Y2UwZDZmZDA4ZTMwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMDA6NTI6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmNcbmluZGV4IGM3YjhmMmQ2MzY2YzQuLjQyZWI5OGZiZDEyNTkgMTAwNjQ0XG4tLS0gYS9mcy9leGVjLmNcbisrKyBiL2ZzL2V4ZWMuY1xuQEAgLTY1LDYgKzY1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb191cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY2FsbF91c2VyX2Rpc3BhdGNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb3JlZHVtcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZnV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVfbmFtZXNwYWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyX2V2ZW50cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcnNlcS5oXHUwMDNlXG5AQCAtODU3LDggKzg1OCwxMCBAQCBzdGF0aWMgaW50IGV4ZWNfbW1hcChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFx0ZXhlY19tbV9yZWxlYXNlKHRzaywgb2xkX21tKTtcbiBcbiBcdHJldCA9IGRvd25fd3JpdGVfa2lsbGFibGUoXHUwMDI2dHNrLVx1MDAzZXNpZ25hbC1cdTAwM2VleGVjX3VwZGF0ZV9sb2NrKTtcbi1cdGlmIChyZXQpXG4rXHRpZiAocmV0KSB7XG4rXHRcdGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmQodHNrKTtcbiBcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbiBcdGlmIChvbGRfbW0pIHtcbiBcdFx0LypcbkBAIC04NjksNiArODcyLDcgQEAgc3RhdGljIGludCBleGVjX21tYXAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcdFx0cmV0ID0gbW1hcF9yZWFkX2xvY2tfa2lsbGFibGUob2xkX21tKTtcbiBcdFx0aWYgKHJldCkge1xuIFx0XHRcdHVwX3dyaXRlKFx1MDAyNnRzay1cdTAwM2VzaWduYWwtXHUwMDNlZXhlY191cGRhdGVfbG9jayk7XG4rXHRcdFx0ZnV0ZXhfZXhlY19yZWxlYXNlX2VuZCh0c2spO1xuIFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbiBcdH1cbkBAIC04OTYsNiArOTAwLDcgQEAgc3RhdGljIGludCBleGVjX21tYXAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcdFx0bG9jYWxfaXJxX2VuYWJsZSgpO1xuIFx0bHJ1X2dlbl9hZGRfbW0obW0pO1xuIFx0dGFza191bmxvY2sodHNrKTtcbitcdGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmQodHNrKTtcbiBcdGxydV9nZW5fdXNlX21tKG1tKTtcbiBcdGlmIChvbGRfbW0pIHtcbiBcdFx0bW1hcF9yZWFkX3VubG9jayhvbGRfbW0pO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnV0ZXguaCBiL2luY2x1ZGUvbGludXgvZnV0ZXguaFxuaW5kZXggNTFmNGNjZGM5MDkyNy4uMzI0ZjQ5NDkzY2JiNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnV0ZXguaFxuKysrIGIvaW5jbHVkZS9saW51eC9mdXRleC5oXG5AQCAtNzIsNyArNzIsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbiBcbiB2b2lkIGZ1dGV4X2V4aXRfcmVjdXJzaXZlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTtcbiB2b2lkIGZ1dGV4X2V4aXRfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7XG4tdm9pZCBmdXRleF9leGVjX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spO1xuK3ZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuK1x0X19hY3F1aXJlcyhcdTAwMjZ0c2stXHUwMDNlZnV0ZXguZXhpdF9tdXRleCk7XG4rdm9pZCBmdXRleF9leGVjX3JlbGVhc2VfZW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuK1x0X19yZWxlYXNlcyhcdTAwMjZ0c2stXHUwMDNlZnV0ZXguZXhpdF9tdXRleCk7XG4gXG4gbG9uZyBkb19mdXRleCh1MzIgX191c2VyICp1YWRkciwgaW50IG9wLCB1MzIgdmFsLCBrdGltZV90ICp0aW1lb3V0LFxuIFx0ICAgICAgdTMyIF9fdXNlciAqdWFkZHIyLCB1MzIgdmFsMiwgdTMyIHZhbDMpO1xuQEAgLTkwLDcgKzkzLDggQEAgc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykgeyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2V4aXRfcmVjdXJzaXZlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhpdF9yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH1cbi1zdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZXhlY19yZWxlYXNlX2VuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykgeyB9XG4gc3RhdGljIGlubGluZSBsb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXG4gXHRcdFx0ICAgIHUzMiBfX3VzZXIgKnVhZGRyMiwgdTMyIHZhbDIsIHUzMiB2YWwzKVxuIHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuY1xuaW5kZXggZjBlMmUxMzFhOWE1YS4uZDI3MzZiMjRmZjc1MiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mb3JrLmNcbisrKyBiL2tlcm5lbC9mb3JrLmNcbkBAIC0xNTEwLDcgKzE1MTAsNyBAQCB2b2lkIGV4aXRfbW1fcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXG4gdm9pZCBleGVjX21tX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbi1cdGZ1dGV4X2V4ZWNfcmVsZWFzZSh0c2spO1xuK1x0ZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luKHRzayk7XG4gXHRtbV9yZWxlYXNlKHRzaywgbW0pO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuaW5kZXggMTI4YzU3NTJmMjI1Yy4uYTkyMGRmYmQwMzkwZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmNcbisrKyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbkBAIC0xNTM5LDcgKzE1MzksOCBAQCBzdGF0aWMgdm9pZCBmdXRleF9jbGVhbnVwX2VuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHN0YXRlKVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnRzay1cdTAwM2VmdXRleC5leGl0X211dGV4KTtcbiB9XG4gXG4tdm9pZCBmdXRleF9leGVjX3JlbGVhc2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4rdm9pZCBmdXRleF9leGVjX3JlbGVhc2VfYmVnaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4rXHRfX2FjcXVpcmVzKFx1MDAyNnRzay1cdTAwM2VmdXRleC5leGl0X211dGV4KVxuIHtcbiBcdC8qXG4gXHQgKiBUaGUgc3RhdGUgaGFuZGxpbmcgaXMgZG9uZSBmb3IgY29uc2lzdGVuY3ksIGJ1dCBpbiB0aGUgY2FzZSBvZlxuQEAgLTE1NTAsNiArMTU1MSwxMSBAQCB2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbiBcdCAqL1xuIFx0ZnV0ZXhfY2xlYW51cF9iZWdpbih0c2spO1xuIFx0ZnV0ZXhfY2xlYW51cCh0c2spO1xuK31cbitcbit2b2lkIGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4rXHRfX3JlbGVhc2VzKFx1MDAyNnRzay1cdTAwM2VmdXRleC5leGl0X211dGV4KVxuK3tcbiBcdC8qXG4gXHQgKiBSZXNldCB0aGUgc3RhdGUgdG8gRlVURVhfU1RBVEVfT0suIFRoZSB0YXNrIGlzIGFsaXZlIGFuZCBhYm91dFxuIFx0ICogZXhlYyBhIG5ldyBiaW5hcnkuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4L3BpLmMgYi9rZXJuZWwvZnV0ZXgvcGkuY1xuaW5kZXggNzk1MDExZWExMjAyZi4uZDk3NjExMTk2YjM0YSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mdXRleC9waS5jXG4rKysgYi9rZXJuZWwvZnV0ZXgvcGkuY1xuQEAgLTQ2NSw2ICs0NjUsMTMgQEAgc3RhdGljIGludCBhdHRhY2hfdG9fcGlfb3duZXIodTMyIF9fdXNlciAqdWFkZHIsIHUzMiB1dmFsLCB1bmlvbiBmdXRleF9rZXkgKmtleSxcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19NTVUpIFx1MDAyNlx1MDAyNiBmdXRleF9rZXlfaXNfcHJpdmF0ZShrZXkpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIFJFQURfT05DRShwLVx1MDAzZW1tKSAhPSBrZXktXHUwMDNlcHJpdmF0ZS5tbSkge1xuK1x0XHRyYXdfc3Bpbl91bmxvY2tfaXJxKFx1MDAyNnAtXHUwMDNlcGlfbG9jayk7XG4rXHRcdHB1dF90YXNrX3N0cnVjdChwKTtcbitcdFx0cmV0dXJuIC1FU1JDSDtcbitcdH1cbitcbiBcdF9fYXR0YWNoX3RvX3BpX293bmVyKHAsIGtleSwgcHMpO1xuIFx0cmF3X3NwaW5fdW5sb2NrX2lycShcdTAwMjZwLVx1MDAzZXBpX2xvY2spO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDA6NTU6MTIuMDUwMjI4MDI4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyOTA5MjcyNjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV0ZXggYW5kIEV4ZWN2ZSBTeW5jaHJvbml6YXRpb24gRml4KipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIHRhY2tsaW5nIGEgY29uY3VycmVuY3kgaXNzdWUsIGxpa2VseSBhIHJhY2UgY29uZGl0aW9uIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbywgaW4gdGhlIGZ1dGV4IGltcGxlbWVudGF0aW9uIHJlbGF0ZWQgdG8gYGV4ZWN2ZWAuIFRoZSBjaGFuZ2VzIGFyZSBjb25jZW50cmF0ZWQgaW4gYGZzL2V4ZWMuY2AsIGBpbmNsdWRlL2xpbnV4L2Z1dGV4LmhgLCBga2VybmVsL2ZvcmsuY2AsIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCwgYW5kIGBrZXJuZWwvZnV0ZXgvcGkuY2AsIHNvIGl0J3MgYWxsIHJpZ2h0IHdoZXJlIEknZCBleHBlY3QgaXQgdG8gYmUuXG5cblRoZSBjb3JlIG9mIHRoZSBmaXggYXBwZWFycyB0byBiZSBzcGxpdHRpbmcgYGZ1dGV4X2V4ZWNfcmVsZWFzZWAgaW50byBgZnV0ZXhfZXhlY19yZWxlYXNlX2JlZ2luYCBhbmQgYGZ1dGV4X2V4ZWNfcmVsZWFzZV9lbmRgLiBUaGlzLCBhbG9uZyB3aXRoIHRoZSBgZXhpdF9tdXRleGAgbG9jaywgaXMga2V5LiBUaGUgYGJlZ2luYCBmdW5jdGlvbiBhY3F1aXJlcyBgdHNrLVx1MDAzZWZ1dGV4LmV4aXRfbXV0ZXhgLCBhbmQgdGhlIGBlbmRgIGZ1bmN0aW9uIHJlbGVhc2VzIGl0LiBUaGlzIGxvY2tpbmcgc3BhbnMgdGhlIGNydWNpYWwgYG1tX3JlbGVhc2VgIG9wZXJhdGlvbiBhbmQgdGhlIHN1YnNlcXVlbnQgYGV4ZWNfbW1hcGAgbW0gcmVwbGFjZW1lbnQuIEJ5IGhvbGRpbmcgdGhpcyBtdXRleCwgaXQgZW5zdXJlcyB0aGF0IG5vIG90aGVyIHRocmVhZCBjYW4gYXR0YWNoIHRvIHRoZSBmdXRleCB3aGlsZSB0aGUgbW0gaXMgYmVpbmcgcmVwbGFjZWQgZHVyaW5nIGV4ZWMsIHdoaWNoIGlzIGNyaXRpY2FsLiBUaGlzIGlzIGEgc29saWQsIGNsZWFuIHN5bmNocm9uaXphdGlvbiBzdHJhdGVneS5cblxuVGhlIGFkZGVkIGNoZWNrIGluIGBhdHRhY2hfdG9fcGlfb3duZXJgIHdpdGhpbiBga2VybmVsL2Z1dGV4L3BpLmNgIGlzIGFsc28gaW1wb3J0YW50LiAgU3BlY2lmaWNhbGx5LCB0aGUgYElTX0VOQUJMRUQoQ09ORklHX01NVSkgXHUwMDI2XHUwMDI2IGZ1dGV4X2tleV9pc19wcml2YXRlKGtleSkgXHUwMDI2XHUwMDI2IFJFQURfT05DRShwLVx1MDAzZW1tKSAhPSBrZXktXHUwMDNlcHJpdmF0ZS5tbWAgY29uZGl0aW9uIGlzIGNsZXZlci4gSXQncyB2ZXJpZnlpbmcgdGhhdCBmb3IgKnByaXZhdGUqIGZ1dGV4ZXMsIHRoZSB0YXNrJ3MgYG1tYCAobWVtb3J5IG1hcCkgbWF0Y2hlcyB0aGUgYG1tYCBhc3NvY2lhdGVkIHdpdGggdGhlIGZ1dGV4IGtleS4gVGhpcyBwcmV2ZW50cyBhIHRhc2sgZnJvbSBhdHRhY2hpbmcgdG8gYSBmdXRleCBvZiBhIHRhc2sgdGhhdCBoYXMgYWxyZWFkeSBleGVjJ2QgYW5kIGNoYW5nZWQgaXRzIG1lbW9yeSBtYXAuIFRoaXMgaXMgYSB2ZXJ5IHNwZWNpZmljLCBhbmQgcHJvYmFibHkgdmVyeSBzdWJ0bGUsIGJ1ZyBmaXguXG5cbkknbSBub3Qgc2VlaW5nIGFueSByZWQgZmxhZ3MgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvIGxlYWtzLCBvciBuZXcgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBiZSB1bmluaXRpYWxpemVkLiBJdCdzIGEgY29uY3VycmVuY3kvbG9ja2luZyBidWcgZml4IHRoYXQgdGhlIGV4aXN0aW5nIGtlcm5lbCBjaGVja2VycyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQIHdvdWxkIGxpa2VseSBjYXRjaOKAlCBvciByYXRoZXIsIHRoZXkgd2lsbCBjYXRjaCB0aGUgZWZmZWN0cyBvZiB0aGUgYnVnIHRoaXMgcGF0Y2ggaXMgcHJldmVudGluZyAoVUFGIG9yIGRlYWRsb2NrcykuIE5vIG5lZWQgdG8gYnJpbmcgS01TQU4gaW50byB0aGUgcGljdHVyZSBoZXJlLiBUaGUgaXNzdWUgaXMgcHVyZWx5IGFib3V0IHN5bmNocm9uaXphdGlvbiBhbmQgcHJldmVudGluZyByYWNlcywgbm90IGFib3V0IG1lbW9yeSBpbml0aWFsaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYwNywiT3V0cHV0VG9rZW5zIjoxNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMDo1NToyNC45NTk1MDQyMjlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGlzc3VlIHJlbGF0ZWQgdG8gZnV0ZXhlcyBhbmQgYGV4ZWN2ZWAuIEl0IHNwbGl0cyBgZnV0ZXhfZXhlY19yZWxlYXNlYCBpbnRvIGEgYmVnaW4vZW5kIHBhaXIgdG8gaG9sZCB0aGUgYGV4aXRfbXV0ZXhgIGFjcm9zcyB0aGUgYG1tYCByZXBsYWNlbWVudCBpbiBgZXhlY19tbWFwYCwgYW5kIGFkZHMgYSBjaGVjayBpbiBgYXR0YWNoX3RvX3BpX293bmVyYCB0byBlbnN1cmUgdGhlIHRhc2sncyBgbW1gIG1hdGNoZXMgdGhlIGZ1dGV4IGtleSdzIGBtbWAuIFRoZXNlIGNoYW5nZXMgcHJldmVudCByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGJ1Z3MgZHVyaW5nIGV4ZWMuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgdGhlIGJ1Z3MgdGhpcyBwYXRjaCBhaW1zIHRvIGZpeC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpc3N1ZSByZWxhdGVkIHRvIGZ1dGV4ZXMgYW5kIGBleGVjdmVgLiBJdCBzcGxpdHMgYGZ1dGV4X2V4ZWNfcmVsZWFzZWAgaW50byBhIGJlZ2luL2VuZCBwYWlyIHRvIGhvbGQgdGhlIGBleGl0X211dGV4YCBhY3Jvc3MgdGhlIGBtbWAgcmVwbGFjZW1lbnQgaW4gYGV4ZWNfbW1hcGAsIGFuZCBhZGRzIGEgY2hlY2sgaW4gYGF0dGFjaF90b19waV9vd25lcmAgdG8gZW5zdXJlIHRoZSB0YXNrJ3MgYG1tYCBtYXRjaGVzIHRoZSBmdXRleCBrZXkncyBgbW1gLiBUaGVzZSBjaGFuZ2VzIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBidWdzIGR1cmluZyBleGVjLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHRoZSBidWdzIHRoaXMgcGF0Y2ggYWltcyB0byBmaXguXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowknn8x[1] Phase: Succeeded StartedAt: 2026-08-10 00:55:36 +0000 UTC FinishedAt: 2026-08-10 00:55:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknn8x[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 00:55:36 +0000 UTC FinishedAt: 2026-08-10 00:55:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknn8x[2] Phase: Succeeded StartedAt: 2026-08-10 00:55:36 +0000 UTC FinishedAt: 2026-08-10 04:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-10 00:55:36 +0000 UTC FinishedAt: 2026-08-10 04:37:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-10 00:55:36 +0000 UTC FinishedAt: 2026-08-10 00:55:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-10 00:55:36 +0000 UTC FinishedAt: 2026-08-10 00:55:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowknn8x/series-workflowknn8x-convert-artifact-1059349834/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-10 00:55:46 +0000 UTC FinishedAt: 2026-08-10 01:12:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-10 00:55:46 +0000 UTC FinishedAt: 2026-08-10 01:12:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*da2edac9-1cc0-43ce-b9f4-c7e1c22e5361,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowknn8x/series-workflowknn8x-convert-artifact-1059349834/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "08c94a64-f9ef-4b17-b00c-898db4e4a363", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowknn8x/series-workflowknn8x-build-action-1920531768/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-10 00:55:46 +0000 UTC FinishedAt: 2026-08-10 01:12:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*da2edac9-1cc0-43ce-b9f4-c7e1c22e5361,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowknn8x/series-workflowknn8x-convert-artifact-1059349834/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "08c94a64-f9ef-4b17-b00c-898db4e4a363", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowknn8x/series-workflowknn8x-build-action-1920531768/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-10 01:12:18 +0000 UTC FinishedAt: 2026-08-10 01:12:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-10 01:12:18 +0000 UTC FinishedAt: 2026-08-10 01:12:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-10 01:12:18 +0000 UTC FinishedAt: 2026-08-10 01:12:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-10 01:12:18 +0000 UTC FinishedAt: 2026-08-10 01:12:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowknn8x/series-workflowknn8x-convert-artifact-4252221669/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-10 01:12:28 +0000 UTC FinishedAt: 2026-08-10 01:15:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-10 01:12:28 +0000 UTC FinishedAt: 2026-08-10 01:15:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*08c94a64-f9ef-4b17-b00c-898db4e4a363,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowknn8x/series-workflowknn8x-build-action-1920531768/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-10 01:15:12 +0000 UTC FinishedAt: 2026-08-10 01:15:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-10 01:15:12 +0000 UTC FinishedAt: 2026-08-10 01:15:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-10 01:15:12 +0000 UTC FinishedAt: 2026-08-10 01:31:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-10 01:15:12 +0000 UTC FinishedAt: 2026-08-10 01:31:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*da2edac9-1cc0-43ce-b9f4-c7e1c22e5361,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowknn8x/series-workflowknn8x-convert-artifact-4252221669/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "07be7932-567a-46df-9558-784504b3965e", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowknn8x/series-workflowknn8x-build-action-2578879793/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-10 01:15:12 +0000 UTC FinishedAt: 2026-08-10 01:31:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*da2edac9-1cc0-43ce-b9f4-c7e1c22e5361,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowknn8x/series-workflowknn8x-convert-artifact-4252221669/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "07be7932-567a-46df-9558-784504b3965e", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowknn8x/series-workflowknn8x-build-action-2578879793/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-10 01:31:41 +0000 UTC FinishedAt: 2026-08-10 01:31:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-10 01:31:41 +0000 UTC FinishedAt: 2026-08-10 01:31:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-10 01:31:41 +0000 UTC FinishedAt: 2026-08-10 01:34:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-10 01:31:41 +0000 UTC FinishedAt: 2026-08-10 01:34:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*07be7932-567a-46df-9558-784504b3965e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowknn8x/series-workflowknn8x-build-action-2578879793/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-10 01:34:33 +0000 UTC FinishedAt: 2026-08-10 04:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-10 01:34:33 +0000 UTC FinishedAt: 2026-08-10 04:37:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*08c94a64-f9ef-4b17-b00c-898db4e4a363,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*07be7932-567a-46df-9558-784504b3965e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowknn8x/series-workflowknn8x-build-action-1920531768/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowknn8x/series-workflowknn8x-build-action-2578879793/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-10 01:34:33 +0000 UTC FinishedAt: 2026-08-10 01:34:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-10 01:34:33 +0000 UTC FinishedAt: 2026-08-10 01:34:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowknn8x/series-workflowknn8x-convert-artifact-1632731498/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-10 01:34:33 +0000 UTC FinishedAt: 2026-08-10 01:34:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-10 01:34:33 +0000 UTC FinishedAt: 2026-08-10 01:34:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-10 01:34:33 +0000 UTC FinishedAt: 2026-08-10 01:34:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-10 01:34:43 +0000 UTC FinishedAt: 2026-08-10 04:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknn8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["futex_lock_pi","futex_wait_requeue_pi","futex_requeue","futex_exec_release_begin","futex_exec_release_end"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PI","RT_MUTEXES","MMU"],"series_id":"8b1a9396-77fb-4def-99f3-7c9dfd99d413","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-10 01:34:43 +0000 UTC FinishedAt: 2026-08-10 04:37:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*08c94a64-f9ef-4b17-b00c-898db4e4a363,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*07be7932-567a-46df-9558-784504b3965e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowknn8x/series-workflowknn8x-build-action-1920531768/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowknn8x/series-workflowknn8x-build-action-2578879793/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowknn8x/series-workflowknn8x-convert-artifact-1632731498/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}