Name: series-workflow2n9g4 Phase: Succeeded StartedAt: 2026-07-02 02:00:57 +0000 UTC FinishedAt: 2026-07-02 06:17:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n9g4[0] Phase: Succeeded StartedAt: 2026-07-02 02:00:57 +0000 UTC FinishedAt: 2026-07-02 02:12:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n9g4[0].run-triage Phase: Succeeded StartedAt: 2026-07-02 02:00:57 +0000 UTC FinishedAt: 2026-07-02 02:12:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_GUEST", "PARAVIRT", "HYPERV", "ACRN_GUEST", "JAILHOUSE_GUEST" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_GUEST", "PARAVIRT", "HYPERV", "ACRN_GUEST", "JAILHOUSE_GUEST" ], "series_id": "616f926c-ffdc-4dc8-9316-70a26d035eb2" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvmclock_cpu_action", "timekeeping_resume", "tsc_save_sched_clock_state", "tsc_restore_sched_clock_state", "kvm_save_sched_clock_state", "kvm_restore_sched_clock_state", "hv_save_sched_clock_state", "hv_restore_sched_clock_state" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9HVUVTVCYjMzQ7LAogICAgJiMzNDtQQVJBVklSVCYjMzQ7LAogICAgJiMzNDtIWVBFUlYmIzM0OywKICAgICYjMzQ7QUNSTl9HVUVTVCYjMzQ7LAogICAgJiMzNDtKQUlMSE9VU0VfR1VFU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1jbG9ja19jcHVfYWN0aW9uJiMzNDssCiAgICAmIzM0O3RpbWVrZWVwaW5nX3Jlc3VtZSYjMzQ7LAogICAgJiMzNDt0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDt0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtodl9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlJiMzNDssCiAgICAmIzM0O2h2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBUU0MgYW5kIEFQSUMgZnJlcXVlbmN5IGNhbGlicmF0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBmb3IgeDg2IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoS1ZNLCBIeXBlci1WLCBWTXdhcmUsIEFDUk4sIEphaWxob3VzZSwgVERYLCBTRVYtU05QKS4gSXQgbW9kaWZpZXMgaG93IHNjaGVkX2Nsb2NrIHN0YXRlIGlzIHNhdmVkIGFuZCByZXN0b3JlZCBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgYW5kIENQVSBob3RwbHVnLCBwYXJ0aWN1bGFybHkgZm9yIGt2bWNsb2NrIGFuZCBIeXBlci1WIGNsb2NrLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gYSBLVk0gZ3Vlc3QgKHdoaWNoIHN5emthbGxlciB1c2VzKSBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgYW5kIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhOTIxMDI4MTU0Mjg3MTRjYzc0ZjVkZDM2ZTczMWZiM2Q4YThmOGFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAwMjoxMTowNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCBiNTQ5M2E3ZjhmMjI4MS4uYTM4N2JiMmM0N2UyZmIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC03OTQ2LDYgJiM0Mzs3OTQ2LDExIEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXHRcdFx0d2l0aCBDUFVJRC4xNmggc3VwcG9ydCBhbmQgcGFydGlhbCBDUFVJRC4xNWggc3VwcG9ydC5cbiBcdFx0XHRGb3JtYXQ6IFx1MDAzY3Vuc2lnbmVkIGludFx1MDAzZVxuIFxuJiM0MztcdFx0XHROb3RlLCB0c2NfZWFybHlfa2h6IGlzIGlnbm9yZWQgaWYgdGhlIFRTQyBmcmVxdWVuY3kgaXNcbiYjNDM7XHRcdFx0cHJvdmlkZWQgYnkgdHJ1c3RlZCBmaXJtd2FyZSB3aGVuIHJ1bm5pbmcgYXMgYW4gU05QIG9yXG4mIzQzO1x0XHRcdFREWCBndWVzdCwgb3Igd2hlbiB0aGUgaHlwZXJ2aXNvciBwcm92aWRlcyB0aGUgZXhhY3RcbiYjNDM7XHRcdFx0ZnJlcXVlbmN5IHZpYSBhIHBhcmF2aXJ0dWFsIGludGVyZmFjZS5cbiYjNDM7XG4gXHR0c3g9XHRcdFtYODZdIENvbnRyb2wgVHJhbnNhY3Rpb25hbCBTeW5jaHJvbml6YXRpb25cbiBcdFx0XHRFeHRlbnNpb25zIChUU1gpIGZlYXR1cmUgaW4gSW50ZWwgcHJvY2Vzc29ycyB0aGF0XG4gXHRcdFx0c3VwcG9ydCBUU1ggY29udHJvbC5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9jcHVpZC5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9jcHVpZC5yc3RcbmluZGV4IGJkYTNlM2U3MzdkNzFmLi5hNWVlOGZmMDUyY2U1NSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2NwdWlkLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvY3B1aWQucnN0XG5AQCAtMTIyLDMgJiM0MzsxMjIsMTUgQEAgS1ZNX0hJTlRTX1JFQUxUSU1FIDAgICAgICAgICAgICBndWVzdCBjaGVja3MgdGhpcyBmZWF0dXJlIGJpdCB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZW1wdGVkIGZvciBhbiB1bmxpbWl0ZWQgdGltZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dpbmcgb3B0aW1pemF0aW9uc1xuID09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztmdW5jdGlvbjogS1ZNX0NQVUlEX1RJTUlOR19JTkZPICgweDQwMDAwMDEwKVxuJiM0MztcbiYjNDM7cmV0dXJuczo6XG4mIzQzO1xuJiM0MzsgICBlYXggPSAoVmlydHVhbCkgVFNDIGZyZXF1ZW5jeSBpbiBrSHpcbiYjNDM7ICAgZWJ4ID0gKFZpcnR1YWwpIEJ1cyAobG9jYWwgQVBJQyB0aW1lcikgZnJlcXVlbmN5IGluIGtIelxuJiM0MzsgICBlY3ggPSAwIChSZXNlcnZlZClcbiYjNDM7ICAgZWR4ID0gMCAoUmVzZXJ2ZWQpXG4mIzQzO1xuJiM0MztOb3RlLCBLVk0gb25seSBkZWZpbmVzIHRoZSBzZW1hbnRpY3Mgb2YgS1ZNX0NQVUlEX1RJTUlOR19JTkZPOyBLVk0gZG9lcyBOT1RcbiYjNDM7YWR2ZXJ0aXNlIHN1cHBvcnQgdmlhIEtWTV9HRVRfU1VQUE9SVEVEX0NQVUlELlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NvY28vc2V2L2NvcmUuYyBiL2FyY2gveDg2L2NvY28vc2V2L2NvcmUuY1xuaW5kZXggZWNkNzdkMzIxN2YzYzMuLjcyMzEzYjM2YjZmNWQxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvY29jby9zZXYvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmNcbkBAIC05OSw3ICYjNDM7OTksNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNldl9zdGF0dXNfZmVhdF9uYW1lc1tdID0ge1xuICAqL1xuIHN0YXRpYyB1NjQgc25wX3RzY19zY2FsZSBfX3JvX2FmdGVyX2luaXQ7XG4gc3RhdGljIHU2NCBzbnBfdHNjX29mZnNldCBfX3JvX2FmdGVyX2luaXQ7XG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgc25wX3RzY19mcmVxX2toeiBfX3JvX2FmdGVyX2luaXQ7XG4gXG4gREVGSU5FX1BFUl9DUFUoc3RydWN0IHNldl9lc19ydW50aW1lX2RhdGEqLCBydW50aW1lX2RhdGEpO1xuIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzZXZfZXNfc2F2ZV9hcmVhICosIHNldl92bXNhKTtcbkBAIC0yMDE0LDIwICYjNDM7MjAxMywxMiBAQCB2b2lkIF9faW5pdCBzbnBfc2VjdXJlX3RzY19wcmVwYXJlKHZvaWQpXG4gXHRwcl9kZWJ1ZyhcJiMzNDtTZWN1cmVUU0MgZW5hYmxlZFwmIzM0Oyk7XG4gfVxuIFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNlY3VyZXRzY19nZXRfdHNjX2toeih2b2lkKVxuLXtcbi1cdHJldHVybiBzbnBfdHNjX2ZyZXFfa2h6O1xuLX1cbi1cbi12b2lkIF9faW5pdCBzbnBfc2VjdXJlX3RzY19pbml0KHZvaWQpXG4mIzQzO3Vuc2lnbmVkIGludCBfX2luaXQgc25wX3NlY3VyZV90c2NfaW5pdCh2b2lkKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNucF90c2NfZnJlcV9raHosIHRzY19mcmVxX21oejtcbiBcdHN0cnVjdCBzbnBfc2VjcmV0c19wYWdlICpzZWNyZXRzO1xuLVx0dW5zaWduZWQgbG9uZyB0c2NfZnJlcV9taHo7XG4gXHR2b2lkICptZW07XG4gXG4tXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0dVRVNUX1NOUF9TRUNVUkVfVFNDKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0bWVtID0gZWFybHlfbWVtcmVtYXBfZW5jcnlwdGVkKHNldl9zZWNyZXRzX3BhLCBQQUdFX1NJWkUpO1xuIFx0aWYgKCFtZW0pIHtcbiBcdFx0cHJfZXJyKFwmIzM0O1VuYWJsZSB0byBnZXQgVFNDX0ZBQ1RPUjogZmFpbGVkIHRvIG1hcCB0aGUgU05QIHNlY3JldHMgcGFnZS5cXG5cJiMzNDspO1xuQEAgLTIwMzYsNyAmIzQzOzIwMjcsOCBAQCB2b2lkIF9faW5pdCBzbnBfc2VjdXJlX3RzY19pbml0KHZvaWQpXG4gXG4gXHRzZWNyZXRzID0gKF9fZm9yY2Ugc3RydWN0IHNucF9zZWNyZXRzX3BhZ2UgKiltZW07XG4gXG4tXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKTtcbiYjNDM7XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7XG4mIzQzO1xuIFx0cmRtc3JxKE1TUl9BTUQ2NF9HVUVTVF9UU0NfRlJFUSwgdHNjX2ZyZXFfbWh6KTtcbiBcbiBcdC8qIEV4dHJhY3QgdGhlIEdVRVNUIFRTQyBNSFogZnJvbSBCSVRbMTc6MF0sIHJlc3QgaXMgcmVzZXJ2ZWQgc3BhY2UgKi9cbkBAIC0yMDQ0LDggJiM0MzsyMDM2LDcgQEAgdm9pZCBfX2luaXQgc25wX3NlY3VyZV90c2NfaW5pdCh2b2lkKVxuIFxuIFx0c25wX3RzY19mcmVxX2toeiA9IFNOUF9TQ0FMRV9UU0NfRlJFUSh0c2NfZnJlcV9taHogKiAxMDAwLCBzZWNyZXRzLVx1MDAzZXRzY19mYWN0b3IpO1xuIFxuLVx0eDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUgPSBzZWN1cmV0c2NfZ2V0X3RzY19raHo7XG4tXHR4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX3RzYyA9IHNlY3VyZXRzY19nZXRfdHNjX2toejtcbi1cbiBcdGVhcmx5X21lbXVubWFwKG1lbSwgUEFHRV9TSVpFKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNucF90c2NfZnJlcV9raHo7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jIGIvYXJjaC94ODYvY29jby90ZHgvdGR4LmNcbmluZGV4IDI5YjZmMWVkNTllYzU0Li45NDY4MmFjYTE4OGI3OSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguY1xuQEAgLTgsNiAmIzQzOzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tleGVjLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2FwaWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9jb2NvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGR4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdm14LmhcdTAwM2VcbkBAIC0xMTIzLDkgJiM0MzsxMTI0LDYgQEAgdm9pZCBfX2luaXQgdGR4X2Vhcmx5X2luaXQodm9pZClcbiBcbiBcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKTtcbiBcbi1cdC8qIFRTQyBpcyB0aGUgb25seSByZWxpYWJsZSBjbG9jayBpbiBURFggZ3Vlc3QgKi9cbi1cdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTtcbi1cbiBcdGNjX3ZlbmRvciA9IENDX1ZFTkRPUl9JTlRFTDtcbiBcbiBcdC8qIENvbmZpZ3VyZSB0aGUgVEQgKi9cbkBAIC0xMTk1LDMgJiM0MzsxMTkzLDE4IEBAIHZvaWQgX19pbml0IHRkeF9lYXJseV9pbml0KHZvaWQpXG4gXG4gXHR0ZHhfYW5ub3VuY2UoKTtcbiB9XG4mIzQzO1xuJiM0Mzt1bnNpZ25lZCBpbnQgX19pbml0IHRkeF90c2NfaW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGNwdWlkX3RzY19pbmZvIGluZm87XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoY3B1aWRfZ2V0X3RzY19pbmZvKFx1MDAyNmluZm8pIHx8ICFpbmZvLmNyeXN0YWxfa2h6KSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRhcGljX3NldF90aW1lcl9wZXJpb2Rfa2h6KGluZm8uY3J5c3RhbF9raHosIFwmIzM0O1REWC1Nb2R1bGUgdmlhIENQVUlEXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogVFNDIGlzIHRoZSBvbmx5IHJlbGlhYmxlIGNsb2NrIGluIFREWCBndWVzdCAqL1xuJiM0MztcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGluZm8uY3J5c3RhbF9raHogKiBpbmZvLm51bWVyYXRvciAvIGluZm8uZGVub21pbmF0b3I7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3JuLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3JuLmhcbmluZGV4IGRiNDJiNDc3YzQxZDM0Li5hODkyMTc5YzYxYzYyMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Fjcm4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNybi5oXG5AQCAtMzIsMTEgJiM0MzszMiw2IEBAIHN0YXRpYyBpbmxpbmUgdTMyIGFjcm5fY3B1aWRfYmFzZSh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhY3JuX2dldF90c2Nfa2h6KHZvaWQpXG4te1xuLVx0cmV0dXJuIGNwdWlkX2VheChBQ1JOX0NQVUlEX1RJTUlOR19JTkZPKTtcbi19XG4tXG4gLypcbiAgKiBIeXBlcmNhbGxzIGZvciBBQ1JOXG4gICpcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmhcbmluZGV4IDljZDQ5M2Q0NjdkNGQxLi4wMzU5OTg1NTVlOTkyMiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oXG5AQCAtNjMsNyAmIzQzOzYzLDYgQEAgZXh0ZXJuIGludCBhcGljX3ZlcmJvc2l0eTtcbiBleHRlcm4gaW50IGxvY2FsX2FwaWNfdGltZXJfYzJfb2s7XG4gXG4gZXh0ZXJuIGJvb2wgYXBpY19pc19kaXNhYmxlZDtcbi1leHRlcm4gdW5zaWduZWQgaW50IGxhcGljX3RpbWVyX3BlcmlvZDtcbiBcbiBleHRlcm4gZW51bSBhcGljX2ludHJfbW9kZV9pZCBhcGljX2ludHJfbW9kZTtcbiBlbnVtIGFwaWNfaW50cl9tb2RlX2lkIHtcbkBAIC0xMzgsNiAmIzQzOzEzNyw4IEBAIHZvaWQgcmVnaXN0ZXJfbGFwaWNfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MpO1xuIGV4dGVybiB2b2lkIHNldHVwX2Jvb3RfQVBJQ19jbG9jayh2b2lkKTtcbiBleHRlcm4gdm9pZCBzZXR1cF9zZWNvbmRhcnlfQVBJQ19jbG9jayh2b2lkKTtcbiBleHRlcm4gdm9pZCBsYXBpY191cGRhdGVfdHNjX2ZyZXEodm9pZCk7XG4mIzQzO2V4dGVybiB2b2lkIGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9oeih1NjQgcGVyaW9kX2h6LCBjb25zdCBjaGFyICpzb3VyY2UpO1xuJiM0MztleHRlcm4gdm9pZCBhcGljX3NldF90aW1lcl9wZXJpb2Rfa2h6KHU2NCBwZXJpb2Rfa2h6LCBjb25zdCBjaGFyICpzb3VyY2UpO1xuIFxuICNpZmRlZiBDT05GSUdfWDg2XzY0XG4gc3RhdGljIGlubGluZSBib29sIGFwaWNfZm9yY2VfZW5hYmxlKHVuc2lnbmVkIGxvbmcgYWRkcilcbkBAIC0xODgsNiAmIzQzOzE4OSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2xvY2FsX0FQSUModm9pZCkgeyB9XG4gIyBkZWZpbmUgc2V0dXBfYm9vdF9BUElDX2Nsb2NrIHg4Nl9pbml0X25vb3BcbiAjIGRlZmluZSBzZXR1cF9zZWNvbmRhcnlfQVBJQ19jbG9jayB4ODZfaW5pdF9ub29wXG4gc3RhdGljIGlubGluZSB2b2lkIGxhcGljX3VwZGF0ZV90c2NfZnJlcSh2b2lkKSB7IH1cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9oeih1NjQgcGVyaW9kX2h6LCBjb25zdCBjaGFyICpzb3VyY2UpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgYXBpY19zZXRfdGltZXJfcGVyaW9kX2toeih1NjQgcGVyaW9kX2toeiwgY29uc3QgY2hhciAqc291cmNlKSB7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9ic3BfQVBJQyh2b2lkKSB7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgYXBpY19pbnRyX21vZGVfc2VsZWN0KHZvaWQpIHsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBhcGljX2ludHJfbW9kZV9pbml0KHZvaWQpIHsgfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oXG5pbmRleCA0YTQ3YzE2ZTJkZjhjMC4uNzYzZWQwMTc3MzhhNjcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oXG5AQCAtMTE4LDggJiM0MzsxMTgsMTYgQEAgc3RhdGljIGlubGluZSBsb25nIGt2bV9zZXZfaHlwZXJjYWxsMyh1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGxvbmcgcDEsXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfS1ZNX0dVRVNUXG4tdm9pZCBrdm1jbG9ja19pbml0KHZvaWQpO1xuLXZvaWQga3ZtY2xvY2tfZGlzYWJsZSh2b2lkKTtcbiYjNDM7ZW51bSBrdm1fZ3Vlc3RfY3B1X2FjdGlvbiB7XG4mIzQzO1x0S1ZNX0dVRVNUX0JTUF9TVVNQRU5ELFxuJiM0MztcdEtWTV9HVUVTVF9CU1BfUkVTVU1FLFxuJiM0MztcdEtWTV9HVUVTVF9BUF9PTkxJTkUsXG4mIzQzO1x0S1ZNX0dVRVNUX0FQX09GRkxJTkUsXG4mIzQzO1x0S1ZNX0dVRVNUX1NIVVRET1dOLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7dm9pZCBrdm1jbG9ja19pbml0KGJvb2wgcHJlZmVyX3RzYyk7XG4mIzQzO3ZvaWQga3ZtY2xvY2tfY3B1X2FjdGlvbihlbnVtIGt2bV9ndWVzdF9jcHVfYWN0aW9uIGFjdGlvbik7XG4gYm9vbCBrdm1fcGFyYV9hdmFpbGFibGUodm9pZCk7XG4gdW5zaWduZWQgaW50IGt2bV9hcmNoX3BhcmFfZmVhdHVyZXModm9pZCk7XG4gdW5zaWduZWQgaW50IGt2bV9hcmNoX3BhcmFfaGludHModm9pZCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaFxuaW5kZXggNTk0Y2ZhMTljYmQ0YmEuLjA1ZWJmMGI3M2VmNDdkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXG5AQCAtNTMwLDcgJiM0Mzs1MzAsNyBAQCBpbnQgc25wX3NlbmRfZ3Vlc3RfcmVxdWVzdChzdHJ1Y3Qgc25wX21zZ19kZXNjICptZGVzYywgc3RydWN0IHNucF9ndWVzdF9yZXEgKnJlcVxuIGludCBzbnBfc3ZzbV92dHBtX3NlbmRfY29tbWFuZCh1OCAqYnVmZmVyKTtcbiBcbiB2b2lkIF9faW5pdCBzbnBfc2VjdXJlX3RzY19wcmVwYXJlKHZvaWQpO1xuLXZvaWQgX19pbml0IHNucF9zZWN1cmVfdHNjX2luaXQodm9pZCk7XG4mIzQzO3Vuc2lnbmVkIGludCBzbnBfc2VjdXJlX3RzY19pbml0KHZvaWQpO1xuIGVudW0gZXNfcmVzdWx0IHNhdmljX3JlZ2lzdGVyX2dwYSh1NjQgZ3BhKTtcbiBlbnVtIGVzX3Jlc3VsdCBzYXZpY191bnJlZ2lzdGVyX2dwYSh1NjQgKmdwYSk7XG4gdTY0IHNhdmljX2doY2JfbXNyX3JlYWQodTMyIHJlZyk7XG5AQCAtNjM3LDcgJiM0Mzs2MzcsNyBAQCBzdGF0aWMgaW5saW5lIGludCBzbnBfc2VuZF9ndWVzdF9yZXF1ZXN0KHN0cnVjdCBzbnBfbXNnX2Rlc2MgKm1kZXNjLFxuIFx0XHRcdFx0XHQgc3RydWN0IHNucF9ndWVzdF9yZXEgKnJlcSkgeyByZXR1cm4gLUVOT0RFVjsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IHNucF9zdnNtX3Z0cG1fc2VuZF9jb21tYW5kKHU4ICpidWZmZXIpIHsgcmV0dXJuIC1FTk9ERVY7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHNucF9zZWN1cmVfdHNjX3ByZXBhcmUodm9pZCkgeyB9XG4tc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBzbnBfc2VjdXJlX3RzY19pbml0KHZvaWQpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2luaXQgc25wX3NlY3VyZV90c2NfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIHNldl9ldmljdF9jYWNoZSh2b2lkICp2YSwgaW50IG5wYWdlcykge31cbiBzdGF0aWMgaW5saW5lIGVudW0gZXNfcmVzdWx0IHNhdmljX3JlZ2lzdGVyX2dwYSh1NjQgZ3BhKSB7IHJldHVybiBFU19VTlNVUFBPUlRFRDsgfVxuIHN0YXRpYyBpbmxpbmUgZW51bSBlc19yZXN1bHQgc2F2aWNfdW5yZWdpc3Rlcl9ncGEodTY0ICpncGEpIHsgcmV0dXJuIEVTX1VOU1VQUE9SVEVEOyB9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuaW5kZXggODllOTdkNTc2MWQ4OWUuLmQyM2ZmMDZkYjQxYWJlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXG5AQCAtNjgsNiAmIzQzOzY4LDcgQEAgc3RydWN0IHZlX2luZm8ge1xuICNpZmRlZiBDT05GSUdfSU5URUxfVERYX0dVRVNUXG4gXG4gdm9pZCBfX2luaXQgdGR4X2Vhcmx5X2luaXQodm9pZCk7XG4mIzQzO3Vuc2lnbmVkIGludCBfX2luaXQgdGR4X3RzY19pbml0KHZvaWQpO1xuIFxuIHZvaWQgdGR4X2dldF92ZV9pbmZvKHN0cnVjdCB2ZV9pbmZvICp2ZSk7XG4gXG5AQCAtODksNiAmIzQzOzkwLDcgQEAgdm9pZCBfX2luaXQgdGR4X2R1bXBfdGRfY3Rscyh1NjQgdGRfY3Rscyk7XG4gI2Vsc2VcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgdGR4X2Vhcmx5X2luaXQodm9pZCkgeyB9O1xuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0ZHhfdHNjX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfaGFsdCh2b2lkKSB7IH07XG4gXG4gc3RhdGljIGlubGluZSBib29sIHRkeF9lYXJseV9oYW5kbGVfdmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgcmV0dXJuIGZhbHNlOyB9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmhcbmluZGV4IGZkYTE4YmNiMTliNDVhLi5hNTIzODhhZjYwNTVlNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmhcbkBAIC0xMSw4ICYjNDM7MTEsMjEgQEAgZXh0ZXJuIHZvaWQgcmVjYWxpYnJhdGVfY3B1X2toeih2b2lkKTtcbiBcbiBleHRlcm4gaW50IG5vX3RpbWVyX2NoZWNrO1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX1BBUkFWSVJUXG4gZXh0ZXJuIGJvb2wgdXNpbmdfbmF0aXZlX3NjaGVkX2Nsb2NrKHZvaWQpO1xuLXZvaWQgcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKHU2NCAoKmZ1bmMpKHZvaWQpKTtcbiYjNDM7XG4mIzQzO2ludCBfX2luaXQgX19wYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodTY0ICgqZnVuYykodm9pZCksIGJvb2wgc3RhYmxlLFxuJiM0MztcdFx0XHRcdCAgICAgIHZvaWQgKCpzYXZlKSh2b2lkKSwgdm9pZCAoKnJlc3RvcmUpKHZvaWQpKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodTY0ICgqZnVuYykodm9pZCksXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgdm9pZCAoKnNhdmUpKHZvaWQpLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIHZvaWQgKCpyZXN0b3JlKSh2b2lkKSlcbiYjNDM7e1xuJiM0MztcdCh2b2lkKV9fcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKGZ1bmMsIHRydWUsIHNhdmUsIHJlc3RvcmUpO1xuJiM0Mzt9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB1c2luZ19uYXRpdmVfc2NoZWRfY2xvY2sodm9pZCkgeyByZXR1cm4gdHJ1ZTsgfVxuJiM0MzsjZW5kaWZcbiBcbiAvKlxuICAqIFdlIHVzZSB0aGUgZnVsbCBsaW5lYXIgZXF1YXRpb246IGYoeCkgPSBhICYjNDM7IGIqeCwgaW4gb3JkZXIgdG8gYWxsb3dcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90c2MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RzYy5oXG5pbmRleCA0ZDJkMmYyMWZmMDYzZi4uY2I2ODJmMDk3ZWE3Y2EgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90c2MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdHNjLmhcbkBAIC04MiwxNCAmIzQzOzgyLDIwIEBAIHN0YXRpYyBpbmxpbmUgY3ljbGVzX3QgZ2V0X2N5Y2xlcyh2b2lkKVxuIH1cbiAjZGVmaW5lIGdldF9jeWNsZXMgZ2V0X2N5Y2xlc1xuIFxuJiM0MztzdHJ1Y3QgY3B1aWRfdHNjX2luZm8ge1xuJiM0MztcdHVuc2lnbmVkIGludCBkZW5vbWluYXRvcjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbnVtZXJhdG9yO1xuJiM0MztcdHVuc2lnbmVkIGludCBjcnlzdGFsX2toejtcbiYjNDM7fTtcbiYjNDM7ZXh0ZXJuIGludCBjcHVpZF9nZXRfdHNjX2luZm8oc3RydWN0IGNwdWlkX3RzY19pbmZvICppbmZvKTtcbiYjNDM7ZXh0ZXJuIHVuc2lnbmVkIGludCBfX2NwdV9raHpfZnJvbV9jcHVpZCh2b2lkKTtcbiYjNDM7XG4gZXh0ZXJuIHZvaWQgdHNjX2Vhcmx5X2luaXQodm9pZCk7XG4gZXh0ZXJuIHZvaWQgdHNjX2luaXQodm9pZCk7XG4gZXh0ZXJuIHZvaWQgbWFya190c2NfdW5zdGFibGUoY2hhciAqcmVhc29uKTtcbiBleHRlcm4gaW50IHVuc3luY2hyb25pemVkX3RzYyh2b2lkKTtcbiBleHRlcm4gaW50IGNoZWNrX3RzY191bnN0YWJsZSh2b2lkKTtcbiBleHRlcm4gdm9pZCBtYXJrX3RzY19hc3luY19yZXNldHMoY2hhciAqcmVhc29uKTtcbi1leHRlcm4gdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSh2b2lkKTtcbi1leHRlcm4gdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX3RzYyh2b2lkKTtcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIG5hdGl2ZV9zY2hlZF9jbG9ja19mcm9tX3RzYyh1NjQgdHNjKTtcbiBcbiBleHRlcm4gaW50IHRzY19jbG9ja3NvdXJjZV9yZWxpYWJsZTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaFxuaW5kZXggOTUzZDMxOTk0MDhhZTUuLmU4NzllNmU4MzQyODMwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaFxuQEAgLTEyMyw2ICYjNDM7MTIzLDggQEAgc3RydWN0IHg4Nl9pbml0X3BjaSB7XG4gICogQG1zaV9leHRfZGVzdF9pZDpcdFx0TVNJIHN1cHBvcnRzIDE1LWJpdCBBUElDIElEc1xuICAqIEBpbml0X21lbV9tYXBwaW5nOlx0XHRzZXR1cCBlYXJseSBtYXBwaW5ncyBkdXJpbmcgaW5pdF9tZW1fbWFwcGluZygpXG4gICogQGluaXRfYWZ0ZXJfYm9vdG1lbTpcdFx0Z3Vlc3QgaW5pdCBhZnRlciBib290IGFsbG9jYXRvciBpcyBmaW5pc2hlZFxuJiM0MzsgKiBAZ2V0X3RzY19raHo6XHRcdGdldCB0aGUgVFNDIGZyZXF1ZW5jeSAocmV0dXJucyAwIGlmIGZyZXF1ZW5jeSBpcyB1bmtub3duKVxuJiM0MzsgKiBAZ2V0X2NwdV9raHo6XHRcdGdldCB0aGUgQ1BVIGZyZXF1ZW5jeSAocmV0dXJucyAwIGlmIGZyZXF1ZW5jeSBpcyB1bmtub3duKVxuICAqL1xuIHN0cnVjdCB4ODZfaHlwZXJfaW5pdCB7XG4gXHR2b2lkICgqaW5pdF9wbGF0Zm9ybSkodm9pZCk7XG5AQCAtMTMxLDYgJiM0MzsxMzMsOCBAQCBzdHJ1Y3QgeDg2X2h5cGVyX2luaXQge1xuIFx0Ym9vbCAoKm1zaV9leHRfZGVzdF9pZCkodm9pZCk7XG4gXHR2b2lkICgqaW5pdF9tZW1fbWFwcGluZykodm9pZCk7XG4gXHR2b2lkICgqaW5pdF9hZnRlcl9ib290bWVtKSh2b2lkKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgKCpnZXRfdHNjX2toeikodm9pZCk7XG4mIzQzO1x0dW5zaWduZWQgaW50ICgqZ2V0X2NwdV9raHopKHZvaWQpO1xuIH07XG4gXG4gLyoqXG5AQCAtMjkxLDggJiM0MzsyOTUsNiBAQCBzdHJ1Y3QgeDg2X2h5cGVyX3J1bnRpbWUge1xuIFxuIC8qKlxuICAqIHN0cnVjdCB4ODZfcGxhdGZvcm1fb3BzIC0gcGxhdGZvcm0gc3BlY2lmaWMgcnVudGltZSBmdW5jdGlvbnNcbi0gKiBAY2FsaWJyYXRlX2NwdTpcdFx0Y2FsaWJyYXRlIENQVVxuLSAqIEBjYWxpYnJhdGVfdHNjOlx0XHRjYWxpYnJhdGUgVFNDLCBpZiBkaWZmZXJlbnQgZnJvbSBDUFVcbiAgKiBAZ2V0X3dhbGxjbG9jazpcdFx0Z2V0IHRpbWUgZnJvbSBIVyBjbG9jayBsaWtlIFJUQyBldGMuXG4gICogQHNldF93YWxsY2xvY2s6XHRcdHNldCB0aW1lIGJhY2sgdG8gSFcgY2xvY2tcbiAgKiBAaW9tbXVfc2h1dGRvd246XHRcdHNldCBieSBhbiBJT01NVSBkcml2ZXIgZm9yIHNodXRkb3duIGlmIG5lY2Vzc2FyeVxuQEAgLTMxNiw4ICYjNDM7MzE4LDYgQEAgc3RydWN0IHg4Nl9oeXBlcl9ydW50aW1lIHtcbiAgKiBAZ3Vlc3Q6XHRcdFx0Z3Vlc3QgaW5jYXJuYXRpb25zIGNhbGxiYWNrc1xuICAqL1xuIHN0cnVjdCB4ODZfcGxhdGZvcm1fb3BzIHtcbi1cdHVuc2lnbmVkIGxvbmcgKCpjYWxpYnJhdGVfY3B1KSh2b2lkKTtcbi1cdHVuc2lnbmVkIGxvbmcgKCpjYWxpYnJhdGVfdHNjKSh2b2lkKTtcbiBcdHZvaWQgKCpnZXRfd2FsbGNsb2NrKShzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpO1xuIFx0aW50ICgqc2V0X3dhbGxjbG9jaykoY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKTtcbiBcdHZvaWQgKCppb21tdV9zaHV0ZG93bikodm9pZCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm1fcGFyYS5oIGIvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm1fcGFyYS5oXG5pbmRleCBhMWVmYTc5MDdhMGIxMC4uYzNhMzg0NzExZjNhNWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bV9wYXJhLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtX3BhcmEuaFxuQEAgLTQ0LDYgJiM0Mzs0NCwxNyBAQFxuICAqL1xuICNkZWZpbmUgS1ZNX0ZFQVRVUkVfQ0xPQ0tTT1VSQ0VfU1RBQkxFX0JJVFx0MjRcbiBcbiYjNDM7LypcbiYjNDM7ICogVGhlIHRpbWluZyBpbmZvcm1hdGlvbiBsZWFmIHByb3ZpZGVzIFRTQyBhbmQgbG9jYWwgQVBJQyB0aW1lciBmcmVxdWVuY3lcbiYjNDM7ICogaW5mb3JtYXRpb24gdG8gdGhlIGd1ZXN0LiAgTm90ZSwgdXNlcnNwYWNlIGlzIHJlc3BvbnNpYmxlIGZvciBmaWxsaW5nIHRoZVxuJiM0MzsgKiBsZWFmIHdpdGggdGhlIGNvcnJlY3QgaW5mb3JtYXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqICAjIEVBWDogKFZpcnR1YWwpIFRTQyBmcmVxdWVuY3kgaW4ga0h6LlxuJiM0MzsgKiAgIyBFQlg6IChWaXJ0dWFsKSBCdXMgKGxvY2FsIEFQSUMgdGltZXIpIGZyZXF1ZW5jeSBpbiBrSHouXG4mIzQzOyAqICAjIEVDWCwgRURYOiBSZXNlcnZlZCAobXVzdCBiZSB6ZXJvKS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgS1ZNX0NQVUlEX1RJTUlOR19JTkZPXHQweDQwMDAwMDEwXG4mIzQzO1xuICNkZWZpbmUgTVNSX0tWTV9XQUxMX0NMT0NLICAweDExXG4gI2RlZmluZSBNU1JfS1ZNX1NZU1RFTV9USU1FIDB4MTJcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmNcbmluZGV4IGFhMWUxOTk3OWFhOGUxLi44ZDNkOTMwNTc2ZmQ3MSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jXG5AQCAtMTc2LDcgJiM0MzsxNzYsNyBAQCBzdGF0aWMgc3RydWN0IHJlc291cmNlIGxhcGljX3Jlc291cmNlID0ge1xuIH07XG4gXG4gLyogTWVhc3VyZWQgaW4gdGlja3MgcGVyIEhaLiAqL1xuLXVuc2lnbmVkIGludCBsYXBpY190aW1lcl9wZXJpb2QgPSAwO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGxhcGljX3RpbWVyX3BlcmlvZDtcbiBcbiBzdGF0aWMgdm9pZCBhcGljX3BtX2FjdGl2YXRlKHZvaWQpO1xuIFxuQEAgLTc5Niw2ICYjNDM7Nzk2LDE2IEBAIGJvb2wgX19pbml0IGFwaWNfbmVlZHNfcGl0KHZvaWQpXG4gXHRyZXR1cm4gbGFwaWNfdGltZXJfcGVyaW9kID09IDA7XG4gfVxuIFxuJiM0Mzt2b2lkIGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHoodTY0IHBlcmlvZF9raHosIGNvbnN0IGNoYXIgKnNvdXJjZSlcbiYjNDM7e1xuJiM0MztcdGxhcGljX3RpbWVyX3BlcmlvZCA9IG11bF91NjRfdTMyX2RpdihwZXJpb2Rfa2h6LCAxMDAwLCBIWik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgYXBpY19zZXRfdGltZXJfcGVyaW9kX2h6KHU2NCBwZXJpb2RfaHosIGNvbnN0IGNoYXIgKnNvdXJjZSlcbiYjNDM7e1xuJiM0MztcdGxhcGljX3RpbWVyX3BlcmlvZCA9IGRpdl91NjQocGVyaW9kX2h6LCBIWik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBfX2luaXQgY2FsaWJyYXRlX0FQSUNfY2xvY2sodm9pZClcbiB7XG4gXHRzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpsZXZ0ID0gdGhpc19jcHVfcHRyKFx1MDAyNmxhcGljX2V2ZW50cyk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9hY3JuLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2Fjcm4uY1xuaW5kZXggZGMxMTlhZjgzNTI0MmEuLmRjNzFhNmZkZDQ2MTM5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9hY3JuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYWNybi5jXG5AQCAtMTksMTggJiM0MzsxOSwyOCBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9pZHRlbnRyeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2lycV9yZWdzLmhcdTAwM2VcbiBcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBhY3JuX3RzY19raHpfY3B1aWQgX19pbml0ZGF0YTtcbiYjNDM7XG4gc3RhdGljIHUzMiBfX2luaXQgYWNybl9kZXRlY3Qodm9pZClcbiB7XG4gXHRyZXR1cm4gYWNybl9jcHVpZF9iYXNlKCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBhY3JuX2dldF90c2Nfa2h6KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYWNybl90c2Nfa2h6X2NwdWlkO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIF9faW5pdCBhY3JuX2luaXRfcGxhdGZvcm0odm9pZClcbiB7XG4gXHQvKiBJbnN0YWxsIHN5c3RlbSBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgQUNSTiBoeXBlcnZpc29yIGNhbGxiYWNrICovXG4gXHRzeXN2ZWNfaW5zdGFsbChIWVBFUlZJU09SX0NBTExCQUNLX1ZFQ1RPUiwgc3lzdmVjX2Fjcm5faHZfY2FsbGJhY2spO1xuIFxuLVx0eDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MgPSBhY3JuX2dldF90c2Nfa2h6O1xuLVx0eDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUgPSBhY3JuX2dldF90c2Nfa2h6O1xuJiM0MztcdGFjcm5fdHNjX2toel9jcHVpZCA9IGNwdWlkX2VheChBQ1JOX0NQVUlEX1RJTUlOR19JTkZPKTtcbiYjNDM7XHRpZiAoYWNybl90c2Nfa2h6X2NwdWlkKSB7XG4mIzQzO1x0XHR4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeiA9IGFjcm5fZ2V0X3RzY19raHo7XG4mIzQzO1x0XHR4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeiA9IGFjcm5fZ2V0X3RzY19raHo7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgYm9vbCBhY3JuX3gyYXBpY19hdmFpbGFibGUodm9pZClcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21zaHlwZXJ2LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21zaHlwZXJ2LmNcbmluZGV4IDE4NWQ0ZjY3N2VjMGYwLi5jNGRhOGUzNTMxOWFjZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2NwdS9tc2h5cGVydi5jXG5AQCAtMjc1LDYzICYjNDM7Mjc1LDYgQEAgc3RhdGljIHZvaWQgaHZfZ3Vlc3RfY3Jhc2hfc2h1dGRvd24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gfVxuICNlbmRpZiAvKiBDT05GSUdfQ1JBU0hfRFVNUCAqL1xuIFxuLXN0YXRpYyB1NjQgaHZfcmVmX2NvdW50ZXJfYXRfc3VzcGVuZDtcbi1zdGF0aWMgdm9pZCAoKm9sZF9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKSh2b2lkKTtcbi1zdGF0aWMgdm9pZCAoKm9sZF9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKSh2b2lkKTtcbi1cbi0vKlxuLSAqIEh5cGVyLVYgY2xvY2sgY291bnRlciByZXNldHMgZHVyaW5nIGhpYmVybmF0aW9uLiBTYXZlIGFuZCByZXN0b3JlIGNsb2NrXG4tICogb2Zmc2V0IGR1cmluZyBzdXNwZW5kL3Jlc3VtZSwgd2hpbGUgYWxzbyBjb25zaWRlcmluZyB0aGUgdGltZSBwYXNzZWRcbi0gKiBiZWZvcmUgc3VzcGVuZC4gVGhpcyBpcyB0byBtYWtlIHN1cmUgdGhhdCBzY2hlZF9jbG9jayB1c2luZyBodiB0c2MgcGFnZVxuLSAqIGJhc2VkIGNsb2Nrc291cmNlLCBwcm9jZWVkcyBmcm9tIHdoZXJlIGl0IGxlZnQgb2ZmIGR1cmluZyBzdXNwZW5kIGFuZFxuLSAqIGl0IHNob3dzIGNvcnJlY3QgdGltZSBmb3IgdGhlIHRpbWVzdGFtcHMgb2Yga2VybmVsIG1lc3NhZ2VzIGFmdGVyIHJlc3VtZS5cbi0gKi9cbi1zdGF0aWMgdm9pZCBzYXZlX2h2X2Nsb2NrX3RzY19zdGF0ZSh2b2lkKVxuLXtcbi1cdGh2X3JlZl9jb3VudGVyX2F0X3N1c3BlbmQgPSBodl9yZWFkX3JlZmVyZW5jZV9jb3VudGVyKCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHJlc3RvcmVfaHZfY2xvY2tfdHNjX3N0YXRlKHZvaWQpXG4te1xuLVx0Lypcbi1cdCAqIEFkanVzdCB0aGUgb2Zmc2V0cyB1c2VkIGJ5IGh2IHRzYyBjbG9ja3NvdXJjZSB0b1xuLVx0ICogYWNjb3VudCBmb3IgdGhlIHRpbWUgc3BlbnQgYmVmb3JlIGhpYmVybmF0aW9uLlxuLVx0ICogYWRqdXN0ZWQgdmFsdWUgPSByZWZlcmVuY2UgY291bnRlciAodGltZSkgYXQgc3VzcGVuZFxuLVx0ICogICAgICAgICAgICAgICAgLSByZWZlcmVuY2UgY291bnRlciAodGltZSkgbm93LlxuLVx0ICovXG4tXHRodl9hZGpfc2NoZWRfY2xvY2tfb2Zmc2V0KGh2X3JlZl9jb3VudGVyX2F0X3N1c3BlbmQgLSBodl9yZWFkX3JlZmVyZW5jZV9jb3VudGVyKCkpO1xuLX1cbi1cbi0vKlxuLSAqIEZ1bmN0aW9ucyB0byBvdmVycmlkZSBzYXZlX3NjaGVkX2Nsb2NrX3N0YXRlIGFuZCByZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlXG4tICogZnVuY3Rpb25zIG9mIHg4Nl9wbGF0Zm9ybS4gVGhlIEh5cGVyLVYgY2xvY2sgY291bnRlciBpcyByZXNldCBkdXJpbmdcbi0gKiBzdXNwZW5kLXJlc3VtZSBhbmQgdGhlIG9mZnNldCB1c2VkIHRvIG1lYXN1cmUgdGltZSBuZWVkcyB0byBiZVxuLSAqIGNvcnJlY3RlZCwgcG9zdCByZXN1bWUuXG4tICovXG4tc3RhdGljIHZvaWQgaHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxuLXtcbi1cdG9sZF9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKCk7XG4tXHRzYXZlX2h2X2Nsb2NrX3RzY19zdGF0ZSgpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBodl9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXG4te1xuLVx0cmVzdG9yZV9odl9jbG9ja190c2Nfc3RhdGUoKTtcbi1cdG9sZF9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIF9faW5pdCB4ODZfc2V0dXBfb3BzX2Zvcl90c2NfcGdfY2xvY2sodm9pZClcbi17XG4tXHRpZiAoIShtc19oeXBlcnYuZmVhdHVyZXMgXHUwMDI2IEhWX01TUl9SRUZFUkVOQ0VfVFNDX0FWQUlMQUJMRSkpXG4tXHRcdHJldHVybjtcbi1cbi1cdG9sZF9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlID0geDg2X3BsYXRmb3JtLnNhdmVfc2NoZWRfY2xvY2tfc3RhdGU7XG4tXHR4ODZfcGxhdGZvcm0uc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSA9IGh2X3NhdmVfc2NoZWRfY2xvY2tfc3RhdGU7XG4tXG4tXHRvbGRfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSA9IHg4Nl9wbGF0Zm9ybS5yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlO1xuLVx0eDg2X3BsYXRmb3JtLnJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUgPSBodl9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlO1xuLX1cbi1cbiAjaWZkZWYgQ09ORklHX1g4Nl82NFxuIERFRklORV9TVEFUSUNfQ0FMTChodl9oeXBlcmNhbGwsIGh2X3N0ZF9oeXBlcmNhbGwpO1xuIEVYUE9SVF9TVEFUSUNfQ0FMTF9UUkFNUF9HUEwoaHZfaHlwZXJjYWxsKTtcbkBAIC0zOTUsNyAmIzQzOzMzOCw3IEBAIHN0YXRpYyBpbnQgaHZfbm1pX3Vua25vd24odW5zaWduZWQgaW50IHZhbCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gfVxuICNlbmRpZlxuIFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGh2X2dldF90c2Nfa2h6KHZvaWQpXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGh2X2dldF90c2Nfa2h6KHZvaWQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmcmVxO1xuIFxuQEAgLTU3Myw5ICYjNDM7NTE2LDggQEAgc3RhdGljIHZvaWQgX19pbml0IG1zX2h5cGVydl9pbml0X3BsYXRmb3JtKHZvaWQpXG4gXG4gXHRpZiAobXNfaHlwZXJ2LmZlYXR1cmVzIFx1MDAyNiBIVl9BQ0NFU1NfRlJFUVVFTkNZX01TUlMgXHUwMDI2XHUwMDI2XG4gXHQgICAgbXNfaHlwZXJ2Lm1pc2NfZmVhdHVyZXMgXHUwMDI2IEhWX0ZFQVRVUkVfRlJFUVVFTkNZX01TUlNfQVZBSUxBQkxFKSB7XG4tXHRcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjID0gaHZfZ2V0X3RzY19raHo7XG4tXHRcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ID0gaHZfZ2V0X3RzY19raHo7XG4tXHRcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpO1xuJiM0MztcdFx0eDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHogPSBodl9nZXRfdHNjX2toejtcbiYjNDM7XHRcdHg4Nl9pbml0Lmh5cGVyLmdldF9jcHVfa2h6ID0gaHZfZ2V0X3RzY19raHo7XG4gXHR9XG4gXG4gXHRpZiAobXNfaHlwZXJ2LnByaXZfaGlnaCBcdTAwMjYgSFZfSVNPTEFUSU9OKSB7XG5AQCAtNjQ2LDEwICYjNDM7NTg4LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IG1zX2h5cGVydl9pbml0X3BsYXRmb3JtKHZvaWQpXG4gXHRcdHU2NFx0aHZfbGFwaWNfZnJlcXVlbmN5O1xuIFxuIFx0XHRyZG1zcnEoSFZfWDY0X01TUl9BUElDX0ZSRVFVRU5DWSwgaHZfbGFwaWNfZnJlcXVlbmN5KTtcbi1cdFx0aHZfbGFwaWNfZnJlcXVlbmN5ID0gZGl2X3U2NChodl9sYXBpY19mcmVxdWVuY3ksIEhaKTtcbi1cdFx0bGFwaWNfdGltZXJfcGVyaW9kID0gaHZfbGFwaWNfZnJlcXVlbmN5O1xuLVx0XHRwcl9pbmZvKFwmIzM0O0h5cGVyLVY6IExBUElDIFRpbWVyIEZyZXF1ZW5jeTogJSN4XFxuXCYjMzQ7LFxuLVx0XHRcdGxhcGljX3RpbWVyX3BlcmlvZCk7XG4mIzQzO1x0XHRhcGljX3NldF90aW1lcl9wZXJpb2RfaHooaHZfbGFwaWNfZnJlcXVlbmN5LCBcJiMzNDtIeXBlci1WIGh5cGVydmlzb3JcJiMzNDspO1xuIFx0fVxuIFxuIFx0cmVnaXN0ZXJfbm1pX2hhbmRsZXIoTk1JX1VOS05PV04sIGh2X25taV91bmtub3duLCBOTUlfRkxBR19GSVJTVCxcbkBAIC03NDAsNyAmIzQzOzY3OSw2IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtc19oeXBlcnZfaW5pdF9wbGF0Zm9ybSh2b2lkKVxuIFxuIFx0LyogUmVnaXN0ZXIgSHlwZXItViBzcGVjaWZpYyBjbG9ja3NvdXJjZSAqL1xuIFx0aHZfaW5pdF9jbG9ja3NvdXJjZSgpO1xuLVx0eDg2X3NldHVwX29wc19mb3JfdHNjX3BnX2Nsb2NrKCk7XG4gXHRodl92dGxfaW5pdF9wbGF0Zm9ybSgpO1xuICNlbmRpZlxuIFx0LypcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Ztd2FyZS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuY1xuaW5kZXggMzRiNzM1NzNiMTA4ZDcuLjIzMjI1NTI3OWE2ZWVjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuY1xuQEAgLTY0LDcgJiM0Mzs2NCw3IEBAIHN0cnVjdCB2bXdhcmVfc3RlYWxfdGltZSB7XG4gXHR1NjQgcmVzZXJ2ZWRbN107XG4gfTtcbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyB2bXdhcmVfdHNjX2toeiBfX3JvX2FmdGVyX2luaXQ7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHZtd2FyZV90c2Nfa2h6IF9faW5pdGRhdGE7XG4gc3RhdGljIHU4IHZtd2FyZV9oeXBlcmNhbGxfbW9kZSAgICAgX19yb19hZnRlcl9pbml0O1xuIFxuIHVuc2lnbmVkIGxvbmcgdm13YXJlX2h5cGVyY2FsbF9zbG93KHVuc2lnbmVkIGxvbmcgY21kLFxuQEAgLTEzNyw3ICYjNDM7MTM3LDcgQEAgc3RhdGljIGlubGluZSBpbnQgX192bXdhcmVfcGxhdGZvcm0odm9pZClcbiBcdHJldHVybiBlYXggIT0gVUlOVF9NQVggXHUwMDI2XHUwMDI2IGVieCA9PSBWTVdBUkVfSFlQRVJWSVNPUl9NQUdJQztcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgdm13YXJlX2dldF90c2Nfa2h6KHZvaWQpXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IHZtd2FyZV9nZXRfdHNjX2toeih2b2lkKVxuIHtcbiBcdHJldHVybiB2bXdhcmVfdHNjX2toejtcbiB9XG5AQCAtMzQ4LDcgJiM0MzszNDgsOCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgdm13YXJlX3BhcmF2aXJ0X29wc19zZXR1cCh2b2lkKVxuIFx0dm13YXJlX2N5YzJuc19zZXR1cCgpO1xuIFxuIFx0aWYgKHZtd19zY2hlZF9jbG9jaylcbi1cdFx0cGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKHZtd2FyZV9zY2hlZF9jbG9jayk7XG4mIzQzO1x0XHRwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodm13YXJlX3NjaGVkX2Nsb2NrLFxuJiM0MztcdFx0XHRcdFx0IHg4Nl9pbml0X25vb3AsIHg4Nl9pbml0X25vb3ApO1xuIFxuIFx0aWYgKHZtd2FyZV9pc19zdGVhbGNsb2NrX2F2YWlsYWJsZSgpKSB7XG4gXHRcdGhhc19zdGVhbF9jbG9jayA9IHRydWU7XG5AQCAtMzkwLDggJiM0MzszOTEsNiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgdm13YXJlX3NldF9jYXBhYmlsaXRpZXModm9pZClcbiB7XG4gXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQyk7XG4gXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7XG4tXHRpZiAodm13YXJlX3RzY19raHopXG4tXHRcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpO1xuIFx0aWYgKHZtd2FyZV9oeXBlcmNhbGxfbW9kZSA9PSBDUFVJRF9WTVdBUkVfRkVBVFVSRVNfRUNYX1ZNQ0FMTClcbiBcdFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9WTUNBTEwpO1xuIFx0ZWxzZSBpZiAodm13YXJlX2h5cGVyY2FsbF9tb2RlID09IENQVUlEX1ZNV0FSRV9GRUFUVVJFU19FQ1hfVk1NQ0FMTClcbkBAIC00MTksMTUgJiM0Mzs0MTgsMTEgQEAgc3RhdGljIHZvaWQgX19pbml0IHZtd2FyZV9wbGF0Zm9ybV9zZXR1cCh2b2lkKVxuIFx0XHR9XG4gXG4gXHRcdHZtd2FyZV90c2Nfa2h6ID0gdHNjX2toejtcbi1cdFx0eDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MgPSB2bXdhcmVfZ2V0X3RzY19raHo7XG4tXHRcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ID0gdm13YXJlX2dldF90c2Nfa2h6O1xuJiM0MztcdFx0eDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHogPSB2bXdhcmVfZ2V0X3RzY19raHo7XG4mIzQzO1x0XHR4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeiA9IHZtd2FyZV9nZXRfdHNjX2toejtcbiBcbi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDXG4gXHRcdC8qIFNraXAgbGFwaWMgY2FsaWJyYXRpb24gc2luY2Ugd2Uga25vdyB0aGUgYnVzIGZyZXF1ZW5jeS4gKi9cbi1cdFx0bGFwaWNfdGltZXJfcGVyaW9kID0gZWN4IC8gSFo7XG4tXHRcdHByX2luZm8oXCYjMzQ7SG9zdCBidXMgY2xvY2sgc3BlZWQgcmVhZCBmcm9tIGh5cGVydmlzb3IgOiAldSBIelxcblwmIzM0Oyxcbi1cdFx0XHRlY3gpO1xuLSNlbmRpZlxuJiM0MztcdFx0YXBpY19zZXRfdGltZXJfcGVyaW9kX2h6KGVjeCwgXCYjMzQ7Vk13YXJlIGh5cGVydmlzb3JcJiMzNDspO1xuIFx0fSBlbHNlIHtcbiBcdFx0cHJfd2FybihcJiMzNDtGYWlsZWQgdG8gZ2V0IFRTQyBmcmVxIGZyb20gdGhlIGh5cGVydmlzb3JcXG5cJiMzNDspO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9qYWlsaG91c2UuYyBiL2FyY2gveDg2L2tlcm5lbC9qYWlsaG91c2UuY1xuaW5kZXggZjU4Y2U5MjIwZTBmMzIuLmZmMTczMDUyY2RjZWRjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2phaWxob3VzZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvamFpbGhvdXNlLmNcbkBAIC02NSwxMCAmIzQzOzY1LDEwIEBAIHN0YXRpYyB2b2lkIGphaWxob3VzZV9nZXRfd2FsbGNsb2NrKHN0cnVjdCB0aW1lc3BlYzY0ICpub3cpXG4gXG4gc3RhdGljIHZvaWQgX19pbml0IGphaWxob3VzZV90aW1lcl9pbml0KHZvaWQpXG4ge1xuLVx0bGFwaWNfdGltZXJfcGVyaW9kID0gc2V0dXBfZGF0YS52MS5hcGljX2toeiAqICgxMDAwIC8gSFopO1xuJiM0MztcdGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHooc2V0dXBfZGF0YS52MS5hcGljX2toeiwgXCYjMzQ7SmFpbGhvdXNlIGh5cGVydmlzb3JcJiMzNDspO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBqYWlsaG91c2VfZ2V0X3RzYyh2b2lkKVxuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBqYWlsaG91c2VfZ2V0X3RzYyh2b2lkKVxuIHtcbiBcdHJldHVybiBwcmVjYWxpYnJhdGVkX3RzY19raHo7XG4gfVxuQEAgLTIxMCw4ICYjNDM7MjEwLDYgQEAgc3RhdGljIHZvaWQgX19pbml0IGphaWxob3VzZV9pbml0X3BsYXRmb3JtKHZvaWQpXG4gXHR4ODZfaW5pdC5tcHBhcnNlLnBhcnNlX3NtcF9jZmdcdFx0PSBqYWlsaG91c2VfcGFyc2Vfc21wX2NvbmZpZztcbiBcdHg4Nl9pbml0LnBjaS5hcmNoX2luaXRcdFx0XHQ9IGphaWxob3VzZV9wY2lfYXJjaF9pbml0O1xuIFxuLVx0eDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHVcdFx0PSBqYWlsaG91c2VfZ2V0X3RzYztcbi1cdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjXHRcdD0gamFpbGhvdXNlX2dldF90c2M7XG4gXHR4ODZfcGxhdGZvcm0uZ2V0X3dhbGxjbG9ja1x0XHQ9IGphaWxob3VzZV9nZXRfd2FsbGNsb2NrO1xuIFx0eDg2X3BsYXRmb3JtLmxlZ2FjeS5ydGNcdFx0XHQ9IDA7XG4gXHR4ODZfcGxhdGZvcm0ubGVnYWN5Lndhcm1fcmVzZXRcdFx0PSAwO1xuQEAgLTI1Nyw3ICYjNDM7MjU1LDYgQEAgc3RhdGljIHZvaWQgX19pbml0IGphaWxob3VzZV9pbml0X3BsYXRmb3JtKHZvaWQpXG4gXHRwcl9kZWJ1ZyhcJiMzNDtKYWlsaG91c2U6IFBNLVRpbWVyIElPIFBvcnQ6ICUjeFxcblwmIzM0OywgcG10bXJfaW9wb3J0KTtcbiBcbiBcdHByZWNhbGlicmF0ZWRfdHNjX2toeiA9IHNldHVwX2RhdGEudjEudHNjX2toejtcbi1cdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpO1xuIFxuIFx0cGNpX3Byb2JlID0gMDtcbiBcbkBAIC0yOTMsNSAmIzQzOzI5MCw3IEBAIGNvbnN0IHN0cnVjdCBoeXBlcnZpc29yX3g4NiB4ODZfaHlwZXJfamFpbGhvdXNlIF9fcmVmY29uc3QgPSB7XG4gXHQuZGV0ZWN0XHRcdFx0PSBqYWlsaG91c2VfZGV0ZWN0LFxuIFx0LmluaXQuaW5pdF9wbGF0Zm9ybVx0PSBqYWlsaG91c2VfaW5pdF9wbGF0Zm9ybSxcbiBcdC5pbml0LngyYXBpY19hdmFpbGFibGVcdD0gamFpbGhvdXNlX3gyYXBpY19hdmFpbGFibGUsXG4mIzQzO1x0LmluaXQuZ2V0X3RzY19raHpcdD0gamFpbGhvdXNlX2dldF90c2MsXG4mIzQzO1x0LmluaXQuZ2V0X2NwdV9raHpcdD0gamFpbGhvdXNlX2dldF90c2MsXG4gXHQuaWdub3JlX25vcHZcdFx0PSB0cnVlLFxuIH07XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2t2bS5jIGIvYXJjaC94ODYva2VybmVsL2t2bS5jXG5pbmRleCBkY2VmODRkYTMwNGI4OS4uYmVlYTBiNmFhNzhlMWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3ZtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9rdm0uY1xuQEAgLTQ5LDYgJiM0Mzs0OSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3N2bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2U4MjAvYXBpLmhcdTAwM2VcbiBcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBrdm1fdHNjX2toel9jcHVpZCBfX2luaXRkYXRhO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGt2bV9jcHVfa2h6X2NwdWlkIF9faW5pdGRhdGE7XG4mIzQzO1xuIERFRklORV9TVEFUSUNfS0VZX0ZBTFNFX1JPKGt2bV9hc3luY19wZl9lbmFibGVkKTtcbiBcbiBzdGF0aWMgaW50IGt2bWFwZiA9IDE7XG5AQCAtNDU3LDcgJiM0Mzs0NjAsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc2V2X21hcF9wZXJjcHVfZGF0YSh2b2lkKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBrdm1fZ3Vlc3RfY3B1X29mZmxpbmUoYm9vbCBzaHV0ZG93bilcbiYjNDM7c3RhdGljIHZvaWQga3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKVxuIHtcbiBcdGt2bV9kaXNhYmxlX3N0ZWFsX3RpbWUoKTtcbiBcdGlmIChrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9QVl9FT0kpKVxuQEAgLTQ2NSwyMyAmIzQzOzQ2OCwzMCBAQCBzdGF0aWMgdm9pZCBrdm1fZ3Vlc3RfY3B1X29mZmxpbmUoYm9vbCBzaHV0ZG93bilcbiBcdGlmIChrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9NSUdSQVRJT05fQ09OVFJPTCkpXG4gXHRcdHdybXNycShNU1JfS1ZNX01JR1JBVElPTl9DT05UUk9MLCAwKTtcbiBcdGt2bV9wdl9kaXNhYmxlX2FwZigpO1xuLVx0aWYgKCFzaHV0ZG93bilcbiYjNDM7XHRpZiAoYWN0aW9uICE9IEtWTV9HVUVTVF9TSFVURE9XTilcbiBcdFx0YXBmX3Rhc2tfd2FrZV9hbGwoKTtcbi1cdGt2bWNsb2NrX2Rpc2FibGUoKTtcbiYjNDM7XG4mIzQzO1x0a3ZtY2xvY2tfY3B1X2FjdGlvbihhY3Rpb24pO1xuIH1cbiBcbi1zdGF0aWMgaW50IGt2bV9jcHVfb25saW5lKHVuc2lnbmVkIGludCBjcHUpXG4mIzQzO3N0YXRpYyB2b2lkIF9fa3ZtX2NwdV9vbmxpbmUodW5zaWduZWQgaW50IGNwdSwgZW51bSBrdm1fZ3Vlc3RfY3B1X2FjdGlvbiBhY3Rpb24pXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiYjNDM7XHRrdm1jbG9ja19jcHVfYWN0aW9uKGFjdGlvbik7XG4gXHRrdm1fZ3Vlc3RfY3B1X2luaXQoKTtcbiBcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbi1cdHJldHVybiAwO1xuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1NNUFxuIFxuJiM0MztzdGF0aWMgaW50IGt2bV9jcHVfb25saW5lKHVuc2lnbmVkIGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRfX2t2bV9jcHVfb25saW5lKGNwdSwgS1ZNX0dVRVNUX0FQX09OTElORSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIERFRklORV9QRVJfQ1BVKGNwdW1hc2tfdmFyX3QsIF9fcHZfY3B1X21hc2spO1xuIFxuIHN0YXRpYyBib29sIHB2X3RsYl9mbHVzaF9zdXBwb3J0ZWQodm9pZClcbkBAIC03MjMsNyAmIzQzOzczMyw3IEBAIHN0YXRpYyBpbnQga3ZtX2NwdV9kb3duX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSlcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4tXHRrdm1fZ3Vlc3RfY3B1X29mZmxpbmUoZmFsc2UpO1xuJiM0MztcdGt2bV9ndWVzdF9jcHVfb2ZmbGluZShLVk1fR1VFU1RfQVBfT0ZGTElORSk7XG4gXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNzM0LDcgJiM0Mzs3NDQsNyBAQCBzdGF0aWMgaW50IGt2bV9zdXNwZW5kKHZvaWQgKmRhdGEpXG4ge1xuIFx0dTY0IHZhbCA9IDA7XG4gXG4tXHRrdm1fZ3Vlc3RfY3B1X29mZmxpbmUoZmFsc2UpO1xuJiM0MztcdGt2bV9ndWVzdF9jcHVfb2ZmbGluZShLVk1fR1VFU1RfQlNQX1NVU1BFTkQpO1xuIFxuICNpZmRlZiBDT05GSUdfQVJDSF9DUFVJRExFX0hBTFRQT0xMXG4gXHRpZiAoa3ZtX3BhcmFfaGFzX2ZlYXR1cmUoS1ZNX0ZFQVRVUkVfUE9MTF9DT05UUk9MKSlcbkBAIC03NDYsNyAmIzQzOzc1Niw3IEBAIHN0YXRpYyBpbnQga3ZtX3N1c3BlbmQodm9pZCAqZGF0YSlcbiBcbiBzdGF0aWMgdm9pZCBrdm1fcmVzdW1lKHZvaWQgKmRhdGEpXG4ge1xuLVx0a3ZtX2NwdV9vbmxpbmUocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7XG4mIzQzO1x0X19rdm1fY3B1X29ubGluZShyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCBLVk1fR1VFU1RfQlNQX1JFU1VNRSk7XG4gXG4gI2lmZGVmIENPTkZJR19BUkNIX0NQVUlETEVfSEFMVFBPTExcbiBcdGlmIChrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9QT0xMX0NPTlRST0wpIFx1MDAyNlx1MDAyNiBoYXNfZ3Vlc3RfcG9sbClcbkBAIC03NjUsNyAmIzQzOzc3NSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc3lzY29yZSBrdm1fc3lzY29yZSA9IHtcbiBcbiBzdGF0aWMgdm9pZCBrdm1fcHZfZ3Vlc3RfY3B1X3JlYm9vdCh2b2lkICp1bnVzZWQpXG4ge1xuLVx0a3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKHRydWUpO1xuJiM0MztcdGt2bV9ndWVzdF9jcHVfb2ZmbGluZShLVk1fR1VFU1RfU0hVVERPV04pO1xuIH1cbiBcbiBzdGF0aWMgaW50IGt2bV9wdl9yZWJvb3Rfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG5AQCAtNzg5LDcgJiM0Mzs3OTksNyBAQCBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGt2bV9wdl9yZWJvb3RfbmIgPSB7XG4gI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QXG4gc3RhdGljIHZvaWQga3ZtX2NyYXNoX3NodXRkb3duKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbi1cdGt2bV9ndWVzdF9jcHVfb2ZmbGluZSh0cnVlKTtcbiYjNDM7XHRrdm1fZ3Vlc3RfY3B1X29mZmxpbmUoS1ZNX0dVRVNUX1NIVVRET1dOKTtcbiBcdG5hdGl2ZV9tYWNoaW5lX2NyYXNoX3NodXRkb3duKHJlZ3MpO1xuIH1cbiAjZW5kaWZcbkBAIC05MTEsNiAmIzQzOzkyMSwyNiBAQCBib29sIGt2bV9wYXJhX2F2YWlsYWJsZSh2b2lkKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fcGFyYV9hdmFpbGFibGUpO1xuIFxuJiM0MztzdGF0aWMgdTMyIF9faW5pdCBrdm1fY3B1aWRfdGltaW5nX2luZm9fbGVhZih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGJhc2UgPSBrdm1fY3B1aWRfYmFzZSgpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJhc2UgfHwgY3B1aWRfZWF4KGJhc2UpIFx1MDAzYyAoYmFzZSB8IEtWTV9DUFVJRF9USU1JTkdfSU5GTykpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJhc2UgfCBLVk1fQ1BVSURfVElNSU5HX0lORk87XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGt2bV9nZXRfdHNjX2toeih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGt2bV90c2Nfa2h6X2NwdWlkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBrdm1fZ2V0X2NwdV9raHoodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBrdm1fY3B1X2toel9jcHVpZDtcbiYjNDM7fVxuJiM0MztcbiB1bnNpZ25lZCBpbnQga3ZtX2FyY2hfcGFyYV9mZWF0dXJlcyh2b2lkKVxuIHtcbiBcdHJldHVybiBjcHVpZF9lYXgoa3ZtX2NwdWlkX2Jhc2UoKSB8IEtWTV9DUFVJRF9GRUFUVVJFUyk7XG5AQCAtOTYwLDYgJiM0Mzs5OTAsOCBAQCBzdGF0aWMgdm9pZCBfX2luaXQga3ZtX2luaXRfcGxhdGZvcm0odm9pZClcbiBcdFx0Lm1hc2tfbG8gPSAodTMyKSh+KFNaXzRHIC0gdG9sdWQgLSAxKSkgfCBNVFJSX1BIWVNNQVNLX1YsXG4gXHRcdC5tYXNrX2hpID0gKEJJVF9VTEwoYm9vdF9jcHVfZGF0YS54ODZfcGh5c19iaXRzKSAtIDEpIFx1MDAzZVx1MDAzZSAzMixcbiBcdH07XG4mIzQzO1x0dTMyIHRpbWluZ19pbmZvX2xlYWYsIGFwaWNfa2h6O1xuJiM0MztcdGJvb2wgdHNjX2lzX3JlbGlhYmxlO1xuIFxuIFx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0dVRVNUX01FTV9FTkNSWVBUKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9NSUdSQVRJT05fQ09OVFJPTCkpIHtcbkBAIC0xMDA3LDcgJiM0MzsxMDM5LDQ0IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrdm1faW5pdF9wbGF0Zm9ybSh2b2lkKVxuIFx0XHRcdHdybXNycShNU1JfS1ZNX01JR1JBVElPTl9DT05UUk9MLFxuIFx0XHRcdCAgICAgICBLVk1fTUlHUkFUSU9OX1JFQURZKTtcbiBcdH1cbi1cdGt2bWNsb2NrX2luaXQoKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiBLVk0gYWR2ZXJ0aXNlcyB0aGUgZnJlcXVlbmN5IGRpcmVjdGx5IGluIENQVUlELCB1c2UgdGhhdCBpbnN0ZWFkXG4mIzQzO1x0ICogb2YgcmV2ZXJzZS1jYWxjdWxhdGluZyBpdCBmcm9tIHRoZSBLVk0gY2xvY2sgZGF0YSwgb3Igd29yc2UsIHRyeWluZ1xuJiM0MztcdCAqIHRvIGNhbGlicmF0YXRlIHRoZSBUU0MgdXNpbmcgYW4gZW11bGF0ZWQgZGV2aWNlLlxuJiM0MztcdCAqL1xuJiM0MztcdHRpbWluZ19pbmZvX2xlYWYgPSBrdm1fY3B1aWRfdGltaW5nX2luZm9fbGVhZigpO1xuJiM0MztcdGlmICh0aW1pbmdfaW5mb19sZWFmKSB7XG4mIzQzO1x0XHRrdm1fdHNjX2toel9jcHVpZCA9IGNwdWlkX2VheCh0aW1pbmdfaW5mb19sZWFmKTtcbiYjNDM7XHRcdGlmIChrdm1fdHNjX2toel9jcHVpZCkge1xuJiM0MztcdFx0XHR4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeiA9IGt2bV9nZXRfdHNjX2toejtcbiYjNDM7XHRcdFx0eDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHogPSBrdm1fZ2V0X3RzY19raHo7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogVGhlIGxlYWYgYWxzbyBpbmNsdWRlcyB0aGUgbG9jYWwgQVBJQyBidXMvdGltZXIgZnJlcXVlbmN5LiovXG4mIzQzO1x0XHRhcGljX2toeiA9IGNwdWlkX2VieCh0aW1pbmdfaW5mb19sZWFmKTtcbiYjNDM7XHRcdGlmIChhcGljX2toeilcbiYjNDM7XHRcdFx0YXBpY19zZXRfdGltZXJfcGVyaW9kX2toeihhcGljX2toeiwgXCYjMzQ7S1ZNIGh5cGVydmlzb3JcJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcmVmZXIgQ1BVSUQuMHgxNiBvdmVyIEtWTSYjMzk7cyBQViBDUFVJRCB3aGVuIHBvc3NpYmxlLCBhcyB0aGUgYmFzZSBDUFVcbiYjNDM7XHQgKiBmcmVxdWVuY3kgaXNuJiMzOTt0IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIHRoZSBUU0MgZnJlcXVlbmN5LlxuJiM0MztcdCAqL1xuJiM0MztcdGt2bV9jcHVfa2h6X2NwdWlkID0gX19jcHVfa2h6X2Zyb21fY3B1aWQoKTtcbiYjNDM7XHRpZiAoa3ZtX2NwdV9raHpfY3B1aWQpXG4mIzQzO1x0XHR4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeiA9IGt2bV9nZXRfY3B1X2toejtcbiYjNDM7XG4mIzQzOyAgICAgICAgLypcbiYjNDM7ICAgICAgICAgKiBJZiB0aGUgVFNDIGNvdW50cyBhdCBhIGNvbnN0YW50IGZyZXF1ZW5jeSBhY3Jvc3MgUC9UIHN0YXRlcyBhbmQgaW5cbiYjNDM7ICAgICAgICAgKiBkZWVwIEMtc3RhdGVzLCB0cmVhdCB0aGUgVFNDIHJlbGlhYmxlLCBhcyBndWFyYW50ZWVkIGJ5IEtWTS5cbiYjNDM7ICAgICAgICAgKi9cbiYjNDM7XHR0c2NfaXNfcmVsaWFibGUgPSBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTk9OU1RPUF9UU0MpO1xuJiM0MztcdGlmICh0c2NfaXNfcmVsaWFibGUpXG4mIzQzO1x0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7XG4mIzQzO1xuJiM0MztcdGt2bWNsb2NrX2luaXQodHNjX2lzX3JlbGlhYmxlKTtcbiBcdHg4Nl9wbGF0Zm9ybS5hcGljX3Bvc3RfaW5pdCA9IGt2bV9hcGljX2luaXQ7XG4gXG4gXHQvKlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jIGIvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmNcbmluZGV4IGNiM2QwY2ExZmEyMjVhLi44NDJmMzhjNWY2Y2FhZCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suY1xuQEAgLTEyLDcgJiM0MzsxMiw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaGFyZGlycS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3B1aG90cGx1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL2Nsb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2V0X21lbW9yeS5oXHUwMDNlXG5AQCAtNTQsNiAmIzQzOzUzLDggQEAgc3RhdGljIHN0cnVjdCBwdmNsb2NrX3ZzeXNjYWxsX3RpbWVfaW5mbyAqaHZjbG9ja19tZW07XG4gREVGSU5FX1BFUl9DUFUoc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICosIGh2X2Nsb2NrX3Blcl9jcHUpO1xuIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTF9HUEwoaHZfY2xvY2tfcGVyX2NwdSk7XG4gXG4mIzQzO3N0YXRpYyBib29sIGt2bWNsb2NrX3N1c3BlbmRlZDtcbiYjNDM7XG4gLypcbiAgKiBUaGUgd2FsbGNsb2NrIGlzIHRoZSB0aW1lIG9mIGRheSB3aGVuIHdlIGJvb3RlZC4gU2luY2UgdGhlbiwgc29tZSB0aW1lIG1heVxuICAqIGhhdmUgZWxhcHNlZCBzaW5jZSB0aGUgaHlwZXJ2aXNvciB3cm90ZSB0aGUgZGF0YS4gU28gd2UgdHJ5IHRvIGFjY291bnQgZm9yXG5AQCAtNjEsNiAmIzQzOzYyLDcgQEAgRVhQT1JUX1BFUl9DUFVfU1lNQk9MX0dQTChodl9jbG9ja19wZXJfY3B1KTtcbiAgKi9cbiBzdGF0aWMgdm9pZCBrdm1fZ2V0X3dhbGxjbG9jayhzdHJ1Y3QgdGltZXNwZWM2NCAqbm93KVxuIHtcbiYjNDM7XHRXQVJOX09OX09OQ0Uoa3ZtY2xvY2tfc3VzcGVuZGVkKTtcbiBcdHdybXNycShtc3Jfa3ZtX3dhbGxfY2xvY2ssIHNsb3dfdmlydF90b19waHlzKFx1MDAyNndhbGxfY2xvY2spKTtcbiBcdHByZWVtcHRfZGlzYWJsZSgpO1xuIFx0cHZjbG9ja19yZWFkX3dhbGxjbG9jayhcdTAwMjZ3YWxsX2Nsb2NrLCB0aGlzX2NwdV9wdnRpKCksIG5vdyk7XG5AQCAtNzIsNiAmIzQzOzc0LDI1IEBAIHN0YXRpYyBpbnQga3ZtX3NldF93YWxsY2xvY2soY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKm5vdylcbiBcdHJldHVybiAtRU5PREVWO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQga3ZtX3JlZ2lzdGVyX2Nsb2NrKGNoYXIgKnR4dClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwdmNsb2NrX3ZzeXNjYWxsX3RpbWVfaW5mbyAqc3JjID0gdGhpc19jcHVfaHZjbG9jaygpO1xuJiM0MztcdHU2NCBwYTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzcmMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBhID0gc2xvd192aXJ0X3RvX3BoeXMoXHUwMDI2c3JjLVx1MDAzZXB2dGkpIHwgMHgwMVVMTDtcbiYjNDM7XHR3cm1zcnEobXNyX2t2bV9zeXN0ZW1fdGltZSwgcGEpO1xuJiM0MztcdHByX2RlYnVnKFwmIzM0O2t2bS1jbG9jazogY3B1ICVkLCBtc3IgJWxseCwgJXNcJiMzNDssIHNtcF9wcm9jZXNzb3JfaWQoKSwgcGEsIHR4dCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGt2bWNsb2NrX2Rpc2FibGUodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmIChtc3Jfa3ZtX3N5c3RlbV90aW1lKVxuJiM0MztcdFx0bmF0aXZlX3dyaXRlX21zcihtc3Jfa3ZtX3N5c3RlbV90aW1lLCAwKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdTY0IGt2bV9jbG9ja19yZWFkKHZvaWQpXG4ge1xuIFx0dTY0IHJldDtcbkBAIC0xMTMsMTggJiM0MzsxMzQsNzQgQEAgc3RhdGljIG5vaW5zdHIgdTY0IGt2bV9zY2hlZF9jbG9ja19yZWFkKHZvaWQpXG4gXHRyZXR1cm4gcHZjbG9ja19jbG9ja3NvdXJjZV9yZWFkX25vd2QodGhpc19jcHVfcHZ0aSgpKSAtIGt2bV9zY2hlZF9jbG9ja19vZmZzZXQ7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fc2NoZWRfY2xvY2tfaW5pdChib29sIHN0YWJsZSlcbiYjNDM7c3RhdGljIHZvaWQga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcbiB7XG4tXHRpZiAoIXN0YWJsZSlcbi1cdFx0Y2xlYXJfc2NoZWRfY2xvY2tfc3RhYmxlKCk7XG4tXHRrdm1fc2NoZWRfY2xvY2tfb2Zmc2V0ID0ga3ZtX2Nsb2NrX3JlYWQoKTtcbi1cdHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayhrdm1fc2NoZWRfY2xvY2tfcmVhZCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTdG9wIGhvc3Qgd3JpdGVzIHRvIGt2bWNsb2NrIGltbWVkaWF0ZWx5IHByaW9yIHRvIHN1c3BlbmQvaGliZXJuYXRlLlxuJiM0MztcdCAqIElmIHRoZSBzeXN0ZW0gaXMgaGliZXJuYXRpbmcsIHRoZW4ga3ZtY2xvY2sgd2lsbCBsaWtlbHkgcmVzaWRlIGF0IGFcbiYjNDM7XHQgKiBkaWZmZXJlbnQgcGh5c2ljYWwgYWRkcmVzcyB3aGVuIHRoZSBzeXN0ZW0gYXdha2VucywgYW5kIGhvc3Qgd3JpdGVzXG4mIzQzO1x0ICogdG8gdGhlIG9sZCBhZGRyZXNzIHByaW9yIHRvIHJlY29uZmlndXJpbmcga3ZtY2xvY2sgd291bGQgY2xvYmJlclxuJiM0MztcdCAqIHJhbmRvbSBtZW1vcnkuXG4mIzQzO1x0ICovXG4mIzQzO1x0a3ZtY2xvY2tfc3VzcGVuZGVkID0gdHJ1ZTtcbiYjNDM7XHRrdm1jbG9ja19kaXNhYmxlKCk7XG4mIzQzO31cbiBcbi1cdHByX2luZm8oXCYjMzQ7a3ZtLWNsb2NrOiB1c2luZyBzY2hlZCBvZmZzZXQgb2YgJWxsdSBjeWNsZXNcJiMzNDssXG4tXHRcdGt2bV9zY2hlZF9jbG9ja19vZmZzZXQpO1xuJiM0MzsjaWZkZWYgQ09ORklHX1NNUFxuJiM0MztzdGF0aWMgdm9pZCBrdm1fc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRrdm1fcmVnaXN0ZXJfY2xvY2soXCYjMzQ7c2Vjb25kYXJ5IGNwdSwgc3RhcnR1cFwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4gXG4tXHRCVUlMRF9CVUdfT04oc2l6ZW9mKGt2bV9zY2hlZF9jbG9ja19vZmZzZXQpIFx1MDAzZVxuLVx0XHRzaXplb2YoKChzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqKU5VTEwpLVx1MDAzZXN5c3RlbV90aW1lKSk7XG4mIzQzO3N0YXRpYyB2b2lkIGt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRrdm1jbG9ja19zdXNwZW5kZWQgPSBmYWxzZTtcbiYjNDM7XHRrdm1fcmVnaXN0ZXJfY2xvY2soXCYjMzQ7cHJpbWFyeSBjcHUsIHNjaGVkX2Nsb2NrIHJlc3VtZVwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGt2bWNsb2NrX3N1c3BlbmQoc3RydWN0IGNsb2Nrc291cmNlICpjcylcbiYjNDM7e1xuJiM0MztcdGt2bWNsb2NrX3N1c3BlbmRlZCA9IHRydWU7XG4mIzQzO1x0a3ZtY2xvY2tfZGlzYWJsZSgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBrdm1jbG9ja19yZXN1bWUoc3RydWN0IGNsb2Nrc291cmNlICpjcylcbiYjNDM7e1xuJiM0MztcdGt2bWNsb2NrX3N1c3BlbmRlZCA9IGZhbHNlO1xuJiM0MztcdGt2bV9yZWdpc3Rlcl9jbG9jayhcJiMzNDtwcmltYXJ5IGNwdSwgY2xvY2tzb3VyY2UgcmVzdW1lXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBrdm1jbG9ja19jcHVfYWN0aW9uKGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChhY3Rpb24pIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGUgQlNQJiMzOTtzIGNsb2NrIGlzIG1hbmFnZWQgdmlhIGNsb2Nrc291cmNlIHN1c3BlbmQvcmVzdW1lLFxuJiM0MztcdFx0ICogdG8gZW5zdXJlIGl0JiMzOTtzIGVuYWJsZWQvZGlzYWJsZWQgd2hlbiB0aW1la2VlcGluZyBuZWVkcyBpdFxuJiM0MztcdFx0ICogdG8gYmUsIGUuZy4gYmVmb3JlIHJlYWRpbmcgd2FsbGNsb2NrICh3aGljaCB1c2VzIGt2bWNsb2NrKS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdGNhc2UgS1ZNX0dVRVNUX0JTUF9TVVNQRU5EOlxuJiM0MztcdGNhc2UgS1ZNX0dVRVNUX0JTUF9SRVNVTUU6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEtWTV9HVUVTVF9BUF9PTkxJTkU6XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogU2Vjb25kYXJ5IENQVXMgdXNlIGEgZGVkaWNhdGVkIGhvb2sgdG8gZW5hYmxlIGt2bWNsb2NrIGVhcmx5XG4mIzQzO1x0XHQgKiBkdXJpbmcgYnJpbmd1cCwgdGhlcmUmIzM5O3Mgbm90aGluZyB0byBiZSBkb25lIGR1cmluZyBDUFUgb25saW5lXG4mIzQzO1x0XHQgKiAod2hpY2ggcnVucyBhdCBDUFVIUF9BUF9PTkxJTkVfRFlOKS4gIFdoZW4ga3ZtY2xvY2sgaXMgYmVpbmdcbiYjNDM7XHRcdCAqIHVzZWQgYXMgc2NoZWRfY2xvY2ssIGt2bWNsb2NrIG11c3QgYmUgZW5hYmxlZCAqdmVyeSogZWFybHksXG4mIzQzO1x0XHQgKiBhbmQgZXZlbiB3aGVuIGt2bWNsb2NrIGlzIFwmIzM0O29ubHlcJiMzNDsgYmVpbmcgdXNlZCBmb3IgdGhlIG1haW5cbiYjNDM7XHRcdCAqIGNsb2Nrc291cmNlLCBpdCBzdGlsbCBuZWVkcyB0byBiZSBlbmFibGVkIGxvbmcgYmVmb3JlIHRoZVxuJiM0MztcdFx0ICogZHluYW1pYyBDUFVIUCBjYWxscyBhcmUgbWFkZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBLVk1fR1VFU1RfQVBfT0ZGTElORTpcbiYjNDM7XHRjYXNlIEtWTV9HVUVTVF9TSFVURE9XTjpcbiYjNDM7XHRcdGt2bWNsb2NrX2Rpc2FibGUoKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRXQVJOX09OX09OQ0UoMSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4gfVxuIFxuIC8qXG5AQCAtMTM2LDkgJiM0MzsyMTMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3NjaGVkX2Nsb2NrX2luaXQoYm9vbCBzdGFibGUpXG4gICogcG9sbCBvZiBndWVzdHMgY2FuIGJlIHJ1bm5pbmcgYW5kIHRyb3VibGUgZWFjaCBvdGhlci4gU28gd2UgcHJlc2V0XG4gICogbHBqIGhlcmVcbiAgKi9cbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fZ2V0X3RzY19raHoodm9pZClcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQga3ZtY2xvY2tfZ2V0X3RzY19raHoodm9pZClcbiB7XG4tXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKTtcbiBcdHJldHVybiBwdmNsb2NrX3RzY19raHoodGhpc19jcHVfcHZ0aSgpKTtcbiB9XG4gXG5AQCAtMTQ3LDcgJiM0MzsyMjMsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQga3ZtX2dldF9wcmVzZXRfbHBqKHZvaWQpXG4gXHR1bnNpZ25lZCBsb25nIGtoejtcbiBcdHU2NCBscGo7XG4gXG4tXHRraHogPSBrdm1fZ2V0X3RzY19raHooKTtcbiYjNDM7XHRraHogPSBrdm1jbG9ja19nZXRfdHNjX2toeigpO1xuIFxuIFx0bHBqID0gKCh1NjQpa2h6ICogMTAwMCk7XG4gXHRkb19kaXYobHBqLCBIWik7XG5AQCAtMTg1LDQzICYjNDM7MjYxLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2Uga3ZtX2Nsb2NrID0ge1xuIFx0LmZsYWdzXHRcdD0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsXG4gXHQuaWRcdFx0PSBDU0lEX1g4Nl9LVk1fQ0xLLFxuIFx0LmVuYWJsZVx0XHQ9IGt2bV9jc19lbmFibGUsXG4mIzQzO1x0LnN1c3BlbmRcdD0ga3ZtY2xvY2tfc3VzcGVuZCxcbiYjNDM7XHQucmVzdW1lXHRcdD0ga3ZtY2xvY2tfcmVzdW1lLFxuIH07XG4gXG4tc3RhdGljIHZvaWQga3ZtX3JlZ2lzdGVyX2Nsb2NrKGNoYXIgKnR4dClcbi17XG4tXHRzdHJ1Y3QgcHZjbG9ja192c3lzY2FsbF90aW1lX2luZm8gKnNyYyA9IHRoaXNfY3B1X2h2Y2xvY2soKTtcbi1cdHU2NCBwYTtcbi1cbi1cdGlmICghc3JjKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRwYSA9IHNsb3dfdmlydF90b19waHlzKFx1MDAyNnNyYy1cdTAwM2VwdnRpKSB8IDB4MDFVTEw7XG4tXHR3cm1zcnEobXNyX2t2bV9zeXN0ZW1fdGltZSwgcGEpO1xuLVx0cHJfZGVidWcoXCYjMzQ7a3ZtLWNsb2NrOiBjcHUgJWQsIG1zciAlbGx4LCAlc1wmIzM0Oywgc21wX3Byb2Nlc3Nvcl9pZCgpLCBwYSwgdHh0KTtcbi19XG4tXG4tc3RhdGljIHZvaWQga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcbi17XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXG4te1xuLVx0a3ZtX3JlZ2lzdGVyX2Nsb2NrKFwmIzM0O3ByaW1hcnkgY3B1IGNsb2NrLCByZXN1bWVcJiMzNDspO1xuLX1cbi1cbi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDXG4tc3RhdGljIHZvaWQga3ZtX3NldHVwX3NlY29uZGFyeV9jbG9jayh2b2lkKVxuLXtcbi1cdGt2bV9yZWdpc3Rlcl9jbG9jayhcJiMzNDtzZWNvbmRhcnkgY3B1IGNsb2NrXCYjMzQ7KTtcbi19XG4tI2VuZGlmXG4tXG4tdm9pZCBrdm1jbG9ja19kaXNhYmxlKHZvaWQpXG4te1xuLVx0aWYgKG1zcl9rdm1fc3lzdGVtX3RpbWUpXG4tXHRcdG5hdGl2ZV93cml0ZV9tc3IobXNyX2t2bV9zeXN0ZW1fdGltZSwgMCk7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIF9faW5pdCBrdm1jbG9ja19pbml0X21lbSh2b2lkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbmNwdXM7XG5AQCAtMzA4LDkgJiM0MzszNTEsMzUgQEAgc3RhdGljIGludCBrdm1jbG9ja19zZXR1cF9wZXJjcHUodW5zaWduZWQgaW50IGNwdSlcbiBcdHJldHVybiBwID8gMCA6IC1FTk9NRU07XG4gfVxuIFxuLXZvaWQgX19pbml0IGt2bWNsb2NrX2luaXQodm9pZClcbiYjNDM7c3RhdGljIF9faW5pdCB2b2lkIGt2bV9zY2hlZF9jbG9ja19pbml0KGJvb2wgc3RhYmxlKVxuIHtcbi1cdHU4IGZsYWdzO1xuJiM0MztcdC8qIEVuc3VyZSB0aGUgb2Zmc2V0IGlzIGNvbmZpZ3VyZWQgYmVmb3JlIG1ha2luZyBrdm1jbG9jayB2aXNpYmxlISAqL1xuJiM0MztcdGt2bV9zY2hlZF9jbG9ja19vZmZzZXQgPSBrdm1fY2xvY2tfcmVhZCgpO1xuJiM0MztcbiYjNDM7XHRpZiAoX19wYXJhdmlydF9zZXRfc2NoZWRfY2xvY2soa3ZtX3NjaGVkX2Nsb2NrX3JlYWQsIHN0YWJsZSxcbiYjNDM7XHRcdFx0XHQgICAgICAga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgQlNQJiMzOTtzIGNsb2NrIGlzIG1hbmFnZWQgdmlhIGRlZGljYXRlZCBzY2hlZF9jbG9jayBzYXZlL3Jlc3RvcmVcbiYjNDM7XHQgKiBob29rcyB3aGVuIGt2bWNsb2NrIGlzIHVzZWQgYXMgc2NoZWRfY2xvY2ssIGFzIHNjaGVkX2Nsb2NrIG5lZWRzIHRvXG4mIzQzO1x0ICogYmUga2VwdCBhbGl2ZSB1bnRpbCB0aGUgdmVyeSBlbmQgb2Ygc3VzcGVuZCBlbnRyeSwgYW5kIHJlc3RvcmVkIGFzXG4mIzQzO1x0ICogcXVpY2tseSBhcyBwb3NzaWJsZSBhZnRlciByZXN1bWUuXG4mIzQzO1x0ICovXG4mIzQzO1x0a3ZtX2Nsb2NrLnN1c3BlbmQgPSBOVUxMO1xuJiM0MztcdGt2bV9jbG9jay5yZXN1bWUgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRwcl9pbmZvKFwmIzM0O2t2bS1jbG9jazogdXNpbmcgc2NoZWQgb2Zmc2V0IG9mICVsbHUgY3ljbGVzXCYjMzQ7LFxuJiM0MztcdFx0a3ZtX3NjaGVkX2Nsb2NrX29mZnNldCk7XG4mIzQzO1xuJiM0MztcdEJVSUxEX0JVR19PTihzaXplb2Yoa3ZtX3NjaGVkX2Nsb2NrX29mZnNldCkgXHUwMDNlXG4mIzQzO1x0XHRzaXplb2YoKChzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqKU5VTEwpLVx1MDAzZXN5c3RlbV90aW1lKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgX19pbml0IGt2bWNsb2NrX2luaXQoYm9vbCBwcmVmZXJfdHNjKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBzdGFibGUgPSBmYWxzZTtcbiBcbiBcdGlmICgha3ZtX3BhcmFfYXZhaWxhYmxlKCkgfHwgIWt2bWNsb2NrKVxuIFx0XHRyZXR1cm47XG5AQCAtMzM0LDM4ICYjNDM7NDAzLDQxIEBAIHZvaWQgX19pbml0IGt2bWNsb2NrX2luaXQodm9pZClcbiBcdFx0bXNyX2t2bV9zeXN0ZW1fdGltZSwgbXNyX2t2bV93YWxsX2Nsb2NrKTtcbiBcbiBcdHRoaXNfY3B1X3dyaXRlKGh2X2Nsb2NrX3Blcl9jcHUsIFx1MDAyNmh2X2Nsb2NrX2Jvb3RbMF0pO1xuLVx0a3ZtX3JlZ2lzdGVyX2Nsb2NrKFwmIzM0O3ByaW1hcnkgY3B1IGNsb2NrXCYjMzQ7KTtcbiYjNDM7XHRrdm1fcmVnaXN0ZXJfY2xvY2soXCYjMzQ7cHJpbWFyeSBjcHUsIG9ubGluZVwmIzM0Oyk7XG4gXHRwdmNsb2NrX3NldF9wdnRpX2NwdTBfdmEoaHZfY2xvY2tfYm9vdCk7XG4gXG4tXHRpZiAoa3ZtX3BhcmFfaGFzX2ZlYXR1cmUoS1ZNX0ZFQVRVUkVfQ0xPQ0tTT1VSQ0VfU1RBQkxFX0JJVCkpXG4mIzQzO1x0aWYgKGt2bV9wYXJhX2hhc19mZWF0dXJlKEtWTV9GRUFUVVJFX0NMT0NLU09VUkNFX1NUQUJMRV9CSVQpKSB7XG4gXHRcdHB2Y2xvY2tfc2V0X2ZsYWdzKFBWQ0xPQ0tfVFNDX1NUQUJMRV9CSVQpO1xuIFxuLVx0ZmxhZ3MgPSBwdmNsb2NrX3JlYWRfZmxhZ3MoXHUwMDI2aHZfY2xvY2tfYm9vdFswXS5wdnRpKTtcbi1cdGt2bV9zY2hlZF9jbG9ja19pbml0KGZsYWdzIFx1MDAyNiBQVkNMT0NLX1RTQ19TVEFCTEVfQklUKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBDaGVjayBpZiB0aGUgY2xvY2sgaXMgc3RhYmxlICphZnRlciogbWFya2luZyBUU0NfU1RBQkxFIGFzIGFcbiYjNDM7XHRcdCAqIHZhbGlkIGZsYWcuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHN0YWJsZSA9IHB2Y2xvY2tfcmVhZF9mbGFncyhcdTAwMjZodl9jbG9ja19ib290WzBdLnB2dGkpIFx1MDAyNlxuJiM0MztcdFx0XHQgUFZDTE9DS19UU0NfU1RBQkxFX0JJVDtcbiYjNDM7XHR9XG4gXG4tXHR4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX3RzYyA9IGt2bV9nZXRfdHNjX2toejtcbi1cdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ID0ga3ZtX2dldF90c2Nfa2h6O1xuJiM0MztcbiYjNDM7XHRpZiAoIXg4Nl9pbml0Lmh5cGVyLmdldF90c2Nfa2h6KVxuJiM0MztcdFx0eDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHogPSBrdm1jbG9ja19nZXRfdHNjX2toejtcbiYjNDM7XHRpZiAoIXg4Nl9pbml0Lmh5cGVyLmdldF9jcHVfa2h6KVxuJiM0MztcdFx0eDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHogPSBrdm1jbG9ja19nZXRfdHNjX2toejtcbiBcdHg4Nl9wbGF0Zm9ybS5nZXRfd2FsbGNsb2NrID0ga3ZtX2dldF93YWxsY2xvY2s7XG4gXHR4ODZfcGxhdGZvcm0uc2V0X3dhbGxjbG9jayA9IGt2bV9zZXRfd2FsbGNsb2NrO1xuLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUNcbiYjNDM7I2lmZGVmIENPTkZJR19TTVBcbiBcdHg4Nl9jcHVpbml0LmVhcmx5X3BlcmNwdV9jbG9ja19pbml0ID0ga3ZtX3NldHVwX3NlY29uZGFyeV9jbG9jaztcbiAjZW5kaWZcbi1cdHg4Nl9wbGF0Zm9ybS5zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlID0ga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGU7XG4tXHR4ODZfcGxhdGZvcm0ucmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSA9IGt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlO1xuIFx0a3ZtX2dldF9wcmVzZXRfbHBqKCk7XG4gXG4gXHQvKlxuLVx0ICogWDg2X0ZFQVRVUkVfTk9OU1RPUF9UU0MgaXMgVFNDIHJ1bnMgYXQgY29uc3RhbnQgcmF0ZVxuLVx0ICogd2l0aCBQL1Qgc3RhdGVzIGFuZCBkb2VzIG5vdCBzdG9wIGluIGRlZXAgQy1zdGF0ZXMuXG4tXHQgKlxuLVx0ICogSW52YXJpYW50IFRTQyBleHBvc2VkIGJ5IGhvc3QgbWVhbnMga3ZtY2xvY2sgaXMgbm90IG5lY2Vzc2FyeTpcbi1cdCAqIGNhbiB1c2UgVFNDIGFzIGNsb2Nrc291cmNlLlxuLVx0ICpcbiYjNDM7XHQgKiBJZiBUU0MgaXMgcHJlZmVycmVkIG92ZXIga3ZtbG9jaywgZHJvcCBrdm1jbG9jayYjMzk7cyByYXRpbmcgc28gdGhhdCBUU0NcbiYjNDM7XHQgKiBpcyBjaG9zZW4gYXMgdGhlIGNsb2Nrc291cmNlIChidXQgc3RpbGwgcmVnaXN0ZXIga3ZtY2xvY2sgaW4gY2FzZVxuJiM0MztcdCAqIHRoZSBrZXJuZWwgZG9lc24mIzM5O3Qgd2FudCB0byB1c2UgVFNDIGZvciB3aGF0ZXZlciByZWFzb24pLlxuIFx0ICovXG4tXHRpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQykgXHUwMDI2XHUwMDI2XG4tXHQgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05PTlNUT1BfVFNDKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhY2hlY2tfdHNjX3Vuc3RhYmxlKCkpXG4mIzQzO1x0aWYgKHByZWZlcl90c2MpXG4gXHRcdGt2bV9jbG9jay5yYXRpbmcgPSAyOTk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0a3ZtX3NjaGVkX2Nsb2NrX2luaXQoc3RhYmxlKTtcbiBcbiBcdGNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KFx1MDAyNmt2bV9jbG9jaywgTlNFQ19QRVJfU0VDKTtcbiBcdHB2X2luZm8ubmFtZSA9IFwmIzM0O0tWTVwmIzM0OztcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHZjbG9jay5jIGIvYXJjaC94ODYva2VybmVsL3B2Y2xvY2suY1xuaW5kZXggYjNmODEzNzljMmZjMDYuLjhkMDk4ODQxYTIyNWY2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL3B2Y2xvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL3B2Y2xvY2suY1xuQEAgLTE2LDExICYjNDM7MTYsMTIgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcHZjbG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3ZndG9kLmhcdTAwM2VcbiBcbi1zdGF0aWMgdTggdmFsaWRfZmxhZ3MgX19yZWFkX21vc3RseSA9IDA7XG4tc3RhdGljIHN0cnVjdCBwdmNsb2NrX3ZzeXNjYWxsX3RpbWVfaW5mbyAqcHZ0aV9jcHUwX3ZhIF9fcmVhZF9tb3N0bHk7XG4mIzQzO3N0YXRpYyB1OCB2YWxpZF9mbGFncyBfX3JvX2FmdGVyX2luaXQgPSAwO1xuJiM0MztzdGF0aWMgc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICpwdnRpX2NwdTBfdmEgX19yb19hZnRlcl9pbml0O1xuIFxuLXZvaWQgcHZjbG9ja19zZXRfZmxhZ3ModTggZmxhZ3MpXG4mIzQzO3ZvaWQgX19pbml0IHB2Y2xvY2tfc2V0X2ZsYWdzKHU4IGZsYWdzKVxuIHtcbiYjNDM7XHRXQVJOX09OKHZhbGlkX2ZsYWdzKTtcbiBcdHZhbGlkX2ZsYWdzID0gZmxhZ3M7XG4gfVxuIFxuQEAgLTE1Myw3ICYjNDM7MTU0LDcgQEAgdm9pZCBwdmNsb2NrX3JlYWRfd2FsbGNsb2NrKHN0cnVjdCBwdmNsb2NrX3dhbGxfY2xvY2sgKndhbGxfY2xvY2ssXG4gXHRzZXRfbm9ybWFsaXplZF90aW1lc3BlYzY0KHRzLCBub3cudHZfc2VjLCBub3cudHZfbnNlYyk7XG4gfVxuIFxuLXZvaWQgcHZjbG9ja19zZXRfcHZ0aV9jcHUwX3ZhKHN0cnVjdCBwdmNsb2NrX3ZzeXNjYWxsX3RpbWVfaW5mbyAqcHZ0aSlcbiYjNDM7dm9pZCBfX2luaXQgcHZjbG9ja19zZXRfcHZ0aV9jcHUwX3ZhKHN0cnVjdCBwdmNsb2NrX3ZzeXNjYWxsX3RpbWVfaW5mbyAqcHZ0aSlcbiB7XG4gXHRXQVJOX09OKHZjbG9ja193YXNfdXNlZChWRFNPX0NMT0NLTU9ERV9QVkNMT0NLKSk7XG4gXHRwdnRpX2NwdTBfdmEgPSBwdnRpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90c2MuYyBiL2FyY2gveDg2L2tlcm5lbC90c2MuY1xuaW5kZXggY2UxMGFlNGIyOThiNzkuLjU2NGJlNGZhYTVhMGJiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL3RzYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjLmNcbkBAIC0zNCw2ICYjNDM7MzQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS90b3BvbG9neS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3V2L3V2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2V2LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL3RkeC5oXHUwMDNlXG4gXG4gdW5zaWduZWQgaW50IF9fcmVhZF9tb3N0bHkgY3B1X2toejtcdC8qIFRTQyBjbG9ja3MgLyB1c2VjLCBub3QgdXNlZCBoZXJlICovXG4gRVhQT1JUX1NZTUJPTChjcHVfa2h6KTtcbkBAIC0yNzksMTUgJiM0MzsyODAsMjggQEAgYm9vbCB1c2luZ19uYXRpdmVfc2NoZWRfY2xvY2sodm9pZClcbiBcdHJldHVybiBzdGF0aWNfY2FsbF9xdWVyeShwdl9zY2hlZF9jbG9jaykgPT0gbmF0aXZlX3NjaGVkX2Nsb2NrO1xuIH1cbiBcbi12b2lkIHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh1NjQgKCpmdW5jKSh2b2lkKSlcbiYjNDM7aW50IF9faW5pdCBfX3BhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh1NjQgKCpmdW5jKSh2b2lkKSwgYm9vbCBzdGFibGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgdm9pZCAoKnNhdmUpKHZvaWQpLCB2b2lkICgqcmVzdG9yZSkodm9pZCkpXG4ge1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRG9uJiMzOTt0IHJlcGxhY2UgVFNDIHdpdGggYSBQViBjbG9jayB3aGVuIHJ1bm5pbmcgYXMgYSBDb0NvIGd1ZXN0IGFuZFxuJiM0MztcdCAqIHRoZSBUU0MgaXMgc2VjdXJlL3RydXN0ZWQ7IFBWIGNsb2NrcyBhcmUgZW11bGF0ZWQgYnkgdGhlIGh5cGVydmlzb3IsXG4mIzQzO1x0ICogd2hpY2ggaXNuJiMzOTt0IGluIHRoZSBndWVzdCYjMzk7cyBUQ0IuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0dVRVNUX1NOUF9TRUNVUkVfVFNDKSB8fFxuJiM0MztcdCAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcbiYjNDM7XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1xuJiM0MztcdGlmICghc3RhYmxlKVxuJiM0MztcdFx0Y2xlYXJfc2NoZWRfY2xvY2tfc3RhYmxlKCk7XG4mIzQzO1xuIFx0c3RhdGljX2NhbGxfdXBkYXRlKHB2X3NjaGVkX2Nsb2NrLCBmdW5jKTtcbiYjNDM7XHR4ODZfcGxhdGZvcm0uc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSA9IHNhdmU7XG4mIzQzO1x0eDg2X3BsYXRmb3JtLnJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUgPSByZXN0b3JlO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiAjZWxzZVxuIHU2NCBzY2hlZF9jbG9ja19ub2luc3RyKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsaWFzKFwmIzM0O25hdGl2ZV9zY2hlZF9jbG9ja1wmIzM0OykpKTtcbi1cbi1ib29sIHVzaW5nX25hdGl2ZV9zY2hlZF9jbG9jayh2b2lkKSB7IHJldHVybiB0cnVlOyB9XG4tdm9pZCBwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodTY0ICgqZnVuYykodm9pZCkpIHsgfVxuICNlbmRpZlxuIFxuIG5vdHJhY2UgdTY0IHNjaGVkX2Nsb2NrKHZvaWQpXG5AQCAtNjQ1LDQ2ICYjNDM7NjU5LDY4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHF1aWNrX3BpdF9jYWxpYnJhdGUodm9pZClcbiBcdHJldHVybiBkZWx0YTtcbiB9XG4gXG4mIzQzO2ludCBjcHVpZF9nZXRfdHNjX2luZm8oc3RydWN0IGNwdWlkX3RzY19pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGVjeF9oeiwgZWR4O1xuJiM0MztcbiYjNDM7XHRpZiAoYm9vdF9jcHVfZGF0YS5jcHVpZF9sZXZlbCBcdTAwM2MgQ1BVSURfTEVBRl9UU0MpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XG4mIzQzO1x0LyogQ1BVSUQgMTVIIFRTQy9DcnlzdGFsIHJhdGlvLCBwbHVzIG9wdGlvbmFsbHkgQ3J5c3RhbCBIeiAqL1xuJiM0MztcdGNwdWlkKENQVUlEX0xFQUZfVFNDLCBcdTAwMjZpbmZvLVx1MDAzZWRlbm9taW5hdG9yLCBcdTAwMjZpbmZvLVx1MDAzZW51bWVyYXRvciwgXHUwMDI2ZWN4X2h6LCBcdTAwMjZlZHgpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWluZm8tXHUwMDNlZGVub21pbmF0b3IgfHwgIWluZm8tXHUwMDNlbnVtZXJhdG9yKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTm90ZTogc29tZSBDUFVzIHByb3ZpZGUgdGhlIG11bHRpcGxpZXIgaW5mb3JtYXRpb24sIGJ1dCBub3QgdGhlIGNvcmVcbiYjNDM7XHQgKiBjcnlzdGFsIGZyZXF1ZW5jeS4gIFRoZSBtdWx0aXBsaWVyIGluZm9ybWF0aW9uIGlzIHN0aWxsIHVzZWZ1bCBmb3JcbiYjNDM7XHQgKiBzdWNoIENQVXMsIGFzIHRoZSBjcnlzdGFsIGZyZXF1ZW5jeSBjYW4gYmUgZ2xlYW5lZCBmcm9tIENQVUlELjB4MTYuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW5mby1cdTAwM2VjcnlzdGFsX2toeiA9IGVjeF9oeiAvIDEwMDA7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3Vuc2lnbmVkIGludCBfX2NwdV9raHpfZnJvbV9jcHVpZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGVheF9iYXNlX21oeiwgZWJ4LCBlY3gsIGVkeDtcbiYjNDM7XG4mIzQzO1x0aWYgKGJvb3RfY3B1X2RhdGEuY3B1aWRfbGV2ZWwgXHUwMDNjIENQVUlEX0xFQUZfRlJFUSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRjcHVpZChDUFVJRF9MRUFGX0ZSRVEsIFx1MDAyNmVheF9iYXNlX21oeiwgXHUwMDI2ZWJ4LCBcdTAwMjZlY3gsIFx1MDAyNmVkeCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlYXhfYmFzZV9taHogKiAxMDAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIG5hdGl2ZV9jYWxpYnJhdGVfdHNjIC0gZGV0ZXJtaW5lIFRTQyBmcmVxdWVuY3lcbiAgKiBEZXRlcm1pbmUgVFNDIGZyZXF1ZW5jeSB2aWEgQ1BVSUQsIGVsc2UgcmV0dXJuIDAuXG4gICovXG4tdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX3RzYyh2b2lkKVxuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX3RzYyh2b2lkKVxuIHtcbi1cdHVuc2lnbmVkIGludCBlYXhfZGVub21pbmF0b3IsIGVieF9udW1lcmF0b3IsIGVjeF9oeiwgZWR4O1xuLVx0dW5zaWduZWQgaW50IGNyeXN0YWxfa2h6O1xuJiM0MztcdHN0cnVjdCBjcHVpZF90c2NfaW5mbyBpbmZvO1xuIFxuIFx0aWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVMKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChib290X2NwdV9kYXRhLmNwdWlkX2xldmVsIFx1MDAzYyBDUFVJRF9MRUFGX1RTQylcbiYjNDM7XHRpZiAoY3B1aWRfZ2V0X3RzY19pbmZvKFx1MDAyNmluZm8pKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGVheF9kZW5vbWluYXRvciA9IGVieF9udW1lcmF0b3IgPSBlY3hfaHogPSBlZHggPSAwO1xuLVxuLVx0LyogQ1BVSUQgMTVIIFRTQy9DcnlzdGFsIHJhdGlvLCBwbHVzIG9wdGlvbmFsbHkgQ3J5c3RhbCBIeiAqL1xuLVx0Y3B1aWQoQ1BVSURfTEVBRl9UU0MsIFx1MDAyNmVheF9kZW5vbWluYXRvciwgXHUwMDI2ZWJ4X251bWVyYXRvciwgXHUwMDI2ZWN4X2h6LCBcdTAwMjZlZHgpO1xuLVxuLVx0aWYgKGVieF9udW1lcmF0b3IgPT0gMCB8fCBlYXhfZGVub21pbmF0b3IgPT0gMClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRjcnlzdGFsX2toeiA9IGVjeF9oeiAvIDEwMDA7XG4tXG4gXHQvKlxuIFx0ICogRGVudmVydG9uIFNvQ3MgZG9uJiMzOTt0IHJlcG9ydCBjcnlzdGFsIGNsb2NrLCBhbmQgYWxzbyBkb24mIzM5O3Qgc3VwcG9ydFxuIFx0ICogQ1BVSURfTEVBRl9GUkVRIGZvciB0aGUgY2FsY3VsYXRpb24gYmVsb3csIHNvIGhhcmRjb2RlIHRoZSAyNU1IelxuIFx0ICogY3J5c3RhbCBjbG9jay5cbiBcdCAqL1xuLVx0aWYgKGNyeXN0YWxfa2h6ID09IDAgXHUwMDI2XHUwMDI2XG4tXHRcdFx0Ym9vdF9jcHVfZGF0YS54ODZfdmZtID09IElOVEVMX0FUT01fR09MRE1PTlRfRClcbi1cdFx0Y3J5c3RhbF9raHogPSAyNTAwMDtcbiYjNDM7XHRpZiAoIWluZm8uY3J5c3RhbF9raHogXHUwMDI2XHUwMDI2IGJvb3RfY3B1X2RhdGEueDg2X3ZmbSA9PSBJTlRFTF9BVE9NX0dPTERNT05UX0QpXG4mIzQzO1x0XHRpbmZvLmNyeXN0YWxfa2h6ID0gMjUwMDA7XG4gXG4gXHQvKlxuIFx0ICogVFNDIGZyZXF1ZW5jeSByZXBvcnRlZCBkaXJlY3RseSBieSBDUFVJRCBpcyBhIFwmIzM0O2hhcmR3YXJlIHJlcG9ydGVkXCYjMzQ7XG4gXHQgKiBmcmVxdWVuY3kgYW5kIGlzIHRoZSBtb3N0IGFjY3VyYXRlIG9uZSBzbyBmYXIgd2UgaGF2ZS4gVGhpc1xuIFx0ICogaXMgY29uc2lkZXJlZCBhIGtub3duIGZyZXF1ZW5jeS5cbiBcdCAqL1xuLVx0aWYgKGNyeXN0YWxfa2h6ICE9IDApXG4mIzQzO1x0aWYgKGluZm8uY3J5c3RhbF9raHopXG4gXHRcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpO1xuIFxuIFx0LypcbkBAIC02OTIsMTUgJiM0Mzs3MjgsMTAgQEAgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX3RzYyh2b2lkKVxuIFx0ICogY2xvY2ssIGJ1dCB3ZSBjYW4gZWFzaWx5IGNhbGN1bGF0ZSBpdCB0byBhIGhpZ2ggZGVncmVlIG9mIGFjY3VyYWN5XG4gXHQgKiBieSBjb25zaWRlcmluZyB0aGUgY3J5c3RhbCByYXRpbyBhbmQgdGhlIENQVSBzcGVlZC5cbiBcdCAqL1xuLVx0aWYgKGNyeXN0YWxfa2h6ID09IDAgXHUwMDI2XHUwMDI2IGJvb3RfY3B1X2RhdGEuY3B1aWRfbGV2ZWwgXHUwMDNlPSBDUFVJRF9MRUFGX0ZSRVEpIHtcbi1cdFx0dW5zaWduZWQgaW50IGVheF9iYXNlX21oeiwgZWJ4LCBlY3gsIGVkeDtcbiYjNDM7XHRpZiAoIWluZm8uY3J5c3RhbF9raHopXG4mIzQzO1x0XHRpbmZvLmNyeXN0YWxfa2h6ID0gX19jcHVfa2h6X2Zyb21fY3B1aWQoKSAqIGluZm8uZGVub21pbmF0b3IgLyBpbmZvLm51bWVyYXRvcjtcbiBcbi1cdFx0Y3B1aWQoQ1BVSURfTEVBRl9GUkVRLCBcdTAwMjZlYXhfYmFzZV9taHosIFx1MDAyNmVieCwgXHUwMDI2ZWN4LCBcdTAwMjZlZHgpO1xuLVx0XHRjcnlzdGFsX2toeiA9IGVheF9iYXNlX21oeiAqIDEwMDAgKlxuLVx0XHRcdGVheF9kZW5vbWluYXRvciAvIGVieF9udW1lcmF0b3I7XG4tXHR9XG4tXG4tXHRpZiAoY3J5c3RhbF9raHogPT0gMClcbiYjNDM7XHRpZiAoIWluZm8uY3J5c3RhbF9raHopXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0LypcbkBAIC03MTAsNDEgJiM0Mzs3NDEsMzAgQEAgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX3RzYyh2b2lkKVxuIFx0aWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZmbSA9PSBJTlRFTF9BVE9NX0dPTERNT05UKVxuIFx0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7XG4gXG4tI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQ1xuIFx0LypcbiBcdCAqIFRoZSBsb2NhbCBBUElDIGFwcGVhcnMgdG8gYmUgZmVkIGJ5IHRoZSBjb3JlIGNyeXN0YWwgY2xvY2tcbiBcdCAqICh3aGljaCBzb3VuZHMgZW50aXJlbHkgc2Vuc2libGUpLiBXZSBjYW4gc2V0IHRoZSBnbG9iYWxcbiBcdCAqIGxhcGljX3RpbWVyX3BlcmlvZCBoZXJlIHRvIGF2b2lkIGhhdmluZyB0byBjYWxpYnJhdGUgdGhlIEFQSUNcbiBcdCAqIHRpbWVyIGxhdGVyLlxuIFx0ICovXG4tXHRsYXBpY190aW1lcl9wZXJpb2QgPSBjcnlzdGFsX2toeiAqIDEwMDAgLyBIWjtcbi0jZW5kaWZcbiYjNDM7XHRhcGljX3NldF90aW1lcl9wZXJpb2Rfa2h6KGluZm8uY3J5c3RhbF9raHosIFwmIzM0O0NQVUlEIDB4MTUvMHgxNlwmIzM0Oyk7XG4gXG4tXHRyZXR1cm4gY3J5c3RhbF9raHogKiBlYnhfbnVtZXJhdG9yIC8gZWF4X2Rlbm9taW5hdG9yO1xuJiM0MztcdHJldHVybiBpbmZvLmNyeXN0YWxfa2h6ICogaW5mby5udW1lcmF0b3IgLyBpbmZvLmRlbm9taW5hdG9yO1xuIH1cbiBcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfa2h6X2Zyb21fY3B1aWQodm9pZClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgZWF4X2Jhc2VfbWh6LCBlYnhfbWF4X21oeiwgZWN4X2J1c19taHosIGVkeDtcbi1cbiBcdGlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAoYm9vdF9jcHVfZGF0YS5jcHVpZF9sZXZlbCBcdTAwM2MgQ1BVSURfTEVBRl9GUkVRKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdGVheF9iYXNlX21oeiA9IGVieF9tYXhfbWh6ID0gZWN4X2J1c19taHogPSBlZHggPSAwO1xuLVxuLVx0Y3B1aWQoQ1BVSURfTEVBRl9GUkVRLCBcdTAwMjZlYXhfYmFzZV9taHosIFx1MDAyNmVieF9tYXhfbWh6LCBcdTAwMjZlY3hfYnVzX21oeiwgXHUwMDI2ZWR4KTtcbi1cbi1cdHJldHVybiBlYXhfYmFzZV9taHogKiAxMDAwO1xuJiM0MztcdHJldHVybiBfX2NwdV9raHpfZnJvbV9jcHVpZCgpO1xuIH1cbiBcbiAvKlxuICAqIGNhbGlicmF0ZSBjcHUgdXNpbmcgcGl0LCBocGV0LCBhbmQgcHRpbWVyIG1ldGhvZHMuIFRoZXkgYXJlIGF2YWlsYWJsZVxuICAqIGxhdGVyIGluIGJvb3QgYWZ0ZXIgYWNwaSBpcyBpbml0aWFsaXplZC5cbiAgKi9cbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwaXRfaHBldF9wdGltZXJfY2FsaWJyYXRlX2NwdSh2b2lkKVxuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX2NwdV9sYXRlKHZvaWQpXG4ge1xuIFx0dTY0IHRzYzEsIHRzYzIsIGRlbHRhLCByZWYxLCByZWYyO1xuIFx0dW5zaWduZWQgbG9uZyB0c2NfcGl0X21pbiA9IFVMT05HX01BWCwgdHNjX3JlZl9taW4gPSBVTE9OR19NQVg7XG5AQCAtODk2LDcgJiM0Mzs5MTYsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBwaXRfaHBldF9wdGltZXJfY2FsaWJyYXRlX2NwdSh2b2lkKVxuIC8qKlxuICAqIG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5IC0gY2FuIGNhbGlicmF0ZSB0aGUgY3B1IGVhcmx5IGluIGJvb3RcbiAgKi9cbi11bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KHZvaWQpXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KHZvaWQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncywgZmFzdF9jYWxpYnJhdGUgPSBjcHVfa2h6X2Zyb21fY3B1aWQoKTtcbiBcbkBAIC05MTAsMjAgJiM0Mzs5MzAsNiBAQCB1bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KHZvaWQpXG4gXHRyZXR1cm4gZmFzdF9jYWxpYnJhdGU7XG4gfVxuIFxuLVxuLS8qKlxuLSAqIG5hdGl2ZV9jYWxpYnJhdGVfY3B1IC0gY2FsaWJyYXRlIHRoZSBjcHVcbi0gKi9cbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX2NwdSh2b2lkKVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgdHNjX2ZyZXEgPSBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSgpO1xuLVxuLVx0aWYgKCF0c2NfZnJlcSlcbi1cdFx0dHNjX2ZyZXEgPSBwaXRfaHBldF9wdGltZXJfY2FsaWJyYXRlX2NwdSgpO1xuLVxuLVx0cmV0dXJuIHRzY19mcmVxO1xuLX1cbi1cbiB2b2lkIHJlY2FsaWJyYXRlX2NwdV9raHoodm9pZClcbiB7XG4gI2lmbmRlZiBDT05GSUdfU01QXG5AQCAtOTMyLDggJiM0Mzs5MzgsMTMgQEAgdm9pZCByZWNhbGlicmF0ZV9jcHVfa2h6KHZvaWQpXG4gXHRpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9UU0MpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRjcHVfa2h6ID0geDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUoKTtcbi1cdHRzY19raHogPSB4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX3RzYygpO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9UU0NfS05PV05fRlJFUSkpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRjcHVfa2h6ID0gbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHkoKTtcbiYjNDM7XHRpZiAoIWNwdV9raHopXG4mIzQzO1x0XHRjcHVfa2h6ID0gbmF0aXZlX2NhbGlicmF0ZV9jcHVfbGF0ZSgpO1xuJiM0MztcdHRzY19raHogPSBuYXRpdmVfY2FsaWJyYXRlX3RzYygpO1xuIFx0aWYgKHRzY19raHogPT0gMClcbiBcdFx0dHNjX2toeiA9IGNwdV9raHo7XG4gXHRlbHNlIGlmIChhYnMoY3B1X2toeiAtIHRzY19raHopICogMTAgXHUwMDNlIHRzY19raHopXG5AQCAtOTQyLDE0ICYjNDM7OTUzLDIyIEBAIHZvaWQgcmVjYWxpYnJhdGVfY3B1X2toeih2b2lkKVxuIFx0XHRcdFx0XHRcdCAgICBjcHVfa2h6X29sZCwgY3B1X2toeik7XG4gI2VuZGlmXG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKHJlY2FsaWJyYXRlX2NwdV9raHopO1xuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHJlY2FsaWJyYXRlX2NwdV9raHosIFwmIzM0O3A0LWNsb2NrbW9kLHBvd2Vybm93LWs3XCYjMzQ7KTtcbiBcbiBcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGN5YzJuc19zdXNwZW5kO1xuIFxuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdHNjX2lzX3NhdmVfcmVzdG9yZV9uZWVkZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIXVzaW5nX25hdGl2ZV9zY2hlZF9jbG9jaygpKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNl9fdXNlX3RzYykgfHwgc2NoZWRfY2xvY2tfc3RhYmxlKCk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCB0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxuIHtcbi1cdGlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2X191c2VfdHNjKSBcdTAwMjZcdTAwMjYgIXNjaGVkX2Nsb2NrX3N0YWJsZSgpKVxuJiM0MztcdGlmICghdHNjX2lzX3NhdmVfcmVzdG9yZV9uZWVkZWQoKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Y3ljMm5zX3N1c3BlbmQgPSBzY2hlZF9jbG9jaygpO1xuQEAgLTk2OSw3ICYjNDM7OTg4LDcgQEAgdm9pZCB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBjcHU7XG4gXG4tXHRpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNl9fdXNlX3RzYykgXHUwMDI2XHUwMDI2ICFzY2hlZF9jbG9ja19zdGFibGUoKSlcbiYjNDM7XHRpZiAoIXRzY19pc19zYXZlX3Jlc3RvcmVfbmVlZGVkKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbkBAIC0xNDM5LDIxICYjNDM7MTQ1OCwyOCBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X3RzY19jbG9ja3NvdXJjZSh2b2lkKVxuICAqL1xuIGRldmljZV9pbml0Y2FsbChpbml0X3RzY19jbG9ja3NvdXJjZSk7XG4gXG4tc3RhdGljIGJvb2wgX19pbml0IGRldGVybWluZV9jcHVfdHNjX2ZyZXF1ZW5jaWVzKGJvb2wgZWFybHkpXG4mIzQzO3N0YXRpYyBib29sIF9faW5pdCBkZXRlcm1pbmVfY3B1X3RzY19mcmVxdWVuY2llcyhib29sIGVhcmx5LFxuJiM0MztcdFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IGtub3duX2NwdV9raHosXG4mIzQzO1x0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQga25vd25fdHNjX2toeilcbiB7XG4gXHQvKiBNYWtlIHN1cmUgdGhhdCBjcHUgYW5kIHRzYyBhcmUgbm90IGFscmVhZHkgY2FsaWJyYXRlZCAqL1xuIFx0V0FSTl9PTihjcHVfa2h6IHx8IHRzY19raHopO1xuIFxuIFx0aWYgKGVhcmx5KSB7XG4tXHRcdGNwdV9raHogPSB4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX2NwdSgpO1xuLVx0XHRpZiAodHNjX2Vhcmx5X2toeilcbi1cdFx0XHR0c2Nfa2h6ID0gdHNjX2Vhcmx5X2toejtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBFYXJseSBDUFUgY2FsaWJyYXRpb24gY2FuIG9ubHkgdXNlIG1ldGhvZHMgdGhhdCBhcmUgYXZhaWxhYmxlXG4mIzQzO1x0XHQgKiBlYXJseSBpbiBib290IChvYnZpb3VzbHkpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoa25vd25fY3B1X2toeilcbiYjNDM7XHRcdFx0Y3B1X2toeiA9IGtub3duX2NwdV9raHo7XG4gXHRcdGVsc2Vcbi1cdFx0XHR0c2Nfa2h6ID0geDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MoKTtcbiYjNDM7XHRcdFx0Y3B1X2toeiA9IG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KCk7XG4mIzQzO1x0XHRpZiAoa25vd25fdHNjX2toeilcbiYjNDM7XHRcdFx0dHNjX2toeiA9IGtub3duX3RzY19raHo7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHRzY19raHogPSBuYXRpdmVfY2FsaWJyYXRlX3RzYygpO1xuIFx0fSBlbHNlIHtcbi1cdFx0LyogV2Ugc2hvdWxkIG5vdCBiZSBoZXJlIHdpdGggbm9uLW5hdGl2ZSBjcHUgY2FsaWJyYXRpb24gKi9cbi1cdFx0V0FSTl9PTih4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX2NwdSAhPSBuYXRpdmVfY2FsaWJyYXRlX2NwdSk7XG4tXHRcdGNwdV9raHogPSBwaXRfaHBldF9wdGltZXJfY2FsaWJyYXRlX2NwdSgpO1xuJiM0MztcdFx0Y3B1X2toeiA9IG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2xhdGUoKTtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtMTUwMiwxNSAmIzQzOzE1MjgsNDggQEAgc3RhdGljIHZvaWQgX19pbml0IHRzY19lbmFibGVfc2NoZWRfY2xvY2sodm9pZClcbiBcbiB2b2lkIF9faW5pdCB0c2NfZWFybHlfaW5pdCh2b2lkKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBpbnQga25vd25fY3B1X2toeiA9IDAsIGtub3duX3RzY19raHogPSAwO1xuJiM0MztcbiBcdGlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1RTQykpXG4gXHRcdHJldHVybjtcbiBcdC8qIERvbiYjMzk7dCBjaGFuZ2UgVVYgVFNDIG11bHRpLWNoYXNzaXMgc3luY2hyb25pemF0aW9uICovXG4gXHRpZiAoaXNfZWFybHlfdXZfc3lzdGVtKCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdHNucF9zZWN1cmVfdHNjX2luaXQoKTtcbiYjNDM7XHRpZiAoeDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHopXG4mIzQzO1x0XHRrbm93bl9jcHVfa2h6ID0geDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHooKTtcbiBcbi1cdGlmICghZGV0ZXJtaW5lX2NwdV90c2NfZnJlcXVlbmNpZXModHJ1ZSkpXG4mIzQzO1x0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0dVRVNUX1NOUF9TRUNVUkVfVFNDKSlcbiYjNDM7XHRcdGtub3duX3RzY19raHogPSBzbnBfc2VjdXJlX3RzY19pbml0KCk7XG4mIzQzO1x0ZWxzZSBpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXG4mIzQzO1x0XHRrbm93bl90c2Nfa2h6ID0gdGR4X3RzY19pbml0KCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgdGhlIFRTQyBmcmVxdWVuY3kgd2FzbiYjMzk7dCBwcm92aWRlZCBieSB0cnVzdGVkIGZpcm13YXJlLCB0cnkgdG8gZ2V0XG4mIzQzO1x0ICogaXQgZnJvbSB0aGUgaHlwZXJ2aXNvciAod2hpY2ggaXMgdW50cnVzdGVkIHdoZW4gcnVubmluZyBhcyBhIENvQ28gZ3Vlc3QpLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICgha25vd25fdHNjX2toeiBcdTAwMjZcdTAwMjYgeDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHopXG4mIzQzO1x0XHRrbm93bl90c2Nfa2h6ID0geDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHooKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYXJrIHRoZSBUU0MgZnJlcXVlbmN5IGFzIGtub3duIGlmIGl0IHdhcyBvYnRhaW5lZCBmcm9tIGEgaHlwZXJ2aXNvclxuJiM0MztcdCAqIG9yIHRydXN0ZWQgZmlybXdhcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGtub3duX3RzY19raHopXG4mIzQzO1x0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZ25vcmUgdGhlIHVzZXItcHJvdmlkZWQgVFNDIGZyZXF1ZW5jeSBpZiB0aGUgZXhhY3QgZnJlcXVlbmN5IHdhc1xuJiM0MztcdCAqIG9idGFpbmVkIGZyb20gdHJ1c3RlZCBmaXJtd2FyZSBvciB0aGUgaHlwZXJ2aXNvciwgYW5kIGRvbiYjMzk7dCBtYXJrIHRoZVxuJiM0MztcdCAqIGZyZXF1ZW5jeSBhcyBrbm93biwgYXMgdGhlIHVzZXItcHJvdmlkZWQgZnJlcXVlbmN5IGlzIGludGVuZGVkIGFzIGFcbiYjNDM7XHQgKiBcJiMzNDtzdGFydGluZyBwb2ludFwmIzM0Oywgbm90IGEga25vd24sIGd1YXJhbnRlZWQgZnJlcXVlbmN5XG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFrbm93bl90c2Nfa2h6KVxuJiM0MztcdFx0a25vd25fdHNjX2toeiA9IHRzY19lYXJseV9raHo7XG4mIzQzO1x0ZWxzZSBpZiAodHNjX2Vhcmx5X2toeilcbiYjNDM7XHRcdHByX2VycihcJiMzNDtJZ25vcmluZyAmIzM5O3RzY19lYXJseV9raHomIzM5OyBpbiBmYXZvciBvZiBmaXJtd2FyZS9oeXBlcnZpc29yLlxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmICghZGV0ZXJtaW5lX2NwdV90c2NfZnJlcXVlbmNpZXModHJ1ZSwga25vd25fY3B1X2toeiwga25vd25fdHNjX2toeikpXG4gXHRcdHJldHVybjtcbiBcdHRzY19lbmFibGVfc2NoZWRfY2xvY2soKTtcbiB9XG5AQCAtMTUyMiwxNiAmIzQzOzE1ODEsOSBAQCB2b2lkIF9faW5pdCB0c2NfaW5pdCh2b2lkKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHQvKlxuLVx0ICogbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHkgY2FuIG9ubHkgY2FsaWJyYXRlIHVzaW5nIG1ldGhvZHMgdGhhdCBhcmVcbi1cdCAqIGF2YWlsYWJsZSBlYXJseSBpbiBib290LlxuLVx0ICovXG4tXHRpZiAoeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUgPT0gbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHkpXG4tXHRcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ID0gbmF0aXZlX2NhbGlicmF0ZV9jcHU7XG4tXG4gXHRpZiAoIXRzY19raHopIHtcbiBcdFx0LyogV2UgZmFpbGVkIHRvIGRldGVybWluZSBmcmVxdWVuY2llcyBlYXJsaWVyLCB0cnkgYWdhaW4gKi9cbi1cdFx0aWYgKCFkZXRlcm1pbmVfY3B1X3RzY19mcmVxdWVuY2llcyhmYWxzZSkpIHtcbiYjNDM7XHRcdGlmICghZGV0ZXJtaW5lX2NwdV90c2NfZnJlcXVlbmNpZXMoZmFsc2UsIDAsIDApKSB7XG4gXHRcdFx0bWFya190c2NfdW5zdGFibGUoXCYjMzQ7Y291bGQgbm90IGNhbGN1bGF0ZSBUU0Mga2h6XCYjMzQ7KTtcbiBcdFx0XHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19ERUFETElORV9USU1FUik7XG4gXHRcdFx0cmV0dXJuO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90c2NfbXNyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjX21zci5jXG5pbmRleCA0OGU2Y2MxY2IwMTdhNS4uYWVjZTA2MmFlZTdlODkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHNjX21zci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjX21zci5jXG5AQCAtMjEwLDkgJiM0MzsyMTAsNyBAQCB1bnNpZ25lZCBsb25nIGNwdV9raHpfZnJvbV9tc3Iodm9pZClcbiBcdGlmIChmcmVxID09IDApXG4gXHRcdHByX2VycihcJiMzNDtFcnJvciBNU1JfRlNCX0ZSRVEgaW5kZXggJWQgaXMgdW5rbm93blxcblwmIzM0OywgaW5kZXgpO1xuIFxuLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUNcbi1cdGxhcGljX3RpbWVyX3BlcmlvZCA9IChmcmVxICogMTAwMCkgLyBIWjtcbi0jZW5kaWZcbiYjNDM7XHRhcGljX3NldF90aW1lcl9wZXJpb2Rfa2h6KGZyZXEsIFwmIzM0O01TUl9GU0JfRlJFUVwmIzM0Oyk7XG4gXG4gXHQvKlxuIFx0ICogVFNDIGZyZXF1ZW5jeSBkZXRlcm1pbmVkIGJ5IE1TUiBpcyBhbHdheXMgY29uc2lkZXJlZCBcJiMzNDtrbm93blwmIzM0O1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jIGIvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmNcbmluZGV4IDI1MmM1ODI3ZDA2MzRmLi5iN2E0OGU2MjJmNDg4YSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuY1xuQEAgLTE0Nyw4ICYjNDM7MTQ3LDYgQEAgc3RhdGljIHZvaWQgZW5jX2tleGVjX2ZpbmlzaF9ub29wKHZvaWQpIHt9XG4gc3RhdGljIGJvb2wgaXNfcHJpdmF0ZV9tbWlvX25vb3AodTY0IGFkZHIpIHtyZXR1cm4gZmFsc2U7IH1cbiBcbiBzdHJ1Y3QgeDg2X3BsYXRmb3JtX29wcyB4ODZfcGxhdGZvcm0gX19yb19hZnRlcl9pbml0ID0ge1xuLVx0LmNhbGlicmF0ZV9jcHVcdFx0XHQ9IG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5LFxuLVx0LmNhbGlicmF0ZV90c2NcdFx0XHQ9IG5hdGl2ZV9jYWxpYnJhdGVfdHNjLFxuIFx0LmdldF93YWxsY2xvY2tcdFx0XHQ9IG1hY2hfZ2V0X2Ntb3NfdGltZSxcbiBcdC5zZXRfd2FsbGNsb2NrXHRcdFx0PSBtYWNoX3NldF9jbW9zX3RpbWUsXG4gXHQuaW9tbXVfc2h1dGRvd25cdFx0XHQ9IGlvbW11X3NodXRkb3duX25vb3AsXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMgYi9hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuY1xuaW5kZXggMmY4YzMyMTczOTcyZDYuLjZjM2FmOTc0YzdjMmYxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jXG5AQCAtNTM1LDkgJiM0Mzs1MzUsNiBAQCB2b2lkIF9faW5pdCBzbWVfZWFybHlfaW5pdCh2b2lkKVxuIFx0XHQgKi9cbiBcdFx0eDg2X2luaXQucmVzb3VyY2VzLmRtaV9zZXR1cCA9IHNucF9kbWlfc2V0dXA7XG4gXHR9XG4tXG4tXHRpZiAoc2V2X3N0YXR1cyBcdTAwMjYgTVNSX0FNRDY0X1NOUF9TRUNVUkVfVFNDKVxuLVx0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7XG4gfVxuIFxuIHZvaWQgX19pbml0IG1lbV9lbmNyeXB0X2ZyZWVfZGVjcnlwdGVkX21lbSh2b2lkKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi90aW1lLmMgYi9hcmNoL3g4Ni94ZW4vdGltZS5jXG5pbmRleCBkNjJjMTQzMzRiMzUxMC4uYmMyNmYwMGZjNTNlNWUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni94ZW4vdGltZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni94ZW4vdGltZS5jXG5AQCAtMzgsMTIgJiM0MzszOCwxMSBAQFxuIHN0YXRpYyB1NjQgeGVuX3NjaGVkX2Nsb2NrX29mZnNldCBfX3JlYWRfbW9zdGx5O1xuIFxuIC8qIEdldCB0aGUgVFNDIHNwZWVkIGZyb20gWGVuICovXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgeGVuX3RzY19raHoodm9pZClcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgeGVuX3RzY19raHoodm9pZClcbiB7XG4gXHRzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqaW5mbyA9XG4gXHRcdFx1MDAyNkhZUEVSVklTT1Jfc2hhcmVkX2luZm8tXHUwMDNldmNwdV9pbmZvWzBdLnRpbWU7XG4gXG4tXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKTtcbiBcdHJldHVybiBwdmNsb2NrX3RzY19raHooaW5mbyk7XG4gfVxuIFxuQEAgLTQ0NCw3ICYjNDM7NDQzLDcgQEAgdm9pZCB4ZW5fcmVzdG9yZV90aW1lX21lbW9yeV9hcmVhKHZvaWQpXG4gXHR4ZW5fc2NoZWRfY2xvY2tfb2Zmc2V0ID0geGVuX2Nsb2Nrc291cmNlX3JlYWQoKSAtIHhlbl9jbG9ja192YWx1ZV9zYXZlZDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgeGVuX3NldHVwX3ZzeXNjYWxsX3RpbWVfaW5mbyh2b2lkKVxuJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgeGVuX3NldHVwX3ZzeXNjYWxsX3RpbWVfaW5mbyh2b2lkKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3JlZ2lzdGVyX3RpbWVfbWVtb3J5X2FyZWEgdDtcbiBcdHN0cnVjdCBwdmNsb2NrX3ZzeXNjYWxsX3RpbWVfaW5mbyAqdGk7XG5AQCAtNTY3LDkgJiM0Mzs1NjYsMTQgQEAgc3RhdGljIHZvaWQgX19pbml0IHhlbl9pbml0X3RpbWVfY29tbW9uKHZvaWQpXG4ge1xuIFx0eGVuX3NjaGVkX2Nsb2NrX29mZnNldCA9IHhlbl9jbG9ja3NvdXJjZV9yZWFkKCk7XG4gXHRzdGF0aWNfY2FsbF91cGRhdGUocHZfc3RlYWxfY2xvY2ssIHhlbl9zdGVhbF9jbG9jayk7XG4tXHRwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2soeGVuX3NjaGVkX2Nsb2NrKTtcbiBcbi1cdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjID0geGVuX3RzY19raHo7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBYZW4gaGFzIHBhcmF2aXJ0dWFsaXplZCBzdXNwZW5kL3Jlc3VtZSBhbmQgc28gZG9lc24mIzM5O3QgdXNlIHRoZSBjb21tb25cbiYjNDM7XHQgKiB4ODYgc2NoZWRfY2xvY2sgc2F2ZS9yZXN0b3JlIGhvb2tzLlxuJiM0MztcdCAqL1xuJiM0MztcdHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh4ZW5fc2NoZWRfY2xvY2ssIHg4Nl9pbml0X25vb3AsIHg4Nl9pbml0X25vb3ApO1xuJiM0MztcbiYjNDM7XHR4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeiA9IHhlbl90c2Nfa2h6O1xuIFx0eDg2X3BsYXRmb3JtLmdldF93YWxsY2xvY2sgPSB4ZW5fZ2V0X3dhbGxjbG9jaztcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9oeXBlcnZfdGltZXIuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmNcbmluZGV4IGRmNTY3Nzk1ZDE3NTFhLi44ZWU3YTlkZTBmNGZkYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmNcbkBAIC00ODgsMTcgJiM0Mzs0ODgsNiBAQCBzdGF0aWMgdm9pZCByZXN1bWVfaHZfY2xvY2tfdHNjKHN0cnVjdCBjbG9ja3NvdXJjZSAqYXJnKVxuIFx0aHZfc2V0X21zcihIVl9NU1JfUkVGRVJFTkNFX1RTQywgdHNjX21zci5hc191aW50NjQpO1xuIH1cbiBcbi0vKlxuLSAqIENhbGxlZCBkdXJpbmcgcmVzdW1lIGZyb20gaGliZXJuYXRpb24sIGZyb20gb3ZlcnJpZGRlblxuLSAqIHg4Nl9wbGF0Zm9ybS5yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlIHJvdXRpbmUuIFRoaXMgaXMgdG8gYWRqdXN0IG9mZnNldHNcbi0gKiB1c2VkIHRvIGNhbGN1bGF0ZSB0aW1lIGZvciBodiB0c2MgcGFnZSBiYXNlZCBzY2hlZF9jbG9jaywgdG8gYWNjb3VudCBmb3Jcbi0gKiB0aW1lIHNwZW50IGJlZm9yZSBoaWJlcm5hdGlvbi5cbi0gKi9cbi12b2lkIGh2X2Fkal9zY2hlZF9jbG9ja19vZmZzZXQodTY0IG9mZnNldClcbi17XG4tXHRodl9zY2hlZF9jbG9ja19vZmZzZXQgLT0gb2Zmc2V0O1xuLX1cbi1cbiAjaWZkZWYgSEFWRV9WRFNPX0NMT0NLTU9ERV9IVkNMT0NLXG4gc3RhdGljIGludCBodl9jc19lbmFibGUoc3RydWN0IGNsb2Nrc291cmNlICpjcylcbiB7XG5AQCAtNTU0LDEwICYjNDM7NTQzLDM1IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBodl9zZXR1cF9zY2hlZF9jbG9jayh2b2lkICpzY2hlZF9jbG9jaylcbiAjZWxpZiBkZWZpbmVkIENPTkZJR19QQVJBVklSVFxuICNpbmNsdWRlIFx1MDAzY2FzbS90aW1lci5oXHUwMDNlXG4gXG4mIzQzO3N0YXRpYyB1NjQgaHZfcmVmX2NvdW50ZXJfYXRfc3VzcGVuZDtcbiYjNDM7LypcbiYjNDM7ICogSHlwZXItViBjbG9jayBjb3VudGVyIHJlc2V0cyBkdXJpbmcgaGliZXJuYXRpb24uIFNhdmUgYW5kIHJlc3RvcmUgY2xvY2tcbiYjNDM7ICogb2Zmc2V0IGR1cmluZyBzdXNwZW5kL3Jlc3VtZSwgd2hpbGUgYWxzbyBjb25zaWRlcmluZyB0aGUgdGltZSBwYXNzZWRcbiYjNDM7ICogYmVmb3JlIHN1c3BlbmQuIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgc2NoZWRfY2xvY2sgdXNpbmcgaHYgdHNjIHBhZ2VcbiYjNDM7ICogYmFzZWQgY2xvY2tzb3VyY2UsIHByb2NlZWRzIGZyb20gd2hlcmUgaXQgbGVmdCBvZmYgZHVyaW5nIHN1c3BlbmQgYW5kXG4mIzQzOyAqIGl0IHNob3dzIGNvcnJlY3QgdGltZSBmb3IgdGhlIHRpbWVzdGFtcHMgb2Yga2VybmVsIG1lc3NhZ2VzIGFmdGVyIHJlc3VtZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGh2X3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcbiYjNDM7e1xuJiM0MztcdGh2X3JlZl9jb3VudGVyX2F0X3N1c3BlbmQgPSBodl9yZWFkX3JlZmVyZW5jZV9jb3VudGVyKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGh2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQWRqdXN0IHRoZSBvZmZzZXRzIHVzZWQgYnkgaHYgdHNjIGNsb2Nrc291cmNlIHRvXG4mIzQzO1x0ICogYWNjb3VudCBmb3IgdGhlIHRpbWUgc3BlbnQgYmVmb3JlIGhpYmVybmF0aW9uLlxuJiM0MztcdCAqIGFkanVzdGVkIHZhbHVlID0gcmVmZXJlbmNlIGNvdW50ZXIgKHRpbWUpIGF0IHN1c3BlbmRcbiYjNDM7XHQgKiAgICAgICAgICAgICAgICAtIHJlZmVyZW5jZSBjb3VudGVyICh0aW1lKSBub3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0aHZfc2NoZWRfY2xvY2tfb2Zmc2V0IC09IChodl9yZWZfY291bnRlcl9hdF9zdXNwZW5kIC0gaHZfcmVhZF9yZWZlcmVuY2VfY291bnRlcigpKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgaHZfc2V0dXBfc2NoZWRfY2xvY2sodm9pZCAqc2NoZWRfY2xvY2spXG4ge1xuIFx0LyogV2UmIzM5O3JlIG9uIHg4Ni94NjQgKmFuZCogdXNpbmcgUFYgb3BzICovXG4tXHRwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2soc2NoZWRfY2xvY2spO1xuJiM0MztcdHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayhzY2hlZF9jbG9jaywgaHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSxcbiYjNDM7XHRcdFx0XHQgaHZfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSk7XG4gfVxuICNlbHNlIC8qICFDT05GSUdfR0VORVJJQ19TQ0hFRF9DTE9DSyBcdTAwMjZcdTAwMjYgIUNPTkZJR19QQVJBVklSVCAqL1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBodl9zZXR1cF9zY2hlZF9jbG9jayh2b2lkICpzY2hlZF9jbG9jaykge31cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5oIGIvaW5jbHVkZS9jbG9ja3NvdXJjZS9oeXBlcnZfdGltZXIuaFxuaW5kZXggZDQ4ZGQ0MTc2ZmQzNWIuLmE0YzgxYTYwZjUzZGZjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9jbG9ja3NvdXJjZS9oeXBlcnZfdGltZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9jbG9ja3NvdXJjZS9oeXBlcnZfdGltZXIuaFxuQEAgLTM4LDggJiM0MzszOCw2IEBAIGV4dGVybiB2b2lkIGh2X3JlbWFwX3RzY19jbG9ja3NvdXJjZSh2b2lkKTtcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBodl9nZXRfdHNjX3Bmbih2b2lkKTtcbiBleHRlcm4gc3RydWN0IG1zX2h5cGVydl90c2NfcGFnZSAqaHZfZ2V0X3RzY19wYWdlKHZvaWQpO1xuIFxuLWV4dGVybiB2b2lkIGh2X2Fkal9zY2hlZF9jbG9ja19vZmZzZXQodTY0IG9mZnNldCk7XG4tXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sXG4gaHZfcmVhZF90c2NfcGFnZV90c2MoY29uc3Qgc3RydWN0IG1zX2h5cGVydl90c2NfcGFnZSAqdHNjX3BnLFxuIFx0XHQgICAgIHU2NCAqY3VyX3RzYywgdTY0ICp0aW1lKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jXG5pbmRleCBiMWI1ZWM0M2MwZjI3Yi4uNWJjNzdkMzZjN2EzNjQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jXG5AQCAtMjE4MCwxMSAmIzQzOzIxODAsMTYgQEAgdm9pZCB0aW1la2VlcGluZ19yZXN1bWUodm9pZClcbiBcdHU2NCBjeWNsZV9ub3csIG5zZWM7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuLVx0cmVhZF9wZXJzaXN0ZW50X2Nsb2NrNjQoXHUwMDI2dHNfbmV3KTtcbi1cbiBcdGNsb2NrZXZlbnRzX3Jlc3VtZSgpO1xuIFx0Y2xvY2tzb3VyY2VfcmVzdW1lKCk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZWFkIHBlcnNpc3RlbnQgdGltZSBhZnRlciBjbG9ja3NvdXJjZXMgaGF2ZSBiZWVuIHJlc3VtZWQuICBQYXJhdmlydFxuJiM0MztcdCAqIGNsb2NrcyBoYXZlIGEgbmFzdHkgaGFiaXQgb2YgcGlnZ3liYWNraW5nIGEgcGVyc2lzdGVudCBjbG9jayBvbiBhXG4mIzQzO1x0ICogc3lzdGVtIGNsb2NrLCBhbmQgbWF5IHJldHVybiBnYXJiYWdlIGlmIHRoZSBzeXN0ZW0gY2xvY2sgaXMgc3VzcGVuZGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHJlYWRfcGVyc2lzdGVudF9jbG9jazY0KFx1MDAyNnRzX25ldyk7XG4mIzQzO1xuIFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnRrX2NvcmUubG9jaywgZmxhZ3MpO1xuIFxuIFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMjoxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk1fR1VFU1QmIzM0OywKICAgICYjMzQ7UEFSQVZJUlQmIzM0OywKICAgICYjMzQ7SFlQRVJWJiMzNDssCiAgICAmIzM0O0FDUk5fR1VFU1QmIzM0OywKICAgICYjMzQ7SkFJTEhPVVNFX0dVRVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtY2xvY2tfY3B1X2FjdGlvbiYjMzQ7LAogICAgJiMzNDt0aW1la2VlcGluZ19yZXN1bWUmIzM0OywKICAgICYjMzQ7dHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUmIzM0OywKICAgICYjMzQ7dHNjX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUmIzM0OywKICAgICYjMzQ7a3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUmIzM0OywKICAgICYjMzQ7a3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUmIzM0OywKICAgICYjMzQ7aHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtodl9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgVFNDIGFuZCBBUElDIGZyZXF1ZW5jeSBjYWxpYnJhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gZm9yIHg4NiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKEtWTSwgSHlwZXItViwgVk13YXJlLCBBQ1JOLCBKYWlsaG91c2UsIFREWCwgU0VWLVNOUCkuIEl0IG1vZGlmaWVzIGhvdyBzY2hlZF9jbG9jayBzdGF0ZSBpcyBzYXZlZCBhbmQgcmVzdG9yZWQgZHVyaW5nIHN1c3BlbmQvcmVzdW1lIGFuZCBDUFUgaG90cGx1ZywgcGFydGljdWxhcmx5IGZvciBrdm1jbG9jayBhbmQgSHlwZXItViBjbG9jay4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGluIGEgS1ZNIGd1ZXN0ICh3aGljaCBzeXprYWxsZXIgdXNlcykgZHVyaW5nIHN1c3BlbmQvcmVzdW1lIGFuZCBDUFUgaG90cGx1ZyBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhOTIxMDI4MTU0Mjg3MTRjYzc0ZjVkZDM2ZTczMWZiM2Q4YThmOGFmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMiAwMjoxMTowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggYjU0OTNhN2Y4ZjIyODEuLmEzODdiYjJjNDdlMmZiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtNzk0Niw2ICYjNDM7Nzk0NiwxMSBAQCBLZXJuZWwgcGFyYW1ldGVycwogCQkJd2l0aCBDUFVJRC4xNmggc3VwcG9ydCBhbmQgcGFydGlhbCBDUFVJRC4xNWggc3VwcG9ydC4KIAkJCUZvcm1hdDogJmx0O3Vuc2lnbmVkIGludCZndDsKIAomIzQzOwkJCU5vdGUsIHRzY19lYXJseV9raHogaXMgaWdub3JlZCBpZiB0aGUgVFNDIGZyZXF1ZW5jeSBpcwomIzQzOwkJCXByb3ZpZGVkIGJ5IHRydXN0ZWQgZmlybXdhcmUgd2hlbiBydW5uaW5nIGFzIGFuIFNOUCBvcgomIzQzOwkJCVREWCBndWVzdCwgb3Igd2hlbiB0aGUgaHlwZXJ2aXNvciBwcm92aWRlcyB0aGUgZXhhY3QKJiM0MzsJCQlmcmVxdWVuY3kgdmlhIGEgcGFyYXZpcnR1YWwgaW50ZXJmYWNlLgomIzQzOwogCXRzeD0JCVtYODZdIENvbnRyb2wgVHJhbnNhY3Rpb25hbCBTeW5jaHJvbml6YXRpb24KIAkJCUV4dGVuc2lvbnMgKFRTWCkgZmVhdHVyZSBpbiBJbnRlbCBwcm9jZXNzb3JzIHRoYXQKIAkJCXN1cHBvcnQgVFNYIGNvbnRyb2wuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9jcHVpZC5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9jcHVpZC5yc3QKaW5kZXggYmRhM2UzZTczN2Q3MWYuLmE1ZWU4ZmYwNTJjZTU1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9jcHVpZC5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvY3B1aWQucnN0CkBAIC0xMjIsMyAmIzQzOzEyMiwxNSBAQCBLVk1fSElOVFNfUkVBTFRJTUUgMCAgICAgICAgICAgIGd1ZXN0IGNoZWNrcyB0aGlzIGZlYXR1cmUgYml0IHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWVtcHRlZCBmb3IgYW4gdW5saW1pdGVkIHRpbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dpbmcgb3B0aW1pemF0aW9ucwogPT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsKJiM0MztmdW5jdGlvbjogS1ZNX0NQVUlEX1RJTUlOR19JTkZPICgweDQwMDAwMDEwKQomIzQzOwomIzQzO3JldHVybnM6OgomIzQzOwomIzQzOyAgIGVheCA9IChWaXJ0dWFsKSBUU0MgZnJlcXVlbmN5IGluIGtIegomIzQzOyAgIGVieCA9IChWaXJ0dWFsKSBCdXMgKGxvY2FsIEFQSUMgdGltZXIpIGZyZXF1ZW5jeSBpbiBrSHoKJiM0MzsgICBlY3ggPSAwIChSZXNlcnZlZCkKJiM0MzsgICBlZHggPSAwIChSZXNlcnZlZCkKJiM0MzsKJiM0MztOb3RlLCBLVk0gb25seSBkZWZpbmVzIHRoZSBzZW1hbnRpY3Mgb2YgS1ZNX0NQVUlEX1RJTUlOR19JTkZPOyBLVk0gZG9lcyBOT1QKJiM0MzthZHZlcnRpc2Ugc3VwcG9ydCB2aWEgS1ZNX0dFVF9TVVBQT1JURURfQ1BVSUQuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMgYi9hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMKaW5kZXggZWNkNzdkMzIxN2YzYzMuLjcyMzEzYjM2YjZmNWQxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvY29jby9zZXYvY29yZS5jCkBAIC05OSw3ICYjNDM7OTksNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNldl9zdGF0dXNfZmVhdF9uYW1lc1tdID0gewogICovCiBzdGF0aWMgdTY0IHNucF90c2Nfc2NhbGUgX19yb19hZnRlcl9pbml0Owogc3RhdGljIHU2NCBzbnBfdHNjX29mZnNldCBfX3JvX2FmdGVyX2luaXQ7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBzbnBfdHNjX2ZyZXFfa2h6IF9fcm9fYWZ0ZXJfaW5pdDsKIAogREVGSU5FX1BFUl9DUFUoc3RydWN0IHNldl9lc19ydW50aW1lX2RhdGEqLCBydW50aW1lX2RhdGEpOwogREVGSU5FX1BFUl9DUFUoc3RydWN0IHNldl9lc19zYXZlX2FyZWEgKiwgc2V2X3Ztc2EpOwpAQCAtMjAxNCwyMCAmIzQzOzIwMTMsMTIgQEAgdm9pZCBfX2luaXQgc25wX3NlY3VyZV90c2NfcHJlcGFyZSh2b2lkKQogCXByX2RlYnVnKCYjMzQ7U2VjdXJlVFNDIGVuYWJsZWQmIzM0Oyk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNlY3VyZXRzY19nZXRfdHNjX2toeih2b2lkKQotewotCXJldHVybiBzbnBfdHNjX2ZyZXFfa2h6OwotfQotCi12b2lkIF9faW5pdCBzbnBfc2VjdXJlX3RzY19pbml0KHZvaWQpCiYjNDM7dW5zaWduZWQgaW50IF9faW5pdCBzbnBfc2VjdXJlX3RzY19pbml0KHZvaWQpCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc25wX3RzY19mcmVxX2toeiwgdHNjX2ZyZXFfbWh6OwogCXN0cnVjdCBzbnBfc2VjcmV0c19wYWdlICpzZWNyZXRzOwotCXVuc2lnbmVkIGxvbmcgdHNjX2ZyZXFfbWh6OwogCXZvaWQgKm1lbTsKIAotCWlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfR1VFU1RfU05QX1NFQ1VSRV9UU0MpKQotCQlyZXR1cm47Ci0KIAltZW0gPSBlYXJseV9tZW1yZW1hcF9lbmNyeXB0ZWQoc2V2X3NlY3JldHNfcGEsIFBBR0VfU0laRSk7CiAJaWYgKCFtZW0pIHsKIAkJcHJfZXJyKCYjMzQ7VW5hYmxlIHRvIGdldCBUU0NfRkFDVE9SOiBmYWlsZWQgdG8gbWFwIHRoZSBTTlAgc2VjcmV0cyBwYWdlLlxuJiMzNDspOwpAQCAtMjAzNiw3ICYjNDM7MjAyNyw4IEBAIHZvaWQgX19pbml0IHNucF9zZWN1cmVfdHNjX2luaXQodm9pZCkKIAogCXNlY3JldHMgPSAoX19mb3JjZSBzdHJ1Y3Qgc25wX3NlY3JldHNfcGFnZSAqKW1lbTsKIAotCXNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpOwomIzQzOwlzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7CiYjNDM7CiAJcmRtc3JxKE1TUl9BTUQ2NF9HVUVTVF9UU0NfRlJFUSwgdHNjX2ZyZXFfbWh6KTsKIAogCS8qIEV4dHJhY3QgdGhlIEdVRVNUIFRTQyBNSFogZnJvbSBCSVRbMTc6MF0sIHJlc3QgaXMgcmVzZXJ2ZWQgc3BhY2UgKi8KQEAgLTIwNDQsOCAmIzQzOzIwMzYsNyBAQCB2b2lkIF9faW5pdCBzbnBfc2VjdXJlX3RzY19pbml0KHZvaWQpCiAKIAlzbnBfdHNjX2ZyZXFfa2h6ID0gU05QX1NDQUxFX1RTQ19GUkVRKHRzY19mcmVxX21oeiAqIDEwMDAsIHNlY3JldHMtJmd0O3RzY19mYWN0b3IpOwogCi0JeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUgPSBzZWN1cmV0c2NfZ2V0X3RzY19raHo7Ci0JeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MgPSBzZWN1cmV0c2NfZ2V0X3RzY19raHo7Ci0KIAllYXJseV9tZW11bm1hcChtZW0sIFBBR0VfU0laRSk7CiYjNDM7CiYjNDM7CXJldHVybiBzbnBfdHNjX2ZyZXFfa2h6OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY29jby90ZHgvdGR4LmMgYi9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYwppbmRleCAyOWI2ZjFlZDU5ZWM1NC4uOTQ2ODJhY2ExODhiNzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jCkBAIC04LDYgJiM0Mzs4LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tleGVjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9hcGljLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2NvY28uaCZndDsKICNpbmNsdWRlICZsdDthc20vdGR4LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3ZteC5oJmd0OwpAQCAtMTEyMyw5ICYjNDM7MTEyNCw2IEBAIHZvaWQgX19pbml0IHRkeF9lYXJseV9pbml0KHZvaWQpCiAKIAlzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCk7CiAKLQkvKiBUU0MgaXMgdGhlIG9ubHkgcmVsaWFibGUgY2xvY2sgaW4gVERYIGd1ZXN0ICovCi0Jc2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfUkVMSUFCTEUpOwotCiAJY2NfdmVuZG9yID0gQ0NfVkVORE9SX0lOVEVMOwogCiAJLyogQ29uZmlndXJlIHRoZSBURCAqLwpAQCAtMTE5NSwzICYjNDM7MTE5MywxOCBAQCB2b2lkIF9faW5pdCB0ZHhfZWFybHlfaW5pdCh2b2lkKQogCiAJdGR4X2Fubm91bmNlKCk7CiB9CiYjNDM7CiYjNDM7dW5zaWduZWQgaW50IF9faW5pdCB0ZHhfdHNjX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBjcHVpZF90c2NfaW5mbyBpbmZvOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKGNwdWlkX2dldF90c2NfaW5mbygmYW1wO2luZm8pIHx8ICFpbmZvLmNyeXN0YWxfa2h6KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlhcGljX3NldF90aW1lcl9wZXJpb2Rfa2h6KGluZm8uY3J5c3RhbF9raHosICYjMzQ7VERYLU1vZHVsZSB2aWEgQ1BVSUQmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIFRTQyBpcyB0aGUgb25seSByZWxpYWJsZSBjbG9jayBpbiBURFggZ3Vlc3QgKi8KJiM0MzsJc2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfUkVMSUFCTEUpOwomIzQzOwomIzQzOwlyZXR1cm4gaW5mby5jcnlzdGFsX2toeiAqIGluZm8ubnVtZXJhdG9yIC8gaW5mby5kZW5vbWluYXRvcjsKJiM0Mzt9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3JuLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3JuLmgKaW5kZXggZGI0MmI0NzdjNDFkMzQuLmE4OTIxNzljNjFjNjIzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3JuLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNybi5oCkBAIC0zMiwxMSAmIzQzOzMyLDYgQEAgc3RhdGljIGlubGluZSB1MzIgYWNybl9jcHVpZF9iYXNlKHZvaWQpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhY3JuX2dldF90c2Nfa2h6KHZvaWQpCi17Ci0JcmV0dXJuIGNwdWlkX2VheChBQ1JOX0NQVUlEX1RJTUlOR19JTkZPKTsKLX0KLQogLyoKICAqIEh5cGVyY2FsbHMgZm9yIEFDUk4KICAqCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgKaW5kZXggOWNkNDkzZDQ2N2Q0ZDEuLjAzNTk5ODU1NWU5OTIyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oCkBAIC02Myw3ICYjNDM7NjMsNiBAQCBleHRlcm4gaW50IGFwaWNfdmVyYm9zaXR5OwogZXh0ZXJuIGludCBsb2NhbF9hcGljX3RpbWVyX2MyX29rOwogCiBleHRlcm4gYm9vbCBhcGljX2lzX2Rpc2FibGVkOwotZXh0ZXJuIHVuc2lnbmVkIGludCBsYXBpY190aW1lcl9wZXJpb2Q7CiAKIGV4dGVybiBlbnVtIGFwaWNfaW50cl9tb2RlX2lkIGFwaWNfaW50cl9tb2RlOwogZW51bSBhcGljX2ludHJfbW9kZV9pZCB7CkBAIC0xMzgsNiAmIzQzOzEzNyw4IEBAIHZvaWQgcmVnaXN0ZXJfbGFwaWNfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwogZXh0ZXJuIHZvaWQgc2V0dXBfYm9vdF9BUElDX2Nsb2NrKHZvaWQpOwogZXh0ZXJuIHZvaWQgc2V0dXBfc2Vjb25kYXJ5X0FQSUNfY2xvY2sodm9pZCk7CiBleHRlcm4gdm9pZCBsYXBpY191cGRhdGVfdHNjX2ZyZXEodm9pZCk7CiYjNDM7ZXh0ZXJuIHZvaWQgYXBpY19zZXRfdGltZXJfcGVyaW9kX2h6KHU2NCBwZXJpb2RfaHosIGNvbnN0IGNoYXIgKnNvdXJjZSk7CiYjNDM7ZXh0ZXJuIHZvaWQgYXBpY19zZXRfdGltZXJfcGVyaW9kX2toeih1NjQgcGVyaW9kX2toeiwgY29uc3QgY2hhciAqc291cmNlKTsKIAogI2lmZGVmIENPTkZJR19YODZfNjQKIHN0YXRpYyBpbmxpbmUgYm9vbCBhcGljX2ZvcmNlX2VuYWJsZSh1bnNpZ25lZCBsb25nIGFkZHIpCkBAIC0xODgsNiAmIzQzOzE4OSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2xvY2FsX0FQSUModm9pZCkgeyB9CiAjIGRlZmluZSBzZXR1cF9ib290X0FQSUNfY2xvY2sgeDg2X2luaXRfbm9vcAogIyBkZWZpbmUgc2V0dXBfc2Vjb25kYXJ5X0FQSUNfY2xvY2sgeDg2X2luaXRfbm9vcAogc3RhdGljIGlubGluZSB2b2lkIGxhcGljX3VwZGF0ZV90c2NfZnJlcSh2b2lkKSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgYXBpY19zZXRfdGltZXJfcGVyaW9kX2h6KHU2NCBwZXJpb2RfaHosIGNvbnN0IGNoYXIgKnNvdXJjZSkgeyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHoodTY0IHBlcmlvZF9raHosIGNvbnN0IGNoYXIgKnNvdXJjZSkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9ic3BfQVBJQyh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBhcGljX2ludHJfbW9kZV9zZWxlY3Qodm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgYXBpY19pbnRyX21vZGVfaW5pdCh2b2lkKSB7IH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oCmluZGV4IDRhNDdjMTZlMmRmOGMwLi43NjNlZDAxNzczOGE2NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oCkBAIC0xMTgsOCAmIzQzOzExOCwxNiBAQCBzdGF0aWMgaW5saW5lIGxvbmcga3ZtX3Nldl9oeXBlcmNhbGwzKHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgbG9uZyBwMSwKIH0KIAogI2lmZGVmIENPTkZJR19LVk1fR1VFU1QKLXZvaWQga3ZtY2xvY2tfaW5pdCh2b2lkKTsKLXZvaWQga3ZtY2xvY2tfZGlzYWJsZSh2b2lkKTsKJiM0MztlbnVtIGt2bV9ndWVzdF9jcHVfYWN0aW9uIHsKJiM0MzsJS1ZNX0dVRVNUX0JTUF9TVVNQRU5ELAomIzQzOwlLVk1fR1VFU1RfQlNQX1JFU1VNRSwKJiM0MzsJS1ZNX0dVRVNUX0FQX09OTElORSwKJiM0MzsJS1ZNX0dVRVNUX0FQX09GRkxJTkUsCiYjNDM7CUtWTV9HVUVTVF9TSFVURE9XTiwKJiM0Mzt9OwomIzQzOwomIzQzO3ZvaWQga3ZtY2xvY2tfaW5pdChib29sIHByZWZlcl90c2MpOwomIzQzO3ZvaWQga3ZtY2xvY2tfY3B1X2FjdGlvbihlbnVtIGt2bV9ndWVzdF9jcHVfYWN0aW9uIGFjdGlvbik7CiBib29sIGt2bV9wYXJhX2F2YWlsYWJsZSh2b2lkKTsKIHVuc2lnbmVkIGludCBrdm1fYXJjaF9wYXJhX2ZlYXR1cmVzKHZvaWQpOwogdW5zaWduZWQgaW50IGt2bV9hcmNoX3BhcmFfaGludHModm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oCmluZGV4IDU5NGNmYTE5Y2JkNGJhLi4wNWViZjBiNzNlZjQ3ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgKQEAgLTUzMCw3ICYjNDM7NTMwLDcgQEAgaW50IHNucF9zZW5kX2d1ZXN0X3JlcXVlc3Qoc3RydWN0IHNucF9tc2dfZGVzYyAqbWRlc2MsIHN0cnVjdCBzbnBfZ3Vlc3RfcmVxICpyZXEKIGludCBzbnBfc3ZzbV92dHBtX3NlbmRfY29tbWFuZCh1OCAqYnVmZmVyKTsKIAogdm9pZCBfX2luaXQgc25wX3NlY3VyZV90c2NfcHJlcGFyZSh2b2lkKTsKLXZvaWQgX19pbml0IHNucF9zZWN1cmVfdHNjX2luaXQodm9pZCk7CiYjNDM7dW5zaWduZWQgaW50IHNucF9zZWN1cmVfdHNjX2luaXQodm9pZCk7CiBlbnVtIGVzX3Jlc3VsdCBzYXZpY19yZWdpc3Rlcl9ncGEodTY0IGdwYSk7CiBlbnVtIGVzX3Jlc3VsdCBzYXZpY191bnJlZ2lzdGVyX2dwYSh1NjQgKmdwYSk7CiB1NjQgc2F2aWNfZ2hjYl9tc3JfcmVhZCh1MzIgcmVnKTsKQEAgLTYzNyw3ICYjNDM7NjM3LDcgQEAgc3RhdGljIGlubGluZSBpbnQgc25wX3NlbmRfZ3Vlc3RfcmVxdWVzdChzdHJ1Y3Qgc25wX21zZ19kZXNjICptZGVzYywKIAkJCQkJIHN0cnVjdCBzbnBfZ3Vlc3RfcmVxICpyZXEpIHsgcmV0dXJuIC1FTk9ERVY7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHNucF9zdnNtX3Z0cG1fc2VuZF9jb21tYW5kKHU4ICpidWZmZXIpIHsgcmV0dXJuIC1FTk9ERVY7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgc25wX3NlY3VyZV90c2NfcHJlcGFyZSh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgc25wX3NlY3VyZV90c2NfaW5pdCh2b2lkKSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2luaXQgc25wX3NlY3VyZV90c2NfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgc2V2X2V2aWN0X2NhY2hlKHZvaWQgKnZhLCBpbnQgbnBhZ2VzKSB7fQogc3RhdGljIGlubGluZSBlbnVtIGVzX3Jlc3VsdCBzYXZpY19yZWdpc3Rlcl9ncGEodTY0IGdwYSkgeyByZXR1cm4gRVNfVU5TVVBQT1JURUQ7IH0KIHN0YXRpYyBpbmxpbmUgZW51bSBlc19yZXN1bHQgc2F2aWNfdW5yZWdpc3Rlcl9ncGEodTY0ICpncGEpIHsgcmV0dXJuIEVTX1VOU1VQUE9SVEVEOyB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oCmluZGV4IDg5ZTk3ZDU3NjFkODllLi5kMjNmZjA2ZGI0MWFiZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgKQEAgLTY4LDYgJiM0Mzs2OCw3IEBAIHN0cnVjdCB2ZV9pbmZvIHsKICNpZmRlZiBDT05GSUdfSU5URUxfVERYX0dVRVNUCiAKIHZvaWQgX19pbml0IHRkeF9lYXJseV9pbml0KHZvaWQpOwomIzQzO3Vuc2lnbmVkIGludCBfX2luaXQgdGR4X3RzY19pbml0KHZvaWQpOwogCiB2b2lkIHRkeF9nZXRfdmVfaW5mbyhzdHJ1Y3QgdmVfaW5mbyAqdmUpOwogCkBAIC04OSw2ICYjNDM7OTAsNyBAQCB2b2lkIF9faW5pdCB0ZHhfZHVtcF90ZF9jdGxzKHU2NCB0ZF9jdGxzKTsKICNlbHNlCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfZWFybHlfaW5pdCh2b2lkKSB7IH07CiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdGR4X3RzY19pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfaGFsdCh2b2lkKSB7IH07CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCB0ZHhfZWFybHlfaGFuZGxlX3ZlKHN0cnVjdCBwdF9yZWdzICpyZWdzKSB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmgKaW5kZXggZmRhMThiY2IxOWI0NWEuLmE1MjM4OGFmNjA1NWU0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aW1lci5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmgKQEAgLTExLDggJiM0MzsxMSwyMSBAQCBleHRlcm4gdm9pZCByZWNhbGlicmF0ZV9jcHVfa2h6KHZvaWQpOwogCiBleHRlcm4gaW50IG5vX3RpbWVyX2NoZWNrOwogCiYjNDM7I2lmZGVmIENPTkZJR19QQVJBVklSVAogZXh0ZXJuIGJvb2wgdXNpbmdfbmF0aXZlX3NjaGVkX2Nsb2NrKHZvaWQpOwotdm9pZCBwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodTY0ICgqZnVuYykodm9pZCkpOwomIzQzOwomIzQzO2ludCBfX2luaXQgX19wYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodTY0ICgqZnVuYykodm9pZCksIGJvb2wgc3RhYmxlLAomIzQzOwkJCQkgICAgICB2b2lkICgqc2F2ZSkodm9pZCksIHZvaWQgKCpyZXN0b3JlKSh2b2lkKSk7CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh1NjQgKCpmdW5jKSh2b2lkKSwKJiM0MzsJCQkJCQkgICAgIHZvaWQgKCpzYXZlKSh2b2lkKSwKJiM0MzsJCQkJCQkgICAgIHZvaWQgKCpyZXN0b3JlKSh2b2lkKSkKJiM0Mzt7CiYjNDM7CSh2b2lkKV9fcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKGZ1bmMsIHRydWUsIHNhdmUsIHJlc3RvcmUpOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB1c2luZ19uYXRpdmVfc2NoZWRfY2xvY2sodm9pZCkgeyByZXR1cm4gdHJ1ZTsgfQomIzQzOyNlbmRpZgogCiAvKgogICogV2UgdXNlIHRoZSBmdWxsIGxpbmVhciBlcXVhdGlvbjogZih4KSA9IGEgJiM0MzsgYip4LCBpbiBvcmRlciB0byBhbGxvdwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdHNjLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90c2MuaAppbmRleCA0ZDJkMmYyMWZmMDYzZi4uY2I2ODJmMDk3ZWE3Y2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RzYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RzYy5oCkBAIC04MiwxNCAmIzQzOzgyLDIwIEBAIHN0YXRpYyBpbmxpbmUgY3ljbGVzX3QgZ2V0X2N5Y2xlcyh2b2lkKQogfQogI2RlZmluZSBnZXRfY3ljbGVzIGdldF9jeWNsZXMKIAomIzQzO3N0cnVjdCBjcHVpZF90c2NfaW5mbyB7CiYjNDM7CXVuc2lnbmVkIGludCBkZW5vbWluYXRvcjsKJiM0MzsJdW5zaWduZWQgaW50IG51bWVyYXRvcjsKJiM0MzsJdW5zaWduZWQgaW50IGNyeXN0YWxfa2h6OwomIzQzO307CiYjNDM7ZXh0ZXJuIGludCBjcHVpZF9nZXRfdHNjX2luZm8oc3RydWN0IGNwdWlkX3RzY19pbmZvICppbmZvKTsKJiM0MztleHRlcm4gdW5zaWduZWQgaW50IF9fY3B1X2toel9mcm9tX2NwdWlkKHZvaWQpOwomIzQzOwogZXh0ZXJuIHZvaWQgdHNjX2Vhcmx5X2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCB0c2NfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIG1hcmtfdHNjX3Vuc3RhYmxlKGNoYXIgKnJlYXNvbik7CiBleHRlcm4gaW50IHVuc3luY2hyb25pemVkX3RzYyh2b2lkKTsKIGV4dGVybiBpbnQgY2hlY2tfdHNjX3Vuc3RhYmxlKHZvaWQpOwogZXh0ZXJuIHZvaWQgbWFya190c2NfYXN5bmNfcmVzZXRzKGNoYXIgKnJlYXNvbik7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSh2b2lkKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfdHNjKHZvaWQpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBuYXRpdmVfc2NoZWRfY2xvY2tfZnJvbV90c2ModTY0IHRzYyk7CiAKIGV4dGVybiBpbnQgdHNjX2Nsb2Nrc291cmNlX3JlbGlhYmxlOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgKaW5kZXggOTUzZDMxOTk0MDhhZTUuLmU4NzllNmU4MzQyODMwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgKQEAgLTEyMyw2ICYjNDM7MTIzLDggQEAgc3RydWN0IHg4Nl9pbml0X3BjaSB7CiAgKiBAbXNpX2V4dF9kZXN0X2lkOgkJTVNJIHN1cHBvcnRzIDE1LWJpdCBBUElDIElEcwogICogQGluaXRfbWVtX21hcHBpbmc6CQlzZXR1cCBlYXJseSBtYXBwaW5ncyBkdXJpbmcgaW5pdF9tZW1fbWFwcGluZygpCiAgKiBAaW5pdF9hZnRlcl9ib290bWVtOgkJZ3Vlc3QgaW5pdCBhZnRlciBib290IGFsbG9jYXRvciBpcyBmaW5pc2hlZAomIzQzOyAqIEBnZXRfdHNjX2toejoJCWdldCB0aGUgVFNDIGZyZXF1ZW5jeSAocmV0dXJucyAwIGlmIGZyZXF1ZW5jeSBpcyB1bmtub3duKQomIzQzOyAqIEBnZXRfY3B1X2toejoJCWdldCB0aGUgQ1BVIGZyZXF1ZW5jeSAocmV0dXJucyAwIGlmIGZyZXF1ZW5jeSBpcyB1bmtub3duKQogICovCiBzdHJ1Y3QgeDg2X2h5cGVyX2luaXQgewogCXZvaWQgKCppbml0X3BsYXRmb3JtKSh2b2lkKTsKQEAgLTEzMSw2ICYjNDM7MTMzLDggQEAgc3RydWN0IHg4Nl9oeXBlcl9pbml0IHsKIAlib29sICgqbXNpX2V4dF9kZXN0X2lkKSh2b2lkKTsKIAl2b2lkICgqaW5pdF9tZW1fbWFwcGluZykodm9pZCk7CiAJdm9pZCAoKmluaXRfYWZ0ZXJfYm9vdG1lbSkodm9pZCk7CiYjNDM7CXVuc2lnbmVkIGludCAoKmdldF90c2Nfa2h6KSh2b2lkKTsKJiM0MzsJdW5zaWduZWQgaW50ICgqZ2V0X2NwdV9raHopKHZvaWQpOwogfTsKIAogLyoqCkBAIC0yOTEsOCAmIzQzOzI5NSw2IEBAIHN0cnVjdCB4ODZfaHlwZXJfcnVudGltZSB7CiAKIC8qKgogICogc3RydWN0IHg4Nl9wbGF0Zm9ybV9vcHMgLSBwbGF0Zm9ybSBzcGVjaWZpYyBydW50aW1lIGZ1bmN0aW9ucwotICogQGNhbGlicmF0ZV9jcHU6CQljYWxpYnJhdGUgQ1BVCi0gKiBAY2FsaWJyYXRlX3RzYzoJCWNhbGlicmF0ZSBUU0MsIGlmIGRpZmZlcmVudCBmcm9tIENQVQogICogQGdldF93YWxsY2xvY2s6CQlnZXQgdGltZSBmcm9tIEhXIGNsb2NrIGxpa2UgUlRDIGV0Yy4KICAqIEBzZXRfd2FsbGNsb2NrOgkJc2V0IHRpbWUgYmFjayB0byBIVyBjbG9jawogICogQGlvbW11X3NodXRkb3duOgkJc2V0IGJ5IGFuIElPTU1VIGRyaXZlciBmb3Igc2h1dGRvd24gaWYgbmVjZXNzYXJ5CkBAIC0zMTYsOCAmIzQzOzMxOCw2IEBAIHN0cnVjdCB4ODZfaHlwZXJfcnVudGltZSB7CiAgKiBAZ3Vlc3Q6CQkJZ3Vlc3QgaW5jYXJuYXRpb25zIGNhbGxiYWNrcwogICovCiBzdHJ1Y3QgeDg2X3BsYXRmb3JtX29wcyB7Ci0JdW5zaWduZWQgbG9uZyAoKmNhbGlicmF0ZV9jcHUpKHZvaWQpOwotCXVuc2lnbmVkIGxvbmcgKCpjYWxpYnJhdGVfdHNjKSh2b2lkKTsKIAl2b2lkICgqZ2V0X3dhbGxjbG9jaykoc3RydWN0IHRpbWVzcGVjNjQgKnRzKTsKIAlpbnQgKCpzZXRfd2FsbGNsb2NrKShjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpOwogCXZvaWQgKCppb21tdV9zaHV0ZG93bikodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bV9wYXJhLmggYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bV9wYXJhLmgKaW5kZXggYTFlZmE3OTA3YTBiMTAuLmMzYTM4NDcxMWYzYTVmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bV9wYXJhLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm1fcGFyYS5oCkBAIC00NCw2ICYjNDM7NDQsMTcgQEAKICAqLwogI2RlZmluZSBLVk1fRkVBVFVSRV9DTE9DS1NPVVJDRV9TVEFCTEVfQklUCTI0CiAKJiM0MzsvKgomIzQzOyAqIFRoZSB0aW1pbmcgaW5mb3JtYXRpb24gbGVhZiBwcm92aWRlcyBUU0MgYW5kIGxvY2FsIEFQSUMgdGltZXIgZnJlcXVlbmN5CiYjNDM7ICogaW5mb3JtYXRpb24gdG8gdGhlIGd1ZXN0LiAgTm90ZSwgdXNlcnNwYWNlIGlzIHJlc3BvbnNpYmxlIGZvciBmaWxsaW5nIHRoZQomIzQzOyAqIGxlYWYgd2l0aCB0aGUgY29ycmVjdCBpbmZvcm1hdGlvbi4KJiM0MzsgKgomIzQzOyAqICAjIEVBWDogKFZpcnR1YWwpIFRTQyBmcmVxdWVuY3kgaW4ga0h6LgomIzQzOyAqICAjIEVCWDogKFZpcnR1YWwpIEJ1cyAobG9jYWwgQVBJQyB0aW1lcikgZnJlcXVlbmN5IGluIGtIei4KJiM0MzsgKiAgIyBFQ1gsIEVEWDogUmVzZXJ2ZWQgKG11c3QgYmUgemVybykuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBLVk1fQ1BVSURfVElNSU5HX0lORk8JMHg0MDAwMDAxMAomIzQzOwogI2RlZmluZSBNU1JfS1ZNX1dBTExfQ0xPQ0sgIDB4MTEKICNkZWZpbmUgTVNSX0tWTV9TWVNURU1fVElNRSAweDEyCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwppbmRleCBhYTFlMTk5NzlhYThlMS4uOGQzZDkzMDU3NmZkNzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKQEAgLTE3Niw3ICYjNDM7MTc2LDcgQEAgc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsYXBpY19yZXNvdXJjZSA9IHsKIH07CiAKIC8qIE1lYXN1cmVkIGluIHRpY2tzIHBlciBIWi4gKi8KLXVuc2lnbmVkIGludCBsYXBpY190aW1lcl9wZXJpb2QgPSAwOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgbGFwaWNfdGltZXJfcGVyaW9kOwogCiBzdGF0aWMgdm9pZCBhcGljX3BtX2FjdGl2YXRlKHZvaWQpOwogCkBAIC03OTYsNiAmIzQzOzc5NiwxNiBAQCBib29sIF9faW5pdCBhcGljX25lZWRzX3BpdCh2b2lkKQogCXJldHVybiBsYXBpY190aW1lcl9wZXJpb2QgPT0gMDsKIH0KIAomIzQzO3ZvaWQgYXBpY19zZXRfdGltZXJfcGVyaW9kX2toeih1NjQgcGVyaW9kX2toeiwgY29uc3QgY2hhciAqc291cmNlKQomIzQzO3sKJiM0MzsJbGFwaWNfdGltZXJfcGVyaW9kID0gbXVsX3U2NF91MzJfZGl2KHBlcmlvZF9raHosIDEwMDAsIEhaKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBhcGljX3NldF90aW1lcl9wZXJpb2RfaHoodTY0IHBlcmlvZF9oeiwgY29uc3QgY2hhciAqc291cmNlKQomIzQzO3sKJiM0MzsJbGFwaWNfdGltZXJfcGVyaW9kID0gZGl2X3U2NChwZXJpb2RfaHosIEhaKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IF9faW5pdCBjYWxpYnJhdGVfQVBJQ19jbG9jayh2b2lkKQogewogCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmxldnQgPSB0aGlzX2NwdV9wdHIoJmFtcDtsYXBpY19ldmVudHMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9hY3JuLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2Fjcm4uYwppbmRleCBkYzExOWFmODM1MjQyYS4uZGM3MWE2ZmRkNDYxMzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYWNybi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYWNybi5jCkBAIC0xOSwxOCAmIzQzOzE5LDI4IEBACiAjaW5jbHVkZSAmbHQ7YXNtL2lkdGVudHJ5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2lycV9yZWdzLmgmZ3Q7CiAKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGFjcm5fdHNjX2toel9jcHVpZCBfX2luaXRkYXRhOwomIzQzOwogc3RhdGljIHUzMiBfX2luaXQgYWNybl9kZXRlY3Qodm9pZCkKIHsKIAlyZXR1cm4gYWNybl9jcHVpZF9iYXNlKCk7CiB9CiAKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBhY3JuX2dldF90c2Nfa2h6KHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gYWNybl90c2Nfa2h6X2NwdWlkOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIF9faW5pdCBhY3JuX2luaXRfcGxhdGZvcm0odm9pZCkKIHsKIAkvKiBJbnN0YWxsIHN5c3RlbSBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgQUNSTiBoeXBlcnZpc29yIGNhbGxiYWNrICovCiAJc3lzdmVjX2luc3RhbGwoSFlQRVJWSVNPUl9DQUxMQkFDS19WRUNUT1IsIHN5c3ZlY19hY3JuX2h2X2NhbGxiYWNrKTsKIAotCXg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjID0gYWNybl9nZXRfdHNjX2toejsKLQl4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX2NwdSA9IGFjcm5fZ2V0X3RzY19raHo7CiYjNDM7CWFjcm5fdHNjX2toel9jcHVpZCA9IGNwdWlkX2VheChBQ1JOX0NQVUlEX1RJTUlOR19JTkZPKTsKJiM0MzsJaWYgKGFjcm5fdHNjX2toel9jcHVpZCkgewomIzQzOwkJeDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHogPSBhY3JuX2dldF90c2Nfa2h6OwomIzQzOwkJeDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHogPSBhY3JuX2dldF90c2Nfa2h6OwomIzQzOwl9CiB9CiAKIHN0YXRpYyBib29sIGFjcm5feDJhcGljX2F2YWlsYWJsZSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tc2h5cGVydi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tc2h5cGVydi5jCmluZGV4IDE4NWQ0ZjY3N2VjMGYwLi5jNGRhOGUzNTMxOWFjZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tc2h5cGVydi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuYwpAQCAtMjc1LDYzICYjNDM7Mjc1LDYgQEAgc3RhdGljIHZvaWQgaHZfZ3Vlc3RfY3Jhc2hfc2h1dGRvd24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB9CiAjZW5kaWYgLyogQ09ORklHX0NSQVNIX0RVTVAgKi8KIAotc3RhdGljIHU2NCBodl9yZWZfY291bnRlcl9hdF9zdXNwZW5kOwotc3RhdGljIHZvaWQgKCpvbGRfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSkodm9pZCk7Ci1zdGF0aWMgdm9pZCAoKm9sZF9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKSh2b2lkKTsKLQotLyoKLSAqIEh5cGVyLVYgY2xvY2sgY291bnRlciByZXNldHMgZHVyaW5nIGhpYmVybmF0aW9uLiBTYXZlIGFuZCByZXN0b3JlIGNsb2NrCi0gKiBvZmZzZXQgZHVyaW5nIHN1c3BlbmQvcmVzdW1lLCB3aGlsZSBhbHNvIGNvbnNpZGVyaW5nIHRoZSB0aW1lIHBhc3NlZAotICogYmVmb3JlIHN1c3BlbmQuIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgc2NoZWRfY2xvY2sgdXNpbmcgaHYgdHNjIHBhZ2UKLSAqIGJhc2VkIGNsb2Nrc291cmNlLCBwcm9jZWVkcyBmcm9tIHdoZXJlIGl0IGxlZnQgb2ZmIGR1cmluZyBzdXNwZW5kIGFuZAotICogaXQgc2hvd3MgY29ycmVjdCB0aW1lIGZvciB0aGUgdGltZXN0YW1wcyBvZiBrZXJuZWwgbWVzc2FnZXMgYWZ0ZXIgcmVzdW1lLgotICovCi1zdGF0aWMgdm9pZCBzYXZlX2h2X2Nsb2NrX3RzY19zdGF0ZSh2b2lkKQotewotCWh2X3JlZl9jb3VudGVyX2F0X3N1c3BlbmQgPSBodl9yZWFkX3JlZmVyZW5jZV9jb3VudGVyKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlc3RvcmVfaHZfY2xvY2tfdHNjX3N0YXRlKHZvaWQpCi17Ci0JLyoKLQkgKiBBZGp1c3QgdGhlIG9mZnNldHMgdXNlZCBieSBodiB0c2MgY2xvY2tzb3VyY2UgdG8KLQkgKiBhY2NvdW50IGZvciB0aGUgdGltZSBzcGVudCBiZWZvcmUgaGliZXJuYXRpb24uCi0JICogYWRqdXN0ZWQgdmFsdWUgPSByZWZlcmVuY2UgY291bnRlciAodGltZSkgYXQgc3VzcGVuZAotCSAqICAgICAgICAgICAgICAgIC0gcmVmZXJlbmNlIGNvdW50ZXIgKHRpbWUpIG5vdy4KLQkgKi8KLQlodl9hZGpfc2NoZWRfY2xvY2tfb2Zmc2V0KGh2X3JlZl9jb3VudGVyX2F0X3N1c3BlbmQgLSBodl9yZWFkX3JlZmVyZW5jZV9jb3VudGVyKCkpOwotfQotCi0vKgotICogRnVuY3Rpb25zIHRvIG92ZXJyaWRlIHNhdmVfc2NoZWRfY2xvY2tfc3RhdGUgYW5kIHJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUKLSAqIGZ1bmN0aW9ucyBvZiB4ODZfcGxhdGZvcm0uIFRoZSBIeXBlci1WIGNsb2NrIGNvdW50ZXIgaXMgcmVzZXQgZHVyaW5nCi0gKiBzdXNwZW5kLXJlc3VtZSBhbmQgdGhlIG9mZnNldCB1c2VkIHRvIG1lYXN1cmUgdGltZSBuZWVkcyB0byBiZQotICogY29ycmVjdGVkLCBwb3N0IHJlc3VtZS4KLSAqLwotc3RhdGljIHZvaWQgaHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKQotewotCW9sZF9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKCk7Ci0Jc2F2ZV9odl9jbG9ja190c2Nfc3RhdGUoKTsKLX0KLQotc3RhdGljIHZvaWQgaHZfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKQotewotCXJlc3RvcmVfaHZfY2xvY2tfdHNjX3N0YXRlKCk7Ci0Jb2xkX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUoKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHg4Nl9zZXR1cF9vcHNfZm9yX3RzY19wZ19jbG9jayh2b2lkKQotewotCWlmICghKG1zX2h5cGVydi5mZWF0dXJlcyAmYW1wOyBIVl9NU1JfUkVGRVJFTkNFX1RTQ19BVkFJTEFCTEUpKQotCQlyZXR1cm47Ci0KLQlvbGRfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSA9IHg4Nl9wbGF0Zm9ybS5zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlOwotCXg4Nl9wbGF0Zm9ybS5zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlID0gaHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZTsKLQotCW9sZF9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlID0geDg2X3BsYXRmb3JtLnJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGU7Ci0JeDg2X3BsYXRmb3JtLnJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUgPSBodl9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlOwotfQotCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogREVGSU5FX1NUQVRJQ19DQUxMKGh2X2h5cGVyY2FsbCwgaHZfc3RkX2h5cGVyY2FsbCk7CiBFWFBPUlRfU1RBVElDX0NBTExfVFJBTVBfR1BMKGh2X2h5cGVyY2FsbCk7CkBAIC0zOTUsNyAmIzQzOzMzOCw3IEBAIHN0YXRpYyBpbnQgaHZfbm1pX3Vua25vd24odW5zaWduZWQgaW50IHZhbCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB9CiAjZW5kaWYKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgaHZfZ2V0X3RzY19raHoodm9pZCkKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBodl9nZXRfdHNjX2toeih2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZnJlcTsKIApAQCAtNTczLDkgJiM0Mzs1MTYsOCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbXNfaHlwZXJ2X2luaXRfcGxhdGZvcm0odm9pZCkKIAogCWlmIChtc19oeXBlcnYuZmVhdHVyZXMgJmFtcDsgSFZfQUNDRVNTX0ZSRVFVRU5DWV9NU1JTICZhbXA7JmFtcDsKIAkgICAgbXNfaHlwZXJ2Lm1pc2NfZmVhdHVyZXMgJmFtcDsgSFZfRkVBVFVSRV9GUkVRVUVOQ1lfTVNSU19BVkFJTEFCTEUpIHsKLQkJeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MgPSBodl9nZXRfdHNjX2toejsKLQkJeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUgPSBodl9nZXRfdHNjX2toejsKLQkJc2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfS05PV05fRlJFUSk7CiYjNDM7CQl4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeiA9IGh2X2dldF90c2Nfa2h6OwomIzQzOwkJeDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHogPSBodl9nZXRfdHNjX2toejsKIAl9CiAKIAlpZiAobXNfaHlwZXJ2LnByaXZfaGlnaCAmYW1wOyBIVl9JU09MQVRJT04pIHsKQEAgLTY0NiwxMCAmIzQzOzU4OCw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtc19oeXBlcnZfaW5pdF9wbGF0Zm9ybSh2b2lkKQogCQl1NjQJaHZfbGFwaWNfZnJlcXVlbmN5OwogCiAJCXJkbXNycShIVl9YNjRfTVNSX0FQSUNfRlJFUVVFTkNZLCBodl9sYXBpY19mcmVxdWVuY3kpOwotCQlodl9sYXBpY19mcmVxdWVuY3kgPSBkaXZfdTY0KGh2X2xhcGljX2ZyZXF1ZW5jeSwgSFopOwotCQlsYXBpY190aW1lcl9wZXJpb2QgPSBodl9sYXBpY19mcmVxdWVuY3k7Ci0JCXByX2luZm8oJiMzNDtIeXBlci1WOiBMQVBJQyBUaW1lciBGcmVxdWVuY3k6ICUjeFxuJiMzNDssCi0JCQlsYXBpY190aW1lcl9wZXJpb2QpOwomIzQzOwkJYXBpY19zZXRfdGltZXJfcGVyaW9kX2h6KGh2X2xhcGljX2ZyZXF1ZW5jeSwgJiMzNDtIeXBlci1WIGh5cGVydmlzb3ImIzM0Oyk7CiAJfQogCiAJcmVnaXN0ZXJfbm1pX2hhbmRsZXIoTk1JX1VOS05PV04sIGh2X25taV91bmtub3duLCBOTUlfRkxBR19GSVJTVCwKQEAgLTc0MCw3ICYjNDM7Njc5LDYgQEAgc3RhdGljIHZvaWQgX19pbml0IG1zX2h5cGVydl9pbml0X3BsYXRmb3JtKHZvaWQpCiAKIAkvKiBSZWdpc3RlciBIeXBlci1WIHNwZWNpZmljIGNsb2Nrc291cmNlICovCiAJaHZfaW5pdF9jbG9ja3NvdXJjZSgpOwotCXg4Nl9zZXR1cF9vcHNfZm9yX3RzY19wZ19jbG9jaygpOwogCWh2X3Z0bF9pbml0X3BsYXRmb3JtKCk7CiAjZW5kaWYKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvdm13YXJlLmMKaW5kZXggMzRiNzM1NzNiMTA4ZDcuLjIzMjI1NTI3OWE2ZWVjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Ztd2FyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvdm13YXJlLmMKQEAgLTY0LDcgJiM0Mzs2NCw3IEBAIHN0cnVjdCB2bXdhcmVfc3RlYWxfdGltZSB7CiAJdTY0IHJlc2VydmVkWzddOwogfTsKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgdm13YXJlX3RzY19raHogX19yb19hZnRlcl9pbml0OwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHZtd2FyZV90c2Nfa2h6IF9faW5pdGRhdGE7CiBzdGF0aWMgdTggdm13YXJlX2h5cGVyY2FsbF9tb2RlICAgICBfX3JvX2FmdGVyX2luaXQ7CiAKIHVuc2lnbmVkIGxvbmcgdm13YXJlX2h5cGVyY2FsbF9zbG93KHVuc2lnbmVkIGxvbmcgY21kLApAQCAtMTM3LDcgJiM0MzsxMzcsNyBAQCBzdGF0aWMgaW5saW5lIGludCBfX3Ztd2FyZV9wbGF0Zm9ybSh2b2lkKQogCXJldHVybiBlYXggIT0gVUlOVF9NQVggJmFtcDsmYW1wOyBlYnggPT0gVk1XQVJFX0hZUEVSVklTT1JfTUFHSUM7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHZtd2FyZV9nZXRfdHNjX2toeih2b2lkKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IHZtd2FyZV9nZXRfdHNjX2toeih2b2lkKQogewogCXJldHVybiB2bXdhcmVfdHNjX2toejsKIH0KQEAgLTM0OCw3ICYjNDM7MzQ4LDggQEAgc3RhdGljIHZvaWQgX19pbml0IHZtd2FyZV9wYXJhdmlydF9vcHNfc2V0dXAodm9pZCkKIAl2bXdhcmVfY3ljMm5zX3NldHVwKCk7CiAKIAlpZiAodm13X3NjaGVkX2Nsb2NrKQotCQlwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodm13YXJlX3NjaGVkX2Nsb2NrKTsKJiM0MzsJCXBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh2bXdhcmVfc2NoZWRfY2xvY2ssCiYjNDM7CQkJCQkgeDg2X2luaXRfbm9vcCwgeDg2X2luaXRfbm9vcCk7CiAKIAlpZiAodm13YXJlX2lzX3N0ZWFsY2xvY2tfYXZhaWxhYmxlKCkpIHsKIAkJaGFzX3N0ZWFsX2Nsb2NrID0gdHJ1ZTsKQEAgLTM5MCw4ICYjNDM7MzkxLDYgQEAgc3RhdGljIHZvaWQgX19pbml0IHZtd2FyZV9zZXRfY2FwYWJpbGl0aWVzKHZvaWQpCiB7CiAJc2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpOwogCXNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTsKLQlpZiAodm13YXJlX3RzY19raHopCi0JCXNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpOwogCWlmICh2bXdhcmVfaHlwZXJjYWxsX21vZGUgPT0gQ1BVSURfVk1XQVJFX0ZFQVRVUkVTX0VDWF9WTUNBTEwpCiAJCXNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVk1DQUxMKTsKIAllbHNlIGlmICh2bXdhcmVfaHlwZXJjYWxsX21vZGUgPT0gQ1BVSURfVk1XQVJFX0ZFQVRVUkVTX0VDWF9WTU1DQUxMKQpAQCAtNDE5LDE1ICYjNDM7NDE4LDExIEBAIHN0YXRpYyB2b2lkIF9faW5pdCB2bXdhcmVfcGxhdGZvcm1fc2V0dXAodm9pZCkKIAkJfQogCiAJCXZtd2FyZV90c2Nfa2h6ID0gdHNjX2toejsKLQkJeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MgPSB2bXdhcmVfZ2V0X3RzY19raHo7Ci0JCXg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ID0gdm13YXJlX2dldF90c2Nfa2h6OwomIzQzOwkJeDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHogPSB2bXdhcmVfZ2V0X3RzY19raHo7CiYjNDM7CQl4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeiA9IHZtd2FyZV9nZXRfdHNjX2toejsKIAotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwogCQkvKiBTa2lwIGxhcGljIGNhbGlicmF0aW9uIHNpbmNlIHdlIGtub3cgdGhlIGJ1cyBmcmVxdWVuY3kuICovCi0JCWxhcGljX3RpbWVyX3BlcmlvZCA9IGVjeCAvIEhaOwotCQlwcl9pbmZvKCYjMzQ7SG9zdCBidXMgY2xvY2sgc3BlZWQgcmVhZCBmcm9tIGh5cGVydmlzb3IgOiAldSBIelxuJiMzNDssCi0JCQllY3gpOwotI2VuZGlmCiYjNDM7CQlhcGljX3NldF90aW1lcl9wZXJpb2RfaHooZWN4LCAmIzM0O1ZNd2FyZSBoeXBlcnZpc29yJiMzNDspOwogCX0gZWxzZSB7CiAJCXByX3dhcm4oJiMzNDtGYWlsZWQgdG8gZ2V0IFRTQyBmcmVxIGZyb20gdGhlIGh5cGVydmlzb3JcbiYjMzQ7KTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvamFpbGhvdXNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvamFpbGhvdXNlLmMKaW5kZXggZjU4Y2U5MjIwZTBmMzIuLmZmMTczMDUyY2RjZWRjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvamFpbGhvdXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2phaWxob3VzZS5jCkBAIC02NSwxMCAmIzQzOzY1LDEwIEBAIHN0YXRpYyB2b2lkIGphaWxob3VzZV9nZXRfd2FsbGNsb2NrKHN0cnVjdCB0aW1lc3BlYzY0ICpub3cpCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBqYWlsaG91c2VfdGltZXJfaW5pdCh2b2lkKQogewotCWxhcGljX3RpbWVyX3BlcmlvZCA9IHNldHVwX2RhdGEudjEuYXBpY19raHogKiAoMTAwMCAvIEhaKTsKJiM0MzsJYXBpY19zZXRfdGltZXJfcGVyaW9kX2toeihzZXR1cF9kYXRhLnYxLmFwaWNfa2h6LCAmIzM0O0phaWxob3VzZSBoeXBlcnZpc29yJiMzNDspOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBqYWlsaG91c2VfZ2V0X3RzYyh2b2lkKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGphaWxob3VzZV9nZXRfdHNjKHZvaWQpCiB7CiAJcmV0dXJuIHByZWNhbGlicmF0ZWRfdHNjX2toejsKIH0KQEAgLTIxMCw4ICYjNDM7MjEwLDYgQEAgc3RhdGljIHZvaWQgX19pbml0IGphaWxob3VzZV9pbml0X3BsYXRmb3JtKHZvaWQpCiAJeDg2X2luaXQubXBwYXJzZS5wYXJzZV9zbXBfY2ZnCQk9IGphaWxob3VzZV9wYXJzZV9zbXBfY29uZmlnOwogCXg4Nl9pbml0LnBjaS5hcmNoX2luaXQJCQk9IGphaWxob3VzZV9wY2lfYXJjaF9pbml0OwogCi0JeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUJCT0gamFpbGhvdXNlX2dldF90c2M7Ci0JeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MJCT0gamFpbGhvdXNlX2dldF90c2M7CiAJeDg2X3BsYXRmb3JtLmdldF93YWxsY2xvY2sJCT0gamFpbGhvdXNlX2dldF93YWxsY2xvY2s7CiAJeDg2X3BsYXRmb3JtLmxlZ2FjeS5ydGMJCQk9IDA7CiAJeDg2X3BsYXRmb3JtLmxlZ2FjeS53YXJtX3Jlc2V0CQk9IDA7CkBAIC0yNTcsNyAmIzQzOzI1NSw2IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBqYWlsaG91c2VfaW5pdF9wbGF0Zm9ybSh2b2lkKQogCXByX2RlYnVnKCYjMzQ7SmFpbGhvdXNlOiBQTS1UaW1lciBJTyBQb3J0OiAlI3hcbiYjMzQ7LCBwbXRtcl9pb3BvcnQpOwogCiAJcHJlY2FsaWJyYXRlZF90c2Nfa2h6ID0gc2V0dXBfZGF0YS52MS50c2Nfa2h6OwotCXNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpOwogCiAJcGNpX3Byb2JlID0gMDsKIApAQCAtMjkzLDUgJiM0MzsyOTAsNyBAQCBjb25zdCBzdHJ1Y3QgaHlwZXJ2aXNvcl94ODYgeDg2X2h5cGVyX2phaWxob3VzZSBfX3JlZmNvbnN0ID0gewogCS5kZXRlY3QJCQk9IGphaWxob3VzZV9kZXRlY3QsCiAJLmluaXQuaW5pdF9wbGF0Zm9ybQk9IGphaWxob3VzZV9pbml0X3BsYXRmb3JtLAogCS5pbml0LngyYXBpY19hdmFpbGFibGUJPSBqYWlsaG91c2VfeDJhcGljX2F2YWlsYWJsZSwKJiM0MzsJLmluaXQuZ2V0X3RzY19raHoJPSBqYWlsaG91c2VfZ2V0X3RzYywKJiM0MzsJLmluaXQuZ2V0X2NwdV9raHoJPSBqYWlsaG91c2VfZ2V0X3RzYywKIAkuaWdub3JlX25vcHYJCT0gdHJ1ZSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3ZtLmMgYi9hcmNoL3g4Ni9rZXJuZWwva3ZtLmMKaW5kZXggZGNlZjg0ZGEzMDRiODkuLmJlZWEwYjZhYTc4ZTFhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2t2bS5jCkBAIC00OSw2ICYjNDM7NDksOSBAQAogI2luY2x1ZGUgJmx0O2FzbS9zdm0uaCZndDsKICNpbmNsdWRlICZsdDthc20vZTgyMC9hcGkuaCZndDsKIAomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQga3ZtX3RzY19raHpfY3B1aWQgX19pbml0ZGF0YTsKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGt2bV9jcHVfa2h6X2NwdWlkIF9faW5pdGRhdGE7CiYjNDM7CiBERUZJTkVfU1RBVElDX0tFWV9GQUxTRV9STyhrdm1fYXN5bmNfcGZfZW5hYmxlZCk7CiAKIHN0YXRpYyBpbnQga3ZtYXBmID0gMTsKQEAgLTQ1Nyw3ICYjNDM7NDYwLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHNldl9tYXBfcGVyY3B1X2RhdGEodm9pZCkKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGt2bV9ndWVzdF9jcHVfb2ZmbGluZShib29sIHNodXRkb3duKQomIzQzO3N0YXRpYyB2b2lkIGt2bV9ndWVzdF9jcHVfb2ZmbGluZShlbnVtIGt2bV9ndWVzdF9jcHVfYWN0aW9uIGFjdGlvbikKIHsKIAlrdm1fZGlzYWJsZV9zdGVhbF90aW1lKCk7CiAJaWYgKGt2bV9wYXJhX2hhc19mZWF0dXJlKEtWTV9GRUFUVVJFX1BWX0VPSSkpCkBAIC00NjUsMjMgJiM0Mzs0NjgsMzAgQEAgc3RhdGljIHZvaWQga3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKGJvb2wgc2h1dGRvd24pCiAJaWYgKGt2bV9wYXJhX2hhc19mZWF0dXJlKEtWTV9GRUFUVVJFX01JR1JBVElPTl9DT05UUk9MKSkKIAkJd3Jtc3JxKE1TUl9LVk1fTUlHUkFUSU9OX0NPTlRST0wsIDApOwogCWt2bV9wdl9kaXNhYmxlX2FwZigpOwotCWlmICghc2h1dGRvd24pCiYjNDM7CWlmIChhY3Rpb24gIT0gS1ZNX0dVRVNUX1NIVVRET1dOKQogCQlhcGZfdGFza193YWtlX2FsbCgpOwotCWt2bWNsb2NrX2Rpc2FibGUoKTsKJiM0MzsKJiM0MzsJa3ZtY2xvY2tfY3B1X2FjdGlvbihhY3Rpb24pOwogfQogCi1zdGF0aWMgaW50IGt2bV9jcHVfb25saW5lKHVuc2lnbmVkIGludCBjcHUpCiYjNDM7c3RhdGljIHZvaWQgX19rdm1fY3B1X29ubGluZSh1bnNpZ25lZCBpbnQgY3B1LCBlbnVtIGt2bV9ndWVzdF9jcHVfYWN0aW9uIGFjdGlvbikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwomIzQzOwlrdm1jbG9ja19jcHVfYWN0aW9uKGFjdGlvbik7CiAJa3ZtX2d1ZXN0X2NwdV9pbml0KCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybiAwOwogfQogCiAjaWZkZWYgQ09ORklHX1NNUAogCiYjNDM7c3RhdGljIGludCBrdm1fY3B1X29ubGluZSh1bnNpZ25lZCBpbnQgY3B1KQomIzQzO3sKJiM0MzsJX19rdm1fY3B1X29ubGluZShjcHUsIEtWTV9HVUVTVF9BUF9PTkxJTkUpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoY3B1bWFza192YXJfdCwgX19wdl9jcHVfbWFzayk7CiAKIHN0YXRpYyBib29sIHB2X3RsYl9mbHVzaF9zdXBwb3J0ZWQodm9pZCkKQEAgLTcyMyw3ICYjNDM7NzMzLDcgQEAgc3RhdGljIGludCBrdm1fY3B1X2Rvd25fcHJlcGFyZSh1bnNpZ25lZCBpbnQgY3B1KQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0Ja3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKGZhbHNlKTsKJiM0MzsJa3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKEtWTV9HVUVTVF9BUF9PRkZMSU5FKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIDA7CiB9CkBAIC03MzQsNyAmIzQzOzc0NCw3IEBAIHN0YXRpYyBpbnQga3ZtX3N1c3BlbmQodm9pZCAqZGF0YSkKIHsKIAl1NjQgdmFsID0gMDsKIAotCWt2bV9ndWVzdF9jcHVfb2ZmbGluZShmYWxzZSk7CiYjNDM7CWt2bV9ndWVzdF9jcHVfb2ZmbGluZShLVk1fR1VFU1RfQlNQX1NVU1BFTkQpOwogCiAjaWZkZWYgQ09ORklHX0FSQ0hfQ1BVSURMRV9IQUxUUE9MTAogCWlmIChrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9QT0xMX0NPTlRST0wpKQpAQCAtNzQ2LDcgJiM0Mzs3NTYsNyBAQCBzdGF0aWMgaW50IGt2bV9zdXNwZW5kKHZvaWQgKmRhdGEpCiAKIHN0YXRpYyB2b2lkIGt2bV9yZXN1bWUodm9pZCAqZGF0YSkKIHsKLQlrdm1fY3B1X29ubGluZShyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKJiM0MzsJX19rdm1fY3B1X29ubGluZShyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCBLVk1fR1VFU1RfQlNQX1JFU1VNRSk7CiAKICNpZmRlZiBDT05GSUdfQVJDSF9DUFVJRExFX0hBTFRQT0xMCiAJaWYgKGt2bV9wYXJhX2hhc19mZWF0dXJlKEtWTV9GRUFUVVJFX1BPTExfQ09OVFJPTCkgJmFtcDsmYW1wOyBoYXNfZ3Vlc3RfcG9sbCkKQEAgLTc2NSw3ICYjNDM7Nzc1LDcgQEAgc3RhdGljIHN0cnVjdCBzeXNjb3JlIGt2bV9zeXNjb3JlID0gewogCiBzdGF0aWMgdm9pZCBrdm1fcHZfZ3Vlc3RfY3B1X3JlYm9vdCh2b2lkICp1bnVzZWQpCiB7Ci0Ja3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKHRydWUpOwomIzQzOwlrdm1fZ3Vlc3RfY3B1X29mZmxpbmUoS1ZNX0dVRVNUX1NIVVRET1dOKTsKIH0KIAogc3RhdGljIGludCBrdm1fcHZfcmVib290X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLApAQCAtNzg5LDcgJiM0Mzs3OTksNyBAQCBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGt2bV9wdl9yZWJvb3RfbmIgPSB7CiAjaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKIHN0YXRpYyB2b2lkIGt2bV9jcmFzaF9zaHV0ZG93bihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlrdm1fZ3Vlc3RfY3B1X29mZmxpbmUodHJ1ZSk7CiYjNDM7CWt2bV9ndWVzdF9jcHVfb2ZmbGluZShLVk1fR1VFU1RfU0hVVERPV04pOwogCW5hdGl2ZV9tYWNoaW5lX2NyYXNoX3NodXRkb3duKHJlZ3MpOwogfQogI2VuZGlmCkBAIC05MTEsNiAmIzQzOzkyMSwyNiBAQCBib29sIGt2bV9wYXJhX2F2YWlsYWJsZSh2b2lkKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3BhcmFfYXZhaWxhYmxlKTsKIAomIzQzO3N0YXRpYyB1MzIgX19pbml0IGt2bV9jcHVpZF90aW1pbmdfaW5mb19sZWFmKHZvaWQpCiYjNDM7ewomIzQzOwl1MzIgYmFzZSA9IGt2bV9jcHVpZF9iYXNlKCk7CiYjNDM7CiYjNDM7CWlmICghYmFzZSB8fCBjcHVpZF9lYXgoYmFzZSkgJmx0OyAoYmFzZSB8IEtWTV9DUFVJRF9USU1JTkdfSU5GTykpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGJhc2UgfCBLVk1fQ1BVSURfVElNSU5HX0lORk87CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGt2bV9nZXRfdHNjX2toeih2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIGt2bV90c2Nfa2h6X2NwdWlkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBrdm1fZ2V0X2NwdV9raHoodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBrdm1fY3B1X2toel9jcHVpZDsKJiM0Mzt9CiYjNDM7CiB1bnNpZ25lZCBpbnQga3ZtX2FyY2hfcGFyYV9mZWF0dXJlcyh2b2lkKQogewogCXJldHVybiBjcHVpZF9lYXgoa3ZtX2NwdWlkX2Jhc2UoKSB8IEtWTV9DUFVJRF9GRUFUVVJFUyk7CkBAIC05NjAsNiAmIzQzOzk5MCw4IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrdm1faW5pdF9wbGF0Zm9ybSh2b2lkKQogCQkubWFza19sbyA9ICh1MzIpKH4oU1pfNEcgLSB0b2x1ZCAtIDEpKSB8IE1UUlJfUEhZU01BU0tfViwKIAkJLm1hc2tfaGkgPSAoQklUX1VMTChib290X2NwdV9kYXRhLng4Nl9waHlzX2JpdHMpIC0gMSkgJmd0OyZndDsgMzIsCiAJfTsKJiM0MzsJdTMyIHRpbWluZ19pbmZvX2xlYWYsIGFwaWNfa2h6OwomIzQzOwlib29sIHRzY19pc19yZWxpYWJsZTsKIAogCWlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9HVUVTVF9NRU1fRU5DUllQVCkgJmFtcDsmYW1wOwogCSAgICBrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9NSUdSQVRJT05fQ09OVFJPTCkpIHsKQEAgLTEwMDcsNyAmIzQzOzEwMzksNDQgQEAgc3RhdGljIHZvaWQgX19pbml0IGt2bV9pbml0X3BsYXRmb3JtKHZvaWQpCiAJCQl3cm1zcnEoTVNSX0tWTV9NSUdSQVRJT05fQ09OVFJPTCwKIAkJCSAgICAgICBLVk1fTUlHUkFUSU9OX1JFQURZKTsKIAl9Ci0Ja3ZtY2xvY2tfaW5pdCgpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBJZiBLVk0gYWR2ZXJ0aXNlcyB0aGUgZnJlcXVlbmN5IGRpcmVjdGx5IGluIENQVUlELCB1c2UgdGhhdCBpbnN0ZWFkCiYjNDM7CSAqIG9mIHJldmVyc2UtY2FsY3VsYXRpbmcgaXQgZnJvbSB0aGUgS1ZNIGNsb2NrIGRhdGEsIG9yIHdvcnNlLCB0cnlpbmcKJiM0MzsJICogdG8gY2FsaWJyYXRhdGUgdGhlIFRTQyB1c2luZyBhbiBlbXVsYXRlZCBkZXZpY2UuCiYjNDM7CSAqLwomIzQzOwl0aW1pbmdfaW5mb19sZWFmID0ga3ZtX2NwdWlkX3RpbWluZ19pbmZvX2xlYWYoKTsKJiM0MzsJaWYgKHRpbWluZ19pbmZvX2xlYWYpIHsKJiM0MzsJCWt2bV90c2Nfa2h6X2NwdWlkID0gY3B1aWRfZWF4KHRpbWluZ19pbmZvX2xlYWYpOwomIzQzOwkJaWYgKGt2bV90c2Nfa2h6X2NwdWlkKSB7CiYjNDM7CQkJeDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHogPSBrdm1fZ2V0X3RzY19raHo7CiYjNDM7CQkJeDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHogPSBrdm1fZ2V0X3RzY19raHo7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBUaGUgbGVhZiBhbHNvIGluY2x1ZGVzIHRoZSBsb2NhbCBBUElDIGJ1cy90aW1lciBmcmVxdWVuY3kuKi8KJiM0MzsJCWFwaWNfa2h6ID0gY3B1aWRfZWJ4KHRpbWluZ19pbmZvX2xlYWYpOwomIzQzOwkJaWYgKGFwaWNfa2h6KQomIzQzOwkJCWFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHooYXBpY19raHosICYjMzQ7S1ZNIGh5cGVydmlzb3ImIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUHJlZmVyIENQVUlELjB4MTYgb3ZlciBLVk0mIzM5O3MgUFYgQ1BVSUQgd2hlbiBwb3NzaWJsZSwgYXMgdGhlIGJhc2UgQ1BVCiYjNDM7CSAqIGZyZXF1ZW5jeSBpc24mIzM5O3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgdGhlIFRTQyBmcmVxdWVuY3kuCiYjNDM7CSAqLwomIzQzOwlrdm1fY3B1X2toel9jcHVpZCA9IF9fY3B1X2toel9mcm9tX2NwdWlkKCk7CiYjNDM7CWlmIChrdm1fY3B1X2toel9jcHVpZCkKJiM0MzsJCXg4Nl9pbml0Lmh5cGVyLmdldF9jcHVfa2h6ID0ga3ZtX2dldF9jcHVfa2h6OwomIzQzOwomIzQzOyAgICAgICAgLyoKJiM0MzsgICAgICAgICAqIElmIHRoZSBUU0MgY291bnRzIGF0IGEgY29uc3RhbnQgZnJlcXVlbmN5IGFjcm9zcyBQL1Qgc3RhdGVzIGFuZCBpbgomIzQzOyAgICAgICAgICogZGVlcCBDLXN0YXRlcywgdHJlYXQgdGhlIFRTQyByZWxpYWJsZSwgYXMgZ3VhcmFudGVlZCBieSBLVk0uCiYjNDM7ICAgICAgICAgKi8KJiM0MzsJdHNjX2lzX3JlbGlhYmxlID0gYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQykgJmFtcDsmYW1wOwomIzQzOwkJCSAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05PTlNUT1BfVFNDKTsKJiM0MzsJaWYgKHRzY19pc19yZWxpYWJsZSkKJiM0MzsJCXNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTsKJiM0MzsKJiM0MzsJa3ZtY2xvY2tfaW5pdCh0c2NfaXNfcmVsaWFibGUpOwogCXg4Nl9wbGF0Zm9ybS5hcGljX3Bvc3RfaW5pdCA9IGt2bV9hcGljX2luaXQ7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMgYi9hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYwppbmRleCBjYjNkMGNhMWZhMjI1YS4uODQyZjM4YzVmNmNhYWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jCkBAIC0xMiw3ICYjNDM7MTIsNiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2hhcmRpcnEuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jcHVob3RwbHVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9jbG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NldF9tZW1vcnkuaCZndDsKQEAgLTU0LDYgJiM0Mzs1Myw4IEBAIHN0YXRpYyBzdHJ1Y3QgcHZjbG9ja192c3lzY2FsbF90aW1lX2luZm8gKmh2Y2xvY2tfbWVtOwogREVGSU5FX1BFUl9DUFUoc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICosIGh2X2Nsb2NrX3Blcl9jcHUpOwogRVhQT1JUX1BFUl9DUFVfU1lNQk9MX0dQTChodl9jbG9ja19wZXJfY3B1KTsKIAomIzQzO3N0YXRpYyBib29sIGt2bWNsb2NrX3N1c3BlbmRlZDsKJiM0MzsKIC8qCiAgKiBUaGUgd2FsbGNsb2NrIGlzIHRoZSB0aW1lIG9mIGRheSB3aGVuIHdlIGJvb3RlZC4gU2luY2UgdGhlbiwgc29tZSB0aW1lIG1heQogICogaGF2ZSBlbGFwc2VkIHNpbmNlIHRoZSBoeXBlcnZpc29yIHdyb3RlIHRoZSBkYXRhLiBTbyB3ZSB0cnkgdG8gYWNjb3VudCBmb3IKQEAgLTYxLDYgJiM0Mzs2Miw3IEBAIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTF9HUEwoaHZfY2xvY2tfcGVyX2NwdSk7CiAgKi8KIHN0YXRpYyB2b2lkIGt2bV9nZXRfd2FsbGNsb2NrKHN0cnVjdCB0aW1lc3BlYzY0ICpub3cpCiB7CiYjNDM7CVdBUk5fT05fT05DRShrdm1jbG9ja19zdXNwZW5kZWQpOwogCXdybXNycShtc3Jfa3ZtX3dhbGxfY2xvY2ssIHNsb3dfdmlydF90b19waHlzKCZhbXA7d2FsbF9jbG9jaykpOwogCXByZWVtcHRfZGlzYWJsZSgpOwogCXB2Y2xvY2tfcmVhZF93YWxsY2xvY2soJmFtcDt3YWxsX2Nsb2NrLCB0aGlzX2NwdV9wdnRpKCksIG5vdyk7CkBAIC03Miw2ICYjNDM7NzQsMjUgQEAgc3RhdGljIGludCBrdm1fc2V0X3dhbGxjbG9jayhjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqbm93KQogCXJldHVybiAtRU5PREVWOwogfQogCiYjNDM7c3RhdGljIHZvaWQga3ZtX3JlZ2lzdGVyX2Nsb2NrKGNoYXIgKnR4dCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwdmNsb2NrX3ZzeXNjYWxsX3RpbWVfaW5mbyAqc3JjID0gdGhpc19jcHVfaHZjbG9jaygpOwomIzQzOwl1NjQgcGE7CiYjNDM7CiYjNDM7CWlmICghc3JjKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwYSA9IHNsb3dfdmlydF90b19waHlzKCZhbXA7c3JjLSZndDtwdnRpKSB8IDB4MDFVTEw7CiYjNDM7CXdybXNycShtc3Jfa3ZtX3N5c3RlbV90aW1lLCBwYSk7CiYjNDM7CXByX2RlYnVnKCYjMzQ7a3ZtLWNsb2NrOiBjcHUgJWQsIG1zciAlbGx4LCAlcyYjMzQ7LCBzbXBfcHJvY2Vzc29yX2lkKCksIHBhLCB0eHQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrdm1jbG9ja19kaXNhYmxlKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAobXNyX2t2bV9zeXN0ZW1fdGltZSkKJiM0MzsJCW5hdGl2ZV93cml0ZV9tc3IobXNyX2t2bV9zeXN0ZW1fdGltZSwgMCk7CiYjNDM7fQomIzQzOwogc3RhdGljIHU2NCBrdm1fY2xvY2tfcmVhZCh2b2lkKQogewogCXU2NCByZXQ7CkBAIC0xMTMsMTggJiM0MzsxMzQsNzQgQEAgc3RhdGljIG5vaW5zdHIgdTY0IGt2bV9zY2hlZF9jbG9ja19yZWFkKHZvaWQpCiAJcmV0dXJuIHB2Y2xvY2tfY2xvY2tzb3VyY2VfcmVhZF9ub3dkKHRoaXNfY3B1X3B2dGkoKSkgLSBrdm1fc2NoZWRfY2xvY2tfb2Zmc2V0OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX3NjaGVkX2Nsb2NrX2luaXQoYm9vbCBzdGFibGUpCiYjNDM7c3RhdGljIHZvaWQga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZCkKIHsKLQlpZiAoIXN0YWJsZSkKLQkJY2xlYXJfc2NoZWRfY2xvY2tfc3RhYmxlKCk7Ci0Ja3ZtX3NjaGVkX2Nsb2NrX29mZnNldCA9IGt2bV9jbG9ja19yZWFkKCk7Ci0JcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKGt2bV9zY2hlZF9jbG9ja19yZWFkKTsKJiM0MzsJLyoKJiM0MzsJICogU3RvcCBob3N0IHdyaXRlcyB0byBrdm1jbG9jayBpbW1lZGlhdGVseSBwcmlvciB0byBzdXNwZW5kL2hpYmVybmF0ZS4KJiM0MzsJICogSWYgdGhlIHN5c3RlbSBpcyBoaWJlcm5hdGluZywgdGhlbiBrdm1jbG9jayB3aWxsIGxpa2VseSByZXNpZGUgYXQgYQomIzQzOwkgKiBkaWZmZXJlbnQgcGh5c2ljYWwgYWRkcmVzcyB3aGVuIHRoZSBzeXN0ZW0gYXdha2VucywgYW5kIGhvc3Qgd3JpdGVzCiYjNDM7CSAqIHRvIHRoZSBvbGQgYWRkcmVzcyBwcmlvciB0byByZWNvbmZpZ3VyaW5nIGt2bWNsb2NrIHdvdWxkIGNsb2JiZXIKJiM0MzsJICogcmFuZG9tIG1lbW9yeS4KJiM0MzsJICovCiYjNDM7CWt2bWNsb2NrX3N1c3BlbmRlZCA9IHRydWU7CiYjNDM7CWt2bWNsb2NrX2Rpc2FibGUoKTsKJiM0Mzt9CiAKLQlwcl9pbmZvKCYjMzQ7a3ZtLWNsb2NrOiB1c2luZyBzY2hlZCBvZmZzZXQgb2YgJWxsdSBjeWNsZXMmIzM0OywKLQkJa3ZtX3NjaGVkX2Nsb2NrX29mZnNldCk7CiYjNDM7I2lmZGVmIENPTkZJR19TTVAKJiM0MztzdGF0aWMgdm9pZCBrdm1fc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrKHZvaWQpCiYjNDM7ewomIzQzOwlrdm1fcmVnaXN0ZXJfY2xvY2soJiMzNDtzZWNvbmRhcnkgY3B1LCBzdGFydHVwJiMzNDspOwomIzQzO30KJiM0MzsjZW5kaWYKIAotCUJVSUxEX0JVR19PTihzaXplb2Yoa3ZtX3NjaGVkX2Nsb2NrX29mZnNldCkgJmd0OwotCQlzaXplb2YoKChzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqKU5VTEwpLSZndDtzeXN0ZW1fdGltZSkpOwomIzQzO3N0YXRpYyB2b2lkIGt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpCiYjNDM7ewomIzQzOwlrdm1jbG9ja19zdXNwZW5kZWQgPSBmYWxzZTsKJiM0MzsJa3ZtX3JlZ2lzdGVyX2Nsb2NrKCYjMzQ7cHJpbWFyeSBjcHUsIHNjaGVkX2Nsb2NrIHJlc3VtZSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQga3ZtY2xvY2tfc3VzcGVuZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQomIzQzO3sKJiM0MzsJa3ZtY2xvY2tfc3VzcGVuZGVkID0gdHJ1ZTsKJiM0MzsJa3ZtY2xvY2tfZGlzYWJsZSgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrdm1jbG9ja19yZXN1bWUoc3RydWN0IGNsb2Nrc291cmNlICpjcykKJiM0Mzt7CiYjNDM7CWt2bWNsb2NrX3N1c3BlbmRlZCA9IGZhbHNlOwomIzQzOwlrdm1fcmVnaXN0ZXJfY2xvY2soJiMzNDtwcmltYXJ5IGNwdSwgY2xvY2tzb3VyY2UgcmVzdW1lJiMzNDspOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGt2bWNsb2NrX2NwdV9hY3Rpb24oZW51bSBrdm1fZ3Vlc3RfY3B1X2FjdGlvbiBhY3Rpb24pCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGFjdGlvbikgewomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSBCU1AmIzM5O3MgY2xvY2sgaXMgbWFuYWdlZCB2aWEgY2xvY2tzb3VyY2Ugc3VzcGVuZC9yZXN1bWUsCiYjNDM7CQkgKiB0byBlbnN1cmUgaXQmIzM5O3MgZW5hYmxlZC9kaXNhYmxlZCB3aGVuIHRpbWVrZWVwaW5nIG5lZWRzIGl0CiYjNDM7CQkgKiB0byBiZSwgZS5nLiBiZWZvcmUgcmVhZGluZyB3YWxsY2xvY2sgKHdoaWNoIHVzZXMga3ZtY2xvY2spLgomIzQzOwkJICovCiYjNDM7CWNhc2UgS1ZNX0dVRVNUX0JTUF9TVVNQRU5EOgomIzQzOwljYXNlIEtWTV9HVUVTVF9CU1BfUkVTVU1FOgomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgS1ZNX0dVRVNUX0FQX09OTElORToKJiM0MzsJCS8qCiYjNDM7CQkgKiBTZWNvbmRhcnkgQ1BVcyB1c2UgYSBkZWRpY2F0ZWQgaG9vayB0byBlbmFibGUga3ZtY2xvY2sgZWFybHkKJiM0MzsJCSAqIGR1cmluZyBicmluZ3VwLCB0aGVyZSYjMzk7cyBub3RoaW5nIHRvIGJlIGRvbmUgZHVyaW5nIENQVSBvbmxpbmUKJiM0MzsJCSAqICh3aGljaCBydW5zIGF0IENQVUhQX0FQX09OTElORV9EWU4pLiAgV2hlbiBrdm1jbG9jayBpcyBiZWluZwomIzQzOwkJICogdXNlZCBhcyBzY2hlZF9jbG9jaywga3ZtY2xvY2sgbXVzdCBiZSBlbmFibGVkICp2ZXJ5KiBlYXJseSwKJiM0MzsJCSAqIGFuZCBldmVuIHdoZW4ga3ZtY2xvY2sgaXMgJiMzNDtvbmx5JiMzNDsgYmVpbmcgdXNlZCBmb3IgdGhlIG1haW4KJiM0MzsJCSAqIGNsb2Nrc291cmNlLCBpdCBzdGlsbCBuZWVkcyB0byBiZSBlbmFibGVkIGxvbmcgYmVmb3JlIHRoZQomIzQzOwkJICogZHluYW1pYyBDUFVIUCBjYWxscyBhcmUgbWFkZS4KJiM0MzsJCSAqLwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgS1ZNX0dVRVNUX0FQX09GRkxJTkU6CiYjNDM7CWNhc2UgS1ZNX0dVRVNUX1NIVVRET1dOOgomIzQzOwkJa3ZtY2xvY2tfZGlzYWJsZSgpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlXQVJOX09OX09OQ0UoMSk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQogfQogCiAvKgpAQCAtMTM2LDkgJiM0MzsyMTMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3NjaGVkX2Nsb2NrX2luaXQoYm9vbCBzdGFibGUpCiAgKiBwb2xsIG9mIGd1ZXN0cyBjYW4gYmUgcnVubmluZyBhbmQgdHJvdWJsZSBlYWNoIG90aGVyLiBTbyB3ZSBwcmVzZXQKICAqIGxwaiBoZXJlCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9nZXRfdHNjX2toeih2b2lkKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGt2bWNsb2NrX2dldF90c2Nfa2h6KHZvaWQpCiB7Ci0Jc2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfS05PV05fRlJFUSk7CiAJcmV0dXJuIHB2Y2xvY2tfdHNjX2toeih0aGlzX2NwdV9wdnRpKCkpOwogfQogCkBAIC0xNDcsNyAmIzQzOzIyMyw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrdm1fZ2V0X3ByZXNldF9scGoodm9pZCkKIAl1bnNpZ25lZCBsb25nIGtoejsKIAl1NjQgbHBqOwogCi0Ja2h6ID0ga3ZtX2dldF90c2Nfa2h6KCk7CiYjNDM7CWtoeiA9IGt2bWNsb2NrX2dldF90c2Nfa2h6KCk7CiAKIAlscGogPSAoKHU2NClraHogKiAxMDAwKTsKIAlkb19kaXYobHBqLCBIWik7CkBAIC0xODUsNDMgJiM0MzsyNjEsMTAgQEAgc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBrdm1fY2xvY2sgPSB7CiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogCS5pZAkJPSBDU0lEX1g4Nl9LVk1fQ0xLLAogCS5lbmFibGUJCT0ga3ZtX2NzX2VuYWJsZSwKJiM0MzsJLnN1c3BlbmQJPSBrdm1jbG9ja19zdXNwZW5kLAomIzQzOwkucmVzdW1lCQk9IGt2bWNsb2NrX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyB2b2lkIGt2bV9yZWdpc3Rlcl9jbG9jayhjaGFyICp0eHQpCi17Ci0Jc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICpzcmMgPSB0aGlzX2NwdV9odmNsb2NrKCk7Ci0JdTY0IHBhOwotCi0JaWYgKCFzcmMpCi0JCXJldHVybjsKLQotCXBhID0gc2xvd192aXJ0X3RvX3BoeXMoJmFtcDtzcmMtJmd0O3B2dGkpIHwgMHgwMVVMTDsKLQl3cm1zcnEobXNyX2t2bV9zeXN0ZW1fdGltZSwgcGEpOwotCXByX2RlYnVnKCYjMzQ7a3ZtLWNsb2NrOiBjcHUgJWQsIG1zciAlbGx4LCAlcyYjMzQ7LCBzbXBfcHJvY2Vzc29yX2lkKCksIHBhLCB0eHQpOwotfQotCi1zdGF0aWMgdm9pZCBrdm1fc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKQotewotfQotCi1zdGF0aWMgdm9pZCBrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKQotewotCWt2bV9yZWdpc3Rlcl9jbG9jaygmIzM0O3ByaW1hcnkgY3B1IGNsb2NrLCByZXN1bWUmIzM0Oyk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLXN0YXRpYyB2b2lkIGt2bV9zZXR1cF9zZWNvbmRhcnlfY2xvY2sodm9pZCkKLXsKLQlrdm1fcmVnaXN0ZXJfY2xvY2soJiMzNDtzZWNvbmRhcnkgY3B1IGNsb2NrJiMzNDspOwotfQotI2VuZGlmCi0KLXZvaWQga3ZtY2xvY2tfZGlzYWJsZSh2b2lkKQotewotCWlmIChtc3Jfa3ZtX3N5c3RlbV90aW1lKQotCQluYXRpdmVfd3JpdGVfbXNyKG1zcl9rdm1fc3lzdGVtX3RpbWUsIDApOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQga3ZtY2xvY2tfaW5pdF9tZW0odm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIG5jcHVzOwpAQCAtMzA4LDkgJiM0MzszNTEsMzUgQEAgc3RhdGljIGludCBrdm1jbG9ja19zZXR1cF9wZXJjcHUodW5zaWduZWQgaW50IGNwdSkKIAlyZXR1cm4gcCA/IDAgOiAtRU5PTUVNOwogfQogCi12b2lkIF9faW5pdCBrdm1jbG9ja19pbml0KHZvaWQpCiYjNDM7c3RhdGljIF9faW5pdCB2b2lkIGt2bV9zY2hlZF9jbG9ja19pbml0KGJvb2wgc3RhYmxlKQogewotCXU4IGZsYWdzOwomIzQzOwkvKiBFbnN1cmUgdGhlIG9mZnNldCBpcyBjb25maWd1cmVkIGJlZm9yZSBtYWtpbmcga3ZtY2xvY2sgdmlzaWJsZSEgKi8KJiM0MzsJa3ZtX3NjaGVkX2Nsb2NrX29mZnNldCA9IGt2bV9jbG9ja19yZWFkKCk7CiYjNDM7CiYjNDM7CWlmIChfX3BhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayhrdm1fc2NoZWRfY2xvY2tfcmVhZCwgc3RhYmxlLAomIzQzOwkJCQkgICAgICAga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUsCiYjNDM7CQkJCSAgICAgICBrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBCU1AmIzM5O3MgY2xvY2sgaXMgbWFuYWdlZCB2aWEgZGVkaWNhdGVkIHNjaGVkX2Nsb2NrIHNhdmUvcmVzdG9yZQomIzQzOwkgKiBob29rcyB3aGVuIGt2bWNsb2NrIGlzIHVzZWQgYXMgc2NoZWRfY2xvY2ssIGFzIHNjaGVkX2Nsb2NrIG5lZWRzIHRvCiYjNDM7CSAqIGJlIGtlcHQgYWxpdmUgdW50aWwgdGhlIHZlcnkgZW5kIG9mIHN1c3BlbmQgZW50cnksIGFuZCByZXN0b3JlZCBhcwomIzQzOwkgKiBxdWlja2x5IGFzIHBvc3NpYmxlIGFmdGVyIHJlc3VtZS4KJiM0MzsJICovCiYjNDM7CWt2bV9jbG9jay5zdXNwZW5kID0gTlVMTDsKJiM0MzsJa3ZtX2Nsb2NrLnJlc3VtZSA9IE5VTEw7CiYjNDM7CiYjNDM7CXByX2luZm8oJiMzNDtrdm0tY2xvY2s6IHVzaW5nIHNjaGVkIG9mZnNldCBvZiAlbGx1IGN5Y2xlcyYjMzQ7LAomIzQzOwkJa3ZtX3NjaGVkX2Nsb2NrX29mZnNldCk7CiYjNDM7CiYjNDM7CUJVSUxEX0JVR19PTihzaXplb2Yoa3ZtX3NjaGVkX2Nsb2NrX29mZnNldCkgJmd0OwomIzQzOwkJc2l6ZW9mKCgoc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gKilOVUxMKS0mZ3Q7c3lzdGVtX3RpbWUpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX2luaXQga3ZtY2xvY2tfaW5pdChib29sIHByZWZlcl90c2MpCiYjNDM7ewomIzQzOwlib29sIHN0YWJsZSA9IGZhbHNlOwogCiAJaWYgKCFrdm1fcGFyYV9hdmFpbGFibGUoKSB8fCAha3ZtY2xvY2spCiAJCXJldHVybjsKQEAgLTMzNCwzOCAmIzQzOzQwMyw0MSBAQCB2b2lkIF9faW5pdCBrdm1jbG9ja19pbml0KHZvaWQpCiAJCW1zcl9rdm1fc3lzdGVtX3RpbWUsIG1zcl9rdm1fd2FsbF9jbG9jayk7CiAKIAl0aGlzX2NwdV93cml0ZShodl9jbG9ja19wZXJfY3B1LCAmYW1wO2h2X2Nsb2NrX2Jvb3RbMF0pOwotCWt2bV9yZWdpc3Rlcl9jbG9jaygmIzM0O3ByaW1hcnkgY3B1IGNsb2NrJiMzNDspOwomIzQzOwlrdm1fcmVnaXN0ZXJfY2xvY2soJiMzNDtwcmltYXJ5IGNwdSwgb25saW5lJiMzNDspOwogCXB2Y2xvY2tfc2V0X3B2dGlfY3B1MF92YShodl9jbG9ja19ib290KTsKIAotCWlmIChrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9DTE9DS1NPVVJDRV9TVEFCTEVfQklUKSkKJiM0MzsJaWYgKGt2bV9wYXJhX2hhc19mZWF0dXJlKEtWTV9GRUFUVVJFX0NMT0NLU09VUkNFX1NUQUJMRV9CSVQpKSB7CiAJCXB2Y2xvY2tfc2V0X2ZsYWdzKFBWQ0xPQ0tfVFNDX1NUQUJMRV9CSVQpOwogCi0JZmxhZ3MgPSBwdmNsb2NrX3JlYWRfZmxhZ3MoJmFtcDtodl9jbG9ja19ib290WzBdLnB2dGkpOwotCWt2bV9zY2hlZF9jbG9ja19pbml0KGZsYWdzICZhbXA7IFBWQ0xPQ0tfVFNDX1NUQUJMRV9CSVQpOwomIzQzOwkJLyoKJiM0MzsJCSAqIENoZWNrIGlmIHRoZSBjbG9jayBpcyBzdGFibGUgKmFmdGVyKiBtYXJraW5nIFRTQ19TVEFCTEUgYXMgYQomIzQzOwkJICogdmFsaWQgZmxhZy4KJiM0MzsJCSAqLwomIzQzOwkJc3RhYmxlID0gcHZjbG9ja19yZWFkX2ZsYWdzKCZhbXA7aHZfY2xvY2tfYm9vdFswXS5wdnRpKSAmYW1wOwomIzQzOwkJCSBQVkNMT0NLX1RTQ19TVEFCTEVfQklUOwomIzQzOwl9CiAKLQl4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX3RzYyA9IGt2bV9nZXRfdHNjX2toejsKLQl4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX2NwdSA9IGt2bV9nZXRfdHNjX2toejsKJiM0MzsKJiM0MzsJaWYgKCF4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeikKJiM0MzsJCXg4Nl9pbml0Lmh5cGVyLmdldF90c2Nfa2h6ID0ga3ZtY2xvY2tfZ2V0X3RzY19raHo7CiYjNDM7CWlmICgheDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHopCiYjNDM7CQl4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeiA9IGt2bWNsb2NrX2dldF90c2Nfa2h6OwogCXg4Nl9wbGF0Zm9ybS5nZXRfd2FsbGNsb2NrID0ga3ZtX2dldF93YWxsY2xvY2s7CiAJeDg2X3BsYXRmb3JtLnNldF93YWxsY2xvY2sgPSBrdm1fc2V0X3dhbGxjbG9jazsKLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKJiM0MzsjaWZkZWYgQ09ORklHX1NNUAogCXg4Nl9jcHVpbml0LmVhcmx5X3BlcmNwdV9jbG9ja19pbml0ID0ga3ZtX3NldHVwX3NlY29uZGFyeV9jbG9jazsKICNlbmRpZgotCXg4Nl9wbGF0Zm9ybS5zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlID0ga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGU7Ci0JeDg2X3BsYXRmb3JtLnJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUgPSBrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZTsKIAlrdm1fZ2V0X3ByZXNldF9scGooKTsKIAogCS8qCi0JICogWDg2X0ZFQVRVUkVfTk9OU1RPUF9UU0MgaXMgVFNDIHJ1bnMgYXQgY29uc3RhbnQgcmF0ZQotCSAqIHdpdGggUC9UIHN0YXRlcyBhbmQgZG9lcyBub3Qgc3RvcCBpbiBkZWVwIEMtc3RhdGVzLgotCSAqCi0JICogSW52YXJpYW50IFRTQyBleHBvc2VkIGJ5IGhvc3QgbWVhbnMga3ZtY2xvY2sgaXMgbm90IG5lY2Vzc2FyeToKLQkgKiBjYW4gdXNlIFRTQyBhcyBjbG9ja3NvdXJjZS4KLQkgKgomIzQzOwkgKiBJZiBUU0MgaXMgcHJlZmVycmVkIG92ZXIga3ZtbG9jaywgZHJvcCBrdm1jbG9jayYjMzk7cyByYXRpbmcgc28gdGhhdCBUU0MKJiM0MzsJICogaXMgY2hvc2VuIGFzIHRoZSBjbG9ja3NvdXJjZSAoYnV0IHN0aWxsIHJlZ2lzdGVyIGt2bWNsb2NrIGluIGNhc2UKJiM0MzsJICogdGhlIGtlcm5lbCBkb2VzbiYjMzk7dCB3YW50IHRvIHVzZSBUU0MgZm9yIHdoYXRldmVyIHJlYXNvbikuCiAJICovCi0JaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpICZhbXA7JmFtcDsKLQkgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05PTlNUT1BfVFNDKSAmYW1wOyZhbXA7Ci0JICAgICFjaGVja190c2NfdW5zdGFibGUoKSkKJiM0MzsJaWYgKHByZWZlcl90c2MpCiAJCWt2bV9jbG9jay5yYXRpbmcgPSAyOTk7CiYjNDM7CWVsc2UKJiM0MzsJCWt2bV9zY2hlZF9jbG9ja19pbml0KHN0YWJsZSk7CiAKIAljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmYW1wO2t2bV9jbG9jaywgTlNFQ19QRVJfU0VDKTsKIAlwdl9pbmZvLm5hbWUgPSAmIzM0O0tWTSYjMzQ7OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3B2Y2xvY2suYyBiL2FyY2gveDg2L2tlcm5lbC9wdmNsb2NrLmMKaW5kZXggYjNmODEzNzljMmZjMDYuLjhkMDk4ODQxYTIyNWY2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHZjbG9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9wdmNsb2NrLmMKQEAgLTE2LDExICYjNDM7MTYsMTIgQEAKICNpbmNsdWRlICZsdDthc20vcHZjbG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS92Z3RvZC5oJmd0OwogCi1zdGF0aWMgdTggdmFsaWRfZmxhZ3MgX19yZWFkX21vc3RseSA9IDA7Ci1zdGF0aWMgc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICpwdnRpX2NwdTBfdmEgX19yZWFkX21vc3RseTsKJiM0MztzdGF0aWMgdTggdmFsaWRfZmxhZ3MgX19yb19hZnRlcl9pbml0ID0gMDsKJiM0MztzdGF0aWMgc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICpwdnRpX2NwdTBfdmEgX19yb19hZnRlcl9pbml0OwogCi12b2lkIHB2Y2xvY2tfc2V0X2ZsYWdzKHU4IGZsYWdzKQomIzQzO3ZvaWQgX19pbml0IHB2Y2xvY2tfc2V0X2ZsYWdzKHU4IGZsYWdzKQogewomIzQzOwlXQVJOX09OKHZhbGlkX2ZsYWdzKTsKIAl2YWxpZF9mbGFncyA9IGZsYWdzOwogfQogCkBAIC0xNTMsNyAmIzQzOzE1NCw3IEBAIHZvaWQgcHZjbG9ja19yZWFkX3dhbGxjbG9jayhzdHJ1Y3QgcHZjbG9ja193YWxsX2Nsb2NrICp3YWxsX2Nsb2NrLAogCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjNjQodHMsIG5vdy50dl9zZWMsIG5vdy50dl9uc2VjKTsKIH0KIAotdm9pZCBwdmNsb2NrX3NldF9wdnRpX2NwdTBfdmEoc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICpwdnRpKQomIzQzO3ZvaWQgX19pbml0IHB2Y2xvY2tfc2V0X3B2dGlfY3B1MF92YShzdHJ1Y3QgcHZjbG9ja192c3lzY2FsbF90aW1lX2luZm8gKnB2dGkpCiB7CiAJV0FSTl9PTih2Y2xvY2tfd2FzX3VzZWQoVkRTT19DTE9DS01PREVfUFZDTE9DSykpOwogCXB2dGlfY3B1MF92YSA9IHB2dGk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKaW5kZXggY2UxMGFlNGIyOThiNzkuLjU2NGJlNGZhYTVhMGJiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL3RzYy5jCkBAIC0zNCw2ICYjNDM7MzQsNyBAQAogI2luY2x1ZGUgJmx0O2FzbS90b3BvbG9neS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS91di91di5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9zZXYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL3RkeC5oJmd0OwogCiB1bnNpZ25lZCBpbnQgX19yZWFkX21vc3RseSBjcHVfa2h6OwkvKiBUU0MgY2xvY2tzIC8gdXNlYywgbm90IHVzZWQgaGVyZSAqLwogRVhQT1JUX1NZTUJPTChjcHVfa2h6KTsKQEAgLTI3OSwxNSAmIzQzOzI4MCwyOCBAQCBib29sIHVzaW5nX25hdGl2ZV9zY2hlZF9jbG9jayh2b2lkKQogCXJldHVybiBzdGF0aWNfY2FsbF9xdWVyeShwdl9zY2hlZF9jbG9jaykgPT0gbmF0aXZlX3NjaGVkX2Nsb2NrOwogfQogCi12b2lkIHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh1NjQgKCpmdW5jKSh2b2lkKSkKJiM0MztpbnQgX19pbml0IF9fcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKHU2NCAoKmZ1bmMpKHZvaWQpLCBib29sIHN0YWJsZSwKJiM0MzsJCQkJICAgICAgdm9pZCAoKnNhdmUpKHZvaWQpLCB2b2lkICgqcmVzdG9yZSkodm9pZCkpCiB7CiYjNDM7CS8qCiYjNDM7CSAqIERvbiYjMzk7dCByZXBsYWNlIFRTQyB3aXRoIGEgUFYgY2xvY2sgd2hlbiBydW5uaW5nIGFzIGEgQ29DbyBndWVzdCBhbmQKJiM0MzsJICogdGhlIFRTQyBpcyBzZWN1cmUvdHJ1c3RlZDsgUFYgY2xvY2tzIGFyZSBlbXVsYXRlZCBieSB0aGUgaHlwZXJ2aXNvciwKJiM0MzsJICogd2hpY2ggaXNuJiMzOTt0IGluIHRoZSBndWVzdCYjMzk7cyBUQ0IuCiYjNDM7CSAqLwomIzQzOwlpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfR1VFU1RfU05QX1NFQ1VSRV9UU0MpIHx8CiYjNDM7CSAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSkKJiM0MzsJCXJldHVybiAtRVBFUk07CiYjNDM7CiYjNDM7CWlmICghc3RhYmxlKQomIzQzOwkJY2xlYXJfc2NoZWRfY2xvY2tfc3RhYmxlKCk7CiYjNDM7CiAJc3RhdGljX2NhbGxfdXBkYXRlKHB2X3NjaGVkX2Nsb2NrLCBmdW5jKTsKJiM0MzsJeDg2X3BsYXRmb3JtLnNhdmVfc2NoZWRfY2xvY2tfc3RhdGUgPSBzYXZlOwomIzQzOwl4ODZfcGxhdGZvcm0ucmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSA9IHJlc3RvcmU7CiYjNDM7CXJldHVybiAwOwogfQogI2Vsc2UKIHU2NCBzY2hlZF9jbG9ja19ub2luc3RyKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsaWFzKCYjMzQ7bmF0aXZlX3NjaGVkX2Nsb2NrJiMzNDspKSk7Ci0KLWJvb2wgdXNpbmdfbmF0aXZlX3NjaGVkX2Nsb2NrKHZvaWQpIHsgcmV0dXJuIHRydWU7IH0KLXZvaWQgcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKHU2NCAoKmZ1bmMpKHZvaWQpKSB7IH0KICNlbmRpZgogCiBub3RyYWNlIHU2NCBzY2hlZF9jbG9jayh2b2lkKQpAQCAtNjQ1LDQ2ICYjNDM7NjU5LDY4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHF1aWNrX3BpdF9jYWxpYnJhdGUodm9pZCkKIAlyZXR1cm4gZGVsdGE7CiB9CiAKJiM0MztpbnQgY3B1aWRfZ2V0X3RzY19pbmZvKHN0cnVjdCBjcHVpZF90c2NfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBlY3hfaHosIGVkeDsKJiM0MzsKJiM0MzsJaWYgKGJvb3RfY3B1X2RhdGEuY3B1aWRfbGV2ZWwgJmx0OyBDUFVJRF9MRUFGX1RTQykKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwomIzQzOwkvKiBDUFVJRCAxNUggVFNDL0NyeXN0YWwgcmF0aW8sIHBsdXMgb3B0aW9uYWxseSBDcnlzdGFsIEh6ICovCiYjNDM7CWNwdWlkKENQVUlEX0xFQUZfVFNDLCAmYW1wO2luZm8tJmd0O2Rlbm9taW5hdG9yLCAmYW1wO2luZm8tJmd0O251bWVyYXRvciwgJmFtcDtlY3hfaHosICZhbXA7ZWR4KTsKJiM0MzsKJiM0MzsJaWYgKCFpbmZvLSZndDtkZW5vbWluYXRvciB8fCAhaW5mby0mZ3Q7bnVtZXJhdG9yKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE5vdGU6IHNvbWUgQ1BVcyBwcm92aWRlIHRoZSBtdWx0aXBsaWVyIGluZm9ybWF0aW9uLCBidXQgbm90IHRoZSBjb3JlCiYjNDM7CSAqIGNyeXN0YWwgZnJlcXVlbmN5LiAgVGhlIG11bHRpcGxpZXIgaW5mb3JtYXRpb24gaXMgc3RpbGwgdXNlZnVsIGZvcgomIzQzOwkgKiBzdWNoIENQVXMsIGFzIHRoZSBjcnlzdGFsIGZyZXF1ZW5jeSBjYW4gYmUgZ2xlYW5lZCBmcm9tIENQVUlELjB4MTYuCiYjNDM7CSAqLwomIzQzOwlpbmZvLSZndDtjcnlzdGFsX2toeiA9IGVjeF9oeiAvIDEwMDA7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mzt1bnNpZ25lZCBpbnQgX19jcHVfa2h6X2Zyb21fY3B1aWQodm9pZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBlYXhfYmFzZV9taHosIGVieCwgZWN4LCBlZHg7CiYjNDM7CiYjNDM7CWlmIChib290X2NwdV9kYXRhLmNwdWlkX2xldmVsICZsdDsgQ1BVSURfTEVBRl9GUkVRKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWNwdWlkKENQVUlEX0xFQUZfRlJFUSwgJmFtcDtlYXhfYmFzZV9taHosICZhbXA7ZWJ4LCAmYW1wO2VjeCwgJmFtcDtlZHgpOwomIzQzOwomIzQzOwlyZXR1cm4gZWF4X2Jhc2VfbWh6ICogMTAwMDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIG5hdGl2ZV9jYWxpYnJhdGVfdHNjIC0gZGV0ZXJtaW5lIFRTQyBmcmVxdWVuY3kKICAqIERldGVybWluZSBUU0MgZnJlcXVlbmN5IHZpYSBDUFVJRCwgZWxzZSByZXR1cm4gMC4KICAqLwotdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX3RzYyh2b2lkKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfdHNjKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGVheF9kZW5vbWluYXRvciwgZWJ4X251bWVyYXRvciwgZWN4X2h6LCBlZHg7Ci0JdW5zaWduZWQgaW50IGNyeXN0YWxfa2h6OwomIzQzOwlzdHJ1Y3QgY3B1aWRfdHNjX2luZm8gaW5mbzsKIAogCWlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoYm9vdF9jcHVfZGF0YS5jcHVpZF9sZXZlbCAmbHQ7IENQVUlEX0xFQUZfVFNDKQomIzQzOwlpZiAoY3B1aWRfZ2V0X3RzY19pbmZvKCZhbXA7aW5mbykpCiAJCXJldHVybiAwOwogCi0JZWF4X2Rlbm9taW5hdG9yID0gZWJ4X251bWVyYXRvciA9IGVjeF9oeiA9IGVkeCA9IDA7Ci0KLQkvKiBDUFVJRCAxNUggVFNDL0NyeXN0YWwgcmF0aW8sIHBsdXMgb3B0aW9uYWxseSBDcnlzdGFsIEh6ICovCi0JY3B1aWQoQ1BVSURfTEVBRl9UU0MsICZhbXA7ZWF4X2Rlbm9taW5hdG9yLCAmYW1wO2VieF9udW1lcmF0b3IsICZhbXA7ZWN4X2h6LCAmYW1wO2VkeCk7Ci0KLQlpZiAoZWJ4X251bWVyYXRvciA9PSAwIHx8IGVheF9kZW5vbWluYXRvciA9PSAwKQotCQlyZXR1cm4gMDsKLQotCWNyeXN0YWxfa2h6ID0gZWN4X2h6IC8gMTAwMDsKLQogCS8qCiAJICogRGVudmVydG9uIFNvQ3MgZG9uJiMzOTt0IHJlcG9ydCBjcnlzdGFsIGNsb2NrLCBhbmQgYWxzbyBkb24mIzM5O3Qgc3VwcG9ydAogCSAqIENQVUlEX0xFQUZfRlJFUSBmb3IgdGhlIGNhbGN1bGF0aW9uIGJlbG93LCBzbyBoYXJkY29kZSB0aGUgMjVNSHoKIAkgKiBjcnlzdGFsIGNsb2NrLgogCSAqLwotCWlmIChjcnlzdGFsX2toeiA9PSAwICZhbXA7JmFtcDsKLQkJCWJvb3RfY3B1X2RhdGEueDg2X3ZmbSA9PSBJTlRFTF9BVE9NX0dPTERNT05UX0QpCi0JCWNyeXN0YWxfa2h6ID0gMjUwMDA7CiYjNDM7CWlmICghaW5mby5jcnlzdGFsX2toeiAmYW1wOyZhbXA7IGJvb3RfY3B1X2RhdGEueDg2X3ZmbSA9PSBJTlRFTF9BVE9NX0dPTERNT05UX0QpCiYjNDM7CQlpbmZvLmNyeXN0YWxfa2h6ID0gMjUwMDA7CiAKIAkvKgogCSAqIFRTQyBmcmVxdWVuY3kgcmVwb3J0ZWQgZGlyZWN0bHkgYnkgQ1BVSUQgaXMgYSAmIzM0O2hhcmR3YXJlIHJlcG9ydGVkJiMzNDsKIAkgKiBmcmVxdWVuY3kgYW5kIGlzIHRoZSBtb3N0IGFjY3VyYXRlIG9uZSBzbyBmYXIgd2UgaGF2ZS4gVGhpcwogCSAqIGlzIGNvbnNpZGVyZWQgYSBrbm93biBmcmVxdWVuY3kuCiAJICovCi0JaWYgKGNyeXN0YWxfa2h6ICE9IDApCiYjNDM7CWlmIChpbmZvLmNyeXN0YWxfa2h6KQogCQlzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKTsKIAogCS8qCkBAIC02OTIsMTUgJiM0Mzs3MjgsMTAgQEAgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX3RzYyh2b2lkKQogCSAqIGNsb2NrLCBidXQgd2UgY2FuIGVhc2lseSBjYWxjdWxhdGUgaXQgdG8gYSBoaWdoIGRlZ3JlZSBvZiBhY2N1cmFjeQogCSAqIGJ5IGNvbnNpZGVyaW5nIHRoZSBjcnlzdGFsIHJhdGlvIGFuZCB0aGUgQ1BVIHNwZWVkLgogCSAqLwotCWlmIChjcnlzdGFsX2toeiA9PSAwICZhbXA7JmFtcDsgYm9vdF9jcHVfZGF0YS5jcHVpZF9sZXZlbCAmZ3Q7PSBDUFVJRF9MRUFGX0ZSRVEpIHsKLQkJdW5zaWduZWQgaW50IGVheF9iYXNlX21oeiwgZWJ4LCBlY3gsIGVkeDsKJiM0MzsJaWYgKCFpbmZvLmNyeXN0YWxfa2h6KQomIzQzOwkJaW5mby5jcnlzdGFsX2toeiA9IF9fY3B1X2toel9mcm9tX2NwdWlkKCkgKiBpbmZvLmRlbm9taW5hdG9yIC8gaW5mby5udW1lcmF0b3I7CiAKLQkJY3B1aWQoQ1BVSURfTEVBRl9GUkVRLCAmYW1wO2VheF9iYXNlX21oeiwgJmFtcDtlYngsICZhbXA7ZWN4LCAmYW1wO2VkeCk7Ci0JCWNyeXN0YWxfa2h6ID0gZWF4X2Jhc2VfbWh6ICogMTAwMCAqCi0JCQllYXhfZGVub21pbmF0b3IgLyBlYnhfbnVtZXJhdG9yOwotCX0KLQotCWlmIChjcnlzdGFsX2toeiA9PSAwKQomIzQzOwlpZiAoIWluZm8uY3J5c3RhbF9raHopCiAJCXJldHVybiAwOwogCiAJLyoKQEAgLTcxMCw0MSAmIzQzOzc0MSwzMCBAQCB1bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfdHNjKHZvaWQpCiAJaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZmbSA9PSBJTlRFTF9BVE9NX0dPTERNT05UKQogCQlzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7CiAKLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKIAkvKgogCSAqIFRoZSBsb2NhbCBBUElDIGFwcGVhcnMgdG8gYmUgZmVkIGJ5IHRoZSBjb3JlIGNyeXN0YWwgY2xvY2sKIAkgKiAod2hpY2ggc291bmRzIGVudGlyZWx5IHNlbnNpYmxlKS4gV2UgY2FuIHNldCB0aGUgZ2xvYmFsCiAJICogbGFwaWNfdGltZXJfcGVyaW9kIGhlcmUgdG8gYXZvaWQgaGF2aW5nIHRvIGNhbGlicmF0ZSB0aGUgQVBJQwogCSAqIHRpbWVyIGxhdGVyLgogCSAqLwotCWxhcGljX3RpbWVyX3BlcmlvZCA9IGNyeXN0YWxfa2h6ICogMTAwMCAvIEhaOwotI2VuZGlmCiYjNDM7CWFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHooaW5mby5jcnlzdGFsX2toeiwgJiMzNDtDUFVJRCAweDE1LzB4MTYmIzM0Oyk7CiAKLQlyZXR1cm4gY3J5c3RhbF9raHogKiBlYnhfbnVtZXJhdG9yIC8gZWF4X2Rlbm9taW5hdG9yOwomIzQzOwlyZXR1cm4gaW5mby5jcnlzdGFsX2toeiAqIGluZm8ubnVtZXJhdG9yIC8gaW5mby5kZW5vbWluYXRvcjsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2toel9mcm9tX2NwdWlkKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGVheF9iYXNlX21oeiwgZWJ4X21heF9taHosIGVjeF9idXNfbWh6LCBlZHg7Ci0KIAlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwpCiAJCXJldHVybiAwOwogCi0JaWYgKGJvb3RfY3B1X2RhdGEuY3B1aWRfbGV2ZWwgJmx0OyBDUFVJRF9MRUFGX0ZSRVEpCi0JCXJldHVybiAwOwotCi0JZWF4X2Jhc2VfbWh6ID0gZWJ4X21heF9taHogPSBlY3hfYnVzX21oeiA9IGVkeCA9IDA7Ci0KLQljcHVpZChDUFVJRF9MRUFGX0ZSRVEsICZhbXA7ZWF4X2Jhc2VfbWh6LCAmYW1wO2VieF9tYXhfbWh6LCAmYW1wO2VjeF9idXNfbWh6LCAmYW1wO2VkeCk7Ci0KLQlyZXR1cm4gZWF4X2Jhc2VfbWh6ICogMTAwMDsKJiM0MzsJcmV0dXJuIF9fY3B1X2toel9mcm9tX2NwdWlkKCk7CiB9CiAKIC8qCiAgKiBjYWxpYnJhdGUgY3B1IHVzaW5nIHBpdCwgaHBldCwgYW5kIHB0aW1lciBtZXRob2RzLiBUaGV5IGFyZSBhdmFpbGFibGUKICAqIGxhdGVyIGluIGJvb3QgYWZ0ZXIgYWNwaSBpcyBpbml0aWFsaXplZC4KICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcGl0X2hwZXRfcHRpbWVyX2NhbGlicmF0ZV9jcHUodm9pZCkKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX2NwdV9sYXRlKHZvaWQpCiB7CiAJdTY0IHRzYzEsIHRzYzIsIGRlbHRhLCByZWYxLCByZWYyOwogCXVuc2lnbmVkIGxvbmcgdHNjX3BpdF9taW4gPSBVTE9OR19NQVgsIHRzY19yZWZfbWluID0gVUxPTkdfTUFYOwpAQCAtODk2LDcgJiM0Mzs5MTYsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBwaXRfaHBldF9wdGltZXJfY2FsaWJyYXRlX2NwdSh2b2lkKQogLyoqCiAgKiBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSAtIGNhbiBjYWxpYnJhdGUgdGhlIGNwdSBlYXJseSBpbiBib290CiAgKi8KLXVuc2lnbmVkIGxvbmcgbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHkodm9pZCkKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGZhc3RfY2FsaWJyYXRlID0gY3B1X2toel9mcm9tX2NwdWlkKCk7CiAKQEAgLTkxMCwyMCAmIzQzOzkzMCw2IEBAIHVuc2lnbmVkIGxvbmcgbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHkodm9pZCkKIAlyZXR1cm4gZmFzdF9jYWxpYnJhdGU7CiB9CiAKLQotLyoqCi0gKiBuYXRpdmVfY2FsaWJyYXRlX2NwdSAtIGNhbGlicmF0ZSB0aGUgY3B1Ci0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfY3B1KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB0c2NfZnJlcSA9IG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KCk7Ci0KLQlpZiAoIXRzY19mcmVxKQotCQl0c2NfZnJlcSA9IHBpdF9ocGV0X3B0aW1lcl9jYWxpYnJhdGVfY3B1KCk7Ci0KLQlyZXR1cm4gdHNjX2ZyZXE7Ci19Ci0KIHZvaWQgcmVjYWxpYnJhdGVfY3B1X2toeih2b2lkKQogewogI2lmbmRlZiBDT05GSUdfU01QCkBAIC05MzIsOCAmIzQzOzkzOCwxMyBAQCB2b2lkIHJlY2FsaWJyYXRlX2NwdV9raHoodm9pZCkKIAlpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9UU0MpKQogCQlyZXR1cm47CiAKLQljcHVfa2h6ID0geDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUoKTsKLQl0c2Nfa2h6ID0geDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MoKTsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWNwdV9raHogPSBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSgpOwomIzQzOwlpZiAoIWNwdV9raHopCiYjNDM7CQljcHVfa2h6ID0gbmF0aXZlX2NhbGlicmF0ZV9jcHVfbGF0ZSgpOwomIzQzOwl0c2Nfa2h6ID0gbmF0aXZlX2NhbGlicmF0ZV90c2MoKTsKIAlpZiAodHNjX2toeiA9PSAwKQogCQl0c2Nfa2h6ID0gY3B1X2toejsKIAllbHNlIGlmIChhYnMoY3B1X2toeiAtIHRzY19raHopICogMTAgJmd0OyB0c2Nfa2h6KQpAQCAtOTQyLDE0ICYjNDM7OTUzLDIyIEBAIHZvaWQgcmVjYWxpYnJhdGVfY3B1X2toeih2b2lkKQogCQkJCQkJICAgIGNwdV9raHpfb2xkLCBjcHVfa2h6KTsKICNlbmRpZgogfQotRVhQT1JUX1NZTUJPTF9HUEwocmVjYWxpYnJhdGVfY3B1X2toeik7CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhyZWNhbGlicmF0ZV9jcHVfa2h6LCAmIzM0O3A0LWNsb2NrbW9kLHBvd2Vybm93LWs3JiMzNDspOwogCiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgY3ljMm5zX3N1c3BlbmQ7CiAKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdHNjX2lzX3NhdmVfcmVzdG9yZV9uZWVkZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIXVzaW5nX25hdGl2ZV9zY2hlZF9jbG9jaygpKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHN0YXRpY19icmFuY2hfbGlrZWx5KCZhbXA7X191c2VfdHNjKSB8fCBzY2hlZF9jbG9ja19zdGFibGUoKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHRzY19zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpCiB7Ci0JaWYgKCFzdGF0aWNfYnJhbmNoX2xpa2VseSgmYW1wO19fdXNlX3RzYykgJmFtcDsmYW1wOyAhc2NoZWRfY2xvY2tfc3RhYmxlKCkpCiYjNDM7CWlmICghdHNjX2lzX3NhdmVfcmVzdG9yZV9uZWVkZWQoKSkKIAkJcmV0dXJuOwogCiAJY3ljMm5zX3N1c3BlbmQgPSBzY2hlZF9jbG9jaygpOwpAQCAtOTY5LDcgJiM0Mzs5ODgsNyBAQCB2b2lkIHRzY19yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgY3B1OwogCi0JaWYgKCFzdGF0aWNfYnJhbmNoX2xpa2VseSgmYW1wO19fdXNlX3RzYykgJmFtcDsmYW1wOyAhc2NoZWRfY2xvY2tfc3RhYmxlKCkpCiYjNDM7CWlmICghdHNjX2lzX3NhdmVfcmVzdG9yZV9uZWVkZWQoKSkKIAkJcmV0dXJuOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwpAQCAtMTQzOSwyMSAmIzQzOzE0NTgsMjggQEAgc3RhdGljIGludCBfX2luaXQgaW5pdF90c2NfY2xvY2tzb3VyY2Uodm9pZCkKICAqLwogZGV2aWNlX2luaXRjYWxsKGluaXRfdHNjX2Nsb2Nrc291cmNlKTsKIAotc3RhdGljIGJvb2wgX19pbml0IGRldGVybWluZV9jcHVfdHNjX2ZyZXF1ZW5jaWVzKGJvb2wgZWFybHkpCiYjNDM7c3RhdGljIGJvb2wgX19pbml0IGRldGVybWluZV9jcHVfdHNjX2ZyZXF1ZW5jaWVzKGJvb2wgZWFybHksCiYjNDM7CQkJCQkJIHVuc2lnbmVkIGludCBrbm93bl9jcHVfa2h6LAomIzQzOwkJCQkJCSB1bnNpZ25lZCBpbnQga25vd25fdHNjX2toeikKIHsKIAkvKiBNYWtlIHN1cmUgdGhhdCBjcHUgYW5kIHRzYyBhcmUgbm90IGFscmVhZHkgY2FsaWJyYXRlZCAqLwogCVdBUk5fT04oY3B1X2toeiB8fCB0c2Nfa2h6KTsKIAogCWlmIChlYXJseSkgewotCQljcHVfa2h6ID0geDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUoKTsKLQkJaWYgKHRzY19lYXJseV9raHopCi0JCQl0c2Nfa2h6ID0gdHNjX2Vhcmx5X2toejsKJiM0MzsJCS8qCiYjNDM7CQkgKiBFYXJseSBDUFUgY2FsaWJyYXRpb24gY2FuIG9ubHkgdXNlIG1ldGhvZHMgdGhhdCBhcmUgYXZhaWxhYmxlCiYjNDM7CQkgKiBlYXJseSBpbiBib290IChvYnZpb3VzbHkpLgomIzQzOwkJICovCiYjNDM7CQlpZiAoa25vd25fY3B1X2toeikKJiM0MzsJCQljcHVfa2h6ID0ga25vd25fY3B1X2toejsKIAkJZWxzZQotCQkJdHNjX2toeiA9IHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjKCk7CiYjNDM7CQkJY3B1X2toeiA9IG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KCk7CiYjNDM7CQlpZiAoa25vd25fdHNjX2toeikKJiM0MzsJCQl0c2Nfa2h6ID0ga25vd25fdHNjX2toejsKJiM0MzsJCWVsc2UKJiM0MzsJCQl0c2Nfa2h6ID0gbmF0aXZlX2NhbGlicmF0ZV90c2MoKTsKIAl9IGVsc2UgewotCQkvKiBXZSBzaG91bGQgbm90IGJlIGhlcmUgd2l0aCBub24tbmF0aXZlIGNwdSBjYWxpYnJhdGlvbiAqLwotCQlXQVJOX09OKHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ICE9IG5hdGl2ZV9jYWxpYnJhdGVfY3B1KTsKLQkJY3B1X2toeiA9IHBpdF9ocGV0X3B0aW1lcl9jYWxpYnJhdGVfY3B1KCk7CiYjNDM7CQljcHVfa2h6ID0gbmF0aXZlX2NhbGlicmF0ZV9jcHVfbGF0ZSgpOwogCX0KIAogCS8qCkBAIC0xNTAyLDE1ICYjNDM7MTUyOCw0OCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgdHNjX2VuYWJsZV9zY2hlZF9jbG9jayh2b2lkKQogCiB2b2lkIF9faW5pdCB0c2NfZWFybHlfaW5pdCh2b2lkKQogewomIzQzOwl1bnNpZ25lZCBpbnQga25vd25fY3B1X2toeiA9IDAsIGtub3duX3RzY19raHogPSAwOwomIzQzOwogCWlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1RTQykpCiAJCXJldHVybjsKIAkvKiBEb24mIzM5O3QgY2hhbmdlIFVWIFRTQyBtdWx0aS1jaGFzc2lzIHN5bmNocm9uaXphdGlvbiAqLwogCWlmIChpc19lYXJseV91dl9zeXN0ZW0oKSkKIAkJcmV0dXJuOwogCi0Jc25wX3NlY3VyZV90c2NfaW5pdCgpOwomIzQzOwlpZiAoeDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHopCiYjNDM7CQlrbm93bl9jcHVfa2h6ID0geDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHooKTsKIAotCWlmICghZGV0ZXJtaW5lX2NwdV90c2NfZnJlcXVlbmNpZXModHJ1ZSkpCiYjNDM7CWlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9HVUVTVF9TTlBfU0VDVVJFX1RTQykpCiYjNDM7CQlrbm93bl90c2Nfa2h6ID0gc25wX3NlY3VyZV90c2NfaW5pdCgpOwomIzQzOwllbHNlIGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSkKJiM0MzsJCWtub3duX3RzY19raHogPSB0ZHhfdHNjX2luaXQoKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlIFRTQyBmcmVxdWVuY3kgd2FzbiYjMzk7dCBwcm92aWRlZCBieSB0cnVzdGVkIGZpcm13YXJlLCB0cnkgdG8gZ2V0CiYjNDM7CSAqIGl0IGZyb20gdGhlIGh5cGVydmlzb3IgKHdoaWNoIGlzIHVudHJ1c3RlZCB3aGVuIHJ1bm5pbmcgYXMgYSBDb0NvIGd1ZXN0KS4KJiM0MzsJICovCiYjNDM7CWlmICgha25vd25fdHNjX2toeiAmYW1wOyZhbXA7IHg4Nl9pbml0Lmh5cGVyLmdldF90c2Nfa2h6KQomIzQzOwkJa25vd25fdHNjX2toeiA9IHg4Nl9pbml0Lmh5cGVyLmdldF90c2Nfa2h6KCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE1hcmsgdGhlIFRTQyBmcmVxdWVuY3kgYXMga25vd24gaWYgaXQgd2FzIG9idGFpbmVkIGZyb20gYSBoeXBlcnZpc29yCiYjNDM7CSAqIG9yIHRydXN0ZWQgZmlybXdhcmUuCiYjNDM7CSAqLwomIzQzOwlpZiAoa25vd25fdHNjX2toeikKJiM0MzsJCXNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBJZ25vcmUgdGhlIHVzZXItcHJvdmlkZWQgVFNDIGZyZXF1ZW5jeSBpZiB0aGUgZXhhY3QgZnJlcXVlbmN5IHdhcwomIzQzOwkgKiBvYnRhaW5lZCBmcm9tIHRydXN0ZWQgZmlybXdhcmUgb3IgdGhlIGh5cGVydmlzb3IsIGFuZCBkb24mIzM5O3QgbWFyayB0aGUKJiM0MzsJICogZnJlcXVlbmN5IGFzIGtub3duLCBhcyB0aGUgdXNlci1wcm92aWRlZCBmcmVxdWVuY3kgaXMgaW50ZW5kZWQgYXMgYQomIzQzOwkgKiAmIzM0O3N0YXJ0aW5nIHBvaW50JiMzNDssIG5vdCBhIGtub3duLCBndWFyYW50ZWVkIGZyZXF1ZW5jeQomIzQzOwkgKi8KJiM0MzsJaWYgKCFrbm93bl90c2Nfa2h6KQomIzQzOwkJa25vd25fdHNjX2toeiA9IHRzY19lYXJseV9raHo7CiYjNDM7CWVsc2UgaWYgKHRzY19lYXJseV9raHopCiYjNDM7CQlwcl9lcnIoJiMzNDtJZ25vcmluZyAmIzM5O3RzY19lYXJseV9raHomIzM5OyBpbiBmYXZvciBvZiBmaXJtd2FyZS9oeXBlcnZpc29yLlxuJiMzNDspOwomIzQzOwomIzQzOwlpZiAoIWRldGVybWluZV9jcHVfdHNjX2ZyZXF1ZW5jaWVzKHRydWUsIGtub3duX2NwdV9raHosIGtub3duX3RzY19raHopKQogCQlyZXR1cm47CiAJdHNjX2VuYWJsZV9zY2hlZF9jbG9jaygpOwogfQpAQCAtMTUyMiwxNiAmIzQzOzE1ODEsOSBAQCB2b2lkIF9faW5pdCB0c2NfaW5pdCh2b2lkKQogCQlyZXR1cm47CiAJfQogCi0JLyoKLQkgKiBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSBjYW4gb25seSBjYWxpYnJhdGUgdXNpbmcgbWV0aG9kcyB0aGF0IGFyZQotCSAqIGF2YWlsYWJsZSBlYXJseSBpbiBib290LgotCSAqLwotCWlmICh4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX2NwdSA9PSBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSkKLQkJeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUgPSBuYXRpdmVfY2FsaWJyYXRlX2NwdTsKLQogCWlmICghdHNjX2toeikgewogCQkvKiBXZSBmYWlsZWQgdG8gZGV0ZXJtaW5lIGZyZXF1ZW5jaWVzIGVhcmxpZXIsIHRyeSBhZ2FpbiAqLwotCQlpZiAoIWRldGVybWluZV9jcHVfdHNjX2ZyZXF1ZW5jaWVzKGZhbHNlKSkgewomIzQzOwkJaWYgKCFkZXRlcm1pbmVfY3B1X3RzY19mcmVxdWVuY2llcyhmYWxzZSwgMCwgMCkpIHsKIAkJCW1hcmtfdHNjX3Vuc3RhYmxlKCYjMzQ7Y291bGQgbm90IGNhbGN1bGF0ZSBUU0Mga2h6JiMzNDspOwogCQkJc2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfREVBRExJTkVfVElNRVIpOwogCQkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RzY19tc3IuYyBiL2FyY2gveDg2L2tlcm5lbC90c2NfbXNyLmMKaW5kZXggNDhlNmNjMWNiMDE3YTUuLmFlY2UwNjJhZWU3ZTg5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHNjX21zci5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC90c2NfbXNyLmMKQEAgLTIxMCw5ICYjNDM7MjEwLDcgQEAgdW5zaWduZWQgbG9uZyBjcHVfa2h6X2Zyb21fbXNyKHZvaWQpCiAJaWYgKGZyZXEgPT0gMCkKIAkJcHJfZXJyKCYjMzQ7RXJyb3IgTVNSX0ZTQl9GUkVRIGluZGV4ICVkIGlzIHVua25vd25cbiYjMzQ7LCBpbmRleCk7CiAKLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLQlsYXBpY190aW1lcl9wZXJpb2QgPSAoZnJlcSAqIDEwMDApIC8gSFo7Ci0jZW5kaWYKJiM0MzsJYXBpY19zZXRfdGltZXJfcGVyaW9kX2toeihmcmVxLCAmIzM0O01TUl9GU0JfRlJFUSYjMzQ7KTsKIAogCS8qCiAJICogVFNDIGZyZXF1ZW5jeSBkZXRlcm1pbmVkIGJ5IE1TUiBpcyBhbHdheXMgY29uc2lkZXJlZCAmIzM0O2tub3duJiMzNDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jIGIvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmMKaW5kZXggMjUyYzU4MjdkMDYzNGYuLmI3YTQ4ZTYyMmY0ODhhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYwpAQCAtMTQ3LDggJiM0MzsxNDcsNiBAQCBzdGF0aWMgdm9pZCBlbmNfa2V4ZWNfZmluaXNoX25vb3Aodm9pZCkge30KIHN0YXRpYyBib29sIGlzX3ByaXZhdGVfbW1pb19ub29wKHU2NCBhZGRyKSB7cmV0dXJuIGZhbHNlOyB9CiAKIHN0cnVjdCB4ODZfcGxhdGZvcm1fb3BzIHg4Nl9wbGF0Zm9ybSBfX3JvX2FmdGVyX2luaXQgPSB7Ci0JLmNhbGlicmF0ZV9jcHUJCQk9IG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5LAotCS5jYWxpYnJhdGVfdHNjCQkJPSBuYXRpdmVfY2FsaWJyYXRlX3RzYywKIAkuZ2V0X3dhbGxjbG9jawkJCT0gbWFjaF9nZXRfY21vc190aW1lLAogCS5zZXRfd2FsbGNsb2NrCQkJPSBtYWNoX3NldF9jbW9zX3RpbWUsCiAJLmlvbW11X3NodXRkb3duCQkJPSBpb21tdV9zaHV0ZG93bl9ub29wLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMgYi9hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYwppbmRleCAyZjhjMzIxNzM5NzJkNi4uNmMzYWY5NzRjN2MyZjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jCkBAIC01MzUsOSAmIzQzOzUzNSw2IEBAIHZvaWQgX19pbml0IHNtZV9lYXJseV9pbml0KHZvaWQpCiAJCSAqLwogCQl4ODZfaW5pdC5yZXNvdXJjZXMuZG1pX3NldHVwID0gc25wX2RtaV9zZXR1cDsKIAl9Ci0KLQlpZiAoc2V2X3N0YXR1cyAmYW1wOyBNU1JfQU1ENjRfU05QX1NFQ1VSRV9UU0MpCi0JCXNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTsKIH0KIAogdm9pZCBfX2luaXQgbWVtX2VuY3J5cHRfZnJlZV9kZWNyeXB0ZWRfbWVtKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vdGltZS5jIGIvYXJjaC94ODYveGVuL3RpbWUuYwppbmRleCBkNjJjMTQzMzRiMzUxMC4uYmMyNmYwMGZjNTNlNWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi90aW1lLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYveGVuL3RpbWUuYwpAQCAtMzgsMTIgJiM0MzszOCwxMSBAQAogc3RhdGljIHU2NCB4ZW5fc2NoZWRfY2xvY2tfb2Zmc2V0IF9fcmVhZF9tb3N0bHk7CiAKIC8qIEdldCB0aGUgVFNDIHNwZWVkIGZyb20gWGVuICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB4ZW5fdHNjX2toeih2b2lkKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IHhlbl90c2Nfa2h6KHZvaWQpCiB7CiAJc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gKmluZm8gPQogCQkmYW1wO0hZUEVSVklTT1Jfc2hhcmVkX2luZm8tJmd0O3ZjcHVfaW5mb1swXS50aW1lOwogCi0Jc2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfS05PV05fRlJFUSk7CiAJcmV0dXJuIHB2Y2xvY2tfdHNjX2toeihpbmZvKTsKIH0KIApAQCAtNDQ0LDcgJiM0Mzs0NDMsNyBAQCB2b2lkIHhlbl9yZXN0b3JlX3RpbWVfbWVtb3J5X2FyZWEodm9pZCkKIAl4ZW5fc2NoZWRfY2xvY2tfb2Zmc2V0ID0geGVuX2Nsb2Nrc291cmNlX3JlYWQoKSAtIHhlbl9jbG9ja192YWx1ZV9zYXZlZDsKIH0KIAotc3RhdGljIHZvaWQgeGVuX3NldHVwX3ZzeXNjYWxsX3RpbWVfaW5mbyh2b2lkKQomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCB4ZW5fc2V0dXBfdnN5c2NhbGxfdGltZV9pbmZvKHZvaWQpCiB7CiAJc3RydWN0IHZjcHVfcmVnaXN0ZXJfdGltZV9tZW1vcnlfYXJlYSB0OwogCXN0cnVjdCBwdmNsb2NrX3ZzeXNjYWxsX3RpbWVfaW5mbyAqdGk7CkBAIC01NjcsOSAmIzQzOzU2NiwxNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgeGVuX2luaXRfdGltZV9jb21tb24odm9pZCkKIHsKIAl4ZW5fc2NoZWRfY2xvY2tfb2Zmc2V0ID0geGVuX2Nsb2Nrc291cmNlX3JlYWQoKTsKIAlzdGF0aWNfY2FsbF91cGRhdGUocHZfc3RlYWxfY2xvY2ssIHhlbl9zdGVhbF9jbG9jayk7Ci0JcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKHhlbl9zY2hlZF9jbG9jayk7CiAKLQl4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX3RzYyA9IHhlbl90c2Nfa2h6OwomIzQzOwkvKgomIzQzOwkgKiBYZW4gaGFzIHBhcmF2aXJ0dWFsaXplZCBzdXNwZW5kL3Jlc3VtZSBhbmQgc28gZG9lc24mIzM5O3QgdXNlIHRoZSBjb21tb24KJiM0MzsJICogeDg2IHNjaGVkX2Nsb2NrIHNhdmUvcmVzdG9yZSBob29rcy4KJiM0MzsJICovCiYjNDM7CXBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh4ZW5fc2NoZWRfY2xvY2ssIHg4Nl9pbml0X25vb3AsIHg4Nl9pbml0X25vb3ApOwomIzQzOwomIzQzOwl4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeiA9IHhlbl90c2Nfa2h6OwogCXg4Nl9wbGF0Zm9ybS5nZXRfd2FsbGNsb2NrID0geGVuX2dldF93YWxsY2xvY2s7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jCmluZGV4IGRmNTY3Nzk1ZDE3NTFhLi44ZWU3YTlkZTBmNGZkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9oeXBlcnZfdGltZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jCkBAIC00ODgsMTcgJiM0Mzs0ODgsNiBAQCBzdGF0aWMgdm9pZCByZXN1bWVfaHZfY2xvY2tfdHNjKHN0cnVjdCBjbG9ja3NvdXJjZSAqYXJnKQogCWh2X3NldF9tc3IoSFZfTVNSX1JFRkVSRU5DRV9UU0MsIHRzY19tc3IuYXNfdWludDY0KTsKIH0KIAotLyoKLSAqIENhbGxlZCBkdXJpbmcgcmVzdW1lIGZyb20gaGliZXJuYXRpb24sIGZyb20gb3ZlcnJpZGRlbgotICogeDg2X3BsYXRmb3JtLnJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUgcm91dGluZS4gVGhpcyBpcyB0byBhZGp1c3Qgb2Zmc2V0cwotICogdXNlZCB0byBjYWxjdWxhdGUgdGltZSBmb3IgaHYgdHNjIHBhZ2UgYmFzZWQgc2NoZWRfY2xvY2ssIHRvIGFjY291bnQgZm9yCi0gKiB0aW1lIHNwZW50IGJlZm9yZSBoaWJlcm5hdGlvbi4KLSAqLwotdm9pZCBodl9hZGpfc2NoZWRfY2xvY2tfb2Zmc2V0KHU2NCBvZmZzZXQpCi17Ci0JaHZfc2NoZWRfY2xvY2tfb2Zmc2V0IC09IG9mZnNldDsKLX0KLQogI2lmZGVmIEhBVkVfVkRTT19DTE9DS01PREVfSFZDTE9DSwogc3RhdGljIGludCBodl9jc19lbmFibGUoc3RydWN0IGNsb2Nrc291cmNlICpjcykKIHsKQEAgLTU1NCwxMCAmIzQzOzU0MywzNSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgaHZfc2V0dXBfc2NoZWRfY2xvY2sodm9pZCAqc2NoZWRfY2xvY2spCiAjZWxpZiBkZWZpbmVkIENPTkZJR19QQVJBVklSVAogI2luY2x1ZGUgJmx0O2FzbS90aW1lci5oJmd0OwogCiYjNDM7c3RhdGljIHU2NCBodl9yZWZfY291bnRlcl9hdF9zdXNwZW5kOwomIzQzOy8qCiYjNDM7ICogSHlwZXItViBjbG9jayBjb3VudGVyIHJlc2V0cyBkdXJpbmcgaGliZXJuYXRpb24uIFNhdmUgYW5kIHJlc3RvcmUgY2xvY2sKJiM0MzsgKiBvZmZzZXQgZHVyaW5nIHN1c3BlbmQvcmVzdW1lLCB3aGlsZSBhbHNvIGNvbnNpZGVyaW5nIHRoZSB0aW1lIHBhc3NlZAomIzQzOyAqIGJlZm9yZSBzdXNwZW5kLiBUaGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IHNjaGVkX2Nsb2NrIHVzaW5nIGh2IHRzYyBwYWdlCiYjNDM7ICogYmFzZWQgY2xvY2tzb3VyY2UsIHByb2NlZWRzIGZyb20gd2hlcmUgaXQgbGVmdCBvZmYgZHVyaW5nIHN1c3BlbmQgYW5kCiYjNDM7ICogaXQgc2hvd3MgY29ycmVjdCB0aW1lIGZvciB0aGUgdGltZXN0YW1wcyBvZiBrZXJuZWwgbWVzc2FnZXMgYWZ0ZXIgcmVzdW1lLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGh2X3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZCkKJiM0Mzt7CiYjNDM7CWh2X3JlZl9jb3VudGVyX2F0X3N1c3BlbmQgPSBodl9yZWFkX3JlZmVyZW5jZV9jb3VudGVyKCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGh2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZCkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIEFkanVzdCB0aGUgb2Zmc2V0cyB1c2VkIGJ5IGh2IHRzYyBjbG9ja3NvdXJjZSB0bwomIzQzOwkgKiBhY2NvdW50IGZvciB0aGUgdGltZSBzcGVudCBiZWZvcmUgaGliZXJuYXRpb24uCiYjNDM7CSAqIGFkanVzdGVkIHZhbHVlID0gcmVmZXJlbmNlIGNvdW50ZXIgKHRpbWUpIGF0IHN1c3BlbmQKJiM0MzsJICogICAgICAgICAgICAgICAgLSByZWZlcmVuY2UgY291bnRlciAodGltZSkgbm93LgomIzQzOwkgKi8KJiM0MzsJaHZfc2NoZWRfY2xvY2tfb2Zmc2V0IC09IChodl9yZWZfY291bnRlcl9hdF9zdXNwZW5kIC0gaHZfcmVhZF9yZWZlcmVuY2VfY291bnRlcigpKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgaHZfc2V0dXBfc2NoZWRfY2xvY2sodm9pZCAqc2NoZWRfY2xvY2spCiB7CiAJLyogV2UmIzM5O3JlIG9uIHg4Ni94NjQgKmFuZCogdXNpbmcgUFYgb3BzICovCi0JcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKHNjaGVkX2Nsb2NrKTsKJiM0MzsJcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKHNjaGVkX2Nsb2NrLCBodl9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlLAomIzQzOwkJCQkgaHZfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSk7CiB9CiAjZWxzZSAvKiAhQ09ORklHX0dFTkVSSUNfU0NIRURfQ0xPQ0sgJmFtcDsmYW1wOyAhQ09ORklHX1BBUkFWSVJUICovCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgaHZfc2V0dXBfc2NoZWRfY2xvY2sodm9pZCAqc2NoZWRfY2xvY2spIHt9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5oIGIvaW5jbHVkZS9jbG9ja3NvdXJjZS9oeXBlcnZfdGltZXIuaAppbmRleCBkNDhkZDQxNzZmZDM1Yi4uYTRjODFhNjBmNTNkZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9jbG9ja3NvdXJjZS9oeXBlcnZfdGltZXIuaApAQCAtMzgsOCAmIzQzOzM4LDYgQEAgZXh0ZXJuIHZvaWQgaHZfcmVtYXBfdHNjX2Nsb2Nrc291cmNlKHZvaWQpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaHZfZ2V0X3RzY19wZm4odm9pZCk7CiBleHRlcm4gc3RydWN0IG1zX2h5cGVydl90c2NfcGFnZSAqaHZfZ2V0X3RzY19wYWdlKHZvaWQpOwogCi1leHRlcm4gdm9pZCBodl9hZGpfc2NoZWRfY2xvY2tfb2Zmc2V0KHU2NCBvZmZzZXQpOwotCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wKIGh2X3JlYWRfdHNjX3BhZ2VfdHNjKGNvbnN0IHN0cnVjdCBtc19oeXBlcnZfdHNjX3BhZ2UgKnRzY19wZywKIAkJICAgICB1NjQgKmN1cl90c2MsIHU2NCAqdGltZSkKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCmluZGV4IGIxYjVlYzQzYzBmMjdiLi41YmM3N2QzNmM3YTM2NCAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCkBAIC0yMTgwLDExICYjNDM7MjE4MCwxNiBAQCB2b2lkIHRpbWVrZWVwaW5nX3Jlc3VtZSh2b2lkKQogCXU2NCBjeWNsZV9ub3csIG5zZWM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXJlYWRfcGVyc2lzdGVudF9jbG9jazY0KCZhbXA7dHNfbmV3KTsKLQogCWNsb2NrZXZlbnRzX3Jlc3VtZSgpOwogCWNsb2Nrc291cmNlX3Jlc3VtZSgpOwogCiYjNDM7CS8qCiYjNDM7CSAqIFJlYWQgcGVyc2lzdGVudCB0aW1lIGFmdGVyIGNsb2Nrc291cmNlcyBoYXZlIGJlZW4gcmVzdW1lZC4gIFBhcmF2aXJ0CiYjNDM7CSAqIGNsb2NrcyBoYXZlIGEgbmFzdHkgaGFiaXQgb2YgcGlnZ3liYWNraW5nIGEgcGVyc2lzdGVudCBjbG9jayBvbiBhCiYjNDM7CSAqIHN5c3RlbSBjbG9jaywgYW5kIG1heSByZXR1cm4gZ2FyYmFnZSBpZiB0aGUgc3lzdGVtIGNsb2NrIGlzIHN1c3BlbmRlZC4KJiM0MzsJICovCiYjNDM7CXJlYWRfcGVyc2lzdGVudF9jbG9jazY0KCZhbXA7dHNfbmV3KTsKJiM0MzsKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt0a19jb3JlLmxvY2ssIGZsYWdzKTsKIAogCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MDc0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTU2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRTQyBhbmQgQVBJQyBJbml0aWFsaXphdGlvbiBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzLCBhbmQgaXQmIzM5O3MgYSBkZWVwIGRpdmUgaW50byBob3cgd2UgaGFuZGxlIFRpbWUgU3RhbXAgQ291bnRlcnMgKFRTQykgYW5kIEFQSUMgZnJlcXVlbmNpZXMgb24geDg2LCBlc3BlY2lhbGx5IHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEl0IGxvb2tzIGxpa2UgdGhlIGdvYWwgaGVyZSBpcyB0byBtb2Rlcm5pemUgYW5kIGltcHJvdmUgaG93IHdlIGNhbGlicmF0ZSBhbmQgaW5pdGlhbGl6ZSB0aGVzZSB0aW1lLWNyaXRpY2FsIGNvbXBvbmVudHMsIGVzcGVjaWFsbHkgZm9yIHRoZSBsaWtlcyBvZiBLVk0sIEh5cGVyLVYsIFZNd2FyZSwgQUNSTiwgSmFpbGhvdXNlLCBURFgsIGFuZCBTRVYtU05QLgoKSW5pdGlhbGx5LCBJIHNlZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIHdoaWNoIGlzIGFsd2F5cyBnb29kLiBTcGVjaWZpY2FsbHksIGB0c2NfZWFybHlfa2h6YCBhbmQgYEtWTV9DUFVJRF9USU1JTkdfSU5GT2AgYXJlIGRvY3VtZW50ZWQsIHdoaWNoIGlzIGEga2V5IHNpZ25hbC4gVGhlbiBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBtb3ZpbmcgYXdheSBmcm9tIHNldHRpbmcgYHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1YCBhbmQgYHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjYCBpbiBzZXZlcmFsIHBsYWNlcyAobGlrZSB3aXRoIGBzbnBfc2VjdXJlX3RzY19pbml0YCksIGFuZCBpbnN0ZWFkIHJldHVybmluZyB0aGUgVFNDIGZyZXF1ZW5jeSBkaXJlY3RseS4gVGhhdCYjMzk7cyBhIHNvbGlkIGFyY2hpdGVjdHVyYWwgY2hhbmdlLiBNYWtlcyBzZW5zZSBnaXZlbiB0aGUgY29tcGxleGl0aWVzIG9mIG1vZGVybiB2aXJ0dWFsaXphdGlvbi4KClRoZSBhZGRpdGlvbiBvZiBgdGR4X3RzY19pbml0YCBhbmQgaXRzIHVzZSBvZiBgY3B1aWRfZ2V0X3RzY19pbmZvYCBhbmQgYGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHpgIGZvciBURFggZW52aXJvbm1lbnRzIGlzIGltcG9ydGFudCwgdG9vLiBUaGlzIHN1Z2dlc3RzIGEgbW9yZSBkaXJlY3Qgd2F5IG9mIHJldHJpZXZpbmcgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIENQVUlEIGFuZCBzZXR0aW5nIHRoZSBBUElDIHRpbWVyIHBlcmlvZCwgd2hpY2ggSSB3b3VsZCBleHBlY3QgdG8gaW1wcm92ZSByZWxpYWJpbGl0eSBhbmQgcmVkdWNlIG92ZXJoZWFkLiBUaGUgcmVtb3ZhbCBvZiBgYWNybl9nZXRfdHNjX2toemAgc3VnZ2VzdHMgYSBzaGlmdCB0byBhIG1vcmUgZ2VuZXJpYyBvciBDUFVJRC1iYXNlZCBhcHByb2FjaCwgd2hpY2ggaXMgbGlrZWx5IG1vcmUgbWFpbnRhaW5hYmxlIGluIHRoZSBsb25nIHJ1bi4gVGhlIGNoYW5nZXMgaW4gdGhlIGhlYWRlciBmaWxlcyBhbmQgdGhlIGFkZGl0aW9uIG9mIGBhcGljX3NldF90aW1lcl9wZXJpb2RfaHpgIGFsc28gbG9va3MgbGlrZSBhIGdvb2Qgc3RlcCB0b3dhcmQgYmV0dGVyIHByZWNpc2lvbiBhbmQgYSBtb3JlIGZsZXhpYmxlIGludGVyZmFjZSBmb3IgY29uZmlndXJpbmcgQVBJQyB0aW1lcnMuCgpJJiMzOTttIGludHJpZ3VlZCBieSB0aGUgY2hhbmdlcyBpbiBga3ZtLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBhZGRpdGlvbiBvZiBgS1ZNX0NQVUlEX1RJTUlOR19JTkZPYCB0byBwdWxsIFRTQyBhbmQgQVBJQyBmcmVxdWVuY2llcyBkaXJlY3RseSBmcm9tIENQVUlEIHNvdW5kcyBwcm9taXNpbmcuIFRoaXMgYnlwYXNzZXMgdGhlIG5lZWQgZm9yIGh5cGVydmlzb3Itc3BlY2lmaWMgY2FsaWJyYXRpb24gYW5kIGdpdmVzIHVzIGEgbW9yZSBkaXJlY3QgYW5kIHBvdGVudGlhbGx5IG1vcmUgYWNjdXJhdGUgYXBwcm9hY2guIFRoZSByZWZhY3RvcmluZyBvZiBga3ZtY2xvY2suY2AgYW5kIGFzc29jaWF0ZWQgc3VzcGVuZC9yZXN1bWUgaGFuZGxpbmcgaXMgYW5vdGhlciBjcml0aWNhbCBhcmVhOyB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IGhhcyBvZnRlbiBiZWVuIGEgc291cmNlIG9mIHN1YnRsZSB0aW1la2VlcGluZyBwcm9ibGVtcywgc28gdGhpcyBhdHRlbnRpb24gdG8gZGV0YWlsIGlzIHdlbGNvbWUuCgpUaGUgY29yZSBvZiB0aGUgVFNDIGNhbGlicmF0aW9uIGl0c2VsZiwgaW4gYHRzYy5jYCwgaXMgZ2V0dGluZyBhIHNpZ25pZmljYW50IG92ZXJoYXVsLCB3aXRoIGBuYXRpdmVfY2FsaWJyYXRlX3RzY2Agbm93IHVzaW5nIGBjcHVpZF9nZXRfdHNjX2luZm9gIGFuZCB0aGUgdXBkYXRlcyB0byBgZGV0ZXJtaW5lX2NwdV90c2NfZnJlcXVlbmNpZXNgLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBhcHByb2FjaCB0byBpbXByb3ZpbmcgVFNDIGNhbGlicmF0aW9uIGFuZCBtYWtpbmcgaXQgbW9yZSByZWxpYWJsZSBhbmQgY29uc2lzdGVudC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0cnlpbmcgdG8gc3RyZWFtbGluZSB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBhbmQgbGVhbiBvbiB0aGUgQ1BVSUQgaW5mb3JtYXRpb24gZm9yIGJldHRlciBhY2N1cmFjeS4gVGhlIGB0c2NfZWFybHlfaW5pdGAgY2hhbmdlcyBpbmRpY2F0ZSB3ZSBhcmUgdXNpbmcgaHlwZXJ2aXNvci1zcGVjaWZpYyBUU0MgaW5pdGlhbGl6YXRpb24sIHRvbywgd2hpY2ggc2hvdWxkIGFkYXB0IHRoaXMgdG8gZGlmZmVyZW50IGVudmlyb25tZW50cy4gVGhlIGNoYW5nZXMgaW4gYHRzY19tc3IuY2AgdG8gdXNlIGBhcGljX3NldF90aW1lcl9wZXJpb2Rfa2h6YCBhcmUgbGlrZWx5IHJlbGF0ZWQgYW5kIGFpbWVkIGF0IGltcHJvdmluZyB0aW1la2VlcGluZyBhY2N1cmFjeSBhdCB0aGUgbG93ZXIgbGV2ZWxzLgoKVGhlIGNoYW5nZXMgaW4gdGhlIGh5cGVydmlzb3Itc3BlY2lmaWMgY29kZSAoQUNSTiwgSHlwZXItViwgVk13YXJlLCBKYWlsaG91c2UsIFhlbikgYWxsIHBvaW50IHRvIGxldmVyYWdpbmcgYHg4Nl9pbml0Lmh5cGVyLmdldF90c2Nfa2h6YCBhbmQgYHg4Nl9pbml0Lmh5cGVyLmdldF9jcHVfa2h6YCBpbnN0ZWFkIG9mIHRoZSBvbGRlciBjYWxpYnJhdGlvbiBtZXRob2RzLiBUaGlzIHN1Z2dlc3RzIGEgbW92ZSB0b3dhcmQgYSBtb3JlIG1vZHVsYXIgYW5kIHBvdGVudGlhbGx5IG1vcmUgZWZmaWNpZW50IGh5cGVydmlzb3IgaW50ZWdyYXRpb24uCgpSZWdhcmRpbmcgZnV6emluZywgdGhpcyBpcyB0aGUgY3J1Y2lhbCBxdWVzdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHRoaXMgY29kZSBtaWdodCBiZSB1bnJlYWNoYWJsZSBpbiBhIEdDRSBvciBRRU1VLWxpa2UgZW52aXJvbm1lbnQuIEJ1dCwgdGhlbiBJIHJlYWxpemVkIHRoYXQgdGhlIEtWTSBndWVzdCBjb2RlIHJ1bnMgKmluc2lkZSogdGhlIFZNLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgc3l6a2FsbGVyIGZ1enplcy4gU3l6a2FsbGVyIGNhbiwgYW5kIGRvZXMsIGZ1enogdGhpcyBjb2RlLgoKQWx0aG91Z2ggdGhpcyBpcyBtb3N0bHkgZWFybHkgYm9vdCBjb2RlIChUU0MgY2FsaWJyYXRpb24sIGh5cGVydmlzb3IgaW5pdGlhbGl6YXRpb24pLCB3aGljaCBpcyBub3QgdGhlIHR5cGljYWwgZm9jdXMgb2Ygc3l6a2FsbGVyLCB0aGUgY2hhbmdlcyB0byBzdXNwZW5kL3Jlc3VtZSBhbmQgQ1BVIGhvdHBsdWcgcGF0aHMgYXJlIGludGVyZXN0aW5nLiBUaGVzZSBjb3VsZCBiZSBmdXp6ZWQuIFNwZWNpZmljYWxseSwgZnVuY3Rpb25zIGxpa2UgYGt2bWNsb2NrX2NwdV9hY3Rpb25gLCBga3ZtX3N1c3BlbmRgLCBga3ZtX3Jlc3VtZWAsIGB0aW1la2VlcGluZ19yZXN1bWVgLCBga3ZtX2NwdV9vbmxpbmVgLCBhbmQgYGt2bV9jcHVfZG93bl9wcmVwYXJlYCBhcmUgdmVyeSBpbnRlcmVzdGluZy4KClRvIGJlIHJlYWNoYWJsZSwgd2UgbmVlZCBgQ09ORklHX0tWTV9HVUVTVGAsIGBDT05GSUdfUEFSQVZJUlRgLCBgQ09ORklHX1NVU1BFTkRgIChvciBgQ09ORklHX0hJQkVSTkFUSU9OYCksIGFuZCBgQ09ORklHX0hPVFBMVUdfQ1BVYC4gSSBzZWUgdGhhdCBgdGltZWtlZXBpbmdfcmVzdW1lYCBpcyBjYWxsZWQgZHVyaW5nIHN5c3RlbSByZXN1bWUsIGFuZCBga3ZtY2xvY2tfY3B1X2FjdGlvbmAgaXMgY2FsbGVkIGR1cmluZyBDUFUgaG90cGx1ZyBhbmQgc3VzcGVuZC9yZXN1bWUuIFRoaXMgbG9va3MgdmVyeSBwcm9taXNpbmcuIFRoaXMgbmVlZHMgbW9yZSBhdHRlbnRpb24uCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1jbG9ja19jcHVfYWN0aW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmg9MTI5PXZvaWQga3ZtY2xvY2tfaW5pdChib29sIHByZWZlcl90c2MpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaDoxMzA6dm9pZCBrdm1jbG9ja19jcHVfYWN0aW9uKGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgtMTMxLWJvb2wga3ZtX3BhcmFfYXZhaWxhYmxlKHZvaWQpO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9rdm0uYz00NjM9c3RhdGljIHZvaWQga3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9rdm0uYy00NzMtXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmM6NDc0Olx0a3ZtY2xvY2tfY3B1X2FjdGlvbihhY3Rpb24pO1xuYXJjaC94ODYva2VybmVsL2t2bS5jLTQ3NS19XG4tLVxuYXJjaC94ODYva2VybmVsL2t2bS5jPTQ3Nz1zdGF0aWMgdm9pZCBfX2t2bV9jcHVfb25saW5lKHVuc2lnbmVkIGludCBjcHUsIGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9rdm0uYy00ODEtXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmM6NDgyOlx0a3ZtY2xvY2tfY3B1X2FjdGlvbihhY3Rpb24pO1xuYXJjaC94ODYva2VybmVsL2t2bS5jLTQ4My1cdGt2bV9ndWVzdF9jcHVfaW5pdCgpO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jPTE2OT1zdGF0aWMgdm9pZCBrdm1jbG9ja19yZXN1bWUoc3RydWN0IGNsb2Nrc291cmNlICpjcylcbi0tXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy0xNzQtXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzoxNzU6dm9pZCBrdm1jbG9ja19jcHVfYWN0aW9uKGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKVxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtMTc2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODE2MAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaCBmb3IgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGV5ZSBnb2VzIHRvIHRoZSBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQ6IGBrdm1fY3B1X29ubGluZWAsIGBrdm1fY3B1X2Rvd25fcHJlcGFyZWAsIGBrdm1fc3VzcGVuZGAsIGBrdm1fcmVzdW1lYCwgYGt2bV9wdl9ndWVzdF9jcHVfcmVib290YCwgYW5kIGBrdm1fY3Jhc2hfc2h1dGRvd25gLiBUaGVzZSBhcmUgYWxsICp2ZXJ5KiBpbnRlcmVzdGluZy4gVGhleSYjMzk7cmUgYWxsIGhvb2tzIGludG8gY3JpdGljYWwgYXJlYXMg4oCTIENQVSBob3RwbHVnLCBzeXN0ZW0gY29yZSBvcGVyYXRpb25zLCBhbmQgdGhlIHJlYm9vdCBub3RpZmljYXRpb24gcHJvY2Vzcy4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3Igb2YgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB2aXJ0dWFsaXphdGlvbiBhbmQgS1ZNLgoKTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB3aGV0aGVyIHN5emthbGxlciBjYW4gcmVhY2ggdGhlc2UgYXJlYXMuIEFuZCwgb2YgY291cnNlLCB0aGUgYW5zd2VyIGlzIHllcy4gSXQmIzM5O3MgcGVyZmVjdGx5IGNhcGFibGUgb2YgdHJpZ2dlcmluZyBDUFUgaG90cGx1ZyB0aHJvdWdoIGAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVYL29ubGluZWAgYW5kIHN1c3BlbmQvcmVzdW1lIGN5Y2xlcyB1c2luZyBgL3N5cy9wb3dlci9zdGF0ZWAuIFRoaXMgcmFpc2VzIGEgcmVkIGZsYWcuIFRoZSBmYWN0IHRoYXQgYW4gYXV0b21hdGVkIGZ1enplciBjYW4gaGl0IHRoZXNlIGNhbGxiYWNrIGZ1bmN0aW9ucyBtZWFucyB3ZSBuZWVkIHRvIGxvb2sgdmVyeSBjbG9zZWx5IGF0IHRoZSBjb2RlIHBhdGhzIGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgaW4gdGhlc2UgdHJhbnNpdGlvbnMuCgpOb3cgSSYjMzk7bSBnb2luZyB0byBzaGlmdCBteSBmb2N1cyB0byBgdGltZWtlZXBpbmdfcmVzdW1lYCBhbmQgdHJ5IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGltZWtlZXBpbmdfcmVzdW1lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L3hlbi9zdXNwZW5kLmM9NDA9c3RhdGljIHZvaWQgeGVuX3ZjcHVfbm90aWZ5X3Jlc3RvcmUodm9pZCAqZGF0YSlcbi0tXG5hcmNoL3g4Ni94ZW4vc3VzcGVuZC5jLTQ0LVxuYXJjaC94ODYveGVuL3N1c3BlbmQuYzo0NTpcdC8qIEJvb3QgcHJvY2Vzc29yIG5vdGlmaWVkIHZpYSBnZW5lcmljIHRpbWVrZWVwaW5nX3Jlc3VtZSgpICovXG5hcmNoL3g4Ni94ZW4vc3VzcGVuZC5jLTQ2LVx0aWYgKHNtcF9wcm9jZXNzb3JfaWQoKSA9PSAwKVxuLS1cbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmM9Mjk0OT1zdGF0aWMgdm9pZCBodl9zeW5pY19yZXN1bWUodm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jLTI5NTUtXHQgKiBvbiBDUFUwIGlzIG5vdCB1bmJvdW5kIGluIGh2X3N5bmljX3N1c3BlbmQoKSwgYW5kIHRoZSB0aW1lciBpc1xuZHJpdmVycy9odi92bWJ1c19kcnYuYzoyOTU2Olx0ICogYXV0b21hdGljYWxseSByZS1lbmFibGVkIGluIHRpbWVrZWVwaW5nX3Jlc3VtZSgpLlxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0yOTU3LVx0ICovXG4tLVxuZnMvdGltZXJmZC5jPTEyNT1zdGF0aWMgREVDTEFSRV9XT1JLKHRpbWVyZmRfd29yaywgdGltZXJmZF9yZXN1bWVfd29yayk7XG4tLVxuZnMvdGltZXJmZC5jLTEyNy0vKlxuZnMvdGltZXJmZC5jOjEyODogKiBJbnZva2VkIGZyb20gdGltZWtlZXBpbmdfcmVzdW1lKCkuIERlZmVyIHRoZSBhY3R1YWwgdXBkYXRlIHRvIHdvcmsgc29cbmZzL3RpbWVyZmQuYy0xMjktICogdGltZXJmZF9jbG9ja193YXNfc2V0KCkgcnVucyBpbiB0YXNrIGNvbnRleHQuXG4tLVxua2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYz04OTg9dm9pZCBjbG9ja3NvdXJjZV9zdGFydF9zdXNwZW5kX3RpbWluZyhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzLCB1NjQgc3RhcnRfY3ljbGVzKVxuLS1cbmtlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMtOTMwLSAqXG5rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jOjkzMTogKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBlYXJseSBpbiB0aGUgcmVzdW1lIHByb2Nlc3MgZnJvbSB0aW1la2VlcGluZ19yZXN1bWUoKSxcbmtlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMtOTMyLSAqIHRoYXQgbWVhbnMgdGhlcmUgaXMgb25seSBvbmUgY3B1LCBubyBwcm9jZXNzZXMgYXJlIHJ1bm5pbmcgYW5kIHRoZSBpbnRlcnJ1cHRzXG4tLVxua2VybmVsL3RpbWUvaHJ0aW1lci5jPTEwMTg9dm9pZCBjbG9ja193YXNfc2V0X2RlbGF5ZWQodm9pZClcbi0tXG5rZXJuZWwvdGltZS9ocnRpbWVyLmMtMTAyMy0vKlxua2VybmVsL3RpbWUvaHJ0aW1lci5jOjEwMjQ6ICogQ2FsbGVkIGR1cmluZyByZXN1bWUgZWl0aGVyIGRpcmVjdGx5IGZyb20gdmlhIHRpbWVrZWVwaW5nX3Jlc3VtZSgpXG5rZXJuZWwvdGltZS9ocnRpbWVyLmMtMTAyNS0gKiBvciBpbiB0aGUgY2FzZSBvZiBzMmlkbGUgZnJvbSB0aWNrX3VuZnJlZXplKCkgdG8gZW5zdXJlIHRoYXQgdGhlXG4tLVxua2VybmVsL3RpbWUvdGljay1jb21tb24uYz00ODU9dm9pZCB0aWNrX3N1c3BlbmQodm9pZClcbi0tXG5rZXJuZWwvdGltZS90aWNrLWNvbW1vbi5jLTQ5My0gKlxua2VybmVsL3RpbWUvdGljay1jb21tb24uYzo0OTQ6ICogQ2FsbGVkIGZyb20gc3lzY29yZV9yZXN1bWUoKSB2aWEgdGltZWtlZXBpbmdfcmVzdW1lIHdpdGggb25seSBvbmVcbmtlcm5lbC90aW1lL3RpY2stY29tbW9uLmMtNDk1LSAqIENQVSBvbmxpbmUgYW5kIGludGVycnVwdHMgZGlzYWJsZWQuXG4tLVxua2VybmVsL3RpbWUvdGljay1jb21tb24uYz01NTk9dm9pZCB0aWNrX3VuZnJlZXplKHZvaWQpXG4tLVxua2VybmVsL3RpbWUvdGljay1jb21tb24uYy01NjktXHRcdGxvY2tfbWFwX2FjcXVpcmVfdHJ5KFx1MDAyNnRpY2tfZnJlZXplX21hcCk7XG5rZXJuZWwvdGltZS90aWNrLWNvbW1vbi5jOjU3MDpcdFx0dGltZWtlZXBpbmdfcmVzdW1lKCk7XG5rZXJuZWwvdGltZS90aWNrLWNvbW1vbi5jLTU3MS1cdFx0c2NoZWRfY2xvY2tfcmVzdW1lKCk7XG4tLVxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYz0yMDA4PXN0YXRpYyBfX2luaXQgdm9pZCB0a2RfYmFzaWNfc2V0dXAoc3RydWN0IHRrX2RhdGEgKnRrZCwgZW51bSB0aW1la2VlcGVyX2lkcyB0a19pZCwgYm9vbCB2YWxpZClcbi0tXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jLTIwMTYtLypcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmM6MjAxNzogKiBGbGFnIHJlZmxlY3Rpbmcgd2hldGhlciB0aW1la2VlcGluZ19yZXN1bWUoKSBoYXMgaW5qZWN0ZWQgc2xlZXB0aW1lLlxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYy0yMDE4LSAqXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jLTIwMTktICogVGhlIGZsYWcgc3RhcnRzIG9mIGZhbHNlIGFuZCBpcyBvbmx5IHNldCB3aGVuIGEgc3VzcGVuZCByZWFjaGVzXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jOjIwMjA6ICogdGltZWtlZXBpbmdfc3VzcGVuZCgpLCB0aW1la2VlcGluZ19yZXN1bWUoKSBzZXRzIGl0IHRvIGZhbHNlIHdoZW4gdGhlXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jLTIwMjEtICogdGltZWtlZXBlciBjbG9ja3NvdXJjZSBpcyBub3Qgc3RvcHBpbmcgYWNyb3NzIHN1c3BlbmQgYW5kIGhhcyBiZWVuXG4tLVxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYy0yMDI1LSAqXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jOjIwMjY6ICogSWYgYSBzdXNwZW5kIGZhaWxzIGJlZm9yZSByZWFjaGluZyB0aW1la2VlcGluZ19yZXN1bWUoKSB0aGVuIHRoZSBmbGFnXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jLTIwMjctICogc3RheXMgZmFsc2UgYW5kIHByZXZlbnRzIGVycm9uZW91cyBzbGVlcHRpbWUgaW5qZWN0aW9uLlxuLS1cbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmM9MjEyNT1ib29sIHRpbWVrZWVwaW5nX3J0Y19za2lwcmVzdW1lKHZvaWQpXG4tLVxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYy0yMTMxLSAqIDEpIGNhbiBiZSBkZXRlcm1pbmVkIHdoZXRoZXIgdG8gdXNlIG9yIG5vdCBvbmx5IHdoZW4gZG9pbmdcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmM6MjEzMjogKiB0aW1la2VlcGluZ19yZXN1bWUoKSB3aGljaCBpcyBpbnZva2VkIGFmdGVyIHJ0Y19zdXNwZW5kKCksXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jLTIxMzMtICogc28gd2UgY2FuJiMzOTt0IHNraXAgcnRjX3N1c3BlbmQoKSBzdXJlbHkgaWYgc3lzdGVtIGhhcyAxKS5cbi0tXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jPTIxNTU9dm9pZCB0aW1la2VlcGluZ19pbmplY3Rfc2xlZXB0aW1lNjQoY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKmRlbHRhKVxuLS1cbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMtMjE3MS0vKipcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmM6MjE3MjogKiB0aW1la2VlcGluZ19yZXN1bWUgLSBSZXN1bWVzIHRoZSBnZW5lcmljIHRpbWVrZWVwaW5nIHN1YnN5c3RlbS5cbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMtMjE3My0gKi9cbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmM6MjE3NDp2b2lkIHRpbWVrZWVwaW5nX3Jlc3VtZSh2b2lkKVxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYy0yMTc1LXtcbi0tXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jPTIyMzk9c3RhdGljIHZvaWQgdGltZWtlZXBpbmdfc3lzY29yZV9yZXN1bWUodm9pZCAqZGF0YSlcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMtMjI0MC17XG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jOjIyNDE6XHR0aW1la2VlcGluZ19yZXN1bWUoKTtcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMtMjI0Mi19XG4tLVxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuaD0xNz1leHRlcm4gaW50IHRpbWVrZWVwaW5nX3N1c3BlbmQodm9pZCk7XG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5oOjE4OmV4dGVybiB2b2lkIHRpbWVrZWVwaW5nX3Jlc3VtZSh2b2lkKTtcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmgtMTktI2lmZGVmIENPTkZJR19HRU5FUklDX1NDSEVEX0NMT0NLXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAwMzcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEtWTS9TdXNwZW5kIEludGVyYWN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGB0aW1la2VlcGluZ19yZXN1bWVgIGlzIHRyaWdnZXJlZC4gSSBzZWUgaXTigJlzIGNhbGxlZCBieSBgdGltZWtlZXBpbmdfc3lzY29yZV9yZXN1bWVgLCB3aGljaCBpcyBhIHN5c2NvcmUgb3BlcmF0aW9uLCBvciBmcm9tIGB0aWNrX3VuZnJlZXplYC4gVGhhdCB0ZWxscyBtZSwgd2l0aG91dCBhIGRvdWJ0LCB0aGF0IHRoaXMgY29kZSBwYXRoIGlzIGFjdGl2ZSBkdXJpbmcgc3VzcGVuZCBhbmQgcmVzdW1lIG9wZXJhdGlvbnMuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gYGt2bWNsb2NrX2NwdV9hY3Rpb25gLiBJIHNlZSBpdHMgYmVpbmcgY2FsbGVkIGJ5IGBrdm1fZ3Vlc3RfY3B1X29mZmxpbmVgIGFuZCBgX19rdm1fY3B1X29ubGluZWAuIEEgZGVlcGVyIGRpdmUgc2hvd3MgdGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGVkIHRocm91Z2ggc2V2ZXJhbCBwb2ludHM6IGBrdm1fY3B1X2Rvd25fcHJlcGFyZWAsIGBrdm1fc3VzcGVuZGAsIGBrdm1fcmVzdW1lYCwgYGt2bV9wdl9ndWVzdF9jcHVfcmVib290YCwgYGt2bV9jcmFzaF9zaHV0ZG93bmAsIGFuZCBga3ZtX2NwdV9vbmxpbmVgLiBBbmQgdGhlc2UsIG9mIGNvdXJzZSwgYXJlIGFsbCB2YWxpZCBjYWxsIHBvaW50cyB3aXRoaW4gYSBLVk0gZ3Vlc3QgZW52aXJvbm1lbnQuCgpBbHJpZ2h0LCBzbyB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBuZWNlc3NhcnkgdG8gZXhwb3NlIHRoaXMgaW50ZXJhY3Rpb24/IEkmIzM5O20gdGhpbmtpbmc6IGBDT05GSUdfS1ZNX0dVRVNUYCwgYENPTkZJR19TVVNQRU5EYCwgYENPTkZJR19ISUJFUk5BVElPTmAsIGBDT05GSUdfSE9UUExVR19DUFVgLCBhbmQgYENPTkZJR19QQVJBVklSVGAuIEkgc2hvdWxkIHByb2JhYmx5IHdyaXRlIHRob3NlIGRvd24gdG8gYmUgc3VyZS4KCldhaXQsIHNob3VsZCBgQ09ORklHX0tWTV9HVUVTVGAgYmUgZXhwbGljaXRseSBlbmFibGVkLCBvciBpcyBpdCBhIGRlZmF1bHQ/IEkga25vdyBpdCYjMzk7cyBvZnRlbiBlbmFibGVkIGluIHN5emthbGxlciBjb25maWdzLCBidXQgbGV0JiMzOTtzIGJlIHRob3JvdWdoLiBJIHNob3VsZCBzcGVjaWZ5IGl0IHRvIGJlIGV4cGxpY2l0LiBJdCYjMzk7cyBhIGJvb2xlYW4sIGJ1dCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYnkgZ29pbmcgdG8gYGFyY2gveDg2L0tjb25maWdgLiBJIGRvbiYjMzk7dCB3YW50IHRvIG1ha2UgYXNzdW1wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9HVUVTVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWc9MjI9c291cmNlIFwmIzM0O2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWljcm93YXR0L0tjb25maWdcJiMzNDtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy0yMy1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZzoyNDpjb25maWcgS1ZNX0dVRVNUXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWctMjUtXHRib29sIFwmIzM0O0tWTSBHdWVzdCBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYvS2NvbmZpZz04MjY9c291cmNlIFwmIzM0O2FyY2gveDg2L3hlbi9LY29uZmlnXCYjMzQ7XG5hcmNoL3g4Ni9LY29uZmlnLTgyNy1cbmFyY2gveDg2L0tjb25maWc6ODI4OmNvbmZpZyBLVk1fR1VFU1RcbmFyY2gveDg2L0tjb25maWctODI5LVx0Ym9vbCBcJiMzNDtLVk0gR3Vlc3Qgc3VwcG9ydCAoaW5jbHVkaW5nIGt2bWNsb2NrKVwmIzM0O1xuLS1cbnZpcnQva3ZtL0tjb25maWc9MTAzPWNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuLS1cbnZpcnQva3ZtL0tjb25maWctMTA1LVxudmlydC9rdm0vS2NvbmZpZzoxMDY6Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDk3MwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIFN5emthbGxlciBUZXN0aW5nKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB0ZXN0cyBTeXprYWxsZXIgcnVucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB5ZXMsIGBDT05GSUdfS1ZNX0dVRVNUYCBzZWVtcyBsaWtlIHRoZSBwcmltYXJ5IGNvbmZpZyBoZXJlLiBUaGF0JiMzOTtzIGEgbm8tYnJhaW5lciBnaXZlbiBTeXprYWxsZXImIzM5O3MgdHlwaWNhbCBRRU1VL0tWTSBlbnZpcm9ubWVudC4KCkJ1dCwgSSBhbHNvIHNlZSBgQ09ORklHX0lOVEVMX1REWF9HVUVTVGAgYW5kIGBDT05GSUdfQU1EX01FTV9FTkNSWVBUYCAoc3BlY2lmaWNhbGx5IGZvciBTRVYtU05QKSBtZW50aW9uZWQuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyBgdGR4X3RzY19pbml0YCBhbmQgYHNucF9zZWN1cmVfdHNjX2luaXRgLiBIbW0sIGFyZSB0aG9zZSBldmVuICpyZWFjaGFibGUqIGluIGEgc3RhbmRhcmQgU3l6a2FsbGVyIGNvbnRleHQ/IFN5emthbGxlciB1c3VhbGx5IGlzbiYjMzk7dCBzZXQgdXAgd2l0aGluIFREWCBvciBTRVYtU05QIGVuY2xhdmVzLCBzbyBJJiMzOTttIG5vdCBpbW1lZGlhdGVseSBzZWVpbmcgYSBzdHJvbmcgY2FzZSBmb3IgdGhlbS4gSXQgbWlnaHQgYmUgYSBnb29kLXRvLWhhdmUsIGJ1dCB0aG9zZSBjb25maWdzIHdvdWxkIG5lZWQgc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGh5cGVydmlzb3Igc3VwcG9ydCwgd2hpY2ggSSBkb3VidCB0aGUgc3RhbmRhcmQgU3l6a2FsbGVyIFZNcyB3b3VsZCBoYXZlLiBMZXQmIzM5O3MgZmxhZyB0aGF0IGFzIGEgcG90ZW50aWFsIGVkZ2UgY2FzZS4KCkhvd2V2ZXIsIHRoZSBLVk0gZ3Vlc3QgY2hhbmdlc+KAlGxpa2UgdGhlIG9uZXMgcmVsYXRpbmcgdG8gYGt2bWNsb2NrX2NwdV9hY3Rpb25gLCBga3ZtY2xvY2tfaW5pdGAsIGFuZCBga3ZtX2dldF90c2Nfa2h6YOKAlHRob3NlIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgcmVsZXZhbnQuIFRoZSBzYW1lIGdvZXMgZm9yIEh5cGVyLVYgZ3Vlc3QgYWRqdXN0bWVudHMgKGBodl9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYCwgYGh2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVgKSBhbmQgdGhvc2UgZm9yIFZNd2FyZS4gU3l6a2FsbGVyJiMzOTtzIHJlbGlhbmNlIG9uIFFFTVUvS1ZNIG1ha2VzIGBDT05GSUdfS1ZNX0dVRVNUYCB0aGUgbW9zdCBjcml0aWNhbCBjb25maWd1cmF0aW9uLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgYENPTkZJR19QQVJBVklSVGAgbWFrZXMgc2Vuc2UgaGVyZSBhcyB3ZWxsLCBzaW5jZSB0aGF0IGhhcyBzb21lIG92ZXJsYXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQVJBVklSVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9LY29uZmlnPTEzMDk9Y29uZmlnIFVBQ0NFU1NfV0lUSF9NRU1DUFlcbi0tXG5hcmNoL2FybS9LY29uZmlnLTEzMjQtXG5hcmNoL2FybS9LY29uZmlnOjEzMjU6Y29uZmlnIFBBUkFWSVJUXG5hcmNoL2FybS9LY29uZmlnLTEzMjYtXHRib29sIFwmIzM0O0VuYWJsZSBwYXJhdmlydHVhbGl6YXRpb24gY29kZVwmIzM0O1xuLS1cbmFyY2gvYXJtL0tjb25maWctMTMzMi1cbmFyY2gvYXJtL0tjb25maWc6MTMzMzpjb25maWcgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HXG5hcmNoL2FybS9LY29uZmlnLTEzMzQtXHRib29sIFwmIzM0O1BhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1wmIzM0O1xuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0xNjE1PWNvbmZpZyBDQ19IQVZFX1NIQURPV19DQUxMX1NUQUNLXG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTE2MTctXG5hcmNoL2FybTY0L0tjb25maWc6MTYxODpjb25maWcgUEFSQVZJUlRcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNjE5LVx0Ym9vbCBcJiMzNDtFbmFibGUgcGFyYXZpcnR1YWxpemF0aW9uIGNvZGVcJiMzNDtcbi0tXG5hcmNoL2FybTY0L0tjb25maWctMTYyNS1cbmFyY2gvYXJtNjQvS2NvbmZpZzoxNjI2OmNvbmZpZyBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNjI3LVx0Ym9vbCBcJiMzNDtQYXJhdmlydHVhbCBzdGVhbCB0aW1lIGFjY291bnRpbmdcJiMzNDtcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnPTc0Mz1zb3VyY2UgXCYjMzQ7a2VybmVsL2xpdmVwYXRjaC9LY29uZmlnXCYjMzQ7XG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTc0NC1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6NzQ1OmNvbmZpZyBQQVJBVklSVFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy03NDYtXHRib29sIFwmIzM0O0VuYWJsZSBwYXJhdmlydHVhbGl6YXRpb24gY29kZVwmIzM0O1xuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNzU0LVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo3NTU6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy03NTYtXHRib29sIFwmIzM0O1BhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1wmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnPTI9Y29uZmlnIFBQQ19QU0VSSUVTXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWctMjktXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZzozMDpjb25maWcgUEFSQVZJUlRcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnLTMxLVx0Ym9vbFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWctMzItXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZzozMzpjb25maWcgUEFSQVZJUlRfU1BJTkxPQ0tTXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZy0zNC1cdGJvb2xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnLTM1LVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWc6MzY6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWctMzctXHRzZWxlY3QgUEFSQVZJUlRcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTExND1jb25maWcgQ09NUEFUXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTExMjUtXG5hcmNoL3Jpc2N2L0tjb25maWc6MTEyNjpjb25maWcgUEFSQVZJUlRcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMTI3LVx0Ym9vbCBcJiMzNDtFbmFibGUgcGFyYXZpcnR1YWxpemF0aW9uIGNvZGVcJiMzNDtcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWctMTEzNC1cbmFyY2gvcmlzY3YvS2NvbmZpZzoxMTM1OmNvbmZpZyBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMTM2LVx0Ym9vbCBcJiMzNDtQYXJhdmlydHVhbCBzdGVhbCB0aW1lIGFjY291bnRpbmdcJiMzNDtcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTc5Mz1pZiBIWVBFUlZJU09SX0dVRVNUXG5hcmNoL3g4Ni9LY29uZmlnLTc5NC1cbmFyY2gveDg2L0tjb25maWc6Nzk1OmNvbmZpZyBQQVJBVklSVFxuYXJjaC94ODYvS2NvbmZpZy03OTYtXHRib29sIFwmIzM0O0VuYWJsZSBwYXJhdmlydHVhbGl6YXRpb24gY29kZVwmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWctODA0LVxuYXJjaC94ODYvS2NvbmZpZzo4MDU6Y29uZmlnIFBBUkFWSVJUX1hYTFxuYXJjaC94ODYvS2NvbmZpZy04MDYtXHRib29sXG4tLVxuYXJjaC94ODYvS2NvbmZpZy04MDktXG5hcmNoL3g4Ni9LY29uZmlnOjgxMDpjb25maWcgUEFSQVZJUlRfU1BJTkxPQ0tTXG5hcmNoL3g4Ni9LY29uZmlnLTgxMS1cdGJvb2wgXCYjMzQ7UGFyYXZpcnR1YWxpemF0aW9uIGxheWVyIGZvciBzcGlubG9ja3NcJiMzNDtcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTg0OD1jb25maWcgUFZIXG4tLVxuYXJjaC94ODYvS2NvbmZpZy04NTMtXG5hcmNoL3g4Ni9LY29uZmlnOjg1NDpjb25maWcgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HXG5hcmNoL3g4Ni9LY29uZmlnLTg1NS1cdGJvb2wgXCYjMzQ7UGFyYXZpcnR1YWwgc3RlYWwgdGltZSBhY2NvdW50aW5nXCYjMzQ7XG4tLVxuYXJjaC94ODYvS2NvbmZpZy04NjQtXG5hcmNoL3g4Ni9LY29uZmlnOjg2NTpjb25maWcgUEFSQVZJUlRfQ0xPQ0tcbmFyY2gveDg2L0tjb25maWctODY2LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjc0OAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDMyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVFNDIENhbGlicmF0aW9uIENoYW5nZXMgZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIGBDT05GSUdfUEFSQVZJUlRgIGxvb2tzIHByb21pc2luZyBhcyBhIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiBgYXJjaC94ODYva2VybmVsL3RzYy5jYC4gU3BlY2lmaWNhbGx5LCBgbmF0aXZlX2NhbGlicmF0ZV90c2NgIGlzIG5vdyBsZXZlcmFnaW5nIGBjcHVpZF9nZXRfdHNjX2luZm9gLCB3aGljaCBpcyBhIGJyYW5kLW5ldyBmdW5jdGlvbi4gSW50ZXJlc3RpbmcuIEFkZGl0aW9uYWxseSwgSSBzZWUgdGhhdCBgdHNjX2Vhcmx5X2luaXRgIGhhcyBiZWVuIG1vZGlmaWVkIGFuZCBgX19wYXJhdmlydF9zZXRfc2NoZWRfY2xvY2tgIGhhcyBiZWVuIGludHJvZHVjZWQsIGFsb25nc2lkZSBzb21lIGNoYW5nZXMgdG8gYGRldGVybWluZV9jcHVfdHNjX2ZyZXF1ZW5jaWVzYC4KClRoZSBrZXkgcXVlc3Rpb24gaXMsIGNhbiBJIGZ1enogYGNwdWlkX2dldF90c2NfaW5mb2Agd2l0aCBzeXprYWxsZXI/IFRoZSBpbml0aWFsIHRob3VnaHQgaXMgbm8sIGFzIGl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgZWFybHkgYm9vdC4gSG93ZXZlciwgdGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgdGltZWtlZXBpbmdfcmVzdW1lYCBhbmQgYGt2bWNsb2NrX2NwdV9hY3Rpb25gLCB3aGljaCBhcmUgY2xlYXJseSByZWFjaGFibGUgZHVyaW5nIHN1c3BlbmQvcmVzdW1lIGN5Y2xlcyBhbmQgQ1BVIGhvdHBsdWcgZXZlbnRzLiBUaGF0IGNoYW5nZXMgdGhpbmdzOyBzeXprYWxsZXIgKmNhbiogbGlrZWx5IHRyaWdnZXIgdGhlc2UgbGF0ZXIgc3RhZ2VzLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgcGF0aHdheSB0byBleHBsb2l0LgoKVGhlcmVmb3JlLCBJIG5lZWQgdG8gaWRlbnRpZnkga2V5IHN5bWJvbHMgZm9yIGZvY3VzZWQgZnV6emluZy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzb2xpZCBsaXN0OiBga3ZtY2xvY2tfY3B1X2FjdGlvbmAsIGBrdm1fc3VzcGVuZGAsIGBrdm1fcmVzdW1lYCwgYW5kIGB0aW1la2VlcGluZ19yZXN1bWVgLiBXZSBjYW4gYWRkIGBrdm1fY3B1X29ubGluZWAgYW5kIGBrdm1fY3B1X2Rvd25fcHJlcGFyZWAgdG8gdGhlIGxpc3QuIEkmIzM5O20gYSBsaXR0bGUgaGVzaXRhbnQgYWJvdXQgaW5jbHVkaW5nIGBfX3BhcmF2aXJ0X3NldF9zY2hlZF9jbG9ja2AgYmVjYXVzZSBpdCYjMzk7cyBtYXJrZWQgYXMgYF9faW5pdGAsIHdoaWNoIG1pZ2h0IG1ha2UgaXQgaGFyZGVyIHRvIHRhcmdldC4gTm93LCBJIHdhbnQgdG8gc2VlIGlmIGB0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAgYW5kIGB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZWAgYXJlIHJlYWNoYWJsZSwgYXMgdGhlc2UgYXJlIHBvdGVudGlhbGx5IGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vdHNjLmg9MTEyPWV4dGVybiBpbnQgbm90c2Nfc2V0dXAoY2hhciAqKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RzYy5oOjExMzpleHRlcm4gdm9pZCB0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RzYy5oLTExNC1leHRlcm4gdm9pZCB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvdHNjLmM9OTYxPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB0c2NfaXNfc2F2ZV9yZXN0b3JlX25lZWRlZCh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC90c2MuYy05NjgtXG5hcmNoL3g4Ni9rZXJuZWwvdHNjLmM6OTY5OnZvaWQgdHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcbmFyY2gveDg2L2tlcm5lbC90c2MuYy05NzAte1xuLS1cbmFyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jPTE0OT1zdHJ1Y3QgeDg2X3BsYXRmb3JtX29wcyB4ODZfcGxhdGZvcm0gX19yb19hZnRlcl9pbml0ID0ge1xuLS1cbmFyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jLTE1NS1cdC5nZXRfbm1pX3JlYXNvblx0XHRcdD0gZGVmYXVsdF9nZXRfbm1pX3JlYXNvbixcbmFyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jOjE1NjpcdC5zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlXHRcdD0gdHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUsXG5hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYy0xNTctXHQucmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZVx0PSB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM4NjkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVzZSBvZiBgc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAgYW5kIGByZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYCoqCgpPa2F5LCBzbyBJIHNlZSB0aGVzZSBmdW5jdGlvbnMsIGB4ODZfcGxhdGZvcm0uc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAgYW5kIGByZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYCwgYXJlIGRlZmluaXRlbHkgYmVpbmcgdXNlZC4gVGhlIGNvbnRleHQgdGVsbHMgbWUgdGhleSBhcmUgbGlua2VkIHRvIHN1c3BlbmQgYW5kIHJlc3VtZSBvcGVyYXRpb25zLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBJIHN1c3BlY3RlZCB0aGV5JiMzOTtkIGJlIHRpZWQgdG8gcG93ZXIgbWFuYWdlbWVudCBpbiBzb21lIHdheS4KCk5vdywgSSByZWFsbHkgbmVlZCB0byBkcmlsbCBkb3duIGFuZCB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBjYWxsaW5nIGNvbnRleHQuIE15IG5leHQgc3RlcCBpcyB0byBwaW5wb2ludCB0aGUgZXhhY3QgbG9jYXRpb25zIHdoZXJlIGB4ODZfcGxhdGZvcm0uc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAgaXMgaW52b2tlZC4gVGhpcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBpbnNpZ2h0cyBpbnRvIGhvdyB0aGUgc2NoZWR1bGVyIGNsb2NrIHN0YXRlIGlzIGJlaW5nIG1hbmFnZWQgZHVyaW5nIHN5c3RlbSB0cmFuc2l0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGtleSB0byBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHksIGVzcGVjaWFsbHkgb24geDg2IHBsYXRmb3Jtcy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZXhlY3V0aW9uIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vdHNjLmg9MTEyPWV4dGVybiBpbnQgbm90c2Nfc2V0dXAoY2hhciAqKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RzYy5oOjExMzpleHRlcm4gdm9pZCB0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RzYy5oLTExNC1leHRlcm4gdm9pZCB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oPTI4OT1zdHJ1Y3QgeDg2X2h5cGVyX3J1bnRpbWUge1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgtMzAzLSAqIEBnZXRfbm1pX3JlYXNvbjpcdFx0Z2V0IHRoZSByZWFzb24gYW4gTk1JIHdhcyByZWNlaXZlZFxuYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaDozMDQ6ICogQHNhdmVfc2NoZWRfY2xvY2tfc3RhdGU6XHRzYXZlIHN0YXRlIGZvciBzY2hlZF9jbG9jaygpIG9uIHN1c3BlbmRcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgtMzA1LSAqIEByZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlOlx0cmVzdG9yZSBzdGF0ZSBmb3Igc2NoZWRfY2xvY2soKSBvbiByZXN1bWVcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oPTMyMD1zdHJ1Y3QgeDg2X3BsYXRmb3JtX29wcyB7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaC0zMjYtXHR1bnNpZ25lZCBjaGFyICgqZ2V0X25taV9yZWFzb24pKHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaDozMjc6XHR2b2lkICgqc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSkodm9pZCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oLTMyOC1cdHZvaWQgKCpyZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKSh2b2lkKTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYz0xMzI9c3RhdGljIG5vaW5zdHIgdTY0IGt2bV9zY2hlZF9jbG9ja19yZWFkKHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtMTM2LVxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM6MTM3OnN0YXRpYyB2b2lkIGt2bV9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy0xMzgte1xuLS1cbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jPTM1ND1zdGF0aWMgX19pbml0IHZvaWQga3ZtX3NjaGVkX2Nsb2NrX2luaXQoYm9vbCBzdGFibGUpXG4tLVxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtMzU5LVx0aWYgKF9fcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKGt2bV9zY2hlZF9jbG9ja19yZWFkLCBzdGFibGUsXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzozNjA6XHRcdFx0XHQgICAgICAga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUsXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy0zNjEtXHRcdFx0XHQgICAgICAga3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUpKVxuLS1cbmFyY2gveDg2L2tlcm5lbC90c2MuYz0yODM9aW50IF9faW5pdCBfX3BhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh1NjQgKCpmdW5jKSh2b2lkKSwgYm9vbCBzdGFibGUsXG4tLVxuYXJjaC94ODYva2VybmVsL3RzYy5jLTI5OC1cdHN0YXRpY19jYWxsX3VwZGF0ZShwdl9zY2hlZF9jbG9jaywgZnVuYyk7XG5hcmNoL3g4Ni9rZXJuZWwvdHNjLmM6Mjk5Olx0eDg2X3BsYXRmb3JtLnNhdmVfc2NoZWRfY2xvY2tfc3RhdGUgPSBzYXZlO1xuYXJjaC94ODYva2VybmVsL3RzYy5jLTMwMC1cdHg4Nl9wbGF0Zm9ybS5yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlID0gcmVzdG9yZTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvdHNjLmM9OTYxPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB0c2NfaXNfc2F2ZV9yZXN0b3JlX25lZWRlZCh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC90c2MuYy05NjgtXG5hcmNoL3g4Ni9rZXJuZWwvdHNjLmM6OTY5OnZvaWQgdHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcbmFyY2gveDg2L2tlcm5lbC90c2MuYy05NzAte1xuLS1cbmFyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jPTE0OT1zdHJ1Y3QgeDg2X3BsYXRmb3JtX29wcyB4ODZfcGxhdGZvcm0gX19yb19hZnRlcl9pbml0ID0ge1xuLS1cbmFyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jLTE1NS1cdC5nZXRfbm1pX3JlYXNvblx0XHRcdD0gZGVmYXVsdF9nZXRfbm1pX3JlYXNvbixcbmFyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jOjE1NjpcdC5zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlXHRcdD0gdHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUsXG5hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYy0xNTctXHQucmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZVx0PSB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSxcbi0tXG5hcmNoL3g4Ni9wb3dlci9jcHUuYz0xMzU9dm9pZCBzYXZlX3Byb2Nlc3Nvcl9zdGF0ZSh2b2lkKVxuLS1cbmFyY2gveDg2L3Bvd2VyL2NwdS5jLTEzNy1cdF9fc2F2ZV9wcm9jZXNzb3Jfc3RhdGUoXHUwMDI2c2F2ZWRfY29udGV4dCk7XG5hcmNoL3g4Ni9wb3dlci9jcHUuYzoxMzg6XHR4ODZfcGxhdGZvcm0uc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSgpO1xuYXJjaC94ODYvcG93ZXIvY3B1LmMtMTM5LX1cbi0tXG5kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jPTU0Nj1zdGF0aWMgdTY0IGh2X3JlZl9jb3VudGVyX2F0X3N1c3BlbmQ7XG4tLVxuZHJpdmVycy9jbG9ja3NvdXJjZS9oeXBlcnZfdGltZXIuYy01NTMtICovXG5kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jOjU1NDpzdGF0aWMgdm9pZCBodl9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXG5kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jLTU1NS17XG4tLVxuZHJpdmVycy9jbG9ja3NvdXJjZS9oeXBlcnZfdGltZXIuYz01NzA9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGh2X3NldHVwX3NjaGVkX2Nsb2NrKHZvaWQgKnNjaGVkX2Nsb2NrKVxuLS1cbmRyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmMtNTcyLVx0LyogV2UmIzM5O3JlIG9uIHg4Ni94NjQgKmFuZCogdXNpbmcgUFYgb3BzICovXG5kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jOjU3MzpcdHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayhzY2hlZF9jbG9jaywgaHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSxcbmRyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmMtNTc0LVx0XHRcdFx0IGh2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTU5MgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDIxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEtWTSBDbG9jayBJc3N1ZXMgRHVyaW5nIFN1c3BlbmQvUmVzdW1lKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoaXMgeDg2IHN1c3BlbmQvcmVzdW1lIHBhdGguIE15IHRob3VnaHQgcHJvY2VzcyBpcyBjZW50ZXJlZCBvbiB3aGVyZSBwb3RlbnRpYWwgS1ZNIGNsb2NrIGlzc3VlcyBtaWdodCBhcmlzZS4gSSBzZWUgdGhhdCBgeDg2X3BsYXRmb3JtLnNhdmVfc2NoZWRfY2xvY2tfc3RhdGUoKWAgaXMgY2FsbGVkIGZyb20gYHNhdmVfcHJvY2Vzc29yX3N0YXRlKClgIHdpdGhpbiBgYXJjaC94ODYvcG93ZXIvY3B1LmNgLiBHaXZlbiB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcGFydCBvZiBgc2F2ZV9wcm9jZXNzb3Jfc3RhdGVgLCBhbmQgdGhhdCBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSB4ODYgcG93ZXIgbWFuYWdlbWVudCwgdGhhdCBjYWxsICppcyogZGVmaW5pdGVseSBwYXJ0IG9mIHRoZSBzdXNwZW5kIHByb2Nlc3MuCgpOb3csIEkmIzM5O20gZ29pbmcgYmFjayBvdmVyIGBrdm1jbG9ja19jcHVfYWN0aW9uYC4gUmlnaHQsIGl0JiMzOTtzIGNhbGxlZCBieSBga3ZtX2d1ZXN0X2NwdV9vZmZsaW5lYCBhbmQgYF9fa3ZtX2NwdV9vbmxpbmVgLiBMb29raW5nIGF0IHRob3NlIGZ1bmN0aW9ucywgdGhleSBhcmUgY2FsbGVkIGZyb20gYGt2bV9jcHVfZG93bl9wcmVwYXJlYCwgYGt2bV9zdXNwZW5kYCwgYGt2bV9yZXN1bWVgLCBga3ZtX3B2X2d1ZXN0X2NwdV9yZWJvb3RgLCBga3ZtX2NyYXNoX3NodXRkb3duYCwgYW5kIGBrdm1fY3B1X29ubGluZWAuIFNvLCB0aGUgcGF0aCAqaXMqIHJlYWNoYWJsZSBkdXJpbmcgdGhpcyBwcm9jZXNzLCBtYWtpbmcgdGhpcyBhbiBpbnRlcmVzdGluZyBwb2ludCB0byBhbmFseXplLgoKSSYjMzk7bSBhbHNvIGxvb2tpbmcgYXQgYHRpbWVrZWVwaW5nX3Jlc3VtZWAuIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBmcm9tIGB0aW1la2VlcGluZ19zeXNjb3JlX3Jlc3VtZWAgYW5kIGB0aWNrX3VuZnJlZXplYC4gQm90aCBhcmUgcHJldHR5IHN0YW5kYXJkIHBhcnRzIG9mIGEgcmVzdW1lIGN5Y2xlLCBzbyB0aGUgcGF0aCB0aHJvdWdoIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSByZWFjaGFibGUuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBhY3R1YWwgYGt2bWNsb2NrX3N1c3BlbmRgIGFuZCBga3ZtY2xvY2tfcmVzdW1lYCBmdW5jdGlvbnMsIHRvIGNoZWNrIG9uIHRoZSBkZXRhaWxzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1jbG9ja19zdXNwZW5kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jPTU0PUVYUE9SVF9QRVJfQ1BVX1NZTUJPTF9HUEwoaHZfY2xvY2tfcGVyX2NwdSk7XG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy01NS1cbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jOjU2OnN0YXRpYyBib29sIGt2bWNsb2NrX3N1c3BlbmRlZDtcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTU3LVxuLS1cbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jPTYzPXN0YXRpYyB2b2lkIGt2bV9nZXRfd2FsbGNsb2NrKHN0cnVjdCB0aW1lc3BlYzY0ICpub3cpXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy02NC17XG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzo2NTpcdFdBUk5fT05fT05DRShrdm1jbG9ja19zdXNwZW5kZWQpO1xuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtNjYtXHR3cm1zcnEobXNyX2t2bV93YWxsX2Nsb2NrLCBzbG93X3ZpcnRfdG9fcGh5cyhcdTAwMjZ3YWxsX2Nsb2NrKSk7XG4tLVxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM9MTM3PXN0YXRpYyB2b2lkIGt2bV9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtMTQ1LVx0ICovXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzoxNDY6XHRrdm1jbG9ja19zdXNwZW5kZWQgPSB0cnVlO1xuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtMTQ3LVx0a3ZtY2xvY2tfZGlzYWJsZSgpO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jPTE1Nz1zdGF0aWMgdm9pZCBrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtMTU4LXtcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jOjE1OTpcdGt2bWNsb2NrX3N1c3BlbmRlZCA9IGZhbHNlO1xuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtMTYwLVx0a3ZtX3JlZ2lzdGVyX2Nsb2NrKFwmIzM0O3ByaW1hcnkgY3B1LCBzY2hlZF9jbG9jayByZXN1bWVcJiMzNDspO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTE2Mi1cbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jOjE2MzpzdGF0aWMgdm9pZCBrdm1jbG9ja19zdXNwZW5kKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy0xNjQte1xuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM6MTY1Olx0a3ZtY2xvY2tfc3VzcGVuZGVkID0gdHJ1ZTtcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTE2Ni1cdGt2bWNsb2NrX2Rpc2FibGUoKTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYz0xNjk9c3RhdGljIHZvaWQga3ZtY2xvY2tfcmVzdW1lKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy0xNzAte1xuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM6MTcxOlx0a3ZtY2xvY2tfc3VzcGVuZGVkID0gZmFsc2U7XG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy0xNzItXHRrdm1fcmVnaXN0ZXJfY2xvY2soXCYjMzQ7cHJpbWFyeSBjcHUsIGNsb2Nrc291cmNlIHJlc3VtZVwmIzM0Oyk7XG4tLVxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM9MjU1PXN0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2Uga3ZtX2Nsb2NrID0ge1xuLS1cbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTI2My1cdC5lbmFibGVcdFx0PSBrdm1fY3NfZW5hYmxlLFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM6MjY0Olx0LnN1c3BlbmRcdD0ga3ZtY2xvY2tfc3VzcGVuZCxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTI2NS1cdC5yZXN1bWVcdFx0PSBrdm1jbG9ja19yZXN1bWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MDE4CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogODk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEtWTSBDbG9jayBTb3VyY2UgU3VzcGVuZC9SZXN1bWUgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGl0JiMzOTtzIGNsZWFyIHRoYXQgYGt2bWNsb2NrX3N1c3BlbmRgIGFuZCBga3ZtY2xvY2tfcmVzdW1lYCBhcmUgaW5kZWVkIGNhbGxiYWNrcyBmb3IgdGhlIGNsb2Nrc291cmNlIHN1c3BlbmQvcmVzdW1lIHByb2Nlc3MsIG1lYW5pbmcgdGhleSYjMzk7cmUgZXhlY3V0ZWQgZHVyaW5nIHRoZXNlIGNyaXRpY2FsIHN5c3RlbSB0cmFuc2l0aW9ucy4gVGhhdCYjMzk7cyBnb29kOyBpdCBtZWFucyB3ZSBjYW4gcG90ZW50aWFsbHkgZnV6eiB0aGVtLgoKVGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZTogYGt2bWNsb2NrX2NwdV9hY3Rpb25gLCBga3ZtY2xvY2tfc3VzcGVuZGAsIGBrdm1jbG9ja19yZXN1bWVgLCBgdGltZWtlZXBpbmdfcmVzdW1lYCwgYHRzY19zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYCwgYHRzY19yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYCwgYGt2bV9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYCwgYW5kIGBrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZWAuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVgIGFuZCBga3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVgIGFyZSBzdGF0aWMuIEFoLCB5ZXMsIHRoZXkgYXJlLCBmb3VuZCBpbiBgYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmNgLiBTaW5jZSB0aGV5JiMzOTtyZSByZWFjaGFibGUgYW5kIHN0YXRpYywgU3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IHRhcmdldCB0aGVtIGVmZmVjdGl2ZWx5LgoKTm93LCBsZXQmIzM5O3Mgc2VlIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gV2UgbmVlZCBgQ09ORklHX0tWTV9HVUVTVGAsIGBDT05GSUdfU1VTUEVORGAsIGBDT05GSUdfSElCRVJOQVRJT05gLCBgQ09ORklHX0hPVFBMVUdfQ1BVYCwgYW5kIGBDT05GSUdfUEFSQVZJUlRgLgoKYENPTkZJR19TVVNQRU5EYCwgYENPTkZJR19ISUJFUk5BVElPTmAsIGFuZCBgQ09ORklHX0hPVFBMVUdfQ1BVYCBhcmUgcHJldHR5IHN0YW5kYXJkIGNvbmZpZ3VyYXRpb25zLCB0aG91Z2guIEJhc2VkIG9uIHRoZSBpbnN0cnVjdGlvbnMsIEkgc2hvdWxkIHByb2JhYmx5IG9ubHkgbGlzdCBjb25maWdzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBtb2RpZmllZCBjb2RlLgoKU28sIGxldCYjMzk7cyBjaGVjayB3aGF0JiMzOTtzIGFjdHVhbGx5IGJlZW4gbW9kaWZpZWQuIGB0aW1la2VlcGluZ19yZXN1bWVgIGlzIG1vZGlmaWVkOyBpdCBub3cgY2FsbHMgYHJlYWRfcGVyc2lzdGVudF9jbG9jazY0YCBhZnRlciBgY2xvY2tldmVudHNfcmVzdW1lYCBhbmQgYGNsb2Nrc291cmNlX3Jlc3VtZWAuIEdvb2QuCgpga3ZtY2xvY2tfY3B1X2FjdGlvbmAgaGFzIGJlZW4gYWRkZWQsIGFuZCBpdCBoYW5kbGVzIGNydWNpYWwgc3RhdGVzOiBgS1ZNX0dVRVNUX0JTUF9TVVNQRU5EYCwgYEtWTV9HVUVTVF9CU1BfUkVTVU1FYCwgYEtWTV9HVUVTVF9BUF9PTkxJTkVgLCBgS1ZNX0dVRVNUX0FQX09GRkxJTkVgLCBhbmQgYEtWTV9HVUVTVF9TSFVURE9XTmAuCgpZZXAsIGBrdm1jbG9ja19zdXNwZW5kYCBhbmQgYGt2bWNsb2NrX3Jlc3VtZWAgYXJlIGRlZmluaXRlbHkgbmV3IGFkZGl0aW9ucyBhcyB3ZWxsLgoKQW5kIGZpbmFsbHksIGB0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAgYW5kIGB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZWAgYXJlIG1vZGlmaWVkIHRvIHVzZSBgdHNjX2lzX3NhdmVfcmVzdG9yZV9uZWVkZWQoKWAuCgpUaGUgYGt2bV9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYCBhbmQgYGt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYCBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkIHRvIHNldCBga3ZtY2xvY2tfc3VzcGVuZGVkYCBhbmQgY2FsbCBga3ZtY2xvY2tfZGlzYWJsZWAgLyBga3ZtX3JlZ2lzdGVyX2Nsb2NrYC4KCkdpdmVuIGFsbCBvZiB0aGlzLCB0aGUgcGF0Y2ggZGVmaW5pdGVseSBzZWVtcyBmdW5jdGlvbmFsIGFuZCBpcyBhIHN0cm9uZyBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpUaGVyZWZvcmUsIHRoZSBmb2N1cyBzeW1ib2xzIGFyZToKYGt2bWNsb2NrX2NwdV9hY3Rpb25gCmBrdm1jbG9ja19zdXNwZW5kYApga3ZtY2xvY2tfcmVzdW1lYApgdGltZWtlZXBpbmdfcmVzdW1lYApgdHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVgCmB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZWAKYGt2bV9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYApga3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVgCgpBbmQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIChzcGVjaWZpYyB0byB0aGUgbW9kaWZpZWQgY29kZSkgYXJlOgpgS1ZNX0dVRVNUYApgUEFSQVZJUlRgCgpJIHNob3VsZCBkb3VibGUtY2hlY2sgYWJvdXQgYENPTkZJR19IWVBFUlZgIG9yIGBDT05GSUdfSFlQRVJWX1RJTUVSYCwganVzdCBpbiBjYXNlLCBnaXZlbiB0aGUgbWVudGlvbiBvZiBIeXBlci1WLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFlQRVJWJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9NzcxPWNvbmZpZyBTQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVJcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTc4Mi1cbmFyY2gveDg2L0tjb25maWc6NzgzOm1lbnVjb25maWcgSFlQRVJWSVNPUl9HVUVTVFxuYXJjaC94ODYvS2NvbmZpZy03ODQtXHRib29sIFwmIzM0O0xpbnV4IGd1ZXN0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2h2L0tjb25maWc9Mz1tZW51IFwmIzM0O01pY3Jvc29mdCBIeXBlci1WIGd1ZXN0IHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvaHYvS2NvbmZpZy00LVxuZHJpdmVycy9odi9LY29uZmlnOjU6Y29uZmlnIEhZUEVSVlxuZHJpdmVycy9odi9LY29uZmlnLTYtXHRib29sIFwmIzM0O01pY3Jvc29mdCBIeXBlci1WIGNvcmUgaHlwZXJ2aXNvciBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9odi9LY29uZmlnLTE2LVxuZHJpdmVycy9odi9LY29uZmlnOjE3OmNvbmZpZyBIWVBFUlZfVlRMX01PREVcbmRyaXZlcnMvaHYvS2NvbmZpZy0xOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIExpbnV4IHRvIGJvb3QgaW4gVlRMIGNvbnRleHRcJiMzNDtcbi0tXG5kcml2ZXJzL2h2L0tjb25maWctNDItXG5kcml2ZXJzL2h2L0tjb25maWc6NDM6Y29uZmlnIEhZUEVSVl9USU1FUlxuZHJpdmVycy9odi9LY29uZmlnLTQ0LVx0ZGVmX2Jvb2wgSFlQRVJWIFx1MDAyNlx1MDAyNiBYODZcbmRyaXZlcnMvaHYvS2NvbmZpZy00NS1cbmRyaXZlcnMvaHYvS2NvbmZpZzo0Njpjb25maWcgSFlQRVJWX1VUSUxTXG5kcml2ZXJzL2h2L0tjb25maWctNDctXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgSHlwZXItViBVdGlsaXRpZXMgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9odi9LY29uZmlnLTUyLVxuZHJpdmVycy9odi9LY29uZmlnOjUzOmNvbmZpZyBIWVBFUlZfQkFMTE9PTlxuZHJpdmVycy9odi9LY29uZmlnLTU0LVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9zb2Z0IEh5cGVyLVYgQmFsbG9vbiBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2h2L0tjb25maWctNTktXG5kcml2ZXJzL2h2L0tjb25maWc6NjA6Y29uZmlnIEhZUEVSVl9WTUJVU1xuZHJpdmVycy9odi9LY29uZmlnLTYxLVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9zb2Z0IEh5cGVyLVYgVk1CdXMgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTI0ND1jb25maWcgU0VSSU9fT0xQQ19BUFNQXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI1My1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoyNTQ6Y29uZmlnIEhZUEVSVl9LRVlCT0FSRFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI1NS1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc29mdCBTeW50aGV0aWMgS2V5Ym9hcmQgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnOjI6Y29uZmlnIEhZUEVSVl9ORVRcbmRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgSHlwZXItViB2aXJ0dWFsIG5ldHdvcmsgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9zY3NpL0tjb25maWc9NTc3PWNvbmZpZyBYRU5fU0NTSV9GUk9OVEVORFxuLS1cbmRyaXZlcnMvc2NzaS9LY29uZmlnLTU4Ni1cbmRyaXZlcnMvc2NzaS9LY29uZmlnOjU4Nzpjb25maWcgSFlQRVJWX1NUT1JBR0VcbmRyaXZlcnMvc2NzaS9LY29uZmlnLTU4OC1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc29mdCBIeXBlci1WIHZpcnR1YWwgc3RvcmFnZSBkcml2ZXJcJiMzNDtcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zz0zNTQyPWNvbmZpZyBNRU1URVNUXG4tLVxubGliL0tjb25maWcuZGVidWctMzU1NS1cbmxpYi9LY29uZmlnLmRlYnVnOjM1NTY6Y29uZmlnIEhZUEVSVl9URVNUSU5HXG5saWIvS2NvbmZpZy5kZWJ1Zy0zNTU3LVx0Ym9vbCBcJiMzNDtNaWNyb3NvZnQgSHlwZXItViBkcml2ZXIgdGVzdGluZ1wmIzM0O1xuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZz02Nj1jb25maWcgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZy03Mi1cbm5ldC92bXdfdnNvY2svS2NvbmZpZzo3Mzpjb25maWcgSFlQRVJWX1ZTT0NLRVRTXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNzQtXHR0cmlzdGF0ZSBcJiMzNDtIeXBlci1WIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NTYzCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkh5cGVyLVYgQ29uZmlndXJhdGlvbiBSZXZpZXcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIEh5cGVyLVYgY2hhbmdlcywgYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgYEhZUEVSVmAgYW5kIGBIWVBFUlZfVElNRVJgIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHRvIGJlIGNvbmNlcm5lZCB3aXRoLiBJJiMzOTtsbCBkZWZpbml0ZWx5IGFkZCBgSFlQRVJWYCB0byB0aGUgcmVsZXZhbnQgY29uZmlnIGZpbGVzIHJpZ2h0IGF3YXkuCgpOb3csIHdoYXQgYWJvdXQgVk13YXJlIHN1cHBvcnQ/IExldCBtZSB0aGluay4uLiBgQ09ORklHX1ZNV0FSRV9CQUxMT09OYCBzZWVtcyBmYW1pbGlhciwgYnV0IHRoYXQmIzM5O3MgcHJvYmFibHkgbm90IHRoZSBtYWluIGRyaXZlciB0aGVzZSBkYXlzLiBBaCwgcmlnaHQsIGBDT05GSUdfSFlQRVJWSVNPUl9HVUVTVGAgc2hvdWxkIGNvdmVyIHRoYXQsIGdlbmVyYWxseS4gV2FpdCBhIG1pbnV0ZeKApiB3YXNu4oCZdCBgQ09ORklHX0hZUEVSVklTT1JfR1VFU1RgIHNwZWNpZmljIHRvIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIHdpdGhpbiB0aGUgbWVudWNvbmZpZz8gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgdG8gYmUgY2VydGFpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIG1vcmUgc3BlY2lmaWMgY29uZmlnIGZvciBWTXdhcmUgZ3Vlc3QuIEJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdmlydHVhbGl6YXRpb24gbGF5ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVk1XQVJFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWlzYy9LY29uZmlnPTM5MT1jb25maWcgRFMxNjgyXG4tLVxuZHJpdmVycy9taXNjL0tjb25maWctNDAwLVxuZHJpdmVycy9taXNjL0tjb25maWc6NDAxOmNvbmZpZyBWTVdBUkVfQkFMTE9PTlxuZHJpdmVycy9taXNjL0tjb25maWctNDAyLVx0dHJpc3RhdGUgXCYjMzQ7Vk13YXJlIEJhbGxvb24gRHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9taXNjL3Ztd192bWNpL0tjb25maWctNS1cbmRyaXZlcnMvbWlzYy92bXdfdm1jaS9LY29uZmlnOjY6Y29uZmlnIFZNV0FSRV9WTUNJXG5kcml2ZXJzL21pc2Mvdm13X3ZtY2kvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7Vk13YXJlIFZNQ0kgRHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9zY3NpL0tjb25maWc9NTUzPWNvbmZpZyBTQ1NJX01ZUlNcbi0tXG5kcml2ZXJzL3Njc2kvS2NvbmZpZy01NjgtXG5kcml2ZXJzL3Njc2kvS2NvbmZpZzo1Njk6Y29uZmlnIFZNV0FSRV9QVlNDU0lcbmRyaXZlcnMvc2NzaS9LY29uZmlnLTU3MC1cdHRyaXN0YXRlIFwmIzM0O1ZNd2FyZSBQVlNDU0kgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWc9Mjk9Y29uZmlnIFZTT0NLRVRTX0xPT1BCQUNLXG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTQwLVxubmV0L3Ztd192c29jay9LY29uZmlnOjQxOmNvbmZpZyBWTVdBUkVfVk1DSV9WU09DS0VUU1xubmV0L3Ztd192c29jay9LY29uZmlnLTQyLVx0dHJpc3RhdGUgXCYjMzQ7Vk13YXJlIFZNQ0kgdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAyMTIKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKlZNd2FyZSBHdWVzdCBDb3JlIFN1cHBvcnQg4oCTIEEgUXVpY2sgTWVudGFsIFNjYW4qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoaXMgZnJvbSBhIGtlcm5lbCBwZXJzcGVjdGl2ZSwgSSBkb24mIzM5O3QgcmVjYWxsIGEgKmRlZGljYXRlZCogY29uZmlndXJhdGlvbiBvcHRpb24gc3BlY2lmaWNhbGx5IGxhYmVsZWQgJiMzNDtWTXdhcmUgZ3Vlc3QgY29yZS4mIzM0OyBJdCBzZWVtcyBsaWtlIHRoZSBhcmNoaXRlY3R1cmUgbGlrZWx5IGhhbmRsZXMgdGhpcyBpbiBvbmUgb2YgdHdvIHdheXMuIEl0JiMzOTtzIHByb2JhYmx5IGVpdGhlciBoYW5kbGVkIGJ5IHRoZSBtb3JlIGdlbmVyaWMgYENPTkZJR19IWVBFUlZJU09SX0dVRVNUYCBzZXR0aW5nLCBvciwgbW9yZSBsaWtlbHksIGl0JiMzOTtzIGp1c3QgYmFrZWQgZGlyZWN0bHkgaW50byB0aGUgeDg2IGFyY2hpdGVjdHVyZSBzdXBwb3J0IGR1ZSB0byB0aGUgcHJldmFsZW5jZSBvZiBWTXdhcmUgb24gdGhhdCBwbGF0Zm9ybS4gSXQmIzM5O3Mgb2Z0ZW4gdGhhdCB0aGVzZSB0aGluZ3MgYXJlIGFzc3VtZWQgcHJlc2VudCB1bmxlc3Mgc3BlY2lmaWNhbGx5IGV4Y2x1ZGVkLgoKTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhYm91dCBBQ1JOPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaG93IHRoYXQgaHlwZXJ2aXNvciBoYW5kbGVzIGd1ZXN0IGNvcmUgc3VwcG9ydCBhbmQgaWYgdGhlcmUmIzM5O3MgYW55IHBvdGVudGlhbCBvdmVybGFwIG9yIGNvbmZsaWN0IHdpdGggdGhlIFZNd2FyZSBlbnZpcm9ubWVudC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhvc2UgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFDUk4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz04Njg9Y29uZmlnIEpBSUxIT1VTRV9HVUVTVFxuLS1cbmFyY2gveDg2L0tjb25maWctODc2LVxuYXJjaC94ODYvS2NvbmZpZzo4Nzc6Y29uZmlnIEFDUk5fR1VFU1RcbmFyY2gveDg2L0tjb25maWctODc4LVx0Ym9vbCBcJiMzNDtBQ1JOIEd1ZXN0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3ZpcnQvYWNybi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy92aXJ0L2Fjcm4vS2NvbmZpZzoyOmNvbmZpZyBBQ1JOX0hTTVxuZHJpdmVycy92aXJ0L2Fjcm4vS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QUNSTiBIeXBlcnZpc29yIFNlcnZpY2UgTW9kdWxlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNjM3CgkJCQkJCQlvdXRwdXQ6IDI1OAoJCQkJCQkJdGhvdWdodHM6IDExMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIFRhcmdldCBMaXN0IGZvciBLVk0gQ2xvY2sgRnV6emluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGVmaW5lIHRoZSBmdXp6aW5nIHRhcmdldHMgZm9yIHRoaXMgS1ZNIGNsb2NrLXJlbGF0ZWQgcGF0Y2ggc2VyaWVzLiAgSSYjMzk7dmUgYWxyZWFkeSBpZGVudGlmaWVkIHRoYXQgYEFDUk5fR1VFU1RgIGFuZCBgSkFJTEhPVVNFX0dVRVNUYCBhcmUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZSwgc28gSSYjMzk7bGwgaW5jbHVkZSB0aGVtIGFsb25nIHdpdGggdGhlIG1vcmUgb2J2aW91cyBvbmVzOiBgS1ZNX0dVRVNUYCwgYFBBUkFWSVJUYCwgYW5kIGBIWVBFUlZgLgoKTmV4dCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgd2l0aGluIHRoaXMgcmVmYWN0b3JpbmcgdGhhdCBhcmUgYm90aCAqaW50ZXJlc3RpbmcqIGFuZCAqZnV6emFibGUqLiBJIHN0YXJ0ZWQgd2l0aCBhbiBpbml0aWFsIGxpc3Qgb2Ygc3ltYm9scyByZWxhdGVkIHRvIGNsb2NrIHN0YXRlIG1hbmFnZW1lbnQ6IGBrdm1jbG9ja19jcHVfYWN0aW9uYCwgYGt2bWNsb2NrX3N1c3BlbmRgLCBga3ZtY2xvY2tfcmVzdW1lYCwgYHRpbWVrZWVwaW5nX3Jlc3VtZWAsIGB0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGBodl9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYCwgYW5kIGBodl9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYC4gSSBhbHNvIGFkZGVkIGBrdm1fc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGBrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGBrdm1fZ3Vlc3RfY3B1X29mZmxpbmVgIGFuZCBgX19rdm1fY3B1X29ubGluZWAgdG8gdGhlIGxpc3QuIEkgYWxzbyBjb25zaWRlcmVkLCBhbmQgZGlzY2FyZGVkLCBmdW5jdGlvbnMgbGlrZSBgYXBpY19zZXRfdGltZXJfcGVyaW9kX2toemAsIGBhcGljX3NldF90aW1lcl9wZXJpb2RfaHpgLCBgY3B1aWRfZ2V0X3RzY19pbmZvYCwgYGRldGVybWluZV9jcHVfdHNjX2ZyZXF1ZW5jaWVzYCwgYW5kIGB0c2NfZWFybHlfaW5pdGAsIGJlY2F1c2UgdGhleSBhcmUgY2FsbGVkIGVhcmx5IGluIHRoZSBib290IHByb2Nlc3MgYW5kIGFyZSB0aHVzIG5vdCBlYXNpbHkgZnV6emFibGUgcG9zdC1ib290LgoKQWZ0ZXIgY2hlY2tpbmcgdGhhdCBga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVgIGlzIHRydWx5IHN0YXRpYywgYW5kIGNoZWNraW5nIHRoYXQgdGhlIG90aGVyIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IGdsb2JhbCwgdGhpcyBsaXN0IHNlZW1zIHNvbGlkLiBUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gVFNDIGFuZCBBUElDIGZyZXF1ZW5jeSBjYWxpYnJhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gd2l0aGluIHZpcnR1YWxpemVkIHg4NiBlbnZpcm9ubWVudHMsIGFuZCB0aGUgbW9kaWZpY2F0aW9ucyB0byBzY2hlZF9jbG9jayBzdGF0ZSBoYW5kbGluZyBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgYW5kIENQVSBob3RwbHVnIHdpdGhpbiBLVk0gZ3Vlc3RzIGFwcGVhciB0byBiZSB0aGUgbW9zdCBwcm9taXNpbmcgYXJlYXMgZm9yIGZ1enppbmcuCgpUbyBwcmV2ZW50IHRoZSBsaXN0IGZyb20gYmVjb21pbmcgb3Zlcmx5IGxvbmcsIEkgd2lsbCBub3cgc3RyZWFtbGluZSBpdCBkb3duIHRvIGEgbW9yZSBtYW5hZ2VhYmxlIHNldCBvZiBmdW5jdGlvbnM6IGBrdm1jbG9ja19jcHVfYWN0aW9uYCwgYHRpbWVrZWVwaW5nX3Jlc3VtZWAsIGB0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGBrdm1fc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGBrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGBodl9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYCwgYW5kIGBodl9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYC4gRWlnaHQgc3ltYm9scyBzaG91bGQgYmUgYSByZWFzb25hYmxlIG51bWJlciBmb3IgZm9jdXNlZCB0ZXN0aW5nLiBJJiMzOTttIG5vdyByZWFkeSB0byB1c2UgYHNldC1yZXN1bHRzYCB0byBpbXBsZW1lbnQgdGhpcyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9HVUVTVCYjMzQ7LAogICAgJiMzNDtQQVJBVklSVCYjMzQ7LAogICAgJiMzNDtIWVBFUlYmIzM0OywKICAgICYjMzQ7QUNSTl9HVUVTVCYjMzQ7LAogICAgJiMzNDtKQUlMSE9VU0VfR1VFU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1jbG9ja19jcHVfYWN0aW9uJiMzNDssCiAgICAmIzM0O3RpbWVrZWVwaW5nX3Jlc3VtZSYjMzQ7LAogICAgJiMzNDt0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDt0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtodl9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlJiMzNDssCiAgICAmIzM0O2h2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBUU0MgYW5kIEFQSUMgZnJlcXVlbmN5IGNhbGlicmF0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBmb3IgeDg2IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoS1ZNLCBIeXBlci1WLCBWTXdhcmUsIEFDUk4sIEphaWxob3VzZSwgVERYLCBTRVYtU05QKS4gSXQgbW9kaWZpZXMgaG93IHNjaGVkX2Nsb2NrIHN0YXRlIGlzIHNhdmVkIGFuZCByZXN0b3JlZCBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgYW5kIENQVSBob3RwbHVnLCBwYXJ0aWN1bGFybHkgZm9yIGt2bWNsb2NrIGFuZCBIeXBlci1WIGNsb2NrLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gYSBLVk0gZ3Vlc3QgKHdoaWNoIHN5emthbGxlciB1c2VzKSBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgYW5kIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9HVUVTVCYjMzQ7LAogICAgJiMzNDtQQVJBVklSVCYjMzQ7LAogICAgJiMzNDtIWVBFUlYmIzM0OywKICAgICYjMzQ7QUNSTl9HVUVTVCYjMzQ7LAogICAgJiMzNDtKQUlMSE9VU0VfR1VFU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1jbG9ja19jcHVfYWN0aW9uJiMzNDssCiAgICAmIzM0O3RpbWVrZWVwaW5nX3Jlc3VtZSYjMzQ7LAogICAgJiMzNDt0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDt0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtodl9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlJiMzNDssCiAgICAmIzM0O2h2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBUU0MgYW5kIEFQSUMgZnJlcXVlbmN5IGNhbGlicmF0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBmb3IgeDg2IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoS1ZNLCBIeXBlci1WLCBWTXdhcmUsIEFDUk4sIEphaWxob3VzZSwgVERYLCBTRVYtU05QKS4gSXQgbW9kaWZpZXMgaG93IHNjaGVkX2Nsb2NrIHN0YXRlIGlzIHNhdmVkIGFuZCByZXN0b3JlZCBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgYW5kIENQVSBob3RwbHVnLCBwYXJ0aWN1bGFybHkgZm9yIGt2bWNsb2NrIGFuZCBIeXBlci1WIGNsb2NrLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gYSBLVk0gZ3Vlc3QgKHdoaWNoIHN5emthbGxlciB1c2VzKSBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgYW5kIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMjoxMTowNi4xMTY4MjY0NTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE3MjM0MjM2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0dVRVNUXCIsXG4gICAgXCJQQVJBVklSVFwiLFxuICAgIFwiSFlQRVJWXCIsXG4gICAgXCJBQ1JOX0dVRVNUXCIsXG4gICAgXCJKQUlMSE9VU0VfR1VFU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1jbG9ja19jcHVfYWN0aW9uXCIsXG4gICAgXCJ0aW1la2VlcGluZ19yZXN1bWVcIixcbiAgICBcInRzY19zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlXCIsXG4gICAgXCJ0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZVwiLFxuICAgIFwia3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVcIixcbiAgICBcImt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlXCIsXG4gICAgXCJodl9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlXCIsXG4gICAgXCJodl9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBUU0MgYW5kIEFQSUMgZnJlcXVlbmN5IGNhbGlicmF0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBmb3IgeDg2IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoS1ZNLCBIeXBlci1WLCBWTXdhcmUsIEFDUk4sIEphaWxob3VzZSwgVERYLCBTRVYtU05QKS4gSXQgbW9kaWZpZXMgaG93IHNjaGVkX2Nsb2NrIHN0YXRlIGlzIHNhdmVkIGFuZCByZXN0b3JlZCBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgYW5kIENQVSBob3RwbHVnLCBwYXJ0aWN1bGFybHkgZm9yIGt2bWNsb2NrIGFuZCBIeXBlci1WIGNsb2NrLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gYSBLVk0gZ3Vlc3QgKHdoaWNoIHN5emthbGxlciB1c2VzKSBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgYW5kIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjExOjA2LjExNjgzMDQ1NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkwODg5MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTkyMTAyODE1NDI4NzE0Y2M3NGY1ZGQzNmU3MzFmYjNkOGE4ZjhhZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAyIDAyOjExOjA0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcXG5pbmRleCBiNTQ5M2E3ZjhmMjI4MS4uYTM4N2JiMmM0N2UyZmIgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbkBAIC03OTQ2LDYgKzc5NDYsMTEgQEAgS2VybmVsIHBhcmFtZXRlcnNcXG4gXFx0XFx0XFx0d2l0aCBDUFVJRC4xNmggc3VwcG9ydCBhbmQgcGFydGlhbCBDUFVJRC4xNWggc3VwcG9ydC5cXG4gXFx0XFx0XFx0Rm9ybWF0OiBcXHUwMDNjdW5zaWduZWQgaW50XFx1MDAzZVxcbiBcXG4rXFx0XFx0XFx0Tm90ZSwgdHNjX2Vhcmx5X2toeiBpcyBpZ25vcmVkIGlmIHRoZSBUU0MgZnJlcXVlbmN5IGlzXFxuK1xcdFxcdFxcdHByb3ZpZGVkIGJ5IHRydXN0ZWQgZmlybXdhcmUgd2hlbiBydW5uaW5nIGFzIGFuIFNOUCBvclxcbitcXHRcXHRcXHRURFggZ3Vlc3QsIG9yIHdoZW4gdGhlIGh5cGVydmlzb3IgcHJvdmlkZXMgdGhlIGV4YWN0XFxuK1xcdFxcdFxcdGZyZXF1ZW5jeSB2aWEgYSBwYXJhdmlydHVhbCBpbnRlcmZhY2UuXFxuK1xcbiBcXHR0c3g9XFx0XFx0W1g4Nl0gQ29udHJvbCBUcmFuc2FjdGlvbmFsIFN5bmNocm9uaXphdGlvblxcbiBcXHRcXHRcXHRFeHRlbnNpb25zIChUU1gpIGZlYXR1cmUgaW4gSW50ZWwgcHJvY2Vzc29ycyB0aGF0XFxuIFxcdFxcdFxcdHN1cHBvcnQgVFNYIGNvbnRyb2wuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2NwdWlkLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2NwdWlkLnJzdFxcbmluZGV4IGJkYTNlM2U3MzdkNzFmLi5hNWVlOGZmMDUyY2U1NSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9jcHVpZC5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9jcHVpZC5yc3RcXG5AQCAtMTIyLDMgKzEyMiwxNSBAQCBLVk1fSElOVFNfUkVBTFRJTUUgMCAgICAgICAgICAgIGd1ZXN0IGNoZWNrcyB0aGlzIGZlYXR1cmUgYml0IHRvXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZW1wdGVkIGZvciBhbiB1bmxpbWl0ZWQgdGltZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93aW5nIG9wdGltaXphdGlvbnNcXG4gPT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK2Z1bmN0aW9uOiBLVk1fQ1BVSURfVElNSU5HX0lORk8gKDB4NDAwMDAwMTApXFxuK1xcbityZXR1cm5zOjpcXG4rXFxuKyAgIGVheCA9IChWaXJ0dWFsKSBUU0MgZnJlcXVlbmN5IGluIGtIelxcbisgICBlYnggPSAoVmlydHVhbCkgQnVzIChsb2NhbCBBUElDIHRpbWVyKSBmcmVxdWVuY3kgaW4ga0h6XFxuKyAgIGVjeCA9IDAgKFJlc2VydmVkKVxcbisgICBlZHggPSAwIChSZXNlcnZlZClcXG4rXFxuK05vdGUsIEtWTSBvbmx5IGRlZmluZXMgdGhlIHNlbWFudGljcyBvZiBLVk1fQ1BVSURfVElNSU5HX0lORk87IEtWTSBkb2VzIE5PVFxcbithZHZlcnRpc2Ugc3VwcG9ydCB2aWEgS1ZNX0dFVF9TVVBQT1JURURfQ1BVSUQuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NvY28vc2V2L2NvcmUuYyBiL2FyY2gveDg2L2NvY28vc2V2L2NvcmUuY1xcbmluZGV4IGVjZDc3ZDMyMTdmM2MzLi43MjMxM2IzNmI2ZjVkMSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmNcXG4rKysgYi9hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmNcXG5AQCAtOTksNyArOTksNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNldl9zdGF0dXNfZmVhdF9uYW1lc1tdID0ge1xcbiAgKi9cXG4gc3RhdGljIHU2NCBzbnBfdHNjX3NjYWxlIF9fcm9fYWZ0ZXJfaW5pdDtcXG4gc3RhdGljIHU2NCBzbnBfdHNjX29mZnNldCBfX3JvX2FmdGVyX2luaXQ7XFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNucF90c2NfZnJlcV9raHogX19yb19hZnRlcl9pbml0O1xcbiBcXG4gREVGSU5FX1BFUl9DUFUoc3RydWN0IHNldl9lc19ydW50aW1lX2RhdGEqLCBydW50aW1lX2RhdGEpO1xcbiBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc2V2X2VzX3NhdmVfYXJlYSAqLCBzZXZfdm1zYSk7XFxuQEAgLTIwMTQsMjAgKzIwMTMsMTIgQEAgdm9pZCBfX2luaXQgc25wX3NlY3VyZV90c2NfcHJlcGFyZSh2b2lkKVxcbiBcXHRwcl9kZWJ1ZyhcXFwiU2VjdXJlVFNDIGVuYWJsZWRcXFwiKTtcXG4gfVxcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgc2VjdXJldHNjX2dldF90c2Nfa2h6KHZvaWQpXFxuLXtcXG4tXFx0cmV0dXJuIHNucF90c2NfZnJlcV9raHo7XFxuLX1cXG4tXFxuLXZvaWQgX19pbml0IHNucF9zZWN1cmVfdHNjX2luaXQodm9pZClcXG4rdW5zaWduZWQgaW50IF9faW5pdCBzbnBfc2VjdXJlX3RzY19pbml0KHZvaWQpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBzbnBfdHNjX2ZyZXFfa2h6LCB0c2NfZnJlcV9taHo7XFxuIFxcdHN0cnVjdCBzbnBfc2VjcmV0c19wYWdlICpzZWNyZXRzO1xcbi1cXHR1bnNpZ25lZCBsb25nIHRzY19mcmVxX21oejtcXG4gXFx0dm9pZCAqbWVtO1xcbiBcXG4tXFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9HVUVTVF9TTlBfU0VDVVJFX1RTQykpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuIFxcdG1lbSA9IGVhcmx5X21lbXJlbWFwX2VuY3J5cHRlZChzZXZfc2VjcmV0c19wYSwgUEFHRV9TSVpFKTtcXG4gXFx0aWYgKCFtZW0pIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJVbmFibGUgdG8gZ2V0IFRTQ19GQUNUT1I6IGZhaWxlZCB0byBtYXAgdGhlIFNOUCBzZWNyZXRzIHBhZ2UuXFxcXG5cXFwiKTtcXG5AQCAtMjAzNiw3ICsyMDI3LDggQEAgdm9pZCBfX2luaXQgc25wX3NlY3VyZV90c2NfaW5pdCh2b2lkKVxcbiBcXG4gXFx0c2VjcmV0cyA9IChfX2ZvcmNlIHN0cnVjdCBzbnBfc2VjcmV0c19wYWdlICopbWVtO1xcbiBcXG4tXFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfS05PV05fRlJFUSk7XFxuK1xcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTtcXG4rXFxuIFxcdHJkbXNycShNU1JfQU1ENjRfR1VFU1RfVFNDX0ZSRVEsIHRzY19mcmVxX21oeik7XFxuIFxcbiBcXHQvKiBFeHRyYWN0IHRoZSBHVUVTVCBUU0MgTUhaIGZyb20gQklUWzE3OjBdLCByZXN0IGlzIHJlc2VydmVkIHNwYWNlICovXFxuQEAgLTIwNDQsOCArMjAzNiw3IEBAIHZvaWQgX19pbml0IHNucF9zZWN1cmVfdHNjX2luaXQodm9pZClcXG4gXFxuIFxcdHNucF90c2NfZnJlcV9raHogPSBTTlBfU0NBTEVfVFNDX0ZSRVEodHNjX2ZyZXFfbWh6ICogMTAwMCwgc2VjcmV0cy1cXHUwMDNldHNjX2ZhY3Rvcik7XFxuIFxcbi1cXHR4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX2NwdSA9IHNlY3VyZXRzY19nZXRfdHNjX2toejtcXG4tXFx0eDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MgPSBzZWN1cmV0c2NfZ2V0X3RzY19raHo7XFxuLVxcbiBcXHRlYXJseV9tZW11bm1hcChtZW0sIFBBR0VfU0laRSk7XFxuK1xcbitcXHRyZXR1cm4gc25wX3RzY19mcmVxX2toejtcXG4gfVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYyBiL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXFxuaW5kZXggMjliNmYxZWQ1OWVjNTQuLjk0NjgyYWNhMTg4Yjc5IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXFxuKysrIGIvYXJjaC94ODYvY29jby90ZHgvdGR4LmNcXG5AQCAtOCw2ICs4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V4cG9ydC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tleGVjLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vYXBpYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2NvY28uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS90ZHguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS92bXguaFxcdTAwM2VcXG5AQCAtMTEyMyw5ICsxMTI0LDYgQEAgdm9pZCBfX2luaXQgdGR4X2Vhcmx5X2luaXQodm9pZClcXG4gXFxuIFxcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKTtcXG4gXFxuLVxcdC8qIFRTQyBpcyB0aGUgb25seSByZWxpYWJsZSBjbG9jayBpbiBURFggZ3Vlc3QgKi9cXG4tXFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfUkVMSUFCTEUpO1xcbi1cXG4gXFx0Y2NfdmVuZG9yID0gQ0NfVkVORE9SX0lOVEVMO1xcbiBcXG4gXFx0LyogQ29uZmlndXJlIHRoZSBURCAqL1xcbkBAIC0xMTk1LDMgKzExOTMsMTggQEAgdm9pZCBfX2luaXQgdGR4X2Vhcmx5X2luaXQodm9pZClcXG4gXFxuIFxcdHRkeF9hbm5vdW5jZSgpO1xcbiB9XFxuK1xcbit1bnNpZ25lZCBpbnQgX19pbml0IHRkeF90c2NfaW5pdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBjcHVpZF90c2NfaW5mbyBpbmZvO1xcbitcXG4rXFx0aWYgKFdBUk5fT05fT05DRShjcHVpZF9nZXRfdHNjX2luZm8oXFx1MDAyNmluZm8pIHx8ICFpbmZvLmNyeXN0YWxfa2h6KSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRhcGljX3NldF90aW1lcl9wZXJpb2Rfa2h6KGluZm8uY3J5c3RhbF9raHosIFxcXCJURFgtTW9kdWxlIHZpYSBDUFVJRFxcXCIpO1xcbitcXG4rXFx0LyogVFNDIGlzIHRoZSBvbmx5IHJlbGlhYmxlIGNsb2NrIGluIFREWCBndWVzdCAqL1xcbitcXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7XFxuK1xcbitcXHRyZXR1cm4gaW5mby5jcnlzdGFsX2toeiAqIGluZm8ubnVtZXJhdG9yIC8gaW5mby5kZW5vbWluYXRvcjtcXG4rfVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3JuLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3JuLmhcXG5pbmRleCBkYjQyYjQ3N2M0MWQzNC4uYTg5MjE3OWM2MWM2MjMgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNybi5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNybi5oXFxuQEAgLTMyLDExICszMiw2IEBAIHN0YXRpYyBpbmxpbmUgdTMyIGFjcm5fY3B1aWRfYmFzZSh2b2lkKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFjcm5fZ2V0X3RzY19raHoodm9pZClcXG4te1xcbi1cXHRyZXR1cm4gY3B1aWRfZWF4KEFDUk5fQ1BVSURfVElNSU5HX0lORk8pO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBIeXBlcmNhbGxzIGZvciBBQ1JOXFxuICAqXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaFxcbmluZGV4IDljZDQ5M2Q0NjdkNGQxLi4wMzU5OTg1NTVlOTkyMiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmhcXG5AQCAtNjMsNyArNjMsNiBAQCBleHRlcm4gaW50IGFwaWNfdmVyYm9zaXR5O1xcbiBleHRlcm4gaW50IGxvY2FsX2FwaWNfdGltZXJfYzJfb2s7XFxuIFxcbiBleHRlcm4gYm9vbCBhcGljX2lzX2Rpc2FibGVkO1xcbi1leHRlcm4gdW5zaWduZWQgaW50IGxhcGljX3RpbWVyX3BlcmlvZDtcXG4gXFxuIGV4dGVybiBlbnVtIGFwaWNfaW50cl9tb2RlX2lkIGFwaWNfaW50cl9tb2RlO1xcbiBlbnVtIGFwaWNfaW50cl9tb2RlX2lkIHtcXG5AQCAtMTM4LDYgKzEzNyw4IEBAIHZvaWQgcmVnaXN0ZXJfbGFwaWNfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MpO1xcbiBleHRlcm4gdm9pZCBzZXR1cF9ib290X0FQSUNfY2xvY2sodm9pZCk7XFxuIGV4dGVybiB2b2lkIHNldHVwX3NlY29uZGFyeV9BUElDX2Nsb2NrKHZvaWQpO1xcbiBleHRlcm4gdm9pZCBsYXBpY191cGRhdGVfdHNjX2ZyZXEodm9pZCk7XFxuK2V4dGVybiB2b2lkIGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9oeih1NjQgcGVyaW9kX2h6LCBjb25zdCBjaGFyICpzb3VyY2UpO1xcbitleHRlcm4gdm9pZCBhcGljX3NldF90aW1lcl9wZXJpb2Rfa2h6KHU2NCBwZXJpb2Rfa2h6LCBjb25zdCBjaGFyICpzb3VyY2UpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19YODZfNjRcXG4gc3RhdGljIGlubGluZSBib29sIGFwaWNfZm9yY2VfZW5hYmxlKHVuc2lnbmVkIGxvbmcgYWRkcilcXG5AQCAtMTg4LDYgKzE4OSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2xvY2FsX0FQSUModm9pZCkgeyB9XFxuICMgZGVmaW5lIHNldHVwX2Jvb3RfQVBJQ19jbG9jayB4ODZfaW5pdF9ub29wXFxuICMgZGVmaW5lIHNldHVwX3NlY29uZGFyeV9BUElDX2Nsb2NrIHg4Nl9pbml0X25vb3BcXG4gc3RhdGljIGlubGluZSB2b2lkIGxhcGljX3VwZGF0ZV90c2NfZnJlcSh2b2lkKSB7IH1cXG4rc3RhdGljIGlubGluZSB2b2lkIGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9oeih1NjQgcGVyaW9kX2h6LCBjb25zdCBjaGFyICpzb3VyY2UpIHsgfVxcbitzdGF0aWMgaW5saW5lIHZvaWQgYXBpY19zZXRfdGltZXJfcGVyaW9kX2toeih1NjQgcGVyaW9kX2toeiwgY29uc3QgY2hhciAqc291cmNlKSB7IH1cXG4gc3RhdGljIGlubGluZSB2b2lkIGluaXRfYnNwX0FQSUModm9pZCkgeyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBhcGljX2ludHJfbW9kZV9zZWxlY3Qodm9pZCkgeyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBhcGljX2ludHJfbW9kZV9pbml0KHZvaWQpIHsgfVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaFxcbmluZGV4IDRhNDdjMTZlMmRmOGMwLi43NjNlZDAxNzczOGE2NyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaFxcbkBAIC0xMTgsOCArMTE4LDE2IEBAIHN0YXRpYyBpbmxpbmUgbG9uZyBrdm1fc2V2X2h5cGVyY2FsbDModW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBsb25nIHAxLFxcbiB9XFxuIFxcbiAjaWZkZWYgQ09ORklHX0tWTV9HVUVTVFxcbi12b2lkIGt2bWNsb2NrX2luaXQodm9pZCk7XFxuLXZvaWQga3ZtY2xvY2tfZGlzYWJsZSh2b2lkKTtcXG4rZW51bSBrdm1fZ3Vlc3RfY3B1X2FjdGlvbiB7XFxuK1xcdEtWTV9HVUVTVF9CU1BfU1VTUEVORCxcXG4rXFx0S1ZNX0dVRVNUX0JTUF9SRVNVTUUsXFxuK1xcdEtWTV9HVUVTVF9BUF9PTkxJTkUsXFxuK1xcdEtWTV9HVUVTVF9BUF9PRkZMSU5FLFxcbitcXHRLVk1fR1VFU1RfU0hVVERPV04sXFxuK307XFxuK1xcbit2b2lkIGt2bWNsb2NrX2luaXQoYm9vbCBwcmVmZXJfdHNjKTtcXG4rdm9pZCBrdm1jbG9ja19jcHVfYWN0aW9uKGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKTtcXG4gYm9vbCBrdm1fcGFyYV9hdmFpbGFibGUodm9pZCk7XFxuIHVuc2lnbmVkIGludCBrdm1fYXJjaF9wYXJhX2ZlYXR1cmVzKHZvaWQpO1xcbiB1bnNpZ25lZCBpbnQga3ZtX2FyY2hfcGFyYV9oaW50cyh2b2lkKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaFxcbmluZGV4IDU5NGNmYTE5Y2JkNGJhLi4wNWViZjBiNzNlZjQ3ZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXFxuQEAgLTUzMCw3ICs1MzAsNyBAQCBpbnQgc25wX3NlbmRfZ3Vlc3RfcmVxdWVzdChzdHJ1Y3Qgc25wX21zZ19kZXNjICptZGVzYywgc3RydWN0IHNucF9ndWVzdF9yZXEgKnJlcVxcbiBpbnQgc25wX3N2c21fdnRwbV9zZW5kX2NvbW1hbmQodTggKmJ1ZmZlcik7XFxuIFxcbiB2b2lkIF9faW5pdCBzbnBfc2VjdXJlX3RzY19wcmVwYXJlKHZvaWQpO1xcbi12b2lkIF9faW5pdCBzbnBfc2VjdXJlX3RzY19pbml0KHZvaWQpO1xcbit1bnNpZ25lZCBpbnQgc25wX3NlY3VyZV90c2NfaW5pdCh2b2lkKTtcXG4gZW51bSBlc19yZXN1bHQgc2F2aWNfcmVnaXN0ZXJfZ3BhKHU2NCBncGEpO1xcbiBlbnVtIGVzX3Jlc3VsdCBzYXZpY191bnJlZ2lzdGVyX2dwYSh1NjQgKmdwYSk7XFxuIHU2NCBzYXZpY19naGNiX21zcl9yZWFkKHUzMiByZWcpO1xcbkBAIC02MzcsNyArNjM3LDcgQEAgc3RhdGljIGlubGluZSBpbnQgc25wX3NlbmRfZ3Vlc3RfcmVxdWVzdChzdHJ1Y3Qgc25wX21zZ19kZXNjICptZGVzYyxcXG4gXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzbnBfZ3Vlc3RfcmVxICpyZXEpIHsgcmV0dXJuIC1FTk9ERVY7IH1cXG4gc3RhdGljIGlubGluZSBpbnQgc25wX3N2c21fdnRwbV9zZW5kX2NvbW1hbmQodTggKmJ1ZmZlcikgeyByZXR1cm4gLUVOT0RFVjsgfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHNucF9zZWN1cmVfdHNjX3ByZXBhcmUodm9pZCkgeyB9XFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgc25wX3NlY3VyZV90c2NfaW5pdCh2b2lkKSB7IH1cXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19pbml0IHNucF9zZWN1cmVfdHNjX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgc2V2X2V2aWN0X2NhY2hlKHZvaWQgKnZhLCBpbnQgbnBhZ2VzKSB7fVxcbiBzdGF0aWMgaW5saW5lIGVudW0gZXNfcmVzdWx0IHNhdmljX3JlZ2lzdGVyX2dwYSh1NjQgZ3BhKSB7IHJldHVybiBFU19VTlNVUFBPUlRFRDsgfVxcbiBzdGF0aWMgaW5saW5lIGVudW0gZXNfcmVzdWx0IHNhdmljX3VucmVnaXN0ZXJfZ3BhKHU2NCAqZ3BhKSB7IHJldHVybiBFU19VTlNVUFBPUlRFRDsgfVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXFxuaW5kZXggODllOTdkNTc2MWQ4OWUuLmQyM2ZmMDZkYjQxYWJlIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcXG5AQCAtNjgsNiArNjgsNyBAQCBzdHJ1Y3QgdmVfaW5mbyB7XFxuICNpZmRlZiBDT05GSUdfSU5URUxfVERYX0dVRVNUXFxuIFxcbiB2b2lkIF9faW5pdCB0ZHhfZWFybHlfaW5pdCh2b2lkKTtcXG4rdW5zaWduZWQgaW50IF9faW5pdCB0ZHhfdHNjX2luaXQodm9pZCk7XFxuIFxcbiB2b2lkIHRkeF9nZXRfdmVfaW5mbyhzdHJ1Y3QgdmVfaW5mbyAqdmUpO1xcbiBcXG5AQCAtODksNiArOTAsNyBAQCB2b2lkIF9faW5pdCB0ZHhfZHVtcF90ZF9jdGxzKHU2NCB0ZF9jdGxzKTtcXG4gI2Vsc2VcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfZWFybHlfaW5pdCh2b2lkKSB7IH07XFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRkeF90c2NfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfaGFsdCh2b2lkKSB7IH07XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgdGR4X2Vhcmx5X2hhbmRsZV92ZShzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyByZXR1cm4gZmFsc2U7IH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmhcXG5pbmRleCBmZGExOGJjYjE5YjQ1YS4uYTUyMzg4YWY2MDU1ZTQgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmhcXG5AQCAtMTEsOCArMTEsMjEgQEAgZXh0ZXJuIHZvaWQgcmVjYWxpYnJhdGVfY3B1X2toeih2b2lkKTtcXG4gXFxuIGV4dGVybiBpbnQgbm9fdGltZXJfY2hlY2s7XFxuIFxcbisjaWZkZWYgQ09ORklHX1BBUkFWSVJUXFxuIGV4dGVybiBib29sIHVzaW5nX25hdGl2ZV9zY2hlZF9jbG9jayh2b2lkKTtcXG4tdm9pZCBwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodTY0ICgqZnVuYykodm9pZCkpO1xcbitcXG4raW50IF9faW5pdCBfX3BhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh1NjQgKCpmdW5jKSh2b2lkKSwgYm9vbCBzdGFibGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHZvaWQgKCpzYXZlKSh2b2lkKSwgdm9pZCAoKnJlc3RvcmUpKHZvaWQpKTtcXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodTY0ICgqZnVuYykodm9pZCksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgdm9pZCAoKnNhdmUpKHZvaWQpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHZvaWQgKCpyZXN0b3JlKSh2b2lkKSlcXG4re1xcbitcXHQodm9pZClfX3BhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayhmdW5jLCB0cnVlLCBzYXZlLCByZXN0b3JlKTtcXG4rfVxcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIGJvb2wgdXNpbmdfbmF0aXZlX3NjaGVkX2Nsb2NrKHZvaWQpIHsgcmV0dXJuIHRydWU7IH1cXG4rI2VuZGlmXFxuIFxcbiAvKlxcbiAgKiBXZSB1c2UgdGhlIGZ1bGwgbGluZWFyIGVxdWF0aW9uOiBmKHgpID0gYSArIGIqeCwgaW4gb3JkZXIgdG8gYWxsb3dcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdHNjLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90c2MuaFxcbmluZGV4IDRkMmQyZjIxZmYwNjNmLi5jYjY4MmYwOTdlYTdjYSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90c2MuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RzYy5oXFxuQEAgLTgyLDE0ICs4MiwyMCBAQCBzdGF0aWMgaW5saW5lIGN5Y2xlc190IGdldF9jeWNsZXModm9pZClcXG4gfVxcbiAjZGVmaW5lIGdldF9jeWNsZXMgZ2V0X2N5Y2xlc1xcbiBcXG4rc3RydWN0IGNwdWlkX3RzY19pbmZvIHtcXG4rXFx0dW5zaWduZWQgaW50IGRlbm9taW5hdG9yO1xcbitcXHR1bnNpZ25lZCBpbnQgbnVtZXJhdG9yO1xcbitcXHR1bnNpZ25lZCBpbnQgY3J5c3RhbF9raHo7XFxuK307XFxuK2V4dGVybiBpbnQgY3B1aWRfZ2V0X3RzY19pbmZvKHN0cnVjdCBjcHVpZF90c2NfaW5mbyAqaW5mbyk7XFxuK2V4dGVybiB1bnNpZ25lZCBpbnQgX19jcHVfa2h6X2Zyb21fY3B1aWQodm9pZCk7XFxuK1xcbiBleHRlcm4gdm9pZCB0c2NfZWFybHlfaW5pdCh2b2lkKTtcXG4gZXh0ZXJuIHZvaWQgdHNjX2luaXQodm9pZCk7XFxuIGV4dGVybiB2b2lkIG1hcmtfdHNjX3Vuc3RhYmxlKGNoYXIgKnJlYXNvbik7XFxuIGV4dGVybiBpbnQgdW5zeW5jaHJvbml6ZWRfdHNjKHZvaWQpO1xcbiBleHRlcm4gaW50IGNoZWNrX3RzY191bnN0YWJsZSh2b2lkKTtcXG4gZXh0ZXJuIHZvaWQgbWFya190c2NfYXN5bmNfcmVzZXRzKGNoYXIgKnJlYXNvbik7XFxuLWV4dGVybiB1bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KHZvaWQpO1xcbi1leHRlcm4gdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX3RzYyh2b2lkKTtcXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBuYXRpdmVfc2NoZWRfY2xvY2tfZnJvbV90c2ModTY0IHRzYyk7XFxuIFxcbiBleHRlcm4gaW50IHRzY19jbG9ja3NvdXJjZV9yZWxpYWJsZTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmhcXG5pbmRleCA5NTNkMzE5OTQwOGFlNS4uZTg3OWU2ZTgzNDI4MzAgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmhcXG5AQCAtMTIzLDYgKzEyMyw4IEBAIHN0cnVjdCB4ODZfaW5pdF9wY2kge1xcbiAgKiBAbXNpX2V4dF9kZXN0X2lkOlxcdFxcdE1TSSBzdXBwb3J0cyAxNS1iaXQgQVBJQyBJRHNcXG4gICogQGluaXRfbWVtX21hcHBpbmc6XFx0XFx0c2V0dXAgZWFybHkgbWFwcGluZ3MgZHVyaW5nIGluaXRfbWVtX21hcHBpbmcoKVxcbiAgKiBAaW5pdF9hZnRlcl9ib290bWVtOlxcdFxcdGd1ZXN0IGluaXQgYWZ0ZXIgYm9vdCBhbGxvY2F0b3IgaXMgZmluaXNoZWRcXG4rICogQGdldF90c2Nfa2h6OlxcdFxcdGdldCB0aGUgVFNDIGZyZXF1ZW5jeSAocmV0dXJucyAwIGlmIGZyZXF1ZW5jeSBpcyB1bmtub3duKVxcbisgKiBAZ2V0X2NwdV9raHo6XFx0XFx0Z2V0IHRoZSBDUFUgZnJlcXVlbmN5IChyZXR1cm5zIDAgaWYgZnJlcXVlbmN5IGlzIHVua25vd24pXFxuICAqL1xcbiBzdHJ1Y3QgeDg2X2h5cGVyX2luaXQge1xcbiBcXHR2b2lkICgqaW5pdF9wbGF0Zm9ybSkodm9pZCk7XFxuQEAgLTEzMSw2ICsxMzMsOCBAQCBzdHJ1Y3QgeDg2X2h5cGVyX2luaXQge1xcbiBcXHRib29sICgqbXNpX2V4dF9kZXN0X2lkKSh2b2lkKTtcXG4gXFx0dm9pZCAoKmluaXRfbWVtX21hcHBpbmcpKHZvaWQpO1xcbiBcXHR2b2lkICgqaW5pdF9hZnRlcl9ib290bWVtKSh2b2lkKTtcXG4rXFx0dW5zaWduZWQgaW50ICgqZ2V0X3RzY19raHopKHZvaWQpO1xcbitcXHR1bnNpZ25lZCBpbnQgKCpnZXRfY3B1X2toeikodm9pZCk7XFxuIH07XFxuIFxcbiAvKipcXG5AQCAtMjkxLDggKzI5NSw2IEBAIHN0cnVjdCB4ODZfaHlwZXJfcnVudGltZSB7XFxuIFxcbiAvKipcXG4gICogc3RydWN0IHg4Nl9wbGF0Zm9ybV9vcHMgLSBwbGF0Zm9ybSBzcGVjaWZpYyBydW50aW1lIGZ1bmN0aW9uc1xcbi0gKiBAY2FsaWJyYXRlX2NwdTpcXHRcXHRjYWxpYnJhdGUgQ1BVXFxuLSAqIEBjYWxpYnJhdGVfdHNjOlxcdFxcdGNhbGlicmF0ZSBUU0MsIGlmIGRpZmZlcmVudCBmcm9tIENQVVxcbiAgKiBAZ2V0X3dhbGxjbG9jazpcXHRcXHRnZXQgdGltZSBmcm9tIEhXIGNsb2NrIGxpa2UgUlRDIGV0Yy5cXG4gICogQHNldF93YWxsY2xvY2s6XFx0XFx0c2V0IHRpbWUgYmFjayB0byBIVyBjbG9ja1xcbiAgKiBAaW9tbXVfc2h1dGRvd246XFx0XFx0c2V0IGJ5IGFuIElPTU1VIGRyaXZlciBmb3Igc2h1dGRvd24gaWYgbmVjZXNzYXJ5XFxuQEAgLTMxNiw4ICszMTgsNiBAQCBzdHJ1Y3QgeDg2X2h5cGVyX3J1bnRpbWUge1xcbiAgKiBAZ3Vlc3Q6XFx0XFx0XFx0Z3Vlc3QgaW5jYXJuYXRpb25zIGNhbGxiYWNrc1xcbiAgKi9cXG4gc3RydWN0IHg4Nl9wbGF0Zm9ybV9vcHMge1xcbi1cXHR1bnNpZ25lZCBsb25nICgqY2FsaWJyYXRlX2NwdSkodm9pZCk7XFxuLVxcdHVuc2lnbmVkIGxvbmcgKCpjYWxpYnJhdGVfdHNjKSh2b2lkKTtcXG4gXFx0dm9pZCAoKmdldF93YWxsY2xvY2spKHN0cnVjdCB0aW1lc3BlYzY0ICp0cyk7XFxuIFxcdGludCAoKnNldF93YWxsY2xvY2spKGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cyk7XFxuIFxcdHZvaWQgKCppb21tdV9zaHV0ZG93bikodm9pZCk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtX3BhcmEuaCBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtX3BhcmEuaFxcbmluZGV4IGExZWZhNzkwN2EwYjEwLi5jM2EzODQ3MTFmM2E1ZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bV9wYXJhLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bV9wYXJhLmhcXG5AQCAtNDQsNiArNDQsMTcgQEBcXG4gICovXFxuICNkZWZpbmUgS1ZNX0ZFQVRVUkVfQ0xPQ0tTT1VSQ0VfU1RBQkxFX0JJVFxcdDI0XFxuIFxcbisvKlxcbisgKiBUaGUgdGltaW5nIGluZm9ybWF0aW9uIGxlYWYgcHJvdmlkZXMgVFNDIGFuZCBsb2NhbCBBUElDIHRpbWVyIGZyZXF1ZW5jeVxcbisgKiBpbmZvcm1hdGlvbiB0byB0aGUgZ3Vlc3QuICBOb3RlLCB1c2Vyc3BhY2UgaXMgcmVzcG9uc2libGUgZm9yIGZpbGxpbmcgdGhlXFxuKyAqIGxlYWYgd2l0aCB0aGUgY29ycmVjdCBpbmZvcm1hdGlvbi5cXG4rICpcXG4rICogICMgRUFYOiAoVmlydHVhbCkgVFNDIGZyZXF1ZW5jeSBpbiBrSHouXFxuKyAqICAjIEVCWDogKFZpcnR1YWwpIEJ1cyAobG9jYWwgQVBJQyB0aW1lcikgZnJlcXVlbmN5IGluIGtIei5cXG4rICogICMgRUNYLCBFRFg6IFJlc2VydmVkIChtdXN0IGJlIHplcm8pLlxcbisgKi9cXG4rI2RlZmluZSBLVk1fQ1BVSURfVElNSU5HX0lORk9cXHQweDQwMDAwMDEwXFxuK1xcbiAjZGVmaW5lIE1TUl9LVk1fV0FMTF9DTE9DSyAgMHgxMVxcbiAjZGVmaW5lIE1TUl9LVk1fU1lTVEVNX1RJTUUgMHgxMlxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jXFxuaW5kZXggYWExZTE5OTc5YWE4ZTEuLjhkM2Q5MzA1NzZmZDcxIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuY1xcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuY1xcbkBAIC0xNzYsNyArMTc2LDcgQEAgc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsYXBpY19yZXNvdXJjZSA9IHtcXG4gfTtcXG4gXFxuIC8qIE1lYXN1cmVkIGluIHRpY2tzIHBlciBIWi4gKi9cXG4tdW5zaWduZWQgaW50IGxhcGljX3RpbWVyX3BlcmlvZCA9IDA7XFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGFwaWNfdGltZXJfcGVyaW9kO1xcbiBcXG4gc3RhdGljIHZvaWQgYXBpY19wbV9hY3RpdmF0ZSh2b2lkKTtcXG4gXFxuQEAgLTc5Niw2ICs3OTYsMTYgQEAgYm9vbCBfX2luaXQgYXBpY19uZWVkc19waXQodm9pZClcXG4gXFx0cmV0dXJuIGxhcGljX3RpbWVyX3BlcmlvZCA9PSAwO1xcbiB9XFxuIFxcbit2b2lkIGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHoodTY0IHBlcmlvZF9raHosIGNvbnN0IGNoYXIgKnNvdXJjZSlcXG4re1xcbitcXHRsYXBpY190aW1lcl9wZXJpb2QgPSBtdWxfdTY0X3UzMl9kaXYocGVyaW9kX2toeiwgMTAwMCwgSFopO1xcbit9XFxuK1xcbit2b2lkIGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9oeih1NjQgcGVyaW9kX2h6LCBjb25zdCBjaGFyICpzb3VyY2UpXFxuK3tcXG4rXFx0bGFwaWNfdGltZXJfcGVyaW9kID0gZGl2X3U2NChwZXJpb2RfaHosIEhaKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBfX2luaXQgY2FsaWJyYXRlX0FQSUNfY2xvY2sodm9pZClcXG4ge1xcbiBcXHRzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpsZXZ0ID0gdGhpc19jcHVfcHRyKFxcdTAwMjZsYXBpY19ldmVudHMpO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2Fjcm4uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYWNybi5jXFxuaW5kZXggZGMxMTlhZjgzNTI0MmEuLmRjNzFhNmZkZDQ2MTM5IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYWNybi5jXFxuKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9hY3JuLmNcXG5AQCAtMTksMTggKzE5LDI4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vaWR0ZW50cnkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9pcnFfcmVncy5oXFx1MDAzZVxcbiBcXG4rc3RhdGljIHVuc2lnbmVkIGludCBhY3JuX3RzY19raHpfY3B1aWQgX19pbml0ZGF0YTtcXG4rXFxuIHN0YXRpYyB1MzIgX19pbml0IGFjcm5fZGV0ZWN0KHZvaWQpXFxuIHtcXG4gXFx0cmV0dXJuIGFjcm5fY3B1aWRfYmFzZSgpO1xcbiB9XFxuIFxcbitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBhY3JuX2dldF90c2Nfa2h6KHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGFjcm5fdHNjX2toel9jcHVpZDtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgX19pbml0IGFjcm5faW5pdF9wbGF0Zm9ybSh2b2lkKVxcbiB7XFxuIFxcdC8qIEluc3RhbGwgc3lzdGVtIGludGVycnVwdCBoYW5kbGVyIGZvciBBQ1JOIGh5cGVydmlzb3IgY2FsbGJhY2sgKi9cXG4gXFx0c3lzdmVjX2luc3RhbGwoSFlQRVJWSVNPUl9DQUxMQkFDS19WRUNUT1IsIHN5c3ZlY19hY3JuX2h2X2NhbGxiYWNrKTtcXG4gXFxuLVxcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjID0gYWNybl9nZXRfdHNjX2toejtcXG4tXFx0eDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUgPSBhY3JuX2dldF90c2Nfa2h6O1xcbitcXHRhY3JuX3RzY19raHpfY3B1aWQgPSBjcHVpZF9lYXgoQUNSTl9DUFVJRF9USU1JTkdfSU5GTyk7XFxuK1xcdGlmIChhY3JuX3RzY19raHpfY3B1aWQpIHtcXG4rXFx0XFx0eDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHogPSBhY3JuX2dldF90c2Nfa2h6O1xcbitcXHRcXHR4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeiA9IGFjcm5fZ2V0X3RzY19raHo7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgYWNybl94MmFwaWNfYXZhaWxhYmxlKHZvaWQpXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuY1xcbmluZGV4IDE4NWQ0ZjY3N2VjMGYwLi5jNGRhOGUzNTMxOWFjZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21zaHlwZXJ2LmNcXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21zaHlwZXJ2LmNcXG5AQCAtMjc1LDYzICsyNzUsNiBAQCBzdGF0aWMgdm9pZCBodl9ndWVzdF9jcmFzaF9zaHV0ZG93bihzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4gfVxcbiAjZW5kaWYgLyogQ09ORklHX0NSQVNIX0RVTVAgKi9cXG4gXFxuLXN0YXRpYyB1NjQgaHZfcmVmX2NvdW50ZXJfYXRfc3VzcGVuZDtcXG4tc3RhdGljIHZvaWQgKCpvbGRfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSkodm9pZCk7XFxuLXN0YXRpYyB2b2lkICgqb2xkX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUpKHZvaWQpO1xcbi1cXG4tLypcXG4tICogSHlwZXItViBjbG9jayBjb3VudGVyIHJlc2V0cyBkdXJpbmcgaGliZXJuYXRpb24uIFNhdmUgYW5kIHJlc3RvcmUgY2xvY2tcXG4tICogb2Zmc2V0IGR1cmluZyBzdXNwZW5kL3Jlc3VtZSwgd2hpbGUgYWxzbyBjb25zaWRlcmluZyB0aGUgdGltZSBwYXNzZWRcXG4tICogYmVmb3JlIHN1c3BlbmQuIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgc2NoZWRfY2xvY2sgdXNpbmcgaHYgdHNjIHBhZ2VcXG4tICogYmFzZWQgY2xvY2tzb3VyY2UsIHByb2NlZWRzIGZyb20gd2hlcmUgaXQgbGVmdCBvZmYgZHVyaW5nIHN1c3BlbmQgYW5kXFxuLSAqIGl0IHNob3dzIGNvcnJlY3QgdGltZSBmb3IgdGhlIHRpbWVzdGFtcHMgb2Yga2VybmVsIG1lc3NhZ2VzIGFmdGVyIHJlc3VtZS5cXG4tICovXFxuLXN0YXRpYyB2b2lkIHNhdmVfaHZfY2xvY2tfdHNjX3N0YXRlKHZvaWQpXFxuLXtcXG4tXFx0aHZfcmVmX2NvdW50ZXJfYXRfc3VzcGVuZCA9IGh2X3JlYWRfcmVmZXJlbmNlX2NvdW50ZXIoKTtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgcmVzdG9yZV9odl9jbG9ja190c2Nfc3RhdGUodm9pZClcXG4te1xcbi1cXHQvKlxcbi1cXHQgKiBBZGp1c3QgdGhlIG9mZnNldHMgdXNlZCBieSBodiB0c2MgY2xvY2tzb3VyY2UgdG9cXG4tXFx0ICogYWNjb3VudCBmb3IgdGhlIHRpbWUgc3BlbnQgYmVmb3JlIGhpYmVybmF0aW9uLlxcbi1cXHQgKiBhZGp1c3RlZCB2YWx1ZSA9IHJlZmVyZW5jZSBjb3VudGVyICh0aW1lKSBhdCBzdXNwZW5kXFxuLVxcdCAqICAgICAgICAgICAgICAgIC0gcmVmZXJlbmNlIGNvdW50ZXIgKHRpbWUpIG5vdy5cXG4tXFx0ICovXFxuLVxcdGh2X2Fkal9zY2hlZF9jbG9ja19vZmZzZXQoaHZfcmVmX2NvdW50ZXJfYXRfc3VzcGVuZCAtIGh2X3JlYWRfcmVmZXJlbmNlX2NvdW50ZXIoKSk7XFxuLX1cXG4tXFxuLS8qXFxuLSAqIEZ1bmN0aW9ucyB0byBvdmVycmlkZSBzYXZlX3NjaGVkX2Nsb2NrX3N0YXRlIGFuZCByZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlXFxuLSAqIGZ1bmN0aW9ucyBvZiB4ODZfcGxhdGZvcm0uIFRoZSBIeXBlci1WIGNsb2NrIGNvdW50ZXIgaXMgcmVzZXQgZHVyaW5nXFxuLSAqIHN1c3BlbmQtcmVzdW1lIGFuZCB0aGUgb2Zmc2V0IHVzZWQgdG8gbWVhc3VyZSB0aW1lIG5lZWRzIHRvIGJlXFxuLSAqIGNvcnJlY3RlZCwgcG9zdCByZXN1bWUuXFxuLSAqL1xcbi1zdGF0aWMgdm9pZCBodl9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXFxuLXtcXG4tXFx0b2xkX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUoKTtcXG4tXFx0c2F2ZV9odl9jbG9ja190c2Nfc3RhdGUoKTtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgaHZfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxcbi17XFxuLVxcdHJlc3RvcmVfaHZfY2xvY2tfdHNjX3N0YXRlKCk7XFxuLVxcdG9sZF9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKCk7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIF9faW5pdCB4ODZfc2V0dXBfb3BzX2Zvcl90c2NfcGdfY2xvY2sodm9pZClcXG4te1xcbi1cXHRpZiAoIShtc19oeXBlcnYuZmVhdHVyZXMgXFx1MDAyNiBIVl9NU1JfUkVGRVJFTkNFX1RTQ19BVkFJTEFCTEUpKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHRvbGRfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSA9IHg4Nl9wbGF0Zm9ybS5zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlO1xcbi1cXHR4ODZfcGxhdGZvcm0uc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSA9IGh2X3NhdmVfc2NoZWRfY2xvY2tfc3RhdGU7XFxuLVxcbi1cXHRvbGRfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSA9IHg4Nl9wbGF0Zm9ybS5yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlO1xcbi1cXHR4ODZfcGxhdGZvcm0ucmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSA9IGh2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGU7XFxuLX1cXG4tXFxuICNpZmRlZiBDT05GSUdfWDg2XzY0XFxuIERFRklORV9TVEFUSUNfQ0FMTChodl9oeXBlcmNhbGwsIGh2X3N0ZF9oeXBlcmNhbGwpO1xcbiBFWFBPUlRfU1RBVElDX0NBTExfVFJBTVBfR1BMKGh2X2h5cGVyY2FsbCk7XFxuQEAgLTM5NSw3ICszMzgsNyBAQCBzdGF0aWMgaW50IGh2X25taV91bmtub3duKHVuc2lnbmVkIGludCB2YWwsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiB9XFxuICNlbmRpZlxcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgaHZfZ2V0X3RzY19raHoodm9pZClcXG4rc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaHZfZ2V0X3RzY19raHoodm9pZClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZyZXE7XFxuIFxcbkBAIC01NzMsOSArNTE2LDggQEAgc3RhdGljIHZvaWQgX19pbml0IG1zX2h5cGVydl9pbml0X3BsYXRmb3JtKHZvaWQpXFxuIFxcbiBcXHRpZiAobXNfaHlwZXJ2LmZlYXR1cmVzIFxcdTAwMjYgSFZfQUNDRVNTX0ZSRVFVRU5DWV9NU1JTIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBtc19oeXBlcnYubWlzY19mZWF0dXJlcyBcXHUwMDI2IEhWX0ZFQVRVUkVfRlJFUVVFTkNZX01TUlNfQVZBSUxBQkxFKSB7XFxuLVxcdFxcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjID0gaHZfZ2V0X3RzY19raHo7XFxuLVxcdFxcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ID0gaHZfZ2V0X3RzY19raHo7XFxuLVxcdFxcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpO1xcbitcXHRcXHR4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeiA9IGh2X2dldF90c2Nfa2h6O1xcbitcXHRcXHR4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeiA9IGh2X2dldF90c2Nfa2h6O1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAobXNfaHlwZXJ2LnByaXZfaGlnaCBcXHUwMDI2IEhWX0lTT0xBVElPTikge1xcbkBAIC02NDYsMTAgKzU4OCw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtc19oeXBlcnZfaW5pdF9wbGF0Zm9ybSh2b2lkKVxcbiBcXHRcXHR1NjRcXHRodl9sYXBpY19mcmVxdWVuY3k7XFxuIFxcbiBcXHRcXHRyZG1zcnEoSFZfWDY0X01TUl9BUElDX0ZSRVFVRU5DWSwgaHZfbGFwaWNfZnJlcXVlbmN5KTtcXG4tXFx0XFx0aHZfbGFwaWNfZnJlcXVlbmN5ID0gZGl2X3U2NChodl9sYXBpY19mcmVxdWVuY3ksIEhaKTtcXG4tXFx0XFx0bGFwaWNfdGltZXJfcGVyaW9kID0gaHZfbGFwaWNfZnJlcXVlbmN5O1xcbi1cXHRcXHRwcl9pbmZvKFxcXCJIeXBlci1WOiBMQVBJQyBUaW1lciBGcmVxdWVuY3k6ICUjeFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0bGFwaWNfdGltZXJfcGVyaW9kKTtcXG4rXFx0XFx0YXBpY19zZXRfdGltZXJfcGVyaW9kX2h6KGh2X2xhcGljX2ZyZXF1ZW5jeSwgXFxcIkh5cGVyLVYgaHlwZXJ2aXNvclxcXCIpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZWdpc3Rlcl9ubWlfaGFuZGxlcihOTUlfVU5LTk9XTiwgaHZfbm1pX3Vua25vd24sIE5NSV9GTEFHX0ZJUlNULFxcbkBAIC03NDAsNyArNjc5LDYgQEAgc3RhdGljIHZvaWQgX19pbml0IG1zX2h5cGVydl9pbml0X3BsYXRmb3JtKHZvaWQpXFxuIFxcbiBcXHQvKiBSZWdpc3RlciBIeXBlci1WIHNwZWNpZmljIGNsb2Nrc291cmNlICovXFxuIFxcdGh2X2luaXRfY2xvY2tzb3VyY2UoKTtcXG4tXFx0eDg2X3NldHVwX29wc19mb3JfdHNjX3BnX2Nsb2NrKCk7XFxuIFxcdGh2X3Z0bF9pbml0X3BsYXRmb3JtKCk7XFxuICNlbmRpZlxcbiBcXHQvKlxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Ztd2FyZS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuY1xcbmluZGV4IDM0YjczNTczYjEwOGQ3Li4yMzIyNTUyNzlhNmVlYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Ztd2FyZS5jXFxuKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuY1xcbkBAIC02NCw3ICs2NCw3IEBAIHN0cnVjdCB2bXdhcmVfc3RlYWxfdGltZSB7XFxuIFxcdHU2NCByZXNlcnZlZFs3XTtcXG4gfTtcXG4gXFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHZtd2FyZV90c2Nfa2h6IF9fcm9fYWZ0ZXJfaW5pdDtcXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgdm13YXJlX3RzY19raHogX19pbml0ZGF0YTtcXG4gc3RhdGljIHU4IHZtd2FyZV9oeXBlcmNhbGxfbW9kZSAgICAgX19yb19hZnRlcl9pbml0O1xcbiBcXG4gdW5zaWduZWQgbG9uZyB2bXdhcmVfaHlwZXJjYWxsX3Nsb3codW5zaWduZWQgbG9uZyBjbWQsXFxuQEAgLTEzNyw3ICsxMzcsNyBAQCBzdGF0aWMgaW5saW5lIGludCBfX3Ztd2FyZV9wbGF0Zm9ybSh2b2lkKVxcbiBcXHRyZXR1cm4gZWF4ICE9IFVJTlRfTUFYIFxcdTAwMjZcXHUwMDI2IGVieCA9PSBWTVdBUkVfSFlQRVJWSVNPUl9NQUdJQztcXG4gfVxcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgdm13YXJlX2dldF90c2Nfa2h6KHZvaWQpXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IHZtd2FyZV9nZXRfdHNjX2toeih2b2lkKVxcbiB7XFxuIFxcdHJldHVybiB2bXdhcmVfdHNjX2toejtcXG4gfVxcbkBAIC0zNDgsNyArMzQ4LDggQEAgc3RhdGljIHZvaWQgX19pbml0IHZtd2FyZV9wYXJhdmlydF9vcHNfc2V0dXAodm9pZClcXG4gXFx0dm13YXJlX2N5YzJuc19zZXR1cCgpO1xcbiBcXG4gXFx0aWYgKHZtd19zY2hlZF9jbG9jaylcXG4tXFx0XFx0cGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKHZtd2FyZV9zY2hlZF9jbG9jayk7XFxuK1xcdFxcdHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh2bXdhcmVfc2NoZWRfY2xvY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCB4ODZfaW5pdF9ub29wLCB4ODZfaW5pdF9ub29wKTtcXG4gXFxuIFxcdGlmICh2bXdhcmVfaXNfc3RlYWxjbG9ja19hdmFpbGFibGUoKSkge1xcbiBcXHRcXHRoYXNfc3RlYWxfY2xvY2sgPSB0cnVlO1xcbkBAIC0zOTAsOCArMzkxLDYgQEAgc3RhdGljIHZvaWQgX19pbml0IHZtd2FyZV9zZXRfY2FwYWJpbGl0aWVzKHZvaWQpXFxuIHtcXG4gXFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpO1xcbiBcXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7XFxuLVxcdGlmICh2bXdhcmVfdHNjX2toeilcXG4tXFx0XFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfS05PV05fRlJFUSk7XFxuIFxcdGlmICh2bXdhcmVfaHlwZXJjYWxsX21vZGUgPT0gQ1BVSURfVk1XQVJFX0ZFQVRVUkVTX0VDWF9WTUNBTEwpXFxuIFxcdFxcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVk1DQUxMKTtcXG4gXFx0ZWxzZSBpZiAodm13YXJlX2h5cGVyY2FsbF9tb2RlID09IENQVUlEX1ZNV0FSRV9GRUFUVVJFU19FQ1hfVk1NQ0FMTClcXG5AQCAtNDE5LDE1ICs0MTgsMTEgQEAgc3RhdGljIHZvaWQgX19pbml0IHZtd2FyZV9wbGF0Zm9ybV9zZXR1cCh2b2lkKVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHR2bXdhcmVfdHNjX2toeiA9IHRzY19raHo7XFxuLVxcdFxcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjID0gdm13YXJlX2dldF90c2Nfa2h6O1xcbi1cXHRcXHR4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX2NwdSA9IHZtd2FyZV9nZXRfdHNjX2toejtcXG4rXFx0XFx0eDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHogPSB2bXdhcmVfZ2V0X3RzY19raHo7XFxuK1xcdFxcdHg4Nl9pbml0Lmh5cGVyLmdldF9jcHVfa2h6ID0gdm13YXJlX2dldF90c2Nfa2h6O1xcbiBcXG4tI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQ1xcbiBcXHRcXHQvKiBTa2lwIGxhcGljIGNhbGlicmF0aW9uIHNpbmNlIHdlIGtub3cgdGhlIGJ1cyBmcmVxdWVuY3kuICovXFxuLVxcdFxcdGxhcGljX3RpbWVyX3BlcmlvZCA9IGVjeCAvIEhaO1xcbi1cXHRcXHRwcl9pbmZvKFxcXCJIb3N0IGJ1cyBjbG9jayBzcGVlZCByZWFkIGZyb20gaHlwZXJ2aXNvciA6ICV1IEh6XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRlY3gpO1xcbi0jZW5kaWZcXG4rXFx0XFx0YXBpY19zZXRfdGltZXJfcGVyaW9kX2h6KGVjeCwgXFxcIlZNd2FyZSBoeXBlcnZpc29yXFxcIik7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHByX3dhcm4oXFxcIkZhaWxlZCB0byBnZXQgVFNDIGZyZXEgZnJvbSB0aGUgaHlwZXJ2aXNvclxcXFxuXFxcIik7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2phaWxob3VzZS5jIGIvYXJjaC94ODYva2VybmVsL2phaWxob3VzZS5jXFxuaW5kZXggZjU4Y2U5MjIwZTBmMzIuLmZmMTczMDUyY2RjZWRjIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9qYWlsaG91c2UuY1xcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9qYWlsaG91c2UuY1xcbkBAIC02NSwxMCArNjUsMTAgQEAgc3RhdGljIHZvaWQgamFpbGhvdXNlX2dldF93YWxsY2xvY2soc3RydWN0IHRpbWVzcGVjNjQgKm5vdylcXG4gXFxuIHN0YXRpYyB2b2lkIF9faW5pdCBqYWlsaG91c2VfdGltZXJfaW5pdCh2b2lkKVxcbiB7XFxuLVxcdGxhcGljX3RpbWVyX3BlcmlvZCA9IHNldHVwX2RhdGEudjEuYXBpY19raHogKiAoMTAwMCAvIEhaKTtcXG4rXFx0YXBpY19zZXRfdGltZXJfcGVyaW9kX2toeihzZXR1cF9kYXRhLnYxLmFwaWNfa2h6LCBcXFwiSmFpbGhvdXNlIGh5cGVydmlzb3JcXFwiKTtcXG4gfVxcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgamFpbGhvdXNlX2dldF90c2Modm9pZClcXG4rc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgamFpbGhvdXNlX2dldF90c2Modm9pZClcXG4ge1xcbiBcXHRyZXR1cm4gcHJlY2FsaWJyYXRlZF90c2Nfa2h6O1xcbiB9XFxuQEAgLTIxMCw4ICsyMTAsNiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgamFpbGhvdXNlX2luaXRfcGxhdGZvcm0odm9pZClcXG4gXFx0eDg2X2luaXQubXBwYXJzZS5wYXJzZV9zbXBfY2ZnXFx0XFx0PSBqYWlsaG91c2VfcGFyc2Vfc21wX2NvbmZpZztcXG4gXFx0eDg2X2luaXQucGNpLmFyY2hfaW5pdFxcdFxcdFxcdD0gamFpbGhvdXNlX3BjaV9hcmNoX2luaXQ7XFxuIFxcbi1cXHR4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX2NwdVxcdFxcdD0gamFpbGhvdXNlX2dldF90c2M7XFxuLVxcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjXFx0XFx0PSBqYWlsaG91c2VfZ2V0X3RzYztcXG4gXFx0eDg2X3BsYXRmb3JtLmdldF93YWxsY2xvY2tcXHRcXHQ9IGphaWxob3VzZV9nZXRfd2FsbGNsb2NrO1xcbiBcXHR4ODZfcGxhdGZvcm0ubGVnYWN5LnJ0Y1xcdFxcdFxcdD0gMDtcXG4gXFx0eDg2X3BsYXRmb3JtLmxlZ2FjeS53YXJtX3Jlc2V0XFx0XFx0PSAwO1xcbkBAIC0yNTcsNyArMjU1LDYgQEAgc3RhdGljIHZvaWQgX19pbml0IGphaWxob3VzZV9pbml0X3BsYXRmb3JtKHZvaWQpXFxuIFxcdHByX2RlYnVnKFxcXCJKYWlsaG91c2U6IFBNLVRpbWVyIElPIFBvcnQ6ICUjeFxcXFxuXFxcIiwgcG10bXJfaW9wb3J0KTtcXG4gXFxuIFxcdHByZWNhbGlicmF0ZWRfdHNjX2toeiA9IHNldHVwX2RhdGEudjEudHNjX2toejtcXG4tXFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfS05PV05fRlJFUSk7XFxuIFxcbiBcXHRwY2lfcHJvYmUgPSAwO1xcbiBcXG5AQCAtMjkzLDUgKzI5MCw3IEBAIGNvbnN0IHN0cnVjdCBoeXBlcnZpc29yX3g4NiB4ODZfaHlwZXJfamFpbGhvdXNlIF9fcmVmY29uc3QgPSB7XFxuIFxcdC5kZXRlY3RcXHRcXHRcXHQ9IGphaWxob3VzZV9kZXRlY3QsXFxuIFxcdC5pbml0LmluaXRfcGxhdGZvcm1cXHQ9IGphaWxob3VzZV9pbml0X3BsYXRmb3JtLFxcbiBcXHQuaW5pdC54MmFwaWNfYXZhaWxhYmxlXFx0PSBqYWlsaG91c2VfeDJhcGljX2F2YWlsYWJsZSxcXG4rXFx0LmluaXQuZ2V0X3RzY19raHpcXHQ9IGphaWxob3VzZV9nZXRfdHNjLFxcbitcXHQuaW5pdC5nZXRfY3B1X2toelxcdD0gamFpbGhvdXNlX2dldF90c2MsXFxuIFxcdC5pZ25vcmVfbm9wdlxcdFxcdD0gdHJ1ZSxcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2t2bS5jIGIvYXJjaC94ODYva2VybmVsL2t2bS5jXFxuaW5kZXggZGNlZjg0ZGEzMDRiODkuLmJlZWEwYjZhYTc4ZTFhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9rdm0uY1xcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9rdm0uY1xcbkBAIC00OSw2ICs0OSw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vc3ZtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vZTgyMC9hcGkuaFxcdTAwM2VcXG4gXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQga3ZtX3RzY19raHpfY3B1aWQgX19pbml0ZGF0YTtcXG4rc3RhdGljIHVuc2lnbmVkIGludCBrdm1fY3B1X2toel9jcHVpZCBfX2luaXRkYXRhO1xcbitcXG4gREVGSU5FX1NUQVRJQ19LRVlfRkFMU0VfUk8oa3ZtX2FzeW5jX3BmX2VuYWJsZWQpO1xcbiBcXG4gc3RhdGljIGludCBrdm1hcGYgPSAxO1xcbkBAIC00NTcsNyArNDYwLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHNldl9tYXBfcGVyY3B1X2RhdGEodm9pZClcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBrdm1fZ3Vlc3RfY3B1X29mZmxpbmUoYm9vbCBzaHV0ZG93bilcXG4rc3RhdGljIHZvaWQga3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKVxcbiB7XFxuIFxcdGt2bV9kaXNhYmxlX3N0ZWFsX3RpbWUoKTtcXG4gXFx0aWYgKGt2bV9wYXJhX2hhc19mZWF0dXJlKEtWTV9GRUFUVVJFX1BWX0VPSSkpXFxuQEAgLTQ2NSwyMyArNDY4LDMwIEBAIHN0YXRpYyB2b2lkIGt2bV9ndWVzdF9jcHVfb2ZmbGluZShib29sIHNodXRkb3duKVxcbiBcXHRpZiAoa3ZtX3BhcmFfaGFzX2ZlYXR1cmUoS1ZNX0ZFQVRVUkVfTUlHUkFUSU9OX0NPTlRST0wpKVxcbiBcXHRcXHR3cm1zcnEoTVNSX0tWTV9NSUdSQVRJT05fQ09OVFJPTCwgMCk7XFxuIFxcdGt2bV9wdl9kaXNhYmxlX2FwZigpO1xcbi1cXHRpZiAoIXNodXRkb3duKVxcbitcXHRpZiAoYWN0aW9uICE9IEtWTV9HVUVTVF9TSFVURE9XTilcXG4gXFx0XFx0YXBmX3Rhc2tfd2FrZV9hbGwoKTtcXG4tXFx0a3ZtY2xvY2tfZGlzYWJsZSgpO1xcbitcXG4rXFx0a3ZtY2xvY2tfY3B1X2FjdGlvbihhY3Rpb24pO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGt2bV9jcHVfb25saW5lKHVuc2lnbmVkIGludCBjcHUpXFxuK3N0YXRpYyB2b2lkIF9fa3ZtX2NwdV9vbmxpbmUodW5zaWduZWQgaW50IGNwdSwgZW51bSBrdm1fZ3Vlc3RfY3B1X2FjdGlvbiBhY3Rpb24pXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuIFxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4rXFx0a3ZtY2xvY2tfY3B1X2FjdGlvbihhY3Rpb24pO1xcbiBcXHRrdm1fZ3Vlc3RfY3B1X2luaXQoKTtcXG4gXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbi1cXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gI2lmZGVmIENPTkZJR19TTVBcXG4gXFxuK3N0YXRpYyBpbnQga3ZtX2NwdV9vbmxpbmUodW5zaWduZWQgaW50IGNwdSlcXG4re1xcbitcXHRfX2t2bV9jcHVfb25saW5lKGNwdSwgS1ZNX0dVRVNUX0FQX09OTElORSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoY3B1bWFza192YXJfdCwgX19wdl9jcHVfbWFzayk7XFxuIFxcbiBzdGF0aWMgYm9vbCBwdl90bGJfZmx1c2hfc3VwcG9ydGVkKHZvaWQpXFxuQEAgLTcyMyw3ICs3MzMsNyBAQCBzdGF0aWMgaW50IGt2bV9jcHVfZG93bl9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUpXFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbiBcXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuLVxcdGt2bV9ndWVzdF9jcHVfb2ZmbGluZShmYWxzZSk7XFxuK1xcdGt2bV9ndWVzdF9jcHVfb2ZmbGluZShLVk1fR1VFU1RfQVBfT0ZGTElORSk7XFxuIFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNzM0LDcgKzc0NCw3IEBAIHN0YXRpYyBpbnQga3ZtX3N1c3BlbmQodm9pZCAqZGF0YSlcXG4ge1xcbiBcXHR1NjQgdmFsID0gMDtcXG4gXFxuLVxcdGt2bV9ndWVzdF9jcHVfb2ZmbGluZShmYWxzZSk7XFxuK1xcdGt2bV9ndWVzdF9jcHVfb2ZmbGluZShLVk1fR1VFU1RfQlNQX1NVU1BFTkQpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19BUkNIX0NQVUlETEVfSEFMVFBPTExcXG4gXFx0aWYgKGt2bV9wYXJhX2hhc19mZWF0dXJlKEtWTV9GRUFUVVJFX1BPTExfQ09OVFJPTCkpXFxuQEAgLTc0Niw3ICs3NTYsNyBAQCBzdGF0aWMgaW50IGt2bV9zdXNwZW5kKHZvaWQgKmRhdGEpXFxuIFxcbiBzdGF0aWMgdm9pZCBrdm1fcmVzdW1lKHZvaWQgKmRhdGEpXFxuIHtcXG4tXFx0a3ZtX2NwdV9vbmxpbmUocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7XFxuK1xcdF9fa3ZtX2NwdV9vbmxpbmUocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwgS1ZNX0dVRVNUX0JTUF9SRVNVTUUpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19BUkNIX0NQVUlETEVfSEFMVFBPTExcXG4gXFx0aWYgKGt2bV9wYXJhX2hhc19mZWF0dXJlKEtWTV9GRUFUVVJFX1BPTExfQ09OVFJPTCkgXFx1MDAyNlxcdTAwMjYgaGFzX2d1ZXN0X3BvbGwpXFxuQEAgLTc2NSw3ICs3NzUsNyBAQCBzdGF0aWMgc3RydWN0IHN5c2NvcmUga3ZtX3N5c2NvcmUgPSB7XFxuIFxcbiBzdGF0aWMgdm9pZCBrdm1fcHZfZ3Vlc3RfY3B1X3JlYm9vdCh2b2lkICp1bnVzZWQpXFxuIHtcXG4tXFx0a3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKHRydWUpO1xcbitcXHRrdm1fZ3Vlc3RfY3B1X29mZmxpbmUoS1ZNX0dVRVNUX1NIVVRET1dOKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBrdm1fcHZfcmVib290X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbkBAIC03ODksNyArNzk5LDcgQEAgc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBrdm1fcHZfcmVib290X25iID0ge1xcbiAjaWZkZWYgQ09ORklHX0NSQVNIX0RVTVBcXG4gc3RhdGljIHZvaWQga3ZtX2NyYXNoX3NodXRkb3duKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiB7XFxuLVxcdGt2bV9ndWVzdF9jcHVfb2ZmbGluZSh0cnVlKTtcXG4rXFx0a3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKEtWTV9HVUVTVF9TSFVURE9XTik7XFxuIFxcdG5hdGl2ZV9tYWNoaW5lX2NyYXNoX3NodXRkb3duKHJlZ3MpO1xcbiB9XFxuICNlbmRpZlxcbkBAIC05MTEsNiArOTIxLDI2IEBAIGJvb2wga3ZtX3BhcmFfYXZhaWxhYmxlKHZvaWQpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3BhcmFfYXZhaWxhYmxlKTtcXG4gXFxuK3N0YXRpYyB1MzIgX19pbml0IGt2bV9jcHVpZF90aW1pbmdfaW5mb19sZWFmKHZvaWQpXFxuK3tcXG4rXFx0dTMyIGJhc2UgPSBrdm1fY3B1aWRfYmFzZSgpO1xcbitcXG4rXFx0aWYgKCFiYXNlIHx8IGNwdWlkX2VheChiYXNlKSBcXHUwMDNjIChiYXNlIHwgS1ZNX0NQVUlEX1RJTUlOR19JTkZPKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gYmFzZSB8IEtWTV9DUFVJRF9USU1JTkdfSU5GTztcXG4rfVxcbitcXG4rc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQga3ZtX2dldF90c2Nfa2h6KHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGt2bV90c2Nfa2h6X2NwdWlkO1xcbit9XFxuK1xcbitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBrdm1fZ2V0X2NwdV9raHoodm9pZClcXG4re1xcbitcXHRyZXR1cm4ga3ZtX2NwdV9raHpfY3B1aWQ7XFxuK31cXG4rXFxuIHVuc2lnbmVkIGludCBrdm1fYXJjaF9wYXJhX2ZlYXR1cmVzKHZvaWQpXFxuIHtcXG4gXFx0cmV0dXJuIGNwdWlkX2VheChrdm1fY3B1aWRfYmFzZSgpIHwgS1ZNX0NQVUlEX0ZFQVRVUkVTKTtcXG5AQCAtOTYwLDYgKzk5MCw4IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrdm1faW5pdF9wbGF0Zm9ybSh2b2lkKVxcbiBcXHRcXHQubWFza19sbyA9ICh1MzIpKH4oU1pfNEcgLSB0b2x1ZCAtIDEpKSB8IE1UUlJfUEhZU01BU0tfVixcXG4gXFx0XFx0Lm1hc2tfaGkgPSAoQklUX1VMTChib290X2NwdV9kYXRhLng4Nl9waHlzX2JpdHMpIC0gMSkgXFx1MDAzZVxcdTAwM2UgMzIsXFxuIFxcdH07XFxuK1xcdHUzMiB0aW1pbmdfaW5mb19sZWFmLCBhcGljX2toejtcXG4rXFx0Ym9vbCB0c2NfaXNfcmVsaWFibGU7XFxuIFxcbiBcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfR1VFU1RfTUVNX0VOQ1JZUFQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9NSUdSQVRJT05fQ09OVFJPTCkpIHtcXG5AQCAtMTAwNyw3ICsxMDM5LDQ0IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrdm1faW5pdF9wbGF0Zm9ybSh2b2lkKVxcbiBcXHRcXHRcXHR3cm1zcnEoTVNSX0tWTV9NSUdSQVRJT05fQ09OVFJPTCxcXG4gXFx0XFx0XFx0ICAgICAgIEtWTV9NSUdSQVRJT05fUkVBRFkpO1xcbiBcXHR9XFxuLVxcdGt2bWNsb2NrX2luaXQoKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIElmIEtWTSBhZHZlcnRpc2VzIHRoZSBmcmVxdWVuY3kgZGlyZWN0bHkgaW4gQ1BVSUQsIHVzZSB0aGF0IGluc3RlYWRcXG4rXFx0ICogb2YgcmV2ZXJzZS1jYWxjdWxhdGluZyBpdCBmcm9tIHRoZSBLVk0gY2xvY2sgZGF0YSwgb3Igd29yc2UsIHRyeWluZ1xcbitcXHQgKiB0byBjYWxpYnJhdGF0ZSB0aGUgVFNDIHVzaW5nIGFuIGVtdWxhdGVkIGRldmljZS5cXG4rXFx0ICovXFxuK1xcdHRpbWluZ19pbmZvX2xlYWYgPSBrdm1fY3B1aWRfdGltaW5nX2luZm9fbGVhZigpO1xcbitcXHRpZiAodGltaW5nX2luZm9fbGVhZikge1xcbitcXHRcXHRrdm1fdHNjX2toel9jcHVpZCA9IGNwdWlkX2VheCh0aW1pbmdfaW5mb19sZWFmKTtcXG4rXFx0XFx0aWYgKGt2bV90c2Nfa2h6X2NwdWlkKSB7XFxuK1xcdFxcdFxcdHg4Nl9pbml0Lmh5cGVyLmdldF90c2Nfa2h6ID0ga3ZtX2dldF90c2Nfa2h6O1xcbitcXHRcXHRcXHR4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeiA9IGt2bV9nZXRfdHNjX2toejtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogVGhlIGxlYWYgYWxzbyBpbmNsdWRlcyB0aGUgbG9jYWwgQVBJQyBidXMvdGltZXIgZnJlcXVlbmN5LiovXFxuK1xcdFxcdGFwaWNfa2h6ID0gY3B1aWRfZWJ4KHRpbWluZ19pbmZvX2xlYWYpO1xcbitcXHRcXHRpZiAoYXBpY19raHopXFxuK1xcdFxcdFxcdGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHooYXBpY19raHosIFxcXCJLVk0gaHlwZXJ2aXNvclxcXCIpO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQcmVmZXIgQ1BVSUQuMHgxNiBvdmVyIEtWTSdzIFBWIENQVUlEIHdoZW4gcG9zc2libGUsIGFzIHRoZSBiYXNlIENQVVxcbitcXHQgKiBmcmVxdWVuY3kgaXNuJ3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgdGhlIFRTQyBmcmVxdWVuY3kuXFxuK1xcdCAqL1xcbitcXHRrdm1fY3B1X2toel9jcHVpZCA9IF9fY3B1X2toel9mcm9tX2NwdWlkKCk7XFxuK1xcdGlmIChrdm1fY3B1X2toel9jcHVpZClcXG4rXFx0XFx0eDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHogPSBrdm1fZ2V0X2NwdV9raHo7XFxuK1xcbisgICAgICAgIC8qXFxuKyAgICAgICAgICogSWYgdGhlIFRTQyBjb3VudHMgYXQgYSBjb25zdGFudCBmcmVxdWVuY3kgYWNyb3NzIFAvVCBzdGF0ZXMgYW5kIGluXFxuKyAgICAgICAgICogZGVlcCBDLXN0YXRlcywgdHJlYXQgdGhlIFRTQyByZWxpYWJsZSwgYXMgZ3VhcmFudGVlZCBieSBLVk0uXFxuKyAgICAgICAgICovXFxuK1xcdHRzY19pc19yZWxpYWJsZSA9IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05PTlNUT1BfVFNDKTtcXG4rXFx0aWYgKHRzY19pc19yZWxpYWJsZSlcXG4rXFx0XFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfUkVMSUFCTEUpO1xcbitcXG4rXFx0a3ZtY2xvY2tfaW5pdCh0c2NfaXNfcmVsaWFibGUpO1xcbiBcXHR4ODZfcGxhdGZvcm0uYXBpY19wb3N0X2luaXQgPSBrdm1fYXBpY19pbml0O1xcbiBcXG4gXFx0LypcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMgYi9hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suY1xcbmluZGV4IGNiM2QwY2ExZmEyMjVhLi44NDJmMzhjNWY2Y2FhZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suY1xcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jXFxuQEAgLTEyLDcgKzEyLDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hhcmRpcnEuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NwdWhvdHBsdWcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9jbG9jay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFxcdTAwM2VcXG5AQCAtNTQsNiArNTMsOCBAQCBzdGF0aWMgc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICpodmNsb2NrX21lbTtcXG4gREVGSU5FX1BFUl9DUFUoc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICosIGh2X2Nsb2NrX3Blcl9jcHUpO1xcbiBFWFBPUlRfUEVSX0NQVV9TWU1CT0xfR1BMKGh2X2Nsb2NrX3Blcl9jcHUpO1xcbiBcXG4rc3RhdGljIGJvb2wga3ZtY2xvY2tfc3VzcGVuZGVkO1xcbitcXG4gLypcXG4gICogVGhlIHdhbGxjbG9jayBpcyB0aGUgdGltZSBvZiBkYXkgd2hlbiB3ZSBib290ZWQuIFNpbmNlIHRoZW4sIHNvbWUgdGltZSBtYXlcXG4gICogaGF2ZSBlbGFwc2VkIHNpbmNlIHRoZSBoeXBlcnZpc29yIHdyb3RlIHRoZSBkYXRhLiBTbyB3ZSB0cnkgdG8gYWNjb3VudCBmb3JcXG5AQCAtNjEsNiArNjIsNyBAQCBFWFBPUlRfUEVSX0NQVV9TWU1CT0xfR1BMKGh2X2Nsb2NrX3Blcl9jcHUpO1xcbiAgKi9cXG4gc3RhdGljIHZvaWQga3ZtX2dldF93YWxsY2xvY2soc3RydWN0IHRpbWVzcGVjNjQgKm5vdylcXG4ge1xcbitcXHRXQVJOX09OX09OQ0Uoa3ZtY2xvY2tfc3VzcGVuZGVkKTtcXG4gXFx0d3Jtc3JxKG1zcl9rdm1fd2FsbF9jbG9jaywgc2xvd192aXJ0X3RvX3BoeXMoXFx1MDAyNndhbGxfY2xvY2spKTtcXG4gXFx0cHJlZW1wdF9kaXNhYmxlKCk7XFxuIFxcdHB2Y2xvY2tfcmVhZF93YWxsY2xvY2soXFx1MDAyNndhbGxfY2xvY2ssIHRoaXNfY3B1X3B2dGkoKSwgbm93KTtcXG5AQCAtNzIsNiArNzQsMjUgQEAgc3RhdGljIGludCBrdm1fc2V0X3dhbGxjbG9jayhjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqbm93KVxcbiBcXHRyZXR1cm4gLUVOT0RFVjtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQga3ZtX3JlZ2lzdGVyX2Nsb2NrKGNoYXIgKnR4dClcXG4re1xcbitcXHRzdHJ1Y3QgcHZjbG9ja192c3lzY2FsbF90aW1lX2luZm8gKnNyYyA9IHRoaXNfY3B1X2h2Y2xvY2soKTtcXG4rXFx0dTY0IHBhO1xcbitcXG4rXFx0aWYgKCFzcmMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBhID0gc2xvd192aXJ0X3RvX3BoeXMoXFx1MDAyNnNyYy1cXHUwMDNlcHZ0aSkgfCAweDAxVUxMO1xcbitcXHR3cm1zcnEobXNyX2t2bV9zeXN0ZW1fdGltZSwgcGEpO1xcbitcXHRwcl9kZWJ1ZyhcXFwia3ZtLWNsb2NrOiBjcHUgJWQsIG1zciAlbGx4LCAlc1xcXCIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgcGEsIHR4dCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGt2bWNsb2NrX2Rpc2FibGUodm9pZClcXG4re1xcbitcXHRpZiAobXNyX2t2bV9zeXN0ZW1fdGltZSlcXG4rXFx0XFx0bmF0aXZlX3dyaXRlX21zcihtc3Jfa3ZtX3N5c3RlbV90aW1lLCAwKTtcXG4rfVxcbitcXG4gc3RhdGljIHU2NCBrdm1fY2xvY2tfcmVhZCh2b2lkKVxcbiB7XFxuIFxcdHU2NCByZXQ7XFxuQEAgLTExMywxOCArMTM0LDc0IEBAIHN0YXRpYyBub2luc3RyIHU2NCBrdm1fc2NoZWRfY2xvY2tfcmVhZCh2b2lkKVxcbiBcXHRyZXR1cm4gcHZjbG9ja19jbG9ja3NvdXJjZV9yZWFkX25vd2QodGhpc19jcHVfcHZ0aSgpKSAtIGt2bV9zY2hlZF9jbG9ja19vZmZzZXQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fc2NoZWRfY2xvY2tfaW5pdChib29sIHN0YWJsZSlcXG4rc3RhdGljIHZvaWQga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcXG4ge1xcbi1cXHRpZiAoIXN0YWJsZSlcXG4tXFx0XFx0Y2xlYXJfc2NoZWRfY2xvY2tfc3RhYmxlKCk7XFxuLVxcdGt2bV9zY2hlZF9jbG9ja19vZmZzZXQgPSBrdm1fY2xvY2tfcmVhZCgpO1xcbi1cXHRwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2soa3ZtX3NjaGVkX2Nsb2NrX3JlYWQpO1xcbitcXHQvKlxcbitcXHQgKiBTdG9wIGhvc3Qgd3JpdGVzIHRvIGt2bWNsb2NrIGltbWVkaWF0ZWx5IHByaW9yIHRvIHN1c3BlbmQvaGliZXJuYXRlLlxcbitcXHQgKiBJZiB0aGUgc3lzdGVtIGlzIGhpYmVybmF0aW5nLCB0aGVuIGt2bWNsb2NrIHdpbGwgbGlrZWx5IHJlc2lkZSBhdCBhXFxuK1xcdCAqIGRpZmZlcmVudCBwaHlzaWNhbCBhZGRyZXNzIHdoZW4gdGhlIHN5c3RlbSBhd2FrZW5zLCBhbmQgaG9zdCB3cml0ZXNcXG4rXFx0ICogdG8gdGhlIG9sZCBhZGRyZXNzIHByaW9yIHRvIHJlY29uZmlndXJpbmcga3ZtY2xvY2sgd291bGQgY2xvYmJlclxcbitcXHQgKiByYW5kb20gbWVtb3J5LlxcbitcXHQgKi9cXG4rXFx0a3ZtY2xvY2tfc3VzcGVuZGVkID0gdHJ1ZTtcXG4rXFx0a3ZtY2xvY2tfZGlzYWJsZSgpO1xcbit9XFxuIFxcbi1cXHRwcl9pbmZvKFxcXCJrdm0tY2xvY2s6IHVzaW5nIHNjaGVkIG9mZnNldCBvZiAlbGx1IGN5Y2xlc1xcXCIsXFxuLVxcdFxcdGt2bV9zY2hlZF9jbG9ja19vZmZzZXQpO1xcbisjaWZkZWYgQ09ORklHX1NNUFxcbitzdGF0aWMgdm9pZCBrdm1fc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrKHZvaWQpXFxuK3tcXG4rXFx0a3ZtX3JlZ2lzdGVyX2Nsb2NrKFxcXCJzZWNvbmRhcnkgY3B1LCBzdGFydHVwXFxcIik7XFxuK31cXG4rI2VuZGlmXFxuIFxcbi1cXHRCVUlMRF9CVUdfT04oc2l6ZW9mKGt2bV9zY2hlZF9jbG9ja19vZmZzZXQpIFxcdTAwM2VcXG4tXFx0XFx0c2l6ZW9mKCgoc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gKilOVUxMKS1cXHUwMDNlc3lzdGVtX3RpbWUpKTtcXG4rc3RhdGljIHZvaWQga3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcXG4re1xcbitcXHRrdm1jbG9ja19zdXNwZW5kZWQgPSBmYWxzZTtcXG4rXFx0a3ZtX3JlZ2lzdGVyX2Nsb2NrKFxcXCJwcmltYXJ5IGNwdSwgc2NoZWRfY2xvY2sgcmVzdW1lXFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGt2bWNsb2NrX3N1c3BlbmQoc3RydWN0IGNsb2Nrc291cmNlICpjcylcXG4re1xcbitcXHRrdm1jbG9ja19zdXNwZW5kZWQgPSB0cnVlO1xcbitcXHRrdm1jbG9ja19kaXNhYmxlKCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGt2bWNsb2NrX3Jlc3VtZShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKVxcbit7XFxuK1xcdGt2bWNsb2NrX3N1c3BlbmRlZCA9IGZhbHNlO1xcbitcXHRrdm1fcmVnaXN0ZXJfY2xvY2soXFxcInByaW1hcnkgY3B1LCBjbG9ja3NvdXJjZSByZXN1bWVcXFwiKTtcXG4rfVxcbitcXG4rdm9pZCBrdm1jbG9ja19jcHVfYWN0aW9uKGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKVxcbit7XFxuK1xcdHN3aXRjaCAoYWN0aW9uKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBCU1AncyBjbG9jayBpcyBtYW5hZ2VkIHZpYSBjbG9ja3NvdXJjZSBzdXNwZW5kL3Jlc3VtZSxcXG4rXFx0XFx0ICogdG8gZW5zdXJlIGl0J3MgZW5hYmxlZC9kaXNhYmxlZCB3aGVuIHRpbWVrZWVwaW5nIG5lZWRzIGl0XFxuK1xcdFxcdCAqIHRvIGJlLCBlLmcuIGJlZm9yZSByZWFkaW5nIHdhbGxjbG9jayAod2hpY2ggdXNlcyBrdm1jbG9jaykuXFxuK1xcdFxcdCAqL1xcbitcXHRjYXNlIEtWTV9HVUVTVF9CU1BfU1VTUEVORDpcXG4rXFx0Y2FzZSBLVk1fR1VFU1RfQlNQX1JFU1VNRTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgS1ZNX0dVRVNUX0FQX09OTElORTpcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogU2Vjb25kYXJ5IENQVXMgdXNlIGEgZGVkaWNhdGVkIGhvb2sgdG8gZW5hYmxlIGt2bWNsb2NrIGVhcmx5XFxuK1xcdFxcdCAqIGR1cmluZyBicmluZ3VwLCB0aGVyZSdzIG5vdGhpbmcgdG8gYmUgZG9uZSBkdXJpbmcgQ1BVIG9ubGluZVxcbitcXHRcXHQgKiAod2hpY2ggcnVucyBhdCBDUFVIUF9BUF9PTkxJTkVfRFlOKS4gIFdoZW4ga3ZtY2xvY2sgaXMgYmVpbmdcXG4rXFx0XFx0ICogdXNlZCBhcyBzY2hlZF9jbG9jaywga3ZtY2xvY2sgbXVzdCBiZSBlbmFibGVkICp2ZXJ5KiBlYXJseSxcXG4rXFx0XFx0ICogYW5kIGV2ZW4gd2hlbiBrdm1jbG9jayBpcyBcXFwib25seVxcXCIgYmVpbmcgdXNlZCBmb3IgdGhlIG1haW5cXG4rXFx0XFx0ICogY2xvY2tzb3VyY2UsIGl0IHN0aWxsIG5lZWRzIHRvIGJlIGVuYWJsZWQgbG9uZyBiZWZvcmUgdGhlXFxuK1xcdFxcdCAqIGR5bmFtaWMgQ1BVSFAgY2FsbHMgYXJlIG1hZGUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBLVk1fR1VFU1RfQVBfT0ZGTElORTpcXG4rXFx0Y2FzZSBLVk1fR1VFU1RfU0hVVERPV046XFxuK1xcdFxcdGt2bWNsb2NrX2Rpc2FibGUoKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdFdBUk5fT05fT05DRSgxKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4gfVxcbiBcXG4gLypcXG5AQCAtMTM2LDkgKzIxMyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fc2NoZWRfY2xvY2tfaW5pdChib29sIHN0YWJsZSlcXG4gICogcG9sbCBvZiBndWVzdHMgY2FuIGJlIHJ1bm5pbmcgYW5kIHRyb3VibGUgZWFjaCBvdGhlci4gU28gd2UgcHJlc2V0XFxuICAqIGxwaiBoZXJlXFxuICAqL1xcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fZ2V0X3RzY19raHoodm9pZClcXG4rc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQga3ZtY2xvY2tfZ2V0X3RzY19raHoodm9pZClcXG4ge1xcbi1cXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKTtcXG4gXFx0cmV0dXJuIHB2Y2xvY2tfdHNjX2toeih0aGlzX2NwdV9wdnRpKCkpO1xcbiB9XFxuIFxcbkBAIC0xNDcsNyArMjIzLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGt2bV9nZXRfcHJlc2V0X2xwaih2b2lkKVxcbiBcXHR1bnNpZ25lZCBsb25nIGtoejtcXG4gXFx0dTY0IGxwajtcXG4gXFxuLVxcdGtoeiA9IGt2bV9nZXRfdHNjX2toeigpO1xcbitcXHRraHogPSBrdm1jbG9ja19nZXRfdHNjX2toeigpO1xcbiBcXG4gXFx0bHBqID0gKCh1NjQpa2h6ICogMTAwMCk7XFxuIFxcdGRvX2RpdihscGosIEhaKTtcXG5AQCAtMTg1LDQzICsyNjEsMTAgQEAgc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBrdm1fY2xvY2sgPSB7XFxuIFxcdC5mbGFnc1xcdFxcdD0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsXFxuIFxcdC5pZFxcdFxcdD0gQ1NJRF9YODZfS1ZNX0NMSyxcXG4gXFx0LmVuYWJsZVxcdFxcdD0ga3ZtX2NzX2VuYWJsZSxcXG4rXFx0LnN1c3BlbmRcXHQ9IGt2bWNsb2NrX3N1c3BlbmQsXFxuK1xcdC5yZXN1bWVcXHRcXHQ9IGt2bWNsb2NrX3Jlc3VtZSxcXG4gfTtcXG4gXFxuLXN0YXRpYyB2b2lkIGt2bV9yZWdpc3Rlcl9jbG9jayhjaGFyICp0eHQpXFxuLXtcXG4tXFx0c3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICpzcmMgPSB0aGlzX2NwdV9odmNsb2NrKCk7XFxuLVxcdHU2NCBwYTtcXG4tXFxuLVxcdGlmICghc3JjKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHRwYSA9IHNsb3dfdmlydF90b19waHlzKFxcdTAwMjZzcmMtXFx1MDAzZXB2dGkpIHwgMHgwMVVMTDtcXG4tXFx0d3Jtc3JxKG1zcl9rdm1fc3lzdGVtX3RpbWUsIHBhKTtcXG4tXFx0cHJfZGVidWcoXFxcImt2bS1jbG9jazogY3B1ICVkLCBtc3IgJWxseCwgJXNcXFwiLCBzbXBfcHJvY2Vzc29yX2lkKCksIHBhLCB0eHQpO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBrdm1fc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxcbi17XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIGt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXFxuLXtcXG4tXFx0a3ZtX3JlZ2lzdGVyX2Nsb2NrKFxcXCJwcmltYXJ5IGNwdSBjbG9jaywgcmVzdW1lXFxcIik7XFxuLX1cXG4tXFxuLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUNcXG4tc3RhdGljIHZvaWQga3ZtX3NldHVwX3NlY29uZGFyeV9jbG9jayh2b2lkKVxcbi17XFxuLVxcdGt2bV9yZWdpc3Rlcl9jbG9jayhcXFwic2Vjb25kYXJ5IGNwdSBjbG9ja1xcXCIpO1xcbi19XFxuLSNlbmRpZlxcbi1cXG4tdm9pZCBrdm1jbG9ja19kaXNhYmxlKHZvaWQpXFxuLXtcXG4tXFx0aWYgKG1zcl9rdm1fc3lzdGVtX3RpbWUpXFxuLVxcdFxcdG5hdGl2ZV93cml0ZV9tc3IobXNyX2t2bV9zeXN0ZW1fdGltZSwgMCk7XFxuLX1cXG4tXFxuIHN0YXRpYyB2b2lkIF9faW5pdCBrdm1jbG9ja19pbml0X21lbSh2b2lkKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbmNwdXM7XFxuQEAgLTMwOCw5ICszNTEsMzUgQEAgc3RhdGljIGludCBrdm1jbG9ja19zZXR1cF9wZXJjcHUodW5zaWduZWQgaW50IGNwdSlcXG4gXFx0cmV0dXJuIHAgPyAwIDogLUVOT01FTTtcXG4gfVxcbiBcXG4tdm9pZCBfX2luaXQga3ZtY2xvY2tfaW5pdCh2b2lkKVxcbitzdGF0aWMgX19pbml0IHZvaWQga3ZtX3NjaGVkX2Nsb2NrX2luaXQoYm9vbCBzdGFibGUpXFxuIHtcXG4tXFx0dTggZmxhZ3M7XFxuK1xcdC8qIEVuc3VyZSB0aGUgb2Zmc2V0IGlzIGNvbmZpZ3VyZWQgYmVmb3JlIG1ha2luZyBrdm1jbG9jayB2aXNpYmxlISAqL1xcbitcXHRrdm1fc2NoZWRfY2xvY2tfb2Zmc2V0ID0ga3ZtX2Nsb2NrX3JlYWQoKTtcXG4rXFxuK1xcdGlmIChfX3BhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayhrdm1fc2NoZWRfY2xvY2tfcmVhZCwgc3RhYmxlLFxcbitcXHRcXHRcXHRcXHQgICAgICAga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBCU1AncyBjbG9jayBpcyBtYW5hZ2VkIHZpYSBkZWRpY2F0ZWQgc2NoZWRfY2xvY2sgc2F2ZS9yZXN0b3JlXFxuK1xcdCAqIGhvb2tzIHdoZW4ga3ZtY2xvY2sgaXMgdXNlZCBhcyBzY2hlZF9jbG9jaywgYXMgc2NoZWRfY2xvY2sgbmVlZHMgdG9cXG4rXFx0ICogYmUga2VwdCBhbGl2ZSB1bnRpbCB0aGUgdmVyeSBlbmQgb2Ygc3VzcGVuZCBlbnRyeSwgYW5kIHJlc3RvcmVkIGFzXFxuK1xcdCAqIHF1aWNrbHkgYXMgcG9zc2libGUgYWZ0ZXIgcmVzdW1lLlxcbitcXHQgKi9cXG4rXFx0a3ZtX2Nsb2NrLnN1c3BlbmQgPSBOVUxMO1xcbitcXHRrdm1fY2xvY2sucmVzdW1lID0gTlVMTDtcXG4rXFxuK1xcdHByX2luZm8oXFxcImt2bS1jbG9jazogdXNpbmcgc2NoZWQgb2Zmc2V0IG9mICVsbHUgY3ljbGVzXFxcIixcXG4rXFx0XFx0a3ZtX3NjaGVkX2Nsb2NrX29mZnNldCk7XFxuK1xcbitcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKGt2bV9zY2hlZF9jbG9ja19vZmZzZXQpIFxcdTAwM2VcXG4rXFx0XFx0c2l6ZW9mKCgoc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gKilOVUxMKS1cXHUwMDNlc3lzdGVtX3RpbWUpKTtcXG4rfVxcbitcXG4rdm9pZCBfX2luaXQga3ZtY2xvY2tfaW5pdChib29sIHByZWZlcl90c2MpXFxuK3tcXG4rXFx0Ym9vbCBzdGFibGUgPSBmYWxzZTtcXG4gXFxuIFxcdGlmICgha3ZtX3BhcmFfYXZhaWxhYmxlKCkgfHwgIWt2bWNsb2NrKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTMzNCwzOCArNDAzLDQxIEBAIHZvaWQgX19pbml0IGt2bWNsb2NrX2luaXQodm9pZClcXG4gXFx0XFx0bXNyX2t2bV9zeXN0ZW1fdGltZSwgbXNyX2t2bV93YWxsX2Nsb2NrKTtcXG4gXFxuIFxcdHRoaXNfY3B1X3dyaXRlKGh2X2Nsb2NrX3Blcl9jcHUsIFxcdTAwMjZodl9jbG9ja19ib290WzBdKTtcXG4tXFx0a3ZtX3JlZ2lzdGVyX2Nsb2NrKFxcXCJwcmltYXJ5IGNwdSBjbG9ja1xcXCIpO1xcbitcXHRrdm1fcmVnaXN0ZXJfY2xvY2soXFxcInByaW1hcnkgY3B1LCBvbmxpbmVcXFwiKTtcXG4gXFx0cHZjbG9ja19zZXRfcHZ0aV9jcHUwX3ZhKGh2X2Nsb2NrX2Jvb3QpO1xcbiBcXG4tXFx0aWYgKGt2bV9wYXJhX2hhc19mZWF0dXJlKEtWTV9GRUFUVVJFX0NMT0NLU09VUkNFX1NUQUJMRV9CSVQpKVxcbitcXHRpZiAoa3ZtX3BhcmFfaGFzX2ZlYXR1cmUoS1ZNX0ZFQVRVUkVfQ0xPQ0tTT1VSQ0VfU1RBQkxFX0JJVCkpIHtcXG4gXFx0XFx0cHZjbG9ja19zZXRfZmxhZ3MoUFZDTE9DS19UU0NfU1RBQkxFX0JJVCk7XFxuIFxcbi1cXHRmbGFncyA9IHB2Y2xvY2tfcmVhZF9mbGFncyhcXHUwMDI2aHZfY2xvY2tfYm9vdFswXS5wdnRpKTtcXG4tXFx0a3ZtX3NjaGVkX2Nsb2NrX2luaXQoZmxhZ3MgXFx1MDAyNiBQVkNMT0NLX1RTQ19TVEFCTEVfQklUKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQ2hlY2sgaWYgdGhlIGNsb2NrIGlzIHN0YWJsZSAqYWZ0ZXIqIG1hcmtpbmcgVFNDX1NUQUJMRSBhcyBhXFxuK1xcdFxcdCAqIHZhbGlkIGZsYWcuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzdGFibGUgPSBwdmNsb2NrX3JlYWRfZmxhZ3MoXFx1MDAyNmh2X2Nsb2NrX2Jvb3RbMF0ucHZ0aSkgXFx1MDAyNlxcbitcXHRcXHRcXHQgUFZDTE9DS19UU0NfU1RBQkxFX0JJVDtcXG4rXFx0fVxcbiBcXG4tXFx0eDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MgPSBrdm1fZ2V0X3RzY19raHo7XFxuLVxcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ID0ga3ZtX2dldF90c2Nfa2h6O1xcbitcXG4rXFx0aWYgKCF4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeilcXG4rXFx0XFx0eDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHogPSBrdm1jbG9ja19nZXRfdHNjX2toejtcXG4rXFx0aWYgKCF4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeilcXG4rXFx0XFx0eDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHogPSBrdm1jbG9ja19nZXRfdHNjX2toejtcXG4gXFx0eDg2X3BsYXRmb3JtLmdldF93YWxsY2xvY2sgPSBrdm1fZ2V0X3dhbGxjbG9jaztcXG4gXFx0eDg2X3BsYXRmb3JtLnNldF93YWxsY2xvY2sgPSBrdm1fc2V0X3dhbGxjbG9jaztcXG4tI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQ1xcbisjaWZkZWYgQ09ORklHX1NNUFxcbiBcXHR4ODZfY3B1aW5pdC5lYXJseV9wZXJjcHVfY2xvY2tfaW5pdCA9IGt2bV9zZXR1cF9zZWNvbmRhcnlfY2xvY2s7XFxuICNlbmRpZlxcbi1cXHR4ODZfcGxhdGZvcm0uc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSA9IGt2bV9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlO1xcbi1cXHR4ODZfcGxhdGZvcm0ucmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSA9IGt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlO1xcbiBcXHRrdm1fZ2V0X3ByZXNldF9scGooKTtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIFg4Nl9GRUFUVVJFX05PTlNUT1BfVFNDIGlzIFRTQyBydW5zIGF0IGNvbnN0YW50IHJhdGVcXG4tXFx0ICogd2l0aCBQL1Qgc3RhdGVzIGFuZCBkb2VzIG5vdCBzdG9wIGluIGRlZXAgQy1zdGF0ZXMuXFxuLVxcdCAqXFxuLVxcdCAqIEludmFyaWFudCBUU0MgZXhwb3NlZCBieSBob3N0IG1lYW5zIGt2bWNsb2NrIGlzIG5vdCBuZWNlc3Nhcnk6XFxuLVxcdCAqIGNhbiB1c2UgVFNDIGFzIGNsb2Nrc291cmNlLlxcbi1cXHQgKlxcbitcXHQgKiBJZiBUU0MgaXMgcHJlZmVycmVkIG92ZXIga3ZtbG9jaywgZHJvcCBrdm1jbG9jaydzIHJhdGluZyBzbyB0aGF0IFRTQ1xcbitcXHQgKiBpcyBjaG9zZW4gYXMgdGhlIGNsb2Nrc291cmNlIChidXQgc3RpbGwgcmVnaXN0ZXIga3ZtY2xvY2sgaW4gY2FzZVxcbitcXHQgKiB0aGUga2VybmVsIGRvZXNuJ3Qgd2FudCB0byB1c2UgVFNDIGZvciB3aGF0ZXZlciByZWFzb24pLlxcbiBcXHQgKi9cXG4tXFx0aWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTk9OU1RPUF9UU0MpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhY2hlY2tfdHNjX3Vuc3RhYmxlKCkpXFxuK1xcdGlmIChwcmVmZXJfdHNjKVxcbiBcXHRcXHRrdm1fY2xvY2sucmF0aW5nID0gMjk5O1xcbitcXHRlbHNlXFxuK1xcdFxcdGt2bV9zY2hlZF9jbG9ja19pbml0KHN0YWJsZSk7XFxuIFxcbiBcXHRjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeihcXHUwMDI2a3ZtX2Nsb2NrLCBOU0VDX1BFUl9TRUMpO1xcbiBcXHRwdl9pbmZvLm5hbWUgPSBcXFwiS1ZNXFxcIjtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3B2Y2xvY2suYyBiL2FyY2gveDg2L2tlcm5lbC9wdmNsb2NrLmNcXG5pbmRleCBiM2Y4MTM3OWMyZmMwNi4uOGQwOTg4NDFhMjI1ZjYgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva2VybmVsL3B2Y2xvY2suY1xcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9wdmNsb2NrLmNcXG5AQCAtMTYsMTEgKzE2LDEyIEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vcHZjbG9jay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3ZndG9kLmhcXHUwMDNlXFxuIFxcbi1zdGF0aWMgdTggdmFsaWRfZmxhZ3MgX19yZWFkX21vc3RseSA9IDA7XFxuLXN0YXRpYyBzdHJ1Y3QgcHZjbG9ja192c3lzY2FsbF90aW1lX2luZm8gKnB2dGlfY3B1MF92YSBfX3JlYWRfbW9zdGx5O1xcbitzdGF0aWMgdTggdmFsaWRfZmxhZ3MgX19yb19hZnRlcl9pbml0ID0gMDtcXG4rc3RhdGljIHN0cnVjdCBwdmNsb2NrX3ZzeXNjYWxsX3RpbWVfaW5mbyAqcHZ0aV9jcHUwX3ZhIF9fcm9fYWZ0ZXJfaW5pdDtcXG4gXFxuLXZvaWQgcHZjbG9ja19zZXRfZmxhZ3ModTggZmxhZ3MpXFxuK3ZvaWQgX19pbml0IHB2Y2xvY2tfc2V0X2ZsYWdzKHU4IGZsYWdzKVxcbiB7XFxuK1xcdFdBUk5fT04odmFsaWRfZmxhZ3MpO1xcbiBcXHR2YWxpZF9mbGFncyA9IGZsYWdzO1xcbiB9XFxuIFxcbkBAIC0xNTMsNyArMTU0LDcgQEAgdm9pZCBwdmNsb2NrX3JlYWRfd2FsbGNsb2NrKHN0cnVjdCBwdmNsb2NrX3dhbGxfY2xvY2sgKndhbGxfY2xvY2ssXFxuIFxcdHNldF9ub3JtYWxpemVkX3RpbWVzcGVjNjQodHMsIG5vdy50dl9zZWMsIG5vdy50dl9uc2VjKTtcXG4gfVxcbiBcXG4tdm9pZCBwdmNsb2NrX3NldF9wdnRpX2NwdTBfdmEoc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICpwdnRpKVxcbit2b2lkIF9faW5pdCBwdmNsb2NrX3NldF9wdnRpX2NwdTBfdmEoc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICpwdnRpKVxcbiB7XFxuIFxcdFdBUk5fT04odmNsb2NrX3dhc191c2VkKFZEU09fQ0xPQ0tNT0RFX1BWQ0xPQ0spKTtcXG4gXFx0cHZ0aV9jcHUwX3ZhID0gcHZ0aTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RzYy5jIGIvYXJjaC94ODYva2VybmVsL3RzYy5jXFxuaW5kZXggY2UxMGFlNGIyOThiNzkuLjU2NGJlNGZhYTVhMGJiIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC90c2MuY1xcbisrKyBiL2FyY2gveDg2L2tlcm5lbC90c2MuY1xcbkBAIC0zNCw2ICszNCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vdG9wb2xvZ3kuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS91di91di5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3Nldi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL3RkeC5oXFx1MDAzZVxcbiBcXG4gdW5zaWduZWQgaW50IF9fcmVhZF9tb3N0bHkgY3B1X2toejtcXHQvKiBUU0MgY2xvY2tzIC8gdXNlYywgbm90IHVzZWQgaGVyZSAqL1xcbiBFWFBPUlRfU1lNQk9MKGNwdV9raHopO1xcbkBAIC0yNzksMTUgKzI4MCwyOCBAQCBib29sIHVzaW5nX25hdGl2ZV9zY2hlZF9jbG9jayh2b2lkKVxcbiBcXHRyZXR1cm4gc3RhdGljX2NhbGxfcXVlcnkocHZfc2NoZWRfY2xvY2spID09IG5hdGl2ZV9zY2hlZF9jbG9jaztcXG4gfVxcbiBcXG4tdm9pZCBwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodTY0ICgqZnVuYykodm9pZCkpXFxuK2ludCBfX2luaXQgX19wYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodTY0ICgqZnVuYykodm9pZCksIGJvb2wgc3RhYmxlLFxcbitcXHRcXHRcXHRcXHQgICAgICB2b2lkICgqc2F2ZSkodm9pZCksIHZvaWQgKCpyZXN0b3JlKSh2b2lkKSlcXG4ge1xcbitcXHQvKlxcbitcXHQgKiBEb24ndCByZXBsYWNlIFRTQyB3aXRoIGEgUFYgY2xvY2sgd2hlbiBydW5uaW5nIGFzIGEgQ29DbyBndWVzdCBhbmRcXG4rXFx0ICogdGhlIFRTQyBpcyBzZWN1cmUvdHJ1c3RlZDsgUFYgY2xvY2tzIGFyZSBlbXVsYXRlZCBieSB0aGUgaHlwZXJ2aXNvcixcXG4rXFx0ICogd2hpY2ggaXNuJ3QgaW4gdGhlIGd1ZXN0J3MgVENCLlxcbitcXHQgKi9cXG4rXFx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0dVRVNUX1NOUF9TRUNVUkVfVFNDKSB8fFxcbitcXHQgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXFxuK1xcdFxcdHJldHVybiAtRVBFUk07XFxuK1xcbitcXHRpZiAoIXN0YWJsZSlcXG4rXFx0XFx0Y2xlYXJfc2NoZWRfY2xvY2tfc3RhYmxlKCk7XFxuK1xcbiBcXHRzdGF0aWNfY2FsbF91cGRhdGUocHZfc2NoZWRfY2xvY2ssIGZ1bmMpO1xcbitcXHR4ODZfcGxhdGZvcm0uc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSA9IHNhdmU7XFxuK1xcdHg4Nl9wbGF0Zm9ybS5yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlID0gcmVzdG9yZTtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gI2Vsc2VcXG4gdTY0IHNjaGVkX2Nsb2NrX25vaW5zdHIodm9pZCkgX19hdHRyaWJ1dGVfXygoYWxpYXMoXFxcIm5hdGl2ZV9zY2hlZF9jbG9ja1xcXCIpKSk7XFxuLVxcbi1ib29sIHVzaW5nX25hdGl2ZV9zY2hlZF9jbG9jayh2b2lkKSB7IHJldHVybiB0cnVlOyB9XFxuLXZvaWQgcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKHU2NCAoKmZ1bmMpKHZvaWQpKSB7IH1cXG4gI2VuZGlmXFxuIFxcbiBub3RyYWNlIHU2NCBzY2hlZF9jbG9jayh2b2lkKVxcbkBAIC02NDUsNDYgKzY1OSw2OCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBxdWlja19waXRfY2FsaWJyYXRlKHZvaWQpXFxuIFxcdHJldHVybiBkZWx0YTtcXG4gfVxcbiBcXG4raW50IGNwdWlkX2dldF90c2NfaW5mbyhzdHJ1Y3QgY3B1aWRfdHNjX2luZm8gKmluZm8pXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGVjeF9oeiwgZWR4O1xcbitcXG4rXFx0aWYgKGJvb3RfY3B1X2RhdGEuY3B1aWRfbGV2ZWwgXFx1MDAzYyBDUFVJRF9MRUFGX1RTQylcXG4rXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcbitcXHQvKiBDUFVJRCAxNUggVFNDL0NyeXN0YWwgcmF0aW8sIHBsdXMgb3B0aW9uYWxseSBDcnlzdGFsIEh6ICovXFxuK1xcdGNwdWlkKENQVUlEX0xFQUZfVFNDLCBcXHUwMDI2aW5mby1cXHUwMDNlZGVub21pbmF0b3IsIFxcdTAwMjZpbmZvLVxcdTAwM2VudW1lcmF0b3IsIFxcdTAwMjZlY3hfaHosIFxcdTAwMjZlZHgpO1xcbitcXG4rXFx0aWYgKCFpbmZvLVxcdTAwM2VkZW5vbWluYXRvciB8fCAhaW5mby1cXHUwMDNlbnVtZXJhdG9yKVxcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE5vdGU6IHNvbWUgQ1BVcyBwcm92aWRlIHRoZSBtdWx0aXBsaWVyIGluZm9ybWF0aW9uLCBidXQgbm90IHRoZSBjb3JlXFxuK1xcdCAqIGNyeXN0YWwgZnJlcXVlbmN5LiAgVGhlIG11bHRpcGxpZXIgaW5mb3JtYXRpb24gaXMgc3RpbGwgdXNlZnVsIGZvclxcbitcXHQgKiBzdWNoIENQVXMsIGFzIHRoZSBjcnlzdGFsIGZyZXF1ZW5jeSBjYW4gYmUgZ2xlYW5lZCBmcm9tIENQVUlELjB4MTYuXFxuK1xcdCAqL1xcbitcXHRpbmZvLVxcdTAwM2VjcnlzdGFsX2toeiA9IGVjeF9oeiAvIDEwMDA7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbit1bnNpZ25lZCBpbnQgX19jcHVfa2h6X2Zyb21fY3B1aWQodm9pZClcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgZWF4X2Jhc2VfbWh6LCBlYngsIGVjeCwgZWR4O1xcbitcXG4rXFx0aWYgKGJvb3RfY3B1X2RhdGEuY3B1aWRfbGV2ZWwgXFx1MDAzYyBDUFVJRF9MRUFGX0ZSRVEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Y3B1aWQoQ1BVSURfTEVBRl9GUkVRLCBcXHUwMDI2ZWF4X2Jhc2VfbWh6LCBcXHUwMDI2ZWJ4LCBcXHUwMDI2ZWN4LCBcXHUwMDI2ZWR4KTtcXG4rXFxuK1xcdHJldHVybiBlYXhfYmFzZV9taHogKiAxMDAwO1xcbit9XFxuK1xcbiAvKipcXG4gICogbmF0aXZlX2NhbGlicmF0ZV90c2MgLSBkZXRlcm1pbmUgVFNDIGZyZXF1ZW5jeVxcbiAgKiBEZXRlcm1pbmUgVFNDIGZyZXF1ZW5jeSB2aWEgQ1BVSUQsIGVsc2UgcmV0dXJuIDAuXFxuICAqL1xcbi11bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfdHNjKHZvaWQpXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfdHNjKHZvaWQpXFxuIHtcXG4tXFx0dW5zaWduZWQgaW50IGVheF9kZW5vbWluYXRvciwgZWJ4X251bWVyYXRvciwgZWN4X2h6LCBlZHg7XFxuLVxcdHVuc2lnbmVkIGludCBjcnlzdGFsX2toejtcXG4rXFx0c3RydWN0IGNwdWlkX3RzY19pbmZvIGluZm87XFxuIFxcbiBcXHRpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKGJvb3RfY3B1X2RhdGEuY3B1aWRfbGV2ZWwgXFx1MDAzYyBDUFVJRF9MRUFGX1RTQylcXG4rXFx0aWYgKGNwdWlkX2dldF90c2NfaW5mbyhcXHUwMDI2aW5mbykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0ZWF4X2Rlbm9taW5hdG9yID0gZWJ4X251bWVyYXRvciA9IGVjeF9oeiA9IGVkeCA9IDA7XFxuLVxcbi1cXHQvKiBDUFVJRCAxNUggVFNDL0NyeXN0YWwgcmF0aW8sIHBsdXMgb3B0aW9uYWxseSBDcnlzdGFsIEh6ICovXFxuLVxcdGNwdWlkKENQVUlEX0xFQUZfVFNDLCBcXHUwMDI2ZWF4X2Rlbm9taW5hdG9yLCBcXHUwMDI2ZWJ4X251bWVyYXRvciwgXFx1MDAyNmVjeF9oeiwgXFx1MDAyNmVkeCk7XFxuLVxcbi1cXHRpZiAoZWJ4X251bWVyYXRvciA9PSAwIHx8IGVheF9kZW5vbWluYXRvciA9PSAwKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdGNyeXN0YWxfa2h6ID0gZWN4X2h6IC8gMTAwMDtcXG4tXFxuIFxcdC8qXFxuIFxcdCAqIERlbnZlcnRvbiBTb0NzIGRvbid0IHJlcG9ydCBjcnlzdGFsIGNsb2NrLCBhbmQgYWxzbyBkb24ndCBzdXBwb3J0XFxuIFxcdCAqIENQVUlEX0xFQUZfRlJFUSBmb3IgdGhlIGNhbGN1bGF0aW9uIGJlbG93LCBzbyBoYXJkY29kZSB0aGUgMjVNSHpcXG4gXFx0ICogY3J5c3RhbCBjbG9jay5cXG4gXFx0ICovXFxuLVxcdGlmIChjcnlzdGFsX2toeiA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdGJvb3RfY3B1X2RhdGEueDg2X3ZmbSA9PSBJTlRFTF9BVE9NX0dPTERNT05UX0QpXFxuLVxcdFxcdGNyeXN0YWxfa2h6ID0gMjUwMDA7XFxuK1xcdGlmICghaW5mby5jcnlzdGFsX2toeiBcXHUwMDI2XFx1MDAyNiBib290X2NwdV9kYXRhLng4Nl92Zm0gPT0gSU5URUxfQVRPTV9HT0xETU9OVF9EKVxcbitcXHRcXHRpbmZvLmNyeXN0YWxfa2h6ID0gMjUwMDA7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBUU0MgZnJlcXVlbmN5IHJlcG9ydGVkIGRpcmVjdGx5IGJ5IENQVUlEIGlzIGEgXFxcImhhcmR3YXJlIHJlcG9ydGVkXFxcIlxcbiBcXHQgKiBmcmVxdWVuY3kgYW5kIGlzIHRoZSBtb3N0IGFjY3VyYXRlIG9uZSBzbyBmYXIgd2UgaGF2ZS4gVGhpc1xcbiBcXHQgKiBpcyBjb25zaWRlcmVkIGEga25vd24gZnJlcXVlbmN5LlxcbiBcXHQgKi9cXG4tXFx0aWYgKGNyeXN0YWxfa2h6ICE9IDApXFxuK1xcdGlmIChpbmZvLmNyeXN0YWxfa2h6KVxcbiBcXHRcXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKTtcXG4gXFxuIFxcdC8qXFxuQEAgLTY5MiwxNSArNzI4LDEwIEBAIHVuc2lnbmVkIGxvbmcgbmF0aXZlX2NhbGlicmF0ZV90c2Modm9pZClcXG4gXFx0ICogY2xvY2ssIGJ1dCB3ZSBjYW4gZWFzaWx5IGNhbGN1bGF0ZSBpdCB0byBhIGhpZ2ggZGVncmVlIG9mIGFjY3VyYWN5XFxuIFxcdCAqIGJ5IGNvbnNpZGVyaW5nIHRoZSBjcnlzdGFsIHJhdGlvIGFuZCB0aGUgQ1BVIHNwZWVkLlxcbiBcXHQgKi9cXG4tXFx0aWYgKGNyeXN0YWxfa2h6ID09IDAgXFx1MDAyNlxcdTAwMjYgYm9vdF9jcHVfZGF0YS5jcHVpZF9sZXZlbCBcXHUwMDNlPSBDUFVJRF9MRUFGX0ZSRVEpIHtcXG4tXFx0XFx0dW5zaWduZWQgaW50IGVheF9iYXNlX21oeiwgZWJ4LCBlY3gsIGVkeDtcXG4rXFx0aWYgKCFpbmZvLmNyeXN0YWxfa2h6KVxcbitcXHRcXHRpbmZvLmNyeXN0YWxfa2h6ID0gX19jcHVfa2h6X2Zyb21fY3B1aWQoKSAqIGluZm8uZGVub21pbmF0b3IgLyBpbmZvLm51bWVyYXRvcjtcXG4gXFxuLVxcdFxcdGNwdWlkKENQVUlEX0xFQUZfRlJFUSwgXFx1MDAyNmVheF9iYXNlX21oeiwgXFx1MDAyNmVieCwgXFx1MDAyNmVjeCwgXFx1MDAyNmVkeCk7XFxuLVxcdFxcdGNyeXN0YWxfa2h6ID0gZWF4X2Jhc2VfbWh6ICogMTAwMCAqXFxuLVxcdFxcdFxcdGVheF9kZW5vbWluYXRvciAvIGVieF9udW1lcmF0b3I7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChjcnlzdGFsX2toeiA9PSAwKVxcbitcXHRpZiAoIWluZm8uY3J5c3RhbF9raHopXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0LypcXG5AQCAtNzEwLDQxICs3NDEsMzAgQEAgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX3RzYyh2b2lkKVxcbiBcXHRpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmZtID09IElOVEVMX0FUT01fR09MRE1PTlQpXFxuIFxcdFxcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTtcXG4gXFxuLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUNcXG4gXFx0LypcXG4gXFx0ICogVGhlIGxvY2FsIEFQSUMgYXBwZWFycyB0byBiZSBmZWQgYnkgdGhlIGNvcmUgY3J5c3RhbCBjbG9ja1xcbiBcXHQgKiAod2hpY2ggc291bmRzIGVudGlyZWx5IHNlbnNpYmxlKS4gV2UgY2FuIHNldCB0aGUgZ2xvYmFsXFxuIFxcdCAqIGxhcGljX3RpbWVyX3BlcmlvZCBoZXJlIHRvIGF2b2lkIGhhdmluZyB0byBjYWxpYnJhdGUgdGhlIEFQSUNcXG4gXFx0ICogdGltZXIgbGF0ZXIuXFxuIFxcdCAqL1xcbi1cXHRsYXBpY190aW1lcl9wZXJpb2QgPSBjcnlzdGFsX2toeiAqIDEwMDAgLyBIWjtcXG4tI2VuZGlmXFxuK1xcdGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHooaW5mby5jcnlzdGFsX2toeiwgXFxcIkNQVUlEIDB4MTUvMHgxNlxcXCIpO1xcbiBcXG4tXFx0cmV0dXJuIGNyeXN0YWxfa2h6ICogZWJ4X251bWVyYXRvciAvIGVheF9kZW5vbWluYXRvcjtcXG4rXFx0cmV0dXJuIGluZm8uY3J5c3RhbF9raHogKiBpbmZvLm51bWVyYXRvciAvIGluZm8uZGVub21pbmF0b3I7XFxuIH1cXG4gXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9raHpfZnJvbV9jcHVpZCh2b2lkKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCBlYXhfYmFzZV9taHosIGVieF9tYXhfbWh6LCBlY3hfYnVzX21oeiwgZWR4O1xcbi1cXG4gXFx0aWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVMKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmIChib290X2NwdV9kYXRhLmNwdWlkX2xldmVsIFxcdTAwM2MgQ1BVSURfTEVBRl9GUkVRKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdGVheF9iYXNlX21oeiA9IGVieF9tYXhfbWh6ID0gZWN4X2J1c19taHogPSBlZHggPSAwO1xcbi1cXG4tXFx0Y3B1aWQoQ1BVSURfTEVBRl9GUkVRLCBcXHUwMDI2ZWF4X2Jhc2VfbWh6LCBcXHUwMDI2ZWJ4X21heF9taHosIFxcdTAwMjZlY3hfYnVzX21oeiwgXFx1MDAyNmVkeCk7XFxuLVxcbi1cXHRyZXR1cm4gZWF4X2Jhc2VfbWh6ICogMTAwMDtcXG4rXFx0cmV0dXJuIF9fY3B1X2toel9mcm9tX2NwdWlkKCk7XFxuIH1cXG4gXFxuIC8qXFxuICAqIGNhbGlicmF0ZSBjcHUgdXNpbmcgcGl0LCBocGV0LCBhbmQgcHRpbWVyIG1ldGhvZHMuIFRoZXkgYXJlIGF2YWlsYWJsZVxcbiAgKiBsYXRlciBpbiBib290IGFmdGVyIGFjcGkgaXMgaW5pdGlhbGl6ZWQuXFxuICAqL1xcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwaXRfaHBldF9wdGltZXJfY2FsaWJyYXRlX2NwdSh2b2lkKVxcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX2NwdV9sYXRlKHZvaWQpXFxuIHtcXG4gXFx0dTY0IHRzYzEsIHRzYzIsIGRlbHRhLCByZWYxLCByZWYyO1xcbiBcXHR1bnNpZ25lZCBsb25nIHRzY19waXRfbWluID0gVUxPTkdfTUFYLCB0c2NfcmVmX21pbiA9IFVMT05HX01BWDtcXG5AQCAtODk2LDcgKzkxNiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBpdF9ocGV0X3B0aW1lcl9jYWxpYnJhdGVfY3B1KHZvaWQpXFxuIC8qKlxcbiAgKiBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSAtIGNhbiBjYWxpYnJhdGUgdGhlIGNwdSBlYXJseSBpbiBib290XFxuICAqL1xcbi11bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KHZvaWQpXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KHZvaWQpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncywgZmFzdF9jYWxpYnJhdGUgPSBjcHVfa2h6X2Zyb21fY3B1aWQoKTtcXG4gXFxuQEAgLTkxMCwyMCArOTMwLDYgQEAgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSh2b2lkKVxcbiBcXHRyZXR1cm4gZmFzdF9jYWxpYnJhdGU7XFxuIH1cXG4gXFxuLVxcbi0vKipcXG4tICogbmF0aXZlX2NhbGlicmF0ZV9jcHUgLSBjYWxpYnJhdGUgdGhlIGNwdVxcbi0gKi9cXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgbmF0aXZlX2NhbGlicmF0ZV9jcHUodm9pZClcXG4te1xcbi1cXHR1bnNpZ25lZCBsb25nIHRzY19mcmVxID0gbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHkoKTtcXG4tXFxuLVxcdGlmICghdHNjX2ZyZXEpXFxuLVxcdFxcdHRzY19mcmVxID0gcGl0X2hwZXRfcHRpbWVyX2NhbGlicmF0ZV9jcHUoKTtcXG4tXFxuLVxcdHJldHVybiB0c2NfZnJlcTtcXG4tfVxcbi1cXG4gdm9pZCByZWNhbGlicmF0ZV9jcHVfa2h6KHZvaWQpXFxuIHtcXG4gI2lmbmRlZiBDT05GSUdfU01QXFxuQEAgLTkzMiw4ICs5MzgsMTMgQEAgdm9pZCByZWNhbGlicmF0ZV9jcHVfa2h6KHZvaWQpXFxuIFxcdGlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1RTQykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGNwdV9raHogPSB4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX2NwdSgpO1xcbi1cXHR0c2Nfa2h6ID0geDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MoKTtcXG4rXFx0aWYgKFdBUk5fT05fT05DRShjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGNwdV9raHogPSBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSgpO1xcbitcXHRpZiAoIWNwdV9raHopXFxuK1xcdFxcdGNwdV9raHogPSBuYXRpdmVfY2FsaWJyYXRlX2NwdV9sYXRlKCk7XFxuK1xcdHRzY19raHogPSBuYXRpdmVfY2FsaWJyYXRlX3RzYygpO1xcbiBcXHRpZiAodHNjX2toeiA9PSAwKVxcbiBcXHRcXHR0c2Nfa2h6ID0gY3B1X2toejtcXG4gXFx0ZWxzZSBpZiAoYWJzKGNwdV9raHogLSB0c2Nfa2h6KSAqIDEwIFxcdTAwM2UgdHNjX2toeilcXG5AQCAtOTQyLDE0ICs5NTMsMjIgQEAgdm9pZCByZWNhbGlicmF0ZV9jcHVfa2h6KHZvaWQpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBjcHVfa2h6X29sZCwgY3B1X2toeik7XFxuICNlbmRpZlxcbiB9XFxuLUVYUE9SVF9TWU1CT0xfR1BMKHJlY2FsaWJyYXRlX2NwdV9raHopO1xcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHJlY2FsaWJyYXRlX2NwdV9raHosIFxcXCJwNC1jbG9ja21vZCxwb3dlcm5vdy1rN1xcXCIpO1xcbiBcXG4gXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgY3ljMm5zX3N1c3BlbmQ7XFxuIFxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdHNjX2lzX3NhdmVfcmVzdG9yZV9uZWVkZWQodm9pZClcXG4re1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCF1c2luZ19uYXRpdmVfc2NoZWRfY2xvY2soKSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiBzdGF0aWNfYnJhbmNoX2xpa2VseShcXHUwMDI2X191c2VfdHNjKSB8fCBzY2hlZF9jbG9ja19zdGFibGUoKTtcXG4rfVxcbitcXG4gdm9pZCB0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxcbiB7XFxuLVxcdGlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoXFx1MDAyNl9fdXNlX3RzYykgXFx1MDAyNlxcdTAwMjYgIXNjaGVkX2Nsb2NrX3N0YWJsZSgpKVxcbitcXHRpZiAoIXRzY19pc19zYXZlX3Jlc3RvcmVfbmVlZGVkKCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGN5YzJuc19zdXNwZW5kID0gc2NoZWRfY2xvY2soKTtcXG5AQCAtOTY5LDcgKzk4OCw3IEBAIHZvaWQgdHNjX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50IGNwdTtcXG4gXFxuLVxcdGlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoXFx1MDAyNl9fdXNlX3RzYykgXFx1MDAyNlxcdTAwMjYgIXNjaGVkX2Nsb2NrX3N0YWJsZSgpKVxcbitcXHRpZiAoIXRzY19pc19zYXZlX3Jlc3RvcmVfbmVlZGVkKCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG5AQCAtMTQzOSwyMSArMTQ1OCwyOCBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X3RzY19jbG9ja3NvdXJjZSh2b2lkKVxcbiAgKi9cXG4gZGV2aWNlX2luaXRjYWxsKGluaXRfdHNjX2Nsb2Nrc291cmNlKTtcXG4gXFxuLXN0YXRpYyBib29sIF9faW5pdCBkZXRlcm1pbmVfY3B1X3RzY19mcmVxdWVuY2llcyhib29sIGVhcmx5KVxcbitzdGF0aWMgYm9vbCBfX2luaXQgZGV0ZXJtaW5lX2NwdV90c2NfZnJlcXVlbmNpZXMoYm9vbCBlYXJseSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBrbm93bl9jcHVfa2h6LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IGtub3duX3RzY19raHopXFxuIHtcXG4gXFx0LyogTWFrZSBzdXJlIHRoYXQgY3B1IGFuZCB0c2MgYXJlIG5vdCBhbHJlYWR5IGNhbGlicmF0ZWQgKi9cXG4gXFx0V0FSTl9PTihjcHVfa2h6IHx8IHRzY19raHopO1xcbiBcXG4gXFx0aWYgKGVhcmx5KSB7XFxuLVxcdFxcdGNwdV9raHogPSB4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX2NwdSgpO1xcbi1cXHRcXHRpZiAodHNjX2Vhcmx5X2toeilcXG4tXFx0XFx0XFx0dHNjX2toeiA9IHRzY19lYXJseV9raHo7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEVhcmx5IENQVSBjYWxpYnJhdGlvbiBjYW4gb25seSB1c2UgbWV0aG9kcyB0aGF0IGFyZSBhdmFpbGFibGVcXG4rXFx0XFx0ICogZWFybHkgaW4gYm9vdCAob2J2aW91c2x5KS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChrbm93bl9jcHVfa2h6KVxcbitcXHRcXHRcXHRjcHVfa2h6ID0ga25vd25fY3B1X2toejtcXG4gXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHR0c2Nfa2h6ID0geDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MoKTtcXG4rXFx0XFx0XFx0Y3B1X2toeiA9IG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KCk7XFxuK1xcdFxcdGlmIChrbm93bl90c2Nfa2h6KVxcbitcXHRcXHRcXHR0c2Nfa2h6ID0ga25vd25fdHNjX2toejtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHR0c2Nfa2h6ID0gbmF0aXZlX2NhbGlicmF0ZV90c2MoKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0LyogV2Ugc2hvdWxkIG5vdCBiZSBoZXJlIHdpdGggbm9uLW5hdGl2ZSBjcHUgY2FsaWJyYXRpb24gKi9cXG4tXFx0XFx0V0FSTl9PTih4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX2NwdSAhPSBuYXRpdmVfY2FsaWJyYXRlX2NwdSk7XFxuLVxcdFxcdGNwdV9raHogPSBwaXRfaHBldF9wdGltZXJfY2FsaWJyYXRlX2NwdSgpO1xcbitcXHRcXHRjcHVfa2h6ID0gbmF0aXZlX2NhbGlicmF0ZV9jcHVfbGF0ZSgpO1xcbiBcXHR9XFxuIFxcbiBcXHQvKlxcbkBAIC0xNTAyLDE1ICsxNTI4LDQ4IEBAIHN0YXRpYyB2b2lkIF9faW5pdCB0c2NfZW5hYmxlX3NjaGVkX2Nsb2NrKHZvaWQpXFxuIFxcbiB2b2lkIF9faW5pdCB0c2NfZWFybHlfaW5pdCh2b2lkKVxcbiB7XFxuK1xcdHVuc2lnbmVkIGludCBrbm93bl9jcHVfa2h6ID0gMCwga25vd25fdHNjX2toeiA9IDA7XFxuK1xcbiBcXHRpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9UU0MpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdC8qIERvbid0IGNoYW5nZSBVViBUU0MgbXVsdGktY2hhc3NpcyBzeW5jaHJvbml6YXRpb24gKi9cXG4gXFx0aWYgKGlzX2Vhcmx5X3V2X3N5c3RlbSgpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRzbnBfc2VjdXJlX3RzY19pbml0KCk7XFxuK1xcdGlmICh4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeilcXG4rXFx0XFx0a25vd25fY3B1X2toeiA9IHg4Nl9pbml0Lmh5cGVyLmdldF9jcHVfa2h6KCk7XFxuIFxcbi1cXHRpZiAoIWRldGVybWluZV9jcHVfdHNjX2ZyZXF1ZW5jaWVzKHRydWUpKVxcbitcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfR1VFU1RfU05QX1NFQ1VSRV9UU0MpKVxcbitcXHRcXHRrbm93bl90c2Nfa2h6ID0gc25wX3NlY3VyZV90c2NfaW5pdCgpO1xcbitcXHRlbHNlIGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcXG4rXFx0XFx0a25vd25fdHNjX2toeiA9IHRkeF90c2NfaW5pdCgpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSWYgdGhlIFRTQyBmcmVxdWVuY3kgd2Fzbid0IHByb3ZpZGVkIGJ5IHRydXN0ZWQgZmlybXdhcmUsIHRyeSB0byBnZXRcXG4rXFx0ICogaXQgZnJvbSB0aGUgaHlwZXJ2aXNvciAod2hpY2ggaXMgdW50cnVzdGVkIHdoZW4gcnVubmluZyBhcyBhIENvQ28gZ3Vlc3QpLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFrbm93bl90c2Nfa2h6IFxcdTAwMjZcXHUwMDI2IHg4Nl9pbml0Lmh5cGVyLmdldF90c2Nfa2h6KVxcbitcXHRcXHRrbm93bl90c2Nfa2h6ID0geDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHooKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE1hcmsgdGhlIFRTQyBmcmVxdWVuY3kgYXMga25vd24gaWYgaXQgd2FzIG9idGFpbmVkIGZyb20gYSBoeXBlcnZpc29yXFxuK1xcdCAqIG9yIHRydXN0ZWQgZmlybXdhcmUuXFxuK1xcdCAqL1xcbitcXHRpZiAoa25vd25fdHNjX2toeilcXG4rXFx0XFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfS05PV05fRlJFUSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBJZ25vcmUgdGhlIHVzZXItcHJvdmlkZWQgVFNDIGZyZXF1ZW5jeSBpZiB0aGUgZXhhY3QgZnJlcXVlbmN5IHdhc1xcbitcXHQgKiBvYnRhaW5lZCBmcm9tIHRydXN0ZWQgZmlybXdhcmUgb3IgdGhlIGh5cGVydmlzb3IsIGFuZCBkb24ndCBtYXJrIHRoZVxcbitcXHQgKiBmcmVxdWVuY3kgYXMga25vd24sIGFzIHRoZSB1c2VyLXByb3ZpZGVkIGZyZXF1ZW5jeSBpcyBpbnRlbmRlZCBhcyBhXFxuK1xcdCAqIFxcXCJzdGFydGluZyBwb2ludFxcXCIsIG5vdCBhIGtub3duLCBndWFyYW50ZWVkIGZyZXF1ZW5jeVxcbitcXHQgKi9cXG4rXFx0aWYgKCFrbm93bl90c2Nfa2h6KVxcbitcXHRcXHRrbm93bl90c2Nfa2h6ID0gdHNjX2Vhcmx5X2toejtcXG4rXFx0ZWxzZSBpZiAodHNjX2Vhcmx5X2toeilcXG4rXFx0XFx0cHJfZXJyKFxcXCJJZ25vcmluZyAndHNjX2Vhcmx5X2toeicgaW4gZmF2b3Igb2YgZmlybXdhcmUvaHlwZXJ2aXNvci5cXFxcblxcXCIpO1xcbitcXG4rXFx0aWYgKCFkZXRlcm1pbmVfY3B1X3RzY19mcmVxdWVuY2llcyh0cnVlLCBrbm93bl9jcHVfa2h6LCBrbm93bl90c2Nfa2h6KSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR0c2NfZW5hYmxlX3NjaGVkX2Nsb2NrKCk7XFxuIH1cXG5AQCAtMTUyMiwxNiArMTU4MSw5IEBAIHZvaWQgX19pbml0IHRzY19pbml0KHZvaWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0LypcXG4tXFx0ICogbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHkgY2FuIG9ubHkgY2FsaWJyYXRlIHVzaW5nIG1ldGhvZHMgdGhhdCBhcmVcXG4tXFx0ICogYXZhaWxhYmxlIGVhcmx5IGluIGJvb3QuXFxuLVxcdCAqL1xcbi1cXHRpZiAoeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUgPT0gbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHkpXFxuLVxcdFxcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ID0gbmF0aXZlX2NhbGlicmF0ZV9jcHU7XFxuLVxcbiBcXHRpZiAoIXRzY19raHopIHtcXG4gXFx0XFx0LyogV2UgZmFpbGVkIHRvIGRldGVybWluZSBmcmVxdWVuY2llcyBlYXJsaWVyLCB0cnkgYWdhaW4gKi9cXG4tXFx0XFx0aWYgKCFkZXRlcm1pbmVfY3B1X3RzY19mcmVxdWVuY2llcyhmYWxzZSkpIHtcXG4rXFx0XFx0aWYgKCFkZXRlcm1pbmVfY3B1X3RzY19mcmVxdWVuY2llcyhmYWxzZSwgMCwgMCkpIHtcXG4gXFx0XFx0XFx0bWFya190c2NfdW5zdGFibGUoXFxcImNvdWxkIG5vdCBjYWxjdWxhdGUgVFNDIGtoelxcXCIpO1xcbiBcXHRcXHRcXHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19ERUFETElORV9USU1FUik7XFxuIFxcdFxcdFxcdHJldHVybjtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RzY19tc3IuYyBiL2FyY2gveDg2L2tlcm5lbC90c2NfbXNyLmNcXG5pbmRleCA0OGU2Y2MxY2IwMTdhNS4uYWVjZTA2MmFlZTdlODkgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva2VybmVsL3RzY19tc3IuY1xcbisrKyBiL2FyY2gveDg2L2tlcm5lbC90c2NfbXNyLmNcXG5AQCAtMjEwLDkgKzIxMCw3IEBAIHVuc2lnbmVkIGxvbmcgY3B1X2toel9mcm9tX21zcih2b2lkKVxcbiBcXHRpZiAoZnJlcSA9PSAwKVxcbiBcXHRcXHRwcl9lcnIoXFxcIkVycm9yIE1TUl9GU0JfRlJFUSBpbmRleCAlZCBpcyB1bmtub3duXFxcXG5cXFwiLCBpbmRleCk7XFxuIFxcbi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDXFxuLVxcdGxhcGljX3RpbWVyX3BlcmlvZCA9IChmcmVxICogMTAwMCkgLyBIWjtcXG4tI2VuZGlmXFxuK1xcdGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHooZnJlcSwgXFxcIk1TUl9GU0JfRlJFUVxcXCIpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogVFNDIGZyZXF1ZW5jeSBkZXRlcm1pbmVkIGJ5IE1TUiBpcyBhbHdheXMgY29uc2lkZXJlZCBcXFwia25vd25cXFwiXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jIGIvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmNcXG5pbmRleCAyNTJjNTgyN2QwNjM0Zi4uYjdhNDhlNjIyZjQ4OGEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmNcXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuY1xcbkBAIC0xNDcsOCArMTQ3LDYgQEAgc3RhdGljIHZvaWQgZW5jX2tleGVjX2ZpbmlzaF9ub29wKHZvaWQpIHt9XFxuIHN0YXRpYyBib29sIGlzX3ByaXZhdGVfbW1pb19ub29wKHU2NCBhZGRyKSB7cmV0dXJuIGZhbHNlOyB9XFxuIFxcbiBzdHJ1Y3QgeDg2X3BsYXRmb3JtX29wcyB4ODZfcGxhdGZvcm0gX19yb19hZnRlcl9pbml0ID0ge1xcbi1cXHQuY2FsaWJyYXRlX2NwdVxcdFxcdFxcdD0gbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHksXFxuLVxcdC5jYWxpYnJhdGVfdHNjXFx0XFx0XFx0PSBuYXRpdmVfY2FsaWJyYXRlX3RzYyxcXG4gXFx0LmdldF93YWxsY2xvY2tcXHRcXHRcXHQ9IG1hY2hfZ2V0X2Ntb3NfdGltZSxcXG4gXFx0LnNldF93YWxsY2xvY2tcXHRcXHRcXHQ9IG1hY2hfc2V0X2Ntb3NfdGltZSxcXG4gXFx0LmlvbW11X3NodXRkb3duXFx0XFx0XFx0PSBpb21tdV9zaHV0ZG93bl9ub29wLFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYyBiL2FyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jXFxuaW5kZXggMmY4YzMyMTczOTcyZDYuLjZjM2FmOTc0YzdjMmYxIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jXFxuKysrIGIvYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmNcXG5AQCAtNTM1LDkgKzUzNSw2IEBAIHZvaWQgX19pbml0IHNtZV9lYXJseV9pbml0KHZvaWQpXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHR4ODZfaW5pdC5yZXNvdXJjZXMuZG1pX3NldHVwID0gc25wX2RtaV9zZXR1cDtcXG4gXFx0fVxcbi1cXG4tXFx0aWYgKHNldl9zdGF0dXMgXFx1MDAyNiBNU1JfQU1ENjRfU05QX1NFQ1VSRV9UU0MpXFxuLVxcdFxcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTtcXG4gfVxcbiBcXG4gdm9pZCBfX2luaXQgbWVtX2VuY3J5cHRfZnJlZV9kZWNyeXB0ZWRfbWVtKHZvaWQpXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi90aW1lLmMgYi9hcmNoL3g4Ni94ZW4vdGltZS5jXFxuaW5kZXggZDYyYzE0MzM0YjM1MTAuLmJjMjZmMDBmYzUzZTVlIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L3hlbi90aW1lLmNcXG4rKysgYi9hcmNoL3g4Ni94ZW4vdGltZS5jXFxuQEAgLTM4LDEyICszOCwxMSBAQFxcbiBzdGF0aWMgdTY0IHhlbl9zY2hlZF9jbG9ja19vZmZzZXQgX19yZWFkX21vc3RseTtcXG4gXFxuIC8qIEdldCB0aGUgVFNDIHNwZWVkIGZyb20gWGVuICovXFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHhlbl90c2Nfa2h6KHZvaWQpXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IHhlbl90c2Nfa2h6KHZvaWQpXFxuIHtcXG4gXFx0c3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gKmluZm8gPVxcbiBcXHRcXHRcXHUwMDI2SFlQRVJWSVNPUl9zaGFyZWRfaW5mby1cXHUwMDNldmNwdV9pbmZvWzBdLnRpbWU7XFxuIFxcbi1cXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKTtcXG4gXFx0cmV0dXJuIHB2Y2xvY2tfdHNjX2toeihpbmZvKTtcXG4gfVxcbiBcXG5AQCAtNDQ0LDcgKzQ0Myw3IEBAIHZvaWQgeGVuX3Jlc3RvcmVfdGltZV9tZW1vcnlfYXJlYSh2b2lkKVxcbiBcXHR4ZW5fc2NoZWRfY2xvY2tfb2Zmc2V0ID0geGVuX2Nsb2Nrc291cmNlX3JlYWQoKSAtIHhlbl9jbG9ja192YWx1ZV9zYXZlZDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgeGVuX3NldHVwX3ZzeXNjYWxsX3RpbWVfaW5mbyh2b2lkKVxcbitzdGF0aWMgdm9pZCBfX2luaXQgeGVuX3NldHVwX3ZzeXNjYWxsX3RpbWVfaW5mbyh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3JlZ2lzdGVyX3RpbWVfbWVtb3J5X2FyZWEgdDtcXG4gXFx0c3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICp0aTtcXG5AQCAtNTY3LDkgKzU2NiwxNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgeGVuX2luaXRfdGltZV9jb21tb24odm9pZClcXG4ge1xcbiBcXHR4ZW5fc2NoZWRfY2xvY2tfb2Zmc2V0ID0geGVuX2Nsb2Nrc291cmNlX3JlYWQoKTtcXG4gXFx0c3RhdGljX2NhbGxfdXBkYXRlKHB2X3N0ZWFsX2Nsb2NrLCB4ZW5fc3RlYWxfY2xvY2spO1xcbi1cXHRwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2soeGVuX3NjaGVkX2Nsb2NrKTtcXG4gXFxuLVxcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjID0geGVuX3RzY19raHo7XFxuK1xcdC8qXFxuK1xcdCAqIFhlbiBoYXMgcGFyYXZpcnR1YWxpemVkIHN1c3BlbmQvcmVzdW1lIGFuZCBzbyBkb2Vzbid0IHVzZSB0aGUgY29tbW9uXFxuK1xcdCAqIHg4NiBzY2hlZF9jbG9jayBzYXZlL3Jlc3RvcmUgaG9va3MuXFxuK1xcdCAqL1xcbitcXHRwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2soeGVuX3NjaGVkX2Nsb2NrLCB4ODZfaW5pdF9ub29wLCB4ODZfaW5pdF9ub29wKTtcXG4rXFxuK1xcdHg4Nl9pbml0Lmh5cGVyLmdldF90c2Nfa2h6ID0geGVuX3RzY19raHo7XFxuIFxcdHg4Nl9wbGF0Zm9ybS5nZXRfd2FsbGNsb2NrID0geGVuX2dldF93YWxsY2xvY2s7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jXFxuaW5kZXggZGY1Njc3OTVkMTc1MWEuLjhlZTdhOWRlMGY0ZmRhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmNcXG4rKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jXFxuQEAgLTQ4OCwxNyArNDg4LDYgQEAgc3RhdGljIHZvaWQgcmVzdW1lX2h2X2Nsb2NrX3RzYyhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmFyZylcXG4gXFx0aHZfc2V0X21zcihIVl9NU1JfUkVGRVJFTkNFX1RTQywgdHNjX21zci5hc191aW50NjQpO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBDYWxsZWQgZHVyaW5nIHJlc3VtZSBmcm9tIGhpYmVybmF0aW9uLCBmcm9tIG92ZXJyaWRkZW5cXG4tICogeDg2X3BsYXRmb3JtLnJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUgcm91dGluZS4gVGhpcyBpcyB0byBhZGp1c3Qgb2Zmc2V0c1xcbi0gKiB1c2VkIHRvIGNhbGN1bGF0ZSB0aW1lIGZvciBodiB0c2MgcGFnZSBiYXNlZCBzY2hlZF9jbG9jaywgdG8gYWNjb3VudCBmb3JcXG4tICogdGltZSBzcGVudCBiZWZvcmUgaGliZXJuYXRpb24uXFxuLSAqL1xcbi12b2lkIGh2X2Fkal9zY2hlZF9jbG9ja19vZmZzZXQodTY0IG9mZnNldClcXG4te1xcbi1cXHRodl9zY2hlZF9jbG9ja19vZmZzZXQgLT0gb2Zmc2V0O1xcbi19XFxuLVxcbiAjaWZkZWYgSEFWRV9WRFNPX0NMT0NLTU9ERV9IVkNMT0NLXFxuIHN0YXRpYyBpbnQgaHZfY3NfZW5hYmxlKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpXFxuIHtcXG5AQCAtNTU0LDEwICs1NDMsMzUgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGh2X3NldHVwX3NjaGVkX2Nsb2NrKHZvaWQgKnNjaGVkX2Nsb2NrKVxcbiAjZWxpZiBkZWZpbmVkIENPTkZJR19QQVJBVklSVFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3RpbWVyLmhcXHUwMDNlXFxuIFxcbitzdGF0aWMgdTY0IGh2X3JlZl9jb3VudGVyX2F0X3N1c3BlbmQ7XFxuKy8qXFxuKyAqIEh5cGVyLVYgY2xvY2sgY291bnRlciByZXNldHMgZHVyaW5nIGhpYmVybmF0aW9uLiBTYXZlIGFuZCByZXN0b3JlIGNsb2NrXFxuKyAqIG9mZnNldCBkdXJpbmcgc3VzcGVuZC9yZXN1bWUsIHdoaWxlIGFsc28gY29uc2lkZXJpbmcgdGhlIHRpbWUgcGFzc2VkXFxuKyAqIGJlZm9yZSBzdXNwZW5kLiBUaGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IHNjaGVkX2Nsb2NrIHVzaW5nIGh2IHRzYyBwYWdlXFxuKyAqIGJhc2VkIGNsb2Nrc291cmNlLCBwcm9jZWVkcyBmcm9tIHdoZXJlIGl0IGxlZnQgb2ZmIGR1cmluZyBzdXNwZW5kIGFuZFxcbisgKiBpdCBzaG93cyBjb3JyZWN0IHRpbWUgZm9yIHRoZSB0aW1lc3RhbXBzIG9mIGtlcm5lbCBtZXNzYWdlcyBhZnRlciByZXN1bWUuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBodl9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXFxuK3tcXG4rXFx0aHZfcmVmX2NvdW50ZXJfYXRfc3VzcGVuZCA9IGh2X3JlYWRfcmVmZXJlbmNlX2NvdW50ZXIoKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaHZfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIEFkanVzdCB0aGUgb2Zmc2V0cyB1c2VkIGJ5IGh2IHRzYyBjbG9ja3NvdXJjZSB0b1xcbitcXHQgKiBhY2NvdW50IGZvciB0aGUgdGltZSBzcGVudCBiZWZvcmUgaGliZXJuYXRpb24uXFxuK1xcdCAqIGFkanVzdGVkIHZhbHVlID0gcmVmZXJlbmNlIGNvdW50ZXIgKHRpbWUpIGF0IHN1c3BlbmRcXG4rXFx0ICogICAgICAgICAgICAgICAgLSByZWZlcmVuY2UgY291bnRlciAodGltZSkgbm93LlxcbitcXHQgKi9cXG4rXFx0aHZfc2NoZWRfY2xvY2tfb2Zmc2V0IC09IChodl9yZWZfY291bnRlcl9hdF9zdXNwZW5kIC0gaHZfcmVhZF9yZWZlcmVuY2VfY291bnRlcigpKTtcXG4rfVxcbitcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGh2X3NldHVwX3NjaGVkX2Nsb2NrKHZvaWQgKnNjaGVkX2Nsb2NrKVxcbiB7XFxuIFxcdC8qIFdlJ3JlIG9uIHg4Ni94NjQgKmFuZCogdXNpbmcgUFYgb3BzICovXFxuLVxcdHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayhzY2hlZF9jbG9jayk7XFxuK1xcdHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayhzY2hlZF9jbG9jaywgaHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSxcXG4rXFx0XFx0XFx0XFx0IGh2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUpO1xcbiB9XFxuICNlbHNlIC8qICFDT05GSUdfR0VORVJJQ19TQ0hFRF9DTE9DSyBcXHUwMDI2XFx1MDAyNiAhQ09ORklHX1BBUkFWSVJUICovXFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBodl9zZXR1cF9zY2hlZF9jbG9jayh2b2lkICpzY2hlZF9jbG9jaykge31cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9jbG9ja3NvdXJjZS9oeXBlcnZfdGltZXIuaCBiL2luY2x1ZGUvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmhcXG5pbmRleCBkNDhkZDQxNzZmZDM1Yi4uYTRjODFhNjBmNTNkZmMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9jbG9ja3NvdXJjZS9oeXBlcnZfdGltZXIuaFxcbisrKyBiL2luY2x1ZGUvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmhcXG5AQCAtMzgsOCArMzgsNiBAQCBleHRlcm4gdm9pZCBodl9yZW1hcF90c2NfY2xvY2tzb3VyY2Uodm9pZCk7XFxuIGV4dGVybiB1bnNpZ25lZCBsb25nIGh2X2dldF90c2NfcGZuKHZvaWQpO1xcbiBleHRlcm4gc3RydWN0IG1zX2h5cGVydl90c2NfcGFnZSAqaHZfZ2V0X3RzY19wYWdlKHZvaWQpO1xcbiBcXG4tZXh0ZXJuIHZvaWQgaHZfYWRqX3NjaGVkX2Nsb2NrX29mZnNldCh1NjQgb2Zmc2V0KTtcXG4tXFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbFxcbiBodl9yZWFkX3RzY19wYWdlX3RzYyhjb25zdCBzdHJ1Y3QgbXNfaHlwZXJ2X3RzY19wYWdlICp0c2NfcGcsXFxuIFxcdFxcdCAgICAgdTY0ICpjdXJfdHNjLCB1NjQgKnRpbWUpXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jXFxuaW5kZXggYjFiNWVjNDNjMGYyN2IuLjViYzc3ZDM2YzdhMzY0IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmNcXG4rKysgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jXFxuQEAgLTIxODAsMTEgKzIxODAsMTYgQEAgdm9pZCB0aW1la2VlcGluZ19yZXN1bWUodm9pZClcXG4gXFx0dTY0IGN5Y2xlX25vdywgbnNlYztcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuLVxcdHJlYWRfcGVyc2lzdGVudF9jbG9jazY0KFxcdTAwMjZ0c19uZXcpO1xcbi1cXG4gXFx0Y2xvY2tldmVudHNfcmVzdW1lKCk7XFxuIFxcdGNsb2Nrc291cmNlX3Jlc3VtZSgpO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogUmVhZCBwZXJzaXN0ZW50IHRpbWUgYWZ0ZXIgY2xvY2tzb3VyY2VzIGhhdmUgYmVlbiByZXN1bWVkLiAgUGFyYXZpcnRcXG4rXFx0ICogY2xvY2tzIGhhdmUgYSBuYXN0eSBoYWJpdCBvZiBwaWdneWJhY2tpbmcgYSBwZXJzaXN0ZW50IGNsb2NrIG9uIGFcXG4rXFx0ICogc3lzdGVtIGNsb2NrLCBhbmQgbWF5IHJldHVybiBnYXJiYWdlIGlmIHRoZSBzeXN0ZW0gY2xvY2sgaXMgc3VzcGVuZGVkLlxcbitcXHQgKi9cXG4rXFx0cmVhZF9wZXJzaXN0ZW50X2Nsb2NrNjQoXFx1MDAyNnRzX25ldyk7XFxuK1xcbiBcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnRrX2NvcmUubG9jaywgZmxhZ3MpO1xcbiBcXG4gXFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6MTE6MDYuNzA4NDkzODg5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDExMzE3NDgzMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0dVRVNUXCIsXG4gICAgXCJQQVJBVklSVFwiLFxuICAgIFwiSFlQRVJWXCIsXG4gICAgXCJBQ1JOX0dVRVNUXCIsXG4gICAgXCJKQUlMSE9VU0VfR1VFU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1jbG9ja19jcHVfYWN0aW9uXCIsXG4gICAgXCJ0aW1la2VlcGluZ19yZXN1bWVcIixcbiAgICBcInRzY19zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlXCIsXG4gICAgXCJ0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZVwiLFxuICAgIFwia3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVcIixcbiAgICBcImt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlXCIsXG4gICAgXCJodl9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlXCIsXG4gICAgXCJodl9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBUU0MgYW5kIEFQSUMgZnJlcXVlbmN5IGNhbGlicmF0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBmb3IgeDg2IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoS1ZNLCBIeXBlci1WLCBWTXdhcmUsIEFDUk4sIEphaWxob3VzZSwgVERYLCBTRVYtU05QKS4gSXQgbW9kaWZpZXMgaG93IHNjaGVkX2Nsb2NrIHN0YXRlIGlzIHNhdmVkIGFuZCByZXN0b3JlZCBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgYW5kIENQVSBob3RwbHVnLCBwYXJ0aWN1bGFybHkgZm9yIGt2bWNsb2NrIGFuZCBIeXBlci1WIGNsb2NrLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gYSBLVk0gZ3Vlc3QgKHdoaWNoIHN5emthbGxlciB1c2VzKSBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgYW5kIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTkyMTAyODE1NDI4NzE0Y2M3NGY1ZGQzNmU3MzFmYjNkOGE4ZjhhZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMDI6MTE6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCBiNTQ5M2E3ZjhmMjI4MS4uYTM4N2JiMmM0N2UyZmIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC03OTQ2LDYgKzc5NDYsMTEgQEAgS2VybmVsIHBhcmFtZXRlcnNcbiBcdFx0XHR3aXRoIENQVUlELjE2aCBzdXBwb3J0IGFuZCBwYXJ0aWFsIENQVUlELjE1aCBzdXBwb3J0LlxuIFx0XHRcdEZvcm1hdDogXHUwMDNjdW5zaWduZWQgaW50XHUwMDNlXG4gXG4rXHRcdFx0Tm90ZSwgdHNjX2Vhcmx5X2toeiBpcyBpZ25vcmVkIGlmIHRoZSBUU0MgZnJlcXVlbmN5IGlzXG4rXHRcdFx0cHJvdmlkZWQgYnkgdHJ1c3RlZCBmaXJtd2FyZSB3aGVuIHJ1bm5pbmcgYXMgYW4gU05QIG9yXG4rXHRcdFx0VERYIGd1ZXN0LCBvciB3aGVuIHRoZSBoeXBlcnZpc29yIHByb3ZpZGVzIHRoZSBleGFjdFxuK1x0XHRcdGZyZXF1ZW5jeSB2aWEgYSBwYXJhdmlydHVhbCBpbnRlcmZhY2UuXG4rXG4gXHR0c3g9XHRcdFtYODZdIENvbnRyb2wgVHJhbnNhY3Rpb25hbCBTeW5jaHJvbml6YXRpb25cbiBcdFx0XHRFeHRlbnNpb25zIChUU1gpIGZlYXR1cmUgaW4gSW50ZWwgcHJvY2Vzc29ycyB0aGF0XG4gXHRcdFx0c3VwcG9ydCBUU1ggY29udHJvbC5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9jcHVpZC5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9jcHVpZC5yc3RcbmluZGV4IGJkYTNlM2U3MzdkNzFmLi5hNWVlOGZmMDUyY2U1NSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2NwdWlkLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvY3B1aWQucnN0XG5AQCAtMTIyLDMgKzEyMiwxNSBAQCBLVk1fSElOVFNfUkVBTFRJTUUgMCAgICAgICAgICAgIGd1ZXN0IGNoZWNrcyB0aGlzIGZlYXR1cmUgYml0IHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVlbXB0ZWQgZm9yIGFuIHVubGltaXRlZCB0aW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2luZyBvcHRpbWl6YXRpb25zXG4gPT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcbitmdW5jdGlvbjogS1ZNX0NQVUlEX1RJTUlOR19JTkZPICgweDQwMDAwMDEwKVxuK1xuK3JldHVybnM6OlxuK1xuKyAgIGVheCA9IChWaXJ0dWFsKSBUU0MgZnJlcXVlbmN5IGluIGtIelxuKyAgIGVieCA9IChWaXJ0dWFsKSBCdXMgKGxvY2FsIEFQSUMgdGltZXIpIGZyZXF1ZW5jeSBpbiBrSHpcbisgICBlY3ggPSAwIChSZXNlcnZlZClcbisgICBlZHggPSAwIChSZXNlcnZlZClcbitcbitOb3RlLCBLVk0gb25seSBkZWZpbmVzIHRoZSBzZW1hbnRpY3Mgb2YgS1ZNX0NQVUlEX1RJTUlOR19JTkZPOyBLVk0gZG9lcyBOT1RcbithZHZlcnRpc2Ugc3VwcG9ydCB2aWEgS1ZNX0dFVF9TVVBQT1JURURfQ1BVSUQuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvY29jby9zZXYvY29yZS5jIGIvYXJjaC94ODYvY29jby9zZXYvY29yZS5jXG5pbmRleCBlY2Q3N2QzMjE3ZjNjMy4uNzIzMTNiMzZiNmY1ZDEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmNcbisrKyBiL2FyY2gveDg2L2NvY28vc2V2L2NvcmUuY1xuQEAgLTk5LDcgKzk5LDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzZXZfc3RhdHVzX2ZlYXRfbmFtZXNbXSA9IHtcbiAgKi9cbiBzdGF0aWMgdTY0IHNucF90c2Nfc2NhbGUgX19yb19hZnRlcl9pbml0O1xuIHN0YXRpYyB1NjQgc25wX3RzY19vZmZzZXQgX19yb19hZnRlcl9pbml0O1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNucF90c2NfZnJlcV9raHogX19yb19hZnRlcl9pbml0O1xuIFxuIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzZXZfZXNfcnVudGltZV9kYXRhKiwgcnVudGltZV9kYXRhKTtcbiBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc2V2X2VzX3NhdmVfYXJlYSAqLCBzZXZfdm1zYSk7XG5AQCAtMjAxNCwyMCArMjAxMywxMiBAQCB2b2lkIF9faW5pdCBzbnBfc2VjdXJlX3RzY19wcmVwYXJlKHZvaWQpXG4gXHRwcl9kZWJ1ZyhcIlNlY3VyZVRTQyBlbmFibGVkXCIpO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzZWN1cmV0c2NfZ2V0X3RzY19raHoodm9pZClcbi17XG4tXHRyZXR1cm4gc25wX3RzY19mcmVxX2toejtcbi19XG4tXG4tdm9pZCBfX2luaXQgc25wX3NlY3VyZV90c2NfaW5pdCh2b2lkKVxuK3Vuc2lnbmVkIGludCBfX2luaXQgc25wX3NlY3VyZV90c2NfaW5pdCh2b2lkKVxuIHtcbitcdHVuc2lnbmVkIGxvbmcgc25wX3RzY19mcmVxX2toeiwgdHNjX2ZyZXFfbWh6O1xuIFx0c3RydWN0IHNucF9zZWNyZXRzX3BhZ2UgKnNlY3JldHM7XG4tXHR1bnNpZ25lZCBsb25nIHRzY19mcmVxX21oejtcbiBcdHZvaWQgKm1lbTtcbiBcbi1cdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfR1VFU1RfU05QX1NFQ1VSRV9UU0MpKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRtZW0gPSBlYXJseV9tZW1yZW1hcF9lbmNyeXB0ZWQoc2V2X3NlY3JldHNfcGEsIFBBR0VfU0laRSk7XG4gXHRpZiAoIW1lbSkge1xuIFx0XHRwcl9lcnIoXCJVbmFibGUgdG8gZ2V0IFRTQ19GQUNUT1I6IGZhaWxlZCB0byBtYXAgdGhlIFNOUCBzZWNyZXRzIHBhZ2UuXFxuXCIpO1xuQEAgLTIwMzYsNyArMjAyNyw4IEBAIHZvaWQgX19pbml0IHNucF9zZWN1cmVfdHNjX2luaXQodm9pZClcbiBcbiBcdHNlY3JldHMgPSAoX19mb3JjZSBzdHJ1Y3Qgc25wX3NlY3JldHNfcGFnZSAqKW1lbTtcbiBcbi1cdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpO1xuK1x0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfUkVMSUFCTEUpO1xuK1xuIFx0cmRtc3JxKE1TUl9BTUQ2NF9HVUVTVF9UU0NfRlJFUSwgdHNjX2ZyZXFfbWh6KTtcbiBcbiBcdC8qIEV4dHJhY3QgdGhlIEdVRVNUIFRTQyBNSFogZnJvbSBCSVRbMTc6MF0sIHJlc3QgaXMgcmVzZXJ2ZWQgc3BhY2UgKi9cbkBAIC0yMDQ0LDggKzIwMzYsNyBAQCB2b2lkIF9faW5pdCBzbnBfc2VjdXJlX3RzY19pbml0KHZvaWQpXG4gXG4gXHRzbnBfdHNjX2ZyZXFfa2h6ID0gU05QX1NDQUxFX1RTQ19GUkVRKHRzY19mcmVxX21oeiAqIDEwMDAsIHNlY3JldHMtXHUwMDNldHNjX2ZhY3Rvcik7XG4gXG4tXHR4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX2NwdSA9IHNlY3VyZXRzY19nZXRfdHNjX2toejtcbi1cdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjID0gc2VjdXJldHNjX2dldF90c2Nfa2h6O1xuLVxuIFx0ZWFybHlfbWVtdW5tYXAobWVtLCBQQUdFX1NJWkUpO1xuK1xuK1x0cmV0dXJuIHNucF90c2NfZnJlcV9raHo7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jIGIvYXJjaC94ODYvY29jby90ZHgvdGR4LmNcbmluZGV4IDI5YjZmMWVkNTllYzU0Li45NDY4MmFjYTE4OGI3OSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXG4rKysgYi9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguY1xuQEAgLTgsNiArOCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2V4ZWMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS9hcGljLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vY29jby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RkeC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3ZteC5oXHUwMDNlXG5AQCAtMTEyMyw5ICsxMTI0LDYgQEAgdm9pZCBfX2luaXQgdGR4X2Vhcmx5X2luaXQodm9pZClcbiBcbiBcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKTtcbiBcbi1cdC8qIFRTQyBpcyB0aGUgb25seSByZWxpYWJsZSBjbG9jayBpbiBURFggZ3Vlc3QgKi9cbi1cdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTtcbi1cbiBcdGNjX3ZlbmRvciA9IENDX1ZFTkRPUl9JTlRFTDtcbiBcbiBcdC8qIENvbmZpZ3VyZSB0aGUgVEQgKi9cbkBAIC0xMTk1LDMgKzExOTMsMTggQEAgdm9pZCBfX2luaXQgdGR4X2Vhcmx5X2luaXQodm9pZClcbiBcbiBcdHRkeF9hbm5vdW5jZSgpO1xuIH1cbitcbit1bnNpZ25lZCBpbnQgX19pbml0IHRkeF90c2NfaW5pdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBjcHVpZF90c2NfaW5mbyBpbmZvO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRShjcHVpZF9nZXRfdHNjX2luZm8oXHUwMDI2aW5mbykgfHwgIWluZm8uY3J5c3RhbF9raHopKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHooaW5mby5jcnlzdGFsX2toeiwgXCJURFgtTW9kdWxlIHZpYSBDUFVJRFwiKTtcbitcbitcdC8qIFRTQyBpcyB0aGUgb25seSByZWxpYWJsZSBjbG9jayBpbiBURFggZ3Vlc3QgKi9cbitcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTtcbitcbitcdHJldHVybiBpbmZvLmNyeXN0YWxfa2h6ICogaW5mby5udW1lcmF0b3IgLyBpbmZvLmRlbm9taW5hdG9yO1xuK31cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3JuLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3JuLmhcbmluZGV4IGRiNDJiNDc3YzQxZDM0Li5hODkyMTc5YzYxYzYyMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Fjcm4uaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNybi5oXG5AQCAtMzIsMTEgKzMyLDYgQEAgc3RhdGljIGlubGluZSB1MzIgYWNybl9jcHVpZF9iYXNlKHZvaWQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFjcm5fZ2V0X3RzY19raHoodm9pZClcbi17XG4tXHRyZXR1cm4gY3B1aWRfZWF4KEFDUk5fQ1BVSURfVElNSU5HX0lORk8pO1xuLX1cbi1cbiAvKlxuICAqIEh5cGVyY2FsbHMgZm9yIEFDUk5cbiAgKlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaFxuaW5kZXggOWNkNDkzZDQ2N2Q0ZDEuLjAzNTk5ODU1NWU5OTIyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmhcbkBAIC02Myw3ICs2Myw2IEBAIGV4dGVybiBpbnQgYXBpY192ZXJib3NpdHk7XG4gZXh0ZXJuIGludCBsb2NhbF9hcGljX3RpbWVyX2MyX29rO1xuIFxuIGV4dGVybiBib29sIGFwaWNfaXNfZGlzYWJsZWQ7XG4tZXh0ZXJuIHVuc2lnbmVkIGludCBsYXBpY190aW1lcl9wZXJpb2Q7XG4gXG4gZXh0ZXJuIGVudW0gYXBpY19pbnRyX21vZGVfaWQgYXBpY19pbnRyX21vZGU7XG4gZW51bSBhcGljX2ludHJfbW9kZV9pZCB7XG5AQCAtMTM4LDYgKzEzNyw4IEBAIHZvaWQgcmVnaXN0ZXJfbGFwaWNfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MpO1xuIGV4dGVybiB2b2lkIHNldHVwX2Jvb3RfQVBJQ19jbG9jayh2b2lkKTtcbiBleHRlcm4gdm9pZCBzZXR1cF9zZWNvbmRhcnlfQVBJQ19jbG9jayh2b2lkKTtcbiBleHRlcm4gdm9pZCBsYXBpY191cGRhdGVfdHNjX2ZyZXEodm9pZCk7XG4rZXh0ZXJuIHZvaWQgYXBpY19zZXRfdGltZXJfcGVyaW9kX2h6KHU2NCBwZXJpb2RfaHosIGNvbnN0IGNoYXIgKnNvdXJjZSk7XG4rZXh0ZXJuIHZvaWQgYXBpY19zZXRfdGltZXJfcGVyaW9kX2toeih1NjQgcGVyaW9kX2toeiwgY29uc3QgY2hhciAqc291cmNlKTtcbiBcbiAjaWZkZWYgQ09ORklHX1g4Nl82NFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBhcGljX2ZvcmNlX2VuYWJsZSh1bnNpZ25lZCBsb25nIGFkZHIpXG5AQCAtMTg4LDYgKzE4OSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2xvY2FsX0FQSUModm9pZCkgeyB9XG4gIyBkZWZpbmUgc2V0dXBfYm9vdF9BUElDX2Nsb2NrIHg4Nl9pbml0X25vb3BcbiAjIGRlZmluZSBzZXR1cF9zZWNvbmRhcnlfQVBJQ19jbG9jayB4ODZfaW5pdF9ub29wXG4gc3RhdGljIGlubGluZSB2b2lkIGxhcGljX3VwZGF0ZV90c2NfZnJlcSh2b2lkKSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgYXBpY19zZXRfdGltZXJfcGVyaW9kX2h6KHU2NCBwZXJpb2RfaHosIGNvbnN0IGNoYXIgKnNvdXJjZSkgeyB9XG4rc3RhdGljIGlubGluZSB2b2lkIGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHoodTY0IHBlcmlvZF9raHosIGNvbnN0IGNoYXIgKnNvdXJjZSkgeyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGluaXRfYnNwX0FQSUModm9pZCkgeyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGFwaWNfaW50cl9tb2RlX3NlbGVjdCh2b2lkKSB7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgYXBpY19pbnRyX21vZGVfaW5pdCh2b2lkKSB7IH1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaFxuaW5kZXggNGE0N2MxNmUyZGY4YzAuLjc2M2VkMDE3NzM4YTY3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaFxuQEAgLTExOCw4ICsxMTgsMTYgQEAgc3RhdGljIGlubGluZSBsb25nIGt2bV9zZXZfaHlwZXJjYWxsMyh1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGxvbmcgcDEsXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfS1ZNX0dVRVNUXG4tdm9pZCBrdm1jbG9ja19pbml0KHZvaWQpO1xuLXZvaWQga3ZtY2xvY2tfZGlzYWJsZSh2b2lkKTtcbitlbnVtIGt2bV9ndWVzdF9jcHVfYWN0aW9uIHtcbitcdEtWTV9HVUVTVF9CU1BfU1VTUEVORCxcbitcdEtWTV9HVUVTVF9CU1BfUkVTVU1FLFxuK1x0S1ZNX0dVRVNUX0FQX09OTElORSxcbitcdEtWTV9HVUVTVF9BUF9PRkZMSU5FLFxuK1x0S1ZNX0dVRVNUX1NIVVRET1dOLFxuK307XG4rXG4rdm9pZCBrdm1jbG9ja19pbml0KGJvb2wgcHJlZmVyX3RzYyk7XG4rdm9pZCBrdm1jbG9ja19jcHVfYWN0aW9uKGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKTtcbiBib29sIGt2bV9wYXJhX2F2YWlsYWJsZSh2b2lkKTtcbiB1bnNpZ25lZCBpbnQga3ZtX2FyY2hfcGFyYV9mZWF0dXJlcyh2b2lkKTtcbiB1bnNpZ25lZCBpbnQga3ZtX2FyY2hfcGFyYV9oaW50cyh2b2lkKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXG5pbmRleCA1OTRjZmExOWNiZDRiYS4uMDVlYmYwYjczZWY0N2QgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcbkBAIC01MzAsNyArNTMwLDcgQEAgaW50IHNucF9zZW5kX2d1ZXN0X3JlcXVlc3Qoc3RydWN0IHNucF9tc2dfZGVzYyAqbWRlc2MsIHN0cnVjdCBzbnBfZ3Vlc3RfcmVxICpyZXFcbiBpbnQgc25wX3N2c21fdnRwbV9zZW5kX2NvbW1hbmQodTggKmJ1ZmZlcik7XG4gXG4gdm9pZCBfX2luaXQgc25wX3NlY3VyZV90c2NfcHJlcGFyZSh2b2lkKTtcbi12b2lkIF9faW5pdCBzbnBfc2VjdXJlX3RzY19pbml0KHZvaWQpO1xuK3Vuc2lnbmVkIGludCBzbnBfc2VjdXJlX3RzY19pbml0KHZvaWQpO1xuIGVudW0gZXNfcmVzdWx0IHNhdmljX3JlZ2lzdGVyX2dwYSh1NjQgZ3BhKTtcbiBlbnVtIGVzX3Jlc3VsdCBzYXZpY191bnJlZ2lzdGVyX2dwYSh1NjQgKmdwYSk7XG4gdTY0IHNhdmljX2doY2JfbXNyX3JlYWQodTMyIHJlZyk7XG5AQCAtNjM3LDcgKzYzNyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNucF9zZW5kX2d1ZXN0X3JlcXVlc3Qoc3RydWN0IHNucF9tc2dfZGVzYyAqbWRlc2MsXG4gXHRcdFx0XHRcdCBzdHJ1Y3Qgc25wX2d1ZXN0X3JlcSAqcmVxKSB7IHJldHVybiAtRU5PREVWOyB9XG4gc3RhdGljIGlubGluZSBpbnQgc25wX3N2c21fdnRwbV9zZW5kX2NvbW1hbmQodTggKmJ1ZmZlcikgeyByZXR1cm4gLUVOT0RFVjsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgc25wX3NlY3VyZV90c2NfcHJlcGFyZSh2b2lkKSB7IH1cbi1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHNucF9zZWN1cmVfdHNjX2luaXQodm9pZCkgeyB9XG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19pbml0IHNucF9zZWN1cmVfdHNjX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXZfZXZpY3RfY2FjaGUodm9pZCAqdmEsIGludCBucGFnZXMpIHt9XG4gc3RhdGljIGlubGluZSBlbnVtIGVzX3Jlc3VsdCBzYXZpY19yZWdpc3Rlcl9ncGEodTY0IGdwYSkgeyByZXR1cm4gRVNfVU5TVVBQT1JURUQ7IH1cbiBzdGF0aWMgaW5saW5lIGVudW0gZXNfcmVzdWx0IHNhdmljX3VucmVnaXN0ZXJfZ3BhKHU2NCAqZ3BhKSB7IHJldHVybiBFU19VTlNVUFBPUlRFRDsgfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcbmluZGV4IDg5ZTk3ZDU3NjFkODllLi5kMjNmZjA2ZGI0MWFiZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuQEAgLTY4LDYgKzY4LDcgQEAgc3RydWN0IHZlX2luZm8ge1xuICNpZmRlZiBDT05GSUdfSU5URUxfVERYX0dVRVNUXG4gXG4gdm9pZCBfX2luaXQgdGR4X2Vhcmx5X2luaXQodm9pZCk7XG4rdW5zaWduZWQgaW50IF9faW5pdCB0ZHhfdHNjX2luaXQodm9pZCk7XG4gXG4gdm9pZCB0ZHhfZ2V0X3ZlX2luZm8oc3RydWN0IHZlX2luZm8gKnZlKTtcbiBcbkBAIC04OSw2ICs5MCw3IEBAIHZvaWQgX19pbml0IHRkeF9kdW1wX3RkX2N0bHModTY0IHRkX2N0bHMpO1xuICNlbHNlXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHRkeF9lYXJseV9pbml0KHZvaWQpIHsgfTtcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0ZHhfdHNjX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfaGFsdCh2b2lkKSB7IH07XG4gXG4gc3RhdGljIGlubGluZSBib29sIHRkeF9lYXJseV9oYW5kbGVfdmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgcmV0dXJuIGZhbHNlOyB9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmhcbmluZGV4IGZkYTE4YmNiMTliNDVhLi5hNTIzODhhZjYwNTVlNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmhcbkBAIC0xMSw4ICsxMSwyMSBAQCBleHRlcm4gdm9pZCByZWNhbGlicmF0ZV9jcHVfa2h6KHZvaWQpO1xuIFxuIGV4dGVybiBpbnQgbm9fdGltZXJfY2hlY2s7XG4gXG4rI2lmZGVmIENPTkZJR19QQVJBVklSVFxuIGV4dGVybiBib29sIHVzaW5nX25hdGl2ZV9zY2hlZF9jbG9jayh2b2lkKTtcbi12b2lkIHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh1NjQgKCpmdW5jKSh2b2lkKSk7XG4rXG4raW50IF9faW5pdCBfX3BhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh1NjQgKCpmdW5jKSh2b2lkKSwgYm9vbCBzdGFibGUsXG4rXHRcdFx0XHQgICAgICB2b2lkICgqc2F2ZSkodm9pZCksIHZvaWQgKCpyZXN0b3JlKSh2b2lkKSk7XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh1NjQgKCpmdW5jKSh2b2lkKSxcbitcdFx0XHRcdFx0XHQgICAgIHZvaWQgKCpzYXZlKSh2b2lkKSxcbitcdFx0XHRcdFx0XHQgICAgIHZvaWQgKCpyZXN0b3JlKSh2b2lkKSlcbit7XG4rXHQodm9pZClfX3BhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayhmdW5jLCB0cnVlLCBzYXZlLCByZXN0b3JlKTtcbit9XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGJvb2wgdXNpbmdfbmF0aXZlX3NjaGVkX2Nsb2NrKHZvaWQpIHsgcmV0dXJuIHRydWU7IH1cbisjZW5kaWZcbiBcbiAvKlxuICAqIFdlIHVzZSB0aGUgZnVsbCBsaW5lYXIgZXF1YXRpb246IGYoeCkgPSBhICsgYip4LCBpbiBvcmRlciB0byBhbGxvd1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RzYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdHNjLmhcbmluZGV4IDRkMmQyZjIxZmYwNjNmLi5jYjY4MmYwOTdlYTdjYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RzYy5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90c2MuaFxuQEAgLTgyLDE0ICs4MiwyMCBAQCBzdGF0aWMgaW5saW5lIGN5Y2xlc190IGdldF9jeWNsZXModm9pZClcbiB9XG4gI2RlZmluZSBnZXRfY3ljbGVzIGdldF9jeWNsZXNcbiBcbitzdHJ1Y3QgY3B1aWRfdHNjX2luZm8ge1xuK1x0dW5zaWduZWQgaW50IGRlbm9taW5hdG9yO1xuK1x0dW5zaWduZWQgaW50IG51bWVyYXRvcjtcbitcdHVuc2lnbmVkIGludCBjcnlzdGFsX2toejtcbit9O1xuK2V4dGVybiBpbnQgY3B1aWRfZ2V0X3RzY19pbmZvKHN0cnVjdCBjcHVpZF90c2NfaW5mbyAqaW5mbyk7XG4rZXh0ZXJuIHVuc2lnbmVkIGludCBfX2NwdV9raHpfZnJvbV9jcHVpZCh2b2lkKTtcbitcbiBleHRlcm4gdm9pZCB0c2NfZWFybHlfaW5pdCh2b2lkKTtcbiBleHRlcm4gdm9pZCB0c2NfaW5pdCh2b2lkKTtcbiBleHRlcm4gdm9pZCBtYXJrX3RzY191bnN0YWJsZShjaGFyICpyZWFzb24pO1xuIGV4dGVybiBpbnQgdW5zeW5jaHJvbml6ZWRfdHNjKHZvaWQpO1xuIGV4dGVybiBpbnQgY2hlY2tfdHNjX3Vuc3RhYmxlKHZvaWQpO1xuIGV4dGVybiB2b2lkIG1hcmtfdHNjX2FzeW5jX3Jlc2V0cyhjaGFyICpyZWFzb24pO1xuLWV4dGVybiB1bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KHZvaWQpO1xuLWV4dGVybiB1bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfdHNjKHZvaWQpO1xuIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgbmF0aXZlX3NjaGVkX2Nsb2NrX2Zyb21fdHNjKHU2NCB0c2MpO1xuIFxuIGV4dGVybiBpbnQgdHNjX2Nsb2Nrc291cmNlX3JlbGlhYmxlO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oXG5pbmRleCA5NTNkMzE5OTQwOGFlNS4uZTg3OWU2ZTgzNDI4MzAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oXG5AQCAtMTIzLDYgKzEyMyw4IEBAIHN0cnVjdCB4ODZfaW5pdF9wY2kge1xuICAqIEBtc2lfZXh0X2Rlc3RfaWQ6XHRcdE1TSSBzdXBwb3J0cyAxNS1iaXQgQVBJQyBJRHNcbiAgKiBAaW5pdF9tZW1fbWFwcGluZzpcdFx0c2V0dXAgZWFybHkgbWFwcGluZ3MgZHVyaW5nIGluaXRfbWVtX21hcHBpbmcoKVxuICAqIEBpbml0X2FmdGVyX2Jvb3RtZW06XHRcdGd1ZXN0IGluaXQgYWZ0ZXIgYm9vdCBhbGxvY2F0b3IgaXMgZmluaXNoZWRcbisgKiBAZ2V0X3RzY19raHo6XHRcdGdldCB0aGUgVFNDIGZyZXF1ZW5jeSAocmV0dXJucyAwIGlmIGZyZXF1ZW5jeSBpcyB1bmtub3duKVxuKyAqIEBnZXRfY3B1X2toejpcdFx0Z2V0IHRoZSBDUFUgZnJlcXVlbmN5IChyZXR1cm5zIDAgaWYgZnJlcXVlbmN5IGlzIHVua25vd24pXG4gICovXG4gc3RydWN0IHg4Nl9oeXBlcl9pbml0IHtcbiBcdHZvaWQgKCppbml0X3BsYXRmb3JtKSh2b2lkKTtcbkBAIC0xMzEsNiArMTMzLDggQEAgc3RydWN0IHg4Nl9oeXBlcl9pbml0IHtcbiBcdGJvb2wgKCptc2lfZXh0X2Rlc3RfaWQpKHZvaWQpO1xuIFx0dm9pZCAoKmluaXRfbWVtX21hcHBpbmcpKHZvaWQpO1xuIFx0dm9pZCAoKmluaXRfYWZ0ZXJfYm9vdG1lbSkodm9pZCk7XG4rXHR1bnNpZ25lZCBpbnQgKCpnZXRfdHNjX2toeikodm9pZCk7XG4rXHR1bnNpZ25lZCBpbnQgKCpnZXRfY3B1X2toeikodm9pZCk7XG4gfTtcbiBcbiAvKipcbkBAIC0yOTEsOCArMjk1LDYgQEAgc3RydWN0IHg4Nl9oeXBlcl9ydW50aW1lIHtcbiBcbiAvKipcbiAgKiBzdHJ1Y3QgeDg2X3BsYXRmb3JtX29wcyAtIHBsYXRmb3JtIHNwZWNpZmljIHJ1bnRpbWUgZnVuY3Rpb25zXG4tICogQGNhbGlicmF0ZV9jcHU6XHRcdGNhbGlicmF0ZSBDUFVcbi0gKiBAY2FsaWJyYXRlX3RzYzpcdFx0Y2FsaWJyYXRlIFRTQywgaWYgZGlmZmVyZW50IGZyb20gQ1BVXG4gICogQGdldF93YWxsY2xvY2s6XHRcdGdldCB0aW1lIGZyb20gSFcgY2xvY2sgbGlrZSBSVEMgZXRjLlxuICAqIEBzZXRfd2FsbGNsb2NrOlx0XHRzZXQgdGltZSBiYWNrIHRvIEhXIGNsb2NrXG4gICogQGlvbW11X3NodXRkb3duOlx0XHRzZXQgYnkgYW4gSU9NTVUgZHJpdmVyIGZvciBzaHV0ZG93biBpZiBuZWNlc3NhcnlcbkBAIC0zMTYsOCArMzE4LDYgQEAgc3RydWN0IHg4Nl9oeXBlcl9ydW50aW1lIHtcbiAgKiBAZ3Vlc3Q6XHRcdFx0Z3Vlc3QgaW5jYXJuYXRpb25zIGNhbGxiYWNrc1xuICAqL1xuIHN0cnVjdCB4ODZfcGxhdGZvcm1fb3BzIHtcbi1cdHVuc2lnbmVkIGxvbmcgKCpjYWxpYnJhdGVfY3B1KSh2b2lkKTtcbi1cdHVuc2lnbmVkIGxvbmcgKCpjYWxpYnJhdGVfdHNjKSh2b2lkKTtcbiBcdHZvaWQgKCpnZXRfd2FsbGNsb2NrKShzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpO1xuIFx0aW50ICgqc2V0X3dhbGxjbG9jaykoY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKTtcbiBcdHZvaWQgKCppb21tdV9zaHV0ZG93bikodm9pZCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm1fcGFyYS5oIGIvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm1fcGFyYS5oXG5pbmRleCBhMWVmYTc5MDdhMGIxMC4uYzNhMzg0NzExZjNhNWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bV9wYXJhLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtX3BhcmEuaFxuQEAgLTQ0LDYgKzQ0LDE3IEBAXG4gICovXG4gI2RlZmluZSBLVk1fRkVBVFVSRV9DTE9DS1NPVVJDRV9TVEFCTEVfQklUXHQyNFxuIFxuKy8qXG4rICogVGhlIHRpbWluZyBpbmZvcm1hdGlvbiBsZWFmIHByb3ZpZGVzIFRTQyBhbmQgbG9jYWwgQVBJQyB0aW1lciBmcmVxdWVuY3lcbisgKiBpbmZvcm1hdGlvbiB0byB0aGUgZ3Vlc3QuICBOb3RlLCB1c2Vyc3BhY2UgaXMgcmVzcG9uc2libGUgZm9yIGZpbGxpbmcgdGhlXG4rICogbGVhZiB3aXRoIHRoZSBjb3JyZWN0IGluZm9ybWF0aW9uLlxuKyAqXG4rICogICMgRUFYOiAoVmlydHVhbCkgVFNDIGZyZXF1ZW5jeSBpbiBrSHouXG4rICogICMgRUJYOiAoVmlydHVhbCkgQnVzIChsb2NhbCBBUElDIHRpbWVyKSBmcmVxdWVuY3kgaW4ga0h6LlxuKyAqICAjIEVDWCwgRURYOiBSZXNlcnZlZCAobXVzdCBiZSB6ZXJvKS5cbisgKi9cbisjZGVmaW5lIEtWTV9DUFVJRF9USU1JTkdfSU5GT1x0MHg0MDAwMDAxMFxuK1xuICNkZWZpbmUgTVNSX0tWTV9XQUxMX0NMT0NLICAweDExXG4gI2RlZmluZSBNU1JfS1ZNX1NZU1RFTV9USU1FIDB4MTJcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmNcbmluZGV4IGFhMWUxOTk3OWFhOGUxLi44ZDNkOTMwNTc2ZmQ3MSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuY1xuKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jXG5AQCAtMTc2LDcgKzE3Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbGFwaWNfcmVzb3VyY2UgPSB7XG4gfTtcbiBcbiAvKiBNZWFzdXJlZCBpbiB0aWNrcyBwZXIgSFouICovXG4tdW5zaWduZWQgaW50IGxhcGljX3RpbWVyX3BlcmlvZCA9IDA7XG4rc3RhdGljIHVuc2lnbmVkIGludCBsYXBpY190aW1lcl9wZXJpb2Q7XG4gXG4gc3RhdGljIHZvaWQgYXBpY19wbV9hY3RpdmF0ZSh2b2lkKTtcbiBcbkBAIC03OTYsNiArNzk2LDE2IEBAIGJvb2wgX19pbml0IGFwaWNfbmVlZHNfcGl0KHZvaWQpXG4gXHRyZXR1cm4gbGFwaWNfdGltZXJfcGVyaW9kID09IDA7XG4gfVxuIFxuK3ZvaWQgYXBpY19zZXRfdGltZXJfcGVyaW9kX2toeih1NjQgcGVyaW9kX2toeiwgY29uc3QgY2hhciAqc291cmNlKVxuK3tcbitcdGxhcGljX3RpbWVyX3BlcmlvZCA9IG11bF91NjRfdTMyX2RpdihwZXJpb2Rfa2h6LCAxMDAwLCBIWik7XG4rfVxuK1xuK3ZvaWQgYXBpY19zZXRfdGltZXJfcGVyaW9kX2h6KHU2NCBwZXJpb2RfaHosIGNvbnN0IGNoYXIgKnNvdXJjZSlcbit7XG4rXHRsYXBpY190aW1lcl9wZXJpb2QgPSBkaXZfdTY0KHBlcmlvZF9oeiwgSFopO1xuK31cbitcbiBzdGF0aWMgaW50IF9faW5pdCBjYWxpYnJhdGVfQVBJQ19jbG9jayh2b2lkKVxuIHtcbiBcdHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmxldnQgPSB0aGlzX2NwdV9wdHIoXHUwMDI2bGFwaWNfZXZlbnRzKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2Fjcm4uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYWNybi5jXG5pbmRleCBkYzExOWFmODM1MjQyYS4uZGM3MWE2ZmRkNDYxMzkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2Fjcm4uY1xuKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9hY3JuLmNcbkBAIC0xOSwxOCArMTksMjggQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vaWR0ZW50cnkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9pcnFfcmVncy5oXHUwMDNlXG4gXG4rc3RhdGljIHVuc2lnbmVkIGludCBhY3JuX3RzY19raHpfY3B1aWQgX19pbml0ZGF0YTtcbitcbiBzdGF0aWMgdTMyIF9faW5pdCBhY3JuX2RldGVjdCh2b2lkKVxuIHtcbiBcdHJldHVybiBhY3JuX2NwdWlkX2Jhc2UoKTtcbiB9XG4gXG4rc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgYWNybl9nZXRfdHNjX2toeih2b2lkKVxuK3tcbitcdHJldHVybiBhY3JuX3RzY19raHpfY3B1aWQ7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIF9faW5pdCBhY3JuX2luaXRfcGxhdGZvcm0odm9pZClcbiB7XG4gXHQvKiBJbnN0YWxsIHN5c3RlbSBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgQUNSTiBoeXBlcnZpc29yIGNhbGxiYWNrICovXG4gXHRzeXN2ZWNfaW5zdGFsbChIWVBFUlZJU09SX0NBTExCQUNLX1ZFQ1RPUiwgc3lzdmVjX2Fjcm5faHZfY2FsbGJhY2spO1xuIFxuLVx0eDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MgPSBhY3JuX2dldF90c2Nfa2h6O1xuLVx0eDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUgPSBhY3JuX2dldF90c2Nfa2h6O1xuK1x0YWNybl90c2Nfa2h6X2NwdWlkID0gY3B1aWRfZWF4KEFDUk5fQ1BVSURfVElNSU5HX0lORk8pO1xuK1x0aWYgKGFjcm5fdHNjX2toel9jcHVpZCkge1xuK1x0XHR4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeiA9IGFjcm5fZ2V0X3RzY19raHo7XG4rXHRcdHg4Nl9pbml0Lmh5cGVyLmdldF9jcHVfa2h6ID0gYWNybl9nZXRfdHNjX2toejtcbitcdH1cbiB9XG4gXG4gc3RhdGljIGJvb2wgYWNybl94MmFwaWNfYXZhaWxhYmxlKHZvaWQpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tc2h5cGVydi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tc2h5cGVydi5jXG5pbmRleCAxODVkNGY2NzdlYzBmMC4uYzRkYThlMzUzMTlhY2YgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21zaHlwZXJ2LmNcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuY1xuQEAgLTI3NSw2MyArMjc1LDYgQEAgc3RhdGljIHZvaWQgaHZfZ3Vlc3RfY3Jhc2hfc2h1dGRvd24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gfVxuICNlbmRpZiAvKiBDT05GSUdfQ1JBU0hfRFVNUCAqL1xuIFxuLXN0YXRpYyB1NjQgaHZfcmVmX2NvdW50ZXJfYXRfc3VzcGVuZDtcbi1zdGF0aWMgdm9pZCAoKm9sZF9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKSh2b2lkKTtcbi1zdGF0aWMgdm9pZCAoKm9sZF9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKSh2b2lkKTtcbi1cbi0vKlxuLSAqIEh5cGVyLVYgY2xvY2sgY291bnRlciByZXNldHMgZHVyaW5nIGhpYmVybmF0aW9uLiBTYXZlIGFuZCByZXN0b3JlIGNsb2NrXG4tICogb2Zmc2V0IGR1cmluZyBzdXNwZW5kL3Jlc3VtZSwgd2hpbGUgYWxzbyBjb25zaWRlcmluZyB0aGUgdGltZSBwYXNzZWRcbi0gKiBiZWZvcmUgc3VzcGVuZC4gVGhpcyBpcyB0byBtYWtlIHN1cmUgdGhhdCBzY2hlZF9jbG9jayB1c2luZyBodiB0c2MgcGFnZVxuLSAqIGJhc2VkIGNsb2Nrc291cmNlLCBwcm9jZWVkcyBmcm9tIHdoZXJlIGl0IGxlZnQgb2ZmIGR1cmluZyBzdXNwZW5kIGFuZFxuLSAqIGl0IHNob3dzIGNvcnJlY3QgdGltZSBmb3IgdGhlIHRpbWVzdGFtcHMgb2Yga2VybmVsIG1lc3NhZ2VzIGFmdGVyIHJlc3VtZS5cbi0gKi9cbi1zdGF0aWMgdm9pZCBzYXZlX2h2X2Nsb2NrX3RzY19zdGF0ZSh2b2lkKVxuLXtcbi1cdGh2X3JlZl9jb3VudGVyX2F0X3N1c3BlbmQgPSBodl9yZWFkX3JlZmVyZW5jZV9jb3VudGVyKCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHJlc3RvcmVfaHZfY2xvY2tfdHNjX3N0YXRlKHZvaWQpXG4te1xuLVx0Lypcbi1cdCAqIEFkanVzdCB0aGUgb2Zmc2V0cyB1c2VkIGJ5IGh2IHRzYyBjbG9ja3NvdXJjZSB0b1xuLVx0ICogYWNjb3VudCBmb3IgdGhlIHRpbWUgc3BlbnQgYmVmb3JlIGhpYmVybmF0aW9uLlxuLVx0ICogYWRqdXN0ZWQgdmFsdWUgPSByZWZlcmVuY2UgY291bnRlciAodGltZSkgYXQgc3VzcGVuZFxuLVx0ICogICAgICAgICAgICAgICAgLSByZWZlcmVuY2UgY291bnRlciAodGltZSkgbm93LlxuLVx0ICovXG4tXHRodl9hZGpfc2NoZWRfY2xvY2tfb2Zmc2V0KGh2X3JlZl9jb3VudGVyX2F0X3N1c3BlbmQgLSBodl9yZWFkX3JlZmVyZW5jZV9jb3VudGVyKCkpO1xuLX1cbi1cbi0vKlxuLSAqIEZ1bmN0aW9ucyB0byBvdmVycmlkZSBzYXZlX3NjaGVkX2Nsb2NrX3N0YXRlIGFuZCByZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlXG4tICogZnVuY3Rpb25zIG9mIHg4Nl9wbGF0Zm9ybS4gVGhlIEh5cGVyLVYgY2xvY2sgY291bnRlciBpcyByZXNldCBkdXJpbmdcbi0gKiBzdXNwZW5kLXJlc3VtZSBhbmQgdGhlIG9mZnNldCB1c2VkIHRvIG1lYXN1cmUgdGltZSBuZWVkcyB0byBiZVxuLSAqIGNvcnJlY3RlZCwgcG9zdCByZXN1bWUuXG4tICovXG4tc3RhdGljIHZvaWQgaHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxuLXtcbi1cdG9sZF9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKCk7XG4tXHRzYXZlX2h2X2Nsb2NrX3RzY19zdGF0ZSgpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBodl9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXG4te1xuLVx0cmVzdG9yZV9odl9jbG9ja190c2Nfc3RhdGUoKTtcbi1cdG9sZF9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIF9faW5pdCB4ODZfc2V0dXBfb3BzX2Zvcl90c2NfcGdfY2xvY2sodm9pZClcbi17XG4tXHRpZiAoIShtc19oeXBlcnYuZmVhdHVyZXMgXHUwMDI2IEhWX01TUl9SRUZFUkVOQ0VfVFNDX0FWQUlMQUJMRSkpXG4tXHRcdHJldHVybjtcbi1cbi1cdG9sZF9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlID0geDg2X3BsYXRmb3JtLnNhdmVfc2NoZWRfY2xvY2tfc3RhdGU7XG4tXHR4ODZfcGxhdGZvcm0uc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSA9IGh2X3NhdmVfc2NoZWRfY2xvY2tfc3RhdGU7XG4tXG4tXHRvbGRfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSA9IHg4Nl9wbGF0Zm9ybS5yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlO1xuLVx0eDg2X3BsYXRmb3JtLnJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUgPSBodl9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlO1xuLX1cbi1cbiAjaWZkZWYgQ09ORklHX1g4Nl82NFxuIERFRklORV9TVEFUSUNfQ0FMTChodl9oeXBlcmNhbGwsIGh2X3N0ZF9oeXBlcmNhbGwpO1xuIEVYUE9SVF9TVEFUSUNfQ0FMTF9UUkFNUF9HUEwoaHZfaHlwZXJjYWxsKTtcbkBAIC0zOTUsNyArMzM4LDcgQEAgc3RhdGljIGludCBodl9ubWlfdW5rbm93bih1bnNpZ25lZCBpbnQgdmFsLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiB9XG4gI2VuZGlmXG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgaHZfZ2V0X3RzY19raHoodm9pZClcbitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBodl9nZXRfdHNjX2toeih2b2lkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZnJlcTtcbiBcbkBAIC01NzMsOSArNTE2LDggQEAgc3RhdGljIHZvaWQgX19pbml0IG1zX2h5cGVydl9pbml0X3BsYXRmb3JtKHZvaWQpXG4gXG4gXHRpZiAobXNfaHlwZXJ2LmZlYXR1cmVzIFx1MDAyNiBIVl9BQ0NFU1NfRlJFUVVFTkNZX01TUlMgXHUwMDI2XHUwMDI2XG4gXHQgICAgbXNfaHlwZXJ2Lm1pc2NfZmVhdHVyZXMgXHUwMDI2IEhWX0ZFQVRVUkVfRlJFUVVFTkNZX01TUlNfQVZBSUxBQkxFKSB7XG4tXHRcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjID0gaHZfZ2V0X3RzY19raHo7XG4tXHRcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ID0gaHZfZ2V0X3RzY19raHo7XG4tXHRcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpO1xuK1x0XHR4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeiA9IGh2X2dldF90c2Nfa2h6O1xuK1x0XHR4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeiA9IGh2X2dldF90c2Nfa2h6O1xuIFx0fVxuIFxuIFx0aWYgKG1zX2h5cGVydi5wcml2X2hpZ2ggXHUwMDI2IEhWX0lTT0xBVElPTikge1xuQEAgLTY0NiwxMCArNTg4LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IG1zX2h5cGVydl9pbml0X3BsYXRmb3JtKHZvaWQpXG4gXHRcdHU2NFx0aHZfbGFwaWNfZnJlcXVlbmN5O1xuIFxuIFx0XHRyZG1zcnEoSFZfWDY0X01TUl9BUElDX0ZSRVFVRU5DWSwgaHZfbGFwaWNfZnJlcXVlbmN5KTtcbi1cdFx0aHZfbGFwaWNfZnJlcXVlbmN5ID0gZGl2X3U2NChodl9sYXBpY19mcmVxdWVuY3ksIEhaKTtcbi1cdFx0bGFwaWNfdGltZXJfcGVyaW9kID0gaHZfbGFwaWNfZnJlcXVlbmN5O1xuLVx0XHRwcl9pbmZvKFwiSHlwZXItVjogTEFQSUMgVGltZXIgRnJlcXVlbmN5OiAlI3hcXG5cIixcbi1cdFx0XHRsYXBpY190aW1lcl9wZXJpb2QpO1xuK1x0XHRhcGljX3NldF90aW1lcl9wZXJpb2RfaHooaHZfbGFwaWNfZnJlcXVlbmN5LCBcIkh5cGVyLVYgaHlwZXJ2aXNvclwiKTtcbiBcdH1cbiBcbiBcdHJlZ2lzdGVyX25taV9oYW5kbGVyKE5NSV9VTktOT1dOLCBodl9ubWlfdW5rbm93biwgTk1JX0ZMQUdfRklSU1QsXG5AQCAtNzQwLDcgKzY3OSw2IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtc19oeXBlcnZfaW5pdF9wbGF0Zm9ybSh2b2lkKVxuIFxuIFx0LyogUmVnaXN0ZXIgSHlwZXItViBzcGVjaWZpYyBjbG9ja3NvdXJjZSAqL1xuIFx0aHZfaW5pdF9jbG9ja3NvdXJjZSgpO1xuLVx0eDg2X3NldHVwX29wc19mb3JfdHNjX3BnX2Nsb2NrKCk7XG4gXHRodl92dGxfaW5pdF9wbGF0Zm9ybSgpO1xuICNlbmRpZlxuIFx0LypcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Ztd2FyZS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuY1xuaW5kZXggMzRiNzM1NzNiMTA4ZDcuLjIzMjI1NTI3OWE2ZWVjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuY1xuKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuY1xuQEAgLTY0LDcgKzY0LDcgQEAgc3RydWN0IHZtd2FyZV9zdGVhbF90aW1lIHtcbiBcdHU2NCByZXNlcnZlZFs3XTtcbiB9O1xuIFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHZtd2FyZV90c2Nfa2h6IF9fcm9fYWZ0ZXJfaW5pdDtcbitzdGF0aWMgdW5zaWduZWQgbG9uZyB2bXdhcmVfdHNjX2toeiBfX2luaXRkYXRhO1xuIHN0YXRpYyB1OCB2bXdhcmVfaHlwZXJjYWxsX21vZGUgICAgIF9fcm9fYWZ0ZXJfaW5pdDtcbiBcbiB1bnNpZ25lZCBsb25nIHZtd2FyZV9oeXBlcmNhbGxfc2xvdyh1bnNpZ25lZCBsb25nIGNtZCxcbkBAIC0xMzcsNyArMTM3LDcgQEAgc3RhdGljIGlubGluZSBpbnQgX192bXdhcmVfcGxhdGZvcm0odm9pZClcbiBcdHJldHVybiBlYXggIT0gVUlOVF9NQVggXHUwMDI2XHUwMDI2IGVieCA9PSBWTVdBUkVfSFlQRVJWSVNPUl9NQUdJQztcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgdm13YXJlX2dldF90c2Nfa2h6KHZvaWQpXG4rc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgdm13YXJlX2dldF90c2Nfa2h6KHZvaWQpXG4ge1xuIFx0cmV0dXJuIHZtd2FyZV90c2Nfa2h6O1xuIH1cbkBAIC0zNDgsNyArMzQ4LDggQEAgc3RhdGljIHZvaWQgX19pbml0IHZtd2FyZV9wYXJhdmlydF9vcHNfc2V0dXAodm9pZClcbiBcdHZtd2FyZV9jeWMybnNfc2V0dXAoKTtcbiBcbiBcdGlmICh2bXdfc2NoZWRfY2xvY2spXG4tXHRcdHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh2bXdhcmVfc2NoZWRfY2xvY2spO1xuK1x0XHRwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodm13YXJlX3NjaGVkX2Nsb2NrLFxuK1x0XHRcdFx0XHQgeDg2X2luaXRfbm9vcCwgeDg2X2luaXRfbm9vcCk7XG4gXG4gXHRpZiAodm13YXJlX2lzX3N0ZWFsY2xvY2tfYXZhaWxhYmxlKCkpIHtcbiBcdFx0aGFzX3N0ZWFsX2Nsb2NrID0gdHJ1ZTtcbkBAIC0zOTAsOCArMzkxLDYgQEAgc3RhdGljIHZvaWQgX19pbml0IHZtd2FyZV9zZXRfY2FwYWJpbGl0aWVzKHZvaWQpXG4ge1xuIFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpO1xuIFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfUkVMSUFCTEUpO1xuLVx0aWYgKHZtd2FyZV90c2Nfa2h6KVxuLVx0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKTtcbiBcdGlmICh2bXdhcmVfaHlwZXJjYWxsX21vZGUgPT0gQ1BVSURfVk1XQVJFX0ZFQVRVUkVTX0VDWF9WTUNBTEwpXG4gXHRcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVk1DQUxMKTtcbiBcdGVsc2UgaWYgKHZtd2FyZV9oeXBlcmNhbGxfbW9kZSA9PSBDUFVJRF9WTVdBUkVfRkVBVFVSRVNfRUNYX1ZNTUNBTEwpXG5AQCAtNDE5LDE1ICs0MTgsMTEgQEAgc3RhdGljIHZvaWQgX19pbml0IHZtd2FyZV9wbGF0Zm9ybV9zZXR1cCh2b2lkKVxuIFx0XHR9XG4gXG4gXHRcdHZtd2FyZV90c2Nfa2h6ID0gdHNjX2toejtcbi1cdFx0eDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MgPSB2bXdhcmVfZ2V0X3RzY19raHo7XG4tXHRcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ID0gdm13YXJlX2dldF90c2Nfa2h6O1xuK1x0XHR4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeiA9IHZtd2FyZV9nZXRfdHNjX2toejtcbitcdFx0eDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHogPSB2bXdhcmVfZ2V0X3RzY19raHo7XG4gXG4tI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQ1xuIFx0XHQvKiBTa2lwIGxhcGljIGNhbGlicmF0aW9uIHNpbmNlIHdlIGtub3cgdGhlIGJ1cyBmcmVxdWVuY3kuICovXG4tXHRcdGxhcGljX3RpbWVyX3BlcmlvZCA9IGVjeCAvIEhaO1xuLVx0XHRwcl9pbmZvKFwiSG9zdCBidXMgY2xvY2sgc3BlZWQgcmVhZCBmcm9tIGh5cGVydmlzb3IgOiAldSBIelxcblwiLFxuLVx0XHRcdGVjeCk7XG4tI2VuZGlmXG4rXHRcdGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9oeihlY3gsIFwiVk13YXJlIGh5cGVydmlzb3JcIik7XG4gXHR9IGVsc2Uge1xuIFx0XHRwcl93YXJuKFwiRmFpbGVkIHRvIGdldCBUU0MgZnJlcSBmcm9tIHRoZSBoeXBlcnZpc29yXFxuXCIpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9qYWlsaG91c2UuYyBiL2FyY2gveDg2L2tlcm5lbC9qYWlsaG91c2UuY1xuaW5kZXggZjU4Y2U5MjIwZTBmMzIuLmZmMTczMDUyY2RjZWRjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2phaWxob3VzZS5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvamFpbGhvdXNlLmNcbkBAIC02NSwxMCArNjUsMTAgQEAgc3RhdGljIHZvaWQgamFpbGhvdXNlX2dldF93YWxsY2xvY2soc3RydWN0IHRpbWVzcGVjNjQgKm5vdylcbiBcbiBzdGF0aWMgdm9pZCBfX2luaXQgamFpbGhvdXNlX3RpbWVyX2luaXQodm9pZClcbiB7XG4tXHRsYXBpY190aW1lcl9wZXJpb2QgPSBzZXR1cF9kYXRhLnYxLmFwaWNfa2h6ICogKDEwMDAgLyBIWik7XG4rXHRhcGljX3NldF90aW1lcl9wZXJpb2Rfa2h6KHNldHVwX2RhdGEudjEuYXBpY19raHosIFwiSmFpbGhvdXNlIGh5cGVydmlzb3JcIik7XG4gfVxuIFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGphaWxob3VzZV9nZXRfdHNjKHZvaWQpXG4rc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgamFpbGhvdXNlX2dldF90c2Modm9pZClcbiB7XG4gXHRyZXR1cm4gcHJlY2FsaWJyYXRlZF90c2Nfa2h6O1xuIH1cbkBAIC0yMTAsOCArMjEwLDYgQEAgc3RhdGljIHZvaWQgX19pbml0IGphaWxob3VzZV9pbml0X3BsYXRmb3JtKHZvaWQpXG4gXHR4ODZfaW5pdC5tcHBhcnNlLnBhcnNlX3NtcF9jZmdcdFx0PSBqYWlsaG91c2VfcGFyc2Vfc21wX2NvbmZpZztcbiBcdHg4Nl9pbml0LnBjaS5hcmNoX2luaXRcdFx0XHQ9IGphaWxob3VzZV9wY2lfYXJjaF9pbml0O1xuIFxuLVx0eDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHVcdFx0PSBqYWlsaG91c2VfZ2V0X3RzYztcbi1cdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjXHRcdD0gamFpbGhvdXNlX2dldF90c2M7XG4gXHR4ODZfcGxhdGZvcm0uZ2V0X3dhbGxjbG9ja1x0XHQ9IGphaWxob3VzZV9nZXRfd2FsbGNsb2NrO1xuIFx0eDg2X3BsYXRmb3JtLmxlZ2FjeS5ydGNcdFx0XHQ9IDA7XG4gXHR4ODZfcGxhdGZvcm0ubGVnYWN5Lndhcm1fcmVzZXRcdFx0PSAwO1xuQEAgLTI1Nyw3ICsyNTUsNiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgamFpbGhvdXNlX2luaXRfcGxhdGZvcm0odm9pZClcbiBcdHByX2RlYnVnKFwiSmFpbGhvdXNlOiBQTS1UaW1lciBJTyBQb3J0OiAlI3hcXG5cIiwgcG10bXJfaW9wb3J0KTtcbiBcbiBcdHByZWNhbGlicmF0ZWRfdHNjX2toeiA9IHNldHVwX2RhdGEudjEudHNjX2toejtcbi1cdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpO1xuIFxuIFx0cGNpX3Byb2JlID0gMDtcbiBcbkBAIC0yOTMsNSArMjkwLDcgQEAgY29uc3Qgc3RydWN0IGh5cGVydmlzb3JfeDg2IHg4Nl9oeXBlcl9qYWlsaG91c2UgX19yZWZjb25zdCA9IHtcbiBcdC5kZXRlY3RcdFx0XHQ9IGphaWxob3VzZV9kZXRlY3QsXG4gXHQuaW5pdC5pbml0X3BsYXRmb3JtXHQ9IGphaWxob3VzZV9pbml0X3BsYXRmb3JtLFxuIFx0LmluaXQueDJhcGljX2F2YWlsYWJsZVx0PSBqYWlsaG91c2VfeDJhcGljX2F2YWlsYWJsZSxcbitcdC5pbml0LmdldF90c2Nfa2h6XHQ9IGphaWxob3VzZV9nZXRfdHNjLFxuK1x0LmluaXQuZ2V0X2NwdV9raHpcdD0gamFpbGhvdXNlX2dldF90c2MsXG4gXHQuaWdub3JlX25vcHZcdFx0PSB0cnVlLFxuIH07XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2t2bS5jIGIvYXJjaC94ODYva2VybmVsL2t2bS5jXG5pbmRleCBkY2VmODRkYTMwNGI4OS4uYmVlYTBiNmFhNzhlMWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3ZtLmNcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9rdm0uY1xuQEAgLTQ5LDYgKzQ5LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc3ZtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZTgyMC9hcGkuaFx1MDAzZVxuIFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQga3ZtX3RzY19raHpfY3B1aWQgX19pbml0ZGF0YTtcbitzdGF0aWMgdW5zaWduZWQgaW50IGt2bV9jcHVfa2h6X2NwdWlkIF9faW5pdGRhdGE7XG4rXG4gREVGSU5FX1NUQVRJQ19LRVlfRkFMU0VfUk8oa3ZtX2FzeW5jX3BmX2VuYWJsZWQpO1xuIFxuIHN0YXRpYyBpbnQga3ZtYXBmID0gMTtcbkBAIC00NTcsNyArNDYwLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHNldl9tYXBfcGVyY3B1X2RhdGEodm9pZClcbiBcdH1cbiB9XG4gXG4tc3RhdGljIHZvaWQga3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKGJvb2wgc2h1dGRvd24pXG4rc3RhdGljIHZvaWQga3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKVxuIHtcbiBcdGt2bV9kaXNhYmxlX3N0ZWFsX3RpbWUoKTtcbiBcdGlmIChrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9QVl9FT0kpKVxuQEAgLTQ2NSwyMyArNDY4LDMwIEBAIHN0YXRpYyB2b2lkIGt2bV9ndWVzdF9jcHVfb2ZmbGluZShib29sIHNodXRkb3duKVxuIFx0aWYgKGt2bV9wYXJhX2hhc19mZWF0dXJlKEtWTV9GRUFUVVJFX01JR1JBVElPTl9DT05UUk9MKSlcbiBcdFx0d3Jtc3JxKE1TUl9LVk1fTUlHUkFUSU9OX0NPTlRST0wsIDApO1xuIFx0a3ZtX3B2X2Rpc2FibGVfYXBmKCk7XG4tXHRpZiAoIXNodXRkb3duKVxuK1x0aWYgKGFjdGlvbiAhPSBLVk1fR1VFU1RfU0hVVERPV04pXG4gXHRcdGFwZl90YXNrX3dha2VfYWxsKCk7XG4tXHRrdm1jbG9ja19kaXNhYmxlKCk7XG4rXG4rXHRrdm1jbG9ja19jcHVfYWN0aW9uKGFjdGlvbik7XG4gfVxuIFxuLXN0YXRpYyBpbnQga3ZtX2NwdV9vbmxpbmUodW5zaWduZWQgaW50IGNwdSlcbitzdGF0aWMgdm9pZCBfX2t2bV9jcHVfb25saW5lKHVuc2lnbmVkIGludCBjcHUsIGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4rXHRrdm1jbG9ja19jcHVfYWN0aW9uKGFjdGlvbik7XG4gXHRrdm1fZ3Vlc3RfY3B1X2luaXQoKTtcbiBcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbi1cdHJldHVybiAwO1xuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1NNUFxuIFxuK3N0YXRpYyBpbnQga3ZtX2NwdV9vbmxpbmUodW5zaWduZWQgaW50IGNwdSlcbit7XG4rXHRfX2t2bV9jcHVfb25saW5lKGNwdSwgS1ZNX0dVRVNUX0FQX09OTElORSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIERFRklORV9QRVJfQ1BVKGNwdW1hc2tfdmFyX3QsIF9fcHZfY3B1X21hc2spO1xuIFxuIHN0YXRpYyBib29sIHB2X3RsYl9mbHVzaF9zdXBwb3J0ZWQodm9pZClcbkBAIC03MjMsNyArNzMzLDcgQEAgc3RhdGljIGludCBrdm1fY3B1X2Rvd25fcHJlcGFyZSh1bnNpZ25lZCBpbnQgY3B1KVxuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbi1cdGt2bV9ndWVzdF9jcHVfb2ZmbGluZShmYWxzZSk7XG4rXHRrdm1fZ3Vlc3RfY3B1X29mZmxpbmUoS1ZNX0dVRVNUX0FQX09GRkxJTkUpO1xuIFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTczNCw3ICs3NDQsNyBAQCBzdGF0aWMgaW50IGt2bV9zdXNwZW5kKHZvaWQgKmRhdGEpXG4ge1xuIFx0dTY0IHZhbCA9IDA7XG4gXG4tXHRrdm1fZ3Vlc3RfY3B1X29mZmxpbmUoZmFsc2UpO1xuK1x0a3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKEtWTV9HVUVTVF9CU1BfU1VTUEVORCk7XG4gXG4gI2lmZGVmIENPTkZJR19BUkNIX0NQVUlETEVfSEFMVFBPTExcbiBcdGlmIChrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9QT0xMX0NPTlRST0wpKVxuQEAgLTc0Niw3ICs3NTYsNyBAQCBzdGF0aWMgaW50IGt2bV9zdXNwZW5kKHZvaWQgKmRhdGEpXG4gXG4gc3RhdGljIHZvaWQga3ZtX3Jlc3VtZSh2b2lkICpkYXRhKVxuIHtcbi1cdGt2bV9jcHVfb25saW5lKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpO1xuK1x0X19rdm1fY3B1X29ubGluZShyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCBLVk1fR1VFU1RfQlNQX1JFU1VNRSk7XG4gXG4gI2lmZGVmIENPTkZJR19BUkNIX0NQVUlETEVfSEFMVFBPTExcbiBcdGlmIChrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9QT0xMX0NPTlRST0wpIFx1MDAyNlx1MDAyNiBoYXNfZ3Vlc3RfcG9sbClcbkBAIC03NjUsNyArNzc1LDcgQEAgc3RhdGljIHN0cnVjdCBzeXNjb3JlIGt2bV9zeXNjb3JlID0ge1xuIFxuIHN0YXRpYyB2b2lkIGt2bV9wdl9ndWVzdF9jcHVfcmVib290KHZvaWQgKnVudXNlZClcbiB7XG4tXHRrdm1fZ3Vlc3RfY3B1X29mZmxpbmUodHJ1ZSk7XG4rXHRrdm1fZ3Vlc3RfY3B1X29mZmxpbmUoS1ZNX0dVRVNUX1NIVVRET1dOKTtcbiB9XG4gXG4gc3RhdGljIGludCBrdm1fcHZfcmVib290X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuQEAgLTc4OSw3ICs3OTksNyBAQCBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGt2bV9wdl9yZWJvb3RfbmIgPSB7XG4gI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QXG4gc3RhdGljIHZvaWQga3ZtX2NyYXNoX3NodXRkb3duKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbi1cdGt2bV9ndWVzdF9jcHVfb2ZmbGluZSh0cnVlKTtcbitcdGt2bV9ndWVzdF9jcHVfb2ZmbGluZShLVk1fR1VFU1RfU0hVVERPV04pO1xuIFx0bmF0aXZlX21hY2hpbmVfY3Jhc2hfc2h1dGRvd24ocmVncyk7XG4gfVxuICNlbmRpZlxuQEAgLTkxMSw2ICs5MjEsMjYgQEAgYm9vbCBrdm1fcGFyYV9hdmFpbGFibGUodm9pZClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3BhcmFfYXZhaWxhYmxlKTtcbiBcbitzdGF0aWMgdTMyIF9faW5pdCBrdm1fY3B1aWRfdGltaW5nX2luZm9fbGVhZih2b2lkKVxuK3tcbitcdHUzMiBiYXNlID0ga3ZtX2NwdWlkX2Jhc2UoKTtcbitcbitcdGlmICghYmFzZSB8fCBjcHVpZF9lYXgoYmFzZSkgXHUwMDNjIChiYXNlIHwgS1ZNX0NQVUlEX1RJTUlOR19JTkZPKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gYmFzZSB8IEtWTV9DUFVJRF9USU1JTkdfSU5GTztcbit9XG4rXG4rc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQga3ZtX2dldF90c2Nfa2h6KHZvaWQpXG4re1xuK1x0cmV0dXJuIGt2bV90c2Nfa2h6X2NwdWlkO1xuK31cbitcbitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBrdm1fZ2V0X2NwdV9raHoodm9pZClcbit7XG4rXHRyZXR1cm4ga3ZtX2NwdV9raHpfY3B1aWQ7XG4rfVxuK1xuIHVuc2lnbmVkIGludCBrdm1fYXJjaF9wYXJhX2ZlYXR1cmVzKHZvaWQpXG4ge1xuIFx0cmV0dXJuIGNwdWlkX2VheChrdm1fY3B1aWRfYmFzZSgpIHwgS1ZNX0NQVUlEX0ZFQVRVUkVTKTtcbkBAIC05NjAsNiArOTkwLDggQEAgc3RhdGljIHZvaWQgX19pbml0IGt2bV9pbml0X3BsYXRmb3JtKHZvaWQpXG4gXHRcdC5tYXNrX2xvID0gKHUzMikofihTWl80RyAtIHRvbHVkIC0gMSkpIHwgTVRSUl9QSFlTTUFTS19WLFxuIFx0XHQubWFza19oaSA9IChCSVRfVUxMKGJvb3RfY3B1X2RhdGEueDg2X3BoeXNfYml0cykgLSAxKSBcdTAwM2VcdTAwM2UgMzIsXG4gXHR9O1xuK1x0dTMyIHRpbWluZ19pbmZvX2xlYWYsIGFwaWNfa2h6O1xuK1x0Ym9vbCB0c2NfaXNfcmVsaWFibGU7XG4gXG4gXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfR1VFU1RfTUVNX0VOQ1JZUFQpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGt2bV9wYXJhX2hhc19mZWF0dXJlKEtWTV9GRUFUVVJFX01JR1JBVElPTl9DT05UUk9MKSkge1xuQEAgLTEwMDcsNyArMTAzOSw0NCBAQCBzdGF0aWMgdm9pZCBfX2luaXQga3ZtX2luaXRfcGxhdGZvcm0odm9pZClcbiBcdFx0XHR3cm1zcnEoTVNSX0tWTV9NSUdSQVRJT05fQ09OVFJPTCxcbiBcdFx0XHQgICAgICAgS1ZNX01JR1JBVElPTl9SRUFEWSk7XG4gXHR9XG4tXHRrdm1jbG9ja19pbml0KCk7XG4rXG4rXHQvKlxuK1x0ICogSWYgS1ZNIGFkdmVydGlzZXMgdGhlIGZyZXF1ZW5jeSBkaXJlY3RseSBpbiBDUFVJRCwgdXNlIHRoYXQgaW5zdGVhZFxuK1x0ICogb2YgcmV2ZXJzZS1jYWxjdWxhdGluZyBpdCBmcm9tIHRoZSBLVk0gY2xvY2sgZGF0YSwgb3Igd29yc2UsIHRyeWluZ1xuK1x0ICogdG8gY2FsaWJyYXRhdGUgdGhlIFRTQyB1c2luZyBhbiBlbXVsYXRlZCBkZXZpY2UuXG4rXHQgKi9cbitcdHRpbWluZ19pbmZvX2xlYWYgPSBrdm1fY3B1aWRfdGltaW5nX2luZm9fbGVhZigpO1xuK1x0aWYgKHRpbWluZ19pbmZvX2xlYWYpIHtcbitcdFx0a3ZtX3RzY19raHpfY3B1aWQgPSBjcHVpZF9lYXgodGltaW5nX2luZm9fbGVhZik7XG4rXHRcdGlmIChrdm1fdHNjX2toel9jcHVpZCkge1xuK1x0XHRcdHg4Nl9pbml0Lmh5cGVyLmdldF90c2Nfa2h6ID0ga3ZtX2dldF90c2Nfa2h6O1xuK1x0XHRcdHg4Nl9pbml0Lmh5cGVyLmdldF9jcHVfa2h6ID0ga3ZtX2dldF90c2Nfa2h6O1xuK1x0XHR9XG4rXG4rXHRcdC8qIFRoZSBsZWFmIGFsc28gaW5jbHVkZXMgdGhlIGxvY2FsIEFQSUMgYnVzL3RpbWVyIGZyZXF1ZW5jeS4qL1xuK1x0XHRhcGljX2toeiA9IGNwdWlkX2VieCh0aW1pbmdfaW5mb19sZWFmKTtcbitcdFx0aWYgKGFwaWNfa2h6KVxuK1x0XHRcdGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHooYXBpY19raHosIFwiS1ZNIGh5cGVydmlzb3JcIik7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogUHJlZmVyIENQVUlELjB4MTYgb3ZlciBLVk0ncyBQViBDUFVJRCB3aGVuIHBvc3NpYmxlLCBhcyB0aGUgYmFzZSBDUFVcbitcdCAqIGZyZXF1ZW5jeSBpc24ndCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgVFNDIGZyZXF1ZW5jeS5cbitcdCAqL1xuK1x0a3ZtX2NwdV9raHpfY3B1aWQgPSBfX2NwdV9raHpfZnJvbV9jcHVpZCgpO1xuK1x0aWYgKGt2bV9jcHVfa2h6X2NwdWlkKVxuK1x0XHR4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeiA9IGt2bV9nZXRfY3B1X2toejtcbitcbisgICAgICAgIC8qXG4rICAgICAgICAgKiBJZiB0aGUgVFNDIGNvdW50cyBhdCBhIGNvbnN0YW50IGZyZXF1ZW5jeSBhY3Jvc3MgUC9UIHN0YXRlcyBhbmQgaW5cbisgICAgICAgICAqIGRlZXAgQy1zdGF0ZXMsIHRyZWF0IHRoZSBUU0MgcmVsaWFibGUsIGFzIGd1YXJhbnRlZWQgYnkgS1ZNLlxuKyAgICAgICAgICovXG4rXHR0c2NfaXNfcmVsaWFibGUgPSBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9OT05TVE9QX1RTQyk7XG4rXHRpZiAodHNjX2lzX3JlbGlhYmxlKVxuK1x0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7XG4rXG4rXHRrdm1jbG9ja19pbml0KHRzY19pc19yZWxpYWJsZSk7XG4gXHR4ODZfcGxhdGZvcm0uYXBpY19wb3N0X2luaXQgPSBrdm1fYXBpY19pbml0O1xuIFxuIFx0LypcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYyBiL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jXG5pbmRleCBjYjNkMGNhMWZhMjI1YS4uODQyZjM4YzVmNmNhYWQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suY1xuKysrIGIvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmNcbkBAIC0xMiw3ICsxMiw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaGFyZGlycS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3B1aG90cGx1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL2Nsb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2V0X21lbW9yeS5oXHUwMDNlXG5AQCAtNTQsNiArNTMsOCBAQCBzdGF0aWMgc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICpodmNsb2NrX21lbTtcbiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcHZjbG9ja192c3lzY2FsbF90aW1lX2luZm8gKiwgaHZfY2xvY2tfcGVyX2NwdSk7XG4gRVhQT1JUX1BFUl9DUFVfU1lNQk9MX0dQTChodl9jbG9ja19wZXJfY3B1KTtcbiBcbitzdGF0aWMgYm9vbCBrdm1jbG9ja19zdXNwZW5kZWQ7XG4rXG4gLypcbiAgKiBUaGUgd2FsbGNsb2NrIGlzIHRoZSB0aW1lIG9mIGRheSB3aGVuIHdlIGJvb3RlZC4gU2luY2UgdGhlbiwgc29tZSB0aW1lIG1heVxuICAqIGhhdmUgZWxhcHNlZCBzaW5jZSB0aGUgaHlwZXJ2aXNvciB3cm90ZSB0aGUgZGF0YS4gU28gd2UgdHJ5IHRvIGFjY291bnQgZm9yXG5AQCAtNjEsNiArNjIsNyBAQCBFWFBPUlRfUEVSX0NQVV9TWU1CT0xfR1BMKGh2X2Nsb2NrX3Blcl9jcHUpO1xuICAqL1xuIHN0YXRpYyB2b2lkIGt2bV9nZXRfd2FsbGNsb2NrKHN0cnVjdCB0aW1lc3BlYzY0ICpub3cpXG4ge1xuK1x0V0FSTl9PTl9PTkNFKGt2bWNsb2NrX3N1c3BlbmRlZCk7XG4gXHR3cm1zcnEobXNyX2t2bV93YWxsX2Nsb2NrLCBzbG93X3ZpcnRfdG9fcGh5cyhcdTAwMjZ3YWxsX2Nsb2NrKSk7XG4gXHRwcmVlbXB0X2Rpc2FibGUoKTtcbiBcdHB2Y2xvY2tfcmVhZF93YWxsY2xvY2soXHUwMDI2d2FsbF9jbG9jaywgdGhpc19jcHVfcHZ0aSgpLCBub3cpO1xuQEAgLTcyLDYgKzc0LDI1IEBAIHN0YXRpYyBpbnQga3ZtX3NldF93YWxsY2xvY2soY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKm5vdylcbiBcdHJldHVybiAtRU5PREVWO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBrdm1fcmVnaXN0ZXJfY2xvY2soY2hhciAqdHh0KVxuK3tcbitcdHN0cnVjdCBwdmNsb2NrX3ZzeXNjYWxsX3RpbWVfaW5mbyAqc3JjID0gdGhpc19jcHVfaHZjbG9jaygpO1xuK1x0dTY0IHBhO1xuK1xuK1x0aWYgKCFzcmMpXG4rXHRcdHJldHVybjtcbitcbitcdHBhID0gc2xvd192aXJ0X3RvX3BoeXMoXHUwMDI2c3JjLVx1MDAzZXB2dGkpIHwgMHgwMVVMTDtcbitcdHdybXNycShtc3Jfa3ZtX3N5c3RlbV90aW1lLCBwYSk7XG4rXHRwcl9kZWJ1ZyhcImt2bS1jbG9jazogY3B1ICVkLCBtc3IgJWxseCwgJXNcIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBwYSwgdHh0KTtcbit9XG4rXG4rc3RhdGljIHZvaWQga3ZtY2xvY2tfZGlzYWJsZSh2b2lkKVxuK3tcbitcdGlmIChtc3Jfa3ZtX3N5c3RlbV90aW1lKVxuK1x0XHRuYXRpdmVfd3JpdGVfbXNyKG1zcl9rdm1fc3lzdGVtX3RpbWUsIDApO1xuK31cbitcbiBzdGF0aWMgdTY0IGt2bV9jbG9ja19yZWFkKHZvaWQpXG4ge1xuIFx0dTY0IHJldDtcbkBAIC0xMTMsMTggKzEzNCw3NCBAQCBzdGF0aWMgbm9pbnN0ciB1NjQga3ZtX3NjaGVkX2Nsb2NrX3JlYWQodm9pZClcbiBcdHJldHVybiBwdmNsb2NrX2Nsb2Nrc291cmNlX3JlYWRfbm93ZCh0aGlzX2NwdV9wdnRpKCkpIC0ga3ZtX3NjaGVkX2Nsb2NrX29mZnNldDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGt2bV9zY2hlZF9jbG9ja19pbml0KGJvb2wgc3RhYmxlKVxuK3N0YXRpYyB2b2lkIGt2bV9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXG4ge1xuLVx0aWYgKCFzdGFibGUpXG4tXHRcdGNsZWFyX3NjaGVkX2Nsb2NrX3N0YWJsZSgpO1xuLVx0a3ZtX3NjaGVkX2Nsb2NrX29mZnNldCA9IGt2bV9jbG9ja19yZWFkKCk7XG4tXHRwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2soa3ZtX3NjaGVkX2Nsb2NrX3JlYWQpO1xuK1x0LypcbitcdCAqIFN0b3AgaG9zdCB3cml0ZXMgdG8ga3ZtY2xvY2sgaW1tZWRpYXRlbHkgcHJpb3IgdG8gc3VzcGVuZC9oaWJlcm5hdGUuXG4rXHQgKiBJZiB0aGUgc3lzdGVtIGlzIGhpYmVybmF0aW5nLCB0aGVuIGt2bWNsb2NrIHdpbGwgbGlrZWx5IHJlc2lkZSBhdCBhXG4rXHQgKiBkaWZmZXJlbnQgcGh5c2ljYWwgYWRkcmVzcyB3aGVuIHRoZSBzeXN0ZW0gYXdha2VucywgYW5kIGhvc3Qgd3JpdGVzXG4rXHQgKiB0byB0aGUgb2xkIGFkZHJlc3MgcHJpb3IgdG8gcmVjb25maWd1cmluZyBrdm1jbG9jayB3b3VsZCBjbG9iYmVyXG4rXHQgKiByYW5kb20gbWVtb3J5LlxuK1x0ICovXG4rXHRrdm1jbG9ja19zdXNwZW5kZWQgPSB0cnVlO1xuK1x0a3ZtY2xvY2tfZGlzYWJsZSgpO1xuK31cbiBcbi1cdHByX2luZm8oXCJrdm0tY2xvY2s6IHVzaW5nIHNjaGVkIG9mZnNldCBvZiAlbGx1IGN5Y2xlc1wiLFxuLVx0XHRrdm1fc2NoZWRfY2xvY2tfb2Zmc2V0KTtcbisjaWZkZWYgQ09ORklHX1NNUFxuK3N0YXRpYyB2b2lkIGt2bV9zZXR1cF9zZWNvbmRhcnlfY2xvY2sodm9pZClcbit7XG4rXHRrdm1fcmVnaXN0ZXJfY2xvY2soXCJzZWNvbmRhcnkgY3B1LCBzdGFydHVwXCIpO1xuK31cbisjZW5kaWZcbiBcbi1cdEJVSUxEX0JVR19PTihzaXplb2Yoa3ZtX3NjaGVkX2Nsb2NrX29mZnNldCkgXHUwMDNlXG4tXHRcdHNpemVvZigoKHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvICopTlVMTCktXHUwMDNlc3lzdGVtX3RpbWUpKTtcbitzdGF0aWMgdm9pZCBrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxuK3tcbitcdGt2bWNsb2NrX3N1c3BlbmRlZCA9IGZhbHNlO1xuK1x0a3ZtX3JlZ2lzdGVyX2Nsb2NrKFwicHJpbWFyeSBjcHUsIHNjaGVkX2Nsb2NrIHJlc3VtZVwiKTtcbit9XG4rXG4rc3RhdGljIHZvaWQga3ZtY2xvY2tfc3VzcGVuZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKVxuK3tcbitcdGt2bWNsb2NrX3N1c3BlbmRlZCA9IHRydWU7XG4rXHRrdm1jbG9ja19kaXNhYmxlKCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGt2bWNsb2NrX3Jlc3VtZShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKVxuK3tcbitcdGt2bWNsb2NrX3N1c3BlbmRlZCA9IGZhbHNlO1xuK1x0a3ZtX3JlZ2lzdGVyX2Nsb2NrKFwicHJpbWFyeSBjcHUsIGNsb2Nrc291cmNlIHJlc3VtZVwiKTtcbit9XG4rXG4rdm9pZCBrdm1jbG9ja19jcHVfYWN0aW9uKGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKVxuK3tcbitcdHN3aXRjaCAoYWN0aW9uKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBCU1AncyBjbG9jayBpcyBtYW5hZ2VkIHZpYSBjbG9ja3NvdXJjZSBzdXNwZW5kL3Jlc3VtZSxcbitcdFx0ICogdG8gZW5zdXJlIGl0J3MgZW5hYmxlZC9kaXNhYmxlZCB3aGVuIHRpbWVrZWVwaW5nIG5lZWRzIGl0XG4rXHRcdCAqIHRvIGJlLCBlLmcuIGJlZm9yZSByZWFkaW5nIHdhbGxjbG9jayAod2hpY2ggdXNlcyBrdm1jbG9jaykuXG4rXHRcdCAqL1xuK1x0Y2FzZSBLVk1fR1VFU1RfQlNQX1NVU1BFTkQ6XG4rXHRjYXNlIEtWTV9HVUVTVF9CU1BfUkVTVU1FOlxuK1x0XHRicmVhaztcbitcdGNhc2UgS1ZNX0dVRVNUX0FQX09OTElORTpcbitcdFx0LypcbitcdFx0ICogU2Vjb25kYXJ5IENQVXMgdXNlIGEgZGVkaWNhdGVkIGhvb2sgdG8gZW5hYmxlIGt2bWNsb2NrIGVhcmx5XG4rXHRcdCAqIGR1cmluZyBicmluZ3VwLCB0aGVyZSdzIG5vdGhpbmcgdG8gYmUgZG9uZSBkdXJpbmcgQ1BVIG9ubGluZVxuK1x0XHQgKiAod2hpY2ggcnVucyBhdCBDUFVIUF9BUF9PTkxJTkVfRFlOKS4gIFdoZW4ga3ZtY2xvY2sgaXMgYmVpbmdcbitcdFx0ICogdXNlZCBhcyBzY2hlZF9jbG9jaywga3ZtY2xvY2sgbXVzdCBiZSBlbmFibGVkICp2ZXJ5KiBlYXJseSxcbitcdFx0ICogYW5kIGV2ZW4gd2hlbiBrdm1jbG9jayBpcyBcIm9ubHlcIiBiZWluZyB1c2VkIGZvciB0aGUgbWFpblxuK1x0XHQgKiBjbG9ja3NvdXJjZSwgaXQgc3RpbGwgbmVlZHMgdG8gYmUgZW5hYmxlZCBsb25nIGJlZm9yZSB0aGVcbitcdFx0ICogZHluYW1pYyBDUFVIUCBjYWxscyBhcmUgbWFkZS5cbitcdFx0ICovXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBLVk1fR1VFU1RfQVBfT0ZGTElORTpcbitcdGNhc2UgS1ZNX0dVRVNUX1NIVVRET1dOOlxuK1x0XHRrdm1jbG9ja19kaXNhYmxlKCk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0V0FSTl9PTl9PTkNFKDEpO1xuK1x0XHRicmVhaztcbitcdH1cbiB9XG4gXG4gLypcbkBAIC0xMzYsOSArMjEzLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGt2bV9zY2hlZF9jbG9ja19pbml0KGJvb2wgc3RhYmxlKVxuICAqIHBvbGwgb2YgZ3Vlc3RzIGNhbiBiZSBydW5uaW5nIGFuZCB0cm91YmxlIGVhY2ggb3RoZXIuIFNvIHdlIHByZXNldFxuICAqIGxwaiBoZXJlXG4gICovXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX2dldF90c2Nfa2h6KHZvaWQpXG4rc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQga3ZtY2xvY2tfZ2V0X3RzY19raHoodm9pZClcbiB7XG4tXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKTtcbiBcdHJldHVybiBwdmNsb2NrX3RzY19raHoodGhpc19jcHVfcHZ0aSgpKTtcbiB9XG4gXG5AQCAtMTQ3LDcgKzIyMyw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrdm1fZ2V0X3ByZXNldF9scGoodm9pZClcbiBcdHVuc2lnbmVkIGxvbmcga2h6O1xuIFx0dTY0IGxwajtcbiBcbi1cdGtoeiA9IGt2bV9nZXRfdHNjX2toeigpO1xuK1x0a2h6ID0ga3ZtY2xvY2tfZ2V0X3RzY19raHooKTtcbiBcbiBcdGxwaiA9ICgodTY0KWtoeiAqIDEwMDApO1xuIFx0ZG9fZGl2KGxwaiwgSFopO1xuQEAgLTE4NSw0MyArMjYxLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2Uga3ZtX2Nsb2NrID0ge1xuIFx0LmZsYWdzXHRcdD0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsXG4gXHQuaWRcdFx0PSBDU0lEX1g4Nl9LVk1fQ0xLLFxuIFx0LmVuYWJsZVx0XHQ9IGt2bV9jc19lbmFibGUsXG4rXHQuc3VzcGVuZFx0PSBrdm1jbG9ja19zdXNwZW5kLFxuK1x0LnJlc3VtZVx0XHQ9IGt2bWNsb2NrX3Jlc3VtZSxcbiB9O1xuIFxuLXN0YXRpYyB2b2lkIGt2bV9yZWdpc3Rlcl9jbG9jayhjaGFyICp0eHQpXG4te1xuLVx0c3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICpzcmMgPSB0aGlzX2NwdV9odmNsb2NrKCk7XG4tXHR1NjQgcGE7XG4tXG4tXHRpZiAoIXNyYylcbi1cdFx0cmV0dXJuO1xuLVxuLVx0cGEgPSBzbG93X3ZpcnRfdG9fcGh5cyhcdTAwMjZzcmMtXHUwMDNlcHZ0aSkgfCAweDAxVUxMO1xuLVx0d3Jtc3JxKG1zcl9rdm1fc3lzdGVtX3RpbWUsIHBhKTtcbi1cdHByX2RlYnVnKFwia3ZtLWNsb2NrOiBjcHUgJWQsIG1zciAlbGx4LCAlc1wiLCBzbXBfcHJvY2Vzc29yX2lkKCksIHBhLCB0eHQpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBrdm1fc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxuLXtcbi19XG4tXG4tc3RhdGljIHZvaWQga3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcbi17XG4tXHRrdm1fcmVnaXN0ZXJfY2xvY2soXCJwcmltYXJ5IGNwdSBjbG9jaywgcmVzdW1lXCIpO1xuLX1cbi1cbi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDXG4tc3RhdGljIHZvaWQga3ZtX3NldHVwX3NlY29uZGFyeV9jbG9jayh2b2lkKVxuLXtcbi1cdGt2bV9yZWdpc3Rlcl9jbG9jayhcInNlY29uZGFyeSBjcHUgY2xvY2tcIik7XG4tfVxuLSNlbmRpZlxuLVxuLXZvaWQga3ZtY2xvY2tfZGlzYWJsZSh2b2lkKVxuLXtcbi1cdGlmIChtc3Jfa3ZtX3N5c3RlbV90aW1lKVxuLVx0XHRuYXRpdmVfd3JpdGVfbXNyKG1zcl9rdm1fc3lzdGVtX3RpbWUsIDApO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBfX2luaXQga3ZtY2xvY2tfaW5pdF9tZW0odm9pZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5jcHVzO1xuQEAgLTMwOCw5ICszNTEsMzUgQEAgc3RhdGljIGludCBrdm1jbG9ja19zZXR1cF9wZXJjcHUodW5zaWduZWQgaW50IGNwdSlcbiBcdHJldHVybiBwID8gMCA6IC1FTk9NRU07XG4gfVxuIFxuLXZvaWQgX19pbml0IGt2bWNsb2NrX2luaXQodm9pZClcbitzdGF0aWMgX19pbml0IHZvaWQga3ZtX3NjaGVkX2Nsb2NrX2luaXQoYm9vbCBzdGFibGUpXG4ge1xuLVx0dTggZmxhZ3M7XG4rXHQvKiBFbnN1cmUgdGhlIG9mZnNldCBpcyBjb25maWd1cmVkIGJlZm9yZSBtYWtpbmcga3ZtY2xvY2sgdmlzaWJsZSEgKi9cbitcdGt2bV9zY2hlZF9jbG9ja19vZmZzZXQgPSBrdm1fY2xvY2tfcmVhZCgpO1xuK1xuK1x0aWYgKF9fcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKGt2bV9zY2hlZF9jbG9ja19yZWFkLCBzdGFibGUsXG4rXHRcdFx0XHQgICAgICAga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUsXG4rXHRcdFx0XHQgICAgICAga3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKlxuK1x0ICogVGhlIEJTUCdzIGNsb2NrIGlzIG1hbmFnZWQgdmlhIGRlZGljYXRlZCBzY2hlZF9jbG9jayBzYXZlL3Jlc3RvcmVcbitcdCAqIGhvb2tzIHdoZW4ga3ZtY2xvY2sgaXMgdXNlZCBhcyBzY2hlZF9jbG9jaywgYXMgc2NoZWRfY2xvY2sgbmVlZHMgdG9cbitcdCAqIGJlIGtlcHQgYWxpdmUgdW50aWwgdGhlIHZlcnkgZW5kIG9mIHN1c3BlbmQgZW50cnksIGFuZCByZXN0b3JlZCBhc1xuK1x0ICogcXVpY2tseSBhcyBwb3NzaWJsZSBhZnRlciByZXN1bWUuXG4rXHQgKi9cbitcdGt2bV9jbG9jay5zdXNwZW5kID0gTlVMTDtcbitcdGt2bV9jbG9jay5yZXN1bWUgPSBOVUxMO1xuK1xuK1x0cHJfaW5mbyhcImt2bS1jbG9jazogdXNpbmcgc2NoZWQgb2Zmc2V0IG9mICVsbHUgY3ljbGVzXCIsXG4rXHRcdGt2bV9zY2hlZF9jbG9ja19vZmZzZXQpO1xuK1xuK1x0QlVJTERfQlVHX09OKHNpemVvZihrdm1fc2NoZWRfY2xvY2tfb2Zmc2V0KSBcdTAwM2VcbitcdFx0c2l6ZW9mKCgoc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gKilOVUxMKS1cdTAwM2VzeXN0ZW1fdGltZSkpO1xuK31cbitcbit2b2lkIF9faW5pdCBrdm1jbG9ja19pbml0KGJvb2wgcHJlZmVyX3RzYylcbit7XG4rXHRib29sIHN0YWJsZSA9IGZhbHNlO1xuIFxuIFx0aWYgKCFrdm1fcGFyYV9hdmFpbGFibGUoKSB8fCAha3ZtY2xvY2spXG4gXHRcdHJldHVybjtcbkBAIC0zMzQsMzggKzQwMyw0MSBAQCB2b2lkIF9faW5pdCBrdm1jbG9ja19pbml0KHZvaWQpXG4gXHRcdG1zcl9rdm1fc3lzdGVtX3RpbWUsIG1zcl9rdm1fd2FsbF9jbG9jayk7XG4gXG4gXHR0aGlzX2NwdV93cml0ZShodl9jbG9ja19wZXJfY3B1LCBcdTAwMjZodl9jbG9ja19ib290WzBdKTtcbi1cdGt2bV9yZWdpc3Rlcl9jbG9jayhcInByaW1hcnkgY3B1IGNsb2NrXCIpO1xuK1x0a3ZtX3JlZ2lzdGVyX2Nsb2NrKFwicHJpbWFyeSBjcHUsIG9ubGluZVwiKTtcbiBcdHB2Y2xvY2tfc2V0X3B2dGlfY3B1MF92YShodl9jbG9ja19ib290KTtcbiBcbi1cdGlmIChrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9DTE9DS1NPVVJDRV9TVEFCTEVfQklUKSlcbitcdGlmIChrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9DTE9DS1NPVVJDRV9TVEFCTEVfQklUKSkge1xuIFx0XHRwdmNsb2NrX3NldF9mbGFncyhQVkNMT0NLX1RTQ19TVEFCTEVfQklUKTtcbiBcbi1cdGZsYWdzID0gcHZjbG9ja19yZWFkX2ZsYWdzKFx1MDAyNmh2X2Nsb2NrX2Jvb3RbMF0ucHZ0aSk7XG4tXHRrdm1fc2NoZWRfY2xvY2tfaW5pdChmbGFncyBcdTAwMjYgUFZDTE9DS19UU0NfU1RBQkxFX0JJVCk7XG4rXHRcdC8qXG4rXHRcdCAqIENoZWNrIGlmIHRoZSBjbG9jayBpcyBzdGFibGUgKmFmdGVyKiBtYXJraW5nIFRTQ19TVEFCTEUgYXMgYVxuK1x0XHQgKiB2YWxpZCBmbGFnLlxuK1x0XHQgKi9cbitcdFx0c3RhYmxlID0gcHZjbG9ja19yZWFkX2ZsYWdzKFx1MDAyNmh2X2Nsb2NrX2Jvb3RbMF0ucHZ0aSkgXHUwMDI2XG4rXHRcdFx0IFBWQ0xPQ0tfVFNDX1NUQUJMRV9CSVQ7XG4rXHR9XG4gXG4tXHR4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX3RzYyA9IGt2bV9nZXRfdHNjX2toejtcbi1cdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ID0ga3ZtX2dldF90c2Nfa2h6O1xuK1xuK1x0aWYgKCF4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeilcbitcdFx0eDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHogPSBrdm1jbG9ja19nZXRfdHNjX2toejtcbitcdGlmICgheDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHopXG4rXHRcdHg4Nl9pbml0Lmh5cGVyLmdldF9jcHVfa2h6ID0ga3ZtY2xvY2tfZ2V0X3RzY19raHo7XG4gXHR4ODZfcGxhdGZvcm0uZ2V0X3dhbGxjbG9jayA9IGt2bV9nZXRfd2FsbGNsb2NrO1xuIFx0eDg2X3BsYXRmb3JtLnNldF93YWxsY2xvY2sgPSBrdm1fc2V0X3dhbGxjbG9jaztcbi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDXG4rI2lmZGVmIENPTkZJR19TTVBcbiBcdHg4Nl9jcHVpbml0LmVhcmx5X3BlcmNwdV9jbG9ja19pbml0ID0ga3ZtX3NldHVwX3NlY29uZGFyeV9jbG9jaztcbiAjZW5kaWZcbi1cdHg4Nl9wbGF0Zm9ybS5zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlID0ga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGU7XG4tXHR4ODZfcGxhdGZvcm0ucmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSA9IGt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlO1xuIFx0a3ZtX2dldF9wcmVzZXRfbHBqKCk7XG4gXG4gXHQvKlxuLVx0ICogWDg2X0ZFQVRVUkVfTk9OU1RPUF9UU0MgaXMgVFNDIHJ1bnMgYXQgY29uc3RhbnQgcmF0ZVxuLVx0ICogd2l0aCBQL1Qgc3RhdGVzIGFuZCBkb2VzIG5vdCBzdG9wIGluIGRlZXAgQy1zdGF0ZXMuXG4tXHQgKlxuLVx0ICogSW52YXJpYW50IFRTQyBleHBvc2VkIGJ5IGhvc3QgbWVhbnMga3ZtY2xvY2sgaXMgbm90IG5lY2Vzc2FyeTpcbi1cdCAqIGNhbiB1c2UgVFNDIGFzIGNsb2Nrc291cmNlLlxuLVx0ICpcbitcdCAqIElmIFRTQyBpcyBwcmVmZXJyZWQgb3ZlciBrdm1sb2NrLCBkcm9wIGt2bWNsb2NrJ3MgcmF0aW5nIHNvIHRoYXQgVFNDXG4rXHQgKiBpcyBjaG9zZW4gYXMgdGhlIGNsb2Nrc291cmNlIChidXQgc3RpbGwgcmVnaXN0ZXIga3ZtY2xvY2sgaW4gY2FzZVxuK1x0ICogdGhlIGtlcm5lbCBkb2Vzbid0IHdhbnQgdG8gdXNlIFRTQyBmb3Igd2hhdGV2ZXIgcmVhc29uKS5cbiBcdCAqL1xuLVx0aWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9OT05TVE9QX1RTQykgXHUwMDI2XHUwMDI2XG4tXHQgICAgIWNoZWNrX3RzY191bnN0YWJsZSgpKVxuK1x0aWYgKHByZWZlcl90c2MpXG4gXHRcdGt2bV9jbG9jay5yYXRpbmcgPSAyOTk7XG4rXHRlbHNlXG4rXHRcdGt2bV9zY2hlZF9jbG9ja19pbml0KHN0YWJsZSk7XG4gXG4gXHRjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeihcdTAwMjZrdm1fY2xvY2ssIE5TRUNfUEVSX1NFQyk7XG4gXHRwdl9pbmZvLm5hbWUgPSBcIktWTVwiO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wdmNsb2NrLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHZjbG9jay5jXG5pbmRleCBiM2Y4MTM3OWMyZmMwNi4uOGQwOTg4NDFhMjI1ZjYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHZjbG9jay5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHZjbG9jay5jXG5AQCAtMTYsMTEgKzE2LDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3B2Y2xvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS92Z3RvZC5oXHUwMDNlXG4gXG4tc3RhdGljIHU4IHZhbGlkX2ZsYWdzIF9fcmVhZF9tb3N0bHkgPSAwO1xuLXN0YXRpYyBzdHJ1Y3QgcHZjbG9ja192c3lzY2FsbF90aW1lX2luZm8gKnB2dGlfY3B1MF92YSBfX3JlYWRfbW9zdGx5O1xuK3N0YXRpYyB1OCB2YWxpZF9mbGFncyBfX3JvX2FmdGVyX2luaXQgPSAwO1xuK3N0YXRpYyBzdHJ1Y3QgcHZjbG9ja192c3lzY2FsbF90aW1lX2luZm8gKnB2dGlfY3B1MF92YSBfX3JvX2FmdGVyX2luaXQ7XG4gXG4tdm9pZCBwdmNsb2NrX3NldF9mbGFncyh1OCBmbGFncylcbit2b2lkIF9faW5pdCBwdmNsb2NrX3NldF9mbGFncyh1OCBmbGFncylcbiB7XG4rXHRXQVJOX09OKHZhbGlkX2ZsYWdzKTtcbiBcdHZhbGlkX2ZsYWdzID0gZmxhZ3M7XG4gfVxuIFxuQEAgLTE1Myw3ICsxNTQsNyBAQCB2b2lkIHB2Y2xvY2tfcmVhZF93YWxsY2xvY2soc3RydWN0IHB2Y2xvY2tfd2FsbF9jbG9jayAqd2FsbF9jbG9jayxcbiBcdHNldF9ub3JtYWxpemVkX3RpbWVzcGVjNjQodHMsIG5vdy50dl9zZWMsIG5vdy50dl9uc2VjKTtcbiB9XG4gXG4tdm9pZCBwdmNsb2NrX3NldF9wdnRpX2NwdTBfdmEoc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICpwdnRpKVxuK3ZvaWQgX19pbml0IHB2Y2xvY2tfc2V0X3B2dGlfY3B1MF92YShzdHJ1Y3QgcHZjbG9ja192c3lzY2FsbF90aW1lX2luZm8gKnB2dGkpXG4ge1xuIFx0V0FSTl9PTih2Y2xvY2tfd2FzX3VzZWQoVkRTT19DTE9DS01PREVfUFZDTE9DSykpO1xuIFx0cHZ0aV9jcHUwX3ZhID0gcHZ0aTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjLmNcbmluZGV4IGNlMTBhZTRiMjk4Yjc5Li41NjRiZTRmYWE1YTBiYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC90c2MuY1xuKysrIGIvYXJjaC94ODYva2VybmVsL3RzYy5jXG5AQCAtMzQsNiArMzQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS90b3BvbG9neS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3V2L3V2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2V2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vdGR4LmhcdTAwM2VcbiBcbiB1bnNpZ25lZCBpbnQgX19yZWFkX21vc3RseSBjcHVfa2h6O1x0LyogVFNDIGNsb2NrcyAvIHVzZWMsIG5vdCB1c2VkIGhlcmUgKi9cbiBFWFBPUlRfU1lNQk9MKGNwdV9raHopO1xuQEAgLTI3OSwxNSArMjgwLDI4IEBAIGJvb2wgdXNpbmdfbmF0aXZlX3NjaGVkX2Nsb2NrKHZvaWQpXG4gXHRyZXR1cm4gc3RhdGljX2NhbGxfcXVlcnkocHZfc2NoZWRfY2xvY2spID09IG5hdGl2ZV9zY2hlZF9jbG9jaztcbiB9XG4gXG4tdm9pZCBwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodTY0ICgqZnVuYykodm9pZCkpXG4raW50IF9faW5pdCBfX3BhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh1NjQgKCpmdW5jKSh2b2lkKSwgYm9vbCBzdGFibGUsXG4rXHRcdFx0XHQgICAgICB2b2lkICgqc2F2ZSkodm9pZCksIHZvaWQgKCpyZXN0b3JlKSh2b2lkKSlcbiB7XG4rXHQvKlxuK1x0ICogRG9uJ3QgcmVwbGFjZSBUU0Mgd2l0aCBhIFBWIGNsb2NrIHdoZW4gcnVubmluZyBhcyBhIENvQ28gZ3Vlc3QgYW5kXG4rXHQgKiB0aGUgVFNDIGlzIHNlY3VyZS90cnVzdGVkOyBQViBjbG9ja3MgYXJlIGVtdWxhdGVkIGJ5IHRoZSBoeXBlcnZpc29yLFxuK1x0ICogd2hpY2ggaXNuJ3QgaW4gdGhlIGd1ZXN0J3MgVENCLlxuK1x0ICovXG4rXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfR1VFU1RfU05QX1NFQ1VSRV9UU0MpIHx8XG4rXHQgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXG4rXHRcdHJldHVybiAtRVBFUk07XG4rXG4rXHRpZiAoIXN0YWJsZSlcbitcdFx0Y2xlYXJfc2NoZWRfY2xvY2tfc3RhYmxlKCk7XG4rXG4gXHRzdGF0aWNfY2FsbF91cGRhdGUocHZfc2NoZWRfY2xvY2ssIGZ1bmMpO1xuK1x0eDg2X3BsYXRmb3JtLnNhdmVfc2NoZWRfY2xvY2tfc3RhdGUgPSBzYXZlO1xuK1x0eDg2X3BsYXRmb3JtLnJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUgPSByZXN0b3JlO1xuK1x0cmV0dXJuIDA7XG4gfVxuICNlbHNlXG4gdTY0IHNjaGVkX2Nsb2NrX25vaW5zdHIodm9pZCkgX19hdHRyaWJ1dGVfXygoYWxpYXMoXCJuYXRpdmVfc2NoZWRfY2xvY2tcIikpKTtcbi1cbi1ib29sIHVzaW5nX25hdGl2ZV9zY2hlZF9jbG9jayh2b2lkKSB7IHJldHVybiB0cnVlOyB9XG4tdm9pZCBwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodTY0ICgqZnVuYykodm9pZCkpIHsgfVxuICNlbmRpZlxuIFxuIG5vdHJhY2UgdTY0IHNjaGVkX2Nsb2NrKHZvaWQpXG5AQCAtNjQ1LDQ2ICs2NTksNjggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgcXVpY2tfcGl0X2NhbGlicmF0ZSh2b2lkKVxuIFx0cmV0dXJuIGRlbHRhO1xuIH1cbiBcbitpbnQgY3B1aWRfZ2V0X3RzY19pbmZvKHN0cnVjdCBjcHVpZF90c2NfaW5mbyAqaW5mbylcbit7XG4rXHR1bnNpZ25lZCBpbnQgZWN4X2h6LCBlZHg7XG4rXG4rXHRpZiAoYm9vdF9jcHVfZGF0YS5jcHVpZF9sZXZlbCBcdTAwM2MgQ1BVSURfTEVBRl9UU0MpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0LyogQ1BVSUQgMTVIIFRTQy9DcnlzdGFsIHJhdGlvLCBwbHVzIG9wdGlvbmFsbHkgQ3J5c3RhbCBIeiAqL1xuK1x0Y3B1aWQoQ1BVSURfTEVBRl9UU0MsIFx1MDAyNmluZm8tXHUwMDNlZGVub21pbmF0b3IsIFx1MDAyNmluZm8tXHUwMDNlbnVtZXJhdG9yLCBcdTAwMjZlY3hfaHosIFx1MDAyNmVkeCk7XG4rXG4rXHRpZiAoIWluZm8tXHUwMDNlZGVub21pbmF0b3IgfHwgIWluZm8tXHUwMDNlbnVtZXJhdG9yKVxuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbitcbitcdC8qXG4rXHQgKiBOb3RlOiBzb21lIENQVXMgcHJvdmlkZSB0aGUgbXVsdGlwbGllciBpbmZvcm1hdGlvbiwgYnV0IG5vdCB0aGUgY29yZVxuK1x0ICogY3J5c3RhbCBmcmVxdWVuY3kuICBUaGUgbXVsdGlwbGllciBpbmZvcm1hdGlvbiBpcyBzdGlsbCB1c2VmdWwgZm9yXG4rXHQgKiBzdWNoIENQVXMsIGFzIHRoZSBjcnlzdGFsIGZyZXF1ZW5jeSBjYW4gYmUgZ2xlYW5lZCBmcm9tIENQVUlELjB4MTYuXG4rXHQgKi9cbitcdGluZm8tXHUwMDNlY3J5c3RhbF9raHogPSBlY3hfaHogLyAxMDAwO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3Vuc2lnbmVkIGludCBfX2NwdV9raHpfZnJvbV9jcHVpZCh2b2lkKVxuK3tcbitcdHVuc2lnbmVkIGludCBlYXhfYmFzZV9taHosIGVieCwgZWN4LCBlZHg7XG4rXG4rXHRpZiAoYm9vdF9jcHVfZGF0YS5jcHVpZF9sZXZlbCBcdTAwM2MgQ1BVSURfTEVBRl9GUkVRKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGNwdWlkKENQVUlEX0xFQUZfRlJFUSwgXHUwMDI2ZWF4X2Jhc2VfbWh6LCBcdTAwMjZlYngsIFx1MDAyNmVjeCwgXHUwMDI2ZWR4KTtcbitcbitcdHJldHVybiBlYXhfYmFzZV9taHogKiAxMDAwO1xuK31cbitcbiAvKipcbiAgKiBuYXRpdmVfY2FsaWJyYXRlX3RzYyAtIGRldGVybWluZSBUU0MgZnJlcXVlbmN5XG4gICogRGV0ZXJtaW5lIFRTQyBmcmVxdWVuY3kgdmlhIENQVUlELCBlbHNlIHJldHVybiAwLlxuICAqL1xuLXVuc2lnbmVkIGxvbmcgbmF0aXZlX2NhbGlicmF0ZV90c2Modm9pZClcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX3RzYyh2b2lkKVxuIHtcbi1cdHVuc2lnbmVkIGludCBlYXhfZGVub21pbmF0b3IsIGVieF9udW1lcmF0b3IsIGVjeF9oeiwgZWR4O1xuLVx0dW5zaWduZWQgaW50IGNyeXN0YWxfa2h6O1xuK1x0c3RydWN0IGNwdWlkX3RzY19pbmZvIGluZm87XG4gXG4gXHRpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKGJvb3RfY3B1X2RhdGEuY3B1aWRfbGV2ZWwgXHUwMDNjIENQVUlEX0xFQUZfVFNDKVxuK1x0aWYgKGNwdWlkX2dldF90c2NfaW5mbyhcdTAwMjZpbmZvKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRlYXhfZGVub21pbmF0b3IgPSBlYnhfbnVtZXJhdG9yID0gZWN4X2h6ID0gZWR4ID0gMDtcbi1cbi1cdC8qIENQVUlEIDE1SCBUU0MvQ3J5c3RhbCByYXRpbywgcGx1cyBvcHRpb25hbGx5IENyeXN0YWwgSHogKi9cbi1cdGNwdWlkKENQVUlEX0xFQUZfVFNDLCBcdTAwMjZlYXhfZGVub21pbmF0b3IsIFx1MDAyNmVieF9udW1lcmF0b3IsIFx1MDAyNmVjeF9oeiwgXHUwMDI2ZWR4KTtcbi1cbi1cdGlmIChlYnhfbnVtZXJhdG9yID09IDAgfHwgZWF4X2Rlbm9taW5hdG9yID09IDApXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0Y3J5c3RhbF9raHogPSBlY3hfaHogLyAxMDAwO1xuLVxuIFx0LypcbiBcdCAqIERlbnZlcnRvbiBTb0NzIGRvbid0IHJlcG9ydCBjcnlzdGFsIGNsb2NrLCBhbmQgYWxzbyBkb24ndCBzdXBwb3J0XG4gXHQgKiBDUFVJRF9MRUFGX0ZSRVEgZm9yIHRoZSBjYWxjdWxhdGlvbiBiZWxvdywgc28gaGFyZGNvZGUgdGhlIDI1TUh6XG4gXHQgKiBjcnlzdGFsIGNsb2NrLlxuIFx0ICovXG4tXHRpZiAoY3J5c3RhbF9raHogPT0gMCBcdTAwMjZcdTAwMjZcbi1cdFx0XHRib290X2NwdV9kYXRhLng4Nl92Zm0gPT0gSU5URUxfQVRPTV9HT0xETU9OVF9EKVxuLVx0XHRjcnlzdGFsX2toeiA9IDI1MDAwO1xuK1x0aWYgKCFpbmZvLmNyeXN0YWxfa2h6IFx1MDAyNlx1MDAyNiBib290X2NwdV9kYXRhLng4Nl92Zm0gPT0gSU5URUxfQVRPTV9HT0xETU9OVF9EKVxuK1x0XHRpbmZvLmNyeXN0YWxfa2h6ID0gMjUwMDA7XG4gXG4gXHQvKlxuIFx0ICogVFNDIGZyZXF1ZW5jeSByZXBvcnRlZCBkaXJlY3RseSBieSBDUFVJRCBpcyBhIFwiaGFyZHdhcmUgcmVwb3J0ZWRcIlxuIFx0ICogZnJlcXVlbmN5IGFuZCBpcyB0aGUgbW9zdCBhY2N1cmF0ZSBvbmUgc28gZmFyIHdlIGhhdmUuIFRoaXNcbiBcdCAqIGlzIGNvbnNpZGVyZWQgYSBrbm93biBmcmVxdWVuY3kuXG4gXHQgKi9cbi1cdGlmIChjcnlzdGFsX2toeiAhPSAwKVxuK1x0aWYgKGluZm8uY3J5c3RhbF9raHopXG4gXHRcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpO1xuIFxuIFx0LypcbkBAIC02OTIsMTUgKzcyOCwxMCBAQCB1bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfdHNjKHZvaWQpXG4gXHQgKiBjbG9jaywgYnV0IHdlIGNhbiBlYXNpbHkgY2FsY3VsYXRlIGl0IHRvIGEgaGlnaCBkZWdyZWUgb2YgYWNjdXJhY3lcbiBcdCAqIGJ5IGNvbnNpZGVyaW5nIHRoZSBjcnlzdGFsIHJhdGlvIGFuZCB0aGUgQ1BVIHNwZWVkLlxuIFx0ICovXG4tXHRpZiAoY3J5c3RhbF9raHogPT0gMCBcdTAwMjZcdTAwMjYgYm9vdF9jcHVfZGF0YS5jcHVpZF9sZXZlbCBcdTAwM2U9IENQVUlEX0xFQUZfRlJFUSkge1xuLVx0XHR1bnNpZ25lZCBpbnQgZWF4X2Jhc2VfbWh6LCBlYngsIGVjeCwgZWR4O1xuK1x0aWYgKCFpbmZvLmNyeXN0YWxfa2h6KVxuK1x0XHRpbmZvLmNyeXN0YWxfa2h6ID0gX19jcHVfa2h6X2Zyb21fY3B1aWQoKSAqIGluZm8uZGVub21pbmF0b3IgLyBpbmZvLm51bWVyYXRvcjtcbiBcbi1cdFx0Y3B1aWQoQ1BVSURfTEVBRl9GUkVRLCBcdTAwMjZlYXhfYmFzZV9taHosIFx1MDAyNmVieCwgXHUwMDI2ZWN4LCBcdTAwMjZlZHgpO1xuLVx0XHRjcnlzdGFsX2toeiA9IGVheF9iYXNlX21oeiAqIDEwMDAgKlxuLVx0XHRcdGVheF9kZW5vbWluYXRvciAvIGVieF9udW1lcmF0b3I7XG4tXHR9XG4tXG4tXHRpZiAoY3J5c3RhbF9raHogPT0gMClcbitcdGlmICghaW5mby5jcnlzdGFsX2toeilcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKlxuQEAgLTcxMCw0MSArNzQxLDMwIEBAIHVuc2lnbmVkIGxvbmcgbmF0aXZlX2NhbGlicmF0ZV90c2Modm9pZClcbiBcdGlmIChib290X2NwdV9kYXRhLng4Nl92Zm0gPT0gSU5URUxfQVRPTV9HT0xETU9OVClcbiBcdFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfUkVMSUFCTEUpO1xuIFxuLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUNcbiBcdC8qXG4gXHQgKiBUaGUgbG9jYWwgQVBJQyBhcHBlYXJzIHRvIGJlIGZlZCBieSB0aGUgY29yZSBjcnlzdGFsIGNsb2NrXG4gXHQgKiAod2hpY2ggc291bmRzIGVudGlyZWx5IHNlbnNpYmxlKS4gV2UgY2FuIHNldCB0aGUgZ2xvYmFsXG4gXHQgKiBsYXBpY190aW1lcl9wZXJpb2QgaGVyZSB0byBhdm9pZCBoYXZpbmcgdG8gY2FsaWJyYXRlIHRoZSBBUElDXG4gXHQgKiB0aW1lciBsYXRlci5cbiBcdCAqL1xuLVx0bGFwaWNfdGltZXJfcGVyaW9kID0gY3J5c3RhbF9raHogKiAxMDAwIC8gSFo7XG4tI2VuZGlmXG4rXHRhcGljX3NldF90aW1lcl9wZXJpb2Rfa2h6KGluZm8uY3J5c3RhbF9raHosIFwiQ1BVSUQgMHgxNS8weDE2XCIpO1xuIFxuLVx0cmV0dXJuIGNyeXN0YWxfa2h6ICogZWJ4X251bWVyYXRvciAvIGVheF9kZW5vbWluYXRvcjtcbitcdHJldHVybiBpbmZvLmNyeXN0YWxfa2h6ICogaW5mby5udW1lcmF0b3IgLyBpbmZvLmRlbm9taW5hdG9yO1xuIH1cbiBcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfa2h6X2Zyb21fY3B1aWQodm9pZClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgZWF4X2Jhc2VfbWh6LCBlYnhfbWF4X21oeiwgZWN4X2J1c19taHosIGVkeDtcbi1cbiBcdGlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAoYm9vdF9jcHVfZGF0YS5jcHVpZF9sZXZlbCBcdTAwM2MgQ1BVSURfTEVBRl9GUkVRKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdGVheF9iYXNlX21oeiA9IGVieF9tYXhfbWh6ID0gZWN4X2J1c19taHogPSBlZHggPSAwO1xuLVxuLVx0Y3B1aWQoQ1BVSURfTEVBRl9GUkVRLCBcdTAwMjZlYXhfYmFzZV9taHosIFx1MDAyNmVieF9tYXhfbWh6LCBcdTAwMjZlY3hfYnVzX21oeiwgXHUwMDI2ZWR4KTtcbi1cbi1cdHJldHVybiBlYXhfYmFzZV9taHogKiAxMDAwO1xuK1x0cmV0dXJuIF9fY3B1X2toel9mcm9tX2NwdWlkKCk7XG4gfVxuIFxuIC8qXG4gICogY2FsaWJyYXRlIGNwdSB1c2luZyBwaXQsIGhwZXQsIGFuZCBwdGltZXIgbWV0aG9kcy4gVGhleSBhcmUgYXZhaWxhYmxlXG4gICogbGF0ZXIgaW4gYm9vdCBhZnRlciBhY3BpIGlzIGluaXRpYWxpemVkLlxuICAqL1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBpdF9ocGV0X3B0aW1lcl9jYWxpYnJhdGVfY3B1KHZvaWQpXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgbmF0aXZlX2NhbGlicmF0ZV9jcHVfbGF0ZSh2b2lkKVxuIHtcbiBcdHU2NCB0c2MxLCB0c2MyLCBkZWx0YSwgcmVmMSwgcmVmMjtcbiBcdHVuc2lnbmVkIGxvbmcgdHNjX3BpdF9taW4gPSBVTE9OR19NQVgsIHRzY19yZWZfbWluID0gVUxPTkdfTUFYO1xuQEAgLTg5Niw3ICs5MTYsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBwaXRfaHBldF9wdGltZXJfY2FsaWJyYXRlX2NwdSh2b2lkKVxuIC8qKlxuICAqIG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5IC0gY2FuIGNhbGlicmF0ZSB0aGUgY3B1IGVhcmx5IGluIGJvb3RcbiAgKi9cbi11bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KHZvaWQpXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHkodm9pZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzLCBmYXN0X2NhbGlicmF0ZSA9IGNwdV9raHpfZnJvbV9jcHVpZCgpO1xuIFxuQEAgLTkxMCwyMCArOTMwLDYgQEAgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSh2b2lkKVxuIFx0cmV0dXJuIGZhc3RfY2FsaWJyYXRlO1xuIH1cbiBcbi1cbi0vKipcbi0gKiBuYXRpdmVfY2FsaWJyYXRlX2NwdSAtIGNhbGlicmF0ZSB0aGUgY3B1XG4tICovXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgbmF0aXZlX2NhbGlicmF0ZV9jcHUodm9pZClcbi17XG4tXHR1bnNpZ25lZCBsb25nIHRzY19mcmVxID0gbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHkoKTtcbi1cbi1cdGlmICghdHNjX2ZyZXEpXG4tXHRcdHRzY19mcmVxID0gcGl0X2hwZXRfcHRpbWVyX2NhbGlicmF0ZV9jcHUoKTtcbi1cbi1cdHJldHVybiB0c2NfZnJlcTtcbi19XG4tXG4gdm9pZCByZWNhbGlicmF0ZV9jcHVfa2h6KHZvaWQpXG4ge1xuICNpZm5kZWYgQ09ORklHX1NNUFxuQEAgLTkzMiw4ICs5MzgsMTMgQEAgdm9pZCByZWNhbGlicmF0ZV9jcHVfa2h6KHZvaWQpXG4gXHRpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9UU0MpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRjcHVfa2h6ID0geDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUoKTtcbi1cdHRzY19raHogPSB4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX3RzYygpO1xuK1x0aWYgKFdBUk5fT05fT05DRShjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKSkpXG4rXHRcdHJldHVybjtcbitcbitcdGNwdV9raHogPSBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSgpO1xuK1x0aWYgKCFjcHVfa2h6KVxuK1x0XHRjcHVfa2h6ID0gbmF0aXZlX2NhbGlicmF0ZV9jcHVfbGF0ZSgpO1xuK1x0dHNjX2toeiA9IG5hdGl2ZV9jYWxpYnJhdGVfdHNjKCk7XG4gXHRpZiAodHNjX2toeiA9PSAwKVxuIFx0XHR0c2Nfa2h6ID0gY3B1X2toejtcbiBcdGVsc2UgaWYgKGFicyhjcHVfa2h6IC0gdHNjX2toeikgKiAxMCBcdTAwM2UgdHNjX2toeilcbkBAIC05NDIsMTQgKzk1MywyMiBAQCB2b2lkIHJlY2FsaWJyYXRlX2NwdV9raHoodm9pZClcbiBcdFx0XHRcdFx0XHQgICAgY3B1X2toel9vbGQsIGNwdV9raHopO1xuICNlbmRpZlxuIH1cbi1FWFBPUlRfU1lNQk9MX0dQTChyZWNhbGlicmF0ZV9jcHVfa2h6KTtcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHJlY2FsaWJyYXRlX2NwdV9raHosIFwicDQtY2xvY2ttb2QscG93ZXJub3ctazdcIik7XG4gXG4gXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBjeWMybnNfc3VzcGVuZDtcbiBcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdHNjX2lzX3NhdmVfcmVzdG9yZV9uZWVkZWQodm9pZClcbit7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKCF1c2luZ19uYXRpdmVfc2NoZWRfY2xvY2soKSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZfX3VzZV90c2MpIHx8IHNjaGVkX2Nsb2NrX3N0YWJsZSgpO1xuK31cbitcbiB2b2lkIHRzY19zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXG4ge1xuLVx0aWYgKCFzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZfX3VzZV90c2MpIFx1MDAyNlx1MDAyNiAhc2NoZWRfY2xvY2tfc3RhYmxlKCkpXG4rXHRpZiAoIXRzY19pc19zYXZlX3Jlc3RvcmVfbmVlZGVkKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdGN5YzJuc19zdXNwZW5kID0gc2NoZWRfY2xvY2soKTtcbkBAIC05NjksNyArOTg4LDcgQEAgdm9pZCB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBjcHU7XG4gXG4tXHRpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNl9fdXNlX3RzYykgXHUwMDI2XHUwMDI2ICFzY2hlZF9jbG9ja19zdGFibGUoKSlcbitcdGlmICghdHNjX2lzX3NhdmVfcmVzdG9yZV9uZWVkZWQoKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuQEAgLTE0MzksMjEgKzE0NTgsMjggQEAgc3RhdGljIGludCBfX2luaXQgaW5pdF90c2NfY2xvY2tzb3VyY2Uodm9pZClcbiAgKi9cbiBkZXZpY2VfaW5pdGNhbGwoaW5pdF90c2NfY2xvY2tzb3VyY2UpO1xuIFxuLXN0YXRpYyBib29sIF9faW5pdCBkZXRlcm1pbmVfY3B1X3RzY19mcmVxdWVuY2llcyhib29sIGVhcmx5KVxuK3N0YXRpYyBib29sIF9faW5pdCBkZXRlcm1pbmVfY3B1X3RzY19mcmVxdWVuY2llcyhib29sIGVhcmx5LFxuK1x0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQga25vd25fY3B1X2toeixcbitcdFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IGtub3duX3RzY19raHopXG4ge1xuIFx0LyogTWFrZSBzdXJlIHRoYXQgY3B1IGFuZCB0c2MgYXJlIG5vdCBhbHJlYWR5IGNhbGlicmF0ZWQgKi9cbiBcdFdBUk5fT04oY3B1X2toeiB8fCB0c2Nfa2h6KTtcbiBcbiBcdGlmIChlYXJseSkge1xuLVx0XHRjcHVfa2h6ID0geDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUoKTtcbi1cdFx0aWYgKHRzY19lYXJseV9raHopXG4tXHRcdFx0dHNjX2toeiA9IHRzY19lYXJseV9raHo7XG4rXHRcdC8qXG4rXHRcdCAqIEVhcmx5IENQVSBjYWxpYnJhdGlvbiBjYW4gb25seSB1c2UgbWV0aG9kcyB0aGF0IGFyZSBhdmFpbGFibGVcbitcdFx0ICogZWFybHkgaW4gYm9vdCAob2J2aW91c2x5KS5cbitcdFx0ICovXG4rXHRcdGlmIChrbm93bl9jcHVfa2h6KVxuK1x0XHRcdGNwdV9raHogPSBrbm93bl9jcHVfa2h6O1xuIFx0XHRlbHNlXG4tXHRcdFx0dHNjX2toeiA9IHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjKCk7XG4rXHRcdFx0Y3B1X2toeiA9IG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KCk7XG4rXHRcdGlmIChrbm93bl90c2Nfa2h6KVxuK1x0XHRcdHRzY19raHogPSBrbm93bl90c2Nfa2h6O1xuK1x0XHRlbHNlXG4rXHRcdFx0dHNjX2toeiA9IG5hdGl2ZV9jYWxpYnJhdGVfdHNjKCk7XG4gXHR9IGVsc2Uge1xuLVx0XHQvKiBXZSBzaG91bGQgbm90IGJlIGhlcmUgd2l0aCBub24tbmF0aXZlIGNwdSBjYWxpYnJhdGlvbiAqL1xuLVx0XHRXQVJOX09OKHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ICE9IG5hdGl2ZV9jYWxpYnJhdGVfY3B1KTtcbi1cdFx0Y3B1X2toeiA9IHBpdF9ocGV0X3B0aW1lcl9jYWxpYnJhdGVfY3B1KCk7XG4rXHRcdGNwdV9raHogPSBuYXRpdmVfY2FsaWJyYXRlX2NwdV9sYXRlKCk7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTE1MDIsMTUgKzE1MjgsNDggQEAgc3RhdGljIHZvaWQgX19pbml0IHRzY19lbmFibGVfc2NoZWRfY2xvY2sodm9pZClcbiBcbiB2b2lkIF9faW5pdCB0c2NfZWFybHlfaW5pdCh2b2lkKVxuIHtcbitcdHVuc2lnbmVkIGludCBrbm93bl9jcHVfa2h6ID0gMCwga25vd25fdHNjX2toeiA9IDA7XG4rXG4gXHRpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9UU0MpKVxuIFx0XHRyZXR1cm47XG4gXHQvKiBEb24ndCBjaGFuZ2UgVVYgVFNDIG11bHRpLWNoYXNzaXMgc3luY2hyb25pemF0aW9uICovXG4gXHRpZiAoaXNfZWFybHlfdXZfc3lzdGVtKCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdHNucF9zZWN1cmVfdHNjX2luaXQoKTtcbitcdGlmICh4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeilcbitcdFx0a25vd25fY3B1X2toeiA9IHg4Nl9pbml0Lmh5cGVyLmdldF9jcHVfa2h6KCk7XG4gXG4tXHRpZiAoIWRldGVybWluZV9jcHVfdHNjX2ZyZXF1ZW5jaWVzKHRydWUpKVxuK1x0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0dVRVNUX1NOUF9TRUNVUkVfVFNDKSlcbitcdFx0a25vd25fdHNjX2toeiA9IHNucF9zZWN1cmVfdHNjX2luaXQoKTtcbitcdGVsc2UgaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxuK1x0XHRrbm93bl90c2Nfa2h6ID0gdGR4X3RzY19pbml0KCk7XG4rXG4rXHQvKlxuK1x0ICogSWYgdGhlIFRTQyBmcmVxdWVuY3kgd2Fzbid0IHByb3ZpZGVkIGJ5IHRydXN0ZWQgZmlybXdhcmUsIHRyeSB0byBnZXRcbitcdCAqIGl0IGZyb20gdGhlIGh5cGVydmlzb3IgKHdoaWNoIGlzIHVudHJ1c3RlZCB3aGVuIHJ1bm5pbmcgYXMgYSBDb0NvIGd1ZXN0KS5cbitcdCAqL1xuK1x0aWYgKCFrbm93bl90c2Nfa2h6IFx1MDAyNlx1MDAyNiB4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeilcbitcdFx0a25vd25fdHNjX2toeiA9IHg4Nl9pbml0Lmh5cGVyLmdldF90c2Nfa2h6KCk7XG4rXG4rXHQvKlxuK1x0ICogTWFyayB0aGUgVFNDIGZyZXF1ZW5jeSBhcyBrbm93biBpZiBpdCB3YXMgb2J0YWluZWQgZnJvbSBhIGh5cGVydmlzb3JcbitcdCAqIG9yIHRydXN0ZWQgZmlybXdhcmUuXG4rXHQgKi9cbitcdGlmIChrbm93bl90c2Nfa2h6KVxuK1x0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKTtcbitcbitcdC8qXG4rXHQgKiBJZ25vcmUgdGhlIHVzZXItcHJvdmlkZWQgVFNDIGZyZXF1ZW5jeSBpZiB0aGUgZXhhY3QgZnJlcXVlbmN5IHdhc1xuK1x0ICogb2J0YWluZWQgZnJvbSB0cnVzdGVkIGZpcm13YXJlIG9yIHRoZSBoeXBlcnZpc29yLCBhbmQgZG9uJ3QgbWFyayB0aGVcbitcdCAqIGZyZXF1ZW5jeSBhcyBrbm93biwgYXMgdGhlIHVzZXItcHJvdmlkZWQgZnJlcXVlbmN5IGlzIGludGVuZGVkIGFzIGFcbitcdCAqIFwic3RhcnRpbmcgcG9pbnRcIiwgbm90IGEga25vd24sIGd1YXJhbnRlZWQgZnJlcXVlbmN5XG4rXHQgKi9cbitcdGlmICgha25vd25fdHNjX2toeilcbitcdFx0a25vd25fdHNjX2toeiA9IHRzY19lYXJseV9raHo7XG4rXHRlbHNlIGlmICh0c2NfZWFybHlfa2h6KVxuK1x0XHRwcl9lcnIoXCJJZ25vcmluZyAndHNjX2Vhcmx5X2toeicgaW4gZmF2b3Igb2YgZmlybXdhcmUvaHlwZXJ2aXNvci5cXG5cIik7XG4rXG4rXHRpZiAoIWRldGVybWluZV9jcHVfdHNjX2ZyZXF1ZW5jaWVzKHRydWUsIGtub3duX2NwdV9raHosIGtub3duX3RzY19raHopKVxuIFx0XHRyZXR1cm47XG4gXHR0c2NfZW5hYmxlX3NjaGVkX2Nsb2NrKCk7XG4gfVxuQEAgLTE1MjIsMTYgKzE1ODEsOSBAQCB2b2lkIF9faW5pdCB0c2NfaW5pdCh2b2lkKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHQvKlxuLVx0ICogbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHkgY2FuIG9ubHkgY2FsaWJyYXRlIHVzaW5nIG1ldGhvZHMgdGhhdCBhcmVcbi1cdCAqIGF2YWlsYWJsZSBlYXJseSBpbiBib290LlxuLVx0ICovXG4tXHRpZiAoeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUgPT0gbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHkpXG4tXHRcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ID0gbmF0aXZlX2NhbGlicmF0ZV9jcHU7XG4tXG4gXHRpZiAoIXRzY19raHopIHtcbiBcdFx0LyogV2UgZmFpbGVkIHRvIGRldGVybWluZSBmcmVxdWVuY2llcyBlYXJsaWVyLCB0cnkgYWdhaW4gKi9cbi1cdFx0aWYgKCFkZXRlcm1pbmVfY3B1X3RzY19mcmVxdWVuY2llcyhmYWxzZSkpIHtcbitcdFx0aWYgKCFkZXRlcm1pbmVfY3B1X3RzY19mcmVxdWVuY2llcyhmYWxzZSwgMCwgMCkpIHtcbiBcdFx0XHRtYXJrX3RzY191bnN0YWJsZShcImNvdWxkIG5vdCBjYWxjdWxhdGUgVFNDIGtoelwiKTtcbiBcdFx0XHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19ERUFETElORV9USU1FUik7XG4gXHRcdFx0cmV0dXJuO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90c2NfbXNyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjX21zci5jXG5pbmRleCA0OGU2Y2MxY2IwMTdhNS4uYWVjZTA2MmFlZTdlODkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHNjX21zci5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjX21zci5jXG5AQCAtMjEwLDkgKzIxMCw3IEBAIHVuc2lnbmVkIGxvbmcgY3B1X2toel9mcm9tX21zcih2b2lkKVxuIFx0aWYgKGZyZXEgPT0gMClcbiBcdFx0cHJfZXJyKFwiRXJyb3IgTVNSX0ZTQl9GUkVRIGluZGV4ICVkIGlzIHVua25vd25cXG5cIiwgaW5kZXgpO1xuIFxuLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUNcbi1cdGxhcGljX3RpbWVyX3BlcmlvZCA9IChmcmVxICogMTAwMCkgLyBIWjtcbi0jZW5kaWZcbitcdGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHooZnJlcSwgXCJNU1JfRlNCX0ZSRVFcIik7XG4gXG4gXHQvKlxuIFx0ICogVFNDIGZyZXF1ZW5jeSBkZXRlcm1pbmVkIGJ5IE1TUiBpcyBhbHdheXMgY29uc2lkZXJlZCBcImtub3duXCJcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYyBiL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jXG5pbmRleCAyNTJjNTgyN2QwNjM0Zi4uYjdhNDhlNjIyZjQ4OGEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuY1xuKysrIGIvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmNcbkBAIC0xNDcsOCArMTQ3LDYgQEAgc3RhdGljIHZvaWQgZW5jX2tleGVjX2ZpbmlzaF9ub29wKHZvaWQpIHt9XG4gc3RhdGljIGJvb2wgaXNfcHJpdmF0ZV9tbWlvX25vb3AodTY0IGFkZHIpIHtyZXR1cm4gZmFsc2U7IH1cbiBcbiBzdHJ1Y3QgeDg2X3BsYXRmb3JtX29wcyB4ODZfcGxhdGZvcm0gX19yb19hZnRlcl9pbml0ID0ge1xuLVx0LmNhbGlicmF0ZV9jcHVcdFx0XHQ9IG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5LFxuLVx0LmNhbGlicmF0ZV90c2NcdFx0XHQ9IG5hdGl2ZV9jYWxpYnJhdGVfdHNjLFxuIFx0LmdldF93YWxsY2xvY2tcdFx0XHQ9IG1hY2hfZ2V0X2Ntb3NfdGltZSxcbiBcdC5zZXRfd2FsbGNsb2NrXHRcdFx0PSBtYWNoX3NldF9jbW9zX3RpbWUsXG4gXHQuaW9tbXVfc2h1dGRvd25cdFx0XHQ9IGlvbW11X3NodXRkb3duX25vb3AsXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMgYi9hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuY1xuaW5kZXggMmY4YzMyMTczOTcyZDYuLjZjM2FmOTc0YzdjMmYxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmNcbisrKyBiL2FyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jXG5AQCAtNTM1LDkgKzUzNSw2IEBAIHZvaWQgX19pbml0IHNtZV9lYXJseV9pbml0KHZvaWQpXG4gXHRcdCAqL1xuIFx0XHR4ODZfaW5pdC5yZXNvdXJjZXMuZG1pX3NldHVwID0gc25wX2RtaV9zZXR1cDtcbiBcdH1cbi1cbi1cdGlmIChzZXZfc3RhdHVzIFx1MDAyNiBNU1JfQU1ENjRfU05QX1NFQ1VSRV9UU0MpXG4tXHRcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTtcbiB9XG4gXG4gdm9pZCBfX2luaXQgbWVtX2VuY3J5cHRfZnJlZV9kZWNyeXB0ZWRfbWVtKHZvaWQpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3RpbWUuYyBiL2FyY2gveDg2L3hlbi90aW1lLmNcbmluZGV4IGQ2MmMxNDMzNGIzNTEwLi5iYzI2ZjAwZmM1M2U1ZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3hlbi90aW1lLmNcbisrKyBiL2FyY2gveDg2L3hlbi90aW1lLmNcbkBAIC0zOCwxMiArMzgsMTEgQEBcbiBzdGF0aWMgdTY0IHhlbl9zY2hlZF9jbG9ja19vZmZzZXQgX19yZWFkX21vc3RseTtcbiBcbiAvKiBHZXQgdGhlIFRTQyBzcGVlZCBmcm9tIFhlbiAqL1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHhlbl90c2Nfa2h6KHZvaWQpXG4rc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgeGVuX3RzY19raHoodm9pZClcbiB7XG4gXHRzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqaW5mbyA9XG4gXHRcdFx1MDAyNkhZUEVSVklTT1Jfc2hhcmVkX2luZm8tXHUwMDNldmNwdV9pbmZvWzBdLnRpbWU7XG4gXG4tXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKTtcbiBcdHJldHVybiBwdmNsb2NrX3RzY19raHooaW5mbyk7XG4gfVxuIFxuQEAgLTQ0NCw3ICs0NDMsNyBAQCB2b2lkIHhlbl9yZXN0b3JlX3RpbWVfbWVtb3J5X2FyZWEodm9pZClcbiBcdHhlbl9zY2hlZF9jbG9ja19vZmZzZXQgPSB4ZW5fY2xvY2tzb3VyY2VfcmVhZCgpIC0geGVuX2Nsb2NrX3ZhbHVlX3NhdmVkO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB4ZW5fc2V0dXBfdnN5c2NhbGxfdGltZV9pbmZvKHZvaWQpXG4rc3RhdGljIHZvaWQgX19pbml0IHhlbl9zZXR1cF92c3lzY2FsbF90aW1lX2luZm8odm9pZClcbiB7XG4gXHRzdHJ1Y3QgdmNwdV9yZWdpc3Rlcl90aW1lX21lbW9yeV9hcmVhIHQ7XG4gXHRzdHJ1Y3QgcHZjbG9ja192c3lzY2FsbF90aW1lX2luZm8gKnRpO1xuQEAgLTU2Nyw5ICs1NjYsMTQgQEAgc3RhdGljIHZvaWQgX19pbml0IHhlbl9pbml0X3RpbWVfY29tbW9uKHZvaWQpXG4ge1xuIFx0eGVuX3NjaGVkX2Nsb2NrX29mZnNldCA9IHhlbl9jbG9ja3NvdXJjZV9yZWFkKCk7XG4gXHRzdGF0aWNfY2FsbF91cGRhdGUocHZfc3RlYWxfY2xvY2ssIHhlbl9zdGVhbF9jbG9jayk7XG4tXHRwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2soeGVuX3NjaGVkX2Nsb2NrKTtcbiBcbi1cdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjID0geGVuX3RzY19raHo7XG4rXHQvKlxuK1x0ICogWGVuIGhhcyBwYXJhdmlydHVhbGl6ZWQgc3VzcGVuZC9yZXN1bWUgYW5kIHNvIGRvZXNuJ3QgdXNlIHRoZSBjb21tb25cbitcdCAqIHg4NiBzY2hlZF9jbG9jayBzYXZlL3Jlc3RvcmUgaG9va3MuXG4rXHQgKi9cbitcdHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh4ZW5fc2NoZWRfY2xvY2ssIHg4Nl9pbml0X25vb3AsIHg4Nl9pbml0X25vb3ApO1xuK1xuK1x0eDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHogPSB4ZW5fdHNjX2toejtcbiBcdHg4Nl9wbGF0Zm9ybS5nZXRfd2FsbGNsb2NrID0geGVuX2dldF93YWxsY2xvY2s7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jXG5pbmRleCBkZjU2Nzc5NWQxNzUxYS4uOGVlN2E5ZGUwZjRmZGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jXG4rKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jXG5AQCAtNDg4LDE3ICs0ODgsNiBAQCBzdGF0aWMgdm9pZCByZXN1bWVfaHZfY2xvY2tfdHNjKHN0cnVjdCBjbG9ja3NvdXJjZSAqYXJnKVxuIFx0aHZfc2V0X21zcihIVl9NU1JfUkVGRVJFTkNFX1RTQywgdHNjX21zci5hc191aW50NjQpO1xuIH1cbiBcbi0vKlxuLSAqIENhbGxlZCBkdXJpbmcgcmVzdW1lIGZyb20gaGliZXJuYXRpb24sIGZyb20gb3ZlcnJpZGRlblxuLSAqIHg4Nl9wbGF0Zm9ybS5yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlIHJvdXRpbmUuIFRoaXMgaXMgdG8gYWRqdXN0IG9mZnNldHNcbi0gKiB1c2VkIHRvIGNhbGN1bGF0ZSB0aW1lIGZvciBodiB0c2MgcGFnZSBiYXNlZCBzY2hlZF9jbG9jaywgdG8gYWNjb3VudCBmb3Jcbi0gKiB0aW1lIHNwZW50IGJlZm9yZSBoaWJlcm5hdGlvbi5cbi0gKi9cbi12b2lkIGh2X2Fkal9zY2hlZF9jbG9ja19vZmZzZXQodTY0IG9mZnNldClcbi17XG4tXHRodl9zY2hlZF9jbG9ja19vZmZzZXQgLT0gb2Zmc2V0O1xuLX1cbi1cbiAjaWZkZWYgSEFWRV9WRFNPX0NMT0NLTU9ERV9IVkNMT0NLXG4gc3RhdGljIGludCBodl9jc19lbmFibGUoc3RydWN0IGNsb2Nrc291cmNlICpjcylcbiB7XG5AQCAtNTU0LDEwICs1NDMsMzUgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGh2X3NldHVwX3NjaGVkX2Nsb2NrKHZvaWQgKnNjaGVkX2Nsb2NrKVxuICNlbGlmIGRlZmluZWQgQ09ORklHX1BBUkFWSVJUXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RpbWVyLmhcdTAwM2VcbiBcbitzdGF0aWMgdTY0IGh2X3JlZl9jb3VudGVyX2F0X3N1c3BlbmQ7XG4rLypcbisgKiBIeXBlci1WIGNsb2NrIGNvdW50ZXIgcmVzZXRzIGR1cmluZyBoaWJlcm5hdGlvbi4gU2F2ZSBhbmQgcmVzdG9yZSBjbG9ja1xuKyAqIG9mZnNldCBkdXJpbmcgc3VzcGVuZC9yZXN1bWUsIHdoaWxlIGFsc28gY29uc2lkZXJpbmcgdGhlIHRpbWUgcGFzc2VkXG4rICogYmVmb3JlIHN1c3BlbmQuIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgc2NoZWRfY2xvY2sgdXNpbmcgaHYgdHNjIHBhZ2VcbisgKiBiYXNlZCBjbG9ja3NvdXJjZSwgcHJvY2VlZHMgZnJvbSB3aGVyZSBpdCBsZWZ0IG9mZiBkdXJpbmcgc3VzcGVuZCBhbmRcbisgKiBpdCBzaG93cyBjb3JyZWN0IHRpbWUgZm9yIHRoZSB0aW1lc3RhbXBzIG9mIGtlcm5lbCBtZXNzYWdlcyBhZnRlciByZXN1bWUuXG4rICovXG4rc3RhdGljIHZvaWQgaHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxuK3tcbitcdGh2X3JlZl9jb3VudGVyX2F0X3N1c3BlbmQgPSBodl9yZWFkX3JlZmVyZW5jZV9jb3VudGVyKCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGh2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcbit7XG4rXHQvKlxuK1x0ICogQWRqdXN0IHRoZSBvZmZzZXRzIHVzZWQgYnkgaHYgdHNjIGNsb2Nrc291cmNlIHRvXG4rXHQgKiBhY2NvdW50IGZvciB0aGUgdGltZSBzcGVudCBiZWZvcmUgaGliZXJuYXRpb24uXG4rXHQgKiBhZGp1c3RlZCB2YWx1ZSA9IHJlZmVyZW5jZSBjb3VudGVyICh0aW1lKSBhdCBzdXNwZW5kXG4rXHQgKiAgICAgICAgICAgICAgICAtIHJlZmVyZW5jZSBjb3VudGVyICh0aW1lKSBub3cuXG4rXHQgKi9cbitcdGh2X3NjaGVkX2Nsb2NrX29mZnNldCAtPSAoaHZfcmVmX2NvdW50ZXJfYXRfc3VzcGVuZCAtIGh2X3JlYWRfcmVmZXJlbmNlX2NvdW50ZXIoKSk7XG4rfVxuK1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBodl9zZXR1cF9zY2hlZF9jbG9jayh2b2lkICpzY2hlZF9jbG9jaylcbiB7XG4gXHQvKiBXZSdyZSBvbiB4ODYveDY0ICphbmQqIHVzaW5nIFBWIG9wcyAqL1xuLVx0cGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKHNjaGVkX2Nsb2NrKTtcbitcdHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayhzY2hlZF9jbG9jaywgaHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSxcbitcdFx0XHRcdCBodl9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKTtcbiB9XG4gI2Vsc2UgLyogIUNPTkZJR19HRU5FUklDX1NDSEVEX0NMT0NLIFx1MDAyNlx1MDAyNiAhQ09ORklHX1BBUkFWSVJUICovXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGh2X3NldHVwX3NjaGVkX2Nsb2NrKHZvaWQgKnNjaGVkX2Nsb2NrKSB7fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmggYi9pbmNsdWRlL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5oXG5pbmRleCBkNDhkZDQxNzZmZDM1Yi4uYTRjODFhNjBmNTNkZmMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5oXG4rKysgYi9pbmNsdWRlL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5oXG5AQCAtMzgsOCArMzgsNiBAQCBleHRlcm4gdm9pZCBodl9yZW1hcF90c2NfY2xvY2tzb3VyY2Uodm9pZCk7XG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaHZfZ2V0X3RzY19wZm4odm9pZCk7XG4gZXh0ZXJuIHN0cnVjdCBtc19oeXBlcnZfdHNjX3BhZ2UgKmh2X2dldF90c2NfcGFnZSh2b2lkKTtcbiBcbi1leHRlcm4gdm9pZCBodl9hZGpfc2NoZWRfY2xvY2tfb2Zmc2V0KHU2NCBvZmZzZXQpO1xuLVxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbFxuIGh2X3JlYWRfdHNjX3BhZ2VfdHNjKGNvbnN0IHN0cnVjdCBtc19oeXBlcnZfdHNjX3BhZ2UgKnRzY19wZyxcbiBcdFx0ICAgICB1NjQgKmN1cl90c2MsIHU2NCAqdGltZSlcbmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jIGIva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuY1xuaW5kZXggYjFiNWVjNDNjMGYyN2IuLjViYzc3ZDM2YzdhMzY0IDEwMDY0NFxuLS0tIGEva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuY1xuKysrIGIva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuY1xuQEAgLTIxODAsMTEgKzIxODAsMTYgQEAgdm9pZCB0aW1la2VlcGluZ19yZXN1bWUodm9pZClcbiBcdHU2NCBjeWNsZV9ub3csIG5zZWM7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuLVx0cmVhZF9wZXJzaXN0ZW50X2Nsb2NrNjQoXHUwMDI2dHNfbmV3KTtcbi1cbiBcdGNsb2NrZXZlbnRzX3Jlc3VtZSgpO1xuIFx0Y2xvY2tzb3VyY2VfcmVzdW1lKCk7XG4gXG4rXHQvKlxuK1x0ICogUmVhZCBwZXJzaXN0ZW50IHRpbWUgYWZ0ZXIgY2xvY2tzb3VyY2VzIGhhdmUgYmVlbiByZXN1bWVkLiAgUGFyYXZpcnRcbitcdCAqIGNsb2NrcyBoYXZlIGEgbmFzdHkgaGFiaXQgb2YgcGlnZ3liYWNraW5nIGEgcGVyc2lzdGVudCBjbG9jayBvbiBhXG4rXHQgKiBzeXN0ZW0gY2xvY2ssIGFuZCBtYXkgcmV0dXJuIGdhcmJhZ2UgaWYgdGhlIHN5c3RlbSBjbG9jayBpcyBzdXNwZW5kZWQuXG4rXHQgKi9cbitcdHJlYWRfcGVyc2lzdGVudF9jbG9jazY0KFx1MDAyNnRzX25ldyk7XG4rXG4gXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dGtfY29yZS5sb2NrLCBmbGFncyk7XG4gXG4gXHQvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6MTE6MDYuNzA4NDk1MDU5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY2MTczNTU5NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUU0MgYW5kIEFQSUMgSW5pdGlhbGl6YXRpb24gUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCdzIGEgZGVlcCBkaXZlIGludG8gaG93IHdlIGhhbmRsZSBUaW1lIFN0YW1wIENvdW50ZXJzIChUU0MpIGFuZCBBUElDIGZyZXF1ZW5jaWVzIG9uIHg4NiwgZXNwZWNpYWxseSB3aXRoaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdCBsb29rcyBsaWtlIHRoZSBnb2FsIGhlcmUgaXMgdG8gbW9kZXJuaXplIGFuZCBpbXByb3ZlIGhvdyB3ZSBjYWxpYnJhdGUgYW5kIGluaXRpYWxpemUgdGhlc2UgdGltZS1jcml0aWNhbCBjb21wb25lbnRzLCBlc3BlY2lhbGx5IGZvciB0aGUgbGlrZXMgb2YgS1ZNLCBIeXBlci1WLCBWTXdhcmUsIEFDUk4sIEphaWxob3VzZSwgVERYLCBhbmQgU0VWLVNOUC5cblxuSW5pdGlhbGx5LCBJIHNlZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIHdoaWNoIGlzIGFsd2F5cyBnb29kLiBTcGVjaWZpY2FsbHksIGB0c2NfZWFybHlfa2h6YCBhbmQgYEtWTV9DUFVJRF9USU1JTkdfSU5GT2AgYXJlIGRvY3VtZW50ZWQsIHdoaWNoIGlzIGEga2V5IHNpZ25hbC4gVGhlbiBpdCBsb29rcyBsaWtlIHdlJ3JlIG1vdmluZyBhd2F5IGZyb20gc2V0dGluZyBgeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHVgIGFuZCBgeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2NgIGluIHNldmVyYWwgcGxhY2VzIChsaWtlIHdpdGggYHNucF9zZWN1cmVfdHNjX2luaXRgKSwgYW5kIGluc3RlYWQgcmV0dXJuaW5nIHRoZSBUU0MgZnJlcXVlbmN5IGRpcmVjdGx5LiBUaGF0J3MgYSBzb2xpZCBhcmNoaXRlY3R1cmFsIGNoYW5nZS4gTWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGNvbXBsZXhpdGllcyBvZiBtb2Rlcm4gdmlydHVhbGl6YXRpb24uXG5cblRoZSBhZGRpdGlvbiBvZiBgdGR4X3RzY19pbml0YCBhbmQgaXRzIHVzZSBvZiBgY3B1aWRfZ2V0X3RzY19pbmZvYCBhbmQgYGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHpgIGZvciBURFggZW52aXJvbm1lbnRzIGlzIGltcG9ydGFudCwgdG9vLiBUaGlzIHN1Z2dlc3RzIGEgbW9yZSBkaXJlY3Qgd2F5IG9mIHJldHJpZXZpbmcgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIENQVUlEIGFuZCBzZXR0aW5nIHRoZSBBUElDIHRpbWVyIHBlcmlvZCwgd2hpY2ggSSB3b3VsZCBleHBlY3QgdG8gaW1wcm92ZSByZWxpYWJpbGl0eSBhbmQgcmVkdWNlIG92ZXJoZWFkLiBUaGUgcmVtb3ZhbCBvZiBgYWNybl9nZXRfdHNjX2toemAgc3VnZ2VzdHMgYSBzaGlmdCB0byBhIG1vcmUgZ2VuZXJpYyBvciBDUFVJRC1iYXNlZCBhcHByb2FjaCwgd2hpY2ggaXMgbGlrZWx5IG1vcmUgbWFpbnRhaW5hYmxlIGluIHRoZSBsb25nIHJ1bi4gVGhlIGNoYW5nZXMgaW4gdGhlIGhlYWRlciBmaWxlcyBhbmQgdGhlIGFkZGl0aW9uIG9mIGBhcGljX3NldF90aW1lcl9wZXJpb2RfaHpgIGFsc28gbG9va3MgbGlrZSBhIGdvb2Qgc3RlcCB0b3dhcmQgYmV0dGVyIHByZWNpc2lvbiBhbmQgYSBtb3JlIGZsZXhpYmxlIGludGVyZmFjZSBmb3IgY29uZmlndXJpbmcgQVBJQyB0aW1lcnMuXG5cbkknbSBpbnRyaWd1ZWQgYnkgdGhlIGNoYW5nZXMgaW4gYGt2bS5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgYWRkaXRpb24gb2YgYEtWTV9DUFVJRF9USU1JTkdfSU5GT2AgdG8gcHVsbCBUU0MgYW5kIEFQSUMgZnJlcXVlbmNpZXMgZGlyZWN0bHkgZnJvbSBDUFVJRCBzb3VuZHMgcHJvbWlzaW5nLiBUaGlzIGJ5cGFzc2VzIHRoZSBuZWVkIGZvciBoeXBlcnZpc29yLXNwZWNpZmljIGNhbGlicmF0aW9uIGFuZCBnaXZlcyB1cyBhIG1vcmUgZGlyZWN0IGFuZCBwb3RlbnRpYWxseSBtb3JlIGFjY3VyYXRlIGFwcHJvYWNoLiBUaGUgcmVmYWN0b3Jpbmcgb2YgYGt2bWNsb2NrLmNgIGFuZCBhc3NvY2lhdGVkIHN1c3BlbmQvcmVzdW1lIGhhbmRsaW5nIGlzIGFub3RoZXIgY3JpdGljYWwgYXJlYTsgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCBoYXMgb2Z0ZW4gYmVlbiBhIHNvdXJjZSBvZiBzdWJ0bGUgdGltZWtlZXBpbmcgcHJvYmxlbXMsIHNvIHRoaXMgYXR0ZW50aW9uIHRvIGRldGFpbCBpcyB3ZWxjb21lLlxuXG5UaGUgY29yZSBvZiB0aGUgVFNDIGNhbGlicmF0aW9uIGl0c2VsZiwgaW4gYHRzYy5jYCwgaXMgZ2V0dGluZyBhIHNpZ25pZmljYW50IG92ZXJoYXVsLCB3aXRoIGBuYXRpdmVfY2FsaWJyYXRlX3RzY2Agbm93IHVzaW5nIGBjcHVpZF9nZXRfdHNjX2luZm9gIGFuZCB0aGUgdXBkYXRlcyB0byBgZGV0ZXJtaW5lX2NwdV90c2NfZnJlcXVlbmNpZXNgLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBhcHByb2FjaCB0byBpbXByb3ZpbmcgVFNDIGNhbGlicmF0aW9uIGFuZCBtYWtpbmcgaXQgbW9yZSByZWxpYWJsZSBhbmQgY29uc2lzdGVudC4gSXQgbG9va3MgbGlrZSBpdCdzIHRyeWluZyB0byBzdHJlYW1saW5lIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGFuZCBsZWFuIG9uIHRoZSBDUFVJRCBpbmZvcm1hdGlvbiBmb3IgYmV0dGVyIGFjY3VyYWN5LiBUaGUgYHRzY19lYXJseV9pbml0YCBjaGFuZ2VzIGluZGljYXRlIHdlIGFyZSB1c2luZyBoeXBlcnZpc29yLXNwZWNpZmljIFRTQyBpbml0aWFsaXphdGlvbiwgdG9vLCB3aGljaCBzaG91bGQgYWRhcHQgdGhpcyB0byBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLiBUaGUgY2hhbmdlcyBpbiBgdHNjX21zci5jYCB0byB1c2UgYGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHpgIGFyZSBsaWtlbHkgcmVsYXRlZCBhbmQgYWltZWQgYXQgaW1wcm92aW5nIHRpbWVrZWVwaW5nIGFjY3VyYWN5IGF0IHRoZSBsb3dlciBsZXZlbHMuXG5cblRoZSBjaGFuZ2VzIGluIHRoZSBoeXBlcnZpc29yLXNwZWNpZmljIGNvZGUgKEFDUk4sIEh5cGVyLVYsIFZNd2FyZSwgSmFpbGhvdXNlLCBYZW4pIGFsbCBwb2ludCB0byBsZXZlcmFnaW5nIGB4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toemAgYW5kIGB4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toemAgaW5zdGVhZCBvZiB0aGUgb2xkZXIgY2FsaWJyYXRpb24gbWV0aG9kcy4gVGhpcyBzdWdnZXN0cyBhIG1vdmUgdG93YXJkIGEgbW9yZSBtb2R1bGFyIGFuZCBwb3RlbnRpYWxseSBtb3JlIGVmZmljaWVudCBoeXBlcnZpc29yIGludGVncmF0aW9uLlxuXG5SZWdhcmRpbmcgZnV6emluZywgdGhpcyBpcyB0aGUgY3J1Y2lhbCBxdWVzdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHRoaXMgY29kZSBtaWdodCBiZSB1bnJlYWNoYWJsZSBpbiBhIEdDRSBvciBRRU1VLWxpa2UgZW52aXJvbm1lbnQuIEJ1dCwgdGhlbiBJIHJlYWxpemVkIHRoYXQgdGhlIEtWTSBndWVzdCBjb2RlIHJ1bnMgKmluc2lkZSogdGhlIFZNLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgc3l6a2FsbGVyIGZ1enplcy4gU3l6a2FsbGVyIGNhbiwgYW5kIGRvZXMsIGZ1enogdGhpcyBjb2RlLlxuXG5BbHRob3VnaCB0aGlzIGlzIG1vc3RseSBlYXJseSBib290IGNvZGUgKFRTQyBjYWxpYnJhdGlvbiwgaHlwZXJ2aXNvciBpbml0aWFsaXphdGlvbiksIHdoaWNoIGlzIG5vdCB0aGUgdHlwaWNhbCBmb2N1cyBvZiBzeXprYWxsZXIsIHRoZSBjaGFuZ2VzIHRvIHN1c3BlbmQvcmVzdW1lIGFuZCBDUFUgaG90cGx1ZyBwYXRocyBhcmUgaW50ZXJlc3RpbmcuIFRoZXNlIGNvdWxkIGJlIGZ1enplZC4gU3BlY2lmaWNhbGx5LCBmdW5jdGlvbnMgbGlrZSBga3ZtY2xvY2tfY3B1X2FjdGlvbmAsIGBrdm1fc3VzcGVuZGAsIGBrdm1fcmVzdW1lYCwgYHRpbWVrZWVwaW5nX3Jlc3VtZWAsIGBrdm1fY3B1X29ubGluZWAsIGFuZCBga3ZtX2NwdV9kb3duX3ByZXBhcmVgIGFyZSB2ZXJ5IGludGVyZXN0aW5nLlxuXG5UbyBiZSByZWFjaGFibGUsIHdlIG5lZWQgYENPTkZJR19LVk1fR1VFU1RgLCBgQ09ORklHX1BBUkFWSVJUYCwgYENPTkZJR19TVVNQRU5EYCAob3IgYENPTkZJR19ISUJFUk5BVElPTmApLCBhbmQgYENPTkZJR19IT1RQTFVHX0NQVWAuIEkgc2VlIHRoYXQgYHRpbWVrZWVwaW5nX3Jlc3VtZWAgaXMgY2FsbGVkIGR1cmluZyBzeXN0ZW0gcmVzdW1lLCBhbmQgYGt2bWNsb2NrX2NwdV9hY3Rpb25gIGlzIGNhbGxlZCBkdXJpbmcgQ1BVIGhvdHBsdWcgYW5kIHN1c3BlbmQvcmVzdW1lLiBUaGlzIGxvb2tzIHZlcnkgcHJvbWlzaW5nLiBUaGlzIG5lZWRzIG1vcmUgYXR0ZW50aW9uLlxuXG4iLCJJbnB1dFRva2VucyI6MjUwNzQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTY1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6MTE6MjMuMzI1ODUyODU4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODU0NTI3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtY2xvY2tfY3B1X2FjdGlvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oPTEyOT12b2lkIGt2bWNsb2NrX2luaXQoYm9vbCBwcmVmZXJfdHNjKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oOjEzMDp2b2lkIGt2bWNsb2NrX2NwdV9hY3Rpb24oZW51bSBrdm1fZ3Vlc3RfY3B1X2FjdGlvbiBhY3Rpb24pO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgtMTMxLWJvb2wga3ZtX3BhcmFfYXZhaWxhYmxlKHZvaWQpO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2t2bS5jPTQ2Mz1zdGF0aWMgdm9pZCBrdm1fZ3Vlc3RfY3B1X29mZmxpbmUoZW51bSBrdm1fZ3Vlc3RfY3B1X2FjdGlvbiBhY3Rpb24pXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmMtNDczLVxcbmFyY2gveDg2L2tlcm5lbC9rdm0uYzo0NzQ6XFx0a3ZtY2xvY2tfY3B1X2FjdGlvbihhY3Rpb24pO1xcbmFyY2gveDg2L2tlcm5lbC9rdm0uYy00NzUtfVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2t2bS5jPTQ3Nz1zdGF0aWMgdm9pZCBfX2t2bV9jcHVfb25saW5lKHVuc2lnbmVkIGludCBjcHUsIGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2t2bS5jLTQ4MS1cXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuYXJjaC94ODYva2VybmVsL2t2bS5jOjQ4MjpcXHRrdm1jbG9ja19jcHVfYWN0aW9uKGFjdGlvbik7XFxuYXJjaC94ODYva2VybmVsL2t2bS5jLTQ4My1cXHRrdm1fZ3Vlc3RfY3B1X2luaXQoKTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jPTE2OT1zdGF0aWMgdm9pZCBrdm1jbG9ja19yZXN1bWUoc3RydWN0IGNsb2Nrc291cmNlICpjcylcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTE3NC1cXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzoxNzU6dm9pZCBrdm1jbG9ja19jcHVfYWN0aW9uKGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTE3Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjExOjI1LjQxMTMwOTk4NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzkzOTg4ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2ggZm9yIFZ1bG5lcmFiaWxpdGllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBleHBlcnQgZXllIGdvZXMgdG8gdGhlIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZDogYGt2bV9jcHVfb25saW5lYCwgYGt2bV9jcHVfZG93bl9wcmVwYXJlYCwgYGt2bV9zdXNwZW5kYCwgYGt2bV9yZXN1bWVgLCBga3ZtX3B2X2d1ZXN0X2NwdV9yZWJvb3RgLCBhbmQgYGt2bV9jcmFzaF9zaHV0ZG93bmAuIFRoZXNlIGFyZSBhbGwgKnZlcnkqIGludGVyZXN0aW5nLiBUaGV5J3JlIGFsbCBob29rcyBpbnRvIGNyaXRpY2FsIGFyZWFzIOKAkyBDUFUgaG90cGx1Zywgc3lzdGVtIGNvcmUgb3BlcmF0aW9ucywgYW5kIHRoZSByZWJvb3Qgbm90aWZpY2F0aW9uIHByb2Nlc3MuIFRoYXQncyBhIHN0cm9uZyBpbmRpY2F0b3Igb2YgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB2aXJ0dWFsaXphdGlvbiBhbmQgS1ZNLlxuXG5NeSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHdoZXRoZXIgc3l6a2FsbGVyIGNhbiByZWFjaCB0aGVzZSBhcmVhcy4gQW5kLCBvZiBjb3Vyc2UsIHRoZSBhbnN3ZXIgaXMgeWVzLiBJdCdzIHBlcmZlY3RseSBjYXBhYmxlIG9mIHRyaWdnZXJpbmcgQ1BVIGhvdHBsdWcgdGhyb3VnaCBgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC9vbmxpbmVgIGFuZCBzdXNwZW5kL3Jlc3VtZSBjeWNsZXMgdXNpbmcgYC9zeXMvcG93ZXIvc3RhdGVgLiBUaGlzIHJhaXNlcyBhIHJlZCBmbGFnLiBUaGUgZmFjdCB0aGF0IGFuIGF1dG9tYXRlZCBmdXp6ZXIgY2FuIGhpdCB0aGVzZSBjYWxsYmFjayBmdW5jdGlvbnMgbWVhbnMgd2UgbmVlZCB0byBsb29rIHZlcnkgY2xvc2VseSBhdCB0aGUgY29kZSBwYXRocyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIHRoZXNlIHRyYW5zaXRpb25zLlxuXG5Ob3cgSSdtIGdvaW5nIHRvIHNoaWZ0IG15IGZvY3VzIHRvIGB0aW1la2VlcGluZ19yZXN1bWVgIGFuZCB0cnkgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgxNjAsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6MTE6MjkuMjkwNzEwNzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwODk2Njg3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aW1la2VlcGluZ19yZXN1bWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYveGVuL3N1c3BlbmQuYz00MD1zdGF0aWMgdm9pZCB4ZW5fdmNwdV9ub3RpZnlfcmVzdG9yZSh2b2lkICpkYXRhKVxcbi0tXFxuYXJjaC94ODYveGVuL3N1c3BlbmQuYy00NC1cXG5hcmNoL3g4Ni94ZW4vc3VzcGVuZC5jOjQ1OlxcdC8qIEJvb3QgcHJvY2Vzc29yIG5vdGlmaWVkIHZpYSBnZW5lcmljIHRpbWVrZWVwaW5nX3Jlc3VtZSgpICovXFxuYXJjaC94ODYveGVuL3N1c3BlbmQuYy00Ni1cXHRpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpID09IDApXFxuLS1cXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jPTI5NDk9c3RhdGljIHZvaWQgaHZfc3luaWNfcmVzdW1lKHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jLTI5NTUtXFx0ICogb24gQ1BVMCBpcyBub3QgdW5ib3VuZCBpbiBodl9zeW5pY19zdXNwZW5kKCksIGFuZCB0aGUgdGltZXIgaXNcXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jOjI5NTY6XFx0ICogYXV0b21hdGljYWxseSByZS1lbmFibGVkIGluIHRpbWVrZWVwaW5nX3Jlc3VtZSgpLlxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmMtMjk1Ny1cXHQgKi9cXG4tLVxcbmZzL3RpbWVyZmQuYz0xMjU9c3RhdGljIERFQ0xBUkVfV09SSyh0aW1lcmZkX3dvcmssIHRpbWVyZmRfcmVzdW1lX3dvcmspO1xcbi0tXFxuZnMvdGltZXJmZC5jLTEyNy0vKlxcbmZzL3RpbWVyZmQuYzoxMjg6ICogSW52b2tlZCBmcm9tIHRpbWVrZWVwaW5nX3Jlc3VtZSgpLiBEZWZlciB0aGUgYWN0dWFsIHVwZGF0ZSB0byB3b3JrIHNvXFxuZnMvdGltZXJmZC5jLTEyOS0gKiB0aW1lcmZkX2Nsb2NrX3dhc19zZXQoKSBydW5zIGluIHRhc2sgY29udGV4dC5cXG4tLVxcbmtlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmM9ODk4PXZvaWQgY2xvY2tzb3VyY2Vfc3RhcnRfc3VzcGVuZF90aW1pbmcoc3RydWN0IGNsb2Nrc291cmNlICpjcywgdTY0IHN0YXJ0X2N5Y2xlcylcXG4tLVxcbmtlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMtOTMwLSAqXFxua2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYzo5MzE6ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZWFybHkgaW4gdGhlIHJlc3VtZSBwcm9jZXNzIGZyb20gdGltZWtlZXBpbmdfcmVzdW1lKCksXFxua2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYy05MzItICogdGhhdCBtZWFucyB0aGVyZSBpcyBvbmx5IG9uZSBjcHUsIG5vIHByb2Nlc3NlcyBhcmUgcnVubmluZyBhbmQgdGhlIGludGVycnVwdHNcXG4tLVxcbmtlcm5lbC90aW1lL2hydGltZXIuYz0xMDE4PXZvaWQgY2xvY2tfd2FzX3NldF9kZWxheWVkKHZvaWQpXFxuLS1cXG5rZXJuZWwvdGltZS9ocnRpbWVyLmMtMTAyMy0vKlxcbmtlcm5lbC90aW1lL2hydGltZXIuYzoxMDI0OiAqIENhbGxlZCBkdXJpbmcgcmVzdW1lIGVpdGhlciBkaXJlY3RseSBmcm9tIHZpYSB0aW1la2VlcGluZ19yZXN1bWUoKVxcbmtlcm5lbC90aW1lL2hydGltZXIuYy0xMDI1LSAqIG9yIGluIHRoZSBjYXNlIG9mIHMyaWRsZSBmcm9tIHRpY2tfdW5mcmVlemUoKSB0byBlbnN1cmUgdGhhdCB0aGVcXG4tLVxcbmtlcm5lbC90aW1lL3RpY2stY29tbW9uLmM9NDg1PXZvaWQgdGlja19zdXNwZW5kKHZvaWQpXFxuLS1cXG5rZXJuZWwvdGltZS90aWNrLWNvbW1vbi5jLTQ5My0gKlxcbmtlcm5lbC90aW1lL3RpY2stY29tbW9uLmM6NDk0OiAqIENhbGxlZCBmcm9tIHN5c2NvcmVfcmVzdW1lKCkgdmlhIHRpbWVrZWVwaW5nX3Jlc3VtZSB3aXRoIG9ubHkgb25lXFxua2VybmVsL3RpbWUvdGljay1jb21tb24uYy00OTUtICogQ1BVIG9ubGluZSBhbmQgaW50ZXJydXB0cyBkaXNhYmxlZC5cXG4tLVxcbmtlcm5lbC90aW1lL3RpY2stY29tbW9uLmM9NTU5PXZvaWQgdGlja191bmZyZWV6ZSh2b2lkKVxcbi0tXFxua2VybmVsL3RpbWUvdGljay1jb21tb24uYy01NjktXFx0XFx0bG9ja19tYXBfYWNxdWlyZV90cnkoXFx1MDAyNnRpY2tfZnJlZXplX21hcCk7XFxua2VybmVsL3RpbWUvdGljay1jb21tb24uYzo1NzA6XFx0XFx0dGltZWtlZXBpbmdfcmVzdW1lKCk7XFxua2VybmVsL3RpbWUvdGljay1jb21tb24uYy01NzEtXFx0XFx0c2NoZWRfY2xvY2tfcmVzdW1lKCk7XFxuLS1cXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jPTIwMDg9c3RhdGljIF9faW5pdCB2b2lkIHRrZF9iYXNpY19zZXR1cChzdHJ1Y3QgdGtfZGF0YSAqdGtkLCBlbnVtIHRpbWVrZWVwZXJfaWRzIHRrX2lkLCBib29sIHZhbGlkKVxcbi0tXFxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYy0yMDE2LS8qXFxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYzoyMDE3OiAqIEZsYWcgcmVmbGVjdGluZyB3aGV0aGVyIHRpbWVrZWVwaW5nX3Jlc3VtZSgpIGhhcyBpbmplY3RlZCBzbGVlcHRpbWUuXFxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYy0yMDE4LSAqXFxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYy0yMDE5LSAqIFRoZSBmbGFnIHN0YXJ0cyBvZiBmYWxzZSBhbmQgaXMgb25seSBzZXQgd2hlbiBhIHN1c3BlbmQgcmVhY2hlc1xcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmM6MjAyMDogKiB0aW1la2VlcGluZ19zdXNwZW5kKCksIHRpbWVrZWVwaW5nX3Jlc3VtZSgpIHNldHMgaXQgdG8gZmFsc2Ugd2hlbiB0aGVcXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jLTIwMjEtICogdGltZWtlZXBlciBjbG9ja3NvdXJjZSBpcyBub3Qgc3RvcHBpbmcgYWNyb3NzIHN1c3BlbmQgYW5kIGhhcyBiZWVuXFxuLS1cXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jLTIwMjUtICpcXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jOjIwMjY6ICogSWYgYSBzdXNwZW5kIGZhaWxzIGJlZm9yZSByZWFjaGluZyB0aW1la2VlcGluZ19yZXN1bWUoKSB0aGVuIHRoZSBmbGFnXFxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYy0yMDI3LSAqIHN0YXlzIGZhbHNlIGFuZCBwcmV2ZW50cyBlcnJvbmVvdXMgc2xlZXB0aW1lIGluamVjdGlvbi5cXG4tLVxcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmM9MjEyNT1ib29sIHRpbWVrZWVwaW5nX3J0Y19za2lwcmVzdW1lKHZvaWQpXFxuLS1cXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jLTIxMzEtICogMSkgY2FuIGJlIGRldGVybWluZWQgd2hldGhlciB0byB1c2Ugb3Igbm90IG9ubHkgd2hlbiBkb2luZ1xcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmM6MjEzMjogKiB0aW1la2VlcGluZ19yZXN1bWUoKSB3aGljaCBpcyBpbnZva2VkIGFmdGVyIHJ0Y19zdXNwZW5kKCksXFxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYy0yMTMzLSAqIHNvIHdlIGNhbid0IHNraXAgcnRjX3N1c3BlbmQoKSBzdXJlbHkgaWYgc3lzdGVtIGhhcyAxKS5cXG4tLVxcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmM9MjE1NT12b2lkIHRpbWVrZWVwaW5nX2luamVjdF9zbGVlcHRpbWU2NChjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqZGVsdGEpXFxuLS1cXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jLTIxNzEtLyoqXFxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYzoyMTcyOiAqIHRpbWVrZWVwaW5nX3Jlc3VtZSAtIFJlc3VtZXMgdGhlIGdlbmVyaWMgdGltZWtlZXBpbmcgc3Vic3lzdGVtLlxcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMtMjE3My0gKi9cXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jOjIxNzQ6dm9pZCB0aW1la2VlcGluZ19yZXN1bWUodm9pZClcXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jLTIxNzUte1xcbi0tXFxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYz0yMjM5PXN0YXRpYyB2b2lkIHRpbWVrZWVwaW5nX3N5c2NvcmVfcmVzdW1lKHZvaWQgKmRhdGEpXFxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYy0yMjQwLXtcXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jOjIyNDE6XFx0dGltZWtlZXBpbmdfcmVzdW1lKCk7XFxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYy0yMjQyLX1cXG4tLVxcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmg9MTc9ZXh0ZXJuIGludCB0aW1la2VlcGluZ19zdXNwZW5kKHZvaWQpO1xcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmg6MTg6ZXh0ZXJuIHZvaWQgdGltZWtlZXBpbmdfcmVzdW1lKHZvaWQpO1xcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmgtMTktI2lmZGVmIENPTkZJR19HRU5FUklDX1NDSEVEX0NMT0NLXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjExOjMxLjM5OTY4MjU5M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NTg1Nzg0NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEtWTS9TdXNwZW5kIEludGVyYWN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBgdGltZWtlZXBpbmdfcmVzdW1lYCBpcyB0cmlnZ2VyZWQuIEkgc2VlIGl04oCZcyBjYWxsZWQgYnkgYHRpbWVrZWVwaW5nX3N5c2NvcmVfcmVzdW1lYCwgd2hpY2ggaXMgYSBzeXNjb3JlIG9wZXJhdGlvbiwgb3IgZnJvbSBgdGlja191bmZyZWV6ZWAuIFRoYXQgdGVsbHMgbWUsIHdpdGhvdXQgYSBkb3VidCwgdGhhdCB0aGlzIGNvZGUgcGF0aCBpcyBhY3RpdmUgZHVyaW5nIHN1c3BlbmQgYW5kIHJlc3VtZSBvcGVyYXRpb25zLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIGBrdm1jbG9ja19jcHVfYWN0aW9uYC4gSSBzZWUgaXRzIGJlaW5nIGNhbGxlZCBieSBga3ZtX2d1ZXN0X2NwdV9vZmZsaW5lYCBhbmQgYF9fa3ZtX2NwdV9vbmxpbmVgLiBBIGRlZXBlciBkaXZlIHNob3dzIHRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hlZCB0aHJvdWdoIHNldmVyYWwgcG9pbnRzOiBga3ZtX2NwdV9kb3duX3ByZXBhcmVgLCBga3ZtX3N1c3BlbmRgLCBga3ZtX3Jlc3VtZWAsIGBrdm1fcHZfZ3Vlc3RfY3B1X3JlYm9vdGAsIGBrdm1fY3Jhc2hfc2h1dGRvd25gLCBhbmQgYGt2bV9jcHVfb25saW5lYC4gQW5kIHRoZXNlLCBvZiBjb3Vyc2UsIGFyZSBhbGwgdmFsaWQgY2FsbCBwb2ludHMgd2l0aGluIGEgS1ZNIGd1ZXN0IGVudmlyb25tZW50LlxuXG5BbHJpZ2h0LCBzbyB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBuZWNlc3NhcnkgdG8gZXhwb3NlIHRoaXMgaW50ZXJhY3Rpb24/IEknbSB0aGlua2luZzogYENPTkZJR19LVk1fR1VFU1RgLCBgQ09ORklHX1NVU1BFTkRgLCBgQ09ORklHX0hJQkVSTkFUSU9OYCwgYENPTkZJR19IT1RQTFVHX0NQVWAsIGFuZCBgQ09ORklHX1BBUkFWSVJUYC4gSSBzaG91bGQgcHJvYmFibHkgd3JpdGUgdGhvc2UgZG93biB0byBiZSBzdXJlLlxuXG5XYWl0LCBzaG91bGQgYENPTkZJR19LVk1fR1VFU1RgIGJlIGV4cGxpY2l0bHkgZW5hYmxlZCwgb3IgaXMgaXQgYSBkZWZhdWx0PyBJIGtub3cgaXQncyBvZnRlbiBlbmFibGVkIGluIHN5emthbGxlciBjb25maWdzLCBidXQgbGV0J3MgYmUgdGhvcm91Z2guIEkgc2hvdWxkIHNwZWNpZnkgaXQgdG8gYmUgZXhwbGljaXQuIEl0J3MgYSBib29sZWFuLCBidXQgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IGJ5IGdvaW5nIHRvIGBhcmNoL3g4Ni9LY29uZmlnYC4gSSBkb24ndCB3YW50IHRvIG1ha2UgYXNzdW1wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMDM3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjExOjM3LjA1ODI2MzczNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTM3MjM3OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fR1VFU1RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnPTIyPXNvdXJjZSBcXFwiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9taWNyb3dhdHQvS2NvbmZpZ1xcXCJcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWctMjMtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnOjI0OmNvbmZpZyBLVk1fR1VFU1RcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWctMjUtXFx0Ym9vbCBcXFwiS1ZNIEd1ZXN0IHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTgyNj1zb3VyY2UgXFxcImFyY2gveDg2L3hlbi9LY29uZmlnXFxcIlxcbmFyY2gveDg2L0tjb25maWctODI3LVxcbmFyY2gveDg2L0tjb25maWc6ODI4OmNvbmZpZyBLVk1fR1VFU1RcXG5hcmNoL3g4Ni9LY29uZmlnLTgyOS1cXHRib29sIFxcXCJLVk0gR3Vlc3Qgc3VwcG9ydCAoaW5jbHVkaW5nIGt2bWNsb2NrKVxcXCJcXG4tLVxcbnZpcnQva3ZtL0tjb25maWc9MTAzPWNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbi0tXFxudmlydC9rdm0vS2NvbmZpZy0xMDUtXFxudmlydC9rdm0vS2NvbmZpZzoxMDY6Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxcbnZpcnQva3ZtL0tjb25maWctMTA3LSAgICAgICBzZWxlY3QgWEFSUkFZX01VTFRJXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjExOjM4Ljk5NTUwNTcxNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NDcyOTY3MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBTeXprYWxsZXIgVGVzdGluZyoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHRlc3RzIFN5emthbGxlciBydW5zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHllcywgYENPTkZJR19LVk1fR1VFU1RgIHNlZW1zIGxpa2UgdGhlIHByaW1hcnkgY29uZmlnIGhlcmUuIFRoYXQncyBhIG5vLWJyYWluZXIgZ2l2ZW4gU3l6a2FsbGVyJ3MgdHlwaWNhbCBRRU1VL0tWTSBlbnZpcm9ubWVudC5cblxuQnV0LCBJIGFsc28gc2VlIGBDT05GSUdfSU5URUxfVERYX0dVRVNUYCBhbmQgYENPTkZJR19BTURfTUVNX0VOQ1JZUFRgIChzcGVjaWZpY2FsbHkgZm9yIFNFVi1TTlApIG1lbnRpb25lZC4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHRvdWNoaW5nIGB0ZHhfdHNjX2luaXRgIGFuZCBgc25wX3NlY3VyZV90c2NfaW5pdGAuIEhtbSwgYXJlIHRob3NlIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSBzdGFuZGFyZCBTeXprYWxsZXIgY29udGV4dD8gU3l6a2FsbGVyIHVzdWFsbHkgaXNuJ3Qgc2V0IHVwIHdpdGhpbiBURFggb3IgU0VWLVNOUCBlbmNsYXZlcywgc28gSSdtIG5vdCBpbW1lZGlhdGVseSBzZWVpbmcgYSBzdHJvbmcgY2FzZSBmb3IgdGhlbS4gSXQgbWlnaHQgYmUgYSBnb29kLXRvLWhhdmUsIGJ1dCB0aG9zZSBjb25maWdzIHdvdWxkIG5lZWQgc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGh5cGVydmlzb3Igc3VwcG9ydCwgd2hpY2ggSSBkb3VidCB0aGUgc3RhbmRhcmQgU3l6a2FsbGVyIFZNcyB3b3VsZCBoYXZlLiBMZXQncyBmbGFnIHRoYXQgYXMgYSBwb3RlbnRpYWwgZWRnZSBjYXNlLlxuXG5Ib3dldmVyLCB0aGUgS1ZNIGd1ZXN0IGNoYW5nZXPigJRsaWtlIHRoZSBvbmVzIHJlbGF0aW5nIHRvIGBrdm1jbG9ja19jcHVfYWN0aW9uYCwgYGt2bWNsb2NrX2luaXRgLCBhbmQgYGt2bV9nZXRfdHNjX2toemDigJR0aG9zZSBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHJlbGV2YW50LiBUaGUgc2FtZSBnb2VzIGZvciBIeXBlci1WIGd1ZXN0IGFkanVzdG1lbnRzIChgaHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGBodl9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYCkgYW5kIHRob3NlIGZvciBWTXdhcmUuIFN5emthbGxlcidzIHJlbGlhbmNlIG9uIFFFTVUvS1ZNIG1ha2VzIGBDT05GSUdfS1ZNX0dVRVNUYCB0aGUgbW9zdCBjcml0aWNhbCBjb25maWd1cmF0aW9uLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBgQ09ORklHX1BBUkFWSVJUYCBtYWtlcyBzZW5zZSBoZXJlIGFzIHdlbGwsIHNpbmNlIHRoYXQgaGFzIHNvbWUgb3ZlcmxhcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5NzMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6MTE6NDQuNDQyODA1MTU5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ4MjI5NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQVJBVklSVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9LY29uZmlnPTEzMDk9Y29uZmlnIFVBQ0NFU1NfV0lUSF9NRU1DUFlcXG4tLVxcbmFyY2gvYXJtL0tjb25maWctMTMyNC1cXG5hcmNoL2FybS9LY29uZmlnOjEzMjU6Y29uZmlnIFBBUkFWSVJUXFxuYXJjaC9hcm0vS2NvbmZpZy0xMzI2LVxcdGJvb2wgXFxcIkVuYWJsZSBwYXJhdmlydHVhbGl6YXRpb24gY29kZVxcXCJcXG4tLVxcbmFyY2gvYXJtL0tjb25maWctMTMzMi1cXG5hcmNoL2FybS9LY29uZmlnOjEzMzM6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xcbmFyY2gvYXJtL0tjb25maWctMTMzNC1cXHRib29sIFxcXCJQYXJhdmlydHVhbCBzdGVhbCB0aW1lIGFjY291bnRpbmdcXFwiXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWc9MTYxNT1jb25maWcgQ0NfSEFWRV9TSEFET1dfQ0FMTF9TVEFDS1xcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTE2MTctXFxuYXJjaC9hcm02NC9LY29uZmlnOjE2MTg6Y29uZmlnIFBBUkFWSVJUXFxuYXJjaC9hcm02NC9LY29uZmlnLTE2MTktXFx0Ym9vbCBcXFwiRW5hYmxlIHBhcmF2aXJ0dWFsaXphdGlvbiBjb2RlXFxcIlxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTE2MjUtXFxuYXJjaC9hcm02NC9LY29uZmlnOjE2MjY6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNjI3LVxcdGJvb2wgXFxcIlBhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1xcXCJcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9NzQzPXNvdXJjZSBcXFwia2VybmVsL2xpdmVwYXRjaC9LY29uZmlnXFxcIlxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNzQ0LVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6NzQ1OmNvbmZpZyBQQVJBVklSVFxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNzQ2LVxcdGJvb2wgXFxcIkVuYWJsZSBwYXJhdmlydHVhbGl6YXRpb24gY29kZVxcXCJcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNzU0LVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6NzU1OmNvbmZpZyBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTc1Ni1cXHRib29sIFxcXCJQYXJhdmlydHVhbCBzdGVhbCB0aW1lIGFjY291bnRpbmdcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZz0yPWNvbmZpZyBQUENfUFNFUklFU1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWctMjktXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWc6MzA6Y29uZmlnIFBBUkFWSVJUXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWctMzEtXFx0Ym9vbFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnLTMyLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnOjMzOmNvbmZpZyBQQVJBVklSVF9TUElOTE9DS1NcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZy0zNC1cXHRib29sXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWctMzUtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWc6MzY6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnLTM3LVxcdHNlbGVjdCBQQVJBVklSVFxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnPTExMTQ9Y29uZmlnIENPTVBBVFxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTExMjUtXFxuYXJjaC9yaXNjdi9LY29uZmlnOjExMjY6Y29uZmlnIFBBUkFWSVJUXFxuYXJjaC9yaXNjdi9LY29uZmlnLTExMjctXFx0Ym9vbCBcXFwiRW5hYmxlIHBhcmF2aXJ0dWFsaXphdGlvbiBjb2RlXFxcIlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTExMzQtXFxuYXJjaC9yaXNjdi9LY29uZmlnOjExMzU6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMTM2LVxcdGJvb2wgXFxcIlBhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1xcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NzkzPWlmIEhZUEVSVklTT1JfR1VFU1RcXG5hcmNoL3g4Ni9LY29uZmlnLTc5NC1cXG5hcmNoL3g4Ni9LY29uZmlnOjc5NTpjb25maWcgUEFSQVZJUlRcXG5hcmNoL3g4Ni9LY29uZmlnLTc5Ni1cXHRib29sIFxcXCJFbmFibGUgcGFyYXZpcnR1YWxpemF0aW9uIGNvZGVcXFwiXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTgwNC1cXG5hcmNoL3g4Ni9LY29uZmlnOjgwNTpjb25maWcgUEFSQVZJUlRfWFhMXFxuYXJjaC94ODYvS2NvbmZpZy04MDYtXFx0Ym9vbFxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy04MDktXFxuYXJjaC94ODYvS2NvbmZpZzo4MTA6Y29uZmlnIFBBUkFWSVJUX1NQSU5MT0NLU1xcbmFyY2gveDg2L0tjb25maWctODExLVxcdGJvb2wgXFxcIlBhcmF2aXJ0dWFsaXphdGlvbiBsYXllciBmb3Igc3BpbmxvY2tzXFxcIlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz04NDg9Y29uZmlnIFBWSFxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy04NTMtXFxuYXJjaC94ODYvS2NvbmZpZzo4NTQ6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xcbmFyY2gveDg2L0tjb25maWctODU1LVxcdGJvb2wgXFxcIlBhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1xcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWctODY0LVxcbmFyY2gveDg2L0tjb25maWc6ODY1OmNvbmZpZyBQQVJBVklSVF9DTE9DS1xcbmFyY2gveDg2L0tjb25maWctODY2LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6MTE6NDYuMzkxMDQxNDE0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4ODY0ODQ2NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRTQyBDYWxpYnJhdGlvbiBDaGFuZ2VzIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIGBDT05GSUdfUEFSQVZJUlRgIGxvb2tzIHByb21pc2luZyBhcyBhIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiBgYXJjaC94ODYva2VybmVsL3RzYy5jYC4gU3BlY2lmaWNhbGx5LCBgbmF0aXZlX2NhbGlicmF0ZV90c2NgIGlzIG5vdyBsZXZlcmFnaW5nIGBjcHVpZF9nZXRfdHNjX2luZm9gLCB3aGljaCBpcyBhIGJyYW5kLW5ldyBmdW5jdGlvbi4gSW50ZXJlc3RpbmcuIEFkZGl0aW9uYWxseSwgSSBzZWUgdGhhdCBgdHNjX2Vhcmx5X2luaXRgIGhhcyBiZWVuIG1vZGlmaWVkIGFuZCBgX19wYXJhdmlydF9zZXRfc2NoZWRfY2xvY2tgIGhhcyBiZWVuIGludHJvZHVjZWQsIGFsb25nc2lkZSBzb21lIGNoYW5nZXMgdG8gYGRldGVybWluZV9jcHVfdHNjX2ZyZXF1ZW5jaWVzYC5cblxuVGhlIGtleSBxdWVzdGlvbiBpcywgY2FuIEkgZnV6eiBgY3B1aWRfZ2V0X3RzY19pbmZvYCB3aXRoIHN5emthbGxlcj8gVGhlIGluaXRpYWwgdGhvdWdodCBpcyBubywgYXMgaXQncyBjYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3QuIEhvd2V2ZXIsIHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYHRpbWVrZWVwaW5nX3Jlc3VtZWAgYW5kIGBrdm1jbG9ja19jcHVfYWN0aW9uYCwgd2hpY2ggYXJlIGNsZWFybHkgcmVhY2hhYmxlIGR1cmluZyBzdXNwZW5kL3Jlc3VtZSBjeWNsZXMgYW5kIENQVSBob3RwbHVnIGV2ZW50cy4gVGhhdCBjaGFuZ2VzIHRoaW5nczsgc3l6a2FsbGVyICpjYW4qIGxpa2VseSB0cmlnZ2VyIHRoZXNlIGxhdGVyIHN0YWdlcy4gVGhhdCdzIGEgZGVmaW5pdGUgcGF0aHdheSB0byBleHBsb2l0LlxuXG5UaGVyZWZvcmUsIEkgbmVlZCB0byBpZGVudGlmeSBrZXkgc3ltYm9scyBmb3IgZm9jdXNlZCBmdXp6aW5nLiBMZXQncyBzdGFydCB3aXRoIGEgc29saWQgbGlzdDogYGt2bWNsb2NrX2NwdV9hY3Rpb25gLCBga3ZtX3N1c3BlbmRgLCBga3ZtX3Jlc3VtZWAsIGFuZCBgdGltZWtlZXBpbmdfcmVzdW1lYC4gV2UgY2FuIGFkZCBga3ZtX2NwdV9vbmxpbmVgIGFuZCBga3ZtX2NwdV9kb3duX3ByZXBhcmVgIHRvIHRoZSBsaXN0LiBJJ20gYSBsaXR0bGUgaGVzaXRhbnQgYWJvdXQgaW5jbHVkaW5nIGBfX3BhcmF2aXJ0X3NldF9zY2hlZF9jbG9ja2AgYmVjYXVzZSBpdCdzIG1hcmtlZCBhcyBgX19pbml0YCwgd2hpY2ggbWlnaHQgbWFrZSBpdCBoYXJkZXIgdG8gdGFyZ2V0LiBOb3csIEkgd2FudCB0byBzZWUgaWYgYHRzY19zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYCBhbmQgYHRzY19yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYCBhcmUgcmVhY2hhYmxlLCBhcyB0aGVzZSBhcmUgcG90ZW50aWFsbHkgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjc0OCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMjoxMTo1Mi4yNzc1MjgyMDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzEwMjkzMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vdHNjLmg9MTEyPWV4dGVybiBpbnQgbm90c2Nfc2V0dXAoY2hhciAqKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90c2MuaDoxMTM6ZXh0ZXJuIHZvaWQgdHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdHNjLmgtMTE0LWV4dGVybiB2b2lkIHRzY19yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL3RzYy5jPTk2MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdHNjX2lzX3NhdmVfcmVzdG9yZV9uZWVkZWQodm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC90c2MuYy05NjgtXFxuYXJjaC94ODYva2VybmVsL3RzYy5jOjk2OTp2b2lkIHRzY19zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXFxuYXJjaC94ODYva2VybmVsL3RzYy5jLTk3MC17XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYz0xNDk9c3RydWN0IHg4Nl9wbGF0Zm9ybV9vcHMgeDg2X3BsYXRmb3JtIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jLTE1NS1cXHQuZ2V0X25taV9yZWFzb25cXHRcXHRcXHQ9IGRlZmF1bHRfZ2V0X25taV9yZWFzb24sXFxuYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmM6MTU2OlxcdC5zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlXFx0XFx0PSB0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSxcXG5hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYy0xNTctXFx0LnJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVcXHQ9IHRzY19yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMjoxMTo1NC44NDg1NjI0NjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ3ODA4NjY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVzZSBvZiBgc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAgYW5kIGByZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYCoqXG5cbk9rYXksIHNvIEkgc2VlIHRoZXNlIGZ1bmN0aW9ucywgYHg4Nl9wbGF0Zm9ybS5zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYCBhbmQgYHJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVgLCBhcmUgZGVmaW5pdGVseSBiZWluZyB1c2VkLiBUaGUgY29udGV4dCB0ZWxscyBtZSB0aGV5IGFyZSBsaW5rZWQgdG8gc3VzcGVuZCBhbmQgcmVzdW1lIG9wZXJhdGlvbnMsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEkgc3VzcGVjdGVkIHRoZXknZCBiZSB0aWVkIHRvIHBvd2VyIG1hbmFnZW1lbnQgaW4gc29tZSB3YXkuXG5cbk5vdywgSSByZWFsbHkgbmVlZCB0byBkcmlsbCBkb3duIGFuZCB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBjYWxsaW5nIGNvbnRleHQuIE15IG5leHQgc3RlcCBpcyB0byBwaW5wb2ludCB0aGUgZXhhY3QgbG9jYXRpb25zIHdoZXJlIGB4ODZfcGxhdGZvcm0uc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAgaXMgaW52b2tlZC4gVGhpcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBpbnNpZ2h0cyBpbnRvIGhvdyB0aGUgc2NoZWR1bGVyIGNsb2NrIHN0YXRlIGlzIGJlaW5nIG1hbmFnZWQgZHVyaW5nIHN5c3RlbSB0cmFuc2l0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGtleSB0byBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHksIGVzcGVjaWFsbHkgb24geDg2IHBsYXRmb3Jtcy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZXhlY3V0aW9uIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzODY5LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6MTE6NTkuMzI2NjUyNDE4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzcxMzkxMTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNhdmVfc2NoZWRfY2xvY2tfc3RhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vdHNjLmg9MTEyPWV4dGVybiBpbnQgbm90c2Nfc2V0dXAoY2hhciAqKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90c2MuaDoxMTM6ZXh0ZXJuIHZvaWQgdHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdHNjLmgtMTE0LWV4dGVybiB2b2lkIHRzY19yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaD0yODk9c3RydWN0IHg4Nl9oeXBlcl9ydW50aW1lIHtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgtMzAzLSAqIEBnZXRfbm1pX3JlYXNvbjpcXHRcXHRnZXQgdGhlIHJlYXNvbiBhbiBOTUkgd2FzIHJlY2VpdmVkXFxuYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaDozMDQ6ICogQHNhdmVfc2NoZWRfY2xvY2tfc3RhdGU6XFx0c2F2ZSBzdGF0ZSBmb3Igc2NoZWRfY2xvY2soKSBvbiBzdXNwZW5kXFxuYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaC0zMDUtICogQHJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGU6XFx0cmVzdG9yZSBzdGF0ZSBmb3Igc2NoZWRfY2xvY2soKSBvbiByZXN1bWVcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0Lmg9MzIwPXN0cnVjdCB4ODZfcGxhdGZvcm1fb3BzIHtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgtMzI2LVxcdHVuc2lnbmVkIGNoYXIgKCpnZXRfbm1pX3JlYXNvbikodm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaDozMjc6XFx0dm9pZCAoKnNhdmVfc2NoZWRfY2xvY2tfc3RhdGUpKHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgtMzI4LVxcdHZvaWQgKCpyZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKSh2b2lkKTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jPTEzMj1zdGF0aWMgbm9pbnN0ciB1NjQga3ZtX3NjaGVkX2Nsb2NrX3JlYWQodm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTEzNi1cXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzoxMzc6c3RhdGljIHZvaWQga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy0xMzgte1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM9MzU0PXN0YXRpYyBfX2luaXQgdm9pZCBrdm1fc2NoZWRfY2xvY2tfaW5pdChib29sIHN0YWJsZSlcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTM1OS1cXHRpZiAoX19wYXJhdmlydF9zZXRfc2NoZWRfY2xvY2soa3ZtX3NjaGVkX2Nsb2NrX3JlYWQsIHN0YWJsZSxcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzozNjA6XFx0XFx0XFx0XFx0ICAgICAgIGt2bV9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlLFxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTM2MS1cXHRcXHRcXHRcXHQgICAgICAga3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUpKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL3RzYy5jPTI4Mz1pbnQgX19pbml0IF9fcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKHU2NCAoKmZ1bmMpKHZvaWQpLCBib29sIHN0YWJsZSxcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC90c2MuYy0yOTgtXFx0c3RhdGljX2NhbGxfdXBkYXRlKHB2X3NjaGVkX2Nsb2NrLCBmdW5jKTtcXG5hcmNoL3g4Ni9rZXJuZWwvdHNjLmM6Mjk5OlxcdHg4Nl9wbGF0Zm9ybS5zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlID0gc2F2ZTtcXG5hcmNoL3g4Ni9rZXJuZWwvdHNjLmMtMzAwLVxcdHg4Nl9wbGF0Zm9ybS5yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlID0gcmVzdG9yZTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC90c2MuYz05NjE9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHRzY19pc19zYXZlX3Jlc3RvcmVfbmVlZGVkKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvdHNjLmMtOTY4LVxcbmFyY2gveDg2L2tlcm5lbC90c2MuYzo5Njk6dm9pZCB0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxcbmFyY2gveDg2L2tlcm5lbC90c2MuYy05NzAte1xcbi0tXFxuYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmM9MTQ5PXN0cnVjdCB4ODZfcGxhdGZvcm1fb3BzIHg4Nl9wbGF0Zm9ybSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYy0xNTUtXFx0LmdldF9ubWlfcmVhc29uXFx0XFx0XFx0PSBkZWZhdWx0X2dldF9ubWlfcmVhc29uLFxcbmFyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jOjE1NjpcXHQuc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZVxcdFxcdD0gdHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUsXFxuYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmMtMTU3LVxcdC5yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlXFx0PSB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSxcXG4tLVxcbmFyY2gveDg2L3Bvd2VyL2NwdS5jPTEzNT12b2lkIHNhdmVfcHJvY2Vzc29yX3N0YXRlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9wb3dlci9jcHUuYy0xMzctXFx0X19zYXZlX3Byb2Nlc3Nvcl9zdGF0ZShcXHUwMDI2c2F2ZWRfY29udGV4dCk7XFxuYXJjaC94ODYvcG93ZXIvY3B1LmM6MTM4OlxcdHg4Nl9wbGF0Zm9ybS5zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKCk7XFxuYXJjaC94ODYvcG93ZXIvY3B1LmMtMTM5LX1cXG4tLVxcbmRyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmM9NTQ2PXN0YXRpYyB1NjQgaHZfcmVmX2NvdW50ZXJfYXRfc3VzcGVuZDtcXG4tLVxcbmRyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmMtNTUzLSAqL1xcbmRyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmM6NTU0OnN0YXRpYyB2b2lkIGh2X3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcXG5kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jLTU1NS17XFxuLS1cXG5kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jPTU3MD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgaHZfc2V0dXBfc2NoZWRfY2xvY2sodm9pZCAqc2NoZWRfY2xvY2spXFxuLS1cXG5kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jLTU3Mi1cXHQvKiBXZSdyZSBvbiB4ODYveDY0ICphbmQqIHVzaW5nIFBWIG9wcyAqL1xcbmRyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmM6NTczOlxcdHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayhzY2hlZF9jbG9jaywgaHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSxcXG5kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jLTU3NC1cXHRcXHRcXHRcXHQgaHZfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjEyOjAxLjY5ODA0OTM3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NDgzNTI4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBLVk0gQ2xvY2sgSXNzdWVzIER1cmluZyBTdXNwZW5kL1Jlc3VtZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gdGhpcyB4ODYgc3VzcGVuZC9yZXN1bWUgcGF0aC4gTXkgdGhvdWdodCBwcm9jZXNzIGlzIGNlbnRlcmVkIG9uIHdoZXJlIHBvdGVudGlhbCBLVk0gY2xvY2sgaXNzdWVzIG1pZ2h0IGFyaXNlLiBJIHNlZSB0aGF0IGB4ODZfcGxhdGZvcm0uc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSgpYCBpcyBjYWxsZWQgZnJvbSBgc2F2ZV9wcm9jZXNzb3Jfc3RhdGUoKWAgd2l0aGluIGBhcmNoL3g4Ni9wb3dlci9jcHUuY2AuIEdpdmVuIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIGBzYXZlX3Byb2Nlc3Nvcl9zdGF0ZWAsIGFuZCB0aGF0IGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlIHg4NiBwb3dlciBtYW5hZ2VtZW50LCB0aGF0IGNhbGwgKmlzKiBkZWZpbml0ZWx5IHBhcnQgb2YgdGhlIHN1c3BlbmQgcHJvY2Vzcy5cblxuTm93LCBJJ20gZ29pbmcgYmFjayBvdmVyIGBrdm1jbG9ja19jcHVfYWN0aW9uYC4gUmlnaHQsIGl0J3MgY2FsbGVkIGJ5IGBrdm1fZ3Vlc3RfY3B1X29mZmxpbmVgIGFuZCBgX19rdm1fY3B1X29ubGluZWAuIExvb2tpbmcgYXQgdGhvc2UgZnVuY3Rpb25zLCB0aGV5IGFyZSBjYWxsZWQgZnJvbSBga3ZtX2NwdV9kb3duX3ByZXBhcmVgLCBga3ZtX3N1c3BlbmRgLCBga3ZtX3Jlc3VtZWAsIGBrdm1fcHZfZ3Vlc3RfY3B1X3JlYm9vdGAsIGBrdm1fY3Jhc2hfc2h1dGRvd25gLCBhbmQgYGt2bV9jcHVfb25saW5lYC4gU28sIHRoZSBwYXRoICppcyogcmVhY2hhYmxlIGR1cmluZyB0aGlzIHByb2Nlc3MsIG1ha2luZyB0aGlzIGFuIGludGVyZXN0aW5nIHBvaW50IHRvIGFuYWx5emUuXG5cbkknbSBhbHNvIGxvb2tpbmcgYXQgYHRpbWVrZWVwaW5nX3Jlc3VtZWAuIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBmcm9tIGB0aW1la2VlcGluZ19zeXNjb3JlX3Jlc3VtZWAgYW5kIGB0aWNrX3VuZnJlZXplYC4gQm90aCBhcmUgcHJldHR5IHN0YW5kYXJkIHBhcnRzIG9mIGEgcmVzdW1lIGN5Y2xlLCBzbyB0aGUgcGF0aCB0aHJvdWdoIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSByZWFjaGFibGUuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGBrdm1jbG9ja19zdXNwZW5kYCBhbmQgYGt2bWNsb2NrX3Jlc3VtZWAgZnVuY3Rpb25zLCB0byBjaGVjayBvbiB0aGUgZGV0YWlscyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU1OTIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6MTI6MDYuNTQ2NDA1MDUzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA3MTQ5Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bWNsb2NrX3N1c3BlbmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM9NTQ9RVhQT1JUX1BFUl9DUFVfU1lNQk9MX0dQTChodl9jbG9ja19wZXJfY3B1KTtcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy01NS1cXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzo1NjpzdGF0aWMgYm9vbCBrdm1jbG9ja19zdXNwZW5kZWQ7XFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtNTctXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYz02Mz1zdGF0aWMgdm9pZCBrdm1fZ2V0X3dhbGxjbG9jayhzdHJ1Y3QgdGltZXNwZWM2NCAqbm93KVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTY0LXtcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzo2NTpcXHRXQVJOX09OX09OQ0Uoa3ZtY2xvY2tfc3VzcGVuZGVkKTtcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy02Ni1cXHR3cm1zcnEobXNyX2t2bV93YWxsX2Nsb2NrLCBzbG93X3ZpcnRfdG9fcGh5cyhcXHUwMDI2d2FsbF9jbG9jaykpO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM9MTM3PXN0YXRpYyB2b2lkIGt2bV9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy0xNDUtXFx0ICovXFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM6MTQ2OlxcdGt2bWNsb2NrX3N1c3BlbmRlZCA9IHRydWU7XFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtMTQ3LVxcdGt2bWNsb2NrX2Rpc2FibGUoKTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jPTE1Nz1zdGF0aWMgdm9pZCBrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTE1OC17XFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM6MTU5OlxcdGt2bWNsb2NrX3N1c3BlbmRlZCA9IGZhbHNlO1xcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTE2MC1cXHRrdm1fcmVnaXN0ZXJfY2xvY2soXFxcInByaW1hcnkgY3B1LCBzY2hlZF9jbG9jayByZXN1bWVcXFwiKTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTE2Mi1cXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzoxNjM6c3RhdGljIHZvaWQga3ZtY2xvY2tfc3VzcGVuZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTE2NC17XFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM6MTY1OlxcdGt2bWNsb2NrX3N1c3BlbmRlZCA9IHRydWU7XFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtMTY2LVxcdGt2bWNsb2NrX2Rpc2FibGUoKTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jPTE2OT1zdGF0aWMgdm9pZCBrdm1jbG9ja19yZXN1bWUoc3RydWN0IGNsb2Nrc291cmNlICpjcylcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy0xNzAte1xcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jOjE3MTpcXHRrdm1jbG9ja19zdXNwZW5kZWQgPSBmYWxzZTtcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy0xNzItXFx0a3ZtX3JlZ2lzdGVyX2Nsb2NrKFxcXCJwcmltYXJ5IGNwdSwgY2xvY2tzb3VyY2UgcmVzdW1lXFxcIik7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYz0yNTU9c3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBrdm1fY2xvY2sgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy0yNjMtXFx0LmVuYWJsZVxcdFxcdD0ga3ZtX2NzX2VuYWJsZSxcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzoyNjQ6XFx0LnN1c3BlbmRcXHQ9IGt2bWNsb2NrX3N1c3BlbmQsXFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtMjY1LVxcdC5yZXN1bWVcXHRcXHQ9IGt2bWNsb2NrX3Jlc3VtZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6MTI6MDkuMzUzNTYwNjA4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTk2NTE1NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEtWTSBDbG9jayBTb3VyY2UgU3VzcGVuZC9SZXN1bWUgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgaXQncyBjbGVhciB0aGF0IGBrdm1jbG9ja19zdXNwZW5kYCBhbmQgYGt2bWNsb2NrX3Jlc3VtZWAgYXJlIGluZGVlZCBjYWxsYmFja3MgZm9yIHRoZSBjbG9ja3NvdXJjZSBzdXNwZW5kL3Jlc3VtZSBwcm9jZXNzLCBtZWFuaW5nIHRoZXkncmUgZXhlY3V0ZWQgZHVyaW5nIHRoZXNlIGNyaXRpY2FsIHN5c3RlbSB0cmFuc2l0aW9ucy4gVGhhdCdzIGdvb2Q7IGl0IG1lYW5zIHdlIGNhbiBwb3RlbnRpYWxseSBmdXp6IHRoZW0uXG5cblRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBhcmU6IGBrdm1jbG9ja19jcHVfYWN0aW9uYCwgYGt2bWNsb2NrX3N1c3BlbmRgLCBga3ZtY2xvY2tfcmVzdW1lYCwgYHRpbWVrZWVwaW5nX3Jlc3VtZWAsIGB0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGBrdm1fc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGFuZCBga3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVgLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVgIGFuZCBga3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVgIGFyZSBzdGF0aWMuIEFoLCB5ZXMsIHRoZXkgYXJlLCBmb3VuZCBpbiBgYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmNgLiBTaW5jZSB0aGV5J3JlIHJlYWNoYWJsZSBhbmQgc3RhdGljLCBTeXprYWxsZXIgY2FuIGRlZmluaXRlbHkgdGFyZ2V0IHRoZW0gZWZmZWN0aXZlbHkuXG5cbk5vdywgbGV0J3Mgc2VlIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gV2UgbmVlZCBgQ09ORklHX0tWTV9HVUVTVGAsIGBDT05GSUdfU1VTUEVORGAsIGBDT05GSUdfSElCRVJOQVRJT05gLCBgQ09ORklHX0hPVFBMVUdfQ1BVYCwgYW5kIGBDT05GSUdfUEFSQVZJUlRgLlxuXG5gQ09ORklHX1NVU1BFTkRgLCBgQ09ORklHX0hJQkVSTkFUSU9OYCwgYW5kIGBDT05GSUdfSE9UUExVR19DUFVgIGFyZSBwcmV0dHkgc3RhbmRhcmQgY29uZmlndXJhdGlvbnMsIHRob3VnaC4gQmFzZWQgb24gdGhlIGluc3RydWN0aW9ucywgSSBzaG91bGQgcHJvYmFibHkgb25seSBsaXN0IGNvbmZpZ3MgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIG1vZGlmaWVkIGNvZGUuXG5cblNvLCBsZXQncyBjaGVjayB3aGF0J3MgYWN0dWFsbHkgYmVlbiBtb2RpZmllZC4gYHRpbWVrZWVwaW5nX3Jlc3VtZWAgaXMgbW9kaWZpZWQ7IGl0IG5vdyBjYWxscyBgcmVhZF9wZXJzaXN0ZW50X2Nsb2NrNjRgIGFmdGVyIGBjbG9ja2V2ZW50c19yZXN1bWVgIGFuZCBgY2xvY2tzb3VyY2VfcmVzdW1lYC4gR29vZC5cblxuYGt2bWNsb2NrX2NwdV9hY3Rpb25gIGhhcyBiZWVuIGFkZGVkLCBhbmQgaXQgaGFuZGxlcyBjcnVjaWFsIHN0YXRlczogYEtWTV9HVUVTVF9CU1BfU1VTUEVORGAsIGBLVk1fR1VFU1RfQlNQX1JFU1VNRWAsIGBLVk1fR1VFU1RfQVBfT05MSU5FYCwgYEtWTV9HVUVTVF9BUF9PRkZMSU5FYCwgYW5kIGBLVk1fR1VFU1RfU0hVVERPV05gLlxuXG5ZZXAsIGBrdm1jbG9ja19zdXNwZW5kYCBhbmQgYGt2bWNsb2NrX3Jlc3VtZWAgYXJlIGRlZmluaXRlbHkgbmV3IGFkZGl0aW9ucyBhcyB3ZWxsLlxuXG5BbmQgZmluYWxseSwgYHRzY19zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYCBhbmQgYHRzY19yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYCBhcmUgbW9kaWZpZWQgdG8gdXNlIGB0c2NfaXNfc2F2ZV9yZXN0b3JlX25lZWRlZCgpYC5cblxuVGhlIGBrdm1fc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAgYW5kIGBrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZWAgZnVuY3Rpb25zIGFyZSBtb2RpZmllZCB0byBzZXQgYGt2bWNsb2NrX3N1c3BlbmRlZGAgYW5kIGNhbGwgYGt2bWNsb2NrX2Rpc2FibGVgIC8gYGt2bV9yZWdpc3Rlcl9jbG9ja2AuXG5cbkdpdmVuIGFsbCBvZiB0aGlzLCB0aGUgcGF0Y2ggZGVmaW5pdGVseSBzZWVtcyBmdW5jdGlvbmFsIGFuZCBpcyBhIHN0cm9uZyBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cblRoZXJlZm9yZSwgdGhlIGZvY3VzIHN5bWJvbHMgYXJlOlxuYGt2bWNsb2NrX2NwdV9hY3Rpb25gXG5ga3ZtY2xvY2tfc3VzcGVuZGBcbmBrdm1jbG9ja19yZXN1bWVgXG5gdGltZWtlZXBpbmdfcmVzdW1lYFxuYHRzY19zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYFxuYHRzY19yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYFxuYGt2bV9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYFxuYGt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYFxuXG5BbmQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIChzcGVjaWZpYyB0byB0aGUgbW9kaWZpZWQgY29kZSkgYXJlOlxuYEtWTV9HVUVTVGBcbmBQQVJBVklSVGBcblxuSSBzaG91bGQgZG91YmxlLWNoZWNrIGFib3V0IGBDT05GSUdfSFlQRVJWYCBvciBgQ09ORklHX0hZUEVSVl9USU1FUmAsIGp1c3QgaW4gY2FzZSwgZ2l2ZW4gdGhlIG1lbnRpb24gb2YgSHlwZXItVi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcwMTgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6MTI6MTkuNTUwMDc3OTEzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTg3NjgyMjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIWVBFUlZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz03NzE9Y29uZmlnIFNDSEVEX09NSVRfRlJBTUVfUE9JTlRFUlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy03ODItXFxuYXJjaC94ODYvS2NvbmZpZzo3ODM6bWVudWNvbmZpZyBIWVBFUlZJU09SX0dVRVNUXFxuYXJjaC94ODYvS2NvbmZpZy03ODQtXFx0Ym9vbCBcXFwiTGludXggZ3Vlc3Qgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaHYvS2NvbmZpZz0zPW1lbnUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIGd1ZXN0IHN1cHBvcnRcXFwiXFxuZHJpdmVycy9odi9LY29uZmlnLTQtXFxuZHJpdmVycy9odi9LY29uZmlnOjU6Y29uZmlnIEhZUEVSVlxcbmRyaXZlcnMvaHYvS2NvbmZpZy02LVxcdGJvb2wgXFxcIk1pY3Jvc29mdCBIeXBlci1WIGNvcmUgaHlwZXJ2aXNvciBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9odi9LY29uZmlnLTE2LVxcbmRyaXZlcnMvaHYvS2NvbmZpZzoxNzpjb25maWcgSFlQRVJWX1ZUTF9NT0RFXFxuZHJpdmVycy9odi9LY29uZmlnLTE4LVxcdGJvb2wgXFxcIkVuYWJsZSBMaW51eCB0byBib290IGluIFZUTCBjb250ZXh0XFxcIlxcbi0tXFxuZHJpdmVycy9odi9LY29uZmlnLTQyLVxcbmRyaXZlcnMvaHYvS2NvbmZpZzo0Mzpjb25maWcgSFlQRVJWX1RJTUVSXFxuZHJpdmVycy9odi9LY29uZmlnLTQ0LVxcdGRlZl9ib29sIEhZUEVSViBcXHUwMDI2XFx1MDAyNiBYODZcXG5kcml2ZXJzL2h2L0tjb25maWctNDUtXFxuZHJpdmVycy9odi9LY29uZmlnOjQ2OmNvbmZpZyBIWVBFUlZfVVRJTFNcXG5kcml2ZXJzL2h2L0tjb25maWctNDctXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIFV0aWxpdGllcyBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2h2L0tjb25maWctNTItXFxuZHJpdmVycy9odi9LY29uZmlnOjUzOmNvbmZpZyBIWVBFUlZfQkFMTE9PTlxcbmRyaXZlcnMvaHYvS2NvbmZpZy01NC1cXHR0cmlzdGF0ZSBcXFwiTWljcm9zb2Z0IEh5cGVyLVYgQmFsbG9vbiBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2h2L0tjb25maWctNTktXFxuZHJpdmVycy9odi9LY29uZmlnOjYwOmNvbmZpZyBIWVBFUlZfVk1CVVNcXG5kcml2ZXJzL2h2L0tjb25maWctNjEtXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIFZNQnVzIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0yNDQ9Y29uZmlnIFNFUklPX09MUENfQVBTUFxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI1My1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MjU0OmNvbmZpZyBIWVBFUlZfS0VZQk9BUkRcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjU1LVxcdHRyaXN0YXRlIFxcXCJNaWNyb3NvZnQgU3ludGhldGljIEtleWJvYXJkIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWc6Mjpjb25maWcgSFlQRVJWX05FVFxcbmRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIHZpcnR1YWwgbmV0d29yayBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZz01Nzc9Y29uZmlnIFhFTl9TQ1NJX0ZST05URU5EXFxuLS1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZy01ODYtXFxuZHJpdmVycy9zY3NpL0tjb25maWc6NTg3OmNvbmZpZyBIWVBFUlZfU1RPUkFHRVxcbmRyaXZlcnMvc2NzaS9LY29uZmlnLTU4OC1cXHR0cmlzdGF0ZSBcXFwiTWljcm9zb2Z0IEh5cGVyLVYgdmlydHVhbCBzdG9yYWdlIGRyaXZlclxcXCJcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnPTM1NDI9Y29uZmlnIE1FTVRFU1RcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTM1NTUtXFxubGliL0tjb25maWcuZGVidWc6MzU1Njpjb25maWcgSFlQRVJWX1RFU1RJTkdcXG5saWIvS2NvbmZpZy5kZWJ1Zy0zNTU3LVxcdGJvb2wgXFxcIk1pY3Jvc29mdCBIeXBlci1WIGRyaXZlciB0ZXN0aW5nXFxcIlxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnPTY2PWNvbmZpZyBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXFxuLS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNzItXFxubmV0L3Ztd192c29jay9LY29uZmlnOjczOmNvbmZpZyBIWVBFUlZfVlNPQ0tFVFNcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNzQtXFx0dHJpc3RhdGUgXFxcIkh5cGVyLVYgdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjEyOjIyLjEzNzc2NTAzMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjkwMjg3MzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkh5cGVyLVYgQ29uZmlndXJhdGlvbiBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBIeXBlci1WIGNoYW5nZXMsIGFuZCBpdCdzIGNsZWFyIHRoYXQgYEhZUEVSVmAgYW5kIGBIWVBFUlZfVElNRVJgIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHRvIGJlIGNvbmNlcm5lZCB3aXRoLiBJJ2xsIGRlZmluaXRlbHkgYWRkIGBIWVBFUlZgIHRvIHRoZSByZWxldmFudCBjb25maWcgZmlsZXMgcmlnaHQgYXdheS5cblxuTm93LCB3aGF0IGFib3V0IFZNd2FyZSBzdXBwb3J0PyBMZXQgbWUgdGhpbmsuLi4gYENPTkZJR19WTVdBUkVfQkFMTE9PTmAgc2VlbXMgZmFtaWxpYXIsIGJ1dCB0aGF0J3MgcHJvYmFibHkgbm90IHRoZSBtYWluIGRyaXZlciB0aGVzZSBkYXlzLiBBaCwgcmlnaHQsIGBDT05GSUdfSFlQRVJWSVNPUl9HVUVTVGAgc2hvdWxkIGNvdmVyIHRoYXQsIGdlbmVyYWxseS4gV2FpdCBhIG1pbnV0ZeKApiB3YXNu4oCZdCBgQ09ORklHX0hZUEVSVklTT1JfR1VFU1RgIHNwZWNpZmljIHRvIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIHdpdGhpbiB0aGUgbWVudWNvbmZpZz8gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgdG8gYmUgY2VydGFpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGEgbW9yZSBzcGVjaWZpYyBjb25maWcgZm9yIFZNd2FyZSBndWVzdC4gQmVzdCB0byBiZSB0aG9yb3VnaCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB2aXJ0dWFsaXphdGlvbiBsYXllcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NTYzLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjEyOjI1LjgyODA1NDg0MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwMDgyMTI1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVk1XQVJFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWlzYy9LY29uZmlnPTM5MT1jb25maWcgRFMxNjgyXFxuLS1cXG5kcml2ZXJzL21pc2MvS2NvbmZpZy00MDAtXFxuZHJpdmVycy9taXNjL0tjb25maWc6NDAxOmNvbmZpZyBWTVdBUkVfQkFMTE9PTlxcbmRyaXZlcnMvbWlzYy9LY29uZmlnLTQwMi1cXHR0cmlzdGF0ZSBcXFwiVk13YXJlIEJhbGxvb24gRHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9taXNjL3Ztd192bWNpL0tjb25maWctNS1cXG5kcml2ZXJzL21pc2Mvdm13X3ZtY2kvS2NvbmZpZzo2OmNvbmZpZyBWTVdBUkVfVk1DSVxcbmRyaXZlcnMvbWlzYy92bXdfdm1jaS9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlZNd2FyZSBWTUNJIERyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvc2NzaS9LY29uZmlnPTU1Mz1jb25maWcgU0NTSV9NWVJTXFxuLS1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZy01NjgtXFxuZHJpdmVycy9zY3NpL0tjb25maWc6NTY5OmNvbmZpZyBWTVdBUkVfUFZTQ1NJXFxuZHJpdmVycy9zY3NpL0tjb25maWctNTcwLVxcdHRyaXN0YXRlIFxcXCJWTXdhcmUgUFZTQ1NJIGRyaXZlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnPTI5PWNvbmZpZyBWU09DS0VUU19MT09QQkFDS1xcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTQwLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzo0MTpjb25maWcgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNDItXFx0dHJpc3RhdGUgXFxcIlZNd2FyZSBWTUNJIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMjoxMjoyOC40Mjg4Nzk4NDhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3OTc4MjYwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipWTXdhcmUgR3Vlc3QgQ29yZSBTdXBwb3J0IOKAkyBBIFF1aWNrIE1lbnRhbCBTY2FuKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhpcyBmcm9tIGEga2VybmVsIHBlcnNwZWN0aXZlLCBJIGRvbid0IHJlY2FsbCBhICpkZWRpY2F0ZWQqIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHNwZWNpZmljYWxseSBsYWJlbGVkIFwiVk13YXJlIGd1ZXN0IGNvcmUuXCIgSXQgc2VlbXMgbGlrZSB0aGUgYXJjaGl0ZWN0dXJlIGxpa2VseSBoYW5kbGVzIHRoaXMgaW4gb25lIG9mIHR3byB3YXlzLiBJdCdzIHByb2JhYmx5IGVpdGhlciBoYW5kbGVkIGJ5IHRoZSBtb3JlIGdlbmVyaWMgYENPTkZJR19IWVBFUlZJU09SX0dVRVNUYCBzZXR0aW5nLCBvciwgbW9yZSBsaWtlbHksIGl0J3MganVzdCBiYWtlZCBkaXJlY3RseSBpbnRvIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIHN1cHBvcnQgZHVlIHRvIHRoZSBwcmV2YWxlbmNlIG9mIFZNd2FyZSBvbiB0aGF0IHBsYXRmb3JtLiBJdCdzIG9mdGVuIHRoYXQgdGhlc2UgdGhpbmdzIGFyZSBhc3N1bWVkIHByZXNlbnQgdW5sZXNzIHNwZWNpZmljYWxseSBleGNsdWRlZC5cblxuTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhYm91dCBBQ1JOPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaG93IHRoYXQgaHlwZXJ2aXNvciBoYW5kbGVzIGd1ZXN0IGNvcmUgc3VwcG9ydCBhbmQgaWYgdGhlcmUncyBhbnkgcG90ZW50aWFsIG92ZXJsYXAgb3IgY29uZmxpY3Qgd2l0aCB0aGUgVk13YXJlIGVudmlyb25tZW50LiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRob3NlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMjEyLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6MTI6MzIuMzA4NjY1NjQxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTMxNzA2MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBQ1JOXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9ODY4PWNvbmZpZyBKQUlMSE9VU0VfR1VFU1RcXG4tLVxcbmFyY2gveDg2L0tjb25maWctODc2LVxcbmFyY2gveDg2L0tjb25maWc6ODc3OmNvbmZpZyBBQ1JOX0dVRVNUXFxuYXJjaC94ODYvS2NvbmZpZy04NzgtXFx0Ym9vbCBcXFwiQUNSTiBHdWVzdCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy92aXJ0L2Fjcm4vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL3ZpcnQvYWNybi9LY29uZmlnOjI6Y29uZmlnIEFDUk5fSFNNXFxuZHJpdmVycy92aXJ0L2Fjcm4vS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJBQ1JOIEh5cGVydmlzb3IgU2VydmljZSBNb2R1bGVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjEyOjM0Ljg0MDM3NjgzMloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjg2ODI1ODM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyB0aGUgVGFyZ2V0IExpc3QgZm9yIEtWTSBDbG9jayBGdXp6aW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlZmluZSB0aGUgZnV6emluZyB0YXJnZXRzIGZvciB0aGlzIEtWTSBjbG9jay1yZWxhdGVkIHBhdGNoIHNlcmllcy4gIEkndmUgYWxyZWFkeSBpZGVudGlmaWVkIHRoYXQgYEFDUk5fR1VFU1RgIGFuZCBgSkFJTEhPVVNFX0dVRVNUYCBhcmUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZSwgc28gSSdsbCBpbmNsdWRlIHRoZW0gYWxvbmcgd2l0aCB0aGUgbW9yZSBvYnZpb3VzIG9uZXM6IGBLVk1fR1VFU1RgLCBgUEFSQVZJUlRgLCBhbmQgYEhZUEVSVmAuXG5cbk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIHJlZmFjdG9yaW5nIHRoYXQgYXJlIGJvdGggKmludGVyZXN0aW5nKiBhbmQgKmZ1enphYmxlKi4gSSBzdGFydGVkIHdpdGggYW4gaW5pdGlhbCBsaXN0IG9mIHN5bWJvbHMgcmVsYXRlZCB0byBjbG9jayBzdGF0ZSBtYW5hZ2VtZW50OiBga3ZtY2xvY2tfY3B1X2FjdGlvbmAsIGBrdm1jbG9ja19zdXNwZW5kYCwgYGt2bWNsb2NrX3Jlc3VtZWAsIGB0aW1la2VlcGluZ19yZXN1bWVgLCBgdHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVgLCBgdHNjX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVgLCBgaHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGFuZCBgaHZfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZWAuIEkgYWxzbyBhZGRlZCBga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVgLCBga3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVgLCBga3ZtX2d1ZXN0X2NwdV9vZmZsaW5lYCBhbmQgYF9fa3ZtX2NwdV9vbmxpbmVgIHRvIHRoZSBsaXN0LiBJIGFsc28gY29uc2lkZXJlZCwgYW5kIGRpc2NhcmRlZCwgZnVuY3Rpb25zIGxpa2UgYGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHpgLCBgYXBpY19zZXRfdGltZXJfcGVyaW9kX2h6YCwgYGNwdWlkX2dldF90c2NfaW5mb2AsIGBkZXRlcm1pbmVfY3B1X3RzY19mcmVxdWVuY2llc2AsIGFuZCBgdHNjX2Vhcmx5X2luaXRgLCBiZWNhdXNlIHRoZXkgYXJlIGNhbGxlZCBlYXJseSBpbiB0aGUgYm9vdCBwcm9jZXNzIGFuZCBhcmUgdGh1cyBub3QgZWFzaWx5IGZ1enphYmxlIHBvc3QtYm9vdC5cblxuQWZ0ZXIgY2hlY2tpbmcgdGhhdCBga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVgIGlzIHRydWx5IHN0YXRpYywgYW5kIGNoZWNraW5nIHRoYXQgdGhlIG90aGVyIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IGdsb2JhbCwgdGhpcyBsaXN0IHNlZW1zIHNvbGlkLiBUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gVFNDIGFuZCBBUElDIGZyZXF1ZW5jeSBjYWxpYnJhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gd2l0aGluIHZpcnR1YWxpemVkIHg4NiBlbnZpcm9ubWVudHMsIGFuZCB0aGUgbW9kaWZpY2F0aW9ucyB0byBzY2hlZF9jbG9jayBzdGF0ZSBoYW5kbGluZyBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgYW5kIENQVSBob3RwbHVnIHdpdGhpbiBLVk0gZ3Vlc3RzIGFwcGVhciB0byBiZSB0aGUgbW9zdCBwcm9taXNpbmcgYXJlYXMgZm9yIGZ1enppbmcuXG5cblRvIHByZXZlbnQgdGhlIGxpc3QgZnJvbSBiZWNvbWluZyBvdmVybHkgbG9uZywgSSB3aWxsIG5vdyBzdHJlYW1saW5lIGl0IGRvd24gdG8gYSBtb3JlIG1hbmFnZWFibGUgc2V0IG9mIGZ1bmN0aW9uczogYGt2bWNsb2NrX2NwdV9hY3Rpb25gLCBgdGltZWtlZXBpbmdfcmVzdW1lYCwgYHRzY19zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYCwgYHRzY19yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYCwgYGt2bV9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYCwgYGt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYCwgYGh2X3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVgLCBhbmQgYGh2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVgLiBFaWdodCBzeW1ib2xzIHNob3VsZCBiZSBhIHJlYXNvbmFibGUgbnVtYmVyIGZvciBmb2N1c2VkIHRlc3RpbmcuIEknbSBub3cgcmVhZHkgdG8gdXNlIGBzZXQtcmVzdWx0c2AgdG8gaW1wbGVtZW50IHRoaXMgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNjM3LCJPdXRwdXRUb2tlbnMiOjI1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6MTI6NDcuNzA4NjM3NDMxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxNjAxMzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fR1VFU1RcIixcbiAgICBcIlBBUkFWSVJUXCIsXG4gICAgXCJIWVBFUlZcIixcbiAgICBcIkFDUk5fR1VFU1RcIixcbiAgICBcIkpBSUxIT1VTRV9HVUVTVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bWNsb2NrX2NwdV9hY3Rpb25cIixcbiAgICBcInRpbWVrZWVwaW5nX3Jlc3VtZVwiLFxuICAgIFwidHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVcIixcbiAgICBcInRzY19yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlXCIsXG4gICAgXCJrdm1fc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZVwiLFxuICAgIFwia3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVcIixcbiAgICBcImh2X3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVcIixcbiAgICBcImh2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIFRTQyBhbmQgQVBJQyBmcmVxdWVuY3kgY2FsaWJyYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIGZvciB4ODYgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChLVk0sIEh5cGVyLVYsIFZNd2FyZSwgQUNSTiwgSmFpbGhvdXNlLCBURFgsIFNFVi1TTlApLiBJdCBtb2RpZmllcyBob3cgc2NoZWRfY2xvY2sgc3RhdGUgaXMgc2F2ZWQgYW5kIHJlc3RvcmVkIGR1cmluZyBzdXNwZW5kL3Jlc3VtZSBhbmQgQ1BVIGhvdHBsdWcsIHBhcnRpY3VsYXJseSBmb3Iga3ZtY2xvY2sgYW5kIEh5cGVyLVYgY2xvY2suIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBpbiBhIEtWTSBndWVzdCAod2hpY2ggc3l6a2FsbGVyIHVzZXMpIGR1cmluZyBzdXNwZW5kL3Jlc3VtZSBhbmQgQ1BVIGhvdHBsdWcgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fR1VFU1RcIixcbiAgICBcIlBBUkFWSVJUXCIsXG4gICAgXCJIWVBFUlZcIixcbiAgICBcIkFDUk5fR1VFU1RcIixcbiAgICBcIkpBSUxIT1VTRV9HVUVTVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bWNsb2NrX2NwdV9hY3Rpb25cIixcbiAgICBcInRpbWVrZWVwaW5nX3Jlc3VtZVwiLFxuICAgIFwidHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVcIixcbiAgICBcInRzY19yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlXCIsXG4gICAgXCJrdm1fc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZVwiLFxuICAgIFwia3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVcIixcbiAgICBcImh2X3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVcIixcbiAgICBcImh2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIFRTQyBhbmQgQVBJQyBmcmVxdWVuY3kgY2FsaWJyYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIGZvciB4ODYgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChLVk0sIEh5cGVyLVYsIFZNd2FyZSwgQUNSTiwgSmFpbGhvdXNlLCBURFgsIFNFVi1TTlApLiBJdCBtb2RpZmllcyBob3cgc2NoZWRfY2xvY2sgc3RhdGUgaXMgc2F2ZWQgYW5kIHJlc3RvcmVkIGR1cmluZyBzdXNwZW5kL3Jlc3VtZSBhbmQgQ1BVIGhvdHBsdWcsIHBhcnRpY3VsYXJseSBmb3Iga3ZtY2xvY2sgYW5kIEh5cGVyLVYgY2xvY2suIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBpbiBhIEtWTSBndWVzdCAod2hpY2ggc3l6a2FsbGVyIHVzZXMpIGR1cmluZyBzdXNwZW5kL3Jlc3VtZSBhbmQgQ1BVIGhvdHBsdWcgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2n9g4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-02 02:00:57 +0000 UTC FinishedAt: 2026-07-02 02:12:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_GUEST", "PARAVIRT", "HYPERV", "ACRN_GUEST", "JAILHOUSE_GUEST" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_GUEST", "PARAVIRT", "HYPERV", "ACRN_GUEST", "JAILHOUSE_GUEST" ], "series_id": "616f926c-ffdc-4dc8-9316-70a26d035eb2" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvmclock_cpu_action", "timekeeping_resume", "tsc_save_sched_clock_state", "tsc_restore_sched_clock_state", "kvm_save_sched_clock_state", "kvm_restore_sched_clock_state", "hv_save_sched_clock_state", "hv_restore_sched_clock_state" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9HVUVTVCYjMzQ7LAogICAgJiMzNDtQQVJBVklSVCYjMzQ7LAogICAgJiMzNDtIWVBFUlYmIzM0OywKICAgICYjMzQ7QUNSTl9HVUVTVCYjMzQ7LAogICAgJiMzNDtKQUlMSE9VU0VfR1VFU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1jbG9ja19jcHVfYWN0aW9uJiMzNDssCiAgICAmIzM0O3RpbWVrZWVwaW5nX3Jlc3VtZSYjMzQ7LAogICAgJiMzNDt0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDt0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtodl9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlJiMzNDssCiAgICAmIzM0O2h2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBUU0MgYW5kIEFQSUMgZnJlcXVlbmN5IGNhbGlicmF0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBmb3IgeDg2IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoS1ZNLCBIeXBlci1WLCBWTXdhcmUsIEFDUk4sIEphaWxob3VzZSwgVERYLCBTRVYtU05QKS4gSXQgbW9kaWZpZXMgaG93IHNjaGVkX2Nsb2NrIHN0YXRlIGlzIHNhdmVkIGFuZCByZXN0b3JlZCBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgYW5kIENQVSBob3RwbHVnLCBwYXJ0aWN1bGFybHkgZm9yIGt2bWNsb2NrIGFuZCBIeXBlci1WIGNsb2NrLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gYSBLVk0gZ3Vlc3QgKHdoaWNoIHN5emthbGxlciB1c2VzKSBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgYW5kIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhOTIxMDI4MTU0Mjg3MTRjYzc0ZjVkZDM2ZTczMWZiM2Q4YThmOGFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAwMjoxMTowNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCBiNTQ5M2E3ZjhmMjI4MS4uYTM4N2JiMmM0N2UyZmIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC03OTQ2LDYgJiM0Mzs3OTQ2LDExIEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXHRcdFx0d2l0aCBDUFVJRC4xNmggc3VwcG9ydCBhbmQgcGFydGlhbCBDUFVJRC4xNWggc3VwcG9ydC5cbiBcdFx0XHRGb3JtYXQ6IFx1MDAzY3Vuc2lnbmVkIGludFx1MDAzZVxuIFxuJiM0MztcdFx0XHROb3RlLCB0c2NfZWFybHlfa2h6IGlzIGlnbm9yZWQgaWYgdGhlIFRTQyBmcmVxdWVuY3kgaXNcbiYjNDM7XHRcdFx0cHJvdmlkZWQgYnkgdHJ1c3RlZCBmaXJtd2FyZSB3aGVuIHJ1bm5pbmcgYXMgYW4gU05QIG9yXG4mIzQzO1x0XHRcdFREWCBndWVzdCwgb3Igd2hlbiB0aGUgaHlwZXJ2aXNvciBwcm92aWRlcyB0aGUgZXhhY3RcbiYjNDM7XHRcdFx0ZnJlcXVlbmN5IHZpYSBhIHBhcmF2aXJ0dWFsIGludGVyZmFjZS5cbiYjNDM7XG4gXHR0c3g9XHRcdFtYODZdIENvbnRyb2wgVHJhbnNhY3Rpb25hbCBTeW5jaHJvbml6YXRpb25cbiBcdFx0XHRFeHRlbnNpb25zIChUU1gpIGZlYXR1cmUgaW4gSW50ZWwgcHJvY2Vzc29ycyB0aGF0XG4gXHRcdFx0c3VwcG9ydCBUU1ggY29udHJvbC5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9jcHVpZC5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9jcHVpZC5yc3RcbmluZGV4IGJkYTNlM2U3MzdkNzFmLi5hNWVlOGZmMDUyY2U1NSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2NwdWlkLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvY3B1aWQucnN0XG5AQCAtMTIyLDMgJiM0MzsxMjIsMTUgQEAgS1ZNX0hJTlRTX1JFQUxUSU1FIDAgICAgICAgICAgICBndWVzdCBjaGVja3MgdGhpcyBmZWF0dXJlIGJpdCB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZW1wdGVkIGZvciBhbiB1bmxpbWl0ZWQgdGltZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dpbmcgb3B0aW1pemF0aW9uc1xuID09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztmdW5jdGlvbjogS1ZNX0NQVUlEX1RJTUlOR19JTkZPICgweDQwMDAwMDEwKVxuJiM0MztcbiYjNDM7cmV0dXJuczo6XG4mIzQzO1xuJiM0MzsgICBlYXggPSAoVmlydHVhbCkgVFNDIGZyZXF1ZW5jeSBpbiBrSHpcbiYjNDM7ICAgZWJ4ID0gKFZpcnR1YWwpIEJ1cyAobG9jYWwgQVBJQyB0aW1lcikgZnJlcXVlbmN5IGluIGtIelxuJiM0MzsgICBlY3ggPSAwIChSZXNlcnZlZClcbiYjNDM7ICAgZWR4ID0gMCAoUmVzZXJ2ZWQpXG4mIzQzO1xuJiM0MztOb3RlLCBLVk0gb25seSBkZWZpbmVzIHRoZSBzZW1hbnRpY3Mgb2YgS1ZNX0NQVUlEX1RJTUlOR19JTkZPOyBLVk0gZG9lcyBOT1RcbiYjNDM7YWR2ZXJ0aXNlIHN1cHBvcnQgdmlhIEtWTV9HRVRfU1VQUE9SVEVEX0NQVUlELlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NvY28vc2V2L2NvcmUuYyBiL2FyY2gveDg2L2NvY28vc2V2L2NvcmUuY1xuaW5kZXggZWNkNzdkMzIxN2YzYzMuLjcyMzEzYjM2YjZmNWQxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvY29jby9zZXYvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmNcbkBAIC05OSw3ICYjNDM7OTksNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNldl9zdGF0dXNfZmVhdF9uYW1lc1tdID0ge1xuICAqL1xuIHN0YXRpYyB1NjQgc25wX3RzY19zY2FsZSBfX3JvX2FmdGVyX2luaXQ7XG4gc3RhdGljIHU2NCBzbnBfdHNjX29mZnNldCBfX3JvX2FmdGVyX2luaXQ7XG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgc25wX3RzY19mcmVxX2toeiBfX3JvX2FmdGVyX2luaXQ7XG4gXG4gREVGSU5FX1BFUl9DUFUoc3RydWN0IHNldl9lc19ydW50aW1lX2RhdGEqLCBydW50aW1lX2RhdGEpO1xuIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzZXZfZXNfc2F2ZV9hcmVhICosIHNldl92bXNhKTtcbkBAIC0yMDE0LDIwICYjNDM7MjAxMywxMiBAQCB2b2lkIF9faW5pdCBzbnBfc2VjdXJlX3RzY19wcmVwYXJlKHZvaWQpXG4gXHRwcl9kZWJ1ZyhcJiMzNDtTZWN1cmVUU0MgZW5hYmxlZFwmIzM0Oyk7XG4gfVxuIFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNlY3VyZXRzY19nZXRfdHNjX2toeih2b2lkKVxuLXtcbi1cdHJldHVybiBzbnBfdHNjX2ZyZXFfa2h6O1xuLX1cbi1cbi12b2lkIF9faW5pdCBzbnBfc2VjdXJlX3RzY19pbml0KHZvaWQpXG4mIzQzO3Vuc2lnbmVkIGludCBfX2luaXQgc25wX3NlY3VyZV90c2NfaW5pdCh2b2lkKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNucF90c2NfZnJlcV9raHosIHRzY19mcmVxX21oejtcbiBcdHN0cnVjdCBzbnBfc2VjcmV0c19wYWdlICpzZWNyZXRzO1xuLVx0dW5zaWduZWQgbG9uZyB0c2NfZnJlcV9taHo7XG4gXHR2b2lkICptZW07XG4gXG4tXHRpZiAoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0dVRVNUX1NOUF9TRUNVUkVfVFNDKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0bWVtID0gZWFybHlfbWVtcmVtYXBfZW5jcnlwdGVkKHNldl9zZWNyZXRzX3BhLCBQQUdFX1NJWkUpO1xuIFx0aWYgKCFtZW0pIHtcbiBcdFx0cHJfZXJyKFwmIzM0O1VuYWJsZSB0byBnZXQgVFNDX0ZBQ1RPUjogZmFpbGVkIHRvIG1hcCB0aGUgU05QIHNlY3JldHMgcGFnZS5cXG5cJiMzNDspO1xuQEAgLTIwMzYsNyAmIzQzOzIwMjcsOCBAQCB2b2lkIF9faW5pdCBzbnBfc2VjdXJlX3RzY19pbml0KHZvaWQpXG4gXG4gXHRzZWNyZXRzID0gKF9fZm9yY2Ugc3RydWN0IHNucF9zZWNyZXRzX3BhZ2UgKiltZW07XG4gXG4tXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKTtcbiYjNDM7XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7XG4mIzQzO1xuIFx0cmRtc3JxKE1TUl9BTUQ2NF9HVUVTVF9UU0NfRlJFUSwgdHNjX2ZyZXFfbWh6KTtcbiBcbiBcdC8qIEV4dHJhY3QgdGhlIEdVRVNUIFRTQyBNSFogZnJvbSBCSVRbMTc6MF0sIHJlc3QgaXMgcmVzZXJ2ZWQgc3BhY2UgKi9cbkBAIC0yMDQ0LDggJiM0MzsyMDM2LDcgQEAgdm9pZCBfX2luaXQgc25wX3NlY3VyZV90c2NfaW5pdCh2b2lkKVxuIFxuIFx0c25wX3RzY19mcmVxX2toeiA9IFNOUF9TQ0FMRV9UU0NfRlJFUSh0c2NfZnJlcV9taHogKiAxMDAwLCBzZWNyZXRzLVx1MDAzZXRzY19mYWN0b3IpO1xuIFxuLVx0eDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUgPSBzZWN1cmV0c2NfZ2V0X3RzY19raHo7XG4tXHR4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX3RzYyA9IHNlY3VyZXRzY19nZXRfdHNjX2toejtcbi1cbiBcdGVhcmx5X21lbXVubWFwKG1lbSwgUEFHRV9TSVpFKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNucF90c2NfZnJlcV9raHo7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jIGIvYXJjaC94ODYvY29jby90ZHgvdGR4LmNcbmluZGV4IDI5YjZmMWVkNTllYzU0Li45NDY4MmFjYTE4OGI3OSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguY1xuQEAgLTgsNiAmIzQzOzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tleGVjLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2FwaWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9jb2NvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGR4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdm14LmhcdTAwM2VcbkBAIC0xMTIzLDkgJiM0MzsxMTI0LDYgQEAgdm9pZCBfX2luaXQgdGR4X2Vhcmx5X2luaXQodm9pZClcbiBcbiBcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKTtcbiBcbi1cdC8qIFRTQyBpcyB0aGUgb25seSByZWxpYWJsZSBjbG9jayBpbiBURFggZ3Vlc3QgKi9cbi1cdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTtcbi1cbiBcdGNjX3ZlbmRvciA9IENDX1ZFTkRPUl9JTlRFTDtcbiBcbiBcdC8qIENvbmZpZ3VyZSB0aGUgVEQgKi9cbkBAIC0xMTk1LDMgJiM0MzsxMTkzLDE4IEBAIHZvaWQgX19pbml0IHRkeF9lYXJseV9pbml0KHZvaWQpXG4gXG4gXHR0ZHhfYW5ub3VuY2UoKTtcbiB9XG4mIzQzO1xuJiM0Mzt1bnNpZ25lZCBpbnQgX19pbml0IHRkeF90c2NfaW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGNwdWlkX3RzY19pbmZvIGluZm87XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoY3B1aWRfZ2V0X3RzY19pbmZvKFx1MDAyNmluZm8pIHx8ICFpbmZvLmNyeXN0YWxfa2h6KSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRhcGljX3NldF90aW1lcl9wZXJpb2Rfa2h6KGluZm8uY3J5c3RhbF9raHosIFwmIzM0O1REWC1Nb2R1bGUgdmlhIENQVUlEXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogVFNDIGlzIHRoZSBvbmx5IHJlbGlhYmxlIGNsb2NrIGluIFREWCBndWVzdCAqL1xuJiM0MztcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGluZm8uY3J5c3RhbF9raHogKiBpbmZvLm51bWVyYXRvciAvIGluZm8uZGVub21pbmF0b3I7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3JuLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3JuLmhcbmluZGV4IGRiNDJiNDc3YzQxZDM0Li5hODkyMTc5YzYxYzYyMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Fjcm4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNybi5oXG5AQCAtMzIsMTEgJiM0MzszMiw2IEBAIHN0YXRpYyBpbmxpbmUgdTMyIGFjcm5fY3B1aWRfYmFzZSh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhY3JuX2dldF90c2Nfa2h6KHZvaWQpXG4te1xuLVx0cmV0dXJuIGNwdWlkX2VheChBQ1JOX0NQVUlEX1RJTUlOR19JTkZPKTtcbi19XG4tXG4gLypcbiAgKiBIeXBlcmNhbGxzIGZvciBBQ1JOXG4gICpcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmhcbmluZGV4IDljZDQ5M2Q0NjdkNGQxLi4wMzU5OTg1NTVlOTkyMiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oXG5AQCAtNjMsNyAmIzQzOzYzLDYgQEAgZXh0ZXJuIGludCBhcGljX3ZlcmJvc2l0eTtcbiBleHRlcm4gaW50IGxvY2FsX2FwaWNfdGltZXJfYzJfb2s7XG4gXG4gZXh0ZXJuIGJvb2wgYXBpY19pc19kaXNhYmxlZDtcbi1leHRlcm4gdW5zaWduZWQgaW50IGxhcGljX3RpbWVyX3BlcmlvZDtcbiBcbiBleHRlcm4gZW51bSBhcGljX2ludHJfbW9kZV9pZCBhcGljX2ludHJfbW9kZTtcbiBlbnVtIGFwaWNfaW50cl9tb2RlX2lkIHtcbkBAIC0xMzgsNiAmIzQzOzEzNyw4IEBAIHZvaWQgcmVnaXN0ZXJfbGFwaWNfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MpO1xuIGV4dGVybiB2b2lkIHNldHVwX2Jvb3RfQVBJQ19jbG9jayh2b2lkKTtcbiBleHRlcm4gdm9pZCBzZXR1cF9zZWNvbmRhcnlfQVBJQ19jbG9jayh2b2lkKTtcbiBleHRlcm4gdm9pZCBsYXBpY191cGRhdGVfdHNjX2ZyZXEodm9pZCk7XG4mIzQzO2V4dGVybiB2b2lkIGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9oeih1NjQgcGVyaW9kX2h6LCBjb25zdCBjaGFyICpzb3VyY2UpO1xuJiM0MztleHRlcm4gdm9pZCBhcGljX3NldF90aW1lcl9wZXJpb2Rfa2h6KHU2NCBwZXJpb2Rfa2h6LCBjb25zdCBjaGFyICpzb3VyY2UpO1xuIFxuICNpZmRlZiBDT05GSUdfWDg2XzY0XG4gc3RhdGljIGlubGluZSBib29sIGFwaWNfZm9yY2VfZW5hYmxlKHVuc2lnbmVkIGxvbmcgYWRkcilcbkBAIC0xODgsNiAmIzQzOzE4OSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2xvY2FsX0FQSUModm9pZCkgeyB9XG4gIyBkZWZpbmUgc2V0dXBfYm9vdF9BUElDX2Nsb2NrIHg4Nl9pbml0X25vb3BcbiAjIGRlZmluZSBzZXR1cF9zZWNvbmRhcnlfQVBJQ19jbG9jayB4ODZfaW5pdF9ub29wXG4gc3RhdGljIGlubGluZSB2b2lkIGxhcGljX3VwZGF0ZV90c2NfZnJlcSh2b2lkKSB7IH1cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9oeih1NjQgcGVyaW9kX2h6LCBjb25zdCBjaGFyICpzb3VyY2UpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgYXBpY19zZXRfdGltZXJfcGVyaW9kX2toeih1NjQgcGVyaW9kX2toeiwgY29uc3QgY2hhciAqc291cmNlKSB7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9ic3BfQVBJQyh2b2lkKSB7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgYXBpY19pbnRyX21vZGVfc2VsZWN0KHZvaWQpIHsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBhcGljX2ludHJfbW9kZV9pbml0KHZvaWQpIHsgfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oXG5pbmRleCA0YTQ3YzE2ZTJkZjhjMC4uNzYzZWQwMTc3MzhhNjcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oXG5AQCAtMTE4LDggJiM0MzsxMTgsMTYgQEAgc3RhdGljIGlubGluZSBsb25nIGt2bV9zZXZfaHlwZXJjYWxsMyh1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGxvbmcgcDEsXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfS1ZNX0dVRVNUXG4tdm9pZCBrdm1jbG9ja19pbml0KHZvaWQpO1xuLXZvaWQga3ZtY2xvY2tfZGlzYWJsZSh2b2lkKTtcbiYjNDM7ZW51bSBrdm1fZ3Vlc3RfY3B1X2FjdGlvbiB7XG4mIzQzO1x0S1ZNX0dVRVNUX0JTUF9TVVNQRU5ELFxuJiM0MztcdEtWTV9HVUVTVF9CU1BfUkVTVU1FLFxuJiM0MztcdEtWTV9HVUVTVF9BUF9PTkxJTkUsXG4mIzQzO1x0S1ZNX0dVRVNUX0FQX09GRkxJTkUsXG4mIzQzO1x0S1ZNX0dVRVNUX1NIVVRET1dOLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7dm9pZCBrdm1jbG9ja19pbml0KGJvb2wgcHJlZmVyX3RzYyk7XG4mIzQzO3ZvaWQga3ZtY2xvY2tfY3B1X2FjdGlvbihlbnVtIGt2bV9ndWVzdF9jcHVfYWN0aW9uIGFjdGlvbik7XG4gYm9vbCBrdm1fcGFyYV9hdmFpbGFibGUodm9pZCk7XG4gdW5zaWduZWQgaW50IGt2bV9hcmNoX3BhcmFfZmVhdHVyZXModm9pZCk7XG4gdW5zaWduZWQgaW50IGt2bV9hcmNoX3BhcmFfaGludHModm9pZCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaFxuaW5kZXggNTk0Y2ZhMTljYmQ0YmEuLjA1ZWJmMGI3M2VmNDdkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXG5AQCAtNTMwLDcgJiM0Mzs1MzAsNyBAQCBpbnQgc25wX3NlbmRfZ3Vlc3RfcmVxdWVzdChzdHJ1Y3Qgc25wX21zZ19kZXNjICptZGVzYywgc3RydWN0IHNucF9ndWVzdF9yZXEgKnJlcVxuIGludCBzbnBfc3ZzbV92dHBtX3NlbmRfY29tbWFuZCh1OCAqYnVmZmVyKTtcbiBcbiB2b2lkIF9faW5pdCBzbnBfc2VjdXJlX3RzY19wcmVwYXJlKHZvaWQpO1xuLXZvaWQgX19pbml0IHNucF9zZWN1cmVfdHNjX2luaXQodm9pZCk7XG4mIzQzO3Vuc2lnbmVkIGludCBzbnBfc2VjdXJlX3RzY19pbml0KHZvaWQpO1xuIGVudW0gZXNfcmVzdWx0IHNhdmljX3JlZ2lzdGVyX2dwYSh1NjQgZ3BhKTtcbiBlbnVtIGVzX3Jlc3VsdCBzYXZpY191bnJlZ2lzdGVyX2dwYSh1NjQgKmdwYSk7XG4gdTY0IHNhdmljX2doY2JfbXNyX3JlYWQodTMyIHJlZyk7XG5AQCAtNjM3LDcgJiM0Mzs2MzcsNyBAQCBzdGF0aWMgaW5saW5lIGludCBzbnBfc2VuZF9ndWVzdF9yZXF1ZXN0KHN0cnVjdCBzbnBfbXNnX2Rlc2MgKm1kZXNjLFxuIFx0XHRcdFx0XHQgc3RydWN0IHNucF9ndWVzdF9yZXEgKnJlcSkgeyByZXR1cm4gLUVOT0RFVjsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IHNucF9zdnNtX3Z0cG1fc2VuZF9jb21tYW5kKHU4ICpidWZmZXIpIHsgcmV0dXJuIC1FTk9ERVY7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHNucF9zZWN1cmVfdHNjX3ByZXBhcmUodm9pZCkgeyB9XG4tc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBzbnBfc2VjdXJlX3RzY19pbml0KHZvaWQpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2luaXQgc25wX3NlY3VyZV90c2NfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIHNldl9ldmljdF9jYWNoZSh2b2lkICp2YSwgaW50IG5wYWdlcykge31cbiBzdGF0aWMgaW5saW5lIGVudW0gZXNfcmVzdWx0IHNhdmljX3JlZ2lzdGVyX2dwYSh1NjQgZ3BhKSB7IHJldHVybiBFU19VTlNVUFBPUlRFRDsgfVxuIHN0YXRpYyBpbmxpbmUgZW51bSBlc19yZXN1bHQgc2F2aWNfdW5yZWdpc3Rlcl9ncGEodTY0ICpncGEpIHsgcmV0dXJuIEVTX1VOU1VQUE9SVEVEOyB9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuaW5kZXggODllOTdkNTc2MWQ4OWUuLmQyM2ZmMDZkYjQxYWJlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXG5AQCAtNjgsNiAmIzQzOzY4LDcgQEAgc3RydWN0IHZlX2luZm8ge1xuICNpZmRlZiBDT05GSUdfSU5URUxfVERYX0dVRVNUXG4gXG4gdm9pZCBfX2luaXQgdGR4X2Vhcmx5X2luaXQodm9pZCk7XG4mIzQzO3Vuc2lnbmVkIGludCBfX2luaXQgdGR4X3RzY19pbml0KHZvaWQpO1xuIFxuIHZvaWQgdGR4X2dldF92ZV9pbmZvKHN0cnVjdCB2ZV9pbmZvICp2ZSk7XG4gXG5AQCAtODksNiAmIzQzOzkwLDcgQEAgdm9pZCBfX2luaXQgdGR4X2R1bXBfdGRfY3Rscyh1NjQgdGRfY3Rscyk7XG4gI2Vsc2VcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgdGR4X2Vhcmx5X2luaXQodm9pZCkgeyB9O1xuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0ZHhfdHNjX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfaGFsdCh2b2lkKSB7IH07XG4gXG4gc3RhdGljIGlubGluZSBib29sIHRkeF9lYXJseV9oYW5kbGVfdmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgcmV0dXJuIGZhbHNlOyB9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmhcbmluZGV4IGZkYTE4YmNiMTliNDVhLi5hNTIzODhhZjYwNTVlNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmhcbkBAIC0xMSw4ICYjNDM7MTEsMjEgQEAgZXh0ZXJuIHZvaWQgcmVjYWxpYnJhdGVfY3B1X2toeih2b2lkKTtcbiBcbiBleHRlcm4gaW50IG5vX3RpbWVyX2NoZWNrO1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX1BBUkFWSVJUXG4gZXh0ZXJuIGJvb2wgdXNpbmdfbmF0aXZlX3NjaGVkX2Nsb2NrKHZvaWQpO1xuLXZvaWQgcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKHU2NCAoKmZ1bmMpKHZvaWQpKTtcbiYjNDM7XG4mIzQzO2ludCBfX2luaXQgX19wYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodTY0ICgqZnVuYykodm9pZCksIGJvb2wgc3RhYmxlLFxuJiM0MztcdFx0XHRcdCAgICAgIHZvaWQgKCpzYXZlKSh2b2lkKSwgdm9pZCAoKnJlc3RvcmUpKHZvaWQpKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodTY0ICgqZnVuYykodm9pZCksXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgdm9pZCAoKnNhdmUpKHZvaWQpLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIHZvaWQgKCpyZXN0b3JlKSh2b2lkKSlcbiYjNDM7e1xuJiM0MztcdCh2b2lkKV9fcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKGZ1bmMsIHRydWUsIHNhdmUsIHJlc3RvcmUpO1xuJiM0Mzt9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB1c2luZ19uYXRpdmVfc2NoZWRfY2xvY2sodm9pZCkgeyByZXR1cm4gdHJ1ZTsgfVxuJiM0MzsjZW5kaWZcbiBcbiAvKlxuICAqIFdlIHVzZSB0aGUgZnVsbCBsaW5lYXIgZXF1YXRpb246IGYoeCkgPSBhICYjNDM7IGIqeCwgaW4gb3JkZXIgdG8gYWxsb3dcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90c2MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RzYy5oXG5pbmRleCA0ZDJkMmYyMWZmMDYzZi4uY2I2ODJmMDk3ZWE3Y2EgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90c2MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdHNjLmhcbkBAIC04MiwxNCAmIzQzOzgyLDIwIEBAIHN0YXRpYyBpbmxpbmUgY3ljbGVzX3QgZ2V0X2N5Y2xlcyh2b2lkKVxuIH1cbiAjZGVmaW5lIGdldF9jeWNsZXMgZ2V0X2N5Y2xlc1xuIFxuJiM0MztzdHJ1Y3QgY3B1aWRfdHNjX2luZm8ge1xuJiM0MztcdHVuc2lnbmVkIGludCBkZW5vbWluYXRvcjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbnVtZXJhdG9yO1xuJiM0MztcdHVuc2lnbmVkIGludCBjcnlzdGFsX2toejtcbiYjNDM7fTtcbiYjNDM7ZXh0ZXJuIGludCBjcHVpZF9nZXRfdHNjX2luZm8oc3RydWN0IGNwdWlkX3RzY19pbmZvICppbmZvKTtcbiYjNDM7ZXh0ZXJuIHVuc2lnbmVkIGludCBfX2NwdV9raHpfZnJvbV9jcHVpZCh2b2lkKTtcbiYjNDM7XG4gZXh0ZXJuIHZvaWQgdHNjX2Vhcmx5X2luaXQodm9pZCk7XG4gZXh0ZXJuIHZvaWQgdHNjX2luaXQodm9pZCk7XG4gZXh0ZXJuIHZvaWQgbWFya190c2NfdW5zdGFibGUoY2hhciAqcmVhc29uKTtcbiBleHRlcm4gaW50IHVuc3luY2hyb25pemVkX3RzYyh2b2lkKTtcbiBleHRlcm4gaW50IGNoZWNrX3RzY191bnN0YWJsZSh2b2lkKTtcbiBleHRlcm4gdm9pZCBtYXJrX3RzY19hc3luY19yZXNldHMoY2hhciAqcmVhc29uKTtcbi1leHRlcm4gdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSh2b2lkKTtcbi1leHRlcm4gdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX3RzYyh2b2lkKTtcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIG5hdGl2ZV9zY2hlZF9jbG9ja19mcm9tX3RzYyh1NjQgdHNjKTtcbiBcbiBleHRlcm4gaW50IHRzY19jbG9ja3NvdXJjZV9yZWxpYWJsZTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaFxuaW5kZXggOTUzZDMxOTk0MDhhZTUuLmU4NzllNmU4MzQyODMwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaFxuQEAgLTEyMyw2ICYjNDM7MTIzLDggQEAgc3RydWN0IHg4Nl9pbml0X3BjaSB7XG4gICogQG1zaV9leHRfZGVzdF9pZDpcdFx0TVNJIHN1cHBvcnRzIDE1LWJpdCBBUElDIElEc1xuICAqIEBpbml0X21lbV9tYXBwaW5nOlx0XHRzZXR1cCBlYXJseSBtYXBwaW5ncyBkdXJpbmcgaW5pdF9tZW1fbWFwcGluZygpXG4gICogQGluaXRfYWZ0ZXJfYm9vdG1lbTpcdFx0Z3Vlc3QgaW5pdCBhZnRlciBib290IGFsbG9jYXRvciBpcyBmaW5pc2hlZFxuJiM0MzsgKiBAZ2V0X3RzY19raHo6XHRcdGdldCB0aGUgVFNDIGZyZXF1ZW5jeSAocmV0dXJucyAwIGlmIGZyZXF1ZW5jeSBpcyB1bmtub3duKVxuJiM0MzsgKiBAZ2V0X2NwdV9raHo6XHRcdGdldCB0aGUgQ1BVIGZyZXF1ZW5jeSAocmV0dXJucyAwIGlmIGZyZXF1ZW5jeSBpcyB1bmtub3duKVxuICAqL1xuIHN0cnVjdCB4ODZfaHlwZXJfaW5pdCB7XG4gXHR2b2lkICgqaW5pdF9wbGF0Zm9ybSkodm9pZCk7XG5AQCAtMTMxLDYgJiM0MzsxMzMsOCBAQCBzdHJ1Y3QgeDg2X2h5cGVyX2luaXQge1xuIFx0Ym9vbCAoKm1zaV9leHRfZGVzdF9pZCkodm9pZCk7XG4gXHR2b2lkICgqaW5pdF9tZW1fbWFwcGluZykodm9pZCk7XG4gXHR2b2lkICgqaW5pdF9hZnRlcl9ib290bWVtKSh2b2lkKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgKCpnZXRfdHNjX2toeikodm9pZCk7XG4mIzQzO1x0dW5zaWduZWQgaW50ICgqZ2V0X2NwdV9raHopKHZvaWQpO1xuIH07XG4gXG4gLyoqXG5AQCAtMjkxLDggJiM0MzsyOTUsNiBAQCBzdHJ1Y3QgeDg2X2h5cGVyX3J1bnRpbWUge1xuIFxuIC8qKlxuICAqIHN0cnVjdCB4ODZfcGxhdGZvcm1fb3BzIC0gcGxhdGZvcm0gc3BlY2lmaWMgcnVudGltZSBmdW5jdGlvbnNcbi0gKiBAY2FsaWJyYXRlX2NwdTpcdFx0Y2FsaWJyYXRlIENQVVxuLSAqIEBjYWxpYnJhdGVfdHNjOlx0XHRjYWxpYnJhdGUgVFNDLCBpZiBkaWZmZXJlbnQgZnJvbSBDUFVcbiAgKiBAZ2V0X3dhbGxjbG9jazpcdFx0Z2V0IHRpbWUgZnJvbSBIVyBjbG9jayBsaWtlIFJUQyBldGMuXG4gICogQHNldF93YWxsY2xvY2s6XHRcdHNldCB0aW1lIGJhY2sgdG8gSFcgY2xvY2tcbiAgKiBAaW9tbXVfc2h1dGRvd246XHRcdHNldCBieSBhbiBJT01NVSBkcml2ZXIgZm9yIHNodXRkb3duIGlmIG5lY2Vzc2FyeVxuQEAgLTMxNiw4ICYjNDM7MzE4LDYgQEAgc3RydWN0IHg4Nl9oeXBlcl9ydW50aW1lIHtcbiAgKiBAZ3Vlc3Q6XHRcdFx0Z3Vlc3QgaW5jYXJuYXRpb25zIGNhbGxiYWNrc1xuICAqL1xuIHN0cnVjdCB4ODZfcGxhdGZvcm1fb3BzIHtcbi1cdHVuc2lnbmVkIGxvbmcgKCpjYWxpYnJhdGVfY3B1KSh2b2lkKTtcbi1cdHVuc2lnbmVkIGxvbmcgKCpjYWxpYnJhdGVfdHNjKSh2b2lkKTtcbiBcdHZvaWQgKCpnZXRfd2FsbGNsb2NrKShzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpO1xuIFx0aW50ICgqc2V0X3dhbGxjbG9jaykoY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKTtcbiBcdHZvaWQgKCppb21tdV9zaHV0ZG93bikodm9pZCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm1fcGFyYS5oIGIvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm1fcGFyYS5oXG5pbmRleCBhMWVmYTc5MDdhMGIxMC4uYzNhMzg0NzExZjNhNWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bV9wYXJhLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtX3BhcmEuaFxuQEAgLTQ0LDYgJiM0Mzs0NCwxNyBAQFxuICAqL1xuICNkZWZpbmUgS1ZNX0ZFQVRVUkVfQ0xPQ0tTT1VSQ0VfU1RBQkxFX0JJVFx0MjRcbiBcbiYjNDM7LypcbiYjNDM7ICogVGhlIHRpbWluZyBpbmZvcm1hdGlvbiBsZWFmIHByb3ZpZGVzIFRTQyBhbmQgbG9jYWwgQVBJQyB0aW1lciBmcmVxdWVuY3lcbiYjNDM7ICogaW5mb3JtYXRpb24gdG8gdGhlIGd1ZXN0LiAgTm90ZSwgdXNlcnNwYWNlIGlzIHJlc3BvbnNpYmxlIGZvciBmaWxsaW5nIHRoZVxuJiM0MzsgKiBsZWFmIHdpdGggdGhlIGNvcnJlY3QgaW5mb3JtYXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqICAjIEVBWDogKFZpcnR1YWwpIFRTQyBmcmVxdWVuY3kgaW4ga0h6LlxuJiM0MzsgKiAgIyBFQlg6IChWaXJ0dWFsKSBCdXMgKGxvY2FsIEFQSUMgdGltZXIpIGZyZXF1ZW5jeSBpbiBrSHouXG4mIzQzOyAqICAjIEVDWCwgRURYOiBSZXNlcnZlZCAobXVzdCBiZSB6ZXJvKS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgS1ZNX0NQVUlEX1RJTUlOR19JTkZPXHQweDQwMDAwMDEwXG4mIzQzO1xuICNkZWZpbmUgTVNSX0tWTV9XQUxMX0NMT0NLICAweDExXG4gI2RlZmluZSBNU1JfS1ZNX1NZU1RFTV9USU1FIDB4MTJcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmNcbmluZGV4IGFhMWUxOTk3OWFhOGUxLi44ZDNkOTMwNTc2ZmQ3MSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jXG5AQCAtMTc2LDcgJiM0MzsxNzYsNyBAQCBzdGF0aWMgc3RydWN0IHJlc291cmNlIGxhcGljX3Jlc291cmNlID0ge1xuIH07XG4gXG4gLyogTWVhc3VyZWQgaW4gdGlja3MgcGVyIEhaLiAqL1xuLXVuc2lnbmVkIGludCBsYXBpY190aW1lcl9wZXJpb2QgPSAwO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGxhcGljX3RpbWVyX3BlcmlvZDtcbiBcbiBzdGF0aWMgdm9pZCBhcGljX3BtX2FjdGl2YXRlKHZvaWQpO1xuIFxuQEAgLTc5Niw2ICYjNDM7Nzk2LDE2IEBAIGJvb2wgX19pbml0IGFwaWNfbmVlZHNfcGl0KHZvaWQpXG4gXHRyZXR1cm4gbGFwaWNfdGltZXJfcGVyaW9kID09IDA7XG4gfVxuIFxuJiM0Mzt2b2lkIGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHoodTY0IHBlcmlvZF9raHosIGNvbnN0IGNoYXIgKnNvdXJjZSlcbiYjNDM7e1xuJiM0MztcdGxhcGljX3RpbWVyX3BlcmlvZCA9IG11bF91NjRfdTMyX2RpdihwZXJpb2Rfa2h6LCAxMDAwLCBIWik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgYXBpY19zZXRfdGltZXJfcGVyaW9kX2h6KHU2NCBwZXJpb2RfaHosIGNvbnN0IGNoYXIgKnNvdXJjZSlcbiYjNDM7e1xuJiM0MztcdGxhcGljX3RpbWVyX3BlcmlvZCA9IGRpdl91NjQocGVyaW9kX2h6LCBIWik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBfX2luaXQgY2FsaWJyYXRlX0FQSUNfY2xvY2sodm9pZClcbiB7XG4gXHRzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpsZXZ0ID0gdGhpc19jcHVfcHRyKFx1MDAyNmxhcGljX2V2ZW50cyk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9hY3JuLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2Fjcm4uY1xuaW5kZXggZGMxMTlhZjgzNTI0MmEuLmRjNzFhNmZkZDQ2MTM5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9hY3JuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYWNybi5jXG5AQCAtMTksMTggJiM0MzsxOSwyOCBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9pZHRlbnRyeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2lycV9yZWdzLmhcdTAwM2VcbiBcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBhY3JuX3RzY19raHpfY3B1aWQgX19pbml0ZGF0YTtcbiYjNDM7XG4gc3RhdGljIHUzMiBfX2luaXQgYWNybl9kZXRlY3Qodm9pZClcbiB7XG4gXHRyZXR1cm4gYWNybl9jcHVpZF9iYXNlKCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBhY3JuX2dldF90c2Nfa2h6KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYWNybl90c2Nfa2h6X2NwdWlkO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIF9faW5pdCBhY3JuX2luaXRfcGxhdGZvcm0odm9pZClcbiB7XG4gXHQvKiBJbnN0YWxsIHN5c3RlbSBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgQUNSTiBoeXBlcnZpc29yIGNhbGxiYWNrICovXG4gXHRzeXN2ZWNfaW5zdGFsbChIWVBFUlZJU09SX0NBTExCQUNLX1ZFQ1RPUiwgc3lzdmVjX2Fjcm5faHZfY2FsbGJhY2spO1xuIFxuLVx0eDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MgPSBhY3JuX2dldF90c2Nfa2h6O1xuLVx0eDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUgPSBhY3JuX2dldF90c2Nfa2h6O1xuJiM0MztcdGFjcm5fdHNjX2toel9jcHVpZCA9IGNwdWlkX2VheChBQ1JOX0NQVUlEX1RJTUlOR19JTkZPKTtcbiYjNDM7XHRpZiAoYWNybl90c2Nfa2h6X2NwdWlkKSB7XG4mIzQzO1x0XHR4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeiA9IGFjcm5fZ2V0X3RzY19raHo7XG4mIzQzO1x0XHR4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeiA9IGFjcm5fZ2V0X3RzY19raHo7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgYm9vbCBhY3JuX3gyYXBpY19hdmFpbGFibGUodm9pZClcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21zaHlwZXJ2LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21zaHlwZXJ2LmNcbmluZGV4IDE4NWQ0ZjY3N2VjMGYwLi5jNGRhOGUzNTMxOWFjZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2NwdS9tc2h5cGVydi5jXG5AQCAtMjc1LDYzICYjNDM7Mjc1LDYgQEAgc3RhdGljIHZvaWQgaHZfZ3Vlc3RfY3Jhc2hfc2h1dGRvd24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gfVxuICNlbmRpZiAvKiBDT05GSUdfQ1JBU0hfRFVNUCAqL1xuIFxuLXN0YXRpYyB1NjQgaHZfcmVmX2NvdW50ZXJfYXRfc3VzcGVuZDtcbi1zdGF0aWMgdm9pZCAoKm9sZF9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKSh2b2lkKTtcbi1zdGF0aWMgdm9pZCAoKm9sZF9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKSh2b2lkKTtcbi1cbi0vKlxuLSAqIEh5cGVyLVYgY2xvY2sgY291bnRlciByZXNldHMgZHVyaW5nIGhpYmVybmF0aW9uLiBTYXZlIGFuZCByZXN0b3JlIGNsb2NrXG4tICogb2Zmc2V0IGR1cmluZyBzdXNwZW5kL3Jlc3VtZSwgd2hpbGUgYWxzbyBjb25zaWRlcmluZyB0aGUgdGltZSBwYXNzZWRcbi0gKiBiZWZvcmUgc3VzcGVuZC4gVGhpcyBpcyB0byBtYWtlIHN1cmUgdGhhdCBzY2hlZF9jbG9jayB1c2luZyBodiB0c2MgcGFnZVxuLSAqIGJhc2VkIGNsb2Nrc291cmNlLCBwcm9jZWVkcyBmcm9tIHdoZXJlIGl0IGxlZnQgb2ZmIGR1cmluZyBzdXNwZW5kIGFuZFxuLSAqIGl0IHNob3dzIGNvcnJlY3QgdGltZSBmb3IgdGhlIHRpbWVzdGFtcHMgb2Yga2VybmVsIG1lc3NhZ2VzIGFmdGVyIHJlc3VtZS5cbi0gKi9cbi1zdGF0aWMgdm9pZCBzYXZlX2h2X2Nsb2NrX3RzY19zdGF0ZSh2b2lkKVxuLXtcbi1cdGh2X3JlZl9jb3VudGVyX2F0X3N1c3BlbmQgPSBodl9yZWFkX3JlZmVyZW5jZV9jb3VudGVyKCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHJlc3RvcmVfaHZfY2xvY2tfdHNjX3N0YXRlKHZvaWQpXG4te1xuLVx0Lypcbi1cdCAqIEFkanVzdCB0aGUgb2Zmc2V0cyB1c2VkIGJ5IGh2IHRzYyBjbG9ja3NvdXJjZSB0b1xuLVx0ICogYWNjb3VudCBmb3IgdGhlIHRpbWUgc3BlbnQgYmVmb3JlIGhpYmVybmF0aW9uLlxuLVx0ICogYWRqdXN0ZWQgdmFsdWUgPSByZWZlcmVuY2UgY291bnRlciAodGltZSkgYXQgc3VzcGVuZFxuLVx0ICogICAgICAgICAgICAgICAgLSByZWZlcmVuY2UgY291bnRlciAodGltZSkgbm93LlxuLVx0ICovXG4tXHRodl9hZGpfc2NoZWRfY2xvY2tfb2Zmc2V0KGh2X3JlZl9jb3VudGVyX2F0X3N1c3BlbmQgLSBodl9yZWFkX3JlZmVyZW5jZV9jb3VudGVyKCkpO1xuLX1cbi1cbi0vKlxuLSAqIEZ1bmN0aW9ucyB0byBvdmVycmlkZSBzYXZlX3NjaGVkX2Nsb2NrX3N0YXRlIGFuZCByZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlXG4tICogZnVuY3Rpb25zIG9mIHg4Nl9wbGF0Zm9ybS4gVGhlIEh5cGVyLVYgY2xvY2sgY291bnRlciBpcyByZXNldCBkdXJpbmdcbi0gKiBzdXNwZW5kLXJlc3VtZSBhbmQgdGhlIG9mZnNldCB1c2VkIHRvIG1lYXN1cmUgdGltZSBuZWVkcyB0byBiZVxuLSAqIGNvcnJlY3RlZCwgcG9zdCByZXN1bWUuXG4tICovXG4tc3RhdGljIHZvaWQgaHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxuLXtcbi1cdG9sZF9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKCk7XG4tXHRzYXZlX2h2X2Nsb2NrX3RzY19zdGF0ZSgpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBodl9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXG4te1xuLVx0cmVzdG9yZV9odl9jbG9ja190c2Nfc3RhdGUoKTtcbi1cdG9sZF9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIF9faW5pdCB4ODZfc2V0dXBfb3BzX2Zvcl90c2NfcGdfY2xvY2sodm9pZClcbi17XG4tXHRpZiAoIShtc19oeXBlcnYuZmVhdHVyZXMgXHUwMDI2IEhWX01TUl9SRUZFUkVOQ0VfVFNDX0FWQUlMQUJMRSkpXG4tXHRcdHJldHVybjtcbi1cbi1cdG9sZF9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlID0geDg2X3BsYXRmb3JtLnNhdmVfc2NoZWRfY2xvY2tfc3RhdGU7XG4tXHR4ODZfcGxhdGZvcm0uc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSA9IGh2X3NhdmVfc2NoZWRfY2xvY2tfc3RhdGU7XG4tXG4tXHRvbGRfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSA9IHg4Nl9wbGF0Zm9ybS5yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlO1xuLVx0eDg2X3BsYXRmb3JtLnJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUgPSBodl9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlO1xuLX1cbi1cbiAjaWZkZWYgQ09ORklHX1g4Nl82NFxuIERFRklORV9TVEFUSUNfQ0FMTChodl9oeXBlcmNhbGwsIGh2X3N0ZF9oeXBlcmNhbGwpO1xuIEVYUE9SVF9TVEFUSUNfQ0FMTF9UUkFNUF9HUEwoaHZfaHlwZXJjYWxsKTtcbkBAIC0zOTUsNyAmIzQzOzMzOCw3IEBAIHN0YXRpYyBpbnQgaHZfbm1pX3Vua25vd24odW5zaWduZWQgaW50IHZhbCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gfVxuICNlbmRpZlxuIFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGh2X2dldF90c2Nfa2h6KHZvaWQpXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGh2X2dldF90c2Nfa2h6KHZvaWQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmcmVxO1xuIFxuQEAgLTU3Myw5ICYjNDM7NTE2LDggQEAgc3RhdGljIHZvaWQgX19pbml0IG1zX2h5cGVydl9pbml0X3BsYXRmb3JtKHZvaWQpXG4gXG4gXHRpZiAobXNfaHlwZXJ2LmZlYXR1cmVzIFx1MDAyNiBIVl9BQ0NFU1NfRlJFUVVFTkNZX01TUlMgXHUwMDI2XHUwMDI2XG4gXHQgICAgbXNfaHlwZXJ2Lm1pc2NfZmVhdHVyZXMgXHUwMDI2IEhWX0ZFQVRVUkVfRlJFUVVFTkNZX01TUlNfQVZBSUxBQkxFKSB7XG4tXHRcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjID0gaHZfZ2V0X3RzY19raHo7XG4tXHRcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ID0gaHZfZ2V0X3RzY19raHo7XG4tXHRcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpO1xuJiM0MztcdFx0eDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHogPSBodl9nZXRfdHNjX2toejtcbiYjNDM7XHRcdHg4Nl9pbml0Lmh5cGVyLmdldF9jcHVfa2h6ID0gaHZfZ2V0X3RzY19raHo7XG4gXHR9XG4gXG4gXHRpZiAobXNfaHlwZXJ2LnByaXZfaGlnaCBcdTAwMjYgSFZfSVNPTEFUSU9OKSB7XG5AQCAtNjQ2LDEwICYjNDM7NTg4LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IG1zX2h5cGVydl9pbml0X3BsYXRmb3JtKHZvaWQpXG4gXHRcdHU2NFx0aHZfbGFwaWNfZnJlcXVlbmN5O1xuIFxuIFx0XHRyZG1zcnEoSFZfWDY0X01TUl9BUElDX0ZSRVFVRU5DWSwgaHZfbGFwaWNfZnJlcXVlbmN5KTtcbi1cdFx0aHZfbGFwaWNfZnJlcXVlbmN5ID0gZGl2X3U2NChodl9sYXBpY19mcmVxdWVuY3ksIEhaKTtcbi1cdFx0bGFwaWNfdGltZXJfcGVyaW9kID0gaHZfbGFwaWNfZnJlcXVlbmN5O1xuLVx0XHRwcl9pbmZvKFwmIzM0O0h5cGVyLVY6IExBUElDIFRpbWVyIEZyZXF1ZW5jeTogJSN4XFxuXCYjMzQ7LFxuLVx0XHRcdGxhcGljX3RpbWVyX3BlcmlvZCk7XG4mIzQzO1x0XHRhcGljX3NldF90aW1lcl9wZXJpb2RfaHooaHZfbGFwaWNfZnJlcXVlbmN5LCBcJiMzNDtIeXBlci1WIGh5cGVydmlzb3JcJiMzNDspO1xuIFx0fVxuIFxuIFx0cmVnaXN0ZXJfbm1pX2hhbmRsZXIoTk1JX1VOS05PV04sIGh2X25taV91bmtub3duLCBOTUlfRkxBR19GSVJTVCxcbkBAIC03NDAsNyAmIzQzOzY3OSw2IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtc19oeXBlcnZfaW5pdF9wbGF0Zm9ybSh2b2lkKVxuIFxuIFx0LyogUmVnaXN0ZXIgSHlwZXItViBzcGVjaWZpYyBjbG9ja3NvdXJjZSAqL1xuIFx0aHZfaW5pdF9jbG9ja3NvdXJjZSgpO1xuLVx0eDg2X3NldHVwX29wc19mb3JfdHNjX3BnX2Nsb2NrKCk7XG4gXHRodl92dGxfaW5pdF9wbGF0Zm9ybSgpO1xuICNlbmRpZlxuIFx0LypcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Ztd2FyZS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuY1xuaW5kZXggMzRiNzM1NzNiMTA4ZDcuLjIzMjI1NTI3OWE2ZWVjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuY1xuQEAgLTY0LDcgJiM0Mzs2NCw3IEBAIHN0cnVjdCB2bXdhcmVfc3RlYWxfdGltZSB7XG4gXHR1NjQgcmVzZXJ2ZWRbN107XG4gfTtcbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyB2bXdhcmVfdHNjX2toeiBfX3JvX2FmdGVyX2luaXQ7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHZtd2FyZV90c2Nfa2h6IF9faW5pdGRhdGE7XG4gc3RhdGljIHU4IHZtd2FyZV9oeXBlcmNhbGxfbW9kZSAgICAgX19yb19hZnRlcl9pbml0O1xuIFxuIHVuc2lnbmVkIGxvbmcgdm13YXJlX2h5cGVyY2FsbF9zbG93KHVuc2lnbmVkIGxvbmcgY21kLFxuQEAgLTEzNyw3ICYjNDM7MTM3LDcgQEAgc3RhdGljIGlubGluZSBpbnQgX192bXdhcmVfcGxhdGZvcm0odm9pZClcbiBcdHJldHVybiBlYXggIT0gVUlOVF9NQVggXHUwMDI2XHUwMDI2IGVieCA9PSBWTVdBUkVfSFlQRVJWSVNPUl9NQUdJQztcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgdm13YXJlX2dldF90c2Nfa2h6KHZvaWQpXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IHZtd2FyZV9nZXRfdHNjX2toeih2b2lkKVxuIHtcbiBcdHJldHVybiB2bXdhcmVfdHNjX2toejtcbiB9XG5AQCAtMzQ4LDcgJiM0MzszNDgsOCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgdm13YXJlX3BhcmF2aXJ0X29wc19zZXR1cCh2b2lkKVxuIFx0dm13YXJlX2N5YzJuc19zZXR1cCgpO1xuIFxuIFx0aWYgKHZtd19zY2hlZF9jbG9jaylcbi1cdFx0cGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKHZtd2FyZV9zY2hlZF9jbG9jayk7XG4mIzQzO1x0XHRwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodm13YXJlX3NjaGVkX2Nsb2NrLFxuJiM0MztcdFx0XHRcdFx0IHg4Nl9pbml0X25vb3AsIHg4Nl9pbml0X25vb3ApO1xuIFxuIFx0aWYgKHZtd2FyZV9pc19zdGVhbGNsb2NrX2F2YWlsYWJsZSgpKSB7XG4gXHRcdGhhc19zdGVhbF9jbG9jayA9IHRydWU7XG5AQCAtMzkwLDggJiM0MzszOTEsNiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgdm13YXJlX3NldF9jYXBhYmlsaXRpZXModm9pZClcbiB7XG4gXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQyk7XG4gXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7XG4tXHRpZiAodm13YXJlX3RzY19raHopXG4tXHRcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpO1xuIFx0aWYgKHZtd2FyZV9oeXBlcmNhbGxfbW9kZSA9PSBDUFVJRF9WTVdBUkVfRkVBVFVSRVNfRUNYX1ZNQ0FMTClcbiBcdFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9WTUNBTEwpO1xuIFx0ZWxzZSBpZiAodm13YXJlX2h5cGVyY2FsbF9tb2RlID09IENQVUlEX1ZNV0FSRV9GRUFUVVJFU19FQ1hfVk1NQ0FMTClcbkBAIC00MTksMTUgJiM0Mzs0MTgsMTEgQEAgc3RhdGljIHZvaWQgX19pbml0IHZtd2FyZV9wbGF0Zm9ybV9zZXR1cCh2b2lkKVxuIFx0XHR9XG4gXG4gXHRcdHZtd2FyZV90c2Nfa2h6ID0gdHNjX2toejtcbi1cdFx0eDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MgPSB2bXdhcmVfZ2V0X3RzY19raHo7XG4tXHRcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ID0gdm13YXJlX2dldF90c2Nfa2h6O1xuJiM0MztcdFx0eDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHogPSB2bXdhcmVfZ2V0X3RzY19raHo7XG4mIzQzO1x0XHR4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeiA9IHZtd2FyZV9nZXRfdHNjX2toejtcbiBcbi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDXG4gXHRcdC8qIFNraXAgbGFwaWMgY2FsaWJyYXRpb24gc2luY2Ugd2Uga25vdyB0aGUgYnVzIGZyZXF1ZW5jeS4gKi9cbi1cdFx0bGFwaWNfdGltZXJfcGVyaW9kID0gZWN4IC8gSFo7XG4tXHRcdHByX2luZm8oXCYjMzQ7SG9zdCBidXMgY2xvY2sgc3BlZWQgcmVhZCBmcm9tIGh5cGVydmlzb3IgOiAldSBIelxcblwmIzM0Oyxcbi1cdFx0XHRlY3gpO1xuLSNlbmRpZlxuJiM0MztcdFx0YXBpY19zZXRfdGltZXJfcGVyaW9kX2h6KGVjeCwgXCYjMzQ7Vk13YXJlIGh5cGVydmlzb3JcJiMzNDspO1xuIFx0fSBlbHNlIHtcbiBcdFx0cHJfd2FybihcJiMzNDtGYWlsZWQgdG8gZ2V0IFRTQyBmcmVxIGZyb20gdGhlIGh5cGVydmlzb3JcXG5cJiMzNDspO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9qYWlsaG91c2UuYyBiL2FyY2gveDg2L2tlcm5lbC9qYWlsaG91c2UuY1xuaW5kZXggZjU4Y2U5MjIwZTBmMzIuLmZmMTczMDUyY2RjZWRjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2phaWxob3VzZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvamFpbGhvdXNlLmNcbkBAIC02NSwxMCAmIzQzOzY1LDEwIEBAIHN0YXRpYyB2b2lkIGphaWxob3VzZV9nZXRfd2FsbGNsb2NrKHN0cnVjdCB0aW1lc3BlYzY0ICpub3cpXG4gXG4gc3RhdGljIHZvaWQgX19pbml0IGphaWxob3VzZV90aW1lcl9pbml0KHZvaWQpXG4ge1xuLVx0bGFwaWNfdGltZXJfcGVyaW9kID0gc2V0dXBfZGF0YS52MS5hcGljX2toeiAqICgxMDAwIC8gSFopO1xuJiM0MztcdGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHooc2V0dXBfZGF0YS52MS5hcGljX2toeiwgXCYjMzQ7SmFpbGhvdXNlIGh5cGVydmlzb3JcJiMzNDspO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBqYWlsaG91c2VfZ2V0X3RzYyh2b2lkKVxuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBqYWlsaG91c2VfZ2V0X3RzYyh2b2lkKVxuIHtcbiBcdHJldHVybiBwcmVjYWxpYnJhdGVkX3RzY19raHo7XG4gfVxuQEAgLTIxMCw4ICYjNDM7MjEwLDYgQEAgc3RhdGljIHZvaWQgX19pbml0IGphaWxob3VzZV9pbml0X3BsYXRmb3JtKHZvaWQpXG4gXHR4ODZfaW5pdC5tcHBhcnNlLnBhcnNlX3NtcF9jZmdcdFx0PSBqYWlsaG91c2VfcGFyc2Vfc21wX2NvbmZpZztcbiBcdHg4Nl9pbml0LnBjaS5hcmNoX2luaXRcdFx0XHQ9IGphaWxob3VzZV9wY2lfYXJjaF9pbml0O1xuIFxuLVx0eDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHVcdFx0PSBqYWlsaG91c2VfZ2V0X3RzYztcbi1cdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjXHRcdD0gamFpbGhvdXNlX2dldF90c2M7XG4gXHR4ODZfcGxhdGZvcm0uZ2V0X3dhbGxjbG9ja1x0XHQ9IGphaWxob3VzZV9nZXRfd2FsbGNsb2NrO1xuIFx0eDg2X3BsYXRmb3JtLmxlZ2FjeS5ydGNcdFx0XHQ9IDA7XG4gXHR4ODZfcGxhdGZvcm0ubGVnYWN5Lndhcm1fcmVzZXRcdFx0PSAwO1xuQEAgLTI1Nyw3ICYjNDM7MjU1LDYgQEAgc3RhdGljIHZvaWQgX19pbml0IGphaWxob3VzZV9pbml0X3BsYXRmb3JtKHZvaWQpXG4gXHRwcl9kZWJ1ZyhcJiMzNDtKYWlsaG91c2U6IFBNLVRpbWVyIElPIFBvcnQ6ICUjeFxcblwmIzM0OywgcG10bXJfaW9wb3J0KTtcbiBcbiBcdHByZWNhbGlicmF0ZWRfdHNjX2toeiA9IHNldHVwX2RhdGEudjEudHNjX2toejtcbi1cdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpO1xuIFxuIFx0cGNpX3Byb2JlID0gMDtcbiBcbkBAIC0yOTMsNSAmIzQzOzI5MCw3IEBAIGNvbnN0IHN0cnVjdCBoeXBlcnZpc29yX3g4NiB4ODZfaHlwZXJfamFpbGhvdXNlIF9fcmVmY29uc3QgPSB7XG4gXHQuZGV0ZWN0XHRcdFx0PSBqYWlsaG91c2VfZGV0ZWN0LFxuIFx0LmluaXQuaW5pdF9wbGF0Zm9ybVx0PSBqYWlsaG91c2VfaW5pdF9wbGF0Zm9ybSxcbiBcdC5pbml0LngyYXBpY19hdmFpbGFibGVcdD0gamFpbGhvdXNlX3gyYXBpY19hdmFpbGFibGUsXG4mIzQzO1x0LmluaXQuZ2V0X3RzY19raHpcdD0gamFpbGhvdXNlX2dldF90c2MsXG4mIzQzO1x0LmluaXQuZ2V0X2NwdV9raHpcdD0gamFpbGhvdXNlX2dldF90c2MsXG4gXHQuaWdub3JlX25vcHZcdFx0PSB0cnVlLFxuIH07XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2t2bS5jIGIvYXJjaC94ODYva2VybmVsL2t2bS5jXG5pbmRleCBkY2VmODRkYTMwNGI4OS4uYmVlYTBiNmFhNzhlMWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3ZtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9rdm0uY1xuQEAgLTQ5LDYgJiM0Mzs0OSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3N2bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2U4MjAvYXBpLmhcdTAwM2VcbiBcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBrdm1fdHNjX2toel9jcHVpZCBfX2luaXRkYXRhO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGt2bV9jcHVfa2h6X2NwdWlkIF9faW5pdGRhdGE7XG4mIzQzO1xuIERFRklORV9TVEFUSUNfS0VZX0ZBTFNFX1JPKGt2bV9hc3luY19wZl9lbmFibGVkKTtcbiBcbiBzdGF0aWMgaW50IGt2bWFwZiA9IDE7XG5AQCAtNDU3LDcgJiM0Mzs0NjAsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc2V2X21hcF9wZXJjcHVfZGF0YSh2b2lkKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBrdm1fZ3Vlc3RfY3B1X29mZmxpbmUoYm9vbCBzaHV0ZG93bilcbiYjNDM7c3RhdGljIHZvaWQga3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKVxuIHtcbiBcdGt2bV9kaXNhYmxlX3N0ZWFsX3RpbWUoKTtcbiBcdGlmIChrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9QVl9FT0kpKVxuQEAgLTQ2NSwyMyAmIzQzOzQ2OCwzMCBAQCBzdGF0aWMgdm9pZCBrdm1fZ3Vlc3RfY3B1X29mZmxpbmUoYm9vbCBzaHV0ZG93bilcbiBcdGlmIChrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9NSUdSQVRJT05fQ09OVFJPTCkpXG4gXHRcdHdybXNycShNU1JfS1ZNX01JR1JBVElPTl9DT05UUk9MLCAwKTtcbiBcdGt2bV9wdl9kaXNhYmxlX2FwZigpO1xuLVx0aWYgKCFzaHV0ZG93bilcbiYjNDM7XHRpZiAoYWN0aW9uICE9IEtWTV9HVUVTVF9TSFVURE9XTilcbiBcdFx0YXBmX3Rhc2tfd2FrZV9hbGwoKTtcbi1cdGt2bWNsb2NrX2Rpc2FibGUoKTtcbiYjNDM7XG4mIzQzO1x0a3ZtY2xvY2tfY3B1X2FjdGlvbihhY3Rpb24pO1xuIH1cbiBcbi1zdGF0aWMgaW50IGt2bV9jcHVfb25saW5lKHVuc2lnbmVkIGludCBjcHUpXG4mIzQzO3N0YXRpYyB2b2lkIF9fa3ZtX2NwdV9vbmxpbmUodW5zaWduZWQgaW50IGNwdSwgZW51bSBrdm1fZ3Vlc3RfY3B1X2FjdGlvbiBhY3Rpb24pXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiYjNDM7XHRrdm1jbG9ja19jcHVfYWN0aW9uKGFjdGlvbik7XG4gXHRrdm1fZ3Vlc3RfY3B1X2luaXQoKTtcbiBcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbi1cdHJldHVybiAwO1xuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1NNUFxuIFxuJiM0MztzdGF0aWMgaW50IGt2bV9jcHVfb25saW5lKHVuc2lnbmVkIGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRfX2t2bV9jcHVfb25saW5lKGNwdSwgS1ZNX0dVRVNUX0FQX09OTElORSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIERFRklORV9QRVJfQ1BVKGNwdW1hc2tfdmFyX3QsIF9fcHZfY3B1X21hc2spO1xuIFxuIHN0YXRpYyBib29sIHB2X3RsYl9mbHVzaF9zdXBwb3J0ZWQodm9pZClcbkBAIC03MjMsNyAmIzQzOzczMyw3IEBAIHN0YXRpYyBpbnQga3ZtX2NwdV9kb3duX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSlcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4tXHRrdm1fZ3Vlc3RfY3B1X29mZmxpbmUoZmFsc2UpO1xuJiM0MztcdGt2bV9ndWVzdF9jcHVfb2ZmbGluZShLVk1fR1VFU1RfQVBfT0ZGTElORSk7XG4gXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNzM0LDcgJiM0Mzs3NDQsNyBAQCBzdGF0aWMgaW50IGt2bV9zdXNwZW5kKHZvaWQgKmRhdGEpXG4ge1xuIFx0dTY0IHZhbCA9IDA7XG4gXG4tXHRrdm1fZ3Vlc3RfY3B1X29mZmxpbmUoZmFsc2UpO1xuJiM0MztcdGt2bV9ndWVzdF9jcHVfb2ZmbGluZShLVk1fR1VFU1RfQlNQX1NVU1BFTkQpO1xuIFxuICNpZmRlZiBDT05GSUdfQVJDSF9DUFVJRExFX0hBTFRQT0xMXG4gXHRpZiAoa3ZtX3BhcmFfaGFzX2ZlYXR1cmUoS1ZNX0ZFQVRVUkVfUE9MTF9DT05UUk9MKSlcbkBAIC03NDYsNyAmIzQzOzc1Niw3IEBAIHN0YXRpYyBpbnQga3ZtX3N1c3BlbmQodm9pZCAqZGF0YSlcbiBcbiBzdGF0aWMgdm9pZCBrdm1fcmVzdW1lKHZvaWQgKmRhdGEpXG4ge1xuLVx0a3ZtX2NwdV9vbmxpbmUocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7XG4mIzQzO1x0X19rdm1fY3B1X29ubGluZShyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCBLVk1fR1VFU1RfQlNQX1JFU1VNRSk7XG4gXG4gI2lmZGVmIENPTkZJR19BUkNIX0NQVUlETEVfSEFMVFBPTExcbiBcdGlmIChrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9QT0xMX0NPTlRST0wpIFx1MDAyNlx1MDAyNiBoYXNfZ3Vlc3RfcG9sbClcbkBAIC03NjUsNyAmIzQzOzc3NSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc3lzY29yZSBrdm1fc3lzY29yZSA9IHtcbiBcbiBzdGF0aWMgdm9pZCBrdm1fcHZfZ3Vlc3RfY3B1X3JlYm9vdCh2b2lkICp1bnVzZWQpXG4ge1xuLVx0a3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKHRydWUpO1xuJiM0MztcdGt2bV9ndWVzdF9jcHVfb2ZmbGluZShLVk1fR1VFU1RfU0hVVERPV04pO1xuIH1cbiBcbiBzdGF0aWMgaW50IGt2bV9wdl9yZWJvb3Rfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG5AQCAtNzg5LDcgJiM0Mzs3OTksNyBAQCBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGt2bV9wdl9yZWJvb3RfbmIgPSB7XG4gI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QXG4gc3RhdGljIHZvaWQga3ZtX2NyYXNoX3NodXRkb3duKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbi1cdGt2bV9ndWVzdF9jcHVfb2ZmbGluZSh0cnVlKTtcbiYjNDM7XHRrdm1fZ3Vlc3RfY3B1X29mZmxpbmUoS1ZNX0dVRVNUX1NIVVRET1dOKTtcbiBcdG5hdGl2ZV9tYWNoaW5lX2NyYXNoX3NodXRkb3duKHJlZ3MpO1xuIH1cbiAjZW5kaWZcbkBAIC05MTEsNiAmIzQzOzkyMSwyNiBAQCBib29sIGt2bV9wYXJhX2F2YWlsYWJsZSh2b2lkKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fcGFyYV9hdmFpbGFibGUpO1xuIFxuJiM0MztzdGF0aWMgdTMyIF9faW5pdCBrdm1fY3B1aWRfdGltaW5nX2luZm9fbGVhZih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGJhc2UgPSBrdm1fY3B1aWRfYmFzZSgpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJhc2UgfHwgY3B1aWRfZWF4KGJhc2UpIFx1MDAzYyAoYmFzZSB8IEtWTV9DUFVJRF9USU1JTkdfSU5GTykpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJhc2UgfCBLVk1fQ1BVSURfVElNSU5HX0lORk87XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGt2bV9nZXRfdHNjX2toeih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGt2bV90c2Nfa2h6X2NwdWlkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBrdm1fZ2V0X2NwdV9raHoodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBrdm1fY3B1X2toel9jcHVpZDtcbiYjNDM7fVxuJiM0MztcbiB1bnNpZ25lZCBpbnQga3ZtX2FyY2hfcGFyYV9mZWF0dXJlcyh2b2lkKVxuIHtcbiBcdHJldHVybiBjcHVpZF9lYXgoa3ZtX2NwdWlkX2Jhc2UoKSB8IEtWTV9DUFVJRF9GRUFUVVJFUyk7XG5AQCAtOTYwLDYgJiM0Mzs5OTAsOCBAQCBzdGF0aWMgdm9pZCBfX2luaXQga3ZtX2luaXRfcGxhdGZvcm0odm9pZClcbiBcdFx0Lm1hc2tfbG8gPSAodTMyKSh+KFNaXzRHIC0gdG9sdWQgLSAxKSkgfCBNVFJSX1BIWVNNQVNLX1YsXG4gXHRcdC5tYXNrX2hpID0gKEJJVF9VTEwoYm9vdF9jcHVfZGF0YS54ODZfcGh5c19iaXRzKSAtIDEpIFx1MDAzZVx1MDAzZSAzMixcbiBcdH07XG4mIzQzO1x0dTMyIHRpbWluZ19pbmZvX2xlYWYsIGFwaWNfa2h6O1xuJiM0MztcdGJvb2wgdHNjX2lzX3JlbGlhYmxlO1xuIFxuIFx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0dVRVNUX01FTV9FTkNSWVBUKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9NSUdSQVRJT05fQ09OVFJPTCkpIHtcbkBAIC0xMDA3LDcgJiM0MzsxMDM5LDQ0IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrdm1faW5pdF9wbGF0Zm9ybSh2b2lkKVxuIFx0XHRcdHdybXNycShNU1JfS1ZNX01JR1JBVElPTl9DT05UUk9MLFxuIFx0XHRcdCAgICAgICBLVk1fTUlHUkFUSU9OX1JFQURZKTtcbiBcdH1cbi1cdGt2bWNsb2NrX2luaXQoKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiBLVk0gYWR2ZXJ0aXNlcyB0aGUgZnJlcXVlbmN5IGRpcmVjdGx5IGluIENQVUlELCB1c2UgdGhhdCBpbnN0ZWFkXG4mIzQzO1x0ICogb2YgcmV2ZXJzZS1jYWxjdWxhdGluZyBpdCBmcm9tIHRoZSBLVk0gY2xvY2sgZGF0YSwgb3Igd29yc2UsIHRyeWluZ1xuJiM0MztcdCAqIHRvIGNhbGlicmF0YXRlIHRoZSBUU0MgdXNpbmcgYW4gZW11bGF0ZWQgZGV2aWNlLlxuJiM0MztcdCAqL1xuJiM0MztcdHRpbWluZ19pbmZvX2xlYWYgPSBrdm1fY3B1aWRfdGltaW5nX2luZm9fbGVhZigpO1xuJiM0MztcdGlmICh0aW1pbmdfaW5mb19sZWFmKSB7XG4mIzQzO1x0XHRrdm1fdHNjX2toel9jcHVpZCA9IGNwdWlkX2VheCh0aW1pbmdfaW5mb19sZWFmKTtcbiYjNDM7XHRcdGlmIChrdm1fdHNjX2toel9jcHVpZCkge1xuJiM0MztcdFx0XHR4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeiA9IGt2bV9nZXRfdHNjX2toejtcbiYjNDM7XHRcdFx0eDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHogPSBrdm1fZ2V0X3RzY19raHo7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogVGhlIGxlYWYgYWxzbyBpbmNsdWRlcyB0aGUgbG9jYWwgQVBJQyBidXMvdGltZXIgZnJlcXVlbmN5LiovXG4mIzQzO1x0XHRhcGljX2toeiA9IGNwdWlkX2VieCh0aW1pbmdfaW5mb19sZWFmKTtcbiYjNDM7XHRcdGlmIChhcGljX2toeilcbiYjNDM7XHRcdFx0YXBpY19zZXRfdGltZXJfcGVyaW9kX2toeihhcGljX2toeiwgXCYjMzQ7S1ZNIGh5cGVydmlzb3JcJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcmVmZXIgQ1BVSUQuMHgxNiBvdmVyIEtWTSYjMzk7cyBQViBDUFVJRCB3aGVuIHBvc3NpYmxlLCBhcyB0aGUgYmFzZSBDUFVcbiYjNDM7XHQgKiBmcmVxdWVuY3kgaXNuJiMzOTt0IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIHRoZSBUU0MgZnJlcXVlbmN5LlxuJiM0MztcdCAqL1xuJiM0MztcdGt2bV9jcHVfa2h6X2NwdWlkID0gX19jcHVfa2h6X2Zyb21fY3B1aWQoKTtcbiYjNDM7XHRpZiAoa3ZtX2NwdV9raHpfY3B1aWQpXG4mIzQzO1x0XHR4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeiA9IGt2bV9nZXRfY3B1X2toejtcbiYjNDM7XG4mIzQzOyAgICAgICAgLypcbiYjNDM7ICAgICAgICAgKiBJZiB0aGUgVFNDIGNvdW50cyBhdCBhIGNvbnN0YW50IGZyZXF1ZW5jeSBhY3Jvc3MgUC9UIHN0YXRlcyBhbmQgaW5cbiYjNDM7ICAgICAgICAgKiBkZWVwIEMtc3RhdGVzLCB0cmVhdCB0aGUgVFNDIHJlbGlhYmxlLCBhcyBndWFyYW50ZWVkIGJ5IEtWTS5cbiYjNDM7ICAgICAgICAgKi9cbiYjNDM7XHR0c2NfaXNfcmVsaWFibGUgPSBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTk9OU1RPUF9UU0MpO1xuJiM0MztcdGlmICh0c2NfaXNfcmVsaWFibGUpXG4mIzQzO1x0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7XG4mIzQzO1xuJiM0MztcdGt2bWNsb2NrX2luaXQodHNjX2lzX3JlbGlhYmxlKTtcbiBcdHg4Nl9wbGF0Zm9ybS5hcGljX3Bvc3RfaW5pdCA9IGt2bV9hcGljX2luaXQ7XG4gXG4gXHQvKlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jIGIvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmNcbmluZGV4IGNiM2QwY2ExZmEyMjVhLi44NDJmMzhjNWY2Y2FhZCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suY1xuQEAgLTEyLDcgJiM0MzsxMiw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaGFyZGlycS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3B1aG90cGx1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL2Nsb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2V0X21lbW9yeS5oXHUwMDNlXG5AQCAtNTQsNiAmIzQzOzUzLDggQEAgc3RhdGljIHN0cnVjdCBwdmNsb2NrX3ZzeXNjYWxsX3RpbWVfaW5mbyAqaHZjbG9ja19tZW07XG4gREVGSU5FX1BFUl9DUFUoc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICosIGh2X2Nsb2NrX3Blcl9jcHUpO1xuIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTF9HUEwoaHZfY2xvY2tfcGVyX2NwdSk7XG4gXG4mIzQzO3N0YXRpYyBib29sIGt2bWNsb2NrX3N1c3BlbmRlZDtcbiYjNDM7XG4gLypcbiAgKiBUaGUgd2FsbGNsb2NrIGlzIHRoZSB0aW1lIG9mIGRheSB3aGVuIHdlIGJvb3RlZC4gU2luY2UgdGhlbiwgc29tZSB0aW1lIG1heVxuICAqIGhhdmUgZWxhcHNlZCBzaW5jZSB0aGUgaHlwZXJ2aXNvciB3cm90ZSB0aGUgZGF0YS4gU28gd2UgdHJ5IHRvIGFjY291bnQgZm9yXG5AQCAtNjEsNiAmIzQzOzYyLDcgQEAgRVhQT1JUX1BFUl9DUFVfU1lNQk9MX0dQTChodl9jbG9ja19wZXJfY3B1KTtcbiAgKi9cbiBzdGF0aWMgdm9pZCBrdm1fZ2V0X3dhbGxjbG9jayhzdHJ1Y3QgdGltZXNwZWM2NCAqbm93KVxuIHtcbiYjNDM7XHRXQVJOX09OX09OQ0Uoa3ZtY2xvY2tfc3VzcGVuZGVkKTtcbiBcdHdybXNycShtc3Jfa3ZtX3dhbGxfY2xvY2ssIHNsb3dfdmlydF90b19waHlzKFx1MDAyNndhbGxfY2xvY2spKTtcbiBcdHByZWVtcHRfZGlzYWJsZSgpO1xuIFx0cHZjbG9ja19yZWFkX3dhbGxjbG9jayhcdTAwMjZ3YWxsX2Nsb2NrLCB0aGlzX2NwdV9wdnRpKCksIG5vdyk7XG5AQCAtNzIsNiAmIzQzOzc0LDI1IEBAIHN0YXRpYyBpbnQga3ZtX3NldF93YWxsY2xvY2soY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKm5vdylcbiBcdHJldHVybiAtRU5PREVWO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQga3ZtX3JlZ2lzdGVyX2Nsb2NrKGNoYXIgKnR4dClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwdmNsb2NrX3ZzeXNjYWxsX3RpbWVfaW5mbyAqc3JjID0gdGhpc19jcHVfaHZjbG9jaygpO1xuJiM0MztcdHU2NCBwYTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzcmMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBhID0gc2xvd192aXJ0X3RvX3BoeXMoXHUwMDI2c3JjLVx1MDAzZXB2dGkpIHwgMHgwMVVMTDtcbiYjNDM7XHR3cm1zcnEobXNyX2t2bV9zeXN0ZW1fdGltZSwgcGEpO1xuJiM0MztcdHByX2RlYnVnKFwmIzM0O2t2bS1jbG9jazogY3B1ICVkLCBtc3IgJWxseCwgJXNcJiMzNDssIHNtcF9wcm9jZXNzb3JfaWQoKSwgcGEsIHR4dCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGt2bWNsb2NrX2Rpc2FibGUodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmIChtc3Jfa3ZtX3N5c3RlbV90aW1lKVxuJiM0MztcdFx0bmF0aXZlX3dyaXRlX21zcihtc3Jfa3ZtX3N5c3RlbV90aW1lLCAwKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdTY0IGt2bV9jbG9ja19yZWFkKHZvaWQpXG4ge1xuIFx0dTY0IHJldDtcbkBAIC0xMTMsMTggJiM0MzsxMzQsNzQgQEAgc3RhdGljIG5vaW5zdHIgdTY0IGt2bV9zY2hlZF9jbG9ja19yZWFkKHZvaWQpXG4gXHRyZXR1cm4gcHZjbG9ja19jbG9ja3NvdXJjZV9yZWFkX25vd2QodGhpc19jcHVfcHZ0aSgpKSAtIGt2bV9zY2hlZF9jbG9ja19vZmZzZXQ7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fc2NoZWRfY2xvY2tfaW5pdChib29sIHN0YWJsZSlcbiYjNDM7c3RhdGljIHZvaWQga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcbiB7XG4tXHRpZiAoIXN0YWJsZSlcbi1cdFx0Y2xlYXJfc2NoZWRfY2xvY2tfc3RhYmxlKCk7XG4tXHRrdm1fc2NoZWRfY2xvY2tfb2Zmc2V0ID0ga3ZtX2Nsb2NrX3JlYWQoKTtcbi1cdHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayhrdm1fc2NoZWRfY2xvY2tfcmVhZCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTdG9wIGhvc3Qgd3JpdGVzIHRvIGt2bWNsb2NrIGltbWVkaWF0ZWx5IHByaW9yIHRvIHN1c3BlbmQvaGliZXJuYXRlLlxuJiM0MztcdCAqIElmIHRoZSBzeXN0ZW0gaXMgaGliZXJuYXRpbmcsIHRoZW4ga3ZtY2xvY2sgd2lsbCBsaWtlbHkgcmVzaWRlIGF0IGFcbiYjNDM7XHQgKiBkaWZmZXJlbnQgcGh5c2ljYWwgYWRkcmVzcyB3aGVuIHRoZSBzeXN0ZW0gYXdha2VucywgYW5kIGhvc3Qgd3JpdGVzXG4mIzQzO1x0ICogdG8gdGhlIG9sZCBhZGRyZXNzIHByaW9yIHRvIHJlY29uZmlndXJpbmcga3ZtY2xvY2sgd291bGQgY2xvYmJlclxuJiM0MztcdCAqIHJhbmRvbSBtZW1vcnkuXG4mIzQzO1x0ICovXG4mIzQzO1x0a3ZtY2xvY2tfc3VzcGVuZGVkID0gdHJ1ZTtcbiYjNDM7XHRrdm1jbG9ja19kaXNhYmxlKCk7XG4mIzQzO31cbiBcbi1cdHByX2luZm8oXCYjMzQ7a3ZtLWNsb2NrOiB1c2luZyBzY2hlZCBvZmZzZXQgb2YgJWxsdSBjeWNsZXNcJiMzNDssXG4tXHRcdGt2bV9zY2hlZF9jbG9ja19vZmZzZXQpO1xuJiM0MzsjaWZkZWYgQ09ORklHX1NNUFxuJiM0MztzdGF0aWMgdm9pZCBrdm1fc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRrdm1fcmVnaXN0ZXJfY2xvY2soXCYjMzQ7c2Vjb25kYXJ5IGNwdSwgc3RhcnR1cFwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4gXG4tXHRCVUlMRF9CVUdfT04oc2l6ZW9mKGt2bV9zY2hlZF9jbG9ja19vZmZzZXQpIFx1MDAzZVxuLVx0XHRzaXplb2YoKChzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqKU5VTEwpLVx1MDAzZXN5c3RlbV90aW1lKSk7XG4mIzQzO3N0YXRpYyB2b2lkIGt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRrdm1jbG9ja19zdXNwZW5kZWQgPSBmYWxzZTtcbiYjNDM7XHRrdm1fcmVnaXN0ZXJfY2xvY2soXCYjMzQ7cHJpbWFyeSBjcHUsIHNjaGVkX2Nsb2NrIHJlc3VtZVwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGt2bWNsb2NrX3N1c3BlbmQoc3RydWN0IGNsb2Nrc291cmNlICpjcylcbiYjNDM7e1xuJiM0MztcdGt2bWNsb2NrX3N1c3BlbmRlZCA9IHRydWU7XG4mIzQzO1x0a3ZtY2xvY2tfZGlzYWJsZSgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBrdm1jbG9ja19yZXN1bWUoc3RydWN0IGNsb2Nrc291cmNlICpjcylcbiYjNDM7e1xuJiM0MztcdGt2bWNsb2NrX3N1c3BlbmRlZCA9IGZhbHNlO1xuJiM0MztcdGt2bV9yZWdpc3Rlcl9jbG9jayhcJiMzNDtwcmltYXJ5IGNwdSwgY2xvY2tzb3VyY2UgcmVzdW1lXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBrdm1jbG9ja19jcHVfYWN0aW9uKGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChhY3Rpb24pIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGUgQlNQJiMzOTtzIGNsb2NrIGlzIG1hbmFnZWQgdmlhIGNsb2Nrc291cmNlIHN1c3BlbmQvcmVzdW1lLFxuJiM0MztcdFx0ICogdG8gZW5zdXJlIGl0JiMzOTtzIGVuYWJsZWQvZGlzYWJsZWQgd2hlbiB0aW1la2VlcGluZyBuZWVkcyBpdFxuJiM0MztcdFx0ICogdG8gYmUsIGUuZy4gYmVmb3JlIHJlYWRpbmcgd2FsbGNsb2NrICh3aGljaCB1c2VzIGt2bWNsb2NrKS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdGNhc2UgS1ZNX0dVRVNUX0JTUF9TVVNQRU5EOlxuJiM0MztcdGNhc2UgS1ZNX0dVRVNUX0JTUF9SRVNVTUU6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEtWTV9HVUVTVF9BUF9PTkxJTkU6XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogU2Vjb25kYXJ5IENQVXMgdXNlIGEgZGVkaWNhdGVkIGhvb2sgdG8gZW5hYmxlIGt2bWNsb2NrIGVhcmx5XG4mIzQzO1x0XHQgKiBkdXJpbmcgYnJpbmd1cCwgdGhlcmUmIzM5O3Mgbm90aGluZyB0byBiZSBkb25lIGR1cmluZyBDUFUgb25saW5lXG4mIzQzO1x0XHQgKiAod2hpY2ggcnVucyBhdCBDUFVIUF9BUF9PTkxJTkVfRFlOKS4gIFdoZW4ga3ZtY2xvY2sgaXMgYmVpbmdcbiYjNDM7XHRcdCAqIHVzZWQgYXMgc2NoZWRfY2xvY2ssIGt2bWNsb2NrIG11c3QgYmUgZW5hYmxlZCAqdmVyeSogZWFybHksXG4mIzQzO1x0XHQgKiBhbmQgZXZlbiB3aGVuIGt2bWNsb2NrIGlzIFwmIzM0O29ubHlcJiMzNDsgYmVpbmcgdXNlZCBmb3IgdGhlIG1haW5cbiYjNDM7XHRcdCAqIGNsb2Nrc291cmNlLCBpdCBzdGlsbCBuZWVkcyB0byBiZSBlbmFibGVkIGxvbmcgYmVmb3JlIHRoZVxuJiM0MztcdFx0ICogZHluYW1pYyBDUFVIUCBjYWxscyBhcmUgbWFkZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBLVk1fR1VFU1RfQVBfT0ZGTElORTpcbiYjNDM7XHRjYXNlIEtWTV9HVUVTVF9TSFVURE9XTjpcbiYjNDM7XHRcdGt2bWNsb2NrX2Rpc2FibGUoKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRXQVJOX09OX09OQ0UoMSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4gfVxuIFxuIC8qXG5AQCAtMTM2LDkgJiM0MzsyMTMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3NjaGVkX2Nsb2NrX2luaXQoYm9vbCBzdGFibGUpXG4gICogcG9sbCBvZiBndWVzdHMgY2FuIGJlIHJ1bm5pbmcgYW5kIHRyb3VibGUgZWFjaCBvdGhlci4gU28gd2UgcHJlc2V0XG4gICogbHBqIGhlcmVcbiAgKi9cbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fZ2V0X3RzY19raHoodm9pZClcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQga3ZtY2xvY2tfZ2V0X3RzY19raHoodm9pZClcbiB7XG4tXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKTtcbiBcdHJldHVybiBwdmNsb2NrX3RzY19raHoodGhpc19jcHVfcHZ0aSgpKTtcbiB9XG4gXG5AQCAtMTQ3LDcgJiM0MzsyMjMsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQga3ZtX2dldF9wcmVzZXRfbHBqKHZvaWQpXG4gXHR1bnNpZ25lZCBsb25nIGtoejtcbiBcdHU2NCBscGo7XG4gXG4tXHRraHogPSBrdm1fZ2V0X3RzY19raHooKTtcbiYjNDM7XHRraHogPSBrdm1jbG9ja19nZXRfdHNjX2toeigpO1xuIFxuIFx0bHBqID0gKCh1NjQpa2h6ICogMTAwMCk7XG4gXHRkb19kaXYobHBqLCBIWik7XG5AQCAtMTg1LDQzICYjNDM7MjYxLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2Uga3ZtX2Nsb2NrID0ge1xuIFx0LmZsYWdzXHRcdD0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsXG4gXHQuaWRcdFx0PSBDU0lEX1g4Nl9LVk1fQ0xLLFxuIFx0LmVuYWJsZVx0XHQ9IGt2bV9jc19lbmFibGUsXG4mIzQzO1x0LnN1c3BlbmRcdD0ga3ZtY2xvY2tfc3VzcGVuZCxcbiYjNDM7XHQucmVzdW1lXHRcdD0ga3ZtY2xvY2tfcmVzdW1lLFxuIH07XG4gXG4tc3RhdGljIHZvaWQga3ZtX3JlZ2lzdGVyX2Nsb2NrKGNoYXIgKnR4dClcbi17XG4tXHRzdHJ1Y3QgcHZjbG9ja192c3lzY2FsbF90aW1lX2luZm8gKnNyYyA9IHRoaXNfY3B1X2h2Y2xvY2soKTtcbi1cdHU2NCBwYTtcbi1cbi1cdGlmICghc3JjKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRwYSA9IHNsb3dfdmlydF90b19waHlzKFx1MDAyNnNyYy1cdTAwM2VwdnRpKSB8IDB4MDFVTEw7XG4tXHR3cm1zcnEobXNyX2t2bV9zeXN0ZW1fdGltZSwgcGEpO1xuLVx0cHJfZGVidWcoXCYjMzQ7a3ZtLWNsb2NrOiBjcHUgJWQsIG1zciAlbGx4LCAlc1wmIzM0Oywgc21wX3Byb2Nlc3Nvcl9pZCgpLCBwYSwgdHh0KTtcbi19XG4tXG4tc3RhdGljIHZvaWQga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcbi17XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXG4te1xuLVx0a3ZtX3JlZ2lzdGVyX2Nsb2NrKFwmIzM0O3ByaW1hcnkgY3B1IGNsb2NrLCByZXN1bWVcJiMzNDspO1xuLX1cbi1cbi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDXG4tc3RhdGljIHZvaWQga3ZtX3NldHVwX3NlY29uZGFyeV9jbG9jayh2b2lkKVxuLXtcbi1cdGt2bV9yZWdpc3Rlcl9jbG9jayhcJiMzNDtzZWNvbmRhcnkgY3B1IGNsb2NrXCYjMzQ7KTtcbi19XG4tI2VuZGlmXG4tXG4tdm9pZCBrdm1jbG9ja19kaXNhYmxlKHZvaWQpXG4te1xuLVx0aWYgKG1zcl9rdm1fc3lzdGVtX3RpbWUpXG4tXHRcdG5hdGl2ZV93cml0ZV9tc3IobXNyX2t2bV9zeXN0ZW1fdGltZSwgMCk7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIF9faW5pdCBrdm1jbG9ja19pbml0X21lbSh2b2lkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbmNwdXM7XG5AQCAtMzA4LDkgJiM0MzszNTEsMzUgQEAgc3RhdGljIGludCBrdm1jbG9ja19zZXR1cF9wZXJjcHUodW5zaWduZWQgaW50IGNwdSlcbiBcdHJldHVybiBwID8gMCA6IC1FTk9NRU07XG4gfVxuIFxuLXZvaWQgX19pbml0IGt2bWNsb2NrX2luaXQodm9pZClcbiYjNDM7c3RhdGljIF9faW5pdCB2b2lkIGt2bV9zY2hlZF9jbG9ja19pbml0KGJvb2wgc3RhYmxlKVxuIHtcbi1cdHU4IGZsYWdzO1xuJiM0MztcdC8qIEVuc3VyZSB0aGUgb2Zmc2V0IGlzIGNvbmZpZ3VyZWQgYmVmb3JlIG1ha2luZyBrdm1jbG9jayB2aXNpYmxlISAqL1xuJiM0MztcdGt2bV9zY2hlZF9jbG9ja19vZmZzZXQgPSBrdm1fY2xvY2tfcmVhZCgpO1xuJiM0MztcbiYjNDM7XHRpZiAoX19wYXJhdmlydF9zZXRfc2NoZWRfY2xvY2soa3ZtX3NjaGVkX2Nsb2NrX3JlYWQsIHN0YWJsZSxcbiYjNDM7XHRcdFx0XHQgICAgICAga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgQlNQJiMzOTtzIGNsb2NrIGlzIG1hbmFnZWQgdmlhIGRlZGljYXRlZCBzY2hlZF9jbG9jayBzYXZlL3Jlc3RvcmVcbiYjNDM7XHQgKiBob29rcyB3aGVuIGt2bWNsb2NrIGlzIHVzZWQgYXMgc2NoZWRfY2xvY2ssIGFzIHNjaGVkX2Nsb2NrIG5lZWRzIHRvXG4mIzQzO1x0ICogYmUga2VwdCBhbGl2ZSB1bnRpbCB0aGUgdmVyeSBlbmQgb2Ygc3VzcGVuZCBlbnRyeSwgYW5kIHJlc3RvcmVkIGFzXG4mIzQzO1x0ICogcXVpY2tseSBhcyBwb3NzaWJsZSBhZnRlciByZXN1bWUuXG4mIzQzO1x0ICovXG4mIzQzO1x0a3ZtX2Nsb2NrLnN1c3BlbmQgPSBOVUxMO1xuJiM0MztcdGt2bV9jbG9jay5yZXN1bWUgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRwcl9pbmZvKFwmIzM0O2t2bS1jbG9jazogdXNpbmcgc2NoZWQgb2Zmc2V0IG9mICVsbHUgY3ljbGVzXCYjMzQ7LFxuJiM0MztcdFx0a3ZtX3NjaGVkX2Nsb2NrX29mZnNldCk7XG4mIzQzO1xuJiM0MztcdEJVSUxEX0JVR19PTihzaXplb2Yoa3ZtX3NjaGVkX2Nsb2NrX29mZnNldCkgXHUwMDNlXG4mIzQzO1x0XHRzaXplb2YoKChzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqKU5VTEwpLVx1MDAzZXN5c3RlbV90aW1lKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgX19pbml0IGt2bWNsb2NrX2luaXQoYm9vbCBwcmVmZXJfdHNjKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBzdGFibGUgPSBmYWxzZTtcbiBcbiBcdGlmICgha3ZtX3BhcmFfYXZhaWxhYmxlKCkgfHwgIWt2bWNsb2NrKVxuIFx0XHRyZXR1cm47XG5AQCAtMzM0LDM4ICYjNDM7NDAzLDQxIEBAIHZvaWQgX19pbml0IGt2bWNsb2NrX2luaXQodm9pZClcbiBcdFx0bXNyX2t2bV9zeXN0ZW1fdGltZSwgbXNyX2t2bV93YWxsX2Nsb2NrKTtcbiBcbiBcdHRoaXNfY3B1X3dyaXRlKGh2X2Nsb2NrX3Blcl9jcHUsIFx1MDAyNmh2X2Nsb2NrX2Jvb3RbMF0pO1xuLVx0a3ZtX3JlZ2lzdGVyX2Nsb2NrKFwmIzM0O3ByaW1hcnkgY3B1IGNsb2NrXCYjMzQ7KTtcbiYjNDM7XHRrdm1fcmVnaXN0ZXJfY2xvY2soXCYjMzQ7cHJpbWFyeSBjcHUsIG9ubGluZVwmIzM0Oyk7XG4gXHRwdmNsb2NrX3NldF9wdnRpX2NwdTBfdmEoaHZfY2xvY2tfYm9vdCk7XG4gXG4tXHRpZiAoa3ZtX3BhcmFfaGFzX2ZlYXR1cmUoS1ZNX0ZFQVRVUkVfQ0xPQ0tTT1VSQ0VfU1RBQkxFX0JJVCkpXG4mIzQzO1x0aWYgKGt2bV9wYXJhX2hhc19mZWF0dXJlKEtWTV9GRUFUVVJFX0NMT0NLU09VUkNFX1NUQUJMRV9CSVQpKSB7XG4gXHRcdHB2Y2xvY2tfc2V0X2ZsYWdzKFBWQ0xPQ0tfVFNDX1NUQUJMRV9CSVQpO1xuIFxuLVx0ZmxhZ3MgPSBwdmNsb2NrX3JlYWRfZmxhZ3MoXHUwMDI2aHZfY2xvY2tfYm9vdFswXS5wdnRpKTtcbi1cdGt2bV9zY2hlZF9jbG9ja19pbml0KGZsYWdzIFx1MDAyNiBQVkNMT0NLX1RTQ19TVEFCTEVfQklUKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBDaGVjayBpZiB0aGUgY2xvY2sgaXMgc3RhYmxlICphZnRlciogbWFya2luZyBUU0NfU1RBQkxFIGFzIGFcbiYjNDM7XHRcdCAqIHZhbGlkIGZsYWcuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHN0YWJsZSA9IHB2Y2xvY2tfcmVhZF9mbGFncyhcdTAwMjZodl9jbG9ja19ib290WzBdLnB2dGkpIFx1MDAyNlxuJiM0MztcdFx0XHQgUFZDTE9DS19UU0NfU1RBQkxFX0JJVDtcbiYjNDM7XHR9XG4gXG4tXHR4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX3RzYyA9IGt2bV9nZXRfdHNjX2toejtcbi1cdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ID0ga3ZtX2dldF90c2Nfa2h6O1xuJiM0MztcbiYjNDM7XHRpZiAoIXg4Nl9pbml0Lmh5cGVyLmdldF90c2Nfa2h6KVxuJiM0MztcdFx0eDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHogPSBrdm1jbG9ja19nZXRfdHNjX2toejtcbiYjNDM7XHRpZiAoIXg4Nl9pbml0Lmh5cGVyLmdldF9jcHVfa2h6KVxuJiM0MztcdFx0eDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHogPSBrdm1jbG9ja19nZXRfdHNjX2toejtcbiBcdHg4Nl9wbGF0Zm9ybS5nZXRfd2FsbGNsb2NrID0ga3ZtX2dldF93YWxsY2xvY2s7XG4gXHR4ODZfcGxhdGZvcm0uc2V0X3dhbGxjbG9jayA9IGt2bV9zZXRfd2FsbGNsb2NrO1xuLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUNcbiYjNDM7I2lmZGVmIENPTkZJR19TTVBcbiBcdHg4Nl9jcHVpbml0LmVhcmx5X3BlcmNwdV9jbG9ja19pbml0ID0ga3ZtX3NldHVwX3NlY29uZGFyeV9jbG9jaztcbiAjZW5kaWZcbi1cdHg4Nl9wbGF0Zm9ybS5zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlID0ga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGU7XG4tXHR4ODZfcGxhdGZvcm0ucmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSA9IGt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlO1xuIFx0a3ZtX2dldF9wcmVzZXRfbHBqKCk7XG4gXG4gXHQvKlxuLVx0ICogWDg2X0ZFQVRVUkVfTk9OU1RPUF9UU0MgaXMgVFNDIHJ1bnMgYXQgY29uc3RhbnQgcmF0ZVxuLVx0ICogd2l0aCBQL1Qgc3RhdGVzIGFuZCBkb2VzIG5vdCBzdG9wIGluIGRlZXAgQy1zdGF0ZXMuXG4tXHQgKlxuLVx0ICogSW52YXJpYW50IFRTQyBleHBvc2VkIGJ5IGhvc3QgbWVhbnMga3ZtY2xvY2sgaXMgbm90IG5lY2Vzc2FyeTpcbi1cdCAqIGNhbiB1c2UgVFNDIGFzIGNsb2Nrc291cmNlLlxuLVx0ICpcbiYjNDM7XHQgKiBJZiBUU0MgaXMgcHJlZmVycmVkIG92ZXIga3ZtbG9jaywgZHJvcCBrdm1jbG9jayYjMzk7cyByYXRpbmcgc28gdGhhdCBUU0NcbiYjNDM7XHQgKiBpcyBjaG9zZW4gYXMgdGhlIGNsb2Nrc291cmNlIChidXQgc3RpbGwgcmVnaXN0ZXIga3ZtY2xvY2sgaW4gY2FzZVxuJiM0MztcdCAqIHRoZSBrZXJuZWwgZG9lc24mIzM5O3Qgd2FudCB0byB1c2UgVFNDIGZvciB3aGF0ZXZlciByZWFzb24pLlxuIFx0ICovXG4tXHRpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQykgXHUwMDI2XHUwMDI2XG4tXHQgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05PTlNUT1BfVFNDKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhY2hlY2tfdHNjX3Vuc3RhYmxlKCkpXG4mIzQzO1x0aWYgKHByZWZlcl90c2MpXG4gXHRcdGt2bV9jbG9jay5yYXRpbmcgPSAyOTk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0a3ZtX3NjaGVkX2Nsb2NrX2luaXQoc3RhYmxlKTtcbiBcbiBcdGNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KFx1MDAyNmt2bV9jbG9jaywgTlNFQ19QRVJfU0VDKTtcbiBcdHB2X2luZm8ubmFtZSA9IFwmIzM0O0tWTVwmIzM0OztcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHZjbG9jay5jIGIvYXJjaC94ODYva2VybmVsL3B2Y2xvY2suY1xuaW5kZXggYjNmODEzNzljMmZjMDYuLjhkMDk4ODQxYTIyNWY2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL3B2Y2xvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL3B2Y2xvY2suY1xuQEAgLTE2LDExICYjNDM7MTYsMTIgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcHZjbG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3ZndG9kLmhcdTAwM2VcbiBcbi1zdGF0aWMgdTggdmFsaWRfZmxhZ3MgX19yZWFkX21vc3RseSA9IDA7XG4tc3RhdGljIHN0cnVjdCBwdmNsb2NrX3ZzeXNjYWxsX3RpbWVfaW5mbyAqcHZ0aV9jcHUwX3ZhIF9fcmVhZF9tb3N0bHk7XG4mIzQzO3N0YXRpYyB1OCB2YWxpZF9mbGFncyBfX3JvX2FmdGVyX2luaXQgPSAwO1xuJiM0MztzdGF0aWMgc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICpwdnRpX2NwdTBfdmEgX19yb19hZnRlcl9pbml0O1xuIFxuLXZvaWQgcHZjbG9ja19zZXRfZmxhZ3ModTggZmxhZ3MpXG4mIzQzO3ZvaWQgX19pbml0IHB2Y2xvY2tfc2V0X2ZsYWdzKHU4IGZsYWdzKVxuIHtcbiYjNDM7XHRXQVJOX09OKHZhbGlkX2ZsYWdzKTtcbiBcdHZhbGlkX2ZsYWdzID0gZmxhZ3M7XG4gfVxuIFxuQEAgLTE1Myw3ICYjNDM7MTU0LDcgQEAgdm9pZCBwdmNsb2NrX3JlYWRfd2FsbGNsb2NrKHN0cnVjdCBwdmNsb2NrX3dhbGxfY2xvY2sgKndhbGxfY2xvY2ssXG4gXHRzZXRfbm9ybWFsaXplZF90aW1lc3BlYzY0KHRzLCBub3cudHZfc2VjLCBub3cudHZfbnNlYyk7XG4gfVxuIFxuLXZvaWQgcHZjbG9ja19zZXRfcHZ0aV9jcHUwX3ZhKHN0cnVjdCBwdmNsb2NrX3ZzeXNjYWxsX3RpbWVfaW5mbyAqcHZ0aSlcbiYjNDM7dm9pZCBfX2luaXQgcHZjbG9ja19zZXRfcHZ0aV9jcHUwX3ZhKHN0cnVjdCBwdmNsb2NrX3ZzeXNjYWxsX3RpbWVfaW5mbyAqcHZ0aSlcbiB7XG4gXHRXQVJOX09OKHZjbG9ja193YXNfdXNlZChWRFNPX0NMT0NLTU9ERV9QVkNMT0NLKSk7XG4gXHRwdnRpX2NwdTBfdmEgPSBwdnRpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90c2MuYyBiL2FyY2gveDg2L2tlcm5lbC90c2MuY1xuaW5kZXggY2UxMGFlNGIyOThiNzkuLjU2NGJlNGZhYTVhMGJiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL3RzYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjLmNcbkBAIC0zNCw2ICYjNDM7MzQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS90b3BvbG9neS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3V2L3V2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2V2LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL3RkeC5oXHUwMDNlXG4gXG4gdW5zaWduZWQgaW50IF9fcmVhZF9tb3N0bHkgY3B1X2toejtcdC8qIFRTQyBjbG9ja3MgLyB1c2VjLCBub3QgdXNlZCBoZXJlICovXG4gRVhQT1JUX1NZTUJPTChjcHVfa2h6KTtcbkBAIC0yNzksMTUgJiM0MzsyODAsMjggQEAgYm9vbCB1c2luZ19uYXRpdmVfc2NoZWRfY2xvY2sodm9pZClcbiBcdHJldHVybiBzdGF0aWNfY2FsbF9xdWVyeShwdl9zY2hlZF9jbG9jaykgPT0gbmF0aXZlX3NjaGVkX2Nsb2NrO1xuIH1cbiBcbi12b2lkIHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh1NjQgKCpmdW5jKSh2b2lkKSlcbiYjNDM7aW50IF9faW5pdCBfX3BhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh1NjQgKCpmdW5jKSh2b2lkKSwgYm9vbCBzdGFibGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgdm9pZCAoKnNhdmUpKHZvaWQpLCB2b2lkICgqcmVzdG9yZSkodm9pZCkpXG4ge1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRG9uJiMzOTt0IHJlcGxhY2UgVFNDIHdpdGggYSBQViBjbG9jayB3aGVuIHJ1bm5pbmcgYXMgYSBDb0NvIGd1ZXN0IGFuZFxuJiM0MztcdCAqIHRoZSBUU0MgaXMgc2VjdXJlL3RydXN0ZWQ7IFBWIGNsb2NrcyBhcmUgZW11bGF0ZWQgYnkgdGhlIGh5cGVydmlzb3IsXG4mIzQzO1x0ICogd2hpY2ggaXNuJiMzOTt0IGluIHRoZSBndWVzdCYjMzk7cyBUQ0IuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0dVRVNUX1NOUF9TRUNVUkVfVFNDKSB8fFxuJiM0MztcdCAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcbiYjNDM7XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1xuJiM0MztcdGlmICghc3RhYmxlKVxuJiM0MztcdFx0Y2xlYXJfc2NoZWRfY2xvY2tfc3RhYmxlKCk7XG4mIzQzO1xuIFx0c3RhdGljX2NhbGxfdXBkYXRlKHB2X3NjaGVkX2Nsb2NrLCBmdW5jKTtcbiYjNDM7XHR4ODZfcGxhdGZvcm0uc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSA9IHNhdmU7XG4mIzQzO1x0eDg2X3BsYXRmb3JtLnJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUgPSByZXN0b3JlO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiAjZWxzZVxuIHU2NCBzY2hlZF9jbG9ja19ub2luc3RyKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsaWFzKFwmIzM0O25hdGl2ZV9zY2hlZF9jbG9ja1wmIzM0OykpKTtcbi1cbi1ib29sIHVzaW5nX25hdGl2ZV9zY2hlZF9jbG9jayh2b2lkKSB7IHJldHVybiB0cnVlOyB9XG4tdm9pZCBwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodTY0ICgqZnVuYykodm9pZCkpIHsgfVxuICNlbmRpZlxuIFxuIG5vdHJhY2UgdTY0IHNjaGVkX2Nsb2NrKHZvaWQpXG5AQCAtNjQ1LDQ2ICYjNDM7NjU5LDY4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHF1aWNrX3BpdF9jYWxpYnJhdGUodm9pZClcbiBcdHJldHVybiBkZWx0YTtcbiB9XG4gXG4mIzQzO2ludCBjcHVpZF9nZXRfdHNjX2luZm8oc3RydWN0IGNwdWlkX3RzY19pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGVjeF9oeiwgZWR4O1xuJiM0MztcbiYjNDM7XHRpZiAoYm9vdF9jcHVfZGF0YS5jcHVpZF9sZXZlbCBcdTAwM2MgQ1BVSURfTEVBRl9UU0MpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XG4mIzQzO1x0LyogQ1BVSUQgMTVIIFRTQy9DcnlzdGFsIHJhdGlvLCBwbHVzIG9wdGlvbmFsbHkgQ3J5c3RhbCBIeiAqL1xuJiM0MztcdGNwdWlkKENQVUlEX0xFQUZfVFNDLCBcdTAwMjZpbmZvLVx1MDAzZWRlbm9taW5hdG9yLCBcdTAwMjZpbmZvLVx1MDAzZW51bWVyYXRvciwgXHUwMDI2ZWN4X2h6LCBcdTAwMjZlZHgpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWluZm8tXHUwMDNlZGVub21pbmF0b3IgfHwgIWluZm8tXHUwMDNlbnVtZXJhdG9yKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTm90ZTogc29tZSBDUFVzIHByb3ZpZGUgdGhlIG11bHRpcGxpZXIgaW5mb3JtYXRpb24sIGJ1dCBub3QgdGhlIGNvcmVcbiYjNDM7XHQgKiBjcnlzdGFsIGZyZXF1ZW5jeS4gIFRoZSBtdWx0aXBsaWVyIGluZm9ybWF0aW9uIGlzIHN0aWxsIHVzZWZ1bCBmb3JcbiYjNDM7XHQgKiBzdWNoIENQVXMsIGFzIHRoZSBjcnlzdGFsIGZyZXF1ZW5jeSBjYW4gYmUgZ2xlYW5lZCBmcm9tIENQVUlELjB4MTYuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW5mby1cdTAwM2VjcnlzdGFsX2toeiA9IGVjeF9oeiAvIDEwMDA7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3Vuc2lnbmVkIGludCBfX2NwdV9raHpfZnJvbV9jcHVpZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGVheF9iYXNlX21oeiwgZWJ4LCBlY3gsIGVkeDtcbiYjNDM7XG4mIzQzO1x0aWYgKGJvb3RfY3B1X2RhdGEuY3B1aWRfbGV2ZWwgXHUwMDNjIENQVUlEX0xFQUZfRlJFUSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRjcHVpZChDUFVJRF9MRUFGX0ZSRVEsIFx1MDAyNmVheF9iYXNlX21oeiwgXHUwMDI2ZWJ4LCBcdTAwMjZlY3gsIFx1MDAyNmVkeCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlYXhfYmFzZV9taHogKiAxMDAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIG5hdGl2ZV9jYWxpYnJhdGVfdHNjIC0gZGV0ZXJtaW5lIFRTQyBmcmVxdWVuY3lcbiAgKiBEZXRlcm1pbmUgVFNDIGZyZXF1ZW5jeSB2aWEgQ1BVSUQsIGVsc2UgcmV0dXJuIDAuXG4gICovXG4tdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX3RzYyh2b2lkKVxuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX3RzYyh2b2lkKVxuIHtcbi1cdHVuc2lnbmVkIGludCBlYXhfZGVub21pbmF0b3IsIGVieF9udW1lcmF0b3IsIGVjeF9oeiwgZWR4O1xuLVx0dW5zaWduZWQgaW50IGNyeXN0YWxfa2h6O1xuJiM0MztcdHN0cnVjdCBjcHVpZF90c2NfaW5mbyBpbmZvO1xuIFxuIFx0aWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVMKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChib290X2NwdV9kYXRhLmNwdWlkX2xldmVsIFx1MDAzYyBDUFVJRF9MRUFGX1RTQylcbiYjNDM7XHRpZiAoY3B1aWRfZ2V0X3RzY19pbmZvKFx1MDAyNmluZm8pKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGVheF9kZW5vbWluYXRvciA9IGVieF9udW1lcmF0b3IgPSBlY3hfaHogPSBlZHggPSAwO1xuLVxuLVx0LyogQ1BVSUQgMTVIIFRTQy9DcnlzdGFsIHJhdGlvLCBwbHVzIG9wdGlvbmFsbHkgQ3J5c3RhbCBIeiAqL1xuLVx0Y3B1aWQoQ1BVSURfTEVBRl9UU0MsIFx1MDAyNmVheF9kZW5vbWluYXRvciwgXHUwMDI2ZWJ4X251bWVyYXRvciwgXHUwMDI2ZWN4X2h6LCBcdTAwMjZlZHgpO1xuLVxuLVx0aWYgKGVieF9udW1lcmF0b3IgPT0gMCB8fCBlYXhfZGVub21pbmF0b3IgPT0gMClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRjcnlzdGFsX2toeiA9IGVjeF9oeiAvIDEwMDA7XG4tXG4gXHQvKlxuIFx0ICogRGVudmVydG9uIFNvQ3MgZG9uJiMzOTt0IHJlcG9ydCBjcnlzdGFsIGNsb2NrLCBhbmQgYWxzbyBkb24mIzM5O3Qgc3VwcG9ydFxuIFx0ICogQ1BVSURfTEVBRl9GUkVRIGZvciB0aGUgY2FsY3VsYXRpb24gYmVsb3csIHNvIGhhcmRjb2RlIHRoZSAyNU1IelxuIFx0ICogY3J5c3RhbCBjbG9jay5cbiBcdCAqL1xuLVx0aWYgKGNyeXN0YWxfa2h6ID09IDAgXHUwMDI2XHUwMDI2XG4tXHRcdFx0Ym9vdF9jcHVfZGF0YS54ODZfdmZtID09IElOVEVMX0FUT01fR09MRE1PTlRfRClcbi1cdFx0Y3J5c3RhbF9raHogPSAyNTAwMDtcbiYjNDM7XHRpZiAoIWluZm8uY3J5c3RhbF9raHogXHUwMDI2XHUwMDI2IGJvb3RfY3B1X2RhdGEueDg2X3ZmbSA9PSBJTlRFTF9BVE9NX0dPTERNT05UX0QpXG4mIzQzO1x0XHRpbmZvLmNyeXN0YWxfa2h6ID0gMjUwMDA7XG4gXG4gXHQvKlxuIFx0ICogVFNDIGZyZXF1ZW5jeSByZXBvcnRlZCBkaXJlY3RseSBieSBDUFVJRCBpcyBhIFwmIzM0O2hhcmR3YXJlIHJlcG9ydGVkXCYjMzQ7XG4gXHQgKiBmcmVxdWVuY3kgYW5kIGlzIHRoZSBtb3N0IGFjY3VyYXRlIG9uZSBzbyBmYXIgd2UgaGF2ZS4gVGhpc1xuIFx0ICogaXMgY29uc2lkZXJlZCBhIGtub3duIGZyZXF1ZW5jeS5cbiBcdCAqL1xuLVx0aWYgKGNyeXN0YWxfa2h6ICE9IDApXG4mIzQzO1x0aWYgKGluZm8uY3J5c3RhbF9raHopXG4gXHRcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpO1xuIFxuIFx0LypcbkBAIC02OTIsMTUgJiM0Mzs3MjgsMTAgQEAgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX3RzYyh2b2lkKVxuIFx0ICogY2xvY2ssIGJ1dCB3ZSBjYW4gZWFzaWx5IGNhbGN1bGF0ZSBpdCB0byBhIGhpZ2ggZGVncmVlIG9mIGFjY3VyYWN5XG4gXHQgKiBieSBjb25zaWRlcmluZyB0aGUgY3J5c3RhbCByYXRpbyBhbmQgdGhlIENQVSBzcGVlZC5cbiBcdCAqL1xuLVx0aWYgKGNyeXN0YWxfa2h6ID09IDAgXHUwMDI2XHUwMDI2IGJvb3RfY3B1X2RhdGEuY3B1aWRfbGV2ZWwgXHUwMDNlPSBDUFVJRF9MRUFGX0ZSRVEpIHtcbi1cdFx0dW5zaWduZWQgaW50IGVheF9iYXNlX21oeiwgZWJ4LCBlY3gsIGVkeDtcbiYjNDM7XHRpZiAoIWluZm8uY3J5c3RhbF9raHopXG4mIzQzO1x0XHRpbmZvLmNyeXN0YWxfa2h6ID0gX19jcHVfa2h6X2Zyb21fY3B1aWQoKSAqIGluZm8uZGVub21pbmF0b3IgLyBpbmZvLm51bWVyYXRvcjtcbiBcbi1cdFx0Y3B1aWQoQ1BVSURfTEVBRl9GUkVRLCBcdTAwMjZlYXhfYmFzZV9taHosIFx1MDAyNmVieCwgXHUwMDI2ZWN4LCBcdTAwMjZlZHgpO1xuLVx0XHRjcnlzdGFsX2toeiA9IGVheF9iYXNlX21oeiAqIDEwMDAgKlxuLVx0XHRcdGVheF9kZW5vbWluYXRvciAvIGVieF9udW1lcmF0b3I7XG4tXHR9XG4tXG4tXHRpZiAoY3J5c3RhbF9raHogPT0gMClcbiYjNDM7XHRpZiAoIWluZm8uY3J5c3RhbF9raHopXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0LypcbkBAIC03MTAsNDEgJiM0Mzs3NDEsMzAgQEAgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX3RzYyh2b2lkKVxuIFx0aWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZmbSA9PSBJTlRFTF9BVE9NX0dPTERNT05UKVxuIFx0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7XG4gXG4tI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQ1xuIFx0LypcbiBcdCAqIFRoZSBsb2NhbCBBUElDIGFwcGVhcnMgdG8gYmUgZmVkIGJ5IHRoZSBjb3JlIGNyeXN0YWwgY2xvY2tcbiBcdCAqICh3aGljaCBzb3VuZHMgZW50aXJlbHkgc2Vuc2libGUpLiBXZSBjYW4gc2V0IHRoZSBnbG9iYWxcbiBcdCAqIGxhcGljX3RpbWVyX3BlcmlvZCBoZXJlIHRvIGF2b2lkIGhhdmluZyB0byBjYWxpYnJhdGUgdGhlIEFQSUNcbiBcdCAqIHRpbWVyIGxhdGVyLlxuIFx0ICovXG4tXHRsYXBpY190aW1lcl9wZXJpb2QgPSBjcnlzdGFsX2toeiAqIDEwMDAgLyBIWjtcbi0jZW5kaWZcbiYjNDM7XHRhcGljX3NldF90aW1lcl9wZXJpb2Rfa2h6KGluZm8uY3J5c3RhbF9raHosIFwmIzM0O0NQVUlEIDB4MTUvMHgxNlwmIzM0Oyk7XG4gXG4tXHRyZXR1cm4gY3J5c3RhbF9raHogKiBlYnhfbnVtZXJhdG9yIC8gZWF4X2Rlbm9taW5hdG9yO1xuJiM0MztcdHJldHVybiBpbmZvLmNyeXN0YWxfa2h6ICogaW5mby5udW1lcmF0b3IgLyBpbmZvLmRlbm9taW5hdG9yO1xuIH1cbiBcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfa2h6X2Zyb21fY3B1aWQodm9pZClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgZWF4X2Jhc2VfbWh6LCBlYnhfbWF4X21oeiwgZWN4X2J1c19taHosIGVkeDtcbi1cbiBcdGlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAoYm9vdF9jcHVfZGF0YS5jcHVpZF9sZXZlbCBcdTAwM2MgQ1BVSURfTEVBRl9GUkVRKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdGVheF9iYXNlX21oeiA9IGVieF9tYXhfbWh6ID0gZWN4X2J1c19taHogPSBlZHggPSAwO1xuLVxuLVx0Y3B1aWQoQ1BVSURfTEVBRl9GUkVRLCBcdTAwMjZlYXhfYmFzZV9taHosIFx1MDAyNmVieF9tYXhfbWh6LCBcdTAwMjZlY3hfYnVzX21oeiwgXHUwMDI2ZWR4KTtcbi1cbi1cdHJldHVybiBlYXhfYmFzZV9taHogKiAxMDAwO1xuJiM0MztcdHJldHVybiBfX2NwdV9raHpfZnJvbV9jcHVpZCgpO1xuIH1cbiBcbiAvKlxuICAqIGNhbGlicmF0ZSBjcHUgdXNpbmcgcGl0LCBocGV0LCBhbmQgcHRpbWVyIG1ldGhvZHMuIFRoZXkgYXJlIGF2YWlsYWJsZVxuICAqIGxhdGVyIGluIGJvb3QgYWZ0ZXIgYWNwaSBpcyBpbml0aWFsaXplZC5cbiAgKi9cbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwaXRfaHBldF9wdGltZXJfY2FsaWJyYXRlX2NwdSh2b2lkKVxuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX2NwdV9sYXRlKHZvaWQpXG4ge1xuIFx0dTY0IHRzYzEsIHRzYzIsIGRlbHRhLCByZWYxLCByZWYyO1xuIFx0dW5zaWduZWQgbG9uZyB0c2NfcGl0X21pbiA9IFVMT05HX01BWCwgdHNjX3JlZl9taW4gPSBVTE9OR19NQVg7XG5AQCAtODk2LDcgJiM0Mzs5MTYsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBwaXRfaHBldF9wdGltZXJfY2FsaWJyYXRlX2NwdSh2b2lkKVxuIC8qKlxuICAqIG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5IC0gY2FuIGNhbGlicmF0ZSB0aGUgY3B1IGVhcmx5IGluIGJvb3RcbiAgKi9cbi11bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KHZvaWQpXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KHZvaWQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncywgZmFzdF9jYWxpYnJhdGUgPSBjcHVfa2h6X2Zyb21fY3B1aWQoKTtcbiBcbkBAIC05MTAsMjAgJiM0Mzs5MzAsNiBAQCB1bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KHZvaWQpXG4gXHRyZXR1cm4gZmFzdF9jYWxpYnJhdGU7XG4gfVxuIFxuLVxuLS8qKlxuLSAqIG5hdGl2ZV9jYWxpYnJhdGVfY3B1IC0gY2FsaWJyYXRlIHRoZSBjcHVcbi0gKi9cbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX2NwdSh2b2lkKVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgdHNjX2ZyZXEgPSBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSgpO1xuLVxuLVx0aWYgKCF0c2NfZnJlcSlcbi1cdFx0dHNjX2ZyZXEgPSBwaXRfaHBldF9wdGltZXJfY2FsaWJyYXRlX2NwdSgpO1xuLVxuLVx0cmV0dXJuIHRzY19mcmVxO1xuLX1cbi1cbiB2b2lkIHJlY2FsaWJyYXRlX2NwdV9raHoodm9pZClcbiB7XG4gI2lmbmRlZiBDT05GSUdfU01QXG5AQCAtOTMyLDggJiM0Mzs5MzgsMTMgQEAgdm9pZCByZWNhbGlicmF0ZV9jcHVfa2h6KHZvaWQpXG4gXHRpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9UU0MpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRjcHVfa2h6ID0geDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUoKTtcbi1cdHRzY19raHogPSB4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX3RzYygpO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9UU0NfS05PV05fRlJFUSkpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRjcHVfa2h6ID0gbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHkoKTtcbiYjNDM7XHRpZiAoIWNwdV9raHopXG4mIzQzO1x0XHRjcHVfa2h6ID0gbmF0aXZlX2NhbGlicmF0ZV9jcHVfbGF0ZSgpO1xuJiM0MztcdHRzY19raHogPSBuYXRpdmVfY2FsaWJyYXRlX3RzYygpO1xuIFx0aWYgKHRzY19raHogPT0gMClcbiBcdFx0dHNjX2toeiA9IGNwdV9raHo7XG4gXHRlbHNlIGlmIChhYnMoY3B1X2toeiAtIHRzY19raHopICogMTAgXHUwMDNlIHRzY19raHopXG5AQCAtOTQyLDE0ICYjNDM7OTUzLDIyIEBAIHZvaWQgcmVjYWxpYnJhdGVfY3B1X2toeih2b2lkKVxuIFx0XHRcdFx0XHRcdCAgICBjcHVfa2h6X29sZCwgY3B1X2toeik7XG4gI2VuZGlmXG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKHJlY2FsaWJyYXRlX2NwdV9raHopO1xuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHJlY2FsaWJyYXRlX2NwdV9raHosIFwmIzM0O3A0LWNsb2NrbW9kLHBvd2Vybm93LWs3XCYjMzQ7KTtcbiBcbiBcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGN5YzJuc19zdXNwZW5kO1xuIFxuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdHNjX2lzX3NhdmVfcmVzdG9yZV9uZWVkZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIXVzaW5nX25hdGl2ZV9zY2hlZF9jbG9jaygpKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNl9fdXNlX3RzYykgfHwgc2NoZWRfY2xvY2tfc3RhYmxlKCk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCB0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxuIHtcbi1cdGlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2X191c2VfdHNjKSBcdTAwMjZcdTAwMjYgIXNjaGVkX2Nsb2NrX3N0YWJsZSgpKVxuJiM0MztcdGlmICghdHNjX2lzX3NhdmVfcmVzdG9yZV9uZWVkZWQoKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Y3ljMm5zX3N1c3BlbmQgPSBzY2hlZF9jbG9jaygpO1xuQEAgLTk2OSw3ICYjNDM7OTg4LDcgQEAgdm9pZCB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBjcHU7XG4gXG4tXHRpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNl9fdXNlX3RzYykgXHUwMDI2XHUwMDI2ICFzY2hlZF9jbG9ja19zdGFibGUoKSlcbiYjNDM7XHRpZiAoIXRzY19pc19zYXZlX3Jlc3RvcmVfbmVlZGVkKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbkBAIC0xNDM5LDIxICYjNDM7MTQ1OCwyOCBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X3RzY19jbG9ja3NvdXJjZSh2b2lkKVxuICAqL1xuIGRldmljZV9pbml0Y2FsbChpbml0X3RzY19jbG9ja3NvdXJjZSk7XG4gXG4tc3RhdGljIGJvb2wgX19pbml0IGRldGVybWluZV9jcHVfdHNjX2ZyZXF1ZW5jaWVzKGJvb2wgZWFybHkpXG4mIzQzO3N0YXRpYyBib29sIF9faW5pdCBkZXRlcm1pbmVfY3B1X3RzY19mcmVxdWVuY2llcyhib29sIGVhcmx5LFxuJiM0MztcdFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IGtub3duX2NwdV9raHosXG4mIzQzO1x0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQga25vd25fdHNjX2toeilcbiB7XG4gXHQvKiBNYWtlIHN1cmUgdGhhdCBjcHUgYW5kIHRzYyBhcmUgbm90IGFscmVhZHkgY2FsaWJyYXRlZCAqL1xuIFx0V0FSTl9PTihjcHVfa2h6IHx8IHRzY19raHopO1xuIFxuIFx0aWYgKGVhcmx5KSB7XG4tXHRcdGNwdV9raHogPSB4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX2NwdSgpO1xuLVx0XHRpZiAodHNjX2Vhcmx5X2toeilcbi1cdFx0XHR0c2Nfa2h6ID0gdHNjX2Vhcmx5X2toejtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBFYXJseSBDUFUgY2FsaWJyYXRpb24gY2FuIG9ubHkgdXNlIG1ldGhvZHMgdGhhdCBhcmUgYXZhaWxhYmxlXG4mIzQzO1x0XHQgKiBlYXJseSBpbiBib290IChvYnZpb3VzbHkpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoa25vd25fY3B1X2toeilcbiYjNDM7XHRcdFx0Y3B1X2toeiA9IGtub3duX2NwdV9raHo7XG4gXHRcdGVsc2Vcbi1cdFx0XHR0c2Nfa2h6ID0geDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MoKTtcbiYjNDM7XHRcdFx0Y3B1X2toeiA9IG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KCk7XG4mIzQzO1x0XHRpZiAoa25vd25fdHNjX2toeilcbiYjNDM7XHRcdFx0dHNjX2toeiA9IGtub3duX3RzY19raHo7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHRzY19raHogPSBuYXRpdmVfY2FsaWJyYXRlX3RzYygpO1xuIFx0fSBlbHNlIHtcbi1cdFx0LyogV2Ugc2hvdWxkIG5vdCBiZSBoZXJlIHdpdGggbm9uLW5hdGl2ZSBjcHUgY2FsaWJyYXRpb24gKi9cbi1cdFx0V0FSTl9PTih4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX2NwdSAhPSBuYXRpdmVfY2FsaWJyYXRlX2NwdSk7XG4tXHRcdGNwdV9raHogPSBwaXRfaHBldF9wdGltZXJfY2FsaWJyYXRlX2NwdSgpO1xuJiM0MztcdFx0Y3B1X2toeiA9IG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2xhdGUoKTtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtMTUwMiwxNSAmIzQzOzE1MjgsNDggQEAgc3RhdGljIHZvaWQgX19pbml0IHRzY19lbmFibGVfc2NoZWRfY2xvY2sodm9pZClcbiBcbiB2b2lkIF9faW5pdCB0c2NfZWFybHlfaW5pdCh2b2lkKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBpbnQga25vd25fY3B1X2toeiA9IDAsIGtub3duX3RzY19raHogPSAwO1xuJiM0MztcbiBcdGlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1RTQykpXG4gXHRcdHJldHVybjtcbiBcdC8qIERvbiYjMzk7dCBjaGFuZ2UgVVYgVFNDIG11bHRpLWNoYXNzaXMgc3luY2hyb25pemF0aW9uICovXG4gXHRpZiAoaXNfZWFybHlfdXZfc3lzdGVtKCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdHNucF9zZWN1cmVfdHNjX2luaXQoKTtcbiYjNDM7XHRpZiAoeDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHopXG4mIzQzO1x0XHRrbm93bl9jcHVfa2h6ID0geDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHooKTtcbiBcbi1cdGlmICghZGV0ZXJtaW5lX2NwdV90c2NfZnJlcXVlbmNpZXModHJ1ZSkpXG4mIzQzO1x0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0dVRVNUX1NOUF9TRUNVUkVfVFNDKSlcbiYjNDM7XHRcdGtub3duX3RzY19raHogPSBzbnBfc2VjdXJlX3RzY19pbml0KCk7XG4mIzQzO1x0ZWxzZSBpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXG4mIzQzO1x0XHRrbm93bl90c2Nfa2h6ID0gdGR4X3RzY19pbml0KCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgdGhlIFRTQyBmcmVxdWVuY3kgd2FzbiYjMzk7dCBwcm92aWRlZCBieSB0cnVzdGVkIGZpcm13YXJlLCB0cnkgdG8gZ2V0XG4mIzQzO1x0ICogaXQgZnJvbSB0aGUgaHlwZXJ2aXNvciAod2hpY2ggaXMgdW50cnVzdGVkIHdoZW4gcnVubmluZyBhcyBhIENvQ28gZ3Vlc3QpLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICgha25vd25fdHNjX2toeiBcdTAwMjZcdTAwMjYgeDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHopXG4mIzQzO1x0XHRrbm93bl90c2Nfa2h6ID0geDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHooKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYXJrIHRoZSBUU0MgZnJlcXVlbmN5IGFzIGtub3duIGlmIGl0IHdhcyBvYnRhaW5lZCBmcm9tIGEgaHlwZXJ2aXNvclxuJiM0MztcdCAqIG9yIHRydXN0ZWQgZmlybXdhcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGtub3duX3RzY19raHopXG4mIzQzO1x0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZ25vcmUgdGhlIHVzZXItcHJvdmlkZWQgVFNDIGZyZXF1ZW5jeSBpZiB0aGUgZXhhY3QgZnJlcXVlbmN5IHdhc1xuJiM0MztcdCAqIG9idGFpbmVkIGZyb20gdHJ1c3RlZCBmaXJtd2FyZSBvciB0aGUgaHlwZXJ2aXNvciwgYW5kIGRvbiYjMzk7dCBtYXJrIHRoZVxuJiM0MztcdCAqIGZyZXF1ZW5jeSBhcyBrbm93biwgYXMgdGhlIHVzZXItcHJvdmlkZWQgZnJlcXVlbmN5IGlzIGludGVuZGVkIGFzIGFcbiYjNDM7XHQgKiBcJiMzNDtzdGFydGluZyBwb2ludFwmIzM0Oywgbm90IGEga25vd24sIGd1YXJhbnRlZWQgZnJlcXVlbmN5XG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFrbm93bl90c2Nfa2h6KVxuJiM0MztcdFx0a25vd25fdHNjX2toeiA9IHRzY19lYXJseV9raHo7XG4mIzQzO1x0ZWxzZSBpZiAodHNjX2Vhcmx5X2toeilcbiYjNDM7XHRcdHByX2VycihcJiMzNDtJZ25vcmluZyAmIzM5O3RzY19lYXJseV9raHomIzM5OyBpbiBmYXZvciBvZiBmaXJtd2FyZS9oeXBlcnZpc29yLlxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmICghZGV0ZXJtaW5lX2NwdV90c2NfZnJlcXVlbmNpZXModHJ1ZSwga25vd25fY3B1X2toeiwga25vd25fdHNjX2toeikpXG4gXHRcdHJldHVybjtcbiBcdHRzY19lbmFibGVfc2NoZWRfY2xvY2soKTtcbiB9XG5AQCAtMTUyMiwxNiAmIzQzOzE1ODEsOSBAQCB2b2lkIF9faW5pdCB0c2NfaW5pdCh2b2lkKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHQvKlxuLVx0ICogbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHkgY2FuIG9ubHkgY2FsaWJyYXRlIHVzaW5nIG1ldGhvZHMgdGhhdCBhcmVcbi1cdCAqIGF2YWlsYWJsZSBlYXJseSBpbiBib290LlxuLVx0ICovXG4tXHRpZiAoeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUgPT0gbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHkpXG4tXHRcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ID0gbmF0aXZlX2NhbGlicmF0ZV9jcHU7XG4tXG4gXHRpZiAoIXRzY19raHopIHtcbiBcdFx0LyogV2UgZmFpbGVkIHRvIGRldGVybWluZSBmcmVxdWVuY2llcyBlYXJsaWVyLCB0cnkgYWdhaW4gKi9cbi1cdFx0aWYgKCFkZXRlcm1pbmVfY3B1X3RzY19mcmVxdWVuY2llcyhmYWxzZSkpIHtcbiYjNDM7XHRcdGlmICghZGV0ZXJtaW5lX2NwdV90c2NfZnJlcXVlbmNpZXMoZmFsc2UsIDAsIDApKSB7XG4gXHRcdFx0bWFya190c2NfdW5zdGFibGUoXCYjMzQ7Y291bGQgbm90IGNhbGN1bGF0ZSBUU0Mga2h6XCYjMzQ7KTtcbiBcdFx0XHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19ERUFETElORV9USU1FUik7XG4gXHRcdFx0cmV0dXJuO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90c2NfbXNyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjX21zci5jXG5pbmRleCA0OGU2Y2MxY2IwMTdhNS4uYWVjZTA2MmFlZTdlODkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHNjX21zci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjX21zci5jXG5AQCAtMjEwLDkgJiM0MzsyMTAsNyBAQCB1bnNpZ25lZCBsb25nIGNwdV9raHpfZnJvbV9tc3Iodm9pZClcbiBcdGlmIChmcmVxID09IDApXG4gXHRcdHByX2VycihcJiMzNDtFcnJvciBNU1JfRlNCX0ZSRVEgaW5kZXggJWQgaXMgdW5rbm93blxcblwmIzM0OywgaW5kZXgpO1xuIFxuLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUNcbi1cdGxhcGljX3RpbWVyX3BlcmlvZCA9IChmcmVxICogMTAwMCkgLyBIWjtcbi0jZW5kaWZcbiYjNDM7XHRhcGljX3NldF90aW1lcl9wZXJpb2Rfa2h6KGZyZXEsIFwmIzM0O01TUl9GU0JfRlJFUVwmIzM0Oyk7XG4gXG4gXHQvKlxuIFx0ICogVFNDIGZyZXF1ZW5jeSBkZXRlcm1pbmVkIGJ5IE1TUiBpcyBhbHdheXMgY29uc2lkZXJlZCBcJiMzNDtrbm93blwmIzM0O1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jIGIvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmNcbmluZGV4IDI1MmM1ODI3ZDA2MzRmLi5iN2E0OGU2MjJmNDg4YSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuY1xuQEAgLTE0Nyw4ICYjNDM7MTQ3LDYgQEAgc3RhdGljIHZvaWQgZW5jX2tleGVjX2ZpbmlzaF9ub29wKHZvaWQpIHt9XG4gc3RhdGljIGJvb2wgaXNfcHJpdmF0ZV9tbWlvX25vb3AodTY0IGFkZHIpIHtyZXR1cm4gZmFsc2U7IH1cbiBcbiBzdHJ1Y3QgeDg2X3BsYXRmb3JtX29wcyB4ODZfcGxhdGZvcm0gX19yb19hZnRlcl9pbml0ID0ge1xuLVx0LmNhbGlicmF0ZV9jcHVcdFx0XHQ9IG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5LFxuLVx0LmNhbGlicmF0ZV90c2NcdFx0XHQ9IG5hdGl2ZV9jYWxpYnJhdGVfdHNjLFxuIFx0LmdldF93YWxsY2xvY2tcdFx0XHQ9IG1hY2hfZ2V0X2Ntb3NfdGltZSxcbiBcdC5zZXRfd2FsbGNsb2NrXHRcdFx0PSBtYWNoX3NldF9jbW9zX3RpbWUsXG4gXHQuaW9tbXVfc2h1dGRvd25cdFx0XHQ9IGlvbW11X3NodXRkb3duX25vb3AsXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMgYi9hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuY1xuaW5kZXggMmY4YzMyMTczOTcyZDYuLjZjM2FmOTc0YzdjMmYxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jXG5AQCAtNTM1LDkgJiM0Mzs1MzUsNiBAQCB2b2lkIF9faW5pdCBzbWVfZWFybHlfaW5pdCh2b2lkKVxuIFx0XHQgKi9cbiBcdFx0eDg2X2luaXQucmVzb3VyY2VzLmRtaV9zZXR1cCA9IHNucF9kbWlfc2V0dXA7XG4gXHR9XG4tXG4tXHRpZiAoc2V2X3N0YXR1cyBcdTAwMjYgTVNSX0FNRDY0X1NOUF9TRUNVUkVfVFNDKVxuLVx0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7XG4gfVxuIFxuIHZvaWQgX19pbml0IG1lbV9lbmNyeXB0X2ZyZWVfZGVjcnlwdGVkX21lbSh2b2lkKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi90aW1lLmMgYi9hcmNoL3g4Ni94ZW4vdGltZS5jXG5pbmRleCBkNjJjMTQzMzRiMzUxMC4uYmMyNmYwMGZjNTNlNWUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni94ZW4vdGltZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni94ZW4vdGltZS5jXG5AQCAtMzgsMTIgJiM0MzszOCwxMSBAQFxuIHN0YXRpYyB1NjQgeGVuX3NjaGVkX2Nsb2NrX29mZnNldCBfX3JlYWRfbW9zdGx5O1xuIFxuIC8qIEdldCB0aGUgVFNDIHNwZWVkIGZyb20gWGVuICovXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgeGVuX3RzY19raHoodm9pZClcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgeGVuX3RzY19raHoodm9pZClcbiB7XG4gXHRzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqaW5mbyA9XG4gXHRcdFx1MDAyNkhZUEVSVklTT1Jfc2hhcmVkX2luZm8tXHUwMDNldmNwdV9pbmZvWzBdLnRpbWU7XG4gXG4tXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKTtcbiBcdHJldHVybiBwdmNsb2NrX3RzY19raHooaW5mbyk7XG4gfVxuIFxuQEAgLTQ0NCw3ICYjNDM7NDQzLDcgQEAgdm9pZCB4ZW5fcmVzdG9yZV90aW1lX21lbW9yeV9hcmVhKHZvaWQpXG4gXHR4ZW5fc2NoZWRfY2xvY2tfb2Zmc2V0ID0geGVuX2Nsb2Nrc291cmNlX3JlYWQoKSAtIHhlbl9jbG9ja192YWx1ZV9zYXZlZDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgeGVuX3NldHVwX3ZzeXNjYWxsX3RpbWVfaW5mbyh2b2lkKVxuJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgeGVuX3NldHVwX3ZzeXNjYWxsX3RpbWVfaW5mbyh2b2lkKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3JlZ2lzdGVyX3RpbWVfbWVtb3J5X2FyZWEgdDtcbiBcdHN0cnVjdCBwdmNsb2NrX3ZzeXNjYWxsX3RpbWVfaW5mbyAqdGk7XG5AQCAtNTY3LDkgJiM0Mzs1NjYsMTQgQEAgc3RhdGljIHZvaWQgX19pbml0IHhlbl9pbml0X3RpbWVfY29tbW9uKHZvaWQpXG4ge1xuIFx0eGVuX3NjaGVkX2Nsb2NrX29mZnNldCA9IHhlbl9jbG9ja3NvdXJjZV9yZWFkKCk7XG4gXHRzdGF0aWNfY2FsbF91cGRhdGUocHZfc3RlYWxfY2xvY2ssIHhlbl9zdGVhbF9jbG9jayk7XG4tXHRwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2soeGVuX3NjaGVkX2Nsb2NrKTtcbiBcbi1cdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjID0geGVuX3RzY19raHo7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBYZW4gaGFzIHBhcmF2aXJ0dWFsaXplZCBzdXNwZW5kL3Jlc3VtZSBhbmQgc28gZG9lc24mIzM5O3QgdXNlIHRoZSBjb21tb25cbiYjNDM7XHQgKiB4ODYgc2NoZWRfY2xvY2sgc2F2ZS9yZXN0b3JlIGhvb2tzLlxuJiM0MztcdCAqL1xuJiM0MztcdHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh4ZW5fc2NoZWRfY2xvY2ssIHg4Nl9pbml0X25vb3AsIHg4Nl9pbml0X25vb3ApO1xuJiM0MztcbiYjNDM7XHR4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeiA9IHhlbl90c2Nfa2h6O1xuIFx0eDg2X3BsYXRmb3JtLmdldF93YWxsY2xvY2sgPSB4ZW5fZ2V0X3dhbGxjbG9jaztcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9oeXBlcnZfdGltZXIuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmNcbmluZGV4IGRmNTY3Nzk1ZDE3NTFhLi44ZWU3YTlkZTBmNGZkYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmNcbkBAIC00ODgsMTcgJiM0Mzs0ODgsNiBAQCBzdGF0aWMgdm9pZCByZXN1bWVfaHZfY2xvY2tfdHNjKHN0cnVjdCBjbG9ja3NvdXJjZSAqYXJnKVxuIFx0aHZfc2V0X21zcihIVl9NU1JfUkVGRVJFTkNFX1RTQywgdHNjX21zci5hc191aW50NjQpO1xuIH1cbiBcbi0vKlxuLSAqIENhbGxlZCBkdXJpbmcgcmVzdW1lIGZyb20gaGliZXJuYXRpb24sIGZyb20gb3ZlcnJpZGRlblxuLSAqIHg4Nl9wbGF0Zm9ybS5yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlIHJvdXRpbmUuIFRoaXMgaXMgdG8gYWRqdXN0IG9mZnNldHNcbi0gKiB1c2VkIHRvIGNhbGN1bGF0ZSB0aW1lIGZvciBodiB0c2MgcGFnZSBiYXNlZCBzY2hlZF9jbG9jaywgdG8gYWNjb3VudCBmb3Jcbi0gKiB0aW1lIHNwZW50IGJlZm9yZSBoaWJlcm5hdGlvbi5cbi0gKi9cbi12b2lkIGh2X2Fkal9zY2hlZF9jbG9ja19vZmZzZXQodTY0IG9mZnNldClcbi17XG4tXHRodl9zY2hlZF9jbG9ja19vZmZzZXQgLT0gb2Zmc2V0O1xuLX1cbi1cbiAjaWZkZWYgSEFWRV9WRFNPX0NMT0NLTU9ERV9IVkNMT0NLXG4gc3RhdGljIGludCBodl9jc19lbmFibGUoc3RydWN0IGNsb2Nrc291cmNlICpjcylcbiB7XG5AQCAtNTU0LDEwICYjNDM7NTQzLDM1IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBodl9zZXR1cF9zY2hlZF9jbG9jayh2b2lkICpzY2hlZF9jbG9jaylcbiAjZWxpZiBkZWZpbmVkIENPTkZJR19QQVJBVklSVFxuICNpbmNsdWRlIFx1MDAzY2FzbS90aW1lci5oXHUwMDNlXG4gXG4mIzQzO3N0YXRpYyB1NjQgaHZfcmVmX2NvdW50ZXJfYXRfc3VzcGVuZDtcbiYjNDM7LypcbiYjNDM7ICogSHlwZXItViBjbG9jayBjb3VudGVyIHJlc2V0cyBkdXJpbmcgaGliZXJuYXRpb24uIFNhdmUgYW5kIHJlc3RvcmUgY2xvY2tcbiYjNDM7ICogb2Zmc2V0IGR1cmluZyBzdXNwZW5kL3Jlc3VtZSwgd2hpbGUgYWxzbyBjb25zaWRlcmluZyB0aGUgdGltZSBwYXNzZWRcbiYjNDM7ICogYmVmb3JlIHN1c3BlbmQuIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgc2NoZWRfY2xvY2sgdXNpbmcgaHYgdHNjIHBhZ2VcbiYjNDM7ICogYmFzZWQgY2xvY2tzb3VyY2UsIHByb2NlZWRzIGZyb20gd2hlcmUgaXQgbGVmdCBvZmYgZHVyaW5nIHN1c3BlbmQgYW5kXG4mIzQzOyAqIGl0IHNob3dzIGNvcnJlY3QgdGltZSBmb3IgdGhlIHRpbWVzdGFtcHMgb2Yga2VybmVsIG1lc3NhZ2VzIGFmdGVyIHJlc3VtZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGh2X3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcbiYjNDM7e1xuJiM0MztcdGh2X3JlZl9jb3VudGVyX2F0X3N1c3BlbmQgPSBodl9yZWFkX3JlZmVyZW5jZV9jb3VudGVyKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGh2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQWRqdXN0IHRoZSBvZmZzZXRzIHVzZWQgYnkgaHYgdHNjIGNsb2Nrc291cmNlIHRvXG4mIzQzO1x0ICogYWNjb3VudCBmb3IgdGhlIHRpbWUgc3BlbnQgYmVmb3JlIGhpYmVybmF0aW9uLlxuJiM0MztcdCAqIGFkanVzdGVkIHZhbHVlID0gcmVmZXJlbmNlIGNvdW50ZXIgKHRpbWUpIGF0IHN1c3BlbmRcbiYjNDM7XHQgKiAgICAgICAgICAgICAgICAtIHJlZmVyZW5jZSBjb3VudGVyICh0aW1lKSBub3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0aHZfc2NoZWRfY2xvY2tfb2Zmc2V0IC09IChodl9yZWZfY291bnRlcl9hdF9zdXNwZW5kIC0gaHZfcmVhZF9yZWZlcmVuY2VfY291bnRlcigpKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgaHZfc2V0dXBfc2NoZWRfY2xvY2sodm9pZCAqc2NoZWRfY2xvY2spXG4ge1xuIFx0LyogV2UmIzM5O3JlIG9uIHg4Ni94NjQgKmFuZCogdXNpbmcgUFYgb3BzICovXG4tXHRwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2soc2NoZWRfY2xvY2spO1xuJiM0MztcdHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayhzY2hlZF9jbG9jaywgaHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSxcbiYjNDM7XHRcdFx0XHQgaHZfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSk7XG4gfVxuICNlbHNlIC8qICFDT05GSUdfR0VORVJJQ19TQ0hFRF9DTE9DSyBcdTAwMjZcdTAwMjYgIUNPTkZJR19QQVJBVklSVCAqL1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBodl9zZXR1cF9zY2hlZF9jbG9jayh2b2lkICpzY2hlZF9jbG9jaykge31cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5oIGIvaW5jbHVkZS9jbG9ja3NvdXJjZS9oeXBlcnZfdGltZXIuaFxuaW5kZXggZDQ4ZGQ0MTc2ZmQzNWIuLmE0YzgxYTYwZjUzZGZjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9jbG9ja3NvdXJjZS9oeXBlcnZfdGltZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9jbG9ja3NvdXJjZS9oeXBlcnZfdGltZXIuaFxuQEAgLTM4LDggJiM0MzszOCw2IEBAIGV4dGVybiB2b2lkIGh2X3JlbWFwX3RzY19jbG9ja3NvdXJjZSh2b2lkKTtcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBodl9nZXRfdHNjX3Bmbih2b2lkKTtcbiBleHRlcm4gc3RydWN0IG1zX2h5cGVydl90c2NfcGFnZSAqaHZfZ2V0X3RzY19wYWdlKHZvaWQpO1xuIFxuLWV4dGVybiB2b2lkIGh2X2Fkal9zY2hlZF9jbG9ja19vZmZzZXQodTY0IG9mZnNldCk7XG4tXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sXG4gaHZfcmVhZF90c2NfcGFnZV90c2MoY29uc3Qgc3RydWN0IG1zX2h5cGVydl90c2NfcGFnZSAqdHNjX3BnLFxuIFx0XHQgICAgIHU2NCAqY3VyX3RzYywgdTY0ICp0aW1lKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jXG5pbmRleCBiMWI1ZWM0M2MwZjI3Yi4uNWJjNzdkMzZjN2EzNjQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jXG5AQCAtMjE4MCwxMSAmIzQzOzIxODAsMTYgQEAgdm9pZCB0aW1la2VlcGluZ19yZXN1bWUodm9pZClcbiBcdHU2NCBjeWNsZV9ub3csIG5zZWM7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuLVx0cmVhZF9wZXJzaXN0ZW50X2Nsb2NrNjQoXHUwMDI2dHNfbmV3KTtcbi1cbiBcdGNsb2NrZXZlbnRzX3Jlc3VtZSgpO1xuIFx0Y2xvY2tzb3VyY2VfcmVzdW1lKCk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZWFkIHBlcnNpc3RlbnQgdGltZSBhZnRlciBjbG9ja3NvdXJjZXMgaGF2ZSBiZWVuIHJlc3VtZWQuICBQYXJhdmlydFxuJiM0MztcdCAqIGNsb2NrcyBoYXZlIGEgbmFzdHkgaGFiaXQgb2YgcGlnZ3liYWNraW5nIGEgcGVyc2lzdGVudCBjbG9jayBvbiBhXG4mIzQzO1x0ICogc3lzdGVtIGNsb2NrLCBhbmQgbWF5IHJldHVybiBnYXJiYWdlIGlmIHRoZSBzeXN0ZW0gY2xvY2sgaXMgc3VzcGVuZGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHJlYWRfcGVyc2lzdGVudF9jbG9jazY0KFx1MDAyNnRzX25ldyk7XG4mIzQzO1xuIFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnRrX2NvcmUubG9jaywgZmxhZ3MpO1xuIFxuIFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMjoxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk1fR1VFU1QmIzM0OywKICAgICYjMzQ7UEFSQVZJUlQmIzM0OywKICAgICYjMzQ7SFlQRVJWJiMzNDssCiAgICAmIzM0O0FDUk5fR1VFU1QmIzM0OywKICAgICYjMzQ7SkFJTEhPVVNFX0dVRVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtY2xvY2tfY3B1X2FjdGlvbiYjMzQ7LAogICAgJiMzNDt0aW1la2VlcGluZ19yZXN1bWUmIzM0OywKICAgICYjMzQ7dHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUmIzM0OywKICAgICYjMzQ7dHNjX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUmIzM0OywKICAgICYjMzQ7a3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUmIzM0OywKICAgICYjMzQ7a3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUmIzM0OywKICAgICYjMzQ7aHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtodl9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgVFNDIGFuZCBBUElDIGZyZXF1ZW5jeSBjYWxpYnJhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gZm9yIHg4NiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKEtWTSwgSHlwZXItViwgVk13YXJlLCBBQ1JOLCBKYWlsaG91c2UsIFREWCwgU0VWLVNOUCkuIEl0IG1vZGlmaWVzIGhvdyBzY2hlZF9jbG9jayBzdGF0ZSBpcyBzYXZlZCBhbmQgcmVzdG9yZWQgZHVyaW5nIHN1c3BlbmQvcmVzdW1lIGFuZCBDUFUgaG90cGx1ZywgcGFydGljdWxhcmx5IGZvciBrdm1jbG9jayBhbmQgSHlwZXItViBjbG9jay4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGluIGEgS1ZNIGd1ZXN0ICh3aGljaCBzeXprYWxsZXIgdXNlcykgZHVyaW5nIHN1c3BlbmQvcmVzdW1lIGFuZCBDUFUgaG90cGx1ZyBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhOTIxMDI4MTU0Mjg3MTRjYzc0ZjVkZDM2ZTczMWZiM2Q4YThmOGFmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMiAwMjoxMTowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggYjU0OTNhN2Y4ZjIyODEuLmEzODdiYjJjNDdlMmZiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtNzk0Niw2ICYjNDM7Nzk0NiwxMSBAQCBLZXJuZWwgcGFyYW1ldGVycwogCQkJd2l0aCBDUFVJRC4xNmggc3VwcG9ydCBhbmQgcGFydGlhbCBDUFVJRC4xNWggc3VwcG9ydC4KIAkJCUZvcm1hdDogJmx0O3Vuc2lnbmVkIGludCZndDsKIAomIzQzOwkJCU5vdGUsIHRzY19lYXJseV9raHogaXMgaWdub3JlZCBpZiB0aGUgVFNDIGZyZXF1ZW5jeSBpcwomIzQzOwkJCXByb3ZpZGVkIGJ5IHRydXN0ZWQgZmlybXdhcmUgd2hlbiBydW5uaW5nIGFzIGFuIFNOUCBvcgomIzQzOwkJCVREWCBndWVzdCwgb3Igd2hlbiB0aGUgaHlwZXJ2aXNvciBwcm92aWRlcyB0aGUgZXhhY3QKJiM0MzsJCQlmcmVxdWVuY3kgdmlhIGEgcGFyYXZpcnR1YWwgaW50ZXJmYWNlLgomIzQzOwogCXRzeD0JCVtYODZdIENvbnRyb2wgVHJhbnNhY3Rpb25hbCBTeW5jaHJvbml6YXRpb24KIAkJCUV4dGVuc2lvbnMgKFRTWCkgZmVhdHVyZSBpbiBJbnRlbCBwcm9jZXNzb3JzIHRoYXQKIAkJCXN1cHBvcnQgVFNYIGNvbnRyb2wuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9jcHVpZC5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9jcHVpZC5yc3QKaW5kZXggYmRhM2UzZTczN2Q3MWYuLmE1ZWU4ZmYwNTJjZTU1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9jcHVpZC5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvY3B1aWQucnN0CkBAIC0xMjIsMyAmIzQzOzEyMiwxNSBAQCBLVk1fSElOVFNfUkVBTFRJTUUgMCAgICAgICAgICAgIGd1ZXN0IGNoZWNrcyB0aGlzIGZlYXR1cmUgYml0IHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWVtcHRlZCBmb3IgYW4gdW5saW1pdGVkIHRpbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dpbmcgb3B0aW1pemF0aW9ucwogPT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsKJiM0MztmdW5jdGlvbjogS1ZNX0NQVUlEX1RJTUlOR19JTkZPICgweDQwMDAwMDEwKQomIzQzOwomIzQzO3JldHVybnM6OgomIzQzOwomIzQzOyAgIGVheCA9IChWaXJ0dWFsKSBUU0MgZnJlcXVlbmN5IGluIGtIegomIzQzOyAgIGVieCA9IChWaXJ0dWFsKSBCdXMgKGxvY2FsIEFQSUMgdGltZXIpIGZyZXF1ZW5jeSBpbiBrSHoKJiM0MzsgICBlY3ggPSAwIChSZXNlcnZlZCkKJiM0MzsgICBlZHggPSAwIChSZXNlcnZlZCkKJiM0MzsKJiM0MztOb3RlLCBLVk0gb25seSBkZWZpbmVzIHRoZSBzZW1hbnRpY3Mgb2YgS1ZNX0NQVUlEX1RJTUlOR19JTkZPOyBLVk0gZG9lcyBOT1QKJiM0MzthZHZlcnRpc2Ugc3VwcG9ydCB2aWEgS1ZNX0dFVF9TVVBQT1JURURfQ1BVSUQuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMgYi9hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMKaW5kZXggZWNkNzdkMzIxN2YzYzMuLjcyMzEzYjM2YjZmNWQxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvY29jby9zZXYvY29yZS5jCkBAIC05OSw3ICYjNDM7OTksNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNldl9zdGF0dXNfZmVhdF9uYW1lc1tdID0gewogICovCiBzdGF0aWMgdTY0IHNucF90c2Nfc2NhbGUgX19yb19hZnRlcl9pbml0Owogc3RhdGljIHU2NCBzbnBfdHNjX29mZnNldCBfX3JvX2FmdGVyX2luaXQ7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBzbnBfdHNjX2ZyZXFfa2h6IF9fcm9fYWZ0ZXJfaW5pdDsKIAogREVGSU5FX1BFUl9DUFUoc3RydWN0IHNldl9lc19ydW50aW1lX2RhdGEqLCBydW50aW1lX2RhdGEpOwogREVGSU5FX1BFUl9DUFUoc3RydWN0IHNldl9lc19zYXZlX2FyZWEgKiwgc2V2X3Ztc2EpOwpAQCAtMjAxNCwyMCAmIzQzOzIwMTMsMTIgQEAgdm9pZCBfX2luaXQgc25wX3NlY3VyZV90c2NfcHJlcGFyZSh2b2lkKQogCXByX2RlYnVnKCYjMzQ7U2VjdXJlVFNDIGVuYWJsZWQmIzM0Oyk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNlY3VyZXRzY19nZXRfdHNjX2toeih2b2lkKQotewotCXJldHVybiBzbnBfdHNjX2ZyZXFfa2h6OwotfQotCi12b2lkIF9faW5pdCBzbnBfc2VjdXJlX3RzY19pbml0KHZvaWQpCiYjNDM7dW5zaWduZWQgaW50IF9faW5pdCBzbnBfc2VjdXJlX3RzY19pbml0KHZvaWQpCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc25wX3RzY19mcmVxX2toeiwgdHNjX2ZyZXFfbWh6OwogCXN0cnVjdCBzbnBfc2VjcmV0c19wYWdlICpzZWNyZXRzOwotCXVuc2lnbmVkIGxvbmcgdHNjX2ZyZXFfbWh6OwogCXZvaWQgKm1lbTsKIAotCWlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfR1VFU1RfU05QX1NFQ1VSRV9UU0MpKQotCQlyZXR1cm47Ci0KIAltZW0gPSBlYXJseV9tZW1yZW1hcF9lbmNyeXB0ZWQoc2V2X3NlY3JldHNfcGEsIFBBR0VfU0laRSk7CiAJaWYgKCFtZW0pIHsKIAkJcHJfZXJyKCYjMzQ7VW5hYmxlIHRvIGdldCBUU0NfRkFDVE9SOiBmYWlsZWQgdG8gbWFwIHRoZSBTTlAgc2VjcmV0cyBwYWdlLlxuJiMzNDspOwpAQCAtMjAzNiw3ICYjNDM7MjAyNyw4IEBAIHZvaWQgX19pbml0IHNucF9zZWN1cmVfdHNjX2luaXQodm9pZCkKIAogCXNlY3JldHMgPSAoX19mb3JjZSBzdHJ1Y3Qgc25wX3NlY3JldHNfcGFnZSAqKW1lbTsKIAotCXNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpOwomIzQzOwlzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7CiYjNDM7CiAJcmRtc3JxKE1TUl9BTUQ2NF9HVUVTVF9UU0NfRlJFUSwgdHNjX2ZyZXFfbWh6KTsKIAogCS8qIEV4dHJhY3QgdGhlIEdVRVNUIFRTQyBNSFogZnJvbSBCSVRbMTc6MF0sIHJlc3QgaXMgcmVzZXJ2ZWQgc3BhY2UgKi8KQEAgLTIwNDQsOCAmIzQzOzIwMzYsNyBAQCB2b2lkIF9faW5pdCBzbnBfc2VjdXJlX3RzY19pbml0KHZvaWQpCiAKIAlzbnBfdHNjX2ZyZXFfa2h6ID0gU05QX1NDQUxFX1RTQ19GUkVRKHRzY19mcmVxX21oeiAqIDEwMDAsIHNlY3JldHMtJmd0O3RzY19mYWN0b3IpOwogCi0JeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUgPSBzZWN1cmV0c2NfZ2V0X3RzY19raHo7Ci0JeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MgPSBzZWN1cmV0c2NfZ2V0X3RzY19raHo7Ci0KIAllYXJseV9tZW11bm1hcChtZW0sIFBBR0VfU0laRSk7CiYjNDM7CiYjNDM7CXJldHVybiBzbnBfdHNjX2ZyZXFfa2h6OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY29jby90ZHgvdGR4LmMgYi9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYwppbmRleCAyOWI2ZjFlZDU5ZWM1NC4uOTQ2ODJhY2ExODhiNzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jCkBAIC04LDYgJiM0Mzs4LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tleGVjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9hcGljLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2NvY28uaCZndDsKICNpbmNsdWRlICZsdDthc20vdGR4LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3ZteC5oJmd0OwpAQCAtMTEyMyw5ICYjNDM7MTEyNCw2IEBAIHZvaWQgX19pbml0IHRkeF9lYXJseV9pbml0KHZvaWQpCiAKIAlzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCk7CiAKLQkvKiBUU0MgaXMgdGhlIG9ubHkgcmVsaWFibGUgY2xvY2sgaW4gVERYIGd1ZXN0ICovCi0Jc2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfUkVMSUFCTEUpOwotCiAJY2NfdmVuZG9yID0gQ0NfVkVORE9SX0lOVEVMOwogCiAJLyogQ29uZmlndXJlIHRoZSBURCAqLwpAQCAtMTE5NSwzICYjNDM7MTE5MywxOCBAQCB2b2lkIF9faW5pdCB0ZHhfZWFybHlfaW5pdCh2b2lkKQogCiAJdGR4X2Fubm91bmNlKCk7CiB9CiYjNDM7CiYjNDM7dW5zaWduZWQgaW50IF9faW5pdCB0ZHhfdHNjX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBjcHVpZF90c2NfaW5mbyBpbmZvOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKGNwdWlkX2dldF90c2NfaW5mbygmYW1wO2luZm8pIHx8ICFpbmZvLmNyeXN0YWxfa2h6KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlhcGljX3NldF90aW1lcl9wZXJpb2Rfa2h6KGluZm8uY3J5c3RhbF9raHosICYjMzQ7VERYLU1vZHVsZSB2aWEgQ1BVSUQmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIFRTQyBpcyB0aGUgb25seSByZWxpYWJsZSBjbG9jayBpbiBURFggZ3Vlc3QgKi8KJiM0MzsJc2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfUkVMSUFCTEUpOwomIzQzOwomIzQzOwlyZXR1cm4gaW5mby5jcnlzdGFsX2toeiAqIGluZm8ubnVtZXJhdG9yIC8gaW5mby5kZW5vbWluYXRvcjsKJiM0Mzt9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3JuLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3JuLmgKaW5kZXggZGI0MmI0NzdjNDFkMzQuLmE4OTIxNzljNjFjNjIzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3JuLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNybi5oCkBAIC0zMiwxMSAmIzQzOzMyLDYgQEAgc3RhdGljIGlubGluZSB1MzIgYWNybl9jcHVpZF9iYXNlKHZvaWQpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhY3JuX2dldF90c2Nfa2h6KHZvaWQpCi17Ci0JcmV0dXJuIGNwdWlkX2VheChBQ1JOX0NQVUlEX1RJTUlOR19JTkZPKTsKLX0KLQogLyoKICAqIEh5cGVyY2FsbHMgZm9yIEFDUk4KICAqCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgKaW5kZXggOWNkNDkzZDQ2N2Q0ZDEuLjAzNTk5ODU1NWU5OTIyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oCkBAIC02Myw3ICYjNDM7NjMsNiBAQCBleHRlcm4gaW50IGFwaWNfdmVyYm9zaXR5OwogZXh0ZXJuIGludCBsb2NhbF9hcGljX3RpbWVyX2MyX29rOwogCiBleHRlcm4gYm9vbCBhcGljX2lzX2Rpc2FibGVkOwotZXh0ZXJuIHVuc2lnbmVkIGludCBsYXBpY190aW1lcl9wZXJpb2Q7CiAKIGV4dGVybiBlbnVtIGFwaWNfaW50cl9tb2RlX2lkIGFwaWNfaW50cl9tb2RlOwogZW51bSBhcGljX2ludHJfbW9kZV9pZCB7CkBAIC0xMzgsNiAmIzQzOzEzNyw4IEBAIHZvaWQgcmVnaXN0ZXJfbGFwaWNfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwogZXh0ZXJuIHZvaWQgc2V0dXBfYm9vdF9BUElDX2Nsb2NrKHZvaWQpOwogZXh0ZXJuIHZvaWQgc2V0dXBfc2Vjb25kYXJ5X0FQSUNfY2xvY2sodm9pZCk7CiBleHRlcm4gdm9pZCBsYXBpY191cGRhdGVfdHNjX2ZyZXEodm9pZCk7CiYjNDM7ZXh0ZXJuIHZvaWQgYXBpY19zZXRfdGltZXJfcGVyaW9kX2h6KHU2NCBwZXJpb2RfaHosIGNvbnN0IGNoYXIgKnNvdXJjZSk7CiYjNDM7ZXh0ZXJuIHZvaWQgYXBpY19zZXRfdGltZXJfcGVyaW9kX2toeih1NjQgcGVyaW9kX2toeiwgY29uc3QgY2hhciAqc291cmNlKTsKIAogI2lmZGVmIENPTkZJR19YODZfNjQKIHN0YXRpYyBpbmxpbmUgYm9vbCBhcGljX2ZvcmNlX2VuYWJsZSh1bnNpZ25lZCBsb25nIGFkZHIpCkBAIC0xODgsNiAmIzQzOzE4OSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2xvY2FsX0FQSUModm9pZCkgeyB9CiAjIGRlZmluZSBzZXR1cF9ib290X0FQSUNfY2xvY2sgeDg2X2luaXRfbm9vcAogIyBkZWZpbmUgc2V0dXBfc2Vjb25kYXJ5X0FQSUNfY2xvY2sgeDg2X2luaXRfbm9vcAogc3RhdGljIGlubGluZSB2b2lkIGxhcGljX3VwZGF0ZV90c2NfZnJlcSh2b2lkKSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgYXBpY19zZXRfdGltZXJfcGVyaW9kX2h6KHU2NCBwZXJpb2RfaHosIGNvbnN0IGNoYXIgKnNvdXJjZSkgeyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHoodTY0IHBlcmlvZF9raHosIGNvbnN0IGNoYXIgKnNvdXJjZSkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9ic3BfQVBJQyh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBhcGljX2ludHJfbW9kZV9zZWxlY3Qodm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgYXBpY19pbnRyX21vZGVfaW5pdCh2b2lkKSB7IH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oCmluZGV4IDRhNDdjMTZlMmRmOGMwLi43NjNlZDAxNzczOGE2NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oCkBAIC0xMTgsOCAmIzQzOzExOCwxNiBAQCBzdGF0aWMgaW5saW5lIGxvbmcga3ZtX3Nldl9oeXBlcmNhbGwzKHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgbG9uZyBwMSwKIH0KIAogI2lmZGVmIENPTkZJR19LVk1fR1VFU1QKLXZvaWQga3ZtY2xvY2tfaW5pdCh2b2lkKTsKLXZvaWQga3ZtY2xvY2tfZGlzYWJsZSh2b2lkKTsKJiM0MztlbnVtIGt2bV9ndWVzdF9jcHVfYWN0aW9uIHsKJiM0MzsJS1ZNX0dVRVNUX0JTUF9TVVNQRU5ELAomIzQzOwlLVk1fR1VFU1RfQlNQX1JFU1VNRSwKJiM0MzsJS1ZNX0dVRVNUX0FQX09OTElORSwKJiM0MzsJS1ZNX0dVRVNUX0FQX09GRkxJTkUsCiYjNDM7CUtWTV9HVUVTVF9TSFVURE9XTiwKJiM0Mzt9OwomIzQzOwomIzQzO3ZvaWQga3ZtY2xvY2tfaW5pdChib29sIHByZWZlcl90c2MpOwomIzQzO3ZvaWQga3ZtY2xvY2tfY3B1X2FjdGlvbihlbnVtIGt2bV9ndWVzdF9jcHVfYWN0aW9uIGFjdGlvbik7CiBib29sIGt2bV9wYXJhX2F2YWlsYWJsZSh2b2lkKTsKIHVuc2lnbmVkIGludCBrdm1fYXJjaF9wYXJhX2ZlYXR1cmVzKHZvaWQpOwogdW5zaWduZWQgaW50IGt2bV9hcmNoX3BhcmFfaGludHModm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oCmluZGV4IDU5NGNmYTE5Y2JkNGJhLi4wNWViZjBiNzNlZjQ3ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgKQEAgLTUzMCw3ICYjNDM7NTMwLDcgQEAgaW50IHNucF9zZW5kX2d1ZXN0X3JlcXVlc3Qoc3RydWN0IHNucF9tc2dfZGVzYyAqbWRlc2MsIHN0cnVjdCBzbnBfZ3Vlc3RfcmVxICpyZXEKIGludCBzbnBfc3ZzbV92dHBtX3NlbmRfY29tbWFuZCh1OCAqYnVmZmVyKTsKIAogdm9pZCBfX2luaXQgc25wX3NlY3VyZV90c2NfcHJlcGFyZSh2b2lkKTsKLXZvaWQgX19pbml0IHNucF9zZWN1cmVfdHNjX2luaXQodm9pZCk7CiYjNDM7dW5zaWduZWQgaW50IHNucF9zZWN1cmVfdHNjX2luaXQodm9pZCk7CiBlbnVtIGVzX3Jlc3VsdCBzYXZpY19yZWdpc3Rlcl9ncGEodTY0IGdwYSk7CiBlbnVtIGVzX3Jlc3VsdCBzYXZpY191bnJlZ2lzdGVyX2dwYSh1NjQgKmdwYSk7CiB1NjQgc2F2aWNfZ2hjYl9tc3JfcmVhZCh1MzIgcmVnKTsKQEAgLTYzNyw3ICYjNDM7NjM3LDcgQEAgc3RhdGljIGlubGluZSBpbnQgc25wX3NlbmRfZ3Vlc3RfcmVxdWVzdChzdHJ1Y3Qgc25wX21zZ19kZXNjICptZGVzYywKIAkJCQkJIHN0cnVjdCBzbnBfZ3Vlc3RfcmVxICpyZXEpIHsgcmV0dXJuIC1FTk9ERVY7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHNucF9zdnNtX3Z0cG1fc2VuZF9jb21tYW5kKHU4ICpidWZmZXIpIHsgcmV0dXJuIC1FTk9ERVY7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgc25wX3NlY3VyZV90c2NfcHJlcGFyZSh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgc25wX3NlY3VyZV90c2NfaW5pdCh2b2lkKSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2luaXQgc25wX3NlY3VyZV90c2NfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgc2V2X2V2aWN0X2NhY2hlKHZvaWQgKnZhLCBpbnQgbnBhZ2VzKSB7fQogc3RhdGljIGlubGluZSBlbnVtIGVzX3Jlc3VsdCBzYXZpY19yZWdpc3Rlcl9ncGEodTY0IGdwYSkgeyByZXR1cm4gRVNfVU5TVVBQT1JURUQ7IH0KIHN0YXRpYyBpbmxpbmUgZW51bSBlc19yZXN1bHQgc2F2aWNfdW5yZWdpc3Rlcl9ncGEodTY0ICpncGEpIHsgcmV0dXJuIEVTX1VOU1VQUE9SVEVEOyB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oCmluZGV4IDg5ZTk3ZDU3NjFkODllLi5kMjNmZjA2ZGI0MWFiZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmgKQEAgLTY4LDYgJiM0Mzs2OCw3IEBAIHN0cnVjdCB2ZV9pbmZvIHsKICNpZmRlZiBDT05GSUdfSU5URUxfVERYX0dVRVNUCiAKIHZvaWQgX19pbml0IHRkeF9lYXJseV9pbml0KHZvaWQpOwomIzQzO3Vuc2lnbmVkIGludCBfX2luaXQgdGR4X3RzY19pbml0KHZvaWQpOwogCiB2b2lkIHRkeF9nZXRfdmVfaW5mbyhzdHJ1Y3QgdmVfaW5mbyAqdmUpOwogCkBAIC04OSw2ICYjNDM7OTAsNyBAQCB2b2lkIF9faW5pdCB0ZHhfZHVtcF90ZF9jdGxzKHU2NCB0ZF9jdGxzKTsKICNlbHNlCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfZWFybHlfaW5pdCh2b2lkKSB7IH07CiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdGR4X3RzY19pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfaGFsdCh2b2lkKSB7IH07CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCB0ZHhfZWFybHlfaGFuZGxlX3ZlKHN0cnVjdCBwdF9yZWdzICpyZWdzKSB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmgKaW5kZXggZmRhMThiY2IxOWI0NWEuLmE1MjM4OGFmNjA1NWU0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aW1lci5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmgKQEAgLTExLDggJiM0MzsxMSwyMSBAQCBleHRlcm4gdm9pZCByZWNhbGlicmF0ZV9jcHVfa2h6KHZvaWQpOwogCiBleHRlcm4gaW50IG5vX3RpbWVyX2NoZWNrOwogCiYjNDM7I2lmZGVmIENPTkZJR19QQVJBVklSVAogZXh0ZXJuIGJvb2wgdXNpbmdfbmF0aXZlX3NjaGVkX2Nsb2NrKHZvaWQpOwotdm9pZCBwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodTY0ICgqZnVuYykodm9pZCkpOwomIzQzOwomIzQzO2ludCBfX2luaXQgX19wYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodTY0ICgqZnVuYykodm9pZCksIGJvb2wgc3RhYmxlLAomIzQzOwkJCQkgICAgICB2b2lkICgqc2F2ZSkodm9pZCksIHZvaWQgKCpyZXN0b3JlKSh2b2lkKSk7CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh1NjQgKCpmdW5jKSh2b2lkKSwKJiM0MzsJCQkJCQkgICAgIHZvaWQgKCpzYXZlKSh2b2lkKSwKJiM0MzsJCQkJCQkgICAgIHZvaWQgKCpyZXN0b3JlKSh2b2lkKSkKJiM0Mzt7CiYjNDM7CSh2b2lkKV9fcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKGZ1bmMsIHRydWUsIHNhdmUsIHJlc3RvcmUpOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB1c2luZ19uYXRpdmVfc2NoZWRfY2xvY2sodm9pZCkgeyByZXR1cm4gdHJ1ZTsgfQomIzQzOyNlbmRpZgogCiAvKgogICogV2UgdXNlIHRoZSBmdWxsIGxpbmVhciBlcXVhdGlvbjogZih4KSA9IGEgJiM0MzsgYip4LCBpbiBvcmRlciB0byBhbGxvdwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdHNjLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90c2MuaAppbmRleCA0ZDJkMmYyMWZmMDYzZi4uY2I2ODJmMDk3ZWE3Y2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RzYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RzYy5oCkBAIC04MiwxNCAmIzQzOzgyLDIwIEBAIHN0YXRpYyBpbmxpbmUgY3ljbGVzX3QgZ2V0X2N5Y2xlcyh2b2lkKQogfQogI2RlZmluZSBnZXRfY3ljbGVzIGdldF9jeWNsZXMKIAomIzQzO3N0cnVjdCBjcHVpZF90c2NfaW5mbyB7CiYjNDM7CXVuc2lnbmVkIGludCBkZW5vbWluYXRvcjsKJiM0MzsJdW5zaWduZWQgaW50IG51bWVyYXRvcjsKJiM0MzsJdW5zaWduZWQgaW50IGNyeXN0YWxfa2h6OwomIzQzO307CiYjNDM7ZXh0ZXJuIGludCBjcHVpZF9nZXRfdHNjX2luZm8oc3RydWN0IGNwdWlkX3RzY19pbmZvICppbmZvKTsKJiM0MztleHRlcm4gdW5zaWduZWQgaW50IF9fY3B1X2toel9mcm9tX2NwdWlkKHZvaWQpOwomIzQzOwogZXh0ZXJuIHZvaWQgdHNjX2Vhcmx5X2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCB0c2NfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIG1hcmtfdHNjX3Vuc3RhYmxlKGNoYXIgKnJlYXNvbik7CiBleHRlcm4gaW50IHVuc3luY2hyb25pemVkX3RzYyh2b2lkKTsKIGV4dGVybiBpbnQgY2hlY2tfdHNjX3Vuc3RhYmxlKHZvaWQpOwogZXh0ZXJuIHZvaWQgbWFya190c2NfYXN5bmNfcmVzZXRzKGNoYXIgKnJlYXNvbik7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSh2b2lkKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfdHNjKHZvaWQpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBuYXRpdmVfc2NoZWRfY2xvY2tfZnJvbV90c2ModTY0IHRzYyk7CiAKIGV4dGVybiBpbnQgdHNjX2Nsb2Nrc291cmNlX3JlbGlhYmxlOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgKaW5kZXggOTUzZDMxOTk0MDhhZTUuLmU4NzllNmU4MzQyODMwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgKQEAgLTEyMyw2ICYjNDM7MTIzLDggQEAgc3RydWN0IHg4Nl9pbml0X3BjaSB7CiAgKiBAbXNpX2V4dF9kZXN0X2lkOgkJTVNJIHN1cHBvcnRzIDE1LWJpdCBBUElDIElEcwogICogQGluaXRfbWVtX21hcHBpbmc6CQlzZXR1cCBlYXJseSBtYXBwaW5ncyBkdXJpbmcgaW5pdF9tZW1fbWFwcGluZygpCiAgKiBAaW5pdF9hZnRlcl9ib290bWVtOgkJZ3Vlc3QgaW5pdCBhZnRlciBib290IGFsbG9jYXRvciBpcyBmaW5pc2hlZAomIzQzOyAqIEBnZXRfdHNjX2toejoJCWdldCB0aGUgVFNDIGZyZXF1ZW5jeSAocmV0dXJucyAwIGlmIGZyZXF1ZW5jeSBpcyB1bmtub3duKQomIzQzOyAqIEBnZXRfY3B1X2toejoJCWdldCB0aGUgQ1BVIGZyZXF1ZW5jeSAocmV0dXJucyAwIGlmIGZyZXF1ZW5jeSBpcyB1bmtub3duKQogICovCiBzdHJ1Y3QgeDg2X2h5cGVyX2luaXQgewogCXZvaWQgKCppbml0X3BsYXRmb3JtKSh2b2lkKTsKQEAgLTEzMSw2ICYjNDM7MTMzLDggQEAgc3RydWN0IHg4Nl9oeXBlcl9pbml0IHsKIAlib29sICgqbXNpX2V4dF9kZXN0X2lkKSh2b2lkKTsKIAl2b2lkICgqaW5pdF9tZW1fbWFwcGluZykodm9pZCk7CiAJdm9pZCAoKmluaXRfYWZ0ZXJfYm9vdG1lbSkodm9pZCk7CiYjNDM7CXVuc2lnbmVkIGludCAoKmdldF90c2Nfa2h6KSh2b2lkKTsKJiM0MzsJdW5zaWduZWQgaW50ICgqZ2V0X2NwdV9raHopKHZvaWQpOwogfTsKIAogLyoqCkBAIC0yOTEsOCAmIzQzOzI5NSw2IEBAIHN0cnVjdCB4ODZfaHlwZXJfcnVudGltZSB7CiAKIC8qKgogICogc3RydWN0IHg4Nl9wbGF0Zm9ybV9vcHMgLSBwbGF0Zm9ybSBzcGVjaWZpYyBydW50aW1lIGZ1bmN0aW9ucwotICogQGNhbGlicmF0ZV9jcHU6CQljYWxpYnJhdGUgQ1BVCi0gKiBAY2FsaWJyYXRlX3RzYzoJCWNhbGlicmF0ZSBUU0MsIGlmIGRpZmZlcmVudCBmcm9tIENQVQogICogQGdldF93YWxsY2xvY2s6CQlnZXQgdGltZSBmcm9tIEhXIGNsb2NrIGxpa2UgUlRDIGV0Yy4KICAqIEBzZXRfd2FsbGNsb2NrOgkJc2V0IHRpbWUgYmFjayB0byBIVyBjbG9jawogICogQGlvbW11X3NodXRkb3duOgkJc2V0IGJ5IGFuIElPTU1VIGRyaXZlciBmb3Igc2h1dGRvd24gaWYgbmVjZXNzYXJ5CkBAIC0zMTYsOCAmIzQzOzMxOCw2IEBAIHN0cnVjdCB4ODZfaHlwZXJfcnVudGltZSB7CiAgKiBAZ3Vlc3Q6CQkJZ3Vlc3QgaW5jYXJuYXRpb25zIGNhbGxiYWNrcwogICovCiBzdHJ1Y3QgeDg2X3BsYXRmb3JtX29wcyB7Ci0JdW5zaWduZWQgbG9uZyAoKmNhbGlicmF0ZV9jcHUpKHZvaWQpOwotCXVuc2lnbmVkIGxvbmcgKCpjYWxpYnJhdGVfdHNjKSh2b2lkKTsKIAl2b2lkICgqZ2V0X3dhbGxjbG9jaykoc3RydWN0IHRpbWVzcGVjNjQgKnRzKTsKIAlpbnQgKCpzZXRfd2FsbGNsb2NrKShjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpOwogCXZvaWQgKCppb21tdV9zaHV0ZG93bikodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bV9wYXJhLmggYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bV9wYXJhLmgKaW5kZXggYTFlZmE3OTA3YTBiMTAuLmMzYTM4NDcxMWYzYTVmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bV9wYXJhLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm1fcGFyYS5oCkBAIC00NCw2ICYjNDM7NDQsMTcgQEAKICAqLwogI2RlZmluZSBLVk1fRkVBVFVSRV9DTE9DS1NPVVJDRV9TVEFCTEVfQklUCTI0CiAKJiM0MzsvKgomIzQzOyAqIFRoZSB0aW1pbmcgaW5mb3JtYXRpb24gbGVhZiBwcm92aWRlcyBUU0MgYW5kIGxvY2FsIEFQSUMgdGltZXIgZnJlcXVlbmN5CiYjNDM7ICogaW5mb3JtYXRpb24gdG8gdGhlIGd1ZXN0LiAgTm90ZSwgdXNlcnNwYWNlIGlzIHJlc3BvbnNpYmxlIGZvciBmaWxsaW5nIHRoZQomIzQzOyAqIGxlYWYgd2l0aCB0aGUgY29ycmVjdCBpbmZvcm1hdGlvbi4KJiM0MzsgKgomIzQzOyAqICAjIEVBWDogKFZpcnR1YWwpIFRTQyBmcmVxdWVuY3kgaW4ga0h6LgomIzQzOyAqICAjIEVCWDogKFZpcnR1YWwpIEJ1cyAobG9jYWwgQVBJQyB0aW1lcikgZnJlcXVlbmN5IGluIGtIei4KJiM0MzsgKiAgIyBFQ1gsIEVEWDogUmVzZXJ2ZWQgKG11c3QgYmUgemVybykuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBLVk1fQ1BVSURfVElNSU5HX0lORk8JMHg0MDAwMDAxMAomIzQzOwogI2RlZmluZSBNU1JfS1ZNX1dBTExfQ0xPQ0sgIDB4MTEKICNkZWZpbmUgTVNSX0tWTV9TWVNURU1fVElNRSAweDEyCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwppbmRleCBhYTFlMTk5NzlhYThlMS4uOGQzZDkzMDU3NmZkNzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKQEAgLTE3Niw3ICYjNDM7MTc2LDcgQEAgc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsYXBpY19yZXNvdXJjZSA9IHsKIH07CiAKIC8qIE1lYXN1cmVkIGluIHRpY2tzIHBlciBIWi4gKi8KLXVuc2lnbmVkIGludCBsYXBpY190aW1lcl9wZXJpb2QgPSAwOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgbGFwaWNfdGltZXJfcGVyaW9kOwogCiBzdGF0aWMgdm9pZCBhcGljX3BtX2FjdGl2YXRlKHZvaWQpOwogCkBAIC03OTYsNiAmIzQzOzc5NiwxNiBAQCBib29sIF9faW5pdCBhcGljX25lZWRzX3BpdCh2b2lkKQogCXJldHVybiBsYXBpY190aW1lcl9wZXJpb2QgPT0gMDsKIH0KIAomIzQzO3ZvaWQgYXBpY19zZXRfdGltZXJfcGVyaW9kX2toeih1NjQgcGVyaW9kX2toeiwgY29uc3QgY2hhciAqc291cmNlKQomIzQzO3sKJiM0MzsJbGFwaWNfdGltZXJfcGVyaW9kID0gbXVsX3U2NF91MzJfZGl2KHBlcmlvZF9raHosIDEwMDAsIEhaKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBhcGljX3NldF90aW1lcl9wZXJpb2RfaHoodTY0IHBlcmlvZF9oeiwgY29uc3QgY2hhciAqc291cmNlKQomIzQzO3sKJiM0MzsJbGFwaWNfdGltZXJfcGVyaW9kID0gZGl2X3U2NChwZXJpb2RfaHosIEhaKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IF9faW5pdCBjYWxpYnJhdGVfQVBJQ19jbG9jayh2b2lkKQogewogCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmxldnQgPSB0aGlzX2NwdV9wdHIoJmFtcDtsYXBpY19ldmVudHMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9hY3JuLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2Fjcm4uYwppbmRleCBkYzExOWFmODM1MjQyYS4uZGM3MWE2ZmRkNDYxMzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYWNybi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYWNybi5jCkBAIC0xOSwxOCAmIzQzOzE5LDI4IEBACiAjaW5jbHVkZSAmbHQ7YXNtL2lkdGVudHJ5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2lycV9yZWdzLmgmZ3Q7CiAKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGFjcm5fdHNjX2toel9jcHVpZCBfX2luaXRkYXRhOwomIzQzOwogc3RhdGljIHUzMiBfX2luaXQgYWNybl9kZXRlY3Qodm9pZCkKIHsKIAlyZXR1cm4gYWNybl9jcHVpZF9iYXNlKCk7CiB9CiAKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBhY3JuX2dldF90c2Nfa2h6KHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gYWNybl90c2Nfa2h6X2NwdWlkOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIF9faW5pdCBhY3JuX2luaXRfcGxhdGZvcm0odm9pZCkKIHsKIAkvKiBJbnN0YWxsIHN5c3RlbSBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgQUNSTiBoeXBlcnZpc29yIGNhbGxiYWNrICovCiAJc3lzdmVjX2luc3RhbGwoSFlQRVJWSVNPUl9DQUxMQkFDS19WRUNUT1IsIHN5c3ZlY19hY3JuX2h2X2NhbGxiYWNrKTsKIAotCXg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjID0gYWNybl9nZXRfdHNjX2toejsKLQl4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX2NwdSA9IGFjcm5fZ2V0X3RzY19raHo7CiYjNDM7CWFjcm5fdHNjX2toel9jcHVpZCA9IGNwdWlkX2VheChBQ1JOX0NQVUlEX1RJTUlOR19JTkZPKTsKJiM0MzsJaWYgKGFjcm5fdHNjX2toel9jcHVpZCkgewomIzQzOwkJeDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHogPSBhY3JuX2dldF90c2Nfa2h6OwomIzQzOwkJeDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHogPSBhY3JuX2dldF90c2Nfa2h6OwomIzQzOwl9CiB9CiAKIHN0YXRpYyBib29sIGFjcm5feDJhcGljX2F2YWlsYWJsZSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tc2h5cGVydi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tc2h5cGVydi5jCmluZGV4IDE4NWQ0ZjY3N2VjMGYwLi5jNGRhOGUzNTMxOWFjZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tc2h5cGVydi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuYwpAQCAtMjc1LDYzICYjNDM7Mjc1LDYgQEAgc3RhdGljIHZvaWQgaHZfZ3Vlc3RfY3Jhc2hfc2h1dGRvd24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB9CiAjZW5kaWYgLyogQ09ORklHX0NSQVNIX0RVTVAgKi8KIAotc3RhdGljIHU2NCBodl9yZWZfY291bnRlcl9hdF9zdXNwZW5kOwotc3RhdGljIHZvaWQgKCpvbGRfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSkodm9pZCk7Ci1zdGF0aWMgdm9pZCAoKm9sZF9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKSh2b2lkKTsKLQotLyoKLSAqIEh5cGVyLVYgY2xvY2sgY291bnRlciByZXNldHMgZHVyaW5nIGhpYmVybmF0aW9uLiBTYXZlIGFuZCByZXN0b3JlIGNsb2NrCi0gKiBvZmZzZXQgZHVyaW5nIHN1c3BlbmQvcmVzdW1lLCB3aGlsZSBhbHNvIGNvbnNpZGVyaW5nIHRoZSB0aW1lIHBhc3NlZAotICogYmVmb3JlIHN1c3BlbmQuIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgc2NoZWRfY2xvY2sgdXNpbmcgaHYgdHNjIHBhZ2UKLSAqIGJhc2VkIGNsb2Nrc291cmNlLCBwcm9jZWVkcyBmcm9tIHdoZXJlIGl0IGxlZnQgb2ZmIGR1cmluZyBzdXNwZW5kIGFuZAotICogaXQgc2hvd3MgY29ycmVjdCB0aW1lIGZvciB0aGUgdGltZXN0YW1wcyBvZiBrZXJuZWwgbWVzc2FnZXMgYWZ0ZXIgcmVzdW1lLgotICovCi1zdGF0aWMgdm9pZCBzYXZlX2h2X2Nsb2NrX3RzY19zdGF0ZSh2b2lkKQotewotCWh2X3JlZl9jb3VudGVyX2F0X3N1c3BlbmQgPSBodl9yZWFkX3JlZmVyZW5jZV9jb3VudGVyKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlc3RvcmVfaHZfY2xvY2tfdHNjX3N0YXRlKHZvaWQpCi17Ci0JLyoKLQkgKiBBZGp1c3QgdGhlIG9mZnNldHMgdXNlZCBieSBodiB0c2MgY2xvY2tzb3VyY2UgdG8KLQkgKiBhY2NvdW50IGZvciB0aGUgdGltZSBzcGVudCBiZWZvcmUgaGliZXJuYXRpb24uCi0JICogYWRqdXN0ZWQgdmFsdWUgPSByZWZlcmVuY2UgY291bnRlciAodGltZSkgYXQgc3VzcGVuZAotCSAqICAgICAgICAgICAgICAgIC0gcmVmZXJlbmNlIGNvdW50ZXIgKHRpbWUpIG5vdy4KLQkgKi8KLQlodl9hZGpfc2NoZWRfY2xvY2tfb2Zmc2V0KGh2X3JlZl9jb3VudGVyX2F0X3N1c3BlbmQgLSBodl9yZWFkX3JlZmVyZW5jZV9jb3VudGVyKCkpOwotfQotCi0vKgotICogRnVuY3Rpb25zIHRvIG92ZXJyaWRlIHNhdmVfc2NoZWRfY2xvY2tfc3RhdGUgYW5kIHJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUKLSAqIGZ1bmN0aW9ucyBvZiB4ODZfcGxhdGZvcm0uIFRoZSBIeXBlci1WIGNsb2NrIGNvdW50ZXIgaXMgcmVzZXQgZHVyaW5nCi0gKiBzdXNwZW5kLXJlc3VtZSBhbmQgdGhlIG9mZnNldCB1c2VkIHRvIG1lYXN1cmUgdGltZSBuZWVkcyB0byBiZQotICogY29ycmVjdGVkLCBwb3N0IHJlc3VtZS4KLSAqLwotc3RhdGljIHZvaWQgaHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKQotewotCW9sZF9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKCk7Ci0Jc2F2ZV9odl9jbG9ja190c2Nfc3RhdGUoKTsKLX0KLQotc3RhdGljIHZvaWQgaHZfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKQotewotCXJlc3RvcmVfaHZfY2xvY2tfdHNjX3N0YXRlKCk7Ci0Jb2xkX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUoKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHg4Nl9zZXR1cF9vcHNfZm9yX3RzY19wZ19jbG9jayh2b2lkKQotewotCWlmICghKG1zX2h5cGVydi5mZWF0dXJlcyAmYW1wOyBIVl9NU1JfUkVGRVJFTkNFX1RTQ19BVkFJTEFCTEUpKQotCQlyZXR1cm47Ci0KLQlvbGRfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSA9IHg4Nl9wbGF0Zm9ybS5zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlOwotCXg4Nl9wbGF0Zm9ybS5zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlID0gaHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZTsKLQotCW9sZF9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlID0geDg2X3BsYXRmb3JtLnJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGU7Ci0JeDg2X3BsYXRmb3JtLnJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUgPSBodl9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlOwotfQotCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogREVGSU5FX1NUQVRJQ19DQUxMKGh2X2h5cGVyY2FsbCwgaHZfc3RkX2h5cGVyY2FsbCk7CiBFWFBPUlRfU1RBVElDX0NBTExfVFJBTVBfR1BMKGh2X2h5cGVyY2FsbCk7CkBAIC0zOTUsNyAmIzQzOzMzOCw3IEBAIHN0YXRpYyBpbnQgaHZfbm1pX3Vua25vd24odW5zaWduZWQgaW50IHZhbCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB9CiAjZW5kaWYKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgaHZfZ2V0X3RzY19raHoodm9pZCkKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBodl9nZXRfdHNjX2toeih2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZnJlcTsKIApAQCAtNTczLDkgJiM0Mzs1MTYsOCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbXNfaHlwZXJ2X2luaXRfcGxhdGZvcm0odm9pZCkKIAogCWlmIChtc19oeXBlcnYuZmVhdHVyZXMgJmFtcDsgSFZfQUNDRVNTX0ZSRVFVRU5DWV9NU1JTICZhbXA7JmFtcDsKIAkgICAgbXNfaHlwZXJ2Lm1pc2NfZmVhdHVyZXMgJmFtcDsgSFZfRkVBVFVSRV9GUkVRVUVOQ1lfTVNSU19BVkFJTEFCTEUpIHsKLQkJeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MgPSBodl9nZXRfdHNjX2toejsKLQkJeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUgPSBodl9nZXRfdHNjX2toejsKLQkJc2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfS05PV05fRlJFUSk7CiYjNDM7CQl4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeiA9IGh2X2dldF90c2Nfa2h6OwomIzQzOwkJeDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHogPSBodl9nZXRfdHNjX2toejsKIAl9CiAKIAlpZiAobXNfaHlwZXJ2LnByaXZfaGlnaCAmYW1wOyBIVl9JU09MQVRJT04pIHsKQEAgLTY0NiwxMCAmIzQzOzU4OCw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtc19oeXBlcnZfaW5pdF9wbGF0Zm9ybSh2b2lkKQogCQl1NjQJaHZfbGFwaWNfZnJlcXVlbmN5OwogCiAJCXJkbXNycShIVl9YNjRfTVNSX0FQSUNfRlJFUVVFTkNZLCBodl9sYXBpY19mcmVxdWVuY3kpOwotCQlodl9sYXBpY19mcmVxdWVuY3kgPSBkaXZfdTY0KGh2X2xhcGljX2ZyZXF1ZW5jeSwgSFopOwotCQlsYXBpY190aW1lcl9wZXJpb2QgPSBodl9sYXBpY19mcmVxdWVuY3k7Ci0JCXByX2luZm8oJiMzNDtIeXBlci1WOiBMQVBJQyBUaW1lciBGcmVxdWVuY3k6ICUjeFxuJiMzNDssCi0JCQlsYXBpY190aW1lcl9wZXJpb2QpOwomIzQzOwkJYXBpY19zZXRfdGltZXJfcGVyaW9kX2h6KGh2X2xhcGljX2ZyZXF1ZW5jeSwgJiMzNDtIeXBlci1WIGh5cGVydmlzb3ImIzM0Oyk7CiAJfQogCiAJcmVnaXN0ZXJfbm1pX2hhbmRsZXIoTk1JX1VOS05PV04sIGh2X25taV91bmtub3duLCBOTUlfRkxBR19GSVJTVCwKQEAgLTc0MCw3ICYjNDM7Njc5LDYgQEAgc3RhdGljIHZvaWQgX19pbml0IG1zX2h5cGVydl9pbml0X3BsYXRmb3JtKHZvaWQpCiAKIAkvKiBSZWdpc3RlciBIeXBlci1WIHNwZWNpZmljIGNsb2Nrc291cmNlICovCiAJaHZfaW5pdF9jbG9ja3NvdXJjZSgpOwotCXg4Nl9zZXR1cF9vcHNfZm9yX3RzY19wZ19jbG9jaygpOwogCWh2X3Z0bF9pbml0X3BsYXRmb3JtKCk7CiAjZW5kaWYKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvdm13YXJlLmMKaW5kZXggMzRiNzM1NzNiMTA4ZDcuLjIzMjI1NTI3OWE2ZWVjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Ztd2FyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvdm13YXJlLmMKQEAgLTY0LDcgJiM0Mzs2NCw3IEBAIHN0cnVjdCB2bXdhcmVfc3RlYWxfdGltZSB7CiAJdTY0IHJlc2VydmVkWzddOwogfTsKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgdm13YXJlX3RzY19raHogX19yb19hZnRlcl9pbml0OwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHZtd2FyZV90c2Nfa2h6IF9faW5pdGRhdGE7CiBzdGF0aWMgdTggdm13YXJlX2h5cGVyY2FsbF9tb2RlICAgICBfX3JvX2FmdGVyX2luaXQ7CiAKIHVuc2lnbmVkIGxvbmcgdm13YXJlX2h5cGVyY2FsbF9zbG93KHVuc2lnbmVkIGxvbmcgY21kLApAQCAtMTM3LDcgJiM0MzsxMzcsNyBAQCBzdGF0aWMgaW5saW5lIGludCBfX3Ztd2FyZV9wbGF0Zm9ybSh2b2lkKQogCXJldHVybiBlYXggIT0gVUlOVF9NQVggJmFtcDsmYW1wOyBlYnggPT0gVk1XQVJFX0hZUEVSVklTT1JfTUFHSUM7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHZtd2FyZV9nZXRfdHNjX2toeih2b2lkKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IHZtd2FyZV9nZXRfdHNjX2toeih2b2lkKQogewogCXJldHVybiB2bXdhcmVfdHNjX2toejsKIH0KQEAgLTM0OCw3ICYjNDM7MzQ4LDggQEAgc3RhdGljIHZvaWQgX19pbml0IHZtd2FyZV9wYXJhdmlydF9vcHNfc2V0dXAodm9pZCkKIAl2bXdhcmVfY3ljMm5zX3NldHVwKCk7CiAKIAlpZiAodm13X3NjaGVkX2Nsb2NrKQotCQlwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodm13YXJlX3NjaGVkX2Nsb2NrKTsKJiM0MzsJCXBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh2bXdhcmVfc2NoZWRfY2xvY2ssCiYjNDM7CQkJCQkgeDg2X2luaXRfbm9vcCwgeDg2X2luaXRfbm9vcCk7CiAKIAlpZiAodm13YXJlX2lzX3N0ZWFsY2xvY2tfYXZhaWxhYmxlKCkpIHsKIAkJaGFzX3N0ZWFsX2Nsb2NrID0gdHJ1ZTsKQEAgLTM5MCw4ICYjNDM7MzkxLDYgQEAgc3RhdGljIHZvaWQgX19pbml0IHZtd2FyZV9zZXRfY2FwYWJpbGl0aWVzKHZvaWQpCiB7CiAJc2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpOwogCXNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTsKLQlpZiAodm13YXJlX3RzY19raHopCi0JCXNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpOwogCWlmICh2bXdhcmVfaHlwZXJjYWxsX21vZGUgPT0gQ1BVSURfVk1XQVJFX0ZFQVRVUkVTX0VDWF9WTUNBTEwpCiAJCXNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVk1DQUxMKTsKIAllbHNlIGlmICh2bXdhcmVfaHlwZXJjYWxsX21vZGUgPT0gQ1BVSURfVk1XQVJFX0ZFQVRVUkVTX0VDWF9WTU1DQUxMKQpAQCAtNDE5LDE1ICYjNDM7NDE4LDExIEBAIHN0YXRpYyB2b2lkIF9faW5pdCB2bXdhcmVfcGxhdGZvcm1fc2V0dXAodm9pZCkKIAkJfQogCiAJCXZtd2FyZV90c2Nfa2h6ID0gdHNjX2toejsKLQkJeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MgPSB2bXdhcmVfZ2V0X3RzY19raHo7Ci0JCXg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ID0gdm13YXJlX2dldF90c2Nfa2h6OwomIzQzOwkJeDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHogPSB2bXdhcmVfZ2V0X3RzY19raHo7CiYjNDM7CQl4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeiA9IHZtd2FyZV9nZXRfdHNjX2toejsKIAotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwogCQkvKiBTa2lwIGxhcGljIGNhbGlicmF0aW9uIHNpbmNlIHdlIGtub3cgdGhlIGJ1cyBmcmVxdWVuY3kuICovCi0JCWxhcGljX3RpbWVyX3BlcmlvZCA9IGVjeCAvIEhaOwotCQlwcl9pbmZvKCYjMzQ7SG9zdCBidXMgY2xvY2sgc3BlZWQgcmVhZCBmcm9tIGh5cGVydmlzb3IgOiAldSBIelxuJiMzNDssCi0JCQllY3gpOwotI2VuZGlmCiYjNDM7CQlhcGljX3NldF90aW1lcl9wZXJpb2RfaHooZWN4LCAmIzM0O1ZNd2FyZSBoeXBlcnZpc29yJiMzNDspOwogCX0gZWxzZSB7CiAJCXByX3dhcm4oJiMzNDtGYWlsZWQgdG8gZ2V0IFRTQyBmcmVxIGZyb20gdGhlIGh5cGVydmlzb3JcbiYjMzQ7KTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvamFpbGhvdXNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvamFpbGhvdXNlLmMKaW5kZXggZjU4Y2U5MjIwZTBmMzIuLmZmMTczMDUyY2RjZWRjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvamFpbGhvdXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2phaWxob3VzZS5jCkBAIC02NSwxMCAmIzQzOzY1LDEwIEBAIHN0YXRpYyB2b2lkIGphaWxob3VzZV9nZXRfd2FsbGNsb2NrKHN0cnVjdCB0aW1lc3BlYzY0ICpub3cpCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBqYWlsaG91c2VfdGltZXJfaW5pdCh2b2lkKQogewotCWxhcGljX3RpbWVyX3BlcmlvZCA9IHNldHVwX2RhdGEudjEuYXBpY19raHogKiAoMTAwMCAvIEhaKTsKJiM0MzsJYXBpY19zZXRfdGltZXJfcGVyaW9kX2toeihzZXR1cF9kYXRhLnYxLmFwaWNfa2h6LCAmIzM0O0phaWxob3VzZSBoeXBlcnZpc29yJiMzNDspOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBqYWlsaG91c2VfZ2V0X3RzYyh2b2lkKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGphaWxob3VzZV9nZXRfdHNjKHZvaWQpCiB7CiAJcmV0dXJuIHByZWNhbGlicmF0ZWRfdHNjX2toejsKIH0KQEAgLTIxMCw4ICYjNDM7MjEwLDYgQEAgc3RhdGljIHZvaWQgX19pbml0IGphaWxob3VzZV9pbml0X3BsYXRmb3JtKHZvaWQpCiAJeDg2X2luaXQubXBwYXJzZS5wYXJzZV9zbXBfY2ZnCQk9IGphaWxob3VzZV9wYXJzZV9zbXBfY29uZmlnOwogCXg4Nl9pbml0LnBjaS5hcmNoX2luaXQJCQk9IGphaWxob3VzZV9wY2lfYXJjaF9pbml0OwogCi0JeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUJCT0gamFpbGhvdXNlX2dldF90c2M7Ci0JeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MJCT0gamFpbGhvdXNlX2dldF90c2M7CiAJeDg2X3BsYXRmb3JtLmdldF93YWxsY2xvY2sJCT0gamFpbGhvdXNlX2dldF93YWxsY2xvY2s7CiAJeDg2X3BsYXRmb3JtLmxlZ2FjeS5ydGMJCQk9IDA7CiAJeDg2X3BsYXRmb3JtLmxlZ2FjeS53YXJtX3Jlc2V0CQk9IDA7CkBAIC0yNTcsNyAmIzQzOzI1NSw2IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBqYWlsaG91c2VfaW5pdF9wbGF0Zm9ybSh2b2lkKQogCXByX2RlYnVnKCYjMzQ7SmFpbGhvdXNlOiBQTS1UaW1lciBJTyBQb3J0OiAlI3hcbiYjMzQ7LCBwbXRtcl9pb3BvcnQpOwogCiAJcHJlY2FsaWJyYXRlZF90c2Nfa2h6ID0gc2V0dXBfZGF0YS52MS50c2Nfa2h6OwotCXNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpOwogCiAJcGNpX3Byb2JlID0gMDsKIApAQCAtMjkzLDUgJiM0MzsyOTAsNyBAQCBjb25zdCBzdHJ1Y3QgaHlwZXJ2aXNvcl94ODYgeDg2X2h5cGVyX2phaWxob3VzZSBfX3JlZmNvbnN0ID0gewogCS5kZXRlY3QJCQk9IGphaWxob3VzZV9kZXRlY3QsCiAJLmluaXQuaW5pdF9wbGF0Zm9ybQk9IGphaWxob3VzZV9pbml0X3BsYXRmb3JtLAogCS5pbml0LngyYXBpY19hdmFpbGFibGUJPSBqYWlsaG91c2VfeDJhcGljX2F2YWlsYWJsZSwKJiM0MzsJLmluaXQuZ2V0X3RzY19raHoJPSBqYWlsaG91c2VfZ2V0X3RzYywKJiM0MzsJLmluaXQuZ2V0X2NwdV9raHoJPSBqYWlsaG91c2VfZ2V0X3RzYywKIAkuaWdub3JlX25vcHYJCT0gdHJ1ZSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3ZtLmMgYi9hcmNoL3g4Ni9rZXJuZWwva3ZtLmMKaW5kZXggZGNlZjg0ZGEzMDRiODkuLmJlZWEwYjZhYTc4ZTFhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2t2bS5jCkBAIC00OSw2ICYjNDM7NDksOSBAQAogI2luY2x1ZGUgJmx0O2FzbS9zdm0uaCZndDsKICNpbmNsdWRlICZsdDthc20vZTgyMC9hcGkuaCZndDsKIAomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQga3ZtX3RzY19raHpfY3B1aWQgX19pbml0ZGF0YTsKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGt2bV9jcHVfa2h6X2NwdWlkIF9faW5pdGRhdGE7CiYjNDM7CiBERUZJTkVfU1RBVElDX0tFWV9GQUxTRV9STyhrdm1fYXN5bmNfcGZfZW5hYmxlZCk7CiAKIHN0YXRpYyBpbnQga3ZtYXBmID0gMTsKQEAgLTQ1Nyw3ICYjNDM7NDYwLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHNldl9tYXBfcGVyY3B1X2RhdGEodm9pZCkKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGt2bV9ndWVzdF9jcHVfb2ZmbGluZShib29sIHNodXRkb3duKQomIzQzO3N0YXRpYyB2b2lkIGt2bV9ndWVzdF9jcHVfb2ZmbGluZShlbnVtIGt2bV9ndWVzdF9jcHVfYWN0aW9uIGFjdGlvbikKIHsKIAlrdm1fZGlzYWJsZV9zdGVhbF90aW1lKCk7CiAJaWYgKGt2bV9wYXJhX2hhc19mZWF0dXJlKEtWTV9GRUFUVVJFX1BWX0VPSSkpCkBAIC00NjUsMjMgJiM0Mzs0NjgsMzAgQEAgc3RhdGljIHZvaWQga3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKGJvb2wgc2h1dGRvd24pCiAJaWYgKGt2bV9wYXJhX2hhc19mZWF0dXJlKEtWTV9GRUFUVVJFX01JR1JBVElPTl9DT05UUk9MKSkKIAkJd3Jtc3JxKE1TUl9LVk1fTUlHUkFUSU9OX0NPTlRST0wsIDApOwogCWt2bV9wdl9kaXNhYmxlX2FwZigpOwotCWlmICghc2h1dGRvd24pCiYjNDM7CWlmIChhY3Rpb24gIT0gS1ZNX0dVRVNUX1NIVVRET1dOKQogCQlhcGZfdGFza193YWtlX2FsbCgpOwotCWt2bWNsb2NrX2Rpc2FibGUoKTsKJiM0MzsKJiM0MzsJa3ZtY2xvY2tfY3B1X2FjdGlvbihhY3Rpb24pOwogfQogCi1zdGF0aWMgaW50IGt2bV9jcHVfb25saW5lKHVuc2lnbmVkIGludCBjcHUpCiYjNDM7c3RhdGljIHZvaWQgX19rdm1fY3B1X29ubGluZSh1bnNpZ25lZCBpbnQgY3B1LCBlbnVtIGt2bV9ndWVzdF9jcHVfYWN0aW9uIGFjdGlvbikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwomIzQzOwlrdm1jbG9ja19jcHVfYWN0aW9uKGFjdGlvbik7CiAJa3ZtX2d1ZXN0X2NwdV9pbml0KCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybiAwOwogfQogCiAjaWZkZWYgQ09ORklHX1NNUAogCiYjNDM7c3RhdGljIGludCBrdm1fY3B1X29ubGluZSh1bnNpZ25lZCBpbnQgY3B1KQomIzQzO3sKJiM0MzsJX19rdm1fY3B1X29ubGluZShjcHUsIEtWTV9HVUVTVF9BUF9PTkxJTkUpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoY3B1bWFza192YXJfdCwgX19wdl9jcHVfbWFzayk7CiAKIHN0YXRpYyBib29sIHB2X3RsYl9mbHVzaF9zdXBwb3J0ZWQodm9pZCkKQEAgLTcyMyw3ICYjNDM7NzMzLDcgQEAgc3RhdGljIGludCBrdm1fY3B1X2Rvd25fcHJlcGFyZSh1bnNpZ25lZCBpbnQgY3B1KQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0Ja3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKGZhbHNlKTsKJiM0MzsJa3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKEtWTV9HVUVTVF9BUF9PRkZMSU5FKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIDA7CiB9CkBAIC03MzQsNyAmIzQzOzc0NCw3IEBAIHN0YXRpYyBpbnQga3ZtX3N1c3BlbmQodm9pZCAqZGF0YSkKIHsKIAl1NjQgdmFsID0gMDsKIAotCWt2bV9ndWVzdF9jcHVfb2ZmbGluZShmYWxzZSk7CiYjNDM7CWt2bV9ndWVzdF9jcHVfb2ZmbGluZShLVk1fR1VFU1RfQlNQX1NVU1BFTkQpOwogCiAjaWZkZWYgQ09ORklHX0FSQ0hfQ1BVSURMRV9IQUxUUE9MTAogCWlmIChrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9QT0xMX0NPTlRST0wpKQpAQCAtNzQ2LDcgJiM0Mzs3NTYsNyBAQCBzdGF0aWMgaW50IGt2bV9zdXNwZW5kKHZvaWQgKmRhdGEpCiAKIHN0YXRpYyB2b2lkIGt2bV9yZXN1bWUodm9pZCAqZGF0YSkKIHsKLQlrdm1fY3B1X29ubGluZShyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKJiM0MzsJX19rdm1fY3B1X29ubGluZShyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCBLVk1fR1VFU1RfQlNQX1JFU1VNRSk7CiAKICNpZmRlZiBDT05GSUdfQVJDSF9DUFVJRExFX0hBTFRQT0xMCiAJaWYgKGt2bV9wYXJhX2hhc19mZWF0dXJlKEtWTV9GRUFUVVJFX1BPTExfQ09OVFJPTCkgJmFtcDsmYW1wOyBoYXNfZ3Vlc3RfcG9sbCkKQEAgLTc2NSw3ICYjNDM7Nzc1LDcgQEAgc3RhdGljIHN0cnVjdCBzeXNjb3JlIGt2bV9zeXNjb3JlID0gewogCiBzdGF0aWMgdm9pZCBrdm1fcHZfZ3Vlc3RfY3B1X3JlYm9vdCh2b2lkICp1bnVzZWQpCiB7Ci0Ja3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKHRydWUpOwomIzQzOwlrdm1fZ3Vlc3RfY3B1X29mZmxpbmUoS1ZNX0dVRVNUX1NIVVRET1dOKTsKIH0KIAogc3RhdGljIGludCBrdm1fcHZfcmVib290X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLApAQCAtNzg5LDcgJiM0Mzs3OTksNyBAQCBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGt2bV9wdl9yZWJvb3RfbmIgPSB7CiAjaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKIHN0YXRpYyB2b2lkIGt2bV9jcmFzaF9zaHV0ZG93bihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlrdm1fZ3Vlc3RfY3B1X29mZmxpbmUodHJ1ZSk7CiYjNDM7CWt2bV9ndWVzdF9jcHVfb2ZmbGluZShLVk1fR1VFU1RfU0hVVERPV04pOwogCW5hdGl2ZV9tYWNoaW5lX2NyYXNoX3NodXRkb3duKHJlZ3MpOwogfQogI2VuZGlmCkBAIC05MTEsNiAmIzQzOzkyMSwyNiBAQCBib29sIGt2bV9wYXJhX2F2YWlsYWJsZSh2b2lkKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3BhcmFfYXZhaWxhYmxlKTsKIAomIzQzO3N0YXRpYyB1MzIgX19pbml0IGt2bV9jcHVpZF90aW1pbmdfaW5mb19sZWFmKHZvaWQpCiYjNDM7ewomIzQzOwl1MzIgYmFzZSA9IGt2bV9jcHVpZF9iYXNlKCk7CiYjNDM7CiYjNDM7CWlmICghYmFzZSB8fCBjcHVpZF9lYXgoYmFzZSkgJmx0OyAoYmFzZSB8IEtWTV9DUFVJRF9USU1JTkdfSU5GTykpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGJhc2UgfCBLVk1fQ1BVSURfVElNSU5HX0lORk87CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGt2bV9nZXRfdHNjX2toeih2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIGt2bV90c2Nfa2h6X2NwdWlkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBrdm1fZ2V0X2NwdV9raHoodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBrdm1fY3B1X2toel9jcHVpZDsKJiM0Mzt9CiYjNDM7CiB1bnNpZ25lZCBpbnQga3ZtX2FyY2hfcGFyYV9mZWF0dXJlcyh2b2lkKQogewogCXJldHVybiBjcHVpZF9lYXgoa3ZtX2NwdWlkX2Jhc2UoKSB8IEtWTV9DUFVJRF9GRUFUVVJFUyk7CkBAIC05NjAsNiAmIzQzOzk5MCw4IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrdm1faW5pdF9wbGF0Zm9ybSh2b2lkKQogCQkubWFza19sbyA9ICh1MzIpKH4oU1pfNEcgLSB0b2x1ZCAtIDEpKSB8IE1UUlJfUEhZU01BU0tfViwKIAkJLm1hc2tfaGkgPSAoQklUX1VMTChib290X2NwdV9kYXRhLng4Nl9waHlzX2JpdHMpIC0gMSkgJmd0OyZndDsgMzIsCiAJfTsKJiM0MzsJdTMyIHRpbWluZ19pbmZvX2xlYWYsIGFwaWNfa2h6OwomIzQzOwlib29sIHRzY19pc19yZWxpYWJsZTsKIAogCWlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9HVUVTVF9NRU1fRU5DUllQVCkgJmFtcDsmYW1wOwogCSAgICBrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9NSUdSQVRJT05fQ09OVFJPTCkpIHsKQEAgLTEwMDcsNyAmIzQzOzEwMzksNDQgQEAgc3RhdGljIHZvaWQgX19pbml0IGt2bV9pbml0X3BsYXRmb3JtKHZvaWQpCiAJCQl3cm1zcnEoTVNSX0tWTV9NSUdSQVRJT05fQ09OVFJPTCwKIAkJCSAgICAgICBLVk1fTUlHUkFUSU9OX1JFQURZKTsKIAl9Ci0Ja3ZtY2xvY2tfaW5pdCgpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBJZiBLVk0gYWR2ZXJ0aXNlcyB0aGUgZnJlcXVlbmN5IGRpcmVjdGx5IGluIENQVUlELCB1c2UgdGhhdCBpbnN0ZWFkCiYjNDM7CSAqIG9mIHJldmVyc2UtY2FsY3VsYXRpbmcgaXQgZnJvbSB0aGUgS1ZNIGNsb2NrIGRhdGEsIG9yIHdvcnNlLCB0cnlpbmcKJiM0MzsJICogdG8gY2FsaWJyYXRhdGUgdGhlIFRTQyB1c2luZyBhbiBlbXVsYXRlZCBkZXZpY2UuCiYjNDM7CSAqLwomIzQzOwl0aW1pbmdfaW5mb19sZWFmID0ga3ZtX2NwdWlkX3RpbWluZ19pbmZvX2xlYWYoKTsKJiM0MzsJaWYgKHRpbWluZ19pbmZvX2xlYWYpIHsKJiM0MzsJCWt2bV90c2Nfa2h6X2NwdWlkID0gY3B1aWRfZWF4KHRpbWluZ19pbmZvX2xlYWYpOwomIzQzOwkJaWYgKGt2bV90c2Nfa2h6X2NwdWlkKSB7CiYjNDM7CQkJeDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHogPSBrdm1fZ2V0X3RzY19raHo7CiYjNDM7CQkJeDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHogPSBrdm1fZ2V0X3RzY19raHo7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBUaGUgbGVhZiBhbHNvIGluY2x1ZGVzIHRoZSBsb2NhbCBBUElDIGJ1cy90aW1lciBmcmVxdWVuY3kuKi8KJiM0MzsJCWFwaWNfa2h6ID0gY3B1aWRfZWJ4KHRpbWluZ19pbmZvX2xlYWYpOwomIzQzOwkJaWYgKGFwaWNfa2h6KQomIzQzOwkJCWFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHooYXBpY19raHosICYjMzQ7S1ZNIGh5cGVydmlzb3ImIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUHJlZmVyIENQVUlELjB4MTYgb3ZlciBLVk0mIzM5O3MgUFYgQ1BVSUQgd2hlbiBwb3NzaWJsZSwgYXMgdGhlIGJhc2UgQ1BVCiYjNDM7CSAqIGZyZXF1ZW5jeSBpc24mIzM5O3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgdGhlIFRTQyBmcmVxdWVuY3kuCiYjNDM7CSAqLwomIzQzOwlrdm1fY3B1X2toel9jcHVpZCA9IF9fY3B1X2toel9mcm9tX2NwdWlkKCk7CiYjNDM7CWlmIChrdm1fY3B1X2toel9jcHVpZCkKJiM0MzsJCXg4Nl9pbml0Lmh5cGVyLmdldF9jcHVfa2h6ID0ga3ZtX2dldF9jcHVfa2h6OwomIzQzOwomIzQzOyAgICAgICAgLyoKJiM0MzsgICAgICAgICAqIElmIHRoZSBUU0MgY291bnRzIGF0IGEgY29uc3RhbnQgZnJlcXVlbmN5IGFjcm9zcyBQL1Qgc3RhdGVzIGFuZCBpbgomIzQzOyAgICAgICAgICogZGVlcCBDLXN0YXRlcywgdHJlYXQgdGhlIFRTQyByZWxpYWJsZSwgYXMgZ3VhcmFudGVlZCBieSBLVk0uCiYjNDM7ICAgICAgICAgKi8KJiM0MzsJdHNjX2lzX3JlbGlhYmxlID0gYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQykgJmFtcDsmYW1wOwomIzQzOwkJCSAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05PTlNUT1BfVFNDKTsKJiM0MzsJaWYgKHRzY19pc19yZWxpYWJsZSkKJiM0MzsJCXNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTsKJiM0MzsKJiM0MzsJa3ZtY2xvY2tfaW5pdCh0c2NfaXNfcmVsaWFibGUpOwogCXg4Nl9wbGF0Zm9ybS5hcGljX3Bvc3RfaW5pdCA9IGt2bV9hcGljX2luaXQ7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMgYi9hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYwppbmRleCBjYjNkMGNhMWZhMjI1YS4uODQyZjM4YzVmNmNhYWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jCkBAIC0xMiw3ICYjNDM7MTIsNiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2hhcmRpcnEuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jcHVob3RwbHVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9jbG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NldF9tZW1vcnkuaCZndDsKQEAgLTU0LDYgJiM0Mzs1Myw4IEBAIHN0YXRpYyBzdHJ1Y3QgcHZjbG9ja192c3lzY2FsbF90aW1lX2luZm8gKmh2Y2xvY2tfbWVtOwogREVGSU5FX1BFUl9DUFUoc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICosIGh2X2Nsb2NrX3Blcl9jcHUpOwogRVhQT1JUX1BFUl9DUFVfU1lNQk9MX0dQTChodl9jbG9ja19wZXJfY3B1KTsKIAomIzQzO3N0YXRpYyBib29sIGt2bWNsb2NrX3N1c3BlbmRlZDsKJiM0MzsKIC8qCiAgKiBUaGUgd2FsbGNsb2NrIGlzIHRoZSB0aW1lIG9mIGRheSB3aGVuIHdlIGJvb3RlZC4gU2luY2UgdGhlbiwgc29tZSB0aW1lIG1heQogICogaGF2ZSBlbGFwc2VkIHNpbmNlIHRoZSBoeXBlcnZpc29yIHdyb3RlIHRoZSBkYXRhLiBTbyB3ZSB0cnkgdG8gYWNjb3VudCBmb3IKQEAgLTYxLDYgJiM0Mzs2Miw3IEBAIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTF9HUEwoaHZfY2xvY2tfcGVyX2NwdSk7CiAgKi8KIHN0YXRpYyB2b2lkIGt2bV9nZXRfd2FsbGNsb2NrKHN0cnVjdCB0aW1lc3BlYzY0ICpub3cpCiB7CiYjNDM7CVdBUk5fT05fT05DRShrdm1jbG9ja19zdXNwZW5kZWQpOwogCXdybXNycShtc3Jfa3ZtX3dhbGxfY2xvY2ssIHNsb3dfdmlydF90b19waHlzKCZhbXA7d2FsbF9jbG9jaykpOwogCXByZWVtcHRfZGlzYWJsZSgpOwogCXB2Y2xvY2tfcmVhZF93YWxsY2xvY2soJmFtcDt3YWxsX2Nsb2NrLCB0aGlzX2NwdV9wdnRpKCksIG5vdyk7CkBAIC03Miw2ICYjNDM7NzQsMjUgQEAgc3RhdGljIGludCBrdm1fc2V0X3dhbGxjbG9jayhjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqbm93KQogCXJldHVybiAtRU5PREVWOwogfQogCiYjNDM7c3RhdGljIHZvaWQga3ZtX3JlZ2lzdGVyX2Nsb2NrKGNoYXIgKnR4dCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwdmNsb2NrX3ZzeXNjYWxsX3RpbWVfaW5mbyAqc3JjID0gdGhpc19jcHVfaHZjbG9jaygpOwomIzQzOwl1NjQgcGE7CiYjNDM7CiYjNDM7CWlmICghc3JjKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwYSA9IHNsb3dfdmlydF90b19waHlzKCZhbXA7c3JjLSZndDtwdnRpKSB8IDB4MDFVTEw7CiYjNDM7CXdybXNycShtc3Jfa3ZtX3N5c3RlbV90aW1lLCBwYSk7CiYjNDM7CXByX2RlYnVnKCYjMzQ7a3ZtLWNsb2NrOiBjcHUgJWQsIG1zciAlbGx4LCAlcyYjMzQ7LCBzbXBfcHJvY2Vzc29yX2lkKCksIHBhLCB0eHQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrdm1jbG9ja19kaXNhYmxlKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAobXNyX2t2bV9zeXN0ZW1fdGltZSkKJiM0MzsJCW5hdGl2ZV93cml0ZV9tc3IobXNyX2t2bV9zeXN0ZW1fdGltZSwgMCk7CiYjNDM7fQomIzQzOwogc3RhdGljIHU2NCBrdm1fY2xvY2tfcmVhZCh2b2lkKQogewogCXU2NCByZXQ7CkBAIC0xMTMsMTggJiM0MzsxMzQsNzQgQEAgc3RhdGljIG5vaW5zdHIgdTY0IGt2bV9zY2hlZF9jbG9ja19yZWFkKHZvaWQpCiAJcmV0dXJuIHB2Y2xvY2tfY2xvY2tzb3VyY2VfcmVhZF9ub3dkKHRoaXNfY3B1X3B2dGkoKSkgLSBrdm1fc2NoZWRfY2xvY2tfb2Zmc2V0OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX3NjaGVkX2Nsb2NrX2luaXQoYm9vbCBzdGFibGUpCiYjNDM7c3RhdGljIHZvaWQga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZCkKIHsKLQlpZiAoIXN0YWJsZSkKLQkJY2xlYXJfc2NoZWRfY2xvY2tfc3RhYmxlKCk7Ci0Ja3ZtX3NjaGVkX2Nsb2NrX29mZnNldCA9IGt2bV9jbG9ja19yZWFkKCk7Ci0JcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKGt2bV9zY2hlZF9jbG9ja19yZWFkKTsKJiM0MzsJLyoKJiM0MzsJICogU3RvcCBob3N0IHdyaXRlcyB0byBrdm1jbG9jayBpbW1lZGlhdGVseSBwcmlvciB0byBzdXNwZW5kL2hpYmVybmF0ZS4KJiM0MzsJICogSWYgdGhlIHN5c3RlbSBpcyBoaWJlcm5hdGluZywgdGhlbiBrdm1jbG9jayB3aWxsIGxpa2VseSByZXNpZGUgYXQgYQomIzQzOwkgKiBkaWZmZXJlbnQgcGh5c2ljYWwgYWRkcmVzcyB3aGVuIHRoZSBzeXN0ZW0gYXdha2VucywgYW5kIGhvc3Qgd3JpdGVzCiYjNDM7CSAqIHRvIHRoZSBvbGQgYWRkcmVzcyBwcmlvciB0byByZWNvbmZpZ3VyaW5nIGt2bWNsb2NrIHdvdWxkIGNsb2JiZXIKJiM0MzsJICogcmFuZG9tIG1lbW9yeS4KJiM0MzsJICovCiYjNDM7CWt2bWNsb2NrX3N1c3BlbmRlZCA9IHRydWU7CiYjNDM7CWt2bWNsb2NrX2Rpc2FibGUoKTsKJiM0Mzt9CiAKLQlwcl9pbmZvKCYjMzQ7a3ZtLWNsb2NrOiB1c2luZyBzY2hlZCBvZmZzZXQgb2YgJWxsdSBjeWNsZXMmIzM0OywKLQkJa3ZtX3NjaGVkX2Nsb2NrX29mZnNldCk7CiYjNDM7I2lmZGVmIENPTkZJR19TTVAKJiM0MztzdGF0aWMgdm9pZCBrdm1fc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrKHZvaWQpCiYjNDM7ewomIzQzOwlrdm1fcmVnaXN0ZXJfY2xvY2soJiMzNDtzZWNvbmRhcnkgY3B1LCBzdGFydHVwJiMzNDspOwomIzQzO30KJiM0MzsjZW5kaWYKIAotCUJVSUxEX0JVR19PTihzaXplb2Yoa3ZtX3NjaGVkX2Nsb2NrX29mZnNldCkgJmd0OwotCQlzaXplb2YoKChzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqKU5VTEwpLSZndDtzeXN0ZW1fdGltZSkpOwomIzQzO3N0YXRpYyB2b2lkIGt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpCiYjNDM7ewomIzQzOwlrdm1jbG9ja19zdXNwZW5kZWQgPSBmYWxzZTsKJiM0MzsJa3ZtX3JlZ2lzdGVyX2Nsb2NrKCYjMzQ7cHJpbWFyeSBjcHUsIHNjaGVkX2Nsb2NrIHJlc3VtZSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQga3ZtY2xvY2tfc3VzcGVuZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQomIzQzO3sKJiM0MzsJa3ZtY2xvY2tfc3VzcGVuZGVkID0gdHJ1ZTsKJiM0MzsJa3ZtY2xvY2tfZGlzYWJsZSgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrdm1jbG9ja19yZXN1bWUoc3RydWN0IGNsb2Nrc291cmNlICpjcykKJiM0Mzt7CiYjNDM7CWt2bWNsb2NrX3N1c3BlbmRlZCA9IGZhbHNlOwomIzQzOwlrdm1fcmVnaXN0ZXJfY2xvY2soJiMzNDtwcmltYXJ5IGNwdSwgY2xvY2tzb3VyY2UgcmVzdW1lJiMzNDspOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGt2bWNsb2NrX2NwdV9hY3Rpb24oZW51bSBrdm1fZ3Vlc3RfY3B1X2FjdGlvbiBhY3Rpb24pCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGFjdGlvbikgewomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSBCU1AmIzM5O3MgY2xvY2sgaXMgbWFuYWdlZCB2aWEgY2xvY2tzb3VyY2Ugc3VzcGVuZC9yZXN1bWUsCiYjNDM7CQkgKiB0byBlbnN1cmUgaXQmIzM5O3MgZW5hYmxlZC9kaXNhYmxlZCB3aGVuIHRpbWVrZWVwaW5nIG5lZWRzIGl0CiYjNDM7CQkgKiB0byBiZSwgZS5nLiBiZWZvcmUgcmVhZGluZyB3YWxsY2xvY2sgKHdoaWNoIHVzZXMga3ZtY2xvY2spLgomIzQzOwkJICovCiYjNDM7CWNhc2UgS1ZNX0dVRVNUX0JTUF9TVVNQRU5EOgomIzQzOwljYXNlIEtWTV9HVUVTVF9CU1BfUkVTVU1FOgomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgS1ZNX0dVRVNUX0FQX09OTElORToKJiM0MzsJCS8qCiYjNDM7CQkgKiBTZWNvbmRhcnkgQ1BVcyB1c2UgYSBkZWRpY2F0ZWQgaG9vayB0byBlbmFibGUga3ZtY2xvY2sgZWFybHkKJiM0MzsJCSAqIGR1cmluZyBicmluZ3VwLCB0aGVyZSYjMzk7cyBub3RoaW5nIHRvIGJlIGRvbmUgZHVyaW5nIENQVSBvbmxpbmUKJiM0MzsJCSAqICh3aGljaCBydW5zIGF0IENQVUhQX0FQX09OTElORV9EWU4pLiAgV2hlbiBrdm1jbG9jayBpcyBiZWluZwomIzQzOwkJICogdXNlZCBhcyBzY2hlZF9jbG9jaywga3ZtY2xvY2sgbXVzdCBiZSBlbmFibGVkICp2ZXJ5KiBlYXJseSwKJiM0MzsJCSAqIGFuZCBldmVuIHdoZW4ga3ZtY2xvY2sgaXMgJiMzNDtvbmx5JiMzNDsgYmVpbmcgdXNlZCBmb3IgdGhlIG1haW4KJiM0MzsJCSAqIGNsb2Nrc291cmNlLCBpdCBzdGlsbCBuZWVkcyB0byBiZSBlbmFibGVkIGxvbmcgYmVmb3JlIHRoZQomIzQzOwkJICogZHluYW1pYyBDUFVIUCBjYWxscyBhcmUgbWFkZS4KJiM0MzsJCSAqLwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgS1ZNX0dVRVNUX0FQX09GRkxJTkU6CiYjNDM7CWNhc2UgS1ZNX0dVRVNUX1NIVVRET1dOOgomIzQzOwkJa3ZtY2xvY2tfZGlzYWJsZSgpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlXQVJOX09OX09OQ0UoMSk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQogfQogCiAvKgpAQCAtMTM2LDkgJiM0MzsyMTMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3NjaGVkX2Nsb2NrX2luaXQoYm9vbCBzdGFibGUpCiAgKiBwb2xsIG9mIGd1ZXN0cyBjYW4gYmUgcnVubmluZyBhbmQgdHJvdWJsZSBlYWNoIG90aGVyLiBTbyB3ZSBwcmVzZXQKICAqIGxwaiBoZXJlCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9nZXRfdHNjX2toeih2b2lkKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGt2bWNsb2NrX2dldF90c2Nfa2h6KHZvaWQpCiB7Ci0Jc2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfS05PV05fRlJFUSk7CiAJcmV0dXJuIHB2Y2xvY2tfdHNjX2toeih0aGlzX2NwdV9wdnRpKCkpOwogfQogCkBAIC0xNDcsNyAmIzQzOzIyMyw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrdm1fZ2V0X3ByZXNldF9scGoodm9pZCkKIAl1bnNpZ25lZCBsb25nIGtoejsKIAl1NjQgbHBqOwogCi0Ja2h6ID0ga3ZtX2dldF90c2Nfa2h6KCk7CiYjNDM7CWtoeiA9IGt2bWNsb2NrX2dldF90c2Nfa2h6KCk7CiAKIAlscGogPSAoKHU2NClraHogKiAxMDAwKTsKIAlkb19kaXYobHBqLCBIWik7CkBAIC0xODUsNDMgJiM0MzsyNjEsMTAgQEAgc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBrdm1fY2xvY2sgPSB7CiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogCS5pZAkJPSBDU0lEX1g4Nl9LVk1fQ0xLLAogCS5lbmFibGUJCT0ga3ZtX2NzX2VuYWJsZSwKJiM0MzsJLnN1c3BlbmQJPSBrdm1jbG9ja19zdXNwZW5kLAomIzQzOwkucmVzdW1lCQk9IGt2bWNsb2NrX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyB2b2lkIGt2bV9yZWdpc3Rlcl9jbG9jayhjaGFyICp0eHQpCi17Ci0Jc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICpzcmMgPSB0aGlzX2NwdV9odmNsb2NrKCk7Ci0JdTY0IHBhOwotCi0JaWYgKCFzcmMpCi0JCXJldHVybjsKLQotCXBhID0gc2xvd192aXJ0X3RvX3BoeXMoJmFtcDtzcmMtJmd0O3B2dGkpIHwgMHgwMVVMTDsKLQl3cm1zcnEobXNyX2t2bV9zeXN0ZW1fdGltZSwgcGEpOwotCXByX2RlYnVnKCYjMzQ7a3ZtLWNsb2NrOiBjcHUgJWQsIG1zciAlbGx4LCAlcyYjMzQ7LCBzbXBfcHJvY2Vzc29yX2lkKCksIHBhLCB0eHQpOwotfQotCi1zdGF0aWMgdm9pZCBrdm1fc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKQotewotfQotCi1zdGF0aWMgdm9pZCBrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKQotewotCWt2bV9yZWdpc3Rlcl9jbG9jaygmIzM0O3ByaW1hcnkgY3B1IGNsb2NrLCByZXN1bWUmIzM0Oyk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLXN0YXRpYyB2b2lkIGt2bV9zZXR1cF9zZWNvbmRhcnlfY2xvY2sodm9pZCkKLXsKLQlrdm1fcmVnaXN0ZXJfY2xvY2soJiMzNDtzZWNvbmRhcnkgY3B1IGNsb2NrJiMzNDspOwotfQotI2VuZGlmCi0KLXZvaWQga3ZtY2xvY2tfZGlzYWJsZSh2b2lkKQotewotCWlmIChtc3Jfa3ZtX3N5c3RlbV90aW1lKQotCQluYXRpdmVfd3JpdGVfbXNyKG1zcl9rdm1fc3lzdGVtX3RpbWUsIDApOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQga3ZtY2xvY2tfaW5pdF9tZW0odm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIG5jcHVzOwpAQCAtMzA4LDkgJiM0MzszNTEsMzUgQEAgc3RhdGljIGludCBrdm1jbG9ja19zZXR1cF9wZXJjcHUodW5zaWduZWQgaW50IGNwdSkKIAlyZXR1cm4gcCA/IDAgOiAtRU5PTUVNOwogfQogCi12b2lkIF9faW5pdCBrdm1jbG9ja19pbml0KHZvaWQpCiYjNDM7c3RhdGljIF9faW5pdCB2b2lkIGt2bV9zY2hlZF9jbG9ja19pbml0KGJvb2wgc3RhYmxlKQogewotCXU4IGZsYWdzOwomIzQzOwkvKiBFbnN1cmUgdGhlIG9mZnNldCBpcyBjb25maWd1cmVkIGJlZm9yZSBtYWtpbmcga3ZtY2xvY2sgdmlzaWJsZSEgKi8KJiM0MzsJa3ZtX3NjaGVkX2Nsb2NrX29mZnNldCA9IGt2bV9jbG9ja19yZWFkKCk7CiYjNDM7CiYjNDM7CWlmIChfX3BhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayhrdm1fc2NoZWRfY2xvY2tfcmVhZCwgc3RhYmxlLAomIzQzOwkJCQkgICAgICAga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUsCiYjNDM7CQkJCSAgICAgICBrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBCU1AmIzM5O3MgY2xvY2sgaXMgbWFuYWdlZCB2aWEgZGVkaWNhdGVkIHNjaGVkX2Nsb2NrIHNhdmUvcmVzdG9yZQomIzQzOwkgKiBob29rcyB3aGVuIGt2bWNsb2NrIGlzIHVzZWQgYXMgc2NoZWRfY2xvY2ssIGFzIHNjaGVkX2Nsb2NrIG5lZWRzIHRvCiYjNDM7CSAqIGJlIGtlcHQgYWxpdmUgdW50aWwgdGhlIHZlcnkgZW5kIG9mIHN1c3BlbmQgZW50cnksIGFuZCByZXN0b3JlZCBhcwomIzQzOwkgKiBxdWlja2x5IGFzIHBvc3NpYmxlIGFmdGVyIHJlc3VtZS4KJiM0MzsJICovCiYjNDM7CWt2bV9jbG9jay5zdXNwZW5kID0gTlVMTDsKJiM0MzsJa3ZtX2Nsb2NrLnJlc3VtZSA9IE5VTEw7CiYjNDM7CiYjNDM7CXByX2luZm8oJiMzNDtrdm0tY2xvY2s6IHVzaW5nIHNjaGVkIG9mZnNldCBvZiAlbGx1IGN5Y2xlcyYjMzQ7LAomIzQzOwkJa3ZtX3NjaGVkX2Nsb2NrX29mZnNldCk7CiYjNDM7CiYjNDM7CUJVSUxEX0JVR19PTihzaXplb2Yoa3ZtX3NjaGVkX2Nsb2NrX29mZnNldCkgJmd0OwomIzQzOwkJc2l6ZW9mKCgoc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gKilOVUxMKS0mZ3Q7c3lzdGVtX3RpbWUpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX2luaXQga3ZtY2xvY2tfaW5pdChib29sIHByZWZlcl90c2MpCiYjNDM7ewomIzQzOwlib29sIHN0YWJsZSA9IGZhbHNlOwogCiAJaWYgKCFrdm1fcGFyYV9hdmFpbGFibGUoKSB8fCAha3ZtY2xvY2spCiAJCXJldHVybjsKQEAgLTMzNCwzOCAmIzQzOzQwMyw0MSBAQCB2b2lkIF9faW5pdCBrdm1jbG9ja19pbml0KHZvaWQpCiAJCW1zcl9rdm1fc3lzdGVtX3RpbWUsIG1zcl9rdm1fd2FsbF9jbG9jayk7CiAKIAl0aGlzX2NwdV93cml0ZShodl9jbG9ja19wZXJfY3B1LCAmYW1wO2h2X2Nsb2NrX2Jvb3RbMF0pOwotCWt2bV9yZWdpc3Rlcl9jbG9jaygmIzM0O3ByaW1hcnkgY3B1IGNsb2NrJiMzNDspOwomIzQzOwlrdm1fcmVnaXN0ZXJfY2xvY2soJiMzNDtwcmltYXJ5IGNwdSwgb25saW5lJiMzNDspOwogCXB2Y2xvY2tfc2V0X3B2dGlfY3B1MF92YShodl9jbG9ja19ib290KTsKIAotCWlmIChrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9DTE9DS1NPVVJDRV9TVEFCTEVfQklUKSkKJiM0MzsJaWYgKGt2bV9wYXJhX2hhc19mZWF0dXJlKEtWTV9GRUFUVVJFX0NMT0NLU09VUkNFX1NUQUJMRV9CSVQpKSB7CiAJCXB2Y2xvY2tfc2V0X2ZsYWdzKFBWQ0xPQ0tfVFNDX1NUQUJMRV9CSVQpOwogCi0JZmxhZ3MgPSBwdmNsb2NrX3JlYWRfZmxhZ3MoJmFtcDtodl9jbG9ja19ib290WzBdLnB2dGkpOwotCWt2bV9zY2hlZF9jbG9ja19pbml0KGZsYWdzICZhbXA7IFBWQ0xPQ0tfVFNDX1NUQUJMRV9CSVQpOwomIzQzOwkJLyoKJiM0MzsJCSAqIENoZWNrIGlmIHRoZSBjbG9jayBpcyBzdGFibGUgKmFmdGVyKiBtYXJraW5nIFRTQ19TVEFCTEUgYXMgYQomIzQzOwkJICogdmFsaWQgZmxhZy4KJiM0MzsJCSAqLwomIzQzOwkJc3RhYmxlID0gcHZjbG9ja19yZWFkX2ZsYWdzKCZhbXA7aHZfY2xvY2tfYm9vdFswXS5wdnRpKSAmYW1wOwomIzQzOwkJCSBQVkNMT0NLX1RTQ19TVEFCTEVfQklUOwomIzQzOwl9CiAKLQl4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX3RzYyA9IGt2bV9nZXRfdHNjX2toejsKLQl4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX2NwdSA9IGt2bV9nZXRfdHNjX2toejsKJiM0MzsKJiM0MzsJaWYgKCF4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeikKJiM0MzsJCXg4Nl9pbml0Lmh5cGVyLmdldF90c2Nfa2h6ID0ga3ZtY2xvY2tfZ2V0X3RzY19raHo7CiYjNDM7CWlmICgheDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHopCiYjNDM7CQl4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeiA9IGt2bWNsb2NrX2dldF90c2Nfa2h6OwogCXg4Nl9wbGF0Zm9ybS5nZXRfd2FsbGNsb2NrID0ga3ZtX2dldF93YWxsY2xvY2s7CiAJeDg2X3BsYXRmb3JtLnNldF93YWxsY2xvY2sgPSBrdm1fc2V0X3dhbGxjbG9jazsKLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKJiM0MzsjaWZkZWYgQ09ORklHX1NNUAogCXg4Nl9jcHVpbml0LmVhcmx5X3BlcmNwdV9jbG9ja19pbml0ID0ga3ZtX3NldHVwX3NlY29uZGFyeV9jbG9jazsKICNlbmRpZgotCXg4Nl9wbGF0Zm9ybS5zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlID0ga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGU7Ci0JeDg2X3BsYXRmb3JtLnJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUgPSBrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZTsKIAlrdm1fZ2V0X3ByZXNldF9scGooKTsKIAogCS8qCi0JICogWDg2X0ZFQVRVUkVfTk9OU1RPUF9UU0MgaXMgVFNDIHJ1bnMgYXQgY29uc3RhbnQgcmF0ZQotCSAqIHdpdGggUC9UIHN0YXRlcyBhbmQgZG9lcyBub3Qgc3RvcCBpbiBkZWVwIEMtc3RhdGVzLgotCSAqCi0JICogSW52YXJpYW50IFRTQyBleHBvc2VkIGJ5IGhvc3QgbWVhbnMga3ZtY2xvY2sgaXMgbm90IG5lY2Vzc2FyeToKLQkgKiBjYW4gdXNlIFRTQyBhcyBjbG9ja3NvdXJjZS4KLQkgKgomIzQzOwkgKiBJZiBUU0MgaXMgcHJlZmVycmVkIG92ZXIga3ZtbG9jaywgZHJvcCBrdm1jbG9jayYjMzk7cyByYXRpbmcgc28gdGhhdCBUU0MKJiM0MzsJICogaXMgY2hvc2VuIGFzIHRoZSBjbG9ja3NvdXJjZSAoYnV0IHN0aWxsIHJlZ2lzdGVyIGt2bWNsb2NrIGluIGNhc2UKJiM0MzsJICogdGhlIGtlcm5lbCBkb2VzbiYjMzk7dCB3YW50IHRvIHVzZSBUU0MgZm9yIHdoYXRldmVyIHJlYXNvbikuCiAJICovCi0JaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpICZhbXA7JmFtcDsKLQkgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05PTlNUT1BfVFNDKSAmYW1wOyZhbXA7Ci0JICAgICFjaGVja190c2NfdW5zdGFibGUoKSkKJiM0MzsJaWYgKHByZWZlcl90c2MpCiAJCWt2bV9jbG9jay5yYXRpbmcgPSAyOTk7CiYjNDM7CWVsc2UKJiM0MzsJCWt2bV9zY2hlZF9jbG9ja19pbml0KHN0YWJsZSk7CiAKIAljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmYW1wO2t2bV9jbG9jaywgTlNFQ19QRVJfU0VDKTsKIAlwdl9pbmZvLm5hbWUgPSAmIzM0O0tWTSYjMzQ7OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3B2Y2xvY2suYyBiL2FyY2gveDg2L2tlcm5lbC9wdmNsb2NrLmMKaW5kZXggYjNmODEzNzljMmZjMDYuLjhkMDk4ODQxYTIyNWY2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHZjbG9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9wdmNsb2NrLmMKQEAgLTE2LDExICYjNDM7MTYsMTIgQEAKICNpbmNsdWRlICZsdDthc20vcHZjbG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS92Z3RvZC5oJmd0OwogCi1zdGF0aWMgdTggdmFsaWRfZmxhZ3MgX19yZWFkX21vc3RseSA9IDA7Ci1zdGF0aWMgc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICpwdnRpX2NwdTBfdmEgX19yZWFkX21vc3RseTsKJiM0MztzdGF0aWMgdTggdmFsaWRfZmxhZ3MgX19yb19hZnRlcl9pbml0ID0gMDsKJiM0MztzdGF0aWMgc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICpwdnRpX2NwdTBfdmEgX19yb19hZnRlcl9pbml0OwogCi12b2lkIHB2Y2xvY2tfc2V0X2ZsYWdzKHU4IGZsYWdzKQomIzQzO3ZvaWQgX19pbml0IHB2Y2xvY2tfc2V0X2ZsYWdzKHU4IGZsYWdzKQogewomIzQzOwlXQVJOX09OKHZhbGlkX2ZsYWdzKTsKIAl2YWxpZF9mbGFncyA9IGZsYWdzOwogfQogCkBAIC0xNTMsNyAmIzQzOzE1NCw3IEBAIHZvaWQgcHZjbG9ja19yZWFkX3dhbGxjbG9jayhzdHJ1Y3QgcHZjbG9ja193YWxsX2Nsb2NrICp3YWxsX2Nsb2NrLAogCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjNjQodHMsIG5vdy50dl9zZWMsIG5vdy50dl9uc2VjKTsKIH0KIAotdm9pZCBwdmNsb2NrX3NldF9wdnRpX2NwdTBfdmEoc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICpwdnRpKQomIzQzO3ZvaWQgX19pbml0IHB2Y2xvY2tfc2V0X3B2dGlfY3B1MF92YShzdHJ1Y3QgcHZjbG9ja192c3lzY2FsbF90aW1lX2luZm8gKnB2dGkpCiB7CiAJV0FSTl9PTih2Y2xvY2tfd2FzX3VzZWQoVkRTT19DTE9DS01PREVfUFZDTE9DSykpOwogCXB2dGlfY3B1MF92YSA9IHB2dGk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKaW5kZXggY2UxMGFlNGIyOThiNzkuLjU2NGJlNGZhYTVhMGJiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL3RzYy5jCkBAIC0zNCw2ICYjNDM7MzQsNyBAQAogI2luY2x1ZGUgJmx0O2FzbS90b3BvbG9neS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS91di91di5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9zZXYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL3RkeC5oJmd0OwogCiB1bnNpZ25lZCBpbnQgX19yZWFkX21vc3RseSBjcHVfa2h6OwkvKiBUU0MgY2xvY2tzIC8gdXNlYywgbm90IHVzZWQgaGVyZSAqLwogRVhQT1JUX1NZTUJPTChjcHVfa2h6KTsKQEAgLTI3OSwxNSAmIzQzOzI4MCwyOCBAQCBib29sIHVzaW5nX25hdGl2ZV9zY2hlZF9jbG9jayh2b2lkKQogCXJldHVybiBzdGF0aWNfY2FsbF9xdWVyeShwdl9zY2hlZF9jbG9jaykgPT0gbmF0aXZlX3NjaGVkX2Nsb2NrOwogfQogCi12b2lkIHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh1NjQgKCpmdW5jKSh2b2lkKSkKJiM0MztpbnQgX19pbml0IF9fcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKHU2NCAoKmZ1bmMpKHZvaWQpLCBib29sIHN0YWJsZSwKJiM0MzsJCQkJICAgICAgdm9pZCAoKnNhdmUpKHZvaWQpLCB2b2lkICgqcmVzdG9yZSkodm9pZCkpCiB7CiYjNDM7CS8qCiYjNDM7CSAqIERvbiYjMzk7dCByZXBsYWNlIFRTQyB3aXRoIGEgUFYgY2xvY2sgd2hlbiBydW5uaW5nIGFzIGEgQ29DbyBndWVzdCBhbmQKJiM0MzsJICogdGhlIFRTQyBpcyBzZWN1cmUvdHJ1c3RlZDsgUFYgY2xvY2tzIGFyZSBlbXVsYXRlZCBieSB0aGUgaHlwZXJ2aXNvciwKJiM0MzsJICogd2hpY2ggaXNuJiMzOTt0IGluIHRoZSBndWVzdCYjMzk7cyBUQ0IuCiYjNDM7CSAqLwomIzQzOwlpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfR1VFU1RfU05QX1NFQ1VSRV9UU0MpIHx8CiYjNDM7CSAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSkKJiM0MzsJCXJldHVybiAtRVBFUk07CiYjNDM7CiYjNDM7CWlmICghc3RhYmxlKQomIzQzOwkJY2xlYXJfc2NoZWRfY2xvY2tfc3RhYmxlKCk7CiYjNDM7CiAJc3RhdGljX2NhbGxfdXBkYXRlKHB2X3NjaGVkX2Nsb2NrLCBmdW5jKTsKJiM0MzsJeDg2X3BsYXRmb3JtLnNhdmVfc2NoZWRfY2xvY2tfc3RhdGUgPSBzYXZlOwomIzQzOwl4ODZfcGxhdGZvcm0ucmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSA9IHJlc3RvcmU7CiYjNDM7CXJldHVybiAwOwogfQogI2Vsc2UKIHU2NCBzY2hlZF9jbG9ja19ub2luc3RyKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsaWFzKCYjMzQ7bmF0aXZlX3NjaGVkX2Nsb2NrJiMzNDspKSk7Ci0KLWJvb2wgdXNpbmdfbmF0aXZlX3NjaGVkX2Nsb2NrKHZvaWQpIHsgcmV0dXJuIHRydWU7IH0KLXZvaWQgcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKHU2NCAoKmZ1bmMpKHZvaWQpKSB7IH0KICNlbmRpZgogCiBub3RyYWNlIHU2NCBzY2hlZF9jbG9jayh2b2lkKQpAQCAtNjQ1LDQ2ICYjNDM7NjU5LDY4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHF1aWNrX3BpdF9jYWxpYnJhdGUodm9pZCkKIAlyZXR1cm4gZGVsdGE7CiB9CiAKJiM0MztpbnQgY3B1aWRfZ2V0X3RzY19pbmZvKHN0cnVjdCBjcHVpZF90c2NfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBlY3hfaHosIGVkeDsKJiM0MzsKJiM0MzsJaWYgKGJvb3RfY3B1X2RhdGEuY3B1aWRfbGV2ZWwgJmx0OyBDUFVJRF9MRUFGX1RTQykKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwomIzQzOwkvKiBDUFVJRCAxNUggVFNDL0NyeXN0YWwgcmF0aW8sIHBsdXMgb3B0aW9uYWxseSBDcnlzdGFsIEh6ICovCiYjNDM7CWNwdWlkKENQVUlEX0xFQUZfVFNDLCAmYW1wO2luZm8tJmd0O2Rlbm9taW5hdG9yLCAmYW1wO2luZm8tJmd0O251bWVyYXRvciwgJmFtcDtlY3hfaHosICZhbXA7ZWR4KTsKJiM0MzsKJiM0MzsJaWYgKCFpbmZvLSZndDtkZW5vbWluYXRvciB8fCAhaW5mby0mZ3Q7bnVtZXJhdG9yKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE5vdGU6IHNvbWUgQ1BVcyBwcm92aWRlIHRoZSBtdWx0aXBsaWVyIGluZm9ybWF0aW9uLCBidXQgbm90IHRoZSBjb3JlCiYjNDM7CSAqIGNyeXN0YWwgZnJlcXVlbmN5LiAgVGhlIG11bHRpcGxpZXIgaW5mb3JtYXRpb24gaXMgc3RpbGwgdXNlZnVsIGZvcgomIzQzOwkgKiBzdWNoIENQVXMsIGFzIHRoZSBjcnlzdGFsIGZyZXF1ZW5jeSBjYW4gYmUgZ2xlYW5lZCBmcm9tIENQVUlELjB4MTYuCiYjNDM7CSAqLwomIzQzOwlpbmZvLSZndDtjcnlzdGFsX2toeiA9IGVjeF9oeiAvIDEwMDA7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mzt1bnNpZ25lZCBpbnQgX19jcHVfa2h6X2Zyb21fY3B1aWQodm9pZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBlYXhfYmFzZV9taHosIGVieCwgZWN4LCBlZHg7CiYjNDM7CiYjNDM7CWlmIChib290X2NwdV9kYXRhLmNwdWlkX2xldmVsICZsdDsgQ1BVSURfTEVBRl9GUkVRKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWNwdWlkKENQVUlEX0xFQUZfRlJFUSwgJmFtcDtlYXhfYmFzZV9taHosICZhbXA7ZWJ4LCAmYW1wO2VjeCwgJmFtcDtlZHgpOwomIzQzOwomIzQzOwlyZXR1cm4gZWF4X2Jhc2VfbWh6ICogMTAwMDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIG5hdGl2ZV9jYWxpYnJhdGVfdHNjIC0gZGV0ZXJtaW5lIFRTQyBmcmVxdWVuY3kKICAqIERldGVybWluZSBUU0MgZnJlcXVlbmN5IHZpYSBDUFVJRCwgZWxzZSByZXR1cm4gMC4KICAqLwotdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX3RzYyh2b2lkKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfdHNjKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGVheF9kZW5vbWluYXRvciwgZWJ4X251bWVyYXRvciwgZWN4X2h6LCBlZHg7Ci0JdW5zaWduZWQgaW50IGNyeXN0YWxfa2h6OwomIzQzOwlzdHJ1Y3QgY3B1aWRfdHNjX2luZm8gaW5mbzsKIAogCWlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoYm9vdF9jcHVfZGF0YS5jcHVpZF9sZXZlbCAmbHQ7IENQVUlEX0xFQUZfVFNDKQomIzQzOwlpZiAoY3B1aWRfZ2V0X3RzY19pbmZvKCZhbXA7aW5mbykpCiAJCXJldHVybiAwOwogCi0JZWF4X2Rlbm9taW5hdG9yID0gZWJ4X251bWVyYXRvciA9IGVjeF9oeiA9IGVkeCA9IDA7Ci0KLQkvKiBDUFVJRCAxNUggVFNDL0NyeXN0YWwgcmF0aW8sIHBsdXMgb3B0aW9uYWxseSBDcnlzdGFsIEh6ICovCi0JY3B1aWQoQ1BVSURfTEVBRl9UU0MsICZhbXA7ZWF4X2Rlbm9taW5hdG9yLCAmYW1wO2VieF9udW1lcmF0b3IsICZhbXA7ZWN4X2h6LCAmYW1wO2VkeCk7Ci0KLQlpZiAoZWJ4X251bWVyYXRvciA9PSAwIHx8IGVheF9kZW5vbWluYXRvciA9PSAwKQotCQlyZXR1cm4gMDsKLQotCWNyeXN0YWxfa2h6ID0gZWN4X2h6IC8gMTAwMDsKLQogCS8qCiAJICogRGVudmVydG9uIFNvQ3MgZG9uJiMzOTt0IHJlcG9ydCBjcnlzdGFsIGNsb2NrLCBhbmQgYWxzbyBkb24mIzM5O3Qgc3VwcG9ydAogCSAqIENQVUlEX0xFQUZfRlJFUSBmb3IgdGhlIGNhbGN1bGF0aW9uIGJlbG93LCBzbyBoYXJkY29kZSB0aGUgMjVNSHoKIAkgKiBjcnlzdGFsIGNsb2NrLgogCSAqLwotCWlmIChjcnlzdGFsX2toeiA9PSAwICZhbXA7JmFtcDsKLQkJCWJvb3RfY3B1X2RhdGEueDg2X3ZmbSA9PSBJTlRFTF9BVE9NX0dPTERNT05UX0QpCi0JCWNyeXN0YWxfa2h6ID0gMjUwMDA7CiYjNDM7CWlmICghaW5mby5jcnlzdGFsX2toeiAmYW1wOyZhbXA7IGJvb3RfY3B1X2RhdGEueDg2X3ZmbSA9PSBJTlRFTF9BVE9NX0dPTERNT05UX0QpCiYjNDM7CQlpbmZvLmNyeXN0YWxfa2h6ID0gMjUwMDA7CiAKIAkvKgogCSAqIFRTQyBmcmVxdWVuY3kgcmVwb3J0ZWQgZGlyZWN0bHkgYnkgQ1BVSUQgaXMgYSAmIzM0O2hhcmR3YXJlIHJlcG9ydGVkJiMzNDsKIAkgKiBmcmVxdWVuY3kgYW5kIGlzIHRoZSBtb3N0IGFjY3VyYXRlIG9uZSBzbyBmYXIgd2UgaGF2ZS4gVGhpcwogCSAqIGlzIGNvbnNpZGVyZWQgYSBrbm93biBmcmVxdWVuY3kuCiAJICovCi0JaWYgKGNyeXN0YWxfa2h6ICE9IDApCiYjNDM7CWlmIChpbmZvLmNyeXN0YWxfa2h6KQogCQlzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKTsKIAogCS8qCkBAIC02OTIsMTUgJiM0Mzs3MjgsMTAgQEAgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX3RzYyh2b2lkKQogCSAqIGNsb2NrLCBidXQgd2UgY2FuIGVhc2lseSBjYWxjdWxhdGUgaXQgdG8gYSBoaWdoIGRlZ3JlZSBvZiBhY2N1cmFjeQogCSAqIGJ5IGNvbnNpZGVyaW5nIHRoZSBjcnlzdGFsIHJhdGlvIGFuZCB0aGUgQ1BVIHNwZWVkLgogCSAqLwotCWlmIChjcnlzdGFsX2toeiA9PSAwICZhbXA7JmFtcDsgYm9vdF9jcHVfZGF0YS5jcHVpZF9sZXZlbCAmZ3Q7PSBDUFVJRF9MRUFGX0ZSRVEpIHsKLQkJdW5zaWduZWQgaW50IGVheF9iYXNlX21oeiwgZWJ4LCBlY3gsIGVkeDsKJiM0MzsJaWYgKCFpbmZvLmNyeXN0YWxfa2h6KQomIzQzOwkJaW5mby5jcnlzdGFsX2toeiA9IF9fY3B1X2toel9mcm9tX2NwdWlkKCkgKiBpbmZvLmRlbm9taW5hdG9yIC8gaW5mby5udW1lcmF0b3I7CiAKLQkJY3B1aWQoQ1BVSURfTEVBRl9GUkVRLCAmYW1wO2VheF9iYXNlX21oeiwgJmFtcDtlYngsICZhbXA7ZWN4LCAmYW1wO2VkeCk7Ci0JCWNyeXN0YWxfa2h6ID0gZWF4X2Jhc2VfbWh6ICogMTAwMCAqCi0JCQllYXhfZGVub21pbmF0b3IgLyBlYnhfbnVtZXJhdG9yOwotCX0KLQotCWlmIChjcnlzdGFsX2toeiA9PSAwKQomIzQzOwlpZiAoIWluZm8uY3J5c3RhbF9raHopCiAJCXJldHVybiAwOwogCiAJLyoKQEAgLTcxMCw0MSAmIzQzOzc0MSwzMCBAQCB1bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfdHNjKHZvaWQpCiAJaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZmbSA9PSBJTlRFTF9BVE9NX0dPTERNT05UKQogCQlzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7CiAKLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKIAkvKgogCSAqIFRoZSBsb2NhbCBBUElDIGFwcGVhcnMgdG8gYmUgZmVkIGJ5IHRoZSBjb3JlIGNyeXN0YWwgY2xvY2sKIAkgKiAod2hpY2ggc291bmRzIGVudGlyZWx5IHNlbnNpYmxlKS4gV2UgY2FuIHNldCB0aGUgZ2xvYmFsCiAJICogbGFwaWNfdGltZXJfcGVyaW9kIGhlcmUgdG8gYXZvaWQgaGF2aW5nIHRvIGNhbGlicmF0ZSB0aGUgQVBJQwogCSAqIHRpbWVyIGxhdGVyLgogCSAqLwotCWxhcGljX3RpbWVyX3BlcmlvZCA9IGNyeXN0YWxfa2h6ICogMTAwMCAvIEhaOwotI2VuZGlmCiYjNDM7CWFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHooaW5mby5jcnlzdGFsX2toeiwgJiMzNDtDUFVJRCAweDE1LzB4MTYmIzM0Oyk7CiAKLQlyZXR1cm4gY3J5c3RhbF9raHogKiBlYnhfbnVtZXJhdG9yIC8gZWF4X2Rlbm9taW5hdG9yOwomIzQzOwlyZXR1cm4gaW5mby5jcnlzdGFsX2toeiAqIGluZm8ubnVtZXJhdG9yIC8gaW5mby5kZW5vbWluYXRvcjsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2toel9mcm9tX2NwdWlkKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGVheF9iYXNlX21oeiwgZWJ4X21heF9taHosIGVjeF9idXNfbWh6LCBlZHg7Ci0KIAlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwpCiAJCXJldHVybiAwOwogCi0JaWYgKGJvb3RfY3B1X2RhdGEuY3B1aWRfbGV2ZWwgJmx0OyBDUFVJRF9MRUFGX0ZSRVEpCi0JCXJldHVybiAwOwotCi0JZWF4X2Jhc2VfbWh6ID0gZWJ4X21heF9taHogPSBlY3hfYnVzX21oeiA9IGVkeCA9IDA7Ci0KLQljcHVpZChDUFVJRF9MRUFGX0ZSRVEsICZhbXA7ZWF4X2Jhc2VfbWh6LCAmYW1wO2VieF9tYXhfbWh6LCAmYW1wO2VjeF9idXNfbWh6LCAmYW1wO2VkeCk7Ci0KLQlyZXR1cm4gZWF4X2Jhc2VfbWh6ICogMTAwMDsKJiM0MzsJcmV0dXJuIF9fY3B1X2toel9mcm9tX2NwdWlkKCk7CiB9CiAKIC8qCiAgKiBjYWxpYnJhdGUgY3B1IHVzaW5nIHBpdCwgaHBldCwgYW5kIHB0aW1lciBtZXRob2RzLiBUaGV5IGFyZSBhdmFpbGFibGUKICAqIGxhdGVyIGluIGJvb3QgYWZ0ZXIgYWNwaSBpcyBpbml0aWFsaXplZC4KICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcGl0X2hwZXRfcHRpbWVyX2NhbGlicmF0ZV9jcHUodm9pZCkKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX2NwdV9sYXRlKHZvaWQpCiB7CiAJdTY0IHRzYzEsIHRzYzIsIGRlbHRhLCByZWYxLCByZWYyOwogCXVuc2lnbmVkIGxvbmcgdHNjX3BpdF9taW4gPSBVTE9OR19NQVgsIHRzY19yZWZfbWluID0gVUxPTkdfTUFYOwpAQCAtODk2LDcgJiM0Mzs5MTYsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBwaXRfaHBldF9wdGltZXJfY2FsaWJyYXRlX2NwdSh2b2lkKQogLyoqCiAgKiBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSAtIGNhbiBjYWxpYnJhdGUgdGhlIGNwdSBlYXJseSBpbiBib290CiAgKi8KLXVuc2lnbmVkIGxvbmcgbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHkodm9pZCkKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGZhc3RfY2FsaWJyYXRlID0gY3B1X2toel9mcm9tX2NwdWlkKCk7CiAKQEAgLTkxMCwyMCAmIzQzOzkzMCw2IEBAIHVuc2lnbmVkIGxvbmcgbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHkodm9pZCkKIAlyZXR1cm4gZmFzdF9jYWxpYnJhdGU7CiB9CiAKLQotLyoqCi0gKiBuYXRpdmVfY2FsaWJyYXRlX2NwdSAtIGNhbGlicmF0ZSB0aGUgY3B1Ci0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfY3B1KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB0c2NfZnJlcSA9IG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KCk7Ci0KLQlpZiAoIXRzY19mcmVxKQotCQl0c2NfZnJlcSA9IHBpdF9ocGV0X3B0aW1lcl9jYWxpYnJhdGVfY3B1KCk7Ci0KLQlyZXR1cm4gdHNjX2ZyZXE7Ci19Ci0KIHZvaWQgcmVjYWxpYnJhdGVfY3B1X2toeih2b2lkKQogewogI2lmbmRlZiBDT05GSUdfU01QCkBAIC05MzIsOCAmIzQzOzkzOCwxMyBAQCB2b2lkIHJlY2FsaWJyYXRlX2NwdV9raHoodm9pZCkKIAlpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9UU0MpKQogCQlyZXR1cm47CiAKLQljcHVfa2h6ID0geDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUoKTsKLQl0c2Nfa2h6ID0geDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MoKTsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWNwdV9raHogPSBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSgpOwomIzQzOwlpZiAoIWNwdV9raHopCiYjNDM7CQljcHVfa2h6ID0gbmF0aXZlX2NhbGlicmF0ZV9jcHVfbGF0ZSgpOwomIzQzOwl0c2Nfa2h6ID0gbmF0aXZlX2NhbGlicmF0ZV90c2MoKTsKIAlpZiAodHNjX2toeiA9PSAwKQogCQl0c2Nfa2h6ID0gY3B1X2toejsKIAllbHNlIGlmIChhYnMoY3B1X2toeiAtIHRzY19raHopICogMTAgJmd0OyB0c2Nfa2h6KQpAQCAtOTQyLDE0ICYjNDM7OTUzLDIyIEBAIHZvaWQgcmVjYWxpYnJhdGVfY3B1X2toeih2b2lkKQogCQkJCQkJICAgIGNwdV9raHpfb2xkLCBjcHVfa2h6KTsKICNlbmRpZgogfQotRVhQT1JUX1NZTUJPTF9HUEwocmVjYWxpYnJhdGVfY3B1X2toeik7CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhyZWNhbGlicmF0ZV9jcHVfa2h6LCAmIzM0O3A0LWNsb2NrbW9kLHBvd2Vybm93LWs3JiMzNDspOwogCiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgY3ljMm5zX3N1c3BlbmQ7CiAKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdHNjX2lzX3NhdmVfcmVzdG9yZV9uZWVkZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIXVzaW5nX25hdGl2ZV9zY2hlZF9jbG9jaygpKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHN0YXRpY19icmFuY2hfbGlrZWx5KCZhbXA7X191c2VfdHNjKSB8fCBzY2hlZF9jbG9ja19zdGFibGUoKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHRzY19zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpCiB7Ci0JaWYgKCFzdGF0aWNfYnJhbmNoX2xpa2VseSgmYW1wO19fdXNlX3RzYykgJmFtcDsmYW1wOyAhc2NoZWRfY2xvY2tfc3RhYmxlKCkpCiYjNDM7CWlmICghdHNjX2lzX3NhdmVfcmVzdG9yZV9uZWVkZWQoKSkKIAkJcmV0dXJuOwogCiAJY3ljMm5zX3N1c3BlbmQgPSBzY2hlZF9jbG9jaygpOwpAQCAtOTY5LDcgJiM0Mzs5ODgsNyBAQCB2b2lkIHRzY19yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgY3B1OwogCi0JaWYgKCFzdGF0aWNfYnJhbmNoX2xpa2VseSgmYW1wO19fdXNlX3RzYykgJmFtcDsmYW1wOyAhc2NoZWRfY2xvY2tfc3RhYmxlKCkpCiYjNDM7CWlmICghdHNjX2lzX3NhdmVfcmVzdG9yZV9uZWVkZWQoKSkKIAkJcmV0dXJuOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwpAQCAtMTQzOSwyMSAmIzQzOzE0NTgsMjggQEAgc3RhdGljIGludCBfX2luaXQgaW5pdF90c2NfY2xvY2tzb3VyY2Uodm9pZCkKICAqLwogZGV2aWNlX2luaXRjYWxsKGluaXRfdHNjX2Nsb2Nrc291cmNlKTsKIAotc3RhdGljIGJvb2wgX19pbml0IGRldGVybWluZV9jcHVfdHNjX2ZyZXF1ZW5jaWVzKGJvb2wgZWFybHkpCiYjNDM7c3RhdGljIGJvb2wgX19pbml0IGRldGVybWluZV9jcHVfdHNjX2ZyZXF1ZW5jaWVzKGJvb2wgZWFybHksCiYjNDM7CQkJCQkJIHVuc2lnbmVkIGludCBrbm93bl9jcHVfa2h6LAomIzQzOwkJCQkJCSB1bnNpZ25lZCBpbnQga25vd25fdHNjX2toeikKIHsKIAkvKiBNYWtlIHN1cmUgdGhhdCBjcHUgYW5kIHRzYyBhcmUgbm90IGFscmVhZHkgY2FsaWJyYXRlZCAqLwogCVdBUk5fT04oY3B1X2toeiB8fCB0c2Nfa2h6KTsKIAogCWlmIChlYXJseSkgewotCQljcHVfa2h6ID0geDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUoKTsKLQkJaWYgKHRzY19lYXJseV9raHopCi0JCQl0c2Nfa2h6ID0gdHNjX2Vhcmx5X2toejsKJiM0MzsJCS8qCiYjNDM7CQkgKiBFYXJseSBDUFUgY2FsaWJyYXRpb24gY2FuIG9ubHkgdXNlIG1ldGhvZHMgdGhhdCBhcmUgYXZhaWxhYmxlCiYjNDM7CQkgKiBlYXJseSBpbiBib290IChvYnZpb3VzbHkpLgomIzQzOwkJICovCiYjNDM7CQlpZiAoa25vd25fY3B1X2toeikKJiM0MzsJCQljcHVfa2h6ID0ga25vd25fY3B1X2toejsKIAkJZWxzZQotCQkJdHNjX2toeiA9IHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjKCk7CiYjNDM7CQkJY3B1X2toeiA9IG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KCk7CiYjNDM7CQlpZiAoa25vd25fdHNjX2toeikKJiM0MzsJCQl0c2Nfa2h6ID0ga25vd25fdHNjX2toejsKJiM0MzsJCWVsc2UKJiM0MzsJCQl0c2Nfa2h6ID0gbmF0aXZlX2NhbGlicmF0ZV90c2MoKTsKIAl9IGVsc2UgewotCQkvKiBXZSBzaG91bGQgbm90IGJlIGhlcmUgd2l0aCBub24tbmF0aXZlIGNwdSBjYWxpYnJhdGlvbiAqLwotCQlXQVJOX09OKHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ICE9IG5hdGl2ZV9jYWxpYnJhdGVfY3B1KTsKLQkJY3B1X2toeiA9IHBpdF9ocGV0X3B0aW1lcl9jYWxpYnJhdGVfY3B1KCk7CiYjNDM7CQljcHVfa2h6ID0gbmF0aXZlX2NhbGlicmF0ZV9jcHVfbGF0ZSgpOwogCX0KIAogCS8qCkBAIC0xNTAyLDE1ICYjNDM7MTUyOCw0OCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgdHNjX2VuYWJsZV9zY2hlZF9jbG9jayh2b2lkKQogCiB2b2lkIF9faW5pdCB0c2NfZWFybHlfaW5pdCh2b2lkKQogewomIzQzOwl1bnNpZ25lZCBpbnQga25vd25fY3B1X2toeiA9IDAsIGtub3duX3RzY19raHogPSAwOwomIzQzOwogCWlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1RTQykpCiAJCXJldHVybjsKIAkvKiBEb24mIzM5O3QgY2hhbmdlIFVWIFRTQyBtdWx0aS1jaGFzc2lzIHN5bmNocm9uaXphdGlvbiAqLwogCWlmIChpc19lYXJseV91dl9zeXN0ZW0oKSkKIAkJcmV0dXJuOwogCi0Jc25wX3NlY3VyZV90c2NfaW5pdCgpOwomIzQzOwlpZiAoeDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHopCiYjNDM7CQlrbm93bl9jcHVfa2h6ID0geDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHooKTsKIAotCWlmICghZGV0ZXJtaW5lX2NwdV90c2NfZnJlcXVlbmNpZXModHJ1ZSkpCiYjNDM7CWlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9HVUVTVF9TTlBfU0VDVVJFX1RTQykpCiYjNDM7CQlrbm93bl90c2Nfa2h6ID0gc25wX3NlY3VyZV90c2NfaW5pdCgpOwomIzQzOwllbHNlIGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSkKJiM0MzsJCWtub3duX3RzY19raHogPSB0ZHhfdHNjX2luaXQoKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlIFRTQyBmcmVxdWVuY3kgd2FzbiYjMzk7dCBwcm92aWRlZCBieSB0cnVzdGVkIGZpcm13YXJlLCB0cnkgdG8gZ2V0CiYjNDM7CSAqIGl0IGZyb20gdGhlIGh5cGVydmlzb3IgKHdoaWNoIGlzIHVudHJ1c3RlZCB3aGVuIHJ1bm5pbmcgYXMgYSBDb0NvIGd1ZXN0KS4KJiM0MzsJICovCiYjNDM7CWlmICgha25vd25fdHNjX2toeiAmYW1wOyZhbXA7IHg4Nl9pbml0Lmh5cGVyLmdldF90c2Nfa2h6KQomIzQzOwkJa25vd25fdHNjX2toeiA9IHg4Nl9pbml0Lmh5cGVyLmdldF90c2Nfa2h6KCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE1hcmsgdGhlIFRTQyBmcmVxdWVuY3kgYXMga25vd24gaWYgaXQgd2FzIG9idGFpbmVkIGZyb20gYSBoeXBlcnZpc29yCiYjNDM7CSAqIG9yIHRydXN0ZWQgZmlybXdhcmUuCiYjNDM7CSAqLwomIzQzOwlpZiAoa25vd25fdHNjX2toeikKJiM0MzsJCXNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBJZ25vcmUgdGhlIHVzZXItcHJvdmlkZWQgVFNDIGZyZXF1ZW5jeSBpZiB0aGUgZXhhY3QgZnJlcXVlbmN5IHdhcwomIzQzOwkgKiBvYnRhaW5lZCBmcm9tIHRydXN0ZWQgZmlybXdhcmUgb3IgdGhlIGh5cGVydmlzb3IsIGFuZCBkb24mIzM5O3QgbWFyayB0aGUKJiM0MzsJICogZnJlcXVlbmN5IGFzIGtub3duLCBhcyB0aGUgdXNlci1wcm92aWRlZCBmcmVxdWVuY3kgaXMgaW50ZW5kZWQgYXMgYQomIzQzOwkgKiAmIzM0O3N0YXJ0aW5nIHBvaW50JiMzNDssIG5vdCBhIGtub3duLCBndWFyYW50ZWVkIGZyZXF1ZW5jeQomIzQzOwkgKi8KJiM0MzsJaWYgKCFrbm93bl90c2Nfa2h6KQomIzQzOwkJa25vd25fdHNjX2toeiA9IHRzY19lYXJseV9raHo7CiYjNDM7CWVsc2UgaWYgKHRzY19lYXJseV9raHopCiYjNDM7CQlwcl9lcnIoJiMzNDtJZ25vcmluZyAmIzM5O3RzY19lYXJseV9raHomIzM5OyBpbiBmYXZvciBvZiBmaXJtd2FyZS9oeXBlcnZpc29yLlxuJiMzNDspOwomIzQzOwomIzQzOwlpZiAoIWRldGVybWluZV9jcHVfdHNjX2ZyZXF1ZW5jaWVzKHRydWUsIGtub3duX2NwdV9raHosIGtub3duX3RzY19raHopKQogCQlyZXR1cm47CiAJdHNjX2VuYWJsZV9zY2hlZF9jbG9jaygpOwogfQpAQCAtMTUyMiwxNiAmIzQzOzE1ODEsOSBAQCB2b2lkIF9faW5pdCB0c2NfaW5pdCh2b2lkKQogCQlyZXR1cm47CiAJfQogCi0JLyoKLQkgKiBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSBjYW4gb25seSBjYWxpYnJhdGUgdXNpbmcgbWV0aG9kcyB0aGF0IGFyZQotCSAqIGF2YWlsYWJsZSBlYXJseSBpbiBib290LgotCSAqLwotCWlmICh4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX2NwdSA9PSBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSkKLQkJeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUgPSBuYXRpdmVfY2FsaWJyYXRlX2NwdTsKLQogCWlmICghdHNjX2toeikgewogCQkvKiBXZSBmYWlsZWQgdG8gZGV0ZXJtaW5lIGZyZXF1ZW5jaWVzIGVhcmxpZXIsIHRyeSBhZ2FpbiAqLwotCQlpZiAoIWRldGVybWluZV9jcHVfdHNjX2ZyZXF1ZW5jaWVzKGZhbHNlKSkgewomIzQzOwkJaWYgKCFkZXRlcm1pbmVfY3B1X3RzY19mcmVxdWVuY2llcyhmYWxzZSwgMCwgMCkpIHsKIAkJCW1hcmtfdHNjX3Vuc3RhYmxlKCYjMzQ7Y291bGQgbm90IGNhbGN1bGF0ZSBUU0Mga2h6JiMzNDspOwogCQkJc2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfREVBRExJTkVfVElNRVIpOwogCQkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RzY19tc3IuYyBiL2FyY2gveDg2L2tlcm5lbC90c2NfbXNyLmMKaW5kZXggNDhlNmNjMWNiMDE3YTUuLmFlY2UwNjJhZWU3ZTg5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHNjX21zci5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC90c2NfbXNyLmMKQEAgLTIxMCw5ICYjNDM7MjEwLDcgQEAgdW5zaWduZWQgbG9uZyBjcHVfa2h6X2Zyb21fbXNyKHZvaWQpCiAJaWYgKGZyZXEgPT0gMCkKIAkJcHJfZXJyKCYjMzQ7RXJyb3IgTVNSX0ZTQl9GUkVRIGluZGV4ICVkIGlzIHVua25vd25cbiYjMzQ7LCBpbmRleCk7CiAKLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLQlsYXBpY190aW1lcl9wZXJpb2QgPSAoZnJlcSAqIDEwMDApIC8gSFo7Ci0jZW5kaWYKJiM0MzsJYXBpY19zZXRfdGltZXJfcGVyaW9kX2toeihmcmVxLCAmIzM0O01TUl9GU0JfRlJFUSYjMzQ7KTsKIAogCS8qCiAJICogVFNDIGZyZXF1ZW5jeSBkZXRlcm1pbmVkIGJ5IE1TUiBpcyBhbHdheXMgY29uc2lkZXJlZCAmIzM0O2tub3duJiMzNDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jIGIvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmMKaW5kZXggMjUyYzU4MjdkMDYzNGYuLmI3YTQ4ZTYyMmY0ODhhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYwpAQCAtMTQ3LDggJiM0MzsxNDcsNiBAQCBzdGF0aWMgdm9pZCBlbmNfa2V4ZWNfZmluaXNoX25vb3Aodm9pZCkge30KIHN0YXRpYyBib29sIGlzX3ByaXZhdGVfbW1pb19ub29wKHU2NCBhZGRyKSB7cmV0dXJuIGZhbHNlOyB9CiAKIHN0cnVjdCB4ODZfcGxhdGZvcm1fb3BzIHg4Nl9wbGF0Zm9ybSBfX3JvX2FmdGVyX2luaXQgPSB7Ci0JLmNhbGlicmF0ZV9jcHUJCQk9IG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5LAotCS5jYWxpYnJhdGVfdHNjCQkJPSBuYXRpdmVfY2FsaWJyYXRlX3RzYywKIAkuZ2V0X3dhbGxjbG9jawkJCT0gbWFjaF9nZXRfY21vc190aW1lLAogCS5zZXRfd2FsbGNsb2NrCQkJPSBtYWNoX3NldF9jbW9zX3RpbWUsCiAJLmlvbW11X3NodXRkb3duCQkJPSBpb21tdV9zaHV0ZG93bl9ub29wLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMgYi9hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYwppbmRleCAyZjhjMzIxNzM5NzJkNi4uNmMzYWY5NzRjN2MyZjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jCkBAIC01MzUsOSAmIzQzOzUzNSw2IEBAIHZvaWQgX19pbml0IHNtZV9lYXJseV9pbml0KHZvaWQpCiAJCSAqLwogCQl4ODZfaW5pdC5yZXNvdXJjZXMuZG1pX3NldHVwID0gc25wX2RtaV9zZXR1cDsKIAl9Ci0KLQlpZiAoc2V2X3N0YXR1cyAmYW1wOyBNU1JfQU1ENjRfU05QX1NFQ1VSRV9UU0MpCi0JCXNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTsKIH0KIAogdm9pZCBfX2luaXQgbWVtX2VuY3J5cHRfZnJlZV9kZWNyeXB0ZWRfbWVtKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vdGltZS5jIGIvYXJjaC94ODYveGVuL3RpbWUuYwppbmRleCBkNjJjMTQzMzRiMzUxMC4uYmMyNmYwMGZjNTNlNWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi90aW1lLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYveGVuL3RpbWUuYwpAQCAtMzgsMTIgJiM0MzszOCwxMSBAQAogc3RhdGljIHU2NCB4ZW5fc2NoZWRfY2xvY2tfb2Zmc2V0IF9fcmVhZF9tb3N0bHk7CiAKIC8qIEdldCB0aGUgVFNDIHNwZWVkIGZyb20gWGVuICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB4ZW5fdHNjX2toeih2b2lkKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IHhlbl90c2Nfa2h6KHZvaWQpCiB7CiAJc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gKmluZm8gPQogCQkmYW1wO0hZUEVSVklTT1Jfc2hhcmVkX2luZm8tJmd0O3ZjcHVfaW5mb1swXS50aW1lOwogCi0Jc2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfS05PV05fRlJFUSk7CiAJcmV0dXJuIHB2Y2xvY2tfdHNjX2toeihpbmZvKTsKIH0KIApAQCAtNDQ0LDcgJiM0Mzs0NDMsNyBAQCB2b2lkIHhlbl9yZXN0b3JlX3RpbWVfbWVtb3J5X2FyZWEodm9pZCkKIAl4ZW5fc2NoZWRfY2xvY2tfb2Zmc2V0ID0geGVuX2Nsb2Nrc291cmNlX3JlYWQoKSAtIHhlbl9jbG9ja192YWx1ZV9zYXZlZDsKIH0KIAotc3RhdGljIHZvaWQgeGVuX3NldHVwX3ZzeXNjYWxsX3RpbWVfaW5mbyh2b2lkKQomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCB4ZW5fc2V0dXBfdnN5c2NhbGxfdGltZV9pbmZvKHZvaWQpCiB7CiAJc3RydWN0IHZjcHVfcmVnaXN0ZXJfdGltZV9tZW1vcnlfYXJlYSB0OwogCXN0cnVjdCBwdmNsb2NrX3ZzeXNjYWxsX3RpbWVfaW5mbyAqdGk7CkBAIC01NjcsOSAmIzQzOzU2NiwxNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgeGVuX2luaXRfdGltZV9jb21tb24odm9pZCkKIHsKIAl4ZW5fc2NoZWRfY2xvY2tfb2Zmc2V0ID0geGVuX2Nsb2Nrc291cmNlX3JlYWQoKTsKIAlzdGF0aWNfY2FsbF91cGRhdGUocHZfc3RlYWxfY2xvY2ssIHhlbl9zdGVhbF9jbG9jayk7Ci0JcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKHhlbl9zY2hlZF9jbG9jayk7CiAKLQl4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX3RzYyA9IHhlbl90c2Nfa2h6OwomIzQzOwkvKgomIzQzOwkgKiBYZW4gaGFzIHBhcmF2aXJ0dWFsaXplZCBzdXNwZW5kL3Jlc3VtZSBhbmQgc28gZG9lc24mIzM5O3QgdXNlIHRoZSBjb21tb24KJiM0MzsJICogeDg2IHNjaGVkX2Nsb2NrIHNhdmUvcmVzdG9yZSBob29rcy4KJiM0MzsJICovCiYjNDM7CXBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh4ZW5fc2NoZWRfY2xvY2ssIHg4Nl9pbml0X25vb3AsIHg4Nl9pbml0X25vb3ApOwomIzQzOwomIzQzOwl4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeiA9IHhlbl90c2Nfa2h6OwogCXg4Nl9wbGF0Zm9ybS5nZXRfd2FsbGNsb2NrID0geGVuX2dldF93YWxsY2xvY2s7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jCmluZGV4IGRmNTY3Nzk1ZDE3NTFhLi44ZWU3YTlkZTBmNGZkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9oeXBlcnZfdGltZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jCkBAIC00ODgsMTcgJiM0Mzs0ODgsNiBAQCBzdGF0aWMgdm9pZCByZXN1bWVfaHZfY2xvY2tfdHNjKHN0cnVjdCBjbG9ja3NvdXJjZSAqYXJnKQogCWh2X3NldF9tc3IoSFZfTVNSX1JFRkVSRU5DRV9UU0MsIHRzY19tc3IuYXNfdWludDY0KTsKIH0KIAotLyoKLSAqIENhbGxlZCBkdXJpbmcgcmVzdW1lIGZyb20gaGliZXJuYXRpb24sIGZyb20gb3ZlcnJpZGRlbgotICogeDg2X3BsYXRmb3JtLnJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUgcm91dGluZS4gVGhpcyBpcyB0byBhZGp1c3Qgb2Zmc2V0cwotICogdXNlZCB0byBjYWxjdWxhdGUgdGltZSBmb3IgaHYgdHNjIHBhZ2UgYmFzZWQgc2NoZWRfY2xvY2ssIHRvIGFjY291bnQgZm9yCi0gKiB0aW1lIHNwZW50IGJlZm9yZSBoaWJlcm5hdGlvbi4KLSAqLwotdm9pZCBodl9hZGpfc2NoZWRfY2xvY2tfb2Zmc2V0KHU2NCBvZmZzZXQpCi17Ci0JaHZfc2NoZWRfY2xvY2tfb2Zmc2V0IC09IG9mZnNldDsKLX0KLQogI2lmZGVmIEhBVkVfVkRTT19DTE9DS01PREVfSFZDTE9DSwogc3RhdGljIGludCBodl9jc19lbmFibGUoc3RydWN0IGNsb2Nrc291cmNlICpjcykKIHsKQEAgLTU1NCwxMCAmIzQzOzU0MywzNSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgaHZfc2V0dXBfc2NoZWRfY2xvY2sodm9pZCAqc2NoZWRfY2xvY2spCiAjZWxpZiBkZWZpbmVkIENPTkZJR19QQVJBVklSVAogI2luY2x1ZGUgJmx0O2FzbS90aW1lci5oJmd0OwogCiYjNDM7c3RhdGljIHU2NCBodl9yZWZfY291bnRlcl9hdF9zdXNwZW5kOwomIzQzOy8qCiYjNDM7ICogSHlwZXItViBjbG9jayBjb3VudGVyIHJlc2V0cyBkdXJpbmcgaGliZXJuYXRpb24uIFNhdmUgYW5kIHJlc3RvcmUgY2xvY2sKJiM0MzsgKiBvZmZzZXQgZHVyaW5nIHN1c3BlbmQvcmVzdW1lLCB3aGlsZSBhbHNvIGNvbnNpZGVyaW5nIHRoZSB0aW1lIHBhc3NlZAomIzQzOyAqIGJlZm9yZSBzdXNwZW5kLiBUaGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IHNjaGVkX2Nsb2NrIHVzaW5nIGh2IHRzYyBwYWdlCiYjNDM7ICogYmFzZWQgY2xvY2tzb3VyY2UsIHByb2NlZWRzIGZyb20gd2hlcmUgaXQgbGVmdCBvZmYgZHVyaW5nIHN1c3BlbmQgYW5kCiYjNDM7ICogaXQgc2hvd3MgY29ycmVjdCB0aW1lIGZvciB0aGUgdGltZXN0YW1wcyBvZiBrZXJuZWwgbWVzc2FnZXMgYWZ0ZXIgcmVzdW1lLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGh2X3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZCkKJiM0Mzt7CiYjNDM7CWh2X3JlZl9jb3VudGVyX2F0X3N1c3BlbmQgPSBodl9yZWFkX3JlZmVyZW5jZV9jb3VudGVyKCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGh2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZCkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIEFkanVzdCB0aGUgb2Zmc2V0cyB1c2VkIGJ5IGh2IHRzYyBjbG9ja3NvdXJjZSB0bwomIzQzOwkgKiBhY2NvdW50IGZvciB0aGUgdGltZSBzcGVudCBiZWZvcmUgaGliZXJuYXRpb24uCiYjNDM7CSAqIGFkanVzdGVkIHZhbHVlID0gcmVmZXJlbmNlIGNvdW50ZXIgKHRpbWUpIGF0IHN1c3BlbmQKJiM0MzsJICogICAgICAgICAgICAgICAgLSByZWZlcmVuY2UgY291bnRlciAodGltZSkgbm93LgomIzQzOwkgKi8KJiM0MzsJaHZfc2NoZWRfY2xvY2tfb2Zmc2V0IC09IChodl9yZWZfY291bnRlcl9hdF9zdXNwZW5kIC0gaHZfcmVhZF9yZWZlcmVuY2VfY291bnRlcigpKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgaHZfc2V0dXBfc2NoZWRfY2xvY2sodm9pZCAqc2NoZWRfY2xvY2spCiB7CiAJLyogV2UmIzM5O3JlIG9uIHg4Ni94NjQgKmFuZCogdXNpbmcgUFYgb3BzICovCi0JcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKHNjaGVkX2Nsb2NrKTsKJiM0MzsJcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKHNjaGVkX2Nsb2NrLCBodl9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlLAomIzQzOwkJCQkgaHZfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSk7CiB9CiAjZWxzZSAvKiAhQ09ORklHX0dFTkVSSUNfU0NIRURfQ0xPQ0sgJmFtcDsmYW1wOyAhQ09ORklHX1BBUkFWSVJUICovCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgaHZfc2V0dXBfc2NoZWRfY2xvY2sodm9pZCAqc2NoZWRfY2xvY2spIHt9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5oIGIvaW5jbHVkZS9jbG9ja3NvdXJjZS9oeXBlcnZfdGltZXIuaAppbmRleCBkNDhkZDQxNzZmZDM1Yi4uYTRjODFhNjBmNTNkZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9jbG9ja3NvdXJjZS9oeXBlcnZfdGltZXIuaApAQCAtMzgsOCAmIzQzOzM4LDYgQEAgZXh0ZXJuIHZvaWQgaHZfcmVtYXBfdHNjX2Nsb2Nrc291cmNlKHZvaWQpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaHZfZ2V0X3RzY19wZm4odm9pZCk7CiBleHRlcm4gc3RydWN0IG1zX2h5cGVydl90c2NfcGFnZSAqaHZfZ2V0X3RzY19wYWdlKHZvaWQpOwogCi1leHRlcm4gdm9pZCBodl9hZGpfc2NoZWRfY2xvY2tfb2Zmc2V0KHU2NCBvZmZzZXQpOwotCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wKIGh2X3JlYWRfdHNjX3BhZ2VfdHNjKGNvbnN0IHN0cnVjdCBtc19oeXBlcnZfdHNjX3BhZ2UgKnRzY19wZywKIAkJICAgICB1NjQgKmN1cl90c2MsIHU2NCAqdGltZSkKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCmluZGV4IGIxYjVlYzQzYzBmMjdiLi41YmM3N2QzNmM3YTM2NCAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCkBAIC0yMTgwLDExICYjNDM7MjE4MCwxNiBAQCB2b2lkIHRpbWVrZWVwaW5nX3Jlc3VtZSh2b2lkKQogCXU2NCBjeWNsZV9ub3csIG5zZWM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXJlYWRfcGVyc2lzdGVudF9jbG9jazY0KCZhbXA7dHNfbmV3KTsKLQogCWNsb2NrZXZlbnRzX3Jlc3VtZSgpOwogCWNsb2Nrc291cmNlX3Jlc3VtZSgpOwogCiYjNDM7CS8qCiYjNDM7CSAqIFJlYWQgcGVyc2lzdGVudCB0aW1lIGFmdGVyIGNsb2Nrc291cmNlcyBoYXZlIGJlZW4gcmVzdW1lZC4gIFBhcmF2aXJ0CiYjNDM7CSAqIGNsb2NrcyBoYXZlIGEgbmFzdHkgaGFiaXQgb2YgcGlnZ3liYWNraW5nIGEgcGVyc2lzdGVudCBjbG9jayBvbiBhCiYjNDM7CSAqIHN5c3RlbSBjbG9jaywgYW5kIG1heSByZXR1cm4gZ2FyYmFnZSBpZiB0aGUgc3lzdGVtIGNsb2NrIGlzIHN1c3BlbmRlZC4KJiM0MzsJICovCiYjNDM7CXJlYWRfcGVyc2lzdGVudF9jbG9jazY0KCZhbXA7dHNfbmV3KTsKJiM0MzsKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt0a19jb3JlLmxvY2ssIGZsYWdzKTsKIAogCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MDc0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTU2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRTQyBhbmQgQVBJQyBJbml0aWFsaXphdGlvbiBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzLCBhbmQgaXQmIzM5O3MgYSBkZWVwIGRpdmUgaW50byBob3cgd2UgaGFuZGxlIFRpbWUgU3RhbXAgQ291bnRlcnMgKFRTQykgYW5kIEFQSUMgZnJlcXVlbmNpZXMgb24geDg2LCBlc3BlY2lhbGx5IHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEl0IGxvb2tzIGxpa2UgdGhlIGdvYWwgaGVyZSBpcyB0byBtb2Rlcm5pemUgYW5kIGltcHJvdmUgaG93IHdlIGNhbGlicmF0ZSBhbmQgaW5pdGlhbGl6ZSB0aGVzZSB0aW1lLWNyaXRpY2FsIGNvbXBvbmVudHMsIGVzcGVjaWFsbHkgZm9yIHRoZSBsaWtlcyBvZiBLVk0sIEh5cGVyLVYsIFZNd2FyZSwgQUNSTiwgSmFpbGhvdXNlLCBURFgsIGFuZCBTRVYtU05QLgoKSW5pdGlhbGx5LCBJIHNlZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIHdoaWNoIGlzIGFsd2F5cyBnb29kLiBTcGVjaWZpY2FsbHksIGB0c2NfZWFybHlfa2h6YCBhbmQgYEtWTV9DUFVJRF9USU1JTkdfSU5GT2AgYXJlIGRvY3VtZW50ZWQsIHdoaWNoIGlzIGEga2V5IHNpZ25hbC4gVGhlbiBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBtb3ZpbmcgYXdheSBmcm9tIHNldHRpbmcgYHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1YCBhbmQgYHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjYCBpbiBzZXZlcmFsIHBsYWNlcyAobGlrZSB3aXRoIGBzbnBfc2VjdXJlX3RzY19pbml0YCksIGFuZCBpbnN0ZWFkIHJldHVybmluZyB0aGUgVFNDIGZyZXF1ZW5jeSBkaXJlY3RseS4gVGhhdCYjMzk7cyBhIHNvbGlkIGFyY2hpdGVjdHVyYWwgY2hhbmdlLiBNYWtlcyBzZW5zZSBnaXZlbiB0aGUgY29tcGxleGl0aWVzIG9mIG1vZGVybiB2aXJ0dWFsaXphdGlvbi4KClRoZSBhZGRpdGlvbiBvZiBgdGR4X3RzY19pbml0YCBhbmQgaXRzIHVzZSBvZiBgY3B1aWRfZ2V0X3RzY19pbmZvYCBhbmQgYGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHpgIGZvciBURFggZW52aXJvbm1lbnRzIGlzIGltcG9ydGFudCwgdG9vLiBUaGlzIHN1Z2dlc3RzIGEgbW9yZSBkaXJlY3Qgd2F5IG9mIHJldHJpZXZpbmcgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIENQVUlEIGFuZCBzZXR0aW5nIHRoZSBBUElDIHRpbWVyIHBlcmlvZCwgd2hpY2ggSSB3b3VsZCBleHBlY3QgdG8gaW1wcm92ZSByZWxpYWJpbGl0eSBhbmQgcmVkdWNlIG92ZXJoZWFkLiBUaGUgcmVtb3ZhbCBvZiBgYWNybl9nZXRfdHNjX2toemAgc3VnZ2VzdHMgYSBzaGlmdCB0byBhIG1vcmUgZ2VuZXJpYyBvciBDUFVJRC1iYXNlZCBhcHByb2FjaCwgd2hpY2ggaXMgbGlrZWx5IG1vcmUgbWFpbnRhaW5hYmxlIGluIHRoZSBsb25nIHJ1bi4gVGhlIGNoYW5nZXMgaW4gdGhlIGhlYWRlciBmaWxlcyBhbmQgdGhlIGFkZGl0aW9uIG9mIGBhcGljX3NldF90aW1lcl9wZXJpb2RfaHpgIGFsc28gbG9va3MgbGlrZSBhIGdvb2Qgc3RlcCB0b3dhcmQgYmV0dGVyIHByZWNpc2lvbiBhbmQgYSBtb3JlIGZsZXhpYmxlIGludGVyZmFjZSBmb3IgY29uZmlndXJpbmcgQVBJQyB0aW1lcnMuCgpJJiMzOTttIGludHJpZ3VlZCBieSB0aGUgY2hhbmdlcyBpbiBga3ZtLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBhZGRpdGlvbiBvZiBgS1ZNX0NQVUlEX1RJTUlOR19JTkZPYCB0byBwdWxsIFRTQyBhbmQgQVBJQyBmcmVxdWVuY2llcyBkaXJlY3RseSBmcm9tIENQVUlEIHNvdW5kcyBwcm9taXNpbmcuIFRoaXMgYnlwYXNzZXMgdGhlIG5lZWQgZm9yIGh5cGVydmlzb3Itc3BlY2lmaWMgY2FsaWJyYXRpb24gYW5kIGdpdmVzIHVzIGEgbW9yZSBkaXJlY3QgYW5kIHBvdGVudGlhbGx5IG1vcmUgYWNjdXJhdGUgYXBwcm9hY2guIFRoZSByZWZhY3RvcmluZyBvZiBga3ZtY2xvY2suY2AgYW5kIGFzc29jaWF0ZWQgc3VzcGVuZC9yZXN1bWUgaGFuZGxpbmcgaXMgYW5vdGhlciBjcml0aWNhbCBhcmVhOyB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IGhhcyBvZnRlbiBiZWVuIGEgc291cmNlIG9mIHN1YnRsZSB0aW1la2VlcGluZyBwcm9ibGVtcywgc28gdGhpcyBhdHRlbnRpb24gdG8gZGV0YWlsIGlzIHdlbGNvbWUuCgpUaGUgY29yZSBvZiB0aGUgVFNDIGNhbGlicmF0aW9uIGl0c2VsZiwgaW4gYHRzYy5jYCwgaXMgZ2V0dGluZyBhIHNpZ25pZmljYW50IG92ZXJoYXVsLCB3aXRoIGBuYXRpdmVfY2FsaWJyYXRlX3RzY2Agbm93IHVzaW5nIGBjcHVpZF9nZXRfdHNjX2luZm9gIGFuZCB0aGUgdXBkYXRlcyB0byBgZGV0ZXJtaW5lX2NwdV90c2NfZnJlcXVlbmNpZXNgLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBhcHByb2FjaCB0byBpbXByb3ZpbmcgVFNDIGNhbGlicmF0aW9uIGFuZCBtYWtpbmcgaXQgbW9yZSByZWxpYWJsZSBhbmQgY29uc2lzdGVudC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0cnlpbmcgdG8gc3RyZWFtbGluZSB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBhbmQgbGVhbiBvbiB0aGUgQ1BVSUQgaW5mb3JtYXRpb24gZm9yIGJldHRlciBhY2N1cmFjeS4gVGhlIGB0c2NfZWFybHlfaW5pdGAgY2hhbmdlcyBpbmRpY2F0ZSB3ZSBhcmUgdXNpbmcgaHlwZXJ2aXNvci1zcGVjaWZpYyBUU0MgaW5pdGlhbGl6YXRpb24sIHRvbywgd2hpY2ggc2hvdWxkIGFkYXB0IHRoaXMgdG8gZGlmZmVyZW50IGVudmlyb25tZW50cy4gVGhlIGNoYW5nZXMgaW4gYHRzY19tc3IuY2AgdG8gdXNlIGBhcGljX3NldF90aW1lcl9wZXJpb2Rfa2h6YCBhcmUgbGlrZWx5IHJlbGF0ZWQgYW5kIGFpbWVkIGF0IGltcHJvdmluZyB0aW1la2VlcGluZyBhY2N1cmFjeSBhdCB0aGUgbG93ZXIgbGV2ZWxzLgoKVGhlIGNoYW5nZXMgaW4gdGhlIGh5cGVydmlzb3Itc3BlY2lmaWMgY29kZSAoQUNSTiwgSHlwZXItViwgVk13YXJlLCBKYWlsaG91c2UsIFhlbikgYWxsIHBvaW50IHRvIGxldmVyYWdpbmcgYHg4Nl9pbml0Lmh5cGVyLmdldF90c2Nfa2h6YCBhbmQgYHg4Nl9pbml0Lmh5cGVyLmdldF9jcHVfa2h6YCBpbnN0ZWFkIG9mIHRoZSBvbGRlciBjYWxpYnJhdGlvbiBtZXRob2RzLiBUaGlzIHN1Z2dlc3RzIGEgbW92ZSB0b3dhcmQgYSBtb3JlIG1vZHVsYXIgYW5kIHBvdGVudGlhbGx5IG1vcmUgZWZmaWNpZW50IGh5cGVydmlzb3IgaW50ZWdyYXRpb24uCgpSZWdhcmRpbmcgZnV6emluZywgdGhpcyBpcyB0aGUgY3J1Y2lhbCBxdWVzdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHRoaXMgY29kZSBtaWdodCBiZSB1bnJlYWNoYWJsZSBpbiBhIEdDRSBvciBRRU1VLWxpa2UgZW52aXJvbm1lbnQuIEJ1dCwgdGhlbiBJIHJlYWxpemVkIHRoYXQgdGhlIEtWTSBndWVzdCBjb2RlIHJ1bnMgKmluc2lkZSogdGhlIFZNLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgc3l6a2FsbGVyIGZ1enplcy4gU3l6a2FsbGVyIGNhbiwgYW5kIGRvZXMsIGZ1enogdGhpcyBjb2RlLgoKQWx0aG91Z2ggdGhpcyBpcyBtb3N0bHkgZWFybHkgYm9vdCBjb2RlIChUU0MgY2FsaWJyYXRpb24sIGh5cGVydmlzb3IgaW5pdGlhbGl6YXRpb24pLCB3aGljaCBpcyBub3QgdGhlIHR5cGljYWwgZm9jdXMgb2Ygc3l6a2FsbGVyLCB0aGUgY2hhbmdlcyB0byBzdXNwZW5kL3Jlc3VtZSBhbmQgQ1BVIGhvdHBsdWcgcGF0aHMgYXJlIGludGVyZXN0aW5nLiBUaGVzZSBjb3VsZCBiZSBmdXp6ZWQuIFNwZWNpZmljYWxseSwgZnVuY3Rpb25zIGxpa2UgYGt2bWNsb2NrX2NwdV9hY3Rpb25gLCBga3ZtX3N1c3BlbmRgLCBga3ZtX3Jlc3VtZWAsIGB0aW1la2VlcGluZ19yZXN1bWVgLCBga3ZtX2NwdV9vbmxpbmVgLCBhbmQgYGt2bV9jcHVfZG93bl9wcmVwYXJlYCBhcmUgdmVyeSBpbnRlcmVzdGluZy4KClRvIGJlIHJlYWNoYWJsZSwgd2UgbmVlZCBgQ09ORklHX0tWTV9HVUVTVGAsIGBDT05GSUdfUEFSQVZJUlRgLCBgQ09ORklHX1NVU1BFTkRgIChvciBgQ09ORklHX0hJQkVSTkFUSU9OYCksIGFuZCBgQ09ORklHX0hPVFBMVUdfQ1BVYC4gSSBzZWUgdGhhdCBgdGltZWtlZXBpbmdfcmVzdW1lYCBpcyBjYWxsZWQgZHVyaW5nIHN5c3RlbSByZXN1bWUsIGFuZCBga3ZtY2xvY2tfY3B1X2FjdGlvbmAgaXMgY2FsbGVkIGR1cmluZyBDUFUgaG90cGx1ZyBhbmQgc3VzcGVuZC9yZXN1bWUuIFRoaXMgbG9va3MgdmVyeSBwcm9taXNpbmcuIFRoaXMgbmVlZHMgbW9yZSBhdHRlbnRpb24uCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1jbG9ja19jcHVfYWN0aW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmg9MTI5PXZvaWQga3ZtY2xvY2tfaW5pdChib29sIHByZWZlcl90c2MpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaDoxMzA6dm9pZCBrdm1jbG9ja19jcHVfYWN0aW9uKGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgtMTMxLWJvb2wga3ZtX3BhcmFfYXZhaWxhYmxlKHZvaWQpO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9rdm0uYz00NjM9c3RhdGljIHZvaWQga3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9rdm0uYy00NzMtXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmM6NDc0Olx0a3ZtY2xvY2tfY3B1X2FjdGlvbihhY3Rpb24pO1xuYXJjaC94ODYva2VybmVsL2t2bS5jLTQ3NS19XG4tLVxuYXJjaC94ODYva2VybmVsL2t2bS5jPTQ3Nz1zdGF0aWMgdm9pZCBfX2t2bV9jcHVfb25saW5lKHVuc2lnbmVkIGludCBjcHUsIGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9rdm0uYy00ODEtXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmM6NDgyOlx0a3ZtY2xvY2tfY3B1X2FjdGlvbihhY3Rpb24pO1xuYXJjaC94ODYva2VybmVsL2t2bS5jLTQ4My1cdGt2bV9ndWVzdF9jcHVfaW5pdCgpO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jPTE2OT1zdGF0aWMgdm9pZCBrdm1jbG9ja19yZXN1bWUoc3RydWN0IGNsb2Nrc291cmNlICpjcylcbi0tXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy0xNzQtXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzoxNzU6dm9pZCBrdm1jbG9ja19jcHVfYWN0aW9uKGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKVxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtMTc2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODE2MAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaCBmb3IgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGV5ZSBnb2VzIHRvIHRoZSBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQ6IGBrdm1fY3B1X29ubGluZWAsIGBrdm1fY3B1X2Rvd25fcHJlcGFyZWAsIGBrdm1fc3VzcGVuZGAsIGBrdm1fcmVzdW1lYCwgYGt2bV9wdl9ndWVzdF9jcHVfcmVib290YCwgYW5kIGBrdm1fY3Jhc2hfc2h1dGRvd25gLiBUaGVzZSBhcmUgYWxsICp2ZXJ5KiBpbnRlcmVzdGluZy4gVGhleSYjMzk7cmUgYWxsIGhvb2tzIGludG8gY3JpdGljYWwgYXJlYXMg4oCTIENQVSBob3RwbHVnLCBzeXN0ZW0gY29yZSBvcGVyYXRpb25zLCBhbmQgdGhlIHJlYm9vdCBub3RpZmljYXRpb24gcHJvY2Vzcy4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3Igb2YgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB2aXJ0dWFsaXphdGlvbiBhbmQgS1ZNLgoKTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB3aGV0aGVyIHN5emthbGxlciBjYW4gcmVhY2ggdGhlc2UgYXJlYXMuIEFuZCwgb2YgY291cnNlLCB0aGUgYW5zd2VyIGlzIHllcy4gSXQmIzM5O3MgcGVyZmVjdGx5IGNhcGFibGUgb2YgdHJpZ2dlcmluZyBDUFUgaG90cGx1ZyB0aHJvdWdoIGAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVYL29ubGluZWAgYW5kIHN1c3BlbmQvcmVzdW1lIGN5Y2xlcyB1c2luZyBgL3N5cy9wb3dlci9zdGF0ZWAuIFRoaXMgcmFpc2VzIGEgcmVkIGZsYWcuIFRoZSBmYWN0IHRoYXQgYW4gYXV0b21hdGVkIGZ1enplciBjYW4gaGl0IHRoZXNlIGNhbGxiYWNrIGZ1bmN0aW9ucyBtZWFucyB3ZSBuZWVkIHRvIGxvb2sgdmVyeSBjbG9zZWx5IGF0IHRoZSBjb2RlIHBhdGhzIGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgaW4gdGhlc2UgdHJhbnNpdGlvbnMuCgpOb3cgSSYjMzk7bSBnb2luZyB0byBzaGlmdCBteSBmb2N1cyB0byBgdGltZWtlZXBpbmdfcmVzdW1lYCBhbmQgdHJ5IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGltZWtlZXBpbmdfcmVzdW1lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L3hlbi9zdXNwZW5kLmM9NDA9c3RhdGljIHZvaWQgeGVuX3ZjcHVfbm90aWZ5X3Jlc3RvcmUodm9pZCAqZGF0YSlcbi0tXG5hcmNoL3g4Ni94ZW4vc3VzcGVuZC5jLTQ0LVxuYXJjaC94ODYveGVuL3N1c3BlbmQuYzo0NTpcdC8qIEJvb3QgcHJvY2Vzc29yIG5vdGlmaWVkIHZpYSBnZW5lcmljIHRpbWVrZWVwaW5nX3Jlc3VtZSgpICovXG5hcmNoL3g4Ni94ZW4vc3VzcGVuZC5jLTQ2LVx0aWYgKHNtcF9wcm9jZXNzb3JfaWQoKSA9PSAwKVxuLS1cbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmM9Mjk0OT1zdGF0aWMgdm9pZCBodl9zeW5pY19yZXN1bWUodm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jLTI5NTUtXHQgKiBvbiBDUFUwIGlzIG5vdCB1bmJvdW5kIGluIGh2X3N5bmljX3N1c3BlbmQoKSwgYW5kIHRoZSB0aW1lciBpc1xuZHJpdmVycy9odi92bWJ1c19kcnYuYzoyOTU2Olx0ICogYXV0b21hdGljYWxseSByZS1lbmFibGVkIGluIHRpbWVrZWVwaW5nX3Jlc3VtZSgpLlxuZHJpdmVycy9odi92bWJ1c19kcnYuYy0yOTU3LVx0ICovXG4tLVxuZnMvdGltZXJmZC5jPTEyNT1zdGF0aWMgREVDTEFSRV9XT1JLKHRpbWVyZmRfd29yaywgdGltZXJmZF9yZXN1bWVfd29yayk7XG4tLVxuZnMvdGltZXJmZC5jLTEyNy0vKlxuZnMvdGltZXJmZC5jOjEyODogKiBJbnZva2VkIGZyb20gdGltZWtlZXBpbmdfcmVzdW1lKCkuIERlZmVyIHRoZSBhY3R1YWwgdXBkYXRlIHRvIHdvcmsgc29cbmZzL3RpbWVyZmQuYy0xMjktICogdGltZXJmZF9jbG9ja193YXNfc2V0KCkgcnVucyBpbiB0YXNrIGNvbnRleHQuXG4tLVxua2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYz04OTg9dm9pZCBjbG9ja3NvdXJjZV9zdGFydF9zdXNwZW5kX3RpbWluZyhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzLCB1NjQgc3RhcnRfY3ljbGVzKVxuLS1cbmtlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMtOTMwLSAqXG5rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jOjkzMTogKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBlYXJseSBpbiB0aGUgcmVzdW1lIHByb2Nlc3MgZnJvbSB0aW1la2VlcGluZ19yZXN1bWUoKSxcbmtlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMtOTMyLSAqIHRoYXQgbWVhbnMgdGhlcmUgaXMgb25seSBvbmUgY3B1LCBubyBwcm9jZXNzZXMgYXJlIHJ1bm5pbmcgYW5kIHRoZSBpbnRlcnJ1cHRzXG4tLVxua2VybmVsL3RpbWUvaHJ0aW1lci5jPTEwMTg9dm9pZCBjbG9ja193YXNfc2V0X2RlbGF5ZWQodm9pZClcbi0tXG5rZXJuZWwvdGltZS9ocnRpbWVyLmMtMTAyMy0vKlxua2VybmVsL3RpbWUvaHJ0aW1lci5jOjEwMjQ6ICogQ2FsbGVkIGR1cmluZyByZXN1bWUgZWl0aGVyIGRpcmVjdGx5IGZyb20gdmlhIHRpbWVrZWVwaW5nX3Jlc3VtZSgpXG5rZXJuZWwvdGltZS9ocnRpbWVyLmMtMTAyNS0gKiBvciBpbiB0aGUgY2FzZSBvZiBzMmlkbGUgZnJvbSB0aWNrX3VuZnJlZXplKCkgdG8gZW5zdXJlIHRoYXQgdGhlXG4tLVxua2VybmVsL3RpbWUvdGljay1jb21tb24uYz00ODU9dm9pZCB0aWNrX3N1c3BlbmQodm9pZClcbi0tXG5rZXJuZWwvdGltZS90aWNrLWNvbW1vbi5jLTQ5My0gKlxua2VybmVsL3RpbWUvdGljay1jb21tb24uYzo0OTQ6ICogQ2FsbGVkIGZyb20gc3lzY29yZV9yZXN1bWUoKSB2aWEgdGltZWtlZXBpbmdfcmVzdW1lIHdpdGggb25seSBvbmVcbmtlcm5lbC90aW1lL3RpY2stY29tbW9uLmMtNDk1LSAqIENQVSBvbmxpbmUgYW5kIGludGVycnVwdHMgZGlzYWJsZWQuXG4tLVxua2VybmVsL3RpbWUvdGljay1jb21tb24uYz01NTk9dm9pZCB0aWNrX3VuZnJlZXplKHZvaWQpXG4tLVxua2VybmVsL3RpbWUvdGljay1jb21tb24uYy01NjktXHRcdGxvY2tfbWFwX2FjcXVpcmVfdHJ5KFx1MDAyNnRpY2tfZnJlZXplX21hcCk7XG5rZXJuZWwvdGltZS90aWNrLWNvbW1vbi5jOjU3MDpcdFx0dGltZWtlZXBpbmdfcmVzdW1lKCk7XG5rZXJuZWwvdGltZS90aWNrLWNvbW1vbi5jLTU3MS1cdFx0c2NoZWRfY2xvY2tfcmVzdW1lKCk7XG4tLVxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYz0yMDA4PXN0YXRpYyBfX2luaXQgdm9pZCB0a2RfYmFzaWNfc2V0dXAoc3RydWN0IHRrX2RhdGEgKnRrZCwgZW51bSB0aW1la2VlcGVyX2lkcyB0a19pZCwgYm9vbCB2YWxpZClcbi0tXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jLTIwMTYtLypcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmM6MjAxNzogKiBGbGFnIHJlZmxlY3Rpbmcgd2hldGhlciB0aW1la2VlcGluZ19yZXN1bWUoKSBoYXMgaW5qZWN0ZWQgc2xlZXB0aW1lLlxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYy0yMDE4LSAqXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jLTIwMTktICogVGhlIGZsYWcgc3RhcnRzIG9mIGZhbHNlIGFuZCBpcyBvbmx5IHNldCB3aGVuIGEgc3VzcGVuZCByZWFjaGVzXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jOjIwMjA6ICogdGltZWtlZXBpbmdfc3VzcGVuZCgpLCB0aW1la2VlcGluZ19yZXN1bWUoKSBzZXRzIGl0IHRvIGZhbHNlIHdoZW4gdGhlXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jLTIwMjEtICogdGltZWtlZXBlciBjbG9ja3NvdXJjZSBpcyBub3Qgc3RvcHBpbmcgYWNyb3NzIHN1c3BlbmQgYW5kIGhhcyBiZWVuXG4tLVxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYy0yMDI1LSAqXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jOjIwMjY6ICogSWYgYSBzdXNwZW5kIGZhaWxzIGJlZm9yZSByZWFjaGluZyB0aW1la2VlcGluZ19yZXN1bWUoKSB0aGVuIHRoZSBmbGFnXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jLTIwMjctICogc3RheXMgZmFsc2UgYW5kIHByZXZlbnRzIGVycm9uZW91cyBzbGVlcHRpbWUgaW5qZWN0aW9uLlxuLS1cbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmM9MjEyNT1ib29sIHRpbWVrZWVwaW5nX3J0Y19za2lwcmVzdW1lKHZvaWQpXG4tLVxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYy0yMTMxLSAqIDEpIGNhbiBiZSBkZXRlcm1pbmVkIHdoZXRoZXIgdG8gdXNlIG9yIG5vdCBvbmx5IHdoZW4gZG9pbmdcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmM6MjEzMjogKiB0aW1la2VlcGluZ19yZXN1bWUoKSB3aGljaCBpcyBpbnZva2VkIGFmdGVyIHJ0Y19zdXNwZW5kKCksXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jLTIxMzMtICogc28gd2UgY2FuJiMzOTt0IHNraXAgcnRjX3N1c3BlbmQoKSBzdXJlbHkgaWYgc3lzdGVtIGhhcyAxKS5cbi0tXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jPTIxNTU9dm9pZCB0aW1la2VlcGluZ19pbmplY3Rfc2xlZXB0aW1lNjQoY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKmRlbHRhKVxuLS1cbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMtMjE3MS0vKipcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmM6MjE3MjogKiB0aW1la2VlcGluZ19yZXN1bWUgLSBSZXN1bWVzIHRoZSBnZW5lcmljIHRpbWVrZWVwaW5nIHN1YnN5c3RlbS5cbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMtMjE3My0gKi9cbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmM6MjE3NDp2b2lkIHRpbWVrZWVwaW5nX3Jlc3VtZSh2b2lkKVxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYy0yMTc1LXtcbi0tXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jPTIyMzk9c3RhdGljIHZvaWQgdGltZWtlZXBpbmdfc3lzY29yZV9yZXN1bWUodm9pZCAqZGF0YSlcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMtMjI0MC17XG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jOjIyNDE6XHR0aW1la2VlcGluZ19yZXN1bWUoKTtcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMtMjI0Mi19XG4tLVxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuaD0xNz1leHRlcm4gaW50IHRpbWVrZWVwaW5nX3N1c3BlbmQodm9pZCk7XG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5oOjE4OmV4dGVybiB2b2lkIHRpbWVrZWVwaW5nX3Jlc3VtZSh2b2lkKTtcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmgtMTktI2lmZGVmIENPTkZJR19HRU5FUklDX1NDSEVEX0NMT0NLXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAwMzcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEtWTS9TdXNwZW5kIEludGVyYWN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGB0aW1la2VlcGluZ19yZXN1bWVgIGlzIHRyaWdnZXJlZC4gSSBzZWUgaXTigJlzIGNhbGxlZCBieSBgdGltZWtlZXBpbmdfc3lzY29yZV9yZXN1bWVgLCB3aGljaCBpcyBhIHN5c2NvcmUgb3BlcmF0aW9uLCBvciBmcm9tIGB0aWNrX3VuZnJlZXplYC4gVGhhdCB0ZWxscyBtZSwgd2l0aG91dCBhIGRvdWJ0LCB0aGF0IHRoaXMgY29kZSBwYXRoIGlzIGFjdGl2ZSBkdXJpbmcgc3VzcGVuZCBhbmQgcmVzdW1lIG9wZXJhdGlvbnMuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gYGt2bWNsb2NrX2NwdV9hY3Rpb25gLiBJIHNlZSBpdHMgYmVpbmcgY2FsbGVkIGJ5IGBrdm1fZ3Vlc3RfY3B1X29mZmxpbmVgIGFuZCBgX19rdm1fY3B1X29ubGluZWAuIEEgZGVlcGVyIGRpdmUgc2hvd3MgdGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGVkIHRocm91Z2ggc2V2ZXJhbCBwb2ludHM6IGBrdm1fY3B1X2Rvd25fcHJlcGFyZWAsIGBrdm1fc3VzcGVuZGAsIGBrdm1fcmVzdW1lYCwgYGt2bV9wdl9ndWVzdF9jcHVfcmVib290YCwgYGt2bV9jcmFzaF9zaHV0ZG93bmAsIGFuZCBga3ZtX2NwdV9vbmxpbmVgLiBBbmQgdGhlc2UsIG9mIGNvdXJzZSwgYXJlIGFsbCB2YWxpZCBjYWxsIHBvaW50cyB3aXRoaW4gYSBLVk0gZ3Vlc3QgZW52aXJvbm1lbnQuCgpBbHJpZ2h0LCBzbyB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBuZWNlc3NhcnkgdG8gZXhwb3NlIHRoaXMgaW50ZXJhY3Rpb24/IEkmIzM5O20gdGhpbmtpbmc6IGBDT05GSUdfS1ZNX0dVRVNUYCwgYENPTkZJR19TVVNQRU5EYCwgYENPTkZJR19ISUJFUk5BVElPTmAsIGBDT05GSUdfSE9UUExVR19DUFVgLCBhbmQgYENPTkZJR19QQVJBVklSVGAuIEkgc2hvdWxkIHByb2JhYmx5IHdyaXRlIHRob3NlIGRvd24gdG8gYmUgc3VyZS4KCldhaXQsIHNob3VsZCBgQ09ORklHX0tWTV9HVUVTVGAgYmUgZXhwbGljaXRseSBlbmFibGVkLCBvciBpcyBpdCBhIGRlZmF1bHQ/IEkga25vdyBpdCYjMzk7cyBvZnRlbiBlbmFibGVkIGluIHN5emthbGxlciBjb25maWdzLCBidXQgbGV0JiMzOTtzIGJlIHRob3JvdWdoLiBJIHNob3VsZCBzcGVjaWZ5IGl0IHRvIGJlIGV4cGxpY2l0LiBJdCYjMzk7cyBhIGJvb2xlYW4sIGJ1dCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYnkgZ29pbmcgdG8gYGFyY2gveDg2L0tjb25maWdgLiBJIGRvbiYjMzk7dCB3YW50IHRvIG1ha2UgYXNzdW1wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9HVUVTVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWc9MjI9c291cmNlIFwmIzM0O2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWljcm93YXR0L0tjb25maWdcJiMzNDtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy0yMy1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZzoyNDpjb25maWcgS1ZNX0dVRVNUXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWctMjUtXHRib29sIFwmIzM0O0tWTSBHdWVzdCBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYvS2NvbmZpZz04MjY9c291cmNlIFwmIzM0O2FyY2gveDg2L3hlbi9LY29uZmlnXCYjMzQ7XG5hcmNoL3g4Ni9LY29uZmlnLTgyNy1cbmFyY2gveDg2L0tjb25maWc6ODI4OmNvbmZpZyBLVk1fR1VFU1RcbmFyY2gveDg2L0tjb25maWctODI5LVx0Ym9vbCBcJiMzNDtLVk0gR3Vlc3Qgc3VwcG9ydCAoaW5jbHVkaW5nIGt2bWNsb2NrKVwmIzM0O1xuLS1cbnZpcnQva3ZtL0tjb25maWc9MTAzPWNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuLS1cbnZpcnQva3ZtL0tjb25maWctMTA1LVxudmlydC9rdm0vS2NvbmZpZzoxMDY6Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDk3MwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIFN5emthbGxlciBUZXN0aW5nKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB0ZXN0cyBTeXprYWxsZXIgcnVucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB5ZXMsIGBDT05GSUdfS1ZNX0dVRVNUYCBzZWVtcyBsaWtlIHRoZSBwcmltYXJ5IGNvbmZpZyBoZXJlLiBUaGF0JiMzOTtzIGEgbm8tYnJhaW5lciBnaXZlbiBTeXprYWxsZXImIzM5O3MgdHlwaWNhbCBRRU1VL0tWTSBlbnZpcm9ubWVudC4KCkJ1dCwgSSBhbHNvIHNlZSBgQ09ORklHX0lOVEVMX1REWF9HVUVTVGAgYW5kIGBDT05GSUdfQU1EX01FTV9FTkNSWVBUYCAoc3BlY2lmaWNhbGx5IGZvciBTRVYtU05QKSBtZW50aW9uZWQuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyBgdGR4X3RzY19pbml0YCBhbmQgYHNucF9zZWN1cmVfdHNjX2luaXRgLiBIbW0sIGFyZSB0aG9zZSBldmVuICpyZWFjaGFibGUqIGluIGEgc3RhbmRhcmQgU3l6a2FsbGVyIGNvbnRleHQ/IFN5emthbGxlciB1c3VhbGx5IGlzbiYjMzk7dCBzZXQgdXAgd2l0aGluIFREWCBvciBTRVYtU05QIGVuY2xhdmVzLCBzbyBJJiMzOTttIG5vdCBpbW1lZGlhdGVseSBzZWVpbmcgYSBzdHJvbmcgY2FzZSBmb3IgdGhlbS4gSXQgbWlnaHQgYmUgYSBnb29kLXRvLWhhdmUsIGJ1dCB0aG9zZSBjb25maWdzIHdvdWxkIG5lZWQgc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGh5cGVydmlzb3Igc3VwcG9ydCwgd2hpY2ggSSBkb3VidCB0aGUgc3RhbmRhcmQgU3l6a2FsbGVyIFZNcyB3b3VsZCBoYXZlLiBMZXQmIzM5O3MgZmxhZyB0aGF0IGFzIGEgcG90ZW50aWFsIGVkZ2UgY2FzZS4KCkhvd2V2ZXIsIHRoZSBLVk0gZ3Vlc3QgY2hhbmdlc+KAlGxpa2UgdGhlIG9uZXMgcmVsYXRpbmcgdG8gYGt2bWNsb2NrX2NwdV9hY3Rpb25gLCBga3ZtY2xvY2tfaW5pdGAsIGFuZCBga3ZtX2dldF90c2Nfa2h6YOKAlHRob3NlIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgcmVsZXZhbnQuIFRoZSBzYW1lIGdvZXMgZm9yIEh5cGVyLVYgZ3Vlc3QgYWRqdXN0bWVudHMgKGBodl9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYCwgYGh2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVgKSBhbmQgdGhvc2UgZm9yIFZNd2FyZS4gU3l6a2FsbGVyJiMzOTtzIHJlbGlhbmNlIG9uIFFFTVUvS1ZNIG1ha2VzIGBDT05GSUdfS1ZNX0dVRVNUYCB0aGUgbW9zdCBjcml0aWNhbCBjb25maWd1cmF0aW9uLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgYENPTkZJR19QQVJBVklSVGAgbWFrZXMgc2Vuc2UgaGVyZSBhcyB3ZWxsLCBzaW5jZSB0aGF0IGhhcyBzb21lIG92ZXJsYXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQVJBVklSVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9LY29uZmlnPTEzMDk9Y29uZmlnIFVBQ0NFU1NfV0lUSF9NRU1DUFlcbi0tXG5hcmNoL2FybS9LY29uZmlnLTEzMjQtXG5hcmNoL2FybS9LY29uZmlnOjEzMjU6Y29uZmlnIFBBUkFWSVJUXG5hcmNoL2FybS9LY29uZmlnLTEzMjYtXHRib29sIFwmIzM0O0VuYWJsZSBwYXJhdmlydHVhbGl6YXRpb24gY29kZVwmIzM0O1xuLS1cbmFyY2gvYXJtL0tjb25maWctMTMzMi1cbmFyY2gvYXJtL0tjb25maWc6MTMzMzpjb25maWcgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HXG5hcmNoL2FybS9LY29uZmlnLTEzMzQtXHRib29sIFwmIzM0O1BhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1wmIzM0O1xuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0xNjE1PWNvbmZpZyBDQ19IQVZFX1NIQURPV19DQUxMX1NUQUNLXG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTE2MTctXG5hcmNoL2FybTY0L0tjb25maWc6MTYxODpjb25maWcgUEFSQVZJUlRcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNjE5LVx0Ym9vbCBcJiMzNDtFbmFibGUgcGFyYXZpcnR1YWxpemF0aW9uIGNvZGVcJiMzNDtcbi0tXG5hcmNoL2FybTY0L0tjb25maWctMTYyNS1cbmFyY2gvYXJtNjQvS2NvbmZpZzoxNjI2OmNvbmZpZyBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNjI3LVx0Ym9vbCBcJiMzNDtQYXJhdmlydHVhbCBzdGVhbCB0aW1lIGFjY291bnRpbmdcJiMzNDtcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnPTc0Mz1zb3VyY2UgXCYjMzQ7a2VybmVsL2xpdmVwYXRjaC9LY29uZmlnXCYjMzQ7XG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTc0NC1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6NzQ1OmNvbmZpZyBQQVJBVklSVFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy03NDYtXHRib29sIFwmIzM0O0VuYWJsZSBwYXJhdmlydHVhbGl6YXRpb24gY29kZVwmIzM0O1xuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNzU0LVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo3NTU6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy03NTYtXHRib29sIFwmIzM0O1BhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1wmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnPTI9Y29uZmlnIFBQQ19QU0VSSUVTXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWctMjktXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZzozMDpjb25maWcgUEFSQVZJUlRcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnLTMxLVx0Ym9vbFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWctMzItXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZzozMzpjb25maWcgUEFSQVZJUlRfU1BJTkxPQ0tTXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZy0zNC1cdGJvb2xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnLTM1LVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWc6MzY6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWctMzctXHRzZWxlY3QgUEFSQVZJUlRcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTExND1jb25maWcgQ09NUEFUXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTExMjUtXG5hcmNoL3Jpc2N2L0tjb25maWc6MTEyNjpjb25maWcgUEFSQVZJUlRcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMTI3LVx0Ym9vbCBcJiMzNDtFbmFibGUgcGFyYXZpcnR1YWxpemF0aW9uIGNvZGVcJiMzNDtcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWctMTEzNC1cbmFyY2gvcmlzY3YvS2NvbmZpZzoxMTM1OmNvbmZpZyBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMTM2LVx0Ym9vbCBcJiMzNDtQYXJhdmlydHVhbCBzdGVhbCB0aW1lIGFjY291bnRpbmdcJiMzNDtcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTc5Mz1pZiBIWVBFUlZJU09SX0dVRVNUXG5hcmNoL3g4Ni9LY29uZmlnLTc5NC1cbmFyY2gveDg2L0tjb25maWc6Nzk1OmNvbmZpZyBQQVJBVklSVFxuYXJjaC94ODYvS2NvbmZpZy03OTYtXHRib29sIFwmIzM0O0VuYWJsZSBwYXJhdmlydHVhbGl6YXRpb24gY29kZVwmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWctODA0LVxuYXJjaC94ODYvS2NvbmZpZzo4MDU6Y29uZmlnIFBBUkFWSVJUX1hYTFxuYXJjaC94ODYvS2NvbmZpZy04MDYtXHRib29sXG4tLVxuYXJjaC94ODYvS2NvbmZpZy04MDktXG5hcmNoL3g4Ni9LY29uZmlnOjgxMDpjb25maWcgUEFSQVZJUlRfU1BJTkxPQ0tTXG5hcmNoL3g4Ni9LY29uZmlnLTgxMS1cdGJvb2wgXCYjMzQ7UGFyYXZpcnR1YWxpemF0aW9uIGxheWVyIGZvciBzcGlubG9ja3NcJiMzNDtcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTg0OD1jb25maWcgUFZIXG4tLVxuYXJjaC94ODYvS2NvbmZpZy04NTMtXG5hcmNoL3g4Ni9LY29uZmlnOjg1NDpjb25maWcgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HXG5hcmNoL3g4Ni9LY29uZmlnLTg1NS1cdGJvb2wgXCYjMzQ7UGFyYXZpcnR1YWwgc3RlYWwgdGltZSBhY2NvdW50aW5nXCYjMzQ7XG4tLVxuYXJjaC94ODYvS2NvbmZpZy04NjQtXG5hcmNoL3g4Ni9LY29uZmlnOjg2NTpjb25maWcgUEFSQVZJUlRfQ0xPQ0tcbmFyY2gveDg2L0tjb25maWctODY2LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjc0OAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDMyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVFNDIENhbGlicmF0aW9uIENoYW5nZXMgZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIGBDT05GSUdfUEFSQVZJUlRgIGxvb2tzIHByb21pc2luZyBhcyBhIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiBgYXJjaC94ODYva2VybmVsL3RzYy5jYC4gU3BlY2lmaWNhbGx5LCBgbmF0aXZlX2NhbGlicmF0ZV90c2NgIGlzIG5vdyBsZXZlcmFnaW5nIGBjcHVpZF9nZXRfdHNjX2luZm9gLCB3aGljaCBpcyBhIGJyYW5kLW5ldyBmdW5jdGlvbi4gSW50ZXJlc3RpbmcuIEFkZGl0aW9uYWxseSwgSSBzZWUgdGhhdCBgdHNjX2Vhcmx5X2luaXRgIGhhcyBiZWVuIG1vZGlmaWVkIGFuZCBgX19wYXJhdmlydF9zZXRfc2NoZWRfY2xvY2tgIGhhcyBiZWVuIGludHJvZHVjZWQsIGFsb25nc2lkZSBzb21lIGNoYW5nZXMgdG8gYGRldGVybWluZV9jcHVfdHNjX2ZyZXF1ZW5jaWVzYC4KClRoZSBrZXkgcXVlc3Rpb24gaXMsIGNhbiBJIGZ1enogYGNwdWlkX2dldF90c2NfaW5mb2Agd2l0aCBzeXprYWxsZXI/IFRoZSBpbml0aWFsIHRob3VnaHQgaXMgbm8sIGFzIGl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgZWFybHkgYm9vdC4gSG93ZXZlciwgdGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgdGltZWtlZXBpbmdfcmVzdW1lYCBhbmQgYGt2bWNsb2NrX2NwdV9hY3Rpb25gLCB3aGljaCBhcmUgY2xlYXJseSByZWFjaGFibGUgZHVyaW5nIHN1c3BlbmQvcmVzdW1lIGN5Y2xlcyBhbmQgQ1BVIGhvdHBsdWcgZXZlbnRzLiBUaGF0IGNoYW5nZXMgdGhpbmdzOyBzeXprYWxsZXIgKmNhbiogbGlrZWx5IHRyaWdnZXIgdGhlc2UgbGF0ZXIgc3RhZ2VzLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgcGF0aHdheSB0byBleHBsb2l0LgoKVGhlcmVmb3JlLCBJIG5lZWQgdG8gaWRlbnRpZnkga2V5IHN5bWJvbHMgZm9yIGZvY3VzZWQgZnV6emluZy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzb2xpZCBsaXN0OiBga3ZtY2xvY2tfY3B1X2FjdGlvbmAsIGBrdm1fc3VzcGVuZGAsIGBrdm1fcmVzdW1lYCwgYW5kIGB0aW1la2VlcGluZ19yZXN1bWVgLiBXZSBjYW4gYWRkIGBrdm1fY3B1X29ubGluZWAgYW5kIGBrdm1fY3B1X2Rvd25fcHJlcGFyZWAgdG8gdGhlIGxpc3QuIEkmIzM5O20gYSBsaXR0bGUgaGVzaXRhbnQgYWJvdXQgaW5jbHVkaW5nIGBfX3BhcmF2aXJ0X3NldF9zY2hlZF9jbG9ja2AgYmVjYXVzZSBpdCYjMzk7cyBtYXJrZWQgYXMgYF9faW5pdGAsIHdoaWNoIG1pZ2h0IG1ha2UgaXQgaGFyZGVyIHRvIHRhcmdldC4gTm93LCBJIHdhbnQgdG8gc2VlIGlmIGB0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAgYW5kIGB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZWAgYXJlIHJlYWNoYWJsZSwgYXMgdGhlc2UgYXJlIHBvdGVudGlhbGx5IGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vdHNjLmg9MTEyPWV4dGVybiBpbnQgbm90c2Nfc2V0dXAoY2hhciAqKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RzYy5oOjExMzpleHRlcm4gdm9pZCB0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RzYy5oLTExNC1leHRlcm4gdm9pZCB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvdHNjLmM9OTYxPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB0c2NfaXNfc2F2ZV9yZXN0b3JlX25lZWRlZCh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC90c2MuYy05NjgtXG5hcmNoL3g4Ni9rZXJuZWwvdHNjLmM6OTY5OnZvaWQgdHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcbmFyY2gveDg2L2tlcm5lbC90c2MuYy05NzAte1xuLS1cbmFyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jPTE0OT1zdHJ1Y3QgeDg2X3BsYXRmb3JtX29wcyB4ODZfcGxhdGZvcm0gX19yb19hZnRlcl9pbml0ID0ge1xuLS1cbmFyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jLTE1NS1cdC5nZXRfbm1pX3JlYXNvblx0XHRcdD0gZGVmYXVsdF9nZXRfbm1pX3JlYXNvbixcbmFyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jOjE1NjpcdC5zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlXHRcdD0gdHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUsXG5hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYy0xNTctXHQucmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZVx0PSB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM4NjkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVzZSBvZiBgc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAgYW5kIGByZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYCoqCgpPa2F5LCBzbyBJIHNlZSB0aGVzZSBmdW5jdGlvbnMsIGB4ODZfcGxhdGZvcm0uc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAgYW5kIGByZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYCwgYXJlIGRlZmluaXRlbHkgYmVpbmcgdXNlZC4gVGhlIGNvbnRleHQgdGVsbHMgbWUgdGhleSBhcmUgbGlua2VkIHRvIHN1c3BlbmQgYW5kIHJlc3VtZSBvcGVyYXRpb25zLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBJIHN1c3BlY3RlZCB0aGV5JiMzOTtkIGJlIHRpZWQgdG8gcG93ZXIgbWFuYWdlbWVudCBpbiBzb21lIHdheS4KCk5vdywgSSByZWFsbHkgbmVlZCB0byBkcmlsbCBkb3duIGFuZCB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBjYWxsaW5nIGNvbnRleHQuIE15IG5leHQgc3RlcCBpcyB0byBwaW5wb2ludCB0aGUgZXhhY3QgbG9jYXRpb25zIHdoZXJlIGB4ODZfcGxhdGZvcm0uc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAgaXMgaW52b2tlZC4gVGhpcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBpbnNpZ2h0cyBpbnRvIGhvdyB0aGUgc2NoZWR1bGVyIGNsb2NrIHN0YXRlIGlzIGJlaW5nIG1hbmFnZWQgZHVyaW5nIHN5c3RlbSB0cmFuc2l0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGtleSB0byBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHksIGVzcGVjaWFsbHkgb24geDg2IHBsYXRmb3Jtcy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZXhlY3V0aW9uIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vdHNjLmg9MTEyPWV4dGVybiBpbnQgbm90c2Nfc2V0dXAoY2hhciAqKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RzYy5oOjExMzpleHRlcm4gdm9pZCB0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RzYy5oLTExNC1leHRlcm4gdm9pZCB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oPTI4OT1zdHJ1Y3QgeDg2X2h5cGVyX3J1bnRpbWUge1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgtMzAzLSAqIEBnZXRfbm1pX3JlYXNvbjpcdFx0Z2V0IHRoZSByZWFzb24gYW4gTk1JIHdhcyByZWNlaXZlZFxuYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaDozMDQ6ICogQHNhdmVfc2NoZWRfY2xvY2tfc3RhdGU6XHRzYXZlIHN0YXRlIGZvciBzY2hlZF9jbG9jaygpIG9uIHN1c3BlbmRcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgtMzA1LSAqIEByZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlOlx0cmVzdG9yZSBzdGF0ZSBmb3Igc2NoZWRfY2xvY2soKSBvbiByZXN1bWVcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oPTMyMD1zdHJ1Y3QgeDg2X3BsYXRmb3JtX29wcyB7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaC0zMjYtXHR1bnNpZ25lZCBjaGFyICgqZ2V0X25taV9yZWFzb24pKHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaDozMjc6XHR2b2lkICgqc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSkodm9pZCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oLTMyOC1cdHZvaWQgKCpyZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKSh2b2lkKTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYz0xMzI9c3RhdGljIG5vaW5zdHIgdTY0IGt2bV9zY2hlZF9jbG9ja19yZWFkKHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtMTM2LVxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM6MTM3OnN0YXRpYyB2b2lkIGt2bV9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy0xMzgte1xuLS1cbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jPTM1ND1zdGF0aWMgX19pbml0IHZvaWQga3ZtX3NjaGVkX2Nsb2NrX2luaXQoYm9vbCBzdGFibGUpXG4tLVxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtMzU5LVx0aWYgKF9fcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKGt2bV9zY2hlZF9jbG9ja19yZWFkLCBzdGFibGUsXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzozNjA6XHRcdFx0XHQgICAgICAga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUsXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy0zNjEtXHRcdFx0XHQgICAgICAga3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUpKVxuLS1cbmFyY2gveDg2L2tlcm5lbC90c2MuYz0yODM9aW50IF9faW5pdCBfX3BhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh1NjQgKCpmdW5jKSh2b2lkKSwgYm9vbCBzdGFibGUsXG4tLVxuYXJjaC94ODYva2VybmVsL3RzYy5jLTI5OC1cdHN0YXRpY19jYWxsX3VwZGF0ZShwdl9zY2hlZF9jbG9jaywgZnVuYyk7XG5hcmNoL3g4Ni9rZXJuZWwvdHNjLmM6Mjk5Olx0eDg2X3BsYXRmb3JtLnNhdmVfc2NoZWRfY2xvY2tfc3RhdGUgPSBzYXZlO1xuYXJjaC94ODYva2VybmVsL3RzYy5jLTMwMC1cdHg4Nl9wbGF0Zm9ybS5yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlID0gcmVzdG9yZTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvdHNjLmM9OTYxPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB0c2NfaXNfc2F2ZV9yZXN0b3JlX25lZWRlZCh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC90c2MuYy05NjgtXG5hcmNoL3g4Ni9rZXJuZWwvdHNjLmM6OTY5OnZvaWQgdHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcbmFyY2gveDg2L2tlcm5lbC90c2MuYy05NzAte1xuLS1cbmFyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jPTE0OT1zdHJ1Y3QgeDg2X3BsYXRmb3JtX29wcyB4ODZfcGxhdGZvcm0gX19yb19hZnRlcl9pbml0ID0ge1xuLS1cbmFyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jLTE1NS1cdC5nZXRfbm1pX3JlYXNvblx0XHRcdD0gZGVmYXVsdF9nZXRfbm1pX3JlYXNvbixcbmFyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jOjE1NjpcdC5zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlXHRcdD0gdHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUsXG5hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYy0xNTctXHQucmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZVx0PSB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSxcbi0tXG5hcmNoL3g4Ni9wb3dlci9jcHUuYz0xMzU9dm9pZCBzYXZlX3Byb2Nlc3Nvcl9zdGF0ZSh2b2lkKVxuLS1cbmFyY2gveDg2L3Bvd2VyL2NwdS5jLTEzNy1cdF9fc2F2ZV9wcm9jZXNzb3Jfc3RhdGUoXHUwMDI2c2F2ZWRfY29udGV4dCk7XG5hcmNoL3g4Ni9wb3dlci9jcHUuYzoxMzg6XHR4ODZfcGxhdGZvcm0uc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSgpO1xuYXJjaC94ODYvcG93ZXIvY3B1LmMtMTM5LX1cbi0tXG5kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jPTU0Nj1zdGF0aWMgdTY0IGh2X3JlZl9jb3VudGVyX2F0X3N1c3BlbmQ7XG4tLVxuZHJpdmVycy9jbG9ja3NvdXJjZS9oeXBlcnZfdGltZXIuYy01NTMtICovXG5kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jOjU1NDpzdGF0aWMgdm9pZCBodl9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXG5kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jLTU1NS17XG4tLVxuZHJpdmVycy9jbG9ja3NvdXJjZS9oeXBlcnZfdGltZXIuYz01NzA9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGh2X3NldHVwX3NjaGVkX2Nsb2NrKHZvaWQgKnNjaGVkX2Nsb2NrKVxuLS1cbmRyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmMtNTcyLVx0LyogV2UmIzM5O3JlIG9uIHg4Ni94NjQgKmFuZCogdXNpbmcgUFYgb3BzICovXG5kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jOjU3MzpcdHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayhzY2hlZF9jbG9jaywgaHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSxcbmRyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmMtNTc0LVx0XHRcdFx0IGh2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTU5MgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDIxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEtWTSBDbG9jayBJc3N1ZXMgRHVyaW5nIFN1c3BlbmQvUmVzdW1lKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoaXMgeDg2IHN1c3BlbmQvcmVzdW1lIHBhdGguIE15IHRob3VnaHQgcHJvY2VzcyBpcyBjZW50ZXJlZCBvbiB3aGVyZSBwb3RlbnRpYWwgS1ZNIGNsb2NrIGlzc3VlcyBtaWdodCBhcmlzZS4gSSBzZWUgdGhhdCBgeDg2X3BsYXRmb3JtLnNhdmVfc2NoZWRfY2xvY2tfc3RhdGUoKWAgaXMgY2FsbGVkIGZyb20gYHNhdmVfcHJvY2Vzc29yX3N0YXRlKClgIHdpdGhpbiBgYXJjaC94ODYvcG93ZXIvY3B1LmNgLiBHaXZlbiB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcGFydCBvZiBgc2F2ZV9wcm9jZXNzb3Jfc3RhdGVgLCBhbmQgdGhhdCBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSB4ODYgcG93ZXIgbWFuYWdlbWVudCwgdGhhdCBjYWxsICppcyogZGVmaW5pdGVseSBwYXJ0IG9mIHRoZSBzdXNwZW5kIHByb2Nlc3MuCgpOb3csIEkmIzM5O20gZ29pbmcgYmFjayBvdmVyIGBrdm1jbG9ja19jcHVfYWN0aW9uYC4gUmlnaHQsIGl0JiMzOTtzIGNhbGxlZCBieSBga3ZtX2d1ZXN0X2NwdV9vZmZsaW5lYCBhbmQgYF9fa3ZtX2NwdV9vbmxpbmVgLiBMb29raW5nIGF0IHRob3NlIGZ1bmN0aW9ucywgdGhleSBhcmUgY2FsbGVkIGZyb20gYGt2bV9jcHVfZG93bl9wcmVwYXJlYCwgYGt2bV9zdXNwZW5kYCwgYGt2bV9yZXN1bWVgLCBga3ZtX3B2X2d1ZXN0X2NwdV9yZWJvb3RgLCBga3ZtX2NyYXNoX3NodXRkb3duYCwgYW5kIGBrdm1fY3B1X29ubGluZWAuIFNvLCB0aGUgcGF0aCAqaXMqIHJlYWNoYWJsZSBkdXJpbmcgdGhpcyBwcm9jZXNzLCBtYWtpbmcgdGhpcyBhbiBpbnRlcmVzdGluZyBwb2ludCB0byBhbmFseXplLgoKSSYjMzk7bSBhbHNvIGxvb2tpbmcgYXQgYHRpbWVrZWVwaW5nX3Jlc3VtZWAuIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBmcm9tIGB0aW1la2VlcGluZ19zeXNjb3JlX3Jlc3VtZWAgYW5kIGB0aWNrX3VuZnJlZXplYC4gQm90aCBhcmUgcHJldHR5IHN0YW5kYXJkIHBhcnRzIG9mIGEgcmVzdW1lIGN5Y2xlLCBzbyB0aGUgcGF0aCB0aHJvdWdoIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSByZWFjaGFibGUuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBhY3R1YWwgYGt2bWNsb2NrX3N1c3BlbmRgIGFuZCBga3ZtY2xvY2tfcmVzdW1lYCBmdW5jdGlvbnMsIHRvIGNoZWNrIG9uIHRoZSBkZXRhaWxzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1jbG9ja19zdXNwZW5kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jPTU0PUVYUE9SVF9QRVJfQ1BVX1NZTUJPTF9HUEwoaHZfY2xvY2tfcGVyX2NwdSk7XG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy01NS1cbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jOjU2OnN0YXRpYyBib29sIGt2bWNsb2NrX3N1c3BlbmRlZDtcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTU3LVxuLS1cbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jPTYzPXN0YXRpYyB2b2lkIGt2bV9nZXRfd2FsbGNsb2NrKHN0cnVjdCB0aW1lc3BlYzY0ICpub3cpXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy02NC17XG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzo2NTpcdFdBUk5fT05fT05DRShrdm1jbG9ja19zdXNwZW5kZWQpO1xuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtNjYtXHR3cm1zcnEobXNyX2t2bV93YWxsX2Nsb2NrLCBzbG93X3ZpcnRfdG9fcGh5cyhcdTAwMjZ3YWxsX2Nsb2NrKSk7XG4tLVxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM9MTM3PXN0YXRpYyB2b2lkIGt2bV9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtMTQ1LVx0ICovXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzoxNDY6XHRrdm1jbG9ja19zdXNwZW5kZWQgPSB0cnVlO1xuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtMTQ3LVx0a3ZtY2xvY2tfZGlzYWJsZSgpO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jPTE1Nz1zdGF0aWMgdm9pZCBrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtMTU4LXtcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jOjE1OTpcdGt2bWNsb2NrX3N1c3BlbmRlZCA9IGZhbHNlO1xuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtMTYwLVx0a3ZtX3JlZ2lzdGVyX2Nsb2NrKFwmIzM0O3ByaW1hcnkgY3B1LCBzY2hlZF9jbG9jayByZXN1bWVcJiMzNDspO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTE2Mi1cbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jOjE2MzpzdGF0aWMgdm9pZCBrdm1jbG9ja19zdXNwZW5kKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy0xNjQte1xuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM6MTY1Olx0a3ZtY2xvY2tfc3VzcGVuZGVkID0gdHJ1ZTtcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTE2Ni1cdGt2bWNsb2NrX2Rpc2FibGUoKTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYz0xNjk9c3RhdGljIHZvaWQga3ZtY2xvY2tfcmVzdW1lKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy0xNzAte1xuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM6MTcxOlx0a3ZtY2xvY2tfc3VzcGVuZGVkID0gZmFsc2U7XG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy0xNzItXHRrdm1fcmVnaXN0ZXJfY2xvY2soXCYjMzQ7cHJpbWFyeSBjcHUsIGNsb2Nrc291cmNlIHJlc3VtZVwmIzM0Oyk7XG4tLVxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM9MjU1PXN0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2Uga3ZtX2Nsb2NrID0ge1xuLS1cbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTI2My1cdC5lbmFibGVcdFx0PSBrdm1fY3NfZW5hYmxlLFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM6MjY0Olx0LnN1c3BlbmRcdD0ga3ZtY2xvY2tfc3VzcGVuZCxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTI2NS1cdC5yZXN1bWVcdFx0PSBrdm1jbG9ja19yZXN1bWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MDE4CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogODk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEtWTSBDbG9jayBTb3VyY2UgU3VzcGVuZC9SZXN1bWUgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGl0JiMzOTtzIGNsZWFyIHRoYXQgYGt2bWNsb2NrX3N1c3BlbmRgIGFuZCBga3ZtY2xvY2tfcmVzdW1lYCBhcmUgaW5kZWVkIGNhbGxiYWNrcyBmb3IgdGhlIGNsb2Nrc291cmNlIHN1c3BlbmQvcmVzdW1lIHByb2Nlc3MsIG1lYW5pbmcgdGhleSYjMzk7cmUgZXhlY3V0ZWQgZHVyaW5nIHRoZXNlIGNyaXRpY2FsIHN5c3RlbSB0cmFuc2l0aW9ucy4gVGhhdCYjMzk7cyBnb29kOyBpdCBtZWFucyB3ZSBjYW4gcG90ZW50aWFsbHkgZnV6eiB0aGVtLgoKVGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZTogYGt2bWNsb2NrX2NwdV9hY3Rpb25gLCBga3ZtY2xvY2tfc3VzcGVuZGAsIGBrdm1jbG9ja19yZXN1bWVgLCBgdGltZWtlZXBpbmdfcmVzdW1lYCwgYHRzY19zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYCwgYHRzY19yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYCwgYGt2bV9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYCwgYW5kIGBrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZWAuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVgIGFuZCBga3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVgIGFyZSBzdGF0aWMuIEFoLCB5ZXMsIHRoZXkgYXJlLCBmb3VuZCBpbiBgYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmNgLiBTaW5jZSB0aGV5JiMzOTtyZSByZWFjaGFibGUgYW5kIHN0YXRpYywgU3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IHRhcmdldCB0aGVtIGVmZmVjdGl2ZWx5LgoKTm93LCBsZXQmIzM5O3Mgc2VlIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gV2UgbmVlZCBgQ09ORklHX0tWTV9HVUVTVGAsIGBDT05GSUdfU1VTUEVORGAsIGBDT05GSUdfSElCRVJOQVRJT05gLCBgQ09ORklHX0hPVFBMVUdfQ1BVYCwgYW5kIGBDT05GSUdfUEFSQVZJUlRgLgoKYENPTkZJR19TVVNQRU5EYCwgYENPTkZJR19ISUJFUk5BVElPTmAsIGFuZCBgQ09ORklHX0hPVFBMVUdfQ1BVYCBhcmUgcHJldHR5IHN0YW5kYXJkIGNvbmZpZ3VyYXRpb25zLCB0aG91Z2guIEJhc2VkIG9uIHRoZSBpbnN0cnVjdGlvbnMsIEkgc2hvdWxkIHByb2JhYmx5IG9ubHkgbGlzdCBjb25maWdzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBtb2RpZmllZCBjb2RlLgoKU28sIGxldCYjMzk7cyBjaGVjayB3aGF0JiMzOTtzIGFjdHVhbGx5IGJlZW4gbW9kaWZpZWQuIGB0aW1la2VlcGluZ19yZXN1bWVgIGlzIG1vZGlmaWVkOyBpdCBub3cgY2FsbHMgYHJlYWRfcGVyc2lzdGVudF9jbG9jazY0YCBhZnRlciBgY2xvY2tldmVudHNfcmVzdW1lYCBhbmQgYGNsb2Nrc291cmNlX3Jlc3VtZWAuIEdvb2QuCgpga3ZtY2xvY2tfY3B1X2FjdGlvbmAgaGFzIGJlZW4gYWRkZWQsIGFuZCBpdCBoYW5kbGVzIGNydWNpYWwgc3RhdGVzOiBgS1ZNX0dVRVNUX0JTUF9TVVNQRU5EYCwgYEtWTV9HVUVTVF9CU1BfUkVTVU1FYCwgYEtWTV9HVUVTVF9BUF9PTkxJTkVgLCBgS1ZNX0dVRVNUX0FQX09GRkxJTkVgLCBhbmQgYEtWTV9HVUVTVF9TSFVURE9XTmAuCgpZZXAsIGBrdm1jbG9ja19zdXNwZW5kYCBhbmQgYGt2bWNsb2NrX3Jlc3VtZWAgYXJlIGRlZmluaXRlbHkgbmV3IGFkZGl0aW9ucyBhcyB3ZWxsLgoKQW5kIGZpbmFsbHksIGB0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAgYW5kIGB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZWAgYXJlIG1vZGlmaWVkIHRvIHVzZSBgdHNjX2lzX3NhdmVfcmVzdG9yZV9uZWVkZWQoKWAuCgpUaGUgYGt2bV9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYCBhbmQgYGt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYCBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkIHRvIHNldCBga3ZtY2xvY2tfc3VzcGVuZGVkYCBhbmQgY2FsbCBga3ZtY2xvY2tfZGlzYWJsZWAgLyBga3ZtX3JlZ2lzdGVyX2Nsb2NrYC4KCkdpdmVuIGFsbCBvZiB0aGlzLCB0aGUgcGF0Y2ggZGVmaW5pdGVseSBzZWVtcyBmdW5jdGlvbmFsIGFuZCBpcyBhIHN0cm9uZyBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpUaGVyZWZvcmUsIHRoZSBmb2N1cyBzeW1ib2xzIGFyZToKYGt2bWNsb2NrX2NwdV9hY3Rpb25gCmBrdm1jbG9ja19zdXNwZW5kYApga3ZtY2xvY2tfcmVzdW1lYApgdGltZWtlZXBpbmdfcmVzdW1lYApgdHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVgCmB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZWAKYGt2bV9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYApga3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVgCgpBbmQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIChzcGVjaWZpYyB0byB0aGUgbW9kaWZpZWQgY29kZSkgYXJlOgpgS1ZNX0dVRVNUYApgUEFSQVZJUlRgCgpJIHNob3VsZCBkb3VibGUtY2hlY2sgYWJvdXQgYENPTkZJR19IWVBFUlZgIG9yIGBDT05GSUdfSFlQRVJWX1RJTUVSYCwganVzdCBpbiBjYXNlLCBnaXZlbiB0aGUgbWVudGlvbiBvZiBIeXBlci1WLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFlQRVJWJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9NzcxPWNvbmZpZyBTQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVJcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTc4Mi1cbmFyY2gveDg2L0tjb25maWc6NzgzOm1lbnVjb25maWcgSFlQRVJWSVNPUl9HVUVTVFxuYXJjaC94ODYvS2NvbmZpZy03ODQtXHRib29sIFwmIzM0O0xpbnV4IGd1ZXN0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2h2L0tjb25maWc9Mz1tZW51IFwmIzM0O01pY3Jvc29mdCBIeXBlci1WIGd1ZXN0IHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvaHYvS2NvbmZpZy00LVxuZHJpdmVycy9odi9LY29uZmlnOjU6Y29uZmlnIEhZUEVSVlxuZHJpdmVycy9odi9LY29uZmlnLTYtXHRib29sIFwmIzM0O01pY3Jvc29mdCBIeXBlci1WIGNvcmUgaHlwZXJ2aXNvciBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9odi9LY29uZmlnLTE2LVxuZHJpdmVycy9odi9LY29uZmlnOjE3OmNvbmZpZyBIWVBFUlZfVlRMX01PREVcbmRyaXZlcnMvaHYvS2NvbmZpZy0xOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIExpbnV4IHRvIGJvb3QgaW4gVlRMIGNvbnRleHRcJiMzNDtcbi0tXG5kcml2ZXJzL2h2L0tjb25maWctNDItXG5kcml2ZXJzL2h2L0tjb25maWc6NDM6Y29uZmlnIEhZUEVSVl9USU1FUlxuZHJpdmVycy9odi9LY29uZmlnLTQ0LVx0ZGVmX2Jvb2wgSFlQRVJWIFx1MDAyNlx1MDAyNiBYODZcbmRyaXZlcnMvaHYvS2NvbmZpZy00NS1cbmRyaXZlcnMvaHYvS2NvbmZpZzo0Njpjb25maWcgSFlQRVJWX1VUSUxTXG5kcml2ZXJzL2h2L0tjb25maWctNDctXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgSHlwZXItViBVdGlsaXRpZXMgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9odi9LY29uZmlnLTUyLVxuZHJpdmVycy9odi9LY29uZmlnOjUzOmNvbmZpZyBIWVBFUlZfQkFMTE9PTlxuZHJpdmVycy9odi9LY29uZmlnLTU0LVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9zb2Z0IEh5cGVyLVYgQmFsbG9vbiBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2h2L0tjb25maWctNTktXG5kcml2ZXJzL2h2L0tjb25maWc6NjA6Y29uZmlnIEhZUEVSVl9WTUJVU1xuZHJpdmVycy9odi9LY29uZmlnLTYxLVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9zb2Z0IEh5cGVyLVYgVk1CdXMgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTI0ND1jb25maWcgU0VSSU9fT0xQQ19BUFNQXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI1My1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoyNTQ6Y29uZmlnIEhZUEVSVl9LRVlCT0FSRFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI1NS1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc29mdCBTeW50aGV0aWMgS2V5Ym9hcmQgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnOjI6Y29uZmlnIEhZUEVSVl9ORVRcbmRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgSHlwZXItViB2aXJ0dWFsIG5ldHdvcmsgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9zY3NpL0tjb25maWc9NTc3PWNvbmZpZyBYRU5fU0NTSV9GUk9OVEVORFxuLS1cbmRyaXZlcnMvc2NzaS9LY29uZmlnLTU4Ni1cbmRyaXZlcnMvc2NzaS9LY29uZmlnOjU4Nzpjb25maWcgSFlQRVJWX1NUT1JBR0VcbmRyaXZlcnMvc2NzaS9LY29uZmlnLTU4OC1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc29mdCBIeXBlci1WIHZpcnR1YWwgc3RvcmFnZSBkcml2ZXJcJiMzNDtcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zz0zNTQyPWNvbmZpZyBNRU1URVNUXG4tLVxubGliL0tjb25maWcuZGVidWctMzU1NS1cbmxpYi9LY29uZmlnLmRlYnVnOjM1NTY6Y29uZmlnIEhZUEVSVl9URVNUSU5HXG5saWIvS2NvbmZpZy5kZWJ1Zy0zNTU3LVx0Ym9vbCBcJiMzNDtNaWNyb3NvZnQgSHlwZXItViBkcml2ZXIgdGVzdGluZ1wmIzM0O1xuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZz02Nj1jb25maWcgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZy03Mi1cbm5ldC92bXdfdnNvY2svS2NvbmZpZzo3Mzpjb25maWcgSFlQRVJWX1ZTT0NLRVRTXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNzQtXHR0cmlzdGF0ZSBcJiMzNDtIeXBlci1WIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NTYzCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkh5cGVyLVYgQ29uZmlndXJhdGlvbiBSZXZpZXcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIEh5cGVyLVYgY2hhbmdlcywgYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgYEhZUEVSVmAgYW5kIGBIWVBFUlZfVElNRVJgIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHRvIGJlIGNvbmNlcm5lZCB3aXRoLiBJJiMzOTtsbCBkZWZpbml0ZWx5IGFkZCBgSFlQRVJWYCB0byB0aGUgcmVsZXZhbnQgY29uZmlnIGZpbGVzIHJpZ2h0IGF3YXkuCgpOb3csIHdoYXQgYWJvdXQgVk13YXJlIHN1cHBvcnQ/IExldCBtZSB0aGluay4uLiBgQ09ORklHX1ZNV0FSRV9CQUxMT09OYCBzZWVtcyBmYW1pbGlhciwgYnV0IHRoYXQmIzM5O3MgcHJvYmFibHkgbm90IHRoZSBtYWluIGRyaXZlciB0aGVzZSBkYXlzLiBBaCwgcmlnaHQsIGBDT05GSUdfSFlQRVJWSVNPUl9HVUVTVGAgc2hvdWxkIGNvdmVyIHRoYXQsIGdlbmVyYWxseS4gV2FpdCBhIG1pbnV0ZeKApiB3YXNu4oCZdCBgQ09ORklHX0hZUEVSVklTT1JfR1VFU1RgIHNwZWNpZmljIHRvIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIHdpdGhpbiB0aGUgbWVudWNvbmZpZz8gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgdG8gYmUgY2VydGFpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIG1vcmUgc3BlY2lmaWMgY29uZmlnIGZvciBWTXdhcmUgZ3Vlc3QuIEJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdmlydHVhbGl6YXRpb24gbGF5ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVk1XQVJFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWlzYy9LY29uZmlnPTM5MT1jb25maWcgRFMxNjgyXG4tLVxuZHJpdmVycy9taXNjL0tjb25maWctNDAwLVxuZHJpdmVycy9taXNjL0tjb25maWc6NDAxOmNvbmZpZyBWTVdBUkVfQkFMTE9PTlxuZHJpdmVycy9taXNjL0tjb25maWctNDAyLVx0dHJpc3RhdGUgXCYjMzQ7Vk13YXJlIEJhbGxvb24gRHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9taXNjL3Ztd192bWNpL0tjb25maWctNS1cbmRyaXZlcnMvbWlzYy92bXdfdm1jaS9LY29uZmlnOjY6Y29uZmlnIFZNV0FSRV9WTUNJXG5kcml2ZXJzL21pc2Mvdm13X3ZtY2kvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7Vk13YXJlIFZNQ0kgRHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9zY3NpL0tjb25maWc9NTUzPWNvbmZpZyBTQ1NJX01ZUlNcbi0tXG5kcml2ZXJzL3Njc2kvS2NvbmZpZy01NjgtXG5kcml2ZXJzL3Njc2kvS2NvbmZpZzo1Njk6Y29uZmlnIFZNV0FSRV9QVlNDU0lcbmRyaXZlcnMvc2NzaS9LY29uZmlnLTU3MC1cdHRyaXN0YXRlIFwmIzM0O1ZNd2FyZSBQVlNDU0kgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWc9Mjk9Y29uZmlnIFZTT0NLRVRTX0xPT1BCQUNLXG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTQwLVxubmV0L3Ztd192c29jay9LY29uZmlnOjQxOmNvbmZpZyBWTVdBUkVfVk1DSV9WU09DS0VUU1xubmV0L3Ztd192c29jay9LY29uZmlnLTQyLVx0dHJpc3RhdGUgXCYjMzQ7Vk13YXJlIFZNQ0kgdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAyMTIKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKlZNd2FyZSBHdWVzdCBDb3JlIFN1cHBvcnQg4oCTIEEgUXVpY2sgTWVudGFsIFNjYW4qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoaXMgZnJvbSBhIGtlcm5lbCBwZXJzcGVjdGl2ZSwgSSBkb24mIzM5O3QgcmVjYWxsIGEgKmRlZGljYXRlZCogY29uZmlndXJhdGlvbiBvcHRpb24gc3BlY2lmaWNhbGx5IGxhYmVsZWQgJiMzNDtWTXdhcmUgZ3Vlc3QgY29yZS4mIzM0OyBJdCBzZWVtcyBsaWtlIHRoZSBhcmNoaXRlY3R1cmUgbGlrZWx5IGhhbmRsZXMgdGhpcyBpbiBvbmUgb2YgdHdvIHdheXMuIEl0JiMzOTtzIHByb2JhYmx5IGVpdGhlciBoYW5kbGVkIGJ5IHRoZSBtb3JlIGdlbmVyaWMgYENPTkZJR19IWVBFUlZJU09SX0dVRVNUYCBzZXR0aW5nLCBvciwgbW9yZSBsaWtlbHksIGl0JiMzOTtzIGp1c3QgYmFrZWQgZGlyZWN0bHkgaW50byB0aGUgeDg2IGFyY2hpdGVjdHVyZSBzdXBwb3J0IGR1ZSB0byB0aGUgcHJldmFsZW5jZSBvZiBWTXdhcmUgb24gdGhhdCBwbGF0Zm9ybS4gSXQmIzM5O3Mgb2Z0ZW4gdGhhdCB0aGVzZSB0aGluZ3MgYXJlIGFzc3VtZWQgcHJlc2VudCB1bmxlc3Mgc3BlY2lmaWNhbGx5IGV4Y2x1ZGVkLgoKTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhYm91dCBBQ1JOPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaG93IHRoYXQgaHlwZXJ2aXNvciBoYW5kbGVzIGd1ZXN0IGNvcmUgc3VwcG9ydCBhbmQgaWYgdGhlcmUmIzM5O3MgYW55IHBvdGVudGlhbCBvdmVybGFwIG9yIGNvbmZsaWN0IHdpdGggdGhlIFZNd2FyZSBlbnZpcm9ubWVudC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhvc2UgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFDUk4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz04Njg9Y29uZmlnIEpBSUxIT1VTRV9HVUVTVFxuLS1cbmFyY2gveDg2L0tjb25maWctODc2LVxuYXJjaC94ODYvS2NvbmZpZzo4Nzc6Y29uZmlnIEFDUk5fR1VFU1RcbmFyY2gveDg2L0tjb25maWctODc4LVx0Ym9vbCBcJiMzNDtBQ1JOIEd1ZXN0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3ZpcnQvYWNybi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy92aXJ0L2Fjcm4vS2NvbmZpZzoyOmNvbmZpZyBBQ1JOX0hTTVxuZHJpdmVycy92aXJ0L2Fjcm4vS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QUNSTiBIeXBlcnZpc29yIFNlcnZpY2UgTW9kdWxlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNjM3CgkJCQkJCQlvdXRwdXQ6IDI1OAoJCQkJCQkJdGhvdWdodHM6IDExMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIFRhcmdldCBMaXN0IGZvciBLVk0gQ2xvY2sgRnV6emluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGVmaW5lIHRoZSBmdXp6aW5nIHRhcmdldHMgZm9yIHRoaXMgS1ZNIGNsb2NrLXJlbGF0ZWQgcGF0Y2ggc2VyaWVzLiAgSSYjMzk7dmUgYWxyZWFkeSBpZGVudGlmaWVkIHRoYXQgYEFDUk5fR1VFU1RgIGFuZCBgSkFJTEhPVVNFX0dVRVNUYCBhcmUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZSwgc28gSSYjMzk7bGwgaW5jbHVkZSB0aGVtIGFsb25nIHdpdGggdGhlIG1vcmUgb2J2aW91cyBvbmVzOiBgS1ZNX0dVRVNUYCwgYFBBUkFWSVJUYCwgYW5kIGBIWVBFUlZgLgoKTmV4dCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgd2l0aGluIHRoaXMgcmVmYWN0b3JpbmcgdGhhdCBhcmUgYm90aCAqaW50ZXJlc3RpbmcqIGFuZCAqZnV6emFibGUqLiBJIHN0YXJ0ZWQgd2l0aCBhbiBpbml0aWFsIGxpc3Qgb2Ygc3ltYm9scyByZWxhdGVkIHRvIGNsb2NrIHN0YXRlIG1hbmFnZW1lbnQ6IGBrdm1jbG9ja19jcHVfYWN0aW9uYCwgYGt2bWNsb2NrX3N1c3BlbmRgLCBga3ZtY2xvY2tfcmVzdW1lYCwgYHRpbWVrZWVwaW5nX3Jlc3VtZWAsIGB0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGBodl9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYCwgYW5kIGBodl9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYC4gSSBhbHNvIGFkZGVkIGBrdm1fc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGBrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGBrdm1fZ3Vlc3RfY3B1X29mZmxpbmVgIGFuZCBgX19rdm1fY3B1X29ubGluZWAgdG8gdGhlIGxpc3QuIEkgYWxzbyBjb25zaWRlcmVkLCBhbmQgZGlzY2FyZGVkLCBmdW5jdGlvbnMgbGlrZSBgYXBpY19zZXRfdGltZXJfcGVyaW9kX2toemAsIGBhcGljX3NldF90aW1lcl9wZXJpb2RfaHpgLCBgY3B1aWRfZ2V0X3RzY19pbmZvYCwgYGRldGVybWluZV9jcHVfdHNjX2ZyZXF1ZW5jaWVzYCwgYW5kIGB0c2NfZWFybHlfaW5pdGAsIGJlY2F1c2UgdGhleSBhcmUgY2FsbGVkIGVhcmx5IGluIHRoZSBib290IHByb2Nlc3MgYW5kIGFyZSB0aHVzIG5vdCBlYXNpbHkgZnV6emFibGUgcG9zdC1ib290LgoKQWZ0ZXIgY2hlY2tpbmcgdGhhdCBga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVgIGlzIHRydWx5IHN0YXRpYywgYW5kIGNoZWNraW5nIHRoYXQgdGhlIG90aGVyIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IGdsb2JhbCwgdGhpcyBsaXN0IHNlZW1zIHNvbGlkLiBUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gVFNDIGFuZCBBUElDIGZyZXF1ZW5jeSBjYWxpYnJhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gd2l0aGluIHZpcnR1YWxpemVkIHg4NiBlbnZpcm9ubWVudHMsIGFuZCB0aGUgbW9kaWZpY2F0aW9ucyB0byBzY2hlZF9jbG9jayBzdGF0ZSBoYW5kbGluZyBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgYW5kIENQVSBob3RwbHVnIHdpdGhpbiBLVk0gZ3Vlc3RzIGFwcGVhciB0byBiZSB0aGUgbW9zdCBwcm9taXNpbmcgYXJlYXMgZm9yIGZ1enppbmcuCgpUbyBwcmV2ZW50IHRoZSBsaXN0IGZyb20gYmVjb21pbmcgb3Zlcmx5IGxvbmcsIEkgd2lsbCBub3cgc3RyZWFtbGluZSBpdCBkb3duIHRvIGEgbW9yZSBtYW5hZ2VhYmxlIHNldCBvZiBmdW5jdGlvbnM6IGBrdm1jbG9ja19jcHVfYWN0aW9uYCwgYHRpbWVrZWVwaW5nX3Jlc3VtZWAsIGB0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGBrdm1fc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGBrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGBodl9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYCwgYW5kIGBodl9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYC4gRWlnaHQgc3ltYm9scyBzaG91bGQgYmUgYSByZWFzb25hYmxlIG51bWJlciBmb3IgZm9jdXNlZCB0ZXN0aW5nLiBJJiMzOTttIG5vdyByZWFkeSB0byB1c2UgYHNldC1yZXN1bHRzYCB0byBpbXBsZW1lbnQgdGhpcyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9HVUVTVCYjMzQ7LAogICAgJiMzNDtQQVJBVklSVCYjMzQ7LAogICAgJiMzNDtIWVBFUlYmIzM0OywKICAgICYjMzQ7QUNSTl9HVUVTVCYjMzQ7LAogICAgJiMzNDtKQUlMSE9VU0VfR1VFU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1jbG9ja19jcHVfYWN0aW9uJiMzNDssCiAgICAmIzM0O3RpbWVrZWVwaW5nX3Jlc3VtZSYjMzQ7LAogICAgJiMzNDt0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDt0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtodl9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlJiMzNDssCiAgICAmIzM0O2h2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBUU0MgYW5kIEFQSUMgZnJlcXVlbmN5IGNhbGlicmF0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBmb3IgeDg2IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoS1ZNLCBIeXBlci1WLCBWTXdhcmUsIEFDUk4sIEphaWxob3VzZSwgVERYLCBTRVYtU05QKS4gSXQgbW9kaWZpZXMgaG93IHNjaGVkX2Nsb2NrIHN0YXRlIGlzIHNhdmVkIGFuZCByZXN0b3JlZCBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgYW5kIENQVSBob3RwbHVnLCBwYXJ0aWN1bGFybHkgZm9yIGt2bWNsb2NrIGFuZCBIeXBlci1WIGNsb2NrLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gYSBLVk0gZ3Vlc3QgKHdoaWNoIHN5emthbGxlciB1c2VzKSBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgYW5kIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9HVUVTVCYjMzQ7LAogICAgJiMzNDtQQVJBVklSVCYjMzQ7LAogICAgJiMzNDtIWVBFUlYmIzM0OywKICAgICYjMzQ7QUNSTl9HVUVTVCYjMzQ7LAogICAgJiMzNDtKQUlMSE9VU0VfR1VFU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1jbG9ja19jcHVfYWN0aW9uJiMzNDssCiAgICAmIzM0O3RpbWVrZWVwaW5nX3Jlc3VtZSYjMzQ7LAogICAgJiMzNDt0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDt0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSYjMzQ7LAogICAgJiMzNDtodl9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlJiMzNDssCiAgICAmIzM0O2h2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBUU0MgYW5kIEFQSUMgZnJlcXVlbmN5IGNhbGlicmF0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBmb3IgeDg2IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoS1ZNLCBIeXBlci1WLCBWTXdhcmUsIEFDUk4sIEphaWxob3VzZSwgVERYLCBTRVYtU05QKS4gSXQgbW9kaWZpZXMgaG93IHNjaGVkX2Nsb2NrIHN0YXRlIGlzIHNhdmVkIGFuZCByZXN0b3JlZCBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgYW5kIENQVSBob3RwbHVnLCBwYXJ0aWN1bGFybHkgZm9yIGt2bWNsb2NrIGFuZCBIeXBlci1WIGNsb2NrLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gYSBLVk0gZ3Vlc3QgKHdoaWNoIHN5emthbGxlciB1c2VzKSBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgYW5kIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMjoxMTowNi4xMTY4MjY0NTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE3MjM0MjM2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0dVRVNUXCIsXG4gICAgXCJQQVJBVklSVFwiLFxuICAgIFwiSFlQRVJWXCIsXG4gICAgXCJBQ1JOX0dVRVNUXCIsXG4gICAgXCJKQUlMSE9VU0VfR1VFU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1jbG9ja19jcHVfYWN0aW9uXCIsXG4gICAgXCJ0aW1la2VlcGluZ19yZXN1bWVcIixcbiAgICBcInRzY19zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlXCIsXG4gICAgXCJ0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZVwiLFxuICAgIFwia3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVcIixcbiAgICBcImt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlXCIsXG4gICAgXCJodl9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlXCIsXG4gICAgXCJodl9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBUU0MgYW5kIEFQSUMgZnJlcXVlbmN5IGNhbGlicmF0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBmb3IgeDg2IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoS1ZNLCBIeXBlci1WLCBWTXdhcmUsIEFDUk4sIEphaWxob3VzZSwgVERYLCBTRVYtU05QKS4gSXQgbW9kaWZpZXMgaG93IHNjaGVkX2Nsb2NrIHN0YXRlIGlzIHNhdmVkIGFuZCByZXN0b3JlZCBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgYW5kIENQVSBob3RwbHVnLCBwYXJ0aWN1bGFybHkgZm9yIGt2bWNsb2NrIGFuZCBIeXBlci1WIGNsb2NrLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gYSBLVk0gZ3Vlc3QgKHdoaWNoIHN5emthbGxlciB1c2VzKSBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgYW5kIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjExOjA2LjExNjgzMDQ1NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkwODg5MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTkyMTAyODE1NDI4NzE0Y2M3NGY1ZGQzNmU3MzFmYjNkOGE4ZjhhZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAyIDAyOjExOjA0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcXG5pbmRleCBiNTQ5M2E3ZjhmMjI4MS4uYTM4N2JiMmM0N2UyZmIgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbkBAIC03OTQ2LDYgKzc5NDYsMTEgQEAgS2VybmVsIHBhcmFtZXRlcnNcXG4gXFx0XFx0XFx0d2l0aCBDUFVJRC4xNmggc3VwcG9ydCBhbmQgcGFydGlhbCBDUFVJRC4xNWggc3VwcG9ydC5cXG4gXFx0XFx0XFx0Rm9ybWF0OiBcXHUwMDNjdW5zaWduZWQgaW50XFx1MDAzZVxcbiBcXG4rXFx0XFx0XFx0Tm90ZSwgdHNjX2Vhcmx5X2toeiBpcyBpZ25vcmVkIGlmIHRoZSBUU0MgZnJlcXVlbmN5IGlzXFxuK1xcdFxcdFxcdHByb3ZpZGVkIGJ5IHRydXN0ZWQgZmlybXdhcmUgd2hlbiBydW5uaW5nIGFzIGFuIFNOUCBvclxcbitcXHRcXHRcXHRURFggZ3Vlc3QsIG9yIHdoZW4gdGhlIGh5cGVydmlzb3IgcHJvdmlkZXMgdGhlIGV4YWN0XFxuK1xcdFxcdFxcdGZyZXF1ZW5jeSB2aWEgYSBwYXJhdmlydHVhbCBpbnRlcmZhY2UuXFxuK1xcbiBcXHR0c3g9XFx0XFx0W1g4Nl0gQ29udHJvbCBUcmFuc2FjdGlvbmFsIFN5bmNocm9uaXphdGlvblxcbiBcXHRcXHRcXHRFeHRlbnNpb25zIChUU1gpIGZlYXR1cmUgaW4gSW50ZWwgcHJvY2Vzc29ycyB0aGF0XFxuIFxcdFxcdFxcdHN1cHBvcnQgVFNYIGNvbnRyb2wuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2NwdWlkLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2NwdWlkLnJzdFxcbmluZGV4IGJkYTNlM2U3MzdkNzFmLi5hNWVlOGZmMDUyY2U1NSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9jcHVpZC5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9jcHVpZC5yc3RcXG5AQCAtMTIyLDMgKzEyMiwxNSBAQCBLVk1fSElOVFNfUkVBTFRJTUUgMCAgICAgICAgICAgIGd1ZXN0IGNoZWNrcyB0aGlzIGZlYXR1cmUgYml0IHRvXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZW1wdGVkIGZvciBhbiB1bmxpbWl0ZWQgdGltZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93aW5nIG9wdGltaXphdGlvbnNcXG4gPT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK2Z1bmN0aW9uOiBLVk1fQ1BVSURfVElNSU5HX0lORk8gKDB4NDAwMDAwMTApXFxuK1xcbityZXR1cm5zOjpcXG4rXFxuKyAgIGVheCA9IChWaXJ0dWFsKSBUU0MgZnJlcXVlbmN5IGluIGtIelxcbisgICBlYnggPSAoVmlydHVhbCkgQnVzIChsb2NhbCBBUElDIHRpbWVyKSBmcmVxdWVuY3kgaW4ga0h6XFxuKyAgIGVjeCA9IDAgKFJlc2VydmVkKVxcbisgICBlZHggPSAwIChSZXNlcnZlZClcXG4rXFxuK05vdGUsIEtWTSBvbmx5IGRlZmluZXMgdGhlIHNlbWFudGljcyBvZiBLVk1fQ1BVSURfVElNSU5HX0lORk87IEtWTSBkb2VzIE5PVFxcbithZHZlcnRpc2Ugc3VwcG9ydCB2aWEgS1ZNX0dFVF9TVVBQT1JURURfQ1BVSUQuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NvY28vc2V2L2NvcmUuYyBiL2FyY2gveDg2L2NvY28vc2V2L2NvcmUuY1xcbmluZGV4IGVjZDc3ZDMyMTdmM2MzLi43MjMxM2IzNmI2ZjVkMSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmNcXG4rKysgYi9hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmNcXG5AQCAtOTksNyArOTksNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNldl9zdGF0dXNfZmVhdF9uYW1lc1tdID0ge1xcbiAgKi9cXG4gc3RhdGljIHU2NCBzbnBfdHNjX3NjYWxlIF9fcm9fYWZ0ZXJfaW5pdDtcXG4gc3RhdGljIHU2NCBzbnBfdHNjX29mZnNldCBfX3JvX2FmdGVyX2luaXQ7XFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNucF90c2NfZnJlcV9raHogX19yb19hZnRlcl9pbml0O1xcbiBcXG4gREVGSU5FX1BFUl9DUFUoc3RydWN0IHNldl9lc19ydW50aW1lX2RhdGEqLCBydW50aW1lX2RhdGEpO1xcbiBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc2V2X2VzX3NhdmVfYXJlYSAqLCBzZXZfdm1zYSk7XFxuQEAgLTIwMTQsMjAgKzIwMTMsMTIgQEAgdm9pZCBfX2luaXQgc25wX3NlY3VyZV90c2NfcHJlcGFyZSh2b2lkKVxcbiBcXHRwcl9kZWJ1ZyhcXFwiU2VjdXJlVFNDIGVuYWJsZWRcXFwiKTtcXG4gfVxcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgc2VjdXJldHNjX2dldF90c2Nfa2h6KHZvaWQpXFxuLXtcXG4tXFx0cmV0dXJuIHNucF90c2NfZnJlcV9raHo7XFxuLX1cXG4tXFxuLXZvaWQgX19pbml0IHNucF9zZWN1cmVfdHNjX2luaXQodm9pZClcXG4rdW5zaWduZWQgaW50IF9faW5pdCBzbnBfc2VjdXJlX3RzY19pbml0KHZvaWQpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBzbnBfdHNjX2ZyZXFfa2h6LCB0c2NfZnJlcV9taHo7XFxuIFxcdHN0cnVjdCBzbnBfc2VjcmV0c19wYWdlICpzZWNyZXRzO1xcbi1cXHR1bnNpZ25lZCBsb25nIHRzY19mcmVxX21oejtcXG4gXFx0dm9pZCAqbWVtO1xcbiBcXG4tXFx0aWYgKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9HVUVTVF9TTlBfU0VDVVJFX1RTQykpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuIFxcdG1lbSA9IGVhcmx5X21lbXJlbWFwX2VuY3J5cHRlZChzZXZfc2VjcmV0c19wYSwgUEFHRV9TSVpFKTtcXG4gXFx0aWYgKCFtZW0pIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJVbmFibGUgdG8gZ2V0IFRTQ19GQUNUT1I6IGZhaWxlZCB0byBtYXAgdGhlIFNOUCBzZWNyZXRzIHBhZ2UuXFxcXG5cXFwiKTtcXG5AQCAtMjAzNiw3ICsyMDI3LDggQEAgdm9pZCBfX2luaXQgc25wX3NlY3VyZV90c2NfaW5pdCh2b2lkKVxcbiBcXG4gXFx0c2VjcmV0cyA9IChfX2ZvcmNlIHN0cnVjdCBzbnBfc2VjcmV0c19wYWdlICopbWVtO1xcbiBcXG4tXFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfS05PV05fRlJFUSk7XFxuK1xcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTtcXG4rXFxuIFxcdHJkbXNycShNU1JfQU1ENjRfR1VFU1RfVFNDX0ZSRVEsIHRzY19mcmVxX21oeik7XFxuIFxcbiBcXHQvKiBFeHRyYWN0IHRoZSBHVUVTVCBUU0MgTUhaIGZyb20gQklUWzE3OjBdLCByZXN0IGlzIHJlc2VydmVkIHNwYWNlICovXFxuQEAgLTIwNDQsOCArMjAzNiw3IEBAIHZvaWQgX19pbml0IHNucF9zZWN1cmVfdHNjX2luaXQodm9pZClcXG4gXFxuIFxcdHNucF90c2NfZnJlcV9raHogPSBTTlBfU0NBTEVfVFNDX0ZSRVEodHNjX2ZyZXFfbWh6ICogMTAwMCwgc2VjcmV0cy1cXHUwMDNldHNjX2ZhY3Rvcik7XFxuIFxcbi1cXHR4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX2NwdSA9IHNlY3VyZXRzY19nZXRfdHNjX2toejtcXG4tXFx0eDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MgPSBzZWN1cmV0c2NfZ2V0X3RzY19raHo7XFxuLVxcbiBcXHRlYXJseV9tZW11bm1hcChtZW0sIFBBR0VfU0laRSk7XFxuK1xcbitcXHRyZXR1cm4gc25wX3RzY19mcmVxX2toejtcXG4gfVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYyBiL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXFxuaW5kZXggMjliNmYxZWQ1OWVjNTQuLjk0NjgyYWNhMTg4Yjc5IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXFxuKysrIGIvYXJjaC94ODYvY29jby90ZHgvdGR4LmNcXG5AQCAtOCw2ICs4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V4cG9ydC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tleGVjLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vYXBpYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2NvY28uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS90ZHguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS92bXguaFxcdTAwM2VcXG5AQCAtMTEyMyw5ICsxMTI0LDYgQEAgdm9pZCBfX2luaXQgdGR4X2Vhcmx5X2luaXQodm9pZClcXG4gXFxuIFxcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKTtcXG4gXFxuLVxcdC8qIFRTQyBpcyB0aGUgb25seSByZWxpYWJsZSBjbG9jayBpbiBURFggZ3Vlc3QgKi9cXG4tXFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfUkVMSUFCTEUpO1xcbi1cXG4gXFx0Y2NfdmVuZG9yID0gQ0NfVkVORE9SX0lOVEVMO1xcbiBcXG4gXFx0LyogQ29uZmlndXJlIHRoZSBURCAqL1xcbkBAIC0xMTk1LDMgKzExOTMsMTggQEAgdm9pZCBfX2luaXQgdGR4X2Vhcmx5X2luaXQodm9pZClcXG4gXFxuIFxcdHRkeF9hbm5vdW5jZSgpO1xcbiB9XFxuK1xcbit1bnNpZ25lZCBpbnQgX19pbml0IHRkeF90c2NfaW5pdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBjcHVpZF90c2NfaW5mbyBpbmZvO1xcbitcXG4rXFx0aWYgKFdBUk5fT05fT05DRShjcHVpZF9nZXRfdHNjX2luZm8oXFx1MDAyNmluZm8pIHx8ICFpbmZvLmNyeXN0YWxfa2h6KSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRhcGljX3NldF90aW1lcl9wZXJpb2Rfa2h6KGluZm8uY3J5c3RhbF9raHosIFxcXCJURFgtTW9kdWxlIHZpYSBDUFVJRFxcXCIpO1xcbitcXG4rXFx0LyogVFNDIGlzIHRoZSBvbmx5IHJlbGlhYmxlIGNsb2NrIGluIFREWCBndWVzdCAqL1xcbitcXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7XFxuK1xcbitcXHRyZXR1cm4gaW5mby5jcnlzdGFsX2toeiAqIGluZm8ubnVtZXJhdG9yIC8gaW5mby5kZW5vbWluYXRvcjtcXG4rfVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3JuLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3JuLmhcXG5pbmRleCBkYjQyYjQ3N2M0MWQzNC4uYTg5MjE3OWM2MWM2MjMgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNybi5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNybi5oXFxuQEAgLTMyLDExICszMiw2IEBAIHN0YXRpYyBpbmxpbmUgdTMyIGFjcm5fY3B1aWRfYmFzZSh2b2lkKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFjcm5fZ2V0X3RzY19raHoodm9pZClcXG4te1xcbi1cXHRyZXR1cm4gY3B1aWRfZWF4KEFDUk5fQ1BVSURfVElNSU5HX0lORk8pO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBIeXBlcmNhbGxzIGZvciBBQ1JOXFxuICAqXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaFxcbmluZGV4IDljZDQ5M2Q0NjdkNGQxLi4wMzU5OTg1NTVlOTkyMiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmhcXG5AQCAtNjMsNyArNjMsNiBAQCBleHRlcm4gaW50IGFwaWNfdmVyYm9zaXR5O1xcbiBleHRlcm4gaW50IGxvY2FsX2FwaWNfdGltZXJfYzJfb2s7XFxuIFxcbiBleHRlcm4gYm9vbCBhcGljX2lzX2Rpc2FibGVkO1xcbi1leHRlcm4gdW5zaWduZWQgaW50IGxhcGljX3RpbWVyX3BlcmlvZDtcXG4gXFxuIGV4dGVybiBlbnVtIGFwaWNfaW50cl9tb2RlX2lkIGFwaWNfaW50cl9tb2RlO1xcbiBlbnVtIGFwaWNfaW50cl9tb2RlX2lkIHtcXG5AQCAtMTM4LDYgKzEzNyw4IEBAIHZvaWQgcmVnaXN0ZXJfbGFwaWNfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MpO1xcbiBleHRlcm4gdm9pZCBzZXR1cF9ib290X0FQSUNfY2xvY2sodm9pZCk7XFxuIGV4dGVybiB2b2lkIHNldHVwX3NlY29uZGFyeV9BUElDX2Nsb2NrKHZvaWQpO1xcbiBleHRlcm4gdm9pZCBsYXBpY191cGRhdGVfdHNjX2ZyZXEodm9pZCk7XFxuK2V4dGVybiB2b2lkIGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9oeih1NjQgcGVyaW9kX2h6LCBjb25zdCBjaGFyICpzb3VyY2UpO1xcbitleHRlcm4gdm9pZCBhcGljX3NldF90aW1lcl9wZXJpb2Rfa2h6KHU2NCBwZXJpb2Rfa2h6LCBjb25zdCBjaGFyICpzb3VyY2UpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19YODZfNjRcXG4gc3RhdGljIGlubGluZSBib29sIGFwaWNfZm9yY2VfZW5hYmxlKHVuc2lnbmVkIGxvbmcgYWRkcilcXG5AQCAtMTg4LDYgKzE4OSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2xvY2FsX0FQSUModm9pZCkgeyB9XFxuICMgZGVmaW5lIHNldHVwX2Jvb3RfQVBJQ19jbG9jayB4ODZfaW5pdF9ub29wXFxuICMgZGVmaW5lIHNldHVwX3NlY29uZGFyeV9BUElDX2Nsb2NrIHg4Nl9pbml0X25vb3BcXG4gc3RhdGljIGlubGluZSB2b2lkIGxhcGljX3VwZGF0ZV90c2NfZnJlcSh2b2lkKSB7IH1cXG4rc3RhdGljIGlubGluZSB2b2lkIGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9oeih1NjQgcGVyaW9kX2h6LCBjb25zdCBjaGFyICpzb3VyY2UpIHsgfVxcbitzdGF0aWMgaW5saW5lIHZvaWQgYXBpY19zZXRfdGltZXJfcGVyaW9kX2toeih1NjQgcGVyaW9kX2toeiwgY29uc3QgY2hhciAqc291cmNlKSB7IH1cXG4gc3RhdGljIGlubGluZSB2b2lkIGluaXRfYnNwX0FQSUModm9pZCkgeyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBhcGljX2ludHJfbW9kZV9zZWxlY3Qodm9pZCkgeyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBhcGljX2ludHJfbW9kZV9pbml0KHZvaWQpIHsgfVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaFxcbmluZGV4IDRhNDdjMTZlMmRmOGMwLi43NjNlZDAxNzczOGE2NyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaFxcbkBAIC0xMTgsOCArMTE4LDE2IEBAIHN0YXRpYyBpbmxpbmUgbG9uZyBrdm1fc2V2X2h5cGVyY2FsbDModW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBsb25nIHAxLFxcbiB9XFxuIFxcbiAjaWZkZWYgQ09ORklHX0tWTV9HVUVTVFxcbi12b2lkIGt2bWNsb2NrX2luaXQodm9pZCk7XFxuLXZvaWQga3ZtY2xvY2tfZGlzYWJsZSh2b2lkKTtcXG4rZW51bSBrdm1fZ3Vlc3RfY3B1X2FjdGlvbiB7XFxuK1xcdEtWTV9HVUVTVF9CU1BfU1VTUEVORCxcXG4rXFx0S1ZNX0dVRVNUX0JTUF9SRVNVTUUsXFxuK1xcdEtWTV9HVUVTVF9BUF9PTkxJTkUsXFxuK1xcdEtWTV9HVUVTVF9BUF9PRkZMSU5FLFxcbitcXHRLVk1fR1VFU1RfU0hVVERPV04sXFxuK307XFxuK1xcbit2b2lkIGt2bWNsb2NrX2luaXQoYm9vbCBwcmVmZXJfdHNjKTtcXG4rdm9pZCBrdm1jbG9ja19jcHVfYWN0aW9uKGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKTtcXG4gYm9vbCBrdm1fcGFyYV9hdmFpbGFibGUodm9pZCk7XFxuIHVuc2lnbmVkIGludCBrdm1fYXJjaF9wYXJhX2ZlYXR1cmVzKHZvaWQpO1xcbiB1bnNpZ25lZCBpbnQga3ZtX2FyY2hfcGFyYV9oaW50cyh2b2lkKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaFxcbmluZGV4IDU5NGNmYTE5Y2JkNGJhLi4wNWViZjBiNzNlZjQ3ZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXFxuQEAgLTUzMCw3ICs1MzAsNyBAQCBpbnQgc25wX3NlbmRfZ3Vlc3RfcmVxdWVzdChzdHJ1Y3Qgc25wX21zZ19kZXNjICptZGVzYywgc3RydWN0IHNucF9ndWVzdF9yZXEgKnJlcVxcbiBpbnQgc25wX3N2c21fdnRwbV9zZW5kX2NvbW1hbmQodTggKmJ1ZmZlcik7XFxuIFxcbiB2b2lkIF9faW5pdCBzbnBfc2VjdXJlX3RzY19wcmVwYXJlKHZvaWQpO1xcbi12b2lkIF9faW5pdCBzbnBfc2VjdXJlX3RzY19pbml0KHZvaWQpO1xcbit1bnNpZ25lZCBpbnQgc25wX3NlY3VyZV90c2NfaW5pdCh2b2lkKTtcXG4gZW51bSBlc19yZXN1bHQgc2F2aWNfcmVnaXN0ZXJfZ3BhKHU2NCBncGEpO1xcbiBlbnVtIGVzX3Jlc3VsdCBzYXZpY191bnJlZ2lzdGVyX2dwYSh1NjQgKmdwYSk7XFxuIHU2NCBzYXZpY19naGNiX21zcl9yZWFkKHUzMiByZWcpO1xcbkBAIC02MzcsNyArNjM3LDcgQEAgc3RhdGljIGlubGluZSBpbnQgc25wX3NlbmRfZ3Vlc3RfcmVxdWVzdChzdHJ1Y3Qgc25wX21zZ19kZXNjICptZGVzYyxcXG4gXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzbnBfZ3Vlc3RfcmVxICpyZXEpIHsgcmV0dXJuIC1FTk9ERVY7IH1cXG4gc3RhdGljIGlubGluZSBpbnQgc25wX3N2c21fdnRwbV9zZW5kX2NvbW1hbmQodTggKmJ1ZmZlcikgeyByZXR1cm4gLUVOT0RFVjsgfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHNucF9zZWN1cmVfdHNjX3ByZXBhcmUodm9pZCkgeyB9XFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgc25wX3NlY3VyZV90c2NfaW5pdCh2b2lkKSB7IH1cXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19pbml0IHNucF9zZWN1cmVfdHNjX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgc2V2X2V2aWN0X2NhY2hlKHZvaWQgKnZhLCBpbnQgbnBhZ2VzKSB7fVxcbiBzdGF0aWMgaW5saW5lIGVudW0gZXNfcmVzdWx0IHNhdmljX3JlZ2lzdGVyX2dwYSh1NjQgZ3BhKSB7IHJldHVybiBFU19VTlNVUFBPUlRFRDsgfVxcbiBzdGF0aWMgaW5saW5lIGVudW0gZXNfcmVzdWx0IHNhdmljX3VucmVnaXN0ZXJfZ3BhKHU2NCAqZ3BhKSB7IHJldHVybiBFU19VTlNVUFBPUlRFRDsgfVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXFxuaW5kZXggODllOTdkNTc2MWQ4OWUuLmQyM2ZmMDZkYjQxYWJlIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcXG5AQCAtNjgsNiArNjgsNyBAQCBzdHJ1Y3QgdmVfaW5mbyB7XFxuICNpZmRlZiBDT05GSUdfSU5URUxfVERYX0dVRVNUXFxuIFxcbiB2b2lkIF9faW5pdCB0ZHhfZWFybHlfaW5pdCh2b2lkKTtcXG4rdW5zaWduZWQgaW50IF9faW5pdCB0ZHhfdHNjX2luaXQodm9pZCk7XFxuIFxcbiB2b2lkIHRkeF9nZXRfdmVfaW5mbyhzdHJ1Y3QgdmVfaW5mbyAqdmUpO1xcbiBcXG5AQCAtODksNiArOTAsNyBAQCB2b2lkIF9faW5pdCB0ZHhfZHVtcF90ZF9jdGxzKHU2NCB0ZF9jdGxzKTtcXG4gI2Vsc2VcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfZWFybHlfaW5pdCh2b2lkKSB7IH07XFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRkeF90c2NfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfaGFsdCh2b2lkKSB7IH07XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgdGR4X2Vhcmx5X2hhbmRsZV92ZShzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyByZXR1cm4gZmFsc2U7IH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmhcXG5pbmRleCBmZGExOGJjYjE5YjQ1YS4uYTUyMzg4YWY2MDU1ZTQgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmhcXG5AQCAtMTEsOCArMTEsMjEgQEAgZXh0ZXJuIHZvaWQgcmVjYWxpYnJhdGVfY3B1X2toeih2b2lkKTtcXG4gXFxuIGV4dGVybiBpbnQgbm9fdGltZXJfY2hlY2s7XFxuIFxcbisjaWZkZWYgQ09ORklHX1BBUkFWSVJUXFxuIGV4dGVybiBib29sIHVzaW5nX25hdGl2ZV9zY2hlZF9jbG9jayh2b2lkKTtcXG4tdm9pZCBwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodTY0ICgqZnVuYykodm9pZCkpO1xcbitcXG4raW50IF9faW5pdCBfX3BhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh1NjQgKCpmdW5jKSh2b2lkKSwgYm9vbCBzdGFibGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHZvaWQgKCpzYXZlKSh2b2lkKSwgdm9pZCAoKnJlc3RvcmUpKHZvaWQpKTtcXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodTY0ICgqZnVuYykodm9pZCksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgdm9pZCAoKnNhdmUpKHZvaWQpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHZvaWQgKCpyZXN0b3JlKSh2b2lkKSlcXG4re1xcbitcXHQodm9pZClfX3BhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayhmdW5jLCB0cnVlLCBzYXZlLCByZXN0b3JlKTtcXG4rfVxcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIGJvb2wgdXNpbmdfbmF0aXZlX3NjaGVkX2Nsb2NrKHZvaWQpIHsgcmV0dXJuIHRydWU7IH1cXG4rI2VuZGlmXFxuIFxcbiAvKlxcbiAgKiBXZSB1c2UgdGhlIGZ1bGwgbGluZWFyIGVxdWF0aW9uOiBmKHgpID0gYSArIGIqeCwgaW4gb3JkZXIgdG8gYWxsb3dcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdHNjLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90c2MuaFxcbmluZGV4IDRkMmQyZjIxZmYwNjNmLi5jYjY4MmYwOTdlYTdjYSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90c2MuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RzYy5oXFxuQEAgLTgyLDE0ICs4MiwyMCBAQCBzdGF0aWMgaW5saW5lIGN5Y2xlc190IGdldF9jeWNsZXModm9pZClcXG4gfVxcbiAjZGVmaW5lIGdldF9jeWNsZXMgZ2V0X2N5Y2xlc1xcbiBcXG4rc3RydWN0IGNwdWlkX3RzY19pbmZvIHtcXG4rXFx0dW5zaWduZWQgaW50IGRlbm9taW5hdG9yO1xcbitcXHR1bnNpZ25lZCBpbnQgbnVtZXJhdG9yO1xcbitcXHR1bnNpZ25lZCBpbnQgY3J5c3RhbF9raHo7XFxuK307XFxuK2V4dGVybiBpbnQgY3B1aWRfZ2V0X3RzY19pbmZvKHN0cnVjdCBjcHVpZF90c2NfaW5mbyAqaW5mbyk7XFxuK2V4dGVybiB1bnNpZ25lZCBpbnQgX19jcHVfa2h6X2Zyb21fY3B1aWQodm9pZCk7XFxuK1xcbiBleHRlcm4gdm9pZCB0c2NfZWFybHlfaW5pdCh2b2lkKTtcXG4gZXh0ZXJuIHZvaWQgdHNjX2luaXQodm9pZCk7XFxuIGV4dGVybiB2b2lkIG1hcmtfdHNjX3Vuc3RhYmxlKGNoYXIgKnJlYXNvbik7XFxuIGV4dGVybiBpbnQgdW5zeW5jaHJvbml6ZWRfdHNjKHZvaWQpO1xcbiBleHRlcm4gaW50IGNoZWNrX3RzY191bnN0YWJsZSh2b2lkKTtcXG4gZXh0ZXJuIHZvaWQgbWFya190c2NfYXN5bmNfcmVzZXRzKGNoYXIgKnJlYXNvbik7XFxuLWV4dGVybiB1bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KHZvaWQpO1xcbi1leHRlcm4gdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX3RzYyh2b2lkKTtcXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBuYXRpdmVfc2NoZWRfY2xvY2tfZnJvbV90c2ModTY0IHRzYyk7XFxuIFxcbiBleHRlcm4gaW50IHRzY19jbG9ja3NvdXJjZV9yZWxpYWJsZTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmhcXG5pbmRleCA5NTNkMzE5OTQwOGFlNS4uZTg3OWU2ZTgzNDI4MzAgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmhcXG5AQCAtMTIzLDYgKzEyMyw4IEBAIHN0cnVjdCB4ODZfaW5pdF9wY2kge1xcbiAgKiBAbXNpX2V4dF9kZXN0X2lkOlxcdFxcdE1TSSBzdXBwb3J0cyAxNS1iaXQgQVBJQyBJRHNcXG4gICogQGluaXRfbWVtX21hcHBpbmc6XFx0XFx0c2V0dXAgZWFybHkgbWFwcGluZ3MgZHVyaW5nIGluaXRfbWVtX21hcHBpbmcoKVxcbiAgKiBAaW5pdF9hZnRlcl9ib290bWVtOlxcdFxcdGd1ZXN0IGluaXQgYWZ0ZXIgYm9vdCBhbGxvY2F0b3IgaXMgZmluaXNoZWRcXG4rICogQGdldF90c2Nfa2h6OlxcdFxcdGdldCB0aGUgVFNDIGZyZXF1ZW5jeSAocmV0dXJucyAwIGlmIGZyZXF1ZW5jeSBpcyB1bmtub3duKVxcbisgKiBAZ2V0X2NwdV9raHo6XFx0XFx0Z2V0IHRoZSBDUFUgZnJlcXVlbmN5IChyZXR1cm5zIDAgaWYgZnJlcXVlbmN5IGlzIHVua25vd24pXFxuICAqL1xcbiBzdHJ1Y3QgeDg2X2h5cGVyX2luaXQge1xcbiBcXHR2b2lkICgqaW5pdF9wbGF0Zm9ybSkodm9pZCk7XFxuQEAgLTEzMSw2ICsxMzMsOCBAQCBzdHJ1Y3QgeDg2X2h5cGVyX2luaXQge1xcbiBcXHRib29sICgqbXNpX2V4dF9kZXN0X2lkKSh2b2lkKTtcXG4gXFx0dm9pZCAoKmluaXRfbWVtX21hcHBpbmcpKHZvaWQpO1xcbiBcXHR2b2lkICgqaW5pdF9hZnRlcl9ib290bWVtKSh2b2lkKTtcXG4rXFx0dW5zaWduZWQgaW50ICgqZ2V0X3RzY19raHopKHZvaWQpO1xcbitcXHR1bnNpZ25lZCBpbnQgKCpnZXRfY3B1X2toeikodm9pZCk7XFxuIH07XFxuIFxcbiAvKipcXG5AQCAtMjkxLDggKzI5NSw2IEBAIHN0cnVjdCB4ODZfaHlwZXJfcnVudGltZSB7XFxuIFxcbiAvKipcXG4gICogc3RydWN0IHg4Nl9wbGF0Zm9ybV9vcHMgLSBwbGF0Zm9ybSBzcGVjaWZpYyBydW50aW1lIGZ1bmN0aW9uc1xcbi0gKiBAY2FsaWJyYXRlX2NwdTpcXHRcXHRjYWxpYnJhdGUgQ1BVXFxuLSAqIEBjYWxpYnJhdGVfdHNjOlxcdFxcdGNhbGlicmF0ZSBUU0MsIGlmIGRpZmZlcmVudCBmcm9tIENQVVxcbiAgKiBAZ2V0X3dhbGxjbG9jazpcXHRcXHRnZXQgdGltZSBmcm9tIEhXIGNsb2NrIGxpa2UgUlRDIGV0Yy5cXG4gICogQHNldF93YWxsY2xvY2s6XFx0XFx0c2V0IHRpbWUgYmFjayB0byBIVyBjbG9ja1xcbiAgKiBAaW9tbXVfc2h1dGRvd246XFx0XFx0c2V0IGJ5IGFuIElPTU1VIGRyaXZlciBmb3Igc2h1dGRvd24gaWYgbmVjZXNzYXJ5XFxuQEAgLTMxNiw4ICszMTgsNiBAQCBzdHJ1Y3QgeDg2X2h5cGVyX3J1bnRpbWUge1xcbiAgKiBAZ3Vlc3Q6XFx0XFx0XFx0Z3Vlc3QgaW5jYXJuYXRpb25zIGNhbGxiYWNrc1xcbiAgKi9cXG4gc3RydWN0IHg4Nl9wbGF0Zm9ybV9vcHMge1xcbi1cXHR1bnNpZ25lZCBsb25nICgqY2FsaWJyYXRlX2NwdSkodm9pZCk7XFxuLVxcdHVuc2lnbmVkIGxvbmcgKCpjYWxpYnJhdGVfdHNjKSh2b2lkKTtcXG4gXFx0dm9pZCAoKmdldF93YWxsY2xvY2spKHN0cnVjdCB0aW1lc3BlYzY0ICp0cyk7XFxuIFxcdGludCAoKnNldF93YWxsY2xvY2spKGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cyk7XFxuIFxcdHZvaWQgKCppb21tdV9zaHV0ZG93bikodm9pZCk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtX3BhcmEuaCBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtX3BhcmEuaFxcbmluZGV4IGExZWZhNzkwN2EwYjEwLi5jM2EzODQ3MTFmM2E1ZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bV9wYXJhLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bV9wYXJhLmhcXG5AQCAtNDQsNiArNDQsMTcgQEBcXG4gICovXFxuICNkZWZpbmUgS1ZNX0ZFQVRVUkVfQ0xPQ0tTT1VSQ0VfU1RBQkxFX0JJVFxcdDI0XFxuIFxcbisvKlxcbisgKiBUaGUgdGltaW5nIGluZm9ybWF0aW9uIGxlYWYgcHJvdmlkZXMgVFNDIGFuZCBsb2NhbCBBUElDIHRpbWVyIGZyZXF1ZW5jeVxcbisgKiBpbmZvcm1hdGlvbiB0byB0aGUgZ3Vlc3QuICBOb3RlLCB1c2Vyc3BhY2UgaXMgcmVzcG9uc2libGUgZm9yIGZpbGxpbmcgdGhlXFxuKyAqIGxlYWYgd2l0aCB0aGUgY29ycmVjdCBpbmZvcm1hdGlvbi5cXG4rICpcXG4rICogICMgRUFYOiAoVmlydHVhbCkgVFNDIGZyZXF1ZW5jeSBpbiBrSHouXFxuKyAqICAjIEVCWDogKFZpcnR1YWwpIEJ1cyAobG9jYWwgQVBJQyB0aW1lcikgZnJlcXVlbmN5IGluIGtIei5cXG4rICogICMgRUNYLCBFRFg6IFJlc2VydmVkIChtdXN0IGJlIHplcm8pLlxcbisgKi9cXG4rI2RlZmluZSBLVk1fQ1BVSURfVElNSU5HX0lORk9cXHQweDQwMDAwMDEwXFxuK1xcbiAjZGVmaW5lIE1TUl9LVk1fV0FMTF9DTE9DSyAgMHgxMVxcbiAjZGVmaW5lIE1TUl9LVk1fU1lTVEVNX1RJTUUgMHgxMlxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jXFxuaW5kZXggYWExZTE5OTc5YWE4ZTEuLjhkM2Q5MzA1NzZmZDcxIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuY1xcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuY1xcbkBAIC0xNzYsNyArMTc2LDcgQEAgc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsYXBpY19yZXNvdXJjZSA9IHtcXG4gfTtcXG4gXFxuIC8qIE1lYXN1cmVkIGluIHRpY2tzIHBlciBIWi4gKi9cXG4tdW5zaWduZWQgaW50IGxhcGljX3RpbWVyX3BlcmlvZCA9IDA7XFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGFwaWNfdGltZXJfcGVyaW9kO1xcbiBcXG4gc3RhdGljIHZvaWQgYXBpY19wbV9hY3RpdmF0ZSh2b2lkKTtcXG4gXFxuQEAgLTc5Niw2ICs3OTYsMTYgQEAgYm9vbCBfX2luaXQgYXBpY19uZWVkc19waXQodm9pZClcXG4gXFx0cmV0dXJuIGxhcGljX3RpbWVyX3BlcmlvZCA9PSAwO1xcbiB9XFxuIFxcbit2b2lkIGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHoodTY0IHBlcmlvZF9raHosIGNvbnN0IGNoYXIgKnNvdXJjZSlcXG4re1xcbitcXHRsYXBpY190aW1lcl9wZXJpb2QgPSBtdWxfdTY0X3UzMl9kaXYocGVyaW9kX2toeiwgMTAwMCwgSFopO1xcbit9XFxuK1xcbit2b2lkIGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9oeih1NjQgcGVyaW9kX2h6LCBjb25zdCBjaGFyICpzb3VyY2UpXFxuK3tcXG4rXFx0bGFwaWNfdGltZXJfcGVyaW9kID0gZGl2X3U2NChwZXJpb2RfaHosIEhaKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBfX2luaXQgY2FsaWJyYXRlX0FQSUNfY2xvY2sodm9pZClcXG4ge1xcbiBcXHRzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpsZXZ0ID0gdGhpc19jcHVfcHRyKFxcdTAwMjZsYXBpY19ldmVudHMpO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2Fjcm4uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYWNybi5jXFxuaW5kZXggZGMxMTlhZjgzNTI0MmEuLmRjNzFhNmZkZDQ2MTM5IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYWNybi5jXFxuKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9hY3JuLmNcXG5AQCAtMTksMTggKzE5LDI4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vaWR0ZW50cnkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9pcnFfcmVncy5oXFx1MDAzZVxcbiBcXG4rc3RhdGljIHVuc2lnbmVkIGludCBhY3JuX3RzY19raHpfY3B1aWQgX19pbml0ZGF0YTtcXG4rXFxuIHN0YXRpYyB1MzIgX19pbml0IGFjcm5fZGV0ZWN0KHZvaWQpXFxuIHtcXG4gXFx0cmV0dXJuIGFjcm5fY3B1aWRfYmFzZSgpO1xcbiB9XFxuIFxcbitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBhY3JuX2dldF90c2Nfa2h6KHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGFjcm5fdHNjX2toel9jcHVpZDtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgX19pbml0IGFjcm5faW5pdF9wbGF0Zm9ybSh2b2lkKVxcbiB7XFxuIFxcdC8qIEluc3RhbGwgc3lzdGVtIGludGVycnVwdCBoYW5kbGVyIGZvciBBQ1JOIGh5cGVydmlzb3IgY2FsbGJhY2sgKi9cXG4gXFx0c3lzdmVjX2luc3RhbGwoSFlQRVJWSVNPUl9DQUxMQkFDS19WRUNUT1IsIHN5c3ZlY19hY3JuX2h2X2NhbGxiYWNrKTtcXG4gXFxuLVxcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjID0gYWNybl9nZXRfdHNjX2toejtcXG4tXFx0eDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUgPSBhY3JuX2dldF90c2Nfa2h6O1xcbitcXHRhY3JuX3RzY19raHpfY3B1aWQgPSBjcHVpZF9lYXgoQUNSTl9DUFVJRF9USU1JTkdfSU5GTyk7XFxuK1xcdGlmIChhY3JuX3RzY19raHpfY3B1aWQpIHtcXG4rXFx0XFx0eDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHogPSBhY3JuX2dldF90c2Nfa2h6O1xcbitcXHRcXHR4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeiA9IGFjcm5fZ2V0X3RzY19raHo7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgYWNybl94MmFwaWNfYXZhaWxhYmxlKHZvaWQpXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuY1xcbmluZGV4IDE4NWQ0ZjY3N2VjMGYwLi5jNGRhOGUzNTMxOWFjZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21zaHlwZXJ2LmNcXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21zaHlwZXJ2LmNcXG5AQCAtMjc1LDYzICsyNzUsNiBAQCBzdGF0aWMgdm9pZCBodl9ndWVzdF9jcmFzaF9zaHV0ZG93bihzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4gfVxcbiAjZW5kaWYgLyogQ09ORklHX0NSQVNIX0RVTVAgKi9cXG4gXFxuLXN0YXRpYyB1NjQgaHZfcmVmX2NvdW50ZXJfYXRfc3VzcGVuZDtcXG4tc3RhdGljIHZvaWQgKCpvbGRfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSkodm9pZCk7XFxuLXN0YXRpYyB2b2lkICgqb2xkX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUpKHZvaWQpO1xcbi1cXG4tLypcXG4tICogSHlwZXItViBjbG9jayBjb3VudGVyIHJlc2V0cyBkdXJpbmcgaGliZXJuYXRpb24uIFNhdmUgYW5kIHJlc3RvcmUgY2xvY2tcXG4tICogb2Zmc2V0IGR1cmluZyBzdXNwZW5kL3Jlc3VtZSwgd2hpbGUgYWxzbyBjb25zaWRlcmluZyB0aGUgdGltZSBwYXNzZWRcXG4tICogYmVmb3JlIHN1c3BlbmQuIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgc2NoZWRfY2xvY2sgdXNpbmcgaHYgdHNjIHBhZ2VcXG4tICogYmFzZWQgY2xvY2tzb3VyY2UsIHByb2NlZWRzIGZyb20gd2hlcmUgaXQgbGVmdCBvZmYgZHVyaW5nIHN1c3BlbmQgYW5kXFxuLSAqIGl0IHNob3dzIGNvcnJlY3QgdGltZSBmb3IgdGhlIHRpbWVzdGFtcHMgb2Yga2VybmVsIG1lc3NhZ2VzIGFmdGVyIHJlc3VtZS5cXG4tICovXFxuLXN0YXRpYyB2b2lkIHNhdmVfaHZfY2xvY2tfdHNjX3N0YXRlKHZvaWQpXFxuLXtcXG4tXFx0aHZfcmVmX2NvdW50ZXJfYXRfc3VzcGVuZCA9IGh2X3JlYWRfcmVmZXJlbmNlX2NvdW50ZXIoKTtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgcmVzdG9yZV9odl9jbG9ja190c2Nfc3RhdGUodm9pZClcXG4te1xcbi1cXHQvKlxcbi1cXHQgKiBBZGp1c3QgdGhlIG9mZnNldHMgdXNlZCBieSBodiB0c2MgY2xvY2tzb3VyY2UgdG9cXG4tXFx0ICogYWNjb3VudCBmb3IgdGhlIHRpbWUgc3BlbnQgYmVmb3JlIGhpYmVybmF0aW9uLlxcbi1cXHQgKiBhZGp1c3RlZCB2YWx1ZSA9IHJlZmVyZW5jZSBjb3VudGVyICh0aW1lKSBhdCBzdXNwZW5kXFxuLVxcdCAqICAgICAgICAgICAgICAgIC0gcmVmZXJlbmNlIGNvdW50ZXIgKHRpbWUpIG5vdy5cXG4tXFx0ICovXFxuLVxcdGh2X2Fkal9zY2hlZF9jbG9ja19vZmZzZXQoaHZfcmVmX2NvdW50ZXJfYXRfc3VzcGVuZCAtIGh2X3JlYWRfcmVmZXJlbmNlX2NvdW50ZXIoKSk7XFxuLX1cXG4tXFxuLS8qXFxuLSAqIEZ1bmN0aW9ucyB0byBvdmVycmlkZSBzYXZlX3NjaGVkX2Nsb2NrX3N0YXRlIGFuZCByZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlXFxuLSAqIGZ1bmN0aW9ucyBvZiB4ODZfcGxhdGZvcm0uIFRoZSBIeXBlci1WIGNsb2NrIGNvdW50ZXIgaXMgcmVzZXQgZHVyaW5nXFxuLSAqIHN1c3BlbmQtcmVzdW1lIGFuZCB0aGUgb2Zmc2V0IHVzZWQgdG8gbWVhc3VyZSB0aW1lIG5lZWRzIHRvIGJlXFxuLSAqIGNvcnJlY3RlZCwgcG9zdCByZXN1bWUuXFxuLSAqL1xcbi1zdGF0aWMgdm9pZCBodl9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXFxuLXtcXG4tXFx0b2xkX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUoKTtcXG4tXFx0c2F2ZV9odl9jbG9ja190c2Nfc3RhdGUoKTtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgaHZfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxcbi17XFxuLVxcdHJlc3RvcmVfaHZfY2xvY2tfdHNjX3N0YXRlKCk7XFxuLVxcdG9sZF9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKCk7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIF9faW5pdCB4ODZfc2V0dXBfb3BzX2Zvcl90c2NfcGdfY2xvY2sodm9pZClcXG4te1xcbi1cXHRpZiAoIShtc19oeXBlcnYuZmVhdHVyZXMgXFx1MDAyNiBIVl9NU1JfUkVGRVJFTkNFX1RTQ19BVkFJTEFCTEUpKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHRvbGRfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSA9IHg4Nl9wbGF0Zm9ybS5zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlO1xcbi1cXHR4ODZfcGxhdGZvcm0uc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSA9IGh2X3NhdmVfc2NoZWRfY2xvY2tfc3RhdGU7XFxuLVxcbi1cXHRvbGRfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSA9IHg4Nl9wbGF0Zm9ybS5yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlO1xcbi1cXHR4ODZfcGxhdGZvcm0ucmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSA9IGh2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGU7XFxuLX1cXG4tXFxuICNpZmRlZiBDT05GSUdfWDg2XzY0XFxuIERFRklORV9TVEFUSUNfQ0FMTChodl9oeXBlcmNhbGwsIGh2X3N0ZF9oeXBlcmNhbGwpO1xcbiBFWFBPUlRfU1RBVElDX0NBTExfVFJBTVBfR1BMKGh2X2h5cGVyY2FsbCk7XFxuQEAgLTM5NSw3ICszMzgsNyBAQCBzdGF0aWMgaW50IGh2X25taV91bmtub3duKHVuc2lnbmVkIGludCB2YWwsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiB9XFxuICNlbmRpZlxcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgaHZfZ2V0X3RzY19raHoodm9pZClcXG4rc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaHZfZ2V0X3RzY19raHoodm9pZClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZyZXE7XFxuIFxcbkBAIC01NzMsOSArNTE2LDggQEAgc3RhdGljIHZvaWQgX19pbml0IG1zX2h5cGVydl9pbml0X3BsYXRmb3JtKHZvaWQpXFxuIFxcbiBcXHRpZiAobXNfaHlwZXJ2LmZlYXR1cmVzIFxcdTAwMjYgSFZfQUNDRVNTX0ZSRVFVRU5DWV9NU1JTIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBtc19oeXBlcnYubWlzY19mZWF0dXJlcyBcXHUwMDI2IEhWX0ZFQVRVUkVfRlJFUVVFTkNZX01TUlNfQVZBSUxBQkxFKSB7XFxuLVxcdFxcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjID0gaHZfZ2V0X3RzY19raHo7XFxuLVxcdFxcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ID0gaHZfZ2V0X3RzY19raHo7XFxuLVxcdFxcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpO1xcbitcXHRcXHR4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeiA9IGh2X2dldF90c2Nfa2h6O1xcbitcXHRcXHR4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeiA9IGh2X2dldF90c2Nfa2h6O1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAobXNfaHlwZXJ2LnByaXZfaGlnaCBcXHUwMDI2IEhWX0lTT0xBVElPTikge1xcbkBAIC02NDYsMTAgKzU4OCw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtc19oeXBlcnZfaW5pdF9wbGF0Zm9ybSh2b2lkKVxcbiBcXHRcXHR1NjRcXHRodl9sYXBpY19mcmVxdWVuY3k7XFxuIFxcbiBcXHRcXHRyZG1zcnEoSFZfWDY0X01TUl9BUElDX0ZSRVFVRU5DWSwgaHZfbGFwaWNfZnJlcXVlbmN5KTtcXG4tXFx0XFx0aHZfbGFwaWNfZnJlcXVlbmN5ID0gZGl2X3U2NChodl9sYXBpY19mcmVxdWVuY3ksIEhaKTtcXG4tXFx0XFx0bGFwaWNfdGltZXJfcGVyaW9kID0gaHZfbGFwaWNfZnJlcXVlbmN5O1xcbi1cXHRcXHRwcl9pbmZvKFxcXCJIeXBlci1WOiBMQVBJQyBUaW1lciBGcmVxdWVuY3k6ICUjeFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0bGFwaWNfdGltZXJfcGVyaW9kKTtcXG4rXFx0XFx0YXBpY19zZXRfdGltZXJfcGVyaW9kX2h6KGh2X2xhcGljX2ZyZXF1ZW5jeSwgXFxcIkh5cGVyLVYgaHlwZXJ2aXNvclxcXCIpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZWdpc3Rlcl9ubWlfaGFuZGxlcihOTUlfVU5LTk9XTiwgaHZfbm1pX3Vua25vd24sIE5NSV9GTEFHX0ZJUlNULFxcbkBAIC03NDAsNyArNjc5LDYgQEAgc3RhdGljIHZvaWQgX19pbml0IG1zX2h5cGVydl9pbml0X3BsYXRmb3JtKHZvaWQpXFxuIFxcbiBcXHQvKiBSZWdpc3RlciBIeXBlci1WIHNwZWNpZmljIGNsb2Nrc291cmNlICovXFxuIFxcdGh2X2luaXRfY2xvY2tzb3VyY2UoKTtcXG4tXFx0eDg2X3NldHVwX29wc19mb3JfdHNjX3BnX2Nsb2NrKCk7XFxuIFxcdGh2X3Z0bF9pbml0X3BsYXRmb3JtKCk7XFxuICNlbmRpZlxcbiBcXHQvKlxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Ztd2FyZS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuY1xcbmluZGV4IDM0YjczNTczYjEwOGQ3Li4yMzIyNTUyNzlhNmVlYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Ztd2FyZS5jXFxuKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuY1xcbkBAIC02NCw3ICs2NCw3IEBAIHN0cnVjdCB2bXdhcmVfc3RlYWxfdGltZSB7XFxuIFxcdHU2NCByZXNlcnZlZFs3XTtcXG4gfTtcXG4gXFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHZtd2FyZV90c2Nfa2h6IF9fcm9fYWZ0ZXJfaW5pdDtcXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgdm13YXJlX3RzY19raHogX19pbml0ZGF0YTtcXG4gc3RhdGljIHU4IHZtd2FyZV9oeXBlcmNhbGxfbW9kZSAgICAgX19yb19hZnRlcl9pbml0O1xcbiBcXG4gdW5zaWduZWQgbG9uZyB2bXdhcmVfaHlwZXJjYWxsX3Nsb3codW5zaWduZWQgbG9uZyBjbWQsXFxuQEAgLTEzNyw3ICsxMzcsNyBAQCBzdGF0aWMgaW5saW5lIGludCBfX3Ztd2FyZV9wbGF0Zm9ybSh2b2lkKVxcbiBcXHRyZXR1cm4gZWF4ICE9IFVJTlRfTUFYIFxcdTAwMjZcXHUwMDI2IGVieCA9PSBWTVdBUkVfSFlQRVJWSVNPUl9NQUdJQztcXG4gfVxcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgdm13YXJlX2dldF90c2Nfa2h6KHZvaWQpXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IHZtd2FyZV9nZXRfdHNjX2toeih2b2lkKVxcbiB7XFxuIFxcdHJldHVybiB2bXdhcmVfdHNjX2toejtcXG4gfVxcbkBAIC0zNDgsNyArMzQ4LDggQEAgc3RhdGljIHZvaWQgX19pbml0IHZtd2FyZV9wYXJhdmlydF9vcHNfc2V0dXAodm9pZClcXG4gXFx0dm13YXJlX2N5YzJuc19zZXR1cCgpO1xcbiBcXG4gXFx0aWYgKHZtd19zY2hlZF9jbG9jaylcXG4tXFx0XFx0cGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKHZtd2FyZV9zY2hlZF9jbG9jayk7XFxuK1xcdFxcdHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh2bXdhcmVfc2NoZWRfY2xvY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCB4ODZfaW5pdF9ub29wLCB4ODZfaW5pdF9ub29wKTtcXG4gXFxuIFxcdGlmICh2bXdhcmVfaXNfc3RlYWxjbG9ja19hdmFpbGFibGUoKSkge1xcbiBcXHRcXHRoYXNfc3RlYWxfY2xvY2sgPSB0cnVlO1xcbkBAIC0zOTAsOCArMzkxLDYgQEAgc3RhdGljIHZvaWQgX19pbml0IHZtd2FyZV9zZXRfY2FwYWJpbGl0aWVzKHZvaWQpXFxuIHtcXG4gXFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpO1xcbiBcXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7XFxuLVxcdGlmICh2bXdhcmVfdHNjX2toeilcXG4tXFx0XFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfS05PV05fRlJFUSk7XFxuIFxcdGlmICh2bXdhcmVfaHlwZXJjYWxsX21vZGUgPT0gQ1BVSURfVk1XQVJFX0ZFQVRVUkVTX0VDWF9WTUNBTEwpXFxuIFxcdFxcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVk1DQUxMKTtcXG4gXFx0ZWxzZSBpZiAodm13YXJlX2h5cGVyY2FsbF9tb2RlID09IENQVUlEX1ZNV0FSRV9GRUFUVVJFU19FQ1hfVk1NQ0FMTClcXG5AQCAtNDE5LDE1ICs0MTgsMTEgQEAgc3RhdGljIHZvaWQgX19pbml0IHZtd2FyZV9wbGF0Zm9ybV9zZXR1cCh2b2lkKVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHR2bXdhcmVfdHNjX2toeiA9IHRzY19raHo7XFxuLVxcdFxcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjID0gdm13YXJlX2dldF90c2Nfa2h6O1xcbi1cXHRcXHR4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX2NwdSA9IHZtd2FyZV9nZXRfdHNjX2toejtcXG4rXFx0XFx0eDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHogPSB2bXdhcmVfZ2V0X3RzY19raHo7XFxuK1xcdFxcdHg4Nl9pbml0Lmh5cGVyLmdldF9jcHVfa2h6ID0gdm13YXJlX2dldF90c2Nfa2h6O1xcbiBcXG4tI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQ1xcbiBcXHRcXHQvKiBTa2lwIGxhcGljIGNhbGlicmF0aW9uIHNpbmNlIHdlIGtub3cgdGhlIGJ1cyBmcmVxdWVuY3kuICovXFxuLVxcdFxcdGxhcGljX3RpbWVyX3BlcmlvZCA9IGVjeCAvIEhaO1xcbi1cXHRcXHRwcl9pbmZvKFxcXCJIb3N0IGJ1cyBjbG9jayBzcGVlZCByZWFkIGZyb20gaHlwZXJ2aXNvciA6ICV1IEh6XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRlY3gpO1xcbi0jZW5kaWZcXG4rXFx0XFx0YXBpY19zZXRfdGltZXJfcGVyaW9kX2h6KGVjeCwgXFxcIlZNd2FyZSBoeXBlcnZpc29yXFxcIik7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHByX3dhcm4oXFxcIkZhaWxlZCB0byBnZXQgVFNDIGZyZXEgZnJvbSB0aGUgaHlwZXJ2aXNvclxcXFxuXFxcIik7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2phaWxob3VzZS5jIGIvYXJjaC94ODYva2VybmVsL2phaWxob3VzZS5jXFxuaW5kZXggZjU4Y2U5MjIwZTBmMzIuLmZmMTczMDUyY2RjZWRjIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9qYWlsaG91c2UuY1xcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9qYWlsaG91c2UuY1xcbkBAIC02NSwxMCArNjUsMTAgQEAgc3RhdGljIHZvaWQgamFpbGhvdXNlX2dldF93YWxsY2xvY2soc3RydWN0IHRpbWVzcGVjNjQgKm5vdylcXG4gXFxuIHN0YXRpYyB2b2lkIF9faW5pdCBqYWlsaG91c2VfdGltZXJfaW5pdCh2b2lkKVxcbiB7XFxuLVxcdGxhcGljX3RpbWVyX3BlcmlvZCA9IHNldHVwX2RhdGEudjEuYXBpY19raHogKiAoMTAwMCAvIEhaKTtcXG4rXFx0YXBpY19zZXRfdGltZXJfcGVyaW9kX2toeihzZXR1cF9kYXRhLnYxLmFwaWNfa2h6LCBcXFwiSmFpbGhvdXNlIGh5cGVydmlzb3JcXFwiKTtcXG4gfVxcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgamFpbGhvdXNlX2dldF90c2Modm9pZClcXG4rc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgamFpbGhvdXNlX2dldF90c2Modm9pZClcXG4ge1xcbiBcXHRyZXR1cm4gcHJlY2FsaWJyYXRlZF90c2Nfa2h6O1xcbiB9XFxuQEAgLTIxMCw4ICsyMTAsNiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgamFpbGhvdXNlX2luaXRfcGxhdGZvcm0odm9pZClcXG4gXFx0eDg2X2luaXQubXBwYXJzZS5wYXJzZV9zbXBfY2ZnXFx0XFx0PSBqYWlsaG91c2VfcGFyc2Vfc21wX2NvbmZpZztcXG4gXFx0eDg2X2luaXQucGNpLmFyY2hfaW5pdFxcdFxcdFxcdD0gamFpbGhvdXNlX3BjaV9hcmNoX2luaXQ7XFxuIFxcbi1cXHR4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX2NwdVxcdFxcdD0gamFpbGhvdXNlX2dldF90c2M7XFxuLVxcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjXFx0XFx0PSBqYWlsaG91c2VfZ2V0X3RzYztcXG4gXFx0eDg2X3BsYXRmb3JtLmdldF93YWxsY2xvY2tcXHRcXHQ9IGphaWxob3VzZV9nZXRfd2FsbGNsb2NrO1xcbiBcXHR4ODZfcGxhdGZvcm0ubGVnYWN5LnJ0Y1xcdFxcdFxcdD0gMDtcXG4gXFx0eDg2X3BsYXRmb3JtLmxlZ2FjeS53YXJtX3Jlc2V0XFx0XFx0PSAwO1xcbkBAIC0yNTcsNyArMjU1LDYgQEAgc3RhdGljIHZvaWQgX19pbml0IGphaWxob3VzZV9pbml0X3BsYXRmb3JtKHZvaWQpXFxuIFxcdHByX2RlYnVnKFxcXCJKYWlsaG91c2U6IFBNLVRpbWVyIElPIFBvcnQ6ICUjeFxcXFxuXFxcIiwgcG10bXJfaW9wb3J0KTtcXG4gXFxuIFxcdHByZWNhbGlicmF0ZWRfdHNjX2toeiA9IHNldHVwX2RhdGEudjEudHNjX2toejtcXG4tXFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfS05PV05fRlJFUSk7XFxuIFxcbiBcXHRwY2lfcHJvYmUgPSAwO1xcbiBcXG5AQCAtMjkzLDUgKzI5MCw3IEBAIGNvbnN0IHN0cnVjdCBoeXBlcnZpc29yX3g4NiB4ODZfaHlwZXJfamFpbGhvdXNlIF9fcmVmY29uc3QgPSB7XFxuIFxcdC5kZXRlY3RcXHRcXHRcXHQ9IGphaWxob3VzZV9kZXRlY3QsXFxuIFxcdC5pbml0LmluaXRfcGxhdGZvcm1cXHQ9IGphaWxob3VzZV9pbml0X3BsYXRmb3JtLFxcbiBcXHQuaW5pdC54MmFwaWNfYXZhaWxhYmxlXFx0PSBqYWlsaG91c2VfeDJhcGljX2F2YWlsYWJsZSxcXG4rXFx0LmluaXQuZ2V0X3RzY19raHpcXHQ9IGphaWxob3VzZV9nZXRfdHNjLFxcbitcXHQuaW5pdC5nZXRfY3B1X2toelxcdD0gamFpbGhvdXNlX2dldF90c2MsXFxuIFxcdC5pZ25vcmVfbm9wdlxcdFxcdD0gdHJ1ZSxcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2t2bS5jIGIvYXJjaC94ODYva2VybmVsL2t2bS5jXFxuaW5kZXggZGNlZjg0ZGEzMDRiODkuLmJlZWEwYjZhYTc4ZTFhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9rdm0uY1xcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9rdm0uY1xcbkBAIC00OSw2ICs0OSw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vc3ZtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vZTgyMC9hcGkuaFxcdTAwM2VcXG4gXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQga3ZtX3RzY19raHpfY3B1aWQgX19pbml0ZGF0YTtcXG4rc3RhdGljIHVuc2lnbmVkIGludCBrdm1fY3B1X2toel9jcHVpZCBfX2luaXRkYXRhO1xcbitcXG4gREVGSU5FX1NUQVRJQ19LRVlfRkFMU0VfUk8oa3ZtX2FzeW5jX3BmX2VuYWJsZWQpO1xcbiBcXG4gc3RhdGljIGludCBrdm1hcGYgPSAxO1xcbkBAIC00NTcsNyArNDYwLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHNldl9tYXBfcGVyY3B1X2RhdGEodm9pZClcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBrdm1fZ3Vlc3RfY3B1X29mZmxpbmUoYm9vbCBzaHV0ZG93bilcXG4rc3RhdGljIHZvaWQga3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKVxcbiB7XFxuIFxcdGt2bV9kaXNhYmxlX3N0ZWFsX3RpbWUoKTtcXG4gXFx0aWYgKGt2bV9wYXJhX2hhc19mZWF0dXJlKEtWTV9GRUFUVVJFX1BWX0VPSSkpXFxuQEAgLTQ2NSwyMyArNDY4LDMwIEBAIHN0YXRpYyB2b2lkIGt2bV9ndWVzdF9jcHVfb2ZmbGluZShib29sIHNodXRkb3duKVxcbiBcXHRpZiAoa3ZtX3BhcmFfaGFzX2ZlYXR1cmUoS1ZNX0ZFQVRVUkVfTUlHUkFUSU9OX0NPTlRST0wpKVxcbiBcXHRcXHR3cm1zcnEoTVNSX0tWTV9NSUdSQVRJT05fQ09OVFJPTCwgMCk7XFxuIFxcdGt2bV9wdl9kaXNhYmxlX2FwZigpO1xcbi1cXHRpZiAoIXNodXRkb3duKVxcbitcXHRpZiAoYWN0aW9uICE9IEtWTV9HVUVTVF9TSFVURE9XTilcXG4gXFx0XFx0YXBmX3Rhc2tfd2FrZV9hbGwoKTtcXG4tXFx0a3ZtY2xvY2tfZGlzYWJsZSgpO1xcbitcXG4rXFx0a3ZtY2xvY2tfY3B1X2FjdGlvbihhY3Rpb24pO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGt2bV9jcHVfb25saW5lKHVuc2lnbmVkIGludCBjcHUpXFxuK3N0YXRpYyB2b2lkIF9fa3ZtX2NwdV9vbmxpbmUodW5zaWduZWQgaW50IGNwdSwgZW51bSBrdm1fZ3Vlc3RfY3B1X2FjdGlvbiBhY3Rpb24pXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuIFxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4rXFx0a3ZtY2xvY2tfY3B1X2FjdGlvbihhY3Rpb24pO1xcbiBcXHRrdm1fZ3Vlc3RfY3B1X2luaXQoKTtcXG4gXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbi1cXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gI2lmZGVmIENPTkZJR19TTVBcXG4gXFxuK3N0YXRpYyBpbnQga3ZtX2NwdV9vbmxpbmUodW5zaWduZWQgaW50IGNwdSlcXG4re1xcbitcXHRfX2t2bV9jcHVfb25saW5lKGNwdSwgS1ZNX0dVRVNUX0FQX09OTElORSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoY3B1bWFza192YXJfdCwgX19wdl9jcHVfbWFzayk7XFxuIFxcbiBzdGF0aWMgYm9vbCBwdl90bGJfZmx1c2hfc3VwcG9ydGVkKHZvaWQpXFxuQEAgLTcyMyw3ICs3MzMsNyBAQCBzdGF0aWMgaW50IGt2bV9jcHVfZG93bl9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUpXFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbiBcXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuLVxcdGt2bV9ndWVzdF9jcHVfb2ZmbGluZShmYWxzZSk7XFxuK1xcdGt2bV9ndWVzdF9jcHVfb2ZmbGluZShLVk1fR1VFU1RfQVBfT0ZGTElORSk7XFxuIFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNzM0LDcgKzc0NCw3IEBAIHN0YXRpYyBpbnQga3ZtX3N1c3BlbmQodm9pZCAqZGF0YSlcXG4ge1xcbiBcXHR1NjQgdmFsID0gMDtcXG4gXFxuLVxcdGt2bV9ndWVzdF9jcHVfb2ZmbGluZShmYWxzZSk7XFxuK1xcdGt2bV9ndWVzdF9jcHVfb2ZmbGluZShLVk1fR1VFU1RfQlNQX1NVU1BFTkQpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19BUkNIX0NQVUlETEVfSEFMVFBPTExcXG4gXFx0aWYgKGt2bV9wYXJhX2hhc19mZWF0dXJlKEtWTV9GRUFUVVJFX1BPTExfQ09OVFJPTCkpXFxuQEAgLTc0Niw3ICs3NTYsNyBAQCBzdGF0aWMgaW50IGt2bV9zdXNwZW5kKHZvaWQgKmRhdGEpXFxuIFxcbiBzdGF0aWMgdm9pZCBrdm1fcmVzdW1lKHZvaWQgKmRhdGEpXFxuIHtcXG4tXFx0a3ZtX2NwdV9vbmxpbmUocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7XFxuK1xcdF9fa3ZtX2NwdV9vbmxpbmUocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwgS1ZNX0dVRVNUX0JTUF9SRVNVTUUpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19BUkNIX0NQVUlETEVfSEFMVFBPTExcXG4gXFx0aWYgKGt2bV9wYXJhX2hhc19mZWF0dXJlKEtWTV9GRUFUVVJFX1BPTExfQ09OVFJPTCkgXFx1MDAyNlxcdTAwMjYgaGFzX2d1ZXN0X3BvbGwpXFxuQEAgLTc2NSw3ICs3NzUsNyBAQCBzdGF0aWMgc3RydWN0IHN5c2NvcmUga3ZtX3N5c2NvcmUgPSB7XFxuIFxcbiBzdGF0aWMgdm9pZCBrdm1fcHZfZ3Vlc3RfY3B1X3JlYm9vdCh2b2lkICp1bnVzZWQpXFxuIHtcXG4tXFx0a3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKHRydWUpO1xcbitcXHRrdm1fZ3Vlc3RfY3B1X29mZmxpbmUoS1ZNX0dVRVNUX1NIVVRET1dOKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBrdm1fcHZfcmVib290X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbkBAIC03ODksNyArNzk5LDcgQEAgc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBrdm1fcHZfcmVib290X25iID0ge1xcbiAjaWZkZWYgQ09ORklHX0NSQVNIX0RVTVBcXG4gc3RhdGljIHZvaWQga3ZtX2NyYXNoX3NodXRkb3duKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiB7XFxuLVxcdGt2bV9ndWVzdF9jcHVfb2ZmbGluZSh0cnVlKTtcXG4rXFx0a3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKEtWTV9HVUVTVF9TSFVURE9XTik7XFxuIFxcdG5hdGl2ZV9tYWNoaW5lX2NyYXNoX3NodXRkb3duKHJlZ3MpO1xcbiB9XFxuICNlbmRpZlxcbkBAIC05MTEsNiArOTIxLDI2IEBAIGJvb2wga3ZtX3BhcmFfYXZhaWxhYmxlKHZvaWQpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3BhcmFfYXZhaWxhYmxlKTtcXG4gXFxuK3N0YXRpYyB1MzIgX19pbml0IGt2bV9jcHVpZF90aW1pbmdfaW5mb19sZWFmKHZvaWQpXFxuK3tcXG4rXFx0dTMyIGJhc2UgPSBrdm1fY3B1aWRfYmFzZSgpO1xcbitcXG4rXFx0aWYgKCFiYXNlIHx8IGNwdWlkX2VheChiYXNlKSBcXHUwMDNjIChiYXNlIHwgS1ZNX0NQVUlEX1RJTUlOR19JTkZPKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gYmFzZSB8IEtWTV9DUFVJRF9USU1JTkdfSU5GTztcXG4rfVxcbitcXG4rc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQga3ZtX2dldF90c2Nfa2h6KHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGt2bV90c2Nfa2h6X2NwdWlkO1xcbit9XFxuK1xcbitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBrdm1fZ2V0X2NwdV9raHoodm9pZClcXG4re1xcbitcXHRyZXR1cm4ga3ZtX2NwdV9raHpfY3B1aWQ7XFxuK31cXG4rXFxuIHVuc2lnbmVkIGludCBrdm1fYXJjaF9wYXJhX2ZlYXR1cmVzKHZvaWQpXFxuIHtcXG4gXFx0cmV0dXJuIGNwdWlkX2VheChrdm1fY3B1aWRfYmFzZSgpIHwgS1ZNX0NQVUlEX0ZFQVRVUkVTKTtcXG5AQCAtOTYwLDYgKzk5MCw4IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrdm1faW5pdF9wbGF0Zm9ybSh2b2lkKVxcbiBcXHRcXHQubWFza19sbyA9ICh1MzIpKH4oU1pfNEcgLSB0b2x1ZCAtIDEpKSB8IE1UUlJfUEhZU01BU0tfVixcXG4gXFx0XFx0Lm1hc2tfaGkgPSAoQklUX1VMTChib290X2NwdV9kYXRhLng4Nl9waHlzX2JpdHMpIC0gMSkgXFx1MDAzZVxcdTAwM2UgMzIsXFxuIFxcdH07XFxuK1xcdHUzMiB0aW1pbmdfaW5mb19sZWFmLCBhcGljX2toejtcXG4rXFx0Ym9vbCB0c2NfaXNfcmVsaWFibGU7XFxuIFxcbiBcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfR1VFU1RfTUVNX0VOQ1JZUFQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9NSUdSQVRJT05fQ09OVFJPTCkpIHtcXG5AQCAtMTAwNyw3ICsxMDM5LDQ0IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrdm1faW5pdF9wbGF0Zm9ybSh2b2lkKVxcbiBcXHRcXHRcXHR3cm1zcnEoTVNSX0tWTV9NSUdSQVRJT05fQ09OVFJPTCxcXG4gXFx0XFx0XFx0ICAgICAgIEtWTV9NSUdSQVRJT05fUkVBRFkpO1xcbiBcXHR9XFxuLVxcdGt2bWNsb2NrX2luaXQoKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIElmIEtWTSBhZHZlcnRpc2VzIHRoZSBmcmVxdWVuY3kgZGlyZWN0bHkgaW4gQ1BVSUQsIHVzZSB0aGF0IGluc3RlYWRcXG4rXFx0ICogb2YgcmV2ZXJzZS1jYWxjdWxhdGluZyBpdCBmcm9tIHRoZSBLVk0gY2xvY2sgZGF0YSwgb3Igd29yc2UsIHRyeWluZ1xcbitcXHQgKiB0byBjYWxpYnJhdGF0ZSB0aGUgVFNDIHVzaW5nIGFuIGVtdWxhdGVkIGRldmljZS5cXG4rXFx0ICovXFxuK1xcdHRpbWluZ19pbmZvX2xlYWYgPSBrdm1fY3B1aWRfdGltaW5nX2luZm9fbGVhZigpO1xcbitcXHRpZiAodGltaW5nX2luZm9fbGVhZikge1xcbitcXHRcXHRrdm1fdHNjX2toel9jcHVpZCA9IGNwdWlkX2VheCh0aW1pbmdfaW5mb19sZWFmKTtcXG4rXFx0XFx0aWYgKGt2bV90c2Nfa2h6X2NwdWlkKSB7XFxuK1xcdFxcdFxcdHg4Nl9pbml0Lmh5cGVyLmdldF90c2Nfa2h6ID0ga3ZtX2dldF90c2Nfa2h6O1xcbitcXHRcXHRcXHR4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeiA9IGt2bV9nZXRfdHNjX2toejtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogVGhlIGxlYWYgYWxzbyBpbmNsdWRlcyB0aGUgbG9jYWwgQVBJQyBidXMvdGltZXIgZnJlcXVlbmN5LiovXFxuK1xcdFxcdGFwaWNfa2h6ID0gY3B1aWRfZWJ4KHRpbWluZ19pbmZvX2xlYWYpO1xcbitcXHRcXHRpZiAoYXBpY19raHopXFxuK1xcdFxcdFxcdGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHooYXBpY19raHosIFxcXCJLVk0gaHlwZXJ2aXNvclxcXCIpO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQcmVmZXIgQ1BVSUQuMHgxNiBvdmVyIEtWTSdzIFBWIENQVUlEIHdoZW4gcG9zc2libGUsIGFzIHRoZSBiYXNlIENQVVxcbitcXHQgKiBmcmVxdWVuY3kgaXNuJ3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgdGhlIFRTQyBmcmVxdWVuY3kuXFxuK1xcdCAqL1xcbitcXHRrdm1fY3B1X2toel9jcHVpZCA9IF9fY3B1X2toel9mcm9tX2NwdWlkKCk7XFxuK1xcdGlmIChrdm1fY3B1X2toel9jcHVpZClcXG4rXFx0XFx0eDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHogPSBrdm1fZ2V0X2NwdV9raHo7XFxuK1xcbisgICAgICAgIC8qXFxuKyAgICAgICAgICogSWYgdGhlIFRTQyBjb3VudHMgYXQgYSBjb25zdGFudCBmcmVxdWVuY3kgYWNyb3NzIFAvVCBzdGF0ZXMgYW5kIGluXFxuKyAgICAgICAgICogZGVlcCBDLXN0YXRlcywgdHJlYXQgdGhlIFRTQyByZWxpYWJsZSwgYXMgZ3VhcmFudGVlZCBieSBLVk0uXFxuKyAgICAgICAgICovXFxuK1xcdHRzY19pc19yZWxpYWJsZSA9IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05PTlNUT1BfVFNDKTtcXG4rXFx0aWYgKHRzY19pc19yZWxpYWJsZSlcXG4rXFx0XFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfUkVMSUFCTEUpO1xcbitcXG4rXFx0a3ZtY2xvY2tfaW5pdCh0c2NfaXNfcmVsaWFibGUpO1xcbiBcXHR4ODZfcGxhdGZvcm0uYXBpY19wb3N0X2luaXQgPSBrdm1fYXBpY19pbml0O1xcbiBcXG4gXFx0LypcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMgYi9hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suY1xcbmluZGV4IGNiM2QwY2ExZmEyMjVhLi44NDJmMzhjNWY2Y2FhZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suY1xcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jXFxuQEAgLTEyLDcgKzEyLDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hhcmRpcnEuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NwdWhvdHBsdWcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9jbG9jay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFxcdTAwM2VcXG5AQCAtNTQsNiArNTMsOCBAQCBzdGF0aWMgc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICpodmNsb2NrX21lbTtcXG4gREVGSU5FX1BFUl9DUFUoc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICosIGh2X2Nsb2NrX3Blcl9jcHUpO1xcbiBFWFBPUlRfUEVSX0NQVV9TWU1CT0xfR1BMKGh2X2Nsb2NrX3Blcl9jcHUpO1xcbiBcXG4rc3RhdGljIGJvb2wga3ZtY2xvY2tfc3VzcGVuZGVkO1xcbitcXG4gLypcXG4gICogVGhlIHdhbGxjbG9jayBpcyB0aGUgdGltZSBvZiBkYXkgd2hlbiB3ZSBib290ZWQuIFNpbmNlIHRoZW4sIHNvbWUgdGltZSBtYXlcXG4gICogaGF2ZSBlbGFwc2VkIHNpbmNlIHRoZSBoeXBlcnZpc29yIHdyb3RlIHRoZSBkYXRhLiBTbyB3ZSB0cnkgdG8gYWNjb3VudCBmb3JcXG5AQCAtNjEsNiArNjIsNyBAQCBFWFBPUlRfUEVSX0NQVV9TWU1CT0xfR1BMKGh2X2Nsb2NrX3Blcl9jcHUpO1xcbiAgKi9cXG4gc3RhdGljIHZvaWQga3ZtX2dldF93YWxsY2xvY2soc3RydWN0IHRpbWVzcGVjNjQgKm5vdylcXG4ge1xcbitcXHRXQVJOX09OX09OQ0Uoa3ZtY2xvY2tfc3VzcGVuZGVkKTtcXG4gXFx0d3Jtc3JxKG1zcl9rdm1fd2FsbF9jbG9jaywgc2xvd192aXJ0X3RvX3BoeXMoXFx1MDAyNndhbGxfY2xvY2spKTtcXG4gXFx0cHJlZW1wdF9kaXNhYmxlKCk7XFxuIFxcdHB2Y2xvY2tfcmVhZF93YWxsY2xvY2soXFx1MDAyNndhbGxfY2xvY2ssIHRoaXNfY3B1X3B2dGkoKSwgbm93KTtcXG5AQCAtNzIsNiArNzQsMjUgQEAgc3RhdGljIGludCBrdm1fc2V0X3dhbGxjbG9jayhjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqbm93KVxcbiBcXHRyZXR1cm4gLUVOT0RFVjtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQga3ZtX3JlZ2lzdGVyX2Nsb2NrKGNoYXIgKnR4dClcXG4re1xcbitcXHRzdHJ1Y3QgcHZjbG9ja192c3lzY2FsbF90aW1lX2luZm8gKnNyYyA9IHRoaXNfY3B1X2h2Y2xvY2soKTtcXG4rXFx0dTY0IHBhO1xcbitcXG4rXFx0aWYgKCFzcmMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBhID0gc2xvd192aXJ0X3RvX3BoeXMoXFx1MDAyNnNyYy1cXHUwMDNlcHZ0aSkgfCAweDAxVUxMO1xcbitcXHR3cm1zcnEobXNyX2t2bV9zeXN0ZW1fdGltZSwgcGEpO1xcbitcXHRwcl9kZWJ1ZyhcXFwia3ZtLWNsb2NrOiBjcHUgJWQsIG1zciAlbGx4LCAlc1xcXCIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgcGEsIHR4dCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGt2bWNsb2NrX2Rpc2FibGUodm9pZClcXG4re1xcbitcXHRpZiAobXNyX2t2bV9zeXN0ZW1fdGltZSlcXG4rXFx0XFx0bmF0aXZlX3dyaXRlX21zcihtc3Jfa3ZtX3N5c3RlbV90aW1lLCAwKTtcXG4rfVxcbitcXG4gc3RhdGljIHU2NCBrdm1fY2xvY2tfcmVhZCh2b2lkKVxcbiB7XFxuIFxcdHU2NCByZXQ7XFxuQEAgLTExMywxOCArMTM0LDc0IEBAIHN0YXRpYyBub2luc3RyIHU2NCBrdm1fc2NoZWRfY2xvY2tfcmVhZCh2b2lkKVxcbiBcXHRyZXR1cm4gcHZjbG9ja19jbG9ja3NvdXJjZV9yZWFkX25vd2QodGhpc19jcHVfcHZ0aSgpKSAtIGt2bV9zY2hlZF9jbG9ja19vZmZzZXQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fc2NoZWRfY2xvY2tfaW5pdChib29sIHN0YWJsZSlcXG4rc3RhdGljIHZvaWQga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcXG4ge1xcbi1cXHRpZiAoIXN0YWJsZSlcXG4tXFx0XFx0Y2xlYXJfc2NoZWRfY2xvY2tfc3RhYmxlKCk7XFxuLVxcdGt2bV9zY2hlZF9jbG9ja19vZmZzZXQgPSBrdm1fY2xvY2tfcmVhZCgpO1xcbi1cXHRwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2soa3ZtX3NjaGVkX2Nsb2NrX3JlYWQpO1xcbitcXHQvKlxcbitcXHQgKiBTdG9wIGhvc3Qgd3JpdGVzIHRvIGt2bWNsb2NrIGltbWVkaWF0ZWx5IHByaW9yIHRvIHN1c3BlbmQvaGliZXJuYXRlLlxcbitcXHQgKiBJZiB0aGUgc3lzdGVtIGlzIGhpYmVybmF0aW5nLCB0aGVuIGt2bWNsb2NrIHdpbGwgbGlrZWx5IHJlc2lkZSBhdCBhXFxuK1xcdCAqIGRpZmZlcmVudCBwaHlzaWNhbCBhZGRyZXNzIHdoZW4gdGhlIHN5c3RlbSBhd2FrZW5zLCBhbmQgaG9zdCB3cml0ZXNcXG4rXFx0ICogdG8gdGhlIG9sZCBhZGRyZXNzIHByaW9yIHRvIHJlY29uZmlndXJpbmcga3ZtY2xvY2sgd291bGQgY2xvYmJlclxcbitcXHQgKiByYW5kb20gbWVtb3J5LlxcbitcXHQgKi9cXG4rXFx0a3ZtY2xvY2tfc3VzcGVuZGVkID0gdHJ1ZTtcXG4rXFx0a3ZtY2xvY2tfZGlzYWJsZSgpO1xcbit9XFxuIFxcbi1cXHRwcl9pbmZvKFxcXCJrdm0tY2xvY2s6IHVzaW5nIHNjaGVkIG9mZnNldCBvZiAlbGx1IGN5Y2xlc1xcXCIsXFxuLVxcdFxcdGt2bV9zY2hlZF9jbG9ja19vZmZzZXQpO1xcbisjaWZkZWYgQ09ORklHX1NNUFxcbitzdGF0aWMgdm9pZCBrdm1fc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrKHZvaWQpXFxuK3tcXG4rXFx0a3ZtX3JlZ2lzdGVyX2Nsb2NrKFxcXCJzZWNvbmRhcnkgY3B1LCBzdGFydHVwXFxcIik7XFxuK31cXG4rI2VuZGlmXFxuIFxcbi1cXHRCVUlMRF9CVUdfT04oc2l6ZW9mKGt2bV9zY2hlZF9jbG9ja19vZmZzZXQpIFxcdTAwM2VcXG4tXFx0XFx0c2l6ZW9mKCgoc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gKilOVUxMKS1cXHUwMDNlc3lzdGVtX3RpbWUpKTtcXG4rc3RhdGljIHZvaWQga3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcXG4re1xcbitcXHRrdm1jbG9ja19zdXNwZW5kZWQgPSBmYWxzZTtcXG4rXFx0a3ZtX3JlZ2lzdGVyX2Nsb2NrKFxcXCJwcmltYXJ5IGNwdSwgc2NoZWRfY2xvY2sgcmVzdW1lXFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGt2bWNsb2NrX3N1c3BlbmQoc3RydWN0IGNsb2Nrc291cmNlICpjcylcXG4re1xcbitcXHRrdm1jbG9ja19zdXNwZW5kZWQgPSB0cnVlO1xcbitcXHRrdm1jbG9ja19kaXNhYmxlKCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGt2bWNsb2NrX3Jlc3VtZShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKVxcbit7XFxuK1xcdGt2bWNsb2NrX3N1c3BlbmRlZCA9IGZhbHNlO1xcbitcXHRrdm1fcmVnaXN0ZXJfY2xvY2soXFxcInByaW1hcnkgY3B1LCBjbG9ja3NvdXJjZSByZXN1bWVcXFwiKTtcXG4rfVxcbitcXG4rdm9pZCBrdm1jbG9ja19jcHVfYWN0aW9uKGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKVxcbit7XFxuK1xcdHN3aXRjaCAoYWN0aW9uKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBCU1AncyBjbG9jayBpcyBtYW5hZ2VkIHZpYSBjbG9ja3NvdXJjZSBzdXNwZW5kL3Jlc3VtZSxcXG4rXFx0XFx0ICogdG8gZW5zdXJlIGl0J3MgZW5hYmxlZC9kaXNhYmxlZCB3aGVuIHRpbWVrZWVwaW5nIG5lZWRzIGl0XFxuK1xcdFxcdCAqIHRvIGJlLCBlLmcuIGJlZm9yZSByZWFkaW5nIHdhbGxjbG9jayAod2hpY2ggdXNlcyBrdm1jbG9jaykuXFxuK1xcdFxcdCAqL1xcbitcXHRjYXNlIEtWTV9HVUVTVF9CU1BfU1VTUEVORDpcXG4rXFx0Y2FzZSBLVk1fR1VFU1RfQlNQX1JFU1VNRTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgS1ZNX0dVRVNUX0FQX09OTElORTpcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogU2Vjb25kYXJ5IENQVXMgdXNlIGEgZGVkaWNhdGVkIGhvb2sgdG8gZW5hYmxlIGt2bWNsb2NrIGVhcmx5XFxuK1xcdFxcdCAqIGR1cmluZyBicmluZ3VwLCB0aGVyZSdzIG5vdGhpbmcgdG8gYmUgZG9uZSBkdXJpbmcgQ1BVIG9ubGluZVxcbitcXHRcXHQgKiAod2hpY2ggcnVucyBhdCBDUFVIUF9BUF9PTkxJTkVfRFlOKS4gIFdoZW4ga3ZtY2xvY2sgaXMgYmVpbmdcXG4rXFx0XFx0ICogdXNlZCBhcyBzY2hlZF9jbG9jaywga3ZtY2xvY2sgbXVzdCBiZSBlbmFibGVkICp2ZXJ5KiBlYXJseSxcXG4rXFx0XFx0ICogYW5kIGV2ZW4gd2hlbiBrdm1jbG9jayBpcyBcXFwib25seVxcXCIgYmVpbmcgdXNlZCBmb3IgdGhlIG1haW5cXG4rXFx0XFx0ICogY2xvY2tzb3VyY2UsIGl0IHN0aWxsIG5lZWRzIHRvIGJlIGVuYWJsZWQgbG9uZyBiZWZvcmUgdGhlXFxuK1xcdFxcdCAqIGR5bmFtaWMgQ1BVSFAgY2FsbHMgYXJlIG1hZGUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBLVk1fR1VFU1RfQVBfT0ZGTElORTpcXG4rXFx0Y2FzZSBLVk1fR1VFU1RfU0hVVERPV046XFxuK1xcdFxcdGt2bWNsb2NrX2Rpc2FibGUoKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdFdBUk5fT05fT05DRSgxKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4gfVxcbiBcXG4gLypcXG5AQCAtMTM2LDkgKzIxMyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fc2NoZWRfY2xvY2tfaW5pdChib29sIHN0YWJsZSlcXG4gICogcG9sbCBvZiBndWVzdHMgY2FuIGJlIHJ1bm5pbmcgYW5kIHRyb3VibGUgZWFjaCBvdGhlci4gU28gd2UgcHJlc2V0XFxuICAqIGxwaiBoZXJlXFxuICAqL1xcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fZ2V0X3RzY19raHoodm9pZClcXG4rc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQga3ZtY2xvY2tfZ2V0X3RzY19raHoodm9pZClcXG4ge1xcbi1cXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKTtcXG4gXFx0cmV0dXJuIHB2Y2xvY2tfdHNjX2toeih0aGlzX2NwdV9wdnRpKCkpO1xcbiB9XFxuIFxcbkBAIC0xNDcsNyArMjIzLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGt2bV9nZXRfcHJlc2V0X2xwaih2b2lkKVxcbiBcXHR1bnNpZ25lZCBsb25nIGtoejtcXG4gXFx0dTY0IGxwajtcXG4gXFxuLVxcdGtoeiA9IGt2bV9nZXRfdHNjX2toeigpO1xcbitcXHRraHogPSBrdm1jbG9ja19nZXRfdHNjX2toeigpO1xcbiBcXG4gXFx0bHBqID0gKCh1NjQpa2h6ICogMTAwMCk7XFxuIFxcdGRvX2RpdihscGosIEhaKTtcXG5AQCAtMTg1LDQzICsyNjEsMTAgQEAgc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBrdm1fY2xvY2sgPSB7XFxuIFxcdC5mbGFnc1xcdFxcdD0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsXFxuIFxcdC5pZFxcdFxcdD0gQ1NJRF9YODZfS1ZNX0NMSyxcXG4gXFx0LmVuYWJsZVxcdFxcdD0ga3ZtX2NzX2VuYWJsZSxcXG4rXFx0LnN1c3BlbmRcXHQ9IGt2bWNsb2NrX3N1c3BlbmQsXFxuK1xcdC5yZXN1bWVcXHRcXHQ9IGt2bWNsb2NrX3Jlc3VtZSxcXG4gfTtcXG4gXFxuLXN0YXRpYyB2b2lkIGt2bV9yZWdpc3Rlcl9jbG9jayhjaGFyICp0eHQpXFxuLXtcXG4tXFx0c3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICpzcmMgPSB0aGlzX2NwdV9odmNsb2NrKCk7XFxuLVxcdHU2NCBwYTtcXG4tXFxuLVxcdGlmICghc3JjKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHRwYSA9IHNsb3dfdmlydF90b19waHlzKFxcdTAwMjZzcmMtXFx1MDAzZXB2dGkpIHwgMHgwMVVMTDtcXG4tXFx0d3Jtc3JxKG1zcl9rdm1fc3lzdGVtX3RpbWUsIHBhKTtcXG4tXFx0cHJfZGVidWcoXFxcImt2bS1jbG9jazogY3B1ICVkLCBtc3IgJWxseCwgJXNcXFwiLCBzbXBfcHJvY2Vzc29yX2lkKCksIHBhLCB0eHQpO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBrdm1fc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxcbi17XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIGt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXFxuLXtcXG4tXFx0a3ZtX3JlZ2lzdGVyX2Nsb2NrKFxcXCJwcmltYXJ5IGNwdSBjbG9jaywgcmVzdW1lXFxcIik7XFxuLX1cXG4tXFxuLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUNcXG4tc3RhdGljIHZvaWQga3ZtX3NldHVwX3NlY29uZGFyeV9jbG9jayh2b2lkKVxcbi17XFxuLVxcdGt2bV9yZWdpc3Rlcl9jbG9jayhcXFwic2Vjb25kYXJ5IGNwdSBjbG9ja1xcXCIpO1xcbi19XFxuLSNlbmRpZlxcbi1cXG4tdm9pZCBrdm1jbG9ja19kaXNhYmxlKHZvaWQpXFxuLXtcXG4tXFx0aWYgKG1zcl9rdm1fc3lzdGVtX3RpbWUpXFxuLVxcdFxcdG5hdGl2ZV93cml0ZV9tc3IobXNyX2t2bV9zeXN0ZW1fdGltZSwgMCk7XFxuLX1cXG4tXFxuIHN0YXRpYyB2b2lkIF9faW5pdCBrdm1jbG9ja19pbml0X21lbSh2b2lkKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbmNwdXM7XFxuQEAgLTMwOCw5ICszNTEsMzUgQEAgc3RhdGljIGludCBrdm1jbG9ja19zZXR1cF9wZXJjcHUodW5zaWduZWQgaW50IGNwdSlcXG4gXFx0cmV0dXJuIHAgPyAwIDogLUVOT01FTTtcXG4gfVxcbiBcXG4tdm9pZCBfX2luaXQga3ZtY2xvY2tfaW5pdCh2b2lkKVxcbitzdGF0aWMgX19pbml0IHZvaWQga3ZtX3NjaGVkX2Nsb2NrX2luaXQoYm9vbCBzdGFibGUpXFxuIHtcXG4tXFx0dTggZmxhZ3M7XFxuK1xcdC8qIEVuc3VyZSB0aGUgb2Zmc2V0IGlzIGNvbmZpZ3VyZWQgYmVmb3JlIG1ha2luZyBrdm1jbG9jayB2aXNpYmxlISAqL1xcbitcXHRrdm1fc2NoZWRfY2xvY2tfb2Zmc2V0ID0ga3ZtX2Nsb2NrX3JlYWQoKTtcXG4rXFxuK1xcdGlmIChfX3BhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayhrdm1fc2NoZWRfY2xvY2tfcmVhZCwgc3RhYmxlLFxcbitcXHRcXHRcXHRcXHQgICAgICAga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBCU1AncyBjbG9jayBpcyBtYW5hZ2VkIHZpYSBkZWRpY2F0ZWQgc2NoZWRfY2xvY2sgc2F2ZS9yZXN0b3JlXFxuK1xcdCAqIGhvb2tzIHdoZW4ga3ZtY2xvY2sgaXMgdXNlZCBhcyBzY2hlZF9jbG9jaywgYXMgc2NoZWRfY2xvY2sgbmVlZHMgdG9cXG4rXFx0ICogYmUga2VwdCBhbGl2ZSB1bnRpbCB0aGUgdmVyeSBlbmQgb2Ygc3VzcGVuZCBlbnRyeSwgYW5kIHJlc3RvcmVkIGFzXFxuK1xcdCAqIHF1aWNrbHkgYXMgcG9zc2libGUgYWZ0ZXIgcmVzdW1lLlxcbitcXHQgKi9cXG4rXFx0a3ZtX2Nsb2NrLnN1c3BlbmQgPSBOVUxMO1xcbitcXHRrdm1fY2xvY2sucmVzdW1lID0gTlVMTDtcXG4rXFxuK1xcdHByX2luZm8oXFxcImt2bS1jbG9jazogdXNpbmcgc2NoZWQgb2Zmc2V0IG9mICVsbHUgY3ljbGVzXFxcIixcXG4rXFx0XFx0a3ZtX3NjaGVkX2Nsb2NrX29mZnNldCk7XFxuK1xcbitcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKGt2bV9zY2hlZF9jbG9ja19vZmZzZXQpIFxcdTAwM2VcXG4rXFx0XFx0c2l6ZW9mKCgoc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gKilOVUxMKS1cXHUwMDNlc3lzdGVtX3RpbWUpKTtcXG4rfVxcbitcXG4rdm9pZCBfX2luaXQga3ZtY2xvY2tfaW5pdChib29sIHByZWZlcl90c2MpXFxuK3tcXG4rXFx0Ym9vbCBzdGFibGUgPSBmYWxzZTtcXG4gXFxuIFxcdGlmICgha3ZtX3BhcmFfYXZhaWxhYmxlKCkgfHwgIWt2bWNsb2NrKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTMzNCwzOCArNDAzLDQxIEBAIHZvaWQgX19pbml0IGt2bWNsb2NrX2luaXQodm9pZClcXG4gXFx0XFx0bXNyX2t2bV9zeXN0ZW1fdGltZSwgbXNyX2t2bV93YWxsX2Nsb2NrKTtcXG4gXFxuIFxcdHRoaXNfY3B1X3dyaXRlKGh2X2Nsb2NrX3Blcl9jcHUsIFxcdTAwMjZodl9jbG9ja19ib290WzBdKTtcXG4tXFx0a3ZtX3JlZ2lzdGVyX2Nsb2NrKFxcXCJwcmltYXJ5IGNwdSBjbG9ja1xcXCIpO1xcbitcXHRrdm1fcmVnaXN0ZXJfY2xvY2soXFxcInByaW1hcnkgY3B1LCBvbmxpbmVcXFwiKTtcXG4gXFx0cHZjbG9ja19zZXRfcHZ0aV9jcHUwX3ZhKGh2X2Nsb2NrX2Jvb3QpO1xcbiBcXG4tXFx0aWYgKGt2bV9wYXJhX2hhc19mZWF0dXJlKEtWTV9GRUFUVVJFX0NMT0NLU09VUkNFX1NUQUJMRV9CSVQpKVxcbitcXHRpZiAoa3ZtX3BhcmFfaGFzX2ZlYXR1cmUoS1ZNX0ZFQVRVUkVfQ0xPQ0tTT1VSQ0VfU1RBQkxFX0JJVCkpIHtcXG4gXFx0XFx0cHZjbG9ja19zZXRfZmxhZ3MoUFZDTE9DS19UU0NfU1RBQkxFX0JJVCk7XFxuIFxcbi1cXHRmbGFncyA9IHB2Y2xvY2tfcmVhZF9mbGFncyhcXHUwMDI2aHZfY2xvY2tfYm9vdFswXS5wdnRpKTtcXG4tXFx0a3ZtX3NjaGVkX2Nsb2NrX2luaXQoZmxhZ3MgXFx1MDAyNiBQVkNMT0NLX1RTQ19TVEFCTEVfQklUKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQ2hlY2sgaWYgdGhlIGNsb2NrIGlzIHN0YWJsZSAqYWZ0ZXIqIG1hcmtpbmcgVFNDX1NUQUJMRSBhcyBhXFxuK1xcdFxcdCAqIHZhbGlkIGZsYWcuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzdGFibGUgPSBwdmNsb2NrX3JlYWRfZmxhZ3MoXFx1MDAyNmh2X2Nsb2NrX2Jvb3RbMF0ucHZ0aSkgXFx1MDAyNlxcbitcXHRcXHRcXHQgUFZDTE9DS19UU0NfU1RBQkxFX0JJVDtcXG4rXFx0fVxcbiBcXG4tXFx0eDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MgPSBrdm1fZ2V0X3RzY19raHo7XFxuLVxcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ID0ga3ZtX2dldF90c2Nfa2h6O1xcbitcXG4rXFx0aWYgKCF4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeilcXG4rXFx0XFx0eDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHogPSBrdm1jbG9ja19nZXRfdHNjX2toejtcXG4rXFx0aWYgKCF4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeilcXG4rXFx0XFx0eDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHogPSBrdm1jbG9ja19nZXRfdHNjX2toejtcXG4gXFx0eDg2X3BsYXRmb3JtLmdldF93YWxsY2xvY2sgPSBrdm1fZ2V0X3dhbGxjbG9jaztcXG4gXFx0eDg2X3BsYXRmb3JtLnNldF93YWxsY2xvY2sgPSBrdm1fc2V0X3dhbGxjbG9jaztcXG4tI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQ1xcbisjaWZkZWYgQ09ORklHX1NNUFxcbiBcXHR4ODZfY3B1aW5pdC5lYXJseV9wZXJjcHVfY2xvY2tfaW5pdCA9IGt2bV9zZXR1cF9zZWNvbmRhcnlfY2xvY2s7XFxuICNlbmRpZlxcbi1cXHR4ODZfcGxhdGZvcm0uc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSA9IGt2bV9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlO1xcbi1cXHR4ODZfcGxhdGZvcm0ucmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSA9IGt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlO1xcbiBcXHRrdm1fZ2V0X3ByZXNldF9scGooKTtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIFg4Nl9GRUFUVVJFX05PTlNUT1BfVFNDIGlzIFRTQyBydW5zIGF0IGNvbnN0YW50IHJhdGVcXG4tXFx0ICogd2l0aCBQL1Qgc3RhdGVzIGFuZCBkb2VzIG5vdCBzdG9wIGluIGRlZXAgQy1zdGF0ZXMuXFxuLVxcdCAqXFxuLVxcdCAqIEludmFyaWFudCBUU0MgZXhwb3NlZCBieSBob3N0IG1lYW5zIGt2bWNsb2NrIGlzIG5vdCBuZWNlc3Nhcnk6XFxuLVxcdCAqIGNhbiB1c2UgVFNDIGFzIGNsb2Nrc291cmNlLlxcbi1cXHQgKlxcbitcXHQgKiBJZiBUU0MgaXMgcHJlZmVycmVkIG92ZXIga3ZtbG9jaywgZHJvcCBrdm1jbG9jaydzIHJhdGluZyBzbyB0aGF0IFRTQ1xcbitcXHQgKiBpcyBjaG9zZW4gYXMgdGhlIGNsb2Nrc291cmNlIChidXQgc3RpbGwgcmVnaXN0ZXIga3ZtY2xvY2sgaW4gY2FzZVxcbitcXHQgKiB0aGUga2VybmVsIGRvZXNuJ3Qgd2FudCB0byB1c2UgVFNDIGZvciB3aGF0ZXZlciByZWFzb24pLlxcbiBcXHQgKi9cXG4tXFx0aWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTk9OU1RPUF9UU0MpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhY2hlY2tfdHNjX3Vuc3RhYmxlKCkpXFxuK1xcdGlmIChwcmVmZXJfdHNjKVxcbiBcXHRcXHRrdm1fY2xvY2sucmF0aW5nID0gMjk5O1xcbitcXHRlbHNlXFxuK1xcdFxcdGt2bV9zY2hlZF9jbG9ja19pbml0KHN0YWJsZSk7XFxuIFxcbiBcXHRjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeihcXHUwMDI2a3ZtX2Nsb2NrLCBOU0VDX1BFUl9TRUMpO1xcbiBcXHRwdl9pbmZvLm5hbWUgPSBcXFwiS1ZNXFxcIjtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3B2Y2xvY2suYyBiL2FyY2gveDg2L2tlcm5lbC9wdmNsb2NrLmNcXG5pbmRleCBiM2Y4MTM3OWMyZmMwNi4uOGQwOTg4NDFhMjI1ZjYgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva2VybmVsL3B2Y2xvY2suY1xcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9wdmNsb2NrLmNcXG5AQCAtMTYsMTEgKzE2LDEyIEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vcHZjbG9jay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3ZndG9kLmhcXHUwMDNlXFxuIFxcbi1zdGF0aWMgdTggdmFsaWRfZmxhZ3MgX19yZWFkX21vc3RseSA9IDA7XFxuLXN0YXRpYyBzdHJ1Y3QgcHZjbG9ja192c3lzY2FsbF90aW1lX2luZm8gKnB2dGlfY3B1MF92YSBfX3JlYWRfbW9zdGx5O1xcbitzdGF0aWMgdTggdmFsaWRfZmxhZ3MgX19yb19hZnRlcl9pbml0ID0gMDtcXG4rc3RhdGljIHN0cnVjdCBwdmNsb2NrX3ZzeXNjYWxsX3RpbWVfaW5mbyAqcHZ0aV9jcHUwX3ZhIF9fcm9fYWZ0ZXJfaW5pdDtcXG4gXFxuLXZvaWQgcHZjbG9ja19zZXRfZmxhZ3ModTggZmxhZ3MpXFxuK3ZvaWQgX19pbml0IHB2Y2xvY2tfc2V0X2ZsYWdzKHU4IGZsYWdzKVxcbiB7XFxuK1xcdFdBUk5fT04odmFsaWRfZmxhZ3MpO1xcbiBcXHR2YWxpZF9mbGFncyA9IGZsYWdzO1xcbiB9XFxuIFxcbkBAIC0xNTMsNyArMTU0LDcgQEAgdm9pZCBwdmNsb2NrX3JlYWRfd2FsbGNsb2NrKHN0cnVjdCBwdmNsb2NrX3dhbGxfY2xvY2sgKndhbGxfY2xvY2ssXFxuIFxcdHNldF9ub3JtYWxpemVkX3RpbWVzcGVjNjQodHMsIG5vdy50dl9zZWMsIG5vdy50dl9uc2VjKTtcXG4gfVxcbiBcXG4tdm9pZCBwdmNsb2NrX3NldF9wdnRpX2NwdTBfdmEoc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICpwdnRpKVxcbit2b2lkIF9faW5pdCBwdmNsb2NrX3NldF9wdnRpX2NwdTBfdmEoc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICpwdnRpKVxcbiB7XFxuIFxcdFdBUk5fT04odmNsb2NrX3dhc191c2VkKFZEU09fQ0xPQ0tNT0RFX1BWQ0xPQ0spKTtcXG4gXFx0cHZ0aV9jcHUwX3ZhID0gcHZ0aTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RzYy5jIGIvYXJjaC94ODYva2VybmVsL3RzYy5jXFxuaW5kZXggY2UxMGFlNGIyOThiNzkuLjU2NGJlNGZhYTVhMGJiIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC90c2MuY1xcbisrKyBiL2FyY2gveDg2L2tlcm5lbC90c2MuY1xcbkBAIC0zNCw2ICszNCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vdG9wb2xvZ3kuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS91di91di5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3Nldi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL3RkeC5oXFx1MDAzZVxcbiBcXG4gdW5zaWduZWQgaW50IF9fcmVhZF9tb3N0bHkgY3B1X2toejtcXHQvKiBUU0MgY2xvY2tzIC8gdXNlYywgbm90IHVzZWQgaGVyZSAqL1xcbiBFWFBPUlRfU1lNQk9MKGNwdV9raHopO1xcbkBAIC0yNzksMTUgKzI4MCwyOCBAQCBib29sIHVzaW5nX25hdGl2ZV9zY2hlZF9jbG9jayh2b2lkKVxcbiBcXHRyZXR1cm4gc3RhdGljX2NhbGxfcXVlcnkocHZfc2NoZWRfY2xvY2spID09IG5hdGl2ZV9zY2hlZF9jbG9jaztcXG4gfVxcbiBcXG4tdm9pZCBwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodTY0ICgqZnVuYykodm9pZCkpXFxuK2ludCBfX2luaXQgX19wYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodTY0ICgqZnVuYykodm9pZCksIGJvb2wgc3RhYmxlLFxcbitcXHRcXHRcXHRcXHQgICAgICB2b2lkICgqc2F2ZSkodm9pZCksIHZvaWQgKCpyZXN0b3JlKSh2b2lkKSlcXG4ge1xcbitcXHQvKlxcbitcXHQgKiBEb24ndCByZXBsYWNlIFRTQyB3aXRoIGEgUFYgY2xvY2sgd2hlbiBydW5uaW5nIGFzIGEgQ29DbyBndWVzdCBhbmRcXG4rXFx0ICogdGhlIFRTQyBpcyBzZWN1cmUvdHJ1c3RlZDsgUFYgY2xvY2tzIGFyZSBlbXVsYXRlZCBieSB0aGUgaHlwZXJ2aXNvcixcXG4rXFx0ICogd2hpY2ggaXNuJ3QgaW4gdGhlIGd1ZXN0J3MgVENCLlxcbitcXHQgKi9cXG4rXFx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0dVRVNUX1NOUF9TRUNVUkVfVFNDKSB8fFxcbitcXHQgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXFxuK1xcdFxcdHJldHVybiAtRVBFUk07XFxuK1xcbitcXHRpZiAoIXN0YWJsZSlcXG4rXFx0XFx0Y2xlYXJfc2NoZWRfY2xvY2tfc3RhYmxlKCk7XFxuK1xcbiBcXHRzdGF0aWNfY2FsbF91cGRhdGUocHZfc2NoZWRfY2xvY2ssIGZ1bmMpO1xcbitcXHR4ODZfcGxhdGZvcm0uc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSA9IHNhdmU7XFxuK1xcdHg4Nl9wbGF0Zm9ybS5yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlID0gcmVzdG9yZTtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gI2Vsc2VcXG4gdTY0IHNjaGVkX2Nsb2NrX25vaW5zdHIodm9pZCkgX19hdHRyaWJ1dGVfXygoYWxpYXMoXFxcIm5hdGl2ZV9zY2hlZF9jbG9ja1xcXCIpKSk7XFxuLVxcbi1ib29sIHVzaW5nX25hdGl2ZV9zY2hlZF9jbG9jayh2b2lkKSB7IHJldHVybiB0cnVlOyB9XFxuLXZvaWQgcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKHU2NCAoKmZ1bmMpKHZvaWQpKSB7IH1cXG4gI2VuZGlmXFxuIFxcbiBub3RyYWNlIHU2NCBzY2hlZF9jbG9jayh2b2lkKVxcbkBAIC02NDUsNDYgKzY1OSw2OCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBxdWlja19waXRfY2FsaWJyYXRlKHZvaWQpXFxuIFxcdHJldHVybiBkZWx0YTtcXG4gfVxcbiBcXG4raW50IGNwdWlkX2dldF90c2NfaW5mbyhzdHJ1Y3QgY3B1aWRfdHNjX2luZm8gKmluZm8pXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGVjeF9oeiwgZWR4O1xcbitcXG4rXFx0aWYgKGJvb3RfY3B1X2RhdGEuY3B1aWRfbGV2ZWwgXFx1MDAzYyBDUFVJRF9MRUFGX1RTQylcXG4rXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcbitcXHQvKiBDUFVJRCAxNUggVFNDL0NyeXN0YWwgcmF0aW8sIHBsdXMgb3B0aW9uYWxseSBDcnlzdGFsIEh6ICovXFxuK1xcdGNwdWlkKENQVUlEX0xFQUZfVFNDLCBcXHUwMDI2aW5mby1cXHUwMDNlZGVub21pbmF0b3IsIFxcdTAwMjZpbmZvLVxcdTAwM2VudW1lcmF0b3IsIFxcdTAwMjZlY3hfaHosIFxcdTAwMjZlZHgpO1xcbitcXG4rXFx0aWYgKCFpbmZvLVxcdTAwM2VkZW5vbWluYXRvciB8fCAhaW5mby1cXHUwMDNlbnVtZXJhdG9yKVxcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE5vdGU6IHNvbWUgQ1BVcyBwcm92aWRlIHRoZSBtdWx0aXBsaWVyIGluZm9ybWF0aW9uLCBidXQgbm90IHRoZSBjb3JlXFxuK1xcdCAqIGNyeXN0YWwgZnJlcXVlbmN5LiAgVGhlIG11bHRpcGxpZXIgaW5mb3JtYXRpb24gaXMgc3RpbGwgdXNlZnVsIGZvclxcbitcXHQgKiBzdWNoIENQVXMsIGFzIHRoZSBjcnlzdGFsIGZyZXF1ZW5jeSBjYW4gYmUgZ2xlYW5lZCBmcm9tIENQVUlELjB4MTYuXFxuK1xcdCAqL1xcbitcXHRpbmZvLVxcdTAwM2VjcnlzdGFsX2toeiA9IGVjeF9oeiAvIDEwMDA7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbit1bnNpZ25lZCBpbnQgX19jcHVfa2h6X2Zyb21fY3B1aWQodm9pZClcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgZWF4X2Jhc2VfbWh6LCBlYngsIGVjeCwgZWR4O1xcbitcXG4rXFx0aWYgKGJvb3RfY3B1X2RhdGEuY3B1aWRfbGV2ZWwgXFx1MDAzYyBDUFVJRF9MRUFGX0ZSRVEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Y3B1aWQoQ1BVSURfTEVBRl9GUkVRLCBcXHUwMDI2ZWF4X2Jhc2VfbWh6LCBcXHUwMDI2ZWJ4LCBcXHUwMDI2ZWN4LCBcXHUwMDI2ZWR4KTtcXG4rXFxuK1xcdHJldHVybiBlYXhfYmFzZV9taHogKiAxMDAwO1xcbit9XFxuK1xcbiAvKipcXG4gICogbmF0aXZlX2NhbGlicmF0ZV90c2MgLSBkZXRlcm1pbmUgVFNDIGZyZXF1ZW5jeVxcbiAgKiBEZXRlcm1pbmUgVFNDIGZyZXF1ZW5jeSB2aWEgQ1BVSUQsIGVsc2UgcmV0dXJuIDAuXFxuICAqL1xcbi11bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfdHNjKHZvaWQpXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfdHNjKHZvaWQpXFxuIHtcXG4tXFx0dW5zaWduZWQgaW50IGVheF9kZW5vbWluYXRvciwgZWJ4X251bWVyYXRvciwgZWN4X2h6LCBlZHg7XFxuLVxcdHVuc2lnbmVkIGludCBjcnlzdGFsX2toejtcXG4rXFx0c3RydWN0IGNwdWlkX3RzY19pbmZvIGluZm87XFxuIFxcbiBcXHRpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKGJvb3RfY3B1X2RhdGEuY3B1aWRfbGV2ZWwgXFx1MDAzYyBDUFVJRF9MRUFGX1RTQylcXG4rXFx0aWYgKGNwdWlkX2dldF90c2NfaW5mbyhcXHUwMDI2aW5mbykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0ZWF4X2Rlbm9taW5hdG9yID0gZWJ4X251bWVyYXRvciA9IGVjeF9oeiA9IGVkeCA9IDA7XFxuLVxcbi1cXHQvKiBDUFVJRCAxNUggVFNDL0NyeXN0YWwgcmF0aW8sIHBsdXMgb3B0aW9uYWxseSBDcnlzdGFsIEh6ICovXFxuLVxcdGNwdWlkKENQVUlEX0xFQUZfVFNDLCBcXHUwMDI2ZWF4X2Rlbm9taW5hdG9yLCBcXHUwMDI2ZWJ4X251bWVyYXRvciwgXFx1MDAyNmVjeF9oeiwgXFx1MDAyNmVkeCk7XFxuLVxcbi1cXHRpZiAoZWJ4X251bWVyYXRvciA9PSAwIHx8IGVheF9kZW5vbWluYXRvciA9PSAwKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdGNyeXN0YWxfa2h6ID0gZWN4X2h6IC8gMTAwMDtcXG4tXFxuIFxcdC8qXFxuIFxcdCAqIERlbnZlcnRvbiBTb0NzIGRvbid0IHJlcG9ydCBjcnlzdGFsIGNsb2NrLCBhbmQgYWxzbyBkb24ndCBzdXBwb3J0XFxuIFxcdCAqIENQVUlEX0xFQUZfRlJFUSBmb3IgdGhlIGNhbGN1bGF0aW9uIGJlbG93LCBzbyBoYXJkY29kZSB0aGUgMjVNSHpcXG4gXFx0ICogY3J5c3RhbCBjbG9jay5cXG4gXFx0ICovXFxuLVxcdGlmIChjcnlzdGFsX2toeiA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdGJvb3RfY3B1X2RhdGEueDg2X3ZmbSA9PSBJTlRFTF9BVE9NX0dPTERNT05UX0QpXFxuLVxcdFxcdGNyeXN0YWxfa2h6ID0gMjUwMDA7XFxuK1xcdGlmICghaW5mby5jcnlzdGFsX2toeiBcXHUwMDI2XFx1MDAyNiBib290X2NwdV9kYXRhLng4Nl92Zm0gPT0gSU5URUxfQVRPTV9HT0xETU9OVF9EKVxcbitcXHRcXHRpbmZvLmNyeXN0YWxfa2h6ID0gMjUwMDA7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBUU0MgZnJlcXVlbmN5IHJlcG9ydGVkIGRpcmVjdGx5IGJ5IENQVUlEIGlzIGEgXFxcImhhcmR3YXJlIHJlcG9ydGVkXFxcIlxcbiBcXHQgKiBmcmVxdWVuY3kgYW5kIGlzIHRoZSBtb3N0IGFjY3VyYXRlIG9uZSBzbyBmYXIgd2UgaGF2ZS4gVGhpc1xcbiBcXHQgKiBpcyBjb25zaWRlcmVkIGEga25vd24gZnJlcXVlbmN5LlxcbiBcXHQgKi9cXG4tXFx0aWYgKGNyeXN0YWxfa2h6ICE9IDApXFxuK1xcdGlmIChpbmZvLmNyeXN0YWxfa2h6KVxcbiBcXHRcXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKTtcXG4gXFxuIFxcdC8qXFxuQEAgLTY5MiwxNSArNzI4LDEwIEBAIHVuc2lnbmVkIGxvbmcgbmF0aXZlX2NhbGlicmF0ZV90c2Modm9pZClcXG4gXFx0ICogY2xvY2ssIGJ1dCB3ZSBjYW4gZWFzaWx5IGNhbGN1bGF0ZSBpdCB0byBhIGhpZ2ggZGVncmVlIG9mIGFjY3VyYWN5XFxuIFxcdCAqIGJ5IGNvbnNpZGVyaW5nIHRoZSBjcnlzdGFsIHJhdGlvIGFuZCB0aGUgQ1BVIHNwZWVkLlxcbiBcXHQgKi9cXG4tXFx0aWYgKGNyeXN0YWxfa2h6ID09IDAgXFx1MDAyNlxcdTAwMjYgYm9vdF9jcHVfZGF0YS5jcHVpZF9sZXZlbCBcXHUwMDNlPSBDUFVJRF9MRUFGX0ZSRVEpIHtcXG4tXFx0XFx0dW5zaWduZWQgaW50IGVheF9iYXNlX21oeiwgZWJ4LCBlY3gsIGVkeDtcXG4rXFx0aWYgKCFpbmZvLmNyeXN0YWxfa2h6KVxcbitcXHRcXHRpbmZvLmNyeXN0YWxfa2h6ID0gX19jcHVfa2h6X2Zyb21fY3B1aWQoKSAqIGluZm8uZGVub21pbmF0b3IgLyBpbmZvLm51bWVyYXRvcjtcXG4gXFxuLVxcdFxcdGNwdWlkKENQVUlEX0xFQUZfRlJFUSwgXFx1MDAyNmVheF9iYXNlX21oeiwgXFx1MDAyNmVieCwgXFx1MDAyNmVjeCwgXFx1MDAyNmVkeCk7XFxuLVxcdFxcdGNyeXN0YWxfa2h6ID0gZWF4X2Jhc2VfbWh6ICogMTAwMCAqXFxuLVxcdFxcdFxcdGVheF9kZW5vbWluYXRvciAvIGVieF9udW1lcmF0b3I7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChjcnlzdGFsX2toeiA9PSAwKVxcbitcXHRpZiAoIWluZm8uY3J5c3RhbF9raHopXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0LypcXG5AQCAtNzEwLDQxICs3NDEsMzAgQEAgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX3RzYyh2b2lkKVxcbiBcXHRpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmZtID09IElOVEVMX0FUT01fR09MRE1PTlQpXFxuIFxcdFxcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTtcXG4gXFxuLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUNcXG4gXFx0LypcXG4gXFx0ICogVGhlIGxvY2FsIEFQSUMgYXBwZWFycyB0byBiZSBmZWQgYnkgdGhlIGNvcmUgY3J5c3RhbCBjbG9ja1xcbiBcXHQgKiAod2hpY2ggc291bmRzIGVudGlyZWx5IHNlbnNpYmxlKS4gV2UgY2FuIHNldCB0aGUgZ2xvYmFsXFxuIFxcdCAqIGxhcGljX3RpbWVyX3BlcmlvZCBoZXJlIHRvIGF2b2lkIGhhdmluZyB0byBjYWxpYnJhdGUgdGhlIEFQSUNcXG4gXFx0ICogdGltZXIgbGF0ZXIuXFxuIFxcdCAqL1xcbi1cXHRsYXBpY190aW1lcl9wZXJpb2QgPSBjcnlzdGFsX2toeiAqIDEwMDAgLyBIWjtcXG4tI2VuZGlmXFxuK1xcdGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHooaW5mby5jcnlzdGFsX2toeiwgXFxcIkNQVUlEIDB4MTUvMHgxNlxcXCIpO1xcbiBcXG4tXFx0cmV0dXJuIGNyeXN0YWxfa2h6ICogZWJ4X251bWVyYXRvciAvIGVheF9kZW5vbWluYXRvcjtcXG4rXFx0cmV0dXJuIGluZm8uY3J5c3RhbF9raHogKiBpbmZvLm51bWVyYXRvciAvIGluZm8uZGVub21pbmF0b3I7XFxuIH1cXG4gXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9raHpfZnJvbV9jcHVpZCh2b2lkKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCBlYXhfYmFzZV9taHosIGVieF9tYXhfbWh6LCBlY3hfYnVzX21oeiwgZWR4O1xcbi1cXG4gXFx0aWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVMKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmIChib290X2NwdV9kYXRhLmNwdWlkX2xldmVsIFxcdTAwM2MgQ1BVSURfTEVBRl9GUkVRKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdGVheF9iYXNlX21oeiA9IGVieF9tYXhfbWh6ID0gZWN4X2J1c19taHogPSBlZHggPSAwO1xcbi1cXG4tXFx0Y3B1aWQoQ1BVSURfTEVBRl9GUkVRLCBcXHUwMDI2ZWF4X2Jhc2VfbWh6LCBcXHUwMDI2ZWJ4X21heF9taHosIFxcdTAwMjZlY3hfYnVzX21oeiwgXFx1MDAyNmVkeCk7XFxuLVxcbi1cXHRyZXR1cm4gZWF4X2Jhc2VfbWh6ICogMTAwMDtcXG4rXFx0cmV0dXJuIF9fY3B1X2toel9mcm9tX2NwdWlkKCk7XFxuIH1cXG4gXFxuIC8qXFxuICAqIGNhbGlicmF0ZSBjcHUgdXNpbmcgcGl0LCBocGV0LCBhbmQgcHRpbWVyIG1ldGhvZHMuIFRoZXkgYXJlIGF2YWlsYWJsZVxcbiAgKiBsYXRlciBpbiBib290IGFmdGVyIGFjcGkgaXMgaW5pdGlhbGl6ZWQuXFxuICAqL1xcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwaXRfaHBldF9wdGltZXJfY2FsaWJyYXRlX2NwdSh2b2lkKVxcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX2NwdV9sYXRlKHZvaWQpXFxuIHtcXG4gXFx0dTY0IHRzYzEsIHRzYzIsIGRlbHRhLCByZWYxLCByZWYyO1xcbiBcXHR1bnNpZ25lZCBsb25nIHRzY19waXRfbWluID0gVUxPTkdfTUFYLCB0c2NfcmVmX21pbiA9IFVMT05HX01BWDtcXG5AQCAtODk2LDcgKzkxNiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBpdF9ocGV0X3B0aW1lcl9jYWxpYnJhdGVfY3B1KHZvaWQpXFxuIC8qKlxcbiAgKiBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSAtIGNhbiBjYWxpYnJhdGUgdGhlIGNwdSBlYXJseSBpbiBib290XFxuICAqL1xcbi11bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KHZvaWQpXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KHZvaWQpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncywgZmFzdF9jYWxpYnJhdGUgPSBjcHVfa2h6X2Zyb21fY3B1aWQoKTtcXG4gXFxuQEAgLTkxMCwyMCArOTMwLDYgQEAgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSh2b2lkKVxcbiBcXHRyZXR1cm4gZmFzdF9jYWxpYnJhdGU7XFxuIH1cXG4gXFxuLVxcbi0vKipcXG4tICogbmF0aXZlX2NhbGlicmF0ZV9jcHUgLSBjYWxpYnJhdGUgdGhlIGNwdVxcbi0gKi9cXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgbmF0aXZlX2NhbGlicmF0ZV9jcHUodm9pZClcXG4te1xcbi1cXHR1bnNpZ25lZCBsb25nIHRzY19mcmVxID0gbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHkoKTtcXG4tXFxuLVxcdGlmICghdHNjX2ZyZXEpXFxuLVxcdFxcdHRzY19mcmVxID0gcGl0X2hwZXRfcHRpbWVyX2NhbGlicmF0ZV9jcHUoKTtcXG4tXFxuLVxcdHJldHVybiB0c2NfZnJlcTtcXG4tfVxcbi1cXG4gdm9pZCByZWNhbGlicmF0ZV9jcHVfa2h6KHZvaWQpXFxuIHtcXG4gI2lmbmRlZiBDT05GSUdfU01QXFxuQEAgLTkzMiw4ICs5MzgsMTMgQEAgdm9pZCByZWNhbGlicmF0ZV9jcHVfa2h6KHZvaWQpXFxuIFxcdGlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1RTQykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGNwdV9raHogPSB4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX2NwdSgpO1xcbi1cXHR0c2Nfa2h6ID0geDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MoKTtcXG4rXFx0aWYgKFdBUk5fT05fT05DRShjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGNwdV9raHogPSBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSgpO1xcbitcXHRpZiAoIWNwdV9raHopXFxuK1xcdFxcdGNwdV9raHogPSBuYXRpdmVfY2FsaWJyYXRlX2NwdV9sYXRlKCk7XFxuK1xcdHRzY19raHogPSBuYXRpdmVfY2FsaWJyYXRlX3RzYygpO1xcbiBcXHRpZiAodHNjX2toeiA9PSAwKVxcbiBcXHRcXHR0c2Nfa2h6ID0gY3B1X2toejtcXG4gXFx0ZWxzZSBpZiAoYWJzKGNwdV9raHogLSB0c2Nfa2h6KSAqIDEwIFxcdTAwM2UgdHNjX2toeilcXG5AQCAtOTQyLDE0ICs5NTMsMjIgQEAgdm9pZCByZWNhbGlicmF0ZV9jcHVfa2h6KHZvaWQpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBjcHVfa2h6X29sZCwgY3B1X2toeik7XFxuICNlbmRpZlxcbiB9XFxuLUVYUE9SVF9TWU1CT0xfR1BMKHJlY2FsaWJyYXRlX2NwdV9raHopO1xcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHJlY2FsaWJyYXRlX2NwdV9raHosIFxcXCJwNC1jbG9ja21vZCxwb3dlcm5vdy1rN1xcXCIpO1xcbiBcXG4gXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgY3ljMm5zX3N1c3BlbmQ7XFxuIFxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdHNjX2lzX3NhdmVfcmVzdG9yZV9uZWVkZWQodm9pZClcXG4re1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCF1c2luZ19uYXRpdmVfc2NoZWRfY2xvY2soKSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiBzdGF0aWNfYnJhbmNoX2xpa2VseShcXHUwMDI2X191c2VfdHNjKSB8fCBzY2hlZF9jbG9ja19zdGFibGUoKTtcXG4rfVxcbitcXG4gdm9pZCB0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxcbiB7XFxuLVxcdGlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoXFx1MDAyNl9fdXNlX3RzYykgXFx1MDAyNlxcdTAwMjYgIXNjaGVkX2Nsb2NrX3N0YWJsZSgpKVxcbitcXHRpZiAoIXRzY19pc19zYXZlX3Jlc3RvcmVfbmVlZGVkKCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGN5YzJuc19zdXNwZW5kID0gc2NoZWRfY2xvY2soKTtcXG5AQCAtOTY5LDcgKzk4OCw3IEBAIHZvaWQgdHNjX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50IGNwdTtcXG4gXFxuLVxcdGlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoXFx1MDAyNl9fdXNlX3RzYykgXFx1MDAyNlxcdTAwMjYgIXNjaGVkX2Nsb2NrX3N0YWJsZSgpKVxcbitcXHRpZiAoIXRzY19pc19zYXZlX3Jlc3RvcmVfbmVlZGVkKCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG5AQCAtMTQzOSwyMSArMTQ1OCwyOCBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X3RzY19jbG9ja3NvdXJjZSh2b2lkKVxcbiAgKi9cXG4gZGV2aWNlX2luaXRjYWxsKGluaXRfdHNjX2Nsb2Nrc291cmNlKTtcXG4gXFxuLXN0YXRpYyBib29sIF9faW5pdCBkZXRlcm1pbmVfY3B1X3RzY19mcmVxdWVuY2llcyhib29sIGVhcmx5KVxcbitzdGF0aWMgYm9vbCBfX2luaXQgZGV0ZXJtaW5lX2NwdV90c2NfZnJlcXVlbmNpZXMoYm9vbCBlYXJseSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBrbm93bl9jcHVfa2h6LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IGtub3duX3RzY19raHopXFxuIHtcXG4gXFx0LyogTWFrZSBzdXJlIHRoYXQgY3B1IGFuZCB0c2MgYXJlIG5vdCBhbHJlYWR5IGNhbGlicmF0ZWQgKi9cXG4gXFx0V0FSTl9PTihjcHVfa2h6IHx8IHRzY19raHopO1xcbiBcXG4gXFx0aWYgKGVhcmx5KSB7XFxuLVxcdFxcdGNwdV9raHogPSB4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX2NwdSgpO1xcbi1cXHRcXHRpZiAodHNjX2Vhcmx5X2toeilcXG4tXFx0XFx0XFx0dHNjX2toeiA9IHRzY19lYXJseV9raHo7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEVhcmx5IENQVSBjYWxpYnJhdGlvbiBjYW4gb25seSB1c2UgbWV0aG9kcyB0aGF0IGFyZSBhdmFpbGFibGVcXG4rXFx0XFx0ICogZWFybHkgaW4gYm9vdCAob2J2aW91c2x5KS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChrbm93bl9jcHVfa2h6KVxcbitcXHRcXHRcXHRjcHVfa2h6ID0ga25vd25fY3B1X2toejtcXG4gXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHR0c2Nfa2h6ID0geDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MoKTtcXG4rXFx0XFx0XFx0Y3B1X2toeiA9IG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KCk7XFxuK1xcdFxcdGlmIChrbm93bl90c2Nfa2h6KVxcbitcXHRcXHRcXHR0c2Nfa2h6ID0ga25vd25fdHNjX2toejtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHR0c2Nfa2h6ID0gbmF0aXZlX2NhbGlicmF0ZV90c2MoKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0LyogV2Ugc2hvdWxkIG5vdCBiZSBoZXJlIHdpdGggbm9uLW5hdGl2ZSBjcHUgY2FsaWJyYXRpb24gKi9cXG4tXFx0XFx0V0FSTl9PTih4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX2NwdSAhPSBuYXRpdmVfY2FsaWJyYXRlX2NwdSk7XFxuLVxcdFxcdGNwdV9raHogPSBwaXRfaHBldF9wdGltZXJfY2FsaWJyYXRlX2NwdSgpO1xcbitcXHRcXHRjcHVfa2h6ID0gbmF0aXZlX2NhbGlicmF0ZV9jcHVfbGF0ZSgpO1xcbiBcXHR9XFxuIFxcbiBcXHQvKlxcbkBAIC0xNTAyLDE1ICsxNTI4LDQ4IEBAIHN0YXRpYyB2b2lkIF9faW5pdCB0c2NfZW5hYmxlX3NjaGVkX2Nsb2NrKHZvaWQpXFxuIFxcbiB2b2lkIF9faW5pdCB0c2NfZWFybHlfaW5pdCh2b2lkKVxcbiB7XFxuK1xcdHVuc2lnbmVkIGludCBrbm93bl9jcHVfa2h6ID0gMCwga25vd25fdHNjX2toeiA9IDA7XFxuK1xcbiBcXHRpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9UU0MpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdC8qIERvbid0IGNoYW5nZSBVViBUU0MgbXVsdGktY2hhc3NpcyBzeW5jaHJvbml6YXRpb24gKi9cXG4gXFx0aWYgKGlzX2Vhcmx5X3V2X3N5c3RlbSgpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRzbnBfc2VjdXJlX3RzY19pbml0KCk7XFxuK1xcdGlmICh4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeilcXG4rXFx0XFx0a25vd25fY3B1X2toeiA9IHg4Nl9pbml0Lmh5cGVyLmdldF9jcHVfa2h6KCk7XFxuIFxcbi1cXHRpZiAoIWRldGVybWluZV9jcHVfdHNjX2ZyZXF1ZW5jaWVzKHRydWUpKVxcbitcXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfR1VFU1RfU05QX1NFQ1VSRV9UU0MpKVxcbitcXHRcXHRrbm93bl90c2Nfa2h6ID0gc25wX3NlY3VyZV90c2NfaW5pdCgpO1xcbitcXHRlbHNlIGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKSlcXG4rXFx0XFx0a25vd25fdHNjX2toeiA9IHRkeF90c2NfaW5pdCgpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSWYgdGhlIFRTQyBmcmVxdWVuY3kgd2Fzbid0IHByb3ZpZGVkIGJ5IHRydXN0ZWQgZmlybXdhcmUsIHRyeSB0byBnZXRcXG4rXFx0ICogaXQgZnJvbSB0aGUgaHlwZXJ2aXNvciAod2hpY2ggaXMgdW50cnVzdGVkIHdoZW4gcnVubmluZyBhcyBhIENvQ28gZ3Vlc3QpLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFrbm93bl90c2Nfa2h6IFxcdTAwMjZcXHUwMDI2IHg4Nl9pbml0Lmh5cGVyLmdldF90c2Nfa2h6KVxcbitcXHRcXHRrbm93bl90c2Nfa2h6ID0geDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHooKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE1hcmsgdGhlIFRTQyBmcmVxdWVuY3kgYXMga25vd24gaWYgaXQgd2FzIG9idGFpbmVkIGZyb20gYSBoeXBlcnZpc29yXFxuK1xcdCAqIG9yIHRydXN0ZWQgZmlybXdhcmUuXFxuK1xcdCAqL1xcbitcXHRpZiAoa25vd25fdHNjX2toeilcXG4rXFx0XFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfS05PV05fRlJFUSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBJZ25vcmUgdGhlIHVzZXItcHJvdmlkZWQgVFNDIGZyZXF1ZW5jeSBpZiB0aGUgZXhhY3QgZnJlcXVlbmN5IHdhc1xcbitcXHQgKiBvYnRhaW5lZCBmcm9tIHRydXN0ZWQgZmlybXdhcmUgb3IgdGhlIGh5cGVydmlzb3IsIGFuZCBkb24ndCBtYXJrIHRoZVxcbitcXHQgKiBmcmVxdWVuY3kgYXMga25vd24sIGFzIHRoZSB1c2VyLXByb3ZpZGVkIGZyZXF1ZW5jeSBpcyBpbnRlbmRlZCBhcyBhXFxuK1xcdCAqIFxcXCJzdGFydGluZyBwb2ludFxcXCIsIG5vdCBhIGtub3duLCBndWFyYW50ZWVkIGZyZXF1ZW5jeVxcbitcXHQgKi9cXG4rXFx0aWYgKCFrbm93bl90c2Nfa2h6KVxcbitcXHRcXHRrbm93bl90c2Nfa2h6ID0gdHNjX2Vhcmx5X2toejtcXG4rXFx0ZWxzZSBpZiAodHNjX2Vhcmx5X2toeilcXG4rXFx0XFx0cHJfZXJyKFxcXCJJZ25vcmluZyAndHNjX2Vhcmx5X2toeicgaW4gZmF2b3Igb2YgZmlybXdhcmUvaHlwZXJ2aXNvci5cXFxcblxcXCIpO1xcbitcXG4rXFx0aWYgKCFkZXRlcm1pbmVfY3B1X3RzY19mcmVxdWVuY2llcyh0cnVlLCBrbm93bl9jcHVfa2h6LCBrbm93bl90c2Nfa2h6KSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR0c2NfZW5hYmxlX3NjaGVkX2Nsb2NrKCk7XFxuIH1cXG5AQCAtMTUyMiwxNiArMTU4MSw5IEBAIHZvaWQgX19pbml0IHRzY19pbml0KHZvaWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0LypcXG4tXFx0ICogbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHkgY2FuIG9ubHkgY2FsaWJyYXRlIHVzaW5nIG1ldGhvZHMgdGhhdCBhcmVcXG4tXFx0ICogYXZhaWxhYmxlIGVhcmx5IGluIGJvb3QuXFxuLVxcdCAqL1xcbi1cXHRpZiAoeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUgPT0gbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHkpXFxuLVxcdFxcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ID0gbmF0aXZlX2NhbGlicmF0ZV9jcHU7XFxuLVxcbiBcXHRpZiAoIXRzY19raHopIHtcXG4gXFx0XFx0LyogV2UgZmFpbGVkIHRvIGRldGVybWluZSBmcmVxdWVuY2llcyBlYXJsaWVyLCB0cnkgYWdhaW4gKi9cXG4tXFx0XFx0aWYgKCFkZXRlcm1pbmVfY3B1X3RzY19mcmVxdWVuY2llcyhmYWxzZSkpIHtcXG4rXFx0XFx0aWYgKCFkZXRlcm1pbmVfY3B1X3RzY19mcmVxdWVuY2llcyhmYWxzZSwgMCwgMCkpIHtcXG4gXFx0XFx0XFx0bWFya190c2NfdW5zdGFibGUoXFxcImNvdWxkIG5vdCBjYWxjdWxhdGUgVFNDIGtoelxcXCIpO1xcbiBcXHRcXHRcXHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19ERUFETElORV9USU1FUik7XFxuIFxcdFxcdFxcdHJldHVybjtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RzY19tc3IuYyBiL2FyY2gveDg2L2tlcm5lbC90c2NfbXNyLmNcXG5pbmRleCA0OGU2Y2MxY2IwMTdhNS4uYWVjZTA2MmFlZTdlODkgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva2VybmVsL3RzY19tc3IuY1xcbisrKyBiL2FyY2gveDg2L2tlcm5lbC90c2NfbXNyLmNcXG5AQCAtMjEwLDkgKzIxMCw3IEBAIHVuc2lnbmVkIGxvbmcgY3B1X2toel9mcm9tX21zcih2b2lkKVxcbiBcXHRpZiAoZnJlcSA9PSAwKVxcbiBcXHRcXHRwcl9lcnIoXFxcIkVycm9yIE1TUl9GU0JfRlJFUSBpbmRleCAlZCBpcyB1bmtub3duXFxcXG5cXFwiLCBpbmRleCk7XFxuIFxcbi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDXFxuLVxcdGxhcGljX3RpbWVyX3BlcmlvZCA9IChmcmVxICogMTAwMCkgLyBIWjtcXG4tI2VuZGlmXFxuK1xcdGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHooZnJlcSwgXFxcIk1TUl9GU0JfRlJFUVxcXCIpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogVFNDIGZyZXF1ZW5jeSBkZXRlcm1pbmVkIGJ5IE1TUiBpcyBhbHdheXMgY29uc2lkZXJlZCBcXFwia25vd25cXFwiXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jIGIvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmNcXG5pbmRleCAyNTJjNTgyN2QwNjM0Zi4uYjdhNDhlNjIyZjQ4OGEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmNcXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuY1xcbkBAIC0xNDcsOCArMTQ3LDYgQEAgc3RhdGljIHZvaWQgZW5jX2tleGVjX2ZpbmlzaF9ub29wKHZvaWQpIHt9XFxuIHN0YXRpYyBib29sIGlzX3ByaXZhdGVfbW1pb19ub29wKHU2NCBhZGRyKSB7cmV0dXJuIGZhbHNlOyB9XFxuIFxcbiBzdHJ1Y3QgeDg2X3BsYXRmb3JtX29wcyB4ODZfcGxhdGZvcm0gX19yb19hZnRlcl9pbml0ID0ge1xcbi1cXHQuY2FsaWJyYXRlX2NwdVxcdFxcdFxcdD0gbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHksXFxuLVxcdC5jYWxpYnJhdGVfdHNjXFx0XFx0XFx0PSBuYXRpdmVfY2FsaWJyYXRlX3RzYyxcXG4gXFx0LmdldF93YWxsY2xvY2tcXHRcXHRcXHQ9IG1hY2hfZ2V0X2Ntb3NfdGltZSxcXG4gXFx0LnNldF93YWxsY2xvY2tcXHRcXHRcXHQ9IG1hY2hfc2V0X2Ntb3NfdGltZSxcXG4gXFx0LmlvbW11X3NodXRkb3duXFx0XFx0XFx0PSBpb21tdV9zaHV0ZG93bl9ub29wLFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYyBiL2FyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jXFxuaW5kZXggMmY4YzMyMTczOTcyZDYuLjZjM2FmOTc0YzdjMmYxIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jXFxuKysrIGIvYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmNcXG5AQCAtNTM1LDkgKzUzNSw2IEBAIHZvaWQgX19pbml0IHNtZV9lYXJseV9pbml0KHZvaWQpXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHR4ODZfaW5pdC5yZXNvdXJjZXMuZG1pX3NldHVwID0gc25wX2RtaV9zZXR1cDtcXG4gXFx0fVxcbi1cXG4tXFx0aWYgKHNldl9zdGF0dXMgXFx1MDAyNiBNU1JfQU1ENjRfU05QX1NFQ1VSRV9UU0MpXFxuLVxcdFxcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTtcXG4gfVxcbiBcXG4gdm9pZCBfX2luaXQgbWVtX2VuY3J5cHRfZnJlZV9kZWNyeXB0ZWRfbWVtKHZvaWQpXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi90aW1lLmMgYi9hcmNoL3g4Ni94ZW4vdGltZS5jXFxuaW5kZXggZDYyYzE0MzM0YjM1MTAuLmJjMjZmMDBmYzUzZTVlIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L3hlbi90aW1lLmNcXG4rKysgYi9hcmNoL3g4Ni94ZW4vdGltZS5jXFxuQEAgLTM4LDEyICszOCwxMSBAQFxcbiBzdGF0aWMgdTY0IHhlbl9zY2hlZF9jbG9ja19vZmZzZXQgX19yZWFkX21vc3RseTtcXG4gXFxuIC8qIEdldCB0aGUgVFNDIHNwZWVkIGZyb20gWGVuICovXFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHhlbl90c2Nfa2h6KHZvaWQpXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IHhlbl90c2Nfa2h6KHZvaWQpXFxuIHtcXG4gXFx0c3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gKmluZm8gPVxcbiBcXHRcXHRcXHUwMDI2SFlQRVJWSVNPUl9zaGFyZWRfaW5mby1cXHUwMDNldmNwdV9pbmZvWzBdLnRpbWU7XFxuIFxcbi1cXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKTtcXG4gXFx0cmV0dXJuIHB2Y2xvY2tfdHNjX2toeihpbmZvKTtcXG4gfVxcbiBcXG5AQCAtNDQ0LDcgKzQ0Myw3IEBAIHZvaWQgeGVuX3Jlc3RvcmVfdGltZV9tZW1vcnlfYXJlYSh2b2lkKVxcbiBcXHR4ZW5fc2NoZWRfY2xvY2tfb2Zmc2V0ID0geGVuX2Nsb2Nrc291cmNlX3JlYWQoKSAtIHhlbl9jbG9ja192YWx1ZV9zYXZlZDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgeGVuX3NldHVwX3ZzeXNjYWxsX3RpbWVfaW5mbyh2b2lkKVxcbitzdGF0aWMgdm9pZCBfX2luaXQgeGVuX3NldHVwX3ZzeXNjYWxsX3RpbWVfaW5mbyh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3JlZ2lzdGVyX3RpbWVfbWVtb3J5X2FyZWEgdDtcXG4gXFx0c3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICp0aTtcXG5AQCAtNTY3LDkgKzU2NiwxNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgeGVuX2luaXRfdGltZV9jb21tb24odm9pZClcXG4ge1xcbiBcXHR4ZW5fc2NoZWRfY2xvY2tfb2Zmc2V0ID0geGVuX2Nsb2Nrc291cmNlX3JlYWQoKTtcXG4gXFx0c3RhdGljX2NhbGxfdXBkYXRlKHB2X3N0ZWFsX2Nsb2NrLCB4ZW5fc3RlYWxfY2xvY2spO1xcbi1cXHRwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2soeGVuX3NjaGVkX2Nsb2NrKTtcXG4gXFxuLVxcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjID0geGVuX3RzY19raHo7XFxuK1xcdC8qXFxuK1xcdCAqIFhlbiBoYXMgcGFyYXZpcnR1YWxpemVkIHN1c3BlbmQvcmVzdW1lIGFuZCBzbyBkb2Vzbid0IHVzZSB0aGUgY29tbW9uXFxuK1xcdCAqIHg4NiBzY2hlZF9jbG9jayBzYXZlL3Jlc3RvcmUgaG9va3MuXFxuK1xcdCAqL1xcbitcXHRwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2soeGVuX3NjaGVkX2Nsb2NrLCB4ODZfaW5pdF9ub29wLCB4ODZfaW5pdF9ub29wKTtcXG4rXFxuK1xcdHg4Nl9pbml0Lmh5cGVyLmdldF90c2Nfa2h6ID0geGVuX3RzY19raHo7XFxuIFxcdHg4Nl9wbGF0Zm9ybS5nZXRfd2FsbGNsb2NrID0geGVuX2dldF93YWxsY2xvY2s7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jXFxuaW5kZXggZGY1Njc3OTVkMTc1MWEuLjhlZTdhOWRlMGY0ZmRhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmNcXG4rKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jXFxuQEAgLTQ4OCwxNyArNDg4LDYgQEAgc3RhdGljIHZvaWQgcmVzdW1lX2h2X2Nsb2NrX3RzYyhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmFyZylcXG4gXFx0aHZfc2V0X21zcihIVl9NU1JfUkVGRVJFTkNFX1RTQywgdHNjX21zci5hc191aW50NjQpO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBDYWxsZWQgZHVyaW5nIHJlc3VtZSBmcm9tIGhpYmVybmF0aW9uLCBmcm9tIG92ZXJyaWRkZW5cXG4tICogeDg2X3BsYXRmb3JtLnJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUgcm91dGluZS4gVGhpcyBpcyB0byBhZGp1c3Qgb2Zmc2V0c1xcbi0gKiB1c2VkIHRvIGNhbGN1bGF0ZSB0aW1lIGZvciBodiB0c2MgcGFnZSBiYXNlZCBzY2hlZF9jbG9jaywgdG8gYWNjb3VudCBmb3JcXG4tICogdGltZSBzcGVudCBiZWZvcmUgaGliZXJuYXRpb24uXFxuLSAqL1xcbi12b2lkIGh2X2Fkal9zY2hlZF9jbG9ja19vZmZzZXQodTY0IG9mZnNldClcXG4te1xcbi1cXHRodl9zY2hlZF9jbG9ja19vZmZzZXQgLT0gb2Zmc2V0O1xcbi19XFxuLVxcbiAjaWZkZWYgSEFWRV9WRFNPX0NMT0NLTU9ERV9IVkNMT0NLXFxuIHN0YXRpYyBpbnQgaHZfY3NfZW5hYmxlKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpXFxuIHtcXG5AQCAtNTU0LDEwICs1NDMsMzUgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGh2X3NldHVwX3NjaGVkX2Nsb2NrKHZvaWQgKnNjaGVkX2Nsb2NrKVxcbiAjZWxpZiBkZWZpbmVkIENPTkZJR19QQVJBVklSVFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3RpbWVyLmhcXHUwMDNlXFxuIFxcbitzdGF0aWMgdTY0IGh2X3JlZl9jb3VudGVyX2F0X3N1c3BlbmQ7XFxuKy8qXFxuKyAqIEh5cGVyLVYgY2xvY2sgY291bnRlciByZXNldHMgZHVyaW5nIGhpYmVybmF0aW9uLiBTYXZlIGFuZCByZXN0b3JlIGNsb2NrXFxuKyAqIG9mZnNldCBkdXJpbmcgc3VzcGVuZC9yZXN1bWUsIHdoaWxlIGFsc28gY29uc2lkZXJpbmcgdGhlIHRpbWUgcGFzc2VkXFxuKyAqIGJlZm9yZSBzdXNwZW5kLiBUaGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IHNjaGVkX2Nsb2NrIHVzaW5nIGh2IHRzYyBwYWdlXFxuKyAqIGJhc2VkIGNsb2Nrc291cmNlLCBwcm9jZWVkcyBmcm9tIHdoZXJlIGl0IGxlZnQgb2ZmIGR1cmluZyBzdXNwZW5kIGFuZFxcbisgKiBpdCBzaG93cyBjb3JyZWN0IHRpbWUgZm9yIHRoZSB0aW1lc3RhbXBzIG9mIGtlcm5lbCBtZXNzYWdlcyBhZnRlciByZXN1bWUuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBodl9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXFxuK3tcXG4rXFx0aHZfcmVmX2NvdW50ZXJfYXRfc3VzcGVuZCA9IGh2X3JlYWRfcmVmZXJlbmNlX2NvdW50ZXIoKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaHZfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIEFkanVzdCB0aGUgb2Zmc2V0cyB1c2VkIGJ5IGh2IHRzYyBjbG9ja3NvdXJjZSB0b1xcbitcXHQgKiBhY2NvdW50IGZvciB0aGUgdGltZSBzcGVudCBiZWZvcmUgaGliZXJuYXRpb24uXFxuK1xcdCAqIGFkanVzdGVkIHZhbHVlID0gcmVmZXJlbmNlIGNvdW50ZXIgKHRpbWUpIGF0IHN1c3BlbmRcXG4rXFx0ICogICAgICAgICAgICAgICAgLSByZWZlcmVuY2UgY291bnRlciAodGltZSkgbm93LlxcbitcXHQgKi9cXG4rXFx0aHZfc2NoZWRfY2xvY2tfb2Zmc2V0IC09IChodl9yZWZfY291bnRlcl9hdF9zdXNwZW5kIC0gaHZfcmVhZF9yZWZlcmVuY2VfY291bnRlcigpKTtcXG4rfVxcbitcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGh2X3NldHVwX3NjaGVkX2Nsb2NrKHZvaWQgKnNjaGVkX2Nsb2NrKVxcbiB7XFxuIFxcdC8qIFdlJ3JlIG9uIHg4Ni94NjQgKmFuZCogdXNpbmcgUFYgb3BzICovXFxuLVxcdHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayhzY2hlZF9jbG9jayk7XFxuK1xcdHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayhzY2hlZF9jbG9jaywgaHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSxcXG4rXFx0XFx0XFx0XFx0IGh2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUpO1xcbiB9XFxuICNlbHNlIC8qICFDT05GSUdfR0VORVJJQ19TQ0hFRF9DTE9DSyBcXHUwMDI2XFx1MDAyNiAhQ09ORklHX1BBUkFWSVJUICovXFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBodl9zZXR1cF9zY2hlZF9jbG9jayh2b2lkICpzY2hlZF9jbG9jaykge31cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9jbG9ja3NvdXJjZS9oeXBlcnZfdGltZXIuaCBiL2luY2x1ZGUvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmhcXG5pbmRleCBkNDhkZDQxNzZmZDM1Yi4uYTRjODFhNjBmNTNkZmMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9jbG9ja3NvdXJjZS9oeXBlcnZfdGltZXIuaFxcbisrKyBiL2luY2x1ZGUvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmhcXG5AQCAtMzgsOCArMzgsNiBAQCBleHRlcm4gdm9pZCBodl9yZW1hcF90c2NfY2xvY2tzb3VyY2Uodm9pZCk7XFxuIGV4dGVybiB1bnNpZ25lZCBsb25nIGh2X2dldF90c2NfcGZuKHZvaWQpO1xcbiBleHRlcm4gc3RydWN0IG1zX2h5cGVydl90c2NfcGFnZSAqaHZfZ2V0X3RzY19wYWdlKHZvaWQpO1xcbiBcXG4tZXh0ZXJuIHZvaWQgaHZfYWRqX3NjaGVkX2Nsb2NrX29mZnNldCh1NjQgb2Zmc2V0KTtcXG4tXFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbFxcbiBodl9yZWFkX3RzY19wYWdlX3RzYyhjb25zdCBzdHJ1Y3QgbXNfaHlwZXJ2X3RzY19wYWdlICp0c2NfcGcsXFxuIFxcdFxcdCAgICAgdTY0ICpjdXJfdHNjLCB1NjQgKnRpbWUpXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jXFxuaW5kZXggYjFiNWVjNDNjMGYyN2IuLjViYzc3ZDM2YzdhMzY0IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmNcXG4rKysgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jXFxuQEAgLTIxODAsMTEgKzIxODAsMTYgQEAgdm9pZCB0aW1la2VlcGluZ19yZXN1bWUodm9pZClcXG4gXFx0dTY0IGN5Y2xlX25vdywgbnNlYztcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuLVxcdHJlYWRfcGVyc2lzdGVudF9jbG9jazY0KFxcdTAwMjZ0c19uZXcpO1xcbi1cXG4gXFx0Y2xvY2tldmVudHNfcmVzdW1lKCk7XFxuIFxcdGNsb2Nrc291cmNlX3Jlc3VtZSgpO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogUmVhZCBwZXJzaXN0ZW50IHRpbWUgYWZ0ZXIgY2xvY2tzb3VyY2VzIGhhdmUgYmVlbiByZXN1bWVkLiAgUGFyYXZpcnRcXG4rXFx0ICogY2xvY2tzIGhhdmUgYSBuYXN0eSBoYWJpdCBvZiBwaWdneWJhY2tpbmcgYSBwZXJzaXN0ZW50IGNsb2NrIG9uIGFcXG4rXFx0ICogc3lzdGVtIGNsb2NrLCBhbmQgbWF5IHJldHVybiBnYXJiYWdlIGlmIHRoZSBzeXN0ZW0gY2xvY2sgaXMgc3VzcGVuZGVkLlxcbitcXHQgKi9cXG4rXFx0cmVhZF9wZXJzaXN0ZW50X2Nsb2NrNjQoXFx1MDAyNnRzX25ldyk7XFxuK1xcbiBcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnRrX2NvcmUubG9jaywgZmxhZ3MpO1xcbiBcXG4gXFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6MTE6MDYuNzA4NDkzODg5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDExMzE3NDgzMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0dVRVNUXCIsXG4gICAgXCJQQVJBVklSVFwiLFxuICAgIFwiSFlQRVJWXCIsXG4gICAgXCJBQ1JOX0dVRVNUXCIsXG4gICAgXCJKQUlMSE9VU0VfR1VFU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1jbG9ja19jcHVfYWN0aW9uXCIsXG4gICAgXCJ0aW1la2VlcGluZ19yZXN1bWVcIixcbiAgICBcInRzY19zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlXCIsXG4gICAgXCJ0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZVwiLFxuICAgIFwia3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVcIixcbiAgICBcImt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlXCIsXG4gICAgXCJodl9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlXCIsXG4gICAgXCJodl9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBUU0MgYW5kIEFQSUMgZnJlcXVlbmN5IGNhbGlicmF0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBmb3IgeDg2IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoS1ZNLCBIeXBlci1WLCBWTXdhcmUsIEFDUk4sIEphaWxob3VzZSwgVERYLCBTRVYtU05QKS4gSXQgbW9kaWZpZXMgaG93IHNjaGVkX2Nsb2NrIHN0YXRlIGlzIHNhdmVkIGFuZCByZXN0b3JlZCBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgYW5kIENQVSBob3RwbHVnLCBwYXJ0aWN1bGFybHkgZm9yIGt2bWNsb2NrIGFuZCBIeXBlci1WIGNsb2NrLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgaW4gYSBLVk0gZ3Vlc3QgKHdoaWNoIHN5emthbGxlciB1c2VzKSBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgYW5kIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTkyMTAyODE1NDI4NzE0Y2M3NGY1ZGQzNmU3MzFmYjNkOGE4ZjhhZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMDI6MTE6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCBiNTQ5M2E3ZjhmMjI4MS4uYTM4N2JiMmM0N2UyZmIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC03OTQ2LDYgKzc5NDYsMTEgQEAgS2VybmVsIHBhcmFtZXRlcnNcbiBcdFx0XHR3aXRoIENQVUlELjE2aCBzdXBwb3J0IGFuZCBwYXJ0aWFsIENQVUlELjE1aCBzdXBwb3J0LlxuIFx0XHRcdEZvcm1hdDogXHUwMDNjdW5zaWduZWQgaW50XHUwMDNlXG4gXG4rXHRcdFx0Tm90ZSwgdHNjX2Vhcmx5X2toeiBpcyBpZ25vcmVkIGlmIHRoZSBUU0MgZnJlcXVlbmN5IGlzXG4rXHRcdFx0cHJvdmlkZWQgYnkgdHJ1c3RlZCBmaXJtd2FyZSB3aGVuIHJ1bm5pbmcgYXMgYW4gU05QIG9yXG4rXHRcdFx0VERYIGd1ZXN0LCBvciB3aGVuIHRoZSBoeXBlcnZpc29yIHByb3ZpZGVzIHRoZSBleGFjdFxuK1x0XHRcdGZyZXF1ZW5jeSB2aWEgYSBwYXJhdmlydHVhbCBpbnRlcmZhY2UuXG4rXG4gXHR0c3g9XHRcdFtYODZdIENvbnRyb2wgVHJhbnNhY3Rpb25hbCBTeW5jaHJvbml6YXRpb25cbiBcdFx0XHRFeHRlbnNpb25zIChUU1gpIGZlYXR1cmUgaW4gSW50ZWwgcHJvY2Vzc29ycyB0aGF0XG4gXHRcdFx0c3VwcG9ydCBUU1ggY29udHJvbC5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9jcHVpZC5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9jcHVpZC5yc3RcbmluZGV4IGJkYTNlM2U3MzdkNzFmLi5hNWVlOGZmMDUyY2U1NSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2NwdWlkLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvY3B1aWQucnN0XG5AQCAtMTIyLDMgKzEyMiwxNSBAQCBLVk1fSElOVFNfUkVBTFRJTUUgMCAgICAgICAgICAgIGd1ZXN0IGNoZWNrcyB0aGlzIGZlYXR1cmUgYml0IHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVlbXB0ZWQgZm9yIGFuIHVubGltaXRlZCB0aW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2luZyBvcHRpbWl6YXRpb25zXG4gPT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcbitmdW5jdGlvbjogS1ZNX0NQVUlEX1RJTUlOR19JTkZPICgweDQwMDAwMDEwKVxuK1xuK3JldHVybnM6OlxuK1xuKyAgIGVheCA9IChWaXJ0dWFsKSBUU0MgZnJlcXVlbmN5IGluIGtIelxuKyAgIGVieCA9IChWaXJ0dWFsKSBCdXMgKGxvY2FsIEFQSUMgdGltZXIpIGZyZXF1ZW5jeSBpbiBrSHpcbisgICBlY3ggPSAwIChSZXNlcnZlZClcbisgICBlZHggPSAwIChSZXNlcnZlZClcbitcbitOb3RlLCBLVk0gb25seSBkZWZpbmVzIHRoZSBzZW1hbnRpY3Mgb2YgS1ZNX0NQVUlEX1RJTUlOR19JTkZPOyBLVk0gZG9lcyBOT1RcbithZHZlcnRpc2Ugc3VwcG9ydCB2aWEgS1ZNX0dFVF9TVVBQT1JURURfQ1BVSUQuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvY29jby9zZXYvY29yZS5jIGIvYXJjaC94ODYvY29jby9zZXYvY29yZS5jXG5pbmRleCBlY2Q3N2QzMjE3ZjNjMy4uNzIzMTNiMzZiNmY1ZDEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmNcbisrKyBiL2FyY2gveDg2L2NvY28vc2V2L2NvcmUuY1xuQEAgLTk5LDcgKzk5LDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzZXZfc3RhdHVzX2ZlYXRfbmFtZXNbXSA9IHtcbiAgKi9cbiBzdGF0aWMgdTY0IHNucF90c2Nfc2NhbGUgX19yb19hZnRlcl9pbml0O1xuIHN0YXRpYyB1NjQgc25wX3RzY19vZmZzZXQgX19yb19hZnRlcl9pbml0O1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNucF90c2NfZnJlcV9raHogX19yb19hZnRlcl9pbml0O1xuIFxuIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzZXZfZXNfcnVudGltZV9kYXRhKiwgcnVudGltZV9kYXRhKTtcbiBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc2V2X2VzX3NhdmVfYXJlYSAqLCBzZXZfdm1zYSk7XG5AQCAtMjAxNCwyMCArMjAxMywxMiBAQCB2b2lkIF9faW5pdCBzbnBfc2VjdXJlX3RzY19wcmVwYXJlKHZvaWQpXG4gXHRwcl9kZWJ1ZyhcIlNlY3VyZVRTQyBlbmFibGVkXCIpO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzZWN1cmV0c2NfZ2V0X3RzY19raHoodm9pZClcbi17XG4tXHRyZXR1cm4gc25wX3RzY19mcmVxX2toejtcbi19XG4tXG4tdm9pZCBfX2luaXQgc25wX3NlY3VyZV90c2NfaW5pdCh2b2lkKVxuK3Vuc2lnbmVkIGludCBfX2luaXQgc25wX3NlY3VyZV90c2NfaW5pdCh2b2lkKVxuIHtcbitcdHVuc2lnbmVkIGxvbmcgc25wX3RzY19mcmVxX2toeiwgdHNjX2ZyZXFfbWh6O1xuIFx0c3RydWN0IHNucF9zZWNyZXRzX3BhZ2UgKnNlY3JldHM7XG4tXHR1bnNpZ25lZCBsb25nIHRzY19mcmVxX21oejtcbiBcdHZvaWQgKm1lbTtcbiBcbi1cdGlmICghY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfR1VFU1RfU05QX1NFQ1VSRV9UU0MpKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRtZW0gPSBlYXJseV9tZW1yZW1hcF9lbmNyeXB0ZWQoc2V2X3NlY3JldHNfcGEsIFBBR0VfU0laRSk7XG4gXHRpZiAoIW1lbSkge1xuIFx0XHRwcl9lcnIoXCJVbmFibGUgdG8gZ2V0IFRTQ19GQUNUT1I6IGZhaWxlZCB0byBtYXAgdGhlIFNOUCBzZWNyZXRzIHBhZ2UuXFxuXCIpO1xuQEAgLTIwMzYsNyArMjAyNyw4IEBAIHZvaWQgX19pbml0IHNucF9zZWN1cmVfdHNjX2luaXQodm9pZClcbiBcbiBcdHNlY3JldHMgPSAoX19mb3JjZSBzdHJ1Y3Qgc25wX3NlY3JldHNfcGFnZSAqKW1lbTtcbiBcbi1cdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpO1xuK1x0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfUkVMSUFCTEUpO1xuK1xuIFx0cmRtc3JxKE1TUl9BTUQ2NF9HVUVTVF9UU0NfRlJFUSwgdHNjX2ZyZXFfbWh6KTtcbiBcbiBcdC8qIEV4dHJhY3QgdGhlIEdVRVNUIFRTQyBNSFogZnJvbSBCSVRbMTc6MF0sIHJlc3QgaXMgcmVzZXJ2ZWQgc3BhY2UgKi9cbkBAIC0yMDQ0LDggKzIwMzYsNyBAQCB2b2lkIF9faW5pdCBzbnBfc2VjdXJlX3RzY19pbml0KHZvaWQpXG4gXG4gXHRzbnBfdHNjX2ZyZXFfa2h6ID0gU05QX1NDQUxFX1RTQ19GUkVRKHRzY19mcmVxX21oeiAqIDEwMDAsIHNlY3JldHMtXHUwMDNldHNjX2ZhY3Rvcik7XG4gXG4tXHR4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX2NwdSA9IHNlY3VyZXRzY19nZXRfdHNjX2toejtcbi1cdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjID0gc2VjdXJldHNjX2dldF90c2Nfa2h6O1xuLVxuIFx0ZWFybHlfbWVtdW5tYXAobWVtLCBQQUdFX1NJWkUpO1xuK1xuK1x0cmV0dXJuIHNucF90c2NfZnJlcV9raHo7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jIGIvYXJjaC94ODYvY29jby90ZHgvdGR4LmNcbmluZGV4IDI5YjZmMWVkNTllYzU0Li45NDY4MmFjYTE4OGI3OSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2NvY28vdGR4L3RkeC5jXG4rKysgYi9hcmNoL3g4Ni9jb2NvL3RkeC90ZHguY1xuQEAgLTgsNiArOCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2V4ZWMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS9hcGljLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vY29jby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RkeC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3ZteC5oXHUwMDNlXG5AQCAtMTEyMyw5ICsxMTI0LDYgQEAgdm9pZCBfX2luaXQgdGR4X2Vhcmx5X2luaXQodm9pZClcbiBcbiBcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVERYX0dVRVNUKTtcbiBcbi1cdC8qIFRTQyBpcyB0aGUgb25seSByZWxpYWJsZSBjbG9jayBpbiBURFggZ3Vlc3QgKi9cbi1cdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTtcbi1cbiBcdGNjX3ZlbmRvciA9IENDX1ZFTkRPUl9JTlRFTDtcbiBcbiBcdC8qIENvbmZpZ3VyZSB0aGUgVEQgKi9cbkBAIC0xMTk1LDMgKzExOTMsMTggQEAgdm9pZCBfX2luaXQgdGR4X2Vhcmx5X2luaXQodm9pZClcbiBcbiBcdHRkeF9hbm5vdW5jZSgpO1xuIH1cbitcbit1bnNpZ25lZCBpbnQgX19pbml0IHRkeF90c2NfaW5pdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBjcHVpZF90c2NfaW5mbyBpbmZvO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRShjcHVpZF9nZXRfdHNjX2luZm8oXHUwMDI2aW5mbykgfHwgIWluZm8uY3J5c3RhbF9raHopKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHooaW5mby5jcnlzdGFsX2toeiwgXCJURFgtTW9kdWxlIHZpYSBDUFVJRFwiKTtcbitcbitcdC8qIFRTQyBpcyB0aGUgb25seSByZWxpYWJsZSBjbG9jayBpbiBURFggZ3Vlc3QgKi9cbitcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTtcbitcbitcdHJldHVybiBpbmZvLmNyeXN0YWxfa2h6ICogaW5mby5udW1lcmF0b3IgLyBpbmZvLmRlbm9taW5hdG9yO1xuK31cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3JuLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3JuLmhcbmluZGV4IGRiNDJiNDc3YzQxZDM0Li5hODkyMTc5YzYxYzYyMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Fjcm4uaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNybi5oXG5AQCAtMzIsMTEgKzMyLDYgQEAgc3RhdGljIGlubGluZSB1MzIgYWNybl9jcHVpZF9iYXNlKHZvaWQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFjcm5fZ2V0X3RzY19raHoodm9pZClcbi17XG4tXHRyZXR1cm4gY3B1aWRfZWF4KEFDUk5fQ1BVSURfVElNSU5HX0lORk8pO1xuLX1cbi1cbiAvKlxuICAqIEh5cGVyY2FsbHMgZm9yIEFDUk5cbiAgKlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaFxuaW5kZXggOWNkNDkzZDQ2N2Q0ZDEuLjAzNTk5ODU1NWU5OTIyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmhcbkBAIC02Myw3ICs2Myw2IEBAIGV4dGVybiBpbnQgYXBpY192ZXJib3NpdHk7XG4gZXh0ZXJuIGludCBsb2NhbF9hcGljX3RpbWVyX2MyX29rO1xuIFxuIGV4dGVybiBib29sIGFwaWNfaXNfZGlzYWJsZWQ7XG4tZXh0ZXJuIHVuc2lnbmVkIGludCBsYXBpY190aW1lcl9wZXJpb2Q7XG4gXG4gZXh0ZXJuIGVudW0gYXBpY19pbnRyX21vZGVfaWQgYXBpY19pbnRyX21vZGU7XG4gZW51bSBhcGljX2ludHJfbW9kZV9pZCB7XG5AQCAtMTM4LDYgKzEzNyw4IEBAIHZvaWQgcmVnaXN0ZXJfbGFwaWNfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MpO1xuIGV4dGVybiB2b2lkIHNldHVwX2Jvb3RfQVBJQ19jbG9jayh2b2lkKTtcbiBleHRlcm4gdm9pZCBzZXR1cF9zZWNvbmRhcnlfQVBJQ19jbG9jayh2b2lkKTtcbiBleHRlcm4gdm9pZCBsYXBpY191cGRhdGVfdHNjX2ZyZXEodm9pZCk7XG4rZXh0ZXJuIHZvaWQgYXBpY19zZXRfdGltZXJfcGVyaW9kX2h6KHU2NCBwZXJpb2RfaHosIGNvbnN0IGNoYXIgKnNvdXJjZSk7XG4rZXh0ZXJuIHZvaWQgYXBpY19zZXRfdGltZXJfcGVyaW9kX2toeih1NjQgcGVyaW9kX2toeiwgY29uc3QgY2hhciAqc291cmNlKTtcbiBcbiAjaWZkZWYgQ09ORklHX1g4Nl82NFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBhcGljX2ZvcmNlX2VuYWJsZSh1bnNpZ25lZCBsb25nIGFkZHIpXG5AQCAtMTg4LDYgKzE4OSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2xvY2FsX0FQSUModm9pZCkgeyB9XG4gIyBkZWZpbmUgc2V0dXBfYm9vdF9BUElDX2Nsb2NrIHg4Nl9pbml0X25vb3BcbiAjIGRlZmluZSBzZXR1cF9zZWNvbmRhcnlfQVBJQ19jbG9jayB4ODZfaW5pdF9ub29wXG4gc3RhdGljIGlubGluZSB2b2lkIGxhcGljX3VwZGF0ZV90c2NfZnJlcSh2b2lkKSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgYXBpY19zZXRfdGltZXJfcGVyaW9kX2h6KHU2NCBwZXJpb2RfaHosIGNvbnN0IGNoYXIgKnNvdXJjZSkgeyB9XG4rc3RhdGljIGlubGluZSB2b2lkIGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHoodTY0IHBlcmlvZF9raHosIGNvbnN0IGNoYXIgKnNvdXJjZSkgeyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGluaXRfYnNwX0FQSUModm9pZCkgeyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGFwaWNfaW50cl9tb2RlX3NlbGVjdCh2b2lkKSB7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgYXBpY19pbnRyX21vZGVfaW5pdCh2b2lkKSB7IH1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaFxuaW5kZXggNGE0N2MxNmUyZGY4YzAuLjc2M2VkMDE3NzM4YTY3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaFxuQEAgLTExOCw4ICsxMTgsMTYgQEAgc3RhdGljIGlubGluZSBsb25nIGt2bV9zZXZfaHlwZXJjYWxsMyh1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGxvbmcgcDEsXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfS1ZNX0dVRVNUXG4tdm9pZCBrdm1jbG9ja19pbml0KHZvaWQpO1xuLXZvaWQga3ZtY2xvY2tfZGlzYWJsZSh2b2lkKTtcbitlbnVtIGt2bV9ndWVzdF9jcHVfYWN0aW9uIHtcbitcdEtWTV9HVUVTVF9CU1BfU1VTUEVORCxcbitcdEtWTV9HVUVTVF9CU1BfUkVTVU1FLFxuK1x0S1ZNX0dVRVNUX0FQX09OTElORSxcbitcdEtWTV9HVUVTVF9BUF9PRkZMSU5FLFxuK1x0S1ZNX0dVRVNUX1NIVVRET1dOLFxuK307XG4rXG4rdm9pZCBrdm1jbG9ja19pbml0KGJvb2wgcHJlZmVyX3RzYyk7XG4rdm9pZCBrdm1jbG9ja19jcHVfYWN0aW9uKGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKTtcbiBib29sIGt2bV9wYXJhX2F2YWlsYWJsZSh2b2lkKTtcbiB1bnNpZ25lZCBpbnQga3ZtX2FyY2hfcGFyYV9mZWF0dXJlcyh2b2lkKTtcbiB1bnNpZ25lZCBpbnQga3ZtX2FyY2hfcGFyYV9oaW50cyh2b2lkKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXG5pbmRleCA1OTRjZmExOWNiZDRiYS4uMDVlYmYwYjczZWY0N2QgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcbkBAIC01MzAsNyArNTMwLDcgQEAgaW50IHNucF9zZW5kX2d1ZXN0X3JlcXVlc3Qoc3RydWN0IHNucF9tc2dfZGVzYyAqbWRlc2MsIHN0cnVjdCBzbnBfZ3Vlc3RfcmVxICpyZXFcbiBpbnQgc25wX3N2c21fdnRwbV9zZW5kX2NvbW1hbmQodTggKmJ1ZmZlcik7XG4gXG4gdm9pZCBfX2luaXQgc25wX3NlY3VyZV90c2NfcHJlcGFyZSh2b2lkKTtcbi12b2lkIF9faW5pdCBzbnBfc2VjdXJlX3RzY19pbml0KHZvaWQpO1xuK3Vuc2lnbmVkIGludCBzbnBfc2VjdXJlX3RzY19pbml0KHZvaWQpO1xuIGVudW0gZXNfcmVzdWx0IHNhdmljX3JlZ2lzdGVyX2dwYSh1NjQgZ3BhKTtcbiBlbnVtIGVzX3Jlc3VsdCBzYXZpY191bnJlZ2lzdGVyX2dwYSh1NjQgKmdwYSk7XG4gdTY0IHNhdmljX2doY2JfbXNyX3JlYWQodTMyIHJlZyk7XG5AQCAtNjM3LDcgKzYzNyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNucF9zZW5kX2d1ZXN0X3JlcXVlc3Qoc3RydWN0IHNucF9tc2dfZGVzYyAqbWRlc2MsXG4gXHRcdFx0XHRcdCBzdHJ1Y3Qgc25wX2d1ZXN0X3JlcSAqcmVxKSB7IHJldHVybiAtRU5PREVWOyB9XG4gc3RhdGljIGlubGluZSBpbnQgc25wX3N2c21fdnRwbV9zZW5kX2NvbW1hbmQodTggKmJ1ZmZlcikgeyByZXR1cm4gLUVOT0RFVjsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgc25wX3NlY3VyZV90c2NfcHJlcGFyZSh2b2lkKSB7IH1cbi1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHNucF9zZWN1cmVfdHNjX2luaXQodm9pZCkgeyB9XG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19pbml0IHNucF9zZWN1cmVfdHNjX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXZfZXZpY3RfY2FjaGUodm9pZCAqdmEsIGludCBucGFnZXMpIHt9XG4gc3RhdGljIGlubGluZSBlbnVtIGVzX3Jlc3VsdCBzYXZpY19yZWdpc3Rlcl9ncGEodTY0IGdwYSkgeyByZXR1cm4gRVNfVU5TVVBQT1JURUQ7IH1cbiBzdGF0aWMgaW5saW5lIGVudW0gZXNfcmVzdWx0IHNhdmljX3VucmVnaXN0ZXJfZ3BhKHU2NCAqZ3BhKSB7IHJldHVybiBFU19VTlNVUFBPUlRFRDsgfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcbmluZGV4IDg5ZTk3ZDU3NjFkODllLi5kMjNmZjA2ZGI0MWFiZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuQEAgLTY4LDYgKzY4LDcgQEAgc3RydWN0IHZlX2luZm8ge1xuICNpZmRlZiBDT05GSUdfSU5URUxfVERYX0dVRVNUXG4gXG4gdm9pZCBfX2luaXQgdGR4X2Vhcmx5X2luaXQodm9pZCk7XG4rdW5zaWduZWQgaW50IF9faW5pdCB0ZHhfdHNjX2luaXQodm9pZCk7XG4gXG4gdm9pZCB0ZHhfZ2V0X3ZlX2luZm8oc3RydWN0IHZlX2luZm8gKnZlKTtcbiBcbkBAIC04OSw2ICs5MCw3IEBAIHZvaWQgX19pbml0IHRkeF9kdW1wX3RkX2N0bHModTY0IHRkX2N0bHMpO1xuICNlbHNlXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHRkeF9lYXJseV9pbml0KHZvaWQpIHsgfTtcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0ZHhfdHNjX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB0ZHhfaGFsdCh2b2lkKSB7IH07XG4gXG4gc3RhdGljIGlubGluZSBib29sIHRkeF9lYXJseV9oYW5kbGVfdmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgcmV0dXJuIGZhbHNlOyB9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmhcbmluZGV4IGZkYTE4YmNiMTliNDVhLi5hNTIzODhhZjYwNTVlNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmhcbkBAIC0xMSw4ICsxMSwyMSBAQCBleHRlcm4gdm9pZCByZWNhbGlicmF0ZV9jcHVfa2h6KHZvaWQpO1xuIFxuIGV4dGVybiBpbnQgbm9fdGltZXJfY2hlY2s7XG4gXG4rI2lmZGVmIENPTkZJR19QQVJBVklSVFxuIGV4dGVybiBib29sIHVzaW5nX25hdGl2ZV9zY2hlZF9jbG9jayh2b2lkKTtcbi12b2lkIHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh1NjQgKCpmdW5jKSh2b2lkKSk7XG4rXG4raW50IF9faW5pdCBfX3BhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh1NjQgKCpmdW5jKSh2b2lkKSwgYm9vbCBzdGFibGUsXG4rXHRcdFx0XHQgICAgICB2b2lkICgqc2F2ZSkodm9pZCksIHZvaWQgKCpyZXN0b3JlKSh2b2lkKSk7XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh1NjQgKCpmdW5jKSh2b2lkKSxcbitcdFx0XHRcdFx0XHQgICAgIHZvaWQgKCpzYXZlKSh2b2lkKSxcbitcdFx0XHRcdFx0XHQgICAgIHZvaWQgKCpyZXN0b3JlKSh2b2lkKSlcbit7XG4rXHQodm9pZClfX3BhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayhmdW5jLCB0cnVlLCBzYXZlLCByZXN0b3JlKTtcbit9XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGJvb2wgdXNpbmdfbmF0aXZlX3NjaGVkX2Nsb2NrKHZvaWQpIHsgcmV0dXJuIHRydWU7IH1cbisjZW5kaWZcbiBcbiAvKlxuICAqIFdlIHVzZSB0aGUgZnVsbCBsaW5lYXIgZXF1YXRpb246IGYoeCkgPSBhICsgYip4LCBpbiBvcmRlciB0byBhbGxvd1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RzYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdHNjLmhcbmluZGV4IDRkMmQyZjIxZmYwNjNmLi5jYjY4MmYwOTdlYTdjYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RzYy5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90c2MuaFxuQEAgLTgyLDE0ICs4MiwyMCBAQCBzdGF0aWMgaW5saW5lIGN5Y2xlc190IGdldF9jeWNsZXModm9pZClcbiB9XG4gI2RlZmluZSBnZXRfY3ljbGVzIGdldF9jeWNsZXNcbiBcbitzdHJ1Y3QgY3B1aWRfdHNjX2luZm8ge1xuK1x0dW5zaWduZWQgaW50IGRlbm9taW5hdG9yO1xuK1x0dW5zaWduZWQgaW50IG51bWVyYXRvcjtcbitcdHVuc2lnbmVkIGludCBjcnlzdGFsX2toejtcbit9O1xuK2V4dGVybiBpbnQgY3B1aWRfZ2V0X3RzY19pbmZvKHN0cnVjdCBjcHVpZF90c2NfaW5mbyAqaW5mbyk7XG4rZXh0ZXJuIHVuc2lnbmVkIGludCBfX2NwdV9raHpfZnJvbV9jcHVpZCh2b2lkKTtcbitcbiBleHRlcm4gdm9pZCB0c2NfZWFybHlfaW5pdCh2b2lkKTtcbiBleHRlcm4gdm9pZCB0c2NfaW5pdCh2b2lkKTtcbiBleHRlcm4gdm9pZCBtYXJrX3RzY191bnN0YWJsZShjaGFyICpyZWFzb24pO1xuIGV4dGVybiBpbnQgdW5zeW5jaHJvbml6ZWRfdHNjKHZvaWQpO1xuIGV4dGVybiBpbnQgY2hlY2tfdHNjX3Vuc3RhYmxlKHZvaWQpO1xuIGV4dGVybiB2b2lkIG1hcmtfdHNjX2FzeW5jX3Jlc2V0cyhjaGFyICpyZWFzb24pO1xuLWV4dGVybiB1bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KHZvaWQpO1xuLWV4dGVybiB1bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfdHNjKHZvaWQpO1xuIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgbmF0aXZlX3NjaGVkX2Nsb2NrX2Zyb21fdHNjKHU2NCB0c2MpO1xuIFxuIGV4dGVybiBpbnQgdHNjX2Nsb2Nrc291cmNlX3JlbGlhYmxlO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oXG5pbmRleCA5NTNkMzE5OTQwOGFlNS4uZTg3OWU2ZTgzNDI4MzAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oXG5AQCAtMTIzLDYgKzEyMyw4IEBAIHN0cnVjdCB4ODZfaW5pdF9wY2kge1xuICAqIEBtc2lfZXh0X2Rlc3RfaWQ6XHRcdE1TSSBzdXBwb3J0cyAxNS1iaXQgQVBJQyBJRHNcbiAgKiBAaW5pdF9tZW1fbWFwcGluZzpcdFx0c2V0dXAgZWFybHkgbWFwcGluZ3MgZHVyaW5nIGluaXRfbWVtX21hcHBpbmcoKVxuICAqIEBpbml0X2FmdGVyX2Jvb3RtZW06XHRcdGd1ZXN0IGluaXQgYWZ0ZXIgYm9vdCBhbGxvY2F0b3IgaXMgZmluaXNoZWRcbisgKiBAZ2V0X3RzY19raHo6XHRcdGdldCB0aGUgVFNDIGZyZXF1ZW5jeSAocmV0dXJucyAwIGlmIGZyZXF1ZW5jeSBpcyB1bmtub3duKVxuKyAqIEBnZXRfY3B1X2toejpcdFx0Z2V0IHRoZSBDUFUgZnJlcXVlbmN5IChyZXR1cm5zIDAgaWYgZnJlcXVlbmN5IGlzIHVua25vd24pXG4gICovXG4gc3RydWN0IHg4Nl9oeXBlcl9pbml0IHtcbiBcdHZvaWQgKCppbml0X3BsYXRmb3JtKSh2b2lkKTtcbkBAIC0xMzEsNiArMTMzLDggQEAgc3RydWN0IHg4Nl9oeXBlcl9pbml0IHtcbiBcdGJvb2wgKCptc2lfZXh0X2Rlc3RfaWQpKHZvaWQpO1xuIFx0dm9pZCAoKmluaXRfbWVtX21hcHBpbmcpKHZvaWQpO1xuIFx0dm9pZCAoKmluaXRfYWZ0ZXJfYm9vdG1lbSkodm9pZCk7XG4rXHR1bnNpZ25lZCBpbnQgKCpnZXRfdHNjX2toeikodm9pZCk7XG4rXHR1bnNpZ25lZCBpbnQgKCpnZXRfY3B1X2toeikodm9pZCk7XG4gfTtcbiBcbiAvKipcbkBAIC0yOTEsOCArMjk1LDYgQEAgc3RydWN0IHg4Nl9oeXBlcl9ydW50aW1lIHtcbiBcbiAvKipcbiAgKiBzdHJ1Y3QgeDg2X3BsYXRmb3JtX29wcyAtIHBsYXRmb3JtIHNwZWNpZmljIHJ1bnRpbWUgZnVuY3Rpb25zXG4tICogQGNhbGlicmF0ZV9jcHU6XHRcdGNhbGlicmF0ZSBDUFVcbi0gKiBAY2FsaWJyYXRlX3RzYzpcdFx0Y2FsaWJyYXRlIFRTQywgaWYgZGlmZmVyZW50IGZyb20gQ1BVXG4gICogQGdldF93YWxsY2xvY2s6XHRcdGdldCB0aW1lIGZyb20gSFcgY2xvY2sgbGlrZSBSVEMgZXRjLlxuICAqIEBzZXRfd2FsbGNsb2NrOlx0XHRzZXQgdGltZSBiYWNrIHRvIEhXIGNsb2NrXG4gICogQGlvbW11X3NodXRkb3duOlx0XHRzZXQgYnkgYW4gSU9NTVUgZHJpdmVyIGZvciBzaHV0ZG93biBpZiBuZWNlc3NhcnlcbkBAIC0zMTYsOCArMzE4LDYgQEAgc3RydWN0IHg4Nl9oeXBlcl9ydW50aW1lIHtcbiAgKiBAZ3Vlc3Q6XHRcdFx0Z3Vlc3QgaW5jYXJuYXRpb25zIGNhbGxiYWNrc1xuICAqL1xuIHN0cnVjdCB4ODZfcGxhdGZvcm1fb3BzIHtcbi1cdHVuc2lnbmVkIGxvbmcgKCpjYWxpYnJhdGVfY3B1KSh2b2lkKTtcbi1cdHVuc2lnbmVkIGxvbmcgKCpjYWxpYnJhdGVfdHNjKSh2b2lkKTtcbiBcdHZvaWQgKCpnZXRfd2FsbGNsb2NrKShzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpO1xuIFx0aW50ICgqc2V0X3dhbGxjbG9jaykoY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKTtcbiBcdHZvaWQgKCppb21tdV9zaHV0ZG93bikodm9pZCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm1fcGFyYS5oIGIvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm1fcGFyYS5oXG5pbmRleCBhMWVmYTc5MDdhMGIxMC4uYzNhMzg0NzExZjNhNWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bV9wYXJhLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtX3BhcmEuaFxuQEAgLTQ0LDYgKzQ0LDE3IEBAXG4gICovXG4gI2RlZmluZSBLVk1fRkVBVFVSRV9DTE9DS1NPVVJDRV9TVEFCTEVfQklUXHQyNFxuIFxuKy8qXG4rICogVGhlIHRpbWluZyBpbmZvcm1hdGlvbiBsZWFmIHByb3ZpZGVzIFRTQyBhbmQgbG9jYWwgQVBJQyB0aW1lciBmcmVxdWVuY3lcbisgKiBpbmZvcm1hdGlvbiB0byB0aGUgZ3Vlc3QuICBOb3RlLCB1c2Vyc3BhY2UgaXMgcmVzcG9uc2libGUgZm9yIGZpbGxpbmcgdGhlXG4rICogbGVhZiB3aXRoIHRoZSBjb3JyZWN0IGluZm9ybWF0aW9uLlxuKyAqXG4rICogICMgRUFYOiAoVmlydHVhbCkgVFNDIGZyZXF1ZW5jeSBpbiBrSHouXG4rICogICMgRUJYOiAoVmlydHVhbCkgQnVzIChsb2NhbCBBUElDIHRpbWVyKSBmcmVxdWVuY3kgaW4ga0h6LlxuKyAqICAjIEVDWCwgRURYOiBSZXNlcnZlZCAobXVzdCBiZSB6ZXJvKS5cbisgKi9cbisjZGVmaW5lIEtWTV9DUFVJRF9USU1JTkdfSU5GT1x0MHg0MDAwMDAxMFxuK1xuICNkZWZpbmUgTVNSX0tWTV9XQUxMX0NMT0NLICAweDExXG4gI2RlZmluZSBNU1JfS1ZNX1NZU1RFTV9USU1FIDB4MTJcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmNcbmluZGV4IGFhMWUxOTk3OWFhOGUxLi44ZDNkOTMwNTc2ZmQ3MSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuY1xuKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jXG5AQCAtMTc2LDcgKzE3Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbGFwaWNfcmVzb3VyY2UgPSB7XG4gfTtcbiBcbiAvKiBNZWFzdXJlZCBpbiB0aWNrcyBwZXIgSFouICovXG4tdW5zaWduZWQgaW50IGxhcGljX3RpbWVyX3BlcmlvZCA9IDA7XG4rc3RhdGljIHVuc2lnbmVkIGludCBsYXBpY190aW1lcl9wZXJpb2Q7XG4gXG4gc3RhdGljIHZvaWQgYXBpY19wbV9hY3RpdmF0ZSh2b2lkKTtcbiBcbkBAIC03OTYsNiArNzk2LDE2IEBAIGJvb2wgX19pbml0IGFwaWNfbmVlZHNfcGl0KHZvaWQpXG4gXHRyZXR1cm4gbGFwaWNfdGltZXJfcGVyaW9kID09IDA7XG4gfVxuIFxuK3ZvaWQgYXBpY19zZXRfdGltZXJfcGVyaW9kX2toeih1NjQgcGVyaW9kX2toeiwgY29uc3QgY2hhciAqc291cmNlKVxuK3tcbitcdGxhcGljX3RpbWVyX3BlcmlvZCA9IG11bF91NjRfdTMyX2RpdihwZXJpb2Rfa2h6LCAxMDAwLCBIWik7XG4rfVxuK1xuK3ZvaWQgYXBpY19zZXRfdGltZXJfcGVyaW9kX2h6KHU2NCBwZXJpb2RfaHosIGNvbnN0IGNoYXIgKnNvdXJjZSlcbit7XG4rXHRsYXBpY190aW1lcl9wZXJpb2QgPSBkaXZfdTY0KHBlcmlvZF9oeiwgSFopO1xuK31cbitcbiBzdGF0aWMgaW50IF9faW5pdCBjYWxpYnJhdGVfQVBJQ19jbG9jayh2b2lkKVxuIHtcbiBcdHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmxldnQgPSB0aGlzX2NwdV9wdHIoXHUwMDI2bGFwaWNfZXZlbnRzKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2Fjcm4uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYWNybi5jXG5pbmRleCBkYzExOWFmODM1MjQyYS4uZGM3MWE2ZmRkNDYxMzkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2Fjcm4uY1xuKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9hY3JuLmNcbkBAIC0xOSwxOCArMTksMjggQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vaWR0ZW50cnkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9pcnFfcmVncy5oXHUwMDNlXG4gXG4rc3RhdGljIHVuc2lnbmVkIGludCBhY3JuX3RzY19raHpfY3B1aWQgX19pbml0ZGF0YTtcbitcbiBzdGF0aWMgdTMyIF9faW5pdCBhY3JuX2RldGVjdCh2b2lkKVxuIHtcbiBcdHJldHVybiBhY3JuX2NwdWlkX2Jhc2UoKTtcbiB9XG4gXG4rc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgYWNybl9nZXRfdHNjX2toeih2b2lkKVxuK3tcbitcdHJldHVybiBhY3JuX3RzY19raHpfY3B1aWQ7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIF9faW5pdCBhY3JuX2luaXRfcGxhdGZvcm0odm9pZClcbiB7XG4gXHQvKiBJbnN0YWxsIHN5c3RlbSBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgQUNSTiBoeXBlcnZpc29yIGNhbGxiYWNrICovXG4gXHRzeXN2ZWNfaW5zdGFsbChIWVBFUlZJU09SX0NBTExCQUNLX1ZFQ1RPUiwgc3lzdmVjX2Fjcm5faHZfY2FsbGJhY2spO1xuIFxuLVx0eDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MgPSBhY3JuX2dldF90c2Nfa2h6O1xuLVx0eDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUgPSBhY3JuX2dldF90c2Nfa2h6O1xuK1x0YWNybl90c2Nfa2h6X2NwdWlkID0gY3B1aWRfZWF4KEFDUk5fQ1BVSURfVElNSU5HX0lORk8pO1xuK1x0aWYgKGFjcm5fdHNjX2toel9jcHVpZCkge1xuK1x0XHR4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeiA9IGFjcm5fZ2V0X3RzY19raHo7XG4rXHRcdHg4Nl9pbml0Lmh5cGVyLmdldF9jcHVfa2h6ID0gYWNybl9nZXRfdHNjX2toejtcbitcdH1cbiB9XG4gXG4gc3RhdGljIGJvb2wgYWNybl94MmFwaWNfYXZhaWxhYmxlKHZvaWQpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tc2h5cGVydi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tc2h5cGVydi5jXG5pbmRleCAxODVkNGY2NzdlYzBmMC4uYzRkYThlMzUzMTlhY2YgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21zaHlwZXJ2LmNcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuY1xuQEAgLTI3NSw2MyArMjc1LDYgQEAgc3RhdGljIHZvaWQgaHZfZ3Vlc3RfY3Jhc2hfc2h1dGRvd24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gfVxuICNlbmRpZiAvKiBDT05GSUdfQ1JBU0hfRFVNUCAqL1xuIFxuLXN0YXRpYyB1NjQgaHZfcmVmX2NvdW50ZXJfYXRfc3VzcGVuZDtcbi1zdGF0aWMgdm9pZCAoKm9sZF9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKSh2b2lkKTtcbi1zdGF0aWMgdm9pZCAoKm9sZF9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKSh2b2lkKTtcbi1cbi0vKlxuLSAqIEh5cGVyLVYgY2xvY2sgY291bnRlciByZXNldHMgZHVyaW5nIGhpYmVybmF0aW9uLiBTYXZlIGFuZCByZXN0b3JlIGNsb2NrXG4tICogb2Zmc2V0IGR1cmluZyBzdXNwZW5kL3Jlc3VtZSwgd2hpbGUgYWxzbyBjb25zaWRlcmluZyB0aGUgdGltZSBwYXNzZWRcbi0gKiBiZWZvcmUgc3VzcGVuZC4gVGhpcyBpcyB0byBtYWtlIHN1cmUgdGhhdCBzY2hlZF9jbG9jayB1c2luZyBodiB0c2MgcGFnZVxuLSAqIGJhc2VkIGNsb2Nrc291cmNlLCBwcm9jZWVkcyBmcm9tIHdoZXJlIGl0IGxlZnQgb2ZmIGR1cmluZyBzdXNwZW5kIGFuZFxuLSAqIGl0IHNob3dzIGNvcnJlY3QgdGltZSBmb3IgdGhlIHRpbWVzdGFtcHMgb2Yga2VybmVsIG1lc3NhZ2VzIGFmdGVyIHJlc3VtZS5cbi0gKi9cbi1zdGF0aWMgdm9pZCBzYXZlX2h2X2Nsb2NrX3RzY19zdGF0ZSh2b2lkKVxuLXtcbi1cdGh2X3JlZl9jb3VudGVyX2F0X3N1c3BlbmQgPSBodl9yZWFkX3JlZmVyZW5jZV9jb3VudGVyKCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHJlc3RvcmVfaHZfY2xvY2tfdHNjX3N0YXRlKHZvaWQpXG4te1xuLVx0Lypcbi1cdCAqIEFkanVzdCB0aGUgb2Zmc2V0cyB1c2VkIGJ5IGh2IHRzYyBjbG9ja3NvdXJjZSB0b1xuLVx0ICogYWNjb3VudCBmb3IgdGhlIHRpbWUgc3BlbnQgYmVmb3JlIGhpYmVybmF0aW9uLlxuLVx0ICogYWRqdXN0ZWQgdmFsdWUgPSByZWZlcmVuY2UgY291bnRlciAodGltZSkgYXQgc3VzcGVuZFxuLVx0ICogICAgICAgICAgICAgICAgLSByZWZlcmVuY2UgY291bnRlciAodGltZSkgbm93LlxuLVx0ICovXG4tXHRodl9hZGpfc2NoZWRfY2xvY2tfb2Zmc2V0KGh2X3JlZl9jb3VudGVyX2F0X3N1c3BlbmQgLSBodl9yZWFkX3JlZmVyZW5jZV9jb3VudGVyKCkpO1xuLX1cbi1cbi0vKlxuLSAqIEZ1bmN0aW9ucyB0byBvdmVycmlkZSBzYXZlX3NjaGVkX2Nsb2NrX3N0YXRlIGFuZCByZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlXG4tICogZnVuY3Rpb25zIG9mIHg4Nl9wbGF0Zm9ybS4gVGhlIEh5cGVyLVYgY2xvY2sgY291bnRlciBpcyByZXNldCBkdXJpbmdcbi0gKiBzdXNwZW5kLXJlc3VtZSBhbmQgdGhlIG9mZnNldCB1c2VkIHRvIG1lYXN1cmUgdGltZSBuZWVkcyB0byBiZVxuLSAqIGNvcnJlY3RlZCwgcG9zdCByZXN1bWUuXG4tICovXG4tc3RhdGljIHZvaWQgaHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxuLXtcbi1cdG9sZF9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKCk7XG4tXHRzYXZlX2h2X2Nsb2NrX3RzY19zdGF0ZSgpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBodl9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXG4te1xuLVx0cmVzdG9yZV9odl9jbG9ja190c2Nfc3RhdGUoKTtcbi1cdG9sZF9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIF9faW5pdCB4ODZfc2V0dXBfb3BzX2Zvcl90c2NfcGdfY2xvY2sodm9pZClcbi17XG4tXHRpZiAoIShtc19oeXBlcnYuZmVhdHVyZXMgXHUwMDI2IEhWX01TUl9SRUZFUkVOQ0VfVFNDX0FWQUlMQUJMRSkpXG4tXHRcdHJldHVybjtcbi1cbi1cdG9sZF9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlID0geDg2X3BsYXRmb3JtLnNhdmVfc2NoZWRfY2xvY2tfc3RhdGU7XG4tXHR4ODZfcGxhdGZvcm0uc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSA9IGh2X3NhdmVfc2NoZWRfY2xvY2tfc3RhdGU7XG4tXG4tXHRvbGRfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSA9IHg4Nl9wbGF0Zm9ybS5yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlO1xuLVx0eDg2X3BsYXRmb3JtLnJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUgPSBodl9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlO1xuLX1cbi1cbiAjaWZkZWYgQ09ORklHX1g4Nl82NFxuIERFRklORV9TVEFUSUNfQ0FMTChodl9oeXBlcmNhbGwsIGh2X3N0ZF9oeXBlcmNhbGwpO1xuIEVYUE9SVF9TVEFUSUNfQ0FMTF9UUkFNUF9HUEwoaHZfaHlwZXJjYWxsKTtcbkBAIC0zOTUsNyArMzM4LDcgQEAgc3RhdGljIGludCBodl9ubWlfdW5rbm93bih1bnNpZ25lZCBpbnQgdmFsLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiB9XG4gI2VuZGlmXG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgaHZfZ2V0X3RzY19raHoodm9pZClcbitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBodl9nZXRfdHNjX2toeih2b2lkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZnJlcTtcbiBcbkBAIC01NzMsOSArNTE2LDggQEAgc3RhdGljIHZvaWQgX19pbml0IG1zX2h5cGVydl9pbml0X3BsYXRmb3JtKHZvaWQpXG4gXG4gXHRpZiAobXNfaHlwZXJ2LmZlYXR1cmVzIFx1MDAyNiBIVl9BQ0NFU1NfRlJFUVVFTkNZX01TUlMgXHUwMDI2XHUwMDI2XG4gXHQgICAgbXNfaHlwZXJ2Lm1pc2NfZmVhdHVyZXMgXHUwMDI2IEhWX0ZFQVRVUkVfRlJFUVVFTkNZX01TUlNfQVZBSUxBQkxFKSB7XG4tXHRcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjID0gaHZfZ2V0X3RzY19raHo7XG4tXHRcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ID0gaHZfZ2V0X3RzY19raHo7XG4tXHRcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpO1xuK1x0XHR4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeiA9IGh2X2dldF90c2Nfa2h6O1xuK1x0XHR4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeiA9IGh2X2dldF90c2Nfa2h6O1xuIFx0fVxuIFxuIFx0aWYgKG1zX2h5cGVydi5wcml2X2hpZ2ggXHUwMDI2IEhWX0lTT0xBVElPTikge1xuQEAgLTY0NiwxMCArNTg4LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IG1zX2h5cGVydl9pbml0X3BsYXRmb3JtKHZvaWQpXG4gXHRcdHU2NFx0aHZfbGFwaWNfZnJlcXVlbmN5O1xuIFxuIFx0XHRyZG1zcnEoSFZfWDY0X01TUl9BUElDX0ZSRVFVRU5DWSwgaHZfbGFwaWNfZnJlcXVlbmN5KTtcbi1cdFx0aHZfbGFwaWNfZnJlcXVlbmN5ID0gZGl2X3U2NChodl9sYXBpY19mcmVxdWVuY3ksIEhaKTtcbi1cdFx0bGFwaWNfdGltZXJfcGVyaW9kID0gaHZfbGFwaWNfZnJlcXVlbmN5O1xuLVx0XHRwcl9pbmZvKFwiSHlwZXItVjogTEFQSUMgVGltZXIgRnJlcXVlbmN5OiAlI3hcXG5cIixcbi1cdFx0XHRsYXBpY190aW1lcl9wZXJpb2QpO1xuK1x0XHRhcGljX3NldF90aW1lcl9wZXJpb2RfaHooaHZfbGFwaWNfZnJlcXVlbmN5LCBcIkh5cGVyLVYgaHlwZXJ2aXNvclwiKTtcbiBcdH1cbiBcbiBcdHJlZ2lzdGVyX25taV9oYW5kbGVyKE5NSV9VTktOT1dOLCBodl9ubWlfdW5rbm93biwgTk1JX0ZMQUdfRklSU1QsXG5AQCAtNzQwLDcgKzY3OSw2IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtc19oeXBlcnZfaW5pdF9wbGF0Zm9ybSh2b2lkKVxuIFxuIFx0LyogUmVnaXN0ZXIgSHlwZXItViBzcGVjaWZpYyBjbG9ja3NvdXJjZSAqL1xuIFx0aHZfaW5pdF9jbG9ja3NvdXJjZSgpO1xuLVx0eDg2X3NldHVwX29wc19mb3JfdHNjX3BnX2Nsb2NrKCk7XG4gXHRodl92dGxfaW5pdF9wbGF0Zm9ybSgpO1xuICNlbmRpZlxuIFx0LypcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Ztd2FyZS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuY1xuaW5kZXggMzRiNzM1NzNiMTA4ZDcuLjIzMjI1NTI3OWE2ZWVjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuY1xuKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuY1xuQEAgLTY0LDcgKzY0LDcgQEAgc3RydWN0IHZtd2FyZV9zdGVhbF90aW1lIHtcbiBcdHU2NCByZXNlcnZlZFs3XTtcbiB9O1xuIFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHZtd2FyZV90c2Nfa2h6IF9fcm9fYWZ0ZXJfaW5pdDtcbitzdGF0aWMgdW5zaWduZWQgbG9uZyB2bXdhcmVfdHNjX2toeiBfX2luaXRkYXRhO1xuIHN0YXRpYyB1OCB2bXdhcmVfaHlwZXJjYWxsX21vZGUgICAgIF9fcm9fYWZ0ZXJfaW5pdDtcbiBcbiB1bnNpZ25lZCBsb25nIHZtd2FyZV9oeXBlcmNhbGxfc2xvdyh1bnNpZ25lZCBsb25nIGNtZCxcbkBAIC0xMzcsNyArMTM3LDcgQEAgc3RhdGljIGlubGluZSBpbnQgX192bXdhcmVfcGxhdGZvcm0odm9pZClcbiBcdHJldHVybiBlYXggIT0gVUlOVF9NQVggXHUwMDI2XHUwMDI2IGVieCA9PSBWTVdBUkVfSFlQRVJWSVNPUl9NQUdJQztcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgdm13YXJlX2dldF90c2Nfa2h6KHZvaWQpXG4rc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgdm13YXJlX2dldF90c2Nfa2h6KHZvaWQpXG4ge1xuIFx0cmV0dXJuIHZtd2FyZV90c2Nfa2h6O1xuIH1cbkBAIC0zNDgsNyArMzQ4LDggQEAgc3RhdGljIHZvaWQgX19pbml0IHZtd2FyZV9wYXJhdmlydF9vcHNfc2V0dXAodm9pZClcbiBcdHZtd2FyZV9jeWMybnNfc2V0dXAoKTtcbiBcbiBcdGlmICh2bXdfc2NoZWRfY2xvY2spXG4tXHRcdHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh2bXdhcmVfc2NoZWRfY2xvY2spO1xuK1x0XHRwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodm13YXJlX3NjaGVkX2Nsb2NrLFxuK1x0XHRcdFx0XHQgeDg2X2luaXRfbm9vcCwgeDg2X2luaXRfbm9vcCk7XG4gXG4gXHRpZiAodm13YXJlX2lzX3N0ZWFsY2xvY2tfYXZhaWxhYmxlKCkpIHtcbiBcdFx0aGFzX3N0ZWFsX2Nsb2NrID0gdHJ1ZTtcbkBAIC0zOTAsOCArMzkxLDYgQEAgc3RhdGljIHZvaWQgX19pbml0IHZtd2FyZV9zZXRfY2FwYWJpbGl0aWVzKHZvaWQpXG4ge1xuIFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpO1xuIFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfUkVMSUFCTEUpO1xuLVx0aWYgKHZtd2FyZV90c2Nfa2h6KVxuLVx0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKTtcbiBcdGlmICh2bXdhcmVfaHlwZXJjYWxsX21vZGUgPT0gQ1BVSURfVk1XQVJFX0ZFQVRVUkVTX0VDWF9WTUNBTEwpXG4gXHRcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVk1DQUxMKTtcbiBcdGVsc2UgaWYgKHZtd2FyZV9oeXBlcmNhbGxfbW9kZSA9PSBDUFVJRF9WTVdBUkVfRkVBVFVSRVNfRUNYX1ZNTUNBTEwpXG5AQCAtNDE5LDE1ICs0MTgsMTEgQEAgc3RhdGljIHZvaWQgX19pbml0IHZtd2FyZV9wbGF0Zm9ybV9zZXR1cCh2b2lkKVxuIFx0XHR9XG4gXG4gXHRcdHZtd2FyZV90c2Nfa2h6ID0gdHNjX2toejtcbi1cdFx0eDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2MgPSB2bXdhcmVfZ2V0X3RzY19raHo7XG4tXHRcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ID0gdm13YXJlX2dldF90c2Nfa2h6O1xuK1x0XHR4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeiA9IHZtd2FyZV9nZXRfdHNjX2toejtcbitcdFx0eDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHogPSB2bXdhcmVfZ2V0X3RzY19raHo7XG4gXG4tI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQ1xuIFx0XHQvKiBTa2lwIGxhcGljIGNhbGlicmF0aW9uIHNpbmNlIHdlIGtub3cgdGhlIGJ1cyBmcmVxdWVuY3kuICovXG4tXHRcdGxhcGljX3RpbWVyX3BlcmlvZCA9IGVjeCAvIEhaO1xuLVx0XHRwcl9pbmZvKFwiSG9zdCBidXMgY2xvY2sgc3BlZWQgcmVhZCBmcm9tIGh5cGVydmlzb3IgOiAldSBIelxcblwiLFxuLVx0XHRcdGVjeCk7XG4tI2VuZGlmXG4rXHRcdGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9oeihlY3gsIFwiVk13YXJlIGh5cGVydmlzb3JcIik7XG4gXHR9IGVsc2Uge1xuIFx0XHRwcl93YXJuKFwiRmFpbGVkIHRvIGdldCBUU0MgZnJlcSBmcm9tIHRoZSBoeXBlcnZpc29yXFxuXCIpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9qYWlsaG91c2UuYyBiL2FyY2gveDg2L2tlcm5lbC9qYWlsaG91c2UuY1xuaW5kZXggZjU4Y2U5MjIwZTBmMzIuLmZmMTczMDUyY2RjZWRjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2phaWxob3VzZS5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvamFpbGhvdXNlLmNcbkBAIC02NSwxMCArNjUsMTAgQEAgc3RhdGljIHZvaWQgamFpbGhvdXNlX2dldF93YWxsY2xvY2soc3RydWN0IHRpbWVzcGVjNjQgKm5vdylcbiBcbiBzdGF0aWMgdm9pZCBfX2luaXQgamFpbGhvdXNlX3RpbWVyX2luaXQodm9pZClcbiB7XG4tXHRsYXBpY190aW1lcl9wZXJpb2QgPSBzZXR1cF9kYXRhLnYxLmFwaWNfa2h6ICogKDEwMDAgLyBIWik7XG4rXHRhcGljX3NldF90aW1lcl9wZXJpb2Rfa2h6KHNldHVwX2RhdGEudjEuYXBpY19raHosIFwiSmFpbGhvdXNlIGh5cGVydmlzb3JcIik7XG4gfVxuIFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGphaWxob3VzZV9nZXRfdHNjKHZvaWQpXG4rc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgamFpbGhvdXNlX2dldF90c2Modm9pZClcbiB7XG4gXHRyZXR1cm4gcHJlY2FsaWJyYXRlZF90c2Nfa2h6O1xuIH1cbkBAIC0yMTAsOCArMjEwLDYgQEAgc3RhdGljIHZvaWQgX19pbml0IGphaWxob3VzZV9pbml0X3BsYXRmb3JtKHZvaWQpXG4gXHR4ODZfaW5pdC5tcHBhcnNlLnBhcnNlX3NtcF9jZmdcdFx0PSBqYWlsaG91c2VfcGFyc2Vfc21wX2NvbmZpZztcbiBcdHg4Nl9pbml0LnBjaS5hcmNoX2luaXRcdFx0XHQ9IGphaWxob3VzZV9wY2lfYXJjaF9pbml0O1xuIFxuLVx0eDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHVcdFx0PSBqYWlsaG91c2VfZ2V0X3RzYztcbi1cdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjXHRcdD0gamFpbGhvdXNlX2dldF90c2M7XG4gXHR4ODZfcGxhdGZvcm0uZ2V0X3dhbGxjbG9ja1x0XHQ9IGphaWxob3VzZV9nZXRfd2FsbGNsb2NrO1xuIFx0eDg2X3BsYXRmb3JtLmxlZ2FjeS5ydGNcdFx0XHQ9IDA7XG4gXHR4ODZfcGxhdGZvcm0ubGVnYWN5Lndhcm1fcmVzZXRcdFx0PSAwO1xuQEAgLTI1Nyw3ICsyNTUsNiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgamFpbGhvdXNlX2luaXRfcGxhdGZvcm0odm9pZClcbiBcdHByX2RlYnVnKFwiSmFpbGhvdXNlOiBQTS1UaW1lciBJTyBQb3J0OiAlI3hcXG5cIiwgcG10bXJfaW9wb3J0KTtcbiBcbiBcdHByZWNhbGlicmF0ZWRfdHNjX2toeiA9IHNldHVwX2RhdGEudjEudHNjX2toejtcbi1cdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpO1xuIFxuIFx0cGNpX3Byb2JlID0gMDtcbiBcbkBAIC0yOTMsNSArMjkwLDcgQEAgY29uc3Qgc3RydWN0IGh5cGVydmlzb3JfeDg2IHg4Nl9oeXBlcl9qYWlsaG91c2UgX19yZWZjb25zdCA9IHtcbiBcdC5kZXRlY3RcdFx0XHQ9IGphaWxob3VzZV9kZXRlY3QsXG4gXHQuaW5pdC5pbml0X3BsYXRmb3JtXHQ9IGphaWxob3VzZV9pbml0X3BsYXRmb3JtLFxuIFx0LmluaXQueDJhcGljX2F2YWlsYWJsZVx0PSBqYWlsaG91c2VfeDJhcGljX2F2YWlsYWJsZSxcbitcdC5pbml0LmdldF90c2Nfa2h6XHQ9IGphaWxob3VzZV9nZXRfdHNjLFxuK1x0LmluaXQuZ2V0X2NwdV9raHpcdD0gamFpbGhvdXNlX2dldF90c2MsXG4gXHQuaWdub3JlX25vcHZcdFx0PSB0cnVlLFxuIH07XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2t2bS5jIGIvYXJjaC94ODYva2VybmVsL2t2bS5jXG5pbmRleCBkY2VmODRkYTMwNGI4OS4uYmVlYTBiNmFhNzhlMWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3ZtLmNcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9rdm0uY1xuQEAgLTQ5LDYgKzQ5LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc3ZtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZTgyMC9hcGkuaFx1MDAzZVxuIFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQga3ZtX3RzY19raHpfY3B1aWQgX19pbml0ZGF0YTtcbitzdGF0aWMgdW5zaWduZWQgaW50IGt2bV9jcHVfa2h6X2NwdWlkIF9faW5pdGRhdGE7XG4rXG4gREVGSU5FX1NUQVRJQ19LRVlfRkFMU0VfUk8oa3ZtX2FzeW5jX3BmX2VuYWJsZWQpO1xuIFxuIHN0YXRpYyBpbnQga3ZtYXBmID0gMTtcbkBAIC00NTcsNyArNDYwLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHNldl9tYXBfcGVyY3B1X2RhdGEodm9pZClcbiBcdH1cbiB9XG4gXG4tc3RhdGljIHZvaWQga3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKGJvb2wgc2h1dGRvd24pXG4rc3RhdGljIHZvaWQga3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKVxuIHtcbiBcdGt2bV9kaXNhYmxlX3N0ZWFsX3RpbWUoKTtcbiBcdGlmIChrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9QVl9FT0kpKVxuQEAgLTQ2NSwyMyArNDY4LDMwIEBAIHN0YXRpYyB2b2lkIGt2bV9ndWVzdF9jcHVfb2ZmbGluZShib29sIHNodXRkb3duKVxuIFx0aWYgKGt2bV9wYXJhX2hhc19mZWF0dXJlKEtWTV9GRUFUVVJFX01JR1JBVElPTl9DT05UUk9MKSlcbiBcdFx0d3Jtc3JxKE1TUl9LVk1fTUlHUkFUSU9OX0NPTlRST0wsIDApO1xuIFx0a3ZtX3B2X2Rpc2FibGVfYXBmKCk7XG4tXHRpZiAoIXNodXRkb3duKVxuK1x0aWYgKGFjdGlvbiAhPSBLVk1fR1VFU1RfU0hVVERPV04pXG4gXHRcdGFwZl90YXNrX3dha2VfYWxsKCk7XG4tXHRrdm1jbG9ja19kaXNhYmxlKCk7XG4rXG4rXHRrdm1jbG9ja19jcHVfYWN0aW9uKGFjdGlvbik7XG4gfVxuIFxuLXN0YXRpYyBpbnQga3ZtX2NwdV9vbmxpbmUodW5zaWduZWQgaW50IGNwdSlcbitzdGF0aWMgdm9pZCBfX2t2bV9jcHVfb25saW5lKHVuc2lnbmVkIGludCBjcHUsIGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4rXHRrdm1jbG9ja19jcHVfYWN0aW9uKGFjdGlvbik7XG4gXHRrdm1fZ3Vlc3RfY3B1X2luaXQoKTtcbiBcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbi1cdHJldHVybiAwO1xuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1NNUFxuIFxuK3N0YXRpYyBpbnQga3ZtX2NwdV9vbmxpbmUodW5zaWduZWQgaW50IGNwdSlcbit7XG4rXHRfX2t2bV9jcHVfb25saW5lKGNwdSwgS1ZNX0dVRVNUX0FQX09OTElORSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIERFRklORV9QRVJfQ1BVKGNwdW1hc2tfdmFyX3QsIF9fcHZfY3B1X21hc2spO1xuIFxuIHN0YXRpYyBib29sIHB2X3RsYl9mbHVzaF9zdXBwb3J0ZWQodm9pZClcbkBAIC03MjMsNyArNzMzLDcgQEAgc3RhdGljIGludCBrdm1fY3B1X2Rvd25fcHJlcGFyZSh1bnNpZ25lZCBpbnQgY3B1KVxuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbi1cdGt2bV9ndWVzdF9jcHVfb2ZmbGluZShmYWxzZSk7XG4rXHRrdm1fZ3Vlc3RfY3B1X29mZmxpbmUoS1ZNX0dVRVNUX0FQX09GRkxJTkUpO1xuIFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTczNCw3ICs3NDQsNyBAQCBzdGF0aWMgaW50IGt2bV9zdXNwZW5kKHZvaWQgKmRhdGEpXG4ge1xuIFx0dTY0IHZhbCA9IDA7XG4gXG4tXHRrdm1fZ3Vlc3RfY3B1X29mZmxpbmUoZmFsc2UpO1xuK1x0a3ZtX2d1ZXN0X2NwdV9vZmZsaW5lKEtWTV9HVUVTVF9CU1BfU1VTUEVORCk7XG4gXG4gI2lmZGVmIENPTkZJR19BUkNIX0NQVUlETEVfSEFMVFBPTExcbiBcdGlmIChrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9QT0xMX0NPTlRST0wpKVxuQEAgLTc0Niw3ICs3NTYsNyBAQCBzdGF0aWMgaW50IGt2bV9zdXNwZW5kKHZvaWQgKmRhdGEpXG4gXG4gc3RhdGljIHZvaWQga3ZtX3Jlc3VtZSh2b2lkICpkYXRhKVxuIHtcbi1cdGt2bV9jcHVfb25saW5lKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpO1xuK1x0X19rdm1fY3B1X29ubGluZShyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCBLVk1fR1VFU1RfQlNQX1JFU1VNRSk7XG4gXG4gI2lmZGVmIENPTkZJR19BUkNIX0NQVUlETEVfSEFMVFBPTExcbiBcdGlmIChrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9QT0xMX0NPTlRST0wpIFx1MDAyNlx1MDAyNiBoYXNfZ3Vlc3RfcG9sbClcbkBAIC03NjUsNyArNzc1LDcgQEAgc3RhdGljIHN0cnVjdCBzeXNjb3JlIGt2bV9zeXNjb3JlID0ge1xuIFxuIHN0YXRpYyB2b2lkIGt2bV9wdl9ndWVzdF9jcHVfcmVib290KHZvaWQgKnVudXNlZClcbiB7XG4tXHRrdm1fZ3Vlc3RfY3B1X29mZmxpbmUodHJ1ZSk7XG4rXHRrdm1fZ3Vlc3RfY3B1X29mZmxpbmUoS1ZNX0dVRVNUX1NIVVRET1dOKTtcbiB9XG4gXG4gc3RhdGljIGludCBrdm1fcHZfcmVib290X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuQEAgLTc4OSw3ICs3OTksNyBAQCBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGt2bV9wdl9yZWJvb3RfbmIgPSB7XG4gI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QXG4gc3RhdGljIHZvaWQga3ZtX2NyYXNoX3NodXRkb3duKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbi1cdGt2bV9ndWVzdF9jcHVfb2ZmbGluZSh0cnVlKTtcbitcdGt2bV9ndWVzdF9jcHVfb2ZmbGluZShLVk1fR1VFU1RfU0hVVERPV04pO1xuIFx0bmF0aXZlX21hY2hpbmVfY3Jhc2hfc2h1dGRvd24ocmVncyk7XG4gfVxuICNlbmRpZlxuQEAgLTkxMSw2ICs5MjEsMjYgQEAgYm9vbCBrdm1fcGFyYV9hdmFpbGFibGUodm9pZClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3BhcmFfYXZhaWxhYmxlKTtcbiBcbitzdGF0aWMgdTMyIF9faW5pdCBrdm1fY3B1aWRfdGltaW5nX2luZm9fbGVhZih2b2lkKVxuK3tcbitcdHUzMiBiYXNlID0ga3ZtX2NwdWlkX2Jhc2UoKTtcbitcbitcdGlmICghYmFzZSB8fCBjcHVpZF9lYXgoYmFzZSkgXHUwMDNjIChiYXNlIHwgS1ZNX0NQVUlEX1RJTUlOR19JTkZPKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gYmFzZSB8IEtWTV9DUFVJRF9USU1JTkdfSU5GTztcbit9XG4rXG4rc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQga3ZtX2dldF90c2Nfa2h6KHZvaWQpXG4re1xuK1x0cmV0dXJuIGt2bV90c2Nfa2h6X2NwdWlkO1xuK31cbitcbitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBrdm1fZ2V0X2NwdV9raHoodm9pZClcbit7XG4rXHRyZXR1cm4ga3ZtX2NwdV9raHpfY3B1aWQ7XG4rfVxuK1xuIHVuc2lnbmVkIGludCBrdm1fYXJjaF9wYXJhX2ZlYXR1cmVzKHZvaWQpXG4ge1xuIFx0cmV0dXJuIGNwdWlkX2VheChrdm1fY3B1aWRfYmFzZSgpIHwgS1ZNX0NQVUlEX0ZFQVRVUkVTKTtcbkBAIC05NjAsNiArOTkwLDggQEAgc3RhdGljIHZvaWQgX19pbml0IGt2bV9pbml0X3BsYXRmb3JtKHZvaWQpXG4gXHRcdC5tYXNrX2xvID0gKHUzMikofihTWl80RyAtIHRvbHVkIC0gMSkpIHwgTVRSUl9QSFlTTUFTS19WLFxuIFx0XHQubWFza19oaSA9IChCSVRfVUxMKGJvb3RfY3B1X2RhdGEueDg2X3BoeXNfYml0cykgLSAxKSBcdTAwM2VcdTAwM2UgMzIsXG4gXHR9O1xuK1x0dTMyIHRpbWluZ19pbmZvX2xlYWYsIGFwaWNfa2h6O1xuK1x0Ym9vbCB0c2NfaXNfcmVsaWFibGU7XG4gXG4gXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfR1VFU1RfTUVNX0VOQ1JZUFQpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGt2bV9wYXJhX2hhc19mZWF0dXJlKEtWTV9GRUFUVVJFX01JR1JBVElPTl9DT05UUk9MKSkge1xuQEAgLTEwMDcsNyArMTAzOSw0NCBAQCBzdGF0aWMgdm9pZCBfX2luaXQga3ZtX2luaXRfcGxhdGZvcm0odm9pZClcbiBcdFx0XHR3cm1zcnEoTVNSX0tWTV9NSUdSQVRJT05fQ09OVFJPTCxcbiBcdFx0XHQgICAgICAgS1ZNX01JR1JBVElPTl9SRUFEWSk7XG4gXHR9XG4tXHRrdm1jbG9ja19pbml0KCk7XG4rXG4rXHQvKlxuK1x0ICogSWYgS1ZNIGFkdmVydGlzZXMgdGhlIGZyZXF1ZW5jeSBkaXJlY3RseSBpbiBDUFVJRCwgdXNlIHRoYXQgaW5zdGVhZFxuK1x0ICogb2YgcmV2ZXJzZS1jYWxjdWxhdGluZyBpdCBmcm9tIHRoZSBLVk0gY2xvY2sgZGF0YSwgb3Igd29yc2UsIHRyeWluZ1xuK1x0ICogdG8gY2FsaWJyYXRhdGUgdGhlIFRTQyB1c2luZyBhbiBlbXVsYXRlZCBkZXZpY2UuXG4rXHQgKi9cbitcdHRpbWluZ19pbmZvX2xlYWYgPSBrdm1fY3B1aWRfdGltaW5nX2luZm9fbGVhZigpO1xuK1x0aWYgKHRpbWluZ19pbmZvX2xlYWYpIHtcbitcdFx0a3ZtX3RzY19raHpfY3B1aWQgPSBjcHVpZF9lYXgodGltaW5nX2luZm9fbGVhZik7XG4rXHRcdGlmIChrdm1fdHNjX2toel9jcHVpZCkge1xuK1x0XHRcdHg4Nl9pbml0Lmh5cGVyLmdldF90c2Nfa2h6ID0ga3ZtX2dldF90c2Nfa2h6O1xuK1x0XHRcdHg4Nl9pbml0Lmh5cGVyLmdldF9jcHVfa2h6ID0ga3ZtX2dldF90c2Nfa2h6O1xuK1x0XHR9XG4rXG4rXHRcdC8qIFRoZSBsZWFmIGFsc28gaW5jbHVkZXMgdGhlIGxvY2FsIEFQSUMgYnVzL3RpbWVyIGZyZXF1ZW5jeS4qL1xuK1x0XHRhcGljX2toeiA9IGNwdWlkX2VieCh0aW1pbmdfaW5mb19sZWFmKTtcbitcdFx0aWYgKGFwaWNfa2h6KVxuK1x0XHRcdGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHooYXBpY19raHosIFwiS1ZNIGh5cGVydmlzb3JcIik7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogUHJlZmVyIENQVUlELjB4MTYgb3ZlciBLVk0ncyBQViBDUFVJRCB3aGVuIHBvc3NpYmxlLCBhcyB0aGUgYmFzZSBDUFVcbitcdCAqIGZyZXF1ZW5jeSBpc24ndCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgVFNDIGZyZXF1ZW5jeS5cbitcdCAqL1xuK1x0a3ZtX2NwdV9raHpfY3B1aWQgPSBfX2NwdV9raHpfZnJvbV9jcHVpZCgpO1xuK1x0aWYgKGt2bV9jcHVfa2h6X2NwdWlkKVxuK1x0XHR4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeiA9IGt2bV9nZXRfY3B1X2toejtcbitcbisgICAgICAgIC8qXG4rICAgICAgICAgKiBJZiB0aGUgVFNDIGNvdW50cyBhdCBhIGNvbnN0YW50IGZyZXF1ZW5jeSBhY3Jvc3MgUC9UIHN0YXRlcyBhbmQgaW5cbisgICAgICAgICAqIGRlZXAgQy1zdGF0ZXMsIHRyZWF0IHRoZSBUU0MgcmVsaWFibGUsIGFzIGd1YXJhbnRlZWQgYnkgS1ZNLlxuKyAgICAgICAgICovXG4rXHR0c2NfaXNfcmVsaWFibGUgPSBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9OT05TVE9QX1RTQyk7XG4rXHRpZiAodHNjX2lzX3JlbGlhYmxlKVxuK1x0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7XG4rXG4rXHRrdm1jbG9ja19pbml0KHRzY19pc19yZWxpYWJsZSk7XG4gXHR4ODZfcGxhdGZvcm0uYXBpY19wb3N0X2luaXQgPSBrdm1fYXBpY19pbml0O1xuIFxuIFx0LypcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYyBiL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jXG5pbmRleCBjYjNkMGNhMWZhMjI1YS4uODQyZjM4YzVmNmNhYWQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suY1xuKysrIGIvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmNcbkBAIC0xMiw3ICsxMiw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaGFyZGlycS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3B1aG90cGx1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL2Nsb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2V0X21lbW9yeS5oXHUwMDNlXG5AQCAtNTQsNiArNTMsOCBAQCBzdGF0aWMgc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICpodmNsb2NrX21lbTtcbiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcHZjbG9ja192c3lzY2FsbF90aW1lX2luZm8gKiwgaHZfY2xvY2tfcGVyX2NwdSk7XG4gRVhQT1JUX1BFUl9DUFVfU1lNQk9MX0dQTChodl9jbG9ja19wZXJfY3B1KTtcbiBcbitzdGF0aWMgYm9vbCBrdm1jbG9ja19zdXNwZW5kZWQ7XG4rXG4gLypcbiAgKiBUaGUgd2FsbGNsb2NrIGlzIHRoZSB0aW1lIG9mIGRheSB3aGVuIHdlIGJvb3RlZC4gU2luY2UgdGhlbiwgc29tZSB0aW1lIG1heVxuICAqIGhhdmUgZWxhcHNlZCBzaW5jZSB0aGUgaHlwZXJ2aXNvciB3cm90ZSB0aGUgZGF0YS4gU28gd2UgdHJ5IHRvIGFjY291bnQgZm9yXG5AQCAtNjEsNiArNjIsNyBAQCBFWFBPUlRfUEVSX0NQVV9TWU1CT0xfR1BMKGh2X2Nsb2NrX3Blcl9jcHUpO1xuICAqL1xuIHN0YXRpYyB2b2lkIGt2bV9nZXRfd2FsbGNsb2NrKHN0cnVjdCB0aW1lc3BlYzY0ICpub3cpXG4ge1xuK1x0V0FSTl9PTl9PTkNFKGt2bWNsb2NrX3N1c3BlbmRlZCk7XG4gXHR3cm1zcnEobXNyX2t2bV93YWxsX2Nsb2NrLCBzbG93X3ZpcnRfdG9fcGh5cyhcdTAwMjZ3YWxsX2Nsb2NrKSk7XG4gXHRwcmVlbXB0X2Rpc2FibGUoKTtcbiBcdHB2Y2xvY2tfcmVhZF93YWxsY2xvY2soXHUwMDI2d2FsbF9jbG9jaywgdGhpc19jcHVfcHZ0aSgpLCBub3cpO1xuQEAgLTcyLDYgKzc0LDI1IEBAIHN0YXRpYyBpbnQga3ZtX3NldF93YWxsY2xvY2soY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKm5vdylcbiBcdHJldHVybiAtRU5PREVWO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBrdm1fcmVnaXN0ZXJfY2xvY2soY2hhciAqdHh0KVxuK3tcbitcdHN0cnVjdCBwdmNsb2NrX3ZzeXNjYWxsX3RpbWVfaW5mbyAqc3JjID0gdGhpc19jcHVfaHZjbG9jaygpO1xuK1x0dTY0IHBhO1xuK1xuK1x0aWYgKCFzcmMpXG4rXHRcdHJldHVybjtcbitcbitcdHBhID0gc2xvd192aXJ0X3RvX3BoeXMoXHUwMDI2c3JjLVx1MDAzZXB2dGkpIHwgMHgwMVVMTDtcbitcdHdybXNycShtc3Jfa3ZtX3N5c3RlbV90aW1lLCBwYSk7XG4rXHRwcl9kZWJ1ZyhcImt2bS1jbG9jazogY3B1ICVkLCBtc3IgJWxseCwgJXNcIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBwYSwgdHh0KTtcbit9XG4rXG4rc3RhdGljIHZvaWQga3ZtY2xvY2tfZGlzYWJsZSh2b2lkKVxuK3tcbitcdGlmIChtc3Jfa3ZtX3N5c3RlbV90aW1lKVxuK1x0XHRuYXRpdmVfd3JpdGVfbXNyKG1zcl9rdm1fc3lzdGVtX3RpbWUsIDApO1xuK31cbitcbiBzdGF0aWMgdTY0IGt2bV9jbG9ja19yZWFkKHZvaWQpXG4ge1xuIFx0dTY0IHJldDtcbkBAIC0xMTMsMTggKzEzNCw3NCBAQCBzdGF0aWMgbm9pbnN0ciB1NjQga3ZtX3NjaGVkX2Nsb2NrX3JlYWQodm9pZClcbiBcdHJldHVybiBwdmNsb2NrX2Nsb2Nrc291cmNlX3JlYWRfbm93ZCh0aGlzX2NwdV9wdnRpKCkpIC0ga3ZtX3NjaGVkX2Nsb2NrX29mZnNldDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGt2bV9zY2hlZF9jbG9ja19pbml0KGJvb2wgc3RhYmxlKVxuK3N0YXRpYyB2b2lkIGt2bV9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXG4ge1xuLVx0aWYgKCFzdGFibGUpXG4tXHRcdGNsZWFyX3NjaGVkX2Nsb2NrX3N0YWJsZSgpO1xuLVx0a3ZtX3NjaGVkX2Nsb2NrX29mZnNldCA9IGt2bV9jbG9ja19yZWFkKCk7XG4tXHRwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2soa3ZtX3NjaGVkX2Nsb2NrX3JlYWQpO1xuK1x0LypcbitcdCAqIFN0b3AgaG9zdCB3cml0ZXMgdG8ga3ZtY2xvY2sgaW1tZWRpYXRlbHkgcHJpb3IgdG8gc3VzcGVuZC9oaWJlcm5hdGUuXG4rXHQgKiBJZiB0aGUgc3lzdGVtIGlzIGhpYmVybmF0aW5nLCB0aGVuIGt2bWNsb2NrIHdpbGwgbGlrZWx5IHJlc2lkZSBhdCBhXG4rXHQgKiBkaWZmZXJlbnQgcGh5c2ljYWwgYWRkcmVzcyB3aGVuIHRoZSBzeXN0ZW0gYXdha2VucywgYW5kIGhvc3Qgd3JpdGVzXG4rXHQgKiB0byB0aGUgb2xkIGFkZHJlc3MgcHJpb3IgdG8gcmVjb25maWd1cmluZyBrdm1jbG9jayB3b3VsZCBjbG9iYmVyXG4rXHQgKiByYW5kb20gbWVtb3J5LlxuK1x0ICovXG4rXHRrdm1jbG9ja19zdXNwZW5kZWQgPSB0cnVlO1xuK1x0a3ZtY2xvY2tfZGlzYWJsZSgpO1xuK31cbiBcbi1cdHByX2luZm8oXCJrdm0tY2xvY2s6IHVzaW5nIHNjaGVkIG9mZnNldCBvZiAlbGx1IGN5Y2xlc1wiLFxuLVx0XHRrdm1fc2NoZWRfY2xvY2tfb2Zmc2V0KTtcbisjaWZkZWYgQ09ORklHX1NNUFxuK3N0YXRpYyB2b2lkIGt2bV9zZXR1cF9zZWNvbmRhcnlfY2xvY2sodm9pZClcbit7XG4rXHRrdm1fcmVnaXN0ZXJfY2xvY2soXCJzZWNvbmRhcnkgY3B1LCBzdGFydHVwXCIpO1xuK31cbisjZW5kaWZcbiBcbi1cdEJVSUxEX0JVR19PTihzaXplb2Yoa3ZtX3NjaGVkX2Nsb2NrX29mZnNldCkgXHUwMDNlXG4tXHRcdHNpemVvZigoKHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvICopTlVMTCktXHUwMDNlc3lzdGVtX3RpbWUpKTtcbitzdGF0aWMgdm9pZCBrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxuK3tcbitcdGt2bWNsb2NrX3N1c3BlbmRlZCA9IGZhbHNlO1xuK1x0a3ZtX3JlZ2lzdGVyX2Nsb2NrKFwicHJpbWFyeSBjcHUsIHNjaGVkX2Nsb2NrIHJlc3VtZVwiKTtcbit9XG4rXG4rc3RhdGljIHZvaWQga3ZtY2xvY2tfc3VzcGVuZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKVxuK3tcbitcdGt2bWNsb2NrX3N1c3BlbmRlZCA9IHRydWU7XG4rXHRrdm1jbG9ja19kaXNhYmxlKCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGt2bWNsb2NrX3Jlc3VtZShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKVxuK3tcbitcdGt2bWNsb2NrX3N1c3BlbmRlZCA9IGZhbHNlO1xuK1x0a3ZtX3JlZ2lzdGVyX2Nsb2NrKFwicHJpbWFyeSBjcHUsIGNsb2Nrc291cmNlIHJlc3VtZVwiKTtcbit9XG4rXG4rdm9pZCBrdm1jbG9ja19jcHVfYWN0aW9uKGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKVxuK3tcbitcdHN3aXRjaCAoYWN0aW9uKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBCU1AncyBjbG9jayBpcyBtYW5hZ2VkIHZpYSBjbG9ja3NvdXJjZSBzdXNwZW5kL3Jlc3VtZSxcbitcdFx0ICogdG8gZW5zdXJlIGl0J3MgZW5hYmxlZC9kaXNhYmxlZCB3aGVuIHRpbWVrZWVwaW5nIG5lZWRzIGl0XG4rXHRcdCAqIHRvIGJlLCBlLmcuIGJlZm9yZSByZWFkaW5nIHdhbGxjbG9jayAod2hpY2ggdXNlcyBrdm1jbG9jaykuXG4rXHRcdCAqL1xuK1x0Y2FzZSBLVk1fR1VFU1RfQlNQX1NVU1BFTkQ6XG4rXHRjYXNlIEtWTV9HVUVTVF9CU1BfUkVTVU1FOlxuK1x0XHRicmVhaztcbitcdGNhc2UgS1ZNX0dVRVNUX0FQX09OTElORTpcbitcdFx0LypcbitcdFx0ICogU2Vjb25kYXJ5IENQVXMgdXNlIGEgZGVkaWNhdGVkIGhvb2sgdG8gZW5hYmxlIGt2bWNsb2NrIGVhcmx5XG4rXHRcdCAqIGR1cmluZyBicmluZ3VwLCB0aGVyZSdzIG5vdGhpbmcgdG8gYmUgZG9uZSBkdXJpbmcgQ1BVIG9ubGluZVxuK1x0XHQgKiAod2hpY2ggcnVucyBhdCBDUFVIUF9BUF9PTkxJTkVfRFlOKS4gIFdoZW4ga3ZtY2xvY2sgaXMgYmVpbmdcbitcdFx0ICogdXNlZCBhcyBzY2hlZF9jbG9jaywga3ZtY2xvY2sgbXVzdCBiZSBlbmFibGVkICp2ZXJ5KiBlYXJseSxcbitcdFx0ICogYW5kIGV2ZW4gd2hlbiBrdm1jbG9jayBpcyBcIm9ubHlcIiBiZWluZyB1c2VkIGZvciB0aGUgbWFpblxuK1x0XHQgKiBjbG9ja3NvdXJjZSwgaXQgc3RpbGwgbmVlZHMgdG8gYmUgZW5hYmxlZCBsb25nIGJlZm9yZSB0aGVcbitcdFx0ICogZHluYW1pYyBDUFVIUCBjYWxscyBhcmUgbWFkZS5cbitcdFx0ICovXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBLVk1fR1VFU1RfQVBfT0ZGTElORTpcbitcdGNhc2UgS1ZNX0dVRVNUX1NIVVRET1dOOlxuK1x0XHRrdm1jbG9ja19kaXNhYmxlKCk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0V0FSTl9PTl9PTkNFKDEpO1xuK1x0XHRicmVhaztcbitcdH1cbiB9XG4gXG4gLypcbkBAIC0xMzYsOSArMjEzLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGt2bV9zY2hlZF9jbG9ja19pbml0KGJvb2wgc3RhYmxlKVxuICAqIHBvbGwgb2YgZ3Vlc3RzIGNhbiBiZSBydW5uaW5nIGFuZCB0cm91YmxlIGVhY2ggb3RoZXIuIFNvIHdlIHByZXNldFxuICAqIGxwaiBoZXJlXG4gICovXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX2dldF90c2Nfa2h6KHZvaWQpXG4rc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQga3ZtY2xvY2tfZ2V0X3RzY19raHoodm9pZClcbiB7XG4tXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKTtcbiBcdHJldHVybiBwdmNsb2NrX3RzY19raHoodGhpc19jcHVfcHZ0aSgpKTtcbiB9XG4gXG5AQCAtMTQ3LDcgKzIyMyw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrdm1fZ2V0X3ByZXNldF9scGoodm9pZClcbiBcdHVuc2lnbmVkIGxvbmcga2h6O1xuIFx0dTY0IGxwajtcbiBcbi1cdGtoeiA9IGt2bV9nZXRfdHNjX2toeigpO1xuK1x0a2h6ID0ga3ZtY2xvY2tfZ2V0X3RzY19raHooKTtcbiBcbiBcdGxwaiA9ICgodTY0KWtoeiAqIDEwMDApO1xuIFx0ZG9fZGl2KGxwaiwgSFopO1xuQEAgLTE4NSw0MyArMjYxLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2Uga3ZtX2Nsb2NrID0ge1xuIFx0LmZsYWdzXHRcdD0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsXG4gXHQuaWRcdFx0PSBDU0lEX1g4Nl9LVk1fQ0xLLFxuIFx0LmVuYWJsZVx0XHQ9IGt2bV9jc19lbmFibGUsXG4rXHQuc3VzcGVuZFx0PSBrdm1jbG9ja19zdXNwZW5kLFxuK1x0LnJlc3VtZVx0XHQ9IGt2bWNsb2NrX3Jlc3VtZSxcbiB9O1xuIFxuLXN0YXRpYyB2b2lkIGt2bV9yZWdpc3Rlcl9jbG9jayhjaGFyICp0eHQpXG4te1xuLVx0c3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICpzcmMgPSB0aGlzX2NwdV9odmNsb2NrKCk7XG4tXHR1NjQgcGE7XG4tXG4tXHRpZiAoIXNyYylcbi1cdFx0cmV0dXJuO1xuLVxuLVx0cGEgPSBzbG93X3ZpcnRfdG9fcGh5cyhcdTAwMjZzcmMtXHUwMDNlcHZ0aSkgfCAweDAxVUxMO1xuLVx0d3Jtc3JxKG1zcl9rdm1fc3lzdGVtX3RpbWUsIHBhKTtcbi1cdHByX2RlYnVnKFwia3ZtLWNsb2NrOiBjcHUgJWQsIG1zciAlbGx4LCAlc1wiLCBzbXBfcHJvY2Vzc29yX2lkKCksIHBhLCB0eHQpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBrdm1fc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxuLXtcbi19XG4tXG4tc3RhdGljIHZvaWQga3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcbi17XG4tXHRrdm1fcmVnaXN0ZXJfY2xvY2soXCJwcmltYXJ5IGNwdSBjbG9jaywgcmVzdW1lXCIpO1xuLX1cbi1cbi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDXG4tc3RhdGljIHZvaWQga3ZtX3NldHVwX3NlY29uZGFyeV9jbG9jayh2b2lkKVxuLXtcbi1cdGt2bV9yZWdpc3Rlcl9jbG9jayhcInNlY29uZGFyeSBjcHUgY2xvY2tcIik7XG4tfVxuLSNlbmRpZlxuLVxuLXZvaWQga3ZtY2xvY2tfZGlzYWJsZSh2b2lkKVxuLXtcbi1cdGlmIChtc3Jfa3ZtX3N5c3RlbV90aW1lKVxuLVx0XHRuYXRpdmVfd3JpdGVfbXNyKG1zcl9rdm1fc3lzdGVtX3RpbWUsIDApO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBfX2luaXQga3ZtY2xvY2tfaW5pdF9tZW0odm9pZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5jcHVzO1xuQEAgLTMwOCw5ICszNTEsMzUgQEAgc3RhdGljIGludCBrdm1jbG9ja19zZXR1cF9wZXJjcHUodW5zaWduZWQgaW50IGNwdSlcbiBcdHJldHVybiBwID8gMCA6IC1FTk9NRU07XG4gfVxuIFxuLXZvaWQgX19pbml0IGt2bWNsb2NrX2luaXQodm9pZClcbitzdGF0aWMgX19pbml0IHZvaWQga3ZtX3NjaGVkX2Nsb2NrX2luaXQoYm9vbCBzdGFibGUpXG4ge1xuLVx0dTggZmxhZ3M7XG4rXHQvKiBFbnN1cmUgdGhlIG9mZnNldCBpcyBjb25maWd1cmVkIGJlZm9yZSBtYWtpbmcga3ZtY2xvY2sgdmlzaWJsZSEgKi9cbitcdGt2bV9zY2hlZF9jbG9ja19vZmZzZXQgPSBrdm1fY2xvY2tfcmVhZCgpO1xuK1xuK1x0aWYgKF9fcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKGt2bV9zY2hlZF9jbG9ja19yZWFkLCBzdGFibGUsXG4rXHRcdFx0XHQgICAgICAga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUsXG4rXHRcdFx0XHQgICAgICAga3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKlxuK1x0ICogVGhlIEJTUCdzIGNsb2NrIGlzIG1hbmFnZWQgdmlhIGRlZGljYXRlZCBzY2hlZF9jbG9jayBzYXZlL3Jlc3RvcmVcbitcdCAqIGhvb2tzIHdoZW4ga3ZtY2xvY2sgaXMgdXNlZCBhcyBzY2hlZF9jbG9jaywgYXMgc2NoZWRfY2xvY2sgbmVlZHMgdG9cbitcdCAqIGJlIGtlcHQgYWxpdmUgdW50aWwgdGhlIHZlcnkgZW5kIG9mIHN1c3BlbmQgZW50cnksIGFuZCByZXN0b3JlZCBhc1xuK1x0ICogcXVpY2tseSBhcyBwb3NzaWJsZSBhZnRlciByZXN1bWUuXG4rXHQgKi9cbitcdGt2bV9jbG9jay5zdXNwZW5kID0gTlVMTDtcbitcdGt2bV9jbG9jay5yZXN1bWUgPSBOVUxMO1xuK1xuK1x0cHJfaW5mbyhcImt2bS1jbG9jazogdXNpbmcgc2NoZWQgb2Zmc2V0IG9mICVsbHUgY3ljbGVzXCIsXG4rXHRcdGt2bV9zY2hlZF9jbG9ja19vZmZzZXQpO1xuK1xuK1x0QlVJTERfQlVHX09OKHNpemVvZihrdm1fc2NoZWRfY2xvY2tfb2Zmc2V0KSBcdTAwM2VcbitcdFx0c2l6ZW9mKCgoc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gKilOVUxMKS1cdTAwM2VzeXN0ZW1fdGltZSkpO1xuK31cbitcbit2b2lkIF9faW5pdCBrdm1jbG9ja19pbml0KGJvb2wgcHJlZmVyX3RzYylcbit7XG4rXHRib29sIHN0YWJsZSA9IGZhbHNlO1xuIFxuIFx0aWYgKCFrdm1fcGFyYV9hdmFpbGFibGUoKSB8fCAha3ZtY2xvY2spXG4gXHRcdHJldHVybjtcbkBAIC0zMzQsMzggKzQwMyw0MSBAQCB2b2lkIF9faW5pdCBrdm1jbG9ja19pbml0KHZvaWQpXG4gXHRcdG1zcl9rdm1fc3lzdGVtX3RpbWUsIG1zcl9rdm1fd2FsbF9jbG9jayk7XG4gXG4gXHR0aGlzX2NwdV93cml0ZShodl9jbG9ja19wZXJfY3B1LCBcdTAwMjZodl9jbG9ja19ib290WzBdKTtcbi1cdGt2bV9yZWdpc3Rlcl9jbG9jayhcInByaW1hcnkgY3B1IGNsb2NrXCIpO1xuK1x0a3ZtX3JlZ2lzdGVyX2Nsb2NrKFwicHJpbWFyeSBjcHUsIG9ubGluZVwiKTtcbiBcdHB2Y2xvY2tfc2V0X3B2dGlfY3B1MF92YShodl9jbG9ja19ib290KTtcbiBcbi1cdGlmIChrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9DTE9DS1NPVVJDRV9TVEFCTEVfQklUKSlcbitcdGlmIChrdm1fcGFyYV9oYXNfZmVhdHVyZShLVk1fRkVBVFVSRV9DTE9DS1NPVVJDRV9TVEFCTEVfQklUKSkge1xuIFx0XHRwdmNsb2NrX3NldF9mbGFncyhQVkNMT0NLX1RTQ19TVEFCTEVfQklUKTtcbiBcbi1cdGZsYWdzID0gcHZjbG9ja19yZWFkX2ZsYWdzKFx1MDAyNmh2X2Nsb2NrX2Jvb3RbMF0ucHZ0aSk7XG4tXHRrdm1fc2NoZWRfY2xvY2tfaW5pdChmbGFncyBcdTAwMjYgUFZDTE9DS19UU0NfU1RBQkxFX0JJVCk7XG4rXHRcdC8qXG4rXHRcdCAqIENoZWNrIGlmIHRoZSBjbG9jayBpcyBzdGFibGUgKmFmdGVyKiBtYXJraW5nIFRTQ19TVEFCTEUgYXMgYVxuK1x0XHQgKiB2YWxpZCBmbGFnLlxuK1x0XHQgKi9cbitcdFx0c3RhYmxlID0gcHZjbG9ja19yZWFkX2ZsYWdzKFx1MDAyNmh2X2Nsb2NrX2Jvb3RbMF0ucHZ0aSkgXHUwMDI2XG4rXHRcdFx0IFBWQ0xPQ0tfVFNDX1NUQUJMRV9CSVQ7XG4rXHR9XG4gXG4tXHR4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX3RzYyA9IGt2bV9nZXRfdHNjX2toejtcbi1cdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ID0ga3ZtX2dldF90c2Nfa2h6O1xuK1xuK1x0aWYgKCF4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeilcbitcdFx0eDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHogPSBrdm1jbG9ja19nZXRfdHNjX2toejtcbitcdGlmICgheDg2X2luaXQuaHlwZXIuZ2V0X2NwdV9raHopXG4rXHRcdHg4Nl9pbml0Lmh5cGVyLmdldF9jcHVfa2h6ID0ga3ZtY2xvY2tfZ2V0X3RzY19raHo7XG4gXHR4ODZfcGxhdGZvcm0uZ2V0X3dhbGxjbG9jayA9IGt2bV9nZXRfd2FsbGNsb2NrO1xuIFx0eDg2X3BsYXRmb3JtLnNldF93YWxsY2xvY2sgPSBrdm1fc2V0X3dhbGxjbG9jaztcbi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDXG4rI2lmZGVmIENPTkZJR19TTVBcbiBcdHg4Nl9jcHVpbml0LmVhcmx5X3BlcmNwdV9jbG9ja19pbml0ID0ga3ZtX3NldHVwX3NlY29uZGFyeV9jbG9jaztcbiAjZW5kaWZcbi1cdHg4Nl9wbGF0Zm9ybS5zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlID0ga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGU7XG4tXHR4ODZfcGxhdGZvcm0ucmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSA9IGt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlO1xuIFx0a3ZtX2dldF9wcmVzZXRfbHBqKCk7XG4gXG4gXHQvKlxuLVx0ICogWDg2X0ZFQVRVUkVfTk9OU1RPUF9UU0MgaXMgVFNDIHJ1bnMgYXQgY29uc3RhbnQgcmF0ZVxuLVx0ICogd2l0aCBQL1Qgc3RhdGVzIGFuZCBkb2VzIG5vdCBzdG9wIGluIGRlZXAgQy1zdGF0ZXMuXG4tXHQgKlxuLVx0ICogSW52YXJpYW50IFRTQyBleHBvc2VkIGJ5IGhvc3QgbWVhbnMga3ZtY2xvY2sgaXMgbm90IG5lY2Vzc2FyeTpcbi1cdCAqIGNhbiB1c2UgVFNDIGFzIGNsb2Nrc291cmNlLlxuLVx0ICpcbitcdCAqIElmIFRTQyBpcyBwcmVmZXJyZWQgb3ZlciBrdm1sb2NrLCBkcm9wIGt2bWNsb2NrJ3MgcmF0aW5nIHNvIHRoYXQgVFNDXG4rXHQgKiBpcyBjaG9zZW4gYXMgdGhlIGNsb2Nrc291cmNlIChidXQgc3RpbGwgcmVnaXN0ZXIga3ZtY2xvY2sgaW4gY2FzZVxuK1x0ICogdGhlIGtlcm5lbCBkb2Vzbid0IHdhbnQgdG8gdXNlIFRTQyBmb3Igd2hhdGV2ZXIgcmVhc29uKS5cbiBcdCAqL1xuLVx0aWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9OT05TVE9QX1RTQykgXHUwMDI2XHUwMDI2XG4tXHQgICAgIWNoZWNrX3RzY191bnN0YWJsZSgpKVxuK1x0aWYgKHByZWZlcl90c2MpXG4gXHRcdGt2bV9jbG9jay5yYXRpbmcgPSAyOTk7XG4rXHRlbHNlXG4rXHRcdGt2bV9zY2hlZF9jbG9ja19pbml0KHN0YWJsZSk7XG4gXG4gXHRjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeihcdTAwMjZrdm1fY2xvY2ssIE5TRUNfUEVSX1NFQyk7XG4gXHRwdl9pbmZvLm5hbWUgPSBcIktWTVwiO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wdmNsb2NrLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHZjbG9jay5jXG5pbmRleCBiM2Y4MTM3OWMyZmMwNi4uOGQwOTg4NDFhMjI1ZjYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHZjbG9jay5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHZjbG9jay5jXG5AQCAtMTYsMTEgKzE2LDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3B2Y2xvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS92Z3RvZC5oXHUwMDNlXG4gXG4tc3RhdGljIHU4IHZhbGlkX2ZsYWdzIF9fcmVhZF9tb3N0bHkgPSAwO1xuLXN0YXRpYyBzdHJ1Y3QgcHZjbG9ja192c3lzY2FsbF90aW1lX2luZm8gKnB2dGlfY3B1MF92YSBfX3JlYWRfbW9zdGx5O1xuK3N0YXRpYyB1OCB2YWxpZF9mbGFncyBfX3JvX2FmdGVyX2luaXQgPSAwO1xuK3N0YXRpYyBzdHJ1Y3QgcHZjbG9ja192c3lzY2FsbF90aW1lX2luZm8gKnB2dGlfY3B1MF92YSBfX3JvX2FmdGVyX2luaXQ7XG4gXG4tdm9pZCBwdmNsb2NrX3NldF9mbGFncyh1OCBmbGFncylcbit2b2lkIF9faW5pdCBwdmNsb2NrX3NldF9mbGFncyh1OCBmbGFncylcbiB7XG4rXHRXQVJOX09OKHZhbGlkX2ZsYWdzKTtcbiBcdHZhbGlkX2ZsYWdzID0gZmxhZ3M7XG4gfVxuIFxuQEAgLTE1Myw3ICsxNTQsNyBAQCB2b2lkIHB2Y2xvY2tfcmVhZF93YWxsY2xvY2soc3RydWN0IHB2Y2xvY2tfd2FsbF9jbG9jayAqd2FsbF9jbG9jayxcbiBcdHNldF9ub3JtYWxpemVkX3RpbWVzcGVjNjQodHMsIG5vdy50dl9zZWMsIG5vdy50dl9uc2VjKTtcbiB9XG4gXG4tdm9pZCBwdmNsb2NrX3NldF9wdnRpX2NwdTBfdmEoc3RydWN0IHB2Y2xvY2tfdnN5c2NhbGxfdGltZV9pbmZvICpwdnRpKVxuK3ZvaWQgX19pbml0IHB2Y2xvY2tfc2V0X3B2dGlfY3B1MF92YShzdHJ1Y3QgcHZjbG9ja192c3lzY2FsbF90aW1lX2luZm8gKnB2dGkpXG4ge1xuIFx0V0FSTl9PTih2Y2xvY2tfd2FzX3VzZWQoVkRTT19DTE9DS01PREVfUFZDTE9DSykpO1xuIFx0cHZ0aV9jcHUwX3ZhID0gcHZ0aTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjLmNcbmluZGV4IGNlMTBhZTRiMjk4Yjc5Li41NjRiZTRmYWE1YTBiYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC90c2MuY1xuKysrIGIvYXJjaC94ODYva2VybmVsL3RzYy5jXG5AQCAtMzQsNiArMzQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS90b3BvbG9neS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3V2L3V2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2V2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vdGR4LmhcdTAwM2VcbiBcbiB1bnNpZ25lZCBpbnQgX19yZWFkX21vc3RseSBjcHVfa2h6O1x0LyogVFNDIGNsb2NrcyAvIHVzZWMsIG5vdCB1c2VkIGhlcmUgKi9cbiBFWFBPUlRfU1lNQk9MKGNwdV9raHopO1xuQEAgLTI3OSwxNSArMjgwLDI4IEBAIGJvb2wgdXNpbmdfbmF0aXZlX3NjaGVkX2Nsb2NrKHZvaWQpXG4gXHRyZXR1cm4gc3RhdGljX2NhbGxfcXVlcnkocHZfc2NoZWRfY2xvY2spID09IG5hdGl2ZV9zY2hlZF9jbG9jaztcbiB9XG4gXG4tdm9pZCBwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodTY0ICgqZnVuYykodm9pZCkpXG4raW50IF9faW5pdCBfX3BhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh1NjQgKCpmdW5jKSh2b2lkKSwgYm9vbCBzdGFibGUsXG4rXHRcdFx0XHQgICAgICB2b2lkICgqc2F2ZSkodm9pZCksIHZvaWQgKCpyZXN0b3JlKSh2b2lkKSlcbiB7XG4rXHQvKlxuK1x0ICogRG9uJ3QgcmVwbGFjZSBUU0Mgd2l0aCBhIFBWIGNsb2NrIHdoZW4gcnVubmluZyBhcyBhIENvQ28gZ3Vlc3QgYW5kXG4rXHQgKiB0aGUgVFNDIGlzIHNlY3VyZS90cnVzdGVkOyBQViBjbG9ja3MgYXJlIGVtdWxhdGVkIGJ5IHRoZSBoeXBlcnZpc29yLFxuK1x0ICogd2hpY2ggaXNuJ3QgaW4gdGhlIGd1ZXN0J3MgVENCLlxuK1x0ICovXG4rXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfR1VFU1RfU05QX1NFQ1VSRV9UU0MpIHx8XG4rXHQgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1REWF9HVUVTVCkpXG4rXHRcdHJldHVybiAtRVBFUk07XG4rXG4rXHRpZiAoIXN0YWJsZSlcbitcdFx0Y2xlYXJfc2NoZWRfY2xvY2tfc3RhYmxlKCk7XG4rXG4gXHRzdGF0aWNfY2FsbF91cGRhdGUocHZfc2NoZWRfY2xvY2ssIGZ1bmMpO1xuK1x0eDg2X3BsYXRmb3JtLnNhdmVfc2NoZWRfY2xvY2tfc3RhdGUgPSBzYXZlO1xuK1x0eDg2X3BsYXRmb3JtLnJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUgPSByZXN0b3JlO1xuK1x0cmV0dXJuIDA7XG4gfVxuICNlbHNlXG4gdTY0IHNjaGVkX2Nsb2NrX25vaW5zdHIodm9pZCkgX19hdHRyaWJ1dGVfXygoYWxpYXMoXCJuYXRpdmVfc2NoZWRfY2xvY2tcIikpKTtcbi1cbi1ib29sIHVzaW5nX25hdGl2ZV9zY2hlZF9jbG9jayh2b2lkKSB7IHJldHVybiB0cnVlOyB9XG4tdm9pZCBwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2sodTY0ICgqZnVuYykodm9pZCkpIHsgfVxuICNlbmRpZlxuIFxuIG5vdHJhY2UgdTY0IHNjaGVkX2Nsb2NrKHZvaWQpXG5AQCAtNjQ1LDQ2ICs2NTksNjggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgcXVpY2tfcGl0X2NhbGlicmF0ZSh2b2lkKVxuIFx0cmV0dXJuIGRlbHRhO1xuIH1cbiBcbitpbnQgY3B1aWRfZ2V0X3RzY19pbmZvKHN0cnVjdCBjcHVpZF90c2NfaW5mbyAqaW5mbylcbit7XG4rXHR1bnNpZ25lZCBpbnQgZWN4X2h6LCBlZHg7XG4rXG4rXHRpZiAoYm9vdF9jcHVfZGF0YS5jcHVpZF9sZXZlbCBcdTAwM2MgQ1BVSURfTEVBRl9UU0MpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0LyogQ1BVSUQgMTVIIFRTQy9DcnlzdGFsIHJhdGlvLCBwbHVzIG9wdGlvbmFsbHkgQ3J5c3RhbCBIeiAqL1xuK1x0Y3B1aWQoQ1BVSURfTEVBRl9UU0MsIFx1MDAyNmluZm8tXHUwMDNlZGVub21pbmF0b3IsIFx1MDAyNmluZm8tXHUwMDNlbnVtZXJhdG9yLCBcdTAwMjZlY3hfaHosIFx1MDAyNmVkeCk7XG4rXG4rXHRpZiAoIWluZm8tXHUwMDNlZGVub21pbmF0b3IgfHwgIWluZm8tXHUwMDNlbnVtZXJhdG9yKVxuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbitcbitcdC8qXG4rXHQgKiBOb3RlOiBzb21lIENQVXMgcHJvdmlkZSB0aGUgbXVsdGlwbGllciBpbmZvcm1hdGlvbiwgYnV0IG5vdCB0aGUgY29yZVxuK1x0ICogY3J5c3RhbCBmcmVxdWVuY3kuICBUaGUgbXVsdGlwbGllciBpbmZvcm1hdGlvbiBpcyBzdGlsbCB1c2VmdWwgZm9yXG4rXHQgKiBzdWNoIENQVXMsIGFzIHRoZSBjcnlzdGFsIGZyZXF1ZW5jeSBjYW4gYmUgZ2xlYW5lZCBmcm9tIENQVUlELjB4MTYuXG4rXHQgKi9cbitcdGluZm8tXHUwMDNlY3J5c3RhbF9raHogPSBlY3hfaHogLyAxMDAwO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3Vuc2lnbmVkIGludCBfX2NwdV9raHpfZnJvbV9jcHVpZCh2b2lkKVxuK3tcbitcdHVuc2lnbmVkIGludCBlYXhfYmFzZV9taHosIGVieCwgZWN4LCBlZHg7XG4rXG4rXHRpZiAoYm9vdF9jcHVfZGF0YS5jcHVpZF9sZXZlbCBcdTAwM2MgQ1BVSURfTEVBRl9GUkVRKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGNwdWlkKENQVUlEX0xFQUZfRlJFUSwgXHUwMDI2ZWF4X2Jhc2VfbWh6LCBcdTAwMjZlYngsIFx1MDAyNmVjeCwgXHUwMDI2ZWR4KTtcbitcbitcdHJldHVybiBlYXhfYmFzZV9taHogKiAxMDAwO1xuK31cbitcbiAvKipcbiAgKiBuYXRpdmVfY2FsaWJyYXRlX3RzYyAtIGRldGVybWluZSBUU0MgZnJlcXVlbmN5XG4gICogRGV0ZXJtaW5lIFRTQyBmcmVxdWVuY3kgdmlhIENQVUlELCBlbHNlIHJldHVybiAwLlxuICAqL1xuLXVuc2lnbmVkIGxvbmcgbmF0aXZlX2NhbGlicmF0ZV90c2Modm9pZClcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX3RzYyh2b2lkKVxuIHtcbi1cdHVuc2lnbmVkIGludCBlYXhfZGVub21pbmF0b3IsIGVieF9udW1lcmF0b3IsIGVjeF9oeiwgZWR4O1xuLVx0dW5zaWduZWQgaW50IGNyeXN0YWxfa2h6O1xuK1x0c3RydWN0IGNwdWlkX3RzY19pbmZvIGluZm87XG4gXG4gXHRpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKGJvb3RfY3B1X2RhdGEuY3B1aWRfbGV2ZWwgXHUwMDNjIENQVUlEX0xFQUZfVFNDKVxuK1x0aWYgKGNwdWlkX2dldF90c2NfaW5mbyhcdTAwMjZpbmZvKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRlYXhfZGVub21pbmF0b3IgPSBlYnhfbnVtZXJhdG9yID0gZWN4X2h6ID0gZWR4ID0gMDtcbi1cbi1cdC8qIENQVUlEIDE1SCBUU0MvQ3J5c3RhbCByYXRpbywgcGx1cyBvcHRpb25hbGx5IENyeXN0YWwgSHogKi9cbi1cdGNwdWlkKENQVUlEX0xFQUZfVFNDLCBcdTAwMjZlYXhfZGVub21pbmF0b3IsIFx1MDAyNmVieF9udW1lcmF0b3IsIFx1MDAyNmVjeF9oeiwgXHUwMDI2ZWR4KTtcbi1cbi1cdGlmIChlYnhfbnVtZXJhdG9yID09IDAgfHwgZWF4X2Rlbm9taW5hdG9yID09IDApXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0Y3J5c3RhbF9raHogPSBlY3hfaHogLyAxMDAwO1xuLVxuIFx0LypcbiBcdCAqIERlbnZlcnRvbiBTb0NzIGRvbid0IHJlcG9ydCBjcnlzdGFsIGNsb2NrLCBhbmQgYWxzbyBkb24ndCBzdXBwb3J0XG4gXHQgKiBDUFVJRF9MRUFGX0ZSRVEgZm9yIHRoZSBjYWxjdWxhdGlvbiBiZWxvdywgc28gaGFyZGNvZGUgdGhlIDI1TUh6XG4gXHQgKiBjcnlzdGFsIGNsb2NrLlxuIFx0ICovXG4tXHRpZiAoY3J5c3RhbF9raHogPT0gMCBcdTAwMjZcdTAwMjZcbi1cdFx0XHRib290X2NwdV9kYXRhLng4Nl92Zm0gPT0gSU5URUxfQVRPTV9HT0xETU9OVF9EKVxuLVx0XHRjcnlzdGFsX2toeiA9IDI1MDAwO1xuK1x0aWYgKCFpbmZvLmNyeXN0YWxfa2h6IFx1MDAyNlx1MDAyNiBib290X2NwdV9kYXRhLng4Nl92Zm0gPT0gSU5URUxfQVRPTV9HT0xETU9OVF9EKVxuK1x0XHRpbmZvLmNyeXN0YWxfa2h6ID0gMjUwMDA7XG4gXG4gXHQvKlxuIFx0ICogVFNDIGZyZXF1ZW5jeSByZXBvcnRlZCBkaXJlY3RseSBieSBDUFVJRCBpcyBhIFwiaGFyZHdhcmUgcmVwb3J0ZWRcIlxuIFx0ICogZnJlcXVlbmN5IGFuZCBpcyB0aGUgbW9zdCBhY2N1cmF0ZSBvbmUgc28gZmFyIHdlIGhhdmUuIFRoaXNcbiBcdCAqIGlzIGNvbnNpZGVyZWQgYSBrbm93biBmcmVxdWVuY3kuXG4gXHQgKi9cbi1cdGlmIChjcnlzdGFsX2toeiAhPSAwKVxuK1x0aWYgKGluZm8uY3J5c3RhbF9raHopXG4gXHRcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX0tOT1dOX0ZSRVEpO1xuIFxuIFx0LypcbkBAIC02OTIsMTUgKzcyOCwxMCBAQCB1bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfdHNjKHZvaWQpXG4gXHQgKiBjbG9jaywgYnV0IHdlIGNhbiBlYXNpbHkgY2FsY3VsYXRlIGl0IHRvIGEgaGlnaCBkZWdyZWUgb2YgYWNjdXJhY3lcbiBcdCAqIGJ5IGNvbnNpZGVyaW5nIHRoZSBjcnlzdGFsIHJhdGlvIGFuZCB0aGUgQ1BVIHNwZWVkLlxuIFx0ICovXG4tXHRpZiAoY3J5c3RhbF9raHogPT0gMCBcdTAwMjZcdTAwMjYgYm9vdF9jcHVfZGF0YS5jcHVpZF9sZXZlbCBcdTAwM2U9IENQVUlEX0xFQUZfRlJFUSkge1xuLVx0XHR1bnNpZ25lZCBpbnQgZWF4X2Jhc2VfbWh6LCBlYngsIGVjeCwgZWR4O1xuK1x0aWYgKCFpbmZvLmNyeXN0YWxfa2h6KVxuK1x0XHRpbmZvLmNyeXN0YWxfa2h6ID0gX19jcHVfa2h6X2Zyb21fY3B1aWQoKSAqIGluZm8uZGVub21pbmF0b3IgLyBpbmZvLm51bWVyYXRvcjtcbiBcbi1cdFx0Y3B1aWQoQ1BVSURfTEVBRl9GUkVRLCBcdTAwMjZlYXhfYmFzZV9taHosIFx1MDAyNmVieCwgXHUwMDI2ZWN4LCBcdTAwMjZlZHgpO1xuLVx0XHRjcnlzdGFsX2toeiA9IGVheF9iYXNlX21oeiAqIDEwMDAgKlxuLVx0XHRcdGVheF9kZW5vbWluYXRvciAvIGVieF9udW1lcmF0b3I7XG4tXHR9XG4tXG4tXHRpZiAoY3J5c3RhbF9raHogPT0gMClcbitcdGlmICghaW5mby5jcnlzdGFsX2toeilcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKlxuQEAgLTcxMCw0MSArNzQxLDMwIEBAIHVuc2lnbmVkIGxvbmcgbmF0aXZlX2NhbGlicmF0ZV90c2Modm9pZClcbiBcdGlmIChib290X2NwdV9kYXRhLng4Nl92Zm0gPT0gSU5URUxfQVRPTV9HT0xETU9OVClcbiBcdFx0c2V0dXBfZm9yY2VfY3B1X2NhcChYODZfRkVBVFVSRV9UU0NfUkVMSUFCTEUpO1xuIFxuLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUNcbiBcdC8qXG4gXHQgKiBUaGUgbG9jYWwgQVBJQyBhcHBlYXJzIHRvIGJlIGZlZCBieSB0aGUgY29yZSBjcnlzdGFsIGNsb2NrXG4gXHQgKiAod2hpY2ggc291bmRzIGVudGlyZWx5IHNlbnNpYmxlKS4gV2UgY2FuIHNldCB0aGUgZ2xvYmFsXG4gXHQgKiBsYXBpY190aW1lcl9wZXJpb2QgaGVyZSB0byBhdm9pZCBoYXZpbmcgdG8gY2FsaWJyYXRlIHRoZSBBUElDXG4gXHQgKiB0aW1lciBsYXRlci5cbiBcdCAqL1xuLVx0bGFwaWNfdGltZXJfcGVyaW9kID0gY3J5c3RhbF9raHogKiAxMDAwIC8gSFo7XG4tI2VuZGlmXG4rXHRhcGljX3NldF90aW1lcl9wZXJpb2Rfa2h6KGluZm8uY3J5c3RhbF9raHosIFwiQ1BVSUQgMHgxNS8weDE2XCIpO1xuIFxuLVx0cmV0dXJuIGNyeXN0YWxfa2h6ICogZWJ4X251bWVyYXRvciAvIGVheF9kZW5vbWluYXRvcjtcbitcdHJldHVybiBpbmZvLmNyeXN0YWxfa2h6ICogaW5mby5udW1lcmF0b3IgLyBpbmZvLmRlbm9taW5hdG9yO1xuIH1cbiBcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfa2h6X2Zyb21fY3B1aWQodm9pZClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgZWF4X2Jhc2VfbWh6LCBlYnhfbWF4X21oeiwgZWN4X2J1c19taHosIGVkeDtcbi1cbiBcdGlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAoYm9vdF9jcHVfZGF0YS5jcHVpZF9sZXZlbCBcdTAwM2MgQ1BVSURfTEVBRl9GUkVRKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdGVheF9iYXNlX21oeiA9IGVieF9tYXhfbWh6ID0gZWN4X2J1c19taHogPSBlZHggPSAwO1xuLVxuLVx0Y3B1aWQoQ1BVSURfTEVBRl9GUkVRLCBcdTAwMjZlYXhfYmFzZV9taHosIFx1MDAyNmVieF9tYXhfbWh6LCBcdTAwMjZlY3hfYnVzX21oeiwgXHUwMDI2ZWR4KTtcbi1cbi1cdHJldHVybiBlYXhfYmFzZV9taHogKiAxMDAwO1xuK1x0cmV0dXJuIF9fY3B1X2toel9mcm9tX2NwdWlkKCk7XG4gfVxuIFxuIC8qXG4gICogY2FsaWJyYXRlIGNwdSB1c2luZyBwaXQsIGhwZXQsIGFuZCBwdGltZXIgbWV0aG9kcy4gVGhleSBhcmUgYXZhaWxhYmxlXG4gICogbGF0ZXIgaW4gYm9vdCBhZnRlciBhY3BpIGlzIGluaXRpYWxpemVkLlxuICAqL1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBpdF9ocGV0X3B0aW1lcl9jYWxpYnJhdGVfY3B1KHZvaWQpXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgbmF0aXZlX2NhbGlicmF0ZV9jcHVfbGF0ZSh2b2lkKVxuIHtcbiBcdHU2NCB0c2MxLCB0c2MyLCBkZWx0YSwgcmVmMSwgcmVmMjtcbiBcdHVuc2lnbmVkIGxvbmcgdHNjX3BpdF9taW4gPSBVTE9OR19NQVgsIHRzY19yZWZfbWluID0gVUxPTkdfTUFYO1xuQEAgLTg5Niw3ICs5MTYsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBwaXRfaHBldF9wdGltZXJfY2FsaWJyYXRlX2NwdSh2b2lkKVxuIC8qKlxuICAqIG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5IC0gY2FuIGNhbGlicmF0ZSB0aGUgY3B1IGVhcmx5IGluIGJvb3RcbiAgKi9cbi11bnNpZ25lZCBsb25nIG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KHZvaWQpXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHkodm9pZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzLCBmYXN0X2NhbGlicmF0ZSA9IGNwdV9raHpfZnJvbV9jcHVpZCgpO1xuIFxuQEAgLTkxMCwyMCArOTMwLDYgQEAgdW5zaWduZWQgbG9uZyBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSh2b2lkKVxuIFx0cmV0dXJuIGZhc3RfY2FsaWJyYXRlO1xuIH1cbiBcbi1cbi0vKipcbi0gKiBuYXRpdmVfY2FsaWJyYXRlX2NwdSAtIGNhbGlicmF0ZSB0aGUgY3B1XG4tICovXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgbmF0aXZlX2NhbGlicmF0ZV9jcHUodm9pZClcbi17XG4tXHR1bnNpZ25lZCBsb25nIHRzY19mcmVxID0gbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHkoKTtcbi1cbi1cdGlmICghdHNjX2ZyZXEpXG4tXHRcdHRzY19mcmVxID0gcGl0X2hwZXRfcHRpbWVyX2NhbGlicmF0ZV9jcHUoKTtcbi1cbi1cdHJldHVybiB0c2NfZnJlcTtcbi19XG4tXG4gdm9pZCByZWNhbGlicmF0ZV9jcHVfa2h6KHZvaWQpXG4ge1xuICNpZm5kZWYgQ09ORklHX1NNUFxuQEAgLTkzMiw4ICs5MzgsMTMgQEAgdm9pZCByZWNhbGlicmF0ZV9jcHVfa2h6KHZvaWQpXG4gXHRpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9UU0MpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRjcHVfa2h6ID0geDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUoKTtcbi1cdHRzY19raHogPSB4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX3RzYygpO1xuK1x0aWYgKFdBUk5fT05fT05DRShjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKSkpXG4rXHRcdHJldHVybjtcbitcbitcdGNwdV9raHogPSBuYXRpdmVfY2FsaWJyYXRlX2NwdV9lYXJseSgpO1xuK1x0aWYgKCFjcHVfa2h6KVxuK1x0XHRjcHVfa2h6ID0gbmF0aXZlX2NhbGlicmF0ZV9jcHVfbGF0ZSgpO1xuK1x0dHNjX2toeiA9IG5hdGl2ZV9jYWxpYnJhdGVfdHNjKCk7XG4gXHRpZiAodHNjX2toeiA9PSAwKVxuIFx0XHR0c2Nfa2h6ID0gY3B1X2toejtcbiBcdGVsc2UgaWYgKGFicyhjcHVfa2h6IC0gdHNjX2toeikgKiAxMCBcdTAwM2UgdHNjX2toeilcbkBAIC05NDIsMTQgKzk1MywyMiBAQCB2b2lkIHJlY2FsaWJyYXRlX2NwdV9raHoodm9pZClcbiBcdFx0XHRcdFx0XHQgICAgY3B1X2toel9vbGQsIGNwdV9raHopO1xuICNlbmRpZlxuIH1cbi1FWFBPUlRfU1lNQk9MX0dQTChyZWNhbGlicmF0ZV9jcHVfa2h6KTtcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHJlY2FsaWJyYXRlX2NwdV9raHosIFwicDQtY2xvY2ttb2QscG93ZXJub3ctazdcIik7XG4gXG4gXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBjeWMybnNfc3VzcGVuZDtcbiBcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdHNjX2lzX3NhdmVfcmVzdG9yZV9uZWVkZWQodm9pZClcbit7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKCF1c2luZ19uYXRpdmVfc2NoZWRfY2xvY2soKSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZfX3VzZV90c2MpIHx8IHNjaGVkX2Nsb2NrX3N0YWJsZSgpO1xuK31cbitcbiB2b2lkIHRzY19zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXG4ge1xuLVx0aWYgKCFzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZfX3VzZV90c2MpIFx1MDAyNlx1MDAyNiAhc2NoZWRfY2xvY2tfc3RhYmxlKCkpXG4rXHRpZiAoIXRzY19pc19zYXZlX3Jlc3RvcmVfbmVlZGVkKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdGN5YzJuc19zdXNwZW5kID0gc2NoZWRfY2xvY2soKTtcbkBAIC05NjksNyArOTg4LDcgQEAgdm9pZCB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBjcHU7XG4gXG4tXHRpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNl9fdXNlX3RzYykgXHUwMDI2XHUwMDI2ICFzY2hlZF9jbG9ja19zdGFibGUoKSlcbitcdGlmICghdHNjX2lzX3NhdmVfcmVzdG9yZV9uZWVkZWQoKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuQEAgLTE0MzksMjEgKzE0NTgsMjggQEAgc3RhdGljIGludCBfX2luaXQgaW5pdF90c2NfY2xvY2tzb3VyY2Uodm9pZClcbiAgKi9cbiBkZXZpY2VfaW5pdGNhbGwoaW5pdF90c2NfY2xvY2tzb3VyY2UpO1xuIFxuLXN0YXRpYyBib29sIF9faW5pdCBkZXRlcm1pbmVfY3B1X3RzY19mcmVxdWVuY2llcyhib29sIGVhcmx5KVxuK3N0YXRpYyBib29sIF9faW5pdCBkZXRlcm1pbmVfY3B1X3RzY19mcmVxdWVuY2llcyhib29sIGVhcmx5LFxuK1x0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQga25vd25fY3B1X2toeixcbitcdFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IGtub3duX3RzY19raHopXG4ge1xuIFx0LyogTWFrZSBzdXJlIHRoYXQgY3B1IGFuZCB0c2MgYXJlIG5vdCBhbHJlYWR5IGNhbGlicmF0ZWQgKi9cbiBcdFdBUk5fT04oY3B1X2toeiB8fCB0c2Nfa2h6KTtcbiBcbiBcdGlmIChlYXJseSkge1xuLVx0XHRjcHVfa2h6ID0geDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUoKTtcbi1cdFx0aWYgKHRzY19lYXJseV9raHopXG4tXHRcdFx0dHNjX2toeiA9IHRzY19lYXJseV9raHo7XG4rXHRcdC8qXG4rXHRcdCAqIEVhcmx5IENQVSBjYWxpYnJhdGlvbiBjYW4gb25seSB1c2UgbWV0aG9kcyB0aGF0IGFyZSBhdmFpbGFibGVcbitcdFx0ICogZWFybHkgaW4gYm9vdCAob2J2aW91c2x5KS5cbitcdFx0ICovXG4rXHRcdGlmIChrbm93bl9jcHVfa2h6KVxuK1x0XHRcdGNwdV9raHogPSBrbm93bl9jcHVfa2h6O1xuIFx0XHRlbHNlXG4tXHRcdFx0dHNjX2toeiA9IHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjKCk7XG4rXHRcdFx0Y3B1X2toeiA9IG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5KCk7XG4rXHRcdGlmIChrbm93bl90c2Nfa2h6KVxuK1x0XHRcdHRzY19raHogPSBrbm93bl90c2Nfa2h6O1xuK1x0XHRlbHNlXG4rXHRcdFx0dHNjX2toeiA9IG5hdGl2ZV9jYWxpYnJhdGVfdHNjKCk7XG4gXHR9IGVsc2Uge1xuLVx0XHQvKiBXZSBzaG91bGQgbm90IGJlIGhlcmUgd2l0aCBub24tbmF0aXZlIGNwdSBjYWxpYnJhdGlvbiAqL1xuLVx0XHRXQVJOX09OKHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ICE9IG5hdGl2ZV9jYWxpYnJhdGVfY3B1KTtcbi1cdFx0Y3B1X2toeiA9IHBpdF9ocGV0X3B0aW1lcl9jYWxpYnJhdGVfY3B1KCk7XG4rXHRcdGNwdV9raHogPSBuYXRpdmVfY2FsaWJyYXRlX2NwdV9sYXRlKCk7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTE1MDIsMTUgKzE1MjgsNDggQEAgc3RhdGljIHZvaWQgX19pbml0IHRzY19lbmFibGVfc2NoZWRfY2xvY2sodm9pZClcbiBcbiB2b2lkIF9faW5pdCB0c2NfZWFybHlfaW5pdCh2b2lkKVxuIHtcbitcdHVuc2lnbmVkIGludCBrbm93bl9jcHVfa2h6ID0gMCwga25vd25fdHNjX2toeiA9IDA7XG4rXG4gXHRpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9UU0MpKVxuIFx0XHRyZXR1cm47XG4gXHQvKiBEb24ndCBjaGFuZ2UgVVYgVFNDIG11bHRpLWNoYXNzaXMgc3luY2hyb25pemF0aW9uICovXG4gXHRpZiAoaXNfZWFybHlfdXZfc3lzdGVtKCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdHNucF9zZWN1cmVfdHNjX2luaXQoKTtcbitcdGlmICh4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toeilcbitcdFx0a25vd25fY3B1X2toeiA9IHg4Nl9pbml0Lmh5cGVyLmdldF9jcHVfa2h6KCk7XG4gXG4tXHRpZiAoIWRldGVybWluZV9jcHVfdHNjX2ZyZXF1ZW5jaWVzKHRydWUpKVxuK1x0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0dVRVNUX1NOUF9TRUNVUkVfVFNDKSlcbitcdFx0a25vd25fdHNjX2toeiA9IHNucF9zZWN1cmVfdHNjX2luaXQoKTtcbitcdGVsc2UgaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9URFhfR1VFU1QpKVxuK1x0XHRrbm93bl90c2Nfa2h6ID0gdGR4X3RzY19pbml0KCk7XG4rXG4rXHQvKlxuK1x0ICogSWYgdGhlIFRTQyBmcmVxdWVuY3kgd2Fzbid0IHByb3ZpZGVkIGJ5IHRydXN0ZWQgZmlybXdhcmUsIHRyeSB0byBnZXRcbitcdCAqIGl0IGZyb20gdGhlIGh5cGVydmlzb3IgKHdoaWNoIGlzIHVudHJ1c3RlZCB3aGVuIHJ1bm5pbmcgYXMgYSBDb0NvIGd1ZXN0KS5cbitcdCAqL1xuK1x0aWYgKCFrbm93bl90c2Nfa2h6IFx1MDAyNlx1MDAyNiB4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toeilcbitcdFx0a25vd25fdHNjX2toeiA9IHg4Nl9pbml0Lmh5cGVyLmdldF90c2Nfa2h6KCk7XG4rXG4rXHQvKlxuK1x0ICogTWFyayB0aGUgVFNDIGZyZXF1ZW5jeSBhcyBrbm93biBpZiBpdCB3YXMgb2J0YWluZWQgZnJvbSBhIGh5cGVydmlzb3JcbitcdCAqIG9yIHRydXN0ZWQgZmlybXdhcmUuXG4rXHQgKi9cbitcdGlmIChrbm93bl90c2Nfa2h6KVxuK1x0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKTtcbitcbitcdC8qXG4rXHQgKiBJZ25vcmUgdGhlIHVzZXItcHJvdmlkZWQgVFNDIGZyZXF1ZW5jeSBpZiB0aGUgZXhhY3QgZnJlcXVlbmN5IHdhc1xuK1x0ICogb2J0YWluZWQgZnJvbSB0cnVzdGVkIGZpcm13YXJlIG9yIHRoZSBoeXBlcnZpc29yLCBhbmQgZG9uJ3QgbWFyayB0aGVcbitcdCAqIGZyZXF1ZW5jeSBhcyBrbm93biwgYXMgdGhlIHVzZXItcHJvdmlkZWQgZnJlcXVlbmN5IGlzIGludGVuZGVkIGFzIGFcbitcdCAqIFwic3RhcnRpbmcgcG9pbnRcIiwgbm90IGEga25vd24sIGd1YXJhbnRlZWQgZnJlcXVlbmN5XG4rXHQgKi9cbitcdGlmICgha25vd25fdHNjX2toeilcbitcdFx0a25vd25fdHNjX2toeiA9IHRzY19lYXJseV9raHo7XG4rXHRlbHNlIGlmICh0c2NfZWFybHlfa2h6KVxuK1x0XHRwcl9lcnIoXCJJZ25vcmluZyAndHNjX2Vhcmx5X2toeicgaW4gZmF2b3Igb2YgZmlybXdhcmUvaHlwZXJ2aXNvci5cXG5cIik7XG4rXG4rXHRpZiAoIWRldGVybWluZV9jcHVfdHNjX2ZyZXF1ZW5jaWVzKHRydWUsIGtub3duX2NwdV9raHosIGtub3duX3RzY19raHopKVxuIFx0XHRyZXR1cm47XG4gXHR0c2NfZW5hYmxlX3NjaGVkX2Nsb2NrKCk7XG4gfVxuQEAgLTE1MjIsMTYgKzE1ODEsOSBAQCB2b2lkIF9faW5pdCB0c2NfaW5pdCh2b2lkKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHQvKlxuLVx0ICogbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHkgY2FuIG9ubHkgY2FsaWJyYXRlIHVzaW5nIG1ldGhvZHMgdGhhdCBhcmVcbi1cdCAqIGF2YWlsYWJsZSBlYXJseSBpbiBib290LlxuLVx0ICovXG4tXHRpZiAoeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHUgPT0gbmF0aXZlX2NhbGlicmF0ZV9jcHVfZWFybHkpXG4tXHRcdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfY3B1ID0gbmF0aXZlX2NhbGlicmF0ZV9jcHU7XG4tXG4gXHRpZiAoIXRzY19raHopIHtcbiBcdFx0LyogV2UgZmFpbGVkIHRvIGRldGVybWluZSBmcmVxdWVuY2llcyBlYXJsaWVyLCB0cnkgYWdhaW4gKi9cbi1cdFx0aWYgKCFkZXRlcm1pbmVfY3B1X3RzY19mcmVxdWVuY2llcyhmYWxzZSkpIHtcbitcdFx0aWYgKCFkZXRlcm1pbmVfY3B1X3RzY19mcmVxdWVuY2llcyhmYWxzZSwgMCwgMCkpIHtcbiBcdFx0XHRtYXJrX3RzY191bnN0YWJsZShcImNvdWxkIG5vdCBjYWxjdWxhdGUgVFNDIGtoelwiKTtcbiBcdFx0XHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19ERUFETElORV9USU1FUik7XG4gXHRcdFx0cmV0dXJuO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90c2NfbXNyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjX21zci5jXG5pbmRleCA0OGU2Y2MxY2IwMTdhNS4uYWVjZTA2MmFlZTdlODkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHNjX21zci5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjX21zci5jXG5AQCAtMjEwLDkgKzIxMCw3IEBAIHVuc2lnbmVkIGxvbmcgY3B1X2toel9mcm9tX21zcih2b2lkKVxuIFx0aWYgKGZyZXEgPT0gMClcbiBcdFx0cHJfZXJyKFwiRXJyb3IgTVNSX0ZTQl9GUkVRIGluZGV4ICVkIGlzIHVua25vd25cXG5cIiwgaW5kZXgpO1xuIFxuLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUNcbi1cdGxhcGljX3RpbWVyX3BlcmlvZCA9IChmcmVxICogMTAwMCkgLyBIWjtcbi0jZW5kaWZcbitcdGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHooZnJlcSwgXCJNU1JfRlNCX0ZSRVFcIik7XG4gXG4gXHQvKlxuIFx0ICogVFNDIGZyZXF1ZW5jeSBkZXRlcm1pbmVkIGJ5IE1TUiBpcyBhbHdheXMgY29uc2lkZXJlZCBcImtub3duXCJcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYyBiL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jXG5pbmRleCAyNTJjNTgyN2QwNjM0Zi4uYjdhNDhlNjIyZjQ4OGEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuY1xuKysrIGIvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmNcbkBAIC0xNDcsOCArMTQ3LDYgQEAgc3RhdGljIHZvaWQgZW5jX2tleGVjX2ZpbmlzaF9ub29wKHZvaWQpIHt9XG4gc3RhdGljIGJvb2wgaXNfcHJpdmF0ZV9tbWlvX25vb3AodTY0IGFkZHIpIHtyZXR1cm4gZmFsc2U7IH1cbiBcbiBzdHJ1Y3QgeDg2X3BsYXRmb3JtX29wcyB4ODZfcGxhdGZvcm0gX19yb19hZnRlcl9pbml0ID0ge1xuLVx0LmNhbGlicmF0ZV9jcHVcdFx0XHQ9IG5hdGl2ZV9jYWxpYnJhdGVfY3B1X2Vhcmx5LFxuLVx0LmNhbGlicmF0ZV90c2NcdFx0XHQ9IG5hdGl2ZV9jYWxpYnJhdGVfdHNjLFxuIFx0LmdldF93YWxsY2xvY2tcdFx0XHQ9IG1hY2hfZ2V0X2Ntb3NfdGltZSxcbiBcdC5zZXRfd2FsbGNsb2NrXHRcdFx0PSBtYWNoX3NldF9jbW9zX3RpbWUsXG4gXHQuaW9tbXVfc2h1dGRvd25cdFx0XHQ9IGlvbW11X3NodXRkb3duX25vb3AsXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMgYi9hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuY1xuaW5kZXggMmY4YzMyMTczOTcyZDYuLjZjM2FmOTc0YzdjMmYxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmNcbisrKyBiL2FyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jXG5AQCAtNTM1LDkgKzUzNSw2IEBAIHZvaWQgX19pbml0IHNtZV9lYXJseV9pbml0KHZvaWQpXG4gXHRcdCAqL1xuIFx0XHR4ODZfaW5pdC5yZXNvdXJjZXMuZG1pX3NldHVwID0gc25wX2RtaV9zZXR1cDtcbiBcdH1cbi1cbi1cdGlmIChzZXZfc3RhdHVzIFx1MDAyNiBNU1JfQU1ENjRfU05QX1NFQ1VSRV9UU0MpXG4tXHRcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTtcbiB9XG4gXG4gdm9pZCBfX2luaXQgbWVtX2VuY3J5cHRfZnJlZV9kZWNyeXB0ZWRfbWVtKHZvaWQpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3RpbWUuYyBiL2FyY2gveDg2L3hlbi90aW1lLmNcbmluZGV4IGQ2MmMxNDMzNGIzNTEwLi5iYzI2ZjAwZmM1M2U1ZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3hlbi90aW1lLmNcbisrKyBiL2FyY2gveDg2L3hlbi90aW1lLmNcbkBAIC0zOCwxMiArMzgsMTEgQEBcbiBzdGF0aWMgdTY0IHhlbl9zY2hlZF9jbG9ja19vZmZzZXQgX19yZWFkX21vc3RseTtcbiBcbiAvKiBHZXQgdGhlIFRTQyBzcGVlZCBmcm9tIFhlbiAqL1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHhlbl90c2Nfa2h6KHZvaWQpXG4rc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgeGVuX3RzY19raHoodm9pZClcbiB7XG4gXHRzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqaW5mbyA9XG4gXHRcdFx1MDAyNkhZUEVSVklTT1Jfc2hhcmVkX2luZm8tXHUwMDNldmNwdV9pbmZvWzBdLnRpbWU7XG4gXG4tXHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX1RTQ19LTk9XTl9GUkVRKTtcbiBcdHJldHVybiBwdmNsb2NrX3RzY19raHooaW5mbyk7XG4gfVxuIFxuQEAgLTQ0NCw3ICs0NDMsNyBAQCB2b2lkIHhlbl9yZXN0b3JlX3RpbWVfbWVtb3J5X2FyZWEodm9pZClcbiBcdHhlbl9zY2hlZF9jbG9ja19vZmZzZXQgPSB4ZW5fY2xvY2tzb3VyY2VfcmVhZCgpIC0geGVuX2Nsb2NrX3ZhbHVlX3NhdmVkO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB4ZW5fc2V0dXBfdnN5c2NhbGxfdGltZV9pbmZvKHZvaWQpXG4rc3RhdGljIHZvaWQgX19pbml0IHhlbl9zZXR1cF92c3lzY2FsbF90aW1lX2luZm8odm9pZClcbiB7XG4gXHRzdHJ1Y3QgdmNwdV9yZWdpc3Rlcl90aW1lX21lbW9yeV9hcmVhIHQ7XG4gXHRzdHJ1Y3QgcHZjbG9ja192c3lzY2FsbF90aW1lX2luZm8gKnRpO1xuQEAgLTU2Nyw5ICs1NjYsMTQgQEAgc3RhdGljIHZvaWQgX19pbml0IHhlbl9pbml0X3RpbWVfY29tbW9uKHZvaWQpXG4ge1xuIFx0eGVuX3NjaGVkX2Nsb2NrX29mZnNldCA9IHhlbl9jbG9ja3NvdXJjZV9yZWFkKCk7XG4gXHRzdGF0aWNfY2FsbF91cGRhdGUocHZfc3RlYWxfY2xvY2ssIHhlbl9zdGVhbF9jbG9jayk7XG4tXHRwYXJhdmlydF9zZXRfc2NoZWRfY2xvY2soeGVuX3NjaGVkX2Nsb2NrKTtcbiBcbi1cdHg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjID0geGVuX3RzY19raHo7XG4rXHQvKlxuK1x0ICogWGVuIGhhcyBwYXJhdmlydHVhbGl6ZWQgc3VzcGVuZC9yZXN1bWUgYW5kIHNvIGRvZXNuJ3QgdXNlIHRoZSBjb21tb25cbitcdCAqIHg4NiBzY2hlZF9jbG9jayBzYXZlL3Jlc3RvcmUgaG9va3MuXG4rXHQgKi9cbitcdHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayh4ZW5fc2NoZWRfY2xvY2ssIHg4Nl9pbml0X25vb3AsIHg4Nl9pbml0X25vb3ApO1xuK1xuK1x0eDg2X2luaXQuaHlwZXIuZ2V0X3RzY19raHogPSB4ZW5fdHNjX2toejtcbiBcdHg4Nl9wbGF0Zm9ybS5nZXRfd2FsbGNsb2NrID0geGVuX2dldF93YWxsY2xvY2s7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jXG5pbmRleCBkZjU2Nzc5NWQxNzUxYS4uOGVlN2E5ZGUwZjRmZGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jXG4rKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jXG5AQCAtNDg4LDE3ICs0ODgsNiBAQCBzdGF0aWMgdm9pZCByZXN1bWVfaHZfY2xvY2tfdHNjKHN0cnVjdCBjbG9ja3NvdXJjZSAqYXJnKVxuIFx0aHZfc2V0X21zcihIVl9NU1JfUkVGRVJFTkNFX1RTQywgdHNjX21zci5hc191aW50NjQpO1xuIH1cbiBcbi0vKlxuLSAqIENhbGxlZCBkdXJpbmcgcmVzdW1lIGZyb20gaGliZXJuYXRpb24sIGZyb20gb3ZlcnJpZGRlblxuLSAqIHg4Nl9wbGF0Zm9ybS5yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlIHJvdXRpbmUuIFRoaXMgaXMgdG8gYWRqdXN0IG9mZnNldHNcbi0gKiB1c2VkIHRvIGNhbGN1bGF0ZSB0aW1lIGZvciBodiB0c2MgcGFnZSBiYXNlZCBzY2hlZF9jbG9jaywgdG8gYWNjb3VudCBmb3Jcbi0gKiB0aW1lIHNwZW50IGJlZm9yZSBoaWJlcm5hdGlvbi5cbi0gKi9cbi12b2lkIGh2X2Fkal9zY2hlZF9jbG9ja19vZmZzZXQodTY0IG9mZnNldClcbi17XG4tXHRodl9zY2hlZF9jbG9ja19vZmZzZXQgLT0gb2Zmc2V0O1xuLX1cbi1cbiAjaWZkZWYgSEFWRV9WRFNPX0NMT0NLTU9ERV9IVkNMT0NLXG4gc3RhdGljIGludCBodl9jc19lbmFibGUoc3RydWN0IGNsb2Nrc291cmNlICpjcylcbiB7XG5AQCAtNTU0LDEwICs1NDMsMzUgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGh2X3NldHVwX3NjaGVkX2Nsb2NrKHZvaWQgKnNjaGVkX2Nsb2NrKVxuICNlbGlmIGRlZmluZWQgQ09ORklHX1BBUkFWSVJUXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RpbWVyLmhcdTAwM2VcbiBcbitzdGF0aWMgdTY0IGh2X3JlZl9jb3VudGVyX2F0X3N1c3BlbmQ7XG4rLypcbisgKiBIeXBlci1WIGNsb2NrIGNvdW50ZXIgcmVzZXRzIGR1cmluZyBoaWJlcm5hdGlvbi4gU2F2ZSBhbmQgcmVzdG9yZSBjbG9ja1xuKyAqIG9mZnNldCBkdXJpbmcgc3VzcGVuZC9yZXN1bWUsIHdoaWxlIGFsc28gY29uc2lkZXJpbmcgdGhlIHRpbWUgcGFzc2VkXG4rICogYmVmb3JlIHN1c3BlbmQuIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgc2NoZWRfY2xvY2sgdXNpbmcgaHYgdHNjIHBhZ2VcbisgKiBiYXNlZCBjbG9ja3NvdXJjZSwgcHJvY2VlZHMgZnJvbSB3aGVyZSBpdCBsZWZ0IG9mZiBkdXJpbmcgc3VzcGVuZCBhbmRcbisgKiBpdCBzaG93cyBjb3JyZWN0IHRpbWUgZm9yIHRoZSB0aW1lc3RhbXBzIG9mIGtlcm5lbCBtZXNzYWdlcyBhZnRlciByZXN1bWUuXG4rICovXG4rc3RhdGljIHZvaWQgaHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxuK3tcbitcdGh2X3JlZl9jb3VudGVyX2F0X3N1c3BlbmQgPSBodl9yZWFkX3JlZmVyZW5jZV9jb3VudGVyKCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGh2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcbit7XG4rXHQvKlxuK1x0ICogQWRqdXN0IHRoZSBvZmZzZXRzIHVzZWQgYnkgaHYgdHNjIGNsb2Nrc291cmNlIHRvXG4rXHQgKiBhY2NvdW50IGZvciB0aGUgdGltZSBzcGVudCBiZWZvcmUgaGliZXJuYXRpb24uXG4rXHQgKiBhZGp1c3RlZCB2YWx1ZSA9IHJlZmVyZW5jZSBjb3VudGVyICh0aW1lKSBhdCBzdXNwZW5kXG4rXHQgKiAgICAgICAgICAgICAgICAtIHJlZmVyZW5jZSBjb3VudGVyICh0aW1lKSBub3cuXG4rXHQgKi9cbitcdGh2X3NjaGVkX2Nsb2NrX29mZnNldCAtPSAoaHZfcmVmX2NvdW50ZXJfYXRfc3VzcGVuZCAtIGh2X3JlYWRfcmVmZXJlbmNlX2NvdW50ZXIoKSk7XG4rfVxuK1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBodl9zZXR1cF9zY2hlZF9jbG9jayh2b2lkICpzY2hlZF9jbG9jaylcbiB7XG4gXHQvKiBXZSdyZSBvbiB4ODYveDY0ICphbmQqIHVzaW5nIFBWIG9wcyAqL1xuLVx0cGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKHNjaGVkX2Nsb2NrKTtcbitcdHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayhzY2hlZF9jbG9jaywgaHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSxcbitcdFx0XHRcdCBodl9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKTtcbiB9XG4gI2Vsc2UgLyogIUNPTkZJR19HRU5FUklDX1NDSEVEX0NMT0NLIFx1MDAyNlx1MDAyNiAhQ09ORklHX1BBUkFWSVJUICovXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGh2X3NldHVwX3NjaGVkX2Nsb2NrKHZvaWQgKnNjaGVkX2Nsb2NrKSB7fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmggYi9pbmNsdWRlL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5oXG5pbmRleCBkNDhkZDQxNzZmZDM1Yi4uYTRjODFhNjBmNTNkZmMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5oXG4rKysgYi9pbmNsdWRlL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5oXG5AQCAtMzgsOCArMzgsNiBAQCBleHRlcm4gdm9pZCBodl9yZW1hcF90c2NfY2xvY2tzb3VyY2Uodm9pZCk7XG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaHZfZ2V0X3RzY19wZm4odm9pZCk7XG4gZXh0ZXJuIHN0cnVjdCBtc19oeXBlcnZfdHNjX3BhZ2UgKmh2X2dldF90c2NfcGFnZSh2b2lkKTtcbiBcbi1leHRlcm4gdm9pZCBodl9hZGpfc2NoZWRfY2xvY2tfb2Zmc2V0KHU2NCBvZmZzZXQpO1xuLVxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbFxuIGh2X3JlYWRfdHNjX3BhZ2VfdHNjKGNvbnN0IHN0cnVjdCBtc19oeXBlcnZfdHNjX3BhZ2UgKnRzY19wZyxcbiBcdFx0ICAgICB1NjQgKmN1cl90c2MsIHU2NCAqdGltZSlcbmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jIGIva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuY1xuaW5kZXggYjFiNWVjNDNjMGYyN2IuLjViYzc3ZDM2YzdhMzY0IDEwMDY0NFxuLS0tIGEva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuY1xuKysrIGIva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuY1xuQEAgLTIxODAsMTEgKzIxODAsMTYgQEAgdm9pZCB0aW1la2VlcGluZ19yZXN1bWUodm9pZClcbiBcdHU2NCBjeWNsZV9ub3csIG5zZWM7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuLVx0cmVhZF9wZXJzaXN0ZW50X2Nsb2NrNjQoXHUwMDI2dHNfbmV3KTtcbi1cbiBcdGNsb2NrZXZlbnRzX3Jlc3VtZSgpO1xuIFx0Y2xvY2tzb3VyY2VfcmVzdW1lKCk7XG4gXG4rXHQvKlxuK1x0ICogUmVhZCBwZXJzaXN0ZW50IHRpbWUgYWZ0ZXIgY2xvY2tzb3VyY2VzIGhhdmUgYmVlbiByZXN1bWVkLiAgUGFyYXZpcnRcbitcdCAqIGNsb2NrcyBoYXZlIGEgbmFzdHkgaGFiaXQgb2YgcGlnZ3liYWNraW5nIGEgcGVyc2lzdGVudCBjbG9jayBvbiBhXG4rXHQgKiBzeXN0ZW0gY2xvY2ssIGFuZCBtYXkgcmV0dXJuIGdhcmJhZ2UgaWYgdGhlIHN5c3RlbSBjbG9jayBpcyBzdXNwZW5kZWQuXG4rXHQgKi9cbitcdHJlYWRfcGVyc2lzdGVudF9jbG9jazY0KFx1MDAyNnRzX25ldyk7XG4rXG4gXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dGtfY29yZS5sb2NrLCBmbGFncyk7XG4gXG4gXHQvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6MTE6MDYuNzA4NDk1MDU5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY2MTczNTU5NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUU0MgYW5kIEFQSUMgSW5pdGlhbGl6YXRpb24gUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCdzIGEgZGVlcCBkaXZlIGludG8gaG93IHdlIGhhbmRsZSBUaW1lIFN0YW1wIENvdW50ZXJzIChUU0MpIGFuZCBBUElDIGZyZXF1ZW5jaWVzIG9uIHg4NiwgZXNwZWNpYWxseSB3aXRoaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdCBsb29rcyBsaWtlIHRoZSBnb2FsIGhlcmUgaXMgdG8gbW9kZXJuaXplIGFuZCBpbXByb3ZlIGhvdyB3ZSBjYWxpYnJhdGUgYW5kIGluaXRpYWxpemUgdGhlc2UgdGltZS1jcml0aWNhbCBjb21wb25lbnRzLCBlc3BlY2lhbGx5IGZvciB0aGUgbGlrZXMgb2YgS1ZNLCBIeXBlci1WLCBWTXdhcmUsIEFDUk4sIEphaWxob3VzZSwgVERYLCBhbmQgU0VWLVNOUC5cblxuSW5pdGlhbGx5LCBJIHNlZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIHdoaWNoIGlzIGFsd2F5cyBnb29kLiBTcGVjaWZpY2FsbHksIGB0c2NfZWFybHlfa2h6YCBhbmQgYEtWTV9DUFVJRF9USU1JTkdfSU5GT2AgYXJlIGRvY3VtZW50ZWQsIHdoaWNoIGlzIGEga2V5IHNpZ25hbC4gVGhlbiBpdCBsb29rcyBsaWtlIHdlJ3JlIG1vdmluZyBhd2F5IGZyb20gc2V0dGluZyBgeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV9jcHVgIGFuZCBgeDg2X3BsYXRmb3JtLmNhbGlicmF0ZV90c2NgIGluIHNldmVyYWwgcGxhY2VzIChsaWtlIHdpdGggYHNucF9zZWN1cmVfdHNjX2luaXRgKSwgYW5kIGluc3RlYWQgcmV0dXJuaW5nIHRoZSBUU0MgZnJlcXVlbmN5IGRpcmVjdGx5LiBUaGF0J3MgYSBzb2xpZCBhcmNoaXRlY3R1cmFsIGNoYW5nZS4gTWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGNvbXBsZXhpdGllcyBvZiBtb2Rlcm4gdmlydHVhbGl6YXRpb24uXG5cblRoZSBhZGRpdGlvbiBvZiBgdGR4X3RzY19pbml0YCBhbmQgaXRzIHVzZSBvZiBgY3B1aWRfZ2V0X3RzY19pbmZvYCBhbmQgYGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHpgIGZvciBURFggZW52aXJvbm1lbnRzIGlzIGltcG9ydGFudCwgdG9vLiBUaGlzIHN1Z2dlc3RzIGEgbW9yZSBkaXJlY3Qgd2F5IG9mIHJldHJpZXZpbmcgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIENQVUlEIGFuZCBzZXR0aW5nIHRoZSBBUElDIHRpbWVyIHBlcmlvZCwgd2hpY2ggSSB3b3VsZCBleHBlY3QgdG8gaW1wcm92ZSByZWxpYWJpbGl0eSBhbmQgcmVkdWNlIG92ZXJoZWFkLiBUaGUgcmVtb3ZhbCBvZiBgYWNybl9nZXRfdHNjX2toemAgc3VnZ2VzdHMgYSBzaGlmdCB0byBhIG1vcmUgZ2VuZXJpYyBvciBDUFVJRC1iYXNlZCBhcHByb2FjaCwgd2hpY2ggaXMgbGlrZWx5IG1vcmUgbWFpbnRhaW5hYmxlIGluIHRoZSBsb25nIHJ1bi4gVGhlIGNoYW5nZXMgaW4gdGhlIGhlYWRlciBmaWxlcyBhbmQgdGhlIGFkZGl0aW9uIG9mIGBhcGljX3NldF90aW1lcl9wZXJpb2RfaHpgIGFsc28gbG9va3MgbGlrZSBhIGdvb2Qgc3RlcCB0b3dhcmQgYmV0dGVyIHByZWNpc2lvbiBhbmQgYSBtb3JlIGZsZXhpYmxlIGludGVyZmFjZSBmb3IgY29uZmlndXJpbmcgQVBJQyB0aW1lcnMuXG5cbkknbSBpbnRyaWd1ZWQgYnkgdGhlIGNoYW5nZXMgaW4gYGt2bS5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgYWRkaXRpb24gb2YgYEtWTV9DUFVJRF9USU1JTkdfSU5GT2AgdG8gcHVsbCBUU0MgYW5kIEFQSUMgZnJlcXVlbmNpZXMgZGlyZWN0bHkgZnJvbSBDUFVJRCBzb3VuZHMgcHJvbWlzaW5nLiBUaGlzIGJ5cGFzc2VzIHRoZSBuZWVkIGZvciBoeXBlcnZpc29yLXNwZWNpZmljIGNhbGlicmF0aW9uIGFuZCBnaXZlcyB1cyBhIG1vcmUgZGlyZWN0IGFuZCBwb3RlbnRpYWxseSBtb3JlIGFjY3VyYXRlIGFwcHJvYWNoLiBUaGUgcmVmYWN0b3Jpbmcgb2YgYGt2bWNsb2NrLmNgIGFuZCBhc3NvY2lhdGVkIHN1c3BlbmQvcmVzdW1lIGhhbmRsaW5nIGlzIGFub3RoZXIgY3JpdGljYWwgYXJlYTsgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCBoYXMgb2Z0ZW4gYmVlbiBhIHNvdXJjZSBvZiBzdWJ0bGUgdGltZWtlZXBpbmcgcHJvYmxlbXMsIHNvIHRoaXMgYXR0ZW50aW9uIHRvIGRldGFpbCBpcyB3ZWxjb21lLlxuXG5UaGUgY29yZSBvZiB0aGUgVFNDIGNhbGlicmF0aW9uIGl0c2VsZiwgaW4gYHRzYy5jYCwgaXMgZ2V0dGluZyBhIHNpZ25pZmljYW50IG92ZXJoYXVsLCB3aXRoIGBuYXRpdmVfY2FsaWJyYXRlX3RzY2Agbm93IHVzaW5nIGBjcHVpZF9nZXRfdHNjX2luZm9gIGFuZCB0aGUgdXBkYXRlcyB0byBgZGV0ZXJtaW5lX2NwdV90c2NfZnJlcXVlbmNpZXNgLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBhcHByb2FjaCB0byBpbXByb3ZpbmcgVFNDIGNhbGlicmF0aW9uIGFuZCBtYWtpbmcgaXQgbW9yZSByZWxpYWJsZSBhbmQgY29uc2lzdGVudC4gSXQgbG9va3MgbGlrZSBpdCdzIHRyeWluZyB0byBzdHJlYW1saW5lIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGFuZCBsZWFuIG9uIHRoZSBDUFVJRCBpbmZvcm1hdGlvbiBmb3IgYmV0dGVyIGFjY3VyYWN5LiBUaGUgYHRzY19lYXJseV9pbml0YCBjaGFuZ2VzIGluZGljYXRlIHdlIGFyZSB1c2luZyBoeXBlcnZpc29yLXNwZWNpZmljIFRTQyBpbml0aWFsaXphdGlvbiwgdG9vLCB3aGljaCBzaG91bGQgYWRhcHQgdGhpcyB0byBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLiBUaGUgY2hhbmdlcyBpbiBgdHNjX21zci5jYCB0byB1c2UgYGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHpgIGFyZSBsaWtlbHkgcmVsYXRlZCBhbmQgYWltZWQgYXQgaW1wcm92aW5nIHRpbWVrZWVwaW5nIGFjY3VyYWN5IGF0IHRoZSBsb3dlciBsZXZlbHMuXG5cblRoZSBjaGFuZ2VzIGluIHRoZSBoeXBlcnZpc29yLXNwZWNpZmljIGNvZGUgKEFDUk4sIEh5cGVyLVYsIFZNd2FyZSwgSmFpbGhvdXNlLCBYZW4pIGFsbCBwb2ludCB0byBsZXZlcmFnaW5nIGB4ODZfaW5pdC5oeXBlci5nZXRfdHNjX2toemAgYW5kIGB4ODZfaW5pdC5oeXBlci5nZXRfY3B1X2toemAgaW5zdGVhZCBvZiB0aGUgb2xkZXIgY2FsaWJyYXRpb24gbWV0aG9kcy4gVGhpcyBzdWdnZXN0cyBhIG1vdmUgdG93YXJkIGEgbW9yZSBtb2R1bGFyIGFuZCBwb3RlbnRpYWxseSBtb3JlIGVmZmljaWVudCBoeXBlcnZpc29yIGludGVncmF0aW9uLlxuXG5SZWdhcmRpbmcgZnV6emluZywgdGhpcyBpcyB0aGUgY3J1Y2lhbCBxdWVzdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHRoaXMgY29kZSBtaWdodCBiZSB1bnJlYWNoYWJsZSBpbiBhIEdDRSBvciBRRU1VLWxpa2UgZW52aXJvbm1lbnQuIEJ1dCwgdGhlbiBJIHJlYWxpemVkIHRoYXQgdGhlIEtWTSBndWVzdCBjb2RlIHJ1bnMgKmluc2lkZSogdGhlIFZNLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgc3l6a2FsbGVyIGZ1enplcy4gU3l6a2FsbGVyIGNhbiwgYW5kIGRvZXMsIGZ1enogdGhpcyBjb2RlLlxuXG5BbHRob3VnaCB0aGlzIGlzIG1vc3RseSBlYXJseSBib290IGNvZGUgKFRTQyBjYWxpYnJhdGlvbiwgaHlwZXJ2aXNvciBpbml0aWFsaXphdGlvbiksIHdoaWNoIGlzIG5vdCB0aGUgdHlwaWNhbCBmb2N1cyBvZiBzeXprYWxsZXIsIHRoZSBjaGFuZ2VzIHRvIHN1c3BlbmQvcmVzdW1lIGFuZCBDUFUgaG90cGx1ZyBwYXRocyBhcmUgaW50ZXJlc3RpbmcuIFRoZXNlIGNvdWxkIGJlIGZ1enplZC4gU3BlY2lmaWNhbGx5LCBmdW5jdGlvbnMgbGlrZSBga3ZtY2xvY2tfY3B1X2FjdGlvbmAsIGBrdm1fc3VzcGVuZGAsIGBrdm1fcmVzdW1lYCwgYHRpbWVrZWVwaW5nX3Jlc3VtZWAsIGBrdm1fY3B1X29ubGluZWAsIGFuZCBga3ZtX2NwdV9kb3duX3ByZXBhcmVgIGFyZSB2ZXJ5IGludGVyZXN0aW5nLlxuXG5UbyBiZSByZWFjaGFibGUsIHdlIG5lZWQgYENPTkZJR19LVk1fR1VFU1RgLCBgQ09ORklHX1BBUkFWSVJUYCwgYENPTkZJR19TVVNQRU5EYCAob3IgYENPTkZJR19ISUJFUk5BVElPTmApLCBhbmQgYENPTkZJR19IT1RQTFVHX0NQVWAuIEkgc2VlIHRoYXQgYHRpbWVrZWVwaW5nX3Jlc3VtZWAgaXMgY2FsbGVkIGR1cmluZyBzeXN0ZW0gcmVzdW1lLCBhbmQgYGt2bWNsb2NrX2NwdV9hY3Rpb25gIGlzIGNhbGxlZCBkdXJpbmcgQ1BVIGhvdHBsdWcgYW5kIHN1c3BlbmQvcmVzdW1lLiBUaGlzIGxvb2tzIHZlcnkgcHJvbWlzaW5nLiBUaGlzIG5lZWRzIG1vcmUgYXR0ZW50aW9uLlxuXG4iLCJJbnB1dFRva2VucyI6MjUwNzQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTY1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6MTE6MjMuMzI1ODUyODU4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODU0NTI3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtY2xvY2tfY3B1X2FjdGlvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oPTEyOT12b2lkIGt2bWNsb2NrX2luaXQoYm9vbCBwcmVmZXJfdHNjKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oOjEzMDp2b2lkIGt2bWNsb2NrX2NwdV9hY3Rpb24oZW51bSBrdm1fZ3Vlc3RfY3B1X2FjdGlvbiBhY3Rpb24pO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgtMTMxLWJvb2wga3ZtX3BhcmFfYXZhaWxhYmxlKHZvaWQpO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2t2bS5jPTQ2Mz1zdGF0aWMgdm9pZCBrdm1fZ3Vlc3RfY3B1X29mZmxpbmUoZW51bSBrdm1fZ3Vlc3RfY3B1X2FjdGlvbiBhY3Rpb24pXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmMtNDczLVxcbmFyY2gveDg2L2tlcm5lbC9rdm0uYzo0NzQ6XFx0a3ZtY2xvY2tfY3B1X2FjdGlvbihhY3Rpb24pO1xcbmFyY2gveDg2L2tlcm5lbC9rdm0uYy00NzUtfVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2t2bS5jPTQ3Nz1zdGF0aWMgdm9pZCBfX2t2bV9jcHVfb25saW5lKHVuc2lnbmVkIGludCBjcHUsIGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2t2bS5jLTQ4MS1cXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuYXJjaC94ODYva2VybmVsL2t2bS5jOjQ4MjpcXHRrdm1jbG9ja19jcHVfYWN0aW9uKGFjdGlvbik7XFxuYXJjaC94ODYva2VybmVsL2t2bS5jLTQ4My1cXHRrdm1fZ3Vlc3RfY3B1X2luaXQoKTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jPTE2OT1zdGF0aWMgdm9pZCBrdm1jbG9ja19yZXN1bWUoc3RydWN0IGNsb2Nrc291cmNlICpjcylcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTE3NC1cXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzoxNzU6dm9pZCBrdm1jbG9ja19jcHVfYWN0aW9uKGVudW0ga3ZtX2d1ZXN0X2NwdV9hY3Rpb24gYWN0aW9uKVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTE3Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjExOjI1LjQxMTMwOTk4NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzkzOTg4ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2ggZm9yIFZ1bG5lcmFiaWxpdGllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBleHBlcnQgZXllIGdvZXMgdG8gdGhlIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZDogYGt2bV9jcHVfb25saW5lYCwgYGt2bV9jcHVfZG93bl9wcmVwYXJlYCwgYGt2bV9zdXNwZW5kYCwgYGt2bV9yZXN1bWVgLCBga3ZtX3B2X2d1ZXN0X2NwdV9yZWJvb3RgLCBhbmQgYGt2bV9jcmFzaF9zaHV0ZG93bmAuIFRoZXNlIGFyZSBhbGwgKnZlcnkqIGludGVyZXN0aW5nLiBUaGV5J3JlIGFsbCBob29rcyBpbnRvIGNyaXRpY2FsIGFyZWFzIOKAkyBDUFUgaG90cGx1Zywgc3lzdGVtIGNvcmUgb3BlcmF0aW9ucywgYW5kIHRoZSByZWJvb3Qgbm90aWZpY2F0aW9uIHByb2Nlc3MuIFRoYXQncyBhIHN0cm9uZyBpbmRpY2F0b3Igb2YgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB2aXJ0dWFsaXphdGlvbiBhbmQgS1ZNLlxuXG5NeSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHdoZXRoZXIgc3l6a2FsbGVyIGNhbiByZWFjaCB0aGVzZSBhcmVhcy4gQW5kLCBvZiBjb3Vyc2UsIHRoZSBhbnN3ZXIgaXMgeWVzLiBJdCdzIHBlcmZlY3RseSBjYXBhYmxlIG9mIHRyaWdnZXJpbmcgQ1BVIGhvdHBsdWcgdGhyb3VnaCBgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC9vbmxpbmVgIGFuZCBzdXNwZW5kL3Jlc3VtZSBjeWNsZXMgdXNpbmcgYC9zeXMvcG93ZXIvc3RhdGVgLiBUaGlzIHJhaXNlcyBhIHJlZCBmbGFnLiBUaGUgZmFjdCB0aGF0IGFuIGF1dG9tYXRlZCBmdXp6ZXIgY2FuIGhpdCB0aGVzZSBjYWxsYmFjayBmdW5jdGlvbnMgbWVhbnMgd2UgbmVlZCB0byBsb29rIHZlcnkgY2xvc2VseSBhdCB0aGUgY29kZSBwYXRocyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIHRoZXNlIHRyYW5zaXRpb25zLlxuXG5Ob3cgSSdtIGdvaW5nIHRvIHNoaWZ0IG15IGZvY3VzIHRvIGB0aW1la2VlcGluZ19yZXN1bWVgIGFuZCB0cnkgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgxNjAsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6MTE6MjkuMjkwNzEwNzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwODk2Njg3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aW1la2VlcGluZ19yZXN1bWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYveGVuL3N1c3BlbmQuYz00MD1zdGF0aWMgdm9pZCB4ZW5fdmNwdV9ub3RpZnlfcmVzdG9yZSh2b2lkICpkYXRhKVxcbi0tXFxuYXJjaC94ODYveGVuL3N1c3BlbmQuYy00NC1cXG5hcmNoL3g4Ni94ZW4vc3VzcGVuZC5jOjQ1OlxcdC8qIEJvb3QgcHJvY2Vzc29yIG5vdGlmaWVkIHZpYSBnZW5lcmljIHRpbWVrZWVwaW5nX3Jlc3VtZSgpICovXFxuYXJjaC94ODYveGVuL3N1c3BlbmQuYy00Ni1cXHRpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpID09IDApXFxuLS1cXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jPTI5NDk9c3RhdGljIHZvaWQgaHZfc3luaWNfcmVzdW1lKHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jLTI5NTUtXFx0ICogb24gQ1BVMCBpcyBub3QgdW5ib3VuZCBpbiBodl9zeW5pY19zdXNwZW5kKCksIGFuZCB0aGUgdGltZXIgaXNcXG5kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jOjI5NTY6XFx0ICogYXV0b21hdGljYWxseSByZS1lbmFibGVkIGluIHRpbWVrZWVwaW5nX3Jlc3VtZSgpLlxcbmRyaXZlcnMvaHYvdm1idXNfZHJ2LmMtMjk1Ny1cXHQgKi9cXG4tLVxcbmZzL3RpbWVyZmQuYz0xMjU9c3RhdGljIERFQ0xBUkVfV09SSyh0aW1lcmZkX3dvcmssIHRpbWVyZmRfcmVzdW1lX3dvcmspO1xcbi0tXFxuZnMvdGltZXJmZC5jLTEyNy0vKlxcbmZzL3RpbWVyZmQuYzoxMjg6ICogSW52b2tlZCBmcm9tIHRpbWVrZWVwaW5nX3Jlc3VtZSgpLiBEZWZlciB0aGUgYWN0dWFsIHVwZGF0ZSB0byB3b3JrIHNvXFxuZnMvdGltZXJmZC5jLTEyOS0gKiB0aW1lcmZkX2Nsb2NrX3dhc19zZXQoKSBydW5zIGluIHRhc2sgY29udGV4dC5cXG4tLVxcbmtlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmM9ODk4PXZvaWQgY2xvY2tzb3VyY2Vfc3RhcnRfc3VzcGVuZF90aW1pbmcoc3RydWN0IGNsb2Nrc291cmNlICpjcywgdTY0IHN0YXJ0X2N5Y2xlcylcXG4tLVxcbmtlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMtOTMwLSAqXFxua2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYzo5MzE6ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZWFybHkgaW4gdGhlIHJlc3VtZSBwcm9jZXNzIGZyb20gdGltZWtlZXBpbmdfcmVzdW1lKCksXFxua2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYy05MzItICogdGhhdCBtZWFucyB0aGVyZSBpcyBvbmx5IG9uZSBjcHUsIG5vIHByb2Nlc3NlcyBhcmUgcnVubmluZyBhbmQgdGhlIGludGVycnVwdHNcXG4tLVxcbmtlcm5lbC90aW1lL2hydGltZXIuYz0xMDE4PXZvaWQgY2xvY2tfd2FzX3NldF9kZWxheWVkKHZvaWQpXFxuLS1cXG5rZXJuZWwvdGltZS9ocnRpbWVyLmMtMTAyMy0vKlxcbmtlcm5lbC90aW1lL2hydGltZXIuYzoxMDI0OiAqIENhbGxlZCBkdXJpbmcgcmVzdW1lIGVpdGhlciBkaXJlY3RseSBmcm9tIHZpYSB0aW1la2VlcGluZ19yZXN1bWUoKVxcbmtlcm5lbC90aW1lL2hydGltZXIuYy0xMDI1LSAqIG9yIGluIHRoZSBjYXNlIG9mIHMyaWRsZSBmcm9tIHRpY2tfdW5mcmVlemUoKSB0byBlbnN1cmUgdGhhdCB0aGVcXG4tLVxcbmtlcm5lbC90aW1lL3RpY2stY29tbW9uLmM9NDg1PXZvaWQgdGlja19zdXNwZW5kKHZvaWQpXFxuLS1cXG5rZXJuZWwvdGltZS90aWNrLWNvbW1vbi5jLTQ5My0gKlxcbmtlcm5lbC90aW1lL3RpY2stY29tbW9uLmM6NDk0OiAqIENhbGxlZCBmcm9tIHN5c2NvcmVfcmVzdW1lKCkgdmlhIHRpbWVrZWVwaW5nX3Jlc3VtZSB3aXRoIG9ubHkgb25lXFxua2VybmVsL3RpbWUvdGljay1jb21tb24uYy00OTUtICogQ1BVIG9ubGluZSBhbmQgaW50ZXJydXB0cyBkaXNhYmxlZC5cXG4tLVxcbmtlcm5lbC90aW1lL3RpY2stY29tbW9uLmM9NTU5PXZvaWQgdGlja191bmZyZWV6ZSh2b2lkKVxcbi0tXFxua2VybmVsL3RpbWUvdGljay1jb21tb24uYy01NjktXFx0XFx0bG9ja19tYXBfYWNxdWlyZV90cnkoXFx1MDAyNnRpY2tfZnJlZXplX21hcCk7XFxua2VybmVsL3RpbWUvdGljay1jb21tb24uYzo1NzA6XFx0XFx0dGltZWtlZXBpbmdfcmVzdW1lKCk7XFxua2VybmVsL3RpbWUvdGljay1jb21tb24uYy01NzEtXFx0XFx0c2NoZWRfY2xvY2tfcmVzdW1lKCk7XFxuLS1cXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jPTIwMDg9c3RhdGljIF9faW5pdCB2b2lkIHRrZF9iYXNpY19zZXR1cChzdHJ1Y3QgdGtfZGF0YSAqdGtkLCBlbnVtIHRpbWVrZWVwZXJfaWRzIHRrX2lkLCBib29sIHZhbGlkKVxcbi0tXFxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYy0yMDE2LS8qXFxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYzoyMDE3OiAqIEZsYWcgcmVmbGVjdGluZyB3aGV0aGVyIHRpbWVrZWVwaW5nX3Jlc3VtZSgpIGhhcyBpbmplY3RlZCBzbGVlcHRpbWUuXFxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYy0yMDE4LSAqXFxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYy0yMDE5LSAqIFRoZSBmbGFnIHN0YXJ0cyBvZiBmYWxzZSBhbmQgaXMgb25seSBzZXQgd2hlbiBhIHN1c3BlbmQgcmVhY2hlc1xcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmM6MjAyMDogKiB0aW1la2VlcGluZ19zdXNwZW5kKCksIHRpbWVrZWVwaW5nX3Jlc3VtZSgpIHNldHMgaXQgdG8gZmFsc2Ugd2hlbiB0aGVcXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jLTIwMjEtICogdGltZWtlZXBlciBjbG9ja3NvdXJjZSBpcyBub3Qgc3RvcHBpbmcgYWNyb3NzIHN1c3BlbmQgYW5kIGhhcyBiZWVuXFxuLS1cXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jLTIwMjUtICpcXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jOjIwMjY6ICogSWYgYSBzdXNwZW5kIGZhaWxzIGJlZm9yZSByZWFjaGluZyB0aW1la2VlcGluZ19yZXN1bWUoKSB0aGVuIHRoZSBmbGFnXFxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYy0yMDI3LSAqIHN0YXlzIGZhbHNlIGFuZCBwcmV2ZW50cyBlcnJvbmVvdXMgc2xlZXB0aW1lIGluamVjdGlvbi5cXG4tLVxcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmM9MjEyNT1ib29sIHRpbWVrZWVwaW5nX3J0Y19za2lwcmVzdW1lKHZvaWQpXFxuLS1cXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jLTIxMzEtICogMSkgY2FuIGJlIGRldGVybWluZWQgd2hldGhlciB0byB1c2Ugb3Igbm90IG9ubHkgd2hlbiBkb2luZ1xcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmM6MjEzMjogKiB0aW1la2VlcGluZ19yZXN1bWUoKSB3aGljaCBpcyBpbnZva2VkIGFmdGVyIHJ0Y19zdXNwZW5kKCksXFxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYy0yMTMzLSAqIHNvIHdlIGNhbid0IHNraXAgcnRjX3N1c3BlbmQoKSBzdXJlbHkgaWYgc3lzdGVtIGhhcyAxKS5cXG4tLVxcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmM9MjE1NT12b2lkIHRpbWVrZWVwaW5nX2luamVjdF9zbGVlcHRpbWU2NChjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqZGVsdGEpXFxuLS1cXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jLTIxNzEtLyoqXFxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYzoyMTcyOiAqIHRpbWVrZWVwaW5nX3Jlc3VtZSAtIFJlc3VtZXMgdGhlIGdlbmVyaWMgdGltZWtlZXBpbmcgc3Vic3lzdGVtLlxcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMtMjE3My0gKi9cXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jOjIxNzQ6dm9pZCB0aW1la2VlcGluZ19yZXN1bWUodm9pZClcXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jLTIxNzUte1xcbi0tXFxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYz0yMjM5PXN0YXRpYyB2b2lkIHRpbWVrZWVwaW5nX3N5c2NvcmVfcmVzdW1lKHZvaWQgKmRhdGEpXFxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYy0yMjQwLXtcXG5rZXJuZWwvdGltZS90aW1la2VlcGluZy5jOjIyNDE6XFx0dGltZWtlZXBpbmdfcmVzdW1lKCk7XFxua2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYy0yMjQyLX1cXG4tLVxcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmg9MTc9ZXh0ZXJuIGludCB0aW1la2VlcGluZ19zdXNwZW5kKHZvaWQpO1xcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmg6MTg6ZXh0ZXJuIHZvaWQgdGltZWtlZXBpbmdfcmVzdW1lKHZvaWQpO1xcbmtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmgtMTktI2lmZGVmIENPTkZJR19HRU5FUklDX1NDSEVEX0NMT0NLXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjExOjMxLjM5OTY4MjU5M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NTg1Nzg0NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEtWTS9TdXNwZW5kIEludGVyYWN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBgdGltZWtlZXBpbmdfcmVzdW1lYCBpcyB0cmlnZ2VyZWQuIEkgc2VlIGl04oCZcyBjYWxsZWQgYnkgYHRpbWVrZWVwaW5nX3N5c2NvcmVfcmVzdW1lYCwgd2hpY2ggaXMgYSBzeXNjb3JlIG9wZXJhdGlvbiwgb3IgZnJvbSBgdGlja191bmZyZWV6ZWAuIFRoYXQgdGVsbHMgbWUsIHdpdGhvdXQgYSBkb3VidCwgdGhhdCB0aGlzIGNvZGUgcGF0aCBpcyBhY3RpdmUgZHVyaW5nIHN1c3BlbmQgYW5kIHJlc3VtZSBvcGVyYXRpb25zLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIGBrdm1jbG9ja19jcHVfYWN0aW9uYC4gSSBzZWUgaXRzIGJlaW5nIGNhbGxlZCBieSBga3ZtX2d1ZXN0X2NwdV9vZmZsaW5lYCBhbmQgYF9fa3ZtX2NwdV9vbmxpbmVgLiBBIGRlZXBlciBkaXZlIHNob3dzIHRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hlZCB0aHJvdWdoIHNldmVyYWwgcG9pbnRzOiBga3ZtX2NwdV9kb3duX3ByZXBhcmVgLCBga3ZtX3N1c3BlbmRgLCBga3ZtX3Jlc3VtZWAsIGBrdm1fcHZfZ3Vlc3RfY3B1X3JlYm9vdGAsIGBrdm1fY3Jhc2hfc2h1dGRvd25gLCBhbmQgYGt2bV9jcHVfb25saW5lYC4gQW5kIHRoZXNlLCBvZiBjb3Vyc2UsIGFyZSBhbGwgdmFsaWQgY2FsbCBwb2ludHMgd2l0aGluIGEgS1ZNIGd1ZXN0IGVudmlyb25tZW50LlxuXG5BbHJpZ2h0LCBzbyB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBuZWNlc3NhcnkgdG8gZXhwb3NlIHRoaXMgaW50ZXJhY3Rpb24/IEknbSB0aGlua2luZzogYENPTkZJR19LVk1fR1VFU1RgLCBgQ09ORklHX1NVU1BFTkRgLCBgQ09ORklHX0hJQkVSTkFUSU9OYCwgYENPTkZJR19IT1RQTFVHX0NQVWAsIGFuZCBgQ09ORklHX1BBUkFWSVJUYC4gSSBzaG91bGQgcHJvYmFibHkgd3JpdGUgdGhvc2UgZG93biB0byBiZSBzdXJlLlxuXG5XYWl0LCBzaG91bGQgYENPTkZJR19LVk1fR1VFU1RgIGJlIGV4cGxpY2l0bHkgZW5hYmxlZCwgb3IgaXMgaXQgYSBkZWZhdWx0PyBJIGtub3cgaXQncyBvZnRlbiBlbmFibGVkIGluIHN5emthbGxlciBjb25maWdzLCBidXQgbGV0J3MgYmUgdGhvcm91Z2guIEkgc2hvdWxkIHNwZWNpZnkgaXQgdG8gYmUgZXhwbGljaXQuIEl0J3MgYSBib29sZWFuLCBidXQgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IGJ5IGdvaW5nIHRvIGBhcmNoL3g4Ni9LY29uZmlnYC4gSSBkb24ndCB3YW50IHRvIG1ha2UgYXNzdW1wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMDM3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjExOjM3LjA1ODI2MzczNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTM3MjM3OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fR1VFU1RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnPTIyPXNvdXJjZSBcXFwiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9taWNyb3dhdHQvS2NvbmZpZ1xcXCJcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWctMjMtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnOjI0OmNvbmZpZyBLVk1fR1VFU1RcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWctMjUtXFx0Ym9vbCBcXFwiS1ZNIEd1ZXN0IHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTgyNj1zb3VyY2UgXFxcImFyY2gveDg2L3hlbi9LY29uZmlnXFxcIlxcbmFyY2gveDg2L0tjb25maWctODI3LVxcbmFyY2gveDg2L0tjb25maWc6ODI4OmNvbmZpZyBLVk1fR1VFU1RcXG5hcmNoL3g4Ni9LY29uZmlnLTgyOS1cXHRib29sIFxcXCJLVk0gR3Vlc3Qgc3VwcG9ydCAoaW5jbHVkaW5nIGt2bWNsb2NrKVxcXCJcXG4tLVxcbnZpcnQva3ZtL0tjb25maWc9MTAzPWNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbi0tXFxudmlydC9rdm0vS2NvbmZpZy0xMDUtXFxudmlydC9rdm0vS2NvbmZpZzoxMDY6Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxcbnZpcnQva3ZtL0tjb25maWctMTA3LSAgICAgICBzZWxlY3QgWEFSUkFZX01VTFRJXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjExOjM4Ljk5NTUwNTcxNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NDcyOTY3MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBTeXprYWxsZXIgVGVzdGluZyoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHRlc3RzIFN5emthbGxlciBydW5zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHllcywgYENPTkZJR19LVk1fR1VFU1RgIHNlZW1zIGxpa2UgdGhlIHByaW1hcnkgY29uZmlnIGhlcmUuIFRoYXQncyBhIG5vLWJyYWluZXIgZ2l2ZW4gU3l6a2FsbGVyJ3MgdHlwaWNhbCBRRU1VL0tWTSBlbnZpcm9ubWVudC5cblxuQnV0LCBJIGFsc28gc2VlIGBDT05GSUdfSU5URUxfVERYX0dVRVNUYCBhbmQgYENPTkZJR19BTURfTUVNX0VOQ1JZUFRgIChzcGVjaWZpY2FsbHkgZm9yIFNFVi1TTlApIG1lbnRpb25lZC4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHRvdWNoaW5nIGB0ZHhfdHNjX2luaXRgIGFuZCBgc25wX3NlY3VyZV90c2NfaW5pdGAuIEhtbSwgYXJlIHRob3NlIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSBzdGFuZGFyZCBTeXprYWxsZXIgY29udGV4dD8gU3l6a2FsbGVyIHVzdWFsbHkgaXNuJ3Qgc2V0IHVwIHdpdGhpbiBURFggb3IgU0VWLVNOUCBlbmNsYXZlcywgc28gSSdtIG5vdCBpbW1lZGlhdGVseSBzZWVpbmcgYSBzdHJvbmcgY2FzZSBmb3IgdGhlbS4gSXQgbWlnaHQgYmUgYSBnb29kLXRvLWhhdmUsIGJ1dCB0aG9zZSBjb25maWdzIHdvdWxkIG5lZWQgc3BlY2lmaWMgaGFyZHdhcmUgYW5kIGh5cGVydmlzb3Igc3VwcG9ydCwgd2hpY2ggSSBkb3VidCB0aGUgc3RhbmRhcmQgU3l6a2FsbGVyIFZNcyB3b3VsZCBoYXZlLiBMZXQncyBmbGFnIHRoYXQgYXMgYSBwb3RlbnRpYWwgZWRnZSBjYXNlLlxuXG5Ib3dldmVyLCB0aGUgS1ZNIGd1ZXN0IGNoYW5nZXPigJRsaWtlIHRoZSBvbmVzIHJlbGF0aW5nIHRvIGBrdm1jbG9ja19jcHVfYWN0aW9uYCwgYGt2bWNsb2NrX2luaXRgLCBhbmQgYGt2bV9nZXRfdHNjX2toemDigJR0aG9zZSBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHJlbGV2YW50LiBUaGUgc2FtZSBnb2VzIGZvciBIeXBlci1WIGd1ZXN0IGFkanVzdG1lbnRzIChgaHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGBodl9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYCkgYW5kIHRob3NlIGZvciBWTXdhcmUuIFN5emthbGxlcidzIHJlbGlhbmNlIG9uIFFFTVUvS1ZNIG1ha2VzIGBDT05GSUdfS1ZNX0dVRVNUYCB0aGUgbW9zdCBjcml0aWNhbCBjb25maWd1cmF0aW9uLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBgQ09ORklHX1BBUkFWSVJUYCBtYWtlcyBzZW5zZSBoZXJlIGFzIHdlbGwsIHNpbmNlIHRoYXQgaGFzIHNvbWUgb3ZlcmxhcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5NzMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6MTE6NDQuNDQyODA1MTU5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ4MjI5NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQVJBVklSVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9LY29uZmlnPTEzMDk9Y29uZmlnIFVBQ0NFU1NfV0lUSF9NRU1DUFlcXG4tLVxcbmFyY2gvYXJtL0tjb25maWctMTMyNC1cXG5hcmNoL2FybS9LY29uZmlnOjEzMjU6Y29uZmlnIFBBUkFWSVJUXFxuYXJjaC9hcm0vS2NvbmZpZy0xMzI2LVxcdGJvb2wgXFxcIkVuYWJsZSBwYXJhdmlydHVhbGl6YXRpb24gY29kZVxcXCJcXG4tLVxcbmFyY2gvYXJtL0tjb25maWctMTMzMi1cXG5hcmNoL2FybS9LY29uZmlnOjEzMzM6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xcbmFyY2gvYXJtL0tjb25maWctMTMzNC1cXHRib29sIFxcXCJQYXJhdmlydHVhbCBzdGVhbCB0aW1lIGFjY291bnRpbmdcXFwiXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWc9MTYxNT1jb25maWcgQ0NfSEFWRV9TSEFET1dfQ0FMTF9TVEFDS1xcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTE2MTctXFxuYXJjaC9hcm02NC9LY29uZmlnOjE2MTg6Y29uZmlnIFBBUkFWSVJUXFxuYXJjaC9hcm02NC9LY29uZmlnLTE2MTktXFx0Ym9vbCBcXFwiRW5hYmxlIHBhcmF2aXJ0dWFsaXphdGlvbiBjb2RlXFxcIlxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTE2MjUtXFxuYXJjaC9hcm02NC9LY29uZmlnOjE2MjY6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNjI3LVxcdGJvb2wgXFxcIlBhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1xcXCJcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9NzQzPXNvdXJjZSBcXFwia2VybmVsL2xpdmVwYXRjaC9LY29uZmlnXFxcIlxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNzQ0LVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6NzQ1OmNvbmZpZyBQQVJBVklSVFxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNzQ2LVxcdGJvb2wgXFxcIkVuYWJsZSBwYXJhdmlydHVhbGl6YXRpb24gY29kZVxcXCJcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNzU0LVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6NzU1OmNvbmZpZyBQQVJBVklSVF9USU1FX0FDQ09VTlRJTkdcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTc1Ni1cXHRib29sIFxcXCJQYXJhdmlydHVhbCBzdGVhbCB0aW1lIGFjY291bnRpbmdcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZz0yPWNvbmZpZyBQUENfUFNFUklFU1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWctMjktXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWc6MzA6Y29uZmlnIFBBUkFWSVJUXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWctMzEtXFx0Ym9vbFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnLTMyLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnOjMzOmNvbmZpZyBQQVJBVklSVF9TUElOTE9DS1NcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZy0zNC1cXHRib29sXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWctMzUtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWc6MzY6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnLTM3LVxcdHNlbGVjdCBQQVJBVklSVFxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnPTExMTQ9Y29uZmlnIENPTVBBVFxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTExMjUtXFxuYXJjaC9yaXNjdi9LY29uZmlnOjExMjY6Y29uZmlnIFBBUkFWSVJUXFxuYXJjaC9yaXNjdi9LY29uZmlnLTExMjctXFx0Ym9vbCBcXFwiRW5hYmxlIHBhcmF2aXJ0dWFsaXphdGlvbiBjb2RlXFxcIlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTExMzQtXFxuYXJjaC9yaXNjdi9LY29uZmlnOjExMzU6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMTM2LVxcdGJvb2wgXFxcIlBhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1xcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NzkzPWlmIEhZUEVSVklTT1JfR1VFU1RcXG5hcmNoL3g4Ni9LY29uZmlnLTc5NC1cXG5hcmNoL3g4Ni9LY29uZmlnOjc5NTpjb25maWcgUEFSQVZJUlRcXG5hcmNoL3g4Ni9LY29uZmlnLTc5Ni1cXHRib29sIFxcXCJFbmFibGUgcGFyYXZpcnR1YWxpemF0aW9uIGNvZGVcXFwiXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTgwNC1cXG5hcmNoL3g4Ni9LY29uZmlnOjgwNTpjb25maWcgUEFSQVZJUlRfWFhMXFxuYXJjaC94ODYvS2NvbmZpZy04MDYtXFx0Ym9vbFxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy04MDktXFxuYXJjaC94ODYvS2NvbmZpZzo4MTA6Y29uZmlnIFBBUkFWSVJUX1NQSU5MT0NLU1xcbmFyY2gveDg2L0tjb25maWctODExLVxcdGJvb2wgXFxcIlBhcmF2aXJ0dWFsaXphdGlvbiBsYXllciBmb3Igc3BpbmxvY2tzXFxcIlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz04NDg9Y29uZmlnIFBWSFxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy04NTMtXFxuYXJjaC94ODYvS2NvbmZpZzo4NTQ6Y29uZmlnIFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xcbmFyY2gveDg2L0tjb25maWctODU1LVxcdGJvb2wgXFxcIlBhcmF2aXJ0dWFsIHN0ZWFsIHRpbWUgYWNjb3VudGluZ1xcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWctODY0LVxcbmFyY2gveDg2L0tjb25maWc6ODY1OmNvbmZpZyBQQVJBVklSVF9DTE9DS1xcbmFyY2gveDg2L0tjb25maWctODY2LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6MTE6NDYuMzkxMDQxNDE0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4ODY0ODQ2NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRTQyBDYWxpYnJhdGlvbiBDaGFuZ2VzIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIGBDT05GSUdfUEFSQVZJUlRgIGxvb2tzIHByb21pc2luZyBhcyBhIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiBgYXJjaC94ODYva2VybmVsL3RzYy5jYC4gU3BlY2lmaWNhbGx5LCBgbmF0aXZlX2NhbGlicmF0ZV90c2NgIGlzIG5vdyBsZXZlcmFnaW5nIGBjcHVpZF9nZXRfdHNjX2luZm9gLCB3aGljaCBpcyBhIGJyYW5kLW5ldyBmdW5jdGlvbi4gSW50ZXJlc3RpbmcuIEFkZGl0aW9uYWxseSwgSSBzZWUgdGhhdCBgdHNjX2Vhcmx5X2luaXRgIGhhcyBiZWVuIG1vZGlmaWVkIGFuZCBgX19wYXJhdmlydF9zZXRfc2NoZWRfY2xvY2tgIGhhcyBiZWVuIGludHJvZHVjZWQsIGFsb25nc2lkZSBzb21lIGNoYW5nZXMgdG8gYGRldGVybWluZV9jcHVfdHNjX2ZyZXF1ZW5jaWVzYC5cblxuVGhlIGtleSBxdWVzdGlvbiBpcywgY2FuIEkgZnV6eiBgY3B1aWRfZ2V0X3RzY19pbmZvYCB3aXRoIHN5emthbGxlcj8gVGhlIGluaXRpYWwgdGhvdWdodCBpcyBubywgYXMgaXQncyBjYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3QuIEhvd2V2ZXIsIHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYHRpbWVrZWVwaW5nX3Jlc3VtZWAgYW5kIGBrdm1jbG9ja19jcHVfYWN0aW9uYCwgd2hpY2ggYXJlIGNsZWFybHkgcmVhY2hhYmxlIGR1cmluZyBzdXNwZW5kL3Jlc3VtZSBjeWNsZXMgYW5kIENQVSBob3RwbHVnIGV2ZW50cy4gVGhhdCBjaGFuZ2VzIHRoaW5nczsgc3l6a2FsbGVyICpjYW4qIGxpa2VseSB0cmlnZ2VyIHRoZXNlIGxhdGVyIHN0YWdlcy4gVGhhdCdzIGEgZGVmaW5pdGUgcGF0aHdheSB0byBleHBsb2l0LlxuXG5UaGVyZWZvcmUsIEkgbmVlZCB0byBpZGVudGlmeSBrZXkgc3ltYm9scyBmb3IgZm9jdXNlZCBmdXp6aW5nLiBMZXQncyBzdGFydCB3aXRoIGEgc29saWQgbGlzdDogYGt2bWNsb2NrX2NwdV9hY3Rpb25gLCBga3ZtX3N1c3BlbmRgLCBga3ZtX3Jlc3VtZWAsIGFuZCBgdGltZWtlZXBpbmdfcmVzdW1lYC4gV2UgY2FuIGFkZCBga3ZtX2NwdV9vbmxpbmVgIGFuZCBga3ZtX2NwdV9kb3duX3ByZXBhcmVgIHRvIHRoZSBsaXN0LiBJJ20gYSBsaXR0bGUgaGVzaXRhbnQgYWJvdXQgaW5jbHVkaW5nIGBfX3BhcmF2aXJ0X3NldF9zY2hlZF9jbG9ja2AgYmVjYXVzZSBpdCdzIG1hcmtlZCBhcyBgX19pbml0YCwgd2hpY2ggbWlnaHQgbWFrZSBpdCBoYXJkZXIgdG8gdGFyZ2V0LiBOb3csIEkgd2FudCB0byBzZWUgaWYgYHRzY19zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYCBhbmQgYHRzY19yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYCBhcmUgcmVhY2hhYmxlLCBhcyB0aGVzZSBhcmUgcG90ZW50aWFsbHkgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjc0OCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMjoxMTo1Mi4yNzc1MjgyMDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzEwMjkzMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vdHNjLmg9MTEyPWV4dGVybiBpbnQgbm90c2Nfc2V0dXAoY2hhciAqKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90c2MuaDoxMTM6ZXh0ZXJuIHZvaWQgdHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdHNjLmgtMTE0LWV4dGVybiB2b2lkIHRzY19yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL3RzYy5jPTk2MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdHNjX2lzX3NhdmVfcmVzdG9yZV9uZWVkZWQodm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC90c2MuYy05NjgtXFxuYXJjaC94ODYva2VybmVsL3RzYy5jOjk2OTp2b2lkIHRzY19zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXFxuYXJjaC94ODYva2VybmVsL3RzYy5jLTk3MC17XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYz0xNDk9c3RydWN0IHg4Nl9wbGF0Zm9ybV9vcHMgeDg2X3BsYXRmb3JtIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jLTE1NS1cXHQuZ2V0X25taV9yZWFzb25cXHRcXHRcXHQ9IGRlZmF1bHRfZ2V0X25taV9yZWFzb24sXFxuYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmM6MTU2OlxcdC5zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlXFx0XFx0PSB0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSxcXG5hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYy0xNTctXFx0LnJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVcXHQ9IHRzY19yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMjoxMTo1NC44NDg1NjI0NjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ3ODA4NjY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVzZSBvZiBgc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAgYW5kIGByZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYCoqXG5cbk9rYXksIHNvIEkgc2VlIHRoZXNlIGZ1bmN0aW9ucywgYHg4Nl9wbGF0Zm9ybS5zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYCBhbmQgYHJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVgLCBhcmUgZGVmaW5pdGVseSBiZWluZyB1c2VkLiBUaGUgY29udGV4dCB0ZWxscyBtZSB0aGV5IGFyZSBsaW5rZWQgdG8gc3VzcGVuZCBhbmQgcmVzdW1lIG9wZXJhdGlvbnMsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEkgc3VzcGVjdGVkIHRoZXknZCBiZSB0aWVkIHRvIHBvd2VyIG1hbmFnZW1lbnQgaW4gc29tZSB3YXkuXG5cbk5vdywgSSByZWFsbHkgbmVlZCB0byBkcmlsbCBkb3duIGFuZCB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBjYWxsaW5nIGNvbnRleHQuIE15IG5leHQgc3RlcCBpcyB0byBwaW5wb2ludCB0aGUgZXhhY3QgbG9jYXRpb25zIHdoZXJlIGB4ODZfcGxhdGZvcm0uc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAgaXMgaW52b2tlZC4gVGhpcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBpbnNpZ2h0cyBpbnRvIGhvdyB0aGUgc2NoZWR1bGVyIGNsb2NrIHN0YXRlIGlzIGJlaW5nIG1hbmFnZWQgZHVyaW5nIHN5c3RlbSB0cmFuc2l0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGtleSB0byBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHksIGVzcGVjaWFsbHkgb24geDg2IHBsYXRmb3Jtcy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZXhlY3V0aW9uIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzODY5LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6MTE6NTkuMzI2NjUyNDE4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzcxMzkxMTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNhdmVfc2NoZWRfY2xvY2tfc3RhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vdHNjLmg9MTEyPWV4dGVybiBpbnQgbm90c2Nfc2V0dXAoY2hhciAqKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90c2MuaDoxMTM6ZXh0ZXJuIHZvaWQgdHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdHNjLmgtMTE0LWV4dGVybiB2b2lkIHRzY19yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaD0yODk9c3RydWN0IHg4Nl9oeXBlcl9ydW50aW1lIHtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgtMzAzLSAqIEBnZXRfbm1pX3JlYXNvbjpcXHRcXHRnZXQgdGhlIHJlYXNvbiBhbiBOTUkgd2FzIHJlY2VpdmVkXFxuYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaDozMDQ6ICogQHNhdmVfc2NoZWRfY2xvY2tfc3RhdGU6XFx0c2F2ZSBzdGF0ZSBmb3Igc2NoZWRfY2xvY2soKSBvbiBzdXNwZW5kXFxuYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaC0zMDUtICogQHJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGU6XFx0cmVzdG9yZSBzdGF0ZSBmb3Igc2NoZWRfY2xvY2soKSBvbiByZXN1bWVcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0Lmg9MzIwPXN0cnVjdCB4ODZfcGxhdGZvcm1fb3BzIHtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgtMzI2LVxcdHVuc2lnbmVkIGNoYXIgKCpnZXRfbm1pX3JlYXNvbikodm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaDozMjc6XFx0dm9pZCAoKnNhdmVfc2NoZWRfY2xvY2tfc3RhdGUpKHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgtMzI4LVxcdHZvaWQgKCpyZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlKSh2b2lkKTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jPTEzMj1zdGF0aWMgbm9pbnN0ciB1NjQga3ZtX3NjaGVkX2Nsb2NrX3JlYWQodm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTEzNi1cXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzoxMzc6c3RhdGljIHZvaWQga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy0xMzgte1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM9MzU0PXN0YXRpYyBfX2luaXQgdm9pZCBrdm1fc2NoZWRfY2xvY2tfaW5pdChib29sIHN0YWJsZSlcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTM1OS1cXHRpZiAoX19wYXJhdmlydF9zZXRfc2NoZWRfY2xvY2soa3ZtX3NjaGVkX2Nsb2NrX3JlYWQsIHN0YWJsZSxcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzozNjA6XFx0XFx0XFx0XFx0ICAgICAgIGt2bV9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlLFxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTM2MS1cXHRcXHRcXHRcXHQgICAgICAga3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGUpKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL3RzYy5jPTI4Mz1pbnQgX19pbml0IF9fcGFyYXZpcnRfc2V0X3NjaGVkX2Nsb2NrKHU2NCAoKmZ1bmMpKHZvaWQpLCBib29sIHN0YWJsZSxcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC90c2MuYy0yOTgtXFx0c3RhdGljX2NhbGxfdXBkYXRlKHB2X3NjaGVkX2Nsb2NrLCBmdW5jKTtcXG5hcmNoL3g4Ni9rZXJuZWwvdHNjLmM6Mjk5OlxcdHg4Nl9wbGF0Zm9ybS5zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlID0gc2F2ZTtcXG5hcmNoL3g4Ni9rZXJuZWwvdHNjLmMtMzAwLVxcdHg4Nl9wbGF0Zm9ybS5yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlID0gcmVzdG9yZTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC90c2MuYz05NjE9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHRzY19pc19zYXZlX3Jlc3RvcmVfbmVlZGVkKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvdHNjLmMtOTY4LVxcbmFyY2gveDg2L2tlcm5lbC90c2MuYzo5Njk6dm9pZCB0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxcbmFyY2gveDg2L2tlcm5lbC90c2MuYy05NzAte1xcbi0tXFxuYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmM9MTQ5PXN0cnVjdCB4ODZfcGxhdGZvcm1fb3BzIHg4Nl9wbGF0Zm9ybSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYy0xNTUtXFx0LmdldF9ubWlfcmVhc29uXFx0XFx0XFx0PSBkZWZhdWx0X2dldF9ubWlfcmVhc29uLFxcbmFyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jOjE1NjpcXHQuc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZVxcdFxcdD0gdHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUsXFxuYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmMtMTU3LVxcdC5yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlXFx0PSB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSxcXG4tLVxcbmFyY2gveDg2L3Bvd2VyL2NwdS5jPTEzNT12b2lkIHNhdmVfcHJvY2Vzc29yX3N0YXRlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9wb3dlci9jcHUuYy0xMzctXFx0X19zYXZlX3Byb2Nlc3Nvcl9zdGF0ZShcXHUwMDI2c2F2ZWRfY29udGV4dCk7XFxuYXJjaC94ODYvcG93ZXIvY3B1LmM6MTM4OlxcdHg4Nl9wbGF0Zm9ybS5zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKCk7XFxuYXJjaC94ODYvcG93ZXIvY3B1LmMtMTM5LX1cXG4tLVxcbmRyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmM9NTQ2PXN0YXRpYyB1NjQgaHZfcmVmX2NvdW50ZXJfYXRfc3VzcGVuZDtcXG4tLVxcbmRyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmMtNTUzLSAqL1xcbmRyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmM6NTU0OnN0YXRpYyB2b2lkIGh2X3NhdmVfc2NoZWRfY2xvY2tfc3RhdGUodm9pZClcXG5kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jLTU1NS17XFxuLS1cXG5kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jPTU3MD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgaHZfc2V0dXBfc2NoZWRfY2xvY2sodm9pZCAqc2NoZWRfY2xvY2spXFxuLS1cXG5kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jLTU3Mi1cXHQvKiBXZSdyZSBvbiB4ODYveDY0ICphbmQqIHVzaW5nIFBWIG9wcyAqL1xcbmRyaXZlcnMvY2xvY2tzb3VyY2UvaHlwZXJ2X3RpbWVyLmM6NTczOlxcdHBhcmF2aXJ0X3NldF9zY2hlZF9jbG9jayhzY2hlZF9jbG9jaywgaHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSxcXG5kcml2ZXJzL2Nsb2Nrc291cmNlL2h5cGVydl90aW1lci5jLTU3NC1cXHRcXHRcXHRcXHQgaHZfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjEyOjAxLjY5ODA0OTM3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NDgzNTI4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBLVk0gQ2xvY2sgSXNzdWVzIER1cmluZyBTdXNwZW5kL1Jlc3VtZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gdGhpcyB4ODYgc3VzcGVuZC9yZXN1bWUgcGF0aC4gTXkgdGhvdWdodCBwcm9jZXNzIGlzIGNlbnRlcmVkIG9uIHdoZXJlIHBvdGVudGlhbCBLVk0gY2xvY2sgaXNzdWVzIG1pZ2h0IGFyaXNlLiBJIHNlZSB0aGF0IGB4ODZfcGxhdGZvcm0uc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSgpYCBpcyBjYWxsZWQgZnJvbSBgc2F2ZV9wcm9jZXNzb3Jfc3RhdGUoKWAgd2l0aGluIGBhcmNoL3g4Ni9wb3dlci9jcHUuY2AuIEdpdmVuIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIGBzYXZlX3Byb2Nlc3Nvcl9zdGF0ZWAsIGFuZCB0aGF0IGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlIHg4NiBwb3dlciBtYW5hZ2VtZW50LCB0aGF0IGNhbGwgKmlzKiBkZWZpbml0ZWx5IHBhcnQgb2YgdGhlIHN1c3BlbmQgcHJvY2Vzcy5cblxuTm93LCBJJ20gZ29pbmcgYmFjayBvdmVyIGBrdm1jbG9ja19jcHVfYWN0aW9uYC4gUmlnaHQsIGl0J3MgY2FsbGVkIGJ5IGBrdm1fZ3Vlc3RfY3B1X29mZmxpbmVgIGFuZCBgX19rdm1fY3B1X29ubGluZWAuIExvb2tpbmcgYXQgdGhvc2UgZnVuY3Rpb25zLCB0aGV5IGFyZSBjYWxsZWQgZnJvbSBga3ZtX2NwdV9kb3duX3ByZXBhcmVgLCBga3ZtX3N1c3BlbmRgLCBga3ZtX3Jlc3VtZWAsIGBrdm1fcHZfZ3Vlc3RfY3B1X3JlYm9vdGAsIGBrdm1fY3Jhc2hfc2h1dGRvd25gLCBhbmQgYGt2bV9jcHVfb25saW5lYC4gU28sIHRoZSBwYXRoICppcyogcmVhY2hhYmxlIGR1cmluZyB0aGlzIHByb2Nlc3MsIG1ha2luZyB0aGlzIGFuIGludGVyZXN0aW5nIHBvaW50IHRvIGFuYWx5emUuXG5cbkknbSBhbHNvIGxvb2tpbmcgYXQgYHRpbWVrZWVwaW5nX3Jlc3VtZWAuIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBmcm9tIGB0aW1la2VlcGluZ19zeXNjb3JlX3Jlc3VtZWAgYW5kIGB0aWNrX3VuZnJlZXplYC4gQm90aCBhcmUgcHJldHR5IHN0YW5kYXJkIHBhcnRzIG9mIGEgcmVzdW1lIGN5Y2xlLCBzbyB0aGUgcGF0aCB0aHJvdWdoIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSByZWFjaGFibGUuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGBrdm1jbG9ja19zdXNwZW5kYCBhbmQgYGt2bWNsb2NrX3Jlc3VtZWAgZnVuY3Rpb25zLCB0byBjaGVjayBvbiB0aGUgZGV0YWlscyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU1OTIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6MTI6MDYuNTQ2NDA1MDUzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA3MTQ5Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bWNsb2NrX3N1c3BlbmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM9NTQ9RVhQT1JUX1BFUl9DUFVfU1lNQk9MX0dQTChodl9jbG9ja19wZXJfY3B1KTtcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy01NS1cXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzo1NjpzdGF0aWMgYm9vbCBrdm1jbG9ja19zdXNwZW5kZWQ7XFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtNTctXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYz02Mz1zdGF0aWMgdm9pZCBrdm1fZ2V0X3dhbGxjbG9jayhzdHJ1Y3QgdGltZXNwZWM2NCAqbm93KVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTY0LXtcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzo2NTpcXHRXQVJOX09OX09OQ0Uoa3ZtY2xvY2tfc3VzcGVuZGVkKTtcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy02Ni1cXHR3cm1zcnEobXNyX2t2bV93YWxsX2Nsb2NrLCBzbG93X3ZpcnRfdG9fcGh5cyhcXHUwMDI2d2FsbF9jbG9jaykpO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM9MTM3PXN0YXRpYyB2b2lkIGt2bV9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy0xNDUtXFx0ICovXFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM6MTQ2OlxcdGt2bWNsb2NrX3N1c3BlbmRlZCA9IHRydWU7XFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtMTQ3LVxcdGt2bWNsb2NrX2Rpc2FibGUoKTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jPTE1Nz1zdGF0aWMgdm9pZCBrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZSh2b2lkKVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTE1OC17XFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM6MTU5OlxcdGt2bWNsb2NrX3N1c3BlbmRlZCA9IGZhbHNlO1xcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTE2MC1cXHRrdm1fcmVnaXN0ZXJfY2xvY2soXFxcInByaW1hcnkgY3B1LCBzY2hlZF9jbG9jayByZXN1bWVcXFwiKTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTE2Mi1cXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzoxNjM6c3RhdGljIHZvaWQga3ZtY2xvY2tfc3VzcGVuZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTE2NC17XFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM6MTY1OlxcdGt2bWNsb2NrX3N1c3BlbmRlZCA9IHRydWU7XFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtMTY2LVxcdGt2bWNsb2NrX2Rpc2FibGUoKTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jPTE2OT1zdGF0aWMgdm9pZCBrdm1jbG9ja19yZXN1bWUoc3RydWN0IGNsb2Nrc291cmNlICpjcylcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy0xNzAte1xcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jOjE3MTpcXHRrdm1jbG9ja19zdXNwZW5kZWQgPSBmYWxzZTtcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy0xNzItXFx0a3ZtX3JlZ2lzdGVyX2Nsb2NrKFxcXCJwcmltYXJ5IGNwdSwgY2xvY2tzb3VyY2UgcmVzdW1lXFxcIik7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYz0yNTU9c3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBrdm1fY2xvY2sgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy0yNjMtXFx0LmVuYWJsZVxcdFxcdD0ga3ZtX2NzX2VuYWJsZSxcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzoyNjQ6XFx0LnN1c3BlbmRcXHQ9IGt2bWNsb2NrX3N1c3BlbmQsXFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtMjY1LVxcdC5yZXN1bWVcXHRcXHQ9IGt2bWNsb2NrX3Jlc3VtZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6MTI6MDkuMzUzNTYwNjA4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTk2NTE1NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEtWTSBDbG9jayBTb3VyY2UgU3VzcGVuZC9SZXN1bWUgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgaXQncyBjbGVhciB0aGF0IGBrdm1jbG9ja19zdXNwZW5kYCBhbmQgYGt2bWNsb2NrX3Jlc3VtZWAgYXJlIGluZGVlZCBjYWxsYmFja3MgZm9yIHRoZSBjbG9ja3NvdXJjZSBzdXNwZW5kL3Jlc3VtZSBwcm9jZXNzLCBtZWFuaW5nIHRoZXkncmUgZXhlY3V0ZWQgZHVyaW5nIHRoZXNlIGNyaXRpY2FsIHN5c3RlbSB0cmFuc2l0aW9ucy4gVGhhdCdzIGdvb2Q7IGl0IG1lYW5zIHdlIGNhbiBwb3RlbnRpYWxseSBmdXp6IHRoZW0uXG5cblRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBhcmU6IGBrdm1jbG9ja19jcHVfYWN0aW9uYCwgYGt2bWNsb2NrX3N1c3BlbmRgLCBga3ZtY2xvY2tfcmVzdW1lYCwgYHRpbWVrZWVwaW5nX3Jlc3VtZWAsIGB0c2Nfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGB0c2NfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGBrdm1fc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGFuZCBga3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVgLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVgIGFuZCBga3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVgIGFyZSBzdGF0aWMuIEFoLCB5ZXMsIHRoZXkgYXJlLCBmb3VuZCBpbiBgYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmNgLiBTaW5jZSB0aGV5J3JlIHJlYWNoYWJsZSBhbmQgc3RhdGljLCBTeXprYWxsZXIgY2FuIGRlZmluaXRlbHkgdGFyZ2V0IHRoZW0gZWZmZWN0aXZlbHkuXG5cbk5vdywgbGV0J3Mgc2VlIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gV2UgbmVlZCBgQ09ORklHX0tWTV9HVUVTVGAsIGBDT05GSUdfU1VTUEVORGAsIGBDT05GSUdfSElCRVJOQVRJT05gLCBgQ09ORklHX0hPVFBMVUdfQ1BVYCwgYW5kIGBDT05GSUdfUEFSQVZJUlRgLlxuXG5gQ09ORklHX1NVU1BFTkRgLCBgQ09ORklHX0hJQkVSTkFUSU9OYCwgYW5kIGBDT05GSUdfSE9UUExVR19DUFVgIGFyZSBwcmV0dHkgc3RhbmRhcmQgY29uZmlndXJhdGlvbnMsIHRob3VnaC4gQmFzZWQgb24gdGhlIGluc3RydWN0aW9ucywgSSBzaG91bGQgcHJvYmFibHkgb25seSBsaXN0IGNvbmZpZ3MgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIG1vZGlmaWVkIGNvZGUuXG5cblNvLCBsZXQncyBjaGVjayB3aGF0J3MgYWN0dWFsbHkgYmVlbiBtb2RpZmllZC4gYHRpbWVrZWVwaW5nX3Jlc3VtZWAgaXMgbW9kaWZpZWQ7IGl0IG5vdyBjYWxscyBgcmVhZF9wZXJzaXN0ZW50X2Nsb2NrNjRgIGFmdGVyIGBjbG9ja2V2ZW50c19yZXN1bWVgIGFuZCBgY2xvY2tzb3VyY2VfcmVzdW1lYC4gR29vZC5cblxuYGt2bWNsb2NrX2NwdV9hY3Rpb25gIGhhcyBiZWVuIGFkZGVkLCBhbmQgaXQgaGFuZGxlcyBjcnVjaWFsIHN0YXRlczogYEtWTV9HVUVTVF9CU1BfU1VTUEVORGAsIGBLVk1fR1VFU1RfQlNQX1JFU1VNRWAsIGBLVk1fR1VFU1RfQVBfT05MSU5FYCwgYEtWTV9HVUVTVF9BUF9PRkZMSU5FYCwgYW5kIGBLVk1fR1VFU1RfU0hVVERPV05gLlxuXG5ZZXAsIGBrdm1jbG9ja19zdXNwZW5kYCBhbmQgYGt2bWNsb2NrX3Jlc3VtZWAgYXJlIGRlZmluaXRlbHkgbmV3IGFkZGl0aW9ucyBhcyB3ZWxsLlxuXG5BbmQgZmluYWxseSwgYHRzY19zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYCBhbmQgYHRzY19yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYCBhcmUgbW9kaWZpZWQgdG8gdXNlIGB0c2NfaXNfc2F2ZV9yZXN0b3JlX25lZWRlZCgpYC5cblxuVGhlIGBrdm1fc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAgYW5kIGBrdm1fcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZWAgZnVuY3Rpb25zIGFyZSBtb2RpZmllZCB0byBzZXQgYGt2bWNsb2NrX3N1c3BlbmRlZGAgYW5kIGNhbGwgYGt2bWNsb2NrX2Rpc2FibGVgIC8gYGt2bV9yZWdpc3Rlcl9jbG9ja2AuXG5cbkdpdmVuIGFsbCBvZiB0aGlzLCB0aGUgcGF0Y2ggZGVmaW5pdGVseSBzZWVtcyBmdW5jdGlvbmFsIGFuZCBpcyBhIHN0cm9uZyBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cblRoZXJlZm9yZSwgdGhlIGZvY3VzIHN5bWJvbHMgYXJlOlxuYGt2bWNsb2NrX2NwdV9hY3Rpb25gXG5ga3ZtY2xvY2tfc3VzcGVuZGBcbmBrdm1jbG9ja19yZXN1bWVgXG5gdGltZWtlZXBpbmdfcmVzdW1lYFxuYHRzY19zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYFxuYHRzY19yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYFxuYGt2bV9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYFxuYGt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYFxuXG5BbmQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIChzcGVjaWZpYyB0byB0aGUgbW9kaWZpZWQgY29kZSkgYXJlOlxuYEtWTV9HVUVTVGBcbmBQQVJBVklSVGBcblxuSSBzaG91bGQgZG91YmxlLWNoZWNrIGFib3V0IGBDT05GSUdfSFlQRVJWYCBvciBgQ09ORklHX0hZUEVSVl9USU1FUmAsIGp1c3QgaW4gY2FzZSwgZ2l2ZW4gdGhlIG1lbnRpb24gb2YgSHlwZXItVi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcwMTgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6MTI6MTkuNTUwMDc3OTEzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTg3NjgyMjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIWVBFUlZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz03NzE9Y29uZmlnIFNDSEVEX09NSVRfRlJBTUVfUE9JTlRFUlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy03ODItXFxuYXJjaC94ODYvS2NvbmZpZzo3ODM6bWVudWNvbmZpZyBIWVBFUlZJU09SX0dVRVNUXFxuYXJjaC94ODYvS2NvbmZpZy03ODQtXFx0Ym9vbCBcXFwiTGludXggZ3Vlc3Qgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaHYvS2NvbmZpZz0zPW1lbnUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIGd1ZXN0IHN1cHBvcnRcXFwiXFxuZHJpdmVycy9odi9LY29uZmlnLTQtXFxuZHJpdmVycy9odi9LY29uZmlnOjU6Y29uZmlnIEhZUEVSVlxcbmRyaXZlcnMvaHYvS2NvbmZpZy02LVxcdGJvb2wgXFxcIk1pY3Jvc29mdCBIeXBlci1WIGNvcmUgaHlwZXJ2aXNvciBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9odi9LY29uZmlnLTE2LVxcbmRyaXZlcnMvaHYvS2NvbmZpZzoxNzpjb25maWcgSFlQRVJWX1ZUTF9NT0RFXFxuZHJpdmVycy9odi9LY29uZmlnLTE4LVxcdGJvb2wgXFxcIkVuYWJsZSBMaW51eCB0byBib290IGluIFZUTCBjb250ZXh0XFxcIlxcbi0tXFxuZHJpdmVycy9odi9LY29uZmlnLTQyLVxcbmRyaXZlcnMvaHYvS2NvbmZpZzo0Mzpjb25maWcgSFlQRVJWX1RJTUVSXFxuZHJpdmVycy9odi9LY29uZmlnLTQ0LVxcdGRlZl9ib29sIEhZUEVSViBcXHUwMDI2XFx1MDAyNiBYODZcXG5kcml2ZXJzL2h2L0tjb25maWctNDUtXFxuZHJpdmVycy9odi9LY29uZmlnOjQ2OmNvbmZpZyBIWVBFUlZfVVRJTFNcXG5kcml2ZXJzL2h2L0tjb25maWctNDctXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIFV0aWxpdGllcyBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2h2L0tjb25maWctNTItXFxuZHJpdmVycy9odi9LY29uZmlnOjUzOmNvbmZpZyBIWVBFUlZfQkFMTE9PTlxcbmRyaXZlcnMvaHYvS2NvbmZpZy01NC1cXHR0cmlzdGF0ZSBcXFwiTWljcm9zb2Z0IEh5cGVyLVYgQmFsbG9vbiBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2h2L0tjb25maWctNTktXFxuZHJpdmVycy9odi9LY29uZmlnOjYwOmNvbmZpZyBIWVBFUlZfVk1CVVNcXG5kcml2ZXJzL2h2L0tjb25maWctNjEtXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIFZNQnVzIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0yNDQ9Y29uZmlnIFNFUklPX09MUENfQVBTUFxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI1My1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MjU0OmNvbmZpZyBIWVBFUlZfS0VZQk9BUkRcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjU1LVxcdHRyaXN0YXRlIFxcXCJNaWNyb3NvZnQgU3ludGhldGljIEtleWJvYXJkIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWc6Mjpjb25maWcgSFlQRVJWX05FVFxcbmRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIHZpcnR1YWwgbmV0d29yayBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZz01Nzc9Y29uZmlnIFhFTl9TQ1NJX0ZST05URU5EXFxuLS1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZy01ODYtXFxuZHJpdmVycy9zY3NpL0tjb25maWc6NTg3OmNvbmZpZyBIWVBFUlZfU1RPUkFHRVxcbmRyaXZlcnMvc2NzaS9LY29uZmlnLTU4OC1cXHR0cmlzdGF0ZSBcXFwiTWljcm9zb2Z0IEh5cGVyLVYgdmlydHVhbCBzdG9yYWdlIGRyaXZlclxcXCJcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnPTM1NDI9Y29uZmlnIE1FTVRFU1RcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTM1NTUtXFxubGliL0tjb25maWcuZGVidWc6MzU1Njpjb25maWcgSFlQRVJWX1RFU1RJTkdcXG5saWIvS2NvbmZpZy5kZWJ1Zy0zNTU3LVxcdGJvb2wgXFxcIk1pY3Jvc29mdCBIeXBlci1WIGRyaXZlciB0ZXN0aW5nXFxcIlxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnPTY2PWNvbmZpZyBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXFxuLS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNzItXFxubmV0L3Ztd192c29jay9LY29uZmlnOjczOmNvbmZpZyBIWVBFUlZfVlNPQ0tFVFNcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNzQtXFx0dHJpc3RhdGUgXFxcIkh5cGVyLVYgdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjEyOjIyLjEzNzc2NTAzMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjkwMjg3MzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkh5cGVyLVYgQ29uZmlndXJhdGlvbiBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBIeXBlci1WIGNoYW5nZXMsIGFuZCBpdCdzIGNsZWFyIHRoYXQgYEhZUEVSVmAgYW5kIGBIWVBFUlZfVElNRVJgIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHRvIGJlIGNvbmNlcm5lZCB3aXRoLiBJJ2xsIGRlZmluaXRlbHkgYWRkIGBIWVBFUlZgIHRvIHRoZSByZWxldmFudCBjb25maWcgZmlsZXMgcmlnaHQgYXdheS5cblxuTm93LCB3aGF0IGFib3V0IFZNd2FyZSBzdXBwb3J0PyBMZXQgbWUgdGhpbmsuLi4gYENPTkZJR19WTVdBUkVfQkFMTE9PTmAgc2VlbXMgZmFtaWxpYXIsIGJ1dCB0aGF0J3MgcHJvYmFibHkgbm90IHRoZSBtYWluIGRyaXZlciB0aGVzZSBkYXlzLiBBaCwgcmlnaHQsIGBDT05GSUdfSFlQRVJWSVNPUl9HVUVTVGAgc2hvdWxkIGNvdmVyIHRoYXQsIGdlbmVyYWxseS4gV2FpdCBhIG1pbnV0ZeKApiB3YXNu4oCZdCBgQ09ORklHX0hZUEVSVklTT1JfR1VFU1RgIHNwZWNpZmljIHRvIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIHdpdGhpbiB0aGUgbWVudWNvbmZpZz8gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgdG8gYmUgY2VydGFpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGEgbW9yZSBzcGVjaWZpYyBjb25maWcgZm9yIFZNd2FyZSBndWVzdC4gQmVzdCB0byBiZSB0aG9yb3VnaCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB2aXJ0dWFsaXphdGlvbiBsYXllcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NTYzLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjEyOjI1LjgyODA1NDg0MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwMDgyMTI1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVk1XQVJFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWlzYy9LY29uZmlnPTM5MT1jb25maWcgRFMxNjgyXFxuLS1cXG5kcml2ZXJzL21pc2MvS2NvbmZpZy00MDAtXFxuZHJpdmVycy9taXNjL0tjb25maWc6NDAxOmNvbmZpZyBWTVdBUkVfQkFMTE9PTlxcbmRyaXZlcnMvbWlzYy9LY29uZmlnLTQwMi1cXHR0cmlzdGF0ZSBcXFwiVk13YXJlIEJhbGxvb24gRHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9taXNjL3Ztd192bWNpL0tjb25maWctNS1cXG5kcml2ZXJzL21pc2Mvdm13X3ZtY2kvS2NvbmZpZzo2OmNvbmZpZyBWTVdBUkVfVk1DSVxcbmRyaXZlcnMvbWlzYy92bXdfdm1jaS9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlZNd2FyZSBWTUNJIERyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvc2NzaS9LY29uZmlnPTU1Mz1jb25maWcgU0NTSV9NWVJTXFxuLS1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZy01NjgtXFxuZHJpdmVycy9zY3NpL0tjb25maWc6NTY5OmNvbmZpZyBWTVdBUkVfUFZTQ1NJXFxuZHJpdmVycy9zY3NpL0tjb25maWctNTcwLVxcdHRyaXN0YXRlIFxcXCJWTXdhcmUgUFZTQ1NJIGRyaXZlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnPTI5PWNvbmZpZyBWU09DS0VUU19MT09QQkFDS1xcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTQwLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzo0MTpjb25maWcgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNDItXFx0dHJpc3RhdGUgXFxcIlZNd2FyZSBWTUNJIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMjoxMjoyOC40Mjg4Nzk4NDhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3OTc4MjYwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipWTXdhcmUgR3Vlc3QgQ29yZSBTdXBwb3J0IOKAkyBBIFF1aWNrIE1lbnRhbCBTY2FuKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhpcyBmcm9tIGEga2VybmVsIHBlcnNwZWN0aXZlLCBJIGRvbid0IHJlY2FsbCBhICpkZWRpY2F0ZWQqIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHNwZWNpZmljYWxseSBsYWJlbGVkIFwiVk13YXJlIGd1ZXN0IGNvcmUuXCIgSXQgc2VlbXMgbGlrZSB0aGUgYXJjaGl0ZWN0dXJlIGxpa2VseSBoYW5kbGVzIHRoaXMgaW4gb25lIG9mIHR3byB3YXlzLiBJdCdzIHByb2JhYmx5IGVpdGhlciBoYW5kbGVkIGJ5IHRoZSBtb3JlIGdlbmVyaWMgYENPTkZJR19IWVBFUlZJU09SX0dVRVNUYCBzZXR0aW5nLCBvciwgbW9yZSBsaWtlbHksIGl0J3MganVzdCBiYWtlZCBkaXJlY3RseSBpbnRvIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIHN1cHBvcnQgZHVlIHRvIHRoZSBwcmV2YWxlbmNlIG9mIFZNd2FyZSBvbiB0aGF0IHBsYXRmb3JtLiBJdCdzIG9mdGVuIHRoYXQgdGhlc2UgdGhpbmdzIGFyZSBhc3N1bWVkIHByZXNlbnQgdW5sZXNzIHNwZWNpZmljYWxseSBleGNsdWRlZC5cblxuTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhYm91dCBBQ1JOPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaG93IHRoYXQgaHlwZXJ2aXNvciBoYW5kbGVzIGd1ZXN0IGNvcmUgc3VwcG9ydCBhbmQgaWYgdGhlcmUncyBhbnkgcG90ZW50aWFsIG92ZXJsYXAgb3IgY29uZmxpY3Qgd2l0aCB0aGUgVk13YXJlIGVudmlyb25tZW50LiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRob3NlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMjEyLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6MTI6MzIuMzA4NjY1NjQxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTMxNzA2MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBQ1JOXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9ODY4PWNvbmZpZyBKQUlMSE9VU0VfR1VFU1RcXG4tLVxcbmFyY2gveDg2L0tjb25maWctODc2LVxcbmFyY2gveDg2L0tjb25maWc6ODc3OmNvbmZpZyBBQ1JOX0dVRVNUXFxuYXJjaC94ODYvS2NvbmZpZy04NzgtXFx0Ym9vbCBcXFwiQUNSTiBHdWVzdCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy92aXJ0L2Fjcm4vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL3ZpcnQvYWNybi9LY29uZmlnOjI6Y29uZmlnIEFDUk5fSFNNXFxuZHJpdmVycy92aXJ0L2Fjcm4vS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJBQ1JOIEh5cGVydmlzb3IgU2VydmljZSBNb2R1bGVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjEyOjM0Ljg0MDM3NjgzMloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjg2ODI1ODM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyB0aGUgVGFyZ2V0IExpc3QgZm9yIEtWTSBDbG9jayBGdXp6aW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlZmluZSB0aGUgZnV6emluZyB0YXJnZXRzIGZvciB0aGlzIEtWTSBjbG9jay1yZWxhdGVkIHBhdGNoIHNlcmllcy4gIEkndmUgYWxyZWFkeSBpZGVudGlmaWVkIHRoYXQgYEFDUk5fR1VFU1RgIGFuZCBgSkFJTEhPVVNFX0dVRVNUYCBhcmUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZSwgc28gSSdsbCBpbmNsdWRlIHRoZW0gYWxvbmcgd2l0aCB0aGUgbW9yZSBvYnZpb3VzIG9uZXM6IGBLVk1fR1VFU1RgLCBgUEFSQVZJUlRgLCBhbmQgYEhZUEVSVmAuXG5cbk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIHJlZmFjdG9yaW5nIHRoYXQgYXJlIGJvdGggKmludGVyZXN0aW5nKiBhbmQgKmZ1enphYmxlKi4gSSBzdGFydGVkIHdpdGggYW4gaW5pdGlhbCBsaXN0IG9mIHN5bWJvbHMgcmVsYXRlZCB0byBjbG9jayBzdGF0ZSBtYW5hZ2VtZW50OiBga3ZtY2xvY2tfY3B1X2FjdGlvbmAsIGBrdm1jbG9ja19zdXNwZW5kYCwgYGt2bWNsb2NrX3Jlc3VtZWAsIGB0aW1la2VlcGluZ19yZXN1bWVgLCBgdHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVgLCBgdHNjX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVgLCBgaHZfc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZWAsIGFuZCBgaHZfcmVzdG9yZV9zY2hlZF9jbG9ja19zdGF0ZWAuIEkgYWxzbyBhZGRlZCBga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVgLCBga3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVgLCBga3ZtX2d1ZXN0X2NwdV9vZmZsaW5lYCBhbmQgYF9fa3ZtX2NwdV9vbmxpbmVgIHRvIHRoZSBsaXN0LiBJIGFsc28gY29uc2lkZXJlZCwgYW5kIGRpc2NhcmRlZCwgZnVuY3Rpb25zIGxpa2UgYGFwaWNfc2V0X3RpbWVyX3BlcmlvZF9raHpgLCBgYXBpY19zZXRfdGltZXJfcGVyaW9kX2h6YCwgYGNwdWlkX2dldF90c2NfaW5mb2AsIGBkZXRlcm1pbmVfY3B1X3RzY19mcmVxdWVuY2llc2AsIGFuZCBgdHNjX2Vhcmx5X2luaXRgLCBiZWNhdXNlIHRoZXkgYXJlIGNhbGxlZCBlYXJseSBpbiB0aGUgYm9vdCBwcm9jZXNzIGFuZCBhcmUgdGh1cyBub3QgZWFzaWx5IGZ1enphYmxlIHBvc3QtYm9vdC5cblxuQWZ0ZXIgY2hlY2tpbmcgdGhhdCBga3ZtX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVgIGlzIHRydWx5IHN0YXRpYywgYW5kIGNoZWNraW5nIHRoYXQgdGhlIG90aGVyIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IGdsb2JhbCwgdGhpcyBsaXN0IHNlZW1zIHNvbGlkLiBUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gVFNDIGFuZCBBUElDIGZyZXF1ZW5jeSBjYWxpYnJhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gd2l0aGluIHZpcnR1YWxpemVkIHg4NiBlbnZpcm9ubWVudHMsIGFuZCB0aGUgbW9kaWZpY2F0aW9ucyB0byBzY2hlZF9jbG9jayBzdGF0ZSBoYW5kbGluZyBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgYW5kIENQVSBob3RwbHVnIHdpdGhpbiBLVk0gZ3Vlc3RzIGFwcGVhciB0byBiZSB0aGUgbW9zdCBwcm9taXNpbmcgYXJlYXMgZm9yIGZ1enppbmcuXG5cblRvIHByZXZlbnQgdGhlIGxpc3QgZnJvbSBiZWNvbWluZyBvdmVybHkgbG9uZywgSSB3aWxsIG5vdyBzdHJlYW1saW5lIGl0IGRvd24gdG8gYSBtb3JlIG1hbmFnZWFibGUgc2V0IG9mIGZ1bmN0aW9uczogYGt2bWNsb2NrX2NwdV9hY3Rpb25gLCBgdGltZWtlZXBpbmdfcmVzdW1lYCwgYHRzY19zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYCwgYHRzY19yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYCwgYGt2bV9zYXZlX3NjaGVkX2Nsb2NrX3N0YXRlYCwgYGt2bV9yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlYCwgYGh2X3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVgLCBhbmQgYGh2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVgLiBFaWdodCBzeW1ib2xzIHNob3VsZCBiZSBhIHJlYXNvbmFibGUgbnVtYmVyIGZvciBmb2N1c2VkIHRlc3RpbmcuIEknbSBub3cgcmVhZHkgdG8gdXNlIGBzZXQtcmVzdWx0c2AgdG8gaW1wbGVtZW50IHRoaXMgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNjM3LCJPdXRwdXRUb2tlbnMiOjI1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6MTI6NDcuNzA4NjM3NDMxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxNjAxMzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fR1VFU1RcIixcbiAgICBcIlBBUkFWSVJUXCIsXG4gICAgXCJIWVBFUlZcIixcbiAgICBcIkFDUk5fR1VFU1RcIixcbiAgICBcIkpBSUxIT1VTRV9HVUVTVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bWNsb2NrX2NwdV9hY3Rpb25cIixcbiAgICBcInRpbWVrZWVwaW5nX3Jlc3VtZVwiLFxuICAgIFwidHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVcIixcbiAgICBcInRzY19yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlXCIsXG4gICAgXCJrdm1fc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZVwiLFxuICAgIFwia3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVcIixcbiAgICBcImh2X3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVcIixcbiAgICBcImh2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIFRTQyBhbmQgQVBJQyBmcmVxdWVuY3kgY2FsaWJyYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIGZvciB4ODYgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChLVk0sIEh5cGVyLVYsIFZNd2FyZSwgQUNSTiwgSmFpbGhvdXNlLCBURFgsIFNFVi1TTlApLiBJdCBtb2RpZmllcyBob3cgc2NoZWRfY2xvY2sgc3RhdGUgaXMgc2F2ZWQgYW5kIHJlc3RvcmVkIGR1cmluZyBzdXNwZW5kL3Jlc3VtZSBhbmQgQ1BVIGhvdHBsdWcsIHBhcnRpY3VsYXJseSBmb3Iga3ZtY2xvY2sgYW5kIEh5cGVyLVYgY2xvY2suIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBpbiBhIEtWTSBndWVzdCAod2hpY2ggc3l6a2FsbGVyIHVzZXMpIGR1cmluZyBzdXNwZW5kL3Jlc3VtZSBhbmQgQ1BVIGhvdHBsdWcgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fR1VFU1RcIixcbiAgICBcIlBBUkFWSVJUXCIsXG4gICAgXCJIWVBFUlZcIixcbiAgICBcIkFDUk5fR1VFU1RcIixcbiAgICBcIkpBSUxIT1VTRV9HVUVTVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bWNsb2NrX2NwdV9hY3Rpb25cIixcbiAgICBcInRpbWVrZWVwaW5nX3Jlc3VtZVwiLFxuICAgIFwidHNjX3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVcIixcbiAgICBcInRzY19yZXN0b3JlX3NjaGVkX2Nsb2NrX3N0YXRlXCIsXG4gICAgXCJrdm1fc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZVwiLFxuICAgIFwia3ZtX3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVcIixcbiAgICBcImh2X3NhdmVfc2NoZWRfY2xvY2tfc3RhdGVcIixcbiAgICBcImh2X3Jlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIFRTQyBhbmQgQVBJQyBmcmVxdWVuY3kgY2FsaWJyYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIGZvciB4ODYgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChLVk0sIEh5cGVyLVYsIFZNd2FyZSwgQUNSTiwgSmFpbGhvdXNlLCBURFgsIFNFVi1TTlApLiBJdCBtb2RpZmllcyBob3cgc2NoZWRfY2xvY2sgc3RhdGUgaXMgc2F2ZWQgYW5kIHJlc3RvcmVkIGR1cmluZyBzdXNwZW5kL3Jlc3VtZSBhbmQgQ1BVIGhvdHBsdWcsIHBhcnRpY3VsYXJseSBmb3Iga3ZtY2xvY2sgYW5kIEh5cGVyLVYgY2xvY2suIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBpbiBhIEtWTSBndWVzdCAod2hpY2ggc3l6a2FsbGVyIHVzZXMpIGR1cmluZyBzdXNwZW5kL3Jlc3VtZSBhbmQgQ1BVIGhvdHBsdWcgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2n9g4[1] Phase: Succeeded StartedAt: 2026-07-02 02:12:59 +0000 UTC FinishedAt: 2026-07-02 02:12:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n9g4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-02 02:12:59 +0000 UTC FinishedAt: 2026-07-02 02:12:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n9g4[2] Phase: Succeeded StartedAt: 2026-07-02 02:12:59 +0000 UTC FinishedAt: 2026-07-02 06:17:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-02 02:12:59 +0000 UTC FinishedAt: 2026-07-02 06:17:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-02 02:12:59 +0000 UTC FinishedAt: 2026-07-02 02:13:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-02 02:12:59 +0000 UTC FinishedAt: 2026-07-02 02:13:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.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-workflow2n9g4/series-workflow2n9g4-convert-artifact-1425412229/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-02 02:13:09 +0000 UTC FinishedAt: 2026-07-02 02:39:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-02 02:13:09 +0000 UTC FinishedAt: 2026-07-02 02:39:56 +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:*3b607caf-0f31-487a-a79f-375403e99396,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-workflow2n9g4/series-workflow2n9g4-convert-artifact-1425412229/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": "63279f61-7dcc-4f25-a758-fa1ebc740d3c", "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-workflow2n9g4/series-workflow2n9g4-build-action-1169476651/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-02 02:13:09 +0000 UTC FinishedAt: 2026-07-02 02:38:25 +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:*3b607caf-0f31-487a-a79f-375403e99396,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-workflow2n9g4/series-workflow2n9g4-convert-artifact-1425412229/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": "63279f61-7dcc-4f25-a758-fa1ebc740d3c", "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-workflow2n9g4/series-workflow2n9g4-build-action-1169476651/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-02 02:39:56 +0000 UTC FinishedAt: 2026-07-02 02:39:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-02 02:39:56 +0000 UTC FinishedAt: 2026-07-02 02:39:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-02 02:39:56 +0000 UTC FinishedAt: 2026-07-02 02:40:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-02 02:39:56 +0000 UTC FinishedAt: 2026-07-02 02:40:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.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-workflow2n9g4/series-workflow2n9g4-convert-artifact-3679348576/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-02 02:40:28 +0000 UTC FinishedAt: 2026-07-02 02:42:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-02 02:40:28 +0000 UTC FinishedAt: 2026-07-02 02:42:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*63279f61-7dcc-4f25-a758-fa1ebc740d3c,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-workflow2n9g4/series-workflow2n9g4-build-action-1169476651/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-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-02 02:42:29 +0000 UTC FinishedAt: 2026-07-02 02:42:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-02 02:42:29 +0000 UTC FinishedAt: 2026-07-02 02:42:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-02 02:42:29 +0000 UTC FinishedAt: 2026-07-02 03:12:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-02 02:42:29 +0000 UTC FinishedAt: 2026-07-02 03:12:47 +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:*3b607caf-0f31-487a-a79f-375403e99396,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-workflow2n9g4/series-workflow2n9g4-convert-artifact-3679348576/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": "f4d78063-9092-4eae-ba3c-efa5da3c984b", "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-workflow2n9g4/series-workflow2n9g4-build-action-901829660/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-02 02:42:29 +0000 UTC FinishedAt: 2026-07-02 03:11:27 +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:*3b607caf-0f31-487a-a79f-375403e99396,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-workflow2n9g4/series-workflow2n9g4-convert-artifact-3679348576/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": "f4d78063-9092-4eae-ba3c-efa5da3c984b", "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-workflow2n9g4/series-workflow2n9g4-build-action-901829660/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-02 03:12:47 +0000 UTC FinishedAt: 2026-07-02 03:12:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-02 03:12:47 +0000 UTC FinishedAt: 2026-07-02 03:12:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-02 03:12:47 +0000 UTC FinishedAt: 2026-07-02 03:14:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-02 03:12:47 +0000 UTC FinishedAt: 2026-07-02 03:14:42 +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:*f4d78063-9092-4eae-ba3c-efa5da3c984b,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-workflow2n9g4/series-workflow2n9g4-build-action-901829660/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-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-02 03:14:54 +0000 UTC FinishedAt: 2026-07-02 06:17:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-02 03:14:54 +0000 UTC FinishedAt: 2026-07-02 06:17:32 +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":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"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:*63279f61-7dcc-4f25-a758-fa1ebc740d3c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f4d78063-9092-4eae-ba3c-efa5da3c984b,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-workflow2n9g4/series-workflow2n9g4-build-action-1169476651/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-workflow2n9g4/series-workflow2n9g4-build-action-901829660/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-02 03:14:54 +0000 UTC FinishedAt: 2026-07-02 03:15:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-02 03:14:54 +0000 UTC FinishedAt: 2026-07-02 03:15:01 +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":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"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-workflow2n9g4/series-workflow2n9g4-convert-artifact-1691655097/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-02 03:14:54 +0000 UTC FinishedAt: 2026-07-02 03:14:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-02 03:14:54 +0000 UTC FinishedAt: 2026-07-02 03:14:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-02 03:14:54 +0000 UTC FinishedAt: 2026-07-02 03:14:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-02 03:15:06 +0000 UTC FinishedAt: 2026-07-02 06:17:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2n9g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmclock_cpu_action","timekeeping_resume","tsc_save_sched_clock_state","tsc_restore_sched_clock_state","kvm_save_sched_clock_state","kvm_restore_sched_clock_state","hv_save_sched_clock_state","hv_restore_sched_clock_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_GUEST","PARAVIRT","HYPERV","ACRN_GUEST","JAILHOUSE_GUEST"],"series_id":"616f926c-ffdc-4dc8-9316-70a26d035eb2","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-02 03:15:06 +0000 UTC FinishedAt: 2026-07-02 06:17:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*63279f61-7dcc-4f25-a758-fa1ebc740d3c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f4d78063-9092-4eae-ba3c-efa5da3c984b,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-workflow2n9g4/series-workflow2n9g4-build-action-1169476651/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-workflow2n9g4/series-workflow2n9g4-build-action-901829660/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-workflow2n9g4/series-workflow2n9g4-convert-artifact-1691655097/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,}