Name: series-workflowp2pcs Phase: Succeeded StartedAt: 2026-09-04 23:34:15 +0000 UTC FinishedAt: 2026-09-05 03:17:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2pcs[0] Phase: Succeeded StartedAt: 2026-09-04 23:34:15 +0000 UTC FinishedAt: 2026-09-04 23:37:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2pcs[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 23:34:15 +0000 UTC FinishedAt: 2026-09-04 23:37:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_GADGET", "USB_CONFIGFS", "USB_CONFIGFS_SERIAL", "USB_CONFIGFS_ACM", "USB_U_SERIAL", "TTY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_GADGET", "USB_CONFIGFS", "USB_CONFIGFS_SERIAL", "USB_CONFIGFS_ACM", "USB_U_SERIAL", "TTY" ], "series_id": "c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "gs_install", "gs_cleanup", "gs_port_destruct", "gs_open", "gs_close", "gserial_free_port", "gserial_free_line", "gserial_alloc_line" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIzOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9HQURHRVQmIzM0OywKICAgICYjMzQ7VVNCX0NPTkZJR0ZTJiMzNDssCiAgICAmIzM0O1VTQl9DT05GSUdGU19TRVJJQUwmIzM0OywKICAgICYjMzQ7VVNCX0NPTkZJR0ZTX0FDTSYjMzQ7LAogICAgJiMzNDtVU0JfVV9TRVJJQUwmIzM0OywKICAgICYjMzQ7VFRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z3NfaW5zdGFsbCYjMzQ7LAogICAgJiMzNDtnc19jbGVhbnVwJiMzNDssCiAgICAmIzM0O2dzX3BvcnRfZGVzdHJ1Y3QmIzM0OywKICAgICYjMzQ7Z3Nfb3BlbiYjMzQ7LAogICAgJiMzNDtnc19jbG9zZSYjMzQ7LAogICAgJiMzNDtnc2VyaWFsX2ZyZWVfcG9ydCYjMzQ7LAogICAgJiMzNDtnc2VyaWFsX2ZyZWVfbGluZSYjMzQ7LAogICAgJiMzNDtnc2VyaWFsX2FsbG9jX2xpbmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgb2YgYHN0cnVjdCBnc19wb3J0YCBpbiBgZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmNgIHVzaW5nIHN0YW5kYXJkIGB0dHlfcG9ydGAgcmVmY291bnRpbmcgKGB0dHlfcG9ydF9nZXRgL2B0dHlfcG9ydF9wdXRgLCBgdHR5X29wZXJhdGlvbnMuaW5zdGFsbGAsIGB0dHlfb3BlcmF0aW9ucy5jbGVhbnVwYCwgYW5kIGB0dHlfcG9ydF9vcGVyYXRpb25zLmRlc3RydWN0YCkuXG5cblRoaXMgcmVmYWN0b3JpbmcgYWRkcmVzc2VzIHR0eSBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGlzc3VlcyAocHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBhbmQgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gbGluZSB0ZWFyZG93biBhbmQgdHR5IG9wZXJhdGlvbnMpLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgZG8gbm90IGNvcHkga2VybmVsIGRhdGEgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2UsIGFuZCBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIHVzZS1hZnRlci1mcmVlLCByZWZjb3VudGluZyBpbWJhbGFuY2VzLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIHRob3JvdWdobHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgcmVmY291bnQgdHJhY2tpbmcsIGFuZCBMT0NLREVQIGJ1aWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVzdHJ1Y3R1cmVzIHRoZSBsaWZlY3ljbGUsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIG9wZW4vY2xvc2Ugc3luY2hyb25pemF0aW9uIG9mIHRoZSBVU0Igc2VyaWFsIGdhZGdldCBkcml2ZXIgKHVfc2VyaWFsLmMpIHVzaW5nIHR0eV9wb3J0X29wZXJhdGlvbnMgKC5kZXN0cnVjdCkgYW5kIHR0eV9wb3J0X2dldC9wdXQgYWNyb3NzIGluc3RhbGwgYW5kIGNsZWFudXAgY2FsbGJhY2tzIGluc3RlYWQgb2YgbWFudWFsIHdhaXRxdWV1ZSB0cmFja2luZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGdhZGdldCBDb25maWdGUywgZHVtbXlfaGNkLCBvciByYXctZ2FkZ2V0IGFsb25nIHdpdGggdHR5R1MqIGRldmljZSBvcGVyYXRpb25zLCBtYWtpbmcgaXQgYW4gaW1wb3J0YW50IHRhcmdldCBmb3IgY29uY3VycmVuY3kgYW5kIGxpZmVjeWNsZSBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIzOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTUwZTRmZDJmMzhkMTVlZWM1NmRmZWY0ZjJhMWM5OWQ4MjFjNTQwZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMjM6MzY6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuY1xuaW5kZXggY2RkMWRmYzY2NmM0Zi4uYzgyYzU4ODhjNmM0OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuY1xuQEAgLTEyNSw3ICYjNDM7MTI1LDYgQEAgc3RydWN0IGdzX3BvcnQge1xuIFx0c3RydWN0IGtmaWZvXHRcdHBvcnRfd3JpdGVfYnVmO1xuIFx0d2FpdF9xdWV1ZV9oZWFkX3RcdGRyYWluX3dhaXQ7XHQvKiB3YWl0IHdoaWxlIHdyaXRlcyBkcmFpbiAqL1xuIFx0Ym9vbCAgICAgICAgICAgICAgICAgICAgd3JpdGVfYnVzeTtcbi1cdHdhaXRfcXVldWVfaGVhZF90XHRjbG9zZV93YWl0O1xuIFx0Ym9vbFx0XHRcdHN1c3BlbmRlZDtcdC8qIHBvcnQgc3VzcGVuZGVkICovXG4gXHRib29sXHRcdFx0c3RhcnRfZGVsYXllZDtcdC8qIGRlbGF5IHN0YXJ0IHdoZW4gc3VzcGVuZGVkICovXG4gXHRzdHJ1Y3QgYXN5bmNfaWNvdW50XHRpY291bnQ7XG5AQCAtNjEwLDE3ICYjNDM7NjA5LDkgQEAgc3RhdGljIGludCBnc2VyaWFsX3dha2V1cF9ob3N0KHN0cnVjdCBnc2VyaWFsICpnc2VyKVxuICAqL1xuIHN0YXRpYyBpbnQgZ3Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4tXHRpbnRcdFx0cG9ydF9udW0gPSB0dHktXHUwMDNlaW5kZXg7XG4tXHRzdHJ1Y3QgZ3NfcG9ydFx0KnBvcnQ7XG4mIzQzO1x0c3RydWN0IGdzX3BvcnRcdCpwb3J0ID0gdHR5LVx1MDAzZWRyaXZlcl9kYXRhO1xuIFx0aW50XHRcdHN0YXR1cyA9IDA7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnBvcnRzW3BvcnRfbnVtXS5sb2NrKTtcbi1cdHBvcnQgPSBwb3J0c1twb3J0X251bV0ucG9ydDtcbi1cdGlmICghcG9ydCkge1xuLVx0XHRzdGF0dXMgPSAtRU5PREVWO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0X2xvY2spO1xuIFxuIFx0LyogYWxsb2NhdGUgY2lyY3VsYXIgYnVmZmVyIG9uIGZpcnN0IG9wZW4gKi9cbkBAIC02MjgsMTcgJiM0Mzs2MTksMTIgQEAgc3RhdGljIGludCBnc19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKVxuIFxuIFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0X2xvY2spO1xuIFxuLVx0XHQvKlxuLVx0XHQgKiBwb3J0bWFzdGVyJiMzOTtzIG11dGV4IHN0aWxsIHByb3RlY3RzIGZyb20gc2ltdWx0YW5lb3VzIG9wZW4oKSxcbi1cdFx0ICogYW5kIGNsb3NlKCkgY2FuJiMzOTt0IGhhcHBlbiwgeWV0LlxuLVx0XHQgKi9cbi1cbiBcdFx0c3RhdHVzID0ga2ZpZm9fYWxsb2MoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0X3dyaXRlX2J1ZixcbiBcdFx0XHRcdCAgICAgV1JJVEVfQlVGX1NJWkUsIEdGUF9LRVJORUwpO1xuIFx0XHRpZiAoc3RhdHVzKSB7XG4gXHRcdFx0cHJfZGVidWcoXCYjMzQ7Z3Nfb3BlbjogdHR5R1MlZCAoJXAsJXApIG5vIGJ1ZmZlclxcblwmIzM0Oyxcbi1cdFx0XHRcdCBwb3J0X251bSwgdHR5LCBmaWxlKTtcbi1cdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdFx0XHQgcG9ydC1cdTAwM2Vwb3J0X251bSwgdHR5LCBmaWxlKTtcbiYjNDM7XHRcdFx0cmV0dXJuIHN0YXR1cztcbiBcdFx0fVxuIFxuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNnBvcnQtXHUwMDNlcG9ydF9sb2NrKTtcbkBAIC02NDgsNyAmIzQzOzYzNCw2IEBAIHN0YXRpYyBpbnQgZ3Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdGlmIChwb3J0LVx1MDAzZXBvcnQuY291bnQmIzQzOyYjNDM7KVxuIFx0XHRnb3RvIGV4aXRfdW5sb2NrX3BvcnQ7XG4gXG4tXHR0dHktXHUwMDNlZHJpdmVyX2RhdGEgPSBwb3J0O1xuIFx0cG9ydC1cdTAwM2Vwb3J0LnR0eSA9IHR0eTtcbiBcbiBcdC8qIGlmIGNvbm5lY3RlZCwgc3RhcnQgdGhlIEkvTyBzdHJlYW0gKi9cbkBAIC02NzIsOCAmIzQzOzY1Nyw2IEBAIHN0YXRpYyBpbnQgZ3Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcbiBleGl0X3VubG9ja19wb3J0OlxuIFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnBvcnQtXHUwMDNlcG9ydF9sb2NrKTtcbi1vdXQ6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cG9ydHNbcG9ydF9udW1dLmxvY2spO1xuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG4gXG5AQCAtNzQ0LDcgJiM0Mzs3MjcsNiBAQCBzdGF0aWMgdm9pZCBnc19jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHByX2RlYnVnKFwmIzM0O2dzX2Nsb3NlOiB0dHlHUyVkICglcCwlcCkgZG9uZSFcXG5cJiMzNDssXG4gXHRcdFx0cG9ydC1cdTAwM2Vwb3J0X251bSwgdHR5LCBmaWxlKTtcbiBcbi1cdHdha2VfdXAoXHUwMDI2cG9ydC1cdTAwM2VjbG9zZV93YWl0KTtcbiBleGl0OlxuIFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnBvcnQtXHUwMDNlcG9ydF9sb2NrKTtcbiB9XG5AQCAtOTA4LDcgJiM0Mzs4OTAsNDIgQEAgc3RhdGljIGludCBnc19nZXRfaWNvdW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgZ3NfaW5zdGFsbChzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHBvcnRfbnVtID0gdHR5LVx1MDAzZWluZGV4O1xuJiM0MztcdHN0cnVjdCBnc19wb3J0ICpwb3J0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cG9ydHNbcG9ydF9udW1dLmxvY2spO1xuJiM0MztcdHBvcnQgPSBwb3J0c1twb3J0X251bV0ucG9ydDtcbiYjNDM7XHRpZiAoIXBvcnQpIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZwb3J0c1twb3J0X251bV0ubG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHR0eV9wb3J0X2dldChcdTAwMjZwb3J0LVx1MDAzZXBvcnQpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwb3J0c1twb3J0X251bV0ubG9jayk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHR0eV9zdGFuZGFyZF9pbnN0YWxsKGRyaXZlciwgdHR5KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHR0dHlfcG9ydF9wdXQoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR0dHktXHUwMDNlZHJpdmVyX2RhdGEgPSBwb3J0O1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBnc19jbGVhbnVwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZ3NfcG9ydCAqcG9ydCA9IHR0eS1cdTAwM2Vkcml2ZXJfZGF0YTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvcnQpXG4mIzQzO1x0XHR0dHlfcG9ydF9wdXQoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9vcGVyYXRpb25zIGdzX3R0eV9vcHMgPSB7XG4mIzQzO1x0Lmluc3RhbGwgPVx0XHRnc19pbnN0YWxsLFxuIFx0Lm9wZW4gPVx0XHRcdGdzX29wZW4sXG4gXHQuY2xvc2UgPVx0XHRnc19jbG9zZSxcbiBcdC53cml0ZSA9XHRcdGdzX3dyaXRlLFxuQEAgLTkxOSw2ICYjNDM7OTM2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBnc190dHlfb3BzID0ge1xuIFx0LnVudGhyb3R0bGUgPVx0XHRnc191bnRocm90dGxlLFxuIFx0LmJyZWFrX2N0bCA9XHRcdGdzX2JyZWFrX2N0bCxcbiBcdC5nZXRfaWNvdW50ID1cdFx0Z3NfZ2V0X2ljb3VudCxcbiYjNDM7XHQuY2xlYW51cCA9XHRcdGdzX2NsZWFudXAsXG4gfTtcbiBcbiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuQEAgLTEyMDMsNiAmIzQzOzEyMjEsMjAgQEAgc3RhdGljIHZvaWQgZ3NfY29uc29sZV9leGl0KHN0cnVjdCBnc19wb3J0ICpwb3J0KVxuIFxuICNlbmRpZlxuIFxuJiM0MztzdGF0aWMgdm9pZCBnc19wb3J0X2Rlc3RydWN0KHN0cnVjdCB0dHlfcG9ydCAqcG9ydClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBnc19wb3J0ICpnc19wb3J0ID0gY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCBnc19wb3J0LCBwb3J0KTtcbiYjNDM7XG4mIzQzO1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmdzX3BvcnQtXHUwMDNlcHVzaCk7XG4mIzQzO1x0a2ZpZm9fZnJlZShcdTAwMjZnc19wb3J0LVx1MDAzZXBvcnRfd3JpdGVfYnVmKTtcbiYjNDM7XHR0dHlfcG9ydF9kZXN0cm95KHBvcnQpO1xuJiM0MztcdGtmcmVlKGdzX3BvcnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9wb3J0X29wZXJhdGlvbnMgZ3NfcG9ydF9vcHMgPSB7XG4mIzQzO1x0LmRlc3RydWN0ID0gZ3NfcG9ydF9kZXN0cnVjdCxcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGludFxuIGdzX3BvcnRfYWxsb2ModW5zaWduZWQgcG9ydF9udW0sIHN0cnVjdCB1c2JfY2RjX2xpbmVfY29kaW5nICpjb2RpbmcpXG4ge1xuQEAgLTEyMjIsOSAmIzQzOzEyNTQsOSBAQCBnc19wb3J0X2FsbG9jKHVuc2lnbmVkIHBvcnRfbnVtLCBzdHJ1Y3QgdXNiX2NkY19saW5lX2NvZGluZyAqY29kaW5nKVxuIFx0fVxuIFxuIFx0dHR5X3BvcnRfaW5pdChcdTAwMjZwb3J0LVx1MDAzZXBvcnQpO1xuJiM0MztcdHBvcnQtXHUwMDNlcG9ydC5vcHMgPSBcdTAwMjZnc19wb3J0X29wcztcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnBvcnQtXHUwMDNlcG9ydF9sb2NrKTtcbiBcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2cG9ydC1cdTAwM2VkcmFpbl93YWl0KTtcbi1cdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2cG9ydC1cdTAwM2VjbG9zZV93YWl0KTtcbiBcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnBvcnQtXHUwMDNlcHVzaCwgZ3NfcnhfcHVzaCk7XG4gXG5AQCAtMTI0MSwyNSAmIzQzOzEyNzMsMTAgQEAgZ3NfcG9ydF9hbGxvYyh1bnNpZ25lZCBwb3J0X251bSwgc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcgKmNvZGluZylcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZ3NfY2xvc2VkKHN0cnVjdCBnc19wb3J0ICpwb3J0KVxuLXtcbi1cdGludCBjb25kO1xuLVxuLVx0c3Bpbl9sb2NrX2lycShcdTAwMjZwb3J0LVx1MDAzZXBvcnRfbG9jayk7XG4tXHRjb25kID0gcG9ydC1cdTAwM2Vwb3J0LmNvdW50ID09IDA7XG4tXHRzcGluX3VubG9ja19pcnEoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0X2xvY2spO1xuLVxuLVx0cmV0dXJuIGNvbmQ7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIGdzZXJpYWxfZnJlZV9wb3J0KHN0cnVjdCBnc19wb3J0ICpwb3J0KVxuIHtcbi1cdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZwb3J0LVx1MDAzZXB1c2gpO1xuLVx0Lyogd2FpdCBmb3Igb2xkIG9wZW5zIHRvIGZpbmlzaCAqL1xuLVx0d2FpdF9ldmVudChwb3J0LVx1MDAzZWNsb3NlX3dhaXQsIGdzX2Nsb3NlZChwb3J0KSk7XG4gXHRXQVJOX09OKHBvcnQtXHUwMDNlcG9ydF91c2IgIT0gTlVMTCk7XG4tXHR0dHlfcG9ydF9kZXN0cm95KFx1MDAyNnBvcnQtXHUwMDNlcG9ydCk7XG4tXHRrZnJlZShwb3J0KTtcbiYjNDM7XHR0dHlfcG9ydF9wdXQoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0KTtcbiB9XG4gXG4gdm9pZCBnc2VyaWFsX2ZyZWVfbGluZSh1bnNpZ25lZCBjaGFyIHBvcnRfbnVtKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIzOjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9HQURHRVQmIzM0OywKICAgICYjMzQ7VVNCX0NPTkZJR0ZTJiMzNDssCiAgICAmIzM0O1VTQl9DT05GSUdGU19TRVJJQUwmIzM0OywKICAgICYjMzQ7VVNCX0NPTkZJR0ZTX0FDTSYjMzQ7LAogICAgJiMzNDtVU0JfVV9TRVJJQUwmIzM0OywKICAgICYjMzQ7VFRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z3NfaW5zdGFsbCYjMzQ7LAogICAgJiMzNDtnc19jbGVhbnVwJiMzNDssCiAgICAmIzM0O2dzX3BvcnRfZGVzdHJ1Y3QmIzM0OywKICAgICYjMzQ7Z3Nfb3BlbiYjMzQ7LAogICAgJiMzNDtnc19jbG9zZSYjMzQ7LAogICAgJiMzNDtnc2VyaWFsX2ZyZWVfcG9ydCYjMzQ7LAogICAgJiMzNDtnc2VyaWFsX2ZyZWVfbGluZSYjMzQ7LAogICAgJiMzNDtnc2VyaWFsX2FsbG9jX2xpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVzdHJ1Y3R1cmVzIHRoZSBsaWZlY3ljbGUsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIG9wZW4vY2xvc2Ugc3luY2hyb25pemF0aW9uIG9mIHRoZSBVU0Igc2VyaWFsIGdhZGdldCBkcml2ZXIgKHVfc2VyaWFsLmMpIHVzaW5nIHR0eV9wb3J0X29wZXJhdGlvbnMgKC5kZXN0cnVjdCkgYW5kIHR0eV9wb3J0X2dldC9wdXQgYWNyb3NzIGluc3RhbGwgYW5kIGNsZWFudXAgY2FsbGJhY2tzIGluc3RlYWQgb2YgbWFudWFsIHdhaXRxdWV1ZSB0cmFja2luZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGdhZGdldCBDb25maWdGUywgZHVtbXlfaGNkLCBvciByYXctZ2FkZ2V0IGFsb25nIHdpdGggdHR5R1MqIGRldmljZSBvcGVyYXRpb25zLCBtYWtpbmcgaXQgYW4gaW1wb3J0YW50IHRhcmdldCBmb3IgY29uY3VycmVuY3kgYW5kIGxpZmVjeWNsZSBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTUwZTRmZDJmMzhkMTVlZWM1NmRmZWY0ZjJhMWM5OWQ4MjFjNTQwZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMjM6MzY6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jCmluZGV4IGNkZDFkZmM2NjZjNGYuLmM4MmM1ODg4YzZjNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jCkBAIC0xMjUsNyAmIzQzOzEyNSw2IEBAIHN0cnVjdCBnc19wb3J0IHsKIAlzdHJ1Y3Qga2ZpZm8JCXBvcnRfd3JpdGVfYnVmOwogCXdhaXRfcXVldWVfaGVhZF90CWRyYWluX3dhaXQ7CS8qIHdhaXQgd2hpbGUgd3JpdGVzIGRyYWluICovCiAJYm9vbCAgICAgICAgICAgICAgICAgICAgd3JpdGVfYnVzeTsKLQl3YWl0X3F1ZXVlX2hlYWRfdAljbG9zZV93YWl0OwogCWJvb2wJCQlzdXNwZW5kZWQ7CS8qIHBvcnQgc3VzcGVuZGVkICovCiAJYm9vbAkJCXN0YXJ0X2RlbGF5ZWQ7CS8qIGRlbGF5IHN0YXJ0IHdoZW4gc3VzcGVuZGVkICovCiAJc3RydWN0IGFzeW5jX2ljb3VudAlpY291bnQ7CkBAIC02MTAsMTcgJiM0Mzs2MDksOSBAQCBzdGF0aWMgaW50IGdzZXJpYWxfd2FrZXVwX2hvc3Qoc3RydWN0IGdzZXJpYWwgKmdzZXIpCiAgKi8KIHN0YXRpYyBpbnQgZ3Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpbnQJCXBvcnRfbnVtID0gdHR5LSZndDtpbmRleDsKLQlzdHJ1Y3QgZ3NfcG9ydAkqcG9ydDsKJiM0MzsJc3RydWN0IGdzX3BvcnQJKnBvcnQgPSB0dHktJmd0O2RyaXZlcl9kYXRhOwogCWludAkJc3RhdHVzID0gMDsKIAotCW11dGV4X2xvY2soJmFtcDtwb3J0c1twb3J0X251bV0ubG9jayk7Ci0JcG9ydCA9IHBvcnRzW3BvcnRfbnVtXS5wb3J0OwotCWlmICghcG9ydCkgewotCQlzdGF0dXMgPSAtRU5PREVWOwotCQlnb3RvIG91dDsKLQl9Ci0KIAlzcGluX2xvY2tfaXJxKCZhbXA7cG9ydC0mZ3Q7cG9ydF9sb2NrKTsKIAogCS8qIGFsbG9jYXRlIGNpcmN1bGFyIGJ1ZmZlciBvbiBmaXJzdCBvcGVuICovCkBAIC02MjgsMTcgJiM0Mzs2MTksMTIgQEAgc3RhdGljIGludCBnc19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQogCiAJCXNwaW5fdW5sb2NrX2lycSgmYW1wO3BvcnQtJmd0O3BvcnRfbG9jayk7CiAKLQkJLyoKLQkJICogcG9ydG1hc3RlciYjMzk7cyBtdXRleCBzdGlsbCBwcm90ZWN0cyBmcm9tIHNpbXVsdGFuZW91cyBvcGVuKCksCi0JCSAqIGFuZCBjbG9zZSgpIGNhbiYjMzk7dCBoYXBwZW4sIHlldC4KLQkJICovCi0KIAkJc3RhdHVzID0ga2ZpZm9fYWxsb2MoJmFtcDtwb3J0LSZndDtwb3J0X3dyaXRlX2J1ZiwKIAkJCQkgICAgIFdSSVRFX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHN0YXR1cykgewogCQkJcHJfZGVidWcoJiMzNDtnc19vcGVuOiB0dHlHUyVkICglcCwlcCkgbm8gYnVmZmVyXG4mIzM0OywKLQkJCQkgcG9ydF9udW0sIHR0eSwgZmlsZSk7Ci0JCQlnb3RvIG91dDsKJiM0MzsJCQkJIHBvcnQtJmd0O3BvcnRfbnVtLCB0dHksIGZpbGUpOwomIzQzOwkJCXJldHVybiBzdGF0dXM7CiAJCX0KIAogCQlzcGluX2xvY2tfaXJxKCZhbXA7cG9ydC0mZ3Q7cG9ydF9sb2NrKTsKQEAgLTY0OCw3ICYjNDM7NjM0LDYgQEAgc3RhdGljIGludCBnc19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQogCWlmIChwb3J0LSZndDtwb3J0LmNvdW50JiM0MzsmIzQzOykKIAkJZ290byBleGl0X3VubG9ja19wb3J0OwogCi0JdHR5LSZndDtkcml2ZXJfZGF0YSA9IHBvcnQ7CiAJcG9ydC0mZ3Q7cG9ydC50dHkgPSB0dHk7CiAKIAkvKiBpZiBjb25uZWN0ZWQsIHN0YXJ0IHRoZSBJL08gc3RyZWFtICovCkBAIC02NzIsOCAmIzQzOzY1Nyw2IEBAIHN0YXRpYyBpbnQgZ3Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAogZXhpdF91bmxvY2tfcG9ydDoKIAlzcGluX3VubG9ja19pcnEoJmFtcDtwb3J0LSZndDtwb3J0X2xvY2spOwotb3V0OgotCW11dGV4X3VubG9jaygmYW1wO3BvcnRzW3BvcnRfbnVtXS5sb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC03NDQsNyAmIzQzOzcyNyw2IEBAIHN0YXRpYyB2b2lkIGdzX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQogCXByX2RlYnVnKCYjMzQ7Z3NfY2xvc2U6IHR0eUdTJWQgKCVwLCVwKSBkb25lIVxuJiMzNDssCiAJCQlwb3J0LSZndDtwb3J0X251bSwgdHR5LCBmaWxlKTsKIAotCXdha2VfdXAoJmFtcDtwb3J0LSZndDtjbG9zZV93YWl0KTsKIGV4aXQ6CiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7cG9ydC0mZ3Q7cG9ydF9sb2NrKTsKIH0KQEAgLTkwOCw3ICYjNDM7ODkwLDQyIEBAIHN0YXRpYyBpbnQgZ3NfZ2V0X2ljb3VudChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBnc19pbnN0YWxsKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiYjNDM7ewomIzQzOwlpbnQgcG9ydF9udW0gPSB0dHktJmd0O2luZGV4OwomIzQzOwlzdHJ1Y3QgZ3NfcG9ydCAqcG9ydDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3BvcnRzW3BvcnRfbnVtXS5sb2NrKTsKJiM0MzsJcG9ydCA9IHBvcnRzW3BvcnRfbnVtXS5wb3J0OwomIzQzOwlpZiAoIXBvcnQpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO3BvcnRzW3BvcnRfbnVtXS5sb2NrKTsKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwl9CiYjNDM7CiYjNDM7CXR0eV9wb3J0X2dldCgmYW1wO3BvcnQtJmd0O3BvcnQpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwb3J0c1twb3J0X251bV0ubG9jayk7CiYjNDM7CiYjNDM7CXJldCA9IHR0eV9zdGFuZGFyZF9pbnN0YWxsKGRyaXZlciwgdHR5KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJdHR5X3BvcnRfcHV0KCZhbXA7cG9ydC0mZ3Q7cG9ydCk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXR0eS0mZ3Q7ZHJpdmVyX2RhdGEgPSBwb3J0OwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZ3NfY2xlYW51cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQomIzQzO3sKJiM0MzsJc3RydWN0IGdzX3BvcnQgKnBvcnQgPSB0dHktJmd0O2RyaXZlcl9kYXRhOwomIzQzOwomIzQzOwlpZiAocG9ydCkKJiM0MzsJCXR0eV9wb3J0X3B1dCgmYW1wO3BvcnQtJmd0O3BvcnQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgZ3NfdHR5X29wcyA9IHsKJiM0MzsJLmluc3RhbGwgPQkJZ3NfaW5zdGFsbCwKIAkub3BlbiA9CQkJZ3Nfb3BlbiwKIAkuY2xvc2UgPQkJZ3NfY2xvc2UsCiAJLndyaXRlID0JCWdzX3dyaXRlLApAQCAtOTE5LDYgJiM0Mzs5MzYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9vcGVyYXRpb25zIGdzX3R0eV9vcHMgPSB7CiAJLnVudGhyb3R0bGUgPQkJZ3NfdW50aHJvdHRsZSwKIAkuYnJlYWtfY3RsID0JCWdzX2JyZWFrX2N0bCwKIAkuZ2V0X2ljb3VudCA9CQlnc19nZXRfaWNvdW50LAomIzQzOwkuY2xlYW51cCA9CQlnc19jbGVhbnVwLAogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTEyMDMsNiAmIzQzOzEyMjEsMjAgQEAgc3RhdGljIHZvaWQgZ3NfY29uc29sZV9leGl0KHN0cnVjdCBnc19wb3J0ICpwb3J0KQogCiAjZW5kaWYKIAomIzQzO3N0YXRpYyB2b2lkIGdzX3BvcnRfZGVzdHJ1Y3Qoc3RydWN0IHR0eV9wb3J0ICpwb3J0KQomIzQzO3sKJiM0MzsJc3RydWN0IGdzX3BvcnQgKmdzX3BvcnQgPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IGdzX3BvcnQsIHBvcnQpOwomIzQzOwomIzQzOwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtnc19wb3J0LSZndDtwdXNoKTsKJiM0MzsJa2ZpZm9fZnJlZSgmYW1wO2dzX3BvcnQtJmd0O3BvcnRfd3JpdGVfYnVmKTsKJiM0MzsJdHR5X3BvcnRfZGVzdHJveShwb3J0KTsKJiM0MzsJa2ZyZWUoZ3NfcG9ydCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X3BvcnRfb3BlcmF0aW9ucyBnc19wb3J0X29wcyA9IHsKJiM0MzsJLmRlc3RydWN0ID0gZ3NfcG9ydF9kZXN0cnVjdCwKJiM0Mzt9OwomIzQzOwogc3RhdGljIGludAogZ3NfcG9ydF9hbGxvYyh1bnNpZ25lZCBwb3J0X251bSwgc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcgKmNvZGluZykKIHsKQEAgLTEyMjIsOSAmIzQzOzEyNTQsOSBAQCBnc19wb3J0X2FsbG9jKHVuc2lnbmVkIHBvcnRfbnVtLCBzdHJ1Y3QgdXNiX2NkY19saW5lX2NvZGluZyAqY29kaW5nKQogCX0KIAogCXR0eV9wb3J0X2luaXQoJmFtcDtwb3J0LSZndDtwb3J0KTsKJiM0MzsJcG9ydC0mZ3Q7cG9ydC5vcHMgPSAmYW1wO2dzX3BvcnRfb3BzOwogCXNwaW5fbG9ja19pbml0KCZhbXA7cG9ydC0mZ3Q7cG9ydF9sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7cG9ydC0mZ3Q7ZHJhaW5fd2FpdCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmYW1wO3BvcnQtJmd0O2Nsb3NlX3dhaXQpOwogCiAJSU5JVF9ERUxBWUVEX1dPUksoJmFtcDtwb3J0LSZndDtwdXNoLCBnc19yeF9wdXNoKTsKIApAQCAtMTI0MSwyNSAmIzQzOzEyNzMsMTAgQEAgZ3NfcG9ydF9hbGxvYyh1bnNpZ25lZCBwb3J0X251bSwgc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcgKmNvZGluZykKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGdzX2Nsb3NlZChzdHJ1Y3QgZ3NfcG9ydCAqcG9ydCkKLXsKLQlpbnQgY29uZDsKLQotCXNwaW5fbG9ja19pcnEoJmFtcDtwb3J0LSZndDtwb3J0X2xvY2spOwotCWNvbmQgPSBwb3J0LSZndDtwb3J0LmNvdW50ID09IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZhbXA7cG9ydC0mZ3Q7cG9ydF9sb2NrKTsKLQotCXJldHVybiBjb25kOwotfQotCiBzdGF0aWMgdm9pZCBnc2VyaWFsX2ZyZWVfcG9ydChzdHJ1Y3QgZ3NfcG9ydCAqcG9ydCkKIHsKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtwb3J0LSZndDtwdXNoKTsKLQkvKiB3YWl0IGZvciBvbGQgb3BlbnMgdG8gZmluaXNoICovCi0Jd2FpdF9ldmVudChwb3J0LSZndDtjbG9zZV93YWl0LCBnc19jbG9zZWQocG9ydCkpOwogCVdBUk5fT04ocG9ydC0mZ3Q7cG9ydF91c2IgIT0gTlVMTCk7Ci0JdHR5X3BvcnRfZGVzdHJveSgmYW1wO3BvcnQtJmd0O3BvcnQpOwotCWtmcmVlKHBvcnQpOwomIzQzOwl0dHlfcG9ydF9wdXQoJmFtcDtwb3J0LSZndDtwb3J0KTsKIH0KIAogdm9pZCBnc2VyaWFsX2ZyZWVfbGluZSh1bnNpZ25lZCBjaGFyIHBvcnRfbnVtKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzA4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVVNCIEdhZGdldCBTZXJpYWwgRHJpdmVyIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCYjMzk7cyB3b3J0aCBhIGZ1enppbmcgcnVuIHdpdGggc3l6a2FsbGVyLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGEgZmFpcmx5IHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIG9mIHRoZSBVU0IgZ2FkZ2V0IHNlcmlhbCBkcml2ZXIgKGB1X3NlcmlhbC5jYCksIHNvIGl04oCZcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2suCgpGaXJzdCwgdGhlIGRpZmYgdGVsbHMgbWUgaXQmIzM5O3MgdG91Y2hpbmcgdGhlIGhlYXJ0IG9mIGB1X3NlcmlhbC5jYC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBzcGVjaWZpYyBjaGFuZ2VzLCBzaGFsbCB3ZT8gT2theSwgaGVyZSYjMzk7cyB3aGF0IGp1bXBzIG91dDogdGhleSYjMzk7cmUgY2xlYW5pbmcgdXAgc29tZSBvbGQgY29kZS4gVGhleSYjMzk7dmUgcmVtb3ZlZCBgd2FpdF9xdWV1ZV9oZWFkX3QgY2xvc2Vfd2FpdGAgZnJvbSBgZ3NfcG9ydGAuIEluIGBnc19vcGVuYCwgdGhlIGNvZGUgaXMgYmVjb21pbmcgbW9yZSBzdHJlYW1saW5lZC4gVGhlcmUmIzM5O3Mgbm8gbG9uZ2VyIHRoZSBtdXRleCBsb2NraW5nIGFuZCB0aGUgYnVmZmVyIGFsbG9jYXRpb24gbG9naWMgaXMgc2ltcGxpZmllZCwgd2hpY2ggY291bGQgaGF2ZSBzdWJ0bGUgaW1wbGljYXRpb25zLiBgZ3NfY2xvc2VgIGFsc28gbG9zdCBpdHMgYHdha2VfdXBgIGZ1bmN0aW9uIGZvciB0aGUgY2xvc2Ugd2FpdC4gVGhlIGludHJvZHVjdGlvbiBvZiBgZ3NfaW5zdGFsbGAgYW5kIGBnc19jbGVhbnVwYCBpbiBgZ3NfdHR5X29wc2Agd2l0aCB0aGUgYXNzb2NpYXRlZCBnZXQvcHV0IGxvZ2ljIGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgdHJhbnNpdGlvbmluZyB0byB1c2luZyBgdHR5X3BvcnRfb3BlcmF0aW9uc2AgZm9yIHByb3BlciBsaWZldGltZSBtYW5hZ2VtZW50IGFuZCByZWZjb3VudGluZy4gYGdzX2luc3RhbGxgIGxvb2tzIHRvIGFjcXVpcmUgdGhlIGxvY2sgYW5kIGNhbGxzIGB0dHlfcG9ydF9nZXRgIGFuZCBgdHR5X3N0YW5kYXJkX2luc3RhbGxgLiBgZ3NfY2xlYW51cGAgY2FsbHMgYHR0eV9wb3J0X3B1dGAuIFRoZSBgZ3NfcG9ydF9kZXN0cnVjdGAgY2FsbGJhY2ssIHByb3ZpZGVkIHZpYSBgdHR5X3BvcnRfb3BlcmF0aW9uc2AsIGxvb2tzIGxpa2UgaXQmIzM5O3MgZ29pbmcgdG8gaGFuZGxlIHRoZSBjbGVhbnVwIHdoZW4gdGhlIHJlZmNvdW50IGhpdHMgemVyby4gYGdzX3BvcnRfYWxsb2NgIHJlZ2lzdGVycyB0aGUgcG9ydCBvcGVyYXRpb25zLiBUaGlzIGxvb2tzIGxpa2UgYSBjbGFzc2ljIHJlZmFjdG9yaW5nIHVzaW5nIGB0dHlfcG9ydF9vcGVyYXRpb25zYCBhbmQgYHR0eV9wb3J0X2dldGAvYHB1dGAgYWNyb3NzIGBpbnN0YWxsYC9gY2xlYW51cGAvYGRlc3RydWN0YCB0byBtYW5hZ2UgdGhlIFVTQiBnYWRnZXQgc2VyaWFsIGRyaXZlciYjMzk7cyBsaWZldGltZSBhbmQgcmVmY291bnRpbmcuIExhc3RseSwgYGdzZXJpYWxfZnJlZV9wb3J0YCByZXBsYWNlcyB0aGUgd2FpdCBvbiBjbG9zZV93YWl0IHdpdGggYHR0eV9wb3J0X3B1dCgmYW1wO3BvcnQtJmd0O3BvcnQpYC4KClRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgcGF0dGVybiBmb3IgcmVmYWN0b3JpbmcgdGhlc2UgdHlwZXMgb2YgZHJpdmVycy4gRnJvbSBteSBleHBlcmllbmNlLCBjaGFuZ2VzIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIHJlZmNvdW50aW5nIGFyZSBhbHdheXMgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gQSBsb3Qgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGluIHZhcmlvdXMgVVNCIGdhZGdldCBzZXJpYWwgZnVuY3Rpb25zIOKAkyBgZ19zZXJpYWxgLCBDREMgQUNNLCBhbmQgZXZlbiB0aGluZ3MgbGlrZSBDb25maWdGUyBnYWRnZXRzLiBUaG9zZSBhbGwgcmVseSBvbiB0aGlzIGNvZGUsIHNvIGV2ZW4gYSBtaW5vciBidWcgY291bGQgaGF2ZSBmYXIgcmVhY2hpbmcgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgdG8gc2VlIGhvdyB0aGUgY29kZSBpcyBlbmFibGVkLiBUaGlzIHBhdGNoIGRlZmluaXRlbHkgd2FycmFudHMgc3l6a2FsbGVyIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dV9zZXJpYWxcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZT0xMz1vYmotJChDT05GSUdfVVNCX0ZfU1NfTEIpXHQmIzQzOz0gdXNiX2Zfc3NfbGIub1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19VU0JfVV9TRVJJQUwpXHQmIzQzOz0gdV9zZXJpYWwub1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlLTE1LXVzYl9mX3NlcmlhbC15XHRcdFx0Oj0gZl9zZXJpYWwub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MjIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYFVTQl9VX1NFUklBTGAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBVU0JfVV9TRVJJQUxgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gVGhpcyBsaWtlbHkgcGVydGFpbnMgdG8gZW5hYmxpbmcgYSBVU0Igc2VyaWFsIGdhZGdldCBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgdGhlIGNvbnRleHRzIGl0JiMzOTtzIG1lYW50IHRvIGJlIHVzZWQgd2l0aGluLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKlBsYWNlbWVudDoqKiBXaGVyZSBkb2VzIHRoaXMgb3B0aW9uIHJlc2lkZSBpbiB0aGUgb3ZlcmFsbCBVU0IgY29uZmlndXJhdGlvbiBoaWVyYXJjaHk/IElzIGl0IHVuZGVyIGEgc3BlY2lmaWMgY29udHJvbGxlciwgZ2FkZ2V0IG1vZGUgc2VjdGlvbiwgb3IgYSBtb3JlIGdlbmVyYWwgVVNCIHNlcmlhbCB1bWJyZWxsYT8KKiAgICoqRGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoaXMgdG8gYmUgdmFsaWQ/IEFyZSB0aGVyZSBhbnkgY29uZmxpY3RpbmcgY2hvaWNlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSBhbnkga2VybmVsIG1vZHVsZXMgaW1wbGljaXRseSBlbmFibGVkIGFzIGEgY29uc2VxdWVuY2Ugb2YgdGhpcyBvcHRpb24/CiogICAqKkRlZmF1bHQgVmFsdWU6KiogSXMgaXQgYHlgLCBgbmAsIG9yIGBtYD8gVW5kZXJzdGFuZGluZyB0aGUgZGVmYXVsdCBnaXZlcyBpbnNpZ2h0IGludG8gdGhlIGludGVuZGVkIHVzZSBjYXNlIGFuZCBwb3RlbnRpYWwgcmVncmVzc2lvbnMgaWYgdGhlIGRlZmF1bHQgaXMgY2hhbmdlZC4gSXMgdGhlcmUgYSBkZWZhdWx0IHNlbGVjdGlvbiBvZiBhIHNwZWNpZmljIGRldmljZT8KKiAgICoqSGVscCBUZXh0OioqIFRoZSBoZWxwIHRleHQgaXMgdXN1YWxseSB0aGUgZmlyc3Qgc291cmNlIG9mIGluZm9ybWF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGludGVuZGVkIHVzZSBjYXNlLiBEb2VzIGl0IHByb3ZpZGUgdXNlZnVsIGNvbnRleHQgb3IgZXhhbXBsZXM/IERvZXMgdGhlIGhlbHAgdGV4dCBkZXNjcmliZSBhbnkgc3BlY2lmaWMgcmVxdWlyZW1lbnRzIGZvciB0aGlzIG1vZHVsZT8KKiAgICoqVHJpZ2dlcnM6KiogV2hhdCBzcGVjaWZpYyBzY2VuYXJpb3Mgb3IgaGFyZHdhcmUgc2V0dXBzIHRyaWdnZXIgdGhlIG5lZWQgdG8gZXhwbGljaXRseSBjb25maWd1cmUgYFVTQl9VX1NFUklBTGA/IEFyZSB0aGVyZSBvdGhlciwgbW9yZSBnZW5lcmljIG9wdGlvbnMgdGhhdCBtaWdodCBpbmRpcmVjdGx5IGltcGFjdCBpdHMgYmVoYXZpb3I/CiogICAqKkltcGxpY2F0aW9uczoqKiBXaGF0IGRvZXMgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgb3B0aW9uICpyZWFsbHkqIG1lYW4gaW4gdGVybXMgb2Ygc3lzdGVtIGJlaGF2aW9yIGFuZCByZXNvdXJjZSB1c2FnZT8gQXJlIHRoZXJlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGBVU0JgIGRldmljZSBpcyBjb25uZWN0ZWQgdG8gYW4gZXh0ZXJuYWwgZGV2aWNlPwoqICAgKipBcmNoaXRlY3R1cmUtU3BlY2lmaWMgQ29uZGl0aW9uczoqKiBBcmUgdGhlcmUgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBgc2VsZWN0YCBzdGF0ZW1lbnRzIG9yIGRlcGVuZGVuY2llcyBvbiBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyAoZS5nLiwgc3BlY2lmaWMgVVNCIGNvbnRyb2xsZXJzKSB0aGF0IEkgbmVlZCB0byBrZWVwIGluIG1pbmQ/CgpFc3NlbnRpYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgYFVTQl9VX1NFUklBTGAmIzM5O3Mgcm9sZSBpbiB0aGUgc3lzdGVtLiBUaGUgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VVNCX1VfU0VSSUFMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTEzMj1jb25maWcgVV9TRVJJQUxfQ09OU09MRVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTMzLVx0Ym9vbCBcJiMzNDtTZXJpYWwgZ2FkZ2V0IGNvbnNvbGUgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MTM0Olx0ZGVwZW5kcyBvbiBVU0JfVV9TRVJJQUxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTEzNS1cdGhlbHBcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz0xNTM9Y29uZmlnIFVTQl9GX1NTX0xCXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTU1LVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MTU2OmNvbmZpZyBVU0JfVV9TRVJJQUxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTE1Ny1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9MjQwPWNvbmZpZyBVU0JfQ09ORklHRlNfU0VSSUFMXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjQzLVx0ZGVwZW5kcyBvbiBUVFlcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjI0NDpcdHNlbGVjdCBVU0JfVV9TRVJJQUxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTI0NS1cdHNlbGVjdCBVU0JfRl9TRVJJQUxcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz0yNDk9Y29uZmlnIFVTQl9DT05GSUdGU19BQ01cbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0yNTItXHRkZXBlbmRzIG9uIFRUWVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MjUzOlx0c2VsZWN0IFVTQl9VX1NFUklBTFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjU0LVx0c2VsZWN0IFVTQl9GX0FDTVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTI1OT1jb25maWcgVVNCX0NPTkZJR0ZTX09CRVhcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0yNjItXHRkZXBlbmRzIG9uIFRUWVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MjYzOlx0c2VsZWN0IFVTQl9VX1NFUklBTFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjY0LVx0c2VsZWN0IFVTQl9GX09CRVhcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGU9MTM9b2JqLSQoQ09ORklHX1VTQl9GX1NTX0xCKVx0JiM0Mzs9IHVzYl9mX3NzX2xiLm9cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfVVNCX1VfU0VSSUFMKVx0JiM0Mzs9IHVfc2VyaWFsLm9cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZS0xNS11c2JfZl9zZXJpYWwteVx0XHRcdDo9IGZfc2VyaWFsLm9cbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc9MjkxPWNvbmZpZyBVU0JfR19TRVJJQUxcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMjkzLVx0ZGVwZW5kcyBvbiBUVFlcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZzoyOTQ6XHRzZWxlY3QgVVNCX1VfU0VSSUFMXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMjk1LVx0c2VsZWN0IFVTQl9GX0FDTVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz0zNTE9Y29uZmlnIFVTQl9DRENfQ09NUE9TSVRFXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTM1NC1cdHNlbGVjdCBVU0JfTElCQ09NUE9TSVRFXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc6MzU1Olx0c2VsZWN0IFVTQl9VX1NFUklBTFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTM1Ni1cdHNlbGVjdCBVU0JfVV9FVEhFUlxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz0zNzA9Y29uZmlnIFVTQl9HX05PS0lBXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTM3NC1cdHNlbGVjdCBVU0JfTElCQ09NUE9TSVRFXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc6Mzc1Olx0c2VsZWN0IFVTQl9VX1NFUklBTFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTM3Ni1cdHNlbGVjdCBVU0JfVV9FVEhFUlxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz0zODk9Y29uZmlnIFVTQl9HX0FDTV9NU1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy0zOTItXHRzZWxlY3QgVVNCX0xJQkNPTVBPU0lURVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnOjM5MzpcdHNlbGVjdCBVU0JfVV9TRVJJQUxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy0zOTQtXHRzZWxlY3QgVVNCX0ZfQUNNXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnPTQwMz1jb25maWcgVVNCX0dfTVVMVElcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctNDA3LVx0c2VsZWN0IFVTQl9MSUJDT01QT1NJVEVcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZzo0MDg6XHRzZWxlY3QgVVNCX1VfU0VSSUFMXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctNDA5LVx0c2VsZWN0IFVTQl9VX0VUSEVSXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnPTQ5MD1jb25maWcgVVNCX0dfREJHUF9TRVJJQUxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy00OTEtXHRkZXBlbmRzIG9uIFVTQl9HX0RCR1BcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZzo0OTI6XHRzZWxlY3QgVVNCX1VfU0VSSUFMXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctNDkzLVx0Ym9vbCBcJiMzNDtzZXJpYWxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDcwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIFN5emthbGxlciYjMzk7cyBVU0IgR2FkZ2V0IFRlc3RpbmcqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgc3l6a2FsbGVyIGFjdHVhbGx5IHBsYXlzIHdpdGggVVNCIGdhZGdldCBkcml2ZXJzLiBJIGtub3cgaXQgaW50ZXJhY3RzIGhlYXZpbHkgd2l0aCB0aGVtLCB1c2luZyB0aGluZ3MgbGlrZSBgZHVtbXlfaGNkYCwgdGhlIGBjb25maWdmc2AgZ2FkZ2V0LCBhbmQgYGdfc2VyaWFsYC4gSXTigJlzIGFsbCB2ZXJ5IGhhbmRzLW9uLCBsZXZlcmFnaW5nIGAvZGV2L2dhZGdldGAsIENvbmZpZ0ZTIFVTQiBnYWRnZXRzLCBhbmQgZXZlbiB0aGUgcmF3LWdhZGdldCBhcHByb2FjaC4gQnV0IEkgbmVlZCB0byBnbyBkZWVwZXIgdGhhbiB0aGF0LgoKSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aGVzZSBgdHR5R1MqYCBjaGFyYWN0ZXIgZGV2aWNlcywgYC9kZXYvdHR5R1MwYCBhbmQgc28gb24uIFRoYXQgYHVfc2VyaWFsLmNgIGNvZGUgaXMga2V5LCBiZWNhdXNlIHVzZXJzcGFjZSBjYW4gZGlyZWN0bHkgb3BlbiwgY2xvc2UsIHJlYWQsIHdyaXRlLCBhbmQgdXNlIGBpb2N0bGAgb24gdGhlbSEgU28sIEkgbmVlZCB0byByZWFsbHkgZGlnIGludG8gYHVfc2VyaWFsLmNgLiBUaGF04oCZcyB3aGVyZSB0aGUgbWFnaWMgb2YgY3JlYXRpbmcgdGhlc2Ugc3BlY2lmaWMgZHJpdmVyL2RldmljZSBpbnRlcmFjdGlvbnMgaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhhdCBkcml2ZXIgaXMgY3JlYXRpbmcgYW5kIGhvdyBzeXprYWxsZXIgaXMgbGV2ZXJhZ2luZyBpdCB0byBmaW5kIGJ1Z3MuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgdGhlIGZ1enppbmcgcHJvYmFibHkgaXMgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R0eV9yZWdpc3Rlcl9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmM9MTU2Mj1zdGF0aWMgaW50IF9faW5pdCB1c2VyaWFsX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYy0xNTk0LVx0LyogZXhwb3J0IHRoZSBkcml2ZXIgLi4uICovXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYzoxNTk1Olx0c3RhdHVzID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihkcml2ZXIpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMtMTU5Ni1cdGlmIChzdGF0dXMpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTk4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHJlYWRpbmcgYW5kIGFuYWx5emluZyB0aGF0IHNwZWNpZmljIGNvZGUgc2VjdGlvbjoKCioqRGl2aW5nIGludG8gdV9zZXJpYWwuYzogUGFyc2luZyB0aGUgRGV0YWlscyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIGluIG9uIGxpbmVzIDE1NjAgdG8gMTYwMCB3aXRoaW4gYGRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jYC4gVGhpcyB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVlcCB3aXRoaW4gdGhlIFVTQiBnYWRnZXQgZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgdGhlIHNlcmlhbCBlbXVsYXRpb24gZHJpdmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiB0aGlzIHNlY3Rpb24gYmVjYXVzZSBpdCYjMzk7cyBwcm9iYWJseSBoYW5kbGluZyBzb21lIGtleSBhc3BlY3Qgb2YgaG93IHRoZSBzZXJpYWwgZGV2aWNlIGlzIHByZXNlbnRlZCB0byB0aGUgaG9zdC4gQmFzZWQgb24gdGhlIGZpbGUgbmFtZSwgaXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIHdpdGggZGF0YSB0cmFuc2ZlciBvciBjb250cm9sIHNpZ25hbHMsIG9yIG1heWJlIGV2ZW4gY29uZmlndXJhdGlvbiBvZiB0aGUgVVNCIHNlcmlhbCBpbnRlcmZhY2UgaXRzZWxmLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gaGFuZGxpbmcgaW5jb21pbmcgZGF0YSBmcm9tIHRoZSBob3N0LCBxdWV1ZWluZyBvdXRnb2luZyBkYXRhLCBvciBtYW5hZ2luZyB0aGUgdmFyaW91cyBzZXJpYWwgY29udHJvbCBzaWduYWxzIChsaWtlIERUUiwgUlRTLCBldGMuKSBpZiB0aGlzIGRyaXZlciBzdXBwb3J0cyB0aGVtLiBNeSBpbml0aWFsIGh5cG90aGVzaXMgaXMgdGhhdCBJIHdpbGwgZmluZCB0aGUgbG9naWMgZGVhbGluZyB3aXRoIGVpdGhlciBhIGhhcmR3YXJlIG9yIHNvZnR3YXJlIEZJRk8gYnVmZmVyLiBJJiMzOTtsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgYW55IGRhdGEgc3RydWN0dXJlcyBkZWZpbmVkIG9yIGFjY2Vzc2VkIHdpdGhpbiB0aGlzIHJlZ2lvbiB0byBzZWUgaG93IHRoZSBkcml2ZXIgbWFpbnRhaW5zIHRoZSBkYXRhIGZsb3csIGFuZCBpZiB0aGVyZSBhcmUgYW55IHJhY2UgY29uZGl0aW9ucyB0byBiZSBhdm9pZGVkLiBJJiMzOTttIGFsc28gZ29pbmcgdG8gY2hlY2sgZm9yIGVycm9yIGhhbmRsaW5nOyBhIHNlcmlhbCBkcml2ZXIgaXMgbm90b3Jpb3VzbHkgcHJvbmUgdG8gZXJyb3JzIGluIGEgcmVhbCB3b3JsZC4gU28sIGl0IHNob3VsZCBiZSB3ZWxsLWd1YXJkZWQgYWdhaW5zdCBiYWQgZGF0YSBvciBtaXNjb25maWd1cmVkIGhhcmR3YXJlLiBJIG5lZWQgdG8gcXVpY2tseSBncmFzcCB0aGUgc3Vycm91bmRpbmcgY29kZSwgdG9vLCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuIFdoYXQgZnVuY3Rpb25zIGNhbGwgaW50byB0aGlzIHNlY3Rpb24/IFdoYXQgYXJlIHRoZSBlbnRyeSBwb2ludHM/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgdGhlc2UgbGluZXMgd2lsbCBlaXRoZXIgYmUgcGFydCBvZiBhIGNyaXRpY2FsIHNlY3Rpb24gZm9yIGRhdGEgdHJhbnNmZXIgb3Igc2V0dGluZyB1cCBhIFVTQiBlbmRwb2ludCBkZWRpY2F0ZWQgZm9yIHNlcmlhbCBkYXRhLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTU2MDpcdEVYUE9SVF9TWU1CT0xfR1BMKGdzZXJpYWxfcmVzdW1lKTtcbjE1NjE6XHRcbjE1NjI6XHRzdGF0aWMgaW50IF9faW5pdCB1c2VyaWFsX2luaXQodm9pZClcbjE1NjM6XHR7XG4xNTY0Olx0XHRzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyO1xuMTU2NTpcdFx0dW5zaWduZWRcdFx0XHRpO1xuMTU2NjpcdFx0aW50XHRcdFx0XHRzdGF0dXM7XG4xNTY3Olx0XG4xNTY4Olx0XHRkcml2ZXIgPSB0dHlfYWxsb2NfZHJpdmVyKE1BWF9VX1NFUklBTF9QT1JUUywgVFRZX0RSSVZFUl9SRUFMX1JBVyB8XG4xNTY5Olx0XHRcdFx0VFRZX0RSSVZFUl9EWU5BTUlDX0RFVik7XG4xNTcwOlx0XHRpZiAoSVNfRVJSKGRyaXZlcikpXG4xNTcxOlx0XHRcdHJldHVybiBQVFJfRVJSKGRyaXZlcik7XG4xNTcyOlx0XG4xNTczOlx0XHRkcml2ZXItXHUwMDNlZHJpdmVyX25hbWUgPSBcJiMzNDtnX3NlcmlhbFwmIzM0OztcbjE1NzQ6XHRcdGRyaXZlci1cdTAwM2VuYW1lID0gXCYjMzQ7dHR5R1NcJiMzNDs7XG4xNTc1Olx0XHQvKiB1c2VzIGR5bmFtaWNhbGx5IGFzc2lnbmVkIGRldl90IHZhbHVlcyAqL1xuMTU3NjpcdFxuMTU3NzpcdFx0ZHJpdmVyLVx1MDAzZXR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMO1xuMTU3ODpcdFx0ZHJpdmVyLVx1MDAzZXN1YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUw7XG4xNTc5Olx0XHRkcml2ZXItXHUwMDNlaW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zO1xuMTU4MDpcdFxuMTU4MTpcdFx0LyogOTYwMC04LU4tMSAuLi4gbWF0Y2hlcyBkZWZhdWx0cyBleHBlY3RlZCBieSBcJiMzNDt1c2JzZXIuc3lzXCYjMzQ7IG9uXG4xNTgyOlx0XHQgKiBNUy1XaW5kb3dzLiAgT3RoZXJ3aXNlLCBtb3N0IG9mIHRoZXNlIGZsYWdzIHNob3VsZG4mIzM5O3QgYWZmZWN0XG4xNTgzOlx0XHQgKiBhbnl0aGluZyB1bmxlc3Mgd2Ugd2VyZSB0byBhY3R1YWxseSBob29rIHVwIHRvIGEgc2VyaWFsIGxpbmUuXG4xNTg0Olx0XHQgKi9cbjE1ODU6XHRcdGRyaXZlci1cdTAwM2Vpbml0X3Rlcm1pb3MuY19jZmxhZyA9XG4xNTg2Olx0XHRcdFx0Qjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMO1xuMTU4NzpcdFx0ZHJpdmVyLVx1MDAzZWluaXRfdGVybWlvcy5jX2lzcGVlZCA9IDk2MDA7XG4xNTg4Olx0XHRkcml2ZXItXHUwMDNlaW5pdF90ZXJtaW9zLmNfb3NwZWVkID0gOTYwMDtcbjE1ODk6XHRcbjE1OTA6XHRcdHR0eV9zZXRfb3BlcmF0aW9ucyhkcml2ZXIsIFx1MDAyNmdzX3R0eV9vcHMpO1xuMTU5MTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX1VfU0VSSUFMX1BPUlRTOyBpJiM0MzsmIzQzOylcbjE1OTI6XHRcdFx0bXV0ZXhfaW5pdChcdTAwMjZwb3J0c1tpXS5sb2NrKTtcbjE1OTM6XHRcbjE1OTQ6XHRcdC8qIGV4cG9ydCB0aGUgZHJpdmVyIC4uLiAqL1xuMTU5NTpcdFx0c3RhdHVzID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihkcml2ZXIpO1xuMTU5NjpcdFx0aWYgKHN0YXR1cykge1xuMTU5NzpcdFx0XHRwcl9lcnIoXCYjMzQ7JXM6IGNhbm5vdCByZWdpc3RlciwgZXJyICVkXFxuXCYjMzQ7LFxuMTU5ODpcdFx0XHRcdFx0X19mdW5jX18sIHN0YXR1cyk7XG4xNTk5Olx0XHRcdGdvdG8gZmFpbDtcbjE2MDA6XHRcdH1cbjE2MDE6XHRcbjE2MDI6XHRcdGdzX3R0eV9kcml2ZXIgPSBkcml2ZXI7XG4xNjAzOlx0XG4xNjA0Olx0XHRwcl9kZWJ1ZyhcJiMzNDslczogcmVnaXN0ZXJlZCAlZCB0dHlHUyogZGV2aWNlJXNcXG5cJiMzNDssIF9fZnVuY19fLFxuMTYwNTpcdFx0XHRcdE1BWF9VX1NFUklBTF9QT1JUUyxcbjE2MDY6XHRcdFx0XHRzdHJfcGx1cmFsKE1BWF9VX1NFUklBTF9QT1JUUykpO1xuMTYwNzpcdFxuMTYwODpcdFx0cmV0dXJuIHN0YXR1cztcbjE2MDk6XHRmYWlsOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjI3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGN1cnJlbnQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipQb3J0IEFsbG9jYXRpb24sIERlYWxsb2NhdGlvbiwgYW5kIFVTQiBTZXJpYWwgSW50ZXJhY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gaG93IHBvcnRzIGFyZSBtYW5hZ2VkLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgVVNCIHNlcmlhbCBkZXZpY2VzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gc3RyYXRlZ2llcy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIG1lY2hhbmlzbXMgaW52b2x2ZWQg4oCTIGFyZSB3ZSB0YWxraW5nIGFib3V0IGR5bmFtaWMgYWxsb2NhdGlvbiBmcm9tIGEgcG9vbCwgc29tZSBraW5kIG9mIHBlcnNpc3RlbnQgbWFwcGluZywgb3IgYSBjb21iaW5hdGlvbj8gQW5kIGFyZSB0aGVyZSBhbnkgcmFjZSBjb25kaXRpb25zIEkgbmVlZCB0byBiZSBwYXJ0aWN1bGFybHkgd2FyeSBvZiwgZXNwZWNpYWxseSB3aGVuIGRldmljZXMgYXJlIGhvdC1wbHVnZ2VkIGFuZCB1bnBsdWdnZWQ/CgpJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBVU0Igc2VyaWFsIGFzcGVjdCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGNhbiBnZXQgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBtYXAgb3V0IGhvdyB0aGUgVVNCIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgcG9ydCBhbGxvY2F0aW9uIHN5c3RlbS4gRG9lcyBpdCByZXF1ZXN0IGEgcG9ydCBkaXJlY3RseSwgb3IgZG9lcyBpdCB0cmlnZ2VyIHNvbWUgaW50ZXJtZWRpYXRlIHNlcnZpY2U/IEhvdyBkb2VzIHRoZSBzeXN0ZW0gaGFuZGxlIGNvbnRlbnRpb24gaWYgbXVsdGlwbGUgVVNCIHNlcmlhbCBkZXZpY2VzIGFyZSBjb25uZWN0ZWQgc2ltdWx0YW5lb3VzbHk/IFdoYXQgaGFwcGVucyBkdXJpbmcgYSBkZXZpY2UgZGlzY29ubmVjdCDigJMgaG93IGNsZWFubHkgaXMgdGhlIHBvcnQgcmVsZWFzZWQsIGFuZCB3aGF0IHNpZ25hbHMgcHJvcGFnYXRlIHVwIHRoZSBzdGFjaz8gSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIGhvdyBlcnJvciBoYW5kbGluZyBpcyBpbnRlZ3JhdGVkIGhlcmUsIHdoYXQgYXJlIHRoZSBhcHByb3ByaWF0ZSByZXNwb25zZXMgZm9yIGludmFsaWQgcmVxdWVzdHMgb3IgcmVzb3VyY2UgbGltaXRhdGlvbnM/IEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBVU0Igc2VyaWFsIGRyaXZlciwgdGhlIHNlcmlhbCBwb3J0IGFic3RyYWN0aW9uLCBhbmQgdGhlIHVuZGVybHlpbmcgcG9ydCBhbGxvY2F0aW9uIGxheWVyLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHN5c3RlbXMgd29yayB0b2dldGhlciwgdG8gZGV0ZXJtaW5lIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgb3B0aW1pemVkLCBhbmQgdG8gZmluZCBvdXQgdGhlIHdlYWsgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnc2VyaWFsX2FsbG9jX2xpbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfYWNtLmM9ODgwPXN0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uX2luc3RhbmNlICphY21fYWxsb2NfaW5zdGFuY2Uodm9pZClcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9hY20uYy04OTAtXHRtdXRleF9pbml0KFx1MDAyNm9wdHMtXHUwMDNlbG9jayk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9hY20uYzo4OTE6XHRyZXQgPSBnc2VyaWFsX2FsbG9jX2xpbmUoXHUwMDI2b3B0cy1cdTAwM2Vwb3J0X251bSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9hY20uYy04OTItXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2Zfb2JleC5jPTQyND1zdGF0aWMgc3RydWN0IHVzYl9mdW5jdGlvbl9pbnN0YW5jZSAqb2JleF9hbGxvY19pbnN0KHZvaWQpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2Zfb2JleC5jLTQzMy1cdG9wdHMtXHUwMDNlZnVuY19pbnN0LmZyZWVfZnVuY19pbnN0ID0gb2JleF9mcmVlX2luc3Q7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9vYmV4LmM6NDM0Olx0cmV0ID0gZ3NlcmlhbF9hbGxvY19saW5lX25vX2NvbnNvbGUoXHUwMDI2b3B0cy1cdTAwM2Vwb3J0X251bSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9vYmV4LmMtNDM1LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3NlcmlhbC5jPTMxNT1zdGF0aWMgc3RydWN0IHVzYl9mdW5jdGlvbl9pbnN0YW5jZSAqZ3Nlcl9hbGxvY19pbnN0KHZvaWQpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2Zfc2VyaWFsLmMtMzI0LVx0b3B0cy1cdTAwM2VmdW5jX2luc3QuZnJlZV9mdW5jX2luc3QgPSBnc2VyX2ZyZWVfaW5zdDtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3NlcmlhbC5jOjMyNTpcdHJldCA9IGdzZXJpYWxfYWxsb2NfbGluZShcdTAwMjZvcHRzLVx1MDAzZXBvcnRfbnVtKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3NlcmlhbC5jLTMyNi1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYy00Mi0gKiBBZnRlciB0aGlzIG1vZHVsZSBoYXMgYmVlbiBsb2FkZWQsIHRoZSBpbmRpdmlkdWFsIFRUWSBwb3J0IGNhbiBiZSByZXF1ZXN0ZWRcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jOjQzOiAqIChnc2VyaWFsX2FsbG9jX2xpbmUoKSkgYW5kIGl0IHdpbGwgc3RheSBhdmFpbGFibGUgdW50aWwgdGhleSBhcmUgcmVtb3ZlZFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMtNDQtICogKGdzZXJpYWxfZnJlZV9saW5lKCkpLiBFYWNoIG9uZSBtYXkgYmUgY29ubmVjdGVkIHRvIGEgVVNCIGZ1bmN0aW9uXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmM9MTI5OT1FWFBPUlRfU1lNQk9MX0dQTChnc2VyaWFsX2ZyZWVfbGluZSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYy0xMzAwLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmM6MTMwMTppbnQgZ3NlcmlhbF9hbGxvY19saW5lX25vX2NvbnNvbGUodW5zaWduZWQgY2hhciAqbGluZV9udW0pXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYy0xMzAyLXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYy0xMzQ0LX1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jOjEzNDU6RVhQT1JUX1NZTUJPTF9HUEwoZ3NlcmlhbF9hbGxvY19saW5lX25vX2NvbnNvbGUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMtMTM0Ni1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jOjEzNDc6aW50IGdzZXJpYWxfYWxsb2NfbGluZSh1bnNpZ25lZCBjaGFyICpsaW5lX251bSlcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jLTEzNDgte1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmM6MTM0OTpcdGludCByZXQgPSBnc2VyaWFsX2FsbG9jX2xpbmVfbm9fY29uc29sZShsaW5lX251bSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYy0xMzUwLVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jLTEzNTUtfVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmM6MTM1NjpFWFBPUlRfU1lNQk9MX0dQTChnc2VyaWFsX2FsbG9jX2xpbmUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMtMTM1Ny1cbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYy0xMzczLSAqIGVuZHBvaW50IGRlc2NyaXB0b3JzLCBhbmQgYWxzbyBoYXZlIGFsbG9jYXRlIEBwb3J0X251bSBieSBjYWxsaW5nXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYzoxMzc0OiAqIEBnc2VyaWFsX2FsbG9jX2xpbmUoKS5cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jLTEzNzUtICpcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuaD01OD12b2lkIGdzX2ZyZWVfcmVxKHN0cnVjdCB1c2JfZXAgKiwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpO1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5oLTYwLS8qIG1hbmFnZW1lbnQgb2YgaW5kaXZpZHVhbCBUVFkgcG9ydHMgKi9cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5oOjYxOmludCBnc2VyaWFsX2FsbG9jX2xpbmVfbm9fY29uc29sZSh1bnNpZ25lZCBjaGFyICpwb3J0X2xpbmUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmg6NjI6aW50IGdzZXJpYWxfYWxsb2NfbGluZSh1bnNpZ25lZCBjaGFyICpwb3J0X2xpbmUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmgtNjMtdm9pZCBnc2VyaWFsX2ZyZWVfbGluZSh1bnNpZ25lZCBjaGFyIHBvcnRfbGluZSk7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9kYmdwLmM9Mjc3PXN0YXRpYyBpbnQgZGJncF9iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9kYmdwLmMtMzA3LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9kYmdwLmM6MzA4Olx0aWYgKGdzZXJpYWxfYWxsb2NfbGluZShcdTAwMjZ0dHlfbGluZSkpIHtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvZGJncC5jLTMwOS1cdFx0c3RwID0gNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MDEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA5ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb25maWdGUyBHYWRnZXQgU2VyaWFsIERyaXZlciBSZWZhY3RvcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIGNvbmNlcm5pbmcgdGhlIENvbmZpZ0ZTIGdhZGdldCYjMzk7cyBzZXJpYWwgZnVuY3Rpb25hbGl0eSAoYWNtLnVzYjAsIHNlcmlhbC51c2IwLCBldGMuKS4gRmlyc3QsIEkmIzM5O20gdmVyaWZ5aW5nIHRoZSBzdGFuZGFyZCB3b3JrZmxvdzogdXNlcnNwYWNlIGNyZWF0ZXMgdGhlIHNlcmlhbCBmdW5jdGlvbiB1c2luZyBgbWtkaXJgIGluIGAvc3lzL2tlcm5lbC9jb25maWcvdXNiX2dhZGdldC9nMS9mdW5jdGlvbnMvYWNtLnVzYjBgIHdoaWNoIHRyaWdnZXJzIHRoZSBgYWNtX2FsbG9jX2luc3RhbmNlKClgIC0mZ3Q7IGBnc2VyaWFsX2FsbG9jX2xpbmUoKWAgcGF0aCwgbGVhZGluZyB0byB0aGUgY3JlYXRpb24gb2YgYC9kZXYvdHR5R1MwYC4gVGhlbiwgc3RhbmRhcmQgYG9wZW5gLCBgcmVhZGAsIGB3cml0ZWAsIGBpb2N0bGAgb3BlcmF0aW9ucyBvbiBgL2Rldi90dHlHUzBgLCBhbmQgZmluYWxseSwgYSByZW1vdmFsIG9yIHVuYmluZGluZy4gVGhpcyB3aG9sZSBzZXR1cCBpcyBwZXJmZWN0bHkgcmVhY2hhYmxlIHVzaW5nIHN0YW5kYXJkIHN5emthbGxlciBzeXNjYWxscywgYW5kIGNhbiB1dGlsaXplIHZpcnR1YWwgaGFyZHdhcmUgbGlrZSBgZHVtbXlfaGNkYCBvciBgcmF3X2dhZGdldGAuCgpOb3csIHRoZSBjb3JlIG9mIHRoZSBpbnZlc3RpZ2F0aW9uOiB0aGUgcGF0Y2gmIzM5O3Mgc3BlY2lmaWMgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyByZWZhY3RvcmluZyB0aGUgYHN0cnVjdCBnc19wb3J0YCBsaWZlY3ljbGUsIHRoZSByZWZlcmVuY2UgY291bnRpbmcsIGFuZCB0aGUgbG9ja2luZyBzdHJhdGVneSBiZXR3ZWVuIHRoZSBUVFkgbGF5ZXIgYW5kIHRoZSBVU0IgZ2FkZ2V0IGxheWVyLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGVzZSBtb2RpZmljYXRpb25zOgoKMS4gIGBnc19vcGVuYDogVGhlIGNvZGUgbm93IGRpcmVjdGx5IHVzZXMgYHR0eS0mZ3Q7ZHJpdmVyX2RhdGFgIChzZXQgaW4gYGdzX2luc3RhbGxgKSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gaW5kZXhpbmcgaW50byBgcG9ydHNbXWAgYW5kIGFjcXVpcmluZyBhIGxvY2suCjIuICBgZ3NfaW5zdGFsbGA6IFRoaXMgbm93IGFjcXVpcmVzIGBwb3J0c1twb3J0X251bV0ubG9ja2AsIHJldHJpZXZlcyB0aGUgcG9ydCwgaW5jcmVhc2VzIHRoZSByZWZlcmVuY2UgY291bnQgdXNpbmcgYHR0eV9wb3J0X2dldGAsIHRoZW4gcmVsZWFzZXMgdGhlIGxvY2ssIGNhbGxzIGB0dHlfc3RhbmRhcmRfaW5zdGFsbGAsIGFuZCBzZXRzIGB0dHktJmd0O2RyaXZlcl9kYXRhYCB0byB0aGUgcG9ydC4KMy4gIGBnc19jbGVhbnVwYDogSXQgY2FsbHMgYHR0eV9wb3J0X3B1dGAgdG8gZGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQuCjQuICBgZ3NfcG9ydF9kZXN0cnVjdGA6IFRoaXMgaXMgdGhlIGB0dHlfcG9ydF9vcGVyYXRpb25zYCYjMzk7cyBkZXN0cnVjdCBjYWxsYmFjay4gVGhpcyBmdW5jdGlvbiBjYWxscyBgY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jYCwgYGtmaWZvX2ZyZWVgLCBgdHR5X3BvcnRfZGVzdHJveWAsIGFuZCBmaW5hbGx5IGBrZnJlZWAuCjUuICBgZ3NlcmlhbF9mcmVlX3BvcnRgOiBUaGUgcGF0Y2ggcmVwbGFjZXMgdGhlIG9sZCBgd2FpdF9ldmVudGAgd2l0aCBgdHR5X3BvcnRfcHV0YCBhbmQgaW5jbHVkZXMgYSBgV0FSTl9PTmAgY2hlY2suCgpNeSBTcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIGNoYW5nZXMuIEkgaGF2ZSB0byBhc3Nlc3Mgd2hldGhlciB0aGVzZSBjaGFuZ2VzIGFyZSBpbnRyb2R1Y2luZyBhbnkgbmV3IGJ1Z3MsIHJhY2VzLCBvciBsb2NraW5nIGlzc3Vlcy4gQW55IG1vZGlmaWNhdGlvbiBpbiB0aGUgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgb3Igc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIFRUWSBhbmQgVVNCIGRyaXZlciBzdWJzeXN0ZW1zIGlzIGEgY2xhc3NpYyByZWNpcGUgZm9yIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWVzLCBvciBkZWFkbG9ja3MuCgpBIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBjb2RlIHBhdGggaXMgZWFzaWx5IHJlYWNoYWJsZSBpbiBhIFFFTVUvc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudC4gVGhlIGdvb2QgbmV3cyBpcyB0aGF0IHRoZSBVU0IgZ2FkZ2V0IHN1YnN5c3RlbSwgd2l0aCBjb25maWdmcyBhbmQgYGR1bW15X2hjZGAvYHJhd19nYWRnZXRgLCBpcyBzdGFuZGFyZCBpbiBzeXprYWxsZXIsIHNvIHllcywgaXQgaXMuCgpOZXh0LCBJIG5lZWQgdG8ga25vdyB3aGljaCBrZXJuZWwgY29uZmlncyBlbmFibGUgdGhlIGNvZGUgcGF0aDogSSBuZWVkIHRvIGVuc3VyZSB0aGUgZm9sbG93aW5nIGFyZSBlbmFibGVkOiBgVVNCX0NPTkZJR0ZTX1NFUklBTGAgb3IgYFVTQl9DT05GSUdGU19BQ01gIG9yIGBVU0JfQ09ORklHRlNgIG9yIGBVU0JfR19TRVJJQUxgLCBgVVNCX1VfU0VSSUFMYCwgYFVTQl9HQURHRVRgLCBhbmQgYFRUWWAuCgpOb3csIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGtleSBzeW1ib2xzIHRoYXQgYXJlIGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoaXMgcGF0Y2guIEkmIzM5O2xsIGNvbmNlbnRyYXRlIG9uOiBgZ3NfaW5zdGFsbGAsIGBnc19vcGVuYCwgYGdzX2Nsb3NlYCwgYGdzX2NsZWFudXBgLCBgZ3NfcG9ydF9kZXN0cnVjdGAsIGBnc2VyaWFsX2ZyZWVfcG9ydGAsIGBnc2VyaWFsX2FsbG9jX2xpbmVgLCBhbmQgYGdzZXJpYWxfZnJlZV9saW5lYC4KCkxldCYjMzk7cyBjaGVjayB0aGUgdmlzaWJpbGl0eSBvZiB0aGVzZSBzeW1ib2xzOyB3aGV0aGVyIHRoZXkgYXJlIGdsb2JhbCBhbmQgbm90IHN0YXRpYyBpbmxpbmUgaW4gaGVhZGVycy4gRnJvbSB3aGF0IEkgc2VlLCAgYGdzX2luc3RhbGxgLCBgZ3Nfb3BlbmAsIGBnc19jbG9zZWAsIGBnc19jbGVhbnVwYCwgYGdzX3BvcnRfZGVzdHJ1Y3RgLCBhbmQgYGdzZXJpYWxfZnJlZV9wb3J0YCBhcmUgc3RhdGljIGluIGB1X3NlcmlhbC5jYCwgd2hpbGUgYGdzZXJpYWxfZnJlZV9saW5lYCBhbmQgYGdzZXJpYWxfYWxsb2NfbGluZWAgYXJlIGdsb2JhbC4KCkZpbmFsbHksIGxldCBtZSByZS12ZXJpZnkgdGhlIGNvbmZpZ3MgaW4gS2NvbmZpZzogYFVTQl9HQURHRVRgLCBgVVNCX0NPTkZJR0ZTYCwgYFVTQl9DT05GSUdGU19TRVJJQUxgLCBgVVNCX0NPTkZJR0ZTX0FDTWAsIGFuZCBgVVNCX1VfU0VSSUFMYC4gQW5kIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBgVVNCX0NPTkZJR0ZTX1NFUklBTGAgaW4gYGRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnYCB0byBtYWtlIHN1cmUgaXQgZXhpc3RzLgoKV2l0aCB0aGlzIHN0cnVjdHVyZWQgaW52ZXN0aWdhdGlvbiwgSSBjYW4gc3RhcnQgZm9ybWluZyBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHBhdGNoJiMzOTtzIGltcGxpY2F0aW9ucyBhbmQgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfQ09ORklHRlNfU0VSSUFMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTIyOD1jb25maWcgVVNCX0NPTkZJR0ZTXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjM5LVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MjQwOmNvbmZpZyBVU0JfQ09ORklHRlNfU0VSSUFMXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0yNDEtXHRib29sIFwmIzM0O0dlbmVyaWMgc2VyaWFsIGJ1bGsgaW4vb3V0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTkxCgkJCQkJCQlvdXRwdXQ6IDIzNAoJCQkJCQkJdGhvdWdodHM6IDIxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVVNCIENvbmZpZ0ZTIGFuZCBXb3J0aEZ1enppbmcgSW1wYWN0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgVVNCX0NPTkZJR0ZTYC4gTG9va2luZyBhdCBgZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWdgLCBpdCYjMzk7cyBjbGVhciB0aGF0IGBVU0JfQ09ORklHRlNgIHJlcXVpcmVzIGBVU0JfR0FER0VUYC4gVGhhdCBtYWtlcyBzZW5zZTsgQ29uZmlnRlMgaXMgZXNzZW50aWFsbHkgYSB3YXkgdG8gY29uZmlndXJlIHRoZSBnYWRnZXQuCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBzZXJpYWwgZ2FkZ2V0IGZ1bmN0aW9uYWxpdHksIGBVU0JfQ09ORklHRlNfU0VSSUFMYCBkZXBlbmRzIG9uIGJvdGggYFVTQl9DT05GSUdGU2AgYW5kIGBUVFlgLCB3aGljaCBpcyBleHBlY3RlZCBmb3Igc2VyaWFsIGNvbW11bmljYXRpb24uIEl0ICpzZWxlY3RzKiBgVVNCX1VfU0VSSUFMYCBhbmQgYFVTQl9GX1NFUklBTGAsIHdoaWNoIGFyZSB0aGUgdW5kZXJseWluZyBVU0Igc2VyaWFsIGRyaXZlciBhbmQgZnVuY3Rpb24uIGBVU0JfQ09ORklHRlNfQUNNYCBoYXMgc2ltaWxhciBkZXBlbmRlbmNpZXMgb24gYFVTQl9DT05GSUdGU2AgYW5kIGBUVFlgLCBidXQgaXQgc2VsZWN0cyBgVVNCX1VfU0VSSUFMYCBhbmQgYFVTQl9GX0FDTWAsIGluZGljYXRpbmcgaXQgaGFuZGxlcyBBYnN0cmFjdCBDb250cm9sIE1vZGVsIChBQ00pIGRldmljZXMuCgpOZXh0LCBJIG5lZWQgdG8gcmV2aXNpdCB0aGUgYFdvcnRoRnV6emluZ2AgYXNwZWN0LiBJdCYjMzk7cyBjb25maXJtZWQgYXMgYHRydWVgLCBhbmQgSSBrbm93IHRoYXQgdGhpcyBwYXRjaCB0b3VjaGVzIFVTQiBzZXJpYWwgZ2FkZ2V0IGNvZGUg4oCTIHNwZWNpZmljYWxseSBgZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIGNvbnNpZGVyaW5nIGl0IGltcGFjdHMgcmVmZXJlbmNlIGNvdW50aW5nLCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgYW5kIHN5bmNocm9uaXphdGlvbi4gVGhlIGZhY3QgdGhhdCB0aGlzIGRyaXZlciBpcyBleHBvc2VkIHRocm91Z2ggQ29uZmlnRlMgKGFuZCByZWxhdGVkIHN1YnN5c3RlbXMgbGlrZSBkdW1teV9oY2QsIHJhdy1nYWRnZXQsIGFuZCB0dHlHUyogbm9kZXMpIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBtYWtlcyB0aGlzIGV2ZW4gbW9yZSBjcml0aWNhbCBmb3Igc2VjdXJpdHkuCgpHaXZlbiB0aGVzZSBmaW5kaW5ncywgSSBjYW4gbm93IGZvcm11bGF0ZSBhIGNvbmNpc2UgcmVzcG9uc2UgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgcmVwb3J0IGFjY3VyYXRlbHkgcmVmbGVjdHMgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgYFdvcnRoRnV6emluZ2Agc2V0dGluZyBhbmQgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB0aGlzIG1vZGlmaWVkIGNvZGUsIGVzcGVjaWFsbHkgY29uY2VybmluZyByZWZlcmVuY2UgY291bnRpbmcgYW5kIHN5bmNocm9uaXphdGlvbiB3aXRoaW4gdGhlIFVTQiBzZXJpYWwgZ2FkZ2V0IGRyaXZlciwgYWNjZXNzaWJsZSB2aWEgQ29uZmlnRlMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQl9DT05GSUdGUyYjMzQ7LAogICAgJiMzNDtVU0JfQ09ORklHRlNfU0VSSUFMJiMzNDssCiAgICAmIzM0O1VTQl9DT05GSUdGU19BQ00mIzM0OywKICAgICYjMzQ7VVNCX1VfU0VSSUFMJiMzNDssCiAgICAmIzM0O1RUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dzX2luc3RhbGwmIzM0OywKICAgICYjMzQ7Z3NfY2xlYW51cCYjMzQ7LAogICAgJiMzNDtnc19wb3J0X2Rlc3RydWN0JiMzNDssCiAgICAmIzM0O2dzX29wZW4mIzM0OywKICAgICYjMzQ7Z3NfY2xvc2UmIzM0OywKICAgICYjMzQ7Z3NlcmlhbF9mcmVlX3BvcnQmIzM0OywKICAgICYjMzQ7Z3NlcmlhbF9mcmVlX2xpbmUmIzM0OywKICAgICYjMzQ7Z3NlcmlhbF9hbGxvY19saW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc3RydWN0dXJlcyB0aGUgbGlmZWN5Y2xlLCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBvcGVuL2Nsb3NlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgVVNCIHNlcmlhbCBnYWRnZXQgZHJpdmVyICh1X3NlcmlhbC5jKSB1c2luZyB0dHlfcG9ydF9vcGVyYXRpb25zICguZGVzdHJ1Y3QpIGFuZCB0dHlfcG9ydF9nZXQvcHV0IGFjcm9zcyBpbnN0YWxsIGFuZCBjbGVhbnVwIGNhbGxiYWNrcyBpbnN0ZWFkIG9mIG1hbnVhbCB3YWl0cXVldWUgdHJhY2tpbmcuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIFVTQiBnYWRnZXQgQ29uZmlnRlMsIGR1bW15X2hjZCwgb3IgcmF3LWdhZGdldCBhbG9uZyB3aXRoIHR0eUdTKiBkZXZpY2Ugb3BlcmF0aW9ucywgbWFraW5nIGl0IGFuIGltcG9ydGFudCB0YXJnZXQgZm9yIGNvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX0dBREdFVCYjMzQ7LAogICAgJiMzNDtVU0JfQ09ORklHRlMmIzM0OywKICAgICYjMzQ7VVNCX0NPTkZJR0ZTX1NFUklBTCYjMzQ7LAogICAgJiMzNDtVU0JfQ09ORklHRlNfQUNNJiMzNDssCiAgICAmIzM0O1VTQl9VX1NFUklBTCYjMzQ7LAogICAgJiMzNDtUVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnc19pbnN0YWxsJiMzNDssCiAgICAmIzM0O2dzX2NsZWFudXAmIzM0OywKICAgICYjMzQ7Z3NfcG9ydF9kZXN0cnVjdCYjMzQ7LAogICAgJiMzNDtnc19vcGVuJiMzNDssCiAgICAmIzM0O2dzX2Nsb3NlJiMzNDssCiAgICAmIzM0O2dzZXJpYWxfZnJlZV9wb3J0JiMzNDssCiAgICAmIzM0O2dzZXJpYWxfZnJlZV9saW5lJiMzNDssCiAgICAmIzM0O2dzZXJpYWxfYWxsb2NfbGluZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXN0cnVjdHVyZXMgdGhlIGxpZmVjeWNsZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgb3Blbi9jbG9zZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFVTQiBzZXJpYWwgZ2FkZ2V0IGRyaXZlciAodV9zZXJpYWwuYykgdXNpbmcgdHR5X3BvcnRfb3BlcmF0aW9ucyAoLmRlc3RydWN0KSBhbmQgdHR5X3BvcnRfZ2V0L3B1dCBhY3Jvc3MgaW5zdGFsbCBhbmQgY2xlYW51cCBjYWxsYmFja3MgaW5zdGVhZCBvZiBtYW51YWwgd2FpdHF1ZXVlIHRyYWNraW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBVU0IgZ2FkZ2V0IENvbmZpZ0ZTLCBkdW1teV9oY2QsIG9yIHJhdy1nYWRnZXQgYWxvbmcgd2l0aCB0dHlHUyogZGV2aWNlIG9wZXJhdGlvbnMsIG1ha2luZyBpdCBhbiBpbXBvcnRhbnQgdGFyZ2V0IGZvciBjb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIzOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjM6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgb2YgYHN0cnVjdCBnc19wb3J0YCBpbiBgZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmNgIHVzaW5nIHN0YW5kYXJkIGB0dHlfcG9ydGAgcmVmY291bnRpbmcgKGB0dHlfcG9ydF9nZXRgL2B0dHlfcG9ydF9wdXRgLCBgdHR5X29wZXJhdGlvbnMuaW5zdGFsbGAsIGB0dHlfb3BlcmF0aW9ucy5jbGVhbnVwYCwgYW5kIGB0dHlfcG9ydF9vcGVyYXRpb25zLmRlc3RydWN0YCkuXG5cblRoaXMgcmVmYWN0b3JpbmcgYWRkcmVzc2VzIHR0eSBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGlzc3VlcyAocHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBhbmQgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gbGluZSB0ZWFyZG93biBhbmQgdHR5IG9wZXJhdGlvbnMpLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgZG8gbm90IGNvcHkga2VybmVsIGRhdGEgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2UsIGFuZCBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIHVzZS1hZnRlci1mcmVlLCByZWZjb3VudGluZyBpbWJhbGFuY2VzLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIHRob3JvdWdobHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgcmVmY291bnQgdHJhY2tpbmcsIGFuZCBMT0NLREVQIGJ1aWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk1MGU0ZmQyZjM4ZDE1ZWVjNTZkZmVmNGYyYTFjOTlkODIxYzU0MGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDIzOjM2OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYwppbmRleCBjZGQxZGZjNjY2YzRmLi5jODJjNTg4OGM2YzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYwpAQCAtMTI1LDcgJiM0MzsxMjUsNiBAQCBzdHJ1Y3QgZ3NfcG9ydCB7CiAJc3RydWN0IGtmaWZvCQlwb3J0X3dyaXRlX2J1ZjsKIAl3YWl0X3F1ZXVlX2hlYWRfdAlkcmFpbl93YWl0OwkvKiB3YWl0IHdoaWxlIHdyaXRlcyBkcmFpbiAqLwogCWJvb2wgICAgICAgICAgICAgICAgICAgIHdyaXRlX2J1c3k7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QJY2xvc2Vfd2FpdDsKIAlib29sCQkJc3VzcGVuZGVkOwkvKiBwb3J0IHN1c3BlbmRlZCAqLwogCWJvb2wJCQlzdGFydF9kZWxheWVkOwkvKiBkZWxheSBzdGFydCB3aGVuIHN1c3BlbmRlZCAqLwogCXN0cnVjdCBhc3luY19pY291bnQJaWNvdW50OwpAQCAtNjEwLDE3ICYjNDM7NjA5LDkgQEAgc3RhdGljIGludCBnc2VyaWFsX3dha2V1cF9ob3N0KHN0cnVjdCBnc2VyaWFsICpnc2VyKQogICovCiBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50CQlwb3J0X251bSA9IHR0eS0mZ3Q7aW5kZXg7Ci0Jc3RydWN0IGdzX3BvcnQJKnBvcnQ7CiYjNDM7CXN0cnVjdCBnc19wb3J0CSpwb3J0ID0gdHR5LSZndDtkcml2ZXJfZGF0YTsKIAlpbnQJCXN0YXR1cyA9IDA7CiAKLQltdXRleF9sb2NrKCZhbXA7cG9ydHNbcG9ydF9udW1dLmxvY2spOwotCXBvcnQgPSBwb3J0c1twb3J0X251bV0ucG9ydDsKLQlpZiAoIXBvcnQpIHsKLQkJc3RhdHVzID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7Ci0JfQotCiAJc3Bpbl9sb2NrX2lycSgmYW1wO3BvcnQtJmd0O3BvcnRfbG9jayk7CiAKIAkvKiBhbGxvY2F0ZSBjaXJjdWxhciBidWZmZXIgb24gZmlyc3Qgb3BlbiAqLwpAQCAtNjI4LDE3ICYjNDM7NjE5LDEyIEBAIHN0YXRpYyBpbnQgZ3Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAogCQlzcGluX3VubG9ja19pcnEoJmFtcDtwb3J0LSZndDtwb3J0X2xvY2spOwogCi0JCS8qCi0JCSAqIHBvcnRtYXN0ZXImIzM5O3MgbXV0ZXggc3RpbGwgcHJvdGVjdHMgZnJvbSBzaW11bHRhbmVvdXMgb3BlbigpLAotCQkgKiBhbmQgY2xvc2UoKSBjYW4mIzM5O3QgaGFwcGVuLCB5ZXQuCi0JCSAqLwotCiAJCXN0YXR1cyA9IGtmaWZvX2FsbG9jKCZhbXA7cG9ydC0mZ3Q7cG9ydF93cml0ZV9idWYsCiAJCQkJICAgICBXUklURV9CVUZfU0laRSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChzdGF0dXMpIHsKIAkJCXByX2RlYnVnKCYjMzQ7Z3Nfb3BlbjogdHR5R1MlZCAoJXAsJXApIG5vIGJ1ZmZlclxuJiMzNDssCi0JCQkJIHBvcnRfbnVtLCB0dHksIGZpbGUpOwotCQkJZ290byBvdXQ7CiYjNDM7CQkJCSBwb3J0LSZndDtwb3J0X251bSwgdHR5LCBmaWxlKTsKJiM0MzsJCQlyZXR1cm4gc3RhdHVzOwogCQl9CiAKIAkJc3Bpbl9sb2NrX2lycSgmYW1wO3BvcnQtJmd0O3BvcnRfbG9jayk7CkBAIC02NDgsNyAmIzQzOzYzNCw2IEBAIHN0YXRpYyBpbnQgZ3Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlpZiAocG9ydC0mZ3Q7cG9ydC5jb3VudCYjNDM7JiM0MzspCiAJCWdvdG8gZXhpdF91bmxvY2tfcG9ydDsKIAotCXR0eS0mZ3Q7ZHJpdmVyX2RhdGEgPSBwb3J0OwogCXBvcnQtJmd0O3BvcnQudHR5ID0gdHR5OwogCiAJLyogaWYgY29ubmVjdGVkLCBzdGFydCB0aGUgSS9PIHN0cmVhbSAqLwpAQCAtNjcyLDggJiM0Mzs2NTcsNiBAQCBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCiAKIGV4aXRfdW5sb2NrX3BvcnQ6CiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7cG9ydC0mZ3Q7cG9ydF9sb2NrKTsKLW91dDoKLQltdXRleF91bmxvY2soJmFtcDtwb3J0c1twb3J0X251bV0ubG9jayk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtNzQ0LDcgJiM0Mzs3MjcsNiBAQCBzdGF0aWMgdm9pZCBnc19jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlwcl9kZWJ1ZygmIzM0O2dzX2Nsb3NlOiB0dHlHUyVkICglcCwlcCkgZG9uZSFcbiYjMzQ7LAogCQkJcG9ydC0mZ3Q7cG9ydF9udW0sIHR0eSwgZmlsZSk7CiAKLQl3YWtlX3VwKCZhbXA7cG9ydC0mZ3Q7Y2xvc2Vfd2FpdCk7CiBleGl0OgogCXNwaW5fdW5sb2NrX2lycSgmYW1wO3BvcnQtJmd0O3BvcnRfbG9jayk7CiB9CkBAIC05MDgsNyAmIzQzOzg5MCw0MiBAQCBzdGF0aWMgaW50IGdzX2dldF9pY291bnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZ3NfaW5zdGFsbChzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQomIzQzO3sKJiM0MzsJaW50IHBvcnRfbnVtID0gdHR5LSZndDtpbmRleDsKJiM0MzsJc3RydWN0IGdzX3BvcnQgKnBvcnQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwb3J0c1twb3J0X251bV0ubG9jayk7CiYjNDM7CXBvcnQgPSBwb3J0c1twb3J0X251bV0ucG9ydDsKJiM0MzsJaWYgKCFwb3J0KSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtwb3J0c1twb3J0X251bV0ubG9jayk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwomIzQzOwl0dHlfcG9ydF9nZXQoJmFtcDtwb3J0LSZndDtwb3J0KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cG9ydHNbcG9ydF9udW1dLmxvY2spOwomIzQzOwomIzQzOwlyZXQgPSB0dHlfc3RhbmRhcmRfaW5zdGFsbChkcml2ZXIsIHR0eSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXR0eV9wb3J0X3B1dCgmYW1wO3BvcnQtJmd0O3BvcnQpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwl0dHktJmd0O2RyaXZlcl9kYXRhID0gcG9ydDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGdzX2NsZWFudXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBnc19wb3J0ICpwb3J0ID0gdHR5LSZndDtkcml2ZXJfZGF0YTsKJiM0MzsKJiM0MzsJaWYgKHBvcnQpCiYjNDM7CQl0dHlfcG9ydF9wdXQoJmFtcDtwb3J0LSZndDtwb3J0KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9vcGVyYXRpb25zIGdzX3R0eV9vcHMgPSB7CiYjNDM7CS5pbnN0YWxsID0JCWdzX2luc3RhbGwsCiAJLm9wZW4gPQkJCWdzX29wZW4sCiAJLmNsb3NlID0JCWdzX2Nsb3NlLAogCS53cml0ZSA9CQlnc193cml0ZSwKQEAgLTkxOSw2ICYjNDM7OTM2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBnc190dHlfb3BzID0gewogCS51bnRocm90dGxlID0JCWdzX3VudGhyb3R0bGUsCiAJLmJyZWFrX2N0bCA9CQlnc19icmVha19jdGwsCiAJLmdldF9pY291bnQgPQkJZ3NfZ2V0X2ljb3VudCwKJiM0MzsJLmNsZWFudXAgPQkJZ3NfY2xlYW51cCwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xMjAzLDYgJiM0MzsxMjIxLDIwIEBAIHN0YXRpYyB2b2lkIGdzX2NvbnNvbGVfZXhpdChzdHJ1Y3QgZ3NfcG9ydCAqcG9ydCkKIAogI2VuZGlmCiAKJiM0MztzdGF0aWMgdm9pZCBnc19wb3J0X2Rlc3RydWN0KHN0cnVjdCB0dHlfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBnc19wb3J0ICpnc19wb3J0ID0gY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCBnc19wb3J0LCBwb3J0KTsKJiM0MzsKJiM0MzsJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhbXA7Z3NfcG9ydC0mZ3Q7cHVzaCk7CiYjNDM7CWtmaWZvX2ZyZWUoJmFtcDtnc19wb3J0LSZndDtwb3J0X3dyaXRlX2J1Zik7CiYjNDM7CXR0eV9wb3J0X2Rlc3Ryb3kocG9ydCk7CiYjNDM7CWtmcmVlKGdzX3BvcnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9wb3J0X29wZXJhdGlvbnMgZ3NfcG9ydF9vcHMgPSB7CiYjNDM7CS5kZXN0cnVjdCA9IGdzX3BvcnRfZGVzdHJ1Y3QsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBpbnQKIGdzX3BvcnRfYWxsb2ModW5zaWduZWQgcG9ydF9udW0sIHN0cnVjdCB1c2JfY2RjX2xpbmVfY29kaW5nICpjb2RpbmcpCiB7CkBAIC0xMjIyLDkgJiM0MzsxMjU0LDkgQEAgZ3NfcG9ydF9hbGxvYyh1bnNpZ25lZCBwb3J0X251bSwgc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcgKmNvZGluZykKIAl9CiAKIAl0dHlfcG9ydF9pbml0KCZhbXA7cG9ydC0mZ3Q7cG9ydCk7CiYjNDM7CXBvcnQtJmd0O3BvcnQub3BzID0gJmFtcDtnc19wb3J0X29wczsKIAlzcGluX2xvY2tfaW5pdCgmYW1wO3BvcnQtJmd0O3BvcnRfbG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmYW1wO3BvcnQtJmd0O2RyYWluX3dhaXQpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFtcDtwb3J0LSZndDtjbG9zZV93YWl0KTsKIAogCUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7cG9ydC0mZ3Q7cHVzaCwgZ3NfcnhfcHVzaCk7CiAKQEAgLTEyNDEsMjUgJiM0MzsxMjczLDEwIEBAIGdzX3BvcnRfYWxsb2ModW5zaWduZWQgcG9ydF9udW0sIHN0cnVjdCB1c2JfY2RjX2xpbmVfY29kaW5nICpjb2RpbmcpCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBnc19jbG9zZWQoc3RydWN0IGdzX3BvcnQgKnBvcnQpCi17Ci0JaW50IGNvbmQ7Ci0KLQlzcGluX2xvY2tfaXJxKCZhbXA7cG9ydC0mZ3Q7cG9ydF9sb2NrKTsKLQljb25kID0gcG9ydC0mZ3Q7cG9ydC5jb3VudCA9PSAwOwotCXNwaW5fdW5sb2NrX2lycSgmYW1wO3BvcnQtJmd0O3BvcnRfbG9jayk7Ci0KLQlyZXR1cm4gY29uZDsKLX0KLQogc3RhdGljIHZvaWQgZ3NlcmlhbF9mcmVlX3BvcnQoc3RydWN0IGdzX3BvcnQgKnBvcnQpCiB7Ci0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhbXA7cG9ydC0mZ3Q7cHVzaCk7Ci0JLyogd2FpdCBmb3Igb2xkIG9wZW5zIHRvIGZpbmlzaCAqLwotCXdhaXRfZXZlbnQocG9ydC0mZ3Q7Y2xvc2Vfd2FpdCwgZ3NfY2xvc2VkKHBvcnQpKTsKIAlXQVJOX09OKHBvcnQtJmd0O3BvcnRfdXNiICE9IE5VTEwpOwotCXR0eV9wb3J0X2Rlc3Ryb3koJmFtcDtwb3J0LSZndDtwb3J0KTsKLQlrZnJlZShwb3J0KTsKJiM0MzsJdHR5X3BvcnRfcHV0KCZhbXA7cG9ydC0mZ3Q7cG9ydCk7CiB9CiAKIHZvaWQgZ3NlcmlhbF9mcmVlX2xpbmUodW5zaWduZWQgY2hhciBwb3J0X251bSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjAKCQkJCQkJCW91dHB1dDogMjI4CgkJCQkJCQl0aG91Z2h0czogODgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IFVTQiBHYWRnZXQgU2VyaWFsIERyaXZlciBSZWZhY3RvcmluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggdGFyZ2V0aW5nIHRoZSBgdV9zZXJpYWwuY2AgZmlsZSB3aXRoaW4gdGhlIFVTQiBnYWRnZXQgZHJpdmVyLiBUaGUgcHJpbWFyeSBmb2N1cyBpcyBhIHJlZmFjdG9yaW5nIGVmZm9ydCB0byByZXBsYWNlIGN1c3RvbSBsaWZldGltZSBhbmQgbG9ja2luZyBtYW5hZ2VtZW50IHdpdGggdGhlIHN0YW5kYXJkIGB0dHlfcG9ydGAgcmVmZXJlbmNlIGNvdW50aW5nIG1lY2hhbmlzbS4gVGhpcyBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7bWVtb3J5IHNhZmV0eSBpbXByb3ZlbWVudHMmIzM0OyDigJMgYWRkcmVzc2luZyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIHR5cGljYWwgaW4gdHR5IGRyaXZlcnMuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hldGhlciB0aGlzIGV4cG9zZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4uIFdlJiMzOTtyZSBvbiBhbWQ2NCwgc28gbGV0JiMzOTtzIGRpZyBpbi4gVGhlIHBhdGNoIGVzc2VudGlhbGx5IGRvZXMgdGhlIGZvbGxvd2luZzogaXQgcmVtb3ZlcyBjdXN0b20gbG9ja2luZywgaW50cm9kdWNlcyBgdHR5X3BvcnRfZ2V0YCBhbmQgYHR0eV9wb3J0X3B1dGAsIGFuZCBwcm9wZXJseSBzZXRzIGB0dHktJmd0O2RyaXZlcl9kYXRhYC4gV2Ugc2VlIG5ldyBmdW5jdGlvbnMgbGlrZSBgZ3NfaW5zdGFsbGAsIGBnc19jbGVhbnVwYCwgYW5kIGBnc19wb3J0X2Rlc3RydWN0YCByZWxhdGVkIHRvIHRoaXMgbmV3IHBvcnQgbWFuYWdlbWVudC4KCk15IGNoZWNrbGlzdCBraWNrcyBpbjogQXJlIHdlIHNlbmRpbmcgYW55dGhpbmcga2VybmVsLXNpZGUgdG8gdXNlci1zcGFjZSB0aGF0IGlzbiYjMzk7dCBwcm9wZXJseSBpbml0aWFsaXplZD8gTm8uIEFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvbmRpdGlvbmFsIGxvZ2ljIHJlbGlhbnQgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gQWdhaW4sIHRoZSBhbnN3ZXIgaXMgbm8uIEkmIzM5O20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIHBvdGVudGlhbCBhcmVhcyBsaWtlIGBnc19wb3J0X2FsbG9jYCwgYGdzX2luc3RhbGxgLCBhbmQgYGdzX3BvcnRfZGVzdHJ1Y3RgLiBMb29raW5nIGF0IHRoZSBjb2RlIGNvbmZpcm1zIHRoYXQgYHR0eV9wb3J0X2luaXRgIGFuZCBzdHJ1Y3QgYXNzaWdubWVudHMgYXJlIHByb3Blcmx5IGluaXRpYWxpemluZyBhbGwgcmVsZXZhbnQgc3RydWN0dXJlcy4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhbGwgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIE5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rLCBvciBpb2N0bCBvdXRwdXQgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGlzIHBhdGNoIGlzIGFsbCBhYm91dCBtZW1vcnkgc2FmZXR5IOKAkyBkZWFsaW5nIHdpdGggdXNlLWFmdGVyLWZyZWUsIHJhY2VzLCBhbmQgcmVmZXJlbmNlIGNvdW50IGlzc3Vlcy4gVGhlc2UgYXJlIGJ1Z3MgdGhhdCBLQVNBTiwgTG9ja2RlcCwgYW5kIHRoZSBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycyBhcmUgZGVzaWduZWQgdG8gZGV0ZWN0LiBUaGlzIGlzbiYjMzk7dCBpbnRyb2R1Y2luZyAqbmV3KiB1bmluaXRpYWxpemVkIG1lbW9yeSBidWdzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRoYXQgd291bGQgYmUgdW5pcXVlIHRvIEtNU0FOLiBXZSYjMzk7cmUgYWRoZXJpbmcgdG8gdGhlIHJ1bGU6IGlmIEtBU0FOIChvciBzaW1pbGFyIHRvb2xzKSBjYXRjaCBpdCwgS01TQU4gaXNuJiMzOTt0IG5lZWRlZC4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGZhbHNlLiBUaGlzIGlzIGEgcmVmYWN0b3JpbmcgZm9yIGdlbmVyYWwgbWVtb3J5IHNhZmV0eSB0aGF0JiMzOTtzIHdlbGwgY292ZXJlZCBieSBleGlzdGluZyB0b29saW5nLiBXZSYjMzk7cmUgZ29vZCB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIG9mIGBzdHJ1Y3QgZ3NfcG9ydGAgaW4gYGRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jYCB1c2luZyBzdGFuZGFyZCBgdHR5X3BvcnRgIHJlZmNvdW50aW5nIChgdHR5X3BvcnRfZ2V0YC9gdHR5X3BvcnRfcHV0YCwgYHR0eV9vcGVyYXRpb25zLmluc3RhbGxgLCBgdHR5X29wZXJhdGlvbnMuY2xlYW51cGAsIGFuZCBgdHR5X3BvcnRfb3BlcmF0aW9ucy5kZXN0cnVjdGApLlxuXG5UaGlzIHJlZmFjdG9yaW5nIGFkZHJlc3NlcyB0dHkgbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMgKHByZXZlbnRpbmcgdXNlLWFmdGVyLWZyZWUgYW5kIHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuIGxpbmUgdGVhcmRvd24gYW5kIHR0eSBvcGVyYXRpb25zKS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGRvIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCBhbmQgZG8gbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgcmVmY291bnRpbmcgaW1iYWxhbmNlcywgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSB0aG9yb3VnaGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIHJlZmNvdW50IHRyYWNraW5nLCBhbmQgTE9DS0RFUCBidWlsZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgb2YgYHN0cnVjdCBnc19wb3J0YCBpbiBgZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmNgIHVzaW5nIHN0YW5kYXJkIGB0dHlfcG9ydGAgcmVmY291bnRpbmcgKGB0dHlfcG9ydF9nZXRgL2B0dHlfcG9ydF9wdXRgLCBgdHR5X29wZXJhdGlvbnMuaW5zdGFsbGAsIGB0dHlfb3BlcmF0aW9ucy5jbGVhbnVwYCwgYW5kIGB0dHlfcG9ydF9vcGVyYXRpb25zLmRlc3RydWN0YCkuXG5cblRoaXMgcmVmYWN0b3JpbmcgYWRkcmVzc2VzIHR0eSBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGlzc3VlcyAocHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBhbmQgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gbGluZSB0ZWFyZG93biBhbmQgdHR5IG9wZXJhdGlvbnMpLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgZG8gbm90IGNvcHkga2VybmVsIGRhdGEgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2UsIGFuZCBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIHVzZS1hZnRlci1mcmVlLCByZWZjb3VudGluZyBpbWJhbGFuY2VzLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIHRob3JvdWdobHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgcmVmY291bnQgdHJhY2tpbmcsIGFuZCBMT0NLREVQIGJ1aWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMjM6MzY6MTUuMjM2MTA2NTczWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4NjkzNjcyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0dBREdFVFwiLFxuICAgIFwiVVNCX0NPTkZJR0ZTXCIsXG4gICAgXCJVU0JfQ09ORklHRlNfU0VSSUFMXCIsXG4gICAgXCJVU0JfQ09ORklHRlNfQUNNXCIsXG4gICAgXCJVU0JfVV9TRVJJQUxcIixcbiAgICBcIlRUWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdzX2luc3RhbGxcIixcbiAgICBcImdzX2NsZWFudXBcIixcbiAgICBcImdzX3BvcnRfZGVzdHJ1Y3RcIixcbiAgICBcImdzX29wZW5cIixcbiAgICBcImdzX2Nsb3NlXCIsXG4gICAgXCJnc2VyaWFsX2ZyZWVfcG9ydFwiLFxuICAgIFwiZ3NlcmlhbF9mcmVlX2xpbmVcIixcbiAgICBcImdzZXJpYWxfYWxsb2NfbGluZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIG9mIGBzdHJ1Y3QgZ3NfcG9ydGAgaW4gYGRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jYCB1c2luZyBzdGFuZGFyZCBgdHR5X3BvcnRgIHJlZmNvdW50aW5nIChgdHR5X3BvcnRfZ2V0YC9gdHR5X3BvcnRfcHV0YCwgYHR0eV9vcGVyYXRpb25zLmluc3RhbGxgLCBgdHR5X29wZXJhdGlvbnMuY2xlYW51cGAsIGFuZCBgdHR5X3BvcnRfb3BlcmF0aW9ucy5kZXN0cnVjdGApLlxcblxcblRoaXMgcmVmYWN0b3JpbmcgYWRkcmVzc2VzIHR0eSBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGlzc3VlcyAocHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBhbmQgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gbGluZSB0ZWFyZG93biBhbmQgdHR5IG9wZXJhdGlvbnMpLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgZG8gbm90IGNvcHkga2VybmVsIGRhdGEgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2UsIGFuZCBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIHVzZS1hZnRlci1mcmVlLCByZWZjb3VudGluZyBpbWJhbGFuY2VzLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIHRob3JvdWdobHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgcmVmY291bnQgdHJhY2tpbmcsIGFuZCBMT0NLREVQIGJ1aWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXN0cnVjdHVyZXMgdGhlIGxpZmVjeWNsZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgb3Blbi9jbG9zZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFVTQiBzZXJpYWwgZ2FkZ2V0IGRyaXZlciAodV9zZXJpYWwuYykgdXNpbmcgdHR5X3BvcnRfb3BlcmF0aW9ucyAoLmRlc3RydWN0KSBhbmQgdHR5X3BvcnRfZ2V0L3B1dCBhY3Jvc3MgaW5zdGFsbCBhbmQgY2xlYW51cCBjYWxsYmFja3MgaW5zdGVhZCBvZiBtYW51YWwgd2FpdHF1ZXVlIHRyYWNraW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBVU0IgZ2FkZ2V0IENvbmZpZ0ZTLCBkdW1teV9oY2QsIG9yIHJhdy1nYWRnZXQgYWxvbmcgd2l0aCB0dHlHUyogZGV2aWNlIG9wZXJhdGlvbnMsIG1ha2luZyBpdCBhbiBpbXBvcnRhbnQgdGFyZ2V0IGZvciBjb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIzOjM2OjE1LjIzNjExMjQwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIzOTIzMjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTUwZTRmZDJmMzhkMTVlZWM1NmRmZWY0ZjJhMWM5OWQ4MjFjNTQwZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDIzOjM2OjE0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmNcXG5pbmRleCBjZGQxZGZjNjY2YzRmLi5jODJjNTg4OGM2YzQ5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jXFxuKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmNcXG5AQCAtMTI1LDcgKzEyNSw2IEBAIHN0cnVjdCBnc19wb3J0IHtcXG4gXFx0c3RydWN0IGtmaWZvXFx0XFx0cG9ydF93cml0ZV9idWY7XFxuIFxcdHdhaXRfcXVldWVfaGVhZF90XFx0ZHJhaW5fd2FpdDtcXHQvKiB3YWl0IHdoaWxlIHdyaXRlcyBkcmFpbiAqL1xcbiBcXHRib29sICAgICAgICAgICAgICAgICAgICB3cml0ZV9idXN5O1xcbi1cXHR3YWl0X3F1ZXVlX2hlYWRfdFxcdGNsb3NlX3dhaXQ7XFxuIFxcdGJvb2xcXHRcXHRcXHRzdXNwZW5kZWQ7XFx0LyogcG9ydCBzdXNwZW5kZWQgKi9cXG4gXFx0Ym9vbFxcdFxcdFxcdHN0YXJ0X2RlbGF5ZWQ7XFx0LyogZGVsYXkgc3RhcnQgd2hlbiBzdXNwZW5kZWQgKi9cXG4gXFx0c3RydWN0IGFzeW5jX2ljb3VudFxcdGljb3VudDtcXG5AQCAtNjEwLDE3ICs2MDksOSBAQCBzdGF0aWMgaW50IGdzZXJpYWxfd2FrZXVwX2hvc3Qoc3RydWN0IGdzZXJpYWwgKmdzZXIpXFxuICAqL1xcbiBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIHtcXG4tXFx0aW50XFx0XFx0cG9ydF9udW0gPSB0dHktXFx1MDAzZWluZGV4O1xcbi1cXHRzdHJ1Y3QgZ3NfcG9ydFxcdCpwb3J0O1xcbitcXHRzdHJ1Y3QgZ3NfcG9ydFxcdCpwb3J0ID0gdHR5LVxcdTAwM2Vkcml2ZXJfZGF0YTtcXG4gXFx0aW50XFx0XFx0c3RhdHVzID0gMDtcXG4gXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNnBvcnRzW3BvcnRfbnVtXS5sb2NrKTtcXG4tXFx0cG9ydCA9IHBvcnRzW3BvcnRfbnVtXS5wb3J0O1xcbi1cXHRpZiAoIXBvcnQpIHtcXG4tXFx0XFx0c3RhdHVzID0gLUVOT0RFVjtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnBvcnQtXFx1MDAzZXBvcnRfbG9jayk7XFxuIFxcbiBcXHQvKiBhbGxvY2F0ZSBjaXJjdWxhciBidWZmZXIgb24gZmlyc3Qgb3BlbiAqL1xcbkBAIC02MjgsMTcgKzYxOSwxMiBAQCBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcbiBcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnBvcnQtXFx1MDAzZXBvcnRfbG9jayk7XFxuIFxcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBwb3J0bWFzdGVyJ3MgbXV0ZXggc3RpbGwgcHJvdGVjdHMgZnJvbSBzaW11bHRhbmVvdXMgb3BlbigpLFxcbi1cXHRcXHQgKiBhbmQgY2xvc2UoKSBjYW4ndCBoYXBwZW4sIHlldC5cXG4tXFx0XFx0ICovXFxuLVxcbiBcXHRcXHRzdGF0dXMgPSBrZmlmb19hbGxvYyhcXHUwMDI2cG9ydC1cXHUwMDNlcG9ydF93cml0ZV9idWYsXFxuIFxcdFxcdFxcdFxcdCAgICAgV1JJVEVfQlVGX1NJWkUsIEdGUF9LRVJORUwpO1xcbiBcXHRcXHRpZiAoc3RhdHVzKSB7XFxuIFxcdFxcdFxcdHByX2RlYnVnKFxcXCJnc19vcGVuOiB0dHlHUyVkICglcCwlcCkgbm8gYnVmZmVyXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgcG9ydF9udW0sIHR0eSwgZmlsZSk7XFxuLVxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHRcXHQgcG9ydC1cXHUwMDNlcG9ydF9udW0sIHR0eSwgZmlsZSk7XFxuK1xcdFxcdFxcdHJldHVybiBzdGF0dXM7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnBvcnQtXFx1MDAzZXBvcnRfbG9jayk7XFxuQEAgLTY0OCw3ICs2MzQsNiBAQCBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcdGlmIChwb3J0LVxcdTAwM2Vwb3J0LmNvdW50KyspXFxuIFxcdFxcdGdvdG8gZXhpdF91bmxvY2tfcG9ydDtcXG4gXFxuLVxcdHR0eS1cXHUwMDNlZHJpdmVyX2RhdGEgPSBwb3J0O1xcbiBcXHRwb3J0LVxcdTAwM2Vwb3J0LnR0eSA9IHR0eTtcXG4gXFxuIFxcdC8qIGlmIGNvbm5lY3RlZCwgc3RhcnQgdGhlIEkvTyBzdHJlYW0gKi9cXG5AQCAtNjcyLDggKzY1Nyw2IEBAIHN0YXRpYyBpbnQgZ3Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFxuIGV4aXRfdW5sb2NrX3BvcnQ6XFxuIFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2cG9ydC1cXHUwMDNlcG9ydF9sb2NrKTtcXG4tb3V0Olxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNnBvcnRzW3BvcnRfbnVtXS5sb2NrKTtcXG4gXFx0cmV0dXJuIHN0YXR1cztcXG4gfVxcbiBcXG5AQCAtNzQ0LDcgKzcyNyw2IEBAIHN0YXRpYyB2b2lkIGdzX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRwcl9kZWJ1ZyhcXFwiZ3NfY2xvc2U6IHR0eUdTJWQgKCVwLCVwKSBkb25lIVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0cG9ydC1cXHUwMDNlcG9ydF9udW0sIHR0eSwgZmlsZSk7XFxuIFxcbi1cXHR3YWtlX3VwKFxcdTAwMjZwb3J0LVxcdTAwM2VjbG9zZV93YWl0KTtcXG4gZXhpdDpcXG4gXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZwb3J0LVxcdTAwM2Vwb3J0X2xvY2spO1xcbiB9XFxuQEAgLTkwOCw3ICs4OTAsNDIgQEAgc3RhdGljIGludCBnc19nZXRfaWNvdW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGdzX2luc3RhbGwoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG4re1xcbitcXHRpbnQgcG9ydF9udW0gPSB0dHktXFx1MDAzZWluZGV4O1xcbitcXHRzdHJ1Y3QgZ3NfcG9ydCAqcG9ydDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnBvcnRzW3BvcnRfbnVtXS5sb2NrKTtcXG4rXFx0cG9ydCA9IHBvcnRzW3BvcnRfbnVtXS5wb3J0O1xcbitcXHRpZiAoIXBvcnQpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwb3J0c1twb3J0X251bV0ubG9jayk7XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHR9XFxuK1xcbitcXHR0dHlfcG9ydF9nZXQoXFx1MDAyNnBvcnQtXFx1MDAzZXBvcnQpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBvcnRzW3BvcnRfbnVtXS5sb2NrKTtcXG4rXFxuK1xcdHJldCA9IHR0eV9zdGFuZGFyZF9pbnN0YWxsKGRyaXZlciwgdHR5KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHR0dHlfcG9ydF9wdXQoXFx1MDAyNnBvcnQtXFx1MDAzZXBvcnQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHR0dHktXFx1MDAzZWRyaXZlcl9kYXRhID0gcG9ydDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGdzX2NsZWFudXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG4re1xcbitcXHRzdHJ1Y3QgZ3NfcG9ydCAqcG9ydCA9IHR0eS1cXHUwMDNlZHJpdmVyX2RhdGE7XFxuK1xcbitcXHRpZiAocG9ydClcXG4rXFx0XFx0dHR5X3BvcnRfcHV0KFxcdTAwMjZwb3J0LVxcdTAwM2Vwb3J0KTtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBnc190dHlfb3BzID0ge1xcbitcXHQuaW5zdGFsbCA9XFx0XFx0Z3NfaW5zdGFsbCxcXG4gXFx0Lm9wZW4gPVxcdFxcdFxcdGdzX29wZW4sXFxuIFxcdC5jbG9zZSA9XFx0XFx0Z3NfY2xvc2UsXFxuIFxcdC53cml0ZSA9XFx0XFx0Z3Nfd3JpdGUsXFxuQEAgLTkxOSw2ICs5MzYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9vcGVyYXRpb25zIGdzX3R0eV9vcHMgPSB7XFxuIFxcdC51bnRocm90dGxlID1cXHRcXHRnc191bnRocm90dGxlLFxcbiBcXHQuYnJlYWtfY3RsID1cXHRcXHRnc19icmVha19jdGwsXFxuIFxcdC5nZXRfaWNvdW50ID1cXHRcXHRnc19nZXRfaWNvdW50LFxcbitcXHQuY2xlYW51cCA9XFx0XFx0Z3NfY2xlYW51cCxcXG4gfTtcXG4gXFxuIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuQEAgLTEyMDMsNiArMTIyMSwyMCBAQCBzdGF0aWMgdm9pZCBnc19jb25zb2xlX2V4aXQoc3RydWN0IGdzX3BvcnQgKnBvcnQpXFxuIFxcbiAjZW5kaWZcXG4gXFxuK3N0YXRpYyB2b2lkIGdzX3BvcnRfZGVzdHJ1Y3Qoc3RydWN0IHR0eV9wb3J0ICpwb3J0KVxcbit7XFxuK1xcdHN0cnVjdCBnc19wb3J0ICpnc19wb3J0ID0gY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCBnc19wb3J0LCBwb3J0KTtcXG4rXFxuK1xcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2Z3NfcG9ydC1cXHUwMDNlcHVzaCk7XFxuK1xcdGtmaWZvX2ZyZWUoXFx1MDAyNmdzX3BvcnQtXFx1MDAzZXBvcnRfd3JpdGVfYnVmKTtcXG4rXFx0dHR5X3BvcnRfZGVzdHJveShwb3J0KTtcXG4rXFx0a2ZyZWUoZ3NfcG9ydCk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X3BvcnRfb3BlcmF0aW9ucyBnc19wb3J0X29wcyA9IHtcXG4rXFx0LmRlc3RydWN0ID0gZ3NfcG9ydF9kZXN0cnVjdCxcXG4rfTtcXG4rXFxuIHN0YXRpYyBpbnRcXG4gZ3NfcG9ydF9hbGxvYyh1bnNpZ25lZCBwb3J0X251bSwgc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcgKmNvZGluZylcXG4ge1xcbkBAIC0xMjIyLDkgKzEyNTQsOSBAQCBnc19wb3J0X2FsbG9jKHVuc2lnbmVkIHBvcnRfbnVtLCBzdHJ1Y3QgdXNiX2NkY19saW5lX2NvZGluZyAqY29kaW5nKVxcbiBcXHR9XFxuIFxcbiBcXHR0dHlfcG9ydF9pbml0KFxcdTAwMjZwb3J0LVxcdTAwM2Vwb3J0KTtcXG4rXFx0cG9ydC1cXHUwMDNlcG9ydC5vcHMgPSBcXHUwMDI2Z3NfcG9ydF9vcHM7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZwb3J0LVxcdTAwM2Vwb3J0X2xvY2spO1xcbiBcXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZwb3J0LVxcdTAwM2VkcmFpbl93YWl0KTtcXG4tXFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2cG9ydC1cXHUwMDNlY2xvc2Vfd2FpdCk7XFxuIFxcbiBcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2cG9ydC1cXHUwMDNlcHVzaCwgZ3NfcnhfcHVzaCk7XFxuIFxcbkBAIC0xMjQxLDI1ICsxMjczLDEwIEBAIGdzX3BvcnRfYWxsb2ModW5zaWduZWQgcG9ydF9udW0sIHN0cnVjdCB1c2JfY2RjX2xpbmVfY29kaW5nICpjb2RpbmcpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgZ3NfY2xvc2VkKHN0cnVjdCBnc19wb3J0ICpwb3J0KVxcbi17XFxuLVxcdGludCBjb25kO1xcbi1cXG4tXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2cG9ydC1cXHUwMDNlcG9ydF9sb2NrKTtcXG4tXFx0Y29uZCA9IHBvcnQtXFx1MDAzZXBvcnQuY291bnQgPT0gMDtcXG4tXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZwb3J0LVxcdTAwM2Vwb3J0X2xvY2spO1xcbi1cXG4tXFx0cmV0dXJuIGNvbmQ7XFxuLX1cXG4tXFxuIHN0YXRpYyB2b2lkIGdzZXJpYWxfZnJlZV9wb3J0KHN0cnVjdCBnc19wb3J0ICpwb3J0KVxcbiB7XFxuLVxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cG9ydC1cXHUwMDNlcHVzaCk7XFxuLVxcdC8qIHdhaXQgZm9yIG9sZCBvcGVucyB0byBmaW5pc2ggKi9cXG4tXFx0d2FpdF9ldmVudChwb3J0LVxcdTAwM2VjbG9zZV93YWl0LCBnc19jbG9zZWQocG9ydCkpO1xcbiBcXHRXQVJOX09OKHBvcnQtXFx1MDAzZXBvcnRfdXNiICE9IE5VTEwpO1xcbi1cXHR0dHlfcG9ydF9kZXN0cm95KFxcdTAwMjZwb3J0LVxcdTAwM2Vwb3J0KTtcXG4tXFx0a2ZyZWUocG9ydCk7XFxuK1xcdHR0eV9wb3J0X3B1dChcXHUwMDI2cG9ydC1cXHUwMDNlcG9ydCk7XFxuIH1cXG4gXFxuIHZvaWQgZ3NlcmlhbF9mcmVlX2xpbmUodW5zaWduZWQgY2hhciBwb3J0X251bSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjM6MzY6MTUuNjYwODg3MjU2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNTkxNDQ4MDIxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfR0FER0VUXCIsXG4gICAgXCJVU0JfQ09ORklHRlNcIixcbiAgICBcIlVTQl9DT05GSUdGU19TRVJJQUxcIixcbiAgICBcIlVTQl9DT05GSUdGU19BQ01cIixcbiAgICBcIlVTQl9VX1NFUklBTFwiLFxuICAgIFwiVFRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3NfaW5zdGFsbFwiLFxuICAgIFwiZ3NfY2xlYW51cFwiLFxuICAgIFwiZ3NfcG9ydF9kZXN0cnVjdFwiLFxuICAgIFwiZ3Nfb3BlblwiLFxuICAgIFwiZ3NfY2xvc2VcIixcbiAgICBcImdzZXJpYWxfZnJlZV9wb3J0XCIsXG4gICAgXCJnc2VyaWFsX2ZyZWVfbGluZVwiLFxuICAgIFwiZ3NlcmlhbF9hbGxvY19saW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzdHJ1Y3R1cmVzIHRoZSBsaWZlY3ljbGUsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIG9wZW4vY2xvc2Ugc3luY2hyb25pemF0aW9uIG9mIHRoZSBVU0Igc2VyaWFsIGdhZGdldCBkcml2ZXIgKHVfc2VyaWFsLmMpIHVzaW5nIHR0eV9wb3J0X29wZXJhdGlvbnMgKC5kZXN0cnVjdCkgYW5kIHR0eV9wb3J0X2dldC9wdXQgYWNyb3NzIGluc3RhbGwgYW5kIGNsZWFudXAgY2FsbGJhY2tzIGluc3RlYWQgb2YgbWFudWFsIHdhaXRxdWV1ZSB0cmFja2luZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGdhZGdldCBDb25maWdGUywgZHVtbXlfaGNkLCBvciByYXctZ2FkZ2V0IGFsb25nIHdpdGggdHR5R1MqIGRldmljZSBvcGVyYXRpb25zLCBtYWtpbmcgaXQgYW4gaW1wb3J0YW50IHRhcmdldCBmb3IgY29uY3VycmVuY3kgYW5kIGxpZmVjeWNsZSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk1MGU0ZmQyZjM4ZDE1ZWVjNTZkZmVmNGYyYTFjOTlkODIxYzU0MGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDIzOjM2OjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuY1xuaW5kZXggY2RkMWRmYzY2NmM0Zi4uYzgyYzU4ODhjNmM0OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jXG4rKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuY1xuQEAgLTEyNSw3ICsxMjUsNiBAQCBzdHJ1Y3QgZ3NfcG9ydCB7XG4gXHRzdHJ1Y3Qga2ZpZm9cdFx0cG9ydF93cml0ZV9idWY7XG4gXHR3YWl0X3F1ZXVlX2hlYWRfdFx0ZHJhaW5fd2FpdDtcdC8qIHdhaXQgd2hpbGUgd3JpdGVzIGRyYWluICovXG4gXHRib29sICAgICAgICAgICAgICAgICAgICB3cml0ZV9idXN5O1xuLVx0d2FpdF9xdWV1ZV9oZWFkX3RcdGNsb3NlX3dhaXQ7XG4gXHRib29sXHRcdFx0c3VzcGVuZGVkO1x0LyogcG9ydCBzdXNwZW5kZWQgKi9cbiBcdGJvb2xcdFx0XHRzdGFydF9kZWxheWVkO1x0LyogZGVsYXkgc3RhcnQgd2hlbiBzdXNwZW5kZWQgKi9cbiBcdHN0cnVjdCBhc3luY19pY291bnRcdGljb3VudDtcbkBAIC02MTAsMTcgKzYwOSw5IEBAIHN0YXRpYyBpbnQgZ3NlcmlhbF93YWtldXBfaG9zdChzdHJ1Y3QgZ3NlcmlhbCAqZ3NlcilcbiAgKi9cbiBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuLVx0aW50XHRcdHBvcnRfbnVtID0gdHR5LVx1MDAzZWluZGV4O1xuLVx0c3RydWN0IGdzX3BvcnRcdCpwb3J0O1xuK1x0c3RydWN0IGdzX3BvcnRcdCpwb3J0ID0gdHR5LVx1MDAzZWRyaXZlcl9kYXRhO1xuIFx0aW50XHRcdHN0YXR1cyA9IDA7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnBvcnRzW3BvcnRfbnVtXS5sb2NrKTtcbi1cdHBvcnQgPSBwb3J0c1twb3J0X251bV0ucG9ydDtcbi1cdGlmICghcG9ydCkge1xuLVx0XHRzdGF0dXMgPSAtRU5PREVWO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0X2xvY2spO1xuIFxuIFx0LyogYWxsb2NhdGUgY2lyY3VsYXIgYnVmZmVyIG9uIGZpcnN0IG9wZW4gKi9cbkBAIC02MjgsMTcgKzYxOSwxMiBAQCBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZwb3J0LVx1MDAzZXBvcnRfbG9jayk7XG4gXG4tXHRcdC8qXG4tXHRcdCAqIHBvcnRtYXN0ZXIncyBtdXRleCBzdGlsbCBwcm90ZWN0cyBmcm9tIHNpbXVsdGFuZW91cyBvcGVuKCksXG4tXHRcdCAqIGFuZCBjbG9zZSgpIGNhbid0IGhhcHBlbiwgeWV0LlxuLVx0XHQgKi9cbi1cbiBcdFx0c3RhdHVzID0ga2ZpZm9fYWxsb2MoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0X3dyaXRlX2J1ZixcbiBcdFx0XHRcdCAgICAgV1JJVEVfQlVGX1NJWkUsIEdGUF9LRVJORUwpO1xuIFx0XHRpZiAoc3RhdHVzKSB7XG4gXHRcdFx0cHJfZGVidWcoXCJnc19vcGVuOiB0dHlHUyVkICglcCwlcCkgbm8gYnVmZmVyXFxuXCIsXG4tXHRcdFx0XHQgcG9ydF9udW0sIHR0eSwgZmlsZSk7XG4tXHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0XHQgcG9ydC1cdTAwM2Vwb3J0X251bSwgdHR5LCBmaWxlKTtcbitcdFx0XHRyZXR1cm4gc3RhdHVzO1xuIFx0XHR9XG4gXG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0X2xvY2spO1xuQEAgLTY0OCw3ICs2MzQsNiBAQCBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRpZiAocG9ydC1cdTAwM2Vwb3J0LmNvdW50KyspXG4gXHRcdGdvdG8gZXhpdF91bmxvY2tfcG9ydDtcbiBcbi1cdHR0eS1cdTAwM2Vkcml2ZXJfZGF0YSA9IHBvcnQ7XG4gXHRwb3J0LVx1MDAzZXBvcnQudHR5ID0gdHR5O1xuIFxuIFx0LyogaWYgY29ubmVjdGVkLCBzdGFydCB0aGUgSS9PIHN0cmVhbSAqL1xuQEAgLTY3Miw4ICs2NTcsNiBAQCBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXG4gZXhpdF91bmxvY2tfcG9ydDpcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZwb3J0LVx1MDAzZXBvcnRfbG9jayk7XG4tb3V0OlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBvcnRzW3BvcnRfbnVtXS5sb2NrKTtcbiBcdHJldHVybiBzdGF0dXM7XG4gfVxuIFxuQEAgLTc0NCw3ICs3MjcsNiBAQCBzdGF0aWMgdm9pZCBnc19jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHByX2RlYnVnKFwiZ3NfY2xvc2U6IHR0eUdTJWQgKCVwLCVwKSBkb25lIVxcblwiLFxuIFx0XHRcdHBvcnQtXHUwMDNlcG9ydF9udW0sIHR0eSwgZmlsZSk7XG4gXG4tXHR3YWtlX3VwKFx1MDAyNnBvcnQtXHUwMDNlY2xvc2Vfd2FpdCk7XG4gZXhpdDpcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZwb3J0LVx1MDAzZXBvcnRfbG9jayk7XG4gfVxuQEAgLTkwOCw3ICs4OTAsNDIgQEAgc3RhdGljIGludCBnc19nZXRfaWNvdW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBnc19pbnN0YWxsKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4re1xuK1x0aW50IHBvcnRfbnVtID0gdHR5LVx1MDAzZWluZGV4O1xuK1x0c3RydWN0IGdzX3BvcnQgKnBvcnQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwb3J0c1twb3J0X251bV0ubG9jayk7XG4rXHRwb3J0ID0gcG9ydHNbcG9ydF9udW1dLnBvcnQ7XG4rXHRpZiAoIXBvcnQpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBvcnRzW3BvcnRfbnVtXS5sb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXG4rXHR0dHlfcG9ydF9nZXQoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwb3J0c1twb3J0X251bV0ubG9jayk7XG4rXG4rXHRyZXQgPSB0dHlfc3RhbmRhcmRfaW5zdGFsbChkcml2ZXIsIHR0eSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHR0eV9wb3J0X3B1dChcdTAwMjZwb3J0LVx1MDAzZXBvcnQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0dHR5LVx1MDAzZWRyaXZlcl9kYXRhID0gcG9ydDtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBnc19jbGVhbnVwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4re1xuK1x0c3RydWN0IGdzX3BvcnQgKnBvcnQgPSB0dHktXHUwMDNlZHJpdmVyX2RhdGE7XG4rXG4rXHRpZiAocG9ydClcbitcdFx0dHR5X3BvcnRfcHV0KFx1MDAyNnBvcnQtXHUwMDNlcG9ydCk7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgZ3NfdHR5X29wcyA9IHtcbitcdC5pbnN0YWxsID1cdFx0Z3NfaW5zdGFsbCxcbiBcdC5vcGVuID1cdFx0XHRnc19vcGVuLFxuIFx0LmNsb3NlID1cdFx0Z3NfY2xvc2UsXG4gXHQud3JpdGUgPVx0XHRnc193cml0ZSxcbkBAIC05MTksNiArOTM2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBnc190dHlfb3BzID0ge1xuIFx0LnVudGhyb3R0bGUgPVx0XHRnc191bnRocm90dGxlLFxuIFx0LmJyZWFrX2N0bCA9XHRcdGdzX2JyZWFrX2N0bCxcbiBcdC5nZXRfaWNvdW50ID1cdFx0Z3NfZ2V0X2ljb3VudCxcbitcdC5jbGVhbnVwID1cdFx0Z3NfY2xlYW51cCxcbiB9O1xuIFxuIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5AQCAtMTIwMyw2ICsxMjIxLDIwIEBAIHN0YXRpYyB2b2lkIGdzX2NvbnNvbGVfZXhpdChzdHJ1Y3QgZ3NfcG9ydCAqcG9ydClcbiBcbiAjZW5kaWZcbiBcbitzdGF0aWMgdm9pZCBnc19wb3J0X2Rlc3RydWN0KHN0cnVjdCB0dHlfcG9ydCAqcG9ydClcbit7XG4rXHRzdHJ1Y3QgZ3NfcG9ydCAqZ3NfcG9ydCA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgZ3NfcG9ydCwgcG9ydCk7XG4rXG4rXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2Z3NfcG9ydC1cdTAwM2VwdXNoKTtcbitcdGtmaWZvX2ZyZWUoXHUwMDI2Z3NfcG9ydC1cdTAwM2Vwb3J0X3dyaXRlX2J1Zik7XG4rXHR0dHlfcG9ydF9kZXN0cm95KHBvcnQpO1xuK1x0a2ZyZWUoZ3NfcG9ydCk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X3BvcnRfb3BlcmF0aW9ucyBnc19wb3J0X29wcyA9IHtcbitcdC5kZXN0cnVjdCA9IGdzX3BvcnRfZGVzdHJ1Y3QsXG4rfTtcbitcbiBzdGF0aWMgaW50XG4gZ3NfcG9ydF9hbGxvYyh1bnNpZ25lZCBwb3J0X251bSwgc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcgKmNvZGluZylcbiB7XG5AQCAtMTIyMiw5ICsxMjU0LDkgQEAgZ3NfcG9ydF9hbGxvYyh1bnNpZ25lZCBwb3J0X251bSwgc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcgKmNvZGluZylcbiBcdH1cbiBcbiBcdHR0eV9wb3J0X2luaXQoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0KTtcbitcdHBvcnQtXHUwMDNlcG9ydC5vcHMgPSBcdTAwMjZnc19wb3J0X29wcztcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnBvcnQtXHUwMDNlcG9ydF9sb2NrKTtcbiBcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2cG9ydC1cdTAwM2VkcmFpbl93YWl0KTtcbi1cdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2cG9ydC1cdTAwM2VjbG9zZV93YWl0KTtcbiBcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnBvcnQtXHUwMDNlcHVzaCwgZ3NfcnhfcHVzaCk7XG4gXG5AQCAtMTI0MSwyNSArMTI3MywxMCBAQCBnc19wb3J0X2FsbG9jKHVuc2lnbmVkIHBvcnRfbnVtLCBzdHJ1Y3QgdXNiX2NkY19saW5lX2NvZGluZyAqY29kaW5nKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBnc19jbG9zZWQoc3RydWN0IGdzX3BvcnQgKnBvcnQpXG4te1xuLVx0aW50IGNvbmQ7XG4tXG4tXHRzcGluX2xvY2tfaXJxKFx1MDAyNnBvcnQtXHUwMDNlcG9ydF9sb2NrKTtcbi1cdGNvbmQgPSBwb3J0LVx1MDAzZXBvcnQuY291bnQgPT0gMDtcbi1cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZwb3J0LVx1MDAzZXBvcnRfbG9jayk7XG4tXG4tXHRyZXR1cm4gY29uZDtcbi19XG4tXG4gc3RhdGljIHZvaWQgZ3NlcmlhbF9mcmVlX3BvcnQoc3RydWN0IGdzX3BvcnQgKnBvcnQpXG4ge1xuLVx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnBvcnQtXHUwMDNlcHVzaCk7XG4tXHQvKiB3YWl0IGZvciBvbGQgb3BlbnMgdG8gZmluaXNoICovXG4tXHR3YWl0X2V2ZW50KHBvcnQtXHUwMDNlY2xvc2Vfd2FpdCwgZ3NfY2xvc2VkKHBvcnQpKTtcbiBcdFdBUk5fT04ocG9ydC1cdTAwM2Vwb3J0X3VzYiAhPSBOVUxMKTtcbi1cdHR0eV9wb3J0X2Rlc3Ryb3koXHUwMDI2cG9ydC1cdTAwM2Vwb3J0KTtcbi1cdGtmcmVlKHBvcnQpO1xuK1x0dHR5X3BvcnRfcHV0KFx1MDAyNnBvcnQtXHUwMDNlcG9ydCk7XG4gfVxuIFxuIHZvaWQgZ3NlcmlhbF9mcmVlX2xpbmUodW5zaWduZWQgY2hhciBwb3J0X251bSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIzOjM2OjE1LjY2MDg4ODg5NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwOTkwMzM4NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVVNCIEdhZGdldCBTZXJpYWwgRHJpdmVyIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQncyB3b3J0aCBhIGZ1enppbmcgcnVuIHdpdGggc3l6a2FsbGVyLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGEgZmFpcmx5IHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIG9mIHRoZSBVU0IgZ2FkZ2V0IHNlcmlhbCBkcml2ZXIgKGB1X3NlcmlhbC5jYCksIHNvIGl04oCZcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2suXG5cbkZpcnN0LCB0aGUgZGlmZiB0ZWxscyBtZSBpdCdzIHRvdWNoaW5nIHRoZSBoZWFydCBvZiBgdV9zZXJpYWwuY2AuIExldCdzIGRpZyBpbnRvIHRoZSBzcGVjaWZpYyBjaGFuZ2VzLCBzaGFsbCB3ZT8gT2theSwgaGVyZSdzIHdoYXQganVtcHMgb3V0OiB0aGV5J3JlIGNsZWFuaW5nIHVwIHNvbWUgb2xkIGNvZGUuIFRoZXkndmUgcmVtb3ZlZCBgd2FpdF9xdWV1ZV9oZWFkX3QgY2xvc2Vfd2FpdGAgZnJvbSBgZ3NfcG9ydGAuIEluIGBnc19vcGVuYCwgdGhlIGNvZGUgaXMgYmVjb21pbmcgbW9yZSBzdHJlYW1saW5lZC4gVGhlcmUncyBubyBsb25nZXIgdGhlIG11dGV4IGxvY2tpbmcgYW5kIHRoZSBidWZmZXIgYWxsb2NhdGlvbiBsb2dpYyBpcyBzaW1wbGlmaWVkLCB3aGljaCBjb3VsZCBoYXZlIHN1YnRsZSBpbXBsaWNhdGlvbnMuIGBnc19jbG9zZWAgYWxzbyBsb3N0IGl0cyBgd2FrZV91cGAgZnVuY3Rpb24gZm9yIHRoZSBjbG9zZSB3YWl0LiBUaGUgaW50cm9kdWN0aW9uIG9mIGBnc19pbnN0YWxsYCBhbmQgYGdzX2NsZWFudXBgIGluIGBnc190dHlfb3BzYCB3aXRoIHRoZSBhc3NvY2lhdGVkIGdldC9wdXQgbG9naWMgbG9va3MgbGlrZSB0aGV5J3JlIHRyYW5zaXRpb25pbmcgdG8gdXNpbmcgYHR0eV9wb3J0X29wZXJhdGlvbnNgIGZvciBwcm9wZXIgbGlmZXRpbWUgbWFuYWdlbWVudCBhbmQgcmVmY291bnRpbmcuIGBnc19pbnN0YWxsYCBsb29rcyB0byBhY3F1aXJlIHRoZSBsb2NrIGFuZCBjYWxscyBgdHR5X3BvcnRfZ2V0YCBhbmQgYHR0eV9zdGFuZGFyZF9pbnN0YWxsYC4gYGdzX2NsZWFudXBgIGNhbGxzIGB0dHlfcG9ydF9wdXRgLiBUaGUgYGdzX3BvcnRfZGVzdHJ1Y3RgIGNhbGxiYWNrLCBwcm92aWRlZCB2aWEgYHR0eV9wb3J0X29wZXJhdGlvbnNgLCBsb29rcyBsaWtlIGl0J3MgZ29pbmcgdG8gaGFuZGxlIHRoZSBjbGVhbnVwIHdoZW4gdGhlIHJlZmNvdW50IGhpdHMgemVyby4gYGdzX3BvcnRfYWxsb2NgIHJlZ2lzdGVycyB0aGUgcG9ydCBvcGVyYXRpb25zLiBUaGlzIGxvb2tzIGxpa2UgYSBjbGFzc2ljIHJlZmFjdG9yaW5nIHVzaW5nIGB0dHlfcG9ydF9vcGVyYXRpb25zYCBhbmQgYHR0eV9wb3J0X2dldGAvYHB1dGAgYWNyb3NzIGBpbnN0YWxsYC9gY2xlYW51cGAvYGRlc3RydWN0YCB0byBtYW5hZ2UgdGhlIFVTQiBnYWRnZXQgc2VyaWFsIGRyaXZlcidzIGxpZmV0aW1lIGFuZCByZWZjb3VudGluZy4gTGFzdGx5LCBgZ3NlcmlhbF9mcmVlX3BvcnRgIHJlcGxhY2VzIHRoZSB3YWl0IG9uIGNsb3NlX3dhaXQgd2l0aCBgdHR5X3BvcnRfcHV0KFx1MDAyNnBvcnQtXHUwMDNlcG9ydClgLlxuXG5UaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIHBhdHRlcm4gZm9yIHJlZmFjdG9yaW5nIHRoZXNlIHR5cGVzIG9mIGRyaXZlcnMuIEZyb20gbXkgZXhwZXJpZW5jZSwgY2hhbmdlcyB0byByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCByZWZjb3VudGluZyBhcmUgYWx3YXlzIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuIEEgbG90IG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBpbiB2YXJpb3VzIFVTQiBnYWRnZXQgc2VyaWFsIGZ1bmN0aW9ucyDigJMgYGdfc2VyaWFsYCwgQ0RDIEFDTSwgYW5kIGV2ZW4gdGhpbmdzIGxpa2UgQ29uZmlnRlMgZ2FkZ2V0cy4gVGhvc2UgYWxsIHJlbHkgb24gdGhpcyBjb2RlLCBzbyBldmVuIGEgbWlub3IgYnVnIGNvdWxkIGhhdmUgZmFyIHJlYWNoaW5nIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIHRvIHNlZSBob3cgdGhlIGNvZGUgaXMgZW5hYmxlZC4gVGhpcyBwYXRjaCBkZWZpbml0ZWx5IHdhcnJhbnRzIHN5emthbGxlciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzA4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjM6MzY6MjYuNjUxMjMwNzc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDg2OTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVfc2VyaWFsXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGU9MTM9b2JqLSQoQ09ORklHX1VTQl9GX1NTX0xCKVxcdCs9IHVzYl9mX3NzX2xiLm9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX1VTQl9VX1NFUklBTClcXHQrPSB1X3NlcmlhbC5vXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlLTE1LXVzYl9mX3NlcmlhbC15XFx0XFx0XFx0Oj0gZl9zZXJpYWwub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMzozNjoyNi43MDQzMjUwOTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzA4NDU2MDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYFVTQl9VX1NFUklBTGAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYFVTQl9VX1NFUklBTGAgY29uZmlndXJhdGlvbiBvcHRpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBUaGlzIGxpa2VseSBwZXJ0YWlucyB0byBlbmFibGluZyBhIFVTQiBzZXJpYWwgZ2FkZ2V0IGRyaXZlciwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCB0aGUgY29udGV4dHMgaXQncyBtZWFudCB0byBiZSB1c2VkIHdpdGhpbi4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqUGxhY2VtZW50OioqIFdoZXJlIGRvZXMgdGhpcyBvcHRpb24gcmVzaWRlIGluIHRoZSBvdmVyYWxsIFVTQiBjb25maWd1cmF0aW9uIGhpZXJhcmNoeT8gSXMgaXQgdW5kZXIgYSBzcGVjaWZpYyBjb250cm9sbGVyLCBnYWRnZXQgbW9kZSBzZWN0aW9uLCBvciBhIG1vcmUgZ2VuZXJhbCBVU0Igc2VyaWFsIHVtYnJlbGxhP1xuKiAgICoqRGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoaXMgdG8gYmUgdmFsaWQ/IEFyZSB0aGVyZSBhbnkgY29uZmxpY3RpbmcgY2hvaWNlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSBhbnkga2VybmVsIG1vZHVsZXMgaW1wbGljaXRseSBlbmFibGVkIGFzIGEgY29uc2VxdWVuY2Ugb2YgdGhpcyBvcHRpb24/XG4qICAgKipEZWZhdWx0IFZhbHVlOioqIElzIGl0IGB5YCwgYG5gLCBvciBgbWA/IFVuZGVyc3RhbmRpbmcgdGhlIGRlZmF1bHQgZ2l2ZXMgaW5zaWdodCBpbnRvIHRoZSBpbnRlbmRlZCB1c2UgY2FzZSBhbmQgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGlmIHRoZSBkZWZhdWx0IGlzIGNoYW5nZWQuIElzIHRoZXJlIGEgZGVmYXVsdCBzZWxlY3Rpb24gb2YgYSBzcGVjaWZpYyBkZXZpY2U/XG4qICAgKipIZWxwIFRleHQ6KiogVGhlIGhlbHAgdGV4dCBpcyB1c3VhbGx5IHRoZSBmaXJzdCBzb3VyY2Ugb2YgaW5mb3JtYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW5kZWQgdXNlIGNhc2UuIERvZXMgaXQgcHJvdmlkZSB1c2VmdWwgY29udGV4dCBvciBleGFtcGxlcz8gRG9lcyB0aGUgaGVscCB0ZXh0IGRlc2NyaWJlIGFueSBzcGVjaWZpYyByZXF1aXJlbWVudHMgZm9yIHRoaXMgbW9kdWxlP1xuKiAgICoqVHJpZ2dlcnM6KiogV2hhdCBzcGVjaWZpYyBzY2VuYXJpb3Mgb3IgaGFyZHdhcmUgc2V0dXBzIHRyaWdnZXIgdGhlIG5lZWQgdG8gZXhwbGljaXRseSBjb25maWd1cmUgYFVTQl9VX1NFUklBTGA/IEFyZSB0aGVyZSBvdGhlciwgbW9yZSBnZW5lcmljIG9wdGlvbnMgdGhhdCBtaWdodCBpbmRpcmVjdGx5IGltcGFjdCBpdHMgYmVoYXZpb3I/XG4qICAgKipJbXBsaWNhdGlvbnM6KiogV2hhdCBkb2VzIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIG9wdGlvbiAqcmVhbGx5KiBtZWFuIGluIHRlcm1zIG9mIHN5c3RlbSBiZWhhdmlvciBhbmQgcmVzb3VyY2UgdXNhZ2U/IEFyZSB0aGVyZSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBgVVNCYCBkZXZpY2UgaXMgY29ubmVjdGVkIHRvIGFuIGV4dGVybmFsIGRldmljZT9cbiogICAqKkFyY2hpdGVjdHVyZS1TcGVjaWZpYyBDb25kaXRpb25zOioqIEFyZSB0aGVyZSBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGBzZWxlY3RgIHN0YXRlbWVudHMgb3IgZGVwZW5kZW5jaWVzIG9uIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzIChlLmcuLCBzcGVjaWZpYyBVU0IgY29udHJvbGxlcnMpIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZD9cblxuRXNzZW50aWFsbHksIEknbSB0cnlpbmcgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgYFVTQl9VX1NFUklBTGAncyByb2xlIGluIHRoZSBzeXN0ZW0uIFRoZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgyMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIzOjM2OjMwLjAxMjc4MzI3NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDg2MzQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJVU0JfVV9TRVJJQUxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTEzMj1jb25maWcgVV9TRVJJQUxfQ09OU09MRVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTEzMy1cXHRib29sIFxcXCJTZXJpYWwgZ2FkZ2V0IGNvbnNvbGUgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzoxMzQ6XFx0ZGVwZW5kcyBvbiBVU0JfVV9TRVJJQUxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0xMzUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9MTUzPWNvbmZpZyBVU0JfRl9TU19MQlxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTU1LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjE1Njpjb25maWcgVVNCX1VfU0VSSUFMXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTU3LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz0yNDA9Y29uZmlnIFVTQl9DT05GSUdGU19TRVJJQUxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTI0My1cXHRkZXBlbmRzIG9uIFRUWVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjI0NDpcXHRzZWxlY3QgVVNCX1VfU0VSSUFMXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjQ1LVxcdHNlbGVjdCBVU0JfRl9TRVJJQUxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTI0OT1jb25maWcgVVNCX0NPTkZJR0ZTX0FDTVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjUyLVxcdGRlcGVuZHMgb24gVFRZXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MjUzOlxcdHNlbGVjdCBVU0JfVV9TRVJJQUxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0yNTQtXFx0c2VsZWN0IFVTQl9GX0FDTVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9MjU5PWNvbmZpZyBVU0JfQ09ORklHRlNfT0JFWFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjYyLVxcdGRlcGVuZHMgb24gVFRZXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MjYzOlxcdHNlbGVjdCBVU0JfVV9TRVJJQUxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0yNjQtXFx0c2VsZWN0IFVTQl9GX09CRVhcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZT0xMz1vYmotJChDT05GSUdfVVNCX0ZfU1NfTEIpXFx0Kz0gdXNiX2Zfc3NfbGIub1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfVVNCX1VfU0VSSUFMKVxcdCs9IHVfc2VyaWFsLm9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGUtMTUtdXNiX2Zfc2VyaWFsLXlcXHRcXHRcXHQ6PSBmX3NlcmlhbC5vXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc9MjkxPWNvbmZpZyBVU0JfR19TRVJJQUxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy0yOTMtXFx0ZGVwZW5kcyBvbiBUVFlcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc6Mjk0OlxcdHNlbGVjdCBVU0JfVV9TRVJJQUxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMjk1LVxcdHNlbGVjdCBVU0JfRl9BQ01cXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz0zNTE9Y29uZmlnIFVTQl9DRENfQ09NUE9TSVRFXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMzU0LVxcdHNlbGVjdCBVU0JfTElCQ09NUE9TSVRFXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnOjM1NTpcXHRzZWxlY3QgVVNCX1VfU0VSSUFMXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTM1Ni1cXHRzZWxlY3QgVVNCX1VfRVRIRVJcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz0zNzA9Y29uZmlnIFVTQl9HX05PS0lBXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMzc0LVxcdHNlbGVjdCBVU0JfTElCQ09NUE9TSVRFXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnOjM3NTpcXHRzZWxlY3QgVVNCX1VfU0VSSUFMXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTM3Ni1cXHRzZWxlY3QgVVNCX1VfRVRIRVJcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz0zODk9Y29uZmlnIFVTQl9HX0FDTV9NU1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTM5Mi1cXHRzZWxlY3QgVVNCX0xJQkNPTVBPU0lURVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZzozOTM6XFx0c2VsZWN0IFVTQl9VX1NFUklBTFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy0zOTQtXFx0c2VsZWN0IFVTQl9GX0FDTVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnPTQwMz1jb25maWcgVVNCX0dfTVVMVElcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy00MDctXFx0c2VsZWN0IFVTQl9MSUJDT01QT1NJVEVcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc6NDA4OlxcdHNlbGVjdCBVU0JfVV9TRVJJQUxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctNDA5LVxcdHNlbGVjdCBVU0JfVV9FVEhFUlxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnPTQ5MD1jb25maWcgVVNCX0dfREJHUF9TRVJJQUxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctNDkxLVxcdGRlcGVuZHMgb24gVVNCX0dfREJHUFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZzo0OTI6XFx0c2VsZWN0IFVTQl9VX1NFUklBTFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy00OTMtXFx0Ym9vbCBcXFwic2VyaWFsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMzozNjozMC4wNjM2NDk3MTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODU5NjkyNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIFN5emthbGxlcidzIFVTQiBHYWRnZXQgVGVzdGluZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHN5emthbGxlciBhY3R1YWxseSBwbGF5cyB3aXRoIFVTQiBnYWRnZXQgZHJpdmVycy4gSSBrbm93IGl0IGludGVyYWN0cyBoZWF2aWx5IHdpdGggdGhlbSwgdXNpbmcgdGhpbmdzIGxpa2UgYGR1bW15X2hjZGAsIHRoZSBgY29uZmlnZnNgIGdhZGdldCwgYW5kIGBnX3NlcmlhbGAuIEl04oCZcyBhbGwgdmVyeSBoYW5kcy1vbiwgbGV2ZXJhZ2luZyBgL2Rldi9nYWRnZXRgLCBDb25maWdGUyBVU0IgZ2FkZ2V0cywgYW5kIGV2ZW4gdGhlIHJhdy1nYWRnZXQgYXBwcm9hY2guIEJ1dCBJIG5lZWQgdG8gZ28gZGVlcGVyIHRoYW4gdGhhdC5cblxuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZXNlIGB0dHlHUypgIGNoYXJhY3RlciBkZXZpY2VzLCBgL2Rldi90dHlHUzBgIGFuZCBzbyBvbi4gVGhhdCBgdV9zZXJpYWwuY2AgY29kZSBpcyBrZXksIGJlY2F1c2UgdXNlcnNwYWNlIGNhbiBkaXJlY3RseSBvcGVuLCBjbG9zZSwgcmVhZCwgd3JpdGUsIGFuZCB1c2UgYGlvY3RsYCBvbiB0aGVtISBTbywgSSBuZWVkIHRvIHJlYWxseSBkaWcgaW50byBgdV9zZXJpYWwuY2AuIFRoYXTigJlzIHdoZXJlIHRoZSBtYWdpYyBvZiBjcmVhdGluZyB0aGVzZSBzcGVjaWZpYyBkcml2ZXIvZGV2aWNlIGludGVyYWN0aW9ucyBpcyBoYXBwZW5pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGF0IGRyaXZlciBpcyBjcmVhdGluZyBhbmQgaG93IHN5emthbGxlciBpcyBsZXZlcmFnaW5nIGl0IHRvIGZpbmQgYnVncy4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBvZiB0aGUgZnV6emluZyBwcm9iYWJseSBpcyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NzAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjM6MzY6MzIuOTIzMzQ0ODJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5MzQ2MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHR5X3JlZ2lzdGVyX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmM9MTU2Mj1zdGF0aWMgaW50IF9faW5pdCB1c2VyaWFsX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jLTE1OTQtXFx0LyogZXhwb3J0IHRoZSBkcml2ZXIgLi4uICovXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmM6MTU5NTpcXHRzdGF0dXMgPSB0dHlfcmVnaXN0ZXJfZHJpdmVyKGRyaXZlcik7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMtMTU5Ni1cXHRpZiAoc3RhdHVzKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIzOjM2OjMyLjk3MzI4MzgwN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4ODgyMDg3NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmVhZGluZyBhbmQgYW5hbHl6aW5nIHRoYXQgc3BlY2lmaWMgY29kZSBzZWN0aW9uOlxuXG4qKkRpdmluZyBpbnRvIHVfc2VyaWFsLmM6IFBhcnNpbmcgdGhlIERldGFpbHMqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgaW4gb24gbGluZXMgMTU2MCB0byAxNjAwIHdpdGhpbiBgZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmNgLiBUaGlzIHRlbGxzIG1lIHdlJ3JlIGRlZXAgd2l0aGluIHRoZSBVU0IgZ2FkZ2V0IGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IHRoZSBzZXJpYWwgZW11bGF0aW9uIGRyaXZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBpbiB0aGlzIHNlY3Rpb24gYmVjYXVzZSBpdCdzIHByb2JhYmx5IGhhbmRsaW5nIHNvbWUga2V5IGFzcGVjdCBvZiBob3cgdGhlIHNlcmlhbCBkZXZpY2UgaXMgcHJlc2VudGVkIHRvIHRoZSBob3N0LiBCYXNlZCBvbiB0aGUgZmlsZSBuYW1lLCBpdCdzIGxpa2VseSBpbnZvbHZlZCB3aXRoIGRhdGEgdHJhbnNmZXIgb3IgY29udHJvbCBzaWduYWxzLCBvciBtYXliZSBldmVuIGNvbmZpZ3VyYXRpb24gb2YgdGhlIFVTQiBzZXJpYWwgaW50ZXJmYWNlIGl0c2VsZi4gSSdtIGV4cGVjdGluZyB0byBzZWUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gaGFuZGxpbmcgaW5jb21pbmcgZGF0YSBmcm9tIHRoZSBob3N0LCBxdWV1ZWluZyBvdXRnb2luZyBkYXRhLCBvciBtYW5hZ2luZyB0aGUgdmFyaW91cyBzZXJpYWwgY29udHJvbCBzaWduYWxzIChsaWtlIERUUiwgUlRTLCBldGMuKSBpZiB0aGlzIGRyaXZlciBzdXBwb3J0cyB0aGVtLiBNeSBpbml0aWFsIGh5cG90aGVzaXMgaXMgdGhhdCBJIHdpbGwgZmluZCB0aGUgbG9naWMgZGVhbGluZyB3aXRoIGVpdGhlciBhIGhhcmR3YXJlIG9yIHNvZnR3YXJlIEZJRk8gYnVmZmVyLiBJJ2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGRlZmluZWQgb3IgYWNjZXNzZWQgd2l0aGluIHRoaXMgcmVnaW9uIHRvIHNlZSBob3cgdGhlIGRyaXZlciBtYWludGFpbnMgdGhlIGRhdGEgZmxvdywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcmFjZSBjb25kaXRpb25zIHRvIGJlIGF2b2lkZWQuIEknbSBhbHNvIGdvaW5nIHRvIGNoZWNrIGZvciBlcnJvciBoYW5kbGluZzsgYSBzZXJpYWwgZHJpdmVyIGlzIG5vdG9yaW91c2x5IHByb25lIHRvIGVycm9ycyBpbiBhIHJlYWwgd29ybGQuIFNvLCBpdCBzaG91bGQgYmUgd2VsbC1ndWFyZGVkIGFnYWluc3QgYmFkIGRhdGEgb3IgbWlzY29uZmlndXJlZCBoYXJkd2FyZS4gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRvbywgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LiBXaGF0IGZ1bmN0aW9ucyBjYWxsIGludG8gdGhpcyBzZWN0aW9uPyBXaGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzPyBJJ20gYW50aWNpcGF0aW5nIHRoYXQgdGhlc2UgbGluZXMgd2lsbCBlaXRoZXIgYmUgcGFydCBvZiBhIGNyaXRpY2FsIHNlY3Rpb24gZm9yIGRhdGEgdHJhbnNmZXIgb3Igc2V0dGluZyB1cCBhIFVTQiBlbmRwb2ludCBkZWRpY2F0ZWQgZm9yIHNlcmlhbCBkYXRhLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5OTgsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMzozNjozNS44NjE0OTUxNTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1NjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1NjA6XFx0RVhQT1JUX1NZTUJPTF9HUEwoZ3NlcmlhbF9yZXN1bWUpO1xcbjE1NjE6XFx0XFxuMTU2MjpcXHRzdGF0aWMgaW50IF9faW5pdCB1c2VyaWFsX2luaXQodm9pZClcXG4xNTYzOlxcdHtcXG4xNTY0OlxcdFxcdHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXI7XFxuMTU2NTpcXHRcXHR1bnNpZ25lZFxcdFxcdFxcdGk7XFxuMTU2NjpcXHRcXHRpbnRcXHRcXHRcXHRcXHRzdGF0dXM7XFxuMTU2NzpcXHRcXG4xNTY4OlxcdFxcdGRyaXZlciA9IHR0eV9hbGxvY19kcml2ZXIoTUFYX1VfU0VSSUFMX1BPUlRTLCBUVFlfRFJJVkVSX1JFQUxfUkFXIHxcXG4xNTY5OlxcdFxcdFxcdFxcdFRUWV9EUklWRVJfRFlOQU1JQ19ERVYpO1xcbjE1NzA6XFx0XFx0aWYgKElTX0VSUihkcml2ZXIpKVxcbjE1NzE6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZHJpdmVyKTtcXG4xNTcyOlxcdFxcbjE1NzM6XFx0XFx0ZHJpdmVyLVxcdTAwM2Vkcml2ZXJfbmFtZSA9IFxcXCJnX3NlcmlhbFxcXCI7XFxuMTU3NDpcXHRcXHRkcml2ZXItXFx1MDAzZW5hbWUgPSBcXFwidHR5R1NcXFwiO1xcbjE1NzU6XFx0XFx0LyogdXNlcyBkeW5hbWljYWxseSBhc3NpZ25lZCBkZXZfdCB2YWx1ZXMgKi9cXG4xNTc2OlxcdFxcbjE1Nzc6XFx0XFx0ZHJpdmVyLVxcdTAwM2V0eXBlID0gVFRZX0RSSVZFUl9UWVBFX1NFUklBTDtcXG4xNTc4OlxcdFxcdGRyaXZlci1cXHUwMDNlc3VidHlwZSA9IFNFUklBTF9UWVBFX05PUk1BTDtcXG4xNTc5OlxcdFxcdGRyaXZlci1cXHUwMDNlaW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zO1xcbjE1ODA6XFx0XFxuMTU4MTpcXHRcXHQvKiA5NjAwLTgtTi0xIC4uLiBtYXRjaGVzIGRlZmF1bHRzIGV4cGVjdGVkIGJ5IFxcXCJ1c2JzZXIuc3lzXFxcIiBvblxcbjE1ODI6XFx0XFx0ICogTVMtV2luZG93cy4gIE90aGVyd2lzZSwgbW9zdCBvZiB0aGVzZSBmbGFncyBzaG91bGRuJ3QgYWZmZWN0XFxuMTU4MzpcXHRcXHQgKiBhbnl0aGluZyB1bmxlc3Mgd2Ugd2VyZSB0byBhY3R1YWxseSBob29rIHVwIHRvIGEgc2VyaWFsIGxpbmUuXFxuMTU4NDpcXHRcXHQgKi9cXG4xNTg1OlxcdFxcdGRyaXZlci1cXHUwMDNlaW5pdF90ZXJtaW9zLmNfY2ZsYWcgPVxcbjE1ODY6XFx0XFx0XFx0XFx0Qjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMO1xcbjE1ODc6XFx0XFx0ZHJpdmVyLVxcdTAwM2Vpbml0X3Rlcm1pb3MuY19pc3BlZWQgPSA5NjAwO1xcbjE1ODg6XFx0XFx0ZHJpdmVyLVxcdTAwM2Vpbml0X3Rlcm1pb3MuY19vc3BlZWQgPSA5NjAwO1xcbjE1ODk6XFx0XFxuMTU5MDpcXHRcXHR0dHlfc2V0X29wZXJhdGlvbnMoZHJpdmVyLCBcXHUwMDI2Z3NfdHR5X29wcyk7XFxuMTU5MTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFYX1VfU0VSSUFMX1BPUlRTOyBpKyspXFxuMTU5MjpcXHRcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZwb3J0c1tpXS5sb2NrKTtcXG4xNTkzOlxcdFxcbjE1OTQ6XFx0XFx0LyogZXhwb3J0IHRoZSBkcml2ZXIgLi4uICovXFxuMTU5NTpcXHRcXHRzdGF0dXMgPSB0dHlfcmVnaXN0ZXJfZHJpdmVyKGRyaXZlcik7XFxuMTU5NjpcXHRcXHRpZiAoc3RhdHVzKSB7XFxuMTU5NzpcXHRcXHRcXHRwcl9lcnIoXFxcIiVzOiBjYW5ub3QgcmVnaXN0ZXIsIGVyciAlZFxcXFxuXFxcIixcXG4xNTk4OlxcdFxcdFxcdFxcdFxcdF9fZnVuY19fLCBzdGF0dXMpO1xcbjE1OTk6XFx0XFx0XFx0Z290byBmYWlsO1xcbjE2MDA6XFx0XFx0fVxcbjE2MDE6XFx0XFxuMTYwMjpcXHRcXHRnc190dHlfZHJpdmVyID0gZHJpdmVyO1xcbjE2MDM6XFx0XFxuMTYwNDpcXHRcXHRwcl9kZWJ1ZyhcXFwiJXM6IHJlZ2lzdGVyZWQgJWQgdHR5R1MqIGRldmljZSVzXFxcXG5cXFwiLCBfX2Z1bmNfXyxcXG4xNjA1OlxcdFxcdFxcdFxcdE1BWF9VX1NFUklBTF9QT1JUUyxcXG4xNjA2OlxcdFxcdFxcdFxcdHN0cl9wbHVyYWwoTUFYX1VfU0VSSUFMX1BPUlRTKSk7XFxuMTYwNzpcXHRcXG4xNjA4OlxcdFxcdHJldHVybiBzdGF0dXM7XFxuMTYwOTpcXHRmYWlsOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMzozNjozNS44NjE2MTEzMTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIwMjY0MDI3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBjdXJyZW50IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipQb3J0IEFsbG9jYXRpb24sIERlYWxsb2NhdGlvbiwgYW5kIFVTQiBTZXJpYWwgSW50ZXJhY3Rpb25zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGhvdyBwb3J0cyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIFVTQiBzZXJpYWwgZGV2aWNlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHN0cmF0ZWdpZXMuIEknbSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIG1lY2hhbmlzbXMgaW52b2x2ZWQg4oCTIGFyZSB3ZSB0YWxraW5nIGFib3V0IGR5bmFtaWMgYWxsb2NhdGlvbiBmcm9tIGEgcG9vbCwgc29tZSBraW5kIG9mIHBlcnNpc3RlbnQgbWFwcGluZywgb3IgYSBjb21iaW5hdGlvbj8gQW5kIGFyZSB0aGVyZSBhbnkgcmFjZSBjb25kaXRpb25zIEkgbmVlZCB0byBiZSBwYXJ0aWN1bGFybHkgd2FyeSBvZiwgZXNwZWNpYWxseSB3aGVuIGRldmljZXMgYXJlIGhvdC1wbHVnZ2VkIGFuZCB1bnBsdWdnZWQ/XG5cbkknbSBmb2N1c2luZyBvbiB0aGUgVVNCIHNlcmlhbCBhc3BlY3QgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhpbmdzIGNhbiBnZXQgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBtYXAgb3V0IGhvdyB0aGUgVVNCIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgcG9ydCBhbGxvY2F0aW9uIHN5c3RlbS4gRG9lcyBpdCByZXF1ZXN0IGEgcG9ydCBkaXJlY3RseSwgb3IgZG9lcyBpdCB0cmlnZ2VyIHNvbWUgaW50ZXJtZWRpYXRlIHNlcnZpY2U/IEhvdyBkb2VzIHRoZSBzeXN0ZW0gaGFuZGxlIGNvbnRlbnRpb24gaWYgbXVsdGlwbGUgVVNCIHNlcmlhbCBkZXZpY2VzIGFyZSBjb25uZWN0ZWQgc2ltdWx0YW5lb3VzbHk/IFdoYXQgaGFwcGVucyBkdXJpbmcgYSBkZXZpY2UgZGlzY29ubmVjdCDigJMgaG93IGNsZWFubHkgaXMgdGhlIHBvcnQgcmVsZWFzZWQsIGFuZCB3aGF0IHNpZ25hbHMgcHJvcGFnYXRlIHVwIHRoZSBzdGFjaz8gSSdtIGFsc28gY29uc2lkZXJpbmcgaG93IGVycm9yIGhhbmRsaW5nIGlzIGludGVncmF0ZWQgaGVyZSwgd2hhdCBhcmUgdGhlIGFwcHJvcHJpYXRlIHJlc3BvbnNlcyBmb3IgaW52YWxpZCByZXF1ZXN0cyBvciByZXNvdXJjZSBsaW1pdGF0aW9ucz8gSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIFVTQiBzZXJpYWwgZHJpdmVyLCB0aGUgc2VyaWFsIHBvcnQgYWJzdHJhY3Rpb24sIGFuZCB0aGUgdW5kZXJseWluZyBwb3J0IGFsbG9jYXRpb24gbGF5ZXIuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugc3lzdGVtcyB3b3JrIHRvZ2V0aGVyLCB0byBkZXRlcm1pbmUgaWYgdGhlIGltcGxlbWVudGF0aW9uIGNhbiBiZSBvcHRpbWl6ZWQsIGFuZCB0byBmaW5kIG91dCB0aGUgd2VhayBwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMjcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIzOjM2OjM5LjA2NDI1NDcxMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk0MDg2MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdzZXJpYWxfYWxsb2NfbGluZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfYWNtLmM9ODgwPXN0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uX2luc3RhbmNlICphY21fYWxsb2NfaW5zdGFuY2Uodm9pZClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX2FjbS5jLTg5MC1cXHRtdXRleF9pbml0KFxcdTAwMjZvcHRzLVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9hY20uYzo4OTE6XFx0cmV0ID0gZ3NlcmlhbF9hbGxvY19saW5lKFxcdTAwMjZvcHRzLVxcdTAwM2Vwb3J0X251bSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfYWNtLmMtODkyLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX29iZXguYz00MjQ9c3RhdGljIHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgKm9iZXhfYWxsb2NfaW5zdCh2b2lkKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2Zfb2JleC5jLTQzMy1cXHRvcHRzLVxcdTAwM2VmdW5jX2luc3QuZnJlZV9mdW5jX2luc3QgPSBvYmV4X2ZyZWVfaW5zdDtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9vYmV4LmM6NDM0OlxcdHJldCA9IGdzZXJpYWxfYWxsb2NfbGluZV9ub19jb25zb2xlKFxcdTAwMjZvcHRzLVxcdTAwM2Vwb3J0X251bSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2Zfb2JleC5jLTQzNS1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9zZXJpYWwuYz0zMTU9c3RhdGljIHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgKmdzZXJfYWxsb2NfaW5zdCh2b2lkKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2Zfc2VyaWFsLmMtMzI0LVxcdG9wdHMtXFx1MDAzZWZ1bmNfaW5zdC5mcmVlX2Z1bmNfaW5zdCA9IGdzZXJfZnJlZV9pbnN0O1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3NlcmlhbC5jOjMyNTpcXHRyZXQgPSBnc2VyaWFsX2FsbG9jX2xpbmUoXFx1MDAyNm9wdHMtXFx1MDAzZXBvcnRfbnVtKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9zZXJpYWwuYy0zMjYtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMtNDItICogQWZ0ZXIgdGhpcyBtb2R1bGUgaGFzIGJlZW4gbG9hZGVkLCB0aGUgaW5kaXZpZHVhbCBUVFkgcG9ydCBjYW4gYmUgcmVxdWVzdGVkXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmM6NDM6ICogKGdzZXJpYWxfYWxsb2NfbGluZSgpKSBhbmQgaXQgd2lsbCBzdGF5IGF2YWlsYWJsZSB1bnRpbCB0aGV5IGFyZSByZW1vdmVkXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMtNDQtICogKGdzZXJpYWxfZnJlZV9saW5lKCkpLiBFYWNoIG9uZSBtYXkgYmUgY29ubmVjdGVkIHRvIGEgVVNCIGZ1bmN0aW9uXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYz0xMjk5PUVYUE9SVF9TWU1CT0xfR1BMKGdzZXJpYWxfZnJlZV9saW5lKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYy0xMzAwLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jOjEzMDE6aW50IGdzZXJpYWxfYWxsb2NfbGluZV9ub19jb25zb2xlKHVuc2lnbmVkIGNoYXIgKmxpbmVfbnVtKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jLTEzMDIte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMtMTM0NC19XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmM6MTM0NTpFWFBPUlRfU1lNQk9MX0dQTChnc2VyaWFsX2FsbG9jX2xpbmVfbm9fY29uc29sZSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMtMTM0Ni1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYzoxMzQ3OmludCBnc2VyaWFsX2FsbG9jX2xpbmUodW5zaWduZWQgY2hhciAqbGluZV9udW0pXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMtMTM0OC17XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmM6MTM0OTpcXHRpbnQgcmV0ID0gZ3NlcmlhbF9hbGxvY19saW5lX25vX2NvbnNvbGUobGluZV9udW0pO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jLTEzNTAtXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYy0xMzU1LX1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYzoxMzU2OkVYUE9SVF9TWU1CT0xfR1BMKGdzZXJpYWxfYWxsb2NfbGluZSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMtMTM1Ny1cXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jLTEzNzMtICogZW5kcG9pbnQgZGVzY3JpcHRvcnMsIGFuZCBhbHNvIGhhdmUgYWxsb2NhdGUgQHBvcnRfbnVtIGJ5IGNhbGxpbmdcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYzoxMzc0OiAqIEBnc2VyaWFsX2FsbG9jX2xpbmUoKS5cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYy0xMzc1LSAqXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuaD01OD12b2lkIGdzX2ZyZWVfcmVxKHN0cnVjdCB1c2JfZXAgKiwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmgtNjAtLyogbWFuYWdlbWVudCBvZiBpbmRpdmlkdWFsIFRUWSBwb3J0cyAqL1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5oOjYxOmludCBnc2VyaWFsX2FsbG9jX2xpbmVfbm9fY29uc29sZSh1bnNpZ25lZCBjaGFyICpwb3J0X2xpbmUpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5oOjYyOmludCBnc2VyaWFsX2FsbG9jX2xpbmUodW5zaWduZWQgY2hhciAqcG9ydF9saW5lKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuaC02My12b2lkIGdzZXJpYWxfZnJlZV9saW5lKHVuc2lnbmVkIGNoYXIgcG9ydF9saW5lKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvZGJncC5jPTI3Nz1zdGF0aWMgaW50IGRiZ3BfYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9kYmdwLmMtMzA3LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvZGJncC5jOjMwODpcXHRpZiAoZ3NlcmlhbF9hbGxvY19saW5lKFxcdTAwMjZ0dHlfbGluZSkpIHtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2RiZ3AuYy0zMDktXFx0XFx0c3RwID0gNDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjM6MzY6MzkuMzU4MzQ2MzM5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc5MjI5MzI3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25maWdGUyBHYWRnZXQgU2VyaWFsIERyaXZlciBSZWZhY3RvcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCBjb25jZXJuaW5nIHRoZSBDb25maWdGUyBnYWRnZXQncyBzZXJpYWwgZnVuY3Rpb25hbGl0eSAoYWNtLnVzYjAsIHNlcmlhbC51c2IwLCBldGMuKS4gRmlyc3QsIEknbSB2ZXJpZnlpbmcgdGhlIHN0YW5kYXJkIHdvcmtmbG93OiB1c2Vyc3BhY2UgY3JlYXRlcyB0aGUgc2VyaWFsIGZ1bmN0aW9uIHVzaW5nIGBta2RpcmAgaW4gYC9zeXMva2VybmVsL2NvbmZpZy91c2JfZ2FkZ2V0L2cxL2Z1bmN0aW9ucy9hY20udXNiMGAgd2hpY2ggdHJpZ2dlcnMgdGhlIGBhY21fYWxsb2NfaW5zdGFuY2UoKWAgLVx1MDAzZSBgZ3NlcmlhbF9hbGxvY19saW5lKClgIHBhdGgsIGxlYWRpbmcgdG8gdGhlIGNyZWF0aW9uIG9mIGAvZGV2L3R0eUdTMGAuIFRoZW4sIHN0YW5kYXJkIGBvcGVuYCwgYHJlYWRgLCBgd3JpdGVgLCBgaW9jdGxgIG9wZXJhdGlvbnMgb24gYC9kZXYvdHR5R1MwYCwgYW5kIGZpbmFsbHksIGEgcmVtb3ZhbCBvciB1bmJpbmRpbmcuIFRoaXMgd2hvbGUgc2V0dXAgaXMgcGVyZmVjdGx5IHJlYWNoYWJsZSB1c2luZyBzdGFuZGFyZCBzeXprYWxsZXIgc3lzY2FsbHMsIGFuZCBjYW4gdXRpbGl6ZSB2aXJ0dWFsIGhhcmR3YXJlIGxpa2UgYGR1bW15X2hjZGAgb3IgYHJhd19nYWRnZXRgLlxuXG5Ob3csIHRoZSBjb3JlIG9mIHRoZSBpbnZlc3RpZ2F0aW9uOiB0aGUgcGF0Y2gncyBzcGVjaWZpYyBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIGl0J3MgcmVmYWN0b3JpbmcgdGhlIGBzdHJ1Y3QgZ3NfcG9ydGAgbGlmZWN5Y2xlLCB0aGUgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgYmV0d2VlbiB0aGUgVFRZIGxheWVyIGFuZCB0aGUgVVNCIGdhZGdldCBsYXllci4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlc2UgbW9kaWZpY2F0aW9uczpcblxuMS4gIGBnc19vcGVuYDogVGhlIGNvZGUgbm93IGRpcmVjdGx5IHVzZXMgYHR0eS1cdTAwM2Vkcml2ZXJfZGF0YWAgKHNldCBpbiBgZ3NfaW5zdGFsbGApIGluc3RlYWQgb2YgcmVseWluZyBvbiBpbmRleGluZyBpbnRvIGBwb3J0c1tdYCBhbmQgYWNxdWlyaW5nIGEgbG9jay5cbjIuICBgZ3NfaW5zdGFsbGA6IFRoaXMgbm93IGFjcXVpcmVzIGBwb3J0c1twb3J0X251bV0ubG9ja2AsIHJldHJpZXZlcyB0aGUgcG9ydCwgaW5jcmVhc2VzIHRoZSByZWZlcmVuY2UgY291bnQgdXNpbmcgYHR0eV9wb3J0X2dldGAsIHRoZW4gcmVsZWFzZXMgdGhlIGxvY2ssIGNhbGxzIGB0dHlfc3RhbmRhcmRfaW5zdGFsbGAsIGFuZCBzZXRzIGB0dHktXHUwMDNlZHJpdmVyX2RhdGFgIHRvIHRoZSBwb3J0LlxuMy4gIGBnc19jbGVhbnVwYDogSXQgY2FsbHMgYHR0eV9wb3J0X3B1dGAgdG8gZGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQuXG40LiAgYGdzX3BvcnRfZGVzdHJ1Y3RgOiBUaGlzIGlzIHRoZSBgdHR5X3BvcnRfb3BlcmF0aW9uc2AncyBkZXN0cnVjdCBjYWxsYmFjay4gVGhpcyBmdW5jdGlvbiBjYWxscyBgY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jYCwgYGtmaWZvX2ZyZWVgLCBgdHR5X3BvcnRfZGVzdHJveWAsIGFuZCBmaW5hbGx5IGBrZnJlZWAuXG41LiAgYGdzZXJpYWxfZnJlZV9wb3J0YDogVGhlIHBhdGNoIHJlcGxhY2VzIHRoZSBvbGQgYHdhaXRfZXZlbnRgIHdpdGggYHR0eV9wb3J0X3B1dGAgYW5kIGluY2x1ZGVzIGEgYFdBUk5fT05gIGNoZWNrLlxuXG5NeSBTcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIGNoYW5nZXMuIEkgaGF2ZSB0byBhc3Nlc3Mgd2hldGhlciB0aGVzZSBjaGFuZ2VzIGFyZSBpbnRyb2R1Y2luZyBhbnkgbmV3IGJ1Z3MsIHJhY2VzLCBvciBsb2NraW5nIGlzc3Vlcy4gQW55IG1vZGlmaWNhdGlvbiBpbiB0aGUgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgb3Igc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIFRUWSBhbmQgVVNCIGRyaXZlciBzdWJzeXN0ZW1zIGlzIGEgY2xhc3NpYyByZWNpcGUgZm9yIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWVzLCBvciBkZWFkbG9ja3MuXG5cbkEgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNvZGUgcGF0aCBpcyBlYXNpbHkgcmVhY2hhYmxlIGluIGEgUUVNVS9zdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LiBUaGUgZ29vZCBuZXdzIGlzIHRoYXQgdGhlIFVTQiBnYWRnZXQgc3Vic3lzdGVtLCB3aXRoIGNvbmZpZ2ZzIGFuZCBgZHVtbXlfaGNkYC9gcmF3X2dhZGdldGAsIGlzIHN0YW5kYXJkIGluIHN5emthbGxlciwgc28geWVzLCBpdCBpcy5cblxuTmV4dCwgSSBuZWVkIHRvIGtub3cgd2hpY2gga2VybmVsIGNvbmZpZ3MgZW5hYmxlIHRoZSBjb2RlIHBhdGg6IEkgbmVlZCB0byBlbnN1cmUgdGhlIGZvbGxvd2luZyBhcmUgZW5hYmxlZDogYFVTQl9DT05GSUdGU19TRVJJQUxgIG9yIGBVU0JfQ09ORklHRlNfQUNNYCBvciBgVVNCX0NPTkZJR0ZTYCBvciBgVVNCX0dfU0VSSUFMYCwgYFVTQl9VX1NFUklBTGAsIGBVU0JfR0FER0VUYCwgYW5kIGBUVFlgLlxuXG5Ob3csIEknbSBmb2N1c2luZyBvbiB0aGUga2V5IHN5bWJvbHMgdGhhdCBhcmUgZGlyZWN0bHkgaW1wYWN0ZWQgYnkgdGhpcyBwYXRjaC4gSSdsbCBjb25jZW50cmF0ZSBvbjogYGdzX2luc3RhbGxgLCBgZ3Nfb3BlbmAsIGBnc19jbG9zZWAsIGBnc19jbGVhbnVwYCwgYGdzX3BvcnRfZGVzdHJ1Y3RgLCBgZ3NlcmlhbF9mcmVlX3BvcnRgLCBgZ3NlcmlhbF9hbGxvY19saW5lYCwgYW5kIGBnc2VyaWFsX2ZyZWVfbGluZWAuXG5cbkxldCdzIGNoZWNrIHRoZSB2aXNpYmlsaXR5IG9mIHRoZXNlIHN5bWJvbHM7IHdoZXRoZXIgdGhleSBhcmUgZ2xvYmFsIGFuZCBub3Qgc3RhdGljIGlubGluZSBpbiBoZWFkZXJzLiBGcm9tIHdoYXQgSSBzZWUsICBgZ3NfaW5zdGFsbGAsIGBnc19vcGVuYCwgYGdzX2Nsb3NlYCwgYGdzX2NsZWFudXBgLCBgZ3NfcG9ydF9kZXN0cnVjdGAsIGFuZCBgZ3NlcmlhbF9mcmVlX3BvcnRgIGFyZSBzdGF0aWMgaW4gYHVfc2VyaWFsLmNgLCB3aGlsZSBgZ3NlcmlhbF9mcmVlX2xpbmVgIGFuZCBgZ3NlcmlhbF9hbGxvY19saW5lYCBhcmUgZ2xvYmFsLlxuXG5GaW5hbGx5LCBsZXQgbWUgcmUtdmVyaWZ5IHRoZSBjb25maWdzIGluIEtjb25maWc6IGBVU0JfR0FER0VUYCwgYFVTQl9DT05GSUdGU2AsIGBVU0JfQ09ORklHRlNfU0VSSUFMYCwgYFVTQl9DT05GSUdGU19BQ01gLCBhbmQgYFVTQl9VX1NFUklBTGAuIEFuZCBJJ2xsIGRvdWJsZS1jaGVjayBgVVNCX0NPTkZJR0ZTX1NFUklBTGAgaW4gYGRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnYCB0byBtYWtlIHN1cmUgaXQgZXhpc3RzLlxuXG5XaXRoIHRoaXMgc3RydWN0dXJlZCBpbnZlc3RpZ2F0aW9uLCBJIGNhbiBzdGFydCBmb3JtaW5nIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgcGF0Y2gncyBpbXBsaWNhdGlvbnMgYW5kIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkwMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMzozNjo0Ny4yODEyODI5NTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NjgxNzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0JfQ09ORklHRlNfU0VSSUFMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz0yMjg9Y29uZmlnIFVTQl9DT05GSUdGU1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjM5LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjI0MDpjb25maWcgVVNCX0NPTkZJR0ZTX1NFUklBTFxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTI0MS1cXHRib29sIFxcXCJHZW5lcmljIHNlcmlhbCBidWxrIGluL291dFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjM6MzY6NDcuMzI5OTcwNTkzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNjA1MDE5MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFVTQiBDb25maWdGUyBhbmQgV29ydGhGdXp6aW5nIEltcGFjdCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBVU0JfQ09ORklHRlNgLiBMb29raW5nIGF0IGBkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZ2AsIGl0J3MgY2xlYXIgdGhhdCBgVVNCX0NPTkZJR0ZTYCByZXF1aXJlcyBgVVNCX0dBREdFVGAuIFRoYXQgbWFrZXMgc2Vuc2U7IENvbmZpZ0ZTIGlzIGVzc2VudGlhbGx5IGEgd2F5IHRvIGNvbmZpZ3VyZSB0aGUgZ2FkZ2V0LlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBzZXJpYWwgZ2FkZ2V0IGZ1bmN0aW9uYWxpdHksIGBVU0JfQ09ORklHRlNfU0VSSUFMYCBkZXBlbmRzIG9uIGJvdGggYFVTQl9DT05GSUdGU2AgYW5kIGBUVFlgLCB3aGljaCBpcyBleHBlY3RlZCBmb3Igc2VyaWFsIGNvbW11bmljYXRpb24uIEl0ICpzZWxlY3RzKiBgVVNCX1VfU0VSSUFMYCBhbmQgYFVTQl9GX1NFUklBTGAsIHdoaWNoIGFyZSB0aGUgdW5kZXJseWluZyBVU0Igc2VyaWFsIGRyaXZlciBhbmQgZnVuY3Rpb24uIGBVU0JfQ09ORklHRlNfQUNNYCBoYXMgc2ltaWxhciBkZXBlbmRlbmNpZXMgb24gYFVTQl9DT05GSUdGU2AgYW5kIGBUVFlgLCBidXQgaXQgc2VsZWN0cyBgVVNCX1VfU0VSSUFMYCBhbmQgYFVTQl9GX0FDTWAsIGluZGljYXRpbmcgaXQgaGFuZGxlcyBBYnN0cmFjdCBDb250cm9sIE1vZGVsIChBQ00pIGRldmljZXMuXG5cbk5leHQsIEkgbmVlZCB0byByZXZpc2l0IHRoZSBgV29ydGhGdXp6aW5nYCBhc3BlY3QuIEl0J3MgY29uZmlybWVkIGFzIGB0cnVlYCwgYW5kIEkga25vdyB0aGF0IHRoaXMgcGF0Y2ggdG91Y2hlcyBVU0Igc2VyaWFsIGdhZGdldCBjb2RlIOKAkyBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jYC4gVGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIGNvbnNpZGVyaW5nIGl0IGltcGFjdHMgcmVmZXJlbmNlIGNvdW50aW5nLCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgYW5kIHN5bmNocm9uaXphdGlvbi4gVGhlIGZhY3QgdGhhdCB0aGlzIGRyaXZlciBpcyBleHBvc2VkIHRocm91Z2ggQ29uZmlnRlMgKGFuZCByZWxhdGVkIHN1YnN5c3RlbXMgbGlrZSBkdW1teV9oY2QsIHJhdy1nYWRnZXQsIGFuZCB0dHlHUyogbm9kZXMpIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBtYWtlcyB0aGlzIGV2ZW4gbW9yZSBjcml0aWNhbCBmb3Igc2VjdXJpdHkuXG5cbkdpdmVuIHRoZXNlIGZpbmRpbmdzLCBJIGNhbiBub3cgZm9ybXVsYXRlIGEgY29uY2lzZSByZXNwb25zZSBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSByZXBvcnQgYWNjdXJhdGVseSByZWZsZWN0cyB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBgV29ydGhGdXp6aW5nYCBzZXR0aW5nIGFuZCB0aGUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIHRoaXMgbW9kaWZpZWQgY29kZSwgZXNwZWNpYWxseSBjb25jZXJuaW5nIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgc3luY2hyb25pemF0aW9uIHdpdGhpbiB0aGUgVVNCIHNlcmlhbCBnYWRnZXQgZHJpdmVyLCBhY2Nlc3NpYmxlIHZpYSBDb25maWdGUy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5OTEsIk91dHB1dFRva2VucyI6MjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIzOjM2OjUxLjQ5MDQ3NTc4M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0ODg4Mjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfR0FER0VUXCIsXG4gICAgXCJVU0JfQ09ORklHRlNcIixcbiAgICBcIlVTQl9DT05GSUdGU19TRVJJQUxcIixcbiAgICBcIlVTQl9DT05GSUdGU19BQ01cIixcbiAgICBcIlVTQl9VX1NFUklBTFwiLFxuICAgIFwiVFRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3NfaW5zdGFsbFwiLFxuICAgIFwiZ3NfY2xlYW51cFwiLFxuICAgIFwiZ3NfcG9ydF9kZXN0cnVjdFwiLFxuICAgIFwiZ3Nfb3BlblwiLFxuICAgIFwiZ3NfY2xvc2VcIixcbiAgICBcImdzZXJpYWxfZnJlZV9wb3J0XCIsXG4gICAgXCJnc2VyaWFsX2ZyZWVfbGluZVwiLFxuICAgIFwiZ3NlcmlhbF9hbGxvY19saW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzdHJ1Y3R1cmVzIHRoZSBsaWZlY3ljbGUsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIG9wZW4vY2xvc2Ugc3luY2hyb25pemF0aW9uIG9mIHRoZSBVU0Igc2VyaWFsIGdhZGdldCBkcml2ZXIgKHVfc2VyaWFsLmMpIHVzaW5nIHR0eV9wb3J0X29wZXJhdGlvbnMgKC5kZXN0cnVjdCkgYW5kIHR0eV9wb3J0X2dldC9wdXQgYWNyb3NzIGluc3RhbGwgYW5kIGNsZWFudXAgY2FsbGJhY2tzIGluc3RlYWQgb2YgbWFudWFsIHdhaXRxdWV1ZSB0cmFja2luZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGdhZGdldCBDb25maWdGUywgZHVtbXlfaGNkLCBvciByYXctZ2FkZ2V0IGFsb25nIHdpdGggdHR5R1MqIGRldmljZSBvcGVyYXRpb25zLCBtYWtpbmcgaXQgYW4gaW1wb3J0YW50IHRhcmdldCBmb3IgY29uY3VycmVuY3kgYW5kIGxpZmVjeWNsZSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9HQURHRVRcIixcbiAgICBcIlVTQl9DT05GSUdGU1wiLFxuICAgIFwiVVNCX0NPTkZJR0ZTX1NFUklBTFwiLFxuICAgIFwiVVNCX0NPTkZJR0ZTX0FDTVwiLFxuICAgIFwiVVNCX1VfU0VSSUFMXCIsXG4gICAgXCJUVFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnc19pbnN0YWxsXCIsXG4gICAgXCJnc19jbGVhbnVwXCIsXG4gICAgXCJnc19wb3J0X2Rlc3RydWN0XCIsXG4gICAgXCJnc19vcGVuXCIsXG4gICAgXCJnc19jbG9zZVwiLFxuICAgIFwiZ3NlcmlhbF9mcmVlX3BvcnRcIixcbiAgICBcImdzZXJpYWxfZnJlZV9saW5lXCIsXG4gICAgXCJnc2VyaWFsX2FsbG9jX2xpbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXN0cnVjdHVyZXMgdGhlIGxpZmVjeWNsZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgb3Blbi9jbG9zZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFVTQiBzZXJpYWwgZ2FkZ2V0IGRyaXZlciAodV9zZXJpYWwuYykgdXNpbmcgdHR5X3BvcnRfb3BlcmF0aW9ucyAoLmRlc3RydWN0KSBhbmQgdHR5X3BvcnRfZ2V0L3B1dCBhY3Jvc3MgaW5zdGFsbCBhbmQgY2xlYW51cCBjYWxsYmFja3MgaW5zdGVhZCBvZiBtYW51YWwgd2FpdHF1ZXVlIHRyYWNraW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBVU0IgZ2FkZ2V0IENvbmZpZ0ZTLCBkdW1teV9oY2QsIG9yIHJhdy1nYWRnZXQgYWxvbmcgd2l0aCB0dHlHUyogZGV2aWNlIG9wZXJhdGlvbnMsIG1ha2luZyBpdCBhbiBpbXBvcnRhbnQgdGFyZ2V0IGZvciBjb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIzOjM2OjUxLjU3NTM3MjE1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTMwMDkyNTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjM6MzY6NTEuNTc2MDI1NDVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NTI5NDM1MzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgb2YgYHN0cnVjdCBnc19wb3J0YCBpbiBgZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmNgIHVzaW5nIHN0YW5kYXJkIGB0dHlfcG9ydGAgcmVmY291bnRpbmcgKGB0dHlfcG9ydF9nZXRgL2B0dHlfcG9ydF9wdXRgLCBgdHR5X29wZXJhdGlvbnMuaW5zdGFsbGAsIGB0dHlfb3BlcmF0aW9ucy5jbGVhbnVwYCwgYW5kIGB0dHlfcG9ydF9vcGVyYXRpb25zLmRlc3RydWN0YCkuXFxuXFxuVGhpcyByZWZhY3RvcmluZyBhZGRyZXNzZXMgdHR5IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgaXNzdWVzIChwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIGFuZCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiBsaW5lIHRlYXJkb3duIGFuZCB0dHkgb3BlcmF0aW9ucykuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBkbyBub3QgY29weSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSwgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIHJlZmNvdW50aW5nIGltYmFsYW5jZXMsIG9yIGxvY2tpbmcgaXNzdWVzKSBhcmUgdGhvcm91Z2hseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCByZWZjb3VudCB0cmFja2luZywgYW5kIExPQ0tERVAgYnVpbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk1MGU0ZmQyZjM4ZDE1ZWVjNTZkZmVmNGYyYTFjOTlkODIxYzU0MGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDIzOjM2OjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuY1xuaW5kZXggY2RkMWRmYzY2NmM0Zi4uYzgyYzU4ODhjNmM0OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jXG4rKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuY1xuQEAgLTEyNSw3ICsxMjUsNiBAQCBzdHJ1Y3QgZ3NfcG9ydCB7XG4gXHRzdHJ1Y3Qga2ZpZm9cdFx0cG9ydF93cml0ZV9idWY7XG4gXHR3YWl0X3F1ZXVlX2hlYWRfdFx0ZHJhaW5fd2FpdDtcdC8qIHdhaXQgd2hpbGUgd3JpdGVzIGRyYWluICovXG4gXHRib29sICAgICAgICAgICAgICAgICAgICB3cml0ZV9idXN5O1xuLVx0d2FpdF9xdWV1ZV9oZWFkX3RcdGNsb3NlX3dhaXQ7XG4gXHRib29sXHRcdFx0c3VzcGVuZGVkO1x0LyogcG9ydCBzdXNwZW5kZWQgKi9cbiBcdGJvb2xcdFx0XHRzdGFydF9kZWxheWVkO1x0LyogZGVsYXkgc3RhcnQgd2hlbiBzdXNwZW5kZWQgKi9cbiBcdHN0cnVjdCBhc3luY19pY291bnRcdGljb3VudDtcbkBAIC02MTAsMTcgKzYwOSw5IEBAIHN0YXRpYyBpbnQgZ3NlcmlhbF93YWtldXBfaG9zdChzdHJ1Y3QgZ3NlcmlhbCAqZ3NlcilcbiAgKi9cbiBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuLVx0aW50XHRcdHBvcnRfbnVtID0gdHR5LVx1MDAzZWluZGV4O1xuLVx0c3RydWN0IGdzX3BvcnRcdCpwb3J0O1xuK1x0c3RydWN0IGdzX3BvcnRcdCpwb3J0ID0gdHR5LVx1MDAzZWRyaXZlcl9kYXRhO1xuIFx0aW50XHRcdHN0YXR1cyA9IDA7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnBvcnRzW3BvcnRfbnVtXS5sb2NrKTtcbi1cdHBvcnQgPSBwb3J0c1twb3J0X251bV0ucG9ydDtcbi1cdGlmICghcG9ydCkge1xuLVx0XHRzdGF0dXMgPSAtRU5PREVWO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0X2xvY2spO1xuIFxuIFx0LyogYWxsb2NhdGUgY2lyY3VsYXIgYnVmZmVyIG9uIGZpcnN0IG9wZW4gKi9cbkBAIC02MjgsMTcgKzYxOSwxMiBAQCBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZwb3J0LVx1MDAzZXBvcnRfbG9jayk7XG4gXG4tXHRcdC8qXG4tXHRcdCAqIHBvcnRtYXN0ZXIncyBtdXRleCBzdGlsbCBwcm90ZWN0cyBmcm9tIHNpbXVsdGFuZW91cyBvcGVuKCksXG4tXHRcdCAqIGFuZCBjbG9zZSgpIGNhbid0IGhhcHBlbiwgeWV0LlxuLVx0XHQgKi9cbi1cbiBcdFx0c3RhdHVzID0ga2ZpZm9fYWxsb2MoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0X3dyaXRlX2J1ZixcbiBcdFx0XHRcdCAgICAgV1JJVEVfQlVGX1NJWkUsIEdGUF9LRVJORUwpO1xuIFx0XHRpZiAoc3RhdHVzKSB7XG4gXHRcdFx0cHJfZGVidWcoXCJnc19vcGVuOiB0dHlHUyVkICglcCwlcCkgbm8gYnVmZmVyXFxuXCIsXG4tXHRcdFx0XHQgcG9ydF9udW0sIHR0eSwgZmlsZSk7XG4tXHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0XHQgcG9ydC1cdTAwM2Vwb3J0X251bSwgdHR5LCBmaWxlKTtcbitcdFx0XHRyZXR1cm4gc3RhdHVzO1xuIFx0XHR9XG4gXG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0X2xvY2spO1xuQEAgLTY0OCw3ICs2MzQsNiBAQCBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRpZiAocG9ydC1cdTAwM2Vwb3J0LmNvdW50KyspXG4gXHRcdGdvdG8gZXhpdF91bmxvY2tfcG9ydDtcbiBcbi1cdHR0eS1cdTAwM2Vkcml2ZXJfZGF0YSA9IHBvcnQ7XG4gXHRwb3J0LVx1MDAzZXBvcnQudHR5ID0gdHR5O1xuIFxuIFx0LyogaWYgY29ubmVjdGVkLCBzdGFydCB0aGUgSS9PIHN0cmVhbSAqL1xuQEAgLTY3Miw4ICs2NTcsNiBAQCBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXG4gZXhpdF91bmxvY2tfcG9ydDpcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZwb3J0LVx1MDAzZXBvcnRfbG9jayk7XG4tb3V0OlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBvcnRzW3BvcnRfbnVtXS5sb2NrKTtcbiBcdHJldHVybiBzdGF0dXM7XG4gfVxuIFxuQEAgLTc0NCw3ICs3MjcsNiBAQCBzdGF0aWMgdm9pZCBnc19jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHByX2RlYnVnKFwiZ3NfY2xvc2U6IHR0eUdTJWQgKCVwLCVwKSBkb25lIVxcblwiLFxuIFx0XHRcdHBvcnQtXHUwMDNlcG9ydF9udW0sIHR0eSwgZmlsZSk7XG4gXG4tXHR3YWtlX3VwKFx1MDAyNnBvcnQtXHUwMDNlY2xvc2Vfd2FpdCk7XG4gZXhpdDpcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZwb3J0LVx1MDAzZXBvcnRfbG9jayk7XG4gfVxuQEAgLTkwOCw3ICs4OTAsNDIgQEAgc3RhdGljIGludCBnc19nZXRfaWNvdW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBnc19pbnN0YWxsKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4re1xuK1x0aW50IHBvcnRfbnVtID0gdHR5LVx1MDAzZWluZGV4O1xuK1x0c3RydWN0IGdzX3BvcnQgKnBvcnQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwb3J0c1twb3J0X251bV0ubG9jayk7XG4rXHRwb3J0ID0gcG9ydHNbcG9ydF9udW1dLnBvcnQ7XG4rXHRpZiAoIXBvcnQpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBvcnRzW3BvcnRfbnVtXS5sb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXG4rXHR0dHlfcG9ydF9nZXQoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwb3J0c1twb3J0X251bV0ubG9jayk7XG4rXG4rXHRyZXQgPSB0dHlfc3RhbmRhcmRfaW5zdGFsbChkcml2ZXIsIHR0eSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHR0eV9wb3J0X3B1dChcdTAwMjZwb3J0LVx1MDAzZXBvcnQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0dHR5LVx1MDAzZWRyaXZlcl9kYXRhID0gcG9ydDtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBnc19jbGVhbnVwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4re1xuK1x0c3RydWN0IGdzX3BvcnQgKnBvcnQgPSB0dHktXHUwMDNlZHJpdmVyX2RhdGE7XG4rXG4rXHRpZiAocG9ydClcbitcdFx0dHR5X3BvcnRfcHV0KFx1MDAyNnBvcnQtXHUwMDNlcG9ydCk7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgZ3NfdHR5X29wcyA9IHtcbitcdC5pbnN0YWxsID1cdFx0Z3NfaW5zdGFsbCxcbiBcdC5vcGVuID1cdFx0XHRnc19vcGVuLFxuIFx0LmNsb3NlID1cdFx0Z3NfY2xvc2UsXG4gXHQud3JpdGUgPVx0XHRnc193cml0ZSxcbkBAIC05MTksNiArOTM2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBnc190dHlfb3BzID0ge1xuIFx0LnVudGhyb3R0bGUgPVx0XHRnc191bnRocm90dGxlLFxuIFx0LmJyZWFrX2N0bCA9XHRcdGdzX2JyZWFrX2N0bCxcbiBcdC5nZXRfaWNvdW50ID1cdFx0Z3NfZ2V0X2ljb3VudCxcbitcdC5jbGVhbnVwID1cdFx0Z3NfY2xlYW51cCxcbiB9O1xuIFxuIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5AQCAtMTIwMyw2ICsxMjIxLDIwIEBAIHN0YXRpYyB2b2lkIGdzX2NvbnNvbGVfZXhpdChzdHJ1Y3QgZ3NfcG9ydCAqcG9ydClcbiBcbiAjZW5kaWZcbiBcbitzdGF0aWMgdm9pZCBnc19wb3J0X2Rlc3RydWN0KHN0cnVjdCB0dHlfcG9ydCAqcG9ydClcbit7XG4rXHRzdHJ1Y3QgZ3NfcG9ydCAqZ3NfcG9ydCA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgZ3NfcG9ydCwgcG9ydCk7XG4rXG4rXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2Z3NfcG9ydC1cdTAwM2VwdXNoKTtcbitcdGtmaWZvX2ZyZWUoXHUwMDI2Z3NfcG9ydC1cdTAwM2Vwb3J0X3dyaXRlX2J1Zik7XG4rXHR0dHlfcG9ydF9kZXN0cm95KHBvcnQpO1xuK1x0a2ZyZWUoZ3NfcG9ydCk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X3BvcnRfb3BlcmF0aW9ucyBnc19wb3J0X29wcyA9IHtcbitcdC5kZXN0cnVjdCA9IGdzX3BvcnRfZGVzdHJ1Y3QsXG4rfTtcbitcbiBzdGF0aWMgaW50XG4gZ3NfcG9ydF9hbGxvYyh1bnNpZ25lZCBwb3J0X251bSwgc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcgKmNvZGluZylcbiB7XG5AQCAtMTIyMiw5ICsxMjU0LDkgQEAgZ3NfcG9ydF9hbGxvYyh1bnNpZ25lZCBwb3J0X251bSwgc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcgKmNvZGluZylcbiBcdH1cbiBcbiBcdHR0eV9wb3J0X2luaXQoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0KTtcbitcdHBvcnQtXHUwMDNlcG9ydC5vcHMgPSBcdTAwMjZnc19wb3J0X29wcztcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnBvcnQtXHUwMDNlcG9ydF9sb2NrKTtcbiBcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2cG9ydC1cdTAwM2VkcmFpbl93YWl0KTtcbi1cdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2cG9ydC1cdTAwM2VjbG9zZV93YWl0KTtcbiBcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnBvcnQtXHUwMDNlcHVzaCwgZ3NfcnhfcHVzaCk7XG4gXG5AQCAtMTI0MSwyNSArMTI3MywxMCBAQCBnc19wb3J0X2FsbG9jKHVuc2lnbmVkIHBvcnRfbnVtLCBzdHJ1Y3QgdXNiX2NkY19saW5lX2NvZGluZyAqY29kaW5nKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBnc19jbG9zZWQoc3RydWN0IGdzX3BvcnQgKnBvcnQpXG4te1xuLVx0aW50IGNvbmQ7XG4tXG4tXHRzcGluX2xvY2tfaXJxKFx1MDAyNnBvcnQtXHUwMDNlcG9ydF9sb2NrKTtcbi1cdGNvbmQgPSBwb3J0LVx1MDAzZXBvcnQuY291bnQgPT0gMDtcbi1cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZwb3J0LVx1MDAzZXBvcnRfbG9jayk7XG4tXG4tXHRyZXR1cm4gY29uZDtcbi19XG4tXG4gc3RhdGljIHZvaWQgZ3NlcmlhbF9mcmVlX3BvcnQoc3RydWN0IGdzX3BvcnQgKnBvcnQpXG4ge1xuLVx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnBvcnQtXHUwMDNlcHVzaCk7XG4tXHQvKiB3YWl0IGZvciBvbGQgb3BlbnMgdG8gZmluaXNoICovXG4tXHR3YWl0X2V2ZW50KHBvcnQtXHUwMDNlY2xvc2Vfd2FpdCwgZ3NfY2xvc2VkKHBvcnQpKTtcbiBcdFdBUk5fT04ocG9ydC1cdTAwM2Vwb3J0X3VzYiAhPSBOVUxMKTtcbi1cdHR0eV9wb3J0X2Rlc3Ryb3koXHUwMDI2cG9ydC1cdTAwM2Vwb3J0KTtcbi1cdGtmcmVlKHBvcnQpO1xuK1x0dHR5X3BvcnRfcHV0KFx1MDAyNnBvcnQtXHUwMDNlcG9ydCk7XG4gfVxuIFxuIHZvaWQgZ3NlcmlhbF9mcmVlX2xpbmUodW5zaWduZWQgY2hhciBwb3J0X251bSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIzOjM2OjUxLjU3NjAyNjYxWiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1Mjk0MTU0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogVVNCIEdhZGdldCBTZXJpYWwgRHJpdmVyIFJlZmFjdG9yaW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggdGFyZ2V0aW5nIHRoZSBgdV9zZXJpYWwuY2AgZmlsZSB3aXRoaW4gdGhlIFVTQiBnYWRnZXQgZHJpdmVyLiBUaGUgcHJpbWFyeSBmb2N1cyBpcyBhIHJlZmFjdG9yaW5nIGVmZm9ydCB0byByZXBsYWNlIGN1c3RvbSBsaWZldGltZSBhbmQgbG9ja2luZyBtYW5hZ2VtZW50IHdpdGggdGhlIHN0YW5kYXJkIGB0dHlfcG9ydGAgcmVmZXJlbmNlIGNvdW50aW5nIG1lY2hhbmlzbS4gVGhpcyBpbW1lZGlhdGVseSBzY3JlYW1zIFwibWVtb3J5IHNhZmV0eSBpbXByb3ZlbWVudHNcIiDigJMgYWRkcmVzc2luZyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIHR5cGljYWwgaW4gdHR5IGRyaXZlcnMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzY2VydGFpbiB3aGV0aGVyIHRoaXMgZXhwb3NlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTi4gV2UncmUgb24gYW1kNjQsIHNvIGxldCdzIGRpZyBpbi4gVGhlIHBhdGNoIGVzc2VudGlhbGx5IGRvZXMgdGhlIGZvbGxvd2luZzogaXQgcmVtb3ZlcyBjdXN0b20gbG9ja2luZywgaW50cm9kdWNlcyBgdHR5X3BvcnRfZ2V0YCBhbmQgYHR0eV9wb3J0X3B1dGAsIGFuZCBwcm9wZXJseSBzZXRzIGB0dHktXHUwMDNlZHJpdmVyX2RhdGFgLiBXZSBzZWUgbmV3IGZ1bmN0aW9ucyBsaWtlIGBnc19pbnN0YWxsYCwgYGdzX2NsZWFudXBgLCBhbmQgYGdzX3BvcnRfZGVzdHJ1Y3RgIHJlbGF0ZWQgdG8gdGhpcyBuZXcgcG9ydCBtYW5hZ2VtZW50LlxuXG5NeSBjaGVja2xpc3Qga2lja3MgaW46IEFyZSB3ZSBzZW5kaW5nIGFueXRoaW5nIGtlcm5lbC1zaWRlIHRvIHVzZXItc3BhY2UgdGhhdCBpc24ndCBwcm9wZXJseSBpbml0aWFsaXplZD8gTm8uIEFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvbmRpdGlvbmFsIGxvZ2ljIHJlbGlhbnQgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gQWdhaW4sIHRoZSBhbnN3ZXIgaXMgbm8uIEknbSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gcG90ZW50aWFsIGFyZWFzIGxpa2UgYGdzX3BvcnRfYWxsb2NgLCBgZ3NfaW5zdGFsbGAsIGFuZCBgZ3NfcG9ydF9kZXN0cnVjdGAuIExvb2tpbmcgYXQgdGhlIGNvZGUgY29uZmlybXMgdGhhdCBgdHR5X3BvcnRfaW5pdGAgYW5kIHN0cnVjdCBhc3NpZ25tZW50cyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6aW5nIGFsbCByZWxldmFudCBzdHJ1Y3R1cmVzLiBJdCBsb29rcyBsaWtlIGl0J3MgYWxsIHByb3Blcmx5IGluaXRpYWxpemVkLiBObyBgY29weV90b191c2VyYCwgbmV0bGluaywgb3IgaW9jdGwgb3V0cHV0IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGlzIHBhdGNoIGlzIGFsbCBhYm91dCBtZW1vcnkgc2FmZXR5IOKAkyBkZWFsaW5nIHdpdGggdXNlLWFmdGVyLWZyZWUsIHJhY2VzLCBhbmQgcmVmZXJlbmNlIGNvdW50IGlzc3Vlcy4gVGhlc2UgYXJlIGJ1Z3MgdGhhdCBLQVNBTiwgTG9ja2RlcCwgYW5kIHRoZSBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycyBhcmUgZGVzaWduZWQgdG8gZGV0ZWN0LiBUaGlzIGlzbid0IGludHJvZHVjaW5nICpuZXcqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Z3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgdGhhdCB3b3VsZCBiZSB1bmlxdWUgdG8gS01TQU4uIFdlJ3JlIGFkaGVyaW5nIHRvIHRoZSBydWxlOiBpZiBLQVNBTiAob3Igc2ltaWxhciB0b29scykgY2F0Y2ggaXQsIEtNU0FOIGlzbid0IG5lZWRlZC5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZmFsc2UuIFRoaXMgaXMgYSByZWZhY3RvcmluZyBmb3IgZ2VuZXJhbCBtZW1vcnkgc2FmZXR5IHRoYXQncyB3ZWxsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdG9vbGluZy4gV2UncmUgZ29vZCB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkyMCwiT3V0cHV0VG9rZW5zIjoyMjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4ODEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMzozNjo1OC4xMDU0NDUxNjFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBvZiBgc3RydWN0IGdzX3BvcnRgIGluIGBkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuY2AgdXNpbmcgc3RhbmRhcmQgYHR0eV9wb3J0YCByZWZjb3VudGluZyAoYHR0eV9wb3J0X2dldGAvYHR0eV9wb3J0X3B1dGAsIGB0dHlfb3BlcmF0aW9ucy5pbnN0YWxsYCwgYHR0eV9vcGVyYXRpb25zLmNsZWFudXBgLCBhbmQgYHR0eV9wb3J0X29wZXJhdGlvbnMuZGVzdHJ1Y3RgKS5cXG5cXG5UaGlzIHJlZmFjdG9yaW5nIGFkZHJlc3NlcyB0dHkgbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMgKHByZXZlbnRpbmcgdXNlLWFmdGVyLWZyZWUgYW5kIHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuIGxpbmUgdGVhcmRvd24gYW5kIHR0eSBvcGVyYXRpb25zKS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGRvIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCBhbmQgZG8gbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgcmVmY291bnRpbmcgaW1iYWxhbmNlcywgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSB0aG9yb3VnaGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIHJlZmNvdW50IHRyYWNraW5nLCBhbmQgTE9DS0RFUCBidWlsZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIG9mIGBzdHJ1Y3QgZ3NfcG9ydGAgaW4gYGRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jYCB1c2luZyBzdGFuZGFyZCBgdHR5X3BvcnRgIHJlZmNvdW50aW5nIChgdHR5X3BvcnRfZ2V0YC9gdHR5X3BvcnRfcHV0YCwgYHR0eV9vcGVyYXRpb25zLmluc3RhbGxgLCBgdHR5X29wZXJhdGlvbnMuY2xlYW51cGAsIGFuZCBgdHR5X3BvcnRfb3BlcmF0aW9ucy5kZXN0cnVjdGApLlxcblxcblRoaXMgcmVmYWN0b3JpbmcgYWRkcmVzc2VzIHR0eSBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGlzc3VlcyAocHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBhbmQgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gbGluZSB0ZWFyZG93biBhbmQgdHR5IG9wZXJhdGlvbnMpLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgZG8gbm90IGNvcHkga2VybmVsIGRhdGEgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2UsIGFuZCBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIHVzZS1hZnRlci1mcmVlLCByZWZjb3VudGluZyBpbWJhbGFuY2VzLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIHRob3JvdWdobHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgcmVmY291bnQgdHJhY2tpbmcsIGFuZCBMT0NLREVQIGJ1aWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowp2pcs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 23:34:15 +0000 UTC FinishedAt: 2026-09-04 23:37:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_GADGET", "USB_CONFIGFS", "USB_CONFIGFS_SERIAL", "USB_CONFIGFS_ACM", "USB_U_SERIAL", "TTY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_GADGET", "USB_CONFIGFS", "USB_CONFIGFS_SERIAL", "USB_CONFIGFS_ACM", "USB_U_SERIAL", "TTY" ], "series_id": "c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "gs_install", "gs_cleanup", "gs_port_destruct", "gs_open", "gs_close", "gserial_free_port", "gserial_free_line", "gserial_alloc_line" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIzOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9HQURHRVQmIzM0OywKICAgICYjMzQ7VVNCX0NPTkZJR0ZTJiMzNDssCiAgICAmIzM0O1VTQl9DT05GSUdGU19TRVJJQUwmIzM0OywKICAgICYjMzQ7VVNCX0NPTkZJR0ZTX0FDTSYjMzQ7LAogICAgJiMzNDtVU0JfVV9TRVJJQUwmIzM0OywKICAgICYjMzQ7VFRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z3NfaW5zdGFsbCYjMzQ7LAogICAgJiMzNDtnc19jbGVhbnVwJiMzNDssCiAgICAmIzM0O2dzX3BvcnRfZGVzdHJ1Y3QmIzM0OywKICAgICYjMzQ7Z3Nfb3BlbiYjMzQ7LAogICAgJiMzNDtnc19jbG9zZSYjMzQ7LAogICAgJiMzNDtnc2VyaWFsX2ZyZWVfcG9ydCYjMzQ7LAogICAgJiMzNDtnc2VyaWFsX2ZyZWVfbGluZSYjMzQ7LAogICAgJiMzNDtnc2VyaWFsX2FsbG9jX2xpbmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgb2YgYHN0cnVjdCBnc19wb3J0YCBpbiBgZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmNgIHVzaW5nIHN0YW5kYXJkIGB0dHlfcG9ydGAgcmVmY291bnRpbmcgKGB0dHlfcG9ydF9nZXRgL2B0dHlfcG9ydF9wdXRgLCBgdHR5X29wZXJhdGlvbnMuaW5zdGFsbGAsIGB0dHlfb3BlcmF0aW9ucy5jbGVhbnVwYCwgYW5kIGB0dHlfcG9ydF9vcGVyYXRpb25zLmRlc3RydWN0YCkuXG5cblRoaXMgcmVmYWN0b3JpbmcgYWRkcmVzc2VzIHR0eSBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGlzc3VlcyAocHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBhbmQgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gbGluZSB0ZWFyZG93biBhbmQgdHR5IG9wZXJhdGlvbnMpLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgZG8gbm90IGNvcHkga2VybmVsIGRhdGEgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2UsIGFuZCBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIHVzZS1hZnRlci1mcmVlLCByZWZjb3VudGluZyBpbWJhbGFuY2VzLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIHRob3JvdWdobHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgcmVmY291bnQgdHJhY2tpbmcsIGFuZCBMT0NLREVQIGJ1aWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVzdHJ1Y3R1cmVzIHRoZSBsaWZlY3ljbGUsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIG9wZW4vY2xvc2Ugc3luY2hyb25pemF0aW9uIG9mIHRoZSBVU0Igc2VyaWFsIGdhZGdldCBkcml2ZXIgKHVfc2VyaWFsLmMpIHVzaW5nIHR0eV9wb3J0X29wZXJhdGlvbnMgKC5kZXN0cnVjdCkgYW5kIHR0eV9wb3J0X2dldC9wdXQgYWNyb3NzIGluc3RhbGwgYW5kIGNsZWFudXAgY2FsbGJhY2tzIGluc3RlYWQgb2YgbWFudWFsIHdhaXRxdWV1ZSB0cmFja2luZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGdhZGdldCBDb25maWdGUywgZHVtbXlfaGNkLCBvciByYXctZ2FkZ2V0IGFsb25nIHdpdGggdHR5R1MqIGRldmljZSBvcGVyYXRpb25zLCBtYWtpbmcgaXQgYW4gaW1wb3J0YW50IHRhcmdldCBmb3IgY29uY3VycmVuY3kgYW5kIGxpZmVjeWNsZSBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIzOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTUwZTRmZDJmMzhkMTVlZWM1NmRmZWY0ZjJhMWM5OWQ4MjFjNTQwZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMjM6MzY6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuY1xuaW5kZXggY2RkMWRmYzY2NmM0Zi4uYzgyYzU4ODhjNmM0OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuY1xuQEAgLTEyNSw3ICYjNDM7MTI1LDYgQEAgc3RydWN0IGdzX3BvcnQge1xuIFx0c3RydWN0IGtmaWZvXHRcdHBvcnRfd3JpdGVfYnVmO1xuIFx0d2FpdF9xdWV1ZV9oZWFkX3RcdGRyYWluX3dhaXQ7XHQvKiB3YWl0IHdoaWxlIHdyaXRlcyBkcmFpbiAqL1xuIFx0Ym9vbCAgICAgICAgICAgICAgICAgICAgd3JpdGVfYnVzeTtcbi1cdHdhaXRfcXVldWVfaGVhZF90XHRjbG9zZV93YWl0O1xuIFx0Ym9vbFx0XHRcdHN1c3BlbmRlZDtcdC8qIHBvcnQgc3VzcGVuZGVkICovXG4gXHRib29sXHRcdFx0c3RhcnRfZGVsYXllZDtcdC8qIGRlbGF5IHN0YXJ0IHdoZW4gc3VzcGVuZGVkICovXG4gXHRzdHJ1Y3QgYXN5bmNfaWNvdW50XHRpY291bnQ7XG5AQCAtNjEwLDE3ICYjNDM7NjA5LDkgQEAgc3RhdGljIGludCBnc2VyaWFsX3dha2V1cF9ob3N0KHN0cnVjdCBnc2VyaWFsICpnc2VyKVxuICAqL1xuIHN0YXRpYyBpbnQgZ3Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4tXHRpbnRcdFx0cG9ydF9udW0gPSB0dHktXHUwMDNlaW5kZXg7XG4tXHRzdHJ1Y3QgZ3NfcG9ydFx0KnBvcnQ7XG4mIzQzO1x0c3RydWN0IGdzX3BvcnRcdCpwb3J0ID0gdHR5LVx1MDAzZWRyaXZlcl9kYXRhO1xuIFx0aW50XHRcdHN0YXR1cyA9IDA7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnBvcnRzW3BvcnRfbnVtXS5sb2NrKTtcbi1cdHBvcnQgPSBwb3J0c1twb3J0X251bV0ucG9ydDtcbi1cdGlmICghcG9ydCkge1xuLVx0XHRzdGF0dXMgPSAtRU5PREVWO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0X2xvY2spO1xuIFxuIFx0LyogYWxsb2NhdGUgY2lyY3VsYXIgYnVmZmVyIG9uIGZpcnN0IG9wZW4gKi9cbkBAIC02MjgsMTcgJiM0Mzs2MTksMTIgQEAgc3RhdGljIGludCBnc19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKVxuIFxuIFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0X2xvY2spO1xuIFxuLVx0XHQvKlxuLVx0XHQgKiBwb3J0bWFzdGVyJiMzOTtzIG11dGV4IHN0aWxsIHByb3RlY3RzIGZyb20gc2ltdWx0YW5lb3VzIG9wZW4oKSxcbi1cdFx0ICogYW5kIGNsb3NlKCkgY2FuJiMzOTt0IGhhcHBlbiwgeWV0LlxuLVx0XHQgKi9cbi1cbiBcdFx0c3RhdHVzID0ga2ZpZm9fYWxsb2MoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0X3dyaXRlX2J1ZixcbiBcdFx0XHRcdCAgICAgV1JJVEVfQlVGX1NJWkUsIEdGUF9LRVJORUwpO1xuIFx0XHRpZiAoc3RhdHVzKSB7XG4gXHRcdFx0cHJfZGVidWcoXCYjMzQ7Z3Nfb3BlbjogdHR5R1MlZCAoJXAsJXApIG5vIGJ1ZmZlclxcblwmIzM0Oyxcbi1cdFx0XHRcdCBwb3J0X251bSwgdHR5LCBmaWxlKTtcbi1cdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdFx0XHQgcG9ydC1cdTAwM2Vwb3J0X251bSwgdHR5LCBmaWxlKTtcbiYjNDM7XHRcdFx0cmV0dXJuIHN0YXR1cztcbiBcdFx0fVxuIFxuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNnBvcnQtXHUwMDNlcG9ydF9sb2NrKTtcbkBAIC02NDgsNyAmIzQzOzYzNCw2IEBAIHN0YXRpYyBpbnQgZ3Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdGlmIChwb3J0LVx1MDAzZXBvcnQuY291bnQmIzQzOyYjNDM7KVxuIFx0XHRnb3RvIGV4aXRfdW5sb2NrX3BvcnQ7XG4gXG4tXHR0dHktXHUwMDNlZHJpdmVyX2RhdGEgPSBwb3J0O1xuIFx0cG9ydC1cdTAwM2Vwb3J0LnR0eSA9IHR0eTtcbiBcbiBcdC8qIGlmIGNvbm5lY3RlZCwgc3RhcnQgdGhlIEkvTyBzdHJlYW0gKi9cbkBAIC02NzIsOCAmIzQzOzY1Nyw2IEBAIHN0YXRpYyBpbnQgZ3Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcbiBleGl0X3VubG9ja19wb3J0OlxuIFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnBvcnQtXHUwMDNlcG9ydF9sb2NrKTtcbi1vdXQ6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cG9ydHNbcG9ydF9udW1dLmxvY2spO1xuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG4gXG5AQCAtNzQ0LDcgJiM0Mzs3MjcsNiBAQCBzdGF0aWMgdm9pZCBnc19jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHByX2RlYnVnKFwmIzM0O2dzX2Nsb3NlOiB0dHlHUyVkICglcCwlcCkgZG9uZSFcXG5cJiMzNDssXG4gXHRcdFx0cG9ydC1cdTAwM2Vwb3J0X251bSwgdHR5LCBmaWxlKTtcbiBcbi1cdHdha2VfdXAoXHUwMDI2cG9ydC1cdTAwM2VjbG9zZV93YWl0KTtcbiBleGl0OlxuIFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnBvcnQtXHUwMDNlcG9ydF9sb2NrKTtcbiB9XG5AQCAtOTA4LDcgJiM0Mzs4OTAsNDIgQEAgc3RhdGljIGludCBnc19nZXRfaWNvdW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgZ3NfaW5zdGFsbChzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHBvcnRfbnVtID0gdHR5LVx1MDAzZWluZGV4O1xuJiM0MztcdHN0cnVjdCBnc19wb3J0ICpwb3J0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cG9ydHNbcG9ydF9udW1dLmxvY2spO1xuJiM0MztcdHBvcnQgPSBwb3J0c1twb3J0X251bV0ucG9ydDtcbiYjNDM7XHRpZiAoIXBvcnQpIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZwb3J0c1twb3J0X251bV0ubG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHR0eV9wb3J0X2dldChcdTAwMjZwb3J0LVx1MDAzZXBvcnQpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwb3J0c1twb3J0X251bV0ubG9jayk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHR0eV9zdGFuZGFyZF9pbnN0YWxsKGRyaXZlciwgdHR5KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHR0dHlfcG9ydF9wdXQoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR0dHktXHUwMDNlZHJpdmVyX2RhdGEgPSBwb3J0O1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBnc19jbGVhbnVwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZ3NfcG9ydCAqcG9ydCA9IHR0eS1cdTAwM2Vkcml2ZXJfZGF0YTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvcnQpXG4mIzQzO1x0XHR0dHlfcG9ydF9wdXQoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9vcGVyYXRpb25zIGdzX3R0eV9vcHMgPSB7XG4mIzQzO1x0Lmluc3RhbGwgPVx0XHRnc19pbnN0YWxsLFxuIFx0Lm9wZW4gPVx0XHRcdGdzX29wZW4sXG4gXHQuY2xvc2UgPVx0XHRnc19jbG9zZSxcbiBcdC53cml0ZSA9XHRcdGdzX3dyaXRlLFxuQEAgLTkxOSw2ICYjNDM7OTM2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBnc190dHlfb3BzID0ge1xuIFx0LnVudGhyb3R0bGUgPVx0XHRnc191bnRocm90dGxlLFxuIFx0LmJyZWFrX2N0bCA9XHRcdGdzX2JyZWFrX2N0bCxcbiBcdC5nZXRfaWNvdW50ID1cdFx0Z3NfZ2V0X2ljb3VudCxcbiYjNDM7XHQuY2xlYW51cCA9XHRcdGdzX2NsZWFudXAsXG4gfTtcbiBcbiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuQEAgLTEyMDMsNiAmIzQzOzEyMjEsMjAgQEAgc3RhdGljIHZvaWQgZ3NfY29uc29sZV9leGl0KHN0cnVjdCBnc19wb3J0ICpwb3J0KVxuIFxuICNlbmRpZlxuIFxuJiM0MztzdGF0aWMgdm9pZCBnc19wb3J0X2Rlc3RydWN0KHN0cnVjdCB0dHlfcG9ydCAqcG9ydClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBnc19wb3J0ICpnc19wb3J0ID0gY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCBnc19wb3J0LCBwb3J0KTtcbiYjNDM7XG4mIzQzO1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmdzX3BvcnQtXHUwMDNlcHVzaCk7XG4mIzQzO1x0a2ZpZm9fZnJlZShcdTAwMjZnc19wb3J0LVx1MDAzZXBvcnRfd3JpdGVfYnVmKTtcbiYjNDM7XHR0dHlfcG9ydF9kZXN0cm95KHBvcnQpO1xuJiM0MztcdGtmcmVlKGdzX3BvcnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9wb3J0X29wZXJhdGlvbnMgZ3NfcG9ydF9vcHMgPSB7XG4mIzQzO1x0LmRlc3RydWN0ID0gZ3NfcG9ydF9kZXN0cnVjdCxcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGludFxuIGdzX3BvcnRfYWxsb2ModW5zaWduZWQgcG9ydF9udW0sIHN0cnVjdCB1c2JfY2RjX2xpbmVfY29kaW5nICpjb2RpbmcpXG4ge1xuQEAgLTEyMjIsOSAmIzQzOzEyNTQsOSBAQCBnc19wb3J0X2FsbG9jKHVuc2lnbmVkIHBvcnRfbnVtLCBzdHJ1Y3QgdXNiX2NkY19saW5lX2NvZGluZyAqY29kaW5nKVxuIFx0fVxuIFxuIFx0dHR5X3BvcnRfaW5pdChcdTAwMjZwb3J0LVx1MDAzZXBvcnQpO1xuJiM0MztcdHBvcnQtXHUwMDNlcG9ydC5vcHMgPSBcdTAwMjZnc19wb3J0X29wcztcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnBvcnQtXHUwMDNlcG9ydF9sb2NrKTtcbiBcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2cG9ydC1cdTAwM2VkcmFpbl93YWl0KTtcbi1cdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2cG9ydC1cdTAwM2VjbG9zZV93YWl0KTtcbiBcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnBvcnQtXHUwMDNlcHVzaCwgZ3NfcnhfcHVzaCk7XG4gXG5AQCAtMTI0MSwyNSAmIzQzOzEyNzMsMTAgQEAgZ3NfcG9ydF9hbGxvYyh1bnNpZ25lZCBwb3J0X251bSwgc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcgKmNvZGluZylcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZ3NfY2xvc2VkKHN0cnVjdCBnc19wb3J0ICpwb3J0KVxuLXtcbi1cdGludCBjb25kO1xuLVxuLVx0c3Bpbl9sb2NrX2lycShcdTAwMjZwb3J0LVx1MDAzZXBvcnRfbG9jayk7XG4tXHRjb25kID0gcG9ydC1cdTAwM2Vwb3J0LmNvdW50ID09IDA7XG4tXHRzcGluX3VubG9ja19pcnEoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0X2xvY2spO1xuLVxuLVx0cmV0dXJuIGNvbmQ7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIGdzZXJpYWxfZnJlZV9wb3J0KHN0cnVjdCBnc19wb3J0ICpwb3J0KVxuIHtcbi1cdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZwb3J0LVx1MDAzZXB1c2gpO1xuLVx0Lyogd2FpdCBmb3Igb2xkIG9wZW5zIHRvIGZpbmlzaCAqL1xuLVx0d2FpdF9ldmVudChwb3J0LVx1MDAzZWNsb3NlX3dhaXQsIGdzX2Nsb3NlZChwb3J0KSk7XG4gXHRXQVJOX09OKHBvcnQtXHUwMDNlcG9ydF91c2IgIT0gTlVMTCk7XG4tXHR0dHlfcG9ydF9kZXN0cm95KFx1MDAyNnBvcnQtXHUwMDNlcG9ydCk7XG4tXHRrZnJlZShwb3J0KTtcbiYjNDM7XHR0dHlfcG9ydF9wdXQoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0KTtcbiB9XG4gXG4gdm9pZCBnc2VyaWFsX2ZyZWVfbGluZSh1bnNpZ25lZCBjaGFyIHBvcnRfbnVtKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIzOjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9HQURHRVQmIzM0OywKICAgICYjMzQ7VVNCX0NPTkZJR0ZTJiMzNDssCiAgICAmIzM0O1VTQl9DT05GSUdGU19TRVJJQUwmIzM0OywKICAgICYjMzQ7VVNCX0NPTkZJR0ZTX0FDTSYjMzQ7LAogICAgJiMzNDtVU0JfVV9TRVJJQUwmIzM0OywKICAgICYjMzQ7VFRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z3NfaW5zdGFsbCYjMzQ7LAogICAgJiMzNDtnc19jbGVhbnVwJiMzNDssCiAgICAmIzM0O2dzX3BvcnRfZGVzdHJ1Y3QmIzM0OywKICAgICYjMzQ7Z3Nfb3BlbiYjMzQ7LAogICAgJiMzNDtnc19jbG9zZSYjMzQ7LAogICAgJiMzNDtnc2VyaWFsX2ZyZWVfcG9ydCYjMzQ7LAogICAgJiMzNDtnc2VyaWFsX2ZyZWVfbGluZSYjMzQ7LAogICAgJiMzNDtnc2VyaWFsX2FsbG9jX2xpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVzdHJ1Y3R1cmVzIHRoZSBsaWZlY3ljbGUsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIG9wZW4vY2xvc2Ugc3luY2hyb25pemF0aW9uIG9mIHRoZSBVU0Igc2VyaWFsIGdhZGdldCBkcml2ZXIgKHVfc2VyaWFsLmMpIHVzaW5nIHR0eV9wb3J0X29wZXJhdGlvbnMgKC5kZXN0cnVjdCkgYW5kIHR0eV9wb3J0X2dldC9wdXQgYWNyb3NzIGluc3RhbGwgYW5kIGNsZWFudXAgY2FsbGJhY2tzIGluc3RlYWQgb2YgbWFudWFsIHdhaXRxdWV1ZSB0cmFja2luZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGdhZGdldCBDb25maWdGUywgZHVtbXlfaGNkLCBvciByYXctZ2FkZ2V0IGFsb25nIHdpdGggdHR5R1MqIGRldmljZSBvcGVyYXRpb25zLCBtYWtpbmcgaXQgYW4gaW1wb3J0YW50IHRhcmdldCBmb3IgY29uY3VycmVuY3kgYW5kIGxpZmVjeWNsZSBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTUwZTRmZDJmMzhkMTVlZWM1NmRmZWY0ZjJhMWM5OWQ4MjFjNTQwZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMjM6MzY6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jCmluZGV4IGNkZDFkZmM2NjZjNGYuLmM4MmM1ODg4YzZjNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jCkBAIC0xMjUsNyAmIzQzOzEyNSw2IEBAIHN0cnVjdCBnc19wb3J0IHsKIAlzdHJ1Y3Qga2ZpZm8JCXBvcnRfd3JpdGVfYnVmOwogCXdhaXRfcXVldWVfaGVhZF90CWRyYWluX3dhaXQ7CS8qIHdhaXQgd2hpbGUgd3JpdGVzIGRyYWluICovCiAJYm9vbCAgICAgICAgICAgICAgICAgICAgd3JpdGVfYnVzeTsKLQl3YWl0X3F1ZXVlX2hlYWRfdAljbG9zZV93YWl0OwogCWJvb2wJCQlzdXNwZW5kZWQ7CS8qIHBvcnQgc3VzcGVuZGVkICovCiAJYm9vbAkJCXN0YXJ0X2RlbGF5ZWQ7CS8qIGRlbGF5IHN0YXJ0IHdoZW4gc3VzcGVuZGVkICovCiAJc3RydWN0IGFzeW5jX2ljb3VudAlpY291bnQ7CkBAIC02MTAsMTcgJiM0Mzs2MDksOSBAQCBzdGF0aWMgaW50IGdzZXJpYWxfd2FrZXVwX2hvc3Qoc3RydWN0IGdzZXJpYWwgKmdzZXIpCiAgKi8KIHN0YXRpYyBpbnQgZ3Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpbnQJCXBvcnRfbnVtID0gdHR5LSZndDtpbmRleDsKLQlzdHJ1Y3QgZ3NfcG9ydAkqcG9ydDsKJiM0MzsJc3RydWN0IGdzX3BvcnQJKnBvcnQgPSB0dHktJmd0O2RyaXZlcl9kYXRhOwogCWludAkJc3RhdHVzID0gMDsKIAotCW11dGV4X2xvY2soJmFtcDtwb3J0c1twb3J0X251bV0ubG9jayk7Ci0JcG9ydCA9IHBvcnRzW3BvcnRfbnVtXS5wb3J0OwotCWlmICghcG9ydCkgewotCQlzdGF0dXMgPSAtRU5PREVWOwotCQlnb3RvIG91dDsKLQl9Ci0KIAlzcGluX2xvY2tfaXJxKCZhbXA7cG9ydC0mZ3Q7cG9ydF9sb2NrKTsKIAogCS8qIGFsbG9jYXRlIGNpcmN1bGFyIGJ1ZmZlciBvbiBmaXJzdCBvcGVuICovCkBAIC02MjgsMTcgJiM0Mzs2MTksMTIgQEAgc3RhdGljIGludCBnc19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQogCiAJCXNwaW5fdW5sb2NrX2lycSgmYW1wO3BvcnQtJmd0O3BvcnRfbG9jayk7CiAKLQkJLyoKLQkJICogcG9ydG1hc3RlciYjMzk7cyBtdXRleCBzdGlsbCBwcm90ZWN0cyBmcm9tIHNpbXVsdGFuZW91cyBvcGVuKCksCi0JCSAqIGFuZCBjbG9zZSgpIGNhbiYjMzk7dCBoYXBwZW4sIHlldC4KLQkJICovCi0KIAkJc3RhdHVzID0ga2ZpZm9fYWxsb2MoJmFtcDtwb3J0LSZndDtwb3J0X3dyaXRlX2J1ZiwKIAkJCQkgICAgIFdSSVRFX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHN0YXR1cykgewogCQkJcHJfZGVidWcoJiMzNDtnc19vcGVuOiB0dHlHUyVkICglcCwlcCkgbm8gYnVmZmVyXG4mIzM0OywKLQkJCQkgcG9ydF9udW0sIHR0eSwgZmlsZSk7Ci0JCQlnb3RvIG91dDsKJiM0MzsJCQkJIHBvcnQtJmd0O3BvcnRfbnVtLCB0dHksIGZpbGUpOwomIzQzOwkJCXJldHVybiBzdGF0dXM7CiAJCX0KIAogCQlzcGluX2xvY2tfaXJxKCZhbXA7cG9ydC0mZ3Q7cG9ydF9sb2NrKTsKQEAgLTY0OCw3ICYjNDM7NjM0LDYgQEAgc3RhdGljIGludCBnc19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQogCWlmIChwb3J0LSZndDtwb3J0LmNvdW50JiM0MzsmIzQzOykKIAkJZ290byBleGl0X3VubG9ja19wb3J0OwogCi0JdHR5LSZndDtkcml2ZXJfZGF0YSA9IHBvcnQ7CiAJcG9ydC0mZ3Q7cG9ydC50dHkgPSB0dHk7CiAKIAkvKiBpZiBjb25uZWN0ZWQsIHN0YXJ0IHRoZSBJL08gc3RyZWFtICovCkBAIC02NzIsOCAmIzQzOzY1Nyw2IEBAIHN0YXRpYyBpbnQgZ3Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAogZXhpdF91bmxvY2tfcG9ydDoKIAlzcGluX3VubG9ja19pcnEoJmFtcDtwb3J0LSZndDtwb3J0X2xvY2spOwotb3V0OgotCW11dGV4X3VubG9jaygmYW1wO3BvcnRzW3BvcnRfbnVtXS5sb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC03NDQsNyAmIzQzOzcyNyw2IEBAIHN0YXRpYyB2b2lkIGdzX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQogCXByX2RlYnVnKCYjMzQ7Z3NfY2xvc2U6IHR0eUdTJWQgKCVwLCVwKSBkb25lIVxuJiMzNDssCiAJCQlwb3J0LSZndDtwb3J0X251bSwgdHR5LCBmaWxlKTsKIAotCXdha2VfdXAoJmFtcDtwb3J0LSZndDtjbG9zZV93YWl0KTsKIGV4aXQ6CiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7cG9ydC0mZ3Q7cG9ydF9sb2NrKTsKIH0KQEAgLTkwOCw3ICYjNDM7ODkwLDQyIEBAIHN0YXRpYyBpbnQgZ3NfZ2V0X2ljb3VudChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBnc19pbnN0YWxsKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiYjNDM7ewomIzQzOwlpbnQgcG9ydF9udW0gPSB0dHktJmd0O2luZGV4OwomIzQzOwlzdHJ1Y3QgZ3NfcG9ydCAqcG9ydDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3BvcnRzW3BvcnRfbnVtXS5sb2NrKTsKJiM0MzsJcG9ydCA9IHBvcnRzW3BvcnRfbnVtXS5wb3J0OwomIzQzOwlpZiAoIXBvcnQpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO3BvcnRzW3BvcnRfbnVtXS5sb2NrKTsKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwl9CiYjNDM7CiYjNDM7CXR0eV9wb3J0X2dldCgmYW1wO3BvcnQtJmd0O3BvcnQpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwb3J0c1twb3J0X251bV0ubG9jayk7CiYjNDM7CiYjNDM7CXJldCA9IHR0eV9zdGFuZGFyZF9pbnN0YWxsKGRyaXZlciwgdHR5KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJdHR5X3BvcnRfcHV0KCZhbXA7cG9ydC0mZ3Q7cG9ydCk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXR0eS0mZ3Q7ZHJpdmVyX2RhdGEgPSBwb3J0OwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZ3NfY2xlYW51cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQomIzQzO3sKJiM0MzsJc3RydWN0IGdzX3BvcnQgKnBvcnQgPSB0dHktJmd0O2RyaXZlcl9kYXRhOwomIzQzOwomIzQzOwlpZiAocG9ydCkKJiM0MzsJCXR0eV9wb3J0X3B1dCgmYW1wO3BvcnQtJmd0O3BvcnQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgZ3NfdHR5X29wcyA9IHsKJiM0MzsJLmluc3RhbGwgPQkJZ3NfaW5zdGFsbCwKIAkub3BlbiA9CQkJZ3Nfb3BlbiwKIAkuY2xvc2UgPQkJZ3NfY2xvc2UsCiAJLndyaXRlID0JCWdzX3dyaXRlLApAQCAtOTE5LDYgJiM0Mzs5MzYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9vcGVyYXRpb25zIGdzX3R0eV9vcHMgPSB7CiAJLnVudGhyb3R0bGUgPQkJZ3NfdW50aHJvdHRsZSwKIAkuYnJlYWtfY3RsID0JCWdzX2JyZWFrX2N0bCwKIAkuZ2V0X2ljb3VudCA9CQlnc19nZXRfaWNvdW50LAomIzQzOwkuY2xlYW51cCA9CQlnc19jbGVhbnVwLAogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTEyMDMsNiAmIzQzOzEyMjEsMjAgQEAgc3RhdGljIHZvaWQgZ3NfY29uc29sZV9leGl0KHN0cnVjdCBnc19wb3J0ICpwb3J0KQogCiAjZW5kaWYKIAomIzQzO3N0YXRpYyB2b2lkIGdzX3BvcnRfZGVzdHJ1Y3Qoc3RydWN0IHR0eV9wb3J0ICpwb3J0KQomIzQzO3sKJiM0MzsJc3RydWN0IGdzX3BvcnQgKmdzX3BvcnQgPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IGdzX3BvcnQsIHBvcnQpOwomIzQzOwomIzQzOwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtnc19wb3J0LSZndDtwdXNoKTsKJiM0MzsJa2ZpZm9fZnJlZSgmYW1wO2dzX3BvcnQtJmd0O3BvcnRfd3JpdGVfYnVmKTsKJiM0MzsJdHR5X3BvcnRfZGVzdHJveShwb3J0KTsKJiM0MzsJa2ZyZWUoZ3NfcG9ydCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X3BvcnRfb3BlcmF0aW9ucyBnc19wb3J0X29wcyA9IHsKJiM0MzsJLmRlc3RydWN0ID0gZ3NfcG9ydF9kZXN0cnVjdCwKJiM0Mzt9OwomIzQzOwogc3RhdGljIGludAogZ3NfcG9ydF9hbGxvYyh1bnNpZ25lZCBwb3J0X251bSwgc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcgKmNvZGluZykKIHsKQEAgLTEyMjIsOSAmIzQzOzEyNTQsOSBAQCBnc19wb3J0X2FsbG9jKHVuc2lnbmVkIHBvcnRfbnVtLCBzdHJ1Y3QgdXNiX2NkY19saW5lX2NvZGluZyAqY29kaW5nKQogCX0KIAogCXR0eV9wb3J0X2luaXQoJmFtcDtwb3J0LSZndDtwb3J0KTsKJiM0MzsJcG9ydC0mZ3Q7cG9ydC5vcHMgPSAmYW1wO2dzX3BvcnRfb3BzOwogCXNwaW5fbG9ja19pbml0KCZhbXA7cG9ydC0mZ3Q7cG9ydF9sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7cG9ydC0mZ3Q7ZHJhaW5fd2FpdCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmYW1wO3BvcnQtJmd0O2Nsb3NlX3dhaXQpOwogCiAJSU5JVF9ERUxBWUVEX1dPUksoJmFtcDtwb3J0LSZndDtwdXNoLCBnc19yeF9wdXNoKTsKIApAQCAtMTI0MSwyNSAmIzQzOzEyNzMsMTAgQEAgZ3NfcG9ydF9hbGxvYyh1bnNpZ25lZCBwb3J0X251bSwgc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcgKmNvZGluZykKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGdzX2Nsb3NlZChzdHJ1Y3QgZ3NfcG9ydCAqcG9ydCkKLXsKLQlpbnQgY29uZDsKLQotCXNwaW5fbG9ja19pcnEoJmFtcDtwb3J0LSZndDtwb3J0X2xvY2spOwotCWNvbmQgPSBwb3J0LSZndDtwb3J0LmNvdW50ID09IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZhbXA7cG9ydC0mZ3Q7cG9ydF9sb2NrKTsKLQotCXJldHVybiBjb25kOwotfQotCiBzdGF0aWMgdm9pZCBnc2VyaWFsX2ZyZWVfcG9ydChzdHJ1Y3QgZ3NfcG9ydCAqcG9ydCkKIHsKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtwb3J0LSZndDtwdXNoKTsKLQkvKiB3YWl0IGZvciBvbGQgb3BlbnMgdG8gZmluaXNoICovCi0Jd2FpdF9ldmVudChwb3J0LSZndDtjbG9zZV93YWl0LCBnc19jbG9zZWQocG9ydCkpOwogCVdBUk5fT04ocG9ydC0mZ3Q7cG9ydF91c2IgIT0gTlVMTCk7Ci0JdHR5X3BvcnRfZGVzdHJveSgmYW1wO3BvcnQtJmd0O3BvcnQpOwotCWtmcmVlKHBvcnQpOwomIzQzOwl0dHlfcG9ydF9wdXQoJmFtcDtwb3J0LSZndDtwb3J0KTsKIH0KIAogdm9pZCBnc2VyaWFsX2ZyZWVfbGluZSh1bnNpZ25lZCBjaGFyIHBvcnRfbnVtKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzA4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVVNCIEdhZGdldCBTZXJpYWwgRHJpdmVyIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCYjMzk7cyB3b3J0aCBhIGZ1enppbmcgcnVuIHdpdGggc3l6a2FsbGVyLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGEgZmFpcmx5IHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIG9mIHRoZSBVU0IgZ2FkZ2V0IHNlcmlhbCBkcml2ZXIgKGB1X3NlcmlhbC5jYCksIHNvIGl04oCZcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2suCgpGaXJzdCwgdGhlIGRpZmYgdGVsbHMgbWUgaXQmIzM5O3MgdG91Y2hpbmcgdGhlIGhlYXJ0IG9mIGB1X3NlcmlhbC5jYC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBzcGVjaWZpYyBjaGFuZ2VzLCBzaGFsbCB3ZT8gT2theSwgaGVyZSYjMzk7cyB3aGF0IGp1bXBzIG91dDogdGhleSYjMzk7cmUgY2xlYW5pbmcgdXAgc29tZSBvbGQgY29kZS4gVGhleSYjMzk7dmUgcmVtb3ZlZCBgd2FpdF9xdWV1ZV9oZWFkX3QgY2xvc2Vfd2FpdGAgZnJvbSBgZ3NfcG9ydGAuIEluIGBnc19vcGVuYCwgdGhlIGNvZGUgaXMgYmVjb21pbmcgbW9yZSBzdHJlYW1saW5lZC4gVGhlcmUmIzM5O3Mgbm8gbG9uZ2VyIHRoZSBtdXRleCBsb2NraW5nIGFuZCB0aGUgYnVmZmVyIGFsbG9jYXRpb24gbG9naWMgaXMgc2ltcGxpZmllZCwgd2hpY2ggY291bGQgaGF2ZSBzdWJ0bGUgaW1wbGljYXRpb25zLiBgZ3NfY2xvc2VgIGFsc28gbG9zdCBpdHMgYHdha2VfdXBgIGZ1bmN0aW9uIGZvciB0aGUgY2xvc2Ugd2FpdC4gVGhlIGludHJvZHVjdGlvbiBvZiBgZ3NfaW5zdGFsbGAgYW5kIGBnc19jbGVhbnVwYCBpbiBgZ3NfdHR5X29wc2Agd2l0aCB0aGUgYXNzb2NpYXRlZCBnZXQvcHV0IGxvZ2ljIGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgdHJhbnNpdGlvbmluZyB0byB1c2luZyBgdHR5X3BvcnRfb3BlcmF0aW9uc2AgZm9yIHByb3BlciBsaWZldGltZSBtYW5hZ2VtZW50IGFuZCByZWZjb3VudGluZy4gYGdzX2luc3RhbGxgIGxvb2tzIHRvIGFjcXVpcmUgdGhlIGxvY2sgYW5kIGNhbGxzIGB0dHlfcG9ydF9nZXRgIGFuZCBgdHR5X3N0YW5kYXJkX2luc3RhbGxgLiBgZ3NfY2xlYW51cGAgY2FsbHMgYHR0eV9wb3J0X3B1dGAuIFRoZSBgZ3NfcG9ydF9kZXN0cnVjdGAgY2FsbGJhY2ssIHByb3ZpZGVkIHZpYSBgdHR5X3BvcnRfb3BlcmF0aW9uc2AsIGxvb2tzIGxpa2UgaXQmIzM5O3MgZ29pbmcgdG8gaGFuZGxlIHRoZSBjbGVhbnVwIHdoZW4gdGhlIHJlZmNvdW50IGhpdHMgemVyby4gYGdzX3BvcnRfYWxsb2NgIHJlZ2lzdGVycyB0aGUgcG9ydCBvcGVyYXRpb25zLiBUaGlzIGxvb2tzIGxpa2UgYSBjbGFzc2ljIHJlZmFjdG9yaW5nIHVzaW5nIGB0dHlfcG9ydF9vcGVyYXRpb25zYCBhbmQgYHR0eV9wb3J0X2dldGAvYHB1dGAgYWNyb3NzIGBpbnN0YWxsYC9gY2xlYW51cGAvYGRlc3RydWN0YCB0byBtYW5hZ2UgdGhlIFVTQiBnYWRnZXQgc2VyaWFsIGRyaXZlciYjMzk7cyBsaWZldGltZSBhbmQgcmVmY291bnRpbmcuIExhc3RseSwgYGdzZXJpYWxfZnJlZV9wb3J0YCByZXBsYWNlcyB0aGUgd2FpdCBvbiBjbG9zZV93YWl0IHdpdGggYHR0eV9wb3J0X3B1dCgmYW1wO3BvcnQtJmd0O3BvcnQpYC4KClRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgcGF0dGVybiBmb3IgcmVmYWN0b3JpbmcgdGhlc2UgdHlwZXMgb2YgZHJpdmVycy4gRnJvbSBteSBleHBlcmllbmNlLCBjaGFuZ2VzIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIHJlZmNvdW50aW5nIGFyZSBhbHdheXMgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gQSBsb3Qgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGluIHZhcmlvdXMgVVNCIGdhZGdldCBzZXJpYWwgZnVuY3Rpb25zIOKAkyBgZ19zZXJpYWxgLCBDREMgQUNNLCBhbmQgZXZlbiB0aGluZ3MgbGlrZSBDb25maWdGUyBnYWRnZXRzLiBUaG9zZSBhbGwgcmVseSBvbiB0aGlzIGNvZGUsIHNvIGV2ZW4gYSBtaW5vciBidWcgY291bGQgaGF2ZSBmYXIgcmVhY2hpbmcgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgdG8gc2VlIGhvdyB0aGUgY29kZSBpcyBlbmFibGVkLiBUaGlzIHBhdGNoIGRlZmluaXRlbHkgd2FycmFudHMgc3l6a2FsbGVyIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dV9zZXJpYWxcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZT0xMz1vYmotJChDT05GSUdfVVNCX0ZfU1NfTEIpXHQmIzQzOz0gdXNiX2Zfc3NfbGIub1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19VU0JfVV9TRVJJQUwpXHQmIzQzOz0gdV9zZXJpYWwub1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlLTE1LXVzYl9mX3NlcmlhbC15XHRcdFx0Oj0gZl9zZXJpYWwub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MjIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYFVTQl9VX1NFUklBTGAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBVU0JfVV9TRVJJQUxgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gVGhpcyBsaWtlbHkgcGVydGFpbnMgdG8gZW5hYmxpbmcgYSBVU0Igc2VyaWFsIGdhZGdldCBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgdGhlIGNvbnRleHRzIGl0JiMzOTtzIG1lYW50IHRvIGJlIHVzZWQgd2l0aGluLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKlBsYWNlbWVudDoqKiBXaGVyZSBkb2VzIHRoaXMgb3B0aW9uIHJlc2lkZSBpbiB0aGUgb3ZlcmFsbCBVU0IgY29uZmlndXJhdGlvbiBoaWVyYXJjaHk/IElzIGl0IHVuZGVyIGEgc3BlY2lmaWMgY29udHJvbGxlciwgZ2FkZ2V0IG1vZGUgc2VjdGlvbiwgb3IgYSBtb3JlIGdlbmVyYWwgVVNCIHNlcmlhbCB1bWJyZWxsYT8KKiAgICoqRGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoaXMgdG8gYmUgdmFsaWQ/IEFyZSB0aGVyZSBhbnkgY29uZmxpY3RpbmcgY2hvaWNlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSBhbnkga2VybmVsIG1vZHVsZXMgaW1wbGljaXRseSBlbmFibGVkIGFzIGEgY29uc2VxdWVuY2Ugb2YgdGhpcyBvcHRpb24/CiogICAqKkRlZmF1bHQgVmFsdWU6KiogSXMgaXQgYHlgLCBgbmAsIG9yIGBtYD8gVW5kZXJzdGFuZGluZyB0aGUgZGVmYXVsdCBnaXZlcyBpbnNpZ2h0IGludG8gdGhlIGludGVuZGVkIHVzZSBjYXNlIGFuZCBwb3RlbnRpYWwgcmVncmVzc2lvbnMgaWYgdGhlIGRlZmF1bHQgaXMgY2hhbmdlZC4gSXMgdGhlcmUgYSBkZWZhdWx0IHNlbGVjdGlvbiBvZiBhIHNwZWNpZmljIGRldmljZT8KKiAgICoqSGVscCBUZXh0OioqIFRoZSBoZWxwIHRleHQgaXMgdXN1YWxseSB0aGUgZmlyc3Qgc291cmNlIG9mIGluZm9ybWF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGludGVuZGVkIHVzZSBjYXNlLiBEb2VzIGl0IHByb3ZpZGUgdXNlZnVsIGNvbnRleHQgb3IgZXhhbXBsZXM/IERvZXMgdGhlIGhlbHAgdGV4dCBkZXNjcmliZSBhbnkgc3BlY2lmaWMgcmVxdWlyZW1lbnRzIGZvciB0aGlzIG1vZHVsZT8KKiAgICoqVHJpZ2dlcnM6KiogV2hhdCBzcGVjaWZpYyBzY2VuYXJpb3Mgb3IgaGFyZHdhcmUgc2V0dXBzIHRyaWdnZXIgdGhlIG5lZWQgdG8gZXhwbGljaXRseSBjb25maWd1cmUgYFVTQl9VX1NFUklBTGA/IEFyZSB0aGVyZSBvdGhlciwgbW9yZSBnZW5lcmljIG9wdGlvbnMgdGhhdCBtaWdodCBpbmRpcmVjdGx5IGltcGFjdCBpdHMgYmVoYXZpb3I/CiogICAqKkltcGxpY2F0aW9uczoqKiBXaGF0IGRvZXMgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgb3B0aW9uICpyZWFsbHkqIG1lYW4gaW4gdGVybXMgb2Ygc3lzdGVtIGJlaGF2aW9yIGFuZCByZXNvdXJjZSB1c2FnZT8gQXJlIHRoZXJlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGBVU0JgIGRldmljZSBpcyBjb25uZWN0ZWQgdG8gYW4gZXh0ZXJuYWwgZGV2aWNlPwoqICAgKipBcmNoaXRlY3R1cmUtU3BlY2lmaWMgQ29uZGl0aW9uczoqKiBBcmUgdGhlcmUgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBgc2VsZWN0YCBzdGF0ZW1lbnRzIG9yIGRlcGVuZGVuY2llcyBvbiBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyAoZS5nLiwgc3BlY2lmaWMgVVNCIGNvbnRyb2xsZXJzKSB0aGF0IEkgbmVlZCB0byBrZWVwIGluIG1pbmQ/CgpFc3NlbnRpYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgYFVTQl9VX1NFUklBTGAmIzM5O3Mgcm9sZSBpbiB0aGUgc3lzdGVtLiBUaGUgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VVNCX1VfU0VSSUFMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTEzMj1jb25maWcgVV9TRVJJQUxfQ09OU09MRVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTMzLVx0Ym9vbCBcJiMzNDtTZXJpYWwgZ2FkZ2V0IGNvbnNvbGUgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MTM0Olx0ZGVwZW5kcyBvbiBVU0JfVV9TRVJJQUxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTEzNS1cdGhlbHBcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz0xNTM9Y29uZmlnIFVTQl9GX1NTX0xCXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTU1LVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MTU2OmNvbmZpZyBVU0JfVV9TRVJJQUxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTE1Ny1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9MjQwPWNvbmZpZyBVU0JfQ09ORklHRlNfU0VSSUFMXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjQzLVx0ZGVwZW5kcyBvbiBUVFlcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjI0NDpcdHNlbGVjdCBVU0JfVV9TRVJJQUxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTI0NS1cdHNlbGVjdCBVU0JfRl9TRVJJQUxcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz0yNDk9Y29uZmlnIFVTQl9DT05GSUdGU19BQ01cbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0yNTItXHRkZXBlbmRzIG9uIFRUWVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MjUzOlx0c2VsZWN0IFVTQl9VX1NFUklBTFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjU0LVx0c2VsZWN0IFVTQl9GX0FDTVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTI1OT1jb25maWcgVVNCX0NPTkZJR0ZTX09CRVhcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0yNjItXHRkZXBlbmRzIG9uIFRUWVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MjYzOlx0c2VsZWN0IFVTQl9VX1NFUklBTFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjY0LVx0c2VsZWN0IFVTQl9GX09CRVhcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGU9MTM9b2JqLSQoQ09ORklHX1VTQl9GX1NTX0xCKVx0JiM0Mzs9IHVzYl9mX3NzX2xiLm9cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfVVNCX1VfU0VSSUFMKVx0JiM0Mzs9IHVfc2VyaWFsLm9cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZS0xNS11c2JfZl9zZXJpYWwteVx0XHRcdDo9IGZfc2VyaWFsLm9cbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc9MjkxPWNvbmZpZyBVU0JfR19TRVJJQUxcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMjkzLVx0ZGVwZW5kcyBvbiBUVFlcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZzoyOTQ6XHRzZWxlY3QgVVNCX1VfU0VSSUFMXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMjk1LVx0c2VsZWN0IFVTQl9GX0FDTVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz0zNTE9Y29uZmlnIFVTQl9DRENfQ09NUE9TSVRFXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTM1NC1cdHNlbGVjdCBVU0JfTElCQ09NUE9TSVRFXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc6MzU1Olx0c2VsZWN0IFVTQl9VX1NFUklBTFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTM1Ni1cdHNlbGVjdCBVU0JfVV9FVEhFUlxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz0zNzA9Y29uZmlnIFVTQl9HX05PS0lBXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTM3NC1cdHNlbGVjdCBVU0JfTElCQ09NUE9TSVRFXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc6Mzc1Olx0c2VsZWN0IFVTQl9VX1NFUklBTFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTM3Ni1cdHNlbGVjdCBVU0JfVV9FVEhFUlxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz0zODk9Y29uZmlnIFVTQl9HX0FDTV9NU1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy0zOTItXHRzZWxlY3QgVVNCX0xJQkNPTVBPU0lURVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnOjM5MzpcdHNlbGVjdCBVU0JfVV9TRVJJQUxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy0zOTQtXHRzZWxlY3QgVVNCX0ZfQUNNXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnPTQwMz1jb25maWcgVVNCX0dfTVVMVElcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctNDA3LVx0c2VsZWN0IFVTQl9MSUJDT01QT1NJVEVcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZzo0MDg6XHRzZWxlY3QgVVNCX1VfU0VSSUFMXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctNDA5LVx0c2VsZWN0IFVTQl9VX0VUSEVSXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnPTQ5MD1jb25maWcgVVNCX0dfREJHUF9TRVJJQUxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy00OTEtXHRkZXBlbmRzIG9uIFVTQl9HX0RCR1BcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZzo0OTI6XHRzZWxlY3QgVVNCX1VfU0VSSUFMXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctNDkzLVx0Ym9vbCBcJiMzNDtzZXJpYWxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDcwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIFN5emthbGxlciYjMzk7cyBVU0IgR2FkZ2V0IFRlc3RpbmcqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgc3l6a2FsbGVyIGFjdHVhbGx5IHBsYXlzIHdpdGggVVNCIGdhZGdldCBkcml2ZXJzLiBJIGtub3cgaXQgaW50ZXJhY3RzIGhlYXZpbHkgd2l0aCB0aGVtLCB1c2luZyB0aGluZ3MgbGlrZSBgZHVtbXlfaGNkYCwgdGhlIGBjb25maWdmc2AgZ2FkZ2V0LCBhbmQgYGdfc2VyaWFsYC4gSXTigJlzIGFsbCB2ZXJ5IGhhbmRzLW9uLCBsZXZlcmFnaW5nIGAvZGV2L2dhZGdldGAsIENvbmZpZ0ZTIFVTQiBnYWRnZXRzLCBhbmQgZXZlbiB0aGUgcmF3LWdhZGdldCBhcHByb2FjaC4gQnV0IEkgbmVlZCB0byBnbyBkZWVwZXIgdGhhbiB0aGF0LgoKSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aGVzZSBgdHR5R1MqYCBjaGFyYWN0ZXIgZGV2aWNlcywgYC9kZXYvdHR5R1MwYCBhbmQgc28gb24uIFRoYXQgYHVfc2VyaWFsLmNgIGNvZGUgaXMga2V5LCBiZWNhdXNlIHVzZXJzcGFjZSBjYW4gZGlyZWN0bHkgb3BlbiwgY2xvc2UsIHJlYWQsIHdyaXRlLCBhbmQgdXNlIGBpb2N0bGAgb24gdGhlbSEgU28sIEkgbmVlZCB0byByZWFsbHkgZGlnIGludG8gYHVfc2VyaWFsLmNgLiBUaGF04oCZcyB3aGVyZSB0aGUgbWFnaWMgb2YgY3JlYXRpbmcgdGhlc2Ugc3BlY2lmaWMgZHJpdmVyL2RldmljZSBpbnRlcmFjdGlvbnMgaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhhdCBkcml2ZXIgaXMgY3JlYXRpbmcgYW5kIGhvdyBzeXprYWxsZXIgaXMgbGV2ZXJhZ2luZyBpdCB0byBmaW5kIGJ1Z3MuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgdGhlIGZ1enppbmcgcHJvYmFibHkgaXMgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R0eV9yZWdpc3Rlcl9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmM9MTU2Mj1zdGF0aWMgaW50IF9faW5pdCB1c2VyaWFsX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYy0xNTk0LVx0LyogZXhwb3J0IHRoZSBkcml2ZXIgLi4uICovXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYzoxNTk1Olx0c3RhdHVzID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihkcml2ZXIpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMtMTU5Ni1cdGlmIChzdGF0dXMpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTk4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHJlYWRpbmcgYW5kIGFuYWx5emluZyB0aGF0IHNwZWNpZmljIGNvZGUgc2VjdGlvbjoKCioqRGl2aW5nIGludG8gdV9zZXJpYWwuYzogUGFyc2luZyB0aGUgRGV0YWlscyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIGluIG9uIGxpbmVzIDE1NjAgdG8gMTYwMCB3aXRoaW4gYGRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jYC4gVGhpcyB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVlcCB3aXRoaW4gdGhlIFVTQiBnYWRnZXQgZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgdGhlIHNlcmlhbCBlbXVsYXRpb24gZHJpdmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiB0aGlzIHNlY3Rpb24gYmVjYXVzZSBpdCYjMzk7cyBwcm9iYWJseSBoYW5kbGluZyBzb21lIGtleSBhc3BlY3Qgb2YgaG93IHRoZSBzZXJpYWwgZGV2aWNlIGlzIHByZXNlbnRlZCB0byB0aGUgaG9zdC4gQmFzZWQgb24gdGhlIGZpbGUgbmFtZSwgaXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIHdpdGggZGF0YSB0cmFuc2ZlciBvciBjb250cm9sIHNpZ25hbHMsIG9yIG1heWJlIGV2ZW4gY29uZmlndXJhdGlvbiBvZiB0aGUgVVNCIHNlcmlhbCBpbnRlcmZhY2UgaXRzZWxmLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gaGFuZGxpbmcgaW5jb21pbmcgZGF0YSBmcm9tIHRoZSBob3N0LCBxdWV1ZWluZyBvdXRnb2luZyBkYXRhLCBvciBtYW5hZ2luZyB0aGUgdmFyaW91cyBzZXJpYWwgY29udHJvbCBzaWduYWxzIChsaWtlIERUUiwgUlRTLCBldGMuKSBpZiB0aGlzIGRyaXZlciBzdXBwb3J0cyB0aGVtLiBNeSBpbml0aWFsIGh5cG90aGVzaXMgaXMgdGhhdCBJIHdpbGwgZmluZCB0aGUgbG9naWMgZGVhbGluZyB3aXRoIGVpdGhlciBhIGhhcmR3YXJlIG9yIHNvZnR3YXJlIEZJRk8gYnVmZmVyLiBJJiMzOTtsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgYW55IGRhdGEgc3RydWN0dXJlcyBkZWZpbmVkIG9yIGFjY2Vzc2VkIHdpdGhpbiB0aGlzIHJlZ2lvbiB0byBzZWUgaG93IHRoZSBkcml2ZXIgbWFpbnRhaW5zIHRoZSBkYXRhIGZsb3csIGFuZCBpZiB0aGVyZSBhcmUgYW55IHJhY2UgY29uZGl0aW9ucyB0byBiZSBhdm9pZGVkLiBJJiMzOTttIGFsc28gZ29pbmcgdG8gY2hlY2sgZm9yIGVycm9yIGhhbmRsaW5nOyBhIHNlcmlhbCBkcml2ZXIgaXMgbm90b3Jpb3VzbHkgcHJvbmUgdG8gZXJyb3JzIGluIGEgcmVhbCB3b3JsZC4gU28sIGl0IHNob3VsZCBiZSB3ZWxsLWd1YXJkZWQgYWdhaW5zdCBiYWQgZGF0YSBvciBtaXNjb25maWd1cmVkIGhhcmR3YXJlLiBJIG5lZWQgdG8gcXVpY2tseSBncmFzcCB0aGUgc3Vycm91bmRpbmcgY29kZSwgdG9vLCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuIFdoYXQgZnVuY3Rpb25zIGNhbGwgaW50byB0aGlzIHNlY3Rpb24/IFdoYXQgYXJlIHRoZSBlbnRyeSBwb2ludHM/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgdGhlc2UgbGluZXMgd2lsbCBlaXRoZXIgYmUgcGFydCBvZiBhIGNyaXRpY2FsIHNlY3Rpb24gZm9yIGRhdGEgdHJhbnNmZXIgb3Igc2V0dGluZyB1cCBhIFVTQiBlbmRwb2ludCBkZWRpY2F0ZWQgZm9yIHNlcmlhbCBkYXRhLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTU2MDpcdEVYUE9SVF9TWU1CT0xfR1BMKGdzZXJpYWxfcmVzdW1lKTtcbjE1NjE6XHRcbjE1NjI6XHRzdGF0aWMgaW50IF9faW5pdCB1c2VyaWFsX2luaXQodm9pZClcbjE1NjM6XHR7XG4xNTY0Olx0XHRzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyO1xuMTU2NTpcdFx0dW5zaWduZWRcdFx0XHRpO1xuMTU2NjpcdFx0aW50XHRcdFx0XHRzdGF0dXM7XG4xNTY3Olx0XG4xNTY4Olx0XHRkcml2ZXIgPSB0dHlfYWxsb2NfZHJpdmVyKE1BWF9VX1NFUklBTF9QT1JUUywgVFRZX0RSSVZFUl9SRUFMX1JBVyB8XG4xNTY5Olx0XHRcdFx0VFRZX0RSSVZFUl9EWU5BTUlDX0RFVik7XG4xNTcwOlx0XHRpZiAoSVNfRVJSKGRyaXZlcikpXG4xNTcxOlx0XHRcdHJldHVybiBQVFJfRVJSKGRyaXZlcik7XG4xNTcyOlx0XG4xNTczOlx0XHRkcml2ZXItXHUwMDNlZHJpdmVyX25hbWUgPSBcJiMzNDtnX3NlcmlhbFwmIzM0OztcbjE1NzQ6XHRcdGRyaXZlci1cdTAwM2VuYW1lID0gXCYjMzQ7dHR5R1NcJiMzNDs7XG4xNTc1Olx0XHQvKiB1c2VzIGR5bmFtaWNhbGx5IGFzc2lnbmVkIGRldl90IHZhbHVlcyAqL1xuMTU3NjpcdFxuMTU3NzpcdFx0ZHJpdmVyLVx1MDAzZXR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMO1xuMTU3ODpcdFx0ZHJpdmVyLVx1MDAzZXN1YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUw7XG4xNTc5Olx0XHRkcml2ZXItXHUwMDNlaW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zO1xuMTU4MDpcdFxuMTU4MTpcdFx0LyogOTYwMC04LU4tMSAuLi4gbWF0Y2hlcyBkZWZhdWx0cyBleHBlY3RlZCBieSBcJiMzNDt1c2JzZXIuc3lzXCYjMzQ7IG9uXG4xNTgyOlx0XHQgKiBNUy1XaW5kb3dzLiAgT3RoZXJ3aXNlLCBtb3N0IG9mIHRoZXNlIGZsYWdzIHNob3VsZG4mIzM5O3QgYWZmZWN0XG4xNTgzOlx0XHQgKiBhbnl0aGluZyB1bmxlc3Mgd2Ugd2VyZSB0byBhY3R1YWxseSBob29rIHVwIHRvIGEgc2VyaWFsIGxpbmUuXG4xNTg0Olx0XHQgKi9cbjE1ODU6XHRcdGRyaXZlci1cdTAwM2Vpbml0X3Rlcm1pb3MuY19jZmxhZyA9XG4xNTg2Olx0XHRcdFx0Qjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMO1xuMTU4NzpcdFx0ZHJpdmVyLVx1MDAzZWluaXRfdGVybWlvcy5jX2lzcGVlZCA9IDk2MDA7XG4xNTg4Olx0XHRkcml2ZXItXHUwMDNlaW5pdF90ZXJtaW9zLmNfb3NwZWVkID0gOTYwMDtcbjE1ODk6XHRcbjE1OTA6XHRcdHR0eV9zZXRfb3BlcmF0aW9ucyhkcml2ZXIsIFx1MDAyNmdzX3R0eV9vcHMpO1xuMTU5MTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX1VfU0VSSUFMX1BPUlRTOyBpJiM0MzsmIzQzOylcbjE1OTI6XHRcdFx0bXV0ZXhfaW5pdChcdTAwMjZwb3J0c1tpXS5sb2NrKTtcbjE1OTM6XHRcbjE1OTQ6XHRcdC8qIGV4cG9ydCB0aGUgZHJpdmVyIC4uLiAqL1xuMTU5NTpcdFx0c3RhdHVzID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihkcml2ZXIpO1xuMTU5NjpcdFx0aWYgKHN0YXR1cykge1xuMTU5NzpcdFx0XHRwcl9lcnIoXCYjMzQ7JXM6IGNhbm5vdCByZWdpc3RlciwgZXJyICVkXFxuXCYjMzQ7LFxuMTU5ODpcdFx0XHRcdFx0X19mdW5jX18sIHN0YXR1cyk7XG4xNTk5Olx0XHRcdGdvdG8gZmFpbDtcbjE2MDA6XHRcdH1cbjE2MDE6XHRcbjE2MDI6XHRcdGdzX3R0eV9kcml2ZXIgPSBkcml2ZXI7XG4xNjAzOlx0XG4xNjA0Olx0XHRwcl9kZWJ1ZyhcJiMzNDslczogcmVnaXN0ZXJlZCAlZCB0dHlHUyogZGV2aWNlJXNcXG5cJiMzNDssIF9fZnVuY19fLFxuMTYwNTpcdFx0XHRcdE1BWF9VX1NFUklBTF9QT1JUUyxcbjE2MDY6XHRcdFx0XHRzdHJfcGx1cmFsKE1BWF9VX1NFUklBTF9QT1JUUykpO1xuMTYwNzpcdFxuMTYwODpcdFx0cmV0dXJuIHN0YXR1cztcbjE2MDk6XHRmYWlsOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjI3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGN1cnJlbnQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipQb3J0IEFsbG9jYXRpb24sIERlYWxsb2NhdGlvbiwgYW5kIFVTQiBTZXJpYWwgSW50ZXJhY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gaG93IHBvcnRzIGFyZSBtYW5hZ2VkLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgVVNCIHNlcmlhbCBkZXZpY2VzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gc3RyYXRlZ2llcy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIG1lY2hhbmlzbXMgaW52b2x2ZWQg4oCTIGFyZSB3ZSB0YWxraW5nIGFib3V0IGR5bmFtaWMgYWxsb2NhdGlvbiBmcm9tIGEgcG9vbCwgc29tZSBraW5kIG9mIHBlcnNpc3RlbnQgbWFwcGluZywgb3IgYSBjb21iaW5hdGlvbj8gQW5kIGFyZSB0aGVyZSBhbnkgcmFjZSBjb25kaXRpb25zIEkgbmVlZCB0byBiZSBwYXJ0aWN1bGFybHkgd2FyeSBvZiwgZXNwZWNpYWxseSB3aGVuIGRldmljZXMgYXJlIGhvdC1wbHVnZ2VkIGFuZCB1bnBsdWdnZWQ/CgpJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBVU0Igc2VyaWFsIGFzcGVjdCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGNhbiBnZXQgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBtYXAgb3V0IGhvdyB0aGUgVVNCIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgcG9ydCBhbGxvY2F0aW9uIHN5c3RlbS4gRG9lcyBpdCByZXF1ZXN0IGEgcG9ydCBkaXJlY3RseSwgb3IgZG9lcyBpdCB0cmlnZ2VyIHNvbWUgaW50ZXJtZWRpYXRlIHNlcnZpY2U/IEhvdyBkb2VzIHRoZSBzeXN0ZW0gaGFuZGxlIGNvbnRlbnRpb24gaWYgbXVsdGlwbGUgVVNCIHNlcmlhbCBkZXZpY2VzIGFyZSBjb25uZWN0ZWQgc2ltdWx0YW5lb3VzbHk/IFdoYXQgaGFwcGVucyBkdXJpbmcgYSBkZXZpY2UgZGlzY29ubmVjdCDigJMgaG93IGNsZWFubHkgaXMgdGhlIHBvcnQgcmVsZWFzZWQsIGFuZCB3aGF0IHNpZ25hbHMgcHJvcGFnYXRlIHVwIHRoZSBzdGFjaz8gSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIGhvdyBlcnJvciBoYW5kbGluZyBpcyBpbnRlZ3JhdGVkIGhlcmUsIHdoYXQgYXJlIHRoZSBhcHByb3ByaWF0ZSByZXNwb25zZXMgZm9yIGludmFsaWQgcmVxdWVzdHMgb3IgcmVzb3VyY2UgbGltaXRhdGlvbnM/IEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBVU0Igc2VyaWFsIGRyaXZlciwgdGhlIHNlcmlhbCBwb3J0IGFic3RyYWN0aW9uLCBhbmQgdGhlIHVuZGVybHlpbmcgcG9ydCBhbGxvY2F0aW9uIGxheWVyLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHN5c3RlbXMgd29yayB0b2dldGhlciwgdG8gZGV0ZXJtaW5lIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgb3B0aW1pemVkLCBhbmQgdG8gZmluZCBvdXQgdGhlIHdlYWsgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnc2VyaWFsX2FsbG9jX2xpbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfYWNtLmM9ODgwPXN0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uX2luc3RhbmNlICphY21fYWxsb2NfaW5zdGFuY2Uodm9pZClcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9hY20uYy04OTAtXHRtdXRleF9pbml0KFx1MDAyNm9wdHMtXHUwMDNlbG9jayk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9hY20uYzo4OTE6XHRyZXQgPSBnc2VyaWFsX2FsbG9jX2xpbmUoXHUwMDI2b3B0cy1cdTAwM2Vwb3J0X251bSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9hY20uYy04OTItXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2Zfb2JleC5jPTQyND1zdGF0aWMgc3RydWN0IHVzYl9mdW5jdGlvbl9pbnN0YW5jZSAqb2JleF9hbGxvY19pbnN0KHZvaWQpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2Zfb2JleC5jLTQzMy1cdG9wdHMtXHUwMDNlZnVuY19pbnN0LmZyZWVfZnVuY19pbnN0ID0gb2JleF9mcmVlX2luc3Q7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9vYmV4LmM6NDM0Olx0cmV0ID0gZ3NlcmlhbF9hbGxvY19saW5lX25vX2NvbnNvbGUoXHUwMDI2b3B0cy1cdTAwM2Vwb3J0X251bSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9vYmV4LmMtNDM1LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3NlcmlhbC5jPTMxNT1zdGF0aWMgc3RydWN0IHVzYl9mdW5jdGlvbl9pbnN0YW5jZSAqZ3Nlcl9hbGxvY19pbnN0KHZvaWQpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2Zfc2VyaWFsLmMtMzI0LVx0b3B0cy1cdTAwM2VmdW5jX2luc3QuZnJlZV9mdW5jX2luc3QgPSBnc2VyX2ZyZWVfaW5zdDtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3NlcmlhbC5jOjMyNTpcdHJldCA9IGdzZXJpYWxfYWxsb2NfbGluZShcdTAwMjZvcHRzLVx1MDAzZXBvcnRfbnVtKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3NlcmlhbC5jLTMyNi1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYy00Mi0gKiBBZnRlciB0aGlzIG1vZHVsZSBoYXMgYmVlbiBsb2FkZWQsIHRoZSBpbmRpdmlkdWFsIFRUWSBwb3J0IGNhbiBiZSByZXF1ZXN0ZWRcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jOjQzOiAqIChnc2VyaWFsX2FsbG9jX2xpbmUoKSkgYW5kIGl0IHdpbGwgc3RheSBhdmFpbGFibGUgdW50aWwgdGhleSBhcmUgcmVtb3ZlZFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMtNDQtICogKGdzZXJpYWxfZnJlZV9saW5lKCkpLiBFYWNoIG9uZSBtYXkgYmUgY29ubmVjdGVkIHRvIGEgVVNCIGZ1bmN0aW9uXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmM9MTI5OT1FWFBPUlRfU1lNQk9MX0dQTChnc2VyaWFsX2ZyZWVfbGluZSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYy0xMzAwLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmM6MTMwMTppbnQgZ3NlcmlhbF9hbGxvY19saW5lX25vX2NvbnNvbGUodW5zaWduZWQgY2hhciAqbGluZV9udW0pXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYy0xMzAyLXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYy0xMzQ0LX1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jOjEzNDU6RVhQT1JUX1NZTUJPTF9HUEwoZ3NlcmlhbF9hbGxvY19saW5lX25vX2NvbnNvbGUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMtMTM0Ni1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jOjEzNDc6aW50IGdzZXJpYWxfYWxsb2NfbGluZSh1bnNpZ25lZCBjaGFyICpsaW5lX251bSlcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jLTEzNDgte1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmM6MTM0OTpcdGludCByZXQgPSBnc2VyaWFsX2FsbG9jX2xpbmVfbm9fY29uc29sZShsaW5lX251bSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYy0xMzUwLVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jLTEzNTUtfVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmM6MTM1NjpFWFBPUlRfU1lNQk9MX0dQTChnc2VyaWFsX2FsbG9jX2xpbmUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMtMTM1Ny1cbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYy0xMzczLSAqIGVuZHBvaW50IGRlc2NyaXB0b3JzLCBhbmQgYWxzbyBoYXZlIGFsbG9jYXRlIEBwb3J0X251bSBieSBjYWxsaW5nXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYzoxMzc0OiAqIEBnc2VyaWFsX2FsbG9jX2xpbmUoKS5cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jLTEzNzUtICpcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuaD01OD12b2lkIGdzX2ZyZWVfcmVxKHN0cnVjdCB1c2JfZXAgKiwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpO1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5oLTYwLS8qIG1hbmFnZW1lbnQgb2YgaW5kaXZpZHVhbCBUVFkgcG9ydHMgKi9cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5oOjYxOmludCBnc2VyaWFsX2FsbG9jX2xpbmVfbm9fY29uc29sZSh1bnNpZ25lZCBjaGFyICpwb3J0X2xpbmUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmg6NjI6aW50IGdzZXJpYWxfYWxsb2NfbGluZSh1bnNpZ25lZCBjaGFyICpwb3J0X2xpbmUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmgtNjMtdm9pZCBnc2VyaWFsX2ZyZWVfbGluZSh1bnNpZ25lZCBjaGFyIHBvcnRfbGluZSk7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9kYmdwLmM9Mjc3PXN0YXRpYyBpbnQgZGJncF9iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9kYmdwLmMtMzA3LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9kYmdwLmM6MzA4Olx0aWYgKGdzZXJpYWxfYWxsb2NfbGluZShcdTAwMjZ0dHlfbGluZSkpIHtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvZGJncC5jLTMwOS1cdFx0c3RwID0gNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MDEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA5ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb25maWdGUyBHYWRnZXQgU2VyaWFsIERyaXZlciBSZWZhY3RvcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIGNvbmNlcm5pbmcgdGhlIENvbmZpZ0ZTIGdhZGdldCYjMzk7cyBzZXJpYWwgZnVuY3Rpb25hbGl0eSAoYWNtLnVzYjAsIHNlcmlhbC51c2IwLCBldGMuKS4gRmlyc3QsIEkmIzM5O20gdmVyaWZ5aW5nIHRoZSBzdGFuZGFyZCB3b3JrZmxvdzogdXNlcnNwYWNlIGNyZWF0ZXMgdGhlIHNlcmlhbCBmdW5jdGlvbiB1c2luZyBgbWtkaXJgIGluIGAvc3lzL2tlcm5lbC9jb25maWcvdXNiX2dhZGdldC9nMS9mdW5jdGlvbnMvYWNtLnVzYjBgIHdoaWNoIHRyaWdnZXJzIHRoZSBgYWNtX2FsbG9jX2luc3RhbmNlKClgIC0mZ3Q7IGBnc2VyaWFsX2FsbG9jX2xpbmUoKWAgcGF0aCwgbGVhZGluZyB0byB0aGUgY3JlYXRpb24gb2YgYC9kZXYvdHR5R1MwYC4gVGhlbiwgc3RhbmRhcmQgYG9wZW5gLCBgcmVhZGAsIGB3cml0ZWAsIGBpb2N0bGAgb3BlcmF0aW9ucyBvbiBgL2Rldi90dHlHUzBgLCBhbmQgZmluYWxseSwgYSByZW1vdmFsIG9yIHVuYmluZGluZy4gVGhpcyB3aG9sZSBzZXR1cCBpcyBwZXJmZWN0bHkgcmVhY2hhYmxlIHVzaW5nIHN0YW5kYXJkIHN5emthbGxlciBzeXNjYWxscywgYW5kIGNhbiB1dGlsaXplIHZpcnR1YWwgaGFyZHdhcmUgbGlrZSBgZHVtbXlfaGNkYCBvciBgcmF3X2dhZGdldGAuCgpOb3csIHRoZSBjb3JlIG9mIHRoZSBpbnZlc3RpZ2F0aW9uOiB0aGUgcGF0Y2gmIzM5O3Mgc3BlY2lmaWMgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyByZWZhY3RvcmluZyB0aGUgYHN0cnVjdCBnc19wb3J0YCBsaWZlY3ljbGUsIHRoZSByZWZlcmVuY2UgY291bnRpbmcsIGFuZCB0aGUgbG9ja2luZyBzdHJhdGVneSBiZXR3ZWVuIHRoZSBUVFkgbGF5ZXIgYW5kIHRoZSBVU0IgZ2FkZ2V0IGxheWVyLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGVzZSBtb2RpZmljYXRpb25zOgoKMS4gIGBnc19vcGVuYDogVGhlIGNvZGUgbm93IGRpcmVjdGx5IHVzZXMgYHR0eS0mZ3Q7ZHJpdmVyX2RhdGFgIChzZXQgaW4gYGdzX2luc3RhbGxgKSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gaW5kZXhpbmcgaW50byBgcG9ydHNbXWAgYW5kIGFjcXVpcmluZyBhIGxvY2suCjIuICBgZ3NfaW5zdGFsbGA6IFRoaXMgbm93IGFjcXVpcmVzIGBwb3J0c1twb3J0X251bV0ubG9ja2AsIHJldHJpZXZlcyB0aGUgcG9ydCwgaW5jcmVhc2VzIHRoZSByZWZlcmVuY2UgY291bnQgdXNpbmcgYHR0eV9wb3J0X2dldGAsIHRoZW4gcmVsZWFzZXMgdGhlIGxvY2ssIGNhbGxzIGB0dHlfc3RhbmRhcmRfaW5zdGFsbGAsIGFuZCBzZXRzIGB0dHktJmd0O2RyaXZlcl9kYXRhYCB0byB0aGUgcG9ydC4KMy4gIGBnc19jbGVhbnVwYDogSXQgY2FsbHMgYHR0eV9wb3J0X3B1dGAgdG8gZGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQuCjQuICBgZ3NfcG9ydF9kZXN0cnVjdGA6IFRoaXMgaXMgdGhlIGB0dHlfcG9ydF9vcGVyYXRpb25zYCYjMzk7cyBkZXN0cnVjdCBjYWxsYmFjay4gVGhpcyBmdW5jdGlvbiBjYWxscyBgY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jYCwgYGtmaWZvX2ZyZWVgLCBgdHR5X3BvcnRfZGVzdHJveWAsIGFuZCBmaW5hbGx5IGBrZnJlZWAuCjUuICBgZ3NlcmlhbF9mcmVlX3BvcnRgOiBUaGUgcGF0Y2ggcmVwbGFjZXMgdGhlIG9sZCBgd2FpdF9ldmVudGAgd2l0aCBgdHR5X3BvcnRfcHV0YCBhbmQgaW5jbHVkZXMgYSBgV0FSTl9PTmAgY2hlY2suCgpNeSBTcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIGNoYW5nZXMuIEkgaGF2ZSB0byBhc3Nlc3Mgd2hldGhlciB0aGVzZSBjaGFuZ2VzIGFyZSBpbnRyb2R1Y2luZyBhbnkgbmV3IGJ1Z3MsIHJhY2VzLCBvciBsb2NraW5nIGlzc3Vlcy4gQW55IG1vZGlmaWNhdGlvbiBpbiB0aGUgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgb3Igc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIFRUWSBhbmQgVVNCIGRyaXZlciBzdWJzeXN0ZW1zIGlzIGEgY2xhc3NpYyByZWNpcGUgZm9yIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWVzLCBvciBkZWFkbG9ja3MuCgpBIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBjb2RlIHBhdGggaXMgZWFzaWx5IHJlYWNoYWJsZSBpbiBhIFFFTVUvc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudC4gVGhlIGdvb2QgbmV3cyBpcyB0aGF0IHRoZSBVU0IgZ2FkZ2V0IHN1YnN5c3RlbSwgd2l0aCBjb25maWdmcyBhbmQgYGR1bW15X2hjZGAvYHJhd19nYWRnZXRgLCBpcyBzdGFuZGFyZCBpbiBzeXprYWxsZXIsIHNvIHllcywgaXQgaXMuCgpOZXh0LCBJIG5lZWQgdG8ga25vdyB3aGljaCBrZXJuZWwgY29uZmlncyBlbmFibGUgdGhlIGNvZGUgcGF0aDogSSBuZWVkIHRvIGVuc3VyZSB0aGUgZm9sbG93aW5nIGFyZSBlbmFibGVkOiBgVVNCX0NPTkZJR0ZTX1NFUklBTGAgb3IgYFVTQl9DT05GSUdGU19BQ01gIG9yIGBVU0JfQ09ORklHRlNgIG9yIGBVU0JfR19TRVJJQUxgLCBgVVNCX1VfU0VSSUFMYCwgYFVTQl9HQURHRVRgLCBhbmQgYFRUWWAuCgpOb3csIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGtleSBzeW1ib2xzIHRoYXQgYXJlIGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoaXMgcGF0Y2guIEkmIzM5O2xsIGNvbmNlbnRyYXRlIG9uOiBgZ3NfaW5zdGFsbGAsIGBnc19vcGVuYCwgYGdzX2Nsb3NlYCwgYGdzX2NsZWFudXBgLCBgZ3NfcG9ydF9kZXN0cnVjdGAsIGBnc2VyaWFsX2ZyZWVfcG9ydGAsIGBnc2VyaWFsX2FsbG9jX2xpbmVgLCBhbmQgYGdzZXJpYWxfZnJlZV9saW5lYC4KCkxldCYjMzk7cyBjaGVjayB0aGUgdmlzaWJpbGl0eSBvZiB0aGVzZSBzeW1ib2xzOyB3aGV0aGVyIHRoZXkgYXJlIGdsb2JhbCBhbmQgbm90IHN0YXRpYyBpbmxpbmUgaW4gaGVhZGVycy4gRnJvbSB3aGF0IEkgc2VlLCAgYGdzX2luc3RhbGxgLCBgZ3Nfb3BlbmAsIGBnc19jbG9zZWAsIGBnc19jbGVhbnVwYCwgYGdzX3BvcnRfZGVzdHJ1Y3RgLCBhbmQgYGdzZXJpYWxfZnJlZV9wb3J0YCBhcmUgc3RhdGljIGluIGB1X3NlcmlhbC5jYCwgd2hpbGUgYGdzZXJpYWxfZnJlZV9saW5lYCBhbmQgYGdzZXJpYWxfYWxsb2NfbGluZWAgYXJlIGdsb2JhbC4KCkZpbmFsbHksIGxldCBtZSByZS12ZXJpZnkgdGhlIGNvbmZpZ3MgaW4gS2NvbmZpZzogYFVTQl9HQURHRVRgLCBgVVNCX0NPTkZJR0ZTYCwgYFVTQl9DT05GSUdGU19TRVJJQUxgLCBgVVNCX0NPTkZJR0ZTX0FDTWAsIGFuZCBgVVNCX1VfU0VSSUFMYC4gQW5kIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBgVVNCX0NPTkZJR0ZTX1NFUklBTGAgaW4gYGRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnYCB0byBtYWtlIHN1cmUgaXQgZXhpc3RzLgoKV2l0aCB0aGlzIHN0cnVjdHVyZWQgaW52ZXN0aWdhdGlvbiwgSSBjYW4gc3RhcnQgZm9ybWluZyBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHBhdGNoJiMzOTtzIGltcGxpY2F0aW9ucyBhbmQgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfQ09ORklHRlNfU0VSSUFMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTIyOD1jb25maWcgVVNCX0NPTkZJR0ZTXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjM5LVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MjQwOmNvbmZpZyBVU0JfQ09ORklHRlNfU0VSSUFMXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0yNDEtXHRib29sIFwmIzM0O0dlbmVyaWMgc2VyaWFsIGJ1bGsgaW4vb3V0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTkxCgkJCQkJCQlvdXRwdXQ6IDIzNAoJCQkJCQkJdGhvdWdodHM6IDIxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVVNCIENvbmZpZ0ZTIGFuZCBXb3J0aEZ1enppbmcgSW1wYWN0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgVVNCX0NPTkZJR0ZTYC4gTG9va2luZyBhdCBgZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWdgLCBpdCYjMzk7cyBjbGVhciB0aGF0IGBVU0JfQ09ORklHRlNgIHJlcXVpcmVzIGBVU0JfR0FER0VUYC4gVGhhdCBtYWtlcyBzZW5zZTsgQ29uZmlnRlMgaXMgZXNzZW50aWFsbHkgYSB3YXkgdG8gY29uZmlndXJlIHRoZSBnYWRnZXQuCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBzZXJpYWwgZ2FkZ2V0IGZ1bmN0aW9uYWxpdHksIGBVU0JfQ09ORklHRlNfU0VSSUFMYCBkZXBlbmRzIG9uIGJvdGggYFVTQl9DT05GSUdGU2AgYW5kIGBUVFlgLCB3aGljaCBpcyBleHBlY3RlZCBmb3Igc2VyaWFsIGNvbW11bmljYXRpb24uIEl0ICpzZWxlY3RzKiBgVVNCX1VfU0VSSUFMYCBhbmQgYFVTQl9GX1NFUklBTGAsIHdoaWNoIGFyZSB0aGUgdW5kZXJseWluZyBVU0Igc2VyaWFsIGRyaXZlciBhbmQgZnVuY3Rpb24uIGBVU0JfQ09ORklHRlNfQUNNYCBoYXMgc2ltaWxhciBkZXBlbmRlbmNpZXMgb24gYFVTQl9DT05GSUdGU2AgYW5kIGBUVFlgLCBidXQgaXQgc2VsZWN0cyBgVVNCX1VfU0VSSUFMYCBhbmQgYFVTQl9GX0FDTWAsIGluZGljYXRpbmcgaXQgaGFuZGxlcyBBYnN0cmFjdCBDb250cm9sIE1vZGVsIChBQ00pIGRldmljZXMuCgpOZXh0LCBJIG5lZWQgdG8gcmV2aXNpdCB0aGUgYFdvcnRoRnV6emluZ2AgYXNwZWN0LiBJdCYjMzk7cyBjb25maXJtZWQgYXMgYHRydWVgLCBhbmQgSSBrbm93IHRoYXQgdGhpcyBwYXRjaCB0b3VjaGVzIFVTQiBzZXJpYWwgZ2FkZ2V0IGNvZGUg4oCTIHNwZWNpZmljYWxseSBgZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIGNvbnNpZGVyaW5nIGl0IGltcGFjdHMgcmVmZXJlbmNlIGNvdW50aW5nLCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgYW5kIHN5bmNocm9uaXphdGlvbi4gVGhlIGZhY3QgdGhhdCB0aGlzIGRyaXZlciBpcyBleHBvc2VkIHRocm91Z2ggQ29uZmlnRlMgKGFuZCByZWxhdGVkIHN1YnN5c3RlbXMgbGlrZSBkdW1teV9oY2QsIHJhdy1nYWRnZXQsIGFuZCB0dHlHUyogbm9kZXMpIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBtYWtlcyB0aGlzIGV2ZW4gbW9yZSBjcml0aWNhbCBmb3Igc2VjdXJpdHkuCgpHaXZlbiB0aGVzZSBmaW5kaW5ncywgSSBjYW4gbm93IGZvcm11bGF0ZSBhIGNvbmNpc2UgcmVzcG9uc2UgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgcmVwb3J0IGFjY3VyYXRlbHkgcmVmbGVjdHMgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgYFdvcnRoRnV6emluZ2Agc2V0dGluZyBhbmQgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB0aGlzIG1vZGlmaWVkIGNvZGUsIGVzcGVjaWFsbHkgY29uY2VybmluZyByZWZlcmVuY2UgY291bnRpbmcgYW5kIHN5bmNocm9uaXphdGlvbiB3aXRoaW4gdGhlIFVTQiBzZXJpYWwgZ2FkZ2V0IGRyaXZlciwgYWNjZXNzaWJsZSB2aWEgQ29uZmlnRlMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQl9DT05GSUdGUyYjMzQ7LAogICAgJiMzNDtVU0JfQ09ORklHRlNfU0VSSUFMJiMzNDssCiAgICAmIzM0O1VTQl9DT05GSUdGU19BQ00mIzM0OywKICAgICYjMzQ7VVNCX1VfU0VSSUFMJiMzNDssCiAgICAmIzM0O1RUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dzX2luc3RhbGwmIzM0OywKICAgICYjMzQ7Z3NfY2xlYW51cCYjMzQ7LAogICAgJiMzNDtnc19wb3J0X2Rlc3RydWN0JiMzNDssCiAgICAmIzM0O2dzX29wZW4mIzM0OywKICAgICYjMzQ7Z3NfY2xvc2UmIzM0OywKICAgICYjMzQ7Z3NlcmlhbF9mcmVlX3BvcnQmIzM0OywKICAgICYjMzQ7Z3NlcmlhbF9mcmVlX2xpbmUmIzM0OywKICAgICYjMzQ7Z3NlcmlhbF9hbGxvY19saW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc3RydWN0dXJlcyB0aGUgbGlmZWN5Y2xlLCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBvcGVuL2Nsb3NlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgVVNCIHNlcmlhbCBnYWRnZXQgZHJpdmVyICh1X3NlcmlhbC5jKSB1c2luZyB0dHlfcG9ydF9vcGVyYXRpb25zICguZGVzdHJ1Y3QpIGFuZCB0dHlfcG9ydF9nZXQvcHV0IGFjcm9zcyBpbnN0YWxsIGFuZCBjbGVhbnVwIGNhbGxiYWNrcyBpbnN0ZWFkIG9mIG1hbnVhbCB3YWl0cXVldWUgdHJhY2tpbmcuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIFVTQiBnYWRnZXQgQ29uZmlnRlMsIGR1bW15X2hjZCwgb3IgcmF3LWdhZGdldCBhbG9uZyB3aXRoIHR0eUdTKiBkZXZpY2Ugb3BlcmF0aW9ucywgbWFraW5nIGl0IGFuIGltcG9ydGFudCB0YXJnZXQgZm9yIGNvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX0dBREdFVCYjMzQ7LAogICAgJiMzNDtVU0JfQ09ORklHRlMmIzM0OywKICAgICYjMzQ7VVNCX0NPTkZJR0ZTX1NFUklBTCYjMzQ7LAogICAgJiMzNDtVU0JfQ09ORklHRlNfQUNNJiMzNDssCiAgICAmIzM0O1VTQl9VX1NFUklBTCYjMzQ7LAogICAgJiMzNDtUVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnc19pbnN0YWxsJiMzNDssCiAgICAmIzM0O2dzX2NsZWFudXAmIzM0OywKICAgICYjMzQ7Z3NfcG9ydF9kZXN0cnVjdCYjMzQ7LAogICAgJiMzNDtnc19vcGVuJiMzNDssCiAgICAmIzM0O2dzX2Nsb3NlJiMzNDssCiAgICAmIzM0O2dzZXJpYWxfZnJlZV9wb3J0JiMzNDssCiAgICAmIzM0O2dzZXJpYWxfZnJlZV9saW5lJiMzNDssCiAgICAmIzM0O2dzZXJpYWxfYWxsb2NfbGluZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXN0cnVjdHVyZXMgdGhlIGxpZmVjeWNsZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgb3Blbi9jbG9zZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFVTQiBzZXJpYWwgZ2FkZ2V0IGRyaXZlciAodV9zZXJpYWwuYykgdXNpbmcgdHR5X3BvcnRfb3BlcmF0aW9ucyAoLmRlc3RydWN0KSBhbmQgdHR5X3BvcnRfZ2V0L3B1dCBhY3Jvc3MgaW5zdGFsbCBhbmQgY2xlYW51cCBjYWxsYmFja3MgaW5zdGVhZCBvZiBtYW51YWwgd2FpdHF1ZXVlIHRyYWNraW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBVU0IgZ2FkZ2V0IENvbmZpZ0ZTLCBkdW1teV9oY2QsIG9yIHJhdy1nYWRnZXQgYWxvbmcgd2l0aCB0dHlHUyogZGV2aWNlIG9wZXJhdGlvbnMsIG1ha2luZyBpdCBhbiBpbXBvcnRhbnQgdGFyZ2V0IGZvciBjb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIzOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjM6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgb2YgYHN0cnVjdCBnc19wb3J0YCBpbiBgZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmNgIHVzaW5nIHN0YW5kYXJkIGB0dHlfcG9ydGAgcmVmY291bnRpbmcgKGB0dHlfcG9ydF9nZXRgL2B0dHlfcG9ydF9wdXRgLCBgdHR5X29wZXJhdGlvbnMuaW5zdGFsbGAsIGB0dHlfb3BlcmF0aW9ucy5jbGVhbnVwYCwgYW5kIGB0dHlfcG9ydF9vcGVyYXRpb25zLmRlc3RydWN0YCkuXG5cblRoaXMgcmVmYWN0b3JpbmcgYWRkcmVzc2VzIHR0eSBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGlzc3VlcyAocHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBhbmQgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gbGluZSB0ZWFyZG93biBhbmQgdHR5IG9wZXJhdGlvbnMpLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgZG8gbm90IGNvcHkga2VybmVsIGRhdGEgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2UsIGFuZCBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIHVzZS1hZnRlci1mcmVlLCByZWZjb3VudGluZyBpbWJhbGFuY2VzLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIHRob3JvdWdobHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgcmVmY291bnQgdHJhY2tpbmcsIGFuZCBMT0NLREVQIGJ1aWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk1MGU0ZmQyZjM4ZDE1ZWVjNTZkZmVmNGYyYTFjOTlkODIxYzU0MGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDIzOjM2OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYwppbmRleCBjZGQxZGZjNjY2YzRmLi5jODJjNTg4OGM2YzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYwpAQCAtMTI1LDcgJiM0MzsxMjUsNiBAQCBzdHJ1Y3QgZ3NfcG9ydCB7CiAJc3RydWN0IGtmaWZvCQlwb3J0X3dyaXRlX2J1ZjsKIAl3YWl0X3F1ZXVlX2hlYWRfdAlkcmFpbl93YWl0OwkvKiB3YWl0IHdoaWxlIHdyaXRlcyBkcmFpbiAqLwogCWJvb2wgICAgICAgICAgICAgICAgICAgIHdyaXRlX2J1c3k7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QJY2xvc2Vfd2FpdDsKIAlib29sCQkJc3VzcGVuZGVkOwkvKiBwb3J0IHN1c3BlbmRlZCAqLwogCWJvb2wJCQlzdGFydF9kZWxheWVkOwkvKiBkZWxheSBzdGFydCB3aGVuIHN1c3BlbmRlZCAqLwogCXN0cnVjdCBhc3luY19pY291bnQJaWNvdW50OwpAQCAtNjEwLDE3ICYjNDM7NjA5LDkgQEAgc3RhdGljIGludCBnc2VyaWFsX3dha2V1cF9ob3N0KHN0cnVjdCBnc2VyaWFsICpnc2VyKQogICovCiBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50CQlwb3J0X251bSA9IHR0eS0mZ3Q7aW5kZXg7Ci0Jc3RydWN0IGdzX3BvcnQJKnBvcnQ7CiYjNDM7CXN0cnVjdCBnc19wb3J0CSpwb3J0ID0gdHR5LSZndDtkcml2ZXJfZGF0YTsKIAlpbnQJCXN0YXR1cyA9IDA7CiAKLQltdXRleF9sb2NrKCZhbXA7cG9ydHNbcG9ydF9udW1dLmxvY2spOwotCXBvcnQgPSBwb3J0c1twb3J0X251bV0ucG9ydDsKLQlpZiAoIXBvcnQpIHsKLQkJc3RhdHVzID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7Ci0JfQotCiAJc3Bpbl9sb2NrX2lycSgmYW1wO3BvcnQtJmd0O3BvcnRfbG9jayk7CiAKIAkvKiBhbGxvY2F0ZSBjaXJjdWxhciBidWZmZXIgb24gZmlyc3Qgb3BlbiAqLwpAQCAtNjI4LDE3ICYjNDM7NjE5LDEyIEBAIHN0YXRpYyBpbnQgZ3Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAogCQlzcGluX3VubG9ja19pcnEoJmFtcDtwb3J0LSZndDtwb3J0X2xvY2spOwogCi0JCS8qCi0JCSAqIHBvcnRtYXN0ZXImIzM5O3MgbXV0ZXggc3RpbGwgcHJvdGVjdHMgZnJvbSBzaW11bHRhbmVvdXMgb3BlbigpLAotCQkgKiBhbmQgY2xvc2UoKSBjYW4mIzM5O3QgaGFwcGVuLCB5ZXQuCi0JCSAqLwotCiAJCXN0YXR1cyA9IGtmaWZvX2FsbG9jKCZhbXA7cG9ydC0mZ3Q7cG9ydF93cml0ZV9idWYsCiAJCQkJICAgICBXUklURV9CVUZfU0laRSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChzdGF0dXMpIHsKIAkJCXByX2RlYnVnKCYjMzQ7Z3Nfb3BlbjogdHR5R1MlZCAoJXAsJXApIG5vIGJ1ZmZlclxuJiMzNDssCi0JCQkJIHBvcnRfbnVtLCB0dHksIGZpbGUpOwotCQkJZ290byBvdXQ7CiYjNDM7CQkJCSBwb3J0LSZndDtwb3J0X251bSwgdHR5LCBmaWxlKTsKJiM0MzsJCQlyZXR1cm4gc3RhdHVzOwogCQl9CiAKIAkJc3Bpbl9sb2NrX2lycSgmYW1wO3BvcnQtJmd0O3BvcnRfbG9jayk7CkBAIC02NDgsNyAmIzQzOzYzNCw2IEBAIHN0YXRpYyBpbnQgZ3Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlpZiAocG9ydC0mZ3Q7cG9ydC5jb3VudCYjNDM7JiM0MzspCiAJCWdvdG8gZXhpdF91bmxvY2tfcG9ydDsKIAotCXR0eS0mZ3Q7ZHJpdmVyX2RhdGEgPSBwb3J0OwogCXBvcnQtJmd0O3BvcnQudHR5ID0gdHR5OwogCiAJLyogaWYgY29ubmVjdGVkLCBzdGFydCB0aGUgSS9PIHN0cmVhbSAqLwpAQCAtNjcyLDggJiM0Mzs2NTcsNiBAQCBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCiAKIGV4aXRfdW5sb2NrX3BvcnQ6CiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7cG9ydC0mZ3Q7cG9ydF9sb2NrKTsKLW91dDoKLQltdXRleF91bmxvY2soJmFtcDtwb3J0c1twb3J0X251bV0ubG9jayk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtNzQ0LDcgJiM0Mzs3MjcsNiBAQCBzdGF0aWMgdm9pZCBnc19jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlwcl9kZWJ1ZygmIzM0O2dzX2Nsb3NlOiB0dHlHUyVkICglcCwlcCkgZG9uZSFcbiYjMzQ7LAogCQkJcG9ydC0mZ3Q7cG9ydF9udW0sIHR0eSwgZmlsZSk7CiAKLQl3YWtlX3VwKCZhbXA7cG9ydC0mZ3Q7Y2xvc2Vfd2FpdCk7CiBleGl0OgogCXNwaW5fdW5sb2NrX2lycSgmYW1wO3BvcnQtJmd0O3BvcnRfbG9jayk7CiB9CkBAIC05MDgsNyAmIzQzOzg5MCw0MiBAQCBzdGF0aWMgaW50IGdzX2dldF9pY291bnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZ3NfaW5zdGFsbChzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQomIzQzO3sKJiM0MzsJaW50IHBvcnRfbnVtID0gdHR5LSZndDtpbmRleDsKJiM0MzsJc3RydWN0IGdzX3BvcnQgKnBvcnQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwb3J0c1twb3J0X251bV0ubG9jayk7CiYjNDM7CXBvcnQgPSBwb3J0c1twb3J0X251bV0ucG9ydDsKJiM0MzsJaWYgKCFwb3J0KSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtwb3J0c1twb3J0X251bV0ubG9jayk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwomIzQzOwl0dHlfcG9ydF9nZXQoJmFtcDtwb3J0LSZndDtwb3J0KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cG9ydHNbcG9ydF9udW1dLmxvY2spOwomIzQzOwomIzQzOwlyZXQgPSB0dHlfc3RhbmRhcmRfaW5zdGFsbChkcml2ZXIsIHR0eSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXR0eV9wb3J0X3B1dCgmYW1wO3BvcnQtJmd0O3BvcnQpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwl0dHktJmd0O2RyaXZlcl9kYXRhID0gcG9ydDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGdzX2NsZWFudXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBnc19wb3J0ICpwb3J0ID0gdHR5LSZndDtkcml2ZXJfZGF0YTsKJiM0MzsKJiM0MzsJaWYgKHBvcnQpCiYjNDM7CQl0dHlfcG9ydF9wdXQoJmFtcDtwb3J0LSZndDtwb3J0KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9vcGVyYXRpb25zIGdzX3R0eV9vcHMgPSB7CiYjNDM7CS5pbnN0YWxsID0JCWdzX2luc3RhbGwsCiAJLm9wZW4gPQkJCWdzX29wZW4sCiAJLmNsb3NlID0JCWdzX2Nsb3NlLAogCS53cml0ZSA9CQlnc193cml0ZSwKQEAgLTkxOSw2ICYjNDM7OTM2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBnc190dHlfb3BzID0gewogCS51bnRocm90dGxlID0JCWdzX3VudGhyb3R0bGUsCiAJLmJyZWFrX2N0bCA9CQlnc19icmVha19jdGwsCiAJLmdldF9pY291bnQgPQkJZ3NfZ2V0X2ljb3VudCwKJiM0MzsJLmNsZWFudXAgPQkJZ3NfY2xlYW51cCwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xMjAzLDYgJiM0MzsxMjIxLDIwIEBAIHN0YXRpYyB2b2lkIGdzX2NvbnNvbGVfZXhpdChzdHJ1Y3QgZ3NfcG9ydCAqcG9ydCkKIAogI2VuZGlmCiAKJiM0MztzdGF0aWMgdm9pZCBnc19wb3J0X2Rlc3RydWN0KHN0cnVjdCB0dHlfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBnc19wb3J0ICpnc19wb3J0ID0gY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCBnc19wb3J0LCBwb3J0KTsKJiM0MzsKJiM0MzsJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhbXA7Z3NfcG9ydC0mZ3Q7cHVzaCk7CiYjNDM7CWtmaWZvX2ZyZWUoJmFtcDtnc19wb3J0LSZndDtwb3J0X3dyaXRlX2J1Zik7CiYjNDM7CXR0eV9wb3J0X2Rlc3Ryb3kocG9ydCk7CiYjNDM7CWtmcmVlKGdzX3BvcnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9wb3J0X29wZXJhdGlvbnMgZ3NfcG9ydF9vcHMgPSB7CiYjNDM7CS5kZXN0cnVjdCA9IGdzX3BvcnRfZGVzdHJ1Y3QsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBpbnQKIGdzX3BvcnRfYWxsb2ModW5zaWduZWQgcG9ydF9udW0sIHN0cnVjdCB1c2JfY2RjX2xpbmVfY29kaW5nICpjb2RpbmcpCiB7CkBAIC0xMjIyLDkgJiM0MzsxMjU0LDkgQEAgZ3NfcG9ydF9hbGxvYyh1bnNpZ25lZCBwb3J0X251bSwgc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcgKmNvZGluZykKIAl9CiAKIAl0dHlfcG9ydF9pbml0KCZhbXA7cG9ydC0mZ3Q7cG9ydCk7CiYjNDM7CXBvcnQtJmd0O3BvcnQub3BzID0gJmFtcDtnc19wb3J0X29wczsKIAlzcGluX2xvY2tfaW5pdCgmYW1wO3BvcnQtJmd0O3BvcnRfbG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmYW1wO3BvcnQtJmd0O2RyYWluX3dhaXQpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFtcDtwb3J0LSZndDtjbG9zZV93YWl0KTsKIAogCUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7cG9ydC0mZ3Q7cHVzaCwgZ3NfcnhfcHVzaCk7CiAKQEAgLTEyNDEsMjUgJiM0MzsxMjczLDEwIEBAIGdzX3BvcnRfYWxsb2ModW5zaWduZWQgcG9ydF9udW0sIHN0cnVjdCB1c2JfY2RjX2xpbmVfY29kaW5nICpjb2RpbmcpCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBnc19jbG9zZWQoc3RydWN0IGdzX3BvcnQgKnBvcnQpCi17Ci0JaW50IGNvbmQ7Ci0KLQlzcGluX2xvY2tfaXJxKCZhbXA7cG9ydC0mZ3Q7cG9ydF9sb2NrKTsKLQljb25kID0gcG9ydC0mZ3Q7cG9ydC5jb3VudCA9PSAwOwotCXNwaW5fdW5sb2NrX2lycSgmYW1wO3BvcnQtJmd0O3BvcnRfbG9jayk7Ci0KLQlyZXR1cm4gY29uZDsKLX0KLQogc3RhdGljIHZvaWQgZ3NlcmlhbF9mcmVlX3BvcnQoc3RydWN0IGdzX3BvcnQgKnBvcnQpCiB7Ci0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhbXA7cG9ydC0mZ3Q7cHVzaCk7Ci0JLyogd2FpdCBmb3Igb2xkIG9wZW5zIHRvIGZpbmlzaCAqLwotCXdhaXRfZXZlbnQocG9ydC0mZ3Q7Y2xvc2Vfd2FpdCwgZ3NfY2xvc2VkKHBvcnQpKTsKIAlXQVJOX09OKHBvcnQtJmd0O3BvcnRfdXNiICE9IE5VTEwpOwotCXR0eV9wb3J0X2Rlc3Ryb3koJmFtcDtwb3J0LSZndDtwb3J0KTsKLQlrZnJlZShwb3J0KTsKJiM0MzsJdHR5X3BvcnRfcHV0KCZhbXA7cG9ydC0mZ3Q7cG9ydCk7CiB9CiAKIHZvaWQgZ3NlcmlhbF9mcmVlX2xpbmUodW5zaWduZWQgY2hhciBwb3J0X251bSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjAKCQkJCQkJCW91dHB1dDogMjI4CgkJCQkJCQl0aG91Z2h0czogODgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IFVTQiBHYWRnZXQgU2VyaWFsIERyaXZlciBSZWZhY3RvcmluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggdGFyZ2V0aW5nIHRoZSBgdV9zZXJpYWwuY2AgZmlsZSB3aXRoaW4gdGhlIFVTQiBnYWRnZXQgZHJpdmVyLiBUaGUgcHJpbWFyeSBmb2N1cyBpcyBhIHJlZmFjdG9yaW5nIGVmZm9ydCB0byByZXBsYWNlIGN1c3RvbSBsaWZldGltZSBhbmQgbG9ja2luZyBtYW5hZ2VtZW50IHdpdGggdGhlIHN0YW5kYXJkIGB0dHlfcG9ydGAgcmVmZXJlbmNlIGNvdW50aW5nIG1lY2hhbmlzbS4gVGhpcyBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7bWVtb3J5IHNhZmV0eSBpbXByb3ZlbWVudHMmIzM0OyDigJMgYWRkcmVzc2luZyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIHR5cGljYWwgaW4gdHR5IGRyaXZlcnMuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hldGhlciB0aGlzIGV4cG9zZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4uIFdlJiMzOTtyZSBvbiBhbWQ2NCwgc28gbGV0JiMzOTtzIGRpZyBpbi4gVGhlIHBhdGNoIGVzc2VudGlhbGx5IGRvZXMgdGhlIGZvbGxvd2luZzogaXQgcmVtb3ZlcyBjdXN0b20gbG9ja2luZywgaW50cm9kdWNlcyBgdHR5X3BvcnRfZ2V0YCBhbmQgYHR0eV9wb3J0X3B1dGAsIGFuZCBwcm9wZXJseSBzZXRzIGB0dHktJmd0O2RyaXZlcl9kYXRhYC4gV2Ugc2VlIG5ldyBmdW5jdGlvbnMgbGlrZSBgZ3NfaW5zdGFsbGAsIGBnc19jbGVhbnVwYCwgYW5kIGBnc19wb3J0X2Rlc3RydWN0YCByZWxhdGVkIHRvIHRoaXMgbmV3IHBvcnQgbWFuYWdlbWVudC4KCk15IGNoZWNrbGlzdCBraWNrcyBpbjogQXJlIHdlIHNlbmRpbmcgYW55dGhpbmcga2VybmVsLXNpZGUgdG8gdXNlci1zcGFjZSB0aGF0IGlzbiYjMzk7dCBwcm9wZXJseSBpbml0aWFsaXplZD8gTm8uIEFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvbmRpdGlvbmFsIGxvZ2ljIHJlbGlhbnQgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gQWdhaW4sIHRoZSBhbnN3ZXIgaXMgbm8uIEkmIzM5O20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIHBvdGVudGlhbCBhcmVhcyBsaWtlIGBnc19wb3J0X2FsbG9jYCwgYGdzX2luc3RhbGxgLCBhbmQgYGdzX3BvcnRfZGVzdHJ1Y3RgLiBMb29raW5nIGF0IHRoZSBjb2RlIGNvbmZpcm1zIHRoYXQgYHR0eV9wb3J0X2luaXRgIGFuZCBzdHJ1Y3QgYXNzaWdubWVudHMgYXJlIHByb3Blcmx5IGluaXRpYWxpemluZyBhbGwgcmVsZXZhbnQgc3RydWN0dXJlcy4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhbGwgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIE5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rLCBvciBpb2N0bCBvdXRwdXQgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGlzIHBhdGNoIGlzIGFsbCBhYm91dCBtZW1vcnkgc2FmZXR5IOKAkyBkZWFsaW5nIHdpdGggdXNlLWFmdGVyLWZyZWUsIHJhY2VzLCBhbmQgcmVmZXJlbmNlIGNvdW50IGlzc3Vlcy4gVGhlc2UgYXJlIGJ1Z3MgdGhhdCBLQVNBTiwgTG9ja2RlcCwgYW5kIHRoZSBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycyBhcmUgZGVzaWduZWQgdG8gZGV0ZWN0LiBUaGlzIGlzbiYjMzk7dCBpbnRyb2R1Y2luZyAqbmV3KiB1bmluaXRpYWxpemVkIG1lbW9yeSBidWdzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRoYXQgd291bGQgYmUgdW5pcXVlIHRvIEtNU0FOLiBXZSYjMzk7cmUgYWRoZXJpbmcgdG8gdGhlIHJ1bGU6IGlmIEtBU0FOIChvciBzaW1pbGFyIHRvb2xzKSBjYXRjaCBpdCwgS01TQU4gaXNuJiMzOTt0IG5lZWRlZC4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGZhbHNlLiBUaGlzIGlzIGEgcmVmYWN0b3JpbmcgZm9yIGdlbmVyYWwgbWVtb3J5IHNhZmV0eSB0aGF0JiMzOTtzIHdlbGwgY292ZXJlZCBieSBleGlzdGluZyB0b29saW5nLiBXZSYjMzk7cmUgZ29vZCB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIG9mIGBzdHJ1Y3QgZ3NfcG9ydGAgaW4gYGRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jYCB1c2luZyBzdGFuZGFyZCBgdHR5X3BvcnRgIHJlZmNvdW50aW5nIChgdHR5X3BvcnRfZ2V0YC9gdHR5X3BvcnRfcHV0YCwgYHR0eV9vcGVyYXRpb25zLmluc3RhbGxgLCBgdHR5X29wZXJhdGlvbnMuY2xlYW51cGAsIGFuZCBgdHR5X3BvcnRfb3BlcmF0aW9ucy5kZXN0cnVjdGApLlxuXG5UaGlzIHJlZmFjdG9yaW5nIGFkZHJlc3NlcyB0dHkgbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMgKHByZXZlbnRpbmcgdXNlLWFmdGVyLWZyZWUgYW5kIHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuIGxpbmUgdGVhcmRvd24gYW5kIHR0eSBvcGVyYXRpb25zKS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGRvIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCBhbmQgZG8gbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgcmVmY291bnRpbmcgaW1iYWxhbmNlcywgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSB0aG9yb3VnaGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIHJlZmNvdW50IHRyYWNraW5nLCBhbmQgTE9DS0RFUCBidWlsZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgb2YgYHN0cnVjdCBnc19wb3J0YCBpbiBgZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmNgIHVzaW5nIHN0YW5kYXJkIGB0dHlfcG9ydGAgcmVmY291bnRpbmcgKGB0dHlfcG9ydF9nZXRgL2B0dHlfcG9ydF9wdXRgLCBgdHR5X29wZXJhdGlvbnMuaW5zdGFsbGAsIGB0dHlfb3BlcmF0aW9ucy5jbGVhbnVwYCwgYW5kIGB0dHlfcG9ydF9vcGVyYXRpb25zLmRlc3RydWN0YCkuXG5cblRoaXMgcmVmYWN0b3JpbmcgYWRkcmVzc2VzIHR0eSBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGlzc3VlcyAocHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBhbmQgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gbGluZSB0ZWFyZG93biBhbmQgdHR5IG9wZXJhdGlvbnMpLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgZG8gbm90IGNvcHkga2VybmVsIGRhdGEgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2UsIGFuZCBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIHVzZS1hZnRlci1mcmVlLCByZWZjb3VudGluZyBpbWJhbGFuY2VzLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIHRob3JvdWdobHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgcmVmY291bnQgdHJhY2tpbmcsIGFuZCBMT0NLREVQIGJ1aWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMjM6MzY6MTUuMjM2MTA2NTczWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4NjkzNjcyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0dBREdFVFwiLFxuICAgIFwiVVNCX0NPTkZJR0ZTXCIsXG4gICAgXCJVU0JfQ09ORklHRlNfU0VSSUFMXCIsXG4gICAgXCJVU0JfQ09ORklHRlNfQUNNXCIsXG4gICAgXCJVU0JfVV9TRVJJQUxcIixcbiAgICBcIlRUWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdzX2luc3RhbGxcIixcbiAgICBcImdzX2NsZWFudXBcIixcbiAgICBcImdzX3BvcnRfZGVzdHJ1Y3RcIixcbiAgICBcImdzX29wZW5cIixcbiAgICBcImdzX2Nsb3NlXCIsXG4gICAgXCJnc2VyaWFsX2ZyZWVfcG9ydFwiLFxuICAgIFwiZ3NlcmlhbF9mcmVlX2xpbmVcIixcbiAgICBcImdzZXJpYWxfYWxsb2NfbGluZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIG9mIGBzdHJ1Y3QgZ3NfcG9ydGAgaW4gYGRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jYCB1c2luZyBzdGFuZGFyZCBgdHR5X3BvcnRgIHJlZmNvdW50aW5nIChgdHR5X3BvcnRfZ2V0YC9gdHR5X3BvcnRfcHV0YCwgYHR0eV9vcGVyYXRpb25zLmluc3RhbGxgLCBgdHR5X29wZXJhdGlvbnMuY2xlYW51cGAsIGFuZCBgdHR5X3BvcnRfb3BlcmF0aW9ucy5kZXN0cnVjdGApLlxcblxcblRoaXMgcmVmYWN0b3JpbmcgYWRkcmVzc2VzIHR0eSBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGlzc3VlcyAocHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBhbmQgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gbGluZSB0ZWFyZG93biBhbmQgdHR5IG9wZXJhdGlvbnMpLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgZG8gbm90IGNvcHkga2VybmVsIGRhdGEgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2UsIGFuZCBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIHVzZS1hZnRlci1mcmVlLCByZWZjb3VudGluZyBpbWJhbGFuY2VzLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIHRob3JvdWdobHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgcmVmY291bnQgdHJhY2tpbmcsIGFuZCBMT0NLREVQIGJ1aWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXN0cnVjdHVyZXMgdGhlIGxpZmVjeWNsZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgb3Blbi9jbG9zZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFVTQiBzZXJpYWwgZ2FkZ2V0IGRyaXZlciAodV9zZXJpYWwuYykgdXNpbmcgdHR5X3BvcnRfb3BlcmF0aW9ucyAoLmRlc3RydWN0KSBhbmQgdHR5X3BvcnRfZ2V0L3B1dCBhY3Jvc3MgaW5zdGFsbCBhbmQgY2xlYW51cCBjYWxsYmFja3MgaW5zdGVhZCBvZiBtYW51YWwgd2FpdHF1ZXVlIHRyYWNraW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBVU0IgZ2FkZ2V0IENvbmZpZ0ZTLCBkdW1teV9oY2QsIG9yIHJhdy1nYWRnZXQgYWxvbmcgd2l0aCB0dHlHUyogZGV2aWNlIG9wZXJhdGlvbnMsIG1ha2luZyBpdCBhbiBpbXBvcnRhbnQgdGFyZ2V0IGZvciBjb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIzOjM2OjE1LjIzNjExMjQwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIzOTIzMjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTUwZTRmZDJmMzhkMTVlZWM1NmRmZWY0ZjJhMWM5OWQ4MjFjNTQwZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDIzOjM2OjE0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmNcXG5pbmRleCBjZGQxZGZjNjY2YzRmLi5jODJjNTg4OGM2YzQ5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jXFxuKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmNcXG5AQCAtMTI1LDcgKzEyNSw2IEBAIHN0cnVjdCBnc19wb3J0IHtcXG4gXFx0c3RydWN0IGtmaWZvXFx0XFx0cG9ydF93cml0ZV9idWY7XFxuIFxcdHdhaXRfcXVldWVfaGVhZF90XFx0ZHJhaW5fd2FpdDtcXHQvKiB3YWl0IHdoaWxlIHdyaXRlcyBkcmFpbiAqL1xcbiBcXHRib29sICAgICAgICAgICAgICAgICAgICB3cml0ZV9idXN5O1xcbi1cXHR3YWl0X3F1ZXVlX2hlYWRfdFxcdGNsb3NlX3dhaXQ7XFxuIFxcdGJvb2xcXHRcXHRcXHRzdXNwZW5kZWQ7XFx0LyogcG9ydCBzdXNwZW5kZWQgKi9cXG4gXFx0Ym9vbFxcdFxcdFxcdHN0YXJ0X2RlbGF5ZWQ7XFx0LyogZGVsYXkgc3RhcnQgd2hlbiBzdXNwZW5kZWQgKi9cXG4gXFx0c3RydWN0IGFzeW5jX2ljb3VudFxcdGljb3VudDtcXG5AQCAtNjEwLDE3ICs2MDksOSBAQCBzdGF0aWMgaW50IGdzZXJpYWxfd2FrZXVwX2hvc3Qoc3RydWN0IGdzZXJpYWwgKmdzZXIpXFxuICAqL1xcbiBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIHtcXG4tXFx0aW50XFx0XFx0cG9ydF9udW0gPSB0dHktXFx1MDAzZWluZGV4O1xcbi1cXHRzdHJ1Y3QgZ3NfcG9ydFxcdCpwb3J0O1xcbitcXHRzdHJ1Y3QgZ3NfcG9ydFxcdCpwb3J0ID0gdHR5LVxcdTAwM2Vkcml2ZXJfZGF0YTtcXG4gXFx0aW50XFx0XFx0c3RhdHVzID0gMDtcXG4gXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNnBvcnRzW3BvcnRfbnVtXS5sb2NrKTtcXG4tXFx0cG9ydCA9IHBvcnRzW3BvcnRfbnVtXS5wb3J0O1xcbi1cXHRpZiAoIXBvcnQpIHtcXG4tXFx0XFx0c3RhdHVzID0gLUVOT0RFVjtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnBvcnQtXFx1MDAzZXBvcnRfbG9jayk7XFxuIFxcbiBcXHQvKiBhbGxvY2F0ZSBjaXJjdWxhciBidWZmZXIgb24gZmlyc3Qgb3BlbiAqL1xcbkBAIC02MjgsMTcgKzYxOSwxMiBAQCBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcbiBcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnBvcnQtXFx1MDAzZXBvcnRfbG9jayk7XFxuIFxcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBwb3J0bWFzdGVyJ3MgbXV0ZXggc3RpbGwgcHJvdGVjdHMgZnJvbSBzaW11bHRhbmVvdXMgb3BlbigpLFxcbi1cXHRcXHQgKiBhbmQgY2xvc2UoKSBjYW4ndCBoYXBwZW4sIHlldC5cXG4tXFx0XFx0ICovXFxuLVxcbiBcXHRcXHRzdGF0dXMgPSBrZmlmb19hbGxvYyhcXHUwMDI2cG9ydC1cXHUwMDNlcG9ydF93cml0ZV9idWYsXFxuIFxcdFxcdFxcdFxcdCAgICAgV1JJVEVfQlVGX1NJWkUsIEdGUF9LRVJORUwpO1xcbiBcXHRcXHRpZiAoc3RhdHVzKSB7XFxuIFxcdFxcdFxcdHByX2RlYnVnKFxcXCJnc19vcGVuOiB0dHlHUyVkICglcCwlcCkgbm8gYnVmZmVyXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgcG9ydF9udW0sIHR0eSwgZmlsZSk7XFxuLVxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHRcXHQgcG9ydC1cXHUwMDNlcG9ydF9udW0sIHR0eSwgZmlsZSk7XFxuK1xcdFxcdFxcdHJldHVybiBzdGF0dXM7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnBvcnQtXFx1MDAzZXBvcnRfbG9jayk7XFxuQEAgLTY0OCw3ICs2MzQsNiBAQCBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcdGlmIChwb3J0LVxcdTAwM2Vwb3J0LmNvdW50KyspXFxuIFxcdFxcdGdvdG8gZXhpdF91bmxvY2tfcG9ydDtcXG4gXFxuLVxcdHR0eS1cXHUwMDNlZHJpdmVyX2RhdGEgPSBwb3J0O1xcbiBcXHRwb3J0LVxcdTAwM2Vwb3J0LnR0eSA9IHR0eTtcXG4gXFxuIFxcdC8qIGlmIGNvbm5lY3RlZCwgc3RhcnQgdGhlIEkvTyBzdHJlYW0gKi9cXG5AQCAtNjcyLDggKzY1Nyw2IEBAIHN0YXRpYyBpbnQgZ3Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFxuIGV4aXRfdW5sb2NrX3BvcnQ6XFxuIFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2cG9ydC1cXHUwMDNlcG9ydF9sb2NrKTtcXG4tb3V0Olxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNnBvcnRzW3BvcnRfbnVtXS5sb2NrKTtcXG4gXFx0cmV0dXJuIHN0YXR1cztcXG4gfVxcbiBcXG5AQCAtNzQ0LDcgKzcyNyw2IEBAIHN0YXRpYyB2b2lkIGdzX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRwcl9kZWJ1ZyhcXFwiZ3NfY2xvc2U6IHR0eUdTJWQgKCVwLCVwKSBkb25lIVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0cG9ydC1cXHUwMDNlcG9ydF9udW0sIHR0eSwgZmlsZSk7XFxuIFxcbi1cXHR3YWtlX3VwKFxcdTAwMjZwb3J0LVxcdTAwM2VjbG9zZV93YWl0KTtcXG4gZXhpdDpcXG4gXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZwb3J0LVxcdTAwM2Vwb3J0X2xvY2spO1xcbiB9XFxuQEAgLTkwOCw3ICs4OTAsNDIgQEAgc3RhdGljIGludCBnc19nZXRfaWNvdW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGdzX2luc3RhbGwoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG4re1xcbitcXHRpbnQgcG9ydF9udW0gPSB0dHktXFx1MDAzZWluZGV4O1xcbitcXHRzdHJ1Y3QgZ3NfcG9ydCAqcG9ydDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnBvcnRzW3BvcnRfbnVtXS5sb2NrKTtcXG4rXFx0cG9ydCA9IHBvcnRzW3BvcnRfbnVtXS5wb3J0O1xcbitcXHRpZiAoIXBvcnQpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwb3J0c1twb3J0X251bV0ubG9jayk7XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHR9XFxuK1xcbitcXHR0dHlfcG9ydF9nZXQoXFx1MDAyNnBvcnQtXFx1MDAzZXBvcnQpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBvcnRzW3BvcnRfbnVtXS5sb2NrKTtcXG4rXFxuK1xcdHJldCA9IHR0eV9zdGFuZGFyZF9pbnN0YWxsKGRyaXZlciwgdHR5KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHR0dHlfcG9ydF9wdXQoXFx1MDAyNnBvcnQtXFx1MDAzZXBvcnQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHR0dHktXFx1MDAzZWRyaXZlcl9kYXRhID0gcG9ydDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGdzX2NsZWFudXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG4re1xcbitcXHRzdHJ1Y3QgZ3NfcG9ydCAqcG9ydCA9IHR0eS1cXHUwMDNlZHJpdmVyX2RhdGE7XFxuK1xcbitcXHRpZiAocG9ydClcXG4rXFx0XFx0dHR5X3BvcnRfcHV0KFxcdTAwMjZwb3J0LVxcdTAwM2Vwb3J0KTtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBnc190dHlfb3BzID0ge1xcbitcXHQuaW5zdGFsbCA9XFx0XFx0Z3NfaW5zdGFsbCxcXG4gXFx0Lm9wZW4gPVxcdFxcdFxcdGdzX29wZW4sXFxuIFxcdC5jbG9zZSA9XFx0XFx0Z3NfY2xvc2UsXFxuIFxcdC53cml0ZSA9XFx0XFx0Z3Nfd3JpdGUsXFxuQEAgLTkxOSw2ICs5MzYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9vcGVyYXRpb25zIGdzX3R0eV9vcHMgPSB7XFxuIFxcdC51bnRocm90dGxlID1cXHRcXHRnc191bnRocm90dGxlLFxcbiBcXHQuYnJlYWtfY3RsID1cXHRcXHRnc19icmVha19jdGwsXFxuIFxcdC5nZXRfaWNvdW50ID1cXHRcXHRnc19nZXRfaWNvdW50LFxcbitcXHQuY2xlYW51cCA9XFx0XFx0Z3NfY2xlYW51cCxcXG4gfTtcXG4gXFxuIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuQEAgLTEyMDMsNiArMTIyMSwyMCBAQCBzdGF0aWMgdm9pZCBnc19jb25zb2xlX2V4aXQoc3RydWN0IGdzX3BvcnQgKnBvcnQpXFxuIFxcbiAjZW5kaWZcXG4gXFxuK3N0YXRpYyB2b2lkIGdzX3BvcnRfZGVzdHJ1Y3Qoc3RydWN0IHR0eV9wb3J0ICpwb3J0KVxcbit7XFxuK1xcdHN0cnVjdCBnc19wb3J0ICpnc19wb3J0ID0gY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCBnc19wb3J0LCBwb3J0KTtcXG4rXFxuK1xcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2Z3NfcG9ydC1cXHUwMDNlcHVzaCk7XFxuK1xcdGtmaWZvX2ZyZWUoXFx1MDAyNmdzX3BvcnQtXFx1MDAzZXBvcnRfd3JpdGVfYnVmKTtcXG4rXFx0dHR5X3BvcnRfZGVzdHJveShwb3J0KTtcXG4rXFx0a2ZyZWUoZ3NfcG9ydCk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X3BvcnRfb3BlcmF0aW9ucyBnc19wb3J0X29wcyA9IHtcXG4rXFx0LmRlc3RydWN0ID0gZ3NfcG9ydF9kZXN0cnVjdCxcXG4rfTtcXG4rXFxuIHN0YXRpYyBpbnRcXG4gZ3NfcG9ydF9hbGxvYyh1bnNpZ25lZCBwb3J0X251bSwgc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcgKmNvZGluZylcXG4ge1xcbkBAIC0xMjIyLDkgKzEyNTQsOSBAQCBnc19wb3J0X2FsbG9jKHVuc2lnbmVkIHBvcnRfbnVtLCBzdHJ1Y3QgdXNiX2NkY19saW5lX2NvZGluZyAqY29kaW5nKVxcbiBcXHR9XFxuIFxcbiBcXHR0dHlfcG9ydF9pbml0KFxcdTAwMjZwb3J0LVxcdTAwM2Vwb3J0KTtcXG4rXFx0cG9ydC1cXHUwMDNlcG9ydC5vcHMgPSBcXHUwMDI2Z3NfcG9ydF9vcHM7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZwb3J0LVxcdTAwM2Vwb3J0X2xvY2spO1xcbiBcXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZwb3J0LVxcdTAwM2VkcmFpbl93YWl0KTtcXG4tXFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2cG9ydC1cXHUwMDNlY2xvc2Vfd2FpdCk7XFxuIFxcbiBcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2cG9ydC1cXHUwMDNlcHVzaCwgZ3NfcnhfcHVzaCk7XFxuIFxcbkBAIC0xMjQxLDI1ICsxMjczLDEwIEBAIGdzX3BvcnRfYWxsb2ModW5zaWduZWQgcG9ydF9udW0sIHN0cnVjdCB1c2JfY2RjX2xpbmVfY29kaW5nICpjb2RpbmcpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgZ3NfY2xvc2VkKHN0cnVjdCBnc19wb3J0ICpwb3J0KVxcbi17XFxuLVxcdGludCBjb25kO1xcbi1cXG4tXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2cG9ydC1cXHUwMDNlcG9ydF9sb2NrKTtcXG4tXFx0Y29uZCA9IHBvcnQtXFx1MDAzZXBvcnQuY291bnQgPT0gMDtcXG4tXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZwb3J0LVxcdTAwM2Vwb3J0X2xvY2spO1xcbi1cXG4tXFx0cmV0dXJuIGNvbmQ7XFxuLX1cXG4tXFxuIHN0YXRpYyB2b2lkIGdzZXJpYWxfZnJlZV9wb3J0KHN0cnVjdCBnc19wb3J0ICpwb3J0KVxcbiB7XFxuLVxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cG9ydC1cXHUwMDNlcHVzaCk7XFxuLVxcdC8qIHdhaXQgZm9yIG9sZCBvcGVucyB0byBmaW5pc2ggKi9cXG4tXFx0d2FpdF9ldmVudChwb3J0LVxcdTAwM2VjbG9zZV93YWl0LCBnc19jbG9zZWQocG9ydCkpO1xcbiBcXHRXQVJOX09OKHBvcnQtXFx1MDAzZXBvcnRfdXNiICE9IE5VTEwpO1xcbi1cXHR0dHlfcG9ydF9kZXN0cm95KFxcdTAwMjZwb3J0LVxcdTAwM2Vwb3J0KTtcXG4tXFx0a2ZyZWUocG9ydCk7XFxuK1xcdHR0eV9wb3J0X3B1dChcXHUwMDI2cG9ydC1cXHUwMDNlcG9ydCk7XFxuIH1cXG4gXFxuIHZvaWQgZ3NlcmlhbF9mcmVlX2xpbmUodW5zaWduZWQgY2hhciBwb3J0X251bSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjM6MzY6MTUuNjYwODg3MjU2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNTkxNDQ4MDIxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfR0FER0VUXCIsXG4gICAgXCJVU0JfQ09ORklHRlNcIixcbiAgICBcIlVTQl9DT05GSUdGU19TRVJJQUxcIixcbiAgICBcIlVTQl9DT05GSUdGU19BQ01cIixcbiAgICBcIlVTQl9VX1NFUklBTFwiLFxuICAgIFwiVFRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3NfaW5zdGFsbFwiLFxuICAgIFwiZ3NfY2xlYW51cFwiLFxuICAgIFwiZ3NfcG9ydF9kZXN0cnVjdFwiLFxuICAgIFwiZ3Nfb3BlblwiLFxuICAgIFwiZ3NfY2xvc2VcIixcbiAgICBcImdzZXJpYWxfZnJlZV9wb3J0XCIsXG4gICAgXCJnc2VyaWFsX2ZyZWVfbGluZVwiLFxuICAgIFwiZ3NlcmlhbF9hbGxvY19saW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzdHJ1Y3R1cmVzIHRoZSBsaWZlY3ljbGUsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIG9wZW4vY2xvc2Ugc3luY2hyb25pemF0aW9uIG9mIHRoZSBVU0Igc2VyaWFsIGdhZGdldCBkcml2ZXIgKHVfc2VyaWFsLmMpIHVzaW5nIHR0eV9wb3J0X29wZXJhdGlvbnMgKC5kZXN0cnVjdCkgYW5kIHR0eV9wb3J0X2dldC9wdXQgYWNyb3NzIGluc3RhbGwgYW5kIGNsZWFudXAgY2FsbGJhY2tzIGluc3RlYWQgb2YgbWFudWFsIHdhaXRxdWV1ZSB0cmFja2luZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGdhZGdldCBDb25maWdGUywgZHVtbXlfaGNkLCBvciByYXctZ2FkZ2V0IGFsb25nIHdpdGggdHR5R1MqIGRldmljZSBvcGVyYXRpb25zLCBtYWtpbmcgaXQgYW4gaW1wb3J0YW50IHRhcmdldCBmb3IgY29uY3VycmVuY3kgYW5kIGxpZmVjeWNsZSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk1MGU0ZmQyZjM4ZDE1ZWVjNTZkZmVmNGYyYTFjOTlkODIxYzU0MGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDIzOjM2OjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuY1xuaW5kZXggY2RkMWRmYzY2NmM0Zi4uYzgyYzU4ODhjNmM0OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jXG4rKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuY1xuQEAgLTEyNSw3ICsxMjUsNiBAQCBzdHJ1Y3QgZ3NfcG9ydCB7XG4gXHRzdHJ1Y3Qga2ZpZm9cdFx0cG9ydF93cml0ZV9idWY7XG4gXHR3YWl0X3F1ZXVlX2hlYWRfdFx0ZHJhaW5fd2FpdDtcdC8qIHdhaXQgd2hpbGUgd3JpdGVzIGRyYWluICovXG4gXHRib29sICAgICAgICAgICAgICAgICAgICB3cml0ZV9idXN5O1xuLVx0d2FpdF9xdWV1ZV9oZWFkX3RcdGNsb3NlX3dhaXQ7XG4gXHRib29sXHRcdFx0c3VzcGVuZGVkO1x0LyogcG9ydCBzdXNwZW5kZWQgKi9cbiBcdGJvb2xcdFx0XHRzdGFydF9kZWxheWVkO1x0LyogZGVsYXkgc3RhcnQgd2hlbiBzdXNwZW5kZWQgKi9cbiBcdHN0cnVjdCBhc3luY19pY291bnRcdGljb3VudDtcbkBAIC02MTAsMTcgKzYwOSw5IEBAIHN0YXRpYyBpbnQgZ3NlcmlhbF93YWtldXBfaG9zdChzdHJ1Y3QgZ3NlcmlhbCAqZ3NlcilcbiAgKi9cbiBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuLVx0aW50XHRcdHBvcnRfbnVtID0gdHR5LVx1MDAzZWluZGV4O1xuLVx0c3RydWN0IGdzX3BvcnRcdCpwb3J0O1xuK1x0c3RydWN0IGdzX3BvcnRcdCpwb3J0ID0gdHR5LVx1MDAzZWRyaXZlcl9kYXRhO1xuIFx0aW50XHRcdHN0YXR1cyA9IDA7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnBvcnRzW3BvcnRfbnVtXS5sb2NrKTtcbi1cdHBvcnQgPSBwb3J0c1twb3J0X251bV0ucG9ydDtcbi1cdGlmICghcG9ydCkge1xuLVx0XHRzdGF0dXMgPSAtRU5PREVWO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0X2xvY2spO1xuIFxuIFx0LyogYWxsb2NhdGUgY2lyY3VsYXIgYnVmZmVyIG9uIGZpcnN0IG9wZW4gKi9cbkBAIC02MjgsMTcgKzYxOSwxMiBAQCBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZwb3J0LVx1MDAzZXBvcnRfbG9jayk7XG4gXG4tXHRcdC8qXG4tXHRcdCAqIHBvcnRtYXN0ZXIncyBtdXRleCBzdGlsbCBwcm90ZWN0cyBmcm9tIHNpbXVsdGFuZW91cyBvcGVuKCksXG4tXHRcdCAqIGFuZCBjbG9zZSgpIGNhbid0IGhhcHBlbiwgeWV0LlxuLVx0XHQgKi9cbi1cbiBcdFx0c3RhdHVzID0ga2ZpZm9fYWxsb2MoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0X3dyaXRlX2J1ZixcbiBcdFx0XHRcdCAgICAgV1JJVEVfQlVGX1NJWkUsIEdGUF9LRVJORUwpO1xuIFx0XHRpZiAoc3RhdHVzKSB7XG4gXHRcdFx0cHJfZGVidWcoXCJnc19vcGVuOiB0dHlHUyVkICglcCwlcCkgbm8gYnVmZmVyXFxuXCIsXG4tXHRcdFx0XHQgcG9ydF9udW0sIHR0eSwgZmlsZSk7XG4tXHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0XHQgcG9ydC1cdTAwM2Vwb3J0X251bSwgdHR5LCBmaWxlKTtcbitcdFx0XHRyZXR1cm4gc3RhdHVzO1xuIFx0XHR9XG4gXG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0X2xvY2spO1xuQEAgLTY0OCw3ICs2MzQsNiBAQCBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRpZiAocG9ydC1cdTAwM2Vwb3J0LmNvdW50KyspXG4gXHRcdGdvdG8gZXhpdF91bmxvY2tfcG9ydDtcbiBcbi1cdHR0eS1cdTAwM2Vkcml2ZXJfZGF0YSA9IHBvcnQ7XG4gXHRwb3J0LVx1MDAzZXBvcnQudHR5ID0gdHR5O1xuIFxuIFx0LyogaWYgY29ubmVjdGVkLCBzdGFydCB0aGUgSS9PIHN0cmVhbSAqL1xuQEAgLTY3Miw4ICs2NTcsNiBAQCBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXG4gZXhpdF91bmxvY2tfcG9ydDpcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZwb3J0LVx1MDAzZXBvcnRfbG9jayk7XG4tb3V0OlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBvcnRzW3BvcnRfbnVtXS5sb2NrKTtcbiBcdHJldHVybiBzdGF0dXM7XG4gfVxuIFxuQEAgLTc0NCw3ICs3MjcsNiBAQCBzdGF0aWMgdm9pZCBnc19jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHByX2RlYnVnKFwiZ3NfY2xvc2U6IHR0eUdTJWQgKCVwLCVwKSBkb25lIVxcblwiLFxuIFx0XHRcdHBvcnQtXHUwMDNlcG9ydF9udW0sIHR0eSwgZmlsZSk7XG4gXG4tXHR3YWtlX3VwKFx1MDAyNnBvcnQtXHUwMDNlY2xvc2Vfd2FpdCk7XG4gZXhpdDpcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZwb3J0LVx1MDAzZXBvcnRfbG9jayk7XG4gfVxuQEAgLTkwOCw3ICs4OTAsNDIgQEAgc3RhdGljIGludCBnc19nZXRfaWNvdW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBnc19pbnN0YWxsKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4re1xuK1x0aW50IHBvcnRfbnVtID0gdHR5LVx1MDAzZWluZGV4O1xuK1x0c3RydWN0IGdzX3BvcnQgKnBvcnQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwb3J0c1twb3J0X251bV0ubG9jayk7XG4rXHRwb3J0ID0gcG9ydHNbcG9ydF9udW1dLnBvcnQ7XG4rXHRpZiAoIXBvcnQpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBvcnRzW3BvcnRfbnVtXS5sb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXG4rXHR0dHlfcG9ydF9nZXQoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwb3J0c1twb3J0X251bV0ubG9jayk7XG4rXG4rXHRyZXQgPSB0dHlfc3RhbmRhcmRfaW5zdGFsbChkcml2ZXIsIHR0eSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHR0eV9wb3J0X3B1dChcdTAwMjZwb3J0LVx1MDAzZXBvcnQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0dHR5LVx1MDAzZWRyaXZlcl9kYXRhID0gcG9ydDtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBnc19jbGVhbnVwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4re1xuK1x0c3RydWN0IGdzX3BvcnQgKnBvcnQgPSB0dHktXHUwMDNlZHJpdmVyX2RhdGE7XG4rXG4rXHRpZiAocG9ydClcbitcdFx0dHR5X3BvcnRfcHV0KFx1MDAyNnBvcnQtXHUwMDNlcG9ydCk7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgZ3NfdHR5X29wcyA9IHtcbitcdC5pbnN0YWxsID1cdFx0Z3NfaW5zdGFsbCxcbiBcdC5vcGVuID1cdFx0XHRnc19vcGVuLFxuIFx0LmNsb3NlID1cdFx0Z3NfY2xvc2UsXG4gXHQud3JpdGUgPVx0XHRnc193cml0ZSxcbkBAIC05MTksNiArOTM2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBnc190dHlfb3BzID0ge1xuIFx0LnVudGhyb3R0bGUgPVx0XHRnc191bnRocm90dGxlLFxuIFx0LmJyZWFrX2N0bCA9XHRcdGdzX2JyZWFrX2N0bCxcbiBcdC5nZXRfaWNvdW50ID1cdFx0Z3NfZ2V0X2ljb3VudCxcbitcdC5jbGVhbnVwID1cdFx0Z3NfY2xlYW51cCxcbiB9O1xuIFxuIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5AQCAtMTIwMyw2ICsxMjIxLDIwIEBAIHN0YXRpYyB2b2lkIGdzX2NvbnNvbGVfZXhpdChzdHJ1Y3QgZ3NfcG9ydCAqcG9ydClcbiBcbiAjZW5kaWZcbiBcbitzdGF0aWMgdm9pZCBnc19wb3J0X2Rlc3RydWN0KHN0cnVjdCB0dHlfcG9ydCAqcG9ydClcbit7XG4rXHRzdHJ1Y3QgZ3NfcG9ydCAqZ3NfcG9ydCA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgZ3NfcG9ydCwgcG9ydCk7XG4rXG4rXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2Z3NfcG9ydC1cdTAwM2VwdXNoKTtcbitcdGtmaWZvX2ZyZWUoXHUwMDI2Z3NfcG9ydC1cdTAwM2Vwb3J0X3dyaXRlX2J1Zik7XG4rXHR0dHlfcG9ydF9kZXN0cm95KHBvcnQpO1xuK1x0a2ZyZWUoZ3NfcG9ydCk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X3BvcnRfb3BlcmF0aW9ucyBnc19wb3J0X29wcyA9IHtcbitcdC5kZXN0cnVjdCA9IGdzX3BvcnRfZGVzdHJ1Y3QsXG4rfTtcbitcbiBzdGF0aWMgaW50XG4gZ3NfcG9ydF9hbGxvYyh1bnNpZ25lZCBwb3J0X251bSwgc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcgKmNvZGluZylcbiB7XG5AQCAtMTIyMiw5ICsxMjU0LDkgQEAgZ3NfcG9ydF9hbGxvYyh1bnNpZ25lZCBwb3J0X251bSwgc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcgKmNvZGluZylcbiBcdH1cbiBcbiBcdHR0eV9wb3J0X2luaXQoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0KTtcbitcdHBvcnQtXHUwMDNlcG9ydC5vcHMgPSBcdTAwMjZnc19wb3J0X29wcztcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnBvcnQtXHUwMDNlcG9ydF9sb2NrKTtcbiBcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2cG9ydC1cdTAwM2VkcmFpbl93YWl0KTtcbi1cdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2cG9ydC1cdTAwM2VjbG9zZV93YWl0KTtcbiBcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnBvcnQtXHUwMDNlcHVzaCwgZ3NfcnhfcHVzaCk7XG4gXG5AQCAtMTI0MSwyNSArMTI3MywxMCBAQCBnc19wb3J0X2FsbG9jKHVuc2lnbmVkIHBvcnRfbnVtLCBzdHJ1Y3QgdXNiX2NkY19saW5lX2NvZGluZyAqY29kaW5nKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBnc19jbG9zZWQoc3RydWN0IGdzX3BvcnQgKnBvcnQpXG4te1xuLVx0aW50IGNvbmQ7XG4tXG4tXHRzcGluX2xvY2tfaXJxKFx1MDAyNnBvcnQtXHUwMDNlcG9ydF9sb2NrKTtcbi1cdGNvbmQgPSBwb3J0LVx1MDAzZXBvcnQuY291bnQgPT0gMDtcbi1cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZwb3J0LVx1MDAzZXBvcnRfbG9jayk7XG4tXG4tXHRyZXR1cm4gY29uZDtcbi19XG4tXG4gc3RhdGljIHZvaWQgZ3NlcmlhbF9mcmVlX3BvcnQoc3RydWN0IGdzX3BvcnQgKnBvcnQpXG4ge1xuLVx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnBvcnQtXHUwMDNlcHVzaCk7XG4tXHQvKiB3YWl0IGZvciBvbGQgb3BlbnMgdG8gZmluaXNoICovXG4tXHR3YWl0X2V2ZW50KHBvcnQtXHUwMDNlY2xvc2Vfd2FpdCwgZ3NfY2xvc2VkKHBvcnQpKTtcbiBcdFdBUk5fT04ocG9ydC1cdTAwM2Vwb3J0X3VzYiAhPSBOVUxMKTtcbi1cdHR0eV9wb3J0X2Rlc3Ryb3koXHUwMDI2cG9ydC1cdTAwM2Vwb3J0KTtcbi1cdGtmcmVlKHBvcnQpO1xuK1x0dHR5X3BvcnRfcHV0KFx1MDAyNnBvcnQtXHUwMDNlcG9ydCk7XG4gfVxuIFxuIHZvaWQgZ3NlcmlhbF9mcmVlX2xpbmUodW5zaWduZWQgY2hhciBwb3J0X251bSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIzOjM2OjE1LjY2MDg4ODg5NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwOTkwMzM4NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVVNCIEdhZGdldCBTZXJpYWwgRHJpdmVyIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQncyB3b3J0aCBhIGZ1enppbmcgcnVuIHdpdGggc3l6a2FsbGVyLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGEgZmFpcmx5IHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIG9mIHRoZSBVU0IgZ2FkZ2V0IHNlcmlhbCBkcml2ZXIgKGB1X3NlcmlhbC5jYCksIHNvIGl04oCZcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2suXG5cbkZpcnN0LCB0aGUgZGlmZiB0ZWxscyBtZSBpdCdzIHRvdWNoaW5nIHRoZSBoZWFydCBvZiBgdV9zZXJpYWwuY2AuIExldCdzIGRpZyBpbnRvIHRoZSBzcGVjaWZpYyBjaGFuZ2VzLCBzaGFsbCB3ZT8gT2theSwgaGVyZSdzIHdoYXQganVtcHMgb3V0OiB0aGV5J3JlIGNsZWFuaW5nIHVwIHNvbWUgb2xkIGNvZGUuIFRoZXkndmUgcmVtb3ZlZCBgd2FpdF9xdWV1ZV9oZWFkX3QgY2xvc2Vfd2FpdGAgZnJvbSBgZ3NfcG9ydGAuIEluIGBnc19vcGVuYCwgdGhlIGNvZGUgaXMgYmVjb21pbmcgbW9yZSBzdHJlYW1saW5lZC4gVGhlcmUncyBubyBsb25nZXIgdGhlIG11dGV4IGxvY2tpbmcgYW5kIHRoZSBidWZmZXIgYWxsb2NhdGlvbiBsb2dpYyBpcyBzaW1wbGlmaWVkLCB3aGljaCBjb3VsZCBoYXZlIHN1YnRsZSBpbXBsaWNhdGlvbnMuIGBnc19jbG9zZWAgYWxzbyBsb3N0IGl0cyBgd2FrZV91cGAgZnVuY3Rpb24gZm9yIHRoZSBjbG9zZSB3YWl0LiBUaGUgaW50cm9kdWN0aW9uIG9mIGBnc19pbnN0YWxsYCBhbmQgYGdzX2NsZWFudXBgIGluIGBnc190dHlfb3BzYCB3aXRoIHRoZSBhc3NvY2lhdGVkIGdldC9wdXQgbG9naWMgbG9va3MgbGlrZSB0aGV5J3JlIHRyYW5zaXRpb25pbmcgdG8gdXNpbmcgYHR0eV9wb3J0X29wZXJhdGlvbnNgIGZvciBwcm9wZXIgbGlmZXRpbWUgbWFuYWdlbWVudCBhbmQgcmVmY291bnRpbmcuIGBnc19pbnN0YWxsYCBsb29rcyB0byBhY3F1aXJlIHRoZSBsb2NrIGFuZCBjYWxscyBgdHR5X3BvcnRfZ2V0YCBhbmQgYHR0eV9zdGFuZGFyZF9pbnN0YWxsYC4gYGdzX2NsZWFudXBgIGNhbGxzIGB0dHlfcG9ydF9wdXRgLiBUaGUgYGdzX3BvcnRfZGVzdHJ1Y3RgIGNhbGxiYWNrLCBwcm92aWRlZCB2aWEgYHR0eV9wb3J0X29wZXJhdGlvbnNgLCBsb29rcyBsaWtlIGl0J3MgZ29pbmcgdG8gaGFuZGxlIHRoZSBjbGVhbnVwIHdoZW4gdGhlIHJlZmNvdW50IGhpdHMgemVyby4gYGdzX3BvcnRfYWxsb2NgIHJlZ2lzdGVycyB0aGUgcG9ydCBvcGVyYXRpb25zLiBUaGlzIGxvb2tzIGxpa2UgYSBjbGFzc2ljIHJlZmFjdG9yaW5nIHVzaW5nIGB0dHlfcG9ydF9vcGVyYXRpb25zYCBhbmQgYHR0eV9wb3J0X2dldGAvYHB1dGAgYWNyb3NzIGBpbnN0YWxsYC9gY2xlYW51cGAvYGRlc3RydWN0YCB0byBtYW5hZ2UgdGhlIFVTQiBnYWRnZXQgc2VyaWFsIGRyaXZlcidzIGxpZmV0aW1lIGFuZCByZWZjb3VudGluZy4gTGFzdGx5LCBgZ3NlcmlhbF9mcmVlX3BvcnRgIHJlcGxhY2VzIHRoZSB3YWl0IG9uIGNsb3NlX3dhaXQgd2l0aCBgdHR5X3BvcnRfcHV0KFx1MDAyNnBvcnQtXHUwMDNlcG9ydClgLlxuXG5UaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIHBhdHRlcm4gZm9yIHJlZmFjdG9yaW5nIHRoZXNlIHR5cGVzIG9mIGRyaXZlcnMuIEZyb20gbXkgZXhwZXJpZW5jZSwgY2hhbmdlcyB0byByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCByZWZjb3VudGluZyBhcmUgYWx3YXlzIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuIEEgbG90IG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBpbiB2YXJpb3VzIFVTQiBnYWRnZXQgc2VyaWFsIGZ1bmN0aW9ucyDigJMgYGdfc2VyaWFsYCwgQ0RDIEFDTSwgYW5kIGV2ZW4gdGhpbmdzIGxpa2UgQ29uZmlnRlMgZ2FkZ2V0cy4gVGhvc2UgYWxsIHJlbHkgb24gdGhpcyBjb2RlLCBzbyBldmVuIGEgbWlub3IgYnVnIGNvdWxkIGhhdmUgZmFyIHJlYWNoaW5nIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIHRvIHNlZSBob3cgdGhlIGNvZGUgaXMgZW5hYmxlZC4gVGhpcyBwYXRjaCBkZWZpbml0ZWx5IHdhcnJhbnRzIHN5emthbGxlciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzA4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjM6MzY6MjYuNjUxMjMwNzc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDg2OTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVfc2VyaWFsXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGU9MTM9b2JqLSQoQ09ORklHX1VTQl9GX1NTX0xCKVxcdCs9IHVzYl9mX3NzX2xiLm9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX1VTQl9VX1NFUklBTClcXHQrPSB1X3NlcmlhbC5vXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlLTE1LXVzYl9mX3NlcmlhbC15XFx0XFx0XFx0Oj0gZl9zZXJpYWwub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMzozNjoyNi43MDQzMjUwOTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzA4NDU2MDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYFVTQl9VX1NFUklBTGAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYFVTQl9VX1NFUklBTGAgY29uZmlndXJhdGlvbiBvcHRpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBUaGlzIGxpa2VseSBwZXJ0YWlucyB0byBlbmFibGluZyBhIFVTQiBzZXJpYWwgZ2FkZ2V0IGRyaXZlciwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCB0aGUgY29udGV4dHMgaXQncyBtZWFudCB0byBiZSB1c2VkIHdpdGhpbi4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqUGxhY2VtZW50OioqIFdoZXJlIGRvZXMgdGhpcyBvcHRpb24gcmVzaWRlIGluIHRoZSBvdmVyYWxsIFVTQiBjb25maWd1cmF0aW9uIGhpZXJhcmNoeT8gSXMgaXQgdW5kZXIgYSBzcGVjaWZpYyBjb250cm9sbGVyLCBnYWRnZXQgbW9kZSBzZWN0aW9uLCBvciBhIG1vcmUgZ2VuZXJhbCBVU0Igc2VyaWFsIHVtYnJlbGxhP1xuKiAgICoqRGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoaXMgdG8gYmUgdmFsaWQ/IEFyZSB0aGVyZSBhbnkgY29uZmxpY3RpbmcgY2hvaWNlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSBhbnkga2VybmVsIG1vZHVsZXMgaW1wbGljaXRseSBlbmFibGVkIGFzIGEgY29uc2VxdWVuY2Ugb2YgdGhpcyBvcHRpb24/XG4qICAgKipEZWZhdWx0IFZhbHVlOioqIElzIGl0IGB5YCwgYG5gLCBvciBgbWA/IFVuZGVyc3RhbmRpbmcgdGhlIGRlZmF1bHQgZ2l2ZXMgaW5zaWdodCBpbnRvIHRoZSBpbnRlbmRlZCB1c2UgY2FzZSBhbmQgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGlmIHRoZSBkZWZhdWx0IGlzIGNoYW5nZWQuIElzIHRoZXJlIGEgZGVmYXVsdCBzZWxlY3Rpb24gb2YgYSBzcGVjaWZpYyBkZXZpY2U/XG4qICAgKipIZWxwIFRleHQ6KiogVGhlIGhlbHAgdGV4dCBpcyB1c3VhbGx5IHRoZSBmaXJzdCBzb3VyY2Ugb2YgaW5mb3JtYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW5kZWQgdXNlIGNhc2UuIERvZXMgaXQgcHJvdmlkZSB1c2VmdWwgY29udGV4dCBvciBleGFtcGxlcz8gRG9lcyB0aGUgaGVscCB0ZXh0IGRlc2NyaWJlIGFueSBzcGVjaWZpYyByZXF1aXJlbWVudHMgZm9yIHRoaXMgbW9kdWxlP1xuKiAgICoqVHJpZ2dlcnM6KiogV2hhdCBzcGVjaWZpYyBzY2VuYXJpb3Mgb3IgaGFyZHdhcmUgc2V0dXBzIHRyaWdnZXIgdGhlIG5lZWQgdG8gZXhwbGljaXRseSBjb25maWd1cmUgYFVTQl9VX1NFUklBTGA/IEFyZSB0aGVyZSBvdGhlciwgbW9yZSBnZW5lcmljIG9wdGlvbnMgdGhhdCBtaWdodCBpbmRpcmVjdGx5IGltcGFjdCBpdHMgYmVoYXZpb3I/XG4qICAgKipJbXBsaWNhdGlvbnM6KiogV2hhdCBkb2VzIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIG9wdGlvbiAqcmVhbGx5KiBtZWFuIGluIHRlcm1zIG9mIHN5c3RlbSBiZWhhdmlvciBhbmQgcmVzb3VyY2UgdXNhZ2U/IEFyZSB0aGVyZSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBgVVNCYCBkZXZpY2UgaXMgY29ubmVjdGVkIHRvIGFuIGV4dGVybmFsIGRldmljZT9cbiogICAqKkFyY2hpdGVjdHVyZS1TcGVjaWZpYyBDb25kaXRpb25zOioqIEFyZSB0aGVyZSBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGBzZWxlY3RgIHN0YXRlbWVudHMgb3IgZGVwZW5kZW5jaWVzIG9uIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzIChlLmcuLCBzcGVjaWZpYyBVU0IgY29udHJvbGxlcnMpIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZD9cblxuRXNzZW50aWFsbHksIEknbSB0cnlpbmcgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgYFVTQl9VX1NFUklBTGAncyByb2xlIGluIHRoZSBzeXN0ZW0uIFRoZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgyMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIzOjM2OjMwLjAxMjc4MzI3NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDg2MzQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJVU0JfVV9TRVJJQUxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTEzMj1jb25maWcgVV9TRVJJQUxfQ09OU09MRVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTEzMy1cXHRib29sIFxcXCJTZXJpYWwgZ2FkZ2V0IGNvbnNvbGUgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzoxMzQ6XFx0ZGVwZW5kcyBvbiBVU0JfVV9TRVJJQUxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0xMzUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9MTUzPWNvbmZpZyBVU0JfRl9TU19MQlxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTU1LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjE1Njpjb25maWcgVVNCX1VfU0VSSUFMXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTU3LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz0yNDA9Y29uZmlnIFVTQl9DT05GSUdGU19TRVJJQUxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTI0My1cXHRkZXBlbmRzIG9uIFRUWVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjI0NDpcXHRzZWxlY3QgVVNCX1VfU0VSSUFMXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjQ1LVxcdHNlbGVjdCBVU0JfRl9TRVJJQUxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTI0OT1jb25maWcgVVNCX0NPTkZJR0ZTX0FDTVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjUyLVxcdGRlcGVuZHMgb24gVFRZXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MjUzOlxcdHNlbGVjdCBVU0JfVV9TRVJJQUxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0yNTQtXFx0c2VsZWN0IFVTQl9GX0FDTVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9MjU5PWNvbmZpZyBVU0JfQ09ORklHRlNfT0JFWFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjYyLVxcdGRlcGVuZHMgb24gVFRZXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MjYzOlxcdHNlbGVjdCBVU0JfVV9TRVJJQUxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0yNjQtXFx0c2VsZWN0IFVTQl9GX09CRVhcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZT0xMz1vYmotJChDT05GSUdfVVNCX0ZfU1NfTEIpXFx0Kz0gdXNiX2Zfc3NfbGIub1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfVVNCX1VfU0VSSUFMKVxcdCs9IHVfc2VyaWFsLm9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGUtMTUtdXNiX2Zfc2VyaWFsLXlcXHRcXHRcXHQ6PSBmX3NlcmlhbC5vXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc9MjkxPWNvbmZpZyBVU0JfR19TRVJJQUxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy0yOTMtXFx0ZGVwZW5kcyBvbiBUVFlcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc6Mjk0OlxcdHNlbGVjdCBVU0JfVV9TRVJJQUxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMjk1LVxcdHNlbGVjdCBVU0JfRl9BQ01cXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz0zNTE9Y29uZmlnIFVTQl9DRENfQ09NUE9TSVRFXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMzU0LVxcdHNlbGVjdCBVU0JfTElCQ09NUE9TSVRFXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnOjM1NTpcXHRzZWxlY3QgVVNCX1VfU0VSSUFMXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTM1Ni1cXHRzZWxlY3QgVVNCX1VfRVRIRVJcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz0zNzA9Y29uZmlnIFVTQl9HX05PS0lBXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMzc0LVxcdHNlbGVjdCBVU0JfTElCQ09NUE9TSVRFXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnOjM3NTpcXHRzZWxlY3QgVVNCX1VfU0VSSUFMXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTM3Ni1cXHRzZWxlY3QgVVNCX1VfRVRIRVJcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz0zODk9Y29uZmlnIFVTQl9HX0FDTV9NU1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTM5Mi1cXHRzZWxlY3QgVVNCX0xJQkNPTVBPU0lURVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZzozOTM6XFx0c2VsZWN0IFVTQl9VX1NFUklBTFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy0zOTQtXFx0c2VsZWN0IFVTQl9GX0FDTVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnPTQwMz1jb25maWcgVVNCX0dfTVVMVElcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy00MDctXFx0c2VsZWN0IFVTQl9MSUJDT01QT1NJVEVcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc6NDA4OlxcdHNlbGVjdCBVU0JfVV9TRVJJQUxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctNDA5LVxcdHNlbGVjdCBVU0JfVV9FVEhFUlxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnPTQ5MD1jb25maWcgVVNCX0dfREJHUF9TRVJJQUxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctNDkxLVxcdGRlcGVuZHMgb24gVVNCX0dfREJHUFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZzo0OTI6XFx0c2VsZWN0IFVTQl9VX1NFUklBTFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy00OTMtXFx0Ym9vbCBcXFwic2VyaWFsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMzozNjozMC4wNjM2NDk3MTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODU5NjkyNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIFN5emthbGxlcidzIFVTQiBHYWRnZXQgVGVzdGluZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHN5emthbGxlciBhY3R1YWxseSBwbGF5cyB3aXRoIFVTQiBnYWRnZXQgZHJpdmVycy4gSSBrbm93IGl0IGludGVyYWN0cyBoZWF2aWx5IHdpdGggdGhlbSwgdXNpbmcgdGhpbmdzIGxpa2UgYGR1bW15X2hjZGAsIHRoZSBgY29uZmlnZnNgIGdhZGdldCwgYW5kIGBnX3NlcmlhbGAuIEl04oCZcyBhbGwgdmVyeSBoYW5kcy1vbiwgbGV2ZXJhZ2luZyBgL2Rldi9nYWRnZXRgLCBDb25maWdGUyBVU0IgZ2FkZ2V0cywgYW5kIGV2ZW4gdGhlIHJhdy1nYWRnZXQgYXBwcm9hY2guIEJ1dCBJIG5lZWQgdG8gZ28gZGVlcGVyIHRoYW4gdGhhdC5cblxuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZXNlIGB0dHlHUypgIGNoYXJhY3RlciBkZXZpY2VzLCBgL2Rldi90dHlHUzBgIGFuZCBzbyBvbi4gVGhhdCBgdV9zZXJpYWwuY2AgY29kZSBpcyBrZXksIGJlY2F1c2UgdXNlcnNwYWNlIGNhbiBkaXJlY3RseSBvcGVuLCBjbG9zZSwgcmVhZCwgd3JpdGUsIGFuZCB1c2UgYGlvY3RsYCBvbiB0aGVtISBTbywgSSBuZWVkIHRvIHJlYWxseSBkaWcgaW50byBgdV9zZXJpYWwuY2AuIFRoYXTigJlzIHdoZXJlIHRoZSBtYWdpYyBvZiBjcmVhdGluZyB0aGVzZSBzcGVjaWZpYyBkcml2ZXIvZGV2aWNlIGludGVyYWN0aW9ucyBpcyBoYXBwZW5pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGF0IGRyaXZlciBpcyBjcmVhdGluZyBhbmQgaG93IHN5emthbGxlciBpcyBsZXZlcmFnaW5nIGl0IHRvIGZpbmQgYnVncy4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBvZiB0aGUgZnV6emluZyBwcm9iYWJseSBpcyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NzAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjM6MzY6MzIuOTIzMzQ0ODJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5MzQ2MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHR5X3JlZ2lzdGVyX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmM9MTU2Mj1zdGF0aWMgaW50IF9faW5pdCB1c2VyaWFsX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jLTE1OTQtXFx0LyogZXhwb3J0IHRoZSBkcml2ZXIgLi4uICovXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmM6MTU5NTpcXHRzdGF0dXMgPSB0dHlfcmVnaXN0ZXJfZHJpdmVyKGRyaXZlcik7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMtMTU5Ni1cXHRpZiAoc3RhdHVzKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIzOjM2OjMyLjk3MzI4MzgwN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4ODgyMDg3NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmVhZGluZyBhbmQgYW5hbHl6aW5nIHRoYXQgc3BlY2lmaWMgY29kZSBzZWN0aW9uOlxuXG4qKkRpdmluZyBpbnRvIHVfc2VyaWFsLmM6IFBhcnNpbmcgdGhlIERldGFpbHMqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgaW4gb24gbGluZXMgMTU2MCB0byAxNjAwIHdpdGhpbiBgZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmNgLiBUaGlzIHRlbGxzIG1lIHdlJ3JlIGRlZXAgd2l0aGluIHRoZSBVU0IgZ2FkZ2V0IGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IHRoZSBzZXJpYWwgZW11bGF0aW9uIGRyaXZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBpbiB0aGlzIHNlY3Rpb24gYmVjYXVzZSBpdCdzIHByb2JhYmx5IGhhbmRsaW5nIHNvbWUga2V5IGFzcGVjdCBvZiBob3cgdGhlIHNlcmlhbCBkZXZpY2UgaXMgcHJlc2VudGVkIHRvIHRoZSBob3N0LiBCYXNlZCBvbiB0aGUgZmlsZSBuYW1lLCBpdCdzIGxpa2VseSBpbnZvbHZlZCB3aXRoIGRhdGEgdHJhbnNmZXIgb3IgY29udHJvbCBzaWduYWxzLCBvciBtYXliZSBldmVuIGNvbmZpZ3VyYXRpb24gb2YgdGhlIFVTQiBzZXJpYWwgaW50ZXJmYWNlIGl0c2VsZi4gSSdtIGV4cGVjdGluZyB0byBzZWUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gaGFuZGxpbmcgaW5jb21pbmcgZGF0YSBmcm9tIHRoZSBob3N0LCBxdWV1ZWluZyBvdXRnb2luZyBkYXRhLCBvciBtYW5hZ2luZyB0aGUgdmFyaW91cyBzZXJpYWwgY29udHJvbCBzaWduYWxzIChsaWtlIERUUiwgUlRTLCBldGMuKSBpZiB0aGlzIGRyaXZlciBzdXBwb3J0cyB0aGVtLiBNeSBpbml0aWFsIGh5cG90aGVzaXMgaXMgdGhhdCBJIHdpbGwgZmluZCB0aGUgbG9naWMgZGVhbGluZyB3aXRoIGVpdGhlciBhIGhhcmR3YXJlIG9yIHNvZnR3YXJlIEZJRk8gYnVmZmVyLiBJJ2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGRlZmluZWQgb3IgYWNjZXNzZWQgd2l0aGluIHRoaXMgcmVnaW9uIHRvIHNlZSBob3cgdGhlIGRyaXZlciBtYWludGFpbnMgdGhlIGRhdGEgZmxvdywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcmFjZSBjb25kaXRpb25zIHRvIGJlIGF2b2lkZWQuIEknbSBhbHNvIGdvaW5nIHRvIGNoZWNrIGZvciBlcnJvciBoYW5kbGluZzsgYSBzZXJpYWwgZHJpdmVyIGlzIG5vdG9yaW91c2x5IHByb25lIHRvIGVycm9ycyBpbiBhIHJlYWwgd29ybGQuIFNvLCBpdCBzaG91bGQgYmUgd2VsbC1ndWFyZGVkIGFnYWluc3QgYmFkIGRhdGEgb3IgbWlzY29uZmlndXJlZCBoYXJkd2FyZS4gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRvbywgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LiBXaGF0IGZ1bmN0aW9ucyBjYWxsIGludG8gdGhpcyBzZWN0aW9uPyBXaGF0IGFyZSB0aGUgZW50cnkgcG9pbnRzPyBJJ20gYW50aWNpcGF0aW5nIHRoYXQgdGhlc2UgbGluZXMgd2lsbCBlaXRoZXIgYmUgcGFydCBvZiBhIGNyaXRpY2FsIHNlY3Rpb24gZm9yIGRhdGEgdHJhbnNmZXIgb3Igc2V0dGluZyB1cCBhIFVTQiBlbmRwb2ludCBkZWRpY2F0ZWQgZm9yIHNlcmlhbCBkYXRhLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5OTgsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMzozNjozNS44NjE0OTUxNTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1NjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1NjA6XFx0RVhQT1JUX1NZTUJPTF9HUEwoZ3NlcmlhbF9yZXN1bWUpO1xcbjE1NjE6XFx0XFxuMTU2MjpcXHRzdGF0aWMgaW50IF9faW5pdCB1c2VyaWFsX2luaXQodm9pZClcXG4xNTYzOlxcdHtcXG4xNTY0OlxcdFxcdHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXI7XFxuMTU2NTpcXHRcXHR1bnNpZ25lZFxcdFxcdFxcdGk7XFxuMTU2NjpcXHRcXHRpbnRcXHRcXHRcXHRcXHRzdGF0dXM7XFxuMTU2NzpcXHRcXG4xNTY4OlxcdFxcdGRyaXZlciA9IHR0eV9hbGxvY19kcml2ZXIoTUFYX1VfU0VSSUFMX1BPUlRTLCBUVFlfRFJJVkVSX1JFQUxfUkFXIHxcXG4xNTY5OlxcdFxcdFxcdFxcdFRUWV9EUklWRVJfRFlOQU1JQ19ERVYpO1xcbjE1NzA6XFx0XFx0aWYgKElTX0VSUihkcml2ZXIpKVxcbjE1NzE6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZHJpdmVyKTtcXG4xNTcyOlxcdFxcbjE1NzM6XFx0XFx0ZHJpdmVyLVxcdTAwM2Vkcml2ZXJfbmFtZSA9IFxcXCJnX3NlcmlhbFxcXCI7XFxuMTU3NDpcXHRcXHRkcml2ZXItXFx1MDAzZW5hbWUgPSBcXFwidHR5R1NcXFwiO1xcbjE1NzU6XFx0XFx0LyogdXNlcyBkeW5hbWljYWxseSBhc3NpZ25lZCBkZXZfdCB2YWx1ZXMgKi9cXG4xNTc2OlxcdFxcbjE1Nzc6XFx0XFx0ZHJpdmVyLVxcdTAwM2V0eXBlID0gVFRZX0RSSVZFUl9UWVBFX1NFUklBTDtcXG4xNTc4OlxcdFxcdGRyaXZlci1cXHUwMDNlc3VidHlwZSA9IFNFUklBTF9UWVBFX05PUk1BTDtcXG4xNTc5OlxcdFxcdGRyaXZlci1cXHUwMDNlaW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zO1xcbjE1ODA6XFx0XFxuMTU4MTpcXHRcXHQvKiA5NjAwLTgtTi0xIC4uLiBtYXRjaGVzIGRlZmF1bHRzIGV4cGVjdGVkIGJ5IFxcXCJ1c2JzZXIuc3lzXFxcIiBvblxcbjE1ODI6XFx0XFx0ICogTVMtV2luZG93cy4gIE90aGVyd2lzZSwgbW9zdCBvZiB0aGVzZSBmbGFncyBzaG91bGRuJ3QgYWZmZWN0XFxuMTU4MzpcXHRcXHQgKiBhbnl0aGluZyB1bmxlc3Mgd2Ugd2VyZSB0byBhY3R1YWxseSBob29rIHVwIHRvIGEgc2VyaWFsIGxpbmUuXFxuMTU4NDpcXHRcXHQgKi9cXG4xNTg1OlxcdFxcdGRyaXZlci1cXHUwMDNlaW5pdF90ZXJtaW9zLmNfY2ZsYWcgPVxcbjE1ODY6XFx0XFx0XFx0XFx0Qjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMO1xcbjE1ODc6XFx0XFx0ZHJpdmVyLVxcdTAwM2Vpbml0X3Rlcm1pb3MuY19pc3BlZWQgPSA5NjAwO1xcbjE1ODg6XFx0XFx0ZHJpdmVyLVxcdTAwM2Vpbml0X3Rlcm1pb3MuY19vc3BlZWQgPSA5NjAwO1xcbjE1ODk6XFx0XFxuMTU5MDpcXHRcXHR0dHlfc2V0X29wZXJhdGlvbnMoZHJpdmVyLCBcXHUwMDI2Z3NfdHR5X29wcyk7XFxuMTU5MTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFYX1VfU0VSSUFMX1BPUlRTOyBpKyspXFxuMTU5MjpcXHRcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZwb3J0c1tpXS5sb2NrKTtcXG4xNTkzOlxcdFxcbjE1OTQ6XFx0XFx0LyogZXhwb3J0IHRoZSBkcml2ZXIgLi4uICovXFxuMTU5NTpcXHRcXHRzdGF0dXMgPSB0dHlfcmVnaXN0ZXJfZHJpdmVyKGRyaXZlcik7XFxuMTU5NjpcXHRcXHRpZiAoc3RhdHVzKSB7XFxuMTU5NzpcXHRcXHRcXHRwcl9lcnIoXFxcIiVzOiBjYW5ub3QgcmVnaXN0ZXIsIGVyciAlZFxcXFxuXFxcIixcXG4xNTk4OlxcdFxcdFxcdFxcdFxcdF9fZnVuY19fLCBzdGF0dXMpO1xcbjE1OTk6XFx0XFx0XFx0Z290byBmYWlsO1xcbjE2MDA6XFx0XFx0fVxcbjE2MDE6XFx0XFxuMTYwMjpcXHRcXHRnc190dHlfZHJpdmVyID0gZHJpdmVyO1xcbjE2MDM6XFx0XFxuMTYwNDpcXHRcXHRwcl9kZWJ1ZyhcXFwiJXM6IHJlZ2lzdGVyZWQgJWQgdHR5R1MqIGRldmljZSVzXFxcXG5cXFwiLCBfX2Z1bmNfXyxcXG4xNjA1OlxcdFxcdFxcdFxcdE1BWF9VX1NFUklBTF9QT1JUUyxcXG4xNjA2OlxcdFxcdFxcdFxcdHN0cl9wbHVyYWwoTUFYX1VfU0VSSUFMX1BPUlRTKSk7XFxuMTYwNzpcXHRcXG4xNjA4OlxcdFxcdHJldHVybiBzdGF0dXM7XFxuMTYwOTpcXHRmYWlsOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMzozNjozNS44NjE2MTEzMTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIwMjY0MDI3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBjdXJyZW50IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipQb3J0IEFsbG9jYXRpb24sIERlYWxsb2NhdGlvbiwgYW5kIFVTQiBTZXJpYWwgSW50ZXJhY3Rpb25zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGhvdyBwb3J0cyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIFVTQiBzZXJpYWwgZGV2aWNlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHN0cmF0ZWdpZXMuIEknbSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIG1lY2hhbmlzbXMgaW52b2x2ZWQg4oCTIGFyZSB3ZSB0YWxraW5nIGFib3V0IGR5bmFtaWMgYWxsb2NhdGlvbiBmcm9tIGEgcG9vbCwgc29tZSBraW5kIG9mIHBlcnNpc3RlbnQgbWFwcGluZywgb3IgYSBjb21iaW5hdGlvbj8gQW5kIGFyZSB0aGVyZSBhbnkgcmFjZSBjb25kaXRpb25zIEkgbmVlZCB0byBiZSBwYXJ0aWN1bGFybHkgd2FyeSBvZiwgZXNwZWNpYWxseSB3aGVuIGRldmljZXMgYXJlIGhvdC1wbHVnZ2VkIGFuZCB1bnBsdWdnZWQ/XG5cbkknbSBmb2N1c2luZyBvbiB0aGUgVVNCIHNlcmlhbCBhc3BlY3QgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhpbmdzIGNhbiBnZXQgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBtYXAgb3V0IGhvdyB0aGUgVVNCIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgcG9ydCBhbGxvY2F0aW9uIHN5c3RlbS4gRG9lcyBpdCByZXF1ZXN0IGEgcG9ydCBkaXJlY3RseSwgb3IgZG9lcyBpdCB0cmlnZ2VyIHNvbWUgaW50ZXJtZWRpYXRlIHNlcnZpY2U/IEhvdyBkb2VzIHRoZSBzeXN0ZW0gaGFuZGxlIGNvbnRlbnRpb24gaWYgbXVsdGlwbGUgVVNCIHNlcmlhbCBkZXZpY2VzIGFyZSBjb25uZWN0ZWQgc2ltdWx0YW5lb3VzbHk/IFdoYXQgaGFwcGVucyBkdXJpbmcgYSBkZXZpY2UgZGlzY29ubmVjdCDigJMgaG93IGNsZWFubHkgaXMgdGhlIHBvcnQgcmVsZWFzZWQsIGFuZCB3aGF0IHNpZ25hbHMgcHJvcGFnYXRlIHVwIHRoZSBzdGFjaz8gSSdtIGFsc28gY29uc2lkZXJpbmcgaG93IGVycm9yIGhhbmRsaW5nIGlzIGludGVncmF0ZWQgaGVyZSwgd2hhdCBhcmUgdGhlIGFwcHJvcHJpYXRlIHJlc3BvbnNlcyBmb3IgaW52YWxpZCByZXF1ZXN0cyBvciByZXNvdXJjZSBsaW1pdGF0aW9ucz8gSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIFVTQiBzZXJpYWwgZHJpdmVyLCB0aGUgc2VyaWFsIHBvcnQgYWJzdHJhY3Rpb24sIGFuZCB0aGUgdW5kZXJseWluZyBwb3J0IGFsbG9jYXRpb24gbGF5ZXIuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugc3lzdGVtcyB3b3JrIHRvZ2V0aGVyLCB0byBkZXRlcm1pbmUgaWYgdGhlIGltcGxlbWVudGF0aW9uIGNhbiBiZSBvcHRpbWl6ZWQsIGFuZCB0byBmaW5kIG91dCB0aGUgd2VhayBwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMjcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIzOjM2OjM5LjA2NDI1NDcxMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk0MDg2MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdzZXJpYWxfYWxsb2NfbGluZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfYWNtLmM9ODgwPXN0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uX2luc3RhbmNlICphY21fYWxsb2NfaW5zdGFuY2Uodm9pZClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX2FjbS5jLTg5MC1cXHRtdXRleF9pbml0KFxcdTAwMjZvcHRzLVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9hY20uYzo4OTE6XFx0cmV0ID0gZ3NlcmlhbF9hbGxvY19saW5lKFxcdTAwMjZvcHRzLVxcdTAwM2Vwb3J0X251bSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfYWNtLmMtODkyLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX29iZXguYz00MjQ9c3RhdGljIHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgKm9iZXhfYWxsb2NfaW5zdCh2b2lkKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2Zfb2JleC5jLTQzMy1cXHRvcHRzLVxcdTAwM2VmdW5jX2luc3QuZnJlZV9mdW5jX2luc3QgPSBvYmV4X2ZyZWVfaW5zdDtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9vYmV4LmM6NDM0OlxcdHJldCA9IGdzZXJpYWxfYWxsb2NfbGluZV9ub19jb25zb2xlKFxcdTAwMjZvcHRzLVxcdTAwM2Vwb3J0X251bSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2Zfb2JleC5jLTQzNS1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9zZXJpYWwuYz0zMTU9c3RhdGljIHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgKmdzZXJfYWxsb2NfaW5zdCh2b2lkKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2Zfc2VyaWFsLmMtMzI0LVxcdG9wdHMtXFx1MDAzZWZ1bmNfaW5zdC5mcmVlX2Z1bmNfaW5zdCA9IGdzZXJfZnJlZV9pbnN0O1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3NlcmlhbC5jOjMyNTpcXHRyZXQgPSBnc2VyaWFsX2FsbG9jX2xpbmUoXFx1MDAyNm9wdHMtXFx1MDAzZXBvcnRfbnVtKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9zZXJpYWwuYy0zMjYtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMtNDItICogQWZ0ZXIgdGhpcyBtb2R1bGUgaGFzIGJlZW4gbG9hZGVkLCB0aGUgaW5kaXZpZHVhbCBUVFkgcG9ydCBjYW4gYmUgcmVxdWVzdGVkXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmM6NDM6ICogKGdzZXJpYWxfYWxsb2NfbGluZSgpKSBhbmQgaXQgd2lsbCBzdGF5IGF2YWlsYWJsZSB1bnRpbCB0aGV5IGFyZSByZW1vdmVkXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMtNDQtICogKGdzZXJpYWxfZnJlZV9saW5lKCkpLiBFYWNoIG9uZSBtYXkgYmUgY29ubmVjdGVkIHRvIGEgVVNCIGZ1bmN0aW9uXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYz0xMjk5PUVYUE9SVF9TWU1CT0xfR1BMKGdzZXJpYWxfZnJlZV9saW5lKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYy0xMzAwLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jOjEzMDE6aW50IGdzZXJpYWxfYWxsb2NfbGluZV9ub19jb25zb2xlKHVuc2lnbmVkIGNoYXIgKmxpbmVfbnVtKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jLTEzMDIte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMtMTM0NC19XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmM6MTM0NTpFWFBPUlRfU1lNQk9MX0dQTChnc2VyaWFsX2FsbG9jX2xpbmVfbm9fY29uc29sZSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMtMTM0Ni1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYzoxMzQ3OmludCBnc2VyaWFsX2FsbG9jX2xpbmUodW5zaWduZWQgY2hhciAqbGluZV9udW0pXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMtMTM0OC17XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmM6MTM0OTpcXHRpbnQgcmV0ID0gZ3NlcmlhbF9hbGxvY19saW5lX25vX2NvbnNvbGUobGluZV9udW0pO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jLTEzNTAtXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYy0xMzU1LX1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYzoxMzU2OkVYUE9SVF9TWU1CT0xfR1BMKGdzZXJpYWxfYWxsb2NfbGluZSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMtMTM1Ny1cXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jLTEzNzMtICogZW5kcG9pbnQgZGVzY3JpcHRvcnMsIGFuZCBhbHNvIGhhdmUgYWxsb2NhdGUgQHBvcnRfbnVtIGJ5IGNhbGxpbmdcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYzoxMzc0OiAqIEBnc2VyaWFsX2FsbG9jX2xpbmUoKS5cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuYy0xMzc1LSAqXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuaD01OD12b2lkIGdzX2ZyZWVfcmVxKHN0cnVjdCB1c2JfZXAgKiwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmgtNjAtLyogbWFuYWdlbWVudCBvZiBpbmRpdmlkdWFsIFRUWSBwb3J0cyAqL1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5oOjYxOmludCBnc2VyaWFsX2FsbG9jX2xpbmVfbm9fY29uc29sZSh1bnNpZ25lZCBjaGFyICpwb3J0X2xpbmUpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5oOjYyOmludCBnc2VyaWFsX2FsbG9jX2xpbmUodW5zaWduZWQgY2hhciAqcG9ydF9saW5lKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuaC02My12b2lkIGdzZXJpYWxfZnJlZV9saW5lKHVuc2lnbmVkIGNoYXIgcG9ydF9saW5lKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvZGJncC5jPTI3Nz1zdGF0aWMgaW50IGRiZ3BfYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9kYmdwLmMtMzA3LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvZGJncC5jOjMwODpcXHRpZiAoZ3NlcmlhbF9hbGxvY19saW5lKFxcdTAwMjZ0dHlfbGluZSkpIHtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2RiZ3AuYy0zMDktXFx0XFx0c3RwID0gNDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjM6MzY6MzkuMzU4MzQ2MzM5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc5MjI5MzI3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25maWdGUyBHYWRnZXQgU2VyaWFsIERyaXZlciBSZWZhY3RvcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCBjb25jZXJuaW5nIHRoZSBDb25maWdGUyBnYWRnZXQncyBzZXJpYWwgZnVuY3Rpb25hbGl0eSAoYWNtLnVzYjAsIHNlcmlhbC51c2IwLCBldGMuKS4gRmlyc3QsIEknbSB2ZXJpZnlpbmcgdGhlIHN0YW5kYXJkIHdvcmtmbG93OiB1c2Vyc3BhY2UgY3JlYXRlcyB0aGUgc2VyaWFsIGZ1bmN0aW9uIHVzaW5nIGBta2RpcmAgaW4gYC9zeXMva2VybmVsL2NvbmZpZy91c2JfZ2FkZ2V0L2cxL2Z1bmN0aW9ucy9hY20udXNiMGAgd2hpY2ggdHJpZ2dlcnMgdGhlIGBhY21fYWxsb2NfaW5zdGFuY2UoKWAgLVx1MDAzZSBgZ3NlcmlhbF9hbGxvY19saW5lKClgIHBhdGgsIGxlYWRpbmcgdG8gdGhlIGNyZWF0aW9uIG9mIGAvZGV2L3R0eUdTMGAuIFRoZW4sIHN0YW5kYXJkIGBvcGVuYCwgYHJlYWRgLCBgd3JpdGVgLCBgaW9jdGxgIG9wZXJhdGlvbnMgb24gYC9kZXYvdHR5R1MwYCwgYW5kIGZpbmFsbHksIGEgcmVtb3ZhbCBvciB1bmJpbmRpbmcuIFRoaXMgd2hvbGUgc2V0dXAgaXMgcGVyZmVjdGx5IHJlYWNoYWJsZSB1c2luZyBzdGFuZGFyZCBzeXprYWxsZXIgc3lzY2FsbHMsIGFuZCBjYW4gdXRpbGl6ZSB2aXJ0dWFsIGhhcmR3YXJlIGxpa2UgYGR1bW15X2hjZGAgb3IgYHJhd19nYWRnZXRgLlxuXG5Ob3csIHRoZSBjb3JlIG9mIHRoZSBpbnZlc3RpZ2F0aW9uOiB0aGUgcGF0Y2gncyBzcGVjaWZpYyBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIGl0J3MgcmVmYWN0b3JpbmcgdGhlIGBzdHJ1Y3QgZ3NfcG9ydGAgbGlmZWN5Y2xlLCB0aGUgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgYmV0d2VlbiB0aGUgVFRZIGxheWVyIGFuZCB0aGUgVVNCIGdhZGdldCBsYXllci4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlc2UgbW9kaWZpY2F0aW9uczpcblxuMS4gIGBnc19vcGVuYDogVGhlIGNvZGUgbm93IGRpcmVjdGx5IHVzZXMgYHR0eS1cdTAwM2Vkcml2ZXJfZGF0YWAgKHNldCBpbiBgZ3NfaW5zdGFsbGApIGluc3RlYWQgb2YgcmVseWluZyBvbiBpbmRleGluZyBpbnRvIGBwb3J0c1tdYCBhbmQgYWNxdWlyaW5nIGEgbG9jay5cbjIuICBgZ3NfaW5zdGFsbGA6IFRoaXMgbm93IGFjcXVpcmVzIGBwb3J0c1twb3J0X251bV0ubG9ja2AsIHJldHJpZXZlcyB0aGUgcG9ydCwgaW5jcmVhc2VzIHRoZSByZWZlcmVuY2UgY291bnQgdXNpbmcgYHR0eV9wb3J0X2dldGAsIHRoZW4gcmVsZWFzZXMgdGhlIGxvY2ssIGNhbGxzIGB0dHlfc3RhbmRhcmRfaW5zdGFsbGAsIGFuZCBzZXRzIGB0dHktXHUwMDNlZHJpdmVyX2RhdGFgIHRvIHRoZSBwb3J0LlxuMy4gIGBnc19jbGVhbnVwYDogSXQgY2FsbHMgYHR0eV9wb3J0X3B1dGAgdG8gZGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQuXG40LiAgYGdzX3BvcnRfZGVzdHJ1Y3RgOiBUaGlzIGlzIHRoZSBgdHR5X3BvcnRfb3BlcmF0aW9uc2AncyBkZXN0cnVjdCBjYWxsYmFjay4gVGhpcyBmdW5jdGlvbiBjYWxscyBgY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jYCwgYGtmaWZvX2ZyZWVgLCBgdHR5X3BvcnRfZGVzdHJveWAsIGFuZCBmaW5hbGx5IGBrZnJlZWAuXG41LiAgYGdzZXJpYWxfZnJlZV9wb3J0YDogVGhlIHBhdGNoIHJlcGxhY2VzIHRoZSBvbGQgYHdhaXRfZXZlbnRgIHdpdGggYHR0eV9wb3J0X3B1dGAgYW5kIGluY2x1ZGVzIGEgYFdBUk5fT05gIGNoZWNrLlxuXG5NeSBTcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIGNoYW5nZXMuIEkgaGF2ZSB0byBhc3Nlc3Mgd2hldGhlciB0aGVzZSBjaGFuZ2VzIGFyZSBpbnRyb2R1Y2luZyBhbnkgbmV3IGJ1Z3MsIHJhY2VzLCBvciBsb2NraW5nIGlzc3Vlcy4gQW55IG1vZGlmaWNhdGlvbiBpbiB0aGUgbGlmZXRpbWUsIHJlZmVyZW5jZSBjb3VudGluZywgb3Igc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIFRUWSBhbmQgVVNCIGRyaXZlciBzdWJzeXN0ZW1zIGlzIGEgY2xhc3NpYyByZWNpcGUgZm9yIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWVzLCBvciBkZWFkbG9ja3MuXG5cbkEgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNvZGUgcGF0aCBpcyBlYXNpbHkgcmVhY2hhYmxlIGluIGEgUUVNVS9zdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LiBUaGUgZ29vZCBuZXdzIGlzIHRoYXQgdGhlIFVTQiBnYWRnZXQgc3Vic3lzdGVtLCB3aXRoIGNvbmZpZ2ZzIGFuZCBgZHVtbXlfaGNkYC9gcmF3X2dhZGdldGAsIGlzIHN0YW5kYXJkIGluIHN5emthbGxlciwgc28geWVzLCBpdCBpcy5cblxuTmV4dCwgSSBuZWVkIHRvIGtub3cgd2hpY2gga2VybmVsIGNvbmZpZ3MgZW5hYmxlIHRoZSBjb2RlIHBhdGg6IEkgbmVlZCB0byBlbnN1cmUgdGhlIGZvbGxvd2luZyBhcmUgZW5hYmxlZDogYFVTQl9DT05GSUdGU19TRVJJQUxgIG9yIGBVU0JfQ09ORklHRlNfQUNNYCBvciBgVVNCX0NPTkZJR0ZTYCBvciBgVVNCX0dfU0VSSUFMYCwgYFVTQl9VX1NFUklBTGAsIGBVU0JfR0FER0VUYCwgYW5kIGBUVFlgLlxuXG5Ob3csIEknbSBmb2N1c2luZyBvbiB0aGUga2V5IHN5bWJvbHMgdGhhdCBhcmUgZGlyZWN0bHkgaW1wYWN0ZWQgYnkgdGhpcyBwYXRjaC4gSSdsbCBjb25jZW50cmF0ZSBvbjogYGdzX2luc3RhbGxgLCBgZ3Nfb3BlbmAsIGBnc19jbG9zZWAsIGBnc19jbGVhbnVwYCwgYGdzX3BvcnRfZGVzdHJ1Y3RgLCBgZ3NlcmlhbF9mcmVlX3BvcnRgLCBgZ3NlcmlhbF9hbGxvY19saW5lYCwgYW5kIGBnc2VyaWFsX2ZyZWVfbGluZWAuXG5cbkxldCdzIGNoZWNrIHRoZSB2aXNpYmlsaXR5IG9mIHRoZXNlIHN5bWJvbHM7IHdoZXRoZXIgdGhleSBhcmUgZ2xvYmFsIGFuZCBub3Qgc3RhdGljIGlubGluZSBpbiBoZWFkZXJzLiBGcm9tIHdoYXQgSSBzZWUsICBgZ3NfaW5zdGFsbGAsIGBnc19vcGVuYCwgYGdzX2Nsb3NlYCwgYGdzX2NsZWFudXBgLCBgZ3NfcG9ydF9kZXN0cnVjdGAsIGFuZCBgZ3NlcmlhbF9mcmVlX3BvcnRgIGFyZSBzdGF0aWMgaW4gYHVfc2VyaWFsLmNgLCB3aGlsZSBgZ3NlcmlhbF9mcmVlX2xpbmVgIGFuZCBgZ3NlcmlhbF9hbGxvY19saW5lYCBhcmUgZ2xvYmFsLlxuXG5GaW5hbGx5LCBsZXQgbWUgcmUtdmVyaWZ5IHRoZSBjb25maWdzIGluIEtjb25maWc6IGBVU0JfR0FER0VUYCwgYFVTQl9DT05GSUdGU2AsIGBVU0JfQ09ORklHRlNfU0VSSUFMYCwgYFVTQl9DT05GSUdGU19BQ01gLCBhbmQgYFVTQl9VX1NFUklBTGAuIEFuZCBJJ2xsIGRvdWJsZS1jaGVjayBgVVNCX0NPTkZJR0ZTX1NFUklBTGAgaW4gYGRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnYCB0byBtYWtlIHN1cmUgaXQgZXhpc3RzLlxuXG5XaXRoIHRoaXMgc3RydWN0dXJlZCBpbnZlc3RpZ2F0aW9uLCBJIGNhbiBzdGFydCBmb3JtaW5nIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgcGF0Y2gncyBpbXBsaWNhdGlvbnMgYW5kIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkwMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMzozNjo0Ny4yODEyODI5NTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NjgxNzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0JfQ09ORklHRlNfU0VSSUFMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz0yMjg9Y29uZmlnIFVTQl9DT05GSUdGU1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjM5LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjI0MDpjb25maWcgVVNCX0NPTkZJR0ZTX1NFUklBTFxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTI0MS1cXHRib29sIFxcXCJHZW5lcmljIHNlcmlhbCBidWxrIGluL291dFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjM6MzY6NDcuMzI5OTcwNTkzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNjA1MDE5MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFVTQiBDb25maWdGUyBhbmQgV29ydGhGdXp6aW5nIEltcGFjdCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBVU0JfQ09ORklHRlNgLiBMb29raW5nIGF0IGBkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZ2AsIGl0J3MgY2xlYXIgdGhhdCBgVVNCX0NPTkZJR0ZTYCByZXF1aXJlcyBgVVNCX0dBREdFVGAuIFRoYXQgbWFrZXMgc2Vuc2U7IENvbmZpZ0ZTIGlzIGVzc2VudGlhbGx5IGEgd2F5IHRvIGNvbmZpZ3VyZSB0aGUgZ2FkZ2V0LlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBzZXJpYWwgZ2FkZ2V0IGZ1bmN0aW9uYWxpdHksIGBVU0JfQ09ORklHRlNfU0VSSUFMYCBkZXBlbmRzIG9uIGJvdGggYFVTQl9DT05GSUdGU2AgYW5kIGBUVFlgLCB3aGljaCBpcyBleHBlY3RlZCBmb3Igc2VyaWFsIGNvbW11bmljYXRpb24uIEl0ICpzZWxlY3RzKiBgVVNCX1VfU0VSSUFMYCBhbmQgYFVTQl9GX1NFUklBTGAsIHdoaWNoIGFyZSB0aGUgdW5kZXJseWluZyBVU0Igc2VyaWFsIGRyaXZlciBhbmQgZnVuY3Rpb24uIGBVU0JfQ09ORklHRlNfQUNNYCBoYXMgc2ltaWxhciBkZXBlbmRlbmNpZXMgb24gYFVTQl9DT05GSUdGU2AgYW5kIGBUVFlgLCBidXQgaXQgc2VsZWN0cyBgVVNCX1VfU0VSSUFMYCBhbmQgYFVTQl9GX0FDTWAsIGluZGljYXRpbmcgaXQgaGFuZGxlcyBBYnN0cmFjdCBDb250cm9sIE1vZGVsIChBQ00pIGRldmljZXMuXG5cbk5leHQsIEkgbmVlZCB0byByZXZpc2l0IHRoZSBgV29ydGhGdXp6aW5nYCBhc3BlY3QuIEl0J3MgY29uZmlybWVkIGFzIGB0cnVlYCwgYW5kIEkga25vdyB0aGF0IHRoaXMgcGF0Y2ggdG91Y2hlcyBVU0Igc2VyaWFsIGdhZGdldCBjb2RlIOKAkyBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jYC4gVGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIGNvbnNpZGVyaW5nIGl0IGltcGFjdHMgcmVmZXJlbmNlIGNvdW50aW5nLCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgYW5kIHN5bmNocm9uaXphdGlvbi4gVGhlIGZhY3QgdGhhdCB0aGlzIGRyaXZlciBpcyBleHBvc2VkIHRocm91Z2ggQ29uZmlnRlMgKGFuZCByZWxhdGVkIHN1YnN5c3RlbXMgbGlrZSBkdW1teV9oY2QsIHJhdy1nYWRnZXQsIGFuZCB0dHlHUyogbm9kZXMpIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBtYWtlcyB0aGlzIGV2ZW4gbW9yZSBjcml0aWNhbCBmb3Igc2VjdXJpdHkuXG5cbkdpdmVuIHRoZXNlIGZpbmRpbmdzLCBJIGNhbiBub3cgZm9ybXVsYXRlIGEgY29uY2lzZSByZXNwb25zZSBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSByZXBvcnQgYWNjdXJhdGVseSByZWZsZWN0cyB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBgV29ydGhGdXp6aW5nYCBzZXR0aW5nIGFuZCB0aGUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIHRoaXMgbW9kaWZpZWQgY29kZSwgZXNwZWNpYWxseSBjb25jZXJuaW5nIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgc3luY2hyb25pemF0aW9uIHdpdGhpbiB0aGUgVVNCIHNlcmlhbCBnYWRnZXQgZHJpdmVyLCBhY2Nlc3NpYmxlIHZpYSBDb25maWdGUy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5OTEsIk91dHB1dFRva2VucyI6MjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIzOjM2OjUxLjQ5MDQ3NTc4M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0ODg4Mjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfR0FER0VUXCIsXG4gICAgXCJVU0JfQ09ORklHRlNcIixcbiAgICBcIlVTQl9DT05GSUdGU19TRVJJQUxcIixcbiAgICBcIlVTQl9DT05GSUdGU19BQ01cIixcbiAgICBcIlVTQl9VX1NFUklBTFwiLFxuICAgIFwiVFRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3NfaW5zdGFsbFwiLFxuICAgIFwiZ3NfY2xlYW51cFwiLFxuICAgIFwiZ3NfcG9ydF9kZXN0cnVjdFwiLFxuICAgIFwiZ3Nfb3BlblwiLFxuICAgIFwiZ3NfY2xvc2VcIixcbiAgICBcImdzZXJpYWxfZnJlZV9wb3J0XCIsXG4gICAgXCJnc2VyaWFsX2ZyZWVfbGluZVwiLFxuICAgIFwiZ3NlcmlhbF9hbGxvY19saW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzdHJ1Y3R1cmVzIHRoZSBsaWZlY3ljbGUsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIG9wZW4vY2xvc2Ugc3luY2hyb25pemF0aW9uIG9mIHRoZSBVU0Igc2VyaWFsIGdhZGdldCBkcml2ZXIgKHVfc2VyaWFsLmMpIHVzaW5nIHR0eV9wb3J0X29wZXJhdGlvbnMgKC5kZXN0cnVjdCkgYW5kIHR0eV9wb3J0X2dldC9wdXQgYWNyb3NzIGluc3RhbGwgYW5kIGNsZWFudXAgY2FsbGJhY2tzIGluc3RlYWQgb2YgbWFudWFsIHdhaXRxdWV1ZSB0cmFja2luZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgVVNCIGdhZGdldCBDb25maWdGUywgZHVtbXlfaGNkLCBvciByYXctZ2FkZ2V0IGFsb25nIHdpdGggdHR5R1MqIGRldmljZSBvcGVyYXRpb25zLCBtYWtpbmcgaXQgYW4gaW1wb3J0YW50IHRhcmdldCBmb3IgY29uY3VycmVuY3kgYW5kIGxpZmVjeWNsZSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9HQURHRVRcIixcbiAgICBcIlVTQl9DT05GSUdGU1wiLFxuICAgIFwiVVNCX0NPTkZJR0ZTX1NFUklBTFwiLFxuICAgIFwiVVNCX0NPTkZJR0ZTX0FDTVwiLFxuICAgIFwiVVNCX1VfU0VSSUFMXCIsXG4gICAgXCJUVFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnc19pbnN0YWxsXCIsXG4gICAgXCJnc19jbGVhbnVwXCIsXG4gICAgXCJnc19wb3J0X2Rlc3RydWN0XCIsXG4gICAgXCJnc19vcGVuXCIsXG4gICAgXCJnc19jbG9zZVwiLFxuICAgIFwiZ3NlcmlhbF9mcmVlX3BvcnRcIixcbiAgICBcImdzZXJpYWxfZnJlZV9saW5lXCIsXG4gICAgXCJnc2VyaWFsX2FsbG9jX2xpbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXN0cnVjdHVyZXMgdGhlIGxpZmVjeWNsZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgb3Blbi9jbG9zZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFVTQiBzZXJpYWwgZ2FkZ2V0IGRyaXZlciAodV9zZXJpYWwuYykgdXNpbmcgdHR5X3BvcnRfb3BlcmF0aW9ucyAoLmRlc3RydWN0KSBhbmQgdHR5X3BvcnRfZ2V0L3B1dCBhY3Jvc3MgaW5zdGFsbCBhbmQgY2xlYW51cCBjYWxsYmFja3MgaW5zdGVhZCBvZiBtYW51YWwgd2FpdHF1ZXVlIHRyYWNraW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBVU0IgZ2FkZ2V0IENvbmZpZ0ZTLCBkdW1teV9oY2QsIG9yIHJhdy1nYWRnZXQgYWxvbmcgd2l0aCB0dHlHUyogZGV2aWNlIG9wZXJhdGlvbnMsIG1ha2luZyBpdCBhbiBpbXBvcnRhbnQgdGFyZ2V0IGZvciBjb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIzOjM2OjUxLjU3NTM3MjE1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTMwMDkyNTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjM6MzY6NTEuNTc2MDI1NDVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NTI5NDM1MzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgb2YgYHN0cnVjdCBnc19wb3J0YCBpbiBgZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmNgIHVzaW5nIHN0YW5kYXJkIGB0dHlfcG9ydGAgcmVmY291bnRpbmcgKGB0dHlfcG9ydF9nZXRgL2B0dHlfcG9ydF9wdXRgLCBgdHR5X29wZXJhdGlvbnMuaW5zdGFsbGAsIGB0dHlfb3BlcmF0aW9ucy5jbGVhbnVwYCwgYW5kIGB0dHlfcG9ydF9vcGVyYXRpb25zLmRlc3RydWN0YCkuXFxuXFxuVGhpcyByZWZhY3RvcmluZyBhZGRyZXNzZXMgdHR5IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgaXNzdWVzIChwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIGFuZCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiBsaW5lIHRlYXJkb3duIGFuZCB0dHkgb3BlcmF0aW9ucykuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBkbyBub3QgY29weSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSwgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIHJlZmNvdW50aW5nIGltYmFsYW5jZXMsIG9yIGxvY2tpbmcgaXNzdWVzKSBhcmUgdGhvcm91Z2hseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCByZWZjb3VudCB0cmFja2luZywgYW5kIExPQ0tERVAgYnVpbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk1MGU0ZmQyZjM4ZDE1ZWVjNTZkZmVmNGYyYTFjOTlkODIxYzU0MGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDIzOjM2OjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3Vfc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuY1xuaW5kZXggY2RkMWRmYzY2NmM0Zi4uYzgyYzU4ODhjNmM0OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jXG4rKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuY1xuQEAgLTEyNSw3ICsxMjUsNiBAQCBzdHJ1Y3QgZ3NfcG9ydCB7XG4gXHRzdHJ1Y3Qga2ZpZm9cdFx0cG9ydF93cml0ZV9idWY7XG4gXHR3YWl0X3F1ZXVlX2hlYWRfdFx0ZHJhaW5fd2FpdDtcdC8qIHdhaXQgd2hpbGUgd3JpdGVzIGRyYWluICovXG4gXHRib29sICAgICAgICAgICAgICAgICAgICB3cml0ZV9idXN5O1xuLVx0d2FpdF9xdWV1ZV9oZWFkX3RcdGNsb3NlX3dhaXQ7XG4gXHRib29sXHRcdFx0c3VzcGVuZGVkO1x0LyogcG9ydCBzdXNwZW5kZWQgKi9cbiBcdGJvb2xcdFx0XHRzdGFydF9kZWxheWVkO1x0LyogZGVsYXkgc3RhcnQgd2hlbiBzdXNwZW5kZWQgKi9cbiBcdHN0cnVjdCBhc3luY19pY291bnRcdGljb3VudDtcbkBAIC02MTAsMTcgKzYwOSw5IEBAIHN0YXRpYyBpbnQgZ3NlcmlhbF93YWtldXBfaG9zdChzdHJ1Y3QgZ3NlcmlhbCAqZ3NlcilcbiAgKi9cbiBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuLVx0aW50XHRcdHBvcnRfbnVtID0gdHR5LVx1MDAzZWluZGV4O1xuLVx0c3RydWN0IGdzX3BvcnRcdCpwb3J0O1xuK1x0c3RydWN0IGdzX3BvcnRcdCpwb3J0ID0gdHR5LVx1MDAzZWRyaXZlcl9kYXRhO1xuIFx0aW50XHRcdHN0YXR1cyA9IDA7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnBvcnRzW3BvcnRfbnVtXS5sb2NrKTtcbi1cdHBvcnQgPSBwb3J0c1twb3J0X251bV0ucG9ydDtcbi1cdGlmICghcG9ydCkge1xuLVx0XHRzdGF0dXMgPSAtRU5PREVWO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0X2xvY2spO1xuIFxuIFx0LyogYWxsb2NhdGUgY2lyY3VsYXIgYnVmZmVyIG9uIGZpcnN0IG9wZW4gKi9cbkBAIC02MjgsMTcgKzYxOSwxMiBAQCBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZwb3J0LVx1MDAzZXBvcnRfbG9jayk7XG4gXG4tXHRcdC8qXG4tXHRcdCAqIHBvcnRtYXN0ZXIncyBtdXRleCBzdGlsbCBwcm90ZWN0cyBmcm9tIHNpbXVsdGFuZW91cyBvcGVuKCksXG4tXHRcdCAqIGFuZCBjbG9zZSgpIGNhbid0IGhhcHBlbiwgeWV0LlxuLVx0XHQgKi9cbi1cbiBcdFx0c3RhdHVzID0ga2ZpZm9fYWxsb2MoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0X3dyaXRlX2J1ZixcbiBcdFx0XHRcdCAgICAgV1JJVEVfQlVGX1NJWkUsIEdGUF9LRVJORUwpO1xuIFx0XHRpZiAoc3RhdHVzKSB7XG4gXHRcdFx0cHJfZGVidWcoXCJnc19vcGVuOiB0dHlHUyVkICglcCwlcCkgbm8gYnVmZmVyXFxuXCIsXG4tXHRcdFx0XHQgcG9ydF9udW0sIHR0eSwgZmlsZSk7XG4tXHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0XHQgcG9ydC1cdTAwM2Vwb3J0X251bSwgdHR5LCBmaWxlKTtcbitcdFx0XHRyZXR1cm4gc3RhdHVzO1xuIFx0XHR9XG4gXG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0X2xvY2spO1xuQEAgLTY0OCw3ICs2MzQsNiBAQCBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRpZiAocG9ydC1cdTAwM2Vwb3J0LmNvdW50KyspXG4gXHRcdGdvdG8gZXhpdF91bmxvY2tfcG9ydDtcbiBcbi1cdHR0eS1cdTAwM2Vkcml2ZXJfZGF0YSA9IHBvcnQ7XG4gXHRwb3J0LVx1MDAzZXBvcnQudHR5ID0gdHR5O1xuIFxuIFx0LyogaWYgY29ubmVjdGVkLCBzdGFydCB0aGUgSS9PIHN0cmVhbSAqL1xuQEAgLTY3Miw4ICs2NTcsNiBAQCBzdGF0aWMgaW50IGdzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXG4gZXhpdF91bmxvY2tfcG9ydDpcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZwb3J0LVx1MDAzZXBvcnRfbG9jayk7XG4tb3V0OlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBvcnRzW3BvcnRfbnVtXS5sb2NrKTtcbiBcdHJldHVybiBzdGF0dXM7XG4gfVxuIFxuQEAgLTc0NCw3ICs3MjcsNiBAQCBzdGF0aWMgdm9pZCBnc19jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHByX2RlYnVnKFwiZ3NfY2xvc2U6IHR0eUdTJWQgKCVwLCVwKSBkb25lIVxcblwiLFxuIFx0XHRcdHBvcnQtXHUwMDNlcG9ydF9udW0sIHR0eSwgZmlsZSk7XG4gXG4tXHR3YWtlX3VwKFx1MDAyNnBvcnQtXHUwMDNlY2xvc2Vfd2FpdCk7XG4gZXhpdDpcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZwb3J0LVx1MDAzZXBvcnRfbG9jayk7XG4gfVxuQEAgLTkwOCw3ICs4OTAsNDIgQEAgc3RhdGljIGludCBnc19nZXRfaWNvdW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBnc19pbnN0YWxsKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4re1xuK1x0aW50IHBvcnRfbnVtID0gdHR5LVx1MDAzZWluZGV4O1xuK1x0c3RydWN0IGdzX3BvcnQgKnBvcnQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwb3J0c1twb3J0X251bV0ubG9jayk7XG4rXHRwb3J0ID0gcG9ydHNbcG9ydF9udW1dLnBvcnQ7XG4rXHRpZiAoIXBvcnQpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBvcnRzW3BvcnRfbnVtXS5sb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXG4rXHR0dHlfcG9ydF9nZXQoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwb3J0c1twb3J0X251bV0ubG9jayk7XG4rXG4rXHRyZXQgPSB0dHlfc3RhbmRhcmRfaW5zdGFsbChkcml2ZXIsIHR0eSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHR0eV9wb3J0X3B1dChcdTAwMjZwb3J0LVx1MDAzZXBvcnQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0dHR5LVx1MDAzZWRyaXZlcl9kYXRhID0gcG9ydDtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBnc19jbGVhbnVwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4re1xuK1x0c3RydWN0IGdzX3BvcnQgKnBvcnQgPSB0dHktXHUwMDNlZHJpdmVyX2RhdGE7XG4rXG4rXHRpZiAocG9ydClcbitcdFx0dHR5X3BvcnRfcHV0KFx1MDAyNnBvcnQtXHUwMDNlcG9ydCk7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgZ3NfdHR5X29wcyA9IHtcbitcdC5pbnN0YWxsID1cdFx0Z3NfaW5zdGFsbCxcbiBcdC5vcGVuID1cdFx0XHRnc19vcGVuLFxuIFx0LmNsb3NlID1cdFx0Z3NfY2xvc2UsXG4gXHQud3JpdGUgPVx0XHRnc193cml0ZSxcbkBAIC05MTksNiArOTM2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBnc190dHlfb3BzID0ge1xuIFx0LnVudGhyb3R0bGUgPVx0XHRnc191bnRocm90dGxlLFxuIFx0LmJyZWFrX2N0bCA9XHRcdGdzX2JyZWFrX2N0bCxcbiBcdC5nZXRfaWNvdW50ID1cdFx0Z3NfZ2V0X2ljb3VudCxcbitcdC5jbGVhbnVwID1cdFx0Z3NfY2xlYW51cCxcbiB9O1xuIFxuIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5AQCAtMTIwMyw2ICsxMjIxLDIwIEBAIHN0YXRpYyB2b2lkIGdzX2NvbnNvbGVfZXhpdChzdHJ1Y3QgZ3NfcG9ydCAqcG9ydClcbiBcbiAjZW5kaWZcbiBcbitzdGF0aWMgdm9pZCBnc19wb3J0X2Rlc3RydWN0KHN0cnVjdCB0dHlfcG9ydCAqcG9ydClcbit7XG4rXHRzdHJ1Y3QgZ3NfcG9ydCAqZ3NfcG9ydCA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgZ3NfcG9ydCwgcG9ydCk7XG4rXG4rXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2Z3NfcG9ydC1cdTAwM2VwdXNoKTtcbitcdGtmaWZvX2ZyZWUoXHUwMDI2Z3NfcG9ydC1cdTAwM2Vwb3J0X3dyaXRlX2J1Zik7XG4rXHR0dHlfcG9ydF9kZXN0cm95KHBvcnQpO1xuK1x0a2ZyZWUoZ3NfcG9ydCk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X3BvcnRfb3BlcmF0aW9ucyBnc19wb3J0X29wcyA9IHtcbitcdC5kZXN0cnVjdCA9IGdzX3BvcnRfZGVzdHJ1Y3QsXG4rfTtcbitcbiBzdGF0aWMgaW50XG4gZ3NfcG9ydF9hbGxvYyh1bnNpZ25lZCBwb3J0X251bSwgc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcgKmNvZGluZylcbiB7XG5AQCAtMTIyMiw5ICsxMjU0LDkgQEAgZ3NfcG9ydF9hbGxvYyh1bnNpZ25lZCBwb3J0X251bSwgc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcgKmNvZGluZylcbiBcdH1cbiBcbiBcdHR0eV9wb3J0X2luaXQoXHUwMDI2cG9ydC1cdTAwM2Vwb3J0KTtcbitcdHBvcnQtXHUwMDNlcG9ydC5vcHMgPSBcdTAwMjZnc19wb3J0X29wcztcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnBvcnQtXHUwMDNlcG9ydF9sb2NrKTtcbiBcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2cG9ydC1cdTAwM2VkcmFpbl93YWl0KTtcbi1cdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2cG9ydC1cdTAwM2VjbG9zZV93YWl0KTtcbiBcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnBvcnQtXHUwMDNlcHVzaCwgZ3NfcnhfcHVzaCk7XG4gXG5AQCAtMTI0MSwyNSArMTI3MywxMCBAQCBnc19wb3J0X2FsbG9jKHVuc2lnbmVkIHBvcnRfbnVtLCBzdHJ1Y3QgdXNiX2NkY19saW5lX2NvZGluZyAqY29kaW5nKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBnc19jbG9zZWQoc3RydWN0IGdzX3BvcnQgKnBvcnQpXG4te1xuLVx0aW50IGNvbmQ7XG4tXG4tXHRzcGluX2xvY2tfaXJxKFx1MDAyNnBvcnQtXHUwMDNlcG9ydF9sb2NrKTtcbi1cdGNvbmQgPSBwb3J0LVx1MDAzZXBvcnQuY291bnQgPT0gMDtcbi1cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZwb3J0LVx1MDAzZXBvcnRfbG9jayk7XG4tXG4tXHRyZXR1cm4gY29uZDtcbi19XG4tXG4gc3RhdGljIHZvaWQgZ3NlcmlhbF9mcmVlX3BvcnQoc3RydWN0IGdzX3BvcnQgKnBvcnQpXG4ge1xuLVx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnBvcnQtXHUwMDNlcHVzaCk7XG4tXHQvKiB3YWl0IGZvciBvbGQgb3BlbnMgdG8gZmluaXNoICovXG4tXHR3YWl0X2V2ZW50KHBvcnQtXHUwMDNlY2xvc2Vfd2FpdCwgZ3NfY2xvc2VkKHBvcnQpKTtcbiBcdFdBUk5fT04ocG9ydC1cdTAwM2Vwb3J0X3VzYiAhPSBOVUxMKTtcbi1cdHR0eV9wb3J0X2Rlc3Ryb3koXHUwMDI2cG9ydC1cdTAwM2Vwb3J0KTtcbi1cdGtmcmVlKHBvcnQpO1xuK1x0dHR5X3BvcnRfcHV0KFx1MDAyNnBvcnQtXHUwMDNlcG9ydCk7XG4gfVxuIFxuIHZvaWQgZ3NlcmlhbF9mcmVlX2xpbmUodW5zaWduZWQgY2hhciBwb3J0X251bSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIzOjM2OjUxLjU3NjAyNjYxWiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1Mjk0MTU0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogVVNCIEdhZGdldCBTZXJpYWwgRHJpdmVyIFJlZmFjdG9yaW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggdGFyZ2V0aW5nIHRoZSBgdV9zZXJpYWwuY2AgZmlsZSB3aXRoaW4gdGhlIFVTQiBnYWRnZXQgZHJpdmVyLiBUaGUgcHJpbWFyeSBmb2N1cyBpcyBhIHJlZmFjdG9yaW5nIGVmZm9ydCB0byByZXBsYWNlIGN1c3RvbSBsaWZldGltZSBhbmQgbG9ja2luZyBtYW5hZ2VtZW50IHdpdGggdGhlIHN0YW5kYXJkIGB0dHlfcG9ydGAgcmVmZXJlbmNlIGNvdW50aW5nIG1lY2hhbmlzbS4gVGhpcyBpbW1lZGlhdGVseSBzY3JlYW1zIFwibWVtb3J5IHNhZmV0eSBpbXByb3ZlbWVudHNcIiDigJMgYWRkcmVzc2luZyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIHR5cGljYWwgaW4gdHR5IGRyaXZlcnMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzY2VydGFpbiB3aGV0aGVyIHRoaXMgZXhwb3NlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTi4gV2UncmUgb24gYW1kNjQsIHNvIGxldCdzIGRpZyBpbi4gVGhlIHBhdGNoIGVzc2VudGlhbGx5IGRvZXMgdGhlIGZvbGxvd2luZzogaXQgcmVtb3ZlcyBjdXN0b20gbG9ja2luZywgaW50cm9kdWNlcyBgdHR5X3BvcnRfZ2V0YCBhbmQgYHR0eV9wb3J0X3B1dGAsIGFuZCBwcm9wZXJseSBzZXRzIGB0dHktXHUwMDNlZHJpdmVyX2RhdGFgLiBXZSBzZWUgbmV3IGZ1bmN0aW9ucyBsaWtlIGBnc19pbnN0YWxsYCwgYGdzX2NsZWFudXBgLCBhbmQgYGdzX3BvcnRfZGVzdHJ1Y3RgIHJlbGF0ZWQgdG8gdGhpcyBuZXcgcG9ydCBtYW5hZ2VtZW50LlxuXG5NeSBjaGVja2xpc3Qga2lja3MgaW46IEFyZSB3ZSBzZW5kaW5nIGFueXRoaW5nIGtlcm5lbC1zaWRlIHRvIHVzZXItc3BhY2UgdGhhdCBpc24ndCBwcm9wZXJseSBpbml0aWFsaXplZD8gTm8uIEFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvbmRpdGlvbmFsIGxvZ2ljIHJlbGlhbnQgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gQWdhaW4sIHRoZSBhbnN3ZXIgaXMgbm8uIEknbSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gcG90ZW50aWFsIGFyZWFzIGxpa2UgYGdzX3BvcnRfYWxsb2NgLCBgZ3NfaW5zdGFsbGAsIGFuZCBgZ3NfcG9ydF9kZXN0cnVjdGAuIExvb2tpbmcgYXQgdGhlIGNvZGUgY29uZmlybXMgdGhhdCBgdHR5X3BvcnRfaW5pdGAgYW5kIHN0cnVjdCBhc3NpZ25tZW50cyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6aW5nIGFsbCByZWxldmFudCBzdHJ1Y3R1cmVzLiBJdCBsb29rcyBsaWtlIGl0J3MgYWxsIHByb3Blcmx5IGluaXRpYWxpemVkLiBObyBgY29weV90b191c2VyYCwgbmV0bGluaywgb3IgaW9jdGwgb3V0cHV0IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGlzIHBhdGNoIGlzIGFsbCBhYm91dCBtZW1vcnkgc2FmZXR5IOKAkyBkZWFsaW5nIHdpdGggdXNlLWFmdGVyLWZyZWUsIHJhY2VzLCBhbmQgcmVmZXJlbmNlIGNvdW50IGlzc3Vlcy4gVGhlc2UgYXJlIGJ1Z3MgdGhhdCBLQVNBTiwgTG9ja2RlcCwgYW5kIHRoZSBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycyBhcmUgZGVzaWduZWQgdG8gZGV0ZWN0LiBUaGlzIGlzbid0IGludHJvZHVjaW5nICpuZXcqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Z3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgdGhhdCB3b3VsZCBiZSB1bmlxdWUgdG8gS01TQU4uIFdlJ3JlIGFkaGVyaW5nIHRvIHRoZSBydWxlOiBpZiBLQVNBTiAob3Igc2ltaWxhciB0b29scykgY2F0Y2ggaXQsIEtNU0FOIGlzbid0IG5lZWRlZC5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZmFsc2UuIFRoaXMgaXMgYSByZWZhY3RvcmluZyBmb3IgZ2VuZXJhbCBtZW1vcnkgc2FmZXR5IHRoYXQncyB3ZWxsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdG9vbGluZy4gV2UncmUgZ29vZCB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkyMCwiT3V0cHV0VG9rZW5zIjoyMjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4ODEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMzozNjo1OC4xMDU0NDUxNjFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBvZiBgc3RydWN0IGdzX3BvcnRgIGluIGBkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9zZXJpYWwuY2AgdXNpbmcgc3RhbmRhcmQgYHR0eV9wb3J0YCByZWZjb3VudGluZyAoYHR0eV9wb3J0X2dldGAvYHR0eV9wb3J0X3B1dGAsIGB0dHlfb3BlcmF0aW9ucy5pbnN0YWxsYCwgYHR0eV9vcGVyYXRpb25zLmNsZWFudXBgLCBhbmQgYHR0eV9wb3J0X29wZXJhdGlvbnMuZGVzdHJ1Y3RgKS5cXG5cXG5UaGlzIHJlZmFjdG9yaW5nIGFkZHJlc3NlcyB0dHkgbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMgKHByZXZlbnRpbmcgdXNlLWFmdGVyLWZyZWUgYW5kIHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuIGxpbmUgdGVhcmRvd24gYW5kIHR0eSBvcGVyYXRpb25zKS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGRvIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCBhbmQgZG8gbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgcmVmY291bnRpbmcgaW1iYWxhbmNlcywgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSB0aG9yb3VnaGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIHJlZmNvdW50IHRyYWNraW5nLCBhbmQgTE9DS0RFUCBidWlsZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIG9mIGBzdHJ1Y3QgZ3NfcG9ydGAgaW4gYGRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X3NlcmlhbC5jYCB1c2luZyBzdGFuZGFyZCBgdHR5X3BvcnRgIHJlZmNvdW50aW5nIChgdHR5X3BvcnRfZ2V0YC9gdHR5X3BvcnRfcHV0YCwgYHR0eV9vcGVyYXRpb25zLmluc3RhbGxgLCBgdHR5X29wZXJhdGlvbnMuY2xlYW51cGAsIGFuZCBgdHR5X3BvcnRfb3BlcmF0aW9ucy5kZXN0cnVjdGApLlxcblxcblRoaXMgcmVmYWN0b3JpbmcgYWRkcmVzc2VzIHR0eSBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGlzc3VlcyAocHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBhbmQgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gbGluZSB0ZWFyZG93biBhbmQgdHR5IG9wZXJhdGlvbnMpLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgZG8gbm90IGNvcHkga2VybmVsIGRhdGEgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2UsIGFuZCBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIHVzZS1hZnRlci1mcmVlLCByZWZjb3VudGluZyBpbWJhbGFuY2VzLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIHRob3JvdWdobHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgcmVmY291bnQgdHJhY2tpbmcsIGFuZCBMT0NLREVQIGJ1aWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowp2pcs[1] Phase: Succeeded StartedAt: 2026-09-04 23:37:10 +0000 UTC FinishedAt: 2026-09-04 23:37:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2pcs[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 23:37:10 +0000 UTC FinishedAt: 2026-09-04 23:37:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2pcs[2] Phase: Succeeded StartedAt: 2026-09-04 23:37:10 +0000 UTC FinishedAt: 2026-09-05 03:17:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 23:37:10 +0000 UTC FinishedAt: 2026-09-05 03:17:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 23:37:10 +0000 UTC FinishedAt: 2026-09-04 23:37:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 23:37:10 +0000 UTC FinishedAt: 2026-09-04 23:37:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp2pcs/series-workflowp2pcs-convert-artifact-2238811109/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 23:37:20 +0000 UTC FinishedAt: 2026-09-04 23:53:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 23:37:20 +0000 UTC FinishedAt: 2026-09-04 23:53:27 +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:*8598e2a7-89a3-4f5c-ba5b-2460b239c4c6,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-workflowp2pcs/series-workflowp2pcs-convert-artifact-2238811109/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": "cacf29fd-f53a-4cd6-ada6-40f3ca1dea33", "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-workflowp2pcs/series-workflowp2pcs-build-action-3019147275/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 23:37:20 +0000 UTC FinishedAt: 2026-09-04 23:53:17 +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:*8598e2a7-89a3-4f5c-ba5b-2460b239c4c6,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-workflowp2pcs/series-workflowp2pcs-convert-artifact-2238811109/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": "cacf29fd-f53a-4cd6-ada6-40f3ca1dea33", "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-workflowp2pcs/series-workflowp2pcs-build-action-3019147275/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 23:53:27 +0000 UTC FinishedAt: 2026-09-04 23:53:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 23:53:27 +0000 UTC FinishedAt: 2026-09-04 23:53:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 23:53:27 +0000 UTC FinishedAt: 2026-09-04 23:53:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 23:53:27 +0000 UTC FinishedAt: 2026-09-04 23:53:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp2pcs/series-workflowp2pcs-convert-artifact-2509132736/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 23:53:37 +0000 UTC FinishedAt: 2026-09-04 23:55:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 23:53:37 +0000 UTC FinishedAt: 2026-09-04 23:55:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cacf29fd-f53a-4cd6-ada6-40f3ca1dea33,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-workflowp2pcs/series-workflowp2pcs-build-action-3019147275/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-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 23:55:30 +0000 UTC FinishedAt: 2026-09-04 23:55:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 23:55:30 +0000 UTC FinishedAt: 2026-09-04 23:55:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 23:55:30 +0000 UTC FinishedAt: 2026-09-05 00:11:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 23:55:30 +0000 UTC FinishedAt: 2026-09-05 00:11:32 +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:*8598e2a7-89a3-4f5c-ba5b-2460b239c4c6,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-workflowp2pcs/series-workflowp2pcs-convert-artifact-2509132736/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": "29812a2c-b651-4b84-8f6a-f2455f15ce18", "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-workflowp2pcs/series-workflowp2pcs-build-action-3827941756/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 23:55:30 +0000 UTC FinishedAt: 2026-09-05 00:11:22 +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:*8598e2a7-89a3-4f5c-ba5b-2460b239c4c6,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-workflowp2pcs/series-workflowp2pcs-convert-artifact-2509132736/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": "29812a2c-b651-4b84-8f6a-f2455f15ce18", "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-workflowp2pcs/series-workflowp2pcs-build-action-3827941756/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 00:11:32 +0000 UTC FinishedAt: 2026-09-05 00:11:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 00:11:32 +0000 UTC FinishedAt: 2026-09-05 00:11:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 00:11:32 +0000 UTC FinishedAt: 2026-09-05 00:13:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 00:11:32 +0000 UTC FinishedAt: 2026-09-05 00:13:16 +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:*29812a2c-b651-4b84-8f6a-f2455f15ce18,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-workflowp2pcs/series-workflowp2pcs-build-action-3827941756/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-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 00:13:26 +0000 UTC FinishedAt: 2026-09-05 03:17:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 00:13:26 +0000 UTC FinishedAt: 2026-09-05 03:17:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*cacf29fd-f53a-4cd6-ada6-40f3ca1dea33,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*29812a2c-b651-4b84-8f6a-f2455f15ce18,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-workflowp2pcs/series-workflowp2pcs-build-action-3019147275/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-workflowp2pcs/series-workflowp2pcs-build-action-3827941756/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 00:13:26 +0000 UTC FinishedAt: 2026-09-05 00:13:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 00:13:26 +0000 UTC FinishedAt: 2026-09-05 00:13:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp2pcs/series-workflowp2pcs-convert-artifact-2767315993/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 00:13:26 +0000 UTC FinishedAt: 2026-09-05 00:13:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 00:13:26 +0000 UTC FinishedAt: 2026-09-05 00:13:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 00:13:26 +0000 UTC FinishedAt: 2026-09-05 00:13:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 00:13:36 +0000 UTC FinishedAt: 2026-09-05 03:17:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp2pcs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gs_install","gs_cleanup","gs_port_destruct","gs_open","gs_close","gserial_free_port","gserial_free_line","gserial_alloc_line"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_CONFIGFS","USB_CONFIGFS_SERIAL","USB_CONFIGFS_ACM","USB_U_SERIAL","TTY"],"series_id":"c6c4f80b-b6f4-4fbf-864f-e235c1c75a5d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 00:13:36 +0000 UTC FinishedAt: 2026-09-05 03:17:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cacf29fd-f53a-4cd6-ada6-40f3ca1dea33,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*29812a2c-b651-4b84-8f6a-f2455f15ce18,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-workflowp2pcs/series-workflowp2pcs-build-action-3019147275/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-workflowp2pcs/series-workflowp2pcs-build-action-3827941756/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-workflowp2pcs/series-workflowp2pcs-convert-artifact-2767315993/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,}