Name: series-workflowpl6tk Phase: Succeeded StartedAt: 2026-07-09 19:27:51 +0000 UTC FinishedAt: 2026-07-10 00:06:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpl6tk[0] Phase: Succeeded StartedAt: 2026-07-09 19:27:51 +0000 UTC FinishedAt: 2026-07-09 19:53:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpl6tk[0].run-triage Phase: Succeeded StartedAt: 2026-07-09 19:27:51 +0000 UTC FinishedAt: 2026-07-09 19:53:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "37f6eb61-de7a-444c-9d89-6020e8948bd1" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_emulate_halt" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA5IDE5OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9lbXVsYXRlX2hhbHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gd2hlcmUgYGt2bV9lbXVsYXRlX2hhbHRgIHdvdWxkIG92ZXJ3cml0ZSB0aGUgYEtWTV9FWElUX0RFQlVHYCBleGl0IHJlYXNvbiB3aXRoIGBLVk1fRVhJVF9ITFRgIGlmIGEgc2luZ2xlLXN0ZXAgZGVidWcgZXhjZXB0aW9uIHdhcyB0cmlnZ2VyZWQgZHVyaW5nIHRoZSBza2lwIG9mIHRoZSBlbXVsYXRlZCBpbnN0cnVjdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxOTo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA4ODc4ZDdjYTVjZDZiOWZhMzg3ZjllNThlYzFmODNkMjM2MmIzOWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCA5IDE5OjQ5OjUxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggMDYyNmU4MzVlOWViNzcuLjJmZDZhZDQ5MDUwYzcxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC04NjU4LDEwICYjNDM7ODY1OCwxNiBAQCBFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2VtdWxhdGVfaGFsdF9ub3NraXApO1xuIGludCBrdm1fZW11bGF0ZV9oYWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRpbnQgcmV0ID0ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG4mIzQzO1xuIFx0Lypcbi1cdCAqIFRPRE86IHdlIG1pZ2h0IGJlIHNxdWFzaGluZyBhIEdVRVNUREJHX1NJTkdMRVNURVAtdHJpZ2dlcmVkXG4tXHQgKiBLVk1fRVhJVF9ERUJVRyBoZXJlLlxuJiM0MztcdCAqIElmIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCkgdHJpZ2dlcmVkIGEgc2luZ2xlc3RlcFxuJiM0MztcdCAqIGRlYnVnIGV4Y2VwdGlvbiwgcmV0dXJuIHRvIHVzZXJzcGFjZSBpbW1lZGlhdGVseSBzbyB0aGVcbiYjNDM7XHQgKiBkZWJ1Z2dlciBjYW4gcHJvY2VzcyB0aGUgZXZlbnQuIERvIG5vdCBsZXQgaGFsdCBlbXVsYXRpb25cbiYjNDM7XHQgKiBvdmVyd3JpdGUgdGhlIEtWTV9FWElUX0RFQlVHIGV4aXQgcmVhc29uLlxuIFx0ICovXG4mIzQzO1x0aWYgKHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID09IEtWTV9FWElUX0RFQlVHKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4gXHRyZXR1cm4ga3ZtX2VtdWxhdGVfaGFsdF9ub3NraXAodmNwdSkgXHUwMDI2XHUwMDI2IHJldDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9lbXVsYXRlX2hhbHQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE5OjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9lbXVsYXRlX2hhbHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gd2hlcmUgYGt2bV9lbXVsYXRlX2hhbHRgIHdvdWxkIG92ZXJ3cml0ZSB0aGUgYEtWTV9FWElUX0RFQlVHYCBleGl0IHJlYXNvbiB3aXRoIGBLVk1fRVhJVF9ITFRgIGlmIGEgc2luZ2xlLXN0ZXAgZGVidWcgZXhjZXB0aW9uIHdhcyB0cmlnZ2VyZWQgZHVyaW5nIHRoZSBza2lwIG9mIHRoZSBlbXVsYXRlZCBpbnN0cnVjdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDg4NzhkN2NhNWNkNmI5ZmEzODdmOWU1OGVjMWY4M2QyMzYyYjM5YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDkgMTk6NDk6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggMDYyNmU4MzVlOWViNzcuLjJmZDZhZDQ5MDUwYzcxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jCkBAIC04NjU4LDEwICYjNDM7ODY1OCwxNiBAQCBFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2VtdWxhdGVfaGFsdF9ub3NraXApOwogaW50IGt2bV9lbXVsYXRlX2hhbHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCWludCByZXQgPSBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKJiM0MzsKIAkvKgotCSAqIFRPRE86IHdlIG1pZ2h0IGJlIHNxdWFzaGluZyBhIEdVRVNUREJHX1NJTkdMRVNURVAtdHJpZ2dlcmVkCi0JICogS1ZNX0VYSVRfREVCVUcgaGVyZS4KJiM0MzsJICogSWYga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oKSB0cmlnZ2VyZWQgYSBzaW5nbGVzdGVwCiYjNDM7CSAqIGRlYnVnIGV4Y2VwdGlvbiwgcmV0dXJuIHRvIHVzZXJzcGFjZSBpbW1lZGlhdGVseSBzbyB0aGUKJiM0MzsJICogZGVidWdnZXIgY2FuIHByb2Nlc3MgdGhlIGV2ZW50LiBEbyBub3QgbGV0IGhhbHQgZW11bGF0aW9uCiYjNDM7CSAqIG92ZXJ3cml0ZSB0aGUgS1ZNX0VYSVRfREVCVUcgZXhpdCByZWFzb24uCiAJICovCiYjNDM7CWlmICh2Y3B1LSZndDtydW4tJmd0O2V4aXRfcmVhc29uID09IEtWTV9FWElUX0RFQlVHKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKIAlyZXR1cm4ga3ZtX2VtdWxhdGVfaGFsdF9ub3NraXAodmNwdSkgJmFtcDsmYW1wOyByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2VtdWxhdGVfaGFsdCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gSGFsdCBFbXVsYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBrdm1fZW11bGF0ZV9oYWx0YCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gSXQmIzM5O3MgcHJldHR5IGZvY3VzZWQ7IHRoZSBrZXkgaXMgdGhlIGFkZGVkIGNvbmRpdGlvbmFsLiBUaGUgbG9naWMgZmxvdyBpcyBjbGVhcmx5IGRlc2lnbmVkIHRvIHNob3J0LWNpcmN1aXQgdGhlIHVzdWFsIGBoYWx0YCBlbXVsYXRpb24uIEkmIzM5O20gc2VlaW5nIHRoYXQgYWZ0ZXIgYGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpYCwgdGhleSYjMzk7dmUgaW5zZXJ0ZWQgYSBjaGVjazogYHZjcHUtJmd0O3J1bi0mZ3Q7ZXhpdF9yZWFzb24gPT0gS1ZNX0VYSVRfREVCVUdgLiAgSWYgdGhlIGBleGl0X3JlYXNvbmAgKmlzKiBgS1ZNX0VYSVRfREVCVUdgLCB0aGUgZnVuY3Rpb24gYmFpbHMgb3V0IGVhcmx5LCBpbW1lZGlhdGVseSByZXR1cm5pbmcgYHJldGAuIEluc3RlYWQgb2YgdGhlIHN0YW5kYXJkIHBhdGgsIHdoaWNoIHdvdWxkIGNhbGwgYGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwKHZjcHUpYC4gVGhlIGdvYWwgaXMgY2xlYXJseSB0byBoYW5kbGUgZGVidWcgZXhpdHMgZGlmZmVyZW50bHksIHNraXBwaW5nIHBhcnRzIG9mIHRoZSBzdGFuZGFyZCBoYWx0IGVtdWxhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXkgd2FudCB0byBieXBhc3MgYGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwYCB1bmRlciBhIGRlYnVnIGV4aXQgY29uZGl0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB1bmRlcnN0YW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgZm9yIGhhbHRpbmcgYW5kIGRlYnVnZ2luZyBLVk0gZ3Vlc3RzIGluIHRoaXMgc2NlbmFyaW8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2VtdWxhdGVfaGFsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmM9ODU4MT1zdGF0aWMgaW50IHZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtODYzMC1cbmFyY2gveDg2L2t2bS94ODYuYzo4NjMxOnN0YXRpYyBpbnQgX19rdm1fZW11bGF0ZV9oYWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHN0YXRlLCBpbnQgcmVhc29uKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2MzIte1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04NjUxLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NTI6aW50IGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ODYuYy04NjUzLXtcbmFyY2gveDg2L2t2bS94ODYuYzo4NjU0Olx0cmV0dXJuIF9fa3ZtX2VtdWxhdGVfaGFsdCh2Y3B1LCBLVk1fTVBfU1RBVEVfSEFMVEVELCBLVk1fRVhJVF9ITFQpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NTUtfVxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NTY6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwKTtcbmFyY2gveDg2L2t2bS94ODYuYy04NjU3LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NTg6aW50IGt2bV9lbXVsYXRlX2hhbHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NTkte1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04NjcwLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NzE6XHRyZXR1cm4ga3ZtX2VtdWxhdGVfaGFsdF9ub3NraXAodmNwdSkgXHUwMDI2XHUwMDI2IHJldDtcbmFyY2gveDg2L2t2bS94ODYuYy04NjcyLX1cbmFyY2gveDg2L2t2bS94ODYuYzo4NjczOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZW11bGF0ZV9oYWx0KTtcbmFyY2gveDg2L2t2bS94ODYuYy04Njc0LVxuYXJjaC94ODYva3ZtL3g4Ni5jPTg2NzU9ZmFzdHBhdGhfdCBoYW5kbGVfZmFzdHBhdGhfaGx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY3OS1cbmFyY2gveDg2L2t2bS94ODYuYzo4NjgwOlx0aWYgKCFrdm1fZW11bGF0ZV9oYWx0KHZjcHUpKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2ODEtXHRcdHJldHVybiBFWElUX0ZBU1RQQVRIX0VYSVRfVVNFUlNQQUNFO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz04NjkwPWludCBrdm1fZW11bGF0ZV9hcF9yZXNldF9ob2xkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY5My1cbmFyY2gveDg2L2t2bS94ODYuYzo4Njk0Olx0cmV0dXJuIF9fa3ZtX2VtdWxhdGVfaGFsdCh2Y3B1LCBLVk1fTVBfU1RBVEVfQVBfUkVTRVRfSE9MRCxcbmFyY2gveDg2L2t2bS94ODYuYy04Njk1LVx0XHRcdFx0XHRLVk1fRVhJVF9BUF9SRVNFVF9IT0xEKSBcdTAwMjZcdTAwMjYgcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyOTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBga3ZtX2VtdWxhdGVfaGFsdGAgQ2FsbHNpdGVzKioKCkFscmlnaHQsIHNvIGBrdm1fZW11bGF0ZV9oYWx0YCBpcyBleHBvcnRlZC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBzb21ldGhpbmcgaW1wb3J0YW50LCBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgS1ZNIG9wZXJhdGlvbnMuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgY2FsbGVkIGludGVybmFsbHkgbWVhbnMgaXQmIzM5O3MgY29yZSB0byB0aGUgdmlydHVhbGl6YXRpb24gcHJvY2Vzcywgbm90IHNvbWUgcGVyaXBoZXJhbCBtb2R1bGUuCgpJIHJlY2FsbCBzZWVpbmcgaXQgdXNlZCBpbiBgaGFuZGxlX2Zhc3RwYXRoX2hsdGAuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaGludCB0aGF0IGl0IGhhbmRsZXMgdGhlIGZhc3QtcGF0aCBITFQgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UuIE5vdywgc2luY2UgaXQmIzM5O3MgdXNlZCB3aXRoIGBWTVgvU1ZNIGhhbmRsZXJzYCwgd2hpY2ggYXJlIHg4NiB2aXJ0dWFsaXphdGlvbiB0ZWNobm9sb2dpZXMsIHRoZSBmdW5jdGlvbiBwcm9iYWJseSBkZWFscyB3aXRoIHRoZSBjb3JlIGVtdWxhdGlvbiBvZiBITFQgaW5zdHJ1Y3Rpb25zIHdoZW4gdGhlIGd1ZXN0IHRyaWdnZXJzIHRoZW0uCgpMZXQmIzM5O3MgZHJpbGwgZG93biBhbmQgc2VlICpleGFjdGx5KiB3aGVyZSBga3ZtX2VtdWxhdGVfaGFsdGAgaXMgY2FsbGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBwcmVjaXNlIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgS1ZNIGFyY2hpdGVjdHVyZSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGh5cGVydmlzb3IgY29tcG9uZW50cy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHVuZXhwZWN0ZWQgY2FsbCBzaXRlcyB0aGF0IHdvdWxkIGJlIHVuZXhwZWN0ZWQsIG9yIHBlcmhhcHMgZXZlbiBpbmRpY2F0ZSBhIHBvdGVudGlhbCBidWcuIFRpbWUgdG8gZGlnIGluIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE5OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9lbXVsYXRlX2hhbHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MzMzMj1zdGF0aWMgaW50ICgqY29uc3Qgc3ZtX2V4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTMzNzMtXHRbU1ZNX0VYSVRfUEFVU0VdXHRcdFx0PSBwYXVzZV9pbnRlcmNlcHRpb24sXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjMzNzQ6XHRbU1ZNX0VYSVRfSExUXVx0XHRcdFx0PSBrdm1fZW11bGF0ZV9oYWx0LFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMzc1LVx0W1NWTV9FWElUX0lOVkxQR11cdFx0XHQ9IGludmxwZ19pbnRlcmNlcHRpb24sXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMzk4LVx0W1NWTV9FWElUX0lOVlBDSURdICAgICAgICAgICAgICAgICAgICAgID0gaW52cGNpZF9pbnRlcmNlcHRpb24sXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjMzOTk6XHRbU1ZNX0VYSVRfSURMRV9ITFRdXHRcdFx0PSBrdm1fZW11bGF0ZV9oYWx0LFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDAwLVx0W1NWTV9FWElUX05QRl1cdFx0XHRcdD0gbnBmX2ludGVyY2VwdGlvbixcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM2MjA9aW50IHN2bV9pbnZva2VfZXhpdF9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IF9fZXhpdF9jb2RlKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzY0My1cdGVsc2UgaWYgKGV4aXRfY29kZSA9PSBTVk1fRVhJVF9ITFQgfHwgZXhpdF9jb2RlID09IFNWTV9FWElUX0lETEVfSExUKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNjQ0Olx0XHRyZXR1cm4ga3ZtX2VtdWxhdGVfaGFsdCh2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzY0NS1cdGVsc2UgaWYgKGV4aXRfY29kZSA9PSBTVk1fRVhJVF9OUEYpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNzg3PXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxhdW5jaClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4OTctXHRcdFx0dmNwdS1cdTAwM2VhcmNoLm5lc3RlZF9ydW5fcGVuZGluZyA9IDA7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM4OTg6XHRcdFx0cmV0dXJuIGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwKHZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODk5LVx0XHR9XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0yMDQ0PWludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjEwMS1cdGNhc2UgRVhJVF9SRUFTT05fSExUOlxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoyMTAyOlx0XHRyZXR1cm4ga3ZtX2VtdWxhdGVfaGFsdF9ub3NraXAodmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTIxMDMtXHRjYXNlIEVYSVRfUkVBU09OX1REQ0FMTDpcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTUzMjU9c3RhdGljIGludCBoYW5kbGVfcm1vZGVfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTUzMzUtXHRcdFx0XHR2Y3B1LVx1MDAzZWFyY2guaGFsdF9yZXF1ZXN0ID0gMDtcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NTMzNjpcdFx0XHRcdHJldHVybiBrdm1fZW11bGF0ZV9oYWx0X25vc2tpcCh2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTMzNy1cdFx0XHR9XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz02MDY0PXN0YXRpYyBpbnQgaGFuZGxlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjA5Ni1cdFx0XHR2Y3B1LVx1MDAzZWFyY2guaGFsdF9yZXF1ZXN0ID0gMDtcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjA5NzpcdFx0XHRyZXR1cm4ga3ZtX2VtdWxhdGVfaGFsdF9ub3NraXAodmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYwOTgtXHRcdH1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTYzMzM9c3RhdGljIGludCAoKmt2bV92bXhfZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0ge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjM0NC1cdFtFWElUX1JFQVNPTl9JTlRFUlJVUFRfV0lORE9XXSAgICAgICAgPSBoYW5kbGVfaW50ZXJydXB0X3dpbmRvdyxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjM0NTpcdFtFWElUX1JFQVNPTl9ITFRdICAgICAgICAgICAgICAgICAgICAgPSBrdm1fZW11bGF0ZV9oYWx0LFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MzQ2LVx0W0VYSVRfUkVBU09OX0lOVkRdXHRcdCAgICAgID0ga3ZtX2VtdWxhdGVfaW52ZCxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTY3MTI9c3RhdGljIGludCBfX3ZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY4NTItXHRlbHNlIGlmIChleGl0X3JlYXNvbi5iYXNpYyA9PSBFWElUX1JFQVNPTl9ITFQpXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjY4NTM6XHRcdHJldHVybiBrdm1fZW11bGF0ZV9oYWx0KHZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC92bXguYy02ODU0LVx0ZWxzZSBpZiAoZXhpdF9yZWFzb24uYmFzaWMgPT0gRVhJVF9SRUFTT05fRVBUX01JU0NPTkZJRylcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODU4MT1zdGF0aWMgaW50IHZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtODYzMC1cbmFyY2gveDg2L2t2bS94ODYuYzo4NjMxOnN0YXRpYyBpbnQgX19rdm1fZW11bGF0ZV9oYWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHN0YXRlLCBpbnQgcmVhc29uKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2MzIte1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04NjUxLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NTI6aW50IGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ODYuYy04NjUzLXtcbmFyY2gveDg2L2t2bS94ODYuYzo4NjU0Olx0cmV0dXJuIF9fa3ZtX2VtdWxhdGVfaGFsdCh2Y3B1LCBLVk1fTVBfU1RBVEVfSEFMVEVELCBLVk1fRVhJVF9ITFQpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NTUtfVxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NTY6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwKTtcbmFyY2gveDg2L2t2bS94ODYuYy04NjU3LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NTg6aW50IGt2bV9lbXVsYXRlX2hhbHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NTkte1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04NjcwLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NzE6XHRyZXR1cm4ga3ZtX2VtdWxhdGVfaGFsdF9ub3NraXAodmNwdSkgXHUwMDI2XHUwMDI2IHJldDtcbmFyY2gveDg2L2t2bS94ODYuYy04NjcyLX1cbmFyY2gveDg2L2t2bS94ODYuYzo4NjczOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZW11bGF0ZV9oYWx0KTtcbmFyY2gveDg2L2t2bS94ODYuYy04Njc0LVxuYXJjaC94ODYva3ZtL3g4Ni5jPTg2NzU9ZmFzdHBhdGhfdCBoYW5kbGVfZmFzdHBhdGhfaGx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY3OS1cbmFyY2gveDg2L2t2bS94ODYuYzo4NjgwOlx0aWYgKCFrdm1fZW11bGF0ZV9oYWx0KHZjcHUpKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2ODEtXHRcdHJldHVybiBFWElUX0ZBU1RQQVRIX0VYSVRfVVNFUlNQQUNFO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz04NjkwPWludCBrdm1fZW11bGF0ZV9hcF9yZXNldF9ob2xkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY5My1cbmFyY2gveDg2L2t2bS94ODYuYzo4Njk0Olx0cmV0dXJuIF9fa3ZtX2VtdWxhdGVfaGFsdCh2Y3B1LCBLVk1fTVBfU1RBVEVfQVBfUkVTRVRfSE9MRCxcbmFyY2gveDg2L2t2bS94ODYuYy04Njk1LVx0XHRcdFx0XHRLVk1fRVhJVF9BUF9SRVNFVF9IT0xEKSBcdTAwMjZcdTAwMjYgcmV0O1xuLS1cbmFyY2gveDg2L2t2bS94ODYuaD00Nzc9aW50IGt2bV9lbXVsYXRlX2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2Lmg6NDc4OmludCBrdm1fZW11bGF0ZV9oYWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2Lmg6NDc5OmludCBrdm1fZW11bGF0ZV9oYWx0X25vc2tpcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5oLTQ4MC1pbnQga3ZtX2VtdWxhdGVfYXBfcmVzZXRfaG9sZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwODYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIYWx0IEVtdWxhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gdGhlIGNoYW5nZSBpcyBjbGVhcmx5IHdpdGhpbiBga3ZtX2VtdWxhdGVfaGFsdGAuIEl0JiMzOTtzIGRlZmluaXRlbHkgYWN0aXZlIGFuZCB0aGUgY29kZSBmbG93IGNhbiByZWFjaCBpdCwgd2hpY2ggaXMgdGhlIGZpcnN0IGdvb2Qgc2lnbi4gVGhpcyBpcyBzcGVjaWZpYyB0byBLVk0geDg2LCB3aGljaCBtYWtlcyBzZW5zZS4gQmVmb3JlIEkgZGlnIHRvbyBkZWVwLCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGNvbmZpcm0gdGhlIG9idmlvdXM6IGlzIEtWTSBlbmFibGVkPyBJJiMzOTtsbCBjaGVjayBmb3IgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhpcy4gS1ZNIGlzIHVzdWFsbHkgZW5hYmxlZCBhcyBhIGJhc2UgcGxhdGZvcm0uCgpSaWdodCwgdGhlIGZ1bmN0aW9uIGl0c2VsZiwgYGt2bV9lbXVsYXRlX2hhbHRgLCByZXNpZGVzIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBUaGF0JiMzOTtzIHRoZSBleHBlY3RlZCBsb2NhdGlvbi4KCkkmIzM5O20gZm9jdXNpbmcgb24gYGt2bV9lbXVsYXRlX2hhbHRgIGhlcmUuIE5vdywgc2luY2Ugd2UgYXJlIHRhbGtpbmcgYWJvdXQgZW11bGF0aW9uLCBsZXQgbWUgcXVpY2tseSBnbGFuY2UgYXQgYGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uYC4gSSB3YW50IHRvIGtub3cgaWYgdGhpcyBjaGFuZ2UgaGFzIGFueSBpbnRlcnBsYXkgd2l0aCB0aGUgYEtWTV9FWElUX0RFQlVHYCBleGl0IHJlYXNvbi4gV2UgZG9uJiMzOTt0IHdhbnQgdG8gbWlzcyBzb21ldGhpbmcgb2J2aW91cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2NwdWlkLmM9MjE2MT1pbnQga3ZtX2VtdWxhdGVfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9jcHVpZC5jLTIxNzYtXHRrdm1fZWR4X3dyaXRlKHZjcHUsIGVkeCk7XG5hcmNoL3g4Ni9rdm0vY3B1aWQuYzoyMTc3Olx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuYXJjaC94ODYva3ZtL2NwdWlkLmMtMjE3OC19XG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTIzOTE9c3RhdGljIGludCBrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJlc3VsdClcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjQwNS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoyNDA2Olx0cmV0ID0ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjQwNy1cbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jPTkyMz1zdGF0aWMgZmFzdHBhdGhfdCBfX2hhbmRsZV9mYXN0cGF0aF93cm1zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCBkYXRhKVxuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmMtOTQyLVxuYXJjaC94ODYva3ZtL21zcnMuYzo5NDM6XHRpZiAoIWt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpKVxuYXJjaC94ODYva3ZtL21zcnMuYy05NDQtXHRcdHJldHVybiBFWElUX0ZBU1RQQVRIX0VYSVRfVVNFUlNQQUNFO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MTk3Mz1zdGF0aWMgaW50IG5wZl9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjAwMy1cdFx0XHR0cmFjZV9rdm1fZmFzdF9tbWlvKGdwYSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjIwMDQ6XHRcdFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMDA1LVx0XHR9XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0yMjE5PXN0YXRpYyBpbnQgdm1sb2FkX3Ztc2F2ZV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHZtbG9hZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIyMzktXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjIyNDA6XHRyZXQgPSBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjI0MS1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTIzODY9c3RhdGljIGludCBzdGdpX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMzkyLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyMzkzOlx0cmV0ID0ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIzOTQtXHRzdm1fc2V0X2dpZih0b19zdm0odmNwdSksIHRydWUpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjM5OD1zdGF0aWMgaW50IGNsZ2lfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0MDQtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI0MDU6XHRyZXQgPSBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjQwNi1cdHN2bV9zZXRfZ2lmKHRvX3N2bSh2Y3B1KSwgZmFsc2UpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjQxMD1zdGF0aWMgaW50IGludmxwZ2FfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0MjMtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI0MjQ6XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0MjUtfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjUyOT1zdGF0aWMgaW50IGludmxwZ19pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjUzNC1cdGt2bV9tbXVfaW52bHBnKHZjcHUsIHRvX3N2bSh2Y3B1KS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzEpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNTM1Olx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNTM2LX1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTMyMzY9c3RhdGljIGludCBwYXVzZV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzI0OC1cdGt2bV92Y3B1X29uX3NwaW4odmNwdSwgaW5fa2VybmVsKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzI0OTpcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzI1MC19XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0xNTk9c3RhdGljIGludCBuZXN0ZWRfdm14X3N1Y2NlZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMTYzLVx0XHRcdCAgICBYODZfRUZMQUdTX1pGIHwgWDg2X0VGTEFHU19TRiB8IFg4Nl9FRkxBR1NfT0YpKTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MTY0Olx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0xNjUtfVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MTY3PXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9mYWlsSW52YWxpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0xNzItXHRcdFx0fCBYODZfRUZMQUdTX0NGKTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MTczOlx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0xNzQtfVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MTc2PXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9mYWlsVmFsaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMTkxLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoxOTI6XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTE5My19XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02MDU0PXN0YXRpYyBpbnQgaGFuZGxlX2ludnZwaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjEzMy1cdFx0V0FSTl9PTl9PTkNFKDEpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2MTM0Olx0XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTYxMzUtXHR9XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02MTg2PXN0YXRpYyBpbnQgaGFuZGxlX3ZtZnVuYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MjIyLVx0fVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2MjIzOlx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MjI0LVxuLS1cbmFyY2gveDg2L2t2bS92bXgvc2d4LmM9MTQxPXN0YXRpYyBpbnQgX19oYW5kbGVfZW5jbHNfZWNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9zZ3guYy0yMDktXHRpZiAoIXJldClcbmFyY2gveDg2L2t2bS92bXgvc2d4LmM6MjEwOlx0XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3NneC5jLTIxMS1cdGlmIChyZXQgPT0gLUVGQVVMVClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3NneC5jPTI5Nz1zdGF0aWMgaW50IGhhbmRsZV9lbmNsc19laW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9zZ3guYy0zNTUtXHRrdm1fZWF4X3dyaXRlKHZjcHUsIHJldCk7XG5hcmNoL3g4Ni9rdm0vdm14L3NneC5jOjM1NjpcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvc2d4LmMtMzU3LX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTU2NzI9c3RhdGljIGludCBoYW5kbGVfY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTcyOC1cdFx0XHR0cmFjZV9rdm1fY3JfcmVhZChjciwgdmFsKTtcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NTcyOTpcdFx0XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTU3MzAtXHRcdGNhc2UgODpcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTU3MzMtXHRcdFx0dHJhY2Vfa3ZtX2NyX3JlYWQoY3IsIHZhbCk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjU3MzQ6XHRcdFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC92bXguYy01NzM1LVx0XHR9XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01NzQxLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo1NzQyOlx0XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTU3NDMtXHRkZWZhdWx0OlxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NTg1Mj1zdGF0aWMgaW50IGhhbmRsZV9pbnZscGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTg1Ni1cdGt2bV9tbXVfaW52bHBnKHZjcHUsIGV4aXRfcXVhbGlmaWNhdGlvbik7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjU4NTc6XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTU4NTgtfVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NTg2MD1zdGF0aWMgaW50IGhhbmRsZV9hcGljX2FjY2VzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01ODc1LVx0XHRcdGt2bV9sYXBpY19zZXRfZW9pKHZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC92bXguYzo1ODc2Olx0XHRcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTg3Ny1cdFx0fVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NTk5OT1zdGF0aWMgaW50IGhhbmRsZV9lcHRfbWlzY29uZmlnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYwMTMtXHRcdHRyYWNlX2t2bV9mYXN0X21taW8oZ3BhKTtcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjAxNDpcdFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MDE1LVx0fVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjEyNj1zdGF0aWMgaW50IGhhbmRsZV9wYXVzZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MTM3LVx0a3ZtX3ZjcHVfb25fc3Bpbih2Y3B1LCB0cnVlKTtcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjEzODpcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjEzOS19XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTU1Mj1pbnQga3ZtX2NvbXBsZXRlX2luc25fZ3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01NTYtXHRlbHNlXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTU3Olx0XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNTU4LVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz03MTY9aW50IGt2bV9lbXVsYXRlX3hzZXRidihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTcyNC1cbmFyY2gveDg2L2t2bS94ODYuYzo3MjU6XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNzI2LX1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NzcyPWludCBrdm1fZW11bGF0ZV9yZHBtYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTc4My1cdGt2bV9lZHhfd3JpdGUodmNwdSwgZGF0YSBcdTAwM2VcdTAwM2UgMzIpO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjc4NDpcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy03ODUtfVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz03ODg9aW50IGt2bV9lbXVsYXRlX2FzX25vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzg5LXtcbmFyY2gveDg2L2t2bS94ODYuYzo3OTA6XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNzkxLX1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTQ1MD1pbnQga3ZtX2VtdWxhdGVfd2JpbnZkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTQ1Mi1cdGt2bV9lbXVsYXRlX3diaW52ZF9ub3NraXAodmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmM6NTQ1MzpcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy01NDU0LX1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjEzNz1zdGF0aWMgaW50IGt2bV92Y3B1X2NoZWNrX2h3X2JwKHVuc2lnbmVkIGxvbmcgYWRkciwgdTMyIHR5cGUsIHUzMiBkcjcsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTYxNTEtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjE1MjppbnQga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3g4Ni5jLTYxNTMte1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy02MTc0LX1cbmFyY2gveDg2L2t2bS94ODYuYzo2MTc1OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbik7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNjE3Ni1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjMxMD1pbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy02Mzg2LVx0ICogRU1VTFRZUEVfU0tJUCB3aXRob3V0IEVNVUxUWVBFX0NPTVBMRVRFX1VTRVJfRVhJVCBpcyBpbnRlbmRlZCBmb3JcbmFyY2gveDg2L2t2bS94ODYuYzo2Mzg3Olx0ICogdXNlICpvbmx5KiBieSB2ZW5kb3IgY2FsbGJhY2tzIGZvciBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbigpLlxuYXJjaC94ODYva3ZtL3g4Ni5jLTYzODgtXHQgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciB1cGRhdGluZyBpbnRlcnJ1cHRpYmlsaXR5IHN0YXRlIGFuZFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz02NTQ5PXN0YXRpYyBpbnQgY29tcGxldGVfZmFzdF9waW9fb3V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU1NS1cbmFyY2gveDg2L2t2bS94ODYuYzo2NTU2Olx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTY1NTctfVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz02NTU5PXN0YXRpYyBpbnQga3ZtX2Zhc3RfcGlvX291dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzaXplLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy02NTc1LVx0XHRcdGNvbXBsZXRlX2Zhc3RfcGlvX291dF9wb3J0XzB4N2U7XG5hcmNoL3g4Ni9rdm0veDg2LmM6NjU3NjpcdFx0a3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU3Ny1cdH0gZWxzZSB7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTY1ODQ9c3RhdGljIGludCBjb21wbGV0ZV9mYXN0X3Bpb19pbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTY2MDItXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjYwMzpcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy02NjA0LX1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjYyNz1pbnQga3ZtX2Zhc3RfcGlvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNpemUsIHVuc2lnbmVkIHNob3J0IHBvcnQsIGludCBpbilcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjYzNC1cdFx0cmV0ID0ga3ZtX2Zhc3RfcGlvX291dCh2Y3B1LCBzaXplLCBwb3J0KTtcbmFyY2gveDg2L2t2bS94ODYuYzo2NjM1Olx0cmV0dXJuIHJldCBcdTAwMjZcdTAwMjYga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNjYzNi19XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTcyNzg9c3RhdGljIGludCBjb21wbGV0ZV9oeXBlcmNhbGxfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTcyODQtXHRrdm1fcmF4X3dyaXRlX3Jhdyh2Y3B1LCByZXQpO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjcyODU6XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNzI4Ni19XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTg2NTg9aW50IGt2bV9lbXVsYXRlX2hhbHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NTkte1xuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NjA6XHRpbnQgcmV0ID0ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtODY2MS1cbmFyY2gveDg2L2t2bS94ODYuYy04NjYyLVx0LypcbmFyY2gveDg2L2t2bS94ODYuYzo4NjYzOlx0ICogSWYga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oKSB0cmlnZ2VyZWQgYSBzaW5nbGVzdGVwXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY2NC1cdCAqIGRlYnVnIGV4Y2VwdGlvbiwgcmV0dXJuIHRvIHVzZXJzcGFjZSBpbW1lZGlhdGVseSBzbyB0aGVcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODY5MD1pbnQga3ZtX2VtdWxhdGVfYXBfcmVzZXRfaG9sZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY5MS17XG5hcmNoL3g4Ni9rdm0veDg2LmM6ODY5MjpcdGludCByZXQgPSBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy04NjkzLVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMDY2Mj1pbnQga3ZtX2hhbmRsZV9pbnZwY2lkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyB0eXBlLCBndmFfdCBndmEpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNjk3LVx0XHRrdm1fbW11X2ludnBjaWRfZ3ZhKHZjcHUsIG9wZXJhbmQuZ2xhLCBvcGVyYW5kLnBjaWQpO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNjk4Olx0XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA2OTktXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNzEzLVx0XHRrdm1faW52YWxpZGF0ZV9wY2lkKHZjcHUsIG9wZXJhbmQucGNpZCk7XG5hcmNoL3g4Ni9rdm0veDg2LmM6MTA3MTQ6XHRcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy0xMDcxNS1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA3MzEtXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0hfR1VFU1QsIHZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNzMyOlx0XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA3MzMtXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5oPTQ5MD1pbnQga3ZtX2VtdWxhdGVfcmRwbWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuaC00OTEtXG5hcmNoL3g4Ni9rdm0veDg2Lmg6NDkyOmludCBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5oLTQ5My1pbnQga3ZtX2NvbXBsZXRlX2luc25fZ3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKTtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTQwOT1zdGF0aWMgaW50IGt2bV94ZW5faHlwZXJjYWxsX3NldF9yZXN1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcmVzdWx0KVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0xNDExLVx0a3ZtX3JheF93cml0ZV9yYXcodmNwdSwgcmVzdWx0KTtcbmFyY2gveDg2L2t2bS94ZW4uYzoxNDEyOlx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuYXJjaC94ODYva3ZtL3hlbi5jLTE0MTMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDM1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uOgoKKipVbmRlcnN0YW5kaW5nIGBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbmAqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBwb2ludGVkIHRvd2FyZHMgdGhlIGBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbmAgZnVuY3Rpb24uIE15IG1lbnRhbCBtYXAgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBLVk0mIzM5O3MgeDg2IGVtdWxhdGlvbiBsYXllciwgYW5kIHRoZSBwYXRoIGBhcmNoL3g4Ni9rdm0veDg2LmNgIGNvbmZpcm1zIHRoaXMuIFRoYXQgZmlsZSBpcyBhIGNvcmUgY29tcG9uZW50IGZvciB4ODYgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEtWTSBmdW5jdGlvbmFsaXR5LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBpcyBkb2luZy4gJiMzNDtTa2lwJiMzNDsgc3VnZ2VzdHMgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIGJ5cGFzc2luZyBvZiBpbnN0cnVjdGlvbnMgdGhhdCBhcmUgZW11bGF0ZWQuIFNvLCB0aGUgcXVlc3Rpb24gaXMsICp3aHkqIGFyZSB3ZSBza2lwcGluZz8gQW5kICpob3cqIGRvZXMgdGhlIGZ1bmN0aW9uIGFjY29tcGxpc2ggdGhhdD8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBzY2VuYXJpb3Mgb3IgY29udGV4dHMgaW4gd2hpY2ggaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxlYWRzIHRvIHNraXBwaW5nPyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZiB0byB1bmRlcnN0YW5kIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscy4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYz02MTM3PXN0YXRpYyBpbnQga3ZtX3ZjcHVfY2hlY2tfaHdfYnAodW5zaWduZWQgbG9uZyBhZGRyLCB1MzIgdHlwZSwgdTMyIGRyNyxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjE1MS1cbmFyY2gveDg2L2t2bS94ODYuYzo2MTUyOmludCBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjE1My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODgwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCBpbnN0cnVjdGlvbiBlbXVsYXRpb24sIHBhcnRpY3VsYXJseSBob3cgS1ZNIGhhbmRsZXMgc2l0dWF0aW9ucyB3aGVyZSBpdCAqZG9lc24mIzM5O3QqIG5lZWQgdG8gZnVsbHkgZW11bGF0ZSBhbiBpbnN0cnVjdGlvbi4gVGhlIG5hbWluZyBvZiBga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb25gIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiBXZSYjMzk7cmUgbm90IHRhbGtpbmcgYWJvdXQgYSBjb3JlIGVtdWxhdGlvbiBwYXRoOyBpbnN0ZWFkLCB0aGlzIHBvaW50cyB0byBhIG1lY2hhbmlzbSBmb3IgYnlwYXNzaW5nIHBvdGVudGlhbGx5IGV4cGVuc2l2ZSBlbXVsYXRpb24gc3RlcHMuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyByaWdodCBpbnRvIHRoZSBjb2RlIHRvIGZpZ3VyZSBvdXQ6CgoqICAgV2hhdCBraW5kcyBvZiBpbnN0cnVjdGlvbnMgYXJlIHdlIHNraXBwaW5nPyBBcmUgdGhleSBwcml2aWxlZ2VkIGluc3RydWN0aW9ucyB0aGF0IG1pZ2h0IGJlIGhhbmRsZWQgZGlyZWN0bHkgYnkgdGhlIGhvc3Qga2VybmVsLCBvciBwZXJoYXBzIGluc3RydWN0aW9ucyB0aGF0IGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBzb21ldGhpbmcgS1ZNIGtub3dzIGhvdyB0byBvcHRpbWl6ZT8KKiAgIFdoYXQmIzM5O3MgdGhlIGNyaXRlcmlhIGZvciBza2lwcGluZz8gSXMgaXQgYmFzZWQgb24gQ1BVIGZlYXR1cmVzLCBndWVzdCBzdGF0ZSwgaW5zdHJ1Y3Rpb24gdHlwZSwgb3Igc29tZXRoaW5nIGVsc2U/CiogICBXaGF0IGFyZSB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zPyBJcyBpdCBqdXN0IGEgc2ltcGxlIGNoZWNrLCBvciBtb3JlIGNvbXBsZXg/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgbm90aWNlYWJsZSBpbXByb3ZlbWVudCBpbiBndWVzdCBleGVjdXRpb24gc3BlZWQsIG9yIGEgc3VidGxlIG9wdGltaXphdGlvbj8KKiAgIEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgS1ZNIGNvbXBvbmVudHMsIGxpa2UgdGhlIGludGVycnVwdCBoYW5kbGluZyBvciBtZW1vcnkgYWNjZXNzPyBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiB0aGVzZSBza2lwIG1lY2hhbmlzbXMgaW50ZXJhY3Qgc2FmZWx5IHdpdGggb3RoZXIgbWVjaGFuaXNtcyBpbiBLVk0uCgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgZnVuZGFtZW50YWwgdHJhZGUtb2ZmczogdGhlIGNvbXBsZXhpdHkgb2YgZGV0ZWN0aW5nIHNraXAtYWJsZSBpbnN0cnVjdGlvbnMgdmVyc3VzIHRoZSBiZW5lZml0IG9mIHNraXBwaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBhcmNoaXRlY3R1cmFsIHByaW5jaXBsZXMgZHJvdmUgdGhlIGRlc2lnbiBoZXJlIC0gd2hhdCBhcmUgdGhlIHRyYWRlLW9mZnMgd2UmIzM5O3JlIG1ha2luZyBhbmQgd2hhdCBhc3N1bXB0aW9ucyBhcmUgbWFkZSB3aGVuIGRlY2lkaW5nIHRvIHNraXAgdGhlIGluc3RydWN0aW9uIGVtdWxhdGlvbiBwYXRoLiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gdHJhY2sgYW55IGVycm9yIGhhbmRsaW5nIHRvIHNlZSBob3cgdGhlIHN5c3RlbSBpcyBkZXNpZ25lZCB0byByZXNwb25kIHRvIGV4Y2VwdGlvbmFsIHNpdHVhdGlvbnMgdGhhdCBtaWdodCBvY2N1ciBkdXJpbmcgYW4gaW5zdHJ1Y3Rpb24gc2tpcC4gVGhpcyBpcyBnb2luZyB0byBiZSBnb29kOyBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcyBhcmUgYWx3YXlzIGludGVyZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxNTIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjE1MjpcdGludCBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG42MTUzOlx0e1xuNjE1NDpcdFx0dW5zaWduZWQgbG9uZyByZmxhZ3MgPSBrdm1feDg2X2NhbGwoZ2V0X3JmbGFncykodmNwdSk7XG42MTU1Olx0XHRpbnQgcjtcbjYxNTY6XHRcbjYxNTc6XHRcdHIgPSBrdm1feDg2X2NhbGwoc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbikodmNwdSk7XG42MTU4Olx0XHRpZiAodW5saWtlbHkoIXIpKVxuNjE1OTpcdFx0XHRyZXR1cm4gMDtcbjYxNjA6XHRcbjYxNjE6XHRcdGt2bV9wbXVfaW5zdHJ1Y3Rpb25fcmV0aXJlZCh2Y3B1KTtcbjYxNjI6XHRcbjYxNjM6XHRcdC8qXG42MTY0Olx0XHQgKiByZmxhZ3MgaXMgdGhlIG9sZCwgXCYjMzQ7cmF3XCYjMzQ7IHZhbHVlIG9mIHRoZSBmbGFncy4gIFRoZSBuZXcgdmFsdWUgaGFzXG42MTY1Olx0XHQgKiBub3QgYmVlbiBzYXZlZCB5ZXQuXG42MTY2Olx0XHQgKlxuNjE2NzpcdFx0ICogVGhpcyBpcyBjb3JyZWN0IGV2ZW4gZm9yIFRGIHNldCBieSB0aGUgZ3Vlc3QsIGJlY2F1c2UgXCYjMzQ7dGhlXG42MTY4Olx0XHQgKiBwcm9jZXNzb3Igd2lsbCBub3QgZ2VuZXJhdGUgdGhpcyBleGNlcHRpb24gYWZ0ZXIgdGhlIGluc3RydWN0aW9uXG42MTY5Olx0XHQgKiB0aGF0IHNldHMgdGhlIFRGIGZsYWdcJiMzNDsuXG42MTcwOlx0XHQgKi9cbjYxNzE6XHRcdGlmICh1bmxpa2VseShyZmxhZ3MgXHUwMDI2IFg4Nl9FRkxBR1NfVEYpKVxuNjE3MjpcdFx0XHRyID0ga3ZtX2luamVjdF9lbXVsYXRlZF9kYih2Y3B1LCBEUjZfQlMpO1xuNjE3MzpcdFx0cmV0dXJuIHI7XG42MTc0Olx0fVxuNjE3NTpcdEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbik7XG42MTc2Olx0XG42MTc3Olx0c3RhdGljIGJvb2wga3ZtX2lzX2NvZGVfYnJlYWtwb2ludF9pbmhpYml0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuNjE3ODpcdHtcbjYxNzk6XHRcdGlmICh2Y3B1LVx1MDAzZWd1ZXN0X2RlYnVnIFx1MDAyNiBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKVxuNjE4MDpcdFx0XHRyZXR1cm4gZmFsc2U7XG42MTgxOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODMwCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBLVk0gRGVidWdnaW5nIEZsb3cqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBLVk0gZGVidWdnaW5nIHByb2Nlc3Mgd29ya3MsIHNwZWNpZmljYWxseSBob3cgYW4gZW11bGF0ZWQgZGVidWcgZXZlbnQgZ2V0cyBpbmplY3RlZC4gSSYjMzk7bSByZWNhbGxpbmcgdGhhdCBga3ZtX2luamVjdF9lbXVsYXRlZF9kYmAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgaXQmIzM5O3MgdGhlIG9uZSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyBgdmNwdS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbmAgdG8gYEtWTV9FWElUX0RFQlVHYC4gQSByZXR1cm4gdmFsdWUgb2YgMCBmcm9tIHRoaXMgZnVuY3Rpb24gd291bGQgdGhlbiB0cmlnZ2VyIGFuIGV4aXQgYmFjayB0byB1c2Vyc3BhY2UsIHdoaWNoIGlzIGNvbnNpc3RlbnQgd2l0aCBob3cgd2UgaGFuZGxlIHRoZXNlIGRlYnVnIHNpdHVhdGlvbnMuCgpUaGVyZWZvcmUsIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgYGt2bV9pbmplY3RfZW11bGF0ZWRfZGJgIGZ1bmN0aW9uIGFuZCBjb25maXJtIHdoZXRoZXIgaXQgaXMgaW5kZWVkIGJlaGF2aW5nIGFzIEkgZXhwZWN0LiBJdCYjMzk7cyB0aW1lIHRvIGNoZWNrIHRoZSBjb2RlIGFuZCBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgY2lyY3Vtc3RhbmNlcyBhbmQgdGhlIHBhdGggdG8gdGhhdCBgS1ZNX0VYSVRfREVCVUdgIGV4aXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBrdm1faW5qZWN0X2VtdWxhdGVkX2RiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYz01ODQ2PXN0YXRpYyB2b2lkIHRvZ2dsZV9pbnRlcnJ1cHRpYmlsaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1hc2spXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTU4NjQtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTg2NTpzdGF0aWMgaW50IGt2bV9pbmplY3RfZW11bGF0ZWRfZGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGRyNilcbmFyY2gveDg2L2t2bS94ODYuYy01ODY2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTk6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyOTMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gYGt2bV9pbmplY3RfZW11bGF0ZWRfZGJgOgoKKipEaXZpbmcgaW50byBga3ZtX2luamVjdF9lbXVsYXRlZF9kYmAqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGt2bV9pbmplY3RfZW11bGF0ZWRfZGJgIGZ1bmN0aW9uLiBJbnN0YW50bHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIEtWTSBhbmQgaG93IGl0JiMzOTtzIG1hbmFnaW5nIGV4Y2VwdGlvbnMuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gaW5qZWN0aW5nIGEgZGVidWcgZXhjZXB0aW9uIGludG8gYSBndWVzdCBWTSwgYnV0IEkgbmVlZCB0byBzZWUgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiB0byBjb25maXJtIHRoZSBuYXR1cmUgb2YgdGhlIHNwZWNpZmljICYjMzQ7ZGVidWcmIzM0OyBhY3Rpb24uIElzIGl0IGVtdWxhdGluZyBhIGhhcmR3YXJlIGRlYnVnIGV2ZW50PyBPciBpcyBpdCBhIHNvZnR3YXJlIHRyaWdnZXI/CgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogaG93IHRoZSBpbmplY3RlZCBkZWJ1ZyBldmVudCBpcyBjb25zdHJ1Y3RlZCwgd2hlcmUgdGhlIGNvbnRleHQgY29tZXMgZnJvbSwgd2hhdCBpdCYjMzk7cyB0cnlpbmcgdG8gZG8uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl04oCZcyBtb2RpZnlpbmcgZ3Vlc3QgcmVnaXN0ZXIgc3RhdGUsIG1hbmlwdWxhdGluZyB0aGUgaW50ZXJydXB0IHZlY3Rvciwgb3Igc2ltdWxhdGluZyBhIHNwZWNpZmljIGNvbmRpdGlvbiB0aGF0IHRoZSBndWVzdCYjMzk7cyBkZWJ1ZyByZWdpc3RlcnMgd291bGQgb3RoZXJ3aXNlIGNhdXNlLiBJJiMzOTtsbCBuZWVkIHRvIGZvbGxvdyB0aGUgZXhlY3V0aW9uIGZsb3cgd2l0aGluIHRoZSBmdW5jdGlvbiB0byBhc3Nlc3MgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIFRoZSBrZXkgd2lsbCBiZSB0byBpZGVudGlmeSB0aGUgcHJlY2lzZSBtZWNoYW5pc21zIHVzZWQgdG8gaW50ZWdyYXRlIHRoZSBpbmplY3RlZCBldmVudCBpbnRvIHRoZSBndWVzdCYjMzk7cyBleGVjdXRpb24uIEFuZCB3aGF0JiMzOTtzIGJlaW5nIGRvbmUgaGVyZSB0byBzYWZlbHkgZG8gdGhhdCwgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHJ1bm5pbmcgVk0uIEkgYW50aWNpcGF0ZSBzb21lIGNyaXRpY2FsIHNlY3Rpb24gaGFuZGxpbmcgZm9yIHRocmVhZCBzYWZldHkgdG9vOyBLVk0gaXMgZ2VuZXJhbGx5IHZlcnkgY2FyZWZ1bCBhYm91dCB0aGF0LiBUaGlzIHNlZW1zIGxpa2UgYSBmdW5jdGlvbiB0aGF0IHJlcXVpcmVzIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBoYXJkd2FyZSwgdGhlIGFyY2hpdGVjdHVyZSwgYW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIEtWTSBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTk6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU4NjU6XHRzdGF0aWMgaW50IGt2bV9pbmplY3RfZW11bGF0ZWRfZGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGRyNilcbjU4NjY6XHR7XG41ODY3Olx0XHRzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1biA9IHZjcHUtXHUwMDNlcnVuO1xuNTg2ODpcdFxuNTg2OTpcdFx0aWYgKHZjcHUtXHUwMDNlZ3Vlc3RfZGVidWcgXHUwMDI2IChLVk1fR1VFU1REQkdfVVNFX0hXX0JQIHwgS1ZNX0dVRVNUREJHX1NJTkdMRVNURVApKSB7XG41ODcwOlx0XHRcdGt2bV9ydW4tXHUwMDNlZGVidWcuYXJjaC5kcjYgPSBkcjYgfCBEUjZfQUNUSVZFX0xPVztcbjU4NzE6XHRcdFx0a3ZtX3J1bi1cdTAwM2VkZWJ1Zy5hcmNoLnBjID0ga3ZtX2dldF9saW5lYXJfcmlwKHZjcHUpO1xuNTg3MjpcdFx0XHRrdm1fcnVuLVx1MDAzZWRlYnVnLmFyY2guZXhjZXB0aW9uID0gREJfVkVDVE9SO1xuNTg3MzpcdFx0XHRrdm1fcnVuLVx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfREVCVUc7XG41ODc0Olx0XHRcdHJldHVybiAwO1xuNTg3NTpcdFx0fVxuNTg3NjpcdFxuNTg3NzpcdFx0a3ZtX3F1ZXVlX2V4Y2VwdGlvbl9wKHZjcHUsIERCX1ZFQ1RPUiwgZHI2KTtcbjU4Nzg6XHRcdHJldHVybiAxO1xuNTg3OTpcdH1cbjU4ODA6XHRcbjU4ODE6XHRzdGF0aWMgaW50IGluamVjdF9lbXVsYXRlZF9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuNTg4MjpcdHtcbjU4ODM6XHRcdHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleCA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5lbXVsYXRlX2N0eHQtXHUwMDNlZXhjZXB0aW9uO1xuNTg4NDpcdFxuNTg4NTpcdFx0aWYgKGV4LVx1MDAzZXZlY3RvciA9PSBEQl9WRUNUT1IpXG41ODg2Olx0XHRcdHJldHVybiBrdm1faW5qZWN0X2VtdWxhdGVkX2RiKHZjcHUsIGV4LVx1MDAzZWRyNik7XG41ODg3Olx0XG41ODg4Olx0XHRpZiAoZXgtXHUwMDNldmVjdG9yID09IFBGX1ZFQ1RPUilcbjU4ODk6XHRcdFx0a3ZtX2luamVjdF9lbXVsYXRlZF9wYWdlX2ZhdWx0KHZjcHUsIGV4KTtcbjU4OTA6XHRcdGVsc2UgaWYgKGV4LVx1MDAzZWVycm9yX2NvZGVfdmFsaWQpXG41ODkxOlx0XHRcdGt2bV9xdWV1ZV9leGNlcHRpb25fZSh2Y3B1LCBleC1cdTAwM2V2ZWN0b3IsIGV4LVx1MDAzZWVycm9yX2NvZGUpO1xuNTg5MjpcdFx0ZWxzZVxuNTg5MzpcdFx0XHRrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIGV4LVx1MDAzZXZlY3Rvcik7XG41ODk0Olx0XHRyZXR1cm4gMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTk6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyMjkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgSW1wYWN0IG9mIGEgS1ZNIFBhdGNoKioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiB0aGlzIHBhdGNoIGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIG15IGhlYWQgYXMgSSBjb25zaWRlciBpdC4gSSBzZWUgdGhhdCBga3ZtX2luamVjdF9lbXVsYXRlZF9kYmAgaXMgY29ycmVjdGx5IHNldHRpbmcgYGt2bV9ydW4tJmd0O2V4aXRfcmVhc29uYCB0byBgS1ZNX0VYSVRfREVCVUdgIGFuZCByZXR1cm5pbmcgMC4gVGhhdCYjMzk7cyBleHBlY3RlZCBiZWhhdmlvci4gVGhlbiB3ZSYjMzk7dmUgZ290IGBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbmAgYWxzbyByZXR1cm5pbmcgMCwgYW5kIGZpbmFsbHksIGBrdm1fZW11bGF0ZV9oYWx0YCBnZXR0aW5nIGEgcmV0dXJuIHZhbHVlIG9mIGByZXQgPSAwYC4KClRoZSBrZXkgZGlmZmVyZW5jZSBoZXJlIGlzIGhvdyBga3ZtX2VtdWxhdGVfaGFsdGAgaXMgYmVoYXZpbmcgKmFmdGVyKiB0aGUgcGF0Y2guIEJlZm9yZSwgaXQgd2FzIGNhbGxpbmcgYGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwYCBhbmQgQU5EaW5nIHRoZSByZXN1bHRzLiBDcml0aWNhbGx5LCBga3ZtX2VtdWxhdGVfaGFsdF9ub3NraXBgIHdvdWxkIG92ZXJ3cml0ZSB0aGUgYGV4aXRfcmVhc29uYCBzZXQgZWFybGllciwgcG90ZW50aWFsbHkgY2hhbmdpbmcgYEtWTV9FWElUX0RFQlVHYCB0byBgS1ZNX0VYSVRfSExUYCBvciBzaW1pbGFyLiBOb3csIHRoZSBwYXRjaCAqcHJlc2VydmVzKiBgS1ZNX0VYSVRfREVCVUdgIGlmIGl0IHdhcyBhbHJlYWR5IHNldC4gSWYgYHZjcHUtJmd0O3J1bi0mZ3Q7ZXhpdF9yZWFzb24gPT0gS1ZNX0VYSVRfREVCVUdgLCBpdCBpbW1lZGlhdGVseSByZXR1cm5zIGByZXRgLCBzbyB0aGUgZGVidWcgZXhpdCByZWFzb24gaXMgbWFpbnRhaW5lZC4KClRoaXMgaXMgYSAqKmRlZmluaXRlKiogZnVuY3Rpb25hbCBjaGFuZ2UuIFRoaXMgYWx0ZXJhdGlvbiBvZiB0aGUgZXhpdCByZWFzb24gaGFuZGxpbmcgd2FycmFudHMgdGhvcm91Z2ggZnV6emluZy4gTXkgbWFpbiBmb2N1cyBzeW1ib2wgaGVyZSB3aWxsIGJlIGBrdm1fZW11bGF0ZV9oYWx0YCwgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjcml0aWNhbCBsb2dpYyBzaGlmdCBvY2N1cnJlZC4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZ1enppbmcgaGFybmVzc2VzIHRhcmdldCB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGFuZCB0aGUgY29kZSBwYXRocyB0aGF0IGludGVyYWN0IHdpdGggaXQuCgpJJiMzOTttIGFsc28gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYWZmZWN0IHRoaXMuIE9idmlvdXNseSwgYEtWTWAgaXMgdGhlIHByaW1hcnkgb25lLCBidXQgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYW55IG90aGVyIHJlbGV2YW50IHNldHRpbmdzLiBgQ09ORklHX0tWTWAgaXRzZWxmIGlzIGdlbmVyYWxseSBlbmFibGVkLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGludmVzdGlnYXRlIHRoYXQgY2FyZWZ1bGx5LCBhbmQgaXQmIzM5O3MgYSBib29sZWFuIG9yIHRyaXN0YXRlLCBzbyBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBNeSBmdXp6aW5nIHN0cmF0ZWd5IHdpbGwgbmVlZCB0byBjb3ZlciBhbGwgcG9zc2libGUgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMzgKCQkJCQkJCW91dHB1dDogMTI2CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtWTSBCdWcgRml4IGFuZCBEZWZpbmluZyBhIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2gsIGFuZCBpdCBsb29rcyBsaWtlIGEgcHJldHR5IHNwZWNpZmljIGZpeCB3aXRoaW4gdGhlIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFib3V0IGBrdm1fZW11bGF0ZV9oYWx0YC4gVGhlIGJ1ZyBpcyB0aGF0IGBrdm1fZW11bGF0ZV9oYWx0YCB3YXMgaW5jb3JyZWN0bHkgb3ZlcndyaXRpbmcgdGhlIGBLVk1fRVhJVF9ERUJVR2AgZXhpdCByZWFzb24gd2l0aCBgS1ZNX0VYSVRfSExUYCB1bmRlciBjZXJ0YWluIHNpbmdsZS1zdGVwIGRlYnVnZ2luZyBjb25kaXRpb25zIGR1cmluZyBhbiBpbnN0cnVjdGlvbiBza2lwLiBUaGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgZnV6emluZywgYXMgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgdGhlIGVtdWxhdG9yIGJlaGF2ZXMuIFRoZSByZWxldmFudCBjb25maWcgaGVyZSBpcyBgS1ZNYC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBrdm1fZW11bGF0ZV9oYWx0YCBhcyB0aGUgZm9jdXMgc3ltYm9sLiBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBleGVjdXRpb24gZmxvdy4gQWgsIHJpZ2h0LCBpdCYjMzk7cyBjYWxsZWQgd2hlbiBhIGd1ZXN0IGV4ZWN1dGVzIGFuIEhMVCBpbnN0cnVjdGlvbi4gVGhhdCBjb3VsZCBoYXBwZW4gZnJlcXVlbnRseSwgZXNwZWNpYWxseSBpZiB0aGUgZ3Vlc3QgaXMgaWRsaW5nLCBidXQgaXQmIzM5O3MgYW4gZXhpdCBoYW5kbGVyLCBub3Qgc29tZXRoaW5nIGxpa2UgYGt2bV92Y3B1X3J1bmAuIFRoYXQgbWVhbnMgaXQmIzM5O3Mgc3BlY2lmaWMgZW5vdWdoIHRvIGJlIGNvbnNpZGVyZWQgYSB2YWx1YWJsZSBmb2N1cyBzeW1ib2wuIEkmIzM5O20gbm90IHNlZWluZyBhbnkgb3RoZXIgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkIHdpdGggdGhpcyBwYXRjaCwgd2hpY2ggcmVpbmZvcmNlcyBteSBkZWNpc2lvbi4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIG15IGFuYWx5c2lzLiBJJiMzOTtsbCBnZXQgdGhlIHJlc3VsdHMgc2V0IHVwIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9lbXVsYXRlX2hhbHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gd2hlcmUgYGt2bV9lbXVsYXRlX2hhbHRgIHdvdWxkIG92ZXJ3cml0ZSB0aGUgYEtWTV9FWElUX0RFQlVHYCBleGl0IHJlYXNvbiB3aXRoIGBLVk1fRVhJVF9ITFRgIGlmIGEgc2luZ2xlLXN0ZXAgZGVidWcgZXhjZXB0aW9uIHdhcyB0cmlnZ2VyZWQgZHVyaW5nIHRoZSBza2lwIG9mIHRoZSBlbXVsYXRlZCBpbnN0cnVjdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2VtdWxhdGVfaGFsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiB3aGVyZSBga3ZtX2VtdWxhdGVfaGFsdGAgd291bGQgb3ZlcndyaXRlIHRoZSBgS1ZNX0VYSVRfREVCVUdgIGV4aXQgcmVhc29uIHdpdGggYEtWTV9FWElUX0hMVGAgaWYgYSBzaW5nbGUtc3RlcCBkZWJ1ZyBleGNlcHRpb24gd2FzIHRyaWdnZXJlZCBkdXJpbmcgdGhlIHNraXAgb2YgdGhlIGVtdWxhdGVkIGluc3RydWN0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDlUMTk6NDk6NTIuMjQ5MDE5MjU3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3NTgyNzYwOTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9lbXVsYXRlX2hhbHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiB3aGVyZSBga3ZtX2VtdWxhdGVfaGFsdGAgd291bGQgb3ZlcndyaXRlIHRoZSBgS1ZNX0VYSVRfREVCVUdgIGV4aXQgcmVhc29uIHdpdGggYEtWTV9FWElUX0hMVGAgaWYgYSBzaW5nbGUtc3RlcCBkZWJ1ZyBleGNlcHRpb24gd2FzIHRyaWdnZXJlZCBkdXJpbmcgdGhlIHNraXAgb2YgdGhlIGVtdWxhdGVkIGluc3RydWN0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxOTo0OTo1Mi4yNDkwMjM5OTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMTI0MDE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA4ODc4ZDdjYTVjZDZiOWZhMzg3ZjllNThlYzFmODNkMjM2MmIzOWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgOSAxOTo0OTo1MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5pbmRleCAwNjI2ZTgzNWU5ZWI3Ny4uMmZkNmFkNDkwNTBjNzEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXFxuQEAgLTg2NTgsMTAgKzg2NTgsMTYgQEAgRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwKTtcXG4gaW50IGt2bV9lbXVsYXRlX2hhbHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdGludCByZXQgPSBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG4rXFxuIFxcdC8qXFxuLVxcdCAqIFRPRE86IHdlIG1pZ2h0IGJlIHNxdWFzaGluZyBhIEdVRVNUREJHX1NJTkdMRVNURVAtdHJpZ2dlcmVkXFxuLVxcdCAqIEtWTV9FWElUX0RFQlVHIGhlcmUuXFxuK1xcdCAqIElmIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCkgdHJpZ2dlcmVkIGEgc2luZ2xlc3RlcFxcbitcXHQgKiBkZWJ1ZyBleGNlcHRpb24sIHJldHVybiB0byB1c2Vyc3BhY2UgaW1tZWRpYXRlbHkgc28gdGhlXFxuK1xcdCAqIGRlYnVnZ2VyIGNhbiBwcm9jZXNzIHRoZSBldmVudC4gRG8gbm90IGxldCBoYWx0IGVtdWxhdGlvblxcbitcXHQgKiBvdmVyd3JpdGUgdGhlIEtWTV9FWElUX0RFQlVHIGV4aXQgcmVhc29uLlxcbiBcXHQgKi9cXG4rXFx0aWYgKHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNlZXhpdF9yZWFzb24gPT0gS1ZNX0VYSVRfREVCVUcpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbiBcXHRyZXR1cm4ga3ZtX2VtdWxhdGVfaGFsdF9ub3NraXAodmNwdSkgXFx1MDAyNlxcdTAwMjYgcmV0O1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZW11bGF0ZV9oYWx0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTk6NDk6NTIuNjcxMDMyMjMyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTcxNjA3NDAzMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2VtdWxhdGVfaGFsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIHdoZXJlIGBrdm1fZW11bGF0ZV9oYWx0YCB3b3VsZCBvdmVyd3JpdGUgdGhlIGBLVk1fRVhJVF9ERUJVR2AgZXhpdCByZWFzb24gd2l0aCBgS1ZNX0VYSVRfSExUYCBpZiBhIHNpbmdsZS1zdGVwIGRlYnVnIGV4Y2VwdGlvbiB3YXMgdHJpZ2dlcmVkIGR1cmluZyB0aGUgc2tpcCBvZiB0aGUgZW11bGF0ZWQgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDg4NzhkN2NhNWNkNmI5ZmEzODdmOWU1OGVjMWY4M2QyMzYyYjM5YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDkgMTk6NDk6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbmluZGV4IDA2MjZlODM1ZTllYjc3Li4yZmQ2YWQ0OTA1MGM3MSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtODY1OCwxMCArODY1OCwxNiBAQCBFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2VtdWxhdGVfaGFsdF9ub3NraXApO1xuIGludCBrdm1fZW11bGF0ZV9oYWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRpbnQgcmV0ID0ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG4rXG4gXHQvKlxuLVx0ICogVE9ETzogd2UgbWlnaHQgYmUgc3F1YXNoaW5nIGEgR1VFU1REQkdfU0lOR0xFU1RFUC10cmlnZ2VyZWRcbi1cdCAqIEtWTV9FWElUX0RFQlVHIGhlcmUuXG4rXHQgKiBJZiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbigpIHRyaWdnZXJlZCBhIHNpbmdsZXN0ZXBcbitcdCAqIGRlYnVnIGV4Y2VwdGlvbiwgcmV0dXJuIHRvIHVzZXJzcGFjZSBpbW1lZGlhdGVseSBzbyB0aGVcbitcdCAqIGRlYnVnZ2VyIGNhbiBwcm9jZXNzIHRoZSBldmVudC4gRG8gbm90IGxldCBoYWx0IGVtdWxhdGlvblxuK1x0ICogb3ZlcndyaXRlIHRoZSBLVk1fRVhJVF9ERUJVRyBleGl0IHJlYXNvbi5cbiBcdCAqL1xuK1x0aWYgKHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID09IEtWTV9FWElUX0RFQlVHKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuIFx0cmV0dXJuIGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwKHZjcHUpIFx1MDAyNlx1MDAyNiByZXQ7XG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZW11bGF0ZV9oYWx0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE5OjQ5OjUyLjY3MTAzMzM2MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0OTIwMDY4NjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIEhhbHQgRW11bGF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgYGt2bV9lbXVsYXRlX2hhbHRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBJdCdzIHByZXR0eSBmb2N1c2VkOyB0aGUga2V5IGlzIHRoZSBhZGRlZCBjb25kaXRpb25hbC4gVGhlIGxvZ2ljIGZsb3cgaXMgY2xlYXJseSBkZXNpZ25lZCB0byBzaG9ydC1jaXJjdWl0IHRoZSB1c3VhbCBgaGFsdGAgZW11bGF0aW9uLiBJJ20gc2VlaW5nIHRoYXQgYWZ0ZXIgYGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpYCwgdGhleSd2ZSBpbnNlcnRlZCBhIGNoZWNrOiBgdmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPT0gS1ZNX0VYSVRfREVCVUdgLiAgSWYgdGhlIGBleGl0X3JlYXNvbmAgKmlzKiBgS1ZNX0VYSVRfREVCVUdgLCB0aGUgZnVuY3Rpb24gYmFpbHMgb3V0IGVhcmx5LCBpbW1lZGlhdGVseSByZXR1cm5pbmcgYHJldGAuIEluc3RlYWQgb2YgdGhlIHN0YW5kYXJkIHBhdGgsIHdoaWNoIHdvdWxkIGNhbGwgYGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwKHZjcHUpYC4gVGhlIGdvYWwgaXMgY2xlYXJseSB0byBoYW5kbGUgZGVidWcgZXhpdHMgZGlmZmVyZW50bHksIHNraXBwaW5nIHBhcnRzIG9mIHRoZSBzdGFuZGFyZCBoYWx0IGVtdWxhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXkgd2FudCB0byBieXBhc3MgYGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwYCB1bmRlciBhIGRlYnVnIGV4aXQgY29uZGl0aW9uLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBmb3IgaGFsdGluZyBhbmQgZGVidWdnaW5nIEtWTSBndWVzdHMgaW4gdGhpcyBzY2VuYXJpby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE5OjUwOjA3LjU5MTEwMzc0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMDU4MjExNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fZW11bGF0ZV9oYWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9ODU4MT1zdGF0aWMgaW50IHZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04NjMwLVxcbmFyY2gveDg2L2t2bS94ODYuYzo4NjMxOnN0YXRpYyBpbnQgX19rdm1fZW11bGF0ZV9oYWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHN0YXRlLCBpbnQgcmVhc29uKVxcbmFyY2gveDg2L2t2bS94ODYuYy04NjMyLXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04NjUxLVxcbmFyY2gveDg2L2t2bS94ODYuYzo4NjUyOmludCBrdm1fZW11bGF0ZV9oYWx0X25vc2tpcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NTMte1xcbmFyY2gveDg2L2t2bS94ODYuYzo4NjU0OlxcdHJldHVybiBfX2t2bV9lbXVsYXRlX2hhbHQodmNwdSwgS1ZNX01QX1NUQVRFX0hBTFRFRCwgS1ZNX0VYSVRfSExUKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY1NS19XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NTY6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY1Ny1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODY1ODppbnQga3ZtX2VtdWxhdGVfaGFsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NTkte1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NzAtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NzE6XFx0cmV0dXJuIGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwKHZjcHUpIFxcdTAwMjZcXHUwMDI2IHJldDtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY3Mi19XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NzM6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9lbXVsYXRlX2hhbHQpO1xcbmFyY2gveDg2L2t2bS94ODYuYy04Njc0LVxcbmFyY2gveDg2L2t2bS94ODYuYz04Njc1PWZhc3RwYXRoX3QgaGFuZGxlX2Zhc3RwYXRoX2hsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY3OS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODY4MDpcXHRpZiAoIWt2bV9lbXVsYXRlX2hhbHQodmNwdSkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2ODEtXFx0XFx0cmV0dXJuIEVYSVRfRkFTVFBBVEhfRVhJVF9VU0VSU1BBQ0U7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODY5MD1pbnQga3ZtX2VtdWxhdGVfYXBfcmVzZXRfaG9sZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY5My1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODY5NDpcXHRyZXR1cm4gX19rdm1fZW11bGF0ZV9oYWx0KHZjcHUsIEtWTV9NUF9TVEFURV9BUF9SRVNFVF9IT0xELFxcbmFyY2gveDg2L2t2bS94ODYuYy04Njk1LVxcdFxcdFxcdFxcdFxcdEtWTV9FWElUX0FQX1JFU0VUX0hPTEQpIFxcdTAwMjZcXHUwMDI2IHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTk6NTA6MDcuOTkxNjg5OTg0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4NDgyNzk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBga3ZtX2VtdWxhdGVfaGFsdGAgQ2FsbHNpdGVzKipcblxuQWxyaWdodCwgc28gYGt2bV9lbXVsYXRlX2hhbHRgIGlzIGV4cG9ydGVkLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyBpbXBvcnRhbnQsIGludGVuZGVkIGZvciBpbnRlcm5hbCBLVk0gb3BlcmF0aW9ucy4gVGhlIGZhY3QgdGhhdCBpdCdzIGNhbGxlZCBpbnRlcm5hbGx5IG1lYW5zIGl0J3MgY29yZSB0byB0aGUgdmlydHVhbGl6YXRpb24gcHJvY2Vzcywgbm90IHNvbWUgcGVyaXBoZXJhbCBtb2R1bGUuXG5cbkkgcmVjYWxsIHNlZWluZyBpdCB1c2VkIGluIGBoYW5kbGVfZmFzdHBhdGhfaGx0YC4gVGhhdCdzIGEgc3Ryb25nIGhpbnQgdGhhdCBpdCBoYW5kbGVzIHRoZSBmYXN0LXBhdGggSExUIGluc3RydWN0aW9uIGVtdWxhdGlvbiwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHBlcmZvcm1hbmNlLiBOb3csIHNpbmNlIGl0J3MgdXNlZCB3aXRoIGBWTVgvU1ZNIGhhbmRsZXJzYCwgd2hpY2ggYXJlIHg4NiB2aXJ0dWFsaXphdGlvbiB0ZWNobm9sb2dpZXMsIHRoZSBmdW5jdGlvbiBwcm9iYWJseSBkZWFscyB3aXRoIHRoZSBjb3JlIGVtdWxhdGlvbiBvZiBITFQgaW5zdHJ1Y3Rpb25zIHdoZW4gdGhlIGd1ZXN0IHRyaWdnZXJzIHRoZW0uXG5cbkxldCdzIGRyaWxsIGRvd24gYW5kIHNlZSAqZXhhY3RseSogd2hlcmUgYGt2bV9lbXVsYXRlX2hhbHRgIGlzIGNhbGxlZC4gVW5kZXJzdGFuZGluZyB0aGUgcHJlY2lzZSBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIEtWTSBhcmNoaXRlY3R1cmUgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoeXBlcnZpc29yIGNvbXBvbmVudHMuIEkgbmVlZCB0byBiZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciB1bmV4cGVjdGVkIGNhbGwgc2l0ZXMgdGhhdCB3b3VsZCBiZSB1bmV4cGVjdGVkLCBvciBwZXJoYXBzIGV2ZW4gaW5kaWNhdGUgYSBwb3RlbnRpYWwgYnVnLiBUaW1lIHRvIGRpZyBpbiB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI5MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE5OjUwOjExLjQ3NjUxOTU1N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzEyNDY5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fZW11bGF0ZV9oYWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zMzMyPXN0YXRpYyBpbnQgKCpjb25zdCBzdm1fZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMzczLVxcdFtTVk1fRVhJVF9QQVVTRV1cXHRcXHRcXHQ9IHBhdXNlX2ludGVyY2VwdGlvbixcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjMzNzQ6XFx0W1NWTV9FWElUX0hMVF1cXHRcXHRcXHRcXHQ9IGt2bV9lbXVsYXRlX2hhbHQsXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMzc1LVxcdFtTVk1fRVhJVF9JTlZMUEddXFx0XFx0XFx0PSBpbnZscGdfaW50ZXJjZXB0aW9uLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMzk4LVxcdFtTVk1fRVhJVF9JTlZQQ0lEXSAgICAgICAgICAgICAgICAgICAgICA9IGludnBjaWRfaW50ZXJjZXB0aW9uLFxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzM5OTpcXHRbU1ZNX0VYSVRfSURMRV9ITFRdXFx0XFx0XFx0PSBrdm1fZW11bGF0ZV9oYWx0LFxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzQwMC1cXHRbU1ZNX0VYSVRfTlBGXVxcdFxcdFxcdFxcdD0gbnBmX2ludGVyY2VwdGlvbixcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MzYyMD1pbnQgc3ZtX2ludm9rZV9leGl0X2hhbmRsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgX19leGl0X2NvZGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM2NDMtXFx0ZWxzZSBpZiAoZXhpdF9jb2RlID09IFNWTV9FWElUX0hMVCB8fCBleGl0X2NvZGUgPT0gU1ZNX0VYSVRfSURMRV9ITFQpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNjQ0OlxcdFxcdHJldHVybiBrdm1fZW11bGF0ZV9oYWx0KHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzY0NS1cXHRlbHNlIGlmIChleGl0X2NvZGUgPT0gU1ZNX0VYSVRfTlBGKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNzg3PXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxhdW5jaClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzg5Ny1cXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLm5lc3RlZF9ydW5fcGVuZGluZyA9IDA7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozODk4OlxcdFxcdFxcdHJldHVybiBrdm1fZW11bGF0ZV9oYWx0X25vc2tpcCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4OTktXFx0XFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0yMDQ0PWludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yMTAxLVxcdGNhc2UgRVhJVF9SRUFTT05fSExUOlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MjEwMjpcXHRcXHRyZXR1cm4ga3ZtX2VtdWxhdGVfaGFsdF9ub3NraXAodmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yMTAzLVxcdGNhc2UgRVhJVF9SRUFTT05fVERDQUxMOlxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz01MzI1PXN0YXRpYyBpbnQgaGFuZGxlX3Jtb2RlX2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTUzMzUtXFx0XFx0XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5oYWx0X3JlcXVlc3QgPSAwO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NTMzNjpcXHRcXHRcXHRcXHRyZXR1cm4ga3ZtX2VtdWxhdGVfaGFsdF9ub3NraXAodmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01MzM3LVxcdFxcdFxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjA2ND1zdGF0aWMgaW50IGhhbmRsZV9pbnZhbGlkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjA5Ni1cXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmhhbHRfcmVxdWVzdCA9IDA7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2MDk3OlxcdFxcdFxcdHJldHVybiBrdm1fZW11bGF0ZV9oYWx0X25vc2tpcCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYwOTgtXFx0XFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz02MzMzPXN0YXRpYyBpbnQgKCprdm1fdm14X2V4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjM0NC1cXHRbRVhJVF9SRUFTT05fSU5URVJSVVBUX1dJTkRPV10gICAgICAgID0gaGFuZGxlX2ludGVycnVwdF93aW5kb3csXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2MzQ1OlxcdFtFWElUX1JFQVNPTl9ITFRdICAgICAgICAgICAgICAgICAgICAgPSBrdm1fZW11bGF0ZV9oYWx0LFxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjM0Ni1cXHRbRVhJVF9SRUFTT05fSU5WRF1cXHRcXHQgICAgICA9IGt2bV9lbXVsYXRlX2ludmQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTY3MTI9c3RhdGljIGludCBfX3ZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjg1Mi1cXHRlbHNlIGlmIChleGl0X3JlYXNvbi5iYXNpYyA9PSBFWElUX1JFQVNPTl9ITFQpXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2ODUzOlxcdFxcdHJldHVybiBrdm1fZW11bGF0ZV9oYWx0KHZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjg1NC1cXHRlbHNlIGlmIChleGl0X3JlYXNvbi5iYXNpYyA9PSBFWElUX1JFQVNPTl9FUFRfTUlTQ09ORklHKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTg1ODE9c3RhdGljIGludCB2Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtODYzMC1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODYzMTpzdGF0aWMgaW50IF9fa3ZtX2VtdWxhdGVfaGFsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzdGF0ZSwgaW50IHJlYXNvbilcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODYzMi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY1MS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODY1MjppbnQga3ZtX2VtdWxhdGVfaGFsdF9ub3NraXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ODYuYy04NjUzLXtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODY1NDpcXHRyZXR1cm4gX19rdm1fZW11bGF0ZV9oYWx0KHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQsIEtWTV9FWElUX0hMVCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NTUtfVxcbmFyY2gveDg2L2t2bS94ODYuYzo4NjU2OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZW11bGF0ZV9oYWx0X25vc2tpcCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NTctXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NTg6aW50IGt2bV9lbXVsYXRlX2hhbHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ODYuYy04NjU5LXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04NjcwLVxcbmFyY2gveDg2L2t2bS94ODYuYzo4NjcxOlxcdHJldHVybiBrdm1fZW11bGF0ZV9oYWx0X25vc2tpcCh2Y3B1KSBcXHUwMDI2XFx1MDAyNiByZXQ7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NzItfVxcbmFyY2gveDg2L2t2bS94ODYuYzo4NjczOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZW11bGF0ZV9oYWx0KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY3NC1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODY3NT1mYXN0cGF0aF90IGhhbmRsZV9mYXN0cGF0aF9obHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NzktXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2ODA6XFx0aWYgKCFrdm1fZW11bGF0ZV9oYWx0KHZjcHUpKVxcbmFyY2gveDg2L2t2bS94ODYuYy04NjgxLVxcdFxcdHJldHVybiBFWElUX0ZBU1RQQVRIX0VYSVRfVVNFUlNQQUNFO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTg2OTA9aW50IGt2bV9lbXVsYXRlX2FwX3Jlc2V0X2hvbGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2OTMtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2OTQ6XFx0cmV0dXJuIF9fa3ZtX2VtdWxhdGVfaGFsdCh2Y3B1LCBLVk1fTVBfU1RBVEVfQVBfUkVTRVRfSE9MRCxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY5NS1cXHRcXHRcXHRcXHRcXHRLVk1fRVhJVF9BUF9SRVNFVF9IT0xEKSBcXHUwMDI2XFx1MDAyNiByZXQ7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2Lmg9NDc3PWludCBrdm1fZW11bGF0ZV9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuaDo0Nzg6aW50IGt2bV9lbXVsYXRlX2hhbHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2Lmg6NDc5OmludCBrdm1fZW11bGF0ZV9oYWx0X25vc2tpcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuaC00ODAtaW50IGt2bV9lbXVsYXRlX2FwX3Jlc2V0X2hvbGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTk6NTA6MTEuNTMzNjQ4NTE3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5NjE5NDUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhhbHQgRW11bGF0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoZSBjaGFuZ2UgaXMgY2xlYXJseSB3aXRoaW4gYGt2bV9lbXVsYXRlX2hhbHRgLiBJdCdzIGRlZmluaXRlbHkgYWN0aXZlIGFuZCB0aGUgY29kZSBmbG93IGNhbiByZWFjaCBpdCwgd2hpY2ggaXMgdGhlIGZpcnN0IGdvb2Qgc2lnbi4gVGhpcyBpcyBzcGVjaWZpYyB0byBLVk0geDg2LCB3aGljaCBtYWtlcyBzZW5zZS4gQmVmb3JlIEkgZGlnIHRvbyBkZWVwLCBsZXQncyBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGUgb2J2aW91czogaXMgS1ZNIGVuYWJsZWQ/IEknbGwgY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoaXMuIEtWTSBpcyB1c3VhbGx5IGVuYWJsZWQgYXMgYSBiYXNlIHBsYXRmb3JtLlxuXG5SaWdodCwgdGhlIGZ1bmN0aW9uIGl0c2VsZiwgYGt2bV9lbXVsYXRlX2hhbHRgLCByZXNpZGVzIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBUaGF0J3MgdGhlIGV4cGVjdGVkIGxvY2F0aW9uLlxuXG5JJ20gZm9jdXNpbmcgb24gYGt2bV9lbXVsYXRlX2hhbHRgIGhlcmUuIE5vdywgc2luY2Ugd2UgYXJlIHRhbGtpbmcgYWJvdXQgZW11bGF0aW9uLCBsZXQgbWUgcXVpY2tseSBnbGFuY2UgYXQgYGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uYC4gSSB3YW50IHRvIGtub3cgaWYgdGhpcyBjaGFuZ2UgaGFzIGFueSBpbnRlcnBsYXkgd2l0aCB0aGUgYEtWTV9FWElUX0RFQlVHYCBleGl0IHJlYXNvbi4gV2UgZG9uJ3Qgd2FudCB0byBtaXNzIHNvbWV0aGluZyBvYnZpb3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDg2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE5OjUwOjE1LjcyOTg0NDU3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4Mzk4MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2NwdWlkLmM9MjE2MT1pbnQga3ZtX2VtdWxhdGVfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMjE3Ni1cXHRrdm1fZWR4X3dyaXRlKHZjcHUsIGVkeCk7XFxuYXJjaC94ODYva3ZtL2NwdWlkLmM6MjE3NzpcXHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMjE3OC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9MjM5MT1zdGF0aWMgaW50IGt2bV9odl9oeXBlcmNhbGxfY29tcGxldGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcmVzdWx0KVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTI0MDUtXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjI0MDY6XFx0cmV0ID0ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTI0MDctXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jPTkyMz1zdGF0aWMgZmFzdHBhdGhfdCBfX2hhbmRsZV9mYXN0cGF0aF93cm1zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCBkYXRhKVxcbi0tXFxuYXJjaC94ODYva3ZtL21zcnMuYy05NDItXFxuYXJjaC94ODYva3ZtL21zcnMuYzo5NDM6XFx0aWYgKCFrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTk0NC1cXHRcXHRyZXR1cm4gRVhJVF9GQVNUUEFUSF9FWElUX1VTRVJTUEFDRTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MTk3Mz1zdGF0aWMgaW50IG5wZl9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMDAzLVxcdFxcdFxcdHRyYWNlX2t2bV9mYXN0X21taW8oZ3BhKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjIwMDQ6XFx0XFx0XFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjAwNS1cXHRcXHR9XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTIyMTk9c3RhdGljIGludCB2bWxvYWRfdm1zYXZlX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgdm1sb2FkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMjM5LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjI0MDpcXHRyZXQgPSBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIyNDEtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTIzODY9c3RhdGljIGludCBzdGdpX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIzOTItXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyMzkzOlxcdHJldCA9IGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjM5NC1cXHRzdm1fc2V0X2dpZih0b19zdm0odmNwdSksIHRydWUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0yMzk4PXN0YXRpYyBpbnQgY2xnaV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDA0LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjQwNTpcXHRyZXQgPSBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0MDYtXFx0c3ZtX3NldF9naWYodG9fc3ZtKHZjcHUpLCBmYWxzZSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTI0MTA9c3RhdGljIGludCBpbnZscGdhX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0MjMtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNDI0OlxcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0MjUtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0yNTI5PXN0YXRpYyBpbnQgaW52bHBnX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI1MzQtXFx0a3ZtX21tdV9pbnZscGcodmNwdSwgdG9fc3ZtKHZjcHUpLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV4aXRfaW5mb18xKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI1MzU6XFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjUzNi19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTMyMzY9c3RhdGljIGludCBwYXVzZV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMjQ4LVxcdGt2bV92Y3B1X29uX3NwaW4odmNwdSwgaW5fa2VybmVsKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjMyNDk6XFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzI1MC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTE1OT1zdGF0aWMgaW50IG5lc3RlZF92bXhfc3VjY2VlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTE2My1cXHRcXHRcXHQgICAgWDg2X0VGTEFHU19aRiB8IFg4Nl9FRkxBR1NfU0YgfCBYODZfRUZMQUdTX09GKSk7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoxNjQ6XFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMTY1LX1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MTY3PXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9mYWlsSW52YWxpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTE3Mi1cXHRcXHRcXHR8IFg4Nl9FRkxBR1NfQ0YpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MTczOlxcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTE3NC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTE3Nj1zdGF0aWMgaW50IG5lc3RlZF92bXhfZmFpbFZhbGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMTkxLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MTkyOlxcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTE5My19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTYwNTQ9c3RhdGljIGludCBoYW5kbGVfaW52dnBpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTYxMzMtXFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NjEzNDpcXHRcXHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MTM1LVxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjE4Nj1zdGF0aWMgaW50IGhhbmRsZV92bWZ1bmMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MjIyLVxcdH1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjYyMjM6XFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjIyNC1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvc2d4LmM9MTQxPXN0YXRpYyBpbnQgX19oYW5kbGVfZW5jbHNfZWNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3NneC5jLTIwOS1cXHRpZiAoIXJldClcXG5hcmNoL3g4Ni9rdm0vdm14L3NneC5jOjIxMDpcXHRcXHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC9zZ3guYy0yMTEtXFx0aWYgKHJldCA9PSAtRUZBVUxUKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9zZ3guYz0yOTc9c3RhdGljIGludCBoYW5kbGVfZW5jbHNfZWluaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9zZ3guYy0zNTUtXFx0a3ZtX2VheF93cml0ZSh2Y3B1LCByZXQpO1xcbmFyY2gveDg2L2t2bS92bXgvc2d4LmM6MzU2OlxcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3NneC5jLTM1Ny19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTU2NzI9c3RhdGljIGludCBoYW5kbGVfY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01NzI4LVxcdFxcdFxcdHRyYWNlX2t2bV9jcl9yZWFkKGNyLCB2YWwpO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NTcyOTpcXHRcXHRcXHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01NzMwLVxcdFxcdGNhc2UgODpcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTczMy1cXHRcXHRcXHR0cmFjZV9rdm1fY3JfcmVhZChjciwgdmFsKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjU3MzQ6XFx0XFx0XFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTczNS1cXHRcXHR9XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTU3NDEtXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo1NzQyOlxcdFxcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTU3NDMtXFx0ZGVmYXVsdDpcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NTg1Mj1zdGF0aWMgaW50IGhhbmRsZV9pbnZscGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01ODU2LVxcdGt2bV9tbXVfaW52bHBnKHZjcHUsIGV4aXRfcXVhbGlmaWNhdGlvbik7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo1ODU3OlxcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTU4NTgtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz01ODYwPXN0YXRpYyBpbnQgaGFuZGxlX2FwaWNfYWNjZXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTg3NS1cXHRcXHRcXHRrdm1fbGFwaWNfc2V0X2VvaSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjU4NzY6XFx0XFx0XFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTg3Ny1cXHRcXHR9XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTU5OTk9c3RhdGljIGludCBoYW5kbGVfZXB0X21pc2NvbmZpZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYwMTMtXFx0XFx0dHJhY2Vfa3ZtX2Zhc3RfbW1pbyhncGEpO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjAxNDpcXHRcXHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MDE1LVxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjEyNj1zdGF0aWMgaW50IGhhbmRsZV9wYXVzZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYxMzctXFx0a3ZtX3ZjcHVfb25fc3Bpbih2Y3B1LCB0cnVlKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjYxMzg6XFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjEzOS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTUyPWludCBrdm1fY29tcGxldGVfaW5zbl9ncChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlcnIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTU2LVxcdGVsc2VcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTU3OlxcdFxcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTU4LVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTcxNj1pbnQga3ZtX2VtdWxhdGVfeHNldGJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy03MjQtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjcyNTpcXHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTcyNi19XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NzcyPWludCBrdm1fZW11bGF0ZV9yZHBtYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzgzLVxcdGt2bV9lZHhfd3JpdGUodmNwdSwgZGF0YSBcXHUwMDNlXFx1MDAzZSAzMik7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjc4NDpcXHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTc4NS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9Nzg4PWludCBrdm1fZW11bGF0ZV9hc19ub3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ODYuYy03ODkte1xcbmFyY2gveDg2L2t2bS94ODYuYzo3OTA6XFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy03OTEtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTU0NTA9aW50IGt2bV9lbXVsYXRlX3diaW52ZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTQ1Mi1cXHRrdm1fZW11bGF0ZV93YmludmRfbm9za2lwKHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYzo1NDUzOlxcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTQ1NC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjEzNz1zdGF0aWMgaW50IGt2bV92Y3B1X2NoZWNrX2h3X2JwKHVuc2lnbmVkIGxvbmcgYWRkciwgdTMyIHR5cGUsIHUzMiBkcjcsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjE1MS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjE1MjppbnQga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ODYuYy02MTUzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy02MTc0LX1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjE3NTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pO1xcbmFyY2gveDg2L2t2bS94ODYuYy02MTc2LVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTYzMTA9aW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy02Mzg2LVxcdCAqIEVNVUxUWVBFX1NLSVAgd2l0aG91dCBFTVVMVFlQRV9DT01QTEVURV9VU0VSX0VYSVQgaXMgaW50ZW5kZWQgZm9yXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjYzODc6XFx0ICogdXNlICpvbmx5KiBieSB2ZW5kb3IgY2FsbGJhY2tzIGZvciBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbigpLlxcbmFyY2gveDg2L2t2bS94ODYuYy02Mzg4LVxcdCAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHVwZGF0aW5nIGludGVycnVwdGliaWxpdHkgc3RhdGUgYW5kXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjU0OT1zdGF0aWMgaW50IGNvbXBsZXRlX2Zhc3RfcGlvX291dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU1NS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjU1NjpcXHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1NTctfVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTY1NTk9c3RhdGljIGludCBrdm1fZmFzdF9waW9fb3V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNpemUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU3NS1cXHRcXHRcXHRjb21wbGV0ZV9mYXN0X3Bpb19vdXRfcG9ydF8weDdlO1xcbmFyY2gveDg2L2t2bS94ODYuYzo2NTc2OlxcdFxcdGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy02NTc3LVxcdH0gZWxzZSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjU4ND1zdGF0aWMgaW50IGNvbXBsZXRlX2Zhc3RfcGlvX2luKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy02NjAyLVxcbmFyY2gveDg2L2t2bS94ODYuYzo2NjAzOlxcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjYwNC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjYyNz1pbnQga3ZtX2Zhc3RfcGlvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNpemUsIHVuc2lnbmVkIHNob3J0IHBvcnQsIGludCBpbilcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy02NjM0LVxcdFxcdHJldCA9IGt2bV9mYXN0X3Bpb19vdXQodmNwdSwgc2l6ZSwgcG9ydCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjY2MzU6XFx0cmV0dXJuIHJldCBcXHUwMDI2XFx1MDAyNiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjYzNi19XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NzI3OD1zdGF0aWMgaW50IGNvbXBsZXRlX2h5cGVyY2FsbF9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy03Mjg0LVxcdGt2bV9yYXhfd3JpdGVfcmF3KHZjcHUsIHJldCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjcyODU6XFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy03Mjg2LX1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz04NjU4PWludCBrdm1fZW11bGF0ZV9oYWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY1OS17XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NjA6XFx0aW50IHJldCA9IGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy04NjYxLVxcbmFyY2gveDg2L2t2bS94ODYuYy04NjYyLVxcdC8qXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NjM6XFx0ICogSWYga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oKSB0cmlnZ2VyZWQgYSBzaW5nbGVzdGVwXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NjQtXFx0ICogZGVidWcgZXhjZXB0aW9uLCByZXR1cm4gdG8gdXNlcnNwYWNlIGltbWVkaWF0ZWx5IHNvIHRoZVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTg2OTA9aW50IGt2bV9lbXVsYXRlX2FwX3Jlc2V0X2hvbGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ODYuYy04NjkxLXtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODY5MjpcXHRpbnQgcmV0ID0ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2OTMtXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA2NjI9aW50IGt2bV9oYW5kbGVfaW52cGNpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgdHlwZSwgZ3ZhX3QgZ3ZhKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNjk3LVxcdFxcdGt2bV9tbXVfaW52cGNpZF9ndmEodmNwdSwgb3BlcmFuZC5nbGEsIG9wZXJhbmQucGNpZCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNjk4OlxcdFxcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA2OTktXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA3MTMtXFx0XFx0a3ZtX2ludmFsaWRhdGVfcGNpZCh2Y3B1LCBvcGVyYW5kLnBjaWQpO1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMDcxNDpcXHRcXHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNzE1LVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNzMxLVxcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0hfR1VFU1QsIHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMDczMjpcXHRcXHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNzMzLVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5oPTQ5MD1pbnQga3ZtX2VtdWxhdGVfcmRwbWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmgtNDkxLVxcbmFyY2gveDg2L2t2bS94ODYuaDo0OTI6aW50IGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5oLTQ5My1pbnQga3ZtX2NvbXBsZXRlX2luc25fZ3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0xNDA5PXN0YXRpYyBpbnQga3ZtX3hlbl9oeXBlcmNhbGxfc2V0X3Jlc3VsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCByZXN1bHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTQxMS1cXHRrdm1fcmF4X3dyaXRlX3Jhdyh2Y3B1LCByZXN1bHQpO1xcbmFyY2gveDg2L2t2bS94ZW4uYzoxNDEyOlxcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTQxMy19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE5OjUwOjE1Ljc4ODI0ODEzOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzcwMzMwMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb246XG5cbioqVW5kZXJzdGFuZGluZyBga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb25gKipcblxuT2theSwgc28gSSd2ZSBiZWVuIHBvaW50ZWQgdG93YXJkcyB0aGUgYGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uYCBmdW5jdGlvbi4gTXkgbWVudGFsIG1hcCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIEtWTSdzIHg4NiBlbXVsYXRpb24gbGF5ZXIsIGFuZCB0aGUgcGF0aCBgYXJjaC94ODYva3ZtL3g4Ni5jYCBjb25maXJtcyB0aGlzLiBUaGF0IGZpbGUgaXMgYSBjb3JlIGNvbXBvbmVudCBmb3IgeDg2IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLVk0gZnVuY3Rpb25hbGl0eS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gaXMgZG9pbmcuIFwiU2tpcFwiIHN1Z2dlc3RzIGl0J3MgaGFuZGxpbmcgdGhlIGJ5cGFzc2luZyBvZiBpbnN0cnVjdGlvbnMgdGhhdCBhcmUgZW11bGF0ZWQuIFNvLCB0aGUgcXVlc3Rpb24gaXMsICp3aHkqIGFyZSB3ZSBza2lwcGluZz8gQW5kICpob3cqIGRvZXMgdGhlIGZ1bmN0aW9uIGFjY29tcGxpc2ggdGhhdD8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBzY2VuYXJpb3Mgb3IgY29udGV4dHMgaW4gd2hpY2ggaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxlYWRzIHRvIHNraXBwaW5nPyBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGUgaXRzZWxmIHRvIHVuZGVyc3RhbmQgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDM1LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTk6NTA6MTkuMTI1MjgyNTc0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjkzMzYzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuYz02MTM3PXN0YXRpYyBpbnQga3ZtX3ZjcHVfY2hlY2tfaHdfYnAodW5zaWduZWQgbG9uZyBhZGRyLCB1MzIgdHlwZSwgdTMyIGRyNyxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy02MTUxLVxcbmFyY2gveDg2L2t2bS94ODYuYzo2MTUyOmludCBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTYxNTMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxOTo1MDoxOS4xODIyMTgxMzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU5MTEwNDk1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIHdpdGggaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLCBwYXJ0aWN1bGFybHkgaG93IEtWTSBoYW5kbGVzIHNpdHVhdGlvbnMgd2hlcmUgaXQgKmRvZXNuJ3QqIG5lZWQgdG8gZnVsbHkgZW11bGF0ZSBhbiBpbnN0cnVjdGlvbi4gVGhlIG5hbWluZyBvZiBga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb25gIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiBXZSdyZSBub3QgdGFsa2luZyBhYm91dCBhIGNvcmUgZW11bGF0aW9uIHBhdGg7IGluc3RlYWQsIHRoaXMgcG9pbnRzIHRvIGEgbWVjaGFuaXNtIGZvciBieXBhc3NpbmcgcG90ZW50aWFsbHkgZXhwZW5zaXZlIGVtdWxhdGlvbiBzdGVwcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgcmlnaHQgaW50byB0aGUgY29kZSB0byBmaWd1cmUgb3V0OlxuXG4qICAgV2hhdCBraW5kcyBvZiBpbnN0cnVjdGlvbnMgYXJlIHdlIHNraXBwaW5nPyBBcmUgdGhleSBwcml2aWxlZ2VkIGluc3RydWN0aW9ucyB0aGF0IG1pZ2h0IGJlIGhhbmRsZWQgZGlyZWN0bHkgYnkgdGhlIGhvc3Qga2VybmVsLCBvciBwZXJoYXBzIGluc3RydWN0aW9ucyB0aGF0IGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBzb21ldGhpbmcgS1ZNIGtub3dzIGhvdyB0byBvcHRpbWl6ZT9cbiogICBXaGF0J3MgdGhlIGNyaXRlcmlhIGZvciBza2lwcGluZz8gSXMgaXQgYmFzZWQgb24gQ1BVIGZlYXR1cmVzLCBndWVzdCBzdGF0ZSwgaW5zdHJ1Y3Rpb24gdHlwZSwgb3Igc29tZXRoaW5nIGVsc2U/XG4qICAgV2hhdCBhcmUgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucz8gSXMgaXQganVzdCBhIHNpbXBsZSBjaGVjaywgb3IgbW9yZSBjb21wbGV4PyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIG5vdGljZWFibGUgaW1wcm92ZW1lbnQgaW4gZ3Vlc3QgZXhlY3V0aW9uIHNwZWVkLCBvciBhIHN1YnRsZSBvcHRpbWl6YXRpb24/XG4qICAgSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCBvdGhlciBLVk0gY29tcG9uZW50cywgbGlrZSB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIG9yIG1lbW9yeSBhY2Nlc3M/IEl0IGlzIGltcG9ydGFudCB0byBrbm93IGlmIHRoZXNlIHNraXAgbWVjaGFuaXNtcyBpbnRlcmFjdCBzYWZlbHkgd2l0aCBvdGhlciBtZWNoYW5pc21zIGluIEtWTS5cblxuSSdsbCBiZSBsb29raW5nIGZvciB0aGUgZnVuZGFtZW50YWwgdHJhZGUtb2ZmczogdGhlIGNvbXBsZXhpdHkgb2YgZGV0ZWN0aW5nIHNraXAtYWJsZSBpbnN0cnVjdGlvbnMgdmVyc3VzIHRoZSBiZW5lZml0IG9mIHNraXBwaW5nLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGFyY2hpdGVjdHVyYWwgcHJpbmNpcGxlcyBkcm92ZSB0aGUgZGVzaWduIGhlcmUgLSB3aGF0IGFyZSB0aGUgdHJhZGUtb2ZmcyB3ZSdyZSBtYWtpbmcgYW5kIHdoYXQgYXNzdW1wdGlvbnMgYXJlIG1hZGUgd2hlbiBkZWNpZGluZyB0byBza2lwIHRoZSBpbnN0cnVjdGlvbiBlbXVsYXRpb24gcGF0aC4gSSdsbCBhbHNvIHdhbnQgdG8gdHJhY2sgYW55IGVycm9yIGhhbmRsaW5nIHRvIHNlZSBob3cgdGhlIHN5c3RlbSBpcyBkZXNpZ25lZCB0byByZXNwb25kIHRvIGV4Y2VwdGlvbmFsIHNpdHVhdGlvbnMgdGhhdCBtaWdodCBvY2N1ciBkdXJpbmcgYW4gaW5zdHJ1Y3Rpb24gc2tpcC4gVGhpcyBpcyBnb2luZyB0byBiZSBnb29kOyBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcyBhcmUgYWx3YXlzIGludGVyZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg4MCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE5OjUwOjM1LjA5MzI2OTUwOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDMwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxNTIsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYxNTI6XFx0aW50IGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG42MTUzOlxcdHtcXG42MTU0OlxcdFxcdHVuc2lnbmVkIGxvbmcgcmZsYWdzID0ga3ZtX3g4Nl9jYWxsKGdldF9yZmxhZ3MpKHZjcHUpO1xcbjYxNTU6XFx0XFx0aW50IHI7XFxuNjE1NjpcXHRcXG42MTU3OlxcdFxcdHIgPSBrdm1feDg2X2NhbGwoc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbikodmNwdSk7XFxuNjE1ODpcXHRcXHRpZiAodW5saWtlbHkoIXIpKVxcbjYxNTk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNjE2MDpcXHRcXG42MTYxOlxcdFxcdGt2bV9wbXVfaW5zdHJ1Y3Rpb25fcmV0aXJlZCh2Y3B1KTtcXG42MTYyOlxcdFxcbjYxNjM6XFx0XFx0LypcXG42MTY0OlxcdFxcdCAqIHJmbGFncyBpcyB0aGUgb2xkLCBcXFwicmF3XFxcIiB2YWx1ZSBvZiB0aGUgZmxhZ3MuICBUaGUgbmV3IHZhbHVlIGhhc1xcbjYxNjU6XFx0XFx0ICogbm90IGJlZW4gc2F2ZWQgeWV0LlxcbjYxNjY6XFx0XFx0ICpcXG42MTY3OlxcdFxcdCAqIFRoaXMgaXMgY29ycmVjdCBldmVuIGZvciBURiBzZXQgYnkgdGhlIGd1ZXN0LCBiZWNhdXNlIFxcXCJ0aGVcXG42MTY4OlxcdFxcdCAqIHByb2Nlc3NvciB3aWxsIG5vdCBnZW5lcmF0ZSB0aGlzIGV4Y2VwdGlvbiBhZnRlciB0aGUgaW5zdHJ1Y3Rpb25cXG42MTY5OlxcdFxcdCAqIHRoYXQgc2V0cyB0aGUgVEYgZmxhZ1xcXCIuXFxuNjE3MDpcXHRcXHQgKi9cXG42MTcxOlxcdFxcdGlmICh1bmxpa2VseShyZmxhZ3MgXFx1MDAyNiBYODZfRUZMQUdTX1RGKSlcXG42MTcyOlxcdFxcdFxcdHIgPSBrdm1faW5qZWN0X2VtdWxhdGVkX2RiKHZjcHUsIERSNl9CUyk7XFxuNjE3MzpcXHRcXHRyZXR1cm4gcjtcXG42MTc0OlxcdH1cXG42MTc1OlxcdEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbik7XFxuNjE3NjpcXHRcXG42MTc3OlxcdHN0YXRpYyBib29sIGt2bV9pc19jb2RlX2JyZWFrcG9pbnRfaW5oaWJpdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG42MTc4OlxcdHtcXG42MTc5OlxcdFxcdGlmICh2Y3B1LVxcdTAwM2VndWVzdF9kZWJ1ZyBcXHUwMDI2IEtWTV9HVUVTVERCR19VU0VfSFdfQlApXFxuNjE4MDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNjE4MTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTk6NTA6MzUuMDk0MjIwNTc4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNzU5MzkxMzU2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0gRGVidWdnaW5nIEZsb3cqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgS1ZNIGRlYnVnZ2luZyBwcm9jZXNzIHdvcmtzLCBzcGVjaWZpY2FsbHkgaG93IGFuIGVtdWxhdGVkIGRlYnVnIGV2ZW50IGdldHMgaW5qZWN0ZWQuIEknbSByZWNhbGxpbmcgdGhhdCBga3ZtX2luamVjdF9lbXVsYXRlZF9kYmAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSBpdCdzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgYHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uYCB0byBgS1ZNX0VYSVRfREVCVUdgLiBBIHJldHVybiB2YWx1ZSBvZiAwIGZyb20gdGhpcyBmdW5jdGlvbiB3b3VsZCB0aGVuIHRyaWdnZXIgYW4gZXhpdCBiYWNrIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgY29uc2lzdGVudCB3aXRoIGhvdyB3ZSBoYW5kbGUgdGhlc2UgZGVidWcgc2l0dWF0aW9ucy5cblxuVGhlcmVmb3JlLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGBrdm1faW5qZWN0X2VtdWxhdGVkX2RiYCBmdW5jdGlvbiBhbmQgY29uZmlybSB3aGV0aGVyIGl0IGlzIGluZGVlZCBiZWhhdmluZyBhcyBJIGV4cGVjdC4gSXQncyB0aW1lIHRvIGNoZWNrIHRoZSBjb2RlIGFuZCBzZWUgZXhhY3RseSB3aGF0J3MgZ29pbmcgb24gd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBjaXJjdW1zdGFuY2VzIGFuZCB0aGUgcGF0aCB0byB0aGF0IGBLVk1fRVhJVF9ERUJVR2AgZXhpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MzAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE5OjUyOjUyLjY4ODEzNjM2OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk2MjMyOTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBrdm1faW5qZWN0X2VtdWxhdGVkX2RiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9NTg0Nj1zdGF0aWMgdm9pZCB0b2dnbGVfaW50ZXJydXB0aWJpbGl0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtYXNrKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTU4NjQtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjU4NjU6c3RhdGljIGludCBrdm1faW5qZWN0X2VtdWxhdGVkX2RiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBkcjYpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTU4NjYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxOTo1Mjo1My4wODQzNzI1ODJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyNTE4OTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGBrdm1faW5qZWN0X2VtdWxhdGVkX2RiYDpcblxuKipEaXZpbmcgaW50byBga3ZtX2luamVjdF9lbXVsYXRlZF9kYmAqKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBrdm1faW5qZWN0X2VtdWxhdGVkX2RiYCBmdW5jdGlvbi4gSW5zdGFudGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIEtWTSBhbmQgaG93IGl0J3MgbWFuYWdpbmcgZXhjZXB0aW9ucy4gSSdtIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGludm9sdmVkIGluIGluamVjdGluZyBhIGRlYnVnIGV4Y2VwdGlvbiBpbnRvIGEgZ3Vlc3QgVk0sIGJ1dCBJIG5lZWQgdG8gc2VlIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gdG8gY29uZmlybSB0aGUgbmF0dXJlIG9mIHRoZSBzcGVjaWZpYyBcImRlYnVnXCIgYWN0aW9uLiBJcyBpdCBlbXVsYXRpbmcgYSBoYXJkd2FyZSBkZWJ1ZyBldmVudD8gT3IgaXMgaXQgYSBzb2Z0d2FyZSB0cmlnZ2VyP1xuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOiBob3cgdGhlIGluamVjdGVkIGRlYnVnIGV2ZW50IGlzIGNvbnN0cnVjdGVkLCB3aGVyZSB0aGUgY29udGV4dCBjb21lcyBmcm9tLCB3aGF0IGl0J3MgdHJ5aW5nIHRvIGRvLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdOKAmXMgbW9kaWZ5aW5nIGd1ZXN0IHJlZ2lzdGVyIHN0YXRlLCBtYW5pcHVsYXRpbmcgdGhlIGludGVycnVwdCB2ZWN0b3IsIG9yIHNpbXVsYXRpbmcgYSBzcGVjaWZpYyBjb25kaXRpb24gdGhhdCB0aGUgZ3Vlc3QncyBkZWJ1ZyByZWdpc3RlcnMgd291bGQgb3RoZXJ3aXNlIGNhdXNlLiBJJ2xsIG5lZWQgdG8gZm9sbG93IHRoZSBleGVjdXRpb24gZmxvdyB3aXRoaW4gdGhlIGZ1bmN0aW9uIHRvIGFzc2VzcyBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gVGhlIGtleSB3aWxsIGJlIHRvIGlkZW50aWZ5IHRoZSBwcmVjaXNlIG1lY2hhbmlzbXMgdXNlZCB0byBpbnRlZ3JhdGUgdGhlIGluamVjdGVkIGV2ZW50IGludG8gdGhlIGd1ZXN0J3MgZXhlY3V0aW9uLiBBbmQgd2hhdCdzIGJlaW5nIGRvbmUgaGVyZSB0byBzYWZlbHkgZG8gdGhhdCwgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHJ1bm5pbmcgVk0uIEkgYW50aWNpcGF0ZSBzb21lIGNyaXRpY2FsIHNlY3Rpb24gaGFuZGxpbmcgZm9yIHRocmVhZCBzYWZldHkgdG9vOyBLVk0gaXMgZ2VuZXJhbGx5IHZlcnkgY2FyZWZ1bCBhYm91dCB0aGF0LiBUaGlzIHNlZW1zIGxpa2UgYSBmdW5jdGlvbiB0aGF0IHJlcXVpcmVzIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBoYXJkd2FyZSwgdGhlIGFyY2hpdGVjdHVyZSwgYW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIEtWTSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyOTMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxOTo1Mjo1Ni44MDk1NjQxMTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAwNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1ODY1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1ODY1OlxcdHN0YXRpYyBpbnQga3ZtX2luamVjdF9lbXVsYXRlZF9kYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZHI2KVxcbjU4NjY6XFx0e1xcbjU4Njc6XFx0XFx0c3RydWN0IGt2bV9ydW4gKmt2bV9ydW4gPSB2Y3B1LVxcdTAwM2VydW47XFxuNTg2ODpcXHRcXG41ODY5OlxcdFxcdGlmICh2Y3B1LVxcdTAwM2VndWVzdF9kZWJ1ZyBcXHUwMDI2IChLVk1fR1VFU1REQkdfVVNFX0hXX0JQIHwgS1ZNX0dVRVNUREJHX1NJTkdMRVNURVApKSB7XFxuNTg3MDpcXHRcXHRcXHRrdm1fcnVuLVxcdTAwM2VkZWJ1Zy5hcmNoLmRyNiA9IGRyNiB8IERSNl9BQ1RJVkVfTE9XO1xcbjU4NzE6XFx0XFx0XFx0a3ZtX3J1bi1cXHUwMDNlZGVidWcuYXJjaC5wYyA9IGt2bV9nZXRfbGluZWFyX3JpcCh2Y3B1KTtcXG41ODcyOlxcdFxcdFxcdGt2bV9ydW4tXFx1MDAzZWRlYnVnLmFyY2guZXhjZXB0aW9uID0gREJfVkVDVE9SO1xcbjU4NzM6XFx0XFx0XFx0a3ZtX3J1bi1cXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9ERUJVRztcXG41ODc0OlxcdFxcdFxcdHJldHVybiAwO1xcbjU4NzU6XFx0XFx0fVxcbjU4NzY6XFx0XFxuNTg3NzpcXHRcXHRrdm1fcXVldWVfZXhjZXB0aW9uX3AodmNwdSwgREJfVkVDVE9SLCBkcjYpO1xcbjU4Nzg6XFx0XFx0cmV0dXJuIDE7XFxuNTg3OTpcXHR9XFxuNTg4MDpcXHRcXG41ODgxOlxcdHN0YXRpYyBpbnQgaW5qZWN0X2VtdWxhdGVkX2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuNTg4MjpcXHR7XFxuNTg4MzpcXHRcXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZXggPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5lbXVsYXRlX2N0eHQtXFx1MDAzZWV4Y2VwdGlvbjtcXG41ODg0OlxcdFxcbjU4ODU6XFx0XFx0aWYgKGV4LVxcdTAwM2V2ZWN0b3IgPT0gREJfVkVDVE9SKVxcbjU4ODY6XFx0XFx0XFx0cmV0dXJuIGt2bV9pbmplY3RfZW11bGF0ZWRfZGIodmNwdSwgZXgtXFx1MDAzZWRyNik7XFxuNTg4NzpcXHRcXG41ODg4OlxcdFxcdGlmIChleC1cXHUwMDNldmVjdG9yID09IFBGX1ZFQ1RPUilcXG41ODg5OlxcdFxcdFxcdGt2bV9pbmplY3RfZW11bGF0ZWRfcGFnZV9mYXVsdCh2Y3B1LCBleCk7XFxuNTg5MDpcXHRcXHRlbHNlIGlmIChleC1cXHUwMDNlZXJyb3JfY29kZV92YWxpZClcXG41ODkxOlxcdFxcdFxcdGt2bV9xdWV1ZV9leGNlcHRpb25fZSh2Y3B1LCBleC1cXHUwMDNldmVjdG9yLCBleC1cXHUwMDNlZXJyb3JfY29kZSk7XFxuNTg5MjpcXHRcXHRlbHNlXFxuNTg5MzpcXHRcXHRcXHRrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIGV4LVxcdTAwM2V2ZWN0b3IpO1xcbjU4OTQ6XFx0XFx0cmV0dXJuIDE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE5OjUyOjU2LjgxMDE2NjI4MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDUwMDkxODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEltcGFjdCBvZiBhIEtWTSBQYXRjaCoqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIHRoaXMgcGF0Y2ggYW5kIHdoYXQncyBnb2luZyBvbiBpbiBteSBoZWFkIGFzIEkgY29uc2lkZXIgaXQuIEkgc2VlIHRoYXQgYGt2bV9pbmplY3RfZW11bGF0ZWRfZGJgIGlzIGNvcnJlY3RseSBzZXR0aW5nIGBrdm1fcnVuLVx1MDAzZWV4aXRfcmVhc29uYCB0byBgS1ZNX0VYSVRfREVCVUdgIGFuZCByZXR1cm5pbmcgMC4gVGhhdCdzIGV4cGVjdGVkIGJlaGF2aW9yLiBUaGVuIHdlJ3ZlIGdvdCBga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb25gIGFsc28gcmV0dXJuaW5nIDAsIGFuZCBmaW5hbGx5LCBga3ZtX2VtdWxhdGVfaGFsdGAgZ2V0dGluZyBhIHJldHVybiB2YWx1ZSBvZiBgcmV0ID0gMGAuXG5cblRoZSBrZXkgZGlmZmVyZW5jZSBoZXJlIGlzIGhvdyBga3ZtX2VtdWxhdGVfaGFsdGAgaXMgYmVoYXZpbmcgKmFmdGVyKiB0aGUgcGF0Y2guIEJlZm9yZSwgaXQgd2FzIGNhbGxpbmcgYGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwYCBhbmQgQU5EaW5nIHRoZSByZXN1bHRzLiBDcml0aWNhbGx5LCBga3ZtX2VtdWxhdGVfaGFsdF9ub3NraXBgIHdvdWxkIG92ZXJ3cml0ZSB0aGUgYGV4aXRfcmVhc29uYCBzZXQgZWFybGllciwgcG90ZW50aWFsbHkgY2hhbmdpbmcgYEtWTV9FWElUX0RFQlVHYCB0byBgS1ZNX0VYSVRfSExUYCBvciBzaW1pbGFyLiBOb3csIHRoZSBwYXRjaCAqcHJlc2VydmVzKiBgS1ZNX0VYSVRfREVCVUdgIGlmIGl0IHdhcyBhbHJlYWR5IHNldC4gSWYgYHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID09IEtWTV9FWElUX0RFQlVHYCwgaXQgaW1tZWRpYXRlbHkgcmV0dXJucyBgcmV0YCwgc28gdGhlIGRlYnVnIGV4aXQgcmVhc29uIGlzIG1haW50YWluZWQuXG5cblRoaXMgaXMgYSAqKmRlZmluaXRlKiogZnVuY3Rpb25hbCBjaGFuZ2UuIFRoaXMgYWx0ZXJhdGlvbiBvZiB0aGUgZXhpdCByZWFzb24gaGFuZGxpbmcgd2FycmFudHMgdGhvcm91Z2ggZnV6emluZy4gTXkgbWFpbiBmb2N1cyBzeW1ib2wgaGVyZSB3aWxsIGJlIGBrdm1fZW11bGF0ZV9oYWx0YCwgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhlIGNyaXRpY2FsIGxvZ2ljIHNoaWZ0IG9jY3VycmVkLiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmdXp6aW5nIGhhcm5lc3NlcyB0YXJnZXQgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBhbmQgdGhlIGNvZGUgcGF0aHMgdGhhdCBpbnRlcmFjdCB3aXRoIGl0LlxuXG5JJ20gYWxzbyB0aGlua2luZyBhYm91dCB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBhZmZlY3QgdGhpcy4gT2J2aW91c2x5LCBgS1ZNYCBpcyB0aGUgcHJpbWFyeSBvbmUsIGJ1dCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZm9yIGFueSBvdGhlciByZWxldmFudCBzZXR0aW5ncy4gYENPTkZJR19LVk1gIGl0c2VsZiBpcyBnZW5lcmFsbHkgZW5hYmxlZCwgc28gSSdsbCBuZWVkIHRvIGludmVzdGlnYXRlIHRoYXQgY2FyZWZ1bGx5LCBhbmQgaXQncyBhIGJvb2xlYW4gb3IgdHJpc3RhdGUsIHNvIEknbGwga2VlcCB0aGF0IGluIG1pbmQuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBNeSBmdXp6aW5nIHN0cmF0ZWd5IHdpbGwgbmVlZCB0byBjb3ZlciBhbGwgcG9zc2libGUgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjI5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTk6NTM6MDIuODYwMjU5OTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MTcyNzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMwLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMyOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTk6NTM6MDIuOTI1NDM1MzY5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4Mjc4MDQyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS1ZNIEJ1ZyBGaXggYW5kIERlZmluaW5nIGEgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2gsIGFuZCBpdCBsb29rcyBsaWtlIGEgcHJldHR5IHNwZWNpZmljIGZpeCB3aXRoaW4gdGhlIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGl0J3MgYWJvdXQgYGt2bV9lbXVsYXRlX2hhbHRgLiBUaGUgYnVnIGlzIHRoYXQgYGt2bV9lbXVsYXRlX2hhbHRgIHdhcyBpbmNvcnJlY3RseSBvdmVyd3JpdGluZyB0aGUgYEtWTV9FWElUX0RFQlVHYCBleGl0IHJlYXNvbiB3aXRoIGBLVk1fRVhJVF9ITFRgIHVuZGVyIGNlcnRhaW4gc2luZ2xlLXN0ZXAgZGVidWdnaW5nIGNvbmRpdGlvbnMgZHVyaW5nIGFuIGluc3RydWN0aW9uIHNraXAuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBmdXp6aW5nLCBhcyBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHRoZSBlbXVsYXRvciBiZWhhdmVzLiBUaGUgcmVsZXZhbnQgY29uZmlnIGhlcmUgaXMgYEtWTWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBrdm1fZW11bGF0ZV9oYWx0YCBhcyB0aGUgZm9jdXMgc3ltYm9sLiBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGV4ZWN1dGlvbiBmbG93LiBBaCwgcmlnaHQsIGl0J3MgY2FsbGVkIHdoZW4gYSBndWVzdCBleGVjdXRlcyBhbiBITFQgaW5zdHJ1Y3Rpb24uIFRoYXQgY291bGQgaGFwcGVuIGZyZXF1ZW50bHksIGVzcGVjaWFsbHkgaWYgdGhlIGd1ZXN0IGlzIGlkbGluZywgYnV0IGl0J3MgYW4gZXhpdCBoYW5kbGVyLCBub3Qgc29tZXRoaW5nIGxpa2UgYGt2bV92Y3B1X3J1bmAuIFRoYXQgbWVhbnMgaXQncyBzcGVjaWZpYyBlbm91Z2ggdG8gYmUgY29uc2lkZXJlZCBhIHZhbHVhYmxlIGZvY3VzIHN5bWJvbC4gSSdtIG5vdCBzZWVpbmcgYW55IG90aGVyIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCB3aXRoIHRoaXMgcGF0Y2gsIHdoaWNoIHJlaW5mb3JjZXMgbXkgZGVjaXNpb24uXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXMuIEknbGwgZ2V0IHRoZSByZXN1bHRzIHNldCB1cCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjM4LCJPdXRwdXRUb2tlbnMiOjEyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxOTo1MzowOS43NTMyNDEzOTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODUxNjI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2VtdWxhdGVfaGFsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIHdoZXJlIGBrdm1fZW11bGF0ZV9oYWx0YCB3b3VsZCBvdmVyd3JpdGUgdGhlIGBLVk1fRVhJVF9ERUJVR2AgZXhpdCByZWFzb24gd2l0aCBgS1ZNX0VYSVRfSExUYCBpZiBhIHNpbmdsZS1zdGVwIGRlYnVnIGV4Y2VwdGlvbiB3YXMgdHJpZ2dlcmVkIGR1cmluZyB0aGUgc2tpcCBvZiB0aGUgZW11bGF0ZWQgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2VtdWxhdGVfaGFsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIHdoZXJlIGBrdm1fZW11bGF0ZV9oYWx0YCB3b3VsZCBvdmVyd3JpdGUgdGhlIGBLVk1fRVhJVF9ERUJVR2AgZXhpdCByZWFzb24gd2l0aCBgS1ZNX0VYSVRfSExUYCBpZiBhIHNpbmdsZS1zdGVwIGRlYnVnIGV4Y2VwdGlvbiB3YXMgdHJpZ2dlcmVkIGR1cmluZyB0aGUgc2tpcCBvZiB0aGUgZW11bGF0ZWQgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowpl6tk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-09 19:27:51 +0000 UTC FinishedAt: 2026-07-09 19:53:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "37f6eb61-de7a-444c-9d89-6020e8948bd1" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_emulate_halt" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA5IDE5OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9lbXVsYXRlX2hhbHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gd2hlcmUgYGt2bV9lbXVsYXRlX2hhbHRgIHdvdWxkIG92ZXJ3cml0ZSB0aGUgYEtWTV9FWElUX0RFQlVHYCBleGl0IHJlYXNvbiB3aXRoIGBLVk1fRVhJVF9ITFRgIGlmIGEgc2luZ2xlLXN0ZXAgZGVidWcgZXhjZXB0aW9uIHdhcyB0cmlnZ2VyZWQgZHVyaW5nIHRoZSBza2lwIG9mIHRoZSBlbXVsYXRlZCBpbnN0cnVjdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxOTo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA4ODc4ZDdjYTVjZDZiOWZhMzg3ZjllNThlYzFmODNkMjM2MmIzOWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCA5IDE5OjQ5OjUxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggMDYyNmU4MzVlOWViNzcuLjJmZDZhZDQ5MDUwYzcxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC04NjU4LDEwICYjNDM7ODY1OCwxNiBAQCBFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2VtdWxhdGVfaGFsdF9ub3NraXApO1xuIGludCBrdm1fZW11bGF0ZV9oYWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRpbnQgcmV0ID0ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG4mIzQzO1xuIFx0Lypcbi1cdCAqIFRPRE86IHdlIG1pZ2h0IGJlIHNxdWFzaGluZyBhIEdVRVNUREJHX1NJTkdMRVNURVAtdHJpZ2dlcmVkXG4tXHQgKiBLVk1fRVhJVF9ERUJVRyBoZXJlLlxuJiM0MztcdCAqIElmIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCkgdHJpZ2dlcmVkIGEgc2luZ2xlc3RlcFxuJiM0MztcdCAqIGRlYnVnIGV4Y2VwdGlvbiwgcmV0dXJuIHRvIHVzZXJzcGFjZSBpbW1lZGlhdGVseSBzbyB0aGVcbiYjNDM7XHQgKiBkZWJ1Z2dlciBjYW4gcHJvY2VzcyB0aGUgZXZlbnQuIERvIG5vdCBsZXQgaGFsdCBlbXVsYXRpb25cbiYjNDM7XHQgKiBvdmVyd3JpdGUgdGhlIEtWTV9FWElUX0RFQlVHIGV4aXQgcmVhc29uLlxuIFx0ICovXG4mIzQzO1x0aWYgKHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID09IEtWTV9FWElUX0RFQlVHKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4gXHRyZXR1cm4ga3ZtX2VtdWxhdGVfaGFsdF9ub3NraXAodmNwdSkgXHUwMDI2XHUwMDI2IHJldDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9lbXVsYXRlX2hhbHQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE5OjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9lbXVsYXRlX2hhbHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gd2hlcmUgYGt2bV9lbXVsYXRlX2hhbHRgIHdvdWxkIG92ZXJ3cml0ZSB0aGUgYEtWTV9FWElUX0RFQlVHYCBleGl0IHJlYXNvbiB3aXRoIGBLVk1fRVhJVF9ITFRgIGlmIGEgc2luZ2xlLXN0ZXAgZGVidWcgZXhjZXB0aW9uIHdhcyB0cmlnZ2VyZWQgZHVyaW5nIHRoZSBza2lwIG9mIHRoZSBlbXVsYXRlZCBpbnN0cnVjdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDg4NzhkN2NhNWNkNmI5ZmEzODdmOWU1OGVjMWY4M2QyMzYyYjM5YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDkgMTk6NDk6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggMDYyNmU4MzVlOWViNzcuLjJmZDZhZDQ5MDUwYzcxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jCkBAIC04NjU4LDEwICYjNDM7ODY1OCwxNiBAQCBFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2VtdWxhdGVfaGFsdF9ub3NraXApOwogaW50IGt2bV9lbXVsYXRlX2hhbHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCWludCByZXQgPSBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKJiM0MzsKIAkvKgotCSAqIFRPRE86IHdlIG1pZ2h0IGJlIHNxdWFzaGluZyBhIEdVRVNUREJHX1NJTkdMRVNURVAtdHJpZ2dlcmVkCi0JICogS1ZNX0VYSVRfREVCVUcgaGVyZS4KJiM0MzsJICogSWYga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oKSB0cmlnZ2VyZWQgYSBzaW5nbGVzdGVwCiYjNDM7CSAqIGRlYnVnIGV4Y2VwdGlvbiwgcmV0dXJuIHRvIHVzZXJzcGFjZSBpbW1lZGlhdGVseSBzbyB0aGUKJiM0MzsJICogZGVidWdnZXIgY2FuIHByb2Nlc3MgdGhlIGV2ZW50LiBEbyBub3QgbGV0IGhhbHQgZW11bGF0aW9uCiYjNDM7CSAqIG92ZXJ3cml0ZSB0aGUgS1ZNX0VYSVRfREVCVUcgZXhpdCByZWFzb24uCiAJICovCiYjNDM7CWlmICh2Y3B1LSZndDtydW4tJmd0O2V4aXRfcmVhc29uID09IEtWTV9FWElUX0RFQlVHKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKIAlyZXR1cm4ga3ZtX2VtdWxhdGVfaGFsdF9ub3NraXAodmNwdSkgJmFtcDsmYW1wOyByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2VtdWxhdGVfaGFsdCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gSGFsdCBFbXVsYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBrdm1fZW11bGF0ZV9oYWx0YCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gSXQmIzM5O3MgcHJldHR5IGZvY3VzZWQ7IHRoZSBrZXkgaXMgdGhlIGFkZGVkIGNvbmRpdGlvbmFsLiBUaGUgbG9naWMgZmxvdyBpcyBjbGVhcmx5IGRlc2lnbmVkIHRvIHNob3J0LWNpcmN1aXQgdGhlIHVzdWFsIGBoYWx0YCBlbXVsYXRpb24uIEkmIzM5O20gc2VlaW5nIHRoYXQgYWZ0ZXIgYGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpYCwgdGhleSYjMzk7dmUgaW5zZXJ0ZWQgYSBjaGVjazogYHZjcHUtJmd0O3J1bi0mZ3Q7ZXhpdF9yZWFzb24gPT0gS1ZNX0VYSVRfREVCVUdgLiAgSWYgdGhlIGBleGl0X3JlYXNvbmAgKmlzKiBgS1ZNX0VYSVRfREVCVUdgLCB0aGUgZnVuY3Rpb24gYmFpbHMgb3V0IGVhcmx5LCBpbW1lZGlhdGVseSByZXR1cm5pbmcgYHJldGAuIEluc3RlYWQgb2YgdGhlIHN0YW5kYXJkIHBhdGgsIHdoaWNoIHdvdWxkIGNhbGwgYGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwKHZjcHUpYC4gVGhlIGdvYWwgaXMgY2xlYXJseSB0byBoYW5kbGUgZGVidWcgZXhpdHMgZGlmZmVyZW50bHksIHNraXBwaW5nIHBhcnRzIG9mIHRoZSBzdGFuZGFyZCBoYWx0IGVtdWxhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXkgd2FudCB0byBieXBhc3MgYGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwYCB1bmRlciBhIGRlYnVnIGV4aXQgY29uZGl0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB1bmRlcnN0YW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgZm9yIGhhbHRpbmcgYW5kIGRlYnVnZ2luZyBLVk0gZ3Vlc3RzIGluIHRoaXMgc2NlbmFyaW8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2VtdWxhdGVfaGFsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmM9ODU4MT1zdGF0aWMgaW50IHZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtODYzMC1cbmFyY2gveDg2L2t2bS94ODYuYzo4NjMxOnN0YXRpYyBpbnQgX19rdm1fZW11bGF0ZV9oYWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHN0YXRlLCBpbnQgcmVhc29uKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2MzIte1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04NjUxLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NTI6aW50IGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ODYuYy04NjUzLXtcbmFyY2gveDg2L2t2bS94ODYuYzo4NjU0Olx0cmV0dXJuIF9fa3ZtX2VtdWxhdGVfaGFsdCh2Y3B1LCBLVk1fTVBfU1RBVEVfSEFMVEVELCBLVk1fRVhJVF9ITFQpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NTUtfVxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NTY6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwKTtcbmFyY2gveDg2L2t2bS94ODYuYy04NjU3LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NTg6aW50IGt2bV9lbXVsYXRlX2hhbHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NTkte1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04NjcwLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NzE6XHRyZXR1cm4ga3ZtX2VtdWxhdGVfaGFsdF9ub3NraXAodmNwdSkgXHUwMDI2XHUwMDI2IHJldDtcbmFyY2gveDg2L2t2bS94ODYuYy04NjcyLX1cbmFyY2gveDg2L2t2bS94ODYuYzo4NjczOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZW11bGF0ZV9oYWx0KTtcbmFyY2gveDg2L2t2bS94ODYuYy04Njc0LVxuYXJjaC94ODYva3ZtL3g4Ni5jPTg2NzU9ZmFzdHBhdGhfdCBoYW5kbGVfZmFzdHBhdGhfaGx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY3OS1cbmFyY2gveDg2L2t2bS94ODYuYzo4NjgwOlx0aWYgKCFrdm1fZW11bGF0ZV9oYWx0KHZjcHUpKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2ODEtXHRcdHJldHVybiBFWElUX0ZBU1RQQVRIX0VYSVRfVVNFUlNQQUNFO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz04NjkwPWludCBrdm1fZW11bGF0ZV9hcF9yZXNldF9ob2xkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY5My1cbmFyY2gveDg2L2t2bS94ODYuYzo4Njk0Olx0cmV0dXJuIF9fa3ZtX2VtdWxhdGVfaGFsdCh2Y3B1LCBLVk1fTVBfU1RBVEVfQVBfUkVTRVRfSE9MRCxcbmFyY2gveDg2L2t2bS94ODYuYy04Njk1LVx0XHRcdFx0XHRLVk1fRVhJVF9BUF9SRVNFVF9IT0xEKSBcdTAwMjZcdTAwMjYgcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyOTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBga3ZtX2VtdWxhdGVfaGFsdGAgQ2FsbHNpdGVzKioKCkFscmlnaHQsIHNvIGBrdm1fZW11bGF0ZV9oYWx0YCBpcyBleHBvcnRlZC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBzb21ldGhpbmcgaW1wb3J0YW50LCBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgS1ZNIG9wZXJhdGlvbnMuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgY2FsbGVkIGludGVybmFsbHkgbWVhbnMgaXQmIzM5O3MgY29yZSB0byB0aGUgdmlydHVhbGl6YXRpb24gcHJvY2Vzcywgbm90IHNvbWUgcGVyaXBoZXJhbCBtb2R1bGUuCgpJIHJlY2FsbCBzZWVpbmcgaXQgdXNlZCBpbiBgaGFuZGxlX2Zhc3RwYXRoX2hsdGAuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaGludCB0aGF0IGl0IGhhbmRsZXMgdGhlIGZhc3QtcGF0aCBITFQgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UuIE5vdywgc2luY2UgaXQmIzM5O3MgdXNlZCB3aXRoIGBWTVgvU1ZNIGhhbmRsZXJzYCwgd2hpY2ggYXJlIHg4NiB2aXJ0dWFsaXphdGlvbiB0ZWNobm9sb2dpZXMsIHRoZSBmdW5jdGlvbiBwcm9iYWJseSBkZWFscyB3aXRoIHRoZSBjb3JlIGVtdWxhdGlvbiBvZiBITFQgaW5zdHJ1Y3Rpb25zIHdoZW4gdGhlIGd1ZXN0IHRyaWdnZXJzIHRoZW0uCgpMZXQmIzM5O3MgZHJpbGwgZG93biBhbmQgc2VlICpleGFjdGx5KiB3aGVyZSBga3ZtX2VtdWxhdGVfaGFsdGAgaXMgY2FsbGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBwcmVjaXNlIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgS1ZNIGFyY2hpdGVjdHVyZSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGh5cGVydmlzb3IgY29tcG9uZW50cy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHVuZXhwZWN0ZWQgY2FsbCBzaXRlcyB0aGF0IHdvdWxkIGJlIHVuZXhwZWN0ZWQsIG9yIHBlcmhhcHMgZXZlbiBpbmRpY2F0ZSBhIHBvdGVudGlhbCBidWcuIFRpbWUgdG8gZGlnIGluIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE5OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9lbXVsYXRlX2hhbHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MzMzMj1zdGF0aWMgaW50ICgqY29uc3Qgc3ZtX2V4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTMzNzMtXHRbU1ZNX0VYSVRfUEFVU0VdXHRcdFx0PSBwYXVzZV9pbnRlcmNlcHRpb24sXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjMzNzQ6XHRbU1ZNX0VYSVRfSExUXVx0XHRcdFx0PSBrdm1fZW11bGF0ZV9oYWx0LFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMzc1LVx0W1NWTV9FWElUX0lOVkxQR11cdFx0XHQ9IGludmxwZ19pbnRlcmNlcHRpb24sXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMzk4LVx0W1NWTV9FWElUX0lOVlBDSURdICAgICAgICAgICAgICAgICAgICAgID0gaW52cGNpZF9pbnRlcmNlcHRpb24sXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjMzOTk6XHRbU1ZNX0VYSVRfSURMRV9ITFRdXHRcdFx0PSBrdm1fZW11bGF0ZV9oYWx0LFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDAwLVx0W1NWTV9FWElUX05QRl1cdFx0XHRcdD0gbnBmX2ludGVyY2VwdGlvbixcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM2MjA9aW50IHN2bV9pbnZva2VfZXhpdF9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IF9fZXhpdF9jb2RlKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzY0My1cdGVsc2UgaWYgKGV4aXRfY29kZSA9PSBTVk1fRVhJVF9ITFQgfHwgZXhpdF9jb2RlID09IFNWTV9FWElUX0lETEVfSExUKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNjQ0Olx0XHRyZXR1cm4ga3ZtX2VtdWxhdGVfaGFsdCh2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzY0NS1cdGVsc2UgaWYgKGV4aXRfY29kZSA9PSBTVk1fRVhJVF9OUEYpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNzg3PXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxhdW5jaClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4OTctXHRcdFx0dmNwdS1cdTAwM2VhcmNoLm5lc3RlZF9ydW5fcGVuZGluZyA9IDA7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM4OTg6XHRcdFx0cmV0dXJuIGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwKHZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODk5LVx0XHR9XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0yMDQ0PWludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjEwMS1cdGNhc2UgRVhJVF9SRUFTT05fSExUOlxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoyMTAyOlx0XHRyZXR1cm4ga3ZtX2VtdWxhdGVfaGFsdF9ub3NraXAodmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTIxMDMtXHRjYXNlIEVYSVRfUkVBU09OX1REQ0FMTDpcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTUzMjU9c3RhdGljIGludCBoYW5kbGVfcm1vZGVfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTUzMzUtXHRcdFx0XHR2Y3B1LVx1MDAzZWFyY2guaGFsdF9yZXF1ZXN0ID0gMDtcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NTMzNjpcdFx0XHRcdHJldHVybiBrdm1fZW11bGF0ZV9oYWx0X25vc2tpcCh2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTMzNy1cdFx0XHR9XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz02MDY0PXN0YXRpYyBpbnQgaGFuZGxlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjA5Ni1cdFx0XHR2Y3B1LVx1MDAzZWFyY2guaGFsdF9yZXF1ZXN0ID0gMDtcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjA5NzpcdFx0XHRyZXR1cm4ga3ZtX2VtdWxhdGVfaGFsdF9ub3NraXAodmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYwOTgtXHRcdH1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTYzMzM9c3RhdGljIGludCAoKmt2bV92bXhfZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0ge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjM0NC1cdFtFWElUX1JFQVNPTl9JTlRFUlJVUFRfV0lORE9XXSAgICAgICAgPSBoYW5kbGVfaW50ZXJydXB0X3dpbmRvdyxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjM0NTpcdFtFWElUX1JFQVNPTl9ITFRdICAgICAgICAgICAgICAgICAgICAgPSBrdm1fZW11bGF0ZV9oYWx0LFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MzQ2LVx0W0VYSVRfUkVBU09OX0lOVkRdXHRcdCAgICAgID0ga3ZtX2VtdWxhdGVfaW52ZCxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTY3MTI9c3RhdGljIGludCBfX3ZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY4NTItXHRlbHNlIGlmIChleGl0X3JlYXNvbi5iYXNpYyA9PSBFWElUX1JFQVNPTl9ITFQpXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjY4NTM6XHRcdHJldHVybiBrdm1fZW11bGF0ZV9oYWx0KHZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC92bXguYy02ODU0LVx0ZWxzZSBpZiAoZXhpdF9yZWFzb24uYmFzaWMgPT0gRVhJVF9SRUFTT05fRVBUX01JU0NPTkZJRylcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODU4MT1zdGF0aWMgaW50IHZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtODYzMC1cbmFyY2gveDg2L2t2bS94ODYuYzo4NjMxOnN0YXRpYyBpbnQgX19rdm1fZW11bGF0ZV9oYWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHN0YXRlLCBpbnQgcmVhc29uKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2MzIte1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04NjUxLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NTI6aW50IGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ODYuYy04NjUzLXtcbmFyY2gveDg2L2t2bS94ODYuYzo4NjU0Olx0cmV0dXJuIF9fa3ZtX2VtdWxhdGVfaGFsdCh2Y3B1LCBLVk1fTVBfU1RBVEVfSEFMVEVELCBLVk1fRVhJVF9ITFQpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NTUtfVxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NTY6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwKTtcbmFyY2gveDg2L2t2bS94ODYuYy04NjU3LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NTg6aW50IGt2bV9lbXVsYXRlX2hhbHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NTkte1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04NjcwLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NzE6XHRyZXR1cm4ga3ZtX2VtdWxhdGVfaGFsdF9ub3NraXAodmNwdSkgXHUwMDI2XHUwMDI2IHJldDtcbmFyY2gveDg2L2t2bS94ODYuYy04NjcyLX1cbmFyY2gveDg2L2t2bS94ODYuYzo4NjczOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZW11bGF0ZV9oYWx0KTtcbmFyY2gveDg2L2t2bS94ODYuYy04Njc0LVxuYXJjaC94ODYva3ZtL3g4Ni5jPTg2NzU9ZmFzdHBhdGhfdCBoYW5kbGVfZmFzdHBhdGhfaGx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY3OS1cbmFyY2gveDg2L2t2bS94ODYuYzo4NjgwOlx0aWYgKCFrdm1fZW11bGF0ZV9oYWx0KHZjcHUpKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2ODEtXHRcdHJldHVybiBFWElUX0ZBU1RQQVRIX0VYSVRfVVNFUlNQQUNFO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz04NjkwPWludCBrdm1fZW11bGF0ZV9hcF9yZXNldF9ob2xkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY5My1cbmFyY2gveDg2L2t2bS94ODYuYzo4Njk0Olx0cmV0dXJuIF9fa3ZtX2VtdWxhdGVfaGFsdCh2Y3B1LCBLVk1fTVBfU1RBVEVfQVBfUkVTRVRfSE9MRCxcbmFyY2gveDg2L2t2bS94ODYuYy04Njk1LVx0XHRcdFx0XHRLVk1fRVhJVF9BUF9SRVNFVF9IT0xEKSBcdTAwMjZcdTAwMjYgcmV0O1xuLS1cbmFyY2gveDg2L2t2bS94ODYuaD00Nzc9aW50IGt2bV9lbXVsYXRlX2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2Lmg6NDc4OmludCBrdm1fZW11bGF0ZV9oYWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2Lmg6NDc5OmludCBrdm1fZW11bGF0ZV9oYWx0X25vc2tpcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5oLTQ4MC1pbnQga3ZtX2VtdWxhdGVfYXBfcmVzZXRfaG9sZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwODYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIYWx0IEVtdWxhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gdGhlIGNoYW5nZSBpcyBjbGVhcmx5IHdpdGhpbiBga3ZtX2VtdWxhdGVfaGFsdGAuIEl0JiMzOTtzIGRlZmluaXRlbHkgYWN0aXZlIGFuZCB0aGUgY29kZSBmbG93IGNhbiByZWFjaCBpdCwgd2hpY2ggaXMgdGhlIGZpcnN0IGdvb2Qgc2lnbi4gVGhpcyBpcyBzcGVjaWZpYyB0byBLVk0geDg2LCB3aGljaCBtYWtlcyBzZW5zZS4gQmVmb3JlIEkgZGlnIHRvbyBkZWVwLCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGNvbmZpcm0gdGhlIG9idmlvdXM6IGlzIEtWTSBlbmFibGVkPyBJJiMzOTtsbCBjaGVjayBmb3IgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhpcy4gS1ZNIGlzIHVzdWFsbHkgZW5hYmxlZCBhcyBhIGJhc2UgcGxhdGZvcm0uCgpSaWdodCwgdGhlIGZ1bmN0aW9uIGl0c2VsZiwgYGt2bV9lbXVsYXRlX2hhbHRgLCByZXNpZGVzIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBUaGF0JiMzOTtzIHRoZSBleHBlY3RlZCBsb2NhdGlvbi4KCkkmIzM5O20gZm9jdXNpbmcgb24gYGt2bV9lbXVsYXRlX2hhbHRgIGhlcmUuIE5vdywgc2luY2Ugd2UgYXJlIHRhbGtpbmcgYWJvdXQgZW11bGF0aW9uLCBsZXQgbWUgcXVpY2tseSBnbGFuY2UgYXQgYGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uYC4gSSB3YW50IHRvIGtub3cgaWYgdGhpcyBjaGFuZ2UgaGFzIGFueSBpbnRlcnBsYXkgd2l0aCB0aGUgYEtWTV9FWElUX0RFQlVHYCBleGl0IHJlYXNvbi4gV2UgZG9uJiMzOTt0IHdhbnQgdG8gbWlzcyBzb21ldGhpbmcgb2J2aW91cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2NwdWlkLmM9MjE2MT1pbnQga3ZtX2VtdWxhdGVfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9jcHVpZC5jLTIxNzYtXHRrdm1fZWR4X3dyaXRlKHZjcHUsIGVkeCk7XG5hcmNoL3g4Ni9rdm0vY3B1aWQuYzoyMTc3Olx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuYXJjaC94ODYva3ZtL2NwdWlkLmMtMjE3OC19XG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTIzOTE9c3RhdGljIGludCBrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJlc3VsdClcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjQwNS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoyNDA2Olx0cmV0ID0ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjQwNy1cbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jPTkyMz1zdGF0aWMgZmFzdHBhdGhfdCBfX2hhbmRsZV9mYXN0cGF0aF93cm1zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCBkYXRhKVxuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmMtOTQyLVxuYXJjaC94ODYva3ZtL21zcnMuYzo5NDM6XHRpZiAoIWt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpKVxuYXJjaC94ODYva3ZtL21zcnMuYy05NDQtXHRcdHJldHVybiBFWElUX0ZBU1RQQVRIX0VYSVRfVVNFUlNQQUNFO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MTk3Mz1zdGF0aWMgaW50IG5wZl9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjAwMy1cdFx0XHR0cmFjZV9rdm1fZmFzdF9tbWlvKGdwYSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjIwMDQ6XHRcdFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMDA1LVx0XHR9XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0yMjE5PXN0YXRpYyBpbnQgdm1sb2FkX3Ztc2F2ZV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHZtbG9hZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIyMzktXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjIyNDA6XHRyZXQgPSBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjI0MS1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTIzODY9c3RhdGljIGludCBzdGdpX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMzkyLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyMzkzOlx0cmV0ID0ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIzOTQtXHRzdm1fc2V0X2dpZih0b19zdm0odmNwdSksIHRydWUpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjM5OD1zdGF0aWMgaW50IGNsZ2lfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0MDQtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI0MDU6XHRyZXQgPSBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjQwNi1cdHN2bV9zZXRfZ2lmKHRvX3N2bSh2Y3B1KSwgZmFsc2UpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjQxMD1zdGF0aWMgaW50IGludmxwZ2FfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0MjMtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI0MjQ6XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0MjUtfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjUyOT1zdGF0aWMgaW50IGludmxwZ19pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjUzNC1cdGt2bV9tbXVfaW52bHBnKHZjcHUsIHRvX3N2bSh2Y3B1KS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzEpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNTM1Olx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNTM2LX1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTMyMzY9c3RhdGljIGludCBwYXVzZV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzI0OC1cdGt2bV92Y3B1X29uX3NwaW4odmNwdSwgaW5fa2VybmVsKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzI0OTpcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzI1MC19XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0xNTk9c3RhdGljIGludCBuZXN0ZWRfdm14X3N1Y2NlZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMTYzLVx0XHRcdCAgICBYODZfRUZMQUdTX1pGIHwgWDg2X0VGTEFHU19TRiB8IFg4Nl9FRkxBR1NfT0YpKTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MTY0Olx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0xNjUtfVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MTY3PXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9mYWlsSW52YWxpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0xNzItXHRcdFx0fCBYODZfRUZMQUdTX0NGKTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MTczOlx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0xNzQtfVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MTc2PXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9mYWlsVmFsaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMTkxLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoxOTI6XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTE5My19XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02MDU0PXN0YXRpYyBpbnQgaGFuZGxlX2ludnZwaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjEzMy1cdFx0V0FSTl9PTl9PTkNFKDEpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2MTM0Olx0XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTYxMzUtXHR9XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02MTg2PXN0YXRpYyBpbnQgaGFuZGxlX3ZtZnVuYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MjIyLVx0fVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2MjIzOlx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MjI0LVxuLS1cbmFyY2gveDg2L2t2bS92bXgvc2d4LmM9MTQxPXN0YXRpYyBpbnQgX19oYW5kbGVfZW5jbHNfZWNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9zZ3guYy0yMDktXHRpZiAoIXJldClcbmFyY2gveDg2L2t2bS92bXgvc2d4LmM6MjEwOlx0XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3NneC5jLTIxMS1cdGlmIChyZXQgPT0gLUVGQVVMVClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3NneC5jPTI5Nz1zdGF0aWMgaW50IGhhbmRsZV9lbmNsc19laW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9zZ3guYy0zNTUtXHRrdm1fZWF4X3dyaXRlKHZjcHUsIHJldCk7XG5hcmNoL3g4Ni9rdm0vdm14L3NneC5jOjM1NjpcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvc2d4LmMtMzU3LX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTU2NzI9c3RhdGljIGludCBoYW5kbGVfY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTcyOC1cdFx0XHR0cmFjZV9rdm1fY3JfcmVhZChjciwgdmFsKTtcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NTcyOTpcdFx0XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTU3MzAtXHRcdGNhc2UgODpcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTU3MzMtXHRcdFx0dHJhY2Vfa3ZtX2NyX3JlYWQoY3IsIHZhbCk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjU3MzQ6XHRcdFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC92bXguYy01NzM1LVx0XHR9XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01NzQxLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo1NzQyOlx0XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTU3NDMtXHRkZWZhdWx0OlxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NTg1Mj1zdGF0aWMgaW50IGhhbmRsZV9pbnZscGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTg1Ni1cdGt2bV9tbXVfaW52bHBnKHZjcHUsIGV4aXRfcXVhbGlmaWNhdGlvbik7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjU4NTc6XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTU4NTgtfVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NTg2MD1zdGF0aWMgaW50IGhhbmRsZV9hcGljX2FjY2VzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01ODc1LVx0XHRcdGt2bV9sYXBpY19zZXRfZW9pKHZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC92bXguYzo1ODc2Olx0XHRcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTg3Ny1cdFx0fVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NTk5OT1zdGF0aWMgaW50IGhhbmRsZV9lcHRfbWlzY29uZmlnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYwMTMtXHRcdHRyYWNlX2t2bV9mYXN0X21taW8oZ3BhKTtcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjAxNDpcdFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MDE1LVx0fVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjEyNj1zdGF0aWMgaW50IGhhbmRsZV9wYXVzZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MTM3LVx0a3ZtX3ZjcHVfb25fc3Bpbih2Y3B1LCB0cnVlKTtcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjEzODpcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjEzOS19XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTU1Mj1pbnQga3ZtX2NvbXBsZXRlX2luc25fZ3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01NTYtXHRlbHNlXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTU3Olx0XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNTU4LVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz03MTY9aW50IGt2bV9lbXVsYXRlX3hzZXRidihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTcyNC1cbmFyY2gveDg2L2t2bS94ODYuYzo3MjU6XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNzI2LX1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NzcyPWludCBrdm1fZW11bGF0ZV9yZHBtYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTc4My1cdGt2bV9lZHhfd3JpdGUodmNwdSwgZGF0YSBcdTAwM2VcdTAwM2UgMzIpO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjc4NDpcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy03ODUtfVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz03ODg9aW50IGt2bV9lbXVsYXRlX2FzX25vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzg5LXtcbmFyY2gveDg2L2t2bS94ODYuYzo3OTA6XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNzkxLX1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTQ1MD1pbnQga3ZtX2VtdWxhdGVfd2JpbnZkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTQ1Mi1cdGt2bV9lbXVsYXRlX3diaW52ZF9ub3NraXAodmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmM6NTQ1MzpcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy01NDU0LX1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjEzNz1zdGF0aWMgaW50IGt2bV92Y3B1X2NoZWNrX2h3X2JwKHVuc2lnbmVkIGxvbmcgYWRkciwgdTMyIHR5cGUsIHUzMiBkcjcsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTYxNTEtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjE1MjppbnQga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3g4Ni5jLTYxNTMte1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy02MTc0LX1cbmFyY2gveDg2L2t2bS94ODYuYzo2MTc1OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbik7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNjE3Ni1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjMxMD1pbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy02Mzg2LVx0ICogRU1VTFRZUEVfU0tJUCB3aXRob3V0IEVNVUxUWVBFX0NPTVBMRVRFX1VTRVJfRVhJVCBpcyBpbnRlbmRlZCBmb3JcbmFyY2gveDg2L2t2bS94ODYuYzo2Mzg3Olx0ICogdXNlICpvbmx5KiBieSB2ZW5kb3IgY2FsbGJhY2tzIGZvciBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbigpLlxuYXJjaC94ODYva3ZtL3g4Ni5jLTYzODgtXHQgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciB1cGRhdGluZyBpbnRlcnJ1cHRpYmlsaXR5IHN0YXRlIGFuZFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz02NTQ5PXN0YXRpYyBpbnQgY29tcGxldGVfZmFzdF9waW9fb3V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU1NS1cbmFyY2gveDg2L2t2bS94ODYuYzo2NTU2Olx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTY1NTctfVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz02NTU5PXN0YXRpYyBpbnQga3ZtX2Zhc3RfcGlvX291dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzaXplLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy02NTc1LVx0XHRcdGNvbXBsZXRlX2Zhc3RfcGlvX291dF9wb3J0XzB4N2U7XG5hcmNoL3g4Ni9rdm0veDg2LmM6NjU3NjpcdFx0a3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU3Ny1cdH0gZWxzZSB7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTY1ODQ9c3RhdGljIGludCBjb21wbGV0ZV9mYXN0X3Bpb19pbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTY2MDItXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjYwMzpcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy02NjA0LX1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjYyNz1pbnQga3ZtX2Zhc3RfcGlvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNpemUsIHVuc2lnbmVkIHNob3J0IHBvcnQsIGludCBpbilcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjYzNC1cdFx0cmV0ID0ga3ZtX2Zhc3RfcGlvX291dCh2Y3B1LCBzaXplLCBwb3J0KTtcbmFyY2gveDg2L2t2bS94ODYuYzo2NjM1Olx0cmV0dXJuIHJldCBcdTAwMjZcdTAwMjYga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNjYzNi19XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTcyNzg9c3RhdGljIGludCBjb21wbGV0ZV9oeXBlcmNhbGxfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTcyODQtXHRrdm1fcmF4X3dyaXRlX3Jhdyh2Y3B1LCByZXQpO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjcyODU6XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNzI4Ni19XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTg2NTg9aW50IGt2bV9lbXVsYXRlX2hhbHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NTkte1xuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NjA6XHRpbnQgcmV0ID0ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtODY2MS1cbmFyY2gveDg2L2t2bS94ODYuYy04NjYyLVx0LypcbmFyY2gveDg2L2t2bS94ODYuYzo4NjYzOlx0ICogSWYga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oKSB0cmlnZ2VyZWQgYSBzaW5nbGVzdGVwXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY2NC1cdCAqIGRlYnVnIGV4Y2VwdGlvbiwgcmV0dXJuIHRvIHVzZXJzcGFjZSBpbW1lZGlhdGVseSBzbyB0aGVcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODY5MD1pbnQga3ZtX2VtdWxhdGVfYXBfcmVzZXRfaG9sZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY5MS17XG5hcmNoL3g4Ni9rdm0veDg2LmM6ODY5MjpcdGludCByZXQgPSBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy04NjkzLVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMDY2Mj1pbnQga3ZtX2hhbmRsZV9pbnZwY2lkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyB0eXBlLCBndmFfdCBndmEpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNjk3LVx0XHRrdm1fbW11X2ludnBjaWRfZ3ZhKHZjcHUsIG9wZXJhbmQuZ2xhLCBvcGVyYW5kLnBjaWQpO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNjk4Olx0XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA2OTktXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNzEzLVx0XHRrdm1faW52YWxpZGF0ZV9wY2lkKHZjcHUsIG9wZXJhbmQucGNpZCk7XG5hcmNoL3g4Ni9rdm0veDg2LmM6MTA3MTQ6XHRcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy0xMDcxNS1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA3MzEtXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0hfR1VFU1QsIHZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNzMyOlx0XHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA3MzMtXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5oPTQ5MD1pbnQga3ZtX2VtdWxhdGVfcmRwbWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuaC00OTEtXG5hcmNoL3g4Ni9rdm0veDg2Lmg6NDkyOmludCBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5oLTQ5My1pbnQga3ZtX2NvbXBsZXRlX2luc25fZ3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKTtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MTQwOT1zdGF0aWMgaW50IGt2bV94ZW5faHlwZXJjYWxsX3NldF9yZXN1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcmVzdWx0KVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0xNDExLVx0a3ZtX3JheF93cml0ZV9yYXcodmNwdSwgcmVzdWx0KTtcbmFyY2gveDg2L2t2bS94ZW4uYzoxNDEyOlx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuYXJjaC94ODYva3ZtL3hlbi5jLTE0MTMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDM1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uOgoKKipVbmRlcnN0YW5kaW5nIGBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbmAqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBwb2ludGVkIHRvd2FyZHMgdGhlIGBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbmAgZnVuY3Rpb24uIE15IG1lbnRhbCBtYXAgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBLVk0mIzM5O3MgeDg2IGVtdWxhdGlvbiBsYXllciwgYW5kIHRoZSBwYXRoIGBhcmNoL3g4Ni9rdm0veDg2LmNgIGNvbmZpcm1zIHRoaXMuIFRoYXQgZmlsZSBpcyBhIGNvcmUgY29tcG9uZW50IGZvciB4ODYgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEtWTSBmdW5jdGlvbmFsaXR5LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBpcyBkb2luZy4gJiMzNDtTa2lwJiMzNDsgc3VnZ2VzdHMgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIGJ5cGFzc2luZyBvZiBpbnN0cnVjdGlvbnMgdGhhdCBhcmUgZW11bGF0ZWQuIFNvLCB0aGUgcXVlc3Rpb24gaXMsICp3aHkqIGFyZSB3ZSBza2lwcGluZz8gQW5kICpob3cqIGRvZXMgdGhlIGZ1bmN0aW9uIGFjY29tcGxpc2ggdGhhdD8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBzY2VuYXJpb3Mgb3IgY29udGV4dHMgaW4gd2hpY2ggaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxlYWRzIHRvIHNraXBwaW5nPyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZiB0byB1bmRlcnN0YW5kIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscy4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYz02MTM3PXN0YXRpYyBpbnQga3ZtX3ZjcHVfY2hlY2tfaHdfYnAodW5zaWduZWQgbG9uZyBhZGRyLCB1MzIgdHlwZSwgdTMyIGRyNyxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjE1MS1cbmFyY2gveDg2L2t2bS94ODYuYzo2MTUyOmludCBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjE1My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODgwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCBpbnN0cnVjdGlvbiBlbXVsYXRpb24sIHBhcnRpY3VsYXJseSBob3cgS1ZNIGhhbmRsZXMgc2l0dWF0aW9ucyB3aGVyZSBpdCAqZG9lc24mIzM5O3QqIG5lZWQgdG8gZnVsbHkgZW11bGF0ZSBhbiBpbnN0cnVjdGlvbi4gVGhlIG5hbWluZyBvZiBga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb25gIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiBXZSYjMzk7cmUgbm90IHRhbGtpbmcgYWJvdXQgYSBjb3JlIGVtdWxhdGlvbiBwYXRoOyBpbnN0ZWFkLCB0aGlzIHBvaW50cyB0byBhIG1lY2hhbmlzbSBmb3IgYnlwYXNzaW5nIHBvdGVudGlhbGx5IGV4cGVuc2l2ZSBlbXVsYXRpb24gc3RlcHMuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyByaWdodCBpbnRvIHRoZSBjb2RlIHRvIGZpZ3VyZSBvdXQ6CgoqICAgV2hhdCBraW5kcyBvZiBpbnN0cnVjdGlvbnMgYXJlIHdlIHNraXBwaW5nPyBBcmUgdGhleSBwcml2aWxlZ2VkIGluc3RydWN0aW9ucyB0aGF0IG1pZ2h0IGJlIGhhbmRsZWQgZGlyZWN0bHkgYnkgdGhlIGhvc3Qga2VybmVsLCBvciBwZXJoYXBzIGluc3RydWN0aW9ucyB0aGF0IGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBzb21ldGhpbmcgS1ZNIGtub3dzIGhvdyB0byBvcHRpbWl6ZT8KKiAgIFdoYXQmIzM5O3MgdGhlIGNyaXRlcmlhIGZvciBza2lwcGluZz8gSXMgaXQgYmFzZWQgb24gQ1BVIGZlYXR1cmVzLCBndWVzdCBzdGF0ZSwgaW5zdHJ1Y3Rpb24gdHlwZSwgb3Igc29tZXRoaW5nIGVsc2U/CiogICBXaGF0IGFyZSB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zPyBJcyBpdCBqdXN0IGEgc2ltcGxlIGNoZWNrLCBvciBtb3JlIGNvbXBsZXg/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgbm90aWNlYWJsZSBpbXByb3ZlbWVudCBpbiBndWVzdCBleGVjdXRpb24gc3BlZWQsIG9yIGEgc3VidGxlIG9wdGltaXphdGlvbj8KKiAgIEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgS1ZNIGNvbXBvbmVudHMsIGxpa2UgdGhlIGludGVycnVwdCBoYW5kbGluZyBvciBtZW1vcnkgYWNjZXNzPyBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiB0aGVzZSBza2lwIG1lY2hhbmlzbXMgaW50ZXJhY3Qgc2FmZWx5IHdpdGggb3RoZXIgbWVjaGFuaXNtcyBpbiBLVk0uCgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgZnVuZGFtZW50YWwgdHJhZGUtb2ZmczogdGhlIGNvbXBsZXhpdHkgb2YgZGV0ZWN0aW5nIHNraXAtYWJsZSBpbnN0cnVjdGlvbnMgdmVyc3VzIHRoZSBiZW5lZml0IG9mIHNraXBwaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBhcmNoaXRlY3R1cmFsIHByaW5jaXBsZXMgZHJvdmUgdGhlIGRlc2lnbiBoZXJlIC0gd2hhdCBhcmUgdGhlIHRyYWRlLW9mZnMgd2UmIzM5O3JlIG1ha2luZyBhbmQgd2hhdCBhc3N1bXB0aW9ucyBhcmUgbWFkZSB3aGVuIGRlY2lkaW5nIHRvIHNraXAgdGhlIGluc3RydWN0aW9uIGVtdWxhdGlvbiBwYXRoLiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gdHJhY2sgYW55IGVycm9yIGhhbmRsaW5nIHRvIHNlZSBob3cgdGhlIHN5c3RlbSBpcyBkZXNpZ25lZCB0byByZXNwb25kIHRvIGV4Y2VwdGlvbmFsIHNpdHVhdGlvbnMgdGhhdCBtaWdodCBvY2N1ciBkdXJpbmcgYW4gaW5zdHJ1Y3Rpb24gc2tpcC4gVGhpcyBpcyBnb2luZyB0byBiZSBnb29kOyBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcyBhcmUgYWx3YXlzIGludGVyZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxNTIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjE1MjpcdGludCBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG42MTUzOlx0e1xuNjE1NDpcdFx0dW5zaWduZWQgbG9uZyByZmxhZ3MgPSBrdm1feDg2X2NhbGwoZ2V0X3JmbGFncykodmNwdSk7XG42MTU1Olx0XHRpbnQgcjtcbjYxNTY6XHRcbjYxNTc6XHRcdHIgPSBrdm1feDg2X2NhbGwoc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbikodmNwdSk7XG42MTU4Olx0XHRpZiAodW5saWtlbHkoIXIpKVxuNjE1OTpcdFx0XHRyZXR1cm4gMDtcbjYxNjA6XHRcbjYxNjE6XHRcdGt2bV9wbXVfaW5zdHJ1Y3Rpb25fcmV0aXJlZCh2Y3B1KTtcbjYxNjI6XHRcbjYxNjM6XHRcdC8qXG42MTY0Olx0XHQgKiByZmxhZ3MgaXMgdGhlIG9sZCwgXCYjMzQ7cmF3XCYjMzQ7IHZhbHVlIG9mIHRoZSBmbGFncy4gIFRoZSBuZXcgdmFsdWUgaGFzXG42MTY1Olx0XHQgKiBub3QgYmVlbiBzYXZlZCB5ZXQuXG42MTY2Olx0XHQgKlxuNjE2NzpcdFx0ICogVGhpcyBpcyBjb3JyZWN0IGV2ZW4gZm9yIFRGIHNldCBieSB0aGUgZ3Vlc3QsIGJlY2F1c2UgXCYjMzQ7dGhlXG42MTY4Olx0XHQgKiBwcm9jZXNzb3Igd2lsbCBub3QgZ2VuZXJhdGUgdGhpcyBleGNlcHRpb24gYWZ0ZXIgdGhlIGluc3RydWN0aW9uXG42MTY5Olx0XHQgKiB0aGF0IHNldHMgdGhlIFRGIGZsYWdcJiMzNDsuXG42MTcwOlx0XHQgKi9cbjYxNzE6XHRcdGlmICh1bmxpa2VseShyZmxhZ3MgXHUwMDI2IFg4Nl9FRkxBR1NfVEYpKVxuNjE3MjpcdFx0XHRyID0ga3ZtX2luamVjdF9lbXVsYXRlZF9kYih2Y3B1LCBEUjZfQlMpO1xuNjE3MzpcdFx0cmV0dXJuIHI7XG42MTc0Olx0fVxuNjE3NTpcdEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbik7XG42MTc2Olx0XG42MTc3Olx0c3RhdGljIGJvb2wga3ZtX2lzX2NvZGVfYnJlYWtwb2ludF9pbmhpYml0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuNjE3ODpcdHtcbjYxNzk6XHRcdGlmICh2Y3B1LVx1MDAzZWd1ZXN0X2RlYnVnIFx1MDAyNiBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKVxuNjE4MDpcdFx0XHRyZXR1cm4gZmFsc2U7XG42MTgxOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODMwCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBLVk0gRGVidWdnaW5nIEZsb3cqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBLVk0gZGVidWdnaW5nIHByb2Nlc3Mgd29ya3MsIHNwZWNpZmljYWxseSBob3cgYW4gZW11bGF0ZWQgZGVidWcgZXZlbnQgZ2V0cyBpbmplY3RlZC4gSSYjMzk7bSByZWNhbGxpbmcgdGhhdCBga3ZtX2luamVjdF9lbXVsYXRlZF9kYmAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgaXQmIzM5O3MgdGhlIG9uZSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyBgdmNwdS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbmAgdG8gYEtWTV9FWElUX0RFQlVHYC4gQSByZXR1cm4gdmFsdWUgb2YgMCBmcm9tIHRoaXMgZnVuY3Rpb24gd291bGQgdGhlbiB0cmlnZ2VyIGFuIGV4aXQgYmFjayB0byB1c2Vyc3BhY2UsIHdoaWNoIGlzIGNvbnNpc3RlbnQgd2l0aCBob3cgd2UgaGFuZGxlIHRoZXNlIGRlYnVnIHNpdHVhdGlvbnMuCgpUaGVyZWZvcmUsIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgYGt2bV9pbmplY3RfZW11bGF0ZWRfZGJgIGZ1bmN0aW9uIGFuZCBjb25maXJtIHdoZXRoZXIgaXQgaXMgaW5kZWVkIGJlaGF2aW5nIGFzIEkgZXhwZWN0LiBJdCYjMzk7cyB0aW1lIHRvIGNoZWNrIHRoZSBjb2RlIGFuZCBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgY2lyY3Vtc3RhbmNlcyBhbmQgdGhlIHBhdGggdG8gdGhhdCBgS1ZNX0VYSVRfREVCVUdgIGV4aXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBrdm1faW5qZWN0X2VtdWxhdGVkX2RiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYz01ODQ2PXN0YXRpYyB2b2lkIHRvZ2dsZV9pbnRlcnJ1cHRpYmlsaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1hc2spXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTU4NjQtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTg2NTpzdGF0aWMgaW50IGt2bV9pbmplY3RfZW11bGF0ZWRfZGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGRyNilcbmFyY2gveDg2L2t2bS94ODYuYy01ODY2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTk6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyOTMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gYGt2bV9pbmplY3RfZW11bGF0ZWRfZGJgOgoKKipEaXZpbmcgaW50byBga3ZtX2luamVjdF9lbXVsYXRlZF9kYmAqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGt2bV9pbmplY3RfZW11bGF0ZWRfZGJgIGZ1bmN0aW9uLiBJbnN0YW50bHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIEtWTSBhbmQgaG93IGl0JiMzOTtzIG1hbmFnaW5nIGV4Y2VwdGlvbnMuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gaW5qZWN0aW5nIGEgZGVidWcgZXhjZXB0aW9uIGludG8gYSBndWVzdCBWTSwgYnV0IEkgbmVlZCB0byBzZWUgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiB0byBjb25maXJtIHRoZSBuYXR1cmUgb2YgdGhlIHNwZWNpZmljICYjMzQ7ZGVidWcmIzM0OyBhY3Rpb24uIElzIGl0IGVtdWxhdGluZyBhIGhhcmR3YXJlIGRlYnVnIGV2ZW50PyBPciBpcyBpdCBhIHNvZnR3YXJlIHRyaWdnZXI/CgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogaG93IHRoZSBpbmplY3RlZCBkZWJ1ZyBldmVudCBpcyBjb25zdHJ1Y3RlZCwgd2hlcmUgdGhlIGNvbnRleHQgY29tZXMgZnJvbSwgd2hhdCBpdCYjMzk7cyB0cnlpbmcgdG8gZG8uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl04oCZcyBtb2RpZnlpbmcgZ3Vlc3QgcmVnaXN0ZXIgc3RhdGUsIG1hbmlwdWxhdGluZyB0aGUgaW50ZXJydXB0IHZlY3Rvciwgb3Igc2ltdWxhdGluZyBhIHNwZWNpZmljIGNvbmRpdGlvbiB0aGF0IHRoZSBndWVzdCYjMzk7cyBkZWJ1ZyByZWdpc3RlcnMgd291bGQgb3RoZXJ3aXNlIGNhdXNlLiBJJiMzOTtsbCBuZWVkIHRvIGZvbGxvdyB0aGUgZXhlY3V0aW9uIGZsb3cgd2l0aGluIHRoZSBmdW5jdGlvbiB0byBhc3Nlc3MgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIFRoZSBrZXkgd2lsbCBiZSB0byBpZGVudGlmeSB0aGUgcHJlY2lzZSBtZWNoYW5pc21zIHVzZWQgdG8gaW50ZWdyYXRlIHRoZSBpbmplY3RlZCBldmVudCBpbnRvIHRoZSBndWVzdCYjMzk7cyBleGVjdXRpb24uIEFuZCB3aGF0JiMzOTtzIGJlaW5nIGRvbmUgaGVyZSB0byBzYWZlbHkgZG8gdGhhdCwgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHJ1bm5pbmcgVk0uIEkgYW50aWNpcGF0ZSBzb21lIGNyaXRpY2FsIHNlY3Rpb24gaGFuZGxpbmcgZm9yIHRocmVhZCBzYWZldHkgdG9vOyBLVk0gaXMgZ2VuZXJhbGx5IHZlcnkgY2FyZWZ1bCBhYm91dCB0aGF0LiBUaGlzIHNlZW1zIGxpa2UgYSBmdW5jdGlvbiB0aGF0IHJlcXVpcmVzIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBoYXJkd2FyZSwgdGhlIGFyY2hpdGVjdHVyZSwgYW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIEtWTSBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTk6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU4NjU6XHRzdGF0aWMgaW50IGt2bV9pbmplY3RfZW11bGF0ZWRfZGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGRyNilcbjU4NjY6XHR7XG41ODY3Olx0XHRzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1biA9IHZjcHUtXHUwMDNlcnVuO1xuNTg2ODpcdFxuNTg2OTpcdFx0aWYgKHZjcHUtXHUwMDNlZ3Vlc3RfZGVidWcgXHUwMDI2IChLVk1fR1VFU1REQkdfVVNFX0hXX0JQIHwgS1ZNX0dVRVNUREJHX1NJTkdMRVNURVApKSB7XG41ODcwOlx0XHRcdGt2bV9ydW4tXHUwMDNlZGVidWcuYXJjaC5kcjYgPSBkcjYgfCBEUjZfQUNUSVZFX0xPVztcbjU4NzE6XHRcdFx0a3ZtX3J1bi1cdTAwM2VkZWJ1Zy5hcmNoLnBjID0ga3ZtX2dldF9saW5lYXJfcmlwKHZjcHUpO1xuNTg3MjpcdFx0XHRrdm1fcnVuLVx1MDAzZWRlYnVnLmFyY2guZXhjZXB0aW9uID0gREJfVkVDVE9SO1xuNTg3MzpcdFx0XHRrdm1fcnVuLVx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfREVCVUc7XG41ODc0Olx0XHRcdHJldHVybiAwO1xuNTg3NTpcdFx0fVxuNTg3NjpcdFxuNTg3NzpcdFx0a3ZtX3F1ZXVlX2V4Y2VwdGlvbl9wKHZjcHUsIERCX1ZFQ1RPUiwgZHI2KTtcbjU4Nzg6XHRcdHJldHVybiAxO1xuNTg3OTpcdH1cbjU4ODA6XHRcbjU4ODE6XHRzdGF0aWMgaW50IGluamVjdF9lbXVsYXRlZF9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuNTg4MjpcdHtcbjU4ODM6XHRcdHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleCA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5lbXVsYXRlX2N0eHQtXHUwMDNlZXhjZXB0aW9uO1xuNTg4NDpcdFxuNTg4NTpcdFx0aWYgKGV4LVx1MDAzZXZlY3RvciA9PSBEQl9WRUNUT1IpXG41ODg2Olx0XHRcdHJldHVybiBrdm1faW5qZWN0X2VtdWxhdGVkX2RiKHZjcHUsIGV4LVx1MDAzZWRyNik7XG41ODg3Olx0XG41ODg4Olx0XHRpZiAoZXgtXHUwMDNldmVjdG9yID09IFBGX1ZFQ1RPUilcbjU4ODk6XHRcdFx0a3ZtX2luamVjdF9lbXVsYXRlZF9wYWdlX2ZhdWx0KHZjcHUsIGV4KTtcbjU4OTA6XHRcdGVsc2UgaWYgKGV4LVx1MDAzZWVycm9yX2NvZGVfdmFsaWQpXG41ODkxOlx0XHRcdGt2bV9xdWV1ZV9leGNlcHRpb25fZSh2Y3B1LCBleC1cdTAwM2V2ZWN0b3IsIGV4LVx1MDAzZWVycm9yX2NvZGUpO1xuNTg5MjpcdFx0ZWxzZVxuNTg5MzpcdFx0XHRrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIGV4LVx1MDAzZXZlY3Rvcik7XG41ODk0Olx0XHRyZXR1cm4gMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTk6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyMjkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgSW1wYWN0IG9mIGEgS1ZNIFBhdGNoKioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiB0aGlzIHBhdGNoIGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIG15IGhlYWQgYXMgSSBjb25zaWRlciBpdC4gSSBzZWUgdGhhdCBga3ZtX2luamVjdF9lbXVsYXRlZF9kYmAgaXMgY29ycmVjdGx5IHNldHRpbmcgYGt2bV9ydW4tJmd0O2V4aXRfcmVhc29uYCB0byBgS1ZNX0VYSVRfREVCVUdgIGFuZCByZXR1cm5pbmcgMC4gVGhhdCYjMzk7cyBleHBlY3RlZCBiZWhhdmlvci4gVGhlbiB3ZSYjMzk7dmUgZ290IGBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbmAgYWxzbyByZXR1cm5pbmcgMCwgYW5kIGZpbmFsbHksIGBrdm1fZW11bGF0ZV9oYWx0YCBnZXR0aW5nIGEgcmV0dXJuIHZhbHVlIG9mIGByZXQgPSAwYC4KClRoZSBrZXkgZGlmZmVyZW5jZSBoZXJlIGlzIGhvdyBga3ZtX2VtdWxhdGVfaGFsdGAgaXMgYmVoYXZpbmcgKmFmdGVyKiB0aGUgcGF0Y2guIEJlZm9yZSwgaXQgd2FzIGNhbGxpbmcgYGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwYCBhbmQgQU5EaW5nIHRoZSByZXN1bHRzLiBDcml0aWNhbGx5LCBga3ZtX2VtdWxhdGVfaGFsdF9ub3NraXBgIHdvdWxkIG92ZXJ3cml0ZSB0aGUgYGV4aXRfcmVhc29uYCBzZXQgZWFybGllciwgcG90ZW50aWFsbHkgY2hhbmdpbmcgYEtWTV9FWElUX0RFQlVHYCB0byBgS1ZNX0VYSVRfSExUYCBvciBzaW1pbGFyLiBOb3csIHRoZSBwYXRjaCAqcHJlc2VydmVzKiBgS1ZNX0VYSVRfREVCVUdgIGlmIGl0IHdhcyBhbHJlYWR5IHNldC4gSWYgYHZjcHUtJmd0O3J1bi0mZ3Q7ZXhpdF9yZWFzb24gPT0gS1ZNX0VYSVRfREVCVUdgLCBpdCBpbW1lZGlhdGVseSByZXR1cm5zIGByZXRgLCBzbyB0aGUgZGVidWcgZXhpdCByZWFzb24gaXMgbWFpbnRhaW5lZC4KClRoaXMgaXMgYSAqKmRlZmluaXRlKiogZnVuY3Rpb25hbCBjaGFuZ2UuIFRoaXMgYWx0ZXJhdGlvbiBvZiB0aGUgZXhpdCByZWFzb24gaGFuZGxpbmcgd2FycmFudHMgdGhvcm91Z2ggZnV6emluZy4gTXkgbWFpbiBmb2N1cyBzeW1ib2wgaGVyZSB3aWxsIGJlIGBrdm1fZW11bGF0ZV9oYWx0YCwgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjcml0aWNhbCBsb2dpYyBzaGlmdCBvY2N1cnJlZC4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZ1enppbmcgaGFybmVzc2VzIHRhcmdldCB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGFuZCB0aGUgY29kZSBwYXRocyB0aGF0IGludGVyYWN0IHdpdGggaXQuCgpJJiMzOTttIGFsc28gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYWZmZWN0IHRoaXMuIE9idmlvdXNseSwgYEtWTWAgaXMgdGhlIHByaW1hcnkgb25lLCBidXQgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYW55IG90aGVyIHJlbGV2YW50IHNldHRpbmdzLiBgQ09ORklHX0tWTWAgaXRzZWxmIGlzIGdlbmVyYWxseSBlbmFibGVkLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGludmVzdGlnYXRlIHRoYXQgY2FyZWZ1bGx5LCBhbmQgaXQmIzM5O3MgYSBib29sZWFuIG9yIHRyaXN0YXRlLCBzbyBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBNeSBmdXp6aW5nIHN0cmF0ZWd5IHdpbGwgbmVlZCB0byBjb3ZlciBhbGwgcG9zc2libGUgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMzgKCQkJCQkJCW91dHB1dDogMTI2CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtWTSBCdWcgRml4IGFuZCBEZWZpbmluZyBhIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2gsIGFuZCBpdCBsb29rcyBsaWtlIGEgcHJldHR5IHNwZWNpZmljIGZpeCB3aXRoaW4gdGhlIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFib3V0IGBrdm1fZW11bGF0ZV9oYWx0YC4gVGhlIGJ1ZyBpcyB0aGF0IGBrdm1fZW11bGF0ZV9oYWx0YCB3YXMgaW5jb3JyZWN0bHkgb3ZlcndyaXRpbmcgdGhlIGBLVk1fRVhJVF9ERUJVR2AgZXhpdCByZWFzb24gd2l0aCBgS1ZNX0VYSVRfSExUYCB1bmRlciBjZXJ0YWluIHNpbmdsZS1zdGVwIGRlYnVnZ2luZyBjb25kaXRpb25zIGR1cmluZyBhbiBpbnN0cnVjdGlvbiBza2lwLiBUaGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgZnV6emluZywgYXMgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgdGhlIGVtdWxhdG9yIGJlaGF2ZXMuIFRoZSByZWxldmFudCBjb25maWcgaGVyZSBpcyBgS1ZNYC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBrdm1fZW11bGF0ZV9oYWx0YCBhcyB0aGUgZm9jdXMgc3ltYm9sLiBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBleGVjdXRpb24gZmxvdy4gQWgsIHJpZ2h0LCBpdCYjMzk7cyBjYWxsZWQgd2hlbiBhIGd1ZXN0IGV4ZWN1dGVzIGFuIEhMVCBpbnN0cnVjdGlvbi4gVGhhdCBjb3VsZCBoYXBwZW4gZnJlcXVlbnRseSwgZXNwZWNpYWxseSBpZiB0aGUgZ3Vlc3QgaXMgaWRsaW5nLCBidXQgaXQmIzM5O3MgYW4gZXhpdCBoYW5kbGVyLCBub3Qgc29tZXRoaW5nIGxpa2UgYGt2bV92Y3B1X3J1bmAuIFRoYXQgbWVhbnMgaXQmIzM5O3Mgc3BlY2lmaWMgZW5vdWdoIHRvIGJlIGNvbnNpZGVyZWQgYSB2YWx1YWJsZSBmb2N1cyBzeW1ib2wuIEkmIzM5O20gbm90IHNlZWluZyBhbnkgb3RoZXIgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkIHdpdGggdGhpcyBwYXRjaCwgd2hpY2ggcmVpbmZvcmNlcyBteSBkZWNpc2lvbi4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIG15IGFuYWx5c2lzLiBJJiMzOTtsbCBnZXQgdGhlIHJlc3VsdHMgc2V0IHVwIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9lbXVsYXRlX2hhbHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gd2hlcmUgYGt2bV9lbXVsYXRlX2hhbHRgIHdvdWxkIG92ZXJ3cml0ZSB0aGUgYEtWTV9FWElUX0RFQlVHYCBleGl0IHJlYXNvbiB3aXRoIGBLVk1fRVhJVF9ITFRgIGlmIGEgc2luZ2xlLXN0ZXAgZGVidWcgZXhjZXB0aW9uIHdhcyB0cmlnZ2VyZWQgZHVyaW5nIHRoZSBza2lwIG9mIHRoZSBlbXVsYXRlZCBpbnN0cnVjdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2VtdWxhdGVfaGFsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiB3aGVyZSBga3ZtX2VtdWxhdGVfaGFsdGAgd291bGQgb3ZlcndyaXRlIHRoZSBgS1ZNX0VYSVRfREVCVUdgIGV4aXQgcmVhc29uIHdpdGggYEtWTV9FWElUX0hMVGAgaWYgYSBzaW5nbGUtc3RlcCBkZWJ1ZyBleGNlcHRpb24gd2FzIHRyaWdnZXJlZCBkdXJpbmcgdGhlIHNraXAgb2YgdGhlIGVtdWxhdGVkIGluc3RydWN0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDlUMTk6NDk6NTIuMjQ5MDE5MjU3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3NTgyNzYwOTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9lbXVsYXRlX2hhbHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiB3aGVyZSBga3ZtX2VtdWxhdGVfaGFsdGAgd291bGQgb3ZlcndyaXRlIHRoZSBgS1ZNX0VYSVRfREVCVUdgIGV4aXQgcmVhc29uIHdpdGggYEtWTV9FWElUX0hMVGAgaWYgYSBzaW5nbGUtc3RlcCBkZWJ1ZyBleGNlcHRpb24gd2FzIHRyaWdnZXJlZCBkdXJpbmcgdGhlIHNraXAgb2YgdGhlIGVtdWxhdGVkIGluc3RydWN0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxOTo0OTo1Mi4yNDkwMjM5OTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMTI0MDE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA4ODc4ZDdjYTVjZDZiOWZhMzg3ZjllNThlYzFmODNkMjM2MmIzOWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgOSAxOTo0OTo1MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5pbmRleCAwNjI2ZTgzNWU5ZWI3Ny4uMmZkNmFkNDkwNTBjNzEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXFxuQEAgLTg2NTgsMTAgKzg2NTgsMTYgQEAgRVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwKTtcXG4gaW50IGt2bV9lbXVsYXRlX2hhbHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdGludCByZXQgPSBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG4rXFxuIFxcdC8qXFxuLVxcdCAqIFRPRE86IHdlIG1pZ2h0IGJlIHNxdWFzaGluZyBhIEdVRVNUREJHX1NJTkdMRVNURVAtdHJpZ2dlcmVkXFxuLVxcdCAqIEtWTV9FWElUX0RFQlVHIGhlcmUuXFxuK1xcdCAqIElmIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCkgdHJpZ2dlcmVkIGEgc2luZ2xlc3RlcFxcbitcXHQgKiBkZWJ1ZyBleGNlcHRpb24sIHJldHVybiB0byB1c2Vyc3BhY2UgaW1tZWRpYXRlbHkgc28gdGhlXFxuK1xcdCAqIGRlYnVnZ2VyIGNhbiBwcm9jZXNzIHRoZSBldmVudC4gRG8gbm90IGxldCBoYWx0IGVtdWxhdGlvblxcbitcXHQgKiBvdmVyd3JpdGUgdGhlIEtWTV9FWElUX0RFQlVHIGV4aXQgcmVhc29uLlxcbiBcXHQgKi9cXG4rXFx0aWYgKHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNlZXhpdF9yZWFzb24gPT0gS1ZNX0VYSVRfREVCVUcpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbiBcXHRyZXR1cm4ga3ZtX2VtdWxhdGVfaGFsdF9ub3NraXAodmNwdSkgXFx1MDAyNlxcdTAwMjYgcmV0O1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZW11bGF0ZV9oYWx0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTk6NDk6NTIuNjcxMDMyMjMyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTcxNjA3NDAzMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2VtdWxhdGVfaGFsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIHdoZXJlIGBrdm1fZW11bGF0ZV9oYWx0YCB3b3VsZCBvdmVyd3JpdGUgdGhlIGBLVk1fRVhJVF9ERUJVR2AgZXhpdCByZWFzb24gd2l0aCBgS1ZNX0VYSVRfSExUYCBpZiBhIHNpbmdsZS1zdGVwIGRlYnVnIGV4Y2VwdGlvbiB3YXMgdHJpZ2dlcmVkIGR1cmluZyB0aGUgc2tpcCBvZiB0aGUgZW11bGF0ZWQgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDg4NzhkN2NhNWNkNmI5ZmEzODdmOWU1OGVjMWY4M2QyMzYyYjM5YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDkgMTk6NDk6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbmluZGV4IDA2MjZlODM1ZTllYjc3Li4yZmQ2YWQ0OTA1MGM3MSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtODY1OCwxMCArODY1OCwxNiBAQCBFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2VtdWxhdGVfaGFsdF9ub3NraXApO1xuIGludCBrdm1fZW11bGF0ZV9oYWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRpbnQgcmV0ID0ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG4rXG4gXHQvKlxuLVx0ICogVE9ETzogd2UgbWlnaHQgYmUgc3F1YXNoaW5nIGEgR1VFU1REQkdfU0lOR0xFU1RFUC10cmlnZ2VyZWRcbi1cdCAqIEtWTV9FWElUX0RFQlVHIGhlcmUuXG4rXHQgKiBJZiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbigpIHRyaWdnZXJlZCBhIHNpbmdsZXN0ZXBcbitcdCAqIGRlYnVnIGV4Y2VwdGlvbiwgcmV0dXJuIHRvIHVzZXJzcGFjZSBpbW1lZGlhdGVseSBzbyB0aGVcbitcdCAqIGRlYnVnZ2VyIGNhbiBwcm9jZXNzIHRoZSBldmVudC4gRG8gbm90IGxldCBoYWx0IGVtdWxhdGlvblxuK1x0ICogb3ZlcndyaXRlIHRoZSBLVk1fRVhJVF9ERUJVRyBleGl0IHJlYXNvbi5cbiBcdCAqL1xuK1x0aWYgKHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID09IEtWTV9FWElUX0RFQlVHKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuIFx0cmV0dXJuIGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwKHZjcHUpIFx1MDAyNlx1MDAyNiByZXQ7XG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZW11bGF0ZV9oYWx0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE5OjQ5OjUyLjY3MTAzMzM2MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0OTIwMDY4NjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIEhhbHQgRW11bGF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgYGt2bV9lbXVsYXRlX2hhbHRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBJdCdzIHByZXR0eSBmb2N1c2VkOyB0aGUga2V5IGlzIHRoZSBhZGRlZCBjb25kaXRpb25hbC4gVGhlIGxvZ2ljIGZsb3cgaXMgY2xlYXJseSBkZXNpZ25lZCB0byBzaG9ydC1jaXJjdWl0IHRoZSB1c3VhbCBgaGFsdGAgZW11bGF0aW9uLiBJJ20gc2VlaW5nIHRoYXQgYWZ0ZXIgYGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpYCwgdGhleSd2ZSBpbnNlcnRlZCBhIGNoZWNrOiBgdmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPT0gS1ZNX0VYSVRfREVCVUdgLiAgSWYgdGhlIGBleGl0X3JlYXNvbmAgKmlzKiBgS1ZNX0VYSVRfREVCVUdgLCB0aGUgZnVuY3Rpb24gYmFpbHMgb3V0IGVhcmx5LCBpbW1lZGlhdGVseSByZXR1cm5pbmcgYHJldGAuIEluc3RlYWQgb2YgdGhlIHN0YW5kYXJkIHBhdGgsIHdoaWNoIHdvdWxkIGNhbGwgYGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwKHZjcHUpYC4gVGhlIGdvYWwgaXMgY2xlYXJseSB0byBoYW5kbGUgZGVidWcgZXhpdHMgZGlmZmVyZW50bHksIHNraXBwaW5nIHBhcnRzIG9mIHRoZSBzdGFuZGFyZCBoYWx0IGVtdWxhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXkgd2FudCB0byBieXBhc3MgYGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwYCB1bmRlciBhIGRlYnVnIGV4aXQgY29uZGl0aW9uLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBmb3IgaGFsdGluZyBhbmQgZGVidWdnaW5nIEtWTSBndWVzdHMgaW4gdGhpcyBzY2VuYXJpby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE5OjUwOjA3LjU5MTEwMzc0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMDU4MjExNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fZW11bGF0ZV9oYWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9ODU4MT1zdGF0aWMgaW50IHZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04NjMwLVxcbmFyY2gveDg2L2t2bS94ODYuYzo4NjMxOnN0YXRpYyBpbnQgX19rdm1fZW11bGF0ZV9oYWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHN0YXRlLCBpbnQgcmVhc29uKVxcbmFyY2gveDg2L2t2bS94ODYuYy04NjMyLXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04NjUxLVxcbmFyY2gveDg2L2t2bS94ODYuYzo4NjUyOmludCBrdm1fZW11bGF0ZV9oYWx0X25vc2tpcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NTMte1xcbmFyY2gveDg2L2t2bS94ODYuYzo4NjU0OlxcdHJldHVybiBfX2t2bV9lbXVsYXRlX2hhbHQodmNwdSwgS1ZNX01QX1NUQVRFX0hBTFRFRCwgS1ZNX0VYSVRfSExUKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY1NS19XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NTY6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY1Ny1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODY1ODppbnQga3ZtX2VtdWxhdGVfaGFsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NTkte1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NzAtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NzE6XFx0cmV0dXJuIGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwKHZjcHUpIFxcdTAwMjZcXHUwMDI2IHJldDtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY3Mi19XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NzM6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9lbXVsYXRlX2hhbHQpO1xcbmFyY2gveDg2L2t2bS94ODYuYy04Njc0LVxcbmFyY2gveDg2L2t2bS94ODYuYz04Njc1PWZhc3RwYXRoX3QgaGFuZGxlX2Zhc3RwYXRoX2hsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY3OS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODY4MDpcXHRpZiAoIWt2bV9lbXVsYXRlX2hhbHQodmNwdSkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2ODEtXFx0XFx0cmV0dXJuIEVYSVRfRkFTVFBBVEhfRVhJVF9VU0VSU1BBQ0U7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODY5MD1pbnQga3ZtX2VtdWxhdGVfYXBfcmVzZXRfaG9sZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY5My1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODY5NDpcXHRyZXR1cm4gX19rdm1fZW11bGF0ZV9oYWx0KHZjcHUsIEtWTV9NUF9TVEFURV9BUF9SRVNFVF9IT0xELFxcbmFyY2gveDg2L2t2bS94ODYuYy04Njk1LVxcdFxcdFxcdFxcdFxcdEtWTV9FWElUX0FQX1JFU0VUX0hPTEQpIFxcdTAwMjZcXHUwMDI2IHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTk6NTA6MDcuOTkxNjg5OTg0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4NDgyNzk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBga3ZtX2VtdWxhdGVfaGFsdGAgQ2FsbHNpdGVzKipcblxuQWxyaWdodCwgc28gYGt2bV9lbXVsYXRlX2hhbHRgIGlzIGV4cG9ydGVkLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyBpbXBvcnRhbnQsIGludGVuZGVkIGZvciBpbnRlcm5hbCBLVk0gb3BlcmF0aW9ucy4gVGhlIGZhY3QgdGhhdCBpdCdzIGNhbGxlZCBpbnRlcm5hbGx5IG1lYW5zIGl0J3MgY29yZSB0byB0aGUgdmlydHVhbGl6YXRpb24gcHJvY2Vzcywgbm90IHNvbWUgcGVyaXBoZXJhbCBtb2R1bGUuXG5cbkkgcmVjYWxsIHNlZWluZyBpdCB1c2VkIGluIGBoYW5kbGVfZmFzdHBhdGhfaGx0YC4gVGhhdCdzIGEgc3Ryb25nIGhpbnQgdGhhdCBpdCBoYW5kbGVzIHRoZSBmYXN0LXBhdGggSExUIGluc3RydWN0aW9uIGVtdWxhdGlvbiwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHBlcmZvcm1hbmNlLiBOb3csIHNpbmNlIGl0J3MgdXNlZCB3aXRoIGBWTVgvU1ZNIGhhbmRsZXJzYCwgd2hpY2ggYXJlIHg4NiB2aXJ0dWFsaXphdGlvbiB0ZWNobm9sb2dpZXMsIHRoZSBmdW5jdGlvbiBwcm9iYWJseSBkZWFscyB3aXRoIHRoZSBjb3JlIGVtdWxhdGlvbiBvZiBITFQgaW5zdHJ1Y3Rpb25zIHdoZW4gdGhlIGd1ZXN0IHRyaWdnZXJzIHRoZW0uXG5cbkxldCdzIGRyaWxsIGRvd24gYW5kIHNlZSAqZXhhY3RseSogd2hlcmUgYGt2bV9lbXVsYXRlX2hhbHRgIGlzIGNhbGxlZC4gVW5kZXJzdGFuZGluZyB0aGUgcHJlY2lzZSBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIEtWTSBhcmNoaXRlY3R1cmUgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoeXBlcnZpc29yIGNvbXBvbmVudHMuIEkgbmVlZCB0byBiZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciB1bmV4cGVjdGVkIGNhbGwgc2l0ZXMgdGhhdCB3b3VsZCBiZSB1bmV4cGVjdGVkLCBvciBwZXJoYXBzIGV2ZW4gaW5kaWNhdGUgYSBwb3RlbnRpYWwgYnVnLiBUaW1lIHRvIGRpZyBpbiB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI5MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE5OjUwOjExLjQ3NjUxOTU1N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzEyNDY5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fZW11bGF0ZV9oYWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zMzMyPXN0YXRpYyBpbnQgKCpjb25zdCBzdm1fZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMzczLVxcdFtTVk1fRVhJVF9QQVVTRV1cXHRcXHRcXHQ9IHBhdXNlX2ludGVyY2VwdGlvbixcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjMzNzQ6XFx0W1NWTV9FWElUX0hMVF1cXHRcXHRcXHRcXHQ9IGt2bV9lbXVsYXRlX2hhbHQsXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMzc1LVxcdFtTVk1fRVhJVF9JTlZMUEddXFx0XFx0XFx0PSBpbnZscGdfaW50ZXJjZXB0aW9uLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMzk4LVxcdFtTVk1fRVhJVF9JTlZQQ0lEXSAgICAgICAgICAgICAgICAgICAgICA9IGludnBjaWRfaW50ZXJjZXB0aW9uLFxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzM5OTpcXHRbU1ZNX0VYSVRfSURMRV9ITFRdXFx0XFx0XFx0PSBrdm1fZW11bGF0ZV9oYWx0LFxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzQwMC1cXHRbU1ZNX0VYSVRfTlBGXVxcdFxcdFxcdFxcdD0gbnBmX2ludGVyY2VwdGlvbixcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MzYyMD1pbnQgc3ZtX2ludm9rZV9leGl0X2hhbmRsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgX19leGl0X2NvZGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM2NDMtXFx0ZWxzZSBpZiAoZXhpdF9jb2RlID09IFNWTV9FWElUX0hMVCB8fCBleGl0X2NvZGUgPT0gU1ZNX0VYSVRfSURMRV9ITFQpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNjQ0OlxcdFxcdHJldHVybiBrdm1fZW11bGF0ZV9oYWx0KHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzY0NS1cXHRlbHNlIGlmIChleGl0X2NvZGUgPT0gU1ZNX0VYSVRfTlBGKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNzg3PXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxhdW5jaClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzg5Ny1cXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLm5lc3RlZF9ydW5fcGVuZGluZyA9IDA7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozODk4OlxcdFxcdFxcdHJldHVybiBrdm1fZW11bGF0ZV9oYWx0X25vc2tpcCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4OTktXFx0XFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0yMDQ0PWludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yMTAxLVxcdGNhc2UgRVhJVF9SRUFTT05fSExUOlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MjEwMjpcXHRcXHRyZXR1cm4ga3ZtX2VtdWxhdGVfaGFsdF9ub3NraXAodmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yMTAzLVxcdGNhc2UgRVhJVF9SRUFTT05fVERDQUxMOlxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz01MzI1PXN0YXRpYyBpbnQgaGFuZGxlX3Jtb2RlX2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTUzMzUtXFx0XFx0XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5oYWx0X3JlcXVlc3QgPSAwO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NTMzNjpcXHRcXHRcXHRcXHRyZXR1cm4ga3ZtX2VtdWxhdGVfaGFsdF9ub3NraXAodmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01MzM3LVxcdFxcdFxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjA2ND1zdGF0aWMgaW50IGhhbmRsZV9pbnZhbGlkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjA5Ni1cXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmhhbHRfcmVxdWVzdCA9IDA7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2MDk3OlxcdFxcdFxcdHJldHVybiBrdm1fZW11bGF0ZV9oYWx0X25vc2tpcCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYwOTgtXFx0XFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz02MzMzPXN0YXRpYyBpbnQgKCprdm1fdm14X2V4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjM0NC1cXHRbRVhJVF9SRUFTT05fSU5URVJSVVBUX1dJTkRPV10gICAgICAgID0gaGFuZGxlX2ludGVycnVwdF93aW5kb3csXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2MzQ1OlxcdFtFWElUX1JFQVNPTl9ITFRdICAgICAgICAgICAgICAgICAgICAgPSBrdm1fZW11bGF0ZV9oYWx0LFxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjM0Ni1cXHRbRVhJVF9SRUFTT05fSU5WRF1cXHRcXHQgICAgICA9IGt2bV9lbXVsYXRlX2ludmQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTY3MTI9c3RhdGljIGludCBfX3ZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjg1Mi1cXHRlbHNlIGlmIChleGl0X3JlYXNvbi5iYXNpYyA9PSBFWElUX1JFQVNPTl9ITFQpXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2ODUzOlxcdFxcdHJldHVybiBrdm1fZW11bGF0ZV9oYWx0KHZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjg1NC1cXHRlbHNlIGlmIChleGl0X3JlYXNvbi5iYXNpYyA9PSBFWElUX1JFQVNPTl9FUFRfTUlTQ09ORklHKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTg1ODE9c3RhdGljIGludCB2Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtODYzMC1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODYzMTpzdGF0aWMgaW50IF9fa3ZtX2VtdWxhdGVfaGFsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzdGF0ZSwgaW50IHJlYXNvbilcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODYzMi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY1MS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODY1MjppbnQga3ZtX2VtdWxhdGVfaGFsdF9ub3NraXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ODYuYy04NjUzLXtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODY1NDpcXHRyZXR1cm4gX19rdm1fZW11bGF0ZV9oYWx0KHZjcHUsIEtWTV9NUF9TVEFURV9IQUxURUQsIEtWTV9FWElUX0hMVCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NTUtfVxcbmFyY2gveDg2L2t2bS94ODYuYzo4NjU2OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZW11bGF0ZV9oYWx0X25vc2tpcCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NTctXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NTg6aW50IGt2bV9lbXVsYXRlX2hhbHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ODYuYy04NjU5LXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04NjcwLVxcbmFyY2gveDg2L2t2bS94ODYuYzo4NjcxOlxcdHJldHVybiBrdm1fZW11bGF0ZV9oYWx0X25vc2tpcCh2Y3B1KSBcXHUwMDI2XFx1MDAyNiByZXQ7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NzItfVxcbmFyY2gveDg2L2t2bS94ODYuYzo4NjczOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZW11bGF0ZV9oYWx0KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY3NC1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODY3NT1mYXN0cGF0aF90IGhhbmRsZV9mYXN0cGF0aF9obHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NzktXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2ODA6XFx0aWYgKCFrdm1fZW11bGF0ZV9oYWx0KHZjcHUpKVxcbmFyY2gveDg2L2t2bS94ODYuYy04NjgxLVxcdFxcdHJldHVybiBFWElUX0ZBU1RQQVRIX0VYSVRfVVNFUlNQQUNFO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTg2OTA9aW50IGt2bV9lbXVsYXRlX2FwX3Jlc2V0X2hvbGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2OTMtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2OTQ6XFx0cmV0dXJuIF9fa3ZtX2VtdWxhdGVfaGFsdCh2Y3B1LCBLVk1fTVBfU1RBVEVfQVBfUkVTRVRfSE9MRCxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY5NS1cXHRcXHRcXHRcXHRcXHRLVk1fRVhJVF9BUF9SRVNFVF9IT0xEKSBcXHUwMDI2XFx1MDAyNiByZXQ7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2Lmg9NDc3PWludCBrdm1fZW11bGF0ZV9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuaDo0Nzg6aW50IGt2bV9lbXVsYXRlX2hhbHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2Lmg6NDc5OmludCBrdm1fZW11bGF0ZV9oYWx0X25vc2tpcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuaC00ODAtaW50IGt2bV9lbXVsYXRlX2FwX3Jlc2V0X2hvbGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTk6NTA6MTEuNTMzNjQ4NTE3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5NjE5NDUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhhbHQgRW11bGF0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoZSBjaGFuZ2UgaXMgY2xlYXJseSB3aXRoaW4gYGt2bV9lbXVsYXRlX2hhbHRgLiBJdCdzIGRlZmluaXRlbHkgYWN0aXZlIGFuZCB0aGUgY29kZSBmbG93IGNhbiByZWFjaCBpdCwgd2hpY2ggaXMgdGhlIGZpcnN0IGdvb2Qgc2lnbi4gVGhpcyBpcyBzcGVjaWZpYyB0byBLVk0geDg2LCB3aGljaCBtYWtlcyBzZW5zZS4gQmVmb3JlIEkgZGlnIHRvbyBkZWVwLCBsZXQncyBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGUgb2J2aW91czogaXMgS1ZNIGVuYWJsZWQ/IEknbGwgY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoaXMuIEtWTSBpcyB1c3VhbGx5IGVuYWJsZWQgYXMgYSBiYXNlIHBsYXRmb3JtLlxuXG5SaWdodCwgdGhlIGZ1bmN0aW9uIGl0c2VsZiwgYGt2bV9lbXVsYXRlX2hhbHRgLCByZXNpZGVzIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBUaGF0J3MgdGhlIGV4cGVjdGVkIGxvY2F0aW9uLlxuXG5JJ20gZm9jdXNpbmcgb24gYGt2bV9lbXVsYXRlX2hhbHRgIGhlcmUuIE5vdywgc2luY2Ugd2UgYXJlIHRhbGtpbmcgYWJvdXQgZW11bGF0aW9uLCBsZXQgbWUgcXVpY2tseSBnbGFuY2UgYXQgYGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uYC4gSSB3YW50IHRvIGtub3cgaWYgdGhpcyBjaGFuZ2UgaGFzIGFueSBpbnRlcnBsYXkgd2l0aCB0aGUgYEtWTV9FWElUX0RFQlVHYCBleGl0IHJlYXNvbi4gV2UgZG9uJ3Qgd2FudCB0byBtaXNzIHNvbWV0aGluZyBvYnZpb3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDg2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE5OjUwOjE1LjcyOTg0NDU3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4Mzk4MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2NwdWlkLmM9MjE2MT1pbnQga3ZtX2VtdWxhdGVfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMjE3Ni1cXHRrdm1fZWR4X3dyaXRlKHZjcHUsIGVkeCk7XFxuYXJjaC94ODYva3ZtL2NwdWlkLmM6MjE3NzpcXHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL2NwdWlkLmMtMjE3OC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9MjM5MT1zdGF0aWMgaW50IGt2bV9odl9oeXBlcmNhbGxfY29tcGxldGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcmVzdWx0KVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTI0MDUtXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjI0MDY6XFx0cmV0ID0ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTI0MDctXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jPTkyMz1zdGF0aWMgZmFzdHBhdGhfdCBfX2hhbmRsZV9mYXN0cGF0aF93cm1zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCBkYXRhKVxcbi0tXFxuYXJjaC94ODYva3ZtL21zcnMuYy05NDItXFxuYXJjaC94ODYva3ZtL21zcnMuYzo5NDM6XFx0aWYgKCFrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTk0NC1cXHRcXHRyZXR1cm4gRVhJVF9GQVNUUEFUSF9FWElUX1VTRVJTUEFDRTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MTk3Mz1zdGF0aWMgaW50IG5wZl9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMDAzLVxcdFxcdFxcdHRyYWNlX2t2bV9mYXN0X21taW8oZ3BhKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjIwMDQ6XFx0XFx0XFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjAwNS1cXHRcXHR9XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTIyMTk9c3RhdGljIGludCB2bWxvYWRfdm1zYXZlX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgdm1sb2FkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMjM5LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjI0MDpcXHRyZXQgPSBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIyNDEtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTIzODY9c3RhdGljIGludCBzdGdpX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIzOTItXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyMzkzOlxcdHJldCA9IGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjM5NC1cXHRzdm1fc2V0X2dpZih0b19zdm0odmNwdSksIHRydWUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0yMzk4PXN0YXRpYyBpbnQgY2xnaV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yNDA0LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjQwNTpcXHRyZXQgPSBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0MDYtXFx0c3ZtX3NldF9naWYodG9fc3ZtKHZjcHUpLCBmYWxzZSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTI0MTA9c3RhdGljIGludCBpbnZscGdhX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0MjMtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyNDI0OlxcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI0MjUtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0yNTI5PXN0YXRpYyBpbnQgaW52bHBnX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTI1MzQtXFx0a3ZtX21tdV9pbnZscGcodmNwdSwgdG9fc3ZtKHZjcHUpLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sLmV4aXRfaW5mb18xKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjI1MzU6XFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjUzNi19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTMyMzY9c3RhdGljIGludCBwYXVzZV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMjQ4LVxcdGt2bV92Y3B1X29uX3NwaW4odmNwdSwgaW5fa2VybmVsKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjMyNDk6XFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzI1MC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTE1OT1zdGF0aWMgaW50IG5lc3RlZF92bXhfc3VjY2VlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTE2My1cXHRcXHRcXHQgICAgWDg2X0VGTEFHU19aRiB8IFg4Nl9FRkxBR1NfU0YgfCBYODZfRUZMQUdTX09GKSk7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoxNjQ6XFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMTY1LX1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MTY3PXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9mYWlsSW52YWxpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTE3Mi1cXHRcXHRcXHR8IFg4Nl9FRkxBR1NfQ0YpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MTczOlxcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTE3NC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTE3Nj1zdGF0aWMgaW50IG5lc3RlZF92bXhfZmFpbFZhbGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMTkxLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MTkyOlxcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTE5My19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTYwNTQ9c3RhdGljIGludCBoYW5kbGVfaW52dnBpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTYxMzMtXFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NjEzNDpcXHRcXHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MTM1LVxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjE4Nj1zdGF0aWMgaW50IGhhbmRsZV92bWZ1bmMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MjIyLVxcdH1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjYyMjM6XFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjIyNC1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvc2d4LmM9MTQxPXN0YXRpYyBpbnQgX19oYW5kbGVfZW5jbHNfZWNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3NneC5jLTIwOS1cXHRpZiAoIXJldClcXG5hcmNoL3g4Ni9rdm0vdm14L3NneC5jOjIxMDpcXHRcXHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC9zZ3guYy0yMTEtXFx0aWYgKHJldCA9PSAtRUZBVUxUKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9zZ3guYz0yOTc9c3RhdGljIGludCBoYW5kbGVfZW5jbHNfZWluaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9zZ3guYy0zNTUtXFx0a3ZtX2VheF93cml0ZSh2Y3B1LCByZXQpO1xcbmFyY2gveDg2L2t2bS92bXgvc2d4LmM6MzU2OlxcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3NneC5jLTM1Ny19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTU2NzI9c3RhdGljIGludCBoYW5kbGVfY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01NzI4LVxcdFxcdFxcdHRyYWNlX2t2bV9jcl9yZWFkKGNyLCB2YWwpO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NTcyOTpcXHRcXHRcXHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01NzMwLVxcdFxcdGNhc2UgODpcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTczMy1cXHRcXHRcXHR0cmFjZV9rdm1fY3JfcmVhZChjciwgdmFsKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjU3MzQ6XFx0XFx0XFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTczNS1cXHRcXHR9XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTU3NDEtXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo1NzQyOlxcdFxcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTU3NDMtXFx0ZGVmYXVsdDpcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NTg1Mj1zdGF0aWMgaW50IGhhbmRsZV9pbnZscGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01ODU2LVxcdGt2bV9tbXVfaW52bHBnKHZjcHUsIGV4aXRfcXVhbGlmaWNhdGlvbik7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo1ODU3OlxcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTU4NTgtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz01ODYwPXN0YXRpYyBpbnQgaGFuZGxlX2FwaWNfYWNjZXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTg3NS1cXHRcXHRcXHRrdm1fbGFwaWNfc2V0X2VvaSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjU4NzY6XFx0XFx0XFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTg3Ny1cXHRcXHR9XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTU5OTk9c3RhdGljIGludCBoYW5kbGVfZXB0X21pc2NvbmZpZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYwMTMtXFx0XFx0dHJhY2Vfa3ZtX2Zhc3RfbW1pbyhncGEpO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjAxNDpcXHRcXHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MDE1LVxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjEyNj1zdGF0aWMgaW50IGhhbmRsZV9wYXVzZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYxMzctXFx0a3ZtX3ZjcHVfb25fc3Bpbih2Y3B1LCB0cnVlKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjYxMzg6XFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjEzOS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTUyPWludCBrdm1fY29tcGxldGVfaW5zbl9ncChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlcnIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTU2LVxcdGVsc2VcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTU3OlxcdFxcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTU4LVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTcxNj1pbnQga3ZtX2VtdWxhdGVfeHNldGJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy03MjQtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjcyNTpcXHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTcyNi19XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NzcyPWludCBrdm1fZW11bGF0ZV9yZHBtYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzgzLVxcdGt2bV9lZHhfd3JpdGUodmNwdSwgZGF0YSBcXHUwMDNlXFx1MDAzZSAzMik7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjc4NDpcXHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTc4NS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9Nzg4PWludCBrdm1fZW11bGF0ZV9hc19ub3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ODYuYy03ODkte1xcbmFyY2gveDg2L2t2bS94ODYuYzo3OTA6XFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy03OTEtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTU0NTA9aW50IGt2bV9lbXVsYXRlX3diaW52ZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTQ1Mi1cXHRrdm1fZW11bGF0ZV93YmludmRfbm9za2lwKHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYzo1NDUzOlxcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTQ1NC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjEzNz1zdGF0aWMgaW50IGt2bV92Y3B1X2NoZWNrX2h3X2JwKHVuc2lnbmVkIGxvbmcgYWRkciwgdTMyIHR5cGUsIHUzMiBkcjcsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjE1MS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjE1MjppbnQga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ODYuYy02MTUzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy02MTc0LX1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjE3NTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pO1xcbmFyY2gveDg2L2t2bS94ODYuYy02MTc2LVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTYzMTA9aW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy02Mzg2LVxcdCAqIEVNVUxUWVBFX1NLSVAgd2l0aG91dCBFTVVMVFlQRV9DT01QTEVURV9VU0VSX0VYSVQgaXMgaW50ZW5kZWQgZm9yXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjYzODc6XFx0ICogdXNlICpvbmx5KiBieSB2ZW5kb3IgY2FsbGJhY2tzIGZvciBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbigpLlxcbmFyY2gveDg2L2t2bS94ODYuYy02Mzg4LVxcdCAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHVwZGF0aW5nIGludGVycnVwdGliaWxpdHkgc3RhdGUgYW5kXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjU0OT1zdGF0aWMgaW50IGNvbXBsZXRlX2Zhc3RfcGlvX291dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU1NS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjU1NjpcXHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1NTctfVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTY1NTk9c3RhdGljIGludCBrdm1fZmFzdF9waW9fb3V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNpemUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU3NS1cXHRcXHRcXHRjb21wbGV0ZV9mYXN0X3Bpb19vdXRfcG9ydF8weDdlO1xcbmFyY2gveDg2L2t2bS94ODYuYzo2NTc2OlxcdFxcdGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy02NTc3LVxcdH0gZWxzZSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjU4ND1zdGF0aWMgaW50IGNvbXBsZXRlX2Zhc3RfcGlvX2luKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy02NjAyLVxcbmFyY2gveDg2L2t2bS94ODYuYzo2NjAzOlxcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjYwNC19XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjYyNz1pbnQga3ZtX2Zhc3RfcGlvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNpemUsIHVuc2lnbmVkIHNob3J0IHBvcnQsIGludCBpbilcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy02NjM0LVxcdFxcdHJldCA9IGt2bV9mYXN0X3Bpb19vdXQodmNwdSwgc2l6ZSwgcG9ydCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjY2MzU6XFx0cmV0dXJuIHJldCBcXHUwMDI2XFx1MDAyNiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjYzNi19XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NzI3OD1zdGF0aWMgaW50IGNvbXBsZXRlX2h5cGVyY2FsbF9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy03Mjg0LVxcdGt2bV9yYXhfd3JpdGVfcmF3KHZjcHUsIHJldCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjcyODU6XFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy03Mjg2LX1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz04NjU4PWludCBrdm1fZW11bGF0ZV9oYWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODY1OS17XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NjA6XFx0aW50IHJldCA9IGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy04NjYxLVxcbmFyY2gveDg2L2t2bS94ODYuYy04NjYyLVxcdC8qXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjg2NjM6XFx0ICogSWYga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oKSB0cmlnZ2VyZWQgYSBzaW5nbGVzdGVwXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2NjQtXFx0ICogZGVidWcgZXhjZXB0aW9uLCByZXR1cm4gdG8gdXNlcnNwYWNlIGltbWVkaWF0ZWx5IHNvIHRoZVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTg2OTA9aW50IGt2bV9lbXVsYXRlX2FwX3Jlc2V0X2hvbGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ODYuYy04NjkxLXtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODY5MjpcXHRpbnQgcmV0ID0ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg2OTMtXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA2NjI9aW50IGt2bV9oYW5kbGVfaW52cGNpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgdHlwZSwgZ3ZhX3QgZ3ZhKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNjk3LVxcdFxcdGt2bV9tbXVfaW52cGNpZF9ndmEodmNwdSwgb3BlcmFuZC5nbGEsIG9wZXJhbmQucGNpZCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNjk4OlxcdFxcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA2OTktXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA3MTMtXFx0XFx0a3ZtX2ludmFsaWRhdGVfcGNpZCh2Y3B1LCBvcGVyYW5kLnBjaWQpO1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMDcxNDpcXHRcXHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNzE1LVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNzMxLVxcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0hfR1VFU1QsIHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMDczMjpcXHRcXHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNzMzLVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5oPTQ5MD1pbnQga3ZtX2VtdWxhdGVfcmRwbWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmgtNDkxLVxcbmFyY2gveDg2L2t2bS94ODYuaDo0OTI6aW50IGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5oLTQ5My1pbnQga3ZtX2NvbXBsZXRlX2luc25fZ3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYz0xNDA5PXN0YXRpYyBpbnQga3ZtX3hlbl9oeXBlcmNhbGxfc2V0X3Jlc3VsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCByZXN1bHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTQxMS1cXHRrdm1fcmF4X3dyaXRlX3Jhdyh2Y3B1LCByZXN1bHQpO1xcbmFyY2gveDg2L2t2bS94ZW4uYzoxNDEyOlxcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTQxMy19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE5OjUwOjE1Ljc4ODI0ODEzOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzcwMzMwMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb246XG5cbioqVW5kZXJzdGFuZGluZyBga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb25gKipcblxuT2theSwgc28gSSd2ZSBiZWVuIHBvaW50ZWQgdG93YXJkcyB0aGUgYGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uYCBmdW5jdGlvbi4gTXkgbWVudGFsIG1hcCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIEtWTSdzIHg4NiBlbXVsYXRpb24gbGF5ZXIsIGFuZCB0aGUgcGF0aCBgYXJjaC94ODYva3ZtL3g4Ni5jYCBjb25maXJtcyB0aGlzLiBUaGF0IGZpbGUgaXMgYSBjb3JlIGNvbXBvbmVudCBmb3IgeDg2IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLVk0gZnVuY3Rpb25hbGl0eS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gaXMgZG9pbmcuIFwiU2tpcFwiIHN1Z2dlc3RzIGl0J3MgaGFuZGxpbmcgdGhlIGJ5cGFzc2luZyBvZiBpbnN0cnVjdGlvbnMgdGhhdCBhcmUgZW11bGF0ZWQuIFNvLCB0aGUgcXVlc3Rpb24gaXMsICp3aHkqIGFyZSB3ZSBza2lwcGluZz8gQW5kICpob3cqIGRvZXMgdGhlIGZ1bmN0aW9uIGFjY29tcGxpc2ggdGhhdD8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBzY2VuYXJpb3Mgb3IgY29udGV4dHMgaW4gd2hpY2ggaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxlYWRzIHRvIHNraXBwaW5nPyBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGUgaXRzZWxmIHRvIHVuZGVyc3RhbmQgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDM1LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTk6NTA6MTkuMTI1MjgyNTc0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjkzMzYzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuYz02MTM3PXN0YXRpYyBpbnQga3ZtX3ZjcHVfY2hlY2tfaHdfYnAodW5zaWduZWQgbG9uZyBhZGRyLCB1MzIgdHlwZSwgdTMyIGRyNyxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy02MTUxLVxcbmFyY2gveDg2L2t2bS94ODYuYzo2MTUyOmludCBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTYxNTMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxOTo1MDoxOS4xODIyMTgxMzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU5MTEwNDk1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIHdpdGggaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLCBwYXJ0aWN1bGFybHkgaG93IEtWTSBoYW5kbGVzIHNpdHVhdGlvbnMgd2hlcmUgaXQgKmRvZXNuJ3QqIG5lZWQgdG8gZnVsbHkgZW11bGF0ZSBhbiBpbnN0cnVjdGlvbi4gVGhlIG5hbWluZyBvZiBga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb25gIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiBXZSdyZSBub3QgdGFsa2luZyBhYm91dCBhIGNvcmUgZW11bGF0aW9uIHBhdGg7IGluc3RlYWQsIHRoaXMgcG9pbnRzIHRvIGEgbWVjaGFuaXNtIGZvciBieXBhc3NpbmcgcG90ZW50aWFsbHkgZXhwZW5zaXZlIGVtdWxhdGlvbiBzdGVwcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgcmlnaHQgaW50byB0aGUgY29kZSB0byBmaWd1cmUgb3V0OlxuXG4qICAgV2hhdCBraW5kcyBvZiBpbnN0cnVjdGlvbnMgYXJlIHdlIHNraXBwaW5nPyBBcmUgdGhleSBwcml2aWxlZ2VkIGluc3RydWN0aW9ucyB0aGF0IG1pZ2h0IGJlIGhhbmRsZWQgZGlyZWN0bHkgYnkgdGhlIGhvc3Qga2VybmVsLCBvciBwZXJoYXBzIGluc3RydWN0aW9ucyB0aGF0IGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBzb21ldGhpbmcgS1ZNIGtub3dzIGhvdyB0byBvcHRpbWl6ZT9cbiogICBXaGF0J3MgdGhlIGNyaXRlcmlhIGZvciBza2lwcGluZz8gSXMgaXQgYmFzZWQgb24gQ1BVIGZlYXR1cmVzLCBndWVzdCBzdGF0ZSwgaW5zdHJ1Y3Rpb24gdHlwZSwgb3Igc29tZXRoaW5nIGVsc2U/XG4qICAgV2hhdCBhcmUgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucz8gSXMgaXQganVzdCBhIHNpbXBsZSBjaGVjaywgb3IgbW9yZSBjb21wbGV4PyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIG5vdGljZWFibGUgaW1wcm92ZW1lbnQgaW4gZ3Vlc3QgZXhlY3V0aW9uIHNwZWVkLCBvciBhIHN1YnRsZSBvcHRpbWl6YXRpb24/XG4qICAgSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCBvdGhlciBLVk0gY29tcG9uZW50cywgbGlrZSB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIG9yIG1lbW9yeSBhY2Nlc3M/IEl0IGlzIGltcG9ydGFudCB0byBrbm93IGlmIHRoZXNlIHNraXAgbWVjaGFuaXNtcyBpbnRlcmFjdCBzYWZlbHkgd2l0aCBvdGhlciBtZWNoYW5pc21zIGluIEtWTS5cblxuSSdsbCBiZSBsb29raW5nIGZvciB0aGUgZnVuZGFtZW50YWwgdHJhZGUtb2ZmczogdGhlIGNvbXBsZXhpdHkgb2YgZGV0ZWN0aW5nIHNraXAtYWJsZSBpbnN0cnVjdGlvbnMgdmVyc3VzIHRoZSBiZW5lZml0IG9mIHNraXBwaW5nLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGFyY2hpdGVjdHVyYWwgcHJpbmNpcGxlcyBkcm92ZSB0aGUgZGVzaWduIGhlcmUgLSB3aGF0IGFyZSB0aGUgdHJhZGUtb2ZmcyB3ZSdyZSBtYWtpbmcgYW5kIHdoYXQgYXNzdW1wdGlvbnMgYXJlIG1hZGUgd2hlbiBkZWNpZGluZyB0byBza2lwIHRoZSBpbnN0cnVjdGlvbiBlbXVsYXRpb24gcGF0aC4gSSdsbCBhbHNvIHdhbnQgdG8gdHJhY2sgYW55IGVycm9yIGhhbmRsaW5nIHRvIHNlZSBob3cgdGhlIHN5c3RlbSBpcyBkZXNpZ25lZCB0byByZXNwb25kIHRvIGV4Y2VwdGlvbmFsIHNpdHVhdGlvbnMgdGhhdCBtaWdodCBvY2N1ciBkdXJpbmcgYW4gaW5zdHJ1Y3Rpb24gc2tpcC4gVGhpcyBpcyBnb2luZyB0byBiZSBnb29kOyBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcyBhcmUgYWx3YXlzIGludGVyZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg4MCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE5OjUwOjM1LjA5MzI2OTUwOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDMwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxNTIsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYxNTI6XFx0aW50IGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG42MTUzOlxcdHtcXG42MTU0OlxcdFxcdHVuc2lnbmVkIGxvbmcgcmZsYWdzID0ga3ZtX3g4Nl9jYWxsKGdldF9yZmxhZ3MpKHZjcHUpO1xcbjYxNTU6XFx0XFx0aW50IHI7XFxuNjE1NjpcXHRcXG42MTU3OlxcdFxcdHIgPSBrdm1feDg2X2NhbGwoc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbikodmNwdSk7XFxuNjE1ODpcXHRcXHRpZiAodW5saWtlbHkoIXIpKVxcbjYxNTk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNjE2MDpcXHRcXG42MTYxOlxcdFxcdGt2bV9wbXVfaW5zdHJ1Y3Rpb25fcmV0aXJlZCh2Y3B1KTtcXG42MTYyOlxcdFxcbjYxNjM6XFx0XFx0LypcXG42MTY0OlxcdFxcdCAqIHJmbGFncyBpcyB0aGUgb2xkLCBcXFwicmF3XFxcIiB2YWx1ZSBvZiB0aGUgZmxhZ3MuICBUaGUgbmV3IHZhbHVlIGhhc1xcbjYxNjU6XFx0XFx0ICogbm90IGJlZW4gc2F2ZWQgeWV0LlxcbjYxNjY6XFx0XFx0ICpcXG42MTY3OlxcdFxcdCAqIFRoaXMgaXMgY29ycmVjdCBldmVuIGZvciBURiBzZXQgYnkgdGhlIGd1ZXN0LCBiZWNhdXNlIFxcXCJ0aGVcXG42MTY4OlxcdFxcdCAqIHByb2Nlc3NvciB3aWxsIG5vdCBnZW5lcmF0ZSB0aGlzIGV4Y2VwdGlvbiBhZnRlciB0aGUgaW5zdHJ1Y3Rpb25cXG42MTY5OlxcdFxcdCAqIHRoYXQgc2V0cyB0aGUgVEYgZmxhZ1xcXCIuXFxuNjE3MDpcXHRcXHQgKi9cXG42MTcxOlxcdFxcdGlmICh1bmxpa2VseShyZmxhZ3MgXFx1MDAyNiBYODZfRUZMQUdTX1RGKSlcXG42MTcyOlxcdFxcdFxcdHIgPSBrdm1faW5qZWN0X2VtdWxhdGVkX2RiKHZjcHUsIERSNl9CUyk7XFxuNjE3MzpcXHRcXHRyZXR1cm4gcjtcXG42MTc0OlxcdH1cXG42MTc1OlxcdEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbik7XFxuNjE3NjpcXHRcXG42MTc3OlxcdHN0YXRpYyBib29sIGt2bV9pc19jb2RlX2JyZWFrcG9pbnRfaW5oaWJpdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG42MTc4OlxcdHtcXG42MTc5OlxcdFxcdGlmICh2Y3B1LVxcdTAwM2VndWVzdF9kZWJ1ZyBcXHUwMDI2IEtWTV9HVUVTVERCR19VU0VfSFdfQlApXFxuNjE4MDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNjE4MTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTk6NTA6MzUuMDk0MjIwNTc4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNzU5MzkxMzU2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0gRGVidWdnaW5nIEZsb3cqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgS1ZNIGRlYnVnZ2luZyBwcm9jZXNzIHdvcmtzLCBzcGVjaWZpY2FsbHkgaG93IGFuIGVtdWxhdGVkIGRlYnVnIGV2ZW50IGdldHMgaW5qZWN0ZWQuIEknbSByZWNhbGxpbmcgdGhhdCBga3ZtX2luamVjdF9lbXVsYXRlZF9kYmAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSBpdCdzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgYHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uYCB0byBgS1ZNX0VYSVRfREVCVUdgLiBBIHJldHVybiB2YWx1ZSBvZiAwIGZyb20gdGhpcyBmdW5jdGlvbiB3b3VsZCB0aGVuIHRyaWdnZXIgYW4gZXhpdCBiYWNrIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgY29uc2lzdGVudCB3aXRoIGhvdyB3ZSBoYW5kbGUgdGhlc2UgZGVidWcgc2l0dWF0aW9ucy5cblxuVGhlcmVmb3JlLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGBrdm1faW5qZWN0X2VtdWxhdGVkX2RiYCBmdW5jdGlvbiBhbmQgY29uZmlybSB3aGV0aGVyIGl0IGlzIGluZGVlZCBiZWhhdmluZyBhcyBJIGV4cGVjdC4gSXQncyB0aW1lIHRvIGNoZWNrIHRoZSBjb2RlIGFuZCBzZWUgZXhhY3RseSB3aGF0J3MgZ29pbmcgb24gd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBjaXJjdW1zdGFuY2VzIGFuZCB0aGUgcGF0aCB0byB0aGF0IGBLVk1fRVhJVF9ERUJVR2AgZXhpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MzAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE5OjUyOjUyLjY4ODEzNjM2OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk2MjMyOTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBrdm1faW5qZWN0X2VtdWxhdGVkX2RiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9NTg0Nj1zdGF0aWMgdm9pZCB0b2dnbGVfaW50ZXJydXB0aWJpbGl0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtYXNrKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTU4NjQtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjU4NjU6c3RhdGljIGludCBrdm1faW5qZWN0X2VtdWxhdGVkX2RiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBkcjYpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTU4NjYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxOTo1Mjo1My4wODQzNzI1ODJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyNTE4OTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGBrdm1faW5qZWN0X2VtdWxhdGVkX2RiYDpcblxuKipEaXZpbmcgaW50byBga3ZtX2luamVjdF9lbXVsYXRlZF9kYmAqKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBrdm1faW5qZWN0X2VtdWxhdGVkX2RiYCBmdW5jdGlvbi4gSW5zdGFudGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIEtWTSBhbmQgaG93IGl0J3MgbWFuYWdpbmcgZXhjZXB0aW9ucy4gSSdtIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGludm9sdmVkIGluIGluamVjdGluZyBhIGRlYnVnIGV4Y2VwdGlvbiBpbnRvIGEgZ3Vlc3QgVk0sIGJ1dCBJIG5lZWQgdG8gc2VlIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gdG8gY29uZmlybSB0aGUgbmF0dXJlIG9mIHRoZSBzcGVjaWZpYyBcImRlYnVnXCIgYWN0aW9uLiBJcyBpdCBlbXVsYXRpbmcgYSBoYXJkd2FyZSBkZWJ1ZyBldmVudD8gT3IgaXMgaXQgYSBzb2Z0d2FyZSB0cmlnZ2VyP1xuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOiBob3cgdGhlIGluamVjdGVkIGRlYnVnIGV2ZW50IGlzIGNvbnN0cnVjdGVkLCB3aGVyZSB0aGUgY29udGV4dCBjb21lcyBmcm9tLCB3aGF0IGl0J3MgdHJ5aW5nIHRvIGRvLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdOKAmXMgbW9kaWZ5aW5nIGd1ZXN0IHJlZ2lzdGVyIHN0YXRlLCBtYW5pcHVsYXRpbmcgdGhlIGludGVycnVwdCB2ZWN0b3IsIG9yIHNpbXVsYXRpbmcgYSBzcGVjaWZpYyBjb25kaXRpb24gdGhhdCB0aGUgZ3Vlc3QncyBkZWJ1ZyByZWdpc3RlcnMgd291bGQgb3RoZXJ3aXNlIGNhdXNlLiBJJ2xsIG5lZWQgdG8gZm9sbG93IHRoZSBleGVjdXRpb24gZmxvdyB3aXRoaW4gdGhlIGZ1bmN0aW9uIHRvIGFzc2VzcyBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gVGhlIGtleSB3aWxsIGJlIHRvIGlkZW50aWZ5IHRoZSBwcmVjaXNlIG1lY2hhbmlzbXMgdXNlZCB0byBpbnRlZ3JhdGUgdGhlIGluamVjdGVkIGV2ZW50IGludG8gdGhlIGd1ZXN0J3MgZXhlY3V0aW9uLiBBbmQgd2hhdCdzIGJlaW5nIGRvbmUgaGVyZSB0byBzYWZlbHkgZG8gdGhhdCwgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHJ1bm5pbmcgVk0uIEkgYW50aWNpcGF0ZSBzb21lIGNyaXRpY2FsIHNlY3Rpb24gaGFuZGxpbmcgZm9yIHRocmVhZCBzYWZldHkgdG9vOyBLVk0gaXMgZ2VuZXJhbGx5IHZlcnkgY2FyZWZ1bCBhYm91dCB0aGF0LiBUaGlzIHNlZW1zIGxpa2UgYSBmdW5jdGlvbiB0aGF0IHJlcXVpcmVzIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBoYXJkd2FyZSwgdGhlIGFyY2hpdGVjdHVyZSwgYW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIEtWTSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyOTMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxOTo1Mjo1Ni44MDk1NjQxMTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAwNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1ODY1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1ODY1OlxcdHN0YXRpYyBpbnQga3ZtX2luamVjdF9lbXVsYXRlZF9kYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgZHI2KVxcbjU4NjY6XFx0e1xcbjU4Njc6XFx0XFx0c3RydWN0IGt2bV9ydW4gKmt2bV9ydW4gPSB2Y3B1LVxcdTAwM2VydW47XFxuNTg2ODpcXHRcXG41ODY5OlxcdFxcdGlmICh2Y3B1LVxcdTAwM2VndWVzdF9kZWJ1ZyBcXHUwMDI2IChLVk1fR1VFU1REQkdfVVNFX0hXX0JQIHwgS1ZNX0dVRVNUREJHX1NJTkdMRVNURVApKSB7XFxuNTg3MDpcXHRcXHRcXHRrdm1fcnVuLVxcdTAwM2VkZWJ1Zy5hcmNoLmRyNiA9IGRyNiB8IERSNl9BQ1RJVkVfTE9XO1xcbjU4NzE6XFx0XFx0XFx0a3ZtX3J1bi1cXHUwMDNlZGVidWcuYXJjaC5wYyA9IGt2bV9nZXRfbGluZWFyX3JpcCh2Y3B1KTtcXG41ODcyOlxcdFxcdFxcdGt2bV9ydW4tXFx1MDAzZWRlYnVnLmFyY2guZXhjZXB0aW9uID0gREJfVkVDVE9SO1xcbjU4NzM6XFx0XFx0XFx0a3ZtX3J1bi1cXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9ERUJVRztcXG41ODc0OlxcdFxcdFxcdHJldHVybiAwO1xcbjU4NzU6XFx0XFx0fVxcbjU4NzY6XFx0XFxuNTg3NzpcXHRcXHRrdm1fcXVldWVfZXhjZXB0aW9uX3AodmNwdSwgREJfVkVDVE9SLCBkcjYpO1xcbjU4Nzg6XFx0XFx0cmV0dXJuIDE7XFxuNTg3OTpcXHR9XFxuNTg4MDpcXHRcXG41ODgxOlxcdHN0YXRpYyBpbnQgaW5qZWN0X2VtdWxhdGVkX2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuNTg4MjpcXHR7XFxuNTg4MzpcXHRcXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZXggPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5lbXVsYXRlX2N0eHQtXFx1MDAzZWV4Y2VwdGlvbjtcXG41ODg0OlxcdFxcbjU4ODU6XFx0XFx0aWYgKGV4LVxcdTAwM2V2ZWN0b3IgPT0gREJfVkVDVE9SKVxcbjU4ODY6XFx0XFx0XFx0cmV0dXJuIGt2bV9pbmplY3RfZW11bGF0ZWRfZGIodmNwdSwgZXgtXFx1MDAzZWRyNik7XFxuNTg4NzpcXHRcXG41ODg4OlxcdFxcdGlmIChleC1cXHUwMDNldmVjdG9yID09IFBGX1ZFQ1RPUilcXG41ODg5OlxcdFxcdFxcdGt2bV9pbmplY3RfZW11bGF0ZWRfcGFnZV9mYXVsdCh2Y3B1LCBleCk7XFxuNTg5MDpcXHRcXHRlbHNlIGlmIChleC1cXHUwMDNlZXJyb3JfY29kZV92YWxpZClcXG41ODkxOlxcdFxcdFxcdGt2bV9xdWV1ZV9leGNlcHRpb25fZSh2Y3B1LCBleC1cXHUwMDNldmVjdG9yLCBleC1cXHUwMDNlZXJyb3JfY29kZSk7XFxuNTg5MjpcXHRcXHRlbHNlXFxuNTg5MzpcXHRcXHRcXHRrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIGV4LVxcdTAwM2V2ZWN0b3IpO1xcbjU4OTQ6XFx0XFx0cmV0dXJuIDE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE5OjUyOjU2LjgxMDE2NjI4MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDUwMDkxODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEltcGFjdCBvZiBhIEtWTSBQYXRjaCoqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIHRoaXMgcGF0Y2ggYW5kIHdoYXQncyBnb2luZyBvbiBpbiBteSBoZWFkIGFzIEkgY29uc2lkZXIgaXQuIEkgc2VlIHRoYXQgYGt2bV9pbmplY3RfZW11bGF0ZWRfZGJgIGlzIGNvcnJlY3RseSBzZXR0aW5nIGBrdm1fcnVuLVx1MDAzZWV4aXRfcmVhc29uYCB0byBgS1ZNX0VYSVRfREVCVUdgIGFuZCByZXR1cm5pbmcgMC4gVGhhdCdzIGV4cGVjdGVkIGJlaGF2aW9yLiBUaGVuIHdlJ3ZlIGdvdCBga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb25gIGFsc28gcmV0dXJuaW5nIDAsIGFuZCBmaW5hbGx5LCBga3ZtX2VtdWxhdGVfaGFsdGAgZ2V0dGluZyBhIHJldHVybiB2YWx1ZSBvZiBgcmV0ID0gMGAuXG5cblRoZSBrZXkgZGlmZmVyZW5jZSBoZXJlIGlzIGhvdyBga3ZtX2VtdWxhdGVfaGFsdGAgaXMgYmVoYXZpbmcgKmFmdGVyKiB0aGUgcGF0Y2guIEJlZm9yZSwgaXQgd2FzIGNhbGxpbmcgYGt2bV9lbXVsYXRlX2hhbHRfbm9za2lwYCBhbmQgQU5EaW5nIHRoZSByZXN1bHRzLiBDcml0aWNhbGx5LCBga3ZtX2VtdWxhdGVfaGFsdF9ub3NraXBgIHdvdWxkIG92ZXJ3cml0ZSB0aGUgYGV4aXRfcmVhc29uYCBzZXQgZWFybGllciwgcG90ZW50aWFsbHkgY2hhbmdpbmcgYEtWTV9FWElUX0RFQlVHYCB0byBgS1ZNX0VYSVRfSExUYCBvciBzaW1pbGFyLiBOb3csIHRoZSBwYXRjaCAqcHJlc2VydmVzKiBgS1ZNX0VYSVRfREVCVUdgIGlmIGl0IHdhcyBhbHJlYWR5IHNldC4gSWYgYHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID09IEtWTV9FWElUX0RFQlVHYCwgaXQgaW1tZWRpYXRlbHkgcmV0dXJucyBgcmV0YCwgc28gdGhlIGRlYnVnIGV4aXQgcmVhc29uIGlzIG1haW50YWluZWQuXG5cblRoaXMgaXMgYSAqKmRlZmluaXRlKiogZnVuY3Rpb25hbCBjaGFuZ2UuIFRoaXMgYWx0ZXJhdGlvbiBvZiB0aGUgZXhpdCByZWFzb24gaGFuZGxpbmcgd2FycmFudHMgdGhvcm91Z2ggZnV6emluZy4gTXkgbWFpbiBmb2N1cyBzeW1ib2wgaGVyZSB3aWxsIGJlIGBrdm1fZW11bGF0ZV9oYWx0YCwgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhlIGNyaXRpY2FsIGxvZ2ljIHNoaWZ0IG9jY3VycmVkLiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmdXp6aW5nIGhhcm5lc3NlcyB0YXJnZXQgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBhbmQgdGhlIGNvZGUgcGF0aHMgdGhhdCBpbnRlcmFjdCB3aXRoIGl0LlxuXG5JJ20gYWxzbyB0aGlua2luZyBhYm91dCB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBhZmZlY3QgdGhpcy4gT2J2aW91c2x5LCBgS1ZNYCBpcyB0aGUgcHJpbWFyeSBvbmUsIGJ1dCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZm9yIGFueSBvdGhlciByZWxldmFudCBzZXR0aW5ncy4gYENPTkZJR19LVk1gIGl0c2VsZiBpcyBnZW5lcmFsbHkgZW5hYmxlZCwgc28gSSdsbCBuZWVkIHRvIGludmVzdGlnYXRlIHRoYXQgY2FyZWZ1bGx5LCBhbmQgaXQncyBhIGJvb2xlYW4gb3IgdHJpc3RhdGUsIHNvIEknbGwga2VlcCB0aGF0IGluIG1pbmQuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBNeSBmdXp6aW5nIHN0cmF0ZWd5IHdpbGwgbmVlZCB0byBjb3ZlciBhbGwgcG9zc2libGUgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjI5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTk6NTM6MDIuODYwMjU5OTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MTcyNzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMwLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMyOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTk6NTM6MDIuOTI1NDM1MzY5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4Mjc4MDQyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS1ZNIEJ1ZyBGaXggYW5kIERlZmluaW5nIGEgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2gsIGFuZCBpdCBsb29rcyBsaWtlIGEgcHJldHR5IHNwZWNpZmljIGZpeCB3aXRoaW4gdGhlIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGl0J3MgYWJvdXQgYGt2bV9lbXVsYXRlX2hhbHRgLiBUaGUgYnVnIGlzIHRoYXQgYGt2bV9lbXVsYXRlX2hhbHRgIHdhcyBpbmNvcnJlY3RseSBvdmVyd3JpdGluZyB0aGUgYEtWTV9FWElUX0RFQlVHYCBleGl0IHJlYXNvbiB3aXRoIGBLVk1fRVhJVF9ITFRgIHVuZGVyIGNlcnRhaW4gc2luZ2xlLXN0ZXAgZGVidWdnaW5nIGNvbmRpdGlvbnMgZHVyaW5nIGFuIGluc3RydWN0aW9uIHNraXAuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBmdXp6aW5nLCBhcyBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHRoZSBlbXVsYXRvciBiZWhhdmVzLiBUaGUgcmVsZXZhbnQgY29uZmlnIGhlcmUgaXMgYEtWTWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBrdm1fZW11bGF0ZV9oYWx0YCBhcyB0aGUgZm9jdXMgc3ltYm9sLiBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGV4ZWN1dGlvbiBmbG93LiBBaCwgcmlnaHQsIGl0J3MgY2FsbGVkIHdoZW4gYSBndWVzdCBleGVjdXRlcyBhbiBITFQgaW5zdHJ1Y3Rpb24uIFRoYXQgY291bGQgaGFwcGVuIGZyZXF1ZW50bHksIGVzcGVjaWFsbHkgaWYgdGhlIGd1ZXN0IGlzIGlkbGluZywgYnV0IGl0J3MgYW4gZXhpdCBoYW5kbGVyLCBub3Qgc29tZXRoaW5nIGxpa2UgYGt2bV92Y3B1X3J1bmAuIFRoYXQgbWVhbnMgaXQncyBzcGVjaWZpYyBlbm91Z2ggdG8gYmUgY29uc2lkZXJlZCBhIHZhbHVhYmxlIGZvY3VzIHN5bWJvbC4gSSdtIG5vdCBzZWVpbmcgYW55IG90aGVyIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCB3aXRoIHRoaXMgcGF0Y2gsIHdoaWNoIHJlaW5mb3JjZXMgbXkgZGVjaXNpb24uXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXMuIEknbGwgZ2V0IHRoZSByZXN1bHRzIHNldCB1cCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjM4LCJPdXRwdXRUb2tlbnMiOjEyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxOTo1MzowOS43NTMyNDEzOTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODUxNjI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2VtdWxhdGVfaGFsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIHdoZXJlIGBrdm1fZW11bGF0ZV9oYWx0YCB3b3VsZCBvdmVyd3JpdGUgdGhlIGBLVk1fRVhJVF9ERUJVR2AgZXhpdCByZWFzb24gd2l0aCBgS1ZNX0VYSVRfSExUYCBpZiBhIHNpbmdsZS1zdGVwIGRlYnVnIGV4Y2VwdGlvbiB3YXMgdHJpZ2dlcmVkIGR1cmluZyB0aGUgc2tpcCBvZiB0aGUgZW11bGF0ZWQgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2VtdWxhdGVfaGFsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIHdoZXJlIGBrdm1fZW11bGF0ZV9oYWx0YCB3b3VsZCBvdmVyd3JpdGUgdGhlIGBLVk1fRVhJVF9ERUJVR2AgZXhpdCByZWFzb24gd2l0aCBgS1ZNX0VYSVRfSExUYCBpZiBhIHNpbmdsZS1zdGVwIGRlYnVnIGV4Y2VwdGlvbiB3YXMgdHJpZ2dlcmVkIGR1cmluZyB0aGUgc2tpcCBvZiB0aGUgZW11bGF0ZWQgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowpl6tk[1] Phase: Succeeded StartedAt: 2026-07-09 19:53:21 +0000 UTC FinishedAt: 2026-07-09 19:53:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpl6tk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-09 19:53:21 +0000 UTC FinishedAt: 2026-07-09 19:53:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpl6tk[2] Phase: Succeeded StartedAt: 2026-07-09 19:53:21 +0000 UTC FinishedAt: 2026-07-10 00:06:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-09 19:53:21 +0000 UTC FinishedAt: 2026-07-10 00:06:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-09 19:53:21 +0000 UTC FinishedAt: 2026-07-09 19:53:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-09 19:53:21 +0000 UTC FinishedAt: 2026-07-09 19:53:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowpl6tk/series-workflowpl6tk-convert-artifact-3677166931/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-09 19:53:32 +0000 UTC FinishedAt: 2026-07-09 20:26:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-09 19:53:32 +0000 UTC FinishedAt: 2026-07-09 20:26:16 +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:*e5c2326e-2647-4815-80a8-1f4a18fcd3d4,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-workflowpl6tk/series-workflowpl6tk-convert-artifact-3677166931/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": "c1b47e43-0daa-4013-b78a-4350da8070f2", "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-workflowpl6tk/series-workflowpl6tk-build-action-2870763649/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-09 19:53:32 +0000 UTC FinishedAt: 2026-07-09 20:26: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:*e5c2326e-2647-4815-80a8-1f4a18fcd3d4,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-workflowpl6tk/series-workflowpl6tk-convert-artifact-3677166931/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": "c1b47e43-0daa-4013-b78a-4350da8070f2", "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-workflowpl6tk/series-workflowpl6tk-build-action-2870763649/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-09 20:26:16 +0000 UTC FinishedAt: 2026-07-09 20:26:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-09 20:26:16 +0000 UTC FinishedAt: 2026-07-09 20:26:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-09 20:26:16 +0000 UTC FinishedAt: 2026-07-09 20:26:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-09 20:26:16 +0000 UTC FinishedAt: 2026-07-09 20:26:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowpl6tk/series-workflowpl6tk-convert-artifact-1257347914/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-09 20:26:26 +0000 UTC FinishedAt: 2026-07-09 20:28:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-09 20:26:26 +0000 UTC FinishedAt: 2026-07-09 20:28:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c1b47e43-0daa-4013-b78a-4350da8070f2,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-workflowpl6tk/series-workflowpl6tk-build-action-2870763649/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-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-09 20:28:42 +0000 UTC FinishedAt: 2026-07-09 20:28:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-09 20:28:42 +0000 UTC FinishedAt: 2026-07-09 20:28:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-09 20:28:42 +0000 UTC FinishedAt: 2026-07-09 21:00:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-09 20:28:42 +0000 UTC FinishedAt: 2026-07-09 21:00:44 +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:*e5c2326e-2647-4815-80a8-1f4a18fcd3d4,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-workflowpl6tk/series-workflowpl6tk-convert-artifact-1257347914/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": "7bbfa91e-55a6-42be-9d41-d2c8f109e3b5", "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-workflowpl6tk/series-workflowpl6tk-build-action-2085224302/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-09 20:28:42 +0000 UTC FinishedAt: 2026-07-09 21:00:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e5c2326e-2647-4815-80a8-1f4a18fcd3d4,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-workflowpl6tk/series-workflowpl6tk-convert-artifact-1257347914/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": "7bbfa91e-55a6-42be-9d41-d2c8f109e3b5", "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-workflowpl6tk/series-workflowpl6tk-build-action-2085224302/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-09 21:00:44 +0000 UTC FinishedAt: 2026-07-09 21:00:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-09 21:00:44 +0000 UTC FinishedAt: 2026-07-09 21:00:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-09 21:00:44 +0000 UTC FinishedAt: 2026-07-09 21:03:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-09 21:00:44 +0000 UTC FinishedAt: 2026-07-09 21:03:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7bbfa91e-55a6-42be-9d41-d2c8f109e3b5,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-workflowpl6tk/series-workflowpl6tk-build-action-2085224302/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-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-09 21:03:26 +0000 UTC FinishedAt: 2026-07-10 00:06:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-09 21:03:26 +0000 UTC FinishedAt: 2026-07-10 00:06:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"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:*c1b47e43-0daa-4013-b78a-4350da8070f2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7bbfa91e-55a6-42be-9d41-d2c8f109e3b5,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-workflowpl6tk/series-workflowpl6tk-build-action-2870763649/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-workflowpl6tk/series-workflowpl6tk-build-action-2085224302/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-09 21:03:26 +0000 UTC FinishedAt: 2026-07-09 21:03:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-09 21:03:26 +0000 UTC FinishedAt: 2026-07-09 21:03:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-09 21:03:27 +0000 UTC FinishedAt: 2026-07-09 21:04:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-09 21:03:27 +0000 UTC FinishedAt: 2026-07-09 21:03:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"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-workflowpl6tk/series-workflowpl6tk-convert-artifact-535448799/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-09 21:03:27 +0000 UTC FinishedAt: 2026-07-09 21:03:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-09 21:04:07 +0000 UTC FinishedAt: 2026-07-10 00:06:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpl6tk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_emulate_halt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"37f6eb61-de7a-444c-9d89-6020e8948bd1","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-09 21:04:07 +0000 UTC FinishedAt: 2026-07-10 00:06:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c1b47e43-0daa-4013-b78a-4350da8070f2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7bbfa91e-55a6-42be-9d41-d2c8f109e3b5,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-workflowpl6tk/series-workflowpl6tk-build-action-2870763649/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-workflowpl6tk/series-workflowpl6tk-build-action-2085224302/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-workflowpl6tk/series-workflowpl6tk-convert-artifact-535448799/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,}