Name: series-workflowb4t9l Phase: Succeeded StartedAt: 2026-08-31 10:19:42 +0000 UTC FinishedAt: 2026-08-31 14:01:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4t9l[0] Phase: Succeeded StartedAt: 2026-08-31 10:19:42 +0000 UTC FinishedAt: 2026-08-31 10:24:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4t9l[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 10:19:42 +0000 UTC FinishedAt: 2026-08-31 10:24:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "X86_64" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "X86_64" ], "series_id": "080bc1a0-dc5b-4719-8de9-81fe9a659536" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_tdp_mmu_zap_leafs", "tdp_iter_next_post_order", "kvm_tdp_mmu_unmap_gfn_range", "kvm_zap_gfn_range" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtYODZfNjQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fdGRwX21tdV96YXBfbGVhZnMmIzM0OywKICAgICYjMzQ7dGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyJiMzNDssCiAgICAmIzM0O2t2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZSYjMzQ7LAogICAgJiMzNDtrdm1femFwX2dmbl9yYW5nZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSYjMzk7cyBURFAgTU1VIGl0ZXJhdGlvbiBhbmQgcGFnZSB0YWJsZSB6YXBwaW5nIGxvZ2ljIHRvIHphcCBjb21wbGV0ZWQgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyBkdXJpbmcgbGVhZiB6YXBwaW5nLiBJdCBpbnRyb2R1Y2VzIGEgYHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudGAgc3RydWN0dXJlLCB3aGljaCBpcyB6ZXJvLWluaXRpYWxpemVkIG9uIHRoZSBzdGFjayAoYGV2ZW50ID0ge31gKSBhbmQgd2hvc2UgZmllbGRzIGFyZSBleHBsaWNpdGx5IHBvcHVsYXRlZCBpbiBgdHJ5X3N0ZXBfdXAoKWAgd2hlbmV2ZXIgYGV2ZW50LVx1MDAzZXZhbGlkYCBpcyBzZXQgdG8gdHJ1ZS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIGFuZCBubyBjb250cm9sLWZsb3cgZGVjaXNpb25zIGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHN0YXRlLiBQb3RlbnRpYWwgaXNzdWVzIHdpdGggdGhpcyBjaGFuZ2UgKGUuZy4gVExCIGZsdXNoaW5nIGNvcnJlY3RuZXNzLCBSQ1UgbGlmZWN5Y2xlLCBvciBTUFRFIG1vZGlmaWNhdGlvbiByYWNlcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgcG9zdC1vcmRlciB0cmF2ZXJzYWwgc3VwcG9ydCB0byB0aGUgS1ZNIHg4NiBURFAgTU1VIGl0ZXJhdG9yIGFuZCB1cGRhdGVzIHRkcF9tbXVfemFwX2xlYWZzKCkgdG8gYXV0b21hdGljYWxseSB6YXAgY29tcGxldGVkIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgKGFuZCBoYW5kbGUgdGhlIGNvcnJlc3BvbmRpbmcgcmVtb3RlIFRMQiBmbHVzaCB3aGVuIHNoYWRvdyBwYWdlcyBhcmUgZnJlZWQpLiBUaGlzIGFsdGVycyBjb3JlIE1NVSBwYWdlLXRhYmxlIHphcHBpbmcgYmVoYXZpb3IgaW4gS1ZNIHg4NiBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY2NGIxOTdjMzNiM2RkNjMyOGEwNThkMjY1NzI3MmMzZWI1ZTk1ZWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDoyMDo1MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmNcbmluZGV4IDllMTdiZmE4MDkwMTEuLmQ5YmU0Mjk4NDEwZDAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1xuQEAgLTEzMiw3ICYjNDM7MTMyLDggQEAgc3RhdGljIGJvb2wgdHJ5X3N0ZXBfc2lkZShzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4gICogY2FuIGNvbnRpbnVlIGZyb20gdGhlIG5leHQgZW50cnkgaW4gdGhlIHBhcmVudCBwYWdlIHRhYmxlLiBSZXR1cm5zIHRydWUgb24gYVxuICAqIHN1Y2Nlc3NmdWwgc3RlcCB1cCwgZmFsc2UgaWYgYWxyZWFkeSBpbiB0aGUgcm9vdCBwYWdlLlxuICAqL1xuLXN0YXRpYyBib29sIHRyeV9zdGVwX3VwKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbiYjNDM7c3RhdGljIGJvb2wgdHJ5X3N0ZXBfdXAoc3RydWN0IHRkcF9pdGVyICppdGVyLFxuJiM0MztcdFx0XHRzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgKmV2ZW50KVxuIHtcbiBcdGlmIChpdGVyLVx1MDAzZWxldmVsID09IGl0ZXItXHUwMDNlcm9vdF9sZXZlbClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTE0MSw2ICYjNDM7MTQyLDE0IEBAIHN0YXRpYyBib29sIHRyeV9zdGVwX3VwKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbiBcdGl0ZXItXHUwMDNlZ2ZuID0gZ2ZuX3JvdW5kX2Zvcl9sZXZlbChpdGVyLVx1MDAzZWdmbiwgaXRlci1cdTAwM2VsZXZlbCk7XG4gXHR0ZHBfaXRlcl9yZWZyZXNoX3NwdGVwKGl0ZXIpO1xuIFxuJiM0MztcdGlmIChldmVudCBcdTAwMjZcdTAwMjYgIWV2ZW50LVx1MDAzZXZhbGlkKSB7XG4mIzQzO1x0XHRldmVudC1cdTAwM2VzcHRlcCA9IGl0ZXItXHUwMDNlc3B0ZXA7XG4mIzQzO1x0XHRldmVudC1cdTAwM2VvbGRfc3B0ZSA9IGl0ZXItXHUwMDNlb2xkX3NwdGU7XG4mIzQzO1x0XHRldmVudC1cdTAwM2VnZm4gPSBpdGVyLVx1MDAzZWdmbjtcbiYjNDM7XHRcdGV2ZW50LVx1MDAzZWxldmVsID0gaXRlci1cdTAwM2VsZXZlbDtcbiYjNDM7XHRcdGV2ZW50LVx1MDAzZXZhbGlkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuQEAgLTE2MCw4ICYjNDM7MTY5LDEyIEBAIHN0YXRpYyBib29sIHRyeV9zdGVwX3VwKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbiAgKiAgICBTUFRFIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gdmlzaXRlZCwgYW5kIHNvIHRoZSBpdGVyYXRvciBtdXN0IGFsc28gc3RlcFxuICAqICAgIHRvIHRoZSBzaWRlIGFnYWluLlxuICAqL1xuLXZvaWQgdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4mIzQzO3N0YXRpYyB2b2lkIF9fdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgKmV2ZW50KVxuIHtcbiYjNDM7XHRpZiAoZXZlbnQpXG4mIzQzO1x0XHRldmVudC1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuJiM0MztcbiBcdGlmIChpdGVyLVx1MDAzZXlpZWxkZWQpIHtcbiBcdFx0dGRwX2l0ZXJfcmVzdGFydChpdGVyKTtcbiBcdFx0cmV0dXJuO1xuQEAgLTE3Myw3ICYjNDM7MTg2LDE3IEBAIHZvaWQgdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4gXHRkbyB7XG4gXHRcdGlmICh0cnlfc3RlcF9zaWRlKGl0ZXIpKVxuIFx0XHRcdHJldHVybjtcbi1cdH0gd2hpbGUgKHRyeV9zdGVwX3VwKGl0ZXIpKTtcbiYjNDM7XHR9IHdoaWxlICh0cnlfc3RlcF91cChpdGVyLCBldmVudCkpO1xuIFx0aXRlci1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuIH1cbiBcbiYjNDM7dm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbiYjNDM7e1xuJiM0MztcdF9fdGRwX2l0ZXJfbmV4dChpdGVyLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZHBfaXRlcl9uZXh0X3Bvc3Rfb3JkZXIoc3RydWN0IHRkcF9pdGVyICppdGVyLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgKmV2ZW50KVxuJiM0Mzt7XG4mIzQzO1x0X190ZHBfaXRlcl9uZXh0KGl0ZXIsIGV2ZW50KTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaCBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaFxuaW5kZXggZjg5OGQ4ZDBkOTNjMi4uYjdlMjYwNWZiZjllOSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oXG5AQCAtMTIzLDYgJiM0MzsxMjMsMTQgQEAgc3RydWN0IHRkcF9pdGVyIHtcbiBcdGJvb2wgeWllbGRlZDtcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQge1xuJiM0MztcdHRkcF9wdGVwX3Qgc3B0ZXA7XG4mIzQzO1x0dTY0IG9sZF9zcHRlO1xuJiM0MztcdGdmbl90IGdmbjtcbiYjNDM7XHRpbnQgbGV2ZWw7XG4mIzQzO1x0Ym9vbCB2YWxpZDtcbiYjNDM7fTtcbiYjNDM7XG4gLypcbiAgKiBJdGVyYXRlcyBvdmVyIGV2ZXJ5IFNQVEUgbWFwcGluZyB0aGUgR0ZOIHJhbmdlIFtzdGFydCwgZW5kKSBpbiBhXG4gICogcHJlb3JkZXIgdHJhdmVyc2FsLlxuQEAgLTE0NSw2ICYjNDM7MTUzLDggQEAgdGRwX3B0ZXBfdCBzcHRlX3RvX2NoaWxkX3B0KHU2NCBwdGUsIGludCBsZXZlbCk7XG4gdm9pZCB0ZHBfaXRlcl9zdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXG4gXHRcdCAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cyk7XG4gdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcik7XG4mIzQzO3ZvaWQgdGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyKHN0cnVjdCB0ZHBfaXRlciAqaXRlcixcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50ICpldmVudCk7XG4gdm9pZCB0ZHBfaXRlcl9yZXN0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcik7XG4gXG4gI2VuZGlmIC8qIF9fS1ZNX1g4Nl9NTVVfVERQX0lURVJfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcbmluZGV4IDQ0ZGFkMTA2ZmFkMTkuLjgyNDQ2YzQ3MzdmNzkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcbkBAIC05MjMsNiAmIzQzOzkyMywzOCBAQCBib29sIGt2bV90ZHBfbW11X3phcF9wb3NzaWJsZV9ueF9odWdlX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9jb21wbGV0ZWRfZW1wdHlfbGVhZl9wdChzdHJ1Y3Qga3ZtICprdm0sXG4mIzQzO1x0XHRcdFx0XHRcdHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQsXG4mIzQzO1x0XHRcdFx0XHRcdGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXG4mIzQzO1x0XHRcdFx0XHRcdHRkcF9wdGVwX3QgemFwcGVkX2xlYWZfcHQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX21tdV9wYWdlICpjaGlsZF9zcDtcbiYjNDM7XG4mIzQzO1x0aWYgKGV2ZW50LVx1MDAzZWxldmVsICE9IFBHX0xFVkVMXzJNIHx8XG4mIzQzO1x0ICAgICFpc19zaGFkb3dfcHJlc2VudF9wdGUoZXZlbnQtXHUwMDNlb2xkX3NwdGUpIHx8XG4mIzQzO1x0ICAgIGlzX2xhc3Rfc3B0ZShldmVudC1cdTAwM2VvbGRfc3B0ZSwgZXZlbnQtXHUwMDNlbGV2ZWwpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAoZXZlbnQtXHUwMDNlZ2ZuIFx1MDAzYyBzdGFydCB8fFxuJiM0MztcdCAgICBldmVudC1cdTAwM2VnZm4gJiM0MzsgS1ZNX1BBR0VTX1BFUl9IUEFHRShldmVudC1cdTAwM2VsZXZlbCkgXHUwMDNlIGVuZClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0LyogTGVhdmUgcHJvZHVjdGl2ZSBsZWFmIHRhYmxlcyBpbiBwbGFjZSB0byBhdm9pZCByZWZhdWx0IGNodXJuLiAqL1xuJiM0MztcdGlmICh6YXBwZWRfbGVhZl9wdCA9PSBldmVudC1cdTAwM2VzcHRlcClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0Y2hpbGRfc3AgPSBzcHRlX3RvX2NoaWxkX3NwKGV2ZW50LVx1MDAzZW9sZF9zcHRlKTtcbiYjNDM7XHRpZiAoaXNfbWlycm9yX3NwKGNoaWxkX3NwKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNoaWxkX3NwLVx1MDAzZXJvbGUubGV2ZWwgIT0gUEdfTEVWRUxfNEspXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHRkcF9tbXVfc2V0X3NwdGUoa3ZtLCBldmVudC1cdTAwM2VzcHRlcCwgZXZlbnQtXHUwMDNlb2xkX3NwdGUsXG4mIzQzO1x0XHRcdCBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSwgZXZlbnQtXHUwMDNlZ2ZuLCBldmVudC1cdTAwM2VsZXZlbCk7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBJZiBjYW5feWllbGQgaXMgdHJ1ZSwgd2lsbCByZWxlYXNlIHRoZSBNTVUgbG9jayBhbmQgcmVzY2hlZHVsZSBpZiB0aGVcbiAgKiBzY2hlZHVsZXIgbmVlZHMgdGhlIENQVSBvciB0aGVyZSBpcyBjb250ZW50aW9uIG9uIHRoZSBNTVUgbG9jay4gSWYgdGhpc1xuQEAgLTkzMyw3ICYjNDM7OTY1LDEwIEBAIGJvb2wga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXG4gc3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxuIFx0XHRcdCAgICAgIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgY2FuX3lpZWxkLCBib29sIGZsdXNoKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgZXZlbnQgPSB7fTtcbiBcdHN0cnVjdCB0ZHBfaXRlciBpdGVyO1xuJiM0MztcdHRkcF9wdGVwX3QgemFwcGVkX2xlYWZfcHQgPSBOVUxMO1xuJiM0MztcdGJvb2wgcmVtb3ZlZF9zcCA9IGZhbHNlO1xuIFxuIFx0ZW5kID0gbWluKGVuZCwgdGRwX21tdV9tYXhfZ2ZuX2V4Y2x1c2l2ZSgpKTtcbiBcbkBAIC05NDEsMzMgJiM0Mzs5NzYsNTYgQEAgc3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFxuLVx0Zm9yX2VhY2hfdGRwX3B0ZV9taW5fbGV2ZWwoaXRlciwga3ZtLCByb290LCBQR19MRVZFTF80Sywgc3RhcnQsIGVuZCkge1xuJiM0MztcdHRkcF9pdGVyX3N0YXJ0KFx1MDAyNml0ZXIsIHJvb3QsIFBHX0xFVkVMXzRLLCBzdGFydCxcbiYjNDM7XHRcdCAgICAgICBrdm1fZ2ZuX3Jvb3RfYml0cyhrdm0sIHJvb3QpKTtcbiYjNDM7XHR3aGlsZSAoaXRlci52YWxpZCBcdTAwMjZcdTAwMjYgaXRlci5nZm4gXHUwMDNjIGVuZCkge1xuIFx0XHRpZiAoY2FuX3lpZWxkIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgdGRwX21tdV9pdGVyX2NvbmRfcmVzY2hlZChrdm0sIFx1MDAyNml0ZXIsIGZsdXNoLCBmYWxzZSkpIHtcbiBcdFx0XHRmbHVzaCA9IGZhbHNlO1xuJiM0MztcdFx0XHR0ZHBfaXRlcl9uZXh0KFx1MDAyNml0ZXIpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4tXHRcdGlmICghaXNfc2hhZG93X3ByZXNlbnRfcHRlKGl0ZXIub2xkX3NwdGUpIHx8XG4tXHRcdCAgICAhaXNfbGFzdF9zcHRlKGl0ZXIub2xkX3NwdGUsIGl0ZXIubGV2ZWwpKVxuLVx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLm9sZF9zcHRlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpIHtcbiYjNDM7XHRcdFx0aWYgKGl0ZXIubGV2ZWwgPT0gUEdfTEVWRUxfNEspIHtcbiYjNDM7XHRcdFx0XHRzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDtcbiBcbi1cdFx0dGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgXHUwMDI2aXRlciwgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUpO1xuJiM0MztcdFx0XHRcdHNwID0gc3B0ZXBfdG9fc3AocmN1X2RlcmVmZXJlbmNlKGl0ZXIuc3B0ZXApKTtcbiYjNDM7XHRcdFx0XHR6YXBwZWRfbGVhZl9wdCA9IHNwLVx1MDAzZXB0ZXA7XG4mIzQzO1x0XHRcdH1cbiBcbi1cdFx0Lypcbi1cdFx0ICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2VzbiYjMzk7dCByZXF1aXJlIGEgVExCIGZsdXNoLFxuLVx0XHQgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuXG4tXHRcdCAqL1xuLVx0XHRpZiAoIXJvb3QtXHUwMDNlcm9sZS5pbnZhbGlkKVxuLVx0XHRcdGZsdXNoID0gdHJ1ZTtcbi1cdH1cbiYjNDM7XHRcdFx0dGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgXHUwMDI2aXRlcixcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFNIQURPV19OT05QUkVTRU5UX1ZBTFVFKTtcbiBcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBaYXBwaW5ncyBTUFRFcyBpbiBpbnZhbGlkIHJvb3RzIGRvZXNuJiMzOTt0IHJlcXVpcmUgYSBUTEIgZmx1c2gsXG4mIzQzO1x0XHRcdCAqIHNlZSBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoKSBmb3IgZGV0YWlscy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmICghcm9vdC1cdTAwM2Vyb2xlLmludmFsaWQpXG4mIzQzO1x0XHRcdFx0Zmx1c2ggPSB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHRkcF9pdGVyX25leHRfcG9zdF9vcmRlcihcdTAwMjZpdGVyLCBcdTAwMjZldmVudCk7XG4mIzQzO1x0XHRpZiAoZXZlbnQudmFsaWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgdGRwX21tdV96YXBfY29tcGxldGVkX2VtcHR5X2xlYWZfcHQoa3ZtLCBcdTAwMjZldmVudCwgc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ZW5kLCB6YXBwZWRfbGVhZl9wdCkpIHtcbiYjNDM7XHRcdFx0aWYgKCFyb290LVx1MDAzZXJvbGUuaW52YWxpZClcbiYjNDM7XHRcdFx0XHRmbHVzaCA9IHRydWU7XG4mIzQzO1x0XHRcdHJlbW92ZWRfc3AgPSB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcbiBcdC8qXG4tXHQgKiBCZWNhdXNlIHRoaXMgZmxvdyB6YXBzIF9vbmx5XyBsZWFmIFNQVEVzLCB0aGUgY2FsbGVyIGRvZXNuJiMzOTt0IG5lZWRcbi1cdCAqIHRvIHByb3ZpZGUgUkNVIHByb3RlY3Rpb24gYXMgbm8gJiMzOTtzdHJ1Y3Qga3ZtX21tdV9wYWdlJiMzOTsgd2lsbCBiZSBmcmVlZC5cbiYjNDM7XHQgKiBJZiBhbnkgc2hhZG93IHBhZ2VzIHdlcmUgcmVtb3ZlZCwgc2VydmljZSBwZW5kaW5nIFRMQiBmbHVzaGVzIGJlZm9yZVxuJiM0MztcdCAqIGRyb3BwaW5nIFJDVSBwcm90ZWN0aW9uLCBhcyByZXF1aXJlZCBieSB0aGUgVERQIE1NVSBpdGVyYXRvci5cbiBcdCAqL1xuJiM0MztcdGlmIChyZW1vdmVkX3NwIFx1MDAyNlx1MDAyNiBmbHVzaCkge1xuJiM0MztcdFx0a3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7XG4mIzQzO1x0XHRmbHVzaCA9IGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRyZXR1cm4gZmx1c2g7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtYODZfNjQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fdGRwX21tdV96YXBfbGVhZnMmIzM0OywKICAgICYjMzQ7dGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyJiMzNDssCiAgICAmIzM0O2t2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZSYjMzQ7LAogICAgJiMzNDtrdm1femFwX2dmbl9yYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHBvc3Qtb3JkZXIgdHJhdmVyc2FsIHN1cHBvcnQgdG8gdGhlIEtWTSB4ODYgVERQIE1NVSBpdGVyYXRvciBhbmQgdXBkYXRlcyB0ZHBfbW11X3phcF9sZWFmcygpIHRvIGF1dG9tYXRpY2FsbHkgemFwIGNvbXBsZXRlZCBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzIChhbmQgaGFuZGxlIHRoZSBjb3JyZXNwb25kaW5nIHJlbW90ZSBUTEIgZmx1c2ggd2hlbiBzaGFkb3cgcGFnZXMgYXJlIGZyZWVkKS4gVGhpcyBhbHRlcnMgY29yZSBNTVUgcGFnZS10YWJsZSB6YXBwaW5nIGJlaGF2aW9yIGluIEtWTSB4ODYgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2NjRiMTk3YzMzYjNkZDYzMjhhMDU4ZDI2NTcyNzJjM2ViNWU5NWVjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMTA6MjA6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMKaW5kZXggOWUxN2JmYTgwOTAxMS4uZDliZTQyOTg0MTBkMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYwpAQCAtMTMyLDcgJiM0MzsxMzIsOCBAQCBzdGF0aWMgYm9vbCB0cnlfc3RlcF9zaWRlKHN0cnVjdCB0ZHBfaXRlciAqaXRlcikKICAqIGNhbiBjb250aW51ZSBmcm9tIHRoZSBuZXh0IGVudHJ5IGluIHRoZSBwYXJlbnQgcGFnZSB0YWJsZS4gUmV0dXJucyB0cnVlIG9uIGEKICAqIHN1Y2Nlc3NmdWwgc3RlcCB1cCwgZmFsc2UgaWYgYWxyZWFkeSBpbiB0aGUgcm9vdCBwYWdlLgogICovCi1zdGF0aWMgYm9vbCB0cnlfc3RlcF91cChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpCiYjNDM7c3RhdGljIGJvb2wgdHJ5X3N0ZXBfdXAoc3RydWN0IHRkcF9pdGVyICppdGVyLAomIzQzOwkJCXN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQpCiB7CiAJaWYgKGl0ZXItJmd0O2xldmVsID09IGl0ZXItJmd0O3Jvb3RfbGV2ZWwpCiAJCXJldHVybiBmYWxzZTsKQEAgLTE0MSw2ICYjNDM7MTQyLDE0IEBAIHN0YXRpYyBib29sIHRyeV9zdGVwX3VwKHN0cnVjdCB0ZHBfaXRlciAqaXRlcikKIAlpdGVyLSZndDtnZm4gPSBnZm5fcm91bmRfZm9yX2xldmVsKGl0ZXItJmd0O2dmbiwgaXRlci0mZ3Q7bGV2ZWwpOwogCXRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoaXRlcik7CiAKJiM0MzsJaWYgKGV2ZW50ICZhbXA7JmFtcDsgIWV2ZW50LSZndDt2YWxpZCkgewomIzQzOwkJZXZlbnQtJmd0O3NwdGVwID0gaXRlci0mZ3Q7c3B0ZXA7CiYjNDM7CQlldmVudC0mZ3Q7b2xkX3NwdGUgPSBpdGVyLSZndDtvbGRfc3B0ZTsKJiM0MzsJCWV2ZW50LSZndDtnZm4gPSBpdGVyLSZndDtnZm47CiYjNDM7CQlldmVudC0mZ3Q7bGV2ZWwgPSBpdGVyLSZndDtsZXZlbDsKJiM0MzsJCWV2ZW50LSZndDt2YWxpZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTYwLDggJiM0MzsxNjksMTIgQEAgc3RhdGljIGJvb2wgdHJ5X3N0ZXBfdXAoc3RydWN0IHRkcF9pdGVyICppdGVyKQogICogICAgU1BURSB3aWxsIGhhdmUgYWxyZWFkeSBiZWVuIHZpc2l0ZWQsIGFuZCBzbyB0aGUgaXRlcmF0b3IgbXVzdCBhbHNvIHN0ZXAKICAqICAgIHRvIHRoZSBzaWRlIGFnYWluLgogICovCi12b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKQomIzQzO3N0YXRpYyB2b2lkIF9fdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsCiYjNDM7CQkJICAgIHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQpCiB7CiYjNDM7CWlmIChldmVudCkKJiM0MzsJCWV2ZW50LSZndDt2YWxpZCA9IGZhbHNlOwomIzQzOwogCWlmIChpdGVyLSZndDt5aWVsZGVkKSB7CiAJCXRkcF9pdGVyX3Jlc3RhcnQoaXRlcik7CiAJCXJldHVybjsKQEAgLTE3Myw3ICYjNDM7MTg2LDE3IEBAIHZvaWQgdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpCiAJZG8gewogCQlpZiAodHJ5X3N0ZXBfc2lkZShpdGVyKSkKIAkJCXJldHVybjsKLQl9IHdoaWxlICh0cnlfc3RlcF91cChpdGVyKSk7CiYjNDM7CX0gd2hpbGUgKHRyeV9zdGVwX3VwKGl0ZXIsIGV2ZW50KSk7CiAJaXRlci0mZ3Q7dmFsaWQgPSBmYWxzZTsKIH0KIAomIzQzO3ZvaWQgdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpCiYjNDM7ewomIzQzOwlfX3RkcF9pdGVyX25leHQoaXRlciwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyKHN0cnVjdCB0ZHBfaXRlciAqaXRlciwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgKmV2ZW50KQomIzQzO3sKJiM0MzsJX190ZHBfaXRlcl9uZXh0KGl0ZXIsIGV2ZW50KTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmggYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgKaW5kZXggZjg5OGQ4ZDBkOTNjMi4uYjdlMjYwNWZiZjllOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaApAQCAtMTIzLDYgJiM0MzsxMjMsMTQgQEAgc3RydWN0IHRkcF9pdGVyIHsKIAlib29sIHlpZWxkZWQ7CiB9OwogCiYjNDM7c3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50IHsKJiM0MzsJdGRwX3B0ZXBfdCBzcHRlcDsKJiM0MzsJdTY0IG9sZF9zcHRlOwomIzQzOwlnZm5fdCBnZm47CiYjNDM7CWludCBsZXZlbDsKJiM0MzsJYm9vbCB2YWxpZDsKJiM0Mzt9OwomIzQzOwogLyoKICAqIEl0ZXJhdGVzIG92ZXIgZXZlcnkgU1BURSBtYXBwaW5nIHRoZSBHRk4gcmFuZ2UgW3N0YXJ0LCBlbmQpIGluIGEKICAqIHByZW9yZGVyIHRyYXZlcnNhbC4KQEAgLTE0NSw2ICYjNDM7MTUzLDggQEAgdGRwX3B0ZXBfdCBzcHRlX3RvX2NoaWxkX3B0KHU2NCBwdGUsIGludCBsZXZlbCk7CiB2b2lkIHRkcF9pdGVyX3N0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlciwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCwKIAkJICAgIGludCBtaW5fbGV2ZWwsIGdmbl90IG5leHRfbGFzdF9sZXZlbF9nZm4sIGdmbl90IGdmbl9iaXRzKTsKIHZvaWQgdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpOwomIzQzO3ZvaWQgdGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyKHN0cnVjdCB0ZHBfaXRlciAqaXRlciwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgKmV2ZW50KTsKIHZvaWQgdGRwX2l0ZXJfcmVzdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpOwogCiAjZW5kaWYgLyogX19LVk1fWDg2X01NVV9URFBfSVRFUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jCmluZGV4IDQ0ZGFkMTA2ZmFkMTkuLjgyNDQ2YzQ3MzdmNzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jCkBAIC05MjMsNiAmIzQzOzkyMywzOCBAQCBib29sIGt2bV90ZHBfbW11X3phcF9wb3NzaWJsZV9ueF9odWdlX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLAogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgdGRwX21tdV96YXBfY29tcGxldGVkX2VtcHR5X2xlYWZfcHQoc3RydWN0IGt2bSAqa3ZtLAomIzQzOwkJCQkJCXN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQsCiYjNDM7CQkJCQkJZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwKJiM0MzsJCQkJCQl0ZHBfcHRlcF90IHphcHBlZF9sZWFmX3B0KQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9tbXVfcGFnZSAqY2hpbGRfc3A7CiYjNDM7CiYjNDM7CWlmIChldmVudC0mZ3Q7bGV2ZWwgIT0gUEdfTEVWRUxfMk0gfHwKJiM0MzsJICAgICFpc19zaGFkb3dfcHJlc2VudF9wdGUoZXZlbnQtJmd0O29sZF9zcHRlKSB8fAomIzQzOwkgICAgaXNfbGFzdF9zcHRlKGV2ZW50LSZndDtvbGRfc3B0ZSwgZXZlbnQtJmd0O2xldmVsKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKGV2ZW50LSZndDtnZm4gJmx0OyBzdGFydCB8fAomIzQzOwkgICAgZXZlbnQtJmd0O2dmbiAmIzQzOyBLVk1fUEFHRVNfUEVSX0hQQUdFKGV2ZW50LSZndDtsZXZlbCkgJmd0OyBlbmQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIExlYXZlIHByb2R1Y3RpdmUgbGVhZiB0YWJsZXMgaW4gcGxhY2UgdG8gYXZvaWQgcmVmYXVsdCBjaHVybi4gKi8KJiM0MzsJaWYgKHphcHBlZF9sZWFmX3B0ID09IGV2ZW50LSZndDtzcHRlcCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJY2hpbGRfc3AgPSBzcHRlX3RvX2NoaWxkX3NwKGV2ZW50LSZndDtvbGRfc3B0ZSk7CiYjNDM7CWlmIChpc19taXJyb3Jfc3AoY2hpbGRfc3ApKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAoY2hpbGRfc3AtJmd0O3JvbGUubGV2ZWwgIT0gUEdfTEVWRUxfNEspCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXRkcF9tbXVfc2V0X3NwdGUoa3ZtLCBldmVudC0mZ3Q7c3B0ZXAsIGV2ZW50LSZndDtvbGRfc3B0ZSwKJiM0MzsJCQkgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUsIGV2ZW50LSZndDtnZm4sIGV2ZW50LSZndDtsZXZlbCk7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIC8qCiAgKiBJZiBjYW5feWllbGQgaXMgdHJ1ZSwgd2lsbCByZWxlYXNlIHRoZSBNTVUgbG9jayBhbmQgcmVzY2hlZHVsZSBpZiB0aGUKICAqIHNjaGVkdWxlciBuZWVkcyB0aGUgQ1BVIG9yIHRoZXJlIGlzIGNvbnRlbnRpb24gb24gdGhlIE1NVSBsb2NrLiBJZiB0aGlzCkBAIC05MzMsNyAmIzQzOzk2NSwxMCBAQCBib29sIGt2bV90ZHBfbW11X3phcF9wb3NzaWJsZV9ueF9odWdlX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLAogc3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LAogCQkJICAgICAgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgYm9vbCBjYW5feWllbGQsIGJvb2wgZmx1c2gpCiB7CiYjNDM7CXN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCBldmVudCA9IHt9OwogCXN0cnVjdCB0ZHBfaXRlciBpdGVyOwomIzQzOwl0ZHBfcHRlcF90IHphcHBlZF9sZWFmX3B0ID0gTlVMTDsKJiM0MzsJYm9vbCByZW1vdmVkX3NwID0gZmFsc2U7CiAKIAllbmQgPSBtaW4oZW5kLCB0ZHBfbW11X21heF9nZm5fZXhjbHVzaXZlKCkpOwogCkBAIC05NDEsMzMgJiM0Mzs5NzYsNTYgQEAgc3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LAogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0JZm9yX2VhY2hfdGRwX3B0ZV9taW5fbGV2ZWwoaXRlciwga3ZtLCByb290LCBQR19MRVZFTF80Sywgc3RhcnQsIGVuZCkgewomIzQzOwl0ZHBfaXRlcl9zdGFydCgmYW1wO2l0ZXIsIHJvb3QsIFBHX0xFVkVMXzRLLCBzdGFydCwKJiM0MzsJCSAgICAgICBrdm1fZ2ZuX3Jvb3RfYml0cyhrdm0sIHJvb3QpKTsKJiM0MzsJd2hpbGUgKGl0ZXIudmFsaWQgJmFtcDsmYW1wOyBpdGVyLmdmbiAmbHQ7IGVuZCkgewogCQlpZiAoY2FuX3lpZWxkICZhbXA7JmFtcDsKIAkJICAgIHRkcF9tbXVfaXRlcl9jb25kX3Jlc2NoZWQoa3ZtLCAmYW1wO2l0ZXIsIGZsdXNoLCBmYWxzZSkpIHsKIAkJCWZsdXNoID0gZmFsc2U7CiYjNDM7CQkJdGRwX2l0ZXJfbmV4dCgmYW1wO2l0ZXIpOwogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoIWlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLm9sZF9zcHRlKSB8fAotCQkgICAgIWlzX2xhc3Rfc3B0ZShpdGVyLm9sZF9zcHRlLCBpdGVyLmxldmVsKSkKLQkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLm9sZF9zcHRlKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgaXNfbGFzdF9zcHRlKGl0ZXIub2xkX3NwdGUsIGl0ZXIubGV2ZWwpKSB7CiYjNDM7CQkJaWYgKGl0ZXIubGV2ZWwgPT0gUEdfTEVWRUxfNEspIHsKJiM0MzsJCQkJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7CiAKLQkJdGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgJmFtcDtpdGVyLCBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSk7CiYjNDM7CQkJCXNwID0gc3B0ZXBfdG9fc3AocmN1X2RlcmVmZXJlbmNlKGl0ZXIuc3B0ZXApKTsKJiM0MzsJCQkJemFwcGVkX2xlYWZfcHQgPSBzcC0mZ3Q7cHRlcDsKJiM0MzsJCQl9CiAKLQkJLyoKLQkJICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2VzbiYjMzk7dCByZXF1aXJlIGEgVExCIGZsdXNoLAotCQkgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuCi0JCSAqLwotCQlpZiAoIXJvb3QtJmd0O3JvbGUuaW52YWxpZCkKLQkJCWZsdXNoID0gdHJ1ZTsKLQl9CiYjNDM7CQkJdGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgJmFtcDtpdGVyLAomIzQzOwkJCQkJICAgICAgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUpOwogCi0JcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBaYXBwaW5ncyBTUFRFcyBpbiBpbnZhbGlkIHJvb3RzIGRvZXNuJiMzOTt0IHJlcXVpcmUgYSBUTEIgZmx1c2gsCiYjNDM7CQkJICogc2VlIGt2bV90ZHBfbW11X3phcF9pbnZhbGlkYXRlZF9yb290cygpIGZvciBkZXRhaWxzLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmICghcm9vdC0mZ3Q7cm9sZS5pbnZhbGlkKQomIzQzOwkJCQlmbHVzaCA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQl0ZHBfaXRlcl9uZXh0X3Bvc3Rfb3JkZXIoJmFtcDtpdGVyLCAmYW1wO2V2ZW50KTsKJiM0MzsJCWlmIChldmVudC52YWxpZCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdGRwX21tdV96YXBfY29tcGxldGVkX2VtcHR5X2xlYWZfcHQoa3ZtLCAmYW1wO2V2ZW50LCBzdGFydCwKJiM0MzsJCQkJCQkJZW5kLCB6YXBwZWRfbGVhZl9wdCkpIHsKJiM0MzsJCQlpZiAoIXJvb3QtJmd0O3JvbGUuaW52YWxpZCkKJiM0MzsJCQkJZmx1c2ggPSB0cnVlOwomIzQzOwkJCXJlbW92ZWRfc3AgPSB0cnVlOwomIzQzOwkJfQomIzQzOwl9CiAKIAkvKgotCSAqIEJlY2F1c2UgdGhpcyBmbG93IHphcHMgX29ubHlfIGxlYWYgU1BURXMsIHRoZSBjYWxsZXIgZG9lc24mIzM5O3QgbmVlZAotCSAqIHRvIHByb3ZpZGUgUkNVIHByb3RlY3Rpb24gYXMgbm8gJiMzOTtzdHJ1Y3Qga3ZtX21tdV9wYWdlJiMzOTsgd2lsbCBiZSBmcmVlZC4KJiM0MzsJICogSWYgYW55IHNoYWRvdyBwYWdlcyB3ZXJlIHJlbW92ZWQsIHNlcnZpY2UgcGVuZGluZyBUTEIgZmx1c2hlcyBiZWZvcmUKJiM0MzsJICogZHJvcHBpbmcgUkNVIHByb3RlY3Rpb24sIGFzIHJlcXVpcmVkIGJ5IHRoZSBURFAgTU1VIGl0ZXJhdG9yLgogCSAqLwomIzQzOwlpZiAocmVtb3ZlZF9zcCAmYW1wOyZhbXA7IGZsdXNoKSB7CiYjNDM7CQlrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTsKJiM0MzsJCWZsdXNoID0gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIGZsdXNoOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqRGVjb25zdHJ1Y3RpbmcgVGhpcyBLVk0gVERQIE1NVSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBtb2RpZmljYXRpb25zIHRvIHRoZSBLVk0geDg2IFREUCBNTVUsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBUaGUgZmFjdCB0aGF0IHRoaXMgdG91Y2hlcyBgdGRwX2l0ZXIuY2AsIGB0ZHBfaXRlci5oYCwgYW5kIGB0ZHBfbW11LmNgIHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gVERQIChUd28tRGltZW5zaW9uYWwgUGFnaW5nKSBpdGVyYXRpb24gYW5kIE1NVSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBuZXN0ZWQgcGFnaW5nIGNvbnRleHQuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGdldHRpbmcgc29tZSBuZXcgZnVuY3Rpb25zIGludHJvZHVjZWQ6IGB0ZHBfaXRlcl9uZXh0X3Bvc3Rfb3JkZXJgIGFuZCBgdGRwX21tdV96YXBfY29tcGxldGVkX2VtcHR5X2xlYWZfcHRgLCBhbmQgd2Ugc2VlIHVwZGF0ZXMgdG8gYHRkcF9tbXVfemFwX2xlYWZzYC4gVGhlIG5hbWVzIHRoZW1zZWx2ZXMgZ2l2ZSBzb21lIGhpbnRzIC0gcG9zdC1vcmRlciBpdGVyYXRpb24gYW5kIGxlYWYgcGFnZSB0YWJsZSB6YXBwaW5nLgoKSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBhZGRpdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgdHlwaWNhbCB3b3JrZmxvdyBoZXJlOiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIHplcm8gaW4gb24gdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiBgdGRwX21tdS5jYCBhbmQgYWxzbyBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIHRvIGdldCB0aGUgcHJlY2lzZSBjb250ZXh0LiBJIHdhbnQgdG8gc2VlICpob3cqIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW50ZWdyYXRlZCwgd2hhdCB0aGV5JiMzOTtyZSBjYWxsZWQgZnJvbSwgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIHRoZXkgb3BlcmF0ZSBvbiB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsuIFdpdGggdGhhdCBpbmZvcm1hdGlvbiBJJiMzOTtsbCBidWlsZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGRwX21tdV96YXBfbGVhZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz03MTEzPXZvaWQga3ZtX3phcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm5fc3RhcnQsIGdmbl90IGdmbl9lbmQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTI4LVx0aWYgKHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzEyOTpcdFx0Zmx1c2ggPSBrdm1fdGRwX21tdV96YXBfbGVhZnMoa3ZtLCBnZm5fc3RhcnQsIGdmbl9lbmQsIGZsdXNoKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzEzMC1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz05MjY9c3RhdGljIGJvb2wgdGRwX21tdV96YXBfY29tcGxldGVkX2VtcHR5X2xlYWZfcHQoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTk2NC0gKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjk2NTpzdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy05NjYtXHRcdFx0ICAgICAgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgYm9vbCBjYW5feWllbGQsIGJvb2wgZmx1c2gpXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzNi0gKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjEwMzc6Ym9vbCBrdm1fdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGZsdXNoKVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzOC17XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTA0Mi1cdGZvcl9lYWNoX3ZhbGlkX3RkcF9tbXVfcm9vdF95aWVsZF9zYWZlKGt2bSwgcm9vdCwgLTEpXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzoxMDQzOlx0XHRmbHVzaCA9IHRkcF9tbXVfemFwX2xlYWZzKGt2bSwgcm9vdCwgc3RhcnQsIGVuZCwgdHJ1ZSwgZmx1c2gpO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTA0NC1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz0xMzY1PWJvb2wga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEzNzMtXHRfX2Zvcl9lYWNoX3RkcF9tbXVfcm9vdF95aWVsZF9zYWZlKGt2bSwgcm9vdCwgcmFuZ2UtXHUwMDNlc2xvdC1cdTAwM2Vhc19pZCwgdHlwZXMpXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzoxMzc0Olx0XHRmbHVzaCA9IHRkcF9tbXVfemFwX2xlYWZzKGt2bSwgcm9vdCwgcmFuZ2UtXHUwMDNlc3RhcnQsIHJhbmdlLVx1MDAzZWVuZCxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEzNzUtXHRcdFx0XHRcdCAgcmFuZ2UtXHUwMDNlbWF5X2Jsb2NrLCBmbHVzaCk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg9NTc9c3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21tdV9wYWdlICp0ZHBfbW11X2dldF9yb290KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC02NS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oOjY2OmJvb2wga3ZtX3RkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgYm9vbCBmbHVzaCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC02Ny1ib29sIGt2bV90ZHBfbW11X3phcF9wb3NzaWJsZV9ueF9odWdlX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyODcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktjb25maWcgRGl2ZSBmb3IgS1ZNICZhbXA7IFREUCBNTVUgb24geDg2KioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIEtjb25maWcgZmlsZXMgYWdhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IHN0YXR1cyBvZiBLVk0gYW5kIHRoZSBURFAgTU1VIHN1cHBvcnQgb24geDg2LCBwYXJ0aWN1bGFybHkgd2hlcmUgdGhpbmdzIG1pZ2h0IGJlIGVuYWJsZWQsIGRpc2FibGVkLCBvciBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyBmb3IgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc3ltYm9scyDigJMgbGlrZWx5IHNvbWV0aGluZyBsaWtlIGBDT05GSUdfS1ZNYCwgYENPTkZJR19YODZfVERYX01NVWAsIG9yIHZhcmlhdGlvbnMgdGhlcmVvZiDigJMgdG8gZ2V0IGEgZ3Jhc3Agb2YgdGhlIHRvcC1sZXZlbCBvcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgdG8gc2VlIHdoaWNoIG90aGVyIGZlYXR1cmVzIG9yIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIHRyaWdnZXIgdGhlc2Ugc2V0dGluZ3MuIEFyZSB3ZSByZWx5aW5nIG9uIGFueSBzcGVjaWZpYyBDUFUgZmVhdHVyZXMgb3IgaHlwZXJ2aXNvciBmbGFncz8gSSBhbHNvIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlc2UgY29uZmlndXJhdGlvbnMsIGFuZCB3aGV0aGVyIHdlJiMzOTtyZSB1c2luZyBhbnkgdHJpc3RhdGUgb3B0aW9ucyB0aGF0IGNvdWxkIGNhdXNlIGlzc3VlcyBkZXBlbmRpbmcgb24gdGhlIGJ1aWxkLiBHb3R0YSBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IGNvbmZsaWN0cyBvciByZWdyZXNzaW9ucyBpbiB0aGUgY29uZmlndXJhdGlvbiBzcGFjZS4gTmVlZCB0byBrZWVwIGluIG1pbmQsIHRvbywgdGhlIHZhcmlvdXMgeDg2IENQVSBtb2RlbHMsIGFuZCB3aGV0aGVyIGNvbmZpZ3VyYXRpb24gZGlmZmVycyBiZXR3ZWVuIHRoZW0uIEdvdHRhIGJlIHByZWNpc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWctMi0jXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzozOiMgS1ZNIGNvbmZpZ3VyYXRpb25cbmFyY2gveDg2L2t2bS9LY29uZmlnLTQtI1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTpcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOlx0c2VsZWN0IEtWTV9DT01NT05cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzOlx0c2VsZWN0IEtWTV9FTElERV9UTEJfRkxVU0hfSUZfWU9VTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnOjI0Olx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnOjI1Olx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcbmFyY2gveDg2L2t2bS9LY29uZmlnOjI2Olx0c2VsZWN0IEhBVkVfS1ZNX1BGTkNBQ0hFXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyNzpcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX1RTT1xuYXJjaC94ODYva3ZtL0tjb25maWc6Mjg6XHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyOTpcdHNlbGVjdCBIQVZFX0tWTV9JUlFfQllQQVNTXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzozMDpcdHNlbGVjdCBIQVZFX0tWTV9JUlFfUk9VVElOR1xuYXJjaC94ODYva3ZtL0tjb25maWc6MzE6XHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0zMi1cdHNlbGVjdCBWSE9TVF9UQVNLXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzozMzpcdHNlbGVjdCBLVk1fQVNZTkNfUEZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTM0LVx0c2VsZWN0IFVTRVJfUkVUVVJOX05PVElGSUVSXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzozNTpcdHNlbGVjdCBLVk1fTU1JT1xuYXJjaC94ODYva3ZtL0tjb25maWctMzYtXHRzZWxlY3QgU0NIRURfSU5GT1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTM5LVx0c2VsZWN0IFBFUkZfR1VFU1RfTUVESUFURURfUE1VXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo0MDpcdHNlbGVjdCBIQVZFX0tWTV9NU0lcbmFyY2gveDg2L2t2bS9LY29uZmlnOjQxOlx0c2VsZWN0IEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcbmFyY2gveDg2L2t2bS9LY29uZmlnOjQyOlx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcbmFyY2gveDg2L2t2bS9LY29uZmlnLTQzLVx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo0NDpcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcbmFyY2gveDg2L2t2bS9LY29uZmlnOjQ1Olx0c2VsZWN0IEtWTV9WRklPXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo0NjpcdHNlbGVjdCBIQVZFX0tWTV9QTV9OT1RJRklFUiBpZiBQTVxuYXJjaC94ODYva3ZtL0tjb25maWc6NDc6XHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnOjQ4Olx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbmFyY2gveDg2L2t2bS9LY29uZmlnOjQ5Olx0c2VsZWN0IEtWTV9XRVJST1IgaWYgV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1MDpcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjUzOlx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01NC1cdGRlcGVuZHMgb24gWDg2X0xPQ0FMX0FQSUNcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo3MDpcdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo3MTpcdCMgRGlzYWxsb3cgS1ZNJiMzOTtzIC1XZXJyb3IgaWYgS0FTQU4gaXMgZW5hYmxlZCwgZS5nLiB0byBndWFyZCBhZ2FpbnN0XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo3MjpcdCMgcmFuZG9taXplZCBjb25maWdzIGZyb20gc2VsZWN0aW5nIEtWTV9XRVJST1I9eSwgd2hpY2ggZG9lc24mIzM5O3QgcGxheVxuYXJjaC94ODYva3ZtL0tjb25maWctNzMtXHQjIG5pY2Ugd2l0aCBLQVNBTi4gIEtBU0FOIGJ1aWxkcyBnZW5lcmF0ZXMgd2FybmluZ3MgZm9yIHRoZSBkZWZhdWx0XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo3NDpcdCMgRlJBTUVfV0FSTiwgaS5lLiBLVk1fV0VSUk9SPXkgd2l0aCBLQVNBTj15IHJlcXVpcmVzIHNwZWNpYWwgdHVuaW5nLlxuYXJjaC94ODYva3ZtL0tjb25maWc6NzU6XHQjIEJ1aWxkaW5nIEtWTSB3aXRoIC1XZXJyb3IgYW5kIEtBU0FOIGlzIHN0aWxsIGRvYWJsZSB2aWEgZW5hYmxpbmdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTc2LVx0IyB0aGUga2VybmVsLXdpZGUgV0VSUk9SPXkuXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo3NzpcdGRlcGVuZHMgb24gS1ZNX1g4NiBcdTAwMjZcdTAwMjYgKChFWFBFUlQgXHUwMDI2XHUwMDI2ICFLQVNBTikgfHwgV0VSUk9SKVxuYXJjaC94ODYva3ZtL0tjb25maWctNzgtXHRoZWxwXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo3OTpcdCAgQWRkIC1XZXJyb3IgdG8gdGhlIGJ1aWxkIGZsYWdzIGZvciBLVk0uXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04MC1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4NDpcdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NS1cdGRlcGVuZHMgb24gRVhQRVJUXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4NjpcdGRlcGVuZHMgb24gS1ZNX1g4NiBcdTAwMjZcdTAwMjYgWDg2XzY0XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4NzpcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuYXJjaC94ODYva3ZtL0tjb25maWctODgtXHRoZWxwXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4OTpcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zLiAgQ3VycmVudGx5LCBzb2Z0d2FyZS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTkwLVx0ICBwcm90ZWN0ZWQgVk1zIGFyZSBwdXJlbHkgYSBkZXZlbG9wbWVudCBhbmQgdGVzdGluZyB2ZWhpY2xlIGZvclxuYXJjaC94ODYva3ZtL0tjb25maWc6OTE6XHQgIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQuICBBdHRlbXB0aW5nIHRvIHJ1biBhIFwmIzM0O3JlYWxcJiMzNDsgVk0gd29ya2xvYWQgYXMgYVxuYXJjaC94ODYva3ZtL0tjb25maWctOTItXHQgIHNvZnR3YXJlLXByb3RlY3RlZCBWTSB3aWxsIGZhaWwgbWlzZXJhYmx5LlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTc6XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5ODpcdGRlcGVuZHMgb24gS1ZNIFx1MDAyNlx1MDAyNiBJQTMyX0ZFQVRfQ1RMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05OS1cdHNlbGVjdCBYODZfRlJFRCBpZiBYODZfNjRcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwMC1cdGhlbHBcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwMTpcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCBJbnRlbCYjMzk7cyBWVFxuYXJjaC94ODYva3ZtL0tjb25maWctMTAyLVx0ICBleHRlbnNpb25zLCBhLmsuYS4gVmlydHVhbCBNYWNoaW5lIEV4dGVuc2lvbnMgKFZNWCkuXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwOTogICAgICAgIGRlcGVuZHMgb24gS1ZNX0lOVEVMIFx1MDAyNlx1MDAyNiBFWFBFUlRcbmFyY2gveDg2L2t2bS9LY29uZmlnLTExMC0gICAgICAgIGhlbHBcbmFyY2gveDg2L2t2bS9LY29uZmlnOjExMTogICAgICAgICAgQ2hlY2tzIHRoYXQgS1ZNJiMzOTtzIHBhZ2UgdGFibGUgbWFuYWdlbWVudCBjb2RlIHdpbGwgbm90IGluY29ycmVjdGx5XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMTItICAgICAgICAgIGxldCBndWVzdHMgcmVjZWl2ZSBhIHZpcnR1YWxpemF0aW9uIGV4Y2VwdGlvbi4gIFZpcnR1YWxpemF0aW9uXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTE2LSAgICAgICAgICBOb3RlOiBzb21lIENQVXMgYXBwZWFyIHRvIGdlbmVyYXRlIHNwdXJpb3VzIEVQVCBWaW9sYXRpb25zICNWRXNcbmFyY2gveDg2L2t2bS9LY29uZmlnOjExNzogICAgICAgICAgdGhhdCB0cmlnZ2VyIEtWTSYjMzk7cyBXQVJOLCBpbiBwYXJ0aWN1bGFyIHdpdGggZXB0YWQ9MCBhbmQvb3IgbmVzdGVkXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMTgtICAgICAgICAgIHZpcnR1YWxpemF0aW9uLlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEyMjpjb25maWcgWDg2X1NHWF9LVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyMy1cdGJvb2wgXCYjMzQ7U29mdHdhcmUgR3VhcmQgZVh0ZW5zaW9ucyAoU0dYKSBWaXJ0dWFsaXphdGlvblwmIzM0O1xuYXJjaC94ODYva3ZtL0tjb25maWc6MTI0Olx0ZGVwZW5kcyBvbiBYODZfU0dYIFx1MDAyNlx1MDAyNiBLVk1fSU5URUxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyNS1cdGhlbHBcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEyNzpcdCAgRW5hYmxlcyBLVk0gZ3Vlc3RzIHRvIGNyZWF0ZSBTR1ggZW5jbGF2ZXMuXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMjgtXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzctXHRkZXBlbmRzIG9uIElOVEVMX1REWF9IT1NUXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzg6XHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzOTpcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0MC1cdGhlbHBcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0NzpcdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ4Olx0ZGVwZW5kcyBvbiBLVk0gXHUwMDI2XHUwMDI2IChDUFVfU1VQX0FNRCB8fCBDUFVfU1VQX0hZR09OKVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ5LVx0aGVscFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTUwOlx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gQU1EIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCB0aGUgQU1ELVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1MS1cdCAgKFNWTSkgZXh0ZW5zaW9ucy5cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1OC1cdGRlZmF1bHQgeVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU5Olx0ZGVwZW5kcyBvbiBLVk1fQU1EIFx1MDAyNlx1MDAyNiBYODZfNjRcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE2MDpcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9TUF9QU1AgXHUwMDI2XHUwMDI2ICEoS1ZNX0FNRD15IFx1MDAyNlx1MDAyNiBDUllQVE9fREVWX0NDUF9ERD1tKVxuYXJjaC94ODYva3ZtL0tjb25maWctMTYxLVx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjI6XHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE2MzpcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fQ09OVkVSVFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTY0Olx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9SRUNMQUlNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjU6XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE2NjpcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE2Ny1cdGhlbHBcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzM6Y29uZmlnIEtWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3NC1cdGJvb2wgXCYjMzQ7SS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cJiMzNDtcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3NS1cdGRlZmF1bHQgeVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTc2Olx0ZGVwZW5kcyBvbiBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzctXHRoZWxwXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzg6XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSB0byBlbXVsYXRlIGFuIEkvTyBBUElDLCBQSUMsIGFuZCBQSVQsIGkuZS5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3OS1cdCAgZm9yIGZ1bGwgaW4ta2VybmVsIEFQSUMgZW11bGF0aW9uLlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuYXJjaC94ODYva3ZtL0tjb25maWctMTg1LVx0ZGVmYXVsdCB5XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODY6XHRkZXBlbmRzIG9uIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Ny1cdGhlbHBcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4ODpcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIHRvIGVtdWxhdGUgU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKVxuYXJjaC94ODYva3ZtL0tjb25maWctMTg5LVx0ICBpbiB2aXJ0dWFsIG1hY2hpbmVzLiAgVGhpcyBjYW4gYmUgdXNlZCBieSB0aGUgdmlydHVhbCBtYWNoaW5lXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTUtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuYXJjaC94ODYva3ZtL0tjb25maWc6MTk2Olx0ZGVwZW5kcyBvbiBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTctXHRkZWZhdWx0IHlcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5OC1cdGhlbHBcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5OTpcdCAgUHJvdmlkZXMgS1ZNIHN1cHBvcnQgZm9yIGVtdWxhdGluZyBNaWNyb3NvZnQgSHlwZXItVi4gIFRoaXMgYWxsb3dzIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctMjAwLVx0ICB0byBleHBvc2UgYSBzdWJzZXQgb2YgdGhlIHBhcmF2aXJ0dWFsaXplZCBpbnRlcmZhY2VzIGRlZmluZWQgaW4gdGhlXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjAzLVx0ICBUaGVzZSBpbnRlcmZhY2VzIGFyZSByZXF1aXJlZCBmb3IgdGhlIGNvcnJlY3QgYW5kIHBlcmZvcm1hbnQgZnVuY3Rpb25pbmdcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNDpcdCAgb2YgV2luZG93cyBhbmQgSHlwZXItViBndWVzdHMgb24gS1ZNLlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA1LVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwODpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuYXJjaC94ODYva3ZtL0tjb25maWc6MjEwOlx0ZGVwZW5kcyBvbiBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTEtXHRoZWxwXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTI6XHQgIFByb3ZpZGVzIEtWTSBzdXBwb3J0IGZvciB0aGUgaG9zdGluZyBYZW4gSFZNIGd1ZXN0cyBhbmRcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxMy1cdCAgcGFzc2luZyBYZW4gaHlwZXJjYWxscyB0byB1c2Vyc3BhY2UuXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE3OmNvbmZpZyBLVk1fUFJPVkVfTU1VXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTg6XHRib29sIFwmIzM0O1Byb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcJiMzNDtcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOS1cdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjA6XHRkZXBlbmRzIG9uIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyMS1cdGRlcGVuZHMgb24gRVhQRVJUXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjItXHRoZWxwXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjM6XHQgIEVuYWJsZXMgcnVudGltZSBhc3NlcnRpb25zIGluIEtWTSYjMzk7cyBNTVUgdGhhdCBhcmUgdG9vIGNvc3RseSB0byBlbmFibGVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyNC1cdCAgaW4gYW55dGhpbmcgcmVtb3RlbHkgcmVzZW1ibGluZyBhIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQsIGUuZy4gdGhpc1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMDpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzM6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzNDpcdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzU6XHRkZXBlbmRzIG9uIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzNi1cdHJhbmdlIDEwMjQgNDA5NlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzOS1cdGhlbHBcbmFyY2gveDg2L2t2bS9LY29uZmlnOjI0MDpcdCAgU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0LiBMYXJnZXIgdmFsdWVzIHdpbGwgaW5jcmVhc2VcbmFyY2gveDg2L2t2bS9LY29uZmlnOjI0MTpcdCAgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgZWFjaCBLVk0gZ3Vlc3QsIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgdkNQVXMgYXJlXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yNDItXHQgIGNyZWF0ZWQgZm9yIGEgZ2l2ZW4gVk0uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMDcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBLVk0gQ29tcGlsYXRpb24gUHJvY2VzczogYHRkcF9tbXUuY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB0ZHBfbW11LmNgIGlzIGJlaW5nIGNvbXBpbGVkIHdpdGhpbiB0aGUgS1ZNIGluZnJhc3RydWN0dXJlLiBJIGtub3cgdGhlIGdlbmVyYWwgS1ZNIGJ1aWxkIHByb2Nlc3MsIGJ1dCBhIHNwZWNpZmljIGZpbGUgbGlrZSB0aGlzIG9mdGVuIGhhcyBzb21lIG51YW5jZXMuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGFsbW9zdCBhbHdheXMgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIHJlbGV2YW50IGRpcmVjdG9yeS4gU2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSwgc3BlY2lmaWNhbGx5IHg4NiwgSSYjMzk7bSBnb2luZyBzdHJhaWdodCBmb3IgYGFyY2gveDg2L2t2bS9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGxvd2Rvd24gb24gdGhlIGJ1aWxkIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCBob3BlZnVsbHksIGFueSBzcGVjaWZpYyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYyB0aGF0IGFwcGxpZXMgdG8gYHRkcF9tbXUuY2AuIEtub3dpbmcgdGhpcyBsZXZlbCBvZiBkZXRhaWwgaXMga2V5IHRvIGZ1bGx5IHVuZGVyc3RhbmRpbmcgaG93IHRoZSBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwgYW5kIGhvdyBpdCB3aWxsIGJlaGF2ZSB3aGVuIGJ1aWx0IGZvciBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBzZWNyZXRzIHRoZSBNYWtlZmlsZSBob2xkcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHBfbW11JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMjkxIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU9OD1rdm0teVx0XHRcdCYjNDM7PSB4ODYubyBlbXVsYXRlLm8gaXJxLm8gbGFwaWMubyBjcHVpZC5vIG1zcnMubyBwbXUubyByZWdzLm8gXFxcbi0tXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMTAtXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MTE6a3ZtLSQoQ09ORklHX1g4Nl82NCkgJiM0Mzs9IG1tdS90ZHBfaXRlci5vIG1tdS90ZHBfbW11Lm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xMi1rdm0tJChDT05GSUdfS1ZNX0lPQVBJQykgJiM0Mzs9IGk4MjU5Lm8gaTgyNTQubyBpb2FwaWMub1xuLS1cbmFyY2gveDg2L2t2bS9tbXUuaD05PWV4dGVybiBib29sIF9fcmVhZF9tb3N0bHkgdGRwX2VuYWJsZWQ7XG5hcmNoL3g4Ni9rdm0vbW11LmgtMTAtI2lmZGVmIENPTkZJR19YODZfNjRcbmFyY2gveDg2L2t2bS9tbXUuaDoxMTpleHRlcm4gYm9vbCBfX3JlYWRfbW9zdGx5IHRkcF9tbXVfZW5hYmxlZDtcbmFyY2gveDg2L2t2bS9tbXUuaC0xMi0jZWxzZVxuYXJjaC94ODYva3ZtL21tdS5oOjEzOiNkZWZpbmUgdGRwX21tdV9lbmFibGVkIGZhbHNlXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTQtI2VuZGlmXG4tLVxuYXJjaC94ODYva3ZtL21tdS5oPTMzMT1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX3NoYWRvd19yb290X2FsbG9jYXRlZChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL21tdS5oLTM0MS1cbmFyY2gveDg2L2t2bS9tbXUuaDozNDI6aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbik7XG5hcmNoL3g4Ni9rdm0vbW11LmgtMzQzLVxuYXJjaC94ODYva3ZtL21tdS5oPTM0ND1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbXNsb3RzX2hhdmVfcm1hcHMoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL21tdS5oLTM0NS17XG5hcmNoL3g4Ni9rdm0vbW11Lmg6MzQ2Olx0cmV0dXJuICF0ZHBfbW11X2VuYWJsZWQgfHwga3ZtX3NoYWRvd19yb290X2FsbG9jYXRlZChrdm0pO1xuYXJjaC94ODYva3ZtL21tdS5oLTM0Ny19XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0yMi0jaW5jbHVkZSBcJiMzNDttbXVfaW50ZXJuYWwuaFwmIzM0O1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoyMzojaW5jbHVkZSBcJiMzNDt0ZHBfbW11LmhcJiMzNDtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMjQtI2luY2x1ZGUgXCYjMzQ7eDg2LmhcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTEwOD1ib29sIF9fcmVhZF9tb3N0bHkgdGRwX2VuYWJsZWQgPSBmYWxzZTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA5LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMTA6c3RhdGljIGJvb2wgX19yb19hZnRlcl9pbml0IHRkcF9tbXVfYWxsb3dlZDtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTExLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMTItI2lmZGVmIENPTkZJR19YODZfNjRcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTEzOmJvb2wgX19yZWFkX21vc3RseSB0ZHBfbW11X2VuYWJsZWQgPSB0cnVlO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMTQ6bW9kdWxlX3BhcmFtX25hbWVkKHRkcF9tbXUsIHRkcF9tbXVfZW5hYmxlZCwgYm9vbCwgMDQ0NCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjExNTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwodGRwX21tdV9lbmFibGVkKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTE2LSNlbmRpZlxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTYyPXN0YXRpYyB1NjQgbW11X3NwdGVfZ2V0X2xvY2tsZXNzKHU2NCAqc3B0ZXApXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01NjYtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU2NzpzdGF0aWMgaW5saW5lIGJvb2wgaXNfdGRwX21tdV9hY3RpdmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01Njgte1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1Njk6XHRyZXR1cm4gdGRwX21tdV9lbmFibGVkIFx1MDAyNlx1MDAyNiB2Y3B1LVx1MDAzZWFyY2gubW11LVx1MDAzZXJvb3Rfcm9sZS5kaXJlY3Q7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU3MC19XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01NzI9c3RhdGljIHZvaWQgd2Fsa19zaGFkb3dfcGFnZV9sb2NrbGVzc19iZWdpbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU3My17XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU3NDpcdGlmIChpc190ZHBfbW11X2FjdGl2ZSh2Y3B1KSkge1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1NzU6XHRcdGt2bV90ZHBfbW11X3dhbGtfbG9ja2xlc3NfYmVnaW4oKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTc2LVx0fSBlbHNlIHtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5MT1zdGF0aWMgdm9pZCB3YWxrX3NoYWRvd19wYWdlX2xvY2tsZXNzX2VuZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5Mi17XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5MzpcdGlmIChpc190ZHBfbW11X2FjdGl2ZSh2Y3B1KSkge1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTQ6XHRcdGt2bV90ZHBfbW11X3dhbGtfbG9ja2xlc3NfZW5kKCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NS1cdH0gZWxzZSB7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xNDAxPXN0YXRpYyB2b2lkIGt2bV9tbXVfd3JpdGVfcHJvdGVjdF9wdF9tYXNrZWQoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTQwNi1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTQwNzpcdGlmICh0ZHBfbW11X2VuYWJsZWQpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE0MDg6XHRcdGt2bV90ZHBfbW11X2NsZWFyX2RpcnR5X3B0X21hc2tlZChrdm0sIHNsb3QsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE0MDktXHRcdFx0XHRzbG90LVx1MDAzZWJhc2VfZ2ZuICYjNDM7IGdmbl9vZmZzZXQsIG1hc2ssIHRydWUpO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTQyND1zdGF0aWMgdm9pZCBrdm1fbW11X2NsZWFyX2RpcnR5X3B0X21hc2tlZChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNDI5LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxNDMwOlx0aWYgKHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTQzMTpcdFx0a3ZtX3RkcF9tbXVfY2xlYXJfZGlydHlfcHRfbWFza2VkKGt2bSwgc2xvdCxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTQzMi1cdFx0XHRcdHNsb3QtXHUwMDNlYmFzZV9nZm4gJiM0MzsgZ2ZuX29mZnNldCwgbWFzaywgZmFsc2UpO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTQ5OT1ib29sIGt2bV9tbXVfc2xvdF9nZm5fd3JpdGVfcHJvdGVjdChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNTEzLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxNTE0Olx0aWYgKHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTUxNS1cdFx0d3JpdGVfcHJvdGVjdGVkIHw9XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE1MTY6XHRcdFx0a3ZtX3RkcF9tbXVfd3JpdGVfcHJvdGVjdF9nZm4oa3ZtLCBzbG90LCBnZm4sIG1pbl9sZXZlbCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE1MTctXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xNjcxPWJvb2wga3ZtX3VubWFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE2OTAtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE2OTE6XHRpZiAodGRwX21tdV9lbmFibGVkKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxNjkyOlx0XHRmbHVzaCA9IGt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZShrdm0sIHJhbmdlLCBmbHVzaCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE2OTMtXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xNzg0PXN0YXRpYyBib29sIGt2bV9tYXlfaGF2ZV9zaGFkb3dfbW11X3NwdGVzKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc4NS17XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE3ODY6XHRyZXR1cm4gIXRkcF9tbXVfZW5hYmxlZCB8fCBSRUFEX09OQ0Uoa3ZtLVx1MDAzZWFyY2guaW5kaXJlY3Rfc2hhZG93X3BhZ2VzKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc4Ny19XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xNzg5PWJvb2wga3ZtX2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNzkyLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxNzkzOlx0aWYgKHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTc5NDpcdFx0eW91bmcgPSBrdm1fdGRwX21tdV9hZ2VfZ2ZuX3JhbmdlKGt2bSwgcmFuZ2UpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNzk1LVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTgwMj1ib29sIGt2bV90ZXN0X2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xODA1LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxODA2Olx0aWYgKHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTgwNzpcdFx0eW91bmcgPSBrdm1fdGRwX21tdV90ZXN0X2FnZV9nZm4oa3ZtLCByYW5nZSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE4MDgtXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0yMTQwPXN0YXRpYyBib29sIGlzX29ic29sZXRlX3NwKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0yMTQ1LVx0LyogVERQIE1NVSBwYWdlcyBkbyBub3QgdXNlIHRoZSBNTVUgZ2VuZXJhdGlvbi4gKi9cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MjE0NjpcdHJldHVybiAhaXNfdGRwX21tdV9wYWdlKHNwKSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMjE0Ny1cdCAgICAgICB1bmxpa2VseShzcC1cdTAwM2VtbXVfdmFsaWRfZ2VuICE9IGt2bS1cdTAwM2VhcmNoLm1tdV92YWxpZF9nZW4pO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MzQ4MD12b2lkIGRpc2FsbG93ZWRfaHVnZXBhZ2VfYWRqdXN0KHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQsIHU2NCBzcHRlLCBpbnQgY3VyX2xldmVsKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzQ4OC1cdFx0ICogQSBzbWFsbCBTUFRFIGV4aXN0cyBmb3IgdGhpcyBwZm4sIGJ1dCBGTkFNRShmZXRjaCksXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM0ODk6XHRcdCAqIGRpcmVjdF9tYXAoKSwgb3Iga3ZtX3RkcF9tbXVfbWFwKCkgd291bGQgbGlrZSB0byBjcmVhdGUgYVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zNDkwLVx0XHQgKiBsYXJnZSBQVEUgaW5zdGVhZDoganVzdCBmb3JjZSB0aGVtIHRvIGdvIGRvd24gYW5vdGhlciBsZXZlbCxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTM3MjY9c3RhdGljIGludCBmYXN0X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzc0My1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Mzc0NDpcdFx0aWYgKHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Mzc0NTpcdFx0XHRzcHRlcCA9IGt2bV90ZHBfbW11X2Zhc3RfcGZfZ2V0X2xhc3Rfc3B0ZXAodmNwdSwgZmF1bHQtXHUwMDNlZ2ZuLCBcdTAwMjZzcHRlKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzc0Ni1cdFx0ZWxzZVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9Mzg1MT1zdGF0aWMgdm9pZCBtbXVfZnJlZV9yb290X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBocGFfdCAqcm9vdF9ocGEsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zODYyLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozODYzOlx0aWYgKGlzX3RkcF9tbXVfcGFnZShzcCkpIHtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzg2NC1cdFx0bG9ja2RlcF9hc3NlcnRfaGVsZF9yZWFkKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM4NjU6XHRcdGt2bV90ZHBfbW11X3B1dF9yb290KGt2bSwgc3ApO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zODY2LVx0fSBlbHNlIHtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTM4NzY9dm9pZCBrdm1fbW11X2ZyZWVfcm9vdHMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdSAqbW11LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzg3OC17XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM4Nzk6XHRib29sIGlzX3RkcF9tbXUgPSB0ZHBfbW11X2VuYWJsZWQgXHUwMDI2XHUwMDI2IG1tdS1cdTAwM2Vyb290X3JvbGUuZGlyZWN0O1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zODgwLVx0aW50IGk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zOTAxLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozOTAyOlx0aWYgKGlzX3RkcF9tbXUpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM5MDMtXHRcdHJlYWRfbG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzkzMC1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MzkzMTpcdGlmIChpc190ZHBfbW11KSB7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM5MzItXHRcdHJlYWRfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0zOTg2PXN0YXRpYyBpbnQgbW11X2FsbG9jX2RpcmVjdF9yb290cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zOTkzLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozOTk0Olx0aWYgKHRkcF9tbXVfZW5hYmxlZCkge1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zOTk1LVx0XHRpZiAoa3ZtX2hhc19taXJyb3JlZF90ZHAodmNwdS1cdTAwM2Vrdm0pIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zOTk2LVx0XHQgICAgIVZBTElEX1BBR0UobW11LVx1MDAzZW1pcnJvcl9yb290X2hwYSkpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM5OTc6XHRcdFx0a3ZtX3RkcF9tbXVfYWxsb2Nfcm9vdCh2Y3B1LCB0cnVlKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Mzk5ODpcdFx0a3ZtX3RkcF9tbXVfYWxsb2Nfcm9vdCh2Y3B1LCBmYWxzZSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM5OTktXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDQ2Mj1zdGF0aWMgaW50IGdldF9zcHRlc19sb2NrbGVzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBhZGRyLCB1NjQgKnNwdGVzLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDQ2OC1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDQ2OTpcdGlmIChpc190ZHBfbW11X2FjdGl2ZSh2Y3B1KSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDQ3MDpcdFx0bGVhZiA9IGt2bV90ZHBfbW11X2dldF93YWxrKHZjcHUsIGFkZHIsIHNwdGVzLCByb290X2xldmVsKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDQ3MS1cdGVsc2Vcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ5MzI9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9oYW5kbGVfcGFnZV9mYXVsdCk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTM0LSNpZmRlZiBDT05GSUdfWDg2XzY0XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ5MzU6c3RhdGljIGludCBrdm1fdGRwX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDkzNi1cdFx0XHRcdCAgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ5NjAtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ5NjE6XHRyID0ga3ZtX3RkcF9tbXVfbWFwKHZjcHUsIGZhdWx0KTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDk2Mi1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ5NzA9c3RhdGljIGludCBrdm1fdGRwX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDk3Mi0jaWZkZWYgQ09ORklHX1g4Nl82NFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0OTczOlx0aWYgKHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDk3NDpcdFx0cmV0dXJuIGt2bV90ZHBfbW11X3BhZ2VfZmF1bHQodmNwdSwgZmF1bHQpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTc1LSNlbmRpZlxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTE2Nz1zdGF0aWMgdm9pZCBrdm1fYXNzZXJ0X2dtZW1faW52YWxpZGF0ZV9sb2NrX2hlbGQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNzgtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUxNzk6aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE4MC17XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjA5LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MjEwOlx0aWYgKEtWTV9CVUdfT04oIXRkcF9tbXVfZW5hYmxlZCwga3ZtKSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTIxMS1cdFx0cmV0dXJuIC1FSU87XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjM0LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MjM1Olx0XHRyID0ga3ZtX3RkcF9tbXVfbWFwKHZjcHUsIFx1MDAyNmZhdWx0KTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTIzNi1cdH0gd2hpbGUgKHIgPT0gUkVUX1BGX1JFVFJZKTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUyNDItfVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MjQzOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4pO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjQ0LSNlbmRpZlxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTk3OT1zdGF0aWMgdW5pb24ga3ZtX21tdV9wYWdlX3JvbGVcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTk4MDprdm1fY2FsY190ZHBfbW11X3Jvb3RfcGFnZV9yb2xlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk4MS1cdFx0XHRcdHVuaW9uIGt2bV9jcHVfcm9sZSBjcHVfcm9sZSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYwMDItXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjYwMDM6c3RhdGljIHZvaWQgaW5pdF9rdm1fdGRwX21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYwMDQtXHRcdFx0ICAgICB1bmlvbiBrdm1fY3B1X3JvbGUgY3B1X3JvbGUpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MDA2LVx0c3RydWN0IGt2bV9tbXUgKmNvbnRleHQgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gucm9vdF9tbXU7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjYwMDc6XHR1bmlvbiBrdm1fbW11X3BhZ2Vfcm9sZSByb290X3JvbGUgPSBrdm1fY2FsY190ZHBfbW11X3Jvb3RfcGFnZV9yb2xlKHZjcHUsIGNwdV9yb2xlKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjAwOC1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTYxNzM9dm9pZCBrdm1faW5pdF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjE4MS1cdFx0aWYgKHRkcF9lbmFibGVkKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2MTgyOlx0XHRcdGluaXRfa3ZtX3RkcF9tbXUodmNwdSwgY3B1X3JvbGUpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTgzLVx0XHRlbHNlXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02MjE5PWludCBrdm1fbW11X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjI0NC1cdCAqIHN0YWxlIGVudHJpZXMuICBGbHVzaGluZyBvbiBhbGxvYyBhbHNvIGFsbG93cyBLVk0gdG8gc2tpcCB0aGUgVExCXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjYyNDU6XHQgKiBmbHVzaCB3aGVuIGZyZWVpbmcgYSByb290IChzZWUga3ZtX3RkcF9tbXVfcHV0X3Jvb3QoKSkuXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYyNDYtXHQgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY3NzU9dm9pZCBrdm1fY29uZmlndXJlX21tdShib29sIGVuYWJsZV90ZHAsIGludCB0ZHBfZm9yY2VkX3Jvb3RfbGV2ZWwsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NzgyLSNpZmRlZiBDT05GSUdfWDg2XzY0XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY3ODM6XHR0ZHBfbW11X2VuYWJsZWQgPSB0ZHBfbW11X2FsbG93ZWQgXHUwMDI2XHUwMDI2IHRkcF9lbmFibGVkO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02Nzg0LSNlbmRpZlxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9Njk1Nj1zdGF0aWMgdm9pZCBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2Zyb250X2hhbGYoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjk3Ny1cdCAqL1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2OTc4Olx0aWYgKHRkcF9tbXVfZW5hYmxlZCkge1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02OTc5LVx0XHQvKlxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjk4Mi1cdFx0ICovXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY5ODM6XHRcdGt2bV90ZHBfbW11X2ludmFsaWRhdGVfcm9vdHMoa3ZtLCBLVk1fRElSRUNUX1JPT1RTKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjk4NC1cdH1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY5OTk9c3RhdGljIHZvaWQgX19rdm1fbW11X3phcF9hbGxfZmFzdF9iYWNrX2hhbGYoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzAxMS1cdCAqL1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MDEyOlx0aWYgKHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzAxMzpcdFx0a3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKGt2bSwgdHJ1ZSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcwMTQtfVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzAzND1pbnQga3ZtX21tdV9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcwNDMtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjcwNDQ6XHRpZiAodGRwX21tdV9lbmFibGVkKSB7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjcwNDU6XHRcdGt2bV9tbXVfaW5pdF90ZHBfbW11KGt2bSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcwNDYtXHR9IGVsc2Uge1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzA2OT12b2lkIGt2bV9tbXVfdW5pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcwNzItXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjcwNzM6XHRpZiAodGRwX21tdV9lbmFibGVkKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MDc0Olx0XHRrdm1fbW11X3VuaW5pdF90ZHBfbW11KGt2bSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcwNzUtXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz03MTEzPXZvaWQga3ZtX3phcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm5fc3RhcnQsIGdmbl90IGdmbl9lbmQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTI3LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MTI4Olx0aWYgKHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzEyOTpcdFx0Zmx1c2ggPSBrdm1fdGRwX21tdV96YXBfbGVhZnMoa3ZtLCBnZm5fc3RhcnQsIGdmbl9lbmQsIGZsdXNoKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzEzMC1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTcxNDc9dm9pZCBrdm1fbW11X3Nsb3RfcmVtb3ZlX3dyaXRlX2FjY2VzcyhzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTU3LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MTU4Olx0aWYgKHRkcF9tbXVfZW5hYmxlZCkge1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTU5LVx0XHRyZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzE2MDpcdFx0a3ZtX3RkcF9tbXVfd3Jwcm90X3Nsb3Qoa3ZtLCBtZW1zbG90LCBzdGFydF9sZXZlbCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcxNjEtXHRcdHJlYWRfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz03Mzk1PXZvaWQga3ZtX21tdV90cnlfc3BsaXRfaHVnZV9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03Mzk5LXtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzQwMDpcdGlmICghdGRwX21tdV9lbmFibGVkKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NDAxLVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NDA1LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3NDA2Olx0a3ZtX3RkcF9tbXVfdHJ5X3NwbGl0X2h1Z2VfcGFnZXMoa3ZtLCBtZW1zbG90LCBzdGFydCwgZW5kLCB0YXJnZXRfbGV2ZWwsIGZhbHNlKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzQwNy1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTc0MTQ9dm9pZCBrdm1fbW11X3Nsb3RfdHJ5X3NwbGl0X2h1Z2VfcGFnZXMoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzQyMC1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzQyMTpcdGlmICghdGRwX21tdV9lbmFibGVkKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NDIyLVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NDMwLVx0cmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc0MzE6XHRrdm1fdGRwX21tdV90cnlfc3BsaXRfaHVnZV9wYWdlcyhrdm0sIG1lbXNsb3QsIHN0YXJ0LCBlbmQsIHRhcmdldF9sZXZlbCwgdHJ1ZSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc0MzItXHRyZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzQ5OT12b2lkIGt2bV9tbXVfcmVjb3Zlcl9odWdlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc1MDctXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc1MDg6XHRpZiAodGRwX21tdV9lbmFibGVkKSB7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc1MDktXHRcdHJlYWRfbG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3NTEwOlx0XHRrdm1fdGRwX21tdV9yZWNvdmVyX2h1Z2VfcGFnZXMoa3ZtLCBzbG90KTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzUxMS1cdFx0cmVhZF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTc1MTU9dm9pZCBrdm1fbW11X3Nsb3RfbGVhZl9jbGVhcl9kaXJ0eShzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NTI3LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3NTI4Olx0aWYgKHRkcF9tbXVfZW5hYmxlZCkge1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NTI5LVx0XHRyZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzUzMDpcdFx0a3ZtX3RkcF9tbXVfY2xlYXJfZGlydHlfc2xvdChrdm0sIG1lbXNsb3QpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NTMxLVx0XHRyZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzU0ND1zdGF0aWMgdm9pZCBrdm1fbW11X3phcF9hbGwoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzU2Mi1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzU2MzpcdGlmICh0ZHBfbW11X2VuYWJsZWQpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc1NjQ6XHRcdGt2bV90ZHBfbW11X3phcF9hbGwoa3ZtKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzU2NS1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTc3NzA9dm9pZCBfX2luaXQga3ZtX21tdV94ODZfbW9kdWxlX2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc3NzktXHQgKi9cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Nzc4MDpcdHRkcF9tbXVfYWxsb3dlZCA9IHRkcF9tbXVfZW5hYmxlZDtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzc4MS1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTc4MjM9dm9pZCBrdm1fbW11X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzgyNS1cdGt2bV9tbXVfdW5sb2FkKHZjcHUpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3ODI2Olx0aWYgKHRkcF9tbXVfZW5hYmxlZCkge1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03ODI3LVx0XHRyZWFkX2xvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzkzMz1zdGF0aWMgdm9pZCBrdm1fcmVjb3Zlcl9ueF9odWdlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc5MzYtI2lmZGVmIENPTkZJR19YODZfNjRcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzkzNzpcdGNvbnN0IGJvb2wgaXNfdGRwX21tdSA9IG1tdV90eXBlID09IEtWTV9URFBfTU1VO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3OTM4Olx0c3BpbmxvY2tfdCAqdGRwX21tdV9wYWdlc19sb2NrID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gudGRwX21tdV9wYWdlc19sb2NrO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03OTM5LSNlbHNlXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc5NDA6XHRjb25zdCBib29sIGlzX3RkcF9tbXUgPSBmYWxzZTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Nzk0MTpcdHNwaW5sb2NrX3QgKnRkcF9tbXVfcGFnZXNfbG9jayA9IE5VTEw7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc5NDItI2VuZGlmXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03OTUyLVx0cmN1X2lkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Nzk1MzpcdGlmIChpc190ZHBfbW11KVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03OTU0LVx0XHRyZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc5NjUtXHRmb3IgKCA7IHRvX3phcDsgLS10b196YXApIHtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Nzk2NjpcdFx0aWYgKGlzX3RkcF9tbXUpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc5Njc6XHRcdFx0c3Bpbl9sb2NrKHRkcF9tbXVfcGFnZXNfbG9jayk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc5NjgtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc5NjktXHRcdGlmIChsaXN0X2VtcHR5KG54X2h1Z2VfcGFnZXMpKSB7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc5NzA6XHRcdFx0aWYgKGlzX3RkcF9tbXUpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc5NzE6XHRcdFx0XHRzcGluX3VubG9jayh0ZHBfbW11X3BhZ2VzX2xvY2spO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03OTcyLVx0XHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzk4OS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Nzk5MDpcdFx0aWYgKGlzX3RkcF9tbXUpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc5OTE6XHRcdFx0c3Bpbl91bmxvY2sodGRwX21tdV9wYWdlc19sb2NrKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzk5Mi1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTgwMDAtXHRcdGlmICgha3ZtX21tdV9zcF9kaXJ0eV9sb2dnaW5nX2VuYWJsZWQoa3ZtLCBzcCkpIHtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6ODAwMTpcdFx0XHRpZiAoaXNfdGRwX21tdSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6ODAwMjpcdFx0XHRcdGZsdXNoIHw9IGt2bV90ZHBfbW11X3phcF9wb3NzaWJsZV9ueF9odWdlX3BhZ2Uoa3ZtLCBzcCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTgwMDMtXHRcdFx0ZWxzZVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODAxMy1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6ODAxNDpcdFx0XHRpZiAoaXNfdGRwX21tdSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODAxNS1cdFx0XHRcdGNvbmRfcmVzY2hlZF9yd2xvY2tfcmVhZChcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODAyNi1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6ODAyNzpcdGlmIChpc190ZHBfbW11KVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy04MDI4LVx0XHRyZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmg9NDQ9c3RydWN0IGt2bV9tbXVfcGFnZSB7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaC01MS1cbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmg6NTI6XHRib29sIHRkcF9tbXVfcGFnZTtcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmgtNTMtXHRib29sIHVuc3luYztcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTU3LVx0XHQvKiBPbmx5IGFjY2Vzc2VkIHVuZGVyIHNsb3RzX2xvY2suICAqL1xuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaDo1ODpcdFx0Ym9vbCB0ZHBfbW11X3NjaGVkdWxlZF9yb290X3RvX3phcDtcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmgtNTktXHR9O1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmgtOTMtXHRcdGludCByb290X2NvdW50O1xuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaDo5NDpcdFx0cmVmY291bnRfdCB0ZHBfbW11X3Jvb3RfY291bnQ7XG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTk1LVx0fTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oPTIyNj1zdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQge1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmgtMjUxLVx0ICogTWF4aW11bSBwYWdlIHNpemUgdGhhdCBjYW4gYmUgY3JlYXRlZCBmb3IgdGhpcyBmYXVsdDsgaW5wdXQgdG9cbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmg6MjUyOlx0ICogRk5BTUUoZmV0Y2gpLCBkaXJlY3RfbWFwKCkgYW5kIGt2bV90ZHBfbW11X21hcCgpLlxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaC0yNTMtXHQgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdXRyYWNlLmg9Mzk4PVRSQUNFX0VWRU5UKFxuYXJjaC94ODYva3ZtL21tdS9tbXV0cmFjZS5oOjM5OTpcdGt2bV90ZHBfbW11X3NwdGVfY2hhbmdlZCxcbmFyY2gveDg2L2t2bS9tbXUvbW11dHJhY2UuaC00MDAtXHRUUF9QUk9UTyhpbnQgYXNfaWQsIGdmbl90IGdmbiwgaW50IGxldmVsLCB1NjQgb2xkX3NwdGUsIHU2NCBuZXdfc3B0ZSksXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jPTEyPXN0YXRpYyB2b2lkIHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xNS1cdFx0U1BURV9JTkRFWCgoaXRlci1cdTAwM2VnZm4gfCBpdGVyLVx1MDAzZWdmbl9iaXRzKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCwgaXRlci1cdTAwM2VsZXZlbCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM6MTY6XHRpdGVyLVx1MDAzZW9sZF9zcHRlID0ga3ZtX3RkcF9tbXVfcmVhZF9zcHRlKGl0ZXItXHUwMDNlc3B0ZXApO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTE3LX1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM9ODA9c3RhdGljIGJvb2wgdHJ5X3N0ZXBfZG93bihzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTkwLVx0ICovXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM6OTE6XHRpdGVyLVx1MDAzZW9sZF9zcHRlID0ga3ZtX3RkcF9tbXVfcmVhZF9zcHRlKGl0ZXItXHUwMDNlc3B0ZXApO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTkyLVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYz0xMTI9c3RhdGljIGJvb2wgdHJ5X3N0ZXBfc2lkZShzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTEyNC1cdGl0ZXItXHUwMDNlc3B0ZXAmIzQzOyYjNDM7O1xuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jOjEyNTpcdGl0ZXItXHUwMDNlb2xkX3NwdGUgPSBrdm1fdGRwX21tdV9yZWFkX3NwdGUoaXRlci1cdTAwM2VzcHRlcCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtMTI2LVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0xNi0gKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaDoxNzpzdGF0aWMgaW5saW5lIHU2NCBrdm1fdGRwX21tdV9yZWFkX3NwdGUodGRwX3B0ZXBfdCBzcHRlcClcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0xOC17XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTI4LSAqL1xuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oOjI5OnN0YXRpYyBpbmxpbmUgdTY0IGt2bV90ZHBfbW11X3dyaXRlX3NwdGVfYXRvbWljKHRkcF9wdGVwX3Qgc3B0ZXAsIHU2NCBuZXdfc3B0ZSlcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0zMC17XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTM0LVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oOjM1OnN0YXRpYyBpbmxpbmUgdTY0IHRkcF9tbXVfY2xlYXJfc3B0ZV9iaXRzX2F0b21pYyh0ZHBfcHRlcF90IHNwdGVwLCB1NjQgbWFzaylcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0zNi17XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTQxLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oOjQyOnN0YXRpYyBpbmxpbmUgdm9pZCBfX2t2bV90ZHBfbW11X3dyaXRlX3NwdGUodGRwX3B0ZXBfdCBzcHRlcCwgdTY0IG5ld19zcHRlKVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTQzLXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtNTItICovXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6NTM6c3RhdGljIGlubGluZSBib29sIGt2bV90ZHBfbW11X3NwdGVfbmVlZF9hdG9taWNfdXBkYXRlKHU2NCBvbGRfc3B0ZSwgaW50IGxldmVsKVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTU0LXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtNTktXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6NjA6c3RhdGljIGlubGluZSB1NjQga3ZtX3RkcF9tbXVfd3JpdGVfc3B0ZSh0ZHBfcHRlcF90IHNwdGVwLCB1NjQgb2xkX3NwdGUsXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtNjEtXHRcdFx0XHRcdCB1NjQgbmV3X3NwdGUsIGludCBsZXZlbClcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC02Mi17XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6NjM6XHRpZiAoa3ZtX3RkcF9tbXVfc3B0ZV9uZWVkX2F0b21pY191cGRhdGUob2xkX3NwdGUsIGxldmVsKSlcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaDo2NDpcdFx0cmV0dXJuIGt2bV90ZHBfbW11X3dyaXRlX3NwdGVfYXRvbWljKHNwdGVwLCBuZXdfc3B0ZSk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtNjUtXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6NjY6XHRfX2t2bV90ZHBfbW11X3dyaXRlX3NwdGUoc3B0ZXAsIG5ld19zcHRlKTtcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC02Ny1cdHJldHVybiBvbGRfc3B0ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtNjktXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6NzA6c3RhdGljIGlubGluZSB1NjQgdGRwX21tdV9jbGVhcl9zcHRlX2JpdHModGRwX3B0ZXBfdCBzcHRlcCwgdTY0IG9sZF9zcHRlLFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTcxLVx0XHRcdFx0XHQgIHU2NCBtYXNrLCBpbnQgbGV2ZWwpXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtNzIte1xuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oOjczOlx0aWYgKGt2bV90ZHBfbW11X3NwdGVfbmVlZF9hdG9taWNfdXBkYXRlKG9sZF9zcHRlLCBsZXZlbCkpXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6NzQ6XHRcdHJldHVybiB0ZHBfbW11X2NsZWFyX3NwdGVfYml0c19hdG9taWMoc3B0ZXAsIG1hc2spO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTc1LVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oOjc2Olx0X19rdm1fdGRwX21tdV93cml0ZV9zcHRlKHNwdGVwLCBvbGRfc3B0ZSBcdTAwMjYgfm1hc2spO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTc3LVx0cmV0dXJuIG9sZF9zcHRlO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaD0xMjY9c3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50IHtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtMTQ0LVx0Zm9yICh0ZHBfaXRlcl9zdGFydChcdTAwMjZpdGVyLCByb290LCBtaW5fbGV2ZWwsIDAsIDApO1x0XHRcXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oOjE0NTpcdFx0aXRlci52YWxpZCBcdTAwMjZcdTAwMjYgaXRlci5nZm4gXHUwMDNjIHRkcF9tbXVfbWF4X2dmbl9leGNsdXNpdmUoKTtcdFxcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtMTQ2LVx0XHR0ZHBfaXRlcl9uZXh0KFx1MDAyNml0ZXIpKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTctI2luY2x1ZGUgXCYjMzQ7dGRwX2l0ZXIuaFwmIzM0O1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6ODojaW5jbHVkZSBcJiMzNDt0ZHBfbW11LmhcJiMzNDtcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTktI2luY2x1ZGUgXCYjMzQ7c3B0ZS5oXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTQtLyogSW5pdGlhbGl6ZXMgdGhlIFREUCBNTVUgZm9yIHRoZSBWTSwgaWYgZW5hYmxlZC4gKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjE1OnZvaWQga3ZtX21tdV9pbml0X3RkcF9tbXUoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTYte1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTc6XHRJTklUX0xJU1RfSEVBRChcdTAwMjZrdm0tXHUwMDNlYXJjaC50ZHBfbW11X3Jvb3RzKTtcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjE4Olx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudGRwX21tdV9wYWdlc19sb2NrKTtcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTE5LX1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz0yMj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wga3ZtX2xvY2tkZXBfYXNzZXJ0X21tdV9sb2NrX2hlbGQoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTMyLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MzM6dm9pZCBrdm1fbW11X3VuaW5pdF90ZHBfbW11KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTM0LXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0zOS1cdCAqL1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6NDA6XHRrdm1fdGRwX21tdV9pbnZhbGlkYXRlX3Jvb3RzKGt2bSwgS1ZNX1ZBTElEX1JPT1RTKTtcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjQxOlx0a3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKGt2bSwgZmFsc2UpO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNDItXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy00My0jaWZkZWYgQ09ORklHX0tWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjQ0Olx0S1ZNX01NVV9XQVJOX09OKGF0b21pYzY0X3JlYWQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudGRwX21tdV9wYWdlcykpO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNDUtI2VuZGlmXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo0NjpcdFdBUk5fT04oIWxpc3RfZW1wdHkoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudGRwX21tdV9yb290cykpO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNDctXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNTUtXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo1NjpzdGF0aWMgdm9pZCBfX3RkcF9tbXVfZnJlZV9zcChzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcClcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTU3LXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy02MS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjYyOnN0YXRpYyB2b2lkIHRkcF9tbXVfZnJlZV91bnVzZWRfc3Aoc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy02My17XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy02NC1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzcC1cdTAwM2VleHRlcm5hbF9zcHQpO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6NjU6XHRfX3RkcF9tbXVfZnJlZV9zcChzcCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy02Ni19XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNzUtICovXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo3NjpzdGF0aWMgdm9pZCB0ZHBfbW11X2ZyZWVfc3BfcmN1X2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTc3LXtcbi0tXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc3MwoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IERpdmluZyBpbnRvIHRoZSBURFAgTU1VKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcuIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIG1ldGljdWxvdXNseSByZXZpZXcgZXZlcnkgZGV0YWlsIG9mIHRoZSBwYXRjaCBpdHNlbGYuIFRoZW4sIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIFRoYXQgbWVhbnMgYSBkZWVwIGRpdmUgaW50byB0aGUgcmVsZXZhbnQgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNgIGFuZCBgYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jYCBmaWxlcy4gSSBuZWVkIHRvIHNlZSBob3cgdGhlc2UgY2hhbmdlcyBpbnRlZ3JhdGUgd2l0aCB0aGUgZXhpc3RpbmcgVERQIE1NVSBsb2dpYywgaG93IHRoZXkgbWlnaHQgYWZmZWN0IHRoZSBleGlzdGluZyBmbG93cywgYW5kIHdoYXQgbmV3IGJlaGF2aW9yIHRoZXkgaW50cm9kdWNlLiBObyBza2ltbWluZzsgdGhpcyBuZWVkcyBhIGZ1bGwsIHRob3VnaHRmdWwgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkyMDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gOTIxOlx0XHR9XG4gOTIyOlx0XG4gOTIzOlx0XHRyZXR1cm4gdHJ1ZTtcbiA5MjQ6XHR9XG4gOTI1Olx0XG4gOTI2Olx0c3RhdGljIGJvb2wgdGRwX21tdV96YXBfY29tcGxldGVkX2VtcHR5X2xlYWZfcHQoc3RydWN0IGt2bSAqa3ZtLFxuIDkyNzpcdFx0XHRcdFx0XHRcdHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQsXG4gOTI4Olx0XHRcdFx0XHRcdFx0Z2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCxcbiA5Mjk6XHRcdFx0XHRcdFx0XHR0ZHBfcHRlcF90IHphcHBlZF9sZWFmX3B0KVxuIDkzMDpcdHtcbiA5MzE6XHRcdHN0cnVjdCBrdm1fbW11X3BhZ2UgKmNoaWxkX3NwO1xuIDkzMjpcdFxuIDkzMzpcdFx0aWYgKGV2ZW50LVx1MDAzZWxldmVsICE9IFBHX0xFVkVMXzJNIHx8XG4gOTM0Olx0XHQgICAgIWlzX3NoYWRvd19wcmVzZW50X3B0ZShldmVudC1cdTAwM2VvbGRfc3B0ZSkgfHxcbiA5MzU6XHRcdCAgICBpc19sYXN0X3NwdGUoZXZlbnQtXHUwMDNlb2xkX3NwdGUsIGV2ZW50LVx1MDAzZWxldmVsKSlcbiA5MzY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDkzNzpcdFxuIDkzODpcdFx0aWYgKGV2ZW50LVx1MDAzZWdmbiBcdTAwM2Mgc3RhcnQgfHxcbiA5Mzk6XHRcdCAgICBldmVudC1cdTAwM2VnZm4gJiM0MzsgS1ZNX1BBR0VTX1BFUl9IUEFHRShldmVudC1cdTAwM2VsZXZlbCkgXHUwMDNlIGVuZClcbiA5NDA6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDk0MTpcdFxuIDk0MjpcdFx0LyogTGVhdmUgcHJvZHVjdGl2ZSBsZWFmIHRhYmxlcyBpbiBwbGFjZSB0byBhdm9pZCByZWZhdWx0IGNodXJuLiAqL1xuIDk0MzpcdFx0aWYgKHphcHBlZF9sZWFmX3B0ID09IGV2ZW50LVx1MDAzZXNwdGVwKVxuIDk0NDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gOTQ1Olx0XG4gOTQ2Olx0XHRjaGlsZF9zcCA9IHNwdGVfdG9fY2hpbGRfc3AoZXZlbnQtXHUwMDNlb2xkX3NwdGUpO1xuIDk0NzpcdFx0aWYgKGlzX21pcnJvcl9zcChjaGlsZF9zcCkpXG4gOTQ4Olx0XHRcdHJldHVybiBmYWxzZTtcbiA5NDk6XHRcbiA5NTA6XHRcdGlmIChjaGlsZF9zcC1cdTAwM2Vyb2xlLmxldmVsICE9IFBHX0xFVkVMXzRLKVxuIDk1MTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gOTUyOlx0XG4gOTUzOlx0XHR0ZHBfbW11X3NldF9zcHRlKGt2bSwgZXZlbnQtXHUwMDNlc3B0ZXAsIGV2ZW50LVx1MDAzZW9sZF9zcHRlLFxuIDk1NDpcdFx0XHRcdCBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSwgZXZlbnQtXHUwMDNlZ2ZuLCBldmVudC1cdTAwM2VsZXZlbCk7XG4gOTU1Olx0XHRyZXR1cm4gdHJ1ZTtcbiA5NTY6XHR9XG4gOTU3Olx0XG4gOTU4Olx0LypcbiA5NTk6XHQgKiBJZiBjYW5feWllbGQgaXMgdHJ1ZSwgd2lsbCByZWxlYXNlIHRoZSBNTVUgbG9jayBhbmQgcmVzY2hlZHVsZSBpZiB0aGVcbiA5NjA6XHQgKiBzY2hlZHVsZXIgbmVlZHMgdGhlIENQVSBvciB0aGVyZSBpcyBjb250ZW50aW9uIG9uIHRoZSBNTVUgbG9jay4gSWYgdGhpc1xuIDk2MTpcdCAqIGZ1bmN0aW9uIGNhbm5vdCB5aWVsZCwgaXQgd2lsbCBub3QgcmVsZWFzZSB0aGUgTU1VIGxvY2sgb3IgcmVzY2hlZHVsZSBhbmRcbiA5NjI6XHQgKiB0aGUgY2FsbGVyIG11c3QgZW5zdXJlIGl0IGRvZXMgbm90IHN1cHBseSB0b28gbGFyZ2UgYSBHRk4gcmFuZ2UsIG9yIHRoZVxuIDk2MzpcdCAqIG9wZXJhdGlvbiBjYW4gY2F1c2UgYSBzb2Z0IGxvY2t1cC5cbiA5NjQ6XHQgKi9cbiA5NjU6XHRzdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXG4gOTY2Olx0XHRcdFx0ICAgICAgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgYm9vbCBjYW5feWllbGQsIGJvb2wgZmx1c2gpXG4gOTY3Olx0e1xuIDk2ODpcdFx0c3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50IGV2ZW50ID0ge307XG4gOTY5Olx0XHRzdHJ1Y3QgdGRwX2l0ZXIgaXRlcjtcbiA5NzA6XHRcdHRkcF9wdGVwX3QgemFwcGVkX2xlYWZfcHQgPSBOVUxMO1xuIDk3MTpcdFx0Ym9vbCByZW1vdmVkX3NwID0gZmFsc2U7XG4gOTcyOlx0XG4gOTczOlx0XHRlbmQgPSBtaW4oZW5kLCB0ZHBfbW11X21heF9nZm5fZXhjbHVzaXZlKCkpO1xuIDk3NDpcdFxuIDk3NTpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuIDk3NjpcdFxuIDk3NzpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDk3ODpcdFxuIDk3OTpcdFx0dGRwX2l0ZXJfc3RhcnQoXHUwMDI2aXRlciwgcm9vdCwgUEdfTEVWRUxfNEssIHN0YXJ0LFxuIDk4MDpcdFx0XHQgICAgICAga3ZtX2dmbl9yb290X2JpdHMoa3ZtLCByb290KSk7XG4gOTgxOlx0XHR3aGlsZSAoaXRlci52YWxpZCBcdTAwMjZcdTAwMjYgaXRlci5nZm4gXHUwMDNjIGVuZCkge1xuIDk4MjpcdFx0XHRpZiAoY2FuX3lpZWxkIFx1MDAyNlx1MDAyNlxuIDk4MzpcdFx0XHQgICAgdGRwX21tdV9pdGVyX2NvbmRfcmVzY2hlZChrdm0sIFx1MDAyNml0ZXIsIGZsdXNoLCBmYWxzZSkpIHtcbiA5ODQ6XHRcdFx0XHRmbHVzaCA9IGZhbHNlO1xuIDk4NTpcdFx0XHRcdHRkcF9pdGVyX25leHQoXHUwMDI2aXRlcik7XG4gOTg2Olx0XHRcdFx0Y29udGludWU7XG4gOTg3Olx0XHRcdH1cbiA5ODg6XHRcbiA5ODk6XHRcdFx0aWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLm9sZF9zcHRlKSBcdTAwMjZcdTAwMjZcbiA5OTA6XHRcdFx0ICAgIGlzX2xhc3Rfc3B0ZShpdGVyLm9sZF9zcHRlLCBpdGVyLmxldmVsKSkge1xuIDk5MTpcdFx0XHRcdGlmIChpdGVyLmxldmVsID09IFBHX0xFVkVMXzRLKSB7XG4gOTkyOlx0XHRcdFx0XHRzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDtcbiA5OTM6XHRcbiA5OTQ6XHRcdFx0XHRcdHNwID0gc3B0ZXBfdG9fc3AocmN1X2RlcmVmZXJlbmNlKGl0ZXIuc3B0ZXApKTtcbiA5OTU6XHRcdFx0XHRcdHphcHBlZF9sZWFmX3B0ID0gc3AtXHUwMDNlcHRlcDtcbiA5OTY6XHRcdFx0XHR9XG4gOTk3Olx0XG4gOTk4Olx0XHRcdFx0dGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgXHUwMDI2aXRlcixcbiA5OTk6XHRcdFx0XHRcdFx0ICAgICAgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUpO1xuMTAwMDpcdFxuMTAwMTpcdFx0XHRcdC8qXG4xMDAyOlx0XHRcdFx0ICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2VzbiYjMzk7dCByZXF1aXJlIGEgVExCIGZsdXNoLFxuMTAwMzpcdFx0XHRcdCAqIHNlZSBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoKSBmb3IgZGV0YWlscy5cbjEwMDQ6XHRcdFx0XHQgKi9cbjEwMDU6XHRcdFx0XHRpZiAoIXJvb3QtXHUwMDNlcm9sZS5pbnZhbGlkKVxuMTAwNjpcdFx0XHRcdFx0Zmx1c2ggPSB0cnVlO1xuMTAwNzpcdFx0XHR9XG4xMDA4Olx0XG4xMDA5Olx0XHRcdHRkcF9pdGVyX25leHRfcG9zdF9vcmRlcihcdTAwMjZpdGVyLCBcdTAwMjZldmVudCk7XG4xMDEwOlx0XHRcdGlmIChldmVudC52YWxpZCBcdTAwMjZcdTAwMjZcbjEwMTE6XHRcdFx0ICAgIHRkcF9tbXVfemFwX2NvbXBsZXRlZF9lbXB0eV9sZWFmX3B0KGt2bSwgXHUwMDI2ZXZlbnQsIHN0YXJ0LFxuMTAxMjpcdFx0XHRcdFx0XHRcdFx0ZW5kLCB6YXBwZWRfbGVhZl9wdCkpIHtcbjEwMTM6XHRcdFx0XHRpZiAoIXJvb3QtXHUwMDNlcm9sZS5pbnZhbGlkKVxuMTAxNDpcdFx0XHRcdFx0Zmx1c2ggPSB0cnVlO1xuMTAxNTpcdFx0XHRcdHJlbW92ZWRfc3AgPSB0cnVlO1xuMTAxNjpcdFx0XHR9XG4xMDE3Olx0XHR9XG4xMDE4Olx0XG4xMDE5Olx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjYyOQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHRkcF9tbXUuY2AqKgoKT2theSwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgS1ZNJiMzOTtzIFRyYW5zbGF0aW9uIExvb2thc2lkZSBCdWZmZXIgKFRMQikgYW5kIGl0cyBtYW5hZ2VtZW50IGluIHRoZSBjb250ZXh0IG9mIG5lc3RlZCBwYWdpbmcgb24geDg2LCB3aGljaCwgYXMgd2Uga25vdywgaXMgY3J1Y2lhbCBmb3IgdmlydHVhbGl6YXRpb24gcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5LiBXZSBuZWVkIHRvIHplcm8gaW4gb24gbGluZXMgMTAyMC0xMDUwIHdpdGhpbiB0aGUgYGFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jYCBmaWxlLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgc2VjdGlvbiBsaWtlbHkgZGVhbHMgd2l0aCBhIHNwZWNpZmljIGFzcGVjdCBvZiB0aGUgbmVzdGVkIHBhZ2luZyBzZXR1cCwgcGVyaGFwcyByZWxhdGVkIHRvIGludmFsaWRhdGluZyBUTEIgZW50cmllcywgaGFuZGxpbmcgcGFnZSBmYXVsdHMsIG9yIHBvdGVudGlhbGx5IGV2ZW4gbWFuYWdpbmcgdGhlIHNoYWRvdyBwYWdlIHRhYmxlcy4gCgpHaXZlbiB0aGUgZmlsZSBuYW1lLCBpdCYjMzk7cyB2ZXJ5IGxpa2VseSB0aGlzIGludm9sdmVzIHRoZSAmIzM0O1RyYW5zbGF0ZSB0byBQaHlzaWNhbCAoVERQKSBNTVUmIzM0OyBmdW5jdGlvbmFsaXR5LCBub3QgdGhlIHN0YW5kYXJkIHNoYWRvdyBwYWdlIHRhYmxlIG1hbmFnZW1lbnQuIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGF0IHNlY3Rpb24gd2l0aCBhbiBleWUgZm9yIGFueSBpbnRlcmVzdGluZyBkYXRhIHN0cnVjdHVyZXMgb3IgZnVuY3Rpb25zIHRoYXQgbWlnaHQgcHJvdmlkZSBpbnNpZ2h0IGludG8gaG93IHRoZSBndWVzdCYjMzk7cyBNTVUgb3BlcmF0aW9ucyBhcmUgdHJhbnNsYXRlZCB0byB0aGUgaG9zdCYjMzk7cyBwaHlzaWNhbCBtZW1vcnkgc3BhY2UuIFVuZGVyc3RhbmRpbmcgdGhpcyBwYXJ0IGlzIHZpdGFsIHRvIHRoZSBwZXJmb3JtYW5jZSBvZiBuZXN0ZWQgdmlydHVhbGl6YXRpb24uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBpbiB0aGUgY2FjaGUgZXZpY3Rpb24gcHJvY2VzcyB0byBmaW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMjA6XHRcdCAqIElmIGFueSBzaGFkb3cgcGFnZXMgd2VyZSByZW1vdmVkLCBzZXJ2aWNlIHBlbmRpbmcgVExCIGZsdXNoZXMgYmVmb3JlXG4xMDIxOlx0XHQgKiBkcm9wcGluZyBSQ1UgcHJvdGVjdGlvbiwgYXMgcmVxdWlyZWQgYnkgdGhlIFREUCBNTVUgaXRlcmF0b3IuXG4xMDIyOlx0XHQgKi9cbjEwMjM6XHRcdGlmIChyZW1vdmVkX3NwIFx1MDAyNlx1MDAyNiBmbHVzaCkge1xuMTAyNDpcdFx0XHRrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTtcbjEwMjU6XHRcdFx0Zmx1c2ggPSBmYWxzZTtcbjEwMjY6XHRcdH1cbjEwMjc6XHRcbjEwMjg6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTAyOTpcdFx0cmV0dXJuIGZsdXNoO1xuMTAzMDpcdH1cbjEwMzE6XHRcbjEwMzI6XHQvKlxuMTAzMzpcdCAqIFphcCBsZWFmIFNQVEVzIGZvciB0aGUgcmFuZ2Ugb2YgZ2ZucywgW3N0YXJ0LCBlbmQpLCBmb3IgYWxsICpWQUxJRCoqIHJvb3RzLlxuMTAzNDpcdCAqIFJldHVybnMgdHJ1ZSBpZiBhIFRMQiBmbHVzaCBpcyBuZWVkZWQgYmVmb3JlIHJlbGVhc2luZyB0aGUgTU1VIGxvY2ssIGkuZS4gaWZcbjEwMzU6XHQgKiBvbmUgb3IgbW9yZSBTUFRFcyB3ZXJlIHphcHBlZCBzaW5jZSB0aGUgTU1VIGxvY2sgd2FzIGxhc3QgYWNxdWlyZWQuXG4xMDM2Olx0ICovXG4xMDM3Olx0Ym9vbCBrdm1fdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGZsdXNoKVxuMTAzODpcdHtcbjEwMzk6XHRcdHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3Q7XG4xMDQwOlx0XG4xMDQxOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4xMDQyOlx0XHRmb3JfZWFjaF92YWxpZF90ZHBfbW11X3Jvb3RfeWllbGRfc2FmZShrdm0sIHJvb3QsIC0xKVxuMTA0MzpcdFx0XHRmbHVzaCA9IHRkcF9tbXVfemFwX2xlYWZzKGt2bSwgcm9vdCwgc3RhcnQsIGVuZCwgdHJ1ZSwgZmx1c2gpO1xuMTA0NDpcdFxuMTA0NTpcdFx0cmV0dXJuIGZsdXNoO1xuMTA0NjpcdH1cbjEwNDc6XHRcbjEwNDg6XHR2b2lkIGt2bV90ZHBfbW11X3phcF9hbGwoc3RydWN0IGt2bSAqa3ZtKVxuMTA0OTpcdHtcbjEwNTA6XHRcdHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3Q7XG4xMDUxOlx0XG4xMDUyOlx0XHQvKlxuMTA1MzpcdFx0ICogWmFwIGFsbCBkaXJlY3Qgcm9vdHMsIGluY2x1ZGluZyBpbnZhbGlkIGRpcmVjdCByb290cywgYXMgYWxsIGRpcmVjdFxuMTA1NDpcdFx0ICogU1BURXMgbXVzdCBiZSBkcm9wcGVkIGJlZm9yZSByZXR1cm5pbmcgdG8gdGhlIGNhbGxlci4gRm9yIFREWCwgbWlycm9yXG4xMDU1Olx0XHQgKiByb290cyBkb24mIzM5O3QgbmVlZCBoYW5kbGluZyBpbiByZXNwb25zZSB0byB0aGUgbW11IG5vdGlmaWVyICh0aGUgY2FsbGVyKS5cbjEwNTY6XHRcdCAqXG4xMDU3Olx0XHQgKiBaYXAgZGlyZWN0bHkgZXZlbiBpZiB0aGUgcm9vdCBpcyBhbHNvIGJlaW5nIHphcHBlZCBieSBhIGNvbmN1cnJlbnRcbjEwNTg6XHRcdCAqIFwmIzM0O2Zhc3QgemFwXCYjMzQ7LiAgV2Fsa2luZyB6YXBwZWQgdG9wLWxldmVsIFNQVEVzIGlzbiYjMzk7dCBhbGwgdGhhdCBleHBlbnNpdmVcbjEwNTk6XHRcdCAqIGFuZCBtbXVfbG9jayBpcyBhbHJlYWR5IGhlbGQsIHdoaWNoIG1lYW5zIHRoZSBvdGhlciB0aHJlYWQgaGFzIHlpZWxkZWQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NjgzCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEaXZpbmcgaW50byBgdGRwX2l0ZXIuY2AqKgoKQWxyaWdodCwgc28gdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGFuYWx5emUgYGFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBUd28tRGltZW5zaW9uYWwgUGFnaW5nIChURFApIGl0ZXJhdGlvbiBwcm9jZXNzLiBNeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgb24gaG93IHRoZSBjb2RlIGl0ZXJhdGVzIHRocm91Z2ggdGhlIFRyYW5zbGF0aW9uIExvb2thc2lkZSBCdWZmZXJzIChUTEJzKSBhbmQgcGFnZSB0YWJsZXMsIGxvb2tpbmcgZm9yIHNwZWNpZmljIGVudHJpZXMsIHBvc3NpYmx5IGZvciBpbnZhbGlkYXRpb24gb3IgbW9kaWZpY2F0aW9uLiBJJiMzOTtsbCBiZSBzZWFyY2hpbmcgZm9yIHRoZSBjb3JlIGFsZ29yaXRobXMgdXNlZCB0byB3YWxrIHRoZSBwYWdlIHRhYmxlcywgdGFraW5nIG5vdGUgb2YgaG93IHRoZXkmIzM5O3JlIG9wdGltaXplZCBmb3IgcGVyZm9ybWFuY2UuIEkgZXhwZWN0IHRvIHNlZSBzcGVjaWZpYyBpbnN0cnVjdGlvbiBzZXF1ZW5jZXMgdXNlZCB0byB0cmF2ZXJzZSB0aGUgRVBUIChFeHRlbmRlZCBQYWdlIFRhYmxlcykgYXMgZWZmaWNpZW50bHkgYXMgcG9zc2libGUuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGhhbmRsaW5nIG9mIG5lc3RlZCBwYWdlIHRhYmxlcyBpZiB0aGF0IGFwcGxpZXMuIEZ1cnRoZXJtb3JlLCBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcyBhbmQgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMsIHN1Y2ggYXMgdGhlIHVzZSBvZiBjYWNoaW5nLCBwcmVmZXRjaGluZywgYW5kIGF0b21pYyBvcGVyYXRpb25zIHdpdGhpbiB0aGUgaXRlcmF0aW9uIGxvZ2ljLiBJIGFudGljaXBhdGUgdGhhdCB0aGUgY29kZSB3aWxsIGJlIHRpZ2h0bHkgY291cGxlZCB3aXRoIHRoZSBLVk0gaW5mcmFzdHJ1Y3R1cmUsIHNvIEkmIzM5O2xsIGFsc28gYmUgZXhhbWluaW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBLVk0gY29tcG9uZW50cywgc3VjaCBhcyB0aGUgTU1VIGFuZCB0aGUgdmlydHVhbCBDUFUgKHZDUFUpLiBJbiBwYXJ0aWN1bGFyLCBJIHdpbGwgbG9vayBmb3IgYW55IGNvZGUgZGVhbGluZyB3aXRoIHRoZSBoYW5kbGluZyBvZiBndWVzdCBwaHlzaWNhbCBhZGRyZXNzZXMsIGFuZCBob3cgdGhlIGd1ZXN0LXBoeXNpY2FsLXRvLWhvc3QtcGh5c2ljYWwgbWFwcGluZyBpcyBjb25kdWN0ZWQuIExhc3RseSwgSSYjMzk7bGwgYmUgY3Jvc3MtcmVmZXJlbmNpbmcgdGhpcyBjb2RlIHdpdGggdGhlIHN1cnJvdW5kaW5nIGZpbGVzIHRvIHNlZSBob3cgaXQgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBLVk0mIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgb24geDg2IHN5c3RlbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHQvKlxuIDEzMTpcdCAqIFRyaWVzIHRvIHRyYXZlcnNlIGJhY2sgdXAgYSBsZXZlbCBpbiB0aGUgcGFnaW5nIHN0cnVjdHVyZSBzbyB0aGF0IHRoZSB3YWxrXG4gMTMyOlx0ICogY2FuIGNvbnRpbnVlIGZyb20gdGhlIG5leHQgZW50cnkgaW4gdGhlIHBhcmVudCBwYWdlIHRhYmxlLiBSZXR1cm5zIHRydWUgb24gYVxuIDEzMzpcdCAqIHN1Y2Nlc3NmdWwgc3RlcCB1cCwgZmFsc2UgaWYgYWxyZWFkeSBpbiB0aGUgcm9vdCBwYWdlLlxuIDEzNDpcdCAqL1xuIDEzNTpcdHN0YXRpYyBib29sIHRyeV9zdGVwX3VwKHN0cnVjdCB0ZHBfaXRlciAqaXRlcixcbiAxMzY6XHRcdFx0XHRzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgKmV2ZW50KVxuIDEzNzpcdHtcbiAxMzg6XHRcdGlmIChpdGVyLVx1MDAzZWxldmVsID09IGl0ZXItXHUwMDNlcm9vdF9sZXZlbClcbiAxMzk6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDE0MDpcdFxuIDE0MTpcdFx0aXRlci1cdTAwM2VsZXZlbCYjNDM7JiM0Mzs7XG4gMTQyOlx0XHRpdGVyLVx1MDAzZWdmbiA9IGdmbl9yb3VuZF9mb3JfbGV2ZWwoaXRlci1cdTAwM2VnZm4sIGl0ZXItXHUwMDNlbGV2ZWwpO1xuIDE0MzpcdFx0dGRwX2l0ZXJfcmVmcmVzaF9zcHRlcChpdGVyKTtcbiAxNDQ6XHRcbiAxNDU6XHRcdGlmIChldmVudCBcdTAwMjZcdTAwMjYgIWV2ZW50LVx1MDAzZXZhbGlkKSB7XG4gMTQ2Olx0XHRcdGV2ZW50LVx1MDAzZXNwdGVwID0gaXRlci1cdTAwM2VzcHRlcDtcbiAxNDc6XHRcdFx0ZXZlbnQtXHUwMDNlb2xkX3NwdGUgPSBpdGVyLVx1MDAzZW9sZF9zcHRlO1xuIDE0ODpcdFx0XHRldmVudC1cdTAwM2VnZm4gPSBpdGVyLVx1MDAzZWdmbjtcbiAxNDk6XHRcdFx0ZXZlbnQtXHUwMDNlbGV2ZWwgPSBpdGVyLVx1MDAzZWxldmVsO1xuIDE1MDpcdFx0XHRldmVudC1cdTAwM2V2YWxpZCA9IHRydWU7XG4gMTUxOlx0XHR9XG4gMTUyOlx0XG4gMTUzOlx0XHRyZXR1cm4gdHJ1ZTtcbiAxNTQ6XHR9XG4gMTU1Olx0XG4gMTU2Olx0LypcbiAxNTc6XHQgKiBTdGVwIHRvIHRoZSBuZXh0IFNQVEUgaW4gYSBwcmUtb3JkZXIgdHJhdmVyc2FsIG9mIHRoZSBwYWdpbmcgc3RydWN0dXJlLlxuIDE1ODpcdCAqIFRvIGdldCB0byB0aGUgbmV4dCBTUFRFLCB0aGUgaXRlcmF0b3IgZWl0aGVyIHN0ZXBzIGRvd24gdG93YXJkcyB0aGUgZ29hbFxuIDE1OTpcdCAqIEdGTiwgaWYgYXQgYSBwcmVzZW50LCBub24tbGFzdC1sZXZlbCBTUFRFLCBvciBvdmVyIHRvIGEgU1BURSBtYXBwaW5nIGFcbiAxNjA6XHQgKiBoaWdoZXIgR0ZOLlxuIDE2MTpcdCAqXG4gMTYyOlx0ICogVGhlIGJhc2ljIGFsZ29yaXRobSBpcyBhcyBmb2xsb3dzOlxuIDE2MzpcdCAqIDEuIElmIHRoZSBjdXJyZW50IFNQVEUgaXMgYSBub24tbGFzdC1sZXZlbCBTUFRFLCBzdGVwIGRvd24gaW50byB0aGUgcGFnZVxuIDE2NDpcdCAqICAgIHRhYmxlIGl0IHBvaW50cyB0by5cbiAxNjU6XHQgKiAyLiBJZiB0aGUgaXRlcmF0b3IgY2Fubm90IHN0ZXAgZG93biwgaXQgd2lsbCB0cnkgdG8gc3RlcCB0byB0aGUgbmV4dCBTUFRFXG4gMTY2Olx0ICogICAgaW4gdGhlIGN1cnJlbnQgcGFnZSBvZiB0aGUgcGFnaW5nIHN0cnVjdHVyZS5cbiAxNjc6XHQgKiAzLiBJZiB0aGUgaXRlcmF0b3IgY2Fubm90IHN0ZXAgdG8gdGhlIG5leHQgZW50cnkgaW4gdGhlIGN1cnJlbnQgcGFnZSwgaXQgd2lsbFxuIDE2ODpcdCAqICAgIHRyeSB0byBzdGVwIHVwIHRvIHRoZSBwYXJlbnQgcGFnaW5nIHN0cnVjdHVyZSBwYWdlLiBJbiB0aGlzIGNhc2UsIHRoYXRcbiAxNjk6XHQgKiAgICBTUFRFIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gdmlzaXRlZCwgYW5kIHNvIHRoZSBpdGVyYXRvciBtdXN0IGFsc28gc3RlcFxuIDE3MDpcdCAqICAgIHRvIHRoZSBzaWRlIGFnYWluLlxuIDE3MTpcdCAqL1xuIDE3MjpcdHN0YXRpYyB2b2lkIF9fdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsXG4gMTczOlx0XHRcdFx0ICAgIHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQpXG4gMTc0Olx0e1xuIDE3NTpcdFx0aWYgKGV2ZW50KVxuIDE3NjpcdFx0XHRldmVudC1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuIDE3NzpcdFxuIDE3ODpcdFx0aWYgKGl0ZXItXHUwMDNleWllbGRlZCkge1xuIDE3OTpcdFx0XHR0ZHBfaXRlcl9yZXN0YXJ0KGl0ZXIpO1xuIDE4MDpcdFx0XHRyZXR1cm47XG4gMTgxOlx0XHR9XG4gMTgyOlx0XG4gMTgzOlx0XHRpZiAodHJ5X3N0ZXBfZG93bihpdGVyKSlcbiAxODQ6XHRcdFx0cmV0dXJuO1xuIDE4NTpcdFxuIDE4NjpcdFx0ZG8ge1xuIDE4NzpcdFx0XHRpZiAodHJ5X3N0ZXBfc2lkZShpdGVyKSlcbiAxODg6XHRcdFx0XHRyZXR1cm47XG4gMTg5Olx0XHR9IHdoaWxlICh0cnlfc3RlcF91cChpdGVyLCBldmVudCkpO1xuIDE5MDpcdFx0aXRlci1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuIDE5MTpcdH1cbiAxOTI6XHRcbiAxOTM6XHR2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuIDE5NDpcdHtcbiAxOTU6XHRcdF9fdGRwX2l0ZXJfbmV4dChpdGVyLCBOVUxMKTtcbiAxOTY6XHR9XG4gMTk3Olx0XG4gMTk4Olx0dm9pZCB0ZHBfaXRlcl9uZXh0X3Bvc3Rfb3JkZXIoc3RydWN0IHRkcF9pdGVyICppdGVyLFxuIDE5OTpcdFx0XHRcdCAgICAgIHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQpXG4gMjAwOlx0e1xuIDIwMTpcdFx0X190ZHBfaXRlcl9uZXh0KGl0ZXIsIGV2ZW50KTtcbiAyMDI6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MjAwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVERQIE1NVSBQb3N0LU9yZGVyIFphcHBpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBmb2N1c2VzIG9uIG9wdGltaXppbmcgbGVhZiBwYWdlIHRhYmxlIHphcHBpbmcgd2l0aGluIHRoZSBURFAgTU1VLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFib3V0IGhhbmRsaW5nIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMg4oCTIHRob3NlIGF0IHRoZSAyTSBsZXZlbCB0aGF0IHBvaW50IHRvIDRLIGxlYWYgcGFnZSB0YWJsZXMg4oCTIGFmdGVyIHRoZXkmIzM5O3ZlIGJlZW4gZnVsbHkgcHJvY2Vzc2VkIGR1cmluZyB0aGUgaXRlcmF0aW9uIG9mIFNQVEVzLiBUaGUgYHRkcF9tbXVfemFwX2xlYWZzYCBmdW5jdGlvbiBpcyBrZXkgaGVyZSwgYW5kIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGB0ZHBfbW11X3phcF9jb21wbGV0ZWRfZW1wdHlfbGVhZl9wdGAgdG8gaGFuZGxlIHRoZSB6YXBwaW5nIG9mIHRoZXNlIGVtcHR5IHRhYmxlcyBlZmZpY2llbnRseSB3aGVuIHN0ZXBwaW5nIHVwIHRoZSBwYWdlIHRhYmxlIGhpZXJhcmNoeS4KClRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IHRoaXMgZGlyZWN0bHkgbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIFREUCBNTVUgcGFnaW5nIGFuZCB6YXBwaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZm9yIHg4Nl82NCBhcmNoaXRlY3R1cmVzLiBUaGUgZ29vZCBuZXdzIGlzLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhpcyBpcyBkZWZpbml0ZWx5IHRlc3RhYmxlIGFuZCBmdXp6YWJsZSBpbiBwbGF0Zm9ybXMgbGlrZSBRRU1VLiBXZSBjYW4gdXNlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvciBzdGFuZGFyZCBLVk0gaW9jdGxzIHRvIHZlcmlmeSBpdHMgZnVuY3Rpb25hbGl0eS4gVGhlIGZ1bmN0aW9uIG9mIHRoaXMgY2hhbmdlIHdpbGwgYmUgdG8gbW9yZSBlZmZlY3RpdmVseSBtYW5hZ2UgbWVtb3J5IGJ5IG9wdGltaXppbmcgcGFnZSB0YWJsZSB6YXBwaW5nIGFuZCBmcmVlaW5nIHVwIGVtcHR5IHBhZ2UgdGFibGVzLCB3aGljaCBpcyB2ZXJ5IGltcG9ydGFudC4KCk5vdywgSSBuZWVkIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGV4cGVjdGluZyBgS1ZNYCwgYEtWTV9JTlRFTGAsIGBLVk1fQU1EYCwgYW5kIGBYODZfNjRgIHRvIGJlIGNyaXRpY2FsLiBUbyBjb25maXJtLCBJJiMzOTtsbCBleGFtaW5lIHRoZSBLY29uZmlnIHN5bWJvbHMgcmVsYXRlZCB0byB0aGlzIGNvZGUgYW5kIHNlZSB3aGF0IGNvbmZpZ3VyYXRpb25zIGVuYWJsZSB0aGUgS1ZNIHg4NiBURFAgTU1VLiBCYXNlZCBvbiBteSBleGlzdGluZyBrbm93bGVkZ2UsIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgYW5kIGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgIHdpbGwgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGRldGFpbHMuCgpGcm9tIGEgcXVpY2sgZ2xhbmNlIGF0IGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgLCBJIHNlZSB0aGF0IGBtbXUvdGRwX2l0ZXIub2AgYW5kIGBtbXUvdGRwX21tdS5vYCBhcmUgaW5jbHVkZWQgd2hlbiBgQ09ORklHX1g4Nl82NGAgaXMgc2V0LiBGdXJ0aGVyIGluc3BlY3Rpb24gb2YgYGFyY2gveDg2L2t2bS9LY29uZmlnYCByZXZlYWxzIHRoYXQgYEtWTWAgZGVwZW5kcyBvbiBgWDg2X0xPQ0FMX0FQSUNgLCBhbmQgYm90aCBgS1ZNX0lOVEVMYCBhbmQgYEtWTV9BTURgIGFyZSByZWxldmFudCwgYnV0IGBLVk1fWDg2YCBpcyBvbmx5IGRlZmluZWQgaWYgZWl0aGVyIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYCBhcmUgZW5hYmxlZC4KCkZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWdzLCBsaWtlIGBLVk1fUFJPVkVfTU1VYCBvciBhbnl0aGluZyBlbHNlIGluIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcyBwYXJ0aWN1bGFyIGxvZ2ljLiBJJiMzOTtsbCBuZWVkIHRvIGdvIHRocm91Z2ggYWxsIHRoZSBLY29uZmlnIG9wdGlvbnMgd2l0aGluIHRoYXQgZmlsZSB0byBlbnN1cmUgY29tcGxldGUgY292ZXJhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIEtWTSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdHNvdXJjZSBcJiMzNDt2aXJ0L2t2bS9LY29uZmlnXCYjMzQ7XG4gICA3Olx0XG4gICA4Olx0bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuICAgOTpcdFx0Ym9vbCBcJiMzNDtWaXJ0dWFsaXphdGlvblwmIzM0O1xuICAxMDpcdFx0ZGVmYXVsdCB5XG4gIDExOlx0XHRoZWxwXG4gIDEyOlx0XHQgIFNheSBZIGhlcmUgdG8gZ2V0IHRvIHNlZSBvcHRpb25zIGZvciB1c2luZyB5b3VyIExpbnV4IGhvc3QgdG8gcnVuIG90aGVyXG4gIDEzOlx0XHQgIG9wZXJhdGluZyBzeXN0ZW1zIGluc2lkZSB2aXJ0dWFsIG1hY2hpbmVzIChndWVzdHMpLlxuICAxNDpcdFx0ICBUaGlzIG9wdGlvbiBhbG9uZSBkb2VzIG5vdCBhZGQgYW55IGtlcm5lbCBjb2RlLlxuICAxNTpcdFxuICAxNjpcdFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kIGRpc2FibGVkLlxuICAxNzpcdFxuICAxODpcdGlmIFZJUlRVQUxJWkFUSU9OXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIEtWTV9YODZcbiAgMjE6XHRcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbiAgMjI6XHRcdHNlbGVjdCBLVk1fQ09NTU9OXG4gIDIzOlx0XHRzZWxlY3QgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xuICAyNDpcdFx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbiAgMjU6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXG4gIDI2Olx0XHRzZWxlY3QgSEFWRV9LVk1fUEZOQ0FDSEVcbiAgMjc6XHRcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX1RTT1xuICAyODpcdFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTFxuICAyOTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcbiAgMzA6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFfUk9VVElOR1xuICAzMTpcdFx0c2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTVxuICAzMjpcdFx0c2VsZWN0IFZIT1NUX1RBU0tcbiAgMzM6XHRcdHNlbGVjdCBLVk1fQVNZTkNfUEZcbiAgMzQ6XHRcdHNlbGVjdCBVU0VSX1JFVFVSTl9OT1RJRklFUlxuICAzNTpcdFx0c2VsZWN0IEtWTV9NTUlPXG4gIDM2Olx0XHRzZWxlY3QgU0NIRURfSU5GT1xuICAzNzpcdFx0c2VsZWN0IFBFUkZfRVZFTlRTXG4gIDM4Olx0XHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFNcbiAgMzk6XHRcdHNlbGVjdCBQRVJGX0dVRVNUX01FRElBVEVEX1BNVVxuICA0MDpcdFx0c2VsZWN0IEhBVkVfS1ZNX01TSVxuICA0MTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcbiAgNDI6XHRcdHNlbGVjdCBIQVZFX0tWTV9OT19QT0xMXG4gIDQzOlx0XHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcbiAgNDQ6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcbiAgNDU6XHRcdHNlbGVjdCBLVk1fVkZJT1xuICA0NjpcdFx0c2VsZWN0IEhBVkVfS1ZNX1BNX05PVElGSUVSIGlmIFBNXG4gIDQ3Olx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbiAgNDg6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG4gIDQ5Olx0XHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcbiAgNTA6XHRcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XG4gIDUxOlx0XG4gIDUyOlx0Y29uZmlnIEtWTVxuICA1MzpcdFx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4gIDU0Olx0XHRkZXBlbmRzIG9uIFg4Nl9MT0NBTF9BUElDXG4gIDU1Olx0XHRoZWxwXG4gIDU2Olx0XHQgIFN1cHBvcnQgaG9zdGluZyBmdWxseSB2aXJ0dWFsaXplZCBndWVzdCBtYWNoaW5lcyB1c2luZyBoYXJkd2FyZVxuICA1NzpcdFx0ICB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiAgWW91IHdpbGwgbmVlZCBhIGZhaXJseSByZWNlbnRcbiAgNTg6XHRcdCAgcHJvY2Vzc29yIGVxdWlwcGVkIHdpdGggdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gWW91IHdpbGwgYWxzb1xuICA1OTpcdFx0ICBuZWVkIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBvZiB0aGUgcHJvY2Vzc29yIG1vZHVsZXMgYmVsb3cuXG4gIDYwOlx0XG4gIDYxOlx0XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIHRocm91Z2hcbiAgNjI6XHRcdCAgYSBjaGFyYWN0ZXIgZGV2aWNlIG5vZGUgbmFtZWQgL2Rldi9rdm0uXG4gIDYzOlx0XG4gIDY0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICA2NTpcdFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0uXG4gIDY2Olx0XG4gIDY3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDY4Olx0XG4gIDY5Olx0Y29uZmlnIEtWTV9XRVJST1JcbiAgNzA6XHRcdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4gIDcxOlx0XHQjIERpc2FsbG93IEtWTSYjMzk7cyAtV2Vycm9yIGlmIEtBU0FOIGlzIGVuYWJsZWQsIGUuZy4gdG8gZ3VhcmQgYWdhaW5zdFxuICA3MjpcdFx0IyByYW5kb21pemVkIGNvbmZpZ3MgZnJvbSBzZWxlY3RpbmcgS1ZNX1dFUlJPUj15LCB3aGljaCBkb2VzbiYjMzk7dCBwbGF5XG4gIDczOlx0XHQjIG5pY2Ugd2l0aCBLQVNBTi4gIEtBU0FOIGJ1aWxkcyBnZW5lcmF0ZXMgd2FybmluZ3MgZm9yIHRoZSBkZWZhdWx0XG4gIDc0Olx0XHQjIEZSQU1FX1dBUk4sIGkuZS4gS1ZNX1dFUlJPUj15IHdpdGggS0FTQU49eSByZXF1aXJlcyBzcGVjaWFsIHR1bmluZy5cbiAgNzU6XHRcdCMgQnVpbGRpbmcgS1ZNIHdpdGggLVdlcnJvciBhbmQgS0FTQU4gaXMgc3RpbGwgZG9hYmxlIHZpYSBlbmFibGluZ1xuICA3NjpcdFx0IyB0aGUga2VybmVsLXdpZGUgV0VSUk9SPXkuXG4gIDc3Olx0XHRkZXBlbmRzIG9uIEtWTV9YODYgXHUwMDI2XHUwMDI2ICgoRVhQRVJUIFx1MDAyNlx1MDAyNiAhS0FTQU4pIHx8IFdFUlJPUilcbiAgNzg6XHRcdGhlbHBcbiAgNzk6XHRcdCAgQWRkIC1XZXJyb3IgdG8gdGhlIGJ1aWxkIGZsYWdzIGZvciBLVk0uXG4gIDgwOlx0XG4gIDgxOlx0XHQgIElmIGluIGRvdWJ0LCBzYXkgXCYjMzQ7TlwmIzM0Oy5cbiAgODI6XHRcbiAgODM6XHRjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuICA4NDpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcJiMzNDtcbiAgODU6XHRcdGRlcGVuZHMgb24gRVhQRVJUXG4gIDg2Olx0XHRkZXBlbmRzIG9uIEtWTV9YODYgXHUwMDI2XHUwMDI2IFg4Nl82NFxuICA4NzpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4gIDg4Olx0XHRoZWxwXG4gIDg5Olx0XHQgIEVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNcy4gIEN1cnJlbnRseSwgc29mdHdhcmUtXG4gIDkwOlx0XHQgIHByb3RlY3RlZCBWTXMgYXJlIHB1cmVseSBhIGRldmVsb3BtZW50IGFuZCB0ZXN0aW5nIHZlaGljbGUgZm9yXG4gIDkxOlx0XHQgIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQuICBBdHRlbXB0aW5nIHRvIHJ1biBhIFwmIzM0O3JlYWxcJiMzNDsgVk0gd29ya2xvYWQgYXMgYVxuICA5MjpcdFx0ICBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk0gd2lsbCBmYWlsIG1pc2VyYWJseS5cbiAgOTM6XHRcbiAgOTQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgXCYjMzQ7TlwmIzM0Oy5cbiAgOTU6XHRcbiAgOTY6XHRjb25maWcgS1ZNX0lOVEVMXG4gIDk3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4gIDk4Olx0XHRkZXBlbmRzIG9uIEtWTSBcdTAwMjZcdTAwMjYgSUEzMl9GRUFUX0NUTFxuICA5OTpcdFx0c2VsZWN0IFg4Nl9GUkVEIGlmIFg4Nl82NFxuIDEwMDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTgyNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBQYXRjaCBmb3IgRm9jdXMgU3ltYm9sIElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIHN5bWJvbHMgYXJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMgcGF0Y2guIExldCYjMzk7cyBzdGFydCBieSBsaXN0aW5nIHRoZSBmdW5jdGlvbnMgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgb3IgY2FsbHMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSByZWxldmFudCBjb2RlLgoKRmlyc3QsIEkgc2VlIGB0ZHBfaXRlcl9uZXh0X3Bvc3Rfb3JkZXJgLCB3aGljaCBpcyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYywgcmVzaWRpbmcgaW4gYm90aCBgYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oYCBhbmQgYHRkcF9pdGVyLmNgLiBUaGVuLCB0aGVyZSYjMzk7cyBgdGRwX2l0ZXJfbmV4dGAsIGFsc28gbm9uLXN0YXRpYy4gVGhvc2UgdHdvIHNvdW5kIGl0ZXJhdGl2ZSwgc28gdGhleSBhcmUgaGlnaGx5IHJlbGV2YW50LiBOZXh0LCBga3ZtX3RkcF9tbXVfemFwX2xlYWZzYCwgd2hpY2ggaXMgYWxzbyBub24tc3RhdGljLCBhbmQgbG9jYXRlZCBpbiBgdGRwX21tdS5jYC4gRm9sbG93aW5nIHRoYXQsIGBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VgLCBhZ2FpbiBub24tc3RhdGljLCBhbHNvIHdpdGhpbiBgdGRwX21tdS5jYCBhbmQgc3BlY2lmaWNhbGx5IGNhbGxzIGB0ZHBfbW11X3phcF9sZWFmc2AuIEZpbmFsbHksIEkgc2VlIGBrdm1femFwX2dmbl9yYW5nZWAsIGxvY2F0ZWQgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBhbmQgaW1wb3J0YW50bHksIGNhbGxzIGBrdm1fdGRwX21tdV96YXBfbGVhZnNgLgoKU28sIHRoZSBmb2N1cyBpcyByZWFsbHkgb24gdGhpcyBsZWFmIHphcHBpbmcgYW5kIHVubWFwcGluZywgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBURFAgTU1VLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSB3b3JrLCByaWdodCBub3cuIFNpbmNlIEkmIzM5O20gdmVyeSBmYW1pbGlhciB3aXRoIHRoZXNlIGNvbXBvbmVudHMsIHRoaXMgbWFwcGluZywgdW5tYXBwaW5nLCBhbmQgaXRlcmF0aW9uIGlzIGxpa2VseSBoYXBwZW5pbmcgb24gbXVsdGlwbGUgbGV2ZWxzLgpJIHNob3VsZCBzdGFydCBieSBleGFtaW5pbmcgdGhlIGZ1bmN0aW9ucyBmcm9tIHRoZSBgdGRwX21tdS5jYCBmaWxlIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIHRvIHRoZSBvdGhlciBsaXN0ZWQgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fdGRwX21tdV96YXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz02OTk5PXN0YXRpYyB2b2lkIF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfYmFja19oYWxmKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcwMTItXHRpZiAodGRwX21tdV9lbmFibGVkKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MDEzOlx0XHRrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoa3ZtLCB0cnVlKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzAxNC19XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz03MTEzPXZvaWQga3ZtX3phcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm5fc3RhcnQsIGdmbl90IGdmbl9lbmQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTI4LVx0aWYgKHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzEyOTpcdFx0Zmx1c2ggPSBrdm1fdGRwX21tdV96YXBfbGVhZnMoa3ZtLCBnZm5fc3RhcnQsIGdmbl9lbmQsIGZsdXNoKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzEzMC1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTc1NDQ9c3RhdGljIHZvaWQga3ZtX21tdV96YXBfYWxsKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc1NjMtXHRpZiAodGRwX21tdV9lbmFibGVkKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3NTY0Olx0XHRrdm1fdGRwX21tdV96YXBfYWxsKGt2bSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc1NjUtXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz03OTMzPXN0YXRpYyB2b2lkIGt2bV9yZWNvdmVyX254X2h1Z2VfcGFnZXMoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODAwMS1cdFx0XHRpZiAoaXNfdGRwX21tdSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6ODAwMjpcdFx0XHRcdGZsdXNoIHw9IGt2bV90ZHBfbW11X3phcF9wb3NzaWJsZV9ueF9odWdlX3BhZ2Uoa3ZtLCBzcCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTgwMDMtXHRcdFx0ZWxzZVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jPTMzPXZvaWQga3ZtX21tdV91bmluaXRfdGRwX21tdShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNDAtXHRrdm1fdGRwX21tdV9pbnZhbGlkYXRlX3Jvb3RzKGt2bSwgS1ZNX1ZBTElEX1JPT1RTKTtcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjQxOlx0a3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKGt2bSwgZmFsc2UpO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNDItXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM9MjU5PXZvaWQga3ZtX3RkcF9tbXVfYWxsb2Nfcm9vdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbWlycm9yKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTMwNi1cdCAqIHRoZSBURFAgTU1VIGl0c2VsZiwgd2hpY2ggaXMgaGVsZCB1bnRpbCB0aGUgcm9vdCBpcyBpbnZhbGlkYXRlZCBhbmRcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjMwNzpcdCAqIGlzIHVsdGltYXRlbHkgcHV0IGJ5IGt2bV90ZHBfbW11X3phcF9pbnZhbGlkYXRlZF9yb290cygpLlxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMzA4LVx0ICovXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM9ODI5PXN0YXRpYyB2b2lkIHRkcF9tbXVfemFwX3Jvb3Qoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTg3NS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjg3Njpib29sIGt2bV90ZHBfbW11X3phcF9wb3NzaWJsZV9ueF9odWdlX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtODc3LVx0XHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz05NjU9c3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwMDItXHRcdFx0ICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2VzbiYjMzk7dCByZXF1aXJlIGEgVExCIGZsdXNoLFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTAwMzpcdFx0XHQgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMDA0LVx0XHRcdCAqL1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwMzYtICovXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzoxMDM3OmJvb2wga3ZtX3RkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgYm9vbCBmbHVzaClcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwMzgte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwNDctXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzoxMDQ4OnZvaWQga3ZtX3RkcF9tbXVfemFwX2FsbChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMDQ5LXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMDc0LSAqL1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTA3NTp2b2lkIGt2bV90ZHBfbW11X3phcF9pbnZhbGlkYXRlZF9yb290cyhzdHJ1Y3Qga3ZtICprdm0sIGJvb2wgc2hhcmVkKVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTA3Ni17XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTEyMi0gKlxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTEyMzogKiBOb3RlLCBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoKSBpcyBnaWZ0ZWQgdGhlIFREUCBNTVUmIzM5O3MgcmVmZXJlbmNlLlxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTEyNC0gKiBTZWUga3ZtX3RkcF9tbXVfYWxsb2Nfcm9vdCgpLlxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oPTU3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tbXVfcGFnZSAqdGRwX21tdV9nZXRfcm9vdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtNjUtXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaDo2Njpib29sIGt2bV90ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgZmx1c2gpO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg6Njc6Ym9vbCBrdm1fdGRwX21tdV96YXBfcG9zc2libGVfbnhfaHVnZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTY4LVx0XHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaDo2OTp2b2lkIGt2bV90ZHBfbW11X3phcF9hbGwoc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTcwLXZvaWQga3ZtX3RkcF9tbXVfaW52YWxpZGF0ZV9yb290cyhzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC03MS1cdFx0XHRcdCAgZW51bSBrdm1fdGRwX21tdV9yb290X3R5cGVzIHJvb3RfdHlwZXMpO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg6NzI6dm9pZCBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoc3RydWN0IGt2bSAqa3ZtLCBib29sIHNoYXJlZCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC03My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ2MTgKCQkJCQkJCW91dHB1dDogMTkzCgkJCQkJCQl0aG91Z2h0czogODUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFREUCBNTVUgUmVsYXRlZCBGdW5jdGlvbnMgYW5kIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIHRyYWNpbmcgdGhlIGNhbGwgcGF0aHMgZm9yIHNvbWUga2V5IGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSBgdGRwX21tdV96YXBfbGVhZnNgIGlzIHRoZSB0YXJnZXQsIGNhbGxlZCBieSBib3RoIGBrdm1fdGRwX21tdV96YXBfbGVhZnNgIGFuZCBga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlYC4gYGt2bV90ZHBfbW11X3phcF9sZWFmc2AgaW4gdHVybiBpcyBjYWxsZWQgYnkgYGt2bV96YXBfZ2ZuX3JhbmdlYC4gQW5kIGBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VgIGlzIGNhbGxlZCBieSBga3ZtX3VubWFwX2dmbl9yYW5nZWAsIHRocm91Z2ggbW11IG5vdGlmaWVycy4KCk5leHQsIEkmIzM5O20gY3Jvc3MtcmVmZXJlbmNpbmcgdGhlc2UgZnVuY3Rpb25zIHdpdGggdGhlaXIgZGVmaW5pdGlvbnMuIEkmIzM5O3ZlIGxvY2F0ZWQgYHRkcF9pdGVyX25leHRfcG9zdF9vcmRlcmAgaW4gYHRkcF9pdGVyLmNgLCBhbmQgYGt2bV90ZHBfbW11X3phcF9sZWFmc2AgYW5kIGBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VgIGluIGB0ZHBfbW11LmNgLiBBbHNvIGBrdm1femFwX2dmbl9yYW5nZWAgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLgoKTm93LCBJJiMzOTttIGNoZWNraW5nIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gYEtWTWAsIGBLVk1fSU5URUxgL2BLVk1fQU1EYCwgYW5kIGBYODZfNjRgIGFyZSBkZWZpbml0ZWx5IGluIHRoZSBtaXguIEkmIzM5O20gdmVyaWZ5aW5nIHRoYXQgYEtWTV9JTlRFTGAgb3IgYEtWTV9BTURgIGFyZSBuZWNlc3NhcnkgdG8gZW5hYmxlIGBLVk1fWDg2YCwgYXMgZGVmaW5lZCBpbiB0aGUgYEtjb25maWdgIGZpbGUuIEkgc2VlIHRoZSBkZXBlbmRlbmN5OiBgS1ZNX1g4NmAgaXMgZGVmaW5lZCBhcyBhIHRyaXN0YXRlIHN5bWJvbCBkZXBlbmRlbnQgb24gYEtWTWAgaWYgZWl0aGVyIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYCBpcyBub3QgJiMzNDtuJiMzNDsuIEFsc28gYFg4Nl82NGAgaXMgbmVjZXNzYXJ5IGZvciB0aGUgY29tcGlsYXRpb24gb2YgYHRkcF9pdGVyLm9gIGFuZCBgdGRwX21tdS5vYCBiZWNhdXNlIG9mIHRoZSBtYWtlZmlsZSBkZXBlbmRlbmN5LgoKU28sIGZvciBgRW5hYmxlQ29uZmlnc2AsIEkmIzM5O2xsIGluY2x1ZGUgYEtWTWAsIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIGFuZCBgWDg2XzY0YC4KClRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgdGhlc2Uga2V5IGZ1bmN0aW9uczogYGt2bV90ZHBfbW11X3phcF9sZWFmc2AsIGB0ZHBfaXRlcl9uZXh0X3Bvc3Rfb3JkZXJgLCBga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlYCwgYW5kIGBrdm1femFwX2dmbl9yYW5nZWAuCgpGaW5hbGx5LCBJJiMzOTttIGVuc3VyaW5nIGV2ZXJ5dGhpbmcgYWxpZ25zIHdpdGggdGhlIGluc3RydWN0aW9ucywgaW5jbHVkaW5nIGBXb3J0aEZ1enppbmc6IHRydWVgLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiBUaGlzIGlzIGFib3V0IHVwZGF0aW5nIHRoZSBURFAgTU1VIGl0ZXJhdG9yIGZvciBwb3N0LW9yZGVyIHRyYXZlcnNhbC4gVGhpcyBhbGxvd3MgdGhlIHN5c3RlbSB0byBkZXRlY3QgY29tcGxldGVkIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgYW5kIGltbWVkaWF0ZWx5IHphcCB0aGVtLiBBbHNvLCB0aGlzIG1lYW5zIGZsdXNoaW5nIHJlbW90ZSBUTEJzIGlmIHNoYWRvdyBwYWdlcyB3ZXJlIHJlbW92ZWQuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgbm9uLXN0YXRpYyBhbmQgbm9uLWlubGluZWQgQVBJIGZ1bmN0aW9ucy4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IHNwZWNpZmllZCwgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeC4KCkFscmlnaHQsIEkmIzM5O20gcmVhZHkgdG8gY3JhZnQgdGhhdCBgc2V0LXJlc3VsdHNgIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7WDg2XzY0JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3RkcF9tbXVfemFwX2xlYWZzJiMzNDssCiAgICAmIzM0O3RkcF9pdGVyX25leHRfcG9zdF9vcmRlciYjMzQ7LAogICAgJiMzNDtrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2UmIzM0OywKICAgICYjMzQ7a3ZtX3phcF9nZm5fcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBwb3N0LW9yZGVyIHRyYXZlcnNhbCBzdXBwb3J0IHRvIHRoZSBLVk0geDg2IFREUCBNTVUgaXRlcmF0b3IgYW5kIHVwZGF0ZXMgdGRwX21tdV96YXBfbGVhZnMoKSB0byBhdXRvbWF0aWNhbGx5IHphcCBjb21wbGV0ZWQgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyAoYW5kIGhhbmRsZSB0aGUgY29ycmVzcG9uZGluZyByZW1vdGUgVExCIGZsdXNoIHdoZW4gc2hhZG93IHBhZ2VzIGFyZSBmcmVlZCkuIFRoaXMgYWx0ZXJzIGNvcmUgTU1VIHBhZ2UtdGFibGUgemFwcGluZyBiZWhhdmlvciBpbiBLVk0geDg2IGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7WDg2XzY0JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3RkcF9tbXVfemFwX2xlYWZzJiMzNDssCiAgICAmIzM0O3RkcF9pdGVyX25leHRfcG9zdF9vcmRlciYjMzQ7LAogICAgJiMzNDtrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2UmIzM0OywKICAgICYjMzQ7a3ZtX3phcF9nZm5fcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBwb3N0LW9yZGVyIHRyYXZlcnNhbCBzdXBwb3J0IHRvIHRoZSBLVk0geDg2IFREUCBNTVUgaXRlcmF0b3IgYW5kIHVwZGF0ZXMgdGRwX21tdV96YXBfbGVhZnMoKSB0byBhdXRvbWF0aWNhbGx5IHphcCBjb21wbGV0ZWQgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyAoYW5kIGhhbmRsZSB0aGUgY29ycmVzcG9uZGluZyByZW1vdGUgVExCIGZsdXNoIHdoZW4gc2hhZG93IHBhZ2VzIGFyZSBmcmVlZCkuIFRoaXMgYWx0ZXJzIGNvcmUgTU1VIHBhZ2UtdGFibGUgemFwcGluZyBiZWhhdmlvciBpbiBLVk0geDg2IGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDoyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJiMzOTtzIFREUCBNTVUgaXRlcmF0aW9uIGFuZCBwYWdlIHRhYmxlIHphcHBpbmcgbG9naWMgdG8gemFwIGNvbXBsZXRlZCBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzIGR1cmluZyBsZWFmIHphcHBpbmcuIEl0IGludHJvZHVjZXMgYSBgc3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50YCBzdHJ1Y3R1cmUsIHdoaWNoIGlzIHplcm8taW5pdGlhbGl6ZWQgb24gdGhlIHN0YWNrIChgZXZlbnQgPSB7fWApIGFuZCB3aG9zZSBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgcG9wdWxhdGVkIGluIGB0cnlfc3RlcF91cCgpYCB3aGVuZXZlciBgZXZlbnQtXHUwMDNldmFsaWRgIGlzIHNldCB0byB0cnVlLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGxlZnQgdW5pbml0aWFsaXplZCwgYW5kIG5vIGNvbnRyb2wtZmxvdyBkZWNpc2lvbnMgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIFBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGlzIGNoYW5nZSAoZS5nLiBUTEIgZmx1c2hpbmcgY29ycmVjdG5lc3MsIFJDVSBsaWZlY3ljbGUsIG9yIFNQVEUgbW9kaWZpY2F0aW9uIHJhY2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjY0YjE5N2MzM2IzZGQ2MzI4YTA1OGQyNjU3MjcyYzNlYjVlOTVlYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDEwOjIwOjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jCmluZGV4IDllMTdiZmE4MDkwMTEuLmQ5YmU0Mjk4NDEwZDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMKQEAgLTEzMiw3ICYjNDM7MTMyLDggQEAgc3RhdGljIGJvb2wgdHJ5X3N0ZXBfc2lkZShzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpCiAgKiBjYW4gY29udGludWUgZnJvbSB0aGUgbmV4dCBlbnRyeSBpbiB0aGUgcGFyZW50IHBhZ2UgdGFibGUuIFJldHVybnMgdHJ1ZSBvbiBhCiAgKiBzdWNjZXNzZnVsIHN0ZXAgdXAsIGZhbHNlIGlmIGFscmVhZHkgaW4gdGhlIHJvb3QgcGFnZS4KICAqLwotc3RhdGljIGJvb2wgdHJ5X3N0ZXBfdXAoc3RydWN0IHRkcF9pdGVyICppdGVyKQomIzQzO3N0YXRpYyBib29sIHRyeV9zdGVwX3VwKHN0cnVjdCB0ZHBfaXRlciAqaXRlciwKJiM0MzsJCQlzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgKmV2ZW50KQogewogCWlmIChpdGVyLSZndDtsZXZlbCA9PSBpdGVyLSZndDtyb290X2xldmVsKQogCQlyZXR1cm4gZmFsc2U7CkBAIC0xNDEsNiAmIzQzOzE0MiwxNCBAQCBzdGF0aWMgYm9vbCB0cnlfc3RlcF91cChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpCiAJaXRlci0mZ3Q7Z2ZuID0gZ2ZuX3JvdW5kX2Zvcl9sZXZlbChpdGVyLSZndDtnZm4sIGl0ZXItJmd0O2xldmVsKTsKIAl0ZHBfaXRlcl9yZWZyZXNoX3NwdGVwKGl0ZXIpOwogCiYjNDM7CWlmIChldmVudCAmYW1wOyZhbXA7ICFldmVudC0mZ3Q7dmFsaWQpIHsKJiM0MzsJCWV2ZW50LSZndDtzcHRlcCA9IGl0ZXItJmd0O3NwdGVwOwomIzQzOwkJZXZlbnQtJmd0O29sZF9zcHRlID0gaXRlci0mZ3Q7b2xkX3NwdGU7CiYjNDM7CQlldmVudC0mZ3Q7Z2ZuID0gaXRlci0mZ3Q7Z2ZuOwomIzQzOwkJZXZlbnQtJmd0O2xldmVsID0gaXRlci0mZ3Q7bGV2ZWw7CiYjNDM7CQlldmVudC0mZ3Q7dmFsaWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE2MCw4ICYjNDM7MTY5LDEyIEBAIHN0YXRpYyBib29sIHRyeV9zdGVwX3VwKHN0cnVjdCB0ZHBfaXRlciAqaXRlcikKICAqICAgIFNQVEUgd2lsbCBoYXZlIGFscmVhZHkgYmVlbiB2aXNpdGVkLCBhbmQgc28gdGhlIGl0ZXJhdG9yIG11c3QgYWxzbyBzdGVwCiAgKiAgICB0byB0aGUgc2lkZSBhZ2Fpbi4KICAqLwotdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcikKJiM0MztzdGF0aWMgdm9pZCBfX3RkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyLAomIzQzOwkJCSAgICBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgKmV2ZW50KQogewomIzQzOwlpZiAoZXZlbnQpCiYjNDM7CQlldmVudC0mZ3Q7dmFsaWQgPSBmYWxzZTsKJiM0MzsKIAlpZiAoaXRlci0mZ3Q7eWllbGRlZCkgewogCQl0ZHBfaXRlcl9yZXN0YXJ0KGl0ZXIpOwogCQlyZXR1cm47CkBAIC0xNzMsNyAmIzQzOzE4NiwxNyBAQCB2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKQogCWRvIHsKIAkJaWYgKHRyeV9zdGVwX3NpZGUoaXRlcikpCiAJCQlyZXR1cm47Ci0JfSB3aGlsZSAodHJ5X3N0ZXBfdXAoaXRlcikpOwomIzQzOwl9IHdoaWxlICh0cnlfc3RlcF91cChpdGVyLCBldmVudCkpOwogCWl0ZXItJmd0O3ZhbGlkID0gZmFsc2U7CiB9CiAKJiM0Mzt2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKQomIzQzO3sKJiM0MzsJX190ZHBfaXRlcl9uZXh0KGl0ZXIsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRkcF9pdGVyX25leHRfcG9zdF9vcmRlcihzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsCiYjNDM7CQkJICAgICAgc3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50ICpldmVudCkKJiM0Mzt7CiYjNDM7CV9fdGRwX2l0ZXJfbmV4dChpdGVyLCBldmVudCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oCmluZGV4IGY4OThkOGQwZDkzYzIuLmI3ZTI2MDVmYmY5ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgKQEAgLTEyMyw2ICYjNDM7MTIzLDE0IEBAIHN0cnVjdCB0ZHBfaXRlciB7CiAJYm9vbCB5aWVsZGVkOwogfTsKIAomIzQzO3N0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCB7CiYjNDM7CXRkcF9wdGVwX3Qgc3B0ZXA7CiYjNDM7CXU2NCBvbGRfc3B0ZTsKJiM0MzsJZ2ZuX3QgZ2ZuOwomIzQzOwlpbnQgbGV2ZWw7CiYjNDM7CWJvb2wgdmFsaWQ7CiYjNDM7fTsKJiM0MzsKIC8qCiAgKiBJdGVyYXRlcyBvdmVyIGV2ZXJ5IFNQVEUgbWFwcGluZyB0aGUgR0ZOIHJhbmdlIFtzdGFydCwgZW5kKSBpbiBhCiAgKiBwcmVvcmRlciB0cmF2ZXJzYWwuCkBAIC0xNDUsNiAmIzQzOzE1Myw4IEBAIHRkcF9wdGVwX3Qgc3B0ZV90b19jaGlsZF9wdCh1NjQgcHRlLCBpbnQgbGV2ZWwpOwogdm9pZCB0ZHBfaXRlcl9zdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsCiAJCSAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cyk7CiB2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKTsKJiM0Mzt2b2lkIHRkcF9pdGVyX25leHRfcG9zdF9vcmRlcihzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsCiYjNDM7CQkJICAgICAgc3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50ICpldmVudCk7CiB2b2lkIHRkcF9pdGVyX3Jlc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyKTsKIAogI2VuZGlmIC8qIF9fS1ZNX1g4Nl9NTVVfVERQX0lURVJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYwppbmRleCA0NGRhZDEwNmZhZDE5Li44MjQ0NmM0NzM3Zjc5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYwpAQCAtOTIzLDYgJiM0Mzs5MjMsMzggQEAgYm9vbCBrdm1fdGRwX21tdV96YXBfcG9zc2libGVfbnhfaHVnZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyBib29sIHRkcF9tbXVfemFwX2NvbXBsZXRlZF9lbXB0eV9sZWFmX3B0KHN0cnVjdCBrdm0gKmt2bSwKJiM0MzsJCQkJCQlzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgKmV2ZW50LAomIzQzOwkJCQkJCWdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsCiYjNDM7CQkJCQkJdGRwX3B0ZXBfdCB6YXBwZWRfbGVhZl9wdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fbW11X3BhZ2UgKmNoaWxkX3NwOwomIzQzOwomIzQzOwlpZiAoZXZlbnQtJmd0O2xldmVsICE9IFBHX0xFVkVMXzJNIHx8CiYjNDM7CSAgICAhaXNfc2hhZG93X3ByZXNlbnRfcHRlKGV2ZW50LSZndDtvbGRfc3B0ZSkgfHwKJiM0MzsJICAgIGlzX2xhc3Rfc3B0ZShldmVudC0mZ3Q7b2xkX3NwdGUsIGV2ZW50LSZndDtsZXZlbCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChldmVudC0mZ3Q7Z2ZuICZsdDsgc3RhcnQgfHwKJiM0MzsJICAgIGV2ZW50LSZndDtnZm4gJiM0MzsgS1ZNX1BBR0VTX1BFUl9IUEFHRShldmVudC0mZ3Q7bGV2ZWwpICZndDsgZW5kKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBMZWF2ZSBwcm9kdWN0aXZlIGxlYWYgdGFibGVzIGluIHBsYWNlIHRvIGF2b2lkIHJlZmF1bHQgY2h1cm4uICovCiYjNDM7CWlmICh6YXBwZWRfbGVhZl9wdCA9PSBldmVudC0mZ3Q7c3B0ZXApCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWNoaWxkX3NwID0gc3B0ZV90b19jaGlsZF9zcChldmVudC0mZ3Q7b2xkX3NwdGUpOwomIzQzOwlpZiAoaXNfbWlycm9yX3NwKGNoaWxkX3NwKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKGNoaWxkX3NwLSZndDtyb2xlLmxldmVsICE9IFBHX0xFVkVMXzRLKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwl0ZHBfbW11X3NldF9zcHRlKGt2bSwgZXZlbnQtJmd0O3NwdGVwLCBldmVudC0mZ3Q7b2xkX3NwdGUsCiYjNDM7CQkJIFNIQURPV19OT05QUkVTRU5UX1ZBTFVFLCBldmVudC0mZ3Q7Z2ZuLCBldmVudC0mZ3Q7bGV2ZWwpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogSWYgY2FuX3lpZWxkIGlzIHRydWUsIHdpbGwgcmVsZWFzZSB0aGUgTU1VIGxvY2sgYW5kIHJlc2NoZWR1bGUgaWYgdGhlCiAgKiBzY2hlZHVsZXIgbmVlZHMgdGhlIENQVSBvciB0aGVyZSBpcyBjb250ZW50aW9uIG9uIHRoZSBNTVUgbG9jay4gSWYgdGhpcwpAQCAtOTMzLDcgJiM0Mzs5NjUsMTAgQEAgYm9vbCBrdm1fdGRwX21tdV96YXBfcG9zc2libGVfbnhfaHVnZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwKIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCwKIAkJCSAgICAgIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgY2FuX3lpZWxkLCBib29sIGZsdXNoKQogewomIzQzOwlzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgZXZlbnQgPSB7fTsKIAlzdHJ1Y3QgdGRwX2l0ZXIgaXRlcjsKJiM0MzsJdGRwX3B0ZXBfdCB6YXBwZWRfbGVhZl9wdCA9IE5VTEw7CiYjNDM7CWJvb2wgcmVtb3ZlZF9zcCA9IGZhbHNlOwogCiAJZW5kID0gbWluKGVuZCwgdGRwX21tdV9tYXhfZ2ZuX2V4Y2x1c2l2ZSgpKTsKIApAQCAtOTQxLDMzICYjNDM7OTc2LDU2IEBAIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCwKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCWZvcl9lYWNoX3RkcF9wdGVfbWluX2xldmVsKGl0ZXIsIGt2bSwgcm9vdCwgUEdfTEVWRUxfNEssIHN0YXJ0LCBlbmQpIHsKJiM0MzsJdGRwX2l0ZXJfc3RhcnQoJmFtcDtpdGVyLCByb290LCBQR19MRVZFTF80Sywgc3RhcnQsCiYjNDM7CQkgICAgICAga3ZtX2dmbl9yb290X2JpdHMoa3ZtLCByb290KSk7CiYjNDM7CXdoaWxlIChpdGVyLnZhbGlkICZhbXA7JmFtcDsgaXRlci5nZm4gJmx0OyBlbmQpIHsKIAkJaWYgKGNhbl95aWVsZCAmYW1wOyZhbXA7CiAJCSAgICB0ZHBfbW11X2l0ZXJfY29uZF9yZXNjaGVkKGt2bSwgJmFtcDtpdGVyLCBmbHVzaCwgZmFsc2UpKSB7CiAJCQlmbHVzaCA9IGZhbHNlOwomIzQzOwkJCXRkcF9pdGVyX25leHQoJmFtcDtpdGVyKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKCFpc19zaGFkb3dfcHJlc2VudF9wdGUoaXRlci5vbGRfc3B0ZSkgfHwKLQkJICAgICFpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpCi0JCQljb250aW51ZTsKJiM0MzsJCWlmIChpc19zaGFkb3dfcHJlc2VudF9wdGUoaXRlci5vbGRfc3B0ZSkgJmFtcDsmYW1wOwomIzQzOwkJICAgIGlzX2xhc3Rfc3B0ZShpdGVyLm9sZF9zcHRlLCBpdGVyLmxldmVsKSkgewomIzQzOwkJCWlmIChpdGVyLmxldmVsID09IFBHX0xFVkVMXzRLKSB7CiYjNDM7CQkJCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwOwogCi0JCXRkcF9tbXVfaXRlcl9zZXRfc3B0ZShrdm0sICZhbXA7aXRlciwgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUpOwomIzQzOwkJCQlzcCA9IHNwdGVwX3RvX3NwKHJjdV9kZXJlZmVyZW5jZShpdGVyLnNwdGVwKSk7CiYjNDM7CQkJCXphcHBlZF9sZWFmX3B0ID0gc3AtJmd0O3B0ZXA7CiYjNDM7CQkJfQogCi0JCS8qCi0JCSAqIFphcHBpbmdzIFNQVEVzIGluIGludmFsaWQgcm9vdHMgZG9lc24mIzM5O3QgcmVxdWlyZSBhIFRMQiBmbHVzaCwKLQkJICogc2VlIGt2bV90ZHBfbW11X3phcF9pbnZhbGlkYXRlZF9yb290cygpIGZvciBkZXRhaWxzLgotCQkgKi8KLQkJaWYgKCFyb290LSZndDtyb2xlLmludmFsaWQpCi0JCQlmbHVzaCA9IHRydWU7Ci0JfQomIzQzOwkJCXRkcF9tbXVfaXRlcl9zZXRfc3B0ZShrdm0sICZhbXA7aXRlciwKJiM0MzsJCQkJCSAgICAgIFNIQURPV19OT05QUkVTRU5UX1ZBTFVFKTsKIAotCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJCS8qCiYjNDM7CQkJICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2VzbiYjMzk7dCByZXF1aXJlIGEgVExCIGZsdXNoLAomIzQzOwkJCSAqIHNlZSBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoKSBmb3IgZGV0YWlscy4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoIXJvb3QtJmd0O3JvbGUuaW52YWxpZCkKJiM0MzsJCQkJZmx1c2ggPSB0cnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJdGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyKCZhbXA7aXRlciwgJmFtcDtldmVudCk7CiYjNDM7CQlpZiAoZXZlbnQudmFsaWQgJmFtcDsmYW1wOwomIzQzOwkJICAgIHRkcF9tbXVfemFwX2NvbXBsZXRlZF9lbXB0eV9sZWFmX3B0KGt2bSwgJmFtcDtldmVudCwgc3RhcnQsCiYjNDM7CQkJCQkJCWVuZCwgemFwcGVkX2xlYWZfcHQpKSB7CiYjNDM7CQkJaWYgKCFyb290LSZndDtyb2xlLmludmFsaWQpCiYjNDM7CQkJCWZsdXNoID0gdHJ1ZTsKJiM0MzsJCQlyZW1vdmVkX3NwID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJfQogCiAJLyoKLQkgKiBCZWNhdXNlIHRoaXMgZmxvdyB6YXBzIF9vbmx5XyBsZWFmIFNQVEVzLCB0aGUgY2FsbGVyIGRvZXNuJiMzOTt0IG5lZWQKLQkgKiB0byBwcm92aWRlIFJDVSBwcm90ZWN0aW9uIGFzIG5vICYjMzk7c3RydWN0IGt2bV9tbXVfcGFnZSYjMzk7IHdpbGwgYmUgZnJlZWQuCiYjNDM7CSAqIElmIGFueSBzaGFkb3cgcGFnZXMgd2VyZSByZW1vdmVkLCBzZXJ2aWNlIHBlbmRpbmcgVExCIGZsdXNoZXMgYmVmb3JlCiYjNDM7CSAqIGRyb3BwaW5nIFJDVSBwcm90ZWN0aW9uLCBhcyByZXF1aXJlZCBieSB0aGUgVERQIE1NVSBpdGVyYXRvci4KIAkgKi8KJiM0MzsJaWYgKHJlbW92ZWRfc3AgJmFtcDsmYW1wOyBmbHVzaCkgewomIzQzOwkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7CiYjNDM7CQlmbHVzaCA9IGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiBmbHVzaDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDczOQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDkyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBSaXNrIEFzc2Vzc21lbnQgZm9yIEtWTSBURFAgTU1VIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBjb25jZXJuaW5nIHRoZSBLVk0gVERQIE1NVSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgaW4gYHRkcF9pdGVyLmNgLCBgdGRwX2l0ZXIuaGAsIGFuZCBgdGRwX21tdS5jYC4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiBhbmFseXNpcy4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgKmRvaW5nKi4gSSYjMzk7bSBzZWVpbmcgdGhlIGludHJvZHVjdGlvbiBvZiBgc3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50YC4gTG9va2luZyBjbG9zZWx5IGF0IGB0ZHBfaXRlci5jYCwgdGhpcyBzdHJ1Y3QgYXBwZWFycyB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYW4gaXRlcmF0b3IuIEl0IGxvb2tzIGxpa2UgaXQgaG9sZHMgc3RhdGUgaW5mb3JtYXRpb24gZHVyaW5nIGEgdHJhdmVyc2FsLCBlc3BlY2lhbGx5IHRoZSBgX190ZHBfaXRlcl9uZXh0YCBhbmQgYHRyeV9zdGVwX3VwYCBmdW5jdGlvbnMgYXJlIGludGVyZXN0aW5nLiBUaGUgaW1wb3J0YW50IHBvaW50IEkmIzM5O3ZlIG5vdGljZWQgaGVyZSBpcyB0aGUgaW5pdGlhbGl6YXRpb24gc3RyYXRlZ3kgZm9yIHRoZSBldmVudC4gSW4gYHRkcF9tbXVfemFwX2xlYWZzYCB0aGUgYGV2ZW50YCBzdHJ1Y3R1cmUgaXMgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2suCgpXaXRoaW4gYHRkcF9pdGVyX25leHRfcG9zdF9vcmRlcmAsIHRoZSBgZXZlbnQtJmd0O3ZhbGlkYCBpcyBpbW1lZGlhdGVseSBzZXQgdG8gZmFsc2UuIFN1YnNlcXVlbnRseSwgaWYgYHRyeV9zdGVwX3VwYCBpcyBleGVjdXRlZCwgdGhlIHN0cnVjdCBldmVudCBmaWVsZHMgYXJlIHBvcHVsYXRlZCwgbmFtZWx5IGBzcHRlcGAsIGBvbGRfc3B0ZWAsIGBnZm5gLCBgbGV2ZWxgLCBhbmQgYHZhbGlkYCBhcmUgdXBkYXRlZC4gSWYgYGV2ZW50LnZhbGlkYCBpcyB0cnVlLCB0aGVuIGB0ZHBfbW11X3phcF9jb21wbGV0ZWRfZW1wdHlfbGVhZl9wdGAgcmVhZHMgZGF0YSBmcm9tIHRoZXNlIGZpZWxkcy4gSXQgbWFrZXMgYSBjaGVjayBiYXNlZCBvbiBgZXZlbnQudmFsaWRgLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogSXMgdGhlcmUgYW55IHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlPyBCYXNlZCBvbiBteSBhbmFseXNpcywgbm8uIFRoZSBgZXZlbnRgIHN0cnVjdCBpcyBpbml0aWFsaXplZCB0byB6ZXJvIGluaXRpYWxseSwgYW5kIGFsbCBmaWVsZHMgYXJlIHdyaXR0ZW4gKmJlZm9yZSogYmVpbmcgcmVhZCwgZWl0aGVyIGluIGB0cnlfc3RlcF91cGAgb3Igd2hlbiBgZXZlbnQudmFsaWRgIGlzIHRydWUuIFRoZXJlJiMzOTtzIG5vIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGluZGljYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGNvcGllZCBhbnl3aGVyZS4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSB0eXBpY2FsIG1lbW9yeSBhbGxvY2F0aW9uIHBpdGZhbGxzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIHZhbHVlcy4gVGhpcyBpcyBpbnRlcm5hbCBLVk0gcGFnZSB0YWJsZSBpdGVyYXRpb24sIHphcHBpbmcgbG9naWMuCgpTbywgbGV0JiMzOTtzIHN1bW1hcml6ZToKKiAgIGBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnRgIGlzIGluaXRpYWxpemVkIHRvIHplcm8KKiAgIGV2ZW50IGlzIHBvcHVsYXRlZCB3aXRoIHZhbGlkIGRhdGEKKiAgIGBldmVudC0mZ3Q7dmFsaWRgIGNoZWNrIHByb3RlY3RzIHJlYWRzIG9mIHRoZSBkYXRhCgpNeSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBLTVNBTiBjb25jZXJucy4gSXQmIzM5O3MgZXNzZW50aWFsbHkgaW50ZXJuYWwgS1ZNIFREUCBNTVUgcGFnZSB0YWJsZSBpdGVyYXRpb24gYW5kIHphcHBpbmcgYW5kIFRMQiBmbHVzaCBmb3IgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyAocGFnZSB0YWJsZSBtYW5hZ2VtZW50KS4gVGhlIGRhdGEgaXMgbWFuYWdlZCBpbnRlcm5hbGx5IGFuZCBkb2VzbiYjMzk7dCBsZWFrIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG91YmxlIGNoZWNrIHRoYXQgSSBkaWRuJiMzOTt0IG1pc3Mgc29tZXRoaW5nLiBJIGNhbiB1c2UgYGdyZXBwZXJgIG9yIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIHN1YnRsZSBkZXRhaWwuIFRoaXMgbG9va3MgY2xlYW4gZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLiBJIHRoaW5rIGl0JiMzOTtzIHNhZmUgdG8gZXhjbHVkZSBmcm9tIEtNU0FOIHNjcnV0aW55LiBJIHdpbGwgcXVpY2tseSBjaGVjayBhcm91bmQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkcF9tbXVfemFwX2xlYWZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz03MTEzPXZvaWQga3ZtX3phcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm5fc3RhcnQsIGdmbl90IGdmbl9lbmQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTI4LVx0aWYgKHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzEyOTpcdFx0Zmx1c2ggPSBrdm1fdGRwX21tdV96YXBfbGVhZnMoa3ZtLCBnZm5fc3RhcnQsIGdmbl9lbmQsIGZsdXNoKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzEzMC1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz05MjY9c3RhdGljIGJvb2wgdGRwX21tdV96YXBfY29tcGxldGVkX2VtcHR5X2xlYWZfcHQoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTk2NC0gKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjk2NTpzdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy05NjYtXHRcdFx0ICAgICAgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgYm9vbCBjYW5feWllbGQsIGJvb2wgZmx1c2gpXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzNi0gKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjEwMzc6Ym9vbCBrdm1fdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGZsdXNoKVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzOC17XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTA0Mi1cdGZvcl9lYWNoX3ZhbGlkX3RkcF9tbXVfcm9vdF95aWVsZF9zYWZlKGt2bSwgcm9vdCwgLTEpXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzoxMDQzOlx0XHRmbHVzaCA9IHRkcF9tbXVfemFwX2xlYWZzKGt2bSwgcm9vdCwgc3RhcnQsIGVuZCwgdHJ1ZSwgZmx1c2gpO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTA0NC1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz0xMzY1PWJvb2wga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEzNzMtXHRfX2Zvcl9lYWNoX3RkcF9tbXVfcm9vdF95aWVsZF9zYWZlKGt2bSwgcm9vdCwgcmFuZ2UtXHUwMDNlc2xvdC1cdTAwM2Vhc19pZCwgdHlwZXMpXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzoxMzc0Olx0XHRmbHVzaCA9IHRkcF9tbXVfemFwX2xlYWZzKGt2bSwgcm9vdCwgcmFuZ2UtXHUwMDNlc3RhcnQsIHJhbmdlLVx1MDAzZWVuZCxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEzNzUtXHRcdFx0XHRcdCAgcmFuZ2UtXHUwMDNlbWF5X2Jsb2NrLCBmbHVzaCk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg9NTc9c3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21tdV9wYWdlICp0ZHBfbW11X2dldF9yb290KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC02NS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oOjY2OmJvb2wga3ZtX3RkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgYm9vbCBmbHVzaCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC02Ny1ib29sIGt2bV90ZHBfbW11X3phcF9wb3NzaWJsZV9ueF9odWdlX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzMwCgkJCQkJCQlvdXRwdXQ6IDE4NwoJCQkJCQkJdGhvdWdodHM6IDEzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBObyBLTVNBTiBDb25jZXJucyBIZXJlKioKCk9rYXksIHNvIEkmIzM5O3ZlIHJldmlld2VkIHRoaXMgcHJvcG9zZWQgcGF0Y2gsIGFuZCBmcmFua2x5LCBpdCYjMzk7cyBwcmV0dHkgY2xlYW4uIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIG9wdGltaXppbmcgdGhlIEtWTSBURFAgTU1VIGJ5IG1vZGlmeWluZyB0aGUgaXRlcmF0b3IgYW5kIHBhZ2UgdGFibGUgemFwcGluZyBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhZGRpbmcgcG9zdC1vcmRlciB0cmF2ZXJzYWwgZXZlbnQgbm90aWZpY2F0aW9ucyB0byB6YXAgKmNvbXBsZXRlZCogZW1wdHkgbGVhZiBwYWdlIHRhYmxlcy4KCkkmIzM5O20gc2VlaW5nIHplcm8gaW5pdGlhbGl6YXRpb24gb2YgYWxsIHZhcmlhYmxlcywgbGlrZSB0aGF0IGBldmVudCA9IHt9YCBjYWxsLiBUaGF0JiMzOTtzIGdvb2QgcHJhY3RpY2UuIFBsdXMsIHRoZXJlJiMzOTtzIGFic29sdXRlbHkgbm8gaW5kaWNhdGlvbiBvZiBhbnkgdW5pbml0aWFsaXplZCBkYXRhIGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gTm8gY29waWVzIGFyZSBtYWRlIGFuZCBubyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyB1c2VkIGluIGJyYW5jaGVzIG9yIG90aGVyIGNvbnRyb2wgZmxvd3MuCgpGcmFua2x5LCBhbnkgYnVncyB0aGF0ICpjb3VsZCogYXJpc2Ug4oCTIHBhZ2UgdGFibGUgemFwcGluZyBpc3N1ZXMsIFRMQiBpbnZhbGlkYXRpb24gcHJvYmxlbXMsIFJDVSByYWNlIGNvbmRpdGlvbnMsIG9yIGNvbmN1cnJlbnQgTU1VIG1vZGlmaWNhdGlvbiBpc3N1ZXMg4oCTIGFyZSBnb2luZyB0byBiZSBjYXVnaHQgYnkgdGhlIHN0YW5kYXJkIHRvb2xzIHdlJiMzOTt2ZSBnb3QgaW4gcGxhY2U6IEtBU0FOLCBsb2NrZGVwLCBhbmQgb2YgY291cnNlLCBvdXIgZXhpc3RpbmcgZnVuY3Rpb25hbCB0ZXN0cy4gVGhlc2Ugc2hvdWxkIGNvdmVyIHVzLgoKR2l2ZW4gYWxsIG9mIHRoYXQsIHRoZXJlJiMzOTtzIGFic29sdXRlbHkgbm8gcmVhc29uIHRvIGZsYWcgdGhpcyBhcyBhIHBvdGVudGlhbCBLTVNBTiBpc3N1ZS4gVGhpcyBsb29rcyBzb2xpZCBmcm9tIG15IHBlcnNwZWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0mIzM5O3MgVERQIE1NVSBpdGVyYXRpb24gYW5kIHBhZ2UgdGFibGUgemFwcGluZyBsb2dpYyB0byB6YXAgY29tcGxldGVkIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgZHVyaW5nIGxlYWYgemFwcGluZy4gSXQgaW50cm9kdWNlcyBhIGBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnRgIHN0cnVjdHVyZSwgd2hpY2ggaXMgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2sgKGBldmVudCA9IHt9YCkgYW5kIHdob3NlIGZpZWxkcyBhcmUgZXhwbGljaXRseSBwb3B1bGF0ZWQgaW4gYHRyeV9zdGVwX3VwKClgIHdoZW5ldmVyIGBldmVudC1cdTAwM2V2YWxpZGAgaXMgc2V0IHRvIHRydWUuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgbGVmdCB1bmluaXRpYWxpemVkLCBhbmQgbm8gY29udHJvbC1mbG93IGRlY2lzaW9ucyBkZXBlbmQgb24gdW5pbml0aWFsaXplZCBzdGF0ZS4gUG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoaXMgY2hhbmdlIChlLmcuIFRMQiBmbHVzaGluZyBjb3JyZWN0bmVzcywgUkNVIGxpZmVjeWNsZSwgb3IgU1BURSBtb2RpZmljYXRpb24gcmFjZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJiMzOTtzIFREUCBNTVUgaXRlcmF0aW9uIGFuZCBwYWdlIHRhYmxlIHphcHBpbmcgbG9naWMgdG8gemFwIGNvbXBsZXRlZCBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzIGR1cmluZyBsZWFmIHphcHBpbmcuIEl0IGludHJvZHVjZXMgYSBgc3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50YCBzdHJ1Y3R1cmUsIHdoaWNoIGlzIHplcm8taW5pdGlhbGl6ZWQgb24gdGhlIHN0YWNrIChgZXZlbnQgPSB7fWApIGFuZCB3aG9zZSBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgcG9wdWxhdGVkIGluIGB0cnlfc3RlcF91cCgpYCB3aGVuZXZlciBgZXZlbnQtXHUwMDNldmFsaWRgIGlzIHNldCB0byB0cnVlLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGxlZnQgdW5pbml0aWFsaXplZCwgYW5kIG5vIGNvbnRyb2wtZmxvdyBkZWNpc2lvbnMgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIFBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGlzIGNoYW5nZSAoZS5nLiBUTEIgZmx1c2hpbmcgY29ycmVjdG5lc3MsIFJDVSBsaWZlY3ljbGUsIG9yIFNQVEUgbW9kaWZpY2F0aW9uIHJhY2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MjA6NTQuMDEwNjMxNDE1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwOTY2MDg5OTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJYODZfNjRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdGRwX21tdV96YXBfbGVhZnNcIixcbiAgICBcInRkcF9pdGVyX25leHRfcG9zdF9vcmRlclwiLFxuICAgIFwia3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlXCIsXG4gICAgXCJrdm1femFwX2dmbl9yYW5nZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJ3MgVERQIE1NVSBpdGVyYXRpb24gYW5kIHBhZ2UgdGFibGUgemFwcGluZyBsb2dpYyB0byB6YXAgY29tcGxldGVkIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgZHVyaW5nIGxlYWYgemFwcGluZy4gSXQgaW50cm9kdWNlcyBhIGBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnRgIHN0cnVjdHVyZSwgd2hpY2ggaXMgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2sgKGBldmVudCA9IHt9YCkgYW5kIHdob3NlIGZpZWxkcyBhcmUgZXhwbGljaXRseSBwb3B1bGF0ZWQgaW4gYHRyeV9zdGVwX3VwKClgIHdoZW5ldmVyIGBldmVudC1cXHUwMDNldmFsaWRgIGlzIHNldCB0byB0cnVlLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGxlZnQgdW5pbml0aWFsaXplZCwgYW5kIG5vIGNvbnRyb2wtZmxvdyBkZWNpc2lvbnMgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIFBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGlzIGNoYW5nZSAoZS5nLiBUTEIgZmx1c2hpbmcgY29ycmVjdG5lc3MsIFJDVSBsaWZlY3ljbGUsIG9yIFNQVEUgbW9kaWZpY2F0aW9uIHJhY2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBvc3Qtb3JkZXIgdHJhdmVyc2FsIHN1cHBvcnQgdG8gdGhlIEtWTSB4ODYgVERQIE1NVSBpdGVyYXRvciBhbmQgdXBkYXRlcyB0ZHBfbW11X3phcF9sZWFmcygpIHRvIGF1dG9tYXRpY2FsbHkgemFwIGNvbXBsZXRlZCBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzIChhbmQgaGFuZGxlIHRoZSBjb3JyZXNwb25kaW5nIHJlbW90ZSBUTEIgZmx1c2ggd2hlbiBzaGFkb3cgcGFnZXMgYXJlIGZyZWVkKS4gVGhpcyBhbHRlcnMgY29yZSBNTVUgcGFnZS10YWJsZSB6YXBwaW5nIGJlaGF2aW9yIGluIEtWTSB4ODYgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjIwOjU0LjAxMDYzNzQ4NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwNzgwNjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjY0YjE5N2MzM2IzZGQ2MzI4YTA1OGQyNjU3MjcyYzNlYjVlOTVlY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDoyMDo1MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmNcXG5pbmRleCA5ZTE3YmZhODA5MDExLi5kOWJlNDI5ODQxMGQwIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1xcbkBAIC0xMzIsNyArMTMyLDggQEAgc3RhdGljIGJvb2wgdHJ5X3N0ZXBfc2lkZShzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXFxuICAqIGNhbiBjb250aW51ZSBmcm9tIHRoZSBuZXh0IGVudHJ5IGluIHRoZSBwYXJlbnQgcGFnZSB0YWJsZS4gUmV0dXJucyB0cnVlIG9uIGFcXG4gICogc3VjY2Vzc2Z1bCBzdGVwIHVwLCBmYWxzZSBpZiBhbHJlYWR5IGluIHRoZSByb290IHBhZ2UuXFxuICAqL1xcbi1zdGF0aWMgYm9vbCB0cnlfc3RlcF91cChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXFxuK3N0YXRpYyBib29sIHRyeV9zdGVwX3VwKHN0cnVjdCB0ZHBfaXRlciAqaXRlcixcXG4rXFx0XFx0XFx0c3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50ICpldmVudClcXG4ge1xcbiBcXHRpZiAoaXRlci1cXHUwMDNlbGV2ZWwgPT0gaXRlci1cXHUwMDNlcm9vdF9sZXZlbClcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbkBAIC0xNDEsNiArMTQyLDE0IEBAIHN0YXRpYyBib29sIHRyeV9zdGVwX3VwKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcXG4gXFx0aXRlci1cXHUwMDNlZ2ZuID0gZ2ZuX3JvdW5kX2Zvcl9sZXZlbChpdGVyLVxcdTAwM2VnZm4sIGl0ZXItXFx1MDAzZWxldmVsKTtcXG4gXFx0dGRwX2l0ZXJfcmVmcmVzaF9zcHRlcChpdGVyKTtcXG4gXFxuK1xcdGlmIChldmVudCBcXHUwMDI2XFx1MDAyNiAhZXZlbnQtXFx1MDAzZXZhbGlkKSB7XFxuK1xcdFxcdGV2ZW50LVxcdTAwM2VzcHRlcCA9IGl0ZXItXFx1MDAzZXNwdGVwO1xcbitcXHRcXHRldmVudC1cXHUwMDNlb2xkX3NwdGUgPSBpdGVyLVxcdTAwM2VvbGRfc3B0ZTtcXG4rXFx0XFx0ZXZlbnQtXFx1MDAzZWdmbiA9IGl0ZXItXFx1MDAzZWdmbjtcXG4rXFx0XFx0ZXZlbnQtXFx1MDAzZWxldmVsID0gaXRlci1cXHUwMDNlbGV2ZWw7XFxuK1xcdFxcdGV2ZW50LVxcdTAwM2V2YWxpZCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbkBAIC0xNjAsOCArMTY5LDEyIEBAIHN0YXRpYyBib29sIHRyeV9zdGVwX3VwKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcXG4gICogICAgU1BURSB3aWxsIGhhdmUgYWxyZWFkeSBiZWVuIHZpc2l0ZWQsIGFuZCBzbyB0aGUgaXRlcmF0b3IgbXVzdCBhbHNvIHN0ZXBcXG4gICogICAgdG8gdGhlIHNpZGUgYWdhaW4uXFxuICAqL1xcbi12b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxcbitzdGF0aWMgdm9pZCBfX3RkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50ICpldmVudClcXG4ge1xcbitcXHRpZiAoZXZlbnQpXFxuK1xcdFxcdGV2ZW50LVxcdTAwM2V2YWxpZCA9IGZhbHNlO1xcbitcXG4gXFx0aWYgKGl0ZXItXFx1MDAzZXlpZWxkZWQpIHtcXG4gXFx0XFx0dGRwX2l0ZXJfcmVzdGFydChpdGVyKTtcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0xNzMsNyArMTg2LDE3IEBAIHZvaWQgdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXFxuIFxcdGRvIHtcXG4gXFx0XFx0aWYgKHRyeV9zdGVwX3NpZGUoaXRlcikpXFxuIFxcdFxcdFxcdHJldHVybjtcXG4tXFx0fSB3aGlsZSAodHJ5X3N0ZXBfdXAoaXRlcikpO1xcbitcXHR9IHdoaWxlICh0cnlfc3RlcF91cChpdGVyLCBldmVudCkpO1xcbiBcXHRpdGVyLVxcdTAwM2V2YWxpZCA9IGZhbHNlO1xcbiB9XFxuIFxcbit2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxcbit7XFxuK1xcdF9fdGRwX2l0ZXJfbmV4dChpdGVyLCBOVUxMKTtcXG4rfVxcbitcXG4rdm9pZCB0ZHBfaXRlcl9uZXh0X3Bvc3Rfb3JkZXIoc3RydWN0IHRkcF9pdGVyICppdGVyLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgKmV2ZW50KVxcbit7XFxuK1xcdF9fdGRwX2l0ZXJfbmV4dChpdGVyLCBldmVudCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oXFxuaW5kZXggZjg5OGQ4ZDBkOTNjMi4uYjdlMjYwNWZiZjllOSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmhcXG5AQCAtMTIzLDYgKzEyMywxNCBAQCBzdHJ1Y3QgdGRwX2l0ZXIge1xcbiBcXHRib29sIHlpZWxkZWQ7XFxuIH07XFxuIFxcbitzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQge1xcbitcXHR0ZHBfcHRlcF90IHNwdGVwO1xcbitcXHR1NjQgb2xkX3NwdGU7XFxuK1xcdGdmbl90IGdmbjtcXG4rXFx0aW50IGxldmVsO1xcbitcXHRib29sIHZhbGlkO1xcbit9O1xcbitcXG4gLypcXG4gICogSXRlcmF0ZXMgb3ZlciBldmVyeSBTUFRFIG1hcHBpbmcgdGhlIEdGTiByYW5nZSBbc3RhcnQsIGVuZCkgaW4gYVxcbiAgKiBwcmVvcmRlciB0cmF2ZXJzYWwuXFxuQEAgLTE0NSw2ICsxNTMsOCBAQCB0ZHBfcHRlcF90IHNwdGVfdG9fY2hpbGRfcHQodTY0IHB0ZSwgaW50IGxldmVsKTtcXG4gdm9pZCB0ZHBfaXRlcl9zdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXFxuIFxcdFxcdCAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cyk7XFxuIHZvaWQgdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpO1xcbit2b2lkIHRkcF9pdGVyX25leHRfcG9zdF9vcmRlcihzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQpO1xcbiB2b2lkIHRkcF9pdGVyX3Jlc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyKTtcXG4gXFxuICNlbmRpZiAvKiBfX0tWTV9YODZfTU1VX1REUF9JVEVSX0ggKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY1xcbmluZGV4IDQ0ZGFkMTA2ZmFkMTkuLjgyNDQ2YzQ3MzdmNzkgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY1xcbkBAIC05MjMsNiArOTIzLDM4IEBAIGJvb2wga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9jb21wbGV0ZWRfZW1wdHlfbGVhZl9wdChzdHJ1Y3Qga3ZtICprdm0sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHRkcF9wdGVwX3QgemFwcGVkX2xlYWZfcHQpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV9tbXVfcGFnZSAqY2hpbGRfc3A7XFxuK1xcbitcXHRpZiAoZXZlbnQtXFx1MDAzZWxldmVsICE9IFBHX0xFVkVMXzJNIHx8XFxuK1xcdCAgICAhaXNfc2hhZG93X3ByZXNlbnRfcHRlKGV2ZW50LVxcdTAwM2VvbGRfc3B0ZSkgfHxcXG4rXFx0ICAgIGlzX2xhc3Rfc3B0ZShldmVudC1cXHUwMDNlb2xkX3NwdGUsIGV2ZW50LVxcdTAwM2VsZXZlbCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChldmVudC1cXHUwMDNlZ2ZuIFxcdTAwM2Mgc3RhcnQgfHxcXG4rXFx0ICAgIGV2ZW50LVxcdTAwM2VnZm4gKyBLVk1fUEFHRVNfUEVSX0hQQUdFKGV2ZW50LVxcdTAwM2VsZXZlbCkgXFx1MDAzZSBlbmQpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdC8qIExlYXZlIHByb2R1Y3RpdmUgbGVhZiB0YWJsZXMgaW4gcGxhY2UgdG8gYXZvaWQgcmVmYXVsdCBjaHVybi4gKi9cXG4rXFx0aWYgKHphcHBlZF9sZWFmX3B0ID09IGV2ZW50LVxcdTAwM2VzcHRlcClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Y2hpbGRfc3AgPSBzcHRlX3RvX2NoaWxkX3NwKGV2ZW50LVxcdTAwM2VvbGRfc3B0ZSk7XFxuK1xcdGlmIChpc19taXJyb3Jfc3AoY2hpbGRfc3ApKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAoY2hpbGRfc3AtXFx1MDAzZXJvbGUubGV2ZWwgIT0gUEdfTEVWRUxfNEspXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHRkcF9tbXVfc2V0X3NwdGUoa3ZtLCBldmVudC1cXHUwMDNlc3B0ZXAsIGV2ZW50LVxcdTAwM2VvbGRfc3B0ZSxcXG4rXFx0XFx0XFx0IFNIQURPV19OT05QUkVTRU5UX1ZBTFVFLCBldmVudC1cXHUwMDNlZ2ZuLCBldmVudC1cXHUwMDNlbGV2ZWwpO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gLypcXG4gICogSWYgY2FuX3lpZWxkIGlzIHRydWUsIHdpbGwgcmVsZWFzZSB0aGUgTU1VIGxvY2sgYW5kIHJlc2NoZWR1bGUgaWYgdGhlXFxuICAqIHNjaGVkdWxlciBuZWVkcyB0aGUgQ1BVIG9yIHRoZXJlIGlzIGNvbnRlbnRpb24gb24gdGhlIE1NVSBsb2NrLiBJZiB0aGlzXFxuQEAgLTkzMyw3ICs5NjUsMTAgQEAgYm9vbCBrdm1fdGRwX21tdV96YXBfcG9zc2libGVfbnhfaHVnZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSxcXG4gc3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxcbiBcXHRcXHRcXHQgICAgICBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGNhbl95aWVsZCwgYm9vbCBmbHVzaClcXG4ge1xcbitcXHRzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgZXZlbnQgPSB7fTtcXG4gXFx0c3RydWN0IHRkcF9pdGVyIGl0ZXI7XFxuK1xcdHRkcF9wdGVwX3QgemFwcGVkX2xlYWZfcHQgPSBOVUxMO1xcbitcXHRib29sIHJlbW92ZWRfc3AgPSBmYWxzZTtcXG4gXFxuIFxcdGVuZCA9IG1pbihlbmQsIHRkcF9tbXVfbWF4X2dmbl9leGNsdXNpdmUoKSk7XFxuIFxcbkBAIC05NDEsMzMgKzk3Niw1NiBAQCBzdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcbi1cXHRmb3JfZWFjaF90ZHBfcHRlX21pbl9sZXZlbChpdGVyLCBrdm0sIHJvb3QsIFBHX0xFVkVMXzRLLCBzdGFydCwgZW5kKSB7XFxuK1xcdHRkcF9pdGVyX3N0YXJ0KFxcdTAwMjZpdGVyLCByb290LCBQR19MRVZFTF80Sywgc3RhcnQsXFxuK1xcdFxcdCAgICAgICBrdm1fZ2ZuX3Jvb3RfYml0cyhrdm0sIHJvb3QpKTtcXG4rXFx0d2hpbGUgKGl0ZXIudmFsaWQgXFx1MDAyNlxcdTAwMjYgaXRlci5nZm4gXFx1MDAzYyBlbmQpIHtcXG4gXFx0XFx0aWYgKGNhbl95aWVsZCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgdGRwX21tdV9pdGVyX2NvbmRfcmVzY2hlZChrdm0sIFxcdTAwMjZpdGVyLCBmbHVzaCwgZmFsc2UpKSB7XFxuIFxcdFxcdFxcdGZsdXNoID0gZmFsc2U7XFxuK1xcdFxcdFxcdHRkcF9pdGVyX25leHQoXFx1MDAyNml0ZXIpO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0aWYgKCFpc19zaGFkb3dfcHJlc2VudF9wdGUoaXRlci5vbGRfc3B0ZSkgfHxcXG4tXFx0XFx0ICAgICFpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoaXNfc2hhZG93X3ByZXNlbnRfcHRlKGl0ZXIub2xkX3NwdGUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpIHtcXG4rXFx0XFx0XFx0aWYgKGl0ZXIubGV2ZWwgPT0gUEdfTEVWRUxfNEspIHtcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7XFxuIFxcbi1cXHRcXHR0ZHBfbW11X2l0ZXJfc2V0X3NwdGUoa3ZtLCBcXHUwMDI2aXRlciwgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUpO1xcbitcXHRcXHRcXHRcXHRzcCA9IHNwdGVwX3RvX3NwKHJjdV9kZXJlZmVyZW5jZShpdGVyLnNwdGVwKSk7XFxuK1xcdFxcdFxcdFxcdHphcHBlZF9sZWFmX3B0ID0gc3AtXFx1MDAzZXB0ZXA7XFxuK1xcdFxcdFxcdH1cXG4gXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFphcHBpbmdzIFNQVEVzIGluIGludmFsaWQgcm9vdHMgZG9lc24ndCByZXF1aXJlIGEgVExCIGZsdXNoLFxcbi1cXHRcXHQgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoIXJvb3QtXFx1MDAzZXJvbGUuaW52YWxpZClcXG4tXFx0XFx0XFx0Zmx1c2ggPSB0cnVlO1xcbi1cXHR9XFxuK1xcdFxcdFxcdHRkcF9tbXVfaXRlcl9zZXRfc3B0ZShrdm0sIFxcdTAwMjZpdGVyLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSk7XFxuIFxcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2Vzbid0IHJlcXVpcmUgYSBUTEIgZmx1c2gsXFxuK1xcdFxcdFxcdCAqIHNlZSBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoKSBmb3IgZGV0YWlscy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmICghcm9vdC1cXHUwMDNlcm9sZS5pbnZhbGlkKVxcbitcXHRcXHRcXHRcXHRmbHVzaCA9IHRydWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHRkcF9pdGVyX25leHRfcG9zdF9vcmRlcihcXHUwMDI2aXRlciwgXFx1MDAyNmV2ZW50KTtcXG4rXFx0XFx0aWYgKGV2ZW50LnZhbGlkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICB0ZHBfbW11X3phcF9jb21wbGV0ZWRfZW1wdHlfbGVhZl9wdChrdm0sIFxcdTAwMjZldmVudCwgc3RhcnQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGVuZCwgemFwcGVkX2xlYWZfcHQpKSB7XFxuK1xcdFxcdFxcdGlmICghcm9vdC1cXHUwMDNlcm9sZS5pbnZhbGlkKVxcbitcXHRcXHRcXHRcXHRmbHVzaCA9IHRydWU7XFxuK1xcdFxcdFxcdHJlbW92ZWRfc3AgPSB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFxuIFxcdC8qXFxuLVxcdCAqIEJlY2F1c2UgdGhpcyBmbG93IHphcHMgX29ubHlfIGxlYWYgU1BURXMsIHRoZSBjYWxsZXIgZG9lc24ndCBuZWVkXFxuLVxcdCAqIHRvIHByb3ZpZGUgUkNVIHByb3RlY3Rpb24gYXMgbm8gJ3N0cnVjdCBrdm1fbW11X3BhZ2UnIHdpbGwgYmUgZnJlZWQuXFxuK1xcdCAqIElmIGFueSBzaGFkb3cgcGFnZXMgd2VyZSByZW1vdmVkLCBzZXJ2aWNlIHBlbmRpbmcgVExCIGZsdXNoZXMgYmVmb3JlXFxuK1xcdCAqIGRyb3BwaW5nIFJDVSBwcm90ZWN0aW9uLCBhcyByZXF1aXJlZCBieSB0aGUgVERQIE1NVSBpdGVyYXRvci5cXG4gXFx0ICovXFxuK1xcdGlmIChyZW1vdmVkX3NwIFxcdTAwMjZcXHUwMDI2IGZsdXNoKSB7XFxuK1xcdFxcdGt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pO1xcbitcXHRcXHRmbHVzaCA9IGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0cmV0dXJuIGZsdXNoO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoyMDo1NC40NTIwNTA1NjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3OTIyNTI4NDk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiWDg2XzY0XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3RkcF9tbXVfemFwX2xlYWZzXCIsXG4gICAgXCJ0ZHBfaXRlcl9uZXh0X3Bvc3Rfb3JkZXJcIixcbiAgICBcImt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZVwiLFxuICAgIFwia3ZtX3phcF9nZm5fcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBvc3Qtb3JkZXIgdHJhdmVyc2FsIHN1cHBvcnQgdG8gdGhlIEtWTSB4ODYgVERQIE1NVSBpdGVyYXRvciBhbmQgdXBkYXRlcyB0ZHBfbW11X3phcF9sZWFmcygpIHRvIGF1dG9tYXRpY2FsbHkgemFwIGNvbXBsZXRlZCBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzIChhbmQgaGFuZGxlIHRoZSBjb3JyZXNwb25kaW5nIHJlbW90ZSBUTEIgZmx1c2ggd2hlbiBzaGFkb3cgcGFnZXMgYXJlIGZyZWVkKS4gVGhpcyBhbHRlcnMgY29yZSBNTVUgcGFnZS10YWJsZSB6YXBwaW5nIGJlaGF2aW9yIGluIEtWTSB4ODYgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY2NGIxOTdjMzNiM2RkNjMyOGEwNThkMjY1NzI3MmMzZWI1ZTk1ZWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDoyMDo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1xuaW5kZXggOWUxN2JmYTgwOTAxMS4uZDliZTQyOTg0MTBkMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1xuKysrIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jXG5AQCAtMTMyLDcgKzEzMiw4IEBAIHN0YXRpYyBib29sIHRyeV9zdGVwX3NpZGUoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuICAqIGNhbiBjb250aW51ZSBmcm9tIHRoZSBuZXh0IGVudHJ5IGluIHRoZSBwYXJlbnQgcGFnZSB0YWJsZS4gUmV0dXJucyB0cnVlIG9uIGFcbiAgKiBzdWNjZXNzZnVsIHN0ZXAgdXAsIGZhbHNlIGlmIGFscmVhZHkgaW4gdGhlIHJvb3QgcGFnZS5cbiAgKi9cbi1zdGF0aWMgYm9vbCB0cnlfc3RlcF91cChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4rc3RhdGljIGJvb2wgdHJ5X3N0ZXBfdXAoc3RydWN0IHRkcF9pdGVyICppdGVyLFxuK1x0XHRcdHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQpXG4ge1xuIFx0aWYgKGl0ZXItXHUwMDNlbGV2ZWwgPT0gaXRlci1cdTAwM2Vyb290X2xldmVsKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG5AQCAtMTQxLDYgKzE0MiwxNCBAQCBzdGF0aWMgYm9vbCB0cnlfc3RlcF91cChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4gXHRpdGVyLVx1MDAzZWdmbiA9IGdmbl9yb3VuZF9mb3JfbGV2ZWwoaXRlci1cdTAwM2VnZm4sIGl0ZXItXHUwMDNlbGV2ZWwpO1xuIFx0dGRwX2l0ZXJfcmVmcmVzaF9zcHRlcChpdGVyKTtcbiBcbitcdGlmIChldmVudCBcdTAwMjZcdTAwMjYgIWV2ZW50LVx1MDAzZXZhbGlkKSB7XG4rXHRcdGV2ZW50LVx1MDAzZXNwdGVwID0gaXRlci1cdTAwM2VzcHRlcDtcbitcdFx0ZXZlbnQtXHUwMDNlb2xkX3NwdGUgPSBpdGVyLVx1MDAzZW9sZF9zcHRlO1xuK1x0XHRldmVudC1cdTAwM2VnZm4gPSBpdGVyLVx1MDAzZWdmbjtcbitcdFx0ZXZlbnQtXHUwMDNlbGV2ZWwgPSBpdGVyLVx1MDAzZWxldmVsO1xuK1x0XHRldmVudC1cdTAwM2V2YWxpZCA9IHRydWU7XG4rXHR9XG4rXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG5AQCAtMTYwLDggKzE2OSwxMiBAQCBzdGF0aWMgYm9vbCB0cnlfc3RlcF91cChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4gICogICAgU1BURSB3aWxsIGhhdmUgYWxyZWFkeSBiZWVuIHZpc2l0ZWQsIGFuZCBzbyB0aGUgaXRlcmF0b3IgbXVzdCBhbHNvIHN0ZXBcbiAgKiAgICB0byB0aGUgc2lkZSBhZ2Fpbi5cbiAgKi9cbi12b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuK3N0YXRpYyB2b2lkIF9fdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsXG4rXHRcdFx0ICAgIHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQpXG4ge1xuK1x0aWYgKGV2ZW50KVxuK1x0XHRldmVudC1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuK1xuIFx0aWYgKGl0ZXItXHUwMDNleWllbGRlZCkge1xuIFx0XHR0ZHBfaXRlcl9yZXN0YXJ0KGl0ZXIpO1xuIFx0XHRyZXR1cm47XG5AQCAtMTczLDcgKzE4NiwxNyBAQCB2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuIFx0ZG8ge1xuIFx0XHRpZiAodHJ5X3N0ZXBfc2lkZShpdGVyKSlcbiBcdFx0XHRyZXR1cm47XG4tXHR9IHdoaWxlICh0cnlfc3RlcF91cChpdGVyKSk7XG4rXHR9IHdoaWxlICh0cnlfc3RlcF91cChpdGVyLCBldmVudCkpO1xuIFx0aXRlci1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuIH1cbiBcbit2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuK3tcbitcdF9fdGRwX2l0ZXJfbmV4dChpdGVyLCBOVUxMKTtcbit9XG4rXG4rdm9pZCB0ZHBfaXRlcl9uZXh0X3Bvc3Rfb3JkZXIoc3RydWN0IHRkcF9pdGVyICppdGVyLFxuK1x0XHRcdCAgICAgIHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQpXG4re1xuK1x0X190ZHBfaXRlcl9uZXh0KGl0ZXIsIGV2ZW50KTtcbit9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oXG5pbmRleCBmODk4ZDhkMGQ5M2MyLi5iN2UyNjA1ZmJmOWU5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmhcbkBAIC0xMjMsNiArMTIzLDE0IEBAIHN0cnVjdCB0ZHBfaXRlciB7XG4gXHRib29sIHlpZWxkZWQ7XG4gfTtcbiBcbitzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQge1xuK1x0dGRwX3B0ZXBfdCBzcHRlcDtcbitcdHU2NCBvbGRfc3B0ZTtcbitcdGdmbl90IGdmbjtcbitcdGludCBsZXZlbDtcbitcdGJvb2wgdmFsaWQ7XG4rfTtcbitcbiAvKlxuICAqIEl0ZXJhdGVzIG92ZXIgZXZlcnkgU1BURSBtYXBwaW5nIHRoZSBHRk4gcmFuZ2UgW3N0YXJ0LCBlbmQpIGluIGFcbiAgKiBwcmVvcmRlciB0cmF2ZXJzYWwuXG5AQCAtMTQ1LDYgKzE1Myw4IEBAIHRkcF9wdGVwX3Qgc3B0ZV90b19jaGlsZF9wdCh1NjQgcHRlLCBpbnQgbGV2ZWwpO1xuIHZvaWQgdGRwX2l0ZXJfc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxuIFx0XHQgICAgaW50IG1pbl9sZXZlbCwgZ2ZuX3QgbmV4dF9sYXN0X2xldmVsX2dmbiwgZ2ZuX3QgZ2ZuX2JpdHMpO1xuIHZvaWQgdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpO1xuK3ZvaWQgdGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyKHN0cnVjdCB0ZHBfaXRlciAqaXRlcixcbitcdFx0XHQgICAgICBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgKmV2ZW50KTtcbiB2b2lkIHRkcF9pdGVyX3Jlc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyKTtcbiBcbiAjZW5kaWYgLyogX19LVk1fWDg2X01NVV9URFBfSVRFUl9IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY1xuaW5kZXggNDRkYWQxMDZmYWQxOS4uODI0NDZjNDczN2Y3OSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY1xuQEAgLTkyMyw2ICs5MjMsMzggQEAgYm9vbCBrdm1fdGRwX21tdV96YXBfcG9zc2libGVfbnhfaHVnZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitzdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9jb21wbGV0ZWRfZW1wdHlfbGVhZl9wdChzdHJ1Y3Qga3ZtICprdm0sXG4rXHRcdFx0XHRcdFx0c3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50ICpldmVudCxcbitcdFx0XHRcdFx0XHRnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxuK1x0XHRcdFx0XHRcdHRkcF9wdGVwX3QgemFwcGVkX2xlYWZfcHQpXG4re1xuK1x0c3RydWN0IGt2bV9tbXVfcGFnZSAqY2hpbGRfc3A7XG4rXG4rXHRpZiAoZXZlbnQtXHUwMDNlbGV2ZWwgIT0gUEdfTEVWRUxfMk0gfHxcbitcdCAgICAhaXNfc2hhZG93X3ByZXNlbnRfcHRlKGV2ZW50LVx1MDAzZW9sZF9zcHRlKSB8fFxuK1x0ICAgIGlzX2xhc3Rfc3B0ZShldmVudC1cdTAwM2VvbGRfc3B0ZSwgZXZlbnQtXHUwMDNlbGV2ZWwpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoZXZlbnQtXHUwMDNlZ2ZuIFx1MDAzYyBzdGFydCB8fFxuK1x0ICAgIGV2ZW50LVx1MDAzZWdmbiArIEtWTV9QQUdFU19QRVJfSFBBR0UoZXZlbnQtXHUwMDNlbGV2ZWwpIFx1MDAzZSBlbmQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIExlYXZlIHByb2R1Y3RpdmUgbGVhZiB0YWJsZXMgaW4gcGxhY2UgdG8gYXZvaWQgcmVmYXVsdCBjaHVybi4gKi9cbitcdGlmICh6YXBwZWRfbGVhZl9wdCA9PSBldmVudC1cdTAwM2VzcHRlcClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Y2hpbGRfc3AgPSBzcHRlX3RvX2NoaWxkX3NwKGV2ZW50LVx1MDAzZW9sZF9zcHRlKTtcbitcdGlmIChpc19taXJyb3Jfc3AoY2hpbGRfc3ApKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoY2hpbGRfc3AtXHUwMDNlcm9sZS5sZXZlbCAhPSBQR19MRVZFTF80SylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0dGRwX21tdV9zZXRfc3B0ZShrdm0sIGV2ZW50LVx1MDAzZXNwdGVwLCBldmVudC1cdTAwM2VvbGRfc3B0ZSxcbitcdFx0XHQgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUsIGV2ZW50LVx1MDAzZWdmbiwgZXZlbnQtXHUwMDNlbGV2ZWwpO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIC8qXG4gICogSWYgY2FuX3lpZWxkIGlzIHRydWUsIHdpbGwgcmVsZWFzZSB0aGUgTU1VIGxvY2sgYW5kIHJlc2NoZWR1bGUgaWYgdGhlXG4gICogc2NoZWR1bGVyIG5lZWRzIHRoZSBDUFUgb3IgdGhlcmUgaXMgY29udGVudGlvbiBvbiB0aGUgTU1VIGxvY2suIElmIHRoaXNcbkBAIC05MzMsNyArOTY1LDEwIEBAIGJvb2wga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXG4gc3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxuIFx0XHRcdCAgICAgIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgY2FuX3lpZWxkLCBib29sIGZsdXNoKVxuIHtcbitcdHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCBldmVudCA9IHt9O1xuIFx0c3RydWN0IHRkcF9pdGVyIGl0ZXI7XG4rXHR0ZHBfcHRlcF90IHphcHBlZF9sZWFmX3B0ID0gTlVMTDtcbitcdGJvb2wgcmVtb3ZlZF9zcCA9IGZhbHNlO1xuIFxuIFx0ZW5kID0gbWluKGVuZCwgdGRwX21tdV9tYXhfZ2ZuX2V4Y2x1c2l2ZSgpKTtcbiBcbkBAIC05NDEsMzMgKzk3Niw1NiBAQCBzdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXG4tXHRmb3JfZWFjaF90ZHBfcHRlX21pbl9sZXZlbChpdGVyLCBrdm0sIHJvb3QsIFBHX0xFVkVMXzRLLCBzdGFydCwgZW5kKSB7XG4rXHR0ZHBfaXRlcl9zdGFydChcdTAwMjZpdGVyLCByb290LCBQR19MRVZFTF80Sywgc3RhcnQsXG4rXHRcdCAgICAgICBrdm1fZ2ZuX3Jvb3RfYml0cyhrdm0sIHJvb3QpKTtcbitcdHdoaWxlIChpdGVyLnZhbGlkIFx1MDAyNlx1MDAyNiBpdGVyLmdmbiBcdTAwM2MgZW5kKSB7XG4gXHRcdGlmIChjYW5feWllbGQgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICB0ZHBfbW11X2l0ZXJfY29uZF9yZXNjaGVkKGt2bSwgXHUwMDI2aXRlciwgZmx1c2gsIGZhbHNlKSkge1xuIFx0XHRcdGZsdXNoID0gZmFsc2U7XG4rXHRcdFx0dGRwX2l0ZXJfbmV4dChcdTAwMjZpdGVyKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoIWlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLm9sZF9zcHRlKSB8fFxuLVx0XHQgICAgIWlzX2xhc3Rfc3B0ZShpdGVyLm9sZF9zcHRlLCBpdGVyLmxldmVsKSlcbi1cdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLm9sZF9zcHRlKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGlzX2xhc3Rfc3B0ZShpdGVyLm9sZF9zcHRlLCBpdGVyLmxldmVsKSkge1xuK1x0XHRcdGlmIChpdGVyLmxldmVsID09IFBHX0xFVkVMXzRLKSB7XG4rXHRcdFx0XHRzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDtcbiBcbi1cdFx0dGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgXHUwMDI2aXRlciwgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUpO1xuK1x0XHRcdFx0c3AgPSBzcHRlcF90b19zcChyY3VfZGVyZWZlcmVuY2UoaXRlci5zcHRlcCkpO1xuK1x0XHRcdFx0emFwcGVkX2xlYWZfcHQgPSBzcC1cdTAwM2VwdGVwO1xuK1x0XHRcdH1cbiBcbi1cdFx0Lypcbi1cdFx0ICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2Vzbid0IHJlcXVpcmUgYSBUTEIgZmx1c2gsXG4tXHRcdCAqIHNlZSBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoKSBmb3IgZGV0YWlscy5cbi1cdFx0ICovXG4tXHRcdGlmICghcm9vdC1cdTAwM2Vyb2xlLmludmFsaWQpXG4tXHRcdFx0Zmx1c2ggPSB0cnVlO1xuLVx0fVxuK1x0XHRcdHRkcF9tbXVfaXRlcl9zZXRfc3B0ZShrdm0sIFx1MDAyNml0ZXIsXG4rXHRcdFx0XHRcdCAgICAgIFNIQURPV19OT05QUkVTRU5UX1ZBTFVFKTtcbiBcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2Vzbid0IHJlcXVpcmUgYSBUTEIgZmx1c2gsXG4rXHRcdFx0ICogc2VlIGt2bV90ZHBfbW11X3phcF9pbnZhbGlkYXRlZF9yb290cygpIGZvciBkZXRhaWxzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmICghcm9vdC1cdTAwM2Vyb2xlLmludmFsaWQpXG4rXHRcdFx0XHRmbHVzaCA9IHRydWU7XG4rXHRcdH1cbitcbitcdFx0dGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyKFx1MDAyNml0ZXIsIFx1MDAyNmV2ZW50KTtcbitcdFx0aWYgKGV2ZW50LnZhbGlkIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgdGRwX21tdV96YXBfY29tcGxldGVkX2VtcHR5X2xlYWZfcHQoa3ZtLCBcdTAwMjZldmVudCwgc3RhcnQsXG4rXHRcdFx0XHRcdFx0XHRlbmQsIHphcHBlZF9sZWFmX3B0KSkge1xuK1x0XHRcdGlmICghcm9vdC1cdTAwM2Vyb2xlLmludmFsaWQpXG4rXHRcdFx0XHRmbHVzaCA9IHRydWU7XG4rXHRcdFx0cmVtb3ZlZF9zcCA9IHRydWU7XG4rXHRcdH1cbitcdH1cbiBcbiBcdC8qXG4tXHQgKiBCZWNhdXNlIHRoaXMgZmxvdyB6YXBzIF9vbmx5XyBsZWFmIFNQVEVzLCB0aGUgY2FsbGVyIGRvZXNuJ3QgbmVlZFxuLVx0ICogdG8gcHJvdmlkZSBSQ1UgcHJvdGVjdGlvbiBhcyBubyAnc3RydWN0IGt2bV9tbXVfcGFnZScgd2lsbCBiZSBmcmVlZC5cbitcdCAqIElmIGFueSBzaGFkb3cgcGFnZXMgd2VyZSByZW1vdmVkLCBzZXJ2aWNlIHBlbmRpbmcgVExCIGZsdXNoZXMgYmVmb3JlXG4rXHQgKiBkcm9wcGluZyBSQ1UgcHJvdGVjdGlvbiwgYXMgcmVxdWlyZWQgYnkgdGhlIFREUCBNTVUgaXRlcmF0b3IuXG4gXHQgKi9cbitcdGlmIChyZW1vdmVkX3NwIFx1MDAyNlx1MDAyNiBmbHVzaCkge1xuK1x0XHRrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTtcbitcdFx0Zmx1c2ggPSBmYWxzZTtcbitcdH1cbitcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIGZsdXNoO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjIwOjU0LjQ1MjA1MTgzMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwOTQ1NDQ5Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipEZWNvbnN0cnVjdGluZyBUaGlzIEtWTSBURFAgTU1VIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBtb2RpZmljYXRpb25zIHRvIHRoZSBLVk0geDg2IFREUCBNTVUsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBUaGUgZmFjdCB0aGF0IHRoaXMgdG91Y2hlcyBgdGRwX2l0ZXIuY2AsIGB0ZHBfaXRlci5oYCwgYW5kIGB0ZHBfbW11LmNgIHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gVERQIChUd28tRGltZW5zaW9uYWwgUGFnaW5nKSBpdGVyYXRpb24gYW5kIE1NVSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBuZXN0ZWQgcGFnaW5nIGNvbnRleHQuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZ2V0dGluZyBzb21lIG5ldyBmdW5jdGlvbnMgaW50cm9kdWNlZDogYHRkcF9pdGVyX25leHRfcG9zdF9vcmRlcmAgYW5kIGB0ZHBfbW11X3phcF9jb21wbGV0ZWRfZW1wdHlfbGVhZl9wdGAsIGFuZCB3ZSBzZWUgdXBkYXRlcyB0byBgdGRwX21tdV96YXBfbGVhZnNgLiBUaGUgbmFtZXMgdGhlbXNlbHZlcyBnaXZlIHNvbWUgaGludHMgLSBwb3N0LW9yZGVyIGl0ZXJhdGlvbiBhbmQgbGVhZiBwYWdlIHRhYmxlIHphcHBpbmcuXG5cbkkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgYWRkaXRpb25zLiBJJ20gZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgdHlwaWNhbCB3b3JrZmxvdyBoZXJlOiBJJ2xsIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiB0aGVzZSBmdW5jdGlvbnMgd2l0aGluIGB0ZHBfbW11LmNgIGFuZCBhbHNvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gZ2V0IHRoZSBwcmVjaXNlIGNvbnRleHQuIEkgd2FudCB0byBzZWUgKmhvdyogdGhlc2UgZnVuY3Rpb25zIGFyZSBpbnRlZ3JhdGVkLCB3aGF0IHRoZXkncmUgY2FsbGVkIGZyb20sIGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyB0aGV5IG9wZXJhdGUgb24gd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrLiBXaXRoIHRoYXQgaW5mb3JtYXRpb24gSSdsbCBidWlsZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NDIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoyMTowNS4zOTc1MDMwNzFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5MTI3MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGRwX21tdV96YXBfbGVhZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzExMz12b2lkIGt2bV96YXBfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuX3N0YXJ0LCBnZm5fdCBnZm5fZW5kKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTI4LVxcdGlmICh0ZHBfbW11X2VuYWJsZWQpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MTI5OlxcdFxcdGZsdXNoID0ga3ZtX3RkcF9tbXVfemFwX2xlYWZzKGt2bSwgZ2ZuX3N0YXJ0LCBnZm5fZW5kLCBmbHVzaCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTMwLVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM9OTI2PXN0YXRpYyBib29sIHRkcF9tbXVfemFwX2NvbXBsZXRlZF9lbXB0eV9sZWFmX3B0KHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTk2NC0gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo5NjU6c3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTk2Ni1cXHRcXHRcXHQgICAgICBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGNhbl95aWVsZCwgYm9vbCBmbHVzaClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwMzYtICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTAzNzpib29sIGt2bV90ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgZmx1c2gpXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzOC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMDQyLVxcdGZvcl9lYWNoX3ZhbGlkX3RkcF9tbXVfcm9vdF95aWVsZF9zYWZlKGt2bSwgcm9vdCwgLTEpXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTA0MzpcXHRcXHRmbHVzaCA9IHRkcF9tbXVfemFwX2xlYWZzKGt2bSwgcm9vdCwgc3RhcnQsIGVuZCwgdHJ1ZSwgZmx1c2gpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwNDQtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz0xMzY1PWJvb2wga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTM3My1cXHRfX2Zvcl9lYWNoX3RkcF9tbXVfcm9vdF95aWVsZF9zYWZlKGt2bSwgcm9vdCwgcmFuZ2UtXFx1MDAzZXNsb3QtXFx1MDAzZWFzX2lkLCB0eXBlcylcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzoxMzc0OlxcdFxcdGZsdXNoID0gdGRwX21tdV96YXBfbGVhZnMoa3ZtLCByb290LCByYW5nZS1cXHUwMDNlc3RhcnQsIHJhbmdlLVxcdTAwM2VlbmQsXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTM3NS1cXHRcXHRcXHRcXHRcXHQgIHJhbmdlLVxcdTAwM2VtYXlfYmxvY2ssIGZsdXNoKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oPTU3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tbXVfcGFnZSAqdGRwX21tdV9nZXRfcm9vdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC02NS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaDo2Njpib29sIGt2bV90ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgZmx1c2gpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTY3LWJvb2wga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjIxOjA1LjQ0NzQyMzM5OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3NDMwNzE5MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2NvbmZpZyBEaXZlIGZvciBLVk0gXHUwMDI2IFREUCBNTVUgb24geDg2KipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhZ2Fpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIEtWTSBhbmQgdGhlIFREUCBNTVUgc3VwcG9ydCBvbiB4ODYsIHBhcnRpY3VsYXJseSB3aGVyZSB0aGluZ3MgbWlnaHQgYmUgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyBmb3IgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc3ltYm9scyDigJMgbGlrZWx5IHNvbWV0aGluZyBsaWtlIGBDT05GSUdfS1ZNYCwgYENPTkZJR19YODZfVERYX01NVWAsIG9yIHZhcmlhdGlvbnMgdGhlcmVvZiDigJMgdG8gZ2V0IGEgZ3Jhc3Agb2YgdGhlIHRvcC1sZXZlbCBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyB0byBzZWUgd2hpY2ggb3RoZXIgZmVhdHVyZXMgb3IgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMgdHJpZ2dlciB0aGVzZSBzZXR0aW5ncy4gQXJlIHdlIHJlbHlpbmcgb24gYW55IHNwZWNpZmljIENQVSBmZWF0dXJlcyBvciBoeXBlcnZpc29yIGZsYWdzPyBJIGFsc28gd2FudCB0byBkb3VibGUtY2hlY2sgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGVzZSBjb25maWd1cmF0aW9ucywgYW5kIHdoZXRoZXIgd2UncmUgdXNpbmcgYW55IHRyaXN0YXRlIG9wdGlvbnMgdGhhdCBjb3VsZCBjYXVzZSBpc3N1ZXMgZGVwZW5kaW5nIG9uIHRoZSBidWlsZC4gR290dGEgZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgc25lYWt5IGNvbmZsaWN0cyBvciByZWdyZXNzaW9ucyBpbiB0aGUgY29uZmlndXJhdGlvbiBzcGFjZS4gTmVlZCB0byBrZWVwIGluIG1pbmQsIHRvbywgdGhlIHZhcmlvdXMgeDg2IENQVSBtb2RlbHMsIGFuZCB3aGV0aGVyIGNvbmZpZ3VyYXRpb24gZGlmZmVycyBiZXR3ZWVuIHRoZW0uIEdvdHRhIGJlIHByZWNpc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyODcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoyMToxMC4xOTA0OTY5MDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQyNjA5OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnLTItI1xcbmFyY2gveDg2L2t2bS9LY29uZmlnOjM6IyBLVk0gY29uZmlndXJhdGlvblxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTQtI1xcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxOlxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjpcXHRzZWxlY3QgS1ZNX0NPTU1PTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzOlxcdHNlbGVjdCBLVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjQ6XFx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyNTpcXHRzZWxlY3QgSEFWRV9LVk1fSVJRQ0hJUFxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjI2OlxcdHNlbGVjdCBIQVZFX0tWTV9QRk5DQUNIRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjI3OlxcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX1RTT1xcbmFyY2gveDg2L2t2bS9LY29uZmlnOjI4OlxcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX0FDUV9SRUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyOTpcXHRzZWxlY3QgSEFWRV9LVk1fSVJRX0JZUEFTU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnOjMwOlxcdHNlbGVjdCBIQVZFX0tWTV9JUlFfUk9VVElOR1xcbmFyY2gveDg2L2t2bS9LY29uZmlnOjMxOlxcdHNlbGVjdCBIQVZFX0tWTV9SRUFET05MWV9NRU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0zMi1cXHRzZWxlY3QgVkhPU1RfVEFTS1xcbmFyY2gveDg2L2t2bS9LY29uZmlnOjMzOlxcdHNlbGVjdCBLVk1fQVNZTkNfUEZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0zNC1cXHRzZWxlY3QgVVNFUl9SRVRVUk5fTk9USUZJRVJcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzozNTpcXHRzZWxlY3QgS1ZNX01NSU9cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0zNi1cXHRzZWxlY3QgU0NIRURfSU5GT1xcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMzktXFx0c2VsZWN0IFBFUkZfR1VFU1RfTUVESUFURURfUE1VXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NDA6XFx0c2VsZWN0IEhBVkVfS1ZNX01TSVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjQxOlxcdHNlbGVjdCBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NDI6XFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00My1cXHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo0NDpcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NDU6XFx0c2VsZWN0IEtWTV9WRklPXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NDY6XFx0c2VsZWN0IEhBVkVfS1ZNX1BNX05PVElGSUVSIGlmIFBNXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NDc6XFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NDg6XFx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo0OTpcXHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1MDpcXHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1MzpcXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTU0LVxcdGRlcGVuZHMgb24gWDg2X0xPQ0FMX0FQSUNcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NzA6XFx0Ym9vbCBcXFwiQ29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXFxcIlxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjcxOlxcdCMgRGlzYWxsb3cgS1ZNJ3MgLVdlcnJvciBpZiBLQVNBTiBpcyBlbmFibGVkLCBlLmcuIHRvIGd1YXJkIGFnYWluc3RcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo3MjpcXHQjIHJhbmRvbWl6ZWQgY29uZmlncyBmcm9tIHNlbGVjdGluZyBLVk1fV0VSUk9SPXksIHdoaWNoIGRvZXNuJ3QgcGxheVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTczLVxcdCMgbmljZSB3aXRoIEtBU0FOLiAgS0FTQU4gYnVpbGRzIGdlbmVyYXRlcyB3YXJuaW5ncyBmb3IgdGhlIGRlZmF1bHRcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo3NDpcXHQjIEZSQU1FX1dBUk4sIGkuZS4gS1ZNX1dFUlJPUj15IHdpdGggS0FTQU49eSByZXF1aXJlcyBzcGVjaWFsIHR1bmluZy5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo3NTpcXHQjIEJ1aWxkaW5nIEtWTSB3aXRoIC1XZXJyb3IgYW5kIEtBU0FOIGlzIHN0aWxsIGRvYWJsZSB2aWEgZW5hYmxpbmdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03Ni1cXHQjIHRoZSBrZXJuZWwtd2lkZSBXRVJST1I9eS5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo3NzpcXHRkZXBlbmRzIG9uIEtWTV9YODYgXFx1MDAyNlxcdTAwMjYgKChFWFBFUlQgXFx1MDAyNlxcdTAwMjYgIUtBU0FOKSB8fCBXRVJST1IpXFxuYXJjaC94ODYva3ZtL0tjb25maWctNzgtXFx0aGVscFxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjc5OlxcdCAgQWRkIC1XZXJyb3IgdG8gdGhlIGJ1aWxkIGZsYWdzIGZvciBLVk0uXFxuYXJjaC94ODYva3ZtL0tjb25maWctODAtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjg0OlxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NS1cXHRkZXBlbmRzIG9uIEVYUEVSVFxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjg2OlxcdGRlcGVuZHMgb24gS1ZNX1g4NiBcXHUwMDI2XFx1MDAyNiBYODZfNjRcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4NzpcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04OC1cXHRoZWxwXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODk6XFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXMuICBDdXJyZW50bHksIHNvZnR3YXJlLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTkwLVxcdCAgcHJvdGVjdGVkIFZNcyBhcmUgcHVyZWx5IGEgZGV2ZWxvcG1lbnQgYW5kIHRlc3RpbmcgdmVoaWNsZSBmb3JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5MTpcXHQgIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQuICBBdHRlbXB0aW5nIHRvIHJ1biBhIFxcXCJyZWFsXFxcIiBWTSB3b3JrbG9hZCBhcyBhXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTItXFx0ICBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk0gd2lsbCBmYWlsIG1pc2VyYWJseS5cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5NzpcXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5ODpcXHRkZXBlbmRzIG9uIEtWTSBcXHUwMDI2XFx1MDAyNiBJQTMyX0ZFQVRfQ1RMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTktXFx0c2VsZWN0IFg4Nl9GUkVEIGlmIFg4Nl82NFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwMC1cXHRoZWxwXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTAxOlxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCBJbnRlbCdzIFZUXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTAyLVxcdCAgZXh0ZW5zaW9ucywgYS5rLmEuIFZpcnR1YWwgTWFjaGluZSBFeHRlbnNpb25zIChWTVgpLlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA5OiAgICAgICAgZGVwZW5kcyBvbiBLVk1fSU5URUwgXFx1MDAyNlxcdTAwMjYgRVhQRVJUXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTEwLSAgICAgICAgaGVscFxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjExMTogICAgICAgICAgQ2hlY2tzIHRoYXQgS1ZNJ3MgcGFnZSB0YWJsZSBtYW5hZ2VtZW50IGNvZGUgd2lsbCBub3QgaW5jb3JyZWN0bHlcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMTItICAgICAgICAgIGxldCBndWVzdHMgcmVjZWl2ZSBhIHZpcnR1YWxpemF0aW9uIGV4Y2VwdGlvbi4gIFZpcnR1YWxpemF0aW9uXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMTYtICAgICAgICAgIE5vdGU6IHNvbWUgQ1BVcyBhcHBlYXIgdG8gZ2VuZXJhdGUgc3B1cmlvdXMgRVBUIFZpb2xhdGlvbnMgI1ZFc1xcbmFyY2gveDg2L2t2bS9LY29uZmlnOjExNzogICAgICAgICAgdGhhdCB0cmlnZ2VyIEtWTSdzIFdBUk4sIGluIHBhcnRpY3VsYXIgd2l0aCBlcHRhZD0wIGFuZC9vciBuZXN0ZWRcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMTgtICAgICAgICAgIHZpcnR1YWxpemF0aW9uLlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTIxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEyMjpjb25maWcgWDg2X1NHWF9LVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMjMtXFx0Ym9vbCBcXFwiU29mdHdhcmUgR3VhcmQgZVh0ZW5zaW9ucyAoU0dYKSBWaXJ0dWFsaXphdGlvblxcXCJcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMjQ6XFx0ZGVwZW5kcyBvbiBYODZfU0dYIFxcdTAwMjZcXHUwMDI2IEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyNS1cXHRoZWxwXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTI2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEyNzpcXHQgIEVuYWJsZXMgS1ZNIGd1ZXN0cyB0byBjcmVhdGUgU0dYIGVuY2xhdmVzLlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyOC1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNy1cXHRkZXBlbmRzIG9uIElOVEVMX1REWF9IT1NUXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM4OlxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzOTpcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQwLVxcdGhlbHBcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDc6XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDg6XFx0ZGVwZW5kcyBvbiBLVk0gXFx1MDAyNlxcdTAwMjYgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ5LVxcdGhlbHBcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTA6XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gQU1EIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCB0aGUgQU1ELVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTEtXFx0ICAoU1ZNKSBleHRlbnNpb25zLlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTgtXFx0ZGVmYXVsdCB5XFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU5OlxcdGRlcGVuZHMgb24gS1ZNX0FNRCBcXHUwMDI2XFx1MDAyNiBYODZfNjRcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjA6XFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX1NQX1BTUCBcXHUwMDI2XFx1MDAyNiAhKEtWTV9BTUQ9eSBcXHUwMDI2XFx1MDAyNiBDUllQVE9fREVWX0NDUF9ERD1tKVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE2MS1cXHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjI6XFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTYzOlxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fQ09OVkVSVFxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE2NDpcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1JFQ0xBSU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjU6XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTY2OlxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNjctXFx0aGVscFxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mzpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3NC1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzUtXFx0ZGVmYXVsdCB5XFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTc2OlxcdGRlcGVuZHMgb24gS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3Ny1cXHRoZWxwXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTc4OlxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIHRvIGVtdWxhdGUgYW4gSS9PIEFQSUMsIFBJQywgYW5kIFBJVCwgaS5lLlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3OS1cXHQgIGZvciBmdWxsIGluLWtlcm5lbCBBUElDIGVtdWxhdGlvbi5cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODM6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODQtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTg1LVxcdGRlZmF1bHQgeVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4NjpcXHRkZXBlbmRzIG9uIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODctXFx0aGVscFxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4ODpcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSB0byBlbXVsYXRlIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgKFNNTSlcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODktXFx0ICBpbiB2aXJ0dWFsIG1hY2hpbmVzLiAgVGhpcyBjYW4gYmUgdXNlZCBieSB0aGUgdmlydHVhbCBtYWNoaW5lXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTY6XFx0ZGVwZW5kcyBvbiBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk3LVxcdGRlZmF1bHQgeVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5OC1cXHRoZWxwXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk5OlxcdCAgUHJvdmlkZXMgS1ZNIHN1cHBvcnQgZm9yIGVtdWxhdGluZyBNaWNyb3NvZnQgSHlwZXItVi4gIFRoaXMgYWxsb3dzIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwMC1cXHQgIHRvIGV4cG9zZSBhIHN1YnNldCBvZiB0aGUgcGFyYXZpcnR1YWxpemVkIGludGVyZmFjZXMgZGVmaW5lZCBpbiB0aGVcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwMy1cXHQgIFRoZXNlIGludGVyZmFjZXMgYXJlIHJlcXVpcmVkIGZvciB0aGUgY29ycmVjdCBhbmQgcGVyZm9ybWFudCBmdW5jdGlvbmluZ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNDpcXHQgIG9mIFdpbmRvd3MgYW5kIEh5cGVyLVYgZ3Vlc3RzIG9uIEtWTS5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDUtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDctXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA4OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxMDpcXHRkZXBlbmRzIG9uIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTEtXFx0aGVscFxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxMjpcXHQgIFByb3ZpZGVzIEtWTSBzdXBwb3J0IGZvciB0aGUgaG9zdGluZyBYZW4gSFZNIGd1ZXN0cyBhbmRcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTMtXFx0ICBwYXNzaW5nIFhlbiBoeXBlcmNhbGxzIHRvIHVzZXJzcGFjZS5cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTc6Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTg6XFx0Ym9vbCBcXFwiUHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1xcXCJcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTktXFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjA6XFx0ZGVwZW5kcyBvbiBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjIxLVxcdGRlcGVuZHMgb24gRVhQRVJUXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjIyLVxcdGhlbHBcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjM6XFx0ICBFbmFibGVzIHJ1bnRpbWUgYXNzZXJ0aW9ucyBpbiBLVk0ncyBNTVUgdGhhdCBhcmUgdG9vIGNvc3RseSB0byBlbmFibGVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjQtXFx0ICBpbiBhbnl0aGluZyByZW1vdGVseSByZXNlbWJsaW5nIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwgZS5nLiB0aGlzXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMwOmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzM6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzQ6XFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzNTpcXHRkZXBlbmRzIG9uIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzYtXFx0cmFuZ2UgMTAyNCA0MDk2XFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzktXFx0aGVscFxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjI0MDpcXHQgIFNldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdC4gTGFyZ2VyIHZhbHVlcyB3aWxsIGluY3JlYXNlXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjQxOlxcdCAgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgZWFjaCBLVk0gZ3Vlc3QsIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgdkNQVXMgYXJlXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjQyLVxcdCAgY3JlYXRlZCBmb3IgYSBnaXZlbiBWTS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MjE6MTAuMjQ0NzYzMzQ4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTMzODgxMjc5MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEtWTSBDb21waWxhdGlvbiBQcm9jZXNzOiBgdGRwX21tdS5jYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgdGRwX21tdS5jYCBpcyBiZWluZyBjb21waWxlZCB3aXRoaW4gdGhlIEtWTSBpbmZyYXN0cnVjdHVyZS4gSSBrbm93IHRoZSBnZW5lcmFsIEtWTSBidWlsZCBwcm9jZXNzLCBidXQgYSBzcGVjaWZpYyBmaWxlIGxpa2UgdGhpcyBvZnRlbiBoYXMgc29tZSBudWFuY2VzLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBhbG1vc3QgYWx3YXlzIHRoZSBgTWFrZWZpbGVgIGluIHRoZSByZWxldmFudCBkaXJlY3RvcnkuIFNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSwgc3BlY2lmaWNhbGx5IHg4NiwgSSdtIGdvaW5nIHN0cmFpZ2h0IGZvciBgYXJjaC94ODYva3ZtL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgbG93ZG93biBvbiB0aGUgYnVpbGQgZmxhZ3MsIGRlcGVuZGVuY2llcywgYW5kIGhvcGVmdWxseSwgYW55IHNwZWNpZmljIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGxvZ2ljIHRoYXQgYXBwbGllcyB0byBgdGRwX21tdS5jYC4gS25vd2luZyB0aGlzIGxldmVsIG9mIGRldGFpbCBpcyBrZXkgdG8gZnVsbHkgdW5kZXJzdGFuZGluZyBob3cgdGhlIGNvZGUgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCBhbmQgaG93IGl0IHdpbGwgYmVoYXZlIHdoZW4gYnVpbHQgZm9yIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHNlY3JldHMgdGhlIE1ha2VmaWxlIGhvbGRzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEwNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjIxOjIzLjYzMjg5NDA4NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjk4NzUzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHBfbW11XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEyOTEgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZT04PWt2bS15XFx0XFx0XFx0Kz0geDg2Lm8gZW11bGF0ZS5vIGlycS5vIGxhcGljLm8gY3B1aWQubyBtc3JzLm8gcG11Lm8gcmVncy5vIFxcXFxcXG4tLVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xMC1cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MTE6a3ZtLSQoQ09ORklHX1g4Nl82NCkgKz0gbW11L3RkcF9pdGVyLm8gbW11L3RkcF9tbXUub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xMi1rdm0tJChDT05GSUdfS1ZNX0lPQVBJQykgKz0gaTgyNTkubyBpODI1NC5vIGlvYXBpYy5vXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11Lmg9OT1leHRlcm4gYm9vbCBfX3JlYWRfbW9zdGx5IHRkcF9lbmFibGVkO1xcbmFyY2gveDg2L2t2bS9tbXUuaC0xMC0jaWZkZWYgQ09ORklHX1g4Nl82NFxcbmFyY2gveDg2L2t2bS9tbXUuaDoxMTpleHRlcm4gYm9vbCBfX3JlYWRfbW9zdGx5IHRkcF9tbXVfZW5hYmxlZDtcXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTItI2Vsc2VcXG5hcmNoL3g4Ni9rdm0vbW11Lmg6MTM6I2RlZmluZSB0ZHBfbW11X2VuYWJsZWQgZmFsc2VcXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTQtI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11Lmg9MzMxPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fc2hhZG93X3Jvb3RfYWxsb2NhdGVkKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUuaC0zNDEtXFxuYXJjaC94ODYva3ZtL21tdS5oOjM0MjppbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKTtcXG5hcmNoL3g4Ni9rdm0vbW11LmgtMzQzLVxcbmFyY2gveDg2L2t2bS9tbXUuaD0zNDQ9c3RhdGljIGlubGluZSBib29sIGt2bV9tZW1zbG90c19oYXZlX3JtYXBzKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vbW11LmgtMzQ1LXtcXG5hcmNoL3g4Ni9rdm0vbW11Lmg6MzQ2OlxcdHJldHVybiAhdGRwX21tdV9lbmFibGVkIHx8IGt2bV9zaGFkb3dfcm9vdF9hbGxvY2F0ZWQoa3ZtKTtcXG5hcmNoL3g4Ni9rdm0vbW11LmgtMzQ3LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMjItI2luY2x1ZGUgXFxcIm1tdV9pbnRlcm5hbC5oXFxcIlxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MjM6I2luY2x1ZGUgXFxcInRkcF9tbXUuaFxcXCJcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTI0LSNpbmNsdWRlIFxcXCJ4ODYuaFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTA4PWJvb2wgX19yZWFkX21vc3RseSB0ZHBfZW5hYmxlZCA9IGZhbHNlO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA5LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTEwOnN0YXRpYyBib29sIF9fcm9fYWZ0ZXJfaW5pdCB0ZHBfbW11X2FsbG93ZWQ7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMTEtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMTItI2lmZGVmIENPTkZJR19YODZfNjRcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjExMzpib29sIF9fcmVhZF9tb3N0bHkgdGRwX21tdV9lbmFibGVkID0gdHJ1ZTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjExNDptb2R1bGVfcGFyYW1fbmFtZWQodGRwX21tdSwgdGRwX21tdV9lbmFibGVkLCBib29sLCAwNDQ0KTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjExNTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwodGRwX21tdV9lbmFibGVkKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTExNi0jZW5kaWZcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTYyPXN0YXRpYyB1NjQgbW11X3NwdGVfZ2V0X2xvY2tsZXNzKHU2NCAqc3B0ZXApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU2Ni1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU2NzpzdGF0aWMgaW5saW5lIGJvb2wgaXNfdGRwX21tdV9hY3RpdmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTY4LXtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU2OTpcXHRyZXR1cm4gdGRwX21tdV9lbmFibGVkIFxcdTAwMjZcXHUwMDI2IHZjcHUtXFx1MDAzZWFyY2gubW11LVxcdTAwM2Vyb290X3JvbGUuZGlyZWN0O1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTcwLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTcyPXN0YXRpYyB2b2lkIHdhbGtfc2hhZG93X3BhZ2VfbG9ja2xlc3NfYmVnaW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTczLXtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU3NDpcXHRpZiAoaXNfdGRwX21tdV9hY3RpdmUodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU3NTpcXHRcXHRrdm1fdGRwX21tdV93YWxrX2xvY2tsZXNzX2JlZ2luKCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01NzYtXFx0fSBlbHNlIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTkxPXN0YXRpYyB2b2lkIHdhbGtfc2hhZG93X3BhZ2VfbG9ja2xlc3NfZW5kKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5Mi17XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTM6XFx0aWYgKGlzX3RkcF9tbXVfYWN0aXZlKHZjcHUpKSB7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTQ6XFx0XFx0a3ZtX3RkcF9tbXVfd2Fsa19sb2NrbGVzc19lbmQoKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NS1cXHR9IGVsc2Uge1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xNDAxPXN0YXRpYyB2b2lkIGt2bV9tbXVfd3JpdGVfcHJvdGVjdF9wdF9tYXNrZWQoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNDA2LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTQwNzpcXHRpZiAodGRwX21tdV9lbmFibGVkKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTQwODpcXHRcXHRrdm1fdGRwX21tdV9jbGVhcl9kaXJ0eV9wdF9tYXNrZWQoa3ZtLCBzbG90LFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTQwOS1cXHRcXHRcXHRcXHRzbG90LVxcdTAwM2ViYXNlX2dmbiArIGdmbl9vZmZzZXQsIG1hc2ssIHRydWUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xNDI0PXN0YXRpYyB2b2lkIGt2bV9tbXVfY2xlYXJfZGlydHlfcHRfbWFza2VkKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTQyOS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE0MzA6XFx0aWYgKHRkcF9tbXVfZW5hYmxlZClcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE0MzE6XFx0XFx0a3ZtX3RkcF9tbXVfY2xlYXJfZGlydHlfcHRfbWFza2VkKGt2bSwgc2xvdCxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE0MzItXFx0XFx0XFx0XFx0c2xvdC1cXHUwMDNlYmFzZV9nZm4gKyBnZm5fb2Zmc2V0LCBtYXNrLCBmYWxzZSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTE0OTk9Ym9vbCBrdm1fbW11X3Nsb3RfZ2ZuX3dyaXRlX3Byb3RlY3Qoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNTEzLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTUxNDpcXHRpZiAodGRwX21tdV9lbmFibGVkKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTUxNS1cXHRcXHR3cml0ZV9wcm90ZWN0ZWQgfD1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE1MTY6XFx0XFx0XFx0a3ZtX3RkcF9tbXVfd3JpdGVfcHJvdGVjdF9nZm4oa3ZtLCBzbG90LCBnZm4sIG1pbl9sZXZlbCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNTE3LVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xNjcxPWJvb2wga3ZtX3VubWFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTY5MC1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE2OTE6XFx0aWYgKHRkcF9tbXVfZW5hYmxlZClcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE2OTI6XFx0XFx0Zmx1c2ggPSBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2Uoa3ZtLCByYW5nZSwgZmx1c2gpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTY5My1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTc4ND1zdGF0aWMgYm9vbCBrdm1fbWF5X2hhdmVfc2hhZG93X21tdV9zcHRlcyhzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNzg1LXtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE3ODY6XFx0cmV0dXJuICF0ZHBfbW11X2VuYWJsZWQgfHwgUkVBRF9PTkNFKGt2bS1cXHUwMDNlYXJjaC5pbmRpcmVjdF9zaGFkb3dfcGFnZXMpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc4Ny19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTE3ODk9Ym9vbCBrdm1fYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc5Mi1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE3OTM6XFx0aWYgKHRkcF9tbXVfZW5hYmxlZClcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE3OTQ6XFx0XFx0eW91bmcgPSBrdm1fdGRwX21tdV9hZ2VfZ2ZuX3JhbmdlKGt2bSwgcmFuZ2UpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc5NS1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTgwMj1ib29sIGt2bV90ZXN0X2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE4MDUtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxODA2OlxcdGlmICh0ZHBfbW11X2VuYWJsZWQpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxODA3OlxcdFxcdHlvdW5nID0ga3ZtX3RkcF9tbXVfdGVzdF9hZ2VfZ2ZuKGt2bSwgcmFuZ2UpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTgwOC1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MjE0MD1zdGF0aWMgYm9vbCBpc19vYnNvbGV0ZV9zcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0yMTQ1LVxcdC8qIFREUCBNTVUgcGFnZXMgZG8gbm90IHVzZSB0aGUgTU1VIGdlbmVyYXRpb24uICovXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoyMTQ2OlxcdHJldHVybiAhaXNfdGRwX21tdV9wYWdlKHNwKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMjE0Ny1cXHQgICAgICAgdW5saWtlbHkoc3AtXFx1MDAzZW1tdV92YWxpZF9nZW4gIT0ga3ZtLVxcdTAwM2VhcmNoLm1tdV92YWxpZF9nZW4pO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0zNDgwPXZvaWQgZGlzYWxsb3dlZF9odWdlcGFnZV9hZGp1c3Qoc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdCwgdTY0IHNwdGUsIGludCBjdXJfbGV2ZWwpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM0ODgtXFx0XFx0ICogQSBzbWFsbCBTUFRFIGV4aXN0cyBmb3IgdGhpcyBwZm4sIGJ1dCBGTkFNRShmZXRjaCksXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozNDg5OlxcdFxcdCAqIGRpcmVjdF9tYXAoKSwgb3Iga3ZtX3RkcF9tbXVfbWFwKCkgd291bGQgbGlrZSB0byBjcmVhdGUgYVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzQ5MC1cXHRcXHQgKiBsYXJnZSBQVEUgaW5zdGVhZDoganVzdCBmb3JjZSB0aGVtIHRvIGdvIGRvd24gYW5vdGhlciBsZXZlbCxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MzcyNj1zdGF0aWMgaW50IGZhc3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM3NDMtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozNzQ0OlxcdFxcdGlmICh0ZHBfbW11X2VuYWJsZWQpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozNzQ1OlxcdFxcdFxcdHNwdGVwID0ga3ZtX3RkcF9tbXVfZmFzdF9wZl9nZXRfbGFzdF9zcHRlcCh2Y3B1LCBmYXVsdC1cXHUwMDNlZ2ZuLCBcXHUwMDI2c3B0ZSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zNzQ2LVxcdFxcdGVsc2VcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9Mzg1MT1zdGF0aWMgdm9pZCBtbXVfZnJlZV9yb290X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBocGFfdCAqcm9vdF9ocGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM4NjItXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozODYzOlxcdGlmIChpc190ZHBfbW11X3BhZ2Uoc3ApKSB7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zODY0LVxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZChcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozODY1OlxcdFxcdGt2bV90ZHBfbW11X3B1dF9yb290KGt2bSwgc3ApO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzg2Ni1cXHR9IGVsc2Uge1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0zODc2PXZvaWQga3ZtX21tdV9mcmVlX3Jvb3RzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXUgKm1tdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzg3OC17XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozODc5OlxcdGJvb2wgaXNfdGRwX21tdSA9IHRkcF9tbXVfZW5hYmxlZCBcXHUwMDI2XFx1MDAyNiBtbXUtXFx1MDAzZXJvb3Rfcm9sZS5kaXJlY3Q7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zODgwLVxcdGludCBpO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zOTAxLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MzkwMjpcXHRpZiAoaXNfdGRwX21tdSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM5MDMtXFx0XFx0cmVhZF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzkzMC1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM5MzE6XFx0aWYgKGlzX3RkcF9tbXUpIHtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM5MzItXFx0XFx0cmVhZF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0zOTg2PXN0YXRpYyBpbnQgbW11X2FsbG9jX2RpcmVjdF9yb290cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM5OTMtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozOTk0OlxcdGlmICh0ZHBfbW11X2VuYWJsZWQpIHtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM5OTUtXFx0XFx0aWYgKGt2bV9oYXNfbWlycm9yZWRfdGRwKHZjcHUtXFx1MDAzZWt2bSkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM5OTYtXFx0XFx0ICAgICFWQUxJRF9QQUdFKG1tdS1cXHUwMDNlbWlycm9yX3Jvb3RfaHBhKSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM5OTc6XFx0XFx0XFx0a3ZtX3RkcF9tbXVfYWxsb2Nfcm9vdCh2Y3B1LCB0cnVlKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM5OTg6XFx0XFx0a3ZtX3RkcF9tbXVfYWxsb2Nfcm9vdCh2Y3B1LCBmYWxzZSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zOTk5LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NDYyPXN0YXRpYyBpbnQgZ2V0X3NwdGVzX2xvY2tsZXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsIHU2NCAqc3B0ZXMsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ0NjgtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NDY5OlxcdGlmIChpc190ZHBfbW11X2FjdGl2ZSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ0NzA6XFx0XFx0bGVhZiA9IGt2bV90ZHBfbW11X2dldF93YWxrKHZjcHUsIGFkZHIsIHNwdGVzLCByb290X2xldmVsKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ0NzEtXFx0ZWxzZVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00OTMyPUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1faGFuZGxlX3BhZ2VfZmF1bHQpO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTM0LSNpZmRlZiBDT05GSUdfWDg2XzY0XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0OTM1OnN0YXRpYyBpbnQga3ZtX3RkcF9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTM2LVxcdFxcdFxcdFxcdCAgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDk2MC1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ5NjE6XFx0ciA9IGt2bV90ZHBfbW11X21hcCh2Y3B1LCBmYXVsdCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTYyLVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00OTcwPXN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDk3Mi0jaWZkZWYgQ09ORklHX1g4Nl82NFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDk3MzpcXHRpZiAodGRwX21tdV9lbmFibGVkKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDk3NDpcXHRcXHRyZXR1cm4ga3ZtX3RkcF9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBmYXVsdCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTc1LSNlbmRpZlxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01MTY3PXN0YXRpYyB2b2lkIGt2bV9hc3NlcnRfZ21lbV9pbnZhbGlkYXRlX2xvY2tfaGVsZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTc4LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTE3OTppbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE4MC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUyMDktXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MjEwOlxcdGlmIChLVk1fQlVHX09OKCF0ZHBfbW11X2VuYWJsZWQsIGt2bSkpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjExLVxcdFxcdHJldHVybiAtRUlPO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjM0LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTIzNTpcXHRcXHRyID0ga3ZtX3RkcF9tbXVfbWFwKHZjcHUsIFxcdTAwMjZmYXVsdCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjM2LVxcdH0gd2hpbGUgKHIgPT0gUkVUX1BGX1JFVFJZKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTI0Mi19XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MjQzOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4pO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTI0NC0jZW5kaWZcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTk3OT1zdGF0aWMgdW5pb24ga3ZtX21tdV9wYWdlX3JvbGVcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5ODA6a3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTgxLVxcdFxcdFxcdFxcdHVuaW9uIGt2bV9jcHVfcm9sZSBjcHVfcm9sZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjAwMi1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjYwMDM6c3RhdGljIHZvaWQgaW5pdF9rdm1fdGRwX21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MDA0LVxcdFxcdFxcdCAgICAgdW5pb24ga3ZtX2NwdV9yb2xlIGNwdV9yb2xlKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MDA2LVxcdHN0cnVjdCBrdm1fbW11ICpjb250ZXh0ID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gucm9vdF9tbXU7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2MDA3OlxcdHVuaW9uIGt2bV9tbXVfcGFnZV9yb2xlIHJvb3Rfcm9sZSA9IGt2bV9jYWxjX3RkcF9tbXVfcm9vdF9wYWdlX3JvbGUodmNwdSwgY3B1X3JvbGUpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjAwOC1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjE3Mz12b2lkIGt2bV9pbml0X21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYxODEtXFx0XFx0aWYgKHRkcF9lbmFibGVkKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjE4MjpcXHRcXHRcXHRpbml0X2t2bV90ZHBfbW11KHZjcHUsIGNwdV9yb2xlKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYxODMtXFx0XFx0ZWxzZVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02MjE5PWludCBrdm1fbW11X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MjQ0LVxcdCAqIHN0YWxlIGVudHJpZXMuICBGbHVzaGluZyBvbiBhbGxvYyBhbHNvIGFsbG93cyBLVk0gdG8gc2tpcCB0aGUgVExCXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2MjQ1OlxcdCAqIGZsdXNoIHdoZW4gZnJlZWluZyBhIHJvb3QgKHNlZSBrdm1fdGRwX21tdV9wdXRfcm9vdCgpKS5cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYyNDYtXFx0ICovXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY3NzU9dm9pZCBrdm1fY29uZmlndXJlX21tdShib29sIGVuYWJsZV90ZHAsIGludCB0ZHBfZm9yY2VkX3Jvb3RfbGV2ZWwsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY3ODItI2lmZGVmIENPTkZJR19YODZfNjRcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY3ODM6XFx0dGRwX21tdV9lbmFibGVkID0gdGRwX21tdV9hbGxvd2VkIFxcdTAwMjZcXHUwMDI2IHRkcF9lbmFibGVkO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjc4NC0jZW5kaWZcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9Njk1Nj1zdGF0aWMgdm9pZCBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2Zyb250X2hhbGYoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02OTc3LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Njk3ODpcXHRpZiAodGRwX21tdV9lbmFibGVkKSB7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02OTc5LVxcdFxcdC8qXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY5ODItXFx0XFx0ICovXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2OTgzOlxcdFxcdGt2bV90ZHBfbW11X2ludmFsaWRhdGVfcm9vdHMoa3ZtLCBLVk1fRElSRUNUX1JPT1RTKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY5ODQtXFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02OTk5PXN0YXRpYyB2b2lkIF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfYmFja19oYWxmKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzAxMS1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjcwMTI6XFx0aWYgKHRkcF9tbXVfZW5hYmxlZClcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjcwMTM6XFx0XFx0a3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKGt2bSwgdHJ1ZSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MDE0LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzAzND1pbnQga3ZtX21tdV9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzA0My1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjcwNDQ6XFx0aWYgKHRkcF9tbXVfZW5hYmxlZCkge1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzA0NTpcXHRcXHRrdm1fbW11X2luaXRfdGRwX21tdShrdm0pO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzA0Ni1cXHR9IGVsc2Uge1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz03MDY5PXZvaWQga3ZtX21tdV91bmluaXRfdm0oc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MDcyLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzA3MzpcXHRpZiAodGRwX21tdV9lbmFibGVkKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzA3NDpcXHRcXHRrdm1fbW11X3VuaW5pdF90ZHBfbW11KGt2bSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MDc1LVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz03MTEzPXZvaWQga3ZtX3phcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm5fc3RhcnQsIGdmbl90IGdmbl9lbmQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcxMjctXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MTI4OlxcdGlmICh0ZHBfbW11X2VuYWJsZWQpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MTI5OlxcdFxcdGZsdXNoID0ga3ZtX3RkcF9tbXVfemFwX2xlYWZzKGt2bSwgZ2ZuX3N0YXJ0LCBnZm5fZW5kLCBmbHVzaCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTMwLVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz03MTQ3PXZvaWQga3ZtX21tdV9zbG90X3JlbW92ZV93cml0ZV9hY2Nlc3Moc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTU3LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzE1ODpcXHRpZiAodGRwX21tdV9lbmFibGVkKSB7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTU5LVxcdFxcdHJlYWRfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MTYwOlxcdFxcdGt2bV90ZHBfbW11X3dycHJvdF9zbG90KGt2bSwgbWVtc2xvdCwgc3RhcnRfbGV2ZWwpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzE2MS1cXHRcXHRyZWFkX3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTczOTU9dm9pZCBrdm1fbW11X3RyeV9zcGxpdF9odWdlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzM5OS17XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3NDAwOlxcdGlmICghdGRwX21tdV9lbmFibGVkKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzQwMS1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc0MDUtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3NDA2OlxcdGt2bV90ZHBfbW11X3RyeV9zcGxpdF9odWdlX3BhZ2VzKGt2bSwgbWVtc2xvdCwgc3RhcnQsIGVuZCwgdGFyZ2V0X2xldmVsLCBmYWxzZSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NDA3LVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz03NDE0PXZvaWQga3ZtX21tdV9zbG90X3RyeV9zcGxpdF9odWdlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzQyMC1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc0MjE6XFx0aWYgKCF0ZHBfbW11X2VuYWJsZWQpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NDIyLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzQzMC1cXHRyZWFkX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzQzMTpcXHRrdm1fdGRwX21tdV90cnlfc3BsaXRfaHVnZV9wYWdlcyhrdm0sIG1lbXNsb3QsIHN0YXJ0LCBlbmQsIHRhcmdldF9sZXZlbCwgdHJ1ZSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NDMyLVxcdHJlYWRfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzQ5OT12b2lkIGt2bV9tbXVfcmVjb3Zlcl9odWdlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzUwNy1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc1MDg6XFx0aWYgKHRkcF9tbXVfZW5hYmxlZCkge1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzUwOS1cXHRcXHRyZWFkX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzUxMDpcXHRcXHRrdm1fdGRwX21tdV9yZWNvdmVyX2h1Z2VfcGFnZXMoa3ZtLCBzbG90KTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc1MTEtXFx0XFx0cmVhZF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz03NTE1PXZvaWQga3ZtX21tdV9zbG90X2xlYWZfY2xlYXJfZGlydHkoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NTI3LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzUyODpcXHRpZiAodGRwX21tdV9lbmFibGVkKSB7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NTI5LVxcdFxcdHJlYWRfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3NTMwOlxcdFxcdGt2bV90ZHBfbW11X2NsZWFyX2RpcnR5X3Nsb3Qoa3ZtLCBtZW1zbG90KTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc1MzEtXFx0XFx0cmVhZF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz03NTQ0PXN0YXRpYyB2b2lkIGt2bV9tbXVfemFwX2FsbChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc1NjItXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3NTYzOlxcdGlmICh0ZHBfbW11X2VuYWJsZWQpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3NTY0OlxcdFxcdGt2bV90ZHBfbW11X3phcF9hbGwoa3ZtKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc1NjUtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTc3NzA9dm9pZCBfX2luaXQga3ZtX21tdV94ODZfbW9kdWxlX2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzc3OS1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc3ODA6XFx0dGRwX21tdV9hbGxvd2VkID0gdGRwX21tdV9lbmFibGVkO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzc4MS1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzgyMz12b2lkIGt2bV9tbXVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc4MjUtXFx0a3ZtX21tdV91bmxvYWQodmNwdSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3ODI2OlxcdGlmICh0ZHBfbW11X2VuYWJsZWQpIHtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc4MjctXFx0XFx0cmVhZF9sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzkzMz1zdGF0aWMgdm9pZCBrdm1fcmVjb3Zlcl9ueF9odWdlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzkzNi0jaWZkZWYgQ09ORklHX1g4Nl82NFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzkzNzpcXHRjb25zdCBib29sIGlzX3RkcF9tbXUgPSBtbXVfdHlwZSA9PSBLVk1fVERQX01NVTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc5Mzg6XFx0c3BpbmxvY2tfdCAqdGRwX21tdV9wYWdlc19sb2NrID0gXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC50ZHBfbW11X3BhZ2VzX2xvY2s7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03OTM5LSNlbHNlXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3OTQwOlxcdGNvbnN0IGJvb2wgaXNfdGRwX21tdSA9IGZhbHNlO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Nzk0MTpcXHRzcGlubG9ja190ICp0ZHBfbW11X3BhZ2VzX2xvY2sgPSBOVUxMO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzk0Mi0jZW5kaWZcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzk1Mi1cXHRyY3VfaWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3OTUzOlxcdGlmIChpc190ZHBfbW11KVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzk1NC1cXHRcXHRyZWFkX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03OTY1LVxcdGZvciAoIDsgdG9femFwOyAtLXRvX3phcCkge1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Nzk2NjpcXHRcXHRpZiAoaXNfdGRwX21tdSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc5Njc6XFx0XFx0XFx0c3Bpbl9sb2NrKHRkcF9tbXVfcGFnZXNfbG9jayk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03OTY4LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzk2OS1cXHRcXHRpZiAobGlzdF9lbXB0eShueF9odWdlX3BhZ2VzKSkge1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Nzk3MDpcXHRcXHRcXHRpZiAoaXNfdGRwX21tdSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc5NzE6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2sodGRwX21tdV9wYWdlc19sb2NrKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc5NzItXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc5ODktXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3OTkwOlxcdFxcdGlmIChpc190ZHBfbW11KVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Nzk5MTpcXHRcXHRcXHRzcGluX3VubG9jayh0ZHBfbW11X3BhZ2VzX2xvY2spO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzk5Mi1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODAwMC1cXHRcXHRpZiAoIWt2bV9tbXVfc3BfZGlydHlfbG9nZ2luZ19lbmFibGVkKGt2bSwgc3ApKSB7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo4MDAxOlxcdFxcdFxcdGlmIChpc190ZHBfbW11KVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6ODAwMjpcXHRcXHRcXHRcXHRmbHVzaCB8PSBrdm1fdGRwX21tdV96YXBfcG9zc2libGVfbnhfaHVnZV9wYWdlKGt2bSwgc3ApO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODAwMy1cXHRcXHRcXHRlbHNlXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTgwMTMtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo4MDE0OlxcdFxcdFxcdGlmIChpc190ZHBfbW11KVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODAxNS1cXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWRfcndsb2NrX3JlYWQoXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy04MDI2LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6ODAyNzpcXHRpZiAoaXNfdGRwX21tdSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTgwMjgtXFx0XFx0cmVhZF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaD00ND1zdHJ1Y3Qga3ZtX21tdV9wYWdlIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmgtNTEtXFxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaDo1MjpcXHRib29sIHRkcF9tbXVfcGFnZTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTUzLVxcdGJvb2wgdW5zeW5jO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaC01Ny1cXHRcXHQvKiBPbmx5IGFjY2Vzc2VkIHVuZGVyIHNsb3RzX2xvY2suICAqL1xcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmg6NTg6XFx0XFx0Ym9vbCB0ZHBfbW11X3NjaGVkdWxlZF9yb290X3RvX3phcDtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTU5LVxcdH07XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTkzLVxcdFxcdGludCByb290X2NvdW50O1xcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmg6OTQ6XFx0XFx0cmVmY291bnRfdCB0ZHBfbW11X3Jvb3RfY291bnQ7XFxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaC05NS1cXHR9O1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaD0yMjY9c3RydWN0IGt2bV9wYWdlX2ZhdWx0IHtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmgtMjUxLVxcdCAqIE1heGltdW0gcGFnZSBzaXplIHRoYXQgY2FuIGJlIGNyZWF0ZWQgZm9yIHRoaXMgZmF1bHQ7IGlucHV0IHRvXFxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaDoyNTI6XFx0ICogRk5BTUUoZmV0Y2gpLCBkaXJlY3RfbWFwKCkgYW5kIGt2bV90ZHBfbW11X21hcCgpLlxcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmgtMjUzLVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXV0cmFjZS5oPTM5OD1UUkFDRV9FVkVOVChcXG5hcmNoL3g4Ni9rdm0vbW11L21tdXRyYWNlLmg6Mzk5OlxcdGt2bV90ZHBfbW11X3NwdGVfY2hhbmdlZCxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdXRyYWNlLmgtNDAwLVxcdFRQX1BST1RPKGludCBhc19pZCwgZ2ZuX3QgZ2ZuLCBpbnQgbGV2ZWwsIHU2NCBvbGRfc3B0ZSwgdTY0IG5ld19zcHRlKSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYz0xMj1zdGF0aWMgdm9pZCB0ZHBfaXRlcl9yZWZyZXNoX3NwdGVwKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xNS1cXHRcXHRTUFRFX0lOREVYKChpdGVyLVxcdTAwM2VnZm4gfCBpdGVyLVxcdTAwM2VnZm5fYml0cykgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCwgaXRlci1cXHUwMDNlbGV2ZWwpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYzoxNjpcXHRpdGVyLVxcdTAwM2VvbGRfc3B0ZSA9IGt2bV90ZHBfbW11X3JlYWRfc3B0ZShpdGVyLVxcdTAwM2VzcHRlcCk7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTE3LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYz04MD1zdGF0aWMgYm9vbCB0cnlfc3RlcF9kb3duKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy05MC1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM6OTE6XFx0aXRlci1cXHUwMDNlb2xkX3NwdGUgPSBrdm1fdGRwX21tdV9yZWFkX3NwdGUoaXRlci1cXHUwMDNlc3B0ZXApO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy05Mi1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYz0xMTI9c3RhdGljIGJvb2wgdHJ5X3N0ZXBfc2lkZShzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtMTI0LVxcdGl0ZXItXFx1MDAzZXNwdGVwKys7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jOjEyNTpcXHRpdGVyLVxcdTAwM2VvbGRfc3B0ZSA9IGt2bV90ZHBfbW11X3JlYWRfc3B0ZShpdGVyLVxcdTAwM2VzcHRlcCk7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTEyNi1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0xNi0gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6MTc6c3RhdGljIGlubGluZSB1NjQga3ZtX3RkcF9tbXVfcmVhZF9zcHRlKHRkcF9wdGVwX3Qgc3B0ZXApXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTE4LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0yOC0gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6Mjk6c3RhdGljIGlubGluZSB1NjQga3ZtX3RkcF9tbXVfd3JpdGVfc3B0ZV9hdG9taWModGRwX3B0ZXBfdCBzcHRlcCwgdTY0IG5ld19zcHRlKVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0zMC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtMzQtXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oOjM1OnN0YXRpYyBpbmxpbmUgdTY0IHRkcF9tbXVfY2xlYXJfc3B0ZV9iaXRzX2F0b21pYyh0ZHBfcHRlcF90IHNwdGVwLCB1NjQgbWFzaylcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtMzYte1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTQxLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaDo0MjpzdGF0aWMgaW5saW5lIHZvaWQgX19rdm1fdGRwX21tdV93cml0ZV9zcHRlKHRkcF9wdGVwX3Qgc3B0ZXAsIHU2NCBuZXdfc3B0ZSlcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtNDMte1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTUyLSAqL1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaDo1MzpzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3RkcF9tbXVfc3B0ZV9uZWVkX2F0b21pY191cGRhdGUodTY0IG9sZF9zcHRlLCBpbnQgbGV2ZWwpXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTU0LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC01OS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6NjA6c3RhdGljIGlubGluZSB1NjQga3ZtX3RkcF9tbXVfd3JpdGVfc3B0ZSh0ZHBfcHRlcF90IHNwdGVwLCB1NjQgb2xkX3NwdGUsXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTYxLVxcdFxcdFxcdFxcdFxcdCB1NjQgbmV3X3NwdGUsIGludCBsZXZlbClcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtNjIte1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaDo2MzpcXHRpZiAoa3ZtX3RkcF9tbXVfc3B0ZV9uZWVkX2F0b21pY191cGRhdGUob2xkX3NwdGUsIGxldmVsKSlcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6NjQ6XFx0XFx0cmV0dXJuIGt2bV90ZHBfbW11X3dyaXRlX3NwdGVfYXRvbWljKHNwdGVwLCBuZXdfc3B0ZSk7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTY1LVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaDo2NjpcXHRfX2t2bV90ZHBfbW11X3dyaXRlX3NwdGUoc3B0ZXAsIG5ld19zcHRlKTtcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtNjctXFx0cmV0dXJuIG9sZF9zcHRlO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTY5LVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaDo3MDpzdGF0aWMgaW5saW5lIHU2NCB0ZHBfbW11X2NsZWFyX3NwdGVfYml0cyh0ZHBfcHRlcF90IHNwdGVwLCB1NjQgb2xkX3NwdGUsXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTcxLVxcdFxcdFxcdFxcdFxcdCAgdTY0IG1hc2ssIGludCBsZXZlbClcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtNzIte1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaDo3MzpcXHRpZiAoa3ZtX3RkcF9tbXVfc3B0ZV9uZWVkX2F0b21pY191cGRhdGUob2xkX3NwdGUsIGxldmVsKSlcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6NzQ6XFx0XFx0cmV0dXJuIHRkcF9tbXVfY2xlYXJfc3B0ZV9iaXRzX2F0b21pYyhzcHRlcCwgbWFzayk7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTc1LVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaDo3NjpcXHRfX2t2bV90ZHBfbW11X3dyaXRlX3NwdGUoc3B0ZXAsIG9sZF9zcHRlIFxcdTAwMjYgfm1hc2spO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC03Ny1cXHRyZXR1cm4gb2xkX3NwdGU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg9MTI2PXN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtMTQ0LVxcdGZvciAodGRwX2l0ZXJfc3RhcnQoXFx1MDAyNml0ZXIsIHJvb3QsIG1pbl9sZXZlbCwgMCwgMCk7XFx0XFx0XFxcXFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaDoxNDU6XFx0XFx0aXRlci52YWxpZCBcXHUwMDI2XFx1MDAyNiBpdGVyLmdmbiBcXHUwMDNjIHRkcF9tbXVfbWF4X2dmbl9leGNsdXNpdmUoKTtcXHRcXFxcXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTE0Ni1cXHRcXHR0ZHBfaXRlcl9uZXh0KFxcdTAwMjZpdGVyKSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTctI2luY2x1ZGUgXFxcInRkcF9pdGVyLmhcXFwiXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6ODojaW5jbHVkZSBcXFwidGRwX21tdS5oXFxcIlxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTktI2luY2x1ZGUgXFxcInNwdGUuaFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTE0LS8qIEluaXRpYWxpemVzIHRoZSBURFAgTU1VIGZvciB0aGUgVk0sIGlmIGVuYWJsZWQuICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTU6dm9pZCBrdm1fbW11X2luaXRfdGRwX21tdShzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTYte1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjE3OlxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudGRwX21tdV9yb290cyk7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTg6XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC50ZHBfbW11X3BhZ2VzX2xvY2spO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTE5LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jPTIyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBrdm1fbG9ja2RlcF9hc3NlcnRfbW11X2xvY2tfaGVsZChzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0zMi1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzozMzp2b2lkIGt2bV9tbXVfdW5pbml0X3RkcF9tbXUoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTM0LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTM5LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjQwOlxcdGt2bV90ZHBfbW11X2ludmFsaWRhdGVfcm9vdHMoa3ZtLCBLVk1fVkFMSURfUk9PVFMpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjQxOlxcdGt2bV90ZHBfbW11X3phcF9pbnZhbGlkYXRlZF9yb290cyhrdm0sIGZhbHNlKTtcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy00Mi1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy00My0jaWZkZWYgQ09ORklHX0tWTV9QUk9WRV9NTVVcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo0NDpcXHRLVk1fTU1VX1dBUk5fT04oYXRvbWljNjRfcmVhZChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnRkcF9tbXVfcGFnZXMpKTtcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy00NS0jZW5kaWZcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo0NjpcXHRXQVJOX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudGRwX21tdV9yb290cykpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTQ3LVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNTUtXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6NTY6c3RhdGljIHZvaWQgX190ZHBfbW11X2ZyZWVfc3Aoc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNTcte1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNjEtXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6NjI6c3RhdGljIHZvaWQgdGRwX21tdV9mcmVlX3VudXNlZF9zcChzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcClcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy02My17XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNjQtXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNwLVxcdTAwM2VleHRlcm5hbF9zcHQpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjY1OlxcdF9fdGRwX21tdV9mcmVlX3NwKHNwKTtcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy02Ni19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy03NS0gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo3NjpzdGF0aWMgdm9pZCB0ZHBfbW11X2ZyZWVfc3BfcmN1X2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy03Ny17XFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MjE6MjMuNjg1ODg1MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNDczODk3NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IERpdmluZyBpbnRvIHRoZSBURFAgTU1VKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGlzIHBhdGNoIGlzIGNoYW5naW5nLiBGaXJzdCwgSSdtIGdvaW5nIHRvIG1ldGljdWxvdXNseSByZXZpZXcgZXZlcnkgZGV0YWlsIG9mIHRoZSBwYXRjaCBpdHNlbGYuIFRoZW4sIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIFRoYXQgbWVhbnMgYSBkZWVwIGRpdmUgaW50byB0aGUgcmVsZXZhbnQgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNgIGFuZCBgYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jYCBmaWxlcy4gSSBuZWVkIHRvIHNlZSBob3cgdGhlc2UgY2hhbmdlcyBpbnRlZ3JhdGUgd2l0aCB0aGUgZXhpc3RpbmcgVERQIE1NVSBsb2dpYywgaG93IHRoZXkgbWlnaHQgYWZmZWN0IHRoZSBleGlzdGluZyBmbG93cywgYW5kIHdoYXQgbmV3IGJlaGF2aW9yIHRoZXkgaW50cm9kdWNlLiBObyBza2ltbWluZzsgdGhpcyBuZWVkcyBhIGZ1bGwsIHRob3VnaHRmdWwgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ3NzMsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoyMTozNi4xNTk3ODU1ODFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkyMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MjA6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA5MjE6XFx0XFx0fVxcbiA5MjI6XFx0XFxuIDkyMzpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gOTI0OlxcdH1cXG4gOTI1OlxcdFxcbiA5MjY6XFx0c3RhdGljIGJvb2wgdGRwX21tdV96YXBfY29tcGxldGVkX2VtcHR5X2xlYWZfcHQoc3RydWN0IGt2bSAqa3ZtLFxcbiA5Mjc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50ICpldmVudCxcXG4gOTI4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXFxuIDkyOTpcXHRcXHRcXHRcXHRcXHRcXHRcXHR0ZHBfcHRlcF90IHphcHBlZF9sZWFmX3B0KVxcbiA5MzA6XFx0e1xcbiA5MzE6XFx0XFx0c3RydWN0IGt2bV9tbXVfcGFnZSAqY2hpbGRfc3A7XFxuIDkzMjpcXHRcXG4gOTMzOlxcdFxcdGlmIChldmVudC1cXHUwMDNlbGV2ZWwgIT0gUEdfTEVWRUxfMk0gfHxcXG4gOTM0OlxcdFxcdCAgICAhaXNfc2hhZG93X3ByZXNlbnRfcHRlKGV2ZW50LVxcdTAwM2VvbGRfc3B0ZSkgfHxcXG4gOTM1OlxcdFxcdCAgICBpc19sYXN0X3NwdGUoZXZlbnQtXFx1MDAzZW9sZF9zcHRlLCBldmVudC1cXHUwMDNlbGV2ZWwpKVxcbiA5MzY6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA5Mzc6XFx0XFxuIDkzODpcXHRcXHRpZiAoZXZlbnQtXFx1MDAzZWdmbiBcXHUwMDNjIHN0YXJ0IHx8XFxuIDkzOTpcXHRcXHQgICAgZXZlbnQtXFx1MDAzZWdmbiArIEtWTV9QQUdFU19QRVJfSFBBR0UoZXZlbnQtXFx1MDAzZWxldmVsKSBcXHUwMDNlIGVuZClcXG4gOTQwOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gOTQxOlxcdFxcbiA5NDI6XFx0XFx0LyogTGVhdmUgcHJvZHVjdGl2ZSBsZWFmIHRhYmxlcyBpbiBwbGFjZSB0byBhdm9pZCByZWZhdWx0IGNodXJuLiAqL1xcbiA5NDM6XFx0XFx0aWYgKHphcHBlZF9sZWFmX3B0ID09IGV2ZW50LVxcdTAwM2VzcHRlcClcXG4gOTQ0OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gOTQ1OlxcdFxcbiA5NDY6XFx0XFx0Y2hpbGRfc3AgPSBzcHRlX3RvX2NoaWxkX3NwKGV2ZW50LVxcdTAwM2VvbGRfc3B0ZSk7XFxuIDk0NzpcXHRcXHRpZiAoaXNfbWlycm9yX3NwKGNoaWxkX3NwKSlcXG4gOTQ4OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gOTQ5OlxcdFxcbiA5NTA6XFx0XFx0aWYgKGNoaWxkX3NwLVxcdTAwM2Vyb2xlLmxldmVsICE9IFBHX0xFVkVMXzRLKVxcbiA5NTE6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA5NTI6XFx0XFxuIDk1MzpcXHRcXHR0ZHBfbW11X3NldF9zcHRlKGt2bSwgZXZlbnQtXFx1MDAzZXNwdGVwLCBldmVudC1cXHUwMDNlb2xkX3NwdGUsXFxuIDk1NDpcXHRcXHRcXHRcXHQgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUsIGV2ZW50LVxcdTAwM2VnZm4sIGV2ZW50LVxcdTAwM2VsZXZlbCk7XFxuIDk1NTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gOTU2OlxcdH1cXG4gOTU3OlxcdFxcbiA5NTg6XFx0LypcXG4gOTU5OlxcdCAqIElmIGNhbl95aWVsZCBpcyB0cnVlLCB3aWxsIHJlbGVhc2UgdGhlIE1NVSBsb2NrIGFuZCByZXNjaGVkdWxlIGlmIHRoZVxcbiA5NjA6XFx0ICogc2NoZWR1bGVyIG5lZWRzIHRoZSBDUFUgb3IgdGhlcmUgaXMgY29udGVudGlvbiBvbiB0aGUgTU1VIGxvY2suIElmIHRoaXNcXG4gOTYxOlxcdCAqIGZ1bmN0aW9uIGNhbm5vdCB5aWVsZCwgaXQgd2lsbCBub3QgcmVsZWFzZSB0aGUgTU1VIGxvY2sgb3IgcmVzY2hlZHVsZSBhbmRcXG4gOTYyOlxcdCAqIHRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgaXQgZG9lcyBub3Qgc3VwcGx5IHRvbyBsYXJnZSBhIEdGTiByYW5nZSwgb3IgdGhlXFxuIDk2MzpcXHQgKiBvcGVyYXRpb24gY2FuIGNhdXNlIGEgc29mdCBsb2NrdXAuXFxuIDk2NDpcXHQgKi9cXG4gOTY1OlxcdHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcXG4gOTY2OlxcdFxcdFxcdFxcdCAgICAgIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgY2FuX3lpZWxkLCBib29sIGZsdXNoKVxcbiA5Njc6XFx0e1xcbiA5Njg6XFx0XFx0c3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50IGV2ZW50ID0ge307XFxuIDk2OTpcXHRcXHRzdHJ1Y3QgdGRwX2l0ZXIgaXRlcjtcXG4gOTcwOlxcdFxcdHRkcF9wdGVwX3QgemFwcGVkX2xlYWZfcHQgPSBOVUxMO1xcbiA5NzE6XFx0XFx0Ym9vbCByZW1vdmVkX3NwID0gZmFsc2U7XFxuIDk3MjpcXHRcXG4gOTczOlxcdFxcdGVuZCA9IG1pbihlbmQsIHRkcF9tbXVfbWF4X2dmbl9leGNsdXNpdmUoKSk7XFxuIDk3NDpcXHRcXG4gOTc1OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbiA5NzY6XFx0XFxuIDk3NzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDk3ODpcXHRcXG4gOTc5OlxcdFxcdHRkcF9pdGVyX3N0YXJ0KFxcdTAwMjZpdGVyLCByb290LCBQR19MRVZFTF80Sywgc3RhcnQsXFxuIDk4MDpcXHRcXHRcXHQgICAgICAga3ZtX2dmbl9yb290X2JpdHMoa3ZtLCByb290KSk7XFxuIDk4MTpcXHRcXHR3aGlsZSAoaXRlci52YWxpZCBcXHUwMDI2XFx1MDAyNiBpdGVyLmdmbiBcXHUwMDNjIGVuZCkge1xcbiA5ODI6XFx0XFx0XFx0aWYgKGNhbl95aWVsZCBcXHUwMDI2XFx1MDAyNlxcbiA5ODM6XFx0XFx0XFx0ICAgIHRkcF9tbXVfaXRlcl9jb25kX3Jlc2NoZWQoa3ZtLCBcXHUwMDI2aXRlciwgZmx1c2gsIGZhbHNlKSkge1xcbiA5ODQ6XFx0XFx0XFx0XFx0Zmx1c2ggPSBmYWxzZTtcXG4gOTg1OlxcdFxcdFxcdFxcdHRkcF9pdGVyX25leHQoXFx1MDAyNml0ZXIpO1xcbiA5ODY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDk4NzpcXHRcXHRcXHR9XFxuIDk4ODpcXHRcXG4gOTg5OlxcdFxcdFxcdGlmIChpc19zaGFkb3dfcHJlc2VudF9wdGUoaXRlci5vbGRfc3B0ZSkgXFx1MDAyNlxcdTAwMjZcXG4gOTkwOlxcdFxcdFxcdCAgICBpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpIHtcXG4gOTkxOlxcdFxcdFxcdFxcdGlmIChpdGVyLmxldmVsID09IFBHX0xFVkVMXzRLKSB7XFxuIDk5MjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDtcXG4gOTkzOlxcdFxcbiA5OTQ6XFx0XFx0XFx0XFx0XFx0c3AgPSBzcHRlcF90b19zcChyY3VfZGVyZWZlcmVuY2UoaXRlci5zcHRlcCkpO1xcbiA5OTU6XFx0XFx0XFx0XFx0XFx0emFwcGVkX2xlYWZfcHQgPSBzcC1cXHUwMDNlcHRlcDtcXG4gOTk2OlxcdFxcdFxcdFxcdH1cXG4gOTk3OlxcdFxcbiA5OTg6XFx0XFx0XFx0XFx0dGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgXFx1MDAyNml0ZXIsXFxuIDk5OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSk7XFxuMTAwMDpcXHRcXG4xMDAxOlxcdFxcdFxcdFxcdC8qXFxuMTAwMjpcXHRcXHRcXHRcXHQgKiBaYXBwaW5ncyBTUFRFcyBpbiBpbnZhbGlkIHJvb3RzIGRvZXNuJ3QgcmVxdWlyZSBhIFRMQiBmbHVzaCxcXG4xMDAzOlxcdFxcdFxcdFxcdCAqIHNlZSBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoKSBmb3IgZGV0YWlscy5cXG4xMDA0OlxcdFxcdFxcdFxcdCAqL1xcbjEwMDU6XFx0XFx0XFx0XFx0aWYgKCFyb290LVxcdTAwM2Vyb2xlLmludmFsaWQpXFxuMTAwNjpcXHRcXHRcXHRcXHRcXHRmbHVzaCA9IHRydWU7XFxuMTAwNzpcXHRcXHRcXHR9XFxuMTAwODpcXHRcXG4xMDA5OlxcdFxcdFxcdHRkcF9pdGVyX25leHRfcG9zdF9vcmRlcihcXHUwMDI2aXRlciwgXFx1MDAyNmV2ZW50KTtcXG4xMDEwOlxcdFxcdFxcdGlmIChldmVudC52YWxpZCBcXHUwMDI2XFx1MDAyNlxcbjEwMTE6XFx0XFx0XFx0ICAgIHRkcF9tbXVfemFwX2NvbXBsZXRlZF9lbXB0eV9sZWFmX3B0KGt2bSwgXFx1MDAyNmV2ZW50LCBzdGFydCxcXG4xMDEyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGVuZCwgemFwcGVkX2xlYWZfcHQpKSB7XFxuMTAxMzpcXHRcXHRcXHRcXHRpZiAoIXJvb3QtXFx1MDAzZXJvbGUuaW52YWxpZClcXG4xMDE0OlxcdFxcdFxcdFxcdFxcdGZsdXNoID0gdHJ1ZTtcXG4xMDE1OlxcdFxcdFxcdFxcdHJlbW92ZWRfc3AgPSB0cnVlO1xcbjEwMTY6XFx0XFx0XFx0fVxcbjEwMTc6XFx0XFx0fVxcbjEwMTg6XFx0XFxuMTAxOTpcXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoyMTozNi4xNTk5MDY4ODFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ0ODU5MTgxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHRkcF9tbXUuY2AqKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IEtWTSdzIFRyYW5zbGF0aW9uIExvb2thc2lkZSBCdWZmZXIgKFRMQikgYW5kIGl0cyBtYW5hZ2VtZW50IGluIHRoZSBjb250ZXh0IG9mIG5lc3RlZCBwYWdpbmcgb24geDg2LCB3aGljaCwgYXMgd2Uga25vdywgaXMgY3J1Y2lhbCBmb3IgdmlydHVhbGl6YXRpb24gcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5LiBXZSBuZWVkIHRvIHplcm8gaW4gb24gbGluZXMgMTAyMC0xMDUwIHdpdGhpbiB0aGUgYGFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jYCBmaWxlLiBJJ20gYXNzdW1pbmcgdGhpcyBzZWN0aW9uIGxpa2VseSBkZWFscyB3aXRoIGEgc3BlY2lmaWMgYXNwZWN0IG9mIHRoZSBuZXN0ZWQgcGFnaW5nIHNldHVwLCBwZXJoYXBzIHJlbGF0ZWQgdG8gaW52YWxpZGF0aW5nIFRMQiBlbnRyaWVzLCBoYW5kbGluZyBwYWdlIGZhdWx0cywgb3IgcG90ZW50aWFsbHkgZXZlbiBtYW5hZ2luZyB0aGUgc2hhZG93IHBhZ2UgdGFibGVzLiBcblxuR2l2ZW4gdGhlIGZpbGUgbmFtZSwgaXQncyB2ZXJ5IGxpa2VseSB0aGlzIGludm9sdmVzIHRoZSBcIlRyYW5zbGF0ZSB0byBQaHlzaWNhbCAoVERQKSBNTVVcIiBmdW5jdGlvbmFsaXR5LCBub3QgdGhlIHN0YW5kYXJkIHNoYWRvdyBwYWdlIHRhYmxlIG1hbmFnZW1lbnQuIEknbSBnb2luZyB0byBzY2FuIHRoYXQgc2VjdGlvbiB3aXRoIGFuIGV5ZSBmb3IgYW55IGludGVyZXN0aW5nIGRhdGEgc3RydWN0dXJlcyBvciBmdW5jdGlvbnMgdGhhdCBtaWdodCBwcm92aWRlIGluc2lnaHQgaW50byBob3cgdGhlIGd1ZXN0J3MgTU1VIG9wZXJhdGlvbnMgYXJlIHRyYW5zbGF0ZWQgdG8gdGhlIGhvc3QncyBwaHlzaWNhbCBtZW1vcnkgc3BhY2UuIFVuZGVyc3RhbmRpbmcgdGhpcyBwYXJ0IGlzIHZpdGFsIHRvIHRoZSBwZXJmb3JtYW5jZSBvZiBuZXN0ZWQgdmlydHVhbGl6YXRpb24uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBvcHRpbWl6YXRpb25zIGluIHRoZSBjYWNoZSBldmljdGlvbiBwcm9jZXNzIHRvIGZpbmQgYW55IHBvdGVudGlhbCBhcmVhcyBmb3IgaW1wcm92ZW1lbnQuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjI5LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoyMjoxMC42NDU4MjY3OTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMjA6XFx0XFx0ICogSWYgYW55IHNoYWRvdyBwYWdlcyB3ZXJlIHJlbW92ZWQsIHNlcnZpY2UgcGVuZGluZyBUTEIgZmx1c2hlcyBiZWZvcmVcXG4xMDIxOlxcdFxcdCAqIGRyb3BwaW5nIFJDVSBwcm90ZWN0aW9uLCBhcyByZXF1aXJlZCBieSB0aGUgVERQIE1NVSBpdGVyYXRvci5cXG4xMDIyOlxcdFxcdCAqL1xcbjEwMjM6XFx0XFx0aWYgKHJlbW92ZWRfc3AgXFx1MDAyNlxcdTAwMjYgZmx1c2gpIHtcXG4xMDI0OlxcdFxcdFxcdGt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pO1xcbjEwMjU6XFx0XFx0XFx0Zmx1c2ggPSBmYWxzZTtcXG4xMDI2OlxcdFxcdH1cXG4xMDI3OlxcdFxcbjEwMjg6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTAyOTpcXHRcXHRyZXR1cm4gZmx1c2g7XFxuMTAzMDpcXHR9XFxuMTAzMTpcXHRcXG4xMDMyOlxcdC8qXFxuMTAzMzpcXHQgKiBaYXAgbGVhZiBTUFRFcyBmb3IgdGhlIHJhbmdlIG9mIGdmbnMsIFtzdGFydCwgZW5kKSwgZm9yIGFsbCAqVkFMSUQqKiByb290cy5cXG4xMDM0OlxcdCAqIFJldHVybnMgdHJ1ZSBpZiBhIFRMQiBmbHVzaCBpcyBuZWVkZWQgYmVmb3JlIHJlbGVhc2luZyB0aGUgTU1VIGxvY2ssIGkuZS4gaWZcXG4xMDM1OlxcdCAqIG9uZSBvciBtb3JlIFNQVEVzIHdlcmUgemFwcGVkIHNpbmNlIHRoZSBNTVUgbG9jayB3YXMgbGFzdCBhY3F1aXJlZC5cXG4xMDM2OlxcdCAqL1xcbjEwMzc6XFx0Ym9vbCBrdm1fdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGZsdXNoKVxcbjEwMzg6XFx0e1xcbjEwMzk6XFx0XFx0c3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdDtcXG4xMDQwOlxcdFxcbjEwNDE6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuMTA0MjpcXHRcXHRmb3JfZWFjaF92YWxpZF90ZHBfbW11X3Jvb3RfeWllbGRfc2FmZShrdm0sIHJvb3QsIC0xKVxcbjEwNDM6XFx0XFx0XFx0Zmx1c2ggPSB0ZHBfbW11X3phcF9sZWFmcyhrdm0sIHJvb3QsIHN0YXJ0LCBlbmQsIHRydWUsIGZsdXNoKTtcXG4xMDQ0OlxcdFxcbjEwNDU6XFx0XFx0cmV0dXJuIGZsdXNoO1xcbjEwNDY6XFx0fVxcbjEwNDc6XFx0XFxuMTA0ODpcXHR2b2lkIGt2bV90ZHBfbW11X3phcF9hbGwoc3RydWN0IGt2bSAqa3ZtKVxcbjEwNDk6XFx0e1xcbjEwNTA6XFx0XFx0c3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdDtcXG4xMDUxOlxcdFxcbjEwNTI6XFx0XFx0LypcXG4xMDUzOlxcdFxcdCAqIFphcCBhbGwgZGlyZWN0IHJvb3RzLCBpbmNsdWRpbmcgaW52YWxpZCBkaXJlY3Qgcm9vdHMsIGFzIGFsbCBkaXJlY3RcXG4xMDU0OlxcdFxcdCAqIFNQVEVzIG11c3QgYmUgZHJvcHBlZCBiZWZvcmUgcmV0dXJuaW5nIHRvIHRoZSBjYWxsZXIuIEZvciBURFgsIG1pcnJvclxcbjEwNTU6XFx0XFx0ICogcm9vdHMgZG9uJ3QgbmVlZCBoYW5kbGluZyBpbiByZXNwb25zZSB0byB0aGUgbW11IG5vdGlmaWVyICh0aGUgY2FsbGVyKS5cXG4xMDU2OlxcdFxcdCAqXFxuMTA1NzpcXHRcXHQgKiBaYXAgZGlyZWN0bHkgZXZlbiBpZiB0aGUgcm9vdCBpcyBhbHNvIGJlaW5nIHphcHBlZCBieSBhIGNvbmN1cnJlbnRcXG4xMDU4OlxcdFxcdCAqIFxcXCJmYXN0IHphcFxcXCIuICBXYWxraW5nIHphcHBlZCB0b3AtbGV2ZWwgU1BURXMgaXNuJ3QgYWxsIHRoYXQgZXhwZW5zaXZlXFxuMTA1OTpcXHRcXHQgKiBhbmQgbW11X2xvY2sgaXMgYWxyZWFkeSBoZWxkLCB3aGljaCBtZWFucyB0aGUgb3RoZXIgdGhyZWFkIGhhcyB5aWVsZGVkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoyMjoxMC42NDU5OTg0MTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEyNTcxMzYwMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEaXZpbmcgaW50byBgdGRwX2l0ZXIuY2AqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gYW5hbHl6ZSBgYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIFR3by1EaW1lbnNpb25hbCBQYWdpbmcgKFREUCkgaXRlcmF0aW9uIHByb2Nlc3MuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiBob3cgdGhlIGNvZGUgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgVHJhbnNsYXRpb24gTG9va2FzaWRlIEJ1ZmZlcnMgKFRMQnMpIGFuZCBwYWdlIHRhYmxlcywgbG9va2luZyBmb3Igc3BlY2lmaWMgZW50cmllcywgcG9zc2libHkgZm9yIGludmFsaWRhdGlvbiBvciBtb2RpZmljYXRpb24uIEknbGwgYmUgc2VhcmNoaW5nIGZvciB0aGUgY29yZSBhbGdvcml0aG1zIHVzZWQgdG8gd2FsayB0aGUgcGFnZSB0YWJsZXMsIHRha2luZyBub3RlIG9mIGhvdyB0aGV5J3JlIG9wdGltaXplZCBmb3IgcGVyZm9ybWFuY2UuIEkgZXhwZWN0IHRvIHNlZSBzcGVjaWZpYyBpbnN0cnVjdGlvbiBzZXF1ZW5jZXMgdXNlZCB0byB0cmF2ZXJzZSB0aGUgRVBUIChFeHRlbmRlZCBQYWdlIFRhYmxlcykgYXMgZWZmaWNpZW50bHkgYXMgcG9zc2libGUuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaGFuZGxpbmcgb2YgbmVzdGVkIHBhZ2UgdGFibGVzIGlmIHRoYXQgYXBwbGllcy4gRnVydGhlcm1vcmUsIEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgYW5kIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zLCBzdWNoIGFzIHRoZSB1c2Ugb2YgY2FjaGluZywgcHJlZmV0Y2hpbmcsIGFuZCBhdG9taWMgb3BlcmF0aW9ucyB3aXRoaW4gdGhlIGl0ZXJhdGlvbiBsb2dpYy4gSSBhbnRpY2lwYXRlIHRoYXQgdGhlIGNvZGUgd2lsbCBiZSB0aWdodGx5IGNvdXBsZWQgd2l0aCB0aGUgS1ZNIGluZnJhc3RydWN0dXJlLCBzbyBJJ2xsIGFsc28gYmUgZXhhbWluaW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBLVk0gY29tcG9uZW50cywgc3VjaCBhcyB0aGUgTU1VIGFuZCB0aGUgdmlydHVhbCBDUFUgKHZDUFUpLiBJbiBwYXJ0aWN1bGFyLCBJIHdpbGwgbG9vayBmb3IgYW55IGNvZGUgZGVhbGluZyB3aXRoIHRoZSBoYW5kbGluZyBvZiBndWVzdCBwaHlzaWNhbCBhZGRyZXNzZXMsIGFuZCBob3cgdGhlIGd1ZXN0LXBoeXNpY2FsLXRvLWhvc3QtcGh5c2ljYWwgbWFwcGluZyBpcyBjb25kdWN0ZWQuIExhc3RseSwgSSdsbCBiZSBjcm9zcy1yZWZlcmVuY2luZyB0aGlzIGNvZGUgd2l0aCB0aGUgc3Vycm91bmRpbmcgZmlsZXMgdG8gc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIEtWTSdzIG1lbW9yeSBtYW5hZ2VtZW50IG9uIHg4NiBzeXN0ZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzY4MywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MjI6MzEuOTAzMTM3MTc5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0LypcXG4gMTMxOlxcdCAqIFRyaWVzIHRvIHRyYXZlcnNlIGJhY2sgdXAgYSBsZXZlbCBpbiB0aGUgcGFnaW5nIHN0cnVjdHVyZSBzbyB0aGF0IHRoZSB3YWxrXFxuIDEzMjpcXHQgKiBjYW4gY29udGludWUgZnJvbSB0aGUgbmV4dCBlbnRyeSBpbiB0aGUgcGFyZW50IHBhZ2UgdGFibGUuIFJldHVybnMgdHJ1ZSBvbiBhXFxuIDEzMzpcXHQgKiBzdWNjZXNzZnVsIHN0ZXAgdXAsIGZhbHNlIGlmIGFscmVhZHkgaW4gdGhlIHJvb3QgcGFnZS5cXG4gMTM0OlxcdCAqL1xcbiAxMzU6XFx0c3RhdGljIGJvb2wgdHJ5X3N0ZXBfdXAoc3RydWN0IHRkcF9pdGVyICppdGVyLFxcbiAxMzY6XFx0XFx0XFx0XFx0c3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50ICpldmVudClcXG4gMTM3OlxcdHtcXG4gMTM4OlxcdFxcdGlmIChpdGVyLVxcdTAwM2VsZXZlbCA9PSBpdGVyLVxcdTAwM2Vyb290X2xldmVsKVxcbiAxMzk6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxNDA6XFx0XFxuIDE0MTpcXHRcXHRpdGVyLVxcdTAwM2VsZXZlbCsrO1xcbiAxNDI6XFx0XFx0aXRlci1cXHUwMDNlZ2ZuID0gZ2ZuX3JvdW5kX2Zvcl9sZXZlbChpdGVyLVxcdTAwM2VnZm4sIGl0ZXItXFx1MDAzZWxldmVsKTtcXG4gMTQzOlxcdFxcdHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoaXRlcik7XFxuIDE0NDpcXHRcXG4gMTQ1OlxcdFxcdGlmIChldmVudCBcXHUwMDI2XFx1MDAyNiAhZXZlbnQtXFx1MDAzZXZhbGlkKSB7XFxuIDE0NjpcXHRcXHRcXHRldmVudC1cXHUwMDNlc3B0ZXAgPSBpdGVyLVxcdTAwM2VzcHRlcDtcXG4gMTQ3OlxcdFxcdFxcdGV2ZW50LVxcdTAwM2VvbGRfc3B0ZSA9IGl0ZXItXFx1MDAzZW9sZF9zcHRlO1xcbiAxNDg6XFx0XFx0XFx0ZXZlbnQtXFx1MDAzZWdmbiA9IGl0ZXItXFx1MDAzZWdmbjtcXG4gMTQ5OlxcdFxcdFxcdGV2ZW50LVxcdTAwM2VsZXZlbCA9IGl0ZXItXFx1MDAzZWxldmVsO1xcbiAxNTA6XFx0XFx0XFx0ZXZlbnQtXFx1MDAzZXZhbGlkID0gdHJ1ZTtcXG4gMTUxOlxcdFxcdH1cXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDE1NDpcXHR9XFxuIDE1NTpcXHRcXG4gMTU2OlxcdC8qXFxuIDE1NzpcXHQgKiBTdGVwIHRvIHRoZSBuZXh0IFNQVEUgaW4gYSBwcmUtb3JkZXIgdHJhdmVyc2FsIG9mIHRoZSBwYWdpbmcgc3RydWN0dXJlLlxcbiAxNTg6XFx0ICogVG8gZ2V0IHRvIHRoZSBuZXh0IFNQVEUsIHRoZSBpdGVyYXRvciBlaXRoZXIgc3RlcHMgZG93biB0b3dhcmRzIHRoZSBnb2FsXFxuIDE1OTpcXHQgKiBHRk4sIGlmIGF0IGEgcHJlc2VudCwgbm9uLWxhc3QtbGV2ZWwgU1BURSwgb3Igb3ZlciB0byBhIFNQVEUgbWFwcGluZyBhXFxuIDE2MDpcXHQgKiBoaWdoZXIgR0ZOLlxcbiAxNjE6XFx0ICpcXG4gMTYyOlxcdCAqIFRoZSBiYXNpYyBhbGdvcml0aG0gaXMgYXMgZm9sbG93czpcXG4gMTYzOlxcdCAqIDEuIElmIHRoZSBjdXJyZW50IFNQVEUgaXMgYSBub24tbGFzdC1sZXZlbCBTUFRFLCBzdGVwIGRvd24gaW50byB0aGUgcGFnZVxcbiAxNjQ6XFx0ICogICAgdGFibGUgaXQgcG9pbnRzIHRvLlxcbiAxNjU6XFx0ICogMi4gSWYgdGhlIGl0ZXJhdG9yIGNhbm5vdCBzdGVwIGRvd24sIGl0IHdpbGwgdHJ5IHRvIHN0ZXAgdG8gdGhlIG5leHQgU1BURVxcbiAxNjY6XFx0ICogICAgaW4gdGhlIGN1cnJlbnQgcGFnZSBvZiB0aGUgcGFnaW5nIHN0cnVjdHVyZS5cXG4gMTY3OlxcdCAqIDMuIElmIHRoZSBpdGVyYXRvciBjYW5ub3Qgc3RlcCB0byB0aGUgbmV4dCBlbnRyeSBpbiB0aGUgY3VycmVudCBwYWdlLCBpdCB3aWxsXFxuIDE2ODpcXHQgKiAgICB0cnkgdG8gc3RlcCB1cCB0byB0aGUgcGFyZW50IHBhZ2luZyBzdHJ1Y3R1cmUgcGFnZS4gSW4gdGhpcyBjYXNlLCB0aGF0XFxuIDE2OTpcXHQgKiAgICBTUFRFIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gdmlzaXRlZCwgYW5kIHNvIHRoZSBpdGVyYXRvciBtdXN0IGFsc28gc3RlcFxcbiAxNzA6XFx0ICogICAgdG8gdGhlIHNpZGUgYWdhaW4uXFxuIDE3MTpcXHQgKi9cXG4gMTcyOlxcdHN0YXRpYyB2b2lkIF9fdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsXFxuIDE3MzpcXHRcXHRcXHRcXHQgICAgc3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50ICpldmVudClcXG4gMTc0OlxcdHtcXG4gMTc1OlxcdFxcdGlmIChldmVudClcXG4gMTc2OlxcdFxcdFxcdGV2ZW50LVxcdTAwM2V2YWxpZCA9IGZhbHNlO1xcbiAxNzc6XFx0XFxuIDE3ODpcXHRcXHRpZiAoaXRlci1cXHUwMDNleWllbGRlZCkge1xcbiAxNzk6XFx0XFx0XFx0dGRwX2l0ZXJfcmVzdGFydChpdGVyKTtcXG4gMTgwOlxcdFxcdFxcdHJldHVybjtcXG4gMTgxOlxcdFxcdH1cXG4gMTgyOlxcdFxcbiAxODM6XFx0XFx0aWYgKHRyeV9zdGVwX2Rvd24oaXRlcikpXFxuIDE4NDpcXHRcXHRcXHRyZXR1cm47XFxuIDE4NTpcXHRcXG4gMTg2OlxcdFxcdGRvIHtcXG4gMTg3OlxcdFxcdFxcdGlmICh0cnlfc3RlcF9zaWRlKGl0ZXIpKVxcbiAxODg6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAxODk6XFx0XFx0fSB3aGlsZSAodHJ5X3N0ZXBfdXAoaXRlciwgZXZlbnQpKTtcXG4gMTkwOlxcdFxcdGl0ZXItXFx1MDAzZXZhbGlkID0gZmFsc2U7XFxuIDE5MTpcXHR9XFxuIDE5MjpcXHRcXG4gMTkzOlxcdHZvaWQgdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXFxuIDE5NDpcXHR7XFxuIDE5NTpcXHRcXHRfX3RkcF9pdGVyX25leHQoaXRlciwgTlVMTCk7XFxuIDE5NjpcXHR9XFxuIDE5NzpcXHRcXG4gMTk4OlxcdHZvaWQgdGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyKHN0cnVjdCB0ZHBfaXRlciAqaXRlcixcXG4gMTk5OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQpXFxuIDIwMDpcXHR7XFxuIDIwMTpcXHRcXHRfX3RkcF9pdGVyX25leHQoaXRlciwgZXZlbnQpO1xcbiAyMDI6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoyMjozMS45MDMyMjg0NzlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ3MTE5OTY0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBURFAgTU1VIFBvc3QtT3JkZXIgWmFwcGluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBmb2N1c2VzIG9uIG9wdGltaXppbmcgbGVhZiBwYWdlIHRhYmxlIHphcHBpbmcgd2l0aGluIHRoZSBURFAgTU1VLiBTcGVjaWZpY2FsbHksIGl0J3MgYWJvdXQgaGFuZGxpbmcgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyDigJMgdGhvc2UgYXQgdGhlIDJNIGxldmVsIHRoYXQgcG9pbnQgdG8gNEsgbGVhZiBwYWdlIHRhYmxlcyDigJMgYWZ0ZXIgdGhleSd2ZSBiZWVuIGZ1bGx5IHByb2Nlc3NlZCBkdXJpbmcgdGhlIGl0ZXJhdGlvbiBvZiBTUFRFcy4gVGhlIGB0ZHBfbW11X3phcF9sZWFmc2AgZnVuY3Rpb24gaXMga2V5IGhlcmUsIGFuZCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgdGRwX21tdV96YXBfY29tcGxldGVkX2VtcHR5X2xlYWZfcHRgIHRvIGhhbmRsZSB0aGUgemFwcGluZyBvZiB0aGVzZSBlbXB0eSB0YWJsZXMgZWZmaWNpZW50bHkgd2hlbiBzdGVwcGluZyB1cCB0aGUgcGFnZSB0YWJsZSBoaWVyYXJjaHkuXG5cblRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IHRoaXMgZGlyZWN0bHkgbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIFREUCBNTVUgcGFnaW5nIGFuZCB6YXBwaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZm9yIHg4Nl82NCBhcmNoaXRlY3R1cmVzLiBUaGUgZ29vZCBuZXdzIGlzLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhpcyBpcyBkZWZpbml0ZWx5IHRlc3RhYmxlIGFuZCBmdXp6YWJsZSBpbiBwbGF0Zm9ybXMgbGlrZSBRRU1VLiBXZSBjYW4gdXNlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvciBzdGFuZGFyZCBLVk0gaW9jdGxzIHRvIHZlcmlmeSBpdHMgZnVuY3Rpb25hbGl0eS4gVGhlIGZ1bmN0aW9uIG9mIHRoaXMgY2hhbmdlIHdpbGwgYmUgdG8gbW9yZSBlZmZlY3RpdmVseSBtYW5hZ2UgbWVtb3J5IGJ5IG9wdGltaXppbmcgcGFnZSB0YWJsZSB6YXBwaW5nIGFuZCBmcmVlaW5nIHVwIGVtcHR5IHBhZ2UgdGFibGVzLCB3aGljaCBpcyB2ZXJ5IGltcG9ydGFudC5cblxuTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEknbSBleHBlY3RpbmcgYEtWTWAsIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIGFuZCBgWDg2XzY0YCB0byBiZSBjcml0aWNhbC4gVG8gY29uZmlybSwgSSdsbCBleGFtaW5lIHRoZSBLY29uZmlnIHN5bWJvbHMgcmVsYXRlZCB0byB0aGlzIGNvZGUgYW5kIHNlZSB3aGF0IGNvbmZpZ3VyYXRpb25zIGVuYWJsZSB0aGUgS1ZNIHg4NiBURFAgTU1VLiBCYXNlZCBvbiBteSBleGlzdGluZyBrbm93bGVkZ2UsIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgYW5kIGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgIHdpbGwgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGRldGFpbHMuXG5cbkZyb20gYSBxdWljayBnbGFuY2UgYXQgYGFyY2gveDg2L2t2bS9NYWtlZmlsZWAsIEkgc2VlIHRoYXQgYG1tdS90ZHBfaXRlci5vYCBhbmQgYG1tdS90ZHBfbW11Lm9gIGFyZSBpbmNsdWRlZCB3aGVuIGBDT05GSUdfWDg2XzY0YCBpcyBzZXQuIEZ1cnRoZXIgaW5zcGVjdGlvbiBvZiBgYXJjaC94ODYva3ZtL0tjb25maWdgIHJldmVhbHMgdGhhdCBgS1ZNYCBkZXBlbmRzIG9uIGBYODZfTE9DQUxfQVBJQ2AsIGFuZCBib3RoIGBLVk1fSU5URUxgIGFuZCBgS1ZNX0FNRGAgYXJlIHJlbGV2YW50LCBidXQgYEtWTV9YODZgIGlzIG9ubHkgZGVmaW5lZCBpZiBlaXRoZXIgYEtWTV9JTlRFTGAgb3IgYEtWTV9BTURgIGFyZSBlbmFibGVkLlxuXG5GaW5hbGx5LCBJJ2xsIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWdzLCBsaWtlIGBLVk1fUFJPVkVfTU1VYCBvciBhbnl0aGluZyBlbHNlIGluIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcyBwYXJ0aWN1bGFyIGxvZ2ljLiBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCBhbGwgdGhlIEtjb25maWcgb3B0aW9ucyB3aXRoaW4gdGhhdCBmaWxlIHRvIGVuc3VyZSBjb21wbGV0ZSBjb3ZlcmFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkyMDAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoyMzoxNi42MTUyMjgxNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEtWTSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdHNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG4gICA3OlxcdFxcbiAgIDg6XFx0bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxcbiAgIDk6XFx0XFx0Ym9vbCBcXFwiVmlydHVhbGl6YXRpb25cXFwiXFxuICAxMDpcXHRcXHRkZWZhdWx0IHlcXG4gIDExOlxcdFxcdGhlbHBcXG4gIDEyOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgZm9yIHVzaW5nIHlvdXIgTGludXggaG9zdCB0byBydW4gb3RoZXJcXG4gIDEzOlxcdFxcdCAgb3BlcmF0aW5nIHN5c3RlbXMgaW5zaWRlIHZpcnR1YWwgbWFjaGluZXMgKGd1ZXN0cykuXFxuICAxNDpcXHRcXHQgIFRoaXMgb3B0aW9uIGFsb25lIGRvZXMgbm90IGFkZCBhbnkga2VybmVsIGNvZGUuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUgd2lsbCBiZSBza2lwcGVkIGFuZCBkaXNhYmxlZC5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0aWYgVklSVFVBTElaQVRJT05cXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIEtWTV9YODZcXG4gIDIxOlxcdFxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4gIDIyOlxcdFxcdHNlbGVjdCBLVk1fQ09NTU9OXFxuICAyMzpcXHRcXHRzZWxlY3QgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xcbiAgMjQ6XFx0XFx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcXG4gIDI1OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXFxuICAyNjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUEZOQ0FDSEVcXG4gIDI3OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX1RTT1xcbiAgMjg6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTFxcbiAgMjk6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcXG4gIDMwOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFfUk9VVElOR1xcbiAgMzE6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTVxcbiAgMzI6XFx0XFx0c2VsZWN0IFZIT1NUX1RBU0tcXG4gIDMzOlxcdFxcdHNlbGVjdCBLVk1fQVNZTkNfUEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBVU0VSX1JFVFVSTl9OT1RJRklFUlxcbiAgMzU6XFx0XFx0c2VsZWN0IEtWTV9NTUlPXFxuICAzNjpcXHRcXHRzZWxlY3QgU0NIRURfSU5GT1xcbiAgMzc6XFx0XFx0c2VsZWN0IFBFUkZfRVZFTlRTXFxuICAzODpcXHRcXHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFNcXG4gIDM5OlxcdFxcdHNlbGVjdCBQRVJGX0dVRVNUX01FRElBVEVEX1BNVVxcbiAgNDA6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX01TSVxcbiAgNDE6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcXG4gIDQyOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9OT19QT0xMXFxuICA0MzpcXHRcXHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcXG4gIDQ0OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcXG4gIDQ1OlxcdFxcdHNlbGVjdCBLVk1fVkZJT1xcbiAgNDY6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX1BNX05PVElGSUVSIGlmIFBNXFxuICA0NzpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcXG4gIDQ4OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxuICA0OTpcXHRcXHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcXG4gIDUwOlxcdFxcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XFxuICA1MTpcXHRcXG4gIDUyOlxcdGNvbmZpZyBLVk1cXG4gIDUzOlxcdFxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuICA1NDpcXHRcXHRkZXBlbmRzIG9uIFg4Nl9MT0NBTF9BUElDXFxuICA1NTpcXHRcXHRoZWxwXFxuICA1NjpcXHRcXHQgIFN1cHBvcnQgaG9zdGluZyBmdWxseSB2aXJ0dWFsaXplZCBndWVzdCBtYWNoaW5lcyB1c2luZyBoYXJkd2FyZVxcbiAgNTc6XFx0XFx0ICB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiAgWW91IHdpbGwgbmVlZCBhIGZhaXJseSByZWNlbnRcXG4gIDU4OlxcdFxcdCAgcHJvY2Vzc29yIGVxdWlwcGVkIHdpdGggdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gWW91IHdpbGwgYWxzb1xcbiAgNTk6XFx0XFx0ICBuZWVkIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBvZiB0aGUgcHJvY2Vzc29yIG1vZHVsZXMgYmVsb3cuXFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgdGhyb3VnaFxcbiAgNjI6XFx0XFx0ICBhIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBuYW1lZCAvZGV2L2t2bS5cXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDY1OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLlxcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2ODpcXHRcXG4gIDY5OlxcdGNvbmZpZyBLVk1fV0VSUk9SXFxuICA3MDpcXHRcXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuICA3MTpcXHRcXHQjIERpc2FsbG93IEtWTSdzIC1XZXJyb3IgaWYgS0FTQU4gaXMgZW5hYmxlZCwgZS5nLiB0byBndWFyZCBhZ2FpbnN0XFxuICA3MjpcXHRcXHQjIHJhbmRvbWl6ZWQgY29uZmlncyBmcm9tIHNlbGVjdGluZyBLVk1fV0VSUk9SPXksIHdoaWNoIGRvZXNuJ3QgcGxheVxcbiAgNzM6XFx0XFx0IyBuaWNlIHdpdGggS0FTQU4uICBLQVNBTiBidWlsZHMgZ2VuZXJhdGVzIHdhcm5pbmdzIGZvciB0aGUgZGVmYXVsdFxcbiAgNzQ6XFx0XFx0IyBGUkFNRV9XQVJOLCBpLmUuIEtWTV9XRVJST1I9eSB3aXRoIEtBU0FOPXkgcmVxdWlyZXMgc3BlY2lhbCB0dW5pbmcuXFxuICA3NTpcXHRcXHQjIEJ1aWxkaW5nIEtWTSB3aXRoIC1XZXJyb3IgYW5kIEtBU0FOIGlzIHN0aWxsIGRvYWJsZSB2aWEgZW5hYmxpbmdcXG4gIDc2OlxcdFxcdCMgdGhlIGtlcm5lbC13aWRlIFdFUlJPUj15LlxcbiAgNzc6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fWDg2IFxcdTAwMjZcXHUwMDI2ICgoRVhQRVJUIFxcdTAwMjZcXHUwMDI2ICFLQVNBTikgfHwgV0VSUk9SKVxcbiAgNzg6XFx0XFx0aGVscFxcbiAgNzk6XFx0XFx0ICBBZGQgLVdlcnJvciB0byB0aGUgYnVpbGQgZmxhZ3MgZm9yIEtWTS5cXG4gIDgwOlxcdFxcbiAgODE6XFx0XFx0ICBJZiBpbiBkb3VidCwgc2F5IFxcXCJOXFxcIi5cXG4gIDgyOlxcdFxcbiAgODM6XFx0Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG4gIDg0OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4gIDg1OlxcdFxcdGRlcGVuZHMgb24gRVhQRVJUXFxuICA4NjpcXHRcXHRkZXBlbmRzIG9uIEtWTV9YODYgXFx1MDAyNlxcdTAwMjYgWDg2XzY0XFxuICA4NzpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG4gIDg4OlxcdFxcdGhlbHBcXG4gIDg5OlxcdFxcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zLiAgQ3VycmVudGx5LCBzb2Z0d2FyZS1cXG4gIDkwOlxcdFxcdCAgcHJvdGVjdGVkIFZNcyBhcmUgcHVyZWx5IGEgZGV2ZWxvcG1lbnQgYW5kIHRlc3RpbmcgdmVoaWNsZSBmb3JcXG4gIDkxOlxcdFxcdCAgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRC4gIEF0dGVtcHRpbmcgdG8gcnVuIGEgXFxcInJlYWxcXFwiIFZNIHdvcmtsb2FkIGFzIGFcXG4gIDkyOlxcdFxcdCAgc29mdHdhcmUtcHJvdGVjdGVkIFZNIHdpbGwgZmFpbCBtaXNlcmFibHkuXFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgXFxcIk5cXFwiLlxcbiAgOTU6XFx0XFxuICA5NjpcXHRjb25maWcgS1ZNX0lOVEVMXFxuICA5NzpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4gIDk4OlxcdFxcdGRlcGVuZHMgb24gS1ZNIFxcdTAwMjZcXHUwMDI2IElBMzJfRkVBVF9DVExcXG4gIDk5OlxcdFxcdHNlbGVjdCBYODZfRlJFRCBpZiBYODZfNjRcXG4gMTAwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MjM6MTYuNjE1MzE4MTVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA0OTQ5NDY5ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gUGF0Y2ggZm9yIEZvY3VzIFN5bWJvbCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIHN5bWJvbHMgYXJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMgcGF0Y2guIExldCdzIHN0YXJ0IGJ5IGxpc3RpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBvciBjYWxscy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHJlbGV2YW50IGNvZGUuXG5cbkZpcnN0LCBJIHNlZSBgdGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyYCwgd2hpY2ggaXMgZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMsIHJlc2lkaW5nIGluIGJvdGggYGFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaGAgYW5kIGB0ZHBfaXRlci5jYC4gVGhlbiwgdGhlcmUncyBgdGRwX2l0ZXJfbmV4dGAsIGFsc28gbm9uLXN0YXRpYy4gVGhvc2UgdHdvIHNvdW5kIGl0ZXJhdGl2ZSwgc28gdGhleSBhcmUgaGlnaGx5IHJlbGV2YW50LiBOZXh0LCBga3ZtX3RkcF9tbXVfemFwX2xlYWZzYCwgd2hpY2ggaXMgYWxzbyBub24tc3RhdGljLCBhbmQgbG9jYXRlZCBpbiBgdGRwX21tdS5jYC4gRm9sbG93aW5nIHRoYXQsIGBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VgLCBhZ2FpbiBub24tc3RhdGljLCBhbHNvIHdpdGhpbiBgdGRwX21tdS5jYCBhbmQgc3BlY2lmaWNhbGx5IGNhbGxzIGB0ZHBfbW11X3phcF9sZWFmc2AuIEZpbmFsbHksIEkgc2VlIGBrdm1femFwX2dmbl9yYW5nZWAsIGxvY2F0ZWQgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBhbmQgaW1wb3J0YW50bHksIGNhbGxzIGBrdm1fdGRwX21tdV96YXBfbGVhZnNgLlxuXG5TbywgdGhlIGZvY3VzIGlzIHJlYWxseSBvbiB0aGlzIGxlYWYgemFwcGluZyBhbmQgdW5tYXBwaW5nLCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIFREUCBNTVUuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIHdvcmssIHJpZ2h0IG5vdy4gU2luY2UgSSdtIHZlcnkgZmFtaWxpYXIgd2l0aCB0aGVzZSBjb21wb25lbnRzLCB0aGlzIG1hcHBpbmcsIHVubWFwcGluZywgYW5kIGl0ZXJhdGlvbiBpcyBsaWtlbHkgaGFwcGVuaW5nIG9uIG11bHRpcGxlIGxldmVscy5cbkkgc2hvdWxkIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgZnVuY3Rpb25zIGZyb20gdGhlIGB0ZHBfbW11LmNgIGZpbGUgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgdG8gdGhlIG90aGVyIGxpc3RlZCBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxODI3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MjM6MzcuMTEwMjY4NTQxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDkyODI5NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3RkcF9tbXVfemFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY5OTk9c3RhdGljIHZvaWQgX19rdm1fbW11X3phcF9hbGxfZmFzdF9iYWNrX2hhbGYoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MDEyLVxcdGlmICh0ZHBfbW11X2VuYWJsZWQpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MDEzOlxcdFxcdGt2bV90ZHBfbW11X3phcF9pbnZhbGlkYXRlZF9yb290cyhrdm0sIHRydWUpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzAxNC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTcxMTM9dm9pZCBrdm1femFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbl9zdGFydCwgZ2ZuX3QgZ2ZuX2VuZClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzEyOC1cXHRpZiAodGRwX21tdV9lbmFibGVkKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzEyOTpcXHRcXHRmbHVzaCA9IGt2bV90ZHBfbW11X3phcF9sZWFmcyhrdm0sIGdmbl9zdGFydCwgZ2ZuX2VuZCwgZmx1c2gpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzEzMC1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzU0ND1zdGF0aWMgdm9pZCBrdm1fbW11X3phcF9hbGwoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NTYzLVxcdGlmICh0ZHBfbW11X2VuYWJsZWQpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3NTY0OlxcdFxcdGt2bV90ZHBfbW11X3phcF9hbGwoa3ZtKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc1NjUtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTc5MzM9c3RhdGljIHZvaWQga3ZtX3JlY292ZXJfbnhfaHVnZV9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTgwMDEtXFx0XFx0XFx0aWYgKGlzX3RkcF9tbXUpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo4MDAyOlxcdFxcdFxcdFxcdGZsdXNoIHw9IGt2bV90ZHBfbW11X3phcF9wb3NzaWJsZV9ueF9odWdlX3BhZ2Uoa3ZtLCBzcCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy04MDAzLVxcdFxcdFxcdGVsc2VcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jPTMzPXZvaWQga3ZtX21tdV91bmluaXRfdGRwX21tdShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy00MC1cXHRrdm1fdGRwX21tdV9pbnZhbGlkYXRlX3Jvb3RzKGt2bSwgS1ZNX1ZBTElEX1JPT1RTKTtcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo0MTpcXHRrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoa3ZtLCBmYWxzZSk7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNDItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz0yNTk9dm9pZCBrdm1fdGRwX21tdV9hbGxvY19yb290KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBtaXJyb3IpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0zMDYtXFx0ICogdGhlIFREUCBNTVUgaXRzZWxmLCB3aGljaCBpcyBoZWxkIHVudGlsIHRoZSByb290IGlzIGludmFsaWRhdGVkIGFuZFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjMwNzpcXHQgKiBpcyB1bHRpbWF0ZWx5IHB1dCBieSBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoKS5cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0zMDgtXFx0ICovXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz04Mjk9c3RhdGljIHZvaWQgdGRwX21tdV96YXBfcm9vdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy04NzUtXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6ODc2OmJvb2wga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtODc3LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM9OTY1PXN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwMDItXFx0XFx0XFx0ICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2Vzbid0IHJlcXVpcmUgYSBUTEIgZmx1c2gsXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTAwMzpcXHRcXHRcXHQgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAwNC1cXHRcXHRcXHQgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwMzYtICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTAzNzpib29sIGt2bV90ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgZmx1c2gpXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzOC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMDQ3LVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjEwNDg6dm9pZCBrdm1fdGRwX21tdV96YXBfYWxsKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMDQ5LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwNzQtICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTA3NTp2b2lkIGt2bV90ZHBfbW11X3phcF9pbnZhbGlkYXRlZF9yb290cyhzdHJ1Y3Qga3ZtICprdm0sIGJvb2wgc2hhcmVkKVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwNzYte1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTEyMi0gKlxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjExMjM6ICogTm90ZSwga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgaXMgZ2lmdGVkIHRoZSBURFAgTU1VJ3MgcmVmZXJlbmNlLlxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTExMjQtICogU2VlIGt2bV90ZHBfbW11X2FsbG9jX3Jvb3QoKS5cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oPTU3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tbXVfcGFnZSAqdGRwX21tdV9nZXRfcm9vdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC02NS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaDo2Njpib29sIGt2bV90ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgZmx1c2gpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oOjY3OmJvb2wga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtNjgtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oOjY5OnZvaWQga3ZtX3RkcF9tbXVfemFwX2FsbChzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTcwLXZvaWQga3ZtX3RkcF9tbXVfaW52YWxpZGF0ZV9yb290cyhzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtNzEtXFx0XFx0XFx0XFx0ICBlbnVtIGt2bV90ZHBfbW11X3Jvb3RfdHlwZXMgcm9vdF90eXBlcyk7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg6NzI6dm9pZCBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoc3RydWN0IGt2bSAqa3ZtLCBib29sIHNoYXJlZCk7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtNzMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjIzOjM3LjQ1OTU3NjMyNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjE0MTYzNzg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBURFAgTU1VIFJlbGF0ZWQgRnVuY3Rpb25zIGFuZCBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSB0cmFjaW5nIHRoZSBjYWxsIHBhdGhzIGZvciBzb21lIGtleSBmdW5jdGlvbnMuIEl0IGxvb2tzIGxpa2UgYHRkcF9tbXVfemFwX2xlYWZzYCBpcyB0aGUgdGFyZ2V0LCBjYWxsZWQgYnkgYm90aCBga3ZtX3RkcF9tbXVfemFwX2xlYWZzYCBhbmQgYGt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZWAuIGBrdm1fdGRwX21tdV96YXBfbGVhZnNgIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBrdm1femFwX2dmbl9yYW5nZWAuIEFuZCBga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlYCBpcyBjYWxsZWQgYnkgYGt2bV91bm1hcF9nZm5fcmFuZ2VgLCB0aHJvdWdoIG1tdSBub3RpZmllcnMuXG5cbk5leHQsIEknbSBjcm9zcy1yZWZlcmVuY2luZyB0aGVzZSBmdW5jdGlvbnMgd2l0aCB0aGVpciBkZWZpbml0aW9ucy4gSSd2ZSBsb2NhdGVkIGB0ZHBfaXRlcl9uZXh0X3Bvc3Rfb3JkZXJgIGluIGB0ZHBfaXRlci5jYCwgYW5kIGBrdm1fdGRwX21tdV96YXBfbGVhZnNgIGFuZCBga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlYCBpbiBgdGRwX21tdS5jYC4gQWxzbyBga3ZtX3phcF9nZm5fcmFuZ2VgIGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYC5cblxuTm93LCBJJ20gY2hlY2tpbmcgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBgS1ZNYCwgYEtWTV9JTlRFTGAvYEtWTV9BTURgLCBhbmQgYFg4Nl82NGAgYXJlIGRlZmluaXRlbHkgaW4gdGhlIG1peC4gSSdtIHZlcmlmeWluZyB0aGF0IGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYCBhcmUgbmVjZXNzYXJ5IHRvIGVuYWJsZSBgS1ZNX1g4NmAsIGFzIGRlZmluZWQgaW4gdGhlIGBLY29uZmlnYCBmaWxlLiBJIHNlZSB0aGUgZGVwZW5kZW5jeTogYEtWTV9YODZgIGlzIGRlZmluZWQgYXMgYSB0cmlzdGF0ZSBzeW1ib2wgZGVwZW5kZW50IG9uIGBLVk1gIGlmIGVpdGhlciBgS1ZNX0lOVEVMYCBvciBgS1ZNX0FNRGAgaXMgbm90IFwiblwiLiBBbHNvIGBYODZfNjRgIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGNvbXBpbGF0aW9uIG9mIGB0ZHBfaXRlci5vYCBhbmQgYHRkcF9tbXUub2AgYmVjYXVzZSBvZiB0aGUgbWFrZWZpbGUgZGVwZW5kZW5jeS5cblxuU28sIGZvciBgRW5hYmxlQ29uZmlnc2AsIEknbGwgaW5jbHVkZSBgS1ZNYCwgYEtWTV9JTlRFTGAsIGBLVk1fQU1EYCwgYW5kIGBYODZfNjRgLlxuXG5UaGUgYEZvY3VzU3ltYm9sc2AgYXJlIHRoZXNlIGtleSBmdW5jdGlvbnM6IGBrdm1fdGRwX21tdV96YXBfbGVhZnNgLCBgdGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyYCwgYGt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZWAsIGFuZCBga3ZtX3phcF9nZm5fcmFuZ2VgLlxuXG5GaW5hbGx5LCBJJ20gZW5zdXJpbmcgZXZlcnl0aGluZyBhbGlnbnMgd2l0aCB0aGUgaW5zdHJ1Y3Rpb25zLCBpbmNsdWRpbmcgYFdvcnRoRnV6emluZzogdHJ1ZWAuIFRoZSByZWFzb25pbmcgaXMgc29saWQ6IFRoaXMgaXMgYWJvdXQgdXBkYXRpbmcgdGhlIFREUCBNTVUgaXRlcmF0b3IgZm9yIHBvc3Qtb3JkZXIgdHJhdmVyc2FsLiBUaGlzIGFsbG93cyB0aGUgc3lzdGVtIHRvIGRldGVjdCBjb21wbGV0ZWQgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyBhbmQgaW1tZWRpYXRlbHkgemFwIHRoZW0uIEFsc28sIHRoaXMgbWVhbnMgZmx1c2hpbmcgcmVtb3RlIFRMQnMgaWYgc2hhZG93IHBhZ2VzIHdlcmUgcmVtb3ZlZC4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBub24tc3RhdGljIGFuZCBub24taW5saW5lZCBBUEkgZnVuY3Rpb25zLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgc3BlY2lmaWVkLCB3aXRob3V0IHRoZSBgQ09ORklHX2AgcHJlZml4LlxuXG5BbHJpZ2h0LCBJJ20gcmVhZHkgdG8gY3JhZnQgdGhhdCBgc2V0LXJlc3VsdHNgIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NjE4LCJPdXRwdXRUb2tlbnMiOjE5MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoyMzo1My42MDEyMTYxNzNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjExNTk0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIlg4Nl82NFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV90ZHBfbW11X3phcF9sZWFmc1wiLFxuICAgIFwidGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyXCIsXG4gICAgXCJrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VcIixcbiAgICBcImt2bV96YXBfZ2ZuX3JhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBwb3N0LW9yZGVyIHRyYXZlcnNhbCBzdXBwb3J0IHRvIHRoZSBLVk0geDg2IFREUCBNTVUgaXRlcmF0b3IgYW5kIHVwZGF0ZXMgdGRwX21tdV96YXBfbGVhZnMoKSB0byBhdXRvbWF0aWNhbGx5IHphcCBjb21wbGV0ZWQgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyAoYW5kIGhhbmRsZSB0aGUgY29ycmVzcG9uZGluZyByZW1vdGUgVExCIGZsdXNoIHdoZW4gc2hhZG93IHBhZ2VzIGFyZSBmcmVlZCkuIFRoaXMgYWx0ZXJzIGNvcmUgTU1VIHBhZ2UtdGFibGUgemFwcGluZyBiZWhhdmlvciBpbiBLVk0geDg2IGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJYODZfNjRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdGRwX21tdV96YXBfbGVhZnNcIixcbiAgICBcInRkcF9pdGVyX25leHRfcG9zdF9vcmRlclwiLFxuICAgIFwia3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlXCIsXG4gICAgXCJrdm1femFwX2dmbl9yYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgcG9zdC1vcmRlciB0cmF2ZXJzYWwgc3VwcG9ydCB0byB0aGUgS1ZNIHg4NiBURFAgTU1VIGl0ZXJhdG9yIGFuZCB1cGRhdGVzIHRkcF9tbXVfemFwX2xlYWZzKCkgdG8gYXV0b21hdGljYWxseSB6YXAgY29tcGxldGVkIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgKGFuZCBoYW5kbGUgdGhlIGNvcnJlc3BvbmRpbmcgcmVtb3RlIFRMQiBmbHVzaCB3aGVuIHNoYWRvdyBwYWdlcyBhcmUgZnJlZWQpLiBUaGlzIGFsdGVycyBjb3JlIE1NVSBwYWdlLXRhYmxlIHphcHBpbmcgYmVoYXZpb3IgaW4gS1ZNIHg4NiBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MjM6NTMuNjc3MzM5NTI3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTI5OTM3Mjg1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjIzOjUzLjY3Nzc2NDU0N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIxMjk4OTQzNjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0ncyBURFAgTU1VIGl0ZXJhdGlvbiBhbmQgcGFnZSB0YWJsZSB6YXBwaW5nIGxvZ2ljIHRvIHphcCBjb21wbGV0ZWQgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyBkdXJpbmcgbGVhZiB6YXBwaW5nLiBJdCBpbnRyb2R1Y2VzIGEgYHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudGAgc3RydWN0dXJlLCB3aGljaCBpcyB6ZXJvLWluaXRpYWxpemVkIG9uIHRoZSBzdGFjayAoYGV2ZW50ID0ge31gKSBhbmQgd2hvc2UgZmllbGRzIGFyZSBleHBsaWNpdGx5IHBvcHVsYXRlZCBpbiBgdHJ5X3N0ZXBfdXAoKWAgd2hlbmV2ZXIgYGV2ZW50LVxcdTAwM2V2YWxpZGAgaXMgc2V0IHRvIHRydWUuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgbGVmdCB1bmluaXRpYWxpemVkLCBhbmQgbm8gY29udHJvbC1mbG93IGRlY2lzaW9ucyBkZXBlbmQgb24gdW5pbml0aWFsaXplZCBzdGF0ZS4gUG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoaXMgY2hhbmdlIChlLmcuIFRMQiBmbHVzaGluZyBjb3JyZWN0bmVzcywgUkNVIGxpZmVjeWNsZSwgb3IgU1BURSBtb2RpZmljYXRpb24gcmFjZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY2NGIxOTdjMzNiM2RkNjMyOGEwNThkMjY1NzI3MmMzZWI1ZTk1ZWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDoyMDo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1xuaW5kZXggOWUxN2JmYTgwOTAxMS4uZDliZTQyOTg0MTBkMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1xuKysrIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jXG5AQCAtMTMyLDcgKzEzMiw4IEBAIHN0YXRpYyBib29sIHRyeV9zdGVwX3NpZGUoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuICAqIGNhbiBjb250aW51ZSBmcm9tIHRoZSBuZXh0IGVudHJ5IGluIHRoZSBwYXJlbnQgcGFnZSB0YWJsZS4gUmV0dXJucyB0cnVlIG9uIGFcbiAgKiBzdWNjZXNzZnVsIHN0ZXAgdXAsIGZhbHNlIGlmIGFscmVhZHkgaW4gdGhlIHJvb3QgcGFnZS5cbiAgKi9cbi1zdGF0aWMgYm9vbCB0cnlfc3RlcF91cChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4rc3RhdGljIGJvb2wgdHJ5X3N0ZXBfdXAoc3RydWN0IHRkcF9pdGVyICppdGVyLFxuK1x0XHRcdHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQpXG4ge1xuIFx0aWYgKGl0ZXItXHUwMDNlbGV2ZWwgPT0gaXRlci1cdTAwM2Vyb290X2xldmVsKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG5AQCAtMTQxLDYgKzE0MiwxNCBAQCBzdGF0aWMgYm9vbCB0cnlfc3RlcF91cChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4gXHRpdGVyLVx1MDAzZWdmbiA9IGdmbl9yb3VuZF9mb3JfbGV2ZWwoaXRlci1cdTAwM2VnZm4sIGl0ZXItXHUwMDNlbGV2ZWwpO1xuIFx0dGRwX2l0ZXJfcmVmcmVzaF9zcHRlcChpdGVyKTtcbiBcbitcdGlmIChldmVudCBcdTAwMjZcdTAwMjYgIWV2ZW50LVx1MDAzZXZhbGlkKSB7XG4rXHRcdGV2ZW50LVx1MDAzZXNwdGVwID0gaXRlci1cdTAwM2VzcHRlcDtcbitcdFx0ZXZlbnQtXHUwMDNlb2xkX3NwdGUgPSBpdGVyLVx1MDAzZW9sZF9zcHRlO1xuK1x0XHRldmVudC1cdTAwM2VnZm4gPSBpdGVyLVx1MDAzZWdmbjtcbitcdFx0ZXZlbnQtXHUwMDNlbGV2ZWwgPSBpdGVyLVx1MDAzZWxldmVsO1xuK1x0XHRldmVudC1cdTAwM2V2YWxpZCA9IHRydWU7XG4rXHR9XG4rXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG5AQCAtMTYwLDggKzE2OSwxMiBAQCBzdGF0aWMgYm9vbCB0cnlfc3RlcF91cChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4gICogICAgU1BURSB3aWxsIGhhdmUgYWxyZWFkeSBiZWVuIHZpc2l0ZWQsIGFuZCBzbyB0aGUgaXRlcmF0b3IgbXVzdCBhbHNvIHN0ZXBcbiAgKiAgICB0byB0aGUgc2lkZSBhZ2Fpbi5cbiAgKi9cbi12b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuK3N0YXRpYyB2b2lkIF9fdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsXG4rXHRcdFx0ICAgIHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQpXG4ge1xuK1x0aWYgKGV2ZW50KVxuK1x0XHRldmVudC1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuK1xuIFx0aWYgKGl0ZXItXHUwMDNleWllbGRlZCkge1xuIFx0XHR0ZHBfaXRlcl9yZXN0YXJ0KGl0ZXIpO1xuIFx0XHRyZXR1cm47XG5AQCAtMTczLDcgKzE4NiwxNyBAQCB2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuIFx0ZG8ge1xuIFx0XHRpZiAodHJ5X3N0ZXBfc2lkZShpdGVyKSlcbiBcdFx0XHRyZXR1cm47XG4tXHR9IHdoaWxlICh0cnlfc3RlcF91cChpdGVyKSk7XG4rXHR9IHdoaWxlICh0cnlfc3RlcF91cChpdGVyLCBldmVudCkpO1xuIFx0aXRlci1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuIH1cbiBcbit2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuK3tcbitcdF9fdGRwX2l0ZXJfbmV4dChpdGVyLCBOVUxMKTtcbit9XG4rXG4rdm9pZCB0ZHBfaXRlcl9uZXh0X3Bvc3Rfb3JkZXIoc3RydWN0IHRkcF9pdGVyICppdGVyLFxuK1x0XHRcdCAgICAgIHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQpXG4re1xuK1x0X190ZHBfaXRlcl9uZXh0KGl0ZXIsIGV2ZW50KTtcbit9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oXG5pbmRleCBmODk4ZDhkMGQ5M2MyLi5iN2UyNjA1ZmJmOWU5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmhcbkBAIC0xMjMsNiArMTIzLDE0IEBAIHN0cnVjdCB0ZHBfaXRlciB7XG4gXHRib29sIHlpZWxkZWQ7XG4gfTtcbiBcbitzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQge1xuK1x0dGRwX3B0ZXBfdCBzcHRlcDtcbitcdHU2NCBvbGRfc3B0ZTtcbitcdGdmbl90IGdmbjtcbitcdGludCBsZXZlbDtcbitcdGJvb2wgdmFsaWQ7XG4rfTtcbitcbiAvKlxuICAqIEl0ZXJhdGVzIG92ZXIgZXZlcnkgU1BURSBtYXBwaW5nIHRoZSBHRk4gcmFuZ2UgW3N0YXJ0LCBlbmQpIGluIGFcbiAgKiBwcmVvcmRlciB0cmF2ZXJzYWwuXG5AQCAtMTQ1LDYgKzE1Myw4IEBAIHRkcF9wdGVwX3Qgc3B0ZV90b19jaGlsZF9wdCh1NjQgcHRlLCBpbnQgbGV2ZWwpO1xuIHZvaWQgdGRwX2l0ZXJfc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxuIFx0XHQgICAgaW50IG1pbl9sZXZlbCwgZ2ZuX3QgbmV4dF9sYXN0X2xldmVsX2dmbiwgZ2ZuX3QgZ2ZuX2JpdHMpO1xuIHZvaWQgdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpO1xuK3ZvaWQgdGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyKHN0cnVjdCB0ZHBfaXRlciAqaXRlcixcbitcdFx0XHQgICAgICBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgKmV2ZW50KTtcbiB2b2lkIHRkcF9pdGVyX3Jlc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyKTtcbiBcbiAjZW5kaWYgLyogX19LVk1fWDg2X01NVV9URFBfSVRFUl9IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY1xuaW5kZXggNDRkYWQxMDZmYWQxOS4uODI0NDZjNDczN2Y3OSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY1xuQEAgLTkyMyw2ICs5MjMsMzggQEAgYm9vbCBrdm1fdGRwX21tdV96YXBfcG9zc2libGVfbnhfaHVnZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitzdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9jb21wbGV0ZWRfZW1wdHlfbGVhZl9wdChzdHJ1Y3Qga3ZtICprdm0sXG4rXHRcdFx0XHRcdFx0c3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50ICpldmVudCxcbitcdFx0XHRcdFx0XHRnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxuK1x0XHRcdFx0XHRcdHRkcF9wdGVwX3QgemFwcGVkX2xlYWZfcHQpXG4re1xuK1x0c3RydWN0IGt2bV9tbXVfcGFnZSAqY2hpbGRfc3A7XG4rXG4rXHRpZiAoZXZlbnQtXHUwMDNlbGV2ZWwgIT0gUEdfTEVWRUxfMk0gfHxcbitcdCAgICAhaXNfc2hhZG93X3ByZXNlbnRfcHRlKGV2ZW50LVx1MDAzZW9sZF9zcHRlKSB8fFxuK1x0ICAgIGlzX2xhc3Rfc3B0ZShldmVudC1cdTAwM2VvbGRfc3B0ZSwgZXZlbnQtXHUwMDNlbGV2ZWwpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoZXZlbnQtXHUwMDNlZ2ZuIFx1MDAzYyBzdGFydCB8fFxuK1x0ICAgIGV2ZW50LVx1MDAzZWdmbiArIEtWTV9QQUdFU19QRVJfSFBBR0UoZXZlbnQtXHUwMDNlbGV2ZWwpIFx1MDAzZSBlbmQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIExlYXZlIHByb2R1Y3RpdmUgbGVhZiB0YWJsZXMgaW4gcGxhY2UgdG8gYXZvaWQgcmVmYXVsdCBjaHVybi4gKi9cbitcdGlmICh6YXBwZWRfbGVhZl9wdCA9PSBldmVudC1cdTAwM2VzcHRlcClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Y2hpbGRfc3AgPSBzcHRlX3RvX2NoaWxkX3NwKGV2ZW50LVx1MDAzZW9sZF9zcHRlKTtcbitcdGlmIChpc19taXJyb3Jfc3AoY2hpbGRfc3ApKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoY2hpbGRfc3AtXHUwMDNlcm9sZS5sZXZlbCAhPSBQR19MRVZFTF80SylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0dGRwX21tdV9zZXRfc3B0ZShrdm0sIGV2ZW50LVx1MDAzZXNwdGVwLCBldmVudC1cdTAwM2VvbGRfc3B0ZSxcbitcdFx0XHQgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUsIGV2ZW50LVx1MDAzZWdmbiwgZXZlbnQtXHUwMDNlbGV2ZWwpO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIC8qXG4gICogSWYgY2FuX3lpZWxkIGlzIHRydWUsIHdpbGwgcmVsZWFzZSB0aGUgTU1VIGxvY2sgYW5kIHJlc2NoZWR1bGUgaWYgdGhlXG4gICogc2NoZWR1bGVyIG5lZWRzIHRoZSBDUFUgb3IgdGhlcmUgaXMgY29udGVudGlvbiBvbiB0aGUgTU1VIGxvY2suIElmIHRoaXNcbkBAIC05MzMsNyArOTY1LDEwIEBAIGJvb2wga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXG4gc3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxuIFx0XHRcdCAgICAgIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgY2FuX3lpZWxkLCBib29sIGZsdXNoKVxuIHtcbitcdHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCBldmVudCA9IHt9O1xuIFx0c3RydWN0IHRkcF9pdGVyIGl0ZXI7XG4rXHR0ZHBfcHRlcF90IHphcHBlZF9sZWFmX3B0ID0gTlVMTDtcbitcdGJvb2wgcmVtb3ZlZF9zcCA9IGZhbHNlO1xuIFxuIFx0ZW5kID0gbWluKGVuZCwgdGRwX21tdV9tYXhfZ2ZuX2V4Y2x1c2l2ZSgpKTtcbiBcbkBAIC05NDEsMzMgKzk3Niw1NiBAQCBzdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXG4tXHRmb3JfZWFjaF90ZHBfcHRlX21pbl9sZXZlbChpdGVyLCBrdm0sIHJvb3QsIFBHX0xFVkVMXzRLLCBzdGFydCwgZW5kKSB7XG4rXHR0ZHBfaXRlcl9zdGFydChcdTAwMjZpdGVyLCByb290LCBQR19MRVZFTF80Sywgc3RhcnQsXG4rXHRcdCAgICAgICBrdm1fZ2ZuX3Jvb3RfYml0cyhrdm0sIHJvb3QpKTtcbitcdHdoaWxlIChpdGVyLnZhbGlkIFx1MDAyNlx1MDAyNiBpdGVyLmdmbiBcdTAwM2MgZW5kKSB7XG4gXHRcdGlmIChjYW5feWllbGQgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICB0ZHBfbW11X2l0ZXJfY29uZF9yZXNjaGVkKGt2bSwgXHUwMDI2aXRlciwgZmx1c2gsIGZhbHNlKSkge1xuIFx0XHRcdGZsdXNoID0gZmFsc2U7XG4rXHRcdFx0dGRwX2l0ZXJfbmV4dChcdTAwMjZpdGVyKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoIWlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLm9sZF9zcHRlKSB8fFxuLVx0XHQgICAgIWlzX2xhc3Rfc3B0ZShpdGVyLm9sZF9zcHRlLCBpdGVyLmxldmVsKSlcbi1cdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLm9sZF9zcHRlKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGlzX2xhc3Rfc3B0ZShpdGVyLm9sZF9zcHRlLCBpdGVyLmxldmVsKSkge1xuK1x0XHRcdGlmIChpdGVyLmxldmVsID09IFBHX0xFVkVMXzRLKSB7XG4rXHRcdFx0XHRzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDtcbiBcbi1cdFx0dGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgXHUwMDI2aXRlciwgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUpO1xuK1x0XHRcdFx0c3AgPSBzcHRlcF90b19zcChyY3VfZGVyZWZlcmVuY2UoaXRlci5zcHRlcCkpO1xuK1x0XHRcdFx0emFwcGVkX2xlYWZfcHQgPSBzcC1cdTAwM2VwdGVwO1xuK1x0XHRcdH1cbiBcbi1cdFx0Lypcbi1cdFx0ICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2Vzbid0IHJlcXVpcmUgYSBUTEIgZmx1c2gsXG4tXHRcdCAqIHNlZSBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoKSBmb3IgZGV0YWlscy5cbi1cdFx0ICovXG4tXHRcdGlmICghcm9vdC1cdTAwM2Vyb2xlLmludmFsaWQpXG4tXHRcdFx0Zmx1c2ggPSB0cnVlO1xuLVx0fVxuK1x0XHRcdHRkcF9tbXVfaXRlcl9zZXRfc3B0ZShrdm0sIFx1MDAyNml0ZXIsXG4rXHRcdFx0XHRcdCAgICAgIFNIQURPV19OT05QUkVTRU5UX1ZBTFVFKTtcbiBcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2Vzbid0IHJlcXVpcmUgYSBUTEIgZmx1c2gsXG4rXHRcdFx0ICogc2VlIGt2bV90ZHBfbW11X3phcF9pbnZhbGlkYXRlZF9yb290cygpIGZvciBkZXRhaWxzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmICghcm9vdC1cdTAwM2Vyb2xlLmludmFsaWQpXG4rXHRcdFx0XHRmbHVzaCA9IHRydWU7XG4rXHRcdH1cbitcbitcdFx0dGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyKFx1MDAyNml0ZXIsIFx1MDAyNmV2ZW50KTtcbitcdFx0aWYgKGV2ZW50LnZhbGlkIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgdGRwX21tdV96YXBfY29tcGxldGVkX2VtcHR5X2xlYWZfcHQoa3ZtLCBcdTAwMjZldmVudCwgc3RhcnQsXG4rXHRcdFx0XHRcdFx0XHRlbmQsIHphcHBlZF9sZWFmX3B0KSkge1xuK1x0XHRcdGlmICghcm9vdC1cdTAwM2Vyb2xlLmludmFsaWQpXG4rXHRcdFx0XHRmbHVzaCA9IHRydWU7XG4rXHRcdFx0cmVtb3ZlZF9zcCA9IHRydWU7XG4rXHRcdH1cbitcdH1cbiBcbiBcdC8qXG4tXHQgKiBCZWNhdXNlIHRoaXMgZmxvdyB6YXBzIF9vbmx5XyBsZWFmIFNQVEVzLCB0aGUgY2FsbGVyIGRvZXNuJ3QgbmVlZFxuLVx0ICogdG8gcHJvdmlkZSBSQ1UgcHJvdGVjdGlvbiBhcyBubyAnc3RydWN0IGt2bV9tbXVfcGFnZScgd2lsbCBiZSBmcmVlZC5cbitcdCAqIElmIGFueSBzaGFkb3cgcGFnZXMgd2VyZSByZW1vdmVkLCBzZXJ2aWNlIHBlbmRpbmcgVExCIGZsdXNoZXMgYmVmb3JlXG4rXHQgKiBkcm9wcGluZyBSQ1UgcHJvdGVjdGlvbiwgYXMgcmVxdWlyZWQgYnkgdGhlIFREUCBNTVUgaXRlcmF0b3IuXG4gXHQgKi9cbitcdGlmIChyZW1vdmVkX3NwIFx1MDAyNlx1MDAyNiBmbHVzaCkge1xuK1x0XHRrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTtcbitcdFx0Zmx1c2ggPSBmYWxzZTtcbitcdH1cbitcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIGZsdXNoO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjIzOjUzLjY3Nzc2NTI4N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5OTQ2NjgwMDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIFJpc2sgQXNzZXNzbWVudCBmb3IgS1ZNIFREUCBNTVUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBjb25jZXJuaW5nIHRoZSBLVk0gVERQIE1NVSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgaW4gYHRkcF9pdGVyLmNgLCBgdGRwX2l0ZXIuaGAsIGFuZCBgdGRwX21tdS5jYC4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiBhbmFseXNpcy5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSAqZG9pbmcqLiBJJ20gc2VlaW5nIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudGAuIExvb2tpbmcgY2xvc2VseSBhdCBgdGRwX2l0ZXIuY2AsIHRoaXMgc3RydWN0IGFwcGVhcnMgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGFuIGl0ZXJhdG9yLiBJdCBsb29rcyBsaWtlIGl0IGhvbGRzIHN0YXRlIGluZm9ybWF0aW9uIGR1cmluZyBhIHRyYXZlcnNhbCwgZXNwZWNpYWxseSB0aGUgYF9fdGRwX2l0ZXJfbmV4dGAgYW5kIGB0cnlfc3RlcF91cGAgZnVuY3Rpb25zIGFyZSBpbnRlcmVzdGluZy4gVGhlIGltcG9ydGFudCBwb2ludCBJJ3ZlIG5vdGljZWQgaGVyZSBpcyB0aGUgaW5pdGlhbGl6YXRpb24gc3RyYXRlZ3kgZm9yIHRoZSBldmVudC4gSW4gYHRkcF9tbXVfemFwX2xlYWZzYCB0aGUgYGV2ZW50YCBzdHJ1Y3R1cmUgaXMgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2suXG5cbldpdGhpbiBgdGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyYCwgdGhlIGBldmVudC1cdTAwM2V2YWxpZGAgaXMgaW1tZWRpYXRlbHkgc2V0IHRvIGZhbHNlLiBTdWJzZXF1ZW50bHksIGlmIGB0cnlfc3RlcF91cGAgaXMgZXhlY3V0ZWQsIHRoZSBzdHJ1Y3QgZXZlbnQgZmllbGRzIGFyZSBwb3B1bGF0ZWQsIG5hbWVseSBgc3B0ZXBgLCBgb2xkX3NwdGVgLCBgZ2ZuYCwgYGxldmVsYCwgYW5kIGB2YWxpZGAgYXJlIHVwZGF0ZWQuIElmIGBldmVudC52YWxpZGAgaXMgdHJ1ZSwgdGhlbiBgdGRwX21tdV96YXBfY29tcGxldGVkX2VtcHR5X2xlYWZfcHRgIHJlYWRzIGRhdGEgZnJvbSB0aGVzZSBmaWVsZHMuIEl0IG1ha2VzIGEgY2hlY2sgYmFzZWQgb24gYGV2ZW50LnZhbGlkYC5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogSXMgdGhlcmUgYW55IHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlPyBCYXNlZCBvbiBteSBhbmFseXNpcywgbm8uIFRoZSBgZXZlbnRgIHN0cnVjdCBpcyBpbml0aWFsaXplZCB0byB6ZXJvIGluaXRpYWxseSwgYW5kIGFsbCBmaWVsZHMgYXJlIHdyaXR0ZW4gKmJlZm9yZSogYmVpbmcgcmVhZCwgZWl0aGVyIGluIGB0cnlfc3RlcF91cGAgb3Igd2hlbiBgZXZlbnQudmFsaWRgIGlzIHRydWUuIFRoZXJlJ3Mgbm8gZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gaW5kaWNhdGlvbnMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgY29waWVkIGFueXdoZXJlLiBJJ20gbm90IHNlZWluZyBhbnkgdHlwaWNhbCBtZW1vcnkgYWxsb2NhdGlvbiBwaXRmYWxscyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCB2YWx1ZXMuIFRoaXMgaXMgaW50ZXJuYWwgS1ZNIHBhZ2UgdGFibGUgaXRlcmF0aW9uLCB6YXBwaW5nIGxvZ2ljLlxuXG5TbywgbGV0J3Mgc3VtbWFyaXplOlxuKiAgIGBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnRgIGlzIGluaXRpYWxpemVkIHRvIHplcm9cbiogICBldmVudCBpcyBwb3B1bGF0ZWQgd2l0aCB2YWxpZCBkYXRhXG4qICAgYGV2ZW50LVx1MDAzZXZhbGlkYCBjaGVjayBwcm90ZWN0cyByZWFkcyBvZiB0aGUgZGF0YVxuXG5NeSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IEtNU0FOIGNvbmNlcm5zLiBJdCdzIGVzc2VudGlhbGx5IGludGVybmFsIEtWTSBURFAgTU1VIHBhZ2UgdGFibGUgaXRlcmF0aW9uIGFuZCB6YXBwaW5nIGFuZCBUTEIgZmx1c2ggZm9yIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgKHBhZ2UgdGFibGUgbWFuYWdlbWVudCkuIFRoZSBkYXRhIGlzIG1hbmFnZWQgaW50ZXJuYWxseSBhbmQgZG9lc24ndCBsZWFrIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG91YmxlIGNoZWNrIHRoYXQgSSBkaWRuJ3QgbWlzcyBzb21ldGhpbmcuIEkgY2FuIHVzZSBgZ3JlcHBlcmAgb3IgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYSBzdWJ0bGUgZGV0YWlsLiBUaGlzIGxvb2tzIGNsZWFuIGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZS4gSSB0aGluayBpdCdzIHNhZmUgdG8gZXhjbHVkZSBmcm9tIEtNU0FOIHNjcnV0aW55LiBJIHdpbGwgcXVpY2tseSBjaGVjayBhcm91bmQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MzksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoyNDowMy42MjQ0NDg3OThaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTExMjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRkcF9tbXVfemFwX2xlYWZzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9tbXUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzExMz12b2lkIGt2bV96YXBfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuX3N0YXJ0LCBnZm5fdCBnZm5fZW5kKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTI4LVxcdGlmICh0ZHBfbW11X2VuYWJsZWQpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MTI5OlxcdFxcdGZsdXNoID0ga3ZtX3RkcF9tbXVfemFwX2xlYWZzKGt2bSwgZ2ZuX3N0YXJ0LCBnZm5fZW5kLCBmbHVzaCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTMwLVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM9OTI2PXN0YXRpYyBib29sIHRkcF9tbXVfemFwX2NvbXBsZXRlZF9lbXB0eV9sZWFmX3B0KHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTk2NC0gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo5NjU6c3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTk2Ni1cXHRcXHRcXHQgICAgICBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGNhbl95aWVsZCwgYm9vbCBmbHVzaClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwMzYtICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTAzNzpib29sIGt2bV90ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgZmx1c2gpXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzOC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMDQyLVxcdGZvcl9lYWNoX3ZhbGlkX3RkcF9tbXVfcm9vdF95aWVsZF9zYWZlKGt2bSwgcm9vdCwgLTEpXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTA0MzpcXHRcXHRmbHVzaCA9IHRkcF9tbXVfemFwX2xlYWZzKGt2bSwgcm9vdCwgc3RhcnQsIGVuZCwgdHJ1ZSwgZmx1c2gpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwNDQtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz0xMzY1PWJvb2wga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTM3My1cXHRfX2Zvcl9lYWNoX3RkcF9tbXVfcm9vdF95aWVsZF9zYWZlKGt2bSwgcm9vdCwgcmFuZ2UtXFx1MDAzZXNsb3QtXFx1MDAzZWFzX2lkLCB0eXBlcylcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzoxMzc0OlxcdFxcdGZsdXNoID0gdGRwX21tdV96YXBfbGVhZnMoa3ZtLCByb290LCByYW5nZS1cXHUwMDNlc3RhcnQsIHJhbmdlLVxcdTAwM2VlbmQsXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTM3NS1cXHRcXHRcXHRcXHRcXHQgIHJhbmdlLVxcdTAwM2VtYXlfYmxvY2ssIGZsdXNoKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oPTU3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tbXVfcGFnZSAqdGRwX21tdV9nZXRfcm9vdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC02NS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaDo2Njpib29sIGt2bV90ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgZmx1c2gpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTY3LWJvb2wga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjI0OjAzLjY2OTk2MzcwNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTMwNjcyMjAyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBObyBLTVNBTiBDb25jZXJucyBIZXJlKipcblxuT2theSwgc28gSSd2ZSByZXZpZXdlZCB0aGlzIHByb3Bvc2VkIHBhdGNoLCBhbmQgZnJhbmtseSwgaXQncyBwcmV0dHkgY2xlYW4uIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIG9wdGltaXppbmcgdGhlIEtWTSBURFAgTU1VIGJ5IG1vZGlmeWluZyB0aGUgaXRlcmF0b3IgYW5kIHBhZ2UgdGFibGUgemFwcGluZyBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdCdzIGFkZGluZyBwb3N0LW9yZGVyIHRyYXZlcnNhbCBldmVudCBub3RpZmljYXRpb25zIHRvIHphcCAqY29tcGxldGVkKiBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzLlxuXG5JJ20gc2VlaW5nIHplcm8gaW5pdGlhbGl6YXRpb24gb2YgYWxsIHZhcmlhYmxlcywgbGlrZSB0aGF0IGBldmVudCA9IHt9YCBjYWxsLiBUaGF0J3MgZ29vZCBwcmFjdGljZS4gUGx1cywgdGhlcmUncyBhYnNvbHV0ZWx5IG5vIGluZGljYXRpb24gb2YgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIE5vIGNvcGllcyBhcmUgbWFkZSBhbmQgbm8gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgdXNlZCBpbiBicmFuY2hlcyBvciBvdGhlciBjb250cm9sIGZsb3dzLlxuXG5GcmFua2x5LCBhbnkgYnVncyB0aGF0ICpjb3VsZCogYXJpc2Ug4oCTIHBhZ2UgdGFibGUgemFwcGluZyBpc3N1ZXMsIFRMQiBpbnZhbGlkYXRpb24gcHJvYmxlbXMsIFJDVSByYWNlIGNvbmRpdGlvbnMsIG9yIGNvbmN1cnJlbnQgTU1VIG1vZGlmaWNhdGlvbiBpc3N1ZXMg4oCTIGFyZSBnb2luZyB0byBiZSBjYXVnaHQgYnkgdGhlIHN0YW5kYXJkIHRvb2xzIHdlJ3ZlIGdvdCBpbiBwbGFjZTogS0FTQU4sIGxvY2tkZXAsIGFuZCBvZiBjb3Vyc2UsIG91ciBleGlzdGluZyBmdW5jdGlvbmFsIHRlc3RzLiBUaGVzZSBzaG91bGQgY292ZXIgdXMuXG5cbkdpdmVuIGFsbCBvZiB0aGF0LCB0aGVyZSdzIGFic29sdXRlbHkgbm8gcmVhc29uIHRvIGZsYWcgdGhpcyBhcyBhIHBvdGVudGlhbCBLTVNBTiBpc3N1ZS4gVGhpcyBsb29rcyBzb2xpZCBmcm9tIG15IHBlcnNwZWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzMwLCJPdXRwdXRUb2tlbnMiOjE4NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoyNDoxNC45NzY2ODkxMTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSdzIFREUCBNTVUgaXRlcmF0aW9uIGFuZCBwYWdlIHRhYmxlIHphcHBpbmcgbG9naWMgdG8gemFwIGNvbXBsZXRlZCBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzIGR1cmluZyBsZWFmIHphcHBpbmcuIEl0IGludHJvZHVjZXMgYSBgc3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50YCBzdHJ1Y3R1cmUsIHdoaWNoIGlzIHplcm8taW5pdGlhbGl6ZWQgb24gdGhlIHN0YWNrIChgZXZlbnQgPSB7fWApIGFuZCB3aG9zZSBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgcG9wdWxhdGVkIGluIGB0cnlfc3RlcF91cCgpYCB3aGVuZXZlciBgZXZlbnQtXFx1MDAzZXZhbGlkYCBpcyBzZXQgdG8gdHJ1ZS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIGFuZCBubyBjb250cm9sLWZsb3cgZGVjaXNpb25zIGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHN0YXRlLiBQb3RlbnRpYWwgaXNzdWVzIHdpdGggdGhpcyBjaGFuZ2UgKGUuZy4gVExCIGZsdXNoaW5nIGNvcnJlY3RuZXNzLCBSQ1UgbGlmZWN5Y2xlLCBvciBTUFRFIG1vZGlmaWNhdGlvbiByYWNlcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJ3MgVERQIE1NVSBpdGVyYXRpb24gYW5kIHBhZ2UgdGFibGUgemFwcGluZyBsb2dpYyB0byB6YXAgY29tcGxldGVkIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgZHVyaW5nIGxlYWYgemFwcGluZy4gSXQgaW50cm9kdWNlcyBhIGBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnRgIHN0cnVjdHVyZSwgd2hpY2ggaXMgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2sgKGBldmVudCA9IHt9YCkgYW5kIHdob3NlIGZpZWxkcyBhcmUgZXhwbGljaXRseSBwb3B1bGF0ZWQgaW4gYHRyeV9zdGVwX3VwKClgIHdoZW5ldmVyIGBldmVudC1cXHUwMDNldmFsaWRgIGlzIHNldCB0byB0cnVlLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGxlZnQgdW5pbml0aWFsaXplZCwgYW5kIG5vIGNvbnRyb2wtZmxvdyBkZWNpc2lvbnMgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIFBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGlzIGNoYW5nZSAoZS5nLiBUTEIgZmx1c2hpbmcgY29ycmVjdG5lc3MsIFJDVSBsaWZlY3ljbGUsIG9yIFNQVEUgbW9kaWZpY2F0aW9uIHJhY2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4t9l[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 10:19:42 +0000 UTC FinishedAt: 2026-08-31 10:24:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "X86_64" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "X86_64" ], "series_id": "080bc1a0-dc5b-4719-8de9-81fe9a659536" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_tdp_mmu_zap_leafs", "tdp_iter_next_post_order", "kvm_tdp_mmu_unmap_gfn_range", "kvm_zap_gfn_range" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtYODZfNjQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fdGRwX21tdV96YXBfbGVhZnMmIzM0OywKICAgICYjMzQ7dGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyJiMzNDssCiAgICAmIzM0O2t2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZSYjMzQ7LAogICAgJiMzNDtrdm1femFwX2dmbl9yYW5nZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSYjMzk7cyBURFAgTU1VIGl0ZXJhdGlvbiBhbmQgcGFnZSB0YWJsZSB6YXBwaW5nIGxvZ2ljIHRvIHphcCBjb21wbGV0ZWQgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyBkdXJpbmcgbGVhZiB6YXBwaW5nLiBJdCBpbnRyb2R1Y2VzIGEgYHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudGAgc3RydWN0dXJlLCB3aGljaCBpcyB6ZXJvLWluaXRpYWxpemVkIG9uIHRoZSBzdGFjayAoYGV2ZW50ID0ge31gKSBhbmQgd2hvc2UgZmllbGRzIGFyZSBleHBsaWNpdGx5IHBvcHVsYXRlZCBpbiBgdHJ5X3N0ZXBfdXAoKWAgd2hlbmV2ZXIgYGV2ZW50LVx1MDAzZXZhbGlkYCBpcyBzZXQgdG8gdHJ1ZS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIGFuZCBubyBjb250cm9sLWZsb3cgZGVjaXNpb25zIGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHN0YXRlLiBQb3RlbnRpYWwgaXNzdWVzIHdpdGggdGhpcyBjaGFuZ2UgKGUuZy4gVExCIGZsdXNoaW5nIGNvcnJlY3RuZXNzLCBSQ1UgbGlmZWN5Y2xlLCBvciBTUFRFIG1vZGlmaWNhdGlvbiByYWNlcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgcG9zdC1vcmRlciB0cmF2ZXJzYWwgc3VwcG9ydCB0byB0aGUgS1ZNIHg4NiBURFAgTU1VIGl0ZXJhdG9yIGFuZCB1cGRhdGVzIHRkcF9tbXVfemFwX2xlYWZzKCkgdG8gYXV0b21hdGljYWxseSB6YXAgY29tcGxldGVkIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgKGFuZCBoYW5kbGUgdGhlIGNvcnJlc3BvbmRpbmcgcmVtb3RlIFRMQiBmbHVzaCB3aGVuIHNoYWRvdyBwYWdlcyBhcmUgZnJlZWQpLiBUaGlzIGFsdGVycyBjb3JlIE1NVSBwYWdlLXRhYmxlIHphcHBpbmcgYmVoYXZpb3IgaW4gS1ZNIHg4NiBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY2NGIxOTdjMzNiM2RkNjMyOGEwNThkMjY1NzI3MmMzZWI1ZTk1ZWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDoyMDo1MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmNcbmluZGV4IDllMTdiZmE4MDkwMTEuLmQ5YmU0Mjk4NDEwZDAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1xuQEAgLTEzMiw3ICYjNDM7MTMyLDggQEAgc3RhdGljIGJvb2wgdHJ5X3N0ZXBfc2lkZShzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4gICogY2FuIGNvbnRpbnVlIGZyb20gdGhlIG5leHQgZW50cnkgaW4gdGhlIHBhcmVudCBwYWdlIHRhYmxlLiBSZXR1cm5zIHRydWUgb24gYVxuICAqIHN1Y2Nlc3NmdWwgc3RlcCB1cCwgZmFsc2UgaWYgYWxyZWFkeSBpbiB0aGUgcm9vdCBwYWdlLlxuICAqL1xuLXN0YXRpYyBib29sIHRyeV9zdGVwX3VwKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbiYjNDM7c3RhdGljIGJvb2wgdHJ5X3N0ZXBfdXAoc3RydWN0IHRkcF9pdGVyICppdGVyLFxuJiM0MztcdFx0XHRzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgKmV2ZW50KVxuIHtcbiBcdGlmIChpdGVyLVx1MDAzZWxldmVsID09IGl0ZXItXHUwMDNlcm9vdF9sZXZlbClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTE0MSw2ICYjNDM7MTQyLDE0IEBAIHN0YXRpYyBib29sIHRyeV9zdGVwX3VwKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbiBcdGl0ZXItXHUwMDNlZ2ZuID0gZ2ZuX3JvdW5kX2Zvcl9sZXZlbChpdGVyLVx1MDAzZWdmbiwgaXRlci1cdTAwM2VsZXZlbCk7XG4gXHR0ZHBfaXRlcl9yZWZyZXNoX3NwdGVwKGl0ZXIpO1xuIFxuJiM0MztcdGlmIChldmVudCBcdTAwMjZcdTAwMjYgIWV2ZW50LVx1MDAzZXZhbGlkKSB7XG4mIzQzO1x0XHRldmVudC1cdTAwM2VzcHRlcCA9IGl0ZXItXHUwMDNlc3B0ZXA7XG4mIzQzO1x0XHRldmVudC1cdTAwM2VvbGRfc3B0ZSA9IGl0ZXItXHUwMDNlb2xkX3NwdGU7XG4mIzQzO1x0XHRldmVudC1cdTAwM2VnZm4gPSBpdGVyLVx1MDAzZWdmbjtcbiYjNDM7XHRcdGV2ZW50LVx1MDAzZWxldmVsID0gaXRlci1cdTAwM2VsZXZlbDtcbiYjNDM7XHRcdGV2ZW50LVx1MDAzZXZhbGlkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuQEAgLTE2MCw4ICYjNDM7MTY5LDEyIEBAIHN0YXRpYyBib29sIHRyeV9zdGVwX3VwKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbiAgKiAgICBTUFRFIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gdmlzaXRlZCwgYW5kIHNvIHRoZSBpdGVyYXRvciBtdXN0IGFsc28gc3RlcFxuICAqICAgIHRvIHRoZSBzaWRlIGFnYWluLlxuICAqL1xuLXZvaWQgdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4mIzQzO3N0YXRpYyB2b2lkIF9fdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgKmV2ZW50KVxuIHtcbiYjNDM7XHRpZiAoZXZlbnQpXG4mIzQzO1x0XHRldmVudC1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuJiM0MztcbiBcdGlmIChpdGVyLVx1MDAzZXlpZWxkZWQpIHtcbiBcdFx0dGRwX2l0ZXJfcmVzdGFydChpdGVyKTtcbiBcdFx0cmV0dXJuO1xuQEAgLTE3Myw3ICYjNDM7MTg2LDE3IEBAIHZvaWQgdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4gXHRkbyB7XG4gXHRcdGlmICh0cnlfc3RlcF9zaWRlKGl0ZXIpKVxuIFx0XHRcdHJldHVybjtcbi1cdH0gd2hpbGUgKHRyeV9zdGVwX3VwKGl0ZXIpKTtcbiYjNDM7XHR9IHdoaWxlICh0cnlfc3RlcF91cChpdGVyLCBldmVudCkpO1xuIFx0aXRlci1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuIH1cbiBcbiYjNDM7dm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcbiYjNDM7e1xuJiM0MztcdF9fdGRwX2l0ZXJfbmV4dChpdGVyLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZHBfaXRlcl9uZXh0X3Bvc3Rfb3JkZXIoc3RydWN0IHRkcF9pdGVyICppdGVyLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgKmV2ZW50KVxuJiM0Mzt7XG4mIzQzO1x0X190ZHBfaXRlcl9uZXh0KGl0ZXIsIGV2ZW50KTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaCBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaFxuaW5kZXggZjg5OGQ4ZDBkOTNjMi4uYjdlMjYwNWZiZjllOSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oXG5AQCAtMTIzLDYgJiM0MzsxMjMsMTQgQEAgc3RydWN0IHRkcF9pdGVyIHtcbiBcdGJvb2wgeWllbGRlZDtcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQge1xuJiM0MztcdHRkcF9wdGVwX3Qgc3B0ZXA7XG4mIzQzO1x0dTY0IG9sZF9zcHRlO1xuJiM0MztcdGdmbl90IGdmbjtcbiYjNDM7XHRpbnQgbGV2ZWw7XG4mIzQzO1x0Ym9vbCB2YWxpZDtcbiYjNDM7fTtcbiYjNDM7XG4gLypcbiAgKiBJdGVyYXRlcyBvdmVyIGV2ZXJ5IFNQVEUgbWFwcGluZyB0aGUgR0ZOIHJhbmdlIFtzdGFydCwgZW5kKSBpbiBhXG4gICogcHJlb3JkZXIgdHJhdmVyc2FsLlxuQEAgLTE0NSw2ICYjNDM7MTUzLDggQEAgdGRwX3B0ZXBfdCBzcHRlX3RvX2NoaWxkX3B0KHU2NCBwdGUsIGludCBsZXZlbCk7XG4gdm9pZCB0ZHBfaXRlcl9zdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXG4gXHRcdCAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cyk7XG4gdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcik7XG4mIzQzO3ZvaWQgdGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyKHN0cnVjdCB0ZHBfaXRlciAqaXRlcixcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50ICpldmVudCk7XG4gdm9pZCB0ZHBfaXRlcl9yZXN0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcik7XG4gXG4gI2VuZGlmIC8qIF9fS1ZNX1g4Nl9NTVVfVERQX0lURVJfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcbmluZGV4IDQ0ZGFkMTA2ZmFkMTkuLjgyNDQ2YzQ3MzdmNzkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcbkBAIC05MjMsNiAmIzQzOzkyMywzOCBAQCBib29sIGt2bV90ZHBfbW11X3phcF9wb3NzaWJsZV9ueF9odWdlX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9jb21wbGV0ZWRfZW1wdHlfbGVhZl9wdChzdHJ1Y3Qga3ZtICprdm0sXG4mIzQzO1x0XHRcdFx0XHRcdHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQsXG4mIzQzO1x0XHRcdFx0XHRcdGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXG4mIzQzO1x0XHRcdFx0XHRcdHRkcF9wdGVwX3QgemFwcGVkX2xlYWZfcHQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX21tdV9wYWdlICpjaGlsZF9zcDtcbiYjNDM7XG4mIzQzO1x0aWYgKGV2ZW50LVx1MDAzZWxldmVsICE9IFBHX0xFVkVMXzJNIHx8XG4mIzQzO1x0ICAgICFpc19zaGFkb3dfcHJlc2VudF9wdGUoZXZlbnQtXHUwMDNlb2xkX3NwdGUpIHx8XG4mIzQzO1x0ICAgIGlzX2xhc3Rfc3B0ZShldmVudC1cdTAwM2VvbGRfc3B0ZSwgZXZlbnQtXHUwMDNlbGV2ZWwpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAoZXZlbnQtXHUwMDNlZ2ZuIFx1MDAzYyBzdGFydCB8fFxuJiM0MztcdCAgICBldmVudC1cdTAwM2VnZm4gJiM0MzsgS1ZNX1BBR0VTX1BFUl9IUEFHRShldmVudC1cdTAwM2VsZXZlbCkgXHUwMDNlIGVuZClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0LyogTGVhdmUgcHJvZHVjdGl2ZSBsZWFmIHRhYmxlcyBpbiBwbGFjZSB0byBhdm9pZCByZWZhdWx0IGNodXJuLiAqL1xuJiM0MztcdGlmICh6YXBwZWRfbGVhZl9wdCA9PSBldmVudC1cdTAwM2VzcHRlcClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0Y2hpbGRfc3AgPSBzcHRlX3RvX2NoaWxkX3NwKGV2ZW50LVx1MDAzZW9sZF9zcHRlKTtcbiYjNDM7XHRpZiAoaXNfbWlycm9yX3NwKGNoaWxkX3NwKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNoaWxkX3NwLVx1MDAzZXJvbGUubGV2ZWwgIT0gUEdfTEVWRUxfNEspXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHRkcF9tbXVfc2V0X3NwdGUoa3ZtLCBldmVudC1cdTAwM2VzcHRlcCwgZXZlbnQtXHUwMDNlb2xkX3NwdGUsXG4mIzQzO1x0XHRcdCBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSwgZXZlbnQtXHUwMDNlZ2ZuLCBldmVudC1cdTAwM2VsZXZlbCk7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBJZiBjYW5feWllbGQgaXMgdHJ1ZSwgd2lsbCByZWxlYXNlIHRoZSBNTVUgbG9jayBhbmQgcmVzY2hlZHVsZSBpZiB0aGVcbiAgKiBzY2hlZHVsZXIgbmVlZHMgdGhlIENQVSBvciB0aGVyZSBpcyBjb250ZW50aW9uIG9uIHRoZSBNTVUgbG9jay4gSWYgdGhpc1xuQEAgLTkzMyw3ICYjNDM7OTY1LDEwIEBAIGJvb2wga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXG4gc3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxuIFx0XHRcdCAgICAgIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgY2FuX3lpZWxkLCBib29sIGZsdXNoKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgZXZlbnQgPSB7fTtcbiBcdHN0cnVjdCB0ZHBfaXRlciBpdGVyO1xuJiM0MztcdHRkcF9wdGVwX3QgemFwcGVkX2xlYWZfcHQgPSBOVUxMO1xuJiM0MztcdGJvb2wgcmVtb3ZlZF9zcCA9IGZhbHNlO1xuIFxuIFx0ZW5kID0gbWluKGVuZCwgdGRwX21tdV9tYXhfZ2ZuX2V4Y2x1c2l2ZSgpKTtcbiBcbkBAIC05NDEsMzMgJiM0Mzs5NzYsNTYgQEAgc3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFxuLVx0Zm9yX2VhY2hfdGRwX3B0ZV9taW5fbGV2ZWwoaXRlciwga3ZtLCByb290LCBQR19MRVZFTF80Sywgc3RhcnQsIGVuZCkge1xuJiM0MztcdHRkcF9pdGVyX3N0YXJ0KFx1MDAyNml0ZXIsIHJvb3QsIFBHX0xFVkVMXzRLLCBzdGFydCxcbiYjNDM7XHRcdCAgICAgICBrdm1fZ2ZuX3Jvb3RfYml0cyhrdm0sIHJvb3QpKTtcbiYjNDM7XHR3aGlsZSAoaXRlci52YWxpZCBcdTAwMjZcdTAwMjYgaXRlci5nZm4gXHUwMDNjIGVuZCkge1xuIFx0XHRpZiAoY2FuX3lpZWxkIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgdGRwX21tdV9pdGVyX2NvbmRfcmVzY2hlZChrdm0sIFx1MDAyNml0ZXIsIGZsdXNoLCBmYWxzZSkpIHtcbiBcdFx0XHRmbHVzaCA9IGZhbHNlO1xuJiM0MztcdFx0XHR0ZHBfaXRlcl9uZXh0KFx1MDAyNml0ZXIpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4tXHRcdGlmICghaXNfc2hhZG93X3ByZXNlbnRfcHRlKGl0ZXIub2xkX3NwdGUpIHx8XG4tXHRcdCAgICAhaXNfbGFzdF9zcHRlKGl0ZXIub2xkX3NwdGUsIGl0ZXIubGV2ZWwpKVxuLVx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLm9sZF9zcHRlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpIHtcbiYjNDM7XHRcdFx0aWYgKGl0ZXIubGV2ZWwgPT0gUEdfTEVWRUxfNEspIHtcbiYjNDM7XHRcdFx0XHRzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDtcbiBcbi1cdFx0dGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgXHUwMDI2aXRlciwgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUpO1xuJiM0MztcdFx0XHRcdHNwID0gc3B0ZXBfdG9fc3AocmN1X2RlcmVmZXJlbmNlKGl0ZXIuc3B0ZXApKTtcbiYjNDM7XHRcdFx0XHR6YXBwZWRfbGVhZl9wdCA9IHNwLVx1MDAzZXB0ZXA7XG4mIzQzO1x0XHRcdH1cbiBcbi1cdFx0Lypcbi1cdFx0ICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2VzbiYjMzk7dCByZXF1aXJlIGEgVExCIGZsdXNoLFxuLVx0XHQgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuXG4tXHRcdCAqL1xuLVx0XHRpZiAoIXJvb3QtXHUwMDNlcm9sZS5pbnZhbGlkKVxuLVx0XHRcdGZsdXNoID0gdHJ1ZTtcbi1cdH1cbiYjNDM7XHRcdFx0dGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgXHUwMDI2aXRlcixcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFNIQURPV19OT05QUkVTRU5UX1ZBTFVFKTtcbiBcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBaYXBwaW5ncyBTUFRFcyBpbiBpbnZhbGlkIHJvb3RzIGRvZXNuJiMzOTt0IHJlcXVpcmUgYSBUTEIgZmx1c2gsXG4mIzQzO1x0XHRcdCAqIHNlZSBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoKSBmb3IgZGV0YWlscy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmICghcm9vdC1cdTAwM2Vyb2xlLmludmFsaWQpXG4mIzQzO1x0XHRcdFx0Zmx1c2ggPSB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHRkcF9pdGVyX25leHRfcG9zdF9vcmRlcihcdTAwMjZpdGVyLCBcdTAwMjZldmVudCk7XG4mIzQzO1x0XHRpZiAoZXZlbnQudmFsaWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgdGRwX21tdV96YXBfY29tcGxldGVkX2VtcHR5X2xlYWZfcHQoa3ZtLCBcdTAwMjZldmVudCwgc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ZW5kLCB6YXBwZWRfbGVhZl9wdCkpIHtcbiYjNDM7XHRcdFx0aWYgKCFyb290LVx1MDAzZXJvbGUuaW52YWxpZClcbiYjNDM7XHRcdFx0XHRmbHVzaCA9IHRydWU7XG4mIzQzO1x0XHRcdHJlbW92ZWRfc3AgPSB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcbiBcdC8qXG4tXHQgKiBCZWNhdXNlIHRoaXMgZmxvdyB6YXBzIF9vbmx5XyBsZWFmIFNQVEVzLCB0aGUgY2FsbGVyIGRvZXNuJiMzOTt0IG5lZWRcbi1cdCAqIHRvIHByb3ZpZGUgUkNVIHByb3RlY3Rpb24gYXMgbm8gJiMzOTtzdHJ1Y3Qga3ZtX21tdV9wYWdlJiMzOTsgd2lsbCBiZSBmcmVlZC5cbiYjNDM7XHQgKiBJZiBhbnkgc2hhZG93IHBhZ2VzIHdlcmUgcmVtb3ZlZCwgc2VydmljZSBwZW5kaW5nIFRMQiBmbHVzaGVzIGJlZm9yZVxuJiM0MztcdCAqIGRyb3BwaW5nIFJDVSBwcm90ZWN0aW9uLCBhcyByZXF1aXJlZCBieSB0aGUgVERQIE1NVSBpdGVyYXRvci5cbiBcdCAqL1xuJiM0MztcdGlmIChyZW1vdmVkX3NwIFx1MDAyNlx1MDAyNiBmbHVzaCkge1xuJiM0MztcdFx0a3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7XG4mIzQzO1x0XHRmbHVzaCA9IGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRyZXR1cm4gZmx1c2g7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtYODZfNjQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fdGRwX21tdV96YXBfbGVhZnMmIzM0OywKICAgICYjMzQ7dGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyJiMzNDssCiAgICAmIzM0O2t2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZSYjMzQ7LAogICAgJiMzNDtrdm1femFwX2dmbl9yYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHBvc3Qtb3JkZXIgdHJhdmVyc2FsIHN1cHBvcnQgdG8gdGhlIEtWTSB4ODYgVERQIE1NVSBpdGVyYXRvciBhbmQgdXBkYXRlcyB0ZHBfbW11X3phcF9sZWFmcygpIHRvIGF1dG9tYXRpY2FsbHkgemFwIGNvbXBsZXRlZCBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzIChhbmQgaGFuZGxlIHRoZSBjb3JyZXNwb25kaW5nIHJlbW90ZSBUTEIgZmx1c2ggd2hlbiBzaGFkb3cgcGFnZXMgYXJlIGZyZWVkKS4gVGhpcyBhbHRlcnMgY29yZSBNTVUgcGFnZS10YWJsZSB6YXBwaW5nIGJlaGF2aW9yIGluIEtWTSB4ODYgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2NjRiMTk3YzMzYjNkZDYzMjhhMDU4ZDI2NTcyNzJjM2ViNWU5NWVjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMTA6MjA6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMKaW5kZXggOWUxN2JmYTgwOTAxMS4uZDliZTQyOTg0MTBkMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYwpAQCAtMTMyLDcgJiM0MzsxMzIsOCBAQCBzdGF0aWMgYm9vbCB0cnlfc3RlcF9zaWRlKHN0cnVjdCB0ZHBfaXRlciAqaXRlcikKICAqIGNhbiBjb250aW51ZSBmcm9tIHRoZSBuZXh0IGVudHJ5IGluIHRoZSBwYXJlbnQgcGFnZSB0YWJsZS4gUmV0dXJucyB0cnVlIG9uIGEKICAqIHN1Y2Nlc3NmdWwgc3RlcCB1cCwgZmFsc2UgaWYgYWxyZWFkeSBpbiB0aGUgcm9vdCBwYWdlLgogICovCi1zdGF0aWMgYm9vbCB0cnlfc3RlcF91cChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpCiYjNDM7c3RhdGljIGJvb2wgdHJ5X3N0ZXBfdXAoc3RydWN0IHRkcF9pdGVyICppdGVyLAomIzQzOwkJCXN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQpCiB7CiAJaWYgKGl0ZXItJmd0O2xldmVsID09IGl0ZXItJmd0O3Jvb3RfbGV2ZWwpCiAJCXJldHVybiBmYWxzZTsKQEAgLTE0MSw2ICYjNDM7MTQyLDE0IEBAIHN0YXRpYyBib29sIHRyeV9zdGVwX3VwKHN0cnVjdCB0ZHBfaXRlciAqaXRlcikKIAlpdGVyLSZndDtnZm4gPSBnZm5fcm91bmRfZm9yX2xldmVsKGl0ZXItJmd0O2dmbiwgaXRlci0mZ3Q7bGV2ZWwpOwogCXRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoaXRlcik7CiAKJiM0MzsJaWYgKGV2ZW50ICZhbXA7JmFtcDsgIWV2ZW50LSZndDt2YWxpZCkgewomIzQzOwkJZXZlbnQtJmd0O3NwdGVwID0gaXRlci0mZ3Q7c3B0ZXA7CiYjNDM7CQlldmVudC0mZ3Q7b2xkX3NwdGUgPSBpdGVyLSZndDtvbGRfc3B0ZTsKJiM0MzsJCWV2ZW50LSZndDtnZm4gPSBpdGVyLSZndDtnZm47CiYjNDM7CQlldmVudC0mZ3Q7bGV2ZWwgPSBpdGVyLSZndDtsZXZlbDsKJiM0MzsJCWV2ZW50LSZndDt2YWxpZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTYwLDggJiM0MzsxNjksMTIgQEAgc3RhdGljIGJvb2wgdHJ5X3N0ZXBfdXAoc3RydWN0IHRkcF9pdGVyICppdGVyKQogICogICAgU1BURSB3aWxsIGhhdmUgYWxyZWFkeSBiZWVuIHZpc2l0ZWQsIGFuZCBzbyB0aGUgaXRlcmF0b3IgbXVzdCBhbHNvIHN0ZXAKICAqICAgIHRvIHRoZSBzaWRlIGFnYWluLgogICovCi12b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKQomIzQzO3N0YXRpYyB2b2lkIF9fdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsCiYjNDM7CQkJICAgIHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQpCiB7CiYjNDM7CWlmIChldmVudCkKJiM0MzsJCWV2ZW50LSZndDt2YWxpZCA9IGZhbHNlOwomIzQzOwogCWlmIChpdGVyLSZndDt5aWVsZGVkKSB7CiAJCXRkcF9pdGVyX3Jlc3RhcnQoaXRlcik7CiAJCXJldHVybjsKQEAgLTE3Myw3ICYjNDM7MTg2LDE3IEBAIHZvaWQgdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpCiAJZG8gewogCQlpZiAodHJ5X3N0ZXBfc2lkZShpdGVyKSkKIAkJCXJldHVybjsKLQl9IHdoaWxlICh0cnlfc3RlcF91cChpdGVyKSk7CiYjNDM7CX0gd2hpbGUgKHRyeV9zdGVwX3VwKGl0ZXIsIGV2ZW50KSk7CiAJaXRlci0mZ3Q7dmFsaWQgPSBmYWxzZTsKIH0KIAomIzQzO3ZvaWQgdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpCiYjNDM7ewomIzQzOwlfX3RkcF9pdGVyX25leHQoaXRlciwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyKHN0cnVjdCB0ZHBfaXRlciAqaXRlciwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgKmV2ZW50KQomIzQzO3sKJiM0MzsJX190ZHBfaXRlcl9uZXh0KGl0ZXIsIGV2ZW50KTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmggYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgKaW5kZXggZjg5OGQ4ZDBkOTNjMi4uYjdlMjYwNWZiZjllOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaApAQCAtMTIzLDYgJiM0MzsxMjMsMTQgQEAgc3RydWN0IHRkcF9pdGVyIHsKIAlib29sIHlpZWxkZWQ7CiB9OwogCiYjNDM7c3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50IHsKJiM0MzsJdGRwX3B0ZXBfdCBzcHRlcDsKJiM0MzsJdTY0IG9sZF9zcHRlOwomIzQzOwlnZm5fdCBnZm47CiYjNDM7CWludCBsZXZlbDsKJiM0MzsJYm9vbCB2YWxpZDsKJiM0Mzt9OwomIzQzOwogLyoKICAqIEl0ZXJhdGVzIG92ZXIgZXZlcnkgU1BURSBtYXBwaW5nIHRoZSBHRk4gcmFuZ2UgW3N0YXJ0LCBlbmQpIGluIGEKICAqIHByZW9yZGVyIHRyYXZlcnNhbC4KQEAgLTE0NSw2ICYjNDM7MTUzLDggQEAgdGRwX3B0ZXBfdCBzcHRlX3RvX2NoaWxkX3B0KHU2NCBwdGUsIGludCBsZXZlbCk7CiB2b2lkIHRkcF9pdGVyX3N0YXJ0KHN0cnVjdCB0ZHBfaXRlciAqaXRlciwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCwKIAkJICAgIGludCBtaW5fbGV2ZWwsIGdmbl90IG5leHRfbGFzdF9sZXZlbF9nZm4sIGdmbl90IGdmbl9iaXRzKTsKIHZvaWQgdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpOwomIzQzO3ZvaWQgdGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyKHN0cnVjdCB0ZHBfaXRlciAqaXRlciwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgKmV2ZW50KTsKIHZvaWQgdGRwX2l0ZXJfcmVzdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpOwogCiAjZW5kaWYgLyogX19LVk1fWDg2X01NVV9URFBfSVRFUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jCmluZGV4IDQ0ZGFkMTA2ZmFkMTkuLjgyNDQ2YzQ3MzdmNzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jCkBAIC05MjMsNiAmIzQzOzkyMywzOCBAQCBib29sIGt2bV90ZHBfbW11X3phcF9wb3NzaWJsZV9ueF9odWdlX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLAogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgdGRwX21tdV96YXBfY29tcGxldGVkX2VtcHR5X2xlYWZfcHQoc3RydWN0IGt2bSAqa3ZtLAomIzQzOwkJCQkJCXN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQsCiYjNDM7CQkJCQkJZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwKJiM0MzsJCQkJCQl0ZHBfcHRlcF90IHphcHBlZF9sZWFmX3B0KQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9tbXVfcGFnZSAqY2hpbGRfc3A7CiYjNDM7CiYjNDM7CWlmIChldmVudC0mZ3Q7bGV2ZWwgIT0gUEdfTEVWRUxfMk0gfHwKJiM0MzsJICAgICFpc19zaGFkb3dfcHJlc2VudF9wdGUoZXZlbnQtJmd0O29sZF9zcHRlKSB8fAomIzQzOwkgICAgaXNfbGFzdF9zcHRlKGV2ZW50LSZndDtvbGRfc3B0ZSwgZXZlbnQtJmd0O2xldmVsKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKGV2ZW50LSZndDtnZm4gJmx0OyBzdGFydCB8fAomIzQzOwkgICAgZXZlbnQtJmd0O2dmbiAmIzQzOyBLVk1fUEFHRVNfUEVSX0hQQUdFKGV2ZW50LSZndDtsZXZlbCkgJmd0OyBlbmQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIExlYXZlIHByb2R1Y3RpdmUgbGVhZiB0YWJsZXMgaW4gcGxhY2UgdG8gYXZvaWQgcmVmYXVsdCBjaHVybi4gKi8KJiM0MzsJaWYgKHphcHBlZF9sZWFmX3B0ID09IGV2ZW50LSZndDtzcHRlcCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJY2hpbGRfc3AgPSBzcHRlX3RvX2NoaWxkX3NwKGV2ZW50LSZndDtvbGRfc3B0ZSk7CiYjNDM7CWlmIChpc19taXJyb3Jfc3AoY2hpbGRfc3ApKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAoY2hpbGRfc3AtJmd0O3JvbGUubGV2ZWwgIT0gUEdfTEVWRUxfNEspCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXRkcF9tbXVfc2V0X3NwdGUoa3ZtLCBldmVudC0mZ3Q7c3B0ZXAsIGV2ZW50LSZndDtvbGRfc3B0ZSwKJiM0MzsJCQkgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUsIGV2ZW50LSZndDtnZm4sIGV2ZW50LSZndDtsZXZlbCk7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIC8qCiAgKiBJZiBjYW5feWllbGQgaXMgdHJ1ZSwgd2lsbCByZWxlYXNlIHRoZSBNTVUgbG9jayBhbmQgcmVzY2hlZHVsZSBpZiB0aGUKICAqIHNjaGVkdWxlciBuZWVkcyB0aGUgQ1BVIG9yIHRoZXJlIGlzIGNvbnRlbnRpb24gb24gdGhlIE1NVSBsb2NrLiBJZiB0aGlzCkBAIC05MzMsNyAmIzQzOzk2NSwxMCBAQCBib29sIGt2bV90ZHBfbW11X3phcF9wb3NzaWJsZV9ueF9odWdlX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLAogc3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LAogCQkJICAgICAgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgYm9vbCBjYW5feWllbGQsIGJvb2wgZmx1c2gpCiB7CiYjNDM7CXN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCBldmVudCA9IHt9OwogCXN0cnVjdCB0ZHBfaXRlciBpdGVyOwomIzQzOwl0ZHBfcHRlcF90IHphcHBlZF9sZWFmX3B0ID0gTlVMTDsKJiM0MzsJYm9vbCByZW1vdmVkX3NwID0gZmFsc2U7CiAKIAllbmQgPSBtaW4oZW5kLCB0ZHBfbW11X21heF9nZm5fZXhjbHVzaXZlKCkpOwogCkBAIC05NDEsMzMgJiM0Mzs5NzYsNTYgQEAgc3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LAogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0JZm9yX2VhY2hfdGRwX3B0ZV9taW5fbGV2ZWwoaXRlciwga3ZtLCByb290LCBQR19MRVZFTF80Sywgc3RhcnQsIGVuZCkgewomIzQzOwl0ZHBfaXRlcl9zdGFydCgmYW1wO2l0ZXIsIHJvb3QsIFBHX0xFVkVMXzRLLCBzdGFydCwKJiM0MzsJCSAgICAgICBrdm1fZ2ZuX3Jvb3RfYml0cyhrdm0sIHJvb3QpKTsKJiM0MzsJd2hpbGUgKGl0ZXIudmFsaWQgJmFtcDsmYW1wOyBpdGVyLmdmbiAmbHQ7IGVuZCkgewogCQlpZiAoY2FuX3lpZWxkICZhbXA7JmFtcDsKIAkJICAgIHRkcF9tbXVfaXRlcl9jb25kX3Jlc2NoZWQoa3ZtLCAmYW1wO2l0ZXIsIGZsdXNoLCBmYWxzZSkpIHsKIAkJCWZsdXNoID0gZmFsc2U7CiYjNDM7CQkJdGRwX2l0ZXJfbmV4dCgmYW1wO2l0ZXIpOwogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoIWlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLm9sZF9zcHRlKSB8fAotCQkgICAgIWlzX2xhc3Rfc3B0ZShpdGVyLm9sZF9zcHRlLCBpdGVyLmxldmVsKSkKLQkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLm9sZF9zcHRlKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgaXNfbGFzdF9zcHRlKGl0ZXIub2xkX3NwdGUsIGl0ZXIubGV2ZWwpKSB7CiYjNDM7CQkJaWYgKGl0ZXIubGV2ZWwgPT0gUEdfTEVWRUxfNEspIHsKJiM0MzsJCQkJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7CiAKLQkJdGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgJmFtcDtpdGVyLCBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSk7CiYjNDM7CQkJCXNwID0gc3B0ZXBfdG9fc3AocmN1X2RlcmVmZXJlbmNlKGl0ZXIuc3B0ZXApKTsKJiM0MzsJCQkJemFwcGVkX2xlYWZfcHQgPSBzcC0mZ3Q7cHRlcDsKJiM0MzsJCQl9CiAKLQkJLyoKLQkJICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2VzbiYjMzk7dCByZXF1aXJlIGEgVExCIGZsdXNoLAotCQkgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuCi0JCSAqLwotCQlpZiAoIXJvb3QtJmd0O3JvbGUuaW52YWxpZCkKLQkJCWZsdXNoID0gdHJ1ZTsKLQl9CiYjNDM7CQkJdGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgJmFtcDtpdGVyLAomIzQzOwkJCQkJICAgICAgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUpOwogCi0JcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBaYXBwaW5ncyBTUFRFcyBpbiBpbnZhbGlkIHJvb3RzIGRvZXNuJiMzOTt0IHJlcXVpcmUgYSBUTEIgZmx1c2gsCiYjNDM7CQkJICogc2VlIGt2bV90ZHBfbW11X3phcF9pbnZhbGlkYXRlZF9yb290cygpIGZvciBkZXRhaWxzLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmICghcm9vdC0mZ3Q7cm9sZS5pbnZhbGlkKQomIzQzOwkJCQlmbHVzaCA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQl0ZHBfaXRlcl9uZXh0X3Bvc3Rfb3JkZXIoJmFtcDtpdGVyLCAmYW1wO2V2ZW50KTsKJiM0MzsJCWlmIChldmVudC52YWxpZCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdGRwX21tdV96YXBfY29tcGxldGVkX2VtcHR5X2xlYWZfcHQoa3ZtLCAmYW1wO2V2ZW50LCBzdGFydCwKJiM0MzsJCQkJCQkJZW5kLCB6YXBwZWRfbGVhZl9wdCkpIHsKJiM0MzsJCQlpZiAoIXJvb3QtJmd0O3JvbGUuaW52YWxpZCkKJiM0MzsJCQkJZmx1c2ggPSB0cnVlOwomIzQzOwkJCXJlbW92ZWRfc3AgPSB0cnVlOwomIzQzOwkJfQomIzQzOwl9CiAKIAkvKgotCSAqIEJlY2F1c2UgdGhpcyBmbG93IHphcHMgX29ubHlfIGxlYWYgU1BURXMsIHRoZSBjYWxsZXIgZG9lc24mIzM5O3QgbmVlZAotCSAqIHRvIHByb3ZpZGUgUkNVIHByb3RlY3Rpb24gYXMgbm8gJiMzOTtzdHJ1Y3Qga3ZtX21tdV9wYWdlJiMzOTsgd2lsbCBiZSBmcmVlZC4KJiM0MzsJICogSWYgYW55IHNoYWRvdyBwYWdlcyB3ZXJlIHJlbW92ZWQsIHNlcnZpY2UgcGVuZGluZyBUTEIgZmx1c2hlcyBiZWZvcmUKJiM0MzsJICogZHJvcHBpbmcgUkNVIHByb3RlY3Rpb24sIGFzIHJlcXVpcmVkIGJ5IHRoZSBURFAgTU1VIGl0ZXJhdG9yLgogCSAqLwomIzQzOwlpZiAocmVtb3ZlZF9zcCAmYW1wOyZhbXA7IGZsdXNoKSB7CiYjNDM7CQlrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTsKJiM0MzsJCWZsdXNoID0gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIGZsdXNoOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqRGVjb25zdHJ1Y3RpbmcgVGhpcyBLVk0gVERQIE1NVSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBtb2RpZmljYXRpb25zIHRvIHRoZSBLVk0geDg2IFREUCBNTVUsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBUaGUgZmFjdCB0aGF0IHRoaXMgdG91Y2hlcyBgdGRwX2l0ZXIuY2AsIGB0ZHBfaXRlci5oYCwgYW5kIGB0ZHBfbW11LmNgIHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gVERQIChUd28tRGltZW5zaW9uYWwgUGFnaW5nKSBpdGVyYXRpb24gYW5kIE1NVSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBuZXN0ZWQgcGFnaW5nIGNvbnRleHQuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGdldHRpbmcgc29tZSBuZXcgZnVuY3Rpb25zIGludHJvZHVjZWQ6IGB0ZHBfaXRlcl9uZXh0X3Bvc3Rfb3JkZXJgIGFuZCBgdGRwX21tdV96YXBfY29tcGxldGVkX2VtcHR5X2xlYWZfcHRgLCBhbmQgd2Ugc2VlIHVwZGF0ZXMgdG8gYHRkcF9tbXVfemFwX2xlYWZzYC4gVGhlIG5hbWVzIHRoZW1zZWx2ZXMgZ2l2ZSBzb21lIGhpbnRzIC0gcG9zdC1vcmRlciBpdGVyYXRpb24gYW5kIGxlYWYgcGFnZSB0YWJsZSB6YXBwaW5nLgoKSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBhZGRpdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgdHlwaWNhbCB3b3JrZmxvdyBoZXJlOiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIHplcm8gaW4gb24gdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiBgdGRwX21tdS5jYCBhbmQgYWxzbyBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIHRvIGdldCB0aGUgcHJlY2lzZSBjb250ZXh0LiBJIHdhbnQgdG8gc2VlICpob3cqIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW50ZWdyYXRlZCwgd2hhdCB0aGV5JiMzOTtyZSBjYWxsZWQgZnJvbSwgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIHRoZXkgb3BlcmF0ZSBvbiB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsuIFdpdGggdGhhdCBpbmZvcm1hdGlvbiBJJiMzOTtsbCBidWlsZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGRwX21tdV96YXBfbGVhZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz03MTEzPXZvaWQga3ZtX3phcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm5fc3RhcnQsIGdmbl90IGdmbl9lbmQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTI4LVx0aWYgKHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzEyOTpcdFx0Zmx1c2ggPSBrdm1fdGRwX21tdV96YXBfbGVhZnMoa3ZtLCBnZm5fc3RhcnQsIGdmbl9lbmQsIGZsdXNoKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzEzMC1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz05MjY9c3RhdGljIGJvb2wgdGRwX21tdV96YXBfY29tcGxldGVkX2VtcHR5X2xlYWZfcHQoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTk2NC0gKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjk2NTpzdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy05NjYtXHRcdFx0ICAgICAgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgYm9vbCBjYW5feWllbGQsIGJvb2wgZmx1c2gpXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzNi0gKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjEwMzc6Ym9vbCBrdm1fdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGZsdXNoKVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzOC17XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTA0Mi1cdGZvcl9lYWNoX3ZhbGlkX3RkcF9tbXVfcm9vdF95aWVsZF9zYWZlKGt2bSwgcm9vdCwgLTEpXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzoxMDQzOlx0XHRmbHVzaCA9IHRkcF9tbXVfemFwX2xlYWZzKGt2bSwgcm9vdCwgc3RhcnQsIGVuZCwgdHJ1ZSwgZmx1c2gpO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTA0NC1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz0xMzY1PWJvb2wga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEzNzMtXHRfX2Zvcl9lYWNoX3RkcF9tbXVfcm9vdF95aWVsZF9zYWZlKGt2bSwgcm9vdCwgcmFuZ2UtXHUwMDNlc2xvdC1cdTAwM2Vhc19pZCwgdHlwZXMpXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzoxMzc0Olx0XHRmbHVzaCA9IHRkcF9tbXVfemFwX2xlYWZzKGt2bSwgcm9vdCwgcmFuZ2UtXHUwMDNlc3RhcnQsIHJhbmdlLVx1MDAzZWVuZCxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEzNzUtXHRcdFx0XHRcdCAgcmFuZ2UtXHUwMDNlbWF5X2Jsb2NrLCBmbHVzaCk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg9NTc9c3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21tdV9wYWdlICp0ZHBfbW11X2dldF9yb290KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC02NS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oOjY2OmJvb2wga3ZtX3RkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgYm9vbCBmbHVzaCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC02Ny1ib29sIGt2bV90ZHBfbW11X3phcF9wb3NzaWJsZV9ueF9odWdlX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyODcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktjb25maWcgRGl2ZSBmb3IgS1ZNICZhbXA7IFREUCBNTVUgb24geDg2KioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIEtjb25maWcgZmlsZXMgYWdhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IHN0YXR1cyBvZiBLVk0gYW5kIHRoZSBURFAgTU1VIHN1cHBvcnQgb24geDg2LCBwYXJ0aWN1bGFybHkgd2hlcmUgdGhpbmdzIG1pZ2h0IGJlIGVuYWJsZWQsIGRpc2FibGVkLCBvciBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyBmb3IgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc3ltYm9scyDigJMgbGlrZWx5IHNvbWV0aGluZyBsaWtlIGBDT05GSUdfS1ZNYCwgYENPTkZJR19YODZfVERYX01NVWAsIG9yIHZhcmlhdGlvbnMgdGhlcmVvZiDigJMgdG8gZ2V0IGEgZ3Jhc3Agb2YgdGhlIHRvcC1sZXZlbCBvcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgdG8gc2VlIHdoaWNoIG90aGVyIGZlYXR1cmVzIG9yIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIHRyaWdnZXIgdGhlc2Ugc2V0dGluZ3MuIEFyZSB3ZSByZWx5aW5nIG9uIGFueSBzcGVjaWZpYyBDUFUgZmVhdHVyZXMgb3IgaHlwZXJ2aXNvciBmbGFncz8gSSBhbHNvIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlc2UgY29uZmlndXJhdGlvbnMsIGFuZCB3aGV0aGVyIHdlJiMzOTtyZSB1c2luZyBhbnkgdHJpc3RhdGUgb3B0aW9ucyB0aGF0IGNvdWxkIGNhdXNlIGlzc3VlcyBkZXBlbmRpbmcgb24gdGhlIGJ1aWxkLiBHb3R0YSBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IGNvbmZsaWN0cyBvciByZWdyZXNzaW9ucyBpbiB0aGUgY29uZmlndXJhdGlvbiBzcGFjZS4gTmVlZCB0byBrZWVwIGluIG1pbmQsIHRvbywgdGhlIHZhcmlvdXMgeDg2IENQVSBtb2RlbHMsIGFuZCB3aGV0aGVyIGNvbmZpZ3VyYXRpb24gZGlmZmVycyBiZXR3ZWVuIHRoZW0uIEdvdHRhIGJlIHByZWNpc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWctMi0jXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzozOiMgS1ZNIGNvbmZpZ3VyYXRpb25cbmFyY2gveDg2L2t2bS9LY29uZmlnLTQtI1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTpcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOlx0c2VsZWN0IEtWTV9DT01NT05cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzOlx0c2VsZWN0IEtWTV9FTElERV9UTEJfRkxVU0hfSUZfWU9VTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnOjI0Olx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnOjI1Olx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcbmFyY2gveDg2L2t2bS9LY29uZmlnOjI2Olx0c2VsZWN0IEhBVkVfS1ZNX1BGTkNBQ0hFXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyNzpcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX1RTT1xuYXJjaC94ODYva3ZtL0tjb25maWc6Mjg6XHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyOTpcdHNlbGVjdCBIQVZFX0tWTV9JUlFfQllQQVNTXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzozMDpcdHNlbGVjdCBIQVZFX0tWTV9JUlFfUk9VVElOR1xuYXJjaC94ODYva3ZtL0tjb25maWc6MzE6XHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0zMi1cdHNlbGVjdCBWSE9TVF9UQVNLXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzozMzpcdHNlbGVjdCBLVk1fQVNZTkNfUEZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTM0LVx0c2VsZWN0IFVTRVJfUkVUVVJOX05PVElGSUVSXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzozNTpcdHNlbGVjdCBLVk1fTU1JT1xuYXJjaC94ODYva3ZtL0tjb25maWctMzYtXHRzZWxlY3QgU0NIRURfSU5GT1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTM5LVx0c2VsZWN0IFBFUkZfR1VFU1RfTUVESUFURURfUE1VXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo0MDpcdHNlbGVjdCBIQVZFX0tWTV9NU0lcbmFyY2gveDg2L2t2bS9LY29uZmlnOjQxOlx0c2VsZWN0IEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcbmFyY2gveDg2L2t2bS9LY29uZmlnOjQyOlx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcbmFyY2gveDg2L2t2bS9LY29uZmlnLTQzLVx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo0NDpcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcbmFyY2gveDg2L2t2bS9LY29uZmlnOjQ1Olx0c2VsZWN0IEtWTV9WRklPXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo0NjpcdHNlbGVjdCBIQVZFX0tWTV9QTV9OT1RJRklFUiBpZiBQTVxuYXJjaC94ODYva3ZtL0tjb25maWc6NDc6XHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnOjQ4Olx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbmFyY2gveDg2L2t2bS9LY29uZmlnOjQ5Olx0c2VsZWN0IEtWTV9XRVJST1IgaWYgV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1MDpcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjUzOlx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01NC1cdGRlcGVuZHMgb24gWDg2X0xPQ0FMX0FQSUNcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo3MDpcdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo3MTpcdCMgRGlzYWxsb3cgS1ZNJiMzOTtzIC1XZXJyb3IgaWYgS0FTQU4gaXMgZW5hYmxlZCwgZS5nLiB0byBndWFyZCBhZ2FpbnN0XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo3MjpcdCMgcmFuZG9taXplZCBjb25maWdzIGZyb20gc2VsZWN0aW5nIEtWTV9XRVJST1I9eSwgd2hpY2ggZG9lc24mIzM5O3QgcGxheVxuYXJjaC94ODYva3ZtL0tjb25maWctNzMtXHQjIG5pY2Ugd2l0aCBLQVNBTi4gIEtBU0FOIGJ1aWxkcyBnZW5lcmF0ZXMgd2FybmluZ3MgZm9yIHRoZSBkZWZhdWx0XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo3NDpcdCMgRlJBTUVfV0FSTiwgaS5lLiBLVk1fV0VSUk9SPXkgd2l0aCBLQVNBTj15IHJlcXVpcmVzIHNwZWNpYWwgdHVuaW5nLlxuYXJjaC94ODYva3ZtL0tjb25maWc6NzU6XHQjIEJ1aWxkaW5nIEtWTSB3aXRoIC1XZXJyb3IgYW5kIEtBU0FOIGlzIHN0aWxsIGRvYWJsZSB2aWEgZW5hYmxpbmdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTc2LVx0IyB0aGUga2VybmVsLXdpZGUgV0VSUk9SPXkuXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo3NzpcdGRlcGVuZHMgb24gS1ZNX1g4NiBcdTAwMjZcdTAwMjYgKChFWFBFUlQgXHUwMDI2XHUwMDI2ICFLQVNBTikgfHwgV0VSUk9SKVxuYXJjaC94ODYva3ZtL0tjb25maWctNzgtXHRoZWxwXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo3OTpcdCAgQWRkIC1XZXJyb3IgdG8gdGhlIGJ1aWxkIGZsYWdzIGZvciBLVk0uXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04MC1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4NDpcdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NS1cdGRlcGVuZHMgb24gRVhQRVJUXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4NjpcdGRlcGVuZHMgb24gS1ZNX1g4NiBcdTAwMjZcdTAwMjYgWDg2XzY0XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4NzpcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuYXJjaC94ODYva3ZtL0tjb25maWctODgtXHRoZWxwXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4OTpcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zLiAgQ3VycmVudGx5LCBzb2Z0d2FyZS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTkwLVx0ICBwcm90ZWN0ZWQgVk1zIGFyZSBwdXJlbHkgYSBkZXZlbG9wbWVudCBhbmQgdGVzdGluZyB2ZWhpY2xlIGZvclxuYXJjaC94ODYva3ZtL0tjb25maWc6OTE6XHQgIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQuICBBdHRlbXB0aW5nIHRvIHJ1biBhIFwmIzM0O3JlYWxcJiMzNDsgVk0gd29ya2xvYWQgYXMgYVxuYXJjaC94ODYva3ZtL0tjb25maWctOTItXHQgIHNvZnR3YXJlLXByb3RlY3RlZCBWTSB3aWxsIGZhaWwgbWlzZXJhYmx5LlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTc6XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5ODpcdGRlcGVuZHMgb24gS1ZNIFx1MDAyNlx1MDAyNiBJQTMyX0ZFQVRfQ1RMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05OS1cdHNlbGVjdCBYODZfRlJFRCBpZiBYODZfNjRcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwMC1cdGhlbHBcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwMTpcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCBJbnRlbCYjMzk7cyBWVFxuYXJjaC94ODYva3ZtL0tjb25maWctMTAyLVx0ICBleHRlbnNpb25zLCBhLmsuYS4gVmlydHVhbCBNYWNoaW5lIEV4dGVuc2lvbnMgKFZNWCkuXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwOTogICAgICAgIGRlcGVuZHMgb24gS1ZNX0lOVEVMIFx1MDAyNlx1MDAyNiBFWFBFUlRcbmFyY2gveDg2L2t2bS9LY29uZmlnLTExMC0gICAgICAgIGhlbHBcbmFyY2gveDg2L2t2bS9LY29uZmlnOjExMTogICAgICAgICAgQ2hlY2tzIHRoYXQgS1ZNJiMzOTtzIHBhZ2UgdGFibGUgbWFuYWdlbWVudCBjb2RlIHdpbGwgbm90IGluY29ycmVjdGx5XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMTItICAgICAgICAgIGxldCBndWVzdHMgcmVjZWl2ZSBhIHZpcnR1YWxpemF0aW9uIGV4Y2VwdGlvbi4gIFZpcnR1YWxpemF0aW9uXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTE2LSAgICAgICAgICBOb3RlOiBzb21lIENQVXMgYXBwZWFyIHRvIGdlbmVyYXRlIHNwdXJpb3VzIEVQVCBWaW9sYXRpb25zICNWRXNcbmFyY2gveDg2L2t2bS9LY29uZmlnOjExNzogICAgICAgICAgdGhhdCB0cmlnZ2VyIEtWTSYjMzk7cyBXQVJOLCBpbiBwYXJ0aWN1bGFyIHdpdGggZXB0YWQ9MCBhbmQvb3IgbmVzdGVkXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMTgtICAgICAgICAgIHZpcnR1YWxpemF0aW9uLlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEyMjpjb25maWcgWDg2X1NHWF9LVk1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyMy1cdGJvb2wgXCYjMzQ7U29mdHdhcmUgR3VhcmQgZVh0ZW5zaW9ucyAoU0dYKSBWaXJ0dWFsaXphdGlvblwmIzM0O1xuYXJjaC94ODYva3ZtL0tjb25maWc6MTI0Olx0ZGVwZW5kcyBvbiBYODZfU0dYIFx1MDAyNlx1MDAyNiBLVk1fSU5URUxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyNS1cdGhlbHBcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEyNzpcdCAgRW5hYmxlcyBLVk0gZ3Vlc3RzIHRvIGNyZWF0ZSBTR1ggZW5jbGF2ZXMuXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMjgtXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzctXHRkZXBlbmRzIG9uIElOVEVMX1REWF9IT1NUXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzg6XHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzOTpcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0MC1cdGhlbHBcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0NzpcdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ4Olx0ZGVwZW5kcyBvbiBLVk0gXHUwMDI2XHUwMDI2IChDUFVfU1VQX0FNRCB8fCBDUFVfU1VQX0hZR09OKVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ5LVx0aGVscFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTUwOlx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gQU1EIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCB0aGUgQU1ELVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1MS1cdCAgKFNWTSkgZXh0ZW5zaW9ucy5cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1OC1cdGRlZmF1bHQgeVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU5Olx0ZGVwZW5kcyBvbiBLVk1fQU1EIFx1MDAyNlx1MDAyNiBYODZfNjRcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE2MDpcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9TUF9QU1AgXHUwMDI2XHUwMDI2ICEoS1ZNX0FNRD15IFx1MDAyNlx1MDAyNiBDUllQVE9fREVWX0NDUF9ERD1tKVxuYXJjaC94ODYva3ZtL0tjb25maWctMTYxLVx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjI6XHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE2MzpcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fQ09OVkVSVFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTY0Olx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9SRUNMQUlNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjU6XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE2NjpcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE2Ny1cdGhlbHBcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzM6Y29uZmlnIEtWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3NC1cdGJvb2wgXCYjMzQ7SS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cJiMzNDtcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3NS1cdGRlZmF1bHQgeVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTc2Olx0ZGVwZW5kcyBvbiBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzctXHRoZWxwXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzg6XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSB0byBlbXVsYXRlIGFuIEkvTyBBUElDLCBQSUMsIGFuZCBQSVQsIGkuZS5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3OS1cdCAgZm9yIGZ1bGwgaW4ta2VybmVsIEFQSUMgZW11bGF0aW9uLlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuYXJjaC94ODYva3ZtL0tjb25maWctMTg1LVx0ZGVmYXVsdCB5XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODY6XHRkZXBlbmRzIG9uIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Ny1cdGhlbHBcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4ODpcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIHRvIGVtdWxhdGUgU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKVxuYXJjaC94ODYva3ZtL0tjb25maWctMTg5LVx0ICBpbiB2aXJ0dWFsIG1hY2hpbmVzLiAgVGhpcyBjYW4gYmUgdXNlZCBieSB0aGUgdmlydHVhbCBtYWNoaW5lXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTUtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuYXJjaC94ODYva3ZtL0tjb25maWc6MTk2Olx0ZGVwZW5kcyBvbiBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTctXHRkZWZhdWx0IHlcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5OC1cdGhlbHBcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5OTpcdCAgUHJvdmlkZXMgS1ZNIHN1cHBvcnQgZm9yIGVtdWxhdGluZyBNaWNyb3NvZnQgSHlwZXItVi4gIFRoaXMgYWxsb3dzIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctMjAwLVx0ICB0byBleHBvc2UgYSBzdWJzZXQgb2YgdGhlIHBhcmF2aXJ0dWFsaXplZCBpbnRlcmZhY2VzIGRlZmluZWQgaW4gdGhlXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjAzLVx0ICBUaGVzZSBpbnRlcmZhY2VzIGFyZSByZXF1aXJlZCBmb3IgdGhlIGNvcnJlY3QgYW5kIHBlcmZvcm1hbnQgZnVuY3Rpb25pbmdcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNDpcdCAgb2YgV2luZG93cyBhbmQgSHlwZXItViBndWVzdHMgb24gS1ZNLlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA1LVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwODpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuYXJjaC94ODYva3ZtL0tjb25maWc6MjEwOlx0ZGVwZW5kcyBvbiBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTEtXHRoZWxwXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTI6XHQgIFByb3ZpZGVzIEtWTSBzdXBwb3J0IGZvciB0aGUgaG9zdGluZyBYZW4gSFZNIGd1ZXN0cyBhbmRcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxMy1cdCAgcGFzc2luZyBYZW4gaHlwZXJjYWxscyB0byB1c2Vyc3BhY2UuXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE3OmNvbmZpZyBLVk1fUFJPVkVfTU1VXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTg6XHRib29sIFwmIzM0O1Byb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcJiMzNDtcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOS1cdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjA6XHRkZXBlbmRzIG9uIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyMS1cdGRlcGVuZHMgb24gRVhQRVJUXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjItXHRoZWxwXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjM6XHQgIEVuYWJsZXMgcnVudGltZSBhc3NlcnRpb25zIGluIEtWTSYjMzk7cyBNTVUgdGhhdCBhcmUgdG9vIGNvc3RseSB0byBlbmFibGVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyNC1cdCAgaW4gYW55dGhpbmcgcmVtb3RlbHkgcmVzZW1ibGluZyBhIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQsIGUuZy4gdGhpc1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMDpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzM6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzNDpcdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzU6XHRkZXBlbmRzIG9uIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzNi1cdHJhbmdlIDEwMjQgNDA5NlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzOS1cdGhlbHBcbmFyY2gveDg2L2t2bS9LY29uZmlnOjI0MDpcdCAgU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0LiBMYXJnZXIgdmFsdWVzIHdpbGwgaW5jcmVhc2VcbmFyY2gveDg2L2t2bS9LY29uZmlnOjI0MTpcdCAgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgZWFjaCBLVk0gZ3Vlc3QsIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgdkNQVXMgYXJlXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yNDItXHQgIGNyZWF0ZWQgZm9yIGEgZ2l2ZW4gVk0uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMDcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBLVk0gQ29tcGlsYXRpb24gUHJvY2VzczogYHRkcF9tbXUuY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB0ZHBfbW11LmNgIGlzIGJlaW5nIGNvbXBpbGVkIHdpdGhpbiB0aGUgS1ZNIGluZnJhc3RydWN0dXJlLiBJIGtub3cgdGhlIGdlbmVyYWwgS1ZNIGJ1aWxkIHByb2Nlc3MsIGJ1dCBhIHNwZWNpZmljIGZpbGUgbGlrZSB0aGlzIG9mdGVuIGhhcyBzb21lIG51YW5jZXMuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGFsbW9zdCBhbHdheXMgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIHJlbGV2YW50IGRpcmVjdG9yeS4gU2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSwgc3BlY2lmaWNhbGx5IHg4NiwgSSYjMzk7bSBnb2luZyBzdHJhaWdodCBmb3IgYGFyY2gveDg2L2t2bS9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGxvd2Rvd24gb24gdGhlIGJ1aWxkIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCBob3BlZnVsbHksIGFueSBzcGVjaWZpYyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYyB0aGF0IGFwcGxpZXMgdG8gYHRkcF9tbXUuY2AuIEtub3dpbmcgdGhpcyBsZXZlbCBvZiBkZXRhaWwgaXMga2V5IHRvIGZ1bGx5IHVuZGVyc3RhbmRpbmcgaG93IHRoZSBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwgYW5kIGhvdyBpdCB3aWxsIGJlaGF2ZSB3aGVuIGJ1aWx0IGZvciBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBzZWNyZXRzIHRoZSBNYWtlZmlsZSBob2xkcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHBfbW11JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMjkxIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU9OD1rdm0teVx0XHRcdCYjNDM7PSB4ODYubyBlbXVsYXRlLm8gaXJxLm8gbGFwaWMubyBjcHVpZC5vIG1zcnMubyBwbXUubyByZWdzLm8gXFxcbi0tXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMTAtXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MTE6a3ZtLSQoQ09ORklHX1g4Nl82NCkgJiM0Mzs9IG1tdS90ZHBfaXRlci5vIG1tdS90ZHBfbW11Lm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xMi1rdm0tJChDT05GSUdfS1ZNX0lPQVBJQykgJiM0Mzs9IGk4MjU5Lm8gaTgyNTQubyBpb2FwaWMub1xuLS1cbmFyY2gveDg2L2t2bS9tbXUuaD05PWV4dGVybiBib29sIF9fcmVhZF9tb3N0bHkgdGRwX2VuYWJsZWQ7XG5hcmNoL3g4Ni9rdm0vbW11LmgtMTAtI2lmZGVmIENPTkZJR19YODZfNjRcbmFyY2gveDg2L2t2bS9tbXUuaDoxMTpleHRlcm4gYm9vbCBfX3JlYWRfbW9zdGx5IHRkcF9tbXVfZW5hYmxlZDtcbmFyY2gveDg2L2t2bS9tbXUuaC0xMi0jZWxzZVxuYXJjaC94ODYva3ZtL21tdS5oOjEzOiNkZWZpbmUgdGRwX21tdV9lbmFibGVkIGZhbHNlXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTQtI2VuZGlmXG4tLVxuYXJjaC94ODYva3ZtL21tdS5oPTMzMT1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX3NoYWRvd19yb290X2FsbG9jYXRlZChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL21tdS5oLTM0MS1cbmFyY2gveDg2L2t2bS9tbXUuaDozNDI6aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbik7XG5hcmNoL3g4Ni9rdm0vbW11LmgtMzQzLVxuYXJjaC94ODYva3ZtL21tdS5oPTM0ND1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbXNsb3RzX2hhdmVfcm1hcHMoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL21tdS5oLTM0NS17XG5hcmNoL3g4Ni9rdm0vbW11Lmg6MzQ2Olx0cmV0dXJuICF0ZHBfbW11X2VuYWJsZWQgfHwga3ZtX3NoYWRvd19yb290X2FsbG9jYXRlZChrdm0pO1xuYXJjaC94ODYva3ZtL21tdS5oLTM0Ny19XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0yMi0jaW5jbHVkZSBcJiMzNDttbXVfaW50ZXJuYWwuaFwmIzM0O1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoyMzojaW5jbHVkZSBcJiMzNDt0ZHBfbW11LmhcJiMzNDtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMjQtI2luY2x1ZGUgXCYjMzQ7eDg2LmhcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTEwOD1ib29sIF9fcmVhZF9tb3N0bHkgdGRwX2VuYWJsZWQgPSBmYWxzZTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA5LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMTA6c3RhdGljIGJvb2wgX19yb19hZnRlcl9pbml0IHRkcF9tbXVfYWxsb3dlZDtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTExLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMTItI2lmZGVmIENPTkZJR19YODZfNjRcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTEzOmJvb2wgX19yZWFkX21vc3RseSB0ZHBfbW11X2VuYWJsZWQgPSB0cnVlO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxMTQ6bW9kdWxlX3BhcmFtX25hbWVkKHRkcF9tbXUsIHRkcF9tbXVfZW5hYmxlZCwgYm9vbCwgMDQ0NCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjExNTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwodGRwX21tdV9lbmFibGVkKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTE2LSNlbmRpZlxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTYyPXN0YXRpYyB1NjQgbW11X3NwdGVfZ2V0X2xvY2tsZXNzKHU2NCAqc3B0ZXApXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01NjYtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU2NzpzdGF0aWMgaW5saW5lIGJvb2wgaXNfdGRwX21tdV9hY3RpdmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01Njgte1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1Njk6XHRyZXR1cm4gdGRwX21tdV9lbmFibGVkIFx1MDAyNlx1MDAyNiB2Y3B1LVx1MDAzZWFyY2gubW11LVx1MDAzZXJvb3Rfcm9sZS5kaXJlY3Q7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU3MC19XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01NzI9c3RhdGljIHZvaWQgd2Fsa19zaGFkb3dfcGFnZV9sb2NrbGVzc19iZWdpbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU3My17XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU3NDpcdGlmIChpc190ZHBfbW11X2FjdGl2ZSh2Y3B1KSkge1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1NzU6XHRcdGt2bV90ZHBfbW11X3dhbGtfbG9ja2xlc3NfYmVnaW4oKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTc2LVx0fSBlbHNlIHtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTU5MT1zdGF0aWMgdm9pZCB3YWxrX3NoYWRvd19wYWdlX2xvY2tsZXNzX2VuZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5Mi17XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5MzpcdGlmIChpc190ZHBfbW11X2FjdGl2ZSh2Y3B1KSkge1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTQ6XHRcdGt2bV90ZHBfbW11X3dhbGtfbG9ja2xlc3NfZW5kKCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NS1cdH0gZWxzZSB7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xNDAxPXN0YXRpYyB2b2lkIGt2bV9tbXVfd3JpdGVfcHJvdGVjdF9wdF9tYXNrZWQoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTQwNi1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTQwNzpcdGlmICh0ZHBfbW11X2VuYWJsZWQpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE0MDg6XHRcdGt2bV90ZHBfbW11X2NsZWFyX2RpcnR5X3B0X21hc2tlZChrdm0sIHNsb3QsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE0MDktXHRcdFx0XHRzbG90LVx1MDAzZWJhc2VfZ2ZuICYjNDM7IGdmbl9vZmZzZXQsIG1hc2ssIHRydWUpO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTQyND1zdGF0aWMgdm9pZCBrdm1fbW11X2NsZWFyX2RpcnR5X3B0X21hc2tlZChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNDI5LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxNDMwOlx0aWYgKHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTQzMTpcdFx0a3ZtX3RkcF9tbXVfY2xlYXJfZGlydHlfcHRfbWFza2VkKGt2bSwgc2xvdCxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTQzMi1cdFx0XHRcdHNsb3QtXHUwMDNlYmFzZV9nZm4gJiM0MzsgZ2ZuX29mZnNldCwgbWFzaywgZmFsc2UpO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTQ5OT1ib29sIGt2bV9tbXVfc2xvdF9nZm5fd3JpdGVfcHJvdGVjdChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNTEzLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxNTE0Olx0aWYgKHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTUxNS1cdFx0d3JpdGVfcHJvdGVjdGVkIHw9XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE1MTY6XHRcdFx0a3ZtX3RkcF9tbXVfd3JpdGVfcHJvdGVjdF9nZm4oa3ZtLCBzbG90LCBnZm4sIG1pbl9sZXZlbCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE1MTctXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xNjcxPWJvb2wga3ZtX3VubWFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE2OTAtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE2OTE6XHRpZiAodGRwX21tdV9lbmFibGVkKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxNjkyOlx0XHRmbHVzaCA9IGt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZShrdm0sIHJhbmdlLCBmbHVzaCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE2OTMtXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xNzg0PXN0YXRpYyBib29sIGt2bV9tYXlfaGF2ZV9zaGFkb3dfbW11X3NwdGVzKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc4NS17XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE3ODY6XHRyZXR1cm4gIXRkcF9tbXVfZW5hYmxlZCB8fCBSRUFEX09OQ0Uoa3ZtLVx1MDAzZWFyY2guaW5kaXJlY3Rfc2hhZG93X3BhZ2VzKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc4Ny19XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xNzg5PWJvb2wga3ZtX2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNzkyLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxNzkzOlx0aWYgKHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTc5NDpcdFx0eW91bmcgPSBrdm1fdGRwX21tdV9hZ2VfZ2ZuX3JhbmdlKGt2bSwgcmFuZ2UpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNzk1LVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTgwMj1ib29sIGt2bV90ZXN0X2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xODA1LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxODA2Olx0aWYgKHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTgwNzpcdFx0eW91bmcgPSBrdm1fdGRwX21tdV90ZXN0X2FnZV9nZm4oa3ZtLCByYW5nZSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE4MDgtXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0yMTQwPXN0YXRpYyBib29sIGlzX29ic29sZXRlX3NwKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0yMTQ1LVx0LyogVERQIE1NVSBwYWdlcyBkbyBub3QgdXNlIHRoZSBNTVUgZ2VuZXJhdGlvbi4gKi9cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MjE0NjpcdHJldHVybiAhaXNfdGRwX21tdV9wYWdlKHNwKSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMjE0Ny1cdCAgICAgICB1bmxpa2VseShzcC1cdTAwM2VtbXVfdmFsaWRfZ2VuICE9IGt2bS1cdTAwM2VhcmNoLm1tdV92YWxpZF9nZW4pO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MzQ4MD12b2lkIGRpc2FsbG93ZWRfaHVnZXBhZ2VfYWRqdXN0KHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQsIHU2NCBzcHRlLCBpbnQgY3VyX2xldmVsKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzQ4OC1cdFx0ICogQSBzbWFsbCBTUFRFIGV4aXN0cyBmb3IgdGhpcyBwZm4sIGJ1dCBGTkFNRShmZXRjaCksXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM0ODk6XHRcdCAqIGRpcmVjdF9tYXAoKSwgb3Iga3ZtX3RkcF9tbXVfbWFwKCkgd291bGQgbGlrZSB0byBjcmVhdGUgYVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zNDkwLVx0XHQgKiBsYXJnZSBQVEUgaW5zdGVhZDoganVzdCBmb3JjZSB0aGVtIHRvIGdvIGRvd24gYW5vdGhlciBsZXZlbCxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTM3MjY9c3RhdGljIGludCBmYXN0X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzc0My1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Mzc0NDpcdFx0aWYgKHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Mzc0NTpcdFx0XHRzcHRlcCA9IGt2bV90ZHBfbW11X2Zhc3RfcGZfZ2V0X2xhc3Rfc3B0ZXAodmNwdSwgZmF1bHQtXHUwMDNlZ2ZuLCBcdTAwMjZzcHRlKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzc0Ni1cdFx0ZWxzZVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9Mzg1MT1zdGF0aWMgdm9pZCBtbXVfZnJlZV9yb290X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBocGFfdCAqcm9vdF9ocGEsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zODYyLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozODYzOlx0aWYgKGlzX3RkcF9tbXVfcGFnZShzcCkpIHtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzg2NC1cdFx0bG9ja2RlcF9hc3NlcnRfaGVsZF9yZWFkKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM4NjU6XHRcdGt2bV90ZHBfbW11X3B1dF9yb290KGt2bSwgc3ApO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zODY2LVx0fSBlbHNlIHtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTM4NzY9dm9pZCBrdm1fbW11X2ZyZWVfcm9vdHMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdSAqbW11LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzg3OC17XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM4Nzk6XHRib29sIGlzX3RkcF9tbXUgPSB0ZHBfbW11X2VuYWJsZWQgXHUwMDI2XHUwMDI2IG1tdS1cdTAwM2Vyb290X3JvbGUuZGlyZWN0O1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zODgwLVx0aW50IGk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zOTAxLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozOTAyOlx0aWYgKGlzX3RkcF9tbXUpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM5MDMtXHRcdHJlYWRfbG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzkzMC1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MzkzMTpcdGlmIChpc190ZHBfbW11KSB7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM5MzItXHRcdHJlYWRfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0zOTg2PXN0YXRpYyBpbnQgbW11X2FsbG9jX2RpcmVjdF9yb290cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zOTkzLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozOTk0Olx0aWYgKHRkcF9tbXVfZW5hYmxlZCkge1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zOTk1LVx0XHRpZiAoa3ZtX2hhc19taXJyb3JlZF90ZHAodmNwdS1cdTAwM2Vrdm0pIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zOTk2LVx0XHQgICAgIVZBTElEX1BBR0UobW11LVx1MDAzZW1pcnJvcl9yb290X2hwYSkpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM5OTc6XHRcdFx0a3ZtX3RkcF9tbXVfYWxsb2Nfcm9vdCh2Y3B1LCB0cnVlKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Mzk5ODpcdFx0a3ZtX3RkcF9tbXVfYWxsb2Nfcm9vdCh2Y3B1LCBmYWxzZSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM5OTktXHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDQ2Mj1zdGF0aWMgaW50IGdldF9zcHRlc19sb2NrbGVzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBhZGRyLCB1NjQgKnNwdGVzLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDQ2OC1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDQ2OTpcdGlmIChpc190ZHBfbW11X2FjdGl2ZSh2Y3B1KSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDQ3MDpcdFx0bGVhZiA9IGt2bV90ZHBfbW11X2dldF93YWxrKHZjcHUsIGFkZHIsIHNwdGVzLCByb290X2xldmVsKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDQ3MS1cdGVsc2Vcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ5MzI9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9oYW5kbGVfcGFnZV9mYXVsdCk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTM0LSNpZmRlZiBDT05GSUdfWDg2XzY0XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ5MzU6c3RhdGljIGludCBrdm1fdGRwX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDkzNi1cdFx0XHRcdCAgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ5NjAtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ5NjE6XHRyID0ga3ZtX3RkcF9tbXVfbWFwKHZjcHUsIGZhdWx0KTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDk2Mi1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ5NzA9c3RhdGljIGludCBrdm1fdGRwX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDk3Mi0jaWZkZWYgQ09ORklHX1g4Nl82NFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0OTczOlx0aWYgKHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDk3NDpcdFx0cmV0dXJuIGt2bV90ZHBfbW11X3BhZ2VfZmF1bHQodmNwdSwgZmF1bHQpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTc1LSNlbmRpZlxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTE2Nz1zdGF0aWMgdm9pZCBrdm1fYXNzZXJ0X2dtZW1faW52YWxpZGF0ZV9sb2NrX2hlbGQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNzgtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUxNzk6aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE4MC17XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjA5LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MjEwOlx0aWYgKEtWTV9CVUdfT04oIXRkcF9tbXVfZW5hYmxlZCwga3ZtKSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTIxMS1cdFx0cmV0dXJuIC1FSU87XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjM0LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MjM1Olx0XHRyID0ga3ZtX3RkcF9tbXVfbWFwKHZjcHUsIFx1MDAyNmZhdWx0KTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTIzNi1cdH0gd2hpbGUgKHIgPT0gUkVUX1BGX1JFVFJZKTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUyNDItfVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MjQzOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4pO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjQ0LSNlbmRpZlxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTk3OT1zdGF0aWMgdW5pb24ga3ZtX21tdV9wYWdlX3JvbGVcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTk4MDprdm1fY2FsY190ZHBfbW11X3Jvb3RfcGFnZV9yb2xlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTk4MS1cdFx0XHRcdHVuaW9uIGt2bV9jcHVfcm9sZSBjcHVfcm9sZSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYwMDItXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjYwMDM6c3RhdGljIHZvaWQgaW5pdF9rdm1fdGRwX21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYwMDQtXHRcdFx0ICAgICB1bmlvbiBrdm1fY3B1X3JvbGUgY3B1X3JvbGUpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MDA2LVx0c3RydWN0IGt2bV9tbXUgKmNvbnRleHQgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gucm9vdF9tbXU7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjYwMDc6XHR1bmlvbiBrdm1fbW11X3BhZ2Vfcm9sZSByb290X3JvbGUgPSBrdm1fY2FsY190ZHBfbW11X3Jvb3RfcGFnZV9yb2xlKHZjcHUsIGNwdV9yb2xlKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjAwOC1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTYxNzM9dm9pZCBrdm1faW5pdF9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjE4MS1cdFx0aWYgKHRkcF9lbmFibGVkKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2MTgyOlx0XHRcdGluaXRfa3ZtX3RkcF9tbXUodmNwdSwgY3B1X3JvbGUpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MTgzLVx0XHRlbHNlXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02MjE5PWludCBrdm1fbW11X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjI0NC1cdCAqIHN0YWxlIGVudHJpZXMuICBGbHVzaGluZyBvbiBhbGxvYyBhbHNvIGFsbG93cyBLVk0gdG8gc2tpcCB0aGUgVExCXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjYyNDU6XHQgKiBmbHVzaCB3aGVuIGZyZWVpbmcgYSByb290IChzZWUga3ZtX3RkcF9tbXVfcHV0X3Jvb3QoKSkuXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYyNDYtXHQgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY3NzU9dm9pZCBrdm1fY29uZmlndXJlX21tdShib29sIGVuYWJsZV90ZHAsIGludCB0ZHBfZm9yY2VkX3Jvb3RfbGV2ZWwsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NzgyLSNpZmRlZiBDT05GSUdfWDg2XzY0XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY3ODM6XHR0ZHBfbW11X2VuYWJsZWQgPSB0ZHBfbW11X2FsbG93ZWQgXHUwMDI2XHUwMDI2IHRkcF9lbmFibGVkO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02Nzg0LSNlbmRpZlxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9Njk1Nj1zdGF0aWMgdm9pZCBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2Zyb250X2hhbGYoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjk3Ny1cdCAqL1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2OTc4Olx0aWYgKHRkcF9tbXVfZW5hYmxlZCkge1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02OTc5LVx0XHQvKlxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjk4Mi1cdFx0ICovXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY5ODM6XHRcdGt2bV90ZHBfbW11X2ludmFsaWRhdGVfcm9vdHMoa3ZtLCBLVk1fRElSRUNUX1JPT1RTKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjk4NC1cdH1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY5OTk9c3RhdGljIHZvaWQgX19rdm1fbW11X3phcF9hbGxfZmFzdF9iYWNrX2hhbGYoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzAxMS1cdCAqL1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MDEyOlx0aWYgKHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzAxMzpcdFx0a3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKGt2bSwgdHJ1ZSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcwMTQtfVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzAzND1pbnQga3ZtX21tdV9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcwNDMtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjcwNDQ6XHRpZiAodGRwX21tdV9lbmFibGVkKSB7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjcwNDU6XHRcdGt2bV9tbXVfaW5pdF90ZHBfbW11KGt2bSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcwNDYtXHR9IGVsc2Uge1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzA2OT12b2lkIGt2bV9tbXVfdW5pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcwNzItXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjcwNzM6XHRpZiAodGRwX21tdV9lbmFibGVkKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MDc0Olx0XHRrdm1fbW11X3VuaW5pdF90ZHBfbW11KGt2bSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcwNzUtXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz03MTEzPXZvaWQga3ZtX3phcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm5fc3RhcnQsIGdmbl90IGdmbl9lbmQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTI3LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MTI4Olx0aWYgKHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzEyOTpcdFx0Zmx1c2ggPSBrdm1fdGRwX21tdV96YXBfbGVhZnMoa3ZtLCBnZm5fc3RhcnQsIGdmbl9lbmQsIGZsdXNoKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzEzMC1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTcxNDc9dm9pZCBrdm1fbW11X3Nsb3RfcmVtb3ZlX3dyaXRlX2FjY2VzcyhzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTU3LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MTU4Olx0aWYgKHRkcF9tbXVfZW5hYmxlZCkge1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTU5LVx0XHRyZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzE2MDpcdFx0a3ZtX3RkcF9tbXVfd3Jwcm90X3Nsb3Qoa3ZtLCBtZW1zbG90LCBzdGFydF9sZXZlbCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcxNjEtXHRcdHJlYWRfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz03Mzk1PXZvaWQga3ZtX21tdV90cnlfc3BsaXRfaHVnZV9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03Mzk5LXtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzQwMDpcdGlmICghdGRwX21tdV9lbmFibGVkKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NDAxLVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NDA1LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3NDA2Olx0a3ZtX3RkcF9tbXVfdHJ5X3NwbGl0X2h1Z2VfcGFnZXMoa3ZtLCBtZW1zbG90LCBzdGFydCwgZW5kLCB0YXJnZXRfbGV2ZWwsIGZhbHNlKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzQwNy1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTc0MTQ9dm9pZCBrdm1fbW11X3Nsb3RfdHJ5X3NwbGl0X2h1Z2VfcGFnZXMoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzQyMC1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzQyMTpcdGlmICghdGRwX21tdV9lbmFibGVkKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NDIyLVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NDMwLVx0cmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc0MzE6XHRrdm1fdGRwX21tdV90cnlfc3BsaXRfaHVnZV9wYWdlcyhrdm0sIG1lbXNsb3QsIHN0YXJ0LCBlbmQsIHRhcmdldF9sZXZlbCwgdHJ1ZSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc0MzItXHRyZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzQ5OT12b2lkIGt2bV9tbXVfcmVjb3Zlcl9odWdlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc1MDctXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc1MDg6XHRpZiAodGRwX21tdV9lbmFibGVkKSB7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc1MDktXHRcdHJlYWRfbG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3NTEwOlx0XHRrdm1fdGRwX21tdV9yZWNvdmVyX2h1Z2VfcGFnZXMoa3ZtLCBzbG90KTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzUxMS1cdFx0cmVhZF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTc1MTU9dm9pZCBrdm1fbW11X3Nsb3RfbGVhZl9jbGVhcl9kaXJ0eShzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NTI3LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3NTI4Olx0aWYgKHRkcF9tbXVfZW5hYmxlZCkge1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NTI5LVx0XHRyZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzUzMDpcdFx0a3ZtX3RkcF9tbXVfY2xlYXJfZGlydHlfc2xvdChrdm0sIG1lbXNsb3QpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NTMxLVx0XHRyZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzU0ND1zdGF0aWMgdm9pZCBrdm1fbW11X3phcF9hbGwoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzU2Mi1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzU2MzpcdGlmICh0ZHBfbW11X2VuYWJsZWQpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc1NjQ6XHRcdGt2bV90ZHBfbW11X3phcF9hbGwoa3ZtKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzU2NS1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTc3NzA9dm9pZCBfX2luaXQga3ZtX21tdV94ODZfbW9kdWxlX2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc3NzktXHQgKi9cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Nzc4MDpcdHRkcF9tbXVfYWxsb3dlZCA9IHRkcF9tbXVfZW5hYmxlZDtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzc4MS1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTc4MjM9dm9pZCBrdm1fbW11X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzgyNS1cdGt2bV9tbXVfdW5sb2FkKHZjcHUpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3ODI2Olx0aWYgKHRkcF9tbXVfZW5hYmxlZCkge1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03ODI3LVx0XHRyZWFkX2xvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzkzMz1zdGF0aWMgdm9pZCBrdm1fcmVjb3Zlcl9ueF9odWdlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc5MzYtI2lmZGVmIENPTkZJR19YODZfNjRcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzkzNzpcdGNvbnN0IGJvb2wgaXNfdGRwX21tdSA9IG1tdV90eXBlID09IEtWTV9URFBfTU1VO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3OTM4Olx0c3BpbmxvY2tfdCAqdGRwX21tdV9wYWdlc19sb2NrID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gudGRwX21tdV9wYWdlc19sb2NrO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03OTM5LSNlbHNlXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc5NDA6XHRjb25zdCBib29sIGlzX3RkcF9tbXUgPSBmYWxzZTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Nzk0MTpcdHNwaW5sb2NrX3QgKnRkcF9tbXVfcGFnZXNfbG9jayA9IE5VTEw7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc5NDItI2VuZGlmXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03OTUyLVx0cmN1X2lkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Nzk1MzpcdGlmIChpc190ZHBfbW11KVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03OTU0LVx0XHRyZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc5NjUtXHRmb3IgKCA7IHRvX3phcDsgLS10b196YXApIHtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Nzk2NjpcdFx0aWYgKGlzX3RkcF9tbXUpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc5Njc6XHRcdFx0c3Bpbl9sb2NrKHRkcF9tbXVfcGFnZXNfbG9jayk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc5NjgtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc5NjktXHRcdGlmIChsaXN0X2VtcHR5KG54X2h1Z2VfcGFnZXMpKSB7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc5NzA6XHRcdFx0aWYgKGlzX3RkcF9tbXUpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc5NzE6XHRcdFx0XHRzcGluX3VubG9jayh0ZHBfbW11X3BhZ2VzX2xvY2spO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03OTcyLVx0XHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzk4OS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Nzk5MDpcdFx0aWYgKGlzX3RkcF9tbXUpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc5OTE6XHRcdFx0c3Bpbl91bmxvY2sodGRwX21tdV9wYWdlc19sb2NrKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzk5Mi1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTgwMDAtXHRcdGlmICgha3ZtX21tdV9zcF9kaXJ0eV9sb2dnaW5nX2VuYWJsZWQoa3ZtLCBzcCkpIHtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6ODAwMTpcdFx0XHRpZiAoaXNfdGRwX21tdSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6ODAwMjpcdFx0XHRcdGZsdXNoIHw9IGt2bV90ZHBfbW11X3phcF9wb3NzaWJsZV9ueF9odWdlX3BhZ2Uoa3ZtLCBzcCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTgwMDMtXHRcdFx0ZWxzZVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODAxMy1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6ODAxNDpcdFx0XHRpZiAoaXNfdGRwX21tdSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODAxNS1cdFx0XHRcdGNvbmRfcmVzY2hlZF9yd2xvY2tfcmVhZChcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODAyNi1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6ODAyNzpcdGlmIChpc190ZHBfbW11KVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy04MDI4LVx0XHRyZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmg9NDQ9c3RydWN0IGt2bV9tbXVfcGFnZSB7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaC01MS1cbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmg6NTI6XHRib29sIHRkcF9tbXVfcGFnZTtcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmgtNTMtXHRib29sIHVuc3luYztcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTU3LVx0XHQvKiBPbmx5IGFjY2Vzc2VkIHVuZGVyIHNsb3RzX2xvY2suICAqL1xuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaDo1ODpcdFx0Ym9vbCB0ZHBfbW11X3NjaGVkdWxlZF9yb290X3RvX3phcDtcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmgtNTktXHR9O1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmgtOTMtXHRcdGludCByb290X2NvdW50O1xuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaDo5NDpcdFx0cmVmY291bnRfdCB0ZHBfbW11X3Jvb3RfY291bnQ7XG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTk1LVx0fTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oPTIyNj1zdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQge1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmgtMjUxLVx0ICogTWF4aW11bSBwYWdlIHNpemUgdGhhdCBjYW4gYmUgY3JlYXRlZCBmb3IgdGhpcyBmYXVsdDsgaW5wdXQgdG9cbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmg6MjUyOlx0ICogRk5BTUUoZmV0Y2gpLCBkaXJlY3RfbWFwKCkgYW5kIGt2bV90ZHBfbW11X21hcCgpLlxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaC0yNTMtXHQgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdXRyYWNlLmg9Mzk4PVRSQUNFX0VWRU5UKFxuYXJjaC94ODYva3ZtL21tdS9tbXV0cmFjZS5oOjM5OTpcdGt2bV90ZHBfbW11X3NwdGVfY2hhbmdlZCxcbmFyY2gveDg2L2t2bS9tbXUvbW11dHJhY2UuaC00MDAtXHRUUF9QUk9UTyhpbnQgYXNfaWQsIGdmbl90IGdmbiwgaW50IGxldmVsLCB1NjQgb2xkX3NwdGUsIHU2NCBuZXdfc3B0ZSksXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jPTEyPXN0YXRpYyB2b2lkIHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xNS1cdFx0U1BURV9JTkRFWCgoaXRlci1cdTAwM2VnZm4gfCBpdGVyLVx1MDAzZWdmbl9iaXRzKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCwgaXRlci1cdTAwM2VsZXZlbCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM6MTY6XHRpdGVyLVx1MDAzZW9sZF9zcHRlID0ga3ZtX3RkcF9tbXVfcmVhZF9zcHRlKGl0ZXItXHUwMDNlc3B0ZXApO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTE3LX1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM9ODA9c3RhdGljIGJvb2wgdHJ5X3N0ZXBfZG93bihzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTkwLVx0ICovXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM6OTE6XHRpdGVyLVx1MDAzZW9sZF9zcHRlID0ga3ZtX3RkcF9tbXVfcmVhZF9zcHRlKGl0ZXItXHUwMDNlc3B0ZXApO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTkyLVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYz0xMTI9c3RhdGljIGJvb2wgdHJ5X3N0ZXBfc2lkZShzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTEyNC1cdGl0ZXItXHUwMDNlc3B0ZXAmIzQzOyYjNDM7O1xuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jOjEyNTpcdGl0ZXItXHUwMDNlb2xkX3NwdGUgPSBrdm1fdGRwX21tdV9yZWFkX3NwdGUoaXRlci1cdTAwM2VzcHRlcCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtMTI2LVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0xNi0gKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaDoxNzpzdGF0aWMgaW5saW5lIHU2NCBrdm1fdGRwX21tdV9yZWFkX3NwdGUodGRwX3B0ZXBfdCBzcHRlcClcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0xOC17XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTI4LSAqL1xuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oOjI5OnN0YXRpYyBpbmxpbmUgdTY0IGt2bV90ZHBfbW11X3dyaXRlX3NwdGVfYXRvbWljKHRkcF9wdGVwX3Qgc3B0ZXAsIHU2NCBuZXdfc3B0ZSlcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0zMC17XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTM0LVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oOjM1OnN0YXRpYyBpbmxpbmUgdTY0IHRkcF9tbXVfY2xlYXJfc3B0ZV9iaXRzX2F0b21pYyh0ZHBfcHRlcF90IHNwdGVwLCB1NjQgbWFzaylcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0zNi17XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTQxLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oOjQyOnN0YXRpYyBpbmxpbmUgdm9pZCBfX2t2bV90ZHBfbW11X3dyaXRlX3NwdGUodGRwX3B0ZXBfdCBzcHRlcCwgdTY0IG5ld19zcHRlKVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTQzLXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtNTItICovXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6NTM6c3RhdGljIGlubGluZSBib29sIGt2bV90ZHBfbW11X3NwdGVfbmVlZF9hdG9taWNfdXBkYXRlKHU2NCBvbGRfc3B0ZSwgaW50IGxldmVsKVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTU0LXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtNTktXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6NjA6c3RhdGljIGlubGluZSB1NjQga3ZtX3RkcF9tbXVfd3JpdGVfc3B0ZSh0ZHBfcHRlcF90IHNwdGVwLCB1NjQgb2xkX3NwdGUsXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtNjEtXHRcdFx0XHRcdCB1NjQgbmV3X3NwdGUsIGludCBsZXZlbClcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC02Mi17XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6NjM6XHRpZiAoa3ZtX3RkcF9tbXVfc3B0ZV9uZWVkX2F0b21pY191cGRhdGUob2xkX3NwdGUsIGxldmVsKSlcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaDo2NDpcdFx0cmV0dXJuIGt2bV90ZHBfbW11X3dyaXRlX3NwdGVfYXRvbWljKHNwdGVwLCBuZXdfc3B0ZSk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtNjUtXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6NjY6XHRfX2t2bV90ZHBfbW11X3dyaXRlX3NwdGUoc3B0ZXAsIG5ld19zcHRlKTtcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC02Ny1cdHJldHVybiBvbGRfc3B0ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtNjktXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6NzA6c3RhdGljIGlubGluZSB1NjQgdGRwX21tdV9jbGVhcl9zcHRlX2JpdHModGRwX3B0ZXBfdCBzcHRlcCwgdTY0IG9sZF9zcHRlLFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTcxLVx0XHRcdFx0XHQgIHU2NCBtYXNrLCBpbnQgbGV2ZWwpXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtNzIte1xuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oOjczOlx0aWYgKGt2bV90ZHBfbW11X3NwdGVfbmVlZF9hdG9taWNfdXBkYXRlKG9sZF9zcHRlLCBsZXZlbCkpXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6NzQ6XHRcdHJldHVybiB0ZHBfbW11X2NsZWFyX3NwdGVfYml0c19hdG9taWMoc3B0ZXAsIG1hc2spO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTc1LVxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oOjc2Olx0X19rdm1fdGRwX21tdV93cml0ZV9zcHRlKHNwdGVwLCBvbGRfc3B0ZSBcdTAwMjYgfm1hc2spO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTc3LVx0cmV0dXJuIG9sZF9zcHRlO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaD0xMjY9c3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50IHtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtMTQ0LVx0Zm9yICh0ZHBfaXRlcl9zdGFydChcdTAwMjZpdGVyLCByb290LCBtaW5fbGV2ZWwsIDAsIDApO1x0XHRcXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oOjE0NTpcdFx0aXRlci52YWxpZCBcdTAwMjZcdTAwMjYgaXRlci5nZm4gXHUwMDNjIHRkcF9tbXVfbWF4X2dmbl9leGNsdXNpdmUoKTtcdFxcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtMTQ2LVx0XHR0ZHBfaXRlcl9uZXh0KFx1MDAyNml0ZXIpKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTctI2luY2x1ZGUgXCYjMzQ7dGRwX2l0ZXIuaFwmIzM0O1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6ODojaW5jbHVkZSBcJiMzNDt0ZHBfbW11LmhcJiMzNDtcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTktI2luY2x1ZGUgXCYjMzQ7c3B0ZS5oXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTQtLyogSW5pdGlhbGl6ZXMgdGhlIFREUCBNTVUgZm9yIHRoZSBWTSwgaWYgZW5hYmxlZC4gKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjE1OnZvaWQga3ZtX21tdV9pbml0X3RkcF9tbXUoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTYte1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTc6XHRJTklUX0xJU1RfSEVBRChcdTAwMjZrdm0tXHUwMDNlYXJjaC50ZHBfbW11X3Jvb3RzKTtcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjE4Olx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudGRwX21tdV9wYWdlc19sb2NrKTtcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTE5LX1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz0yMj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wga3ZtX2xvY2tkZXBfYXNzZXJ0X21tdV9sb2NrX2hlbGQoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTMyLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MzM6dm9pZCBrdm1fbW11X3VuaW5pdF90ZHBfbW11KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTM0LXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0zOS1cdCAqL1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6NDA6XHRrdm1fdGRwX21tdV9pbnZhbGlkYXRlX3Jvb3RzKGt2bSwgS1ZNX1ZBTElEX1JPT1RTKTtcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjQxOlx0a3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKGt2bSwgZmFsc2UpO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNDItXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy00My0jaWZkZWYgQ09ORklHX0tWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjQ0Olx0S1ZNX01NVV9XQVJOX09OKGF0b21pYzY0X3JlYWQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudGRwX21tdV9wYWdlcykpO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNDUtI2VuZGlmXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo0NjpcdFdBUk5fT04oIWxpc3RfZW1wdHkoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudGRwX21tdV9yb290cykpO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNDctXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNTUtXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo1NjpzdGF0aWMgdm9pZCBfX3RkcF9tbXVfZnJlZV9zcChzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcClcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTU3LXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy02MS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjYyOnN0YXRpYyB2b2lkIHRkcF9tbXVfZnJlZV91bnVzZWRfc3Aoc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy02My17XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy02NC1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzcC1cdTAwM2VleHRlcm5hbF9zcHQpO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6NjU6XHRfX3RkcF9tbXVfZnJlZV9zcChzcCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy02Ni19XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNzUtICovXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo3NjpzdGF0aWMgdm9pZCB0ZHBfbW11X2ZyZWVfc3BfcmN1X2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTc3LXtcbi0tXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc3MwoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IERpdmluZyBpbnRvIHRoZSBURFAgTU1VKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcuIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIG1ldGljdWxvdXNseSByZXZpZXcgZXZlcnkgZGV0YWlsIG9mIHRoZSBwYXRjaCBpdHNlbGYuIFRoZW4sIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIFRoYXQgbWVhbnMgYSBkZWVwIGRpdmUgaW50byB0aGUgcmVsZXZhbnQgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNgIGFuZCBgYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jYCBmaWxlcy4gSSBuZWVkIHRvIHNlZSBob3cgdGhlc2UgY2hhbmdlcyBpbnRlZ3JhdGUgd2l0aCB0aGUgZXhpc3RpbmcgVERQIE1NVSBsb2dpYywgaG93IHRoZXkgbWlnaHQgYWZmZWN0IHRoZSBleGlzdGluZyBmbG93cywgYW5kIHdoYXQgbmV3IGJlaGF2aW9yIHRoZXkgaW50cm9kdWNlLiBObyBza2ltbWluZzsgdGhpcyBuZWVkcyBhIGZ1bGwsIHRob3VnaHRmdWwgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkyMDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gOTIxOlx0XHR9XG4gOTIyOlx0XG4gOTIzOlx0XHRyZXR1cm4gdHJ1ZTtcbiA5MjQ6XHR9XG4gOTI1Olx0XG4gOTI2Olx0c3RhdGljIGJvb2wgdGRwX21tdV96YXBfY29tcGxldGVkX2VtcHR5X2xlYWZfcHQoc3RydWN0IGt2bSAqa3ZtLFxuIDkyNzpcdFx0XHRcdFx0XHRcdHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQsXG4gOTI4Olx0XHRcdFx0XHRcdFx0Z2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCxcbiA5Mjk6XHRcdFx0XHRcdFx0XHR0ZHBfcHRlcF90IHphcHBlZF9sZWFmX3B0KVxuIDkzMDpcdHtcbiA5MzE6XHRcdHN0cnVjdCBrdm1fbW11X3BhZ2UgKmNoaWxkX3NwO1xuIDkzMjpcdFxuIDkzMzpcdFx0aWYgKGV2ZW50LVx1MDAzZWxldmVsICE9IFBHX0xFVkVMXzJNIHx8XG4gOTM0Olx0XHQgICAgIWlzX3NoYWRvd19wcmVzZW50X3B0ZShldmVudC1cdTAwM2VvbGRfc3B0ZSkgfHxcbiA5MzU6XHRcdCAgICBpc19sYXN0X3NwdGUoZXZlbnQtXHUwMDNlb2xkX3NwdGUsIGV2ZW50LVx1MDAzZWxldmVsKSlcbiA5MzY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDkzNzpcdFxuIDkzODpcdFx0aWYgKGV2ZW50LVx1MDAzZWdmbiBcdTAwM2Mgc3RhcnQgfHxcbiA5Mzk6XHRcdCAgICBldmVudC1cdTAwM2VnZm4gJiM0MzsgS1ZNX1BBR0VTX1BFUl9IUEFHRShldmVudC1cdTAwM2VsZXZlbCkgXHUwMDNlIGVuZClcbiA5NDA6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDk0MTpcdFxuIDk0MjpcdFx0LyogTGVhdmUgcHJvZHVjdGl2ZSBsZWFmIHRhYmxlcyBpbiBwbGFjZSB0byBhdm9pZCByZWZhdWx0IGNodXJuLiAqL1xuIDk0MzpcdFx0aWYgKHphcHBlZF9sZWFmX3B0ID09IGV2ZW50LVx1MDAzZXNwdGVwKVxuIDk0NDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gOTQ1Olx0XG4gOTQ2Olx0XHRjaGlsZF9zcCA9IHNwdGVfdG9fY2hpbGRfc3AoZXZlbnQtXHUwMDNlb2xkX3NwdGUpO1xuIDk0NzpcdFx0aWYgKGlzX21pcnJvcl9zcChjaGlsZF9zcCkpXG4gOTQ4Olx0XHRcdHJldHVybiBmYWxzZTtcbiA5NDk6XHRcbiA5NTA6XHRcdGlmIChjaGlsZF9zcC1cdTAwM2Vyb2xlLmxldmVsICE9IFBHX0xFVkVMXzRLKVxuIDk1MTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gOTUyOlx0XG4gOTUzOlx0XHR0ZHBfbW11X3NldF9zcHRlKGt2bSwgZXZlbnQtXHUwMDNlc3B0ZXAsIGV2ZW50LVx1MDAzZW9sZF9zcHRlLFxuIDk1NDpcdFx0XHRcdCBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSwgZXZlbnQtXHUwMDNlZ2ZuLCBldmVudC1cdTAwM2VsZXZlbCk7XG4gOTU1Olx0XHRyZXR1cm4gdHJ1ZTtcbiA5NTY6XHR9XG4gOTU3Olx0XG4gOTU4Olx0LypcbiA5NTk6XHQgKiBJZiBjYW5feWllbGQgaXMgdHJ1ZSwgd2lsbCByZWxlYXNlIHRoZSBNTVUgbG9jayBhbmQgcmVzY2hlZHVsZSBpZiB0aGVcbiA5NjA6XHQgKiBzY2hlZHVsZXIgbmVlZHMgdGhlIENQVSBvciB0aGVyZSBpcyBjb250ZW50aW9uIG9uIHRoZSBNTVUgbG9jay4gSWYgdGhpc1xuIDk2MTpcdCAqIGZ1bmN0aW9uIGNhbm5vdCB5aWVsZCwgaXQgd2lsbCBub3QgcmVsZWFzZSB0aGUgTU1VIGxvY2sgb3IgcmVzY2hlZHVsZSBhbmRcbiA5NjI6XHQgKiB0aGUgY2FsbGVyIG11c3QgZW5zdXJlIGl0IGRvZXMgbm90IHN1cHBseSB0b28gbGFyZ2UgYSBHRk4gcmFuZ2UsIG9yIHRoZVxuIDk2MzpcdCAqIG9wZXJhdGlvbiBjYW4gY2F1c2UgYSBzb2Z0IGxvY2t1cC5cbiA5NjQ6XHQgKi9cbiA5NjU6XHRzdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXG4gOTY2Olx0XHRcdFx0ICAgICAgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgYm9vbCBjYW5feWllbGQsIGJvb2wgZmx1c2gpXG4gOTY3Olx0e1xuIDk2ODpcdFx0c3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50IGV2ZW50ID0ge307XG4gOTY5Olx0XHRzdHJ1Y3QgdGRwX2l0ZXIgaXRlcjtcbiA5NzA6XHRcdHRkcF9wdGVwX3QgemFwcGVkX2xlYWZfcHQgPSBOVUxMO1xuIDk3MTpcdFx0Ym9vbCByZW1vdmVkX3NwID0gZmFsc2U7XG4gOTcyOlx0XG4gOTczOlx0XHRlbmQgPSBtaW4oZW5kLCB0ZHBfbW11X21heF9nZm5fZXhjbHVzaXZlKCkpO1xuIDk3NDpcdFxuIDk3NTpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuIDk3NjpcdFxuIDk3NzpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDk3ODpcdFxuIDk3OTpcdFx0dGRwX2l0ZXJfc3RhcnQoXHUwMDI2aXRlciwgcm9vdCwgUEdfTEVWRUxfNEssIHN0YXJ0LFxuIDk4MDpcdFx0XHQgICAgICAga3ZtX2dmbl9yb290X2JpdHMoa3ZtLCByb290KSk7XG4gOTgxOlx0XHR3aGlsZSAoaXRlci52YWxpZCBcdTAwMjZcdTAwMjYgaXRlci5nZm4gXHUwMDNjIGVuZCkge1xuIDk4MjpcdFx0XHRpZiAoY2FuX3lpZWxkIFx1MDAyNlx1MDAyNlxuIDk4MzpcdFx0XHQgICAgdGRwX21tdV9pdGVyX2NvbmRfcmVzY2hlZChrdm0sIFx1MDAyNml0ZXIsIGZsdXNoLCBmYWxzZSkpIHtcbiA5ODQ6XHRcdFx0XHRmbHVzaCA9IGZhbHNlO1xuIDk4NTpcdFx0XHRcdHRkcF9pdGVyX25leHQoXHUwMDI2aXRlcik7XG4gOTg2Olx0XHRcdFx0Y29udGludWU7XG4gOTg3Olx0XHRcdH1cbiA5ODg6XHRcbiA5ODk6XHRcdFx0aWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLm9sZF9zcHRlKSBcdTAwMjZcdTAwMjZcbiA5OTA6XHRcdFx0ICAgIGlzX2xhc3Rfc3B0ZShpdGVyLm9sZF9zcHRlLCBpdGVyLmxldmVsKSkge1xuIDk5MTpcdFx0XHRcdGlmIChpdGVyLmxldmVsID09IFBHX0xFVkVMXzRLKSB7XG4gOTkyOlx0XHRcdFx0XHRzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDtcbiA5OTM6XHRcbiA5OTQ6XHRcdFx0XHRcdHNwID0gc3B0ZXBfdG9fc3AocmN1X2RlcmVmZXJlbmNlKGl0ZXIuc3B0ZXApKTtcbiA5OTU6XHRcdFx0XHRcdHphcHBlZF9sZWFmX3B0ID0gc3AtXHUwMDNlcHRlcDtcbiA5OTY6XHRcdFx0XHR9XG4gOTk3Olx0XG4gOTk4Olx0XHRcdFx0dGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgXHUwMDI2aXRlcixcbiA5OTk6XHRcdFx0XHRcdFx0ICAgICAgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUpO1xuMTAwMDpcdFxuMTAwMTpcdFx0XHRcdC8qXG4xMDAyOlx0XHRcdFx0ICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2VzbiYjMzk7dCByZXF1aXJlIGEgVExCIGZsdXNoLFxuMTAwMzpcdFx0XHRcdCAqIHNlZSBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoKSBmb3IgZGV0YWlscy5cbjEwMDQ6XHRcdFx0XHQgKi9cbjEwMDU6XHRcdFx0XHRpZiAoIXJvb3QtXHUwMDNlcm9sZS5pbnZhbGlkKVxuMTAwNjpcdFx0XHRcdFx0Zmx1c2ggPSB0cnVlO1xuMTAwNzpcdFx0XHR9XG4xMDA4Olx0XG4xMDA5Olx0XHRcdHRkcF9pdGVyX25leHRfcG9zdF9vcmRlcihcdTAwMjZpdGVyLCBcdTAwMjZldmVudCk7XG4xMDEwOlx0XHRcdGlmIChldmVudC52YWxpZCBcdTAwMjZcdTAwMjZcbjEwMTE6XHRcdFx0ICAgIHRkcF9tbXVfemFwX2NvbXBsZXRlZF9lbXB0eV9sZWFmX3B0KGt2bSwgXHUwMDI2ZXZlbnQsIHN0YXJ0LFxuMTAxMjpcdFx0XHRcdFx0XHRcdFx0ZW5kLCB6YXBwZWRfbGVhZl9wdCkpIHtcbjEwMTM6XHRcdFx0XHRpZiAoIXJvb3QtXHUwMDNlcm9sZS5pbnZhbGlkKVxuMTAxNDpcdFx0XHRcdFx0Zmx1c2ggPSB0cnVlO1xuMTAxNTpcdFx0XHRcdHJlbW92ZWRfc3AgPSB0cnVlO1xuMTAxNjpcdFx0XHR9XG4xMDE3Olx0XHR9XG4xMDE4Olx0XG4xMDE5Olx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjYyOQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHRkcF9tbXUuY2AqKgoKT2theSwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgS1ZNJiMzOTtzIFRyYW5zbGF0aW9uIExvb2thc2lkZSBCdWZmZXIgKFRMQikgYW5kIGl0cyBtYW5hZ2VtZW50IGluIHRoZSBjb250ZXh0IG9mIG5lc3RlZCBwYWdpbmcgb24geDg2LCB3aGljaCwgYXMgd2Uga25vdywgaXMgY3J1Y2lhbCBmb3IgdmlydHVhbGl6YXRpb24gcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5LiBXZSBuZWVkIHRvIHplcm8gaW4gb24gbGluZXMgMTAyMC0xMDUwIHdpdGhpbiB0aGUgYGFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jYCBmaWxlLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgc2VjdGlvbiBsaWtlbHkgZGVhbHMgd2l0aCBhIHNwZWNpZmljIGFzcGVjdCBvZiB0aGUgbmVzdGVkIHBhZ2luZyBzZXR1cCwgcGVyaGFwcyByZWxhdGVkIHRvIGludmFsaWRhdGluZyBUTEIgZW50cmllcywgaGFuZGxpbmcgcGFnZSBmYXVsdHMsIG9yIHBvdGVudGlhbGx5IGV2ZW4gbWFuYWdpbmcgdGhlIHNoYWRvdyBwYWdlIHRhYmxlcy4gCgpHaXZlbiB0aGUgZmlsZSBuYW1lLCBpdCYjMzk7cyB2ZXJ5IGxpa2VseSB0aGlzIGludm9sdmVzIHRoZSAmIzM0O1RyYW5zbGF0ZSB0byBQaHlzaWNhbCAoVERQKSBNTVUmIzM0OyBmdW5jdGlvbmFsaXR5LCBub3QgdGhlIHN0YW5kYXJkIHNoYWRvdyBwYWdlIHRhYmxlIG1hbmFnZW1lbnQuIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGF0IHNlY3Rpb24gd2l0aCBhbiBleWUgZm9yIGFueSBpbnRlcmVzdGluZyBkYXRhIHN0cnVjdHVyZXMgb3IgZnVuY3Rpb25zIHRoYXQgbWlnaHQgcHJvdmlkZSBpbnNpZ2h0IGludG8gaG93IHRoZSBndWVzdCYjMzk7cyBNTVUgb3BlcmF0aW9ucyBhcmUgdHJhbnNsYXRlZCB0byB0aGUgaG9zdCYjMzk7cyBwaHlzaWNhbCBtZW1vcnkgc3BhY2UuIFVuZGVyc3RhbmRpbmcgdGhpcyBwYXJ0IGlzIHZpdGFsIHRvIHRoZSBwZXJmb3JtYW5jZSBvZiBuZXN0ZWQgdmlydHVhbGl6YXRpb24uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBpbiB0aGUgY2FjaGUgZXZpY3Rpb24gcHJvY2VzcyB0byBmaW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMjA6XHRcdCAqIElmIGFueSBzaGFkb3cgcGFnZXMgd2VyZSByZW1vdmVkLCBzZXJ2aWNlIHBlbmRpbmcgVExCIGZsdXNoZXMgYmVmb3JlXG4xMDIxOlx0XHQgKiBkcm9wcGluZyBSQ1UgcHJvdGVjdGlvbiwgYXMgcmVxdWlyZWQgYnkgdGhlIFREUCBNTVUgaXRlcmF0b3IuXG4xMDIyOlx0XHQgKi9cbjEwMjM6XHRcdGlmIChyZW1vdmVkX3NwIFx1MDAyNlx1MDAyNiBmbHVzaCkge1xuMTAyNDpcdFx0XHRrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTtcbjEwMjU6XHRcdFx0Zmx1c2ggPSBmYWxzZTtcbjEwMjY6XHRcdH1cbjEwMjc6XHRcbjEwMjg6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTAyOTpcdFx0cmV0dXJuIGZsdXNoO1xuMTAzMDpcdH1cbjEwMzE6XHRcbjEwMzI6XHQvKlxuMTAzMzpcdCAqIFphcCBsZWFmIFNQVEVzIGZvciB0aGUgcmFuZ2Ugb2YgZ2ZucywgW3N0YXJ0LCBlbmQpLCBmb3IgYWxsICpWQUxJRCoqIHJvb3RzLlxuMTAzNDpcdCAqIFJldHVybnMgdHJ1ZSBpZiBhIFRMQiBmbHVzaCBpcyBuZWVkZWQgYmVmb3JlIHJlbGVhc2luZyB0aGUgTU1VIGxvY2ssIGkuZS4gaWZcbjEwMzU6XHQgKiBvbmUgb3IgbW9yZSBTUFRFcyB3ZXJlIHphcHBlZCBzaW5jZSB0aGUgTU1VIGxvY2sgd2FzIGxhc3QgYWNxdWlyZWQuXG4xMDM2Olx0ICovXG4xMDM3Olx0Ym9vbCBrdm1fdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGZsdXNoKVxuMTAzODpcdHtcbjEwMzk6XHRcdHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3Q7XG4xMDQwOlx0XG4xMDQxOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4xMDQyOlx0XHRmb3JfZWFjaF92YWxpZF90ZHBfbW11X3Jvb3RfeWllbGRfc2FmZShrdm0sIHJvb3QsIC0xKVxuMTA0MzpcdFx0XHRmbHVzaCA9IHRkcF9tbXVfemFwX2xlYWZzKGt2bSwgcm9vdCwgc3RhcnQsIGVuZCwgdHJ1ZSwgZmx1c2gpO1xuMTA0NDpcdFxuMTA0NTpcdFx0cmV0dXJuIGZsdXNoO1xuMTA0NjpcdH1cbjEwNDc6XHRcbjEwNDg6XHR2b2lkIGt2bV90ZHBfbW11X3phcF9hbGwoc3RydWN0IGt2bSAqa3ZtKVxuMTA0OTpcdHtcbjEwNTA6XHRcdHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3Q7XG4xMDUxOlx0XG4xMDUyOlx0XHQvKlxuMTA1MzpcdFx0ICogWmFwIGFsbCBkaXJlY3Qgcm9vdHMsIGluY2x1ZGluZyBpbnZhbGlkIGRpcmVjdCByb290cywgYXMgYWxsIGRpcmVjdFxuMTA1NDpcdFx0ICogU1BURXMgbXVzdCBiZSBkcm9wcGVkIGJlZm9yZSByZXR1cm5pbmcgdG8gdGhlIGNhbGxlci4gRm9yIFREWCwgbWlycm9yXG4xMDU1Olx0XHQgKiByb290cyBkb24mIzM5O3QgbmVlZCBoYW5kbGluZyBpbiByZXNwb25zZSB0byB0aGUgbW11IG5vdGlmaWVyICh0aGUgY2FsbGVyKS5cbjEwNTY6XHRcdCAqXG4xMDU3Olx0XHQgKiBaYXAgZGlyZWN0bHkgZXZlbiBpZiB0aGUgcm9vdCBpcyBhbHNvIGJlaW5nIHphcHBlZCBieSBhIGNvbmN1cnJlbnRcbjEwNTg6XHRcdCAqIFwmIzM0O2Zhc3QgemFwXCYjMzQ7LiAgV2Fsa2luZyB6YXBwZWQgdG9wLWxldmVsIFNQVEVzIGlzbiYjMzk7dCBhbGwgdGhhdCBleHBlbnNpdmVcbjEwNTk6XHRcdCAqIGFuZCBtbXVfbG9jayBpcyBhbHJlYWR5IGhlbGQsIHdoaWNoIG1lYW5zIHRoZSBvdGhlciB0aHJlYWQgaGFzIHlpZWxkZWQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NjgzCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEaXZpbmcgaW50byBgdGRwX2l0ZXIuY2AqKgoKQWxyaWdodCwgc28gdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGFuYWx5emUgYGFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBUd28tRGltZW5zaW9uYWwgUGFnaW5nIChURFApIGl0ZXJhdGlvbiBwcm9jZXNzLiBNeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgb24gaG93IHRoZSBjb2RlIGl0ZXJhdGVzIHRocm91Z2ggdGhlIFRyYW5zbGF0aW9uIExvb2thc2lkZSBCdWZmZXJzIChUTEJzKSBhbmQgcGFnZSB0YWJsZXMsIGxvb2tpbmcgZm9yIHNwZWNpZmljIGVudHJpZXMsIHBvc3NpYmx5IGZvciBpbnZhbGlkYXRpb24gb3IgbW9kaWZpY2F0aW9uLiBJJiMzOTtsbCBiZSBzZWFyY2hpbmcgZm9yIHRoZSBjb3JlIGFsZ29yaXRobXMgdXNlZCB0byB3YWxrIHRoZSBwYWdlIHRhYmxlcywgdGFraW5nIG5vdGUgb2YgaG93IHRoZXkmIzM5O3JlIG9wdGltaXplZCBmb3IgcGVyZm9ybWFuY2UuIEkgZXhwZWN0IHRvIHNlZSBzcGVjaWZpYyBpbnN0cnVjdGlvbiBzZXF1ZW5jZXMgdXNlZCB0byB0cmF2ZXJzZSB0aGUgRVBUIChFeHRlbmRlZCBQYWdlIFRhYmxlcykgYXMgZWZmaWNpZW50bHkgYXMgcG9zc2libGUuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGhhbmRsaW5nIG9mIG5lc3RlZCBwYWdlIHRhYmxlcyBpZiB0aGF0IGFwcGxpZXMuIEZ1cnRoZXJtb3JlLCBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcyBhbmQgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMsIHN1Y2ggYXMgdGhlIHVzZSBvZiBjYWNoaW5nLCBwcmVmZXRjaGluZywgYW5kIGF0b21pYyBvcGVyYXRpb25zIHdpdGhpbiB0aGUgaXRlcmF0aW9uIGxvZ2ljLiBJIGFudGljaXBhdGUgdGhhdCB0aGUgY29kZSB3aWxsIGJlIHRpZ2h0bHkgY291cGxlZCB3aXRoIHRoZSBLVk0gaW5mcmFzdHJ1Y3R1cmUsIHNvIEkmIzM5O2xsIGFsc28gYmUgZXhhbWluaW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBLVk0gY29tcG9uZW50cywgc3VjaCBhcyB0aGUgTU1VIGFuZCB0aGUgdmlydHVhbCBDUFUgKHZDUFUpLiBJbiBwYXJ0aWN1bGFyLCBJIHdpbGwgbG9vayBmb3IgYW55IGNvZGUgZGVhbGluZyB3aXRoIHRoZSBoYW5kbGluZyBvZiBndWVzdCBwaHlzaWNhbCBhZGRyZXNzZXMsIGFuZCBob3cgdGhlIGd1ZXN0LXBoeXNpY2FsLXRvLWhvc3QtcGh5c2ljYWwgbWFwcGluZyBpcyBjb25kdWN0ZWQuIExhc3RseSwgSSYjMzk7bGwgYmUgY3Jvc3MtcmVmZXJlbmNpbmcgdGhpcyBjb2RlIHdpdGggdGhlIHN1cnJvdW5kaW5nIGZpbGVzIHRvIHNlZSBob3cgaXQgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBLVk0mIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgb24geDg2IHN5c3RlbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHQvKlxuIDEzMTpcdCAqIFRyaWVzIHRvIHRyYXZlcnNlIGJhY2sgdXAgYSBsZXZlbCBpbiB0aGUgcGFnaW5nIHN0cnVjdHVyZSBzbyB0aGF0IHRoZSB3YWxrXG4gMTMyOlx0ICogY2FuIGNvbnRpbnVlIGZyb20gdGhlIG5leHQgZW50cnkgaW4gdGhlIHBhcmVudCBwYWdlIHRhYmxlLiBSZXR1cm5zIHRydWUgb24gYVxuIDEzMzpcdCAqIHN1Y2Nlc3NmdWwgc3RlcCB1cCwgZmFsc2UgaWYgYWxyZWFkeSBpbiB0aGUgcm9vdCBwYWdlLlxuIDEzNDpcdCAqL1xuIDEzNTpcdHN0YXRpYyBib29sIHRyeV9zdGVwX3VwKHN0cnVjdCB0ZHBfaXRlciAqaXRlcixcbiAxMzY6XHRcdFx0XHRzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgKmV2ZW50KVxuIDEzNzpcdHtcbiAxMzg6XHRcdGlmIChpdGVyLVx1MDAzZWxldmVsID09IGl0ZXItXHUwMDNlcm9vdF9sZXZlbClcbiAxMzk6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDE0MDpcdFxuIDE0MTpcdFx0aXRlci1cdTAwM2VsZXZlbCYjNDM7JiM0Mzs7XG4gMTQyOlx0XHRpdGVyLVx1MDAzZWdmbiA9IGdmbl9yb3VuZF9mb3JfbGV2ZWwoaXRlci1cdTAwM2VnZm4sIGl0ZXItXHUwMDNlbGV2ZWwpO1xuIDE0MzpcdFx0dGRwX2l0ZXJfcmVmcmVzaF9zcHRlcChpdGVyKTtcbiAxNDQ6XHRcbiAxNDU6XHRcdGlmIChldmVudCBcdTAwMjZcdTAwMjYgIWV2ZW50LVx1MDAzZXZhbGlkKSB7XG4gMTQ2Olx0XHRcdGV2ZW50LVx1MDAzZXNwdGVwID0gaXRlci1cdTAwM2VzcHRlcDtcbiAxNDc6XHRcdFx0ZXZlbnQtXHUwMDNlb2xkX3NwdGUgPSBpdGVyLVx1MDAzZW9sZF9zcHRlO1xuIDE0ODpcdFx0XHRldmVudC1cdTAwM2VnZm4gPSBpdGVyLVx1MDAzZWdmbjtcbiAxNDk6XHRcdFx0ZXZlbnQtXHUwMDNlbGV2ZWwgPSBpdGVyLVx1MDAzZWxldmVsO1xuIDE1MDpcdFx0XHRldmVudC1cdTAwM2V2YWxpZCA9IHRydWU7XG4gMTUxOlx0XHR9XG4gMTUyOlx0XG4gMTUzOlx0XHRyZXR1cm4gdHJ1ZTtcbiAxNTQ6XHR9XG4gMTU1Olx0XG4gMTU2Olx0LypcbiAxNTc6XHQgKiBTdGVwIHRvIHRoZSBuZXh0IFNQVEUgaW4gYSBwcmUtb3JkZXIgdHJhdmVyc2FsIG9mIHRoZSBwYWdpbmcgc3RydWN0dXJlLlxuIDE1ODpcdCAqIFRvIGdldCB0byB0aGUgbmV4dCBTUFRFLCB0aGUgaXRlcmF0b3IgZWl0aGVyIHN0ZXBzIGRvd24gdG93YXJkcyB0aGUgZ29hbFxuIDE1OTpcdCAqIEdGTiwgaWYgYXQgYSBwcmVzZW50LCBub24tbGFzdC1sZXZlbCBTUFRFLCBvciBvdmVyIHRvIGEgU1BURSBtYXBwaW5nIGFcbiAxNjA6XHQgKiBoaWdoZXIgR0ZOLlxuIDE2MTpcdCAqXG4gMTYyOlx0ICogVGhlIGJhc2ljIGFsZ29yaXRobSBpcyBhcyBmb2xsb3dzOlxuIDE2MzpcdCAqIDEuIElmIHRoZSBjdXJyZW50IFNQVEUgaXMgYSBub24tbGFzdC1sZXZlbCBTUFRFLCBzdGVwIGRvd24gaW50byB0aGUgcGFnZVxuIDE2NDpcdCAqICAgIHRhYmxlIGl0IHBvaW50cyB0by5cbiAxNjU6XHQgKiAyLiBJZiB0aGUgaXRlcmF0b3IgY2Fubm90IHN0ZXAgZG93biwgaXQgd2lsbCB0cnkgdG8gc3RlcCB0byB0aGUgbmV4dCBTUFRFXG4gMTY2Olx0ICogICAgaW4gdGhlIGN1cnJlbnQgcGFnZSBvZiB0aGUgcGFnaW5nIHN0cnVjdHVyZS5cbiAxNjc6XHQgKiAzLiBJZiB0aGUgaXRlcmF0b3IgY2Fubm90IHN0ZXAgdG8gdGhlIG5leHQgZW50cnkgaW4gdGhlIGN1cnJlbnQgcGFnZSwgaXQgd2lsbFxuIDE2ODpcdCAqICAgIHRyeSB0byBzdGVwIHVwIHRvIHRoZSBwYXJlbnQgcGFnaW5nIHN0cnVjdHVyZSBwYWdlLiBJbiB0aGlzIGNhc2UsIHRoYXRcbiAxNjk6XHQgKiAgICBTUFRFIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gdmlzaXRlZCwgYW5kIHNvIHRoZSBpdGVyYXRvciBtdXN0IGFsc28gc3RlcFxuIDE3MDpcdCAqICAgIHRvIHRoZSBzaWRlIGFnYWluLlxuIDE3MTpcdCAqL1xuIDE3MjpcdHN0YXRpYyB2b2lkIF9fdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsXG4gMTczOlx0XHRcdFx0ICAgIHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQpXG4gMTc0Olx0e1xuIDE3NTpcdFx0aWYgKGV2ZW50KVxuIDE3NjpcdFx0XHRldmVudC1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuIDE3NzpcdFxuIDE3ODpcdFx0aWYgKGl0ZXItXHUwMDNleWllbGRlZCkge1xuIDE3OTpcdFx0XHR0ZHBfaXRlcl9yZXN0YXJ0KGl0ZXIpO1xuIDE4MDpcdFx0XHRyZXR1cm47XG4gMTgxOlx0XHR9XG4gMTgyOlx0XG4gMTgzOlx0XHRpZiAodHJ5X3N0ZXBfZG93bihpdGVyKSlcbiAxODQ6XHRcdFx0cmV0dXJuO1xuIDE4NTpcdFxuIDE4NjpcdFx0ZG8ge1xuIDE4NzpcdFx0XHRpZiAodHJ5X3N0ZXBfc2lkZShpdGVyKSlcbiAxODg6XHRcdFx0XHRyZXR1cm47XG4gMTg5Olx0XHR9IHdoaWxlICh0cnlfc3RlcF91cChpdGVyLCBldmVudCkpO1xuIDE5MDpcdFx0aXRlci1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuIDE5MTpcdH1cbiAxOTI6XHRcbiAxOTM6XHR2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuIDE5NDpcdHtcbiAxOTU6XHRcdF9fdGRwX2l0ZXJfbmV4dChpdGVyLCBOVUxMKTtcbiAxOTY6XHR9XG4gMTk3Olx0XG4gMTk4Olx0dm9pZCB0ZHBfaXRlcl9uZXh0X3Bvc3Rfb3JkZXIoc3RydWN0IHRkcF9pdGVyICppdGVyLFxuIDE5OTpcdFx0XHRcdCAgICAgIHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQpXG4gMjAwOlx0e1xuIDIwMTpcdFx0X190ZHBfaXRlcl9uZXh0KGl0ZXIsIGV2ZW50KTtcbiAyMDI6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MjAwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVERQIE1NVSBQb3N0LU9yZGVyIFphcHBpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBmb2N1c2VzIG9uIG9wdGltaXppbmcgbGVhZiBwYWdlIHRhYmxlIHphcHBpbmcgd2l0aGluIHRoZSBURFAgTU1VLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFib3V0IGhhbmRsaW5nIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMg4oCTIHRob3NlIGF0IHRoZSAyTSBsZXZlbCB0aGF0IHBvaW50IHRvIDRLIGxlYWYgcGFnZSB0YWJsZXMg4oCTIGFmdGVyIHRoZXkmIzM5O3ZlIGJlZW4gZnVsbHkgcHJvY2Vzc2VkIGR1cmluZyB0aGUgaXRlcmF0aW9uIG9mIFNQVEVzLiBUaGUgYHRkcF9tbXVfemFwX2xlYWZzYCBmdW5jdGlvbiBpcyBrZXkgaGVyZSwgYW5kIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGB0ZHBfbW11X3phcF9jb21wbGV0ZWRfZW1wdHlfbGVhZl9wdGAgdG8gaGFuZGxlIHRoZSB6YXBwaW5nIG9mIHRoZXNlIGVtcHR5IHRhYmxlcyBlZmZpY2llbnRseSB3aGVuIHN0ZXBwaW5nIHVwIHRoZSBwYWdlIHRhYmxlIGhpZXJhcmNoeS4KClRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IHRoaXMgZGlyZWN0bHkgbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIFREUCBNTVUgcGFnaW5nIGFuZCB6YXBwaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZm9yIHg4Nl82NCBhcmNoaXRlY3R1cmVzLiBUaGUgZ29vZCBuZXdzIGlzLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhpcyBpcyBkZWZpbml0ZWx5IHRlc3RhYmxlIGFuZCBmdXp6YWJsZSBpbiBwbGF0Zm9ybXMgbGlrZSBRRU1VLiBXZSBjYW4gdXNlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvciBzdGFuZGFyZCBLVk0gaW9jdGxzIHRvIHZlcmlmeSBpdHMgZnVuY3Rpb25hbGl0eS4gVGhlIGZ1bmN0aW9uIG9mIHRoaXMgY2hhbmdlIHdpbGwgYmUgdG8gbW9yZSBlZmZlY3RpdmVseSBtYW5hZ2UgbWVtb3J5IGJ5IG9wdGltaXppbmcgcGFnZSB0YWJsZSB6YXBwaW5nIGFuZCBmcmVlaW5nIHVwIGVtcHR5IHBhZ2UgdGFibGVzLCB3aGljaCBpcyB2ZXJ5IGltcG9ydGFudC4KCk5vdywgSSBuZWVkIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGV4cGVjdGluZyBgS1ZNYCwgYEtWTV9JTlRFTGAsIGBLVk1fQU1EYCwgYW5kIGBYODZfNjRgIHRvIGJlIGNyaXRpY2FsLiBUbyBjb25maXJtLCBJJiMzOTtsbCBleGFtaW5lIHRoZSBLY29uZmlnIHN5bWJvbHMgcmVsYXRlZCB0byB0aGlzIGNvZGUgYW5kIHNlZSB3aGF0IGNvbmZpZ3VyYXRpb25zIGVuYWJsZSB0aGUgS1ZNIHg4NiBURFAgTU1VLiBCYXNlZCBvbiBteSBleGlzdGluZyBrbm93bGVkZ2UsIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgYW5kIGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgIHdpbGwgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGRldGFpbHMuCgpGcm9tIGEgcXVpY2sgZ2xhbmNlIGF0IGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgLCBJIHNlZSB0aGF0IGBtbXUvdGRwX2l0ZXIub2AgYW5kIGBtbXUvdGRwX21tdS5vYCBhcmUgaW5jbHVkZWQgd2hlbiBgQ09ORklHX1g4Nl82NGAgaXMgc2V0LiBGdXJ0aGVyIGluc3BlY3Rpb24gb2YgYGFyY2gveDg2L2t2bS9LY29uZmlnYCByZXZlYWxzIHRoYXQgYEtWTWAgZGVwZW5kcyBvbiBgWDg2X0xPQ0FMX0FQSUNgLCBhbmQgYm90aCBgS1ZNX0lOVEVMYCBhbmQgYEtWTV9BTURgIGFyZSByZWxldmFudCwgYnV0IGBLVk1fWDg2YCBpcyBvbmx5IGRlZmluZWQgaWYgZWl0aGVyIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYCBhcmUgZW5hYmxlZC4KCkZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWdzLCBsaWtlIGBLVk1fUFJPVkVfTU1VYCBvciBhbnl0aGluZyBlbHNlIGluIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcyBwYXJ0aWN1bGFyIGxvZ2ljLiBJJiMzOTtsbCBuZWVkIHRvIGdvIHRocm91Z2ggYWxsIHRoZSBLY29uZmlnIG9wdGlvbnMgd2l0aGluIHRoYXQgZmlsZSB0byBlbnN1cmUgY29tcGxldGUgY292ZXJhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIEtWTSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdHNvdXJjZSBcJiMzNDt2aXJ0L2t2bS9LY29uZmlnXCYjMzQ7XG4gICA3Olx0XG4gICA4Olx0bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuICAgOTpcdFx0Ym9vbCBcJiMzNDtWaXJ0dWFsaXphdGlvblwmIzM0O1xuICAxMDpcdFx0ZGVmYXVsdCB5XG4gIDExOlx0XHRoZWxwXG4gIDEyOlx0XHQgIFNheSBZIGhlcmUgdG8gZ2V0IHRvIHNlZSBvcHRpb25zIGZvciB1c2luZyB5b3VyIExpbnV4IGhvc3QgdG8gcnVuIG90aGVyXG4gIDEzOlx0XHQgIG9wZXJhdGluZyBzeXN0ZW1zIGluc2lkZSB2aXJ0dWFsIG1hY2hpbmVzIChndWVzdHMpLlxuICAxNDpcdFx0ICBUaGlzIG9wdGlvbiBhbG9uZSBkb2VzIG5vdCBhZGQgYW55IGtlcm5lbCBjb2RlLlxuICAxNTpcdFxuICAxNjpcdFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kIGRpc2FibGVkLlxuICAxNzpcdFxuICAxODpcdGlmIFZJUlRVQUxJWkFUSU9OXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIEtWTV9YODZcbiAgMjE6XHRcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbiAgMjI6XHRcdHNlbGVjdCBLVk1fQ09NTU9OXG4gIDIzOlx0XHRzZWxlY3QgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xuICAyNDpcdFx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbiAgMjU6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXG4gIDI2Olx0XHRzZWxlY3QgSEFWRV9LVk1fUEZOQ0FDSEVcbiAgMjc6XHRcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX1RTT1xuICAyODpcdFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTFxuICAyOTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcbiAgMzA6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFfUk9VVElOR1xuICAzMTpcdFx0c2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTVxuICAzMjpcdFx0c2VsZWN0IFZIT1NUX1RBU0tcbiAgMzM6XHRcdHNlbGVjdCBLVk1fQVNZTkNfUEZcbiAgMzQ6XHRcdHNlbGVjdCBVU0VSX1JFVFVSTl9OT1RJRklFUlxuICAzNTpcdFx0c2VsZWN0IEtWTV9NTUlPXG4gIDM2Olx0XHRzZWxlY3QgU0NIRURfSU5GT1xuICAzNzpcdFx0c2VsZWN0IFBFUkZfRVZFTlRTXG4gIDM4Olx0XHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFNcbiAgMzk6XHRcdHNlbGVjdCBQRVJGX0dVRVNUX01FRElBVEVEX1BNVVxuICA0MDpcdFx0c2VsZWN0IEhBVkVfS1ZNX01TSVxuICA0MTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcbiAgNDI6XHRcdHNlbGVjdCBIQVZFX0tWTV9OT19QT0xMXG4gIDQzOlx0XHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcbiAgNDQ6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcbiAgNDU6XHRcdHNlbGVjdCBLVk1fVkZJT1xuICA0NjpcdFx0c2VsZWN0IEhBVkVfS1ZNX1BNX05PVElGSUVSIGlmIFBNXG4gIDQ3Olx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbiAgNDg6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG4gIDQ5Olx0XHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcbiAgNTA6XHRcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XG4gIDUxOlx0XG4gIDUyOlx0Y29uZmlnIEtWTVxuICA1MzpcdFx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4gIDU0Olx0XHRkZXBlbmRzIG9uIFg4Nl9MT0NBTF9BUElDXG4gIDU1Olx0XHRoZWxwXG4gIDU2Olx0XHQgIFN1cHBvcnQgaG9zdGluZyBmdWxseSB2aXJ0dWFsaXplZCBndWVzdCBtYWNoaW5lcyB1c2luZyBoYXJkd2FyZVxuICA1NzpcdFx0ICB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiAgWW91IHdpbGwgbmVlZCBhIGZhaXJseSByZWNlbnRcbiAgNTg6XHRcdCAgcHJvY2Vzc29yIGVxdWlwcGVkIHdpdGggdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gWW91IHdpbGwgYWxzb1xuICA1OTpcdFx0ICBuZWVkIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBvZiB0aGUgcHJvY2Vzc29yIG1vZHVsZXMgYmVsb3cuXG4gIDYwOlx0XG4gIDYxOlx0XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIHRocm91Z2hcbiAgNjI6XHRcdCAgYSBjaGFyYWN0ZXIgZGV2aWNlIG5vZGUgbmFtZWQgL2Rldi9rdm0uXG4gIDYzOlx0XG4gIDY0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICA2NTpcdFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0uXG4gIDY2Olx0XG4gIDY3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDY4Olx0XG4gIDY5Olx0Y29uZmlnIEtWTV9XRVJST1JcbiAgNzA6XHRcdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4gIDcxOlx0XHQjIERpc2FsbG93IEtWTSYjMzk7cyAtV2Vycm9yIGlmIEtBU0FOIGlzIGVuYWJsZWQsIGUuZy4gdG8gZ3VhcmQgYWdhaW5zdFxuICA3MjpcdFx0IyByYW5kb21pemVkIGNvbmZpZ3MgZnJvbSBzZWxlY3RpbmcgS1ZNX1dFUlJPUj15LCB3aGljaCBkb2VzbiYjMzk7dCBwbGF5XG4gIDczOlx0XHQjIG5pY2Ugd2l0aCBLQVNBTi4gIEtBU0FOIGJ1aWxkcyBnZW5lcmF0ZXMgd2FybmluZ3MgZm9yIHRoZSBkZWZhdWx0XG4gIDc0Olx0XHQjIEZSQU1FX1dBUk4sIGkuZS4gS1ZNX1dFUlJPUj15IHdpdGggS0FTQU49eSByZXF1aXJlcyBzcGVjaWFsIHR1bmluZy5cbiAgNzU6XHRcdCMgQnVpbGRpbmcgS1ZNIHdpdGggLVdlcnJvciBhbmQgS0FTQU4gaXMgc3RpbGwgZG9hYmxlIHZpYSBlbmFibGluZ1xuICA3NjpcdFx0IyB0aGUga2VybmVsLXdpZGUgV0VSUk9SPXkuXG4gIDc3Olx0XHRkZXBlbmRzIG9uIEtWTV9YODYgXHUwMDI2XHUwMDI2ICgoRVhQRVJUIFx1MDAyNlx1MDAyNiAhS0FTQU4pIHx8IFdFUlJPUilcbiAgNzg6XHRcdGhlbHBcbiAgNzk6XHRcdCAgQWRkIC1XZXJyb3IgdG8gdGhlIGJ1aWxkIGZsYWdzIGZvciBLVk0uXG4gIDgwOlx0XG4gIDgxOlx0XHQgIElmIGluIGRvdWJ0LCBzYXkgXCYjMzQ7TlwmIzM0Oy5cbiAgODI6XHRcbiAgODM6XHRjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuICA4NDpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcJiMzNDtcbiAgODU6XHRcdGRlcGVuZHMgb24gRVhQRVJUXG4gIDg2Olx0XHRkZXBlbmRzIG9uIEtWTV9YODYgXHUwMDI2XHUwMDI2IFg4Nl82NFxuICA4NzpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4gIDg4Olx0XHRoZWxwXG4gIDg5Olx0XHQgIEVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNcy4gIEN1cnJlbnRseSwgc29mdHdhcmUtXG4gIDkwOlx0XHQgIHByb3RlY3RlZCBWTXMgYXJlIHB1cmVseSBhIGRldmVsb3BtZW50IGFuZCB0ZXN0aW5nIHZlaGljbGUgZm9yXG4gIDkxOlx0XHQgIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQuICBBdHRlbXB0aW5nIHRvIHJ1biBhIFwmIzM0O3JlYWxcJiMzNDsgVk0gd29ya2xvYWQgYXMgYVxuICA5MjpcdFx0ICBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk0gd2lsbCBmYWlsIG1pc2VyYWJseS5cbiAgOTM6XHRcbiAgOTQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgXCYjMzQ7TlwmIzM0Oy5cbiAgOTU6XHRcbiAgOTY6XHRjb25maWcgS1ZNX0lOVEVMXG4gIDk3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4gIDk4Olx0XHRkZXBlbmRzIG9uIEtWTSBcdTAwMjZcdTAwMjYgSUEzMl9GRUFUX0NUTFxuICA5OTpcdFx0c2VsZWN0IFg4Nl9GUkVEIGlmIFg4Nl82NFxuIDEwMDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTgyNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBQYXRjaCBmb3IgRm9jdXMgU3ltYm9sIElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIHN5bWJvbHMgYXJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMgcGF0Y2guIExldCYjMzk7cyBzdGFydCBieSBsaXN0aW5nIHRoZSBmdW5jdGlvbnMgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgb3IgY2FsbHMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSByZWxldmFudCBjb2RlLgoKRmlyc3QsIEkgc2VlIGB0ZHBfaXRlcl9uZXh0X3Bvc3Rfb3JkZXJgLCB3aGljaCBpcyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYywgcmVzaWRpbmcgaW4gYm90aCBgYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oYCBhbmQgYHRkcF9pdGVyLmNgLiBUaGVuLCB0aGVyZSYjMzk7cyBgdGRwX2l0ZXJfbmV4dGAsIGFsc28gbm9uLXN0YXRpYy4gVGhvc2UgdHdvIHNvdW5kIGl0ZXJhdGl2ZSwgc28gdGhleSBhcmUgaGlnaGx5IHJlbGV2YW50LiBOZXh0LCBga3ZtX3RkcF9tbXVfemFwX2xlYWZzYCwgd2hpY2ggaXMgYWxzbyBub24tc3RhdGljLCBhbmQgbG9jYXRlZCBpbiBgdGRwX21tdS5jYC4gRm9sbG93aW5nIHRoYXQsIGBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VgLCBhZ2FpbiBub24tc3RhdGljLCBhbHNvIHdpdGhpbiBgdGRwX21tdS5jYCBhbmQgc3BlY2lmaWNhbGx5IGNhbGxzIGB0ZHBfbW11X3phcF9sZWFmc2AuIEZpbmFsbHksIEkgc2VlIGBrdm1femFwX2dmbl9yYW5nZWAsIGxvY2F0ZWQgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBhbmQgaW1wb3J0YW50bHksIGNhbGxzIGBrdm1fdGRwX21tdV96YXBfbGVhZnNgLgoKU28sIHRoZSBmb2N1cyBpcyByZWFsbHkgb24gdGhpcyBsZWFmIHphcHBpbmcgYW5kIHVubWFwcGluZywgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBURFAgTU1VLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSB3b3JrLCByaWdodCBub3cuIFNpbmNlIEkmIzM5O20gdmVyeSBmYW1pbGlhciB3aXRoIHRoZXNlIGNvbXBvbmVudHMsIHRoaXMgbWFwcGluZywgdW5tYXBwaW5nLCBhbmQgaXRlcmF0aW9uIGlzIGxpa2VseSBoYXBwZW5pbmcgb24gbXVsdGlwbGUgbGV2ZWxzLgpJIHNob3VsZCBzdGFydCBieSBleGFtaW5pbmcgdGhlIGZ1bmN0aW9ucyBmcm9tIHRoZSBgdGRwX21tdS5jYCBmaWxlIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIHRvIHRoZSBvdGhlciBsaXN0ZWQgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fdGRwX21tdV96YXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz02OTk5PXN0YXRpYyB2b2lkIF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfYmFja19oYWxmKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcwMTItXHRpZiAodGRwX21tdV9lbmFibGVkKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MDEzOlx0XHRrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoa3ZtLCB0cnVlKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzAxNC19XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz03MTEzPXZvaWQga3ZtX3phcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm5fc3RhcnQsIGdmbl90IGdmbl9lbmQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTI4LVx0aWYgKHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzEyOTpcdFx0Zmx1c2ggPSBrdm1fdGRwX21tdV96YXBfbGVhZnMoa3ZtLCBnZm5fc3RhcnQsIGdmbl9lbmQsIGZsdXNoKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzEzMC1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTc1NDQ9c3RhdGljIHZvaWQga3ZtX21tdV96YXBfYWxsKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc1NjMtXHRpZiAodGRwX21tdV9lbmFibGVkKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3NTY0Olx0XHRrdm1fdGRwX21tdV96YXBfYWxsKGt2bSk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc1NjUtXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz03OTMzPXN0YXRpYyB2b2lkIGt2bV9yZWNvdmVyX254X2h1Z2VfcGFnZXMoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODAwMS1cdFx0XHRpZiAoaXNfdGRwX21tdSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6ODAwMjpcdFx0XHRcdGZsdXNoIHw9IGt2bV90ZHBfbW11X3phcF9wb3NzaWJsZV9ueF9odWdlX3BhZ2Uoa3ZtLCBzcCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTgwMDMtXHRcdFx0ZWxzZVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jPTMzPXZvaWQga3ZtX21tdV91bmluaXRfdGRwX21tdShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNDAtXHRrdm1fdGRwX21tdV9pbnZhbGlkYXRlX3Jvb3RzKGt2bSwgS1ZNX1ZBTElEX1JPT1RTKTtcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjQxOlx0a3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKGt2bSwgZmFsc2UpO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNDItXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM9MjU5PXZvaWQga3ZtX3RkcF9tbXVfYWxsb2Nfcm9vdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbWlycm9yKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTMwNi1cdCAqIHRoZSBURFAgTU1VIGl0c2VsZiwgd2hpY2ggaXMgaGVsZCB1bnRpbCB0aGUgcm9vdCBpcyBpbnZhbGlkYXRlZCBhbmRcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjMwNzpcdCAqIGlzIHVsdGltYXRlbHkgcHV0IGJ5IGt2bV90ZHBfbW11X3phcF9pbnZhbGlkYXRlZF9yb290cygpLlxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMzA4LVx0ICovXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM9ODI5PXN0YXRpYyB2b2lkIHRkcF9tbXVfemFwX3Jvb3Qoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTg3NS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjg3Njpib29sIGt2bV90ZHBfbW11X3phcF9wb3NzaWJsZV9ueF9odWdlX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtODc3LVx0XHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz05NjU9c3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwMDItXHRcdFx0ICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2VzbiYjMzk7dCByZXF1aXJlIGEgVExCIGZsdXNoLFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTAwMzpcdFx0XHQgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMDA0LVx0XHRcdCAqL1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwMzYtICovXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzoxMDM3OmJvb2wga3ZtX3RkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgYm9vbCBmbHVzaClcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwMzgte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwNDctXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzoxMDQ4OnZvaWQga3ZtX3RkcF9tbXVfemFwX2FsbChzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMDQ5LXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMDc0LSAqL1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTA3NTp2b2lkIGt2bV90ZHBfbW11X3phcF9pbnZhbGlkYXRlZF9yb290cyhzdHJ1Y3Qga3ZtICprdm0sIGJvb2wgc2hhcmVkKVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTA3Ni17XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTEyMi0gKlxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTEyMzogKiBOb3RlLCBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoKSBpcyBnaWZ0ZWQgdGhlIFREUCBNTVUmIzM5O3MgcmVmZXJlbmNlLlxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTEyNC0gKiBTZWUga3ZtX3RkcF9tbXVfYWxsb2Nfcm9vdCgpLlxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oPTU3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tbXVfcGFnZSAqdGRwX21tdV9nZXRfcm9vdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtNjUtXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaDo2Njpib29sIGt2bV90ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgZmx1c2gpO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg6Njc6Ym9vbCBrdm1fdGRwX21tdV96YXBfcG9zc2libGVfbnhfaHVnZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTY4LVx0XHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaDo2OTp2b2lkIGt2bV90ZHBfbW11X3phcF9hbGwoc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTcwLXZvaWQga3ZtX3RkcF9tbXVfaW52YWxpZGF0ZV9yb290cyhzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC03MS1cdFx0XHRcdCAgZW51bSBrdm1fdGRwX21tdV9yb290X3R5cGVzIHJvb3RfdHlwZXMpO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg6NzI6dm9pZCBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoc3RydWN0IGt2bSAqa3ZtLCBib29sIHNoYXJlZCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC03My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ2MTgKCQkJCQkJCW91dHB1dDogMTkzCgkJCQkJCQl0aG91Z2h0czogODUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFREUCBNTVUgUmVsYXRlZCBGdW5jdGlvbnMgYW5kIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIHRyYWNpbmcgdGhlIGNhbGwgcGF0aHMgZm9yIHNvbWUga2V5IGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSBgdGRwX21tdV96YXBfbGVhZnNgIGlzIHRoZSB0YXJnZXQsIGNhbGxlZCBieSBib3RoIGBrdm1fdGRwX21tdV96YXBfbGVhZnNgIGFuZCBga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlYC4gYGt2bV90ZHBfbW11X3phcF9sZWFmc2AgaW4gdHVybiBpcyBjYWxsZWQgYnkgYGt2bV96YXBfZ2ZuX3JhbmdlYC4gQW5kIGBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VgIGlzIGNhbGxlZCBieSBga3ZtX3VubWFwX2dmbl9yYW5nZWAsIHRocm91Z2ggbW11IG5vdGlmaWVycy4KCk5leHQsIEkmIzM5O20gY3Jvc3MtcmVmZXJlbmNpbmcgdGhlc2UgZnVuY3Rpb25zIHdpdGggdGhlaXIgZGVmaW5pdGlvbnMuIEkmIzM5O3ZlIGxvY2F0ZWQgYHRkcF9pdGVyX25leHRfcG9zdF9vcmRlcmAgaW4gYHRkcF9pdGVyLmNgLCBhbmQgYGt2bV90ZHBfbW11X3phcF9sZWFmc2AgYW5kIGBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VgIGluIGB0ZHBfbW11LmNgLiBBbHNvIGBrdm1femFwX2dmbl9yYW5nZWAgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLgoKTm93LCBJJiMzOTttIGNoZWNraW5nIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gYEtWTWAsIGBLVk1fSU5URUxgL2BLVk1fQU1EYCwgYW5kIGBYODZfNjRgIGFyZSBkZWZpbml0ZWx5IGluIHRoZSBtaXguIEkmIzM5O20gdmVyaWZ5aW5nIHRoYXQgYEtWTV9JTlRFTGAgb3IgYEtWTV9BTURgIGFyZSBuZWNlc3NhcnkgdG8gZW5hYmxlIGBLVk1fWDg2YCwgYXMgZGVmaW5lZCBpbiB0aGUgYEtjb25maWdgIGZpbGUuIEkgc2VlIHRoZSBkZXBlbmRlbmN5OiBgS1ZNX1g4NmAgaXMgZGVmaW5lZCBhcyBhIHRyaXN0YXRlIHN5bWJvbCBkZXBlbmRlbnQgb24gYEtWTWAgaWYgZWl0aGVyIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYCBpcyBub3QgJiMzNDtuJiMzNDsuIEFsc28gYFg4Nl82NGAgaXMgbmVjZXNzYXJ5IGZvciB0aGUgY29tcGlsYXRpb24gb2YgYHRkcF9pdGVyLm9gIGFuZCBgdGRwX21tdS5vYCBiZWNhdXNlIG9mIHRoZSBtYWtlZmlsZSBkZXBlbmRlbmN5LgoKU28sIGZvciBgRW5hYmxlQ29uZmlnc2AsIEkmIzM5O2xsIGluY2x1ZGUgYEtWTWAsIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIGFuZCBgWDg2XzY0YC4KClRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgdGhlc2Uga2V5IGZ1bmN0aW9uczogYGt2bV90ZHBfbW11X3phcF9sZWFmc2AsIGB0ZHBfaXRlcl9uZXh0X3Bvc3Rfb3JkZXJgLCBga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlYCwgYW5kIGBrdm1femFwX2dmbl9yYW5nZWAuCgpGaW5hbGx5LCBJJiMzOTttIGVuc3VyaW5nIGV2ZXJ5dGhpbmcgYWxpZ25zIHdpdGggdGhlIGluc3RydWN0aW9ucywgaW5jbHVkaW5nIGBXb3J0aEZ1enppbmc6IHRydWVgLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiBUaGlzIGlzIGFib3V0IHVwZGF0aW5nIHRoZSBURFAgTU1VIGl0ZXJhdG9yIGZvciBwb3N0LW9yZGVyIHRyYXZlcnNhbC4gVGhpcyBhbGxvd3MgdGhlIHN5c3RlbSB0byBkZXRlY3QgY29tcGxldGVkIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgYW5kIGltbWVkaWF0ZWx5IHphcCB0aGVtLiBBbHNvLCB0aGlzIG1lYW5zIGZsdXNoaW5nIHJlbW90ZSBUTEJzIGlmIHNoYWRvdyBwYWdlcyB3ZXJlIHJlbW92ZWQuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgbm9uLXN0YXRpYyBhbmQgbm9uLWlubGluZWQgQVBJIGZ1bmN0aW9ucy4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IHNwZWNpZmllZCwgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeC4KCkFscmlnaHQsIEkmIzM5O20gcmVhZHkgdG8gY3JhZnQgdGhhdCBgc2V0LXJlc3VsdHNgIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7WDg2XzY0JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3RkcF9tbXVfemFwX2xlYWZzJiMzNDssCiAgICAmIzM0O3RkcF9pdGVyX25leHRfcG9zdF9vcmRlciYjMzQ7LAogICAgJiMzNDtrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2UmIzM0OywKICAgICYjMzQ7a3ZtX3phcF9nZm5fcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBwb3N0LW9yZGVyIHRyYXZlcnNhbCBzdXBwb3J0IHRvIHRoZSBLVk0geDg2IFREUCBNTVUgaXRlcmF0b3IgYW5kIHVwZGF0ZXMgdGRwX21tdV96YXBfbGVhZnMoKSB0byBhdXRvbWF0aWNhbGx5IHphcCBjb21wbGV0ZWQgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyAoYW5kIGhhbmRsZSB0aGUgY29ycmVzcG9uZGluZyByZW1vdGUgVExCIGZsdXNoIHdoZW4gc2hhZG93IHBhZ2VzIGFyZSBmcmVlZCkuIFRoaXMgYWx0ZXJzIGNvcmUgTU1VIHBhZ2UtdGFibGUgemFwcGluZyBiZWhhdmlvciBpbiBLVk0geDg2IGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7WDg2XzY0JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3RkcF9tbXVfemFwX2xlYWZzJiMzNDssCiAgICAmIzM0O3RkcF9pdGVyX25leHRfcG9zdF9vcmRlciYjMzQ7LAogICAgJiMzNDtrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2UmIzM0OywKICAgICYjMzQ7a3ZtX3phcF9nZm5fcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBwb3N0LW9yZGVyIHRyYXZlcnNhbCBzdXBwb3J0IHRvIHRoZSBLVk0geDg2IFREUCBNTVUgaXRlcmF0b3IgYW5kIHVwZGF0ZXMgdGRwX21tdV96YXBfbGVhZnMoKSB0byBhdXRvbWF0aWNhbGx5IHphcCBjb21wbGV0ZWQgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyAoYW5kIGhhbmRsZSB0aGUgY29ycmVzcG9uZGluZyByZW1vdGUgVExCIGZsdXNoIHdoZW4gc2hhZG93IHBhZ2VzIGFyZSBmcmVlZCkuIFRoaXMgYWx0ZXJzIGNvcmUgTU1VIHBhZ2UtdGFibGUgemFwcGluZyBiZWhhdmlvciBpbiBLVk0geDg2IGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDoyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJiMzOTtzIFREUCBNTVUgaXRlcmF0aW9uIGFuZCBwYWdlIHRhYmxlIHphcHBpbmcgbG9naWMgdG8gemFwIGNvbXBsZXRlZCBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzIGR1cmluZyBsZWFmIHphcHBpbmcuIEl0IGludHJvZHVjZXMgYSBgc3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50YCBzdHJ1Y3R1cmUsIHdoaWNoIGlzIHplcm8taW5pdGlhbGl6ZWQgb24gdGhlIHN0YWNrIChgZXZlbnQgPSB7fWApIGFuZCB3aG9zZSBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgcG9wdWxhdGVkIGluIGB0cnlfc3RlcF91cCgpYCB3aGVuZXZlciBgZXZlbnQtXHUwMDNldmFsaWRgIGlzIHNldCB0byB0cnVlLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGxlZnQgdW5pbml0aWFsaXplZCwgYW5kIG5vIGNvbnRyb2wtZmxvdyBkZWNpc2lvbnMgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIFBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGlzIGNoYW5nZSAoZS5nLiBUTEIgZmx1c2hpbmcgY29ycmVjdG5lc3MsIFJDVSBsaWZlY3ljbGUsIG9yIFNQVEUgbW9kaWZpY2F0aW9uIHJhY2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjY0YjE5N2MzM2IzZGQ2MzI4YTA1OGQyNjU3MjcyYzNlYjVlOTVlYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDEwOjIwOjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jCmluZGV4IDllMTdiZmE4MDkwMTEuLmQ5YmU0Mjk4NDEwZDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMKQEAgLTEzMiw3ICYjNDM7MTMyLDggQEAgc3RhdGljIGJvb2wgdHJ5X3N0ZXBfc2lkZShzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpCiAgKiBjYW4gY29udGludWUgZnJvbSB0aGUgbmV4dCBlbnRyeSBpbiB0aGUgcGFyZW50IHBhZ2UgdGFibGUuIFJldHVybnMgdHJ1ZSBvbiBhCiAgKiBzdWNjZXNzZnVsIHN0ZXAgdXAsIGZhbHNlIGlmIGFscmVhZHkgaW4gdGhlIHJvb3QgcGFnZS4KICAqLwotc3RhdGljIGJvb2wgdHJ5X3N0ZXBfdXAoc3RydWN0IHRkcF9pdGVyICppdGVyKQomIzQzO3N0YXRpYyBib29sIHRyeV9zdGVwX3VwKHN0cnVjdCB0ZHBfaXRlciAqaXRlciwKJiM0MzsJCQlzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgKmV2ZW50KQogewogCWlmIChpdGVyLSZndDtsZXZlbCA9PSBpdGVyLSZndDtyb290X2xldmVsKQogCQlyZXR1cm4gZmFsc2U7CkBAIC0xNDEsNiAmIzQzOzE0MiwxNCBAQCBzdGF0aWMgYm9vbCB0cnlfc3RlcF91cChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpCiAJaXRlci0mZ3Q7Z2ZuID0gZ2ZuX3JvdW5kX2Zvcl9sZXZlbChpdGVyLSZndDtnZm4sIGl0ZXItJmd0O2xldmVsKTsKIAl0ZHBfaXRlcl9yZWZyZXNoX3NwdGVwKGl0ZXIpOwogCiYjNDM7CWlmIChldmVudCAmYW1wOyZhbXA7ICFldmVudC0mZ3Q7dmFsaWQpIHsKJiM0MzsJCWV2ZW50LSZndDtzcHRlcCA9IGl0ZXItJmd0O3NwdGVwOwomIzQzOwkJZXZlbnQtJmd0O29sZF9zcHRlID0gaXRlci0mZ3Q7b2xkX3NwdGU7CiYjNDM7CQlldmVudC0mZ3Q7Z2ZuID0gaXRlci0mZ3Q7Z2ZuOwomIzQzOwkJZXZlbnQtJmd0O2xldmVsID0gaXRlci0mZ3Q7bGV2ZWw7CiYjNDM7CQlldmVudC0mZ3Q7dmFsaWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE2MCw4ICYjNDM7MTY5LDEyIEBAIHN0YXRpYyBib29sIHRyeV9zdGVwX3VwKHN0cnVjdCB0ZHBfaXRlciAqaXRlcikKICAqICAgIFNQVEUgd2lsbCBoYXZlIGFscmVhZHkgYmVlbiB2aXNpdGVkLCBhbmQgc28gdGhlIGl0ZXJhdG9yIG11c3QgYWxzbyBzdGVwCiAgKiAgICB0byB0aGUgc2lkZSBhZ2Fpbi4KICAqLwotdm9pZCB0ZHBfaXRlcl9uZXh0KHN0cnVjdCB0ZHBfaXRlciAqaXRlcikKJiM0MztzdGF0aWMgdm9pZCBfX3RkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyLAomIzQzOwkJCSAgICBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgKmV2ZW50KQogewomIzQzOwlpZiAoZXZlbnQpCiYjNDM7CQlldmVudC0mZ3Q7dmFsaWQgPSBmYWxzZTsKJiM0MzsKIAlpZiAoaXRlci0mZ3Q7eWllbGRlZCkgewogCQl0ZHBfaXRlcl9yZXN0YXJ0KGl0ZXIpOwogCQlyZXR1cm47CkBAIC0xNzMsNyAmIzQzOzE4NiwxNyBAQCB2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKQogCWRvIHsKIAkJaWYgKHRyeV9zdGVwX3NpZGUoaXRlcikpCiAJCQlyZXR1cm47Ci0JfSB3aGlsZSAodHJ5X3N0ZXBfdXAoaXRlcikpOwomIzQzOwl9IHdoaWxlICh0cnlfc3RlcF91cChpdGVyLCBldmVudCkpOwogCWl0ZXItJmd0O3ZhbGlkID0gZmFsc2U7CiB9CiAKJiM0Mzt2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKQomIzQzO3sKJiM0MzsJX190ZHBfaXRlcl9uZXh0KGl0ZXIsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRkcF9pdGVyX25leHRfcG9zdF9vcmRlcihzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsCiYjNDM7CQkJICAgICAgc3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50ICpldmVudCkKJiM0Mzt7CiYjNDM7CV9fdGRwX2l0ZXJfbmV4dChpdGVyLCBldmVudCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oCmluZGV4IGY4OThkOGQwZDkzYzIuLmI3ZTI2MDVmYmY5ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgKQEAgLTEyMyw2ICYjNDM7MTIzLDE0IEBAIHN0cnVjdCB0ZHBfaXRlciB7CiAJYm9vbCB5aWVsZGVkOwogfTsKIAomIzQzO3N0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCB7CiYjNDM7CXRkcF9wdGVwX3Qgc3B0ZXA7CiYjNDM7CXU2NCBvbGRfc3B0ZTsKJiM0MzsJZ2ZuX3QgZ2ZuOwomIzQzOwlpbnQgbGV2ZWw7CiYjNDM7CWJvb2wgdmFsaWQ7CiYjNDM7fTsKJiM0MzsKIC8qCiAgKiBJdGVyYXRlcyBvdmVyIGV2ZXJ5IFNQVEUgbWFwcGluZyB0aGUgR0ZOIHJhbmdlIFtzdGFydCwgZW5kKSBpbiBhCiAgKiBwcmVvcmRlciB0cmF2ZXJzYWwuCkBAIC0xNDUsNiAmIzQzOzE1Myw4IEBAIHRkcF9wdGVwX3Qgc3B0ZV90b19jaGlsZF9wdCh1NjQgcHRlLCBpbnQgbGV2ZWwpOwogdm9pZCB0ZHBfaXRlcl9zdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsCiAJCSAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cyk7CiB2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKTsKJiM0Mzt2b2lkIHRkcF9pdGVyX25leHRfcG9zdF9vcmRlcihzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsCiYjNDM7CQkJICAgICAgc3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50ICpldmVudCk7CiB2b2lkIHRkcF9pdGVyX3Jlc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyKTsKIAogI2VuZGlmIC8qIF9fS1ZNX1g4Nl9NTVVfVERQX0lURVJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYwppbmRleCA0NGRhZDEwNmZhZDE5Li44MjQ0NmM0NzM3Zjc5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYwpAQCAtOTIzLDYgJiM0Mzs5MjMsMzggQEAgYm9vbCBrdm1fdGRwX21tdV96YXBfcG9zc2libGVfbnhfaHVnZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyBib29sIHRkcF9tbXVfemFwX2NvbXBsZXRlZF9lbXB0eV9sZWFmX3B0KHN0cnVjdCBrdm0gKmt2bSwKJiM0MzsJCQkJCQlzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgKmV2ZW50LAomIzQzOwkJCQkJCWdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsCiYjNDM7CQkJCQkJdGRwX3B0ZXBfdCB6YXBwZWRfbGVhZl9wdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fbW11X3BhZ2UgKmNoaWxkX3NwOwomIzQzOwomIzQzOwlpZiAoZXZlbnQtJmd0O2xldmVsICE9IFBHX0xFVkVMXzJNIHx8CiYjNDM7CSAgICAhaXNfc2hhZG93X3ByZXNlbnRfcHRlKGV2ZW50LSZndDtvbGRfc3B0ZSkgfHwKJiM0MzsJICAgIGlzX2xhc3Rfc3B0ZShldmVudC0mZ3Q7b2xkX3NwdGUsIGV2ZW50LSZndDtsZXZlbCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChldmVudC0mZ3Q7Z2ZuICZsdDsgc3RhcnQgfHwKJiM0MzsJICAgIGV2ZW50LSZndDtnZm4gJiM0MzsgS1ZNX1BBR0VTX1BFUl9IUEFHRShldmVudC0mZ3Q7bGV2ZWwpICZndDsgZW5kKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBMZWF2ZSBwcm9kdWN0aXZlIGxlYWYgdGFibGVzIGluIHBsYWNlIHRvIGF2b2lkIHJlZmF1bHQgY2h1cm4uICovCiYjNDM7CWlmICh6YXBwZWRfbGVhZl9wdCA9PSBldmVudC0mZ3Q7c3B0ZXApCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWNoaWxkX3NwID0gc3B0ZV90b19jaGlsZF9zcChldmVudC0mZ3Q7b2xkX3NwdGUpOwomIzQzOwlpZiAoaXNfbWlycm9yX3NwKGNoaWxkX3NwKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKGNoaWxkX3NwLSZndDtyb2xlLmxldmVsICE9IFBHX0xFVkVMXzRLKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwl0ZHBfbW11X3NldF9zcHRlKGt2bSwgZXZlbnQtJmd0O3NwdGVwLCBldmVudC0mZ3Q7b2xkX3NwdGUsCiYjNDM7CQkJIFNIQURPV19OT05QUkVTRU5UX1ZBTFVFLCBldmVudC0mZ3Q7Z2ZuLCBldmVudC0mZ3Q7bGV2ZWwpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogSWYgY2FuX3lpZWxkIGlzIHRydWUsIHdpbGwgcmVsZWFzZSB0aGUgTU1VIGxvY2sgYW5kIHJlc2NoZWR1bGUgaWYgdGhlCiAgKiBzY2hlZHVsZXIgbmVlZHMgdGhlIENQVSBvciB0aGVyZSBpcyBjb250ZW50aW9uIG9uIHRoZSBNTVUgbG9jay4gSWYgdGhpcwpAQCAtOTMzLDcgJiM0Mzs5NjUsMTAgQEAgYm9vbCBrdm1fdGRwX21tdV96YXBfcG9zc2libGVfbnhfaHVnZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwKIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCwKIAkJCSAgICAgIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgY2FuX3lpZWxkLCBib29sIGZsdXNoKQogewomIzQzOwlzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgZXZlbnQgPSB7fTsKIAlzdHJ1Y3QgdGRwX2l0ZXIgaXRlcjsKJiM0MzsJdGRwX3B0ZXBfdCB6YXBwZWRfbGVhZl9wdCA9IE5VTEw7CiYjNDM7CWJvb2wgcmVtb3ZlZF9zcCA9IGZhbHNlOwogCiAJZW5kID0gbWluKGVuZCwgdGRwX21tdV9tYXhfZ2ZuX2V4Y2x1c2l2ZSgpKTsKIApAQCAtOTQxLDMzICYjNDM7OTc2LDU2IEBAIHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCwKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCWZvcl9lYWNoX3RkcF9wdGVfbWluX2xldmVsKGl0ZXIsIGt2bSwgcm9vdCwgUEdfTEVWRUxfNEssIHN0YXJ0LCBlbmQpIHsKJiM0MzsJdGRwX2l0ZXJfc3RhcnQoJmFtcDtpdGVyLCByb290LCBQR19MRVZFTF80Sywgc3RhcnQsCiYjNDM7CQkgICAgICAga3ZtX2dmbl9yb290X2JpdHMoa3ZtLCByb290KSk7CiYjNDM7CXdoaWxlIChpdGVyLnZhbGlkICZhbXA7JmFtcDsgaXRlci5nZm4gJmx0OyBlbmQpIHsKIAkJaWYgKGNhbl95aWVsZCAmYW1wOyZhbXA7CiAJCSAgICB0ZHBfbW11X2l0ZXJfY29uZF9yZXNjaGVkKGt2bSwgJmFtcDtpdGVyLCBmbHVzaCwgZmFsc2UpKSB7CiAJCQlmbHVzaCA9IGZhbHNlOwomIzQzOwkJCXRkcF9pdGVyX25leHQoJmFtcDtpdGVyKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKCFpc19zaGFkb3dfcHJlc2VudF9wdGUoaXRlci5vbGRfc3B0ZSkgfHwKLQkJICAgICFpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpCi0JCQljb250aW51ZTsKJiM0MzsJCWlmIChpc19zaGFkb3dfcHJlc2VudF9wdGUoaXRlci5vbGRfc3B0ZSkgJmFtcDsmYW1wOwomIzQzOwkJICAgIGlzX2xhc3Rfc3B0ZShpdGVyLm9sZF9zcHRlLCBpdGVyLmxldmVsKSkgewomIzQzOwkJCWlmIChpdGVyLmxldmVsID09IFBHX0xFVkVMXzRLKSB7CiYjNDM7CQkJCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwOwogCi0JCXRkcF9tbXVfaXRlcl9zZXRfc3B0ZShrdm0sICZhbXA7aXRlciwgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUpOwomIzQzOwkJCQlzcCA9IHNwdGVwX3RvX3NwKHJjdV9kZXJlZmVyZW5jZShpdGVyLnNwdGVwKSk7CiYjNDM7CQkJCXphcHBlZF9sZWFmX3B0ID0gc3AtJmd0O3B0ZXA7CiYjNDM7CQkJfQogCi0JCS8qCi0JCSAqIFphcHBpbmdzIFNQVEVzIGluIGludmFsaWQgcm9vdHMgZG9lc24mIzM5O3QgcmVxdWlyZSBhIFRMQiBmbHVzaCwKLQkJICogc2VlIGt2bV90ZHBfbW11X3phcF9pbnZhbGlkYXRlZF9yb290cygpIGZvciBkZXRhaWxzLgotCQkgKi8KLQkJaWYgKCFyb290LSZndDtyb2xlLmludmFsaWQpCi0JCQlmbHVzaCA9IHRydWU7Ci0JfQomIzQzOwkJCXRkcF9tbXVfaXRlcl9zZXRfc3B0ZShrdm0sICZhbXA7aXRlciwKJiM0MzsJCQkJCSAgICAgIFNIQURPV19OT05QUkVTRU5UX1ZBTFVFKTsKIAotCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJCS8qCiYjNDM7CQkJICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2VzbiYjMzk7dCByZXF1aXJlIGEgVExCIGZsdXNoLAomIzQzOwkJCSAqIHNlZSBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoKSBmb3IgZGV0YWlscy4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoIXJvb3QtJmd0O3JvbGUuaW52YWxpZCkKJiM0MzsJCQkJZmx1c2ggPSB0cnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJdGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyKCZhbXA7aXRlciwgJmFtcDtldmVudCk7CiYjNDM7CQlpZiAoZXZlbnQudmFsaWQgJmFtcDsmYW1wOwomIzQzOwkJICAgIHRkcF9tbXVfemFwX2NvbXBsZXRlZF9lbXB0eV9sZWFmX3B0KGt2bSwgJmFtcDtldmVudCwgc3RhcnQsCiYjNDM7CQkJCQkJCWVuZCwgemFwcGVkX2xlYWZfcHQpKSB7CiYjNDM7CQkJaWYgKCFyb290LSZndDtyb2xlLmludmFsaWQpCiYjNDM7CQkJCWZsdXNoID0gdHJ1ZTsKJiM0MzsJCQlyZW1vdmVkX3NwID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJfQogCiAJLyoKLQkgKiBCZWNhdXNlIHRoaXMgZmxvdyB6YXBzIF9vbmx5XyBsZWFmIFNQVEVzLCB0aGUgY2FsbGVyIGRvZXNuJiMzOTt0IG5lZWQKLQkgKiB0byBwcm92aWRlIFJDVSBwcm90ZWN0aW9uIGFzIG5vICYjMzk7c3RydWN0IGt2bV9tbXVfcGFnZSYjMzk7IHdpbGwgYmUgZnJlZWQuCiYjNDM7CSAqIElmIGFueSBzaGFkb3cgcGFnZXMgd2VyZSByZW1vdmVkLCBzZXJ2aWNlIHBlbmRpbmcgVExCIGZsdXNoZXMgYmVmb3JlCiYjNDM7CSAqIGRyb3BwaW5nIFJDVSBwcm90ZWN0aW9uLCBhcyByZXF1aXJlZCBieSB0aGUgVERQIE1NVSBpdGVyYXRvci4KIAkgKi8KJiM0MzsJaWYgKHJlbW92ZWRfc3AgJmFtcDsmYW1wOyBmbHVzaCkgewomIzQzOwkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7CiYjNDM7CQlmbHVzaCA9IGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiBmbHVzaDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDczOQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDkyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBSaXNrIEFzc2Vzc21lbnQgZm9yIEtWTSBURFAgTU1VIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBjb25jZXJuaW5nIHRoZSBLVk0gVERQIE1NVSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgaW4gYHRkcF9pdGVyLmNgLCBgdGRwX2l0ZXIuaGAsIGFuZCBgdGRwX21tdS5jYC4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiBhbmFseXNpcy4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgKmRvaW5nKi4gSSYjMzk7bSBzZWVpbmcgdGhlIGludHJvZHVjdGlvbiBvZiBgc3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50YC4gTG9va2luZyBjbG9zZWx5IGF0IGB0ZHBfaXRlci5jYCwgdGhpcyBzdHJ1Y3QgYXBwZWFycyB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYW4gaXRlcmF0b3IuIEl0IGxvb2tzIGxpa2UgaXQgaG9sZHMgc3RhdGUgaW5mb3JtYXRpb24gZHVyaW5nIGEgdHJhdmVyc2FsLCBlc3BlY2lhbGx5IHRoZSBgX190ZHBfaXRlcl9uZXh0YCBhbmQgYHRyeV9zdGVwX3VwYCBmdW5jdGlvbnMgYXJlIGludGVyZXN0aW5nLiBUaGUgaW1wb3J0YW50IHBvaW50IEkmIzM5O3ZlIG5vdGljZWQgaGVyZSBpcyB0aGUgaW5pdGlhbGl6YXRpb24gc3RyYXRlZ3kgZm9yIHRoZSBldmVudC4gSW4gYHRkcF9tbXVfemFwX2xlYWZzYCB0aGUgYGV2ZW50YCBzdHJ1Y3R1cmUgaXMgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2suCgpXaXRoaW4gYHRkcF9pdGVyX25leHRfcG9zdF9vcmRlcmAsIHRoZSBgZXZlbnQtJmd0O3ZhbGlkYCBpcyBpbW1lZGlhdGVseSBzZXQgdG8gZmFsc2UuIFN1YnNlcXVlbnRseSwgaWYgYHRyeV9zdGVwX3VwYCBpcyBleGVjdXRlZCwgdGhlIHN0cnVjdCBldmVudCBmaWVsZHMgYXJlIHBvcHVsYXRlZCwgbmFtZWx5IGBzcHRlcGAsIGBvbGRfc3B0ZWAsIGBnZm5gLCBgbGV2ZWxgLCBhbmQgYHZhbGlkYCBhcmUgdXBkYXRlZC4gSWYgYGV2ZW50LnZhbGlkYCBpcyB0cnVlLCB0aGVuIGB0ZHBfbW11X3phcF9jb21wbGV0ZWRfZW1wdHlfbGVhZl9wdGAgcmVhZHMgZGF0YSBmcm9tIHRoZXNlIGZpZWxkcy4gSXQgbWFrZXMgYSBjaGVjayBiYXNlZCBvbiBgZXZlbnQudmFsaWRgLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogSXMgdGhlcmUgYW55IHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlPyBCYXNlZCBvbiBteSBhbmFseXNpcywgbm8uIFRoZSBgZXZlbnRgIHN0cnVjdCBpcyBpbml0aWFsaXplZCB0byB6ZXJvIGluaXRpYWxseSwgYW5kIGFsbCBmaWVsZHMgYXJlIHdyaXR0ZW4gKmJlZm9yZSogYmVpbmcgcmVhZCwgZWl0aGVyIGluIGB0cnlfc3RlcF91cGAgb3Igd2hlbiBgZXZlbnQudmFsaWRgIGlzIHRydWUuIFRoZXJlJiMzOTtzIG5vIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGluZGljYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGNvcGllZCBhbnl3aGVyZS4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSB0eXBpY2FsIG1lbW9yeSBhbGxvY2F0aW9uIHBpdGZhbGxzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIHZhbHVlcy4gVGhpcyBpcyBpbnRlcm5hbCBLVk0gcGFnZSB0YWJsZSBpdGVyYXRpb24sIHphcHBpbmcgbG9naWMuCgpTbywgbGV0JiMzOTtzIHN1bW1hcml6ZToKKiAgIGBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnRgIGlzIGluaXRpYWxpemVkIHRvIHplcm8KKiAgIGV2ZW50IGlzIHBvcHVsYXRlZCB3aXRoIHZhbGlkIGRhdGEKKiAgIGBldmVudC0mZ3Q7dmFsaWRgIGNoZWNrIHByb3RlY3RzIHJlYWRzIG9mIHRoZSBkYXRhCgpNeSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBLTVNBTiBjb25jZXJucy4gSXQmIzM5O3MgZXNzZW50aWFsbHkgaW50ZXJuYWwgS1ZNIFREUCBNTVUgcGFnZSB0YWJsZSBpdGVyYXRpb24gYW5kIHphcHBpbmcgYW5kIFRMQiBmbHVzaCBmb3IgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyAocGFnZSB0YWJsZSBtYW5hZ2VtZW50KS4gVGhlIGRhdGEgaXMgbWFuYWdlZCBpbnRlcm5hbGx5IGFuZCBkb2VzbiYjMzk7dCBsZWFrIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG91YmxlIGNoZWNrIHRoYXQgSSBkaWRuJiMzOTt0IG1pc3Mgc29tZXRoaW5nLiBJIGNhbiB1c2UgYGdyZXBwZXJgIG9yIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIHN1YnRsZSBkZXRhaWwuIFRoaXMgbG9va3MgY2xlYW4gZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLiBJIHRoaW5rIGl0JiMzOTtzIHNhZmUgdG8gZXhjbHVkZSBmcm9tIEtNU0FOIHNjcnV0aW55LiBJIHdpbGwgcXVpY2tseSBjaGVjayBhcm91bmQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkcF9tbXVfemFwX2xlYWZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz03MTEzPXZvaWQga3ZtX3phcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm5fc3RhcnQsIGdmbl90IGdmbl9lbmQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTI4LVx0aWYgKHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzEyOTpcdFx0Zmx1c2ggPSBrdm1fdGRwX21tdV96YXBfbGVhZnMoa3ZtLCBnZm5fc3RhcnQsIGdmbl9lbmQsIGZsdXNoKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzEzMC1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz05MjY9c3RhdGljIGJvb2wgdGRwX21tdV96YXBfY29tcGxldGVkX2VtcHR5X2xlYWZfcHQoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTk2NC0gKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjk2NTpzdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy05NjYtXHRcdFx0ICAgICAgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgYm9vbCBjYW5feWllbGQsIGJvb2wgZmx1c2gpXG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzNi0gKi9cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjEwMzc6Ym9vbCBrdm1fdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGZsdXNoKVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzOC17XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTA0Mi1cdGZvcl9lYWNoX3ZhbGlkX3RkcF9tbXVfcm9vdF95aWVsZF9zYWZlKGt2bSwgcm9vdCwgLTEpXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzoxMDQzOlx0XHRmbHVzaCA9IHRkcF9tbXVfemFwX2xlYWZzKGt2bSwgcm9vdCwgc3RhcnQsIGVuZCwgdHJ1ZSwgZmx1c2gpO1xuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTA0NC1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz0xMzY1PWJvb2wga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEzNzMtXHRfX2Zvcl9lYWNoX3RkcF9tbXVfcm9vdF95aWVsZF9zYWZlKGt2bSwgcm9vdCwgcmFuZ2UtXHUwMDNlc2xvdC1cdTAwM2Vhc19pZCwgdHlwZXMpXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzoxMzc0Olx0XHRmbHVzaCA9IHRkcF9tbXVfemFwX2xlYWZzKGt2bSwgcm9vdCwgcmFuZ2UtXHUwMDNlc3RhcnQsIHJhbmdlLVx1MDAzZWVuZCxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEzNzUtXHRcdFx0XHRcdCAgcmFuZ2UtXHUwMDNlbWF5X2Jsb2NrLCBmbHVzaCk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg9NTc9c3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21tdV9wYWdlICp0ZHBfbW11X2dldF9yb290KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC02NS1cbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oOjY2OmJvb2wga3ZtX3RkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwgYm9vbCBmbHVzaCk7XG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC02Ny1ib29sIGt2bV90ZHBfbW11X3phcF9wb3NzaWJsZV9ueF9odWdlX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzMwCgkJCQkJCQlvdXRwdXQ6IDE4NwoJCQkJCQkJdGhvdWdodHM6IDEzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBObyBLTVNBTiBDb25jZXJucyBIZXJlKioKCk9rYXksIHNvIEkmIzM5O3ZlIHJldmlld2VkIHRoaXMgcHJvcG9zZWQgcGF0Y2gsIGFuZCBmcmFua2x5LCBpdCYjMzk7cyBwcmV0dHkgY2xlYW4uIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIG9wdGltaXppbmcgdGhlIEtWTSBURFAgTU1VIGJ5IG1vZGlmeWluZyB0aGUgaXRlcmF0b3IgYW5kIHBhZ2UgdGFibGUgemFwcGluZyBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhZGRpbmcgcG9zdC1vcmRlciB0cmF2ZXJzYWwgZXZlbnQgbm90aWZpY2F0aW9ucyB0byB6YXAgKmNvbXBsZXRlZCogZW1wdHkgbGVhZiBwYWdlIHRhYmxlcy4KCkkmIzM5O20gc2VlaW5nIHplcm8gaW5pdGlhbGl6YXRpb24gb2YgYWxsIHZhcmlhYmxlcywgbGlrZSB0aGF0IGBldmVudCA9IHt9YCBjYWxsLiBUaGF0JiMzOTtzIGdvb2QgcHJhY3RpY2UuIFBsdXMsIHRoZXJlJiMzOTtzIGFic29sdXRlbHkgbm8gaW5kaWNhdGlvbiBvZiBhbnkgdW5pbml0aWFsaXplZCBkYXRhIGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gTm8gY29waWVzIGFyZSBtYWRlIGFuZCBubyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyB1c2VkIGluIGJyYW5jaGVzIG9yIG90aGVyIGNvbnRyb2wgZmxvd3MuCgpGcmFua2x5LCBhbnkgYnVncyB0aGF0ICpjb3VsZCogYXJpc2Ug4oCTIHBhZ2UgdGFibGUgemFwcGluZyBpc3N1ZXMsIFRMQiBpbnZhbGlkYXRpb24gcHJvYmxlbXMsIFJDVSByYWNlIGNvbmRpdGlvbnMsIG9yIGNvbmN1cnJlbnQgTU1VIG1vZGlmaWNhdGlvbiBpc3N1ZXMg4oCTIGFyZSBnb2luZyB0byBiZSBjYXVnaHQgYnkgdGhlIHN0YW5kYXJkIHRvb2xzIHdlJiMzOTt2ZSBnb3QgaW4gcGxhY2U6IEtBU0FOLCBsb2NrZGVwLCBhbmQgb2YgY291cnNlLCBvdXIgZXhpc3RpbmcgZnVuY3Rpb25hbCB0ZXN0cy4gVGhlc2Ugc2hvdWxkIGNvdmVyIHVzLgoKR2l2ZW4gYWxsIG9mIHRoYXQsIHRoZXJlJiMzOTtzIGFic29sdXRlbHkgbm8gcmVhc29uIHRvIGZsYWcgdGhpcyBhcyBhIHBvdGVudGlhbCBLTVNBTiBpc3N1ZS4gVGhpcyBsb29rcyBzb2xpZCBmcm9tIG15IHBlcnNwZWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0mIzM5O3MgVERQIE1NVSBpdGVyYXRpb24gYW5kIHBhZ2UgdGFibGUgemFwcGluZyBsb2dpYyB0byB6YXAgY29tcGxldGVkIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgZHVyaW5nIGxlYWYgemFwcGluZy4gSXQgaW50cm9kdWNlcyBhIGBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnRgIHN0cnVjdHVyZSwgd2hpY2ggaXMgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2sgKGBldmVudCA9IHt9YCkgYW5kIHdob3NlIGZpZWxkcyBhcmUgZXhwbGljaXRseSBwb3B1bGF0ZWQgaW4gYHRyeV9zdGVwX3VwKClgIHdoZW5ldmVyIGBldmVudC1cdTAwM2V2YWxpZGAgaXMgc2V0IHRvIHRydWUuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgbGVmdCB1bmluaXRpYWxpemVkLCBhbmQgbm8gY29udHJvbC1mbG93IGRlY2lzaW9ucyBkZXBlbmQgb24gdW5pbml0aWFsaXplZCBzdGF0ZS4gUG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoaXMgY2hhbmdlIChlLmcuIFRMQiBmbHVzaGluZyBjb3JyZWN0bmVzcywgUkNVIGxpZmVjeWNsZSwgb3IgU1BURSBtb2RpZmljYXRpb24gcmFjZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJiMzOTtzIFREUCBNTVUgaXRlcmF0aW9uIGFuZCBwYWdlIHRhYmxlIHphcHBpbmcgbG9naWMgdG8gemFwIGNvbXBsZXRlZCBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzIGR1cmluZyBsZWFmIHphcHBpbmcuIEl0IGludHJvZHVjZXMgYSBgc3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50YCBzdHJ1Y3R1cmUsIHdoaWNoIGlzIHplcm8taW5pdGlhbGl6ZWQgb24gdGhlIHN0YWNrIChgZXZlbnQgPSB7fWApIGFuZCB3aG9zZSBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgcG9wdWxhdGVkIGluIGB0cnlfc3RlcF91cCgpYCB3aGVuZXZlciBgZXZlbnQtXHUwMDNldmFsaWRgIGlzIHNldCB0byB0cnVlLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGxlZnQgdW5pbml0aWFsaXplZCwgYW5kIG5vIGNvbnRyb2wtZmxvdyBkZWNpc2lvbnMgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIFBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGlzIGNoYW5nZSAoZS5nLiBUTEIgZmx1c2hpbmcgY29ycmVjdG5lc3MsIFJDVSBsaWZlY3ljbGUsIG9yIFNQVEUgbW9kaWZpY2F0aW9uIHJhY2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MjA6NTQuMDEwNjMxNDE1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwOTY2MDg5OTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJYODZfNjRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdGRwX21tdV96YXBfbGVhZnNcIixcbiAgICBcInRkcF9pdGVyX25leHRfcG9zdF9vcmRlclwiLFxuICAgIFwia3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlXCIsXG4gICAgXCJrdm1femFwX2dmbl9yYW5nZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJ3MgVERQIE1NVSBpdGVyYXRpb24gYW5kIHBhZ2UgdGFibGUgemFwcGluZyBsb2dpYyB0byB6YXAgY29tcGxldGVkIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgZHVyaW5nIGxlYWYgemFwcGluZy4gSXQgaW50cm9kdWNlcyBhIGBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnRgIHN0cnVjdHVyZSwgd2hpY2ggaXMgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2sgKGBldmVudCA9IHt9YCkgYW5kIHdob3NlIGZpZWxkcyBhcmUgZXhwbGljaXRseSBwb3B1bGF0ZWQgaW4gYHRyeV9zdGVwX3VwKClgIHdoZW5ldmVyIGBldmVudC1cXHUwMDNldmFsaWRgIGlzIHNldCB0byB0cnVlLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGxlZnQgdW5pbml0aWFsaXplZCwgYW5kIG5vIGNvbnRyb2wtZmxvdyBkZWNpc2lvbnMgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIFBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGlzIGNoYW5nZSAoZS5nLiBUTEIgZmx1c2hpbmcgY29ycmVjdG5lc3MsIFJDVSBsaWZlY3ljbGUsIG9yIFNQVEUgbW9kaWZpY2F0aW9uIHJhY2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBvc3Qtb3JkZXIgdHJhdmVyc2FsIHN1cHBvcnQgdG8gdGhlIEtWTSB4ODYgVERQIE1NVSBpdGVyYXRvciBhbmQgdXBkYXRlcyB0ZHBfbW11X3phcF9sZWFmcygpIHRvIGF1dG9tYXRpY2FsbHkgemFwIGNvbXBsZXRlZCBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzIChhbmQgaGFuZGxlIHRoZSBjb3JyZXNwb25kaW5nIHJlbW90ZSBUTEIgZmx1c2ggd2hlbiBzaGFkb3cgcGFnZXMgYXJlIGZyZWVkKS4gVGhpcyBhbHRlcnMgY29yZSBNTVUgcGFnZS10YWJsZSB6YXBwaW5nIGJlaGF2aW9yIGluIEtWTSB4ODYgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjIwOjU0LjAxMDYzNzQ4NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwNzgwNjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjY0YjE5N2MzM2IzZGQ2MzI4YTA1OGQyNjU3MjcyYzNlYjVlOTVlY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDoyMDo1MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmNcXG5pbmRleCA5ZTE3YmZhODA5MDExLi5kOWJlNDI5ODQxMGQwIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1xcbkBAIC0xMzIsNyArMTMyLDggQEAgc3RhdGljIGJvb2wgdHJ5X3N0ZXBfc2lkZShzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXFxuICAqIGNhbiBjb250aW51ZSBmcm9tIHRoZSBuZXh0IGVudHJ5IGluIHRoZSBwYXJlbnQgcGFnZSB0YWJsZS4gUmV0dXJucyB0cnVlIG9uIGFcXG4gICogc3VjY2Vzc2Z1bCBzdGVwIHVwLCBmYWxzZSBpZiBhbHJlYWR5IGluIHRoZSByb290IHBhZ2UuXFxuICAqL1xcbi1zdGF0aWMgYm9vbCB0cnlfc3RlcF91cChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXFxuK3N0YXRpYyBib29sIHRyeV9zdGVwX3VwKHN0cnVjdCB0ZHBfaXRlciAqaXRlcixcXG4rXFx0XFx0XFx0c3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50ICpldmVudClcXG4ge1xcbiBcXHRpZiAoaXRlci1cXHUwMDNlbGV2ZWwgPT0gaXRlci1cXHUwMDNlcm9vdF9sZXZlbClcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbkBAIC0xNDEsNiArMTQyLDE0IEBAIHN0YXRpYyBib29sIHRyeV9zdGVwX3VwKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcXG4gXFx0aXRlci1cXHUwMDNlZ2ZuID0gZ2ZuX3JvdW5kX2Zvcl9sZXZlbChpdGVyLVxcdTAwM2VnZm4sIGl0ZXItXFx1MDAzZWxldmVsKTtcXG4gXFx0dGRwX2l0ZXJfcmVmcmVzaF9zcHRlcChpdGVyKTtcXG4gXFxuK1xcdGlmIChldmVudCBcXHUwMDI2XFx1MDAyNiAhZXZlbnQtXFx1MDAzZXZhbGlkKSB7XFxuK1xcdFxcdGV2ZW50LVxcdTAwM2VzcHRlcCA9IGl0ZXItXFx1MDAzZXNwdGVwO1xcbitcXHRcXHRldmVudC1cXHUwMDNlb2xkX3NwdGUgPSBpdGVyLVxcdTAwM2VvbGRfc3B0ZTtcXG4rXFx0XFx0ZXZlbnQtXFx1MDAzZWdmbiA9IGl0ZXItXFx1MDAzZWdmbjtcXG4rXFx0XFx0ZXZlbnQtXFx1MDAzZWxldmVsID0gaXRlci1cXHUwMDNlbGV2ZWw7XFxuK1xcdFxcdGV2ZW50LVxcdTAwM2V2YWxpZCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbkBAIC0xNjAsOCArMTY5LDEyIEBAIHN0YXRpYyBib29sIHRyeV9zdGVwX3VwKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcXG4gICogICAgU1BURSB3aWxsIGhhdmUgYWxyZWFkeSBiZWVuIHZpc2l0ZWQsIGFuZCBzbyB0aGUgaXRlcmF0b3IgbXVzdCBhbHNvIHN0ZXBcXG4gICogICAgdG8gdGhlIHNpZGUgYWdhaW4uXFxuICAqL1xcbi12b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxcbitzdGF0aWMgdm9pZCBfX3RkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50ICpldmVudClcXG4ge1xcbitcXHRpZiAoZXZlbnQpXFxuK1xcdFxcdGV2ZW50LVxcdTAwM2V2YWxpZCA9IGZhbHNlO1xcbitcXG4gXFx0aWYgKGl0ZXItXFx1MDAzZXlpZWxkZWQpIHtcXG4gXFx0XFx0dGRwX2l0ZXJfcmVzdGFydChpdGVyKTtcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0xNzMsNyArMTg2LDE3IEBAIHZvaWQgdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXFxuIFxcdGRvIHtcXG4gXFx0XFx0aWYgKHRyeV9zdGVwX3NpZGUoaXRlcikpXFxuIFxcdFxcdFxcdHJldHVybjtcXG4tXFx0fSB3aGlsZSAodHJ5X3N0ZXBfdXAoaXRlcikpO1xcbitcXHR9IHdoaWxlICh0cnlfc3RlcF91cChpdGVyLCBldmVudCkpO1xcbiBcXHRpdGVyLVxcdTAwM2V2YWxpZCA9IGZhbHNlO1xcbiB9XFxuIFxcbit2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxcbit7XFxuK1xcdF9fdGRwX2l0ZXJfbmV4dChpdGVyLCBOVUxMKTtcXG4rfVxcbitcXG4rdm9pZCB0ZHBfaXRlcl9uZXh0X3Bvc3Rfb3JkZXIoc3RydWN0IHRkcF9pdGVyICppdGVyLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgKmV2ZW50KVxcbit7XFxuK1xcdF9fdGRwX2l0ZXJfbmV4dChpdGVyLCBldmVudCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oXFxuaW5kZXggZjg5OGQ4ZDBkOTNjMi4uYjdlMjYwNWZiZjllOSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmhcXG5AQCAtMTIzLDYgKzEyMywxNCBAQCBzdHJ1Y3QgdGRwX2l0ZXIge1xcbiBcXHRib29sIHlpZWxkZWQ7XFxuIH07XFxuIFxcbitzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQge1xcbitcXHR0ZHBfcHRlcF90IHNwdGVwO1xcbitcXHR1NjQgb2xkX3NwdGU7XFxuK1xcdGdmbl90IGdmbjtcXG4rXFx0aW50IGxldmVsO1xcbitcXHRib29sIHZhbGlkO1xcbit9O1xcbitcXG4gLypcXG4gICogSXRlcmF0ZXMgb3ZlciBldmVyeSBTUFRFIG1hcHBpbmcgdGhlIEdGTiByYW5nZSBbc3RhcnQsIGVuZCkgaW4gYVxcbiAgKiBwcmVvcmRlciB0cmF2ZXJzYWwuXFxuQEAgLTE0NSw2ICsxNTMsOCBAQCB0ZHBfcHRlcF90IHNwdGVfdG9fY2hpbGRfcHQodTY0IHB0ZSwgaW50IGxldmVsKTtcXG4gdm9pZCB0ZHBfaXRlcl9zdGFydChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXFxuIFxcdFxcdCAgICBpbnQgbWluX2xldmVsLCBnZm5fdCBuZXh0X2xhc3RfbGV2ZWxfZ2ZuLCBnZm5fdCBnZm5fYml0cyk7XFxuIHZvaWQgdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpO1xcbit2b2lkIHRkcF9pdGVyX25leHRfcG9zdF9vcmRlcihzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQpO1xcbiB2b2lkIHRkcF9pdGVyX3Jlc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyKTtcXG4gXFxuICNlbmRpZiAvKiBfX0tWTV9YODZfTU1VX1REUF9JVEVSX0ggKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY1xcbmluZGV4IDQ0ZGFkMTA2ZmFkMTkuLjgyNDQ2YzQ3MzdmNzkgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY1xcbkBAIC05MjMsNiArOTIzLDM4IEBAIGJvb2wga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9jb21wbGV0ZWRfZW1wdHlfbGVhZl9wdChzdHJ1Y3Qga3ZtICprdm0sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHRkcF9wdGVwX3QgemFwcGVkX2xlYWZfcHQpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV9tbXVfcGFnZSAqY2hpbGRfc3A7XFxuK1xcbitcXHRpZiAoZXZlbnQtXFx1MDAzZWxldmVsICE9IFBHX0xFVkVMXzJNIHx8XFxuK1xcdCAgICAhaXNfc2hhZG93X3ByZXNlbnRfcHRlKGV2ZW50LVxcdTAwM2VvbGRfc3B0ZSkgfHxcXG4rXFx0ICAgIGlzX2xhc3Rfc3B0ZShldmVudC1cXHUwMDNlb2xkX3NwdGUsIGV2ZW50LVxcdTAwM2VsZXZlbCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChldmVudC1cXHUwMDNlZ2ZuIFxcdTAwM2Mgc3RhcnQgfHxcXG4rXFx0ICAgIGV2ZW50LVxcdTAwM2VnZm4gKyBLVk1fUEFHRVNfUEVSX0hQQUdFKGV2ZW50LVxcdTAwM2VsZXZlbCkgXFx1MDAzZSBlbmQpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdC8qIExlYXZlIHByb2R1Y3RpdmUgbGVhZiB0YWJsZXMgaW4gcGxhY2UgdG8gYXZvaWQgcmVmYXVsdCBjaHVybi4gKi9cXG4rXFx0aWYgKHphcHBlZF9sZWFmX3B0ID09IGV2ZW50LVxcdTAwM2VzcHRlcClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Y2hpbGRfc3AgPSBzcHRlX3RvX2NoaWxkX3NwKGV2ZW50LVxcdTAwM2VvbGRfc3B0ZSk7XFxuK1xcdGlmIChpc19taXJyb3Jfc3AoY2hpbGRfc3ApKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAoY2hpbGRfc3AtXFx1MDAzZXJvbGUubGV2ZWwgIT0gUEdfTEVWRUxfNEspXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHRkcF9tbXVfc2V0X3NwdGUoa3ZtLCBldmVudC1cXHUwMDNlc3B0ZXAsIGV2ZW50LVxcdTAwM2VvbGRfc3B0ZSxcXG4rXFx0XFx0XFx0IFNIQURPV19OT05QUkVTRU5UX1ZBTFVFLCBldmVudC1cXHUwMDNlZ2ZuLCBldmVudC1cXHUwMDNlbGV2ZWwpO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gLypcXG4gICogSWYgY2FuX3lpZWxkIGlzIHRydWUsIHdpbGwgcmVsZWFzZSB0aGUgTU1VIGxvY2sgYW5kIHJlc2NoZWR1bGUgaWYgdGhlXFxuICAqIHNjaGVkdWxlciBuZWVkcyB0aGUgQ1BVIG9yIHRoZXJlIGlzIGNvbnRlbnRpb24gb24gdGhlIE1NVSBsb2NrLiBJZiB0aGlzXFxuQEAgLTkzMyw3ICs5NjUsMTAgQEAgYm9vbCBrdm1fdGRwX21tdV96YXBfcG9zc2libGVfbnhfaHVnZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSxcXG4gc3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxcbiBcXHRcXHRcXHQgICAgICBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGNhbl95aWVsZCwgYm9vbCBmbHVzaClcXG4ge1xcbitcXHRzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgZXZlbnQgPSB7fTtcXG4gXFx0c3RydWN0IHRkcF9pdGVyIGl0ZXI7XFxuK1xcdHRkcF9wdGVwX3QgemFwcGVkX2xlYWZfcHQgPSBOVUxMO1xcbitcXHRib29sIHJlbW92ZWRfc3AgPSBmYWxzZTtcXG4gXFxuIFxcdGVuZCA9IG1pbihlbmQsIHRkcF9tbXVfbWF4X2dmbl9leGNsdXNpdmUoKSk7XFxuIFxcbkBAIC05NDEsMzMgKzk3Niw1NiBAQCBzdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcbi1cXHRmb3JfZWFjaF90ZHBfcHRlX21pbl9sZXZlbChpdGVyLCBrdm0sIHJvb3QsIFBHX0xFVkVMXzRLLCBzdGFydCwgZW5kKSB7XFxuK1xcdHRkcF9pdGVyX3N0YXJ0KFxcdTAwMjZpdGVyLCByb290LCBQR19MRVZFTF80Sywgc3RhcnQsXFxuK1xcdFxcdCAgICAgICBrdm1fZ2ZuX3Jvb3RfYml0cyhrdm0sIHJvb3QpKTtcXG4rXFx0d2hpbGUgKGl0ZXIudmFsaWQgXFx1MDAyNlxcdTAwMjYgaXRlci5nZm4gXFx1MDAzYyBlbmQpIHtcXG4gXFx0XFx0aWYgKGNhbl95aWVsZCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgdGRwX21tdV9pdGVyX2NvbmRfcmVzY2hlZChrdm0sIFxcdTAwMjZpdGVyLCBmbHVzaCwgZmFsc2UpKSB7XFxuIFxcdFxcdFxcdGZsdXNoID0gZmFsc2U7XFxuK1xcdFxcdFxcdHRkcF9pdGVyX25leHQoXFx1MDAyNml0ZXIpO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0aWYgKCFpc19zaGFkb3dfcHJlc2VudF9wdGUoaXRlci5vbGRfc3B0ZSkgfHxcXG4tXFx0XFx0ICAgICFpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoaXNfc2hhZG93X3ByZXNlbnRfcHRlKGl0ZXIub2xkX3NwdGUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpIHtcXG4rXFx0XFx0XFx0aWYgKGl0ZXIubGV2ZWwgPT0gUEdfTEVWRUxfNEspIHtcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7XFxuIFxcbi1cXHRcXHR0ZHBfbW11X2l0ZXJfc2V0X3NwdGUoa3ZtLCBcXHUwMDI2aXRlciwgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUpO1xcbitcXHRcXHRcXHRcXHRzcCA9IHNwdGVwX3RvX3NwKHJjdV9kZXJlZmVyZW5jZShpdGVyLnNwdGVwKSk7XFxuK1xcdFxcdFxcdFxcdHphcHBlZF9sZWFmX3B0ID0gc3AtXFx1MDAzZXB0ZXA7XFxuK1xcdFxcdFxcdH1cXG4gXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFphcHBpbmdzIFNQVEVzIGluIGludmFsaWQgcm9vdHMgZG9lc24ndCByZXF1aXJlIGEgVExCIGZsdXNoLFxcbi1cXHRcXHQgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoIXJvb3QtXFx1MDAzZXJvbGUuaW52YWxpZClcXG4tXFx0XFx0XFx0Zmx1c2ggPSB0cnVlO1xcbi1cXHR9XFxuK1xcdFxcdFxcdHRkcF9tbXVfaXRlcl9zZXRfc3B0ZShrdm0sIFxcdTAwMjZpdGVyLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSk7XFxuIFxcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2Vzbid0IHJlcXVpcmUgYSBUTEIgZmx1c2gsXFxuK1xcdFxcdFxcdCAqIHNlZSBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoKSBmb3IgZGV0YWlscy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmICghcm9vdC1cXHUwMDNlcm9sZS5pbnZhbGlkKVxcbitcXHRcXHRcXHRcXHRmbHVzaCA9IHRydWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHRkcF9pdGVyX25leHRfcG9zdF9vcmRlcihcXHUwMDI2aXRlciwgXFx1MDAyNmV2ZW50KTtcXG4rXFx0XFx0aWYgKGV2ZW50LnZhbGlkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICB0ZHBfbW11X3phcF9jb21wbGV0ZWRfZW1wdHlfbGVhZl9wdChrdm0sIFxcdTAwMjZldmVudCwgc3RhcnQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGVuZCwgemFwcGVkX2xlYWZfcHQpKSB7XFxuK1xcdFxcdFxcdGlmICghcm9vdC1cXHUwMDNlcm9sZS5pbnZhbGlkKVxcbitcXHRcXHRcXHRcXHRmbHVzaCA9IHRydWU7XFxuK1xcdFxcdFxcdHJlbW92ZWRfc3AgPSB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFxuIFxcdC8qXFxuLVxcdCAqIEJlY2F1c2UgdGhpcyBmbG93IHphcHMgX29ubHlfIGxlYWYgU1BURXMsIHRoZSBjYWxsZXIgZG9lc24ndCBuZWVkXFxuLVxcdCAqIHRvIHByb3ZpZGUgUkNVIHByb3RlY3Rpb24gYXMgbm8gJ3N0cnVjdCBrdm1fbW11X3BhZ2UnIHdpbGwgYmUgZnJlZWQuXFxuK1xcdCAqIElmIGFueSBzaGFkb3cgcGFnZXMgd2VyZSByZW1vdmVkLCBzZXJ2aWNlIHBlbmRpbmcgVExCIGZsdXNoZXMgYmVmb3JlXFxuK1xcdCAqIGRyb3BwaW5nIFJDVSBwcm90ZWN0aW9uLCBhcyByZXF1aXJlZCBieSB0aGUgVERQIE1NVSBpdGVyYXRvci5cXG4gXFx0ICovXFxuK1xcdGlmIChyZW1vdmVkX3NwIFxcdTAwMjZcXHUwMDI2IGZsdXNoKSB7XFxuK1xcdFxcdGt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pO1xcbitcXHRcXHRmbHVzaCA9IGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0cmV0dXJuIGZsdXNoO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoyMDo1NC40NTIwNTA1NjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3OTIyNTI4NDk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiWDg2XzY0XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3RkcF9tbXVfemFwX2xlYWZzXCIsXG4gICAgXCJ0ZHBfaXRlcl9uZXh0X3Bvc3Rfb3JkZXJcIixcbiAgICBcImt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZVwiLFxuICAgIFwia3ZtX3phcF9nZm5fcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBvc3Qtb3JkZXIgdHJhdmVyc2FsIHN1cHBvcnQgdG8gdGhlIEtWTSB4ODYgVERQIE1NVSBpdGVyYXRvciBhbmQgdXBkYXRlcyB0ZHBfbW11X3phcF9sZWFmcygpIHRvIGF1dG9tYXRpY2FsbHkgemFwIGNvbXBsZXRlZCBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzIChhbmQgaGFuZGxlIHRoZSBjb3JyZXNwb25kaW5nIHJlbW90ZSBUTEIgZmx1c2ggd2hlbiBzaGFkb3cgcGFnZXMgYXJlIGZyZWVkKS4gVGhpcyBhbHRlcnMgY29yZSBNTVUgcGFnZS10YWJsZSB6YXBwaW5nIGJlaGF2aW9yIGluIEtWTSB4ODYgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY2NGIxOTdjMzNiM2RkNjMyOGEwNThkMjY1NzI3MmMzZWI1ZTk1ZWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDoyMDo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1xuaW5kZXggOWUxN2JmYTgwOTAxMS4uZDliZTQyOTg0MTBkMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1xuKysrIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jXG5AQCAtMTMyLDcgKzEzMiw4IEBAIHN0YXRpYyBib29sIHRyeV9zdGVwX3NpZGUoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuICAqIGNhbiBjb250aW51ZSBmcm9tIHRoZSBuZXh0IGVudHJ5IGluIHRoZSBwYXJlbnQgcGFnZSB0YWJsZS4gUmV0dXJucyB0cnVlIG9uIGFcbiAgKiBzdWNjZXNzZnVsIHN0ZXAgdXAsIGZhbHNlIGlmIGFscmVhZHkgaW4gdGhlIHJvb3QgcGFnZS5cbiAgKi9cbi1zdGF0aWMgYm9vbCB0cnlfc3RlcF91cChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4rc3RhdGljIGJvb2wgdHJ5X3N0ZXBfdXAoc3RydWN0IHRkcF9pdGVyICppdGVyLFxuK1x0XHRcdHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQpXG4ge1xuIFx0aWYgKGl0ZXItXHUwMDNlbGV2ZWwgPT0gaXRlci1cdTAwM2Vyb290X2xldmVsKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG5AQCAtMTQxLDYgKzE0MiwxNCBAQCBzdGF0aWMgYm9vbCB0cnlfc3RlcF91cChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4gXHRpdGVyLVx1MDAzZWdmbiA9IGdmbl9yb3VuZF9mb3JfbGV2ZWwoaXRlci1cdTAwM2VnZm4sIGl0ZXItXHUwMDNlbGV2ZWwpO1xuIFx0dGRwX2l0ZXJfcmVmcmVzaF9zcHRlcChpdGVyKTtcbiBcbitcdGlmIChldmVudCBcdTAwMjZcdTAwMjYgIWV2ZW50LVx1MDAzZXZhbGlkKSB7XG4rXHRcdGV2ZW50LVx1MDAzZXNwdGVwID0gaXRlci1cdTAwM2VzcHRlcDtcbitcdFx0ZXZlbnQtXHUwMDNlb2xkX3NwdGUgPSBpdGVyLVx1MDAzZW9sZF9zcHRlO1xuK1x0XHRldmVudC1cdTAwM2VnZm4gPSBpdGVyLVx1MDAzZWdmbjtcbitcdFx0ZXZlbnQtXHUwMDNlbGV2ZWwgPSBpdGVyLVx1MDAzZWxldmVsO1xuK1x0XHRldmVudC1cdTAwM2V2YWxpZCA9IHRydWU7XG4rXHR9XG4rXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG5AQCAtMTYwLDggKzE2OSwxMiBAQCBzdGF0aWMgYm9vbCB0cnlfc3RlcF91cChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4gICogICAgU1BURSB3aWxsIGhhdmUgYWxyZWFkeSBiZWVuIHZpc2l0ZWQsIGFuZCBzbyB0aGUgaXRlcmF0b3IgbXVzdCBhbHNvIHN0ZXBcbiAgKiAgICB0byB0aGUgc2lkZSBhZ2Fpbi5cbiAgKi9cbi12b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuK3N0YXRpYyB2b2lkIF9fdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsXG4rXHRcdFx0ICAgIHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQpXG4ge1xuK1x0aWYgKGV2ZW50KVxuK1x0XHRldmVudC1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuK1xuIFx0aWYgKGl0ZXItXHUwMDNleWllbGRlZCkge1xuIFx0XHR0ZHBfaXRlcl9yZXN0YXJ0KGl0ZXIpO1xuIFx0XHRyZXR1cm47XG5AQCAtMTczLDcgKzE4NiwxNyBAQCB2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuIFx0ZG8ge1xuIFx0XHRpZiAodHJ5X3N0ZXBfc2lkZShpdGVyKSlcbiBcdFx0XHRyZXR1cm47XG4tXHR9IHdoaWxlICh0cnlfc3RlcF91cChpdGVyKSk7XG4rXHR9IHdoaWxlICh0cnlfc3RlcF91cChpdGVyLCBldmVudCkpO1xuIFx0aXRlci1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuIH1cbiBcbit2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuK3tcbitcdF9fdGRwX2l0ZXJfbmV4dChpdGVyLCBOVUxMKTtcbit9XG4rXG4rdm9pZCB0ZHBfaXRlcl9uZXh0X3Bvc3Rfb3JkZXIoc3RydWN0IHRkcF9pdGVyICppdGVyLFxuK1x0XHRcdCAgICAgIHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQpXG4re1xuK1x0X190ZHBfaXRlcl9uZXh0KGl0ZXIsIGV2ZW50KTtcbit9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oXG5pbmRleCBmODk4ZDhkMGQ5M2MyLi5iN2UyNjA1ZmJmOWU5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmhcbkBAIC0xMjMsNiArMTIzLDE0IEBAIHN0cnVjdCB0ZHBfaXRlciB7XG4gXHRib29sIHlpZWxkZWQ7XG4gfTtcbiBcbitzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQge1xuK1x0dGRwX3B0ZXBfdCBzcHRlcDtcbitcdHU2NCBvbGRfc3B0ZTtcbitcdGdmbl90IGdmbjtcbitcdGludCBsZXZlbDtcbitcdGJvb2wgdmFsaWQ7XG4rfTtcbitcbiAvKlxuICAqIEl0ZXJhdGVzIG92ZXIgZXZlcnkgU1BURSBtYXBwaW5nIHRoZSBHRk4gcmFuZ2UgW3N0YXJ0LCBlbmQpIGluIGFcbiAgKiBwcmVvcmRlciB0cmF2ZXJzYWwuXG5AQCAtMTQ1LDYgKzE1Myw4IEBAIHRkcF9wdGVwX3Qgc3B0ZV90b19jaGlsZF9wdCh1NjQgcHRlLCBpbnQgbGV2ZWwpO1xuIHZvaWQgdGRwX2l0ZXJfc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxuIFx0XHQgICAgaW50IG1pbl9sZXZlbCwgZ2ZuX3QgbmV4dF9sYXN0X2xldmVsX2dmbiwgZ2ZuX3QgZ2ZuX2JpdHMpO1xuIHZvaWQgdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpO1xuK3ZvaWQgdGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyKHN0cnVjdCB0ZHBfaXRlciAqaXRlcixcbitcdFx0XHQgICAgICBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgKmV2ZW50KTtcbiB2b2lkIHRkcF9pdGVyX3Jlc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyKTtcbiBcbiAjZW5kaWYgLyogX19LVk1fWDg2X01NVV9URFBfSVRFUl9IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY1xuaW5kZXggNDRkYWQxMDZmYWQxOS4uODI0NDZjNDczN2Y3OSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY1xuQEAgLTkyMyw2ICs5MjMsMzggQEAgYm9vbCBrdm1fdGRwX21tdV96YXBfcG9zc2libGVfbnhfaHVnZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitzdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9jb21wbGV0ZWRfZW1wdHlfbGVhZl9wdChzdHJ1Y3Qga3ZtICprdm0sXG4rXHRcdFx0XHRcdFx0c3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50ICpldmVudCxcbitcdFx0XHRcdFx0XHRnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxuK1x0XHRcdFx0XHRcdHRkcF9wdGVwX3QgemFwcGVkX2xlYWZfcHQpXG4re1xuK1x0c3RydWN0IGt2bV9tbXVfcGFnZSAqY2hpbGRfc3A7XG4rXG4rXHRpZiAoZXZlbnQtXHUwMDNlbGV2ZWwgIT0gUEdfTEVWRUxfMk0gfHxcbitcdCAgICAhaXNfc2hhZG93X3ByZXNlbnRfcHRlKGV2ZW50LVx1MDAzZW9sZF9zcHRlKSB8fFxuK1x0ICAgIGlzX2xhc3Rfc3B0ZShldmVudC1cdTAwM2VvbGRfc3B0ZSwgZXZlbnQtXHUwMDNlbGV2ZWwpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoZXZlbnQtXHUwMDNlZ2ZuIFx1MDAzYyBzdGFydCB8fFxuK1x0ICAgIGV2ZW50LVx1MDAzZWdmbiArIEtWTV9QQUdFU19QRVJfSFBBR0UoZXZlbnQtXHUwMDNlbGV2ZWwpIFx1MDAzZSBlbmQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIExlYXZlIHByb2R1Y3RpdmUgbGVhZiB0YWJsZXMgaW4gcGxhY2UgdG8gYXZvaWQgcmVmYXVsdCBjaHVybi4gKi9cbitcdGlmICh6YXBwZWRfbGVhZl9wdCA9PSBldmVudC1cdTAwM2VzcHRlcClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Y2hpbGRfc3AgPSBzcHRlX3RvX2NoaWxkX3NwKGV2ZW50LVx1MDAzZW9sZF9zcHRlKTtcbitcdGlmIChpc19taXJyb3Jfc3AoY2hpbGRfc3ApKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoY2hpbGRfc3AtXHUwMDNlcm9sZS5sZXZlbCAhPSBQR19MRVZFTF80SylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0dGRwX21tdV9zZXRfc3B0ZShrdm0sIGV2ZW50LVx1MDAzZXNwdGVwLCBldmVudC1cdTAwM2VvbGRfc3B0ZSxcbitcdFx0XHQgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUsIGV2ZW50LVx1MDAzZWdmbiwgZXZlbnQtXHUwMDNlbGV2ZWwpO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIC8qXG4gICogSWYgY2FuX3lpZWxkIGlzIHRydWUsIHdpbGwgcmVsZWFzZSB0aGUgTU1VIGxvY2sgYW5kIHJlc2NoZWR1bGUgaWYgdGhlXG4gICogc2NoZWR1bGVyIG5lZWRzIHRoZSBDUFUgb3IgdGhlcmUgaXMgY29udGVudGlvbiBvbiB0aGUgTU1VIGxvY2suIElmIHRoaXNcbkBAIC05MzMsNyArOTY1LDEwIEBAIGJvb2wga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXG4gc3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxuIFx0XHRcdCAgICAgIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgY2FuX3lpZWxkLCBib29sIGZsdXNoKVxuIHtcbitcdHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCBldmVudCA9IHt9O1xuIFx0c3RydWN0IHRkcF9pdGVyIGl0ZXI7XG4rXHR0ZHBfcHRlcF90IHphcHBlZF9sZWFmX3B0ID0gTlVMTDtcbitcdGJvb2wgcmVtb3ZlZF9zcCA9IGZhbHNlO1xuIFxuIFx0ZW5kID0gbWluKGVuZCwgdGRwX21tdV9tYXhfZ2ZuX2V4Y2x1c2l2ZSgpKTtcbiBcbkBAIC05NDEsMzMgKzk3Niw1NiBAQCBzdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXG4tXHRmb3JfZWFjaF90ZHBfcHRlX21pbl9sZXZlbChpdGVyLCBrdm0sIHJvb3QsIFBHX0xFVkVMXzRLLCBzdGFydCwgZW5kKSB7XG4rXHR0ZHBfaXRlcl9zdGFydChcdTAwMjZpdGVyLCByb290LCBQR19MRVZFTF80Sywgc3RhcnQsXG4rXHRcdCAgICAgICBrdm1fZ2ZuX3Jvb3RfYml0cyhrdm0sIHJvb3QpKTtcbitcdHdoaWxlIChpdGVyLnZhbGlkIFx1MDAyNlx1MDAyNiBpdGVyLmdmbiBcdTAwM2MgZW5kKSB7XG4gXHRcdGlmIChjYW5feWllbGQgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICB0ZHBfbW11X2l0ZXJfY29uZF9yZXNjaGVkKGt2bSwgXHUwMDI2aXRlciwgZmx1c2gsIGZhbHNlKSkge1xuIFx0XHRcdGZsdXNoID0gZmFsc2U7XG4rXHRcdFx0dGRwX2l0ZXJfbmV4dChcdTAwMjZpdGVyKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoIWlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLm9sZF9zcHRlKSB8fFxuLVx0XHQgICAgIWlzX2xhc3Rfc3B0ZShpdGVyLm9sZF9zcHRlLCBpdGVyLmxldmVsKSlcbi1cdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLm9sZF9zcHRlKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGlzX2xhc3Rfc3B0ZShpdGVyLm9sZF9zcHRlLCBpdGVyLmxldmVsKSkge1xuK1x0XHRcdGlmIChpdGVyLmxldmVsID09IFBHX0xFVkVMXzRLKSB7XG4rXHRcdFx0XHRzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDtcbiBcbi1cdFx0dGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgXHUwMDI2aXRlciwgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUpO1xuK1x0XHRcdFx0c3AgPSBzcHRlcF90b19zcChyY3VfZGVyZWZlcmVuY2UoaXRlci5zcHRlcCkpO1xuK1x0XHRcdFx0emFwcGVkX2xlYWZfcHQgPSBzcC1cdTAwM2VwdGVwO1xuK1x0XHRcdH1cbiBcbi1cdFx0Lypcbi1cdFx0ICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2Vzbid0IHJlcXVpcmUgYSBUTEIgZmx1c2gsXG4tXHRcdCAqIHNlZSBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoKSBmb3IgZGV0YWlscy5cbi1cdFx0ICovXG4tXHRcdGlmICghcm9vdC1cdTAwM2Vyb2xlLmludmFsaWQpXG4tXHRcdFx0Zmx1c2ggPSB0cnVlO1xuLVx0fVxuK1x0XHRcdHRkcF9tbXVfaXRlcl9zZXRfc3B0ZShrdm0sIFx1MDAyNml0ZXIsXG4rXHRcdFx0XHRcdCAgICAgIFNIQURPV19OT05QUkVTRU5UX1ZBTFVFKTtcbiBcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2Vzbid0IHJlcXVpcmUgYSBUTEIgZmx1c2gsXG4rXHRcdFx0ICogc2VlIGt2bV90ZHBfbW11X3phcF9pbnZhbGlkYXRlZF9yb290cygpIGZvciBkZXRhaWxzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmICghcm9vdC1cdTAwM2Vyb2xlLmludmFsaWQpXG4rXHRcdFx0XHRmbHVzaCA9IHRydWU7XG4rXHRcdH1cbitcbitcdFx0dGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyKFx1MDAyNml0ZXIsIFx1MDAyNmV2ZW50KTtcbitcdFx0aWYgKGV2ZW50LnZhbGlkIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgdGRwX21tdV96YXBfY29tcGxldGVkX2VtcHR5X2xlYWZfcHQoa3ZtLCBcdTAwMjZldmVudCwgc3RhcnQsXG4rXHRcdFx0XHRcdFx0XHRlbmQsIHphcHBlZF9sZWFmX3B0KSkge1xuK1x0XHRcdGlmICghcm9vdC1cdTAwM2Vyb2xlLmludmFsaWQpXG4rXHRcdFx0XHRmbHVzaCA9IHRydWU7XG4rXHRcdFx0cmVtb3ZlZF9zcCA9IHRydWU7XG4rXHRcdH1cbitcdH1cbiBcbiBcdC8qXG4tXHQgKiBCZWNhdXNlIHRoaXMgZmxvdyB6YXBzIF9vbmx5XyBsZWFmIFNQVEVzLCB0aGUgY2FsbGVyIGRvZXNuJ3QgbmVlZFxuLVx0ICogdG8gcHJvdmlkZSBSQ1UgcHJvdGVjdGlvbiBhcyBubyAnc3RydWN0IGt2bV9tbXVfcGFnZScgd2lsbCBiZSBmcmVlZC5cbitcdCAqIElmIGFueSBzaGFkb3cgcGFnZXMgd2VyZSByZW1vdmVkLCBzZXJ2aWNlIHBlbmRpbmcgVExCIGZsdXNoZXMgYmVmb3JlXG4rXHQgKiBkcm9wcGluZyBSQ1UgcHJvdGVjdGlvbiwgYXMgcmVxdWlyZWQgYnkgdGhlIFREUCBNTVUgaXRlcmF0b3IuXG4gXHQgKi9cbitcdGlmIChyZW1vdmVkX3NwIFx1MDAyNlx1MDAyNiBmbHVzaCkge1xuK1x0XHRrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTtcbitcdFx0Zmx1c2ggPSBmYWxzZTtcbitcdH1cbitcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIGZsdXNoO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjIwOjU0LjQ1MjA1MTgzMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwOTQ1NDQ5Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipEZWNvbnN0cnVjdGluZyBUaGlzIEtWTSBURFAgTU1VIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBtb2RpZmljYXRpb25zIHRvIHRoZSBLVk0geDg2IFREUCBNTVUsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBUaGUgZmFjdCB0aGF0IHRoaXMgdG91Y2hlcyBgdGRwX2l0ZXIuY2AsIGB0ZHBfaXRlci5oYCwgYW5kIGB0ZHBfbW11LmNgIHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gVERQIChUd28tRGltZW5zaW9uYWwgUGFnaW5nKSBpdGVyYXRpb24gYW5kIE1NVSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBuZXN0ZWQgcGFnaW5nIGNvbnRleHQuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZ2V0dGluZyBzb21lIG5ldyBmdW5jdGlvbnMgaW50cm9kdWNlZDogYHRkcF9pdGVyX25leHRfcG9zdF9vcmRlcmAgYW5kIGB0ZHBfbW11X3phcF9jb21wbGV0ZWRfZW1wdHlfbGVhZl9wdGAsIGFuZCB3ZSBzZWUgdXBkYXRlcyB0byBgdGRwX21tdV96YXBfbGVhZnNgLiBUaGUgbmFtZXMgdGhlbXNlbHZlcyBnaXZlIHNvbWUgaGludHMgLSBwb3N0LW9yZGVyIGl0ZXJhdGlvbiBhbmQgbGVhZiBwYWdlIHRhYmxlIHphcHBpbmcuXG5cbkkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgYWRkaXRpb25zLiBJJ20gZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgdHlwaWNhbCB3b3JrZmxvdyBoZXJlOiBJJ2xsIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiB0aGVzZSBmdW5jdGlvbnMgd2l0aGluIGB0ZHBfbW11LmNgIGFuZCBhbHNvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gZ2V0IHRoZSBwcmVjaXNlIGNvbnRleHQuIEkgd2FudCB0byBzZWUgKmhvdyogdGhlc2UgZnVuY3Rpb25zIGFyZSBpbnRlZ3JhdGVkLCB3aGF0IHRoZXkncmUgY2FsbGVkIGZyb20sIGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyB0aGV5IG9wZXJhdGUgb24gd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrLiBXaXRoIHRoYXQgaW5mb3JtYXRpb24gSSdsbCBidWlsZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NDIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoyMTowNS4zOTc1MDMwNzFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5MTI3MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGRwX21tdV96YXBfbGVhZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzExMz12b2lkIGt2bV96YXBfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuX3N0YXJ0LCBnZm5fdCBnZm5fZW5kKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTI4LVxcdGlmICh0ZHBfbW11X2VuYWJsZWQpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MTI5OlxcdFxcdGZsdXNoID0ga3ZtX3RkcF9tbXVfemFwX2xlYWZzKGt2bSwgZ2ZuX3N0YXJ0LCBnZm5fZW5kLCBmbHVzaCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTMwLVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM9OTI2PXN0YXRpYyBib29sIHRkcF9tbXVfemFwX2NvbXBsZXRlZF9lbXB0eV9sZWFmX3B0KHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTk2NC0gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo5NjU6c3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTk2Ni1cXHRcXHRcXHQgICAgICBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGNhbl95aWVsZCwgYm9vbCBmbHVzaClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwMzYtICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTAzNzpib29sIGt2bV90ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgZmx1c2gpXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzOC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMDQyLVxcdGZvcl9lYWNoX3ZhbGlkX3RkcF9tbXVfcm9vdF95aWVsZF9zYWZlKGt2bSwgcm9vdCwgLTEpXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTA0MzpcXHRcXHRmbHVzaCA9IHRkcF9tbXVfemFwX2xlYWZzKGt2bSwgcm9vdCwgc3RhcnQsIGVuZCwgdHJ1ZSwgZmx1c2gpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwNDQtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz0xMzY1PWJvb2wga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTM3My1cXHRfX2Zvcl9lYWNoX3RkcF9tbXVfcm9vdF95aWVsZF9zYWZlKGt2bSwgcm9vdCwgcmFuZ2UtXFx1MDAzZXNsb3QtXFx1MDAzZWFzX2lkLCB0eXBlcylcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzoxMzc0OlxcdFxcdGZsdXNoID0gdGRwX21tdV96YXBfbGVhZnMoa3ZtLCByb290LCByYW5nZS1cXHUwMDNlc3RhcnQsIHJhbmdlLVxcdTAwM2VlbmQsXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTM3NS1cXHRcXHRcXHRcXHRcXHQgIHJhbmdlLVxcdTAwM2VtYXlfYmxvY2ssIGZsdXNoKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oPTU3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tbXVfcGFnZSAqdGRwX21tdV9nZXRfcm9vdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC02NS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaDo2Njpib29sIGt2bV90ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgZmx1c2gpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTY3LWJvb2wga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjIxOjA1LjQ0NzQyMzM5OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3NDMwNzE5MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2NvbmZpZyBEaXZlIGZvciBLVk0gXHUwMDI2IFREUCBNTVUgb24geDg2KipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhZ2Fpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIEtWTSBhbmQgdGhlIFREUCBNTVUgc3VwcG9ydCBvbiB4ODYsIHBhcnRpY3VsYXJseSB3aGVyZSB0aGluZ3MgbWlnaHQgYmUgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyBmb3IgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc3ltYm9scyDigJMgbGlrZWx5IHNvbWV0aGluZyBsaWtlIGBDT05GSUdfS1ZNYCwgYENPTkZJR19YODZfVERYX01NVWAsIG9yIHZhcmlhdGlvbnMgdGhlcmVvZiDigJMgdG8gZ2V0IGEgZ3Jhc3Agb2YgdGhlIHRvcC1sZXZlbCBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyB0byBzZWUgd2hpY2ggb3RoZXIgZmVhdHVyZXMgb3IgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMgdHJpZ2dlciB0aGVzZSBzZXR0aW5ncy4gQXJlIHdlIHJlbHlpbmcgb24gYW55IHNwZWNpZmljIENQVSBmZWF0dXJlcyBvciBoeXBlcnZpc29yIGZsYWdzPyBJIGFsc28gd2FudCB0byBkb3VibGUtY2hlY2sgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGVzZSBjb25maWd1cmF0aW9ucywgYW5kIHdoZXRoZXIgd2UncmUgdXNpbmcgYW55IHRyaXN0YXRlIG9wdGlvbnMgdGhhdCBjb3VsZCBjYXVzZSBpc3N1ZXMgZGVwZW5kaW5nIG9uIHRoZSBidWlsZC4gR290dGEgZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgc25lYWt5IGNvbmZsaWN0cyBvciByZWdyZXNzaW9ucyBpbiB0aGUgY29uZmlndXJhdGlvbiBzcGFjZS4gTmVlZCB0byBrZWVwIGluIG1pbmQsIHRvbywgdGhlIHZhcmlvdXMgeDg2IENQVSBtb2RlbHMsIGFuZCB3aGV0aGVyIGNvbmZpZ3VyYXRpb24gZGlmZmVycyBiZXR3ZWVuIHRoZW0uIEdvdHRhIGJlIHByZWNpc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyODcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoyMToxMC4xOTA0OTY5MDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQyNjA5OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnLTItI1xcbmFyY2gveDg2L2t2bS9LY29uZmlnOjM6IyBLVk0gY29uZmlndXJhdGlvblxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTQtI1xcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxOlxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjpcXHRzZWxlY3QgS1ZNX0NPTU1PTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzOlxcdHNlbGVjdCBLVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjQ6XFx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyNTpcXHRzZWxlY3QgSEFWRV9LVk1fSVJRQ0hJUFxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjI2OlxcdHNlbGVjdCBIQVZFX0tWTV9QRk5DQUNIRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjI3OlxcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX1RTT1xcbmFyY2gveDg2L2t2bS9LY29uZmlnOjI4OlxcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX0FDUV9SRUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyOTpcXHRzZWxlY3QgSEFWRV9LVk1fSVJRX0JZUEFTU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnOjMwOlxcdHNlbGVjdCBIQVZFX0tWTV9JUlFfUk9VVElOR1xcbmFyY2gveDg2L2t2bS9LY29uZmlnOjMxOlxcdHNlbGVjdCBIQVZFX0tWTV9SRUFET05MWV9NRU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0zMi1cXHRzZWxlY3QgVkhPU1RfVEFTS1xcbmFyY2gveDg2L2t2bS9LY29uZmlnOjMzOlxcdHNlbGVjdCBLVk1fQVNZTkNfUEZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0zNC1cXHRzZWxlY3QgVVNFUl9SRVRVUk5fTk9USUZJRVJcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzozNTpcXHRzZWxlY3QgS1ZNX01NSU9cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0zNi1cXHRzZWxlY3QgU0NIRURfSU5GT1xcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMzktXFx0c2VsZWN0IFBFUkZfR1VFU1RfTUVESUFURURfUE1VXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NDA6XFx0c2VsZWN0IEhBVkVfS1ZNX01TSVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjQxOlxcdHNlbGVjdCBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NDI6XFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00My1cXHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo0NDpcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NDU6XFx0c2VsZWN0IEtWTV9WRklPXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NDY6XFx0c2VsZWN0IEhBVkVfS1ZNX1BNX05PVElGSUVSIGlmIFBNXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NDc6XFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NDg6XFx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo0OTpcXHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1MDpcXHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1MzpcXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTU0LVxcdGRlcGVuZHMgb24gWDg2X0xPQ0FMX0FQSUNcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NzA6XFx0Ym9vbCBcXFwiQ29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXFxcIlxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjcxOlxcdCMgRGlzYWxsb3cgS1ZNJ3MgLVdlcnJvciBpZiBLQVNBTiBpcyBlbmFibGVkLCBlLmcuIHRvIGd1YXJkIGFnYWluc3RcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo3MjpcXHQjIHJhbmRvbWl6ZWQgY29uZmlncyBmcm9tIHNlbGVjdGluZyBLVk1fV0VSUk9SPXksIHdoaWNoIGRvZXNuJ3QgcGxheVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTczLVxcdCMgbmljZSB3aXRoIEtBU0FOLiAgS0FTQU4gYnVpbGRzIGdlbmVyYXRlcyB3YXJuaW5ncyBmb3IgdGhlIGRlZmF1bHRcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo3NDpcXHQjIEZSQU1FX1dBUk4sIGkuZS4gS1ZNX1dFUlJPUj15IHdpdGggS0FTQU49eSByZXF1aXJlcyBzcGVjaWFsIHR1bmluZy5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo3NTpcXHQjIEJ1aWxkaW5nIEtWTSB3aXRoIC1XZXJyb3IgYW5kIEtBU0FOIGlzIHN0aWxsIGRvYWJsZSB2aWEgZW5hYmxpbmdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03Ni1cXHQjIHRoZSBrZXJuZWwtd2lkZSBXRVJST1I9eS5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo3NzpcXHRkZXBlbmRzIG9uIEtWTV9YODYgXFx1MDAyNlxcdTAwMjYgKChFWFBFUlQgXFx1MDAyNlxcdTAwMjYgIUtBU0FOKSB8fCBXRVJST1IpXFxuYXJjaC94ODYva3ZtL0tjb25maWctNzgtXFx0aGVscFxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjc5OlxcdCAgQWRkIC1XZXJyb3IgdG8gdGhlIGJ1aWxkIGZsYWdzIGZvciBLVk0uXFxuYXJjaC94ODYva3ZtL0tjb25maWctODAtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjg0OlxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NS1cXHRkZXBlbmRzIG9uIEVYUEVSVFxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjg2OlxcdGRlcGVuZHMgb24gS1ZNX1g4NiBcXHUwMDI2XFx1MDAyNiBYODZfNjRcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4NzpcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04OC1cXHRoZWxwXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODk6XFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXMuICBDdXJyZW50bHksIHNvZnR3YXJlLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTkwLVxcdCAgcHJvdGVjdGVkIFZNcyBhcmUgcHVyZWx5IGEgZGV2ZWxvcG1lbnQgYW5kIHRlc3RpbmcgdmVoaWNsZSBmb3JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5MTpcXHQgIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQuICBBdHRlbXB0aW5nIHRvIHJ1biBhIFxcXCJyZWFsXFxcIiBWTSB3b3JrbG9hZCBhcyBhXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTItXFx0ICBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk0gd2lsbCBmYWlsIG1pc2VyYWJseS5cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5NzpcXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5ODpcXHRkZXBlbmRzIG9uIEtWTSBcXHUwMDI2XFx1MDAyNiBJQTMyX0ZFQVRfQ1RMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTktXFx0c2VsZWN0IFg4Nl9GUkVEIGlmIFg4Nl82NFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwMC1cXHRoZWxwXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTAxOlxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCBJbnRlbCdzIFZUXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTAyLVxcdCAgZXh0ZW5zaW9ucywgYS5rLmEuIFZpcnR1YWwgTWFjaGluZSBFeHRlbnNpb25zIChWTVgpLlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA5OiAgICAgICAgZGVwZW5kcyBvbiBLVk1fSU5URUwgXFx1MDAyNlxcdTAwMjYgRVhQRVJUXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTEwLSAgICAgICAgaGVscFxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjExMTogICAgICAgICAgQ2hlY2tzIHRoYXQgS1ZNJ3MgcGFnZSB0YWJsZSBtYW5hZ2VtZW50IGNvZGUgd2lsbCBub3QgaW5jb3JyZWN0bHlcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMTItICAgICAgICAgIGxldCBndWVzdHMgcmVjZWl2ZSBhIHZpcnR1YWxpemF0aW9uIGV4Y2VwdGlvbi4gIFZpcnR1YWxpemF0aW9uXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMTYtICAgICAgICAgIE5vdGU6IHNvbWUgQ1BVcyBhcHBlYXIgdG8gZ2VuZXJhdGUgc3B1cmlvdXMgRVBUIFZpb2xhdGlvbnMgI1ZFc1xcbmFyY2gveDg2L2t2bS9LY29uZmlnOjExNzogICAgICAgICAgdGhhdCB0cmlnZ2VyIEtWTSdzIFdBUk4sIGluIHBhcnRpY3VsYXIgd2l0aCBlcHRhZD0wIGFuZC9vciBuZXN0ZWRcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMTgtICAgICAgICAgIHZpcnR1YWxpemF0aW9uLlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTIxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEyMjpjb25maWcgWDg2X1NHWF9LVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMjMtXFx0Ym9vbCBcXFwiU29mdHdhcmUgR3VhcmQgZVh0ZW5zaW9ucyAoU0dYKSBWaXJ0dWFsaXphdGlvblxcXCJcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMjQ6XFx0ZGVwZW5kcyBvbiBYODZfU0dYIFxcdTAwMjZcXHUwMDI2IEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyNS1cXHRoZWxwXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTI2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEyNzpcXHQgIEVuYWJsZXMgS1ZNIGd1ZXN0cyB0byBjcmVhdGUgU0dYIGVuY2xhdmVzLlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEyOC1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNy1cXHRkZXBlbmRzIG9uIElOVEVMX1REWF9IT1NUXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM4OlxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzOTpcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQwLVxcdGhlbHBcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDc6XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDg6XFx0ZGVwZW5kcyBvbiBLVk0gXFx1MDAyNlxcdTAwMjYgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ5LVxcdGhlbHBcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTA6XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gQU1EIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCB0aGUgQU1ELVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTEtXFx0ICAoU1ZNKSBleHRlbnNpb25zLlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTgtXFx0ZGVmYXVsdCB5XFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU5OlxcdGRlcGVuZHMgb24gS1ZNX0FNRCBcXHUwMDI2XFx1MDAyNiBYODZfNjRcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjA6XFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX1NQX1BTUCBcXHUwMDI2XFx1MDAyNiAhKEtWTV9BTUQ9eSBcXHUwMDI2XFx1MDAyNiBDUllQVE9fREVWX0NDUF9ERD1tKVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE2MS1cXHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjI6XFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTYzOlxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fQ09OVkVSVFxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE2NDpcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1JFQ0xBSU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjU6XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTY2OlxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNjctXFx0aGVscFxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mzpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3NC1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzUtXFx0ZGVmYXVsdCB5XFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTc2OlxcdGRlcGVuZHMgb24gS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3Ny1cXHRoZWxwXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTc4OlxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIHRvIGVtdWxhdGUgYW4gSS9PIEFQSUMsIFBJQywgYW5kIFBJVCwgaS5lLlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3OS1cXHQgIGZvciBmdWxsIGluLWtlcm5lbCBBUElDIGVtdWxhdGlvbi5cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODM6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODQtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTg1LVxcdGRlZmF1bHQgeVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4NjpcXHRkZXBlbmRzIG9uIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODctXFx0aGVscFxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4ODpcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSB0byBlbXVsYXRlIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgKFNNTSlcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODktXFx0ICBpbiB2aXJ0dWFsIG1hY2hpbmVzLiAgVGhpcyBjYW4gYmUgdXNlZCBieSB0aGUgdmlydHVhbCBtYWNoaW5lXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTY6XFx0ZGVwZW5kcyBvbiBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk3LVxcdGRlZmF1bHQgeVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5OC1cXHRoZWxwXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk5OlxcdCAgUHJvdmlkZXMgS1ZNIHN1cHBvcnQgZm9yIGVtdWxhdGluZyBNaWNyb3NvZnQgSHlwZXItVi4gIFRoaXMgYWxsb3dzIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwMC1cXHQgIHRvIGV4cG9zZSBhIHN1YnNldCBvZiB0aGUgcGFyYXZpcnR1YWxpemVkIGludGVyZmFjZXMgZGVmaW5lZCBpbiB0aGVcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwMy1cXHQgIFRoZXNlIGludGVyZmFjZXMgYXJlIHJlcXVpcmVkIGZvciB0aGUgY29ycmVjdCBhbmQgcGVyZm9ybWFudCBmdW5jdGlvbmluZ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNDpcXHQgIG9mIFdpbmRvd3MgYW5kIEh5cGVyLVYgZ3Vlc3RzIG9uIEtWTS5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDUtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDctXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA4OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxMDpcXHRkZXBlbmRzIG9uIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTEtXFx0aGVscFxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxMjpcXHQgIFByb3ZpZGVzIEtWTSBzdXBwb3J0IGZvciB0aGUgaG9zdGluZyBYZW4gSFZNIGd1ZXN0cyBhbmRcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTMtXFx0ICBwYXNzaW5nIFhlbiBoeXBlcmNhbGxzIHRvIHVzZXJzcGFjZS5cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTc6Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTg6XFx0Ym9vbCBcXFwiUHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1xcXCJcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTktXFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjA6XFx0ZGVwZW5kcyBvbiBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjIxLVxcdGRlcGVuZHMgb24gRVhQRVJUXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjIyLVxcdGhlbHBcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMjM6XFx0ICBFbmFibGVzIHJ1bnRpbWUgYXNzZXJ0aW9ucyBpbiBLVk0ncyBNTVUgdGhhdCBhcmUgdG9vIGNvc3RseSB0byBlbmFibGVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjQtXFx0ICBpbiBhbnl0aGluZyByZW1vdGVseSByZXNlbWJsaW5nIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwgZS5nLiB0aGlzXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMwOmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzM6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzQ6XFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzNTpcXHRkZXBlbmRzIG9uIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzYtXFx0cmFuZ2UgMTAyNCA0MDk2XFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzktXFx0aGVscFxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjI0MDpcXHQgIFNldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdC4gTGFyZ2VyIHZhbHVlcyB3aWxsIGluY3JlYXNlXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjQxOlxcdCAgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgZWFjaCBLVk0gZ3Vlc3QsIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgdkNQVXMgYXJlXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjQyLVxcdCAgY3JlYXRlZCBmb3IgYSBnaXZlbiBWTS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MjE6MTAuMjQ0NzYzMzQ4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTMzODgxMjc5MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEtWTSBDb21waWxhdGlvbiBQcm9jZXNzOiBgdGRwX21tdS5jYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgdGRwX21tdS5jYCBpcyBiZWluZyBjb21waWxlZCB3aXRoaW4gdGhlIEtWTSBpbmZyYXN0cnVjdHVyZS4gSSBrbm93IHRoZSBnZW5lcmFsIEtWTSBidWlsZCBwcm9jZXNzLCBidXQgYSBzcGVjaWZpYyBmaWxlIGxpa2UgdGhpcyBvZnRlbiBoYXMgc29tZSBudWFuY2VzLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBhbG1vc3QgYWx3YXlzIHRoZSBgTWFrZWZpbGVgIGluIHRoZSByZWxldmFudCBkaXJlY3RvcnkuIFNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSwgc3BlY2lmaWNhbGx5IHg4NiwgSSdtIGdvaW5nIHN0cmFpZ2h0IGZvciBgYXJjaC94ODYva3ZtL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgbG93ZG93biBvbiB0aGUgYnVpbGQgZmxhZ3MsIGRlcGVuZGVuY2llcywgYW5kIGhvcGVmdWxseSwgYW55IHNwZWNpZmljIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGxvZ2ljIHRoYXQgYXBwbGllcyB0byBgdGRwX21tdS5jYC4gS25vd2luZyB0aGlzIGxldmVsIG9mIGRldGFpbCBpcyBrZXkgdG8gZnVsbHkgdW5kZXJzdGFuZGluZyBob3cgdGhlIGNvZGUgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCBhbmQgaG93IGl0IHdpbGwgYmVoYXZlIHdoZW4gYnVpbHQgZm9yIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHNlY3JldHMgdGhlIE1ha2VmaWxlIGhvbGRzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEwNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjIxOjIzLjYzMjg5NDA4NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjk4NzUzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHBfbW11XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEyOTEgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZT04PWt2bS15XFx0XFx0XFx0Kz0geDg2Lm8gZW11bGF0ZS5vIGlycS5vIGxhcGljLm8gY3B1aWQubyBtc3JzLm8gcG11Lm8gcmVncy5vIFxcXFxcXG4tLVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xMC1cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MTE6a3ZtLSQoQ09ORklHX1g4Nl82NCkgKz0gbW11L3RkcF9pdGVyLm8gbW11L3RkcF9tbXUub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xMi1rdm0tJChDT05GSUdfS1ZNX0lPQVBJQykgKz0gaTgyNTkubyBpODI1NC5vIGlvYXBpYy5vXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11Lmg9OT1leHRlcm4gYm9vbCBfX3JlYWRfbW9zdGx5IHRkcF9lbmFibGVkO1xcbmFyY2gveDg2L2t2bS9tbXUuaC0xMC0jaWZkZWYgQ09ORklHX1g4Nl82NFxcbmFyY2gveDg2L2t2bS9tbXUuaDoxMTpleHRlcm4gYm9vbCBfX3JlYWRfbW9zdGx5IHRkcF9tbXVfZW5hYmxlZDtcXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTItI2Vsc2VcXG5hcmNoL3g4Ni9rdm0vbW11Lmg6MTM6I2RlZmluZSB0ZHBfbW11X2VuYWJsZWQgZmFsc2VcXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTQtI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11Lmg9MzMxPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fc2hhZG93X3Jvb3RfYWxsb2NhdGVkKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUuaC0zNDEtXFxuYXJjaC94ODYva3ZtL21tdS5oOjM0MjppbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKTtcXG5hcmNoL3g4Ni9rdm0vbW11LmgtMzQzLVxcbmFyY2gveDg2L2t2bS9tbXUuaD0zNDQ9c3RhdGljIGlubGluZSBib29sIGt2bV9tZW1zbG90c19oYXZlX3JtYXBzKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vbW11LmgtMzQ1LXtcXG5hcmNoL3g4Ni9rdm0vbW11Lmg6MzQ2OlxcdHJldHVybiAhdGRwX21tdV9lbmFibGVkIHx8IGt2bV9zaGFkb3dfcm9vdF9hbGxvY2F0ZWQoa3ZtKTtcXG5hcmNoL3g4Ni9rdm0vbW11LmgtMzQ3LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMjItI2luY2x1ZGUgXFxcIm1tdV9pbnRlcm5hbC5oXFxcIlxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MjM6I2luY2x1ZGUgXFxcInRkcF9tbXUuaFxcXCJcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTI0LSNpbmNsdWRlIFxcXCJ4ODYuaFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTA4PWJvb2wgX19yZWFkX21vc3RseSB0ZHBfZW5hYmxlZCA9IGZhbHNlO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTA5LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTEwOnN0YXRpYyBib29sIF9fcm9fYWZ0ZXJfaW5pdCB0ZHBfbW11X2FsbG93ZWQ7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMTEtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xMTItI2lmZGVmIENPTkZJR19YODZfNjRcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjExMzpib29sIF9fcmVhZF9tb3N0bHkgdGRwX21tdV9lbmFibGVkID0gdHJ1ZTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjExNDptb2R1bGVfcGFyYW1fbmFtZWQodGRwX21tdSwgdGRwX21tdV9lbmFibGVkLCBib29sLCAwNDQ0KTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjExNTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwodGRwX21tdV9lbmFibGVkKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTExNi0jZW5kaWZcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTYyPXN0YXRpYyB1NjQgbW11X3NwdGVfZ2V0X2xvY2tsZXNzKHU2NCAqc3B0ZXApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU2Ni1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU2NzpzdGF0aWMgaW5saW5lIGJvb2wgaXNfdGRwX21tdV9hY3RpdmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTY4LXtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU2OTpcXHRyZXR1cm4gdGRwX21tdV9lbmFibGVkIFxcdTAwMjZcXHUwMDI2IHZjcHUtXFx1MDAzZWFyY2gubW11LVxcdTAwM2Vyb290X3JvbGUuZGlyZWN0O1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTcwLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTcyPXN0YXRpYyB2b2lkIHdhbGtfc2hhZG93X3BhZ2VfbG9ja2xlc3NfYmVnaW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTczLXtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU3NDpcXHRpZiAoaXNfdGRwX21tdV9hY3RpdmUodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU3NTpcXHRcXHRrdm1fdGRwX21tdV93YWxrX2xvY2tsZXNzX2JlZ2luKCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01NzYtXFx0fSBlbHNlIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTkxPXN0YXRpYyB2b2lkIHdhbGtfc2hhZG93X3BhZ2VfbG9ja2xlc3NfZW5kKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5Mi17XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTM6XFx0aWYgKGlzX3RkcF9tbXVfYWN0aXZlKHZjcHUpKSB7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1OTQ6XFx0XFx0a3ZtX3RkcF9tbXVfd2Fsa19sb2NrbGVzc19lbmQoKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTU5NS1cXHR9IGVsc2Uge1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xNDAxPXN0YXRpYyB2b2lkIGt2bV9tbXVfd3JpdGVfcHJvdGVjdF9wdF9tYXNrZWQoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNDA2LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTQwNzpcXHRpZiAodGRwX21tdV9lbmFibGVkKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTQwODpcXHRcXHRrdm1fdGRwX21tdV9jbGVhcl9kaXJ0eV9wdF9tYXNrZWQoa3ZtLCBzbG90LFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTQwOS1cXHRcXHRcXHRcXHRzbG90LVxcdTAwM2ViYXNlX2dmbiArIGdmbl9vZmZzZXQsIG1hc2ssIHRydWUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xNDI0PXN0YXRpYyB2b2lkIGt2bV9tbXVfY2xlYXJfZGlydHlfcHRfbWFza2VkKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTQyOS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE0MzA6XFx0aWYgKHRkcF9tbXVfZW5hYmxlZClcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE0MzE6XFx0XFx0a3ZtX3RkcF9tbXVfY2xlYXJfZGlydHlfcHRfbWFza2VkKGt2bSwgc2xvdCxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE0MzItXFx0XFx0XFx0XFx0c2xvdC1cXHUwMDNlYmFzZV9nZm4gKyBnZm5fb2Zmc2V0LCBtYXNrLCBmYWxzZSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTE0OTk9Ym9vbCBrdm1fbW11X3Nsb3RfZ2ZuX3dyaXRlX3Byb3RlY3Qoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNTEzLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MTUxNDpcXHRpZiAodGRwX21tdV9lbmFibGVkKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTUxNS1cXHRcXHR3cml0ZV9wcm90ZWN0ZWQgfD1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE1MTY6XFx0XFx0XFx0a3ZtX3RkcF9tbXVfd3JpdGVfcHJvdGVjdF9nZm4oa3ZtLCBzbG90LCBnZm4sIG1pbl9sZXZlbCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNTE3LVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0xNjcxPWJvb2wga3ZtX3VubWFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTY5MC1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE2OTE6XFx0aWYgKHRkcF9tbXVfZW5hYmxlZClcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE2OTI6XFx0XFx0Zmx1c2ggPSBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2Uoa3ZtLCByYW5nZSwgZmx1c2gpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTY5My1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTc4ND1zdGF0aWMgYm9vbCBrdm1fbWF5X2hhdmVfc2hhZG93X21tdV9zcHRlcyhzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0xNzg1LXtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE3ODY6XFx0cmV0dXJuICF0ZHBfbW11X2VuYWJsZWQgfHwgUkVBRF9PTkNFKGt2bS1cXHUwMDNlYXJjaC5pbmRpcmVjdF9zaGFkb3dfcGFnZXMpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc4Ny19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTE3ODk9Ym9vbCBrdm1fYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc5Mi1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE3OTM6XFx0aWYgKHRkcF9tbXVfZW5hYmxlZClcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjE3OTQ6XFx0XFx0eW91bmcgPSBrdm1fdGRwX21tdV9hZ2VfZ2ZuX3JhbmdlKGt2bSwgcmFuZ2UpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTc5NS1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MTgwMj1ib29sIGt2bV90ZXN0X2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTE4MDUtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxODA2OlxcdGlmICh0ZHBfbW11X2VuYWJsZWQpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoxODA3OlxcdFxcdHlvdW5nID0ga3ZtX3RkcF9tbXVfdGVzdF9hZ2VfZ2ZuKGt2bSwgcmFuZ2UpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMTgwOC1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MjE0MD1zdGF0aWMgYm9vbCBpc19vYnNvbGV0ZV9zcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0yMTQ1LVxcdC8qIFREUCBNTVUgcGFnZXMgZG8gbm90IHVzZSB0aGUgTU1VIGdlbmVyYXRpb24uICovXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzoyMTQ2OlxcdHJldHVybiAhaXNfdGRwX21tdV9wYWdlKHNwKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMjE0Ny1cXHQgICAgICAgdW5saWtlbHkoc3AtXFx1MDAzZW1tdV92YWxpZF9nZW4gIT0ga3ZtLVxcdTAwM2VhcmNoLm1tdV92YWxpZF9nZW4pO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0zNDgwPXZvaWQgZGlzYWxsb3dlZF9odWdlcGFnZV9hZGp1c3Qoc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdCwgdTY0IHNwdGUsIGludCBjdXJfbGV2ZWwpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM0ODgtXFx0XFx0ICogQSBzbWFsbCBTUFRFIGV4aXN0cyBmb3IgdGhpcyBwZm4sIGJ1dCBGTkFNRShmZXRjaCksXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozNDg5OlxcdFxcdCAqIGRpcmVjdF9tYXAoKSwgb3Iga3ZtX3RkcF9tbXVfbWFwKCkgd291bGQgbGlrZSB0byBjcmVhdGUgYVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzQ5MC1cXHRcXHQgKiBsYXJnZSBQVEUgaW5zdGVhZDoganVzdCBmb3JjZSB0aGVtIHRvIGdvIGRvd24gYW5vdGhlciBsZXZlbCxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9MzcyNj1zdGF0aWMgaW50IGZhc3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM3NDMtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozNzQ0OlxcdFxcdGlmICh0ZHBfbW11X2VuYWJsZWQpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozNzQ1OlxcdFxcdFxcdHNwdGVwID0ga3ZtX3RkcF9tbXVfZmFzdF9wZl9nZXRfbGFzdF9zcHRlcCh2Y3B1LCBmYXVsdC1cXHUwMDNlZ2ZuLCBcXHUwMDI2c3B0ZSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zNzQ2LVxcdFxcdGVsc2VcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9Mzg1MT1zdGF0aWMgdm9pZCBtbXVfZnJlZV9yb290X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBocGFfdCAqcm9vdF9ocGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM4NjItXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozODYzOlxcdGlmIChpc190ZHBfbW11X3BhZ2Uoc3ApKSB7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zODY0LVxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfcmVhZChcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozODY1OlxcdFxcdGt2bV90ZHBfbW11X3B1dF9yb290KGt2bSwgc3ApO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzg2Ni1cXHR9IGVsc2Uge1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0zODc2PXZvaWQga3ZtX21tdV9mcmVlX3Jvb3RzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXUgKm1tdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzg3OC17XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozODc5OlxcdGJvb2wgaXNfdGRwX21tdSA9IHRkcF9tbXVfZW5hYmxlZCBcXHUwMDI2XFx1MDAyNiBtbXUtXFx1MDAzZXJvb3Rfcm9sZS5kaXJlY3Q7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zODgwLVxcdGludCBpO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zOTAxLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MzkwMjpcXHRpZiAoaXNfdGRwX21tdSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM5MDMtXFx0XFx0cmVhZF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzkzMC1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM5MzE6XFx0aWYgKGlzX3RkcF9tbXUpIHtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM5MzItXFx0XFx0cmVhZF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz0zOTg2PXN0YXRpYyBpbnQgbW11X2FsbG9jX2RpcmVjdF9yb290cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM5OTMtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzozOTk0OlxcdGlmICh0ZHBfbW11X2VuYWJsZWQpIHtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM5OTUtXFx0XFx0aWYgKGt2bV9oYXNfbWlycm9yZWRfdGRwKHZjcHUtXFx1MDAzZWt2bSkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM5OTYtXFx0XFx0ICAgICFWQUxJRF9QQUdFKG1tdS1cXHUwMDNlbWlycm9yX3Jvb3RfaHBhKSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM5OTc6XFx0XFx0XFx0a3ZtX3RkcF9tbXVfYWxsb2Nfcm9vdCh2Y3B1LCB0cnVlKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjM5OTg6XFx0XFx0a3ZtX3RkcF9tbXVfYWxsb2Nfcm9vdCh2Y3B1LCBmYWxzZSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zOTk5LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NDYyPXN0YXRpYyBpbnQgZ2V0X3NwdGVzX2xvY2tsZXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsIHU2NCAqc3B0ZXMsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ0NjgtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NDY5OlxcdGlmIChpc190ZHBfbW11X2FjdGl2ZSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ0NzA6XFx0XFx0bGVhZiA9IGt2bV90ZHBfbW11X2dldF93YWxrKHZjcHUsIGFkZHIsIHNwdGVzLCByb290X2xldmVsKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ0NzEtXFx0ZWxzZVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00OTMyPUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1faGFuZGxlX3BhZ2VfZmF1bHQpO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTM0LSNpZmRlZiBDT05GSUdfWDg2XzY0XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0OTM1OnN0YXRpYyBpbnQga3ZtX3RkcF9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTM2LVxcdFxcdFxcdFxcdCAgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDk2MC1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ5NjE6XFx0ciA9IGt2bV90ZHBfbW11X21hcCh2Y3B1LCBmYXVsdCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTYyLVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00OTcwPXN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDk3Mi0jaWZkZWYgQ09ORklHX1g4Nl82NFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDk3MzpcXHRpZiAodGRwX21tdV9lbmFibGVkKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDk3NDpcXHRcXHRyZXR1cm4ga3ZtX3RkcF9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBmYXVsdCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTc1LSNlbmRpZlxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01MTY3PXN0YXRpYyB2b2lkIGt2bV9hc3NlcnRfZ21lbV9pbnZhbGlkYXRlX2xvY2tfaGVsZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTc4LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTE3OTppbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE4MC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUyMDktXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MjEwOlxcdGlmIChLVk1fQlVHX09OKCF0ZHBfbW11X2VuYWJsZWQsIGt2bSkpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjExLVxcdFxcdHJldHVybiAtRUlPO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjM0LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTIzNTpcXHRcXHRyID0ga3ZtX3RkcF9tbXVfbWFwKHZjcHUsIFxcdTAwMjZmYXVsdCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjM2LVxcdH0gd2hpbGUgKHIgPT0gUkVUX1BGX1JFVFJZKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTI0Mi19XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MjQzOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4pO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTI0NC0jZW5kaWZcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTk3OT1zdGF0aWMgdW5pb24ga3ZtX21tdV9wYWdlX3JvbGVcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjU5ODA6a3ZtX2NhbGNfdGRwX21tdV9yb290X3BhZ2Vfcm9sZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01OTgxLVxcdFxcdFxcdFxcdHVuaW9uIGt2bV9jcHVfcm9sZSBjcHVfcm9sZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjAwMi1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjYwMDM6c3RhdGljIHZvaWQgaW5pdF9rdm1fdGRwX21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MDA0LVxcdFxcdFxcdCAgICAgdW5pb24ga3ZtX2NwdV9yb2xlIGNwdV9yb2xlKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MDA2LVxcdHN0cnVjdCBrdm1fbW11ICpjb250ZXh0ID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gucm9vdF9tbXU7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2MDA3OlxcdHVuaW9uIGt2bV9tbXVfcGFnZV9yb2xlIHJvb3Rfcm9sZSA9IGt2bV9jYWxjX3RkcF9tbXVfcm9vdF9wYWdlX3JvbGUodmNwdSwgY3B1X3JvbGUpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjAwOC1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjE3Mz12b2lkIGt2bV9pbml0X21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYxODEtXFx0XFx0aWYgKHRkcF9lbmFibGVkKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjE4MjpcXHRcXHRcXHRpbml0X2t2bV90ZHBfbW11KHZjcHUsIGNwdV9yb2xlKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYxODMtXFx0XFx0ZWxzZVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02MjE5PWludCBrdm1fbW11X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02MjQ0LVxcdCAqIHN0YWxlIGVudHJpZXMuICBGbHVzaGluZyBvbiBhbGxvYyBhbHNvIGFsbG93cyBLVk0gdG8gc2tpcCB0aGUgVExCXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2MjQ1OlxcdCAqIGZsdXNoIHdoZW4gZnJlZWluZyBhIHJvb3QgKHNlZSBrdm1fdGRwX21tdV9wdXRfcm9vdCgpKS5cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTYyNDYtXFx0ICovXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY3NzU9dm9pZCBrdm1fY29uZmlndXJlX21tdShib29sIGVuYWJsZV90ZHAsIGludCB0ZHBfZm9yY2VkX3Jvb3RfbGV2ZWwsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY3ODItI2lmZGVmIENPTkZJR19YODZfNjRcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY3ODM6XFx0dGRwX21tdV9lbmFibGVkID0gdGRwX21tdV9hbGxvd2VkIFxcdTAwMjZcXHUwMDI2IHRkcF9lbmFibGVkO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjc4NC0jZW5kaWZcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9Njk1Nj1zdGF0aWMgdm9pZCBfX2t2bV9tbXVfemFwX2FsbF9mYXN0X2Zyb250X2hhbGYoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02OTc3LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Njk3ODpcXHRpZiAodGRwX21tdV9lbmFibGVkKSB7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02OTc5LVxcdFxcdC8qXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY5ODItXFx0XFx0ICovXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2OTgzOlxcdFxcdGt2bV90ZHBfbW11X2ludmFsaWRhdGVfcm9vdHMoa3ZtLCBLVk1fRElSRUNUX1JPT1RTKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY5ODQtXFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02OTk5PXN0YXRpYyB2b2lkIF9fa3ZtX21tdV96YXBfYWxsX2Zhc3RfYmFja19oYWxmKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzAxMS1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjcwMTI6XFx0aWYgKHRkcF9tbXVfZW5hYmxlZClcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjcwMTM6XFx0XFx0a3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKGt2bSwgdHJ1ZSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MDE0LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzAzND1pbnQga3ZtX21tdV9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzA0My1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjcwNDQ6XFx0aWYgKHRkcF9tbXVfZW5hYmxlZCkge1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzA0NTpcXHRcXHRrdm1fbW11X2luaXRfdGRwX21tdShrdm0pO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzA0Ni1cXHR9IGVsc2Uge1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz03MDY5PXZvaWQga3ZtX21tdV91bmluaXRfdm0oc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MDcyLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzA3MzpcXHRpZiAodGRwX21tdV9lbmFibGVkKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzA3NDpcXHRcXHRrdm1fbW11X3VuaW5pdF90ZHBfbW11KGt2bSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MDc1LVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz03MTEzPXZvaWQga3ZtX3phcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm5fc3RhcnQsIGdmbl90IGdmbl9lbmQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTcxMjctXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MTI4OlxcdGlmICh0ZHBfbW11X2VuYWJsZWQpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MTI5OlxcdFxcdGZsdXNoID0ga3ZtX3RkcF9tbXVfemFwX2xlYWZzKGt2bSwgZ2ZuX3N0YXJ0LCBnZm5fZW5kLCBmbHVzaCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTMwLVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz03MTQ3PXZvaWQga3ZtX21tdV9zbG90X3JlbW92ZV93cml0ZV9hY2Nlc3Moc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTU3LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzE1ODpcXHRpZiAodGRwX21tdV9lbmFibGVkKSB7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTU5LVxcdFxcdHJlYWRfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MTYwOlxcdFxcdGt2bV90ZHBfbW11X3dycHJvdF9zbG90KGt2bSwgbWVtc2xvdCwgc3RhcnRfbGV2ZWwpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzE2MS1cXHRcXHRyZWFkX3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTczOTU9dm9pZCBrdm1fbW11X3RyeV9zcGxpdF9odWdlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzM5OS17XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3NDAwOlxcdGlmICghdGRwX21tdV9lbmFibGVkKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzQwMS1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc0MDUtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3NDA2OlxcdGt2bV90ZHBfbW11X3RyeV9zcGxpdF9odWdlX3BhZ2VzKGt2bSwgbWVtc2xvdCwgc3RhcnQsIGVuZCwgdGFyZ2V0X2xldmVsLCBmYWxzZSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NDA3LVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz03NDE0PXZvaWQga3ZtX21tdV9zbG90X3RyeV9zcGxpdF9odWdlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzQyMC1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc0MjE6XFx0aWYgKCF0ZHBfbW11X2VuYWJsZWQpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NDIyLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzQzMC1cXHRyZWFkX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzQzMTpcXHRrdm1fdGRwX21tdV90cnlfc3BsaXRfaHVnZV9wYWdlcyhrdm0sIG1lbXNsb3QsIHN0YXJ0LCBlbmQsIHRhcmdldF9sZXZlbCwgdHJ1ZSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NDMyLVxcdHJlYWRfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzQ5OT12b2lkIGt2bV9tbXVfcmVjb3Zlcl9odWdlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzUwNy1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc1MDg6XFx0aWYgKHRkcF9tbXVfZW5hYmxlZCkge1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzUwOS1cXHRcXHRyZWFkX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzUxMDpcXHRcXHRrdm1fdGRwX21tdV9yZWNvdmVyX2h1Z2VfcGFnZXMoa3ZtLCBzbG90KTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc1MTEtXFx0XFx0cmVhZF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz03NTE1PXZvaWQga3ZtX21tdV9zbG90X2xlYWZfY2xlYXJfZGlydHkoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NTI3LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzUyODpcXHRpZiAodGRwX21tdV9lbmFibGVkKSB7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NTI5LVxcdFxcdHJlYWRfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3NTMwOlxcdFxcdGt2bV90ZHBfbW11X2NsZWFyX2RpcnR5X3Nsb3Qoa3ZtLCBtZW1zbG90KTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc1MzEtXFx0XFx0cmVhZF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz03NTQ0PXN0YXRpYyB2b2lkIGt2bV9tbXVfemFwX2FsbChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc1NjItXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3NTYzOlxcdGlmICh0ZHBfbW11X2VuYWJsZWQpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3NTY0OlxcdFxcdGt2bV90ZHBfbW11X3phcF9hbGwoa3ZtKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc1NjUtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTc3NzA9dm9pZCBfX2luaXQga3ZtX21tdV94ODZfbW9kdWxlX2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzc3OS1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc3ODA6XFx0dGRwX21tdV9hbGxvd2VkID0gdGRwX21tdV9lbmFibGVkO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzc4MS1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzgyMz12b2lkIGt2bV9tbXVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc4MjUtXFx0a3ZtX21tdV91bmxvYWQodmNwdSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3ODI2OlxcdGlmICh0ZHBfbW11X2VuYWJsZWQpIHtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc4MjctXFx0XFx0cmVhZF9sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzkzMz1zdGF0aWMgdm9pZCBrdm1fcmVjb3Zlcl9ueF9odWdlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzkzNi0jaWZkZWYgQ09ORklHX1g4Nl82NFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzkzNzpcXHRjb25zdCBib29sIGlzX3RkcF9tbXUgPSBtbXVfdHlwZSA9PSBLVk1fVERQX01NVTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc5Mzg6XFx0c3BpbmxvY2tfdCAqdGRwX21tdV9wYWdlc19sb2NrID0gXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC50ZHBfbW11X3BhZ2VzX2xvY2s7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03OTM5LSNlbHNlXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3OTQwOlxcdGNvbnN0IGJvb2wgaXNfdGRwX21tdSA9IGZhbHNlO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Nzk0MTpcXHRzcGlubG9ja190ICp0ZHBfbW11X3BhZ2VzX2xvY2sgPSBOVUxMO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzk0Mi0jZW5kaWZcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzk1Mi1cXHRyY3VfaWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3OTUzOlxcdGlmIChpc190ZHBfbW11KVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzk1NC1cXHRcXHRyZWFkX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03OTY1LVxcdGZvciAoIDsgdG9femFwOyAtLXRvX3phcCkge1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Nzk2NjpcXHRcXHRpZiAoaXNfdGRwX21tdSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc5Njc6XFx0XFx0XFx0c3Bpbl9sb2NrKHRkcF9tbXVfcGFnZXNfbG9jayk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03OTY4LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzk2OS1cXHRcXHRpZiAobGlzdF9lbXB0eShueF9odWdlX3BhZ2VzKSkge1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Nzk3MDpcXHRcXHRcXHRpZiAoaXNfdGRwX21tdSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjc5NzE6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2sodGRwX21tdV9wYWdlc19sb2NrKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc5NzItXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc5ODktXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3OTkwOlxcdFxcdGlmIChpc190ZHBfbW11KVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Nzk5MTpcXHRcXHRcXHRzcGluX3VubG9jayh0ZHBfbW11X3BhZ2VzX2xvY2spO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzk5Mi1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODAwMC1cXHRcXHRpZiAoIWt2bV9tbXVfc3BfZGlydHlfbG9nZ2luZ19lbmFibGVkKGt2bSwgc3ApKSB7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo4MDAxOlxcdFxcdFxcdGlmIChpc190ZHBfbW11KVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6ODAwMjpcXHRcXHRcXHRcXHRmbHVzaCB8PSBrdm1fdGRwX21tdV96YXBfcG9zc2libGVfbnhfaHVnZV9wYWdlKGt2bSwgc3ApO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODAwMy1cXHRcXHRcXHRlbHNlXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTgwMTMtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo4MDE0OlxcdFxcdFxcdGlmIChpc190ZHBfbW11KVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODAxNS1cXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWRfcndsb2NrX3JlYWQoXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy04MDI2LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6ODAyNzpcXHRpZiAoaXNfdGRwX21tdSlcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTgwMjgtXFx0XFx0cmVhZF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaD00ND1zdHJ1Y3Qga3ZtX21tdV9wYWdlIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmgtNTEtXFxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaDo1MjpcXHRib29sIHRkcF9tbXVfcGFnZTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTUzLVxcdGJvb2wgdW5zeW5jO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaC01Ny1cXHRcXHQvKiBPbmx5IGFjY2Vzc2VkIHVuZGVyIHNsb3RzX2xvY2suICAqL1xcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmg6NTg6XFx0XFx0Ym9vbCB0ZHBfbW11X3NjaGVkdWxlZF9yb290X3RvX3phcDtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTU5LVxcdH07XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTkzLVxcdFxcdGludCByb290X2NvdW50O1xcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmg6OTQ6XFx0XFx0cmVmY291bnRfdCB0ZHBfbW11X3Jvb3RfY291bnQ7XFxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaC05NS1cXHR9O1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaD0yMjY9c3RydWN0IGt2bV9wYWdlX2ZhdWx0IHtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmgtMjUxLVxcdCAqIE1heGltdW0gcGFnZSBzaXplIHRoYXQgY2FuIGJlIGNyZWF0ZWQgZm9yIHRoaXMgZmF1bHQ7IGlucHV0IHRvXFxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaDoyNTI6XFx0ICogRk5BTUUoZmV0Y2gpLCBkaXJlY3RfbWFwKCkgYW5kIGt2bV90ZHBfbW11X21hcCgpLlxcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmgtMjUzLVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXV0cmFjZS5oPTM5OD1UUkFDRV9FVkVOVChcXG5hcmNoL3g4Ni9rdm0vbW11L21tdXRyYWNlLmg6Mzk5OlxcdGt2bV90ZHBfbW11X3NwdGVfY2hhbmdlZCxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdXRyYWNlLmgtNDAwLVxcdFRQX1BST1RPKGludCBhc19pZCwgZ2ZuX3QgZ2ZuLCBpbnQgbGV2ZWwsIHU2NCBvbGRfc3B0ZSwgdTY0IG5ld19zcHRlKSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYz0xMj1zdGF0aWMgdm9pZCB0ZHBfaXRlcl9yZWZyZXNoX3NwdGVwKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy0xNS1cXHRcXHRTUFRFX0lOREVYKChpdGVyLVxcdTAwM2VnZm4gfCBpdGVyLVxcdTAwM2VnZm5fYml0cykgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCwgaXRlci1cXHUwMDNlbGV2ZWwpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYzoxNjpcXHRpdGVyLVxcdTAwM2VvbGRfc3B0ZSA9IGt2bV90ZHBfbW11X3JlYWRfc3B0ZShpdGVyLVxcdTAwM2VzcHRlcCk7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTE3LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYz04MD1zdGF0aWMgYm9vbCB0cnlfc3RlcF9kb3duKHN0cnVjdCB0ZHBfaXRlciAqaXRlcilcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy05MC1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmM6OTE6XFx0aXRlci1cXHUwMDNlb2xkX3NwdGUgPSBrdm1fdGRwX21tdV9yZWFkX3NwdGUoaXRlci1cXHUwMDNlc3B0ZXApO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYy05Mi1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYz0xMTI9c3RhdGljIGJvb2wgdHJ5X3N0ZXBfc2lkZShzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmMtMTI0LVxcdGl0ZXItXFx1MDAzZXNwdGVwKys7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jOjEyNTpcXHRpdGVyLVxcdTAwM2VvbGRfc3B0ZSA9IGt2bV90ZHBfbW11X3JlYWRfc3B0ZShpdGVyLVxcdTAwM2VzcHRlcCk7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jLTEyNi1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0xNi0gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6MTc6c3RhdGljIGlubGluZSB1NjQga3ZtX3RkcF9tbXVfcmVhZF9zcHRlKHRkcF9wdGVwX3Qgc3B0ZXApXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTE4LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0yOC0gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6Mjk6c3RhdGljIGlubGluZSB1NjQga3ZtX3RkcF9tbXVfd3JpdGVfc3B0ZV9hdG9taWModGRwX3B0ZXBfdCBzcHRlcCwgdTY0IG5ld19zcHRlKVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC0zMC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtMzQtXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oOjM1OnN0YXRpYyBpbmxpbmUgdTY0IHRkcF9tbXVfY2xlYXJfc3B0ZV9iaXRzX2F0b21pYyh0ZHBfcHRlcF90IHNwdGVwLCB1NjQgbWFzaylcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtMzYte1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTQxLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaDo0MjpzdGF0aWMgaW5saW5lIHZvaWQgX19rdm1fdGRwX21tdV93cml0ZV9zcHRlKHRkcF9wdGVwX3Qgc3B0ZXAsIHU2NCBuZXdfc3B0ZSlcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtNDMte1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTUyLSAqL1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaDo1MzpzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3RkcF9tbXVfc3B0ZV9uZWVkX2F0b21pY191cGRhdGUodTY0IG9sZF9zcHRlLCBpbnQgbGV2ZWwpXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTU0LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC01OS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6NjA6c3RhdGljIGlubGluZSB1NjQga3ZtX3RkcF9tbXVfd3JpdGVfc3B0ZSh0ZHBfcHRlcF90IHNwdGVwLCB1NjQgb2xkX3NwdGUsXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTYxLVxcdFxcdFxcdFxcdFxcdCB1NjQgbmV3X3NwdGUsIGludCBsZXZlbClcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtNjIte1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaDo2MzpcXHRpZiAoa3ZtX3RkcF9tbXVfc3B0ZV9uZWVkX2F0b21pY191cGRhdGUob2xkX3NwdGUsIGxldmVsKSlcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6NjQ6XFx0XFx0cmV0dXJuIGt2bV90ZHBfbW11X3dyaXRlX3NwdGVfYXRvbWljKHNwdGVwLCBuZXdfc3B0ZSk7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTY1LVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaDo2NjpcXHRfX2t2bV90ZHBfbW11X3dyaXRlX3NwdGUoc3B0ZXAsIG5ld19zcHRlKTtcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtNjctXFx0cmV0dXJuIG9sZF9zcHRlO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTY5LVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaDo3MDpzdGF0aWMgaW5saW5lIHU2NCB0ZHBfbW11X2NsZWFyX3NwdGVfYml0cyh0ZHBfcHRlcF90IHNwdGVwLCB1NjQgb2xkX3NwdGUsXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTcxLVxcdFxcdFxcdFxcdFxcdCAgdTY0IG1hc2ssIGludCBsZXZlbClcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtNzIte1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaDo3MzpcXHRpZiAoa3ZtX3RkcF9tbXVfc3B0ZV9uZWVkX2F0b21pY191cGRhdGUob2xkX3NwdGUsIGxldmVsKSlcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg6NzQ6XFx0XFx0cmV0dXJuIHRkcF9tbXVfY2xlYXJfc3B0ZV9iaXRzX2F0b21pYyhzcHRlcCwgbWFzayk7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTc1LVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaDo3NjpcXHRfX2t2bV90ZHBfbW11X3dyaXRlX3NwdGUoc3B0ZXAsIG9sZF9zcHRlIFxcdTAwMjYgfm1hc2spO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaC03Ny1cXHRyZXR1cm4gb2xkX3NwdGU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmg9MTI2PXN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmgtMTQ0LVxcdGZvciAodGRwX2l0ZXJfc3RhcnQoXFx1MDAyNml0ZXIsIHJvb3QsIG1pbl9sZXZlbCwgMCwgMCk7XFx0XFx0XFxcXFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaDoxNDU6XFx0XFx0aXRlci52YWxpZCBcXHUwMDI2XFx1MDAyNiBpdGVyLmdmbiBcXHUwMDNjIHRkcF9tbXVfbWF4X2dmbl9leGNsdXNpdmUoKTtcXHRcXFxcXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oLTE0Ni1cXHRcXHR0ZHBfaXRlcl9uZXh0KFxcdTAwMjZpdGVyKSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTctI2luY2x1ZGUgXFxcInRkcF9pdGVyLmhcXFwiXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6ODojaW5jbHVkZSBcXFwidGRwX21tdS5oXFxcIlxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTktI2luY2x1ZGUgXFxcInNwdGUuaFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTE0LS8qIEluaXRpYWxpemVzIHRoZSBURFAgTU1VIGZvciB0aGUgVk0sIGlmIGVuYWJsZWQuICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTU6dm9pZCBrdm1fbW11X2luaXRfdGRwX21tdShzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTYte1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjE3OlxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudGRwX21tdV9yb290cyk7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTg6XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC50ZHBfbW11X3BhZ2VzX2xvY2spO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTE5LX1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jPTIyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBrdm1fbG9ja2RlcF9hc3NlcnRfbW11X2xvY2tfaGVsZChzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0zMi1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzozMzp2b2lkIGt2bV9tbXVfdW5pbml0X3RkcF9tbXUoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTM0LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTM5LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjQwOlxcdGt2bV90ZHBfbW11X2ludmFsaWRhdGVfcm9vdHMoa3ZtLCBLVk1fVkFMSURfUk9PVFMpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjQxOlxcdGt2bV90ZHBfbW11X3phcF9pbnZhbGlkYXRlZF9yb290cyhrdm0sIGZhbHNlKTtcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy00Mi1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy00My0jaWZkZWYgQ09ORklHX0tWTV9QUk9WRV9NTVVcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo0NDpcXHRLVk1fTU1VX1dBUk5fT04oYXRvbWljNjRfcmVhZChcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnRkcF9tbXVfcGFnZXMpKTtcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy00NS0jZW5kaWZcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo0NjpcXHRXQVJOX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudGRwX21tdV9yb290cykpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTQ3LVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNTUtXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6NTY6c3RhdGljIHZvaWQgX190ZHBfbW11X2ZyZWVfc3Aoc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNTcte1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNjEtXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6NjI6c3RhdGljIHZvaWQgdGRwX21tdV9mcmVlX3VudXNlZF9zcChzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcClcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy02My17XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNjQtXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNwLVxcdTAwM2VleHRlcm5hbF9zcHQpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjY1OlxcdF9fdGRwX21tdV9mcmVlX3NwKHNwKTtcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy02Ni19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy03NS0gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo3NjpzdGF0aWMgdm9pZCB0ZHBfbW11X2ZyZWVfc3BfcmN1X2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy03Ny17XFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MjE6MjMuNjg1ODg1MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNDczODk3NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IERpdmluZyBpbnRvIHRoZSBURFAgTU1VKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGlzIHBhdGNoIGlzIGNoYW5naW5nLiBGaXJzdCwgSSdtIGdvaW5nIHRvIG1ldGljdWxvdXNseSByZXZpZXcgZXZlcnkgZGV0YWlsIG9mIHRoZSBwYXRjaCBpdHNlbGYuIFRoZW4sIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIFRoYXQgbWVhbnMgYSBkZWVwIGRpdmUgaW50byB0aGUgcmVsZXZhbnQgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmNgIGFuZCBgYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jYCBmaWxlcy4gSSBuZWVkIHRvIHNlZSBob3cgdGhlc2UgY2hhbmdlcyBpbnRlZ3JhdGUgd2l0aCB0aGUgZXhpc3RpbmcgVERQIE1NVSBsb2dpYywgaG93IHRoZXkgbWlnaHQgYWZmZWN0IHRoZSBleGlzdGluZyBmbG93cywgYW5kIHdoYXQgbmV3IGJlaGF2aW9yIHRoZXkgaW50cm9kdWNlLiBObyBza2ltbWluZzsgdGhpcyBuZWVkcyBhIGZ1bGwsIHRob3VnaHRmdWwgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ3NzMsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoyMTozNi4xNTk3ODU1ODFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkyMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MjA6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA5MjE6XFx0XFx0fVxcbiA5MjI6XFx0XFxuIDkyMzpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gOTI0OlxcdH1cXG4gOTI1OlxcdFxcbiA5MjY6XFx0c3RhdGljIGJvb2wgdGRwX21tdV96YXBfY29tcGxldGVkX2VtcHR5X2xlYWZfcHQoc3RydWN0IGt2bSAqa3ZtLFxcbiA5Mjc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50ICpldmVudCxcXG4gOTI4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXFxuIDkyOTpcXHRcXHRcXHRcXHRcXHRcXHRcXHR0ZHBfcHRlcF90IHphcHBlZF9sZWFmX3B0KVxcbiA5MzA6XFx0e1xcbiA5MzE6XFx0XFx0c3RydWN0IGt2bV9tbXVfcGFnZSAqY2hpbGRfc3A7XFxuIDkzMjpcXHRcXG4gOTMzOlxcdFxcdGlmIChldmVudC1cXHUwMDNlbGV2ZWwgIT0gUEdfTEVWRUxfMk0gfHxcXG4gOTM0OlxcdFxcdCAgICAhaXNfc2hhZG93X3ByZXNlbnRfcHRlKGV2ZW50LVxcdTAwM2VvbGRfc3B0ZSkgfHxcXG4gOTM1OlxcdFxcdCAgICBpc19sYXN0X3NwdGUoZXZlbnQtXFx1MDAzZW9sZF9zcHRlLCBldmVudC1cXHUwMDNlbGV2ZWwpKVxcbiA5MzY6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA5Mzc6XFx0XFxuIDkzODpcXHRcXHRpZiAoZXZlbnQtXFx1MDAzZWdmbiBcXHUwMDNjIHN0YXJ0IHx8XFxuIDkzOTpcXHRcXHQgICAgZXZlbnQtXFx1MDAzZWdmbiArIEtWTV9QQUdFU19QRVJfSFBBR0UoZXZlbnQtXFx1MDAzZWxldmVsKSBcXHUwMDNlIGVuZClcXG4gOTQwOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gOTQxOlxcdFxcbiA5NDI6XFx0XFx0LyogTGVhdmUgcHJvZHVjdGl2ZSBsZWFmIHRhYmxlcyBpbiBwbGFjZSB0byBhdm9pZCByZWZhdWx0IGNodXJuLiAqL1xcbiA5NDM6XFx0XFx0aWYgKHphcHBlZF9sZWFmX3B0ID09IGV2ZW50LVxcdTAwM2VzcHRlcClcXG4gOTQ0OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gOTQ1OlxcdFxcbiA5NDY6XFx0XFx0Y2hpbGRfc3AgPSBzcHRlX3RvX2NoaWxkX3NwKGV2ZW50LVxcdTAwM2VvbGRfc3B0ZSk7XFxuIDk0NzpcXHRcXHRpZiAoaXNfbWlycm9yX3NwKGNoaWxkX3NwKSlcXG4gOTQ4OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gOTQ5OlxcdFxcbiA5NTA6XFx0XFx0aWYgKGNoaWxkX3NwLVxcdTAwM2Vyb2xlLmxldmVsICE9IFBHX0xFVkVMXzRLKVxcbiA5NTE6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA5NTI6XFx0XFxuIDk1MzpcXHRcXHR0ZHBfbW11X3NldF9zcHRlKGt2bSwgZXZlbnQtXFx1MDAzZXNwdGVwLCBldmVudC1cXHUwMDNlb2xkX3NwdGUsXFxuIDk1NDpcXHRcXHRcXHRcXHQgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUsIGV2ZW50LVxcdTAwM2VnZm4sIGV2ZW50LVxcdTAwM2VsZXZlbCk7XFxuIDk1NTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gOTU2OlxcdH1cXG4gOTU3OlxcdFxcbiA5NTg6XFx0LypcXG4gOTU5OlxcdCAqIElmIGNhbl95aWVsZCBpcyB0cnVlLCB3aWxsIHJlbGVhc2UgdGhlIE1NVSBsb2NrIGFuZCByZXNjaGVkdWxlIGlmIHRoZVxcbiA5NjA6XFx0ICogc2NoZWR1bGVyIG5lZWRzIHRoZSBDUFUgb3IgdGhlcmUgaXMgY29udGVudGlvbiBvbiB0aGUgTU1VIGxvY2suIElmIHRoaXNcXG4gOTYxOlxcdCAqIGZ1bmN0aW9uIGNhbm5vdCB5aWVsZCwgaXQgd2lsbCBub3QgcmVsZWFzZSB0aGUgTU1VIGxvY2sgb3IgcmVzY2hlZHVsZSBhbmRcXG4gOTYyOlxcdCAqIHRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgaXQgZG9lcyBub3Qgc3VwcGx5IHRvbyBsYXJnZSBhIEdGTiByYW5nZSwgb3IgdGhlXFxuIDk2MzpcXHQgKiBvcGVyYXRpb24gY2FuIGNhdXNlIGEgc29mdCBsb2NrdXAuXFxuIDk2NDpcXHQgKi9cXG4gOTY1OlxcdHN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcXG4gOTY2OlxcdFxcdFxcdFxcdCAgICAgIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgY2FuX3lpZWxkLCBib29sIGZsdXNoKVxcbiA5Njc6XFx0e1xcbiA5Njg6XFx0XFx0c3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50IGV2ZW50ID0ge307XFxuIDk2OTpcXHRcXHRzdHJ1Y3QgdGRwX2l0ZXIgaXRlcjtcXG4gOTcwOlxcdFxcdHRkcF9wdGVwX3QgemFwcGVkX2xlYWZfcHQgPSBOVUxMO1xcbiA5NzE6XFx0XFx0Ym9vbCByZW1vdmVkX3NwID0gZmFsc2U7XFxuIDk3MjpcXHRcXG4gOTczOlxcdFxcdGVuZCA9IG1pbihlbmQsIHRkcF9tbXVfbWF4X2dmbl9leGNsdXNpdmUoKSk7XFxuIDk3NDpcXHRcXG4gOTc1OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbiA5NzY6XFx0XFxuIDk3NzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDk3ODpcXHRcXG4gOTc5OlxcdFxcdHRkcF9pdGVyX3N0YXJ0KFxcdTAwMjZpdGVyLCByb290LCBQR19MRVZFTF80Sywgc3RhcnQsXFxuIDk4MDpcXHRcXHRcXHQgICAgICAga3ZtX2dmbl9yb290X2JpdHMoa3ZtLCByb290KSk7XFxuIDk4MTpcXHRcXHR3aGlsZSAoaXRlci52YWxpZCBcXHUwMDI2XFx1MDAyNiBpdGVyLmdmbiBcXHUwMDNjIGVuZCkge1xcbiA5ODI6XFx0XFx0XFx0aWYgKGNhbl95aWVsZCBcXHUwMDI2XFx1MDAyNlxcbiA5ODM6XFx0XFx0XFx0ICAgIHRkcF9tbXVfaXRlcl9jb25kX3Jlc2NoZWQoa3ZtLCBcXHUwMDI2aXRlciwgZmx1c2gsIGZhbHNlKSkge1xcbiA5ODQ6XFx0XFx0XFx0XFx0Zmx1c2ggPSBmYWxzZTtcXG4gOTg1OlxcdFxcdFxcdFxcdHRkcF9pdGVyX25leHQoXFx1MDAyNml0ZXIpO1xcbiA5ODY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDk4NzpcXHRcXHRcXHR9XFxuIDk4ODpcXHRcXG4gOTg5OlxcdFxcdFxcdGlmIChpc19zaGFkb3dfcHJlc2VudF9wdGUoaXRlci5vbGRfc3B0ZSkgXFx1MDAyNlxcdTAwMjZcXG4gOTkwOlxcdFxcdFxcdCAgICBpc19sYXN0X3NwdGUoaXRlci5vbGRfc3B0ZSwgaXRlci5sZXZlbCkpIHtcXG4gOTkxOlxcdFxcdFxcdFxcdGlmIChpdGVyLmxldmVsID09IFBHX0xFVkVMXzRLKSB7XFxuIDk5MjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDtcXG4gOTkzOlxcdFxcbiA5OTQ6XFx0XFx0XFx0XFx0XFx0c3AgPSBzcHRlcF90b19zcChyY3VfZGVyZWZlcmVuY2UoaXRlci5zcHRlcCkpO1xcbiA5OTU6XFx0XFx0XFx0XFx0XFx0emFwcGVkX2xlYWZfcHQgPSBzcC1cXHUwMDNlcHRlcDtcXG4gOTk2OlxcdFxcdFxcdFxcdH1cXG4gOTk3OlxcdFxcbiA5OTg6XFx0XFx0XFx0XFx0dGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgXFx1MDAyNml0ZXIsXFxuIDk5OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBTSEFET1dfTk9OUFJFU0VOVF9WQUxVRSk7XFxuMTAwMDpcXHRcXG4xMDAxOlxcdFxcdFxcdFxcdC8qXFxuMTAwMjpcXHRcXHRcXHRcXHQgKiBaYXBwaW5ncyBTUFRFcyBpbiBpbnZhbGlkIHJvb3RzIGRvZXNuJ3QgcmVxdWlyZSBhIFRMQiBmbHVzaCxcXG4xMDAzOlxcdFxcdFxcdFxcdCAqIHNlZSBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoKSBmb3IgZGV0YWlscy5cXG4xMDA0OlxcdFxcdFxcdFxcdCAqL1xcbjEwMDU6XFx0XFx0XFx0XFx0aWYgKCFyb290LVxcdTAwM2Vyb2xlLmludmFsaWQpXFxuMTAwNjpcXHRcXHRcXHRcXHRcXHRmbHVzaCA9IHRydWU7XFxuMTAwNzpcXHRcXHRcXHR9XFxuMTAwODpcXHRcXG4xMDA5OlxcdFxcdFxcdHRkcF9pdGVyX25leHRfcG9zdF9vcmRlcihcXHUwMDI2aXRlciwgXFx1MDAyNmV2ZW50KTtcXG4xMDEwOlxcdFxcdFxcdGlmIChldmVudC52YWxpZCBcXHUwMDI2XFx1MDAyNlxcbjEwMTE6XFx0XFx0XFx0ICAgIHRkcF9tbXVfemFwX2NvbXBsZXRlZF9lbXB0eV9sZWFmX3B0KGt2bSwgXFx1MDAyNmV2ZW50LCBzdGFydCxcXG4xMDEyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGVuZCwgemFwcGVkX2xlYWZfcHQpKSB7XFxuMTAxMzpcXHRcXHRcXHRcXHRpZiAoIXJvb3QtXFx1MDAzZXJvbGUuaW52YWxpZClcXG4xMDE0OlxcdFxcdFxcdFxcdFxcdGZsdXNoID0gdHJ1ZTtcXG4xMDE1OlxcdFxcdFxcdFxcdHJlbW92ZWRfc3AgPSB0cnVlO1xcbjEwMTY6XFx0XFx0XFx0fVxcbjEwMTc6XFx0XFx0fVxcbjEwMTg6XFx0XFxuMTAxOTpcXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoyMTozNi4xNTk5MDY4ODFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ0ODU5MTgxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHRkcF9tbXUuY2AqKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IEtWTSdzIFRyYW5zbGF0aW9uIExvb2thc2lkZSBCdWZmZXIgKFRMQikgYW5kIGl0cyBtYW5hZ2VtZW50IGluIHRoZSBjb250ZXh0IG9mIG5lc3RlZCBwYWdpbmcgb24geDg2LCB3aGljaCwgYXMgd2Uga25vdywgaXMgY3J1Y2lhbCBmb3IgdmlydHVhbGl6YXRpb24gcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5LiBXZSBuZWVkIHRvIHplcm8gaW4gb24gbGluZXMgMTAyMC0xMDUwIHdpdGhpbiB0aGUgYGFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jYCBmaWxlLiBJJ20gYXNzdW1pbmcgdGhpcyBzZWN0aW9uIGxpa2VseSBkZWFscyB3aXRoIGEgc3BlY2lmaWMgYXNwZWN0IG9mIHRoZSBuZXN0ZWQgcGFnaW5nIHNldHVwLCBwZXJoYXBzIHJlbGF0ZWQgdG8gaW52YWxpZGF0aW5nIFRMQiBlbnRyaWVzLCBoYW5kbGluZyBwYWdlIGZhdWx0cywgb3IgcG90ZW50aWFsbHkgZXZlbiBtYW5hZ2luZyB0aGUgc2hhZG93IHBhZ2UgdGFibGVzLiBcblxuR2l2ZW4gdGhlIGZpbGUgbmFtZSwgaXQncyB2ZXJ5IGxpa2VseSB0aGlzIGludm9sdmVzIHRoZSBcIlRyYW5zbGF0ZSB0byBQaHlzaWNhbCAoVERQKSBNTVVcIiBmdW5jdGlvbmFsaXR5LCBub3QgdGhlIHN0YW5kYXJkIHNoYWRvdyBwYWdlIHRhYmxlIG1hbmFnZW1lbnQuIEknbSBnb2luZyB0byBzY2FuIHRoYXQgc2VjdGlvbiB3aXRoIGFuIGV5ZSBmb3IgYW55IGludGVyZXN0aW5nIGRhdGEgc3RydWN0dXJlcyBvciBmdW5jdGlvbnMgdGhhdCBtaWdodCBwcm92aWRlIGluc2lnaHQgaW50byBob3cgdGhlIGd1ZXN0J3MgTU1VIG9wZXJhdGlvbnMgYXJlIHRyYW5zbGF0ZWQgdG8gdGhlIGhvc3QncyBwaHlzaWNhbCBtZW1vcnkgc3BhY2UuIFVuZGVyc3RhbmRpbmcgdGhpcyBwYXJ0IGlzIHZpdGFsIHRvIHRoZSBwZXJmb3JtYW5jZSBvZiBuZXN0ZWQgdmlydHVhbGl6YXRpb24uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBvcHRpbWl6YXRpb25zIGluIHRoZSBjYWNoZSBldmljdGlvbiBwcm9jZXNzIHRvIGZpbmQgYW55IHBvdGVudGlhbCBhcmVhcyBmb3IgaW1wcm92ZW1lbnQuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjI5LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoyMjoxMC42NDU4MjY3OTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMjA6XFx0XFx0ICogSWYgYW55IHNoYWRvdyBwYWdlcyB3ZXJlIHJlbW92ZWQsIHNlcnZpY2UgcGVuZGluZyBUTEIgZmx1c2hlcyBiZWZvcmVcXG4xMDIxOlxcdFxcdCAqIGRyb3BwaW5nIFJDVSBwcm90ZWN0aW9uLCBhcyByZXF1aXJlZCBieSB0aGUgVERQIE1NVSBpdGVyYXRvci5cXG4xMDIyOlxcdFxcdCAqL1xcbjEwMjM6XFx0XFx0aWYgKHJlbW92ZWRfc3AgXFx1MDAyNlxcdTAwMjYgZmx1c2gpIHtcXG4xMDI0OlxcdFxcdFxcdGt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pO1xcbjEwMjU6XFx0XFx0XFx0Zmx1c2ggPSBmYWxzZTtcXG4xMDI2OlxcdFxcdH1cXG4xMDI3OlxcdFxcbjEwMjg6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTAyOTpcXHRcXHRyZXR1cm4gZmx1c2g7XFxuMTAzMDpcXHR9XFxuMTAzMTpcXHRcXG4xMDMyOlxcdC8qXFxuMTAzMzpcXHQgKiBaYXAgbGVhZiBTUFRFcyBmb3IgdGhlIHJhbmdlIG9mIGdmbnMsIFtzdGFydCwgZW5kKSwgZm9yIGFsbCAqVkFMSUQqKiByb290cy5cXG4xMDM0OlxcdCAqIFJldHVybnMgdHJ1ZSBpZiBhIFRMQiBmbHVzaCBpcyBuZWVkZWQgYmVmb3JlIHJlbGVhc2luZyB0aGUgTU1VIGxvY2ssIGkuZS4gaWZcXG4xMDM1OlxcdCAqIG9uZSBvciBtb3JlIFNQVEVzIHdlcmUgemFwcGVkIHNpbmNlIHRoZSBNTVUgbG9jayB3YXMgbGFzdCBhY3F1aXJlZC5cXG4xMDM2OlxcdCAqL1xcbjEwMzc6XFx0Ym9vbCBrdm1fdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGZsdXNoKVxcbjEwMzg6XFx0e1xcbjEwMzk6XFx0XFx0c3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdDtcXG4xMDQwOlxcdFxcbjEwNDE6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuMTA0MjpcXHRcXHRmb3JfZWFjaF92YWxpZF90ZHBfbW11X3Jvb3RfeWllbGRfc2FmZShrdm0sIHJvb3QsIC0xKVxcbjEwNDM6XFx0XFx0XFx0Zmx1c2ggPSB0ZHBfbW11X3phcF9sZWFmcyhrdm0sIHJvb3QsIHN0YXJ0LCBlbmQsIHRydWUsIGZsdXNoKTtcXG4xMDQ0OlxcdFxcbjEwNDU6XFx0XFx0cmV0dXJuIGZsdXNoO1xcbjEwNDY6XFx0fVxcbjEwNDc6XFx0XFxuMTA0ODpcXHR2b2lkIGt2bV90ZHBfbW11X3phcF9hbGwoc3RydWN0IGt2bSAqa3ZtKVxcbjEwNDk6XFx0e1xcbjEwNTA6XFx0XFx0c3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdDtcXG4xMDUxOlxcdFxcbjEwNTI6XFx0XFx0LypcXG4xMDUzOlxcdFxcdCAqIFphcCBhbGwgZGlyZWN0IHJvb3RzLCBpbmNsdWRpbmcgaW52YWxpZCBkaXJlY3Qgcm9vdHMsIGFzIGFsbCBkaXJlY3RcXG4xMDU0OlxcdFxcdCAqIFNQVEVzIG11c3QgYmUgZHJvcHBlZCBiZWZvcmUgcmV0dXJuaW5nIHRvIHRoZSBjYWxsZXIuIEZvciBURFgsIG1pcnJvclxcbjEwNTU6XFx0XFx0ICogcm9vdHMgZG9uJ3QgbmVlZCBoYW5kbGluZyBpbiByZXNwb25zZSB0byB0aGUgbW11IG5vdGlmaWVyICh0aGUgY2FsbGVyKS5cXG4xMDU2OlxcdFxcdCAqXFxuMTA1NzpcXHRcXHQgKiBaYXAgZGlyZWN0bHkgZXZlbiBpZiB0aGUgcm9vdCBpcyBhbHNvIGJlaW5nIHphcHBlZCBieSBhIGNvbmN1cnJlbnRcXG4xMDU4OlxcdFxcdCAqIFxcXCJmYXN0IHphcFxcXCIuICBXYWxraW5nIHphcHBlZCB0b3AtbGV2ZWwgU1BURXMgaXNuJ3QgYWxsIHRoYXQgZXhwZW5zaXZlXFxuMTA1OTpcXHRcXHQgKiBhbmQgbW11X2xvY2sgaXMgYWxyZWFkeSBoZWxkLCB3aGljaCBtZWFucyB0aGUgb3RoZXIgdGhyZWFkIGhhcyB5aWVsZGVkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoyMjoxMC42NDU5OTg0MTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEyNTcxMzYwMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEaXZpbmcgaW50byBgdGRwX2l0ZXIuY2AqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gYW5hbHl6ZSBgYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIFR3by1EaW1lbnNpb25hbCBQYWdpbmcgKFREUCkgaXRlcmF0aW9uIHByb2Nlc3MuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiBob3cgdGhlIGNvZGUgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgVHJhbnNsYXRpb24gTG9va2FzaWRlIEJ1ZmZlcnMgKFRMQnMpIGFuZCBwYWdlIHRhYmxlcywgbG9va2luZyBmb3Igc3BlY2lmaWMgZW50cmllcywgcG9zc2libHkgZm9yIGludmFsaWRhdGlvbiBvciBtb2RpZmljYXRpb24uIEknbGwgYmUgc2VhcmNoaW5nIGZvciB0aGUgY29yZSBhbGdvcml0aG1zIHVzZWQgdG8gd2FsayB0aGUgcGFnZSB0YWJsZXMsIHRha2luZyBub3RlIG9mIGhvdyB0aGV5J3JlIG9wdGltaXplZCBmb3IgcGVyZm9ybWFuY2UuIEkgZXhwZWN0IHRvIHNlZSBzcGVjaWZpYyBpbnN0cnVjdGlvbiBzZXF1ZW5jZXMgdXNlZCB0byB0cmF2ZXJzZSB0aGUgRVBUIChFeHRlbmRlZCBQYWdlIFRhYmxlcykgYXMgZWZmaWNpZW50bHkgYXMgcG9zc2libGUuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaGFuZGxpbmcgb2YgbmVzdGVkIHBhZ2UgdGFibGVzIGlmIHRoYXQgYXBwbGllcy4gRnVydGhlcm1vcmUsIEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgYW5kIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zLCBzdWNoIGFzIHRoZSB1c2Ugb2YgY2FjaGluZywgcHJlZmV0Y2hpbmcsIGFuZCBhdG9taWMgb3BlcmF0aW9ucyB3aXRoaW4gdGhlIGl0ZXJhdGlvbiBsb2dpYy4gSSBhbnRpY2lwYXRlIHRoYXQgdGhlIGNvZGUgd2lsbCBiZSB0aWdodGx5IGNvdXBsZWQgd2l0aCB0aGUgS1ZNIGluZnJhc3RydWN0dXJlLCBzbyBJJ2xsIGFsc28gYmUgZXhhbWluaW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBLVk0gY29tcG9uZW50cywgc3VjaCBhcyB0aGUgTU1VIGFuZCB0aGUgdmlydHVhbCBDUFUgKHZDUFUpLiBJbiBwYXJ0aWN1bGFyLCBJIHdpbGwgbG9vayBmb3IgYW55IGNvZGUgZGVhbGluZyB3aXRoIHRoZSBoYW5kbGluZyBvZiBndWVzdCBwaHlzaWNhbCBhZGRyZXNzZXMsIGFuZCBob3cgdGhlIGd1ZXN0LXBoeXNpY2FsLXRvLWhvc3QtcGh5c2ljYWwgbWFwcGluZyBpcyBjb25kdWN0ZWQuIExhc3RseSwgSSdsbCBiZSBjcm9zcy1yZWZlcmVuY2luZyB0aGlzIGNvZGUgd2l0aCB0aGUgc3Vycm91bmRpbmcgZmlsZXMgdG8gc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIEtWTSdzIG1lbW9yeSBtYW5hZ2VtZW50IG9uIHg4NiBzeXN0ZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzY4MywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MjI6MzEuOTAzMTM3MTc5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0LypcXG4gMTMxOlxcdCAqIFRyaWVzIHRvIHRyYXZlcnNlIGJhY2sgdXAgYSBsZXZlbCBpbiB0aGUgcGFnaW5nIHN0cnVjdHVyZSBzbyB0aGF0IHRoZSB3YWxrXFxuIDEzMjpcXHQgKiBjYW4gY29udGludWUgZnJvbSB0aGUgbmV4dCBlbnRyeSBpbiB0aGUgcGFyZW50IHBhZ2UgdGFibGUuIFJldHVybnMgdHJ1ZSBvbiBhXFxuIDEzMzpcXHQgKiBzdWNjZXNzZnVsIHN0ZXAgdXAsIGZhbHNlIGlmIGFscmVhZHkgaW4gdGhlIHJvb3QgcGFnZS5cXG4gMTM0OlxcdCAqL1xcbiAxMzU6XFx0c3RhdGljIGJvb2wgdHJ5X3N0ZXBfdXAoc3RydWN0IHRkcF9pdGVyICppdGVyLFxcbiAxMzY6XFx0XFx0XFx0XFx0c3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50ICpldmVudClcXG4gMTM3OlxcdHtcXG4gMTM4OlxcdFxcdGlmIChpdGVyLVxcdTAwM2VsZXZlbCA9PSBpdGVyLVxcdTAwM2Vyb290X2xldmVsKVxcbiAxMzk6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxNDA6XFx0XFxuIDE0MTpcXHRcXHRpdGVyLVxcdTAwM2VsZXZlbCsrO1xcbiAxNDI6XFx0XFx0aXRlci1cXHUwMDNlZ2ZuID0gZ2ZuX3JvdW5kX2Zvcl9sZXZlbChpdGVyLVxcdTAwM2VnZm4sIGl0ZXItXFx1MDAzZWxldmVsKTtcXG4gMTQzOlxcdFxcdHRkcF9pdGVyX3JlZnJlc2hfc3B0ZXAoaXRlcik7XFxuIDE0NDpcXHRcXG4gMTQ1OlxcdFxcdGlmIChldmVudCBcXHUwMDI2XFx1MDAyNiAhZXZlbnQtXFx1MDAzZXZhbGlkKSB7XFxuIDE0NjpcXHRcXHRcXHRldmVudC1cXHUwMDNlc3B0ZXAgPSBpdGVyLVxcdTAwM2VzcHRlcDtcXG4gMTQ3OlxcdFxcdFxcdGV2ZW50LVxcdTAwM2VvbGRfc3B0ZSA9IGl0ZXItXFx1MDAzZW9sZF9zcHRlO1xcbiAxNDg6XFx0XFx0XFx0ZXZlbnQtXFx1MDAzZWdmbiA9IGl0ZXItXFx1MDAzZWdmbjtcXG4gMTQ5OlxcdFxcdFxcdGV2ZW50LVxcdTAwM2VsZXZlbCA9IGl0ZXItXFx1MDAzZWxldmVsO1xcbiAxNTA6XFx0XFx0XFx0ZXZlbnQtXFx1MDAzZXZhbGlkID0gdHJ1ZTtcXG4gMTUxOlxcdFxcdH1cXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDE1NDpcXHR9XFxuIDE1NTpcXHRcXG4gMTU2OlxcdC8qXFxuIDE1NzpcXHQgKiBTdGVwIHRvIHRoZSBuZXh0IFNQVEUgaW4gYSBwcmUtb3JkZXIgdHJhdmVyc2FsIG9mIHRoZSBwYWdpbmcgc3RydWN0dXJlLlxcbiAxNTg6XFx0ICogVG8gZ2V0IHRvIHRoZSBuZXh0IFNQVEUsIHRoZSBpdGVyYXRvciBlaXRoZXIgc3RlcHMgZG93biB0b3dhcmRzIHRoZSBnb2FsXFxuIDE1OTpcXHQgKiBHRk4sIGlmIGF0IGEgcHJlc2VudCwgbm9uLWxhc3QtbGV2ZWwgU1BURSwgb3Igb3ZlciB0byBhIFNQVEUgbWFwcGluZyBhXFxuIDE2MDpcXHQgKiBoaWdoZXIgR0ZOLlxcbiAxNjE6XFx0ICpcXG4gMTYyOlxcdCAqIFRoZSBiYXNpYyBhbGdvcml0aG0gaXMgYXMgZm9sbG93czpcXG4gMTYzOlxcdCAqIDEuIElmIHRoZSBjdXJyZW50IFNQVEUgaXMgYSBub24tbGFzdC1sZXZlbCBTUFRFLCBzdGVwIGRvd24gaW50byB0aGUgcGFnZVxcbiAxNjQ6XFx0ICogICAgdGFibGUgaXQgcG9pbnRzIHRvLlxcbiAxNjU6XFx0ICogMi4gSWYgdGhlIGl0ZXJhdG9yIGNhbm5vdCBzdGVwIGRvd24sIGl0IHdpbGwgdHJ5IHRvIHN0ZXAgdG8gdGhlIG5leHQgU1BURVxcbiAxNjY6XFx0ICogICAgaW4gdGhlIGN1cnJlbnQgcGFnZSBvZiB0aGUgcGFnaW5nIHN0cnVjdHVyZS5cXG4gMTY3OlxcdCAqIDMuIElmIHRoZSBpdGVyYXRvciBjYW5ub3Qgc3RlcCB0byB0aGUgbmV4dCBlbnRyeSBpbiB0aGUgY3VycmVudCBwYWdlLCBpdCB3aWxsXFxuIDE2ODpcXHQgKiAgICB0cnkgdG8gc3RlcCB1cCB0byB0aGUgcGFyZW50IHBhZ2luZyBzdHJ1Y3R1cmUgcGFnZS4gSW4gdGhpcyBjYXNlLCB0aGF0XFxuIDE2OTpcXHQgKiAgICBTUFRFIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gdmlzaXRlZCwgYW5kIHNvIHRoZSBpdGVyYXRvciBtdXN0IGFsc28gc3RlcFxcbiAxNzA6XFx0ICogICAgdG8gdGhlIHNpZGUgYWdhaW4uXFxuIDE3MTpcXHQgKi9cXG4gMTcyOlxcdHN0YXRpYyB2b2lkIF9fdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsXFxuIDE3MzpcXHRcXHRcXHRcXHQgICAgc3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50ICpldmVudClcXG4gMTc0OlxcdHtcXG4gMTc1OlxcdFxcdGlmIChldmVudClcXG4gMTc2OlxcdFxcdFxcdGV2ZW50LVxcdTAwM2V2YWxpZCA9IGZhbHNlO1xcbiAxNzc6XFx0XFxuIDE3ODpcXHRcXHRpZiAoaXRlci1cXHUwMDNleWllbGRlZCkge1xcbiAxNzk6XFx0XFx0XFx0dGRwX2l0ZXJfcmVzdGFydChpdGVyKTtcXG4gMTgwOlxcdFxcdFxcdHJldHVybjtcXG4gMTgxOlxcdFxcdH1cXG4gMTgyOlxcdFxcbiAxODM6XFx0XFx0aWYgKHRyeV9zdGVwX2Rvd24oaXRlcikpXFxuIDE4NDpcXHRcXHRcXHRyZXR1cm47XFxuIDE4NTpcXHRcXG4gMTg2OlxcdFxcdGRvIHtcXG4gMTg3OlxcdFxcdFxcdGlmICh0cnlfc3RlcF9zaWRlKGl0ZXIpKVxcbiAxODg6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAxODk6XFx0XFx0fSB3aGlsZSAodHJ5X3N0ZXBfdXAoaXRlciwgZXZlbnQpKTtcXG4gMTkwOlxcdFxcdGl0ZXItXFx1MDAzZXZhbGlkID0gZmFsc2U7XFxuIDE5MTpcXHR9XFxuIDE5MjpcXHRcXG4gMTkzOlxcdHZvaWQgdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXFxuIDE5NDpcXHR7XFxuIDE5NTpcXHRcXHRfX3RkcF9pdGVyX25leHQoaXRlciwgTlVMTCk7XFxuIDE5NjpcXHR9XFxuIDE5NzpcXHRcXG4gMTk4OlxcdHZvaWQgdGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyKHN0cnVjdCB0ZHBfaXRlciAqaXRlcixcXG4gMTk5OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQpXFxuIDIwMDpcXHR7XFxuIDIwMTpcXHRcXHRfX3RkcF9pdGVyX25leHQoaXRlciwgZXZlbnQpO1xcbiAyMDI6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoyMjozMS45MDMyMjg0NzlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ3MTE5OTY0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBURFAgTU1VIFBvc3QtT3JkZXIgWmFwcGluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBmb2N1c2VzIG9uIG9wdGltaXppbmcgbGVhZiBwYWdlIHRhYmxlIHphcHBpbmcgd2l0aGluIHRoZSBURFAgTU1VLiBTcGVjaWZpY2FsbHksIGl0J3MgYWJvdXQgaGFuZGxpbmcgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyDigJMgdGhvc2UgYXQgdGhlIDJNIGxldmVsIHRoYXQgcG9pbnQgdG8gNEsgbGVhZiBwYWdlIHRhYmxlcyDigJMgYWZ0ZXIgdGhleSd2ZSBiZWVuIGZ1bGx5IHByb2Nlc3NlZCBkdXJpbmcgdGhlIGl0ZXJhdGlvbiBvZiBTUFRFcy4gVGhlIGB0ZHBfbW11X3phcF9sZWFmc2AgZnVuY3Rpb24gaXMga2V5IGhlcmUsIGFuZCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgdGRwX21tdV96YXBfY29tcGxldGVkX2VtcHR5X2xlYWZfcHRgIHRvIGhhbmRsZSB0aGUgemFwcGluZyBvZiB0aGVzZSBlbXB0eSB0YWJsZXMgZWZmaWNpZW50bHkgd2hlbiBzdGVwcGluZyB1cCB0aGUgcGFnZSB0YWJsZSBoaWVyYXJjaHkuXG5cblRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IHRoaXMgZGlyZWN0bHkgbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIFREUCBNTVUgcGFnaW5nIGFuZCB6YXBwaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZm9yIHg4Nl82NCBhcmNoaXRlY3R1cmVzLiBUaGUgZ29vZCBuZXdzIGlzLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhpcyBpcyBkZWZpbml0ZWx5IHRlc3RhYmxlIGFuZCBmdXp6YWJsZSBpbiBwbGF0Zm9ybXMgbGlrZSBRRU1VLiBXZSBjYW4gdXNlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvciBzdGFuZGFyZCBLVk0gaW9jdGxzIHRvIHZlcmlmeSBpdHMgZnVuY3Rpb25hbGl0eS4gVGhlIGZ1bmN0aW9uIG9mIHRoaXMgY2hhbmdlIHdpbGwgYmUgdG8gbW9yZSBlZmZlY3RpdmVseSBtYW5hZ2UgbWVtb3J5IGJ5IG9wdGltaXppbmcgcGFnZSB0YWJsZSB6YXBwaW5nIGFuZCBmcmVlaW5nIHVwIGVtcHR5IHBhZ2UgdGFibGVzLCB3aGljaCBpcyB2ZXJ5IGltcG9ydGFudC5cblxuTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEknbSBleHBlY3RpbmcgYEtWTWAsIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIGFuZCBgWDg2XzY0YCB0byBiZSBjcml0aWNhbC4gVG8gY29uZmlybSwgSSdsbCBleGFtaW5lIHRoZSBLY29uZmlnIHN5bWJvbHMgcmVsYXRlZCB0byB0aGlzIGNvZGUgYW5kIHNlZSB3aGF0IGNvbmZpZ3VyYXRpb25zIGVuYWJsZSB0aGUgS1ZNIHg4NiBURFAgTU1VLiBCYXNlZCBvbiBteSBleGlzdGluZyBrbm93bGVkZ2UsIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgYW5kIGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgIHdpbGwgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGRldGFpbHMuXG5cbkZyb20gYSBxdWljayBnbGFuY2UgYXQgYGFyY2gveDg2L2t2bS9NYWtlZmlsZWAsIEkgc2VlIHRoYXQgYG1tdS90ZHBfaXRlci5vYCBhbmQgYG1tdS90ZHBfbW11Lm9gIGFyZSBpbmNsdWRlZCB3aGVuIGBDT05GSUdfWDg2XzY0YCBpcyBzZXQuIEZ1cnRoZXIgaW5zcGVjdGlvbiBvZiBgYXJjaC94ODYva3ZtL0tjb25maWdgIHJldmVhbHMgdGhhdCBgS1ZNYCBkZXBlbmRzIG9uIGBYODZfTE9DQUxfQVBJQ2AsIGFuZCBib3RoIGBLVk1fSU5URUxgIGFuZCBgS1ZNX0FNRGAgYXJlIHJlbGV2YW50LCBidXQgYEtWTV9YODZgIGlzIG9ubHkgZGVmaW5lZCBpZiBlaXRoZXIgYEtWTV9JTlRFTGAgb3IgYEtWTV9BTURgIGFyZSBlbmFibGVkLlxuXG5GaW5hbGx5LCBJJ2xsIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWdzLCBsaWtlIGBLVk1fUFJPVkVfTU1VYCBvciBhbnl0aGluZyBlbHNlIGluIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcyBwYXJ0aWN1bGFyIGxvZ2ljLiBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCBhbGwgdGhlIEtjb25maWcgb3B0aW9ucyB3aXRoaW4gdGhhdCBmaWxlIHRvIGVuc3VyZSBjb21wbGV0ZSBjb3ZlcmFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkyMDAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoyMzoxNi42MTUyMjgxNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEtWTSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdHNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG4gICA3OlxcdFxcbiAgIDg6XFx0bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxcbiAgIDk6XFx0XFx0Ym9vbCBcXFwiVmlydHVhbGl6YXRpb25cXFwiXFxuICAxMDpcXHRcXHRkZWZhdWx0IHlcXG4gIDExOlxcdFxcdGhlbHBcXG4gIDEyOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgZm9yIHVzaW5nIHlvdXIgTGludXggaG9zdCB0byBydW4gb3RoZXJcXG4gIDEzOlxcdFxcdCAgb3BlcmF0aW5nIHN5c3RlbXMgaW5zaWRlIHZpcnR1YWwgbWFjaGluZXMgKGd1ZXN0cykuXFxuICAxNDpcXHRcXHQgIFRoaXMgb3B0aW9uIGFsb25lIGRvZXMgbm90IGFkZCBhbnkga2VybmVsIGNvZGUuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUgd2lsbCBiZSBza2lwcGVkIGFuZCBkaXNhYmxlZC5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0aWYgVklSVFVBTElaQVRJT05cXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIEtWTV9YODZcXG4gIDIxOlxcdFxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4gIDIyOlxcdFxcdHNlbGVjdCBLVk1fQ09NTU9OXFxuICAyMzpcXHRcXHRzZWxlY3QgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xcbiAgMjQ6XFx0XFx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcXG4gIDI1OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXFxuICAyNjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUEZOQ0FDSEVcXG4gIDI3OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX1RTT1xcbiAgMjg6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTFxcbiAgMjk6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcXG4gIDMwOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFfUk9VVElOR1xcbiAgMzE6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTVxcbiAgMzI6XFx0XFx0c2VsZWN0IFZIT1NUX1RBU0tcXG4gIDMzOlxcdFxcdHNlbGVjdCBLVk1fQVNZTkNfUEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBVU0VSX1JFVFVSTl9OT1RJRklFUlxcbiAgMzU6XFx0XFx0c2VsZWN0IEtWTV9NTUlPXFxuICAzNjpcXHRcXHRzZWxlY3QgU0NIRURfSU5GT1xcbiAgMzc6XFx0XFx0c2VsZWN0IFBFUkZfRVZFTlRTXFxuICAzODpcXHRcXHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFNcXG4gIDM5OlxcdFxcdHNlbGVjdCBQRVJGX0dVRVNUX01FRElBVEVEX1BNVVxcbiAgNDA6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX01TSVxcbiAgNDE6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcXG4gIDQyOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9OT19QT0xMXFxuICA0MzpcXHRcXHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcXG4gIDQ0OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcXG4gIDQ1OlxcdFxcdHNlbGVjdCBLVk1fVkZJT1xcbiAgNDY6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX1BNX05PVElGSUVSIGlmIFBNXFxuICA0NzpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcXG4gIDQ4OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxuICA0OTpcXHRcXHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcXG4gIDUwOlxcdFxcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XFxuICA1MTpcXHRcXG4gIDUyOlxcdGNvbmZpZyBLVk1cXG4gIDUzOlxcdFxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuICA1NDpcXHRcXHRkZXBlbmRzIG9uIFg4Nl9MT0NBTF9BUElDXFxuICA1NTpcXHRcXHRoZWxwXFxuICA1NjpcXHRcXHQgIFN1cHBvcnQgaG9zdGluZyBmdWxseSB2aXJ0dWFsaXplZCBndWVzdCBtYWNoaW5lcyB1c2luZyBoYXJkd2FyZVxcbiAgNTc6XFx0XFx0ICB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiAgWW91IHdpbGwgbmVlZCBhIGZhaXJseSByZWNlbnRcXG4gIDU4OlxcdFxcdCAgcHJvY2Vzc29yIGVxdWlwcGVkIHdpdGggdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gWW91IHdpbGwgYWxzb1xcbiAgNTk6XFx0XFx0ICBuZWVkIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBvZiB0aGUgcHJvY2Vzc29yIG1vZHVsZXMgYmVsb3cuXFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgdGhyb3VnaFxcbiAgNjI6XFx0XFx0ICBhIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBuYW1lZCAvZGV2L2t2bS5cXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDY1OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLlxcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2ODpcXHRcXG4gIDY5OlxcdGNvbmZpZyBLVk1fV0VSUk9SXFxuICA3MDpcXHRcXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuICA3MTpcXHRcXHQjIERpc2FsbG93IEtWTSdzIC1XZXJyb3IgaWYgS0FTQU4gaXMgZW5hYmxlZCwgZS5nLiB0byBndWFyZCBhZ2FpbnN0XFxuICA3MjpcXHRcXHQjIHJhbmRvbWl6ZWQgY29uZmlncyBmcm9tIHNlbGVjdGluZyBLVk1fV0VSUk9SPXksIHdoaWNoIGRvZXNuJ3QgcGxheVxcbiAgNzM6XFx0XFx0IyBuaWNlIHdpdGggS0FTQU4uICBLQVNBTiBidWlsZHMgZ2VuZXJhdGVzIHdhcm5pbmdzIGZvciB0aGUgZGVmYXVsdFxcbiAgNzQ6XFx0XFx0IyBGUkFNRV9XQVJOLCBpLmUuIEtWTV9XRVJST1I9eSB3aXRoIEtBU0FOPXkgcmVxdWlyZXMgc3BlY2lhbCB0dW5pbmcuXFxuICA3NTpcXHRcXHQjIEJ1aWxkaW5nIEtWTSB3aXRoIC1XZXJyb3IgYW5kIEtBU0FOIGlzIHN0aWxsIGRvYWJsZSB2aWEgZW5hYmxpbmdcXG4gIDc2OlxcdFxcdCMgdGhlIGtlcm5lbC13aWRlIFdFUlJPUj15LlxcbiAgNzc6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fWDg2IFxcdTAwMjZcXHUwMDI2ICgoRVhQRVJUIFxcdTAwMjZcXHUwMDI2ICFLQVNBTikgfHwgV0VSUk9SKVxcbiAgNzg6XFx0XFx0aGVscFxcbiAgNzk6XFx0XFx0ICBBZGQgLVdlcnJvciB0byB0aGUgYnVpbGQgZmxhZ3MgZm9yIEtWTS5cXG4gIDgwOlxcdFxcbiAgODE6XFx0XFx0ICBJZiBpbiBkb3VidCwgc2F5IFxcXCJOXFxcIi5cXG4gIDgyOlxcdFxcbiAgODM6XFx0Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG4gIDg0OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4gIDg1OlxcdFxcdGRlcGVuZHMgb24gRVhQRVJUXFxuICA4NjpcXHRcXHRkZXBlbmRzIG9uIEtWTV9YODYgXFx1MDAyNlxcdTAwMjYgWDg2XzY0XFxuICA4NzpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG4gIDg4OlxcdFxcdGhlbHBcXG4gIDg5OlxcdFxcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zLiAgQ3VycmVudGx5LCBzb2Z0d2FyZS1cXG4gIDkwOlxcdFxcdCAgcHJvdGVjdGVkIFZNcyBhcmUgcHVyZWx5IGEgZGV2ZWxvcG1lbnQgYW5kIHRlc3RpbmcgdmVoaWNsZSBmb3JcXG4gIDkxOlxcdFxcdCAgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRC4gIEF0dGVtcHRpbmcgdG8gcnVuIGEgXFxcInJlYWxcXFwiIFZNIHdvcmtsb2FkIGFzIGFcXG4gIDkyOlxcdFxcdCAgc29mdHdhcmUtcHJvdGVjdGVkIFZNIHdpbGwgZmFpbCBtaXNlcmFibHkuXFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgXFxcIk5cXFwiLlxcbiAgOTU6XFx0XFxuICA5NjpcXHRjb25maWcgS1ZNX0lOVEVMXFxuICA5NzpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4gIDk4OlxcdFxcdGRlcGVuZHMgb24gS1ZNIFxcdTAwMjZcXHUwMDI2IElBMzJfRkVBVF9DVExcXG4gIDk5OlxcdFxcdHNlbGVjdCBYODZfRlJFRCBpZiBYODZfNjRcXG4gMTAwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MjM6MTYuNjE1MzE4MTVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA0OTQ5NDY5ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gUGF0Y2ggZm9yIEZvY3VzIFN5bWJvbCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIHN5bWJvbHMgYXJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMgcGF0Y2guIExldCdzIHN0YXJ0IGJ5IGxpc3RpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBvciBjYWxscy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHJlbGV2YW50IGNvZGUuXG5cbkZpcnN0LCBJIHNlZSBgdGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyYCwgd2hpY2ggaXMgZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMsIHJlc2lkaW5nIGluIGJvdGggYGFyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuaGAgYW5kIGB0ZHBfaXRlci5jYC4gVGhlbiwgdGhlcmUncyBgdGRwX2l0ZXJfbmV4dGAsIGFsc28gbm9uLXN0YXRpYy4gVGhvc2UgdHdvIHNvdW5kIGl0ZXJhdGl2ZSwgc28gdGhleSBhcmUgaGlnaGx5IHJlbGV2YW50LiBOZXh0LCBga3ZtX3RkcF9tbXVfemFwX2xlYWZzYCwgd2hpY2ggaXMgYWxzbyBub24tc3RhdGljLCBhbmQgbG9jYXRlZCBpbiBgdGRwX21tdS5jYC4gRm9sbG93aW5nIHRoYXQsIGBrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VgLCBhZ2FpbiBub24tc3RhdGljLCBhbHNvIHdpdGhpbiBgdGRwX21tdS5jYCBhbmQgc3BlY2lmaWNhbGx5IGNhbGxzIGB0ZHBfbW11X3phcF9sZWFmc2AuIEZpbmFsbHksIEkgc2VlIGBrdm1femFwX2dmbl9yYW5nZWAsIGxvY2F0ZWQgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBhbmQgaW1wb3J0YW50bHksIGNhbGxzIGBrdm1fdGRwX21tdV96YXBfbGVhZnNgLlxuXG5TbywgdGhlIGZvY3VzIGlzIHJlYWxseSBvbiB0aGlzIGxlYWYgemFwcGluZyBhbmQgdW5tYXBwaW5nLCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIFREUCBNTVUuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIHdvcmssIHJpZ2h0IG5vdy4gU2luY2UgSSdtIHZlcnkgZmFtaWxpYXIgd2l0aCB0aGVzZSBjb21wb25lbnRzLCB0aGlzIG1hcHBpbmcsIHVubWFwcGluZywgYW5kIGl0ZXJhdGlvbiBpcyBsaWtlbHkgaGFwcGVuaW5nIG9uIG11bHRpcGxlIGxldmVscy5cbkkgc2hvdWxkIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgZnVuY3Rpb25zIGZyb20gdGhlIGB0ZHBfbW11LmNgIGZpbGUgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgdG8gdGhlIG90aGVyIGxpc3RlZCBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxODI3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MjM6MzcuMTEwMjY4NTQxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDkyODI5NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3RkcF9tbXVfemFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY5OTk9c3RhdGljIHZvaWQgX19rdm1fbW11X3phcF9hbGxfZmFzdF9iYWNrX2hhbGYoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MDEyLVxcdGlmICh0ZHBfbW11X2VuYWJsZWQpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MDEzOlxcdFxcdGt2bV90ZHBfbW11X3phcF9pbnZhbGlkYXRlZF9yb290cyhrdm0sIHRydWUpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzAxNC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTcxMTM9dm9pZCBrdm1femFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbl9zdGFydCwgZ2ZuX3QgZ2ZuX2VuZClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzEyOC1cXHRpZiAodGRwX21tdV9lbmFibGVkKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NzEyOTpcXHRcXHRmbHVzaCA9IGt2bV90ZHBfbW11X3phcF9sZWFmcyhrdm0sIGdmbl9zdGFydCwgZ2ZuX2VuZCwgZmx1c2gpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNzEzMC1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzU0ND1zdGF0aWMgdm9pZCBrdm1fbW11X3phcF9hbGwoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03NTYzLVxcdGlmICh0ZHBfbW11X2VuYWJsZWQpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3NTY0OlxcdFxcdGt2bV90ZHBfbW11X3phcF9hbGwoa3ZtKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTc1NjUtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTc5MzM9c3RhdGljIHZvaWQga3ZtX3JlY292ZXJfbnhfaHVnZV9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTgwMDEtXFx0XFx0XFx0aWYgKGlzX3RkcF9tbXUpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo4MDAyOlxcdFxcdFxcdFxcdGZsdXNoIHw9IGt2bV90ZHBfbW11X3phcF9wb3NzaWJsZV9ueF9odWdlX3BhZ2Uoa3ZtLCBzcCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy04MDAzLVxcdFxcdFxcdGVsc2VcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jPTMzPXZvaWQga3ZtX21tdV91bmluaXRfdGRwX21tdShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy00MC1cXHRrdm1fdGRwX21tdV9pbnZhbGlkYXRlX3Jvb3RzKGt2bSwgS1ZNX1ZBTElEX1JPT1RTKTtcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo0MTpcXHRrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoa3ZtLCBmYWxzZSk7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtNDItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz0yNTk9dm9pZCBrdm1fdGRwX21tdV9hbGxvY19yb290KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBtaXJyb3IpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0zMDYtXFx0ICogdGhlIFREUCBNTVUgaXRzZWxmLCB3aGljaCBpcyBoZWxkIHVudGlsIHRoZSByb290IGlzIGludmFsaWRhdGVkIGFuZFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjMwNzpcXHQgKiBpcyB1bHRpbWF0ZWx5IHB1dCBieSBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoKS5cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0zMDgtXFx0ICovXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz04Mjk9c3RhdGljIHZvaWQgdGRwX21tdV96YXBfcm9vdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy04NzUtXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6ODc2OmJvb2wga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtODc3LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM9OTY1PXN0YXRpYyBib29sIHRkcF9tbXVfemFwX2xlYWZzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqcm9vdCxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwMDItXFx0XFx0XFx0ICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2Vzbid0IHJlcXVpcmUgYSBUTEIgZmx1c2gsXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTAwMzpcXHRcXHRcXHQgKiBzZWUga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgZm9yIGRldGFpbHMuXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAwNC1cXHRcXHRcXHQgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwMzYtICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTAzNzpib29sIGt2bV90ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgZmx1c2gpXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzOC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMDQ3LVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjEwNDg6dm9pZCBrdm1fdGRwX21tdV96YXBfYWxsKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMDQ5LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwNzQtICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTA3NTp2b2lkIGt2bV90ZHBfbW11X3phcF9pbnZhbGlkYXRlZF9yb290cyhzdHJ1Y3Qga3ZtICprdm0sIGJvb2wgc2hhcmVkKVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwNzYte1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTEyMi0gKlxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jOjExMjM6ICogTm90ZSwga3ZtX3RkcF9tbXVfemFwX2ludmFsaWRhdGVkX3Jvb3RzKCkgaXMgZ2lmdGVkIHRoZSBURFAgTU1VJ3MgcmVmZXJlbmNlLlxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTExMjQtICogU2VlIGt2bV90ZHBfbW11X2FsbG9jX3Jvb3QoKS5cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oPTU3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tbXVfcGFnZSAqdGRwX21tdV9nZXRfcm9vdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC02NS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaDo2Njpib29sIGt2bV90ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgZmx1c2gpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oOjY3OmJvb2wga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtNjgtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oOjY5OnZvaWQga3ZtX3RkcF9tbXVfemFwX2FsbChzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTcwLXZvaWQga3ZtX3RkcF9tbXVfaW52YWxpZGF0ZV9yb290cyhzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtNzEtXFx0XFx0XFx0XFx0ICBlbnVtIGt2bV90ZHBfbW11X3Jvb3RfdHlwZXMgcm9vdF90eXBlcyk7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11Lmg6NzI6dm9pZCBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoc3RydWN0IGt2bSAqa3ZtLCBib29sIHNoYXJlZCk7XFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmgtNzMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjIzOjM3LjQ1OTU3NjMyNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjE0MTYzNzg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBURFAgTU1VIFJlbGF0ZWQgRnVuY3Rpb25zIGFuZCBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSB0cmFjaW5nIHRoZSBjYWxsIHBhdGhzIGZvciBzb21lIGtleSBmdW5jdGlvbnMuIEl0IGxvb2tzIGxpa2UgYHRkcF9tbXVfemFwX2xlYWZzYCBpcyB0aGUgdGFyZ2V0LCBjYWxsZWQgYnkgYm90aCBga3ZtX3RkcF9tbXVfemFwX2xlYWZzYCBhbmQgYGt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZWAuIGBrdm1fdGRwX21tdV96YXBfbGVhZnNgIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBrdm1femFwX2dmbl9yYW5nZWAuIEFuZCBga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlYCBpcyBjYWxsZWQgYnkgYGt2bV91bm1hcF9nZm5fcmFuZ2VgLCB0aHJvdWdoIG1tdSBub3RpZmllcnMuXG5cbk5leHQsIEknbSBjcm9zcy1yZWZlcmVuY2luZyB0aGVzZSBmdW5jdGlvbnMgd2l0aCB0aGVpciBkZWZpbml0aW9ucy4gSSd2ZSBsb2NhdGVkIGB0ZHBfaXRlcl9uZXh0X3Bvc3Rfb3JkZXJgIGluIGB0ZHBfaXRlci5jYCwgYW5kIGBrdm1fdGRwX21tdV96YXBfbGVhZnNgIGFuZCBga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlYCBpbiBgdGRwX21tdS5jYC4gQWxzbyBga3ZtX3phcF9nZm5fcmFuZ2VgIGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYC5cblxuTm93LCBJJ20gY2hlY2tpbmcgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBgS1ZNYCwgYEtWTV9JTlRFTGAvYEtWTV9BTURgLCBhbmQgYFg4Nl82NGAgYXJlIGRlZmluaXRlbHkgaW4gdGhlIG1peC4gSSdtIHZlcmlmeWluZyB0aGF0IGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYCBhcmUgbmVjZXNzYXJ5IHRvIGVuYWJsZSBgS1ZNX1g4NmAsIGFzIGRlZmluZWQgaW4gdGhlIGBLY29uZmlnYCBmaWxlLiBJIHNlZSB0aGUgZGVwZW5kZW5jeTogYEtWTV9YODZgIGlzIGRlZmluZWQgYXMgYSB0cmlzdGF0ZSBzeW1ib2wgZGVwZW5kZW50IG9uIGBLVk1gIGlmIGVpdGhlciBgS1ZNX0lOVEVMYCBvciBgS1ZNX0FNRGAgaXMgbm90IFwiblwiLiBBbHNvIGBYODZfNjRgIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGNvbXBpbGF0aW9uIG9mIGB0ZHBfaXRlci5vYCBhbmQgYHRkcF9tbXUub2AgYmVjYXVzZSBvZiB0aGUgbWFrZWZpbGUgZGVwZW5kZW5jeS5cblxuU28sIGZvciBgRW5hYmxlQ29uZmlnc2AsIEknbGwgaW5jbHVkZSBgS1ZNYCwgYEtWTV9JTlRFTGAsIGBLVk1fQU1EYCwgYW5kIGBYODZfNjRgLlxuXG5UaGUgYEZvY3VzU3ltYm9sc2AgYXJlIHRoZXNlIGtleSBmdW5jdGlvbnM6IGBrdm1fdGRwX21tdV96YXBfbGVhZnNgLCBgdGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyYCwgYGt2bV90ZHBfbW11X3VubWFwX2dmbl9yYW5nZWAsIGFuZCBga3ZtX3phcF9nZm5fcmFuZ2VgLlxuXG5GaW5hbGx5LCBJJ20gZW5zdXJpbmcgZXZlcnl0aGluZyBhbGlnbnMgd2l0aCB0aGUgaW5zdHJ1Y3Rpb25zLCBpbmNsdWRpbmcgYFdvcnRoRnV6emluZzogdHJ1ZWAuIFRoZSByZWFzb25pbmcgaXMgc29saWQ6IFRoaXMgaXMgYWJvdXQgdXBkYXRpbmcgdGhlIFREUCBNTVUgaXRlcmF0b3IgZm9yIHBvc3Qtb3JkZXIgdHJhdmVyc2FsLiBUaGlzIGFsbG93cyB0aGUgc3lzdGVtIHRvIGRldGVjdCBjb21wbGV0ZWQgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyBhbmQgaW1tZWRpYXRlbHkgemFwIHRoZW0uIEFsc28sIHRoaXMgbWVhbnMgZmx1c2hpbmcgcmVtb3RlIFRMQnMgaWYgc2hhZG93IHBhZ2VzIHdlcmUgcmVtb3ZlZC4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBub24tc3RhdGljIGFuZCBub24taW5saW5lZCBBUEkgZnVuY3Rpb25zLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgc3BlY2lmaWVkLCB3aXRob3V0IHRoZSBgQ09ORklHX2AgcHJlZml4LlxuXG5BbHJpZ2h0LCBJJ20gcmVhZHkgdG8gY3JhZnQgdGhhdCBgc2V0LXJlc3VsdHNgIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NjE4LCJPdXRwdXRUb2tlbnMiOjE5MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoyMzo1My42MDEyMTYxNzNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjExNTk0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIlg4Nl82NFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV90ZHBfbW11X3phcF9sZWFmc1wiLFxuICAgIFwidGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyXCIsXG4gICAgXCJrdm1fdGRwX21tdV91bm1hcF9nZm5fcmFuZ2VcIixcbiAgICBcImt2bV96YXBfZ2ZuX3JhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBwb3N0LW9yZGVyIHRyYXZlcnNhbCBzdXBwb3J0IHRvIHRoZSBLVk0geDg2IFREUCBNTVUgaXRlcmF0b3IgYW5kIHVwZGF0ZXMgdGRwX21tdV96YXBfbGVhZnMoKSB0byBhdXRvbWF0aWNhbGx5IHphcCBjb21wbGV0ZWQgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyAoYW5kIGhhbmRsZSB0aGUgY29ycmVzcG9uZGluZyByZW1vdGUgVExCIGZsdXNoIHdoZW4gc2hhZG93IHBhZ2VzIGFyZSBmcmVlZCkuIFRoaXMgYWx0ZXJzIGNvcmUgTU1VIHBhZ2UtdGFibGUgemFwcGluZyBiZWhhdmlvciBpbiBLVk0geDg2IGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJYODZfNjRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdGRwX21tdV96YXBfbGVhZnNcIixcbiAgICBcInRkcF9pdGVyX25leHRfcG9zdF9vcmRlclwiLFxuICAgIFwia3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlXCIsXG4gICAgXCJrdm1femFwX2dmbl9yYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgcG9zdC1vcmRlciB0cmF2ZXJzYWwgc3VwcG9ydCB0byB0aGUgS1ZNIHg4NiBURFAgTU1VIGl0ZXJhdG9yIGFuZCB1cGRhdGVzIHRkcF9tbXVfemFwX2xlYWZzKCkgdG8gYXV0b21hdGljYWxseSB6YXAgY29tcGxldGVkIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgKGFuZCBoYW5kbGUgdGhlIGNvcnJlc3BvbmRpbmcgcmVtb3RlIFRMQiBmbHVzaCB3aGVuIHNoYWRvdyBwYWdlcyBhcmUgZnJlZWQpLiBUaGlzIGFsdGVycyBjb3JlIE1NVSBwYWdlLXRhYmxlIHphcHBpbmcgYmVoYXZpb3IgaW4gS1ZNIHg4NiBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MjM6NTMuNjc3MzM5NTI3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTI5OTM3Mjg1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjIzOjUzLjY3Nzc2NDU0N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIxMjk4OTQzNjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0ncyBURFAgTU1VIGl0ZXJhdGlvbiBhbmQgcGFnZSB0YWJsZSB6YXBwaW5nIGxvZ2ljIHRvIHphcCBjb21wbGV0ZWQgZW1wdHkgbGVhZiBwYWdlIHRhYmxlcyBkdXJpbmcgbGVhZiB6YXBwaW5nLiBJdCBpbnRyb2R1Y2VzIGEgYHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudGAgc3RydWN0dXJlLCB3aGljaCBpcyB6ZXJvLWluaXRpYWxpemVkIG9uIHRoZSBzdGFjayAoYGV2ZW50ID0ge31gKSBhbmQgd2hvc2UgZmllbGRzIGFyZSBleHBsaWNpdGx5IHBvcHVsYXRlZCBpbiBgdHJ5X3N0ZXBfdXAoKWAgd2hlbmV2ZXIgYGV2ZW50LVxcdTAwM2V2YWxpZGAgaXMgc2V0IHRvIHRydWUuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgbGVmdCB1bmluaXRpYWxpemVkLCBhbmQgbm8gY29udHJvbC1mbG93IGRlY2lzaW9ucyBkZXBlbmQgb24gdW5pbml0aWFsaXplZCBzdGF0ZS4gUG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoaXMgY2hhbmdlIChlLmcuIFRMQiBmbHVzaGluZyBjb3JyZWN0bmVzcywgUkNVIGxpZmVjeWNsZSwgb3IgU1BURSBtb2RpZmljYXRpb24gcmFjZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY2NGIxOTdjMzNiM2RkNjMyOGEwNThkMjY1NzI3MmMzZWI1ZTk1ZWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDoyMDo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuYyBiL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1xuaW5kZXggOWUxN2JmYTgwOTAxMS4uZDliZTQyOTg0MTBkMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX2l0ZXIuY1xuKysrIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5jXG5AQCAtMTMyLDcgKzEzMiw4IEBAIHN0YXRpYyBib29sIHRyeV9zdGVwX3NpZGUoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuICAqIGNhbiBjb250aW51ZSBmcm9tIHRoZSBuZXh0IGVudHJ5IGluIHRoZSBwYXJlbnQgcGFnZSB0YWJsZS4gUmV0dXJucyB0cnVlIG9uIGFcbiAgKiBzdWNjZXNzZnVsIHN0ZXAgdXAsIGZhbHNlIGlmIGFscmVhZHkgaW4gdGhlIHJvb3QgcGFnZS5cbiAgKi9cbi1zdGF0aWMgYm9vbCB0cnlfc3RlcF91cChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4rc3RhdGljIGJvb2wgdHJ5X3N0ZXBfdXAoc3RydWN0IHRkcF9pdGVyICppdGVyLFxuK1x0XHRcdHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQpXG4ge1xuIFx0aWYgKGl0ZXItXHUwMDNlbGV2ZWwgPT0gaXRlci1cdTAwM2Vyb290X2xldmVsKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG5AQCAtMTQxLDYgKzE0MiwxNCBAQCBzdGF0aWMgYm9vbCB0cnlfc3RlcF91cChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4gXHRpdGVyLVx1MDAzZWdmbiA9IGdmbl9yb3VuZF9mb3JfbGV2ZWwoaXRlci1cdTAwM2VnZm4sIGl0ZXItXHUwMDNlbGV2ZWwpO1xuIFx0dGRwX2l0ZXJfcmVmcmVzaF9zcHRlcChpdGVyKTtcbiBcbitcdGlmIChldmVudCBcdTAwMjZcdTAwMjYgIWV2ZW50LVx1MDAzZXZhbGlkKSB7XG4rXHRcdGV2ZW50LVx1MDAzZXNwdGVwID0gaXRlci1cdTAwM2VzcHRlcDtcbitcdFx0ZXZlbnQtXHUwMDNlb2xkX3NwdGUgPSBpdGVyLVx1MDAzZW9sZF9zcHRlO1xuK1x0XHRldmVudC1cdTAwM2VnZm4gPSBpdGVyLVx1MDAzZWdmbjtcbitcdFx0ZXZlbnQtXHUwMDNlbGV2ZWwgPSBpdGVyLVx1MDAzZWxldmVsO1xuK1x0XHRldmVudC1cdTAwM2V2YWxpZCA9IHRydWU7XG4rXHR9XG4rXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG5AQCAtMTYwLDggKzE2OSwxMiBAQCBzdGF0aWMgYm9vbCB0cnlfc3RlcF91cChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpXG4gICogICAgU1BURSB3aWxsIGhhdmUgYWxyZWFkeSBiZWVuIHZpc2l0ZWQsIGFuZCBzbyB0aGUgaXRlcmF0b3IgbXVzdCBhbHNvIHN0ZXBcbiAgKiAgICB0byB0aGUgc2lkZSBhZ2Fpbi5cbiAgKi9cbi12b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuK3N0YXRpYyB2b2lkIF9fdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIsXG4rXHRcdFx0ICAgIHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQpXG4ge1xuK1x0aWYgKGV2ZW50KVxuK1x0XHRldmVudC1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuK1xuIFx0aWYgKGl0ZXItXHUwMDNleWllbGRlZCkge1xuIFx0XHR0ZHBfaXRlcl9yZXN0YXJ0KGl0ZXIpO1xuIFx0XHRyZXR1cm47XG5AQCAtMTczLDcgKzE4NiwxNyBAQCB2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuIFx0ZG8ge1xuIFx0XHRpZiAodHJ5X3N0ZXBfc2lkZShpdGVyKSlcbiBcdFx0XHRyZXR1cm47XG4tXHR9IHdoaWxlICh0cnlfc3RlcF91cChpdGVyKSk7XG4rXHR9IHdoaWxlICh0cnlfc3RlcF91cChpdGVyLCBldmVudCkpO1xuIFx0aXRlci1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuIH1cbiBcbit2b2lkIHRkcF9pdGVyX25leHQoc3RydWN0IHRkcF9pdGVyICppdGVyKVxuK3tcbitcdF9fdGRwX2l0ZXJfbmV4dChpdGVyLCBOVUxMKTtcbit9XG4rXG4rdm9pZCB0ZHBfaXRlcl9uZXh0X3Bvc3Rfb3JkZXIoc3RydWN0IHRkcF9pdGVyICppdGVyLFxuK1x0XHRcdCAgICAgIHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCAqZXZlbnQpXG4re1xuK1x0X190ZHBfaXRlcl9uZXh0KGl0ZXIsIGV2ZW50KTtcbit9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oIGIvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oXG5pbmRleCBmODk4ZDhkMGQ5M2MyLi5iN2UyNjA1ZmJmOWU5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS90ZHBfaXRlci5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9pdGVyLmhcbkBAIC0xMjMsNiArMTIzLDE0IEBAIHN0cnVjdCB0ZHBfaXRlciB7XG4gXHRib29sIHlpZWxkZWQ7XG4gfTtcbiBcbitzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQge1xuK1x0dGRwX3B0ZXBfdCBzcHRlcDtcbitcdHU2NCBvbGRfc3B0ZTtcbitcdGdmbl90IGdmbjtcbitcdGludCBsZXZlbDtcbitcdGJvb2wgdmFsaWQ7XG4rfTtcbitcbiAvKlxuICAqIEl0ZXJhdGVzIG92ZXIgZXZlcnkgU1BURSBtYXBwaW5nIHRoZSBHRk4gcmFuZ2UgW3N0YXJ0LCBlbmQpIGluIGFcbiAgKiBwcmVvcmRlciB0cmF2ZXJzYWwuXG5AQCAtMTQ1LDYgKzE1Myw4IEBAIHRkcF9wdGVwX3Qgc3B0ZV90b19jaGlsZF9wdCh1NjQgcHRlLCBpbnQgbGV2ZWwpO1xuIHZvaWQgdGRwX2l0ZXJfc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxuIFx0XHQgICAgaW50IG1pbl9sZXZlbCwgZ2ZuX3QgbmV4dF9sYXN0X2xldmVsX2dmbiwgZ2ZuX3QgZ2ZuX2JpdHMpO1xuIHZvaWQgdGRwX2l0ZXJfbmV4dChzdHJ1Y3QgdGRwX2l0ZXIgKml0ZXIpO1xuK3ZvaWQgdGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyKHN0cnVjdCB0ZHBfaXRlciAqaXRlcixcbitcdFx0XHQgICAgICBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnQgKmV2ZW50KTtcbiB2b2lkIHRkcF9pdGVyX3Jlc3RhcnQoc3RydWN0IHRkcF9pdGVyICppdGVyKTtcbiBcbiAjZW5kaWYgLyogX19LVk1fWDg2X01NVV9URFBfSVRFUl9IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY1xuaW5kZXggNDRkYWQxMDZmYWQxOS4uODI0NDZjNDczN2Y3OSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuY1xuQEAgLTkyMyw2ICs5MjMsMzggQEAgYm9vbCBrdm1fdGRwX21tdV96YXBfcG9zc2libGVfbnhfaHVnZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitzdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9jb21wbGV0ZWRfZW1wdHlfbGVhZl9wdChzdHJ1Y3Qga3ZtICprdm0sXG4rXHRcdFx0XHRcdFx0c3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50ICpldmVudCxcbitcdFx0XHRcdFx0XHRnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxuK1x0XHRcdFx0XHRcdHRkcF9wdGVwX3QgemFwcGVkX2xlYWZfcHQpXG4re1xuK1x0c3RydWN0IGt2bV9tbXVfcGFnZSAqY2hpbGRfc3A7XG4rXG4rXHRpZiAoZXZlbnQtXHUwMDNlbGV2ZWwgIT0gUEdfTEVWRUxfMk0gfHxcbitcdCAgICAhaXNfc2hhZG93X3ByZXNlbnRfcHRlKGV2ZW50LVx1MDAzZW9sZF9zcHRlKSB8fFxuK1x0ICAgIGlzX2xhc3Rfc3B0ZShldmVudC1cdTAwM2VvbGRfc3B0ZSwgZXZlbnQtXHUwMDNlbGV2ZWwpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoZXZlbnQtXHUwMDNlZ2ZuIFx1MDAzYyBzdGFydCB8fFxuK1x0ICAgIGV2ZW50LVx1MDAzZWdmbiArIEtWTV9QQUdFU19QRVJfSFBBR0UoZXZlbnQtXHUwMDNlbGV2ZWwpIFx1MDAzZSBlbmQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIExlYXZlIHByb2R1Y3RpdmUgbGVhZiB0YWJsZXMgaW4gcGxhY2UgdG8gYXZvaWQgcmVmYXVsdCBjaHVybi4gKi9cbitcdGlmICh6YXBwZWRfbGVhZl9wdCA9PSBldmVudC1cdTAwM2VzcHRlcClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Y2hpbGRfc3AgPSBzcHRlX3RvX2NoaWxkX3NwKGV2ZW50LVx1MDAzZW9sZF9zcHRlKTtcbitcdGlmIChpc19taXJyb3Jfc3AoY2hpbGRfc3ApKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoY2hpbGRfc3AtXHUwMDNlcm9sZS5sZXZlbCAhPSBQR19MRVZFTF80SylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0dGRwX21tdV9zZXRfc3B0ZShrdm0sIGV2ZW50LVx1MDAzZXNwdGVwLCBldmVudC1cdTAwM2VvbGRfc3B0ZSxcbitcdFx0XHQgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUsIGV2ZW50LVx1MDAzZWdmbiwgZXZlbnQtXHUwMDNlbGV2ZWwpO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIC8qXG4gICogSWYgY2FuX3lpZWxkIGlzIHRydWUsIHdpbGwgcmVsZWFzZSB0aGUgTU1VIGxvY2sgYW5kIHJlc2NoZWR1bGUgaWYgdGhlXG4gICogc2NoZWR1bGVyIG5lZWRzIHRoZSBDUFUgb3IgdGhlcmUgaXMgY29udGVudGlvbiBvbiB0aGUgTU1VIGxvY2suIElmIHRoaXNcbkBAIC05MzMsNyArOTY1LDEwIEBAIGJvb2wga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXG4gc3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxuIFx0XHRcdCAgICAgIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgY2FuX3lpZWxkLCBib29sIGZsdXNoKVxuIHtcbitcdHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudCBldmVudCA9IHt9O1xuIFx0c3RydWN0IHRkcF9pdGVyIGl0ZXI7XG4rXHR0ZHBfcHRlcF90IHphcHBlZF9sZWFmX3B0ID0gTlVMTDtcbitcdGJvb2wgcmVtb3ZlZF9zcCA9IGZhbHNlO1xuIFxuIFx0ZW5kID0gbWluKGVuZCwgdGRwX21tdV9tYXhfZ2ZuX2V4Y2x1c2l2ZSgpKTtcbiBcbkBAIC05NDEsMzMgKzk3Niw1NiBAQCBzdGF0aWMgYm9vbCB0ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnJvb3QsXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXG4tXHRmb3JfZWFjaF90ZHBfcHRlX21pbl9sZXZlbChpdGVyLCBrdm0sIHJvb3QsIFBHX0xFVkVMXzRLLCBzdGFydCwgZW5kKSB7XG4rXHR0ZHBfaXRlcl9zdGFydChcdTAwMjZpdGVyLCByb290LCBQR19MRVZFTF80Sywgc3RhcnQsXG4rXHRcdCAgICAgICBrdm1fZ2ZuX3Jvb3RfYml0cyhrdm0sIHJvb3QpKTtcbitcdHdoaWxlIChpdGVyLnZhbGlkIFx1MDAyNlx1MDAyNiBpdGVyLmdmbiBcdTAwM2MgZW5kKSB7XG4gXHRcdGlmIChjYW5feWllbGQgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICB0ZHBfbW11X2l0ZXJfY29uZF9yZXNjaGVkKGt2bSwgXHUwMDI2aXRlciwgZmx1c2gsIGZhbHNlKSkge1xuIFx0XHRcdGZsdXNoID0gZmFsc2U7XG4rXHRcdFx0dGRwX2l0ZXJfbmV4dChcdTAwMjZpdGVyKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoIWlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLm9sZF9zcHRlKSB8fFxuLVx0XHQgICAgIWlzX2xhc3Rfc3B0ZShpdGVyLm9sZF9zcHRlLCBpdGVyLmxldmVsKSlcbi1cdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZShpdGVyLm9sZF9zcHRlKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGlzX2xhc3Rfc3B0ZShpdGVyLm9sZF9zcHRlLCBpdGVyLmxldmVsKSkge1xuK1x0XHRcdGlmIChpdGVyLmxldmVsID09IFBHX0xFVkVMXzRLKSB7XG4rXHRcdFx0XHRzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDtcbiBcbi1cdFx0dGRwX21tdV9pdGVyX3NldF9zcHRlKGt2bSwgXHUwMDI2aXRlciwgU0hBRE9XX05PTlBSRVNFTlRfVkFMVUUpO1xuK1x0XHRcdFx0c3AgPSBzcHRlcF90b19zcChyY3VfZGVyZWZlcmVuY2UoaXRlci5zcHRlcCkpO1xuK1x0XHRcdFx0emFwcGVkX2xlYWZfcHQgPSBzcC1cdTAwM2VwdGVwO1xuK1x0XHRcdH1cbiBcbi1cdFx0Lypcbi1cdFx0ICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2Vzbid0IHJlcXVpcmUgYSBUTEIgZmx1c2gsXG4tXHRcdCAqIHNlZSBrdm1fdGRwX21tdV96YXBfaW52YWxpZGF0ZWRfcm9vdHMoKSBmb3IgZGV0YWlscy5cbi1cdFx0ICovXG4tXHRcdGlmICghcm9vdC1cdTAwM2Vyb2xlLmludmFsaWQpXG4tXHRcdFx0Zmx1c2ggPSB0cnVlO1xuLVx0fVxuK1x0XHRcdHRkcF9tbXVfaXRlcl9zZXRfc3B0ZShrdm0sIFx1MDAyNml0ZXIsXG4rXHRcdFx0XHRcdCAgICAgIFNIQURPV19OT05QUkVTRU5UX1ZBTFVFKTtcbiBcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogWmFwcGluZ3MgU1BURXMgaW4gaW52YWxpZCByb290cyBkb2Vzbid0IHJlcXVpcmUgYSBUTEIgZmx1c2gsXG4rXHRcdFx0ICogc2VlIGt2bV90ZHBfbW11X3phcF9pbnZhbGlkYXRlZF9yb290cygpIGZvciBkZXRhaWxzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmICghcm9vdC1cdTAwM2Vyb2xlLmludmFsaWQpXG4rXHRcdFx0XHRmbHVzaCA9IHRydWU7XG4rXHRcdH1cbitcbitcdFx0dGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyKFx1MDAyNml0ZXIsIFx1MDAyNmV2ZW50KTtcbitcdFx0aWYgKGV2ZW50LnZhbGlkIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgdGRwX21tdV96YXBfY29tcGxldGVkX2VtcHR5X2xlYWZfcHQoa3ZtLCBcdTAwMjZldmVudCwgc3RhcnQsXG4rXHRcdFx0XHRcdFx0XHRlbmQsIHphcHBlZF9sZWFmX3B0KSkge1xuK1x0XHRcdGlmICghcm9vdC1cdTAwM2Vyb2xlLmludmFsaWQpXG4rXHRcdFx0XHRmbHVzaCA9IHRydWU7XG4rXHRcdFx0cmVtb3ZlZF9zcCA9IHRydWU7XG4rXHRcdH1cbitcdH1cbiBcbiBcdC8qXG4tXHQgKiBCZWNhdXNlIHRoaXMgZmxvdyB6YXBzIF9vbmx5XyBsZWFmIFNQVEVzLCB0aGUgY2FsbGVyIGRvZXNuJ3QgbmVlZFxuLVx0ICogdG8gcHJvdmlkZSBSQ1UgcHJvdGVjdGlvbiBhcyBubyAnc3RydWN0IGt2bV9tbXVfcGFnZScgd2lsbCBiZSBmcmVlZC5cbitcdCAqIElmIGFueSBzaGFkb3cgcGFnZXMgd2VyZSByZW1vdmVkLCBzZXJ2aWNlIHBlbmRpbmcgVExCIGZsdXNoZXMgYmVmb3JlXG4rXHQgKiBkcm9wcGluZyBSQ1UgcHJvdGVjdGlvbiwgYXMgcmVxdWlyZWQgYnkgdGhlIFREUCBNTVUgaXRlcmF0b3IuXG4gXHQgKi9cbitcdGlmIChyZW1vdmVkX3NwIFx1MDAyNlx1MDAyNiBmbHVzaCkge1xuK1x0XHRrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTtcbitcdFx0Zmx1c2ggPSBmYWxzZTtcbitcdH1cbitcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIGZsdXNoO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjIzOjUzLjY3Nzc2NTI4N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5OTQ2NjgwMDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIFJpc2sgQXNzZXNzbWVudCBmb3IgS1ZNIFREUCBNTVUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBjb25jZXJuaW5nIHRoZSBLVk0gVERQIE1NVSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgaW4gYHRkcF9pdGVyLmNgLCBgdGRwX2l0ZXIuaGAsIGFuZCBgdGRwX21tdS5jYC4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiBhbmFseXNpcy5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSAqZG9pbmcqLiBJJ20gc2VlaW5nIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHN0cnVjdCB0ZHBfaXRlcl9jaGlsZF9ldmVudGAuIExvb2tpbmcgY2xvc2VseSBhdCBgdGRwX2l0ZXIuY2AsIHRoaXMgc3RydWN0IGFwcGVhcnMgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGFuIGl0ZXJhdG9yLiBJdCBsb29rcyBsaWtlIGl0IGhvbGRzIHN0YXRlIGluZm9ybWF0aW9uIGR1cmluZyBhIHRyYXZlcnNhbCwgZXNwZWNpYWxseSB0aGUgYF9fdGRwX2l0ZXJfbmV4dGAgYW5kIGB0cnlfc3RlcF91cGAgZnVuY3Rpb25zIGFyZSBpbnRlcmVzdGluZy4gVGhlIGltcG9ydGFudCBwb2ludCBJJ3ZlIG5vdGljZWQgaGVyZSBpcyB0aGUgaW5pdGlhbGl6YXRpb24gc3RyYXRlZ3kgZm9yIHRoZSBldmVudC4gSW4gYHRkcF9tbXVfemFwX2xlYWZzYCB0aGUgYGV2ZW50YCBzdHJ1Y3R1cmUgaXMgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2suXG5cbldpdGhpbiBgdGRwX2l0ZXJfbmV4dF9wb3N0X29yZGVyYCwgdGhlIGBldmVudC1cdTAwM2V2YWxpZGAgaXMgaW1tZWRpYXRlbHkgc2V0IHRvIGZhbHNlLiBTdWJzZXF1ZW50bHksIGlmIGB0cnlfc3RlcF91cGAgaXMgZXhlY3V0ZWQsIHRoZSBzdHJ1Y3QgZXZlbnQgZmllbGRzIGFyZSBwb3B1bGF0ZWQsIG5hbWVseSBgc3B0ZXBgLCBgb2xkX3NwdGVgLCBgZ2ZuYCwgYGxldmVsYCwgYW5kIGB2YWxpZGAgYXJlIHVwZGF0ZWQuIElmIGBldmVudC52YWxpZGAgaXMgdHJ1ZSwgdGhlbiBgdGRwX21tdV96YXBfY29tcGxldGVkX2VtcHR5X2xlYWZfcHRgIHJlYWRzIGRhdGEgZnJvbSB0aGVzZSBmaWVsZHMuIEl0IG1ha2VzIGEgY2hlY2sgYmFzZWQgb24gYGV2ZW50LnZhbGlkYC5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogSXMgdGhlcmUgYW55IHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlPyBCYXNlZCBvbiBteSBhbmFseXNpcywgbm8uIFRoZSBgZXZlbnRgIHN0cnVjdCBpcyBpbml0aWFsaXplZCB0byB6ZXJvIGluaXRpYWxseSwgYW5kIGFsbCBmaWVsZHMgYXJlIHdyaXR0ZW4gKmJlZm9yZSogYmVpbmcgcmVhZCwgZWl0aGVyIGluIGB0cnlfc3RlcF91cGAgb3Igd2hlbiBgZXZlbnQudmFsaWRgIGlzIHRydWUuIFRoZXJlJ3Mgbm8gZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gaW5kaWNhdGlvbnMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgY29waWVkIGFueXdoZXJlLiBJJ20gbm90IHNlZWluZyBhbnkgdHlwaWNhbCBtZW1vcnkgYWxsb2NhdGlvbiBwaXRmYWxscyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCB2YWx1ZXMuIFRoaXMgaXMgaW50ZXJuYWwgS1ZNIHBhZ2UgdGFibGUgaXRlcmF0aW9uLCB6YXBwaW5nIGxvZ2ljLlxuXG5TbywgbGV0J3Mgc3VtbWFyaXplOlxuKiAgIGBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnRgIGlzIGluaXRpYWxpemVkIHRvIHplcm9cbiogICBldmVudCBpcyBwb3B1bGF0ZWQgd2l0aCB2YWxpZCBkYXRhXG4qICAgYGV2ZW50LVx1MDAzZXZhbGlkYCBjaGVjayBwcm90ZWN0cyByZWFkcyBvZiB0aGUgZGF0YVxuXG5NeSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IEtNU0FOIGNvbmNlcm5zLiBJdCdzIGVzc2VudGlhbGx5IGludGVybmFsIEtWTSBURFAgTU1VIHBhZ2UgdGFibGUgaXRlcmF0aW9uIGFuZCB6YXBwaW5nIGFuZCBUTEIgZmx1c2ggZm9yIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgKHBhZ2UgdGFibGUgbWFuYWdlbWVudCkuIFRoZSBkYXRhIGlzIG1hbmFnZWQgaW50ZXJuYWxseSBhbmQgZG9lc24ndCBsZWFrIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG91YmxlIGNoZWNrIHRoYXQgSSBkaWRuJ3QgbWlzcyBzb21ldGhpbmcuIEkgY2FuIHVzZSBgZ3JlcHBlcmAgb3IgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYSBzdWJ0bGUgZGV0YWlsLiBUaGlzIGxvb2tzIGNsZWFuIGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZS4gSSB0aGluayBpdCdzIHNhZmUgdG8gZXhjbHVkZSBmcm9tIEtNU0FOIHNjcnV0aW55LiBJIHdpbGwgcXVpY2tseSBjaGVjayBhcm91bmQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MzksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoyNDowMy42MjQ0NDg3OThaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTExMjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRkcF9tbXVfemFwX2xlYWZzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9tbXUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmM9NzExMz12b2lkIGt2bV96YXBfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuX3N0YXJ0LCBnZm5fdCBnZm5fZW5kKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTI4LVxcdGlmICh0ZHBfbW11X2VuYWJsZWQpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo3MTI5OlxcdFxcdGZsdXNoID0ga3ZtX3RkcF9tbXVfemFwX2xlYWZzKGt2bSwgZ2ZuX3N0YXJ0LCBnZm5fZW5kLCBmbHVzaCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy03MTMwLVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM9OTI2PXN0YXRpYyBib29sIHRkcF9tbXVfemFwX2NvbXBsZXRlZF9lbXB0eV9sZWFmX3B0KHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTk2NC0gKi9cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzo5NjU6c3RhdGljIGJvb2wgdGRwX21tdV96YXBfbGVhZnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyb290LFxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTk2Ni1cXHRcXHRcXHQgICAgICBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLCBib29sIGNhbl95aWVsZCwgYm9vbCBmbHVzaClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwMzYtICovXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTAzNzpib29sIGt2bV90ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgZmx1c2gpXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTAzOC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYy0xMDQyLVxcdGZvcl9lYWNoX3ZhbGlkX3RkcF9tbXVfcm9vdF95aWVsZF9zYWZlKGt2bSwgcm9vdCwgLTEpXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmM6MTA0MzpcXHRcXHRmbHVzaCA9IHRkcF9tbXVfemFwX2xlYWZzKGt2bSwgcm9vdCwgc3RhcnQsIGVuZCwgdHJ1ZSwgZmx1c2gpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5jLTEwNDQtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYz0xMzY1PWJvb2wga3ZtX3RkcF9tbXVfdW5tYXBfZ2ZuX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTM3My1cXHRfX2Zvcl9lYWNoX3RkcF9tbXVfcm9vdF95aWVsZF9zYWZlKGt2bSwgcm9vdCwgcmFuZ2UtXFx1MDAzZXNsb3QtXFx1MDAzZWFzX2lkLCB0eXBlcylcXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuYzoxMzc0OlxcdFxcdGZsdXNoID0gdGRwX21tdV96YXBfbGVhZnMoa3ZtLCByb290LCByYW5nZS1cXHUwMDNlc3RhcnQsIHJhbmdlLVxcdTAwM2VlbmQsXFxuYXJjaC94ODYva3ZtL21tdS90ZHBfbW11LmMtMTM3NS1cXHRcXHRcXHRcXHRcXHQgIHJhbmdlLVxcdTAwM2VtYXlfYmxvY2ssIGZsdXNoKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oPTU3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tbXVfcGFnZSAqdGRwX21tdV9nZXRfcm9vdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaC02NS1cXG5hcmNoL3g4Ni9rdm0vbW11L3RkcF9tbXUuaDo2Njpib29sIGt2bV90ZHBfbW11X3phcF9sZWFmcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsIGJvb2wgZmx1c2gpO1xcbmFyY2gveDg2L2t2bS9tbXUvdGRwX21tdS5oLTY3LWJvb2wga3ZtX3RkcF9tbXVfemFwX3Bvc3NpYmxlX254X2h1Z2VfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjI0OjAzLjY2OTk2MzcwNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTMwNjcyMjAyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBObyBLTVNBTiBDb25jZXJucyBIZXJlKipcblxuT2theSwgc28gSSd2ZSByZXZpZXdlZCB0aGlzIHByb3Bvc2VkIHBhdGNoLCBhbmQgZnJhbmtseSwgaXQncyBwcmV0dHkgY2xlYW4uIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIG9wdGltaXppbmcgdGhlIEtWTSBURFAgTU1VIGJ5IG1vZGlmeWluZyB0aGUgaXRlcmF0b3IgYW5kIHBhZ2UgdGFibGUgemFwcGluZyBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdCdzIGFkZGluZyBwb3N0LW9yZGVyIHRyYXZlcnNhbCBldmVudCBub3RpZmljYXRpb25zIHRvIHphcCAqY29tcGxldGVkKiBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzLlxuXG5JJ20gc2VlaW5nIHplcm8gaW5pdGlhbGl6YXRpb24gb2YgYWxsIHZhcmlhYmxlcywgbGlrZSB0aGF0IGBldmVudCA9IHt9YCBjYWxsLiBUaGF0J3MgZ29vZCBwcmFjdGljZS4gUGx1cywgdGhlcmUncyBhYnNvbHV0ZWx5IG5vIGluZGljYXRpb24gb2YgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIE5vIGNvcGllcyBhcmUgbWFkZSBhbmQgbm8gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgdXNlZCBpbiBicmFuY2hlcyBvciBvdGhlciBjb250cm9sIGZsb3dzLlxuXG5GcmFua2x5LCBhbnkgYnVncyB0aGF0ICpjb3VsZCogYXJpc2Ug4oCTIHBhZ2UgdGFibGUgemFwcGluZyBpc3N1ZXMsIFRMQiBpbnZhbGlkYXRpb24gcHJvYmxlbXMsIFJDVSByYWNlIGNvbmRpdGlvbnMsIG9yIGNvbmN1cnJlbnQgTU1VIG1vZGlmaWNhdGlvbiBpc3N1ZXMg4oCTIGFyZSBnb2luZyB0byBiZSBjYXVnaHQgYnkgdGhlIHN0YW5kYXJkIHRvb2xzIHdlJ3ZlIGdvdCBpbiBwbGFjZTogS0FTQU4sIGxvY2tkZXAsIGFuZCBvZiBjb3Vyc2UsIG91ciBleGlzdGluZyBmdW5jdGlvbmFsIHRlc3RzLiBUaGVzZSBzaG91bGQgY292ZXIgdXMuXG5cbkdpdmVuIGFsbCBvZiB0aGF0LCB0aGVyZSdzIGFic29sdXRlbHkgbm8gcmVhc29uIHRvIGZsYWcgdGhpcyBhcyBhIHBvdGVudGlhbCBLTVNBTiBpc3N1ZS4gVGhpcyBsb29rcyBzb2xpZCBmcm9tIG15IHBlcnNwZWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzMwLCJPdXRwdXRUb2tlbnMiOjE4NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoyNDoxNC45NzY2ODkxMTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSdzIFREUCBNTVUgaXRlcmF0aW9uIGFuZCBwYWdlIHRhYmxlIHphcHBpbmcgbG9naWMgdG8gemFwIGNvbXBsZXRlZCBlbXB0eSBsZWFmIHBhZ2UgdGFibGVzIGR1cmluZyBsZWFmIHphcHBpbmcuIEl0IGludHJvZHVjZXMgYSBgc3RydWN0IHRkcF9pdGVyX2NoaWxkX2V2ZW50YCBzdHJ1Y3R1cmUsIHdoaWNoIGlzIHplcm8taW5pdGlhbGl6ZWQgb24gdGhlIHN0YWNrIChgZXZlbnQgPSB7fWApIGFuZCB3aG9zZSBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgcG9wdWxhdGVkIGluIGB0cnlfc3RlcF91cCgpYCB3aGVuZXZlciBgZXZlbnQtXFx1MDAzZXZhbGlkYCBpcyBzZXQgdG8gdHJ1ZS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIGFuZCBubyBjb250cm9sLWZsb3cgZGVjaXNpb25zIGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHN0YXRlLiBQb3RlbnRpYWwgaXNzdWVzIHdpdGggdGhpcyBjaGFuZ2UgKGUuZy4gVExCIGZsdXNoaW5nIGNvcnJlY3RuZXNzLCBSQ1UgbGlmZWN5Y2xlLCBvciBTUFRFIG1vZGlmaWNhdGlvbiByYWNlcykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJ3MgVERQIE1NVSBpdGVyYXRpb24gYW5kIHBhZ2UgdGFibGUgemFwcGluZyBsb2dpYyB0byB6YXAgY29tcGxldGVkIGVtcHR5IGxlYWYgcGFnZSB0YWJsZXMgZHVyaW5nIGxlYWYgemFwcGluZy4gSXQgaW50cm9kdWNlcyBhIGBzdHJ1Y3QgdGRwX2l0ZXJfY2hpbGRfZXZlbnRgIHN0cnVjdHVyZSwgd2hpY2ggaXMgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2sgKGBldmVudCA9IHt9YCkgYW5kIHdob3NlIGZpZWxkcyBhcmUgZXhwbGljaXRseSBwb3B1bGF0ZWQgaW4gYHRyeV9zdGVwX3VwKClgIHdoZW5ldmVyIGBldmVudC1cXHUwMDNldmFsaWRgIGlzIHNldCB0byB0cnVlLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGxlZnQgdW5pbml0aWFsaXplZCwgYW5kIG5vIGNvbnRyb2wtZmxvdyBkZWNpc2lvbnMgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIFBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGlzIGNoYW5nZSAoZS5nLiBUTEIgZmx1c2hpbmcgY29ycmVjdG5lc3MsIFJDVSBsaWZlY3ljbGUsIG9yIFNQVEUgbW9kaWZpY2F0aW9uIHJhY2VzKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4t9l[1] Phase: Succeeded StartedAt: 2026-08-31 10:24:26 +0000 UTC FinishedAt: 2026-08-31 10:24:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4t9l[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 10:24:26 +0000 UTC FinishedAt: 2026-08-31 10:24:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4t9l[2] Phase: Succeeded StartedAt: 2026-08-31 10:24:26 +0000 UTC FinishedAt: 2026-08-31 14:01:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 10:24:26 +0000 UTC FinishedAt: 2026-08-31 14:01:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 10:24:26 +0000 UTC FinishedAt: 2026-08-31 10:24:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 10:24:26 +0000 UTC FinishedAt: 2026-08-31 10:24:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowb4t9l/series-workflowb4t9l-convert-artifact-1951441649/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 10:24:36 +0000 UTC FinishedAt: 2026-08-31 10:40:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 10:24:36 +0000 UTC FinishedAt: 2026-08-31 10:40:28 +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:*30b5907d-33d7-4357-ac92-f50c10dc5f85,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-workflowb4t9l/series-workflowb4t9l-convert-artifact-1951441649/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": "fd6fd9a9-10a3-49da-a992-4d48a39a046a", "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-workflowb4t9l/series-workflowb4t9l-build-action-2696633631/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 10:24:36 +0000 UTC FinishedAt: 2026-08-31 10:40:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*30b5907d-33d7-4357-ac92-f50c10dc5f85,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-workflowb4t9l/series-workflowb4t9l-convert-artifact-1951441649/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": "fd6fd9a9-10a3-49da-a992-4d48a39a046a", "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-workflowb4t9l/series-workflowb4t9l-build-action-2696633631/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 10:40:28 +0000 UTC FinishedAt: 2026-08-31 10:40:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 10:40:28 +0000 UTC FinishedAt: 2026-08-31 10:40:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 10:40:28 +0000 UTC FinishedAt: 2026-08-31 10:40:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 10:40:28 +0000 UTC FinishedAt: 2026-08-31 10:40:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowb4t9l/series-workflowb4t9l-convert-artifact-942402884/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 10:40:38 +0000 UTC FinishedAt: 2026-08-31 10:42:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 10:40:38 +0000 UTC FinishedAt: 2026-08-31 10:42:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fd6fd9a9-10a3-49da-a992-4d48a39a046a,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-workflowb4t9l/series-workflowb4t9l-build-action-2696633631/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-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 10:42:32 +0000 UTC FinishedAt: 2026-08-31 10:42:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 10:42:32 +0000 UTC FinishedAt: 2026-08-31 10:42:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 10:42:32 +0000 UTC FinishedAt: 2026-08-31 10:58:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 10:42:32 +0000 UTC FinishedAt: 2026-08-31 10:58:30 +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:*30b5907d-33d7-4357-ac92-f50c10dc5f85,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-workflowb4t9l/series-workflowb4t9l-convert-artifact-942402884/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": "071004e8-fa1e-4a2d-bc9b-9e78c560cbb5", "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-workflowb4t9l/series-workflowb4t9l-build-action-2812417360/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 10:42:32 +0000 UTC FinishedAt: 2026-08-31 10:58:20 +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:*30b5907d-33d7-4357-ac92-f50c10dc5f85,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-workflowb4t9l/series-workflowb4t9l-convert-artifact-942402884/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": "071004e8-fa1e-4a2d-bc9b-9e78c560cbb5", "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-workflowb4t9l/series-workflowb4t9l-build-action-2812417360/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 10:58:30 +0000 UTC FinishedAt: 2026-08-31 10:58:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 10:58:30 +0000 UTC FinishedAt: 2026-08-31 10:58:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 10:58:30 +0000 UTC FinishedAt: 2026-08-31 11:00:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 10:58:30 +0000 UTC FinishedAt: 2026-08-31 11:00:15 +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:*071004e8-fa1e-4a2d-bc9b-9e78c560cbb5,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-workflowb4t9l/series-workflowb4t9l-build-action-2812417360/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-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 11:00:25 +0000 UTC FinishedAt: 2026-08-31 14:01:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 11:00:25 +0000 UTC FinishedAt: 2026-08-31 14:01:46 +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":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"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:*fd6fd9a9-10a3-49da-a992-4d48a39a046a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*071004e8-fa1e-4a2d-bc9b-9e78c560cbb5,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-workflowb4t9l/series-workflowb4t9l-build-action-2696633631/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-workflowb4t9l/series-workflowb4t9l-build-action-2812417360/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 11:00:25 +0000 UTC FinishedAt: 2026-08-31 11:00:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 11:00:25 +0000 UTC FinishedAt: 2026-08-31 11:00:30 +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":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"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-workflowb4t9l/series-workflowb4t9l-convert-artifact-3170521677/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 11:00:25 +0000 UTC FinishedAt: 2026-08-31 11:00:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 11:00:25 +0000 UTC FinishedAt: 2026-08-31 11:00:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 11:00:25 +0000 UTC FinishedAt: 2026-08-31 11:00:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 11:00:35 +0000 UTC FinishedAt: 2026-08-31 14:01:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4t9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_tdp_mmu_zap_leafs","tdp_iter_next_post_order","kvm_tdp_mmu_unmap_gfn_range","kvm_zap_gfn_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","X86_64"],"series_id":"080bc1a0-dc5b-4719-8de9-81fe9a659536","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 11:00:35 +0000 UTC FinishedAt: 2026-08-31 14:01:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fd6fd9a9-10a3-49da-a992-4d48a39a046a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*071004e8-fa1e-4a2d-bc9b-9e78c560cbb5,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-workflowb4t9l/series-workflowb4t9l-build-action-2696633631/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-workflowb4t9l/series-workflowb4t9l-build-action-2812417360/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-workflowb4t9l/series-workflowb4t9l-convert-artifact-3170521677/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,}