Name: series-workflow4cpjl Phase: Succeeded StartedAt: 2026-07-30 03:44:21 +0000 UTC FinishedAt: 2026-07-30 07:51:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cpjl[0] Phase: Succeeded StartedAt: 2026-07-30 03:44:21 +0000 UTC FinishedAt: 2026-07-30 03:55:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cpjl[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 03:44:21 +0000 UTC FinishedAt: 2026-07-30 03:55:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "fdec474c65fd35d5a6e1497ed50a9f98c07192f0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "fdec474c65fd35d5a6e1497ed50a9f98c07192f0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "2446c254-c727-4596-9016-0db36df2ac73" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "array_map_mmap_fault", "array_map_mmap_pages", "bpf_map_mmap_fault", "bpf_map_mmap_pages" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAzOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXJyYXlfbWFwX21tYXBfZmF1bHQmIzM0OywKICAgICYjMzQ7YXJyYXlfbWFwX21tYXBfcGFnZXMmIzM0OywKICAgICYjMzQ7YnBmX21hcF9tbWFwX2ZhdWx0JiMzNDssCiAgICAmIzM0O2JwZl9tYXBfbW1hcF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGFycmF5IG1hcCBtZW1vcnkgbWFwcGluZyBsb2dpYyB0byB1c2UgbGF6eSBmYXVsdGluZyBpbnN0ZWFkIG9mIGVhZ2VyIG1hcHBpbmcuIEl0IGludHJvZHVjZXMgbmV3IGZhdWx0IGhhbmRsZXJzIGBhcnJheV9tYXBfbW1hcF9mYXVsdGAgYW5kIGBhcnJheV9tYXBfbW1hcF9wYWdlc2AgaW4gYGFycmF5bWFwLmNgLCBhbmQgY29ycmVzcG9uZGluZyBzeXNjYWxsIGhhbmRsZXJzIGluIGBzeXNjYWxsLmNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDM6NTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjY2NhMTljODM3NDE4OTJhN2FkOTNhMmJhOGY2MjhkN2Q1ZjcwYzgwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMDM6NTQ6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcbmluZGV4IDdiZmMyODY3MzEyNDQuLmViNTc4Y2UwODdiNzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5AQCAtMTQ1LDYgJiM0MzsxNDUsOSBAQCBzdHJ1Y3QgYnBmX21hcF9vcHMge1xuIFx0aW50ICgqbWFwX2RpcmVjdF92YWx1ZV9tZXRhKShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHRcdFx0ICAgICB1NjQgaW1tLCB1MzIgKm9mZik7XG4gXHRpbnQgKCptYXBfbW1hcCkoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuJiM0MztcdHZtX2ZhdWx0X3QgKCptYXBfbW1hcF9mYXVsdCkoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpO1xuJiM0MztcdHZtX2ZhdWx0X3QgKCptYXBfbW1hcF9wYWdlcykoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4mIzQzO1x0XHRcdFx0ICAgICBwZ29mZl90IHN0YXJ0X3Bnb2ZmLCBwZ29mZl90IGVuZF9wZ29mZik7XG4gXHRfX3BvbGxfdCAoKm1hcF9wb2xsKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0XHQgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqcHRzKTtcbiBcdHVuc2lnbmVkIGxvbmcgKCptYXBfZ2V0X3VubWFwcGVkX2FyZWEpKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJyYXltYXAuYyBiL2tlcm5lbC9icGYvYXJyYXltYXAuY1xuaW5kZXggMjQ4YjQ4MTgxNzhjZC4uMzU5NGUyNmI5ZmI4OCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYXJyYXltYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcnJheW1hcC5jXG5AQCAtNyw2ICYjNDM7Nyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L292ZXJmbG93LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWx0ZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvYnRmLmhcdTAwM2VcbkBAIC01NzYsMTcgJiM0Mzs1NzcsMTE4IEBAIHN0YXRpYyBpbnQgYXJyYXlfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIHN0YXRpYyBpbnQgYXJyYXlfbWFwX21tYXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0c3RydWN0IGJwZl9hcnJheSAqYXJyYXkgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FycmF5LCBtYXApO1xuLVx0cGdvZmZfdCBwZ29mZiA9IFBBR0VfQUxJR04oc2l6ZW9mKCphcnJheSkpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFxuIFx0aWYgKCEobWFwLVx1MDAzZW1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfTU1BUEFCTEUpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmICh2bWEtXHUwMDNldm1fcGdvZmYgKiBQQUdFX1NJWkUgJiM0MzsgKHZtYS1cdTAwM2V2bV9lbmQgLSB2bWEtXHUwMDNldm1fc3RhcnQpIFx1MDAzZVxuJiM0MztcdC8qIHVzZSB1NjQgbWF0aCBzbyB0aGUgb2Zmc2V0IGNhbm5vdCBvdmVyZmxvdyBvbiAzMi1iaXQgYXJjaHMgKi9cbiYjNDM7XHRpZiAoKHU2NCl2bWEtXHUwMDNldm1fcGdvZmYgKiBQQUdFX1NJWkUgJiM0MzsgKHZtYS1cdTAwM2V2bV9lbmQgLSB2bWEtXHUwMDNldm1fc3RhcnQpIFx1MDAzZVxuIFx0ICAgIFBBR0VfQUxJR04oKHU2NClhcnJheS1cdTAwM2VtYXAubWF4X2VudHJpZXMgKiBhcnJheS1cdTAwM2VlbGVtX3NpemUpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHJldHVybiByZW1hcF92bWFsbG9jX3JhbmdlKHZtYSwgYXJyYXlfbWFwX3ZtYWxsb2NfYWRkcihhcnJheSksXG4tXHRcdFx0XHQgICB2bWEtXHUwMDNldm1fcGdvZmYgJiM0MzsgcGdvZmYpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIGJhY2tpbmcgbWVtb3J5IGlzIHZtYWxsb2MmIzM5O2VkIHVwIGZyb250LCBzbyBpbnN0ZWFkIG9mIHdpcmluZyB1cFxuJiM0MztcdCAqIGV2ZXJ5IFBURSBoZXJlIHdlIGxldCB0aGUgZmF1bHQgaGFuZGxlcnMgaW5zZXJ0IHBhZ2VzIG9uIGRlbWFuZC5cbiYjNDM7XHQgKiByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWwoKSB1c2VkIHRvIHNldCB0aGVzZSBmbGFncyBmb3IgdXM7IGtlZXBcbiYjNDM7XHQgKiB0aGVtIHRvIHByZXNlcnZlIGJlaGF2aW9yIChubyBWTUEgZXhwYW5zaW9uLCBleGNsdWRlZCBmcm9tIGNvcmVkdW1wKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmVzb2x2ZSB0aGUgdm1hbGxvYyBwYWdlIGJhY2tpbmcgdGhlIHZhbHVlLWFyZWEgb2Zmc2V0IG9mIGEgZmF1bHQuICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGFnZSAqYXJyYXlfbWFwX2ZhdWx0X3BhZ2Uoc3RydWN0IGJwZl9hcnJheSAqYXJyYXksIHBnb2ZmX3QgcGdvZmYpXG4mIzQzO3tcbiYjNDM7XHR1NjQgYXJyYXlfc2l6ZSwgb2ZmO1xuJiM0MztcbiYjNDM7XHRhcnJheV9zaXplID0gUEFHRV9BTElHTigodTY0KWFycmF5LVx1MDAzZW1hcC5tYXhfZW50cmllcyAqIGFycmF5LVx1MDAzZWVsZW1fc2l6ZSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogcGdvZmYgaXMgdGhlIGZhdWx0aW5nIHBhZ2UmIzM5O3Mgb2Zmc2V0IGludG8gdGhlIG1hcHBlZCB2YWx1ZSBhcmVhICh0aGVcbiYjNDM7XHQgKiBicGZfYXJyYXkgaGVhZGVyIHByZWNlZGVzIGFycmF5LVx1MDAzZXZhbHVlIGFuZCBpcyBub3QgbWFwcGVkKS4gR3VhcmQgdGhlXG4mIzQzO1x0ICogc2hpZnQgYW5kIHRoZSBib3VuZHMgZXhwbGljaXRseSwgdGhlIHNhbWUgd2F5IHRoYXRcbiYjNDM7XHQgKiByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWwoKSBkb2VzIGZvciB0aGUgZWFnZXIgcGF0aCwgaW5zdGVhZCBvZlxuJiM0MztcdCAqIHJlbHlpbmcgb24gdGhlIG1tYXAoKS10aW1lIGJvdW5kcyBjaGVjayBhbG9uZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY2hlY2tfc2hsX292ZXJmbG93KHBnb2ZmLCBQQUdFX1NISUZULCBcdTAwMjZvZmYpKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0aWYgKG9mZiBcdTAwM2U9IGFycmF5X3NpemUpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZtYWxsb2NfdG9fcGFnZShhcnJheS1cdTAwM2V2YWx1ZSAmIzQzOyBvZmYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm1fZmF1bHRfdCBhcnJheV9tYXBfbW1hcF9mYXVsdChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfYXJyYXkgKmFycmF5ID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcnJheSwgbWFwKTtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiYjNDM7XG4mIzQzO1x0cGFnZSA9IGFycmF5X21hcF9mYXVsdF9wYWdlKGFycmF5LCB2bWYtXHUwMDNlcGdvZmYpO1xuJiM0MztcdGlmICghcGFnZSlcbiYjNDM7XHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4mIzQzO1xuJiM0MztcdGdldF9wYWdlKHBhZ2UpO1xuJiM0MztcdHZtZi1cdTAwM2VwYWdlID0gcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEZhdWx0LWFyb3VuZCBoYW5kbGVyOiBpbnN0YWxsIFBURXMgZm9yIHRoZSB3aG9sZSBbc3RhcnRfcGdvZmYsIGVuZF9wZ29mZl1cbiYjNDM7ICogd2luZG93IHVuZGVyIGEgc2luZ2xlIHBhZ2UtdGFibGUgbG9jaywgc28gdGhhdCBwb3B1bGF0aW5nIGEgbGFyZ2UgbWFwcGluZ1xuJiM0MzsgKiAoZS5nLiBtbWFwKE1BUF9QT1BVTEFURSkgb3IgYSBsaW5lYXIgYWNjZXNzIHBhdHRlcm4pIGRvZXMgbm90IHRha2Ugb25lIGZ1bGxcbiYjNDM7ICogZmF1bHQgcGVyIHBhZ2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm1fZmF1bHRfdCBhcnJheV9tYXBfbW1hcF9wYWdlcyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbiYjNDM7XHRcdFx0XHQgICAgICAgcGdvZmZfdCBzdGFydF9wZ29mZiwgcGdvZmZfdCBlbmRfcGdvZmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7XG4mIzQzO1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXHUwMDNldm1hO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYWRkciwgcnNzID0gMDtcbiYjNDM7XHR2bV9mYXVsdF90IHJldCA9IDA7XG4mIzQzO1x0cHRlX3QgKnN0YXJ0X3B0ZTtcbiYjNDM7XHRwZ29mZl90IHBnb2ZmO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBQVEUgdGFibGUgZm9yIHRoaXMgUE1EIG11c3QgYWxyZWFkeSBleGlzdDsgaW5zdGFsbGluZyBpdCBuZWVkc1xuJiM0MztcdCAqIG1tLWludGVybmFsIGhlbHBlcnMuIElmIGl0IGlzIG1pc3NpbmcsIGxldCB0aGUgcmVndWxhciAtXHUwMDNlZmF1bHQgcGF0aFxuJiM0MztcdCAqIGluc3RhbGwgaXQgYW5kIHJlbHkgb24gdGhlIG5leHQgZmF1bHQtYXJvdW5kIHRvIGJhdGNoIHRoZSByZXN0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwbWRfbm9uZSgqdm1mLVx1MDAzZXBtZCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0YWRkciA9IHZtYS1cdTAwM2V2bV9zdGFydCAmIzQzOyAoKHN0YXJ0X3Bnb2ZmIC0gdm1hLVx1MDAzZXZtX3Bnb2ZmKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4mIzQzO1x0c3RhcnRfcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh2bWEtXHUwMDNldm1fbW0sIHZtZi1cdTAwM2VwbWQsIGFkZHIsIFx1MDAyNnZtZi1cdTAwM2VwdGwpO1xuJiM0MztcdGlmICghc3RhcnRfcHRlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0dm1mLVx1MDAzZXB0ZSA9IHN0YXJ0X3B0ZTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChwZ29mZiA9IHN0YXJ0X3Bnb2ZmOyBwZ29mZiBcdTAwM2M9IGVuZF9wZ29mZjtcbiYjNDM7XHQgICAgIHBnb2ZmJiM0MzsmIzQzOywgdm1mLVx1MDAzZXB0ZSYjNDM7JiM0MzssIGFkZHIgJiM0Mzs9IFBBR0VfU0laRSkge1xuJiM0MztcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcbiYjNDM7XHRcdGlmICghcHRlX25vbmUocHRlcF9nZXQodm1mLVx1MDAzZXB0ZSkpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRwYWdlID0gYXJyYXlfbWFwX2ZhdWx0X3BhZ2UoYXJyYXksIHBnb2ZmKTtcbiYjNDM7XHRcdGlmICghcGFnZSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuJiM0MztcdFx0Zm9saW9fZ2V0KGZvbGlvKTtcbiYjNDM7XHRcdHNldF9wdGVfcmFuZ2Uodm1mLCBmb2xpbywgcGFnZSwgMSwgYWRkcik7XG4mIzQzO1x0XHRyc3MmIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKGFkZHIgPT0gdm1mLVx1MDAzZWFkZHJlc3MpXG4mIzQzO1x0XHRcdHJldCA9IFZNX0ZBVUxUX05PUEFHRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGFkZF9tbV9jb3VudGVyKHZtYS1cdTAwM2V2bV9tbSwgTU1fRklMRVBBR0VTLCByc3MpO1xuJiM0MztcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCB2bWYtXHUwMDNlcHRsKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGJvb2wgYXJyYXlfbWFwX21ldGFfZXF1YWwoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1ldGEwLFxuQEAgLTgxMiw2ICYjNDM7OTE0LDggQEAgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XG4gXHQubWFwX2RpcmVjdF92YWx1ZV9hZGRyID0gYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyLFxuIFx0Lm1hcF9kaXJlY3RfdmFsdWVfbWV0YSA9IGFycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YSxcbiBcdC5tYXBfbW1hcCA9IGFycmF5X21hcF9tbWFwLFxuJiM0MztcdC5tYXBfbW1hcF9mYXVsdCA9IGFycmF5X21hcF9tbWFwX2ZhdWx0LFxuJiM0MztcdC5tYXBfbW1hcF9wYWdlcyA9IGFycmF5X21hcF9tbWFwX3BhZ2VzLFxuIFx0Lm1hcF9zZXFfc2hvd19lbGVtID0gYXJyYXlfbWFwX3NlcV9zaG93X2VsZW0sXG4gXHQubWFwX2NoZWNrX2J0ZiA9IGFycmF5X21hcF9jaGVja19idGYsXG4gXHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCAwZmY5ZTNhYTI5M2Q1Li45OTBjMmY1YmU0MGFmIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtMTA3Nyw5ICYjNDM7MTA3NywzOSBAQCBzdGF0aWMgdm9pZCBicGZfbWFwX21tYXBfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHRcdGJwZl9tYXBfd3JpdGVfYWN0aXZlX2RlYyhtYXApO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogQ2FsbGVkIGZvciBtYXBzIHRoYXQgcG9wdWxhdGUgdGhlaXIgbWVtb3J5LW1hcHBlZCByZWdpb24gbGF6aWx5LCBpLmUuIHRoYXRcbiYjNDM7ICogcmV0dXJuIHdpdGhvdXQgd2lyaW5nIHVwIGFueSBQVEVzIGZyb20gdGhlaXIgLVx1MDAzZW1hcF9tbWFwIGNhbGxiYWNrLiBNYXBzIHRoYXRcbiYjNDM7ICogcG9wdWxhdGUgdGhlIHdob2xlIFZNQSBlYWdlcmx5IChlLmcuIHZpYSByZW1hcF92bWFsbG9jX3JhbmdlKCkpIG5ldmVyIHJlYWNoXG4mIzQzOyAqIGhlcmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm1fZmF1bHRfdCBicGZfbWFwX21tYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gdm1mLVx1MDAzZXZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4mIzQzO1xuJiM0MztcdGlmICghbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfbW1hcF9mYXVsdClcbiYjNDM7XHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9tbWFwX2ZhdWx0KG1hcCwgdm1mKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogRmF1bHQtYXJvdW5kOiBiYXRjaC1wb3B1bGF0ZSBQVEVzIGFyb3VuZCB0aGUgZmF1bHRpbmcgYWRkcmVzcy4gKi9cbiYjNDM7c3RhdGljIHZtX2ZhdWx0X3QgYnBmX21hcF9tbWFwX3BhZ2VzKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuJiM0MztcdFx0XHRcdCAgICAgcGdvZmZfdCBzdGFydF9wZ29mZiwgcGdvZmZfdCBlbmRfcGdvZmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gdm1mLVx1MDAzZXZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4mIzQzO1xuJiM0MztcdGlmICghbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfbW1hcF9wYWdlcylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfbW1hcF9wYWdlcyhtYXAsIHZtZiwgc3RhcnRfcGdvZmYsIGVuZF9wZ29mZik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBicGZfbWFwX2RlZmF1bHRfdm1vcHMgPSB7XG4gXHQub3Blblx0XHQ9IGJwZl9tYXBfbW1hcF9vcGVuLFxuIFx0LmNsb3NlXHRcdD0gYnBmX21hcF9tbWFwX2Nsb3NlLFxuJiM0MztcdC5mYXVsdFx0XHQ9IGJwZl9tYXBfbW1hcF9mYXVsdCxcbiYjNDM7XHQubWFwX3BhZ2VzXHQ9IGJwZl9tYXBfbW1hcF9wYWdlcyxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgYnBmX21hcF9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMzo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcnJheV9tYXBfbW1hcF9mYXVsdCYjMzQ7LAogICAgJiMzNDthcnJheV9tYXBfbW1hcF9wYWdlcyYjMzQ7LAogICAgJiMzNDticGZfbWFwX21tYXBfZmF1bHQmIzM0OywKICAgICYjMzQ7YnBmX21hcF9tbWFwX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgYXJyYXkgbWFwIG1lbW9yeSBtYXBwaW5nIGxvZ2ljIHRvIHVzZSBsYXp5IGZhdWx0aW5nIGluc3RlYWQgb2YgZWFnZXIgbWFwcGluZy4gSXQgaW50cm9kdWNlcyBuZXcgZmF1bHQgaGFuZGxlcnMgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBhbmQgYGFycmF5X21hcF9tbWFwX3BhZ2VzYCBpbiBgYXJyYXltYXAuY2AsIGFuZCBjb3JyZXNwb25kaW5nIHN5c2NhbGwgaGFuZGxlcnMgaW4gYHN5c2NhbGwuY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNjY2ExOWM4Mzc0MTg5MmE3YWQ5M2EyYmE4ZjYyOGQ3ZDVmNzBjODAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAwMzo1NDoyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oCmluZGV4IDdiZmMyODY3MzEyNDQuLmViNTc4Y2UwODdiNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGYuaApAQCAtMTQ1LDYgJiM0MzsxNDUsOSBAQCBzdHJ1Y3QgYnBmX21hcF9vcHMgewogCWludCAoKm1hcF9kaXJlY3RfdmFsdWVfbWV0YSkoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwKIAkJCQkgICAgIHU2NCBpbW0sIHUzMiAqb2ZmKTsKIAlpbnQgKCptYXBfbW1hcCkoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwomIzQzOwl2bV9mYXVsdF90ICgqbWFwX21tYXBfZmF1bHQpKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKTsKJiM0MzsJdm1fZmF1bHRfdCAoKm1hcF9tbWFwX3BhZ2VzKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKJiM0MzsJCQkJICAgICBwZ29mZl90IHN0YXJ0X3Bnb2ZmLCBwZ29mZl90IGVuZF9wZ29mZik7CiAJX19wb2xsX3QgKCptYXBfcG9sbCkoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqcHRzKTsKIAl1bnNpZ25lZCBsb25nICgqbWFwX2dldF91bm1hcHBlZF9hcmVhKShzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJyYXltYXAuYyBiL2tlcm5lbC9icGYvYXJyYXltYXAuYwppbmRleCAyNDhiNDgxODE3OGNkLi4zNTk0ZTI2YjlmYjg4IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2FycmF5bWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcnJheW1hcC5jCkBAIC03LDYgJiM0Mzs3LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9lcnIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb3ZlcmZsb3cuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maWx0ZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wZXJmX2V2ZW50LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9idGYuaCZndDsKQEAgLTU3NiwxNyAmIzQzOzU3NywxMTggQEAgc3RhdGljIGludCBhcnJheV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsCiBzdGF0aWMgaW50IGFycmF5X21hcF9tbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBicGZfYXJyYXkgKmFycmF5ID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcnJheSwgbWFwKTsKLQlwZ29mZl90IHBnb2ZmID0gUEFHRV9BTElHTihzaXplb2YoKmFycmF5KSkgJmd0OyZndDsgUEFHRV9TSElGVDsKIAogCWlmICghKG1hcC0mZ3Q7bWFwX2ZsYWdzICZhbXA7IEJQRl9GX01NQVBBQkxFKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAodm1hLSZndDt2bV9wZ29mZiAqIFBBR0VfU0laRSAmIzQzOyAodm1hLSZndDt2bV9lbmQgLSB2bWEtJmd0O3ZtX3N0YXJ0KSAmZ3Q7CiYjNDM7CS8qIHVzZSB1NjQgbWF0aCBzbyB0aGUgb2Zmc2V0IGNhbm5vdCBvdmVyZmxvdyBvbiAzMi1iaXQgYXJjaHMgKi8KJiM0MzsJaWYgKCh1NjQpdm1hLSZndDt2bV9wZ29mZiAqIFBBR0VfU0laRSAmIzQzOyAodm1hLSZndDt2bV9lbmQgLSB2bWEtJmd0O3ZtX3N0YXJ0KSAmZ3Q7CiAJICAgIFBBR0VfQUxJR04oKHU2NClhcnJheS0mZ3Q7bWFwLm1heF9lbnRyaWVzICogYXJyYXktJmd0O2VsZW1fc2l6ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHJlbWFwX3ZtYWxsb2NfcmFuZ2Uodm1hLCBhcnJheV9tYXBfdm1hbGxvY19hZGRyKGFycmF5KSwKLQkJCQkgICB2bWEtJmd0O3ZtX3Bnb2ZmICYjNDM7IHBnb2ZmKTsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGJhY2tpbmcgbWVtb3J5IGlzIHZtYWxsb2MmIzM5O2VkIHVwIGZyb250LCBzbyBpbnN0ZWFkIG9mIHdpcmluZyB1cAomIzQzOwkgKiBldmVyeSBQVEUgaGVyZSB3ZSBsZXQgdGhlIGZhdWx0IGhhbmRsZXJzIGluc2VydCBwYWdlcyBvbiBkZW1hbmQuCiYjNDM7CSAqIHJlbWFwX3ZtYWxsb2NfcmFuZ2VfcGFydGlhbCgpIHVzZWQgdG8gc2V0IHRoZXNlIGZsYWdzIGZvciB1czsga2VlcAomIzQzOwkgKiB0aGVtIHRvIHByZXNlcnZlIGJlaGF2aW9yIChubyBWTUEgZXhwYW5zaW9uLCBleGNsdWRlZCBmcm9tIGNvcmVkdW1wKS4KJiM0MzsJICovCiYjNDM7CXZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZXNvbHZlIHRoZSB2bWFsbG9jIHBhZ2UgYmFja2luZyB0aGUgdmFsdWUtYXJlYSBvZmZzZXQgb2YgYSBmYXVsdC4gKi8KJiM0MztzdGF0aWMgc3RydWN0IHBhZ2UgKmFycmF5X21hcF9mYXVsdF9wYWdlKHN0cnVjdCBicGZfYXJyYXkgKmFycmF5LCBwZ29mZl90IHBnb2ZmKQomIzQzO3sKJiM0MzsJdTY0IGFycmF5X3NpemUsIG9mZjsKJiM0MzsKJiM0MzsJYXJyYXlfc2l6ZSA9IFBBR0VfQUxJR04oKHU2NClhcnJheS0mZ3Q7bWFwLm1heF9lbnRyaWVzICogYXJyYXktJmd0O2VsZW1fc2l6ZSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHBnb2ZmIGlzIHRoZSBmYXVsdGluZyBwYWdlJiMzOTtzIG9mZnNldCBpbnRvIHRoZSBtYXBwZWQgdmFsdWUgYXJlYSAodGhlCiYjNDM7CSAqIGJwZl9hcnJheSBoZWFkZXIgcHJlY2VkZXMgYXJyYXktJmd0O3ZhbHVlIGFuZCBpcyBub3QgbWFwcGVkKS4gR3VhcmQgdGhlCiYjNDM7CSAqIHNoaWZ0IGFuZCB0aGUgYm91bmRzIGV4cGxpY2l0bHksIHRoZSBzYW1lIHdheSB0aGF0CiYjNDM7CSAqIHJlbWFwX3ZtYWxsb2NfcmFuZ2VfcGFydGlhbCgpIGRvZXMgZm9yIHRoZSBlYWdlciBwYXRoLCBpbnN0ZWFkIG9mCiYjNDM7CSAqIHJlbHlpbmcgb24gdGhlIG1tYXAoKS10aW1lIGJvdW5kcyBjaGVjayBhbG9uZS4KJiM0MzsJICovCiYjNDM7CWlmIChjaGVja19zaGxfb3ZlcmZsb3cocGdvZmYsIFBBR0VfU0hJRlQsICZhbXA7b2ZmKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwlpZiAob2ZmICZndDs9IGFycmF5X3NpemUpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHZtYWxsb2NfdG9fcGFnZShhcnJheS0mZ3Q7dmFsdWUgJiM0Mzsgb2ZmKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZtX2ZhdWx0X3QgYXJyYXlfbWFwX21tYXBfZmF1bHQoc3RydWN0IGJwZl9tYXAgKm1hcCwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9hcnJheSAqYXJyYXkgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FycmF5LCBtYXApOwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZTsKJiM0MzsKJiM0MzsJcGFnZSA9IGFycmF5X21hcF9mYXVsdF9wYWdlKGFycmF5LCB2bWYtJmd0O3Bnb2ZmKTsKJiM0MzsJaWYgKCFwYWdlKQomIzQzOwkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKJiM0MzsKJiM0MzsJZ2V0X3BhZ2UocGFnZSk7CiYjNDM7CXZtZi0mZ3Q7cGFnZSA9IHBhZ2U7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEZhdWx0LWFyb3VuZCBoYW5kbGVyOiBpbnN0YWxsIFBURXMgZm9yIHRoZSB3aG9sZSBbc3RhcnRfcGdvZmYsIGVuZF9wZ29mZl0KJiM0MzsgKiB3aW5kb3cgdW5kZXIgYSBzaW5nbGUgcGFnZS10YWJsZSBsb2NrLCBzbyB0aGF0IHBvcHVsYXRpbmcgYSBsYXJnZSBtYXBwaW5nCiYjNDM7ICogKGUuZy4gbW1hcChNQVBfUE9QVUxBVEUpIG9yIGEgbGluZWFyIGFjY2VzcyBwYXR0ZXJuKSBkb2VzIG5vdCB0YWtlIG9uZSBmdWxsCiYjNDM7ICogZmF1bHQgcGVyIHBhZ2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZtX2ZhdWx0X3QgYXJyYXlfbWFwX21tYXBfcGFnZXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsCiYjNDM7CQkJCSAgICAgICBwZ29mZl90IHN0YXJ0X3Bnb2ZmLCBwZ29mZl90IGVuZF9wZ29mZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfYXJyYXkgKmFycmF5ID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcnJheSwgbWFwKTsKJiM0MzsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtJmd0O3ZtYTsKJiM0MzsJdW5zaWduZWQgbG9uZyBhZGRyLCByc3MgPSAwOwomIzQzOwl2bV9mYXVsdF90IHJldCA9IDA7CiYjNDM7CXB0ZV90ICpzdGFydF9wdGU7CiYjNDM7CXBnb2ZmX3QgcGdvZmY7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBQVEUgdGFibGUgZm9yIHRoaXMgUE1EIG11c3QgYWxyZWFkeSBleGlzdDsgaW5zdGFsbGluZyBpdCBuZWVkcwomIzQzOwkgKiBtbS1pbnRlcm5hbCBoZWxwZXJzLiBJZiBpdCBpcyBtaXNzaW5nLCBsZXQgdGhlIHJlZ3VsYXIgLSZndDtmYXVsdCBwYXRoCiYjNDM7CSAqIGluc3RhbGwgaXQgYW5kIHJlbHkgb24gdGhlIG5leHQgZmF1bHQtYXJvdW5kIHRvIGJhdGNoIHRoZSByZXN0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHBtZF9ub25lKCp2bWYtJmd0O3BtZCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYWRkciA9IHZtYS0mZ3Q7dm1fc3RhcnQgJiM0MzsgKChzdGFydF9wZ29mZiAtIHZtYS0mZ3Q7dm1fcGdvZmYpICZsdDsmbHQ7IFBBR0VfU0hJRlQpOwomIzQzOwlzdGFydF9wdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHZtYS0mZ3Q7dm1fbW0sIHZtZi0mZ3Q7cG1kLCBhZGRyLCAmYW1wO3ZtZi0mZ3Q7cHRsKTsKJiM0MzsJaWYgKCFzdGFydF9wdGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJdm1mLSZndDtwdGUgPSBzdGFydF9wdGU7CiYjNDM7CiYjNDM7CWZvciAocGdvZmYgPSBzdGFydF9wZ29mZjsgcGdvZmYgJmx0Oz0gZW5kX3Bnb2ZmOwomIzQzOwkgICAgIHBnb2ZmJiM0MzsmIzQzOywgdm1mLSZndDtwdGUmIzQzOyYjNDM7LCBhZGRyICYjNDM7PSBQQUdFX1NJWkUpIHsKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CQlzdHJ1Y3QgcGFnZSAqcGFnZTsKJiM0MzsKJiM0MzsJCWlmICghcHRlX25vbmUocHRlcF9nZXQodm1mLSZndDtwdGUpKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXBhZ2UgPSBhcnJheV9tYXBfZmF1bHRfcGFnZShhcnJheSwgcGdvZmYpOwomIzQzOwkJaWYgKCFwYWdlKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpOwomIzQzOwkJZm9saW9fZ2V0KGZvbGlvKTsKJiM0MzsJCXNldF9wdGVfcmFuZ2Uodm1mLCBmb2xpbywgcGFnZSwgMSwgYWRkcik7CiYjNDM7CQlyc3MmIzQzOyYjNDM7OwomIzQzOwkJaWYgKGFkZHIgPT0gdm1mLSZndDthZGRyZXNzKQomIzQzOwkJCXJldCA9IFZNX0ZBVUxUX05PUEFHRTsKJiM0MzsJfQomIzQzOwomIzQzOwlhZGRfbW1fY291bnRlcih2bWEtJmd0O3ZtX21tLCBNTV9GSUxFUEFHRVMsIHJzcyk7CiYjNDM7CXB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCB2bWYtJmd0O3B0bCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBib29sIGFycmF5X21hcF9tZXRhX2VxdWFsKGNvbnN0IHN0cnVjdCBicGZfbWFwICptZXRhMCwKQEAgLTgxMiw2ICYjNDM7OTE0LDggQEAgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7CiAJLm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IGFycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkciwKIAkubWFwX2RpcmVjdF92YWx1ZV9tZXRhID0gYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhLAogCS5tYXBfbW1hcCA9IGFycmF5X21hcF9tbWFwLAomIzQzOwkubWFwX21tYXBfZmF1bHQgPSBhcnJheV9tYXBfbW1hcF9mYXVsdCwKJiM0MzsJLm1hcF9tbWFwX3BhZ2VzID0gYXJyYXlfbWFwX21tYXBfcGFnZXMsCiAJLm1hcF9zZXFfc2hvd19lbGVtID0gYXJyYXlfbWFwX3NlcV9zaG93X2VsZW0sCiAJLm1hcF9jaGVja19idGYgPSBhcnJheV9tYXBfY2hlY2tfYnRmLAogCS5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwppbmRleCAwZmY5ZTNhYTI5M2Q1Li45OTBjMmY1YmU0MGFmIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwpAQCAtMTA3Nyw5ICYjNDM7MTA3NywzOSBAQCBzdGF0aWMgdm9pZCBicGZfbWFwX21tYXBfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJCWJwZl9tYXBfd3JpdGVfYWN0aXZlX2RlYyhtYXApOwogfQogCiYjNDM7LyoKJiM0MzsgKiBDYWxsZWQgZm9yIG1hcHMgdGhhdCBwb3B1bGF0ZSB0aGVpciBtZW1vcnktbWFwcGVkIHJlZ2lvbiBsYXppbHksIGkuZS4gdGhhdAomIzQzOyAqIHJldHVybiB3aXRob3V0IHdpcmluZyB1cCBhbnkgUFRFcyBmcm9tIHRoZWlyIC0mZ3Q7bWFwX21tYXAgY2FsbGJhY2suIE1hcHMgdGhhdAomIzQzOyAqIHBvcHVsYXRlIHRoZSB3aG9sZSBWTUEgZWFnZXJseSAoZS5nLiB2aWEgcmVtYXBfdm1hbGxvY19yYW5nZSgpKSBuZXZlciByZWFjaAomIzQzOyAqIGhlcmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZtX2ZhdWx0X3QgYnBmX21hcF9tbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9tYXAgKm1hcCA9IHZtZi0mZ3Q7dm1hLSZndDt2bV9wcml2YXRlX2RhdGE7CiYjNDM7CiYjNDM7CWlmICghbWFwLSZndDtvcHMtJmd0O21hcF9tbWFwX2ZhdWx0KQomIzQzOwkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKJiM0MzsKJiM0MzsJcmV0dXJuIG1hcC0mZ3Q7b3BzLSZndDttYXBfbW1hcF9mYXVsdChtYXAsIHZtZik7CiYjNDM7fQomIzQzOwomIzQzOy8qIEZhdWx0LWFyb3VuZDogYmF0Y2gtcG9wdWxhdGUgUFRFcyBhcm91bmQgdGhlIGZhdWx0aW5nIGFkZHJlc3MuICovCiYjNDM7c3RhdGljIHZtX2ZhdWx0X3QgYnBmX21hcF9tbWFwX3BhZ2VzKHN0cnVjdCB2bV9mYXVsdCAqdm1mLAomIzQzOwkJCQkgICAgIHBnb2ZmX3Qgc3RhcnRfcGdvZmYsIHBnb2ZmX3QgZW5kX3Bnb2ZmKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9tYXAgKm1hcCA9IHZtZi0mZ3Q7dm1hLSZndDt2bV9wcml2YXRlX2RhdGE7CiYjNDM7CiYjNDM7CWlmICghbWFwLSZndDtvcHMtJmd0O21hcF9tbWFwX3BhZ2VzKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiBtYXAtJmd0O29wcy0mZ3Q7bWFwX21tYXBfcGFnZXMobWFwLCB2bWYsIHN0YXJ0X3Bnb2ZmLCBlbmRfcGdvZmYpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYnBmX21hcF9kZWZhdWx0X3Ztb3BzID0gewogCS5vcGVuCQk9IGJwZl9tYXBfbW1hcF9vcGVuLAogCS5jbG9zZQkJPSBicGZfbWFwX21tYXBfY2xvc2UsCiYjNDM7CS5mYXVsdAkJPSBicGZfbWFwX21tYXBfZmF1bHQsCiYjNDM7CS5tYXBfcGFnZXMJPSBicGZfbWFwX21tYXBfcGFnZXMsCiB9OwogCiBzdGF0aWMgaW50IGJwZl9tYXBfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MDIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA0MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgQXJyYXkgTWFwIExhenkgRmF1bHRpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1ha2luZyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byBob3cgQlBGIGFycmF5IG1hcHMgYXJlIG1lbW9yeSBtYXBwZWQuIEluc3RlYWQgb2YgdGhlIGVhZ2VyIGByZW1hcF92bWFsbG9jX3JhbmdlYCBhcHByb2FjaCwgd2UmIzM5O3JlIGdvaW5nIHdpdGggbGF6eSBmYXVsdGluZy4gVGhpcyBpcyBwcmV0dHkgc2lnbmlmaWNhbnQuIFRoZXkmIzM5O3ZlIGFkZGVkIGBtYXBfbW1hcF9mYXVsdGAgYW5kIGBtYXBfbW1hcF9wYWdlc2AgdG8gdGhlIGBzdHJ1Y3QgYnBmX21hcF9vcHNgLCBhbmQgaW1wbGVtZW50ZWQgdGhlIGFycmF5LXNwZWNpZmljIHZlcnNpb25zLCBgYXJyYXlfbWFwX21tYXBfZmF1bHRgIGFuZCBgYXJyYXlfbWFwX21tYXBfcGFnZXNgLCB3aXRoaW4gYGtlcm5lbC9icGYvYXJyYXltYXAuY2AuIFRoZXkmIzM5O3ZlIGFsc28gdXBkYXRlZCBgYnBmX21hcF9kZWZhdWx0X3Ztb3BzYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHRvIGluY2x1ZGUgdGhlIGAuZmF1bHRgIGFuZCBgLm1hcF9wYWdlc2AgaG9va3MuIFRoaXMgaXMgYSBjb3JlIGtlcm5lbCBtb2RpZmljYXRpb24sIGltcGFjdGluZyBhIGNydWNpYWwgc3Vic3lzdGVtLgoKR2l2ZW4gdGhlIHNjb3BlLCBmdXp6aW5nIHRoaXMgY2hhbmdlIGlzIGdvaW5nIHRvIGJlIGVzc2VudGlhbC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhvc2Uga2V5IHN5bWJvbHMg4oCTIGBhcnJheV9tYXBfbW1hcF9mYXVsdGAsIGBhcnJheV9tYXBfbW1hcF9wYWdlc2AsIGBicGZfbWFwX21tYXBfZmF1bHRgLCBhbmQgYGJwZl9tYXBfbW1hcF9wYWdlc2Ag4oCTIHRvIHVuZGVyc3RhbmQgdGhlIGNyaXRpY2FsIHBvaW50cyBvZiB0aGlzIG5ldyBpbXBsZW1lbnRhdGlvbi4KCkkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgYEJQRl9TWVNDQUxMYCBpcyBhIGdpdmVuLCBidXQgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyB0aGUgb25seSBvbmUuCgpMZXQgbWUgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRob3NlIHN5bWJvbHMuIGBhcnJheV9tYXBfbW1hcF9mYXVsdGAgaXMgc3RhdGljIGluIGBrZXJuZWwvYnBmL2FycmF5bWFwLmNgLiBTdGF0aWMgZnVuY3Rpb25zIG9mdGVuIGdldCBpbmxpbmVkLCBidXQgdGhlc2UgYXJlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzIGluIHRoZSBgYXJyYXlfbWFwX29wc2Agc3RydWN0dXJlLiBTbywgdGhlaXIgYWRkcmVzc2VzIGFyZSB0YWtlbiwgbWVhbmluZyB0aGV5IHdpbGwgZXhpc3QgYXMgZGlzdGluY3Qgc3ltYm9scy4gVGhlIHNhbWUgYXBwbGllcyB0byBgYnBmX21hcF9tbWFwX2ZhdWx0YCwgd2hpY2ggaXMgc3RhdGljIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuCgpJJiMzOTttIHVzaW5nIGBncmVwcGVyYCBub3cgdG8gY2hlY2sgdGhlIGNvbnRleHQgb2YgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBhbmQgdmVyaWZ5IHRoYXQgaXQmIzM5O3MgYmVpbmcgdXNlZCBhcyBJIGV4cGVjdC4gT2theSwgdGhhdCBsb29rcyBnb29kLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJyYXlfbWFwX21tYXBfZmF1bHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcnJheW1hcC5jPTYwMT1zdGF0aWMgc3RydWN0IHBhZ2UgKmFycmF5X21hcF9mYXVsdF9wYWdlKHN0cnVjdCBicGZfYXJyYXkgKmFycmF5LCBwZ29mZl90IHBnb2ZmKVxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy02MjEtXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6NjIyOnN0YXRpYyB2bV9mYXVsdF90IGFycmF5X21hcF9tbWFwX2ZhdWx0KHN0cnVjdCBicGZfbWFwICptYXAsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtNjIzLVx0XHRcdFx0ICAgICAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz05MDM9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTkxNi1cdC5tYXBfbW1hcCA9IGFycmF5X21hcF9tbWFwLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjkxNzpcdC5tYXBfbW1hcF9mYXVsdCA9IGFycmF5X21hcF9tbWFwX2ZhdWx0LFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTkxOC1cdC5tYXBfbW1hcF9wYWdlcyA9IGFycmF5X21hcF9tbWFwX3BhZ2VzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NTMKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIE1hcCBNZW1vcnkgTWFwcGluZyBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGVzZSBjb3JlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBtYXBwaW5nIGFuZCBCUEYgbWFwczogYGFycmF5X21hcF9tbWFwX2ZhdWx0YCwgYGFycmF5X21hcF9tbWFwX3BhZ2VzYCwgYGJwZl9tYXBfbW1hcF9mYXVsdGAsIGFuZCBgYnBmX21hcF9tbWFwX3BhZ2VzYC4gSSYjMzk7bSBnb2luZyB0byBza2lwIG92ZXIgdGhlIGBhcnJheV9tYXBfZmF1bHRfcGFnZWAgaGVscGVyIGZvciBub3c7IGl0JiMzOTtzIHN0YXRpYyBhbmQgbGlrZWx5IHVzZWQgaW50ZXJuYWxseSBieSB0aGUgb3RoZXJzLCBzbyB1bmRlcnN0YW5kaW5nIHRoZSBtYWluIGVudHJ5IHBvaW50cyBpcyBtb3JlIGNyaXRpY2FsIGF0IHRoaXMgc3RhZ2UuCgpNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIGBicGZfbWFwX21tYXBfZmF1bHRgLiBUaGF0IGZlZWxzIGxpa2UgYSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IOKAkyBwYXJ0aWN1bGFybHkgYmVjYXVzZSBpdCBoYW5kbGVzICpmYXVsdHMqLCB3aGljaCBhcmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG9uLWRlbWFuZCBtZW1vcnkgYWxsb2NhdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gSSYjMzk7bSBnb2luZyB0byBmaW5kIHRoaXMgZnVuY3Rpb24gd2l0aGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgYW5kIGJlZ2luIHRoZXJlLiBGcm9tIHRoZXJlIEkmIzM5O2xsIG1hcCBvdXQgaG93IHRoZSBvdGhlciBmdW5jdGlvbnMgYXJlIHVzZWQgaW4gdGhlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21hcF9tbWFwX2ZhdWx0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTEwNzI9c3RhdGljIHZvaWQgYnBmX21hcF9tbWFwX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwODUtICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMDg2OnN0YXRpYyB2bV9mYXVsdF90IGJwZl9tYXBfbW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwODcte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTExMDg9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBicGZfbWFwX2RlZmF1bHRfdm1vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTExMC1cdC5jbG9zZVx0XHQ9IGJwZl9tYXBfbW1hcF9jbG9zZSxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjExMTE6XHQuZmF1bHRcdFx0PSBicGZfbWFwX21tYXBfZmF1bHQsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMTEyLVx0Lm1hcF9wYWdlc1x0PSBicGZfbWFwX21tYXBfcGFnZXMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ0MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipUYXJnZXRpbmcgTm9uLUlubGluZWQgRnVuY3Rpb25zKioKClJpZ2h0LCBzbyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoZXkmIzM5O3JlIG5vdCBmdWxseSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gVGhpcyBpcyBrZXkgYmVjYXVzZSBpdCBtZWFucyB0aGV5JiMzOTtyZSBjb25jcmV0ZSwgYWRkcmVzc2FibGUgZW50cnkgcG9pbnRzIGluIG1lbW9yeSwgYW5kIHRoZXJlZm9yZSwgdGFyZ2V0YWJsZS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgc3RhcnQgdG8gdGhpbmsgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIG9mIGhvdyB0aGlzIG1pZ2h0IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBCUEYuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcG9zc2liaWxpdGllcyBmb3IgdHJhY2luZyBvciBtb2RpZmljYXRpb24uCgpBbmQgbm93IEkgaGF2ZSBgQlBGX1NZU0NBTExgIGluIGZyb250IG9mIG1lLCB3aGljaCBsaWtlbHkgZGVmaW5lcyB0aGUgY29uZmlndXJhdGlvbi4gVGltZSB0byBmaW5kIHdoZXJlIHRoaXMgaXMgZGVjbGFyZWQsIGBrZXJuZWwvYnBmL0tjb25maWdgIGFuZCBgaW5pdC9LY29uZmlnYCB3aWxsIGJlIG15IGZpcnN0IHNwb3RzLCBhcyBpdCBpcyBtb3N0IGxpa2VseSBhIGtlcm5lbCBjb25maWd1cmF0aW9uIHRoYXQgd2lsbCBnaXZlIG1lIGFkZGl0aW9uYWwgY29udGV4dCBvZiBpdHMgdXNlLCBhbmQgYWxsb3cgbWUgdG8gdW5kZXJzdGFuZCBob3cgaXQgaW1wYWN0cyBCUEYgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODAzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIGV4cGVydCBwZXJzcGVjdGl2ZToKCioqQlBGIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCkFscmlnaHQsIG15IGltbWVkaWF0ZSBndXQgZmVlbGluZyBpcyB0aGF0IGBCUEZfU1lTQ0FMTGAgaXMgdGhlIGNvcm5lcnN0b25lIG9mIHRoaXMgY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgbWVjaGFuaXNtLCB0aGUgbWFpbiBzd2l0Y2ggaWYgeW91IHdpbGwsIGZvciBlbmFibGluZyBCUEYgaW50ZXJhY3Rpb24gd2l0aCBzeXN0ZW0gY2FsbHMuIEJ1dCwgd2l0aCBteSBleHBlcmllbmNlLCBJIGtub3cgaXQmIzM5O3MgbmV2ZXIgcXVpdGUgdGhhdCBzaW1wbGUuCgpUaGVyZWZvcmUsIEkgbmVlZCB0byBtZXRob2RpY2FsbHkgZG91YmxlLWNoZWNrLCBhbmQgcGVyaGFwcyBkaWcgYSBsaXR0bGUgZGVlcGVyLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgbGF0ZW50IGRlcGVuZGVuY2llcyBvciBzdWJ0bGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGx1cmtpbmcgYmVuZWF0aCB0aGUgc3VyZmFjZSB0aGF0IGNvdWxkIGltcGFjdCBob3cgYEJQRl9TWVNDQUxMYCBmdW5jdGlvbnMsIG9yIGV2ZW4gd2hldGhlciBpdCBmdW5jdGlvbnMgYXQgYWxsLiBJIG5lZWQgdG8ga25vdyBhbGwgb2YgdGhlIG1vdmluZyBwYXJ0cyBiZWZvcmUgSSBjYW4gbW92ZSBmb3J3YXJkLiBQZXJoYXBzIHNvbWUgb3RoZXIsIHNlZW1pbmdseSB1bnJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGhhdmUgYSBkb3duc3RyZWFtIGltcGFjdCBoZXJlLiBJdCYjMzk7cyB0aW1lIHRvIHB1bGwgb3V0IHRoZSBkb2N1bWVudGF0aW9uIGFuZCBzdGFydCBtYXBwaW5nIHRoZSBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24uKkJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaGlkL2JwZi9LY29uZmlnPTQ9Y29uZmlnIEhJRF9CUEZcbi0tXG5kcml2ZXJzL2hpZC9icGYvS2NvbmZpZy02LVx0ZGVwZW5kcyBvbiBCUEZfSklUXG5kcml2ZXJzL2hpZC9icGYvS2NvbmZpZzo3Olx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuZHJpdmVycy9oaWQvYnBmL0tjb25maWctOC1cdGRlcGVuZHMgb24gRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbi0tXG5kcml2ZXJzL21lZGlhL3JjL0tjb25maWc9MTk9Y29uZmlnIEJQRl9MSVJDX01PREUyXG5kcml2ZXJzL21lZGlhL3JjL0tjb25maWctMjAtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gbGlyYyBkZXZpY2VzXCYjMzQ7XG5kcml2ZXJzL21lZGlhL3JjL0tjb25maWc6MjE6XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG5kcml2ZXJzL21lZGlhL3JjL0tjb25maWctMjItXHRkZXBlbmRzIG9uIFJDX0NPUkU9eVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NDYzPWNvbmZpZyBORVRLSVRcbmRyaXZlcnMvbmV0L0tjb25maWctNDY0LVx0Ym9vbCBcJiMzNDtCUEYtcHJvZ3JhbW1hYmxlIG5ldHdvcmsgZGV2aWNlXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjQ2NTpcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbmRyaXZlcnMvbmV0L0tjb25maWctNDY2LVx0aGVscFxuLS1cbmluaXQvS2NvbmZpZz0xMzUyPWNvbmZpZyBDR1JPVVBfQlBGXG5pbml0L0tjb25maWctMTM1My1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXCYjMzQ7XG5pbml0L0tjb25maWc6MTM1NDpcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbmluaXQvS2NvbmZpZy0xMzU1LVx0c2VsZWN0IFNPQ0tfQ0dST1VQX0RBVEFcbi0tXG5pb191cmluZy9LY29uZmlnPTE4PWNvbmZpZyBJT19VUklOR19CUEZfT1BTXG4tLVxuaW9fdXJpbmcvS2NvbmZpZy0yMC1cdGRlcGVuZHMgb24gSU9fVVJJTkdcbmlvX3VyaW5nL0tjb25maWc6MjE6XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBCUEZfSklUIFx1MDAyNlx1MDAyNiBERUJVR19JTkZPX0JURlxuLS1cbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ9MTY5PWNvbmZpZyBTQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTcwLVx0Ym9vbCBcJiMzNDtFeHRlbnNpYmxlIFNjaGVkdWxpbmcgQ2xhc3NcJiMzNDtcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ6MTcxOlx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgREVCVUdfSU5GT19CVEZcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTcyLVx0c2VsZWN0IFNUQUNLVFJBQ0UgaWYgU1RBQ0tUUkFDRV9TVVBQT1JUXG4tLVxua2VybmVsL2JwZi9LY29uZmlnPTU4PWNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnOjYwOlx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgSEFWRV9FQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTYxLVx0aGVscFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZz03Mz1jb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy03NS1cdGRlZmF1bHQgeVxua2VybmVsL2JwZi9LY29uZmlnOjc2Olx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTc3LVx0aGVscFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZz05Mj1jb25maWcgQlBGX0xTTVxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy05NC1cdGRlcGVuZHMgb24gQlBGX0VWRU5UU1xua2VybmVsL2JwZi9LY29uZmlnOjk1Olx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTk2LVx0ZGVwZW5kcyBvbiBTRUNVUklUWVxuLS1cbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnPTI9bWVudWNvbmZpZyBCUEZfUFJFTE9BRFxuLS1cbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnLTQtXHRkZXBlbmRzIG9uIEJQRlxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWc6NTpcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnLTYtXHQjIFRoZSBkZXBlbmRlbmN5IG9uICFDT01QSUxFX1RFU1QgcHJldmVudHMgaXQgZnJvbSBiZWluZyBlbmFibGVkXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9NzcwPWNvbmZpZyBQUk9CRV9FVkVOVFNfQlRGX0FSR1Ncbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy03NzItXHRkZXBlbmRzIG9uIEZQUk9CRV9FVkVOVFMgfHwgS1BST0JFX0VWRU5UU1xua2VybmVsL3RyYWNlL0tjb25maWc6NzczOlx0ZGVwZW5kcyBvbiBERUJVR19JTkZPX0JURiBcdTAwMjZcdTAwMjYgQlBGX1NZU0NBTExcbmtlcm5lbC90cmFjZS9LY29uZmlnLTc3NC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBCVEYgZnVuY3Rpb24gYXJndW1lbnRzIGZvciBwcm9iZSBldmVudHNcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz04NTM9Y29uZmlnIEJQRl9FVkVOVFNcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg1NDpcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1NS1cdGRlcGVuZHMgb24gKEtQUk9CRV9FVkVOVFMgfHwgVVBST0JFX0VWRU5UUykgXHUwMDI2XHUwMDI2IFBFUkZfRVZFTlRTXG4tLVxubGliL0tjb25maWcuZGVidWc9Mzk4PWNvbmZpZyBERUJVR19JTkZPX0JURlxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTQwMS1cdGRlcGVuZHMgb24gIUdDQ19QTFVHSU5fUkFORFNUUlVDVCB8fCBDT01QSUxFX1RFU1RcbmxpYi9LY29uZmlnLmRlYnVnOjQwMjpcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbmxpYi9LY29uZmlnLmRlYnVnLTQwMy1cdGRlcGVuZHMgb24gUEFIT0xFX1ZFUlNJT04gXHUwMDNlPSAxMjJcbi0tXG5uZXQvS2NvbmZpZz0zNjE9Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG4tLVxubmV0L0tjb25maWctMzYzLVx0ZGVwZW5kcyBvbiBJTkVUXG5uZXQvS2NvbmZpZzozNjQ6XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG5uZXQvS2NvbmZpZy0zNjUtXHRkZXBlbmRzIG9uIENHUk9VUF9CUEZcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz00MDY9Y29uZmlnIE5FVF9TQ0hfQlBGXG5uZXQvc2NoZWQvS2NvbmZpZy00MDctXHRib29sIFwmIzM0O0JQRi1iYXNlZCBRZGlzY1wmIzM0O1xubmV0L3NjaGVkL0tjb25maWc6NDA4Olx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgREVCVUdfSU5GT19CVEZcbm5ldC9zY2hlZC9LY29uZmlnLTQwOS1cdGhlbHBcbi0tXG5uZXQvc21jL0tjb25maWc9MjM9Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxubmV0L3NtYy9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XCYjMzQ7XG5uZXQvc21jL0tjb25maWc6MjU6XHRkZXBlbmRzIG9uIFNNQyBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX1NZU0NBTExcbm5ldC9zbWMvS2NvbmZpZy0yNi1cdGRlZmF1bHQgeVxuLS1cbm5ldC94ZHAvS2NvbmZpZz0yPWNvbmZpZyBYRFBfU09DS0VUU1xubmV0L3hkcC9LY29uZmlnLTMtXHRib29sIFwmIzM0O1hEUCBzb2NrZXRzXCYjMzQ7XG5uZXQveGRwL0tjb25maWc6NDpcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbm5ldC94ZHAvS2NvbmZpZy01LVx0ZGVmYXVsdCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NDIKCQkJCQkJCW91dHB1dDogMTYKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN5c3RlbSBDYWxsIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFycmF5bWFwLmNgIGFuZCBgc3lzY2FsbC5jYC4gSW1tZWRpYXRlbHksIG15IGJyYWluIGZsYWdzIHRoYXQgYGFycmF5bWFwLmNgIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIGtleSBkZXRhaWwgdG8ga2VlcCBpbiBtaW5kLCBhbmQgaXQgc3VnZ2VzdHMgdGhpcyBjaGFuZ2UgaXMgcmVsYXRlZCB0byB0aGUgQlBGIHN5c3RlbSBjYWxsIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uLCBzbyBsZXQmIzM5O3MganVtcCBvdmVyIHRvIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBhbmQgcXVpY2tseSBjb25maXJtIHRoZSBidWlsZCBkZXBlbmRlbmN5IGFuZCBnZXQgdGhlIGJyb2FkZXIgcGljdHVyZS4gTXkgaW5pdGlhbCBndWVzcyB3b3VsZCBiZSB0aGF0IG1vZGlmaWNhdGlvbnMgdG8gYGFycmF5bWFwLmNgIGFyZSBzb21laG93IGFmZmVjdGluZyB0aGUgd2F5IHN5c3RlbSBjYWxscyBhcmUgaGFuZGxlZCB3aGVuIEJQRiBpcyBpbnZvbHZlZDsgbGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBtYWtlZmlsZSByZXZlYWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcnJheW1hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2JwZi9ncmFwaF9kc19pbXBsLnJzdD03ND13aGljaCBhbHNvIGNvbnRhaW5zIGEgYGBicGZfc3Bpbl9sb2NrYGAgLSBpbiB0aGUgYWJvdmUgZXhhbXBsZSBib3RoIGdsb2JhbFxuRG9jdW1lbnRhdGlvbi9icGYvZ3JhcGhfZHNfaW1wbC5yc3Q6NzU6dmFyaWFibGVzIGFyZSBwbGFjZWQgaW4gYSBzaW5nbGUtdmFsdWUgYXJyYXltYXAuIFRoZSB2ZXJpZmllciBjb25zaWRlcnMgdGhpc1xuRG9jdW1lbnRhdGlvbi9icGYvZ3JhcGhfZHNfaW1wbC5yc3QtNzYtc3Bpbl9sb2NrIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgYGBicGZfcmJfcm9vdGBgIGJ5IHZpcnR1ZSBvZiBib3RoIGJlaW5nIGluXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMwMDc9c3RhdGljIGxvbmcgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdm9pZCAqdmFsdWUsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAyMy1cdCAqIHRoZSB2YWx1ZSBtaWQtY29weS4gQ2FsbGVycyByZXF1aXJpbmcgY29uc2lzdGVudCByZWFkcyBtdXN0IHVzZVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzAyNDpcdCAqIEJQRl9GX0xPQ0ssIG1hdGNoaW5nIGFycmF5bWFwIHNlbWFudGljcy5cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwMjUtXHQgKlxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwMjctXHQgKiBrcHRycy9ldGMuIHN0aWxsIHNpdCBpbiB0aGUgc2xvdC4gQ2FuY2VsIHRoZW0gYWZ0ZXIgdGhlIGNvcHlcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMwMjg6XHQgKiB0byBtYXRjaCBhcnJheW1hcCYjMzk7cyB1cGRhdGUgc2VtYW50aWNzLlxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAyOS1cdCAqL1xuLS1cbnNhbXBsZXMvYnBmL3NvY2tfZXhhbXBsZS5jLTEtLyogZUJQRiBleGFtcGxlIHByb2dyYW06XG5zYW1wbGVzL2JwZi9zb2NrX2V4YW1wbGUuYzoyOiAqIC0gY3JlYXRlcyBhcnJheW1hcCBpbiBrZXJuZWwgd2l0aCBrZXkgNCBieXRlcyBhbmQgdmFsdWUgOCBieXRlc1xuc2FtcGxlcy9icGYvc29ja19leGFtcGxlLmMtMy0gKlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmM9MTAxOD1zdGF0aWMgdm9pZCB0ZXN0X2JwZl9hcnJheV9tYXAodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jLTEwMzMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jOjEwMzQ6XHRtYXBfZmQgPSBicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMuYXJyYXltYXAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmM6MTAzNTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJwZl9tYXBfX21heF9lbnRyaWVzKHNrZWwtXHUwMDNlbWFwcy5hcnJheW1hcDEpOyBpJiM0MzsmIzQzOykge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYy0xMDM2LVx0XHR2YWwgPSBpICYjNDM7IDQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYy0xMDc5LVx0aGFzaF9mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy5oYXNobWFwMSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jOjEwODA6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBicGZfbWFwX19tYXhfZW50cmllcyhza2VsLVx1MDAzZW1hcHMuYXJyYXltYXAxKTsgaSYjNDM7JiM0MzspIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmMtMTA4MS1cdFx0ZXJyID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfZmQsIFx1MDAyNmksIFx1MDAyNnZhbCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jOjEwODI6XHRcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7bWFwX2xvb2t1cCBhcnJheW1hcDFcJiMzNDspKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYy0xMDgzLVx0XHRcdGdvdG8gY2xvc2VfaXRlcjtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmM6MTA4NDpcdFx0aWYgKCFBU1NFUlRfRVEoaSwgdmFsLCBcJiMzNDtpbnZhbGlkX3ZhbCBhcnJheW1hcDFcJiMzNDspKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYy0xMDg1LVx0XHRcdGdvdG8gY2xvc2VfaXRlcjtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jPTExMDM9c3RhdGljIHZvaWQgdGVzdF9icGZfYXJyYXlfbWFwX2l0ZXJfZmQodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jLTExMTEtXHRkb19yZWFkX21hcF9pdGVyX2ZkKFx1MDAyNnNrZWwtXHUwMDNlc2tlbGV0b24sIHNrZWwtXHUwMDNlcHJvZ3MuZHVtcF9icGZfYXJyYXlfbWFwLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYzoxMTEyOlx0XHRcdCAgICBza2VsLVx1MDAzZW1hcHMuYXJyYXltYXAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmMtMTExMy1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jPTExMTc9c3RhdGljIHZvaWQgdGVzdF9icGZfcGVyY3B1X2FycmF5X21hcCh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmMtMTE0Mi1cdC8qIHVwZGF0ZSBtYXAgdmFsdWVzIGhlcmUgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmM6MTE0MzpcdG1hcF9mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy5hcnJheW1hcDEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYzoxMTQ0Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYnBmX21hcF9fbWF4X2VudHJpZXMoc2tlbC1cdTAwM2VtYXBzLmFycmF5bWFwMSk7IGkmIzQzOyYjNDM7KSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jLTExNDUtXHRcdGV4cGVjdGVkX2tleSAmIzQzOz0gaTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuYz04OD1zdGF0aWMgc3RydWN0IGJ0Zl9yYXdfdGVzdCByYXdfdGVzdHNbXSA9IHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuYy0yMzMwLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jOjIzMzE6XHQuZGVzY3IgPSBcJiMzNDthcnJheW1hcCBpbnZhbGlkIGJ0ZiBrZXkgKGEgYml0IGZpZWxkKVwmIzM0OyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jLTIzMzItXHQucmF3X3R5cGVzID0ge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jLTIzNTEte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmM6MjM1MjpcdC5kZXNjciA9IFwmIzM0O2FycmF5bWFwIGludmFsaWQgYnRmIGtleSAoIT0gMzIgYml0cylcJiMzNDssXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuYy0yMzUzLVx0LnJhd190eXBlcyA9IHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuYy0yMzcyLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jOjIzNzM6XHQuZGVzY3IgPSBcJiMzNDthcnJheW1hcCBpbnZhbGlkIGJ0ZiB2YWx1ZSAodG9vIHNtYWxsKVwmIzM0OyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jLTIzNzQtXHQucmF3X3R5cGVzID0ge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jLTIzOTIte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmM6MjM5MzpcdC5kZXNjciA9IFwmIzM0O2FycmF5bWFwIGludmFsaWQgYnRmIHZhbHVlICh0b28gYmlnKVwmIzM0OyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jLTIzOTQtXHQucmF3X3R5cGVzID0ge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Zvcl9lYWNoLmM9Nzk9c3RhdGljIHZvaWQgdGVzdF9hcnJheV9tYXAodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jLTk3LVx0ZXhwZWN0ZWRfdG90YWwgPSAwO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYzo5ODpcdG1heF9lbnRyaWVzID0gYnBmX21hcF9fbWF4X2VudHJpZXMoc2tlbC1cdTAwM2VtYXBzLmFycmF5bWFwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Zvcl9lYWNoLmMtOTktXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtYXhfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jLTEwNC1cdFx0XHRleHBlY3RlZF90b3RhbCAmIzQzOz0gdmFsO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYzoxMDU6XHRcdGVyciA9IGJwZl9tYXBfX3VwZGF0ZV9lbGVtKHNrZWwtXHUwMDNlbWFwcy5hcnJheW1hcCwgXHUwMDI2a2V5LCBzaXplb2Yoa2V5KSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Zvcl9lYWNoLmMtMTA2LVx0XHRcdFx0XHQgICBcdTAwMjZ2YWwsIHNpemVvZih2YWwpLCBCUEZfQU5ZKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jLTEzMC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Zvcl9lYWNoLmM6MTMxOlx0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWFycmF5bWFwX291dHB1dCwgZXhwZWN0ZWRfdG90YWwsIFwmIzM0O2FycmF5X291dHB1dFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jLTEzMi1cdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VjcHUgJiM0MzsgMSwgc2tlbC1cdTAwM2Vic3MtXHUwMDNlcGVyY3B1X3ZhbCwgXCYjMzQ7cGVyY3B1X3ZhbFwmIzM0Oyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYz0xNDg9c3RhdGljIHZvaWQgdGVzdF9tdWx0aV9tYXBzKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYy0xNjUtXHRhcnJheV90b3RhbCA9IDA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jOjE2NjpcdG1heF9lbnRyaWVzID0gYnBmX21hcF9fbWF4X2VudHJpZXMoc2tlbC1cdTAwM2VtYXBzLmFycmF5bWFwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Zvcl9lYWNoLmMtMTY3LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWF4X2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYy0xNzAtXHRcdGFycmF5X3RvdGFsICYjNDM7PSB2YWw7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jOjE3MTpcdFx0ZXJyID0gYnBmX21hcF9fdXBkYXRlX2VsZW0oc2tlbC1cdTAwM2VtYXBzLmFycmF5bWFwLCBcdTAwMjZrZXksIHNpemVvZihrZXkpLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYy0xNzItXHRcdFx0XHRcdCAgIFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCksIEJQRl9BTlkpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfYXJyYXlfbWFwLmM9OT1zdHJ1Y3Qge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfYXJyYXlfbWFwLmMtMTMtXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfYXJyYXlfbWFwLmM6MTQ6fSBhcnJheW1hcDEgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfYXJyYXlfbWFwLmMtMTUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9wZXJjcHVfYXJyYXlfbWFwLmM9OT1zdHJ1Y3Qge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfcGVyY3B1X2FycmF5X21hcC5jLTEzLVx0X190eXBlKHZhbHVlLCBfX3UzMik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3BlcmNwdV9hcnJheV9tYXAuYzoxNDp9IGFycmF5bWFwMSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9wZXJjcHVfYXJyYXlfbWFwLmMtMTUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmM9OD1zdHJ1Y3Qge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jLTEyLVx0X190eXBlKHZhbHVlLCBfX3U2NCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYzoxMzp9IGFycmF5bWFwIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYy0xNC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYz01MD1jaGVja19wZXJjcHVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBfX3UzMiAqa2V5LCBfX3U2NCAqdmFsLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jLTU3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmM6NTg6dTMyIGFycmF5bWFwX291dHB1dCA9IDA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYy01OS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYz02MT1pbnQgdGVzdF9wa3RfYWNjZXNzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYy02NS1cdGRhdGEub3V0cHV0ID0gMDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jOjY2Olx0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFx1MDAyNmFycmF5bWFwLCBjaGVja19hcnJheV9lbGVtLCBcdTAwMjZkYXRhLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jLTY3LVx0aWYgKCFieXBhc3NfdW51c2VkKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmM6Njg6XHRcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcdTAwMjZhcnJheW1hcCwgdW51c2VkX3N1YnByb2csIFx1MDAyNmRhdGEsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmM6Njk6XHRhcnJheW1hcF9vdXRwdXQgPSBkYXRhLm91dHB1dDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jLTcwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9tdWx0aV9tYXBzLmM9Nz1zdHJ1Y3Qge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9tdWx0aV9tYXBzLmMtMTEtXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9tdWx0aV9tYXBzLmM6MTI6fSBhcnJheW1hcCBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX211bHRpX21hcHMuYy0xMy1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfbXVsdGlfbWFwcy5jPTM3PWludCB0ZXN0X3BrdF9hY2Nlc3Moc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9tdWx0aV9tYXBzLmMtNDItXHRpZiAodXNlX2FycmF5KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX211bHRpX21hcHMuYzo0MzpcdFx0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFx1MDAyNmFycmF5bWFwLCBjaGVja19tYXBfZWxlbSwgXHUwMDI2ZGF0YSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfbXVsdGlfbWFwcy5jLTQ0LVx0ZWxzZVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYz0zMzU9c3RhdGljIHZvaWQgdGVzdF9oYXNobWFwX3plcm9fc2VlZCh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy0zNjctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM6MzY4OnN0YXRpYyB2b2lkIHRlc3RfYXJyYXltYXAodW5zaWduZWQgaW50IHRhc2ssIHZvaWQgKmRhdGEpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtMzY5LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtMzc0LVx0aWYgKGZkIFx1MDAzYyAwKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM6Mzc1Olx0XHRwcmludGYoXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBhcnJheW1hcCAmIzM5OyVzJiMzOTshXFxuXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTM3Ni1cdFx0ZXhpdCgxKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtNDIxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjQyMjpzdGF0aWMgdm9pZCB0ZXN0X2FycmF5bWFwX3BlcmNwdSh1bnNpZ25lZCBpbnQgdGFzaywgdm9pZCAqZGF0YSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy00MjMte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy00MzAtXHRpZiAoZmQgXHUwMDNjIDApIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYzo0MzE6XHRcdHByaW50ZihcJiMzNDtGYWlsZWQgdG8gY3JlYXRlIGFycmF5bWFwICYjMzk7JXMmIzM5OyFcXG5cJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtNDMyLVx0XHRleGl0KDEpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy00ODAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM6NDgxOnN0YXRpYyB2b2lkIHRlc3RfYXJyYXltYXBfcGVyY3B1X21hbnlfa2V5cyh2b2lkKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTQ4Mi17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTQ5My1cdGlmIChmZCBcdTAwM2MgMCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjQ5NDpcdFx0cHJpbnRmKFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgcGVyLWNwdSBhcnJheW1hcCAmIzM5OyVzJiMzOTshXFxuXCYjMzQ7LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTQ5NS1cdFx0ICAgICAgIHN0cmVycm9yKGVycm5vKSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jPTEzODk9c3RhdGljIHZvaWQgdGVzdF9tYXBfc3RyZXNzKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTEzOTUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM6MTM5NjpcdHJ1bl9wYXJhbGxlbCgxMDAsIHRlc3RfYXJyYXltYXAsIE5VTEwpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjEzOTc6XHRydW5fcGFyYWxsZWwoMTAwLCB0ZXN0X2FycmF5bWFwX3BlcmNwdSwgTlVMTCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtMTM5OC19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jPTE4ODY9c3RhdGljIHZvaWQgcnVuX2FsbF90ZXN0cyh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy0xODkyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjE4OTM6XHR0ZXN0X2FycmF5bWFwKDAsIE5VTEwpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjE4OTQ6XHR0ZXN0X2FycmF5bWFwX3BlcmNwdSgwLCBOVUxMKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy0xODk1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjE4OTY6XHR0ZXN0X2FycmF5bWFwX3BlcmNwdV9tYW55X2tleXMoKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy0xODk3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzYzOQoJCQkJCQkJb3V0cHV0OiAxNjYKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIFN1YnN5c3RlbSBQYXRjaCAtIEluaXRpYWwgQXNzZXNzbWVudCAmYW1wOyBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBkaWdnaW5nIGludG8gZnVuY3Rpb25hbCBjb2RlIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gSSBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgdGhlc2Uga2V5IGZ1bmN0aW9uczogYGFycmF5X21hcF9tbWFwX2ZhdWx0YCwgYGFycmF5X21hcF9tbWFwX3BhZ2VzYCwgYGJwZl9tYXBfbW1hcF9mYXVsdGAsIGFuZCBgYnBmX21hcF9tbWFwX3BhZ2VzYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhvc2UgYXJlICpzY3JlYW1pbmcqIGZvciBmdXp6aW5nLiBUaGV5JiMzOTtyZSBoYW5kbGluZyBtZW1vcnkgbWFwcGluZywgYW5kIHRoYXQgYWx3YXlzIHByZXNlbnRzIGludGVyZXN0aW5nIGF0dGFjayBzdXJmYWNlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGZvY3VzIG15IGVmZm9ydHMgdGhlcmUuCgpCZWZvcmUgSSBnZXQgdG9vIGZhciBkb3duIHRoZSBmdXp6aW5nIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIHN0ZXAgYmFjayBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIExldCBtZSB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjaGFuZ2UuIExvb2tzIGxpa2UgYEJQRl9TWVNDQUxMYCBpcyB0aGUgcHJpbWFyeSBvbmUsIHNvIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBjb25maWd1cmluZyBteSBmdXp6aW5nIGVudmlyb25tZW50LgoKQWxyaWdodCwgd2l0aCB0aGF0IGZvdW5kYXRpb24sIGl0JiMzOTtzIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgdG8gbWFuYWdlIGFuZCB0cmFjayBteSBmaW5kaW5ncy4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSB3YXkgdG8gYXBwcm9hY2ggdGhlIGZ1enppbmcgZ2l2ZW4gdGhlIHBhdGNoJiMzOTtzIHNjb3BlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcnJheV9tYXBfbW1hcF9mYXVsdCYjMzQ7LAogICAgJiMzNDthcnJheV9tYXBfbW1hcF9wYWdlcyYjMzQ7LAogICAgJiMzNDticGZfbWFwX21tYXBfZmF1bHQmIzM0OywKICAgICYjMzQ7YnBmX21hcF9tbWFwX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgYXJyYXkgbWFwIG1lbW9yeSBtYXBwaW5nIGxvZ2ljIHRvIHVzZSBsYXp5IGZhdWx0aW5nIGluc3RlYWQgb2YgZWFnZXIgbWFwcGluZy4gSXQgaW50cm9kdWNlcyBuZXcgZmF1bHQgaGFuZGxlcnMgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBhbmQgYGFycmF5X21hcF9tbWFwX3BhZ2VzYCBpbiBgYXJyYXltYXAuY2AsIGFuZCBjb3JyZXNwb25kaW5nIHN5c2NhbGwgaGFuZGxlcnMgaW4gYHN5c2NhbGwuY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcnJheV9tYXBfbW1hcF9mYXVsdCYjMzQ7LAogICAgJiMzNDthcnJheV9tYXBfbW1hcF9wYWdlcyYjMzQ7LAogICAgJiMzNDticGZfbWFwX21tYXBfZmF1bHQmIzM0OywKICAgICYjMzQ7YnBmX21hcF9tbWFwX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgYXJyYXkgbWFwIG1lbW9yeSBtYXBwaW5nIGxvZ2ljIHRvIHVzZSBsYXp5IGZhdWx0aW5nIGluc3RlYWQgb2YgZWFnZXIgbWFwcGluZy4gSXQgaW50cm9kdWNlcyBuZXcgZmF1bHQgaGFuZGxlcnMgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBhbmQgYGFycmF5X21hcF9tbWFwX3BhZ2VzYCBpbiBgYXJyYXltYXAuY2AsIGFuZCBjb3JyZXNwb25kaW5nIHN5c2NhbGwgaGFuZGxlcnMgaW4gYHN5c2NhbGwuY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAzOjU0OjI4LjkzMDQyOTk4M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MjczMjM5NDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXJyYXlfbWFwX21tYXBfZmF1bHRcIixcbiAgICBcImFycmF5X21hcF9tbWFwX3BhZ2VzXCIsXG4gICAgXCJicGZfbWFwX21tYXBfZmF1bHRcIixcbiAgICBcImJwZl9tYXBfbW1hcF9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgYXJyYXkgbWFwIG1lbW9yeSBtYXBwaW5nIGxvZ2ljIHRvIHVzZSBsYXp5IGZhdWx0aW5nIGluc3RlYWQgb2YgZWFnZXIgbWFwcGluZy4gSXQgaW50cm9kdWNlcyBuZXcgZmF1bHQgaGFuZGxlcnMgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBhbmQgYGFycmF5X21hcF9tbWFwX3BhZ2VzYCBpbiBgYXJyYXltYXAuY2AsIGFuZCBjb3JyZXNwb25kaW5nIHN5c2NhbGwgaGFuZGxlcnMgaW4gYHN5c2NhbGwuY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDM6NTQ6MjguOTMwNDM3MDQzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ1OTU1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjY2NhMTljODM3NDE4OTJhN2FkOTNhMmJhOGY2MjhkN2Q1ZjcwYzgwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDAzOjU0OjI4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuaW5kZXggN2JmYzI4NjczMTI0NC4uZWI1NzhjZTA4N2I3MCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGYuaFxcbkBAIC0xNDUsNiArMTQ1LDkgQEAgc3RydWN0IGJwZl9tYXBfb3BzIHtcXG4gXFx0aW50ICgqbWFwX2RpcmVjdF92YWx1ZV9tZXRhKShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHRcXHRcXHRcXHQgICAgIHU2NCBpbW0sIHUzMiAqb2ZmKTtcXG4gXFx0aW50ICgqbWFwX21tYXApKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG4rXFx0dm1fZmF1bHRfdCAoKm1hcF9tbWFwX2ZhdWx0KShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XFxuK1xcdHZtX2ZhdWx0X3QgKCptYXBfbW1hcF9wYWdlcykoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuK1xcdFxcdFxcdFxcdCAgICAgcGdvZmZfdCBzdGFydF9wZ29mZiwgcGdvZmZfdCBlbmRfcGdvZmYpO1xcbiBcXHRfX3BvbGxfdCAoKm1hcF9wb2xsKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqZmlscCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnB0cyk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgKCptYXBfZ2V0X3VubWFwcGVkX2FyZWEpKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FycmF5bWFwLmMgYi9rZXJuZWwvYnBmL2FycmF5bWFwLmNcXG5pbmRleCAyNDhiNDgxODE3OGNkLi4zNTk0ZTI2YjlmYjg4IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvYXJyYXltYXAuY1xcbisrKyBiL2tlcm5lbC9icGYvYXJyYXltYXAuY1xcbkBAIC03LDYgKzcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb3ZlcmZsb3cuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbHRlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9idGYuaFxcdTAwM2VcXG5AQCAtNTc2LDE3ICs1NzcsMTE4IEBAIHN0YXRpYyBpbnQgYXJyYXlfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBzdGF0aWMgaW50IGFycmF5X21hcF9tbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfYXJyYXkgKmFycmF5ID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcnJheSwgbWFwKTtcXG4tXFx0cGdvZmZfdCBwZ29mZiA9IFBBR0VfQUxJR04oc2l6ZW9mKCphcnJheSkpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIFxcbiBcXHRpZiAoIShtYXAtXFx1MDAzZW1hcF9mbGFncyBcXHUwMDI2IEJQRl9GX01NQVBBQkxFKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRpZiAodm1hLVxcdTAwM2V2bV9wZ29mZiAqIFBBR0VfU0laRSArICh2bWEtXFx1MDAzZXZtX2VuZCAtIHZtYS1cXHUwMDNldm1fc3RhcnQpIFxcdTAwM2VcXG4rXFx0LyogdXNlIHU2NCBtYXRoIHNvIHRoZSBvZmZzZXQgY2Fubm90IG92ZXJmbG93IG9uIDMyLWJpdCBhcmNocyAqL1xcbitcXHRpZiAoKHU2NCl2bWEtXFx1MDAzZXZtX3Bnb2ZmICogUEFHRV9TSVpFICsgKHZtYS1cXHUwMDNldm1fZW5kIC0gdm1hLVxcdTAwM2V2bV9zdGFydCkgXFx1MDAzZVxcbiBcXHQgICAgUEFHRV9BTElHTigodTY0KWFycmF5LVxcdTAwM2VtYXAubWF4X2VudHJpZXMgKiBhcnJheS1cXHUwMDNlZWxlbV9zaXplKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRyZXR1cm4gcmVtYXBfdm1hbGxvY19yYW5nZSh2bWEsIGFycmF5X21hcF92bWFsbG9jX2FkZHIoYXJyYXkpLFxcbi1cXHRcXHRcXHRcXHQgICB2bWEtXFx1MDAzZXZtX3Bnb2ZmICsgcGdvZmYpO1xcbitcXHQvKlxcbitcXHQgKiBUaGUgYmFja2luZyBtZW1vcnkgaXMgdm1hbGxvYydlZCB1cCBmcm9udCwgc28gaW5zdGVhZCBvZiB3aXJpbmcgdXBcXG4rXFx0ICogZXZlcnkgUFRFIGhlcmUgd2UgbGV0IHRoZSBmYXVsdCBoYW5kbGVycyBpbnNlcnQgcGFnZXMgb24gZGVtYW5kLlxcbitcXHQgKiByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWwoKSB1c2VkIHRvIHNldCB0aGVzZSBmbGFncyBmb3IgdXM7IGtlZXBcXG4rXFx0ICogdGhlbSB0byBwcmVzZXJ2ZSBiZWhhdmlvciAobm8gVk1BIGV4cGFuc2lvbiwgZXhjbHVkZWQgZnJvbSBjb3JlZHVtcCkuXFxuK1xcdCAqL1xcbitcXHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIFJlc29sdmUgdGhlIHZtYWxsb2MgcGFnZSBiYWNraW5nIHRoZSB2YWx1ZS1hcmVhIG9mZnNldCBvZiBhIGZhdWx0LiAqL1xcbitzdGF0aWMgc3RydWN0IHBhZ2UgKmFycmF5X21hcF9mYXVsdF9wYWdlKHN0cnVjdCBicGZfYXJyYXkgKmFycmF5LCBwZ29mZl90IHBnb2ZmKVxcbit7XFxuK1xcdHU2NCBhcnJheV9zaXplLCBvZmY7XFxuK1xcbitcXHRhcnJheV9zaXplID0gUEFHRV9BTElHTigodTY0KWFycmF5LVxcdTAwM2VtYXAubWF4X2VudHJpZXMgKiBhcnJheS1cXHUwMDNlZWxlbV9zaXplKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIHBnb2ZmIGlzIHRoZSBmYXVsdGluZyBwYWdlJ3Mgb2Zmc2V0IGludG8gdGhlIG1hcHBlZCB2YWx1ZSBhcmVhICh0aGVcXG4rXFx0ICogYnBmX2FycmF5IGhlYWRlciBwcmVjZWRlcyBhcnJheS1cXHUwMDNldmFsdWUgYW5kIGlzIG5vdCBtYXBwZWQpLiBHdWFyZCB0aGVcXG4rXFx0ICogc2hpZnQgYW5kIHRoZSBib3VuZHMgZXhwbGljaXRseSwgdGhlIHNhbWUgd2F5IHRoYXRcXG4rXFx0ICogcmVtYXBfdm1hbGxvY19yYW5nZV9wYXJ0aWFsKCkgZG9lcyBmb3IgdGhlIGVhZ2VyIHBhdGgsIGluc3RlYWQgb2ZcXG4rXFx0ICogcmVseWluZyBvbiB0aGUgbW1hcCgpLXRpbWUgYm91bmRzIGNoZWNrIGFsb25lLlxcbitcXHQgKi9cXG4rXFx0aWYgKGNoZWNrX3NobF9vdmVyZmxvdyhwZ29mZiwgUEFHRV9TSElGVCwgXFx1MDAyNm9mZikpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHRpZiAob2ZmIFxcdTAwM2U9IGFycmF5X3NpemUpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cmV0dXJuIHZtYWxsb2NfdG9fcGFnZShhcnJheS1cXHUwMDNldmFsdWUgKyBvZmYpO1xcbit9XFxuK1xcbitzdGF0aWMgdm1fZmF1bHRfdCBhcnJheV9tYXBfbW1hcF9mYXVsdChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9hcnJheSAqYXJyYXkgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FycmF5LCBtYXApO1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFxuK1xcdHBhZ2UgPSBhcnJheV9tYXBfZmF1bHRfcGFnZShhcnJheSwgdm1mLVxcdTAwM2VwZ29mZik7XFxuK1xcdGlmICghcGFnZSlcXG4rXFx0XFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcXG4rXFxuK1xcdGdldF9wYWdlKHBhZ2UpO1xcbitcXHR2bWYtXFx1MDAzZXBhZ2UgPSBwYWdlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEZhdWx0LWFyb3VuZCBoYW5kbGVyOiBpbnN0YWxsIFBURXMgZm9yIHRoZSB3aG9sZSBbc3RhcnRfcGdvZmYsIGVuZF9wZ29mZl1cXG4rICogd2luZG93IHVuZGVyIGEgc2luZ2xlIHBhZ2UtdGFibGUgbG9jaywgc28gdGhhdCBwb3B1bGF0aW5nIGEgbGFyZ2UgbWFwcGluZ1xcbisgKiAoZS5nLiBtbWFwKE1BUF9QT1BVTEFURSkgb3IgYSBsaW5lYXIgYWNjZXNzIHBhdHRlcm4pIGRvZXMgbm90IHRha2Ugb25lIGZ1bGxcXG4rICogZmF1bHQgcGVyIHBhZ2UuXFxuKyAqL1xcbitzdGF0aWMgdm1fZmF1bHRfdCBhcnJheV9tYXBfbW1hcF9wYWdlcyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHBnb2ZmX3Qgc3RhcnRfcGdvZmYsIHBnb2ZmX3QgZW5kX3Bnb2ZmKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfYXJyYXkgKmFycmF5ID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcnJheSwgbWFwKTtcXG4rXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXFx1MDAzZXZtYTtcXG4rXFx0dW5zaWduZWQgbG9uZyBhZGRyLCByc3MgPSAwO1xcbitcXHR2bV9mYXVsdF90IHJldCA9IDA7XFxuK1xcdHB0ZV90ICpzdGFydF9wdGU7XFxuK1xcdHBnb2ZmX3QgcGdvZmY7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgUFRFIHRhYmxlIGZvciB0aGlzIFBNRCBtdXN0IGFscmVhZHkgZXhpc3Q7IGluc3RhbGxpbmcgaXQgbmVlZHNcXG4rXFx0ICogbW0taW50ZXJuYWwgaGVscGVycy4gSWYgaXQgaXMgbWlzc2luZywgbGV0IHRoZSByZWd1bGFyIC1cXHUwMDNlZmF1bHQgcGF0aFxcbitcXHQgKiBpbnN0YWxsIGl0IGFuZCByZWx5IG9uIHRoZSBuZXh0IGZhdWx0LWFyb3VuZCB0byBiYXRjaCB0aGUgcmVzdC5cXG4rXFx0ICovXFxuK1xcdGlmIChwbWRfbm9uZSgqdm1mLVxcdTAwM2VwbWQpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGFkZHIgPSB2bWEtXFx1MDAzZXZtX3N0YXJ0ICsgKChzdGFydF9wZ29mZiAtIHZtYS1cXHUwMDNldm1fcGdvZmYpIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpO1xcbitcXHRzdGFydF9wdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHZtYS1cXHUwMDNldm1fbW0sIHZtZi1cXHUwMDNlcG1kLCBhZGRyLCBcXHUwMDI2dm1mLVxcdTAwM2VwdGwpO1xcbitcXHRpZiAoIXN0YXJ0X3B0ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHZtZi1cXHUwMDNlcHRlID0gc3RhcnRfcHRlO1xcbitcXG4rXFx0Zm9yIChwZ29mZiA9IHN0YXJ0X3Bnb2ZmOyBwZ29mZiBcXHUwMDNjPSBlbmRfcGdvZmY7XFxuK1xcdCAgICAgcGdvZmYrKywgdm1mLVxcdTAwM2VwdGUrKywgYWRkciArPSBQQUdFX1NJWkUpIHtcXG4rXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuK1xcbitcXHRcXHRpZiAoIXB0ZV9ub25lKHB0ZXBfZ2V0KHZtZi1cXHUwMDNlcHRlKSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0cGFnZSA9IGFycmF5X21hcF9mYXVsdF9wYWdlKGFycmF5LCBwZ29mZik7XFxuK1xcdFxcdGlmICghcGFnZSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuK1xcdFxcdGZvbGlvX2dldChmb2xpbyk7XFxuK1xcdFxcdHNldF9wdGVfcmFuZ2Uodm1mLCBmb2xpbywgcGFnZSwgMSwgYWRkcik7XFxuK1xcdFxcdHJzcysrO1xcbitcXHRcXHRpZiAoYWRkciA9PSB2bWYtXFx1MDAzZWFkZHJlc3MpXFxuK1xcdFxcdFxcdHJldCA9IFZNX0ZBVUxUX05PUEFHRTtcXG4rXFx0fVxcbitcXG4rXFx0YWRkX21tX2NvdW50ZXIodm1hLVxcdTAwM2V2bV9tbSwgTU1fRklMRVBBR0VTLCByc3MpO1xcbitcXHRwdGVfdW5tYXBfdW5sb2NrKHN0YXJ0X3B0ZSwgdm1mLVxcdTAwM2VwdGwpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgYXJyYXlfbWFwX21ldGFfZXF1YWwoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1ldGEwLFxcbkBAIC04MTIsNiArOTE0LDggQEAgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XFxuIFxcdC5tYXBfZGlyZWN0X3ZhbHVlX2FkZHIgPSBhcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIsXFxuIFxcdC5tYXBfZGlyZWN0X3ZhbHVlX21ldGEgPSBhcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEsXFxuIFxcdC5tYXBfbW1hcCA9IGFycmF5X21hcF9tbWFwLFxcbitcXHQubWFwX21tYXBfZmF1bHQgPSBhcnJheV9tYXBfbW1hcF9mYXVsdCxcXG4rXFx0Lm1hcF9tbWFwX3BhZ2VzID0gYXJyYXlfbWFwX21tYXBfcGFnZXMsXFxuIFxcdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGFycmF5X21hcF9zZXFfc2hvd19lbGVtLFxcbiBcXHQubWFwX2NoZWNrX2J0ZiA9IGFycmF5X21hcF9jaGVja19idGYsXFxuIFxcdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXFxuaW5kZXggMGZmOWUzYWEyOTNkNS4uOTkwYzJmNWJlNDBhZiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbisrKyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXFxuQEAgLTEwNzcsOSArMTA3NywzOSBAQCBzdGF0aWMgdm9pZCBicGZfbWFwX21tYXBfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIFxcdFxcdGJwZl9tYXBfd3JpdGVfYWN0aXZlX2RlYyhtYXApO1xcbiB9XFxuIFxcbisvKlxcbisgKiBDYWxsZWQgZm9yIG1hcHMgdGhhdCBwb3B1bGF0ZSB0aGVpciBtZW1vcnktbWFwcGVkIHJlZ2lvbiBsYXppbHksIGkuZS4gdGhhdFxcbisgKiByZXR1cm4gd2l0aG91dCB3aXJpbmcgdXAgYW55IFBURXMgZnJvbSB0aGVpciAtXFx1MDAzZW1hcF9tbWFwIGNhbGxiYWNrLiBNYXBzIHRoYXRcXG4rICogcG9wdWxhdGUgdGhlIHdob2xlIFZNQSBlYWdlcmx5IChlLmcuIHZpYSByZW1hcF92bWFsbG9jX3JhbmdlKCkpIG5ldmVyIHJlYWNoXFxuKyAqIGhlcmUuXFxuKyAqL1xcbitzdGF0aWMgdm1fZmF1bHRfdCBicGZfbWFwX21tYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHZtZi1cXHUwMDNldm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGE7XFxuK1xcbitcXHRpZiAoIW1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfbW1hcF9mYXVsdClcXG4rXFx0XFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcXG4rXFxuK1xcdHJldHVybiBtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWFwX21tYXBfZmF1bHQobWFwLCB2bWYpO1xcbit9XFxuK1xcbisvKiBGYXVsdC1hcm91bmQ6IGJhdGNoLXBvcHVsYXRlIFBURXMgYXJvdW5kIHRoZSBmYXVsdGluZyBhZGRyZXNzLiAqL1xcbitzdGF0aWMgdm1fZmF1bHRfdCBicGZfbWFwX21tYXBfcGFnZXMoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuK1xcdFxcdFxcdFxcdCAgICAgcGdvZmZfdCBzdGFydF9wZ29mZiwgcGdvZmZfdCBlbmRfcGdvZmYpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHZtZi1cXHUwMDNldm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGE7XFxuK1xcbitcXHRpZiAoIW1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfbW1hcF9wYWdlcylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9tbWFwX3BhZ2VzKG1hcCwgdm1mLCBzdGFydF9wZ29mZiwgZW5kX3Bnb2ZmKTtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBicGZfbWFwX2RlZmF1bHRfdm1vcHMgPSB7XFxuIFxcdC5vcGVuXFx0XFx0PSBicGZfbWFwX21tYXBfb3BlbixcXG4gXFx0LmNsb3NlXFx0XFx0PSBicGZfbWFwX21tYXBfY2xvc2UsXFxuK1xcdC5mYXVsdFxcdFxcdD0gYnBmX21hcF9tbWFwX2ZhdWx0LFxcbitcXHQubWFwX3BhZ2VzXFx0PSBicGZfbWFwX21tYXBfcGFnZXMsXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IGJwZl9tYXBfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAzOjU0OjI5LjM5NTU1Mjc5MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM3ODA4MTA4MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXJyYXlfbWFwX21tYXBfZmF1bHRcIixcbiAgICBcImFycmF5X21hcF9tbWFwX3BhZ2VzXCIsXG4gICAgXCJicGZfbWFwX21tYXBfZmF1bHRcIixcbiAgICBcImJwZl9tYXBfbW1hcF9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgYXJyYXkgbWFwIG1lbW9yeSBtYXBwaW5nIGxvZ2ljIHRvIHVzZSBsYXp5IGZhdWx0aW5nIGluc3RlYWQgb2YgZWFnZXIgbWFwcGluZy4gSXQgaW50cm9kdWNlcyBuZXcgZmF1bHQgaGFuZGxlcnMgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBhbmQgYGFycmF5X21hcF9tbWFwX3BhZ2VzYCBpbiBgYXJyYXltYXAuY2AsIGFuZCBjb3JyZXNwb25kaW5nIHN5c2NhbGwgaGFuZGxlcnMgaW4gYHN5c2NhbGwuY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2NjYTE5YzgzNzQxODkyYTdhZDkzYTJiYThmNjI4ZDdkNWY3MGM4MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDAzOjU0OjI4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcbmluZGV4IDdiZmMyODY3MzEyNDQuLmViNTc4Y2UwODdiNzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5AQCAtMTQ1LDYgKzE0NSw5IEBAIHN0cnVjdCBicGZfbWFwX29wcyB7XG4gXHRpbnQgKCptYXBfZGlyZWN0X3ZhbHVlX21ldGEpKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHRcdFx0XHQgICAgIHU2NCBpbW0sIHUzMiAqb2ZmKTtcbiBcdGludCAoKm1hcF9tbWFwKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4rXHR2bV9mYXVsdF90ICgqbWFwX21tYXBfZmF1bHQpKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKTtcbitcdHZtX2ZhdWx0X3QgKCptYXBfbW1hcF9wYWdlcykoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4rXHRcdFx0XHQgICAgIHBnb2ZmX3Qgc3RhcnRfcGdvZmYsIHBnb2ZmX3QgZW5kX3Bnb2ZmKTtcbiBcdF9fcG9sbF90ICgqbWFwX3BvbGwpKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0XHRcdCAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICpwdHMpO1xuIFx0dW5zaWduZWQgbG9uZyAoKm1hcF9nZXRfdW5tYXBwZWRfYXJlYSkoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9hcnJheW1hcC5jIGIva2VybmVsL2JwZi9hcnJheW1hcC5jXG5pbmRleCAyNDhiNDgxODE3OGNkLi4zNTk0ZTI2YjlmYjg4IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9hcnJheW1hcC5jXG4rKysgYi9rZXJuZWwvYnBmL2FycmF5bWFwLmNcbkBAIC03LDYgKzcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L292ZXJmbG93LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWx0ZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvYnRmLmhcdTAwM2VcbkBAIC01NzYsMTcgKzU3NywxMTggQEAgc3RhdGljIGludCBhcnJheV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsXG4gc3RhdGljIGludCBhcnJheV9tYXBfbW1hcChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiB7XG4gXHRzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7XG4tXHRwZ29mZl90IHBnb2ZmID0gUEFHRV9BTElHTihzaXplb2YoKmFycmF5KSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXG4gXHRpZiAoIShtYXAtXHUwMDNlbWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9NTUFQQUJMRSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKHZtYS1cdTAwM2V2bV9wZ29mZiAqIFBBR0VfU0laRSArICh2bWEtXHUwMDNldm1fZW5kIC0gdm1hLVx1MDAzZXZtX3N0YXJ0KSBcdTAwM2VcbitcdC8qIHVzZSB1NjQgbWF0aCBzbyB0aGUgb2Zmc2V0IGNhbm5vdCBvdmVyZmxvdyBvbiAzMi1iaXQgYXJjaHMgKi9cbitcdGlmICgodTY0KXZtYS1cdTAwM2V2bV9wZ29mZiAqIFBBR0VfU0laRSArICh2bWEtXHUwMDNldm1fZW5kIC0gdm1hLVx1MDAzZXZtX3N0YXJ0KSBcdTAwM2VcbiBcdCAgICBQQUdFX0FMSUdOKCh1NjQpYXJyYXktXHUwMDNlbWFwLm1heF9lbnRyaWVzICogYXJyYXktXHUwMDNlZWxlbV9zaXplKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRyZXR1cm4gcmVtYXBfdm1hbGxvY19yYW5nZSh2bWEsIGFycmF5X21hcF92bWFsbG9jX2FkZHIoYXJyYXkpLFxuLVx0XHRcdFx0ICAgdm1hLVx1MDAzZXZtX3Bnb2ZmICsgcGdvZmYpO1xuK1x0LypcbitcdCAqIFRoZSBiYWNraW5nIG1lbW9yeSBpcyB2bWFsbG9jJ2VkIHVwIGZyb250LCBzbyBpbnN0ZWFkIG9mIHdpcmluZyB1cFxuK1x0ICogZXZlcnkgUFRFIGhlcmUgd2UgbGV0IHRoZSBmYXVsdCBoYW5kbGVycyBpbnNlcnQgcGFnZXMgb24gZGVtYW5kLlxuK1x0ICogcmVtYXBfdm1hbGxvY19yYW5nZV9wYXJ0aWFsKCkgdXNlZCB0byBzZXQgdGhlc2UgZmxhZ3MgZm9yIHVzOyBrZWVwXG4rXHQgKiB0aGVtIHRvIHByZXNlcnZlIGJlaGF2aW9yIChubyBWTUEgZXhwYW5zaW9uLCBleGNsdWRlZCBmcm9tIGNvcmVkdW1wKS5cbitcdCAqL1xuK1x0dm1fZmxhZ3Nfc2V0KHZtYSwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBSZXNvbHZlIHRoZSB2bWFsbG9jIHBhZ2UgYmFja2luZyB0aGUgdmFsdWUtYXJlYSBvZmZzZXQgb2YgYSBmYXVsdC4gKi9cbitzdGF0aWMgc3RydWN0IHBhZ2UgKmFycmF5X21hcF9mYXVsdF9wYWdlKHN0cnVjdCBicGZfYXJyYXkgKmFycmF5LCBwZ29mZl90IHBnb2ZmKVxuK3tcbitcdHU2NCBhcnJheV9zaXplLCBvZmY7XG4rXG4rXHRhcnJheV9zaXplID0gUEFHRV9BTElHTigodTY0KWFycmF5LVx1MDAzZW1hcC5tYXhfZW50cmllcyAqIGFycmF5LVx1MDAzZWVsZW1fc2l6ZSk7XG4rXG4rXHQvKlxuK1x0ICogcGdvZmYgaXMgdGhlIGZhdWx0aW5nIHBhZ2UncyBvZmZzZXQgaW50byB0aGUgbWFwcGVkIHZhbHVlIGFyZWEgKHRoZVxuK1x0ICogYnBmX2FycmF5IGhlYWRlciBwcmVjZWRlcyBhcnJheS1cdTAwM2V2YWx1ZSBhbmQgaXMgbm90IG1hcHBlZCkuIEd1YXJkIHRoZVxuK1x0ICogc2hpZnQgYW5kIHRoZSBib3VuZHMgZXhwbGljaXRseSwgdGhlIHNhbWUgd2F5IHRoYXRcbitcdCAqIHJlbWFwX3ZtYWxsb2NfcmFuZ2VfcGFydGlhbCgpIGRvZXMgZm9yIHRoZSBlYWdlciBwYXRoLCBpbnN0ZWFkIG9mXG4rXHQgKiByZWx5aW5nIG9uIHRoZSBtbWFwKCktdGltZSBib3VuZHMgY2hlY2sgYWxvbmUuXG4rXHQgKi9cbitcdGlmIChjaGVja19zaGxfb3ZlcmZsb3cocGdvZmYsIFBBR0VfU0hJRlQsIFx1MDAyNm9mZikpXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0aWYgKG9mZiBcdTAwM2U9IGFycmF5X3NpemUpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0cmV0dXJuIHZtYWxsb2NfdG9fcGFnZShhcnJheS1cdTAwM2V2YWx1ZSArIG9mZik7XG4rfVxuK1xuK3N0YXRpYyB2bV9mYXVsdF90IGFycmF5X21hcF9tbWFwX2ZhdWx0KHN0cnVjdCBicGZfbWFwICptYXAsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4re1xuK1x0c3RydWN0IGJwZl9hcnJheSAqYXJyYXkgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FycmF5LCBtYXApO1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4rXG4rXHRwYWdlID0gYXJyYXlfbWFwX2ZhdWx0X3BhZ2UoYXJyYXksIHZtZi1cdTAwM2VwZ29mZik7XG4rXHRpZiAoIXBhZ2UpXG4rXHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4rXG4rXHRnZXRfcGFnZShwYWdlKTtcbitcdHZtZi1cdTAwM2VwYWdlID0gcGFnZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIEZhdWx0LWFyb3VuZCBoYW5kbGVyOiBpbnN0YWxsIFBURXMgZm9yIHRoZSB3aG9sZSBbc3RhcnRfcGdvZmYsIGVuZF9wZ29mZl1cbisgKiB3aW5kb3cgdW5kZXIgYSBzaW5nbGUgcGFnZS10YWJsZSBsb2NrLCBzbyB0aGF0IHBvcHVsYXRpbmcgYSBsYXJnZSBtYXBwaW5nXG4rICogKGUuZy4gbW1hcChNQVBfUE9QVUxBVEUpIG9yIGEgbGluZWFyIGFjY2VzcyBwYXR0ZXJuKSBkb2VzIG5vdCB0YWtlIG9uZSBmdWxsXG4rICogZmF1bHQgcGVyIHBhZ2UuXG4rICovXG4rc3RhdGljIHZtX2ZhdWx0X3QgYXJyYXlfbWFwX21tYXBfcGFnZXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4rXHRcdFx0XHQgICAgICAgcGdvZmZfdCBzdGFydF9wZ29mZiwgcGdvZmZfdCBlbmRfcGdvZmYpXG4re1xuK1x0c3RydWN0IGJwZl9hcnJheSAqYXJyYXkgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FycmF5LCBtYXApO1xuK1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXHUwMDNldm1hO1xuK1x0dW5zaWduZWQgbG9uZyBhZGRyLCByc3MgPSAwO1xuK1x0dm1fZmF1bHRfdCByZXQgPSAwO1xuK1x0cHRlX3QgKnN0YXJ0X3B0ZTtcbitcdHBnb2ZmX3QgcGdvZmY7XG4rXG4rXHQvKlxuK1x0ICogVGhlIFBURSB0YWJsZSBmb3IgdGhpcyBQTUQgbXVzdCBhbHJlYWR5IGV4aXN0OyBpbnN0YWxsaW5nIGl0IG5lZWRzXG4rXHQgKiBtbS1pbnRlcm5hbCBoZWxwZXJzLiBJZiBpdCBpcyBtaXNzaW5nLCBsZXQgdGhlIHJlZ3VsYXIgLVx1MDAzZWZhdWx0IHBhdGhcbitcdCAqIGluc3RhbGwgaXQgYW5kIHJlbHkgb24gdGhlIG5leHQgZmF1bHQtYXJvdW5kIHRvIGJhdGNoIHRoZSByZXN0LlxuK1x0ICovXG4rXHRpZiAocG1kX25vbmUoKnZtZi1cdTAwM2VwbWQpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGFkZHIgPSB2bWEtXHUwMDNldm1fc3RhcnQgKyAoKHN0YXJ0X3Bnb2ZmIC0gdm1hLVx1MDAzZXZtX3Bnb2ZmKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4rXHRzdGFydF9wdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHZtYS1cdTAwM2V2bV9tbSwgdm1mLVx1MDAzZXBtZCwgYWRkciwgXHUwMDI2dm1mLVx1MDAzZXB0bCk7XG4rXHRpZiAoIXN0YXJ0X3B0ZSlcbitcdFx0cmV0dXJuIDA7XG4rXHR2bWYtXHUwMDNlcHRlID0gc3RhcnRfcHRlO1xuK1xuK1x0Zm9yIChwZ29mZiA9IHN0YXJ0X3Bnb2ZmOyBwZ29mZiBcdTAwM2M9IGVuZF9wZ29mZjtcbitcdCAgICAgcGdvZmYrKywgdm1mLVx1MDAzZXB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSkge1xuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbitcbitcdFx0aWYgKCFwdGVfbm9uZShwdGVwX2dldCh2bWYtXHUwMDNlcHRlKSkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHBhZ2UgPSBhcnJheV9tYXBfZmF1bHRfcGFnZShhcnJheSwgcGdvZmYpO1xuK1x0XHRpZiAoIXBhZ2UpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbitcdFx0Zm9saW9fZ2V0KGZvbGlvKTtcbitcdFx0c2V0X3B0ZV9yYW5nZSh2bWYsIGZvbGlvLCBwYWdlLCAxLCBhZGRyKTtcbitcdFx0cnNzKys7XG4rXHRcdGlmIChhZGRyID09IHZtZi1cdTAwM2VhZGRyZXNzKVxuK1x0XHRcdHJldCA9IFZNX0ZBVUxUX05PUEFHRTtcbitcdH1cbitcbitcdGFkZF9tbV9jb3VudGVyKHZtYS1cdTAwM2V2bV9tbSwgTU1fRklMRVBBR0VTLCByc3MpO1xuK1x0cHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHZtZi1cdTAwM2VwdGwpO1xuK1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGJvb2wgYXJyYXlfbWFwX21ldGFfZXF1YWwoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1ldGEwLFxuQEAgLTgxMiw2ICs5MTQsOCBAQCBjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfbWFwX29wcyA9IHtcbiBcdC5tYXBfZGlyZWN0X3ZhbHVlX2FkZHIgPSBhcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIsXG4gXHQubWFwX2RpcmVjdF92YWx1ZV9tZXRhID0gYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhLFxuIFx0Lm1hcF9tbWFwID0gYXJyYXlfbWFwX21tYXAsXG4rXHQubWFwX21tYXBfZmF1bHQgPSBhcnJheV9tYXBfbW1hcF9mYXVsdCxcbitcdC5tYXBfbW1hcF9wYWdlcyA9IGFycmF5X21hcF9tbWFwX3BhZ2VzLFxuIFx0Lm1hcF9zZXFfc2hvd19lbGVtID0gYXJyYXlfbWFwX3NlcV9zaG93X2VsZW0sXG4gXHQubWFwX2NoZWNrX2J0ZiA9IGFycmF5X21hcF9jaGVja19idGYsXG4gXHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCAwZmY5ZTNhYTI5M2Q1Li45OTBjMmY1YmU0MGFmIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbisrKyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtMTA3Nyw5ICsxMDc3LDM5IEBAIHN0YXRpYyB2b2lkIGJwZl9tYXBfbW1hcF9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdFx0YnBmX21hcF93cml0ZV9hY3RpdmVfZGVjKG1hcCk7XG4gfVxuIFxuKy8qXG4rICogQ2FsbGVkIGZvciBtYXBzIHRoYXQgcG9wdWxhdGUgdGhlaXIgbWVtb3J5LW1hcHBlZCByZWdpb24gbGF6aWx5LCBpLmUuIHRoYXRcbisgKiByZXR1cm4gd2l0aG91dCB3aXJpbmcgdXAgYW55IFBURXMgZnJvbSB0aGVpciAtXHUwMDNlbWFwX21tYXAgY2FsbGJhY2suIE1hcHMgdGhhdFxuKyAqIHBvcHVsYXRlIHRoZSB3aG9sZSBWTUEgZWFnZXJseSAoZS5nLiB2aWEgcmVtYXBfdm1hbGxvY19yYW5nZSgpKSBuZXZlciByZWFjaFxuKyAqIGhlcmUuXG4rICovXG4rc3RhdGljIHZtX2ZhdWx0X3QgYnBmX21hcF9tbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuK3tcbitcdHN0cnVjdCBicGZfbWFwICptYXAgPSB2bWYtXHUwMDNldm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbitcbitcdGlmICghbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfbW1hcF9mYXVsdClcbitcdFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcbitcbitcdHJldHVybiBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9tbWFwX2ZhdWx0KG1hcCwgdm1mKTtcbit9XG4rXG4rLyogRmF1bHQtYXJvdW5kOiBiYXRjaC1wb3B1bGF0ZSBQVEVzIGFyb3VuZCB0aGUgZmF1bHRpbmcgYWRkcmVzcy4gKi9cbitzdGF0aWMgdm1fZmF1bHRfdCBicGZfbWFwX21tYXBfcGFnZXMoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4rXHRcdFx0XHQgICAgIHBnb2ZmX3Qgc3RhcnRfcGdvZmYsIHBnb2ZmX3QgZW5kX3Bnb2ZmKVxuK3tcbitcdHN0cnVjdCBicGZfbWFwICptYXAgPSB2bWYtXHUwMDNldm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbitcbitcdGlmICghbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfbW1hcF9wYWdlcylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfbW1hcF9wYWdlcyhtYXAsIHZtZiwgc3RhcnRfcGdvZmYsIGVuZF9wZ29mZik7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYnBmX21hcF9kZWZhdWx0X3Ztb3BzID0ge1xuIFx0Lm9wZW5cdFx0PSBicGZfbWFwX21tYXBfb3BlbixcbiBcdC5jbG9zZVx0XHQ9IGJwZl9tYXBfbW1hcF9jbG9zZSxcbitcdC5mYXVsdFx0XHQ9IGJwZl9tYXBfbW1hcF9mYXVsdCxcbitcdC5tYXBfcGFnZXNcdD0gYnBmX21hcF9tbWFwX3BhZ2VzLFxuIH07XG4gXG4gc3RhdGljIGludCBicGZfbWFwX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDM6NTQ6MjkuMzk1NTUzODgyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUwMzAzNzUzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBBcnJheSBNYXAgTGF6eSBGYXVsdGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgbWFraW5nIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIGhvdyBCUEYgYXJyYXkgbWFwcyBhcmUgbWVtb3J5IG1hcHBlZC4gSW5zdGVhZCBvZiB0aGUgZWFnZXIgYHJlbWFwX3ZtYWxsb2NfcmFuZ2VgIGFwcHJvYWNoLCB3ZSdyZSBnb2luZyB3aXRoIGxhenkgZmF1bHRpbmcuIFRoaXMgaXMgcHJldHR5IHNpZ25pZmljYW50LiBUaGV5J3ZlIGFkZGVkIGBtYXBfbW1hcF9mYXVsdGAgYW5kIGBtYXBfbW1hcF9wYWdlc2AgdG8gdGhlIGBzdHJ1Y3QgYnBmX21hcF9vcHNgLCBhbmQgaW1wbGVtZW50ZWQgdGhlIGFycmF5LXNwZWNpZmljIHZlcnNpb25zLCBgYXJyYXlfbWFwX21tYXBfZmF1bHRgIGFuZCBgYXJyYXlfbWFwX21tYXBfcGFnZXNgLCB3aXRoaW4gYGtlcm5lbC9icGYvYXJyYXltYXAuY2AuIFRoZXkndmUgYWxzbyB1cGRhdGVkIGBicGZfbWFwX2RlZmF1bHRfdm1vcHNgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgdG8gaW5jbHVkZSB0aGUgYC5mYXVsdGAgYW5kIGAubWFwX3BhZ2VzYCBob29rcy4gVGhpcyBpcyBhIGNvcmUga2VybmVsIG1vZGlmaWNhdGlvbiwgaW1wYWN0aW5nIGEgY3J1Y2lhbCBzdWJzeXN0ZW0uXG5cbkdpdmVuIHRoZSBzY29wZSwgZnV6emluZyB0aGlzIGNoYW5nZSBpcyBnb2luZyB0byBiZSBlc3NlbnRpYWwuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRob3NlIGtleSBzeW1ib2xzIOKAkyBgYXJyYXlfbWFwX21tYXBfZmF1bHRgLCBgYXJyYXlfbWFwX21tYXBfcGFnZXNgLCBgYnBmX21hcF9tbWFwX2ZhdWx0YCwgYW5kIGBicGZfbWFwX21tYXBfcGFnZXNgIOKAkyB0byB1bmRlcnN0YW5kIHRoZSBjcml0aWNhbCBwb2ludHMgb2YgdGhpcyBuZXcgaW1wbGVtZW50YXRpb24uXG5cbkkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgYEJQRl9TWVNDQUxMYCBpcyBhIGdpdmVuLCBidXQgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyB0aGUgb25seSBvbmUuXG5cbkxldCBtZSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhvc2Ugc3ltYm9scy4gYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBpcyBzdGF0aWMgaW4gYGtlcm5lbC9icGYvYXJyYXltYXAuY2AuIFN0YXRpYyBmdW5jdGlvbnMgb2Z0ZW4gZ2V0IGlubGluZWQsIGJ1dCB0aGVzZSBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgaW4gdGhlIGBhcnJheV9tYXBfb3BzYCBzdHJ1Y3R1cmUuIFNvLCB0aGVpciBhZGRyZXNzZXMgYXJlIHRha2VuLCBtZWFuaW5nIHRoZXkgd2lsbCBleGlzdCBhcyBkaXN0aW5jdCBzeW1ib2xzLiBUaGUgc2FtZSBhcHBsaWVzIHRvIGBicGZfbWFwX21tYXBfZmF1bHRgLCB3aGljaCBpcyBzdGF0aWMgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC5cblxuSSdtIHVzaW5nIGBncmVwcGVyYCBub3cgdG8gY2hlY2sgdGhlIGNvbnRleHQgb2YgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBhbmQgdmVyaWZ5IHRoYXQgaXQncyBiZWluZyB1c2VkIGFzIEkgZXhwZWN0LiBPa2F5LCB0aGF0IGxvb2tzIGdvb2QuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcwMiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAzOjU0OjM1Ljg5ODU5Mjk0NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTAxODY4MDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFycmF5X21hcF9tbWFwX2ZhdWx0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYXJyYXltYXAuYz02MDE9c3RhdGljIHN0cnVjdCBwYWdlICphcnJheV9tYXBfZmF1bHRfcGFnZShzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSwgcGdvZmZfdCBwZ29mZilcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy02MjEtXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjYyMjpzdGF0aWMgdm1fZmF1bHRfdCBhcnJheV9tYXBfbW1hcF9mYXVsdChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy02MjMtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTkwMz1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy05MTYtXFx0Lm1hcF9tbWFwID0gYXJyYXlfbWFwX21tYXAsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjkxNzpcXHQubWFwX21tYXBfZmF1bHQgPSBhcnJheV9tYXBfbW1hcF9mYXVsdCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtOTE4LVxcdC5tYXBfbW1hcF9wYWdlcyA9IGFycmF5X21hcF9tbWFwX3BhZ2VzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMzo1NDozOC40MDA0NjQ3NDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTg3NjcyNTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgTWFwIE1lbW9yeSBNYXBwaW5nIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGVzZSBjb3JlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBtYXBwaW5nIGFuZCBCUEYgbWFwczogYGFycmF5X21hcF9tbWFwX2ZhdWx0YCwgYGFycmF5X21hcF9tbWFwX3BhZ2VzYCwgYGJwZl9tYXBfbW1hcF9mYXVsdGAsIGFuZCBgYnBmX21hcF9tbWFwX3BhZ2VzYC4gSSdtIGdvaW5nIHRvIHNraXAgb3ZlciB0aGUgYGFycmF5X21hcF9mYXVsdF9wYWdlYCBoZWxwZXIgZm9yIG5vdzsgaXQncyBzdGF0aWMgYW5kIGxpa2VseSB1c2VkIGludGVybmFsbHkgYnkgdGhlIG90aGVycywgc28gdW5kZXJzdGFuZGluZyB0aGUgbWFpbiBlbnRyeSBwb2ludHMgaXMgbW9yZSBjcml0aWNhbCBhdCB0aGlzIHN0YWdlLlxuXG5NeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIGBicGZfbWFwX21tYXBfZmF1bHRgLiBUaGF0IGZlZWxzIGxpa2UgYSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IOKAkyBwYXJ0aWN1bGFybHkgYmVjYXVzZSBpdCBoYW5kbGVzICpmYXVsdHMqLCB3aGljaCBhcmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG9uLWRlbWFuZCBtZW1vcnkgYWxsb2NhdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gSSdtIGdvaW5nIHRvIGZpbmQgdGhpcyBmdW5jdGlvbiB3aXRoaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBhbmQgYmVnaW4gdGhlcmUuIEZyb20gdGhlcmUgSSdsbCBtYXAgb3V0IGhvdyB0aGUgb3RoZXIgZnVuY3Rpb25zIGFyZSB1c2VkIGluIHRoZSBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODUzLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDM6NTQ6NDEuOTg4MTM5NDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3MDAzNjgyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbWFwX21tYXBfZmF1bHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9MTA3Mj1zdGF0aWMgdm9pZCBicGZfbWFwX21tYXBfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMDg1LSAqL1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEwODY6c3RhdGljIHZtX2ZhdWx0X3QgYnBmX21hcF9tbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwODcte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTEwOD1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGJwZl9tYXBfZGVmYXVsdF92bW9wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTExMTAtXFx0LmNsb3NlXFx0XFx0PSBicGZfbWFwX21tYXBfY2xvc2UsXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTExMTpcXHQuZmF1bHRcXHRcXHQ9IGJwZl9tYXBfbW1hcF9mYXVsdCxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMTEyLVxcdC5tYXBfcGFnZXNcXHQ9IGJwZl9tYXBfbW1hcF9wYWdlcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDM6NTQ6NDQuMzU4MTg1NTA0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3NzgxMzAwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlRhcmdldGluZyBOb24tSW5saW5lZCBGdW5jdGlvbnMqKlxuXG5SaWdodCwgc28gdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycy4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGV5J3JlIG5vdCBmdWxseSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gVGhpcyBpcyBrZXkgYmVjYXVzZSBpdCBtZWFucyB0aGV5J3JlIGNvbmNyZXRlLCBhZGRyZXNzYWJsZSBlbnRyeSBwb2ludHMgaW4gbWVtb3J5LCBhbmQgdGhlcmVmb3JlLCB0YXJnZXRhYmxlLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBzdGFydCB0byB0aGluayB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgaG93IHRoaXMgbWlnaHQgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIEJQRi4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvc3NpYmlsaXRpZXMgZm9yIHRyYWNpbmcgb3IgbW9kaWZpY2F0aW9uLlxuXG5BbmQgbm93IEkgaGF2ZSBgQlBGX1NZU0NBTExgIGluIGZyb250IG9mIG1lLCB3aGljaCBsaWtlbHkgZGVmaW5lcyB0aGUgY29uZmlndXJhdGlvbi4gVGltZSB0byBmaW5kIHdoZXJlIHRoaXMgaXMgZGVjbGFyZWQsIGBrZXJuZWwvYnBmL0tjb25maWdgIGFuZCBgaW5pdC9LY29uZmlnYCB3aWxsIGJlIG15IGZpcnN0IHNwb3RzLCBhcyBpdCBpcyBtb3N0IGxpa2VseSBhIGtlcm5lbCBjb25maWd1cmF0aW9uIHRoYXQgd2lsbCBnaXZlIG1lIGFkZGl0aW9uYWwgY29udGV4dCBvZiBpdHMgdXNlLCBhbmQgYWxsb3cgbWUgdG8gdW5kZXJzdGFuZCBob3cgaXQgaW1wYWN0cyBCUEYgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ0MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAzOjU0OjQ3LjgzNjAyODY1N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTI2NzIxNjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAzOjU0OjQ5Ljk2Mjc1NTA0M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTcxMDE3MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBvd24gZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkJQRiBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIG15IGltbWVkaWF0ZSBndXQgZmVlbGluZyBpcyB0aGF0IGBCUEZfU1lTQ0FMTGAgaXMgdGhlIGNvcm5lcnN0b25lIG9mIHRoaXMgY29uZmlndXJhdGlvbi4gSXQncyB0aGUgY2VudHJhbCBtZWNoYW5pc20sIHRoZSBtYWluIHN3aXRjaCBpZiB5b3Ugd2lsbCwgZm9yIGVuYWJsaW5nIEJQRiBpbnRlcmFjdGlvbiB3aXRoIHN5c3RlbSBjYWxscy4gQnV0LCB3aXRoIG15IGV4cGVyaWVuY2UsIEkga25vdyBpdCdzIG5ldmVyIHF1aXRlIHRoYXQgc2ltcGxlLlxuXG5UaGVyZWZvcmUsIEkgbmVlZCB0byBtZXRob2RpY2FsbHkgZG91YmxlLWNoZWNrLCBhbmQgcGVyaGFwcyBkaWcgYSBsaXR0bGUgZGVlcGVyLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgdGhlcmUgYXJlbid0IGFueSBvdGhlciBsYXRlbnQgZGVwZW5kZW5jaWVzIG9yIHN1YnRsZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgbHVya2luZyBiZW5lYXRoIHRoZSBzdXJmYWNlIHRoYXQgY291bGQgaW1wYWN0IGhvdyBgQlBGX1NZU0NBTExgIGZ1bmN0aW9ucywgb3IgZXZlbiB3aGV0aGVyIGl0IGZ1bmN0aW9ucyBhdCBhbGwuIEkgbmVlZCB0byBrbm93IGFsbCBvZiB0aGUgbW92aW5nIHBhcnRzIGJlZm9yZSBJIGNhbiBtb3ZlIGZvcndhcmQuIFBlcmhhcHMgc29tZSBvdGhlciwgc2VlbWluZ2x5IHVucmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGF2ZSBhIGRvd25zdHJlYW0gaW1wYWN0IGhlcmUuIEl0J3MgdGltZSB0byBwdWxsIG91dCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgc3RhcnQgbWFwcGluZyB0aGUgbGFuZHNjYXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODAzLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDM6NTQ6NTMuODU5ODU5NDg1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDkzNDU5MTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb24uKkJQRl9TWVNDQUxMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaGlkL2JwZi9LY29uZmlnPTQ9Y29uZmlnIEhJRF9CUEZcXG4tLVxcbmRyaXZlcnMvaGlkL2JwZi9LY29uZmlnLTYtXFx0ZGVwZW5kcyBvbiBCUEZfSklUXFxuZHJpdmVycy9oaWQvYnBmL0tjb25maWc6NzpcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuZHJpdmVycy9oaWQvYnBmL0tjb25maWctOC1cXHRkZXBlbmRzIG9uIERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXFxuLS1cXG5kcml2ZXJzL21lZGlhL3JjL0tjb25maWc9MTk9Y29uZmlnIEJQRl9MSVJDX01PREUyXFxuZHJpdmVycy9tZWRpYS9yYy9LY29uZmlnLTIwLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gbGlyYyBkZXZpY2VzXFxcIlxcbmRyaXZlcnMvbWVkaWEvcmMvS2NvbmZpZzoyMTpcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuZHJpdmVycy9tZWRpYS9yYy9LY29uZmlnLTIyLVxcdGRlcGVuZHMgb24gUkNfQ09SRT15XFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTQ2Mz1jb25maWcgTkVUS0lUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00NjQtXFx0Ym9vbCBcXFwiQlBGLXByb2dyYW1tYWJsZSBuZXR3b3JrIGRldmljZVxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ2NTpcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00NjYtXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTEzNTI9Y29uZmlnIENHUk9VUF9CUEZcXG5pbml0L0tjb25maWctMTM1My1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcXFwiXFxuaW5pdC9LY29uZmlnOjEzNTQ6XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbmluaXQvS2NvbmZpZy0xMzU1LVxcdHNlbGVjdCBTT0NLX0NHUk9VUF9EQVRBXFxuLS1cXG5pb191cmluZy9LY29uZmlnPTE4PWNvbmZpZyBJT19VUklOR19CUEZfT1BTXFxuLS1cXG5pb191cmluZy9LY29uZmlnLTIwLVxcdGRlcGVuZHMgb24gSU9fVVJJTkdcXG5pb191cmluZy9LY29uZmlnOjIxOlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXFx1MDAyNlxcdTAwMjYgQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBERUJVR19JTkZPX0JURlxcbi0tXFxua2VybmVsL0tjb25maWcucHJlZW1wdD0xNjk9Y29uZmlnIFNDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTcwLVxcdGJvb2wgXFxcIkV4dGVuc2libGUgU2NoZWR1bGluZyBDbGFzc1xcXCJcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjE3MTpcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgREVCVUdfSU5GT19CVEZcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTE3Mi1cXHRzZWxlY3QgU1RBQ0tUUkFDRSBpZiBTVEFDS1RSQUNFX1NVUFBPUlRcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZz01OD1jb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNTktXFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxua2VybmVsL2JwZi9LY29uZmlnOjYwOlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXFx1MDAyNlxcdTAwMjYgSEFWRV9FQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTYxLVxcdGhlbHBcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZz03Mz1jb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTc1LVxcdGRlZmF1bHQgeVxcbmtlcm5lbC9icGYvS2NvbmZpZzo3NjpcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTc3LVxcdGhlbHBcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZz05Mj1jb25maWcgQlBGX0xTTVxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTk0LVxcdGRlcGVuZHMgb24gQlBGX0VWRU5UU1xcbmtlcm5lbC9icGYvS2NvbmZpZzo5NTpcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTk2LVxcdGRlcGVuZHMgb24gU0VDVVJJVFlcXG4tLVxcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnPTI9bWVudWNvbmZpZyBCUEZfUFJFTE9BRFxcbi0tXFxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWctNC1cXHRkZXBlbmRzIG9uIEJQRlxcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnOjU6XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnLTYtXFx0IyBUaGUgZGVwZW5kZW5jeSBvbiAhQ09NUElMRV9URVNUIHByZXZlbnRzIGl0IGZyb20gYmVpbmcgZW5hYmxlZFxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9NzcwPWNvbmZpZyBQUk9CRV9FVkVOVFNfQlRGX0FSR1NcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTc3Mi1cXHRkZXBlbmRzIG9uIEZQUk9CRV9FVkVOVFMgfHwgS1BST0JFX0VWRU5UU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnOjc3MzpcXHRkZXBlbmRzIG9uIERFQlVHX0lORk9fQlRGIFxcdTAwMjZcXHUwMDI2IEJQRl9TWVNDQUxMXFxua2VybmVsL3RyYWNlL0tjb25maWctNzc0LVxcdGJvb2wgXFxcIlN1cHBvcnQgQlRGIGZ1bmN0aW9uIGFyZ3VtZW50cyBmb3IgcHJvYmUgZXZlbnRzXFxcIlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9ODUzPWNvbmZpZyBCUEZfRVZFTlRTXFxua2VybmVsL3RyYWNlL0tjb25maWc6ODU0OlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NTUtXFx0ZGVwZW5kcyBvbiAoS1BST0JFX0VWRU5UUyB8fCBVUFJPQkVfRVZFTlRTKSBcXHUwMDI2XFx1MDAyNiBQRVJGX0VWRU5UU1xcbi0tXFxubGliL0tjb25maWcuZGVidWc9Mzk4PWNvbmZpZyBERUJVR19JTkZPX0JURlxcbi0tXFxubGliL0tjb25maWcuZGVidWctNDAxLVxcdGRlcGVuZHMgb24gIUdDQ19QTFVHSU5fUkFORFNUUlVDVCB8fCBDT01QSUxFX1RFU1RcXG5saWIvS2NvbmZpZy5kZWJ1Zzo0MDI6XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbmxpYi9LY29uZmlnLmRlYnVnLTQwMy1cXHRkZXBlbmRzIG9uIFBBSE9MRV9WRVJTSU9OIFxcdTAwM2U9IDEyMlxcbi0tXFxubmV0L0tjb25maWc9MzYxPWNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbi0tXFxubmV0L0tjb25maWctMzYzLVxcdGRlcGVuZHMgb24gSU5FVFxcbm5ldC9LY29uZmlnOjM2NDpcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxubmV0L0tjb25maWctMzY1LVxcdGRlcGVuZHMgb24gQ0dST1VQX0JQRlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWc9NDA2PWNvbmZpZyBORVRfU0NIX0JQRlxcbm5ldC9zY2hlZC9LY29uZmlnLTQwNy1cXHRib29sIFxcXCJCUEYtYmFzZWQgUWRpc2NcXFwiXFxubmV0L3NjaGVkL0tjb25maWc6NDA4OlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXFx1MDAyNlxcdTAwMjYgQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBERUJVR19JTkZPX0JURlxcbm5ldC9zY2hlZC9LY29uZmlnLTQwOS1cXHRoZWxwXFxuLS1cXG5uZXQvc21jL0tjb25maWc9MjM9Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbm5ldC9zbWMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XFxcIlxcbm5ldC9zbWMvS2NvbmZpZzoyNTpcXHRkZXBlbmRzIG9uIFNNQyBcXHUwMDI2XFx1MDAyNiBCUEZfSklUIFxcdTAwMjZcXHUwMDI2IEJQRl9TWVNDQUxMXFxubmV0L3NtYy9LY29uZmlnLTI2LVxcdGRlZmF1bHQgeVxcbi0tXFxubmV0L3hkcC9LY29uZmlnPTI9Y29uZmlnIFhEUF9TT0NLRVRTXFxubmV0L3hkcC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiWERQIHNvY2tldHNcXFwiXFxubmV0L3hkcC9LY29uZmlnOjQ6XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbm5ldC94ZHAvS2NvbmZpZy01LVxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMzo1NDo1Ni4zNTMzMjYxNzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyMzE3NzI3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN5c3RlbSBDYWxsIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYXJyYXltYXAuY2AgYW5kIGBzeXNjYWxsLmNgLiBJbW1lZGlhdGVseSwgbXkgYnJhaW4gZmxhZ3MgdGhhdCBgYXJyYXltYXAuY2AgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBrZXkgZGV0YWlsIHRvIGtlZXAgaW4gbWluZCwgYW5kIGl0IHN1Z2dlc3RzIHRoaXMgY2hhbmdlIGlzIHJlbGF0ZWQgdG8gdGhlIEJQRiBzeXN0ZW0gY2FsbCBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiwgc28gbGV0J3MganVtcCBvdmVyIHRvIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBhbmQgcXVpY2tseSBjb25maXJtIHRoZSBidWlsZCBkZXBlbmRlbmN5IGFuZCBnZXQgdGhlIGJyb2FkZXIgcGljdHVyZS4gTXkgaW5pdGlhbCBndWVzcyB3b3VsZCBiZSB0aGF0IG1vZGlmaWNhdGlvbnMgdG8gYGFycmF5bWFwLmNgIGFyZSBzb21laG93IGFmZmVjdGluZyB0aGUgd2F5IHN5c3RlbSBjYWxscyBhcmUgaGFuZGxlZCB3aGVuIEJQRiBpcyBpbnZvbHZlZDsgbGV0J3Mgc2VlIHdoYXQgdGhlIG1ha2VmaWxlIHJldmVhbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NDIsIk91dHB1dFRva2VucyI6MTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMzo1NDo1OS42NzY1MDYyNzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjM2ODI0MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJyYXltYXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9icGYvZ3JhcGhfZHNfaW1wbC5yc3Q9NzQ9d2hpY2ggYWxzbyBjb250YWlucyBhIGBgYnBmX3NwaW5fbG9ja2BgIC0gaW4gdGhlIGFib3ZlIGV4YW1wbGUgYm90aCBnbG9iYWxcXG5Eb2N1bWVudGF0aW9uL2JwZi9ncmFwaF9kc19pbXBsLnJzdDo3NTp2YXJpYWJsZXMgYXJlIHBsYWNlZCBpbiBhIHNpbmdsZS12YWx1ZSBhcnJheW1hcC4gVGhlIHZlcmlmaWVyIGNvbnNpZGVycyB0aGlzXFxuRG9jdW1lbnRhdGlvbi9icGYvZ3JhcGhfZHNfaW1wbC5yc3QtNzYtc3Bpbl9sb2NrIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgYGBicGZfcmJfcm9vdGBgIGJ5IHZpcnR1ZSBvZiBib3RoIGJlaW5nIGluXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGxvY2FsX3N0b3JhZ2UubyBxdWV1ZV9zdGFja19tYXBzLm8gcmluZ2J1Zi5vIGJwZl9pbnNuX2FycmF5Lm9cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMwMDc9c3RhdGljIGxvbmcgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdm9pZCAqdmFsdWUsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDIzLVxcdCAqIHRoZSB2YWx1ZSBtaWQtY29weS4gQ2FsbGVycyByZXF1aXJpbmcgY29uc2lzdGVudCByZWFkcyBtdXN0IHVzZVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMwMjQ6XFx0ICogQlBGX0ZfTE9DSywgbWF0Y2hpbmcgYXJyYXltYXAgc2VtYW50aWNzLlxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwMjUtXFx0ICpcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwMjctXFx0ICoga3B0cnMvZXRjLiBzdGlsbCBzaXQgaW4gdGhlIHNsb3QuIENhbmNlbCB0aGVtIGFmdGVyIHRoZSBjb3B5XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzAyODpcXHQgKiB0byBtYXRjaCBhcnJheW1hcCdzIHVwZGF0ZSBzZW1hbnRpY3MuXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAyOS1cXHQgKi9cXG4tLVxcbnNhbXBsZXMvYnBmL3NvY2tfZXhhbXBsZS5jLTEtLyogZUJQRiBleGFtcGxlIHByb2dyYW06XFxuc2FtcGxlcy9icGYvc29ja19leGFtcGxlLmM6MjogKiAtIGNyZWF0ZXMgYXJyYXltYXAgaW4ga2VybmVsIHdpdGgga2V5IDQgYnl0ZXMgYW5kIHZhbHVlIDggYnl0ZXNcXG5zYW1wbGVzL2JwZi9zb2NrX2V4YW1wbGUuYy0zLSAqXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jPTEwMTg9c3RhdGljIHZvaWQgdGVzdF9icGZfYXJyYXlfbWFwKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jLTEwMzMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYzoxMDM0OlxcdG1hcF9mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtXFx1MDAzZW1hcHMuYXJyYXltYXAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jOjEwMzU6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJwZl9tYXBfX21heF9lbnRyaWVzKHNrZWwtXFx1MDAzZW1hcHMuYXJyYXltYXAxKTsgaSsrKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYy0xMDM2LVxcdFxcdHZhbCA9IGkgKyA0O1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYy0xMDc5LVxcdGhhc2hfZmQgPSBicGZfbWFwX19mZChza2VsLVxcdTAwM2VtYXBzLmhhc2htYXAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jOjEwODA6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJwZl9tYXBfX21heF9lbnRyaWVzKHNrZWwtXFx1MDAzZW1hcHMuYXJyYXltYXAxKTsgaSsrKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYy0xMDgxLVxcdFxcdGVyciA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2ZkLCBcXHUwMDI2aSwgXFx1MDAyNnZhbCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYzoxMDgyOlxcdFxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcIm1hcF9sb29rdXAgYXJyYXltYXAxXFxcIikpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYy0xMDgzLVxcdFxcdFxcdGdvdG8gY2xvc2VfaXRlcjtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jOjEwODQ6XFx0XFx0aWYgKCFBU1NFUlRfRVEoaSwgdmFsLCBcXFwiaW52YWxpZF92YWwgYXJyYXltYXAxXFxcIikpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYy0xMDg1LVxcdFxcdFxcdGdvdG8gY2xvc2VfaXRlcjtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmM9MTEwMz1zdGF0aWMgdm9pZCB0ZXN0X2JwZl9hcnJheV9tYXBfaXRlcl9mZCh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYy0xMTExLVxcdGRvX3JlYWRfbWFwX2l0ZXJfZmQoXFx1MDAyNnNrZWwtXFx1MDAzZXNrZWxldG9uLCBza2VsLVxcdTAwM2Vwcm9ncy5kdW1wX2JwZl9hcnJheV9tYXAsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYzoxMTEyOlxcdFxcdFxcdCAgICBza2VsLVxcdTAwM2VtYXBzLmFycmF5bWFwMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYy0xMTEzLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYz0xMTE3PXN0YXRpYyB2b2lkIHRlc3RfYnBmX3BlcmNwdV9hcnJheV9tYXAodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmMtMTE0Mi1cXHQvKiB1cGRhdGUgbWFwIHZhbHVlcyBoZXJlICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYzoxMTQzOlxcdG1hcF9mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtXFx1MDAzZW1hcHMuYXJyYXltYXAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jOjExNDQ6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJwZl9tYXBfX21heF9lbnRyaWVzKHNrZWwtXFx1MDAzZW1hcHMuYXJyYXltYXAxKTsgaSsrKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYy0xMTQ1LVxcdFxcdGV4cGVjdGVkX2tleSArPSBpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmM9ODg9c3RhdGljIHN0cnVjdCBidGZfcmF3X3Rlc3QgcmF3X3Rlc3RzW10gPSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuYy0yMzMwLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuYzoyMzMxOlxcdC5kZXNjciA9IFxcXCJhcnJheW1hcCBpbnZhbGlkIGJ0ZiBrZXkgKGEgYml0IGZpZWxkKVxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmMtMjMzMi1cXHQucmF3X3R5cGVzID0ge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmMtMjM1MS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmM6MjM1MjpcXHQuZGVzY3IgPSBcXFwiYXJyYXltYXAgaW52YWxpZCBidGYga2V5ICghPSAzMiBiaXRzKVxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmMtMjM1My1cXHQucmF3X3R5cGVzID0ge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmMtMjM3Mi17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmM6MjM3MzpcXHQuZGVzY3IgPSBcXFwiYXJyYXltYXAgaW52YWxpZCBidGYgdmFsdWUgKHRvbyBzbWFsbClcXFwiLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jLTIzNzQtXFx0LnJhd190eXBlcyA9IHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jLTIzOTIte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jOjIzOTM6XFx0LmRlc2NyID0gXFxcImFycmF5bWFwIGludmFsaWQgYnRmIHZhbHVlICh0b28gYmlnKVxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmMtMjM5NC1cXHQucmF3X3R5cGVzID0ge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYz03OT1zdGF0aWMgdm9pZCB0ZXN0X2FycmF5X21hcCh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYy05Ny1cXHRleHBlY3RlZF90b3RhbCA9IDA7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYzo5ODpcXHRtYXhfZW50cmllcyA9IGJwZl9tYXBfX21heF9lbnRyaWVzKHNrZWwtXFx1MDAzZW1hcHMuYXJyYXltYXApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Zvcl9lYWNoLmMtOTktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1heF9lbnRyaWVzOyBpKyspIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Zvcl9lYWNoLmMtMTA0LVxcdFxcdFxcdGV4cGVjdGVkX3RvdGFsICs9IHZhbDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jOjEwNTpcXHRcXHRlcnIgPSBicGZfbWFwX191cGRhdGVfZWxlbShza2VsLVxcdTAwM2VtYXBzLmFycmF5bWFwLCBcXHUwMDI2a2V5LCBzaXplb2Yoa2V5KSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jLTEwNi1cXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2dmFsLCBzaXplb2YodmFsKSwgQlBGX0FOWSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jLTEzMC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jOjEzMTpcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VhcnJheW1hcF9vdXRwdXQsIGV4cGVjdGVkX3RvdGFsLCBcXFwiYXJyYXlfb3V0cHV0XFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYy0xMzItXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlY3B1ICsgMSwgc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VwZXJjcHVfdmFsLCBcXFwicGVyY3B1X3ZhbFxcXCIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYz0xNDg9c3RhdGljIHZvaWQgdGVzdF9tdWx0aV9tYXBzKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jLTE2NS1cXHRhcnJheV90b3RhbCA9IDA7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYzoxNjY6XFx0bWF4X2VudHJpZXMgPSBicGZfbWFwX19tYXhfZW50cmllcyhza2VsLVxcdTAwM2VtYXBzLmFycmF5bWFwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jLTE2Ny1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbWF4X2VudHJpZXM7IGkrKykge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYy0xNzAtXFx0XFx0YXJyYXlfdG90YWwgKz0gdmFsO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Zvcl9lYWNoLmM6MTcxOlxcdFxcdGVyciA9IGJwZl9tYXBfX3VwZGF0ZV9lbGVtKHNrZWwtXFx1MDAzZW1hcHMuYXJyYXltYXAsIFxcdTAwMjZrZXksIHNpemVvZihrZXkpLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Zvcl9lYWNoLmMtMTcyLVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZ2YWwsIHNpemVvZih2YWwpLCBCUEZfQU5ZKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfYXJyYXlfbWFwLmM9OT1zdHJ1Y3Qge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9hcnJheV9tYXAuYy0xMy1cXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX2FycmF5X21hcC5jOjE0On0gYXJyYXltYXAxIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX2FycmF5X21hcC5jLTE1LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9wZXJjcHVfYXJyYXlfbWFwLmM9OT1zdHJ1Y3Qge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9wZXJjcHVfYXJyYXlfbWFwLmMtMTMtXFx0X190eXBlKHZhbHVlLCBfX3UzMik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9wZXJjcHVfYXJyYXlfbWFwLmM6MTQ6fSBhcnJheW1hcDEgU0VDKFxcXCIubWFwc1xcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfcGVyY3B1X2FycmF5X21hcC5jLTE1LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmM9OD1zdHJ1Y3Qge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmMtMTItXFx0X190eXBlKHZhbHVlLCBfX3U2NCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmM6MTM6fSBhcnJheW1hcCBTRUMoXFxcIi5tYXBzXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmMtMTQtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYz01MD1jaGVja19wZXJjcHVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBfX3UzMiAqa2V5LCBfX3U2NCAqdmFsLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmMtNTctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmM6NTg6dTMyIGFycmF5bWFwX291dHB1dCA9IDA7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmMtNTktXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYz02MT1pbnQgdGVzdF9wa3RfYWNjZXNzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jLTY1LVxcdGRhdGEub3V0cHV0ID0gMDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYzo2NjpcXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXFx1MDAyNmFycmF5bWFwLCBjaGVja19hcnJheV9lbGVtLCBcXHUwMDI2ZGF0YSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmMtNjctXFx0aWYgKCFieXBhc3NfdW51c2VkKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jOjY4OlxcdFxcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcXHUwMDI2YXJyYXltYXAsIHVudXNlZF9zdWJwcm9nLCBcXHUwMDI2ZGF0YSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmM6Njk6XFx0YXJyYXltYXBfb3V0cHV0ID0gZGF0YS5vdXRwdXQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmMtNzAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfbXVsdGlfbWFwcy5jPTc9c3RydWN0IHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9tdWx0aV9tYXBzLmMtMTEtXFx0X190eXBlKHZhbHVlLCBfX3U2NCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX211bHRpX21hcHMuYzoxMjp9IGFycmF5bWFwIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfbXVsdGlfbWFwcy5jLTEzLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX211bHRpX21hcHMuYz0zNz1pbnQgdGVzdF9wa3RfYWNjZXNzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9tdWx0aV9tYXBzLmMtNDItXFx0aWYgKHVzZV9hcnJheSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfbXVsdGlfbWFwcy5jOjQzOlxcdFxcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcXHUwMDI2YXJyYXltYXAsIGNoZWNrX21hcF9lbGVtLCBcXHUwMDI2ZGF0YSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX211bHRpX21hcHMuYy00NC1cXHRlbHNlXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM9MzM1PXN0YXRpYyB2b2lkIHRlc3RfaGFzaG1hcF96ZXJvX3NlZWQodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy0zNjctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjM2ODpzdGF0aWMgdm9pZCB0ZXN0X2FycmF5bWFwKHVuc2lnbmVkIGludCB0YXNrLCB2b2lkICpkYXRhKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy0zNjkte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTM3NC1cXHRpZiAoZmQgXFx1MDAzYyAwKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjM3NTpcXHRcXHRwcmludGYoXFxcIkZhaWxlZCB0byBjcmVhdGUgYXJyYXltYXAgJyVzJyFcXFxcblxcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTM3Ni1cXHRcXHRleGl0KDEpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTQyMS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM6NDIyOnN0YXRpYyB2b2lkIHRlc3RfYXJyYXltYXBfcGVyY3B1KHVuc2lnbmVkIGludCB0YXNrLCB2b2lkICpkYXRhKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy00MjMte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTQzMC1cXHRpZiAoZmQgXFx1MDAzYyAwKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjQzMTpcXHRcXHRwcmludGYoXFxcIkZhaWxlZCB0byBjcmVhdGUgYXJyYXltYXAgJyVzJyFcXFxcblxcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTQzMi1cXHRcXHRleGl0KDEpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTQ4MC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM6NDgxOnN0YXRpYyB2b2lkIHRlc3RfYXJyYXltYXBfcGVyY3B1X21hbnlfa2V5cyh2b2lkKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy00ODIte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTQ5My1cXHRpZiAoZmQgXFx1MDAzYyAwKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjQ5NDpcXHRcXHRwcmludGYoXFxcIkZhaWxlZCB0byBjcmVhdGUgcGVyLWNwdSBhcnJheW1hcCAnJXMnIVxcXFxuXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtNDk1LVxcdFxcdCAgICAgICBzdHJlcnJvcihlcnJubykpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jPTEzODk9c3RhdGljIHZvaWQgdGVzdF9tYXBfc3RyZXNzKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtMTM5NS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM6MTM5NjpcXHRydW5fcGFyYWxsZWwoMTAwLCB0ZXN0X2FycmF5bWFwLCBOVUxMKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM6MTM5NzpcXHRydW5fcGFyYWxsZWwoMTAwLCB0ZXN0X2FycmF5bWFwX3BlcmNwdSwgTlVMTCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTEzOTgtfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jPTE4ODY9c3RhdGljIHZvaWQgcnVuX2FsbF90ZXN0cyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTE4OTItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjE4OTM6XFx0dGVzdF9hcnJheW1hcCgwLCBOVUxMKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM6MTg5NDpcXHR0ZXN0X2FycmF5bWFwX3BlcmNwdSgwLCBOVUxMKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtMTg5NS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM6MTg5NjpcXHR0ZXN0X2FycmF5bWFwX3BlcmNwdV9tYW55X2tleXMoKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtMTg5Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDM6NTU6MDEuOTAwMTkyODk0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNzYwNDU3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIFN1YnN5c3RlbSBQYXRjaCAtIEluaXRpYWwgQXNzZXNzbWVudCBcdTAwMjYgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBkaWdnaW5nIGludG8gZnVuY3Rpb25hbCBjb2RlIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gSSBzZWUgaXQncyB0b3VjaGluZyB0aGVzZSBrZXkgZnVuY3Rpb25zOiBgYXJyYXlfbWFwX21tYXBfZmF1bHRgLCBgYXJyYXlfbWFwX21tYXBfcGFnZXNgLCBgYnBmX21hcF9tbWFwX2ZhdWx0YCwgYW5kIGBicGZfbWFwX21tYXBfcGFnZXNgLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aG9zZSBhcmUgKnNjcmVhbWluZyogZm9yIGZ1enppbmcuIFRoZXkncmUgaGFuZGxpbmcgbWVtb3J5IG1hcHBpbmcsIGFuZCB0aGF0IGFsd2F5cyBwcmVzZW50cyBpbnRlcmVzdGluZyBhdHRhY2sgc3VyZmFjZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBmb2N1cyBteSBlZmZvcnRzIHRoZXJlLlxuXG5CZWZvcmUgSSBnZXQgdG9vIGZhciBkb3duIHRoZSBmdXp6aW5nIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIHN0ZXAgYmFjayBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gTGV0IG1lIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNoYW5nZS4gTG9va3MgbGlrZSBgQlBGX1NZU0NBTExgIGlzIHRoZSBwcmltYXJ5IG9uZSwgc28gSSdsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gY29uZmlndXJpbmcgbXkgZnV6emluZyBlbnZpcm9ubWVudC5cblxuQWxyaWdodCwgd2l0aCB0aGF0IGZvdW5kYXRpb24sIGl0J3MgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRoaW5raW5nIEkgc2hvdWxkIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHRvIG1hbmFnZSBhbmQgdHJhY2sgbXkgZmluZGluZ3MuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgd2F5IHRvIGFwcHJvYWNoIHRoZSBmdXp6aW5nIGdpdmVuIHRoZSBwYXRjaCdzIHNjb3BlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYzOSwiT3V0cHV0VG9rZW5zIjoxNjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDM6NTU6MDcuMDc2MjQxNTE3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3NDE2NzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFycmF5X21hcF9tbWFwX2ZhdWx0XCIsXG4gICAgXCJhcnJheV9tYXBfbW1hcF9wYWdlc1wiLFxuICAgIFwiYnBmX21hcF9tbWFwX2ZhdWx0XCIsXG4gICAgXCJicGZfbWFwX21tYXBfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGFycmF5IG1hcCBtZW1vcnkgbWFwcGluZyBsb2dpYyB0byB1c2UgbGF6eSBmYXVsdGluZyBpbnN0ZWFkIG9mIGVhZ2VyIG1hcHBpbmcuIEl0IGludHJvZHVjZXMgbmV3IGZhdWx0IGhhbmRsZXJzIGBhcnJheV9tYXBfbW1hcF9mYXVsdGAgYW5kIGBhcnJheV9tYXBfbW1hcF9wYWdlc2AgaW4gYGFycmF5bWFwLmNgLCBhbmQgY29ycmVzcG9uZGluZyBzeXNjYWxsIGhhbmRsZXJzIGluIGBzeXNjYWxsLmNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcnJheV9tYXBfbW1hcF9mYXVsdFwiLFxuICAgIFwiYXJyYXlfbWFwX21tYXBfcGFnZXNcIixcbiAgICBcImJwZl9tYXBfbW1hcF9mYXVsdFwiLFxuICAgIFwiYnBmX21hcF9tbWFwX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBhcnJheSBtYXAgbWVtb3J5IG1hcHBpbmcgbG9naWMgdG8gdXNlIGxhenkgZmF1bHRpbmcgaW5zdGVhZCBvZiBlYWdlciBtYXBwaW5nLiBJdCBpbnRyb2R1Y2VzIG5ldyBmYXVsdCBoYW5kbGVycyBgYXJyYXlfbWFwX21tYXBfZmF1bHRgIGFuZCBgYXJyYXlfbWFwX21tYXBfcGFnZXNgIGluIGBhcnJheW1hcC5jYCwgYW5kIGNvcnJlc3BvbmRpbmcgc3lzY2FsbCBoYW5kbGVycyBpbiBgc3lzY2FsbC5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4cpjl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 03:44:21 +0000 UTC FinishedAt: 2026-07-30 03:55:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "fdec474c65fd35d5a6e1497ed50a9f98c07192f0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "fdec474c65fd35d5a6e1497ed50a9f98c07192f0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "2446c254-c727-4596-9016-0db36df2ac73" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "array_map_mmap_fault", "array_map_mmap_pages", "bpf_map_mmap_fault", "bpf_map_mmap_pages" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAzOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXJyYXlfbWFwX21tYXBfZmF1bHQmIzM0OywKICAgICYjMzQ7YXJyYXlfbWFwX21tYXBfcGFnZXMmIzM0OywKICAgICYjMzQ7YnBmX21hcF9tbWFwX2ZhdWx0JiMzNDssCiAgICAmIzM0O2JwZl9tYXBfbW1hcF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGFycmF5IG1hcCBtZW1vcnkgbWFwcGluZyBsb2dpYyB0byB1c2UgbGF6eSBmYXVsdGluZyBpbnN0ZWFkIG9mIGVhZ2VyIG1hcHBpbmcuIEl0IGludHJvZHVjZXMgbmV3IGZhdWx0IGhhbmRsZXJzIGBhcnJheV9tYXBfbW1hcF9mYXVsdGAgYW5kIGBhcnJheV9tYXBfbW1hcF9wYWdlc2AgaW4gYGFycmF5bWFwLmNgLCBhbmQgY29ycmVzcG9uZGluZyBzeXNjYWxsIGhhbmRsZXJzIGluIGBzeXNjYWxsLmNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDM6NTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjY2NhMTljODM3NDE4OTJhN2FkOTNhMmJhOGY2MjhkN2Q1ZjcwYzgwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMDM6NTQ6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcbmluZGV4IDdiZmMyODY3MzEyNDQuLmViNTc4Y2UwODdiNzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5AQCAtMTQ1LDYgJiM0MzsxNDUsOSBAQCBzdHJ1Y3QgYnBmX21hcF9vcHMge1xuIFx0aW50ICgqbWFwX2RpcmVjdF92YWx1ZV9tZXRhKShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHRcdFx0ICAgICB1NjQgaW1tLCB1MzIgKm9mZik7XG4gXHRpbnQgKCptYXBfbW1hcCkoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuJiM0MztcdHZtX2ZhdWx0X3QgKCptYXBfbW1hcF9mYXVsdCkoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpO1xuJiM0MztcdHZtX2ZhdWx0X3QgKCptYXBfbW1hcF9wYWdlcykoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4mIzQzO1x0XHRcdFx0ICAgICBwZ29mZl90IHN0YXJ0X3Bnb2ZmLCBwZ29mZl90IGVuZF9wZ29mZik7XG4gXHRfX3BvbGxfdCAoKm1hcF9wb2xsKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0XHQgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqcHRzKTtcbiBcdHVuc2lnbmVkIGxvbmcgKCptYXBfZ2V0X3VubWFwcGVkX2FyZWEpKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJyYXltYXAuYyBiL2tlcm5lbC9icGYvYXJyYXltYXAuY1xuaW5kZXggMjQ4YjQ4MTgxNzhjZC4uMzU5NGUyNmI5ZmI4OCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYXJyYXltYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcnJheW1hcC5jXG5AQCAtNyw2ICYjNDM7Nyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L292ZXJmbG93LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWx0ZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvYnRmLmhcdTAwM2VcbkBAIC01NzYsMTcgJiM0Mzs1NzcsMTE4IEBAIHN0YXRpYyBpbnQgYXJyYXlfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIHN0YXRpYyBpbnQgYXJyYXlfbWFwX21tYXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0c3RydWN0IGJwZl9hcnJheSAqYXJyYXkgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FycmF5LCBtYXApO1xuLVx0cGdvZmZfdCBwZ29mZiA9IFBBR0VfQUxJR04oc2l6ZW9mKCphcnJheSkpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFxuIFx0aWYgKCEobWFwLVx1MDAzZW1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfTU1BUEFCTEUpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmICh2bWEtXHUwMDNldm1fcGdvZmYgKiBQQUdFX1NJWkUgJiM0MzsgKHZtYS1cdTAwM2V2bV9lbmQgLSB2bWEtXHUwMDNldm1fc3RhcnQpIFx1MDAzZVxuJiM0MztcdC8qIHVzZSB1NjQgbWF0aCBzbyB0aGUgb2Zmc2V0IGNhbm5vdCBvdmVyZmxvdyBvbiAzMi1iaXQgYXJjaHMgKi9cbiYjNDM7XHRpZiAoKHU2NCl2bWEtXHUwMDNldm1fcGdvZmYgKiBQQUdFX1NJWkUgJiM0MzsgKHZtYS1cdTAwM2V2bV9lbmQgLSB2bWEtXHUwMDNldm1fc3RhcnQpIFx1MDAzZVxuIFx0ICAgIFBBR0VfQUxJR04oKHU2NClhcnJheS1cdTAwM2VtYXAubWF4X2VudHJpZXMgKiBhcnJheS1cdTAwM2VlbGVtX3NpemUpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHJldHVybiByZW1hcF92bWFsbG9jX3JhbmdlKHZtYSwgYXJyYXlfbWFwX3ZtYWxsb2NfYWRkcihhcnJheSksXG4tXHRcdFx0XHQgICB2bWEtXHUwMDNldm1fcGdvZmYgJiM0MzsgcGdvZmYpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIGJhY2tpbmcgbWVtb3J5IGlzIHZtYWxsb2MmIzM5O2VkIHVwIGZyb250LCBzbyBpbnN0ZWFkIG9mIHdpcmluZyB1cFxuJiM0MztcdCAqIGV2ZXJ5IFBURSBoZXJlIHdlIGxldCB0aGUgZmF1bHQgaGFuZGxlcnMgaW5zZXJ0IHBhZ2VzIG9uIGRlbWFuZC5cbiYjNDM7XHQgKiByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWwoKSB1c2VkIHRvIHNldCB0aGVzZSBmbGFncyBmb3IgdXM7IGtlZXBcbiYjNDM7XHQgKiB0aGVtIHRvIHByZXNlcnZlIGJlaGF2aW9yIChubyBWTUEgZXhwYW5zaW9uLCBleGNsdWRlZCBmcm9tIGNvcmVkdW1wKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmVzb2x2ZSB0aGUgdm1hbGxvYyBwYWdlIGJhY2tpbmcgdGhlIHZhbHVlLWFyZWEgb2Zmc2V0IG9mIGEgZmF1bHQuICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGFnZSAqYXJyYXlfbWFwX2ZhdWx0X3BhZ2Uoc3RydWN0IGJwZl9hcnJheSAqYXJyYXksIHBnb2ZmX3QgcGdvZmYpXG4mIzQzO3tcbiYjNDM7XHR1NjQgYXJyYXlfc2l6ZSwgb2ZmO1xuJiM0MztcbiYjNDM7XHRhcnJheV9zaXplID0gUEFHRV9BTElHTigodTY0KWFycmF5LVx1MDAzZW1hcC5tYXhfZW50cmllcyAqIGFycmF5LVx1MDAzZWVsZW1fc2l6ZSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogcGdvZmYgaXMgdGhlIGZhdWx0aW5nIHBhZ2UmIzM5O3Mgb2Zmc2V0IGludG8gdGhlIG1hcHBlZCB2YWx1ZSBhcmVhICh0aGVcbiYjNDM7XHQgKiBicGZfYXJyYXkgaGVhZGVyIHByZWNlZGVzIGFycmF5LVx1MDAzZXZhbHVlIGFuZCBpcyBub3QgbWFwcGVkKS4gR3VhcmQgdGhlXG4mIzQzO1x0ICogc2hpZnQgYW5kIHRoZSBib3VuZHMgZXhwbGljaXRseSwgdGhlIHNhbWUgd2F5IHRoYXRcbiYjNDM7XHQgKiByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWwoKSBkb2VzIGZvciB0aGUgZWFnZXIgcGF0aCwgaW5zdGVhZCBvZlxuJiM0MztcdCAqIHJlbHlpbmcgb24gdGhlIG1tYXAoKS10aW1lIGJvdW5kcyBjaGVjayBhbG9uZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY2hlY2tfc2hsX292ZXJmbG93KHBnb2ZmLCBQQUdFX1NISUZULCBcdTAwMjZvZmYpKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0aWYgKG9mZiBcdTAwM2U9IGFycmF5X3NpemUpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZtYWxsb2NfdG9fcGFnZShhcnJheS1cdTAwM2V2YWx1ZSAmIzQzOyBvZmYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm1fZmF1bHRfdCBhcnJheV9tYXBfbW1hcF9mYXVsdChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfYXJyYXkgKmFycmF5ID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcnJheSwgbWFwKTtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiYjNDM7XG4mIzQzO1x0cGFnZSA9IGFycmF5X21hcF9mYXVsdF9wYWdlKGFycmF5LCB2bWYtXHUwMDNlcGdvZmYpO1xuJiM0MztcdGlmICghcGFnZSlcbiYjNDM7XHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4mIzQzO1xuJiM0MztcdGdldF9wYWdlKHBhZ2UpO1xuJiM0MztcdHZtZi1cdTAwM2VwYWdlID0gcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEZhdWx0LWFyb3VuZCBoYW5kbGVyOiBpbnN0YWxsIFBURXMgZm9yIHRoZSB3aG9sZSBbc3RhcnRfcGdvZmYsIGVuZF9wZ29mZl1cbiYjNDM7ICogd2luZG93IHVuZGVyIGEgc2luZ2xlIHBhZ2UtdGFibGUgbG9jaywgc28gdGhhdCBwb3B1bGF0aW5nIGEgbGFyZ2UgbWFwcGluZ1xuJiM0MzsgKiAoZS5nLiBtbWFwKE1BUF9QT1BVTEFURSkgb3IgYSBsaW5lYXIgYWNjZXNzIHBhdHRlcm4pIGRvZXMgbm90IHRha2Ugb25lIGZ1bGxcbiYjNDM7ICogZmF1bHQgcGVyIHBhZ2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm1fZmF1bHRfdCBhcnJheV9tYXBfbW1hcF9wYWdlcyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbiYjNDM7XHRcdFx0XHQgICAgICAgcGdvZmZfdCBzdGFydF9wZ29mZiwgcGdvZmZfdCBlbmRfcGdvZmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7XG4mIzQzO1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXHUwMDNldm1hO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYWRkciwgcnNzID0gMDtcbiYjNDM7XHR2bV9mYXVsdF90IHJldCA9IDA7XG4mIzQzO1x0cHRlX3QgKnN0YXJ0X3B0ZTtcbiYjNDM7XHRwZ29mZl90IHBnb2ZmO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBQVEUgdGFibGUgZm9yIHRoaXMgUE1EIG11c3QgYWxyZWFkeSBleGlzdDsgaW5zdGFsbGluZyBpdCBuZWVkc1xuJiM0MztcdCAqIG1tLWludGVybmFsIGhlbHBlcnMuIElmIGl0IGlzIG1pc3NpbmcsIGxldCB0aGUgcmVndWxhciAtXHUwMDNlZmF1bHQgcGF0aFxuJiM0MztcdCAqIGluc3RhbGwgaXQgYW5kIHJlbHkgb24gdGhlIG5leHQgZmF1bHQtYXJvdW5kIHRvIGJhdGNoIHRoZSByZXN0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwbWRfbm9uZSgqdm1mLVx1MDAzZXBtZCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0YWRkciA9IHZtYS1cdTAwM2V2bV9zdGFydCAmIzQzOyAoKHN0YXJ0X3Bnb2ZmIC0gdm1hLVx1MDAzZXZtX3Bnb2ZmKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4mIzQzO1x0c3RhcnRfcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh2bWEtXHUwMDNldm1fbW0sIHZtZi1cdTAwM2VwbWQsIGFkZHIsIFx1MDAyNnZtZi1cdTAwM2VwdGwpO1xuJiM0MztcdGlmICghc3RhcnRfcHRlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0dm1mLVx1MDAzZXB0ZSA9IHN0YXJ0X3B0ZTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChwZ29mZiA9IHN0YXJ0X3Bnb2ZmOyBwZ29mZiBcdTAwM2M9IGVuZF9wZ29mZjtcbiYjNDM7XHQgICAgIHBnb2ZmJiM0MzsmIzQzOywgdm1mLVx1MDAzZXB0ZSYjNDM7JiM0MzssIGFkZHIgJiM0Mzs9IFBBR0VfU0laRSkge1xuJiM0MztcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcbiYjNDM7XHRcdGlmICghcHRlX25vbmUocHRlcF9nZXQodm1mLVx1MDAzZXB0ZSkpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRwYWdlID0gYXJyYXlfbWFwX2ZhdWx0X3BhZ2UoYXJyYXksIHBnb2ZmKTtcbiYjNDM7XHRcdGlmICghcGFnZSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuJiM0MztcdFx0Zm9saW9fZ2V0KGZvbGlvKTtcbiYjNDM7XHRcdHNldF9wdGVfcmFuZ2Uodm1mLCBmb2xpbywgcGFnZSwgMSwgYWRkcik7XG4mIzQzO1x0XHRyc3MmIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKGFkZHIgPT0gdm1mLVx1MDAzZWFkZHJlc3MpXG4mIzQzO1x0XHRcdHJldCA9IFZNX0ZBVUxUX05PUEFHRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGFkZF9tbV9jb3VudGVyKHZtYS1cdTAwM2V2bV9tbSwgTU1fRklMRVBBR0VTLCByc3MpO1xuJiM0MztcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCB2bWYtXHUwMDNlcHRsKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGJvb2wgYXJyYXlfbWFwX21ldGFfZXF1YWwoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1ldGEwLFxuQEAgLTgxMiw2ICYjNDM7OTE0LDggQEAgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XG4gXHQubWFwX2RpcmVjdF92YWx1ZV9hZGRyID0gYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9hZGRyLFxuIFx0Lm1hcF9kaXJlY3RfdmFsdWVfbWV0YSA9IGFycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YSxcbiBcdC5tYXBfbW1hcCA9IGFycmF5X21hcF9tbWFwLFxuJiM0MztcdC5tYXBfbW1hcF9mYXVsdCA9IGFycmF5X21hcF9tbWFwX2ZhdWx0LFxuJiM0MztcdC5tYXBfbW1hcF9wYWdlcyA9IGFycmF5X21hcF9tbWFwX3BhZ2VzLFxuIFx0Lm1hcF9zZXFfc2hvd19lbGVtID0gYXJyYXlfbWFwX3NlcV9zaG93X2VsZW0sXG4gXHQubWFwX2NoZWNrX2J0ZiA9IGFycmF5X21hcF9jaGVja19idGYsXG4gXHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCAwZmY5ZTNhYTI5M2Q1Li45OTBjMmY1YmU0MGFmIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtMTA3Nyw5ICYjNDM7MTA3NywzOSBAQCBzdGF0aWMgdm9pZCBicGZfbWFwX21tYXBfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHRcdGJwZl9tYXBfd3JpdGVfYWN0aXZlX2RlYyhtYXApO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogQ2FsbGVkIGZvciBtYXBzIHRoYXQgcG9wdWxhdGUgdGhlaXIgbWVtb3J5LW1hcHBlZCByZWdpb24gbGF6aWx5LCBpLmUuIHRoYXRcbiYjNDM7ICogcmV0dXJuIHdpdGhvdXQgd2lyaW5nIHVwIGFueSBQVEVzIGZyb20gdGhlaXIgLVx1MDAzZW1hcF9tbWFwIGNhbGxiYWNrLiBNYXBzIHRoYXRcbiYjNDM7ICogcG9wdWxhdGUgdGhlIHdob2xlIFZNQSBlYWdlcmx5IChlLmcuIHZpYSByZW1hcF92bWFsbG9jX3JhbmdlKCkpIG5ldmVyIHJlYWNoXG4mIzQzOyAqIGhlcmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm1fZmF1bHRfdCBicGZfbWFwX21tYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gdm1mLVx1MDAzZXZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4mIzQzO1xuJiM0MztcdGlmICghbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfbW1hcF9mYXVsdClcbiYjNDM7XHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9tbWFwX2ZhdWx0KG1hcCwgdm1mKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogRmF1bHQtYXJvdW5kOiBiYXRjaC1wb3B1bGF0ZSBQVEVzIGFyb3VuZCB0aGUgZmF1bHRpbmcgYWRkcmVzcy4gKi9cbiYjNDM7c3RhdGljIHZtX2ZhdWx0X3QgYnBmX21hcF9tbWFwX3BhZ2VzKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuJiM0MztcdFx0XHRcdCAgICAgcGdvZmZfdCBzdGFydF9wZ29mZiwgcGdvZmZfdCBlbmRfcGdvZmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gdm1mLVx1MDAzZXZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4mIzQzO1xuJiM0MztcdGlmICghbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfbW1hcF9wYWdlcylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfbW1hcF9wYWdlcyhtYXAsIHZtZiwgc3RhcnRfcGdvZmYsIGVuZF9wZ29mZik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBicGZfbWFwX2RlZmF1bHRfdm1vcHMgPSB7XG4gXHQub3Blblx0XHQ9IGJwZl9tYXBfbW1hcF9vcGVuLFxuIFx0LmNsb3NlXHRcdD0gYnBmX21hcF9tbWFwX2Nsb3NlLFxuJiM0MztcdC5mYXVsdFx0XHQ9IGJwZl9tYXBfbW1hcF9mYXVsdCxcbiYjNDM7XHQubWFwX3BhZ2VzXHQ9IGJwZl9tYXBfbW1hcF9wYWdlcyxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgYnBmX21hcF9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMzo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcnJheV9tYXBfbW1hcF9mYXVsdCYjMzQ7LAogICAgJiMzNDthcnJheV9tYXBfbW1hcF9wYWdlcyYjMzQ7LAogICAgJiMzNDticGZfbWFwX21tYXBfZmF1bHQmIzM0OywKICAgICYjMzQ7YnBmX21hcF9tbWFwX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgYXJyYXkgbWFwIG1lbW9yeSBtYXBwaW5nIGxvZ2ljIHRvIHVzZSBsYXp5IGZhdWx0aW5nIGluc3RlYWQgb2YgZWFnZXIgbWFwcGluZy4gSXQgaW50cm9kdWNlcyBuZXcgZmF1bHQgaGFuZGxlcnMgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBhbmQgYGFycmF5X21hcF9tbWFwX3BhZ2VzYCBpbiBgYXJyYXltYXAuY2AsIGFuZCBjb3JyZXNwb25kaW5nIHN5c2NhbGwgaGFuZGxlcnMgaW4gYHN5c2NhbGwuY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNjY2ExOWM4Mzc0MTg5MmE3YWQ5M2EyYmE4ZjYyOGQ3ZDVmNzBjODAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAwMzo1NDoyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oCmluZGV4IDdiZmMyODY3MzEyNDQuLmViNTc4Y2UwODdiNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGYuaApAQCAtMTQ1LDYgJiM0MzsxNDUsOSBAQCBzdHJ1Y3QgYnBmX21hcF9vcHMgewogCWludCAoKm1hcF9kaXJlY3RfdmFsdWVfbWV0YSkoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwKIAkJCQkgICAgIHU2NCBpbW0sIHUzMiAqb2ZmKTsKIAlpbnQgKCptYXBfbW1hcCkoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwomIzQzOwl2bV9mYXVsdF90ICgqbWFwX21tYXBfZmF1bHQpKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKTsKJiM0MzsJdm1fZmF1bHRfdCAoKm1hcF9tbWFwX3BhZ2VzKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKJiM0MzsJCQkJICAgICBwZ29mZl90IHN0YXJ0X3Bnb2ZmLCBwZ29mZl90IGVuZF9wZ29mZik7CiAJX19wb2xsX3QgKCptYXBfcG9sbCkoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqcHRzKTsKIAl1bnNpZ25lZCBsb25nICgqbWFwX2dldF91bm1hcHBlZF9hcmVhKShzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJyYXltYXAuYyBiL2tlcm5lbC9icGYvYXJyYXltYXAuYwppbmRleCAyNDhiNDgxODE3OGNkLi4zNTk0ZTI2YjlmYjg4IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2FycmF5bWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcnJheW1hcC5jCkBAIC03LDYgJiM0Mzs3LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9lcnIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb3ZlcmZsb3cuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maWx0ZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wZXJmX2V2ZW50LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9idGYuaCZndDsKQEAgLTU3NiwxNyAmIzQzOzU3NywxMTggQEAgc3RhdGljIGludCBhcnJheV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsCiBzdGF0aWMgaW50IGFycmF5X21hcF9tbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBicGZfYXJyYXkgKmFycmF5ID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcnJheSwgbWFwKTsKLQlwZ29mZl90IHBnb2ZmID0gUEFHRV9BTElHTihzaXplb2YoKmFycmF5KSkgJmd0OyZndDsgUEFHRV9TSElGVDsKIAogCWlmICghKG1hcC0mZ3Q7bWFwX2ZsYWdzICZhbXA7IEJQRl9GX01NQVBBQkxFKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAodm1hLSZndDt2bV9wZ29mZiAqIFBBR0VfU0laRSAmIzQzOyAodm1hLSZndDt2bV9lbmQgLSB2bWEtJmd0O3ZtX3N0YXJ0KSAmZ3Q7CiYjNDM7CS8qIHVzZSB1NjQgbWF0aCBzbyB0aGUgb2Zmc2V0IGNhbm5vdCBvdmVyZmxvdyBvbiAzMi1iaXQgYXJjaHMgKi8KJiM0MzsJaWYgKCh1NjQpdm1hLSZndDt2bV9wZ29mZiAqIFBBR0VfU0laRSAmIzQzOyAodm1hLSZndDt2bV9lbmQgLSB2bWEtJmd0O3ZtX3N0YXJ0KSAmZ3Q7CiAJICAgIFBBR0VfQUxJR04oKHU2NClhcnJheS0mZ3Q7bWFwLm1heF9lbnRyaWVzICogYXJyYXktJmd0O2VsZW1fc2l6ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHJlbWFwX3ZtYWxsb2NfcmFuZ2Uodm1hLCBhcnJheV9tYXBfdm1hbGxvY19hZGRyKGFycmF5KSwKLQkJCQkgICB2bWEtJmd0O3ZtX3Bnb2ZmICYjNDM7IHBnb2ZmKTsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGJhY2tpbmcgbWVtb3J5IGlzIHZtYWxsb2MmIzM5O2VkIHVwIGZyb250LCBzbyBpbnN0ZWFkIG9mIHdpcmluZyB1cAomIzQzOwkgKiBldmVyeSBQVEUgaGVyZSB3ZSBsZXQgdGhlIGZhdWx0IGhhbmRsZXJzIGluc2VydCBwYWdlcyBvbiBkZW1hbmQuCiYjNDM7CSAqIHJlbWFwX3ZtYWxsb2NfcmFuZ2VfcGFydGlhbCgpIHVzZWQgdG8gc2V0IHRoZXNlIGZsYWdzIGZvciB1czsga2VlcAomIzQzOwkgKiB0aGVtIHRvIHByZXNlcnZlIGJlaGF2aW9yIChubyBWTUEgZXhwYW5zaW9uLCBleGNsdWRlZCBmcm9tIGNvcmVkdW1wKS4KJiM0MzsJICovCiYjNDM7CXZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZXNvbHZlIHRoZSB2bWFsbG9jIHBhZ2UgYmFja2luZyB0aGUgdmFsdWUtYXJlYSBvZmZzZXQgb2YgYSBmYXVsdC4gKi8KJiM0MztzdGF0aWMgc3RydWN0IHBhZ2UgKmFycmF5X21hcF9mYXVsdF9wYWdlKHN0cnVjdCBicGZfYXJyYXkgKmFycmF5LCBwZ29mZl90IHBnb2ZmKQomIzQzO3sKJiM0MzsJdTY0IGFycmF5X3NpemUsIG9mZjsKJiM0MzsKJiM0MzsJYXJyYXlfc2l6ZSA9IFBBR0VfQUxJR04oKHU2NClhcnJheS0mZ3Q7bWFwLm1heF9lbnRyaWVzICogYXJyYXktJmd0O2VsZW1fc2l6ZSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHBnb2ZmIGlzIHRoZSBmYXVsdGluZyBwYWdlJiMzOTtzIG9mZnNldCBpbnRvIHRoZSBtYXBwZWQgdmFsdWUgYXJlYSAodGhlCiYjNDM7CSAqIGJwZl9hcnJheSBoZWFkZXIgcHJlY2VkZXMgYXJyYXktJmd0O3ZhbHVlIGFuZCBpcyBub3QgbWFwcGVkKS4gR3VhcmQgdGhlCiYjNDM7CSAqIHNoaWZ0IGFuZCB0aGUgYm91bmRzIGV4cGxpY2l0bHksIHRoZSBzYW1lIHdheSB0aGF0CiYjNDM7CSAqIHJlbWFwX3ZtYWxsb2NfcmFuZ2VfcGFydGlhbCgpIGRvZXMgZm9yIHRoZSBlYWdlciBwYXRoLCBpbnN0ZWFkIG9mCiYjNDM7CSAqIHJlbHlpbmcgb24gdGhlIG1tYXAoKS10aW1lIGJvdW5kcyBjaGVjayBhbG9uZS4KJiM0MzsJICovCiYjNDM7CWlmIChjaGVja19zaGxfb3ZlcmZsb3cocGdvZmYsIFBBR0VfU0hJRlQsICZhbXA7b2ZmKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwlpZiAob2ZmICZndDs9IGFycmF5X3NpemUpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHZtYWxsb2NfdG9fcGFnZShhcnJheS0mZ3Q7dmFsdWUgJiM0Mzsgb2ZmKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZtX2ZhdWx0X3QgYXJyYXlfbWFwX21tYXBfZmF1bHQoc3RydWN0IGJwZl9tYXAgKm1hcCwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9hcnJheSAqYXJyYXkgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FycmF5LCBtYXApOwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZTsKJiM0MzsKJiM0MzsJcGFnZSA9IGFycmF5X21hcF9mYXVsdF9wYWdlKGFycmF5LCB2bWYtJmd0O3Bnb2ZmKTsKJiM0MzsJaWYgKCFwYWdlKQomIzQzOwkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKJiM0MzsKJiM0MzsJZ2V0X3BhZ2UocGFnZSk7CiYjNDM7CXZtZi0mZ3Q7cGFnZSA9IHBhZ2U7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEZhdWx0LWFyb3VuZCBoYW5kbGVyOiBpbnN0YWxsIFBURXMgZm9yIHRoZSB3aG9sZSBbc3RhcnRfcGdvZmYsIGVuZF9wZ29mZl0KJiM0MzsgKiB3aW5kb3cgdW5kZXIgYSBzaW5nbGUgcGFnZS10YWJsZSBsb2NrLCBzbyB0aGF0IHBvcHVsYXRpbmcgYSBsYXJnZSBtYXBwaW5nCiYjNDM7ICogKGUuZy4gbW1hcChNQVBfUE9QVUxBVEUpIG9yIGEgbGluZWFyIGFjY2VzcyBwYXR0ZXJuKSBkb2VzIG5vdCB0YWtlIG9uZSBmdWxsCiYjNDM7ICogZmF1bHQgcGVyIHBhZ2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZtX2ZhdWx0X3QgYXJyYXlfbWFwX21tYXBfcGFnZXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsCiYjNDM7CQkJCSAgICAgICBwZ29mZl90IHN0YXJ0X3Bnb2ZmLCBwZ29mZl90IGVuZF9wZ29mZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfYXJyYXkgKmFycmF5ID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcnJheSwgbWFwKTsKJiM0MzsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtJmd0O3ZtYTsKJiM0MzsJdW5zaWduZWQgbG9uZyBhZGRyLCByc3MgPSAwOwomIzQzOwl2bV9mYXVsdF90IHJldCA9IDA7CiYjNDM7CXB0ZV90ICpzdGFydF9wdGU7CiYjNDM7CXBnb2ZmX3QgcGdvZmY7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBQVEUgdGFibGUgZm9yIHRoaXMgUE1EIG11c3QgYWxyZWFkeSBleGlzdDsgaW5zdGFsbGluZyBpdCBuZWVkcwomIzQzOwkgKiBtbS1pbnRlcm5hbCBoZWxwZXJzLiBJZiBpdCBpcyBtaXNzaW5nLCBsZXQgdGhlIHJlZ3VsYXIgLSZndDtmYXVsdCBwYXRoCiYjNDM7CSAqIGluc3RhbGwgaXQgYW5kIHJlbHkgb24gdGhlIG5leHQgZmF1bHQtYXJvdW5kIHRvIGJhdGNoIHRoZSByZXN0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHBtZF9ub25lKCp2bWYtJmd0O3BtZCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYWRkciA9IHZtYS0mZ3Q7dm1fc3RhcnQgJiM0MzsgKChzdGFydF9wZ29mZiAtIHZtYS0mZ3Q7dm1fcGdvZmYpICZsdDsmbHQ7IFBBR0VfU0hJRlQpOwomIzQzOwlzdGFydF9wdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHZtYS0mZ3Q7dm1fbW0sIHZtZi0mZ3Q7cG1kLCBhZGRyLCAmYW1wO3ZtZi0mZ3Q7cHRsKTsKJiM0MzsJaWYgKCFzdGFydF9wdGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJdm1mLSZndDtwdGUgPSBzdGFydF9wdGU7CiYjNDM7CiYjNDM7CWZvciAocGdvZmYgPSBzdGFydF9wZ29mZjsgcGdvZmYgJmx0Oz0gZW5kX3Bnb2ZmOwomIzQzOwkgICAgIHBnb2ZmJiM0MzsmIzQzOywgdm1mLSZndDtwdGUmIzQzOyYjNDM7LCBhZGRyICYjNDM7PSBQQUdFX1NJWkUpIHsKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CQlzdHJ1Y3QgcGFnZSAqcGFnZTsKJiM0MzsKJiM0MzsJCWlmICghcHRlX25vbmUocHRlcF9nZXQodm1mLSZndDtwdGUpKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXBhZ2UgPSBhcnJheV9tYXBfZmF1bHRfcGFnZShhcnJheSwgcGdvZmYpOwomIzQzOwkJaWYgKCFwYWdlKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpOwomIzQzOwkJZm9saW9fZ2V0KGZvbGlvKTsKJiM0MzsJCXNldF9wdGVfcmFuZ2Uodm1mLCBmb2xpbywgcGFnZSwgMSwgYWRkcik7CiYjNDM7CQlyc3MmIzQzOyYjNDM7OwomIzQzOwkJaWYgKGFkZHIgPT0gdm1mLSZndDthZGRyZXNzKQomIzQzOwkJCXJldCA9IFZNX0ZBVUxUX05PUEFHRTsKJiM0MzsJfQomIzQzOwomIzQzOwlhZGRfbW1fY291bnRlcih2bWEtJmd0O3ZtX21tLCBNTV9GSUxFUEFHRVMsIHJzcyk7CiYjNDM7CXB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCB2bWYtJmd0O3B0bCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBib29sIGFycmF5X21hcF9tZXRhX2VxdWFsKGNvbnN0IHN0cnVjdCBicGZfbWFwICptZXRhMCwKQEAgLTgxMiw2ICYjNDM7OTE0LDggQEAgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7CiAJLm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IGFycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkciwKIAkubWFwX2RpcmVjdF92YWx1ZV9tZXRhID0gYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhLAogCS5tYXBfbW1hcCA9IGFycmF5X21hcF9tbWFwLAomIzQzOwkubWFwX21tYXBfZmF1bHQgPSBhcnJheV9tYXBfbW1hcF9mYXVsdCwKJiM0MzsJLm1hcF9tbWFwX3BhZ2VzID0gYXJyYXlfbWFwX21tYXBfcGFnZXMsCiAJLm1hcF9zZXFfc2hvd19lbGVtID0gYXJyYXlfbWFwX3NlcV9zaG93X2VsZW0sCiAJLm1hcF9jaGVja19idGYgPSBhcnJheV9tYXBfY2hlY2tfYnRmLAogCS5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwppbmRleCAwZmY5ZTNhYTI5M2Q1Li45OTBjMmY1YmU0MGFmIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwpAQCAtMTA3Nyw5ICYjNDM7MTA3NywzOSBAQCBzdGF0aWMgdm9pZCBicGZfbWFwX21tYXBfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJCWJwZl9tYXBfd3JpdGVfYWN0aXZlX2RlYyhtYXApOwogfQogCiYjNDM7LyoKJiM0MzsgKiBDYWxsZWQgZm9yIG1hcHMgdGhhdCBwb3B1bGF0ZSB0aGVpciBtZW1vcnktbWFwcGVkIHJlZ2lvbiBsYXppbHksIGkuZS4gdGhhdAomIzQzOyAqIHJldHVybiB3aXRob3V0IHdpcmluZyB1cCBhbnkgUFRFcyBmcm9tIHRoZWlyIC0mZ3Q7bWFwX21tYXAgY2FsbGJhY2suIE1hcHMgdGhhdAomIzQzOyAqIHBvcHVsYXRlIHRoZSB3aG9sZSBWTUEgZWFnZXJseSAoZS5nLiB2aWEgcmVtYXBfdm1hbGxvY19yYW5nZSgpKSBuZXZlciByZWFjaAomIzQzOyAqIGhlcmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZtX2ZhdWx0X3QgYnBmX21hcF9tbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9tYXAgKm1hcCA9IHZtZi0mZ3Q7dm1hLSZndDt2bV9wcml2YXRlX2RhdGE7CiYjNDM7CiYjNDM7CWlmICghbWFwLSZndDtvcHMtJmd0O21hcF9tbWFwX2ZhdWx0KQomIzQzOwkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKJiM0MzsKJiM0MzsJcmV0dXJuIG1hcC0mZ3Q7b3BzLSZndDttYXBfbW1hcF9mYXVsdChtYXAsIHZtZik7CiYjNDM7fQomIzQzOwomIzQzOy8qIEZhdWx0LWFyb3VuZDogYmF0Y2gtcG9wdWxhdGUgUFRFcyBhcm91bmQgdGhlIGZhdWx0aW5nIGFkZHJlc3MuICovCiYjNDM7c3RhdGljIHZtX2ZhdWx0X3QgYnBmX21hcF9tbWFwX3BhZ2VzKHN0cnVjdCB2bV9mYXVsdCAqdm1mLAomIzQzOwkJCQkgICAgIHBnb2ZmX3Qgc3RhcnRfcGdvZmYsIHBnb2ZmX3QgZW5kX3Bnb2ZmKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9tYXAgKm1hcCA9IHZtZi0mZ3Q7dm1hLSZndDt2bV9wcml2YXRlX2RhdGE7CiYjNDM7CiYjNDM7CWlmICghbWFwLSZndDtvcHMtJmd0O21hcF9tbWFwX3BhZ2VzKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiBtYXAtJmd0O29wcy0mZ3Q7bWFwX21tYXBfcGFnZXMobWFwLCB2bWYsIHN0YXJ0X3Bnb2ZmLCBlbmRfcGdvZmYpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYnBmX21hcF9kZWZhdWx0X3Ztb3BzID0gewogCS5vcGVuCQk9IGJwZl9tYXBfbW1hcF9vcGVuLAogCS5jbG9zZQkJPSBicGZfbWFwX21tYXBfY2xvc2UsCiYjNDM7CS5mYXVsdAkJPSBicGZfbWFwX21tYXBfZmF1bHQsCiYjNDM7CS5tYXBfcGFnZXMJPSBicGZfbWFwX21tYXBfcGFnZXMsCiB9OwogCiBzdGF0aWMgaW50IGJwZl9tYXBfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MDIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA0MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgQXJyYXkgTWFwIExhenkgRmF1bHRpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1ha2luZyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byBob3cgQlBGIGFycmF5IG1hcHMgYXJlIG1lbW9yeSBtYXBwZWQuIEluc3RlYWQgb2YgdGhlIGVhZ2VyIGByZW1hcF92bWFsbG9jX3JhbmdlYCBhcHByb2FjaCwgd2UmIzM5O3JlIGdvaW5nIHdpdGggbGF6eSBmYXVsdGluZy4gVGhpcyBpcyBwcmV0dHkgc2lnbmlmaWNhbnQuIFRoZXkmIzM5O3ZlIGFkZGVkIGBtYXBfbW1hcF9mYXVsdGAgYW5kIGBtYXBfbW1hcF9wYWdlc2AgdG8gdGhlIGBzdHJ1Y3QgYnBmX21hcF9vcHNgLCBhbmQgaW1wbGVtZW50ZWQgdGhlIGFycmF5LXNwZWNpZmljIHZlcnNpb25zLCBgYXJyYXlfbWFwX21tYXBfZmF1bHRgIGFuZCBgYXJyYXlfbWFwX21tYXBfcGFnZXNgLCB3aXRoaW4gYGtlcm5lbC9icGYvYXJyYXltYXAuY2AuIFRoZXkmIzM5O3ZlIGFsc28gdXBkYXRlZCBgYnBmX21hcF9kZWZhdWx0X3Ztb3BzYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHRvIGluY2x1ZGUgdGhlIGAuZmF1bHRgIGFuZCBgLm1hcF9wYWdlc2AgaG9va3MuIFRoaXMgaXMgYSBjb3JlIGtlcm5lbCBtb2RpZmljYXRpb24sIGltcGFjdGluZyBhIGNydWNpYWwgc3Vic3lzdGVtLgoKR2l2ZW4gdGhlIHNjb3BlLCBmdXp6aW5nIHRoaXMgY2hhbmdlIGlzIGdvaW5nIHRvIGJlIGVzc2VudGlhbC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhvc2Uga2V5IHN5bWJvbHMg4oCTIGBhcnJheV9tYXBfbW1hcF9mYXVsdGAsIGBhcnJheV9tYXBfbW1hcF9wYWdlc2AsIGBicGZfbWFwX21tYXBfZmF1bHRgLCBhbmQgYGJwZl9tYXBfbW1hcF9wYWdlc2Ag4oCTIHRvIHVuZGVyc3RhbmQgdGhlIGNyaXRpY2FsIHBvaW50cyBvZiB0aGlzIG5ldyBpbXBsZW1lbnRhdGlvbi4KCkkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgYEJQRl9TWVNDQUxMYCBpcyBhIGdpdmVuLCBidXQgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyB0aGUgb25seSBvbmUuCgpMZXQgbWUgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRob3NlIHN5bWJvbHMuIGBhcnJheV9tYXBfbW1hcF9mYXVsdGAgaXMgc3RhdGljIGluIGBrZXJuZWwvYnBmL2FycmF5bWFwLmNgLiBTdGF0aWMgZnVuY3Rpb25zIG9mdGVuIGdldCBpbmxpbmVkLCBidXQgdGhlc2UgYXJlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzIGluIHRoZSBgYXJyYXlfbWFwX29wc2Agc3RydWN0dXJlLiBTbywgdGhlaXIgYWRkcmVzc2VzIGFyZSB0YWtlbiwgbWVhbmluZyB0aGV5IHdpbGwgZXhpc3QgYXMgZGlzdGluY3Qgc3ltYm9scy4gVGhlIHNhbWUgYXBwbGllcyB0byBgYnBmX21hcF9tbWFwX2ZhdWx0YCwgd2hpY2ggaXMgc3RhdGljIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuCgpJJiMzOTttIHVzaW5nIGBncmVwcGVyYCBub3cgdG8gY2hlY2sgdGhlIGNvbnRleHQgb2YgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBhbmQgdmVyaWZ5IHRoYXQgaXQmIzM5O3MgYmVpbmcgdXNlZCBhcyBJIGV4cGVjdC4gT2theSwgdGhhdCBsb29rcyBnb29kLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJyYXlfbWFwX21tYXBfZmF1bHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcnJheW1hcC5jPTYwMT1zdGF0aWMgc3RydWN0IHBhZ2UgKmFycmF5X21hcF9mYXVsdF9wYWdlKHN0cnVjdCBicGZfYXJyYXkgKmFycmF5LCBwZ29mZl90IHBnb2ZmKVxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy02MjEtXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6NjIyOnN0YXRpYyB2bV9mYXVsdF90IGFycmF5X21hcF9tbWFwX2ZhdWx0KHN0cnVjdCBicGZfbWFwICptYXAsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtNjIzLVx0XHRcdFx0ICAgICAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz05MDM9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTkxNi1cdC5tYXBfbW1hcCA9IGFycmF5X21hcF9tbWFwLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjkxNzpcdC5tYXBfbW1hcF9mYXVsdCA9IGFycmF5X21hcF9tbWFwX2ZhdWx0LFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTkxOC1cdC5tYXBfbW1hcF9wYWdlcyA9IGFycmF5X21hcF9tbWFwX3BhZ2VzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NTMKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIE1hcCBNZW1vcnkgTWFwcGluZyBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGVzZSBjb3JlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBtYXBwaW5nIGFuZCBCUEYgbWFwczogYGFycmF5X21hcF9tbWFwX2ZhdWx0YCwgYGFycmF5X21hcF9tbWFwX3BhZ2VzYCwgYGJwZl9tYXBfbW1hcF9mYXVsdGAsIGFuZCBgYnBmX21hcF9tbWFwX3BhZ2VzYC4gSSYjMzk7bSBnb2luZyB0byBza2lwIG92ZXIgdGhlIGBhcnJheV9tYXBfZmF1bHRfcGFnZWAgaGVscGVyIGZvciBub3c7IGl0JiMzOTtzIHN0YXRpYyBhbmQgbGlrZWx5IHVzZWQgaW50ZXJuYWxseSBieSB0aGUgb3RoZXJzLCBzbyB1bmRlcnN0YW5kaW5nIHRoZSBtYWluIGVudHJ5IHBvaW50cyBpcyBtb3JlIGNyaXRpY2FsIGF0IHRoaXMgc3RhZ2UuCgpNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIGBicGZfbWFwX21tYXBfZmF1bHRgLiBUaGF0IGZlZWxzIGxpa2UgYSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IOKAkyBwYXJ0aWN1bGFybHkgYmVjYXVzZSBpdCBoYW5kbGVzICpmYXVsdHMqLCB3aGljaCBhcmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG9uLWRlbWFuZCBtZW1vcnkgYWxsb2NhdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gSSYjMzk7bSBnb2luZyB0byBmaW5kIHRoaXMgZnVuY3Rpb24gd2l0aGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgYW5kIGJlZ2luIHRoZXJlLiBGcm9tIHRoZXJlIEkmIzM5O2xsIG1hcCBvdXQgaG93IHRoZSBvdGhlciBmdW5jdGlvbnMgYXJlIHVzZWQgaW4gdGhlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21hcF9tbWFwX2ZhdWx0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTEwNzI9c3RhdGljIHZvaWQgYnBmX21hcF9tbWFwX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwODUtICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMDg2OnN0YXRpYyB2bV9mYXVsdF90IGJwZl9tYXBfbW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwODcte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTExMDg9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBicGZfbWFwX2RlZmF1bHRfdm1vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTExMC1cdC5jbG9zZVx0XHQ9IGJwZl9tYXBfbW1hcF9jbG9zZSxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjExMTE6XHQuZmF1bHRcdFx0PSBicGZfbWFwX21tYXBfZmF1bHQsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMTEyLVx0Lm1hcF9wYWdlc1x0PSBicGZfbWFwX21tYXBfcGFnZXMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ0MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipUYXJnZXRpbmcgTm9uLUlubGluZWQgRnVuY3Rpb25zKioKClJpZ2h0LCBzbyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoZXkmIzM5O3JlIG5vdCBmdWxseSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gVGhpcyBpcyBrZXkgYmVjYXVzZSBpdCBtZWFucyB0aGV5JiMzOTtyZSBjb25jcmV0ZSwgYWRkcmVzc2FibGUgZW50cnkgcG9pbnRzIGluIG1lbW9yeSwgYW5kIHRoZXJlZm9yZSwgdGFyZ2V0YWJsZS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgc3RhcnQgdG8gdGhpbmsgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIG9mIGhvdyB0aGlzIG1pZ2h0IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBCUEYuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcG9zc2liaWxpdGllcyBmb3IgdHJhY2luZyBvciBtb2RpZmljYXRpb24uCgpBbmQgbm93IEkgaGF2ZSBgQlBGX1NZU0NBTExgIGluIGZyb250IG9mIG1lLCB3aGljaCBsaWtlbHkgZGVmaW5lcyB0aGUgY29uZmlndXJhdGlvbi4gVGltZSB0byBmaW5kIHdoZXJlIHRoaXMgaXMgZGVjbGFyZWQsIGBrZXJuZWwvYnBmL0tjb25maWdgIGFuZCBgaW5pdC9LY29uZmlnYCB3aWxsIGJlIG15IGZpcnN0IHNwb3RzLCBhcyBpdCBpcyBtb3N0IGxpa2VseSBhIGtlcm5lbCBjb25maWd1cmF0aW9uIHRoYXQgd2lsbCBnaXZlIG1lIGFkZGl0aW9uYWwgY29udGV4dCBvZiBpdHMgdXNlLCBhbmQgYWxsb3cgbWUgdG8gdW5kZXJzdGFuZCBob3cgaXQgaW1wYWN0cyBCUEYgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODAzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIGV4cGVydCBwZXJzcGVjdGl2ZToKCioqQlBGIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCkFscmlnaHQsIG15IGltbWVkaWF0ZSBndXQgZmVlbGluZyBpcyB0aGF0IGBCUEZfU1lTQ0FMTGAgaXMgdGhlIGNvcm5lcnN0b25lIG9mIHRoaXMgY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgbWVjaGFuaXNtLCB0aGUgbWFpbiBzd2l0Y2ggaWYgeW91IHdpbGwsIGZvciBlbmFibGluZyBCUEYgaW50ZXJhY3Rpb24gd2l0aCBzeXN0ZW0gY2FsbHMuIEJ1dCwgd2l0aCBteSBleHBlcmllbmNlLCBJIGtub3cgaXQmIzM5O3MgbmV2ZXIgcXVpdGUgdGhhdCBzaW1wbGUuCgpUaGVyZWZvcmUsIEkgbmVlZCB0byBtZXRob2RpY2FsbHkgZG91YmxlLWNoZWNrLCBhbmQgcGVyaGFwcyBkaWcgYSBsaXR0bGUgZGVlcGVyLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgbGF0ZW50IGRlcGVuZGVuY2llcyBvciBzdWJ0bGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGx1cmtpbmcgYmVuZWF0aCB0aGUgc3VyZmFjZSB0aGF0IGNvdWxkIGltcGFjdCBob3cgYEJQRl9TWVNDQUxMYCBmdW5jdGlvbnMsIG9yIGV2ZW4gd2hldGhlciBpdCBmdW5jdGlvbnMgYXQgYWxsLiBJIG5lZWQgdG8ga25vdyBhbGwgb2YgdGhlIG1vdmluZyBwYXJ0cyBiZWZvcmUgSSBjYW4gbW92ZSBmb3J3YXJkLiBQZXJoYXBzIHNvbWUgb3RoZXIsIHNlZW1pbmdseSB1bnJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGhhdmUgYSBkb3duc3RyZWFtIGltcGFjdCBoZXJlLiBJdCYjMzk7cyB0aW1lIHRvIHB1bGwgb3V0IHRoZSBkb2N1bWVudGF0aW9uIGFuZCBzdGFydCBtYXBwaW5nIHRoZSBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24uKkJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaGlkL2JwZi9LY29uZmlnPTQ9Y29uZmlnIEhJRF9CUEZcbi0tXG5kcml2ZXJzL2hpZC9icGYvS2NvbmZpZy02LVx0ZGVwZW5kcyBvbiBCUEZfSklUXG5kcml2ZXJzL2hpZC9icGYvS2NvbmZpZzo3Olx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuZHJpdmVycy9oaWQvYnBmL0tjb25maWctOC1cdGRlcGVuZHMgb24gRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbi0tXG5kcml2ZXJzL21lZGlhL3JjL0tjb25maWc9MTk9Y29uZmlnIEJQRl9MSVJDX01PREUyXG5kcml2ZXJzL21lZGlhL3JjL0tjb25maWctMjAtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gbGlyYyBkZXZpY2VzXCYjMzQ7XG5kcml2ZXJzL21lZGlhL3JjL0tjb25maWc6MjE6XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG5kcml2ZXJzL21lZGlhL3JjL0tjb25maWctMjItXHRkZXBlbmRzIG9uIFJDX0NPUkU9eVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NDYzPWNvbmZpZyBORVRLSVRcbmRyaXZlcnMvbmV0L0tjb25maWctNDY0LVx0Ym9vbCBcJiMzNDtCUEYtcHJvZ3JhbW1hYmxlIG5ldHdvcmsgZGV2aWNlXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjQ2NTpcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbmRyaXZlcnMvbmV0L0tjb25maWctNDY2LVx0aGVscFxuLS1cbmluaXQvS2NvbmZpZz0xMzUyPWNvbmZpZyBDR1JPVVBfQlBGXG5pbml0L0tjb25maWctMTM1My1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgZUJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBjZ3JvdXBzXCYjMzQ7XG5pbml0L0tjb25maWc6MTM1NDpcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbmluaXQvS2NvbmZpZy0xMzU1LVx0c2VsZWN0IFNPQ0tfQ0dST1VQX0RBVEFcbi0tXG5pb191cmluZy9LY29uZmlnPTE4PWNvbmZpZyBJT19VUklOR19CUEZfT1BTXG4tLVxuaW9fdXJpbmcvS2NvbmZpZy0yMC1cdGRlcGVuZHMgb24gSU9fVVJJTkdcbmlvX3VyaW5nL0tjb25maWc6MjE6XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBCUEZfSklUIFx1MDAyNlx1MDAyNiBERUJVR19JTkZPX0JURlxuLS1cbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ9MTY5PWNvbmZpZyBTQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTcwLVx0Ym9vbCBcJiMzNDtFeHRlbnNpYmxlIFNjaGVkdWxpbmcgQ2xhc3NcJiMzNDtcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ6MTcxOlx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgREVCVUdfSU5GT19CVEZcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTcyLVx0c2VsZWN0IFNUQUNLVFJBQ0UgaWYgU1RBQ0tUUkFDRV9TVVBQT1JUXG4tLVxua2VybmVsL2JwZi9LY29uZmlnPTU4PWNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnOjYwOlx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgSEFWRV9FQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTYxLVx0aGVscFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZz03Mz1jb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy03NS1cdGRlZmF1bHQgeVxua2VybmVsL2JwZi9LY29uZmlnOjc2Olx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTc3LVx0aGVscFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZz05Mj1jb25maWcgQlBGX0xTTVxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy05NC1cdGRlcGVuZHMgb24gQlBGX0VWRU5UU1xua2VybmVsL2JwZi9LY29uZmlnOjk1Olx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTk2LVx0ZGVwZW5kcyBvbiBTRUNVUklUWVxuLS1cbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnPTI9bWVudWNvbmZpZyBCUEZfUFJFTE9BRFxuLS1cbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnLTQtXHRkZXBlbmRzIG9uIEJQRlxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWc6NTpcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnLTYtXHQjIFRoZSBkZXBlbmRlbmN5IG9uICFDT01QSUxFX1RFU1QgcHJldmVudHMgaXQgZnJvbSBiZWluZyBlbmFibGVkXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9NzcwPWNvbmZpZyBQUk9CRV9FVkVOVFNfQlRGX0FSR1Ncbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy03NzItXHRkZXBlbmRzIG9uIEZQUk9CRV9FVkVOVFMgfHwgS1BST0JFX0VWRU5UU1xua2VybmVsL3RyYWNlL0tjb25maWc6NzczOlx0ZGVwZW5kcyBvbiBERUJVR19JTkZPX0JURiBcdTAwMjZcdTAwMjYgQlBGX1NZU0NBTExcbmtlcm5lbC90cmFjZS9LY29uZmlnLTc3NC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBCVEYgZnVuY3Rpb24gYXJndW1lbnRzIGZvciBwcm9iZSBldmVudHNcJiMzNDtcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz04NTM9Y29uZmlnIEJQRl9FVkVOVFNcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg1NDpcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1NS1cdGRlcGVuZHMgb24gKEtQUk9CRV9FVkVOVFMgfHwgVVBST0JFX0VWRU5UUykgXHUwMDI2XHUwMDI2IFBFUkZfRVZFTlRTXG4tLVxubGliL0tjb25maWcuZGVidWc9Mzk4PWNvbmZpZyBERUJVR19JTkZPX0JURlxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTQwMS1cdGRlcGVuZHMgb24gIUdDQ19QTFVHSU5fUkFORFNUUlVDVCB8fCBDT01QSUxFX1RFU1RcbmxpYi9LY29uZmlnLmRlYnVnOjQwMjpcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbmxpYi9LY29uZmlnLmRlYnVnLTQwMy1cdGRlcGVuZHMgb24gUEFIT0xFX1ZFUlNJT04gXHUwMDNlPSAxMjJcbi0tXG5uZXQvS2NvbmZpZz0zNjE9Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG4tLVxubmV0L0tjb25maWctMzYzLVx0ZGVwZW5kcyBvbiBJTkVUXG5uZXQvS2NvbmZpZzozNjQ6XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG5uZXQvS2NvbmZpZy0zNjUtXHRkZXBlbmRzIG9uIENHUk9VUF9CUEZcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz00MDY9Y29uZmlnIE5FVF9TQ0hfQlBGXG5uZXQvc2NoZWQvS2NvbmZpZy00MDctXHRib29sIFwmIzM0O0JQRi1iYXNlZCBRZGlzY1wmIzM0O1xubmV0L3NjaGVkL0tjb25maWc6NDA4Olx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgREVCVUdfSU5GT19CVEZcbm5ldC9zY2hlZC9LY29uZmlnLTQwOS1cdGhlbHBcbi0tXG5uZXQvc21jL0tjb25maWc9MjM9Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxubmV0L3NtYy9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XCYjMzQ7XG5uZXQvc21jL0tjb25maWc6MjU6XHRkZXBlbmRzIG9uIFNNQyBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX1NZU0NBTExcbm5ldC9zbWMvS2NvbmZpZy0yNi1cdGRlZmF1bHQgeVxuLS1cbm5ldC94ZHAvS2NvbmZpZz0yPWNvbmZpZyBYRFBfU09DS0VUU1xubmV0L3hkcC9LY29uZmlnLTMtXHRib29sIFwmIzM0O1hEUCBzb2NrZXRzXCYjMzQ7XG5uZXQveGRwL0tjb25maWc6NDpcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbm5ldC94ZHAvS2NvbmZpZy01LVx0ZGVmYXVsdCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NDIKCQkJCQkJCW91dHB1dDogMTYKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN5c3RlbSBDYWxsIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFycmF5bWFwLmNgIGFuZCBgc3lzY2FsbC5jYC4gSW1tZWRpYXRlbHksIG15IGJyYWluIGZsYWdzIHRoYXQgYGFycmF5bWFwLmNgIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIGtleSBkZXRhaWwgdG8ga2VlcCBpbiBtaW5kLCBhbmQgaXQgc3VnZ2VzdHMgdGhpcyBjaGFuZ2UgaXMgcmVsYXRlZCB0byB0aGUgQlBGIHN5c3RlbSBjYWxsIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uLCBzbyBsZXQmIzM5O3MganVtcCBvdmVyIHRvIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBhbmQgcXVpY2tseSBjb25maXJtIHRoZSBidWlsZCBkZXBlbmRlbmN5IGFuZCBnZXQgdGhlIGJyb2FkZXIgcGljdHVyZS4gTXkgaW5pdGlhbCBndWVzcyB3b3VsZCBiZSB0aGF0IG1vZGlmaWNhdGlvbnMgdG8gYGFycmF5bWFwLmNgIGFyZSBzb21laG93IGFmZmVjdGluZyB0aGUgd2F5IHN5c3RlbSBjYWxscyBhcmUgaGFuZGxlZCB3aGVuIEJQRiBpcyBpbnZvbHZlZDsgbGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBtYWtlZmlsZSByZXZlYWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcnJheW1hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2JwZi9ncmFwaF9kc19pbXBsLnJzdD03ND13aGljaCBhbHNvIGNvbnRhaW5zIGEgYGBicGZfc3Bpbl9sb2NrYGAgLSBpbiB0aGUgYWJvdmUgZXhhbXBsZSBib3RoIGdsb2JhbFxuRG9jdW1lbnRhdGlvbi9icGYvZ3JhcGhfZHNfaW1wbC5yc3Q6NzU6dmFyaWFibGVzIGFyZSBwbGFjZWQgaW4gYSBzaW5nbGUtdmFsdWUgYXJyYXltYXAuIFRoZSB2ZXJpZmllciBjb25zaWRlcnMgdGhpc1xuRG9jdW1lbnRhdGlvbi9icGYvZ3JhcGhfZHNfaW1wbC5yc3QtNzYtc3Bpbl9sb2NrIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgYGBicGZfcmJfcm9vdGBgIGJ5IHZpcnR1ZSBvZiBib3RoIGJlaW5nIGluXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMwMDc9c3RhdGljIGxvbmcgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdm9pZCAqdmFsdWUsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAyMy1cdCAqIHRoZSB2YWx1ZSBtaWQtY29weS4gQ2FsbGVycyByZXF1aXJpbmcgY29uc2lzdGVudCByZWFkcyBtdXN0IHVzZVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzAyNDpcdCAqIEJQRl9GX0xPQ0ssIG1hdGNoaW5nIGFycmF5bWFwIHNlbWFudGljcy5cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwMjUtXHQgKlxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwMjctXHQgKiBrcHRycy9ldGMuIHN0aWxsIHNpdCBpbiB0aGUgc2xvdC4gQ2FuY2VsIHRoZW0gYWZ0ZXIgdGhlIGNvcHlcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMwMjg6XHQgKiB0byBtYXRjaCBhcnJheW1hcCYjMzk7cyB1cGRhdGUgc2VtYW50aWNzLlxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAyOS1cdCAqL1xuLS1cbnNhbXBsZXMvYnBmL3NvY2tfZXhhbXBsZS5jLTEtLyogZUJQRiBleGFtcGxlIHByb2dyYW06XG5zYW1wbGVzL2JwZi9zb2NrX2V4YW1wbGUuYzoyOiAqIC0gY3JlYXRlcyBhcnJheW1hcCBpbiBrZXJuZWwgd2l0aCBrZXkgNCBieXRlcyBhbmQgdmFsdWUgOCBieXRlc1xuc2FtcGxlcy9icGYvc29ja19leGFtcGxlLmMtMy0gKlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmM9MTAxOD1zdGF0aWMgdm9pZCB0ZXN0X2JwZl9hcnJheV9tYXAodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jLTEwMzMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jOjEwMzQ6XHRtYXBfZmQgPSBicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMuYXJyYXltYXAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmM6MTAzNTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJwZl9tYXBfX21heF9lbnRyaWVzKHNrZWwtXHUwMDNlbWFwcy5hcnJheW1hcDEpOyBpJiM0MzsmIzQzOykge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYy0xMDM2LVx0XHR2YWwgPSBpICYjNDM7IDQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYy0xMDc5LVx0aGFzaF9mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy5oYXNobWFwMSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jOjEwODA6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBicGZfbWFwX19tYXhfZW50cmllcyhza2VsLVx1MDAzZW1hcHMuYXJyYXltYXAxKTsgaSYjNDM7JiM0MzspIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmMtMTA4MS1cdFx0ZXJyID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfZmQsIFx1MDAyNmksIFx1MDAyNnZhbCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jOjEwODI6XHRcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7bWFwX2xvb2t1cCBhcnJheW1hcDFcJiMzNDspKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYy0xMDgzLVx0XHRcdGdvdG8gY2xvc2VfaXRlcjtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmM6MTA4NDpcdFx0aWYgKCFBU1NFUlRfRVEoaSwgdmFsLCBcJiMzNDtpbnZhbGlkX3ZhbCBhcnJheW1hcDFcJiMzNDspKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYy0xMDg1LVx0XHRcdGdvdG8gY2xvc2VfaXRlcjtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jPTExMDM9c3RhdGljIHZvaWQgdGVzdF9icGZfYXJyYXlfbWFwX2l0ZXJfZmQodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jLTExMTEtXHRkb19yZWFkX21hcF9pdGVyX2ZkKFx1MDAyNnNrZWwtXHUwMDNlc2tlbGV0b24sIHNrZWwtXHUwMDNlcHJvZ3MuZHVtcF9icGZfYXJyYXlfbWFwLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYzoxMTEyOlx0XHRcdCAgICBza2VsLVx1MDAzZW1hcHMuYXJyYXltYXAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmMtMTExMy1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jPTExMTc9c3RhdGljIHZvaWQgdGVzdF9icGZfcGVyY3B1X2FycmF5X21hcCh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmMtMTE0Mi1cdC8qIHVwZGF0ZSBtYXAgdmFsdWVzIGhlcmUgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmM6MTE0MzpcdG1hcF9mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy5hcnJheW1hcDEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYzoxMTQ0Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYnBmX21hcF9fbWF4X2VudHJpZXMoc2tlbC1cdTAwM2VtYXBzLmFycmF5bWFwMSk7IGkmIzQzOyYjNDM7KSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jLTExNDUtXHRcdGV4cGVjdGVkX2tleSAmIzQzOz0gaTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuYz04OD1zdGF0aWMgc3RydWN0IGJ0Zl9yYXdfdGVzdCByYXdfdGVzdHNbXSA9IHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuYy0yMzMwLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jOjIzMzE6XHQuZGVzY3IgPSBcJiMzNDthcnJheW1hcCBpbnZhbGlkIGJ0ZiBrZXkgKGEgYml0IGZpZWxkKVwmIzM0OyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jLTIzMzItXHQucmF3X3R5cGVzID0ge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jLTIzNTEte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmM6MjM1MjpcdC5kZXNjciA9IFwmIzM0O2FycmF5bWFwIGludmFsaWQgYnRmIGtleSAoIT0gMzIgYml0cylcJiMzNDssXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuYy0yMzUzLVx0LnJhd190eXBlcyA9IHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuYy0yMzcyLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jOjIzNzM6XHQuZGVzY3IgPSBcJiMzNDthcnJheW1hcCBpbnZhbGlkIGJ0ZiB2YWx1ZSAodG9vIHNtYWxsKVwmIzM0OyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jLTIzNzQtXHQucmF3X3R5cGVzID0ge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jLTIzOTIte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmM6MjM5MzpcdC5kZXNjciA9IFwmIzM0O2FycmF5bWFwIGludmFsaWQgYnRmIHZhbHVlICh0b28gYmlnKVwmIzM0OyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jLTIzOTQtXHQucmF3X3R5cGVzID0ge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Zvcl9lYWNoLmM9Nzk9c3RhdGljIHZvaWQgdGVzdF9hcnJheV9tYXAodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jLTk3LVx0ZXhwZWN0ZWRfdG90YWwgPSAwO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYzo5ODpcdG1heF9lbnRyaWVzID0gYnBmX21hcF9fbWF4X2VudHJpZXMoc2tlbC1cdTAwM2VtYXBzLmFycmF5bWFwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Zvcl9lYWNoLmMtOTktXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtYXhfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jLTEwNC1cdFx0XHRleHBlY3RlZF90b3RhbCAmIzQzOz0gdmFsO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYzoxMDU6XHRcdGVyciA9IGJwZl9tYXBfX3VwZGF0ZV9lbGVtKHNrZWwtXHUwMDNlbWFwcy5hcnJheW1hcCwgXHUwMDI2a2V5LCBzaXplb2Yoa2V5KSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Zvcl9lYWNoLmMtMTA2LVx0XHRcdFx0XHQgICBcdTAwMjZ2YWwsIHNpemVvZih2YWwpLCBCUEZfQU5ZKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jLTEzMC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Zvcl9lYWNoLmM6MTMxOlx0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWFycmF5bWFwX291dHB1dCwgZXhwZWN0ZWRfdG90YWwsIFwmIzM0O2FycmF5X291dHB1dFwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jLTEzMi1cdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VjcHUgJiM0MzsgMSwgc2tlbC1cdTAwM2Vic3MtXHUwMDNlcGVyY3B1X3ZhbCwgXCYjMzQ7cGVyY3B1X3ZhbFwmIzM0Oyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYz0xNDg9c3RhdGljIHZvaWQgdGVzdF9tdWx0aV9tYXBzKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYy0xNjUtXHRhcnJheV90b3RhbCA9IDA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jOjE2NjpcdG1heF9lbnRyaWVzID0gYnBmX21hcF9fbWF4X2VudHJpZXMoc2tlbC1cdTAwM2VtYXBzLmFycmF5bWFwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Zvcl9lYWNoLmMtMTY3LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWF4X2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYy0xNzAtXHRcdGFycmF5X3RvdGFsICYjNDM7PSB2YWw7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jOjE3MTpcdFx0ZXJyID0gYnBmX21hcF9fdXBkYXRlX2VsZW0oc2tlbC1cdTAwM2VtYXBzLmFycmF5bWFwLCBcdTAwMjZrZXksIHNpemVvZihrZXkpLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYy0xNzItXHRcdFx0XHRcdCAgIFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCksIEJQRl9BTlkpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfYXJyYXlfbWFwLmM9OT1zdHJ1Y3Qge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfYXJyYXlfbWFwLmMtMTMtXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfYXJyYXlfbWFwLmM6MTQ6fSBhcnJheW1hcDEgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfYXJyYXlfbWFwLmMtMTUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9wZXJjcHVfYXJyYXlfbWFwLmM9OT1zdHJ1Y3Qge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfcGVyY3B1X2FycmF5X21hcC5jLTEzLVx0X190eXBlKHZhbHVlLCBfX3UzMik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3BlcmNwdV9hcnJheV9tYXAuYzoxNDp9IGFycmF5bWFwMSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9wZXJjcHVfYXJyYXlfbWFwLmMtMTUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmM9OD1zdHJ1Y3Qge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jLTEyLVx0X190eXBlKHZhbHVlLCBfX3U2NCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYzoxMzp9IGFycmF5bWFwIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYy0xNC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYz01MD1jaGVja19wZXJjcHVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBfX3UzMiAqa2V5LCBfX3U2NCAqdmFsLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jLTU3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmM6NTg6dTMyIGFycmF5bWFwX291dHB1dCA9IDA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYy01OS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYz02MT1pbnQgdGVzdF9wa3RfYWNjZXNzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYy02NS1cdGRhdGEub3V0cHV0ID0gMDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jOjY2Olx0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFx1MDAyNmFycmF5bWFwLCBjaGVja19hcnJheV9lbGVtLCBcdTAwMjZkYXRhLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jLTY3LVx0aWYgKCFieXBhc3NfdW51c2VkKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmM6Njg6XHRcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcdTAwMjZhcnJheW1hcCwgdW51c2VkX3N1YnByb2csIFx1MDAyNmRhdGEsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmM6Njk6XHRhcnJheW1hcF9vdXRwdXQgPSBkYXRhLm91dHB1dDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jLTcwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9tdWx0aV9tYXBzLmM9Nz1zdHJ1Y3Qge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9tdWx0aV9tYXBzLmMtMTEtXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9tdWx0aV9tYXBzLmM6MTI6fSBhcnJheW1hcCBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX211bHRpX21hcHMuYy0xMy1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfbXVsdGlfbWFwcy5jPTM3PWludCB0ZXN0X3BrdF9hY2Nlc3Moc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9tdWx0aV9tYXBzLmMtNDItXHRpZiAodXNlX2FycmF5KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX211bHRpX21hcHMuYzo0MzpcdFx0YnBmX2Zvcl9lYWNoX21hcF9lbGVtKFx1MDAyNmFycmF5bWFwLCBjaGVja19tYXBfZWxlbSwgXHUwMDI2ZGF0YSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfbXVsdGlfbWFwcy5jLTQ0LVx0ZWxzZVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYz0zMzU9c3RhdGljIHZvaWQgdGVzdF9oYXNobWFwX3plcm9fc2VlZCh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy0zNjctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM6MzY4OnN0YXRpYyB2b2lkIHRlc3RfYXJyYXltYXAodW5zaWduZWQgaW50IHRhc2ssIHZvaWQgKmRhdGEpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtMzY5LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtMzc0LVx0aWYgKGZkIFx1MDAzYyAwKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM6Mzc1Olx0XHRwcmludGYoXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBhcnJheW1hcCAmIzM5OyVzJiMzOTshXFxuXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTM3Ni1cdFx0ZXhpdCgxKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtNDIxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjQyMjpzdGF0aWMgdm9pZCB0ZXN0X2FycmF5bWFwX3BlcmNwdSh1bnNpZ25lZCBpbnQgdGFzaywgdm9pZCAqZGF0YSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy00MjMte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy00MzAtXHRpZiAoZmQgXHUwMDNjIDApIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYzo0MzE6XHRcdHByaW50ZihcJiMzNDtGYWlsZWQgdG8gY3JlYXRlIGFycmF5bWFwICYjMzk7JXMmIzM5OyFcXG5cJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtNDMyLVx0XHRleGl0KDEpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy00ODAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM6NDgxOnN0YXRpYyB2b2lkIHRlc3RfYXJyYXltYXBfcGVyY3B1X21hbnlfa2V5cyh2b2lkKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTQ4Mi17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTQ5My1cdGlmIChmZCBcdTAwM2MgMCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjQ5NDpcdFx0cHJpbnRmKFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgcGVyLWNwdSBhcnJheW1hcCAmIzM5OyVzJiMzOTshXFxuXCYjMzQ7LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTQ5NS1cdFx0ICAgICAgIHN0cmVycm9yKGVycm5vKSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jPTEzODk9c3RhdGljIHZvaWQgdGVzdF9tYXBfc3RyZXNzKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTEzOTUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM6MTM5NjpcdHJ1bl9wYXJhbGxlbCgxMDAsIHRlc3RfYXJyYXltYXAsIE5VTEwpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjEzOTc6XHRydW5fcGFyYWxsZWwoMTAwLCB0ZXN0X2FycmF5bWFwX3BlcmNwdSwgTlVMTCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtMTM5OC19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jPTE4ODY9c3RhdGljIHZvaWQgcnVuX2FsbF90ZXN0cyh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy0xODkyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjE4OTM6XHR0ZXN0X2FycmF5bWFwKDAsIE5VTEwpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjE4OTQ6XHR0ZXN0X2FycmF5bWFwX3BlcmNwdSgwLCBOVUxMKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy0xODk1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjE4OTY6XHR0ZXN0X2FycmF5bWFwX3BlcmNwdV9tYW55X2tleXMoKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy0xODk3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzYzOQoJCQkJCQkJb3V0cHV0OiAxNjYKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIFN1YnN5c3RlbSBQYXRjaCAtIEluaXRpYWwgQXNzZXNzbWVudCAmYW1wOyBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBkaWdnaW5nIGludG8gZnVuY3Rpb25hbCBjb2RlIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gSSBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgdGhlc2Uga2V5IGZ1bmN0aW9uczogYGFycmF5X21hcF9tbWFwX2ZhdWx0YCwgYGFycmF5X21hcF9tbWFwX3BhZ2VzYCwgYGJwZl9tYXBfbW1hcF9mYXVsdGAsIGFuZCBgYnBmX21hcF9tbWFwX3BhZ2VzYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhvc2UgYXJlICpzY3JlYW1pbmcqIGZvciBmdXp6aW5nLiBUaGV5JiMzOTtyZSBoYW5kbGluZyBtZW1vcnkgbWFwcGluZywgYW5kIHRoYXQgYWx3YXlzIHByZXNlbnRzIGludGVyZXN0aW5nIGF0dGFjayBzdXJmYWNlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGZvY3VzIG15IGVmZm9ydHMgdGhlcmUuCgpCZWZvcmUgSSBnZXQgdG9vIGZhciBkb3duIHRoZSBmdXp6aW5nIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIHN0ZXAgYmFjayBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIExldCBtZSB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjaGFuZ2UuIExvb2tzIGxpa2UgYEJQRl9TWVNDQUxMYCBpcyB0aGUgcHJpbWFyeSBvbmUsIHNvIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBjb25maWd1cmluZyBteSBmdXp6aW5nIGVudmlyb25tZW50LgoKQWxyaWdodCwgd2l0aCB0aGF0IGZvdW5kYXRpb24sIGl0JiMzOTtzIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgdG8gbWFuYWdlIGFuZCB0cmFjayBteSBmaW5kaW5ncy4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSB3YXkgdG8gYXBwcm9hY2ggdGhlIGZ1enppbmcgZ2l2ZW4gdGhlIHBhdGNoJiMzOTtzIHNjb3BlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcnJheV9tYXBfbW1hcF9mYXVsdCYjMzQ7LAogICAgJiMzNDthcnJheV9tYXBfbW1hcF9wYWdlcyYjMzQ7LAogICAgJiMzNDticGZfbWFwX21tYXBfZmF1bHQmIzM0OywKICAgICYjMzQ7YnBmX21hcF9tbWFwX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgYXJyYXkgbWFwIG1lbW9yeSBtYXBwaW5nIGxvZ2ljIHRvIHVzZSBsYXp5IGZhdWx0aW5nIGluc3RlYWQgb2YgZWFnZXIgbWFwcGluZy4gSXQgaW50cm9kdWNlcyBuZXcgZmF1bHQgaGFuZGxlcnMgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBhbmQgYGFycmF5X21hcF9tbWFwX3BhZ2VzYCBpbiBgYXJyYXltYXAuY2AsIGFuZCBjb3JyZXNwb25kaW5nIHN5c2NhbGwgaGFuZGxlcnMgaW4gYHN5c2NhbGwuY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcnJheV9tYXBfbW1hcF9mYXVsdCYjMzQ7LAogICAgJiMzNDthcnJheV9tYXBfbW1hcF9wYWdlcyYjMzQ7LAogICAgJiMzNDticGZfbWFwX21tYXBfZmF1bHQmIzM0OywKICAgICYjMzQ7YnBmX21hcF9tbWFwX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgYXJyYXkgbWFwIG1lbW9yeSBtYXBwaW5nIGxvZ2ljIHRvIHVzZSBsYXp5IGZhdWx0aW5nIGluc3RlYWQgb2YgZWFnZXIgbWFwcGluZy4gSXQgaW50cm9kdWNlcyBuZXcgZmF1bHQgaGFuZGxlcnMgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBhbmQgYGFycmF5X21hcF9tbWFwX3BhZ2VzYCBpbiBgYXJyYXltYXAuY2AsIGFuZCBjb3JyZXNwb25kaW5nIHN5c2NhbGwgaGFuZGxlcnMgaW4gYHN5c2NhbGwuY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAzOjU0OjI4LjkzMDQyOTk4M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MjczMjM5NDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXJyYXlfbWFwX21tYXBfZmF1bHRcIixcbiAgICBcImFycmF5X21hcF9tbWFwX3BhZ2VzXCIsXG4gICAgXCJicGZfbWFwX21tYXBfZmF1bHRcIixcbiAgICBcImJwZl9tYXBfbW1hcF9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgYXJyYXkgbWFwIG1lbW9yeSBtYXBwaW5nIGxvZ2ljIHRvIHVzZSBsYXp5IGZhdWx0aW5nIGluc3RlYWQgb2YgZWFnZXIgbWFwcGluZy4gSXQgaW50cm9kdWNlcyBuZXcgZmF1bHQgaGFuZGxlcnMgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBhbmQgYGFycmF5X21hcF9tbWFwX3BhZ2VzYCBpbiBgYXJyYXltYXAuY2AsIGFuZCBjb3JyZXNwb25kaW5nIHN5c2NhbGwgaGFuZGxlcnMgaW4gYHN5c2NhbGwuY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDM6NTQ6MjguOTMwNDM3MDQzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ1OTU1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjY2NhMTljODM3NDE4OTJhN2FkOTNhMmJhOGY2MjhkN2Q1ZjcwYzgwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDAzOjU0OjI4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuaW5kZXggN2JmYzI4NjczMTI0NC4uZWI1NzhjZTA4N2I3MCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGYuaFxcbkBAIC0xNDUsNiArMTQ1LDkgQEAgc3RydWN0IGJwZl9tYXBfb3BzIHtcXG4gXFx0aW50ICgqbWFwX2RpcmVjdF92YWx1ZV9tZXRhKShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHRcXHRcXHRcXHQgICAgIHU2NCBpbW0sIHUzMiAqb2ZmKTtcXG4gXFx0aW50ICgqbWFwX21tYXApKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG4rXFx0dm1fZmF1bHRfdCAoKm1hcF9tbWFwX2ZhdWx0KShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XFxuK1xcdHZtX2ZhdWx0X3QgKCptYXBfbW1hcF9wYWdlcykoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuK1xcdFxcdFxcdFxcdCAgICAgcGdvZmZfdCBzdGFydF9wZ29mZiwgcGdvZmZfdCBlbmRfcGdvZmYpO1xcbiBcXHRfX3BvbGxfdCAoKm1hcF9wb2xsKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqZmlscCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnB0cyk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgKCptYXBfZ2V0X3VubWFwcGVkX2FyZWEpKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FycmF5bWFwLmMgYi9rZXJuZWwvYnBmL2FycmF5bWFwLmNcXG5pbmRleCAyNDhiNDgxODE3OGNkLi4zNTk0ZTI2YjlmYjg4IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvYXJyYXltYXAuY1xcbisrKyBiL2tlcm5lbC9icGYvYXJyYXltYXAuY1xcbkBAIC03LDYgKzcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb3ZlcmZsb3cuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbHRlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9idGYuaFxcdTAwM2VcXG5AQCAtNTc2LDE3ICs1NzcsMTE4IEBAIHN0YXRpYyBpbnQgYXJyYXlfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBzdGF0aWMgaW50IGFycmF5X21hcF9tbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfYXJyYXkgKmFycmF5ID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcnJheSwgbWFwKTtcXG4tXFx0cGdvZmZfdCBwZ29mZiA9IFBBR0VfQUxJR04oc2l6ZW9mKCphcnJheSkpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIFxcbiBcXHRpZiAoIShtYXAtXFx1MDAzZW1hcF9mbGFncyBcXHUwMDI2IEJQRl9GX01NQVBBQkxFKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRpZiAodm1hLVxcdTAwM2V2bV9wZ29mZiAqIFBBR0VfU0laRSArICh2bWEtXFx1MDAzZXZtX2VuZCAtIHZtYS1cXHUwMDNldm1fc3RhcnQpIFxcdTAwM2VcXG4rXFx0LyogdXNlIHU2NCBtYXRoIHNvIHRoZSBvZmZzZXQgY2Fubm90IG92ZXJmbG93IG9uIDMyLWJpdCBhcmNocyAqL1xcbitcXHRpZiAoKHU2NCl2bWEtXFx1MDAzZXZtX3Bnb2ZmICogUEFHRV9TSVpFICsgKHZtYS1cXHUwMDNldm1fZW5kIC0gdm1hLVxcdTAwM2V2bV9zdGFydCkgXFx1MDAzZVxcbiBcXHQgICAgUEFHRV9BTElHTigodTY0KWFycmF5LVxcdTAwM2VtYXAubWF4X2VudHJpZXMgKiBhcnJheS1cXHUwMDNlZWxlbV9zaXplKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRyZXR1cm4gcmVtYXBfdm1hbGxvY19yYW5nZSh2bWEsIGFycmF5X21hcF92bWFsbG9jX2FkZHIoYXJyYXkpLFxcbi1cXHRcXHRcXHRcXHQgICB2bWEtXFx1MDAzZXZtX3Bnb2ZmICsgcGdvZmYpO1xcbitcXHQvKlxcbitcXHQgKiBUaGUgYmFja2luZyBtZW1vcnkgaXMgdm1hbGxvYydlZCB1cCBmcm9udCwgc28gaW5zdGVhZCBvZiB3aXJpbmcgdXBcXG4rXFx0ICogZXZlcnkgUFRFIGhlcmUgd2UgbGV0IHRoZSBmYXVsdCBoYW5kbGVycyBpbnNlcnQgcGFnZXMgb24gZGVtYW5kLlxcbitcXHQgKiByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWwoKSB1c2VkIHRvIHNldCB0aGVzZSBmbGFncyBmb3IgdXM7IGtlZXBcXG4rXFx0ICogdGhlbSB0byBwcmVzZXJ2ZSBiZWhhdmlvciAobm8gVk1BIGV4cGFuc2lvbiwgZXhjbHVkZWQgZnJvbSBjb3JlZHVtcCkuXFxuK1xcdCAqL1xcbitcXHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIFJlc29sdmUgdGhlIHZtYWxsb2MgcGFnZSBiYWNraW5nIHRoZSB2YWx1ZS1hcmVhIG9mZnNldCBvZiBhIGZhdWx0LiAqL1xcbitzdGF0aWMgc3RydWN0IHBhZ2UgKmFycmF5X21hcF9mYXVsdF9wYWdlKHN0cnVjdCBicGZfYXJyYXkgKmFycmF5LCBwZ29mZl90IHBnb2ZmKVxcbit7XFxuK1xcdHU2NCBhcnJheV9zaXplLCBvZmY7XFxuK1xcbitcXHRhcnJheV9zaXplID0gUEFHRV9BTElHTigodTY0KWFycmF5LVxcdTAwM2VtYXAubWF4X2VudHJpZXMgKiBhcnJheS1cXHUwMDNlZWxlbV9zaXplKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIHBnb2ZmIGlzIHRoZSBmYXVsdGluZyBwYWdlJ3Mgb2Zmc2V0IGludG8gdGhlIG1hcHBlZCB2YWx1ZSBhcmVhICh0aGVcXG4rXFx0ICogYnBmX2FycmF5IGhlYWRlciBwcmVjZWRlcyBhcnJheS1cXHUwMDNldmFsdWUgYW5kIGlzIG5vdCBtYXBwZWQpLiBHdWFyZCB0aGVcXG4rXFx0ICogc2hpZnQgYW5kIHRoZSBib3VuZHMgZXhwbGljaXRseSwgdGhlIHNhbWUgd2F5IHRoYXRcXG4rXFx0ICogcmVtYXBfdm1hbGxvY19yYW5nZV9wYXJ0aWFsKCkgZG9lcyBmb3IgdGhlIGVhZ2VyIHBhdGgsIGluc3RlYWQgb2ZcXG4rXFx0ICogcmVseWluZyBvbiB0aGUgbW1hcCgpLXRpbWUgYm91bmRzIGNoZWNrIGFsb25lLlxcbitcXHQgKi9cXG4rXFx0aWYgKGNoZWNrX3NobF9vdmVyZmxvdyhwZ29mZiwgUEFHRV9TSElGVCwgXFx1MDAyNm9mZikpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHRpZiAob2ZmIFxcdTAwM2U9IGFycmF5X3NpemUpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cmV0dXJuIHZtYWxsb2NfdG9fcGFnZShhcnJheS1cXHUwMDNldmFsdWUgKyBvZmYpO1xcbit9XFxuK1xcbitzdGF0aWMgdm1fZmF1bHRfdCBhcnJheV9tYXBfbW1hcF9mYXVsdChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9hcnJheSAqYXJyYXkgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FycmF5LCBtYXApO1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFxuK1xcdHBhZ2UgPSBhcnJheV9tYXBfZmF1bHRfcGFnZShhcnJheSwgdm1mLVxcdTAwM2VwZ29mZik7XFxuK1xcdGlmICghcGFnZSlcXG4rXFx0XFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcXG4rXFxuK1xcdGdldF9wYWdlKHBhZ2UpO1xcbitcXHR2bWYtXFx1MDAzZXBhZ2UgPSBwYWdlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEZhdWx0LWFyb3VuZCBoYW5kbGVyOiBpbnN0YWxsIFBURXMgZm9yIHRoZSB3aG9sZSBbc3RhcnRfcGdvZmYsIGVuZF9wZ29mZl1cXG4rICogd2luZG93IHVuZGVyIGEgc2luZ2xlIHBhZ2UtdGFibGUgbG9jaywgc28gdGhhdCBwb3B1bGF0aW5nIGEgbGFyZ2UgbWFwcGluZ1xcbisgKiAoZS5nLiBtbWFwKE1BUF9QT1BVTEFURSkgb3IgYSBsaW5lYXIgYWNjZXNzIHBhdHRlcm4pIGRvZXMgbm90IHRha2Ugb25lIGZ1bGxcXG4rICogZmF1bHQgcGVyIHBhZ2UuXFxuKyAqL1xcbitzdGF0aWMgdm1fZmF1bHRfdCBhcnJheV9tYXBfbW1hcF9wYWdlcyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHBnb2ZmX3Qgc3RhcnRfcGdvZmYsIHBnb2ZmX3QgZW5kX3Bnb2ZmKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfYXJyYXkgKmFycmF5ID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcnJheSwgbWFwKTtcXG4rXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXFx1MDAzZXZtYTtcXG4rXFx0dW5zaWduZWQgbG9uZyBhZGRyLCByc3MgPSAwO1xcbitcXHR2bV9mYXVsdF90IHJldCA9IDA7XFxuK1xcdHB0ZV90ICpzdGFydF9wdGU7XFxuK1xcdHBnb2ZmX3QgcGdvZmY7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgUFRFIHRhYmxlIGZvciB0aGlzIFBNRCBtdXN0IGFscmVhZHkgZXhpc3Q7IGluc3RhbGxpbmcgaXQgbmVlZHNcXG4rXFx0ICogbW0taW50ZXJuYWwgaGVscGVycy4gSWYgaXQgaXMgbWlzc2luZywgbGV0IHRoZSByZWd1bGFyIC1cXHUwMDNlZmF1bHQgcGF0aFxcbitcXHQgKiBpbnN0YWxsIGl0IGFuZCByZWx5IG9uIHRoZSBuZXh0IGZhdWx0LWFyb3VuZCB0byBiYXRjaCB0aGUgcmVzdC5cXG4rXFx0ICovXFxuK1xcdGlmIChwbWRfbm9uZSgqdm1mLVxcdTAwM2VwbWQpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGFkZHIgPSB2bWEtXFx1MDAzZXZtX3N0YXJ0ICsgKChzdGFydF9wZ29mZiAtIHZtYS1cXHUwMDNldm1fcGdvZmYpIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpO1xcbitcXHRzdGFydF9wdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHZtYS1cXHUwMDNldm1fbW0sIHZtZi1cXHUwMDNlcG1kLCBhZGRyLCBcXHUwMDI2dm1mLVxcdTAwM2VwdGwpO1xcbitcXHRpZiAoIXN0YXJ0X3B0ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHZtZi1cXHUwMDNlcHRlID0gc3RhcnRfcHRlO1xcbitcXG4rXFx0Zm9yIChwZ29mZiA9IHN0YXJ0X3Bnb2ZmOyBwZ29mZiBcXHUwMDNjPSBlbmRfcGdvZmY7XFxuK1xcdCAgICAgcGdvZmYrKywgdm1mLVxcdTAwM2VwdGUrKywgYWRkciArPSBQQUdFX1NJWkUpIHtcXG4rXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuK1xcbitcXHRcXHRpZiAoIXB0ZV9ub25lKHB0ZXBfZ2V0KHZtZi1cXHUwMDNlcHRlKSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0cGFnZSA9IGFycmF5X21hcF9mYXVsdF9wYWdlKGFycmF5LCBwZ29mZik7XFxuK1xcdFxcdGlmICghcGFnZSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuK1xcdFxcdGZvbGlvX2dldChmb2xpbyk7XFxuK1xcdFxcdHNldF9wdGVfcmFuZ2Uodm1mLCBmb2xpbywgcGFnZSwgMSwgYWRkcik7XFxuK1xcdFxcdHJzcysrO1xcbitcXHRcXHRpZiAoYWRkciA9PSB2bWYtXFx1MDAzZWFkZHJlc3MpXFxuK1xcdFxcdFxcdHJldCA9IFZNX0ZBVUxUX05PUEFHRTtcXG4rXFx0fVxcbitcXG4rXFx0YWRkX21tX2NvdW50ZXIodm1hLVxcdTAwM2V2bV9tbSwgTU1fRklMRVBBR0VTLCByc3MpO1xcbitcXHRwdGVfdW5tYXBfdW5sb2NrKHN0YXJ0X3B0ZSwgdm1mLVxcdTAwM2VwdGwpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgYXJyYXlfbWFwX21ldGFfZXF1YWwoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1ldGEwLFxcbkBAIC04MTIsNiArOTE0LDggQEAgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XFxuIFxcdC5tYXBfZGlyZWN0X3ZhbHVlX2FkZHIgPSBhcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIsXFxuIFxcdC5tYXBfZGlyZWN0X3ZhbHVlX21ldGEgPSBhcnJheV9tYXBfZGlyZWN0X3ZhbHVlX21ldGEsXFxuIFxcdC5tYXBfbW1hcCA9IGFycmF5X21hcF9tbWFwLFxcbitcXHQubWFwX21tYXBfZmF1bHQgPSBhcnJheV9tYXBfbW1hcF9mYXVsdCxcXG4rXFx0Lm1hcF9tbWFwX3BhZ2VzID0gYXJyYXlfbWFwX21tYXBfcGFnZXMsXFxuIFxcdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGFycmF5X21hcF9zZXFfc2hvd19lbGVtLFxcbiBcXHQubWFwX2NoZWNrX2J0ZiA9IGFycmF5X21hcF9jaGVja19idGYsXFxuIFxcdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXFxuaW5kZXggMGZmOWUzYWEyOTNkNS4uOTkwYzJmNWJlNDBhZiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbisrKyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXFxuQEAgLTEwNzcsOSArMTA3NywzOSBAQCBzdGF0aWMgdm9pZCBicGZfbWFwX21tYXBfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIFxcdFxcdGJwZl9tYXBfd3JpdGVfYWN0aXZlX2RlYyhtYXApO1xcbiB9XFxuIFxcbisvKlxcbisgKiBDYWxsZWQgZm9yIG1hcHMgdGhhdCBwb3B1bGF0ZSB0aGVpciBtZW1vcnktbWFwcGVkIHJlZ2lvbiBsYXppbHksIGkuZS4gdGhhdFxcbisgKiByZXR1cm4gd2l0aG91dCB3aXJpbmcgdXAgYW55IFBURXMgZnJvbSB0aGVpciAtXFx1MDAzZW1hcF9tbWFwIGNhbGxiYWNrLiBNYXBzIHRoYXRcXG4rICogcG9wdWxhdGUgdGhlIHdob2xlIFZNQSBlYWdlcmx5IChlLmcuIHZpYSByZW1hcF92bWFsbG9jX3JhbmdlKCkpIG5ldmVyIHJlYWNoXFxuKyAqIGhlcmUuXFxuKyAqL1xcbitzdGF0aWMgdm1fZmF1bHRfdCBicGZfbWFwX21tYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHZtZi1cXHUwMDNldm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGE7XFxuK1xcbitcXHRpZiAoIW1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfbW1hcF9mYXVsdClcXG4rXFx0XFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcXG4rXFxuK1xcdHJldHVybiBtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWFwX21tYXBfZmF1bHQobWFwLCB2bWYpO1xcbit9XFxuK1xcbisvKiBGYXVsdC1hcm91bmQ6IGJhdGNoLXBvcHVsYXRlIFBURXMgYXJvdW5kIHRoZSBmYXVsdGluZyBhZGRyZXNzLiAqL1xcbitzdGF0aWMgdm1fZmF1bHRfdCBicGZfbWFwX21tYXBfcGFnZXMoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuK1xcdFxcdFxcdFxcdCAgICAgcGdvZmZfdCBzdGFydF9wZ29mZiwgcGdvZmZfdCBlbmRfcGdvZmYpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHZtZi1cXHUwMDNldm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGE7XFxuK1xcbitcXHRpZiAoIW1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfbW1hcF9wYWdlcylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9tbWFwX3BhZ2VzKG1hcCwgdm1mLCBzdGFydF9wZ29mZiwgZW5kX3Bnb2ZmKTtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBicGZfbWFwX2RlZmF1bHRfdm1vcHMgPSB7XFxuIFxcdC5vcGVuXFx0XFx0PSBicGZfbWFwX21tYXBfb3BlbixcXG4gXFx0LmNsb3NlXFx0XFx0PSBicGZfbWFwX21tYXBfY2xvc2UsXFxuK1xcdC5mYXVsdFxcdFxcdD0gYnBmX21hcF9tbWFwX2ZhdWx0LFxcbitcXHQubWFwX3BhZ2VzXFx0PSBicGZfbWFwX21tYXBfcGFnZXMsXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IGJwZl9tYXBfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAzOjU0OjI5LjM5NTU1Mjc5MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM3ODA4MTA4MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXJyYXlfbWFwX21tYXBfZmF1bHRcIixcbiAgICBcImFycmF5X21hcF9tbWFwX3BhZ2VzXCIsXG4gICAgXCJicGZfbWFwX21tYXBfZmF1bHRcIixcbiAgICBcImJwZl9tYXBfbW1hcF9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgYXJyYXkgbWFwIG1lbW9yeSBtYXBwaW5nIGxvZ2ljIHRvIHVzZSBsYXp5IGZhdWx0aW5nIGluc3RlYWQgb2YgZWFnZXIgbWFwcGluZy4gSXQgaW50cm9kdWNlcyBuZXcgZmF1bHQgaGFuZGxlcnMgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBhbmQgYGFycmF5X21hcF9tbWFwX3BhZ2VzYCBpbiBgYXJyYXltYXAuY2AsIGFuZCBjb3JyZXNwb25kaW5nIHN5c2NhbGwgaGFuZGxlcnMgaW4gYHN5c2NhbGwuY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2NjYTE5YzgzNzQxODkyYTdhZDkzYTJiYThmNjI4ZDdkNWY3MGM4MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDAzOjU0OjI4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcbmluZGV4IDdiZmMyODY3MzEyNDQuLmViNTc4Y2UwODdiNzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5AQCAtMTQ1LDYgKzE0NSw5IEBAIHN0cnVjdCBicGZfbWFwX29wcyB7XG4gXHRpbnQgKCptYXBfZGlyZWN0X3ZhbHVlX21ldGEpKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHRcdFx0XHQgICAgIHU2NCBpbW0sIHUzMiAqb2ZmKTtcbiBcdGludCAoKm1hcF9tbWFwKShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4rXHR2bV9mYXVsdF90ICgqbWFwX21tYXBfZmF1bHQpKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKTtcbitcdHZtX2ZhdWx0X3QgKCptYXBfbW1hcF9wYWdlcykoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4rXHRcdFx0XHQgICAgIHBnb2ZmX3Qgc3RhcnRfcGdvZmYsIHBnb2ZmX3QgZW5kX3Bnb2ZmKTtcbiBcdF9fcG9sbF90ICgqbWFwX3BvbGwpKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0XHRcdCAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICpwdHMpO1xuIFx0dW5zaWduZWQgbG9uZyAoKm1hcF9nZXRfdW5tYXBwZWRfYXJlYSkoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9hcnJheW1hcC5jIGIva2VybmVsL2JwZi9hcnJheW1hcC5jXG5pbmRleCAyNDhiNDgxODE3OGNkLi4zNTk0ZTI2YjlmYjg4IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9hcnJheW1hcC5jXG4rKysgYi9rZXJuZWwvYnBmL2FycmF5bWFwLmNcbkBAIC03LDYgKzcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L292ZXJmbG93LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWx0ZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvYnRmLmhcdTAwM2VcbkBAIC01NzYsMTcgKzU3NywxMTggQEAgc3RhdGljIGludCBhcnJheV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsXG4gc3RhdGljIGludCBhcnJheV9tYXBfbW1hcChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiB7XG4gXHRzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJyYXksIG1hcCk7XG4tXHRwZ29mZl90IHBnb2ZmID0gUEFHRV9BTElHTihzaXplb2YoKmFycmF5KSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXG4gXHRpZiAoIShtYXAtXHUwMDNlbWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9NTUFQQUJMRSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKHZtYS1cdTAwM2V2bV9wZ29mZiAqIFBBR0VfU0laRSArICh2bWEtXHUwMDNldm1fZW5kIC0gdm1hLVx1MDAzZXZtX3N0YXJ0KSBcdTAwM2VcbitcdC8qIHVzZSB1NjQgbWF0aCBzbyB0aGUgb2Zmc2V0IGNhbm5vdCBvdmVyZmxvdyBvbiAzMi1iaXQgYXJjaHMgKi9cbitcdGlmICgodTY0KXZtYS1cdTAwM2V2bV9wZ29mZiAqIFBBR0VfU0laRSArICh2bWEtXHUwMDNldm1fZW5kIC0gdm1hLVx1MDAzZXZtX3N0YXJ0KSBcdTAwM2VcbiBcdCAgICBQQUdFX0FMSUdOKCh1NjQpYXJyYXktXHUwMDNlbWFwLm1heF9lbnRyaWVzICogYXJyYXktXHUwMDNlZWxlbV9zaXplKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRyZXR1cm4gcmVtYXBfdm1hbGxvY19yYW5nZSh2bWEsIGFycmF5X21hcF92bWFsbG9jX2FkZHIoYXJyYXkpLFxuLVx0XHRcdFx0ICAgdm1hLVx1MDAzZXZtX3Bnb2ZmICsgcGdvZmYpO1xuK1x0LypcbitcdCAqIFRoZSBiYWNraW5nIG1lbW9yeSBpcyB2bWFsbG9jJ2VkIHVwIGZyb250LCBzbyBpbnN0ZWFkIG9mIHdpcmluZyB1cFxuK1x0ICogZXZlcnkgUFRFIGhlcmUgd2UgbGV0IHRoZSBmYXVsdCBoYW5kbGVycyBpbnNlcnQgcGFnZXMgb24gZGVtYW5kLlxuK1x0ICogcmVtYXBfdm1hbGxvY19yYW5nZV9wYXJ0aWFsKCkgdXNlZCB0byBzZXQgdGhlc2UgZmxhZ3MgZm9yIHVzOyBrZWVwXG4rXHQgKiB0aGVtIHRvIHByZXNlcnZlIGJlaGF2aW9yIChubyBWTUEgZXhwYW5zaW9uLCBleGNsdWRlZCBmcm9tIGNvcmVkdW1wKS5cbitcdCAqL1xuK1x0dm1fZmxhZ3Nfc2V0KHZtYSwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlREVU1QKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBSZXNvbHZlIHRoZSB2bWFsbG9jIHBhZ2UgYmFja2luZyB0aGUgdmFsdWUtYXJlYSBvZmZzZXQgb2YgYSBmYXVsdC4gKi9cbitzdGF0aWMgc3RydWN0IHBhZ2UgKmFycmF5X21hcF9mYXVsdF9wYWdlKHN0cnVjdCBicGZfYXJyYXkgKmFycmF5LCBwZ29mZl90IHBnb2ZmKVxuK3tcbitcdHU2NCBhcnJheV9zaXplLCBvZmY7XG4rXG4rXHRhcnJheV9zaXplID0gUEFHRV9BTElHTigodTY0KWFycmF5LVx1MDAzZW1hcC5tYXhfZW50cmllcyAqIGFycmF5LVx1MDAzZWVsZW1fc2l6ZSk7XG4rXG4rXHQvKlxuK1x0ICogcGdvZmYgaXMgdGhlIGZhdWx0aW5nIHBhZ2UncyBvZmZzZXQgaW50byB0aGUgbWFwcGVkIHZhbHVlIGFyZWEgKHRoZVxuK1x0ICogYnBmX2FycmF5IGhlYWRlciBwcmVjZWRlcyBhcnJheS1cdTAwM2V2YWx1ZSBhbmQgaXMgbm90IG1hcHBlZCkuIEd1YXJkIHRoZVxuK1x0ICogc2hpZnQgYW5kIHRoZSBib3VuZHMgZXhwbGljaXRseSwgdGhlIHNhbWUgd2F5IHRoYXRcbitcdCAqIHJlbWFwX3ZtYWxsb2NfcmFuZ2VfcGFydGlhbCgpIGRvZXMgZm9yIHRoZSBlYWdlciBwYXRoLCBpbnN0ZWFkIG9mXG4rXHQgKiByZWx5aW5nIG9uIHRoZSBtbWFwKCktdGltZSBib3VuZHMgY2hlY2sgYWxvbmUuXG4rXHQgKi9cbitcdGlmIChjaGVja19zaGxfb3ZlcmZsb3cocGdvZmYsIFBBR0VfU0hJRlQsIFx1MDAyNm9mZikpXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0aWYgKG9mZiBcdTAwM2U9IGFycmF5X3NpemUpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0cmV0dXJuIHZtYWxsb2NfdG9fcGFnZShhcnJheS1cdTAwM2V2YWx1ZSArIG9mZik7XG4rfVxuK1xuK3N0YXRpYyB2bV9mYXVsdF90IGFycmF5X21hcF9tbWFwX2ZhdWx0KHN0cnVjdCBicGZfbWFwICptYXAsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4re1xuK1x0c3RydWN0IGJwZl9hcnJheSAqYXJyYXkgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FycmF5LCBtYXApO1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4rXG4rXHRwYWdlID0gYXJyYXlfbWFwX2ZhdWx0X3BhZ2UoYXJyYXksIHZtZi1cdTAwM2VwZ29mZik7XG4rXHRpZiAoIXBhZ2UpXG4rXHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4rXG4rXHRnZXRfcGFnZShwYWdlKTtcbitcdHZtZi1cdTAwM2VwYWdlID0gcGFnZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIEZhdWx0LWFyb3VuZCBoYW5kbGVyOiBpbnN0YWxsIFBURXMgZm9yIHRoZSB3aG9sZSBbc3RhcnRfcGdvZmYsIGVuZF9wZ29mZl1cbisgKiB3aW5kb3cgdW5kZXIgYSBzaW5nbGUgcGFnZS10YWJsZSBsb2NrLCBzbyB0aGF0IHBvcHVsYXRpbmcgYSBsYXJnZSBtYXBwaW5nXG4rICogKGUuZy4gbW1hcChNQVBfUE9QVUxBVEUpIG9yIGEgbGluZWFyIGFjY2VzcyBwYXR0ZXJuKSBkb2VzIG5vdCB0YWtlIG9uZSBmdWxsXG4rICogZmF1bHQgcGVyIHBhZ2UuXG4rICovXG4rc3RhdGljIHZtX2ZhdWx0X3QgYXJyYXlfbWFwX21tYXBfcGFnZXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4rXHRcdFx0XHQgICAgICAgcGdvZmZfdCBzdGFydF9wZ29mZiwgcGdvZmZfdCBlbmRfcGdvZmYpXG4re1xuK1x0c3RydWN0IGJwZl9hcnJheSAqYXJyYXkgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FycmF5LCBtYXApO1xuK1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXHUwMDNldm1hO1xuK1x0dW5zaWduZWQgbG9uZyBhZGRyLCByc3MgPSAwO1xuK1x0dm1fZmF1bHRfdCByZXQgPSAwO1xuK1x0cHRlX3QgKnN0YXJ0X3B0ZTtcbitcdHBnb2ZmX3QgcGdvZmY7XG4rXG4rXHQvKlxuK1x0ICogVGhlIFBURSB0YWJsZSBmb3IgdGhpcyBQTUQgbXVzdCBhbHJlYWR5IGV4aXN0OyBpbnN0YWxsaW5nIGl0IG5lZWRzXG4rXHQgKiBtbS1pbnRlcm5hbCBoZWxwZXJzLiBJZiBpdCBpcyBtaXNzaW5nLCBsZXQgdGhlIHJlZ3VsYXIgLVx1MDAzZWZhdWx0IHBhdGhcbitcdCAqIGluc3RhbGwgaXQgYW5kIHJlbHkgb24gdGhlIG5leHQgZmF1bHQtYXJvdW5kIHRvIGJhdGNoIHRoZSByZXN0LlxuK1x0ICovXG4rXHRpZiAocG1kX25vbmUoKnZtZi1cdTAwM2VwbWQpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGFkZHIgPSB2bWEtXHUwMDNldm1fc3RhcnQgKyAoKHN0YXJ0X3Bnb2ZmIC0gdm1hLVx1MDAzZXZtX3Bnb2ZmKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4rXHRzdGFydF9wdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHZtYS1cdTAwM2V2bV9tbSwgdm1mLVx1MDAzZXBtZCwgYWRkciwgXHUwMDI2dm1mLVx1MDAzZXB0bCk7XG4rXHRpZiAoIXN0YXJ0X3B0ZSlcbitcdFx0cmV0dXJuIDA7XG4rXHR2bWYtXHUwMDNlcHRlID0gc3RhcnRfcHRlO1xuK1xuK1x0Zm9yIChwZ29mZiA9IHN0YXJ0X3Bnb2ZmOyBwZ29mZiBcdTAwM2M9IGVuZF9wZ29mZjtcbitcdCAgICAgcGdvZmYrKywgdm1mLVx1MDAzZXB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSkge1xuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbitcbitcdFx0aWYgKCFwdGVfbm9uZShwdGVwX2dldCh2bWYtXHUwMDNlcHRlKSkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHBhZ2UgPSBhcnJheV9tYXBfZmF1bHRfcGFnZShhcnJheSwgcGdvZmYpO1xuK1x0XHRpZiAoIXBhZ2UpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbitcdFx0Zm9saW9fZ2V0KGZvbGlvKTtcbitcdFx0c2V0X3B0ZV9yYW5nZSh2bWYsIGZvbGlvLCBwYWdlLCAxLCBhZGRyKTtcbitcdFx0cnNzKys7XG4rXHRcdGlmIChhZGRyID09IHZtZi1cdTAwM2VhZGRyZXNzKVxuK1x0XHRcdHJldCA9IFZNX0ZBVUxUX05PUEFHRTtcbitcdH1cbitcbitcdGFkZF9tbV9jb3VudGVyKHZtYS1cdTAwM2V2bV9tbSwgTU1fRklMRVBBR0VTLCByc3MpO1xuK1x0cHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHZtZi1cdTAwM2VwdGwpO1xuK1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGJvb2wgYXJyYXlfbWFwX21ldGFfZXF1YWwoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1ldGEwLFxuQEAgLTgxMiw2ICs5MTQsOCBAQCBjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfbWFwX29wcyA9IHtcbiBcdC5tYXBfZGlyZWN0X3ZhbHVlX2FkZHIgPSBhcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIsXG4gXHQubWFwX2RpcmVjdF92YWx1ZV9tZXRhID0gYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhLFxuIFx0Lm1hcF9tbWFwID0gYXJyYXlfbWFwX21tYXAsXG4rXHQubWFwX21tYXBfZmF1bHQgPSBhcnJheV9tYXBfbW1hcF9mYXVsdCxcbitcdC5tYXBfbW1hcF9wYWdlcyA9IGFycmF5X21hcF9tbWFwX3BhZ2VzLFxuIFx0Lm1hcF9zZXFfc2hvd19lbGVtID0gYXJyYXlfbWFwX3NlcV9zaG93X2VsZW0sXG4gXHQubWFwX2NoZWNrX2J0ZiA9IGFycmF5X21hcF9jaGVja19idGYsXG4gXHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCAwZmY5ZTNhYTI5M2Q1Li45OTBjMmY1YmU0MGFmIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbisrKyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtMTA3Nyw5ICsxMDc3LDM5IEBAIHN0YXRpYyB2b2lkIGJwZl9tYXBfbW1hcF9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdFx0YnBmX21hcF93cml0ZV9hY3RpdmVfZGVjKG1hcCk7XG4gfVxuIFxuKy8qXG4rICogQ2FsbGVkIGZvciBtYXBzIHRoYXQgcG9wdWxhdGUgdGhlaXIgbWVtb3J5LW1hcHBlZCByZWdpb24gbGF6aWx5LCBpLmUuIHRoYXRcbisgKiByZXR1cm4gd2l0aG91dCB3aXJpbmcgdXAgYW55IFBURXMgZnJvbSB0aGVpciAtXHUwMDNlbWFwX21tYXAgY2FsbGJhY2suIE1hcHMgdGhhdFxuKyAqIHBvcHVsYXRlIHRoZSB3aG9sZSBWTUEgZWFnZXJseSAoZS5nLiB2aWEgcmVtYXBfdm1hbGxvY19yYW5nZSgpKSBuZXZlciByZWFjaFxuKyAqIGhlcmUuXG4rICovXG4rc3RhdGljIHZtX2ZhdWx0X3QgYnBmX21hcF9tbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuK3tcbitcdHN0cnVjdCBicGZfbWFwICptYXAgPSB2bWYtXHUwMDNldm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbitcbitcdGlmICghbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfbW1hcF9mYXVsdClcbitcdFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcbitcbitcdHJldHVybiBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9tbWFwX2ZhdWx0KG1hcCwgdm1mKTtcbit9XG4rXG4rLyogRmF1bHQtYXJvdW5kOiBiYXRjaC1wb3B1bGF0ZSBQVEVzIGFyb3VuZCB0aGUgZmF1bHRpbmcgYWRkcmVzcy4gKi9cbitzdGF0aWMgdm1fZmF1bHRfdCBicGZfbWFwX21tYXBfcGFnZXMoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4rXHRcdFx0XHQgICAgIHBnb2ZmX3Qgc3RhcnRfcGdvZmYsIHBnb2ZmX3QgZW5kX3Bnb2ZmKVxuK3tcbitcdHN0cnVjdCBicGZfbWFwICptYXAgPSB2bWYtXHUwMDNldm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbitcbitcdGlmICghbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfbW1hcF9wYWdlcylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfbW1hcF9wYWdlcyhtYXAsIHZtZiwgc3RhcnRfcGdvZmYsIGVuZF9wZ29mZik7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYnBmX21hcF9kZWZhdWx0X3Ztb3BzID0ge1xuIFx0Lm9wZW5cdFx0PSBicGZfbWFwX21tYXBfb3BlbixcbiBcdC5jbG9zZVx0XHQ9IGJwZl9tYXBfbW1hcF9jbG9zZSxcbitcdC5mYXVsdFx0XHQ9IGJwZl9tYXBfbW1hcF9mYXVsdCxcbitcdC5tYXBfcGFnZXNcdD0gYnBmX21hcF9tbWFwX3BhZ2VzLFxuIH07XG4gXG4gc3RhdGljIGludCBicGZfbWFwX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDM6NTQ6MjkuMzk1NTUzODgyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUwMzAzNzUzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBBcnJheSBNYXAgTGF6eSBGYXVsdGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgbWFraW5nIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIGhvdyBCUEYgYXJyYXkgbWFwcyBhcmUgbWVtb3J5IG1hcHBlZC4gSW5zdGVhZCBvZiB0aGUgZWFnZXIgYHJlbWFwX3ZtYWxsb2NfcmFuZ2VgIGFwcHJvYWNoLCB3ZSdyZSBnb2luZyB3aXRoIGxhenkgZmF1bHRpbmcuIFRoaXMgaXMgcHJldHR5IHNpZ25pZmljYW50LiBUaGV5J3ZlIGFkZGVkIGBtYXBfbW1hcF9mYXVsdGAgYW5kIGBtYXBfbW1hcF9wYWdlc2AgdG8gdGhlIGBzdHJ1Y3QgYnBmX21hcF9vcHNgLCBhbmQgaW1wbGVtZW50ZWQgdGhlIGFycmF5LXNwZWNpZmljIHZlcnNpb25zLCBgYXJyYXlfbWFwX21tYXBfZmF1bHRgIGFuZCBgYXJyYXlfbWFwX21tYXBfcGFnZXNgLCB3aXRoaW4gYGtlcm5lbC9icGYvYXJyYXltYXAuY2AuIFRoZXkndmUgYWxzbyB1cGRhdGVkIGBicGZfbWFwX2RlZmF1bHRfdm1vcHNgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgdG8gaW5jbHVkZSB0aGUgYC5mYXVsdGAgYW5kIGAubWFwX3BhZ2VzYCBob29rcy4gVGhpcyBpcyBhIGNvcmUga2VybmVsIG1vZGlmaWNhdGlvbiwgaW1wYWN0aW5nIGEgY3J1Y2lhbCBzdWJzeXN0ZW0uXG5cbkdpdmVuIHRoZSBzY29wZSwgZnV6emluZyB0aGlzIGNoYW5nZSBpcyBnb2luZyB0byBiZSBlc3NlbnRpYWwuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRob3NlIGtleSBzeW1ib2xzIOKAkyBgYXJyYXlfbWFwX21tYXBfZmF1bHRgLCBgYXJyYXlfbWFwX21tYXBfcGFnZXNgLCBgYnBmX21hcF9tbWFwX2ZhdWx0YCwgYW5kIGBicGZfbWFwX21tYXBfcGFnZXNgIOKAkyB0byB1bmRlcnN0YW5kIHRoZSBjcml0aWNhbCBwb2ludHMgb2YgdGhpcyBuZXcgaW1wbGVtZW50YXRpb24uXG5cbkkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgYEJQRl9TWVNDQUxMYCBpcyBhIGdpdmVuLCBidXQgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyB0aGUgb25seSBvbmUuXG5cbkxldCBtZSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhvc2Ugc3ltYm9scy4gYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBpcyBzdGF0aWMgaW4gYGtlcm5lbC9icGYvYXJyYXltYXAuY2AuIFN0YXRpYyBmdW5jdGlvbnMgb2Z0ZW4gZ2V0IGlubGluZWQsIGJ1dCB0aGVzZSBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgaW4gdGhlIGBhcnJheV9tYXBfb3BzYCBzdHJ1Y3R1cmUuIFNvLCB0aGVpciBhZGRyZXNzZXMgYXJlIHRha2VuLCBtZWFuaW5nIHRoZXkgd2lsbCBleGlzdCBhcyBkaXN0aW5jdCBzeW1ib2xzLiBUaGUgc2FtZSBhcHBsaWVzIHRvIGBicGZfbWFwX21tYXBfZmF1bHRgLCB3aGljaCBpcyBzdGF0aWMgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC5cblxuSSdtIHVzaW5nIGBncmVwcGVyYCBub3cgdG8gY2hlY2sgdGhlIGNvbnRleHQgb2YgYGFycmF5X21hcF9tbWFwX2ZhdWx0YCBhbmQgdmVyaWZ5IHRoYXQgaXQncyBiZWluZyB1c2VkIGFzIEkgZXhwZWN0LiBPa2F5LCB0aGF0IGxvb2tzIGdvb2QuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcwMiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAzOjU0OjM1Ljg5ODU5Mjk0NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTAxODY4MDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFycmF5X21hcF9tbWFwX2ZhdWx0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYXJyYXltYXAuYz02MDE9c3RhdGljIHN0cnVjdCBwYWdlICphcnJheV9tYXBfZmF1bHRfcGFnZShzdHJ1Y3QgYnBmX2FycmF5ICphcnJheSwgcGdvZmZfdCBwZ29mZilcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy02MjEtXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjYyMjpzdGF0aWMgdm1fZmF1bHRfdCBhcnJheV9tYXBfbW1hcF9mYXVsdChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy02MjMtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTkwMz1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy05MTYtXFx0Lm1hcF9tbWFwID0gYXJyYXlfbWFwX21tYXAsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjkxNzpcXHQubWFwX21tYXBfZmF1bHQgPSBhcnJheV9tYXBfbW1hcF9mYXVsdCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtOTE4LVxcdC5tYXBfbW1hcF9wYWdlcyA9IGFycmF5X21hcF9tbWFwX3BhZ2VzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMzo1NDozOC40MDA0NjQ3NDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTg3NjcyNTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgTWFwIE1lbW9yeSBNYXBwaW5nIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGVzZSBjb3JlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBtYXBwaW5nIGFuZCBCUEYgbWFwczogYGFycmF5X21hcF9tbWFwX2ZhdWx0YCwgYGFycmF5X21hcF9tbWFwX3BhZ2VzYCwgYGJwZl9tYXBfbW1hcF9mYXVsdGAsIGFuZCBgYnBmX21hcF9tbWFwX3BhZ2VzYC4gSSdtIGdvaW5nIHRvIHNraXAgb3ZlciB0aGUgYGFycmF5X21hcF9mYXVsdF9wYWdlYCBoZWxwZXIgZm9yIG5vdzsgaXQncyBzdGF0aWMgYW5kIGxpa2VseSB1c2VkIGludGVybmFsbHkgYnkgdGhlIG90aGVycywgc28gdW5kZXJzdGFuZGluZyB0aGUgbWFpbiBlbnRyeSBwb2ludHMgaXMgbW9yZSBjcml0aWNhbCBhdCB0aGlzIHN0YWdlLlxuXG5NeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIGBicGZfbWFwX21tYXBfZmF1bHRgLiBUaGF0IGZlZWxzIGxpa2UgYSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IOKAkyBwYXJ0aWN1bGFybHkgYmVjYXVzZSBpdCBoYW5kbGVzICpmYXVsdHMqLCB3aGljaCBhcmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG9uLWRlbWFuZCBtZW1vcnkgYWxsb2NhdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gSSdtIGdvaW5nIHRvIGZpbmQgdGhpcyBmdW5jdGlvbiB3aXRoaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBhbmQgYmVnaW4gdGhlcmUuIEZyb20gdGhlcmUgSSdsbCBtYXAgb3V0IGhvdyB0aGUgb3RoZXIgZnVuY3Rpb25zIGFyZSB1c2VkIGluIHRoZSBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODUzLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDM6NTQ6NDEuOTg4MTM5NDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3MDAzNjgyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbWFwX21tYXBfZmF1bHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9MTA3Mj1zdGF0aWMgdm9pZCBicGZfbWFwX21tYXBfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMDg1LSAqL1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEwODY6c3RhdGljIHZtX2ZhdWx0X3QgYnBmX21hcF9tbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwODcte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTEwOD1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGJwZl9tYXBfZGVmYXVsdF92bW9wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTExMTAtXFx0LmNsb3NlXFx0XFx0PSBicGZfbWFwX21tYXBfY2xvc2UsXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTExMTpcXHQuZmF1bHRcXHRcXHQ9IGJwZl9tYXBfbW1hcF9mYXVsdCxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMTEyLVxcdC5tYXBfcGFnZXNcXHQ9IGJwZl9tYXBfbW1hcF9wYWdlcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDM6NTQ6NDQuMzU4MTg1NTA0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3NzgxMzAwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlRhcmdldGluZyBOb24tSW5saW5lZCBGdW5jdGlvbnMqKlxuXG5SaWdodCwgc28gdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycy4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGV5J3JlIG5vdCBmdWxseSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gVGhpcyBpcyBrZXkgYmVjYXVzZSBpdCBtZWFucyB0aGV5J3JlIGNvbmNyZXRlLCBhZGRyZXNzYWJsZSBlbnRyeSBwb2ludHMgaW4gbWVtb3J5LCBhbmQgdGhlcmVmb3JlLCB0YXJnZXRhYmxlLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBzdGFydCB0byB0aGluayB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgaG93IHRoaXMgbWlnaHQgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIEJQRi4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvc3NpYmlsaXRpZXMgZm9yIHRyYWNpbmcgb3IgbW9kaWZpY2F0aW9uLlxuXG5BbmQgbm93IEkgaGF2ZSBgQlBGX1NZU0NBTExgIGluIGZyb250IG9mIG1lLCB3aGljaCBsaWtlbHkgZGVmaW5lcyB0aGUgY29uZmlndXJhdGlvbi4gVGltZSB0byBmaW5kIHdoZXJlIHRoaXMgaXMgZGVjbGFyZWQsIGBrZXJuZWwvYnBmL0tjb25maWdgIGFuZCBgaW5pdC9LY29uZmlnYCB3aWxsIGJlIG15IGZpcnN0IHNwb3RzLCBhcyBpdCBpcyBtb3N0IGxpa2VseSBhIGtlcm5lbCBjb25maWd1cmF0aW9uIHRoYXQgd2lsbCBnaXZlIG1lIGFkZGl0aW9uYWwgY29udGV4dCBvZiBpdHMgdXNlLCBhbmQgYWxsb3cgbWUgdG8gdW5kZXJzdGFuZCBob3cgaXQgaW1wYWN0cyBCUEYgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ0MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAzOjU0OjQ3LjgzNjAyODY1N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTI2NzIxNjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAzOjU0OjQ5Ljk2Mjc1NTA0M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTcxMDE3MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBvd24gZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkJQRiBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIG15IGltbWVkaWF0ZSBndXQgZmVlbGluZyBpcyB0aGF0IGBCUEZfU1lTQ0FMTGAgaXMgdGhlIGNvcm5lcnN0b25lIG9mIHRoaXMgY29uZmlndXJhdGlvbi4gSXQncyB0aGUgY2VudHJhbCBtZWNoYW5pc20sIHRoZSBtYWluIHN3aXRjaCBpZiB5b3Ugd2lsbCwgZm9yIGVuYWJsaW5nIEJQRiBpbnRlcmFjdGlvbiB3aXRoIHN5c3RlbSBjYWxscy4gQnV0LCB3aXRoIG15IGV4cGVyaWVuY2UsIEkga25vdyBpdCdzIG5ldmVyIHF1aXRlIHRoYXQgc2ltcGxlLlxuXG5UaGVyZWZvcmUsIEkgbmVlZCB0byBtZXRob2RpY2FsbHkgZG91YmxlLWNoZWNrLCBhbmQgcGVyaGFwcyBkaWcgYSBsaXR0bGUgZGVlcGVyLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgdGhlcmUgYXJlbid0IGFueSBvdGhlciBsYXRlbnQgZGVwZW5kZW5jaWVzIG9yIHN1YnRsZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgbHVya2luZyBiZW5lYXRoIHRoZSBzdXJmYWNlIHRoYXQgY291bGQgaW1wYWN0IGhvdyBgQlBGX1NZU0NBTExgIGZ1bmN0aW9ucywgb3IgZXZlbiB3aGV0aGVyIGl0IGZ1bmN0aW9ucyBhdCBhbGwuIEkgbmVlZCB0byBrbm93IGFsbCBvZiB0aGUgbW92aW5nIHBhcnRzIGJlZm9yZSBJIGNhbiBtb3ZlIGZvcndhcmQuIFBlcmhhcHMgc29tZSBvdGhlciwgc2VlbWluZ2x5IHVucmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGF2ZSBhIGRvd25zdHJlYW0gaW1wYWN0IGhlcmUuIEl0J3MgdGltZSB0byBwdWxsIG91dCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgc3RhcnQgbWFwcGluZyB0aGUgbGFuZHNjYXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODAzLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDM6NTQ6NTMuODU5ODU5NDg1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDkzNDU5MTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb24uKkJQRl9TWVNDQUxMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaGlkL2JwZi9LY29uZmlnPTQ9Y29uZmlnIEhJRF9CUEZcXG4tLVxcbmRyaXZlcnMvaGlkL2JwZi9LY29uZmlnLTYtXFx0ZGVwZW5kcyBvbiBCUEZfSklUXFxuZHJpdmVycy9oaWQvYnBmL0tjb25maWc6NzpcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuZHJpdmVycy9oaWQvYnBmL0tjb25maWctOC1cXHRkZXBlbmRzIG9uIERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXFxuLS1cXG5kcml2ZXJzL21lZGlhL3JjL0tjb25maWc9MTk9Y29uZmlnIEJQRl9MSVJDX01PREUyXFxuZHJpdmVycy9tZWRpYS9yYy9LY29uZmlnLTIwLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gbGlyYyBkZXZpY2VzXFxcIlxcbmRyaXZlcnMvbWVkaWEvcmMvS2NvbmZpZzoyMTpcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuZHJpdmVycy9tZWRpYS9yYy9LY29uZmlnLTIyLVxcdGRlcGVuZHMgb24gUkNfQ09SRT15XFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTQ2Mz1jb25maWcgTkVUS0lUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00NjQtXFx0Ym9vbCBcXFwiQlBGLXByb2dyYW1tYWJsZSBuZXR3b3JrIGRldmljZVxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ2NTpcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00NjYtXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTEzNTI9Y29uZmlnIENHUk9VUF9CUEZcXG5pbml0L0tjb25maWctMTM1My1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcXFwiXFxuaW5pdC9LY29uZmlnOjEzNTQ6XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbmluaXQvS2NvbmZpZy0xMzU1LVxcdHNlbGVjdCBTT0NLX0NHUk9VUF9EQVRBXFxuLS1cXG5pb191cmluZy9LY29uZmlnPTE4PWNvbmZpZyBJT19VUklOR19CUEZfT1BTXFxuLS1cXG5pb191cmluZy9LY29uZmlnLTIwLVxcdGRlcGVuZHMgb24gSU9fVVJJTkdcXG5pb191cmluZy9LY29uZmlnOjIxOlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXFx1MDAyNlxcdTAwMjYgQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBERUJVR19JTkZPX0JURlxcbi0tXFxua2VybmVsL0tjb25maWcucHJlZW1wdD0xNjk9Y29uZmlnIFNDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTcwLVxcdGJvb2wgXFxcIkV4dGVuc2libGUgU2NoZWR1bGluZyBDbGFzc1xcXCJcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjE3MTpcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgREVCVUdfSU5GT19CVEZcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTE3Mi1cXHRzZWxlY3QgU1RBQ0tUUkFDRSBpZiBTVEFDS1RSQUNFX1NVUFBPUlRcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZz01OD1jb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNTktXFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxua2VybmVsL2JwZi9LY29uZmlnOjYwOlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXFx1MDAyNlxcdTAwMjYgSEFWRV9FQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTYxLVxcdGhlbHBcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZz03Mz1jb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTc1LVxcdGRlZmF1bHQgeVxcbmtlcm5lbC9icGYvS2NvbmZpZzo3NjpcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTc3LVxcdGhlbHBcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZz05Mj1jb25maWcgQlBGX0xTTVxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTk0LVxcdGRlcGVuZHMgb24gQlBGX0VWRU5UU1xcbmtlcm5lbC9icGYvS2NvbmZpZzo5NTpcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTk2LVxcdGRlcGVuZHMgb24gU0VDVVJJVFlcXG4tLVxcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnPTI9bWVudWNvbmZpZyBCUEZfUFJFTE9BRFxcbi0tXFxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWctNC1cXHRkZXBlbmRzIG9uIEJQRlxcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnOjU6XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnLTYtXFx0IyBUaGUgZGVwZW5kZW5jeSBvbiAhQ09NUElMRV9URVNUIHByZXZlbnRzIGl0IGZyb20gYmVpbmcgZW5hYmxlZFxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9NzcwPWNvbmZpZyBQUk9CRV9FVkVOVFNfQlRGX0FSR1NcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTc3Mi1cXHRkZXBlbmRzIG9uIEZQUk9CRV9FVkVOVFMgfHwgS1BST0JFX0VWRU5UU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnOjc3MzpcXHRkZXBlbmRzIG9uIERFQlVHX0lORk9fQlRGIFxcdTAwMjZcXHUwMDI2IEJQRl9TWVNDQUxMXFxua2VybmVsL3RyYWNlL0tjb25maWctNzc0LVxcdGJvb2wgXFxcIlN1cHBvcnQgQlRGIGZ1bmN0aW9uIGFyZ3VtZW50cyBmb3IgcHJvYmUgZXZlbnRzXFxcIlxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9ODUzPWNvbmZpZyBCUEZfRVZFTlRTXFxua2VybmVsL3RyYWNlL0tjb25maWc6ODU0OlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NTUtXFx0ZGVwZW5kcyBvbiAoS1BST0JFX0VWRU5UUyB8fCBVUFJPQkVfRVZFTlRTKSBcXHUwMDI2XFx1MDAyNiBQRVJGX0VWRU5UU1xcbi0tXFxubGliL0tjb25maWcuZGVidWc9Mzk4PWNvbmZpZyBERUJVR19JTkZPX0JURlxcbi0tXFxubGliL0tjb25maWcuZGVidWctNDAxLVxcdGRlcGVuZHMgb24gIUdDQ19QTFVHSU5fUkFORFNUUlVDVCB8fCBDT01QSUxFX1RFU1RcXG5saWIvS2NvbmZpZy5kZWJ1Zzo0MDI6XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbmxpYi9LY29uZmlnLmRlYnVnLTQwMy1cXHRkZXBlbmRzIG9uIFBBSE9MRV9WRVJTSU9OIFxcdTAwM2U9IDEyMlxcbi0tXFxubmV0L0tjb25maWc9MzYxPWNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbi0tXFxubmV0L0tjb25maWctMzYzLVxcdGRlcGVuZHMgb24gSU5FVFxcbm5ldC9LY29uZmlnOjM2NDpcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxubmV0L0tjb25maWctMzY1LVxcdGRlcGVuZHMgb24gQ0dST1VQX0JQRlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWc9NDA2PWNvbmZpZyBORVRfU0NIX0JQRlxcbm5ldC9zY2hlZC9LY29uZmlnLTQwNy1cXHRib29sIFxcXCJCUEYtYmFzZWQgUWRpc2NcXFwiXFxubmV0L3NjaGVkL0tjb25maWc6NDA4OlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXFx1MDAyNlxcdTAwMjYgQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBERUJVR19JTkZPX0JURlxcbm5ldC9zY2hlZC9LY29uZmlnLTQwOS1cXHRoZWxwXFxuLS1cXG5uZXQvc21jL0tjb25maWc9MjM9Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbm5ldC9zbWMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XFxcIlxcbm5ldC9zbWMvS2NvbmZpZzoyNTpcXHRkZXBlbmRzIG9uIFNNQyBcXHUwMDI2XFx1MDAyNiBCUEZfSklUIFxcdTAwMjZcXHUwMDI2IEJQRl9TWVNDQUxMXFxubmV0L3NtYy9LY29uZmlnLTI2LVxcdGRlZmF1bHQgeVxcbi0tXFxubmV0L3hkcC9LY29uZmlnPTI9Y29uZmlnIFhEUF9TT0NLRVRTXFxubmV0L3hkcC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiWERQIHNvY2tldHNcXFwiXFxubmV0L3hkcC9LY29uZmlnOjQ6XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbm5ldC94ZHAvS2NvbmZpZy01LVxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMzo1NDo1Ni4zNTMzMjYxNzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyMzE3NzI3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN5c3RlbSBDYWxsIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYXJyYXltYXAuY2AgYW5kIGBzeXNjYWxsLmNgLiBJbW1lZGlhdGVseSwgbXkgYnJhaW4gZmxhZ3MgdGhhdCBgYXJyYXltYXAuY2AgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBrZXkgZGV0YWlsIHRvIGtlZXAgaW4gbWluZCwgYW5kIGl0IHN1Z2dlc3RzIHRoaXMgY2hhbmdlIGlzIHJlbGF0ZWQgdG8gdGhlIEJQRiBzeXN0ZW0gY2FsbCBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiwgc28gbGV0J3MganVtcCBvdmVyIHRvIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBhbmQgcXVpY2tseSBjb25maXJtIHRoZSBidWlsZCBkZXBlbmRlbmN5IGFuZCBnZXQgdGhlIGJyb2FkZXIgcGljdHVyZS4gTXkgaW5pdGlhbCBndWVzcyB3b3VsZCBiZSB0aGF0IG1vZGlmaWNhdGlvbnMgdG8gYGFycmF5bWFwLmNgIGFyZSBzb21laG93IGFmZmVjdGluZyB0aGUgd2F5IHN5c3RlbSBjYWxscyBhcmUgaGFuZGxlZCB3aGVuIEJQRiBpcyBpbnZvbHZlZDsgbGV0J3Mgc2VlIHdoYXQgdGhlIG1ha2VmaWxlIHJldmVhbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NDIsIk91dHB1dFRva2VucyI6MTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMzo1NDo1OS42NzY1MDYyNzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjM2ODI0MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJyYXltYXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9icGYvZ3JhcGhfZHNfaW1wbC5yc3Q9NzQ9d2hpY2ggYWxzbyBjb250YWlucyBhIGBgYnBmX3NwaW5fbG9ja2BgIC0gaW4gdGhlIGFib3ZlIGV4YW1wbGUgYm90aCBnbG9iYWxcXG5Eb2N1bWVudGF0aW9uL2JwZi9ncmFwaF9kc19pbXBsLnJzdDo3NTp2YXJpYWJsZXMgYXJlIHBsYWNlZCBpbiBhIHNpbmdsZS12YWx1ZSBhcnJheW1hcC4gVGhlIHZlcmlmaWVyIGNvbnNpZGVycyB0aGlzXFxuRG9jdW1lbnRhdGlvbi9icGYvZ3JhcGhfZHNfaW1wbC5yc3QtNzYtc3Bpbl9sb2NrIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgYGBicGZfcmJfcm9vdGBgIGJ5IHZpcnR1ZSBvZiBib3RoIGJlaW5nIGluXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGxvY2FsX3N0b3JhZ2UubyBxdWV1ZV9zdGFja19tYXBzLm8gcmluZ2J1Zi5vIGJwZl9pbnNuX2FycmF5Lm9cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMwMDc9c3RhdGljIGxvbmcgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdm9pZCAqdmFsdWUsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDIzLVxcdCAqIHRoZSB2YWx1ZSBtaWQtY29weS4gQ2FsbGVycyByZXF1aXJpbmcgY29uc2lzdGVudCByZWFkcyBtdXN0IHVzZVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMwMjQ6XFx0ICogQlBGX0ZfTE9DSywgbWF0Y2hpbmcgYXJyYXltYXAgc2VtYW50aWNzLlxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwMjUtXFx0ICpcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwMjctXFx0ICoga3B0cnMvZXRjLiBzdGlsbCBzaXQgaW4gdGhlIHNsb3QuIENhbmNlbCB0aGVtIGFmdGVyIHRoZSBjb3B5XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzAyODpcXHQgKiB0byBtYXRjaCBhcnJheW1hcCdzIHVwZGF0ZSBzZW1hbnRpY3MuXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAyOS1cXHQgKi9cXG4tLVxcbnNhbXBsZXMvYnBmL3NvY2tfZXhhbXBsZS5jLTEtLyogZUJQRiBleGFtcGxlIHByb2dyYW06XFxuc2FtcGxlcy9icGYvc29ja19leGFtcGxlLmM6MjogKiAtIGNyZWF0ZXMgYXJyYXltYXAgaW4ga2VybmVsIHdpdGgga2V5IDQgYnl0ZXMgYW5kIHZhbHVlIDggYnl0ZXNcXG5zYW1wbGVzL2JwZi9zb2NrX2V4YW1wbGUuYy0zLSAqXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jPTEwMTg9c3RhdGljIHZvaWQgdGVzdF9icGZfYXJyYXlfbWFwKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jLTEwMzMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYzoxMDM0OlxcdG1hcF9mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtXFx1MDAzZW1hcHMuYXJyYXltYXAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jOjEwMzU6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJwZl9tYXBfX21heF9lbnRyaWVzKHNrZWwtXFx1MDAzZW1hcHMuYXJyYXltYXAxKTsgaSsrKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYy0xMDM2LVxcdFxcdHZhbCA9IGkgKyA0O1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYy0xMDc5LVxcdGhhc2hfZmQgPSBicGZfbWFwX19mZChza2VsLVxcdTAwM2VtYXBzLmhhc2htYXAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jOjEwODA6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJwZl9tYXBfX21heF9lbnRyaWVzKHNrZWwtXFx1MDAzZW1hcHMuYXJyYXltYXAxKTsgaSsrKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYy0xMDgxLVxcdFxcdGVyciA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2ZkLCBcXHUwMDI2aSwgXFx1MDAyNnZhbCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYzoxMDgyOlxcdFxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcIm1hcF9sb29rdXAgYXJyYXltYXAxXFxcIikpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYy0xMDgzLVxcdFxcdFxcdGdvdG8gY2xvc2VfaXRlcjtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jOjEwODQ6XFx0XFx0aWYgKCFBU1NFUlRfRVEoaSwgdmFsLCBcXFwiaW52YWxpZF92YWwgYXJyYXltYXAxXFxcIikpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYy0xMDg1LVxcdFxcdFxcdGdvdG8gY2xvc2VfaXRlcjtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmM9MTEwMz1zdGF0aWMgdm9pZCB0ZXN0X2JwZl9hcnJheV9tYXBfaXRlcl9mZCh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYy0xMTExLVxcdGRvX3JlYWRfbWFwX2l0ZXJfZmQoXFx1MDAyNnNrZWwtXFx1MDAzZXNrZWxldG9uLCBza2VsLVxcdTAwM2Vwcm9ncy5kdW1wX2JwZl9hcnJheV9tYXAsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYzoxMTEyOlxcdFxcdFxcdCAgICBza2VsLVxcdTAwM2VtYXBzLmFycmF5bWFwMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYy0xMTEzLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYz0xMTE3PXN0YXRpYyB2b2lkIHRlc3RfYnBmX3BlcmNwdV9hcnJheV9tYXAodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmMtMTE0Mi1cXHQvKiB1cGRhdGUgbWFwIHZhbHVlcyBoZXJlICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYzoxMTQzOlxcdG1hcF9mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtXFx1MDAzZW1hcHMuYXJyYXltYXAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jOjExNDQ6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJwZl9tYXBfX21heF9lbnRyaWVzKHNrZWwtXFx1MDAzZW1hcHMuYXJyYXltYXAxKTsgaSsrKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYy0xMTQ1LVxcdFxcdGV4cGVjdGVkX2tleSArPSBpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmM9ODg9c3RhdGljIHN0cnVjdCBidGZfcmF3X3Rlc3QgcmF3X3Rlc3RzW10gPSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuYy0yMzMwLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuYzoyMzMxOlxcdC5kZXNjciA9IFxcXCJhcnJheW1hcCBpbnZhbGlkIGJ0ZiBrZXkgKGEgYml0IGZpZWxkKVxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmMtMjMzMi1cXHQucmF3X3R5cGVzID0ge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmMtMjM1MS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmM6MjM1MjpcXHQuZGVzY3IgPSBcXFwiYXJyYXltYXAgaW52YWxpZCBidGYga2V5ICghPSAzMiBiaXRzKVxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmMtMjM1My1cXHQucmF3X3R5cGVzID0ge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmMtMjM3Mi17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmM6MjM3MzpcXHQuZGVzY3IgPSBcXFwiYXJyYXltYXAgaW52YWxpZCBidGYgdmFsdWUgKHRvbyBzbWFsbClcXFwiLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jLTIzNzQtXFx0LnJhd190eXBlcyA9IHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jLTIzOTIte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jOjIzOTM6XFx0LmRlc2NyID0gXFxcImFycmF5bWFwIGludmFsaWQgYnRmIHZhbHVlICh0b28gYmlnKVxcXCIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmMtMjM5NC1cXHQucmF3X3R5cGVzID0ge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYz03OT1zdGF0aWMgdm9pZCB0ZXN0X2FycmF5X21hcCh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYy05Ny1cXHRleHBlY3RlZF90b3RhbCA9IDA7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYzo5ODpcXHRtYXhfZW50cmllcyA9IGJwZl9tYXBfX21heF9lbnRyaWVzKHNrZWwtXFx1MDAzZW1hcHMuYXJyYXltYXApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Zvcl9lYWNoLmMtOTktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1heF9lbnRyaWVzOyBpKyspIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Zvcl9lYWNoLmMtMTA0LVxcdFxcdFxcdGV4cGVjdGVkX3RvdGFsICs9IHZhbDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jOjEwNTpcXHRcXHRlcnIgPSBicGZfbWFwX191cGRhdGVfZWxlbShza2VsLVxcdTAwM2VtYXBzLmFycmF5bWFwLCBcXHUwMDI2a2V5LCBzaXplb2Yoa2V5KSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jLTEwNi1cXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2dmFsLCBzaXplb2YodmFsKSwgQlBGX0FOWSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jLTEzMC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jOjEzMTpcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VhcnJheW1hcF9vdXRwdXQsIGV4cGVjdGVkX3RvdGFsLCBcXFwiYXJyYXlfb3V0cHV0XFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYy0xMzItXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlY3B1ICsgMSwgc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VwZXJjcHVfdmFsLCBcXFwicGVyY3B1X3ZhbFxcXCIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYz0xNDg9c3RhdGljIHZvaWQgdGVzdF9tdWx0aV9tYXBzKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jLTE2NS1cXHRhcnJheV90b3RhbCA9IDA7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYzoxNjY6XFx0bWF4X2VudHJpZXMgPSBicGZfbWFwX19tYXhfZW50cmllcyhza2VsLVxcdTAwM2VtYXBzLmFycmF5bWFwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mb3JfZWFjaC5jLTE2Ny1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbWF4X2VudHJpZXM7IGkrKykge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZm9yX2VhY2guYy0xNzAtXFx0XFx0YXJyYXlfdG90YWwgKz0gdmFsO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Zvcl9lYWNoLmM6MTcxOlxcdFxcdGVyciA9IGJwZl9tYXBfX3VwZGF0ZV9lbGVtKHNrZWwtXFx1MDAzZW1hcHMuYXJyYXltYXAsIFxcdTAwMjZrZXksIHNpemVvZihrZXkpLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Zvcl9lYWNoLmMtMTcyLVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZ2YWwsIHNpemVvZih2YWwpLCBCUEZfQU5ZKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfYXJyYXlfbWFwLmM9OT1zdHJ1Y3Qge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9hcnJheV9tYXAuYy0xMy1cXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX2FycmF5X21hcC5jOjE0On0gYXJyYXltYXAxIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX2FycmF5X21hcC5jLTE1LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9wZXJjcHVfYXJyYXlfbWFwLmM9OT1zdHJ1Y3Qge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9wZXJjcHVfYXJyYXlfbWFwLmMtMTMtXFx0X190eXBlKHZhbHVlLCBfX3UzMik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9wZXJjcHVfYXJyYXlfbWFwLmM6MTQ6fSBhcnJheW1hcDEgU0VDKFxcXCIubWFwc1xcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfcGVyY3B1X2FycmF5X21hcC5jLTE1LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmM9OD1zdHJ1Y3Qge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmMtMTItXFx0X190eXBlKHZhbHVlLCBfX3U2NCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmM6MTM6fSBhcnJheW1hcCBTRUMoXFxcIi5tYXBzXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmMtMTQtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYz01MD1jaGVja19wZXJjcHVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBfX3UzMiAqa2V5LCBfX3U2NCAqdmFsLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmMtNTctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmM6NTg6dTMyIGFycmF5bWFwX291dHB1dCA9IDA7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmMtNTktXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYz02MT1pbnQgdGVzdF9wa3RfYWNjZXNzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jLTY1LVxcdGRhdGEub3V0cHV0ID0gMDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfYXJyYXlfbWFwX2VsZW0uYzo2NjpcXHRicGZfZm9yX2VhY2hfbWFwX2VsZW0oXFx1MDAyNmFycmF5bWFwLCBjaGVja19hcnJheV9lbGVtLCBcXHUwMDI2ZGF0YSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmMtNjctXFx0aWYgKCFieXBhc3NfdW51c2VkKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9hcnJheV9tYXBfZWxlbS5jOjY4OlxcdFxcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcXHUwMDI2YXJyYXltYXAsIHVudXNlZF9zdWJwcm9nLCBcXHUwMDI2ZGF0YSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmM6Njk6XFx0YXJyYXltYXBfb3V0cHV0ID0gZGF0YS5vdXRwdXQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX2FycmF5X21hcF9lbGVtLmMtNzAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfbXVsdGlfbWFwcy5jPTc9c3RydWN0IHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9tdWx0aV9tYXBzLmMtMTEtXFx0X190eXBlKHZhbHVlLCBfX3U2NCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX211bHRpX21hcHMuYzoxMjp9IGFycmF5bWFwIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfbXVsdGlfbWFwcy5jLTEzLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX211bHRpX21hcHMuYz0zNz1pbnQgdGVzdF9wa3RfYWNjZXNzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mb3JfZWFjaF9tdWx0aV9tYXBzLmMtNDItXFx0aWYgKHVzZV9hcnJheSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZm9yX2VhY2hfbXVsdGlfbWFwcy5jOjQzOlxcdFxcdGJwZl9mb3JfZWFjaF9tYXBfZWxlbShcXHUwMDI2YXJyYXltYXAsIGNoZWNrX21hcF9lbGVtLCBcXHUwMDI2ZGF0YSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Zvcl9lYWNoX211bHRpX21hcHMuYy00NC1cXHRlbHNlXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM9MzM1PXN0YXRpYyB2b2lkIHRlc3RfaGFzaG1hcF96ZXJvX3NlZWQodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy0zNjctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjM2ODpzdGF0aWMgdm9pZCB0ZXN0X2FycmF5bWFwKHVuc2lnbmVkIGludCB0YXNrLCB2b2lkICpkYXRhKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy0zNjkte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTM3NC1cXHRpZiAoZmQgXFx1MDAzYyAwKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjM3NTpcXHRcXHRwcmludGYoXFxcIkZhaWxlZCB0byBjcmVhdGUgYXJyYXltYXAgJyVzJyFcXFxcblxcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTM3Ni1cXHRcXHRleGl0KDEpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTQyMS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM6NDIyOnN0YXRpYyB2b2lkIHRlc3RfYXJyYXltYXBfcGVyY3B1KHVuc2lnbmVkIGludCB0YXNrLCB2b2lkICpkYXRhKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy00MjMte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTQzMC1cXHRpZiAoZmQgXFx1MDAzYyAwKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjQzMTpcXHRcXHRwcmludGYoXFxcIkZhaWxlZCB0byBjcmVhdGUgYXJyYXltYXAgJyVzJyFcXFxcblxcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTQzMi1cXHRcXHRleGl0KDEpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTQ4MC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM6NDgxOnN0YXRpYyB2b2lkIHRlc3RfYXJyYXltYXBfcGVyY3B1X21hbnlfa2V5cyh2b2lkKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X21hcHMuYy00ODIte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTQ5My1cXHRpZiAoZmQgXFx1MDAzYyAwKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjQ5NDpcXHRcXHRwcmludGYoXFxcIkZhaWxlZCB0byBjcmVhdGUgcGVyLWNwdSBhcnJheW1hcCAnJXMnIVxcXFxuXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtNDk1LVxcdFxcdCAgICAgICBzdHJlcnJvcihlcnJubykpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jPTEzODk9c3RhdGljIHZvaWQgdGVzdF9tYXBfc3RyZXNzKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtMTM5NS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM6MTM5NjpcXHRydW5fcGFyYWxsZWwoMTAwLCB0ZXN0X2FycmF5bWFwLCBOVUxMKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM6MTM5NzpcXHRydW5fcGFyYWxsZWwoMTAwLCB0ZXN0X2FycmF5bWFwX3BlcmNwdSwgTlVMTCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTEzOTgtfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jPTE4ODY9c3RhdGljIHZvaWQgcnVuX2FsbF90ZXN0cyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jLTE4OTItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbWFwcy5jOjE4OTM6XFx0dGVzdF9hcnJheW1hcCgwLCBOVUxMKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM6MTg5NDpcXHR0ZXN0X2FycmF5bWFwX3BlcmNwdSgwLCBOVUxMKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtMTg5NS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmM6MTg5NjpcXHR0ZXN0X2FycmF5bWFwX3BlcmNwdV9tYW55X2tleXMoKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9tYXBzLmMtMTg5Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDM6NTU6MDEuOTAwMTkyODk0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNzYwNDU3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIFN1YnN5c3RlbSBQYXRjaCAtIEluaXRpYWwgQXNzZXNzbWVudCBcdTAwMjYgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBkaWdnaW5nIGludG8gZnVuY3Rpb25hbCBjb2RlIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gSSBzZWUgaXQncyB0b3VjaGluZyB0aGVzZSBrZXkgZnVuY3Rpb25zOiBgYXJyYXlfbWFwX21tYXBfZmF1bHRgLCBgYXJyYXlfbWFwX21tYXBfcGFnZXNgLCBgYnBmX21hcF9tbWFwX2ZhdWx0YCwgYW5kIGBicGZfbWFwX21tYXBfcGFnZXNgLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aG9zZSBhcmUgKnNjcmVhbWluZyogZm9yIGZ1enppbmcuIFRoZXkncmUgaGFuZGxpbmcgbWVtb3J5IG1hcHBpbmcsIGFuZCB0aGF0IGFsd2F5cyBwcmVzZW50cyBpbnRlcmVzdGluZyBhdHRhY2sgc3VyZmFjZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBmb2N1cyBteSBlZmZvcnRzIHRoZXJlLlxuXG5CZWZvcmUgSSBnZXQgdG9vIGZhciBkb3duIHRoZSBmdXp6aW5nIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIHN0ZXAgYmFjayBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gTGV0IG1lIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNoYW5nZS4gTG9va3MgbGlrZSBgQlBGX1NZU0NBTExgIGlzIHRoZSBwcmltYXJ5IG9uZSwgc28gSSdsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gY29uZmlndXJpbmcgbXkgZnV6emluZyBlbnZpcm9ubWVudC5cblxuQWxyaWdodCwgd2l0aCB0aGF0IGZvdW5kYXRpb24sIGl0J3MgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRoaW5raW5nIEkgc2hvdWxkIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHRvIG1hbmFnZSBhbmQgdHJhY2sgbXkgZmluZGluZ3MuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgd2F5IHRvIGFwcHJvYWNoIHRoZSBmdXp6aW5nIGdpdmVuIHRoZSBwYXRjaCdzIHNjb3BlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYzOSwiT3V0cHV0VG9rZW5zIjoxNjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDM6NTU6MDcuMDc2MjQxNTE3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3NDE2NzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFycmF5X21hcF9tbWFwX2ZhdWx0XCIsXG4gICAgXCJhcnJheV9tYXBfbW1hcF9wYWdlc1wiLFxuICAgIFwiYnBmX21hcF9tbWFwX2ZhdWx0XCIsXG4gICAgXCJicGZfbWFwX21tYXBfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGFycmF5IG1hcCBtZW1vcnkgbWFwcGluZyBsb2dpYyB0byB1c2UgbGF6eSBmYXVsdGluZyBpbnN0ZWFkIG9mIGVhZ2VyIG1hcHBpbmcuIEl0IGludHJvZHVjZXMgbmV3IGZhdWx0IGhhbmRsZXJzIGBhcnJheV9tYXBfbW1hcF9mYXVsdGAgYW5kIGBhcnJheV9tYXBfbW1hcF9wYWdlc2AgaW4gYGFycmF5bWFwLmNgLCBhbmQgY29ycmVzcG9uZGluZyBzeXNjYWxsIGhhbmRsZXJzIGluIGBzeXNjYWxsLmNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcnJheV9tYXBfbW1hcF9mYXVsdFwiLFxuICAgIFwiYXJyYXlfbWFwX21tYXBfcGFnZXNcIixcbiAgICBcImJwZl9tYXBfbW1hcF9mYXVsdFwiLFxuICAgIFwiYnBmX21hcF9tbWFwX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBhcnJheSBtYXAgbWVtb3J5IG1hcHBpbmcgbG9naWMgdG8gdXNlIGxhenkgZmF1bHRpbmcgaW5zdGVhZCBvZiBlYWdlciBtYXBwaW5nLiBJdCBpbnRyb2R1Y2VzIG5ldyBmYXVsdCBoYW5kbGVycyBgYXJyYXlfbWFwX21tYXBfZmF1bHRgIGFuZCBgYXJyYXlfbWFwX21tYXBfcGFnZXNgIGluIGBhcnJheW1hcC5jYCwgYW5kIGNvcnJlc3BvbmRpbmcgc3lzY2FsbCBoYW5kbGVycyBpbiBgc3lzY2FsbC5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4cpjl[1] Phase: Succeeded StartedAt: 2026-07-30 03:55:19 +0000 UTC FinishedAt: 2026-07-30 03:55:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cpjl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-30 03:55:19 +0000 UTC FinishedAt: 2026-07-30 03:55:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cpjl[2] Phase: Succeeded StartedAt: 2026-07-30 03:55:19 +0000 UTC FinishedAt: 2026-07-30 07:51:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-30 03:55:19 +0000 UTC FinishedAt: 2026-07-30 07:51:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-30 03:55:19 +0000 UTC FinishedAt: 2026-07-30 03:55:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-30 03:55:19 +0000 UTC FinishedAt: 2026-07-30 03:55:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4cpjl/series-workflow4cpjl-convert-artifact-2943862538/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-30 03:55:29 +0000 UTC FinishedAt: 2026-07-30 04:14:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-30 03:55:29 +0000 UTC FinishedAt: 2026-07-30 04:14:58 +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:*502066ef-2ed9-4c67-bd82-40d658d8eaa4,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-workflow4cpjl/series-workflow4cpjl-convert-artifact-2943862538/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": "d1226e14-d227-47cf-822d-7efebbb083a1", "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-workflow4cpjl/series-workflow4cpjl-build-action-3645403640/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-30 03:55:29 +0000 UTC FinishedAt: 2026-07-30 04:14:48 +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:*502066ef-2ed9-4c67-bd82-40d658d8eaa4,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-workflow4cpjl/series-workflow4cpjl-convert-artifact-2943862538/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": "d1226e14-d227-47cf-822d-7efebbb083a1", "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-workflow4cpjl/series-workflow4cpjl-build-action-3645403640/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-30 04:14:58 +0000 UTC FinishedAt: 2026-07-30 04:14:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-30 04:14:58 +0000 UTC FinishedAt: 2026-07-30 04:14:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-30 04:14:58 +0000 UTC FinishedAt: 2026-07-30 04:15:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-30 04:14:58 +0000 UTC FinishedAt: 2026-07-30 04:15:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4cpjl/series-workflow4cpjl-convert-artifact-1217373093/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-30 04:15:08 +0000 UTC FinishedAt: 2026-07-30 04:16:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-30 04:15:08 +0000 UTC FinishedAt: 2026-07-30 04:16:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d1226e14-d227-47cf-822d-7efebbb083a1,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-workflow4cpjl/series-workflow4cpjl-build-action-3645403640/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-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-30 04:16:40 +0000 UTC FinishedAt: 2026-07-30 04:16:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-30 04:16:40 +0000 UTC FinishedAt: 2026-07-30 04:16:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-30 04:16:40 +0000 UTC FinishedAt: 2026-07-30 04:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-30 04:16:40 +0000 UTC FinishedAt: 2026-07-30 04:45:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*502066ef-2ed9-4c67-bd82-40d658d8eaa4,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-workflow4cpjl/series-workflow4cpjl-convert-artifact-1217373093/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": "0fbf632c-f22c-43f4-b78a-02287f671c2f", "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-workflow4cpjl/series-workflow4cpjl-build-action-3754482673/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-30 04:16:40 +0000 UTC FinishedAt: 2026-07-30 04:45:38 +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:*502066ef-2ed9-4c67-bd82-40d658d8eaa4,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-workflow4cpjl/series-workflow4cpjl-convert-artifact-1217373093/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": "0fbf632c-f22c-43f4-b78a-02287f671c2f", "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-workflow4cpjl/series-workflow4cpjl-build-action-3754482673/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-30 04:45:48 +0000 UTC FinishedAt: 2026-07-30 04:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-30 04:45:48 +0000 UTC FinishedAt: 2026-07-30 04:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-30 04:45:48 +0000 UTC FinishedAt: 2026-07-30 04:48:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-30 04:45:48 +0000 UTC FinishedAt: 2026-07-30 04:47:56 +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:*0fbf632c-f22c-43f4-b78a-02287f671c2f,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-workflow4cpjl/series-workflow4cpjl-build-action-3754482673/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-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-30 04:48:06 +0000 UTC FinishedAt: 2026-07-30 07:51:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-30 04:48:06 +0000 UTC FinishedAt: 2026-07-30 07:51:01 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"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:*d1226e14-d227-47cf-822d-7efebbb083a1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0fbf632c-f22c-43f4-b78a-02287f671c2f,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-workflow4cpjl/series-workflow4cpjl-build-action-3645403640/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-workflow4cpjl/series-workflow4cpjl-build-action-3754482673/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-30 04:48:06 +0000 UTC FinishedAt: 2026-07-30 04:48:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-30 04:48:06 +0000 UTC FinishedAt: 2026-07-30 04:48:13 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"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-workflow4cpjl/series-workflow4cpjl-convert-artifact-2988230954/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-30 04:48:06 +0000 UTC FinishedAt: 2026-07-30 04:48:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-30 04:48:06 +0000 UTC FinishedAt: 2026-07-30 04:48:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-30 04:48:07 +0000 UTC FinishedAt: 2026-07-30 04:48:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-30 04:48:17 +0000 UTC FinishedAt: 2026-07-30 07:51:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cpjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["array_map_mmap_fault","array_map_mmap_pages","bpf_map_mmap_fault","bpf_map_mmap_pages"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2446c254-c727-4596-9016-0db36df2ac73","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-30 04:48:17 +0000 UTC FinishedAt: 2026-07-30 07:50:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d1226e14-d227-47cf-822d-7efebbb083a1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0fbf632c-f22c-43f4-b78a-02287f671c2f,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-workflow4cpjl/series-workflow4cpjl-build-action-3645403640/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-workflow4cpjl/series-workflow4cpjl-build-action-3754482673/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-workflow4cpjl/series-workflow4cpjl-convert-artifact-2988230954/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,}