Name: series-workflowqjcts Phase: Succeeded StartedAt: 2026-08-05 17:44:02 +0000 UTC FinishedAt: 2026-08-05 21:29:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjcts[0] Phase: Succeeded StartedAt: 2026-08-05 17:44:02 +0000 UTC FinishedAt: 2026-08-05 17:47:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjcts[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 17:44:02 +0000 UTC FinishedAt: 2026-08-05 17:47:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_XEN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_XEN" ], "series_id": "f1ca4693-e3dc-4ca8-9029-4028548cb6b7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "gfn_to_pfn_cache_invalidate_start", "kvm_gpc_refresh", "kvm_gpc_activate", "kvm_gpc_activate_hva" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fWEVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0JiMzNDssCiAgICAmIzM0O2t2bV9ncGNfcmVmcmVzaCYjMzQ7LAogICAgJiMzNDtrdm1fZ3BjX2FjdGl2YXRlJiMzNDssCiAgICAmIzM0O2t2bV9ncGNfYWN0aXZhdGVfaHZhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZm5jYWNoZSBpbnZhbGlkYXRpb24gbG9naWMgaW4gS1ZNLCBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBieSBpbnRyb2R1Y2luZyBhIHNlcXVlbmNlIGNvdW50ZXIuIFRoaXMgaXMgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlNmNlMjMwNDRkNmY4NmMyNWE5MzRkNGJlZjA4YmI4ZmFmZmM0OWI5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgNSAxNzo0NToxMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzEuLjRjMDk3MDg1NWM4YjIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTgwNSw2ICYjNDM7ODA1LDcgQEAgc3RydWN0IGt2bSB7XG4gXHQvKiBGb3IgbWFuYWdlbWVudCAvIGludmFsaWRhdGlvbiBvZiBnZm5fdG9fcGZuX2NhY2hlcyAqL1xuIFx0c3BpbmxvY2tfdCBncGNfbG9jaztcbiBcdHN0cnVjdCBsaXN0X2hlYWQgZ3BjX2xpc3Q7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBncGNfaW52YWxpZGF0ZV9zZXE7XG4gXG4gXHQvKlxuIFx0ICogY3JlYXRlZF92Y3B1cyBpcyBwcm90ZWN0ZWQgYnkga3ZtLVx1MDAzZWxvY2ssIGFuZCBpcyBpbmNyZW1lbnRlZFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMgYi92aXJ0L2t2bS9wZm5jYWNoZS5jXG5pbmRleCA3MjhkMmMxYjQ4OGE4Li44NzdkNmQxZDgyMzMyIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vcGZuY2FjaGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vcGZuY2FjaGUuY1xuQEAgLTI2LDM0ICYjNDM7MjYsNDAgQEAgdm9pZCBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKVxuIHtcbiBcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGM7XG4mIzQzO1x0Ym9vbCB3YWtlID0gZmFsc2U7XG4gXG4gXHRzcGluX2xvY2soXHUwMDI2a3ZtLVx1MDAzZWdwY19sb2NrKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoZ3BjLCBcdTAwMjZrdm0tXHUwMDNlZ3BjX2xpc3QsIGxpc3QpIHtcbiBcdFx0cmVhZF9sb2NrX2lycShcdTAwMjZncGMtXHUwMDNlbG9jayk7XG4gXG4gXHRcdC8qIE9ubHkgYSBzaW5nbGUgcGFnZSBzbyBubyBuZWVkIHRvIGNhcmUgYWJvdXQgbGVuZ3RoICovXG4tXHRcdGlmIChncGMtXHUwMDNldmFsaWQgXHUwMDI2XHUwMDI2ICFpc19lcnJvcl9ub3Nsb3RfcGZuKGdwYy1cdTAwM2VwZm4pIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgZ3BjLVx1MDAzZXVodmEgXHUwMDNlPSBzdGFydCBcdTAwMjZcdTAwMjYgZ3BjLVx1MDAzZXVodmEgXHUwMDNjIGVuZCkge1xuLVx0XHRcdHJlYWRfdW5sb2NrX2lycShcdTAwMjZncGMtXHUwMDNlbG9jayk7XG4tXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBUaGVyZSBpcyBhIHNtYWxsIHdpbmRvdyBoZXJlIHdoZXJlIHRoZSBjYWNoZSBjb3VsZFxuLVx0XHRcdCAqIGJlIG1vZGlmaWVkLCBhbmQgaW52YWxpZGF0aW9uIHdvdWxkIG5vIGxvbmdlciBiZVxuLVx0XHRcdCAqIG5lY2Vzc2FyeS4gSGVuY2UgY2hlY2sgYWdhaW4gd2hldGhlciBpbnZhbGlkYXRpb25cbi1cdFx0XHQgKiBpcyBzdGlsbCBuZWNlc3Nhcnkgb25jZSB0aGUgd3JpdGUgbG9jayBoYXMgYmVlblxuLVx0XHRcdCAqIGFjcXVpcmVkLlxuLVx0XHRcdCAqL1xuLVxuLVx0XHRcdHdyaXRlX2xvY2tfaXJxKFx1MDAyNmdwYy1cdTAwM2Vsb2NrKTtcbi1cdFx0XHRpZiAoZ3BjLVx1MDAzZXZhbGlkIFx1MDAyNlx1MDAyNiAhaXNfZXJyb3Jfbm9zbG90X3BmbihncGMtXHUwMDNlcGZuKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgZ3BjLVx1MDAzZXVodmEgXHUwMDNlPSBzdGFydCBcdTAwMjZcdTAwMjYgZ3BjLVx1MDAzZXVodmEgXHUwMDNjIGVuZClcbi1cdFx0XHRcdGdwYy1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuLVx0XHRcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2Z3BjLVx1MDAzZWxvY2spO1xuLVx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKGdwYy1cdTAwM2V1aHZhIFx1MDAzZT0gc3RhcnQgXHUwMDI2XHUwMDI2IGdwYy1cdTAwM2V1aHZhIFx1MDAzYyBlbmQpIHtcbiYjNDM7XHRcdFx0d2FrZSA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoZ3BjLVx1MDAzZXZhbGlkIFx1MDAyNlx1MDAyNiAhaXNfZXJyb3Jfbm9zbG90X3BmbihncGMtXHUwMDNlcGZuKSkge1xuJiM0MztcdFx0XHRcdHJlYWRfdW5sb2NrX2lycShcdTAwMjZncGMtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdFx0XHRcdC8qXG4mIzQzO1x0XHRcdFx0ICogVGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaGVyZSB3aGVyZSB0aGUgY2FjaGUgY291bGRcbiYjNDM7XHRcdFx0XHQgKiBiZSBtb2RpZmllZCwgYW5kIGludmFsaWRhdGlvbiB3b3VsZCBubyBsb25nZXIgYmVcbiYjNDM7XHRcdFx0XHQgKiBuZWNlc3NhcnkuIEhlbmNlIGNoZWNrIGFnYWluIHdoZXRoZXIgaW52YWxpZGF0aW9uXG4mIzQzO1x0XHRcdFx0ICogaXMgc3RpbGwgbmVjZXNzYXJ5IG9uY2UgdGhlIHdyaXRlIGxvY2sgaGFzIGJlZW5cbiYjNDM7XHRcdFx0XHQgKiBhY3F1aXJlZC5cbiYjNDM7XHRcdFx0XHQgKi9cbiYjNDM7XG4mIzQzO1x0XHRcdFx0d3JpdGVfbG9ja19pcnEoXHUwMDI2Z3BjLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0XHRcdGlmIChncGMtXHUwMDNldmFsaWQgXHUwMDI2XHUwMDI2ICFpc19lcnJvcl9ub3Nsb3RfcGZuKGdwYy1cdTAwM2VwZm4pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdCAgICBncGMtXHUwMDNldWh2YSBcdTAwM2U9IHN0YXJ0IFx1MDAyNlx1MDAyNiBncGMtXHUwMDNldWh2YSBcdTAwM2MgZW5kKVxuJiM0MztcdFx0XHRcdFx0Z3BjLVx1MDAzZXZhbGlkID0gZmFsc2U7XG4mIzQzO1x0XHRcdFx0d3JpdGVfdW5sb2NrX2lycShcdTAwMjZncGMtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdH1cbiBcdFx0fVxuIFxuIFx0XHRyZWFkX3VubG9ja19pcnEoXHUwMDI2Z3BjLVx1MDAzZWxvY2spO1xuIFx0fVxuJiM0MztcdGlmICh3YWtlKVxuJiM0MztcdFx0a3ZtLVx1MDAzZWdwY19pbnZhbGlkYXRlX3NlcSYjNDM7JiM0Mzs7XG4gXHRzcGluX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlZ3BjX2xvY2spO1xuIH1cbiBcbkBAIC0xMjQsNyAmIzQzOzEzMCw4IEBAIHN0YXRpYyB2b2lkIGdwY191bm1hcChrdm1fcGZuX3QgcGZuLCB2b2lkICpraHZhKVxuICNlbmRpZlxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxLFxuJiM0MztcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgZ3BjX3NlcSlcbiB7XG4gXHQvKlxuIFx0ICogbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgYWN0cyBmb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzXG5AQCAtMTQ5LDcgJiM0MzsxNTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc1xuIFx0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgbW11X2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLlxuIFx0ICovXG4gXHRzbXBfcm1iKCk7XG4tXHRyZXR1cm4ga3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcSAhPSBtbXVfc2VxO1xuJiM0MztcdHJldHVybiBrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxICE9IG1tdV9zZXEgfHwga3ZtLVx1MDAzZWdwY19pbnZhbGlkYXRlX3NlcSAhPSBncGNfc2VxO1xuIH1cbiBcbiBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbkBAIC0xNTksNiAmIzQzOzE2Niw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuIFx0a3ZtX3Bmbl90IG5ld19wZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDtcbiBcdHZvaWQgKm5ld19raHZhID0gTlVMTDtcbiBcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGdwY19zZXE7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcbiBcdHN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7XG5AQCAtMTgyLDYgJiM0MzsxOTAsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbiBcbiBcdGRvIHtcbiBcdFx0bW11X3NlcSA9IGdwYy1cdTAwM2Vrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xuJiM0MztcdFx0Z3BjX3NlcSA9IGdwYy1cdTAwM2Vrdm0tXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxO1xuIFx0XHRzbXBfcm1iKCk7XG4gXG4gXHRcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2Z3BjLVx1MDAzZWxvY2spO1xuQEAgLTIzMiw3ICYjNDM7MjQxLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4gXHRcdCAqIGF0dGVtcHRpbmcgdG8gcmVmcmVzaC5cbiBcdFx0ICovXG4gXHRcdFdBUk5fT05fT05DRShncGMtXHUwMDNldmFsaWQpO1xuLVx0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cdTAwM2Vrdm0sIG1tdV9zZXEpKTtcbiYjNDM7XHR9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLVx1MDAzZWt2bSwgbW11X3NlcSwgZ3BjX3NlcSkpO1xuIFxuIFx0Z3BjLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbiBcdGdwYy1cdTAwM2VwZm4gPSBuZXdfcGZuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX1hFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydCYjMzQ7LAogICAgJiMzNDtrdm1fZ3BjX3JlZnJlc2gmIzM0OywKICAgICYjMzQ7a3ZtX2dwY19hY3RpdmF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fZ3BjX2FjdGl2YXRlX2h2YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGZuY2FjaGUgaW52YWxpZGF0aW9uIGxvZ2ljIGluIEtWTSwgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gYnkgaW50cm9kdWNpbmcgYSBzZXF1ZW5jZSBjb3VudGVyLiBUaGlzIGlzIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTZjZTIzMDQ0ZDZmODZjMjVhOTM0ZDRiZWYwOGJiOGZhZmZjNDliOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDUgMTc6NDU6MTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggYWI4Y2ZhZWM4MmQzMS4uNGMwOTcwODU1YzhiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaApAQCAtODA1LDYgJiM0Mzs4MDUsNyBAQCBzdHJ1Y3Qga3ZtIHsKIAkvKiBGb3IgbWFuYWdlbWVudCAvIGludmFsaWRhdGlvbiBvZiBnZm5fdG9fcGZuX2NhY2hlcyAqLwogCXNwaW5sb2NrX3QgZ3BjX2xvY2s7CiAJc3RydWN0IGxpc3RfaGVhZCBncGNfbGlzdDsKJiM0MzsJdW5zaWduZWQgbG9uZyBncGNfaW52YWxpZGF0ZV9zZXE7CiAKIAkvKgogCSAqIGNyZWF0ZWRfdmNwdXMgaXMgcHJvdGVjdGVkIGJ5IGt2bS0mZ3Q7bG9jaywgYW5kIGlzIGluY3JlbWVudGVkCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9wZm5jYWNoZS5jIGIvdmlydC9rdm0vcGZuY2FjaGUuYwppbmRleCA3MjhkMmMxYjQ4OGE4Li44NzdkNmQxZDgyMzMyIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9wZm5jYWNoZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmMKQEAgLTI2LDM0ICYjNDM7MjYsNDAgQEAgdm9pZCBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjOwomIzQzOwlib29sIHdha2UgPSBmYWxzZTsKIAogCXNwaW5fbG9jaygmYW1wO2t2bS0mZ3Q7Z3BjX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZ3BjLCAmYW1wO2t2bS0mZ3Q7Z3BjX2xpc3QsIGxpc3QpIHsKIAkJcmVhZF9sb2NrX2lycSgmYW1wO2dwYy0mZ3Q7bG9jayk7CiAKIAkJLyogT25seSBhIHNpbmdsZSBwYWdlIHNvIG5vIG5lZWQgdG8gY2FyZSBhYm91dCBsZW5ndGggKi8KLQkJaWYgKGdwYy0mZ3Q7dmFsaWQgJmFtcDsmYW1wOyAhaXNfZXJyb3Jfbm9zbG90X3BmbihncGMtJmd0O3BmbikgJmFtcDsmYW1wOwotCQkgICAgZ3BjLSZndDt1aHZhICZndDs9IHN0YXJ0ICZhbXA7JmFtcDsgZ3BjLSZndDt1aHZhICZsdDsgZW5kKSB7Ci0JCQlyZWFkX3VubG9ja19pcnEoJmFtcDtncGMtJmd0O2xvY2spOwotCi0JCQkvKgotCQkJICogVGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaGVyZSB3aGVyZSB0aGUgY2FjaGUgY291bGQKLQkJCSAqIGJlIG1vZGlmaWVkLCBhbmQgaW52YWxpZGF0aW9uIHdvdWxkIG5vIGxvbmdlciBiZQotCQkJICogbmVjZXNzYXJ5LiBIZW5jZSBjaGVjayBhZ2FpbiB3aGV0aGVyIGludmFsaWRhdGlvbgotCQkJICogaXMgc3RpbGwgbmVjZXNzYXJ5IG9uY2UgdGhlIHdyaXRlIGxvY2sgaGFzIGJlZW4KLQkJCSAqIGFjcXVpcmVkLgotCQkJICovCi0KLQkJCXdyaXRlX2xvY2tfaXJxKCZhbXA7Z3BjLSZndDtsb2NrKTsKLQkJCWlmIChncGMtJmd0O3ZhbGlkICZhbXA7JmFtcDsgIWlzX2Vycm9yX25vc2xvdF9wZm4oZ3BjLSZndDtwZm4pICZhbXA7JmFtcDsKLQkJCSAgICBncGMtJmd0O3VodmEgJmd0Oz0gc3RhcnQgJmFtcDsmYW1wOyBncGMtJmd0O3VodmEgJmx0OyBlbmQpCi0JCQkJZ3BjLSZndDt2YWxpZCA9IGZhbHNlOwotCQkJd3JpdGVfdW5sb2NrX2lycSgmYW1wO2dwYy0mZ3Q7bG9jayk7Ci0JCQljb250aW51ZTsKJiM0MzsJCWlmIChncGMtJmd0O3VodmEgJmd0Oz0gc3RhcnQgJmFtcDsmYW1wOyBncGMtJmd0O3VodmEgJmx0OyBlbmQpIHsKJiM0MzsJCQl3YWtlID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCQlpZiAoZ3BjLSZndDt2YWxpZCAmYW1wOyZhbXA7ICFpc19lcnJvcl9ub3Nsb3RfcGZuKGdwYy0mZ3Q7cGZuKSkgewomIzQzOwkJCQlyZWFkX3VubG9ja19pcnEoJmFtcDtncGMtJmd0O2xvY2spOwomIzQzOwomIzQzOwkJCQkvKgomIzQzOwkJCQkgKiBUaGVyZSBpcyBhIHNtYWxsIHdpbmRvdyBoZXJlIHdoZXJlIHRoZSBjYWNoZSBjb3VsZAomIzQzOwkJCQkgKiBiZSBtb2RpZmllZCwgYW5kIGludmFsaWRhdGlvbiB3b3VsZCBubyBsb25nZXIgYmUKJiM0MzsJCQkJICogbmVjZXNzYXJ5LiBIZW5jZSBjaGVjayBhZ2FpbiB3aGV0aGVyIGludmFsaWRhdGlvbgomIzQzOwkJCQkgKiBpcyBzdGlsbCBuZWNlc3Nhcnkgb25jZSB0aGUgd3JpdGUgbG9jayBoYXMgYmVlbgomIzQzOwkJCQkgKiBhY3F1aXJlZC4KJiM0MzsJCQkJICovCiYjNDM7CiYjNDM7CQkJCXdyaXRlX2xvY2tfaXJxKCZhbXA7Z3BjLSZndDtsb2NrKTsKJiM0MzsJCQkJaWYgKGdwYy0mZ3Q7dmFsaWQgJmFtcDsmYW1wOyAhaXNfZXJyb3Jfbm9zbG90X3BmbihncGMtJmd0O3BmbikgJmFtcDsmYW1wOwomIzQzOwkJCQkgICAgZ3BjLSZndDt1aHZhICZndDs9IHN0YXJ0ICZhbXA7JmFtcDsgZ3BjLSZndDt1aHZhICZsdDsgZW5kKQomIzQzOwkJCQkJZ3BjLSZndDt2YWxpZCA9IGZhbHNlOwomIzQzOwkJCQl3cml0ZV91bmxvY2tfaXJxKCZhbXA7Z3BjLSZndDtsb2NrKTsKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJfQogCQl9CiAKIAkJcmVhZF91bmxvY2tfaXJxKCZhbXA7Z3BjLSZndDtsb2NrKTsKIAl9CiYjNDM7CWlmICh3YWtlKQomIzQzOwkJa3ZtLSZndDtncGNfaW52YWxpZGF0ZV9zZXEmIzQzOyYjNDM7OwogCXNwaW5fdW5sb2NrKCZhbXA7a3ZtLSZndDtncGNfbG9jayk7CiB9CiAKQEAgLTEyNCw3ICYjNDM7MTMwLDggQEAgc3RhdGljIHZvaWQgZ3BjX3VubWFwKGt2bV9wZm5fdCBwZm4sIHZvaWQgKmtodmEpCiAjZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NlcSkKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxLAomIzQzOwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZ3BjX3NlcSkKIHsKIAkvKgogCSAqIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IGFjdHMgZm9yIGFsbCBpbnRlbnRzIGFuZCBwdXJwb3NlcwpAQCAtMTQ5LDcgJiM0MzsxNTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfcwogCSAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC4KIAkgKi8KIAlzbXBfcm1iKCk7Ci0JcmV0dXJuIGt2bS0mZ3Q7bW11X2ludmFsaWRhdGVfc2VxICE9IG1tdV9zZXE7CiYjNDM7CXJldHVybiBrdm0tJmd0O21tdV9pbnZhbGlkYXRlX3NlcSAhPSBtbXVfc2VxIHx8IGt2bS0mZ3Q7Z3BjX2ludmFsaWRhdGVfc2VxICE9IGdwY19zZXE7CiB9CiAKIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQpAQCAtMTU5LDYgJiM0MzsxNjYsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYykKIAlrdm1fcGZuX3QgbmV3X3BmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUOwogCXZvaWQgKm5ld19raHZhID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIG1tdV9zZXE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZ3BjX3NlcTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCXN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7CkBAIC0xODIsNiAmIzQzOzE5MCw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQogCiAJZG8gewogCQltbXVfc2VxID0gZ3BjLSZndDtrdm0tJmd0O21tdV9pbnZhbGlkYXRlX3NlcTsKJiM0MzsJCWdwY19zZXEgPSBncGMtJmd0O2t2bS0mZ3Q7Z3BjX2ludmFsaWRhdGVfc2VxOwogCQlzbXBfcm1iKCk7CiAKIAkJd3JpdGVfdW5sb2NrX2lycSgmYW1wO2dwYy0mZ3Q7bG9jayk7CkBAIC0yMzIsNyAmIzQzOzI0MSw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQogCQkgKiBhdHRlbXB0aW5nIHRvIHJlZnJlc2guCiAJCSAqLwogCQlXQVJOX09OX09OQ0UoZ3BjLSZndDt2YWxpZCk7Ci0JfSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy0mZ3Q7a3ZtLCBtbXVfc2VxKSk7CiYjNDM7CX0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtJmd0O2t2bSwgbW11X3NlcSwgZ3BjX3NlcSkpOwogCiAJZ3BjLSZndDt2YWxpZCA9IHRydWU7CiAJZ3BjLSZndDtwZm4gPSBuZXdfcGZuOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTEzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtWTSBQRk4gQ2FjaGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSwgYW5kIGl0JiMzOTtzIHRvdWNoaW5nIHNvbWUgY29yZSBLVk0gaW5mcmFzdHJ1Y3R1cmU6IGBpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhgIGFuZCBgdmlydC9rdm0vcGZuY2FjaGUuY2AuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBpbnRyb2R1Y2luZyB0aGlzIGBncGNfaW52YWxpZGF0ZV9zZXFgIGZpZWxkIGludG8gdGhlIGBzdHJ1Y3Qga3ZtYCBhbmQsIGZyb20gd2hhdCBJJiMzOTttIGdhdGhlcmluZywgaW5jcmVtZW50aW5nIGl0IGluIGBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnRgIHdoZW4gYHdha2VgIGlzIHRydWUuIFJpZ2h0LCBhbmQgSSBzZWUgaXQmIzM5O3MgYWxzbyBpbXBhY3RpbmcgYG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZWAgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIGBrdm0tJmd0O2dwY19pbnZhbGlkYXRlX3NlcSAhPSBncGNfc2VxYC4gVGhpcyBpcyBwcmV0dHkgY2xlYXJseSBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSBwZm5jYWNoZSBtZWNoYW5pc20gd2l0aGluIEtWTSwgbm90aGluZyBzdWJ0bGUgaGVyZS4KClNvLCB0aGUgbmV4dCBvYnZpb3VzIHN0ZXAgaXMgdG8gZGlnIGludG8gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIEtjb25maWcgb3B0aW9ucyBhcmUgcmVsZXZhbnQgdG8gdGhpcyBjaGFuZ2UgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgZW5hYmxlZCBjb3JyZWN0bHkuIFNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyBgdmlydC9rdm0vcGZuY2FjaGUuY2AsIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgS2NvbmZpZyBmb3IgdGhlIEtWTSBidWlsZCBvcHRpb25zLiBUaGVuLCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHNlZSB3aGF0IGZpbGVzIGFyZSBsaW5rZWQgd2hlcmUsIEkmIzM5O2xsIGBncmVwYCBmb3IgYHBmbmNhY2hlLm9gIGluIGB2aXJ0L2t2bS9NYWtlZmlsZWAuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBwaWVjZSBmaXRzIGludG8gdGhlIG92ZXJhbGwgS1ZNIGJ1aWxkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGZuY2FjaGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA1NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEtWTSBNYWtlZmlsZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgS1ZNIG1vZHVsZSBpcyBidWlsdCwgc28gdGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgdmlydC9rdm0vTWFrZWZpbGVgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgc2VjcmV0cyB0aGlzIGZpbGUgaG9sZHMuIEl0JiMzOTtzIHRoZSBjZW50cmFsIHBsYXlib29rIGZvciBob3cgdGhlIEtWTSBjb21wb25lbnRzIGFyZSBjb21waWxlZCBhbmQgbGlua2VkLCBzbyBpdCYjMzk7cyBhIGNyaXRpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGRlcGVuZGVuY3kgdHJlZSwgaW5jbHVkZSBwYXRocywgY29tcGlsYXRpb24gZmxhZ3MsIGFuZCBsaW5raW5nIHJ1bGVzIHRoYXQgZGVmaW5lIHRoZSBLVk0mIzM5O3MgYnVpbGQgcHJvY2Vzcy4gVGhpcyBmaWxlIHdpbGwgdGVsbCBtZSB3aGljaCBzb3VyY2UgZmlsZXMgYXJlIGludm9sdmVkLCB3aGljaCBvYmplY3QgZmlsZXMgdGhleSBnZW5lcmF0ZSwgYW5kIGhvdyB0aG9zZSBvYmplY3QgZmlsZXMgY29tZSB0b2dldGhlciB0byBjcmVhdGUgdGhlIGZpbmFsIEtWTSBtb2R1bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGZuY2FjaGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vTWFrZWZpbGUua3ZtPTEzPWt2bS0kKENPTkZJR19IQVZFX0tWTV9ESVJUWV9SSU5HKSAmIzQzOz0gJChLVk0pL2RpcnR5X3Jpbmcub1xudmlydC9rdm0vTWFrZWZpbGUua3ZtOjE0Omt2bS0kKENPTkZJR19IQVZFX0tWTV9QRk5DQUNIRSkgJiM0Mzs9ICQoS1ZNKS9wZm5jYWNoZS5vXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm0tMTUta3ZtLSQoQ09ORklHX0tWTV9HVUVTVF9NRU1GRCkgJiM0Mzs9ICQoS1ZNKS9ndWVzdF9tZW1mZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM5MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEtWTSBQRk4gQ2FjaGUgUmVxdWlyZW1lbnQqKgoKQWxyaWdodCwgc28gSSBzZWUgd2UgbmVlZCBgQ09ORklHX0hBVkVfS1ZNX1BGTkNBQ0hFYCDigJMgdGhhdCYjMzk7cyB0aGUga2V5LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgZnJvbSBhbiBhcmNoaXRlY3R1cmFsIHBlcnNwZWN0aXZlLCBpcyB0byB0cmFjZSBiYWNrIHRoZSBlbmFibGluZyBjb25kaXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHByZWNpc2VseSBmbGlwcyB0aGF0IHN3aXRjaCwgd2hhdCBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMgdHJpZ2dlciB0aGUgc2V0dGluZyBvZiBgSEFWRV9LVk1fUEZOQ0FDSEVgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gdG8gdW5kZXJzdGFuZCB3aHkgaXQmIzM5O3MgcmVxdWlyZWQgaW4gdGhpcyBzcGVjaWZpYyBzY2VuYXJpbyBhbmQgaWRlbnRpZnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBvcHRpbWl6YXRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgdGVsbHMgdXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEhBVkVfS1ZNX1BGTkNBQ0hFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1fWDg2XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjUtXHRzZWxlY3QgSEFWRV9LVk1fSVJRQ0hJUFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjY6XHRzZWxlY3QgSEFWRV9LVk1fUEZOQ0FDSEVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTI3LVx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfVFNPXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcwNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDExOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gdGhlIGBLVk1fWDg2YCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBjbGVhcmx5IHdoYXQmIzM5O3MgZHJpdmluZyB0aGlzLiBCdXQgaXMgdGhhdCBpdD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBLVk1gIGl0c2VsZiBpc24mIzM5O3Qgc3VmZmljaWVudC4gTXkgaW5pdGlhbCBjaGVjayBwb2ludHMgdG8gYENPTkZJR19LVk1gIGFzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gZmxhZyB0byBiZSBjb25jZXJuZWQgd2l0aC4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBhZmZlY3RlZCBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gdGhlc2UgZnVuY3Rpb25zOiBgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0YCwgYGh2YV90b19wZm5fcmV0cnlgICh3aGljaCwgaW50ZXJlc3RpbmdseSwgaXMgZGVmaW5lZCBhcyBgc3RhdGljYCksIGFuZCBgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlYCAod2hpY2ggaXMgYHN0YXRpYyBpbmxpbmVgKS4gVGhlIGZhY3QgdGhhdCBgaHZhX3RvX3Bmbl9yZXRyeWAgYW5kIGBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGVgIGFyZSBzdGF0aWMgc3VnZ2VzdHMgdGhleSBtYXkgaGF2ZSBiZWVuIGlubGluZWQsIG9yIGFyZSBsb2NhbCB0byB0aGUgY29kZSB3aGVyZSB0aGV5IGFyZSB1c2VkLgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIG5vdyBpcywgd2hhdCBhcmUgdGhlICpub24tc3RhdGljKiBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGluZyBgaHZhX3RvX3Bmbl9yZXRyeWA/IFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgaW1wYWN0IGxpZXMsIGFuZCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGxhcmdlciBjb250ZXh0IGluIHdoaWNoIHRoaXMgYHJldHJ5YCBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIGludm9rZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgKnJlbHlpbmcqIG9uIHRoZSBjaGFuZ2VzIGluc2lkZSB0aGUgYGh2YV90b19wZm5fcmV0cnlgIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodmFfdG9fcGZuX3JldHJ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vcGZuY2FjaGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9wZm5jYWNoZS5jPTEzMz1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxLFxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtMTYxLVxudmlydC9rdm0vcGZuY2FjaGUuYzoxNjI6c3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTE2My17XG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYz0yNjU9c3RhdGljIGludCBfX2t2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSlcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMzMC1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzMxOlx0LyogTm90ZTogdGhlIG9mZnNldCBtdXN0IGJlIGNvcnJlY3QgYmVmb3JlIGNhbGxpbmcgaHZhX3RvX3Bmbl9yZXRyeSgpICovXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMzMi1cdGdwYy1cdTAwM2V1aHZhICYjNDM7PSBwYWdlX29mZnNldDtcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMzOC1cdGlmICghZ3BjLVx1MDAzZXZhbGlkIHx8IGh2YV9jaGFuZ2UpIHtcbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzM5Olx0XHRyZXQgPSBodmFfdG9fcGZuX3JldHJ5KGdwYyk7XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM0MC1cdH0gZWxzZSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MDkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqVHJhY2luZyB0aGUgQ2FsbCBQYXRoIG9mIGBfX2t2bV9ncGNfcmVmcmVzaGAqKgoKT2theSwgc28gYF9fa3ZtX2dwY19yZWZyZXNoYCBpcyB0aGUgdGFyZ2V0LCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHVwc3RyZWFtIGNhbGxlcihzKS4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdGFzay4gSSBrbm93IGVub3VnaCBhYm91dCB0aGUgS1ZNIGludGVybmFscyB0byByZWNvZ25pemUgdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIGhhdmUgYSBnZW5lcmFsIGlkZWEgb2YgaXRzIHB1cnBvc2Ug4oCTIHNvbWV0aGluZyByZWxhdGVkIHRvIGdsb2JhbCBwYWdlIGNhY2hlIHJlZnJlc2gsIEkmIzM5O2QgZ3Vlc3MuIE5vdyBJIG5lZWQgdG8ga25vdyB0aGUgaW1tZWRpYXRlICYjMzQ7cGFyZW50JiMzNDsgb3IgY2FsbGVyLiBUaGUgcXVlc3Rpb24gbm93IGlzOiBXaGF0IGNvZGUgcGF0aCB1bHRpbWF0ZWx5IGxlYWRzIHRvIHRoZSBleGVjdXRpb24gb2YgYF9fa3ZtX2dwY19yZWZyZXNoYD8gSSBuZWVkIHRvIHVzZSBkZWJ1Z2dpbmcgdG9vbHMsIG9yIHBvc3NpYmx5IGRlbHZlIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIHN0YXJ0IHRyYWNpbmcgdGhlIGZ1bmN0aW9uIGNhbGxzIHRoYXQgbGVhZCB0byB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2t2bV9ncGNfcmVmcmVzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL3BmbmNhY2hlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vcGZuY2FjaGUuYz0xNjI9c3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYy0yNjQtXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjI2NTpzdGF0aWMgaW50IF9fa3ZtX2dwY19yZWZyZXNoKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhKVxudmlydC9rdm0vcGZuY2FjaGUuYy0yNjYte1xuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM9Mzc1PWludCBrdm1fZ3BjX3JlZnJlc2goc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgdW5zaWduZWQgbG9uZyBsZW4pXG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYy0zOTAtXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjM5MTpcdHJldHVybiBfX2t2bV9ncGNfcmVmcmVzaChncGMsIGdwYy1cdTAwM2VncGEsIHVodmEpO1xudmlydC9rdm0vcGZuY2FjaGUuYy0zOTItfVxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM9NDA2PXN0YXRpYyBpbnQgX19rdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhLFxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDMyLVx0fVxudmlydC9rdm0vcGZuY2FjaGUuYzo0MzM6XHRyZXR1cm4gX19rdm1fZ3BjX3JlZnJlc2goZ3BjLCBncGEsIHVodmEpO1xudmlydC9rdm0vcGZuY2FjaGUuYy00MzQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTMxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0LWxldmVsIHVuZGVyc3RhbmRpbmc6CgoqKkFuYWx5emluZyBLVk0gR3JhcGhpY3MgUHJvY2Vzc29yIENvbnRleHQgQWN0aXZhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtaW5kIGlzIGNpcmNsaW5nIGFyb3VuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGt2bV9ncGNfcmVmcmVzaGAgYW5kIGBfX2t2bV9ncGNfYWN0aXZhdGVgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgX19rdm1fZ3BjX2FjdGl2YXRlYCBwbGF5cyBhIGtleSByb2xlLCBhbmQgSSYjMzk7bSBiZXR0aW5nIHRoYXQgYGt2bV9ncGNfYWN0aXZhdGVgIGl0c2VsZiBwcm9iYWJseSBjYWxscyBpdC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb24gYW5kIG9yZGVyLiBUaGUgcmVmcmVzaCBpcyBpbXBvcnRhbnQsIGJ1dCBjbGVhcmx5LCB0aGUgYWN0aXZhdGlvbiBpcyB0aGUgY29yZSBwcm9jZXNzIEkgbmVlZCB0byB1bmRlcnN0YW5kLCB3aXRoIHRoZSBkb3VibGUgdW5kZXJzY29yZSBmdW5jdGlvbiBiZWluZyB0aGUgZnVuZGFtZW50YWwgY2FsbC4gSSB3aWxsIHRyYWNlIHRoZSBjYWxsIHN0YWNrIG5vdyBhbmQgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBJIGhhdmUgdG8gc2VlIGhvdyBhbmQgd2hlbiB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBhbmQgd2hhdCB0aGUgc3RhdGUgYmVmb3JlIGFuZCBhZnRlciB0aGV5IHJ1biBpcy4gVGhhdCBzaG91bGQgaGVscCB0byByZXNvbHZlIG15IGN1cnJlbnQgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19rdm1fZ3BjX2FjdGl2YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vcGZuY2FjaGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9wZm5jYWNoZS5jPTM5ND12b2lkIGt2bV9ncGNfaW5pdChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBzdHJ1Y3Qga3ZtICprdm0pXG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYy00MDUtXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjQwNjpzdGF0aWMgaW50IF9fa3ZtX2dwY19hY3RpdmF0ZShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDA3LVx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgbGVuKVxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM9NDM2PWludCBrdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBsZW4pXG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYy00NDQtXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjQ0NTpcdHJldHVybiBfX2t2bV9ncGNfYWN0aXZhdGUoZ3BjLCBncGEsIEtWTV9IVkFfRVJSX0JBRCwgbGVuKTtcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDQ2LX1cbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTQ0OD1pbnQga3ZtX2dwY19hY3RpdmF0ZV9odmEoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgdW5zaWduZWQgbG9uZyB1aHZhLCB1bnNpZ25lZCBsb25nIGxlbilcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ1Mi1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDUzOlx0cmV0dXJuIF9fa3ZtX2dwY19hY3RpdmF0ZShncGMsIElOVkFMSURfR1BBLCB1aHZhLCBsZW4pO1xudmlydC9rdm0vcGZuY2FjaGUuYy00NTQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODEwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gRnVuY3Rpb24gTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW52b2x2ZWQgaGVyZTogYGdmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydGAsIGBrdm1fZ3BjX3JlZnJlc2hgLCBga3ZtX2dwY19hY3RpdmF0ZWAsIGFuZCBga3ZtX2dwY19hY3RpdmF0ZV9odmFgLiBSaWdodCwgY29uZmlybWluZyB0aGF0IHRoZXkmIzM5O3JlIEtWTS1zcGVjaWZpYyBpcyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuIFllcCwgdGhleSBhcmUuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIHRvdWNoaW5nIGBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnRgIGFuZCBgaHZhX3RvX3Bmbl9yZXRyeWAsIHNvIEkgc2hvdWxkIHByaW9yaXRpemUgdGhvc2Ugc3BlY2lmaWNhbGx5LCBhbG9uZyB3aXRoIHRoZSBvdGhlcnMuIE5vdywgSSB3YW50IHRvIHNlZSB3aGVyZSBgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0YCBpcyBhY3R1YWxseSAqY2FsbGVkKiBmcm9tIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gVW5kZXJzdGFuZGluZyBpdHMgdXNhZ2UgaXMga2V5IHRvIGFzc2Vzc2luZyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9NzIxPXN0YXRpYyBpbnQga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNzU3LVx0ICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjc1ODpcdGdmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydChrdm0sIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQpO1xudmlydC9rdm0va3ZtX21haW4uYy03NTktXG4tLVxudmlydC9rdm0va3ZtX21tLmg9NTk9a3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApO1xuLS1cbnZpcnQva3ZtL2t2bV9tbS5oLTYxLSNpZmRlZiBDT05GSUdfSEFWRV9LVk1fUEZOQ0FDSEVcbnZpcnQva3ZtL2t2bV9tbS5oOjYyOnZvaWQgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBrdm0gKmt2bSxcbnZpcnQva3ZtL2t2bV9tbS5oLTYzLVx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxudmlydC9rdm0va3ZtX21tLmgtNjUtI2Vsc2VcbnZpcnQva3ZtL2t2bV9tbS5oOjY2OnN0YXRpYyBpbmxpbmUgdm9pZCBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGt2bSAqa3ZtLFxudmlydC9rdm0va3ZtX21tLmgtNjctXHRcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtMjQtICovXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjI1OnZvaWQgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMjYtXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBlbmQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NjUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIE1NVSBJbnZhbGlkYXRpb24qKgoKUmlnaHQsIHNvIHRoaXMgaXMgY2FsbGVkIGZyb20gYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydGAuIFRoYXQgdGVsbHMgbWUgaW1tZWRpYXRlbHkgdGhhdCB0aGUgZm9jdXMgaXMgb24gYSBNTVUgbm90aWZpZXIgY2FsbGJhY2ssIHNwZWNpZmljYWxseSB0aGUgYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydGAgZnVuY3Rpb24uIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBhIGtleSBjb250ZXh0LiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBhIHJhbmdlIGludmFsaWRhdGlvbiBvcGVyYXRpb24gcmVsYXRlZCB0byB0aGUgS1ZNIE1NVS4gSXQmIzM5O3MgdGhlIGJlZ2lubmluZyBvZiBhIHByb2Nlc3MuCgpOb3csIG15IG1pbmQgc2hpZnRzIHRvIGBrdm1fZ3BjX3JlZnJlc2hgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGt2bV9ncGNfcmVmcmVzaGAgbWlnaHQgcmVsYXRlIHRvIHRoaXMgTU1VIGludmFsaWRhdGlvbiBwcm9jZXNzLiBJcyBpdCBjYWxsZWQgYmVmb3JlLCBhZnRlciwgZHVyaW5nLCBvciBpbmRlcGVuZGVudGx5PyBEb2VzIHRoZSBNTVUgaW52YWxpZGF0aW9uIHRyaWdnZXIgdGhlIHJlZnJlc2gsIG9yIGlzIHRoZXJlIHNvbWUgb3RoZXIgY29ubmVjdGlvbiBJIG5lZWQgdG8gZXhwbG9yZT8gVGhpbmtpbmcgYWJvdXQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIGRldGVybWluZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2dwY19yZWZyZXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYz0zMjQyPXN0YXRpYyB2b2lkIGt2bV9zZXR1cF9ndWVzdF9wdmNsb2NrKHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvICpyZWZfaHZfY2xvY2ssXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTMyNTYtXG5hcmNoL3g4Ni9rdm0veDg2LmM6MzI1NzpcdFx0aWYgKGt2bV9ncGNfcmVmcmVzaChncGMsIG9mZnNldCAmIzQzOyBzaXplb2YoKmd1ZXN0X2h2X2Nsb2NrKSkpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMzI1OC1cdFx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTM4PXN0YXRpYyBpbnQga3ZtX3hlbl9zaGFyZWRfaW5mb19pbml0KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtNTEtXG5hcmNoL3g4Ni9rdm0veGVuLmM6NTI6XHRcdHJldCA9IGt2bV9ncGNfcmVmcmVzaChncGMsIFBBR0VfU0laRSk7XG5hcmNoL3g4Ni9rdm0veGVuLmMtNTMtXHRcdGlmIChyZXQpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTE1Mz1zdGF0aWMgaW50IHhlbl9nZXRfZ3Vlc3RfcHZjbG9jayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTE2NC1cbmFyY2gveDg2L2t2bS94ZW4uYzoxNjU6XHRcdHIgPSBrdm1fZ3BjX3JlZnJlc2goZ3BjLCBvZmZzZXQgJiM0Mzsgc2l6ZW9mKCpodl9jbG9jaykpO1xuYXJjaC94ODYva3ZtL3hlbi5jLTE2Ni1cdFx0aWYgKHIpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTMyMT1zdGF0aWMgdm9pZCBrdm1feGVuX3VwZGF0ZV9ydW5zdGF0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIGJvb2wgYXRvbWljKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy00MzgtXG5hcmNoL3g4Ni9rdm0veGVuLmM6NDM5Olx0XHRpZiAoa3ZtX2dwY19yZWZyZXNoKGdwYzEsIHVzZXJfbGVuMSkpXG5hcmNoL3g4Ni9rdm0veGVuLmMtNDQwLVx0XHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9NjM5PXZvaWQga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2KVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy02NTYtXG5hcmNoL3g4Ni9rdm0veGVuLmM6NjU3Olx0XHRpZiAoa3ZtX2dwY19yZWZyZXNoKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSlcbmFyY2gveDg2L2t2bS94ZW4uYy02NTgtXHRcdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uYz02OTc9aW50IF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdilcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzMwLVxuYXJjaC94ODYva3ZtL3hlbi5jOjczMTpcdFx0aWYgKGt2bV9ncGNfcmVmcmVzaChncGMsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSkpIHtcbmFyY2gveDg2L2t2bS94ZW4uYy03MzItXHRcdFx0Lypcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTkwMT1zdGF0aWMgaW50IGt2bV94ZW5fc2V0X2V2dGNobihzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTE5NDQtXHRcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbmFyY2gveDg2L2t2bS94ZW4uYzoxOTQ1Olx0XHRyYyA9IGt2bV9ncGNfcmVmcmVzaChncGMsIFBBR0VfU0laRSk7XG5hcmNoL3g4Ni9rdm0veGVuLmMtMTk0Ni1cdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc3JjdSwgaWR4KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTQ5Mj1ib29sIGt2bV9ncGNfY2hlY2soc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgdW5zaWduZWQgbG9uZyBsZW4pO1xuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNDk0LS8qKlxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE0OTU6ICoga3ZtX2dwY19yZWZyZXNoIC0gdXBkYXRlIGEgcHJldmlvdXNseSBpbml0aWFsaXplZCBjYWNoZS5cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNDk2LSAqXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE1MDktICovXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTUxMDppbnQga3ZtX2dwY19yZWZyZXNoKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHVuc2lnbmVkIGxvbmcgbGVuKTtcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNTExLVxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM9MTYyPXN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtMjY0LVxudmlydC9rdm0vcGZuY2FjaGUuYzoyNjU6c3RhdGljIGludCBfX2t2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSlcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMjY2LXtcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM3NC1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6Mzc1OmludCBrdm1fZ3BjX3JlZnJlc2goc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgdW5zaWduZWQgbG9uZyBsZW4pXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM3Ni17XG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYy0zOTAtXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjM5MTpcdHJldHVybiBfX2t2bV9ncGNfcmVmcmVzaChncGMsIGdwYy1cdTAwM2VncGEsIHVodmEpO1xudmlydC9rdm0vcGZuY2FjaGUuYy0zOTItfVxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM9NDA2PXN0YXRpYyBpbnQgX19rdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhLFxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDMyLVx0fVxudmlydC9rdm0vcGZuY2FjaGUuYzo0MzM6XHRyZXR1cm4gX19rdm1fZ3BjX3JlZnJlc2goZ3BjLCBncGEsIHVodmEpO1xudmlydC9rdm0vcGZuY2FjaGUuYy00MzQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDk5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIEtWTSBhbmQgR1BDIFJlZnJlc2gqKgoKT2theSwgc28gYGt2bV9ncGNfcmVmcmVzaGAuIEkgc2VlIHRoaXMgZnVuY3Rpb24gY2FsbCBpcyB1c2VkIGluIGJvdGggYGFyY2gveDg2L2t2bS94ODYuY2AgYW5kIGBhcmNoL3g4Ni9rdm0veGVuLmNgLiBUaGF0JiMzOTtzIGEgZGVjZW50IHN0YXJ0OyBpdCB0ZWxscyBtZSB0aGUgc2NvcGUgb2YgaXRzIHVzYWdlLCBpbW1lZGlhdGVseSBuYXJyb3dpbmcgZG93biB0aGUgYXJlYSBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGl0JiMzOTtzIHJlbGV2YW50IGluIGJvdGggdGhlIHN0YW5kYXJkIHg4NiBLVk0gY29udGV4dCBhbmQsIGludGVyZXN0aW5nbHksIHdpdGhpbiB0aGUgWGVuIGludGVncmF0aW9uLiBUaGF0IG1pZ2h0IHBvaW50IHRvIHNvbWV0aGluZyBhcmNoaXRlY3R1cmFsbHkgc2lnbmlmaWNhbnQgb3IgcGVyaGFwcyBqdXN0IGEgc2hhcmVkIG5lZWQgYWNyb3NzIHRob3NlIHR3byBtb2Rlcy4KCk5vdywgYmVmb3JlIEkgZGlnIGZ1cnRoZXIgaW50byBga3ZtX2dwY19yZWZyZXNoYCBpdHNlbGYsIEkgdGhpbmsgSSYjMzk7bGwgcGl2b3Qgc2xpZ2h0bHkuIFNpbmNlIGByZWZyZXNoYCBvZnRlbiBpbXBsaWVzIGFuIGFjdGl2YXRpb24gb3IgdXBkYXRlIHByb2Nlc3MsIGl0IG1ha2VzIHNlbnNlIHRvIGxvb2sgZm9yIHdoZXJlIHRoaXMgR1BDIGlzICphY3RpdmF0ZWQqIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhlcmVmb3JlLCBJIHNob3VsZCBjaGVjayBvdXQgYGt2bV9ncGNfYWN0aXZhdGVgLiBUaGF0IG1pZ2h0IGdpdmUgbWUgc29tZSBjb250ZXh0IGFib3V0IHdoYXQmIzM5O3MgYmVpbmcgcmVmcmVzaGVkIGluIHRoZSBmaXJzdCBwbGFjZS4gSXQgY291bGQgYmUgYW4gaW5pdGlhbGl6YXRpb24sIGVuYWJsaW5nLCBvciBwZXJoYXBzIGEgZGlmZmVyZW50IGNvbnRyb2wgbWVjaGFuaXNtIGVudGlyZWx5LCBhbmQga25vd2luZyB0aGUgYWN0aXZhdGlvbiBjb250ZXh0IHdpbGwgZ3JlYXRseSBoZWxwIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlZnJlc2ggZnVuY3Rpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgYnJvYWRlciBwaWN0dXJlIGJlZm9yZSBJIGdldCBib2dnZWQgZG93biBpbiB0aGUgcmVmcmVzaCBkZXRhaWxzIHRoZW1zZWx2ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9ncGNfYWN0aXZhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTI0Mjg9c3RhdGljIHZvaWQga3ZtX3dyaXRlX3N5c3RlbV90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3Qgc3lzdGVtX3RpbWUsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTI0NDQtXHRpZiAoc3lzdGVtX3RpbWUgXHUwMDI2IDEpXG5hcmNoL3g4Ni9rdm0veDg2LmM6MjQ0NTpcdFx0a3ZtX2dwY19hY3RpdmF0ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gucHZfdGltZSwgc3lzdGVtX3RpbWUgXHUwMDI2IH4xVUxMLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTI0NDYtXHRcdFx0XHQgc2l6ZW9mKHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvKSk7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTMyMT1zdGF0aWMgdm9pZCBrdm1feGVuX3VwZGF0ZV9ydW5zdGF0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIGJvb2wgYXRvbWljKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy00ODUtXHRcdFx0LypcbmFyY2gveDg2L2t2bS94ZW4uYzo0ODY6XHRcdFx0ICogVXNlIGt2bV9ncGNfYWN0aXZhdGUoKSBoZXJlIGJlY2F1c2UgaWYgdGhlIHJ1bnN0YXRlXG5hcmNoL3g4Ni9rdm0veGVuLmMtNDg3LVx0XHRcdCAqIGFyZWEgd2FzIGNvbmZpZ3VyZWQgaW4gMzItYml0IG1vZGUgYW5kIG9ubHkgZXh0ZW5kc1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy00OTAtXHRcdFx0ICovXG5hcmNoL3g4Ni9rdm0veGVuLmM6NDkxOlx0XHRcdGlmIChrdm1fZ3BjX2FjdGl2YXRlKGdwYzIsIGdwYzEtXHUwMDNlZ3BhICYjNDM7IHVzZXJfbGVuMSxcbmFyY2gveDg2L2t2bS94ZW4uYy00OTItXHRcdFx0XHRcdCAgICAgdXNlcl9sZW4yKSlcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9NzQ2PWludCBrdm1feGVuX2h2bV9zZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy03ODUtXHRcdFx0fSBlbHNlIHtcbmFyY2gveDg2L2t2bS94ZW4uYzo3ODY6XHRcdFx0XHRyID0ga3ZtX2dwY19hY3RpdmF0ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlLFxuYXJjaC94ODYva3ZtL3hlbi5jLTc4Ny1cdFx0XHRcdFx0XHQgICAgIGdmbl90b19ncGEoZ2ZuKSwgUEFHRV9TSVpFKTtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzk3LVx0XHRcdH0gZWxzZSB7XG5hcmNoL3g4Ni9rdm0veGVuLmM6Nzk4Olx0XHRcdFx0ciA9IGt2bV9ncGNfYWN0aXZhdGVfaHZhKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGUsXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzk5LVx0XHRcdFx0XHRcdFx0ICh1bnNpZ25lZCBsb25nKWh2YSwgUEFHRV9TSVpFKTtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9OTA2PWludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTkyOC1cbmFyY2gveDg2L2t2bS94ZW4uYzo5Mjk6XHRcdFx0ciA9IGt2bV9ncGNfYWN0aXZhdGUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnhlbi52Y3B1X2luZm9fY2FjaGUsXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTMwLVx0XHRcdFx0XHQgICAgIGRhdGEtXHUwMDNldS5ncGEsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSk7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTkzNy1cbmFyY2gveDg2L2t2bS94ZW4uYzo5Mzg6XHRcdFx0ciA9IGt2bV9ncGNfYWN0aXZhdGVfaHZhKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC54ZW4udmNwdV9pbmZvX2NhY2hlLFxuYXJjaC94ODYva3ZtL3hlbi5jLTkzOS1cdFx0XHRcdFx0XHQgZGF0YS1cdTAwM2V1Lmh2YSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTUzLVxuYXJjaC94ODYva3ZtL3hlbi5jOjk1NDpcdFx0ciA9IGt2bV9ncGNfYWN0aXZhdGUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnhlbi52Y3B1X3RpbWVfaW5mb19jYWNoZSxcbmFyY2gveDg2L2t2bS94ZW4uYy05NTUtXHRcdFx0XHQgICAgIGRhdGEtXHUwMDNldS5ncGEsXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTk4Ny1cdFx0c3oxID0gUEFHRV9TSVpFIC0gKGRhdGEtXHUwMDNldS5ncGEgXHUwMDI2IH5QQUdFX01BU0spO1xuYXJjaC94ODYva3ZtL3hlbi5jOjk4ODpcdFx0ciA9IGt2bV9ncGNfYWN0aXZhdGUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnhlbi5ydW5zdGF0ZV9jYWNoZSxcbmFyY2gveDg2L2t2bS94ZW4uYy05ODktXHRcdFx0XHQgICAgIGRhdGEtXHUwMDNldS5ncGEsIHN6MSk7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTk5OC1cdFx0XHRCVUdfT04oKGRhdGEtXHUwMDNldS5ncGEgJiM0Mzsgc3oxKSBcdTAwMjYgflBBR0VfTUFTSyk7XG5hcmNoL3g4Ni9rdm0veGVuLmM6OTk5Olx0XHRcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC54ZW4ucnVuc3RhdGUyX2NhY2hlLFxuYXJjaC94ODYva3ZtL3hlbi5jLTEwMDAtXHRcdFx0XHRcdCAgICAgZGF0YS1cdTAwM2V1LmdwYSAmIzQzOyBzejEsIHN6Mik7XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTE0NDA9dm9pZCBrdm1fZ3BjX2luaXQoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgc3RydWN0IGt2bSAqa3ZtKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ0Mi0vKipcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxNDQzOiAqIGt2bV9ncGNfYWN0aXZhdGUgLSBwcmVwYXJlIGEgY2FjaGVkIGtlcm5lbCBtYXBwaW5nIGFuZCBIUEEgZm9yIGEgZ2l2ZW4gZ3Vlc3RcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNDQ0LSAqICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBhZGRyZXNzLlxuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNDU3LSAqL1xuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE0NTg6aW50IGt2bV9ncGNfYWN0aXZhdGUoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGxlbik7XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ1OS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNDYwLS8qKlxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE0NjE6ICoga3ZtX2dwY19hY3RpdmF0ZV9odmEgLSBwcmVwYXJlIGEgY2FjaGVkIGtlcm5lbCBtYXBwaW5nIGFuZCBIUEEgZm9yIGEgZ2l2ZW4gSFZBLlxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE0NjItICpcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ3MC0gKlxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE0NzE6ICogVGhlIHNlbWFudGljcyBvZiB0aGlzIGZ1bmN0aW9uIGFyZSB0aGUgc2FtZSBhcyB0aG9zZSBvZiBrdm1fZ3BjX2FjdGl2YXRlKCkuIEl0XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ3Mi0gKiBtZXJlbHkgYnlwYXNzZXMgYSBsYXllciBvZiBhZGRyZXNzIHRyYW5zbGF0aW9uLlxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE0NzMtICovXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTQ3NDppbnQga3ZtX2dwY19hY3RpdmF0ZV9odmEoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgdW5zaWduZWQgbG9uZyBodmEsIHVuc2lnbmVkIGxvbmcgbGVuKTtcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNDc1LVxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM9Mzk0PXZvaWQga3ZtX2dwY19pbml0KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHN0cnVjdCBrdm0gKmt2bSlcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQwNS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDA2OnN0YXRpYyBpbnQgX19rdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhLFxudmlydC9rdm0vcGZuY2FjaGUuYy00MDctXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4pXG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYy00MzUtXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjQzNjppbnQga3ZtX2dwY19hY3RpdmF0ZShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgbGVuKVxudmlydC9rdm0vcGZuY2FjaGUuYy00Mzcte1xuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDQ0LVxudmlydC9rdm0vcGZuY2FjaGUuYzo0NDU6XHRyZXR1cm4gX19rdm1fZ3BjX2FjdGl2YXRlKGdwYywgZ3BhLCBLVk1fSFZBX0VSUl9CQUQsIGxlbik7XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ0Ni19XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ0Ny1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDQ4OmludCBrdm1fZ3BjX2FjdGl2YXRlX2h2YShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCB1bnNpZ25lZCBsb25nIHVodmEsIHVuc2lnbmVkIGxvbmcgbGVuKVxudmlydC9rdm0vcGZuY2FjaGUuYy00NDkte1xuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDUyLVxudmlydC9rdm0vcGZuY2FjaGUuYzo0NTM6XHRyZXR1cm4gX19rdm1fZ3BjX2FjdGl2YXRlKGdwYywgSU5WQUxJRF9HUEEsIHVodmEsIGxlbik7XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ1NC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDM3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGluaXRpYWwgc2NhbiBwb2ludHMgbWUgdG93YXJkIGBrdm1fZ3BjX2FjdGl2YXRlYCBhbmQgYGt2bV9ncGNfYWN0aXZhdGVfaHZhYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXJjaC94ODYva3ZtL3hlbi5jYCBhbmQgYGFyY2gveDg2L2t2bS94ODYuY2AuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBmdXp6aW5nLCBnaXZlbiB0aGVpciByb2xlcyBpbiB0aGUgS1ZNIGFyY2hpdGVjdHVyZS4gIEkgc2hvdWxkIGFsc28gYWRkIGBrdm1fZ3BjX3JlZnJlc2hgIHRvIHRoZSBsaXN0OyBpdCBsaWtlbHkgaGFuZGxlcyByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuICBGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIGxvb2sgaW50byBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0YCBhbmQgdHJhY2UgaXQgdG8gaXRzIGNhbGwgdG8gYGdmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydGAuIFRoYXQgY291bGQgYmUgYSBrZXkgYXJlYSBmb3IgdnVsbmVyYWJpbGl0aWVzLgoKTm93LCBsZXQmIzM5O3MgcXVpY2tseSBjaGVjayBpZiBga3ZtX2dwY19hY3RpdmF0ZWAgaXMgZXhwb3J0ZWQsIG1ha2luZyBpdCBhY2Nlc3NpYmxlIGZvciBleHRlcm5hbCBjYWxscy4gWWVwLCBJIHNlZSBpdCYjMzk7cyBkZWZpbmVkIGFuZCBleHBvcnRlZCBpbiBgdmlydC9rdm0vcGZuY2FjaGUuY2AuIEV4Y2VsbGVudCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MX0dQTFxcKGt2bV9ncGNfYWN0aXZhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ2NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLVk0gUEZOIENhY2hlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTSBQRk4gY2FjaGUgd29ya3MsIGFuZCB0aGF0IG1lYW5zIHN0YXJ0aW5nIGF0IHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGBFWFBPUlRfU1lNQk9MYCB3aXRoaW4gYHZpcnQva3ZtL3BmbmNhY2hlLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBleHBvc2VkLCBhbmQgd2h5LiBJJiMzOTttIGd1ZXNzaW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSBzb3J0IG9mIGludGVyZmFjZSBmb3Igb3RoZXIgS1ZNIGNvbXBvbmVudHMgb3IgcG9zc2libHkgZXZlbiBleHRlcm5hbCBtb2R1bGVzIHRvIGludGVyYWN0IHdpdGggdGhlIFBGTiBjYWNoZS4gTGV0IG1lIHNlZSB3aGF0IEkgY2FuIGZpbmQuIEl0IG1pZ2h0IGV4cG9zZSBob29rcyBmb3IgcGFnZSBpbnZhbGlkYXRpb24sIFBGTiBhbGxvY2F0aW9uLCBvciBjYWNoZSBtYW5hZ2VtZW50LiBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIHBvdGVudGlhbCBmb3IgaW50ZXItbW9kdWxlIGRlcGVuZGVuY2llcyBoZXJlLCBhbmQgdGhlIHVzZSBvZiBgRVhQT1JUX1NZTUJPTGAgaXMgYSBrZXkgaW5kaWNhdG9yIG9mIHRob3NlIGR5bmFtaWNzLiBUaGlzIGNvdWxkIGhhdmUgc29tZSBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucy4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MX0dQTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL3BmbmNhY2hlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjczOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLVk0gUEZOIENhY2hlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTSBQRk4gY2FjaGUgd29ya3MsIGFuZCB0aGF0IG1lYW5zIHN0YXJ0aW5nIGF0IHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGBFWFBPUlRfU1lNQk9MYCB3aXRoaW4gYHZpcnQva3ZtL3BmbmNhY2hlLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBleHBvc2VkLCBhbmQgd2h5LiBJJiMzOTttIGd1ZXNzaW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSBzb3J0IG9mIGludGVyZmFjZSBmb3Igb3RoZXIgS1ZNIGNvbXBvbmVudHMgb3IgcG9zc2libHkgZXZlbiBleHRlcm5hbCBtb2R1bGVzIHRvIGludGVyYWN0IHdpdGggdGhlIFBGTiBjYWNoZS4gTGV0IG1lIHNlZSB3aGF0IEkgY2FuIGZpbmQuIEl0IG1pZ2h0IGV4cG9zZSBob29rcyBmb3IgcGFnZSBpbnZhbGlkYXRpb24sIFBGTiBhbGxvY2F0aW9uLCBvciBjYWNoZSBtYW5hZ2VtZW50LiBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIHBvdGVudGlhbCBmb3IgaW50ZXItbW9kdWxlIGRlcGVuZGVuY2llcyBoZXJlLCBhbmQgdGhlIHVzZSBvZiBgRVhQT1JUX1NZTUJPTGAgaXMgYSBrZXkgaW5kaWNhdG9yIG9mIHRob3NlIGR5bmFtaWNzLiBUaGlzIGNvdWxkIGhhdmUgc29tZSBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucy4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vcGZuY2FjaGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDExCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gUEZOIENhY2hlIFN5bWJvbCBVc2FnZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHZpcnQva3ZtL3BmbmNhY2hlLmNgLiBJIGltbWVkaWF0ZWx5IHNlZSBpdCYjMzk7cyBjb21waWxlZCBkaXJlY3RseSBpbnRvIGBrdm0ua29gLiAgVGhhdCBtZWFucyBpdCBkb2VzbiYjMzk7dCAqbmVlZCogdG8gZXhwb3J0IHN5bWJvbHMgc2luY2UgaXRzIHByaW1hcnkgY29uc3VtZXIsIGBhcmNoL3g4Ni9rdm0veDg2LmNgLCBpcyBhbHNvIHBhcnQgb2YgdGhhdCBzYW1lIG1vZHVsZS4gIEVmZmljaWVuY3ksIGFsd2F5cyBhIGdvb2QgdGhpbmcuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMuIEkmIzM5O3ZlIGdvdDoKCiogICBga3ZtX2dwY19yZWZyZXNoYAoqICAgYGt2bV9ncGNfYWN0aXZhdGVgCiogICBga3ZtX2dwY19hY3RpdmF0ZV9odmFgCiogICBgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0YAoKQW55dGhpbmcgZWxzZT8gVGhlIGNvZGUgYWxzbyByZWZlcmVuY2VzIGBodmFfdG9fcGZuX3JldHJ5YCwgYnV0IHRoYXQmIzM5O3MgYHN0YXRpY2AsIHNvIGl0JiMzOTtzIG5vdCBkaXJlY3RseSB2aXNpYmxlIGZyb20gb3V0c2lkZS4gIEZvY3VzaW5nIG9uIHRoZSBleHBvc2VkIHN0dWZmLCBgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0YCBpcyB0aGUgb25seSBub24tc3RhdGljIGZ1bmN0aW9uIGhlcmUuCgpJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gIGBrdm1fZ3BjX3JlZnJlc2hgIGNhbGxzIGBfX2t2bV9ncGNfcmVmcmVzaGAsIHdoaWNoIGluIHR1cm4gY2FsbHMgdGhhdCBgaHZhX3RvX3Bmbl9yZXRyeWAuIGBrdm1fZ3BjX2FjdGl2YXRlYCBjYWxscyBgX19rdm1fZ3BjX2FjdGl2YXRlYCwgd2hpY2ggY2FsbHMgYF9fa3ZtX2dwY19yZWZyZXNoYCwgd2hpY2ggdGhlbiBjYWxscyBgaHZhX3RvX3Bmbl9yZXRyeWAuIEFuZCBga3ZtX2dwY19hY3RpdmF0ZV9odmFgIGNhbGxzIGBfX2t2bV9ncGNfYWN0aXZhdGVgLgoKU28sIHRoZSBjcml0aWNhbCBzeW1ib2xzIHRvIGtlZXAgaW4gbWluZCBhcmU6CiogICBgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0YAoqICAgYGt2bV9ncGNfcmVmcmVzaGAKKiAgIGBrdm1fZ3BjX2FjdGl2YXRlYAoqICAgYGt2bV9ncGNfYWN0aXZhdGVfaHZhYAoKTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IHJlYWNoYWJsZS4gQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgYGt2bV9ncGNfcmVmcmVzaGAgaXMgdXNlZCBieSBga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3RgLCBga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHNgLCBhbW9uZyBvdGhlcnMuIEZpbmUuIEFuZCBga3ZtX2dwY19hY3RpdmF0ZWAgaXMgY2FsbGVkIGZyb20gYGt2bV94ZW5faHZtX3NldF9hdHRyYCwgYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAsIGFuZCBga3ZtX3dyaXRlX3N5c3RlbV90aW1lYC4gIFJpZ2h0LCB0aGVzZSBhcmUgYWxsIGNhbGxlZCBmcm9tIEtWTSBpb2N0bHMsIHNvIHdlJiMzOTtyZSBnb29kIHRoZXJlLgoKRmluYWxseSwgd2hhdCYjMzk7cyByZXF1aXJlZCBjb25maWctd2lzZT8gV2VsbCwgY2xlYXJseSBgS1ZNYCBpcyBuZWVkZWQuIEFuZCBgS1ZNX1g4NmAgc2VsZWN0cyBgSEFWRV9LVk1fUEZOQ0FDSEVgLiBCdXQgYEhBVkVfS1ZNX1BGTkNBQ0hFYCBpcyByZWFsbHkganVzdCBhbiBpbmRpcmVjdCBjb25zZXF1ZW5jZSBvZiBlbmFibGluZyBgS1ZNX1g4NmAuIFNvLCB0aGUgZXNzZW50aWFsIGNvbmZpZyBpcyBzaW1wbHkgYEtWTWAuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgYXJjaC94ODYva3ZtL0tjb25maWdgIHRvIGNvbmZpcm0uLi4gWWVwLCB0aGF0JiMzOTtzIHdoYXQgSSB0aG91Z2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTI2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgS1ZNIGFuZCBLVk1fWEVOIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGUgY29uZmlndXJhdGlvbiBhcm91bmQgS1ZNLiBUaGUgY29yZSBjb25maWcgaXMsIG5hdHVyYWxseSwgYEtWTWAuIEhvd2V2ZXIsIEkmIzM5O20gc2VlaW5nIGBLVk1fWEVOYCBtZW50aW9uZWQgYWxvbmdzaWRlIGl0LCBhbmQgaXQmIzM5O3MgcGlxdWluZyBteSBpbnRlcmVzdC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGljaW5nIGEgbG90IG9mIGFjdGl2aXR5IHJlbGF0ZWQgdG8gYGt2bV9ncGNfYWN0aXZhdGVgIGFuZCBga3ZtX2dwY19yZWZyZXNoYCB3aXRoaW4gYGFyY2gveDg2L2t2bS94ZW4uY2AuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgbGluaywgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYEtWTV9YRU5gIGlzIGVzc2VudGlhbCBpbiB0aGlzIGNvbnRleHQuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uZmlybSB0aGUgcm9sZSBvZiBgS1ZNX1hFTmAuIEFoYSwgeWVzLCBhIHF1aWNrIHJldmlldyBzaG93cyB0aGlzIGVuYWJsZXMgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2Ugc3VwcG9ydC4gQW5kIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcgYmVjYXVzZSBYZW4gaHlwZXJjYWxsIGludGVyZmFjZXMgb2Z0ZW4gcmVseSBoZWF2aWx5IG9uIHRoZSBwZm5jYWNoZS4gVGhpcyBzdHJlbmd0aGVucyB0aGUgY2FzZSBmb3IgdW5kZXJzdGFuZGluZyBpdHMgaW5jbHVzaW9uLgoKTm93LCBsZXQgbWUgY2hlY2sgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmb3IgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aWVkIHRvIGBLVk1fWEVOYC4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGRlZXBlciBjb250ZXh0IEkgbmVlZCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgY29tcG9uZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9YRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOTM9Y29uZmlnIEtWTV9IWVBFUlZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwMzcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgS1ZNX1hFTiBEZXBlbmRlbmN5KioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgb2YgYEtWTV9YRU5gLiBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWNlc3Nhcnkgd2hlbiB0aGlzIGlzIGVuYWJsZWQsIGxpa2VseSB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9yIGEgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQgc2V0dXAuIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgaG93IGBLVk1fWEVOYCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyByZWZlcmVuY2VzIGFuZCBzZWUgd2hlcmUgaXQmIzM5O3MgaW5jbHVkZWQsIHBvdGVudGlhbGx5IGluIEtjb25maWcgZmlsZXMgb3IgcmVsZXZhbnQga2VybmVsIGJ1aWxkIHN5c3RlbXMuIFVuZGVyc3RhbmRpbmcgdGhvc2UgY29ubmVjdGlvbnMgaXMga2V5IHRvIGdldHRpbmcgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGFuZCBkZXBlbmRlbmNpZXMuIFVsdGltYXRlbHksIEkgd2FudCB0byBtYXAgb3V0IHRoZSBjb21wbGV0ZSBkZXBlbmRlbmN5IGdyYXBoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX1hFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE5Mz1jb25maWcgS1ZNX0hZUEVSVlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM0NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS1ZNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYSBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIEtWTSBhcmNoaXRlY3R1cmUgb24geDg2LCBwcm9iYWJseSByZWxhdGVkIHRvIGEgZmVhdHVyZSYjMzk7cyBjb25maWd1cmF0aW9uLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgaXRzZWxmLCBzcGVjaWZpY2FsbHkgYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gSSYjMzk7bSBndWVzc2luZyB0aGUgcmVsZXZhbnQgb3B0aW9ucyBtaWdodCBiZSBkZWZpbmVkIHNvbWV3aGVyZSBhcm91bmQgbGluZSAyMDcuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LCBnaXZlbiBteSBleHBlcmllbmNlIHdpdGggc2ltaWxhciBwcm9qZWN0cy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGRlZmluZWQgdGhlcmUgYW5kIHdoYXQgaXQgdGVsbHMgbWUuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBmZWF0dXJlIGZsYWdzLCBtYXliZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIG9wdGlvbnMsIGFuZCBob3BlZnVsbHkgc29tZSBoZWxwZnVsIGNvbW1lbnRzIHRvIGd1aWRlIG15IHVuZGVyc3RhbmRpbmcuIFRpbWUgdG8gZ2V0IHRoZSBmaWxlIG9wZW4gYW5kIHN0YXJ0IGRpc3NlY3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwMDpcdFx0ICBIeXBlci1WIEh5cGVydmlzb3IgVG9wLUxldmVsIEZ1bmN0aW9uYWwgU3BlY2lmaWNhdGlvbiAoVExGUyk6XG4gMjAxOlx0XHQgIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3ZpcnR1YWxpemF0aW9uL2h5cGVyLXYtb24td2luZG93cy9yZWZlcmVuY2UvdGxmc1xuIDIwMjpcdFx0ICBUaGVzZSBpbnRlcmZhY2VzIGFyZSByZXF1aXJlZCBmb3IgdGhlIGNvcnJlY3QgYW5kIHBlcmZvcm1hbnQgZnVuY3Rpb25pbmdcbiAyMDM6XHRcdCAgb2YgV2luZG93cyBhbmQgSHlwZXItViBndWVzdHMgb24gS1ZNLlxuIDIwNDpcdFxuIDIwNTpcdFx0ICBJZiB1bnN1cmUsIHNheSBcJiMzNDtZXCYjMzQ7LlxuIDIwNjpcdFxuIDIwNzpcdGNvbmZpZyBLVk1fWEVOXG4gMjA4Olx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXCYjMzQ7XG4gMjA5Olx0XHRkZXBlbmRzIG9uIEtWTV9YODZcbiAyMTA6XHRcdGhlbHBcbiAyMTE6XHRcdCAgUHJvdmlkZXMgS1ZNIHN1cHBvcnQgZm9yIHRoZSBob3N0aW5nIFhlbiBIVk0gZ3Vlc3RzIGFuZFxuIDIxMjpcdFx0ICBwYXNzaW5nIFhlbiBoeXBlcmNhbGxzIHRvIHVzZXJzcGFjZS5cbiAyMTM6XHRcbiAyMTQ6XHRcdCAgSWYgaW4gZG91YnQsIHNheSBcJiMzNDtOXCYjMzQ7LlxuIDIxNTpcdFxuIDIxNjpcdGNvbmZpZyBLVk1fUFJPVkVfTU1VXG4gMjE3Olx0XHRib29sIFwmIzM0O1Byb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcJiMzNDtcbiAyMTg6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMXG4gMjE5Olx0XHRkZXBlbmRzIG9uIEtWTV9YODZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4ODkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2MzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgS1ZNIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgc2luY2UgYEtWTV9YRU5gIGRlcGVuZHMgb24gYEtWTV9YODZgLCBhbmQgYEtWTV9YODZgIGRlcGVuZHMgb24gYEtWTWAgKHVubGVzcyBgS1ZNX0lOVEVMYCBvciBgS1ZNX0FNRGAgYXJlICpub3QqIGVuYWJsZWQpLCBJIG5lZWQgdG8gZW5hYmxlIGJvdGggYEtWTWAgYW5kIGBLVk1fWEVOYC4gVGhlIGFpbSBpcyB0byBjaGVjayBpZiB0aGVzZSBmZWF0dXJlcyBhcmUgd29ydGggZnV6emluZy4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBLVk1gIGlzIGEgdHJpc3RhdGUsIGFuZCB0aGF0IGl0IGRlcGVuZHMgb24gc2V2ZXJhbCBvdGhlciBjb25maWdzIGxpa2UgYEhJR0hfUkVTX1RJTUVSU2AsIGBYODZfTE9DQUxfQVBJQ2AsIGFuZCBzbyBvbi4gR29vZC4gU28sIGBLVk1gIGFuZCBgS1ZNX1hFTmAgYXJlIGRlZmluaXRlbHkgdGhlIHRhcmdldHMgZm9yIGVuYWJsaW5nLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aG9zZSBmb2N1cyBzeW1ib2xzOiBgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0YCwgYGt2bV9ncGNfcmVmcmVzaGAsIGBrdm1fZ3BjX2FjdGl2YXRlYCwgYW5kIGBrdm1fZ3BjX2FjdGl2YXRlX2h2YWAuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gc3l6a2FsbGVyLgoKWWVzLCB0aGV5IGFwcGVhciB0byBiZSEgU3l6a2FsbGVyIGhhcyBLVk0gZGVzY3JpcHRpb25zIGFuZCBjYW4gZnV6eiBLVk0gaW9jdGxzLiBga3ZtX2dwY19hY3RpdmF0ZWAgaXMgcmVhY2hhYmxlIHZpYSBga3ZtX3hlbl9odm1fc2V0X2F0dHJgIGFuZCB0aGUgYEtWTV9YRU5fSFZNX1NFVF9BVFRSYCBpb2N0bC4gYGt2bV9ncGNfcmVmcmVzaGAgaXMgdXNlZCBkdXJpbmcgdmNwdSBleGVjdXRpb24gb3IgZXZlbnQgaW5qZWN0aW9uLiBgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0YCBpcyB0cmlnZ2VyZWQgYnkgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucywgbGlrZSBgbXVubWFwYCBhbmQgYG1wcm90ZWN0YC4gVGhpcyBhbGwgbG9va3MgdmVyeSBwcm9taXNpbmcuCgpTbywgaGVyZSYjMzk7cyBteSBzdW1tYXJ5OiBUaGlzIGNvZGUgbW9kaWZpY2F0aW9uIGlzIHdvcnRoIGZ1enppbmcuIEl0IGludm9sdmVzIHBmbmNhY2hlIGludmFsaWRhdGlvbiBpbiBLVk0gKGludHJvZHVjaW5nIGEgc2VxdWVuY2UgY291bnRlciB0byBmaXggYSByYWNlIGNvbmRpdGlvbiksIHdoaWNoIGlzICpjb3JlKiBLVk0gZnVuY3Rpb25hbGl0eS4gSXQmIzM5O3MgYWNjZXNzaWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucy4KCk15IGZvY3VzIHN5bWJvbHMgYXJlOgotIGBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnRgCi0gYGt2bV9ncGNfcmVmcmVzaGAKLSBga3ZtX2dwY19hY3RpdmF0ZWAKLSBga3ZtX2dwY19hY3RpdmF0ZV9odmFgCgpBbmQgdGhlIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBlbmFibGUgYXJlIGBLVk1gIGFuZCBgS1ZNX1hFTmAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgS1ZNX1hFTmAgaXMgZW5hYmxlZC4gSXQgaXMgYSBib29sZWFuIHZhbHVlIHdoaWxlIGBLVk1gIGlzIGEgdHJpc3RhdGUuIEdpdmVuIHRoYXQgYEtWTV9YODZgIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYXMgYSBkZXBlbmRlbmN5IGFzIGxvbmcgYXMgYEtWTWAgaXMgZW5hYmxlZCwgYW5kIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYCBhcmUgbm90IHNldCB0byAmIzM5O24mIzM5Oy4gSSB3aWxsIGp1c3Qgc3BlY2lmeSBgS1ZNYCBhbmQgYEtWTV9YRU5gLiBOb3csIGxldCBtZSBkb3VibGUtY2hlY2sgaWYgYGt2bV9ncGNfYWN0aXZhdGVfaHZhYCBpcyBhY3R1YWxseSB1c2VkIGFuZCB0aGVuIEkgc2hvdWxkIGJlIGdvb2QgdG8gbW92ZSBmb3J3YXJkIHdpdGggdGhlIGZ1enppbmcgY2FtcGFpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9ncGNfYWN0aXZhdGVfaHZhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ZW4uYz03NDY9aW50IGt2bV94ZW5faHZtX3NldF9hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTc5Ny1cdFx0XHR9IGVsc2Uge1xuYXJjaC94ODYva3ZtL3hlbi5jOjc5ODpcdFx0XHRcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlX2h2YShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlLFxuYXJjaC94ODYva3ZtL3hlbi5jLTc5OS1cdFx0XHRcdFx0XHRcdCAodW5zaWduZWQgbG9uZylodmEsIFBBR0VfU0laRSk7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTkwNj1pbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy05MzctXG5hcmNoL3g4Ni9rdm0veGVuLmM6OTM4Olx0XHRcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlX2h2YShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZSxcbmFyY2gveDg2L2t2bS94ZW4uYy05MzktXHRcdFx0XHRcdFx0IGRhdGEtXHUwMDNldS5odmEsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSk7XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTE0NTg9aW50IGt2bV9ncGNfYWN0aXZhdGUoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGxlbik7XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE0NjAtLyoqXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTQ2MTogKiBrdm1fZ3BjX2FjdGl2YXRlX2h2YSAtIHByZXBhcmUgYSBjYWNoZWQga2VybmVsIG1hcHBpbmcgYW5kIEhQQSBmb3IgYSBnaXZlbiBIVkEuXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ2Mi0gKlxuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNDczLSAqL1xuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE0NzQ6aW50IGt2bV9ncGNfYWN0aXZhdGVfaHZhKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHVuc2lnbmVkIGxvbmcgaHZhLCB1bnNpZ25lZCBsb25nIGxlbik7XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ3NS1cbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTQzNj1pbnQga3ZtX2dwY19hY3RpdmF0ZShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgbGVuKVxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDQ3LVxudmlydC9rdm0vcGZuY2FjaGUuYzo0NDg6aW50IGt2bV9ncGNfYWN0aXZhdGVfaHZhKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHVuc2lnbmVkIGxvbmcgdWh2YSwgdW5zaWduZWQgbG9uZyBsZW4pXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ0OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODgwCgkJCQkJCQlvdXRwdXQ6IDEzMwoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBBdHRyaWJ1dGUgU2V0dGluZyBpbiBLVk0vWGVuIEludGVyYWN0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYmVpbmcgdXNlZC4gSSBzZWUgaXQsIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbiwgaXMgZGVmaW5pdGVseSBpbnZvbHZlZCBpbiBga3ZtX3hlbl9odm1fc2V0X2F0dHJgIGFuZCBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYC4gR290IGl0LiBUaGF0IGNvbmZpcm1zIG15IGluaXRpYWwgaHVuY2ggYWJvdXQgaXRzIHJvbGUgaW4gdGhlIEtWTS9YZW4gSFZNIGludGVncmF0aW9uIGxheWVyLCB3aGljaCBpcyB3aGF0IEkgdGhvdWdodCBJIHdvdWxkIGZpbmQuCgpOb3csIHdpdGggdGhpcyBpbmZvcm1hdGlvbiBpbiBoYW5kLCBJ4oCZbSBnb2luZyB0byBsZXZlcmFnZSBteSBzZXR1cC4gVGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgdXNlIGBzZXQtcmVzdWx0c2AgdG8gZ2V0IHNvbWUgZnVydGhlciBpbmZvcm1hdGlvbiBvbiB0aGVzZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX1hFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydCYjMzQ7LAogICAgJiMzNDtrdm1fZ3BjX3JlZnJlc2gmIzM0OywKICAgICYjMzQ7a3ZtX2dwY19hY3RpdmF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fZ3BjX2FjdGl2YXRlX2h2YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGZuY2FjaGUgaW52YWxpZGF0aW9uIGxvZ2ljIGluIEtWTSwgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gYnkgaW50cm9kdWNpbmcgYSBzZXF1ZW5jZSBjb3VudGVyLiBUaGlzIGlzIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX1hFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydCYjMzQ7LAogICAgJiMzNDtrdm1fZ3BjX3JlZnJlc2gmIzM0OywKICAgICYjMzQ7a3ZtX2dwY19hY3RpdmF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fZ3BjX2FjdGl2YXRlX2h2YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGZuY2FjaGUgaW52YWxpZGF0aW9uIGxvZ2ljIGluIEtWTSwgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gYnkgaW50cm9kdWNpbmcgYSBzZXF1ZW5jZSBjb3VudGVyLiBUaGlzIGlzIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6NDU6MTAuOTc4MjIzOTEzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MzE4MDQ4MjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX1hFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydFwiLFxuICAgIFwia3ZtX2dwY19yZWZyZXNoXCIsXG4gICAgXCJrdm1fZ3BjX2FjdGl2YXRlXCIsXG4gICAgXCJrdm1fZ3BjX2FjdGl2YXRlX2h2YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZm5jYWNoZSBpbnZhbGlkYXRpb24gbG9naWMgaW4gS1ZNLCBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBieSBpbnRyb2R1Y2luZyBhIHNlcXVlbmNlIGNvdW50ZXIuIFRoaXMgaXMgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ1OjEwLjk3ODIyOTMwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4NDg3NTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTZjZTIzMDQ0ZDZmODZjMjVhOTM0ZDRiZWYwOGJiOGZhZmZjNDliOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyA1IDE3OjQ1OjEwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbmluZGV4IGFiOGNmYWVjODJkMzEuLjRjMDk3MDg1NWM4YjIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuQEAgLTgwNSw2ICs4MDUsNyBAQCBzdHJ1Y3Qga3ZtIHtcXG4gXFx0LyogRm9yIG1hbmFnZW1lbnQgLyBpbnZhbGlkYXRpb24gb2YgZ2ZuX3RvX3Bmbl9jYWNoZXMgKi9cXG4gXFx0c3BpbmxvY2tfdCBncGNfbG9jaztcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBncGNfbGlzdDtcXG4rXFx0dW5zaWduZWQgbG9uZyBncGNfaW52YWxpZGF0ZV9zZXE7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBjcmVhdGVkX3ZjcHVzIGlzIHByb3RlY3RlZCBieSBrdm0tXFx1MDAzZWxvY2ssIGFuZCBpcyBpbmNyZW1lbnRlZFxcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9wZm5jYWNoZS5jIGIvdmlydC9rdm0vcGZuY2FjaGUuY1xcbmluZGV4IDcyOGQyYzFiNDg4YTguLjg3N2Q2ZDFkODIzMzIgMTAwNjQ0XFxuLS0tIGEvdmlydC9rdm0vcGZuY2FjaGUuY1xcbisrKyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmNcXG5AQCAtMjYsMzQgKzI2LDQwIEBAIHZvaWQgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKVxcbiB7XFxuIFxcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGM7XFxuK1xcdGJvb2wgd2FrZSA9IGZhbHNlO1xcbiBcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWdwY19sb2NrKTtcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShncGMsIFxcdTAwMjZrdm0tXFx1MDAzZWdwY19saXN0LCBsaXN0KSB7XFxuIFxcdFxcdHJlYWRfbG9ja19pcnEoXFx1MDAyNmdwYy1cXHUwMDNlbG9jayk7XFxuIFxcbiBcXHRcXHQvKiBPbmx5IGEgc2luZ2xlIHBhZ2Ugc28gbm8gbmVlZCB0byBjYXJlIGFib3V0IGxlbmd0aCAqL1xcbi1cXHRcXHRpZiAoZ3BjLVxcdTAwM2V2YWxpZCBcXHUwMDI2XFx1MDAyNiAhaXNfZXJyb3Jfbm9zbG90X3BmbihncGMtXFx1MDAzZXBmbikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIGdwYy1cXHUwMDNldWh2YSBcXHUwMDNlPSBzdGFydCBcXHUwMDI2XFx1MDAyNiBncGMtXFx1MDAzZXVodmEgXFx1MDAzYyBlbmQpIHtcXG4tXFx0XFx0XFx0cmVhZF91bmxvY2tfaXJxKFxcdTAwMjZncGMtXFx1MDAzZWxvY2spO1xcbi1cXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogVGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaGVyZSB3aGVyZSB0aGUgY2FjaGUgY291bGRcXG4tXFx0XFx0XFx0ICogYmUgbW9kaWZpZWQsIGFuZCBpbnZhbGlkYXRpb24gd291bGQgbm8gbG9uZ2VyIGJlXFxuLVxcdFxcdFxcdCAqIG5lY2Vzc2FyeS4gSGVuY2UgY2hlY2sgYWdhaW4gd2hldGhlciBpbnZhbGlkYXRpb25cXG4tXFx0XFx0XFx0ICogaXMgc3RpbGwgbmVjZXNzYXJ5IG9uY2UgdGhlIHdyaXRlIGxvY2sgaGFzIGJlZW5cXG4tXFx0XFx0XFx0ICogYWNxdWlyZWQuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXG4tXFx0XFx0XFx0d3JpdGVfbG9ja19pcnEoXFx1MDAyNmdwYy1cXHUwMDNlbG9jayk7XFxuLVxcdFxcdFxcdGlmIChncGMtXFx1MDAzZXZhbGlkIFxcdTAwMjZcXHUwMDI2ICFpc19lcnJvcl9ub3Nsb3RfcGZuKGdwYy1cXHUwMDNlcGZuKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgZ3BjLVxcdTAwM2V1aHZhIFxcdTAwM2U9IHN0YXJ0IFxcdTAwMjZcXHUwMDI2IGdwYy1cXHUwMDNldWh2YSBcXHUwMDNjIGVuZClcXG4tXFx0XFx0XFx0XFx0Z3BjLVxcdTAwM2V2YWxpZCA9IGZhbHNlO1xcbi1cXHRcXHRcXHR3cml0ZV91bmxvY2tfaXJxKFxcdTAwMjZncGMtXFx1MDAzZWxvY2spO1xcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKGdwYy1cXHUwMDNldWh2YSBcXHUwMDNlPSBzdGFydCBcXHUwMDI2XFx1MDAyNiBncGMtXFx1MDAzZXVodmEgXFx1MDAzYyBlbmQpIHtcXG4rXFx0XFx0XFx0d2FrZSA9IHRydWU7XFxuK1xcbitcXHRcXHRcXHRpZiAoZ3BjLVxcdTAwM2V2YWxpZCBcXHUwMDI2XFx1MDAyNiAhaXNfZXJyb3Jfbm9zbG90X3BmbihncGMtXFx1MDAzZXBmbikpIHtcXG4rXFx0XFx0XFx0XFx0cmVhZF91bmxvY2tfaXJxKFxcdTAwMjZncGMtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0XFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0XFx0ICogVGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaGVyZSB3aGVyZSB0aGUgY2FjaGUgY291bGRcXG4rXFx0XFx0XFx0XFx0ICogYmUgbW9kaWZpZWQsIGFuZCBpbnZhbGlkYXRpb24gd291bGQgbm8gbG9uZ2VyIGJlXFxuK1xcdFxcdFxcdFxcdCAqIG5lY2Vzc2FyeS4gSGVuY2UgY2hlY2sgYWdhaW4gd2hldGhlciBpbnZhbGlkYXRpb25cXG4rXFx0XFx0XFx0XFx0ICogaXMgc3RpbGwgbmVjZXNzYXJ5IG9uY2UgdGhlIHdyaXRlIGxvY2sgaGFzIGJlZW5cXG4rXFx0XFx0XFx0XFx0ICogYWNxdWlyZWQuXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXG4rXFx0XFx0XFx0XFx0d3JpdGVfbG9ja19pcnEoXFx1MDAyNmdwYy1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdFxcdFxcdGlmIChncGMtXFx1MDAzZXZhbGlkIFxcdTAwMjZcXHUwMDI2ICFpc19lcnJvcl9ub3Nsb3RfcGZuKGdwYy1cXHUwMDNlcGZuKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgZ3BjLVxcdTAwM2V1aHZhIFxcdTAwM2U9IHN0YXJ0IFxcdTAwMjZcXHUwMDI2IGdwYy1cXHUwMDNldWh2YSBcXHUwMDNjIGVuZClcXG4rXFx0XFx0XFx0XFx0XFx0Z3BjLVxcdTAwM2V2YWxpZCA9IGZhbHNlO1xcbitcXHRcXHRcXHRcXHR3cml0ZV91bmxvY2tfaXJxKFxcdTAwMjZncGMtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRyZWFkX3VubG9ja19pcnEoXFx1MDAyNmdwYy1cXHUwMDNlbG9jayk7XFxuIFxcdH1cXG4rXFx0aWYgKHdha2UpXFxuK1xcdFxcdGt2bS1cXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxKys7XFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWdwY19sb2NrKTtcXG4gfVxcbiBcXG5AQCAtMTI0LDcgKzEzMCw4IEBAIHN0YXRpYyB2b2lkIGdwY191bm1hcChrdm1fcGZuX3QgcGZuLCB2b2lkICpraHZhKVxcbiAjZW5kaWZcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NlcSlcXG4rc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NlcSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgZ3BjX3NlcSlcXG4ge1xcbiBcXHQvKlxcbiBcXHQgKiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBhY3RzIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXNcXG5AQCAtMTQ5LDcgKzE1Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1tdV9zXFxuIFxcdCAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC5cXG4gXFx0ICovXFxuIFxcdHNtcF9ybWIoKTtcXG4tXFx0cmV0dXJuIGt2bS1cXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxICE9IG1tdV9zZXE7XFxuK1xcdHJldHVybiBrdm0tXFx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcSAhPSBtbXVfc2VxIHx8IGt2bS1cXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxICE9IGdwY19zZXE7XFxuIH1cXG4gXFxuIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxcbkBAIC0xNTksNiArMTY2LDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXFxuIFxcdGt2bV9wZm5fdCBuZXdfcGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XFxuIFxcdHZvaWQgKm5ld19raHZhID0gTlVMTDtcXG4gXFx0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xcbitcXHR1bnNpZ25lZCBsb25nIGdwY19zZXE7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiBcXG4gXFx0c3RydWN0IGt2bV9mb2xsb3dfcGZuIGtmcCA9IHtcXG5AQCAtMTgyLDYgKzE5MCw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxcbiBcXG4gXFx0ZG8ge1xcbiBcXHRcXHRtbXVfc2VxID0gZ3BjLVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcXG4rXFx0XFx0Z3BjX3NlcSA9IGdwYy1cXHUwMDNla3ZtLVxcdTAwM2VncGNfaW52YWxpZGF0ZV9zZXE7XFxuIFxcdFxcdHNtcF9ybWIoKTtcXG4gXFxuIFxcdFxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNmdwYy1cXHUwMDNlbG9jayk7XFxuQEAgLTIzMiw3ICsyNDEsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcXG4gXFx0XFx0ICogYXR0ZW1wdGluZyB0byByZWZyZXNoLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0V0FSTl9PTl9PTkNFKGdwYy1cXHUwMDNldmFsaWQpO1xcbi1cXHR9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLVxcdTAwM2Vrdm0sIG1tdV9zZXEpKTtcXG4rXFx0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cXHUwMDNla3ZtLCBtbXVfc2VxLCBncGNfc2VxKSk7XFxuIFxcbiBcXHRncGMtXFx1MDAzZXZhbGlkID0gdHJ1ZTtcXG4gXFx0Z3BjLVxcdTAwM2VwZm4gPSBuZXdfcGZuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NToxMS40NDc0NDQ4NjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDQ4NDg4MTkwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fWEVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0XCIsXG4gICAgXCJrdm1fZ3BjX3JlZnJlc2hcIixcbiAgICBcImt2bV9ncGNfYWN0aXZhdGVcIixcbiAgICBcImt2bV9ncGNfYWN0aXZhdGVfaHZhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBmbmNhY2hlIGludmFsaWRhdGlvbiBsb2dpYyBpbiBLVk0sIGZpeGluZyBhIHJhY2UgY29uZGl0aW9uIGJ5IGludHJvZHVjaW5nIGEgc2VxdWVuY2UgY291bnRlci4gVGhpcyBpcyBjb3JlIEtWTSBmdW5jdGlvbmFsaXR5IHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTZjZTIzMDQ0ZDZmODZjMjVhOTM0ZDRiZWYwOGJiOGZhZmZjNDliOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTc6NDU6MTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzEuLjRjMDk3MDg1NWM4YjIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTgwNSw2ICs4MDUsNyBAQCBzdHJ1Y3Qga3ZtIHtcbiBcdC8qIEZvciBtYW5hZ2VtZW50IC8gaW52YWxpZGF0aW9uIG9mIGdmbl90b19wZm5fY2FjaGVzICovXG4gXHRzcGlubG9ja190IGdwY19sb2NrO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBncGNfbGlzdDtcbitcdHVuc2lnbmVkIGxvbmcgZ3BjX2ludmFsaWRhdGVfc2VxO1xuIFxuIFx0LypcbiBcdCAqIGNyZWF0ZWRfdmNwdXMgaXMgcHJvdGVjdGVkIGJ5IGt2bS1cdTAwM2Vsb2NrLCBhbmQgaXMgaW5jcmVtZW50ZWRcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9wZm5jYWNoZS5jIGIvdmlydC9rdm0vcGZuY2FjaGUuY1xuaW5kZXggNzI4ZDJjMWI0ODhhOC4uODc3ZDZkMWQ4MjMzMiAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbisrKyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbkBAIC0yNiwzNCArMjYsNDAgQEAgdm9pZCBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKVxuIHtcbiBcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGM7XG4rXHRib29sIHdha2UgPSBmYWxzZTtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZrdm0tXHUwMDNlZ3BjX2xvY2spO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShncGMsIFx1MDAyNmt2bS1cdTAwM2VncGNfbGlzdCwgbGlzdCkge1xuIFx0XHRyZWFkX2xvY2tfaXJxKFx1MDAyNmdwYy1cdTAwM2Vsb2NrKTtcbiBcbiBcdFx0LyogT25seSBhIHNpbmdsZSBwYWdlIHNvIG5vIG5lZWQgdG8gY2FyZSBhYm91dCBsZW5ndGggKi9cbi1cdFx0aWYgKGdwYy1cdTAwM2V2YWxpZCBcdTAwMjZcdTAwMjYgIWlzX2Vycm9yX25vc2xvdF9wZm4oZ3BjLVx1MDAzZXBmbikgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBncGMtXHUwMDNldWh2YSBcdTAwM2U9IHN0YXJ0IFx1MDAyNlx1MDAyNiBncGMtXHUwMDNldWh2YSBcdTAwM2MgZW5kKSB7XG4tXHRcdFx0cmVhZF91bmxvY2tfaXJxKFx1MDAyNmdwYy1cdTAwM2Vsb2NrKTtcbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFRoZXJlIGlzIGEgc21hbGwgd2luZG93IGhlcmUgd2hlcmUgdGhlIGNhY2hlIGNvdWxkXG4tXHRcdFx0ICogYmUgbW9kaWZpZWQsIGFuZCBpbnZhbGlkYXRpb24gd291bGQgbm8gbG9uZ2VyIGJlXG4tXHRcdFx0ICogbmVjZXNzYXJ5LiBIZW5jZSBjaGVjayBhZ2FpbiB3aGV0aGVyIGludmFsaWRhdGlvblxuLVx0XHRcdCAqIGlzIHN0aWxsIG5lY2Vzc2FyeSBvbmNlIHRoZSB3cml0ZSBsb2NrIGhhcyBiZWVuXG4tXHRcdFx0ICogYWNxdWlyZWQuXG4tXHRcdFx0ICovXG4tXG4tXHRcdFx0d3JpdGVfbG9ja19pcnEoXHUwMDI2Z3BjLVx1MDAzZWxvY2spO1xuLVx0XHRcdGlmIChncGMtXHUwMDNldmFsaWQgXHUwMDI2XHUwMDI2ICFpc19lcnJvcl9ub3Nsb3RfcGZuKGdwYy1cdTAwM2VwZm4pIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICBncGMtXHUwMDNldWh2YSBcdTAwM2U9IHN0YXJ0IFx1MDAyNlx1MDAyNiBncGMtXHUwMDNldWh2YSBcdTAwM2MgZW5kKVxuLVx0XHRcdFx0Z3BjLVx1MDAzZXZhbGlkID0gZmFsc2U7XG4tXHRcdFx0d3JpdGVfdW5sb2NrX2lycShcdTAwMjZncGMtXHUwMDNlbG9jayk7XG4tXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChncGMtXHUwMDNldWh2YSBcdTAwM2U9IHN0YXJ0IFx1MDAyNlx1MDAyNiBncGMtXHUwMDNldWh2YSBcdTAwM2MgZW5kKSB7XG4rXHRcdFx0d2FrZSA9IHRydWU7XG4rXG4rXHRcdFx0aWYgKGdwYy1cdTAwM2V2YWxpZCBcdTAwMjZcdTAwMjYgIWlzX2Vycm9yX25vc2xvdF9wZm4oZ3BjLVx1MDAzZXBmbikpIHtcbitcdFx0XHRcdHJlYWRfdW5sb2NrX2lycShcdTAwMjZncGMtXHUwMDNlbG9jayk7XG4rXG4rXHRcdFx0XHQvKlxuK1x0XHRcdFx0ICogVGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaGVyZSB3aGVyZSB0aGUgY2FjaGUgY291bGRcbitcdFx0XHRcdCAqIGJlIG1vZGlmaWVkLCBhbmQgaW52YWxpZGF0aW9uIHdvdWxkIG5vIGxvbmdlciBiZVxuK1x0XHRcdFx0ICogbmVjZXNzYXJ5LiBIZW5jZSBjaGVjayBhZ2FpbiB3aGV0aGVyIGludmFsaWRhdGlvblxuK1x0XHRcdFx0ICogaXMgc3RpbGwgbmVjZXNzYXJ5IG9uY2UgdGhlIHdyaXRlIGxvY2sgaGFzIGJlZW5cbitcdFx0XHRcdCAqIGFjcXVpcmVkLlxuK1x0XHRcdFx0ICovXG4rXG4rXHRcdFx0XHR3cml0ZV9sb2NrX2lycShcdTAwMjZncGMtXHUwMDNlbG9jayk7XG4rXHRcdFx0XHRpZiAoZ3BjLVx1MDAzZXZhbGlkIFx1MDAyNlx1MDAyNiAhaXNfZXJyb3Jfbm9zbG90X3BmbihncGMtXHUwMDNlcGZuKSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgICBncGMtXHUwMDNldWh2YSBcdTAwM2U9IHN0YXJ0IFx1MDAyNlx1MDAyNiBncGMtXHUwMDNldWh2YSBcdTAwM2MgZW5kKVxuK1x0XHRcdFx0XHRncGMtXHUwMDNldmFsaWQgPSBmYWxzZTtcbitcdFx0XHRcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2Z3BjLVx1MDAzZWxvY2spO1xuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdHJlYWRfdW5sb2NrX2lycShcdTAwMjZncGMtXHUwMDNlbG9jayk7XG4gXHR9XG4rXHRpZiAod2FrZSlcbitcdFx0a3ZtLVx1MDAzZWdwY19pbnZhbGlkYXRlX3NlcSsrO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWdwY19sb2NrKTtcbiB9XG4gXG5AQCAtMTI0LDcgKzEzMCw4IEBAIHN0YXRpYyB2b2lkIGdwY191bm1hcChrdm1fcGZuX3QgcGZuLCB2b2lkICpraHZhKVxuICNlbmRpZlxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1tdV9zZXEsXG4rXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGdwY19zZXEpXG4ge1xuIFx0LypcbiBcdCAqIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IGFjdHMgZm9yIGFsbCBpbnRlbnRzIGFuZCBwdXJwb3Nlc1xuQEAgLTE0OSw3ICsxNTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc1xuIFx0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgbW11X2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLlxuIFx0ICovXG4gXHRzbXBfcm1iKCk7XG4tXHRyZXR1cm4ga3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcSAhPSBtbXVfc2VxO1xuK1x0cmV0dXJuIGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXEgIT0gbW11X3NlcSB8fCBrdm0tXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxICE9IGdwY19zZXE7XG4gfVxuIFxuIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuQEAgLTE1OSw2ICsxNjYsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbiBcdGt2bV9wZm5fdCBuZXdfcGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XG4gXHR2b2lkICpuZXdfa2h2YSA9IE5VTEw7XG4gXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4rXHR1bnNpZ25lZCBsb25nIGdwY19zZXE7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcbiBcdHN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7XG5AQCAtMTgyLDYgKzE5MCw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuIFxuIFx0ZG8ge1xuIFx0XHRtbXVfc2VxID0gZ3BjLVx1MDAzZWt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4rXHRcdGdwY19zZXEgPSBncGMtXHUwMDNla3ZtLVx1MDAzZWdwY19pbnZhbGlkYXRlX3NlcTtcbiBcdFx0c21wX3JtYigpO1xuIFxuIFx0XHR3cml0ZV91bmxvY2tfaXJxKFx1MDAyNmdwYy1cdTAwM2Vsb2NrKTtcbkBAIC0yMzIsNyArMjQxLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4gXHRcdCAqIGF0dGVtcHRpbmcgdG8gcmVmcmVzaC5cbiBcdFx0ICovXG4gXHRcdFdBUk5fT05fT05DRShncGMtXHUwMDNldmFsaWQpO1xuLVx0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cdTAwM2Vrdm0sIG1tdV9zZXEpKTtcbitcdH0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtXHUwMDNla3ZtLCBtbXVfc2VxLCBncGNfc2VxKSk7XG4gXG4gXHRncGMtXHUwMDNldmFsaWQgPSB0cnVlO1xuIFx0Z3BjLVx1MDAzZXBmbiA9IG5ld19wZm47XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NToxMS40NDc0NDYyNzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzI0NTkwOTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtWTSBQRk4gQ2FjaGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGhlcmUsIGFuZCBpdCdzIHRvdWNoaW5nIHNvbWUgY29yZSBLVk0gaW5mcmFzdHJ1Y3R1cmU6IGBpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhgIGFuZCBgdmlydC9rdm0vcGZuY2FjaGUuY2AuIEVzc2VudGlhbGx5LCBpdCdzIGludHJvZHVjaW5nIHRoaXMgYGdwY19pbnZhbGlkYXRlX3NlcWAgZmllbGQgaW50byB0aGUgYHN0cnVjdCBrdm1gIGFuZCwgZnJvbSB3aGF0IEknbSBnYXRoZXJpbmcsIGluY3JlbWVudGluZyBpdCBpbiBgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0YCB3aGVuIGB3YWtlYCBpcyB0cnVlLiBSaWdodCwgYW5kIEkgc2VlIGl0J3MgYWxzbyBpbXBhY3RpbmcgYG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZWAgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIGBrdm0tXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxICE9IGdwY19zZXFgLiBUaGlzIGlzIHByZXR0eSBjbGVhcmx5IGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gdG8gdGhlIHBmbmNhY2hlIG1lY2hhbmlzbSB3aXRoaW4gS1ZNLCBub3RoaW5nIHN1YnRsZSBoZXJlLlxuXG5TbywgdGhlIG5leHQgb2J2aW91cyBzdGVwIGlzIHRvIGRpZyBpbnRvIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBLY29uZmlnIG9wdGlvbnMgYXJlIHJlbGV2YW50IHRvIHRoaXMgY2hhbmdlIHRvIGVuc3VyZSBldmVyeXRoaW5nJ3MgZW5hYmxlZCBjb3JyZWN0bHkuIFNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyBgdmlydC9rdm0vcGZuY2FjaGUuY2AsIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIEtjb25maWcgZm9yIHRoZSBLVk0gYnVpbGQgb3B0aW9ucy4gVGhlbiwgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBzZWUgd2hhdCBmaWxlcyBhcmUgbGlua2VkIHdoZXJlLCBJJ2xsIGBncmVwYCBmb3IgYHBmbmNhY2hlLm9gIGluIGB2aXJ0L2t2bS9NYWtlZmlsZWAuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBwaWVjZSBmaXRzIGludG8gdGhlIG92ZXJhbGwgS1ZNIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTEzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6NDU6MTYuMTcyMDQwMDg5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTc5OTMwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZm5jYWNoZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6NDU6MTYuMjE3MjI4MzM4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyNDk3MTAwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS1ZNIE1ha2VmaWxlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIEtWTSBtb2R1bGUgaXMgYnVpbHQsIHNvIHRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYHZpcnQva3ZtL01ha2VmaWxlYC4gTGV0J3Mgc2VlIHdoYXQgc2VjcmV0cyB0aGlzIGZpbGUgaG9sZHMuIEl0J3MgdGhlIGNlbnRyYWwgcGxheWJvb2sgZm9yIGhvdyB0aGUgS1ZNIGNvbXBvbmVudHMgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQsIHNvIGl0J3MgYSBjcml0aWNhbCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGRlcGVuZGVuY3kgdHJlZSwgaW5jbHVkZSBwYXRocywgY29tcGlsYXRpb24gZmxhZ3MsIGFuZCBsaW5raW5nIHJ1bGVzIHRoYXQgZGVmaW5lIHRoZSBLVk0ncyBidWlsZCBwcm9jZXNzLiBUaGlzIGZpbGUgd2lsbCB0ZWxsIG1lIHdoaWNoIHNvdXJjZSBmaWxlcyBhcmUgaW52b2x2ZWQsIHdoaWNoIG9iamVjdCBmaWxlcyB0aGV5IGdlbmVyYXRlLCBhbmQgaG93IHRob3NlIG9iamVjdCBmaWxlcyBjb21lIHRvZ2V0aGVyIHRvIGNyZWF0ZSB0aGUgZmluYWwgS1ZNIG1vZHVsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA1NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ1OjE5Ljg0MjIwMzI1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzgzMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBmbmNhY2hlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9NYWtlZmlsZS5rdm09MTM9a3ZtLSQoQ09ORklHX0hBVkVfS1ZNX0RJUlRZX1JJTkcpICs9ICQoS1ZNKS9kaXJ0eV9yaW5nLm9cXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm06MTQ6a3ZtLSQoQ09ORklHX0hBVkVfS1ZNX1BGTkNBQ0hFKSArPSAkKEtWTSkvcGZuY2FjaGUub1xcbnZpcnQva3ZtL01ha2VmaWxlLmt2bS0xNS1rdm0tJChDT05GSUdfS1ZNX0dVRVNUX01FTUZEKSArPSAkKEtWTSkvZ3Vlc3RfbWVtZmQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NToxOS44ODc5OTI5M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDQyNzcwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgS1ZNIFBGTiBDYWNoZSBSZXF1aXJlbWVudCoqXG5cbkFscmlnaHQsIHNvIEkgc2VlIHdlIG5lZWQgYENPTkZJR19IQVZFX0tWTV9QRk5DQUNIRWAg4oCTIHRoYXQncyB0aGUga2V5LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgZnJvbSBhbiBhcmNoaXRlY3R1cmFsIHBlcnNwZWN0aXZlLCBpcyB0byB0cmFjZSBiYWNrIHRoZSBlbmFibGluZyBjb25kaXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHByZWNpc2VseSBmbGlwcyB0aGF0IHN3aXRjaCwgd2hhdCBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMgdHJpZ2dlciB0aGUgc2V0dGluZyBvZiBgSEFWRV9LVk1fUEZOQ0FDSEVgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiB0byB1bmRlcnN0YW5kIHdoeSBpdCdzIHJlcXVpcmVkIGluIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8gYW5kIGlkZW50aWZ5IHBvdGVudGlhbCBjb25mbGljdHMgb3Igb3B0aW1pemF0aW9ucy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgdGVsbHMgdXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzOTMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NToyMy40MzIyNzIyNzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MzkyNTIyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgSEFWRV9LVk1fUEZOQ0FDSEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1fWDg2XFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yNS1cXHRzZWxlY3QgSEFWRV9LVk1fSVJRQ0hJUFxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjI2OlxcdHNlbGVjdCBIQVZFX0tWTV9QRk5DQUNIRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTI3LVxcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX1RTT1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NToyNS4xODYyMDMzNDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYyMTAwNTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIHRoZSBgS1ZNX1g4NmAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgY2xlYXJseSB3aGF0J3MgZHJpdmluZyB0aGlzLiBCdXQgaXMgdGhhdCBpdD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBLVk1gIGl0c2VsZiBpc24ndCBzdWZmaWNpZW50LiBNeSBpbml0aWFsIGNoZWNrIHBvaW50cyB0byBgQ09ORklHX0tWTWAgYXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBmbGFnIHRvIGJlIGNvbmNlcm5lZCB3aXRoLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBhZmZlY3RlZCBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gdGhlc2UgZnVuY3Rpb25zOiBgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0YCwgYGh2YV90b19wZm5fcmV0cnlgICh3aGljaCwgaW50ZXJlc3RpbmdseSwgaXMgZGVmaW5lZCBhcyBgc3RhdGljYCksIGFuZCBgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlYCAod2hpY2ggaXMgYHN0YXRpYyBpbmxpbmVgKS4gVGhlIGZhY3QgdGhhdCBgaHZhX3RvX3Bmbl9yZXRyeWAgYW5kIGBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGVgIGFyZSBzdGF0aWMgc3VnZ2VzdHMgdGhleSBtYXkgaGF2ZSBiZWVuIGlubGluZWQsIG9yIGFyZSBsb2NhbCB0byB0aGUgY29kZSB3aGVyZSB0aGV5IGFyZSB1c2VkLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gbm93IGlzLCB3aGF0IGFyZSB0aGUgKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsaW5nIGBodmFfdG9fcGZuX3JldHJ5YD8gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGltcGFjdCBsaWVzLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBsYXJnZXIgY29udGV4dCBpbiB3aGljaCB0aGlzIGByZXRyeWAgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyBpbnZva2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgKnJlbHlpbmcqIG9uIHRoZSBjaGFuZ2VzIGluc2lkZSB0aGUgYGh2YV90b19wZm5fcmV0cnlgIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzA0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ1OjI5LjQ0ODMwNzUxM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI5NDUxOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHZhX3RvX3Bmbl9yZXRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9wZm5jYWNoZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL3BmbmNhY2hlLmM9MTMzPXN0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1tdV9zZXEsXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTE2MS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjE2MjpzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTE2My17XFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTI2NT1zdGF0aWMgaW50IF9fa3ZtX2dwY19yZWZyZXNoKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhKVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0zMzAtXFxudmlydC9rdm0vcGZuY2FjaGUuYzozMzE6XFx0LyogTm90ZTogdGhlIG9mZnNldCBtdXN0IGJlIGNvcnJlY3QgYmVmb3JlIGNhbGxpbmcgaHZhX3RvX3Bmbl9yZXRyeSgpICovXFxudmlydC9rdm0vcGZuY2FjaGUuYy0zMzItXFx0Z3BjLVxcdTAwM2V1aHZhICs9IHBhZ2Vfb2Zmc2V0O1xcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0zMzgtXFx0aWYgKCFncGMtXFx1MDAzZXZhbGlkIHx8IGh2YV9jaGFuZ2UpIHtcXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjMzOTpcXHRcXHRyZXQgPSBodmFfdG9fcGZuX3JldHJ5KGdwYyk7XFxudmlydC9rdm0vcGZuY2FjaGUuYy0zNDAtXFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6NDU6MjkuNTAxMjU3ODAxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDQ5MzE1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipUcmFjaW5nIHRoZSBDYWxsIFBhdGggb2YgYF9fa3ZtX2dwY19yZWZyZXNoYCoqXG5cbk9rYXksIHNvIGBfX2t2bV9ncGNfcmVmcmVzaGAgaXMgdGhlIHRhcmdldCwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1cHN0cmVhbSBjYWxsZXIocykuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIHRhc2suIEkga25vdyBlbm91Z2ggYWJvdXQgdGhlIEtWTSBpbnRlcm5hbHMgdG8gcmVjb2duaXplIHRoZSBmdW5jdGlvbiBuYW1lIGFuZCBoYXZlIGEgZ2VuZXJhbCBpZGVhIG9mIGl0cyBwdXJwb3NlIOKAkyBzb21ldGhpbmcgcmVsYXRlZCB0byBnbG9iYWwgcGFnZSBjYWNoZSByZWZyZXNoLCBJJ2QgZ3Vlc3MuIE5vdyBJIG5lZWQgdG8ga25vdyB0aGUgaW1tZWRpYXRlIFwicGFyZW50XCIgb3IgY2FsbGVyLiBUaGUgcXVlc3Rpb24gbm93IGlzOiBXaGF0IGNvZGUgcGF0aCB1bHRpbWF0ZWx5IGxlYWRzIHRvIHRoZSBleGVjdXRpb24gb2YgYF9fa3ZtX2dwY19yZWZyZXNoYD8gSSBuZWVkIHRvIHVzZSBkZWJ1Z2dpbmcgdG9vbHMsIG9yIHBvc3NpYmx5IGRlbHZlIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIHN0YXJ0IHRyYWNpbmcgdGhlIGZ1bmN0aW9uIGNhbGxzIHRoYXQgbGVhZCB0byB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTA5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6NDU6MzIuNzA2MTkxODk4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTMzMTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2t2bV9ncGNfcmVmcmVzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9wZm5jYWNoZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL3BmbmNhY2hlLmM9MTYyPXN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0yNjQtXFxudmlydC9rdm0vcGZuY2FjaGUuYzoyNjU6c3RhdGljIGludCBfX2t2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSlcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTI2Ni17XFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTM3NT1pbnQga3ZtX2dwY19yZWZyZXNoKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHVuc2lnbmVkIGxvbmcgbGVuKVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0zOTAtXFxudmlydC9rdm0vcGZuY2FjaGUuYzozOTE6XFx0cmV0dXJuIF9fa3ZtX2dwY19yZWZyZXNoKGdwYywgZ3BjLVxcdTAwM2VncGEsIHVodmEpO1xcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzkyLX1cXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM9NDA2PXN0YXRpYyBpbnQgX19rdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhLFxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy00MzItXFx0fVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDMzOlxcdHJldHVybiBfX2t2bV9ncGNfcmVmcmVzaChncGMsIGdwYSwgdWh2YSk7XFxudmlydC9rdm0vcGZuY2FjaGUuYy00MzQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NTozMi43NTc1Mjg3MjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk2MDg4NjMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydC1sZXZlbCB1bmRlcnN0YW5kaW5nOlxuXG4qKkFuYWx5emluZyBLVk0gR3JhcGhpY3MgUHJvY2Vzc29yIENvbnRleHQgQWN0aXZhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpcyBjaXJjbGluZyBhcm91bmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBrdm1fZ3BjX3JlZnJlc2hgIGFuZCBgX19rdm1fZ3BjX2FjdGl2YXRlYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgX19rdm1fZ3BjX2FjdGl2YXRlYCBwbGF5cyBhIGtleSByb2xlLCBhbmQgSSdtIGJldHRpbmcgdGhhdCBga3ZtX2dwY19hY3RpdmF0ZWAgaXRzZWxmIHByb2JhYmx5IGNhbGxzIGl0LiBJJ20gZm9jdXNpbmcgb24gdGhlIGludGVyYWN0aW9uIGFuZCBvcmRlci4gVGhlIHJlZnJlc2ggaXMgaW1wb3J0YW50LCBidXQgY2xlYXJseSwgdGhlIGFjdGl2YXRpb24gaXMgdGhlIGNvcmUgcHJvY2VzcyBJIG5lZWQgdG8gdW5kZXJzdGFuZCwgd2l0aCB0aGUgZG91YmxlIHVuZGVyc2NvcmUgZnVuY3Rpb24gYmVpbmcgdGhlIGZ1bmRhbWVudGFsIGNhbGwuIEkgd2lsbCB0cmFjZSB0aGUgY2FsbCBzdGFjayBub3cgYW5kIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gSSBoYXZlIHRvIHNlZSBob3cgYW5kIHdoZW4gdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYW5kIHdoYXQgdGhlIHN0YXRlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhleSBydW4gaXMuIFRoYXQgc2hvdWxkIGhlbHAgdG8gcmVzb2x2ZSBteSBjdXJyZW50IHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMzEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NTozNi43MTg0MTc1NjNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMTgwODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fa3ZtX2dwY19hY3RpdmF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9wZm5jYWNoZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL3BmbmNhY2hlLmM9Mzk0PXZvaWQga3ZtX2dwY19pbml0KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDA1LVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDA2OnN0YXRpYyBpbnQgX19rdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhLFxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDA3LVxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgbGVuKVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYz00MzY9aW50IGt2bV9ncGNfYWN0aXZhdGUoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGxlbilcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDQ0LVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDQ1OlxcdHJldHVybiBfX2t2bV9ncGNfYWN0aXZhdGUoZ3BjLCBncGEsIEtWTV9IVkFfRVJSX0JBRCwgbGVuKTtcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ0Ni19XFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTQ0OD1pbnQga3ZtX2dwY19hY3RpdmF0ZV9odmEoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgdW5zaWduZWQgbG9uZyB1aHZhLCB1bnNpZ25lZCBsb25nIGxlbilcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDUyLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDUzOlxcdHJldHVybiBfX2t2bV9ncGNfYWN0aXZhdGUoZ3BjLCBJTlZBTElEX0dQQSwgdWh2YSwgbGVuKTtcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ1NC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ1OjM2Ljc2OTYwMzI3M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTA4MzAxNTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gRnVuY3Rpb24gTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkndmUgaWRlbnRpZmllZCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW52b2x2ZWQgaGVyZTogYGdmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydGAsIGBrdm1fZ3BjX3JlZnJlc2hgLCBga3ZtX2dwY19hY3RpdmF0ZWAsIGFuZCBga3ZtX2dwY19hY3RpdmF0ZV9odmFgLiBSaWdodCwgY29uZmlybWluZyB0aGF0IHRoZXkncmUgS1ZNLXNwZWNpZmljIGlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4gWWVwLCB0aGV5IGFyZS5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyB0b3VjaGluZyBgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0YCBhbmQgYGh2YV90b19wZm5fcmV0cnlgLCBzbyBJIHNob3VsZCBwcmlvcml0aXplIHRob3NlIHNwZWNpZmljYWxseSwgYWxvbmcgd2l0aCB0aGUgb3RoZXJzLiBOb3csIEkgd2FudCB0byBzZWUgd2hlcmUgYGdmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydGAgaXMgYWN0dWFsbHkgKmNhbGxlZCogZnJvbSB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsuIFVuZGVyc3RhbmRpbmcgaXRzIHVzYWdlIGlzIGtleSB0byBhc3Nlc3NpbmcgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gTGV0J3MgZGlnIGludG8gdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgxMCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NTo0MS44Nzc5MDc5ODlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDM0MTM5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jPTcyMT1zdGF0aWMgaW50IGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25vdGlmaWVyICptbixcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNzU3LVxcdCAqL1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6NzU4OlxcdGdmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydChrdm0sIHJhbmdlLVxcdTAwM2VzdGFydCwgcmFuZ2UtXFx1MDAzZWVuZCk7XFxudmlydC9rdm0va3ZtX21haW4uYy03NTktXFxuLS1cXG52aXJ0L2t2bS9rdm1fbW0uaD01OT1rdm1fcGZuX3QgaHZhX3RvX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCk7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbW0uaC02MS0jaWZkZWYgQ09ORklHX0hBVkVfS1ZNX1BGTkNBQ0hFXFxudmlydC9rdm0va3ZtX21tLmg6NjI6dm9pZCBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGt2bSAqa3ZtLFxcbnZpcnQva3ZtL2t2bV9tbS5oLTYzLVxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxudmlydC9rdm0va3ZtX21tLmgtNjUtI2Vsc2VcXG52aXJ0L2t2bS9rdm1fbW0uaDo2NjpzdGF0aWMgaW5saW5lIHZvaWQgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBrdm0gKmt2bSxcXG52aXJ0L2t2bS9rdm1fbW0uaC02Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTI0LSAqL1xcbnZpcnQva3ZtL3BmbmNhY2hlLmM6MjU6dm9pZCBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMjYtXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NTo0My42MjEzMjYzMTlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5OTM3MzI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBNTVUgSW52YWxpZGF0aW9uKipcblxuUmlnaHQsIHNvIHRoaXMgaXMgY2FsbGVkIGZyb20gYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydGAuIFRoYXQgdGVsbHMgbWUgaW1tZWRpYXRlbHkgdGhhdCB0aGUgZm9jdXMgaXMgb24gYSBNTVUgbm90aWZpZXIgY2FsbGJhY2ssIHNwZWNpZmljYWxseSB0aGUgYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydGAgZnVuY3Rpb24uIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBhIGtleSBjb250ZXh0LiBJJ20gYXNzdW1pbmcgdGhpcyBmdW5jdGlvbiBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGEgcmFuZ2UgaW52YWxpZGF0aW9uIG9wZXJhdGlvbiByZWxhdGVkIHRvIHRoZSBLVk0gTU1VLiBJdCdzIHRoZSBiZWdpbm5pbmcgb2YgYSBwcm9jZXNzLlxuXG5Ob3csIG15IG1pbmQgc2hpZnRzIHRvIGBrdm1fZ3BjX3JlZnJlc2hgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGt2bV9ncGNfcmVmcmVzaGAgbWlnaHQgcmVsYXRlIHRvIHRoaXMgTU1VIGludmFsaWRhdGlvbiBwcm9jZXNzLiBJcyBpdCBjYWxsZWQgYmVmb3JlLCBhZnRlciwgZHVyaW5nLCBvciBpbmRlcGVuZGVudGx5PyBEb2VzIHRoZSBNTVUgaW52YWxpZGF0aW9uIHRyaWdnZXIgdGhlIHJlZnJlc2gsIG9yIGlzIHRoZXJlIHNvbWUgb3RoZXIgY29ubmVjdGlvbiBJIG5lZWQgdG8gZXhwbG9yZT8gVGhpbmtpbmcgYWJvdXQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIGRldGVybWluZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY2NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ1OjQ3LjgyMDcwODk4N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MjcxMDcxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fZ3BjX3JlZnJlc2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuYz0zMjQyPXN0YXRpYyB2b2lkIGt2bV9zZXR1cF9ndWVzdF9wdmNsb2NrKHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvICpyZWZfaHZfY2xvY2ssXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMzI1Ni1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MzI1NzpcXHRcXHRpZiAoa3ZtX2dwY19yZWZyZXNoKGdwYywgb2Zmc2V0ICsgc2l6ZW9mKCpndWVzdF9odl9jbG9jaykpKVxcbmFyY2gveDg2L2t2bS94ODYuYy0zMjU4LVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0zOD1zdGF0aWMgaW50IGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtNTEtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjUyOlxcdFxcdHJldCA9IGt2bV9ncGNfcmVmcmVzaChncGMsIFBBR0VfU0laRSk7XFxuYXJjaC94ODYva3ZtL3hlbi5jLTUzLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTUzPXN0YXRpYyBpbnQgeGVuX2dldF9ndWVzdF9wdmNsb2NrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0xNjQtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjE2NTpcXHRcXHRyID0ga3ZtX2dwY19yZWZyZXNoKGdwYywgb2Zmc2V0ICsgc2l6ZW9mKCpodl9jbG9jaykpO1xcbmFyY2gveDg2L2t2bS94ZW4uYy0xNjYtXFx0XFx0aWYgKHIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MzIxPXN0YXRpYyB2b2lkIGt2bV94ZW5fdXBkYXRlX3J1bnN0YXRlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdiwgYm9vbCBhdG9taWMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtNDM4LVxcbmFyY2gveDg2L2t2bS94ZW4uYzo0Mzk6XFx0XFx0aWYgKGt2bV9ncGNfcmVmcmVzaChncGMxLCB1c2VyX2xlbjEpKVxcbmFyY2gveDg2L2t2bS94ZW4uYy00NDAtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTYzOT12b2lkIGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdilcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy02NTYtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjY1NzpcXHRcXHRpZiAoa3ZtX2dwY19yZWZyZXNoKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSlcXG5hcmNoL3g4Ni9rdm0veGVuLmMtNjU4LVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz02OTc9aW50IF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdilcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy03MzAtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjczMTpcXHRcXHRpZiAoa3ZtX2dwY19yZWZyZXNoKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSkge1xcbmFyY2gveDg2L2t2bS94ZW4uYy03MzItXFx0XFx0XFx0LypcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0xOTAxPXN0YXRpYyBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huKHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTQ0LVxcdFxcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNyY3UpO1xcbmFyY2gveDg2L2t2bS94ZW4uYzoxOTQ1OlxcdFxcdHJjID0ga3ZtX2dwY19yZWZyZXNoKGdwYywgUEFHRV9TSVpFKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTk0Ni1cXHRcXHRzcmN1X3JlYWRfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNyY3UsIGlkeCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTQ5Mj1ib29sIGt2bV9ncGNfY2hlY2soc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgdW5zaWduZWQgbG9uZyBsZW4pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE0OTQtLyoqXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE0OTU6ICoga3ZtX2dwY19yZWZyZXNoIC0gdXBkYXRlIGEgcHJldmlvdXNseSBpbml0aWFsaXplZCBjYWNoZS5cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ5Ni0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE1MDktICovXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE1MTA6aW50IGt2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCB1bnNpZ25lZCBsb25nIGxlbik7XFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE1MTEtXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTE2Mj1zdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMjY0LVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6MjY1OnN0YXRpYyBpbnQgX19rdm1fZ3BjX3JlZnJlc2goc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIHVodmEpXFxudmlydC9rdm0vcGZuY2FjaGUuYy0yNjYte1xcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0zNzQtXFxudmlydC9rdm0vcGZuY2FjaGUuYzozNzU6aW50IGt2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCB1bnNpZ25lZCBsb25nIGxlbilcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM3Ni17XFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM5MC1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjM5MTpcXHRyZXR1cm4gX19rdm1fZ3BjX3JlZnJlc2goZ3BjLCBncGMtXFx1MDAzZWdwYSwgdWh2YSk7XFxudmlydC9rdm0vcGZuY2FjaGUuYy0zOTItfVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYz00MDY9c3RhdGljIGludCBfX2t2bV9ncGNfYWN0aXZhdGUoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIHVodmEsXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQzMi1cXHR9XFxudmlydC9rdm0vcGZuY2FjaGUuYzo0MzM6XFx0cmV0dXJuIF9fa3ZtX2dwY19yZWZyZXNoKGdwYywgZ3BhLCB1aHZhKTtcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQzNC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ1OjQ5LjQwMzQzMjEzOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc0MDA1NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBLVk0gYW5kIEdQQyBSZWZyZXNoKipcblxuT2theSwgc28gYGt2bV9ncGNfcmVmcmVzaGAuIEkgc2VlIHRoaXMgZnVuY3Rpb24gY2FsbCBpcyB1c2VkIGluIGJvdGggYGFyY2gveDg2L2t2bS94ODYuY2AgYW5kIGBhcmNoL3g4Ni9rdm0veGVuLmNgLiBUaGF0J3MgYSBkZWNlbnQgc3RhcnQ7IGl0IHRlbGxzIG1lIHRoZSBzY29wZSBvZiBpdHMgdXNhZ2UsIGltbWVkaWF0ZWx5IG5hcnJvd2luZyBkb3duIHRoZSBhcmVhIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBpdCdzIHJlbGV2YW50IGluIGJvdGggdGhlIHN0YW5kYXJkIHg4NiBLVk0gY29udGV4dCBhbmQsIGludGVyZXN0aW5nbHksIHdpdGhpbiB0aGUgWGVuIGludGVncmF0aW9uLiBUaGF0IG1pZ2h0IHBvaW50IHRvIHNvbWV0aGluZyBhcmNoaXRlY3R1cmFsbHkgc2lnbmlmaWNhbnQgb3IgcGVyaGFwcyBqdXN0IGEgc2hhcmVkIG5lZWQgYWNyb3NzIHRob3NlIHR3byBtb2Rlcy5cblxuTm93LCBiZWZvcmUgSSBkaWcgZnVydGhlciBpbnRvIGBrdm1fZ3BjX3JlZnJlc2hgIGl0c2VsZiwgSSB0aGluayBJJ2xsIHBpdm90IHNsaWdodGx5LiBTaW5jZSBgcmVmcmVzaGAgb2Z0ZW4gaW1wbGllcyBhbiBhY3RpdmF0aW9uIG9yIHVwZGF0ZSBwcm9jZXNzLCBpdCBtYWtlcyBzZW5zZSB0byBsb29rIGZvciB3aGVyZSB0aGlzIEdQQyBpcyAqYWN0aXZhdGVkKiBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoZXJlZm9yZSwgSSBzaG91bGQgY2hlY2sgb3V0IGBrdm1fZ3BjX2FjdGl2YXRlYC4gVGhhdCBtaWdodCBnaXZlIG1lIHNvbWUgY29udGV4dCBhYm91dCB3aGF0J3MgYmVpbmcgcmVmcmVzaGVkIGluIHRoZSBmaXJzdCBwbGFjZS4gSXQgY291bGQgYmUgYW4gaW5pdGlhbGl6YXRpb24sIGVuYWJsaW5nLCBvciBwZXJoYXBzIGEgZGlmZmVyZW50IGNvbnRyb2wgbWVjaGFuaXNtIGVudGlyZWx5LCBhbmQga25vd2luZyB0aGUgYWN0aXZhdGlvbiBjb250ZXh0IHdpbGwgZ3JlYXRseSBoZWxwIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlZnJlc2ggZnVuY3Rpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgYnJvYWRlciBwaWN0dXJlIGJlZm9yZSBJIGdldCBib2dnZWQgZG93biBpbiB0aGUgcmVmcmVzaCBkZXRhaWxzIHRoZW1zZWx2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0OTksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NTo1My43Nzc0NDE1ODdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTc2NjgzNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2dwY19hY3RpdmF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jPTI0Mjg9c3RhdGljIHZvaWQga3ZtX3dyaXRlX3N5c3RlbV90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3Qgc3lzdGVtX3RpbWUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjQ0NC1cXHRpZiAoc3lzdGVtX3RpbWUgXFx1MDAyNiAxKVxcbmFyY2gveDg2L2t2bS94ODYuYzoyNDQ1OlxcdFxcdGt2bV9ncGNfYWN0aXZhdGUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gucHZfdGltZSwgc3lzdGVtX3RpbWUgXFx1MDAyNiB+MVVMTCxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjQ0Ni1cXHRcXHRcXHRcXHQgc2l6ZW9mKHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvKSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MzIxPXN0YXRpYyB2b2lkIGt2bV94ZW5fdXBkYXRlX3J1bnN0YXRlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdiwgYm9vbCBhdG9taWMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtNDg1LVxcdFxcdFxcdC8qXFxuYXJjaC94ODYva3ZtL3hlbi5jOjQ4NjpcXHRcXHRcXHQgKiBVc2Uga3ZtX2dwY19hY3RpdmF0ZSgpIGhlcmUgYmVjYXVzZSBpZiB0aGUgcnVuc3RhdGVcXG5hcmNoL3g4Ni9rdm0veGVuLmMtNDg3LVxcdFxcdFxcdCAqIGFyZWEgd2FzIGNvbmZpZ3VyZWQgaW4gMzItYml0IG1vZGUgYW5kIG9ubHkgZXh0ZW5kc1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTQ5MC1cXHRcXHRcXHQgKi9cXG5hcmNoL3g4Ni9rdm0veGVuLmM6NDkxOlxcdFxcdFxcdGlmIChrdm1fZ3BjX2FjdGl2YXRlKGdwYzIsIGdwYzEtXFx1MDAzZWdwYSArIHVzZXJfbGVuMSxcXG5hcmNoL3g4Ni9rdm0veGVuLmMtNDkyLVxcdFxcdFxcdFxcdFxcdCAgICAgdXNlcl9sZW4yKSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz03NDY9aW50IGt2bV94ZW5faHZtX3NldF9hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzg1LVxcdFxcdFxcdH0gZWxzZSB7XFxuYXJjaC94ODYva3ZtL3hlbi5jOjc4NjpcXHRcXHRcXHRcXHRyID0ga3ZtX2dwY19hY3RpdmF0ZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGUsXFxuYXJjaC94ODYva3ZtL3hlbi5jLTc4Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGdmbl90b19ncGEoZ2ZuKSwgUEFHRV9TSVpFKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy03OTctXFx0XFx0XFx0fSBlbHNlIHtcXG5hcmNoL3g4Ni9rdm0veGVuLmM6Nzk4OlxcdFxcdFxcdFxcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlX2h2YShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGUsXFxuYXJjaC94ODYva3ZtL3hlbi5jLTc5OS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgKHVuc2lnbmVkIGxvbmcpaHZhLCBQQUdFX1NJWkUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTkwNj1pbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTkyOC1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6OTI5OlxcdFxcdFxcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnhlbi52Y3B1X2luZm9fY2FjaGUsXFxuYXJjaC94ODYva3ZtL3hlbi5jLTkzMC1cXHRcXHRcXHRcXHRcXHQgICAgIGRhdGEtXFx1MDAzZXUuZ3BhLCBzaXplb2Yoc3RydWN0IHZjcHVfaW5mbykpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTkzNy1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6OTM4OlxcdFxcdFxcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlX2h2YShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC54ZW4udmNwdV9pbmZvX2NhY2hlLFxcbmFyY2gveDg2L2t2bS94ZW4uYy05MzktXFx0XFx0XFx0XFx0XFx0XFx0IGRhdGEtXFx1MDAzZXUuaHZhLCBzaXplb2Yoc3RydWN0IHZjcHVfaW5mbykpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTk1My1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6OTU0OlxcdFxcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnhlbi52Y3B1X3RpbWVfaW5mb19jYWNoZSxcXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTU1LVxcdFxcdFxcdFxcdCAgICAgZGF0YS1cXHUwMDNldS5ncGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTg3LVxcdFxcdHN6MSA9IFBBR0VfU0laRSAtIChkYXRhLVxcdTAwM2V1LmdwYSBcXHUwMDI2IH5QQUdFX01BU0spO1xcbmFyY2gveDg2L2t2bS94ZW4uYzo5ODg6XFx0XFx0ciA9IGt2bV9ncGNfYWN0aXZhdGUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gueGVuLnJ1bnN0YXRlX2NhY2hlLFxcbmFyY2gveDg2L2t2bS94ZW4uYy05ODktXFx0XFx0XFx0XFx0ICAgICBkYXRhLVxcdTAwM2V1LmdwYSwgc3oxKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy05OTgtXFx0XFx0XFx0QlVHX09OKChkYXRhLVxcdTAwM2V1LmdwYSArIHN6MSkgXFx1MDAyNiB+UEFHRV9NQVNLKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmM6OTk5OlxcdFxcdFxcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnhlbi5ydW5zdGF0ZTJfY2FjaGUsXFxuYXJjaC94ODYva3ZtL3hlbi5jLTEwMDAtXFx0XFx0XFx0XFx0XFx0ICAgICBkYXRhLVxcdTAwM2V1LmdwYSArIHN6MSwgc3oyKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xNDQwPXZvaWQga3ZtX2dwY19pbml0KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHN0cnVjdCBrdm0gKmt2bSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ0Mi0vKipcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTQ0MzogKiBrdm1fZ3BjX2FjdGl2YXRlIC0gcHJlcGFyZSBhIGNhY2hlZCBrZXJuZWwgbWFwcGluZyBhbmQgSFBBIGZvciBhIGdpdmVuIGd1ZXN0XFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE0NDQtICogICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGFkZHJlc3MuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ1Ny0gKi9cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTQ1ODppbnQga3ZtX2dwY19hY3RpdmF0ZShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgbGVuKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ1OS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ2MC0vKipcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTQ2MTogKiBrdm1fZ3BjX2FjdGl2YXRlX2h2YSAtIHByZXBhcmUgYSBjYWNoZWQga2VybmVsIG1hcHBpbmcgYW5kIEhQQSBmb3IgYSBnaXZlbiBIVkEuXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE0NjItICpcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNDcwLSAqXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE0NzE6ICogVGhlIHNlbWFudGljcyBvZiB0aGlzIGZ1bmN0aW9uIGFyZSB0aGUgc2FtZSBhcyB0aG9zZSBvZiBrdm1fZ3BjX2FjdGl2YXRlKCkuIEl0XFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE0NzItICogbWVyZWx5IGJ5cGFzc2VzIGEgbGF5ZXIgb2YgYWRkcmVzcyB0cmFuc2xhdGlvbi5cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ3My0gKi9cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTQ3NDppbnQga3ZtX2dwY19hY3RpdmF0ZV9odmEoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgdW5zaWduZWQgbG9uZyBodmEsIHVuc2lnbmVkIGxvbmcgbGVuKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ3NS1cXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM9Mzk0PXZvaWQga3ZtX2dwY19pbml0KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDA1LVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDA2OnN0YXRpYyBpbnQgX19rdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhLFxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDA3LVxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgbGVuKVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy00MzUtXFxudmlydC9rdm0vcGZuY2FjaGUuYzo0MzY6aW50IGt2bV9ncGNfYWN0aXZhdGUoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGxlbilcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQzNy17XFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ0NC1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjQ0NTpcXHRyZXR1cm4gX19rdm1fZ3BjX2FjdGl2YXRlKGdwYywgZ3BhLCBLVk1fSFZBX0VSUl9CQUQsIGxlbik7XFxudmlydC9rdm0vcGZuY2FjaGUuYy00NDYtfVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDQ3LVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDQ4OmludCBrdm1fZ3BjX2FjdGl2YXRlX2h2YShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCB1bnNpZ25lZCBsb25nIHVodmEsIHVuc2lnbmVkIGxvbmcgbGVuKVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDQ5LXtcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDUyLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDUzOlxcdHJldHVybiBfX2t2bV9ncGNfYWN0aXZhdGUoZ3BjLCBJTlZBTElEX0dQQSwgdWh2YSwgbGVuKTtcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ1NC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ1OjU1LjM5NTExNTQ1OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTcyMDU1NDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgbGV0J3Mgc2VlLiBNeSBpbml0aWFsIHNjYW4gcG9pbnRzIG1lIHRvd2FyZCBga3ZtX2dwY19hY3RpdmF0ZWAgYW5kIGBrdm1fZ3BjX2FjdGl2YXRlX2h2YWAsIHNwZWNpZmljYWxseSB3aXRoaW4gYGFyY2gveDg2L2t2bS94ZW4uY2AgYW5kIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBmdXp6aW5nLCBnaXZlbiB0aGVpciByb2xlcyBpbiB0aGUgS1ZNIGFyY2hpdGVjdHVyZS4gIEkgc2hvdWxkIGFsc28gYWRkIGBrdm1fZ3BjX3JlZnJlc2hgIHRvIHRoZSBsaXN0OyBpdCBsaWtlbHkgaGFuZGxlcyByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuICBGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIGxvb2sgaW50byBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0YCBhbmQgdHJhY2UgaXQgdG8gaXRzIGNhbGwgdG8gYGdmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydGAuIFRoYXQgY291bGQgYmUgYSBrZXkgYXJlYSBmb3IgdnVsbmVyYWJpbGl0aWVzLlxuXG5Ob3csIGxldCdzIHF1aWNrbHkgY2hlY2sgaWYgYGt2bV9ncGNfYWN0aXZhdGVgIGlzIGV4cG9ydGVkLCBtYWtpbmcgaXQgYWNjZXNzaWJsZSBmb3IgZXh0ZXJuYWwgY2FsbHMuIFllcCwgSSBzZWUgaXQncyBkZWZpbmVkIGFuZCBleHBvcnRlZCBpbiBgdmlydC9rdm0vcGZuY2FjaGUuY2AuIEV4Y2VsbGVudCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMzcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6NDY6MDEuMzY3MTc0MzExWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTI1NzU3MjczLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MX0dQTFxcXFwoa3ZtX2dwY19hY3RpdmF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ2OjAzLjQ5Mjk0MDE4NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTE1NTE3MTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS1ZNIFBGTiBDYWNoZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTSBQRk4gY2FjaGUgd29ya3MsIGFuZCB0aGF0IG1lYW5zIHN0YXJ0aW5nIGF0IHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgYEVYUE9SVF9TWU1CT0xgIHdpdGhpbiBgdmlydC9rdm0vcGZuY2FjaGUuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGV4cG9zZWQsIGFuZCB3aHkuIEknbSBndWVzc2luZyBpdCdzIHJlbGF0ZWQgdG8gc29tZSBzb3J0IG9mIGludGVyZmFjZSBmb3Igb3RoZXIgS1ZNIGNvbXBvbmVudHMgb3IgcG9zc2libHkgZXZlbiBleHRlcm5hbCBtb2R1bGVzIHRvIGludGVyYWN0IHdpdGggdGhlIFBGTiBjYWNoZS4gTGV0IG1lIHNlZSB3aGF0IEkgY2FuIGZpbmQuIEl0IG1pZ2h0IGV4cG9zZSBob29rcyBmb3IgcGFnZSBpbnZhbGlkYXRpb24sIFBGTiBhbGxvY2F0aW9uLCBvciBjYWNoZSBtYW5hZ2VtZW50LiBJJ20gYW50aWNpcGF0aW5nIHNvbWUgcG90ZW50aWFsIGZvciBpbnRlci1tb2R1bGUgZGVwZW5kZW5jaWVzIGhlcmUsIGFuZCB0aGUgdXNlIG9mIGBFWFBPUlRfU1lNQk9MYCBpcyBhIGtleSBpbmRpY2F0b3Igb2YgdGhvc2UgZHluYW1pY3MuIFRoaXMgY291bGQgaGF2ZSBzb21lIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDY0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6NDY6MDkuNDA4NDY3NDEzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM0MjAwMjcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xfR1BMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL3BmbmNhY2hlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ2OjA5LjU0MTkwMzMzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODUwNzQxODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0gUEZOIENhY2hlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgS1ZNIFBGTiBjYWNoZSB3b3JrcywgYW5kIHRoYXQgbWVhbnMgc3RhcnRpbmcgYXQgdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBgRVhQT1JUX1NZTUJPTGAgd2l0aGluIGB2aXJ0L2t2bS9wZm5jYWNoZS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgZXhwb3NlZCwgYW5kIHdoeS4gSSdtIGd1ZXNzaW5nIGl0J3MgcmVsYXRlZCB0byBzb21lIHNvcnQgb2YgaW50ZXJmYWNlIGZvciBvdGhlciBLVk0gY29tcG9uZW50cyBvciBwb3NzaWJseSBldmVuIGV4dGVybmFsIG1vZHVsZXMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgUEZOIGNhY2hlLiBMZXQgbWUgc2VlIHdoYXQgSSBjYW4gZmluZC4gSXQgbWlnaHQgZXhwb3NlIGhvb2tzIGZvciBwYWdlIGludmFsaWRhdGlvbiwgUEZOIGFsbG9jYXRpb24sIG9yIGNhY2hlIG1hbmFnZW1lbnQuIEknbSBhbnRpY2lwYXRpbmcgc29tZSBwb3RlbnRpYWwgZm9yIGludGVyLW1vZHVsZSBkZXBlbmRlbmNpZXMgaGVyZSwgYW5kIHRoZSB1c2Ugb2YgYEVYUE9SVF9TWU1CT0xgIGlzIGEga2V5IGluZGljYXRvciBvZiB0aG9zZSBkeW5hbWljcy4gVGhpcyBjb3VsZCBoYXZlIHNvbWUgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MzksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NjoxMy4yMjY5Nzk2ODZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjI0ODE5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL3BmbmNhY2hlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ2OjEzLjI3MjYwOTc2NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTc5NDY1NTUxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIFBGTiBDYWNoZSBTeW1ib2wgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgdmlydC9rdm0vcGZuY2FjaGUuY2AuIEkgaW1tZWRpYXRlbHkgc2VlIGl0J3MgY29tcGlsZWQgZGlyZWN0bHkgaW50byBga3ZtLmtvYC4gIFRoYXQgbWVhbnMgaXQgZG9lc24ndCAqbmVlZCogdG8gZXhwb3J0IHN5bWJvbHMgc2luY2UgaXRzIHByaW1hcnkgY29uc3VtZXIsIGBhcmNoL3g4Ni9rdm0veDg2LmNgLCBpcyBhbHNvIHBhcnQgb2YgdGhhdCBzYW1lIG1vZHVsZS4gIEVmZmljaWVuY3ksIGFsd2F5cyBhIGdvb2QgdGhpbmcuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhpcyBwYXRjaCB0b3VjaGVzLiBJJ3ZlIGdvdDpcblxuKiAgIGBrdm1fZ3BjX3JlZnJlc2hgXG4qICAgYGt2bV9ncGNfYWN0aXZhdGVgXG4qICAgYGt2bV9ncGNfYWN0aXZhdGVfaHZhYFxuKiAgIGBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnRgXG5cbkFueXRoaW5nIGVsc2U/IFRoZSBjb2RlIGFsc28gcmVmZXJlbmNlcyBgaHZhX3RvX3Bmbl9yZXRyeWAsIGJ1dCB0aGF0J3MgYHN0YXRpY2AsIHNvIGl0J3Mgbm90IGRpcmVjdGx5IHZpc2libGUgZnJvbSBvdXRzaWRlLiAgRm9jdXNpbmcgb24gdGhlIGV4cG9zZWQgc3R1ZmYsIGBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnRgIGlzIHRoZSBvbmx5IG5vbi1zdGF0aWMgZnVuY3Rpb24gaGVyZS5cblxuSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuICBga3ZtX2dwY19yZWZyZXNoYCBjYWxscyBgX19rdm1fZ3BjX3JlZnJlc2hgLCB3aGljaCBpbiB0dXJuIGNhbGxzIHRoYXQgYGh2YV90b19wZm5fcmV0cnlgLiBga3ZtX2dwY19hY3RpdmF0ZWAgY2FsbHMgYF9fa3ZtX2dwY19hY3RpdmF0ZWAsIHdoaWNoIGNhbGxzIGBfX2t2bV9ncGNfcmVmcmVzaGAsIHdoaWNoIHRoZW4gY2FsbHMgYGh2YV90b19wZm5fcmV0cnlgLiBBbmQgYGt2bV9ncGNfYWN0aXZhdGVfaHZhYCBjYWxscyBgX19rdm1fZ3BjX2FjdGl2YXRlYC5cblxuU28sIHRoZSBjcml0aWNhbCBzeW1ib2xzIHRvIGtlZXAgaW4gbWluZCBhcmU6XG4qICAgYGdmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydGBcbiogICBga3ZtX2dwY19yZWZyZXNoYFxuKiAgIGBrdm1fZ3BjX2FjdGl2YXRlYFxuKiAgIGBrdm1fZ3BjX2FjdGl2YXRlX2h2YWBcblxuTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IHJlYWNoYWJsZS4gQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgYGt2bV9ncGNfcmVmcmVzaGAgaXMgdXNlZCBieSBga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3RgLCBga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHNgLCBhbW9uZyBvdGhlcnMuIEZpbmUuIEFuZCBga3ZtX2dwY19hY3RpdmF0ZWAgaXMgY2FsbGVkIGZyb20gYGt2bV94ZW5faHZtX3NldF9hdHRyYCwgYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAsIGFuZCBga3ZtX3dyaXRlX3N5c3RlbV90aW1lYC4gIFJpZ2h0LCB0aGVzZSBhcmUgYWxsIGNhbGxlZCBmcm9tIEtWTSBpb2N0bHMsIHNvIHdlJ3JlIGdvb2QgdGhlcmUuXG5cbkZpbmFsbHksIHdoYXQncyByZXF1aXJlZCBjb25maWctd2lzZT8gV2VsbCwgY2xlYXJseSBgS1ZNYCBpcyBuZWVkZWQuIEFuZCBgS1ZNX1g4NmAgc2VsZWN0cyBgSEFWRV9LVk1fUEZOQ0FDSEVgLiBCdXQgYEhBVkVfS1ZNX1BGTkNBQ0hFYCBpcyByZWFsbHkganVzdCBhbiBpbmRpcmVjdCBjb25zZXF1ZW5jZSBvZiBlbmFibGluZyBgS1ZNX1g4NmAuIFNvLCB0aGUgZXNzZW50aWFsIGNvbmZpZyBpcyBzaW1wbHkgYEtWTWAuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgYXJjaC94ODYva3ZtL0tjb25maWdgIHRvIGNvbmZpcm0uLi4gWWVwLCB0aGF0J3Mgd2hhdCBJIHRob3VnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDExLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ2OjI1LjA2NzI2ODIzOFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyMjc4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NjoyNS4xMTU1MDI1NzdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMyNDA0MTQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEtWTSBhbmQgS1ZNX1hFTiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGFyb3VuZCBLVk0uIFRoZSBjb3JlIGNvbmZpZyBpcywgbmF0dXJhbGx5LCBgS1ZNYC4gSG93ZXZlciwgSSdtIHNlZWluZyBgS1ZNX1hFTmAgbWVudGlvbmVkIGFsb25nc2lkZSBpdCwgYW5kIGl0J3MgcGlxdWluZyBteSBpbnRlcmVzdC4gU3BlY2lmaWNhbGx5LCBJJ20gbm90aWNpbmcgYSBsb3Qgb2YgYWN0aXZpdHkgcmVsYXRlZCB0byBga3ZtX2dwY19hY3RpdmF0ZWAgYW5kIGBrdm1fZ3BjX3JlZnJlc2hgIHdpdGhpbiBgYXJjaC94ODYva3ZtL3hlbi5jYC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBsaW5rLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpZiBgS1ZNX1hFTmAgaXMgZXNzZW50aWFsIGluIHRoaXMgY29udGV4dC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhlIHJvbGUgb2YgYEtWTV9YRU5gLiBBaGEsIHllcywgYSBxdWljayByZXZpZXcgc2hvd3MgdGhpcyBlbmFibGVzIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlIHN1cHBvcnQuIEFuZCB0aGF0J3MgaW50ZXJlc3RpbmcgYmVjYXVzZSBYZW4gaHlwZXJjYWxsIGludGVyZmFjZXMgb2Z0ZW4gcmVseSBoZWF2aWx5IG9uIHRoZSBwZm5jYWNoZS4gVGhpcyBzdHJlbmd0aGVucyB0aGUgY2FzZSBmb3IgdW5kZXJzdGFuZGluZyBpdHMgaW5jbHVzaW9uLlxuXG5Ob3csIGxldCBtZSBjaGVjayBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZvciB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRpZWQgdG8gYEtWTV9YRU5gLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgZGVlcGVyIGNvbnRleHQgSSBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZSBjb21wb25lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTUyNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NjozMS40Mzk1NDY0MjZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMTk4MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fWEVOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE5Mz1jb25maWcgS1ZNX0hZUEVSVlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6NDY6MzEuNDkyNzUxMDg2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDM0MTIxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBLVk1fWEVOIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBLVk1fWEVOYC4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWNlc3Nhcnkgd2hlbiB0aGlzIGlzIGVuYWJsZWQsIGxpa2VseSB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9yIGEgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQgc2V0dXAuIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgaG93IGBLVk1fWEVOYCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBJJ2xsIG5lZWQgdG8gdHJhY2UgaXRzIHJlZmVyZW5jZXMgYW5kIHNlZSB3aGVyZSBpdCdzIGluY2x1ZGVkLCBwb3RlbnRpYWxseSBpbiBLY29uZmlnIGZpbGVzIG9yIHJlbGV2YW50IGtlcm5lbCBidWlsZCBzeXN0ZW1zLiBVbmRlcnN0YW5kaW5nIHRob3NlIGNvbm5lY3Rpb25zIGlzIGtleSB0byBnZXR0aW5nIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSBhbmQgZGVwZW5kZW5jaWVzLiBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gbWFwIG91dCB0aGUgY29tcGxldGUgZGVwZW5kZW5jeSBncmFwaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMzcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NjozNC44MzYxNjY4NThaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNjU3MTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fWEVOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE5Mz1jb25maWcgS1ZNX0hZUEVSVlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6NDY6MzQuOTA3ODM2MjI2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjg3MzM1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGEgc3BlY2lmaWMgYXNwZWN0IG9mIHRoZSBLVk0gYXJjaGl0ZWN0dXJlIG9uIHg4NiwgcHJvYmFibHkgcmVsYXRlZCB0byBhIGZlYXR1cmUncyBjb25maWd1cmF0aW9uLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgaXRzZWxmLCBzcGVjaWZpY2FsbHkgYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gSSdtIGd1ZXNzaW5nIHRoZSByZWxldmFudCBvcHRpb25zIG1pZ2h0IGJlIGRlZmluZWQgc29tZXdoZXJlIGFyb3VuZCBsaW5lIDIwNy4gVGhhdCdzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHNpbWlsYXIgcHJvamVjdHMuIExldCdzIHNlZSB3aGF0J3MgZGVmaW5lZCB0aGVyZSBhbmQgd2hhdCBpdCB0ZWxscyBtZS4gSSBleHBlY3QgdG8gZmluZCBzb21lIGZlYXR1cmUgZmxhZ3MsIG1heWJlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgb3B0aW9ucywgYW5kIGhvcGVmdWxseSBzb21lIGhlbHBmdWwgY29tbWVudHMgdG8gZ3VpZGUgbXkgdW5kZXJzdGFuZGluZy4gVGltZSB0byBnZXQgdGhlIGZpbGUgb3BlbiBhbmQgc3RhcnQgZGlzc2VjdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzNDUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NjozOC4yNzY1NzI3ODdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwMDpcXHRcXHQgIEh5cGVyLVYgSHlwZXJ2aXNvciBUb3AtTGV2ZWwgRnVuY3Rpb25hbCBTcGVjaWZpY2F0aW9uIChUTEZTKTpcXG4gMjAxOlxcdFxcdCAgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvdmlydHVhbGl6YXRpb24vaHlwZXItdi1vbi13aW5kb3dzL3JlZmVyZW5jZS90bGZzXFxuIDIwMjpcXHRcXHQgIFRoZXNlIGludGVyZmFjZXMgYXJlIHJlcXVpcmVkIGZvciB0aGUgY29ycmVjdCBhbmQgcGVyZm9ybWFudCBmdW5jdGlvbmluZ1xcbiAyMDM6XFx0XFx0ICBvZiBXaW5kb3dzIGFuZCBIeXBlci1WIGd1ZXN0cyBvbiBLVk0uXFxuIDIwNDpcXHRcXG4gMjA1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgXFxcIllcXFwiLlxcbiAyMDY6XFx0XFxuIDIwNzpcXHRjb25maWcgS1ZNX1hFTlxcbiAyMDg6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuIDIwOTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9YODZcXG4gMjEwOlxcdFxcdGhlbHBcXG4gMjExOlxcdFxcdCAgUHJvdmlkZXMgS1ZNIHN1cHBvcnQgZm9yIHRoZSBob3N0aW5nIFhlbiBIVk0gZ3Vlc3RzIGFuZFxcbiAyMTI6XFx0XFx0ICBwYXNzaW5nIFhlbiBoeXBlcmNhbGxzIHRvIHVzZXJzcGFjZS5cXG4gMjEzOlxcdFxcbiAyMTQ6XFx0XFx0ICBJZiBpbiBkb3VidCwgc2F5IFxcXCJOXFxcIi5cXG4gMjE1OlxcdFxcbiAyMTY6XFx0Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG4gMjE3OlxcdFxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuIDIxODpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTFxcbiAyMTk6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fWDg2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ2OjM4LjI3NjY5MTExN1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDgzMzgyNTM1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLVk0gRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgc2luY2UgYEtWTV9YRU5gIGRlcGVuZHMgb24gYEtWTV9YODZgLCBhbmQgYEtWTV9YODZgIGRlcGVuZHMgb24gYEtWTWAgKHVubGVzcyBgS1ZNX0lOVEVMYCBvciBgS1ZNX0FNRGAgYXJlICpub3QqIGVuYWJsZWQpLCBJIG5lZWQgdG8gZW5hYmxlIGJvdGggYEtWTWAgYW5kIGBLVk1fWEVOYC4gVGhlIGFpbSBpcyB0byBjaGVjayBpZiB0aGVzZSBmZWF0dXJlcyBhcmUgd29ydGggZnV6emluZy5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCBgS1ZNYCBpcyBhIHRyaXN0YXRlLCBhbmQgdGhhdCBpdCBkZXBlbmRzIG9uIHNldmVyYWwgb3RoZXIgY29uZmlncyBsaWtlIGBISUdIX1JFU19USU1FUlNgLCBgWDg2X0xPQ0FMX0FQSUNgLCBhbmQgc28gb24uIEdvb2QuIFNvLCBgS1ZNYCBhbmQgYEtWTV9YRU5gIGFyZSBkZWZpbml0ZWx5IHRoZSB0YXJnZXRzIGZvciBlbmFibGluZy5cblxuTm93LCBsZXQncyBsb29rIGF0IHRob3NlIGZvY3VzIHN5bWJvbHM6IGBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnRgLCBga3ZtX2dwY19yZWZyZXNoYCwgYGt2bV9ncGNfYWN0aXZhdGVgLCBhbmQgYGt2bV9ncGNfYWN0aXZhdGVfaHZhYC4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSBzeXprYWxsZXIuXG5cblllcywgdGhleSBhcHBlYXIgdG8gYmUhIFN5emthbGxlciBoYXMgS1ZNIGRlc2NyaXB0aW9ucyBhbmQgY2FuIGZ1enogS1ZNIGlvY3Rscy4gYGt2bV9ncGNfYWN0aXZhdGVgIGlzIHJlYWNoYWJsZSB2aWEgYGt2bV94ZW5faHZtX3NldF9hdHRyYCBhbmQgdGhlIGBLVk1fWEVOX0hWTV9TRVRfQVRUUmAgaW9jdGwuIGBrdm1fZ3BjX3JlZnJlc2hgIGlzIHVzZWQgZHVyaW5nIHZjcHUgZXhlY3V0aW9uIG9yIGV2ZW50IGluamVjdGlvbi4gYGdmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydGAgaXMgdHJpZ2dlcmVkIGJ5IG1lbW9yeSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMsIGxpa2UgYG11bm1hcGAgYW5kIGBtcHJvdGVjdGAuIFRoaXMgYWxsIGxvb2tzIHZlcnkgcHJvbWlzaW5nLlxuXG5TbywgaGVyZSdzIG15IHN1bW1hcnk6IFRoaXMgY29kZSBtb2RpZmljYXRpb24gaXMgd29ydGggZnV6emluZy4gSXQgaW52b2x2ZXMgcGZuY2FjaGUgaW52YWxpZGF0aW9uIGluIEtWTSAoaW50cm9kdWNpbmcgYSBzZXF1ZW5jZSBjb3VudGVyIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uKSwgd2hpY2ggaXMgKmNvcmUqIEtWTSBmdW5jdGlvbmFsaXR5LiBJdCdzIGFjY2Vzc2libGUgdmlhIEtWTSBpb2N0bHMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXG5cbk15IGZvY3VzIHN5bWJvbHMgYXJlOlxuLSBgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0YFxuLSBga3ZtX2dwY19yZWZyZXNoYFxuLSBga3ZtX2dwY19hY3RpdmF0ZWBcbi0gYGt2bV9ncGNfYWN0aXZhdGVfaHZhYFxuXG5BbmQgdGhlIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBlbmFibGUgYXJlIGBLVk1gIGFuZCBgS1ZNX1hFTmAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgS1ZNX1hFTmAgaXMgZW5hYmxlZC4gSXQgaXMgYSBib29sZWFuIHZhbHVlIHdoaWxlIGBLVk1gIGlzIGEgdHJpc3RhdGUuIEdpdmVuIHRoYXQgYEtWTV9YODZgIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYXMgYSBkZXBlbmRlbmN5IGFzIGxvbmcgYXMgYEtWTWAgaXMgZW5hYmxlZCwgYW5kIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYCBhcmUgbm90IHNldCB0byAnbicuIEkgd2lsbCBqdXN0IHNwZWNpZnkgYEtWTWAgYW5kIGBLVk1fWEVOYC4gTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrIGlmIGBrdm1fZ3BjX2FjdGl2YXRlX2h2YWAgaXMgYWN0dWFsbHkgdXNlZCBhbmQgdGhlbiBJIHNob3VsZCBiZSBnb29kIHRvIG1vdmUgZm9yd2FyZCB3aXRoIHRoZSBmdXp6aW5nIGNhbXBhaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjg4OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ2OjQ5LjExMDUxODc1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTkyNDc3NjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9ncGNfYWN0aXZhdGVfaHZhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veGVuLmM9NzQ2PWludCBrdm1feGVuX2h2bV9zZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTc5Ny1cXHRcXHRcXHR9IGVsc2Uge1xcbmFyY2gveDg2L2t2bS94ZW4uYzo3OTg6XFx0XFx0XFx0XFx0ciA9IGt2bV9ncGNfYWN0aXZhdGVfaHZhKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZSxcXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzk5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAodW5zaWduZWQgbG9uZylodmEsIFBBR0VfU0laRSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9OTA2PWludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTM3LVxcbmFyY2gveDg2L2t2bS94ZW4uYzo5Mzg6XFx0XFx0XFx0ciA9IGt2bV9ncGNfYWN0aXZhdGVfaHZhKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnhlbi52Y3B1X2luZm9fY2FjaGUsXFxuYXJjaC94ODYva3ZtL3hlbi5jLTkzOS1cXHRcXHRcXHRcXHRcXHRcXHQgZGF0YS1cXHUwMDNldS5odmEsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTQ1OD1pbnQga3ZtX2dwY19hY3RpdmF0ZShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgbGVuKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNDYwLS8qKlxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxNDYxOiAqIGt2bV9ncGNfYWN0aXZhdGVfaHZhIC0gcHJlcGFyZSBhIGNhY2hlZCBrZXJuZWwgbWFwcGluZyBhbmQgSFBBIGZvciBhIGdpdmVuIEhWQS5cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ2Mi0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE0NzMtICovXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE0NzQ6aW50IGt2bV9ncGNfYWN0aXZhdGVfaHZhKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHVuc2lnbmVkIGxvbmcgaHZhLCB1bnNpZ25lZCBsb25nIGxlbik7XFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE0NzUtXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTQzNj1pbnQga3ZtX2dwY19hY3RpdmF0ZShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgbGVuKVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy00NDctXFxudmlydC9rdm0vcGZuY2FjaGUuYzo0NDg6aW50IGt2bV9ncGNfYWN0aXZhdGVfaHZhKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHVuc2lnbmVkIGxvbmcgdWh2YSwgdW5zaWduZWQgbG9uZyBsZW4pXFxudmlydC9rdm0vcGZuY2FjaGUuYy00NDkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0Njo1MS4zMDMwMDExNjFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg2NzIzNzE5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgQXR0cmlidXRlIFNldHRpbmcgaW4gS1ZNL1hlbiBJbnRlcmFjdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBJIHNlZSBpdCwgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uLCBpcyBkZWZpbml0ZWx5IGludm9sdmVkIGluIGBrdm1feGVuX2h2bV9zZXRfYXR0cmAgYW5kIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgLiBHb3QgaXQuIFRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCBodW5jaCBhYm91dCBpdHMgcm9sZSBpbiB0aGUgS1ZNL1hlbiBIVk0gaW50ZWdyYXRpb24gbGF5ZXIsIHdoaWNoIGlzIHdoYXQgSSB0aG91Z2h0IEkgd291bGQgZmluZC5cblxuTm93LCB3aXRoIHRoaXMgaW5mb3JtYXRpb24gaW4gaGFuZCwgSeKAmW0gZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgc2V0dXAuIFRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIHVzZSBgc2V0LXJlc3VsdHNgIHRvIGdldCBzb21lIGZ1cnRoZXIgaW5mb3JtYXRpb24gb24gdGhlc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg4MCwiT3V0cHV0VG9rZW5zIjoxMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0Njo1Ni4xNzAyNDMwMzlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjYwMTgwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX1hFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydFwiLFxuICAgIFwia3ZtX2dwY19yZWZyZXNoXCIsXG4gICAgXCJrdm1fZ3BjX2FjdGl2YXRlXCIsXG4gICAgXCJrdm1fZ3BjX2FjdGl2YXRlX2h2YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZm5jYWNoZSBpbnZhbGlkYXRpb24gbG9naWMgaW4gS1ZNLCBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBieSBpbnRyb2R1Y2luZyBhIHNlcXVlbmNlIGNvdW50ZXIuIFRoaXMgaXMgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fWEVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0XCIsXG4gICAgXCJrdm1fZ3BjX3JlZnJlc2hcIixcbiAgICBcImt2bV9ncGNfYWN0aXZhdGVcIixcbiAgICBcImt2bV9ncGNfYWN0aXZhdGVfaHZhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBmbmNhY2hlIGludmFsaWRhdGlvbiBsb2dpYyBpbiBLVk0sIGZpeGluZyBhIHJhY2UgY29uZGl0aW9uIGJ5IGludHJvZHVjaW5nIGEgc2VxdWVuY2UgY291bnRlci4gVGhpcyBpcyBjb3JlIEtWTSBmdW5jdGlvbmFsaXR5IHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqjcts[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 17:44:02 +0000 UTC FinishedAt: 2026-08-05 17:46:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_XEN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_XEN" ], "series_id": "f1ca4693-e3dc-4ca8-9029-4028548cb6b7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "gfn_to_pfn_cache_invalidate_start", "kvm_gpc_refresh", "kvm_gpc_activate", "kvm_gpc_activate_hva" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fWEVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0JiMzNDssCiAgICAmIzM0O2t2bV9ncGNfcmVmcmVzaCYjMzQ7LAogICAgJiMzNDtrdm1fZ3BjX2FjdGl2YXRlJiMzNDssCiAgICAmIzM0O2t2bV9ncGNfYWN0aXZhdGVfaHZhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZm5jYWNoZSBpbnZhbGlkYXRpb24gbG9naWMgaW4gS1ZNLCBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBieSBpbnRyb2R1Y2luZyBhIHNlcXVlbmNlIGNvdW50ZXIuIFRoaXMgaXMgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlNmNlMjMwNDRkNmY4NmMyNWE5MzRkNGJlZjA4YmI4ZmFmZmM0OWI5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgNSAxNzo0NToxMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzEuLjRjMDk3MDg1NWM4YjIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTgwNSw2ICYjNDM7ODA1LDcgQEAgc3RydWN0IGt2bSB7XG4gXHQvKiBGb3IgbWFuYWdlbWVudCAvIGludmFsaWRhdGlvbiBvZiBnZm5fdG9fcGZuX2NhY2hlcyAqL1xuIFx0c3BpbmxvY2tfdCBncGNfbG9jaztcbiBcdHN0cnVjdCBsaXN0X2hlYWQgZ3BjX2xpc3Q7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBncGNfaW52YWxpZGF0ZV9zZXE7XG4gXG4gXHQvKlxuIFx0ICogY3JlYXRlZF92Y3B1cyBpcyBwcm90ZWN0ZWQgYnkga3ZtLVx1MDAzZWxvY2ssIGFuZCBpcyBpbmNyZW1lbnRlZFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3BmbmNhY2hlLmMgYi92aXJ0L2t2bS9wZm5jYWNoZS5jXG5pbmRleCA3MjhkMmMxYjQ4OGE4Li44NzdkNmQxZDgyMzMyIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vcGZuY2FjaGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vcGZuY2FjaGUuY1xuQEAgLTI2LDM0ICYjNDM7MjYsNDAgQEAgdm9pZCBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKVxuIHtcbiBcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGM7XG4mIzQzO1x0Ym9vbCB3YWtlID0gZmFsc2U7XG4gXG4gXHRzcGluX2xvY2soXHUwMDI2a3ZtLVx1MDAzZWdwY19sb2NrKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoZ3BjLCBcdTAwMjZrdm0tXHUwMDNlZ3BjX2xpc3QsIGxpc3QpIHtcbiBcdFx0cmVhZF9sb2NrX2lycShcdTAwMjZncGMtXHUwMDNlbG9jayk7XG4gXG4gXHRcdC8qIE9ubHkgYSBzaW5nbGUgcGFnZSBzbyBubyBuZWVkIHRvIGNhcmUgYWJvdXQgbGVuZ3RoICovXG4tXHRcdGlmIChncGMtXHUwMDNldmFsaWQgXHUwMDI2XHUwMDI2ICFpc19lcnJvcl9ub3Nsb3RfcGZuKGdwYy1cdTAwM2VwZm4pIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgZ3BjLVx1MDAzZXVodmEgXHUwMDNlPSBzdGFydCBcdTAwMjZcdTAwMjYgZ3BjLVx1MDAzZXVodmEgXHUwMDNjIGVuZCkge1xuLVx0XHRcdHJlYWRfdW5sb2NrX2lycShcdTAwMjZncGMtXHUwMDNlbG9jayk7XG4tXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBUaGVyZSBpcyBhIHNtYWxsIHdpbmRvdyBoZXJlIHdoZXJlIHRoZSBjYWNoZSBjb3VsZFxuLVx0XHRcdCAqIGJlIG1vZGlmaWVkLCBhbmQgaW52YWxpZGF0aW9uIHdvdWxkIG5vIGxvbmdlciBiZVxuLVx0XHRcdCAqIG5lY2Vzc2FyeS4gSGVuY2UgY2hlY2sgYWdhaW4gd2hldGhlciBpbnZhbGlkYXRpb25cbi1cdFx0XHQgKiBpcyBzdGlsbCBuZWNlc3Nhcnkgb25jZSB0aGUgd3JpdGUgbG9jayBoYXMgYmVlblxuLVx0XHRcdCAqIGFjcXVpcmVkLlxuLVx0XHRcdCAqL1xuLVxuLVx0XHRcdHdyaXRlX2xvY2tfaXJxKFx1MDAyNmdwYy1cdTAwM2Vsb2NrKTtcbi1cdFx0XHRpZiAoZ3BjLVx1MDAzZXZhbGlkIFx1MDAyNlx1MDAyNiAhaXNfZXJyb3Jfbm9zbG90X3BmbihncGMtXHUwMDNlcGZuKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgZ3BjLVx1MDAzZXVodmEgXHUwMDNlPSBzdGFydCBcdTAwMjZcdTAwMjYgZ3BjLVx1MDAzZXVodmEgXHUwMDNjIGVuZClcbi1cdFx0XHRcdGdwYy1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuLVx0XHRcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2Z3BjLVx1MDAzZWxvY2spO1xuLVx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKGdwYy1cdTAwM2V1aHZhIFx1MDAzZT0gc3RhcnQgXHUwMDI2XHUwMDI2IGdwYy1cdTAwM2V1aHZhIFx1MDAzYyBlbmQpIHtcbiYjNDM7XHRcdFx0d2FrZSA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoZ3BjLVx1MDAzZXZhbGlkIFx1MDAyNlx1MDAyNiAhaXNfZXJyb3Jfbm9zbG90X3BmbihncGMtXHUwMDNlcGZuKSkge1xuJiM0MztcdFx0XHRcdHJlYWRfdW5sb2NrX2lycShcdTAwMjZncGMtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdFx0XHRcdC8qXG4mIzQzO1x0XHRcdFx0ICogVGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaGVyZSB3aGVyZSB0aGUgY2FjaGUgY291bGRcbiYjNDM7XHRcdFx0XHQgKiBiZSBtb2RpZmllZCwgYW5kIGludmFsaWRhdGlvbiB3b3VsZCBubyBsb25nZXIgYmVcbiYjNDM7XHRcdFx0XHQgKiBuZWNlc3NhcnkuIEhlbmNlIGNoZWNrIGFnYWluIHdoZXRoZXIgaW52YWxpZGF0aW9uXG4mIzQzO1x0XHRcdFx0ICogaXMgc3RpbGwgbmVjZXNzYXJ5IG9uY2UgdGhlIHdyaXRlIGxvY2sgaGFzIGJlZW5cbiYjNDM7XHRcdFx0XHQgKiBhY3F1aXJlZC5cbiYjNDM7XHRcdFx0XHQgKi9cbiYjNDM7XG4mIzQzO1x0XHRcdFx0d3JpdGVfbG9ja19pcnEoXHUwMDI2Z3BjLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0XHRcdGlmIChncGMtXHUwMDNldmFsaWQgXHUwMDI2XHUwMDI2ICFpc19lcnJvcl9ub3Nsb3RfcGZuKGdwYy1cdTAwM2VwZm4pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdCAgICBncGMtXHUwMDNldWh2YSBcdTAwM2U9IHN0YXJ0IFx1MDAyNlx1MDAyNiBncGMtXHUwMDNldWh2YSBcdTAwM2MgZW5kKVxuJiM0MztcdFx0XHRcdFx0Z3BjLVx1MDAzZXZhbGlkID0gZmFsc2U7XG4mIzQzO1x0XHRcdFx0d3JpdGVfdW5sb2NrX2lycShcdTAwMjZncGMtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdH1cbiBcdFx0fVxuIFxuIFx0XHRyZWFkX3VubG9ja19pcnEoXHUwMDI2Z3BjLVx1MDAzZWxvY2spO1xuIFx0fVxuJiM0MztcdGlmICh3YWtlKVxuJiM0MztcdFx0a3ZtLVx1MDAzZWdwY19pbnZhbGlkYXRlX3NlcSYjNDM7JiM0Mzs7XG4gXHRzcGluX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlZ3BjX2xvY2spO1xuIH1cbiBcbkBAIC0xMjQsNyAmIzQzOzEzMCw4IEBAIHN0YXRpYyB2b2lkIGdwY191bm1hcChrdm1fcGZuX3QgcGZuLCB2b2lkICpraHZhKVxuICNlbmRpZlxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxLFxuJiM0MztcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgZ3BjX3NlcSlcbiB7XG4gXHQvKlxuIFx0ICogbW5fYWN0aXZlX2ludmFsaWRhdGVfY291bnQgYWN0cyBmb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzXG5AQCAtMTQ5LDcgJiM0MzsxNTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc1xuIFx0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgbW11X2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLlxuIFx0ICovXG4gXHRzbXBfcm1iKCk7XG4tXHRyZXR1cm4ga3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcSAhPSBtbXVfc2VxO1xuJiM0MztcdHJldHVybiBrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxICE9IG1tdV9zZXEgfHwga3ZtLVx1MDAzZWdwY19pbnZhbGlkYXRlX3NlcSAhPSBncGNfc2VxO1xuIH1cbiBcbiBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbkBAIC0xNTksNiAmIzQzOzE2Niw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuIFx0a3ZtX3Bmbl90IG5ld19wZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDtcbiBcdHZvaWQgKm5ld19raHZhID0gTlVMTDtcbiBcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGdwY19zZXE7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcbiBcdHN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7XG5AQCAtMTgyLDYgJiM0MzsxOTAsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbiBcbiBcdGRvIHtcbiBcdFx0bW11X3NlcSA9IGdwYy1cdTAwM2Vrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xuJiM0MztcdFx0Z3BjX3NlcSA9IGdwYy1cdTAwM2Vrdm0tXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxO1xuIFx0XHRzbXBfcm1iKCk7XG4gXG4gXHRcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2Z3BjLVx1MDAzZWxvY2spO1xuQEAgLTIzMiw3ICYjNDM7MjQxLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4gXHRcdCAqIGF0dGVtcHRpbmcgdG8gcmVmcmVzaC5cbiBcdFx0ICovXG4gXHRcdFdBUk5fT05fT05DRShncGMtXHUwMDNldmFsaWQpO1xuLVx0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cdTAwM2Vrdm0sIG1tdV9zZXEpKTtcbiYjNDM7XHR9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLVx1MDAzZWt2bSwgbW11X3NlcSwgZ3BjX3NlcSkpO1xuIFxuIFx0Z3BjLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbiBcdGdwYy1cdTAwM2VwZm4gPSBuZXdfcGZuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX1hFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydCYjMzQ7LAogICAgJiMzNDtrdm1fZ3BjX3JlZnJlc2gmIzM0OywKICAgICYjMzQ7a3ZtX2dwY19hY3RpdmF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fZ3BjX2FjdGl2YXRlX2h2YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGZuY2FjaGUgaW52YWxpZGF0aW9uIGxvZ2ljIGluIEtWTSwgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gYnkgaW50cm9kdWNpbmcgYSBzZXF1ZW5jZSBjb3VudGVyLiBUaGlzIGlzIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTZjZTIzMDQ0ZDZmODZjMjVhOTM0ZDRiZWYwOGJiOGZhZmZjNDliOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDUgMTc6NDU6MTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggYWI4Y2ZhZWM4MmQzMS4uNGMwOTcwODU1YzhiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaApAQCAtODA1LDYgJiM0Mzs4MDUsNyBAQCBzdHJ1Y3Qga3ZtIHsKIAkvKiBGb3IgbWFuYWdlbWVudCAvIGludmFsaWRhdGlvbiBvZiBnZm5fdG9fcGZuX2NhY2hlcyAqLwogCXNwaW5sb2NrX3QgZ3BjX2xvY2s7CiAJc3RydWN0IGxpc3RfaGVhZCBncGNfbGlzdDsKJiM0MzsJdW5zaWduZWQgbG9uZyBncGNfaW52YWxpZGF0ZV9zZXE7CiAKIAkvKgogCSAqIGNyZWF0ZWRfdmNwdXMgaXMgcHJvdGVjdGVkIGJ5IGt2bS0mZ3Q7bG9jaywgYW5kIGlzIGluY3JlbWVudGVkCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9wZm5jYWNoZS5jIGIvdmlydC9rdm0vcGZuY2FjaGUuYwppbmRleCA3MjhkMmMxYjQ4OGE4Li44NzdkNmQxZDgyMzMyIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9wZm5jYWNoZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmMKQEAgLTI2LDM0ICYjNDM7MjYsNDAgQEAgdm9pZCBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjOwomIzQzOwlib29sIHdha2UgPSBmYWxzZTsKIAogCXNwaW5fbG9jaygmYW1wO2t2bS0mZ3Q7Z3BjX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZ3BjLCAmYW1wO2t2bS0mZ3Q7Z3BjX2xpc3QsIGxpc3QpIHsKIAkJcmVhZF9sb2NrX2lycSgmYW1wO2dwYy0mZ3Q7bG9jayk7CiAKIAkJLyogT25seSBhIHNpbmdsZSBwYWdlIHNvIG5vIG5lZWQgdG8gY2FyZSBhYm91dCBsZW5ndGggKi8KLQkJaWYgKGdwYy0mZ3Q7dmFsaWQgJmFtcDsmYW1wOyAhaXNfZXJyb3Jfbm9zbG90X3BmbihncGMtJmd0O3BmbikgJmFtcDsmYW1wOwotCQkgICAgZ3BjLSZndDt1aHZhICZndDs9IHN0YXJ0ICZhbXA7JmFtcDsgZ3BjLSZndDt1aHZhICZsdDsgZW5kKSB7Ci0JCQlyZWFkX3VubG9ja19pcnEoJmFtcDtncGMtJmd0O2xvY2spOwotCi0JCQkvKgotCQkJICogVGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaGVyZSB3aGVyZSB0aGUgY2FjaGUgY291bGQKLQkJCSAqIGJlIG1vZGlmaWVkLCBhbmQgaW52YWxpZGF0aW9uIHdvdWxkIG5vIGxvbmdlciBiZQotCQkJICogbmVjZXNzYXJ5LiBIZW5jZSBjaGVjayBhZ2FpbiB3aGV0aGVyIGludmFsaWRhdGlvbgotCQkJICogaXMgc3RpbGwgbmVjZXNzYXJ5IG9uY2UgdGhlIHdyaXRlIGxvY2sgaGFzIGJlZW4KLQkJCSAqIGFjcXVpcmVkLgotCQkJICovCi0KLQkJCXdyaXRlX2xvY2tfaXJxKCZhbXA7Z3BjLSZndDtsb2NrKTsKLQkJCWlmIChncGMtJmd0O3ZhbGlkICZhbXA7JmFtcDsgIWlzX2Vycm9yX25vc2xvdF9wZm4oZ3BjLSZndDtwZm4pICZhbXA7JmFtcDsKLQkJCSAgICBncGMtJmd0O3VodmEgJmd0Oz0gc3RhcnQgJmFtcDsmYW1wOyBncGMtJmd0O3VodmEgJmx0OyBlbmQpCi0JCQkJZ3BjLSZndDt2YWxpZCA9IGZhbHNlOwotCQkJd3JpdGVfdW5sb2NrX2lycSgmYW1wO2dwYy0mZ3Q7bG9jayk7Ci0JCQljb250aW51ZTsKJiM0MzsJCWlmIChncGMtJmd0O3VodmEgJmd0Oz0gc3RhcnQgJmFtcDsmYW1wOyBncGMtJmd0O3VodmEgJmx0OyBlbmQpIHsKJiM0MzsJCQl3YWtlID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCQlpZiAoZ3BjLSZndDt2YWxpZCAmYW1wOyZhbXA7ICFpc19lcnJvcl9ub3Nsb3RfcGZuKGdwYy0mZ3Q7cGZuKSkgewomIzQzOwkJCQlyZWFkX3VubG9ja19pcnEoJmFtcDtncGMtJmd0O2xvY2spOwomIzQzOwomIzQzOwkJCQkvKgomIzQzOwkJCQkgKiBUaGVyZSBpcyBhIHNtYWxsIHdpbmRvdyBoZXJlIHdoZXJlIHRoZSBjYWNoZSBjb3VsZAomIzQzOwkJCQkgKiBiZSBtb2RpZmllZCwgYW5kIGludmFsaWRhdGlvbiB3b3VsZCBubyBsb25nZXIgYmUKJiM0MzsJCQkJICogbmVjZXNzYXJ5LiBIZW5jZSBjaGVjayBhZ2FpbiB3aGV0aGVyIGludmFsaWRhdGlvbgomIzQzOwkJCQkgKiBpcyBzdGlsbCBuZWNlc3Nhcnkgb25jZSB0aGUgd3JpdGUgbG9jayBoYXMgYmVlbgomIzQzOwkJCQkgKiBhY3F1aXJlZC4KJiM0MzsJCQkJICovCiYjNDM7CiYjNDM7CQkJCXdyaXRlX2xvY2tfaXJxKCZhbXA7Z3BjLSZndDtsb2NrKTsKJiM0MzsJCQkJaWYgKGdwYy0mZ3Q7dmFsaWQgJmFtcDsmYW1wOyAhaXNfZXJyb3Jfbm9zbG90X3BmbihncGMtJmd0O3BmbikgJmFtcDsmYW1wOwomIzQzOwkJCQkgICAgZ3BjLSZndDt1aHZhICZndDs9IHN0YXJ0ICZhbXA7JmFtcDsgZ3BjLSZndDt1aHZhICZsdDsgZW5kKQomIzQzOwkJCQkJZ3BjLSZndDt2YWxpZCA9IGZhbHNlOwomIzQzOwkJCQl3cml0ZV91bmxvY2tfaXJxKCZhbXA7Z3BjLSZndDtsb2NrKTsKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJfQogCQl9CiAKIAkJcmVhZF91bmxvY2tfaXJxKCZhbXA7Z3BjLSZndDtsb2NrKTsKIAl9CiYjNDM7CWlmICh3YWtlKQomIzQzOwkJa3ZtLSZndDtncGNfaW52YWxpZGF0ZV9zZXEmIzQzOyYjNDM7OwogCXNwaW5fdW5sb2NrKCZhbXA7a3ZtLSZndDtncGNfbG9jayk7CiB9CiAKQEAgLTEyNCw3ICYjNDM7MTMwLDggQEAgc3RhdGljIHZvaWQgZ3BjX3VubWFwKGt2bV9wZm5fdCBwZm4sIHZvaWQgKmtodmEpCiAjZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NlcSkKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxLAomIzQzOwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZ3BjX3NlcSkKIHsKIAkvKgogCSAqIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IGFjdHMgZm9yIGFsbCBpbnRlbnRzIGFuZCBwdXJwb3NlcwpAQCAtMTQ5LDcgJiM0MzsxNTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfcwogCSAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC4KIAkgKi8KIAlzbXBfcm1iKCk7Ci0JcmV0dXJuIGt2bS0mZ3Q7bW11X2ludmFsaWRhdGVfc2VxICE9IG1tdV9zZXE7CiYjNDM7CXJldHVybiBrdm0tJmd0O21tdV9pbnZhbGlkYXRlX3NlcSAhPSBtbXVfc2VxIHx8IGt2bS0mZ3Q7Z3BjX2ludmFsaWRhdGVfc2VxICE9IGdwY19zZXE7CiB9CiAKIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQpAQCAtMTU5LDYgJiM0MzsxNjYsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYykKIAlrdm1fcGZuX3QgbmV3X3BmbiA9IEtWTV9QRk5fRVJSX0ZBVUxUOwogCXZvaWQgKm5ld19raHZhID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIG1tdV9zZXE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZ3BjX3NlcTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCXN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7CkBAIC0xODIsNiAmIzQzOzE5MCw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQogCiAJZG8gewogCQltbXVfc2VxID0gZ3BjLSZndDtrdm0tJmd0O21tdV9pbnZhbGlkYXRlX3NlcTsKJiM0MzsJCWdwY19zZXEgPSBncGMtJmd0O2t2bS0mZ3Q7Z3BjX2ludmFsaWRhdGVfc2VxOwogCQlzbXBfcm1iKCk7CiAKIAkJd3JpdGVfdW5sb2NrX2lycSgmYW1wO2dwYy0mZ3Q7bG9jayk7CkBAIC0yMzIsNyAmIzQzOzI0MSw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKQogCQkgKiBhdHRlbXB0aW5nIHRvIHJlZnJlc2guCiAJCSAqLwogCQlXQVJOX09OX09OQ0UoZ3BjLSZndDt2YWxpZCk7Ci0JfSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy0mZ3Q7a3ZtLCBtbXVfc2VxKSk7CiYjNDM7CX0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtJmd0O2t2bSwgbW11X3NlcSwgZ3BjX3NlcSkpOwogCiAJZ3BjLSZndDt2YWxpZCA9IHRydWU7CiAJZ3BjLSZndDtwZm4gPSBuZXdfcGZuOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTEzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtWTSBQRk4gQ2FjaGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSwgYW5kIGl0JiMzOTtzIHRvdWNoaW5nIHNvbWUgY29yZSBLVk0gaW5mcmFzdHJ1Y3R1cmU6IGBpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhgIGFuZCBgdmlydC9rdm0vcGZuY2FjaGUuY2AuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBpbnRyb2R1Y2luZyB0aGlzIGBncGNfaW52YWxpZGF0ZV9zZXFgIGZpZWxkIGludG8gdGhlIGBzdHJ1Y3Qga3ZtYCBhbmQsIGZyb20gd2hhdCBJJiMzOTttIGdhdGhlcmluZywgaW5jcmVtZW50aW5nIGl0IGluIGBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnRgIHdoZW4gYHdha2VgIGlzIHRydWUuIFJpZ2h0LCBhbmQgSSBzZWUgaXQmIzM5O3MgYWxzbyBpbXBhY3RpbmcgYG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZWAgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIGBrdm0tJmd0O2dwY19pbnZhbGlkYXRlX3NlcSAhPSBncGNfc2VxYC4gVGhpcyBpcyBwcmV0dHkgY2xlYXJseSBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSBwZm5jYWNoZSBtZWNoYW5pc20gd2l0aGluIEtWTSwgbm90aGluZyBzdWJ0bGUgaGVyZS4KClNvLCB0aGUgbmV4dCBvYnZpb3VzIHN0ZXAgaXMgdG8gZGlnIGludG8gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIEtjb25maWcgb3B0aW9ucyBhcmUgcmVsZXZhbnQgdG8gdGhpcyBjaGFuZ2UgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgZW5hYmxlZCBjb3JyZWN0bHkuIFNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyBgdmlydC9rdm0vcGZuY2FjaGUuY2AsIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgS2NvbmZpZyBmb3IgdGhlIEtWTSBidWlsZCBvcHRpb25zLiBUaGVuLCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHNlZSB3aGF0IGZpbGVzIGFyZSBsaW5rZWQgd2hlcmUsIEkmIzM5O2xsIGBncmVwYCBmb3IgYHBmbmNhY2hlLm9gIGluIGB2aXJ0L2t2bS9NYWtlZmlsZWAuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBwaWVjZSBmaXRzIGludG8gdGhlIG92ZXJhbGwgS1ZNIGJ1aWxkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGZuY2FjaGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA1NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEtWTSBNYWtlZmlsZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgS1ZNIG1vZHVsZSBpcyBidWlsdCwgc28gdGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgdmlydC9rdm0vTWFrZWZpbGVgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgc2VjcmV0cyB0aGlzIGZpbGUgaG9sZHMuIEl0JiMzOTtzIHRoZSBjZW50cmFsIHBsYXlib29rIGZvciBob3cgdGhlIEtWTSBjb21wb25lbnRzIGFyZSBjb21waWxlZCBhbmQgbGlua2VkLCBzbyBpdCYjMzk7cyBhIGNyaXRpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGRlcGVuZGVuY3kgdHJlZSwgaW5jbHVkZSBwYXRocywgY29tcGlsYXRpb24gZmxhZ3MsIGFuZCBsaW5raW5nIHJ1bGVzIHRoYXQgZGVmaW5lIHRoZSBLVk0mIzM5O3MgYnVpbGQgcHJvY2Vzcy4gVGhpcyBmaWxlIHdpbGwgdGVsbCBtZSB3aGljaCBzb3VyY2UgZmlsZXMgYXJlIGludm9sdmVkLCB3aGljaCBvYmplY3QgZmlsZXMgdGhleSBnZW5lcmF0ZSwgYW5kIGhvdyB0aG9zZSBvYmplY3QgZmlsZXMgY29tZSB0b2dldGhlciB0byBjcmVhdGUgdGhlIGZpbmFsIEtWTSBtb2R1bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGZuY2FjaGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vTWFrZWZpbGUua3ZtPTEzPWt2bS0kKENPTkZJR19IQVZFX0tWTV9ESVJUWV9SSU5HKSAmIzQzOz0gJChLVk0pL2RpcnR5X3Jpbmcub1xudmlydC9rdm0vTWFrZWZpbGUua3ZtOjE0Omt2bS0kKENPTkZJR19IQVZFX0tWTV9QRk5DQUNIRSkgJiM0Mzs9ICQoS1ZNKS9wZm5jYWNoZS5vXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm0tMTUta3ZtLSQoQ09ORklHX0tWTV9HVUVTVF9NRU1GRCkgJiM0Mzs9ICQoS1ZNKS9ndWVzdF9tZW1mZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM5MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEtWTSBQRk4gQ2FjaGUgUmVxdWlyZW1lbnQqKgoKQWxyaWdodCwgc28gSSBzZWUgd2UgbmVlZCBgQ09ORklHX0hBVkVfS1ZNX1BGTkNBQ0hFYCDigJMgdGhhdCYjMzk7cyB0aGUga2V5LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgZnJvbSBhbiBhcmNoaXRlY3R1cmFsIHBlcnNwZWN0aXZlLCBpcyB0byB0cmFjZSBiYWNrIHRoZSBlbmFibGluZyBjb25kaXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHByZWNpc2VseSBmbGlwcyB0aGF0IHN3aXRjaCwgd2hhdCBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMgdHJpZ2dlciB0aGUgc2V0dGluZyBvZiBgSEFWRV9LVk1fUEZOQ0FDSEVgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gdG8gdW5kZXJzdGFuZCB3aHkgaXQmIzM5O3MgcmVxdWlyZWQgaW4gdGhpcyBzcGVjaWZpYyBzY2VuYXJpbyBhbmQgaWRlbnRpZnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBvcHRpbWl6YXRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgdGVsbHMgdXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEhBVkVfS1ZNX1BGTkNBQ0hFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1fWDg2XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjUtXHRzZWxlY3QgSEFWRV9LVk1fSVJRQ0hJUFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjY6XHRzZWxlY3QgSEFWRV9LVk1fUEZOQ0FDSEVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTI3LVx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfVFNPXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcwNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDExOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gdGhlIGBLVk1fWDg2YCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBjbGVhcmx5IHdoYXQmIzM5O3MgZHJpdmluZyB0aGlzLiBCdXQgaXMgdGhhdCBpdD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBLVk1gIGl0c2VsZiBpc24mIzM5O3Qgc3VmZmljaWVudC4gTXkgaW5pdGlhbCBjaGVjayBwb2ludHMgdG8gYENPTkZJR19LVk1gIGFzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gZmxhZyB0byBiZSBjb25jZXJuZWQgd2l0aC4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBhZmZlY3RlZCBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gdGhlc2UgZnVuY3Rpb25zOiBgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0YCwgYGh2YV90b19wZm5fcmV0cnlgICh3aGljaCwgaW50ZXJlc3RpbmdseSwgaXMgZGVmaW5lZCBhcyBgc3RhdGljYCksIGFuZCBgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlYCAod2hpY2ggaXMgYHN0YXRpYyBpbmxpbmVgKS4gVGhlIGZhY3QgdGhhdCBgaHZhX3RvX3Bmbl9yZXRyeWAgYW5kIGBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGVgIGFyZSBzdGF0aWMgc3VnZ2VzdHMgdGhleSBtYXkgaGF2ZSBiZWVuIGlubGluZWQsIG9yIGFyZSBsb2NhbCB0byB0aGUgY29kZSB3aGVyZSB0aGV5IGFyZSB1c2VkLgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIG5vdyBpcywgd2hhdCBhcmUgdGhlICpub24tc3RhdGljKiBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGluZyBgaHZhX3RvX3Bmbl9yZXRyeWA/IFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgaW1wYWN0IGxpZXMsIGFuZCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGxhcmdlciBjb250ZXh0IGluIHdoaWNoIHRoaXMgYHJldHJ5YCBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIGludm9rZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgKnJlbHlpbmcqIG9uIHRoZSBjaGFuZ2VzIGluc2lkZSB0aGUgYGh2YV90b19wZm5fcmV0cnlgIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodmFfdG9fcGZuX3JldHJ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vcGZuY2FjaGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9wZm5jYWNoZS5jPTEzMz1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxLFxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtMTYxLVxudmlydC9rdm0vcGZuY2FjaGUuYzoxNjI6c3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTE2My17XG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYz0yNjU9c3RhdGljIGludCBfX2t2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSlcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMzMC1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzMxOlx0LyogTm90ZTogdGhlIG9mZnNldCBtdXN0IGJlIGNvcnJlY3QgYmVmb3JlIGNhbGxpbmcgaHZhX3RvX3Bmbl9yZXRyeSgpICovXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMzMi1cdGdwYy1cdTAwM2V1aHZhICYjNDM7PSBwYWdlX29mZnNldDtcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTMzOC1cdGlmICghZ3BjLVx1MDAzZXZhbGlkIHx8IGh2YV9jaGFuZ2UpIHtcbnZpcnQva3ZtL3BmbmNhY2hlLmM6MzM5Olx0XHRyZXQgPSBodmFfdG9fcGZuX3JldHJ5KGdwYyk7XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM0MC1cdH0gZWxzZSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MDkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqVHJhY2luZyB0aGUgQ2FsbCBQYXRoIG9mIGBfX2t2bV9ncGNfcmVmcmVzaGAqKgoKT2theSwgc28gYF9fa3ZtX2dwY19yZWZyZXNoYCBpcyB0aGUgdGFyZ2V0LCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHVwc3RyZWFtIGNhbGxlcihzKS4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdGFzay4gSSBrbm93IGVub3VnaCBhYm91dCB0aGUgS1ZNIGludGVybmFscyB0byByZWNvZ25pemUgdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIGhhdmUgYSBnZW5lcmFsIGlkZWEgb2YgaXRzIHB1cnBvc2Ug4oCTIHNvbWV0aGluZyByZWxhdGVkIHRvIGdsb2JhbCBwYWdlIGNhY2hlIHJlZnJlc2gsIEkmIzM5O2QgZ3Vlc3MuIE5vdyBJIG5lZWQgdG8ga25vdyB0aGUgaW1tZWRpYXRlICYjMzQ7cGFyZW50JiMzNDsgb3IgY2FsbGVyLiBUaGUgcXVlc3Rpb24gbm93IGlzOiBXaGF0IGNvZGUgcGF0aCB1bHRpbWF0ZWx5IGxlYWRzIHRvIHRoZSBleGVjdXRpb24gb2YgYF9fa3ZtX2dwY19yZWZyZXNoYD8gSSBuZWVkIHRvIHVzZSBkZWJ1Z2dpbmcgdG9vbHMsIG9yIHBvc3NpYmx5IGRlbHZlIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIHN0YXJ0IHRyYWNpbmcgdGhlIGZ1bmN0aW9uIGNhbGxzIHRoYXQgbGVhZCB0byB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2t2bV9ncGNfcmVmcmVzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL3BmbmNhY2hlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vcGZuY2FjaGUuYz0xNjI9c3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYy0yNjQtXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjI2NTpzdGF0aWMgaW50IF9fa3ZtX2dwY19yZWZyZXNoKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhKVxudmlydC9rdm0vcGZuY2FjaGUuYy0yNjYte1xuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM9Mzc1PWludCBrdm1fZ3BjX3JlZnJlc2goc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgdW5zaWduZWQgbG9uZyBsZW4pXG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYy0zOTAtXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjM5MTpcdHJldHVybiBfX2t2bV9ncGNfcmVmcmVzaChncGMsIGdwYy1cdTAwM2VncGEsIHVodmEpO1xudmlydC9rdm0vcGZuY2FjaGUuYy0zOTItfVxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM9NDA2PXN0YXRpYyBpbnQgX19rdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhLFxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDMyLVx0fVxudmlydC9rdm0vcGZuY2FjaGUuYzo0MzM6XHRyZXR1cm4gX19rdm1fZ3BjX3JlZnJlc2goZ3BjLCBncGEsIHVodmEpO1xudmlydC9rdm0vcGZuY2FjaGUuYy00MzQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTMxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0LWxldmVsIHVuZGVyc3RhbmRpbmc6CgoqKkFuYWx5emluZyBLVk0gR3JhcGhpY3MgUHJvY2Vzc29yIENvbnRleHQgQWN0aXZhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtaW5kIGlzIGNpcmNsaW5nIGFyb3VuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGt2bV9ncGNfcmVmcmVzaGAgYW5kIGBfX2t2bV9ncGNfYWN0aXZhdGVgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgX19rdm1fZ3BjX2FjdGl2YXRlYCBwbGF5cyBhIGtleSByb2xlLCBhbmQgSSYjMzk7bSBiZXR0aW5nIHRoYXQgYGt2bV9ncGNfYWN0aXZhdGVgIGl0c2VsZiBwcm9iYWJseSBjYWxscyBpdC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb24gYW5kIG9yZGVyLiBUaGUgcmVmcmVzaCBpcyBpbXBvcnRhbnQsIGJ1dCBjbGVhcmx5LCB0aGUgYWN0aXZhdGlvbiBpcyB0aGUgY29yZSBwcm9jZXNzIEkgbmVlZCB0byB1bmRlcnN0YW5kLCB3aXRoIHRoZSBkb3VibGUgdW5kZXJzY29yZSBmdW5jdGlvbiBiZWluZyB0aGUgZnVuZGFtZW50YWwgY2FsbC4gSSB3aWxsIHRyYWNlIHRoZSBjYWxsIHN0YWNrIG5vdyBhbmQgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBJIGhhdmUgdG8gc2VlIGhvdyBhbmQgd2hlbiB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBhbmQgd2hhdCB0aGUgc3RhdGUgYmVmb3JlIGFuZCBhZnRlciB0aGV5IHJ1biBpcy4gVGhhdCBzaG91bGQgaGVscCB0byByZXNvbHZlIG15IGN1cnJlbnQgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19rdm1fZ3BjX2FjdGl2YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vcGZuY2FjaGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9wZm5jYWNoZS5jPTM5ND12b2lkIGt2bV9ncGNfaW5pdChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBzdHJ1Y3Qga3ZtICprdm0pXG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYy00MDUtXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjQwNjpzdGF0aWMgaW50IF9fa3ZtX2dwY19hY3RpdmF0ZShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDA3LVx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgbGVuKVxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM9NDM2PWludCBrdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBsZW4pXG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYy00NDQtXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjQ0NTpcdHJldHVybiBfX2t2bV9ncGNfYWN0aXZhdGUoZ3BjLCBncGEsIEtWTV9IVkFfRVJSX0JBRCwgbGVuKTtcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDQ2LX1cbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTQ0OD1pbnQga3ZtX2dwY19hY3RpdmF0ZV9odmEoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgdW5zaWduZWQgbG9uZyB1aHZhLCB1bnNpZ25lZCBsb25nIGxlbilcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ1Mi1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDUzOlx0cmV0dXJuIF9fa3ZtX2dwY19hY3RpdmF0ZShncGMsIElOVkFMSURfR1BBLCB1aHZhLCBsZW4pO1xudmlydC9rdm0vcGZuY2FjaGUuYy00NTQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODEwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gRnVuY3Rpb24gTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW52b2x2ZWQgaGVyZTogYGdmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydGAsIGBrdm1fZ3BjX3JlZnJlc2hgLCBga3ZtX2dwY19hY3RpdmF0ZWAsIGFuZCBga3ZtX2dwY19hY3RpdmF0ZV9odmFgLiBSaWdodCwgY29uZmlybWluZyB0aGF0IHRoZXkmIzM5O3JlIEtWTS1zcGVjaWZpYyBpcyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuIFllcCwgdGhleSBhcmUuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIHRvdWNoaW5nIGBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnRgIGFuZCBgaHZhX3RvX3Bmbl9yZXRyeWAsIHNvIEkgc2hvdWxkIHByaW9yaXRpemUgdGhvc2Ugc3BlY2lmaWNhbGx5LCBhbG9uZyB3aXRoIHRoZSBvdGhlcnMuIE5vdywgSSB3YW50IHRvIHNlZSB3aGVyZSBgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0YCBpcyBhY3R1YWxseSAqY2FsbGVkKiBmcm9tIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gVW5kZXJzdGFuZGluZyBpdHMgdXNhZ2UgaXMga2V5IHRvIGFzc2Vzc2luZyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9NzIxPXN0YXRpYyBpbnQga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNzU3LVx0ICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjc1ODpcdGdmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydChrdm0sIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQpO1xudmlydC9rdm0va3ZtX21haW4uYy03NTktXG4tLVxudmlydC9rdm0va3ZtX21tLmg9NTk9a3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApO1xuLS1cbnZpcnQva3ZtL2t2bV9tbS5oLTYxLSNpZmRlZiBDT05GSUdfSEFWRV9LVk1fUEZOQ0FDSEVcbnZpcnQva3ZtL2t2bV9tbS5oOjYyOnZvaWQgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBrdm0gKmt2bSxcbnZpcnQva3ZtL2t2bV9tbS5oLTYzLVx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxudmlydC9rdm0va3ZtX21tLmgtNjUtI2Vsc2VcbnZpcnQva3ZtL2t2bV9tbS5oOjY2OnN0YXRpYyBpbmxpbmUgdm9pZCBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGt2bSAqa3ZtLFxudmlydC9rdm0va3ZtX21tLmgtNjctXHRcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtMjQtICovXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjI1OnZvaWQgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMjYtXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBlbmQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NjUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIE1NVSBJbnZhbGlkYXRpb24qKgoKUmlnaHQsIHNvIHRoaXMgaXMgY2FsbGVkIGZyb20gYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydGAuIFRoYXQgdGVsbHMgbWUgaW1tZWRpYXRlbHkgdGhhdCB0aGUgZm9jdXMgaXMgb24gYSBNTVUgbm90aWZpZXIgY2FsbGJhY2ssIHNwZWNpZmljYWxseSB0aGUgYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydGAgZnVuY3Rpb24uIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBhIGtleSBjb250ZXh0LiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBhIHJhbmdlIGludmFsaWRhdGlvbiBvcGVyYXRpb24gcmVsYXRlZCB0byB0aGUgS1ZNIE1NVS4gSXQmIzM5O3MgdGhlIGJlZ2lubmluZyBvZiBhIHByb2Nlc3MuCgpOb3csIG15IG1pbmQgc2hpZnRzIHRvIGBrdm1fZ3BjX3JlZnJlc2hgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGt2bV9ncGNfcmVmcmVzaGAgbWlnaHQgcmVsYXRlIHRvIHRoaXMgTU1VIGludmFsaWRhdGlvbiBwcm9jZXNzLiBJcyBpdCBjYWxsZWQgYmVmb3JlLCBhZnRlciwgZHVyaW5nLCBvciBpbmRlcGVuZGVudGx5PyBEb2VzIHRoZSBNTVUgaW52YWxpZGF0aW9uIHRyaWdnZXIgdGhlIHJlZnJlc2gsIG9yIGlzIHRoZXJlIHNvbWUgb3RoZXIgY29ubmVjdGlvbiBJIG5lZWQgdG8gZXhwbG9yZT8gVGhpbmtpbmcgYWJvdXQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIGRldGVybWluZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2dwY19yZWZyZXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYz0zMjQyPXN0YXRpYyB2b2lkIGt2bV9zZXR1cF9ndWVzdF9wdmNsb2NrKHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvICpyZWZfaHZfY2xvY2ssXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTMyNTYtXG5hcmNoL3g4Ni9rdm0veDg2LmM6MzI1NzpcdFx0aWYgKGt2bV9ncGNfcmVmcmVzaChncGMsIG9mZnNldCAmIzQzOyBzaXplb2YoKmd1ZXN0X2h2X2Nsb2NrKSkpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMzI1OC1cdFx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTM4PXN0YXRpYyBpbnQga3ZtX3hlbl9zaGFyZWRfaW5mb19pbml0KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtNTEtXG5hcmNoL3g4Ni9rdm0veGVuLmM6NTI6XHRcdHJldCA9IGt2bV9ncGNfcmVmcmVzaChncGMsIFBBR0VfU0laRSk7XG5hcmNoL3g4Ni9rdm0veGVuLmMtNTMtXHRcdGlmIChyZXQpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTE1Mz1zdGF0aWMgaW50IHhlbl9nZXRfZ3Vlc3RfcHZjbG9jayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTE2NC1cbmFyY2gveDg2L2t2bS94ZW4uYzoxNjU6XHRcdHIgPSBrdm1fZ3BjX3JlZnJlc2goZ3BjLCBvZmZzZXQgJiM0Mzsgc2l6ZW9mKCpodl9jbG9jaykpO1xuYXJjaC94ODYva3ZtL3hlbi5jLTE2Ni1cdFx0aWYgKHIpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTMyMT1zdGF0aWMgdm9pZCBrdm1feGVuX3VwZGF0ZV9ydW5zdGF0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIGJvb2wgYXRvbWljKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy00MzgtXG5hcmNoL3g4Ni9rdm0veGVuLmM6NDM5Olx0XHRpZiAoa3ZtX2dwY19yZWZyZXNoKGdwYzEsIHVzZXJfbGVuMSkpXG5hcmNoL3g4Ni9rdm0veGVuLmMtNDQwLVx0XHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9NjM5PXZvaWQga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2KVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy02NTYtXG5hcmNoL3g4Ni9rdm0veGVuLmM6NjU3Olx0XHRpZiAoa3ZtX2dwY19yZWZyZXNoKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSlcbmFyY2gveDg2L2t2bS94ZW4uYy02NTgtXHRcdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uYz02OTc9aW50IF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdilcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzMwLVxuYXJjaC94ODYva3ZtL3hlbi5jOjczMTpcdFx0aWYgKGt2bV9ncGNfcmVmcmVzaChncGMsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSkpIHtcbmFyY2gveDg2L2t2bS94ZW4uYy03MzItXHRcdFx0Lypcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTkwMT1zdGF0aWMgaW50IGt2bV94ZW5fc2V0X2V2dGNobihzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTE5NDQtXHRcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbmFyY2gveDg2L2t2bS94ZW4uYzoxOTQ1Olx0XHRyYyA9IGt2bV9ncGNfcmVmcmVzaChncGMsIFBBR0VfU0laRSk7XG5hcmNoL3g4Ni9rdm0veGVuLmMtMTk0Ni1cdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc3JjdSwgaWR4KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTQ5Mj1ib29sIGt2bV9ncGNfY2hlY2soc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgdW5zaWduZWQgbG9uZyBsZW4pO1xuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNDk0LS8qKlxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE0OTU6ICoga3ZtX2dwY19yZWZyZXNoIC0gdXBkYXRlIGEgcHJldmlvdXNseSBpbml0aWFsaXplZCBjYWNoZS5cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNDk2LSAqXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE1MDktICovXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTUxMDppbnQga3ZtX2dwY19yZWZyZXNoKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHVuc2lnbmVkIGxvbmcgbGVuKTtcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNTExLVxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM9MTYyPXN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtMjY0LVxudmlydC9rdm0vcGZuY2FjaGUuYzoyNjU6c3RhdGljIGludCBfX2t2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSlcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMjY2LXtcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM3NC1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6Mzc1OmludCBrdm1fZ3BjX3JlZnJlc2goc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgdW5zaWduZWQgbG9uZyBsZW4pXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM3Ni17XG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYy0zOTAtXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjM5MTpcdHJldHVybiBfX2t2bV9ncGNfcmVmcmVzaChncGMsIGdwYy1cdTAwM2VncGEsIHVodmEpO1xudmlydC9rdm0vcGZuY2FjaGUuYy0zOTItfVxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM9NDA2PXN0YXRpYyBpbnQgX19rdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhLFxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDMyLVx0fVxudmlydC9rdm0vcGZuY2FjaGUuYzo0MzM6XHRyZXR1cm4gX19rdm1fZ3BjX3JlZnJlc2goZ3BjLCBncGEsIHVodmEpO1xudmlydC9rdm0vcGZuY2FjaGUuYy00MzQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDk5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIEtWTSBhbmQgR1BDIFJlZnJlc2gqKgoKT2theSwgc28gYGt2bV9ncGNfcmVmcmVzaGAuIEkgc2VlIHRoaXMgZnVuY3Rpb24gY2FsbCBpcyB1c2VkIGluIGJvdGggYGFyY2gveDg2L2t2bS94ODYuY2AgYW5kIGBhcmNoL3g4Ni9rdm0veGVuLmNgLiBUaGF0JiMzOTtzIGEgZGVjZW50IHN0YXJ0OyBpdCB0ZWxscyBtZSB0aGUgc2NvcGUgb2YgaXRzIHVzYWdlLCBpbW1lZGlhdGVseSBuYXJyb3dpbmcgZG93biB0aGUgYXJlYSBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGl0JiMzOTtzIHJlbGV2YW50IGluIGJvdGggdGhlIHN0YW5kYXJkIHg4NiBLVk0gY29udGV4dCBhbmQsIGludGVyZXN0aW5nbHksIHdpdGhpbiB0aGUgWGVuIGludGVncmF0aW9uLiBUaGF0IG1pZ2h0IHBvaW50IHRvIHNvbWV0aGluZyBhcmNoaXRlY3R1cmFsbHkgc2lnbmlmaWNhbnQgb3IgcGVyaGFwcyBqdXN0IGEgc2hhcmVkIG5lZWQgYWNyb3NzIHRob3NlIHR3byBtb2Rlcy4KCk5vdywgYmVmb3JlIEkgZGlnIGZ1cnRoZXIgaW50byBga3ZtX2dwY19yZWZyZXNoYCBpdHNlbGYsIEkgdGhpbmsgSSYjMzk7bGwgcGl2b3Qgc2xpZ2h0bHkuIFNpbmNlIGByZWZyZXNoYCBvZnRlbiBpbXBsaWVzIGFuIGFjdGl2YXRpb24gb3IgdXBkYXRlIHByb2Nlc3MsIGl0IG1ha2VzIHNlbnNlIHRvIGxvb2sgZm9yIHdoZXJlIHRoaXMgR1BDIGlzICphY3RpdmF0ZWQqIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhlcmVmb3JlLCBJIHNob3VsZCBjaGVjayBvdXQgYGt2bV9ncGNfYWN0aXZhdGVgLiBUaGF0IG1pZ2h0IGdpdmUgbWUgc29tZSBjb250ZXh0IGFib3V0IHdoYXQmIzM5O3MgYmVpbmcgcmVmcmVzaGVkIGluIHRoZSBmaXJzdCBwbGFjZS4gSXQgY291bGQgYmUgYW4gaW5pdGlhbGl6YXRpb24sIGVuYWJsaW5nLCBvciBwZXJoYXBzIGEgZGlmZmVyZW50IGNvbnRyb2wgbWVjaGFuaXNtIGVudGlyZWx5LCBhbmQga25vd2luZyB0aGUgYWN0aXZhdGlvbiBjb250ZXh0IHdpbGwgZ3JlYXRseSBoZWxwIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlZnJlc2ggZnVuY3Rpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgYnJvYWRlciBwaWN0dXJlIGJlZm9yZSBJIGdldCBib2dnZWQgZG93biBpbiB0aGUgcmVmcmVzaCBkZXRhaWxzIHRoZW1zZWx2ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9ncGNfYWN0aXZhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTI0Mjg9c3RhdGljIHZvaWQga3ZtX3dyaXRlX3N5c3RlbV90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3Qgc3lzdGVtX3RpbWUsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTI0NDQtXHRpZiAoc3lzdGVtX3RpbWUgXHUwMDI2IDEpXG5hcmNoL3g4Ni9rdm0veDg2LmM6MjQ0NTpcdFx0a3ZtX2dwY19hY3RpdmF0ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gucHZfdGltZSwgc3lzdGVtX3RpbWUgXHUwMDI2IH4xVUxMLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTI0NDYtXHRcdFx0XHQgc2l6ZW9mKHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvKSk7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTMyMT1zdGF0aWMgdm9pZCBrdm1feGVuX3VwZGF0ZV9ydW5zdGF0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIGJvb2wgYXRvbWljKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy00ODUtXHRcdFx0LypcbmFyY2gveDg2L2t2bS94ZW4uYzo0ODY6XHRcdFx0ICogVXNlIGt2bV9ncGNfYWN0aXZhdGUoKSBoZXJlIGJlY2F1c2UgaWYgdGhlIHJ1bnN0YXRlXG5hcmNoL3g4Ni9rdm0veGVuLmMtNDg3LVx0XHRcdCAqIGFyZWEgd2FzIGNvbmZpZ3VyZWQgaW4gMzItYml0IG1vZGUgYW5kIG9ubHkgZXh0ZW5kc1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy00OTAtXHRcdFx0ICovXG5hcmNoL3g4Ni9rdm0veGVuLmM6NDkxOlx0XHRcdGlmIChrdm1fZ3BjX2FjdGl2YXRlKGdwYzIsIGdwYzEtXHUwMDNlZ3BhICYjNDM7IHVzZXJfbGVuMSxcbmFyY2gveDg2L2t2bS94ZW4uYy00OTItXHRcdFx0XHRcdCAgICAgdXNlcl9sZW4yKSlcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9NzQ2PWludCBrdm1feGVuX2h2bV9zZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy03ODUtXHRcdFx0fSBlbHNlIHtcbmFyY2gveDg2L2t2bS94ZW4uYzo3ODY6XHRcdFx0XHRyID0ga3ZtX2dwY19hY3RpdmF0ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlLFxuYXJjaC94ODYva3ZtL3hlbi5jLTc4Ny1cdFx0XHRcdFx0XHQgICAgIGdmbl90b19ncGEoZ2ZuKSwgUEFHRV9TSVpFKTtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzk3LVx0XHRcdH0gZWxzZSB7XG5hcmNoL3g4Ni9rdm0veGVuLmM6Nzk4Olx0XHRcdFx0ciA9IGt2bV9ncGNfYWN0aXZhdGVfaHZhKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGUsXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzk5LVx0XHRcdFx0XHRcdFx0ICh1bnNpZ25lZCBsb25nKWh2YSwgUEFHRV9TSVpFKTtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9OTA2PWludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTkyOC1cbmFyY2gveDg2L2t2bS94ZW4uYzo5Mjk6XHRcdFx0ciA9IGt2bV9ncGNfYWN0aXZhdGUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnhlbi52Y3B1X2luZm9fY2FjaGUsXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTMwLVx0XHRcdFx0XHQgICAgIGRhdGEtXHUwMDNldS5ncGEsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSk7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTkzNy1cbmFyY2gveDg2L2t2bS94ZW4uYzo5Mzg6XHRcdFx0ciA9IGt2bV9ncGNfYWN0aXZhdGVfaHZhKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC54ZW4udmNwdV9pbmZvX2NhY2hlLFxuYXJjaC94ODYva3ZtL3hlbi5jLTkzOS1cdFx0XHRcdFx0XHQgZGF0YS1cdTAwM2V1Lmh2YSwgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKTtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTUzLVxuYXJjaC94ODYva3ZtL3hlbi5jOjk1NDpcdFx0ciA9IGt2bV9ncGNfYWN0aXZhdGUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnhlbi52Y3B1X3RpbWVfaW5mb19jYWNoZSxcbmFyY2gveDg2L2t2bS94ZW4uYy05NTUtXHRcdFx0XHQgICAgIGRhdGEtXHUwMDNldS5ncGEsXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTk4Ny1cdFx0c3oxID0gUEFHRV9TSVpFIC0gKGRhdGEtXHUwMDNldS5ncGEgXHUwMDI2IH5QQUdFX01BU0spO1xuYXJjaC94ODYva3ZtL3hlbi5jOjk4ODpcdFx0ciA9IGt2bV9ncGNfYWN0aXZhdGUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnhlbi5ydW5zdGF0ZV9jYWNoZSxcbmFyY2gveDg2L2t2bS94ZW4uYy05ODktXHRcdFx0XHQgICAgIGRhdGEtXHUwMDNldS5ncGEsIHN6MSk7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTk5OC1cdFx0XHRCVUdfT04oKGRhdGEtXHUwMDNldS5ncGEgJiM0Mzsgc3oxKSBcdTAwMjYgflBBR0VfTUFTSyk7XG5hcmNoL3g4Ni9rdm0veGVuLmM6OTk5Olx0XHRcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC54ZW4ucnVuc3RhdGUyX2NhY2hlLFxuYXJjaC94ODYva3ZtL3hlbi5jLTEwMDAtXHRcdFx0XHRcdCAgICAgZGF0YS1cdTAwM2V1LmdwYSAmIzQzOyBzejEsIHN6Mik7XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTE0NDA9dm9pZCBrdm1fZ3BjX2luaXQoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgc3RydWN0IGt2bSAqa3ZtKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ0Mi0vKipcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxNDQzOiAqIGt2bV9ncGNfYWN0aXZhdGUgLSBwcmVwYXJlIGEgY2FjaGVkIGtlcm5lbCBtYXBwaW5nIGFuZCBIUEEgZm9yIGEgZ2l2ZW4gZ3Vlc3RcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNDQ0LSAqICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBhZGRyZXNzLlxuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNDU3LSAqL1xuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE0NTg6aW50IGt2bV9ncGNfYWN0aXZhdGUoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGxlbik7XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ1OS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNDYwLS8qKlxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE0NjE6ICoga3ZtX2dwY19hY3RpdmF0ZV9odmEgLSBwcmVwYXJlIGEgY2FjaGVkIGtlcm5lbCBtYXBwaW5nIGFuZCBIUEEgZm9yIGEgZ2l2ZW4gSFZBLlxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE0NjItICpcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ3MC0gKlxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE0NzE6ICogVGhlIHNlbWFudGljcyBvZiB0aGlzIGZ1bmN0aW9uIGFyZSB0aGUgc2FtZSBhcyB0aG9zZSBvZiBrdm1fZ3BjX2FjdGl2YXRlKCkuIEl0XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ3Mi0gKiBtZXJlbHkgYnlwYXNzZXMgYSBsYXllciBvZiBhZGRyZXNzIHRyYW5zbGF0aW9uLlxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE0NzMtICovXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTQ3NDppbnQga3ZtX2dwY19hY3RpdmF0ZV9odmEoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgdW5zaWduZWQgbG9uZyBodmEsIHVuc2lnbmVkIGxvbmcgbGVuKTtcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNDc1LVxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM9Mzk0PXZvaWQga3ZtX2dwY19pbml0KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHN0cnVjdCBrdm0gKmt2bSlcbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQwNS1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDA2OnN0YXRpYyBpbnQgX19rdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhLFxudmlydC9rdm0vcGZuY2FjaGUuYy00MDctXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4pXG4tLVxudmlydC9rdm0vcGZuY2FjaGUuYy00MzUtXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjQzNjppbnQga3ZtX2dwY19hY3RpdmF0ZShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgbGVuKVxudmlydC9rdm0vcGZuY2FjaGUuYy00Mzcte1xuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDQ0LVxudmlydC9rdm0vcGZuY2FjaGUuYzo0NDU6XHRyZXR1cm4gX19rdm1fZ3BjX2FjdGl2YXRlKGdwYywgZ3BhLCBLVk1fSFZBX0VSUl9CQUQsIGxlbik7XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ0Ni19XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ0Ny1cbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDQ4OmludCBrdm1fZ3BjX2FjdGl2YXRlX2h2YShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCB1bnNpZ25lZCBsb25nIHVodmEsIHVuc2lnbmVkIGxvbmcgbGVuKVxudmlydC9rdm0vcGZuY2FjaGUuYy00NDkte1xuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDUyLVxudmlydC9rdm0vcGZuY2FjaGUuYzo0NTM6XHRyZXR1cm4gX19rdm1fZ3BjX2FjdGl2YXRlKGdwYywgSU5WQUxJRF9HUEEsIHVodmEsIGxlbik7XG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ1NC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDM3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGluaXRpYWwgc2NhbiBwb2ludHMgbWUgdG93YXJkIGBrdm1fZ3BjX2FjdGl2YXRlYCBhbmQgYGt2bV9ncGNfYWN0aXZhdGVfaHZhYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXJjaC94ODYva3ZtL3hlbi5jYCBhbmQgYGFyY2gveDg2L2t2bS94ODYuY2AuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBmdXp6aW5nLCBnaXZlbiB0aGVpciByb2xlcyBpbiB0aGUgS1ZNIGFyY2hpdGVjdHVyZS4gIEkgc2hvdWxkIGFsc28gYWRkIGBrdm1fZ3BjX3JlZnJlc2hgIHRvIHRoZSBsaXN0OyBpdCBsaWtlbHkgaGFuZGxlcyByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuICBGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIGxvb2sgaW50byBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0YCBhbmQgdHJhY2UgaXQgdG8gaXRzIGNhbGwgdG8gYGdmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydGAuIFRoYXQgY291bGQgYmUgYSBrZXkgYXJlYSBmb3IgdnVsbmVyYWJpbGl0aWVzLgoKTm93LCBsZXQmIzM5O3MgcXVpY2tseSBjaGVjayBpZiBga3ZtX2dwY19hY3RpdmF0ZWAgaXMgZXhwb3J0ZWQsIG1ha2luZyBpdCBhY2Nlc3NpYmxlIGZvciBleHRlcm5hbCBjYWxscy4gWWVwLCBJIHNlZSBpdCYjMzk7cyBkZWZpbmVkIGFuZCBleHBvcnRlZCBpbiBgdmlydC9rdm0vcGZuY2FjaGUuY2AuIEV4Y2VsbGVudCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MX0dQTFxcKGt2bV9ncGNfYWN0aXZhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ2NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLVk0gUEZOIENhY2hlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTSBQRk4gY2FjaGUgd29ya3MsIGFuZCB0aGF0IG1lYW5zIHN0YXJ0aW5nIGF0IHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGBFWFBPUlRfU1lNQk9MYCB3aXRoaW4gYHZpcnQva3ZtL3BmbmNhY2hlLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBleHBvc2VkLCBhbmQgd2h5LiBJJiMzOTttIGd1ZXNzaW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSBzb3J0IG9mIGludGVyZmFjZSBmb3Igb3RoZXIgS1ZNIGNvbXBvbmVudHMgb3IgcG9zc2libHkgZXZlbiBleHRlcm5hbCBtb2R1bGVzIHRvIGludGVyYWN0IHdpdGggdGhlIFBGTiBjYWNoZS4gTGV0IG1lIHNlZSB3aGF0IEkgY2FuIGZpbmQuIEl0IG1pZ2h0IGV4cG9zZSBob29rcyBmb3IgcGFnZSBpbnZhbGlkYXRpb24sIFBGTiBhbGxvY2F0aW9uLCBvciBjYWNoZSBtYW5hZ2VtZW50LiBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIHBvdGVudGlhbCBmb3IgaW50ZXItbW9kdWxlIGRlcGVuZGVuY2llcyBoZXJlLCBhbmQgdGhlIHVzZSBvZiBgRVhQT1JUX1NZTUJPTGAgaXMgYSBrZXkgaW5kaWNhdG9yIG9mIHRob3NlIGR5bmFtaWNzLiBUaGlzIGNvdWxkIGhhdmUgc29tZSBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucy4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MX0dQTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL3BmbmNhY2hlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjczOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLVk0gUEZOIENhY2hlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTSBQRk4gY2FjaGUgd29ya3MsIGFuZCB0aGF0IG1lYW5zIHN0YXJ0aW5nIGF0IHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGBFWFBPUlRfU1lNQk9MYCB3aXRoaW4gYHZpcnQva3ZtL3BmbmNhY2hlLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBleHBvc2VkLCBhbmQgd2h5LiBJJiMzOTttIGd1ZXNzaW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSBzb3J0IG9mIGludGVyZmFjZSBmb3Igb3RoZXIgS1ZNIGNvbXBvbmVudHMgb3IgcG9zc2libHkgZXZlbiBleHRlcm5hbCBtb2R1bGVzIHRvIGludGVyYWN0IHdpdGggdGhlIFBGTiBjYWNoZS4gTGV0IG1lIHNlZSB3aGF0IEkgY2FuIGZpbmQuIEl0IG1pZ2h0IGV4cG9zZSBob29rcyBmb3IgcGFnZSBpbnZhbGlkYXRpb24sIFBGTiBhbGxvY2F0aW9uLCBvciBjYWNoZSBtYW5hZ2VtZW50LiBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIHBvdGVudGlhbCBmb3IgaW50ZXItbW9kdWxlIGRlcGVuZGVuY2llcyBoZXJlLCBhbmQgdGhlIHVzZSBvZiBgRVhQT1JUX1NZTUJPTGAgaXMgYSBrZXkgaW5kaWNhdG9yIG9mIHRob3NlIGR5bmFtaWNzLiBUaGlzIGNvdWxkIGhhdmUgc29tZSBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucy4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vcGZuY2FjaGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDExCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gUEZOIENhY2hlIFN5bWJvbCBVc2FnZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHZpcnQva3ZtL3BmbmNhY2hlLmNgLiBJIGltbWVkaWF0ZWx5IHNlZSBpdCYjMzk7cyBjb21waWxlZCBkaXJlY3RseSBpbnRvIGBrdm0ua29gLiAgVGhhdCBtZWFucyBpdCBkb2VzbiYjMzk7dCAqbmVlZCogdG8gZXhwb3J0IHN5bWJvbHMgc2luY2UgaXRzIHByaW1hcnkgY29uc3VtZXIsIGBhcmNoL3g4Ni9rdm0veDg2LmNgLCBpcyBhbHNvIHBhcnQgb2YgdGhhdCBzYW1lIG1vZHVsZS4gIEVmZmljaWVuY3ksIGFsd2F5cyBhIGdvb2QgdGhpbmcuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMuIEkmIzM5O3ZlIGdvdDoKCiogICBga3ZtX2dwY19yZWZyZXNoYAoqICAgYGt2bV9ncGNfYWN0aXZhdGVgCiogICBga3ZtX2dwY19hY3RpdmF0ZV9odmFgCiogICBgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0YAoKQW55dGhpbmcgZWxzZT8gVGhlIGNvZGUgYWxzbyByZWZlcmVuY2VzIGBodmFfdG9fcGZuX3JldHJ5YCwgYnV0IHRoYXQmIzM5O3MgYHN0YXRpY2AsIHNvIGl0JiMzOTtzIG5vdCBkaXJlY3RseSB2aXNpYmxlIGZyb20gb3V0c2lkZS4gIEZvY3VzaW5nIG9uIHRoZSBleHBvc2VkIHN0dWZmLCBgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0YCBpcyB0aGUgb25seSBub24tc3RhdGljIGZ1bmN0aW9uIGhlcmUuCgpJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gIGBrdm1fZ3BjX3JlZnJlc2hgIGNhbGxzIGBfX2t2bV9ncGNfcmVmcmVzaGAsIHdoaWNoIGluIHR1cm4gY2FsbHMgdGhhdCBgaHZhX3RvX3Bmbl9yZXRyeWAuIGBrdm1fZ3BjX2FjdGl2YXRlYCBjYWxscyBgX19rdm1fZ3BjX2FjdGl2YXRlYCwgd2hpY2ggY2FsbHMgYF9fa3ZtX2dwY19yZWZyZXNoYCwgd2hpY2ggdGhlbiBjYWxscyBgaHZhX3RvX3Bmbl9yZXRyeWAuIEFuZCBga3ZtX2dwY19hY3RpdmF0ZV9odmFgIGNhbGxzIGBfX2t2bV9ncGNfYWN0aXZhdGVgLgoKU28sIHRoZSBjcml0aWNhbCBzeW1ib2xzIHRvIGtlZXAgaW4gbWluZCBhcmU6CiogICBgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0YAoqICAgYGt2bV9ncGNfcmVmcmVzaGAKKiAgIGBrdm1fZ3BjX2FjdGl2YXRlYAoqICAgYGt2bV9ncGNfYWN0aXZhdGVfaHZhYAoKTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IHJlYWNoYWJsZS4gQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgYGt2bV9ncGNfcmVmcmVzaGAgaXMgdXNlZCBieSBga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3RgLCBga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHNgLCBhbW9uZyBvdGhlcnMuIEZpbmUuIEFuZCBga3ZtX2dwY19hY3RpdmF0ZWAgaXMgY2FsbGVkIGZyb20gYGt2bV94ZW5faHZtX3NldF9hdHRyYCwgYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAsIGFuZCBga3ZtX3dyaXRlX3N5c3RlbV90aW1lYC4gIFJpZ2h0LCB0aGVzZSBhcmUgYWxsIGNhbGxlZCBmcm9tIEtWTSBpb2N0bHMsIHNvIHdlJiMzOTtyZSBnb29kIHRoZXJlLgoKRmluYWxseSwgd2hhdCYjMzk7cyByZXF1aXJlZCBjb25maWctd2lzZT8gV2VsbCwgY2xlYXJseSBgS1ZNYCBpcyBuZWVkZWQuIEFuZCBgS1ZNX1g4NmAgc2VsZWN0cyBgSEFWRV9LVk1fUEZOQ0FDSEVgLiBCdXQgYEhBVkVfS1ZNX1BGTkNBQ0hFYCBpcyByZWFsbHkganVzdCBhbiBpbmRpcmVjdCBjb25zZXF1ZW5jZSBvZiBlbmFibGluZyBgS1ZNX1g4NmAuIFNvLCB0aGUgZXNzZW50aWFsIGNvbmZpZyBpcyBzaW1wbHkgYEtWTWAuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgYXJjaC94ODYva3ZtL0tjb25maWdgIHRvIGNvbmZpcm0uLi4gWWVwLCB0aGF0JiMzOTtzIHdoYXQgSSB0aG91Z2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTI2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgS1ZNIGFuZCBLVk1fWEVOIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGUgY29uZmlndXJhdGlvbiBhcm91bmQgS1ZNLiBUaGUgY29yZSBjb25maWcgaXMsIG5hdHVyYWxseSwgYEtWTWAuIEhvd2V2ZXIsIEkmIzM5O20gc2VlaW5nIGBLVk1fWEVOYCBtZW50aW9uZWQgYWxvbmdzaWRlIGl0LCBhbmQgaXQmIzM5O3MgcGlxdWluZyBteSBpbnRlcmVzdC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGljaW5nIGEgbG90IG9mIGFjdGl2aXR5IHJlbGF0ZWQgdG8gYGt2bV9ncGNfYWN0aXZhdGVgIGFuZCBga3ZtX2dwY19yZWZyZXNoYCB3aXRoaW4gYGFyY2gveDg2L2t2bS94ZW4uY2AuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgbGluaywgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYEtWTV9YRU5gIGlzIGVzc2VudGlhbCBpbiB0aGlzIGNvbnRleHQuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uZmlybSB0aGUgcm9sZSBvZiBgS1ZNX1hFTmAuIEFoYSwgeWVzLCBhIHF1aWNrIHJldmlldyBzaG93cyB0aGlzIGVuYWJsZXMgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2Ugc3VwcG9ydC4gQW5kIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcgYmVjYXVzZSBYZW4gaHlwZXJjYWxsIGludGVyZmFjZXMgb2Z0ZW4gcmVseSBoZWF2aWx5IG9uIHRoZSBwZm5jYWNoZS4gVGhpcyBzdHJlbmd0aGVucyB0aGUgY2FzZSBmb3IgdW5kZXJzdGFuZGluZyBpdHMgaW5jbHVzaW9uLgoKTm93LCBsZXQgbWUgY2hlY2sgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmb3IgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aWVkIHRvIGBLVk1fWEVOYC4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGRlZXBlciBjb250ZXh0IEkgbmVlZCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgY29tcG9uZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9YRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOTM9Y29uZmlnIEtWTV9IWVBFUlZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwMzcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgS1ZNX1hFTiBEZXBlbmRlbmN5KioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgb2YgYEtWTV9YRU5gLiBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWNlc3Nhcnkgd2hlbiB0aGlzIGlzIGVuYWJsZWQsIGxpa2VseSB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9yIGEgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQgc2V0dXAuIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgaG93IGBLVk1fWEVOYCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyByZWZlcmVuY2VzIGFuZCBzZWUgd2hlcmUgaXQmIzM5O3MgaW5jbHVkZWQsIHBvdGVudGlhbGx5IGluIEtjb25maWcgZmlsZXMgb3IgcmVsZXZhbnQga2VybmVsIGJ1aWxkIHN5c3RlbXMuIFVuZGVyc3RhbmRpbmcgdGhvc2UgY29ubmVjdGlvbnMgaXMga2V5IHRvIGdldHRpbmcgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGFuZCBkZXBlbmRlbmNpZXMuIFVsdGltYXRlbHksIEkgd2FudCB0byBtYXAgb3V0IHRoZSBjb21wbGV0ZSBkZXBlbmRlbmN5IGdyYXBoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX1hFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE5Mz1jb25maWcgS1ZNX0hZUEVSVlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM0NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS1ZNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYSBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIEtWTSBhcmNoaXRlY3R1cmUgb24geDg2LCBwcm9iYWJseSByZWxhdGVkIHRvIGEgZmVhdHVyZSYjMzk7cyBjb25maWd1cmF0aW9uLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgaXRzZWxmLCBzcGVjaWZpY2FsbHkgYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gSSYjMzk7bSBndWVzc2luZyB0aGUgcmVsZXZhbnQgb3B0aW9ucyBtaWdodCBiZSBkZWZpbmVkIHNvbWV3aGVyZSBhcm91bmQgbGluZSAyMDcuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LCBnaXZlbiBteSBleHBlcmllbmNlIHdpdGggc2ltaWxhciBwcm9qZWN0cy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGRlZmluZWQgdGhlcmUgYW5kIHdoYXQgaXQgdGVsbHMgbWUuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBmZWF0dXJlIGZsYWdzLCBtYXliZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIG9wdGlvbnMsIGFuZCBob3BlZnVsbHkgc29tZSBoZWxwZnVsIGNvbW1lbnRzIHRvIGd1aWRlIG15IHVuZGVyc3RhbmRpbmcuIFRpbWUgdG8gZ2V0IHRoZSBmaWxlIG9wZW4gYW5kIHN0YXJ0IGRpc3NlY3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwMDpcdFx0ICBIeXBlci1WIEh5cGVydmlzb3IgVG9wLUxldmVsIEZ1bmN0aW9uYWwgU3BlY2lmaWNhdGlvbiAoVExGUyk6XG4gMjAxOlx0XHQgIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3ZpcnR1YWxpemF0aW9uL2h5cGVyLXYtb24td2luZG93cy9yZWZlcmVuY2UvdGxmc1xuIDIwMjpcdFx0ICBUaGVzZSBpbnRlcmZhY2VzIGFyZSByZXF1aXJlZCBmb3IgdGhlIGNvcnJlY3QgYW5kIHBlcmZvcm1hbnQgZnVuY3Rpb25pbmdcbiAyMDM6XHRcdCAgb2YgV2luZG93cyBhbmQgSHlwZXItViBndWVzdHMgb24gS1ZNLlxuIDIwNDpcdFxuIDIwNTpcdFx0ICBJZiB1bnN1cmUsIHNheSBcJiMzNDtZXCYjMzQ7LlxuIDIwNjpcdFxuIDIwNzpcdGNvbmZpZyBLVk1fWEVOXG4gMjA4Olx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXCYjMzQ7XG4gMjA5Olx0XHRkZXBlbmRzIG9uIEtWTV9YODZcbiAyMTA6XHRcdGhlbHBcbiAyMTE6XHRcdCAgUHJvdmlkZXMgS1ZNIHN1cHBvcnQgZm9yIHRoZSBob3N0aW5nIFhlbiBIVk0gZ3Vlc3RzIGFuZFxuIDIxMjpcdFx0ICBwYXNzaW5nIFhlbiBoeXBlcmNhbGxzIHRvIHVzZXJzcGFjZS5cbiAyMTM6XHRcbiAyMTQ6XHRcdCAgSWYgaW4gZG91YnQsIHNheSBcJiMzNDtOXCYjMzQ7LlxuIDIxNTpcdFxuIDIxNjpcdGNvbmZpZyBLVk1fUFJPVkVfTU1VXG4gMjE3Olx0XHRib29sIFwmIzM0O1Byb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcJiMzNDtcbiAyMTg6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMXG4gMjE5Olx0XHRkZXBlbmRzIG9uIEtWTV9YODZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4ODkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2MzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgS1ZNIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgc2luY2UgYEtWTV9YRU5gIGRlcGVuZHMgb24gYEtWTV9YODZgLCBhbmQgYEtWTV9YODZgIGRlcGVuZHMgb24gYEtWTWAgKHVubGVzcyBgS1ZNX0lOVEVMYCBvciBgS1ZNX0FNRGAgYXJlICpub3QqIGVuYWJsZWQpLCBJIG5lZWQgdG8gZW5hYmxlIGJvdGggYEtWTWAgYW5kIGBLVk1fWEVOYC4gVGhlIGFpbSBpcyB0byBjaGVjayBpZiB0aGVzZSBmZWF0dXJlcyBhcmUgd29ydGggZnV6emluZy4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBLVk1gIGlzIGEgdHJpc3RhdGUsIGFuZCB0aGF0IGl0IGRlcGVuZHMgb24gc2V2ZXJhbCBvdGhlciBjb25maWdzIGxpa2UgYEhJR0hfUkVTX1RJTUVSU2AsIGBYODZfTE9DQUxfQVBJQ2AsIGFuZCBzbyBvbi4gR29vZC4gU28sIGBLVk1gIGFuZCBgS1ZNX1hFTmAgYXJlIGRlZmluaXRlbHkgdGhlIHRhcmdldHMgZm9yIGVuYWJsaW5nLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aG9zZSBmb2N1cyBzeW1ib2xzOiBgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0YCwgYGt2bV9ncGNfcmVmcmVzaGAsIGBrdm1fZ3BjX2FjdGl2YXRlYCwgYW5kIGBrdm1fZ3BjX2FjdGl2YXRlX2h2YWAuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gc3l6a2FsbGVyLgoKWWVzLCB0aGV5IGFwcGVhciB0byBiZSEgU3l6a2FsbGVyIGhhcyBLVk0gZGVzY3JpcHRpb25zIGFuZCBjYW4gZnV6eiBLVk0gaW9jdGxzLiBga3ZtX2dwY19hY3RpdmF0ZWAgaXMgcmVhY2hhYmxlIHZpYSBga3ZtX3hlbl9odm1fc2V0X2F0dHJgIGFuZCB0aGUgYEtWTV9YRU5fSFZNX1NFVF9BVFRSYCBpb2N0bC4gYGt2bV9ncGNfcmVmcmVzaGAgaXMgdXNlZCBkdXJpbmcgdmNwdSBleGVjdXRpb24gb3IgZXZlbnQgaW5qZWN0aW9uLiBgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0YCBpcyB0cmlnZ2VyZWQgYnkgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucywgbGlrZSBgbXVubWFwYCBhbmQgYG1wcm90ZWN0YC4gVGhpcyBhbGwgbG9va3MgdmVyeSBwcm9taXNpbmcuCgpTbywgaGVyZSYjMzk7cyBteSBzdW1tYXJ5OiBUaGlzIGNvZGUgbW9kaWZpY2F0aW9uIGlzIHdvcnRoIGZ1enppbmcuIEl0IGludm9sdmVzIHBmbmNhY2hlIGludmFsaWRhdGlvbiBpbiBLVk0gKGludHJvZHVjaW5nIGEgc2VxdWVuY2UgY291bnRlciB0byBmaXggYSByYWNlIGNvbmRpdGlvbiksIHdoaWNoIGlzICpjb3JlKiBLVk0gZnVuY3Rpb25hbGl0eS4gSXQmIzM5O3MgYWNjZXNzaWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucy4KCk15IGZvY3VzIHN5bWJvbHMgYXJlOgotIGBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnRgCi0gYGt2bV9ncGNfcmVmcmVzaGAKLSBga3ZtX2dwY19hY3RpdmF0ZWAKLSBga3ZtX2dwY19hY3RpdmF0ZV9odmFgCgpBbmQgdGhlIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBlbmFibGUgYXJlIGBLVk1gIGFuZCBgS1ZNX1hFTmAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgS1ZNX1hFTmAgaXMgZW5hYmxlZC4gSXQgaXMgYSBib29sZWFuIHZhbHVlIHdoaWxlIGBLVk1gIGlzIGEgdHJpc3RhdGUuIEdpdmVuIHRoYXQgYEtWTV9YODZgIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYXMgYSBkZXBlbmRlbmN5IGFzIGxvbmcgYXMgYEtWTWAgaXMgZW5hYmxlZCwgYW5kIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYCBhcmUgbm90IHNldCB0byAmIzM5O24mIzM5Oy4gSSB3aWxsIGp1c3Qgc3BlY2lmeSBgS1ZNYCBhbmQgYEtWTV9YRU5gLiBOb3csIGxldCBtZSBkb3VibGUtY2hlY2sgaWYgYGt2bV9ncGNfYWN0aXZhdGVfaHZhYCBpcyBhY3R1YWxseSB1c2VkIGFuZCB0aGVuIEkgc2hvdWxkIGJlIGdvb2QgdG8gbW92ZSBmb3J3YXJkIHdpdGggdGhlIGZ1enppbmcgY2FtcGFpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9ncGNfYWN0aXZhdGVfaHZhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ZW4uYz03NDY9aW50IGt2bV94ZW5faHZtX3NldF9hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTc5Ny1cdFx0XHR9IGVsc2Uge1xuYXJjaC94ODYva3ZtL3hlbi5jOjc5ODpcdFx0XHRcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlX2h2YShcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlLFxuYXJjaC94ODYva3ZtL3hlbi5jLTc5OS1cdFx0XHRcdFx0XHRcdCAodW5zaWduZWQgbG9uZylodmEsIFBBR0VfU0laRSk7XG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jPTkwNj1pbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy05MzctXG5hcmNoL3g4Ni9rdm0veGVuLmM6OTM4Olx0XHRcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlX2h2YShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaW5mb19jYWNoZSxcbmFyY2gveDg2L2t2bS94ZW4uYy05MzktXHRcdFx0XHRcdFx0IGRhdGEtXHUwMDNldS5odmEsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSk7XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTE0NTg9aW50IGt2bV9ncGNfYWN0aXZhdGUoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGxlbik7XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE0NjAtLyoqXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTQ2MTogKiBrdm1fZ3BjX2FjdGl2YXRlX2h2YSAtIHByZXBhcmUgYSBjYWNoZWQga2VybmVsIG1hcHBpbmcgYW5kIEhQQSBmb3IgYSBnaXZlbiBIVkEuXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ2Mi0gKlxuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNDczLSAqL1xuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE0NzQ6aW50IGt2bV9ncGNfYWN0aXZhdGVfaHZhKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHVuc2lnbmVkIGxvbmcgaHZhLCB1bnNpZ25lZCBsb25nIGxlbik7XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ3NS1cbi0tXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTQzNj1pbnQga3ZtX2dwY19hY3RpdmF0ZShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgbGVuKVxuLS1cbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDQ3LVxudmlydC9rdm0vcGZuY2FjaGUuYzo0NDg6aW50IGt2bV9ncGNfYWN0aXZhdGVfaHZhKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHVuc2lnbmVkIGxvbmcgdWh2YSwgdW5zaWduZWQgbG9uZyBsZW4pXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ0OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODgwCgkJCQkJCQlvdXRwdXQ6IDEzMwoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBBdHRyaWJ1dGUgU2V0dGluZyBpbiBLVk0vWGVuIEludGVyYWN0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYmVpbmcgdXNlZC4gSSBzZWUgaXQsIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbiwgaXMgZGVmaW5pdGVseSBpbnZvbHZlZCBpbiBga3ZtX3hlbl9odm1fc2V0X2F0dHJgIGFuZCBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYC4gR290IGl0LiBUaGF0IGNvbmZpcm1zIG15IGluaXRpYWwgaHVuY2ggYWJvdXQgaXRzIHJvbGUgaW4gdGhlIEtWTS9YZW4gSFZNIGludGVncmF0aW9uIGxheWVyLCB3aGljaCBpcyB3aGF0IEkgdGhvdWdodCBJIHdvdWxkIGZpbmQuCgpOb3csIHdpdGggdGhpcyBpbmZvcm1hdGlvbiBpbiBoYW5kLCBJ4oCZbSBnb2luZyB0byBsZXZlcmFnZSBteSBzZXR1cC4gVGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgdXNlIGBzZXQtcmVzdWx0c2AgdG8gZ2V0IHNvbWUgZnVydGhlciBpbmZvcm1hdGlvbiBvbiB0aGVzZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX1hFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydCYjMzQ7LAogICAgJiMzNDtrdm1fZ3BjX3JlZnJlc2gmIzM0OywKICAgICYjMzQ7a3ZtX2dwY19hY3RpdmF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fZ3BjX2FjdGl2YXRlX2h2YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGZuY2FjaGUgaW52YWxpZGF0aW9uIGxvZ2ljIGluIEtWTSwgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gYnkgaW50cm9kdWNpbmcgYSBzZXF1ZW5jZSBjb3VudGVyLiBUaGlzIGlzIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX1hFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydCYjMzQ7LAogICAgJiMzNDtrdm1fZ3BjX3JlZnJlc2gmIzM0OywKICAgICYjMzQ7a3ZtX2dwY19hY3RpdmF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fZ3BjX2FjdGl2YXRlX2h2YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGZuY2FjaGUgaW52YWxpZGF0aW9uIGxvZ2ljIGluIEtWTSwgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gYnkgaW50cm9kdWNpbmcgYSBzZXF1ZW5jZSBjb3VudGVyLiBUaGlzIGlzIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6NDU6MTAuOTc4MjIzOTEzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MzE4MDQ4MjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX1hFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydFwiLFxuICAgIFwia3ZtX2dwY19yZWZyZXNoXCIsXG4gICAgXCJrdm1fZ3BjX2FjdGl2YXRlXCIsXG4gICAgXCJrdm1fZ3BjX2FjdGl2YXRlX2h2YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZm5jYWNoZSBpbnZhbGlkYXRpb24gbG9naWMgaW4gS1ZNLCBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBieSBpbnRyb2R1Y2luZyBhIHNlcXVlbmNlIGNvdW50ZXIuIFRoaXMgaXMgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ1OjEwLjk3ODIyOTMwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4NDg3NTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTZjZTIzMDQ0ZDZmODZjMjVhOTM0ZDRiZWYwOGJiOGZhZmZjNDliOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyA1IDE3OjQ1OjEwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbmluZGV4IGFiOGNmYWVjODJkMzEuLjRjMDk3MDg1NWM4YjIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuQEAgLTgwNSw2ICs4MDUsNyBAQCBzdHJ1Y3Qga3ZtIHtcXG4gXFx0LyogRm9yIG1hbmFnZW1lbnQgLyBpbnZhbGlkYXRpb24gb2YgZ2ZuX3RvX3Bmbl9jYWNoZXMgKi9cXG4gXFx0c3BpbmxvY2tfdCBncGNfbG9jaztcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBncGNfbGlzdDtcXG4rXFx0dW5zaWduZWQgbG9uZyBncGNfaW52YWxpZGF0ZV9zZXE7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBjcmVhdGVkX3ZjcHVzIGlzIHByb3RlY3RlZCBieSBrdm0tXFx1MDAzZWxvY2ssIGFuZCBpcyBpbmNyZW1lbnRlZFxcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9wZm5jYWNoZS5jIGIvdmlydC9rdm0vcGZuY2FjaGUuY1xcbmluZGV4IDcyOGQyYzFiNDg4YTguLjg3N2Q2ZDFkODIzMzIgMTAwNjQ0XFxuLS0tIGEvdmlydC9rdm0vcGZuY2FjaGUuY1xcbisrKyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmNcXG5AQCAtMjYsMzQgKzI2LDQwIEBAIHZvaWQgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKVxcbiB7XFxuIFxcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGM7XFxuK1xcdGJvb2wgd2FrZSA9IGZhbHNlO1xcbiBcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWdwY19sb2NrKTtcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShncGMsIFxcdTAwMjZrdm0tXFx1MDAzZWdwY19saXN0LCBsaXN0KSB7XFxuIFxcdFxcdHJlYWRfbG9ja19pcnEoXFx1MDAyNmdwYy1cXHUwMDNlbG9jayk7XFxuIFxcbiBcXHRcXHQvKiBPbmx5IGEgc2luZ2xlIHBhZ2Ugc28gbm8gbmVlZCB0byBjYXJlIGFib3V0IGxlbmd0aCAqL1xcbi1cXHRcXHRpZiAoZ3BjLVxcdTAwM2V2YWxpZCBcXHUwMDI2XFx1MDAyNiAhaXNfZXJyb3Jfbm9zbG90X3BmbihncGMtXFx1MDAzZXBmbikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIGdwYy1cXHUwMDNldWh2YSBcXHUwMDNlPSBzdGFydCBcXHUwMDI2XFx1MDAyNiBncGMtXFx1MDAzZXVodmEgXFx1MDAzYyBlbmQpIHtcXG4tXFx0XFx0XFx0cmVhZF91bmxvY2tfaXJxKFxcdTAwMjZncGMtXFx1MDAzZWxvY2spO1xcbi1cXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogVGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaGVyZSB3aGVyZSB0aGUgY2FjaGUgY291bGRcXG4tXFx0XFx0XFx0ICogYmUgbW9kaWZpZWQsIGFuZCBpbnZhbGlkYXRpb24gd291bGQgbm8gbG9uZ2VyIGJlXFxuLVxcdFxcdFxcdCAqIG5lY2Vzc2FyeS4gSGVuY2UgY2hlY2sgYWdhaW4gd2hldGhlciBpbnZhbGlkYXRpb25cXG4tXFx0XFx0XFx0ICogaXMgc3RpbGwgbmVjZXNzYXJ5IG9uY2UgdGhlIHdyaXRlIGxvY2sgaGFzIGJlZW5cXG4tXFx0XFx0XFx0ICogYWNxdWlyZWQuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXG4tXFx0XFx0XFx0d3JpdGVfbG9ja19pcnEoXFx1MDAyNmdwYy1cXHUwMDNlbG9jayk7XFxuLVxcdFxcdFxcdGlmIChncGMtXFx1MDAzZXZhbGlkIFxcdTAwMjZcXHUwMDI2ICFpc19lcnJvcl9ub3Nsb3RfcGZuKGdwYy1cXHUwMDNlcGZuKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgZ3BjLVxcdTAwM2V1aHZhIFxcdTAwM2U9IHN0YXJ0IFxcdTAwMjZcXHUwMDI2IGdwYy1cXHUwMDNldWh2YSBcXHUwMDNjIGVuZClcXG4tXFx0XFx0XFx0XFx0Z3BjLVxcdTAwM2V2YWxpZCA9IGZhbHNlO1xcbi1cXHRcXHRcXHR3cml0ZV91bmxvY2tfaXJxKFxcdTAwMjZncGMtXFx1MDAzZWxvY2spO1xcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKGdwYy1cXHUwMDNldWh2YSBcXHUwMDNlPSBzdGFydCBcXHUwMDI2XFx1MDAyNiBncGMtXFx1MDAzZXVodmEgXFx1MDAzYyBlbmQpIHtcXG4rXFx0XFx0XFx0d2FrZSA9IHRydWU7XFxuK1xcbitcXHRcXHRcXHRpZiAoZ3BjLVxcdTAwM2V2YWxpZCBcXHUwMDI2XFx1MDAyNiAhaXNfZXJyb3Jfbm9zbG90X3BmbihncGMtXFx1MDAzZXBmbikpIHtcXG4rXFx0XFx0XFx0XFx0cmVhZF91bmxvY2tfaXJxKFxcdTAwMjZncGMtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0XFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0XFx0ICogVGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaGVyZSB3aGVyZSB0aGUgY2FjaGUgY291bGRcXG4rXFx0XFx0XFx0XFx0ICogYmUgbW9kaWZpZWQsIGFuZCBpbnZhbGlkYXRpb24gd291bGQgbm8gbG9uZ2VyIGJlXFxuK1xcdFxcdFxcdFxcdCAqIG5lY2Vzc2FyeS4gSGVuY2UgY2hlY2sgYWdhaW4gd2hldGhlciBpbnZhbGlkYXRpb25cXG4rXFx0XFx0XFx0XFx0ICogaXMgc3RpbGwgbmVjZXNzYXJ5IG9uY2UgdGhlIHdyaXRlIGxvY2sgaGFzIGJlZW5cXG4rXFx0XFx0XFx0XFx0ICogYWNxdWlyZWQuXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXG4rXFx0XFx0XFx0XFx0d3JpdGVfbG9ja19pcnEoXFx1MDAyNmdwYy1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdFxcdFxcdGlmIChncGMtXFx1MDAzZXZhbGlkIFxcdTAwMjZcXHUwMDI2ICFpc19lcnJvcl9ub3Nsb3RfcGZuKGdwYy1cXHUwMDNlcGZuKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgZ3BjLVxcdTAwM2V1aHZhIFxcdTAwM2U9IHN0YXJ0IFxcdTAwMjZcXHUwMDI2IGdwYy1cXHUwMDNldWh2YSBcXHUwMDNjIGVuZClcXG4rXFx0XFx0XFx0XFx0XFx0Z3BjLVxcdTAwM2V2YWxpZCA9IGZhbHNlO1xcbitcXHRcXHRcXHRcXHR3cml0ZV91bmxvY2tfaXJxKFxcdTAwMjZncGMtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRyZWFkX3VubG9ja19pcnEoXFx1MDAyNmdwYy1cXHUwMDNlbG9jayk7XFxuIFxcdH1cXG4rXFx0aWYgKHdha2UpXFxuK1xcdFxcdGt2bS1cXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxKys7XFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWdwY19sb2NrKTtcXG4gfVxcbiBcXG5AQCAtMTI0LDcgKzEzMCw4IEBAIHN0YXRpYyB2b2lkIGdwY191bm1hcChrdm1fcGZuX3QgcGZuLCB2b2lkICpraHZhKVxcbiAjZW5kaWZcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NlcSlcXG4rc3RhdGljIGlubGluZSBib29sIG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbW11X3NlcSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgZ3BjX3NlcSlcXG4ge1xcbiBcXHQvKlxcbiBcXHQgKiBtbl9hY3RpdmVfaW52YWxpZGF0ZV9jb3VudCBhY3RzIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXNcXG5AQCAtMTQ5LDcgKzE1Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1tdV9zXFxuIFxcdCAqIG5ldyAoaW5jcmVtZW50ZWQpIHZhbHVlIG9mIG1tdV9pbnZhbGlkYXRlX3NlcSBpcyBvYnNlcnZlZC5cXG4gXFx0ICovXFxuIFxcdHNtcF9ybWIoKTtcXG4tXFx0cmV0dXJuIGt2bS1cXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxICE9IG1tdV9zZXE7XFxuK1xcdHJldHVybiBrdm0tXFx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcSAhPSBtbXVfc2VxIHx8IGt2bS1cXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxICE9IGdwY19zZXE7XFxuIH1cXG4gXFxuIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxcbkBAIC0xNTksNiArMTY2LDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXFxuIFxcdGt2bV9wZm5fdCBuZXdfcGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XFxuIFxcdHZvaWQgKm5ld19raHZhID0gTlVMTDtcXG4gXFx0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xcbitcXHR1bnNpZ25lZCBsb25nIGdwY19zZXE7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiBcXG4gXFx0c3RydWN0IGt2bV9mb2xsb3dfcGZuIGtmcCA9IHtcXG5AQCAtMTgyLDYgKzE5MCw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxcbiBcXG4gXFx0ZG8ge1xcbiBcXHRcXHRtbXVfc2VxID0gZ3BjLVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcXG4rXFx0XFx0Z3BjX3NlcSA9IGdwYy1cXHUwMDNla3ZtLVxcdTAwM2VncGNfaW52YWxpZGF0ZV9zZXE7XFxuIFxcdFxcdHNtcF9ybWIoKTtcXG4gXFxuIFxcdFxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNmdwYy1cXHUwMDNlbG9jayk7XFxuQEAgLTIzMiw3ICsyNDEsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcXG4gXFx0XFx0ICogYXR0ZW1wdGluZyB0byByZWZyZXNoLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0V0FSTl9PTl9PTkNFKGdwYy1cXHUwMDNldmFsaWQpO1xcbi1cXHR9IHdoaWxlIChtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoZ3BjLVxcdTAwM2Vrdm0sIG1tdV9zZXEpKTtcXG4rXFx0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cXHUwMDNla3ZtLCBtbXVfc2VxLCBncGNfc2VxKSk7XFxuIFxcbiBcXHRncGMtXFx1MDAzZXZhbGlkID0gdHJ1ZTtcXG4gXFx0Z3BjLVxcdTAwM2VwZm4gPSBuZXdfcGZuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NToxMS40NDc0NDQ4NjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDQ4NDg4MTkwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fWEVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0XCIsXG4gICAgXCJrdm1fZ3BjX3JlZnJlc2hcIixcbiAgICBcImt2bV9ncGNfYWN0aXZhdGVcIixcbiAgICBcImt2bV9ncGNfYWN0aXZhdGVfaHZhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBmbmNhY2hlIGludmFsaWRhdGlvbiBsb2dpYyBpbiBLVk0sIGZpeGluZyBhIHJhY2UgY29uZGl0aW9uIGJ5IGludHJvZHVjaW5nIGEgc2VxdWVuY2UgY291bnRlci4gVGhpcyBpcyBjb3JlIEtWTSBmdW5jdGlvbmFsaXR5IHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTZjZTIzMDQ0ZDZmODZjMjVhOTM0ZDRiZWYwOGJiOGZhZmZjNDliOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTc6NDU6MTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzEuLjRjMDk3MDg1NWM4YjIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTgwNSw2ICs4MDUsNyBAQCBzdHJ1Y3Qga3ZtIHtcbiBcdC8qIEZvciBtYW5hZ2VtZW50IC8gaW52YWxpZGF0aW9uIG9mIGdmbl90b19wZm5fY2FjaGVzICovXG4gXHRzcGlubG9ja190IGdwY19sb2NrO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBncGNfbGlzdDtcbitcdHVuc2lnbmVkIGxvbmcgZ3BjX2ludmFsaWRhdGVfc2VxO1xuIFxuIFx0LypcbiBcdCAqIGNyZWF0ZWRfdmNwdXMgaXMgcHJvdGVjdGVkIGJ5IGt2bS1cdTAwM2Vsb2NrLCBhbmQgaXMgaW5jcmVtZW50ZWRcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9wZm5jYWNoZS5jIGIvdmlydC9rdm0vcGZuY2FjaGUuY1xuaW5kZXggNzI4ZDJjMWI0ODhhOC4uODc3ZDZkMWQ4MjMzMiAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbisrKyBiL3ZpcnQva3ZtL3BmbmNhY2hlLmNcbkBAIC0yNiwzNCArMjYsNDAgQEAgdm9pZCBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKVxuIHtcbiBcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGM7XG4rXHRib29sIHdha2UgPSBmYWxzZTtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZrdm0tXHUwMDNlZ3BjX2xvY2spO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShncGMsIFx1MDAyNmt2bS1cdTAwM2VncGNfbGlzdCwgbGlzdCkge1xuIFx0XHRyZWFkX2xvY2tfaXJxKFx1MDAyNmdwYy1cdTAwM2Vsb2NrKTtcbiBcbiBcdFx0LyogT25seSBhIHNpbmdsZSBwYWdlIHNvIG5vIG5lZWQgdG8gY2FyZSBhYm91dCBsZW5ndGggKi9cbi1cdFx0aWYgKGdwYy1cdTAwM2V2YWxpZCBcdTAwMjZcdTAwMjYgIWlzX2Vycm9yX25vc2xvdF9wZm4oZ3BjLVx1MDAzZXBmbikgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBncGMtXHUwMDNldWh2YSBcdTAwM2U9IHN0YXJ0IFx1MDAyNlx1MDAyNiBncGMtXHUwMDNldWh2YSBcdTAwM2MgZW5kKSB7XG4tXHRcdFx0cmVhZF91bmxvY2tfaXJxKFx1MDAyNmdwYy1cdTAwM2Vsb2NrKTtcbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFRoZXJlIGlzIGEgc21hbGwgd2luZG93IGhlcmUgd2hlcmUgdGhlIGNhY2hlIGNvdWxkXG4tXHRcdFx0ICogYmUgbW9kaWZpZWQsIGFuZCBpbnZhbGlkYXRpb24gd291bGQgbm8gbG9uZ2VyIGJlXG4tXHRcdFx0ICogbmVjZXNzYXJ5LiBIZW5jZSBjaGVjayBhZ2FpbiB3aGV0aGVyIGludmFsaWRhdGlvblxuLVx0XHRcdCAqIGlzIHN0aWxsIG5lY2Vzc2FyeSBvbmNlIHRoZSB3cml0ZSBsb2NrIGhhcyBiZWVuXG4tXHRcdFx0ICogYWNxdWlyZWQuXG4tXHRcdFx0ICovXG4tXG4tXHRcdFx0d3JpdGVfbG9ja19pcnEoXHUwMDI2Z3BjLVx1MDAzZWxvY2spO1xuLVx0XHRcdGlmIChncGMtXHUwMDNldmFsaWQgXHUwMDI2XHUwMDI2ICFpc19lcnJvcl9ub3Nsb3RfcGZuKGdwYy1cdTAwM2VwZm4pIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICBncGMtXHUwMDNldWh2YSBcdTAwM2U9IHN0YXJ0IFx1MDAyNlx1MDAyNiBncGMtXHUwMDNldWh2YSBcdTAwM2MgZW5kKVxuLVx0XHRcdFx0Z3BjLVx1MDAzZXZhbGlkID0gZmFsc2U7XG4tXHRcdFx0d3JpdGVfdW5sb2NrX2lycShcdTAwMjZncGMtXHUwMDNlbG9jayk7XG4tXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChncGMtXHUwMDNldWh2YSBcdTAwM2U9IHN0YXJ0IFx1MDAyNlx1MDAyNiBncGMtXHUwMDNldWh2YSBcdTAwM2MgZW5kKSB7XG4rXHRcdFx0d2FrZSA9IHRydWU7XG4rXG4rXHRcdFx0aWYgKGdwYy1cdTAwM2V2YWxpZCBcdTAwMjZcdTAwMjYgIWlzX2Vycm9yX25vc2xvdF9wZm4oZ3BjLVx1MDAzZXBmbikpIHtcbitcdFx0XHRcdHJlYWRfdW5sb2NrX2lycShcdTAwMjZncGMtXHUwMDNlbG9jayk7XG4rXG4rXHRcdFx0XHQvKlxuK1x0XHRcdFx0ICogVGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaGVyZSB3aGVyZSB0aGUgY2FjaGUgY291bGRcbitcdFx0XHRcdCAqIGJlIG1vZGlmaWVkLCBhbmQgaW52YWxpZGF0aW9uIHdvdWxkIG5vIGxvbmdlciBiZVxuK1x0XHRcdFx0ICogbmVjZXNzYXJ5LiBIZW5jZSBjaGVjayBhZ2FpbiB3aGV0aGVyIGludmFsaWRhdGlvblxuK1x0XHRcdFx0ICogaXMgc3RpbGwgbmVjZXNzYXJ5IG9uY2UgdGhlIHdyaXRlIGxvY2sgaGFzIGJlZW5cbitcdFx0XHRcdCAqIGFjcXVpcmVkLlxuK1x0XHRcdFx0ICovXG4rXG4rXHRcdFx0XHR3cml0ZV9sb2NrX2lycShcdTAwMjZncGMtXHUwMDNlbG9jayk7XG4rXHRcdFx0XHRpZiAoZ3BjLVx1MDAzZXZhbGlkIFx1MDAyNlx1MDAyNiAhaXNfZXJyb3Jfbm9zbG90X3BmbihncGMtXHUwMDNlcGZuKSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgICBncGMtXHUwMDNldWh2YSBcdTAwM2U9IHN0YXJ0IFx1MDAyNlx1MDAyNiBncGMtXHUwMDNldWh2YSBcdTAwM2MgZW5kKVxuK1x0XHRcdFx0XHRncGMtXHUwMDNldmFsaWQgPSBmYWxzZTtcbitcdFx0XHRcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2Z3BjLVx1MDAzZWxvY2spO1xuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdHJlYWRfdW5sb2NrX2lycShcdTAwMjZncGMtXHUwMDNlbG9jayk7XG4gXHR9XG4rXHRpZiAod2FrZSlcbitcdFx0a3ZtLVx1MDAzZWdwY19pbnZhbGlkYXRlX3NlcSsrO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWdwY19sb2NrKTtcbiB9XG4gXG5AQCAtMTI0LDcgKzEzMCw4IEBAIHN0YXRpYyB2b2lkIGdwY191bm1hcChrdm1fcGZuX3QgcGZuLCB2b2lkICpraHZhKVxuICNlbmRpZlxuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1tdV9zZXEsXG4rXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGdwY19zZXEpXG4ge1xuIFx0LypcbiBcdCAqIG1uX2FjdGl2ZV9pbnZhbGlkYXRlX2NvdW50IGFjdHMgZm9yIGFsbCBpbnRlbnRzIGFuZCBwdXJwb3Nlc1xuQEAgLTE0OSw3ICsxNTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBtbXVfc1xuIFx0ICogbmV3IChpbmNyZW1lbnRlZCkgdmFsdWUgb2YgbW11X2ludmFsaWRhdGVfc2VxIGlzIG9ic2VydmVkLlxuIFx0ICovXG4gXHRzbXBfcm1iKCk7XG4tXHRyZXR1cm4ga3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcSAhPSBtbXVfc2VxO1xuK1x0cmV0dXJuIGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXEgIT0gbW11X3NlcSB8fCBrdm0tXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxICE9IGdwY19zZXE7XG4gfVxuIFxuIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuQEAgLTE1OSw2ICsxNjYsNyBAQCBzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcbiBcdGt2bV9wZm5fdCBuZXdfcGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XG4gXHR2b2lkICpuZXdfa2h2YSA9IE5VTEw7XG4gXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4rXHR1bnNpZ25lZCBsb25nIGdwY19zZXE7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcbiBcdHN0cnVjdCBrdm1fZm9sbG93X3BmbiBrZnAgPSB7XG5AQCAtMTgyLDYgKzE5MCw3IEBAIHN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxuIFxuIFx0ZG8ge1xuIFx0XHRtbXVfc2VxID0gZ3BjLVx1MDAzZWt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4rXHRcdGdwY19zZXEgPSBncGMtXHUwMDNla3ZtLVx1MDAzZWdwY19pbnZhbGlkYXRlX3NlcTtcbiBcdFx0c21wX3JtYigpO1xuIFxuIFx0XHR3cml0ZV91bmxvY2tfaXJxKFx1MDAyNmdwYy1cdTAwM2Vsb2NrKTtcbkBAIC0yMzIsNyArMjQxLDcgQEAgc3RhdGljIGt2bV9wZm5fdCBodmFfdG9fcGZuX3JldHJ5KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMpXG4gXHRcdCAqIGF0dGVtcHRpbmcgdG8gcmVmcmVzaC5cbiBcdFx0ICovXG4gXHRcdFdBUk5fT05fT05DRShncGMtXHUwMDNldmFsaWQpO1xuLVx0fSB3aGlsZSAobW11X25vdGlmaWVyX3JldHJ5X2NhY2hlKGdwYy1cdTAwM2Vrdm0sIG1tdV9zZXEpKTtcbitcdH0gd2hpbGUgKG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZShncGMtXHUwMDNla3ZtLCBtbXVfc2VxLCBncGNfc2VxKSk7XG4gXG4gXHRncGMtXHUwMDNldmFsaWQgPSB0cnVlO1xuIFx0Z3BjLVx1MDAzZXBmbiA9IG5ld19wZm47XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NToxMS40NDc0NDYyNzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzI0NTkwOTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtWTSBQRk4gQ2FjaGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGhlcmUsIGFuZCBpdCdzIHRvdWNoaW5nIHNvbWUgY29yZSBLVk0gaW5mcmFzdHJ1Y3R1cmU6IGBpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhgIGFuZCBgdmlydC9rdm0vcGZuY2FjaGUuY2AuIEVzc2VudGlhbGx5LCBpdCdzIGludHJvZHVjaW5nIHRoaXMgYGdwY19pbnZhbGlkYXRlX3NlcWAgZmllbGQgaW50byB0aGUgYHN0cnVjdCBrdm1gIGFuZCwgZnJvbSB3aGF0IEknbSBnYXRoZXJpbmcsIGluY3JlbWVudGluZyBpdCBpbiBgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0YCB3aGVuIGB3YWtlYCBpcyB0cnVlLiBSaWdodCwgYW5kIEkgc2VlIGl0J3MgYWxzbyBpbXBhY3RpbmcgYG1tdV9ub3RpZmllcl9yZXRyeV9jYWNoZWAgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIGBrdm0tXHUwMDNlZ3BjX2ludmFsaWRhdGVfc2VxICE9IGdwY19zZXFgLiBUaGlzIGlzIHByZXR0eSBjbGVhcmx5IGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gdG8gdGhlIHBmbmNhY2hlIG1lY2hhbmlzbSB3aXRoaW4gS1ZNLCBub3RoaW5nIHN1YnRsZSBoZXJlLlxuXG5TbywgdGhlIG5leHQgb2J2aW91cyBzdGVwIGlzIHRvIGRpZyBpbnRvIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBLY29uZmlnIG9wdGlvbnMgYXJlIHJlbGV2YW50IHRvIHRoaXMgY2hhbmdlIHRvIGVuc3VyZSBldmVyeXRoaW5nJ3MgZW5hYmxlZCBjb3JyZWN0bHkuIFNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyBgdmlydC9rdm0vcGZuY2FjaGUuY2AsIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIEtjb25maWcgZm9yIHRoZSBLVk0gYnVpbGQgb3B0aW9ucy4gVGhlbiwgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBzZWUgd2hhdCBmaWxlcyBhcmUgbGlua2VkIHdoZXJlLCBJJ2xsIGBncmVwYCBmb3IgYHBmbmNhY2hlLm9gIGluIGB2aXJ0L2t2bS9NYWtlZmlsZWAuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBwaWVjZSBmaXRzIGludG8gdGhlIG92ZXJhbGwgS1ZNIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTEzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6NDU6MTYuMTcyMDQwMDg5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTc5OTMwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZm5jYWNoZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6NDU6MTYuMjE3MjI4MzM4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyNDk3MTAwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS1ZNIE1ha2VmaWxlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIEtWTSBtb2R1bGUgaXMgYnVpbHQsIHNvIHRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYHZpcnQva3ZtL01ha2VmaWxlYC4gTGV0J3Mgc2VlIHdoYXQgc2VjcmV0cyB0aGlzIGZpbGUgaG9sZHMuIEl0J3MgdGhlIGNlbnRyYWwgcGxheWJvb2sgZm9yIGhvdyB0aGUgS1ZNIGNvbXBvbmVudHMgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQsIHNvIGl0J3MgYSBjcml0aWNhbCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGRlcGVuZGVuY3kgdHJlZSwgaW5jbHVkZSBwYXRocywgY29tcGlsYXRpb24gZmxhZ3MsIGFuZCBsaW5raW5nIHJ1bGVzIHRoYXQgZGVmaW5lIHRoZSBLVk0ncyBidWlsZCBwcm9jZXNzLiBUaGlzIGZpbGUgd2lsbCB0ZWxsIG1lIHdoaWNoIHNvdXJjZSBmaWxlcyBhcmUgaW52b2x2ZWQsIHdoaWNoIG9iamVjdCBmaWxlcyB0aGV5IGdlbmVyYXRlLCBhbmQgaG93IHRob3NlIG9iamVjdCBmaWxlcyBjb21lIHRvZ2V0aGVyIHRvIGNyZWF0ZSB0aGUgZmluYWwgS1ZNIG1vZHVsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA1NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ1OjE5Ljg0MjIwMzI1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzgzMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBmbmNhY2hlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9NYWtlZmlsZS5rdm09MTM9a3ZtLSQoQ09ORklHX0hBVkVfS1ZNX0RJUlRZX1JJTkcpICs9ICQoS1ZNKS9kaXJ0eV9yaW5nLm9cXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm06MTQ6a3ZtLSQoQ09ORklHX0hBVkVfS1ZNX1BGTkNBQ0hFKSArPSAkKEtWTSkvcGZuY2FjaGUub1xcbnZpcnQva3ZtL01ha2VmaWxlLmt2bS0xNS1rdm0tJChDT05GSUdfS1ZNX0dVRVNUX01FTUZEKSArPSAkKEtWTSkvZ3Vlc3RfbWVtZmQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NToxOS44ODc5OTI5M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDQyNzcwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgS1ZNIFBGTiBDYWNoZSBSZXF1aXJlbWVudCoqXG5cbkFscmlnaHQsIHNvIEkgc2VlIHdlIG5lZWQgYENPTkZJR19IQVZFX0tWTV9QRk5DQUNIRWAg4oCTIHRoYXQncyB0aGUga2V5LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgZnJvbSBhbiBhcmNoaXRlY3R1cmFsIHBlcnNwZWN0aXZlLCBpcyB0byB0cmFjZSBiYWNrIHRoZSBlbmFibGluZyBjb25kaXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHByZWNpc2VseSBmbGlwcyB0aGF0IHN3aXRjaCwgd2hhdCBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMgdHJpZ2dlciB0aGUgc2V0dGluZyBvZiBgSEFWRV9LVk1fUEZOQ0FDSEVgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiB0byB1bmRlcnN0YW5kIHdoeSBpdCdzIHJlcXVpcmVkIGluIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8gYW5kIGlkZW50aWZ5IHBvdGVudGlhbCBjb25mbGljdHMgb3Igb3B0aW1pemF0aW9ucy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgdGVsbHMgdXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzOTMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NToyMy40MzIyNzIyNzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MzkyNTIyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgSEFWRV9LVk1fUEZOQ0FDSEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1fWDg2XFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yNS1cXHRzZWxlY3QgSEFWRV9LVk1fSVJRQ0hJUFxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjI2OlxcdHNlbGVjdCBIQVZFX0tWTV9QRk5DQUNIRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTI3LVxcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX1RTT1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NToyNS4xODYyMDMzNDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYyMTAwNTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIHRoZSBgS1ZNX1g4NmAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgY2xlYXJseSB3aGF0J3MgZHJpdmluZyB0aGlzLiBCdXQgaXMgdGhhdCBpdD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBLVk1gIGl0c2VsZiBpc24ndCBzdWZmaWNpZW50LiBNeSBpbml0aWFsIGNoZWNrIHBvaW50cyB0byBgQ09ORklHX0tWTWAgYXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBmbGFnIHRvIGJlIGNvbmNlcm5lZCB3aXRoLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBhZmZlY3RlZCBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gdGhlc2UgZnVuY3Rpb25zOiBgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0YCwgYGh2YV90b19wZm5fcmV0cnlgICh3aGljaCwgaW50ZXJlc3RpbmdseSwgaXMgZGVmaW5lZCBhcyBgc3RhdGljYCksIGFuZCBgbW11X25vdGlmaWVyX3JldHJ5X2NhY2hlYCAod2hpY2ggaXMgYHN0YXRpYyBpbmxpbmVgKS4gVGhlIGZhY3QgdGhhdCBgaHZhX3RvX3Bmbl9yZXRyeWAgYW5kIGBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGVgIGFyZSBzdGF0aWMgc3VnZ2VzdHMgdGhleSBtYXkgaGF2ZSBiZWVuIGlubGluZWQsIG9yIGFyZSBsb2NhbCB0byB0aGUgY29kZSB3aGVyZSB0aGV5IGFyZSB1c2VkLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gbm93IGlzLCB3aGF0IGFyZSB0aGUgKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsaW5nIGBodmFfdG9fcGZuX3JldHJ5YD8gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGltcGFjdCBsaWVzLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBsYXJnZXIgY29udGV4dCBpbiB3aGljaCB0aGlzIGByZXRyeWAgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyBpbnZva2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgKnJlbHlpbmcqIG9uIHRoZSBjaGFuZ2VzIGluc2lkZSB0aGUgYGh2YV90b19wZm5fcmV0cnlgIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzA0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ1OjI5LjQ0ODMwNzUxM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI5NDUxOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHZhX3RvX3Bmbl9yZXRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9wZm5jYWNoZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL3BmbmNhY2hlLmM9MTMzPXN0YXRpYyBpbmxpbmUgYm9vbCBtbXVfbm90aWZpZXJfcmV0cnlfY2FjaGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG1tdV9zZXEsXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTE2MS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjE2MjpzdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTE2My17XFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTI2NT1zdGF0aWMgaW50IF9fa3ZtX2dwY19yZWZyZXNoKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhKVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0zMzAtXFxudmlydC9rdm0vcGZuY2FjaGUuYzozMzE6XFx0LyogTm90ZTogdGhlIG9mZnNldCBtdXN0IGJlIGNvcnJlY3QgYmVmb3JlIGNhbGxpbmcgaHZhX3RvX3Bmbl9yZXRyeSgpICovXFxudmlydC9rdm0vcGZuY2FjaGUuYy0zMzItXFx0Z3BjLVxcdTAwM2V1aHZhICs9IHBhZ2Vfb2Zmc2V0O1xcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0zMzgtXFx0aWYgKCFncGMtXFx1MDAzZXZhbGlkIHx8IGh2YV9jaGFuZ2UpIHtcXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjMzOTpcXHRcXHRyZXQgPSBodmFfdG9fcGZuX3JldHJ5KGdwYyk7XFxudmlydC9rdm0vcGZuY2FjaGUuYy0zNDAtXFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6NDU6MjkuNTAxMjU3ODAxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDQ5MzE1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipUcmFjaW5nIHRoZSBDYWxsIFBhdGggb2YgYF9fa3ZtX2dwY19yZWZyZXNoYCoqXG5cbk9rYXksIHNvIGBfX2t2bV9ncGNfcmVmcmVzaGAgaXMgdGhlIHRhcmdldCwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1cHN0cmVhbSBjYWxsZXIocykuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIHRhc2suIEkga25vdyBlbm91Z2ggYWJvdXQgdGhlIEtWTSBpbnRlcm5hbHMgdG8gcmVjb2duaXplIHRoZSBmdW5jdGlvbiBuYW1lIGFuZCBoYXZlIGEgZ2VuZXJhbCBpZGVhIG9mIGl0cyBwdXJwb3NlIOKAkyBzb21ldGhpbmcgcmVsYXRlZCB0byBnbG9iYWwgcGFnZSBjYWNoZSByZWZyZXNoLCBJJ2QgZ3Vlc3MuIE5vdyBJIG5lZWQgdG8ga25vdyB0aGUgaW1tZWRpYXRlIFwicGFyZW50XCIgb3IgY2FsbGVyLiBUaGUgcXVlc3Rpb24gbm93IGlzOiBXaGF0IGNvZGUgcGF0aCB1bHRpbWF0ZWx5IGxlYWRzIHRvIHRoZSBleGVjdXRpb24gb2YgYF9fa3ZtX2dwY19yZWZyZXNoYD8gSSBuZWVkIHRvIHVzZSBkZWJ1Z2dpbmcgdG9vbHMsIG9yIHBvc3NpYmx5IGRlbHZlIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIHN0YXJ0IHRyYWNpbmcgdGhlIGZ1bmN0aW9uIGNhbGxzIHRoYXQgbGVhZCB0byB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTA5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6NDU6MzIuNzA2MTkxODk4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTMzMTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2t2bV9ncGNfcmVmcmVzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9wZm5jYWNoZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL3BmbmNhY2hlLmM9MTYyPXN0YXRpYyBrdm1fcGZuX3QgaHZhX3RvX3Bmbl9yZXRyeShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjKVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0yNjQtXFxudmlydC9rdm0vcGZuY2FjaGUuYzoyNjU6c3RhdGljIGludCBfX2t2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgdWh2YSlcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTI2Ni17XFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTM3NT1pbnQga3ZtX2dwY19yZWZyZXNoKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHVuc2lnbmVkIGxvbmcgbGVuKVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0zOTAtXFxudmlydC9rdm0vcGZuY2FjaGUuYzozOTE6XFx0cmV0dXJuIF9fa3ZtX2dwY19yZWZyZXNoKGdwYywgZ3BjLVxcdTAwM2VncGEsIHVodmEpO1xcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMzkyLX1cXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM9NDA2PXN0YXRpYyBpbnQgX19rdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhLFxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy00MzItXFx0fVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDMzOlxcdHJldHVybiBfX2t2bV9ncGNfcmVmcmVzaChncGMsIGdwYSwgdWh2YSk7XFxudmlydC9rdm0vcGZuY2FjaGUuYy00MzQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NTozMi43NTc1Mjg3MjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk2MDg4NjMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydC1sZXZlbCB1bmRlcnN0YW5kaW5nOlxuXG4qKkFuYWx5emluZyBLVk0gR3JhcGhpY3MgUHJvY2Vzc29yIENvbnRleHQgQWN0aXZhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpcyBjaXJjbGluZyBhcm91bmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBrdm1fZ3BjX3JlZnJlc2hgIGFuZCBgX19rdm1fZ3BjX2FjdGl2YXRlYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgX19rdm1fZ3BjX2FjdGl2YXRlYCBwbGF5cyBhIGtleSByb2xlLCBhbmQgSSdtIGJldHRpbmcgdGhhdCBga3ZtX2dwY19hY3RpdmF0ZWAgaXRzZWxmIHByb2JhYmx5IGNhbGxzIGl0LiBJJ20gZm9jdXNpbmcgb24gdGhlIGludGVyYWN0aW9uIGFuZCBvcmRlci4gVGhlIHJlZnJlc2ggaXMgaW1wb3J0YW50LCBidXQgY2xlYXJseSwgdGhlIGFjdGl2YXRpb24gaXMgdGhlIGNvcmUgcHJvY2VzcyBJIG5lZWQgdG8gdW5kZXJzdGFuZCwgd2l0aCB0aGUgZG91YmxlIHVuZGVyc2NvcmUgZnVuY3Rpb24gYmVpbmcgdGhlIGZ1bmRhbWVudGFsIGNhbGwuIEkgd2lsbCB0cmFjZSB0aGUgY2FsbCBzdGFjayBub3cgYW5kIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gSSBoYXZlIHRvIHNlZSBob3cgYW5kIHdoZW4gdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYW5kIHdoYXQgdGhlIHN0YXRlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhleSBydW4gaXMuIFRoYXQgc2hvdWxkIGhlbHAgdG8gcmVzb2x2ZSBteSBjdXJyZW50IHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMzEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NTozNi43MTg0MTc1NjNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMTgwODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fa3ZtX2dwY19hY3RpdmF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9wZm5jYWNoZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL3BmbmNhY2hlLmM9Mzk0PXZvaWQga3ZtX2dwY19pbml0KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDA1LVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDA2OnN0YXRpYyBpbnQgX19rdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhLFxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDA3LVxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgbGVuKVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYz00MzY9aW50IGt2bV9ncGNfYWN0aXZhdGUoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGxlbilcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDQ0LVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDQ1OlxcdHJldHVybiBfX2t2bV9ncGNfYWN0aXZhdGUoZ3BjLCBncGEsIEtWTV9IVkFfRVJSX0JBRCwgbGVuKTtcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ0Ni19XFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTQ0OD1pbnQga3ZtX2dwY19hY3RpdmF0ZV9odmEoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgdW5zaWduZWQgbG9uZyB1aHZhLCB1bnNpZ25lZCBsb25nIGxlbilcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDUyLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDUzOlxcdHJldHVybiBfX2t2bV9ncGNfYWN0aXZhdGUoZ3BjLCBJTlZBTElEX0dQQSwgdWh2YSwgbGVuKTtcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ1NC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ1OjM2Ljc2OTYwMzI3M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTA4MzAxNTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gRnVuY3Rpb24gTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkndmUgaWRlbnRpZmllZCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW52b2x2ZWQgaGVyZTogYGdmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydGAsIGBrdm1fZ3BjX3JlZnJlc2hgLCBga3ZtX2dwY19hY3RpdmF0ZWAsIGFuZCBga3ZtX2dwY19hY3RpdmF0ZV9odmFgLiBSaWdodCwgY29uZmlybWluZyB0aGF0IHRoZXkncmUgS1ZNLXNwZWNpZmljIGlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4gWWVwLCB0aGV5IGFyZS5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyB0b3VjaGluZyBgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0YCBhbmQgYGh2YV90b19wZm5fcmV0cnlgLCBzbyBJIHNob3VsZCBwcmlvcml0aXplIHRob3NlIHNwZWNpZmljYWxseSwgYWxvbmcgd2l0aCB0aGUgb3RoZXJzLiBOb3csIEkgd2FudCB0byBzZWUgd2hlcmUgYGdmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydGAgaXMgYWN0dWFsbHkgKmNhbGxlZCogZnJvbSB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsuIFVuZGVyc3RhbmRpbmcgaXRzIHVzYWdlIGlzIGtleSB0byBhc3Nlc3NpbmcgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gTGV0J3MgZGlnIGludG8gdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgxMCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NTo0MS44Nzc5MDc5ODlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDM0MTM5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jPTcyMT1zdGF0aWMgaW50IGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25vdGlmaWVyICptbixcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNzU3LVxcdCAqL1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6NzU4OlxcdGdmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydChrdm0sIHJhbmdlLVxcdTAwM2VzdGFydCwgcmFuZ2UtXFx1MDAzZWVuZCk7XFxudmlydC9rdm0va3ZtX21haW4uYy03NTktXFxuLS1cXG52aXJ0L2t2bS9rdm1fbW0uaD01OT1rdm1fcGZuX3QgaHZhX3RvX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCk7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbW0uaC02MS0jaWZkZWYgQ09ORklHX0hBVkVfS1ZNX1BGTkNBQ0hFXFxudmlydC9rdm0va3ZtX21tLmg6NjI6dm9pZCBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGt2bSAqa3ZtLFxcbnZpcnQva3ZtL2t2bV9tbS5oLTYzLVxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxudmlydC9rdm0va3ZtX21tLmgtNjUtI2Vsc2VcXG52aXJ0L2t2bS9rdm1fbW0uaDo2NjpzdGF0aWMgaW5saW5lIHZvaWQgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0KHN0cnVjdCBrdm0gKmt2bSxcXG52aXJ0L2t2bS9rdm1fbW0uaC02Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTI0LSAqL1xcbnZpcnQva3ZtL3BmbmNhY2hlLmM6MjU6dm9pZCBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnQoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMjYtXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NTo0My42MjEzMjYzMTlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5OTM3MzI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBNTVUgSW52YWxpZGF0aW9uKipcblxuUmlnaHQsIHNvIHRoaXMgaXMgY2FsbGVkIGZyb20gYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydGAuIFRoYXQgdGVsbHMgbWUgaW1tZWRpYXRlbHkgdGhhdCB0aGUgZm9jdXMgaXMgb24gYSBNTVUgbm90aWZpZXIgY2FsbGJhY2ssIHNwZWNpZmljYWxseSB0aGUgYGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydGAgZnVuY3Rpb24uIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBhIGtleSBjb250ZXh0LiBJJ20gYXNzdW1pbmcgdGhpcyBmdW5jdGlvbiBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGEgcmFuZ2UgaW52YWxpZGF0aW9uIG9wZXJhdGlvbiByZWxhdGVkIHRvIHRoZSBLVk0gTU1VLiBJdCdzIHRoZSBiZWdpbm5pbmcgb2YgYSBwcm9jZXNzLlxuXG5Ob3csIG15IG1pbmQgc2hpZnRzIHRvIGBrdm1fZ3BjX3JlZnJlc2hgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGt2bV9ncGNfcmVmcmVzaGAgbWlnaHQgcmVsYXRlIHRvIHRoaXMgTU1VIGludmFsaWRhdGlvbiBwcm9jZXNzLiBJcyBpdCBjYWxsZWQgYmVmb3JlLCBhZnRlciwgZHVyaW5nLCBvciBpbmRlcGVuZGVudGx5PyBEb2VzIHRoZSBNTVUgaW52YWxpZGF0aW9uIHRyaWdnZXIgdGhlIHJlZnJlc2gsIG9yIGlzIHRoZXJlIHNvbWUgb3RoZXIgY29ubmVjdGlvbiBJIG5lZWQgdG8gZXhwbG9yZT8gVGhpbmtpbmcgYWJvdXQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIGRldGVybWluZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY2NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ1OjQ3LjgyMDcwODk4N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MjcxMDcxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fZ3BjX3JlZnJlc2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuYz0zMjQyPXN0YXRpYyB2b2lkIGt2bV9zZXR1cF9ndWVzdF9wdmNsb2NrKHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvICpyZWZfaHZfY2xvY2ssXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMzI1Ni1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MzI1NzpcXHRcXHRpZiAoa3ZtX2dwY19yZWZyZXNoKGdwYywgb2Zmc2V0ICsgc2l6ZW9mKCpndWVzdF9odl9jbG9jaykpKVxcbmFyY2gveDg2L2t2bS94ODYuYy0zMjU4LVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0zOD1zdGF0aWMgaW50IGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtNTEtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjUyOlxcdFxcdHJldCA9IGt2bV9ncGNfcmVmcmVzaChncGMsIFBBR0VfU0laRSk7XFxuYXJjaC94ODYva3ZtL3hlbi5jLTUzLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTUzPXN0YXRpYyBpbnQgeGVuX2dldF9ndWVzdF9wdmNsb2NrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0xNjQtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjE2NTpcXHRcXHRyID0ga3ZtX2dwY19yZWZyZXNoKGdwYywgb2Zmc2V0ICsgc2l6ZW9mKCpodl9jbG9jaykpO1xcbmFyY2gveDg2L2t2bS94ZW4uYy0xNjYtXFx0XFx0aWYgKHIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MzIxPXN0YXRpYyB2b2lkIGt2bV94ZW5fdXBkYXRlX3J1bnN0YXRlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdiwgYm9vbCBhdG9taWMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtNDM4LVxcbmFyY2gveDg2L2t2bS94ZW4uYzo0Mzk6XFx0XFx0aWYgKGt2bV9ncGNfcmVmcmVzaChncGMxLCB1c2VyX2xlbjEpKVxcbmFyY2gveDg2L2t2bS94ZW4uYy00NDAtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTYzOT12b2lkIGt2bV94ZW5faW5qZWN0X3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdilcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy02NTYtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjY1NzpcXHRcXHRpZiAoa3ZtX2dwY19yZWZyZXNoKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSlcXG5hcmNoL3g4Ni9rdm0veGVuLmMtNjU4LVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz02OTc9aW50IF9fa3ZtX3hlbl9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdilcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy03MzAtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjczMTpcXHRcXHRpZiAoa3ZtX2dwY19yZWZyZXNoKGdwYywgc2l6ZW9mKHN0cnVjdCB2Y3B1X2luZm8pKSkge1xcbmFyY2gveDg2L2t2bS94ZW4uYy03MzItXFx0XFx0XFx0LypcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0xOTAxPXN0YXRpYyBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huKHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0xOTQ0LVxcdFxcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNyY3UpO1xcbmFyY2gveDg2L2t2bS94ZW4uYzoxOTQ1OlxcdFxcdHJjID0ga3ZtX2dwY19yZWZyZXNoKGdwYywgUEFHRV9TSVpFKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTk0Ni1cXHRcXHRzcmN1X3JlYWRfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNyY3UsIGlkeCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTQ5Mj1ib29sIGt2bV9ncGNfY2hlY2soc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgdW5zaWduZWQgbG9uZyBsZW4pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE0OTQtLyoqXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE0OTU6ICoga3ZtX2dwY19yZWZyZXNoIC0gdXBkYXRlIGEgcHJldmlvdXNseSBpbml0aWFsaXplZCBjYWNoZS5cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ5Ni0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE1MDktICovXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE1MTA6aW50IGt2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCB1bnNpZ25lZCBsb25nIGxlbik7XFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE1MTEtXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTE2Mj1zdGF0aWMga3ZtX3Bmbl90IGh2YV90b19wZm5fcmV0cnkoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYylcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtMjY0LVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6MjY1OnN0YXRpYyBpbnQgX19rdm1fZ3BjX3JlZnJlc2goc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIHVodmEpXFxudmlydC9rdm0vcGZuY2FjaGUuYy0yNjYte1xcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy0zNzQtXFxudmlydC9rdm0vcGZuY2FjaGUuYzozNzU6aW50IGt2bV9ncGNfcmVmcmVzaChzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCB1bnNpZ25lZCBsb25nIGxlbilcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM3Ni17XFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTM5MC1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjM5MTpcXHRyZXR1cm4gX19rdm1fZ3BjX3JlZnJlc2goZ3BjLCBncGMtXFx1MDAzZWdwYSwgdWh2YSk7XFxudmlydC9rdm0vcGZuY2FjaGUuYy0zOTItfVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYz00MDY9c3RhdGljIGludCBfX2t2bV9ncGNfYWN0aXZhdGUoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIHVodmEsXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQzMi1cXHR9XFxudmlydC9rdm0vcGZuY2FjaGUuYzo0MzM6XFx0cmV0dXJuIF9fa3ZtX2dwY19yZWZyZXNoKGdwYywgZ3BhLCB1aHZhKTtcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQzNC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ1OjQ5LjQwMzQzMjEzOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc0MDA1NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBLVk0gYW5kIEdQQyBSZWZyZXNoKipcblxuT2theSwgc28gYGt2bV9ncGNfcmVmcmVzaGAuIEkgc2VlIHRoaXMgZnVuY3Rpb24gY2FsbCBpcyB1c2VkIGluIGJvdGggYGFyY2gveDg2L2t2bS94ODYuY2AgYW5kIGBhcmNoL3g4Ni9rdm0veGVuLmNgLiBUaGF0J3MgYSBkZWNlbnQgc3RhcnQ7IGl0IHRlbGxzIG1lIHRoZSBzY29wZSBvZiBpdHMgdXNhZ2UsIGltbWVkaWF0ZWx5IG5hcnJvd2luZyBkb3duIHRoZSBhcmVhIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBpdCdzIHJlbGV2YW50IGluIGJvdGggdGhlIHN0YW5kYXJkIHg4NiBLVk0gY29udGV4dCBhbmQsIGludGVyZXN0aW5nbHksIHdpdGhpbiB0aGUgWGVuIGludGVncmF0aW9uLiBUaGF0IG1pZ2h0IHBvaW50IHRvIHNvbWV0aGluZyBhcmNoaXRlY3R1cmFsbHkgc2lnbmlmaWNhbnQgb3IgcGVyaGFwcyBqdXN0IGEgc2hhcmVkIG5lZWQgYWNyb3NzIHRob3NlIHR3byBtb2Rlcy5cblxuTm93LCBiZWZvcmUgSSBkaWcgZnVydGhlciBpbnRvIGBrdm1fZ3BjX3JlZnJlc2hgIGl0c2VsZiwgSSB0aGluayBJJ2xsIHBpdm90IHNsaWdodGx5LiBTaW5jZSBgcmVmcmVzaGAgb2Z0ZW4gaW1wbGllcyBhbiBhY3RpdmF0aW9uIG9yIHVwZGF0ZSBwcm9jZXNzLCBpdCBtYWtlcyBzZW5zZSB0byBsb29rIGZvciB3aGVyZSB0aGlzIEdQQyBpcyAqYWN0aXZhdGVkKiBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoZXJlZm9yZSwgSSBzaG91bGQgY2hlY2sgb3V0IGBrdm1fZ3BjX2FjdGl2YXRlYC4gVGhhdCBtaWdodCBnaXZlIG1lIHNvbWUgY29udGV4dCBhYm91dCB3aGF0J3MgYmVpbmcgcmVmcmVzaGVkIGluIHRoZSBmaXJzdCBwbGFjZS4gSXQgY291bGQgYmUgYW4gaW5pdGlhbGl6YXRpb24sIGVuYWJsaW5nLCBvciBwZXJoYXBzIGEgZGlmZmVyZW50IGNvbnRyb2wgbWVjaGFuaXNtIGVudGlyZWx5LCBhbmQga25vd2luZyB0aGUgYWN0aXZhdGlvbiBjb250ZXh0IHdpbGwgZ3JlYXRseSBoZWxwIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlZnJlc2ggZnVuY3Rpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgYnJvYWRlciBwaWN0dXJlIGJlZm9yZSBJIGdldCBib2dnZWQgZG93biBpbiB0aGUgcmVmcmVzaCBkZXRhaWxzIHRoZW1zZWx2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0OTksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NTo1My43Nzc0NDE1ODdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTc2NjgzNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2dwY19hY3RpdmF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jPTI0Mjg9c3RhdGljIHZvaWQga3ZtX3dyaXRlX3N5c3RlbV90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3Qgc3lzdGVtX3RpbWUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjQ0NC1cXHRpZiAoc3lzdGVtX3RpbWUgXFx1MDAyNiAxKVxcbmFyY2gveDg2L2t2bS94ODYuYzoyNDQ1OlxcdFxcdGt2bV9ncGNfYWN0aXZhdGUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gucHZfdGltZSwgc3lzdGVtX3RpbWUgXFx1MDAyNiB+MVVMTCxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjQ0Ni1cXHRcXHRcXHRcXHQgc2l6ZW9mKHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvKSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MzIxPXN0YXRpYyB2b2lkIGt2bV94ZW5fdXBkYXRlX3J1bnN0YXRlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdiwgYm9vbCBhdG9taWMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtNDg1LVxcdFxcdFxcdC8qXFxuYXJjaC94ODYva3ZtL3hlbi5jOjQ4NjpcXHRcXHRcXHQgKiBVc2Uga3ZtX2dwY19hY3RpdmF0ZSgpIGhlcmUgYmVjYXVzZSBpZiB0aGUgcnVuc3RhdGVcXG5hcmNoL3g4Ni9rdm0veGVuLmMtNDg3LVxcdFxcdFxcdCAqIGFyZWEgd2FzIGNvbmZpZ3VyZWQgaW4gMzItYml0IG1vZGUgYW5kIG9ubHkgZXh0ZW5kc1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTQ5MC1cXHRcXHRcXHQgKi9cXG5hcmNoL3g4Ni9rdm0veGVuLmM6NDkxOlxcdFxcdFxcdGlmIChrdm1fZ3BjX2FjdGl2YXRlKGdwYzIsIGdwYzEtXFx1MDAzZWdwYSArIHVzZXJfbGVuMSxcXG5hcmNoL3g4Ni9rdm0veGVuLmMtNDkyLVxcdFxcdFxcdFxcdFxcdCAgICAgdXNlcl9sZW4yKSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz03NDY9aW50IGt2bV94ZW5faHZtX3NldF9hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzg1LVxcdFxcdFxcdH0gZWxzZSB7XFxuYXJjaC94ODYva3ZtL3hlbi5jOjc4NjpcXHRcXHRcXHRcXHRyID0ga3ZtX2dwY19hY3RpdmF0ZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGUsXFxuYXJjaC94ODYva3ZtL3hlbi5jLTc4Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGdmbl90b19ncGEoZ2ZuKSwgUEFHRV9TSVpFKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy03OTctXFx0XFx0XFx0fSBlbHNlIHtcXG5hcmNoL3g4Ni9rdm0veGVuLmM6Nzk4OlxcdFxcdFxcdFxcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlX2h2YShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGUsXFxuYXJjaC94ODYva3ZtL3hlbi5jLTc5OS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgKHVuc2lnbmVkIGxvbmcpaHZhLCBQQUdFX1NJWkUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTkwNj1pbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTkyOC1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6OTI5OlxcdFxcdFxcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnhlbi52Y3B1X2luZm9fY2FjaGUsXFxuYXJjaC94ODYva3ZtL3hlbi5jLTkzMC1cXHRcXHRcXHRcXHRcXHQgICAgIGRhdGEtXFx1MDAzZXUuZ3BhLCBzaXplb2Yoc3RydWN0IHZjcHVfaW5mbykpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTkzNy1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6OTM4OlxcdFxcdFxcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlX2h2YShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC54ZW4udmNwdV9pbmZvX2NhY2hlLFxcbmFyY2gveDg2L2t2bS94ZW4uYy05MzktXFx0XFx0XFx0XFx0XFx0XFx0IGRhdGEtXFx1MDAzZXUuaHZhLCBzaXplb2Yoc3RydWN0IHZjcHVfaW5mbykpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTk1My1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6OTU0OlxcdFxcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnhlbi52Y3B1X3RpbWVfaW5mb19jYWNoZSxcXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTU1LVxcdFxcdFxcdFxcdCAgICAgZGF0YS1cXHUwMDNldS5ncGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTg3LVxcdFxcdHN6MSA9IFBBR0VfU0laRSAtIChkYXRhLVxcdTAwM2V1LmdwYSBcXHUwMDI2IH5QQUdFX01BU0spO1xcbmFyY2gveDg2L2t2bS94ZW4uYzo5ODg6XFx0XFx0ciA9IGt2bV9ncGNfYWN0aXZhdGUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gueGVuLnJ1bnN0YXRlX2NhY2hlLFxcbmFyY2gveDg2L2t2bS94ZW4uYy05ODktXFx0XFx0XFx0XFx0ICAgICBkYXRhLVxcdTAwM2V1LmdwYSwgc3oxKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy05OTgtXFx0XFx0XFx0QlVHX09OKChkYXRhLVxcdTAwM2V1LmdwYSArIHN6MSkgXFx1MDAyNiB+UEFHRV9NQVNLKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmM6OTk5OlxcdFxcdFxcdHIgPSBrdm1fZ3BjX2FjdGl2YXRlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnhlbi5ydW5zdGF0ZTJfY2FjaGUsXFxuYXJjaC94ODYva3ZtL3hlbi5jLTEwMDAtXFx0XFx0XFx0XFx0XFx0ICAgICBkYXRhLVxcdTAwM2V1LmdwYSArIHN6MSwgc3oyKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xNDQwPXZvaWQga3ZtX2dwY19pbml0KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHN0cnVjdCBrdm0gKmt2bSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ0Mi0vKipcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTQ0MzogKiBrdm1fZ3BjX2FjdGl2YXRlIC0gcHJlcGFyZSBhIGNhY2hlZCBrZXJuZWwgbWFwcGluZyBhbmQgSFBBIGZvciBhIGdpdmVuIGd1ZXN0XFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE0NDQtICogICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGFkZHJlc3MuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ1Ny0gKi9cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTQ1ODppbnQga3ZtX2dwY19hY3RpdmF0ZShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgbGVuKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ1OS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ2MC0vKipcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTQ2MTogKiBrdm1fZ3BjX2FjdGl2YXRlX2h2YSAtIHByZXBhcmUgYSBjYWNoZWQga2VybmVsIG1hcHBpbmcgYW5kIEhQQSBmb3IgYSBnaXZlbiBIVkEuXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE0NjItICpcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNDcwLSAqXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE0NzE6ICogVGhlIHNlbWFudGljcyBvZiB0aGlzIGZ1bmN0aW9uIGFyZSB0aGUgc2FtZSBhcyB0aG9zZSBvZiBrdm1fZ3BjX2FjdGl2YXRlKCkuIEl0XFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE0NzItICogbWVyZWx5IGJ5cGFzc2VzIGEgbGF5ZXIgb2YgYWRkcmVzcyB0cmFuc2xhdGlvbi5cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ3My0gKi9cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTQ3NDppbnQga3ZtX2dwY19hY3RpdmF0ZV9odmEoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgdW5zaWduZWQgbG9uZyBodmEsIHVuc2lnbmVkIGxvbmcgbGVuKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ3NS1cXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM9Mzk0PXZvaWQga3ZtX2dwY19pbml0KHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDA1LVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDA2OnN0YXRpYyBpbnQgX19rdm1fZ3BjX2FjdGl2YXRlKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyB1aHZhLFxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDA3LVxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgbGVuKVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy00MzUtXFxudmlydC9rdm0vcGZuY2FjaGUuYzo0MzY6aW50IGt2bV9ncGNfYWN0aXZhdGUoc3RydWN0IGdmbl90b19wZm5fY2FjaGUgKmdwYywgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGxlbilcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQzNy17XFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ0NC1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jOjQ0NTpcXHRyZXR1cm4gX19rdm1fZ3BjX2FjdGl2YXRlKGdwYywgZ3BhLCBLVk1fSFZBX0VSUl9CQUQsIGxlbik7XFxudmlydC9rdm0vcGZuY2FjaGUuYy00NDYtfVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDQ3LVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDQ4OmludCBrdm1fZ3BjX2FjdGl2YXRlX2h2YShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCB1bnNpZ25lZCBsb25nIHVodmEsIHVuc2lnbmVkIGxvbmcgbGVuKVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDQ5LXtcXG4tLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmMtNDUyLVxcbnZpcnQva3ZtL3BmbmNhY2hlLmM6NDUzOlxcdHJldHVybiBfX2t2bV9ncGNfYWN0aXZhdGUoZ3BjLCBJTlZBTElEX0dQQSwgdWh2YSwgbGVuKTtcXG52aXJ0L2t2bS9wZm5jYWNoZS5jLTQ1NC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ1OjU1LjM5NTExNTQ1OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTcyMDU1NDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgbGV0J3Mgc2VlLiBNeSBpbml0aWFsIHNjYW4gcG9pbnRzIG1lIHRvd2FyZCBga3ZtX2dwY19hY3RpdmF0ZWAgYW5kIGBrdm1fZ3BjX2FjdGl2YXRlX2h2YWAsIHNwZWNpZmljYWxseSB3aXRoaW4gYGFyY2gveDg2L2t2bS94ZW4uY2AgYW5kIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBmdXp6aW5nLCBnaXZlbiB0aGVpciByb2xlcyBpbiB0aGUgS1ZNIGFyY2hpdGVjdHVyZS4gIEkgc2hvdWxkIGFsc28gYWRkIGBrdm1fZ3BjX3JlZnJlc2hgIHRvIHRoZSBsaXN0OyBpdCBsaWtlbHkgaGFuZGxlcyByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuICBGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIGxvb2sgaW50byBga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0YCBhbmQgdHJhY2UgaXQgdG8gaXRzIGNhbGwgdG8gYGdmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydGAuIFRoYXQgY291bGQgYmUgYSBrZXkgYXJlYSBmb3IgdnVsbmVyYWJpbGl0aWVzLlxuXG5Ob3csIGxldCdzIHF1aWNrbHkgY2hlY2sgaWYgYGt2bV9ncGNfYWN0aXZhdGVgIGlzIGV4cG9ydGVkLCBtYWtpbmcgaXQgYWNjZXNzaWJsZSBmb3IgZXh0ZXJuYWwgY2FsbHMuIFllcCwgSSBzZWUgaXQncyBkZWZpbmVkIGFuZCBleHBvcnRlZCBpbiBgdmlydC9rdm0vcGZuY2FjaGUuY2AuIEV4Y2VsbGVudCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMzcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6NDY6MDEuMzY3MTc0MzExWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTI1NzU3MjczLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MX0dQTFxcXFwoa3ZtX2dwY19hY3RpdmF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ2OjAzLjQ5Mjk0MDE4NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTE1NTE3MTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS1ZNIFBGTiBDYWNoZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTSBQRk4gY2FjaGUgd29ya3MsIGFuZCB0aGF0IG1lYW5zIHN0YXJ0aW5nIGF0IHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgYEVYUE9SVF9TWU1CT0xgIHdpdGhpbiBgdmlydC9rdm0vcGZuY2FjaGUuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGV4cG9zZWQsIGFuZCB3aHkuIEknbSBndWVzc2luZyBpdCdzIHJlbGF0ZWQgdG8gc29tZSBzb3J0IG9mIGludGVyZmFjZSBmb3Igb3RoZXIgS1ZNIGNvbXBvbmVudHMgb3IgcG9zc2libHkgZXZlbiBleHRlcm5hbCBtb2R1bGVzIHRvIGludGVyYWN0IHdpdGggdGhlIFBGTiBjYWNoZS4gTGV0IG1lIHNlZSB3aGF0IEkgY2FuIGZpbmQuIEl0IG1pZ2h0IGV4cG9zZSBob29rcyBmb3IgcGFnZSBpbnZhbGlkYXRpb24sIFBGTiBhbGxvY2F0aW9uLCBvciBjYWNoZSBtYW5hZ2VtZW50LiBJJ20gYW50aWNpcGF0aW5nIHNvbWUgcG90ZW50aWFsIGZvciBpbnRlci1tb2R1bGUgZGVwZW5kZW5jaWVzIGhlcmUsIGFuZCB0aGUgdXNlIG9mIGBFWFBPUlRfU1lNQk9MYCBpcyBhIGtleSBpbmRpY2F0b3Igb2YgdGhvc2UgZHluYW1pY3MuIFRoaXMgY291bGQgaGF2ZSBzb21lIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDY0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6NDY6MDkuNDA4NDY3NDEzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM0MjAwMjcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xfR1BMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL3BmbmNhY2hlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ2OjA5LjU0MTkwMzMzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODUwNzQxODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0gUEZOIENhY2hlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgS1ZNIFBGTiBjYWNoZSB3b3JrcywgYW5kIHRoYXQgbWVhbnMgc3RhcnRpbmcgYXQgdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBgRVhQT1JUX1NZTUJPTGAgd2l0aGluIGB2aXJ0L2t2bS9wZm5jYWNoZS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgZXhwb3NlZCwgYW5kIHdoeS4gSSdtIGd1ZXNzaW5nIGl0J3MgcmVsYXRlZCB0byBzb21lIHNvcnQgb2YgaW50ZXJmYWNlIGZvciBvdGhlciBLVk0gY29tcG9uZW50cyBvciBwb3NzaWJseSBldmVuIGV4dGVybmFsIG1vZHVsZXMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgUEZOIGNhY2hlLiBMZXQgbWUgc2VlIHdoYXQgSSBjYW4gZmluZC4gSXQgbWlnaHQgZXhwb3NlIGhvb2tzIGZvciBwYWdlIGludmFsaWRhdGlvbiwgUEZOIGFsbG9jYXRpb24sIG9yIGNhY2hlIG1hbmFnZW1lbnQuIEknbSBhbnRpY2lwYXRpbmcgc29tZSBwb3RlbnRpYWwgZm9yIGludGVyLW1vZHVsZSBkZXBlbmRlbmNpZXMgaGVyZSwgYW5kIHRoZSB1c2Ugb2YgYEVYUE9SVF9TWU1CT0xgIGlzIGEga2V5IGluZGljYXRvciBvZiB0aG9zZSBkeW5hbWljcy4gVGhpcyBjb3VsZCBoYXZlIHNvbWUgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MzksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NjoxMy4yMjY5Nzk2ODZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjI0ODE5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL3BmbmNhY2hlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ2OjEzLjI3MjYwOTc2NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTc5NDY1NTUxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIFBGTiBDYWNoZSBTeW1ib2wgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgdmlydC9rdm0vcGZuY2FjaGUuY2AuIEkgaW1tZWRpYXRlbHkgc2VlIGl0J3MgY29tcGlsZWQgZGlyZWN0bHkgaW50byBga3ZtLmtvYC4gIFRoYXQgbWVhbnMgaXQgZG9lc24ndCAqbmVlZCogdG8gZXhwb3J0IHN5bWJvbHMgc2luY2UgaXRzIHByaW1hcnkgY29uc3VtZXIsIGBhcmNoL3g4Ni9rdm0veDg2LmNgLCBpcyBhbHNvIHBhcnQgb2YgdGhhdCBzYW1lIG1vZHVsZS4gIEVmZmljaWVuY3ksIGFsd2F5cyBhIGdvb2QgdGhpbmcuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhpcyBwYXRjaCB0b3VjaGVzLiBJJ3ZlIGdvdDpcblxuKiAgIGBrdm1fZ3BjX3JlZnJlc2hgXG4qICAgYGt2bV9ncGNfYWN0aXZhdGVgXG4qICAgYGt2bV9ncGNfYWN0aXZhdGVfaHZhYFxuKiAgIGBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnRgXG5cbkFueXRoaW5nIGVsc2U/IFRoZSBjb2RlIGFsc28gcmVmZXJlbmNlcyBgaHZhX3RvX3Bmbl9yZXRyeWAsIGJ1dCB0aGF0J3MgYHN0YXRpY2AsIHNvIGl0J3Mgbm90IGRpcmVjdGx5IHZpc2libGUgZnJvbSBvdXRzaWRlLiAgRm9jdXNpbmcgb24gdGhlIGV4cG9zZWQgc3R1ZmYsIGBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnRgIGlzIHRoZSBvbmx5IG5vbi1zdGF0aWMgZnVuY3Rpb24gaGVyZS5cblxuSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuICBga3ZtX2dwY19yZWZyZXNoYCBjYWxscyBgX19rdm1fZ3BjX3JlZnJlc2hgLCB3aGljaCBpbiB0dXJuIGNhbGxzIHRoYXQgYGh2YV90b19wZm5fcmV0cnlgLiBga3ZtX2dwY19hY3RpdmF0ZWAgY2FsbHMgYF9fa3ZtX2dwY19hY3RpdmF0ZWAsIHdoaWNoIGNhbGxzIGBfX2t2bV9ncGNfcmVmcmVzaGAsIHdoaWNoIHRoZW4gY2FsbHMgYGh2YV90b19wZm5fcmV0cnlgLiBBbmQgYGt2bV9ncGNfYWN0aXZhdGVfaHZhYCBjYWxscyBgX19rdm1fZ3BjX2FjdGl2YXRlYC5cblxuU28sIHRoZSBjcml0aWNhbCBzeW1ib2xzIHRvIGtlZXAgaW4gbWluZCBhcmU6XG4qICAgYGdmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydGBcbiogICBga3ZtX2dwY19yZWZyZXNoYFxuKiAgIGBrdm1fZ3BjX2FjdGl2YXRlYFxuKiAgIGBrdm1fZ3BjX2FjdGl2YXRlX2h2YWBcblxuTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IHJlYWNoYWJsZS4gQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgYGt2bV9ncGNfcmVmcmVzaGAgaXMgdXNlZCBieSBga3ZtX3hlbl91cGRhdGVfcnVuc3RhdGVfZ3Vlc3RgLCBga3ZtX3hlbl9pbmplY3RfcGVuZGluZ19ldmVudHNgLCBhbW9uZyBvdGhlcnMuIEZpbmUuIEFuZCBga3ZtX2dwY19hY3RpdmF0ZWAgaXMgY2FsbGVkIGZyb20gYGt2bV94ZW5faHZtX3NldF9hdHRyYCwgYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAsIGFuZCBga3ZtX3dyaXRlX3N5c3RlbV90aW1lYC4gIFJpZ2h0LCB0aGVzZSBhcmUgYWxsIGNhbGxlZCBmcm9tIEtWTSBpb2N0bHMsIHNvIHdlJ3JlIGdvb2QgdGhlcmUuXG5cbkZpbmFsbHksIHdoYXQncyByZXF1aXJlZCBjb25maWctd2lzZT8gV2VsbCwgY2xlYXJseSBgS1ZNYCBpcyBuZWVkZWQuIEFuZCBgS1ZNX1g4NmAgc2VsZWN0cyBgSEFWRV9LVk1fUEZOQ0FDSEVgLiBCdXQgYEhBVkVfS1ZNX1BGTkNBQ0hFYCBpcyByZWFsbHkganVzdCBhbiBpbmRpcmVjdCBjb25zZXF1ZW5jZSBvZiBlbmFibGluZyBgS1ZNX1g4NmAuIFNvLCB0aGUgZXNzZW50aWFsIGNvbmZpZyBpcyBzaW1wbHkgYEtWTWAuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgYXJjaC94ODYva3ZtL0tjb25maWdgIHRvIGNvbmZpcm0uLi4gWWVwLCB0aGF0J3Mgd2hhdCBJIHRob3VnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDExLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ2OjI1LjA2NzI2ODIzOFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyMjc4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NjoyNS4xMTU1MDI1NzdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMyNDA0MTQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEtWTSBhbmQgS1ZNX1hFTiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGFyb3VuZCBLVk0uIFRoZSBjb3JlIGNvbmZpZyBpcywgbmF0dXJhbGx5LCBgS1ZNYC4gSG93ZXZlciwgSSdtIHNlZWluZyBgS1ZNX1hFTmAgbWVudGlvbmVkIGFsb25nc2lkZSBpdCwgYW5kIGl0J3MgcGlxdWluZyBteSBpbnRlcmVzdC4gU3BlY2lmaWNhbGx5LCBJJ20gbm90aWNpbmcgYSBsb3Qgb2YgYWN0aXZpdHkgcmVsYXRlZCB0byBga3ZtX2dwY19hY3RpdmF0ZWAgYW5kIGBrdm1fZ3BjX3JlZnJlc2hgIHdpdGhpbiBgYXJjaC94ODYva3ZtL3hlbi5jYC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBsaW5rLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpZiBgS1ZNX1hFTmAgaXMgZXNzZW50aWFsIGluIHRoaXMgY29udGV4dC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhlIHJvbGUgb2YgYEtWTV9YRU5gLiBBaGEsIHllcywgYSBxdWljayByZXZpZXcgc2hvd3MgdGhpcyBlbmFibGVzIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlIHN1cHBvcnQuIEFuZCB0aGF0J3MgaW50ZXJlc3RpbmcgYmVjYXVzZSBYZW4gaHlwZXJjYWxsIGludGVyZmFjZXMgb2Z0ZW4gcmVseSBoZWF2aWx5IG9uIHRoZSBwZm5jYWNoZS4gVGhpcyBzdHJlbmd0aGVucyB0aGUgY2FzZSBmb3IgdW5kZXJzdGFuZGluZyBpdHMgaW5jbHVzaW9uLlxuXG5Ob3csIGxldCBtZSBjaGVjayBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZvciB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRpZWQgdG8gYEtWTV9YRU5gLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgZGVlcGVyIGNvbnRleHQgSSBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZSBjb21wb25lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTUyNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NjozMS40Mzk1NDY0MjZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMTk4MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fWEVOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE5Mz1jb25maWcgS1ZNX0hZUEVSVlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6NDY6MzEuNDkyNzUxMDg2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDM0MTIxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBLVk1fWEVOIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBLVk1fWEVOYC4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWNlc3Nhcnkgd2hlbiB0aGlzIGlzIGVuYWJsZWQsIGxpa2VseSB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9yIGEgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQgc2V0dXAuIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgaG93IGBLVk1fWEVOYCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBJJ2xsIG5lZWQgdG8gdHJhY2UgaXRzIHJlZmVyZW5jZXMgYW5kIHNlZSB3aGVyZSBpdCdzIGluY2x1ZGVkLCBwb3RlbnRpYWxseSBpbiBLY29uZmlnIGZpbGVzIG9yIHJlbGV2YW50IGtlcm5lbCBidWlsZCBzeXN0ZW1zLiBVbmRlcnN0YW5kaW5nIHRob3NlIGNvbm5lY3Rpb25zIGlzIGtleSB0byBnZXR0aW5nIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSBhbmQgZGVwZW5kZW5jaWVzLiBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gbWFwIG91dCB0aGUgY29tcGxldGUgZGVwZW5kZW5jeSBncmFwaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMzcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NjozNC44MzYxNjY4NThaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNjU3MTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fWEVOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE5Mz1jb25maWcgS1ZNX0hZUEVSVlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6NDY6MzQuOTA3ODM2MjI2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjg3MzM1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGEgc3BlY2lmaWMgYXNwZWN0IG9mIHRoZSBLVk0gYXJjaGl0ZWN0dXJlIG9uIHg4NiwgcHJvYmFibHkgcmVsYXRlZCB0byBhIGZlYXR1cmUncyBjb25maWd1cmF0aW9uLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgaXRzZWxmLCBzcGVjaWZpY2FsbHkgYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gSSdtIGd1ZXNzaW5nIHRoZSByZWxldmFudCBvcHRpb25zIG1pZ2h0IGJlIGRlZmluZWQgc29tZXdoZXJlIGFyb3VuZCBsaW5lIDIwNy4gVGhhdCdzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHNpbWlsYXIgcHJvamVjdHMuIExldCdzIHNlZSB3aGF0J3MgZGVmaW5lZCB0aGVyZSBhbmQgd2hhdCBpdCB0ZWxscyBtZS4gSSBleHBlY3QgdG8gZmluZCBzb21lIGZlYXR1cmUgZmxhZ3MsIG1heWJlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgb3B0aW9ucywgYW5kIGhvcGVmdWxseSBzb21lIGhlbHBmdWwgY29tbWVudHMgdG8gZ3VpZGUgbXkgdW5kZXJzdGFuZGluZy4gVGltZSB0byBnZXQgdGhlIGZpbGUgb3BlbiBhbmQgc3RhcnQgZGlzc2VjdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzNDUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0NjozOC4yNzY1NzI3ODdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwMDpcXHRcXHQgIEh5cGVyLVYgSHlwZXJ2aXNvciBUb3AtTGV2ZWwgRnVuY3Rpb25hbCBTcGVjaWZpY2F0aW9uIChUTEZTKTpcXG4gMjAxOlxcdFxcdCAgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvdmlydHVhbGl6YXRpb24vaHlwZXItdi1vbi13aW5kb3dzL3JlZmVyZW5jZS90bGZzXFxuIDIwMjpcXHRcXHQgIFRoZXNlIGludGVyZmFjZXMgYXJlIHJlcXVpcmVkIGZvciB0aGUgY29ycmVjdCBhbmQgcGVyZm9ybWFudCBmdW5jdGlvbmluZ1xcbiAyMDM6XFx0XFx0ICBvZiBXaW5kb3dzIGFuZCBIeXBlci1WIGd1ZXN0cyBvbiBLVk0uXFxuIDIwNDpcXHRcXG4gMjA1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgXFxcIllcXFwiLlxcbiAyMDY6XFx0XFxuIDIwNzpcXHRjb25maWcgS1ZNX1hFTlxcbiAyMDg6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuIDIwOTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9YODZcXG4gMjEwOlxcdFxcdGhlbHBcXG4gMjExOlxcdFxcdCAgUHJvdmlkZXMgS1ZNIHN1cHBvcnQgZm9yIHRoZSBob3N0aW5nIFhlbiBIVk0gZ3Vlc3RzIGFuZFxcbiAyMTI6XFx0XFx0ICBwYXNzaW5nIFhlbiBoeXBlcmNhbGxzIHRvIHVzZXJzcGFjZS5cXG4gMjEzOlxcdFxcbiAyMTQ6XFx0XFx0ICBJZiBpbiBkb3VidCwgc2F5IFxcXCJOXFxcIi5cXG4gMjE1OlxcdFxcbiAyMTY6XFx0Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG4gMjE3OlxcdFxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuIDIxODpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTFxcbiAyMTk6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fWDg2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ2OjM4LjI3NjY5MTExN1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDgzMzgyNTM1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLVk0gRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgc2luY2UgYEtWTV9YRU5gIGRlcGVuZHMgb24gYEtWTV9YODZgLCBhbmQgYEtWTV9YODZgIGRlcGVuZHMgb24gYEtWTWAgKHVubGVzcyBgS1ZNX0lOVEVMYCBvciBgS1ZNX0FNRGAgYXJlICpub3QqIGVuYWJsZWQpLCBJIG5lZWQgdG8gZW5hYmxlIGJvdGggYEtWTWAgYW5kIGBLVk1fWEVOYC4gVGhlIGFpbSBpcyB0byBjaGVjayBpZiB0aGVzZSBmZWF0dXJlcyBhcmUgd29ydGggZnV6emluZy5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCBgS1ZNYCBpcyBhIHRyaXN0YXRlLCBhbmQgdGhhdCBpdCBkZXBlbmRzIG9uIHNldmVyYWwgb3RoZXIgY29uZmlncyBsaWtlIGBISUdIX1JFU19USU1FUlNgLCBgWDg2X0xPQ0FMX0FQSUNgLCBhbmQgc28gb24uIEdvb2QuIFNvLCBgS1ZNYCBhbmQgYEtWTV9YRU5gIGFyZSBkZWZpbml0ZWx5IHRoZSB0YXJnZXRzIGZvciBlbmFibGluZy5cblxuTm93LCBsZXQncyBsb29rIGF0IHRob3NlIGZvY3VzIHN5bWJvbHM6IGBnZm5fdG9fcGZuX2NhY2hlX2ludmFsaWRhdGVfc3RhcnRgLCBga3ZtX2dwY19yZWZyZXNoYCwgYGt2bV9ncGNfYWN0aXZhdGVgLCBhbmQgYGt2bV9ncGNfYWN0aXZhdGVfaHZhYC4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSBzeXprYWxsZXIuXG5cblllcywgdGhleSBhcHBlYXIgdG8gYmUhIFN5emthbGxlciBoYXMgS1ZNIGRlc2NyaXB0aW9ucyBhbmQgY2FuIGZ1enogS1ZNIGlvY3Rscy4gYGt2bV9ncGNfYWN0aXZhdGVgIGlzIHJlYWNoYWJsZSB2aWEgYGt2bV94ZW5faHZtX3NldF9hdHRyYCBhbmQgdGhlIGBLVk1fWEVOX0hWTV9TRVRfQVRUUmAgaW9jdGwuIGBrdm1fZ3BjX3JlZnJlc2hgIGlzIHVzZWQgZHVyaW5nIHZjcHUgZXhlY3V0aW9uIG9yIGV2ZW50IGluamVjdGlvbi4gYGdmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydGAgaXMgdHJpZ2dlcmVkIGJ5IG1lbW9yeSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMsIGxpa2UgYG11bm1hcGAgYW5kIGBtcHJvdGVjdGAuIFRoaXMgYWxsIGxvb2tzIHZlcnkgcHJvbWlzaW5nLlxuXG5TbywgaGVyZSdzIG15IHN1bW1hcnk6IFRoaXMgY29kZSBtb2RpZmljYXRpb24gaXMgd29ydGggZnV6emluZy4gSXQgaW52b2x2ZXMgcGZuY2FjaGUgaW52YWxpZGF0aW9uIGluIEtWTSAoaW50cm9kdWNpbmcgYSBzZXF1ZW5jZSBjb3VudGVyIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uKSwgd2hpY2ggaXMgKmNvcmUqIEtWTSBmdW5jdGlvbmFsaXR5LiBJdCdzIGFjY2Vzc2libGUgdmlhIEtWTSBpb2N0bHMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXG5cbk15IGZvY3VzIHN5bWJvbHMgYXJlOlxuLSBgZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0YFxuLSBga3ZtX2dwY19yZWZyZXNoYFxuLSBga3ZtX2dwY19hY3RpdmF0ZWBcbi0gYGt2bV9ncGNfYWN0aXZhdGVfaHZhYFxuXG5BbmQgdGhlIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBlbmFibGUgYXJlIGBLVk1gIGFuZCBgS1ZNX1hFTmAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgS1ZNX1hFTmAgaXMgZW5hYmxlZC4gSXQgaXMgYSBib29sZWFuIHZhbHVlIHdoaWxlIGBLVk1gIGlzIGEgdHJpc3RhdGUuIEdpdmVuIHRoYXQgYEtWTV9YODZgIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYXMgYSBkZXBlbmRlbmN5IGFzIGxvbmcgYXMgYEtWTWAgaXMgZW5hYmxlZCwgYW5kIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYCBhcmUgbm90IHNldCB0byAnbicuIEkgd2lsbCBqdXN0IHNwZWNpZnkgYEtWTWAgYW5kIGBLVk1fWEVOYC4gTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrIGlmIGBrdm1fZ3BjX2FjdGl2YXRlX2h2YWAgaXMgYWN0dWFsbHkgdXNlZCBhbmQgdGhlbiBJIHNob3VsZCBiZSBnb29kIHRvIG1vdmUgZm9yd2FyZCB3aXRoIHRoZSBmdXp6aW5nIGNhbXBhaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjg4OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjQ2OjQ5LjExMDUxODc1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTkyNDc3NjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9ncGNfYWN0aXZhdGVfaHZhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veGVuLmM9NzQ2PWludCBrdm1feGVuX2h2bV9zZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jLTc5Ny1cXHRcXHRcXHR9IGVsc2Uge1xcbmFyY2gveDg2L2t2bS94ZW4uYzo3OTg6XFx0XFx0XFx0XFx0ciA9IGt2bV9ncGNfYWN0aXZhdGVfaHZhKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZSxcXG5hcmNoL3g4Ni9rdm0veGVuLmMtNzk5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAodW5zaWduZWQgbG9uZylodmEsIFBBR0VfU0laRSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9OTA2PWludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTM3LVxcbmFyY2gveDg2L2t2bS94ZW4uYzo5Mzg6XFx0XFx0XFx0ciA9IGt2bV9ncGNfYWN0aXZhdGVfaHZhKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnhlbi52Y3B1X2luZm9fY2FjaGUsXFxuYXJjaC94ODYva3ZtL3hlbi5jLTkzOS1cXHRcXHRcXHRcXHRcXHRcXHQgZGF0YS1cXHUwMDNldS5odmEsIHNpemVvZihzdHJ1Y3QgdmNwdV9pbmZvKSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTQ1OD1pbnQga3ZtX2dwY19hY3RpdmF0ZShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgbGVuKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNDYwLS8qKlxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxNDYxOiAqIGt2bV9ncGNfYWN0aXZhdGVfaHZhIC0gcHJlcGFyZSBhIGNhY2hlZCBrZXJuZWwgbWFwcGluZyBhbmQgSFBBIGZvciBhIGdpdmVuIEhWQS5cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ2Mi0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE0NzMtICovXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjE0NzQ6aW50IGt2bV9ncGNfYWN0aXZhdGVfaHZhKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHVuc2lnbmVkIGxvbmcgaHZhLCB1bnNpZ25lZCBsb25nIGxlbik7XFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE0NzUtXFxuLS1cXG52aXJ0L2t2bS9wZm5jYWNoZS5jPTQzNj1pbnQga3ZtX2dwY19hY3RpdmF0ZShzdHJ1Y3QgZ2ZuX3RvX3Bmbl9jYWNoZSAqZ3BjLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgbGVuKVxcbi0tXFxudmlydC9rdm0vcGZuY2FjaGUuYy00NDctXFxudmlydC9rdm0vcGZuY2FjaGUuYzo0NDg6aW50IGt2bV9ncGNfYWN0aXZhdGVfaHZhKHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlICpncGMsIHVuc2lnbmVkIGxvbmcgdWh2YSwgdW5zaWduZWQgbG9uZyBsZW4pXFxudmlydC9rdm0vcGZuY2FjaGUuYy00NDkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0Njo1MS4zMDMwMDExNjFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg2NzIzNzE5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgQXR0cmlidXRlIFNldHRpbmcgaW4gS1ZNL1hlbiBJbnRlcmFjdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBJIHNlZSBpdCwgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uLCBpcyBkZWZpbml0ZWx5IGludm9sdmVkIGluIGBrdm1feGVuX2h2bV9zZXRfYXR0cmAgYW5kIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgLiBHb3QgaXQuIFRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCBodW5jaCBhYm91dCBpdHMgcm9sZSBpbiB0aGUgS1ZNL1hlbiBIVk0gaW50ZWdyYXRpb24gbGF5ZXIsIHdoaWNoIGlzIHdoYXQgSSB0aG91Z2h0IEkgd291bGQgZmluZC5cblxuTm93LCB3aXRoIHRoaXMgaW5mb3JtYXRpb24gaW4gaGFuZCwgSeKAmW0gZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgc2V0dXAuIFRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIHVzZSBgc2V0LXJlc3VsdHNgIHRvIGdldCBzb21lIGZ1cnRoZXIgaW5mb3JtYXRpb24gb24gdGhlc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg4MCwiT3V0cHV0VG9rZW5zIjoxMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzo0Njo1Ni4xNzAyNDMwMzlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjYwMTgwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX1hFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdmbl90b19wZm5fY2FjaGVfaW52YWxpZGF0ZV9zdGFydFwiLFxuICAgIFwia3ZtX2dwY19yZWZyZXNoXCIsXG4gICAgXCJrdm1fZ3BjX2FjdGl2YXRlXCIsXG4gICAgXCJrdm1fZ3BjX2FjdGl2YXRlX2h2YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZm5jYWNoZSBpbnZhbGlkYXRpb24gbG9naWMgaW4gS1ZNLCBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBieSBpbnRyb2R1Y2luZyBhIHNlcXVlbmNlIGNvdW50ZXIuIFRoaXMgaXMgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fWEVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2ZuX3RvX3Bmbl9jYWNoZV9pbnZhbGlkYXRlX3N0YXJ0XCIsXG4gICAgXCJrdm1fZ3BjX3JlZnJlc2hcIixcbiAgICBcImt2bV9ncGNfYWN0aXZhdGVcIixcbiAgICBcImt2bV9ncGNfYWN0aXZhdGVfaHZhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBmbmNhY2hlIGludmFsaWRhdGlvbiBsb2dpYyBpbiBLVk0sIGZpeGluZyBhIHJhY2UgY29uZGl0aW9uIGJ5IGludHJvZHVjaW5nIGEgc2VxdWVuY2UgY291bnRlci4gVGhpcyBpcyBjb3JlIEtWTSBmdW5jdGlvbmFsaXR5IHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqjcts[1] Phase: Succeeded StartedAt: 2026-08-05 17:47:08 +0000 UTC FinishedAt: 2026-08-05 17:47:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjcts[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-05 17:47:08 +0000 UTC FinishedAt: 2026-08-05 17:47:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjcts[2] Phase: Succeeded StartedAt: 2026-08-05 17:47:08 +0000 UTC FinishedAt: 2026-08-05 21:29:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-05 17:47:08 +0000 UTC FinishedAt: 2026-08-05 21:29:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-05 17:47:08 +0000 UTC FinishedAt: 2026-08-05 17:47:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-05 17:47:08 +0000 UTC FinishedAt: 2026-08-05 17:47:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqjcts/series-workflowqjcts-convert-artifact-990752143/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-05 17:47:18 +0000 UTC FinishedAt: 2026-08-05 18:05:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-05 17:47:18 +0000 UTC FinishedAt: 2026-08-05 18:05:06 +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:*fdd048b1-f637-4a4d-bbcb-7b5231c46124,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-workflowqjcts/series-workflowqjcts-convert-artifact-990752143/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": "07f89248-31aa-44cc-b6f7-aef4d1ead6e4", "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-workflowqjcts/series-workflowqjcts-build-action-3929774805/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-05 17:47:18 +0000 UTC FinishedAt: 2026-08-05 18:04:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*fdd048b1-f637-4a4d-bbcb-7b5231c46124,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-workflowqjcts/series-workflowqjcts-convert-artifact-990752143/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": "07f89248-31aa-44cc-b6f7-aef4d1ead6e4", "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-workflowqjcts/series-workflowqjcts-build-action-3929774805/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-05 18:05:06 +0000 UTC FinishedAt: 2026-08-05 18:05:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-05 18:05:06 +0000 UTC FinishedAt: 2026-08-05 18:05:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-05 18:05:06 +0000 UTC FinishedAt: 2026-08-05 18:05:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-05 18:05:06 +0000 UTC FinishedAt: 2026-08-05 18:05:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqjcts/series-workflowqjcts-convert-artifact-2426929374/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-05 18:05:16 +0000 UTC FinishedAt: 2026-08-05 18:07:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-05 18:05:16 +0000 UTC FinishedAt: 2026-08-05 18:07:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*07f89248-31aa-44cc-b6f7-aef4d1ead6e4,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-workflowqjcts/series-workflowqjcts-build-action-3929774805/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-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-05 18:07:33 +0000 UTC FinishedAt: 2026-08-05 18:07:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-05 18:07:33 +0000 UTC FinishedAt: 2026-08-05 18:07:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-05 18:07:33 +0000 UTC FinishedAt: 2026-08-05 18:23:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-05 18:07:33 +0000 UTC FinishedAt: 2026-08-05 18:23:58 +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:*fdd048b1-f637-4a4d-bbcb-7b5231c46124,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-workflowqjcts/series-workflowqjcts-convert-artifact-2426929374/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": "d10eca1a-e103-42b6-aa02-aa7ff74388d4", "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-workflowqjcts/series-workflowqjcts-build-action-1938377138/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-05 18:07:33 +0000 UTC FinishedAt: 2026-08-05 18:23:48 +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:*fdd048b1-f637-4a4d-bbcb-7b5231c46124,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-workflowqjcts/series-workflowqjcts-convert-artifact-2426929374/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": "d10eca1a-e103-42b6-aa02-aa7ff74388d4", "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-workflowqjcts/series-workflowqjcts-build-action-1938377138/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-05 18:23:58 +0000 UTC FinishedAt: 2026-08-05 18:23:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-05 18:23:58 +0000 UTC FinishedAt: 2026-08-05 18:23:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-05 18:23:58 +0000 UTC FinishedAt: 2026-08-05 18:26:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-05 18:23:58 +0000 UTC FinishedAt: 2026-08-05 18:26:04 +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:*d10eca1a-e103-42b6-aa02-aa7ff74388d4,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-workflowqjcts/series-workflowqjcts-build-action-1938377138/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-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-05 18:26:14 +0000 UTC FinishedAt: 2026-08-05 21:29:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-05 18:26:14 +0000 UTC FinishedAt: 2026-08-05 21:29:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"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:*07f89248-31aa-44cc-b6f7-aef4d1ead6e4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d10eca1a-e103-42b6-aa02-aa7ff74388d4,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-workflowqjcts/series-workflowqjcts-build-action-3929774805/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-workflowqjcts/series-workflowqjcts-build-action-1938377138/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-05 18:26:14 +0000 UTC FinishedAt: 2026-08-05 18:26:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-05 18:26:14 +0000 UTC FinishedAt: 2026-08-05 18:26:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"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-workflowqjcts/series-workflowqjcts-convert-artifact-467595235/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-05 18:26:14 +0000 UTC FinishedAt: 2026-08-05 18:26:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-05 18:26:14 +0000 UTC FinishedAt: 2026-08-05 18:26:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-05 18:26:14 +0000 UTC FinishedAt: 2026-08-05 18:26:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-05 18:26:24 +0000 UTC FinishedAt: 2026-08-05 21:29:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqjcts[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gfn_to_pfn_cache_invalidate_start","kvm_gpc_refresh","kvm_gpc_activate","kvm_gpc_activate_hva"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"f1ca4693-e3dc-4ca8-9029-4028548cb6b7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-05 18:26:24 +0000 UTC FinishedAt: 2026-08-05 21:29:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*07f89248-31aa-44cc-b6f7-aef4d1ead6e4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d10eca1a-e103-42b6-aa02-aa7ff74388d4,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-workflowqjcts/series-workflowqjcts-build-action-3929774805/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-workflowqjcts/series-workflowqjcts-build-action-1938377138/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-workflowqjcts/series-workflowqjcts-convert-artifact-467595235/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,}