Name: series-workflowtp68z Phase: Succeeded StartedAt: 2026-07-20 19:55:56 +0000 UTC FinishedAt: 2026-07-21 00:29:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtp68z[0] Phase: Succeeded StartedAt: 2026-07-20 19:55:56 +0000 UTC FinishedAt: 2026-07-20 20:24:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtp68z[0].run-triage Phase: Succeeded StartedAt: 2026-07-20 19:55:56 +0000 UTC FinishedAt: 2026-07-20 20:24:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "d9e6a7623938968e3752b67e37eaff097e559a54", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING", "MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT", "MEMCG", "KFENCE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "d9e6a7623938968e3752b67e37eaff097e559a54", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING", "MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT", "MEMCG", "KFENCE" ], "series_id": "0fd7084c-401f-4f77-b4a6-156a8024ba85" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_slab_obj_exts", "__memcg_slab_post_alloc_hook", "__memcg_slab_free_hook", "__kfence_free", "__kmem_cache_create_args" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAgICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFQmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7S0ZFTkNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2Nfc2xhYl9vYmpfZXh0cyYjMzQ7LAogICAgJiMzNDtfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rJiMzNDssCiAgICAmIzM0O19fbWVtY2dfc2xhYl9mcmVlX2hvb2smIzM0OywKICAgICYjMzQ7X19rZmVuY2VfZnJlZSYjMzQ7LAogICAgJiMzNDtfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBsYXlvdXQgYW5kIGhhbmRsaW5nIG9mIGBzdHJ1Y3Qgc2xhYm9ial9leHRgIGluIHRoZSBzbGFiIGFsbG9jYXRvciwgd2hpY2ggaXMgdXNlZCBmb3IgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGFuZCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcuIEl0IG9wdGltaXplcyB0aGUgc3RvcmFnZSBvZiBgb2JqY2dgIGFuZCBgY29kZXRhZ19yZWZgIHBvaW50ZXJzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIHNsYWIgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBwYXRocywgbWFraW5nIHRoZW0gaGlnaGx5IHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDRhMTNiZmNhMjQyN2RlZWE0MWI2MGVhYWJiOGY4ZWM5ZTY2ODg1M2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAyMDoyMDoyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0XG5pbmRleCA1Mzg5ZDI0MTE3NmE4YS4uZDAyZWI1NGVlOGYyYzYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RcbkBAIC0xMTIsMyAmIzQzOzExMiwxMCBAQCBUbyBkbyBzbzpcbiBcbiAtIFRoZW4sIHVzZSB0aGUgZm9sbG93aW5nIGZvcm0gZm9yIHlvdXIgYWxsb2NhdGlvbnM6XG4gICBhbGxvY19ob29rc190YWcoaHQtXHUwMDNleW91cl9zYXZlZF90YWcsIGttYWxsb2Nfbm9wcm9mKC4uLikpXG4mIzQzO1xuJiM0MztOb3Rlc1xuJiM0Mzs9PT09PVxuJiM0MztcbiYjNDM7LSBXaGVuIGEgc2xhYiBvYmplY3QgaXMgYWxsb2NhdGVkIGZyb20gS0ZFTkNFLCBpdHMgYWNjb3VudGluZyBpcyBza2lwcGVkLlxuJiM0MzsgIEtGRU5DRSBhbGxvY2F0aW9ucyBhcmUgcmFyZSBhbmQgbGltaXRlZCB0byBhIHNtYWxsIG51bWJlciwgc28gdGhpcyBvbWlzc2lvblxuJiM0MzsgIGlzIG5lZ2xpZ2libGUuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggZTFmNDZhMDAxNmZjZmQuLjkzODY5Y2MzNWMyNWJjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMTQ0MCwxOSAmIzQzOzE0NDAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9mbHVzaF93b3JrcXVldWUodm9pZCkgeyB9XG4gc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovXG4gXG4tLypcbi0gKiBFeHRlbmRlZCBpbmZvcm1hdGlvbiBmb3Igc2xhYiBvYmplY3RzIHN0b3JlZCBhcyBhbiBhcnJheSBpbiBwYWdlLVx1MDAzZW1lbWNnX2RhdGFcbi0gKiBpZiBNRU1DR19EQVRBX09CSkVYVFMgaXMgc2V0LlxuLSAqL1xuLXN0cnVjdCBzbGFib2JqX2V4dCB7XG4tI2lmZGVmIENPTkZJR19NRU1DR1xuLVx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuLSNlbmRpZlxuLSNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xuLVx0dW5pb24gY29kZXRhZ19yZWYgcmVmO1xuLSNlbmRpZlxuLX0gX19hbGlnbmVkKDgpO1xuLVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2xhYi5oIGIvaW5jbHVkZS9saW51eC9zbGFiLmhcbmluZGV4IDNhMTRkZjUwNzY2YWIwLi5mOTEzMjkwMmM1YTZkZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2xhYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NsYWIuaFxuQEAgLTQ1LDYgJiM0Mzs0NSw3IEBAIGVudW0gX3NsYWJfZmxhZ19iaXRzIHtcbiAjZW5kaWZcbiAjaWZkZWYgQ09ORklHX01FTUNHXG4gXHRfU0xBQl9BQ0NPVU5ULFxuJiM0MztcdF9TTEFCX01BWV9BQ0NPVU5ULFxuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQ1xuIFx0X1NMQUJfS0FTQU4sXG5AQCAtMjA0LDggJiM0MzsyMDUsMTAgQEAgZW51bSBfc2xhYl9mbGFnX2JpdHMge1xuICAqL1xuICNpZmRlZiBDT05GSUdfTUVNQ0dcbiAjIGRlZmluZSBTTEFCX0FDQ09VTlRcdFx0X19TTEFCX0ZMQUdfQklUKF9TTEFCX0FDQ09VTlQpXG4mIzQzOyMgZGVmaW5lIFNMQUJfTUFZX0FDQ09VTlRcdF9fU0xBQl9GTEFHX0JJVChfU0xBQl9NQVlfQUNDT1VOVClcbiAjZWxzZVxuICMgZGVmaW5lIFNMQUJfQUNDT1VOVFx0XHRfX1NMQUJfRkxBR19VTlVTRURcbiYjNDM7IyBkZWZpbmUgU0xBQl9NQVlfQUNDT1VOVFx0X19TTEFCX0ZMQUdfVU5VU0VEXG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19LQVNBTl9HRU5FUklDXG5kaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2NvcmUuYyBiL21tL2tmZW5jZS9jb3JlLmNcbmluZGV4IDY1NzdiZDc2OTU0ZWI0Li44OTdlY2YyNTk0ZmI2NCAxMDA2NDRcbi0tLSBhL21tL2tmZW5jZS9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2tmZW5jZS9jb3JlLmNcbkBAIC02NDAsNiAmIzQzOzY0MCw5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGtmZW5jZV9pbml0X3Bvb2wodm9pZClcbiBcdFx0c3RydWN0IHNsYWIgKnNsYWIgPSBwYWdlX3NsYWIocGFnZSk7XG4gXHRcdHNsYWItXHUwMDNlb2JqX2V4dHMgPSAodW5zaWduZWQgbG9uZylcdTAwMjZrZmVuY2VfbWV0YWRhdGFfaW5pdFtpIC8gMiAtIDFdLm9ial9leHRzIHxcbiBcdFx0XHRcdCBNRU1DR19EQVRBX09CSkVYVFM7XG4mIzQzOyNpZmRlZiBDT05GSUdfNjRCSVRcbiYjNDM7XHRcdHNsYWItXHUwMDNlb2JqX2V4dHNfbmVlZHNfb2JqY2cgPSAxO1xuJiM0MzsjZW5kaWZcbiAjZW5kaWZcbiBcdH1cbiBcbkBAIC0xMjQ5LDcgJiM0MzsxMjUyLDcgQEAgdm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXG4gXHRzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhICptZXRhID0gYWRkcl90b19tZXRhZGF0YSgodW5zaWduZWQgbG9uZylhZGRyKTtcbiBcbiAjaWZkZWYgQ09ORklHX01FTUNHXG4tXHRLRkVOQ0VfV0FSTl9PTihtZXRhLVx1MDAzZW9ial9leHRzLm9iamNnKTtcbiYjNDM7XHRLRkVOQ0VfV0FSTl9PTihzbGFiX29ial9leHRfb2JqY2coXHUwMDI2bWV0YS1cdTAwM2VvYmpfZXh0cykpO1xuICNlbmRpZlxuIFx0LypcbiBcdCAqIElmIHRoZSBvYmplY3RzIG9mIHRoZSBjYWNoZSBhcmUgU0xBQl9UWVBFU0FGRV9CWV9SQ1UsIGRlZmVyIGZyZWVpbmdcbmRpZmYgLS1naXQgYS9tbS9rZmVuY2Uva2ZlbmNlX3Rlc3QuYyBiL21tL2tmZW5jZS9rZmVuY2VfdGVzdC5jXG5pbmRleCBkZTJkMGY3ZDYyYjE1ZS4uOTg2N2MwM2VmMGFlM2QgMTAwNjQ0XG4tLS0gYS9tbS9rZmVuY2Uva2ZlbmNlX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0va2ZlbmNlL2tmZW5jZV90ZXN0LmNcbkBAIC0yOTUsNyAmIzQzOzI5NSw3IEBAIHN0YXRpYyB2b2lkICp0ZXN0X2FsbG9jKHN0cnVjdCBrdW5pdCAqdGVzdCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcCwgZW51bSBhbGxvY2F0XG4gXHRcdFx0ICogbWVtY2cgYWNjb3VudGluZyB3b3JrcyBjb3JyZWN0bHkuXG4gXHRcdFx0ICovXG4gXHRcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIG9ial90b19pbmRleChzLCBzbGFiLCBhbGxvYyksIDBVKTtcbi1cdFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgb2Jqc19wZXJfc2xhYihzLCBzbGFiKSwgMSk7XG4mIzQzO1x0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAoKHVuc2lnbmVkIGludClzbGFiLVx1MDAzZW9iamVjdHMpLCAxKTtcbiBcbiBcdFx0XHRpZiAocG9saWN5ID09IEFMTE9DQVRFX0FOWSlcbiBcdFx0XHRcdHJldHVybiBhbGxvYztcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDZkYzQ4ODhhOTBmM2ZkLi5hYWNlODVmYjk5Zjk3MyAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMjg2NSwxOCAmIzQzOzI4NjUsMTkgQEAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqcClcbiBcdCAqL1xuIFx0dW5zaWduZWQgbG9uZyBvYmpfZXh0cztcbiBcdHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dDtcbi1cdHVuc2lnbmVkIGludCBvZmY7XG4mIzQzO1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFxuIFx0b2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpO1xuIFx0aWYgKCFvYmpfZXh0cylcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4tXHRvZmYgPSBvYmpfdG9faW5kZXgoc2xhYi1cdTAwM2VzbGFiX2NhY2hlLCBzbGFiLCBwKTtcbi1cdG9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9mZik7XG4tXHRpZiAob2JqX2V4dC1cdTAwM2VvYmpjZykge1xuLVx0XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cgPSBvYmpfZXh0LVx1MDAzZW9iamNnO1xuJiM0MztcdGlmICghc2xhYl9uZWVkc19vYmpjZyhzbGFiKSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuIFxuJiM0MztcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbiYjNDM7XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWItXHUwMDNlc2xhYl9jYWNoZSwgc2xhYiwgb2JqX2V4dHMsIHApO1xuJiM0MztcdG9iamNnID0gc2xhYl9vYmpfZXh0X29iamNnKG9ial9leHQpO1xuJiM0MztcdGlmIChvYmpjZykge1xuIFx0XHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4gXHRcdHJldHVybiBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcbiBcdH1cbkBAIC0zNTQxLDcgJiM0MzszNTQyLDYgQEAgYm9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbiBcdHNpemVfdCBvYmpfc2l6ZSA9IG9ial9mdWxsX3NpemUocyk7XG4gXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4gXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcbi1cdHVuc2lnbmVkIGxvbmcgb2ZmO1xuIFx0c2l6ZV90IGk7XG4gXG4gXHQvKlxuQEAgLTM1ODMsNiAmIzQzOzM1ODMsOSBAQCBib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxuIFxuIFx0XHRzbGFiID0gdmlydF90b19zbGFiKHBbaV0pO1xuIFxuJiM0MztcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX1ZNKSBcdTAwMjZcdTAwMjYgV0FSTl9PTl9PTkNFKCFzbGFiX25lZWRzX29iamNnKHNsYWIpKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuIFx0XHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBzbGFiX2FsbG9jX2ZsYWdzKSkge1xuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTM2MTYsMTAgJiM0MzszNjE5LDExIEBAIGJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG4gXG4gXHRcdG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcbiBcdFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuLVx0XHRvZmYgPSBvYmpfdG9faW5kZXgocywgc2xhYiwgcFtpXSk7XG4tXHRcdG9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9mZik7XG4mIzQzO1x0XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwW2ldKTtcbiYjNDM7XG4gXHRcdG9ial9jZ3JvdXBfZ2V0KG9iamNnKTtcbi1cdFx0b2JqX2V4dC1cdTAwM2VvYmpjZyA9IG9iamNnO1xuJiM0MztcdFx0c2xhYl9vYmpfZXh0X3NldF9vYmpjZyhvYmpfZXh0LCBvYmpjZyk7XG4mIzQzO1xuIFx0XHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4gXHR9XG4gXG5AQCAtMzYzNSwxNSAmIzQzOzM2MzksMTMgQEAgdm9pZCBfX21lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbiBcdFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQ7XG4gXHRcdHN0cnVjdCBvYmpfc3RvY2tfcGNwICpzdG9jaztcbi1cdFx0dW5zaWduZWQgaW50IG9mZjtcbiBcbi1cdFx0b2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHBbaV0pO1xuLVx0XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpO1xuLVx0XHRvYmpjZyA9IG9ial9leHQtXHUwMDNlb2JqY2c7XG4mIzQzO1x0XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwW2ldKTtcbiYjNDM7XHRcdG9iamNnID0gc2xhYl9vYmpfZXh0X29iamNnKG9ial9leHQpO1xuIFx0XHRpZiAoIW9iamNnKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRvYmpfZXh0LVx1MDAzZW9iamNnID0gTlVMTDtcbiYjNDM7XHRcdHNsYWJfb2JqX2V4dF9zZXRfb2JqY2cob2JqX2V4dCwgTlVMTCk7XG4gXG4gXHRcdHN0b2NrID0gdHJ5bG9ja19zdG9jaygpO1xuIFx0XHRfX3JlZmlsbF9vYmpfc3RvY2sob2JqY2csIHN0b2NrLCBvYmpfc2l6ZSwgdHJ1ZSk7XG5kaWZmIC0tZ2l0IGEvbW0vc2xhYi5oIGIvbW0vc2xhYi5oXG5pbmRleCBmNWUzMzZiNmI2YjA0Yy4uMThjMmE4MDdmMDIzY2UgMTAwNjQ0XG4tLS0gYS9tbS9zbGFiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsYWIuaFxuQEAgLTgxLDEwICYjNDM7ODEsMTEgQEAgc3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIHtcbiAjaWZkZWYgQ09ORklHXzY0QklUXG4gXHRcdFx0XHRcdC8qXG4gXHRcdFx0XHRcdCAqIFNvbWUgb3B0aW1pemF0aW9ucyB1c2UgZnJlZSBiaXRzIGluICYjMzk7Y291bnRlcnMmIzM5OyBmaWVsZFxuLVx0XHRcdFx0XHQgKiB0byBzYXZlIG1lbW9yeS4gSW4gY2FzZSAtXHUwMDNlc3RyaWRlIGZpZWxkIGlzIG5vdCBhdmFpbGFibGUsXG4tXHRcdFx0XHRcdCAqIHN1Y2ggb3B0aW1pemF0aW9ucyBhcmUgZGlzYWJsZWQuXG4mIzQzO1x0XHRcdFx0XHQgKiB0byBzYXZlIG1lbW9yeSBvciBDUFUuIElmIHRoZXNlIGZyZWUgYml0cyBhcmUgbm90XG4mIzQzO1x0XHRcdFx0XHQgKiBhdmFpbGFibGUsIHN1Y2ggb3B0aW1pemF0aW9ucyBhcmUgZGlzYWJsZWQuXG4gXHRcdFx0XHRcdCAqL1xuLVx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgc3RyaWRlO1xuJiM0MztcdFx0XHRcdFx0dW5zaWduZWQgb2JqX2V4dHNfaW5fb2JqZWN0OjE7XG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBvYmpfZXh0c19uZWVkc19vYmpjZzoxO1xuICNlbmRpZlxuIFx0XHRcdFx0fTtcbiBcdFx0XHR9O1xuQEAgLTMzMCwxMiAmIzQzOzMzMSw2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial90b19pbmRleChjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsXG4gXHRyZXR1cm4gX19vYmpfdG9faW5kZXgoY2FjaGUsIHNsYWJfYWRkcmVzcyhzbGFiKSwgb2JqKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgb2Jqc19wZXJfc2xhYihjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsXG4tXHRcdFx0XHRjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi17XG4tXHRyZXR1cm4gc2xhYi1cdTAwM2VvYmplY3RzO1xuLX1cbi1cbiAvKlxuICAqIFN0YXRlIG9mIHRoZSBzbGFiIGFsbG9jYXRvci5cbiAgKlxuQEAgLTU1NSw2ICYjNDM7NTUwLDkzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX2ttYWxsb2Nfbm9fb2JqZXh0KHZvaWQpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBFeHRlbmRlZCBpbmZvcm1hdGlvbiBmb3Igc2xhYiBvYmplY3RzIHN0b3JlZCBhcyBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgaW5cbiYjNDM7ICogc2xhYi1cdTAwM2VvYmpfZXh0cyAoYWxpYXNpbmcgcGFnZS1cdTAwM2VtZW1jZ19kYXRhKSBpZiBNRU1DR19EQVRBX09CSkVYVFMgaXMgc2V0LlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHNsYWJvYmpfZXh0IHtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFsbCBlbGVtZW50cyBvZiB0aGUgdW5pb24gc2hvdWxkIGJlIHBvaW50ZXItc2l6ZWQgdG8gYXZvaWQgbWVtb3J5XG4mIzQzO1x0ICogd2FzdGVcbiYjNDM7XHQgKi9cbiYjNDM7XHR1bmlvbiB7XG4mIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0dcbiYjNDM7XHRcdHN0cnVjdCBvYmpfY2dyb3VwICpfb2JqY2c7XG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcbiYjNDM7XHRcdHVuaW9uIGNvZGV0YWdfcmVmIF9jdHJlZjtcbiYjNDM7I2VuZGlmXG4mIzQzO1x0fTtcbiYjNDM7fSBfX2FsaWduZWQoOCk7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcbiYjNDM7REVDTEFSRV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcbiYjNDM7XHRcdFx0IHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHN0YXRpY19icmFuY2hfbWF5YmUoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxULFxuJiM0MztcdFx0XHRcdCAgIFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xuJiM0Mzt9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWcodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0dcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGNhY2hlX25lZWRzX29iamNnKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAoY2FjaGUtXHUwMDNlZmxhZ3MgXHUwMDI2IFNMQUJfTUFZX0FDQ09VTlQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2xhYl9uZWVkc19vYmpjZyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHXzY0QklUXG4mIzQzO1x0cmV0dXJuIHNsYWItXHUwMDNlb2JqX2V4dHNfbmVlZHNfb2JqY2c7XG4mIzQzOyNlbHNlXG4mIzQzO1x0cmV0dXJuIGNhY2hlX25lZWRzX29iamNnKHNsYWItXHUwMDNlc2xhYl9jYWNoZSk7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBjYWNoZV9uZWVkc19vYmpjZyhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzbGFiX25lZWRzX29iamNnKHN0cnVjdCBzbGFiICpzbGFiKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBzaXplX3QgY2FjaGVfb2JqX2V4dF9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IHN6ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKGNhY2hlX25lZWRzX29iamNnKHMpKVxuJiM0MztcdFx0c3ogJiM0Mzs9IDE7XG4mIzQzO1xuJiM0MztcdGlmIChzbGFiX29ial9leHRfaGFzX2NvZGV0YWcoKSlcbiYjNDM7XHRcdHN6ICYjNDM7PSAxO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkgKiBzejtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9vYmpfZXh0X3NpemUoc3RydWN0IHNsYWIgKnNsYWIpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3Qgc3ogPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoc2xhYl9uZWVkc19vYmpjZyhzbGFiKSlcbiYjNDM7XHRcdHN6ICYjNDM7PSAxO1xuJiM0MztcbiYjNDM7XHRpZiAoc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKCkpXG4mIzQzO1x0XHRzeiAmIzQzOz0gMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc3o7XG4mIzQzO31cbiYjNDM7XG4gI2lmZGVmIENPTkZJR19TTEFCX09CSl9FWFRcbiBcbiAvKlxuQEAgLTU3Miw3ICYjNDM7NjU0LDcgQEAgc3RhdGljIGlubGluZSBib29sIG5lZWRfa21hbGxvY19ub19vYmpleHQodm9pZClcbiAgKiBvYmpfZXh0cyA9IHNsYWJfb2JqX2V4dHMoc2xhYik7XG4gICogaWYgKG9ial9leHRzKSB7XG4gICogICAgICAgICBnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4tICogICAgICAgICBvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvYmpfdG9faW5kZXgocywgc2xhYiwgb2JqKSk7XG4mIzQzOyAqICAgICAgICAgb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgb2JqKTtcbiAgKiAgICAgICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIG9ial9leHRcbiAgKiAgICAgICAgIHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbiAgKiB9XG5AQCAtNjEwLDQ4ICYjNDM7NjkyLDgyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfc2xhYl9vYmpfZXh0cyh1bnNpZ25lZCBsb25nIG9ial9leHRzKVxuIH1cbiBcbiAjaWZkZWYgQ09ORklHXzY0QklUXG4tc3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgaW50IHN0cmlkZSlcbi17XG4tXHRzbGFiLVx1MDAzZXN0cmlkZSA9IHN0cmlkZTtcbi19XG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2xhYl9nZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKVxuIHtcbi1cdHJldHVybiBzbGFiLVx1MDAzZXN0cmlkZTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5vdGUgd2UgY2Fubm90IHJlbHkgb24gdGhlIFNMQUJfT0JKX0VYVF9JTl9PQkogZmxhZyBoZXJlIGFuZCBuZWVkIHRvXG4mIzQzO1x0ICogY2hlY2sgdGhlIHBlci1zbGFiIGJpdC4gQSBjYWNoZSBjYW4gaGF2ZSBTTEFCX09CSl9FWFRfSU5fT0JKIHNldCwgYnV0XG4mIzQzO1x0ICogYWxsb2NhdGlvbnMgd2l0aGluX3NsYWJfbGVmdG92ZXIgYXJlIHByZWZlcnJlZC4gQW5kIHRob3NlIG1heSBiZVxuJiM0MztcdCAqIHBvc3NpYmxlIG9yIG5vdCBkZXBlbmRpbmcgb24gdGhlIHBhcnRpY3VsYXIgc2xhYiYjMzk7cyBzaXplLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiBzbGFiLVx1MDAzZW9ial9leHRzX2luX29iamVjdDtcbiB9XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBpbnQgc3RyaWRlKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKVxuIHtcbi1cdFZNX1dBUk5fT05fT05DRShzdHJpZGUgIT0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkpO1xuLX1cbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbGFiX2dldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIpXG4te1xuLVx0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiB9XG4gI2VuZGlmXG4gXG4gLypcbiAgKiBzbGFiX29ial9leHQgLSBnZXQgdGhlIHBvaW50ZXIgdG8gdGhlIHNsYWIgb2JqZWN0IGV4dGVuc2lvbiBtZXRhZGF0YVxuICAqIGFzc29jaWF0ZWQgd2l0aCBhbiBvYmplY3QgaW4gYSBzbGFiLlxuJiM0MzsgKiBAczogY2FjaGUgdGhhdCB0aGUgc2xhYiBibG9uZ3MgdG9cbiAgKiBAc2xhYjogYSBwb2ludGVyIHRvIHRoZSBzbGFiIHN0cnVjdFxuICAqIEBvYmpfZXh0czogYSBwb2ludGVyIHRvIHRoZSBvYmplY3QgZXh0ZW5zaW9uIHZlY3RvclxuLSAqIEBpbmRleDogYW4gaW5kZXggb2YgdGhlIG9iamVjdFxuJiM0MzsgKiBAb2JqOiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdFxuICAqXG4gICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCBleHRlbnNpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBvYmplY3QuXG4gICogTXVzdCBiZSBjYWxsZWQgd2l0aGluIGEgc2VjdGlvbiBjb3ZlcmVkIGJ5IGdldC9wdXRfc2xhYl9vYmpfZXh0cygpLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpzbGFiX29ial9leHQoc3RydWN0IHNsYWIgKnNsYWIsXG4tXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9ial9leHRzLFxuLVx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGluZGV4KVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqXG4mIzQzO3NsYWJfb2JqX2V4dChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4mIzQzO1x0ICAgICBjb25zdCB2b2lkICpvYmopXG4ge1xuIFx0c3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0O1xuJiM0MztcdHVuc2lnbmVkIGludCBpbmRleDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc3RyaWRlO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKG9ial9leHRzICE9IHNsYWJfb2JqX2V4dHMoc2xhYikpO1xuIFxuLVx0b2JqX2V4dCA9IChzdHJ1Y3Qgc2xhYm9ial9leHQgKikob2JqX2V4dHMgJiM0Mztcbi1cdFx0XHRcdFx0IHNsYWJfZ2V0X3N0cmlkZShzbGFiKSAqIGluZGV4KTtcbiYjNDM7XHRpbmRleCA9IG9ial90b19pbmRleChzLCBzbGFiLCBvYmopO1xuJiM0MztcbiYjNDM7XHRpZiAoIW9ial9leHRzX2luX29iamVjdChzbGFiKSlcbiYjNDM7XHRcdHN0cmlkZSA9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHN0cmlkZSA9IHMtXHUwMDNlc2l6ZTtcbiYjNDM7XG4mIzQzO1x0b2JqX2V4dCA9IChzdHJ1Y3Qgc2xhYm9ial9leHQgKikob2JqX2V4dHMgJiM0MzsgaW5kZXggKiBzdHJpZGUpO1xuJiM0MztcbiBcdHJldHVybiBrYXNhbl9yZXNldF90YWcob2JqX2V4dCk7XG4gfVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKnNsYWJfb2JqX2V4dF9vYmpjZyhzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQpXG4mIzQzO3tcbiYjNDM7XHQvKiBpZiBvYmpjZyBleGlzdHMsIGl0IGNvbWVzIGZpcnN0LCBzbyB3ZSBkb24mIzM5O3QgbmVlZCB0byBkbyBhbnl0aGluZyAqL1xuJiM0MztcdHJldHVybiBvYmpfZXh0LVx1MDAzZV9vYmpjZztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNsYWJfb2JqX2V4dF9zZXRfb2JqY2coc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0LFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4mIzQzO3tcbiYjNDM7XHQvKiBpZiBvYmpjZyBleGlzdHMsIGl0IGNvbWVzIGZpcnN0LCBzbyB3ZSBkb24mIzM5O3QgbmVlZCB0byBkbyBhbnl0aGluZyAqL1xuJiM0MztcdG9ial9leHQtXHUwMDNlX29iamNnID0gb2JqY2c7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcbiYjNDM7c3RhdGljIGlubGluZSB1bmlvbiBjb2RldGFnX3JlZiAqXG4mIzQzO3NsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNsYWJfbmVlZHNfb2JqY2coc2xhYikpXG4mIzQzO1x0XHRvYmpfZXh0ICYjNDM7PSAxO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gXHUwMDI2b2JqX2V4dC1cdTAwM2VfY3RyZWY7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdFx0XHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyk7XG4gXG5AQCAtNjYyLDE2ICYjNDM7Nzc4LDE3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpzbGFiX29ial9leHQoc3RydWN0IHNsYWIgKnNsYWIsXG4tXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9ial9leHRzLFxuLVx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGluZGV4KVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqXG4mIzQzO3NsYWJfb2JqX2V4dChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4mIzQzO1x0ICAgICBjb25zdCB2b2lkICpvYmopXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGludCBzdHJpZGUpIHsgfVxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNsYWJfZ2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYikgeyByZXR1cm4gMDsgfVxuLVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4gXG4gI2VuZGlmIC8qIENPTkZJR19TTEFCX09CSl9FWFQgKi9cbiBcbmRpZmYgLS1naXQgYS9tbS9zbGFiX2NvbW1vbi5jIGIvbW0vc2xhYl9jb21tb24uY1xuaW5kZXggMDNlY2FjMTJjZDg2NWYuLjRlOTgzZTI1MDMzODdhIDEwMDY0NFxuLS0tIGEvbW0vc2xhYl9jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2xhYl9jb21tb24uY1xuQEAgLTUyLDcgJiM0Mzs1Miw3IEBAIHN0cnVjdCBrbWVtX2NhY2hlICprbWVtX2NhY2hlO1xuIFx0XHRTTEFCX09CSl9FWFRfSU5fT0JKKVxuIFxuICNkZWZpbmUgU0xBQl9NRVJHRV9TQU1FIChTTEFCX1JFQ0xBSU1fQUNDT1VOVCB8IFNMQUJfQ0FDSEVfRE1BIHwgXFxcbi1cdFx0XHQgU0xBQl9DQUNIRV9ETUEzMiB8IFNMQUJfQUNDT1VOVClcbiYjNDM7XHRcdFx0IFNMQUJfQ0FDSEVfRE1BMzIgfCBTTEFCX0FDQ09VTlQgfCBTTEFCX01BWV9BQ0NPVU5UKVxuIFxuIC8qXG4gICogTWVyZ2UgY29udHJvbC4gSWYgdGhpcyBpcyBzZXQgdGhlbiBubyBtZXJnaW5nIG9mIHNsYWIgY2FjaGVzIHdpbGwgb2NjdXIuXG5AQCAtMzU5LDYgJiM0MzszNTksMTMgQEAgc3RydWN0IGttZW1fY2FjaGUgKl9fa21lbV9jYWNoZV9jcmVhdGVfYXJncyhjb25zdCBjaGFyICpuYW1lLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGb3Igbm93IHdlIGFzc3VtZSBhbnkgY2FjaGUgY2FuIGJlIHVzZWQgd2l0aCBfX0dGUF9BQ0NPVU5UIGFuZCB0aHVzXG4mIzQzO1x0ICogbWF5IG5lZWQgdG8gc3RvcmUgb2JqY2cgcG9pbnRlcnMgZm9yIG9iamVjdHNcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxuJiM0MztcdFx0ZmxhZ3MgfD0gU0xBQl9NQVlfQUNDT1VOVDtcbiYjNDM7XG4gXHQvKiBGYWlsIGNsb3NlZCBvbiBiYWQgdXNlcnNpemUgb2YgdXNlcm9mZnNldCB2YWx1ZXMuICovXG4gXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZKSB8fFxuIFx0ICAgIFdBUk5fT04oIWFyZ3MtXHUwMDNldXNlcnNpemUgXHUwMDI2XHUwMDI2IGFyZ3MtXHUwMDNldXNlcm9mZnNldCkgfHxcbkBAIC05ODQsMTEgJiM0Mzs5OTEsMTkgQEAgbmV3X2ttYWxsb2NfY2FjaGUoaW50IGlkeCwgZW51bSBrbWFsbG9jX2NhY2hlX3R5cGUgdHlwZSlcbiAjZW5kaWZcbiBcbiBcdC8qXG4tXHQgKiBJZiBDT05GSUdfTUVNQ0cgaXMgZW5hYmxlZCwgZGlzYWJsZSBjYWNoZSBtZXJnaW5nIGZvclxuLVx0ICogS01BTExPQ19OT1JNQUwgY2FjaGVzLlxuJiM0MztcdCAqIElmIG1lbWNnX2ttZW0gaXMgZW5hYmxlZCBhbmQgdGhpcyBpcyBhIEtNQUxMT0NfTk9STUFMIGNhY2hlIGFuZCAgbm90XG4mIzQzO1x0ICogYWxpYXNlZCB3aXRoIGFueSBvdGhlciB0eXBlLCBtYWtlIHN1cmUgaXQmIzM5O3MgbmV2ZXIgbWVyZ2VkIHdpdGggYW55IG90aGVyXG4mIzQzO1x0ICogY2FjaGUuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJbiBvdGhlciBjYXNlcyB0aGUga21hbGxvYyBjYWNoZSBtYXkgZW5kIHVwIGJlaW5nIHVzZWQgZm9yIGFcbiYjNDM7XHQgKiBfX0dGUF9BQ0NPVU5UIGFsbG9jYXRpb24gc28gbWFyayBpdCBhcyBzdWNoXG4gXHQgKi9cbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2ICh0eXBlID09IEtNQUxMT0NfTk9STUFMKSlcbi1cdFx0ZmxhZ3MgfD0gU0xBQl9OT19NRVJHRTtcbiYjNDM7XHRpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKSB7XG4mIzQzO1x0XHRpZiAodHlwZSA9PSBLTUFMTE9DX05PUk1BTCBcdTAwMjZcdTAwMjYgS01BTExPQ19SRUNMQUlNICE9IEtNQUxMT0NfTk9STUFMKVxuJiM0MztcdFx0XHRmbGFncyB8PSBTTEFCX05PX01FUkdFO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRmbGFncyB8PSBTTEFCX01BWV9BQ0NPVU5UO1xuJiM0MztcdH1cbiBcbiBcdGlmIChtaW5hbGlnbiBcdTAwM2UgQVJDSF9LTUFMTE9DX01JTkFMSUdOKSB7XG4gXHRcdGFsaWduZWRfc2l6ZSA9IEFMSUdOKGFsaWduZWRfc2l6ZSwgbWluYWxpZ24pO1xuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xuaW5kZXggMDMzN2U2MGRiNWFjZTAuLmU2MTQ4YjczYjkyZjg4IDEwMDY0NFxuLS0tIGEvbW0vc2x1Yi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmNcbkBAIC0yMTMsNiAmIzQzOzIxMywxMSBAQCBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShzbHViX2RlYnVnX2VuYWJsZWQpO1xuIHN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShzdHJpY3RfbnVtYSk7XG4gI2VuZGlmXG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xuJiM0MztERUZJTkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFQsXG4mIzQzO1x0XHRcdHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gLyogU3RydWN0dXJlIGhvbGRpbmcgZXh0cmEgcGFyYW1ldGVycyBmb3Igc2xhYiBhbGxvY2F0aW9ucyAqL1xuIHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQge1xuIFx0dW5zaWduZWQgbG9uZyBjYWxsZXJfYWRkcjtcbkBAIC04MDMsNyAmIzQzOzgwOCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX3NsYWJfb2JqX2V4dHMoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4gXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2JqX2V4dHNfc2l6ZV9pbl9zbGFiKHN0cnVjdCBzbGFiICpzbGFiKVxuIHtcbi1cdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHNsYWItXHUwMDNlb2JqZWN0cztcbiYjNDM7XHRyZXR1cm4gc2xhYl9vYmpfZXh0X3NpemUoc2xhYikgKiBzbGFiLVx1MDAzZW9iamVjdHM7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBvYmpfZXh0c19vZmZzZXRfaW5fc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbkBAIC04NzAsMTggJiM0Mzs4NzUsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4gI2VuZGlmXG4gXG4gI2lmIGRlZmluZWQoQ09ORklHX1NMQUJfT0JKX0VYVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHXzY0QklUKVxuLXN0YXRpYyBib29sIG9ial9leHRzX2luX29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4te1xuLVx0Lypcbi1cdCAqIE5vdGUgd2UgY2Fubm90IHJlbHkgb24gdGhlIFNMQUJfT0JKX0VYVF9JTl9PQkogZmxhZyBoZXJlIGFuZCBuZWVkIHRvXG4tXHQgKiBjaGVjayB0aGUgc3RyaWRlLiBBIGNhY2hlIGNhbiBoYXZlIFNMQUJfT0JKX0VYVF9JTl9PQkogc2V0LCBidXRcbi1cdCAqIGFsbG9jYXRpb25zIHdpdGhpbl9zbGFiX2xlZnRvdmVyIGFyZSBwcmVmZXJyZWQuIEFuZCB0aG9zZSBtYXkgYmVcbi1cdCAqIHBvc3NpYmxlIG9yIG5vdCBkZXBlbmRpbmcgb24gdGhlIHBhcnRpY3VsYXIgc2xhYiYjMzk7cyBzaXplLlxuLVx0ICovXG4tXHRyZXR1cm4gb2JqX2V4dHNfaW5fc2xhYihzLCBzbGFiKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAgICAoc2xhYl9nZXRfc3RyaWRlKHNsYWIpID09IHMtXHUwMDNlc2l6ZSk7XG4tfVxuLVxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgb2JqX2V4dHNfb2Zmc2V0X2luX29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiB7XG4gXHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gZ2V0X2luZm9fZW5kKHMpO1xuQEAgLTg5NiwxNiAmIzQzOzg4OSwyMCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4gXG4gXHRyZXR1cm4gb2Zmc2V0O1xuIH1cbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X29ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYilcbiB7XG4tXHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0c2xhYi1cdTAwM2VvYmpfZXh0c19pbl9vYmplY3QgPSAxO1xuIH1cbi1cbiYjNDM7I2Vsc2VcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfZXh0c19vZmZzZXRfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4mIzQzO3tcbiYjNDM7fVxuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xuQEAgLTEyMDYsOCAmIzQzOzEyMDMsOCBAQCBzdGF0aWMgdm9pZCBwcmludF90cmFpbGVyKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdTggKnApXG4gXG4gXHRvZmYgJiM0Mzs9IGthc2FuX21ldGFkYXRhX3NpemUocywgZmFsc2UpO1xuIFxuLVx0aWYgKG9ial9leHRzX2luX29iamVjdChzLCBzbGFiKSlcbi1cdFx0b2ZmICYjNDM7PSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KTtcbiYjNDM7XHRpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKVxuJiM0MztcdFx0b2ZmICYjNDM7PSBzbGFiX29ial9leHRfc2l6ZShzbGFiKTtcbiBcbiBcdGlmIChvZmYgIT0gc2l6ZV9mcm9tX29iamVjdChzKSlcbiBcdFx0LyogQmVnaW5uaW5nIG9mIHRoZSBmaWxsZXIgaXMgdGhlIGZyZWUgcG9pbnRlciAqL1xuQEAgLTE0MTEsOCAmIzQzOzE0MDgsOCBAQCBzdGF0aWMgaW50IGNoZWNrX3BhZF9ieXRlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHU4ICpwKVxuIFxuIFx0b2ZmICYjNDM7PSBrYXNhbl9tZXRhZGF0YV9zaXplKHMsIGZhbHNlKTtcbiBcbi1cdGlmIChvYmpfZXh0c19pbl9vYmplY3Qocywgc2xhYikpXG4tXHRcdG9mZiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCk7XG4mIzQzO1x0aWYgKG9ial9leHRzX2luX29iamVjdChzbGFiKSlcbiYjNDM7XHRcdG9mZiAmIzQzOz0gc2xhYl9vYmpfZXh0X3NpemUoc2xhYik7XG4gXG4gXHRpZiAoc2l6ZV9mcm9tX29iamVjdChzKSA9PSBvZmYpXG4gXHRcdHJldHVybiAxO1xuQEAgLTE0MzksNyAmIzQzOzE0MzYsNyBAQCBzbGFiX3BhZF9jaGVjayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4gXHRsZW5ndGggPSBzbGFiX3NpemUoc2xhYik7XG4gXHRlbmQgPSBzdGFydCAmIzQzOyBsZW5ndGg7XG4gXG4tXHRpZiAob2JqX2V4dHNfaW5fc2xhYihzLCBzbGFiKSBcdTAwMjZcdTAwMjYgIW9ial9leHRzX2luX29iamVjdChzLCBzbGFiKSkge1xuJiM0MztcdGlmIChvYmpfZXh0c19pbl9zbGFiKHMsIHNsYWIpIFx1MDAyNlx1MDAyNiAhb2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKSB7XG4gXHRcdHJlbWFpbmRlciA9IGxlbmd0aDtcbiBcdFx0cmVtYWluZGVyIC09IG9ial9leHRzX29mZnNldF9pbl9zbGFiKHMsIHNsYWIpO1xuIFx0XHRyZW1haW5kZXIgLT0gb2JqX2V4dHNfc2l6ZV9pbl9zbGFiKHNsYWIpO1xuQEAgLTIwNzAsMjAgJiM0MzsyMDY3LDI2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX29ial9jb2RldGFnX2VtcHR5KGNvbnN0IHZvaWQgKm9iailcbiBcdG9ial9zbGFiID0gdmlydF90b19zbGFiKG9iaik7XG4gXHRzbGFiX2V4dHMgPSBzbGFiX29ial9leHRzKG9ial9zbGFiKTtcbiBcdGlmIChzbGFiX2V4dHMpIHtcbiYjNDM7XHRcdHN0cnVjdCBzbGFib2JqX2V4dCAqZXh0O1xuJiM0MztcdFx0dW5pb24gY29kZXRhZ19yZWYgKnJlZjtcbiYjNDM7XG4gXHRcdGdldF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XG4tXHRcdHVuc2lnbmVkIGludCBvZmZzID0gb2JqX3RvX2luZGV4KG9ial9zbGFiLVx1MDAzZXNsYWJfY2FjaGUsXG4tXHRcdFx0XHRcdFx0IG9ial9zbGFiLCBvYmopO1xuLVx0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKmV4dCA9IHNsYWJfb2JqX2V4dChvYmpfc2xhYixcbi1cdFx0XHRcdFx0XHQgICAgICAgc2xhYl9leHRzLCBvZmZzKTtcbiYjNDM7XHRcdGV4dCA9IHNsYWJfb2JqX2V4dChvYmpfc2xhYi1cdTAwM2VzbGFiX2NhY2hlLCBvYmpfc2xhYiwgc2xhYl9leHRzLCBvYmopO1xuJiM0MztcdFx0cmVmID0gc2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKG9ial9zbGFiLCBleHQpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpc19rZmVuY2VfYWRkcmVzcyhvYmopKSB7XG4mIzQzO1x0XHRcdHB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiBcbi1cdFx0aWYgKHVubGlrZWx5KGlzX2NvZGV0YWdfZW1wdHkoXHUwMDI2ZXh0LVx1MDAzZXJlZikpKSB7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoaXNfY29kZXRhZ19lbXB0eShyZWYpKSkge1xuIFx0XHRcdHB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXG4gXHRcdC8qIGNvZGV0YWcgc2hvdWxkIGJlIE5VTEwgaGVyZSAqL1xuLVx0XHRXQVJOX09OKGV4dC1cdTAwM2VyZWYuY3QpO1xuLVx0XHRzZXRfY29kZXRhZ19lbXB0eShcdTAwMjZleHQtXHUwMDNlcmVmKTtcbiYjNDM7XHRcdFdBUk5fT04ocmVmLVx1MDAzZWN0KTtcbiYjNDM7XHRcdHNldF9jb2RldGFnX2VtcHR5KHJlZik7XG4gXHRcdHB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XG4gXHR9XG4gfVxuQEAgLTIwOTMsMTkgJiM0MzsyMDk2LDI5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXJrX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiKVxuIFx0cmV0dXJuIGNtcHhjaGcoXHUwMDI2c2xhYi1cdTAwM2VvYmpfZXh0cywgMCwgT0JKRVhUU19BTExPQ19GQUlMKSA9PSAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4tXHRcdFx0c3RydWN0IHNsYWJvYmpfZXh0ICp2ZWMsIHVuc2lnbmVkIGludCBvYmplY3RzKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBvYmpfZXh0cywgc3RydWN0IHNsYWJvYmpfZXh0ICp2ZWMpXG4ge1xuJiM0MztcdHVuc2lnbmVkIGludCBzdHJpZGU7XG4mIzQzO1xuJiM0MztcdGlmICghbWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0LypcbiBcdCAqIElmIHZlY3RvciBwcmV2aW91c2x5IGZhaWxlZCB0byBhbGxvY2F0ZSB0aGVuIHdlIGhhdmUgbGl2ZVxuIFx0ICogb2JqZWN0cyB3aXRoIG5vIHRhZyByZWZlcmVuY2UuIE1hcmsgYWxsIHJlZmVyZW5jZXMgaW4gdGhpc1xuIFx0ICogdmVjdG9yIGFzIGVtcHR5IHRvIGF2b2lkIHdhcm5pbmdzIGxhdGVyIG9uLlxuIFx0ICovXG4tXHRpZiAob2JqX2V4dHMgPT0gT0JKRVhUU19BTExPQ19GQUlMKSB7XG4tXHRcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcdGlmIChvYmpfZXh0cyAhPSBPQkpFWFRTX0FMTE9DX0ZBSUwpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHN0cmlkZSA9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpIC8gc2l6ZW9mKCp2ZWMpO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2Mgc2xhYi1cdTAwM2VvYmplY3RzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dW5pb24gY29kZXRhZ19yZWYgKnJlZiA9IHNsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihzbGFiLCB2ZWMpO1xuIFxuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBvYmplY3RzOyBpJiM0MzsmIzQzOylcbi1cdFx0XHRzZXRfY29kZXRhZ19lbXB0eShcdTAwMjZ2ZWNbaV0ucmVmKTtcbiYjNDM7XHRcdHNldF9jb2RldGFnX2VtcHR5KHJlZik7XG4mIzQzO1x0XHR2ZWMgJiM0Mzs9IHN0cmlkZTtcbiBcdH1cbiB9XG4gXG5AQCAtMjExMyw4ICYjNDM7MjEyNiw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWFya19vYmpfY29kZXRhZ19lbXB0eShjb25zdCB2b2lkICpvYmopIHt9XG4gc3RhdGljIGlubGluZSBib29sIG1hcmtfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIpIHsgcmV0dXJuIGZhbHNlOyB9XG4tc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyh1bnNpZ25lZCBsb25nIG9ial9leHRzLFxuLVx0XHRcdHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjLCB1bnNpZ25lZCBpbnQgb2JqZWN0cykge31cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYixcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsIHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjKSB7fVxuIFxuICNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xuIFxuQEAgLTIxMjcsMTIgJiM0MzsyMTQwLDExIEBAIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdFx0XHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbiB7XG4gXHRjb25zdCBib29sIGFsbG93X3NwaW4gPSBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhbGxvY19mbGFncyk7XG4tXHR1bnNpZ25lZCBpbnQgb2JqZWN0cyA9IG9ianNfcGVyX3NsYWIocywgc2xhYik7XG4gXHRib29sIG5ld19zbGFiID0gYWxsb2NfZmxhZ3MgXHUwMDI2IFNMQUJfQUxMT0NfTkVXX1NMQUI7XG4gXHR1bnNpZ25lZCBsb25nIG5ld19leHRzO1xuIFx0dW5zaWduZWQgbG9uZyBvbGRfZXh0cztcbiBcdHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjO1xuLVx0c2l6ZV90IHN6ID0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkgKiBzbGFiLVx1MDAzZW9iamVjdHM7XG4mIzQzO1x0c2l6ZV90IHN6ID0gc2xhYl9vYmpfZXh0X3NpemUoc2xhYikgKiBzbGFiLVx1MDAzZW9iamVjdHM7XG4gXG4gXHRnZnAgXHUwMDI2PSB+T0JKQ0dTX0NMRUFSX01BU0s7XG4gXHQvKlxuQEAgLTIxODMsNyAmIzQzOzIxOTUsNyBAQCBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gI2VuZGlmXG4gcmV0cnk6XG4gXHRvbGRfZXh0cyA9IFJFQURfT05DRShzbGFiLVx1MDAzZW9ial9leHRzKTtcbi1cdGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhvbGRfZXh0cywgdmVjLCBvYmplY3RzKTtcbiYjNDM7XHRoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Moc2xhYiwgb2xkX2V4dHMsIHZlYyk7XG4gXG4gXHRpZiAobmV3X3NsYWIpIHtcbiBcdFx0LypcbkBAIC0yMjUwLDkgJiM0MzsyMjYyLDYgQEAgc3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4gXHR2b2lkICphZGRyO1xuIFx0dW5zaWduZWQgbG9uZyBvYmpfZXh0cztcbiBcbi1cdC8qIEluaXRpYWxpemUgc3RyaWRlIGVhcmx5IHRvIGF2b2lkIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMgKi9cbi1cdHNsYWJfc2V0X3N0cmlkZShzbGFiLCBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSk7XG4tXG4gXHRpZiAoIW5lZWRfc2xhYl9vYmpfZXh0cyhzKSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTIyNzgsMTUgJiM0MzsyMjg3LDE0IEBAIHN0YXRpYyB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxuIFxuIFx0XHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4gXHRcdGZvcl9lYWNoX29iamVjdChhZGRyLCBzLCBzbGFiX2FkZHJlc3Moc2xhYiksIHNsYWItXHUwMDNlb2JqZWN0cylcbi1cdFx0XHRtZW1zZXQoa2FzYW5fcmVzZXRfdGFnKGFkZHIpICYjNDM7IG9mZnNldCwgMCxcbi1cdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkpO1xuJiM0MztcdFx0XHRtZW1zZXQoa2FzYW5fcmVzZXRfdGFnKGFkZHIpICYjNDM7IG9mZnNldCwgMCwgc2xhYl9vYmpfZXh0X3NpemUoc2xhYikpO1xuIFx0XHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4gXG4gI2lmZGVmIENPTkZJR19NRU1DR1xuIFx0XHRvYmpfZXh0cyB8PSBNRU1DR19EQVRBX09CSkVYVFM7XG4gI2VuZGlmXG4gXHRcdHNsYWItXHUwMDNlb2JqX2V4dHMgPSBvYmpfZXh0cztcbi1cdFx0c2xhYl9zZXRfc3RyaWRlKHNsYWIsIHMtXHUwMDNlc2l6ZSk7XG4mIzQzO1x0XHRzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc2xhYik7XG4gXHR9XG4gfVxuIFxuQEAgLTIzNTIsNiAmIzQzOzIzNjAsOSBAQCBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIGdmcF90IGZsYWdzLFxuIFx0aWYgKGFsbG9jX2ZsYWdzIFx1MDAyNiBTTEFCX0FMTE9DX05PX1JFQ1VSU0UpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRpZiAoaXNfa2ZlbmNlX2FkZHJlc3Mob2JqZWN0KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRzbGFiID0gdmlydF90b19zbGFiKG9iamVjdCk7XG4gXHRvYmpfZXh0cyA9IHByZXBhcmVfc2xhYl9vYmpfZXh0c19ob29rKHMsIHNsYWIsIGZsYWdzLCBhbGxvY19mbGFncywgb2JqZWN0KTtcbiBcdC8qXG5AQCAtMjM2MCwxMSAmIzQzOzIzNzEsMTUgQEAgX19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCBnZnBfdCBmbGFncyxcbiBcdCAqIGNoZWNrIHNob3VsZCBiZSBhZGRlZCBiZWZvcmUgYWxsb2NfdGFnX2FkZCgpLlxuIFx0ICovXG4gXHRpZiAob2JqX2V4dHMpIHtcbi1cdFx0dW5zaWduZWQgaW50IG9ial9pZHggPSBvYmpfdG9faW5kZXgocywgc2xhYiwgb2JqZWN0KTtcbiYjNDM7XHRcdHVuaW9uIGNvZGV0YWdfcmVmICpyZWY7XG4gXG4gXHRcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbi1cdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2JqX2lkeCk7XG4tXHRcdGFsbG9jX3RhZ19hZGQoXHUwMDI2b2JqX2V4dC1cdTAwM2VyZWYsIGN1cnJlbnQtXHUwMDNlYWxsb2NfdGFnLCBzLVx1MDAzZXNpemUpO1xuJiM0MztcbiYjNDM7XHRcdG9ial9leHQgPSBzbGFiX29ial9leHQocywgc2xhYiwgb2JqX2V4dHMsIG9iamVjdCk7XG4mIzQzO1x0XHRyZWYgPSBzbGFiX29ial9leHRfY29kZXRhZ19yZWYoc2xhYiwgb2JqX2V4dCk7XG4mIzQzO1xuJiM0MztcdFx0YWxsb2NfdGFnX2FkZChyZWYsIGN1cnJlbnQtXHUwMDNlYWxsb2NfdGFnLCBzLVx1MDAzZXNpemUpO1xuJiM0MztcbiBcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0fSBlbHNlIHtcbiBcdFx0YWxsb2NfdGFnX3NldF9pbmFjY3VyYXRlKGN1cnJlbnQtXHUwMDNlYWxsb2NfdGFnKTtcbkBAIC0yMzg0LDcgJiM0MzsyMzk5LDYgQEAgc3RhdGljIG5vaW5saW5lIHZvaWRcbiBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbiBcdFx0XHQgICAgICAgaW50IG9iamVjdHMpXG4ge1xuLVx0aW50IGk7XG4gXHR1bnNpZ25lZCBsb25nIG9ial9leHRzO1xuIFxuIFx0Lyogc2xhYi1cdTAwM2VvYmpfZXh0cyBtaWdodCBub3QgYmUgTlVMTCBpZiBpdCB3YXMgY3JlYXRlZCBmb3IgTUVNQ0cgYWNjb3VudGluZy4gKi9cbkBAIC0yMzk2LDEwICYjNDM7MjQxMCwxNCBAQCBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcFxuIFx0XHRyZXR1cm47XG4gXG4gXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBvYmplY3RzOyBpJiM0MzsmIzQzOykge1xuLVx0XHR1bnNpZ25lZCBpbnQgb2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHBbaV0pO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBvYmplY3RzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHNsYWJvYmpfZXh0ICpleHQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlzX2tmZW5jZV9hZGRyZXNzKHBbaV0pKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0YWxsb2NfdGFnX3N1YihcdTAwMjZzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9mZiktXHUwMDNlcmVmLCBzLVx1MDAzZXNpemUpO1xuJiM0MztcdFx0ZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwW2ldKTtcbiYjNDM7XHRcdGFsbG9jX3RhZ19zdWIoc2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKHNsYWIsIGV4dCksIHMtXHUwMDNlc2l6ZSk7XG4gXHR9XG4gXHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4gfVxuQEAgLTI0MTIsNiAmIzQzOzI0MzAsMjUgQEAgYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxuIFx0XHRfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCwgb2JqZWN0cyk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBNYWtlIHN1cmUgdGhlIHN0YXRpYyBrZXkgdXNlZCBieSBzbGFiX29ial9leHRfaGFzX2NvZGV0YWcoKSByZWZsZWN0cyB0aGVcbiYjNDM7ICogdmFsdWUgb2YgIW1lbV9hbGxvY19wcm9maWxpbmdfcGVybWFuZW50bHlfZGlzYWJsZWQoKVxuJiM0MzsgKlxuJiM0MzsgKiBBbnkgbGF0ZXIgbWVtIGFsbG9jIHByb2ZpbGluZyBzaHV0ZG93biB3b24mIzM5O3QgYmUgcmVmbGVjdGVkIGluIHRoZSBzdGF0aWMga2V5XG4mIzQzOyAqIGJlY2F1c2Ugb2JqX2V4dHMgd2l0aCBjb2RldGFncyBtaWdodCBhbHJlYWR5IGV4aXN0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgX19pbml0IHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRib29sIG5lZWRfY29kZXRhZyA9ICFtZW1fYWxsb2NfcHJvZmlsaW5nX3Blcm1hbmVudGx5X2Rpc2FibGVkKCk7XG4mIzQzO1xuJiM0MztcdGlmIChuZWVkX2NvZGV0YWcgIT0gc3RhdGljX2tleV9lbmFibGVkKFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpKSB7XG4mIzQzO1x0XHRpZiAobmVlZF9jb2RldGFnKVxuJiM0MztcdFx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfa2V5KTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAjZWxzZSAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZFxuQEAgLTI0MjYsNiAmIzQzOzI0NjMsMTAgQEAgYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxuIHtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXG4gXG4gXG5AQCAtMjQ3MSw2ICYjNDM7MjUxMiw5IEBAIHZvaWQgbWVtY2dfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbiBcdGlmIChsaWtlbHkoIW9ial9leHRzKSlcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdGlmICghc2xhYl9uZWVkc19vYmpjZyhzbGFiKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4gXHRfX21lbWNnX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAsIG9iamVjdHMsIG9ial9leHRzKTtcbiBcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbkBAIC0yNDg0LDcgJiM0MzsyNTI4LDYgQEAgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxuIFx0c3RydWN0IGttZW1fY2FjaGUgKnM7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdHN0cnVjdCBzbGFiICpzbGFiO1xuLVx0dW5zaWduZWQgbG9uZyBvZmY7XG4gXG4gXHRwYWdlID0gdmlydF90b19wYWdlKHApO1xuIFx0aWYgKFBhZ2VMYXJnZUttYWxsb2MocGFnZSkpIHtcbkBAIC0yNTE3LDE2ICYjNDM7MjU2MCwxNSBAQCBib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXG4gXHQgKiBvZiBzbGFiX29ial9leHRzIGJlaW5nIGFsbG9jYXRlZCBmcm9tIHRoZSBzYW1lIHNsYWIgYW5kIHRodXMgdGhlIHNsYWJcbiBcdCAqIGJlY29taW5nIGVmZmVjdGl2ZWx5IHVuZnJlZWFibGUuXG4gXHQgKi9cbi1cdGlmIChpc19rbWFsbG9jX25vcm1hbChzKSlcbiYjNDM7XHRpZiAoIWNhY2hlX25lZWRzX29iamNnKHMpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdC8qIElnbm9yZSBhbHJlYWR5IGNoYXJnZWQgb2JqZWN0cy4gKi9cbiBcdG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcbiBcdGlmIChvYmpfZXh0cykge1xuIFx0XHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4tXHRcdG9mZiA9IG9ial90b19pbmRleChzLCBzbGFiLCBwKTtcbi1cdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKTtcbi1cdFx0aWYgKHVubGlrZWx5KG9ial9leHQtXHUwMDNlb2JqY2cpKSB7XG4mIzQzO1x0XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwKTtcbiYjNDM7XHRcdGlmICh1bmxpa2VseShzbGFiX29ial9leHRfb2JqY2cob2JqX2V4dCkpKSB7XG4gXHRcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHR9XG5AQCAtMzM5MSwxMCAmIzQzOzM0MzMsMTUgQEAgc3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbiBcdFx0c3RhdChzLCBPUkRFUl9GQUxMQkFDSyk7XG4gXHR9XG4gXG4mIzQzO1x0LyogSW5pdGlhbGl6ZXMgZnJvemVuLCBpbnVzZSwgYW5kIGFueSBleHRyYSA2NGJpdC1vbmx5IGZsYWdzICovXG4mIzQzO1x0c2xhYi1cdTAwM2Vjb3VudGVycyA9IDA7XG4mIzQzO1xuIFx0c2xhYi1cdTAwM2VvYmplY3RzID0gb29fb2JqZWN0cyhvbyk7XG4tXHRzbGFiLVx1MDAzZWludXNlID0gMDtcbi1cdHNsYWItXHUwMDNlZnJvemVuID0gMDtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR182NEJJVFxuJiM0MztcdGlmIChjYWNoZV9uZWVkc19vYmpjZyhzKSlcbiYjNDM7XHRcdHNsYWItXHUwMDNlb2JqX2V4dHNfbmVlZHNfb2JqY2cgPSAxO1xuJiM0MzsjZW5kaWZcbiBcdHNsYWItXHUwMDNlc2xhYl9jYWNoZSA9IHM7XG4gXG4gXHRrYXNhbl9wb2lzb25fc2xhYihzbGFiKTtcbkBAIC02NTI2LDcgJiM0Mzs2NTczLDcgQEAgc3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9rc2l6ZShzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcdCAqL1xuIFx0aWYgKHMtXHUwMDNlZmxhZ3MgXHUwMDI2IChTTEFCX1RZUEVTQUZFX0JZX1JDVSB8IFNMQUJfU1RPUkVfVVNFUikpXG4gXHRcdHJldHVybiBzLVx1MDAzZWludXNlO1xuLVx0ZWxzZSBpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKVxuJiM0MztcdGVsc2UgaWYgKG9ial9leHRzX2luX29iamVjdChzbGFiKSlcbiBcdFx0cmV0dXJuIHMtXHUwMDNlaW51c2U7XG4gXHQvKlxuIFx0ICogRWxzZSB3ZSBjYW4gdXNlIGFsbCB0aGUgcGFkZGluZyBldGMgZm9yIHRoZSBhbGxvY2F0aW9uXG5AQCAtNzkyOSw3ICYjNDM7Nzk3Niw3IEBAIHN0YXRpYyBpbnQgY2FsY3VsYXRlX3NpemVzKHN0cnVjdCBrbWVtX2NhY2hlX2FyZ3MgKmFyZ3MsIHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuIFx0YWxpZ25lZF9zaXplID0gQUxJR04oc2l6ZSwgcy1cdTAwM2VhbGlnbik7XG4gI2lmIGRlZmluZWQoQ09ORklHX1NMQUJfT0JKX0VYVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHXzY0QklUKVxuIFx0aWYgKHNsYWJfYXJnc191bm1lcmdlYWJsZShhcmdzLCBzLVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQoYWxpZ25lZF9zaXplIC0gc2l6ZSBcdTAwM2U9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKSlcbiYjNDM7XHRcdFx0KGFsaWduZWRfc2l6ZSAtIHNpemUgXHUwMDNlPSBjYWNoZV9vYmpfZXh0X3NpemUocykpKVxuIFx0XHRzLVx1MDAzZWZsYWdzIHw9IFNMQUJfT0JKX0VYVF9JTl9PQko7XG4gI2VuZGlmXG4gXHRzaXplID0gYWxpZ25lZF9zaXplO1xuQEAgLTg1MzksNiAmIzQzOzg1ODYsOCBAQCB2b2lkIF9faW5pdCBrbWVtX2NhY2hlX2luaXQodm9pZClcbiBcdFx0Ym9vdF9rbWVtX2NhY2hlX25vZGU7XG4gXHRpbnQgbm9kZTtcbiBcbiYjNDM7XHRzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCgpO1xuJiM0MztcbiBcdGlmIChkZWJ1Z19ndWFyZHBhZ2VfbWlub3JkZXIoKSlcbiBcdFx0c2x1Yl9tYXhfb3JkZXIgPSAwO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1fQUxMT0NfUFJPRklMSU5HJiMzNDssCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0tGRU5DRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3NsYWJfb2JqX2V4dHMmIzM0OywKICAgICYjMzQ7X19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayYjMzQ7LAogICAgJiMzNDtfX21lbWNnX3NsYWJfZnJlZV9ob29rJiMzNDssCiAgICAmIzM0O19fa2ZlbmNlX2ZyZWUmIzM0OywKICAgICYjMzQ7X19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgbGF5b3V0IGFuZCBoYW5kbGluZyBvZiBgc3RydWN0IHNsYWJvYmpfZXh0YCBpbiB0aGUgc2xhYiBhbGxvY2F0b3IsIHdoaWNoIGlzIHVzZWQgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBhbmQgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nLiBJdCBvcHRpbWl6ZXMgdGhlIHN0b3JhZ2Ugb2YgYG9iamNnYCBhbmQgYGNvZGV0YWdfcmVmYCBwb2ludGVycy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBzbGFiIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgcGF0aHMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRhMTNiZmNhMjQyN2RlZWE0MWI2MGVhYWJiOGY4ZWM5ZTY2ODg1M2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyMCAyMDoyMDoyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3QKaW5kZXggNTM4OWQyNDExNzZhOGEuLmQwMmViNTRlZThmMmM2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdApAQCAtMTEyLDMgJiM0MzsxMTIsMTAgQEAgVG8gZG8gc286CiAKIC0gVGhlbiwgdXNlIHRoZSBmb2xsb3dpbmcgZm9ybSBmb3IgeW91ciBhbGxvY2F0aW9uczoKICAgYWxsb2NfaG9va3NfdGFnKGh0LSZndDt5b3VyX3NhdmVkX3RhZywga21hbGxvY19ub3Byb2YoLi4uKSkKJiM0MzsKJiM0MztOb3RlcwomIzQzOz09PT09CiYjNDM7CiYjNDM7LSBXaGVuIGEgc2xhYiBvYmplY3QgaXMgYWxsb2NhdGVkIGZyb20gS0ZFTkNFLCBpdHMgYWNjb3VudGluZyBpcyBza2lwcGVkLgomIzQzOyAgS0ZFTkNFIGFsbG9jYXRpb25zIGFyZSByYXJlIGFuZCBsaW1pdGVkIHRvIGEgc21hbGwgbnVtYmVyLCBzbyB0aGlzIG9taXNzaW9uCiYjNDM7ICBpcyBuZWdsaWdpYmxlLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCBlMWY0NmEwMDE2ZmNmZC4uOTM4NjljYzM1YzI1YmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC0xNDQwLDE5ICYjNDM7MTQ0MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX3dvcmtxdWV1ZSh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovCiAKLS8qCi0gKiBFeHRlbmRlZCBpbmZvcm1hdGlvbiBmb3Igc2xhYiBvYmplY3RzIHN0b3JlZCBhcyBhbiBhcnJheSBpbiBwYWdlLSZndDttZW1jZ19kYXRhCi0gKiBpZiBNRU1DR19EQVRBX09CSkVYVFMgaXMgc2V0LgotICovCi1zdHJ1Y3Qgc2xhYm9ial9leHQgewotI2lmZGVmIENPTkZJR19NRU1DRwotCXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HCi0JdW5pb24gY29kZXRhZ19yZWYgcmVmOwotI2VuZGlmCi19IF9fYWxpZ25lZCg4KTsKLQogc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsYWIuaCBiL2luY2x1ZGUvbGludXgvc2xhYi5oCmluZGV4IDNhMTRkZjUwNzY2YWIwLi5mOTEzMjkwMmM1YTZkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbGFiLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zbGFiLmgKQEAgLTQ1LDYgJiM0Mzs0NSw3IEBAIGVudW0gX3NsYWJfZmxhZ19iaXRzIHsKICNlbmRpZgogI2lmZGVmIENPTkZJR19NRU1DRwogCV9TTEFCX0FDQ09VTlQsCiYjNDM7CV9TTEFCX01BWV9BQ0NPVU5ULAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0tBU0FOX0dFTkVSSUMKIAlfU0xBQl9LQVNBTiwKQEAgLTIwNCw4ICYjNDM7MjA1LDEwIEBAIGVudW0gX3NsYWJfZmxhZ19iaXRzIHsKICAqLwogI2lmZGVmIENPTkZJR19NRU1DRwogIyBkZWZpbmUgU0xBQl9BQ0NPVU5UCQlfX1NMQUJfRkxBR19CSVQoX1NMQUJfQUNDT1VOVCkKJiM0MzsjIGRlZmluZSBTTEFCX01BWV9BQ0NPVU5UCV9fU0xBQl9GTEFHX0JJVChfU0xBQl9NQVlfQUNDT1VOVCkKICNlbHNlCiAjIGRlZmluZSBTTEFCX0FDQ09VTlQJCV9fU0xBQl9GTEFHX1VOVVNFRAomIzQzOyMgZGVmaW5lIFNMQUJfTUFZX0FDQ09VTlQJX19TTEFCX0ZMQUdfVU5VU0VECiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19LQVNBTl9HRU5FUklDCmRpZmYgLS1naXQgYS9tbS9rZmVuY2UvY29yZS5jIGIvbW0va2ZlbmNlL2NvcmUuYwppbmRleCA2NTc3YmQ3Njk1NGViNC4uODk3ZWNmMjU5NGZiNjQgMTAwNjQ0Ci0tLSBhL21tL2tmZW5jZS9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0va2ZlbmNlL2NvcmUuYwpAQCAtNjQwLDYgJiM0Mzs2NDAsOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBrZmVuY2VfaW5pdF9wb29sKHZvaWQpCiAJCXN0cnVjdCBzbGFiICpzbGFiID0gcGFnZV9zbGFiKHBhZ2UpOwogCQlzbGFiLSZndDtvYmpfZXh0cyA9ICh1bnNpZ25lZCBsb25nKSZhbXA7a2ZlbmNlX21ldGFkYXRhX2luaXRbaSAvIDIgLSAxXS5vYmpfZXh0cyB8CiAJCQkJIE1FTUNHX0RBVEFfT0JKRVhUUzsKJiM0MzsjaWZkZWYgQ09ORklHXzY0QklUCiYjNDM7CQlzbGFiLSZndDtvYmpfZXh0c19uZWVkc19vYmpjZyA9IDE7CiYjNDM7I2VuZGlmCiAjZW5kaWYKIAl9CiAKQEAgLTEyNDksNyAmIzQzOzEyNTIsNyBAQCB2b2lkIF9fa2ZlbmNlX2ZyZWUodm9pZCAqYWRkcikKIAlzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhICptZXRhID0gYWRkcl90b19tZXRhZGF0YSgodW5zaWduZWQgbG9uZylhZGRyKTsKIAogI2lmZGVmIENPTkZJR19NRU1DRwotCUtGRU5DRV9XQVJOX09OKG1ldGEtJmd0O29ial9leHRzLm9iamNnKTsKJiM0MzsJS0ZFTkNFX1dBUk5fT04oc2xhYl9vYmpfZXh0X29iamNnKCZhbXA7bWV0YS0mZ3Q7b2JqX2V4dHMpKTsKICNlbmRpZgogCS8qCiAJICogSWYgdGhlIG9iamVjdHMgb2YgdGhlIGNhY2hlIGFyZSBTTEFCX1RZUEVTQUZFX0JZX1JDVSwgZGVmZXIgZnJlZWluZwpkaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2tmZW5jZV90ZXN0LmMgYi9tbS9rZmVuY2Uva2ZlbmNlX3Rlc3QuYwppbmRleCBkZTJkMGY3ZDYyYjE1ZS4uOTg2N2MwM2VmMGFlM2QgMTAwNjQ0Ci0tLSBhL21tL2tmZW5jZS9rZmVuY2VfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2tmZW5jZS9rZmVuY2VfdGVzdC5jCkBAIC0yOTUsNyAmIzQzOzI5NSw3IEBAIHN0YXRpYyB2b2lkICp0ZXN0X2FsbG9jKHN0cnVjdCBrdW5pdCAqdGVzdCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcCwgZW51bSBhbGxvY2F0CiAJCQkgKiBtZW1jZyBhY2NvdW50aW5nIHdvcmtzIGNvcnJlY3RseS4KIAkJCSAqLwogCQkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIG9ial90b19pbmRleChzLCBzbGFiLCBhbGxvYyksIDBVKTsKLQkJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBvYmpzX3Blcl9zbGFiKHMsIHNsYWIpLCAxKTsKJiM0MzsJCQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgKCh1bnNpZ25lZCBpbnQpc2xhYi0mZ3Q7b2JqZWN0cyksIDEpOwogCiAJCQlpZiAocG9saWN5ID09IEFMTE9DQVRFX0FOWSkKIAkJCQlyZXR1cm4gYWxsb2M7CmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggNmRjNDg4OGE5MGYzZmQuLmFhY2U4NWZiOTlmOTczIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0yODY1LDE4ICYjNDM7Mjg2NSwxOSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX29ial9zbGFiKHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICpwKQogCSAqLwogCXVuc2lnbmVkIGxvbmcgb2JqX2V4dHM7CiAJc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0OwotCXVuc2lnbmVkIGludCBvZmY7CiYjNDM7CXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKIAogCW9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTsKIAlpZiAoIW9ial9leHRzKQogCQlyZXR1cm4gTlVMTDsKIAotCWdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKLQlvZmYgPSBvYmpfdG9faW5kZXgoc2xhYi0mZ3Q7c2xhYl9jYWNoZSwgc2xhYiwgcCk7Ci0Jb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKTsKLQlpZiAob2JqX2V4dC0mZ3Q7b2JqY2cpIHsKLQkJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnID0gb2JqX2V4dC0mZ3Q7b2JqY2c7CiYjNDM7CWlmICghc2xhYl9uZWVkc19vYmpjZyhzbGFiKSkKJiM0MzsJCXJldHVybiBOVUxMOwogCiYjNDM7CWdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKJiM0MzsJb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLSZndDtzbGFiX2NhY2hlLCBzbGFiLCBvYmpfZXh0cywgcCk7CiYjNDM7CW9iamNnID0gc2xhYl9vYmpfZXh0X29iamNnKG9ial9leHQpOwomIzQzOwlpZiAob2JqY2cpIHsKIAkJcHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpOwogCQlyZXR1cm4gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7CiAJfQpAQCAtMzU0MSw3ICYjNDM7MzU0Miw2IEBAIGJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsCiAJc2l6ZV90IG9ial9zaXplID0gb2JqX2Z1bGxfc2l6ZShzKTsKIAlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiAJc3RydWN0IHNsYWIgKnNsYWI7Ci0JdW5zaWduZWQgbG9uZyBvZmY7CiAJc2l6ZV90IGk7CiAKIAkvKgpAQCAtMzU4Myw2ICYjNDM7MzU4Myw5IEBAIGJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsCiAKIAkJc2xhYiA9IHZpcnRfdG9fc2xhYihwW2ldKTsKIAomIzQzOwkJaWYgKElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX1ZNKSAmYW1wOyZhbXA7IFdBUk5fT05fT05DRSghc2xhYl9uZWVkc19vYmpjZyhzbGFiKSkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCWlmICghc2xhYl9vYmpfZXh0cyhzbGFiKSAmYW1wOyZhbXA7CiAJCSAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBzbGFiX2FsbG9jX2ZsYWdzKSkgewogCQkJY29udGludWU7CkBAIC0zNjE2LDEwICYjNDM7MzYxOSwxMSBAQCBib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LAogCiAJCW9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTsKIAkJZ2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpOwotCQlvZmYgPSBvYmpfdG9faW5kZXgocywgc2xhYiwgcFtpXSk7Ci0JCW9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9mZik7CiYjNDM7CQlvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwW2ldKTsKJiM0MzsKIAkJb2JqX2Nncm91cF9nZXQob2JqY2cpOwotCQlvYmpfZXh0LSZndDtvYmpjZyA9IG9iamNnOwomIzQzOwkJc2xhYl9vYmpfZXh0X3NldF9vYmpjZyhvYmpfZXh0LCBvYmpjZyk7CiYjNDM7CiAJCXB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKIAl9CiAKQEAgLTM2MzUsMTUgJiM0MzszNjM5LDEzIEBAIHZvaWQgX19tZW1jZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsCiAJCXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKIAkJc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0OwogCQlzdHJ1Y3Qgb2JqX3N0b2NrX3BjcCAqc3RvY2s7Ci0JCXVuc2lnbmVkIGludCBvZmY7CiAKLQkJb2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHBbaV0pOwotCQlvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpOwotCQlvYmpjZyA9IG9ial9leHQtJmd0O29iamNnOwomIzQzOwkJb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgcFtpXSk7CiYjNDM7CQlvYmpjZyA9IHNsYWJfb2JqX2V4dF9vYmpjZyhvYmpfZXh0KTsKIAkJaWYgKCFvYmpjZykKIAkJCWNvbnRpbnVlOwogCi0JCW9ial9leHQtJmd0O29iamNnID0gTlVMTDsKJiM0MzsJCXNsYWJfb2JqX2V4dF9zZXRfb2JqY2cob2JqX2V4dCwgTlVMTCk7CiAKIAkJc3RvY2sgPSB0cnlsb2NrX3N0b2NrKCk7CiAJCV9fcmVmaWxsX29ial9zdG9jayhvYmpjZywgc3RvY2ssIG9ial9zaXplLCB0cnVlKTsKZGlmZiAtLWdpdCBhL21tL3NsYWIuaCBiL21tL3NsYWIuaAppbmRleCBmNWUzMzZiNmI2YjA0Yy4uMThjMmE4MDdmMDIzY2UgMTAwNjQ0Ci0tLSBhL21tL3NsYWIuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9zbGFiLmgKQEAgLTgxLDEwICYjNDM7ODEsMTEgQEAgc3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIHsKICNpZmRlZiBDT05GSUdfNjRCSVQKIAkJCQkJLyoKIAkJCQkJICogU29tZSBvcHRpbWl6YXRpb25zIHVzZSBmcmVlIGJpdHMgaW4gJiMzOTtjb3VudGVycyYjMzk7IGZpZWxkCi0JCQkJCSAqIHRvIHNhdmUgbWVtb3J5LiBJbiBjYXNlIC0mZ3Q7c3RyaWRlIGZpZWxkIGlzIG5vdCBhdmFpbGFibGUsCi0JCQkJCSAqIHN1Y2ggb3B0aW1pemF0aW9ucyBhcmUgZGlzYWJsZWQuCiYjNDM7CQkJCQkgKiB0byBzYXZlIG1lbW9yeSBvciBDUFUuIElmIHRoZXNlIGZyZWUgYml0cyBhcmUgbm90CiYjNDM7CQkJCQkgKiBhdmFpbGFibGUsIHN1Y2ggb3B0aW1pemF0aW9ucyBhcmUgZGlzYWJsZWQuCiAJCQkJCSAqLwotCQkJCQl1bnNpZ25lZCBpbnQgc3RyaWRlOwomIzQzOwkJCQkJdW5zaWduZWQgb2JqX2V4dHNfaW5fb2JqZWN0OjE7CiYjNDM7CQkJCQl1bnNpZ25lZCBvYmpfZXh0c19uZWVkc19vYmpjZzoxOwogI2VuZGlmCiAJCQkJfTsKIAkJCX07CkBAIC0zMzAsMTIgJiM0MzszMzEsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfdG9faW5kZXgoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLAogCXJldHVybiBfX29ial90b19pbmRleChjYWNoZSwgc2xhYl9hZGRyZXNzKHNsYWIpLCBvYmopOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBvYmpzX3Blcl9zbGFiKGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwKLQkJCQljb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYikKLXsKLQlyZXR1cm4gc2xhYi0mZ3Q7b2JqZWN0czsKLX0KLQogLyoKICAqIFN0YXRlIG9mIHRoZSBzbGFiIGFsbG9jYXRvci4KICAqCkBAIC01NTUsNiAmIzQzOzU1MCw5MyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9rbWFsbG9jX25vX29iamV4dCh2b2lkKQogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzOy8qCiYjNDM7ICogRXh0ZW5kZWQgaW5mb3JtYXRpb24gZm9yIHNsYWIgb2JqZWN0cyBzdG9yZWQgYXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IGluCiYjNDM7ICogc2xhYi0mZ3Q7b2JqX2V4dHMgKGFsaWFzaW5nIHBhZ2UtJmd0O21lbWNnX2RhdGEpIGlmIE1FTUNHX0RBVEFfT0JKRVhUUyBpcyBzZXQuCiYjNDM7ICovCiYjNDM7c3RydWN0IHNsYWJvYmpfZXh0IHsKJiM0MzsJLyoKJiM0MzsJICogQWxsIGVsZW1lbnRzIG9mIHRoZSB1bmlvbiBzaG91bGQgYmUgcG9pbnRlci1zaXplZCB0byBhdm9pZCBtZW1vcnkKJiM0MzsJICogd2FzdGUKJiM0MzsJICovCiYjNDM7CXVuaW9uIHsKJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHCiYjNDM7CQlzdHJ1Y3Qgb2JqX2Nncm91cCAqX29iamNnOwomIzQzOyNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORwomIzQzOwkJdW5pb24gY29kZXRhZ19yZWYgX2N0cmVmOwomIzQzOyNlbmRpZgomIzQzOwl9OwomIzQzO30gX19hbGlnbmVkKDgpOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORwomIzQzO0RFQ0xBUkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFQsCiYjNDM7CQkJIHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWcodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBzdGF0aWNfYnJhbmNoX21heWJlKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCwKJiM0MzsJCQkJICAgJmFtcDtzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfa2V5KTsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0cKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgY2FjaGVfbmVlZHNfb2JqY2coc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlKQomIzQzO3sKJiM0MzsJcmV0dXJuIChjYWNoZS0mZ3Q7ZmxhZ3MgJmFtcDsgU0xBQl9NQVlfQUNDT1VOVCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzbGFiX25lZWRzX29iamNnKHN0cnVjdCBzbGFiICpzbGFiKQomIzQzO3sKJiM0MzsjaWZkZWYgQ09ORklHXzY0QklUCiYjNDM7CXJldHVybiBzbGFiLSZndDtvYmpfZXh0c19uZWVkc19vYmpjZzsKJiM0MzsjZWxzZQomIzQzOwlyZXR1cm4gY2FjaGVfbmVlZHNfb2JqY2coc2xhYi0mZ3Q7c2xhYl9jYWNoZSk7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSBib29sIGNhY2hlX25lZWRzX29iamNnKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHNsYWJfbmVlZHNfb2JqY2coc3RydWN0IHNsYWIgKnNsYWIpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgc2l6ZV90IGNhY2hlX29ial9leHRfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcykKJiM0Mzt7CiYjNDM7CXNpemVfdCBzeiA9IDA7CiYjNDM7CiYjNDM7CWlmIChjYWNoZV9uZWVkc19vYmpjZyhzKSkKJiM0MzsJCXN6ICYjNDM7PSAxOwomIzQzOwomIzQzOwlpZiAoc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKCkpCiYjNDM7CQlzeiAmIzQzOz0gMTsKJiM0MzsKJiM0MzsJcmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc3o7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgc2l6ZV90IHNsYWJfb2JqX2V4dF9zaXplKHN0cnVjdCBzbGFiICpzbGFiKQomIzQzO3sKJiM0MzsJc2l6ZV90IHN6ID0gMDsKJiM0MzsKJiM0MzsJaWYgKHNsYWJfbmVlZHNfb2JqY2coc2xhYikpCiYjNDM7CQlzeiAmIzQzOz0gMTsKJiM0MzsKJiM0MzsJaWYgKHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZygpKQomIzQzOwkJc3ogJiM0Mzs9IDE7CiYjNDM7CiYjNDM7CXJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHN6OwomIzQzO30KJiM0MzsKICNpZmRlZiBDT05GSUdfU0xBQl9PQkpfRVhUCiAKIC8qCkBAIC01NzIsNyAmIzQzOzY1NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX2ttYWxsb2Nfbm9fb2JqZXh0KHZvaWQpCiAgKiBvYmpfZXh0cyA9IHNsYWJfb2JqX2V4dHMoc2xhYik7CiAgKiBpZiAob2JqX2V4dHMpIHsKICAqICAgICAgICAgZ2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpOwotICogICAgICAgICBvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvYmpfdG9faW5kZXgocywgc2xhYiwgb2JqKSk7CiYjNDM7ICogICAgICAgICBvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBvYmopOwogICogICAgICAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCBvYmpfZXh0CiAgKiAgICAgICAgIHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKICAqIH0KQEAgLTYxMCw0OCAmIzQzOzY5Miw4MiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3NsYWJfb2JqX2V4dHModW5zaWduZWQgbG9uZyBvYmpfZXh0cykKIH0KIAogI2lmZGVmIENPTkZJR182NEJJVAotc3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgaW50IHN0cmlkZSkKLXsKLQlzbGFiLSZndDtzdHJpZGUgPSBzdHJpZGU7Ci19Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbGFiX2dldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIpCiYjNDM7c3RhdGljIGlubGluZSBib29sIG9ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYikKIHsKLQlyZXR1cm4gc2xhYi0mZ3Q7c3RyaWRlOwomIzQzOwkvKgomIzQzOwkgKiBOb3RlIHdlIGNhbm5vdCByZWx5IG9uIHRoZSBTTEFCX09CSl9FWFRfSU5fT0JKIGZsYWcgaGVyZSBhbmQgbmVlZCB0bwomIzQzOwkgKiBjaGVjayB0aGUgcGVyLXNsYWIgYml0LiBBIGNhY2hlIGNhbiBoYXZlIFNMQUJfT0JKX0VYVF9JTl9PQkogc2V0LCBidXQKJiM0MzsJICogYWxsb2NhdGlvbnMgd2l0aGluX3NsYWJfbGVmdG92ZXIgYXJlIHByZWZlcnJlZC4gQW5kIHRob3NlIG1heSBiZQomIzQzOwkgKiBwb3NzaWJsZSBvciBub3QgZGVwZW5kaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIHNsYWImIzM5O3Mgc2l6ZS4KJiM0MzsJICovCiYjNDM7CXJldHVybiBzbGFiLSZndDtvYmpfZXh0c19pbl9vYmplY3Q7CiB9CiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgaW50IHN0cmlkZSkKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKQogewotCVZNX1dBUk5fT05fT05DRShzdHJpZGUgIT0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkpOwotfQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2xhYl9nZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiKQotewotCXJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KTsKJiM0MzsJcmV0dXJuIGZhbHNlOwogfQogI2VuZGlmCiAKIC8qCiAgKiBzbGFiX29ial9leHQgLSBnZXQgdGhlIHBvaW50ZXIgdG8gdGhlIHNsYWIgb2JqZWN0IGV4dGVuc2lvbiBtZXRhZGF0YQogICogYXNzb2NpYXRlZCB3aXRoIGFuIG9iamVjdCBpbiBhIHNsYWIuCiYjNDM7ICogQHM6IGNhY2hlIHRoYXQgdGhlIHNsYWIgYmxvbmdzIHRvCiAgKiBAc2xhYjogYSBwb2ludGVyIHRvIHRoZSBzbGFiIHN0cnVjdAogICogQG9ial9leHRzOiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCBleHRlbnNpb24gdmVjdG9yCi0gKiBAaW5kZXg6IGFuIGluZGV4IG9mIHRoZSBvYmplY3QKJiM0MzsgKiBAb2JqOiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdAogICoKICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBvYmplY3QgZXh0ZW5zaW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgb2JqZWN0LgogICogTXVzdCBiZSBjYWxsZWQgd2l0aGluIGEgc2VjdGlvbiBjb3ZlcmVkIGJ5IGdldC9wdXRfc2xhYl9vYmpfZXh0cygpLgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqc2xhYl9vYmpfZXh0KHN0cnVjdCBzbGFiICpzbGFiLAotCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvYmpfZXh0cywKLQkJCQkJICAgICAgIHVuc2lnbmVkIGludCBpbmRleCkKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqCiYjNDM7c2xhYl9vYmpfZXh0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgbG9uZyBvYmpfZXh0cywKJiM0MzsJICAgICBjb25zdCB2b2lkICpvYmopCiB7CiAJc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0OwomIzQzOwl1bnNpZ25lZCBpbnQgaW5kZXg7CiYjNDM7CXVuc2lnbmVkIGludCBzdHJpZGU7CiAKIAlWTV9XQVJOX09OX09OQ0Uob2JqX2V4dHMgIT0gc2xhYl9vYmpfZXh0cyhzbGFiKSk7CiAKLQlvYmpfZXh0ID0gKHN0cnVjdCBzbGFib2JqX2V4dCAqKShvYmpfZXh0cyAmIzQzOwotCQkJCQkgc2xhYl9nZXRfc3RyaWRlKHNsYWIpICogaW5kZXgpOwomIzQzOwlpbmRleCA9IG9ial90b19pbmRleChzLCBzbGFiLCBvYmopOwomIzQzOwomIzQzOwlpZiAoIW9ial9leHRzX2luX29iamVjdChzbGFiKSkKJiM0MzsJCXN0cmlkZSA9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpOwomIzQzOwllbHNlCiYjNDM7CQlzdHJpZGUgPSBzLSZndDtzaXplOwomIzQzOwomIzQzOwlvYmpfZXh0ID0gKHN0cnVjdCBzbGFib2JqX2V4dCAqKShvYmpfZXh0cyAmIzQzOyBpbmRleCAqIHN0cmlkZSk7CiYjNDM7CiAJcmV0dXJuIGthc2FuX3Jlc2V0X3RhZyhvYmpfZXh0KTsKIH0KIAomIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0cKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpzbGFiX29ial9leHRfb2JqY2coc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0KQomIzQzO3sKJiM0MzsJLyogaWYgb2JqY2cgZXhpc3RzLCBpdCBjb21lcyBmaXJzdCwgc28gd2UgZG9uJiMzOTt0IG5lZWQgdG8gZG8gYW55dGhpbmcgKi8KJiM0MzsJcmV0dXJuIG9ial9leHQtJmd0O19vYmpjZzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNsYWJfb2JqX2V4dF9zZXRfb2JqY2coc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0LAomIzQzOwkJCQkJICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpCiYjNDM7ewomIzQzOwkvKiBpZiBvYmpjZyBleGlzdHMsIGl0IGNvbWVzIGZpcnN0LCBzbyB3ZSBkb24mIzM5O3QgbmVlZCB0byBkbyBhbnl0aGluZyAqLwomIzQzOwlvYmpfZXh0LSZndDtfb2JqY2cgPSBvYmpjZzsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HCiYjNDM7c3RhdGljIGlubGluZSB1bmlvbiBjb2RldGFnX3JlZiAqCiYjNDM7c2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQpCiYjNDM7ewomIzQzOwlpZiAoc2xhYl9uZWVkc19vYmpjZyhzbGFiKSkKJiM0MzsJCW9ial9leHQgJiM0Mzs9IDE7CiYjNDM7CiYjNDM7CXJldHVybiAmYW1wO29ial9leHQtJmd0O19jdHJlZjsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsCiAJCQlnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyk7CiAKQEAgLTY2MiwxNiAmIzQzOzc3OCwxNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYikKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYm9ial9leHQgKnNsYWJfb2JqX2V4dChzdHJ1Y3Qgc2xhYiAqc2xhYiwKLQkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgpCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYm9ial9leHQgKgomIzQzO3NsYWJfb2JqX2V4dChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsCiYjNDM7CSAgICAgY29uc3Qgdm9pZCAqb2JqKQogewogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBpbnQgc3RyaWRlKSB7IH0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNsYWJfZ2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYikgeyByZXR1cm4gMDsgfQotCiYjNDM7c3RhdGljIGlubGluZSBib29sIG9ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYikKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiAKICNlbmRpZiAvKiBDT05GSUdfU0xBQl9PQkpfRVhUICovCiAKZGlmZiAtLWdpdCBhL21tL3NsYWJfY29tbW9uLmMgYi9tbS9zbGFiX2NvbW1vbi5jCmluZGV4IDAzZWNhYzEyY2Q4NjVmLi40ZTk4M2UyNTAzMzg3YSAxMDA2NDQKLS0tIGEvbW0vc2xhYl9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zbGFiX2NvbW1vbi5jCkBAIC01Miw3ICYjNDM7NTIsNyBAQCBzdHJ1Y3Qga21lbV9jYWNoZSAqa21lbV9jYWNoZTsKIAkJU0xBQl9PQkpfRVhUX0lOX09CSikKIAogI2RlZmluZSBTTEFCX01FUkdFX1NBTUUgKFNMQUJfUkVDTEFJTV9BQ0NPVU5UIHwgU0xBQl9DQUNIRV9ETUEgfCBcCi0JCQkgU0xBQl9DQUNIRV9ETUEzMiB8IFNMQUJfQUNDT1VOVCkKJiM0MzsJCQkgU0xBQl9DQUNIRV9ETUEzMiB8IFNMQUJfQUNDT1VOVCB8IFNMQUJfTUFZX0FDQ09VTlQpCiAKIC8qCiAgKiBNZXJnZSBjb250cm9sLiBJZiB0aGlzIGlzIHNldCB0aGVuIG5vIG1lcmdpbmcgb2Ygc2xhYiBjYWNoZXMgd2lsbCBvY2N1ci4KQEAgLTM1OSw2ICYjNDM7MzU5LDEzIEBAIHN0cnVjdCBrbWVtX2NhY2hlICpfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MoY29uc3QgY2hhciAqbmFtZSwKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBGb3Igbm93IHdlIGFzc3VtZSBhbnkgY2FjaGUgY2FuIGJlIHVzZWQgd2l0aCBfX0dGUF9BQ0NPVU5UIGFuZCB0aHVzCiYjNDM7CSAqIG1heSBuZWVkIHRvIHN0b3JlIG9iamNnIHBvaW50ZXJzIGZvciBvYmplY3RzCiYjNDM7CSAqLwomIzQzOwlpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKQomIzQzOwkJZmxhZ3MgfD0gU0xBQl9NQVlfQUNDT1VOVDsKJiM0MzsKIAkvKiBGYWlsIGNsb3NlZCBvbiBiYWQgdXNlcnNpemUgb2YgdXNlcm9mZnNldCB2YWx1ZXMuICovCiAJaWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgfHwKIAkgICAgV0FSTl9PTighYXJncy0mZ3Q7dXNlcnNpemUgJmFtcDsmYW1wOyBhcmdzLSZndDt1c2Vyb2Zmc2V0KSB8fApAQCAtOTg0LDExICYjNDM7OTkxLDE5IEBAIG5ld19rbWFsbG9jX2NhY2hlKGludCBpZHgsIGVudW0ga21hbGxvY19jYWNoZV90eXBlIHR5cGUpCiAjZW5kaWYKIAogCS8qCi0JICogSWYgQ09ORklHX01FTUNHIGlzIGVuYWJsZWQsIGRpc2FibGUgY2FjaGUgbWVyZ2luZyBmb3IKLQkgKiBLTUFMTE9DX05PUk1BTCBjYWNoZXMuCiYjNDM7CSAqIElmIG1lbWNnX2ttZW0gaXMgZW5hYmxlZCBhbmQgdGhpcyBpcyBhIEtNQUxMT0NfTk9STUFMIGNhY2hlIGFuZCAgbm90CiYjNDM7CSAqIGFsaWFzZWQgd2l0aCBhbnkgb3RoZXIgdHlwZSwgbWFrZSBzdXJlIGl0JiMzOTtzIG5ldmVyIG1lcmdlZCB3aXRoIGFueSBvdGhlcgomIzQzOwkgKiBjYWNoZS4KJiM0MzsJICoKJiM0MzsJICogSW4gb3RoZXIgY2FzZXMgdGhlIGttYWxsb2MgY2FjaGUgbWF5IGVuZCB1cCBiZWluZyB1c2VkIGZvciBhCiYjNDM7CSAqIF9fR0ZQX0FDQ09VTlQgYWxsb2NhdGlvbiBzbyBtYXJrIGl0IGFzIHN1Y2gKIAkgKi8KLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNQ0cpICZhbXA7JmFtcDsgKHR5cGUgPT0gS01BTExPQ19OT1JNQUwpKQotCQlmbGFncyB8PSBTTEFCX05PX01FUkdFOwomIzQzOwlpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKSB7CiYjNDM7CQlpZiAodHlwZSA9PSBLTUFMTE9DX05PUk1BTCAmYW1wOyZhbXA7IEtNQUxMT0NfUkVDTEFJTSAhPSBLTUFMTE9DX05PUk1BTCkKJiM0MzsJCQlmbGFncyB8PSBTTEFCX05PX01FUkdFOwomIzQzOwkJZWxzZQomIzQzOwkJCWZsYWdzIHw9IFNMQUJfTUFZX0FDQ09VTlQ7CiYjNDM7CX0KIAogCWlmIChtaW5hbGlnbiAmZ3Q7IEFSQ0hfS01BTExPQ19NSU5BTElHTikgewogCQlhbGlnbmVkX3NpemUgPSBBTElHTihhbGlnbmVkX3NpemUsIG1pbmFsaWduKTsKZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCAwMzM3ZTYwZGI1YWNlMC4uZTYxNDhiNzNiOTJmODggMTAwNjQ0Ci0tLSBhL21tL3NsdWIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmMKQEAgLTIxMyw2ICYjNDM7MjEzLDExIEBAIERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHNsdWJfZGVidWdfZW5hYmxlZCk7CiBzdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc3RyaWN0X251bWEpOwogI2VuZGlmCiAKJiM0MzsjaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcKJiM0MztERUZJTkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFQsCiYjNDM7CQkJc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7CiYjNDM7I2VuZGlmCiYjNDM7CiAvKiBTdHJ1Y3R1cmUgaG9sZGluZyBleHRyYSBwYXJhbWV0ZXJzIGZvciBzbGFiIGFsbG9jYXRpb25zICovCiBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0IHsKIAl1bnNpZ25lZCBsb25nIGNhbGxlcl9hZGRyOwpAQCAtODAzLDcgJiM0Mzs4MDgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9zbGFiX29ial9leHRzKHN0cnVjdCBrbWVtX2NhY2hlICpzKQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfZXh0c19zaXplX2luX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpCiB7Ci0JcmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc2xhYi0mZ3Q7b2JqZWN0czsKJiM0MzsJcmV0dXJuIHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpICogc2xhYi0mZ3Q7b2JqZWN0czsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG9ial9leHRzX29mZnNldF9pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLApAQCAtODcwLDE4ICYjNDM7ODc1LDYgQEAgc3RhdGljIGlubGluZSBib29sIG9ial9leHRzX2luX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKQogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19TTEFCX09CSl9FWFQpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfNjRCSVQpCi1zdGF0aWMgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKQotewotCS8qCi0JICogTm90ZSB3ZSBjYW5ub3QgcmVseSBvbiB0aGUgU0xBQl9PQkpfRVhUX0lOX09CSiBmbGFnIGhlcmUgYW5kIG5lZWQgdG8KLQkgKiBjaGVjayB0aGUgc3RyaWRlLiBBIGNhY2hlIGNhbiBoYXZlIFNMQUJfT0JKX0VYVF9JTl9PQkogc2V0LCBidXQKLQkgKiBhbGxvY2F0aW9ucyB3aXRoaW5fc2xhYl9sZWZ0b3ZlciBhcmUgcHJlZmVycmVkLiBBbmQgdGhvc2UgbWF5IGJlCi0JICogcG9zc2libGUgb3Igbm90IGRlcGVuZGluZyBvbiB0aGUgcGFydGljdWxhciBzbGFiJiMzOTtzIHNpemUuCi0JICovCi0JcmV0dXJuIG9ial9leHRzX2luX3NsYWIocywgc2xhYikgJmFtcDsmYW1wOwotCSAgICAgICAoc2xhYl9nZXRfc3RyaWRlKHNsYWIpID09IHMtJmd0O3NpemUpOwotfQotCiBzdGF0aWMgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpCiB7CiAJdW5zaWduZWQgaW50IG9mZnNldCA9IGdldF9pbmZvX2VuZChzKTsKQEAgLTg5NiwxNiAmIzQzOzg4OSwyMCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpCiAKIAlyZXR1cm4gb2Zmc2V0OwogfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpCiB7Ci0JcmV0dXJuIGZhbHNlOwomIzQzOwlzbGFiLSZndDtvYmpfZXh0c19pbl9vYmplY3QgPSAxOwogfQotCiYjNDM7I2Vsc2UKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpCiB7CiAJcmV0dXJuIDA7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X29ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYikKJiM0Mzt7CiYjNDM7fQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU0xVQl9ERUJVRwpAQCAtMTIwNiw4ICYjNDM7MTIwMyw4IEBAIHN0YXRpYyB2b2lkIHByaW50X3RyYWlsZXIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB1OCAqcCkKIAogCW9mZiAmIzQzOz0ga2FzYW5fbWV0YWRhdGFfc2l6ZShzLCBmYWxzZSk7CiAKLQlpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKQotCQlvZmYgJiM0Mzs9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpOwomIzQzOwlpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKQomIzQzOwkJb2ZmICYjNDM7PSBzbGFiX29ial9leHRfc2l6ZShzbGFiKTsKIAogCWlmIChvZmYgIT0gc2l6ZV9mcm9tX29iamVjdChzKSkKIAkJLyogQmVnaW5uaW5nIG9mIHRoZSBmaWxsZXIgaXMgdGhlIGZyZWUgcG9pbnRlciAqLwpAQCAtMTQxMSw4ICYjNDM7MTQwOCw4IEBAIHN0YXRpYyBpbnQgY2hlY2tfcGFkX2J5dGVzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdTggKnApCiAKIAlvZmYgJiM0Mzs9IGthc2FuX21ldGFkYXRhX3NpemUocywgZmFsc2UpOwogCi0JaWYgKG9ial9leHRzX2luX29iamVjdChzLCBzbGFiKSkKLQkJb2ZmICYjNDM7PSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KTsKJiM0MzsJaWYgKG9ial9leHRzX2luX29iamVjdChzbGFiKSkKJiM0MzsJCW9mZiAmIzQzOz0gc2xhYl9vYmpfZXh0X3NpemUoc2xhYik7CiAKIAlpZiAoc2l6ZV9mcm9tX29iamVjdChzKSA9PSBvZmYpCiAJCXJldHVybiAxOwpAQCAtMTQzOSw3ICYjNDM7MTQzNiw3IEBAIHNsYWJfcGFkX2NoZWNrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYikKIAlsZW5ndGggPSBzbGFiX3NpemUoc2xhYik7CiAJZW5kID0gc3RhcnQgJiM0MzsgbGVuZ3RoOwogCi0JaWYgKG9ial9leHRzX2luX3NsYWIocywgc2xhYikgJmFtcDsmYW1wOyAhb2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKSB7CiYjNDM7CWlmIChvYmpfZXh0c19pbl9zbGFiKHMsIHNsYWIpICZhbXA7JmFtcDsgIW9ial9leHRzX2luX29iamVjdChzbGFiKSkgewogCQlyZW1haW5kZXIgPSBsZW5ndGg7CiAJCXJlbWFpbmRlciAtPSBvYmpfZXh0c19vZmZzZXRfaW5fc2xhYihzLCBzbGFiKTsKIAkJcmVtYWluZGVyIC09IG9ial9leHRzX3NpemVfaW5fc2xhYihzbGFiKTsKQEAgLTIwNzAsMjAgJiM0MzsyMDY3LDI2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX29ial9jb2RldGFnX2VtcHR5KGNvbnN0IHZvaWQgKm9iaikKIAlvYmpfc2xhYiA9IHZpcnRfdG9fc2xhYihvYmopOwogCXNsYWJfZXh0cyA9IHNsYWJfb2JqX2V4dHMob2JqX3NsYWIpOwogCWlmIChzbGFiX2V4dHMpIHsKJiM0MzsJCXN0cnVjdCBzbGFib2JqX2V4dCAqZXh0OwomIzQzOwkJdW5pb24gY29kZXRhZ19yZWYgKnJlZjsKJiM0MzsKIAkJZ2V0X3NsYWJfb2JqX2V4dHMoc2xhYl9leHRzKTsKLQkJdW5zaWduZWQgaW50IG9mZnMgPSBvYmpfdG9faW5kZXgob2JqX3NsYWItJmd0O3NsYWJfY2FjaGUsCi0JCQkJCQkgb2JqX3NsYWIsIG9iaik7Ci0JCXN0cnVjdCBzbGFib2JqX2V4dCAqZXh0ID0gc2xhYl9vYmpfZXh0KG9ial9zbGFiLAotCQkJCQkJICAgICAgIHNsYWJfZXh0cywgb2Zmcyk7CiYjNDM7CQlleHQgPSBzbGFiX29ial9leHQob2JqX3NsYWItJmd0O3NsYWJfY2FjaGUsIG9ial9zbGFiLCBzbGFiX2V4dHMsIG9iaik7CiYjNDM7CQlyZWYgPSBzbGFiX29ial9leHRfY29kZXRhZ19yZWYob2JqX3NsYWIsIGV4dCk7CiYjNDM7CiYjNDM7CQlpZiAoaXNfa2ZlbmNlX2FkZHJlc3Mob2JqKSkgewomIzQzOwkJCXB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQogCi0JCWlmICh1bmxpa2VseShpc19jb2RldGFnX2VtcHR5KCZhbXA7ZXh0LSZndDtyZWYpKSkgewomIzQzOwkJaWYgKHVubGlrZWx5KGlzX2NvZGV0YWdfZW1wdHkocmVmKSkpIHsKIAkJCXB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7CiAJCQlyZXR1cm47CiAJCX0KIAogCQkvKiBjb2RldGFnIHNob3VsZCBiZSBOVUxMIGhlcmUgKi8KLQkJV0FSTl9PTihleHQtJmd0O3JlZi5jdCk7Ci0JCXNldF9jb2RldGFnX2VtcHR5KCZhbXA7ZXh0LSZndDtyZWYpOwomIzQzOwkJV0FSTl9PTihyZWYtJmd0O2N0KTsKJiM0MzsJCXNldF9jb2RldGFnX2VtcHR5KHJlZik7CiAJCXB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7CiAJfQogfQpAQCAtMjA5MywxOSAmIzQzOzIwOTYsMjkgQEAgc3RhdGljIGlubGluZSBib29sIG1hcmtfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIpCiAJcmV0dXJuIGNtcHhjaGcoJmFtcDtzbGFiLSZndDtvYmpfZXh0cywgMCwgT0JKRVhUU19BTExPQ19GQUlMKSA9PSAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsCi0JCQlzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYywgdW5zaWduZWQgaW50IG9iamVjdHMpCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYiwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsIHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjKQogewomIzQzOwl1bnNpZ25lZCBpbnQgc3RyaWRlOwomIzQzOwomIzQzOwlpZiAoIW1lbV9hbGxvY19wcm9maWxpbmdfZW5hYmxlZCgpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCS8qCiAJICogSWYgdmVjdG9yIHByZXZpb3VzbHkgZmFpbGVkIHRvIGFsbG9jYXRlIHRoZW4gd2UgaGF2ZSBsaXZlCiAJICogb2JqZWN0cyB3aXRoIG5vIHRhZyByZWZlcmVuY2UuIE1hcmsgYWxsIHJlZmVyZW5jZXMgaW4gdGhpcwogCSAqIHZlY3RvciBhcyBlbXB0eSB0byBhdm9pZCB3YXJuaW5ncyBsYXRlciBvbi4KIAkgKi8KLQlpZiAob2JqX2V4dHMgPT0gT0JKRVhUU19BTExPQ19GQUlMKSB7Ci0JCXVuc2lnbmVkIGludCBpOwomIzQzOwlpZiAob2JqX2V4dHMgIT0gT0JKRVhUU19BTExPQ19GQUlMKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzdHJpZGUgPSBzbGFiX29ial9leHRfc2l6ZShzbGFiKSAvIHNpemVvZigqdmVjKTsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBzbGFiLSZndDtvYmplY3RzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdW5pb24gY29kZXRhZ19yZWYgKnJlZiA9IHNsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihzbGFiLCB2ZWMpOwogCi0JCWZvciAoaSA9IDA7IGkgJmx0OyBvYmplY3RzOyBpJiM0MzsmIzQzOykKLQkJCXNldF9jb2RldGFnX2VtcHR5KCZhbXA7dmVjW2ldLnJlZik7CiYjNDM7CQlzZXRfY29kZXRhZ19lbXB0eShyZWYpOwomIzQzOwkJdmVjICYjNDM7PSBzdHJpZGU7CiAJfQogfQogCkBAIC0yMTEzLDggJiM0MzsyMTI2LDggQEAgc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyh1bnNpZ25lZCBsb25nIG9ial9leHRzLAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWFya19vYmpfY29kZXRhZ19lbXB0eShjb25zdCB2b2lkICpvYmopIHt9CiBzdGF0aWMgaW5saW5lIGJvb2wgbWFya19mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYikgeyByZXR1cm4gZmFsc2U7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cywKLQkJCXN0cnVjdCBzbGFib2JqX2V4dCAqdmVjLCB1bnNpZ25lZCBpbnQgb2JqZWN0cykge30KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiLAomIzQzOwkJdW5zaWduZWQgbG9uZyBvYmpfZXh0cywgc3RydWN0IHNsYWJvYmpfZXh0ICp2ZWMpIHt9CiAKICNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqLwogCkBAIC0yMTI3LDEyICYjNDM7MjE0MCwxMSBAQCBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsCiAJCQlnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncykKIHsKIAljb25zdCBib29sIGFsbG93X3NwaW4gPSBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhbGxvY19mbGFncyk7Ci0JdW5zaWduZWQgaW50IG9iamVjdHMgPSBvYmpzX3Blcl9zbGFiKHMsIHNsYWIpOwogCWJvb2wgbmV3X3NsYWIgPSBhbGxvY19mbGFncyAmYW1wOyBTTEFCX0FMTE9DX05FV19TTEFCOwogCXVuc2lnbmVkIGxvbmcgbmV3X2V4dHM7CiAJdW5zaWduZWQgbG9uZyBvbGRfZXh0czsKIAlzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYzsKLQlzaXplX3Qgc3ogPSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHNsYWItJmd0O29iamVjdHM7CiYjNDM7CXNpemVfdCBzeiA9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpICogc2xhYi0mZ3Q7b2JqZWN0czsKIAogCWdmcCAmYW1wOz0gfk9CSkNHU19DTEVBUl9NQVNLOwogCS8qCkBAIC0yMTgzLDcgJiM0MzsyMTk1LDcgQEAgaW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLAogI2VuZGlmCiByZXRyeToKIAlvbGRfZXh0cyA9IFJFQURfT05DRShzbGFiLSZndDtvYmpfZXh0cyk7Ci0JaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKG9sZF9leHRzLCB2ZWMsIG9iamVjdHMpOwomIzQzOwloYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Moc2xhYiwgb2xkX2V4dHMsIHZlYyk7CiAKIAlpZiAobmV3X3NsYWIpIHsKIAkJLyoKQEAgLTIyNTAsOSAmIzQzOzIyNjIsNiBAQCBzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYikKIAl2b2lkICphZGRyOwogCXVuc2lnbmVkIGxvbmcgb2JqX2V4dHM7CiAKLQkvKiBJbml0aWFsaXplIHN0cmlkZSBlYXJseSB0byBhdm9pZCBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzICovCi0Jc2xhYl9zZXRfc3RyaWRlKHNsYWIsIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKTsKLQogCWlmICghbmVlZF9zbGFiX29ial9leHRzKHMpKQogCQlyZXR1cm47CiAKQEAgLTIyNzgsMTUgJiM0MzsyMjg3LDE0IEBAIHN0YXRpYyB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKQogCiAJCWdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKIAkJZm9yX2VhY2hfb2JqZWN0KGFkZHIsIHMsIHNsYWJfYWRkcmVzcyhzbGFiKSwgc2xhYi0mZ3Q7b2JqZWN0cykKLQkJCW1lbXNldChrYXNhbl9yZXNldF90YWcoYWRkcikgJiM0Mzsgb2Zmc2V0LCAwLAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKTsKJiM0MzsJCQltZW1zZXQoa2FzYW5fcmVzZXRfdGFnKGFkZHIpICYjNDM7IG9mZnNldCwgMCwgc2xhYl9vYmpfZXh0X3NpemUoc2xhYikpOwogCQlwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7CiAKICNpZmRlZiBDT05GSUdfTUVNQ0cKIAkJb2JqX2V4dHMgfD0gTUVNQ0dfREFUQV9PQkpFWFRTOwogI2VuZGlmCiAJCXNsYWItJmd0O29ial9leHRzID0gb2JqX2V4dHM7Ci0JCXNsYWJfc2V0X3N0cmlkZShzbGFiLCBzLSZndDtzaXplKTsKJiM0MzsJCXNsYWJfc2V0X29ial9leHRzX2luX29iamVjdChzbGFiKTsKIAl9CiB9CiAKQEAgLTIzNTIsNiAmIzQzOzIzNjAsOSBAQCBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIGdmcF90IGZsYWdzLAogCWlmIChhbGxvY19mbGFncyAmYW1wOyBTTEFCX0FMTE9DX05PX1JFQ1VSU0UpCiAJCXJldHVybjsKIAomIzQzOwlpZiAoaXNfa2ZlbmNlX2FkZHJlc3Mob2JqZWN0KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlzbGFiID0gdmlydF90b19zbGFiKG9iamVjdCk7CiAJb2JqX2V4dHMgPSBwcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzLCBzbGFiLCBmbGFncywgYWxsb2NfZmxhZ3MsIG9iamVjdCk7CiAJLyoKQEAgLTIzNjAsMTEgJiM0MzsyMzcxLDE1IEBAIF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgZ2ZwX3QgZmxhZ3MsCiAJICogY2hlY2sgc2hvdWxkIGJlIGFkZGVkIGJlZm9yZSBhbGxvY190YWdfYWRkKCkuCiAJICovCiAJaWYgKG9ial9leHRzKSB7Ci0JCXVuc2lnbmVkIGludCBvYmpfaWR4ID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIG9iamVjdCk7CiYjNDM7CQl1bmlvbiBjb2RldGFnX3JlZiAqcmVmOwogCiAJCWdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKLQkJb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2JqX2lkeCk7Ci0JCWFsbG9jX3RhZ19hZGQoJmFtcDtvYmpfZXh0LSZndDtyZWYsIGN1cnJlbnQtJmd0O2FsbG9jX3RhZywgcy0mZ3Q7c2l6ZSk7CiYjNDM7CiYjNDM7CQlvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBvYmplY3QpOwomIzQzOwkJcmVmID0gc2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKHNsYWIsIG9ial9leHQpOwomIzQzOwomIzQzOwkJYWxsb2NfdGFnX2FkZChyZWYsIGN1cnJlbnQtJmd0O2FsbG9jX3RhZywgcy0mZ3Q7c2l6ZSk7CiYjNDM7CiAJCXB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKIAl9IGVsc2UgewogCQlhbGxvY190YWdfc2V0X2luYWNjdXJhdGUoY3VycmVudC0mZ3Q7YWxsb2NfdGFnKTsKQEAgLTIzODQsNyAmIzQzOzIzOTksNiBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZAogX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsCiAJCQkgICAgICAgaW50IG9iamVjdHMpCiB7Ci0JaW50IGk7CiAJdW5zaWduZWQgbG9uZyBvYmpfZXh0czsKIAogCS8qIHNsYWItJmd0O29ial9leHRzIG1pZ2h0IG5vdCBiZSBOVUxMIGlmIGl0IHdhcyBjcmVhdGVkIGZvciBNRU1DRyBhY2NvdW50aW5nLiAqLwpAQCAtMjM5NiwxMCAmIzQzOzI0MTAsMTQgQEAgX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAKIAkJcmV0dXJuOwogCiAJZ2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpOwotCWZvciAoaSA9IDA7IGkgJmx0OyBvYmplY3RzOyBpJiM0MzsmIzQzOykgewotCQl1bnNpZ25lZCBpbnQgb2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHBbaV0pOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IG9iamVjdHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3Qgc2xhYm9ial9leHQgKmV4dDsKJiM0MzsKJiM0MzsJCWlmIChpc19rZmVuY2VfYWRkcmVzcyhwW2ldKSkKJiM0MzsJCQljb250aW51ZTsKIAotCQlhbGxvY190YWdfc3ViKCZhbXA7c2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpLSZndDtyZWYsIHMtJmd0O3NpemUpOwomIzQzOwkJZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwW2ldKTsKJiM0MzsJCWFsbG9jX3RhZ19zdWIoc2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKHNsYWIsIGV4dCksIHMtJmd0O3NpemUpOwogCX0KIAlwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7CiB9CkBAIC0yNDEyLDYgJiM0MzsyNDMwLDI1IEBAIGFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCwKIAkJX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAsIG9iamVjdHMpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBNYWtlIHN1cmUgdGhlIHN0YXRpYyBrZXkgdXNlZCBieSBzbGFiX29ial9leHRfaGFzX2NvZGV0YWcoKSByZWZsZWN0cyB0aGUKJiM0MzsgKiB2YWx1ZSBvZiAhbWVtX2FsbG9jX3Byb2ZpbGluZ19wZXJtYW5lbnRseV9kaXNhYmxlZCgpCiYjNDM7ICoKJiM0MzsgKiBBbnkgbGF0ZXIgbWVtIGFsbG9jIHByb2ZpbGluZyBzaHV0ZG93biB3b24mIzM5O3QgYmUgcmVmbGVjdGVkIGluIHRoZSBzdGF0aWMga2V5CiYjNDM7ICogYmVjYXVzZSBvYmpfZXh0cyB3aXRoIGNvZGV0YWdzIG1pZ2h0IGFscmVhZHkgZXhpc3QuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgX19pbml0IHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19pbml0KHZvaWQpCiYjNDM7ewomIzQzOwlib29sIG5lZWRfY29kZXRhZyA9ICFtZW1fYWxsb2NfcHJvZmlsaW5nX3Blcm1hbmVudGx5X2Rpc2FibGVkKCk7CiYjNDM7CiYjNDM7CWlmIChuZWVkX2NvZGV0YWcgIT0gc3RhdGljX2tleV9lbmFibGVkKCZhbXA7c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSkpIHsKJiM0MzsJCWlmIChuZWVkX2NvZGV0YWcpCiYjNDM7CQkJc3RhdGljX2JyYW5jaF9lbmFibGUoJmFtcDtzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfa2V5KTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlzdGF0aWNfYnJhbmNoX2Rpc2FibGUoJmFtcDtzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfa2V5KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKICNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtMjQyNiw2ICYjNDM7MjQ2MywxMCBAQCBhbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsCiB7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7fQomIzQzOwogI2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovCiAKIApAQCAtMjQ3MSw2ICYjNDM7MjUxMiw5IEBAIHZvaWQgbWVtY2dfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCwKIAlpZiAobGlrZWx5KCFvYmpfZXh0cykpCiAJCXJldHVybjsKIAomIzQzOwlpZiAoIXNsYWJfbmVlZHNfb2JqY2coc2xhYikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJZ2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpOwogCV9fbWVtY2dfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCwgb2JqZWN0cywgb2JqX2V4dHMpOwogCXB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKQEAgLTI0ODQsNyAmIzQzOzI1MjgsNiBAQCBib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpCiAJc3RydWN0IGttZW1fY2FjaGUgKnM7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJc3RydWN0IHNsYWIgKnNsYWI7Ci0JdW5zaWduZWQgbG9uZyBvZmY7CiAKIAlwYWdlID0gdmlydF90b19wYWdlKHApOwogCWlmIChQYWdlTGFyZ2VLbWFsbG9jKHBhZ2UpKSB7CkBAIC0yNTE3LDE2ICYjNDM7MjU2MCwxNSBAQCBib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpCiAJICogb2Ygc2xhYl9vYmpfZXh0cyBiZWluZyBhbGxvY2F0ZWQgZnJvbSB0aGUgc2FtZSBzbGFiIGFuZCB0aHVzIHRoZSBzbGFiCiAJICogYmVjb21pbmcgZWZmZWN0aXZlbHkgdW5mcmVlYWJsZS4KIAkgKi8KLQlpZiAoaXNfa21hbGxvY19ub3JtYWwocykpCiYjNDM7CWlmICghY2FjaGVfbmVlZHNfb2JqY2cocykpCiAJCXJldHVybiB0cnVlOwogCiAJLyogSWdub3JlIGFscmVhZHkgY2hhcmdlZCBvYmplY3RzLiAqLwogCW9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTsKIAlpZiAob2JqX2V4dHMpIHsKIAkJZ2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpOwotCQlvZmYgPSBvYmpfdG9faW5kZXgocywgc2xhYiwgcCk7Ci0JCW9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9mZik7Ci0JCWlmICh1bmxpa2VseShvYmpfZXh0LSZndDtvYmpjZykpIHsKJiM0MzsJCW9ial9leHQgPSBzbGFiX29ial9leHQocywgc2xhYiwgb2JqX2V4dHMsIHApOwomIzQzOwkJaWYgKHVubGlrZWx5KHNsYWJfb2JqX2V4dF9vYmpjZyhvYmpfZXh0KSkpIHsKIAkJCXB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKIAkJCXJldHVybiB0cnVlOwogCQl9CkBAIC0zMzkxLDEwICYjNDM7MzQzMywxNSBAQCBzdGF0aWMgc3RydWN0IHNsYWIgKmFsbG9jYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLAogCQlzdGF0KHMsIE9SREVSX0ZBTExCQUNLKTsKIAl9CiAKJiM0MzsJLyogSW5pdGlhbGl6ZXMgZnJvemVuLCBpbnVzZSwgYW5kIGFueSBleHRyYSA2NGJpdC1vbmx5IGZsYWdzICovCiYjNDM7CXNsYWItJmd0O2NvdW50ZXJzID0gMDsKJiM0MzsKIAlzbGFiLSZndDtvYmplY3RzID0gb29fb2JqZWN0cyhvbyk7Ci0Jc2xhYi0mZ3Q7aW51c2UgPSAwOwotCXNsYWItJmd0O2Zyb3plbiA9IDA7CiAKJiM0MzsjaWZkZWYgQ09ORklHXzY0QklUCiYjNDM7CWlmIChjYWNoZV9uZWVkc19vYmpjZyhzKSkKJiM0MzsJCXNsYWItJmd0O29ial9leHRzX25lZWRzX29iamNnID0gMTsKJiM0MzsjZW5kaWYKIAlzbGFiLSZndDtzbGFiX2NhY2hlID0gczsKIAogCWthc2FuX3BvaXNvbl9zbGFiKHNsYWIpOwpAQCAtNjUyNiw3ICYjNDM7NjU3Myw3IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IHNsYWJfa3NpemUoc3RydWN0IHNsYWIgKnNsYWIpCiAJICovCiAJaWYgKHMtJmd0O2ZsYWdzICZhbXA7IChTTEFCX1RZUEVTQUZFX0JZX1JDVSB8IFNMQUJfU1RPUkVfVVNFUikpCiAJCXJldHVybiBzLSZndDtpbnVzZTsKLQllbHNlIGlmIChvYmpfZXh0c19pbl9vYmplY3Qocywgc2xhYikpCiYjNDM7CWVsc2UgaWYgKG9ial9leHRzX2luX29iamVjdChzbGFiKSkKIAkJcmV0dXJuIHMtJmd0O2ludXNlOwogCS8qCiAJICogRWxzZSB3ZSBjYW4gdXNlIGFsbCB0aGUgcGFkZGluZyBldGMgZm9yIHRoZSBhbGxvY2F0aW9uCkBAIC03OTI5LDcgJiM0Mzs3OTc2LDcgQEAgc3RhdGljIGludCBjYWxjdWxhdGVfc2l6ZXMoc3RydWN0IGttZW1fY2FjaGVfYXJncyAqYXJncywgc3RydWN0IGttZW1fY2FjaGUgKnMpCiAJYWxpZ25lZF9zaXplID0gQUxJR04oc2l6ZSwgcy0mZ3Q7YWxpZ24pOwogI2lmIGRlZmluZWQoQ09ORklHX1NMQUJfT0JKX0VYVCkgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR182NEJJVCkKIAlpZiAoc2xhYl9hcmdzX3VubWVyZ2VhYmxlKGFyZ3MsIHMtJmd0O2ZsYWdzKSAmYW1wOyZhbXA7Ci0JCQkoYWxpZ25lZF9zaXplIC0gc2l6ZSAmZ3Q7PSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSkpCiYjNDM7CQkJKGFsaWduZWRfc2l6ZSAtIHNpemUgJmd0Oz0gY2FjaGVfb2JqX2V4dF9zaXplKHMpKSkKIAkJcy0mZ3Q7ZmxhZ3MgfD0gU0xBQl9PQkpfRVhUX0lOX09CSjsKICNlbmRpZgogCXNpemUgPSBhbGlnbmVkX3NpemU7CkBAIC04NTM5LDYgJiM0Mzs4NTg2LDggQEAgdm9pZCBfX2luaXQga21lbV9jYWNoZV9pbml0KHZvaWQpCiAJCWJvb3Rfa21lbV9jYWNoZV9ub2RlOwogCWludCBub2RlOwogCiYjNDM7CXNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19pbml0KCk7CiYjNDM7CiAJaWYgKGRlYnVnX2d1YXJkcGFnZV9taW5vcmRlcigpKQogCQlzbHViX21heF9vcmRlciA9IDA7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU2xhYiBPYmplY3QgRXh0ZW5zaW9uIE9wdGltaXphdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdHdlYWtpbmcgaG93IGBzdHJ1Y3Qgc2xhYm9ial9leHRgIGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBhbmQgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIOKAkyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgZ29hbCBpcyB0byBvcHRpbWl6ZSB0aGUgc3RydWN0dXJlIGJ5IHVzaW5nIGEgdW5pb24gdG8gc3RvcmUgcG9pbnRlcnMgdG8gYG9iamNnYCBhbmQgYGNvZGV0YWdfcmVmYCwgb3IgYWxsb2NhdGluZyBzcGFjZSBmb3IgdGhlbSBvbmx5IHdoZW4gdGhleSYjMzk7cmUgYWN0dWFsbHkgbmVlZGVkLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBhIGNvbW1vbiBzdHJhdGVneSBmb3IgcmVkdWNpbmcgbWVtb3J5IG92ZXJoZWFkIGluIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGFyZWFzIGxpa2UgdGhlIHNsYWIgYWxsb2NhdG9yLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBTTEFCX01BWV9BQ0NPVU5UYCBpcyBhIG5pY2UgdG91Y2gsIHRvbzsgaXQgYWRkcyBhIGJpdCBtb3JlIGZpbmUtZ3JhaW5lZCBjb250cm9sLgoKRnVuY3Rpb25hbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGJyZWFrIGFueXRoaW5nLiBJdCBkZWZpbml0ZWx5IHRvdWNoZXMgY29yZSBzbGFiIGFsbG9jYXRvciBsb2dpYyBhbmQgbWVtY2cgYWNjb3VudGluZywgc28gYW55IG1pc3N0ZXBzIGhlcmUgY291bGQgaGF2ZSBwcmV0dHkgd2lkZS1yZWFjaGluZyBjb25zZXF1ZW5jZXMuIEFuZCwgeWVhaCwgZ2l2ZW4gaG93IGhlYXZpbHkgc2xhYiBhbGxvY2F0aW9uIGlzIHVzZWQgdGhyb3VnaG91dCB0aGUga2VybmVsLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlLiBXb3J0aCBhIGZ1enppbmcgY2FtcGFpZ24gdG8gc2VlIGlmIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9ycyBhcmlzZS4KCk5vdywgbGV04oCZcyBwaW5wb2ludCB0aGUgc3BlY2lmaWMgYXJlYXMgdG8gc2NydXRpbml6ZS4gSSYjMzk7dmUgZ290IGEgbGlzdCBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zOiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AsIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rYCwgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2AsIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYCwgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgLCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AsIGBrZmVuY2VfaW5pdF9wb29sYCwgYF9fa2ZlbmNlX2ZyZWVgLCBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYCwgYGttZW1fY2FjaGVfY3JlYXRlX2FyZ3NgLCBhbmQgYG5ld19rbWFsbG9jX2NhY2hlYC4gQWxyaWdodCwgbGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgbW0vc2x1Yi5jYCBhbmQgc3BlY2lmaWNhbGx5LCB0aGF0IGBhbGxvY19zbGFiX29ial9leHRzYCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19zbGFiX29ial9leHRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz0yMTM0PXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jLTIxMzgtXG5tbS9zbHViLmM6MjEzOTppbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjE0MC1cdFx0XHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9zbHViLmM9MjIyOD1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXG4tLVxubW0vc2x1Yi5jLTIyNTktICovXG5tbS9zbHViLmM6MjI2MDpzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbm1tL3NsdWIuYy0yMjYxLXtcbi0tXG5tbS9zbHViLmM9MjMwNz1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy0yMzEwLVxubW0vc2x1Yi5jOjIzMTE6c3RhdGljIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMzEyLVx0XHRcdCAgICAgICBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9zbHViLmM9MjMxNz1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXG4tLVxubW0vc2x1Yi5jLTIzMjAtXG5tbS9zbHViLmM6MjMyMTpzdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMzIyLVx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmM9MjMzMT1wcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4tLVxubW0vc2x1Yi5jLTIzMzQtXHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXHUwMDI2XHUwMDI2XG5tbS9zbHViLmM6MjMzNTpcdCAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBhbGxvY19mbGFncykpIHtcbm1tL3NsdWIuYy0yMzM2LVx0XHRwcl93YXJuX29uY2UoXCYjMzQ7JXMsICVzOiBGYWlsZWQgdG8gY3JlYXRlIHNsYWIgZXh0ZW5zaW9uIHZlY3RvciFcXG5cJiMzNDssXG4tLVxubW0vc2x1Yi5jPTMzNzI9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGFjY291bnRfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgaW50IG9yZGVyLFxuLS1cbm1tL3NsdWIuYy0zMzc4LVx0XHRcdCFzbGFiX29ial9leHRzKHNsYWIpKVxubW0vc2x1Yi5jOjMzNzk6XHRcdGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZ2ZwLFxubW0vc2x1Yi5jLTMzODAtXHRcdFx0XHQgICAgYWxsb2NfZmxhZ3MgfCBTTEFCX0FMTE9DX05FV19TTEFCKTtcbi0tXG5tbS9zbHViLmM9MzQwMT1zdGF0aWMgc3RydWN0IHNsYWIgKmFsbG9jYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuLS1cbm1tL3NsdWIuYy0zNDU2LVx0ICovXG5tbS9zbHViLmM6MzQ1NzpcdGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkocywgc2xhYik7XG5tbS9zbHViLmMtMzQ1OC1cdGFjY291bnRfc2xhYihzbGFiLCBvb19vcmRlcihvbyksIHMsIGZsYWdzLCBhbGxvY19mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MTQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBTbGFiIEFsbG9jYXRvciBIb29rcyBpbiBtZW1jb250cm9sLmMqKgoKQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCAobWVtY2cpIHN5c3RlbSBhbmQgdGhlIHNsYWIgYWxsb2NhdG9yLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSBtZW1jZyBob29rcyBpbnRvIHRoZSBzbGFiIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgcHJvY2Vzc2VzLiBUaGF0IG1lYW5zIGRpZ2dpbmcgaW50byBgbW0vbWVtY29udHJvbC5jYCwgc2luY2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBtZW1jZyBsb2dpYyByZXNpZGVzLCBhcyBhIHN0YXJ0aW5nIHBvaW50LgoKTXkgcHJpbWFyeSB0YXJnZXRzIGFyZSB0aGUgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgIGFuZCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AgZnVuY3Rpb25zLiBUaGUgbmFtZXMgdGhlbXNlbHZlcyBhcmUgYSBzdHJvbmcgY2x1ZS4gYHBvc3RfYWxsb2NgIGltcGxpZXMgc29tZXRoaW5nIHRoYXQgaGFwcGVucyBhZnRlciBhIHNsYWIgb2JqZWN0IGlzIGFsbG9jYXRlZC4gVGhlIGBmcmVlX2hvb2tgIGlzIHdoYXQgcnVucyBhZnRlciBhIHNsYWIgaXMgZnJlZWQuIFRoZXNlIGhvb2tzIGFyZSBsaWtlbHkgdGhlIGVudHJ5IHBvaW50cyB3aGVyZSBtZW1jZyB0cmFja3MgbWVtb3J5IHVzYWdlIHRpZWQgdG8gc2xhYnMsIGFjY291bnRpbmcgZm9yIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gZGlmZmVyZW50IGNvbnRyb2wgZ3JvdXBzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSAqaG93KiB0aGVzZSBob29rcyBhcmUgdXNlZCBhbmQgd2hhdCBjb250ZXh0IHRoZXkgb3BlcmF0ZSB3aXRoaW4uIEl0JiMzOTtsbCBiZSBlc3NlbnRpYWwgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgaG9va3MgYXJlIHJlZ2lzdGVyZWQgYW5kIGNhbGxlZCBpbiB0aGUgc2xhYiBhbGxvY2F0b3ImIzM5O3MgZnVuY3Rpb25zLiBJIGFudGljaXBhdGUgdGhlIGRldGFpbHMgYXJlIGVtYmVkZGVkIGluc2lkZSB0aGUgYWxsb2NhdG9yJiMzOTtzIHNvdXJjZSBjb2RlLCBwb3NzaWJseSBpbiBmdW5jdGlvbnMgbGlrZSBga21lbV9jYWNoZV9hbGxvY2Agb3IgYGttZW1fY2FjaGVfZnJlZWAuIEkgZXhwZWN0IHRoYXQgZmluZGluZyBhbmQgc3R1ZHlpbmcgaG93IHRoZXNlIGhvb2tzIGFyZSByZWdpc3RlcmVkIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBhbGxvY2F0aW9uIGNoYW5nZXMgYXJlIHRyYWNrZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MzUyOT1zdGF0aWMgaW5saW5lIHNpemVfdCBvYmpfZnVsbF9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNTM3LVxubW0vbWVtY29udHJvbC5jOjM1Mzg6Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbm1tL21lbWNvbnRyb2wuYy0zNTM5LVx0XHRcdFx0ICBnZnBfdCBmbGFncywgdW5zaWduZWQgaW50IHNsYWJfYWxsb2NfZmxhZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwMzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyBTbGFiIEFsbG9jYXRpb24gaW4gdGhlIE1lbW9yeSBDb250cm9sbGVyKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IG1lbW9yeSBjb250cm9sLCBzcGVjaWZpY2FsbHkgaG93IHNsYWJzIGFyZSBtYW5hZ2VkIHdpdGhpbiBhIG1lbWNnIGNvbnRleHQuIFRoZSB0YXNrIGF0IGhhbmQgbGlrZWx5IGludm9sdmVzIGZyZWVpbmcgc29tZSBzbGFiIG9iamVjdHMsIGFuZCB0aGF0IG1lYW5zIGRpdmluZyBpbnRvIHRoZSBtZWNoYW5pY3Mgb2YgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgLiBUaGF0IGZ1bmN0aW9uJiMzOTtzIG5hbWUgaXMgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBpdCYjMzk7cyBpbnZvbHZlZCBpbiwgd2VsbCwgKmhvb2tpbmcqIGludG8gdGhlIHNsYWIgZnJlZWluZyBwcm9jZXNzLCBsaWtlbHkgdG8gcGVyZm9ybSBhY2NvdW50aW5nIG9yIGVuZm9yY2VtZW50IHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cHMuIExldCYjMzk7cyBzdGFydCBieSBjcmFja2luZyBvcGVuIGBtbS9tZW1jb250cm9sLmNgIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBoYXBwZW5pbmcgaW5zaWRlIHRoYXQgZnVuY3Rpb24uIFRoYXQgZmlsZSBpcyB0aGUgY2VudHJhbCBwbGFjZSB0byBiZSBmb3IgdGhpcyBraW5kIG9mIGludmVzdGlnYXRpb24uIEl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGUgbWVtY2cgc3RydWN0dXJlIGFuZCBhc3NvY2lhdGVkIGJvb2trZWVwaW5nIGFyZSBpbnRlZ3JhdGVkIGludG8gdGhlIHN0YW5kYXJkIHNsYWIgZnJlZWluZyBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWVtY2dfc2xhYl9mcmVlX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTM1Mzg9Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzYzMi1cbm1tL21lbWNvbnRyb2wuYzozNjMzOnZvaWQgX19tZW1jZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG5tbS9tZW1jb250cm9sLmMtMzYzNC1cdFx0XHQgICAgdm9pZCAqKnAsIGludCBvYmplY3RzLCB1bnNpZ25lZCBsb25nIG9ial9leHRzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDExCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gU2xhYiBBbGxvY2F0aW9uIFRhZ2dpbmcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNsYWIgYWxsb2NhdG9yJiMzOTtzIHRhZ2dpbmcgaG9va3MuIExldCYjMzk7cyBoZWFkIHN0cmFpZ2h0IGZvciB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgbW0vc2x1Yi5jYC4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2tgIGFuZCBgX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rYCBmdW5jdGlvbnMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gaG9va3MgZm9yIG1lbW9yeSB0YWdnaW5nIGFyZSBhY3R1YWxseSBpbXBsZW1lbnRlZCBhdCB0aGUgc2xhYiBsZXZlbC4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gZXhhbWluZSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSBob29rcyBhbmQgdGhlIHVuZGVybHlpbmcgc2xhYiBtYW5hZ2VtZW50LiBBcmUgdGhleSBpbnRlZ3JhdGVkIGRpcmVjdGx5IGludG8gdGhlIGBrbWVtX2NhY2hlYCBzdHJ1Y3R1cmVzPyBBcmUgdGhleSBjYWxsZWQgaW5saW5lLCBvciBhcmUgdGhleSBtYW5hZ2VkIHZpYSBhIGRpZmZlcmVudCBtZWNoYW5pc20/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIHNlcXVlbmNlIG9mIGV2ZW50cyB3aGVuIG1lbW9yeSB0YWdnaW5nIGlzIGludm9sdmVkIGluIHNsYWIgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLiBJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSG93IG11Y2ggb3ZlcmhlYWQgZG8gdGhlc2UgaG9va3MgaW50cm9kdWNlPyBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbnMgaW4gcGxhY2UgdG8gbWluaW1pemUgdGhlIHBlcmZvcm1hbmNlIGhpdD8gVGhpcyBpcyB3aGVyZSB0aGUgZGV2aWwgaXMgaW4gdGhlIGRldGFpbHMuIEkga25vdyBgc2x1Yi5jYCBpcyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRob3NlIGFuc3dlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTIzNDY9c3RhdGljIG5vaW5saW5lIHZvaWRcbm1tL3NsdWIuYzoyMzQ3Ol9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgZ2ZwX3QgZmxhZ3MsXG5tbS9zbHViLmMtMjM0OC1cdFx0XHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9zbHViLmM9MjM5MD1hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtMjM5My1cdGlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSlcbm1tL3NsdWIuYzoyMzk0Olx0XHRfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHMsIG9iamVjdCwgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcbm1tL3NsdWIuYy0yMzk1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gU2xhYiBBbGxvY2F0aW9uIFRhZ2dpbmcqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSB0YWdnaW5nIG1lY2hhbmlzbXMgd2l0aGluIHRoZSBzbGFiIGFsbG9jYXRvciwgc3BlY2lmaWNhbGx5IGhvdyBmcmVlaW5nIG1lbW9yeSBpcyBoYW5kbGVkLiBUaGUgcXVpY2tlc3Qgcm91dGUgaXMgdXN1YWxseSB0byBqdW1wIGRpcmVjdGx5IGludG8gdGhlIHNvdXJjZSBjb2RlLCBzbyBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBgbW0vc2x1Yi5jYC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB0aGUgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2AgZnVuY3Rpb24uIFRoaXMgaG9vayBsaWtlbHkgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gdGhlIHNwZWNpZmljIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHRhZ2dpbmcgdGhhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4uIFVuZGVyc3RhbmRpbmcgaXRzIGltcGxlbWVudGF0aW9uIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHRhZ2dpbmcgc3RyYXRlZ3kgYW5kIGxpa2VseSBzaGVkcyBsaWdodCBvbiBob3cgYWxsb2NhdGlvbiB0cmFja2luZyBhbmQgaW50ZWdyaXR5IGNoZWNraW5nIGFyZSBwZXJmb3JtZWQgZHVyaW5nIHNsYWIgZnJlZWluZy4gSSBleHBlY3QgaXQmIzM5O3MgZ29pbmcgdG8gYmUgYSBrZXkgZnVuY3Rpb24gaW4gaGFuZGxpbmcgdGFnZ2VkIHNsYWJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTIzOTg9c3RhdGljIG5vaW5saW5lIHZvaWRcbm1tL3NsdWIuYzoyMzk5Ol9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxubW0vc2x1Yi5jLTI0MDAtXHRcdFx0ICAgICAgIGludCBvYmplY3RzKVxuLS1cbm1tL3NsdWIuYz0yNDI2PWFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbi0tXG5tbS9zbHViLmMtMjQyOS1cdGlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSlcbm1tL3NsdWIuYzoyNDMwOlx0XHRfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCwgb2JqZWN0cyk7XG5tbS9zbHViLmMtMjQzMS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Mzk0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkRpdmluZyBpbnRvIFNsYWIgQWNjb3VudGluZyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIHNsYWIgYWNjb3VudGluZyB3aXRoaW4gdGhlIG1lbW9yeSBjb250cm9sbGVyLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VgLiBUaGlzIGlzIHdoZXJlIHRoZSBjcnVjaWFsIHdvcmsgaGFwcGVucyAqYWZ0ZXIqIGEgc2xhYiBhbGxvY2F0aW9uIGhhcyBjb21wbGV0ZWQuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBtZW1vcnkgY29udHJvbCBncm91cHMgYXJlIHVwZGF0ZWQgYWZ0ZXIgbWVtb3J5IGhhcyBiZWVuIGNsYWltZWQgZnJvbSB0aGUgc2xhYiBhbGxvY2F0b3IuIElzIGl0IGEgZ29vZCBpZGVhIHRvIGNoZWNrIHRoaXMgZmlsZSBmaXJzdD8gWWVzLCB0aGF0IGlzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludC4gTGV0JiMzOTtzIHNlZSBob3cgbWVtb3J5IHVzYWdlIGFuZCBsaW1pdHMgYXJlIGJlaW5nIGFkanVzdGVkLiBJIHdhbnQgdG8gc2VlIHRoZSBkZXRhaWxzIG9mIHRoZSBwb3N0LWNoYXJnZSBhY2NvdW50aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNnX3NsYWJfcG9zdF9jaGFyZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU5OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCBleHByZXNzZWQgYXMgdGhvdWdoIEkmIzM5O20gdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIE1lbW9yeSBBY2NvdW50aW5nIHdpdGhpbiB0aGUgS2VybmVsKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgYWNjb3VudGluZyByZWxhdGVkIHRvIFNMVUIgY2FjaGVzIGFuZCBjb250cm9sIGdyb3Vwcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG1lbW9yeSBjaGFyZ2VzIGFyZSBoYW5kbGVkIGFmdGVyIGFuIGFsbG9jYXRpb24uIE15IGluaXRpYWwgaHVudCBsZWFkcyBtZSB0byBgbW0vc2x1Yi5jYC4gTm93LCB3aGVyZSBleGFjdGx5IGRvZXMgdGhlIHBvc3QtY2hhcmdlIGxvZ2ljIHJlc2lkZT8gVGhlIGZ1bmN0aW9uIG5hbWUsIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYCwgc3VnZ2VzdHMgdGhpcyBpcyBwcmVjaXNlbHkgd2hhdCBJJiMzOTttIGFmdGVyLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgb2YgdHJhY2tpbmcgbWVtb3J5IHVzYWdlIHdpdGhpbiBjb250cm9sIGdyb3VwcyBoYXBwZW5zIGFmdGVyIGEgc2xhYiBhbGxvY2F0aW9uIG9yIGZyZWVpbmcuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMgZnVuY3Rpb24gYW5kIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgbWVtY2cgaW5mcmFzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNnX3NsYWJfcG9zdF9jaGFyZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTI1MjM9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXG5tbS9zbHViLmM6MjUyNDpib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXG5tbS9zbHViLmMtMjUyNS17XG4tLVxubW0vc2x1Yi5jPTI1OTE9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbi0tXG5tbS9zbHViLmMtMjU5NS1cbm1tL3NsdWIuYzoyNTk2OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxubW0vc2x1Yi5jLTI1OTcte1xuLS1cbm1tL3NsdWIuYz01MDA1PWJvb2wga21lbV9jYWNoZV9jaGFyZ2Uodm9pZCAqb2JqcCwgZ2ZwX3QgZ2ZwZmxhZ3MpXG4tLVxubW0vc2x1Yi5jLTUwMDktXG5tbS9zbHViLmM6NTAxMDpcdHJldHVybiBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKG9ianAsIGdmcGZsYWdzKTtcbm1tL3NsdWIuYy01MDExLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwOTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipLRkVOQ0UgRGVlcCBEaXZlOiBJbml0aWFsaXphdGlvbiBhbmQgRGVhbGxvY2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBLRkVOQ0UmIzM5O3MgY29yZSB3b3JraW5ncywgc3BlY2lmaWNhbGx5IGhvdyBpdCBpbml0aWFsaXplcyBpdHMgbWVtb3J5IHBvb2wgYW5kIHRoZSBtZWNoYW5pc21zIGl0IHVzZXMgZm9yIGZyZWVpbmcgbWVtb3J5LiBUaGUgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRob3NlIGZ1bmN0aW9ucyBpcyBpbiB0aGUgYG1tL2tmZW5jZS9jb3JlLmNgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgZG93biB0aGUgYGtmZW5jZV9pbml0X3Bvb2xgIGZ1bmN0aW9uLCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcG9vbCBpdHNlbGYgaXMgc2V0IHVwLCBhbmQgSSB3aWxsIGFsc28gbmVlZCB0byByZXZpZXcgYF9fa2ZlbmNlX2ZyZWVgIHRvIGdldCB0aGUgcnVuZG93biBvbiBob3cgbWVtb3J5IGlzIGFjdHVhbGx5IHJlbGlucXVpc2hlZCBieSBLRkVOQ0UuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgcGljdHVyZSBJIG5lZWQgdG8gYW5hbHl6ZSBpdHMgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tmZW5jZV9pbml0X3Bvb2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9rZmVuY2UvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2tmZW5jZS9jb3JlLmM9NTk5PXN0YXRpYyB2b2lkIHJjdV9ndWFyZGVkX2ZyZWUoc3RydWN0IHJjdV9oZWFkICpoKVxuLS1cbm1tL2tmZW5jZS9jb3JlLmMtNjEwLSAqL1xubW0va2ZlbmNlL2NvcmUuYzo2MTE6c3RhdGljIHVuc2lnbmVkIGxvbmcga2ZlbmNlX2luaXRfcG9vbCh2b2lkKVxubW0va2ZlbmNlL2NvcmUuYy02MTItXHRfX2NvbnRleHRfdW5zYWZlKC8qIGNvbnN0cnVjdG9yICovKVxuLS1cbm1tL2tmZW5jZS9jb3JlLmMtNjE2LVxubW0va2ZlbmNlL2NvcmUuYzo2MTc6XHRpZiAoIWFyY2hfa2ZlbmNlX2luaXRfcG9vbCgpKVxubW0va2ZlbmNlL2NvcmUuYy02MTgtXHRcdHJldHVybiAodW5zaWduZWQgbG9uZylfX2tmZW5jZV9wb29sO1xuLS1cbm1tL2tmZW5jZS9jb3JlLmMtNzE5LVxubW0va2ZlbmNlL2NvcmUuYzo3MjA6c3RhdGljIGJvb2wgX19pbml0IGtmZW5jZV9pbml0X3Bvb2xfZWFybHkodm9pZClcbm1tL2tmZW5jZS9jb3JlLmMtNzIxLXtcbi0tXG5tbS9rZmVuY2UvY29yZS5jLTcyNi1cbm1tL2tmZW5jZS9jb3JlLmM6NzI3Olx0YWRkciA9IGtmZW5jZV9pbml0X3Bvb2woKTtcbm1tL2tmZW5jZS9jb3JlLmMtNzI4LVxuLS1cbm1tL2tmZW5jZS9jb3JlLmM9OTk0PXZvaWQgX19pbml0IGtmZW5jZV9pbml0KHZvaWQpXG4tLVxubW0va2ZlbmNlL2NvcmUuYy0xMDAxLVxubW0va2ZlbmNlL2NvcmUuYzoxMDAyOlx0aWYgKCFrZmVuY2VfaW5pdF9wb29sX2Vhcmx5KCkpIHtcbm1tL2tmZW5jZS9jb3JlLmMtMTAwMy1cdFx0cHJfZXJyKFwmIzM0OyVzIGZhaWxlZFxcblwmIzM0OywgX19mdW5jX18pO1xuLS1cbm1tL2tmZW5jZS9jb3JlLmM9MTAxMD1zdGF0aWMgaW50IGtmZW5jZV9pbml0X2xhdGUodm9pZClcbi0tXG5tbS9rZmVuY2UvY29yZS5jLTEwNTAtXHRtZW16ZXJvX2V4cGxpY2l0KGtmZW5jZV9tZXRhZGF0YV9pbml0LCBLRkVOQ0VfTUVUQURBVEFfU0laRSk7XG5tbS9rZmVuY2UvY29yZS5jOjEwNTE6XHRhZGRyID0ga2ZlbmNlX2luaXRfcG9vbCgpO1xubW0va2ZlbmNlL2NvcmUuYy0xMDUyLVx0aWYgKCFhZGRyKSB7XG4tLVxubW0va2ZlbmNlL2NvcmUuYz0xMDkwPXZvaWQga2ZlbmNlX3NodXRkb3duX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL2tmZW5jZS9jb3JlLmMtMTA5NS1cbm1tL2tmZW5jZS9jb3JlLmM6MTA5NjpcdC8qIFBhaXJzIHdpdGggcmVsZWFzZSBpbiBrZmVuY2VfaW5pdF9wb29sKCkuICovXG5tbS9rZmVuY2UvY29yZS5jLTEwOTctXHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2a2ZlbmNlX21ldGFkYXRhKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5MjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYF9fa2ZlbmNlX2ZyZWVgIHdvcmtzLiBJIGtub3cgdGhhdCYjMzk7cyBwYXJ0IG9mIHRoZSBLRkVOQ0UgKEtlcm5lbCBFbGVjdHJpYyBGZW5jZSkgcHJvamVjdCwgc28gdGhlIGxpa2VseSBzdGFydGluZyBwb2ludCBpcyBpbiB0aGUgY29yZSBLRkVOQ0UgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmF2aWdhdGUgdG8gdGhlIGBtbS9rZmVuY2UvYCBkaXJlY3RvcnkgYW5kIGZpbmQgYGNvcmUuY2AuIFRoYXQgc2hvdWxkIGNvbnRhaW4gdGhlIGRlZmluaXRpb24gZm9yIGBfX2tmZW5jZV9mcmVlYCwgYW5kIGxpa2VseSB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBJIG5lZWQuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgZ2V0IGEgaGFuZGxlIG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBtZW1vcnkgZGVhbGxvY2F0aW9uIHBhdGggd2l0aGluIEtGRU5DRS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19rZmVuY2VfZnJlZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2tmZW5jZS9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2ZlbmNlL2NvcmUuYz0xMjM5PXZvaWQgKmtmZW5jZV9vYmplY3Rfc3RhcnQoY29uc3Qgdm9pZCAqYWRkcilcbi0tXG5tbS9rZmVuY2UvY29yZS5jLTEyNDktXG5tbS9rZmVuY2UvY29yZS5jOjEyNTA6dm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXG5tbS9rZmVuY2UvY29yZS5jLTEyNTEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIxNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIE1lbW9yeSBDb250cm9sIHdpdGggYG1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYmAqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgY2dyb3VwcyBhbmQgc3BlY2lmaWNhbGx5IGhvdyB0aGUga2VybmVsIHRyYWNrcyBtZW1vcnkgdXNhZ2UgZnJvbSBzbGFiIGFsbG9jYXRpb25zLiBUbyB1bmRlcnN0YW5kIHRoaXMgcHJvcGVybHksIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBtZSBpcyBgbW0vbWVtY29udHJvbC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBrZXJuZWwgYXNzb2NpYXRlcyBhIHNsYWIgb2JqZWN0IHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgbWVtb3J5IGNncm91cCwgYW5kIGBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWJgIGlzIHRoZSBvYnZpb3VzIGZ1bmN0aW9uIHRvIGludmVzdGlnYXRlLiBJdCBzZWVtcyBsaWtlbHkgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gdGhlIHRyYWNraW5nIHByb2Nlc3M7IEkgbmVlZCB0byBsb29rIGNsb3NlbHkgdG8gc2VlIGV4YWN0bHkgaG93IGl0IG1hcHMgYSBzbGFiIG9iamVjdCYjMzk7cyBhbGxvY2F0aW9uIGJhY2sgdG8gYSBzcGVjaWZpYyBjZ3JvdXAuIElzIGl0IHVzaW5nIHRoZSBzbGFiJiMzOTtzIG1ldGFkYXRhPyBPciBpcyB0aGVyZSBzb21lIG90aGVyIG1hZ2ljIGludm9sdmVkPyBJIGV4cGVjdCB0byBmaW5kIHNvbWUgY3JpdGljYWwgcG9pbnRlcnMgb3IgbG9va3VwcyBoZXJlLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBhIGNvcm5lcnN0b25lIGZvciBhY2N1cmF0ZSBhY2NvdW50aW5nLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBpbm5lciB3b3JraW5ncyBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQuIExldCYjMzk7cyBzZWUgaG93IGl0IHdvcmtzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTI4NTg9c3RhdGljIF9fYWx3YXlzX2lubGluZVxubW0vbWVtY29udHJvbC5jOjI4NTk6c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqcClcbm1tL21lbWNvbnRyb2wuYy0yODYwLXtcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjg5OD1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ZpcnQodm9pZCAqcClcbi0tXG5tbS9tZW1jb250cm9sLmMtMjkwNi1cdGlmIChzbGFiKVxubW0vbWVtY29udHJvbC5jOjI5MDc6XHRcdHJldHVybiBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWIoc2xhYiwgcCk7XG5tbS9tZW1jb250cm9sLmMtMjkwOC1cdHJldHVybiBmb2xpb19tZW1jZ19jaGVjayh2aXJ0X3RvX2ZvbGlvKHApKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2OTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIGluIHRoZSBLZXJuZWwqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGF0IGBtbS9zbGFiX2NvbW1vbi5jYC4gSSBrbm93IHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgc2xhYiBhbGxvY2F0b3IgZnVuY3Rpb25zIHJlc2lkZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NgIGFuZCBgbmV3X2ttYWxsb2NfY2FjaGVgIHdvcmsuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciByb2xlcyBpbiBpbml0aWFsaXppbmcgYW5kIG1hbmFnaW5nIHRoZXNlIGttZW0gY2FjaGVzIGJlY2F1c2UgdGhvc2UgYXJlIHRoZSBmb3VuZGF0aW9uIGZvciBlZmZpY2llbnQga2VybmVsIG1lbW9yeSBhbGxvY2F0aW9uLiBVbmRlcnN0YW5kaW5nIGhvdyB0aG9zZSBjYWNoZXMgYXJlIHNldHVwIGlzIGtleSB0byBpZGVudGlmeWluZyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIG1lbW9yeS1yZWxhdGVkIGJ1Z3MuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgaW50ZXJhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fa21lbV9jYWNoZV9jcmVhdGVfYXJncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsYWJfY29tbW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2xhYl9jb21tb24uYz0yNjc9X19rbWVtX2NhY2hlX2FsaWFzKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBzaXplLCBzbGFiX2ZsYWdzX3QgZmxhZ3MsXG4tLVxubW0vc2xhYl9jb21tb24uYy0yOTEtLyoqXG5tbS9zbGFiX2NvbW1vbi5jOjI5MjogKiBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MgLSBDcmVhdGUgYSBrbWVtIGNhY2hlLlxubW0vc2xhYl9jb21tb24uYy0yOTMtICogQG5hbWU6IEEgc3RyaW5nIHdoaWNoIGlzIHVzZWQgaW4gL3Byb2Mvc2xhYmluZm8gdG8gaWRlbnRpZnkgdGhpcyBjYWNoZS5cbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTMxNy0gKi9cbm1tL3NsYWJfY29tbW9uLmM6MzE4OnN0cnVjdCBrbWVtX2NhY2hlICpfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MoY29uc3QgY2hhciAqbmFtZSxcbm1tL3NsYWJfY29tbW9uLmMtMzE5LVx0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG9iamVjdF9zaXplLFxuLS1cbm1tL3NsYWJfY29tbW9uLmMtNDA4LX1cbm1tL3NsYWJfY29tbW9uLmM6NDA5OkVYUE9SVF9TWU1CT0woX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzKTtcbm1tL3NsYWJfY29tbW9uLmMtNDEwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE3MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IEV4YW1pbmluZyBhIGBrbWFsbG9jYCBDYWNoZSoqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgYSBuZXcgYGttYWxsb2NfY2FjaGVgLCBhbmQgaW1tZWRpYXRlbHksIG15IG1pbmQgc3RhcnRzIHRpY2tpbmcuIFRoZSBpbXBsaWNhdGlvbnMgYXJlIGNsZWFyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudC4gSXMgdGhpcyBmb3IgYSBzcGVjaWZpYyBkcml2ZXIsIGEgY29yZSBzdWJzeXN0ZW0sIG9yIGEgbW9yZSBnZW5lcmFsIHVzZSBjYXNlPyBUaGUgbmFtZSBpdHNlbGYgb2Z0ZW4gb2ZmZXJzIGNsdWVzLCBzbyBJJiMzOTtsbCBiZSBkaXNzZWN0aW5nIHRoYXQgdmVyeSBjYXJlZnVsbHkgdG8gaWRlbnRpZnkgaXRzIHJvbGUuIEkgbmVlZCB0byBiZSBhc2tpbmcgbXlzZWxmIGFib3V0IHRoZSBpbnRlbmRlZCBzaXplIGNsYXNzIGFuZCBpdHMgcmVsYXRpb24gdG8gc2xhYiBjYWNoZXMgaW4gdXNlIGVsc2V3aGVyZS4KCk15IGltbWVkaWF0ZSBjb25jZXJucyBhcmUgYXJvdW5kIGVmZmljaWVuY3kgYW5kIGZyYWdtZW50YXRpb24uIElzIHRoaXMgY2FjaGUgYXBwcm9wcmlhdGVseSBzaXplZCBmb3IgaXRzIGV4cGVjdGVkIHdvcmtsb2FkPyBIYXMgdGhlIGRlc2lnbiBjb25zaWRlcmVkIHRoZSBwb3RlbnRpYWwgZm9yIGludGVybmFsIGZyYWdtZW50YXRpb24gYmFzZWQgb24gdGhlIG9iamVjdCBzaXplPyBBcmUgdGhlcmUgcG90ZW50aWFsIG92ZXJsYXBzIHdpdGggZXhpc3RpbmcgY2FjaGVzLCBhbmQgY291bGQgd2UgY29uc29saWRhdGUgdG8gaW1wcm92ZSBvdmVyYWxsIG1lbW9yeSB1dGlsaXphdGlvbj8gV2hhdCBpcyB0aGUgaW1wYWN0IG9uIGNhY2hlIGxpbmUgdXRpbGl6YXRpb24/IERvZXMgdGhlIGNhY2hlIG1ha2UgdXNlIG9mIE5VTUEgbm9kZXMgZWZmZWN0aXZlbHk/IEkgbmVlZCB0byB0aGluayBhYm91dCB0aGF0LCB0b28uCgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBwYXR0ZXJucy4gSXMgdGhpcyBjYWNoZSBiZWluZyBoZWF2aWx5IGNvbnRlbmRlZCwgb3IgaXMgaXQgcmVsYXRpdmVseSBzdGF0aWM/IEZyZXF1ZW50IGFsbG9jYXRpb25zIGFuZCBkZWFsbG9jYXRpb25zIGNhbiBsZWFkIHRvIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBzbyBJIGhhdmUgdG8gYmUgdGhpbmtpbmcgYWJvdXQgaG93IGl0IGlzIGJlaW5nIHVzZWQsIGl0cyBsb2NrIGNvbnRlbnRpb24sIGFuZCB0aGUgaW1wYWN0IG9uIG90aGVyIGtlcm5lbCBvcGVyYXRpb25zLiBBcmUgdGhlcmUgYW55IGNvbnRlbnRpb24gaXNzdWVzPyBBcmUgdGhlcmUgbXV0ZXhlcyBvciBzcGlubG9ja3MgaW4gcGxhY2U/IEhvdyBhcmUgdGhleSBjb25maWd1cmVkPwoKRmluYWxseSwgd2hhdCBhcmUgdGhlIGVycm9yLWhhbmRsaW5nIG1lY2hhbmlzbXMgaW4gcGxhY2U/IEEgYGttYWxsb2NgIGNhY2hlIGlzIGEgY3JpdGljYWwgcmVzb3VyY2UsIGFuZCBJJiMzOTtsbCB3YW50IHRvIHNlZSBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMsIG9yIGV2ZW4gaWYgdGhlIGNhY2hlIGJlY29tZXMgY29ycnVwdGVkLiBEb2VzIGl0IGhhdmUgYXBwcm9wcmlhdGUgY2hlY2tzIGFuZCBiYWxhbmNlcyB0byBwcmV2ZW50IGNhc2NhZGluZyBmYWlsdXJlcz8gQXJlIHRoZXJlIGluc3RydW1lbnRhdGlvbiBob29rcyBmb3IgZGVidWdnaW5nPyBUaGUgYW5zd2VycyB0byB0aGVzZSBxdWVzdGlvbnMgYXJlIGVzc2VudGlhbC4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGRlc2lnbiBpcyByb2J1c3Qgb3IgZnJhZ2lsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV3X2ttYWxsb2NfY2FjaGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbGFiX2NvbW1vbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsYWJfY29tbW9uLmM9OTYyPXN0YXRpYyB2b2lkIF9faW5pdFxubW0vc2xhYl9jb21tb24uYzo5NjM6bmV3X2ttYWxsb2NfY2FjaGUoaW50IGlkeCwgZW51bSBrbWFsbG9jX2NhY2hlX3R5cGUgdHlwZSlcbm1tL3NsYWJfY29tbW9uLmMtOTY0LXtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTEwMjY9dm9pZCBfX2luaXQgY3JlYXRlX2ttYWxsb2NfY2FjaGVzKHZvaWQpXG4tLVxubW0vc2xhYl9jb21tb24uYy0xMDM2LVx0XHRpZiAoS01BTExPQ19NSU5fU0laRSBcdTAwM2M9IDMyKVxubW0vc2xhYl9jb21tb24uYzoxMDM3Olx0XHRcdG5ld19rbWFsbG9jX2NhY2hlKDEsIHR5cGUpO1xubW0vc2xhYl9jb21tb24uYy0xMDM4LVx0XHRpZiAoS01BTExPQ19NSU5fU0laRSBcdTAwM2M9IDY0KVxubW0vc2xhYl9jb21tb24uYzoxMDM5Olx0XHRcdG5ld19rbWFsbG9jX2NhY2hlKDIsIHR5cGUpO1xubW0vc2xhYl9jb21tb24uYy0xMDQwLVxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTA0Mi1cdFx0Zm9yIChpID0gS01BTExPQ19TSElGVF9MT1c7IGkgXHUwMDNjPSBLTUFMTE9DX1NISUZUX0hJR0g7IGkmIzQzOyYjNDM7KVxubW0vc2xhYl9jb21tb24uYzoxMDQzOlx0XHRcdG5ld19rbWFsbG9jX2NhY2hlKGksIHR5cGUpO1xubW0vc2xhYl9jb21tb24uYy0xMDQ0LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTkxOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU2xhYiBBbGxvY2F0aW9uIEhvb2tzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBhIHdob2xlIGJ1bmNoIG9mIGNvcmUgc2xhYiBhbGxvY2F0aW9uIGhvb2tzOiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AsIGBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5YCwgYW5kIGEgZmV3IG90aGVycyBJIHJlY29nbml6ZSwgbmFtZWx5IGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rYCwgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2AsIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYCwgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgLCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AsIGFuZCBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYC4gU2VlbXMgcHJldHR5IGNlbnRyYWwgdG8gaG93IHRoZSBzbGFiIGFsbG9jYXRvciB3b3Jrcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoaXMgaW1wYWN0cyB0aGUgc3lzdGVtLgoKTXkgaW1tZWRpYXRlIGZvY3VzIGhlcmUgbmVlZHMgdG8gYmUgb246IGBhbGxvY19zbGFiX29ial9leHRzYCwgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2tgLCBgX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rYCwgYG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VgLCBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AsIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYCwgYW5kIGBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWJgLiBUaG9zZSBhcmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4KCldhaXQgYSBzZWNvbmQsIHRoZXJlIGFyZSBzb21lIHByZXByb2Nlc3NvciBjb25kaXRpb25hbHMgSSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50LiBgX19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9va2AgYW5kIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2tgIGFyZSBvbmx5IHByZXNlbnQgaWYgYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBlbmFibGVkLiBBbHNvLCBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AgYW5kIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYCBhcmUgZGVwZW5kZW50IG9uIGBDT05GSUdfTUVNQ0dgLiBHb3R0YSBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIEkmIzM5O20gYXNzZXNzaW5nIHRoZSBvdmVyYWxsIGltcGFjdC4gVG8gYmUgc3VyZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG1tL3NsdWIuY2AgZm9yIGBhbGxvY19zbGFiX29ial9leHRzYC4gSnVzdCB3YW50IHRvIGhhdmUgdGhlIGNvbnRleHQgZnVsbHkgaW4gbXkgaGVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2Nfc2xhYl9vYmpfZXh0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9MjEzND1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy0yMTM4LVxubW0vc2x1Yi5jOjIxMzk6aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTIxNDAtXHRcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jPTIyMjg9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxuLS1cbm1tL3NsdWIuYy0yMjU5LSAqL1xubW0vc2x1Yi5jOjIyNjA6c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG5tbS9zbHViLmMtMjI2MS17XG4tLVxubW0vc2x1Yi5jPTIzMDc9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtMjMxMC1cbm1tL3NsdWIuYzoyMzExOnN0YXRpYyBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjMxMi1cdFx0XHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jPTIzMTc9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxuLS1cbm1tL3NsdWIuYy0yMzIwLVxubW0vc2x1Yi5jOjIzMjE6c3RhdGljIGlubGluZSB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjMyMi1cdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jPTIzMzE9cHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsdWIuYy0yMzM0LVx0aWYgKCFzbGFiX29ial9leHRzKHNsYWIpIFx1MDAyNlx1MDAyNlxubW0vc2x1Yi5jOjIzMzU6XHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XG5tbS9zbHViLmMtMjMzNi1cdFx0cHJfd2Fybl9vbmNlKFwmIzM0OyVzLCAlczogRmFpbGVkIHRvIGNyZWF0ZSBzbGFiIGV4dGVuc2lvbiB2ZWN0b3IhXFxuXCYjMzQ7LFxuLS1cbm1tL3NsdWIuYz0zMzcyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhY2NvdW50X3NsYWIoc3RydWN0IHNsYWIgKnNsYWIsIGludCBvcmRlcixcbi0tXG5tbS9zbHViLmMtMzM3OC1cdFx0XHQhc2xhYl9vYmpfZXh0cyhzbGFiKSlcbm1tL3NsdWIuYzozMzc5Olx0XHRhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGdmcCxcbm1tL3NsdWIuYy0zMzgwLVx0XHRcdFx0ICAgIGFsbG9jX2ZsYWdzIHwgU0xBQl9BTExPQ19ORVdfU0xBQik7XG4tLVxubW0vc2x1Yi5jPTM0MDE9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtMzQ1Ni1cdCAqL1xubW0vc2x1Yi5jOjM0NTc6XHRhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHMsIHNsYWIpO1xubW0vc2x1Yi5jLTM0NTgtXHRhY2NvdW50X3NsYWIoc2xhYiwgb29fb3JkZXIob28pLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQ5MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDaGVja2luZyBTbGFiIE9iamVjdCBFeHRlbnNpb24gQXZhaWxhYmlsaXR5KioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byBhbnkgbW9yZSBkZXRhaWxlZCBhbmFseXNpcywgSSBuZWVkIHRvIG1ha2UgYSBxdWljayBzYW5pdHkgY2hlY2suIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzIGFjdHVhbGx5IGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gVGhpcyBlc3NlbnRpYWxseSBtZWFucyBJJiMzOTttIGNoZWNraW5nIGlmIHRoZSBgQ09ORklHX1NMQUJfT0JKX0VYVGAgZmVhdHVyZSBpcyBlbmFibGVkLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHByZXJlcXVpc2l0ZS4gV2l0aG91dCB0aGlzLCB0aGUgZnVuY3Rpb24gd29uJiMzOTt0IGJlIGluIHRoZSBrZXJuZWwmIzM5O3Mgc3ltYm9sIHRhYmxlLCBhbmQgYW55IGF0dGVtcHQgdG8gdXNlIGl0IHdvdWxkIGJlIGZ1dGlsZSwgbGVhZGluZyB0byB1bmRlZmluZWQgYmVoYXZpb3Igb3IgY29tcGlsZS10aW1lIGVycm9ycy4gU28sIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJJiMzOTtsbCBjb25maXJtIHRoYXQgdGhpcyBpcyBhIHZhbGlkIHBhcnQgb2YgdGhlIGF2YWlsYWJsZSB0b29sc2V0LiBUaGlzIHNhdmVzIG1lIHRpbWUgaW4gdGhlIGxvbmcgcnVuLiBJIGRvbiYjMzk7dCB3YW50IHRvIGNoYXNlIGRvd24gYSByYWJiaXQgaG9sZSBvZiBkZWJ1Z2dpbmcgaWYgdGhlIHJvb3QgY2F1c2UgaXMgc2ltcGx5IGEgZGlzYWJsZWQgZmVhdHVyZS4gVGhpcyBhbHNvIGhlbHBzIGVuc3VyZSBhbnkgYXNzdW1wdGlvbnMgSSBtYWtlIGRvd24gdGhlIGxpbmUgcmVnYXJkaW5nIHRoaXMgZnVuY3Rpb25hbGl0eSBhcmUgdmFsaWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19TTEFCX09CSl9FWFQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTc2Nj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X29yaWdfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0KVxuLS1cbm1tL3NsdWIuYy03ODEtXG5tbS9zbHViLmM6NzgyOiNpZmRlZiBDT05GSUdfU0xBQl9PQkpfRVhUXG5tbS9zbHViLmMtNzgzLVxuLS1cbm1tL3NsdWIuYz04NzA9c3RhdGljIGlubGluZSBib29sIG9ial9leHRzX2luX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy04NzYtXG5tbS9zbHViLmM6ODc3OiNpZiBkZWZpbmVkKENPTkZJR19TTEFCX09CSl9FWFQpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcbm1tL3NsdWIuYy04Nzgtc3RhdGljIHVuc2lnbmVkIGludCBvYmpfZXh0c19vZmZzZXRfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsdWIuYz0yMDQyPXN0YXRpYyBpbmxpbmUgdm9pZCBkZWNfc2xhYnNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgaW50IG5vZGUsXG4tLVxubW0vc2x1Yi5jLTIwNTctXG5tbS9zbHViLmM6MjA1ODojaWZkZWYgQ09ORklHX1NMQUJfT0JKX0VYVFxubW0vc2x1Yi5jLTIwNTktXG4tLVxubW0vc2x1Yi5jPTIyNjA9c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jLTIzMDAtXG5tbS9zbHViLmM6MjMwMTojZWxzZSAvKiBDT05GSUdfU0xBQl9PQkpfRVhUICovXG5tbS9zbHViLmMtMjMwMi1cbi0tXG5tbS9zbHViLmM9MjMyMT1zdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtMjMyNS1cbm1tL3NsdWIuYzoyMzI2OiNlbmRpZiAvKiBDT05GSUdfU0xBQl9PQkpfRVhUICovXG5tbS9zbHViLmMtMjMyNy1cbi0tXG5tbS9zbHViLmM9Nzg2Mj1zdGF0aWMgaW50IGNhbGN1bGF0ZV9zaXplcyhzdHJ1Y3Qga21lbV9jYWNoZV9hcmdzICphcmdzLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtNzk3Ni1cdGFsaWduZWRfc2l6ZSA9IEFMSUdOKHNpemUsIHMtXHUwMDNlYWxpZ24pO1xubW0vc2x1Yi5jOjc5Nzc6I2lmIGRlZmluZWQoQ09ORklHX1NMQUJfT0JKX0VYVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHXzY0QklUKVxubW0vc2x1Yi5jLTc5NzgtXHRpZiAoc2xhYl9hcmdzX3VubWVyZ2VhYmxlKGFyZ3MsIHMtXHUwMDNlZmxhZ3MpIFx1MDAyNlx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjM4NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgRGVwZW5kZW5jaWVzIGZvciBTbGFib2JqX2V4dCBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IHRhcmdldGluZyBvcHRpbWl6YXRpb24gb2YgYHN0cnVjdCBzbGFib2JqX2V4dGAuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBDT05GSUdfU0xBQl9PQkpfRVhUYCBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkLiBObyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCBub3cgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBTaW5jZSB0aGlzIHN0cnVjdHVyZSBpcyBiZWluZyBvcHRpbWl6ZWQsIEkgbmVlZCB0byBjb25zaWRlciBhbGwgdGhlIHBsYWNlcyBpdCYjMzk7cyB1c2VkLiBSaWdodCwgaXQmIzM5O3MgdXNlZCBieSBib3RoIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgYW5kIGBDT05GSUdfTUVNQ0dgLiBUaG9zZSBhcmUgdGhlIHR3byBrZXkgY29uc3VtZXJzIG9mIHRoaXMgc3RydWN0dXJlLiBHb3QgaXQuIE5vdywgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBpdCYjMzk7cyB0aW1lIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBwdWxsIHVwIGBtbS9zbGFiLmhgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHNsYWJvYmpfZXh0YCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBtZW1vcnkgbGF5b3V0IHRoYXQmIzM5O3MgYmVpbmcgdHdlYWtlZC4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSB0aGUgZnVsbCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgc2xhYm9ial9leHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbGFiLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2xhYi5oPTU0MT1zdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9rbWFsbG9jX25vX29iamV4dCh2b2lkKVxuLS1cbm1tL3NsYWIuaC01NTYtICovXG5tbS9zbGFiLmg6NTU3OnN0cnVjdCBzbGFib2JqX2V4dCB7XG5tbS9zbGFiLmgtNTU4LVx0Lypcbi0tXG5tbS9zbGFiLmg9NjE0PXN0YXRpYyBpbmxpbmUgc2l6ZV90IGNhY2hlX29ial9leHRfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbGFiLmgtNjIzLVxubW0vc2xhYi5oOjYyNDpcdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHN6O1xubW0vc2xhYi5oLTYyNS19XG4tLVxubW0vc2xhYi5oPTYyNz1zdGF0aWMgaW5saW5lIHNpemVfdCBzbGFiX29ial9leHRfc2l6ZShzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbGFiLmgtNjM2LVxubW0vc2xhYi5oOjYzNzpcdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHN6O1xubW0vc2xhYi5oLTYzOC19XG4tLVxubW0vc2xhYi5oPTcwNj1zdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsYWIuaC03MjItICovXG5tbS9zbGFiLmg6NzIzOnN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpcbm1tL3NsYWIuaC03MjQtc2xhYl9vYmpfZXh0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbi0tXG5tbS9zbGFiLmgtNzI2LXtcbm1tL3NsYWIuaDo3Mjc6XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQ7XG5tbS9zbGFiLmgtNzI4LVx0dW5zaWduZWQgaW50IGluZGV4O1xuLS1cbm1tL3NsYWIuaC03MzktXG5tbS9zbGFiLmg6NzQwOlx0b2JqX2V4dCA9IChzdHJ1Y3Qgc2xhYm9ial9leHQgKikob2JqX2V4dHMgJiM0MzsgaW5kZXggKiBzdHJpZGUpO1xubW0vc2xhYi5oLTc0MS1cbi0tXG5tbS9zbGFiLmgtNzQ1LSNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3NsYWIuaDo3NDY6c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqc2xhYl9vYmpfZXh0X29iamNnKHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dClcbm1tL3NsYWIuaC03NDcte1xuLS1cbm1tL3NsYWIuaC03NTEtXG5tbS9zbGFiLmg6NzUyOnN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX29ial9leHRfc2V0X29iamNnKHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dCxcbm1tL3NsYWIuaC03NTMtXHRcdFx0XHRcdCAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuLS1cbm1tL3NsYWIuaD03NjE9c3RhdGljIGlubGluZSB1bmlvbiBjb2RldGFnX3JlZiAqXG5tbS9zbGFiLmg6NzYyOnNsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0KVxubW0vc2xhYi5oLTc2My17XG4tLVxubW0vc2xhYi5oPTc3Nj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbGFiLmgtNzgwLVxubW0vc2xhYi5oOjc4MTpzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqXG5tbS9zbGFiLmgtNzgyLXNsYWJfb2JqX2V4dChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDU2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTbGFiIEFsbG9jYXRpb24gYW5kIFRhZ2dpbmcgSG9va3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gc2xhYiBhbGxvY2F0aW9uLCBvYmplY3QgZXh0ZW5zaW9ucywgYW5kIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gSSBzZWUgYSBjb25zdGVsbGF0aW9uIG9mIHN5bWJvbHMgdGhhdCBzZWVtIGNlbnRyYWwgdG8gdGhpczogYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseWAsIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rYCwgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2AsIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYCwgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgLCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AsIGFuZCBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYC4gSXQmIzM5O3MgYSBiaXQgb2YgYSBkYW5jZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzdGVwcy4KCldhaXQgYSBzZWNvbmQsIHdhc24mIzM5O3QgYGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHlgIGRlY2xhcmVkIGFzIGBzdGF0aWMgaW5saW5lYCBvciBgc3RhdGljIHZvaWRgPyBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhcyB0aGlzIHdvdWxkIG1ha2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBob29rIGRlcGVuZGVudCBvbiBpbmxpbmluZy9jb21waWxlLXRpbWUgb3B0aW1pemF0aW9uLiBUaGF0IGltcGxpZXMgaXQgbWlnaHQgYmUgdXNlZCB0byBvcHRpbWl6ZSBzb21ldGhpbmcgdGhhdCYjMzk7cyBvdGhlcndpc2UgZG9uZSBsYXRlci4gT2theSwgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIGVhcmx5IHN0YWdlIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGF0IGFjdHVhbGx5IGRvZXMgd2l0aGluIGBtbS9zbHViLmNgLiBJIHdpbGwgZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciBhIGJldHRlciB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19zbGFiX29ial9leHRzX2Vhcmx5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz0yMjI4PXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgYWxsb3dfc3Bpbilcbi0tXG5tbS9zbHViLmMtMjI1OS0gKi9cbm1tL3NsdWIuYzoyMjYwOnN0YXRpYyB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxubW0vc2x1Yi5jLTIyNjEte1xuLS1cbm1tL3NsdWIuYz0yMzE3PXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgYWxsb3dfc3Bpbilcbi0tXG5tbS9zbHViLmMtMjMyMC1cbm1tL3NsdWIuYzoyMzIxOnN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTIzMjItXHRcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYz0zNDAxPXN0YXRpYyBzdHJ1Y3Qgc2xhYiAqYWxsb2NhdGVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXG4tLVxubW0vc2x1Yi5jLTM0NTYtXHQgKi9cbm1tL3NsdWIuYzozNDU3Olx0YWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzLCBzbGFiKTtcbm1tL3NsdWIuYy0zNDU4LVx0YWNjb3VudF9zbGFiKHNsYWIsIG9vX29yZGVyKG9vKSwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyNzEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyB0aGlzIGlzIHN0YXRpYywgbm90IGNoYW5naW5nLiBNeSBmb2N1cyBzeW1ib2xzIGhlcmUgYXJlIGFsbCByZWxhdGVkIHRvIHNsYWIgb2JqZWN0IGV4dGVuc2lvbnM6IGBhbGxvY19zbGFiX29ial9leHRzYCwgYGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHlgLCBhbmQgdGhlIHZhcmlvdXMgaG9va2luZyBmdW5jdGlvbnMgKGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rYCwgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2AsIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCwgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgKSwgYWxvbmcgd2l0aCBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAgYW5kIGBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWJgLiBUaGlzIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gYW5kLCBtb3JlIHNwZWNpZmljYWxseSwgaG93IHRoZXNlIGV4dGVuc2lvbnMgaW50ZXJhY3Qgd2l0aCBtZW1vcnkgY29udHJvbCBncm91cHMgKG1lbWNncykgYW5kL29yIG1lbW9yeSBwcm9maWxpbmcuCgpUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBhcmUgYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBhbmQgYENPTkZJR19NRU1DR2AgcHJlcmVxdWlzaXRlcyBoZXJlPyBZZXMsIGl0IHNlZW1zIHRoZSBwYXRjaCBpcyBvcHRpbWl6aW5nIHRoZSBtZW1vcnkgbGF5b3V0IG9mIGBzdHJ1Y3Qgc2xhYm9ial9leHRgIHdoaWNoIGlzIHVzZWQgd2hlbiAqZWl0aGVyKiBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIG9yIGBDT05GSUdfTUVNQ0dgIGlzIHNldC4gU28sIGZvciBwcm9wZXIgY29uZmlndXJhdGlvbiwgSSYjMzk7bGwgbmVlZCB0byBpbmNsdWRlIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBhbmQgYE1FTUNHYCBpbiBgRW5hYmxlQ29uZmlnc2AuCgpIb2xkIG9uLCBJIHJlY2FsbCBgTUVNQ0dgIGlzIGZyZXF1ZW50bHkgZW5hYmxlZCBieSBkZWZhdWx0LiBIb3dldmVyLCBpdCB3b3VsZG4mIzM5O3QgaHVydCB0byBiZSBleHBsaWNpdCBhbmQgbGlzdCBpdC4gYE1FTV9BTExPQ19QUk9GSUxJTkdgIGlzIGRlZmluaXRlbHkgYSBkZWRpY2F0ZWQgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZywgYW5kIG9uZSB0aGF0IGlzIHByb2JhYmx5IGxlc3Mgb2Z0ZW4gZW5hYmxlZCBieSBkZWZhdWx0LiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlIGZvciBgTUVNX0FMTE9DX1BST0ZJTElOR2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGFuZCBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0xMDQ3PWNvbmZpZyBDT0RFX1RBR0dJTkdcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDUwLVxubGliL0tjb25maWcuZGVidWc6MTA1MTpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xubGliL0tjb25maWcuZGVidWctMTA1Mi1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZ1wmIzM0O1xuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTEwNjQtXG5saWIvS2NvbmZpZy5kZWJ1ZzoxMDY1OmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxubGliL0tjb25maWcuZGVidWctMTA2Ni1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubGliL0tjb25maWcuZGVidWctMTA2OS1cbmxpYi9LY29uZmlnLmRlYnVnOjEwNzA6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcbmxpYi9LY29uZmlnLmRlYnVnLTEwNzEtXHRib29sIFwmIzM0O01lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGVyIGRlYnVnZ2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE0MQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSB0aGlua2luZyBpczoKCioqTWVtb3J5IEFsbG9jYXRpb24gUHJvZmlsaW5nIGFuZCBDb250cm9sIEdyb3VwIEludGVncmF0aW9uKioKClJpZ2h0LCBzbyB0byBnZXQgYSByZWFsbHkgZ29vZCBoYW5kbGUgb24gdGhpcywgSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIGZsaXAgb24gYE1FTV9BTExPQ19QUk9GSUxJTkdgIGFuZCBpdHMgZGVmYXVsdC1lbmFibGVkIGNvdW50ZXJwYXJ0IGBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVGAuIFRoYXQmIzM5O3MgZ29pbmcgdG8gZ2l2ZSB1cyBhIGdyYW51bGFyIHZpZXcgaW50byB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBvcHRpbWl6YXRpb24uIFdlICpuZWVkKiB0aGF0IGRhdGEuCgpBbmQgd2hpbGUgd2UmIzM5O3JlIGF0IGl0LCBgTUVNQ0dgIGhhcyBnb3QgdG8gYmUgaW4gdGhlIG1peC4gQ29udHJvbCBncm91cHMgYXJlIGluZGlzcGVuc2FibGUgZm9yIGlzb2xhdGluZyBhbmQgbWFuYWdpbmcgcmVzb3VyY2UgY29uc3VtcHRpb24sIGFuZCBtZW1vcnkgaXMgb2J2aW91c2x5IGEgYmlnIHBhcnQgb2YgdGhhdCBlcXVhdGlvbi4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGVmZmVjdGl2ZWx5IGlzb2xhdGUgdGhlIHByb2Nlc3NlcyBhbmQgdW5kZXJzdGFuZCB0aGVpciBiZWhhdmlvci4KCkZpbmFsbHksIGp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2s6IEkmIzM5O2xsIGFsc28gd2FudCB0byBjb25maXJtIHRoYXQgYFNMQUJfT0JKX0VYVGAgaXMgZXhwb3NlZCBhcyBhIGNvbmZpZ3VyYWJsZSBvcHRpb24gdG8gdGhlIGVuZC11c2Vycy4gU29tZXRpbWVzIHRoZXNlICYjMzQ7aW50ZXJuYWwmIzM0OyBmbGFncyBhcmUgaGlkZGVuIGFuZCBpdCBpcyB1c2VmdWwgdG8ga25vdyBpZiB3ZSBjYW4gY29udHJvbCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNMQUJfT0JKX0VYVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTAzMz1jb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXG4tLVxuaW5pdC9LY29uZmlnLTEwNDAtXG5pbml0L0tjb25maWc6MTA0MTpjb25maWcgU0xBQl9PQkpfRVhUXG5pbml0L0tjb25maWctMTA0Mi1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1MjAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBgU0xBQl9PQkpfRVhUYCBCb29sZWFuKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBTTEFCX09CSl9FWFRgIGZsYWcgYW5kIGl0JiMzOTtzIGZsYWdnZWQgYXMgYSBoaWRkZW4gYm9vbGVhbiwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgaXQmIzM5O3MgcHJvYmFibHkgdHJpZ2dlcmVkIGJ5IGVpdGhlciBgTUVNQ0dgIG9yIGBNRU1fQUxMT0NfUFJPRklMSU5HYC4gVGhvc2UgdHdvIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIGluZmx1ZW5jaW5nIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBiZWhhdmlvcnMuIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IHNlbGVjdGlvbiBjcml0ZXJpYSBmb3IgdGhpcyBmbGFnLiBLbm93aW5nIHdoYXQgZW5hYmxlcyBgU0xBQl9PQkpfRVhUYCBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uIFRpbWUgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFNMQUJfT0JKX0VYVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA3Mz1jb25maWcgTUVNQ0dcbi0tXG5pbml0L0tjb25maWctMTA3Ni1cdHNlbGVjdCBFVkVOVEZEXG5pbml0L0tjb25maWc6MTA3NzpcdHNlbGVjdCBTTEFCX09CSl9FWFRcbmluaXQvS2NvbmZpZy0xMDc4LVx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXG4tLVxubGliL0tjb25maWcuZGVidWc9MTA1MT1jb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTEwNTgtXHRzZWxlY3QgUEFHRV9FWFRFTlNJT05cbmxpYi9LY29uZmlnLmRlYnVnOjEwNTk6XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDYwLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTg4OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBNZW1vcnkgTWFuYWdlbWVudCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGJhc2VkIG9uIHRoZSBrZXJuZWwgY29kZSwgZW5hYmxpbmcgYm90aCBgTUVNQ0dgIGFuZCBgTUVNX0FMTE9DX1BST0ZJTElOR2AgYXV0b21hdGljYWxseSBicmluZ3MgaW4gYFNMQUJfT0JKX0VYVGAuIFRoZXJlZm9yZSwgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IGRlZmluaXRlbHkgbmVlZHMgdG8gaW5jbHVkZSBib3RoIGBNRU1DR2AgYW5kIGBNRU1fQUxMT0NfUFJPRklMSU5HYC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuCgpOb3csIEkgbmVlZCB0byBwaWNrIGEgZ29vZCBmb2N1cyBzeW1ib2wuIEkgd2FzIGluaXRpYWxseSB0aGlua2luZyBhYm91dCBgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseWAsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgdGhlIHJpZ2h0IGNob2ljZSwgc28gbGV0JiMzOTtzIGRpZyBhIGJpdCBkZWVwZXIuIEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgYSBjb25jZXJuLCBidXQgc3l6a2FsbGVyICptaWdodCogYmUgYWJsZSB0byBmdXp6IGl0IGlmIGl0IGlzbiYjMzk7dCBpbmxpbmVkLCBzbyBpdCBtYXkgc3RpbGwgYmUgdmlhYmxlLiBUaGFua2Z1bGx5LCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXRzZWxmIGlzIGV4cG9ydGVkLCBvciBhdCBsZWFzdCBpdCBpc24mIzM5O3Qgc3RhdGljLCB3aGljaCBsb29rcyBiZXR0ZXIuIEV4Y2VsbGVudC4gVGhlbiBJIHNlZSB0aGF0IGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rYCBhbmQgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2AgYXJlIGFsc28gbm9uLXN0YXRpYy4gR29vZCBzaWducyBmb3IgZnV6emluZyB0YXJnZXRzISBGdXJ0aGVyLCBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAsIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCwgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgLCBhbmQgYG1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYmAgYXJlIGFsbCBub24tc3RhdGljIGFzIHdlbGwuIFRoZXNlIGFyZSBhbGwgZ29vZCBjYW5kaWRhdGVzLgoKTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzIGluZGVlZCBleHBvcnRlZC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmFsbG9jX3NsYWJfb2JqX2V4dHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjUwNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU0xVQiBBbGxvY2F0b3IqKgoKT2theSwgc28gSSBkb24mIzM5O3QgbmVlZCB0byB3b3JyeSBhYm91dCBleHBvcnRpbmcgdGhpcyB0aGluZzsgaXQganVzdCBuZWVkcyB0byBiZSBub24tc3RhdGljLiBUaGUga2V5IGhlcmUgaXMgdG8gZmlndXJlIG91dCB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4gTGV0IG1lIHNlZS4uLiBJIHJlY2FsbCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgYmVpbmcgY2FsbGVkIGZyb20gYm90aCBgbW0vc2x1Yi5jYCDigJMgdGhhdCYjMzk7cyB0aGUgU0xVQiBhbGxvY2F0b3IgaXRzZWxmLCBvYnZpb3VzbHkg4oCTIGFuZCBhbHNvIGZyb20gYG1tL21lbWNvbnRyb2wuY2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgcG90ZW50aWFsIGludGVyYWN0aW9uIHdpdGggbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLiBOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgbW0vc2xhYi5oYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVsZXZhbnQgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHNob3VsZCBiZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyZmFjZXMgYW5kIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbGFiLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2xhYi5oPTc2Mj1zbGFiX29ial9leHRfY29kZXRhZ19yZWYoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dClcbi0tXG5tbS9zbGFiLmgtNzcwLVxubW0vc2xhYi5oOjc3MTppbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbGFiLmgtNzcyLVx0XHRcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY4ODIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtGRU5DRSBhbmQgU0xVQiBTeW1ib2xzKioKCk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBub3QgYSBzdGF0aWMgc2l0dWF0aW9uLCBnb29kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgaGVyZS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBsb29rIGF0IGBrZmVuY2VfaW5pdF9wb29sYCBhbmQgYF9fa2ZlbmNlX2ZyZWVgIHNwZWNpZmljYWxseS4gQWxyaWdodCwgYGtmZW5jZV9pbml0X3Bvb2xgIGlzIGRlZmluZWQgYXMgc3RhdGljLCB0aGF0IG1ha2VzIHNlbnNlLiBCdXQgYF9fa2ZlbmNlX2ZyZWVgLi4uIHRoYXQmIzM5O3Mgbm9uLXN0YXRpYy4gQmluZ28hIFdlIGNhbiBhZGQgYF9fa2ZlbmNlX2ZyZWVgIHRvIGBGb2N1c1N5bWJvbHNgLCB0aGF0JiMzOTtzIHdoYXQgd2Ugd2FudC4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHdoYXQgZWxzZSBpcyBpbiBgRm9jdXNTeW1ib2xzYCBjdXJyZW50bHkuIExldCYjMzk7cyBzZWUuLi4gYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBgX19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9va2AsIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2tgLCBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAsIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCwgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgLCBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYCwgYW5kIG5vdywgYF9fa2ZlbmNlX2ZyZWVgLgoKSG9sZCBvbiBhIHNlY29uZC4uLiBhcmUgdGhvc2UgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2tgIGFuZCBgX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rYCBmdW5jdGlvbnMgYWxzbyBzdGF0aWM/IFllcywgdGhleSBhcmUhIEkmIzM5O20gbG9va2luZyByaWdodCBhdCBpdCBpbiBgbW0vc2x1Yi5jYCBub3csIGFuZCB0aGV5IGFyZSBzdGF0aWMgbm9pbmxpbmUgZnVuY3Rpb25zLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBwcm9jZXNzIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTIzNDY9c3RhdGljIG5vaW5saW5lIHZvaWRcbm1tL3NsdWIuYzoyMzQ3Ol9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgZ2ZwX3QgZmxhZ3MsXG5tbS9zbHViLmMtMjM0OC1cdFx0XHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9zbHViLmM9MjM5MD1hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtMjM5My1cdGlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSlcbm1tL3NsdWIuYzoyMzk0Olx0XHRfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHMsIG9iamVjdCwgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcbm1tL3NsdWIuYy0yMzk1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc2NzIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKgoKQWxyaWdodCwgc28gdGhlIHRhcmdldHMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYXJlIG1hcmtlZCBhcyBgc3RhdGljIG5vaW5saW5lYC4gRmluZSwgdGhhdCYjMzk7cyBub3QgYSBzaG93c3RvcHBlcjsgU3l6a2FsbGVyIGNhbiBzdGlsbCBwb3RlbnRpYWxseSBnZXQgYXQgdGhlbS4gTm8gcHJvYmxlbSB0aGVyZS4KCk15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIGxpa2VseSBhcmVhcyBvZiBpbnRlcmVzdC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayBvdXQgdGhlIHBvdGVudGlhbCBob29rczogYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgIGFuZCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIEkmIzM5O20gbW9zdCBpbnRlcmVzdGVkIGluIGF0IHRoaXMganVuY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTM1Mjk9c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2Z1bGxfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzUzNy1cbm1tL21lbWNvbnRyb2wuYzozNTM4OmJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG5tbS9tZW1jb250cm9sLmMtMzUzOS1cdFx0XHRcdCAgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBzbGFiX2FsbG9jX2ZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODAyMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBEeW5hbWljIE1lbW9yeSBBbGxvY2F0aW9uKioKCk15IG1pbmQgaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhlIGluaGVyZW50IGR5bmFtaXNtIG9mIHRoZSB0b3BpYy4gVGhlIHZlcnkgbmF0dXJlIG9mIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gcHJvY2VzcyBzdWdnZXN0cyB0aGF0IGl0JiMzOTtzICpub3QqIGEgc3RhdGljIHByb2JsZW0uIEl04oCZcyBmbHVpZCwgY29uc3RhbnRseSBjaGFuZ2luZywgYW5kIHRoYXQmIzM5O3MgdGhlIGNvcmUgY2hhbGxlbmdlLiBUaGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYXJlIHNpZ25pZmljYW50IGFuZCBtdXN0IGJlIGtlcHQgaW4gbWluZC4KClRvIHRhY2tsZSB0aGlzLCBhIG5hdHVyYWwgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWJgIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgbWVtb3J5IGNncm91cCBpbnRlcmFjdHMgd2l0aCBvYmplY3Qgc2xhYnMgaXMgcGFyYW1vdW50IGhlcmUuIFRoaXMgZnVuY3Rpb24gbGlrZWx5IHByb3ZpZGVzIGEgY3J1Y2lhbCBlbnRyeSBwb2ludCB0byBkaXNzZWN0aW5nIHRoZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBtZWNoYW5pY3MgYXQgYSBncmFudWxhciBsZXZlbC4gRGVsdmluZyBpbnRvIGl0cyBsb2dpYyB3aWxsIHJldmVhbCBrZXkgaW5zaWdodHMgaW50byBob3cgbWVtb3J5IGlzIGJlaW5nIG1hbmFnZWQgYW5kIHBvdGVudGlhbGx5IHdoZXJlIGluZWZmaWNpZW5jaWVzIG9yIGxlYWtzIG1pZ2h0IGJlIGx1cmtpbmcgd2l0aGluIHRoZSBzeXN0ZW0uIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGllY2UgdG8gdW5kZXJzdGFuZGluZyB0aGUgcHV6emxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTI4NTg9c3RhdGljIF9fYWx3YXlzX2lubGluZVxubW0vbWVtY29udHJvbC5jOjI4NTk6c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqcClcbm1tL21lbWNvbnRyb2wuYy0yODYwLXtcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjg5OD1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ZpcnQodm9pZCAqcClcbi0tXG5tbS9tZW1jb250cm9sLmMtMjkwNi1cdGlmIChzbGFiKVxubW0vbWVtY29udHJvbC5jOjI5MDc6XHRcdHJldHVybiBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWIoc2xhYiwgcCk7XG5tbS9tZW1jb250cm9sLmMtMjkwOC1cdHJldHVybiBmb2xpb19tZW1jZ19jaGVjayh2aXJ0X3RvX2ZvbGlvKHApKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0NjcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipFeGNsdXNpb25hcnkgUmVhc29uaW5nIGluIEZ1enppbmcgQ29udGV4dCoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgc29tZXRoaW5nIG1hcmtlZCBhcyBgc3RhdGljIF9fYWx3YXlzX2lubGluZWAuIFRoYXQgaW5zdGFudGx5IHRocm93cyB1cCBhIHJlZCBmbGFnIGluIHRoZSBjb250ZXh0IG9mIGZ1enppbmcsIHBhcnRpY3VsYXJseSB3aXRoIFN5emthbGxlci4gQmVjYXVzZSBpdCYjMzk7cyBpbmxpbmUsIGl0JiMzOTtzIGJha2VkIGludG8gb3RoZXIgY29kZSBkdXJpbmcgY29tcGlsYXRpb24gYW5kIGRvZXNuJiMzOTt0IGV4aXN0IGFzIGEgc3RhbmRhbG9uZSBmdW5jdGlvbiB0aGF0IFN5emthbGxlciBjYW4gZGlyZWN0bHkgdGFyZ2V0LiBBdHRlbXB0aW5nIHRvIGRvIHNvIHdvdWxkIGJlIGZ1dGlsZS4gVGhlcmVmb3JlLCBteSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMsICYjMzQ7V2UgbmVlZCB0byBleGNsdWRlIHRoaXMgZnJvbSBmdXp6aW5nLiYjMzQ7IEl0JiMzOTtzIGEgZGVhZCBlbmQgYXMgYSBmdXp6aW5nIHRhcmdldCwgbGlrZWx5IGp1c3QgaW5saW5lZCBhcyBwYXJ0IG9mIGEgbGFyZ2VyLCBtb3JlIGludGVyZXN0aW5nIGZ1bmN0aW9uLiBObyBwb2ludCB3YXN0aW5nIHRpbWUgb24gaXQuCgpOb3csIGxldCYjMzk7cyBwaXZvdC4gU2luY2UgdGhpcyBmdW5jdGlvbiBpcyBvZmYgdGhlIHRhYmxlLCBJIG5lZWQgdG8gZmluZCBpdHMgY2FsbGVycy4gV2hpY2ggbWVhbnMgSSBuZWVkIHRvIGV4cGxvcmUgd2hhdCBmdW5jdGlvbiB0aGF0IG1ha2VzIHNlbnNlIHRvIHN0dWR5IGluIHRoZSBwbGFjZSBvZiB0aGlzIGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIGNoZWNrIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYC4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBuZXh0IHN0ZXAsIGdpdmVuIHRoZSBjb250ZXh0LiBJdCBsaWtlbHkgcmVwcmVzZW50cyBhIHBvaW50IHdoZXJlIG1lbW9yeSBhY2NvdW50aW5nLCByZWxhdGVkIHRvIHNsYWIgY2FjaGVzIGFuZCBtZW1vcnkgY29udHJvbCBncm91cHMsIGlzIGhhbmRsZWQuIEFuZCBpZiB0aGlzIGlubGluZWQgZnVuY3Rpb24gaXMgcGFydCBvZiBzb21lIGNydWNpYWwgYWNjb3VudGluZyBwcm9jZXNzLCB0aGVuIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGlzIGxpa2VseSB0byBiZSBhbiBpbXBvcnRhbnQgZW50cnkgcG9pbnQgb3IgcG9pbnQgb2YgZmFpbHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY2dfc2xhYl9wb3N0X2NoYXJnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9MjUyMz1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcbm1tL3NsdWIuYzoyNTI0OmJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcbm1tL3NsdWIuYy0yNTI1LXtcbi0tXG5tbS9zbHViLmM9MjU5MT1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsdWIuYy0yNTk1LVxubW0vc2x1Yi5jOjI1OTY6c3RhdGljIGlubGluZSBib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXG5tbS9zbHViLmMtMjU5Ny17XG4tLVxubW0vc2x1Yi5jPTUwMDU9Ym9vbCBrbWVtX2NhY2hlX2NoYXJnZSh2b2lkICpvYmpwLCBnZnBfdCBnZnBmbGFncylcbi0tXG5tbS9zbHViLmMtNTAwOS1cbm1tL3NsdWIuYzo1MDEwOlx0cmV0dXJuIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uob2JqcCwgZ2ZwZmxhZ3MpO1xubW0vc2x1Yi5jLTUwMTEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTEwNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOgoKKipGaWx0ZXJpbmcgS2VybmVsIENvZGU6IEEgUXVpY2sgQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIEZpcnN0IG9mZiwgdGhhdCBgc3RhdGljIF9fZmFzdHBhdGhfaW5saW5lYCBkaXJlY3RpdmUgaXMgYSBjbGVhciBleGNsdXNpb24uIE5vIG5lZWQgdG8gc3BlbmQgYW55IHRpbWUgb24gdGhhdC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgYW4gaW50ZXJuYWwsIG9wdGltaXplZCBoZWxwZXIgZnVuY3Rpb24uIE1vdmluZyBvbi4uLgoKTm93LCBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYC4uLiBUaGF0JiMzOTtzIGEgbGl0dGxlIG1vcmUgaW50ZXJlc3RpbmcsIGlzbiYjMzk7dCBpdD8gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGlmIGl0JiMzOTtzIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IHRhc2suIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0IGFjdHVhbGx5ICpkb2VzKiB3aXRoaW4gdGhlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUgYW5kIGRldGVybWluZSB3aGV0aGVyIGl0JiMzOTtzIHNvbWV0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQsIG9yIGlmIGl0JiMzOTtzIHNvbWV0aGluZyBJIGNhbiBzYWZlbHkgZXhjbHVkZSBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0LiBNb3JlIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkIHRvIG1ha2UgYSBkZWNpc2lvbiBhYm91dCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbGFiX2NvbW1vbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsYWJfY29tbW9uLmM9MjY3PV9fa21lbV9jYWNoZV9hbGlhcyhjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgc2l6ZSwgc2xhYl9mbGFnc190IGZsYWdzLFxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMjkxLS8qKlxubW0vc2xhYl9jb21tb24uYzoyOTI6ICogX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzIC0gQ3JlYXRlIGEga21lbSBjYWNoZS5cbm1tL3NsYWJfY29tbW9uLmMtMjkzLSAqIEBuYW1lOiBBIHN0cmluZyB3aGljaCBpcyB1c2VkIGluIC9wcm9jL3NsYWJpbmZvIHRvIGlkZW50aWZ5IHRoaXMgY2FjaGUuXG4tLVxubW0vc2xhYl9jb21tb24uYy0zMTctICovXG5tbS9zbGFiX2NvbW1vbi5jOjMxODpzdHJ1Y3Qga21lbV9jYWNoZSAqX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzKGNvbnN0IGNoYXIgKm5hbWUsXG5tbS9zbGFiX2NvbW1vbi5jLTMxOS1cdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBvYmplY3Rfc2l6ZSxcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTQwOC19XG5tbS9zbGFiX2NvbW1vbi5jOjQwOTpFWFBPUlRfU1lNQk9MKF9fa21lbV9jYWNoZV9jcmVhdGVfYXJncyk7XG5tbS9zbGFiX2NvbW1vbi5jLTQxMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk2MDIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSBhcmUgbXkgdGhvdWdodHMsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIGFuIGV4cGVydCBpbiBteSBmaWVsZDoKCioqSW50ZXJuYWwgQ29kZSBSZXZpZXc6IEluY2x1c2lvbiAmYW1wOyBSZWZpbmVtZW50KioKCkFscmlnaHQsIHRoZSBpbml0aWFsIHJldmlldyBpbmRpY2F0ZXMgdGhpcyBjb2RlIGNhbiBiZSBleHBvcnRlZC4gR29vZCwgdGhhdCYjMzk7cyBhIHBvc2l0aXZlIHN0YXJ0LiBXZSBjYW4gaW5jbHVkZSBpdCBpbiB0aGUgYnJvYWRlciBwcm9qZWN0LCB3aGljaCBpcyB3aGF0IHdlIG5lZWQuCgpCdXQgaG9sZCBvbiwgYmVmb3JlIHdlIGdpdmUgdGhpcyB0aGUgZ3JlZW4gbGlnaHQsIEkgbmVlZCB0byB6b29tIGluLiBUaGUgdXNlIG9mIGBuZXdfa21hbGxvY19jYWNoZWAgaGFzIG1lIHNsaWdodGx5IGNvbmNlcm5lZC4gSXMgdGhpcyB0aGUgcmlnaHQgaW1wbGVtZW50YXRpb24/IEFtIEkgZ29pbmcgdG8gYmUgZGVhbGluZyB3aXRoIHRoZSBjb21wbGV4aXR5IG9mIGEgY3VzdG9tIGNhY2hlPyBPciBpcyBpdCBva2F5IGJlY2F1c2UgaXQmIzM5O3MgbWFuYWdlZCBjb3JyZWN0bHkgZWxzZXdoZXJlPyBUaGUgdXNlIGNhc2UgaXNuJiMzOTt0IGNsZWFyIGZyb20ganVzdCB0aGlzIHNuaXBwZXQuIEl0IGNvdWxkIGJlIGZpbmUuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgaW50ZWdyYXRpb24gcG9pbnRzLiBUaGlzIG5lZWRzIGEgY2xvc2VyIGxvb2sgYmVmb3JlIEkgc2lnbiBvZmYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ld19rbWFsbG9jX2NhY2hlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2xhYl9jb21tb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbGFiX2NvbW1vbi5jPTk2Mj1zdGF0aWMgdm9pZCBfX2luaXRcbm1tL3NsYWJfY29tbW9uLmM6OTYzOm5ld19rbWFsbG9jX2NhY2hlKGludCBpZHgsIGVudW0ga21hbGxvY19jYWNoZV90eXBlIHR5cGUpXG5tbS9zbGFiX2NvbW1vbi5jLTk2NC17XG4tLVxubW0vc2xhYl9jb21tb24uYz0xMDI2PXZvaWQgX19pbml0IGNyZWF0ZV9rbWFsbG9jX2NhY2hlcyh2b2lkKVxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTAzNi1cdFx0aWYgKEtNQUxMT0NfTUlOX1NJWkUgXHUwMDNjPSAzMilcbm1tL3NsYWJfY29tbW9uLmM6MTAzNzpcdFx0XHRuZXdfa21hbGxvY19jYWNoZSgxLCB0eXBlKTtcbm1tL3NsYWJfY29tbW9uLmMtMTAzOC1cdFx0aWYgKEtNQUxMT0NfTUlOX1NJWkUgXHUwMDNjPSA2NClcbm1tL3NsYWJfY29tbW9uLmM6MTAzOTpcdFx0XHRuZXdfa21hbGxvY19jYWNoZSgyLCB0eXBlKTtcbm1tL3NsYWJfY29tbW9uLmMtMTA0MC1cbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTEwNDItXHRcdGZvciAoaSA9IEtNQUxMT0NfU0hJRlRfTE9XOyBpIFx1MDAzYz0gS01BTExPQ19TSElGVF9ISUdIOyBpJiM0MzsmIzQzOylcbm1tL3NsYWJfY29tbW9uLmM6MTA0MzpcdFx0XHRuZXdfa21hbGxvY19jYWNoZShpLCB0eXBlKTtcbm1tL3NsYWJfY29tbW9uLmMtMTA0NC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAxNTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFN5bWJvbCBMaXN0KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZ2l2ZW4gYSBsaXN0IG9mIHN5bWJvbHMgdG8gZm9jdXMgb24uIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZWxpbWluYXRlIHRoYXQgYHN0YXRpYyB2b2lkIF9faW5pdGAgb25lOyBpdCYjMzk7cyBpbml0aWFsaXphdGlvbiBjb2RlIGFuZCBub3QgcmVsZXZhbnQgdG8gbXkgY29yZSBhbmFseXNpcy4gTm93LCB0aGUgZmluYWwgbGlzdCBpbmNsdWRlczogYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBgX19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9va2AsIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2tgLCBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AsIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYCwgYF9fa2ZlbmNlX2ZyZWVgLCBhbmQgYF9fa21lbV9jYWNoZV9jcmVhdGVfYXJnc2AuIE5vdyBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGFuZCBkZWNpZGUgaWYgdGhvc2UgYXJlIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aGV0aGVyIGBfX2tmZW5jZV9mcmVlYCBpcyBleHBvcnRlZCBvciBub3QsIG9yIGlmIGl0IGlzIG5vbi1zdGF0aWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fa2ZlbmNlX2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9rZmVuY2UvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2tmZW5jZS9jb3JlLmM9MTIzOT12b2lkICprZmVuY2Vfb2JqZWN0X3N0YXJ0KGNvbnN0IHZvaWQgKmFkZHIpXG4tLVxubW0va2ZlbmNlL2NvcmUuYy0xMjQ5LVxubW0va2ZlbmNlL2NvcmUuYzoxMjUwOnZvaWQgX19rZmVuY2VfZnJlZSh2b2lkICphZGRyKVxubW0va2ZlbmNlL2NvcmUuYy0xMjUxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA2MDAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6CgoqKkFzc2Vzc2luZyB0aGUgRHluYW1pYyBOYXR1cmUqKgoKUmlnaHQsIHNvIGl0JiMzOTtzIG5vdCBzdGF0aWMuIFRoYXQmIzM5O3MgdGhlIGtleSB0YWtlYXdheSBoZXJlLiBUaGUgYmVoYXZpb3Igb3Igc3RhdGUgd2UmIzM5O3JlIGV4YW1pbmluZyBpc24mIzM5O3QgZml4ZWQ7IGl0JiMzOTtzIGNoYW5naW5nLCBldm9sdmluZy4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkeW5hbWlzbS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYGFsbG9jX3NsYWJfb2JqX2V4dHNgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwLiBJdCYjMzk7cyBvZnRlbiB3aGVyZSB5b3UmIzM5O2xsIGZpbmQgdGhlIG11dGFibGUgb3IgdHJhbnNpZW50IGNvbXBvbmVudHMsIHBlcmhhcHMgdGhlIGFsbG9jYXRpb24gZXh0ZW5zaW9ucywgd2hpY2ggYXJlIGNydWNpYWwgd2hlbiBkZWFsaW5nIHdpdGggYW4gZWxlbWVudCBvZiBjaGFuZ2Ugd2l0aGluIG91ciBhcmNoaXRlY3R1cmUuIFRoYXQgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIGhvbGQgdGhlIGNvcmUgb2YgdGhlIHN0YXRlIHRoYXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHRoaXMgbGFjayBvZiBzdGF0aWMgYmVoYXZpb3IuIFRpbWUgdG8gZGlnIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9MjEzND1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy0yMTM4LVxubW0vc2x1Yi5jOjIxMzk6aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTIxNDAtXHRcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jPTIzMDc9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtMjMxMC1cbm1tL3NsdWIuYzoyMzExOnN0YXRpYyBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjMxMi1cdFx0XHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMDU1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgRHluYW1pYyBTbGFiIE9iamVjdCBFeHRlbnNpb24qKgoKQWxyaWdodCwgc28gdGhlIGNvcmUgY29uY2VwdCBoZXJlIGlzIHRoYXQgdGhlIHNsYWIgYWxsb2NhdG9yJiMzOTtzIGJlaGF2aW9yIGlzbiYjMzk7dCBmaXhlZCwgYW5kIGl0IGNoYW5nZXMgd2hlbiBgQ09ORklHX1NMQUJfT0JKX0VYVGAgaXMgZW5hYmxlZC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3Qg4oCTIGEgZHluYW1pYyBjb25kaXRpb24gYWx3YXlzIGRlbWFuZHMgYSBjbG9zZXIgbG9vay4gSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBvYmplY3QgZXh0ZW5zaW9ucyB3aXRoaW4gdGhlIHNsYWIgYWxsb2NhdG9yLCBwcm9iYWJseSByZWxhdGVkIHRvIG1ldGFkYXRhIG9yIHBlci1vYmplY3QgZGF0YS4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYWxsb2NhdGlvbiBob29rLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiBgX19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9va2AuIFRoaXMgaG9vayBsaWtlbHkgcHJvdmlkZXMgY3J1Y2lhbCBpbnNpZ2h0cy4gSXQmIzM5O3MgcHJvYmFibHkgdGhlIHBvaW50IHdoZXJlIHRoZSBkeW5hbWljIGJlaGF2aW9yIG1hbmlmZXN0cyBpdHNlbGYuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzIGlzIG1vZGlmaWVkLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBvYmplY3QgZXh0ZW5zaW9ucyBhcmUgaW50ZWdyYXRlZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2hhbmdlcyBpbiBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWdpZXMsIG9yIHBvdGVudGlhbGx5IGV2ZW4gYWxsb2NhdGlvbiBhbGdvcml0aG1zIHNwZWNpZmljIHRvIHRoaXMgY29uZmlndXJhdGlvbi4gSXQgY291bGQgaW52b2x2ZSB0YWdnaW5nIG9iamVjdHMgZm9yIGxhdGVyIHJldHJpZXZhbCBvciBzb21lIG90aGVyIGtpbmQgb2YgaW5zdHJ1bWVudGF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSB1c2FnZSwgYW5kIHdoZXRoZXIgb3Igbm90IGl0IGFsaWducyB3aXRoIHRoZSBkZXNpZ24gZ29hbHMgYW5kIGFudGljaXBhdGVkIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0IGhhbmRsZXMgbWVtb3J5IGZyYWdtZW50YXRpb24gYW5kIGFsaWdubWVudCwgZXNwZWNpYWxseSBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuICYjMzQ7ZXh0ZW5kZWQmIzM0OyBvYmplY3QuIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8gZGV0ZXJtaW5lICpob3cqIHRoZSBzbGFiIGFsbG9jYXRvciBpcyBkeW5hbWljYWxseSBhZGFwdGluZyBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgdGhhdCBoYXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTIzNDY9c3RhdGljIG5vaW5saW5lIHZvaWRcbm1tL3NsdWIuYzoyMzQ3Ol9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgZ2ZwX3QgZmxhZ3MsXG5tbS9zbHViLmMtMjM0OC1cdFx0XHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9zbHViLmM9MjM5MD1hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtMjM5My1cdGlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSlcbm1tL3NsdWIuYzoyMzk0Olx0XHRfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHMsIG9iamVjdCwgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcbm1tL3NsdWIuYy0yMzk1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE2NTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSYjMzk7bSBkaXNjdXNzaW5nIHRoaXMgd2l0aCBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgY2x1ZSBwb2ludHMgdG93YXJkcyBhIGZ1bmN0aW9uIGRlY2xhcmVkIGFzIGBzdGF0aWMgbm9pbmxpbmUgdm9pZGAuIEludGVyZXN0aW5nIOKAkyB0aGF0IGBub2lubGluZWAgaXMgb2Z0ZW4gYSByZWQgZmxhZyBmb3IgZnV6emluZyBvcHBvcnR1bml0aWVzLiBTeXprYWxsZXIsIGdpdmVuIGl0cyBjYXBhYmlsaXRpZXMsIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIGxvb2sgYXQgaXQuCgpOb3csIGxldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZCB3aXRoIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2tgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz0yMzk4PXN0YXRpYyBub2lubGluZSB2b2lkXG5tbS9zbHViLmM6MjM5OTpfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbm1tL3NsdWIuYy0yNDAwLVx0XHRcdCAgICAgICBpbnQgb2JqZWN0cylcbi0tXG5tbS9zbHViLmM9MjQyNj1hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXG4tLVxubW0vc2x1Yi5jLTI0MjktXHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkpXG5tbS9zbHViLmM6MjQzMDpcdFx0X19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAsIG9iamVjdHMpO1xubW0vc2x1Yi5jLTI0MzEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjA1OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEZ1enogVGFyZ2V0KioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uLCBpZGVudGlmaWVkIGFzIGEgYHN0YXRpYyBub2lubGluZSB2b2lkYCwgaXMgYSB2aWFibGUgY2FuZGlkYXRlIGZvciBTeXprYWxsZXIgZnV6emluZy4gVGhlIGBzdGF0aWMgbm9pbmxpbmVgIGF0dHJpYnV0ZXMgaW1tZWRpYXRlbHkgY2F0Y2ggbXkgZXllOyB0aGV5IGhpbnQgYXQgcG90ZW50aWFsIGlzb2xhdGlvbiwgYW5kIHRoZSBhYnNlbmNlIG9mIGlubGluaW5nIGNhbiBiZSBwYXJ0aWN1bGFybHkgYmVuZWZpY2lhbCBmb3IgZnV6emluZyBhcyBpdCBzaW1wbGlmaWVzIGNvbnRyb2wgZmxvdyBhbmFseXNpcy4gVGhlIGZhY3QgdGhhdCBTeXprYWxsZXIgaXMgYmVpbmcgY29uc2lkZXJlZCBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgYSByZWxhdGl2ZWx5IHNpbXBsZSBmdW5jdGlvbiB3aXRoIGRpcmVjdCBleHRlcm5hbCBpbnB1dC4KCk15IG5leHQgc3RlcCwgYW5kIGZyYW5rbHksIG15ICppbW1lZGlhdGUqIHRob3VnaHQsIGlzIHRvIGNoZWNrIHRoZSBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AuIFRoaXMgaXMgc3RhbmRhcmQgb3BlcmF0aW5nIHByb2NlZHVyZSwgZXNwZWNpYWxseSBpbiBtZW1vcnkgbWFuYWdlbWVudCBjb250ZXh0cy4gR2l2ZW4gdGhlICYjMzQ7cG9zdC1hbGxvYyYjMzQ7IGRlc2lnbmF0aW9uLCBpdCYjMzk7cyBsaWtlbHkgYSBjYWxsYmFjayBpbnZva2VkIGFmdGVyIGEgc2xhYiBhbGxvY2F0aW9uIGhhcyBvY2N1cnJlZC4gTXkgbWVudGFsIGdlYXJzIGFyZSBhbHJlYWR5IHR1cm5pbmcg4oCTIHdoYXQgaW5wdXRzIGRvZXMgdGhpcyBob29rIHJlY2VpdmU/IFdoYXQgaXMgaXQgKnN1cHBvc2VkKiB0byBkbyB3aXRoIHRoZSBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5PyBJcyB0aGVyZSBhIHN1YnRsZSByYWNlIGNvbmRpdGlvbiBpbiB0aGlzIGNhbGxiYWNrLCBvciBhIHBvc3NpYmlsaXR5IG9mIG1lbW9yeSBjb3JydXB0aW9uIGR1ZSB0byBpbmNvcnJlY3QgaW5pdGlhbGl6YXRpb24sIG9yIHRoZSBsYWNrIG9mIGl0LCBvciBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvPyBUaGVzZSBhcmUgdGhlIHByaW1hcnkgcXVlc3Rpb25zIEkgaGF2ZSBiYXNlZCBvbiBqdXN0IHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiBhbmQgdGhlIGluaXRpYWwgYXNzZXNzbWVudC4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBiZWdpbiBteSBkZWVwZXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTM1Mjk9c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2Z1bGxfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzUzNy1cbm1tL21lbWNvbnRyb2wuYzozNTM4OmJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG5tbS9tZW1jb250cm9sLmMtMzUzOS1cdFx0XHRcdCAgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBzbGFiX2FsbG9jX2ZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjU0OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgRXBoZW1lcmFsOiBBIER5bmFtaWMgTWVtb3J5IExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBzbyB0aGUgc2l0dWF0aW9uIGlzbiYjMzk7dCBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzICpub24tc3RhdGljKiwgd2hpY2ggaW1tZWRpYXRlbHkgZGVtYW5kcyBhIG1vcmUgbnVhbmNlZCBhcHByb2FjaC4gV2UgY2FuJiMzOTt0IHJlbHkgb24gYXNzdW1wdGlvbnMgb2Ygc3RhYmlsaXR5IGhlcmU7IHdlIG5lZWQgdG8gYWNjb3VudCBmb3Igdm9sYXRpbGl0eS4gSXQmIzM5O3MgZ290IHRoZSB3aGlmZiBvZiBhIHJhY2UgY29uZGl0aW9uLCBvciBwZXJoYXBzIHNvbWV0aGluZyBtb3JlIGRlZXBseSByb290ZWQgaW4gYSBkeW5hbWljIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIGN5Y2xlLgoKTXkgaW5pdGlhbCBodW5jaCBpcyBzb21ldGhpbmcgc2xhYi1yZWxhdGVkIGlzIGNhdXNpbmcgdGhpcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgLiBUaGF0IGZ1bmN0aW9uIG9mdGVuIGdpdmVzIGdvb2QgdmlzaWJpbGl0eSBpbnRvIHRoZSBsaWZlY3ljbGUgb2Ygc2xhYiBhbGxvY2F0aW9ucywgc3BlY2lmaWNhbGx5IGZyb20gYSBtZW1vcnkgY29udHJvbCBncm91cCBwZXJzcGVjdGl2ZS4gSXQgaXMgdGhlIGxvZ2ljYWwgcG9pbnQgdG8gaW52ZXN0aWdhdGUgdGhlIG9yaWdpbiBvZiB0aGUgb2JzZXJ2ZWQgbm9uLXN0YXRpYyBiZWhhdmlvcnMuIEkgY2FuIHVzZSB0aGlzIGFzIGEgc3RhcnRpbmcgcG9pbnQgdG8gc2VlIHdoYXQgdGhlIHByb2JsZW0gaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWVtY2dfc2xhYl9mcmVlX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTM1Mzg9Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzYzMi1cbm1tL21lbWNvbnRyb2wuYzozNjMzOnZvaWQgX19tZW1jZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG5tbS9tZW1jb250cm9sLmMtMzYzNC1cdFx0XHQgICAgdm9pZCAqKnAsIGludCBvYmplY3RzLCB1bnNpZ25lZCBsb25nIG9ial9leHRzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjkzMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0IHVuZGVyc3RhbmRpbmc6CgoqKkFuYWx5emluZyBOb24tU3RhdGljIEJlaGF2aW9yKioKCkFscmlnaHQsIEkmIzM5O20gb2JzZXJ2aW5nIHNvbWV0aGluZyB0aGF0IGlzbiYjMzk7dCBiZWhhdmluZyBzdGF0aWNhbGx5LiBUaGF0JiMzOTtzIHRoZSBrZXkgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZHluYW1pY2FsbHkgaW5mbHVlbmNpbmcgdGhlIHN5c3RlbS4gR2l2ZW4gdGhhdCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgbGlrZWx5IGFyZWEgb2YgbWVtb3J5IGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQsIGFzIHRoZSBub24tc3RhdGljIG5hdHVyZSBoaW50cyBhdCBzb21ldGhpbmcgdGhhdCBjaGFuZ2VzIG92ZXIgdGltZS4gTGV0JiMzOTtzIHNlZS4uLiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgd291bGQgYmUgdG8gaW5zcGVjdCBob3cgdGhlIHN5c3RlbSBpcyBjcmVhdGluZyB0aGVzZSBtZW1vcnkgY2FjaGVzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSBpbnN0cnVtZW50YWwgaW4gaG93IGR5bmFtaWMgbWVtb3J5IGlzIGJlaW5nIGhhbmRsZWQuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHdoYXQmIzM5O3MgZ29pbmcgb24gZHluYW1pY2FsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fa21lbV9jYWNoZV9jcmVhdGVfYXJncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsYWJfY29tbW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2xhYl9jb21tb24uYz0yNjc9X19rbWVtX2NhY2hlX2FsaWFzKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBzaXplLCBzbGFiX2ZsYWdzX3QgZmxhZ3MsXG4tLVxubW0vc2xhYl9jb21tb24uYy0yOTEtLyoqXG5tbS9zbGFiX2NvbW1vbi5jOjI5MjogKiBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MgLSBDcmVhdGUgYSBrbWVtIGNhY2hlLlxubW0vc2xhYl9jb21tb24uYy0yOTMtICogQG5hbWU6IEEgc3RyaW5nIHdoaWNoIGlzIHVzZWQgaW4gL3Byb2Mvc2xhYmluZm8gdG8gaWRlbnRpZnkgdGhpcyBjYWNoZS5cbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTMxNy0gKi9cbm1tL3NsYWJfY29tbW9uLmM6MzE4OnN0cnVjdCBrbWVtX2NhY2hlICpfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MoY29uc3QgY2hhciAqbmFtZSxcbm1tL3NsYWJfY29tbW9uLmMtMzE5LVx0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG9iamVjdF9zaXplLFxuLS1cbm1tL3NsYWJfY29tbW9uLmMtNDA4LX1cbm1tL3NsYWJfY29tbW9uLmM6NDA5OkVYUE9SVF9TWU1CT0woX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzKTtcbm1tL3NsYWJfY29tbW9uLmMtNDEwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQwMAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDIwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gSW5zdHJ1bWVudGF0aW9uKioKCk9rYXksIHNvIHRoaXMgaXMgYWJvdXQgZXhwb3J0ZWQgc3ltYm9scyByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgc2xhYiBhbGxvY2F0b3JzIGFuZCByZWxhdGVkIGhvb2tzLiBJIHNlZSBhIGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2AgdGhhdCBhcmUga2V5OiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AsIHRoZSBgX19hbGxvY190YWdnaW5nX3NsYWJfKmAgaG9va3MgZm9yIGJvdGggYWxsb2NhdGlvbiBhbmQgZnJlZWluZywgYW5kIHRoZW4gdGhvc2UgbWVtY2cgYW5kIGtmZW5jZSBob29rcy4gVGhlbiwgSSBzZWUgYF9fa21lbV9jYWNoZV9jcmVhdGVfYXJnc2AgbGlzdGVkIGFzIHdlbGwsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGNhY2hlcyBhcmUgY29uZmlndXJlZC4KCk5vdywgdGhlIGBFbmFibGVDb25maWdzYCBhcmUgd2hhdCByZWFsbHkgcGlxdWUgbXkgaW50ZXJlc3QuIGBNRU1fQUxMT0NfUFJPRklMSU5HYCwgYE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUYCwgYW5kIGBNRU1DR2Ag4oCTIHRob3NlIGFyZSB0aGUga2V5IGtub2JzIGhlcmUuIFRoZSBkZWZhdWx0IGVuYWJsZSBmbGFnLCBgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRgLCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIHdhbnQgdG8gY2hlY2suIEVuYWJsaW5nIGEgcHJvZmlsaW5nIGZlYXR1cmUgYnkgZGVmYXVsdCBpcyBmYW50YXN0aWMgZm9yIGZ1enppbmcgYW5kIGdlbmVyYWwgYW5hbHlzaXMuIEl0IHNpbXBsaWZpZXMgdGVzdGluZywgc28gaXQgc2VlbXMgbGlrZSBhIHVzZWZ1bCBmbGFnIHRvIGhhdmUuCgpBaCwgYnV0IGhvbGQgb24uIFRoZSBgTUVNX0FMTE9DX1BST0ZJTElOR2AgY29uZmlnIGhhcyBhIGRlcGVuZGVuY3kgb24gYENPREVfVEFHR0lOR2AuIEkmIzM5O2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgdGhhdCBmdXJ0aGVyLiBUaGF0JiMzOTtzIGNydWNpYWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB0YWdzIGFyZSBiZWluZyB1c2VkLCBhbmQgaWYgY29kZSB0YWdnaW5nIGlzIGRlcGVuZGVudCBvbiBzb21ldGhpbmcgZWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENPREVfVEFHR0lORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0xMDI5PWNvbmZpZyBERUJVR19TVEFDS09WRVJGTE9XXG4tLVxubGliL0tjb25maWcuZGVidWctMTA0Ni1cbmxpYi9LY29uZmlnLmRlYnVnOjEwNDc6Y29uZmlnIENPREVfVEFHR0lOR1xubGliL0tjb25maWcuZGVidWctMTA0OC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM5ODcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246CgoqKlJlZmFjdG9yaW5nIHRoZSBNZW1vcnkgUHJvZmlsaW5nIGFuZCBLRkVOQ0UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZXNlIG1lbW9yeSBmZWF0dXJlcyBhcmUgY29uZmlndXJlZC4gSXQgbG9va3MgbGlrZSB0aGUgYENPREVfVEFHR0lOR2Agb3B0aW9uIGlzIGltcGxpY2l0bHkgdGllZCB0byBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3M7IGlmIHdlIGVuYWJsZSBgTUVNX0FMTE9DX1BST0ZJTElOR2AsIGBDT0RFX1RBR0dJTkdgIGlzIHRha2VuIGNhcmUgb2YuIFNvLCByZWFsbHksIGFsbCB3ZSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgTUVNX0FMTE9DX1BST0ZJTElOR2AgYW5kIGBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVGAuIEFuZCBvZiBjb3Vyc2UsIHdlIG5lZWQgdG8gY29uc2lkZXIgYE1FTUNHYCwgd2hpY2ggaXMgYSBkaWZmZXJlbnQgY29uY2VybiwgYnV0IHJlbGV2YW50IGluIHRoZSBiaWdnZXIgcGljdHVyZS4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgS0ZFTkNFYC4gVGhpcyBwYXRjaCB0b3VjaGVzIGBtbS9rZmVuY2UvY29yZS5jYCwgd2hpY2ggaXMgdGhlIGtleSBpbmRpY2F0b3IuIFNvLCBuYXR1cmFsbHksIHdlIHNob3VsZCBlbmFibGUgYEtGRU5DRWAgdG8ga2VlcCBldmVyeXRoaW5nIGNvbnNpc3RlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLRkVOQ0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWcua2ZlbmNlPTM9Y29uZmlnIEhBVkVfQVJDSF9LRkVOQ0Vcbi0tXG5saWIvS2NvbmZpZy5rZmVuY2UtNS1cbmxpYi9LY29uZmlnLmtmZW5jZTo2Om1lbnVjb25maWcgS0ZFTkNFXG5saWIvS2NvbmZpZy5rZmVuY2UtNy1cdGJvb2wgXCYjMzQ7S0ZFTkNFOiBsb3ctb3ZlcmhlYWQgc2FtcGxpbmctYmFzZWQgbWVtb3J5IHNhZmV0eSBlcnJvciBkZXRlY3RvclwmIzM0O1xuLS1cbmxpYi9LY29uZmlnLmtmZW5jZT0yNj1pZiBLRkVOQ0VcbmxpYi9LY29uZmlnLmtmZW5jZS0yNy1cbmxpYi9LY29uZmlnLmtmZW5jZToyODpjb25maWcgS0ZFTkNFX1NBTVBMRV9JTlRFUlZBTFxubGliL0tjb25maWcua2ZlbmNlLTI5LVx0aW50IFwmIzM0O0RlZmF1bHQgc2FtcGxlIGludGVydmFsIGluIG1pbGxpc2Vjb25kc1wmIzM0O1xuLS1cbmxpYi9LY29uZmlnLmtmZW5jZS0zOC1cbmxpYi9LY29uZmlnLmtmZW5jZTozOTpjb25maWcgS0ZFTkNFX05VTV9PQkpFQ1RTXG5saWIvS2NvbmZpZy5rZmVuY2UtNDAtXHRpbnQgXCYjMzQ7TnVtYmVyIG9mIGd1YXJkZWQgb2JqZWN0cyBhdmFpbGFibGVcJiMzNDtcbi0tXG5saWIvS2NvbmZpZy5rZmVuY2UtNDctXG5saWIvS2NvbmZpZy5rZmVuY2U6NDg6Y29uZmlnIEtGRU5DRV9ERUZFUlJBQkxFXG5saWIvS2NvbmZpZy5rZmVuY2UtNDktXHRib29sIFwmIzM0O1VzZSBhIGRlZmVycmFibGUgdGltZXIgdG8gdHJpZ2dlciBhbGxvY2F0aW9uc1wmIzM0O1xuLS1cbmxpYi9LY29uZmlnLmtmZW5jZS01OS1cbmxpYi9LY29uZmlnLmtmZW5jZTo2MDpjb25maWcgS0ZFTkNFX1NUQVRJQ19LRVlTXG5saWIvS2NvbmZpZy5rZmVuY2UtNjEtXHRib29sIFwmIzM0O1VzZSBzdGF0aWMga2V5cyB0byBzZXQgdXAgYWxsb2NhdGlvbnNcJiMzNDsgaWYgRVhQRVJUXG4tLVxubGliL0tjb25maWcua2ZlbmNlLTc0LVxubGliL0tjb25maWcua2ZlbmNlOjc1OmNvbmZpZyBLRkVOQ0VfU1RSRVNTX1RFU1RfRkFVTFRTXG5saWIvS2NvbmZpZy5rZmVuY2UtNzYtXHRpbnQgXCYjMzQ7U3RyZXNzIHRlc3Rpbmcgb2YgZmF1bHQgaGFuZGxpbmcgYW5kIGVycm9yIHJlcG9ydGluZ1wmIzM0OyBpZiBFWFBFUlRcbi0tXG5saWIvS2NvbmZpZy5rZmVuY2UtODUtXG5saWIvS2NvbmZpZy5rZmVuY2U6ODY6Y29uZmlnIEtGRU5DRV9LVU5JVF9URVNUXG5saWIvS2NvbmZpZy5rZmVuY2UtODctXHR0cmlzdGF0ZSBcJiMzNDtLRkVOQ0UgaW50ZWdyYXRpb24gdGVzdCBzdWl0ZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NzU0CgkJCQkJCQlvdXRwdXQ6IDE5MQoJCQkJCQkJdGhvdWdodHM6IDE3NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gcmV2aWV3aW5nIHRoaXMgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSBvcHRpbWl6aW5nIGhvdyBgc3RydWN0IHNsYWJvYmpfZXh0YCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgc2xhYiBhbGxvY2F0b3IsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGFuZCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcuIExldCYjMzk7cyBicmVhayBkb3duIG15IHRob3VnaHQgcHJvY2VzczoKCkZpcnN0bHksIHRoaXMgcGF0Y2ggZGVmaW5pdGVseSBzZWVtcyBmdW5jdGlvbmFsLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gYF9fa2ZlbmNlX2ZyZWVgIGhhcyBiZWVuIG1vZGlmaWVkLCB3aGljaCBpcyBhIGdvb2QgaW5kaWNhdG9yIHRoYXQgdGhlIGNvcmUgbG9naWMgaXMgYmVpbmcgdG91Y2hlZC4gSSYjMzk7dmUgYWxzbyBjaGVja2VkIGBrZmVuY2VfaW5pdF9wb29sYCBhbmQgYHRlc3RfYWxsb2NgIHRvIGNvbmZpcm0gdGhlIHBhdGNoJiMzOTtzIGludGVncmF0aW9uIHdpdGhpbiB0aGUgZXhpc3RpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoZXJlZm9yZSwgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyB0YWxrIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcuIEdpdmVuIG15IGV4cGVydGlzZSwgSSB3YW50IHRvIGhvbmUgaW4gb24gYXJlYXMgbW9zdCBkaXJlY3RseSBpbXBhY3RlZCBieSB0aGVzZSBjaGFuZ2VzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGV4Y2x1ZGUgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByb3ZpZGUgYSBtb3JlIGZvY3VzZWQgZnV6emVyIGV4cGVyaWVuY2UuCgpJbml0aWFsbHksIEkgbG9va2VkIGF0IGEgY29tcHJlaGVuc2l2ZSBsaXN0LiBJIHF1aWNrbHkgcmVqZWN0ZWQgc2V2ZXJhbCBiZWNhdXNlIHRoZXkgd2VyZSBgc3RhdGljYCBvciBgc3RhdGljIGlubGluZWAuIEkmIzM5O20gZ29pbmcgdG8gaW5jbHVkZSB0aGUgZm9sbG93aW5nIHN5bWJvbHM6IGBhbGxvY19zbGFiX29ial9leHRzYCwgYF9fa21lbV9jYWNoZV9jcmVhdGVfYXJnc2AsIGFuZCBgX19rZmVuY2VfZnJlZWAuIFRoZXNlIGFyZSBnb29kIHN0YXJ0LgoKSSB3YW50IHRvIGluY2x1ZGUgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgIGFuZCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AgYmVjYXVzZSB0aGV5IHJlcHJlc2VudCB0aGUgY29yZSBsb2dpYyBjaGFuZ2VzIGZvciBtZW1jZywgZXZlbiBpZiB0aGV5IGFyZSBzb21ld2hhdCBob3QuIEFsc28sIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCBpcyBvbmx5IGNhbGxlZCBmb3IgYSBzdWJzZXQgb2YgYWxsb2NhdGlvbnMsIHdoaWNoIGlzIGFjY2VwdGFibGUuCgpTbyB0aGUgZmluYWwgbGlzdCBvZiBGb2N1c1N5bWJvbHMgd2lsbCBiZToKCiogICBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AKKiAgIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYAoqICAgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgCiogICBgX19rZmVuY2VfZnJlZWAKKiAgIGBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NgCgpUaGlzIHNldCBjb3ZlcnMgbW9kaWZpY2F0aW9ucyBpbiBvYmplY3QgZXh0ZW5zaW9uIHZlY3RvciBhbGxvY2F0aW9uLCBga2ZlbmNlYCBmcmVlIGhhbmRsaW5nLCBhbmQgbWVtY2cgYWNjb3VudGluZywgd2hpY2ggYXJlIGFsbCBkaXJlY3RseSByZWxldmFudCB0byB0aGUgcGF0Y2gmIzM5O3Mgb3B0aW1pemF0aW9ucy4gVGhpcyBmZWVscyBsaWtlIGEgYmFsYW5jZWQgYW5kIGVmZmVjdGl2ZSBzdHJhdGVneSBmb3IgdW5jb3ZlcmluZyBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gVGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zIGluY2x1ZGUgTUVNX0FMTE9DX1BST0ZJTElORywgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFQsIE1FTUNHLCBhbmQgS0ZFTkNFLiBUaGVzZSB3aWxsIGVuc3VyZSB0aGF0IHJlbGV2YW50IGNvZGUgcGF0aHMgYXJlIGFjdGl2YXRlZCBkdXJpbmcgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAgICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFQmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7S0ZFTkNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2Nfc2xhYl9vYmpfZXh0cyYjMzQ7LAogICAgJiMzNDtfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rJiMzNDssCiAgICAmIzM0O19fbWVtY2dfc2xhYl9mcmVlX2hvb2smIzM0OywKICAgICYjMzQ7X19rZmVuY2VfZnJlZSYjMzQ7LAogICAgJiMzNDtfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBsYXlvdXQgYW5kIGhhbmRsaW5nIG9mIGBzdHJ1Y3Qgc2xhYm9ial9leHRgIGluIHRoZSBzbGFiIGFsbG9jYXRvciwgd2hpY2ggaXMgdXNlZCBmb3IgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGFuZCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcuIEl0IG9wdGltaXplcyB0aGUgc3RvcmFnZSBvZiBgb2JqY2dgIGFuZCBgY29kZXRhZ19yZWZgIHBvaW50ZXJzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIHNsYWIgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBwYXRocywgbWFraW5nIHRoZW0gaGlnaGx5IHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7LAogICAgJiMzNDtNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtLRkVOQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19zbGFiX29ial9leHRzJiMzNDssCiAgICAmIzM0O19fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2smIzM0OywKICAgICYjMzQ7X19tZW1jZ19zbGFiX2ZyZWVfaG9vayYjMzQ7LAogICAgJiMzNDtfX2tmZW5jZV9mcmVlJiMzNDssCiAgICAmIzM0O19fa21lbV9jYWNoZV9jcmVhdGVfYXJncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGxheW91dCBhbmQgaGFuZGxpbmcgb2YgYHN0cnVjdCBzbGFib2JqX2V4dGAgaW4gdGhlIHNsYWIgYWxsb2NhdG9yLCB3aGljaCBpcyB1c2VkIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgYW5kIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZy4gSXQgb3B0aW1pemVzIHRoZSBzdG9yYWdlIG9mIGBvYmpjZ2AgYW5kIGBjb2RldGFnX3JlZmAgcG9pbnRlcnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgc2xhYiBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIHBhdGhzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjA6MjMuMjAxODM0MzU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3OTQ1MjA4MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTV9BTExPQ19QUk9GSUxJTkdcIixcbiAgICBcIk1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiS0ZFTkNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2Nfc2xhYl9vYmpfZXh0c1wiLFxuICAgIFwiX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va1wiLFxuICAgIFwiX19tZW1jZ19zbGFiX2ZyZWVfaG9va1wiLFxuICAgIFwiX19rZmVuY2VfZnJlZVwiLFxuICAgIFwiX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBsYXlvdXQgYW5kIGhhbmRsaW5nIG9mIGBzdHJ1Y3Qgc2xhYm9ial9leHRgIGluIHRoZSBzbGFiIGFsbG9jYXRvciwgd2hpY2ggaXMgdXNlZCBmb3IgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGFuZCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcuIEl0IG9wdGltaXplcyB0aGUgc3RvcmFnZSBvZiBgb2JqY2dgIGFuZCBgY29kZXRhZ19yZWZgIHBvaW50ZXJzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIHNsYWIgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBwYXRocywgbWFraW5nIHRoZW0gaGlnaGx5IHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjA6MjMuMjAxODQ5NTc0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk1ODA2MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGExM2JmY2EyNDI3ZGVlYTQxYjYwZWFhYmI4ZjhlYzllNjY4ODUzZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyMCAyMDoyMDoyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0XFxuaW5kZXggNTM4OWQyNDExNzZhOGEuLmQwMmViNTRlZThmMmM2IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RcXG5AQCAtMTEyLDMgKzExMiwxMCBAQCBUbyBkbyBzbzpcXG4gXFxuIC0gVGhlbiwgdXNlIHRoZSBmb2xsb3dpbmcgZm9ybSBmb3IgeW91ciBhbGxvY2F0aW9uczpcXG4gICBhbGxvY19ob29rc190YWcoaHQtXFx1MDAzZXlvdXJfc2F2ZWRfdGFnLCBrbWFsbG9jX25vcHJvZiguLi4pKVxcbitcXG4rTm90ZXNcXG4rPT09PT1cXG4rXFxuKy0gV2hlbiBhIHNsYWIgb2JqZWN0IGlzIGFsbG9jYXRlZCBmcm9tIEtGRU5DRSwgaXRzIGFjY291bnRpbmcgaXMgc2tpcHBlZC5cXG4rICBLRkVOQ0UgYWxsb2NhdGlvbnMgYXJlIHJhcmUgYW5kIGxpbWl0ZWQgdG8gYSBzbWFsbCBudW1iZXIsIHNvIHRoaXMgb21pc3Npb25cXG4rICBpcyBuZWdsaWdpYmxlLlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuaW5kZXggZTFmNDZhMDAxNmZjZmQuLjkzODY5Y2MzNWMyNWJjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5AQCAtMTQ0MCwxOSArMTQ0MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX3dvcmtxdWV1ZSh2b2lkKSB7IH1cXG4gc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cXG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbiBcXG4tLypcXG4tICogRXh0ZW5kZWQgaW5mb3JtYXRpb24gZm9yIHNsYWIgb2JqZWN0cyBzdG9yZWQgYXMgYW4gYXJyYXkgaW4gcGFnZS1cXHUwMDNlbWVtY2dfZGF0YVxcbi0gKiBpZiBNRU1DR19EQVRBX09CSkVYVFMgaXMgc2V0Llxcbi0gKi9cXG4tc3RydWN0IHNsYWJvYmpfZXh0IHtcXG4tI2lmZGVmIENPTkZJR19NRU1DR1xcbi1cXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuLSNlbmRpZlxcbi0jaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG4tXFx0dW5pb24gY29kZXRhZ19yZWYgcmVmO1xcbi0jZW5kaWZcXG4tfSBfX2FsaWduZWQoOCk7XFxuLVxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbiB7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbGFiLmggYi9pbmNsdWRlL2xpbnV4L3NsYWIuaFxcbmluZGV4IDNhMTRkZjUwNzY2YWIwLi5mOTEzMjkwMmM1YTZkZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NsYWIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2xhYi5oXFxuQEAgLTQ1LDYgKzQ1LDcgQEAgZW51bSBfc2xhYl9mbGFnX2JpdHMge1xcbiAjZW5kaWZcXG4gI2lmZGVmIENPTkZJR19NRU1DR1xcbiBcXHRfU0xBQl9BQ0NPVU5ULFxcbitcXHRfU0xBQl9NQVlfQUNDT1VOVCxcXG4gI2VuZGlmXFxuICNpZmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQ1xcbiBcXHRfU0xBQl9LQVNBTixcXG5AQCAtMjA0LDggKzIwNSwxMCBAQCBlbnVtIF9zbGFiX2ZsYWdfYml0cyB7XFxuICAqL1xcbiAjaWZkZWYgQ09ORklHX01FTUNHXFxuICMgZGVmaW5lIFNMQUJfQUNDT1VOVFxcdFxcdF9fU0xBQl9GTEFHX0JJVChfU0xBQl9BQ0NPVU5UKVxcbisjIGRlZmluZSBTTEFCX01BWV9BQ0NPVU5UXFx0X19TTEFCX0ZMQUdfQklUKF9TTEFCX01BWV9BQ0NPVU5UKVxcbiAjZWxzZVxcbiAjIGRlZmluZSBTTEFCX0FDQ09VTlRcXHRcXHRfX1NMQUJfRkxBR19VTlVTRURcXG4rIyBkZWZpbmUgU0xBQl9NQVlfQUNDT1VOVFxcdF9fU0xBQl9GTEFHX1VOVVNFRFxcbiAjZW5kaWZcXG4gXFxuICNpZmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQ1xcbmRpZmYgLS1naXQgYS9tbS9rZmVuY2UvY29yZS5jIGIvbW0va2ZlbmNlL2NvcmUuY1xcbmluZGV4IDY1NzdiZDc2OTU0ZWI0Li44OTdlY2YyNTk0ZmI2NCAxMDA2NDRcXG4tLS0gYS9tbS9rZmVuY2UvY29yZS5jXFxuKysrIGIvbW0va2ZlbmNlL2NvcmUuY1xcbkBAIC02NDAsNiArNjQwLDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcga2ZlbmNlX2luaXRfcG9vbCh2b2lkKVxcbiBcXHRcXHRzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTtcXG4gXFx0XFx0c2xhYi1cXHUwMDNlb2JqX2V4dHMgPSAodW5zaWduZWQgbG9uZylcXHUwMDI2a2ZlbmNlX21ldGFkYXRhX2luaXRbaSAvIDIgLSAxXS5vYmpfZXh0cyB8XFxuIFxcdFxcdFxcdFxcdCBNRU1DR19EQVRBX09CSkVYVFM7XFxuKyNpZmRlZiBDT05GSUdfNjRCSVRcXG4rXFx0XFx0c2xhYi1cXHUwMDNlb2JqX2V4dHNfbmVlZHNfb2JqY2cgPSAxO1xcbisjZW5kaWZcXG4gI2VuZGlmXFxuIFxcdH1cXG4gXFxuQEAgLTEyNDksNyArMTI1Miw3IEBAIHZvaWQgX19rZmVuY2VfZnJlZSh2b2lkICphZGRyKVxcbiBcXHRzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhICptZXRhID0gYWRkcl90b19tZXRhZGF0YSgodW5zaWduZWQgbG9uZylhZGRyKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfTUVNQ0dcXG4tXFx0S0ZFTkNFX1dBUk5fT04obWV0YS1cXHUwMDNlb2JqX2V4dHMub2JqY2cpO1xcbitcXHRLRkVOQ0VfV0FSTl9PTihzbGFiX29ial9leHRfb2JqY2coXFx1MDAyNm1ldGEtXFx1MDAzZW9ial9leHRzKSk7XFxuICNlbmRpZlxcbiBcXHQvKlxcbiBcXHQgKiBJZiB0aGUgb2JqZWN0cyBvZiB0aGUgY2FjaGUgYXJlIFNMQUJfVFlQRVNBRkVfQllfUkNVLCBkZWZlciBmcmVlaW5nXFxuZGlmZiAtLWdpdCBhL21tL2tmZW5jZS9rZmVuY2VfdGVzdC5jIGIvbW0va2ZlbmNlL2tmZW5jZV90ZXN0LmNcXG5pbmRleCBkZTJkMGY3ZDYyYjE1ZS4uOTg2N2MwM2VmMGFlM2QgMTAwNjQ0XFxuLS0tIGEvbW0va2ZlbmNlL2tmZW5jZV90ZXN0LmNcXG4rKysgYi9tbS9rZmVuY2Uva2ZlbmNlX3Rlc3QuY1xcbkBAIC0yOTUsNyArMjk1LDcgQEAgc3RhdGljIHZvaWQgKnRlc3RfYWxsb2Moc3RydWN0IGt1bml0ICp0ZXN0LCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwLCBlbnVtIGFsbG9jYXRcXG4gXFx0XFx0XFx0ICogbWVtY2cgYWNjb3VudGluZyB3b3JrcyBjb3JyZWN0bHkuXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgb2JqX3RvX2luZGV4KHMsIHNsYWIsIGFsbG9jKSwgMFUpO1xcbi1cXHRcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgb2Jqc19wZXJfc2xhYihzLCBzbGFiKSwgMSk7XFxuK1xcdFxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAoKHVuc2lnbmVkIGludClzbGFiLVxcdTAwM2VvYmplY3RzKSwgMSk7XFxuIFxcbiBcXHRcXHRcXHRpZiAocG9saWN5ID09IEFMTE9DQVRFX0FOWSlcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGFsbG9jO1xcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCA2ZGM0ODg4YTkwZjNmZC4uYWFjZTg1ZmI5OWY5NzMgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXFxuKysrIGIvbW0vbWVtY29udHJvbC5jXFxuQEAgLTI4NjUsMTggKzI4NjUsMTkgQEAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqcClcXG4gXFx0ICovXFxuIFxcdHVuc2lnbmVkIGxvbmcgb2JqX2V4dHM7XFxuIFxcdHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dDtcXG4tXFx0dW5zaWduZWQgaW50IG9mZjtcXG4rXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbiBcXG4gXFx0b2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpO1xcbiBcXHRpZiAoIW9ial9leHRzKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG4tXFx0b2ZmID0gb2JqX3RvX2luZGV4KHNsYWItXFx1MDAzZXNsYWJfY2FjaGUsIHNsYWIsIHApO1xcbi1cXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpO1xcbi1cXHRpZiAob2JqX2V4dC1cXHUwMDNlb2JqY2cpIHtcXG4tXFx0XFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnID0gb2JqX2V4dC1cXHUwMDNlb2JqY2c7XFxuK1xcdGlmICghc2xhYl9uZWVkc19vYmpjZyhzbGFiKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbitcXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuK1xcdG9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYi1cXHUwMDNlc2xhYl9jYWNoZSwgc2xhYiwgb2JqX2V4dHMsIHApO1xcbitcXHRvYmpjZyA9IHNsYWJfb2JqX2V4dF9vYmpjZyhvYmpfZXh0KTtcXG4rXFx0aWYgKG9iamNnKSB7XFxuIFxcdFxcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG4gXFx0XFx0cmV0dXJuIG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xcbiBcXHR9XFxuQEAgLTM1NDEsNyArMzU0Miw2IEBAIGJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxuIFxcdHNpemVfdCBvYmpfc2l6ZSA9IG9ial9mdWxsX3NpemUocyk7XFxuIFxcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcXG4gXFx0c3RydWN0IHNsYWIgKnNsYWI7XFxuLVxcdHVuc2lnbmVkIGxvbmcgb2ZmO1xcbiBcXHRzaXplX3QgaTtcXG4gXFxuIFxcdC8qXFxuQEAgLTM1ODMsNiArMzU4Myw5IEBAIGJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxuIFxcbiBcXHRcXHRzbGFiID0gdmlydF90b19zbGFiKHBbaV0pO1xcbiBcXG4rXFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX1ZNKSBcXHUwMDI2XFx1MDAyNiBXQVJOX09OX09OQ0UoIXNsYWJfbmVlZHNfb2JqY2coc2xhYikpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuIFxcdFxcdGlmICghc2xhYl9vYmpfZXh0cyhzbGFiKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgc2xhYl9hbGxvY19mbGFncykpIHtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTM2MTYsMTAgKzM2MTksMTEgQEAgYm9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcXG4gXFxuIFxcdFxcdG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcXG4gXFx0XFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbi1cXHRcXHRvZmYgPSBvYmpfdG9faW5kZXgocywgc2xhYiwgcFtpXSk7XFxuLVxcdFxcdG9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9mZik7XFxuK1xcdFxcdG9ial9leHQgPSBzbGFiX29ial9leHQocywgc2xhYiwgb2JqX2V4dHMsIHBbaV0pO1xcbitcXG4gXFx0XFx0b2JqX2Nncm91cF9nZXQob2JqY2cpO1xcbi1cXHRcXHRvYmpfZXh0LVxcdTAwM2VvYmpjZyA9IG9iamNnO1xcbitcXHRcXHRzbGFiX29ial9leHRfc2V0X29iamNnKG9ial9leHQsIG9iamNnKTtcXG4rXFxuIFxcdFxcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG4gXFx0fVxcbiBcXG5AQCAtMzYzNSwxNSArMzYzOSwxMyBAQCB2b2lkIF9fbWVtY2dfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbiBcXHRcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuIFxcdFxcdHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dDtcXG4gXFx0XFx0c3RydWN0IG9ial9zdG9ja19wY3AgKnN0b2NrO1xcbi1cXHRcXHR1bnNpZ25lZCBpbnQgb2ZmO1xcbiBcXG4tXFx0XFx0b2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHBbaV0pO1xcbi1cXHRcXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpO1xcbi1cXHRcXHRvYmpjZyA9IG9ial9leHQtXFx1MDAzZW9iamNnO1xcbitcXHRcXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwW2ldKTtcXG4rXFx0XFx0b2JqY2cgPSBzbGFiX29ial9leHRfb2JqY2cob2JqX2V4dCk7XFxuIFxcdFxcdGlmICghb2JqY2cpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0b2JqX2V4dC1cXHUwMDNlb2JqY2cgPSBOVUxMO1xcbitcXHRcXHRzbGFiX29ial9leHRfc2V0X29iamNnKG9ial9leHQsIE5VTEwpO1xcbiBcXG4gXFx0XFx0c3RvY2sgPSB0cnlsb2NrX3N0b2NrKCk7XFxuIFxcdFxcdF9fcmVmaWxsX29ial9zdG9jayhvYmpjZywgc3RvY2ssIG9ial9zaXplLCB0cnVlKTtcXG5kaWZmIC0tZ2l0IGEvbW0vc2xhYi5oIGIvbW0vc2xhYi5oXFxuaW5kZXggZjVlMzM2YjZiNmIwNGMuLjE4YzJhODA3ZjAyM2NlIDEwMDY0NFxcbi0tLSBhL21tL3NsYWIuaFxcbisrKyBiL21tL3NsYWIuaFxcbkBAIC04MSwxMCArODEsMTEgQEAgc3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIHtcXG4gI2lmZGVmIENPTkZJR182NEJJVFxcbiBcXHRcXHRcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHRcXHRcXHQgKiBTb21lIG9wdGltaXphdGlvbnMgdXNlIGZyZWUgYml0cyBpbiAnY291bnRlcnMnIGZpZWxkXFxuLVxcdFxcdFxcdFxcdFxcdCAqIHRvIHNhdmUgbWVtb3J5LiBJbiBjYXNlIC1cXHUwMDNlc3RyaWRlIGZpZWxkIGlzIG5vdCBhdmFpbGFibGUsXFxuLVxcdFxcdFxcdFxcdFxcdCAqIHN1Y2ggb3B0aW1pemF0aW9ucyBhcmUgZGlzYWJsZWQuXFxuK1xcdFxcdFxcdFxcdFxcdCAqIHRvIHNhdmUgbWVtb3J5IG9yIENQVS4gSWYgdGhlc2UgZnJlZSBiaXRzIGFyZSBub3RcXG4rXFx0XFx0XFx0XFx0XFx0ICogYXZhaWxhYmxlLCBzdWNoIG9wdGltaXphdGlvbnMgYXJlIGRpc2FibGVkLlxcbiBcXHRcXHRcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IHN0cmlkZTtcXG4rXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgb2JqX2V4dHNfaW5fb2JqZWN0OjE7XFxuK1xcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIG9ial9leHRzX25lZWRzX29iamNnOjE7XFxuICNlbmRpZlxcbiBcXHRcXHRcXHRcXHR9O1xcbiBcXHRcXHRcXHR9O1xcbkBAIC0zMzAsMTIgKzMzMSw2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial90b19pbmRleChjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsXFxuIFxcdHJldHVybiBfX29ial90b19pbmRleChjYWNoZSwgc2xhYl9hZGRyZXNzKHNsYWIpLCBvYmopO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBvYmpzX3Blcl9zbGFiKGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSxcXG4tXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpXFxuLXtcXG4tXFx0cmV0dXJuIHNsYWItXFx1MDAzZW9iamVjdHM7XFxuLX1cXG4tXFxuIC8qXFxuICAqIFN0YXRlIG9mIHRoZSBzbGFiIGFsbG9jYXRvci5cXG4gICpcXG5AQCAtNTU1LDYgKzU1MCw5MyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9rbWFsbG9jX25vX29iamV4dCh2b2lkKVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIEV4dGVuZGVkIGluZm9ybWF0aW9uIGZvciBzbGFiIG9iamVjdHMgc3RvcmVkIGFzIGEgcG9pbnRlciB0byBhbiBhcnJheSBpblxcbisgKiBzbGFiLVxcdTAwM2VvYmpfZXh0cyAoYWxpYXNpbmcgcGFnZS1cXHUwMDNlbWVtY2dfZGF0YSkgaWYgTUVNQ0dfREFUQV9PQkpFWFRTIGlzIHNldC5cXG4rICovXFxuK3N0cnVjdCBzbGFib2JqX2V4dCB7XFxuK1xcdC8qXFxuK1xcdCAqIEFsbCBlbGVtZW50cyBvZiB0aGUgdW5pb24gc2hvdWxkIGJlIHBvaW50ZXItc2l6ZWQgdG8gYXZvaWQgbWVtb3J5XFxuK1xcdCAqIHdhc3RlXFxuK1xcdCAqL1xcbitcXHR1bmlvbiB7XFxuKyNpZmRlZiBDT05GSUdfTUVNQ0dcXG4rXFx0XFx0c3RydWN0IG9ial9jZ3JvdXAgKl9vYmpjZztcXG4rI2VuZGlmXFxuKyNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xcbitcXHRcXHR1bmlvbiBjb2RldGFnX3JlZiBfY3RyZWY7XFxuKyNlbmRpZlxcbitcXHR9O1xcbit9IF9fYWxpZ25lZCg4KTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xcbitERUNMQVJFX1NUQVRJQ19LRVlfTUFZQkUoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxULFxcbitcXHRcXHRcXHQgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIHN0YXRpY19icmFuY2hfbWF5YmUoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxULFxcbitcXHRcXHRcXHRcXHQgICBcXHUwMDI2c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSBib29sIHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZyh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuKyNpZmRlZiBDT05GSUdfTUVNQ0dcXG4rc3RhdGljIGlubGluZSBib29sIGNhY2hlX25lZWRzX29iamNnKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSlcXG4re1xcbitcXHRyZXR1cm4gKGNhY2hlLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNMQUJfTUFZX0FDQ09VTlQpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgc2xhYl9uZWVkc19vYmpjZyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4re1xcbisjaWZkZWYgQ09ORklHXzY0QklUXFxuK1xcdHJldHVybiBzbGFiLVxcdTAwM2VvYmpfZXh0c19uZWVkc19vYmpjZztcXG4rI2Vsc2VcXG4rXFx0cmV0dXJuIGNhY2hlX25lZWRzX29iamNnKHNsYWItXFx1MDAzZXNsYWJfY2FjaGUpO1xcbisjZW5kaWZcXG4rfVxcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIGJvb2wgY2FjaGVfbmVlZHNfb2JqY2coc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIHNsYWJfbmVlZHNfb2JqY2coc3RydWN0IHNsYWIgKnNsYWIpXFxuK3tcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuKyNlbmRpZlxcbitcXG4rc3RhdGljIGlubGluZSBzaXplX3QgY2FjaGVfb2JqX2V4dF9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbit7XFxuK1xcdHNpemVfdCBzeiA9IDA7XFxuK1xcbitcXHRpZiAoY2FjaGVfbmVlZHNfb2JqY2cocykpXFxuK1xcdFxcdHN6ICs9IDE7XFxuK1xcbitcXHRpZiAoc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKCkpXFxuK1xcdFxcdHN6ICs9IDE7XFxuK1xcbitcXHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkgKiBzejtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9vYmpfZXh0X3NpemUoc3RydWN0IHNsYWIgKnNsYWIpXFxuK3tcXG4rXFx0c2l6ZV90IHN6ID0gMDtcXG4rXFxuK1xcdGlmIChzbGFiX25lZWRzX29iamNnKHNsYWIpKVxcbitcXHRcXHRzeiArPSAxO1xcbitcXG4rXFx0aWYgKHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZygpKVxcbitcXHRcXHRzeiArPSAxO1xcbitcXG4rXFx0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc3o7XFxuK31cXG4rXFxuICNpZmRlZiBDT05GSUdfU0xBQl9PQkpfRVhUXFxuIFxcbiAvKlxcbkBAIC01NzIsNyArNjU0LDcgQEAgc3RhdGljIGlubGluZSBib29sIG5lZWRfa21hbGxvY19ub19vYmpleHQodm9pZClcXG4gICogb2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpO1xcbiAgKiBpZiAob2JqX2V4dHMpIHtcXG4gICogICAgICAgICBnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuLSAqICAgICAgICAgb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2JqX3RvX2luZGV4KHMsIHNsYWIsIG9iaikpO1xcbisgKiAgICAgICAgIG9ial9leHQgPSBzbGFiX29ial9leHQocywgc2xhYiwgb2JqX2V4dHMsIG9iaik7XFxuICAqICAgICAgICAgLy8gZG8gc29tZXRoaW5nIHdpdGggb2JqX2V4dFxcbiAgKiAgICAgICAgIHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG4gICogfVxcbkBAIC02MTAsNDggKzY5Miw4MiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3NsYWJfb2JqX2V4dHModW5zaWduZWQgbG9uZyBvYmpfZXh0cylcXG4gfVxcbiBcXG4gI2lmZGVmIENPTkZJR182NEJJVFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBpbnQgc3RyaWRlKVxcbi17XFxuLVxcdHNsYWItXFx1MDAzZXN0cmlkZSA9IHN0cmlkZTtcXG4tfVxcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbGFiX2dldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXFxuIHtcXG4tXFx0cmV0dXJuIHNsYWItXFx1MDAzZXN0cmlkZTtcXG4rXFx0LypcXG4rXFx0ICogTm90ZSB3ZSBjYW5ub3QgcmVseSBvbiB0aGUgU0xBQl9PQkpfRVhUX0lOX09CSiBmbGFnIGhlcmUgYW5kIG5lZWQgdG9cXG4rXFx0ICogY2hlY2sgdGhlIHBlci1zbGFiIGJpdC4gQSBjYWNoZSBjYW4gaGF2ZSBTTEFCX09CSl9FWFRfSU5fT0JKIHNldCwgYnV0XFxuK1xcdCAqIGFsbG9jYXRpb25zIHdpdGhpbl9zbGFiX2xlZnRvdmVyIGFyZSBwcmVmZXJyZWQuIEFuZCB0aG9zZSBtYXkgYmVcXG4rXFx0ICogcG9zc2libGUgb3Igbm90IGRlcGVuZGluZyBvbiB0aGUgcGFydGljdWxhciBzbGFiJ3Mgc2l6ZS5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBzbGFiLVxcdTAwM2VvYmpfZXh0c19pbl9vYmplY3Q7XFxuIH1cXG4gI2Vsc2VcXG4tc3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgaW50IHN0cmlkZSlcXG4rc3RhdGljIGlubGluZSBib29sIG9ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4ge1xcbi1cXHRWTV9XQVJOX09OX09OQ0Uoc3RyaWRlICE9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKTtcXG4tfVxcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbGFiX2dldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIpXFxuLXtcXG4tXFx0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpO1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gI2VuZGlmXFxuIFxcbiAvKlxcbiAgKiBzbGFiX29ial9leHQgLSBnZXQgdGhlIHBvaW50ZXIgdG8gdGhlIHNsYWIgb2JqZWN0IGV4dGVuc2lvbiBtZXRhZGF0YVxcbiAgKiBhc3NvY2lhdGVkIHdpdGggYW4gb2JqZWN0IGluIGEgc2xhYi5cXG4rICogQHM6IGNhY2hlIHRoYXQgdGhlIHNsYWIgYmxvbmdzIHRvXFxuICAqIEBzbGFiOiBhIHBvaW50ZXIgdG8gdGhlIHNsYWIgc3RydWN0XFxuICAqIEBvYmpfZXh0czogYSBwb2ludGVyIHRvIHRoZSBvYmplY3QgZXh0ZW5zaW9uIHZlY3Rvclxcbi0gKiBAaW5kZXg6IGFuIGluZGV4IG9mIHRoZSBvYmplY3RcXG4rICogQG9iajogYSBwb2ludGVyIHRvIHRoZSBvYmplY3RcXG4gICpcXG4gICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCBleHRlbnNpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBvYmplY3QuXFxuICAqIE11c3QgYmUgY2FsbGVkIHdpdGhpbiBhIHNlY3Rpb24gY292ZXJlZCBieSBnZXQvcHV0X3NsYWJfb2JqX2V4dHMoKS5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpzbGFiX29ial9leHQoc3RydWN0IHNsYWIgKnNsYWIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIG9ial9leHRzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGluZGV4KVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqXFxuK3NsYWJfb2JqX2V4dChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXFxuK1xcdCAgICAgY29uc3Qgdm9pZCAqb2JqKVxcbiB7XFxuIFxcdHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dDtcXG4rXFx0dW5zaWduZWQgaW50IGluZGV4O1xcbitcXHR1bnNpZ25lZCBpbnQgc3RyaWRlO1xcbiBcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKG9ial9leHRzICE9IHNsYWJfb2JqX2V4dHMoc2xhYikpO1xcbiBcXG4tXFx0b2JqX2V4dCA9IChzdHJ1Y3Qgc2xhYm9ial9leHQgKikob2JqX2V4dHMgK1xcbi1cXHRcXHRcXHRcXHRcXHQgc2xhYl9nZXRfc3RyaWRlKHNsYWIpICogaW5kZXgpO1xcbitcXHRpbmRleCA9IG9ial90b19pbmRleChzLCBzbGFiLCBvYmopO1xcbitcXG4rXFx0aWYgKCFvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpXFxuK1xcdFxcdHN0cmlkZSA9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHN0cmlkZSA9IHMtXFx1MDAzZXNpemU7XFxuK1xcbitcXHRvYmpfZXh0ID0gKHN0cnVjdCBzbGFib2JqX2V4dCAqKShvYmpfZXh0cyArIGluZGV4ICogc3RyaWRlKTtcXG4rXFxuIFxcdHJldHVybiBrYXNhbl9yZXNldF90YWcob2JqX2V4dCk7XFxuIH1cXG4gXFxuKyNpZmRlZiBDT05GSUdfTUVNQ0dcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqc2xhYl9vYmpfZXh0X29iamNnKHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dClcXG4re1xcbitcXHQvKiBpZiBvYmpjZyBleGlzdHMsIGl0IGNvbWVzIGZpcnN0LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nICovXFxuK1xcdHJldHVybiBvYmpfZXh0LVxcdTAwM2Vfb2JqY2c7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX29ial9leHRfc2V0X29iamNnKHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXFxuK3tcXG4rXFx0LyogaWYgb2JqY2cgZXhpc3RzLCBpdCBjb21lcyBmaXJzdCwgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyAqL1xcbitcXHRvYmpfZXh0LVxcdTAwM2Vfb2JqY2cgPSBvYmpjZztcXG4rfVxcbisjZW5kaWZcXG4rXFxuKyNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xcbitzdGF0aWMgaW5saW5lIHVuaW9uIGNvZGV0YWdfcmVmICpcXG4rc2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQpXFxuK3tcXG4rXFx0aWYgKHNsYWJfbmVlZHNfb2JqY2coc2xhYikpXFxuK1xcdFxcdG9ial9leHQgKz0gMTtcXG4rXFxuK1xcdHJldHVybiBcXHUwMDI2b2JqX2V4dC1cXHUwMDNlX2N0cmVmO1xcbit9XFxuKyNlbmRpZlxcbitcXG4gaW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbiBcXHRcXHRcXHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyk7XFxuIFxcbkBAIC02NjIsMTYgKzc3OCwxNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpzbGFiX29ial9leHQoc3RydWN0IHNsYWIgKnNsYWIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIG9ial9leHRzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGluZGV4KVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqXFxuK3NsYWJfb2JqX2V4dChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXFxuK1xcdCAgICAgY29uc3Qgdm9pZCAqb2JqKVxcbiB7XFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBpbnQgc3RyaWRlKSB7IH1cXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2xhYl9nZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiKSB7IHJldHVybiAwOyB9XFxuLVxcbitzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbiBcXG4gI2VuZGlmIC8qIENPTkZJR19TTEFCX09CSl9FWFQgKi9cXG4gXFxuZGlmZiAtLWdpdCBhL21tL3NsYWJfY29tbW9uLmMgYi9tbS9zbGFiX2NvbW1vbi5jXFxuaW5kZXggMDNlY2FjMTJjZDg2NWYuLjRlOTgzZTI1MDMzODdhIDEwMDY0NFxcbi0tLSBhL21tL3NsYWJfY29tbW9uLmNcXG4rKysgYi9tbS9zbGFiX2NvbW1vbi5jXFxuQEAgLTUyLDcgKzUyLDcgQEAgc3RydWN0IGttZW1fY2FjaGUgKmttZW1fY2FjaGU7XFxuIFxcdFxcdFNMQUJfT0JKX0VYVF9JTl9PQkopXFxuIFxcbiAjZGVmaW5lIFNMQUJfTUVSR0VfU0FNRSAoU0xBQl9SRUNMQUlNX0FDQ09VTlQgfCBTTEFCX0NBQ0hFX0RNQSB8IFxcXFxcXG4tXFx0XFx0XFx0IFNMQUJfQ0FDSEVfRE1BMzIgfCBTTEFCX0FDQ09VTlQpXFxuK1xcdFxcdFxcdCBTTEFCX0NBQ0hFX0RNQTMyIHwgU0xBQl9BQ0NPVU5UIHwgU0xBQl9NQVlfQUNDT1VOVClcXG4gXFxuIC8qXFxuICAqIE1lcmdlIGNvbnRyb2wuIElmIHRoaXMgaXMgc2V0IHRoZW4gbm8gbWVyZ2luZyBvZiBzbGFiIGNhY2hlcyB3aWxsIG9jY3VyLlxcbkBAIC0zNTksNiArMzU5LDEzIEBAIHN0cnVjdCBrbWVtX2NhY2hlICpfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MoY29uc3QgY2hhciAqbmFtZSxcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbitcXHQvKlxcbitcXHQgKiBGb3Igbm93IHdlIGFzc3VtZSBhbnkgY2FjaGUgY2FuIGJlIHVzZWQgd2l0aCBfX0dGUF9BQ0NPVU5UIGFuZCB0aHVzXFxuK1xcdCAqIG1heSBuZWVkIHRvIHN0b3JlIG9iamNnIHBvaW50ZXJzIGZvciBvYmplY3RzXFxuK1xcdCAqL1xcbitcXHRpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxcbitcXHRcXHRmbGFncyB8PSBTTEFCX01BWV9BQ0NPVU5UO1xcbitcXG4gXFx0LyogRmFpbCBjbG9zZWQgb24gYmFkIHVzZXJzaXplIG9mIHVzZXJvZmZzZXQgdmFsdWVzLiAqL1xcbiBcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZKSB8fFxcbiBcXHQgICAgV0FSTl9PTighYXJncy1cXHUwMDNldXNlcnNpemUgXFx1MDAyNlxcdTAwMjYgYXJncy1cXHUwMDNldXNlcm9mZnNldCkgfHxcXG5AQCAtOTg0LDExICs5OTEsMTkgQEAgbmV3X2ttYWxsb2NfY2FjaGUoaW50IGlkeCwgZW51bSBrbWFsbG9jX2NhY2hlX3R5cGUgdHlwZSlcXG4gI2VuZGlmXFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBJZiBDT05GSUdfTUVNQ0cgaXMgZW5hYmxlZCwgZGlzYWJsZSBjYWNoZSBtZXJnaW5nIGZvclxcbi1cXHQgKiBLTUFMTE9DX05PUk1BTCBjYWNoZXMuXFxuK1xcdCAqIElmIG1lbWNnX2ttZW0gaXMgZW5hYmxlZCBhbmQgdGhpcyBpcyBhIEtNQUxMT0NfTk9STUFMIGNhY2hlIGFuZCAgbm90XFxuK1xcdCAqIGFsaWFzZWQgd2l0aCBhbnkgb3RoZXIgdHlwZSwgbWFrZSBzdXJlIGl0J3MgbmV2ZXIgbWVyZ2VkIHdpdGggYW55IG90aGVyXFxuK1xcdCAqIGNhY2hlLlxcbitcXHQgKlxcbitcXHQgKiBJbiBvdGhlciBjYXNlcyB0aGUga21hbGxvYyBjYWNoZSBtYXkgZW5kIHVwIGJlaW5nIHVzZWQgZm9yIGFcXG4rXFx0ICogX19HRlBfQUNDT1VOVCBhbGxvY2F0aW9uIHNvIG1hcmsgaXQgYXMgc3VjaFxcbiBcXHQgKi9cXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX01FTUNHKSBcXHUwMDI2XFx1MDAyNiAodHlwZSA9PSBLTUFMTE9DX05PUk1BTCkpXFxuLVxcdFxcdGZsYWdzIHw9IFNMQUJfTk9fTUVSR0U7XFxuK1xcdGlmICghbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpIHtcXG4rXFx0XFx0aWYgKHR5cGUgPT0gS01BTExPQ19OT1JNQUwgXFx1MDAyNlxcdTAwMjYgS01BTExPQ19SRUNMQUlNICE9IEtNQUxMT0NfTk9STUFMKVxcbitcXHRcXHRcXHRmbGFncyB8PSBTTEFCX05PX01FUkdFO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGZsYWdzIHw9IFNMQUJfTUFZX0FDQ09VTlQ7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChtaW5hbGlnbiBcXHUwMDNlIEFSQ0hfS01BTExPQ19NSU5BTElHTikge1xcbiBcXHRcXHRhbGlnbmVkX3NpemUgPSBBTElHTihhbGlnbmVkX3NpemUsIG1pbmFsaWduKTtcXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXFxuaW5kZXggMDMzN2U2MGRiNWFjZTAuLmU2MTQ4YjczYjkyZjg4IDEwMDY0NFxcbi0tLSBhL21tL3NsdWIuY1xcbisrKyBiL21tL3NsdWIuY1xcbkBAIC0yMTMsNiArMjEzLDExIEBAIERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHNsdWJfZGVidWdfZW5hYmxlZCk7XFxuIHN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShzdHJpY3RfbnVtYSk7XFxuICNlbmRpZlxcbiBcXG4rI2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxuK0RFRklORV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcXG4rXFx0XFx0XFx0c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XFxuKyNlbmRpZlxcbitcXG4gLyogU3RydWN0dXJlIGhvbGRpbmcgZXh0cmEgcGFyYW1ldGVycyBmb3Igc2xhYiBhbGxvY2F0aW9ucyAqL1xcbiBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0IHtcXG4gXFx0dW5zaWduZWQgbG9uZyBjYWxsZXJfYWRkcjtcXG5AQCAtODAzLDcgKzgwOCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX3NsYWJfb2JqX2V4dHMoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuIFxcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfZXh0c19zaXplX2luX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpXFxuIHtcXG4tXFx0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc2xhYi1cXHUwMDNlb2JqZWN0cztcXG4rXFx0cmV0dXJuIHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpICogc2xhYi1cXHUwMDNlb2JqZWN0cztcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG9ial9leHRzX29mZnNldF9pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbkBAIC04NzAsMTggKzg3NSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4gI2VuZGlmXFxuIFxcbiAjaWYgZGVmaW5lZChDT05GSUdfU0xBQl9PQkpfRVhUKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcXG4tc3RhdGljIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4te1xcbi1cXHQvKlxcbi1cXHQgKiBOb3RlIHdlIGNhbm5vdCByZWx5IG9uIHRoZSBTTEFCX09CSl9FWFRfSU5fT0JKIGZsYWcgaGVyZSBhbmQgbmVlZCB0b1xcbi1cXHQgKiBjaGVjayB0aGUgc3RyaWRlLiBBIGNhY2hlIGNhbiBoYXZlIFNMQUJfT0JKX0VYVF9JTl9PQkogc2V0LCBidXRcXG4tXFx0ICogYWxsb2NhdGlvbnMgd2l0aGluX3NsYWJfbGVmdG92ZXIgYXJlIHByZWZlcnJlZC4gQW5kIHRob3NlIG1heSBiZVxcbi1cXHQgKiBwb3NzaWJsZSBvciBub3QgZGVwZW5kaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIHNsYWIncyBzaXplLlxcbi1cXHQgKi9cXG4tXFx0cmV0dXJuIG9ial9leHRzX2luX3NsYWIocywgc2xhYikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICAgIChzbGFiX2dldF9zdHJpZGUoc2xhYikgPT0gcy1cXHUwMDNlc2l6ZSk7XFxuLX1cXG4tXFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgb2JqX2V4dHNfb2Zmc2V0X2luX29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gZ2V0X2luZm9fZW5kKHMpO1xcbkBAIC04OTYsMTYgKzg4OSwyMCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuIFxcbiBcXHRyZXR1cm4gb2Zmc2V0O1xcbiB9XFxuLSNlbHNlXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X29ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4ge1xcbi1cXHRyZXR1cm4gZmFsc2U7XFxuK1xcdHNsYWItXFx1MDAzZW9ial9leHRzX2luX29iamVjdCA9IDE7XFxuIH1cXG4tXFxuKyNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXFxuK3tcXG4rfVxcbiAjZW5kaWZcXG4gXFxuICNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbkBAIC0xMjA2LDggKzEyMDMsOCBAQCBzdGF0aWMgdm9pZCBwcmludF90cmFpbGVyKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdTggKnApXFxuIFxcbiBcXHRvZmYgKz0ga2FzYW5fbWV0YWRhdGFfc2l6ZShzLCBmYWxzZSk7XFxuIFxcbi1cXHRpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKVxcbi1cXHRcXHRvZmYgKz0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCk7XFxuK1xcdGlmIChvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpXFxuK1xcdFxcdG9mZiArPSBzbGFiX29ial9leHRfc2l6ZShzbGFiKTtcXG4gXFxuIFxcdGlmIChvZmYgIT0gc2l6ZV9mcm9tX29iamVjdChzKSlcXG4gXFx0XFx0LyogQmVnaW5uaW5nIG9mIHRoZSBmaWxsZXIgaXMgdGhlIGZyZWUgcG9pbnRlciAqL1xcbkBAIC0xNDExLDggKzE0MDgsOCBAQCBzdGF0aWMgaW50IGNoZWNrX3BhZF9ieXRlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHU4ICpwKVxcbiBcXG4gXFx0b2ZmICs9IGthc2FuX21ldGFkYXRhX3NpemUocywgZmFsc2UpO1xcbiBcXG4tXFx0aWYgKG9ial9leHRzX2luX29iamVjdChzLCBzbGFiKSlcXG4tXFx0XFx0b2ZmICs9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpO1xcbitcXHRpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKVxcbitcXHRcXHRvZmYgKz0gc2xhYl9vYmpfZXh0X3NpemUoc2xhYik7XFxuIFxcbiBcXHRpZiAoc2l6ZV9mcm9tX29iamVjdChzKSA9PSBvZmYpXFxuIFxcdFxcdHJldHVybiAxO1xcbkBAIC0xNDM5LDcgKzE0MzYsNyBAQCBzbGFiX3BhZF9jaGVjayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXFxuIFxcdGxlbmd0aCA9IHNsYWJfc2l6ZShzbGFiKTtcXG4gXFx0ZW5kID0gc3RhcnQgKyBsZW5ndGg7XFxuIFxcbi1cXHRpZiAob2JqX2V4dHNfaW5fc2xhYihzLCBzbGFiKSBcXHUwMDI2XFx1MDAyNiAhb2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKSB7XFxuK1xcdGlmIChvYmpfZXh0c19pbl9zbGFiKHMsIHNsYWIpIFxcdTAwMjZcXHUwMDI2ICFvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpIHtcXG4gXFx0XFx0cmVtYWluZGVyID0gbGVuZ3RoO1xcbiBcXHRcXHRyZW1haW5kZXIgLT0gb2JqX2V4dHNfb2Zmc2V0X2luX3NsYWIocywgc2xhYik7XFxuIFxcdFxcdHJlbWFpbmRlciAtPSBvYmpfZXh0c19zaXplX2luX3NsYWIoc2xhYik7XFxuQEAgLTIwNzAsMjAgKzIwNjcsMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoY29uc3Qgdm9pZCAqb2JqKVxcbiBcXHRvYmpfc2xhYiA9IHZpcnRfdG9fc2xhYihvYmopO1xcbiBcXHRzbGFiX2V4dHMgPSBzbGFiX29ial9leHRzKG9ial9zbGFiKTtcXG4gXFx0aWYgKHNsYWJfZXh0cykge1xcbitcXHRcXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKmV4dDtcXG4rXFx0XFx0dW5pb24gY29kZXRhZ19yZWYgKnJlZjtcXG4rXFxuIFxcdFxcdGdldF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XFxuLVxcdFxcdHVuc2lnbmVkIGludCBvZmZzID0gb2JqX3RvX2luZGV4KG9ial9zbGFiLVxcdTAwM2VzbGFiX2NhY2hlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgb2JqX3NsYWIsIG9iaik7XFxuLVxcdFxcdHN0cnVjdCBzbGFib2JqX2V4dCAqZXh0ID0gc2xhYl9vYmpfZXh0KG9ial9zbGFiLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc2xhYl9leHRzLCBvZmZzKTtcXG4rXFx0XFx0ZXh0ID0gc2xhYl9vYmpfZXh0KG9ial9zbGFiLVxcdTAwM2VzbGFiX2NhY2hlLCBvYmpfc2xhYiwgc2xhYl9leHRzLCBvYmopO1xcbitcXHRcXHRyZWYgPSBzbGFiX29ial9leHRfY29kZXRhZ19yZWYob2JqX3NsYWIsIGV4dCk7XFxuK1xcbitcXHRcXHRpZiAoaXNfa2ZlbmNlX2FkZHJlc3Mob2JqKSkge1xcbitcXHRcXHRcXHRwdXRfc2xhYl9vYmpfZXh0cyhzbGFiX2V4dHMpO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4gXFxuLVxcdFxcdGlmICh1bmxpa2VseShpc19jb2RldGFnX2VtcHR5KFxcdTAwMjZleHQtXFx1MDAzZXJlZikpKSB7XFxuK1xcdFxcdGlmICh1bmxpa2VseShpc19jb2RldGFnX2VtcHR5KHJlZikpKSB7XFxuIFxcdFxcdFxcdHB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0LyogY29kZXRhZyBzaG91bGQgYmUgTlVMTCBoZXJlICovXFxuLVxcdFxcdFdBUk5fT04oZXh0LVxcdTAwM2VyZWYuY3QpO1xcbi1cXHRcXHRzZXRfY29kZXRhZ19lbXB0eShcXHUwMDI2ZXh0LVxcdTAwM2VyZWYpO1xcbitcXHRcXHRXQVJOX09OKHJlZi1cXHUwMDNlY3QpO1xcbitcXHRcXHRzZXRfY29kZXRhZ19lbXB0eShyZWYpO1xcbiBcXHRcXHRwdXRfc2xhYl9vYmpfZXh0cyhzbGFiX2V4dHMpO1xcbiBcXHR9XFxuIH1cXG5AQCAtMjA5MywxOSArMjA5NiwyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFya19mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4gXFx0cmV0dXJuIGNtcHhjaGcoXFx1MDAyNnNsYWItXFx1MDAzZW9ial9leHRzLCAwLCBPQkpFWFRTX0FMTE9DX0ZBSUwpID09IDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcXG4tXFx0XFx0XFx0c3RydWN0IHNsYWJvYmpfZXh0ICp2ZWMsIHVuc2lnbmVkIGludCBvYmplY3RzKVxcbitzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIG9ial9leHRzLCBzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYylcXG4ge1xcbitcXHR1bnNpZ25lZCBpbnQgc3RyaWRlO1xcbitcXG4rXFx0aWYgKCFtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0LypcXG4gXFx0ICogSWYgdmVjdG9yIHByZXZpb3VzbHkgZmFpbGVkIHRvIGFsbG9jYXRlIHRoZW4gd2UgaGF2ZSBsaXZlXFxuIFxcdCAqIG9iamVjdHMgd2l0aCBubyB0YWcgcmVmZXJlbmNlLiBNYXJrIGFsbCByZWZlcmVuY2VzIGluIHRoaXNcXG4gXFx0ICogdmVjdG9yIGFzIGVtcHR5IHRvIGF2b2lkIHdhcm5pbmdzIGxhdGVyIG9uLlxcbiBcXHQgKi9cXG4tXFx0aWYgKG9ial9leHRzID09IE9CSkVYVFNfQUxMT0NfRkFJTCkge1xcbi1cXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFx0aWYgKG9ial9leHRzICE9IE9CSkVYVFNfQUxMT0NfRkFJTClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c3RyaWRlID0gc2xhYl9vYmpfZXh0X3NpemUoc2xhYikgLyBzaXplb2YoKnZlYyk7XFxuK1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIHNsYWItXFx1MDAzZW9iamVjdHM7IGkrKykge1xcbitcXHRcXHR1bmlvbiBjb2RldGFnX3JlZiAqcmVmID0gc2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKHNsYWIsIHZlYyk7XFxuIFxcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgb2JqZWN0czsgaSsrKVxcbi1cXHRcXHRcXHRzZXRfY29kZXRhZ19lbXB0eShcXHUwMDI2dmVjW2ldLnJlZik7XFxuK1xcdFxcdHNldF9jb2RldGFnX2VtcHR5KHJlZik7XFxuK1xcdFxcdHZlYyArPSBzdHJpZGU7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMjExMyw4ICsyMTI2LDggQEAgc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyh1bnNpZ25lZCBsb25nIG9ial9leHRzLFxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoY29uc3Qgdm9pZCAqb2JqKSB7fVxcbiBzdGF0aWMgaW5saW5lIGJvb2wgbWFya19mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYikgeyByZXR1cm4gZmFsc2U7IH1cXG4tc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyh1bnNpZ25lZCBsb25nIG9ial9leHRzLFxcbi1cXHRcXHRcXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYywgdW5zaWduZWQgaW50IG9iamVjdHMpIHt9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsIHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjKSB7fVxcbiBcXG4gI2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXFxuIFxcbkBAIC0yMTI3LDEyICsyMTQwLDExIEBAIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4gXFx0XFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuIHtcXG4gXFx0Y29uc3QgYm9vbCBhbGxvd19zcGluID0gYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWxsb2NfZmxhZ3MpO1xcbi1cXHR1bnNpZ25lZCBpbnQgb2JqZWN0cyA9IG9ianNfcGVyX3NsYWIocywgc2xhYik7XFxuIFxcdGJvb2wgbmV3X3NsYWIgPSBhbGxvY19mbGFncyBcXHUwMDI2IFNMQUJfQUxMT0NfTkVXX1NMQUI7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbmV3X2V4dHM7XFxuIFxcdHVuc2lnbmVkIGxvbmcgb2xkX2V4dHM7XFxuIFxcdHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjO1xcbi1cXHRzaXplX3Qgc3ogPSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHNsYWItXFx1MDAzZW9iamVjdHM7XFxuK1xcdHNpemVfdCBzeiA9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpICogc2xhYi1cXHUwMDNlb2JqZWN0cztcXG4gXFxuIFxcdGdmcCBcXHUwMDI2PSB+T0JKQ0dTX0NMRUFSX01BU0s7XFxuIFxcdC8qXFxuQEAgLTIxODMsNyArMjE5NSw3IEBAIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4gI2VuZGlmXFxuIHJldHJ5OlxcbiBcXHRvbGRfZXh0cyA9IFJFQURfT05DRShzbGFiLVxcdTAwM2VvYmpfZXh0cyk7XFxuLVxcdGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhvbGRfZXh0cywgdmVjLCBvYmplY3RzKTtcXG4rXFx0aGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHNsYWIsIG9sZF9leHRzLCB2ZWMpO1xcbiBcXG4gXFx0aWYgKG5ld19zbGFiKSB7XFxuIFxcdFxcdC8qXFxuQEAgLTIyNTAsOSArMjI2Miw2IEBAIHN0YXRpYyB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxcbiBcXHR2b2lkICphZGRyO1xcbiBcXHR1bnNpZ25lZCBsb25nIG9ial9leHRzO1xcbiBcXG4tXFx0LyogSW5pdGlhbGl6ZSBzdHJpZGUgZWFybHkgdG8gYXZvaWQgbWVtb3J5IG9yZGVyaW5nIGlzc3VlcyAqL1xcbi1cXHRzbGFiX3NldF9zdHJpZGUoc2xhYiwgc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkpO1xcbi1cXG4gXFx0aWYgKCFuZWVkX3NsYWJfb2JqX2V4dHMocykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuQEAgLTIyNzgsMTUgKzIyODcsMTQgQEAgc3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXFxuIFxcbiBcXHRcXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuIFxcdFxcdGZvcl9lYWNoX29iamVjdChhZGRyLCBzLCBzbGFiX2FkZHJlc3Moc2xhYiksIHNsYWItXFx1MDAzZW9iamVjdHMpXFxuLVxcdFxcdFxcdG1lbXNldChrYXNhbl9yZXNldF90YWcoYWRkcikgKyBvZmZzZXQsIDAsXFxuLVxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSk7XFxuK1xcdFxcdFxcdG1lbXNldChrYXNhbl9yZXNldF90YWcoYWRkcikgKyBvZmZzZXQsIDAsIHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpKTtcXG4gXFx0XFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19NRU1DR1xcbiBcXHRcXHRvYmpfZXh0cyB8PSBNRU1DR19EQVRBX09CSkVYVFM7XFxuICNlbmRpZlxcbiBcXHRcXHRzbGFiLVxcdTAwM2VvYmpfZXh0cyA9IG9ial9leHRzO1xcbi1cXHRcXHRzbGFiX3NldF9zdHJpZGUoc2xhYiwgcy1cXHUwMDNlc2l6ZSk7XFxuK1xcdFxcdHNsYWJfc2V0X29ial9leHRzX2luX29iamVjdChzbGFiKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0yMzUyLDYgKzIzNjAsOSBAQCBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIGdmcF90IGZsYWdzLFxcbiBcXHRpZiAoYWxsb2NfZmxhZ3MgXFx1MDAyNiBTTEFCX0FMTE9DX05PX1JFQ1VSU0UpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdGlmIChpc19rZmVuY2VfYWRkcmVzcyhvYmplY3QpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRzbGFiID0gdmlydF90b19zbGFiKG9iamVjdCk7XFxuIFxcdG9ial9leHRzID0gcHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2socywgc2xhYiwgZmxhZ3MsIGFsbG9jX2ZsYWdzLCBvYmplY3QpO1xcbiBcXHQvKlxcbkBAIC0yMzYwLDExICsyMzcxLDE1IEBAIF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgZ2ZwX3QgZmxhZ3MsXFxuIFxcdCAqIGNoZWNrIHNob3VsZCBiZSBhZGRlZCBiZWZvcmUgYWxsb2NfdGFnX2FkZCgpLlxcbiBcXHQgKi9cXG4gXFx0aWYgKG9ial9leHRzKSB7XFxuLVxcdFxcdHVuc2lnbmVkIGludCBvYmpfaWR4ID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIG9iamVjdCk7XFxuK1xcdFxcdHVuaW9uIGNvZGV0YWdfcmVmICpyZWY7XFxuIFxcbiBcXHRcXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuLVxcdFxcdG9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9ial9pZHgpO1xcbi1cXHRcXHRhbGxvY190YWdfYWRkKFxcdTAwMjZvYmpfZXh0LVxcdTAwM2VyZWYsIGN1cnJlbnQtXFx1MDAzZWFsbG9jX3RhZywgcy1cXHUwMDNlc2l6ZSk7XFxuK1xcbitcXHRcXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBvYmplY3QpO1xcbitcXHRcXHRyZWYgPSBzbGFiX29ial9leHRfY29kZXRhZ19yZWYoc2xhYiwgb2JqX2V4dCk7XFxuK1xcbitcXHRcXHRhbGxvY190YWdfYWRkKHJlZiwgY3VycmVudC1cXHUwMDNlYWxsb2NfdGFnLCBzLVxcdTAwM2VzaXplKTtcXG4rXFxuIFxcdFxcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0YWxsb2NfdGFnX3NldF9pbmFjY3VyYXRlKGN1cnJlbnQtXFx1MDAzZWFsbG9jX3RhZyk7XFxuQEAgLTIzODQsNyArMjM5OSw2IEBAIHN0YXRpYyBub2lubGluZSB2b2lkXFxuIF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxcbiBcXHRcXHRcXHQgICAgICAgaW50IG9iamVjdHMpXFxuIHtcXG4tXFx0aW50IGk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgb2JqX2V4dHM7XFxuIFxcbiBcXHQvKiBzbGFiLVxcdTAwM2VvYmpfZXh0cyBtaWdodCBub3QgYmUgTlVMTCBpZiBpdCB3YXMgY3JlYXRlZCBmb3IgTUVNQ0cgYWNjb3VudGluZy4gKi9cXG5AQCAtMjM5NiwxMCArMjQxMCwxNCBAQCBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcFxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBvYmplY3RzOyBpKyspIHtcXG4tXFx0XFx0dW5zaWduZWQgaW50IG9mZiA9IG9ial90b19pbmRleChzLCBzbGFiLCBwW2ldKTtcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBvYmplY3RzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHNsYWJvYmpfZXh0ICpleHQ7XFxuK1xcbitcXHRcXHRpZiAoaXNfa2ZlbmNlX2FkZHJlc3MocFtpXSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0YWxsb2NfdGFnX3N1YihcXHUwMDI2c2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpLVxcdTAwM2VyZWYsIHMtXFx1MDAzZXNpemUpO1xcbitcXHRcXHRleHQgPSBzbGFiX29ial9leHQocywgc2xhYiwgb2JqX2V4dHMsIHBbaV0pO1xcbitcXHRcXHRhbGxvY190YWdfc3ViKHNsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihzbGFiLCBleHQpLCBzLVxcdTAwM2VzaXplKTtcXG4gXFx0fVxcbiBcXHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuIH1cXG5AQCAtMjQxMiw2ICsyNDMwLDI1IEBAIGFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcXG4gXFx0XFx0X19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAsIG9iamVjdHMpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBNYWtlIHN1cmUgdGhlIHN0YXRpYyBrZXkgdXNlZCBieSBzbGFiX29ial9leHRfaGFzX2NvZGV0YWcoKSByZWZsZWN0cyB0aGVcXG4rICogdmFsdWUgb2YgIW1lbV9hbGxvY19wcm9maWxpbmdfcGVybWFuZW50bHlfZGlzYWJsZWQoKVxcbisgKlxcbisgKiBBbnkgbGF0ZXIgbWVtIGFsbG9jIHByb2ZpbGluZyBzaHV0ZG93biB3b24ndCBiZSByZWZsZWN0ZWQgaW4gdGhlIHN0YXRpYyBrZXlcXG4rICogYmVjYXVzZSBvYmpfZXh0cyB3aXRoIGNvZGV0YWdzIG1pZ2h0IGFscmVhZHkgZXhpc3QuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBfX2luaXQgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXQodm9pZClcXG4re1xcbitcXHRib29sIG5lZWRfY29kZXRhZyA9ICFtZW1fYWxsb2NfcHJvZmlsaW5nX3Blcm1hbmVudGx5X2Rpc2FibGVkKCk7XFxuK1xcbitcXHRpZiAobmVlZF9jb2RldGFnICE9IHN0YXRpY19rZXlfZW5hYmxlZChcXHUwMDI2c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSkpIHtcXG4rXFx0XFx0aWYgKG5lZWRfY29kZXRhZylcXG4rXFx0XFx0XFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHN0YXRpY19icmFuY2hfZGlzYWJsZShcXHUwMDI2c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XFxuK1xcdH1cXG4rfVxcbitcXG4gI2Vsc2UgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcgKi9cXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZFxcbkBAIC0yNDI2LDYgKzI0NjMsMTAgQEAgYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxcbiB7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCh2b2lkKVxcbit7XFxuK31cXG4rXFxuICNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xcbiBcXG4gXFxuQEAgLTI0NzEsNiArMjUxMiw5IEBAIHZvaWQgbWVtY2dfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcXG4gXFx0aWYgKGxpa2VseSghb2JqX2V4dHMpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRpZiAoIXNsYWJfbmVlZHNfb2JqY2coc2xhYikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG4gXFx0X19tZW1jZ19zbGFiX2ZyZWVfaG9vayhzLCBzbGFiLCBwLCBvYmplY3RzLCBvYmpfZXh0cyk7XFxuIFxcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG5AQCAtMjQ4NCw3ICsyNTI4LDYgQEAgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxcbiBcXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIFxcdHN0cnVjdCBzbGFiICpzbGFiO1xcbi1cXHR1bnNpZ25lZCBsb25nIG9mZjtcXG4gXFxuIFxcdHBhZ2UgPSB2aXJ0X3RvX3BhZ2UocCk7XFxuIFxcdGlmIChQYWdlTGFyZ2VLbWFsbG9jKHBhZ2UpKSB7XFxuQEAgLTI1MTcsMTYgKzI1NjAsMTUgQEAgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxcbiBcXHQgKiBvZiBzbGFiX29ial9leHRzIGJlaW5nIGFsbG9jYXRlZCBmcm9tIHRoZSBzYW1lIHNsYWIgYW5kIHRodXMgdGhlIHNsYWJcXG4gXFx0ICogYmVjb21pbmcgZWZmZWN0aXZlbHkgdW5mcmVlYWJsZS5cXG4gXFx0ICovXFxuLVxcdGlmIChpc19rbWFsbG9jX25vcm1hbChzKSlcXG4rXFx0aWYgKCFjYWNoZV9uZWVkc19vYmpjZyhzKSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHQvKiBJZ25vcmUgYWxyZWFkeSBjaGFyZ2VkIG9iamVjdHMuICovXFxuIFxcdG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcXG4gXFx0aWYgKG9ial9leHRzKSB7XFxuIFxcdFxcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG4tXFx0XFx0b2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHApO1xcbi1cXHRcXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpO1xcbi1cXHRcXHRpZiAodW5saWtlbHkob2JqX2V4dC1cXHUwMDNlb2JqY2cpKSB7XFxuK1xcdFxcdG9ial9leHQgPSBzbGFiX29ial9leHQocywgc2xhYiwgb2JqX2V4dHMsIHApO1xcbitcXHRcXHRpZiAodW5saWtlbHkoc2xhYl9vYmpfZXh0X29iamNnKG9ial9leHQpKSkge1xcbiBcXHRcXHRcXHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRcXHR9XFxuQEAgLTMzOTEsMTAgKzM0MzMsMTUgQEAgc3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4gXFx0XFx0c3RhdChzLCBPUkRFUl9GQUxMQkFDSyk7XFxuIFxcdH1cXG4gXFxuK1xcdC8qIEluaXRpYWxpemVzIGZyb3plbiwgaW51c2UsIGFuZCBhbnkgZXh0cmEgNjRiaXQtb25seSBmbGFncyAqL1xcbitcXHRzbGFiLVxcdTAwM2Vjb3VudGVycyA9IDA7XFxuK1xcbiBcXHRzbGFiLVxcdTAwM2VvYmplY3RzID0gb29fb2JqZWN0cyhvbyk7XFxuLVxcdHNsYWItXFx1MDAzZWludXNlID0gMDtcXG4tXFx0c2xhYi1cXHUwMDNlZnJvemVuID0gMDtcXG4gXFxuKyNpZmRlZiBDT05GSUdfNjRCSVRcXG4rXFx0aWYgKGNhY2hlX25lZWRzX29iamNnKHMpKVxcbitcXHRcXHRzbGFiLVxcdTAwM2VvYmpfZXh0c19uZWVkc19vYmpjZyA9IDE7XFxuKyNlbmRpZlxcbiBcXHRzbGFiLVxcdTAwM2VzbGFiX2NhY2hlID0gcztcXG4gXFxuIFxcdGthc2FuX3BvaXNvbl9zbGFiKHNsYWIpO1xcbkBAIC02NTI2LDcgKzY1NzMsNyBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBzbGFiX2tzaXplKHN0cnVjdCBzbGFiICpzbGFiKVxcbiBcXHQgKi9cXG4gXFx0aWYgKHMtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKFNMQUJfVFlQRVNBRkVfQllfUkNVIHwgU0xBQl9TVE9SRV9VU0VSKSlcXG4gXFx0XFx0cmV0dXJuIHMtXFx1MDAzZWludXNlO1xcbi1cXHRlbHNlIGlmIChvYmpfZXh0c19pbl9vYmplY3Qocywgc2xhYikpXFxuK1xcdGVsc2UgaWYgKG9ial9leHRzX2luX29iamVjdChzbGFiKSlcXG4gXFx0XFx0cmV0dXJuIHMtXFx1MDAzZWludXNlO1xcbiBcXHQvKlxcbiBcXHQgKiBFbHNlIHdlIGNhbiB1c2UgYWxsIHRoZSBwYWRkaW5nIGV0YyBmb3IgdGhlIGFsbG9jYXRpb25cXG5AQCAtNzkyOSw3ICs3OTc2LDcgQEAgc3RhdGljIGludCBjYWxjdWxhdGVfc2l6ZXMoc3RydWN0IGttZW1fY2FjaGVfYXJncyAqYXJncywgc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuIFxcdGFsaWduZWRfc2l6ZSA9IEFMSUdOKHNpemUsIHMtXFx1MDAzZWFsaWduKTtcXG4gI2lmIGRlZmluZWQoQ09ORklHX1NMQUJfT0JKX0VYVCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXFxuIFxcdGlmIChzbGFiX2FyZ3NfdW5tZXJnZWFibGUoYXJncywgcy1cXHUwMDNlZmxhZ3MpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdChhbGlnbmVkX3NpemUgLSBzaXplIFxcdTAwM2U9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKSlcXG4rXFx0XFx0XFx0KGFsaWduZWRfc2l6ZSAtIHNpemUgXFx1MDAzZT0gY2FjaGVfb2JqX2V4dF9zaXplKHMpKSlcXG4gXFx0XFx0cy1cXHUwMDNlZmxhZ3MgfD0gU0xBQl9PQkpfRVhUX0lOX09CSjtcXG4gI2VuZGlmXFxuIFxcdHNpemUgPSBhbGlnbmVkX3NpemU7XFxuQEAgLTg1MzksNiArODU4Niw4IEBAIHZvaWQgX19pbml0IGttZW1fY2FjaGVfaW5pdCh2b2lkKVxcbiBcXHRcXHRib290X2ttZW1fY2FjaGVfbm9kZTtcXG4gXFx0aW50IG5vZGU7XFxuIFxcbitcXHRzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCgpO1xcbitcXG4gXFx0aWYgKGRlYnVnX2d1YXJkcGFnZV9taW5vcmRlcigpKVxcbiBcXHRcXHRzbHViX21heF9vcmRlciA9IDA7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMDoyNC4yOTg4Mzg5MzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMDY4NDgxODU4MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR1wiLFxuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJLRkVOQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zbGFiX29ial9leHRzXCIsXG4gICAgXCJfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rXCIsXG4gICAgXCJfX21lbWNnX3NsYWJfZnJlZV9ob29rXCIsXG4gICAgXCJfX2tmZW5jZV9mcmVlXCIsXG4gICAgXCJfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGxheW91dCBhbmQgaGFuZGxpbmcgb2YgYHN0cnVjdCBzbGFib2JqX2V4dGAgaW4gdGhlIHNsYWIgYWxsb2NhdG9yLCB3aGljaCBpcyB1c2VkIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgYW5kIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZy4gSXQgb3B0aW1pemVzIHRoZSBzdG9yYWdlIG9mIGBvYmpjZ2AgYW5kIGBjb2RldGFnX3JlZmAgcG9pbnRlcnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgc2xhYiBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIHBhdGhzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRhMTNiZmNhMjQyN2RlZWE0MWI2MGVhYWJiOGY4ZWM5ZTY2ODg1M2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAyMDoyMDoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RcbmluZGV4IDUzODlkMjQxMTc2YThhLi5kMDJlYjU0ZWU4ZjJjNiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdFxuQEAgLTExMiwzICsxMTIsMTAgQEAgVG8gZG8gc286XG4gXG4gLSBUaGVuLCB1c2UgdGhlIGZvbGxvd2luZyBmb3JtIGZvciB5b3VyIGFsbG9jYXRpb25zOlxuICAgYWxsb2NfaG9va3NfdGFnKGh0LVx1MDAzZXlvdXJfc2F2ZWRfdGFnLCBrbWFsbG9jX25vcHJvZiguLi4pKVxuK1xuK05vdGVzXG4rPT09PT1cbitcbistIFdoZW4gYSBzbGFiIG9iamVjdCBpcyBhbGxvY2F0ZWQgZnJvbSBLRkVOQ0UsIGl0cyBhY2NvdW50aW5nIGlzIHNraXBwZWQuXG4rICBLRkVOQ0UgYWxsb2NhdGlvbnMgYXJlIHJhcmUgYW5kIGxpbWl0ZWQgdG8gYSBzbWFsbCBudW1iZXIsIHNvIHRoaXMgb21pc3Npb25cbisgIGlzIG5lZ2xpZ2libGUuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggZTFmNDZhMDAxNmZjZmQuLjkzODY5Y2MzNWMyNWJjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMTQ0MCwxOSArMTQ0MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX3dvcmtxdWV1ZSh2b2lkKSB7IH1cbiBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfVxuICNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbiBcbi0vKlxuLSAqIEV4dGVuZGVkIGluZm9ybWF0aW9uIGZvciBzbGFiIG9iamVjdHMgc3RvcmVkIGFzIGFuIGFycmF5IGluIHBhZ2UtXHUwMDNlbWVtY2dfZGF0YVxuLSAqIGlmIE1FTUNHX0RBVEFfT0JKRVhUUyBpcyBzZXQuXG4tICovXG4tc3RydWN0IHNsYWJvYmpfZXh0IHtcbi0jaWZkZWYgQ09ORklHX01FTUNHXG4tXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4tI2VuZGlmXG4tI2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG4tXHR1bmlvbiBjb2RldGFnX3JlZiByZWY7XG4tI2VuZGlmXG4tfSBfX2FsaWduZWQoOCk7XG4tXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbGFiLmggYi9pbmNsdWRlL2xpbnV4L3NsYWIuaFxuaW5kZXggM2ExNGRmNTA3NjZhYjAuLmY5MTMyOTAyYzVhNmRkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zbGFiLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2xhYi5oXG5AQCAtNDUsNiArNDUsNyBAQCBlbnVtIF9zbGFiX2ZsYWdfYml0cyB7XG4gI2VuZGlmXG4gI2lmZGVmIENPTkZJR19NRU1DR1xuIFx0X1NMQUJfQUNDT1VOVCxcbitcdF9TTEFCX01BWV9BQ0NPVU5ULFxuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQ1xuIFx0X1NMQUJfS0FTQU4sXG5AQCAtMjA0LDggKzIwNSwxMCBAQCBlbnVtIF9zbGFiX2ZsYWdfYml0cyB7XG4gICovXG4gI2lmZGVmIENPTkZJR19NRU1DR1xuICMgZGVmaW5lIFNMQUJfQUNDT1VOVFx0XHRfX1NMQUJfRkxBR19CSVQoX1NMQUJfQUNDT1VOVClcbisjIGRlZmluZSBTTEFCX01BWV9BQ0NPVU5UXHRfX1NMQUJfRkxBR19CSVQoX1NMQUJfTUFZX0FDQ09VTlQpXG4gI2Vsc2VcbiAjIGRlZmluZSBTTEFCX0FDQ09VTlRcdFx0X19TTEFCX0ZMQUdfVU5VU0VEXG4rIyBkZWZpbmUgU0xBQl9NQVlfQUNDT1VOVFx0X19TTEFCX0ZMQUdfVU5VU0VEXG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19LQVNBTl9HRU5FUklDXG5kaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2NvcmUuYyBiL21tL2tmZW5jZS9jb3JlLmNcbmluZGV4IDY1NzdiZDc2OTU0ZWI0Li44OTdlY2YyNTk0ZmI2NCAxMDA2NDRcbi0tLSBhL21tL2tmZW5jZS9jb3JlLmNcbisrKyBiL21tL2tmZW5jZS9jb3JlLmNcbkBAIC02NDAsNiArNjQwLDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcga2ZlbmNlX2luaXRfcG9vbCh2b2lkKVxuIFx0XHRzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTtcbiBcdFx0c2xhYi1cdTAwM2VvYmpfZXh0cyA9ICh1bnNpZ25lZCBsb25nKVx1MDAyNmtmZW5jZV9tZXRhZGF0YV9pbml0W2kgLyAyIC0gMV0ub2JqX2V4dHMgfFxuIFx0XHRcdFx0IE1FTUNHX0RBVEFfT0JKRVhUUztcbisjaWZkZWYgQ09ORklHXzY0QklUXG4rXHRcdHNsYWItXHUwMDNlb2JqX2V4dHNfbmVlZHNfb2JqY2cgPSAxO1xuKyNlbmRpZlxuICNlbmRpZlxuIFx0fVxuIFxuQEAgLTEyNDksNyArMTI1Miw3IEBAIHZvaWQgX19rZmVuY2VfZnJlZSh2b2lkICphZGRyKVxuIFx0c3RydWN0IGtmZW5jZV9tZXRhZGF0YSAqbWV0YSA9IGFkZHJfdG9fbWV0YWRhdGEoKHVuc2lnbmVkIGxvbmcpYWRkcik7XG4gXG4gI2lmZGVmIENPTkZJR19NRU1DR1xuLVx0S0ZFTkNFX1dBUk5fT04obWV0YS1cdTAwM2VvYmpfZXh0cy5vYmpjZyk7XG4rXHRLRkVOQ0VfV0FSTl9PTihzbGFiX29ial9leHRfb2JqY2coXHUwMDI2bWV0YS1cdTAwM2VvYmpfZXh0cykpO1xuICNlbmRpZlxuIFx0LypcbiBcdCAqIElmIHRoZSBvYmplY3RzIG9mIHRoZSBjYWNoZSBhcmUgU0xBQl9UWVBFU0FGRV9CWV9SQ1UsIGRlZmVyIGZyZWVpbmdcbmRpZmYgLS1naXQgYS9tbS9rZmVuY2Uva2ZlbmNlX3Rlc3QuYyBiL21tL2tmZW5jZS9rZmVuY2VfdGVzdC5jXG5pbmRleCBkZTJkMGY3ZDYyYjE1ZS4uOTg2N2MwM2VmMGFlM2QgMTAwNjQ0XG4tLS0gYS9tbS9rZmVuY2Uva2ZlbmNlX3Rlc3QuY1xuKysrIGIvbW0va2ZlbmNlL2tmZW5jZV90ZXN0LmNcbkBAIC0yOTUsNyArMjk1LDcgQEAgc3RhdGljIHZvaWQgKnRlc3RfYWxsb2Moc3RydWN0IGt1bml0ICp0ZXN0LCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwLCBlbnVtIGFsbG9jYXRcbiBcdFx0XHQgKiBtZW1jZyBhY2NvdW50aW5nIHdvcmtzIGNvcnJlY3RseS5cbiBcdFx0XHQgKi9cbiBcdFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgb2JqX3RvX2luZGV4KHMsIHNsYWIsIGFsbG9jKSwgMFUpO1xuLVx0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBvYmpzX3Blcl9zbGFiKHMsIHNsYWIpLCAxKTtcbitcdFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgKCh1bnNpZ25lZCBpbnQpc2xhYi1cdTAwM2VvYmplY3RzKSwgMSk7XG4gXG4gXHRcdFx0aWYgKHBvbGljeSA9PSBBTExPQ0FURV9BTlkpXG4gXHRcdFx0XHRyZXR1cm4gYWxsb2M7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA2ZGM0ODg4YTkwZjNmZC4uYWFjZTg1ZmI5OWY5NzMgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTI4NjUsMTggKzI4NjUsMTkgQEAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqcClcbiBcdCAqL1xuIFx0dW5zaWduZWQgbG9uZyBvYmpfZXh0cztcbiBcdHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dDtcbi1cdHVuc2lnbmVkIGludCBvZmY7XG4rXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4gXG4gXHRvYmpfZXh0cyA9IHNsYWJfb2JqX2V4dHMoc2xhYik7XG4gXHRpZiAoIW9ial9leHRzKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbi1cdG9mZiA9IG9ial90b19pbmRleChzbGFiLVx1MDAzZXNsYWJfY2FjaGUsIHNsYWIsIHApO1xuLVx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKTtcbi1cdGlmIChvYmpfZXh0LVx1MDAzZW9iamNnKSB7XG4tXHRcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyA9IG9ial9leHQtXHUwMDNlb2JqY2c7XG4rXHRpZiAoIXNsYWJfbmVlZHNfb2JqY2coc2xhYikpXG4rXHRcdHJldHVybiBOVUxMO1xuIFxuK1x0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuK1x0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLVx1MDAzZXNsYWJfY2FjaGUsIHNsYWIsIG9ial9leHRzLCBwKTtcbitcdG9iamNnID0gc2xhYl9vYmpfZXh0X29iamNnKG9ial9leHQpO1xuK1x0aWYgKG9iamNnKSB7XG4gXHRcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbiBcdFx0cmV0dXJuIG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xuIFx0fVxuQEAgLTM1NDEsNyArMzU0Miw2IEBAIGJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG4gXHRzaXplX3Qgb2JqX3NpemUgPSBvYmpfZnVsbF9zaXplKHMpO1xuIFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0c3RydWN0IHNsYWIgKnNsYWI7XG4tXHR1bnNpZ25lZCBsb25nIG9mZjtcbiBcdHNpemVfdCBpO1xuIFxuIFx0LypcbkBAIC0zNTgzLDYgKzM1ODMsOSBAQCBib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxuIFxuIFx0XHRzbGFiID0gdmlydF90b19zbGFiKHBbaV0pO1xuIFxuK1x0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfREVCVUdfVk0pIFx1MDAyNlx1MDAyNiBXQVJOX09OX09OQ0UoIXNsYWJfbmVlZHNfb2JqY2coc2xhYikpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBzbGFiX2FsbG9jX2ZsYWdzKSkge1xuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTM2MTYsMTAgKzM2MTksMTEgQEAgYm9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbiBcbiBcdFx0b2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpO1xuIFx0XHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4tXHRcdG9mZiA9IG9ial90b19pbmRleChzLCBzbGFiLCBwW2ldKTtcbi1cdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKTtcbitcdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgcFtpXSk7XG4rXG4gXHRcdG9ial9jZ3JvdXBfZ2V0KG9iamNnKTtcbi1cdFx0b2JqX2V4dC1cdTAwM2VvYmpjZyA9IG9iamNnO1xuK1x0XHRzbGFiX29ial9leHRfc2V0X29iamNnKG9ial9leHQsIG9iamNnKTtcbitcbiBcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0fVxuIFxuQEAgLTM2MzUsMTUgKzM2MzksMTMgQEAgdm9pZCBfX21lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbiBcdFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQ7XG4gXHRcdHN0cnVjdCBvYmpfc3RvY2tfcGNwICpzdG9jaztcbi1cdFx0dW5zaWduZWQgaW50IG9mZjtcbiBcbi1cdFx0b2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHBbaV0pO1xuLVx0XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpO1xuLVx0XHRvYmpjZyA9IG9ial9leHQtXHUwMDNlb2JqY2c7XG4rXHRcdG9ial9leHQgPSBzbGFiX29ial9leHQocywgc2xhYiwgb2JqX2V4dHMsIHBbaV0pO1xuK1x0XHRvYmpjZyA9IHNsYWJfb2JqX2V4dF9vYmpjZyhvYmpfZXh0KTtcbiBcdFx0aWYgKCFvYmpjZylcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0b2JqX2V4dC1cdTAwM2VvYmpjZyA9IE5VTEw7XG4rXHRcdHNsYWJfb2JqX2V4dF9zZXRfb2JqY2cob2JqX2V4dCwgTlVMTCk7XG4gXG4gXHRcdHN0b2NrID0gdHJ5bG9ja19zdG9jaygpO1xuIFx0XHRfX3JlZmlsbF9vYmpfc3RvY2sob2JqY2csIHN0b2NrLCBvYmpfc2l6ZSwgdHJ1ZSk7XG5kaWZmIC0tZ2l0IGEvbW0vc2xhYi5oIGIvbW0vc2xhYi5oXG5pbmRleCBmNWUzMzZiNmI2YjA0Yy4uMThjMmE4MDdmMDIzY2UgMTAwNjQ0XG4tLS0gYS9tbS9zbGFiLmhcbisrKyBiL21tL3NsYWIuaFxuQEAgLTgxLDEwICs4MSwxMSBAQCBzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMge1xuICNpZmRlZiBDT05GSUdfNjRCSVRcbiBcdFx0XHRcdFx0LypcbiBcdFx0XHRcdFx0ICogU29tZSBvcHRpbWl6YXRpb25zIHVzZSBmcmVlIGJpdHMgaW4gJ2NvdW50ZXJzJyBmaWVsZFxuLVx0XHRcdFx0XHQgKiB0byBzYXZlIG1lbW9yeS4gSW4gY2FzZSAtXHUwMDNlc3RyaWRlIGZpZWxkIGlzIG5vdCBhdmFpbGFibGUsXG4tXHRcdFx0XHRcdCAqIHN1Y2ggb3B0aW1pemF0aW9ucyBhcmUgZGlzYWJsZWQuXG4rXHRcdFx0XHRcdCAqIHRvIHNhdmUgbWVtb3J5IG9yIENQVS4gSWYgdGhlc2UgZnJlZSBiaXRzIGFyZSBub3RcbitcdFx0XHRcdFx0ICogYXZhaWxhYmxlLCBzdWNoIG9wdGltaXphdGlvbnMgYXJlIGRpc2FibGVkLlxuIFx0XHRcdFx0XHQgKi9cbi1cdFx0XHRcdFx0dW5zaWduZWQgaW50IHN0cmlkZTtcbitcdFx0XHRcdFx0dW5zaWduZWQgb2JqX2V4dHNfaW5fb2JqZWN0OjE7XG4rXHRcdFx0XHRcdHVuc2lnbmVkIG9ial9leHRzX25lZWRzX29iamNnOjE7XG4gI2VuZGlmXG4gXHRcdFx0XHR9O1xuIFx0XHRcdH07XG5AQCAtMzMwLDEyICszMzEsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfdG9faW5kZXgoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLFxuIFx0cmV0dXJuIF9fb2JqX3RvX2luZGV4KGNhY2hlLCBzbGFiX2FkZHJlc3Moc2xhYiksIG9iaik7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG9ianNfcGVyX3NsYWIoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLFxuLVx0XHRcdFx0Y29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpXG4te1xuLVx0cmV0dXJuIHNsYWItXHUwMDNlb2JqZWN0cztcbi19XG4tXG4gLypcbiAgKiBTdGF0ZSBvZiB0aGUgc2xhYiBhbGxvY2F0b3IuXG4gICpcbkBAIC01NTUsNiArNTUwLDkzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX2ttYWxsb2Nfbm9fb2JqZXh0KHZvaWQpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuKy8qXG4rICogRXh0ZW5kZWQgaW5mb3JtYXRpb24gZm9yIHNsYWIgb2JqZWN0cyBzdG9yZWQgYXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IGluXG4rICogc2xhYi1cdTAwM2VvYmpfZXh0cyAoYWxpYXNpbmcgcGFnZS1cdTAwM2VtZW1jZ19kYXRhKSBpZiBNRU1DR19EQVRBX09CSkVYVFMgaXMgc2V0LlxuKyAqL1xuK3N0cnVjdCBzbGFib2JqX2V4dCB7XG4rXHQvKlxuK1x0ICogQWxsIGVsZW1lbnRzIG9mIHRoZSB1bmlvbiBzaG91bGQgYmUgcG9pbnRlci1zaXplZCB0byBhdm9pZCBtZW1vcnlcbitcdCAqIHdhc3RlXG4rXHQgKi9cbitcdHVuaW9uIHtcbisjaWZkZWYgQ09ORklHX01FTUNHXG4rXHRcdHN0cnVjdCBvYmpfY2dyb3VwICpfb2JqY2c7XG4rI2VuZGlmXG4rI2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG4rXHRcdHVuaW9uIGNvZGV0YWdfcmVmIF9jdHJlZjtcbisjZW5kaWZcbitcdH07XG4rfSBfX2FsaWduZWQoOCk7XG4rXG4rI2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG4rREVDTEFSRV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcbitcdFx0XHQgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XG4rXG4rc3RhdGljIGlubGluZSBib29sIHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZyh2b2lkKVxuK3tcbitcdHJldHVybiBzdGF0aWNfYnJhbmNoX21heWJlKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcbitcdFx0XHRcdCAgIFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xuK31cbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWcodm9pZClcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuKyNlbmRpZlxuK1xuKyNpZmRlZiBDT05GSUdfTUVNQ0dcbitzdGF0aWMgaW5saW5lIGJvb2wgY2FjaGVfbmVlZHNfb2JqY2coc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlKVxuK3tcbitcdHJldHVybiAoY2FjaGUtXHUwMDNlZmxhZ3MgXHUwMDI2IFNMQUJfTUFZX0FDQ09VTlQpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgc2xhYl9uZWVkc19vYmpjZyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbit7XG4rI2lmZGVmIENPTkZJR182NEJJVFxuK1x0cmV0dXJuIHNsYWItXHUwMDNlb2JqX2V4dHNfbmVlZHNfb2JqY2c7XG4rI2Vsc2VcbitcdHJldHVybiBjYWNoZV9uZWVkc19vYmpjZyhzbGFiLVx1MDAzZXNsYWJfY2FjaGUpO1xuKyNlbmRpZlxuK31cbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBjYWNoZV9uZWVkc19vYmpjZyhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgc2xhYl9uZWVkc19vYmpjZyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuKyNlbmRpZlxuK1xuK3N0YXRpYyBpbmxpbmUgc2l6ZV90IGNhY2hlX29ial9leHRfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbit7XG4rXHRzaXplX3Qgc3ogPSAwO1xuK1xuK1x0aWYgKGNhY2hlX25lZWRzX29iamNnKHMpKVxuK1x0XHRzeiArPSAxO1xuK1xuK1x0aWYgKHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZygpKVxuK1x0XHRzeiArPSAxO1xuK1xuK1x0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc3o7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHNsYWJfb2JqX2V4dF9zaXplKHN0cnVjdCBzbGFiICpzbGFiKVxuK3tcbitcdHNpemVfdCBzeiA9IDA7XG4rXG4rXHRpZiAoc2xhYl9uZWVkc19vYmpjZyhzbGFiKSlcbitcdFx0c3ogKz0gMTtcbitcbitcdGlmIChzbGFiX29ial9leHRfaGFzX2NvZGV0YWcoKSlcbitcdFx0c3ogKz0gMTtcbitcbitcdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHN6O1xuK31cbitcbiAjaWZkZWYgQ09ORklHX1NMQUJfT0JKX0VYVFxuIFxuIC8qXG5AQCAtNTcyLDcgKzY1NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX2ttYWxsb2Nfbm9fb2JqZXh0KHZvaWQpXG4gICogb2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpO1xuICAqIGlmIChvYmpfZXh0cykge1xuICAqICAgICAgICAgZ2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuLSAqICAgICAgICAgb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2JqX3RvX2luZGV4KHMsIHNsYWIsIG9iaikpO1xuKyAqICAgICAgICAgb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgb2JqKTtcbiAgKiAgICAgICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIG9ial9leHRcbiAgKiAgICAgICAgIHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbiAgKiB9XG5AQCAtNjEwLDQ4ICs2OTIsODIgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dF9zbGFiX29ial9leHRzKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMpXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfNjRCSVRcbi1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBpbnQgc3RyaWRlKVxuLXtcbi1cdHNsYWItXHUwMDNlc3RyaWRlID0gc3RyaWRlO1xuLX1cbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbGFiX2dldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIpXG4rc3RhdGljIGlubGluZSBib29sIG9ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYilcbiB7XG4tXHRyZXR1cm4gc2xhYi1cdTAwM2VzdHJpZGU7XG4rXHQvKlxuK1x0ICogTm90ZSB3ZSBjYW5ub3QgcmVseSBvbiB0aGUgU0xBQl9PQkpfRVhUX0lOX09CSiBmbGFnIGhlcmUgYW5kIG5lZWQgdG9cbitcdCAqIGNoZWNrIHRoZSBwZXItc2xhYiBiaXQuIEEgY2FjaGUgY2FuIGhhdmUgU0xBQl9PQkpfRVhUX0lOX09CSiBzZXQsIGJ1dFxuK1x0ICogYWxsb2NhdGlvbnMgd2l0aGluX3NsYWJfbGVmdG92ZXIgYXJlIHByZWZlcnJlZC4gQW5kIHRob3NlIG1heSBiZVxuK1x0ICogcG9zc2libGUgb3Igbm90IGRlcGVuZGluZyBvbiB0aGUgcGFydGljdWxhciBzbGFiJ3Mgc2l6ZS5cbitcdCAqL1xuK1x0cmV0dXJuIHNsYWItXHUwMDNlb2JqX2V4dHNfaW5fb2JqZWN0O1xuIH1cbiAjZWxzZVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGludCBzdHJpZGUpXG4rc3RhdGljIGlubGluZSBib29sIG9ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYilcbiB7XG4tXHRWTV9XQVJOX09OX09OQ0Uoc3RyaWRlICE9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKTtcbi19XG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2xhYl9nZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiKVxuLXtcbi1cdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KTtcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gI2VuZGlmXG4gXG4gLypcbiAgKiBzbGFiX29ial9leHQgLSBnZXQgdGhlIHBvaW50ZXIgdG8gdGhlIHNsYWIgb2JqZWN0IGV4dGVuc2lvbiBtZXRhZGF0YVxuICAqIGFzc29jaWF0ZWQgd2l0aCBhbiBvYmplY3QgaW4gYSBzbGFiLlxuKyAqIEBzOiBjYWNoZSB0aGF0IHRoZSBzbGFiIGJsb25ncyB0b1xuICAqIEBzbGFiOiBhIHBvaW50ZXIgdG8gdGhlIHNsYWIgc3RydWN0XG4gICogQG9ial9leHRzOiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCBleHRlbnNpb24gdmVjdG9yXG4tICogQGluZGV4OiBhbiBpbmRleCBvZiB0aGUgb2JqZWN0XG4rICogQG9iajogYSBwb2ludGVyIHRvIHRoZSBvYmplY3RcbiAgKlxuICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBvYmplY3QgZXh0ZW5zaW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgb2JqZWN0LlxuICAqIE11c3QgYmUgY2FsbGVkIHdpdGhpbiBhIHNlY3Rpb24gY292ZXJlZCBieSBnZXQvcHV0X3NsYWJfb2JqX2V4dHMoKS5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqc2xhYl9vYmpfZXh0KHN0cnVjdCBzbGFiICpzbGFiLFxuLVx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbi1cdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBpbmRleClcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqXG4rc2xhYl9vYmpfZXh0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbitcdCAgICAgY29uc3Qgdm9pZCAqb2JqKVxuIHtcbiBcdHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dDtcbitcdHVuc2lnbmVkIGludCBpbmRleDtcbitcdHVuc2lnbmVkIGludCBzdHJpZGU7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0Uob2JqX2V4dHMgIT0gc2xhYl9vYmpfZXh0cyhzbGFiKSk7XG4gXG4tXHRvYmpfZXh0ID0gKHN0cnVjdCBzbGFib2JqX2V4dCAqKShvYmpfZXh0cyArXG4tXHRcdFx0XHRcdCBzbGFiX2dldF9zdHJpZGUoc2xhYikgKiBpbmRleCk7XG4rXHRpbmRleCA9IG9ial90b19pbmRleChzLCBzbGFiLCBvYmopO1xuK1xuK1x0aWYgKCFvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpXG4rXHRcdHN0cmlkZSA9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpO1xuK1x0ZWxzZVxuK1x0XHRzdHJpZGUgPSBzLVx1MDAzZXNpemU7XG4rXG4rXHRvYmpfZXh0ID0gKHN0cnVjdCBzbGFib2JqX2V4dCAqKShvYmpfZXh0cyArIGluZGV4ICogc3RyaWRlKTtcbitcbiBcdHJldHVybiBrYXNhbl9yZXNldF90YWcob2JqX2V4dCk7XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfTUVNQ0dcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpzbGFiX29ial9leHRfb2JqY2coc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0KVxuK3tcbitcdC8qIGlmIG9iamNnIGV4aXN0cywgaXQgY29tZXMgZmlyc3QsIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgKi9cbitcdHJldHVybiBvYmpfZXh0LVx1MDAzZV9vYmpjZztcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHNsYWJfb2JqX2V4dF9zZXRfb2JqY2coc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0LFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbit7XG4rXHQvKiBpZiBvYmpjZyBleGlzdHMsIGl0IGNvbWVzIGZpcnN0LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nICovXG4rXHRvYmpfZXh0LVx1MDAzZV9vYmpjZyA9IG9iamNnO1xuK31cbisjZW5kaWZcbitcbisjaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcbitzdGF0aWMgaW5saW5lIHVuaW9uIGNvZGV0YWdfcmVmICpcbitzbGFiX29ial9leHRfY29kZXRhZ19yZWYoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dClcbit7XG4rXHRpZiAoc2xhYl9uZWVkc19vYmpjZyhzbGFiKSlcbitcdFx0b2JqX2V4dCArPSAxO1xuK1xuK1x0cmV0dXJuIFx1MDAyNm9ial9leHQtXHUwMDNlX2N0cmVmO1xuK31cbisjZW5kaWZcbitcbiBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpO1xuIFxuQEAgLTY2MiwxNiArNzc4LDE3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpzbGFiX29ial9leHQoc3RydWN0IHNsYWIgKnNsYWIsXG4tXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9ial9leHRzLFxuLVx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGluZGV4KVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpcbitzbGFiX29ial9leHQoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBsb25nIG9ial9leHRzLFxuK1x0ICAgICBjb25zdCB2b2lkICpvYmopXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGludCBzdHJpZGUpIHsgfVxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNsYWJfZ2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYikgeyByZXR1cm4gMDsgfVxuLVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbiBcbiAjZW5kaWYgLyogQ09ORklHX1NMQUJfT0JKX0VYVCAqL1xuIFxuZGlmZiAtLWdpdCBhL21tL3NsYWJfY29tbW9uLmMgYi9tbS9zbGFiX2NvbW1vbi5jXG5pbmRleCAwM2VjYWMxMmNkODY1Zi4uNGU5ODNlMjUwMzM4N2EgMTAwNjQ0XG4tLS0gYS9tbS9zbGFiX2NvbW1vbi5jXG4rKysgYi9tbS9zbGFiX2NvbW1vbi5jXG5AQCAtNTIsNyArNTIsNyBAQCBzdHJ1Y3Qga21lbV9jYWNoZSAqa21lbV9jYWNoZTtcbiBcdFx0U0xBQl9PQkpfRVhUX0lOX09CSilcbiBcbiAjZGVmaW5lIFNMQUJfTUVSR0VfU0FNRSAoU0xBQl9SRUNMQUlNX0FDQ09VTlQgfCBTTEFCX0NBQ0hFX0RNQSB8IFxcXG4tXHRcdFx0IFNMQUJfQ0FDSEVfRE1BMzIgfCBTTEFCX0FDQ09VTlQpXG4rXHRcdFx0IFNMQUJfQ0FDSEVfRE1BMzIgfCBTTEFCX0FDQ09VTlQgfCBTTEFCX01BWV9BQ0NPVU5UKVxuIFxuIC8qXG4gICogTWVyZ2UgY29udHJvbC4gSWYgdGhpcyBpcyBzZXQgdGhlbiBubyBtZXJnaW5nIG9mIHNsYWIgY2FjaGVzIHdpbGwgb2NjdXIuXG5AQCAtMzU5LDYgKzM1OSwxMyBAQCBzdHJ1Y3Qga21lbV9jYWNoZSAqX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzKGNvbnN0IGNoYXIgKm5hbWUsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBGb3Igbm93IHdlIGFzc3VtZSBhbnkgY2FjaGUgY2FuIGJlIHVzZWQgd2l0aCBfX0dGUF9BQ0NPVU5UIGFuZCB0aHVzXG4rXHQgKiBtYXkgbmVlZCB0byBzdG9yZSBvYmpjZyBwb2ludGVycyBmb3Igb2JqZWN0c1xuK1x0ICovXG4rXHRpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxuK1x0XHRmbGFncyB8PSBTTEFCX01BWV9BQ0NPVU5UO1xuK1xuIFx0LyogRmFpbCBjbG9zZWQgb24gYmFkIHVzZXJzaXplIG9mIHVzZXJvZmZzZXQgdmFsdWVzLiAqL1xuIFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgfHxcbiBcdCAgICBXQVJOX09OKCFhcmdzLVx1MDAzZXVzZXJzaXplIFx1MDAyNlx1MDAyNiBhcmdzLVx1MDAzZXVzZXJvZmZzZXQpIHx8XG5AQCAtOTg0LDExICs5OTEsMTkgQEAgbmV3X2ttYWxsb2NfY2FjaGUoaW50IGlkeCwgZW51bSBrbWFsbG9jX2NhY2hlX3R5cGUgdHlwZSlcbiAjZW5kaWZcbiBcbiBcdC8qXG4tXHQgKiBJZiBDT05GSUdfTUVNQ0cgaXMgZW5hYmxlZCwgZGlzYWJsZSBjYWNoZSBtZXJnaW5nIGZvclxuLVx0ICogS01BTExPQ19OT1JNQUwgY2FjaGVzLlxuK1x0ICogSWYgbWVtY2dfa21lbSBpcyBlbmFibGVkIGFuZCB0aGlzIGlzIGEgS01BTExPQ19OT1JNQUwgY2FjaGUgYW5kICBub3RcbitcdCAqIGFsaWFzZWQgd2l0aCBhbnkgb3RoZXIgdHlwZSwgbWFrZSBzdXJlIGl0J3MgbmV2ZXIgbWVyZ2VkIHdpdGggYW55IG90aGVyXG4rXHQgKiBjYWNoZS5cbitcdCAqXG4rXHQgKiBJbiBvdGhlciBjYXNlcyB0aGUga21hbGxvYyBjYWNoZSBtYXkgZW5kIHVwIGJlaW5nIHVzZWQgZm9yIGFcbitcdCAqIF9fR0ZQX0FDQ09VTlQgYWxsb2NhdGlvbiBzbyBtYXJrIGl0IGFzIHN1Y2hcbiBcdCAqL1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX01FTUNHKSBcdTAwMjZcdTAwMjYgKHR5cGUgPT0gS01BTExPQ19OT1JNQUwpKVxuLVx0XHRmbGFncyB8PSBTTEFCX05PX01FUkdFO1xuK1x0aWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSkge1xuK1x0XHRpZiAodHlwZSA9PSBLTUFMTE9DX05PUk1BTCBcdTAwMjZcdTAwMjYgS01BTExPQ19SRUNMQUlNICE9IEtNQUxMT0NfTk9STUFMKVxuK1x0XHRcdGZsYWdzIHw9IFNMQUJfTk9fTUVSR0U7XG4rXHRcdGVsc2VcbitcdFx0XHRmbGFncyB8PSBTTEFCX01BWV9BQ0NPVU5UO1xuK1x0fVxuIFxuIFx0aWYgKG1pbmFsaWduIFx1MDAzZSBBUkNIX0tNQUxMT0NfTUlOQUxJR04pIHtcbiBcdFx0YWxpZ25lZF9zaXplID0gQUxJR04oYWxpZ25lZF9zaXplLCBtaW5hbGlnbik7XG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXG5pbmRleCAwMzM3ZTYwZGI1YWNlMC4uZTYxNDhiNzNiOTJmODggMTAwNjQ0XG4tLS0gYS9tbS9zbHViLmNcbisrKyBiL21tL3NsdWIuY1xuQEAgLTIxMyw2ICsyMTMsMTEgQEAgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc2x1Yl9kZWJ1Z19lbmFibGVkKTtcbiBzdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc3RyaWN0X251bWEpO1xuICNlbmRpZlxuIFxuKyNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xuK0RFRklORV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcbitcdFx0XHRzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfa2V5KTtcbisjZW5kaWZcbitcbiAvKiBTdHJ1Y3R1cmUgaG9sZGluZyBleHRyYSBwYXJhbWV0ZXJzIGZvciBzbGFiIGFsbG9jYXRpb25zICovXG4gc3RydWN0IHNsYWJfYWxsb2NfY29udGV4dCB7XG4gXHR1bnNpZ25lZCBsb25nIGNhbGxlcl9hZGRyO1xuQEAgLTgwMyw3ICs4MDgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9zbGFiX29ial9leHRzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuIFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial9leHRzX3NpemVfaW5fc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYilcbiB7XG4tXHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkgKiBzbGFiLVx1MDAzZW9iamVjdHM7XG4rXHRyZXR1cm4gc2xhYl9vYmpfZXh0X3NpemUoc2xhYikgKiBzbGFiLVx1MDAzZW9iamVjdHM7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBvYmpfZXh0c19vZmZzZXRfaW5fc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbkBAIC04NzAsMTggKzg3NSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbiAjZW5kaWZcbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfU0xBQl9PQkpfRVhUKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXG4tc3RhdGljIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi17XG4tXHQvKlxuLVx0ICogTm90ZSB3ZSBjYW5ub3QgcmVseSBvbiB0aGUgU0xBQl9PQkpfRVhUX0lOX09CSiBmbGFnIGhlcmUgYW5kIG5lZWQgdG9cbi1cdCAqIGNoZWNrIHRoZSBzdHJpZGUuIEEgY2FjaGUgY2FuIGhhdmUgU0xBQl9PQkpfRVhUX0lOX09CSiBzZXQsIGJ1dFxuLVx0ICogYWxsb2NhdGlvbnMgd2l0aGluX3NsYWJfbGVmdG92ZXIgYXJlIHByZWZlcnJlZC4gQW5kIHRob3NlIG1heSBiZVxuLVx0ICogcG9zc2libGUgb3Igbm90IGRlcGVuZGluZyBvbiB0aGUgcGFydGljdWxhciBzbGFiJ3Mgc2l6ZS5cbi1cdCAqL1xuLVx0cmV0dXJuIG9ial9leHRzX2luX3NsYWIocywgc2xhYikgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgKHNsYWJfZ2V0X3N0cmlkZShzbGFiKSA9PSBzLVx1MDAzZXNpemUpO1xuLX1cbi1cbiBzdGF0aWMgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4ge1xuIFx0dW5zaWduZWQgaW50IG9mZnNldCA9IGdldF9pbmZvX2VuZChzKTtcbkBAIC04OTYsMTYgKzg4OSwyMCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4gXG4gXHRyZXR1cm4gb2Zmc2V0O1xuIH1cbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4ge1xuLVx0cmV0dXJuIGZhbHNlO1xuK1x0c2xhYi1cdTAwM2VvYmpfZXh0c19pbl9vYmplY3QgPSAxO1xuIH1cbi1cbisjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4re1xuK31cbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbkBAIC0xMjA2LDggKzEyMDMsOCBAQCBzdGF0aWMgdm9pZCBwcmludF90cmFpbGVyKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdTggKnApXG4gXG4gXHRvZmYgKz0ga2FzYW5fbWV0YWRhdGFfc2l6ZShzLCBmYWxzZSk7XG4gXG4tXHRpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKVxuLVx0XHRvZmYgKz0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCk7XG4rXHRpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKVxuK1x0XHRvZmYgKz0gc2xhYl9vYmpfZXh0X3NpemUoc2xhYik7XG4gXG4gXHRpZiAob2ZmICE9IHNpemVfZnJvbV9vYmplY3QocykpXG4gXHRcdC8qIEJlZ2lubmluZyBvZiB0aGUgZmlsbGVyIGlzIHRoZSBmcmVlIHBvaW50ZXIgKi9cbkBAIC0xNDExLDggKzE0MDgsOCBAQCBzdGF0aWMgaW50IGNoZWNrX3BhZF9ieXRlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHU4ICpwKVxuIFxuIFx0b2ZmICs9IGthc2FuX21ldGFkYXRhX3NpemUocywgZmFsc2UpO1xuIFxuLVx0aWYgKG9ial9leHRzX2luX29iamVjdChzLCBzbGFiKSlcbi1cdFx0b2ZmICs9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpO1xuK1x0aWYgKG9ial9leHRzX2luX29iamVjdChzbGFiKSlcbitcdFx0b2ZmICs9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpO1xuIFxuIFx0aWYgKHNpemVfZnJvbV9vYmplY3QocykgPT0gb2ZmKVxuIFx0XHRyZXR1cm4gMTtcbkBAIC0xNDM5LDcgKzE0MzYsNyBAQCBzbGFiX3BhZF9jaGVjayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4gXHRsZW5ndGggPSBzbGFiX3NpemUoc2xhYik7XG4gXHRlbmQgPSBzdGFydCArIGxlbmd0aDtcbiBcbi1cdGlmIChvYmpfZXh0c19pbl9zbGFiKHMsIHNsYWIpIFx1MDAyNlx1MDAyNiAhb2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKSB7XG4rXHRpZiAob2JqX2V4dHNfaW5fc2xhYihzLCBzbGFiKSBcdTAwMjZcdTAwMjYgIW9ial9leHRzX2luX29iamVjdChzbGFiKSkge1xuIFx0XHRyZW1haW5kZXIgPSBsZW5ndGg7XG4gXHRcdHJlbWFpbmRlciAtPSBvYmpfZXh0c19vZmZzZXRfaW5fc2xhYihzLCBzbGFiKTtcbiBcdFx0cmVtYWluZGVyIC09IG9ial9leHRzX3NpemVfaW5fc2xhYihzbGFiKTtcbkBAIC0yMDcwLDIwICsyMDY3LDI2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX29ial9jb2RldGFnX2VtcHR5KGNvbnN0IHZvaWQgKm9iailcbiBcdG9ial9zbGFiID0gdmlydF90b19zbGFiKG9iaik7XG4gXHRzbGFiX2V4dHMgPSBzbGFiX29ial9leHRzKG9ial9zbGFiKTtcbiBcdGlmIChzbGFiX2V4dHMpIHtcbitcdFx0c3RydWN0IHNsYWJvYmpfZXh0ICpleHQ7XG4rXHRcdHVuaW9uIGNvZGV0YWdfcmVmICpyZWY7XG4rXG4gXHRcdGdldF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XG4tXHRcdHVuc2lnbmVkIGludCBvZmZzID0gb2JqX3RvX2luZGV4KG9ial9zbGFiLVx1MDAzZXNsYWJfY2FjaGUsXG4tXHRcdFx0XHRcdFx0IG9ial9zbGFiLCBvYmopO1xuLVx0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKmV4dCA9IHNsYWJfb2JqX2V4dChvYmpfc2xhYixcbi1cdFx0XHRcdFx0XHQgICAgICAgc2xhYl9leHRzLCBvZmZzKTtcbitcdFx0ZXh0ID0gc2xhYl9vYmpfZXh0KG9ial9zbGFiLVx1MDAzZXNsYWJfY2FjaGUsIG9ial9zbGFiLCBzbGFiX2V4dHMsIG9iaik7XG4rXHRcdHJlZiA9IHNsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihvYmpfc2xhYiwgZXh0KTtcbitcbitcdFx0aWYgKGlzX2tmZW5jZV9hZGRyZXNzKG9iaikpIHtcbitcdFx0XHRwdXRfc2xhYl9vYmpfZXh0cyhzbGFiX2V4dHMpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuIFxuLVx0XHRpZiAodW5saWtlbHkoaXNfY29kZXRhZ19lbXB0eShcdTAwMjZleHQtXHUwMDNlcmVmKSkpIHtcbitcdFx0aWYgKHVubGlrZWx5KGlzX2NvZGV0YWdfZW1wdHkocmVmKSkpIHtcbiBcdFx0XHRwdXRfc2xhYl9vYmpfZXh0cyhzbGFiX2V4dHMpO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFxuIFx0XHQvKiBjb2RldGFnIHNob3VsZCBiZSBOVUxMIGhlcmUgKi9cbi1cdFx0V0FSTl9PTihleHQtXHUwMDNlcmVmLmN0KTtcbi1cdFx0c2V0X2NvZGV0YWdfZW1wdHkoXHUwMDI2ZXh0LVx1MDAzZXJlZik7XG4rXHRcdFdBUk5fT04ocmVmLVx1MDAzZWN0KTtcbitcdFx0c2V0X2NvZGV0YWdfZW1wdHkocmVmKTtcbiBcdFx0cHV0X3NsYWJfb2JqX2V4dHMoc2xhYl9leHRzKTtcbiBcdH1cbiB9XG5AQCAtMjA5MywxOSArMjA5NiwyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFya19mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcdHJldHVybiBjbXB4Y2hnKFx1MDAyNnNsYWItXHUwMDNlb2JqX2V4dHMsIDAsIE9CSkVYVFNfQUxMT0NfRkFJTCkgPT0gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyh1bnNpZ25lZCBsb25nIG9ial9leHRzLFxuLVx0XHRcdHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjLCB1bnNpZ25lZCBpbnQgb2JqZWN0cylcbitzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiLFxuK1x0XHR1bnNpZ25lZCBsb25nIG9ial9leHRzLCBzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYylcbiB7XG4rXHR1bnNpZ25lZCBpbnQgc3RyaWRlO1xuK1xuK1x0aWYgKCFtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0LypcbiBcdCAqIElmIHZlY3RvciBwcmV2aW91c2x5IGZhaWxlZCB0byBhbGxvY2F0ZSB0aGVuIHdlIGhhdmUgbGl2ZVxuIFx0ICogb2JqZWN0cyB3aXRoIG5vIHRhZyByZWZlcmVuY2UuIE1hcmsgYWxsIHJlZmVyZW5jZXMgaW4gdGhpc1xuIFx0ICogdmVjdG9yIGFzIGVtcHR5IHRvIGF2b2lkIHdhcm5pbmdzIGxhdGVyIG9uLlxuIFx0ICovXG4tXHRpZiAob2JqX2V4dHMgPT0gT0JKRVhUU19BTExPQ19GQUlMKSB7XG4tXHRcdHVuc2lnbmVkIGludCBpO1xuK1x0aWYgKG9ial9leHRzICE9IE9CSkVYVFNfQUxMT0NfRkFJTClcbitcdFx0cmV0dXJuO1xuK1xuK1x0c3RyaWRlID0gc2xhYl9vYmpfZXh0X3NpemUoc2xhYikgLyBzaXplb2YoKnZlYyk7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2Mgc2xhYi1cdTAwM2VvYmplY3RzOyBpKyspIHtcbitcdFx0dW5pb24gY29kZXRhZ19yZWYgKnJlZiA9IHNsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihzbGFiLCB2ZWMpO1xuIFxuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBvYmplY3RzOyBpKyspXG4tXHRcdFx0c2V0X2NvZGV0YWdfZW1wdHkoXHUwMDI2dmVjW2ldLnJlZik7XG4rXHRcdHNldF9jb2RldGFnX2VtcHR5KHJlZik7XG4rXHRcdHZlYyArPSBzdHJpZGU7XG4gXHR9XG4gfVxuIFxuQEAgLTIxMTMsOCArMjEyNiw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWFya19vYmpfY29kZXRhZ19lbXB0eShjb25zdCB2b2lkICpvYmopIHt9XG4gc3RhdGljIGlubGluZSBib29sIG1hcmtfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIpIHsgcmV0dXJuIGZhbHNlOyB9XG4tc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyh1bnNpZ25lZCBsb25nIG9ial9leHRzLFxuLVx0XHRcdHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjLCB1bnNpZ25lZCBpbnQgb2JqZWN0cykge31cbitzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiLFxuK1x0XHR1bnNpZ25lZCBsb25nIG9ial9leHRzLCBzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYykge31cbiBcbiAjZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cbiBcbkBAIC0yMTI3LDEyICsyMTQwLDExIEBAIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdFx0XHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbiB7XG4gXHRjb25zdCBib29sIGFsbG93X3NwaW4gPSBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhbGxvY19mbGFncyk7XG4tXHR1bnNpZ25lZCBpbnQgb2JqZWN0cyA9IG9ianNfcGVyX3NsYWIocywgc2xhYik7XG4gXHRib29sIG5ld19zbGFiID0gYWxsb2NfZmxhZ3MgXHUwMDI2IFNMQUJfQUxMT0NfTkVXX1NMQUI7XG4gXHR1bnNpZ25lZCBsb25nIG5ld19leHRzO1xuIFx0dW5zaWduZWQgbG9uZyBvbGRfZXh0cztcbiBcdHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjO1xuLVx0c2l6ZV90IHN6ID0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkgKiBzbGFiLVx1MDAzZW9iamVjdHM7XG4rXHRzaXplX3Qgc3ogPSBzbGFiX29ial9leHRfc2l6ZShzbGFiKSAqIHNsYWItXHUwMDNlb2JqZWN0cztcbiBcbiBcdGdmcCBcdTAwMjY9IH5PQkpDR1NfQ0xFQVJfTUFTSztcbiBcdC8qXG5AQCAtMjE4Myw3ICsyMTk1LDcgQEAgaW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuICNlbmRpZlxuIHJldHJ5OlxuIFx0b2xkX2V4dHMgPSBSRUFEX09OQ0Uoc2xhYi1cdTAwM2VvYmpfZXh0cyk7XG4tXHRoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Mob2xkX2V4dHMsIHZlYywgb2JqZWN0cyk7XG4rXHRoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Moc2xhYiwgb2xkX2V4dHMsIHZlYyk7XG4gXG4gXHRpZiAobmV3X3NsYWIpIHtcbiBcdFx0LypcbkBAIC0yMjUwLDkgKzIyNjIsNiBAQCBzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcdHZvaWQgKmFkZHI7XG4gXHR1bnNpZ25lZCBsb25nIG9ial9leHRzO1xuIFxuLVx0LyogSW5pdGlhbGl6ZSBzdHJpZGUgZWFybHkgdG8gYXZvaWQgbWVtb3J5IG9yZGVyaW5nIGlzc3VlcyAqL1xuLVx0c2xhYl9zZXRfc3RyaWRlKHNsYWIsIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKTtcbi1cbiBcdGlmICghbmVlZF9zbGFiX29ial9leHRzKHMpKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMjI3OCwxNSArMjI4NywxNCBAQCBzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcbiBcdFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0XHRmb3JfZWFjaF9vYmplY3QoYWRkciwgcywgc2xhYl9hZGRyZXNzKHNsYWIpLCBzbGFiLVx1MDAzZW9iamVjdHMpXG4tXHRcdFx0bWVtc2V0KGthc2FuX3Jlc2V0X3RhZyhhZGRyKSArIG9mZnNldCwgMCxcbi1cdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkpO1xuK1x0XHRcdG1lbXNldChrYXNhbl9yZXNldF90YWcoYWRkcikgKyBvZmZzZXQsIDAsIHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpKTtcbiBcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFxuICNpZmRlZiBDT05GSUdfTUVNQ0dcbiBcdFx0b2JqX2V4dHMgfD0gTUVNQ0dfREFUQV9PQkpFWFRTO1xuICNlbmRpZlxuIFx0XHRzbGFiLVx1MDAzZW9ial9leHRzID0gb2JqX2V4dHM7XG4tXHRcdHNsYWJfc2V0X3N0cmlkZShzbGFiLCBzLVx1MDAzZXNpemUpO1xuK1x0XHRzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc2xhYik7XG4gXHR9XG4gfVxuIFxuQEAgLTIzNTIsNiArMjM2MCw5IEBAIF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgZ2ZwX3QgZmxhZ3MsXG4gXHRpZiAoYWxsb2NfZmxhZ3MgXHUwMDI2IFNMQUJfQUxMT0NfTk9fUkVDVVJTRSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0aWYgKGlzX2tmZW5jZV9hZGRyZXNzKG9iamVjdCkpXG4rXHRcdHJldHVybjtcbitcbiBcdHNsYWIgPSB2aXJ0X3RvX3NsYWIob2JqZWN0KTtcbiBcdG9ial9leHRzID0gcHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2socywgc2xhYiwgZmxhZ3MsIGFsbG9jX2ZsYWdzLCBvYmplY3QpO1xuIFx0LypcbkBAIC0yMzYwLDExICsyMzcxLDE1IEBAIF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgZ2ZwX3QgZmxhZ3MsXG4gXHQgKiBjaGVjayBzaG91bGQgYmUgYWRkZWQgYmVmb3JlIGFsbG9jX3RhZ19hZGQoKS5cbiBcdCAqL1xuIFx0aWYgKG9ial9leHRzKSB7XG4tXHRcdHVuc2lnbmVkIGludCBvYmpfaWR4ID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIG9iamVjdCk7XG4rXHRcdHVuaW9uIGNvZGV0YWdfcmVmICpyZWY7XG4gXG4gXHRcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbi1cdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2JqX2lkeCk7XG4tXHRcdGFsbG9jX3RhZ19hZGQoXHUwMDI2b2JqX2V4dC1cdTAwM2VyZWYsIGN1cnJlbnQtXHUwMDNlYWxsb2NfdGFnLCBzLVx1MDAzZXNpemUpO1xuK1xuK1x0XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBvYmplY3QpO1xuK1x0XHRyZWYgPSBzbGFiX29ial9leHRfY29kZXRhZ19yZWYoc2xhYiwgb2JqX2V4dCk7XG4rXG4rXHRcdGFsbG9jX3RhZ19hZGQocmVmLCBjdXJyZW50LVx1MDAzZWFsbG9jX3RhZywgcy1cdTAwM2VzaXplKTtcbitcbiBcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0fSBlbHNlIHtcbiBcdFx0YWxsb2NfdGFnX3NldF9pbmFjY3VyYXRlKGN1cnJlbnQtXHUwMDNlYWxsb2NfdGFnKTtcbkBAIC0yMzg0LDcgKzIzOTksNiBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZFxuIF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxuIFx0XHRcdCAgICAgICBpbnQgb2JqZWN0cylcbiB7XG4tXHRpbnQgaTtcbiBcdHVuc2lnbmVkIGxvbmcgb2JqX2V4dHM7XG4gXG4gXHQvKiBzbGFiLVx1MDAzZW9ial9leHRzIG1pZ2h0IG5vdCBiZSBOVUxMIGlmIGl0IHdhcyBjcmVhdGVkIGZvciBNRU1DRyBhY2NvdW50aW5nLiAqL1xuQEAgLTIzOTYsMTAgKzI0MTAsMTQgQEAgX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnBcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb2JqZWN0czsgaSsrKSB7XG4tXHRcdHVuc2lnbmVkIGludCBvZmYgPSBvYmpfdG9faW5kZXgocywgc2xhYiwgcFtpXSk7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mgb2JqZWN0czsgaSsrKSB7XG4rXHRcdHN0cnVjdCBzbGFib2JqX2V4dCAqZXh0O1xuK1xuK1x0XHRpZiAoaXNfa2ZlbmNlX2FkZHJlc3MocFtpXSkpXG4rXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGFsbG9jX3RhZ19zdWIoXHUwMDI2c2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpLVx1MDAzZXJlZiwgcy1cdTAwM2VzaXplKTtcbitcdFx0ZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwW2ldKTtcbitcdFx0YWxsb2NfdGFnX3N1YihzbGFiX29ial9leHRfY29kZXRhZ19yZWYoc2xhYiwgZXh0KSwgcy1cdTAwM2VzaXplKTtcbiBcdH1cbiBcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbiB9XG5AQCAtMjQxMiw2ICsyNDMwLDI1IEBAIGFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbiBcdFx0X19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAsIG9iamVjdHMpO1xuIH1cbiBcbisvKlxuKyAqIE1ha2Ugc3VyZSB0aGUgc3RhdGljIGtleSB1c2VkIGJ5IHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZygpIHJlZmxlY3RzIHRoZVxuKyAqIHZhbHVlIG9mICFtZW1fYWxsb2NfcHJvZmlsaW5nX3Blcm1hbmVudGx5X2Rpc2FibGVkKClcbisgKlxuKyAqIEFueSBsYXRlciBtZW0gYWxsb2MgcHJvZmlsaW5nIHNodXRkb3duIHdvbid0IGJlIHJlZmxlY3RlZCBpbiB0aGUgc3RhdGljIGtleVxuKyAqIGJlY2F1c2Ugb2JqX2V4dHMgd2l0aCBjb2RldGFncyBtaWdodCBhbHJlYWR5IGV4aXN0LlxuKyAqL1xuK3N0YXRpYyB2b2lkIF9faW5pdCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCh2b2lkKVxuK3tcbitcdGJvb2wgbmVlZF9jb2RldGFnID0gIW1lbV9hbGxvY19wcm9maWxpbmdfcGVybWFuZW50bHlfZGlzYWJsZWQoKTtcbitcbitcdGlmIChuZWVkX2NvZGV0YWcgIT0gc3RhdGljX2tleV9lbmFibGVkKFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpKSB7XG4rXHRcdGlmIChuZWVkX2NvZGV0YWcpXG4rXHRcdFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XG4rXHRcdGVsc2VcbitcdFx0XHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXHUwMDI2c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XG4rXHR9XG4rfVxuK1xuICNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXG4gXG4gc3RhdGljIGlubGluZSB2b2lkXG5AQCAtMjQyNiw2ICsyNDYzLDEwIEBAIGFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbiB7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCh2b2lkKVxuK3tcbit9XG4rXG4gI2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXG4gXG4gXG5AQCAtMjQ3MSw2ICsyNTEyLDkgQEAgdm9pZCBtZW1jZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxuIFx0aWYgKGxpa2VseSghb2JqX2V4dHMpKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRpZiAoIXNsYWJfbmVlZHNfb2JqY2coc2xhYikpXG4rXHRcdHJldHVybjtcbitcbiBcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbiBcdF9fbWVtY2dfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCwgb2JqZWN0cywgb2JqX2V4dHMpO1xuIFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuQEAgLTI0ODQsNyArMjUyOCw2IEBAIGJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcbiBcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcbi1cdHVuc2lnbmVkIGxvbmcgb2ZmO1xuIFxuIFx0cGFnZSA9IHZpcnRfdG9fcGFnZShwKTtcbiBcdGlmIChQYWdlTGFyZ2VLbWFsbG9jKHBhZ2UpKSB7XG5AQCAtMjUxNywxNiArMjU2MCwxNSBAQCBib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXG4gXHQgKiBvZiBzbGFiX29ial9leHRzIGJlaW5nIGFsbG9jYXRlZCBmcm9tIHRoZSBzYW1lIHNsYWIgYW5kIHRodXMgdGhlIHNsYWJcbiBcdCAqIGJlY29taW5nIGVmZmVjdGl2ZWx5IHVuZnJlZWFibGUuXG4gXHQgKi9cbi1cdGlmIChpc19rbWFsbG9jX25vcm1hbChzKSlcbitcdGlmICghY2FjaGVfbmVlZHNfb2JqY2cocykpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0LyogSWdub3JlIGFscmVhZHkgY2hhcmdlZCBvYmplY3RzLiAqL1xuIFx0b2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpO1xuIFx0aWYgKG9ial9leHRzKSB7XG4gXHRcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbi1cdFx0b2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHApO1xuLVx0XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpO1xuLVx0XHRpZiAodW5saWtlbHkob2JqX2V4dC1cdTAwM2VvYmpjZykpIHtcbitcdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgcCk7XG4rXHRcdGlmICh1bmxpa2VseShzbGFiX29ial9leHRfb2JqY2cob2JqX2V4dCkpKSB7XG4gXHRcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHR9XG5AQCAtMzM5MSwxMCArMzQzMywxNSBAQCBzdGF0aWMgc3RydWN0IHNsYWIgKmFsbG9jYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuIFx0XHRzdGF0KHMsIE9SREVSX0ZBTExCQUNLKTtcbiBcdH1cbiBcbitcdC8qIEluaXRpYWxpemVzIGZyb3plbiwgaW51c2UsIGFuZCBhbnkgZXh0cmEgNjRiaXQtb25seSBmbGFncyAqL1xuK1x0c2xhYi1cdTAwM2Vjb3VudGVycyA9IDA7XG4rXG4gXHRzbGFiLVx1MDAzZW9iamVjdHMgPSBvb19vYmplY3RzKG9vKTtcbi1cdHNsYWItXHUwMDNlaW51c2UgPSAwO1xuLVx0c2xhYi1cdTAwM2Vmcm96ZW4gPSAwO1xuIFxuKyNpZmRlZiBDT05GSUdfNjRCSVRcbitcdGlmIChjYWNoZV9uZWVkc19vYmpjZyhzKSlcbitcdFx0c2xhYi1cdTAwM2VvYmpfZXh0c19uZWVkc19vYmpjZyA9IDE7XG4rI2VuZGlmXG4gXHRzbGFiLVx1MDAzZXNsYWJfY2FjaGUgPSBzO1xuIFxuIFx0a2FzYW5fcG9pc29uX3NsYWIoc2xhYik7XG5AQCAtNjUyNiw3ICs2NTczLDcgQEAgc3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9rc2l6ZShzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcdCAqL1xuIFx0aWYgKHMtXHUwMDNlZmxhZ3MgXHUwMDI2IChTTEFCX1RZUEVTQUZFX0JZX1JDVSB8IFNMQUJfU1RPUkVfVVNFUikpXG4gXHRcdHJldHVybiBzLVx1MDAzZWludXNlO1xuLVx0ZWxzZSBpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKVxuK1x0ZWxzZSBpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKVxuIFx0XHRyZXR1cm4gcy1cdTAwM2VpbnVzZTtcbiBcdC8qXG4gXHQgKiBFbHNlIHdlIGNhbiB1c2UgYWxsIHRoZSBwYWRkaW5nIGV0YyBmb3IgdGhlIGFsbG9jYXRpb25cbkBAIC03OTI5LDcgKzc5NzYsNyBAQCBzdGF0aWMgaW50IGNhbGN1bGF0ZV9zaXplcyhzdHJ1Y3Qga21lbV9jYWNoZV9hcmdzICphcmdzLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiBcdGFsaWduZWRfc2l6ZSA9IEFMSUdOKHNpemUsIHMtXHUwMDNlYWxpZ24pO1xuICNpZiBkZWZpbmVkKENPTkZJR19TTEFCX09CSl9FWFQpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcbiBcdGlmIChzbGFiX2FyZ3NfdW5tZXJnZWFibGUoYXJncywgcy1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4tXHRcdFx0KGFsaWduZWRfc2l6ZSAtIHNpemUgXHUwMDNlPSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSkpXG4rXHRcdFx0KGFsaWduZWRfc2l6ZSAtIHNpemUgXHUwMDNlPSBjYWNoZV9vYmpfZXh0X3NpemUocykpKVxuIFx0XHRzLVx1MDAzZWZsYWdzIHw9IFNMQUJfT0JKX0VYVF9JTl9PQko7XG4gI2VuZGlmXG4gXHRzaXplID0gYWxpZ25lZF9zaXplO1xuQEAgLTg1MzksNiArODU4Niw4IEBAIHZvaWQgX19pbml0IGttZW1fY2FjaGVfaW5pdCh2b2lkKVxuIFx0XHRib290X2ttZW1fY2FjaGVfbm9kZTtcbiBcdGludCBub2RlO1xuIFxuK1x0c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXQoKTtcbitcbiBcdGlmIChkZWJ1Z19ndWFyZHBhZ2VfbWlub3JkZXIoKSlcbiBcdFx0c2x1Yl9tYXhfb3JkZXIgPSAwO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjA6MjQuMjk4ODQxNzYyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg4MTczNTY5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTbGFiIE9iamVjdCBFeHRlbnNpb24gT3B0aW1pemF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyB0d2Vha2luZyBob3cgYHN0cnVjdCBzbGFib2JqX2V4dGAgaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGFuZCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcg4oCTIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZSBnb2FsIGlzIHRvIG9wdGltaXplIHRoZSBzdHJ1Y3R1cmUgYnkgdXNpbmcgYSB1bmlvbiB0byBzdG9yZSBwb2ludGVycyB0byBgb2JqY2dgIGFuZCBgY29kZXRhZ19yZWZgLCBvciBhbGxvY2F0aW5nIHNwYWNlIGZvciB0aGVtIG9ubHkgd2hlbiB0aGV5J3JlIGFjdHVhbGx5IG5lZWRlZC4gVGhpcyBtYWtlcyBzZW5zZTsgaXQncyBhIGNvbW1vbiBzdHJhdGVneSBmb3IgcmVkdWNpbmcgbWVtb3J5IG92ZXJoZWFkIGluIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGFyZWFzIGxpa2UgdGhlIHNsYWIgYWxsb2NhdG9yLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBTTEFCX01BWV9BQ0NPVU5UYCBpcyBhIG5pY2UgdG91Y2gsIHRvbzsgaXQgYWRkcyBhIGJpdCBtb3JlIGZpbmUtZ3JhaW5lZCBjb250cm9sLlxuXG5GdW5jdGlvbmFsbHksIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgcGF0Y2ggZG9lc24ndCBicmVhayBhbnl0aGluZy4gSXQgZGVmaW5pdGVseSB0b3VjaGVzIGNvcmUgc2xhYiBhbGxvY2F0b3IgbG9naWMgYW5kIG1lbWNnIGFjY291bnRpbmcsIHNvIGFueSBtaXNzdGVwcyBoZXJlIGNvdWxkIGhhdmUgcHJldHR5IHdpZGUtcmVhY2hpbmcgY29uc2VxdWVuY2VzLiBBbmQsIHllYWgsIGdpdmVuIGhvdyBoZWF2aWx5IHNsYWIgYWxsb2NhdGlvbiBpcyB1c2VkIHRocm91Z2hvdXQgdGhlIGtlcm5lbCwgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlLiBXb3J0aCBhIGZ1enppbmcgY2FtcGFpZ24gdG8gc2VlIGlmIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9ycyBhcmlzZS5cblxuTm93LCBsZXTigJlzIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBhcmVhcyB0byBzY3J1dGluaXplLiBJJ3ZlIGdvdCBhIGxpc3Qgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczogYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBgX19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9va2AsIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2tgLCBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAsIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCwgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgLCBga2ZlbmNlX2luaXRfcG9vbGAsIGBfX2tmZW5jZV9mcmVlYCwgYG1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYmAsIGBrbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYCwgYW5kIGBuZXdfa21hbGxvY19jYWNoZWAuIEFscmlnaHQsIGxldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgbW0vc2x1Yi5jYCBhbmQgc3BlY2lmaWNhbGx5LCB0aGF0IGBhbGxvY19zbGFiX29ial9leHRzYCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5MDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMDozMS4xODA1ODI2NDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0OTkyOTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3NsYWJfb2JqX2V4dHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsdWIuYz0yMTM0PXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmMtMjEzOC1cXG5tbS9zbHViLmM6MjEzOTppbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIxNDAtXFx0XFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjIyOD1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuLS1cXG5tbS9zbHViLmMtMjI1OS0gKi9cXG5tbS9zbHViLmM6MjI2MDpzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG5tbS9zbHViLmMtMjI2MS17XFxuLS1cXG5tbS9zbHViLmM9MjMwNz1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTIzMTAtXFxubW0vc2x1Yi5jOjIzMTE6c3RhdGljIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjMxMi1cXHRcXHRcXHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjMxNz1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuLS1cXG5tbS9zbHViLmMtMjMyMC1cXG5tbS9zbHViLmM6MjMyMTpzdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjMyMi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmM9MjMzMT1wcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuLS1cXG5tbS9zbHViLmMtMjMzNC1cXHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXFx1MDAyNlxcdTAwMjZcXG5tbS9zbHViLmM6MjMzNTpcXHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XFxubW0vc2x1Yi5jLTIzMzYtXFx0XFx0cHJfd2Fybl9vbmNlKFxcXCIlcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxcXFxuXFxcIixcXG4tLVxcbm1tL3NsdWIuYz0zMzcyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhY2NvdW50X3NsYWIoc3RydWN0IHNsYWIgKnNsYWIsIGludCBvcmRlcixcXG4tLVxcbm1tL3NsdWIuYy0zMzc4LVxcdFxcdFxcdCFzbGFiX29ial9leHRzKHNsYWIpKVxcbm1tL3NsdWIuYzozMzc5OlxcdFxcdGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZ2ZwLFxcbm1tL3NsdWIuYy0zMzgwLVxcdFxcdFxcdFxcdCAgICBhbGxvY19mbGFncyB8IFNMQUJfQUxMT0NfTkVXX1NMQUIpO1xcbi0tXFxubW0vc2x1Yi5jPTM0MDE9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0zNDU2LVxcdCAqL1xcbm1tL3NsdWIuYzozNDU3OlxcdGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkocywgc2xhYik7XFxubW0vc2x1Yi5jLTM0NTgtXFx0YWNjb3VudF9zbGFiKHNsYWIsIG9vX29yZGVyKG9vKSwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjA6MzEuNDE1NTg3NTM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwMDgzOTE2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIFNsYWIgQWxsb2NhdG9yIEhvb2tzIGluIG1lbWNvbnRyb2wuYyoqXG5cbkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgKG1lbWNnKSBzeXN0ZW0gYW5kIHRoZSBzbGFiIGFsbG9jYXRvci4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gcGlucG9pbnQgd2hlcmUgbWVtY2cgaG9va3MgaW50byB0aGUgc2xhYiBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIHByb2Nlc3Nlcy4gVGhhdCBtZWFucyBkaWdnaW5nIGludG8gYG1tL21lbWNvbnRyb2wuY2AsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgY29yZSBtZW1jZyBsb2dpYyByZXNpZGVzLCBhcyBhIHN0YXJ0aW5nIHBvaW50LlxuXG5NeSBwcmltYXJ5IHRhcmdldHMgYXJlIHRoZSBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AgYW5kIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYCBmdW5jdGlvbnMuIFRoZSBuYW1lcyB0aGVtc2VsdmVzIGFyZSBhIHN0cm9uZyBjbHVlLiBgcG9zdF9hbGxvY2AgaW1wbGllcyBzb21ldGhpbmcgdGhhdCBoYXBwZW5zIGFmdGVyIGEgc2xhYiBvYmplY3QgaXMgYWxsb2NhdGVkLiBUaGUgYGZyZWVfaG9va2AgaXMgd2hhdCBydW5zIGFmdGVyIGEgc2xhYiBpcyBmcmVlZC4gVGhlc2UgaG9va3MgYXJlIGxpa2VseSB0aGUgZW50cnkgcG9pbnRzIHdoZXJlIG1lbWNnIHRyYWNrcyBtZW1vcnkgdXNhZ2UgdGllZCB0byBzbGFicywgYWNjb3VudGluZyBmb3IgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHdpdGhpbiBkaWZmZXJlbnQgY29udHJvbCBncm91cHMuIEknbGwgbmVlZCB0byBzZWUgKmhvdyogdGhlc2UgaG9va3MgYXJlIHVzZWQgYW5kIHdoYXQgY29udGV4dCB0aGV5IG9wZXJhdGUgd2l0aGluLiBJdCdsbCBiZSBlc3NlbnRpYWwgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgaG9va3MgYXJlIHJlZ2lzdGVyZWQgYW5kIGNhbGxlZCBpbiB0aGUgc2xhYiBhbGxvY2F0b3IncyBmdW5jdGlvbnMuIEkgYW50aWNpcGF0ZSB0aGUgZGV0YWlscyBhcmUgZW1iZWRkZWQgaW5zaWRlIHRoZSBhbGxvY2F0b3IncyBzb3VyY2UgY29kZSwgcG9zc2libHkgaW4gZnVuY3Rpb25zIGxpa2UgYGttZW1fY2FjaGVfYWxsb2NgIG9yIGBrbWVtX2NhY2hlX2ZyZWVgLiBJIGV4cGVjdCB0aGF0IGZpbmRpbmcgYW5kIHN0dWR5aW5nIGhvdyB0aGVzZSBob29rcyBhcmUgcmVnaXN0ZXJlZCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgYWxsb2NhdGlvbiBjaGFuZ2VzIGFyZSB0cmFja2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUxNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIwOjM1LjYxNjQzMTg4MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjI1NDIwMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTM1Mjk9c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2Z1bGxfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTM3LVxcbm1tL21lbWNvbnRyb2wuYzozNTM4OmJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxubW0vbWVtY29udHJvbC5jLTM1MzktXFx0XFx0XFx0XFx0ICBnZnBfdCBmbGFncywgdW5zaWduZWQgaW50IHNsYWJfYWxsb2NfZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIwOjM1Ljg3ODk4NDY2NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzkzMjkyNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIFNsYWIgQWxsb2NhdGlvbiBpbiB0aGUgTWVtb3J5IENvbnRyb2xsZXIqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IG1lbW9yeSBjb250cm9sLCBzcGVjaWZpY2FsbHkgaG93IHNsYWJzIGFyZSBtYW5hZ2VkIHdpdGhpbiBhIG1lbWNnIGNvbnRleHQuIFRoZSB0YXNrIGF0IGhhbmQgbGlrZWx5IGludm9sdmVzIGZyZWVpbmcgc29tZSBzbGFiIG9iamVjdHMsIGFuZCB0aGF0IG1lYW5zIGRpdmluZyBpbnRvIHRoZSBtZWNoYW5pY3Mgb2YgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgLiBUaGF0IGZ1bmN0aW9uJ3MgbmFtZSBpcyBhIHByZXR0eSBnb29kIGluZGljYXRvciB0aGF0IGl0J3MgaW52b2x2ZWQgaW4sIHdlbGwsICpob29raW5nKiBpbnRvIHRoZSBzbGFiIGZyZWVpbmcgcHJvY2VzcywgbGlrZWx5IHRvIHBlcmZvcm0gYWNjb3VudGluZyBvciBlbmZvcmNlbWVudCByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXBzLiBMZXQncyBzdGFydCBieSBjcmFja2luZyBvcGVuIGBtbS9tZW1jb250cm9sLmNgIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyBpbnNpZGUgdGhhdCBmdW5jdGlvbi4gVGhhdCBmaWxlIGlzIHRoZSBjZW50cmFsIHBsYWNlIHRvIGJlIGZvciB0aGlzIGtpbmQgb2YgaW52ZXN0aWdhdGlvbi4gSXQgd2lsbCBiZSBpbnRlcmVzdGluZyB0byBzZWUgaG93IHRoZSBtZW1jZyBzdHJ1Y3R1cmUgYW5kIGFzc29jaWF0ZWQgYm9va2tlZXBpbmcgYXJlIGludGVncmF0ZWQgaW50byB0aGUgc3RhbmRhcmQgc2xhYiBmcmVlaW5nIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDM1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjA6MzkuNjU4MzE3NTQzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjgxNjcyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21lbWNnX3NsYWJfZnJlZV9ob29rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MzUzOD1ib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM2MzItXFxubW0vbWVtY29udHJvbC5jOjM2MzM6dm9pZCBfX21lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG5tbS9tZW1jb250cm9sLmMtMzYzNC1cXHRcXHRcXHQgICAgdm9pZCAqKnAsIGludCBvYmplY3RzLCB1bnNpZ25lZCBsb25nIG9ial9leHRzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMDozOS43ODUxNDY3MzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjc4MDA5NDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBTbGFiIEFsbG9jYXRpb24gVGFnZ2luZyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzbGFiIGFsbG9jYXRvcidzIHRhZ2dpbmcgaG9va3MuIExldCdzIGhlYWQgc3RyYWlnaHQgZm9yIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBtbS9zbHViLmNgLiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rYCBhbmQgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2AgZnVuY3Rpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGhvb2tzIGZvciBtZW1vcnkgdGFnZ2luZyBhcmUgYWN0dWFsbHkgaW1wbGVtZW50ZWQgYXQgdGhlIHNsYWIgbGV2ZWwuIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gZXhhbWluZSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSBob29rcyBhbmQgdGhlIHVuZGVybHlpbmcgc2xhYiBtYW5hZ2VtZW50LiBBcmUgdGhleSBpbnRlZ3JhdGVkIGRpcmVjdGx5IGludG8gdGhlIGBrbWVtX2NhY2hlYCBzdHJ1Y3R1cmVzPyBBcmUgdGhleSBjYWxsZWQgaW5saW5lLCBvciBhcmUgdGhleSBtYW5hZ2VkIHZpYSBhIGRpZmZlcmVudCBtZWNoYW5pc20/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIHNlcXVlbmNlIG9mIGV2ZW50cyB3aGVuIG1lbW9yeSB0YWdnaW5nIGlzIGludm9sdmVkIGluIHNsYWIgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLiBJJ20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBIb3cgbXVjaCBvdmVyaGVhZCBkbyB0aGVzZSBob29rcyBpbnRyb2R1Y2U/IEFyZSB0aGVyZSBhbnkgb3B0aW1pemF0aW9ucyBpbiBwbGFjZSB0byBtaW5pbWl6ZSB0aGUgcGVyZm9ybWFuY2UgaGl0PyBUaGlzIGlzIHdoZXJlIHRoZSBkZXZpbCBpcyBpbiB0aGUgZGV0YWlscy4gSSBrbm93IGBzbHViLmNgIGlzIHdoZXJlIEknbGwgZmluZCB0aG9zZSBhbnN3ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQxMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIwOjQ1LjA2MzE2NDUwNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5OTY1NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsdWIuYz0yMzQ2PXN0YXRpYyBub2lubGluZSB2b2lkXFxubW0vc2x1Yi5jOjIzNDc6X19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCBnZnBfdCBmbGFncyxcXG5tbS9zbHViLmMtMjM0OC1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjM5MD1hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0yMzkzLVxcdGlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSlcXG5tbS9zbHViLmM6MjM5NDpcXHRcXHRfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHMsIG9iamVjdCwgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcXG5tbS9zbHViLmMtMjM5NS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIwOjQ1LjIxMzE2NTEwNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzc4OTY0MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gU2xhYiBBbGxvY2F0aW9uIFRhZ2dpbmcqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIHRhZ2dpbmcgbWVjaGFuaXNtcyB3aXRoaW4gdGhlIHNsYWIgYWxsb2NhdG9yLCBzcGVjaWZpY2FsbHkgaG93IGZyZWVpbmcgbWVtb3J5IGlzIGhhbmRsZWQuIFRoZSBxdWlja2VzdCByb3V0ZSBpcyB1c3VhbGx5IHRvIGp1bXAgZGlyZWN0bHkgaW50byB0aGUgc291cmNlIGNvZGUsIHNvIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBtbS9zbHViLmNgLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2tgIGZ1bmN0aW9uLiBUaGlzIGhvb2sgbGlrZWx5IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIHRoZSBzcGVjaWZpYyBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiB0YWdnaW5nIHRoYXQgSSdtIGludGVyZXN0ZWQgaW4uIFVuZGVyc3RhbmRpbmcgaXRzIGltcGxlbWVudGF0aW9uIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHRhZ2dpbmcgc3RyYXRlZ3kgYW5kIGxpa2VseSBzaGVkcyBsaWdodCBvbiBob3cgYWxsb2NhdGlvbiB0cmFja2luZyBhbmQgaW50ZWdyaXR5IGNoZWNraW5nIGFyZSBwZXJmb3JtZWQgZHVyaW5nIHNsYWIgZnJlZWluZy4gSSBleHBlY3QgaXQncyBnb2luZyB0byBiZSBhIGtleSBmdW5jdGlvbiBpbiBoYW5kbGluZyB0YWdnZWQgc2xhYnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTU4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjA6NDguNTkyMTM2NTY0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE2MTk5OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9MjM5OD1zdGF0aWMgbm9pbmxpbmUgdm9pZFxcbm1tL3NsdWIuYzoyMzk5Ol9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxcbm1tL3NsdWIuYy0yNDAwLVxcdFxcdFxcdCAgICAgICBpbnQgb2JqZWN0cylcXG4tLVxcbm1tL3NsdWIuYz0yNDI2PWFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcXG4tLVxcbm1tL3NsdWIuYy0yNDI5LVxcdGlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSlcXG5tbS9zbHViLmM6MjQzMDpcXHRcXHRfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCwgb2JqZWN0cyk7XFxubW0vc2x1Yi5jLTI0MzEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMDo0OC43MzM3NzE3OTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2NjI3MzI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkRpdmluZyBpbnRvIFNsYWIgQWNjb3VudGluZyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgc2xhYiBhY2NvdW50aW5nIHdpdGhpbiB0aGUgbWVtb3J5IGNvbnRyb2xsZXIsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAuIFRoaXMgaXMgd2hlcmUgdGhlIGNydWNpYWwgd29yayBoYXBwZW5zICphZnRlciogYSBzbGFiIGFsbG9jYXRpb24gaGFzIGNvbXBsZXRlZC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IG1lbW9yeSBjb250cm9sIGdyb3VwcyBhcmUgdXBkYXRlZCBhZnRlciBtZW1vcnkgaGFzIGJlZW4gY2xhaW1lZCBmcm9tIHRoZSBzbGFiIGFsbG9jYXRvci4gSXMgaXQgYSBnb29kIGlkZWEgdG8gY2hlY2sgdGhpcyBmaWxlIGZpcnN0PyBZZXMsIHRoYXQgaXMgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LiBMZXQncyBzZWUgaG93IG1lbW9yeSB1c2FnZSBhbmQgbGltaXRzIGFyZSBiZWluZyBhZGp1c3RlZC4gSSB3YW50IHRvIHNlZSB0aGUgZGV0YWlscyBvZiB0aGUgcG9zdC1jaGFyZ2UgYWNjb3VudGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzOTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMDo1MS43MDAxMDcwMDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODc1MzkxNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY2dfc2xhYl9wb3N0X2NoYXJnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIwOjUxLjg1ODg3NDY4N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTUwMDczNzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIGV4cHJlc3NlZCBhcyB0aG91Z2ggSSdtIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIE1lbW9yeSBBY2NvdW50aW5nIHdpdGhpbiB0aGUgS2VybmVsKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGludG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgYWNjb3VudGluZyByZWxhdGVkIHRvIFNMVUIgY2FjaGVzIGFuZCBjb250cm9sIGdyb3Vwcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG1lbW9yeSBjaGFyZ2VzIGFyZSBoYW5kbGVkIGFmdGVyIGFuIGFsbG9jYXRpb24uIE15IGluaXRpYWwgaHVudCBsZWFkcyBtZSB0byBgbW0vc2x1Yi5jYC4gTm93LCB3aGVyZSBleGFjdGx5IGRvZXMgdGhlIHBvc3QtY2hhcmdlIGxvZ2ljIHJlc2lkZT8gVGhlIGZ1bmN0aW9uIG5hbWUsIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYCwgc3VnZ2VzdHMgdGhpcyBpcyBwcmVjaXNlbHkgd2hhdCBJJ20gYWZ0ZXIuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBvZiB0cmFja2luZyBtZW1vcnkgdXNhZ2Ugd2l0aGluIGNvbnRyb2wgZ3JvdXBzIGhhcHBlbnMgYWZ0ZXIgYSBzbGFiIGFsbG9jYXRpb24gb3IgZnJlZWluZy4gVGltZSB0byBkaXZlIGludG8gdGhpcyBmdW5jdGlvbiBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBtZW1jZyBpbmZyYXN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1OTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMDo1NS4wMDg5NTIzNDhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NDM2OTMyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9MjUyMz1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcXG5tbS9zbHViLmM6MjUyNDpib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXFxubW0vc2x1Yi5jLTI1MjUte1xcbi0tXFxubW0vc2x1Yi5jPTI1OTE9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4tLVxcbm1tL3NsdWIuYy0yNTk1LVxcbm1tL3NsdWIuYzoyNTk2OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxcbm1tL3NsdWIuYy0yNTk3LXtcXG4tLVxcbm1tL3NsdWIuYz01MDA1PWJvb2wga21lbV9jYWNoZV9jaGFyZ2Uodm9pZCAqb2JqcCwgZ2ZwX3QgZ2ZwZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmMtNTAwOS1cXG5tbS9zbHViLmM6NTAxMDpcXHRyZXR1cm4gbWVtY2dfc2xhYl9wb3N0X2NoYXJnZShvYmpwLCBnZnBmbGFncyk7XFxubW0vc2x1Yi5jLTUwMTEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMDo1NS4yNzMzMzY5NjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5MzkzNDkxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqS0ZFTkNFIERlZXAgRGl2ZTogSW5pdGlhbGl6YXRpb24gYW5kIERlYWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBLRkVOQ0UncyBjb3JlIHdvcmtpbmdzLCBzcGVjaWZpY2FsbHkgaG93IGl0IGluaXRpYWxpemVzIGl0cyBtZW1vcnkgcG9vbCBhbmQgdGhlIG1lY2hhbmlzbXMgaXQgdXNlcyBmb3IgZnJlZWluZyBtZW1vcnkuIFRoZSBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhvc2UgZnVuY3Rpb25zIGlzIGluIHRoZSBgbW0va2ZlbmNlL2NvcmUuY2AgZmlsZS4gSSdtIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhlIGBrZmVuY2VfaW5pdF9wb29sYCBmdW5jdGlvbiwgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHBvb2wgaXRzZWxmIGlzIHNldCB1cCwgYW5kIEkgd2lsbCBhbHNvIG5lZWQgdG8gcmV2aWV3IGBfX2tmZW5jZV9mcmVlYCB0byBnZXQgdGhlIHJ1bmRvd24gb24gaG93IG1lbW9yeSBpcyBhY3R1YWxseSByZWxpbnF1aXNoZWQgYnkgS0ZFTkNFLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIHBpY3R1cmUgSSBuZWVkIHRvIGFuYWx5emUgaXRzIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA5MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIwOjU5LjE2NzI3ODQ3MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwMTMwOTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmZW5jZV9pbml0X3Bvb2xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va2ZlbmNlL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9rZmVuY2UvY29yZS5jPTU5OT1zdGF0aWMgdm9pZCByY3VfZ3VhcmRlZF9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaClcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmMtNjEwLSAqL1xcbm1tL2tmZW5jZS9jb3JlLmM6NjExOnN0YXRpYyB1bnNpZ25lZCBsb25nIGtmZW5jZV9pbml0X3Bvb2wodm9pZClcXG5tbS9rZmVuY2UvY29yZS5jLTYxMi1cXHRfX2NvbnRleHRfdW5zYWZlKC8qIGNvbnN0cnVjdG9yICovKVxcbi0tXFxubW0va2ZlbmNlL2NvcmUuYy02MTYtXFxubW0va2ZlbmNlL2NvcmUuYzo2MTc6XFx0aWYgKCFhcmNoX2tmZW5jZV9pbml0X3Bvb2woKSlcXG5tbS9rZmVuY2UvY29yZS5jLTYxOC1cXHRcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX19rZmVuY2VfcG9vbDtcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmMtNzE5LVxcbm1tL2tmZW5jZS9jb3JlLmM6NzIwOnN0YXRpYyBib29sIF9faW5pdCBrZmVuY2VfaW5pdF9wb29sX2Vhcmx5KHZvaWQpXFxubW0va2ZlbmNlL2NvcmUuYy03MjEte1xcbi0tXFxubW0va2ZlbmNlL2NvcmUuYy03MjYtXFxubW0va2ZlbmNlL2NvcmUuYzo3Mjc6XFx0YWRkciA9IGtmZW5jZV9pbml0X3Bvb2woKTtcXG5tbS9rZmVuY2UvY29yZS5jLTcyOC1cXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmM9OTk0PXZvaWQgX19pbml0IGtmZW5jZV9pbml0KHZvaWQpXFxuLS1cXG5tbS9rZmVuY2UvY29yZS5jLTEwMDEtXFxubW0va2ZlbmNlL2NvcmUuYzoxMDAyOlxcdGlmICgha2ZlbmNlX2luaXRfcG9vbF9lYXJseSgpKSB7XFxubW0va2ZlbmNlL2NvcmUuYy0xMDAzLVxcdFxcdHByX2VycihcXFwiJXMgZmFpbGVkXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuLS1cXG5tbS9rZmVuY2UvY29yZS5jPTEwMTA9c3RhdGljIGludCBrZmVuY2VfaW5pdF9sYXRlKHZvaWQpXFxuLS1cXG5tbS9rZmVuY2UvY29yZS5jLTEwNTAtXFx0bWVtemVyb19leHBsaWNpdChrZmVuY2VfbWV0YWRhdGFfaW5pdCwgS0ZFTkNFX01FVEFEQVRBX1NJWkUpO1xcbm1tL2tmZW5jZS9jb3JlLmM6MTA1MTpcXHRhZGRyID0ga2ZlbmNlX2luaXRfcG9vbCgpO1xcbm1tL2tmZW5jZS9jb3JlLmMtMTA1Mi1cXHRpZiAoIWFkZHIpIHtcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmM9MTA5MD12b2lkIGtmZW5jZV9zaHV0ZG93bl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmMtMTA5NS1cXG5tbS9rZmVuY2UvY29yZS5jOjEwOTY6XFx0LyogUGFpcnMgd2l0aCByZWxlYXNlIGluIGtmZW5jZV9pbml0X3Bvb2woKS4gKi9cXG5tbS9rZmVuY2UvY29yZS5jLTEwOTctXFx0aWYgKCFzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZrZmVuY2VfbWV0YWRhdGEpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMDo1OS4zNzc0MjU5NThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3MTMwMjY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpZ2dpbmcgaW50byBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYF9fa2ZlbmNlX2ZyZWVgIHdvcmtzLiBJIGtub3cgdGhhdCdzIHBhcnQgb2YgdGhlIEtGRU5DRSAoS2VybmVsIEVsZWN0cmljIEZlbmNlKSBwcm9qZWN0LCBzbyB0aGUgbGlrZWx5IHN0YXJ0aW5nIHBvaW50IGlzIGluIHRoZSBjb3JlIEtGRU5DRSBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ2xsIG5hdmlnYXRlIHRvIHRoZSBgbW0va2ZlbmNlL2AgZGlyZWN0b3J5IGFuZCBmaW5kIGBjb3JlLmNgLiBUaGF0IHNob3VsZCBjb250YWluIHRoZSBkZWZpbml0aW9uIGZvciBgX19rZmVuY2VfZnJlZWAsIGFuZCBsaWtlbHkgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgSSBuZWVkLiBUaW1lIHRvIGRpdmUgaW4gYW5kIGdldCBhIGhhbmRsZSBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgbWVtb3J5IGRlYWxsb2NhdGlvbiBwYXRoIHdpdGhpbiBLRkVOQ0UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTI4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjE6MDIuNDQ4NzM0MjhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTUyNTU4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2tmZW5jZV9mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2tmZW5jZS9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2ZlbmNlL2NvcmUuYz0xMjM5PXZvaWQgKmtmZW5jZV9vYmplY3Rfc3RhcnQoY29uc3Qgdm9pZCAqYWRkcilcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmMtMTI0OS1cXG5tbS9rZmVuY2UvY29yZS5jOjEyNTA6dm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXFxubW0va2ZlbmNlL2NvcmUuYy0xMjUxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjE6MDIuNTgwMjc1ODM3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDQ1NDExOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIE1lbW9yeSBDb250cm9sIHdpdGggYG1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYmAqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IGNncm91cHMgYW5kIHNwZWNpZmljYWxseSBob3cgdGhlIGtlcm5lbCB0cmFja3MgbWVtb3J5IHVzYWdlIGZyb20gc2xhYiBhbGxvY2F0aW9ucy4gVG8gdW5kZXJzdGFuZCB0aGlzIHByb3Blcmx5LCB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgbWUgaXMgYG1tL21lbWNvbnRyb2wuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUga2VybmVsIGFzc29jaWF0ZXMgYSBzbGFiIG9iamVjdCB3aXRoIGl0cyBjb3JyZXNwb25kaW5nIG1lbW9yeSBjZ3JvdXAsIGFuZCBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYCBpcyB0aGUgb2J2aW91cyBmdW5jdGlvbiB0byBpbnZlc3RpZ2F0ZS4gSXQgc2VlbXMgbGlrZWx5IHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIHRoZSB0cmFja2luZyBwcm9jZXNzOyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IHRvIHNlZSBleGFjdGx5IGhvdyBpdCBtYXBzIGEgc2xhYiBvYmplY3QncyBhbGxvY2F0aW9uIGJhY2sgdG8gYSBzcGVjaWZpYyBjZ3JvdXAuIElzIGl0IHVzaW5nIHRoZSBzbGFiJ3MgbWV0YWRhdGE/IE9yIGlzIHRoZXJlIHNvbWUgb3RoZXIgbWFnaWMgaW52b2x2ZWQ/IEkgZXhwZWN0IHRvIGZpbmQgc29tZSBjcml0aWNhbCBwb2ludGVycyBvciBsb29rdXBzIGhlcmUuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGEgY29ybmVyc3RvbmUgZm9yIGFjY3VyYXRlIGFjY291bnRpbmcsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGlubmVyIHdvcmtpbmdzIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudC4gTGV0J3Mgc2VlIGhvdyBpdCB3b3JrcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTgyMTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMTowNi4wODQ4MjE5NjVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDYzMDgxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0yODU4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXG5tbS9tZW1jb250cm9sLmM6Mjg1OTpzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX29ial9zbGFiKHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICpwKVxcbm1tL21lbWNvbnRyb2wuYy0yODYwLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yODk4PXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fdmlydCh2b2lkICpwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI5MDYtXFx0aWYgKHNsYWIpXFxubW0vbWVtY29udHJvbC5jOjI5MDc6XFx0XFx0cmV0dXJuIG1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYihzbGFiLCBwKTtcXG5tbS9tZW1jb250cm9sLmMtMjkwOC1cXHRyZXR1cm4gZm9saW9fbWVtY2dfY2hlY2sodmlydF90b19mb2xpbyhwKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIxOjA2LjI5NTQ5MDUzMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjMzOTU5MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiB0aGUgS2VybmVsKipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYG1tL3NsYWJfY29tbW9uLmNgLiBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBzbGFiIGFsbG9jYXRvciBmdW5jdGlvbnMgcmVzaWRlLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIGhvdyBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYCBhbmQgYG5ld19rbWFsbG9jX2NhY2hlYCB3b3JrLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciByb2xlcyBpbiBpbml0aWFsaXppbmcgYW5kIG1hbmFnaW5nIHRoZXNlIGttZW0gY2FjaGVzIGJlY2F1c2UgdGhvc2UgYXJlIHRoZSBmb3VuZGF0aW9uIGZvciBlZmZpY2llbnQga2VybmVsIG1lbW9yeSBhbGxvY2F0aW9uLiBVbmRlcnN0YW5kaW5nIGhvdyB0aG9zZSBjYWNoZXMgYXJlIHNldHVwIGlzIGtleSB0byBpZGVudGlmeWluZyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIG1lbW9yeS1yZWxhdGVkIGJ1Z3MuIExldCdzIHNlZSBob3cgdGhleSBpbnRlcmFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2OTQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMTowOS45Mjk0ODE5NzZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDYwNjgyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2xhYl9jb21tb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbGFiX2NvbW1vbi5jPTI2Nz1fX2ttZW1fY2FjaGVfYWxpYXMoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IHNpemUsIHNsYWJfZmxhZ3NfdCBmbGFncyxcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMjkxLS8qKlxcbm1tL3NsYWJfY29tbW9uLmM6MjkyOiAqIF9fa21lbV9jYWNoZV9jcmVhdGVfYXJncyAtIENyZWF0ZSBhIGttZW0gY2FjaGUuXFxubW0vc2xhYl9jb21tb24uYy0yOTMtICogQG5hbWU6IEEgc3RyaW5nIHdoaWNoIGlzIHVzZWQgaW4gL3Byb2Mvc2xhYmluZm8gdG8gaWRlbnRpZnkgdGhpcyBjYWNoZS5cXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMzE3LSAqL1xcbm1tL3NsYWJfY29tbW9uLmM6MzE4OnN0cnVjdCBrbWVtX2NhY2hlICpfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MoY29uc3QgY2hhciAqbmFtZSxcXG5tbS9zbGFiX2NvbW1vbi5jLTMxOS1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG9iamVjdF9zaXplLFxcbi0tXFxubW0vc2xhYl9jb21tb24uYy00MDgtfVxcbm1tL3NsYWJfY29tbW9uLmM6NDA5OkVYUE9SVF9TWU1CT0woX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzKTtcXG5tbS9zbGFiX2NvbW1vbi5jLTQxMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjE6MTAuMDQ0MTA1MTNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1NTQyMDg4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IEV4YW1pbmluZyBhIGBrbWFsbG9jYCBDYWNoZSoqXG5cbkFscmlnaHQsIEknbSBsb29raW5nIGF0IGEgbmV3IGBrbWFsbG9jX2NhY2hlYCwgYW5kIGltbWVkaWF0ZWx5LCBteSBtaW5kIHN0YXJ0cyB0aWNraW5nLiBUaGUgaW1wbGljYXRpb25zIGFyZSBjbGVhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudC4gSXMgdGhpcyBmb3IgYSBzcGVjaWZpYyBkcml2ZXIsIGEgY29yZSBzdWJzeXN0ZW0sIG9yIGEgbW9yZSBnZW5lcmFsIHVzZSBjYXNlPyBUaGUgbmFtZSBpdHNlbGYgb2Z0ZW4gb2ZmZXJzIGNsdWVzLCBzbyBJJ2xsIGJlIGRpc3NlY3RpbmcgdGhhdCB2ZXJ5IGNhcmVmdWxseSB0byBpZGVudGlmeSBpdHMgcm9sZS4gSSBuZWVkIHRvIGJlIGFza2luZyBteXNlbGYgYWJvdXQgdGhlIGludGVuZGVkIHNpemUgY2xhc3MgYW5kIGl0cyByZWxhdGlvbiB0byBzbGFiIGNhY2hlcyBpbiB1c2UgZWxzZXdoZXJlLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybnMgYXJlIGFyb3VuZCBlZmZpY2llbmN5IGFuZCBmcmFnbWVudGF0aW9uLiBJcyB0aGlzIGNhY2hlIGFwcHJvcHJpYXRlbHkgc2l6ZWQgZm9yIGl0cyBleHBlY3RlZCB3b3JrbG9hZD8gSGFzIHRoZSBkZXNpZ24gY29uc2lkZXJlZCB0aGUgcG90ZW50aWFsIGZvciBpbnRlcm5hbCBmcmFnbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBvYmplY3Qgc2l6ZT8gQXJlIHRoZXJlIHBvdGVudGlhbCBvdmVybGFwcyB3aXRoIGV4aXN0aW5nIGNhY2hlcywgYW5kIGNvdWxkIHdlIGNvbnNvbGlkYXRlIHRvIGltcHJvdmUgb3ZlcmFsbCBtZW1vcnkgdXRpbGl6YXRpb24/IFdoYXQgaXMgdGhlIGltcGFjdCBvbiBjYWNoZSBsaW5lIHV0aWxpemF0aW9uPyBEb2VzIHRoZSBjYWNoZSBtYWtlIHVzZSBvZiBOVU1BIG5vZGVzIGVmZmVjdGl2ZWx5PyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhhdCwgdG9vLlxuXG5JJ20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIHBhdHRlcm5zLiBJcyB0aGlzIGNhY2hlIGJlaW5nIGhlYXZpbHkgY29udGVuZGVkLCBvciBpcyBpdCByZWxhdGl2ZWx5IHN0YXRpYz8gRnJlcXVlbnQgYWxsb2NhdGlvbnMgYW5kIGRlYWxsb2NhdGlvbnMgY2FuIGxlYWQgdG8gcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIHNvIEkgaGF2ZSB0byBiZSB0aGlua2luZyBhYm91dCBob3cgaXQgaXMgYmVpbmcgdXNlZCwgaXRzIGxvY2sgY29udGVudGlvbiwgYW5kIHRoZSBpbXBhY3Qgb24gb3RoZXIga2VybmVsIG9wZXJhdGlvbnMuIEFyZSB0aGVyZSBhbnkgY29udGVudGlvbiBpc3N1ZXM/IEFyZSB0aGVyZSBtdXRleGVzIG9yIHNwaW5sb2NrcyBpbiBwbGFjZT8gSG93IGFyZSB0aGV5IGNvbmZpZ3VyZWQ/XG5cbkZpbmFsbHksIHdoYXQgYXJlIHRoZSBlcnJvci1oYW5kbGluZyBtZWNoYW5pc21zIGluIHBsYWNlPyBBIGBrbWFsbG9jYCBjYWNoZSBpcyBhIGNyaXRpY2FsIHJlc291cmNlLCBhbmQgSSdsbCB3YW50IHRvIHNlZSBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMsIG9yIGV2ZW4gaWYgdGhlIGNhY2hlIGJlY29tZXMgY29ycnVwdGVkLiBEb2VzIGl0IGhhdmUgYXBwcm9wcmlhdGUgY2hlY2tzIGFuZCBiYWxhbmNlcyB0byBwcmV2ZW50IGNhc2NhZGluZyBmYWlsdXJlcz8gQXJlIHRoZXJlIGluc3RydW1lbnRhdGlvbiBob29rcyBmb3IgZGVidWdnaW5nPyBUaGUgYW5zd2VycyB0byB0aGVzZSBxdWVzdGlvbnMgYXJlIGVzc2VudGlhbC4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGRlc2lnbiBpcyByb2J1c3Qgb3IgZnJhZ2lsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxNzMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIxOjE0LjI5OTUzMDY1NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQxNTU5MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ld19rbWFsbG9jX2NhY2hlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsYWJfY29tbW9uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2xhYl9jb21tb24uYz05NjI9c3RhdGljIHZvaWQgX19pbml0XFxubW0vc2xhYl9jb21tb24uYzo5NjM6bmV3X2ttYWxsb2NfY2FjaGUoaW50IGlkeCwgZW51bSBrbWFsbG9jX2NhY2hlX3R5cGUgdHlwZSlcXG5tbS9zbGFiX2NvbW1vbi5jLTk2NC17XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTEwMjY9dm9pZCBfX2luaXQgY3JlYXRlX2ttYWxsb2NfY2FjaGVzKHZvaWQpXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTEwMzYtXFx0XFx0aWYgKEtNQUxMT0NfTUlOX1NJWkUgXFx1MDAzYz0gMzIpXFxubW0vc2xhYl9jb21tb24uYzoxMDM3OlxcdFxcdFxcdG5ld19rbWFsbG9jX2NhY2hlKDEsIHR5cGUpO1xcbm1tL3NsYWJfY29tbW9uLmMtMTAzOC1cXHRcXHRpZiAoS01BTExPQ19NSU5fU0laRSBcXHUwMDNjPSA2NClcXG5tbS9zbGFiX2NvbW1vbi5jOjEwMzk6XFx0XFx0XFx0bmV3X2ttYWxsb2NfY2FjaGUoMiwgdHlwZSk7XFxubW0vc2xhYl9jb21tb24uYy0xMDQwLVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xMDQyLVxcdFxcdGZvciAoaSA9IEtNQUxMT0NfU0hJRlRfTE9XOyBpIFxcdTAwM2M9IEtNQUxMT0NfU0hJRlRfSElHSDsgaSsrKVxcbm1tL3NsYWJfY29tbW9uLmM6MTA0MzpcXHRcXHRcXHRuZXdfa21hbGxvY19jYWNoZShpLCB0eXBlKTtcXG5tbS9zbGFiX2NvbW1vbi5jLTEwNDQtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMToxNC41NDExMDA3MThaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgwMDcyMjA3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU2xhYiBBbGxvY2F0aW9uIEhvb2tzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyB0b3VjaGluZyBhIHdob2xlIGJ1bmNoIG9mIGNvcmUgc2xhYiBhbGxvY2F0aW9uIGhvb2tzOiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AsIGBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5YCwgYW5kIGEgZmV3IG90aGVycyBJIHJlY29nbml6ZSwgbmFtZWx5IGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rYCwgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2AsIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYCwgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgLCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AsIGFuZCBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYC4gU2VlbXMgcHJldHR5IGNlbnRyYWwgdG8gaG93IHRoZSBzbGFiIGFsbG9jYXRvciB3b3Jrcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoaXMgaW1wYWN0cyB0aGUgc3lzdGVtLlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgaGVyZSBuZWVkcyB0byBiZSBvbjogYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBgX19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9va2AsIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2tgLCBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAsIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCwgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgLCBhbmQgYG1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYmAuIFRob3NlIGFyZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLlxuXG5XYWl0IGEgc2Vjb25kLCB0aGVyZSBhcmUgc29tZSBwcmVwcm9jZXNzb3IgY29uZGl0aW9uYWxzIEkgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudC4gYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2tgIGFuZCBgX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rYCBhcmUgb25seSBwcmVzZW50IGlmIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgZW5hYmxlZC4gQWxzbywgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgIGFuZCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AgYXJlIGRlcGVuZGVudCBvbiBgQ09ORklHX01FTUNHYC4gR290dGEga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBJJ20gYXNzZXNzaW5nIHRoZSBvdmVyYWxsIGltcGFjdC4gVG8gYmUgc3VyZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG1tL3NsdWIuY2AgZm9yIGBhbGxvY19zbGFiX29ial9leHRzYC4gSnVzdCB3YW50IHRvIGhhdmUgdGhlIGNvbnRleHQgZnVsbHkgaW4gbXkgaGVhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5MTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjE6MjAuMzQxODI3NzcxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjA3MzYyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2Nfc2xhYl9vYmpfZXh0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTIxMzQ9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy0yMTM4LVxcbm1tL3NsdWIuYzoyMTM5OmludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjE0MC1cXHRcXHRcXHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcXG4tLVxcbm1tL3NsdWIuYz0yMjI4PXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgYWxsb3dfc3BpbilcXG4tLVxcbm1tL3NsdWIuYy0yMjU5LSAqL1xcbm1tL3NsdWIuYzoyMjYwOnN0YXRpYyB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxcbm1tL3NsdWIuYy0yMjYxLXtcXG4tLVxcbm1tL3NsdWIuYz0yMzA3PXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmMtMjMxMC1cXG5tbS9zbHViLmM6MjMxMTpzdGF0aWMgaW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbm1tL3NsdWIuYy0yMzEyLVxcdFxcdFxcdCAgICAgICBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcXG4tLVxcbm1tL3NsdWIuYz0yMzE3PXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgYWxsb3dfc3BpbilcXG4tLVxcbm1tL3NsdWIuYy0yMzIwLVxcbm1tL3NsdWIuYzoyMzIxOnN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbm1tL3NsdWIuYy0yMzIyLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYz0yMzMxPXByZXBhcmVfc2xhYl9vYmpfZXh0c19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4tLVxcbm1tL3NsdWIuYy0yMzM0LVxcdGlmICghc2xhYl9vYmpfZXh0cyhzbGFiKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3NsdWIuYzoyMzM1OlxcdCAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBhbGxvY19mbGFncykpIHtcXG5tbS9zbHViLmMtMjMzNi1cXHRcXHRwcl93YXJuX29uY2UoXFxcIiVzLCAlczogRmFpbGVkIHRvIGNyZWF0ZSBzbGFiIGV4dGVuc2lvbiB2ZWN0b3IhXFxcXG5cXFwiLFxcbi0tXFxubW0vc2x1Yi5jPTMzNzI9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGFjY291bnRfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgaW50IG9yZGVyLFxcbi0tXFxubW0vc2x1Yi5jLTMzNzgtXFx0XFx0XFx0IXNsYWJfb2JqX2V4dHMoc2xhYikpXFxubW0vc2x1Yi5jOjMzNzk6XFx0XFx0YWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBnZnAsXFxubW0vc2x1Yi5jLTMzODAtXFx0XFx0XFx0XFx0ICAgIGFsbG9jX2ZsYWdzIHwgU0xBQl9BTExPQ19ORVdfU0xBQik7XFxuLS1cXG5tbS9zbHViLmM9MzQwMT1zdGF0aWMgc3RydWN0IHNsYWIgKmFsbG9jYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTM0NTYtXFx0ICovXFxubW0vc2x1Yi5jOjM0NTc6XFx0YWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzLCBzbGFiKTtcXG5tbS9zbHViLmMtMzQ1OC1cXHRhY2NvdW50X3NsYWIoc2xhYiwgb29fb3JkZXIob28pLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMToyMS4wNjI1NzQzMTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5ODc2MzQwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkNoZWNraW5nIFNsYWIgT2JqZWN0IEV4dGVuc2lvbiBBdmFpbGFiaWxpdHkqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGludG8gYW55IG1vcmUgZGV0YWlsZWQgYW5hbHlzaXMsIEkgbmVlZCB0byBtYWtlIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzIGFjdHVhbGx5IGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gVGhpcyBlc3NlbnRpYWxseSBtZWFucyBJJ20gY2hlY2tpbmcgaWYgdGhlIGBDT05GSUdfU0xBQl9PQkpfRVhUYCBmZWF0dXJlIGlzIGVuYWJsZWQuIEl0J3MgYSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGUuIFdpdGhvdXQgdGhpcywgdGhlIGZ1bmN0aW9uIHdvbid0IGJlIGluIHRoZSBrZXJuZWwncyBzeW1ib2wgdGFibGUsIGFuZCBhbnkgYXR0ZW1wdCB0byB1c2UgaXQgd291bGQgYmUgZnV0aWxlLCBsZWFkaW5nIHRvIHVuZGVmaW5lZCBiZWhhdmlvciBvciBjb21waWxlLXRpbWUgZXJyb3JzLiBTbywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEknbGwgY29uZmlybSB0aGF0IHRoaXMgaXMgYSB2YWxpZCBwYXJ0IG9mIHRoZSBhdmFpbGFibGUgdG9vbHNldC4gVGhpcyBzYXZlcyBtZSB0aW1lIGluIHRoZSBsb25nIHJ1bi4gSSBkb24ndCB3YW50IHRvIGNoYXNlIGRvd24gYSByYWJiaXQgaG9sZSBvZiBkZWJ1Z2dpbmcgaWYgdGhlIHJvb3QgY2F1c2UgaXMgc2ltcGx5IGEgZGlzYWJsZWQgZmVhdHVyZS4gVGhpcyBhbHNvIGhlbHBzIGVuc3VyZSBhbnkgYXNzdW1wdGlvbnMgSSBtYWtlIGRvd24gdGhlIGxpbmUgcmVnYXJkaW5nIHRoaXMgZnVuY3Rpb25hbGl0eSBhcmUgdmFsaWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDkwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjE6MjUuNjYxMzQzNzk4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE4NDMzOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1NMQUJfT0JKX0VYVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTc2Nj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X29yaWdfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0KVxcbi0tXFxubW0vc2x1Yi5jLTc4MS1cXG5tbS9zbHViLmM6NzgyOiNpZmRlZiBDT05GSUdfU0xBQl9PQkpfRVhUXFxubW0vc2x1Yi5jLTc4My1cXG4tLVxcbm1tL3NsdWIuYz04NzA9c3RhdGljIGlubGluZSBib29sIG9ial9leHRzX2luX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTg3Ni1cXG5tbS9zbHViLmM6ODc3OiNpZiBkZWZpbmVkKENPTkZJR19TTEFCX09CSl9FWFQpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHXzY0QklUKVxcbm1tL3NsdWIuYy04Nzgtc3RhdGljIHVuc2lnbmVkIGludCBvYmpfZXh0c19vZmZzZXRfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2x1Yi5jPTIwNDI9c3RhdGljIGlubGluZSB2b2lkIGRlY19zbGFic19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBpbnQgbm9kZSxcXG4tLVxcbm1tL3NsdWIuYy0yMDU3LVxcbm1tL3NsdWIuYzoyMDU4OiNpZmRlZiBDT05GSUdfU0xBQl9PQkpfRVhUXFxubW0vc2x1Yi5jLTIwNTktXFxuLS1cXG5tbS9zbHViLmM9MjI2MD1zdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy0yMzAwLVxcbm1tL3NsdWIuYzoyMzAxOiNlbHNlIC8qIENPTkZJR19TTEFCX09CSl9FWFQgKi9cXG5tbS9zbHViLmMtMjMwMi1cXG4tLVxcbm1tL3NsdWIuYz0yMzIxPXN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbi0tXFxubW0vc2x1Yi5jLTIzMjUtXFxubW0vc2x1Yi5jOjIzMjY6I2VuZGlmIC8qIENPTkZJR19TTEFCX09CSl9FWFQgKi9cXG5tbS9zbHViLmMtMjMyNy1cXG4tLVxcbm1tL3NsdWIuYz03ODYyPXN0YXRpYyBpbnQgY2FsY3VsYXRlX3NpemVzKHN0cnVjdCBrbWVtX2NhY2hlX2FyZ3MgKmFyZ3MsIHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2x1Yi5jLTc5NzYtXFx0YWxpZ25lZF9zaXplID0gQUxJR04oc2l6ZSwgcy1cXHUwMDNlYWxpZ24pO1xcbm1tL3NsdWIuYzo3OTc3OiNpZiBkZWZpbmVkKENPTkZJR19TTEFCX09CSl9FWFQpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHXzY0QklUKVxcbm1tL3NsdWIuYy03OTc4LVxcdGlmIChzbGFiX2FyZ3NfdW5tZXJnZWFibGUoYXJncywgcy1cXHUwMDNlZmxhZ3MpIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIxOjI1Ljg5MzIwMDE2NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTc0NDM3NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgRGVwZW5kZW5jaWVzIGZvciBTbGFib2JqX2V4dCBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdGFyZ2V0aW5nIG9wdGltaXphdGlvbiBvZiBgc3RydWN0IHNsYWJvYmpfZXh0YC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYENPTkZJR19TTEFCX09CSl9FWFRgIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQuIE5vIHN1cnByaXNlcyB0aGVyZS4gQnV0IG5vdyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gU2luY2UgdGhpcyBzdHJ1Y3R1cmUgaXMgYmVpbmcgb3B0aW1pemVkLCBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHRoZSBwbGFjZXMgaXQncyB1c2VkLiBSaWdodCwgaXQncyB1c2VkIGJ5IGJvdGggYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBhbmQgYENPTkZJR19NRU1DR2AuIFRob3NlIGFyZSB0aGUgdHdvIGtleSBjb25zdW1lcnMgb2YgdGhpcyBzdHJ1Y3R1cmUuIEdvdCBpdC4gTm93LCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGl0J3MgdGltZSB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQncyBwdWxsIHVwIGBtbS9zbGFiLmhgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHNsYWJvYmpfZXh0YCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBtZW1vcnkgbGF5b3V0IHRoYXQncyBiZWluZyB0d2Vha2VkLiBUaGF0J2xsIGdpdmUgbWUgdGhlIGZ1bGwgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzODcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMTozMC4wNjc2NDE1OTNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDI1ODYxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qgc2xhYm9ial9leHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2xhYi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsYWIuaD01NDE9c3RhdGljIGlubGluZSBib29sIG5lZWRfa21hbGxvY19ub19vYmpleHQodm9pZClcXG4tLVxcbm1tL3NsYWIuaC01NTYtICovXFxubW0vc2xhYi5oOjU1NzpzdHJ1Y3Qgc2xhYm9ial9leHQge1xcbm1tL3NsYWIuaC01NTgtXFx0LypcXG4tLVxcbm1tL3NsYWIuaD02MTQ9c3RhdGljIGlubGluZSBzaXplX3QgY2FjaGVfb2JqX2V4dF9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2xhYi5oLTYyMy1cXG5tbS9zbGFiLmg6NjI0OlxcdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHN6O1xcbm1tL3NsYWIuaC02MjUtfVxcbi0tXFxubW0vc2xhYi5oPTYyNz1zdGF0aWMgaW5saW5lIHNpemVfdCBzbGFiX29ial9leHRfc2l6ZShzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsYWIuaC02MzYtXFxubW0vc2xhYi5oOjYzNzpcXHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkgKiBzejtcXG5tbS9zbGFiLmgtNjM4LX1cXG4tLVxcbm1tL3NsYWIuaD03MDY9c3RhdGljIGlubGluZSBib29sIG9ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsYWIuaC03MjItICovXFxubW0vc2xhYi5oOjcyMzpzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqXFxubW0vc2xhYi5oLTcyNC1zbGFiX29ial9leHQoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBsb25nIG9ial9leHRzLFxcbi0tXFxubW0vc2xhYi5oLTcyNi17XFxubW0vc2xhYi5oOjcyNzpcXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQ7XFxubW0vc2xhYi5oLTcyOC1cXHR1bnNpZ25lZCBpbnQgaW5kZXg7XFxuLS1cXG5tbS9zbGFiLmgtNzM5LVxcbm1tL3NsYWIuaDo3NDA6XFx0b2JqX2V4dCA9IChzdHJ1Y3Qgc2xhYm9ial9leHQgKikob2JqX2V4dHMgKyBpbmRleCAqIHN0cmlkZSk7XFxubW0vc2xhYi5oLTc0MS1cXG4tLVxcbm1tL3NsYWIuaC03NDUtI2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3NsYWIuaDo3NDY6c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqc2xhYl9vYmpfZXh0X29iamNnKHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dClcXG5tbS9zbGFiLmgtNzQ3LXtcXG4tLVxcbm1tL3NsYWIuaC03NTEtXFxubW0vc2xhYi5oOjc1MjpzdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9vYmpfZXh0X3NldF9vYmpjZyhzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQsXFxubW0vc2xhYi5oLTc1My1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4tLVxcbm1tL3NsYWIuaD03NjE9c3RhdGljIGlubGluZSB1bmlvbiBjb2RldGFnX3JlZiAqXFxubW0vc2xhYi5oOjc2MjpzbGFiX29ial9leHRfY29kZXRhZ19yZWYoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dClcXG5tbS9zbGFiLmgtNzYzLXtcXG4tLVxcbm1tL3NsYWIuaD03NzY9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbGFiLmgtNzgwLVxcbm1tL3NsYWIuaDo3ODE6c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYm9ial9leHQgKlxcbm1tL3NsYWIuaC03ODItc2xhYl9vYmpfZXh0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjE6MzAuMjExOTQ2MjE0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2Mjk1NjQ0OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNsYWIgQWxsb2NhdGlvbiBhbmQgVGFnZ2luZyBIb29rcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gc2xhYiBhbGxvY2F0aW9uLCBvYmplY3QgZXh0ZW5zaW9ucywgYW5kIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gSSBzZWUgYSBjb25zdGVsbGF0aW9uIG9mIHN5bWJvbHMgdGhhdCBzZWVtIGNlbnRyYWwgdG8gdGhpczogYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseWAsIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rYCwgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2AsIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYCwgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgLCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AsIGFuZCBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYC4gSXQncyBhIGJpdCBvZiBhIGRhbmNlLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHN0ZXBzLlxuXG5XYWl0IGEgc2Vjb25kLCB3YXNuJ3QgYGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHlgIGRlY2xhcmVkIGFzIGBzdGF0aWMgaW5saW5lYCBvciBgc3RhdGljIHZvaWRgPyBUaGF0J3MgaW50ZXJlc3RpbmcsIGFzIHRoaXMgd291bGQgbWFrZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGhvb2sgZGVwZW5kZW50IG9uIGlubGluaW5nL2NvbXBpbGUtdGltZSBvcHRpbWl6YXRpb24uIFRoYXQgaW1wbGllcyBpdCBtaWdodCBiZSB1c2VkIHRvIG9wdGltaXplIHNvbWV0aGluZyB0aGF0J3Mgb3RoZXJ3aXNlIGRvbmUgbGF0ZXIuIE9rYXksIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIGVhcmx5IHN0YWdlIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGF0IGFjdHVhbGx5IGRvZXMgd2l0aGluIGBtbS9zbHViLmNgLiBJIHdpbGwgZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciBhIGJldHRlciB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQ1NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMTozNC44NDE1MTYzMTlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODQ2MzgwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9MjIyOD1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuLS1cXG5tbS9zbHViLmMtMjI1OS0gKi9cXG5tbS9zbHViLmM6MjI2MDpzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG5tbS9zbHViLmMtMjI2MS17XFxuLS1cXG5tbS9zbHViLmM9MjMxNz1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuLS1cXG5tbS9zbHViLmMtMjMyMC1cXG5tbS9zbHViLmM6MjMyMTpzdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjMyMi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmM9MzQwMT1zdGF0aWMgc3RydWN0IHNsYWIgKmFsbG9jYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTM0NTYtXFx0ICovXFxubW0vc2x1Yi5jOjM0NTc6XFx0YWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzLCBzbGFiKTtcXG5tbS9zbHViLmMtMzQ1OC1cXHRhY2NvdW50X3NsYWIoc2xhYiwgb29fb3JkZXIob28pLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMTozNS4wNjAwMDA1OTFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY3NjI0MTY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gdGhpcyBpcyBzdGF0aWMsIG5vdCBjaGFuZ2luZy4gTXkgZm9jdXMgc3ltYm9scyBoZXJlIGFyZSBhbGwgcmVsYXRlZCB0byBzbGFiIG9iamVjdCBleHRlbnNpb25zOiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AsIGBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5YCwgYW5kIHRoZSB2YXJpb3VzIGhvb2tpbmcgZnVuY3Rpb25zIChgX19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9va2AsIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2tgLCBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AsIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYCksIGFsb25nIHdpdGggYG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VgIGFuZCBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYC4gVGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gYW5kLCBtb3JlIHNwZWNpZmljYWxseSwgaG93IHRoZXNlIGV4dGVuc2lvbnMgaW50ZXJhY3Qgd2l0aCBtZW1vcnkgY29udHJvbCBncm91cHMgKG1lbWNncykgYW5kL29yIG1lbW9yeSBwcm9maWxpbmcuXG5cblRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGFyZSBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIGFuZCBgQ09ORklHX01FTUNHYCBwcmVyZXF1aXNpdGVzIGhlcmU/IFllcywgaXQgc2VlbXMgdGhlIHBhdGNoIGlzIG9wdGltaXppbmcgdGhlIG1lbW9yeSBsYXlvdXQgb2YgYHN0cnVjdCBzbGFib2JqX2V4dGAgd2hpY2ggaXMgdXNlZCB3aGVuICplaXRoZXIqIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2Agb3IgYENPTkZJR19NRU1DR2AgaXMgc2V0LiBTbywgZm9yIHByb3BlciBjb25maWd1cmF0aW9uLCBJJ2xsIG5lZWQgdG8gaW5jbHVkZSBgTUVNX0FMTE9DX1BST0ZJTElOR2AgYW5kIGBNRU1DR2AgaW4gYEVuYWJsZUNvbmZpZ3NgLlxuXG5Ib2xkIG9uLCBJIHJlY2FsbCBgTUVNQ0dgIGlzIGZyZXF1ZW50bHkgZW5hYmxlZCBieSBkZWZhdWx0LiBIb3dldmVyLCBpdCB3b3VsZG4ndCBodXJ0IHRvIGJlIGV4cGxpY2l0IGFuZCBsaXN0IGl0LiBgTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgZGVmaW5pdGVseSBhIGRlZGljYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nLCBhbmQgb25lIHRoYXQgaXMgcHJvYmFibHkgbGVzcyBvZnRlbiBlbmFibGVkIGJ5IGRlZmF1bHQuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYEtjb25maWdgIGZpbGUgZm9yIGBNRU1fQUxMT0NfUFJPRklMSU5HYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYW5kIGFueSByZWxldmFudCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MjcxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIxOjQwLjczNjI0NjUwNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEzMjg2MTM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcuZGVidWc9MTA0Nz1jb25maWcgQ09ERV9UQUdHSU5HXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDUwLVxcbmxpYi9LY29uZmlnLmRlYnVnOjEwNTE6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDUyLVxcdGJvb2wgXFxcIkVuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmdcXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDY0LVxcbmxpYi9LY29uZmlnLmRlYnVnOjEwNjU6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXFxubGliL0tjb25maWcuZGVidWctMTA2Ni1cXHRib29sIFxcXCJFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDY5LVxcbmxpYi9LY29uZmlnLmRlYnVnOjEwNzA6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDcxLVxcdGJvb2wgXFxcIk1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGVyIGRlYnVnZ2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjE6NDYuODY5MTE5MzczWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTU4NTQ5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgdGhpbmtpbmcgaXM6XG5cbioqTWVtb3J5IEFsbG9jYXRpb24gUHJvZmlsaW5nIGFuZCBDb250cm9sIEdyb3VwIEludGVncmF0aW9uKipcblxuUmlnaHQsIHNvIHRvIGdldCBhIHJlYWxseSBnb29kIGhhbmRsZSBvbiB0aGlzLCBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBmbGlwIG9uIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBhbmQgaXRzIGRlZmF1bHQtZW5hYmxlZCBjb3VudGVycGFydCBgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRgLiBUaGF0J3MgZ29pbmcgdG8gZ2l2ZSB1cyBhIGdyYW51bGFyIHZpZXcgaW50byB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBvcHRpbWl6YXRpb24uIFdlICpuZWVkKiB0aGF0IGRhdGEuXG5cbkFuZCB3aGlsZSB3ZSdyZSBhdCBpdCwgYE1FTUNHYCBoYXMgZ290IHRvIGJlIGluIHRoZSBtaXguIENvbnRyb2wgZ3JvdXBzIGFyZSBpbmRpc3BlbnNhYmxlIGZvciBpc29sYXRpbmcgYW5kIG1hbmFnaW5nIHJlc291cmNlIGNvbnN1bXB0aW9uLCBhbmQgbWVtb3J5IGlzIG9idmlvdXNseSBhIGJpZyBwYXJ0IG9mIHRoYXQgZXF1YXRpb24uIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBlZmZlY3RpdmVseSBpc29sYXRlIHRoZSBwcm9jZXNzZXMgYW5kIHVuZGVyc3RhbmQgdGhlaXIgYmVoYXZpb3IuXG5cbkZpbmFsbHksIGp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2s6IEknbGwgYWxzbyB3YW50IHRvIGNvbmZpcm0gdGhhdCBgU0xBQl9PQkpfRVhUYCBpcyBleHBvc2VkIGFzIGEgY29uZmlndXJhYmxlIG9wdGlvbiB0byB0aGUgZW5kLXVzZXJzLiBTb21ldGltZXMgdGhlc2UgXCJpbnRlcm5hbFwiIGZsYWdzIGFyZSBoaWRkZW4gYW5kIGl0IGlzIHVzZWZ1bCB0byBrbm93IGlmIHdlIGNhbiBjb250cm9sIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTE0MSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIxOjUwLjM2NDk3OTE1NVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI1NjI5NjE3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0xBQl9PQkpfRVhUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTAzMz1jb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXFxuLS1cXG5pbml0L0tjb25maWctMTA0MC1cXG5pbml0L0tjb25maWc6MTA0MTpjb25maWcgU0xBQl9PQkpfRVhUXFxuaW5pdC9LY29uZmlnLTEwNDItXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMTo1NC42MjEzMTA4NFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDY5NzYwNTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGBTTEFCX09CSl9FWFRgIEJvb2xlYW4qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBTTEFCX09CSl9FWFRgIGZsYWcgYW5kIGl0J3MgZmxhZ2dlZCBhcyBhIGhpZGRlbiBib29sZWFuLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIE15IGludHVpdGlvbiB0ZWxscyBtZSBpdCdzIHByb2JhYmx5IHRyaWdnZXJlZCBieSBlaXRoZXIgYE1FTUNHYCBvciBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIFRob3NlIHR3byBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBpbmZsdWVuY2luZyBsb3ctbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQgYmVoYXZpb3JzLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IHNlbGVjdGlvbiBjcml0ZXJpYSBmb3IgdGhpcyBmbGFnLiBLbm93aW5nIHdoYXQgZW5hYmxlcyBgU0xBQl9PQkpfRVhUYCBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uIFRpbWUgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1MjAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMTo1OS42OTEwNzcxMDdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwODYxOTkzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFNMQUJfT0JKX0VYVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNzM9Y29uZmlnIE1FTUNHXFxuLS1cXG5pbml0L0tjb25maWctMTA3Ni1cXHRzZWxlY3QgRVZFTlRGRFxcbmluaXQvS2NvbmZpZzoxMDc3OlxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG5pbml0L0tjb25maWctMTA3OC1cXHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnPTEwNTE9Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTEwNTgtXFx0c2VsZWN0IFBBR0VfRVhURU5TSU9OXFxubGliL0tjb25maWcuZGVidWc6MTA1OTpcXHRzZWxlY3QgU0xBQl9PQkpfRVhUXFxubGliL0tjb25maWcuZGVidWctMTA2MC1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIyOjA0Ljc3NzI5MTgxN1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDk3MjU5MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBiYXNlZCBvbiB0aGUga2VybmVsIGNvZGUsIGVuYWJsaW5nIGJvdGggYE1FTUNHYCBhbmQgYE1FTV9BTExPQ19QUk9GSUxJTkdgIGF1dG9tYXRpY2FsbHkgYnJpbmdzIGluIGBTTEFCX09CSl9FWFRgLiBUaGVyZWZvcmUsIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBkZWZpbml0ZWx5IG5lZWRzIHRvIGluY2x1ZGUgYm90aCBgTUVNQ0dgIGFuZCBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIFRoYXQncyBzdHJhaWdodGZvcndhcmQuXG5cbk5vdywgSSBuZWVkIHRvIHBpY2sgYSBnb29kIGZvY3VzIHN5bWJvbC4gSSB3YXMgaW5pdGlhbGx5IHRoaW5raW5nIGFib3V0IGBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5YCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgcmlnaHQgY2hvaWNlLCBzbyBsZXQncyBkaWcgYSBiaXQgZGVlcGVyLiBJdCdzIHN0YXRpYywgd2hpY2ggaXMgYSBjb25jZXJuLCBidXQgc3l6a2FsbGVyICptaWdodCogYmUgYWJsZSB0byBmdXp6IGl0IGlmIGl0IGlzbid0IGlubGluZWQsIHNvIGl0IG1heSBzdGlsbCBiZSB2aWFibGUuIFRoYW5rZnVsbHksIGBhbGxvY19zbGFiX29ial9leHRzYCBpdHNlbGYgaXMgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IGl0IGlzbid0IHN0YXRpYywgd2hpY2ggbG9va3MgYmV0dGVyLiBFeGNlbGxlbnQuIFRoZW4gSSBzZWUgdGhhdCBgX19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9va2AgYW5kIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2tgIGFyZSBhbHNvIG5vbi1zdGF0aWMuIEdvb2Qgc2lnbnMgZm9yIGZ1enppbmcgdGFyZ2V0cyEgRnVydGhlciwgYG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VgLCBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AsIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYCwgYW5kIGBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWJgIGFyZSBhbGwgbm9uLXN0YXRpYyBhcyB3ZWxsLiBUaGVzZSBhcmUgYWxsIGdvb2QgY2FuZGlkYXRlcy5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzIGluZGVlZCBleHBvcnRlZC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTg4OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMjowOS44NzQ1NTU5NDNaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NjgxNTMwNDYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmFsbG9jX3NsYWJfb2JqX2V4dHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMjoxNS41NDI3MjQ5NDlaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg5NjU0MDYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNMVUIgQWxsb2NhdG9yKipcblxuT2theSwgc28gSSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGV4cG9ydGluZyB0aGlzIHRoaW5nOyBpdCBqdXN0IG5lZWRzIHRvIGJlIG5vbi1zdGF0aWMuIFRoZSBrZXkgaGVyZSBpcyB0byBmaWd1cmUgb3V0IHdoZXJlIGl0J3MgYmVpbmcgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uIExldCBtZSBzZWUuLi4gSSByZWNhbGwgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGJlaW5nIGNhbGxlZCBmcm9tIGJvdGggYG1tL3NsdWIuY2Ag4oCTIHRoYXQncyB0aGUgU0xVQiBhbGxvY2F0b3IgaXRzZWxmLCBvYnZpb3VzbHkg4oCTIGFuZCBhbHNvIGZyb20gYG1tL21lbWNvbnRyb2wuY2AuIFRoYXQncyBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gd2l0aCBtZW1vcnkgY29udHJvbCBncm91cHMuIE5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYG1tL3NsYWIuaGAuIFRoYXQncyB3aGVyZSB0aGUgcmVsZXZhbnQgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHNob3VsZCBiZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyZmFjZXMgYW5kIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY1MDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMjoyMC40MzkyNzA0OTVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMzE5Nzg0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbGFiLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2xhYi5oPTc2Mj1zbGFiX29ial9leHRfY29kZXRhZ19yZWYoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dClcXG4tLVxcbm1tL3NsYWIuaC03NzAtXFxubW0vc2xhYi5oOjc3MTppbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2xhYi5oLTc3Mi1cXHRcXHRcXHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIyOjIxLjA3MjQ3ODg3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNTQ5NTAxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtGRU5DRSBhbmQgU0xVQiBTeW1ib2xzKipcblxuT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IG5vdCBhIHN0YXRpYyBzaXR1YXRpb24sIGdvb2QuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBoZXJlLiBMZXQncyBkaWcgaW50byB0aGUgY29kZSBhbmQgbG9vayBhdCBga2ZlbmNlX2luaXRfcG9vbGAgYW5kIGBfX2tmZW5jZV9mcmVlYCBzcGVjaWZpY2FsbHkuIEFscmlnaHQsIGBrZmVuY2VfaW5pdF9wb29sYCBpcyBkZWZpbmVkIGFzIHN0YXRpYywgdGhhdCBtYWtlcyBzZW5zZS4gQnV0IGBfX2tmZW5jZV9mcmVlYC4uLiB0aGF0J3Mgbm9uLXN0YXRpYy4gQmluZ28hIFdlIGNhbiBhZGQgYF9fa2ZlbmNlX2ZyZWVgIHRvIGBGb2N1c1N5bWJvbHNgLCB0aGF0J3Mgd2hhdCB3ZSB3YW50LlxuXG5Ob3csIGxldCdzIHRha2UgYSBsb29rIGF0IHdoYXQgZWxzZSBpcyBpbiBgRm9jdXNTeW1ib2xzYCBjdXJyZW50bHkuIExldCdzIHNlZS4uLiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AsIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rYCwgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2AsIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYCwgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgLCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AsIGBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWJgLCBhbmQgbm93LCBgX19rZmVuY2VfZnJlZWAuXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gYXJlIHRob3NlIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rYCBhbmQgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2AgZnVuY3Rpb25zIGFsc28gc3RhdGljPyBZZXMsIHRoZXkgYXJlISBJJ20gbG9va2luZyByaWdodCBhdCBpdCBpbiBgbW0vc2x1Yi5jYCBub3csIGFuZCB0aGV5IGFyZSBzdGF0aWMgbm9pbmxpbmUgZnVuY3Rpb25zLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBwcm9jZXNzIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODgyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIyOjI2LjEyNzQzNTQ1M1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NzcwNTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsdWIuYz0yMzQ2PXN0YXRpYyBub2lubGluZSB2b2lkXFxubW0vc2x1Yi5jOjIzNDc6X19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCBnZnBfdCBmbGFncyxcXG5tbS9zbHViLmMtMjM0OC1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjM5MD1hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0yMzkzLVxcdGlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSlcXG5tbS9zbHViLmM6MjM5NDpcXHRcXHRfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHMsIG9iamVjdCwgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcXG5tbS9zbHViLmMtMjM5NS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIyOjI2LjMxNDIxNjE2OFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzIxODczODcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFyZ2V0cyB3ZSdyZSBsb29raW5nIGF0IGFyZSBtYXJrZWQgYXMgYHN0YXRpYyBub2lubGluZWAuIEZpbmUsIHRoYXQncyBub3QgYSBzaG93c3RvcHBlcjsgU3l6a2FsbGVyIGNhbiBzdGlsbCBwb3RlbnRpYWxseSBnZXQgYXQgdGhlbS4gTm8gcHJvYmxlbSB0aGVyZS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgbGlrZWx5IGFyZWFzIG9mIGludGVyZXN0LiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIG91dCB0aGUgcG90ZW50aWFsIGhvb2tzOiBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AgYW5kIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSdtIG1vc3QgaW50ZXJlc3RlZCBpbiBhdCB0aGlzIGp1bmN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzY3MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIyOjI5LjYzNjA5NDY1WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI3Mjc2NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTM1Mjk9c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2Z1bGxfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTM3LVxcbm1tL21lbWNvbnRyb2wuYzozNTM4OmJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxubW0vbWVtY29udHJvbC5jLTM1MzktXFx0XFx0XFx0XFx0ICBnZnBfdCBmbGFncywgdW5zaWduZWQgaW50IHNsYWJfYWxsb2NfZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIyOjI5Ljc0ODg4NTQzNFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODEyMTg1NzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgRHluYW1pYyBNZW1vcnkgQWxsb2NhdGlvbioqXG5cbk15IG1pbmQgaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhlIGluaGVyZW50IGR5bmFtaXNtIG9mIHRoZSB0b3BpYy4gVGhlIHZlcnkgbmF0dXJlIG9mIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gcHJvY2VzcyBzdWdnZXN0cyB0aGF0IGl0J3MgKm5vdCogYSBzdGF0aWMgcHJvYmxlbS4gSXTigJlzIGZsdWlkLCBjb25zdGFudGx5IGNoYW5naW5nLCBhbmQgdGhhdCdzIHRoZSBjb3JlIGNoYWxsZW5nZS4gVGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFyZSBzaWduaWZpY2FudCBhbmQgbXVzdCBiZSBrZXB0IGluIG1pbmQuXG5cblRvIHRhY2tsZSB0aGlzLCBhIG5hdHVyYWwgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWJgIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgbWVtb3J5IGNncm91cCBpbnRlcmFjdHMgd2l0aCBvYmplY3Qgc2xhYnMgaXMgcGFyYW1vdW50IGhlcmUuIFRoaXMgZnVuY3Rpb24gbGlrZWx5IHByb3ZpZGVzIGEgY3J1Y2lhbCBlbnRyeSBwb2ludCB0byBkaXNzZWN0aW5nIHRoZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBtZWNoYW5pY3MgYXQgYSBncmFudWxhciBsZXZlbC4gRGVsdmluZyBpbnRvIGl0cyBsb2dpYyB3aWxsIHJldmVhbCBrZXkgaW5zaWdodHMgaW50byBob3cgbWVtb3J5IGlzIGJlaW5nIG1hbmFnZWQgYW5kIHBvdGVudGlhbGx5IHdoZXJlIGluZWZmaWNpZW5jaWVzIG9yIGxlYWtzIG1pZ2h0IGJlIGx1cmtpbmcgd2l0aGluIHRoZSBzeXN0ZW0uIEl0J3MgYSBmdW5kYW1lbnRhbCBwaWVjZSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwdXp6bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDIxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjI6MzQuNTYxMDc1NDE2WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODgwOTUxMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9mcm9tX29ial9zbGFiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9Mjg1OD1zdGF0aWMgX19hbHdheXNfaW5saW5lXFxubW0vbWVtY29udHJvbC5jOjI4NTk6c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqcClcXG5tbS9tZW1jb250cm9sLmMtMjg2MC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mjg5OD1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ZpcnQodm9pZCAqcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yOTA2LVxcdGlmIChzbGFiKVxcbm1tL21lbWNvbnRyb2wuYzoyOTA3OlxcdFxcdHJldHVybiBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWIoc2xhYiwgcCk7XFxubW0vbWVtY29udHJvbC5jLTI5MDgtXFx0cmV0dXJuIGZvbGlvX21lbWNnX2NoZWNrKHZpcnRfdG9fZm9saW8ocCkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMjozNC43NDkxODc2NVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQ2ODAwMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipFeGNsdXNpb25hcnkgUmVhc29uaW5nIGluIEZ1enppbmcgQ29udGV4dCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyBzb21ldGhpbmcgbWFya2VkIGFzIGBzdGF0aWMgX19hbHdheXNfaW5saW5lYC4gVGhhdCBpbnN0YW50bHkgdGhyb3dzIHVwIGEgcmVkIGZsYWcgaW4gdGhlIGNvbnRleHQgb2YgZnV6emluZywgcGFydGljdWxhcmx5IHdpdGggU3l6a2FsbGVyLiBCZWNhdXNlIGl0J3MgaW5saW5lLCBpdCdzIGJha2VkIGludG8gb3RoZXIgY29kZSBkdXJpbmcgY29tcGlsYXRpb24gYW5kIGRvZXNuJ3QgZXhpc3QgYXMgYSBzdGFuZGFsb25lIGZ1bmN0aW9uIHRoYXQgU3l6a2FsbGVyIGNhbiBkaXJlY3RseSB0YXJnZXQuIEF0dGVtcHRpbmcgdG8gZG8gc28gd291bGQgYmUgZnV0aWxlLiBUaGVyZWZvcmUsIG15IGltbWVkaWF0ZSByZWFjdGlvbiBpcywgXCJXZSBuZWVkIHRvIGV4Y2x1ZGUgdGhpcyBmcm9tIGZ1enppbmcuXCIgSXQncyBhIGRlYWQgZW5kIGFzIGEgZnV6emluZyB0YXJnZXQsIGxpa2VseSBqdXN0IGlubGluZWQgYXMgcGFydCBvZiBhIGxhcmdlciwgbW9yZSBpbnRlcmVzdGluZyBmdW5jdGlvbi4gTm8gcG9pbnQgd2FzdGluZyB0aW1lIG9uIGl0LlxuXG5Ob3csIGxldCdzIHBpdm90LiBTaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIG9mZiB0aGUgdGFibGUsIEkgbmVlZCB0byBmaW5kIGl0cyBjYWxsZXJzLiBXaGljaCBtZWFucyBJIG5lZWQgdG8gZXhwbG9yZSB3aGF0IGZ1bmN0aW9uIHRoYXQgbWFrZXMgc2Vuc2UgdG8gc3R1ZHkgaW4gdGhlIHBsYWNlIG9mIHRoaXMgZnVuY3Rpb24uIExldCdzIHNlZS4uLiBJJ2xsIGNoZWNrIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYC4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBuZXh0IHN0ZXAsIGdpdmVuIHRoZSBjb250ZXh0LiBJdCBsaWtlbHkgcmVwcmVzZW50cyBhIHBvaW50IHdoZXJlIG1lbW9yeSBhY2NvdW50aW5nLCByZWxhdGVkIHRvIHNsYWIgY2FjaGVzIGFuZCBtZW1vcnkgY29udHJvbCBncm91cHMsIGlzIGhhbmRsZWQuIEFuZCBpZiB0aGlzIGlubGluZWQgZnVuY3Rpb24gaXMgcGFydCBvZiBzb21lIGNydWNpYWwgYWNjb3VudGluZyBwcm9jZXNzLCB0aGVuIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGlzIGxpa2VseSB0byBiZSBhbiBpbXBvcnRhbnQgZW50cnkgcG9pbnQgb3IgcG9pbnQgb2YgZmFpbHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0NjcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMjozOC43OTU5OTM5NloiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzNDg4MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsdWIuYz0yNTIzPXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxcbm1tL3NsdWIuYzoyNTI0OmJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcXG5tbS9zbHViLmMtMjUyNS17XFxuLS1cXG5tbS9zbHViLmM9MjU5MT1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbi0tXFxubW0vc2x1Yi5jLTI1OTUtXFxubW0vc2x1Yi5jOjI1OTY6c3RhdGljIGlubGluZSBib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXFxubW0vc2x1Yi5jLTI1OTcte1xcbi0tXFxubW0vc2x1Yi5jPTUwMDU9Ym9vbCBrbWVtX2NhY2hlX2NoYXJnZSh2b2lkICpvYmpwLCBnZnBfdCBnZnBmbGFncylcXG4tLVxcbm1tL3NsdWIuYy01MDA5LVxcbm1tL3NsdWIuYzo1MDEwOlxcdHJldHVybiBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKG9ianAsIGdmcGZsYWdzKTtcXG5tbS9zbHViLmMtNTAxMS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIyOjM4Ljk5OTQ5NTY2N1oiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc1NTM1MjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqRmlsdGVyaW5nIEtlcm5lbCBDb2RlOiBBIFF1aWNrIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gRmlyc3Qgb2ZmLCB0aGF0IGBzdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVgIGRpcmVjdGl2ZSBpcyBhIGNsZWFyIGV4Y2x1c2lvbi4gTm8gbmVlZCB0byBzcGVuZCBhbnkgdGltZSBvbiB0aGF0LiBJdCdzIGVzc2VudGlhbGx5IGFuIGludGVybmFsLCBvcHRpbWl6ZWQgaGVscGVyIGZ1bmN0aW9uLiBNb3Zpbmcgb24uLi5cblxuTm93LCBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYC4uLiBUaGF0J3MgYSBsaXR0bGUgbW9yZSBpbnRlcmVzdGluZywgaXNuJ3QgaXQ/IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpZiBpdCdzIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IHRhc2suIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaXQgYWN0dWFsbHkgKmRvZXMqIHdpdGhpbiB0aGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZSBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgaXQncyBzb21ldGhpbmcgdGhhdCBuZWVkcyB0byBiZSBjb25zaWRlcmVkLCBvciBpZiBpdCdzIHNvbWV0aGluZyBJIGNhbiBzYWZlbHkgZXhjbHVkZSBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0LiBNb3JlIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkIHRvIG1ha2UgYSBkZWNpc2lvbiBhYm91dCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTEwNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIyOjQyLjI3NTAzNTQ0OFoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MDQ4ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fa21lbV9jYWNoZV9jcmVhdGVfYXJnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbGFiX2NvbW1vbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsYWJfY29tbW9uLmM9MjY3PV9fa21lbV9jYWNoZV9hbGlhcyhjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgc2l6ZSwgc2xhYl9mbGFnc190IGZsYWdzLFxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0yOTEtLyoqXFxubW0vc2xhYl9jb21tb24uYzoyOTI6ICogX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzIC0gQ3JlYXRlIGEga21lbSBjYWNoZS5cXG5tbS9zbGFiX2NvbW1vbi5jLTI5My0gKiBAbmFtZTogQSBzdHJpbmcgd2hpY2ggaXMgdXNlZCBpbiAvcHJvYy9zbGFiaW5mbyB0byBpZGVudGlmeSB0aGlzIGNhY2hlLlxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0zMTctICovXFxubW0vc2xhYl9jb21tb24uYzozMTg6c3RydWN0IGttZW1fY2FjaGUgKl9fa21lbV9jYWNoZV9jcmVhdGVfYXJncyhjb25zdCBjaGFyICpuYW1lLFxcbm1tL3NsYWJfY29tbW9uLmMtMzE5LVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgb2JqZWN0X3NpemUsXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTQwOC19XFxubW0vc2xhYl9jb21tb24uYzo0MDk6RVhQT1JUX1NZTUJPTChfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MpO1xcbm1tL3NsYWJfY29tbW9uLmMtNDEwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMjo0Mi40NjIwOTczMTJaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2MjczODU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIHRoZXNlIGFyZSBteSB0aG91Z2h0cywga2VlcGluZyBpbiBtaW5kIEknbSBhbiBleHBlcnQgaW4gbXkgZmllbGQ6XG5cbioqSW50ZXJuYWwgQ29kZSBSZXZpZXc6IEluY2x1c2lvbiBcdTAwMjYgUmVmaW5lbWVudCoqXG5cbkFscmlnaHQsIHRoZSBpbml0aWFsIHJldmlldyBpbmRpY2F0ZXMgdGhpcyBjb2RlIGNhbiBiZSBleHBvcnRlZC4gR29vZCwgdGhhdCdzIGEgcG9zaXRpdmUgc3RhcnQuIFdlIGNhbiBpbmNsdWRlIGl0IGluIHRoZSBicm9hZGVyIHByb2plY3QsIHdoaWNoIGlzIHdoYXQgd2UgbmVlZC5cblxuQnV0IGhvbGQgb24sIGJlZm9yZSB3ZSBnaXZlIHRoaXMgdGhlIGdyZWVuIGxpZ2h0LCBJIG5lZWQgdG8gem9vbSBpbi4gVGhlIHVzZSBvZiBgbmV3X2ttYWxsb2NfY2FjaGVgIGhhcyBtZSBzbGlnaHRseSBjb25jZXJuZWQuIElzIHRoaXMgdGhlIHJpZ2h0IGltcGxlbWVudGF0aW9uPyBBbSBJIGdvaW5nIHRvIGJlIGRlYWxpbmcgd2l0aCB0aGUgY29tcGxleGl0eSBvZiBhIGN1c3RvbSBjYWNoZT8gT3IgaXMgaXQgb2theSBiZWNhdXNlIGl0J3MgbWFuYWdlZCBjb3JyZWN0bHkgZWxzZXdoZXJlPyBUaGUgdXNlIGNhc2UgaXNuJ3QgY2xlYXIgZnJvbSBqdXN0IHRoaXMgc25pcHBldC4gSXQgY291bGQgYmUgZmluZS4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byBpdHMgaW1wbGVtZW50YXRpb24gYW5kIGludGVncmF0aW9uIHBvaW50cy4gVGhpcyBuZWVkcyBhIGNsb3NlciBsb29rIGJlZm9yZSBJIHNpZ24gb2ZmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTYwMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIyOjQ1LjkyNDg0MDYxN1oiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNTk5MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ld19rbWFsbG9jX2NhY2hlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsYWJfY29tbW9uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2xhYl9jb21tb24uYz05NjI9c3RhdGljIHZvaWQgX19pbml0XFxubW0vc2xhYl9jb21tb24uYzo5NjM6bmV3X2ttYWxsb2NfY2FjaGUoaW50IGlkeCwgZW51bSBrbWFsbG9jX2NhY2hlX3R5cGUgdHlwZSlcXG5tbS9zbGFiX2NvbW1vbi5jLTk2NC17XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTEwMjY9dm9pZCBfX2luaXQgY3JlYXRlX2ttYWxsb2NfY2FjaGVzKHZvaWQpXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTEwMzYtXFx0XFx0aWYgKEtNQUxMT0NfTUlOX1NJWkUgXFx1MDAzYz0gMzIpXFxubW0vc2xhYl9jb21tb24uYzoxMDM3OlxcdFxcdFxcdG5ld19rbWFsbG9jX2NhY2hlKDEsIHR5cGUpO1xcbm1tL3NsYWJfY29tbW9uLmMtMTAzOC1cXHRcXHRpZiAoS01BTExPQ19NSU5fU0laRSBcXHUwMDNjPSA2NClcXG5tbS9zbGFiX2NvbW1vbi5jOjEwMzk6XFx0XFx0XFx0bmV3X2ttYWxsb2NfY2FjaGUoMiwgdHlwZSk7XFxubW0vc2xhYl9jb21tb24uYy0xMDQwLVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xMDQyLVxcdFxcdGZvciAoaSA9IEtNQUxMT0NfU0hJRlRfTE9XOyBpIFxcdTAwM2M9IEtNQUxMT0NfU0hJRlRfSElHSDsgaSsrKVxcbm1tL3NsYWJfY29tbW9uLmM6MTA0MzpcXHRcXHRcXHRuZXdfa21hbGxvY19jYWNoZShpLCB0eXBlKTtcXG5tbS9zbGFiX2NvbW1vbi5jLTEwNDQtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMjo0Ni4xMzg0NTA5OTFaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMzY2NzUyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgU3ltYm9sIExpc3QqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZ2l2ZW4gYSBsaXN0IG9mIHN5bWJvbHMgdG8gZm9jdXMgb24uIEZpcnN0LCBJJ20gZ29pbmcgdG8gcXVpY2tseSBlbGltaW5hdGUgdGhhdCBgc3RhdGljIHZvaWQgX19pbml0YCBvbmU7IGl0J3MgaW5pdGlhbGl6YXRpb24gY29kZSBhbmQgbm90IHJlbGV2YW50IHRvIG15IGNvcmUgYW5hbHlzaXMuIE5vdywgdGhlIGZpbmFsIGxpc3QgaW5jbHVkZXM6IGBhbGxvY19zbGFiX29ial9leHRzYCwgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2tgLCBgX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rYCwgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgLCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AsIGBfX2tmZW5jZV9mcmVlYCwgYW5kIGBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NgLiBOb3cgSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhbmQgZGVjaWRlIGlmIHRob3NlIGFyZSBleHBvcnRlZCBvciBub24tc3RhdGljLiBUaGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgd2hldGhlciBgX19rZmVuY2VfZnJlZWAgaXMgZXhwb3J0ZWQgb3Igbm90LCBvciBpZiBpdCBpcyBub24tc3RhdGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDE1MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMjo1MC4wNDIxMjM4NThaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTQ2NjQ1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2tmZW5jZV9mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2tmZW5jZS9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2ZlbmNlL2NvcmUuYz0xMjM5PXZvaWQgKmtmZW5jZV9vYmplY3Rfc3RhcnQoY29uc3Qgdm9pZCAqYWRkcilcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmMtMTI0OS1cXG5tbS9rZmVuY2UvY29yZS5jOjEyNTA6dm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXFxubW0va2ZlbmNlL2NvcmUuYy0xMjUxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjI6NTAuMTgxNjAxMTIyWiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjMxMjU2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqQXNzZXNzaW5nIHRoZSBEeW5hbWljIE5hdHVyZSoqXG5cblJpZ2h0LCBzbyBpdCdzIG5vdCBzdGF0aWMuIFRoYXQncyB0aGUga2V5IHRha2Vhd2F5IGhlcmUuIFRoZSBiZWhhdmlvciBvciBzdGF0ZSB3ZSdyZSBleGFtaW5pbmcgaXNuJ3QgZml4ZWQ7IGl0J3MgY2hhbmdpbmcsIGV2b2x2aW5nLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGR5bmFtaXNtLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuIEl0J3Mgb2Z0ZW4gd2hlcmUgeW91J2xsIGZpbmQgdGhlIG11dGFibGUgb3IgdHJhbnNpZW50IGNvbXBvbmVudHMsIHBlcmhhcHMgdGhlIGFsbG9jYXRpb24gZXh0ZW5zaW9ucywgd2hpY2ggYXJlIGNydWNpYWwgd2hlbiBkZWFsaW5nIHdpdGggYW4gZWxlbWVudCBvZiBjaGFuZ2Ugd2l0aGluIG91ciBhcmNoaXRlY3R1cmUuIFRoYXQgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIGhvbGQgdGhlIGNvcmUgb2YgdGhlIHN0YXRlIHRoYXQncyByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgdGhpcyBsYWNrIG9mIHN0YXRpYyBiZWhhdmlvci4gVGltZSB0byBkaWcgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNjAwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjI6NTMuNzQ0NzMzMzk2WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTUwMTQ3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGFsbG9jX3NsYWJfb2JqX2V4dHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsdWIuYz0yMTM0PXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmMtMjEzOC1cXG5tbS9zbHViLmM6MjEzOTppbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIxNDAtXFx0XFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjMwNz1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTIzMTAtXFxubW0vc2x1Yi5jOjIzMTE6c3RhdGljIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjMxMi1cXHRcXHRcXHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIyOjUzLjk5OTc1NzU4M1oiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE1Nzg0NzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBEeW5hbWljIFNsYWIgT2JqZWN0IEV4dGVuc2lvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIGNvbmNlcHQgaGVyZSBpcyB0aGF0IHRoZSBzbGFiIGFsbG9jYXRvcidzIGJlaGF2aW9yIGlzbid0IGZpeGVkLCBhbmQgaXQgY2hhbmdlcyB3aGVuIGBDT05GSUdfU0xBQl9PQkpfRVhUYCBpcyBlbmFibGVkLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdCDigJMgYSBkeW5hbWljIGNvbmRpdGlvbiBhbHdheXMgZGVtYW5kcyBhIGNsb3NlciBsb29rLiBJJ20gYXNzdW1pbmcgd2UncmUgdGFsa2luZyBhYm91dCBvYmplY3QgZXh0ZW5zaW9ucyB3aXRoaW4gdGhlIHNsYWIgYWxsb2NhdG9yLCBwcm9iYWJseSByZWxhdGVkIHRvIG1ldGFkYXRhIG9yIHBlci1vYmplY3QgZGF0YS5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBhbGxvY2F0aW9uIGhvb2suIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2tgLiBUaGlzIGhvb2sgbGlrZWx5IHByb3ZpZGVzIGNydWNpYWwgaW5zaWdodHMuIEl0J3MgcHJvYmFibHkgdGhlIHBvaW50IHdoZXJlIHRoZSBkeW5hbWljIGJlaGF2aW9yIG1hbmlmZXN0cyBpdHNlbGYuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MgaXMgbW9kaWZpZWQuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIG9iamVjdCBleHRlbnNpb25zIGFyZSBpbnRlZ3JhdGVkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNoYW5nZXMgaW4gZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVnaWVzLCBvciBwb3RlbnRpYWxseSBldmVuIGFsbG9jYXRpb24gYWxnb3JpdGhtcyBzcGVjaWZpYyB0byB0aGlzIGNvbmZpZ3VyYXRpb24uIEl0IGNvdWxkIGludm9sdmUgdGFnZ2luZyBvYmplY3RzIGZvciBsYXRlciByZXRyaWV2YWwgb3Igc29tZSBvdGhlciBraW5kIG9mIGluc3RydW1lbnRhdGlvbi4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSB1c2FnZSwgYW5kIHdoZXRoZXIgb3Igbm90IGl0IGFsaWducyB3aXRoIHRoZSBkZXNpZ24gZ29hbHMgYW5kIGFudGljaXBhdGVkIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0IGhhbmRsZXMgbWVtb3J5IGZyYWdtZW50YXRpb24gYW5kIGFsaWdubWVudCwgZXNwZWNpYWxseSBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gXCJleHRlbmRlZFwiIG9iamVjdC4gRXNzZW50aWFsbHksIEkgbmVlZCB0byBkZXRlcm1pbmUgKmhvdyogdGhlIHNsYWIgYWxsb2NhdG9yIGlzIGR5bmFtaWNhbGx5IGFkYXB0aW5nIGFuZCB3aGF0IGltcGxpY2F0aW9ucyB0aGF0IGhhcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEwNTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMjo1OC4zMTU1NDkzMDRaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzUzNDIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9MjM0Nj1zdGF0aWMgbm9pbmxpbmUgdm9pZFxcbm1tL3NsdWIuYzoyMzQ3Ol9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgZ2ZwX3QgZmxhZ3MsXFxubW0vc2x1Yi5jLTIzNDgtXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jPTIzOTA9YWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtMjM5My1cXHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkpXFxubW0vc2x1Yi5jOjIzOTQ6XFx0XFx0X19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9vayhzLCBvYmplY3QsIGZsYWdzLCBhbGxvY19mbGFncyk7XFxubW0vc2x1Yi5jLTIzOTUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMjo1OC40ODkwOTM2NDRaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2ODA4MjE4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gZGlzY3Vzc2luZyB0aGlzIHdpdGggYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBjbHVlIHBvaW50cyB0b3dhcmRzIGEgZnVuY3Rpb24gZGVjbGFyZWQgYXMgYHN0YXRpYyBub2lubGluZSB2b2lkYC4gSW50ZXJlc3Rpbmcg4oCTIHRoYXQgYG5vaW5saW5lYCBpcyBvZnRlbiBhIHJlZCBmbGFnIGZvciBmdXp6aW5nIG9wcG9ydHVuaXRpZXMuIFN5emthbGxlciwgZ2l2ZW4gaXRzIGNhcGFiaWxpdGllcywgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgbG9vayBhdCBpdC5cblxuTm93LCBsZXQncyBkaWcgZGVlcGVyIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZCB3aXRoIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2tgLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTY1MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIzOjAxLjY1NzE4MDk3OFoiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MTg5NzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTIzOTg9c3RhdGljIG5vaW5saW5lIHZvaWRcXG5tbS9zbHViLmM6MjM5OTpfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcXG5tbS9zbHViLmMtMjQwMC1cXHRcXHRcXHQgICAgICAgaW50IG9iamVjdHMpXFxuLS1cXG5tbS9zbHViLmM9MjQyNj1hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXFxuLS1cXG5tbS9zbHViLmMtMjQyOS1cXHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkpXFxubW0vc2x1Yi5jOjI0MzA6XFx0XFx0X19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAsIG9iamVjdHMpO1xcbm1tL3NsdWIuYy0yNDMxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjM6MDEuOTAzNDEzNDE4WiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTYxNjk4NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEZ1enogVGFyZ2V0KipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgZnVuY3Rpb24sIGlkZW50aWZpZWQgYXMgYSBgc3RhdGljIG5vaW5saW5lIHZvaWRgLCBpcyBhIHZpYWJsZSBjYW5kaWRhdGUgZm9yIFN5emthbGxlciBmdXp6aW5nLiBUaGUgYHN0YXRpYyBub2lubGluZWAgYXR0cmlidXRlcyBpbW1lZGlhdGVseSBjYXRjaCBteSBleWU7IHRoZXkgaGludCBhdCBwb3RlbnRpYWwgaXNvbGF0aW9uLCBhbmQgdGhlIGFic2VuY2Ugb2YgaW5saW5pbmcgY2FuIGJlIHBhcnRpY3VsYXJseSBiZW5lZmljaWFsIGZvciBmdXp6aW5nIGFzIGl0IHNpbXBsaWZpZXMgY29udHJvbCBmbG93IGFuYWx5c2lzLiBUaGUgZmFjdCB0aGF0IFN5emthbGxlciBpcyBiZWluZyBjb25zaWRlcmVkIHN1Z2dlc3RzIGl0J3MgbGlrZWx5IGEgcmVsYXRpdmVseSBzaW1wbGUgZnVuY3Rpb24gd2l0aCBkaXJlY3QgZXh0ZXJuYWwgaW5wdXQuXG5cbk15IG5leHQgc3RlcCwgYW5kIGZyYW5rbHksIG15ICppbW1lZGlhdGUqIHRob3VnaHQsIGlzIHRvIGNoZWNrIHRoZSBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AuIFRoaXMgaXMgc3RhbmRhcmQgb3BlcmF0aW5nIHByb2NlZHVyZSwgZXNwZWNpYWxseSBpbiBtZW1vcnkgbWFuYWdlbWVudCBjb250ZXh0cy4gR2l2ZW4gdGhlIFwicG9zdC1hbGxvY1wiIGRlc2lnbmF0aW9uLCBpdCdzIGxpa2VseSBhIGNhbGxiYWNrIGludm9rZWQgYWZ0ZXIgYSBzbGFiIGFsbG9jYXRpb24gaGFzIG9jY3VycmVkLiBNeSBtZW50YWwgZ2VhcnMgYXJlIGFscmVhZHkgdHVybmluZyDigJMgd2hhdCBpbnB1dHMgZG9lcyB0aGlzIGhvb2sgcmVjZWl2ZT8gV2hhdCBpcyBpdCAqc3VwcG9zZWQqIHRvIGRvIHdpdGggdGhlIG5ld2x5IGFsbG9jYXRlZCBtZW1vcnk/IElzIHRoZXJlIGEgc3VidGxlIHJhY2UgY29uZGl0aW9uIGluIHRoaXMgY2FsbGJhY2ssIG9yIGEgcG9zc2liaWxpdHkgb2YgbWVtb3J5IGNvcnJ1cHRpb24gZHVlIHRvIGluY29ycmVjdCBpbml0aWFsaXphdGlvbiwgb3IgdGhlIGxhY2sgb2YgaXQsIG9yIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8/IFRoZXNlIGFyZSB0aGUgcHJpbWFyeSBxdWVzdGlvbnMgSSBoYXZlIGJhc2VkIG9uIGp1c3QgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIGFuZCB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50LiBUaGlzIGlzIHdoZXJlIEknbGwgYmVnaW4gbXkgZGVlcGVyIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjA1OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIzOjA2LjExOTU5MDk4WiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQxMDA1OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTM1Mjk9c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2Z1bGxfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTM3LVxcbm1tL21lbWNvbnRyb2wuYzozNTM4OmJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxubW0vbWVtY29udHJvbC5jLTM1MzktXFx0XFx0XFx0XFx0ICBnZnBfdCBmbGFncywgdW5zaWduZWQgaW50IHNsYWJfYWxsb2NfZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIzOjA2LjI5MzcwMTYyWiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzg3MzE3NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgRXBoZW1lcmFsOiBBIER5bmFtaWMgTWVtb3J5IExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBzaXR1YXRpb24gaXNuJ3Qgc3RyYWlnaHRmb3J3YXJkLiBJdCdzICpub24tc3RhdGljKiwgd2hpY2ggaW1tZWRpYXRlbHkgZGVtYW5kcyBhIG1vcmUgbnVhbmNlZCBhcHByb2FjaC4gV2UgY2FuJ3QgcmVseSBvbiBhc3N1bXB0aW9ucyBvZiBzdGFiaWxpdHkgaGVyZTsgd2UgbmVlZCB0byBhY2NvdW50IGZvciB2b2xhdGlsaXR5LiBJdCdzIGdvdCB0aGUgd2hpZmYgb2YgYSByYWNlIGNvbmRpdGlvbiwgb3IgcGVyaGFwcyBzb21ldGhpbmcgbW9yZSBkZWVwbHkgcm9vdGVkIGluIGEgZHluYW1pYyBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBjeWNsZS5cblxuTXkgaW5pdGlhbCBodW5jaCBpcyBzb21ldGhpbmcgc2xhYi1yZWxhdGVkIGlzIGNhdXNpbmcgdGhpcy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AuIFRoYXQgZnVuY3Rpb24gb2Z0ZW4gZ2l2ZXMgZ29vZCB2aXNpYmlsaXR5IGludG8gdGhlIGxpZmVjeWNsZSBvZiBzbGFiIGFsbG9jYXRpb25zLCBzcGVjaWZpY2FsbHkgZnJvbSBhIG1lbW9yeSBjb250cm9sIGdyb3VwIHBlcnNwZWN0aXZlLiBJdCBpcyB0aGUgbG9naWNhbCBwb2ludCB0byBpbnZlc3RpZ2F0ZSB0aGUgb3JpZ2luIG9mIHRoZSBvYnNlcnZlZCBub24tc3RhdGljIGJlaGF2aW9ycy4gSSBjYW4gdXNlIHRoaXMgYXMgYSBzdGFydGluZyBwb2ludCB0byBzZWUgd2hhdCB0aGUgcHJvYmxlbSBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1NDgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMzowOS42MzI0MzkwMTRaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTgyMTY1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21lbWNnX3NsYWJfZnJlZV9ob29rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MzUzOD1ib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM2MzItXFxubW0vbWVtY29udHJvbC5jOjM2MzM6dm9pZCBfX21lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG5tbS9tZW1jb250cm9sLmMtMzYzNC1cXHRcXHRcXHQgICAgdm9pZCAqKnAsIGludCBvYmplY3RzLCB1bnNpZ25lZCBsb25nIG9ial9leHRzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMzowOS44NTgyNzcxOTNaIiwiU2VxIjo2OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwODE4MDMzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0IHVuZGVyc3RhbmRpbmc6XG5cbioqQW5hbHl6aW5nIE5vbi1TdGF0aWMgQmVoYXZpb3IqKlxuXG5BbHJpZ2h0LCBJJ20gb2JzZXJ2aW5nIHNvbWV0aGluZyB0aGF0IGlzbid0IGJlaGF2aW5nIHN0YXRpY2FsbHkuIFRoYXQncyB0aGUga2V5IHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZHluYW1pY2FsbHkgaW5mbHVlbmNpbmcgdGhlIHN5c3RlbS4gR2l2ZW4gdGhhdCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBsaWtlbHkgYXJlYSBvZiBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudCwgYXMgdGhlIG5vbi1zdGF0aWMgbmF0dXJlIGhpbnRzIGF0IHNvbWV0aGluZyB0aGF0IGNoYW5nZXMgb3ZlciB0aW1lLiBMZXQncyBzZWUuLi4gYSBnb29kIHN0YXJ0aW5nIHBvaW50IHdvdWxkIGJlIHRvIGluc3BlY3QgaG93IHRoZSBzeXN0ZW0gaXMgY3JlYXRpbmcgdGhlc2UgbWVtb3J5IGNhY2hlcy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSBpbnN0cnVtZW50YWwgaW4gaG93IGR5bmFtaWMgbWVtb3J5IGlzIGJlaW5nIGhhbmRsZWQuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHdoYXQncyBnb2luZyBvbiBkeW5hbWljYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI5MzMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMzoxMy4xNjY0NjI1M1oiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwNjg5MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fa21lbV9jYWNoZV9jcmVhdGVfYXJnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbGFiX2NvbW1vbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsYWJfY29tbW9uLmM9MjY3PV9fa21lbV9jYWNoZV9hbGlhcyhjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgc2l6ZSwgc2xhYl9mbGFnc190IGZsYWdzLFxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0yOTEtLyoqXFxubW0vc2xhYl9jb21tb24uYzoyOTI6ICogX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzIC0gQ3JlYXRlIGEga21lbSBjYWNoZS5cXG5tbS9zbGFiX2NvbW1vbi5jLTI5My0gKiBAbmFtZTogQSBzdHJpbmcgd2hpY2ggaXMgdXNlZCBpbiAvcHJvYy9zbGFiaW5mbyB0byBpZGVudGlmeSB0aGlzIGNhY2hlLlxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0zMTctICovXFxubW0vc2xhYl9jb21tb24uYzozMTg6c3RydWN0IGttZW1fY2FjaGUgKl9fa21lbV9jYWNoZV9jcmVhdGVfYXJncyhjb25zdCBjaGFyICpuYW1lLFxcbm1tL3NsYWJfY29tbW9uLmMtMzE5LVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgb2JqZWN0X3NpemUsXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTQwOC19XFxubW0vc2xhYl9jb21tb24uYzo0MDk6RVhQT1JUX1NZTUJPTChfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MpO1xcbm1tL3NsYWJfY29tbW9uLmMtNDEwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMzoxMy40MTcxNjE5NDlaIiwiU2VxIjo3MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc0NjczOTEyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gSW5zdHJ1bWVudGF0aW9uKipcblxuT2theSwgc28gdGhpcyBpcyBhYm91dCBleHBvcnRlZCBzeW1ib2xzIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSBzbGFiIGFsbG9jYXRvcnMgYW5kIHJlbGF0ZWQgaG9va3MuIEkgc2VlIGEgbGlzdCBvZiBgRm9jdXNTeW1ib2xzYCB0aGF0IGFyZSBrZXk6IGBhbGxvY19zbGFiX29ial9leHRzYCwgdGhlIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl8qYCBob29rcyBmb3IgYm90aCBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nLCBhbmQgdGhlbiB0aG9zZSBtZW1jZyBhbmQga2ZlbmNlIGhvb2tzLiBUaGVuLCBJIHNlZSBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYCBsaXN0ZWQgYXMgd2VsbCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgY2FjaGVzIGFyZSBjb25maWd1cmVkLlxuXG5Ob3csIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIHdoYXQgcmVhbGx5IHBpcXVlIG15IGludGVyZXN0LiBgTUVNX0FMTE9DX1BST0ZJTElOR2AsIGBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVGAsIGFuZCBgTUVNQ0dgIOKAkyB0aG9zZSBhcmUgdGhlIGtleSBrbm9icyBoZXJlLiBUaGUgZGVmYXVsdCBlbmFibGUgZmxhZywgYE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUYCwgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgSSB3YW50IHRvIGNoZWNrLiBFbmFibGluZyBhIHByb2ZpbGluZyBmZWF0dXJlIGJ5IGRlZmF1bHQgaXMgZmFudGFzdGljIGZvciBmdXp6aW5nIGFuZCBnZW5lcmFsIGFuYWx5c2lzLiBJdCBzaW1wbGlmaWVzIHRlc3RpbmcsIHNvIGl0IHNlZW1zIGxpa2UgYSB1c2VmdWwgZmxhZyB0byBoYXZlLlxuXG5BaCwgYnV0IGhvbGQgb24uIFRoZSBgTUVNX0FMTE9DX1BST0ZJTElOR2AgY29uZmlnIGhhcyBhIGRlcGVuZGVuY3kgb24gYENPREVfVEFHR0lOR2AuIEknbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGF0IGZ1cnRoZXIuIFRoYXQncyBjcnVjaWFsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdGFncyBhcmUgYmVpbmcgdXNlZCwgYW5kIGlmIGNvZGUgdGFnZ2luZyBpcyBkZXBlbmRlbnQgb24gc29tZXRoaW5nIGVsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDAwLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIzOjE4LjE2MzkwNzc3NloiLCJTZXEiOjcyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI1MTczNjUyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ09ERV9UQUdHSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0xMDI5PWNvbmZpZyBERUJVR19TVEFDS09WRVJGTE9XXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDQ2LVxcbmxpYi9LY29uZmlnLmRlYnVnOjEwNDc6Y29uZmlnIENPREVfVEFHR0lOR1xcbmxpYi9LY29uZmlnLmRlYnVnLTEwNDgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMzoyMy40MTU2NTQxOFoiLCJTZXEiOjczLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTIyNTUzMTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOlxuXG4qKlJlZmFjdG9yaW5nIHRoZSBNZW1vcnkgUHJvZmlsaW5nIGFuZCBLRkVOQ0UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGVzZSBtZW1vcnkgZmVhdHVyZXMgYXJlIGNvbmZpZ3VyZWQuIEl0IGxvb2tzIGxpa2UgdGhlIGBDT0RFX1RBR0dJTkdgIG9wdGlvbiBpcyBpbXBsaWNpdGx5IHRpZWQgdG8gYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzOyBpZiB3ZSBlbmFibGUgYE1FTV9BTExPQ19QUk9GSUxJTkdgLCBgQ09ERV9UQUdHSU5HYCBpcyB0YWtlbiBjYXJlIG9mLiBTbywgcmVhbGx5LCBhbGwgd2UgbmVlZCB0byBmb2N1cyBvbiBhcmUgYE1FTV9BTExPQ19QUk9GSUxJTkdgIGFuZCBgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRgLiBBbmQgb2YgY291cnNlLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIGBNRU1DR2AsIHdoaWNoIGlzIGEgZGlmZmVyZW50IGNvbmNlcm4sIGJ1dCByZWxldmFudCBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IGBLRkVOQ0VgLiBUaGlzIHBhdGNoIHRvdWNoZXMgYG1tL2tmZW5jZS9jb3JlLmNgLCB3aGljaCBpcyB0aGUga2V5IGluZGljYXRvci4gU28sIG5hdHVyYWxseSwgd2Ugc2hvdWxkIGVuYWJsZSBgS0ZFTkNFYCB0byBrZWVwIGV2ZXJ5dGhpbmcgY29uc2lzdGVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM5ODcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMzoyNy45MzgyMTcwMThaIiwiU2VxIjo3NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNTkzMTU3ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtGRU5DRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcua2ZlbmNlPTM9Y29uZmlnIEhBVkVfQVJDSF9LRkVOQ0VcXG4tLVxcbmxpYi9LY29uZmlnLmtmZW5jZS01LVxcbmxpYi9LY29uZmlnLmtmZW5jZTo2Om1lbnVjb25maWcgS0ZFTkNFXFxubGliL0tjb25maWcua2ZlbmNlLTctXFx0Ym9vbCBcXFwiS0ZFTkNFOiBsb3ctb3ZlcmhlYWQgc2FtcGxpbmctYmFzZWQgbWVtb3J5IHNhZmV0eSBlcnJvciBkZXRlY3RvclxcXCJcXG4tLVxcbmxpYi9LY29uZmlnLmtmZW5jZT0yNj1pZiBLRkVOQ0VcXG5saWIvS2NvbmZpZy5rZmVuY2UtMjctXFxubGliL0tjb25maWcua2ZlbmNlOjI4OmNvbmZpZyBLRkVOQ0VfU0FNUExFX0lOVEVSVkFMXFxubGliL0tjb25maWcua2ZlbmNlLTI5LVxcdGludCBcXFwiRGVmYXVsdCBzYW1wbGUgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzXFxcIlxcbi0tXFxubGliL0tjb25maWcua2ZlbmNlLTM4LVxcbmxpYi9LY29uZmlnLmtmZW5jZTozOTpjb25maWcgS0ZFTkNFX05VTV9PQkpFQ1RTXFxubGliL0tjb25maWcua2ZlbmNlLTQwLVxcdGludCBcXFwiTnVtYmVyIG9mIGd1YXJkZWQgb2JqZWN0cyBhdmFpbGFibGVcXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5rZmVuY2UtNDctXFxubGliL0tjb25maWcua2ZlbmNlOjQ4OmNvbmZpZyBLRkVOQ0VfREVGRVJSQUJMRVxcbmxpYi9LY29uZmlnLmtmZW5jZS00OS1cXHRib29sIFxcXCJVc2UgYSBkZWZlcnJhYmxlIHRpbWVyIHRvIHRyaWdnZXIgYWxsb2NhdGlvbnNcXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5rZmVuY2UtNTktXFxubGliL0tjb25maWcua2ZlbmNlOjYwOmNvbmZpZyBLRkVOQ0VfU1RBVElDX0tFWVNcXG5saWIvS2NvbmZpZy5rZmVuY2UtNjEtXFx0Ym9vbCBcXFwiVXNlIHN0YXRpYyBrZXlzIHRvIHNldCB1cCBhbGxvY2F0aW9uc1xcXCIgaWYgRVhQRVJUXFxuLS1cXG5saWIvS2NvbmZpZy5rZmVuY2UtNzQtXFxubGliL0tjb25maWcua2ZlbmNlOjc1OmNvbmZpZyBLRkVOQ0VfU1RSRVNTX1RFU1RfRkFVTFRTXFxubGliL0tjb25maWcua2ZlbmNlLTc2LVxcdGludCBcXFwiU3RyZXNzIHRlc3Rpbmcgb2YgZmF1bHQgaGFuZGxpbmcgYW5kIGVycm9yIHJlcG9ydGluZ1xcXCIgaWYgRVhQRVJUXFxuLS1cXG5saWIvS2NvbmZpZy5rZmVuY2UtODUtXFxubGliL0tjb25maWcua2ZlbmNlOjg2OmNvbmZpZyBLRkVOQ0VfS1VOSVRfVEVTVFxcbmxpYi9LY29uZmlnLmtmZW5jZS04Ny1cXHR0cmlzdGF0ZSBcXFwiS0ZFTkNFIGludGVncmF0aW9uIHRlc3Qgc3VpdGVcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjM6MzMuMTk3NTQzOTY5WiIsIlNlcSI6NzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3NzQ5OTAzNTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiByZXZpZXdpbmcgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIG9wdGltaXppbmcgaG93IGBzdHJ1Y3Qgc2xhYm9ial9leHRgIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBzbGFiIGFsbG9jYXRvciwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgYW5kIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZy4gTGV0J3MgYnJlYWsgZG93biBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbkZpcnN0bHksIHRoaXMgcGF0Y2ggZGVmaW5pdGVseSBzZWVtcyBmdW5jdGlvbmFsLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBjcml0aWNhbCBmdW5jdGlvbiBgX19rZmVuY2VfZnJlZWAgaGFzIGJlZW4gbW9kaWZpZWQsIHdoaWNoIGlzIGEgZ29vZCBpbmRpY2F0b3IgdGhhdCB0aGUgY29yZSBsb2dpYyBpcyBiZWluZyB0b3VjaGVkLiBJJ3ZlIGFsc28gY2hlY2tlZCBga2ZlbmNlX2luaXRfcG9vbGAgYW5kIGB0ZXN0X2FsbG9jYCB0byBjb25maXJtIHRoZSBwYXRjaCdzIGludGVncmF0aW9uIHdpdGhpbiB0aGUgZXhpc3RpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoZXJlZm9yZSwgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgdGFsayBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgd2FudCB0byBob25lIGluIG9uIGFyZWFzIG1vc3QgZGlyZWN0bHkgaW1wYWN0ZWQgYnkgdGhlc2UgY2hhbmdlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBleGNsdWRlIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcm92aWRlIGEgbW9yZSBmb2N1c2VkIGZ1enplciBleHBlcmllbmNlLlxuXG5Jbml0aWFsbHksIEkgbG9va2VkIGF0IGEgY29tcHJlaGVuc2l2ZSBsaXN0LiBJIHF1aWNrbHkgcmVqZWN0ZWQgc2V2ZXJhbCBiZWNhdXNlIHRoZXkgd2VyZSBgc3RhdGljYCBvciBgc3RhdGljIGlubGluZWAuIEknbSBnb2luZyB0byBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYCwgYW5kIGBfX2tmZW5jZV9mcmVlYC4gVGhlc2UgYXJlIGdvb2Qgc3RhcnQuXG5cbkkgd2FudCB0byBpbmNsdWRlIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCBhbmQgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgIGJlY2F1c2UgdGhleSByZXByZXNlbnQgdGhlIGNvcmUgbG9naWMgY2hhbmdlcyBmb3IgbWVtY2csIGV2ZW4gaWYgdGhleSBhcmUgc29tZXdoYXQgaG90LiBBbHNvLCBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AgaXMgb25seSBjYWxsZWQgZm9yIGEgc3Vic2V0IG9mIGFsbG9jYXRpb25zLCB3aGljaCBpcyBhY2NlcHRhYmxlLlxuXG5TbyB0aGUgZmluYWwgbGlzdCBvZiBGb2N1c1N5bWJvbHMgd2lsbCBiZTpcblxuKiAgIGBhbGxvY19zbGFiX29ial9leHRzYFxuKiAgIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYFxuKiAgIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYFxuKiAgIGBfX2tmZW5jZV9mcmVlYFxuKiAgIGBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NgXG5cblRoaXMgc2V0IGNvdmVycyBtb2RpZmljYXRpb25zIGluIG9iamVjdCBleHRlbnNpb24gdmVjdG9yIGFsbG9jYXRpb24sIGBrZmVuY2VgIGZyZWUgaGFuZGxpbmcsIGFuZCBtZW1jZyBhY2NvdW50aW5nLCB3aGljaCBhcmUgYWxsIGRpcmVjdGx5IHJlbGV2YW50IHRvIHRoZSBwYXRjaCdzIG9wdGltaXphdGlvbnMuIFRoaXMgZmVlbHMgbGlrZSBhIGJhbGFuY2VkIGFuZCBlZmZlY3RpdmUgc3RyYXRlZ3kgZm9yIHVuY292ZXJpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMuIFRoZSBlbmFibGluZyBjb25maWd1cmF0aW9ucyBpbmNsdWRlIE1FTV9BTExPQ19QUk9GSUxJTkcsIE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxULCBNRU1DRywgYW5kIEtGRU5DRS4gVGhlc2Ugd2lsbCBlbnN1cmUgdGhhdCByZWxldmFudCBjb2RlIHBhdGhzIGFyZSBhY3RpdmF0ZWQgZHVyaW5nIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NzU0LCJPdXRwdXRUb2tlbnMiOjE5MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjM6NTAuOTQ3NDUzMDM3WiIsIlNlcSI6NzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5NTUyOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCIsXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIktGRU5DRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3NsYWJfb2JqX2V4dHNcIixcbiAgICBcIl9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tcIixcbiAgICBcIl9fbWVtY2dfc2xhYl9mcmVlX2hvb2tcIixcbiAgICBcIl9fa2ZlbmNlX2ZyZWVcIixcbiAgICBcIl9fa21lbV9jYWNoZV9jcmVhdGVfYXJnc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgbGF5b3V0IGFuZCBoYW5kbGluZyBvZiBgc3RydWN0IHNsYWJvYmpfZXh0YCBpbiB0aGUgc2xhYiBhbGxvY2F0b3IsIHdoaWNoIGlzIHVzZWQgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBhbmQgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nLiBJdCBvcHRpbWl6ZXMgdGhlIHN0b3JhZ2Ugb2YgYG9iamNnYCBhbmQgYGNvZGV0YWdfcmVmYCBwb2ludGVycy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBzbGFiIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgcGF0aHMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR1wiLFxuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJLRkVOQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zbGFiX29ial9leHRzXCIsXG4gICAgXCJfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rXCIsXG4gICAgXCJfX21lbWNnX3NsYWJfZnJlZV9ob29rXCIsXG4gICAgXCJfX2tmZW5jZV9mcmVlXCIsXG4gICAgXCJfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGxheW91dCBhbmQgaGFuZGxpbmcgb2YgYHN0cnVjdCBzbGFib2JqX2V4dGAgaW4gdGhlIHNsYWIgYWxsb2NhdG9yLCB3aGljaCBpcyB1c2VkIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgYW5kIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZy4gSXQgb3B0aW1pemVzIHRoZSBzdG9yYWdlIG9mIGBvYmpjZ2AgYW5kIGBjb2RldGFnX3JlZmAgcG9pbnRlcnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgc2xhYiBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIHBhdGhzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowtp68z[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-20 19:55:56 +0000 UTC FinishedAt: 2026-07-20 20:23:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "d9e6a7623938968e3752b67e37eaff097e559a54", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING", "MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT", "MEMCG", "KFENCE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "d9e6a7623938968e3752b67e37eaff097e559a54", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING", "MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT", "MEMCG", "KFENCE" ], "series_id": "0fd7084c-401f-4f77-b4a6-156a8024ba85" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_slab_obj_exts", "__memcg_slab_post_alloc_hook", "__memcg_slab_free_hook", "__kfence_free", "__kmem_cache_create_args" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAgICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFQmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7S0ZFTkNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2Nfc2xhYl9vYmpfZXh0cyYjMzQ7LAogICAgJiMzNDtfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rJiMzNDssCiAgICAmIzM0O19fbWVtY2dfc2xhYl9mcmVlX2hvb2smIzM0OywKICAgICYjMzQ7X19rZmVuY2VfZnJlZSYjMzQ7LAogICAgJiMzNDtfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBsYXlvdXQgYW5kIGhhbmRsaW5nIG9mIGBzdHJ1Y3Qgc2xhYm9ial9leHRgIGluIHRoZSBzbGFiIGFsbG9jYXRvciwgd2hpY2ggaXMgdXNlZCBmb3IgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGFuZCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcuIEl0IG9wdGltaXplcyB0aGUgc3RvcmFnZSBvZiBgb2JqY2dgIGFuZCBgY29kZXRhZ19yZWZgIHBvaW50ZXJzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIHNsYWIgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBwYXRocywgbWFraW5nIHRoZW0gaGlnaGx5IHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDRhMTNiZmNhMjQyN2RlZWE0MWI2MGVhYWJiOGY4ZWM5ZTY2ODg1M2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAyMDoyMDoyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0XG5pbmRleCA1Mzg5ZDI0MTE3NmE4YS4uZDAyZWI1NGVlOGYyYzYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RcbkBAIC0xMTIsMyAmIzQzOzExMiwxMCBAQCBUbyBkbyBzbzpcbiBcbiAtIFRoZW4sIHVzZSB0aGUgZm9sbG93aW5nIGZvcm0gZm9yIHlvdXIgYWxsb2NhdGlvbnM6XG4gICBhbGxvY19ob29rc190YWcoaHQtXHUwMDNleW91cl9zYXZlZF90YWcsIGttYWxsb2Nfbm9wcm9mKC4uLikpXG4mIzQzO1xuJiM0MztOb3Rlc1xuJiM0Mzs9PT09PVxuJiM0MztcbiYjNDM7LSBXaGVuIGEgc2xhYiBvYmplY3QgaXMgYWxsb2NhdGVkIGZyb20gS0ZFTkNFLCBpdHMgYWNjb3VudGluZyBpcyBza2lwcGVkLlxuJiM0MzsgIEtGRU5DRSBhbGxvY2F0aW9ucyBhcmUgcmFyZSBhbmQgbGltaXRlZCB0byBhIHNtYWxsIG51bWJlciwgc28gdGhpcyBvbWlzc2lvblxuJiM0MzsgIGlzIG5lZ2xpZ2libGUuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggZTFmNDZhMDAxNmZjZmQuLjkzODY5Y2MzNWMyNWJjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMTQ0MCwxOSAmIzQzOzE0NDAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9mbHVzaF93b3JrcXVldWUodm9pZCkgeyB9XG4gc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovXG4gXG4tLypcbi0gKiBFeHRlbmRlZCBpbmZvcm1hdGlvbiBmb3Igc2xhYiBvYmplY3RzIHN0b3JlZCBhcyBhbiBhcnJheSBpbiBwYWdlLVx1MDAzZW1lbWNnX2RhdGFcbi0gKiBpZiBNRU1DR19EQVRBX09CSkVYVFMgaXMgc2V0LlxuLSAqL1xuLXN0cnVjdCBzbGFib2JqX2V4dCB7XG4tI2lmZGVmIENPTkZJR19NRU1DR1xuLVx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuLSNlbmRpZlxuLSNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xuLVx0dW5pb24gY29kZXRhZ19yZWYgcmVmO1xuLSNlbmRpZlxuLX0gX19hbGlnbmVkKDgpO1xuLVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2xhYi5oIGIvaW5jbHVkZS9saW51eC9zbGFiLmhcbmluZGV4IDNhMTRkZjUwNzY2YWIwLi5mOTEzMjkwMmM1YTZkZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2xhYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NsYWIuaFxuQEAgLTQ1LDYgJiM0Mzs0NSw3IEBAIGVudW0gX3NsYWJfZmxhZ19iaXRzIHtcbiAjZW5kaWZcbiAjaWZkZWYgQ09ORklHX01FTUNHXG4gXHRfU0xBQl9BQ0NPVU5ULFxuJiM0MztcdF9TTEFCX01BWV9BQ0NPVU5ULFxuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQ1xuIFx0X1NMQUJfS0FTQU4sXG5AQCAtMjA0LDggJiM0MzsyMDUsMTAgQEAgZW51bSBfc2xhYl9mbGFnX2JpdHMge1xuICAqL1xuICNpZmRlZiBDT05GSUdfTUVNQ0dcbiAjIGRlZmluZSBTTEFCX0FDQ09VTlRcdFx0X19TTEFCX0ZMQUdfQklUKF9TTEFCX0FDQ09VTlQpXG4mIzQzOyMgZGVmaW5lIFNMQUJfTUFZX0FDQ09VTlRcdF9fU0xBQl9GTEFHX0JJVChfU0xBQl9NQVlfQUNDT1VOVClcbiAjZWxzZVxuICMgZGVmaW5lIFNMQUJfQUNDT1VOVFx0XHRfX1NMQUJfRkxBR19VTlVTRURcbiYjNDM7IyBkZWZpbmUgU0xBQl9NQVlfQUNDT1VOVFx0X19TTEFCX0ZMQUdfVU5VU0VEXG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19LQVNBTl9HRU5FUklDXG5kaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2NvcmUuYyBiL21tL2tmZW5jZS9jb3JlLmNcbmluZGV4IDY1NzdiZDc2OTU0ZWI0Li44OTdlY2YyNTk0ZmI2NCAxMDA2NDRcbi0tLSBhL21tL2tmZW5jZS9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2tmZW5jZS9jb3JlLmNcbkBAIC02NDAsNiAmIzQzOzY0MCw5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGtmZW5jZV9pbml0X3Bvb2wodm9pZClcbiBcdFx0c3RydWN0IHNsYWIgKnNsYWIgPSBwYWdlX3NsYWIocGFnZSk7XG4gXHRcdHNsYWItXHUwMDNlb2JqX2V4dHMgPSAodW5zaWduZWQgbG9uZylcdTAwMjZrZmVuY2VfbWV0YWRhdGFfaW5pdFtpIC8gMiAtIDFdLm9ial9leHRzIHxcbiBcdFx0XHRcdCBNRU1DR19EQVRBX09CSkVYVFM7XG4mIzQzOyNpZmRlZiBDT05GSUdfNjRCSVRcbiYjNDM7XHRcdHNsYWItXHUwMDNlb2JqX2V4dHNfbmVlZHNfb2JqY2cgPSAxO1xuJiM0MzsjZW5kaWZcbiAjZW5kaWZcbiBcdH1cbiBcbkBAIC0xMjQ5LDcgJiM0MzsxMjUyLDcgQEAgdm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXG4gXHRzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhICptZXRhID0gYWRkcl90b19tZXRhZGF0YSgodW5zaWduZWQgbG9uZylhZGRyKTtcbiBcbiAjaWZkZWYgQ09ORklHX01FTUNHXG4tXHRLRkVOQ0VfV0FSTl9PTihtZXRhLVx1MDAzZW9ial9leHRzLm9iamNnKTtcbiYjNDM7XHRLRkVOQ0VfV0FSTl9PTihzbGFiX29ial9leHRfb2JqY2coXHUwMDI2bWV0YS1cdTAwM2VvYmpfZXh0cykpO1xuICNlbmRpZlxuIFx0LypcbiBcdCAqIElmIHRoZSBvYmplY3RzIG9mIHRoZSBjYWNoZSBhcmUgU0xBQl9UWVBFU0FGRV9CWV9SQ1UsIGRlZmVyIGZyZWVpbmdcbmRpZmYgLS1naXQgYS9tbS9rZmVuY2Uva2ZlbmNlX3Rlc3QuYyBiL21tL2tmZW5jZS9rZmVuY2VfdGVzdC5jXG5pbmRleCBkZTJkMGY3ZDYyYjE1ZS4uOTg2N2MwM2VmMGFlM2QgMTAwNjQ0XG4tLS0gYS9tbS9rZmVuY2Uva2ZlbmNlX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0va2ZlbmNlL2tmZW5jZV90ZXN0LmNcbkBAIC0yOTUsNyAmIzQzOzI5NSw3IEBAIHN0YXRpYyB2b2lkICp0ZXN0X2FsbG9jKHN0cnVjdCBrdW5pdCAqdGVzdCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcCwgZW51bSBhbGxvY2F0XG4gXHRcdFx0ICogbWVtY2cgYWNjb3VudGluZyB3b3JrcyBjb3JyZWN0bHkuXG4gXHRcdFx0ICovXG4gXHRcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIG9ial90b19pbmRleChzLCBzbGFiLCBhbGxvYyksIDBVKTtcbi1cdFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgb2Jqc19wZXJfc2xhYihzLCBzbGFiKSwgMSk7XG4mIzQzO1x0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAoKHVuc2lnbmVkIGludClzbGFiLVx1MDAzZW9iamVjdHMpLCAxKTtcbiBcbiBcdFx0XHRpZiAocG9saWN5ID09IEFMTE9DQVRFX0FOWSlcbiBcdFx0XHRcdHJldHVybiBhbGxvYztcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDZkYzQ4ODhhOTBmM2ZkLi5hYWNlODVmYjk5Zjk3MyAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMjg2NSwxOCAmIzQzOzI4NjUsMTkgQEAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqcClcbiBcdCAqL1xuIFx0dW5zaWduZWQgbG9uZyBvYmpfZXh0cztcbiBcdHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dDtcbi1cdHVuc2lnbmVkIGludCBvZmY7XG4mIzQzO1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFxuIFx0b2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpO1xuIFx0aWYgKCFvYmpfZXh0cylcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4tXHRvZmYgPSBvYmpfdG9faW5kZXgoc2xhYi1cdTAwM2VzbGFiX2NhY2hlLCBzbGFiLCBwKTtcbi1cdG9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9mZik7XG4tXHRpZiAob2JqX2V4dC1cdTAwM2VvYmpjZykge1xuLVx0XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cgPSBvYmpfZXh0LVx1MDAzZW9iamNnO1xuJiM0MztcdGlmICghc2xhYl9uZWVkc19vYmpjZyhzbGFiKSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuIFxuJiM0MztcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbiYjNDM7XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWItXHUwMDNlc2xhYl9jYWNoZSwgc2xhYiwgb2JqX2V4dHMsIHApO1xuJiM0MztcdG9iamNnID0gc2xhYl9vYmpfZXh0X29iamNnKG9ial9leHQpO1xuJiM0MztcdGlmIChvYmpjZykge1xuIFx0XHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4gXHRcdHJldHVybiBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcbiBcdH1cbkBAIC0zNTQxLDcgJiM0MzszNTQyLDYgQEAgYm9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbiBcdHNpemVfdCBvYmpfc2l6ZSA9IG9ial9mdWxsX3NpemUocyk7XG4gXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4gXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcbi1cdHVuc2lnbmVkIGxvbmcgb2ZmO1xuIFx0c2l6ZV90IGk7XG4gXG4gXHQvKlxuQEAgLTM1ODMsNiAmIzQzOzM1ODMsOSBAQCBib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxuIFxuIFx0XHRzbGFiID0gdmlydF90b19zbGFiKHBbaV0pO1xuIFxuJiM0MztcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX1ZNKSBcdTAwMjZcdTAwMjYgV0FSTl9PTl9PTkNFKCFzbGFiX25lZWRzX29iamNnKHNsYWIpKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuIFx0XHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBzbGFiX2FsbG9jX2ZsYWdzKSkge1xuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTM2MTYsMTAgJiM0MzszNjE5LDExIEBAIGJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG4gXG4gXHRcdG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcbiBcdFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuLVx0XHRvZmYgPSBvYmpfdG9faW5kZXgocywgc2xhYiwgcFtpXSk7XG4tXHRcdG9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9mZik7XG4mIzQzO1x0XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwW2ldKTtcbiYjNDM7XG4gXHRcdG9ial9jZ3JvdXBfZ2V0KG9iamNnKTtcbi1cdFx0b2JqX2V4dC1cdTAwM2VvYmpjZyA9IG9iamNnO1xuJiM0MztcdFx0c2xhYl9vYmpfZXh0X3NldF9vYmpjZyhvYmpfZXh0LCBvYmpjZyk7XG4mIzQzO1xuIFx0XHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4gXHR9XG4gXG5AQCAtMzYzNSwxNSAmIzQzOzM2MzksMTMgQEAgdm9pZCBfX21lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbiBcdFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQ7XG4gXHRcdHN0cnVjdCBvYmpfc3RvY2tfcGNwICpzdG9jaztcbi1cdFx0dW5zaWduZWQgaW50IG9mZjtcbiBcbi1cdFx0b2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHBbaV0pO1xuLVx0XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpO1xuLVx0XHRvYmpjZyA9IG9ial9leHQtXHUwMDNlb2JqY2c7XG4mIzQzO1x0XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwW2ldKTtcbiYjNDM7XHRcdG9iamNnID0gc2xhYl9vYmpfZXh0X29iamNnKG9ial9leHQpO1xuIFx0XHRpZiAoIW9iamNnKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRvYmpfZXh0LVx1MDAzZW9iamNnID0gTlVMTDtcbiYjNDM7XHRcdHNsYWJfb2JqX2V4dF9zZXRfb2JqY2cob2JqX2V4dCwgTlVMTCk7XG4gXG4gXHRcdHN0b2NrID0gdHJ5bG9ja19zdG9jaygpO1xuIFx0XHRfX3JlZmlsbF9vYmpfc3RvY2sob2JqY2csIHN0b2NrLCBvYmpfc2l6ZSwgdHJ1ZSk7XG5kaWZmIC0tZ2l0IGEvbW0vc2xhYi5oIGIvbW0vc2xhYi5oXG5pbmRleCBmNWUzMzZiNmI2YjA0Yy4uMThjMmE4MDdmMDIzY2UgMTAwNjQ0XG4tLS0gYS9tbS9zbGFiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsYWIuaFxuQEAgLTgxLDEwICYjNDM7ODEsMTEgQEAgc3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIHtcbiAjaWZkZWYgQ09ORklHXzY0QklUXG4gXHRcdFx0XHRcdC8qXG4gXHRcdFx0XHRcdCAqIFNvbWUgb3B0aW1pemF0aW9ucyB1c2UgZnJlZSBiaXRzIGluICYjMzk7Y291bnRlcnMmIzM5OyBmaWVsZFxuLVx0XHRcdFx0XHQgKiB0byBzYXZlIG1lbW9yeS4gSW4gY2FzZSAtXHUwMDNlc3RyaWRlIGZpZWxkIGlzIG5vdCBhdmFpbGFibGUsXG4tXHRcdFx0XHRcdCAqIHN1Y2ggb3B0aW1pemF0aW9ucyBhcmUgZGlzYWJsZWQuXG4mIzQzO1x0XHRcdFx0XHQgKiB0byBzYXZlIG1lbW9yeSBvciBDUFUuIElmIHRoZXNlIGZyZWUgYml0cyBhcmUgbm90XG4mIzQzO1x0XHRcdFx0XHQgKiBhdmFpbGFibGUsIHN1Y2ggb3B0aW1pemF0aW9ucyBhcmUgZGlzYWJsZWQuXG4gXHRcdFx0XHRcdCAqL1xuLVx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgc3RyaWRlO1xuJiM0MztcdFx0XHRcdFx0dW5zaWduZWQgb2JqX2V4dHNfaW5fb2JqZWN0OjE7XG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBvYmpfZXh0c19uZWVkc19vYmpjZzoxO1xuICNlbmRpZlxuIFx0XHRcdFx0fTtcbiBcdFx0XHR9O1xuQEAgLTMzMCwxMiAmIzQzOzMzMSw2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial90b19pbmRleChjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsXG4gXHRyZXR1cm4gX19vYmpfdG9faW5kZXgoY2FjaGUsIHNsYWJfYWRkcmVzcyhzbGFiKSwgb2JqKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgb2Jqc19wZXJfc2xhYihjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsXG4tXHRcdFx0XHRjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi17XG4tXHRyZXR1cm4gc2xhYi1cdTAwM2VvYmplY3RzO1xuLX1cbi1cbiAvKlxuICAqIFN0YXRlIG9mIHRoZSBzbGFiIGFsbG9jYXRvci5cbiAgKlxuQEAgLTU1NSw2ICYjNDM7NTUwLDkzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX2ttYWxsb2Nfbm9fb2JqZXh0KHZvaWQpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBFeHRlbmRlZCBpbmZvcm1hdGlvbiBmb3Igc2xhYiBvYmplY3RzIHN0b3JlZCBhcyBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgaW5cbiYjNDM7ICogc2xhYi1cdTAwM2VvYmpfZXh0cyAoYWxpYXNpbmcgcGFnZS1cdTAwM2VtZW1jZ19kYXRhKSBpZiBNRU1DR19EQVRBX09CSkVYVFMgaXMgc2V0LlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHNsYWJvYmpfZXh0IHtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFsbCBlbGVtZW50cyBvZiB0aGUgdW5pb24gc2hvdWxkIGJlIHBvaW50ZXItc2l6ZWQgdG8gYXZvaWQgbWVtb3J5XG4mIzQzO1x0ICogd2FzdGVcbiYjNDM7XHQgKi9cbiYjNDM7XHR1bmlvbiB7XG4mIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0dcbiYjNDM7XHRcdHN0cnVjdCBvYmpfY2dyb3VwICpfb2JqY2c7XG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcbiYjNDM7XHRcdHVuaW9uIGNvZGV0YWdfcmVmIF9jdHJlZjtcbiYjNDM7I2VuZGlmXG4mIzQzO1x0fTtcbiYjNDM7fSBfX2FsaWduZWQoOCk7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcbiYjNDM7REVDTEFSRV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcbiYjNDM7XHRcdFx0IHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHN0YXRpY19icmFuY2hfbWF5YmUoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxULFxuJiM0MztcdFx0XHRcdCAgIFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xuJiM0Mzt9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWcodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0dcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGNhY2hlX25lZWRzX29iamNnKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAoY2FjaGUtXHUwMDNlZmxhZ3MgXHUwMDI2IFNMQUJfTUFZX0FDQ09VTlQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2xhYl9uZWVkc19vYmpjZyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHXzY0QklUXG4mIzQzO1x0cmV0dXJuIHNsYWItXHUwMDNlb2JqX2V4dHNfbmVlZHNfb2JqY2c7XG4mIzQzOyNlbHNlXG4mIzQzO1x0cmV0dXJuIGNhY2hlX25lZWRzX29iamNnKHNsYWItXHUwMDNlc2xhYl9jYWNoZSk7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBjYWNoZV9uZWVkc19vYmpjZyhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzbGFiX25lZWRzX29iamNnKHN0cnVjdCBzbGFiICpzbGFiKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBzaXplX3QgY2FjaGVfb2JqX2V4dF9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IHN6ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKGNhY2hlX25lZWRzX29iamNnKHMpKVxuJiM0MztcdFx0c3ogJiM0Mzs9IDE7XG4mIzQzO1xuJiM0MztcdGlmIChzbGFiX29ial9leHRfaGFzX2NvZGV0YWcoKSlcbiYjNDM7XHRcdHN6ICYjNDM7PSAxO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkgKiBzejtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9vYmpfZXh0X3NpemUoc3RydWN0IHNsYWIgKnNsYWIpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3Qgc3ogPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoc2xhYl9uZWVkc19vYmpjZyhzbGFiKSlcbiYjNDM7XHRcdHN6ICYjNDM7PSAxO1xuJiM0MztcbiYjNDM7XHRpZiAoc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKCkpXG4mIzQzO1x0XHRzeiAmIzQzOz0gMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc3o7XG4mIzQzO31cbiYjNDM7XG4gI2lmZGVmIENPTkZJR19TTEFCX09CSl9FWFRcbiBcbiAvKlxuQEAgLTU3Miw3ICYjNDM7NjU0LDcgQEAgc3RhdGljIGlubGluZSBib29sIG5lZWRfa21hbGxvY19ub19vYmpleHQodm9pZClcbiAgKiBvYmpfZXh0cyA9IHNsYWJfb2JqX2V4dHMoc2xhYik7XG4gICogaWYgKG9ial9leHRzKSB7XG4gICogICAgICAgICBnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4tICogICAgICAgICBvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvYmpfdG9faW5kZXgocywgc2xhYiwgb2JqKSk7XG4mIzQzOyAqICAgICAgICAgb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgb2JqKTtcbiAgKiAgICAgICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIG9ial9leHRcbiAgKiAgICAgICAgIHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbiAgKiB9XG5AQCAtNjEwLDQ4ICYjNDM7NjkyLDgyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfc2xhYl9vYmpfZXh0cyh1bnNpZ25lZCBsb25nIG9ial9leHRzKVxuIH1cbiBcbiAjaWZkZWYgQ09ORklHXzY0QklUXG4tc3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgaW50IHN0cmlkZSlcbi17XG4tXHRzbGFiLVx1MDAzZXN0cmlkZSA9IHN0cmlkZTtcbi19XG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2xhYl9nZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKVxuIHtcbi1cdHJldHVybiBzbGFiLVx1MDAzZXN0cmlkZTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5vdGUgd2UgY2Fubm90IHJlbHkgb24gdGhlIFNMQUJfT0JKX0VYVF9JTl9PQkogZmxhZyBoZXJlIGFuZCBuZWVkIHRvXG4mIzQzO1x0ICogY2hlY2sgdGhlIHBlci1zbGFiIGJpdC4gQSBjYWNoZSBjYW4gaGF2ZSBTTEFCX09CSl9FWFRfSU5fT0JKIHNldCwgYnV0XG4mIzQzO1x0ICogYWxsb2NhdGlvbnMgd2l0aGluX3NsYWJfbGVmdG92ZXIgYXJlIHByZWZlcnJlZC4gQW5kIHRob3NlIG1heSBiZVxuJiM0MztcdCAqIHBvc3NpYmxlIG9yIG5vdCBkZXBlbmRpbmcgb24gdGhlIHBhcnRpY3VsYXIgc2xhYiYjMzk7cyBzaXplLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiBzbGFiLVx1MDAzZW9ial9leHRzX2luX29iamVjdDtcbiB9XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBpbnQgc3RyaWRlKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKVxuIHtcbi1cdFZNX1dBUk5fT05fT05DRShzdHJpZGUgIT0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkpO1xuLX1cbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbGFiX2dldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIpXG4te1xuLVx0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiB9XG4gI2VuZGlmXG4gXG4gLypcbiAgKiBzbGFiX29ial9leHQgLSBnZXQgdGhlIHBvaW50ZXIgdG8gdGhlIHNsYWIgb2JqZWN0IGV4dGVuc2lvbiBtZXRhZGF0YVxuICAqIGFzc29jaWF0ZWQgd2l0aCBhbiBvYmplY3QgaW4gYSBzbGFiLlxuJiM0MzsgKiBAczogY2FjaGUgdGhhdCB0aGUgc2xhYiBibG9uZ3MgdG9cbiAgKiBAc2xhYjogYSBwb2ludGVyIHRvIHRoZSBzbGFiIHN0cnVjdFxuICAqIEBvYmpfZXh0czogYSBwb2ludGVyIHRvIHRoZSBvYmplY3QgZXh0ZW5zaW9uIHZlY3RvclxuLSAqIEBpbmRleDogYW4gaW5kZXggb2YgdGhlIG9iamVjdFxuJiM0MzsgKiBAb2JqOiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdFxuICAqXG4gICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCBleHRlbnNpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBvYmplY3QuXG4gICogTXVzdCBiZSBjYWxsZWQgd2l0aGluIGEgc2VjdGlvbiBjb3ZlcmVkIGJ5IGdldC9wdXRfc2xhYl9vYmpfZXh0cygpLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpzbGFiX29ial9leHQoc3RydWN0IHNsYWIgKnNsYWIsXG4tXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9ial9leHRzLFxuLVx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGluZGV4KVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqXG4mIzQzO3NsYWJfb2JqX2V4dChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4mIzQzO1x0ICAgICBjb25zdCB2b2lkICpvYmopXG4ge1xuIFx0c3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0O1xuJiM0MztcdHVuc2lnbmVkIGludCBpbmRleDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc3RyaWRlO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKG9ial9leHRzICE9IHNsYWJfb2JqX2V4dHMoc2xhYikpO1xuIFxuLVx0b2JqX2V4dCA9IChzdHJ1Y3Qgc2xhYm9ial9leHQgKikob2JqX2V4dHMgJiM0Mztcbi1cdFx0XHRcdFx0IHNsYWJfZ2V0X3N0cmlkZShzbGFiKSAqIGluZGV4KTtcbiYjNDM7XHRpbmRleCA9IG9ial90b19pbmRleChzLCBzbGFiLCBvYmopO1xuJiM0MztcbiYjNDM7XHRpZiAoIW9ial9leHRzX2luX29iamVjdChzbGFiKSlcbiYjNDM7XHRcdHN0cmlkZSA9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHN0cmlkZSA9IHMtXHUwMDNlc2l6ZTtcbiYjNDM7XG4mIzQzO1x0b2JqX2V4dCA9IChzdHJ1Y3Qgc2xhYm9ial9leHQgKikob2JqX2V4dHMgJiM0MzsgaW5kZXggKiBzdHJpZGUpO1xuJiM0MztcbiBcdHJldHVybiBrYXNhbl9yZXNldF90YWcob2JqX2V4dCk7XG4gfVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKnNsYWJfb2JqX2V4dF9vYmpjZyhzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQpXG4mIzQzO3tcbiYjNDM7XHQvKiBpZiBvYmpjZyBleGlzdHMsIGl0IGNvbWVzIGZpcnN0LCBzbyB3ZSBkb24mIzM5O3QgbmVlZCB0byBkbyBhbnl0aGluZyAqL1xuJiM0MztcdHJldHVybiBvYmpfZXh0LVx1MDAzZV9vYmpjZztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNsYWJfb2JqX2V4dF9zZXRfb2JqY2coc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0LFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4mIzQzO3tcbiYjNDM7XHQvKiBpZiBvYmpjZyBleGlzdHMsIGl0IGNvbWVzIGZpcnN0LCBzbyB3ZSBkb24mIzM5O3QgbmVlZCB0byBkbyBhbnl0aGluZyAqL1xuJiM0MztcdG9ial9leHQtXHUwMDNlX29iamNnID0gb2JqY2c7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcbiYjNDM7c3RhdGljIGlubGluZSB1bmlvbiBjb2RldGFnX3JlZiAqXG4mIzQzO3NsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNsYWJfbmVlZHNfb2JqY2coc2xhYikpXG4mIzQzO1x0XHRvYmpfZXh0ICYjNDM7PSAxO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gXHUwMDI2b2JqX2V4dC1cdTAwM2VfY3RyZWY7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdFx0XHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyk7XG4gXG5AQCAtNjYyLDE2ICYjNDM7Nzc4LDE3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpzbGFiX29ial9leHQoc3RydWN0IHNsYWIgKnNsYWIsXG4tXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9ial9leHRzLFxuLVx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGluZGV4KVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqXG4mIzQzO3NsYWJfb2JqX2V4dChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4mIzQzO1x0ICAgICBjb25zdCB2b2lkICpvYmopXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGludCBzdHJpZGUpIHsgfVxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNsYWJfZ2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYikgeyByZXR1cm4gMDsgfVxuLVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4gXG4gI2VuZGlmIC8qIENPTkZJR19TTEFCX09CSl9FWFQgKi9cbiBcbmRpZmYgLS1naXQgYS9tbS9zbGFiX2NvbW1vbi5jIGIvbW0vc2xhYl9jb21tb24uY1xuaW5kZXggMDNlY2FjMTJjZDg2NWYuLjRlOTgzZTI1MDMzODdhIDEwMDY0NFxuLS0tIGEvbW0vc2xhYl9jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2xhYl9jb21tb24uY1xuQEAgLTUyLDcgJiM0Mzs1Miw3IEBAIHN0cnVjdCBrbWVtX2NhY2hlICprbWVtX2NhY2hlO1xuIFx0XHRTTEFCX09CSl9FWFRfSU5fT0JKKVxuIFxuICNkZWZpbmUgU0xBQl9NRVJHRV9TQU1FIChTTEFCX1JFQ0xBSU1fQUNDT1VOVCB8IFNMQUJfQ0FDSEVfRE1BIHwgXFxcbi1cdFx0XHQgU0xBQl9DQUNIRV9ETUEzMiB8IFNMQUJfQUNDT1VOVClcbiYjNDM7XHRcdFx0IFNMQUJfQ0FDSEVfRE1BMzIgfCBTTEFCX0FDQ09VTlQgfCBTTEFCX01BWV9BQ0NPVU5UKVxuIFxuIC8qXG4gICogTWVyZ2UgY29udHJvbC4gSWYgdGhpcyBpcyBzZXQgdGhlbiBubyBtZXJnaW5nIG9mIHNsYWIgY2FjaGVzIHdpbGwgb2NjdXIuXG5AQCAtMzU5LDYgJiM0MzszNTksMTMgQEAgc3RydWN0IGttZW1fY2FjaGUgKl9fa21lbV9jYWNoZV9jcmVhdGVfYXJncyhjb25zdCBjaGFyICpuYW1lLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGb3Igbm93IHdlIGFzc3VtZSBhbnkgY2FjaGUgY2FuIGJlIHVzZWQgd2l0aCBfX0dGUF9BQ0NPVU5UIGFuZCB0aHVzXG4mIzQzO1x0ICogbWF5IG5lZWQgdG8gc3RvcmUgb2JqY2cgcG9pbnRlcnMgZm9yIG9iamVjdHNcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxuJiM0MztcdFx0ZmxhZ3MgfD0gU0xBQl9NQVlfQUNDT1VOVDtcbiYjNDM7XG4gXHQvKiBGYWlsIGNsb3NlZCBvbiBiYWQgdXNlcnNpemUgb2YgdXNlcm9mZnNldCB2YWx1ZXMuICovXG4gXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZKSB8fFxuIFx0ICAgIFdBUk5fT04oIWFyZ3MtXHUwMDNldXNlcnNpemUgXHUwMDI2XHUwMDI2IGFyZ3MtXHUwMDNldXNlcm9mZnNldCkgfHxcbkBAIC05ODQsMTEgJiM0Mzs5OTEsMTkgQEAgbmV3X2ttYWxsb2NfY2FjaGUoaW50IGlkeCwgZW51bSBrbWFsbG9jX2NhY2hlX3R5cGUgdHlwZSlcbiAjZW5kaWZcbiBcbiBcdC8qXG4tXHQgKiBJZiBDT05GSUdfTUVNQ0cgaXMgZW5hYmxlZCwgZGlzYWJsZSBjYWNoZSBtZXJnaW5nIGZvclxuLVx0ICogS01BTExPQ19OT1JNQUwgY2FjaGVzLlxuJiM0MztcdCAqIElmIG1lbWNnX2ttZW0gaXMgZW5hYmxlZCBhbmQgdGhpcyBpcyBhIEtNQUxMT0NfTk9STUFMIGNhY2hlIGFuZCAgbm90XG4mIzQzO1x0ICogYWxpYXNlZCB3aXRoIGFueSBvdGhlciB0eXBlLCBtYWtlIHN1cmUgaXQmIzM5O3MgbmV2ZXIgbWVyZ2VkIHdpdGggYW55IG90aGVyXG4mIzQzO1x0ICogY2FjaGUuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJbiBvdGhlciBjYXNlcyB0aGUga21hbGxvYyBjYWNoZSBtYXkgZW5kIHVwIGJlaW5nIHVzZWQgZm9yIGFcbiYjNDM7XHQgKiBfX0dGUF9BQ0NPVU5UIGFsbG9jYXRpb24gc28gbWFyayBpdCBhcyBzdWNoXG4gXHQgKi9cbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2ICh0eXBlID09IEtNQUxMT0NfTk9STUFMKSlcbi1cdFx0ZmxhZ3MgfD0gU0xBQl9OT19NRVJHRTtcbiYjNDM7XHRpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKSB7XG4mIzQzO1x0XHRpZiAodHlwZSA9PSBLTUFMTE9DX05PUk1BTCBcdTAwMjZcdTAwMjYgS01BTExPQ19SRUNMQUlNICE9IEtNQUxMT0NfTk9STUFMKVxuJiM0MztcdFx0XHRmbGFncyB8PSBTTEFCX05PX01FUkdFO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRmbGFncyB8PSBTTEFCX01BWV9BQ0NPVU5UO1xuJiM0MztcdH1cbiBcbiBcdGlmIChtaW5hbGlnbiBcdTAwM2UgQVJDSF9LTUFMTE9DX01JTkFMSUdOKSB7XG4gXHRcdGFsaWduZWRfc2l6ZSA9IEFMSUdOKGFsaWduZWRfc2l6ZSwgbWluYWxpZ24pO1xuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xuaW5kZXggMDMzN2U2MGRiNWFjZTAuLmU2MTQ4YjczYjkyZjg4IDEwMDY0NFxuLS0tIGEvbW0vc2x1Yi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmNcbkBAIC0yMTMsNiAmIzQzOzIxMywxMSBAQCBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShzbHViX2RlYnVnX2VuYWJsZWQpO1xuIHN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShzdHJpY3RfbnVtYSk7XG4gI2VuZGlmXG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xuJiM0MztERUZJTkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFQsXG4mIzQzO1x0XHRcdHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gLyogU3RydWN0dXJlIGhvbGRpbmcgZXh0cmEgcGFyYW1ldGVycyBmb3Igc2xhYiBhbGxvY2F0aW9ucyAqL1xuIHN0cnVjdCBzbGFiX2FsbG9jX2NvbnRleHQge1xuIFx0dW5zaWduZWQgbG9uZyBjYWxsZXJfYWRkcjtcbkBAIC04MDMsNyAmIzQzOzgwOCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX3NsYWJfb2JqX2V4dHMoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4gXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2JqX2V4dHNfc2l6ZV9pbl9zbGFiKHN0cnVjdCBzbGFiICpzbGFiKVxuIHtcbi1cdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHNsYWItXHUwMDNlb2JqZWN0cztcbiYjNDM7XHRyZXR1cm4gc2xhYl9vYmpfZXh0X3NpemUoc2xhYikgKiBzbGFiLVx1MDAzZW9iamVjdHM7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBvYmpfZXh0c19vZmZzZXRfaW5fc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbkBAIC04NzAsMTggJiM0Mzs4NzUsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4gI2VuZGlmXG4gXG4gI2lmIGRlZmluZWQoQ09ORklHX1NMQUJfT0JKX0VYVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHXzY0QklUKVxuLXN0YXRpYyBib29sIG9ial9leHRzX2luX29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4te1xuLVx0Lypcbi1cdCAqIE5vdGUgd2UgY2Fubm90IHJlbHkgb24gdGhlIFNMQUJfT0JKX0VYVF9JTl9PQkogZmxhZyBoZXJlIGFuZCBuZWVkIHRvXG4tXHQgKiBjaGVjayB0aGUgc3RyaWRlLiBBIGNhY2hlIGNhbiBoYXZlIFNMQUJfT0JKX0VYVF9JTl9PQkogc2V0LCBidXRcbi1cdCAqIGFsbG9jYXRpb25zIHdpdGhpbl9zbGFiX2xlZnRvdmVyIGFyZSBwcmVmZXJyZWQuIEFuZCB0aG9zZSBtYXkgYmVcbi1cdCAqIHBvc3NpYmxlIG9yIG5vdCBkZXBlbmRpbmcgb24gdGhlIHBhcnRpY3VsYXIgc2xhYiYjMzk7cyBzaXplLlxuLVx0ICovXG4tXHRyZXR1cm4gb2JqX2V4dHNfaW5fc2xhYihzLCBzbGFiKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAgICAoc2xhYl9nZXRfc3RyaWRlKHNsYWIpID09IHMtXHUwMDNlc2l6ZSk7XG4tfVxuLVxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgb2JqX2V4dHNfb2Zmc2V0X2luX29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiB7XG4gXHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gZ2V0X2luZm9fZW5kKHMpO1xuQEAgLTg5NiwxNiAmIzQzOzg4OSwyMCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4gXG4gXHRyZXR1cm4gb2Zmc2V0O1xuIH1cbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X29ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYilcbiB7XG4tXHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0c2xhYi1cdTAwM2VvYmpfZXh0c19pbl9vYmplY3QgPSAxO1xuIH1cbi1cbiYjNDM7I2Vsc2VcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfZXh0c19vZmZzZXRfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4mIzQzO3tcbiYjNDM7fVxuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xuQEAgLTEyMDYsOCAmIzQzOzEyMDMsOCBAQCBzdGF0aWMgdm9pZCBwcmludF90cmFpbGVyKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdTggKnApXG4gXG4gXHRvZmYgJiM0Mzs9IGthc2FuX21ldGFkYXRhX3NpemUocywgZmFsc2UpO1xuIFxuLVx0aWYgKG9ial9leHRzX2luX29iamVjdChzLCBzbGFiKSlcbi1cdFx0b2ZmICYjNDM7PSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KTtcbiYjNDM7XHRpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKVxuJiM0MztcdFx0b2ZmICYjNDM7PSBzbGFiX29ial9leHRfc2l6ZShzbGFiKTtcbiBcbiBcdGlmIChvZmYgIT0gc2l6ZV9mcm9tX29iamVjdChzKSlcbiBcdFx0LyogQmVnaW5uaW5nIG9mIHRoZSBmaWxsZXIgaXMgdGhlIGZyZWUgcG9pbnRlciAqL1xuQEAgLTE0MTEsOCAmIzQzOzE0MDgsOCBAQCBzdGF0aWMgaW50IGNoZWNrX3BhZF9ieXRlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHU4ICpwKVxuIFxuIFx0b2ZmICYjNDM7PSBrYXNhbl9tZXRhZGF0YV9zaXplKHMsIGZhbHNlKTtcbiBcbi1cdGlmIChvYmpfZXh0c19pbl9vYmplY3Qocywgc2xhYikpXG4tXHRcdG9mZiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCk7XG4mIzQzO1x0aWYgKG9ial9leHRzX2luX29iamVjdChzbGFiKSlcbiYjNDM7XHRcdG9mZiAmIzQzOz0gc2xhYl9vYmpfZXh0X3NpemUoc2xhYik7XG4gXG4gXHRpZiAoc2l6ZV9mcm9tX29iamVjdChzKSA9PSBvZmYpXG4gXHRcdHJldHVybiAxO1xuQEAgLTE0MzksNyAmIzQzOzE0MzYsNyBAQCBzbGFiX3BhZF9jaGVjayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4gXHRsZW5ndGggPSBzbGFiX3NpemUoc2xhYik7XG4gXHRlbmQgPSBzdGFydCAmIzQzOyBsZW5ndGg7XG4gXG4tXHRpZiAob2JqX2V4dHNfaW5fc2xhYihzLCBzbGFiKSBcdTAwMjZcdTAwMjYgIW9ial9leHRzX2luX29iamVjdChzLCBzbGFiKSkge1xuJiM0MztcdGlmIChvYmpfZXh0c19pbl9zbGFiKHMsIHNsYWIpIFx1MDAyNlx1MDAyNiAhb2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKSB7XG4gXHRcdHJlbWFpbmRlciA9IGxlbmd0aDtcbiBcdFx0cmVtYWluZGVyIC09IG9ial9leHRzX29mZnNldF9pbl9zbGFiKHMsIHNsYWIpO1xuIFx0XHRyZW1haW5kZXIgLT0gb2JqX2V4dHNfc2l6ZV9pbl9zbGFiKHNsYWIpO1xuQEAgLTIwNzAsMjAgJiM0MzsyMDY3LDI2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX29ial9jb2RldGFnX2VtcHR5KGNvbnN0IHZvaWQgKm9iailcbiBcdG9ial9zbGFiID0gdmlydF90b19zbGFiKG9iaik7XG4gXHRzbGFiX2V4dHMgPSBzbGFiX29ial9leHRzKG9ial9zbGFiKTtcbiBcdGlmIChzbGFiX2V4dHMpIHtcbiYjNDM7XHRcdHN0cnVjdCBzbGFib2JqX2V4dCAqZXh0O1xuJiM0MztcdFx0dW5pb24gY29kZXRhZ19yZWYgKnJlZjtcbiYjNDM7XG4gXHRcdGdldF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XG4tXHRcdHVuc2lnbmVkIGludCBvZmZzID0gb2JqX3RvX2luZGV4KG9ial9zbGFiLVx1MDAzZXNsYWJfY2FjaGUsXG4tXHRcdFx0XHRcdFx0IG9ial9zbGFiLCBvYmopO1xuLVx0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKmV4dCA9IHNsYWJfb2JqX2V4dChvYmpfc2xhYixcbi1cdFx0XHRcdFx0XHQgICAgICAgc2xhYl9leHRzLCBvZmZzKTtcbiYjNDM7XHRcdGV4dCA9IHNsYWJfb2JqX2V4dChvYmpfc2xhYi1cdTAwM2VzbGFiX2NhY2hlLCBvYmpfc2xhYiwgc2xhYl9leHRzLCBvYmopO1xuJiM0MztcdFx0cmVmID0gc2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKG9ial9zbGFiLCBleHQpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpc19rZmVuY2VfYWRkcmVzcyhvYmopKSB7XG4mIzQzO1x0XHRcdHB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiBcbi1cdFx0aWYgKHVubGlrZWx5KGlzX2NvZGV0YWdfZW1wdHkoXHUwMDI2ZXh0LVx1MDAzZXJlZikpKSB7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoaXNfY29kZXRhZ19lbXB0eShyZWYpKSkge1xuIFx0XHRcdHB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXG4gXHRcdC8qIGNvZGV0YWcgc2hvdWxkIGJlIE5VTEwgaGVyZSAqL1xuLVx0XHRXQVJOX09OKGV4dC1cdTAwM2VyZWYuY3QpO1xuLVx0XHRzZXRfY29kZXRhZ19lbXB0eShcdTAwMjZleHQtXHUwMDNlcmVmKTtcbiYjNDM7XHRcdFdBUk5fT04ocmVmLVx1MDAzZWN0KTtcbiYjNDM7XHRcdHNldF9jb2RldGFnX2VtcHR5KHJlZik7XG4gXHRcdHB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XG4gXHR9XG4gfVxuQEAgLTIwOTMsMTkgJiM0MzsyMDk2LDI5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXJrX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiKVxuIFx0cmV0dXJuIGNtcHhjaGcoXHUwMDI2c2xhYi1cdTAwM2VvYmpfZXh0cywgMCwgT0JKRVhUU19BTExPQ19GQUlMKSA9PSAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4tXHRcdFx0c3RydWN0IHNsYWJvYmpfZXh0ICp2ZWMsIHVuc2lnbmVkIGludCBvYmplY3RzKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBvYmpfZXh0cywgc3RydWN0IHNsYWJvYmpfZXh0ICp2ZWMpXG4ge1xuJiM0MztcdHVuc2lnbmVkIGludCBzdHJpZGU7XG4mIzQzO1xuJiM0MztcdGlmICghbWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0LypcbiBcdCAqIElmIHZlY3RvciBwcmV2aW91c2x5IGZhaWxlZCB0byBhbGxvY2F0ZSB0aGVuIHdlIGhhdmUgbGl2ZVxuIFx0ICogb2JqZWN0cyB3aXRoIG5vIHRhZyByZWZlcmVuY2UuIE1hcmsgYWxsIHJlZmVyZW5jZXMgaW4gdGhpc1xuIFx0ICogdmVjdG9yIGFzIGVtcHR5IHRvIGF2b2lkIHdhcm5pbmdzIGxhdGVyIG9uLlxuIFx0ICovXG4tXHRpZiAob2JqX2V4dHMgPT0gT0JKRVhUU19BTExPQ19GQUlMKSB7XG4tXHRcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcdGlmIChvYmpfZXh0cyAhPSBPQkpFWFRTX0FMTE9DX0ZBSUwpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHN0cmlkZSA9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpIC8gc2l6ZW9mKCp2ZWMpO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2Mgc2xhYi1cdTAwM2VvYmplY3RzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dW5pb24gY29kZXRhZ19yZWYgKnJlZiA9IHNsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihzbGFiLCB2ZWMpO1xuIFxuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBvYmplY3RzOyBpJiM0MzsmIzQzOylcbi1cdFx0XHRzZXRfY29kZXRhZ19lbXB0eShcdTAwMjZ2ZWNbaV0ucmVmKTtcbiYjNDM7XHRcdHNldF9jb2RldGFnX2VtcHR5KHJlZik7XG4mIzQzO1x0XHR2ZWMgJiM0Mzs9IHN0cmlkZTtcbiBcdH1cbiB9XG4gXG5AQCAtMjExMyw4ICYjNDM7MjEyNiw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWFya19vYmpfY29kZXRhZ19lbXB0eShjb25zdCB2b2lkICpvYmopIHt9XG4gc3RhdGljIGlubGluZSBib29sIG1hcmtfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIpIHsgcmV0dXJuIGZhbHNlOyB9XG4tc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyh1bnNpZ25lZCBsb25nIG9ial9leHRzLFxuLVx0XHRcdHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjLCB1bnNpZ25lZCBpbnQgb2JqZWN0cykge31cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYixcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsIHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjKSB7fVxuIFxuICNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xuIFxuQEAgLTIxMjcsMTIgJiM0MzsyMTQwLDExIEBAIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdFx0XHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbiB7XG4gXHRjb25zdCBib29sIGFsbG93X3NwaW4gPSBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhbGxvY19mbGFncyk7XG4tXHR1bnNpZ25lZCBpbnQgb2JqZWN0cyA9IG9ianNfcGVyX3NsYWIocywgc2xhYik7XG4gXHRib29sIG5ld19zbGFiID0gYWxsb2NfZmxhZ3MgXHUwMDI2IFNMQUJfQUxMT0NfTkVXX1NMQUI7XG4gXHR1bnNpZ25lZCBsb25nIG5ld19leHRzO1xuIFx0dW5zaWduZWQgbG9uZyBvbGRfZXh0cztcbiBcdHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjO1xuLVx0c2l6ZV90IHN6ID0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkgKiBzbGFiLVx1MDAzZW9iamVjdHM7XG4mIzQzO1x0c2l6ZV90IHN6ID0gc2xhYl9vYmpfZXh0X3NpemUoc2xhYikgKiBzbGFiLVx1MDAzZW9iamVjdHM7XG4gXG4gXHRnZnAgXHUwMDI2PSB+T0JKQ0dTX0NMRUFSX01BU0s7XG4gXHQvKlxuQEAgLTIxODMsNyAmIzQzOzIxOTUsNyBAQCBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gI2VuZGlmXG4gcmV0cnk6XG4gXHRvbGRfZXh0cyA9IFJFQURfT05DRShzbGFiLVx1MDAzZW9ial9leHRzKTtcbi1cdGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhvbGRfZXh0cywgdmVjLCBvYmplY3RzKTtcbiYjNDM7XHRoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Moc2xhYiwgb2xkX2V4dHMsIHZlYyk7XG4gXG4gXHRpZiAobmV3X3NsYWIpIHtcbiBcdFx0LypcbkBAIC0yMjUwLDkgJiM0MzsyMjYyLDYgQEAgc3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4gXHR2b2lkICphZGRyO1xuIFx0dW5zaWduZWQgbG9uZyBvYmpfZXh0cztcbiBcbi1cdC8qIEluaXRpYWxpemUgc3RyaWRlIGVhcmx5IHRvIGF2b2lkIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMgKi9cbi1cdHNsYWJfc2V0X3N0cmlkZShzbGFiLCBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSk7XG4tXG4gXHRpZiAoIW5lZWRfc2xhYl9vYmpfZXh0cyhzKSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTIyNzgsMTUgJiM0MzsyMjg3LDE0IEBAIHN0YXRpYyB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxuIFxuIFx0XHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4gXHRcdGZvcl9lYWNoX29iamVjdChhZGRyLCBzLCBzbGFiX2FkZHJlc3Moc2xhYiksIHNsYWItXHUwMDNlb2JqZWN0cylcbi1cdFx0XHRtZW1zZXQoa2FzYW5fcmVzZXRfdGFnKGFkZHIpICYjNDM7IG9mZnNldCwgMCxcbi1cdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkpO1xuJiM0MztcdFx0XHRtZW1zZXQoa2FzYW5fcmVzZXRfdGFnKGFkZHIpICYjNDM7IG9mZnNldCwgMCwgc2xhYl9vYmpfZXh0X3NpemUoc2xhYikpO1xuIFx0XHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4gXG4gI2lmZGVmIENPTkZJR19NRU1DR1xuIFx0XHRvYmpfZXh0cyB8PSBNRU1DR19EQVRBX09CSkVYVFM7XG4gI2VuZGlmXG4gXHRcdHNsYWItXHUwMDNlb2JqX2V4dHMgPSBvYmpfZXh0cztcbi1cdFx0c2xhYl9zZXRfc3RyaWRlKHNsYWIsIHMtXHUwMDNlc2l6ZSk7XG4mIzQzO1x0XHRzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc2xhYik7XG4gXHR9XG4gfVxuIFxuQEAgLTIzNTIsNiAmIzQzOzIzNjAsOSBAQCBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIGdmcF90IGZsYWdzLFxuIFx0aWYgKGFsbG9jX2ZsYWdzIFx1MDAyNiBTTEFCX0FMTE9DX05PX1JFQ1VSU0UpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRpZiAoaXNfa2ZlbmNlX2FkZHJlc3Mob2JqZWN0KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRzbGFiID0gdmlydF90b19zbGFiKG9iamVjdCk7XG4gXHRvYmpfZXh0cyA9IHByZXBhcmVfc2xhYl9vYmpfZXh0c19ob29rKHMsIHNsYWIsIGZsYWdzLCBhbGxvY19mbGFncywgb2JqZWN0KTtcbiBcdC8qXG5AQCAtMjM2MCwxMSAmIzQzOzIzNzEsMTUgQEAgX19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCBnZnBfdCBmbGFncyxcbiBcdCAqIGNoZWNrIHNob3VsZCBiZSBhZGRlZCBiZWZvcmUgYWxsb2NfdGFnX2FkZCgpLlxuIFx0ICovXG4gXHRpZiAob2JqX2V4dHMpIHtcbi1cdFx0dW5zaWduZWQgaW50IG9ial9pZHggPSBvYmpfdG9faW5kZXgocywgc2xhYiwgb2JqZWN0KTtcbiYjNDM7XHRcdHVuaW9uIGNvZGV0YWdfcmVmICpyZWY7XG4gXG4gXHRcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbi1cdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2JqX2lkeCk7XG4tXHRcdGFsbG9jX3RhZ19hZGQoXHUwMDI2b2JqX2V4dC1cdTAwM2VyZWYsIGN1cnJlbnQtXHUwMDNlYWxsb2NfdGFnLCBzLVx1MDAzZXNpemUpO1xuJiM0MztcbiYjNDM7XHRcdG9ial9leHQgPSBzbGFiX29ial9leHQocywgc2xhYiwgb2JqX2V4dHMsIG9iamVjdCk7XG4mIzQzO1x0XHRyZWYgPSBzbGFiX29ial9leHRfY29kZXRhZ19yZWYoc2xhYiwgb2JqX2V4dCk7XG4mIzQzO1xuJiM0MztcdFx0YWxsb2NfdGFnX2FkZChyZWYsIGN1cnJlbnQtXHUwMDNlYWxsb2NfdGFnLCBzLVx1MDAzZXNpemUpO1xuJiM0MztcbiBcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0fSBlbHNlIHtcbiBcdFx0YWxsb2NfdGFnX3NldF9pbmFjY3VyYXRlKGN1cnJlbnQtXHUwMDNlYWxsb2NfdGFnKTtcbkBAIC0yMzg0LDcgJiM0MzsyMzk5LDYgQEAgc3RhdGljIG5vaW5saW5lIHZvaWRcbiBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbiBcdFx0XHQgICAgICAgaW50IG9iamVjdHMpXG4ge1xuLVx0aW50IGk7XG4gXHR1bnNpZ25lZCBsb25nIG9ial9leHRzO1xuIFxuIFx0Lyogc2xhYi1cdTAwM2VvYmpfZXh0cyBtaWdodCBub3QgYmUgTlVMTCBpZiBpdCB3YXMgY3JlYXRlZCBmb3IgTUVNQ0cgYWNjb3VudGluZy4gKi9cbkBAIC0yMzk2LDEwICYjNDM7MjQxMCwxNCBAQCBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcFxuIFx0XHRyZXR1cm47XG4gXG4gXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBvYmplY3RzOyBpJiM0MzsmIzQzOykge1xuLVx0XHR1bnNpZ25lZCBpbnQgb2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHBbaV0pO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBvYmplY3RzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHNsYWJvYmpfZXh0ICpleHQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlzX2tmZW5jZV9hZGRyZXNzKHBbaV0pKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0YWxsb2NfdGFnX3N1YihcdTAwMjZzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9mZiktXHUwMDNlcmVmLCBzLVx1MDAzZXNpemUpO1xuJiM0MztcdFx0ZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwW2ldKTtcbiYjNDM7XHRcdGFsbG9jX3RhZ19zdWIoc2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKHNsYWIsIGV4dCksIHMtXHUwMDNlc2l6ZSk7XG4gXHR9XG4gXHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4gfVxuQEAgLTI0MTIsNiAmIzQzOzI0MzAsMjUgQEAgYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxuIFx0XHRfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCwgb2JqZWN0cyk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBNYWtlIHN1cmUgdGhlIHN0YXRpYyBrZXkgdXNlZCBieSBzbGFiX29ial9leHRfaGFzX2NvZGV0YWcoKSByZWZsZWN0cyB0aGVcbiYjNDM7ICogdmFsdWUgb2YgIW1lbV9hbGxvY19wcm9maWxpbmdfcGVybWFuZW50bHlfZGlzYWJsZWQoKVxuJiM0MzsgKlxuJiM0MzsgKiBBbnkgbGF0ZXIgbWVtIGFsbG9jIHByb2ZpbGluZyBzaHV0ZG93biB3b24mIzM5O3QgYmUgcmVmbGVjdGVkIGluIHRoZSBzdGF0aWMga2V5XG4mIzQzOyAqIGJlY2F1c2Ugb2JqX2V4dHMgd2l0aCBjb2RldGFncyBtaWdodCBhbHJlYWR5IGV4aXN0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgX19pbml0IHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRib29sIG5lZWRfY29kZXRhZyA9ICFtZW1fYWxsb2NfcHJvZmlsaW5nX3Blcm1hbmVudGx5X2Rpc2FibGVkKCk7XG4mIzQzO1xuJiM0MztcdGlmIChuZWVkX2NvZGV0YWcgIT0gc3RhdGljX2tleV9lbmFibGVkKFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpKSB7XG4mIzQzO1x0XHRpZiAobmVlZF9jb2RldGFnKVxuJiM0MztcdFx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfa2V5KTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAjZWxzZSAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZFxuQEAgLTI0MjYsNiAmIzQzOzI0NjMsMTAgQEAgYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxuIHtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXG4gXG4gXG5AQCAtMjQ3MSw2ICYjNDM7MjUxMiw5IEBAIHZvaWQgbWVtY2dfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbiBcdGlmIChsaWtlbHkoIW9ial9leHRzKSlcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdGlmICghc2xhYl9uZWVkc19vYmpjZyhzbGFiKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4gXHRfX21lbWNnX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAsIG9iamVjdHMsIG9ial9leHRzKTtcbiBcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbkBAIC0yNDg0LDcgJiM0MzsyNTI4LDYgQEAgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxuIFx0c3RydWN0IGttZW1fY2FjaGUgKnM7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdHN0cnVjdCBzbGFiICpzbGFiO1xuLVx0dW5zaWduZWQgbG9uZyBvZmY7XG4gXG4gXHRwYWdlID0gdmlydF90b19wYWdlKHApO1xuIFx0aWYgKFBhZ2VMYXJnZUttYWxsb2MocGFnZSkpIHtcbkBAIC0yNTE3LDE2ICYjNDM7MjU2MCwxNSBAQCBib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXG4gXHQgKiBvZiBzbGFiX29ial9leHRzIGJlaW5nIGFsbG9jYXRlZCBmcm9tIHRoZSBzYW1lIHNsYWIgYW5kIHRodXMgdGhlIHNsYWJcbiBcdCAqIGJlY29taW5nIGVmZmVjdGl2ZWx5IHVuZnJlZWFibGUuXG4gXHQgKi9cbi1cdGlmIChpc19rbWFsbG9jX25vcm1hbChzKSlcbiYjNDM7XHRpZiAoIWNhY2hlX25lZWRzX29iamNnKHMpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdC8qIElnbm9yZSBhbHJlYWR5IGNoYXJnZWQgb2JqZWN0cy4gKi9cbiBcdG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcbiBcdGlmIChvYmpfZXh0cykge1xuIFx0XHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4tXHRcdG9mZiA9IG9ial90b19pbmRleChzLCBzbGFiLCBwKTtcbi1cdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKTtcbi1cdFx0aWYgKHVubGlrZWx5KG9ial9leHQtXHUwMDNlb2JqY2cpKSB7XG4mIzQzO1x0XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwKTtcbiYjNDM7XHRcdGlmICh1bmxpa2VseShzbGFiX29ial9leHRfb2JqY2cob2JqX2V4dCkpKSB7XG4gXHRcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHR9XG5AQCAtMzM5MSwxMCAmIzQzOzM0MzMsMTUgQEAgc3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbiBcdFx0c3RhdChzLCBPUkRFUl9GQUxMQkFDSyk7XG4gXHR9XG4gXG4mIzQzO1x0LyogSW5pdGlhbGl6ZXMgZnJvemVuLCBpbnVzZSwgYW5kIGFueSBleHRyYSA2NGJpdC1vbmx5IGZsYWdzICovXG4mIzQzO1x0c2xhYi1cdTAwM2Vjb3VudGVycyA9IDA7XG4mIzQzO1xuIFx0c2xhYi1cdTAwM2VvYmplY3RzID0gb29fb2JqZWN0cyhvbyk7XG4tXHRzbGFiLVx1MDAzZWludXNlID0gMDtcbi1cdHNsYWItXHUwMDNlZnJvemVuID0gMDtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR182NEJJVFxuJiM0MztcdGlmIChjYWNoZV9uZWVkc19vYmpjZyhzKSlcbiYjNDM7XHRcdHNsYWItXHUwMDNlb2JqX2V4dHNfbmVlZHNfb2JqY2cgPSAxO1xuJiM0MzsjZW5kaWZcbiBcdHNsYWItXHUwMDNlc2xhYl9jYWNoZSA9IHM7XG4gXG4gXHRrYXNhbl9wb2lzb25fc2xhYihzbGFiKTtcbkBAIC02NTI2LDcgJiM0Mzs2NTczLDcgQEAgc3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9rc2l6ZShzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcdCAqL1xuIFx0aWYgKHMtXHUwMDNlZmxhZ3MgXHUwMDI2IChTTEFCX1RZUEVTQUZFX0JZX1JDVSB8IFNMQUJfU1RPUkVfVVNFUikpXG4gXHRcdHJldHVybiBzLVx1MDAzZWludXNlO1xuLVx0ZWxzZSBpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKVxuJiM0MztcdGVsc2UgaWYgKG9ial9leHRzX2luX29iamVjdChzbGFiKSlcbiBcdFx0cmV0dXJuIHMtXHUwMDNlaW51c2U7XG4gXHQvKlxuIFx0ICogRWxzZSB3ZSBjYW4gdXNlIGFsbCB0aGUgcGFkZGluZyBldGMgZm9yIHRoZSBhbGxvY2F0aW9uXG5AQCAtNzkyOSw3ICYjNDM7Nzk3Niw3IEBAIHN0YXRpYyBpbnQgY2FsY3VsYXRlX3NpemVzKHN0cnVjdCBrbWVtX2NhY2hlX2FyZ3MgKmFyZ3MsIHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuIFx0YWxpZ25lZF9zaXplID0gQUxJR04oc2l6ZSwgcy1cdTAwM2VhbGlnbik7XG4gI2lmIGRlZmluZWQoQ09ORklHX1NMQUJfT0JKX0VYVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHXzY0QklUKVxuIFx0aWYgKHNsYWJfYXJnc191bm1lcmdlYWJsZShhcmdzLCBzLVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQoYWxpZ25lZF9zaXplIC0gc2l6ZSBcdTAwM2U9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKSlcbiYjNDM7XHRcdFx0KGFsaWduZWRfc2l6ZSAtIHNpemUgXHUwMDNlPSBjYWNoZV9vYmpfZXh0X3NpemUocykpKVxuIFx0XHRzLVx1MDAzZWZsYWdzIHw9IFNMQUJfT0JKX0VYVF9JTl9PQko7XG4gI2VuZGlmXG4gXHRzaXplID0gYWxpZ25lZF9zaXplO1xuQEAgLTg1MzksNiAmIzQzOzg1ODYsOCBAQCB2b2lkIF9faW5pdCBrbWVtX2NhY2hlX2luaXQodm9pZClcbiBcdFx0Ym9vdF9rbWVtX2NhY2hlX25vZGU7XG4gXHRpbnQgbm9kZTtcbiBcbiYjNDM7XHRzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCgpO1xuJiM0MztcbiBcdGlmIChkZWJ1Z19ndWFyZHBhZ2VfbWlub3JkZXIoKSlcbiBcdFx0c2x1Yl9tYXhfb3JkZXIgPSAwO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1fQUxMT0NfUFJPRklMSU5HJiMzNDssCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0tGRU5DRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3NsYWJfb2JqX2V4dHMmIzM0OywKICAgICYjMzQ7X19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayYjMzQ7LAogICAgJiMzNDtfX21lbWNnX3NsYWJfZnJlZV9ob29rJiMzNDssCiAgICAmIzM0O19fa2ZlbmNlX2ZyZWUmIzM0OywKICAgICYjMzQ7X19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgbGF5b3V0IGFuZCBoYW5kbGluZyBvZiBgc3RydWN0IHNsYWJvYmpfZXh0YCBpbiB0aGUgc2xhYiBhbGxvY2F0b3IsIHdoaWNoIGlzIHVzZWQgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBhbmQgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nLiBJdCBvcHRpbWl6ZXMgdGhlIHN0b3JhZ2Ugb2YgYG9iamNnYCBhbmQgYGNvZGV0YWdfcmVmYCBwb2ludGVycy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBzbGFiIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgcGF0aHMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRhMTNiZmNhMjQyN2RlZWE0MWI2MGVhYWJiOGY4ZWM5ZTY2ODg1M2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyMCAyMDoyMDoyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3QKaW5kZXggNTM4OWQyNDExNzZhOGEuLmQwMmViNTRlZThmMmM2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdApAQCAtMTEyLDMgJiM0MzsxMTIsMTAgQEAgVG8gZG8gc286CiAKIC0gVGhlbiwgdXNlIHRoZSBmb2xsb3dpbmcgZm9ybSBmb3IgeW91ciBhbGxvY2F0aW9uczoKICAgYWxsb2NfaG9va3NfdGFnKGh0LSZndDt5b3VyX3NhdmVkX3RhZywga21hbGxvY19ub3Byb2YoLi4uKSkKJiM0MzsKJiM0MztOb3RlcwomIzQzOz09PT09CiYjNDM7CiYjNDM7LSBXaGVuIGEgc2xhYiBvYmplY3QgaXMgYWxsb2NhdGVkIGZyb20gS0ZFTkNFLCBpdHMgYWNjb3VudGluZyBpcyBza2lwcGVkLgomIzQzOyAgS0ZFTkNFIGFsbG9jYXRpb25zIGFyZSByYXJlIGFuZCBsaW1pdGVkIHRvIGEgc21hbGwgbnVtYmVyLCBzbyB0aGlzIG9taXNzaW9uCiYjNDM7ICBpcyBuZWdsaWdpYmxlLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCBlMWY0NmEwMDE2ZmNmZC4uOTM4NjljYzM1YzI1YmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC0xNDQwLDE5ICYjNDM7MTQ0MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX3dvcmtxdWV1ZSh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovCiAKLS8qCi0gKiBFeHRlbmRlZCBpbmZvcm1hdGlvbiBmb3Igc2xhYiBvYmplY3RzIHN0b3JlZCBhcyBhbiBhcnJheSBpbiBwYWdlLSZndDttZW1jZ19kYXRhCi0gKiBpZiBNRU1DR19EQVRBX09CSkVYVFMgaXMgc2V0LgotICovCi1zdHJ1Y3Qgc2xhYm9ial9leHQgewotI2lmZGVmIENPTkZJR19NRU1DRwotCXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HCi0JdW5pb24gY29kZXRhZ19yZWYgcmVmOwotI2VuZGlmCi19IF9fYWxpZ25lZCg4KTsKLQogc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsYWIuaCBiL2luY2x1ZGUvbGludXgvc2xhYi5oCmluZGV4IDNhMTRkZjUwNzY2YWIwLi5mOTEzMjkwMmM1YTZkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbGFiLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zbGFiLmgKQEAgLTQ1LDYgJiM0Mzs0NSw3IEBAIGVudW0gX3NsYWJfZmxhZ19iaXRzIHsKICNlbmRpZgogI2lmZGVmIENPTkZJR19NRU1DRwogCV9TTEFCX0FDQ09VTlQsCiYjNDM7CV9TTEFCX01BWV9BQ0NPVU5ULAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0tBU0FOX0dFTkVSSUMKIAlfU0xBQl9LQVNBTiwKQEAgLTIwNCw4ICYjNDM7MjA1LDEwIEBAIGVudW0gX3NsYWJfZmxhZ19iaXRzIHsKICAqLwogI2lmZGVmIENPTkZJR19NRU1DRwogIyBkZWZpbmUgU0xBQl9BQ0NPVU5UCQlfX1NMQUJfRkxBR19CSVQoX1NMQUJfQUNDT1VOVCkKJiM0MzsjIGRlZmluZSBTTEFCX01BWV9BQ0NPVU5UCV9fU0xBQl9GTEFHX0JJVChfU0xBQl9NQVlfQUNDT1VOVCkKICNlbHNlCiAjIGRlZmluZSBTTEFCX0FDQ09VTlQJCV9fU0xBQl9GTEFHX1VOVVNFRAomIzQzOyMgZGVmaW5lIFNMQUJfTUFZX0FDQ09VTlQJX19TTEFCX0ZMQUdfVU5VU0VECiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19LQVNBTl9HRU5FUklDCmRpZmYgLS1naXQgYS9tbS9rZmVuY2UvY29yZS5jIGIvbW0va2ZlbmNlL2NvcmUuYwppbmRleCA2NTc3YmQ3Njk1NGViNC4uODk3ZWNmMjU5NGZiNjQgMTAwNjQ0Ci0tLSBhL21tL2tmZW5jZS9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0va2ZlbmNlL2NvcmUuYwpAQCAtNjQwLDYgJiM0Mzs2NDAsOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBrZmVuY2VfaW5pdF9wb29sKHZvaWQpCiAJCXN0cnVjdCBzbGFiICpzbGFiID0gcGFnZV9zbGFiKHBhZ2UpOwogCQlzbGFiLSZndDtvYmpfZXh0cyA9ICh1bnNpZ25lZCBsb25nKSZhbXA7a2ZlbmNlX21ldGFkYXRhX2luaXRbaSAvIDIgLSAxXS5vYmpfZXh0cyB8CiAJCQkJIE1FTUNHX0RBVEFfT0JKRVhUUzsKJiM0MzsjaWZkZWYgQ09ORklHXzY0QklUCiYjNDM7CQlzbGFiLSZndDtvYmpfZXh0c19uZWVkc19vYmpjZyA9IDE7CiYjNDM7I2VuZGlmCiAjZW5kaWYKIAl9CiAKQEAgLTEyNDksNyAmIzQzOzEyNTIsNyBAQCB2b2lkIF9fa2ZlbmNlX2ZyZWUodm9pZCAqYWRkcikKIAlzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhICptZXRhID0gYWRkcl90b19tZXRhZGF0YSgodW5zaWduZWQgbG9uZylhZGRyKTsKIAogI2lmZGVmIENPTkZJR19NRU1DRwotCUtGRU5DRV9XQVJOX09OKG1ldGEtJmd0O29ial9leHRzLm9iamNnKTsKJiM0MzsJS0ZFTkNFX1dBUk5fT04oc2xhYl9vYmpfZXh0X29iamNnKCZhbXA7bWV0YS0mZ3Q7b2JqX2V4dHMpKTsKICNlbmRpZgogCS8qCiAJICogSWYgdGhlIG9iamVjdHMgb2YgdGhlIGNhY2hlIGFyZSBTTEFCX1RZUEVTQUZFX0JZX1JDVSwgZGVmZXIgZnJlZWluZwpkaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2tmZW5jZV90ZXN0LmMgYi9tbS9rZmVuY2Uva2ZlbmNlX3Rlc3QuYwppbmRleCBkZTJkMGY3ZDYyYjE1ZS4uOTg2N2MwM2VmMGFlM2QgMTAwNjQ0Ci0tLSBhL21tL2tmZW5jZS9rZmVuY2VfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2tmZW5jZS9rZmVuY2VfdGVzdC5jCkBAIC0yOTUsNyAmIzQzOzI5NSw3IEBAIHN0YXRpYyB2b2lkICp0ZXN0X2FsbG9jKHN0cnVjdCBrdW5pdCAqdGVzdCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcCwgZW51bSBhbGxvY2F0CiAJCQkgKiBtZW1jZyBhY2NvdW50aW5nIHdvcmtzIGNvcnJlY3RseS4KIAkJCSAqLwogCQkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIG9ial90b19pbmRleChzLCBzbGFiLCBhbGxvYyksIDBVKTsKLQkJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBvYmpzX3Blcl9zbGFiKHMsIHNsYWIpLCAxKTsKJiM0MzsJCQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgKCh1bnNpZ25lZCBpbnQpc2xhYi0mZ3Q7b2JqZWN0cyksIDEpOwogCiAJCQlpZiAocG9saWN5ID09IEFMTE9DQVRFX0FOWSkKIAkJCQlyZXR1cm4gYWxsb2M7CmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggNmRjNDg4OGE5MGYzZmQuLmFhY2U4NWZiOTlmOTczIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0yODY1LDE4ICYjNDM7Mjg2NSwxOSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX29ial9zbGFiKHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICpwKQogCSAqLwogCXVuc2lnbmVkIGxvbmcgb2JqX2V4dHM7CiAJc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0OwotCXVuc2lnbmVkIGludCBvZmY7CiYjNDM7CXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKIAogCW9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTsKIAlpZiAoIW9ial9leHRzKQogCQlyZXR1cm4gTlVMTDsKIAotCWdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKLQlvZmYgPSBvYmpfdG9faW5kZXgoc2xhYi0mZ3Q7c2xhYl9jYWNoZSwgc2xhYiwgcCk7Ci0Jb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKTsKLQlpZiAob2JqX2V4dC0mZ3Q7b2JqY2cpIHsKLQkJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnID0gb2JqX2V4dC0mZ3Q7b2JqY2c7CiYjNDM7CWlmICghc2xhYl9uZWVkc19vYmpjZyhzbGFiKSkKJiM0MzsJCXJldHVybiBOVUxMOwogCiYjNDM7CWdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKJiM0MzsJb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLSZndDtzbGFiX2NhY2hlLCBzbGFiLCBvYmpfZXh0cywgcCk7CiYjNDM7CW9iamNnID0gc2xhYl9vYmpfZXh0X29iamNnKG9ial9leHQpOwomIzQzOwlpZiAob2JqY2cpIHsKIAkJcHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpOwogCQlyZXR1cm4gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7CiAJfQpAQCAtMzU0MSw3ICYjNDM7MzU0Miw2IEBAIGJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsCiAJc2l6ZV90IG9ial9zaXplID0gb2JqX2Z1bGxfc2l6ZShzKTsKIAlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiAJc3RydWN0IHNsYWIgKnNsYWI7Ci0JdW5zaWduZWQgbG9uZyBvZmY7CiAJc2l6ZV90IGk7CiAKIAkvKgpAQCAtMzU4Myw2ICYjNDM7MzU4Myw5IEBAIGJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsCiAKIAkJc2xhYiA9IHZpcnRfdG9fc2xhYihwW2ldKTsKIAomIzQzOwkJaWYgKElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX1ZNKSAmYW1wOyZhbXA7IFdBUk5fT05fT05DRSghc2xhYl9uZWVkc19vYmpjZyhzbGFiKSkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCWlmICghc2xhYl9vYmpfZXh0cyhzbGFiKSAmYW1wOyZhbXA7CiAJCSAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBzbGFiX2FsbG9jX2ZsYWdzKSkgewogCQkJY29udGludWU7CkBAIC0zNjE2LDEwICYjNDM7MzYxOSwxMSBAQCBib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LAogCiAJCW9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTsKIAkJZ2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpOwotCQlvZmYgPSBvYmpfdG9faW5kZXgocywgc2xhYiwgcFtpXSk7Ci0JCW9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9mZik7CiYjNDM7CQlvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwW2ldKTsKJiM0MzsKIAkJb2JqX2Nncm91cF9nZXQob2JqY2cpOwotCQlvYmpfZXh0LSZndDtvYmpjZyA9IG9iamNnOwomIzQzOwkJc2xhYl9vYmpfZXh0X3NldF9vYmpjZyhvYmpfZXh0LCBvYmpjZyk7CiYjNDM7CiAJCXB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKIAl9CiAKQEAgLTM2MzUsMTUgJiM0MzszNjM5LDEzIEBAIHZvaWQgX19tZW1jZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsCiAJCXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKIAkJc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0OwogCQlzdHJ1Y3Qgb2JqX3N0b2NrX3BjcCAqc3RvY2s7Ci0JCXVuc2lnbmVkIGludCBvZmY7CiAKLQkJb2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHBbaV0pOwotCQlvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpOwotCQlvYmpjZyA9IG9ial9leHQtJmd0O29iamNnOwomIzQzOwkJb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgcFtpXSk7CiYjNDM7CQlvYmpjZyA9IHNsYWJfb2JqX2V4dF9vYmpjZyhvYmpfZXh0KTsKIAkJaWYgKCFvYmpjZykKIAkJCWNvbnRpbnVlOwogCi0JCW9ial9leHQtJmd0O29iamNnID0gTlVMTDsKJiM0MzsJCXNsYWJfb2JqX2V4dF9zZXRfb2JqY2cob2JqX2V4dCwgTlVMTCk7CiAKIAkJc3RvY2sgPSB0cnlsb2NrX3N0b2NrKCk7CiAJCV9fcmVmaWxsX29ial9zdG9jayhvYmpjZywgc3RvY2ssIG9ial9zaXplLCB0cnVlKTsKZGlmZiAtLWdpdCBhL21tL3NsYWIuaCBiL21tL3NsYWIuaAppbmRleCBmNWUzMzZiNmI2YjA0Yy4uMThjMmE4MDdmMDIzY2UgMTAwNjQ0Ci0tLSBhL21tL3NsYWIuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9zbGFiLmgKQEAgLTgxLDEwICYjNDM7ODEsMTEgQEAgc3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIHsKICNpZmRlZiBDT05GSUdfNjRCSVQKIAkJCQkJLyoKIAkJCQkJICogU29tZSBvcHRpbWl6YXRpb25zIHVzZSBmcmVlIGJpdHMgaW4gJiMzOTtjb3VudGVycyYjMzk7IGZpZWxkCi0JCQkJCSAqIHRvIHNhdmUgbWVtb3J5LiBJbiBjYXNlIC0mZ3Q7c3RyaWRlIGZpZWxkIGlzIG5vdCBhdmFpbGFibGUsCi0JCQkJCSAqIHN1Y2ggb3B0aW1pemF0aW9ucyBhcmUgZGlzYWJsZWQuCiYjNDM7CQkJCQkgKiB0byBzYXZlIG1lbW9yeSBvciBDUFUuIElmIHRoZXNlIGZyZWUgYml0cyBhcmUgbm90CiYjNDM7CQkJCQkgKiBhdmFpbGFibGUsIHN1Y2ggb3B0aW1pemF0aW9ucyBhcmUgZGlzYWJsZWQuCiAJCQkJCSAqLwotCQkJCQl1bnNpZ25lZCBpbnQgc3RyaWRlOwomIzQzOwkJCQkJdW5zaWduZWQgb2JqX2V4dHNfaW5fb2JqZWN0OjE7CiYjNDM7CQkJCQl1bnNpZ25lZCBvYmpfZXh0c19uZWVkc19vYmpjZzoxOwogI2VuZGlmCiAJCQkJfTsKIAkJCX07CkBAIC0zMzAsMTIgJiM0MzszMzEsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfdG9faW5kZXgoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLAogCXJldHVybiBfX29ial90b19pbmRleChjYWNoZSwgc2xhYl9hZGRyZXNzKHNsYWIpLCBvYmopOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBvYmpzX3Blcl9zbGFiKGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwKLQkJCQljb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYikKLXsKLQlyZXR1cm4gc2xhYi0mZ3Q7b2JqZWN0czsKLX0KLQogLyoKICAqIFN0YXRlIG9mIHRoZSBzbGFiIGFsbG9jYXRvci4KICAqCkBAIC01NTUsNiAmIzQzOzU1MCw5MyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9rbWFsbG9jX25vX29iamV4dCh2b2lkKQogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzOy8qCiYjNDM7ICogRXh0ZW5kZWQgaW5mb3JtYXRpb24gZm9yIHNsYWIgb2JqZWN0cyBzdG9yZWQgYXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IGluCiYjNDM7ICogc2xhYi0mZ3Q7b2JqX2V4dHMgKGFsaWFzaW5nIHBhZ2UtJmd0O21lbWNnX2RhdGEpIGlmIE1FTUNHX0RBVEFfT0JKRVhUUyBpcyBzZXQuCiYjNDM7ICovCiYjNDM7c3RydWN0IHNsYWJvYmpfZXh0IHsKJiM0MzsJLyoKJiM0MzsJICogQWxsIGVsZW1lbnRzIG9mIHRoZSB1bmlvbiBzaG91bGQgYmUgcG9pbnRlci1zaXplZCB0byBhdm9pZCBtZW1vcnkKJiM0MzsJICogd2FzdGUKJiM0MzsJICovCiYjNDM7CXVuaW9uIHsKJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHCiYjNDM7CQlzdHJ1Y3Qgb2JqX2Nncm91cCAqX29iamNnOwomIzQzOyNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORwomIzQzOwkJdW5pb24gY29kZXRhZ19yZWYgX2N0cmVmOwomIzQzOyNlbmRpZgomIzQzOwl9OwomIzQzO30gX19hbGlnbmVkKDgpOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORwomIzQzO0RFQ0xBUkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFQsCiYjNDM7CQkJIHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWcodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBzdGF0aWNfYnJhbmNoX21heWJlKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCwKJiM0MzsJCQkJICAgJmFtcDtzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfa2V5KTsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0cKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgY2FjaGVfbmVlZHNfb2JqY2coc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlKQomIzQzO3sKJiM0MzsJcmV0dXJuIChjYWNoZS0mZ3Q7ZmxhZ3MgJmFtcDsgU0xBQl9NQVlfQUNDT1VOVCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzbGFiX25lZWRzX29iamNnKHN0cnVjdCBzbGFiICpzbGFiKQomIzQzO3sKJiM0MzsjaWZkZWYgQ09ORklHXzY0QklUCiYjNDM7CXJldHVybiBzbGFiLSZndDtvYmpfZXh0c19uZWVkc19vYmpjZzsKJiM0MzsjZWxzZQomIzQzOwlyZXR1cm4gY2FjaGVfbmVlZHNfb2JqY2coc2xhYi0mZ3Q7c2xhYl9jYWNoZSk7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSBib29sIGNhY2hlX25lZWRzX29iamNnKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHNsYWJfbmVlZHNfb2JqY2coc3RydWN0IHNsYWIgKnNsYWIpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgc2l6ZV90IGNhY2hlX29ial9leHRfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcykKJiM0Mzt7CiYjNDM7CXNpemVfdCBzeiA9IDA7CiYjNDM7CiYjNDM7CWlmIChjYWNoZV9uZWVkc19vYmpjZyhzKSkKJiM0MzsJCXN6ICYjNDM7PSAxOwomIzQzOwomIzQzOwlpZiAoc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKCkpCiYjNDM7CQlzeiAmIzQzOz0gMTsKJiM0MzsKJiM0MzsJcmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc3o7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgc2l6ZV90IHNsYWJfb2JqX2V4dF9zaXplKHN0cnVjdCBzbGFiICpzbGFiKQomIzQzO3sKJiM0MzsJc2l6ZV90IHN6ID0gMDsKJiM0MzsKJiM0MzsJaWYgKHNsYWJfbmVlZHNfb2JqY2coc2xhYikpCiYjNDM7CQlzeiAmIzQzOz0gMTsKJiM0MzsKJiM0MzsJaWYgKHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZygpKQomIzQzOwkJc3ogJiM0Mzs9IDE7CiYjNDM7CiYjNDM7CXJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHN6OwomIzQzO30KJiM0MzsKICNpZmRlZiBDT05GSUdfU0xBQl9PQkpfRVhUCiAKIC8qCkBAIC01NzIsNyAmIzQzOzY1NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX2ttYWxsb2Nfbm9fb2JqZXh0KHZvaWQpCiAgKiBvYmpfZXh0cyA9IHNsYWJfb2JqX2V4dHMoc2xhYik7CiAgKiBpZiAob2JqX2V4dHMpIHsKICAqICAgICAgICAgZ2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpOwotICogICAgICAgICBvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvYmpfdG9faW5kZXgocywgc2xhYiwgb2JqKSk7CiYjNDM7ICogICAgICAgICBvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBvYmopOwogICogICAgICAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCBvYmpfZXh0CiAgKiAgICAgICAgIHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKICAqIH0KQEAgLTYxMCw0OCAmIzQzOzY5Miw4MiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3NsYWJfb2JqX2V4dHModW5zaWduZWQgbG9uZyBvYmpfZXh0cykKIH0KIAogI2lmZGVmIENPTkZJR182NEJJVAotc3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgaW50IHN0cmlkZSkKLXsKLQlzbGFiLSZndDtzdHJpZGUgPSBzdHJpZGU7Ci19Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbGFiX2dldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIpCiYjNDM7c3RhdGljIGlubGluZSBib29sIG9ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYikKIHsKLQlyZXR1cm4gc2xhYi0mZ3Q7c3RyaWRlOwomIzQzOwkvKgomIzQzOwkgKiBOb3RlIHdlIGNhbm5vdCByZWx5IG9uIHRoZSBTTEFCX09CSl9FWFRfSU5fT0JKIGZsYWcgaGVyZSBhbmQgbmVlZCB0bwomIzQzOwkgKiBjaGVjayB0aGUgcGVyLXNsYWIgYml0LiBBIGNhY2hlIGNhbiBoYXZlIFNMQUJfT0JKX0VYVF9JTl9PQkogc2V0LCBidXQKJiM0MzsJICogYWxsb2NhdGlvbnMgd2l0aGluX3NsYWJfbGVmdG92ZXIgYXJlIHByZWZlcnJlZC4gQW5kIHRob3NlIG1heSBiZQomIzQzOwkgKiBwb3NzaWJsZSBvciBub3QgZGVwZW5kaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIHNsYWImIzM5O3Mgc2l6ZS4KJiM0MzsJICovCiYjNDM7CXJldHVybiBzbGFiLSZndDtvYmpfZXh0c19pbl9vYmplY3Q7CiB9CiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgaW50IHN0cmlkZSkKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKQogewotCVZNX1dBUk5fT05fT05DRShzdHJpZGUgIT0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkpOwotfQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2xhYl9nZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiKQotewotCXJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KTsKJiM0MzsJcmV0dXJuIGZhbHNlOwogfQogI2VuZGlmCiAKIC8qCiAgKiBzbGFiX29ial9leHQgLSBnZXQgdGhlIHBvaW50ZXIgdG8gdGhlIHNsYWIgb2JqZWN0IGV4dGVuc2lvbiBtZXRhZGF0YQogICogYXNzb2NpYXRlZCB3aXRoIGFuIG9iamVjdCBpbiBhIHNsYWIuCiYjNDM7ICogQHM6IGNhY2hlIHRoYXQgdGhlIHNsYWIgYmxvbmdzIHRvCiAgKiBAc2xhYjogYSBwb2ludGVyIHRvIHRoZSBzbGFiIHN0cnVjdAogICogQG9ial9leHRzOiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCBleHRlbnNpb24gdmVjdG9yCi0gKiBAaW5kZXg6IGFuIGluZGV4IG9mIHRoZSBvYmplY3QKJiM0MzsgKiBAb2JqOiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdAogICoKICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBvYmplY3QgZXh0ZW5zaW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgb2JqZWN0LgogICogTXVzdCBiZSBjYWxsZWQgd2l0aGluIGEgc2VjdGlvbiBjb3ZlcmVkIGJ5IGdldC9wdXRfc2xhYl9vYmpfZXh0cygpLgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqc2xhYl9vYmpfZXh0KHN0cnVjdCBzbGFiICpzbGFiLAotCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvYmpfZXh0cywKLQkJCQkJICAgICAgIHVuc2lnbmVkIGludCBpbmRleCkKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqCiYjNDM7c2xhYl9vYmpfZXh0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgbG9uZyBvYmpfZXh0cywKJiM0MzsJICAgICBjb25zdCB2b2lkICpvYmopCiB7CiAJc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0OwomIzQzOwl1bnNpZ25lZCBpbnQgaW5kZXg7CiYjNDM7CXVuc2lnbmVkIGludCBzdHJpZGU7CiAKIAlWTV9XQVJOX09OX09OQ0Uob2JqX2V4dHMgIT0gc2xhYl9vYmpfZXh0cyhzbGFiKSk7CiAKLQlvYmpfZXh0ID0gKHN0cnVjdCBzbGFib2JqX2V4dCAqKShvYmpfZXh0cyAmIzQzOwotCQkJCQkgc2xhYl9nZXRfc3RyaWRlKHNsYWIpICogaW5kZXgpOwomIzQzOwlpbmRleCA9IG9ial90b19pbmRleChzLCBzbGFiLCBvYmopOwomIzQzOwomIzQzOwlpZiAoIW9ial9leHRzX2luX29iamVjdChzbGFiKSkKJiM0MzsJCXN0cmlkZSA9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpOwomIzQzOwllbHNlCiYjNDM7CQlzdHJpZGUgPSBzLSZndDtzaXplOwomIzQzOwomIzQzOwlvYmpfZXh0ID0gKHN0cnVjdCBzbGFib2JqX2V4dCAqKShvYmpfZXh0cyAmIzQzOyBpbmRleCAqIHN0cmlkZSk7CiYjNDM7CiAJcmV0dXJuIGthc2FuX3Jlc2V0X3RhZyhvYmpfZXh0KTsKIH0KIAomIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0cKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpzbGFiX29ial9leHRfb2JqY2coc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0KQomIzQzO3sKJiM0MzsJLyogaWYgb2JqY2cgZXhpc3RzLCBpdCBjb21lcyBmaXJzdCwgc28gd2UgZG9uJiMzOTt0IG5lZWQgdG8gZG8gYW55dGhpbmcgKi8KJiM0MzsJcmV0dXJuIG9ial9leHQtJmd0O19vYmpjZzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNsYWJfb2JqX2V4dF9zZXRfb2JqY2coc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0LAomIzQzOwkJCQkJICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpCiYjNDM7ewomIzQzOwkvKiBpZiBvYmpjZyBleGlzdHMsIGl0IGNvbWVzIGZpcnN0LCBzbyB3ZSBkb24mIzM5O3QgbmVlZCB0byBkbyBhbnl0aGluZyAqLwomIzQzOwlvYmpfZXh0LSZndDtfb2JqY2cgPSBvYmpjZzsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HCiYjNDM7c3RhdGljIGlubGluZSB1bmlvbiBjb2RldGFnX3JlZiAqCiYjNDM7c2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQpCiYjNDM7ewomIzQzOwlpZiAoc2xhYl9uZWVkc19vYmpjZyhzbGFiKSkKJiM0MzsJCW9ial9leHQgJiM0Mzs9IDE7CiYjNDM7CiYjNDM7CXJldHVybiAmYW1wO29ial9leHQtJmd0O19jdHJlZjsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsCiAJCQlnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyk7CiAKQEAgLTY2MiwxNiAmIzQzOzc3OCwxNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYikKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYm9ial9leHQgKnNsYWJfb2JqX2V4dChzdHJ1Y3Qgc2xhYiAqc2xhYiwKLQkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgpCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYm9ial9leHQgKgomIzQzO3NsYWJfb2JqX2V4dChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsCiYjNDM7CSAgICAgY29uc3Qgdm9pZCAqb2JqKQogewogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBpbnQgc3RyaWRlKSB7IH0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNsYWJfZ2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYikgeyByZXR1cm4gMDsgfQotCiYjNDM7c3RhdGljIGlubGluZSBib29sIG9ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYikKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiAKICNlbmRpZiAvKiBDT05GSUdfU0xBQl9PQkpfRVhUICovCiAKZGlmZiAtLWdpdCBhL21tL3NsYWJfY29tbW9uLmMgYi9tbS9zbGFiX2NvbW1vbi5jCmluZGV4IDAzZWNhYzEyY2Q4NjVmLi40ZTk4M2UyNTAzMzg3YSAxMDA2NDQKLS0tIGEvbW0vc2xhYl9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zbGFiX2NvbW1vbi5jCkBAIC01Miw3ICYjNDM7NTIsNyBAQCBzdHJ1Y3Qga21lbV9jYWNoZSAqa21lbV9jYWNoZTsKIAkJU0xBQl9PQkpfRVhUX0lOX09CSikKIAogI2RlZmluZSBTTEFCX01FUkdFX1NBTUUgKFNMQUJfUkVDTEFJTV9BQ0NPVU5UIHwgU0xBQl9DQUNIRV9ETUEgfCBcCi0JCQkgU0xBQl9DQUNIRV9ETUEzMiB8IFNMQUJfQUNDT1VOVCkKJiM0MzsJCQkgU0xBQl9DQUNIRV9ETUEzMiB8IFNMQUJfQUNDT1VOVCB8IFNMQUJfTUFZX0FDQ09VTlQpCiAKIC8qCiAgKiBNZXJnZSBjb250cm9sLiBJZiB0aGlzIGlzIHNldCB0aGVuIG5vIG1lcmdpbmcgb2Ygc2xhYiBjYWNoZXMgd2lsbCBvY2N1ci4KQEAgLTM1OSw2ICYjNDM7MzU5LDEzIEBAIHN0cnVjdCBrbWVtX2NhY2hlICpfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MoY29uc3QgY2hhciAqbmFtZSwKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBGb3Igbm93IHdlIGFzc3VtZSBhbnkgY2FjaGUgY2FuIGJlIHVzZWQgd2l0aCBfX0dGUF9BQ0NPVU5UIGFuZCB0aHVzCiYjNDM7CSAqIG1heSBuZWVkIHRvIHN0b3JlIG9iamNnIHBvaW50ZXJzIGZvciBvYmplY3RzCiYjNDM7CSAqLwomIzQzOwlpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKQomIzQzOwkJZmxhZ3MgfD0gU0xBQl9NQVlfQUNDT1VOVDsKJiM0MzsKIAkvKiBGYWlsIGNsb3NlZCBvbiBiYWQgdXNlcnNpemUgb2YgdXNlcm9mZnNldCB2YWx1ZXMuICovCiAJaWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgfHwKIAkgICAgV0FSTl9PTighYXJncy0mZ3Q7dXNlcnNpemUgJmFtcDsmYW1wOyBhcmdzLSZndDt1c2Vyb2Zmc2V0KSB8fApAQCAtOTg0LDExICYjNDM7OTkxLDE5IEBAIG5ld19rbWFsbG9jX2NhY2hlKGludCBpZHgsIGVudW0ga21hbGxvY19jYWNoZV90eXBlIHR5cGUpCiAjZW5kaWYKIAogCS8qCi0JICogSWYgQ09ORklHX01FTUNHIGlzIGVuYWJsZWQsIGRpc2FibGUgY2FjaGUgbWVyZ2luZyBmb3IKLQkgKiBLTUFMTE9DX05PUk1BTCBjYWNoZXMuCiYjNDM7CSAqIElmIG1lbWNnX2ttZW0gaXMgZW5hYmxlZCBhbmQgdGhpcyBpcyBhIEtNQUxMT0NfTk9STUFMIGNhY2hlIGFuZCAgbm90CiYjNDM7CSAqIGFsaWFzZWQgd2l0aCBhbnkgb3RoZXIgdHlwZSwgbWFrZSBzdXJlIGl0JiMzOTtzIG5ldmVyIG1lcmdlZCB3aXRoIGFueSBvdGhlcgomIzQzOwkgKiBjYWNoZS4KJiM0MzsJICoKJiM0MzsJICogSW4gb3RoZXIgY2FzZXMgdGhlIGttYWxsb2MgY2FjaGUgbWF5IGVuZCB1cCBiZWluZyB1c2VkIGZvciBhCiYjNDM7CSAqIF9fR0ZQX0FDQ09VTlQgYWxsb2NhdGlvbiBzbyBtYXJrIGl0IGFzIHN1Y2gKIAkgKi8KLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNQ0cpICZhbXA7JmFtcDsgKHR5cGUgPT0gS01BTExPQ19OT1JNQUwpKQotCQlmbGFncyB8PSBTTEFCX05PX01FUkdFOwomIzQzOwlpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKSB7CiYjNDM7CQlpZiAodHlwZSA9PSBLTUFMTE9DX05PUk1BTCAmYW1wOyZhbXA7IEtNQUxMT0NfUkVDTEFJTSAhPSBLTUFMTE9DX05PUk1BTCkKJiM0MzsJCQlmbGFncyB8PSBTTEFCX05PX01FUkdFOwomIzQzOwkJZWxzZQomIzQzOwkJCWZsYWdzIHw9IFNMQUJfTUFZX0FDQ09VTlQ7CiYjNDM7CX0KIAogCWlmIChtaW5hbGlnbiAmZ3Q7IEFSQ0hfS01BTExPQ19NSU5BTElHTikgewogCQlhbGlnbmVkX3NpemUgPSBBTElHTihhbGlnbmVkX3NpemUsIG1pbmFsaWduKTsKZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCAwMzM3ZTYwZGI1YWNlMC4uZTYxNDhiNzNiOTJmODggMTAwNjQ0Ci0tLSBhL21tL3NsdWIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmMKQEAgLTIxMyw2ICYjNDM7MjEzLDExIEBAIERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHNsdWJfZGVidWdfZW5hYmxlZCk7CiBzdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc3RyaWN0X251bWEpOwogI2VuZGlmCiAKJiM0MzsjaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcKJiM0MztERUZJTkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFQsCiYjNDM7CQkJc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7CiYjNDM7I2VuZGlmCiYjNDM7CiAvKiBTdHJ1Y3R1cmUgaG9sZGluZyBleHRyYSBwYXJhbWV0ZXJzIGZvciBzbGFiIGFsbG9jYXRpb25zICovCiBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0IHsKIAl1bnNpZ25lZCBsb25nIGNhbGxlcl9hZGRyOwpAQCAtODAzLDcgJiM0Mzs4MDgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9zbGFiX29ial9leHRzKHN0cnVjdCBrbWVtX2NhY2hlICpzKQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfZXh0c19zaXplX2luX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpCiB7Ci0JcmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc2xhYi0mZ3Q7b2JqZWN0czsKJiM0MzsJcmV0dXJuIHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpICogc2xhYi0mZ3Q7b2JqZWN0czsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG9ial9leHRzX29mZnNldF9pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLApAQCAtODcwLDE4ICYjNDM7ODc1LDYgQEAgc3RhdGljIGlubGluZSBib29sIG9ial9leHRzX2luX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKQogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19TTEFCX09CSl9FWFQpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfNjRCSVQpCi1zdGF0aWMgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKQotewotCS8qCi0JICogTm90ZSB3ZSBjYW5ub3QgcmVseSBvbiB0aGUgU0xBQl9PQkpfRVhUX0lOX09CSiBmbGFnIGhlcmUgYW5kIG5lZWQgdG8KLQkgKiBjaGVjayB0aGUgc3RyaWRlLiBBIGNhY2hlIGNhbiBoYXZlIFNMQUJfT0JKX0VYVF9JTl9PQkogc2V0LCBidXQKLQkgKiBhbGxvY2F0aW9ucyB3aXRoaW5fc2xhYl9sZWZ0b3ZlciBhcmUgcHJlZmVycmVkLiBBbmQgdGhvc2UgbWF5IGJlCi0JICogcG9zc2libGUgb3Igbm90IGRlcGVuZGluZyBvbiB0aGUgcGFydGljdWxhciBzbGFiJiMzOTtzIHNpemUuCi0JICovCi0JcmV0dXJuIG9ial9leHRzX2luX3NsYWIocywgc2xhYikgJmFtcDsmYW1wOwotCSAgICAgICAoc2xhYl9nZXRfc3RyaWRlKHNsYWIpID09IHMtJmd0O3NpemUpOwotfQotCiBzdGF0aWMgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpCiB7CiAJdW5zaWduZWQgaW50IG9mZnNldCA9IGdldF9pbmZvX2VuZChzKTsKQEAgLTg5NiwxNiAmIzQzOzg4OSwyMCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpCiAKIAlyZXR1cm4gb2Zmc2V0OwogfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpCiB7Ci0JcmV0dXJuIGZhbHNlOwomIzQzOwlzbGFiLSZndDtvYmpfZXh0c19pbl9vYmplY3QgPSAxOwogfQotCiYjNDM7I2Vsc2UKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpCiB7CiAJcmV0dXJuIDA7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X29ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYikKJiM0Mzt7CiYjNDM7fQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU0xVQl9ERUJVRwpAQCAtMTIwNiw4ICYjNDM7MTIwMyw4IEBAIHN0YXRpYyB2b2lkIHByaW50X3RyYWlsZXIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB1OCAqcCkKIAogCW9mZiAmIzQzOz0ga2FzYW5fbWV0YWRhdGFfc2l6ZShzLCBmYWxzZSk7CiAKLQlpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKQotCQlvZmYgJiM0Mzs9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpOwomIzQzOwlpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKQomIzQzOwkJb2ZmICYjNDM7PSBzbGFiX29ial9leHRfc2l6ZShzbGFiKTsKIAogCWlmIChvZmYgIT0gc2l6ZV9mcm9tX29iamVjdChzKSkKIAkJLyogQmVnaW5uaW5nIG9mIHRoZSBmaWxsZXIgaXMgdGhlIGZyZWUgcG9pbnRlciAqLwpAQCAtMTQxMSw4ICYjNDM7MTQwOCw4IEBAIHN0YXRpYyBpbnQgY2hlY2tfcGFkX2J5dGVzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdTggKnApCiAKIAlvZmYgJiM0Mzs9IGthc2FuX21ldGFkYXRhX3NpemUocywgZmFsc2UpOwogCi0JaWYgKG9ial9leHRzX2luX29iamVjdChzLCBzbGFiKSkKLQkJb2ZmICYjNDM7PSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KTsKJiM0MzsJaWYgKG9ial9leHRzX2luX29iamVjdChzbGFiKSkKJiM0MzsJCW9mZiAmIzQzOz0gc2xhYl9vYmpfZXh0X3NpemUoc2xhYik7CiAKIAlpZiAoc2l6ZV9mcm9tX29iamVjdChzKSA9PSBvZmYpCiAJCXJldHVybiAxOwpAQCAtMTQzOSw3ICYjNDM7MTQzNiw3IEBAIHNsYWJfcGFkX2NoZWNrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYikKIAlsZW5ndGggPSBzbGFiX3NpemUoc2xhYik7CiAJZW5kID0gc3RhcnQgJiM0MzsgbGVuZ3RoOwogCi0JaWYgKG9ial9leHRzX2luX3NsYWIocywgc2xhYikgJmFtcDsmYW1wOyAhb2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKSB7CiYjNDM7CWlmIChvYmpfZXh0c19pbl9zbGFiKHMsIHNsYWIpICZhbXA7JmFtcDsgIW9ial9leHRzX2luX29iamVjdChzbGFiKSkgewogCQlyZW1haW5kZXIgPSBsZW5ndGg7CiAJCXJlbWFpbmRlciAtPSBvYmpfZXh0c19vZmZzZXRfaW5fc2xhYihzLCBzbGFiKTsKIAkJcmVtYWluZGVyIC09IG9ial9leHRzX3NpemVfaW5fc2xhYihzbGFiKTsKQEAgLTIwNzAsMjAgJiM0MzsyMDY3LDI2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX29ial9jb2RldGFnX2VtcHR5KGNvbnN0IHZvaWQgKm9iaikKIAlvYmpfc2xhYiA9IHZpcnRfdG9fc2xhYihvYmopOwogCXNsYWJfZXh0cyA9IHNsYWJfb2JqX2V4dHMob2JqX3NsYWIpOwogCWlmIChzbGFiX2V4dHMpIHsKJiM0MzsJCXN0cnVjdCBzbGFib2JqX2V4dCAqZXh0OwomIzQzOwkJdW5pb24gY29kZXRhZ19yZWYgKnJlZjsKJiM0MzsKIAkJZ2V0X3NsYWJfb2JqX2V4dHMoc2xhYl9leHRzKTsKLQkJdW5zaWduZWQgaW50IG9mZnMgPSBvYmpfdG9faW5kZXgob2JqX3NsYWItJmd0O3NsYWJfY2FjaGUsCi0JCQkJCQkgb2JqX3NsYWIsIG9iaik7Ci0JCXN0cnVjdCBzbGFib2JqX2V4dCAqZXh0ID0gc2xhYl9vYmpfZXh0KG9ial9zbGFiLAotCQkJCQkJICAgICAgIHNsYWJfZXh0cywgb2Zmcyk7CiYjNDM7CQlleHQgPSBzbGFiX29ial9leHQob2JqX3NsYWItJmd0O3NsYWJfY2FjaGUsIG9ial9zbGFiLCBzbGFiX2V4dHMsIG9iaik7CiYjNDM7CQlyZWYgPSBzbGFiX29ial9leHRfY29kZXRhZ19yZWYob2JqX3NsYWIsIGV4dCk7CiYjNDM7CiYjNDM7CQlpZiAoaXNfa2ZlbmNlX2FkZHJlc3Mob2JqKSkgewomIzQzOwkJCXB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQogCi0JCWlmICh1bmxpa2VseShpc19jb2RldGFnX2VtcHR5KCZhbXA7ZXh0LSZndDtyZWYpKSkgewomIzQzOwkJaWYgKHVubGlrZWx5KGlzX2NvZGV0YWdfZW1wdHkocmVmKSkpIHsKIAkJCXB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7CiAJCQlyZXR1cm47CiAJCX0KIAogCQkvKiBjb2RldGFnIHNob3VsZCBiZSBOVUxMIGhlcmUgKi8KLQkJV0FSTl9PTihleHQtJmd0O3JlZi5jdCk7Ci0JCXNldF9jb2RldGFnX2VtcHR5KCZhbXA7ZXh0LSZndDtyZWYpOwomIzQzOwkJV0FSTl9PTihyZWYtJmd0O2N0KTsKJiM0MzsJCXNldF9jb2RldGFnX2VtcHR5KHJlZik7CiAJCXB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7CiAJfQogfQpAQCAtMjA5MywxOSAmIzQzOzIwOTYsMjkgQEAgc3RhdGljIGlubGluZSBib29sIG1hcmtfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIpCiAJcmV0dXJuIGNtcHhjaGcoJmFtcDtzbGFiLSZndDtvYmpfZXh0cywgMCwgT0JKRVhUU19BTExPQ19GQUlMKSA9PSAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsCi0JCQlzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYywgdW5zaWduZWQgaW50IG9iamVjdHMpCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYiwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsIHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjKQogewomIzQzOwl1bnNpZ25lZCBpbnQgc3RyaWRlOwomIzQzOwomIzQzOwlpZiAoIW1lbV9hbGxvY19wcm9maWxpbmdfZW5hYmxlZCgpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCS8qCiAJICogSWYgdmVjdG9yIHByZXZpb3VzbHkgZmFpbGVkIHRvIGFsbG9jYXRlIHRoZW4gd2UgaGF2ZSBsaXZlCiAJICogb2JqZWN0cyB3aXRoIG5vIHRhZyByZWZlcmVuY2UuIE1hcmsgYWxsIHJlZmVyZW5jZXMgaW4gdGhpcwogCSAqIHZlY3RvciBhcyBlbXB0eSB0byBhdm9pZCB3YXJuaW5ncyBsYXRlciBvbi4KIAkgKi8KLQlpZiAob2JqX2V4dHMgPT0gT0JKRVhUU19BTExPQ19GQUlMKSB7Ci0JCXVuc2lnbmVkIGludCBpOwomIzQzOwlpZiAob2JqX2V4dHMgIT0gT0JKRVhUU19BTExPQ19GQUlMKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzdHJpZGUgPSBzbGFiX29ial9leHRfc2l6ZShzbGFiKSAvIHNpemVvZigqdmVjKTsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBzbGFiLSZndDtvYmplY3RzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdW5pb24gY29kZXRhZ19yZWYgKnJlZiA9IHNsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihzbGFiLCB2ZWMpOwogCi0JCWZvciAoaSA9IDA7IGkgJmx0OyBvYmplY3RzOyBpJiM0MzsmIzQzOykKLQkJCXNldF9jb2RldGFnX2VtcHR5KCZhbXA7dmVjW2ldLnJlZik7CiYjNDM7CQlzZXRfY29kZXRhZ19lbXB0eShyZWYpOwomIzQzOwkJdmVjICYjNDM7PSBzdHJpZGU7CiAJfQogfQogCkBAIC0yMTEzLDggJiM0MzsyMTI2LDggQEAgc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyh1bnNpZ25lZCBsb25nIG9ial9leHRzLAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWFya19vYmpfY29kZXRhZ19lbXB0eShjb25zdCB2b2lkICpvYmopIHt9CiBzdGF0aWMgaW5saW5lIGJvb2wgbWFya19mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYikgeyByZXR1cm4gZmFsc2U7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cywKLQkJCXN0cnVjdCBzbGFib2JqX2V4dCAqdmVjLCB1bnNpZ25lZCBpbnQgb2JqZWN0cykge30KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiLAomIzQzOwkJdW5zaWduZWQgbG9uZyBvYmpfZXh0cywgc3RydWN0IHNsYWJvYmpfZXh0ICp2ZWMpIHt9CiAKICNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqLwogCkBAIC0yMTI3LDEyICYjNDM7MjE0MCwxMSBAQCBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsCiAJCQlnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncykKIHsKIAljb25zdCBib29sIGFsbG93X3NwaW4gPSBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhbGxvY19mbGFncyk7Ci0JdW5zaWduZWQgaW50IG9iamVjdHMgPSBvYmpzX3Blcl9zbGFiKHMsIHNsYWIpOwogCWJvb2wgbmV3X3NsYWIgPSBhbGxvY19mbGFncyAmYW1wOyBTTEFCX0FMTE9DX05FV19TTEFCOwogCXVuc2lnbmVkIGxvbmcgbmV3X2V4dHM7CiAJdW5zaWduZWQgbG9uZyBvbGRfZXh0czsKIAlzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYzsKLQlzaXplX3Qgc3ogPSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHNsYWItJmd0O29iamVjdHM7CiYjNDM7CXNpemVfdCBzeiA9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpICogc2xhYi0mZ3Q7b2JqZWN0czsKIAogCWdmcCAmYW1wOz0gfk9CSkNHU19DTEVBUl9NQVNLOwogCS8qCkBAIC0yMTgzLDcgJiM0MzsyMTk1LDcgQEAgaW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLAogI2VuZGlmCiByZXRyeToKIAlvbGRfZXh0cyA9IFJFQURfT05DRShzbGFiLSZndDtvYmpfZXh0cyk7Ci0JaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKG9sZF9leHRzLCB2ZWMsIG9iamVjdHMpOwomIzQzOwloYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Moc2xhYiwgb2xkX2V4dHMsIHZlYyk7CiAKIAlpZiAobmV3X3NsYWIpIHsKIAkJLyoKQEAgLTIyNTAsOSAmIzQzOzIyNjIsNiBAQCBzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYikKIAl2b2lkICphZGRyOwogCXVuc2lnbmVkIGxvbmcgb2JqX2V4dHM7CiAKLQkvKiBJbml0aWFsaXplIHN0cmlkZSBlYXJseSB0byBhdm9pZCBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzICovCi0Jc2xhYl9zZXRfc3RyaWRlKHNsYWIsIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKTsKLQogCWlmICghbmVlZF9zbGFiX29ial9leHRzKHMpKQogCQlyZXR1cm47CiAKQEAgLTIyNzgsMTUgJiM0MzsyMjg3LDE0IEBAIHN0YXRpYyB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKQogCiAJCWdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKIAkJZm9yX2VhY2hfb2JqZWN0KGFkZHIsIHMsIHNsYWJfYWRkcmVzcyhzbGFiKSwgc2xhYi0mZ3Q7b2JqZWN0cykKLQkJCW1lbXNldChrYXNhbl9yZXNldF90YWcoYWRkcikgJiM0Mzsgb2Zmc2V0LCAwLAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKTsKJiM0MzsJCQltZW1zZXQoa2FzYW5fcmVzZXRfdGFnKGFkZHIpICYjNDM7IG9mZnNldCwgMCwgc2xhYl9vYmpfZXh0X3NpemUoc2xhYikpOwogCQlwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7CiAKICNpZmRlZiBDT05GSUdfTUVNQ0cKIAkJb2JqX2V4dHMgfD0gTUVNQ0dfREFUQV9PQkpFWFRTOwogI2VuZGlmCiAJCXNsYWItJmd0O29ial9leHRzID0gb2JqX2V4dHM7Ci0JCXNsYWJfc2V0X3N0cmlkZShzbGFiLCBzLSZndDtzaXplKTsKJiM0MzsJCXNsYWJfc2V0X29ial9leHRzX2luX29iamVjdChzbGFiKTsKIAl9CiB9CiAKQEAgLTIzNTIsNiAmIzQzOzIzNjAsOSBAQCBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIGdmcF90IGZsYWdzLAogCWlmIChhbGxvY19mbGFncyAmYW1wOyBTTEFCX0FMTE9DX05PX1JFQ1VSU0UpCiAJCXJldHVybjsKIAomIzQzOwlpZiAoaXNfa2ZlbmNlX2FkZHJlc3Mob2JqZWN0KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlzbGFiID0gdmlydF90b19zbGFiKG9iamVjdCk7CiAJb2JqX2V4dHMgPSBwcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzLCBzbGFiLCBmbGFncywgYWxsb2NfZmxhZ3MsIG9iamVjdCk7CiAJLyoKQEAgLTIzNjAsMTEgJiM0MzsyMzcxLDE1IEBAIF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgZ2ZwX3QgZmxhZ3MsCiAJICogY2hlY2sgc2hvdWxkIGJlIGFkZGVkIGJlZm9yZSBhbGxvY190YWdfYWRkKCkuCiAJICovCiAJaWYgKG9ial9leHRzKSB7Ci0JCXVuc2lnbmVkIGludCBvYmpfaWR4ID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIG9iamVjdCk7CiYjNDM7CQl1bmlvbiBjb2RldGFnX3JlZiAqcmVmOwogCiAJCWdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKLQkJb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2JqX2lkeCk7Ci0JCWFsbG9jX3RhZ19hZGQoJmFtcDtvYmpfZXh0LSZndDtyZWYsIGN1cnJlbnQtJmd0O2FsbG9jX3RhZywgcy0mZ3Q7c2l6ZSk7CiYjNDM7CiYjNDM7CQlvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBvYmplY3QpOwomIzQzOwkJcmVmID0gc2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKHNsYWIsIG9ial9leHQpOwomIzQzOwomIzQzOwkJYWxsb2NfdGFnX2FkZChyZWYsIGN1cnJlbnQtJmd0O2FsbG9jX3RhZywgcy0mZ3Q7c2l6ZSk7CiYjNDM7CiAJCXB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKIAl9IGVsc2UgewogCQlhbGxvY190YWdfc2V0X2luYWNjdXJhdGUoY3VycmVudC0mZ3Q7YWxsb2NfdGFnKTsKQEAgLTIzODQsNyAmIzQzOzIzOTksNiBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZAogX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsCiAJCQkgICAgICAgaW50IG9iamVjdHMpCiB7Ci0JaW50IGk7CiAJdW5zaWduZWQgbG9uZyBvYmpfZXh0czsKIAogCS8qIHNsYWItJmd0O29ial9leHRzIG1pZ2h0IG5vdCBiZSBOVUxMIGlmIGl0IHdhcyBjcmVhdGVkIGZvciBNRU1DRyBhY2NvdW50aW5nLiAqLwpAQCAtMjM5NiwxMCAmIzQzOzI0MTAsMTQgQEAgX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAKIAkJcmV0dXJuOwogCiAJZ2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpOwotCWZvciAoaSA9IDA7IGkgJmx0OyBvYmplY3RzOyBpJiM0MzsmIzQzOykgewotCQl1bnNpZ25lZCBpbnQgb2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHBbaV0pOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IG9iamVjdHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3Qgc2xhYm9ial9leHQgKmV4dDsKJiM0MzsKJiM0MzsJCWlmIChpc19rZmVuY2VfYWRkcmVzcyhwW2ldKSkKJiM0MzsJCQljb250aW51ZTsKIAotCQlhbGxvY190YWdfc3ViKCZhbXA7c2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpLSZndDtyZWYsIHMtJmd0O3NpemUpOwomIzQzOwkJZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwW2ldKTsKJiM0MzsJCWFsbG9jX3RhZ19zdWIoc2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKHNsYWIsIGV4dCksIHMtJmd0O3NpemUpOwogCX0KIAlwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7CiB9CkBAIC0yNDEyLDYgJiM0MzsyNDMwLDI1IEBAIGFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCwKIAkJX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAsIG9iamVjdHMpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBNYWtlIHN1cmUgdGhlIHN0YXRpYyBrZXkgdXNlZCBieSBzbGFiX29ial9leHRfaGFzX2NvZGV0YWcoKSByZWZsZWN0cyB0aGUKJiM0MzsgKiB2YWx1ZSBvZiAhbWVtX2FsbG9jX3Byb2ZpbGluZ19wZXJtYW5lbnRseV9kaXNhYmxlZCgpCiYjNDM7ICoKJiM0MzsgKiBBbnkgbGF0ZXIgbWVtIGFsbG9jIHByb2ZpbGluZyBzaHV0ZG93biB3b24mIzM5O3QgYmUgcmVmbGVjdGVkIGluIHRoZSBzdGF0aWMga2V5CiYjNDM7ICogYmVjYXVzZSBvYmpfZXh0cyB3aXRoIGNvZGV0YWdzIG1pZ2h0IGFscmVhZHkgZXhpc3QuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgX19pbml0IHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19pbml0KHZvaWQpCiYjNDM7ewomIzQzOwlib29sIG5lZWRfY29kZXRhZyA9ICFtZW1fYWxsb2NfcHJvZmlsaW5nX3Blcm1hbmVudGx5X2Rpc2FibGVkKCk7CiYjNDM7CiYjNDM7CWlmIChuZWVkX2NvZGV0YWcgIT0gc3RhdGljX2tleV9lbmFibGVkKCZhbXA7c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSkpIHsKJiM0MzsJCWlmIChuZWVkX2NvZGV0YWcpCiYjNDM7CQkJc3RhdGljX2JyYW5jaF9lbmFibGUoJmFtcDtzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfa2V5KTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlzdGF0aWNfYnJhbmNoX2Rpc2FibGUoJmFtcDtzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfa2V5KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKICNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtMjQyNiw2ICYjNDM7MjQ2MywxMCBAQCBhbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsCiB7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7fQomIzQzOwogI2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovCiAKIApAQCAtMjQ3MSw2ICYjNDM7MjUxMiw5IEBAIHZvaWQgbWVtY2dfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCwKIAlpZiAobGlrZWx5KCFvYmpfZXh0cykpCiAJCXJldHVybjsKIAomIzQzOwlpZiAoIXNsYWJfbmVlZHNfb2JqY2coc2xhYikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJZ2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpOwogCV9fbWVtY2dfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCwgb2JqZWN0cywgb2JqX2V4dHMpOwogCXB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKQEAgLTI0ODQsNyAmIzQzOzI1MjgsNiBAQCBib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpCiAJc3RydWN0IGttZW1fY2FjaGUgKnM7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJc3RydWN0IHNsYWIgKnNsYWI7Ci0JdW5zaWduZWQgbG9uZyBvZmY7CiAKIAlwYWdlID0gdmlydF90b19wYWdlKHApOwogCWlmIChQYWdlTGFyZ2VLbWFsbG9jKHBhZ2UpKSB7CkBAIC0yNTE3LDE2ICYjNDM7MjU2MCwxNSBAQCBib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpCiAJICogb2Ygc2xhYl9vYmpfZXh0cyBiZWluZyBhbGxvY2F0ZWQgZnJvbSB0aGUgc2FtZSBzbGFiIGFuZCB0aHVzIHRoZSBzbGFiCiAJICogYmVjb21pbmcgZWZmZWN0aXZlbHkgdW5mcmVlYWJsZS4KIAkgKi8KLQlpZiAoaXNfa21hbGxvY19ub3JtYWwocykpCiYjNDM7CWlmICghY2FjaGVfbmVlZHNfb2JqY2cocykpCiAJCXJldHVybiB0cnVlOwogCiAJLyogSWdub3JlIGFscmVhZHkgY2hhcmdlZCBvYmplY3RzLiAqLwogCW9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTsKIAlpZiAob2JqX2V4dHMpIHsKIAkJZ2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpOwotCQlvZmYgPSBvYmpfdG9faW5kZXgocywgc2xhYiwgcCk7Ci0JCW9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9mZik7Ci0JCWlmICh1bmxpa2VseShvYmpfZXh0LSZndDtvYmpjZykpIHsKJiM0MzsJCW9ial9leHQgPSBzbGFiX29ial9leHQocywgc2xhYiwgb2JqX2V4dHMsIHApOwomIzQzOwkJaWYgKHVubGlrZWx5KHNsYWJfb2JqX2V4dF9vYmpjZyhvYmpfZXh0KSkpIHsKIAkJCXB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTsKIAkJCXJldHVybiB0cnVlOwogCQl9CkBAIC0zMzkxLDEwICYjNDM7MzQzMywxNSBAQCBzdGF0aWMgc3RydWN0IHNsYWIgKmFsbG9jYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLAogCQlzdGF0KHMsIE9SREVSX0ZBTExCQUNLKTsKIAl9CiAKJiM0MzsJLyogSW5pdGlhbGl6ZXMgZnJvemVuLCBpbnVzZSwgYW5kIGFueSBleHRyYSA2NGJpdC1vbmx5IGZsYWdzICovCiYjNDM7CXNsYWItJmd0O2NvdW50ZXJzID0gMDsKJiM0MzsKIAlzbGFiLSZndDtvYmplY3RzID0gb29fb2JqZWN0cyhvbyk7Ci0Jc2xhYi0mZ3Q7aW51c2UgPSAwOwotCXNsYWItJmd0O2Zyb3plbiA9IDA7CiAKJiM0MzsjaWZkZWYgQ09ORklHXzY0QklUCiYjNDM7CWlmIChjYWNoZV9uZWVkc19vYmpjZyhzKSkKJiM0MzsJCXNsYWItJmd0O29ial9leHRzX25lZWRzX29iamNnID0gMTsKJiM0MzsjZW5kaWYKIAlzbGFiLSZndDtzbGFiX2NhY2hlID0gczsKIAogCWthc2FuX3BvaXNvbl9zbGFiKHNsYWIpOwpAQCAtNjUyNiw3ICYjNDM7NjU3Myw3IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IHNsYWJfa3NpemUoc3RydWN0IHNsYWIgKnNsYWIpCiAJICovCiAJaWYgKHMtJmd0O2ZsYWdzICZhbXA7IChTTEFCX1RZUEVTQUZFX0JZX1JDVSB8IFNMQUJfU1RPUkVfVVNFUikpCiAJCXJldHVybiBzLSZndDtpbnVzZTsKLQllbHNlIGlmIChvYmpfZXh0c19pbl9vYmplY3Qocywgc2xhYikpCiYjNDM7CWVsc2UgaWYgKG9ial9leHRzX2luX29iamVjdChzbGFiKSkKIAkJcmV0dXJuIHMtJmd0O2ludXNlOwogCS8qCiAJICogRWxzZSB3ZSBjYW4gdXNlIGFsbCB0aGUgcGFkZGluZyBldGMgZm9yIHRoZSBhbGxvY2F0aW9uCkBAIC03OTI5LDcgJiM0Mzs3OTc2LDcgQEAgc3RhdGljIGludCBjYWxjdWxhdGVfc2l6ZXMoc3RydWN0IGttZW1fY2FjaGVfYXJncyAqYXJncywgc3RydWN0IGttZW1fY2FjaGUgKnMpCiAJYWxpZ25lZF9zaXplID0gQUxJR04oc2l6ZSwgcy0mZ3Q7YWxpZ24pOwogI2lmIGRlZmluZWQoQ09ORklHX1NMQUJfT0JKX0VYVCkgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR182NEJJVCkKIAlpZiAoc2xhYl9hcmdzX3VubWVyZ2VhYmxlKGFyZ3MsIHMtJmd0O2ZsYWdzKSAmYW1wOyZhbXA7Ci0JCQkoYWxpZ25lZF9zaXplIC0gc2l6ZSAmZ3Q7PSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSkpCiYjNDM7CQkJKGFsaWduZWRfc2l6ZSAtIHNpemUgJmd0Oz0gY2FjaGVfb2JqX2V4dF9zaXplKHMpKSkKIAkJcy0mZ3Q7ZmxhZ3MgfD0gU0xBQl9PQkpfRVhUX0lOX09CSjsKICNlbmRpZgogCXNpemUgPSBhbGlnbmVkX3NpemU7CkBAIC04NTM5LDYgJiM0Mzs4NTg2LDggQEAgdm9pZCBfX2luaXQga21lbV9jYWNoZV9pbml0KHZvaWQpCiAJCWJvb3Rfa21lbV9jYWNoZV9ub2RlOwogCWludCBub2RlOwogCiYjNDM7CXNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19pbml0KCk7CiYjNDM7CiAJaWYgKGRlYnVnX2d1YXJkcGFnZV9taW5vcmRlcigpKQogCQlzbHViX21heF9vcmRlciA9IDA7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU2xhYiBPYmplY3QgRXh0ZW5zaW9uIE9wdGltaXphdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdHdlYWtpbmcgaG93IGBzdHJ1Y3Qgc2xhYm9ial9leHRgIGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBhbmQgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIOKAkyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgZ29hbCBpcyB0byBvcHRpbWl6ZSB0aGUgc3RydWN0dXJlIGJ5IHVzaW5nIGEgdW5pb24gdG8gc3RvcmUgcG9pbnRlcnMgdG8gYG9iamNnYCBhbmQgYGNvZGV0YWdfcmVmYCwgb3IgYWxsb2NhdGluZyBzcGFjZSBmb3IgdGhlbSBvbmx5IHdoZW4gdGhleSYjMzk7cmUgYWN0dWFsbHkgbmVlZGVkLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBhIGNvbW1vbiBzdHJhdGVneSBmb3IgcmVkdWNpbmcgbWVtb3J5IG92ZXJoZWFkIGluIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGFyZWFzIGxpa2UgdGhlIHNsYWIgYWxsb2NhdG9yLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBTTEFCX01BWV9BQ0NPVU5UYCBpcyBhIG5pY2UgdG91Y2gsIHRvbzsgaXQgYWRkcyBhIGJpdCBtb3JlIGZpbmUtZ3JhaW5lZCBjb250cm9sLgoKRnVuY3Rpb25hbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGJyZWFrIGFueXRoaW5nLiBJdCBkZWZpbml0ZWx5IHRvdWNoZXMgY29yZSBzbGFiIGFsbG9jYXRvciBsb2dpYyBhbmQgbWVtY2cgYWNjb3VudGluZywgc28gYW55IG1pc3N0ZXBzIGhlcmUgY291bGQgaGF2ZSBwcmV0dHkgd2lkZS1yZWFjaGluZyBjb25zZXF1ZW5jZXMuIEFuZCwgeWVhaCwgZ2l2ZW4gaG93IGhlYXZpbHkgc2xhYiBhbGxvY2F0aW9uIGlzIHVzZWQgdGhyb3VnaG91dCB0aGUga2VybmVsLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlLiBXb3J0aCBhIGZ1enppbmcgY2FtcGFpZ24gdG8gc2VlIGlmIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9ycyBhcmlzZS4KCk5vdywgbGV04oCZcyBwaW5wb2ludCB0aGUgc3BlY2lmaWMgYXJlYXMgdG8gc2NydXRpbml6ZS4gSSYjMzk7dmUgZ290IGEgbGlzdCBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zOiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AsIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rYCwgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2AsIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYCwgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgLCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AsIGBrZmVuY2VfaW5pdF9wb29sYCwgYF9fa2ZlbmNlX2ZyZWVgLCBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYCwgYGttZW1fY2FjaGVfY3JlYXRlX2FyZ3NgLCBhbmQgYG5ld19rbWFsbG9jX2NhY2hlYC4gQWxyaWdodCwgbGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgbW0vc2x1Yi5jYCBhbmQgc3BlY2lmaWNhbGx5LCB0aGF0IGBhbGxvY19zbGFiX29ial9leHRzYCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19zbGFiX29ial9leHRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz0yMTM0PXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jLTIxMzgtXG5tbS9zbHViLmM6MjEzOTppbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjE0MC1cdFx0XHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9zbHViLmM9MjIyOD1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXG4tLVxubW0vc2x1Yi5jLTIyNTktICovXG5tbS9zbHViLmM6MjI2MDpzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbm1tL3NsdWIuYy0yMjYxLXtcbi0tXG5tbS9zbHViLmM9MjMwNz1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy0yMzEwLVxubW0vc2x1Yi5jOjIzMTE6c3RhdGljIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMzEyLVx0XHRcdCAgICAgICBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9zbHViLmM9MjMxNz1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXG4tLVxubW0vc2x1Yi5jLTIzMjAtXG5tbS9zbHViLmM6MjMyMTpzdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMzIyLVx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmM9MjMzMT1wcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4tLVxubW0vc2x1Yi5jLTIzMzQtXHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXHUwMDI2XHUwMDI2XG5tbS9zbHViLmM6MjMzNTpcdCAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBhbGxvY19mbGFncykpIHtcbm1tL3NsdWIuYy0yMzM2LVx0XHRwcl93YXJuX29uY2UoXCYjMzQ7JXMsICVzOiBGYWlsZWQgdG8gY3JlYXRlIHNsYWIgZXh0ZW5zaW9uIHZlY3RvciFcXG5cJiMzNDssXG4tLVxubW0vc2x1Yi5jPTMzNzI9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGFjY291bnRfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgaW50IG9yZGVyLFxuLS1cbm1tL3NsdWIuYy0zMzc4LVx0XHRcdCFzbGFiX29ial9leHRzKHNsYWIpKVxubW0vc2x1Yi5jOjMzNzk6XHRcdGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZ2ZwLFxubW0vc2x1Yi5jLTMzODAtXHRcdFx0XHQgICAgYWxsb2NfZmxhZ3MgfCBTTEFCX0FMTE9DX05FV19TTEFCKTtcbi0tXG5tbS9zbHViLmM9MzQwMT1zdGF0aWMgc3RydWN0IHNsYWIgKmFsbG9jYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuLS1cbm1tL3NsdWIuYy0zNDU2LVx0ICovXG5tbS9zbHViLmM6MzQ1NzpcdGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkocywgc2xhYik7XG5tbS9zbHViLmMtMzQ1OC1cdGFjY291bnRfc2xhYihzbGFiLCBvb19vcmRlcihvbyksIHMsIGZsYWdzLCBhbGxvY19mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MTQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBTbGFiIEFsbG9jYXRvciBIb29rcyBpbiBtZW1jb250cm9sLmMqKgoKQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCAobWVtY2cpIHN5c3RlbSBhbmQgdGhlIHNsYWIgYWxsb2NhdG9yLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSBtZW1jZyBob29rcyBpbnRvIHRoZSBzbGFiIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgcHJvY2Vzc2VzLiBUaGF0IG1lYW5zIGRpZ2dpbmcgaW50byBgbW0vbWVtY29udHJvbC5jYCwgc2luY2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBtZW1jZyBsb2dpYyByZXNpZGVzLCBhcyBhIHN0YXJ0aW5nIHBvaW50LgoKTXkgcHJpbWFyeSB0YXJnZXRzIGFyZSB0aGUgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgIGFuZCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AgZnVuY3Rpb25zLiBUaGUgbmFtZXMgdGhlbXNlbHZlcyBhcmUgYSBzdHJvbmcgY2x1ZS4gYHBvc3RfYWxsb2NgIGltcGxpZXMgc29tZXRoaW5nIHRoYXQgaGFwcGVucyBhZnRlciBhIHNsYWIgb2JqZWN0IGlzIGFsbG9jYXRlZC4gVGhlIGBmcmVlX2hvb2tgIGlzIHdoYXQgcnVucyBhZnRlciBhIHNsYWIgaXMgZnJlZWQuIFRoZXNlIGhvb2tzIGFyZSBsaWtlbHkgdGhlIGVudHJ5IHBvaW50cyB3aGVyZSBtZW1jZyB0cmFja3MgbWVtb3J5IHVzYWdlIHRpZWQgdG8gc2xhYnMsIGFjY291bnRpbmcgZm9yIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gZGlmZmVyZW50IGNvbnRyb2wgZ3JvdXBzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSAqaG93KiB0aGVzZSBob29rcyBhcmUgdXNlZCBhbmQgd2hhdCBjb250ZXh0IHRoZXkgb3BlcmF0ZSB3aXRoaW4uIEl0JiMzOTtsbCBiZSBlc3NlbnRpYWwgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgaG9va3MgYXJlIHJlZ2lzdGVyZWQgYW5kIGNhbGxlZCBpbiB0aGUgc2xhYiBhbGxvY2F0b3ImIzM5O3MgZnVuY3Rpb25zLiBJIGFudGljaXBhdGUgdGhlIGRldGFpbHMgYXJlIGVtYmVkZGVkIGluc2lkZSB0aGUgYWxsb2NhdG9yJiMzOTtzIHNvdXJjZSBjb2RlLCBwb3NzaWJseSBpbiBmdW5jdGlvbnMgbGlrZSBga21lbV9jYWNoZV9hbGxvY2Agb3IgYGttZW1fY2FjaGVfZnJlZWAuIEkgZXhwZWN0IHRoYXQgZmluZGluZyBhbmQgc3R1ZHlpbmcgaG93IHRoZXNlIGhvb2tzIGFyZSByZWdpc3RlcmVkIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBhbGxvY2F0aW9uIGNoYW5nZXMgYXJlIHRyYWNrZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MzUyOT1zdGF0aWMgaW5saW5lIHNpemVfdCBvYmpfZnVsbF9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNTM3LVxubW0vbWVtY29udHJvbC5jOjM1Mzg6Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbm1tL21lbWNvbnRyb2wuYy0zNTM5LVx0XHRcdFx0ICBnZnBfdCBmbGFncywgdW5zaWduZWQgaW50IHNsYWJfYWxsb2NfZmxhZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwMzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyBTbGFiIEFsbG9jYXRpb24gaW4gdGhlIE1lbW9yeSBDb250cm9sbGVyKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IG1lbW9yeSBjb250cm9sLCBzcGVjaWZpY2FsbHkgaG93IHNsYWJzIGFyZSBtYW5hZ2VkIHdpdGhpbiBhIG1lbWNnIGNvbnRleHQuIFRoZSB0YXNrIGF0IGhhbmQgbGlrZWx5IGludm9sdmVzIGZyZWVpbmcgc29tZSBzbGFiIG9iamVjdHMsIGFuZCB0aGF0IG1lYW5zIGRpdmluZyBpbnRvIHRoZSBtZWNoYW5pY3Mgb2YgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgLiBUaGF0IGZ1bmN0aW9uJiMzOTtzIG5hbWUgaXMgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBpdCYjMzk7cyBpbnZvbHZlZCBpbiwgd2VsbCwgKmhvb2tpbmcqIGludG8gdGhlIHNsYWIgZnJlZWluZyBwcm9jZXNzLCBsaWtlbHkgdG8gcGVyZm9ybSBhY2NvdW50aW5nIG9yIGVuZm9yY2VtZW50IHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cHMuIExldCYjMzk7cyBzdGFydCBieSBjcmFja2luZyBvcGVuIGBtbS9tZW1jb250cm9sLmNgIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBoYXBwZW5pbmcgaW5zaWRlIHRoYXQgZnVuY3Rpb24uIFRoYXQgZmlsZSBpcyB0aGUgY2VudHJhbCBwbGFjZSB0byBiZSBmb3IgdGhpcyBraW5kIG9mIGludmVzdGlnYXRpb24uIEl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGUgbWVtY2cgc3RydWN0dXJlIGFuZCBhc3NvY2lhdGVkIGJvb2trZWVwaW5nIGFyZSBpbnRlZ3JhdGVkIGludG8gdGhlIHN0YW5kYXJkIHNsYWIgZnJlZWluZyBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWVtY2dfc2xhYl9mcmVlX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTM1Mzg9Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzYzMi1cbm1tL21lbWNvbnRyb2wuYzozNjMzOnZvaWQgX19tZW1jZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG5tbS9tZW1jb250cm9sLmMtMzYzNC1cdFx0XHQgICAgdm9pZCAqKnAsIGludCBvYmplY3RzLCB1bnNpZ25lZCBsb25nIG9ial9leHRzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDExCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gU2xhYiBBbGxvY2F0aW9uIFRhZ2dpbmcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNsYWIgYWxsb2NhdG9yJiMzOTtzIHRhZ2dpbmcgaG9va3MuIExldCYjMzk7cyBoZWFkIHN0cmFpZ2h0IGZvciB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgbW0vc2x1Yi5jYC4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2tgIGFuZCBgX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rYCBmdW5jdGlvbnMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gaG9va3MgZm9yIG1lbW9yeSB0YWdnaW5nIGFyZSBhY3R1YWxseSBpbXBsZW1lbnRlZCBhdCB0aGUgc2xhYiBsZXZlbC4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gZXhhbWluZSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSBob29rcyBhbmQgdGhlIHVuZGVybHlpbmcgc2xhYiBtYW5hZ2VtZW50LiBBcmUgdGhleSBpbnRlZ3JhdGVkIGRpcmVjdGx5IGludG8gdGhlIGBrbWVtX2NhY2hlYCBzdHJ1Y3R1cmVzPyBBcmUgdGhleSBjYWxsZWQgaW5saW5lLCBvciBhcmUgdGhleSBtYW5hZ2VkIHZpYSBhIGRpZmZlcmVudCBtZWNoYW5pc20/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIHNlcXVlbmNlIG9mIGV2ZW50cyB3aGVuIG1lbW9yeSB0YWdnaW5nIGlzIGludm9sdmVkIGluIHNsYWIgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLiBJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSG93IG11Y2ggb3ZlcmhlYWQgZG8gdGhlc2UgaG9va3MgaW50cm9kdWNlPyBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbnMgaW4gcGxhY2UgdG8gbWluaW1pemUgdGhlIHBlcmZvcm1hbmNlIGhpdD8gVGhpcyBpcyB3aGVyZSB0aGUgZGV2aWwgaXMgaW4gdGhlIGRldGFpbHMuIEkga25vdyBgc2x1Yi5jYCBpcyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRob3NlIGFuc3dlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTIzNDY9c3RhdGljIG5vaW5saW5lIHZvaWRcbm1tL3NsdWIuYzoyMzQ3Ol9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgZ2ZwX3QgZmxhZ3MsXG5tbS9zbHViLmMtMjM0OC1cdFx0XHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9zbHViLmM9MjM5MD1hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtMjM5My1cdGlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSlcbm1tL3NsdWIuYzoyMzk0Olx0XHRfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHMsIG9iamVjdCwgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcbm1tL3NsdWIuYy0yMzk1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gU2xhYiBBbGxvY2F0aW9uIFRhZ2dpbmcqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSB0YWdnaW5nIG1lY2hhbmlzbXMgd2l0aGluIHRoZSBzbGFiIGFsbG9jYXRvciwgc3BlY2lmaWNhbGx5IGhvdyBmcmVlaW5nIG1lbW9yeSBpcyBoYW5kbGVkLiBUaGUgcXVpY2tlc3Qgcm91dGUgaXMgdXN1YWxseSB0byBqdW1wIGRpcmVjdGx5IGludG8gdGhlIHNvdXJjZSBjb2RlLCBzbyBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBgbW0vc2x1Yi5jYC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB0aGUgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2AgZnVuY3Rpb24uIFRoaXMgaG9vayBsaWtlbHkgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gdGhlIHNwZWNpZmljIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHRhZ2dpbmcgdGhhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4uIFVuZGVyc3RhbmRpbmcgaXRzIGltcGxlbWVudGF0aW9uIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHRhZ2dpbmcgc3RyYXRlZ3kgYW5kIGxpa2VseSBzaGVkcyBsaWdodCBvbiBob3cgYWxsb2NhdGlvbiB0cmFja2luZyBhbmQgaW50ZWdyaXR5IGNoZWNraW5nIGFyZSBwZXJmb3JtZWQgZHVyaW5nIHNsYWIgZnJlZWluZy4gSSBleHBlY3QgaXQmIzM5O3MgZ29pbmcgdG8gYmUgYSBrZXkgZnVuY3Rpb24gaW4gaGFuZGxpbmcgdGFnZ2VkIHNsYWJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTIzOTg9c3RhdGljIG5vaW5saW5lIHZvaWRcbm1tL3NsdWIuYzoyMzk5Ol9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxubW0vc2x1Yi5jLTI0MDAtXHRcdFx0ICAgICAgIGludCBvYmplY3RzKVxuLS1cbm1tL3NsdWIuYz0yNDI2PWFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbi0tXG5tbS9zbHViLmMtMjQyOS1cdGlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSlcbm1tL3NsdWIuYzoyNDMwOlx0XHRfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCwgb2JqZWN0cyk7XG5tbS9zbHViLmMtMjQzMS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Mzk0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkRpdmluZyBpbnRvIFNsYWIgQWNjb3VudGluZyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIHNsYWIgYWNjb3VudGluZyB3aXRoaW4gdGhlIG1lbW9yeSBjb250cm9sbGVyLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VgLiBUaGlzIGlzIHdoZXJlIHRoZSBjcnVjaWFsIHdvcmsgaGFwcGVucyAqYWZ0ZXIqIGEgc2xhYiBhbGxvY2F0aW9uIGhhcyBjb21wbGV0ZWQuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBtZW1vcnkgY29udHJvbCBncm91cHMgYXJlIHVwZGF0ZWQgYWZ0ZXIgbWVtb3J5IGhhcyBiZWVuIGNsYWltZWQgZnJvbSB0aGUgc2xhYiBhbGxvY2F0b3IuIElzIGl0IGEgZ29vZCBpZGVhIHRvIGNoZWNrIHRoaXMgZmlsZSBmaXJzdD8gWWVzLCB0aGF0IGlzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludC4gTGV0JiMzOTtzIHNlZSBob3cgbWVtb3J5IHVzYWdlIGFuZCBsaW1pdHMgYXJlIGJlaW5nIGFkanVzdGVkLiBJIHdhbnQgdG8gc2VlIHRoZSBkZXRhaWxzIG9mIHRoZSBwb3N0LWNoYXJnZSBhY2NvdW50aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNnX3NsYWJfcG9zdF9jaGFyZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU5OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCBleHByZXNzZWQgYXMgdGhvdWdoIEkmIzM5O20gdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIE1lbW9yeSBBY2NvdW50aW5nIHdpdGhpbiB0aGUgS2VybmVsKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgYWNjb3VudGluZyByZWxhdGVkIHRvIFNMVUIgY2FjaGVzIGFuZCBjb250cm9sIGdyb3Vwcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG1lbW9yeSBjaGFyZ2VzIGFyZSBoYW5kbGVkIGFmdGVyIGFuIGFsbG9jYXRpb24uIE15IGluaXRpYWwgaHVudCBsZWFkcyBtZSB0byBgbW0vc2x1Yi5jYC4gTm93LCB3aGVyZSBleGFjdGx5IGRvZXMgdGhlIHBvc3QtY2hhcmdlIGxvZ2ljIHJlc2lkZT8gVGhlIGZ1bmN0aW9uIG5hbWUsIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYCwgc3VnZ2VzdHMgdGhpcyBpcyBwcmVjaXNlbHkgd2hhdCBJJiMzOTttIGFmdGVyLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgb2YgdHJhY2tpbmcgbWVtb3J5IHVzYWdlIHdpdGhpbiBjb250cm9sIGdyb3VwcyBoYXBwZW5zIGFmdGVyIGEgc2xhYiBhbGxvY2F0aW9uIG9yIGZyZWVpbmcuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMgZnVuY3Rpb24gYW5kIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgbWVtY2cgaW5mcmFzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNnX3NsYWJfcG9zdF9jaGFyZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTI1MjM9c3RhdGljIF9fZmFzdHBhdGhfaW5saW5lXG5tbS9zbHViLmM6MjUyNDpib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXG5tbS9zbHViLmMtMjUyNS17XG4tLVxubW0vc2x1Yi5jPTI1OTE9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbi0tXG5tbS9zbHViLmMtMjU5NS1cbm1tL3NsdWIuYzoyNTk2OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxubW0vc2x1Yi5jLTI1OTcte1xuLS1cbm1tL3NsdWIuYz01MDA1PWJvb2wga21lbV9jYWNoZV9jaGFyZ2Uodm9pZCAqb2JqcCwgZ2ZwX3QgZ2ZwZmxhZ3MpXG4tLVxubW0vc2x1Yi5jLTUwMDktXG5tbS9zbHViLmM6NTAxMDpcdHJldHVybiBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKG9ianAsIGdmcGZsYWdzKTtcbm1tL3NsdWIuYy01MDExLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwOTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipLRkVOQ0UgRGVlcCBEaXZlOiBJbml0aWFsaXphdGlvbiBhbmQgRGVhbGxvY2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBLRkVOQ0UmIzM5O3MgY29yZSB3b3JraW5ncywgc3BlY2lmaWNhbGx5IGhvdyBpdCBpbml0aWFsaXplcyBpdHMgbWVtb3J5IHBvb2wgYW5kIHRoZSBtZWNoYW5pc21zIGl0IHVzZXMgZm9yIGZyZWVpbmcgbWVtb3J5LiBUaGUgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRob3NlIGZ1bmN0aW9ucyBpcyBpbiB0aGUgYG1tL2tmZW5jZS9jb3JlLmNgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgZG93biB0aGUgYGtmZW5jZV9pbml0X3Bvb2xgIGZ1bmN0aW9uLCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcG9vbCBpdHNlbGYgaXMgc2V0IHVwLCBhbmQgSSB3aWxsIGFsc28gbmVlZCB0byByZXZpZXcgYF9fa2ZlbmNlX2ZyZWVgIHRvIGdldCB0aGUgcnVuZG93biBvbiBob3cgbWVtb3J5IGlzIGFjdHVhbGx5IHJlbGlucXVpc2hlZCBieSBLRkVOQ0UuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgcGljdHVyZSBJIG5lZWQgdG8gYW5hbHl6ZSBpdHMgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tmZW5jZV9pbml0X3Bvb2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9rZmVuY2UvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2tmZW5jZS9jb3JlLmM9NTk5PXN0YXRpYyB2b2lkIHJjdV9ndWFyZGVkX2ZyZWUoc3RydWN0IHJjdV9oZWFkICpoKVxuLS1cbm1tL2tmZW5jZS9jb3JlLmMtNjEwLSAqL1xubW0va2ZlbmNlL2NvcmUuYzo2MTE6c3RhdGljIHVuc2lnbmVkIGxvbmcga2ZlbmNlX2luaXRfcG9vbCh2b2lkKVxubW0va2ZlbmNlL2NvcmUuYy02MTItXHRfX2NvbnRleHRfdW5zYWZlKC8qIGNvbnN0cnVjdG9yICovKVxuLS1cbm1tL2tmZW5jZS9jb3JlLmMtNjE2LVxubW0va2ZlbmNlL2NvcmUuYzo2MTc6XHRpZiAoIWFyY2hfa2ZlbmNlX2luaXRfcG9vbCgpKVxubW0va2ZlbmNlL2NvcmUuYy02MTgtXHRcdHJldHVybiAodW5zaWduZWQgbG9uZylfX2tmZW5jZV9wb29sO1xuLS1cbm1tL2tmZW5jZS9jb3JlLmMtNzE5LVxubW0va2ZlbmNlL2NvcmUuYzo3MjA6c3RhdGljIGJvb2wgX19pbml0IGtmZW5jZV9pbml0X3Bvb2xfZWFybHkodm9pZClcbm1tL2tmZW5jZS9jb3JlLmMtNzIxLXtcbi0tXG5tbS9rZmVuY2UvY29yZS5jLTcyNi1cbm1tL2tmZW5jZS9jb3JlLmM6NzI3Olx0YWRkciA9IGtmZW5jZV9pbml0X3Bvb2woKTtcbm1tL2tmZW5jZS9jb3JlLmMtNzI4LVxuLS1cbm1tL2tmZW5jZS9jb3JlLmM9OTk0PXZvaWQgX19pbml0IGtmZW5jZV9pbml0KHZvaWQpXG4tLVxubW0va2ZlbmNlL2NvcmUuYy0xMDAxLVxubW0va2ZlbmNlL2NvcmUuYzoxMDAyOlx0aWYgKCFrZmVuY2VfaW5pdF9wb29sX2Vhcmx5KCkpIHtcbm1tL2tmZW5jZS9jb3JlLmMtMTAwMy1cdFx0cHJfZXJyKFwmIzM0OyVzIGZhaWxlZFxcblwmIzM0OywgX19mdW5jX18pO1xuLS1cbm1tL2tmZW5jZS9jb3JlLmM9MTAxMD1zdGF0aWMgaW50IGtmZW5jZV9pbml0X2xhdGUodm9pZClcbi0tXG5tbS9rZmVuY2UvY29yZS5jLTEwNTAtXHRtZW16ZXJvX2V4cGxpY2l0KGtmZW5jZV9tZXRhZGF0YV9pbml0LCBLRkVOQ0VfTUVUQURBVEFfU0laRSk7XG5tbS9rZmVuY2UvY29yZS5jOjEwNTE6XHRhZGRyID0ga2ZlbmNlX2luaXRfcG9vbCgpO1xubW0va2ZlbmNlL2NvcmUuYy0xMDUyLVx0aWYgKCFhZGRyKSB7XG4tLVxubW0va2ZlbmNlL2NvcmUuYz0xMDkwPXZvaWQga2ZlbmNlX3NodXRkb3duX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL2tmZW5jZS9jb3JlLmMtMTA5NS1cbm1tL2tmZW5jZS9jb3JlLmM6MTA5NjpcdC8qIFBhaXJzIHdpdGggcmVsZWFzZSBpbiBrZmVuY2VfaW5pdF9wb29sKCkuICovXG5tbS9rZmVuY2UvY29yZS5jLTEwOTctXHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2a2ZlbmNlX21ldGFkYXRhKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5MjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYF9fa2ZlbmNlX2ZyZWVgIHdvcmtzLiBJIGtub3cgdGhhdCYjMzk7cyBwYXJ0IG9mIHRoZSBLRkVOQ0UgKEtlcm5lbCBFbGVjdHJpYyBGZW5jZSkgcHJvamVjdCwgc28gdGhlIGxpa2VseSBzdGFydGluZyBwb2ludCBpcyBpbiB0aGUgY29yZSBLRkVOQ0UgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmF2aWdhdGUgdG8gdGhlIGBtbS9rZmVuY2UvYCBkaXJlY3RvcnkgYW5kIGZpbmQgYGNvcmUuY2AuIFRoYXQgc2hvdWxkIGNvbnRhaW4gdGhlIGRlZmluaXRpb24gZm9yIGBfX2tmZW5jZV9mcmVlYCwgYW5kIGxpa2VseSB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBJIG5lZWQuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgZ2V0IGEgaGFuZGxlIG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBtZW1vcnkgZGVhbGxvY2F0aW9uIHBhdGggd2l0aGluIEtGRU5DRS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19rZmVuY2VfZnJlZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2tmZW5jZS9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2ZlbmNlL2NvcmUuYz0xMjM5PXZvaWQgKmtmZW5jZV9vYmplY3Rfc3RhcnQoY29uc3Qgdm9pZCAqYWRkcilcbi0tXG5tbS9rZmVuY2UvY29yZS5jLTEyNDktXG5tbS9rZmVuY2UvY29yZS5jOjEyNTA6dm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXG5tbS9rZmVuY2UvY29yZS5jLTEyNTEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIxNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIE1lbW9yeSBDb250cm9sIHdpdGggYG1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYmAqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgY2dyb3VwcyBhbmQgc3BlY2lmaWNhbGx5IGhvdyB0aGUga2VybmVsIHRyYWNrcyBtZW1vcnkgdXNhZ2UgZnJvbSBzbGFiIGFsbG9jYXRpb25zLiBUbyB1bmRlcnN0YW5kIHRoaXMgcHJvcGVybHksIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBtZSBpcyBgbW0vbWVtY29udHJvbC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBrZXJuZWwgYXNzb2NpYXRlcyBhIHNsYWIgb2JqZWN0IHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgbWVtb3J5IGNncm91cCwgYW5kIGBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWJgIGlzIHRoZSBvYnZpb3VzIGZ1bmN0aW9uIHRvIGludmVzdGlnYXRlLiBJdCBzZWVtcyBsaWtlbHkgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gdGhlIHRyYWNraW5nIHByb2Nlc3M7IEkgbmVlZCB0byBsb29rIGNsb3NlbHkgdG8gc2VlIGV4YWN0bHkgaG93IGl0IG1hcHMgYSBzbGFiIG9iamVjdCYjMzk7cyBhbGxvY2F0aW9uIGJhY2sgdG8gYSBzcGVjaWZpYyBjZ3JvdXAuIElzIGl0IHVzaW5nIHRoZSBzbGFiJiMzOTtzIG1ldGFkYXRhPyBPciBpcyB0aGVyZSBzb21lIG90aGVyIG1hZ2ljIGludm9sdmVkPyBJIGV4cGVjdCB0byBmaW5kIHNvbWUgY3JpdGljYWwgcG9pbnRlcnMgb3IgbG9va3VwcyBoZXJlLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBhIGNvcm5lcnN0b25lIGZvciBhY2N1cmF0ZSBhY2NvdW50aW5nLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBpbm5lciB3b3JraW5ncyBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQuIExldCYjMzk7cyBzZWUgaG93IGl0IHdvcmtzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTI4NTg9c3RhdGljIF9fYWx3YXlzX2lubGluZVxubW0vbWVtY29udHJvbC5jOjI4NTk6c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqcClcbm1tL21lbWNvbnRyb2wuYy0yODYwLXtcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjg5OD1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ZpcnQodm9pZCAqcClcbi0tXG5tbS9tZW1jb250cm9sLmMtMjkwNi1cdGlmIChzbGFiKVxubW0vbWVtY29udHJvbC5jOjI5MDc6XHRcdHJldHVybiBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWIoc2xhYiwgcCk7XG5tbS9tZW1jb250cm9sLmMtMjkwOC1cdHJldHVybiBmb2xpb19tZW1jZ19jaGVjayh2aXJ0X3RvX2ZvbGlvKHApKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2OTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIGluIHRoZSBLZXJuZWwqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGF0IGBtbS9zbGFiX2NvbW1vbi5jYC4gSSBrbm93IHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgc2xhYiBhbGxvY2F0b3IgZnVuY3Rpb25zIHJlc2lkZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NgIGFuZCBgbmV3X2ttYWxsb2NfY2FjaGVgIHdvcmsuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciByb2xlcyBpbiBpbml0aWFsaXppbmcgYW5kIG1hbmFnaW5nIHRoZXNlIGttZW0gY2FjaGVzIGJlY2F1c2UgdGhvc2UgYXJlIHRoZSBmb3VuZGF0aW9uIGZvciBlZmZpY2llbnQga2VybmVsIG1lbW9yeSBhbGxvY2F0aW9uLiBVbmRlcnN0YW5kaW5nIGhvdyB0aG9zZSBjYWNoZXMgYXJlIHNldHVwIGlzIGtleSB0byBpZGVudGlmeWluZyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIG1lbW9yeS1yZWxhdGVkIGJ1Z3MuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgaW50ZXJhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fa21lbV9jYWNoZV9jcmVhdGVfYXJncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsYWJfY29tbW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2xhYl9jb21tb24uYz0yNjc9X19rbWVtX2NhY2hlX2FsaWFzKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBzaXplLCBzbGFiX2ZsYWdzX3QgZmxhZ3MsXG4tLVxubW0vc2xhYl9jb21tb24uYy0yOTEtLyoqXG5tbS9zbGFiX2NvbW1vbi5jOjI5MjogKiBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MgLSBDcmVhdGUgYSBrbWVtIGNhY2hlLlxubW0vc2xhYl9jb21tb24uYy0yOTMtICogQG5hbWU6IEEgc3RyaW5nIHdoaWNoIGlzIHVzZWQgaW4gL3Byb2Mvc2xhYmluZm8gdG8gaWRlbnRpZnkgdGhpcyBjYWNoZS5cbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTMxNy0gKi9cbm1tL3NsYWJfY29tbW9uLmM6MzE4OnN0cnVjdCBrbWVtX2NhY2hlICpfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MoY29uc3QgY2hhciAqbmFtZSxcbm1tL3NsYWJfY29tbW9uLmMtMzE5LVx0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG9iamVjdF9zaXplLFxuLS1cbm1tL3NsYWJfY29tbW9uLmMtNDA4LX1cbm1tL3NsYWJfY29tbW9uLmM6NDA5OkVYUE9SVF9TWU1CT0woX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzKTtcbm1tL3NsYWJfY29tbW9uLmMtNDEwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE3MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IEV4YW1pbmluZyBhIGBrbWFsbG9jYCBDYWNoZSoqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgYSBuZXcgYGttYWxsb2NfY2FjaGVgLCBhbmQgaW1tZWRpYXRlbHksIG15IG1pbmQgc3RhcnRzIHRpY2tpbmcuIFRoZSBpbXBsaWNhdGlvbnMgYXJlIGNsZWFyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudC4gSXMgdGhpcyBmb3IgYSBzcGVjaWZpYyBkcml2ZXIsIGEgY29yZSBzdWJzeXN0ZW0sIG9yIGEgbW9yZSBnZW5lcmFsIHVzZSBjYXNlPyBUaGUgbmFtZSBpdHNlbGYgb2Z0ZW4gb2ZmZXJzIGNsdWVzLCBzbyBJJiMzOTtsbCBiZSBkaXNzZWN0aW5nIHRoYXQgdmVyeSBjYXJlZnVsbHkgdG8gaWRlbnRpZnkgaXRzIHJvbGUuIEkgbmVlZCB0byBiZSBhc2tpbmcgbXlzZWxmIGFib3V0IHRoZSBpbnRlbmRlZCBzaXplIGNsYXNzIGFuZCBpdHMgcmVsYXRpb24gdG8gc2xhYiBjYWNoZXMgaW4gdXNlIGVsc2V3aGVyZS4KCk15IGltbWVkaWF0ZSBjb25jZXJucyBhcmUgYXJvdW5kIGVmZmljaWVuY3kgYW5kIGZyYWdtZW50YXRpb24uIElzIHRoaXMgY2FjaGUgYXBwcm9wcmlhdGVseSBzaXplZCBmb3IgaXRzIGV4cGVjdGVkIHdvcmtsb2FkPyBIYXMgdGhlIGRlc2lnbiBjb25zaWRlcmVkIHRoZSBwb3RlbnRpYWwgZm9yIGludGVybmFsIGZyYWdtZW50YXRpb24gYmFzZWQgb24gdGhlIG9iamVjdCBzaXplPyBBcmUgdGhlcmUgcG90ZW50aWFsIG92ZXJsYXBzIHdpdGggZXhpc3RpbmcgY2FjaGVzLCBhbmQgY291bGQgd2UgY29uc29saWRhdGUgdG8gaW1wcm92ZSBvdmVyYWxsIG1lbW9yeSB1dGlsaXphdGlvbj8gV2hhdCBpcyB0aGUgaW1wYWN0IG9uIGNhY2hlIGxpbmUgdXRpbGl6YXRpb24/IERvZXMgdGhlIGNhY2hlIG1ha2UgdXNlIG9mIE5VTUEgbm9kZXMgZWZmZWN0aXZlbHk/IEkgbmVlZCB0byB0aGluayBhYm91dCB0aGF0LCB0b28uCgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBwYXR0ZXJucy4gSXMgdGhpcyBjYWNoZSBiZWluZyBoZWF2aWx5IGNvbnRlbmRlZCwgb3IgaXMgaXQgcmVsYXRpdmVseSBzdGF0aWM/IEZyZXF1ZW50IGFsbG9jYXRpb25zIGFuZCBkZWFsbG9jYXRpb25zIGNhbiBsZWFkIHRvIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBzbyBJIGhhdmUgdG8gYmUgdGhpbmtpbmcgYWJvdXQgaG93IGl0IGlzIGJlaW5nIHVzZWQsIGl0cyBsb2NrIGNvbnRlbnRpb24sIGFuZCB0aGUgaW1wYWN0IG9uIG90aGVyIGtlcm5lbCBvcGVyYXRpb25zLiBBcmUgdGhlcmUgYW55IGNvbnRlbnRpb24gaXNzdWVzPyBBcmUgdGhlcmUgbXV0ZXhlcyBvciBzcGlubG9ja3MgaW4gcGxhY2U/IEhvdyBhcmUgdGhleSBjb25maWd1cmVkPwoKRmluYWxseSwgd2hhdCBhcmUgdGhlIGVycm9yLWhhbmRsaW5nIG1lY2hhbmlzbXMgaW4gcGxhY2U/IEEgYGttYWxsb2NgIGNhY2hlIGlzIGEgY3JpdGljYWwgcmVzb3VyY2UsIGFuZCBJJiMzOTtsbCB3YW50IHRvIHNlZSBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMsIG9yIGV2ZW4gaWYgdGhlIGNhY2hlIGJlY29tZXMgY29ycnVwdGVkLiBEb2VzIGl0IGhhdmUgYXBwcm9wcmlhdGUgY2hlY2tzIGFuZCBiYWxhbmNlcyB0byBwcmV2ZW50IGNhc2NhZGluZyBmYWlsdXJlcz8gQXJlIHRoZXJlIGluc3RydW1lbnRhdGlvbiBob29rcyBmb3IgZGVidWdnaW5nPyBUaGUgYW5zd2VycyB0byB0aGVzZSBxdWVzdGlvbnMgYXJlIGVzc2VudGlhbC4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGRlc2lnbiBpcyByb2J1c3Qgb3IgZnJhZ2lsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV3X2ttYWxsb2NfY2FjaGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbGFiX2NvbW1vbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsYWJfY29tbW9uLmM9OTYyPXN0YXRpYyB2b2lkIF9faW5pdFxubW0vc2xhYl9jb21tb24uYzo5NjM6bmV3X2ttYWxsb2NfY2FjaGUoaW50IGlkeCwgZW51bSBrbWFsbG9jX2NhY2hlX3R5cGUgdHlwZSlcbm1tL3NsYWJfY29tbW9uLmMtOTY0LXtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTEwMjY9dm9pZCBfX2luaXQgY3JlYXRlX2ttYWxsb2NfY2FjaGVzKHZvaWQpXG4tLVxubW0vc2xhYl9jb21tb24uYy0xMDM2LVx0XHRpZiAoS01BTExPQ19NSU5fU0laRSBcdTAwM2M9IDMyKVxubW0vc2xhYl9jb21tb24uYzoxMDM3Olx0XHRcdG5ld19rbWFsbG9jX2NhY2hlKDEsIHR5cGUpO1xubW0vc2xhYl9jb21tb24uYy0xMDM4LVx0XHRpZiAoS01BTExPQ19NSU5fU0laRSBcdTAwM2M9IDY0KVxubW0vc2xhYl9jb21tb24uYzoxMDM5Olx0XHRcdG5ld19rbWFsbG9jX2NhY2hlKDIsIHR5cGUpO1xubW0vc2xhYl9jb21tb24uYy0xMDQwLVxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTA0Mi1cdFx0Zm9yIChpID0gS01BTExPQ19TSElGVF9MT1c7IGkgXHUwMDNjPSBLTUFMTE9DX1NISUZUX0hJR0g7IGkmIzQzOyYjNDM7KVxubW0vc2xhYl9jb21tb24uYzoxMDQzOlx0XHRcdG5ld19rbWFsbG9jX2NhY2hlKGksIHR5cGUpO1xubW0vc2xhYl9jb21tb24uYy0xMDQ0LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTkxOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU2xhYiBBbGxvY2F0aW9uIEhvb2tzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBhIHdob2xlIGJ1bmNoIG9mIGNvcmUgc2xhYiBhbGxvY2F0aW9uIGhvb2tzOiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AsIGBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5YCwgYW5kIGEgZmV3IG90aGVycyBJIHJlY29nbml6ZSwgbmFtZWx5IGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rYCwgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2AsIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYCwgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgLCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AsIGFuZCBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYC4gU2VlbXMgcHJldHR5IGNlbnRyYWwgdG8gaG93IHRoZSBzbGFiIGFsbG9jYXRvciB3b3Jrcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoaXMgaW1wYWN0cyB0aGUgc3lzdGVtLgoKTXkgaW1tZWRpYXRlIGZvY3VzIGhlcmUgbmVlZHMgdG8gYmUgb246IGBhbGxvY19zbGFiX29ial9leHRzYCwgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2tgLCBgX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rYCwgYG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VgLCBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AsIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYCwgYW5kIGBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWJgLiBUaG9zZSBhcmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4KCldhaXQgYSBzZWNvbmQsIHRoZXJlIGFyZSBzb21lIHByZXByb2Nlc3NvciBjb25kaXRpb25hbHMgSSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50LiBgX19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9va2AgYW5kIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2tgIGFyZSBvbmx5IHByZXNlbnQgaWYgYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBlbmFibGVkLiBBbHNvLCBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AgYW5kIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYCBhcmUgZGVwZW5kZW50IG9uIGBDT05GSUdfTUVNQ0dgLiBHb3R0YSBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIEkmIzM5O20gYXNzZXNzaW5nIHRoZSBvdmVyYWxsIGltcGFjdC4gVG8gYmUgc3VyZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG1tL3NsdWIuY2AgZm9yIGBhbGxvY19zbGFiX29ial9leHRzYC4gSnVzdCB3YW50IHRvIGhhdmUgdGhlIGNvbnRleHQgZnVsbHkgaW4gbXkgaGVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2Nfc2xhYl9vYmpfZXh0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9MjEzND1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy0yMTM4LVxubW0vc2x1Yi5jOjIxMzk6aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTIxNDAtXHRcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jPTIyMjg9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxuLS1cbm1tL3NsdWIuYy0yMjU5LSAqL1xubW0vc2x1Yi5jOjIyNjA6c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG5tbS9zbHViLmMtMjI2MS17XG4tLVxubW0vc2x1Yi5jPTIzMDc9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtMjMxMC1cbm1tL3NsdWIuYzoyMzExOnN0YXRpYyBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjMxMi1cdFx0XHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jPTIzMTc9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxuLS1cbm1tL3NsdWIuYy0yMzIwLVxubW0vc2x1Yi5jOjIzMjE6c3RhdGljIGlubGluZSB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjMyMi1cdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jPTIzMzE9cHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsdWIuYy0yMzM0LVx0aWYgKCFzbGFiX29ial9leHRzKHNsYWIpIFx1MDAyNlx1MDAyNlxubW0vc2x1Yi5jOjIzMzU6XHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XG5tbS9zbHViLmMtMjMzNi1cdFx0cHJfd2Fybl9vbmNlKFwmIzM0OyVzLCAlczogRmFpbGVkIHRvIGNyZWF0ZSBzbGFiIGV4dGVuc2lvbiB2ZWN0b3IhXFxuXCYjMzQ7LFxuLS1cbm1tL3NsdWIuYz0zMzcyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhY2NvdW50X3NsYWIoc3RydWN0IHNsYWIgKnNsYWIsIGludCBvcmRlcixcbi0tXG5tbS9zbHViLmMtMzM3OC1cdFx0XHQhc2xhYl9vYmpfZXh0cyhzbGFiKSlcbm1tL3NsdWIuYzozMzc5Olx0XHRhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGdmcCxcbm1tL3NsdWIuYy0zMzgwLVx0XHRcdFx0ICAgIGFsbG9jX2ZsYWdzIHwgU0xBQl9BTExPQ19ORVdfU0xBQik7XG4tLVxubW0vc2x1Yi5jPTM0MDE9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtMzQ1Ni1cdCAqL1xubW0vc2x1Yi5jOjM0NTc6XHRhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHMsIHNsYWIpO1xubW0vc2x1Yi5jLTM0NTgtXHRhY2NvdW50X3NsYWIoc2xhYiwgb29fb3JkZXIob28pLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQ5MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDaGVja2luZyBTbGFiIE9iamVjdCBFeHRlbnNpb24gQXZhaWxhYmlsaXR5KioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byBhbnkgbW9yZSBkZXRhaWxlZCBhbmFseXNpcywgSSBuZWVkIHRvIG1ha2UgYSBxdWljayBzYW5pdHkgY2hlY2suIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzIGFjdHVhbGx5IGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gVGhpcyBlc3NlbnRpYWxseSBtZWFucyBJJiMzOTttIGNoZWNraW5nIGlmIHRoZSBgQ09ORklHX1NMQUJfT0JKX0VYVGAgZmVhdHVyZSBpcyBlbmFibGVkLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHByZXJlcXVpc2l0ZS4gV2l0aG91dCB0aGlzLCB0aGUgZnVuY3Rpb24gd29uJiMzOTt0IGJlIGluIHRoZSBrZXJuZWwmIzM5O3Mgc3ltYm9sIHRhYmxlLCBhbmQgYW55IGF0dGVtcHQgdG8gdXNlIGl0IHdvdWxkIGJlIGZ1dGlsZSwgbGVhZGluZyB0byB1bmRlZmluZWQgYmVoYXZpb3Igb3IgY29tcGlsZS10aW1lIGVycm9ycy4gU28sIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJJiMzOTtsbCBjb25maXJtIHRoYXQgdGhpcyBpcyBhIHZhbGlkIHBhcnQgb2YgdGhlIGF2YWlsYWJsZSB0b29sc2V0LiBUaGlzIHNhdmVzIG1lIHRpbWUgaW4gdGhlIGxvbmcgcnVuLiBJIGRvbiYjMzk7dCB3YW50IHRvIGNoYXNlIGRvd24gYSByYWJiaXQgaG9sZSBvZiBkZWJ1Z2dpbmcgaWYgdGhlIHJvb3QgY2F1c2UgaXMgc2ltcGx5IGEgZGlzYWJsZWQgZmVhdHVyZS4gVGhpcyBhbHNvIGhlbHBzIGVuc3VyZSBhbnkgYXNzdW1wdGlvbnMgSSBtYWtlIGRvd24gdGhlIGxpbmUgcmVnYXJkaW5nIHRoaXMgZnVuY3Rpb25hbGl0eSBhcmUgdmFsaWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19TTEFCX09CSl9FWFQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTc2Nj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X29yaWdfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0KVxuLS1cbm1tL3NsdWIuYy03ODEtXG5tbS9zbHViLmM6NzgyOiNpZmRlZiBDT05GSUdfU0xBQl9PQkpfRVhUXG5tbS9zbHViLmMtNzgzLVxuLS1cbm1tL3NsdWIuYz04NzA9c3RhdGljIGlubGluZSBib29sIG9ial9leHRzX2luX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy04NzYtXG5tbS9zbHViLmM6ODc3OiNpZiBkZWZpbmVkKENPTkZJR19TTEFCX09CSl9FWFQpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcbm1tL3NsdWIuYy04Nzgtc3RhdGljIHVuc2lnbmVkIGludCBvYmpfZXh0c19vZmZzZXRfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsdWIuYz0yMDQyPXN0YXRpYyBpbmxpbmUgdm9pZCBkZWNfc2xhYnNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgaW50IG5vZGUsXG4tLVxubW0vc2x1Yi5jLTIwNTctXG5tbS9zbHViLmM6MjA1ODojaWZkZWYgQ09ORklHX1NMQUJfT0JKX0VYVFxubW0vc2x1Yi5jLTIwNTktXG4tLVxubW0vc2x1Yi5jPTIyNjA9c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jLTIzMDAtXG5tbS9zbHViLmM6MjMwMTojZWxzZSAvKiBDT05GSUdfU0xBQl9PQkpfRVhUICovXG5tbS9zbHViLmMtMjMwMi1cbi0tXG5tbS9zbHViLmM9MjMyMT1zdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtMjMyNS1cbm1tL3NsdWIuYzoyMzI2OiNlbmRpZiAvKiBDT05GSUdfU0xBQl9PQkpfRVhUICovXG5tbS9zbHViLmMtMjMyNy1cbi0tXG5tbS9zbHViLmM9Nzg2Mj1zdGF0aWMgaW50IGNhbGN1bGF0ZV9zaXplcyhzdHJ1Y3Qga21lbV9jYWNoZV9hcmdzICphcmdzLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtNzk3Ni1cdGFsaWduZWRfc2l6ZSA9IEFMSUdOKHNpemUsIHMtXHUwMDNlYWxpZ24pO1xubW0vc2x1Yi5jOjc5Nzc6I2lmIGRlZmluZWQoQ09ORklHX1NMQUJfT0JKX0VYVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHXzY0QklUKVxubW0vc2x1Yi5jLTc5NzgtXHRpZiAoc2xhYl9hcmdzX3VubWVyZ2VhYmxlKGFyZ3MsIHMtXHUwMDNlZmxhZ3MpIFx1MDAyNlx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjM4NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgRGVwZW5kZW5jaWVzIGZvciBTbGFib2JqX2V4dCBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IHRhcmdldGluZyBvcHRpbWl6YXRpb24gb2YgYHN0cnVjdCBzbGFib2JqX2V4dGAuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBDT05GSUdfU0xBQl9PQkpfRVhUYCBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkLiBObyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCBub3cgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBTaW5jZSB0aGlzIHN0cnVjdHVyZSBpcyBiZWluZyBvcHRpbWl6ZWQsIEkgbmVlZCB0byBjb25zaWRlciBhbGwgdGhlIHBsYWNlcyBpdCYjMzk7cyB1c2VkLiBSaWdodCwgaXQmIzM5O3MgdXNlZCBieSBib3RoIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgYW5kIGBDT05GSUdfTUVNQ0dgLiBUaG9zZSBhcmUgdGhlIHR3byBrZXkgY29uc3VtZXJzIG9mIHRoaXMgc3RydWN0dXJlLiBHb3QgaXQuIE5vdywgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBpdCYjMzk7cyB0aW1lIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBwdWxsIHVwIGBtbS9zbGFiLmhgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHNsYWJvYmpfZXh0YCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBtZW1vcnkgbGF5b3V0IHRoYXQmIzM5O3MgYmVpbmcgdHdlYWtlZC4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSB0aGUgZnVsbCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgc2xhYm9ial9leHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbGFiLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2xhYi5oPTU0MT1zdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9rbWFsbG9jX25vX29iamV4dCh2b2lkKVxuLS1cbm1tL3NsYWIuaC01NTYtICovXG5tbS9zbGFiLmg6NTU3OnN0cnVjdCBzbGFib2JqX2V4dCB7XG5tbS9zbGFiLmgtNTU4LVx0Lypcbi0tXG5tbS9zbGFiLmg9NjE0PXN0YXRpYyBpbmxpbmUgc2l6ZV90IGNhY2hlX29ial9leHRfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbGFiLmgtNjIzLVxubW0vc2xhYi5oOjYyNDpcdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHN6O1xubW0vc2xhYi5oLTYyNS19XG4tLVxubW0vc2xhYi5oPTYyNz1zdGF0aWMgaW5saW5lIHNpemVfdCBzbGFiX29ial9leHRfc2l6ZShzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbGFiLmgtNjM2LVxubW0vc2xhYi5oOjYzNzpcdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHN6O1xubW0vc2xhYi5oLTYzOC19XG4tLVxubW0vc2xhYi5oPTcwNj1zdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsYWIuaC03MjItICovXG5tbS9zbGFiLmg6NzIzOnN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpcbm1tL3NsYWIuaC03MjQtc2xhYl9vYmpfZXh0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbi0tXG5tbS9zbGFiLmgtNzI2LXtcbm1tL3NsYWIuaDo3Mjc6XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQ7XG5tbS9zbGFiLmgtNzI4LVx0dW5zaWduZWQgaW50IGluZGV4O1xuLS1cbm1tL3NsYWIuaC03MzktXG5tbS9zbGFiLmg6NzQwOlx0b2JqX2V4dCA9IChzdHJ1Y3Qgc2xhYm9ial9leHQgKikob2JqX2V4dHMgJiM0MzsgaW5kZXggKiBzdHJpZGUpO1xubW0vc2xhYi5oLTc0MS1cbi0tXG5tbS9zbGFiLmgtNzQ1LSNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3NsYWIuaDo3NDY6c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqc2xhYl9vYmpfZXh0X29iamNnKHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dClcbm1tL3NsYWIuaC03NDcte1xuLS1cbm1tL3NsYWIuaC03NTEtXG5tbS9zbGFiLmg6NzUyOnN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX29ial9leHRfc2V0X29iamNnKHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dCxcbm1tL3NsYWIuaC03NTMtXHRcdFx0XHRcdCAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuLS1cbm1tL3NsYWIuaD03NjE9c3RhdGljIGlubGluZSB1bmlvbiBjb2RldGFnX3JlZiAqXG5tbS9zbGFiLmg6NzYyOnNsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0KVxubW0vc2xhYi5oLTc2My17XG4tLVxubW0vc2xhYi5oPTc3Nj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbGFiLmgtNzgwLVxubW0vc2xhYi5oOjc4MTpzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqXG5tbS9zbGFiLmgtNzgyLXNsYWJfb2JqX2V4dChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDU2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTbGFiIEFsbG9jYXRpb24gYW5kIFRhZ2dpbmcgSG9va3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gc2xhYiBhbGxvY2F0aW9uLCBvYmplY3QgZXh0ZW5zaW9ucywgYW5kIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gSSBzZWUgYSBjb25zdGVsbGF0aW9uIG9mIHN5bWJvbHMgdGhhdCBzZWVtIGNlbnRyYWwgdG8gdGhpczogYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseWAsIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rYCwgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2AsIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYCwgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgLCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AsIGFuZCBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYC4gSXQmIzM5O3MgYSBiaXQgb2YgYSBkYW5jZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzdGVwcy4KCldhaXQgYSBzZWNvbmQsIHdhc24mIzM5O3QgYGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHlgIGRlY2xhcmVkIGFzIGBzdGF0aWMgaW5saW5lYCBvciBgc3RhdGljIHZvaWRgPyBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhcyB0aGlzIHdvdWxkIG1ha2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBob29rIGRlcGVuZGVudCBvbiBpbmxpbmluZy9jb21waWxlLXRpbWUgb3B0aW1pemF0aW9uLiBUaGF0IGltcGxpZXMgaXQgbWlnaHQgYmUgdXNlZCB0byBvcHRpbWl6ZSBzb21ldGhpbmcgdGhhdCYjMzk7cyBvdGhlcndpc2UgZG9uZSBsYXRlci4gT2theSwgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIGVhcmx5IHN0YWdlIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGF0IGFjdHVhbGx5IGRvZXMgd2l0aGluIGBtbS9zbHViLmNgLiBJIHdpbGwgZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciBhIGJldHRlciB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19zbGFiX29ial9leHRzX2Vhcmx5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz0yMjI4PXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgYWxsb3dfc3Bpbilcbi0tXG5tbS9zbHViLmMtMjI1OS0gKi9cbm1tL3NsdWIuYzoyMjYwOnN0YXRpYyB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxubW0vc2x1Yi5jLTIyNjEte1xuLS1cbm1tL3NsdWIuYz0yMzE3PXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgYWxsb3dfc3Bpbilcbi0tXG5tbS9zbHViLmMtMjMyMC1cbm1tL3NsdWIuYzoyMzIxOnN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTIzMjItXHRcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYz0zNDAxPXN0YXRpYyBzdHJ1Y3Qgc2xhYiAqYWxsb2NhdGVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXG4tLVxubW0vc2x1Yi5jLTM0NTYtXHQgKi9cbm1tL3NsdWIuYzozNDU3Olx0YWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzLCBzbGFiKTtcbm1tL3NsdWIuYy0zNDU4LVx0YWNjb3VudF9zbGFiKHNsYWIsIG9vX29yZGVyKG9vKSwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyNzEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyB0aGlzIGlzIHN0YXRpYywgbm90IGNoYW5naW5nLiBNeSBmb2N1cyBzeW1ib2xzIGhlcmUgYXJlIGFsbCByZWxhdGVkIHRvIHNsYWIgb2JqZWN0IGV4dGVuc2lvbnM6IGBhbGxvY19zbGFiX29ial9leHRzYCwgYGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHlgLCBhbmQgdGhlIHZhcmlvdXMgaG9va2luZyBmdW5jdGlvbnMgKGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rYCwgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2AsIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCwgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgKSwgYWxvbmcgd2l0aCBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAgYW5kIGBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWJgLiBUaGlzIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gYW5kLCBtb3JlIHNwZWNpZmljYWxseSwgaG93IHRoZXNlIGV4dGVuc2lvbnMgaW50ZXJhY3Qgd2l0aCBtZW1vcnkgY29udHJvbCBncm91cHMgKG1lbWNncykgYW5kL29yIG1lbW9yeSBwcm9maWxpbmcuCgpUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBhcmUgYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBhbmQgYENPTkZJR19NRU1DR2AgcHJlcmVxdWlzaXRlcyBoZXJlPyBZZXMsIGl0IHNlZW1zIHRoZSBwYXRjaCBpcyBvcHRpbWl6aW5nIHRoZSBtZW1vcnkgbGF5b3V0IG9mIGBzdHJ1Y3Qgc2xhYm9ial9leHRgIHdoaWNoIGlzIHVzZWQgd2hlbiAqZWl0aGVyKiBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIG9yIGBDT05GSUdfTUVNQ0dgIGlzIHNldC4gU28sIGZvciBwcm9wZXIgY29uZmlndXJhdGlvbiwgSSYjMzk7bGwgbmVlZCB0byBpbmNsdWRlIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBhbmQgYE1FTUNHYCBpbiBgRW5hYmxlQ29uZmlnc2AuCgpIb2xkIG9uLCBJIHJlY2FsbCBgTUVNQ0dgIGlzIGZyZXF1ZW50bHkgZW5hYmxlZCBieSBkZWZhdWx0LiBIb3dldmVyLCBpdCB3b3VsZG4mIzM5O3QgaHVydCB0byBiZSBleHBsaWNpdCBhbmQgbGlzdCBpdC4gYE1FTV9BTExPQ19QUk9GSUxJTkdgIGlzIGRlZmluaXRlbHkgYSBkZWRpY2F0ZWQgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZywgYW5kIG9uZSB0aGF0IGlzIHByb2JhYmx5IGxlc3Mgb2Z0ZW4gZW5hYmxlZCBieSBkZWZhdWx0LiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlIGZvciBgTUVNX0FMTE9DX1BST0ZJTElOR2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGFuZCBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0xMDQ3PWNvbmZpZyBDT0RFX1RBR0dJTkdcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDUwLVxubGliL0tjb25maWcuZGVidWc6MTA1MTpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xubGliL0tjb25maWcuZGVidWctMTA1Mi1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZ1wmIzM0O1xuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTEwNjQtXG5saWIvS2NvbmZpZy5kZWJ1ZzoxMDY1OmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxubGliL0tjb25maWcuZGVidWctMTA2Ni1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubGliL0tjb25maWcuZGVidWctMTA2OS1cbmxpYi9LY29uZmlnLmRlYnVnOjEwNzA6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcbmxpYi9LY29uZmlnLmRlYnVnLTEwNzEtXHRib29sIFwmIzM0O01lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGVyIGRlYnVnZ2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE0MQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSB0aGlua2luZyBpczoKCioqTWVtb3J5IEFsbG9jYXRpb24gUHJvZmlsaW5nIGFuZCBDb250cm9sIEdyb3VwIEludGVncmF0aW9uKioKClJpZ2h0LCBzbyB0byBnZXQgYSByZWFsbHkgZ29vZCBoYW5kbGUgb24gdGhpcywgSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIGZsaXAgb24gYE1FTV9BTExPQ19QUk9GSUxJTkdgIGFuZCBpdHMgZGVmYXVsdC1lbmFibGVkIGNvdW50ZXJwYXJ0IGBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVGAuIFRoYXQmIzM5O3MgZ29pbmcgdG8gZ2l2ZSB1cyBhIGdyYW51bGFyIHZpZXcgaW50byB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBvcHRpbWl6YXRpb24uIFdlICpuZWVkKiB0aGF0IGRhdGEuCgpBbmQgd2hpbGUgd2UmIzM5O3JlIGF0IGl0LCBgTUVNQ0dgIGhhcyBnb3QgdG8gYmUgaW4gdGhlIG1peC4gQ29udHJvbCBncm91cHMgYXJlIGluZGlzcGVuc2FibGUgZm9yIGlzb2xhdGluZyBhbmQgbWFuYWdpbmcgcmVzb3VyY2UgY29uc3VtcHRpb24sIGFuZCBtZW1vcnkgaXMgb2J2aW91c2x5IGEgYmlnIHBhcnQgb2YgdGhhdCBlcXVhdGlvbi4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGVmZmVjdGl2ZWx5IGlzb2xhdGUgdGhlIHByb2Nlc3NlcyBhbmQgdW5kZXJzdGFuZCB0aGVpciBiZWhhdmlvci4KCkZpbmFsbHksIGp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2s6IEkmIzM5O2xsIGFsc28gd2FudCB0byBjb25maXJtIHRoYXQgYFNMQUJfT0JKX0VYVGAgaXMgZXhwb3NlZCBhcyBhIGNvbmZpZ3VyYWJsZSBvcHRpb24gdG8gdGhlIGVuZC11c2Vycy4gU29tZXRpbWVzIHRoZXNlICYjMzQ7aW50ZXJuYWwmIzM0OyBmbGFncyBhcmUgaGlkZGVuIGFuZCBpdCBpcyB1c2VmdWwgdG8ga25vdyBpZiB3ZSBjYW4gY29udHJvbCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNMQUJfT0JKX0VYVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTAzMz1jb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXG4tLVxuaW5pdC9LY29uZmlnLTEwNDAtXG5pbml0L0tjb25maWc6MTA0MTpjb25maWcgU0xBQl9PQkpfRVhUXG5pbml0L0tjb25maWctMTA0Mi1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1MjAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBgU0xBQl9PQkpfRVhUYCBCb29sZWFuKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBTTEFCX09CSl9FWFRgIGZsYWcgYW5kIGl0JiMzOTtzIGZsYWdnZWQgYXMgYSBoaWRkZW4gYm9vbGVhbiwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgaXQmIzM5O3MgcHJvYmFibHkgdHJpZ2dlcmVkIGJ5IGVpdGhlciBgTUVNQ0dgIG9yIGBNRU1fQUxMT0NfUFJPRklMSU5HYC4gVGhvc2UgdHdvIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIGluZmx1ZW5jaW5nIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBiZWhhdmlvcnMuIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IHNlbGVjdGlvbiBjcml0ZXJpYSBmb3IgdGhpcyBmbGFnLiBLbm93aW5nIHdoYXQgZW5hYmxlcyBgU0xBQl9PQkpfRVhUYCBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uIFRpbWUgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFNMQUJfT0JKX0VYVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA3Mz1jb25maWcgTUVNQ0dcbi0tXG5pbml0L0tjb25maWctMTA3Ni1cdHNlbGVjdCBFVkVOVEZEXG5pbml0L0tjb25maWc6MTA3NzpcdHNlbGVjdCBTTEFCX09CSl9FWFRcbmluaXQvS2NvbmZpZy0xMDc4LVx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXG4tLVxubGliL0tjb25maWcuZGVidWc9MTA1MT1jb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTEwNTgtXHRzZWxlY3QgUEFHRV9FWFRFTlNJT05cbmxpYi9LY29uZmlnLmRlYnVnOjEwNTk6XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDYwLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTg4OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBNZW1vcnkgTWFuYWdlbWVudCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGJhc2VkIG9uIHRoZSBrZXJuZWwgY29kZSwgZW5hYmxpbmcgYm90aCBgTUVNQ0dgIGFuZCBgTUVNX0FMTE9DX1BST0ZJTElOR2AgYXV0b21hdGljYWxseSBicmluZ3MgaW4gYFNMQUJfT0JKX0VYVGAuIFRoZXJlZm9yZSwgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IGRlZmluaXRlbHkgbmVlZHMgdG8gaW5jbHVkZSBib3RoIGBNRU1DR2AgYW5kIGBNRU1fQUxMT0NfUFJPRklMSU5HYC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuCgpOb3csIEkgbmVlZCB0byBwaWNrIGEgZ29vZCBmb2N1cyBzeW1ib2wuIEkgd2FzIGluaXRpYWxseSB0aGlua2luZyBhYm91dCBgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseWAsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgdGhlIHJpZ2h0IGNob2ljZSwgc28gbGV0JiMzOTtzIGRpZyBhIGJpdCBkZWVwZXIuIEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgYSBjb25jZXJuLCBidXQgc3l6a2FsbGVyICptaWdodCogYmUgYWJsZSB0byBmdXp6IGl0IGlmIGl0IGlzbiYjMzk7dCBpbmxpbmVkLCBzbyBpdCBtYXkgc3RpbGwgYmUgdmlhYmxlLiBUaGFua2Z1bGx5LCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXRzZWxmIGlzIGV4cG9ydGVkLCBvciBhdCBsZWFzdCBpdCBpc24mIzM5O3Qgc3RhdGljLCB3aGljaCBsb29rcyBiZXR0ZXIuIEV4Y2VsbGVudC4gVGhlbiBJIHNlZSB0aGF0IGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rYCBhbmQgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2AgYXJlIGFsc28gbm9uLXN0YXRpYy4gR29vZCBzaWducyBmb3IgZnV6emluZyB0YXJnZXRzISBGdXJ0aGVyLCBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAsIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCwgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgLCBhbmQgYG1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYmAgYXJlIGFsbCBub24tc3RhdGljIGFzIHdlbGwuIFRoZXNlIGFyZSBhbGwgZ29vZCBjYW5kaWRhdGVzLgoKTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzIGluZGVlZCBleHBvcnRlZC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmFsbG9jX3NsYWJfb2JqX2V4dHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjUwNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU0xVQiBBbGxvY2F0b3IqKgoKT2theSwgc28gSSBkb24mIzM5O3QgbmVlZCB0byB3b3JyeSBhYm91dCBleHBvcnRpbmcgdGhpcyB0aGluZzsgaXQganVzdCBuZWVkcyB0byBiZSBub24tc3RhdGljLiBUaGUga2V5IGhlcmUgaXMgdG8gZmlndXJlIG91dCB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4gTGV0IG1lIHNlZS4uLiBJIHJlY2FsbCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgYmVpbmcgY2FsbGVkIGZyb20gYm90aCBgbW0vc2x1Yi5jYCDigJMgdGhhdCYjMzk7cyB0aGUgU0xVQiBhbGxvY2F0b3IgaXRzZWxmLCBvYnZpb3VzbHkg4oCTIGFuZCBhbHNvIGZyb20gYG1tL21lbWNvbnRyb2wuY2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgcG90ZW50aWFsIGludGVyYWN0aW9uIHdpdGggbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLiBOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgbW0vc2xhYi5oYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVsZXZhbnQgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHNob3VsZCBiZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyZmFjZXMgYW5kIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbGFiLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2xhYi5oPTc2Mj1zbGFiX29ial9leHRfY29kZXRhZ19yZWYoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dClcbi0tXG5tbS9zbGFiLmgtNzcwLVxubW0vc2xhYi5oOjc3MTppbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbGFiLmgtNzcyLVx0XHRcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY4ODIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtGRU5DRSBhbmQgU0xVQiBTeW1ib2xzKioKCk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBub3QgYSBzdGF0aWMgc2l0dWF0aW9uLCBnb29kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgaGVyZS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBsb29rIGF0IGBrZmVuY2VfaW5pdF9wb29sYCBhbmQgYF9fa2ZlbmNlX2ZyZWVgIHNwZWNpZmljYWxseS4gQWxyaWdodCwgYGtmZW5jZV9pbml0X3Bvb2xgIGlzIGRlZmluZWQgYXMgc3RhdGljLCB0aGF0IG1ha2VzIHNlbnNlLiBCdXQgYF9fa2ZlbmNlX2ZyZWVgLi4uIHRoYXQmIzM5O3Mgbm9uLXN0YXRpYy4gQmluZ28hIFdlIGNhbiBhZGQgYF9fa2ZlbmNlX2ZyZWVgIHRvIGBGb2N1c1N5bWJvbHNgLCB0aGF0JiMzOTtzIHdoYXQgd2Ugd2FudC4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHdoYXQgZWxzZSBpcyBpbiBgRm9jdXNTeW1ib2xzYCBjdXJyZW50bHkuIExldCYjMzk7cyBzZWUuLi4gYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBgX19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9va2AsIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2tgLCBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAsIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCwgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgLCBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYCwgYW5kIG5vdywgYF9fa2ZlbmNlX2ZyZWVgLgoKSG9sZCBvbiBhIHNlY29uZC4uLiBhcmUgdGhvc2UgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2tgIGFuZCBgX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rYCBmdW5jdGlvbnMgYWxzbyBzdGF0aWM/IFllcywgdGhleSBhcmUhIEkmIzM5O20gbG9va2luZyByaWdodCBhdCBpdCBpbiBgbW0vc2x1Yi5jYCBub3csIGFuZCB0aGV5IGFyZSBzdGF0aWMgbm9pbmxpbmUgZnVuY3Rpb25zLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBwcm9jZXNzIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTIzNDY9c3RhdGljIG5vaW5saW5lIHZvaWRcbm1tL3NsdWIuYzoyMzQ3Ol9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgZ2ZwX3QgZmxhZ3MsXG5tbS9zbHViLmMtMjM0OC1cdFx0XHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9zbHViLmM9MjM5MD1hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtMjM5My1cdGlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSlcbm1tL3NsdWIuYzoyMzk0Olx0XHRfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHMsIG9iamVjdCwgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcbm1tL3NsdWIuYy0yMzk1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc2NzIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKgoKQWxyaWdodCwgc28gdGhlIHRhcmdldHMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYXJlIG1hcmtlZCBhcyBgc3RhdGljIG5vaW5saW5lYC4gRmluZSwgdGhhdCYjMzk7cyBub3QgYSBzaG93c3RvcHBlcjsgU3l6a2FsbGVyIGNhbiBzdGlsbCBwb3RlbnRpYWxseSBnZXQgYXQgdGhlbS4gTm8gcHJvYmxlbSB0aGVyZS4KCk15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIGxpa2VseSBhcmVhcyBvZiBpbnRlcmVzdC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayBvdXQgdGhlIHBvdGVudGlhbCBob29rczogYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgIGFuZCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIEkmIzM5O20gbW9zdCBpbnRlcmVzdGVkIGluIGF0IHRoaXMganVuY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTM1Mjk9c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2Z1bGxfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzUzNy1cbm1tL21lbWNvbnRyb2wuYzozNTM4OmJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG5tbS9tZW1jb250cm9sLmMtMzUzOS1cdFx0XHRcdCAgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBzbGFiX2FsbG9jX2ZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODAyMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBEeW5hbWljIE1lbW9yeSBBbGxvY2F0aW9uKioKCk15IG1pbmQgaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhlIGluaGVyZW50IGR5bmFtaXNtIG9mIHRoZSB0b3BpYy4gVGhlIHZlcnkgbmF0dXJlIG9mIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gcHJvY2VzcyBzdWdnZXN0cyB0aGF0IGl0JiMzOTtzICpub3QqIGEgc3RhdGljIHByb2JsZW0uIEl04oCZcyBmbHVpZCwgY29uc3RhbnRseSBjaGFuZ2luZywgYW5kIHRoYXQmIzM5O3MgdGhlIGNvcmUgY2hhbGxlbmdlLiBUaGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYXJlIHNpZ25pZmljYW50IGFuZCBtdXN0IGJlIGtlcHQgaW4gbWluZC4KClRvIHRhY2tsZSB0aGlzLCBhIG5hdHVyYWwgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWJgIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgbWVtb3J5IGNncm91cCBpbnRlcmFjdHMgd2l0aCBvYmplY3Qgc2xhYnMgaXMgcGFyYW1vdW50IGhlcmUuIFRoaXMgZnVuY3Rpb24gbGlrZWx5IHByb3ZpZGVzIGEgY3J1Y2lhbCBlbnRyeSBwb2ludCB0byBkaXNzZWN0aW5nIHRoZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBtZWNoYW5pY3MgYXQgYSBncmFudWxhciBsZXZlbC4gRGVsdmluZyBpbnRvIGl0cyBsb2dpYyB3aWxsIHJldmVhbCBrZXkgaW5zaWdodHMgaW50byBob3cgbWVtb3J5IGlzIGJlaW5nIG1hbmFnZWQgYW5kIHBvdGVudGlhbGx5IHdoZXJlIGluZWZmaWNpZW5jaWVzIG9yIGxlYWtzIG1pZ2h0IGJlIGx1cmtpbmcgd2l0aGluIHRoZSBzeXN0ZW0uIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGllY2UgdG8gdW5kZXJzdGFuZGluZyB0aGUgcHV6emxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTI4NTg9c3RhdGljIF9fYWx3YXlzX2lubGluZVxubW0vbWVtY29udHJvbC5jOjI4NTk6c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqcClcbm1tL21lbWNvbnRyb2wuYy0yODYwLXtcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjg5OD1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ZpcnQodm9pZCAqcClcbi0tXG5tbS9tZW1jb250cm9sLmMtMjkwNi1cdGlmIChzbGFiKVxubW0vbWVtY29udHJvbC5jOjI5MDc6XHRcdHJldHVybiBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWIoc2xhYiwgcCk7XG5tbS9tZW1jb250cm9sLmMtMjkwOC1cdHJldHVybiBmb2xpb19tZW1jZ19jaGVjayh2aXJ0X3RvX2ZvbGlvKHApKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0NjcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipFeGNsdXNpb25hcnkgUmVhc29uaW5nIGluIEZ1enppbmcgQ29udGV4dCoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgc29tZXRoaW5nIG1hcmtlZCBhcyBgc3RhdGljIF9fYWx3YXlzX2lubGluZWAuIFRoYXQgaW5zdGFudGx5IHRocm93cyB1cCBhIHJlZCBmbGFnIGluIHRoZSBjb250ZXh0IG9mIGZ1enppbmcsIHBhcnRpY3VsYXJseSB3aXRoIFN5emthbGxlci4gQmVjYXVzZSBpdCYjMzk7cyBpbmxpbmUsIGl0JiMzOTtzIGJha2VkIGludG8gb3RoZXIgY29kZSBkdXJpbmcgY29tcGlsYXRpb24gYW5kIGRvZXNuJiMzOTt0IGV4aXN0IGFzIGEgc3RhbmRhbG9uZSBmdW5jdGlvbiB0aGF0IFN5emthbGxlciBjYW4gZGlyZWN0bHkgdGFyZ2V0LiBBdHRlbXB0aW5nIHRvIGRvIHNvIHdvdWxkIGJlIGZ1dGlsZS4gVGhlcmVmb3JlLCBteSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMsICYjMzQ7V2UgbmVlZCB0byBleGNsdWRlIHRoaXMgZnJvbSBmdXp6aW5nLiYjMzQ7IEl0JiMzOTtzIGEgZGVhZCBlbmQgYXMgYSBmdXp6aW5nIHRhcmdldCwgbGlrZWx5IGp1c3QgaW5saW5lZCBhcyBwYXJ0IG9mIGEgbGFyZ2VyLCBtb3JlIGludGVyZXN0aW5nIGZ1bmN0aW9uLiBObyBwb2ludCB3YXN0aW5nIHRpbWUgb24gaXQuCgpOb3csIGxldCYjMzk7cyBwaXZvdC4gU2luY2UgdGhpcyBmdW5jdGlvbiBpcyBvZmYgdGhlIHRhYmxlLCBJIG5lZWQgdG8gZmluZCBpdHMgY2FsbGVycy4gV2hpY2ggbWVhbnMgSSBuZWVkIHRvIGV4cGxvcmUgd2hhdCBmdW5jdGlvbiB0aGF0IG1ha2VzIHNlbnNlIHRvIHN0dWR5IGluIHRoZSBwbGFjZSBvZiB0aGlzIGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIGNoZWNrIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYC4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBuZXh0IHN0ZXAsIGdpdmVuIHRoZSBjb250ZXh0LiBJdCBsaWtlbHkgcmVwcmVzZW50cyBhIHBvaW50IHdoZXJlIG1lbW9yeSBhY2NvdW50aW5nLCByZWxhdGVkIHRvIHNsYWIgY2FjaGVzIGFuZCBtZW1vcnkgY29udHJvbCBncm91cHMsIGlzIGhhbmRsZWQuIEFuZCBpZiB0aGlzIGlubGluZWQgZnVuY3Rpb24gaXMgcGFydCBvZiBzb21lIGNydWNpYWwgYWNjb3VudGluZyBwcm9jZXNzLCB0aGVuIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGlzIGxpa2VseSB0byBiZSBhbiBpbXBvcnRhbnQgZW50cnkgcG9pbnQgb3IgcG9pbnQgb2YgZmFpbHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY2dfc2xhYl9wb3N0X2NoYXJnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9MjUyMz1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcbm1tL3NsdWIuYzoyNTI0OmJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcbm1tL3NsdWIuYy0yNTI1LXtcbi0tXG5tbS9zbHViLmM9MjU5MT1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsdWIuYy0yNTk1LVxubW0vc2x1Yi5jOjI1OTY6c3RhdGljIGlubGluZSBib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXG5tbS9zbHViLmMtMjU5Ny17XG4tLVxubW0vc2x1Yi5jPTUwMDU9Ym9vbCBrbWVtX2NhY2hlX2NoYXJnZSh2b2lkICpvYmpwLCBnZnBfdCBnZnBmbGFncylcbi0tXG5tbS9zbHViLmMtNTAwOS1cbm1tL3NsdWIuYzo1MDEwOlx0cmV0dXJuIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uob2JqcCwgZ2ZwZmxhZ3MpO1xubW0vc2x1Yi5jLTUwMTEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTEwNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOgoKKipGaWx0ZXJpbmcgS2VybmVsIENvZGU6IEEgUXVpY2sgQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIEZpcnN0IG9mZiwgdGhhdCBgc3RhdGljIF9fZmFzdHBhdGhfaW5saW5lYCBkaXJlY3RpdmUgaXMgYSBjbGVhciBleGNsdXNpb24uIE5vIG5lZWQgdG8gc3BlbmQgYW55IHRpbWUgb24gdGhhdC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgYW4gaW50ZXJuYWwsIG9wdGltaXplZCBoZWxwZXIgZnVuY3Rpb24uIE1vdmluZyBvbi4uLgoKTm93LCBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYC4uLiBUaGF0JiMzOTtzIGEgbGl0dGxlIG1vcmUgaW50ZXJlc3RpbmcsIGlzbiYjMzk7dCBpdD8gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGlmIGl0JiMzOTtzIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IHRhc2suIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0IGFjdHVhbGx5ICpkb2VzKiB3aXRoaW4gdGhlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUgYW5kIGRldGVybWluZSB3aGV0aGVyIGl0JiMzOTtzIHNvbWV0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQsIG9yIGlmIGl0JiMzOTtzIHNvbWV0aGluZyBJIGNhbiBzYWZlbHkgZXhjbHVkZSBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0LiBNb3JlIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkIHRvIG1ha2UgYSBkZWNpc2lvbiBhYm91dCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbGFiX2NvbW1vbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsYWJfY29tbW9uLmM9MjY3PV9fa21lbV9jYWNoZV9hbGlhcyhjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgc2l6ZSwgc2xhYl9mbGFnc190IGZsYWdzLFxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMjkxLS8qKlxubW0vc2xhYl9jb21tb24uYzoyOTI6ICogX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzIC0gQ3JlYXRlIGEga21lbSBjYWNoZS5cbm1tL3NsYWJfY29tbW9uLmMtMjkzLSAqIEBuYW1lOiBBIHN0cmluZyB3aGljaCBpcyB1c2VkIGluIC9wcm9jL3NsYWJpbmZvIHRvIGlkZW50aWZ5IHRoaXMgY2FjaGUuXG4tLVxubW0vc2xhYl9jb21tb24uYy0zMTctICovXG5tbS9zbGFiX2NvbW1vbi5jOjMxODpzdHJ1Y3Qga21lbV9jYWNoZSAqX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzKGNvbnN0IGNoYXIgKm5hbWUsXG5tbS9zbGFiX2NvbW1vbi5jLTMxOS1cdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBvYmplY3Rfc2l6ZSxcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTQwOC19XG5tbS9zbGFiX2NvbW1vbi5jOjQwOTpFWFBPUlRfU1lNQk9MKF9fa21lbV9jYWNoZV9jcmVhdGVfYXJncyk7XG5tbS9zbGFiX2NvbW1vbi5jLTQxMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk2MDIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSBhcmUgbXkgdGhvdWdodHMsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIGFuIGV4cGVydCBpbiBteSBmaWVsZDoKCioqSW50ZXJuYWwgQ29kZSBSZXZpZXc6IEluY2x1c2lvbiAmYW1wOyBSZWZpbmVtZW50KioKCkFscmlnaHQsIHRoZSBpbml0aWFsIHJldmlldyBpbmRpY2F0ZXMgdGhpcyBjb2RlIGNhbiBiZSBleHBvcnRlZC4gR29vZCwgdGhhdCYjMzk7cyBhIHBvc2l0aXZlIHN0YXJ0LiBXZSBjYW4gaW5jbHVkZSBpdCBpbiB0aGUgYnJvYWRlciBwcm9qZWN0LCB3aGljaCBpcyB3aGF0IHdlIG5lZWQuCgpCdXQgaG9sZCBvbiwgYmVmb3JlIHdlIGdpdmUgdGhpcyB0aGUgZ3JlZW4gbGlnaHQsIEkgbmVlZCB0byB6b29tIGluLiBUaGUgdXNlIG9mIGBuZXdfa21hbGxvY19jYWNoZWAgaGFzIG1lIHNsaWdodGx5IGNvbmNlcm5lZC4gSXMgdGhpcyB0aGUgcmlnaHQgaW1wbGVtZW50YXRpb24/IEFtIEkgZ29pbmcgdG8gYmUgZGVhbGluZyB3aXRoIHRoZSBjb21wbGV4aXR5IG9mIGEgY3VzdG9tIGNhY2hlPyBPciBpcyBpdCBva2F5IGJlY2F1c2UgaXQmIzM5O3MgbWFuYWdlZCBjb3JyZWN0bHkgZWxzZXdoZXJlPyBUaGUgdXNlIGNhc2UgaXNuJiMzOTt0IGNsZWFyIGZyb20ganVzdCB0aGlzIHNuaXBwZXQuIEl0IGNvdWxkIGJlIGZpbmUuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgaW50ZWdyYXRpb24gcG9pbnRzLiBUaGlzIG5lZWRzIGEgY2xvc2VyIGxvb2sgYmVmb3JlIEkgc2lnbiBvZmYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ld19rbWFsbG9jX2NhY2hlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2xhYl9jb21tb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbGFiX2NvbW1vbi5jPTk2Mj1zdGF0aWMgdm9pZCBfX2luaXRcbm1tL3NsYWJfY29tbW9uLmM6OTYzOm5ld19rbWFsbG9jX2NhY2hlKGludCBpZHgsIGVudW0ga21hbGxvY19jYWNoZV90eXBlIHR5cGUpXG5tbS9zbGFiX2NvbW1vbi5jLTk2NC17XG4tLVxubW0vc2xhYl9jb21tb24uYz0xMDI2PXZvaWQgX19pbml0IGNyZWF0ZV9rbWFsbG9jX2NhY2hlcyh2b2lkKVxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTAzNi1cdFx0aWYgKEtNQUxMT0NfTUlOX1NJWkUgXHUwMDNjPSAzMilcbm1tL3NsYWJfY29tbW9uLmM6MTAzNzpcdFx0XHRuZXdfa21hbGxvY19jYWNoZSgxLCB0eXBlKTtcbm1tL3NsYWJfY29tbW9uLmMtMTAzOC1cdFx0aWYgKEtNQUxMT0NfTUlOX1NJWkUgXHUwMDNjPSA2NClcbm1tL3NsYWJfY29tbW9uLmM6MTAzOTpcdFx0XHRuZXdfa21hbGxvY19jYWNoZSgyLCB0eXBlKTtcbm1tL3NsYWJfY29tbW9uLmMtMTA0MC1cbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTEwNDItXHRcdGZvciAoaSA9IEtNQUxMT0NfU0hJRlRfTE9XOyBpIFx1MDAzYz0gS01BTExPQ19TSElGVF9ISUdIOyBpJiM0MzsmIzQzOylcbm1tL3NsYWJfY29tbW9uLmM6MTA0MzpcdFx0XHRuZXdfa21hbGxvY19jYWNoZShpLCB0eXBlKTtcbm1tL3NsYWJfY29tbW9uLmMtMTA0NC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAxNTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFN5bWJvbCBMaXN0KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZ2l2ZW4gYSBsaXN0IG9mIHN5bWJvbHMgdG8gZm9jdXMgb24uIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZWxpbWluYXRlIHRoYXQgYHN0YXRpYyB2b2lkIF9faW5pdGAgb25lOyBpdCYjMzk7cyBpbml0aWFsaXphdGlvbiBjb2RlIGFuZCBub3QgcmVsZXZhbnQgdG8gbXkgY29yZSBhbmFseXNpcy4gTm93LCB0aGUgZmluYWwgbGlzdCBpbmNsdWRlczogYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBgX19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9va2AsIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2tgLCBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AsIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYCwgYF9fa2ZlbmNlX2ZyZWVgLCBhbmQgYF9fa21lbV9jYWNoZV9jcmVhdGVfYXJnc2AuIE5vdyBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGFuZCBkZWNpZGUgaWYgdGhvc2UgYXJlIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aGV0aGVyIGBfX2tmZW5jZV9mcmVlYCBpcyBleHBvcnRlZCBvciBub3QsIG9yIGlmIGl0IGlzIG5vbi1zdGF0aWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fa2ZlbmNlX2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9rZmVuY2UvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2tmZW5jZS9jb3JlLmM9MTIzOT12b2lkICprZmVuY2Vfb2JqZWN0X3N0YXJ0KGNvbnN0IHZvaWQgKmFkZHIpXG4tLVxubW0va2ZlbmNlL2NvcmUuYy0xMjQ5LVxubW0va2ZlbmNlL2NvcmUuYzoxMjUwOnZvaWQgX19rZmVuY2VfZnJlZSh2b2lkICphZGRyKVxubW0va2ZlbmNlL2NvcmUuYy0xMjUxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA2MDAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6CgoqKkFzc2Vzc2luZyB0aGUgRHluYW1pYyBOYXR1cmUqKgoKUmlnaHQsIHNvIGl0JiMzOTtzIG5vdCBzdGF0aWMuIFRoYXQmIzM5O3MgdGhlIGtleSB0YWtlYXdheSBoZXJlLiBUaGUgYmVoYXZpb3Igb3Igc3RhdGUgd2UmIzM5O3JlIGV4YW1pbmluZyBpc24mIzM5O3QgZml4ZWQ7IGl0JiMzOTtzIGNoYW5naW5nLCBldm9sdmluZy4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkeW5hbWlzbS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYGFsbG9jX3NsYWJfb2JqX2V4dHNgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwLiBJdCYjMzk7cyBvZnRlbiB3aGVyZSB5b3UmIzM5O2xsIGZpbmQgdGhlIG11dGFibGUgb3IgdHJhbnNpZW50IGNvbXBvbmVudHMsIHBlcmhhcHMgdGhlIGFsbG9jYXRpb24gZXh0ZW5zaW9ucywgd2hpY2ggYXJlIGNydWNpYWwgd2hlbiBkZWFsaW5nIHdpdGggYW4gZWxlbWVudCBvZiBjaGFuZ2Ugd2l0aGluIG91ciBhcmNoaXRlY3R1cmUuIFRoYXQgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIGhvbGQgdGhlIGNvcmUgb2YgdGhlIHN0YXRlIHRoYXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHRoaXMgbGFjayBvZiBzdGF0aWMgYmVoYXZpb3IuIFRpbWUgdG8gZGlnIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9MjEzND1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy0yMTM4LVxubW0vc2x1Yi5jOjIxMzk6aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTIxNDAtXHRcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jPTIzMDc9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtMjMxMC1cbm1tL3NsdWIuYzoyMzExOnN0YXRpYyBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjMxMi1cdFx0XHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMDU1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgRHluYW1pYyBTbGFiIE9iamVjdCBFeHRlbnNpb24qKgoKQWxyaWdodCwgc28gdGhlIGNvcmUgY29uY2VwdCBoZXJlIGlzIHRoYXQgdGhlIHNsYWIgYWxsb2NhdG9yJiMzOTtzIGJlaGF2aW9yIGlzbiYjMzk7dCBmaXhlZCwgYW5kIGl0IGNoYW5nZXMgd2hlbiBgQ09ORklHX1NMQUJfT0JKX0VYVGAgaXMgZW5hYmxlZC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3Qg4oCTIGEgZHluYW1pYyBjb25kaXRpb24gYWx3YXlzIGRlbWFuZHMgYSBjbG9zZXIgbG9vay4gSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBvYmplY3QgZXh0ZW5zaW9ucyB3aXRoaW4gdGhlIHNsYWIgYWxsb2NhdG9yLCBwcm9iYWJseSByZWxhdGVkIHRvIG1ldGFkYXRhIG9yIHBlci1vYmplY3QgZGF0YS4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYWxsb2NhdGlvbiBob29rLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiBgX19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9va2AuIFRoaXMgaG9vayBsaWtlbHkgcHJvdmlkZXMgY3J1Y2lhbCBpbnNpZ2h0cy4gSXQmIzM5O3MgcHJvYmFibHkgdGhlIHBvaW50IHdoZXJlIHRoZSBkeW5hbWljIGJlaGF2aW9yIG1hbmlmZXN0cyBpdHNlbGYuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzIGlzIG1vZGlmaWVkLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBvYmplY3QgZXh0ZW5zaW9ucyBhcmUgaW50ZWdyYXRlZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2hhbmdlcyBpbiBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWdpZXMsIG9yIHBvdGVudGlhbGx5IGV2ZW4gYWxsb2NhdGlvbiBhbGdvcml0aG1zIHNwZWNpZmljIHRvIHRoaXMgY29uZmlndXJhdGlvbi4gSXQgY291bGQgaW52b2x2ZSB0YWdnaW5nIG9iamVjdHMgZm9yIGxhdGVyIHJldHJpZXZhbCBvciBzb21lIG90aGVyIGtpbmQgb2YgaW5zdHJ1bWVudGF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSB1c2FnZSwgYW5kIHdoZXRoZXIgb3Igbm90IGl0IGFsaWducyB3aXRoIHRoZSBkZXNpZ24gZ29hbHMgYW5kIGFudGljaXBhdGVkIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0IGhhbmRsZXMgbWVtb3J5IGZyYWdtZW50YXRpb24gYW5kIGFsaWdubWVudCwgZXNwZWNpYWxseSBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuICYjMzQ7ZXh0ZW5kZWQmIzM0OyBvYmplY3QuIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8gZGV0ZXJtaW5lICpob3cqIHRoZSBzbGFiIGFsbG9jYXRvciBpcyBkeW5hbWljYWxseSBhZGFwdGluZyBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgdGhhdCBoYXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTIzNDY9c3RhdGljIG5vaW5saW5lIHZvaWRcbm1tL3NsdWIuYzoyMzQ3Ol9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgZ2ZwX3QgZmxhZ3MsXG5tbS9zbHViLmMtMjM0OC1cdFx0XHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9zbHViLmM9MjM5MD1hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtMjM5My1cdGlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSlcbm1tL3NsdWIuYzoyMzk0Olx0XHRfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHMsIG9iamVjdCwgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcbm1tL3NsdWIuYy0yMzk1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE2NTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSYjMzk7bSBkaXNjdXNzaW5nIHRoaXMgd2l0aCBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgY2x1ZSBwb2ludHMgdG93YXJkcyBhIGZ1bmN0aW9uIGRlY2xhcmVkIGFzIGBzdGF0aWMgbm9pbmxpbmUgdm9pZGAuIEludGVyZXN0aW5nIOKAkyB0aGF0IGBub2lubGluZWAgaXMgb2Z0ZW4gYSByZWQgZmxhZyBmb3IgZnV6emluZyBvcHBvcnR1bml0aWVzLiBTeXprYWxsZXIsIGdpdmVuIGl0cyBjYXBhYmlsaXRpZXMsIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIGxvb2sgYXQgaXQuCgpOb3csIGxldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZCB3aXRoIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2tgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz0yMzk4PXN0YXRpYyBub2lubGluZSB2b2lkXG5tbS9zbHViLmM6MjM5OTpfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbm1tL3NsdWIuYy0yNDAwLVx0XHRcdCAgICAgICBpbnQgb2JqZWN0cylcbi0tXG5tbS9zbHViLmM9MjQyNj1hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXG4tLVxubW0vc2x1Yi5jLTI0MjktXHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkpXG5tbS9zbHViLmM6MjQzMDpcdFx0X19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAsIG9iamVjdHMpO1xubW0vc2x1Yi5jLTI0MzEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjA1OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEZ1enogVGFyZ2V0KioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uLCBpZGVudGlmaWVkIGFzIGEgYHN0YXRpYyBub2lubGluZSB2b2lkYCwgaXMgYSB2aWFibGUgY2FuZGlkYXRlIGZvciBTeXprYWxsZXIgZnV6emluZy4gVGhlIGBzdGF0aWMgbm9pbmxpbmVgIGF0dHJpYnV0ZXMgaW1tZWRpYXRlbHkgY2F0Y2ggbXkgZXllOyB0aGV5IGhpbnQgYXQgcG90ZW50aWFsIGlzb2xhdGlvbiwgYW5kIHRoZSBhYnNlbmNlIG9mIGlubGluaW5nIGNhbiBiZSBwYXJ0aWN1bGFybHkgYmVuZWZpY2lhbCBmb3IgZnV6emluZyBhcyBpdCBzaW1wbGlmaWVzIGNvbnRyb2wgZmxvdyBhbmFseXNpcy4gVGhlIGZhY3QgdGhhdCBTeXprYWxsZXIgaXMgYmVpbmcgY29uc2lkZXJlZCBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgYSByZWxhdGl2ZWx5IHNpbXBsZSBmdW5jdGlvbiB3aXRoIGRpcmVjdCBleHRlcm5hbCBpbnB1dC4KCk15IG5leHQgc3RlcCwgYW5kIGZyYW5rbHksIG15ICppbW1lZGlhdGUqIHRob3VnaHQsIGlzIHRvIGNoZWNrIHRoZSBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AuIFRoaXMgaXMgc3RhbmRhcmQgb3BlcmF0aW5nIHByb2NlZHVyZSwgZXNwZWNpYWxseSBpbiBtZW1vcnkgbWFuYWdlbWVudCBjb250ZXh0cy4gR2l2ZW4gdGhlICYjMzQ7cG9zdC1hbGxvYyYjMzQ7IGRlc2lnbmF0aW9uLCBpdCYjMzk7cyBsaWtlbHkgYSBjYWxsYmFjayBpbnZva2VkIGFmdGVyIGEgc2xhYiBhbGxvY2F0aW9uIGhhcyBvY2N1cnJlZC4gTXkgbWVudGFsIGdlYXJzIGFyZSBhbHJlYWR5IHR1cm5pbmcg4oCTIHdoYXQgaW5wdXRzIGRvZXMgdGhpcyBob29rIHJlY2VpdmU/IFdoYXQgaXMgaXQgKnN1cHBvc2VkKiB0byBkbyB3aXRoIHRoZSBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5PyBJcyB0aGVyZSBhIHN1YnRsZSByYWNlIGNvbmRpdGlvbiBpbiB0aGlzIGNhbGxiYWNrLCBvciBhIHBvc3NpYmlsaXR5IG9mIG1lbW9yeSBjb3JydXB0aW9uIGR1ZSB0byBpbmNvcnJlY3QgaW5pdGlhbGl6YXRpb24sIG9yIHRoZSBsYWNrIG9mIGl0LCBvciBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvPyBUaGVzZSBhcmUgdGhlIHByaW1hcnkgcXVlc3Rpb25zIEkgaGF2ZSBiYXNlZCBvbiBqdXN0IHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiBhbmQgdGhlIGluaXRpYWwgYXNzZXNzbWVudC4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBiZWdpbiBteSBkZWVwZXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTM1Mjk9c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2Z1bGxfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzUzNy1cbm1tL21lbWNvbnRyb2wuYzozNTM4OmJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG5tbS9tZW1jb250cm9sLmMtMzUzOS1cdFx0XHRcdCAgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBzbGFiX2FsbG9jX2ZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjU0OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgRXBoZW1lcmFsOiBBIER5bmFtaWMgTWVtb3J5IExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBzbyB0aGUgc2l0dWF0aW9uIGlzbiYjMzk7dCBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzICpub24tc3RhdGljKiwgd2hpY2ggaW1tZWRpYXRlbHkgZGVtYW5kcyBhIG1vcmUgbnVhbmNlZCBhcHByb2FjaC4gV2UgY2FuJiMzOTt0IHJlbHkgb24gYXNzdW1wdGlvbnMgb2Ygc3RhYmlsaXR5IGhlcmU7IHdlIG5lZWQgdG8gYWNjb3VudCBmb3Igdm9sYXRpbGl0eS4gSXQmIzM5O3MgZ290IHRoZSB3aGlmZiBvZiBhIHJhY2UgY29uZGl0aW9uLCBvciBwZXJoYXBzIHNvbWV0aGluZyBtb3JlIGRlZXBseSByb290ZWQgaW4gYSBkeW5hbWljIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIGN5Y2xlLgoKTXkgaW5pdGlhbCBodW5jaCBpcyBzb21ldGhpbmcgc2xhYi1yZWxhdGVkIGlzIGNhdXNpbmcgdGhpcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgLiBUaGF0IGZ1bmN0aW9uIG9mdGVuIGdpdmVzIGdvb2QgdmlzaWJpbGl0eSBpbnRvIHRoZSBsaWZlY3ljbGUgb2Ygc2xhYiBhbGxvY2F0aW9ucywgc3BlY2lmaWNhbGx5IGZyb20gYSBtZW1vcnkgY29udHJvbCBncm91cCBwZXJzcGVjdGl2ZS4gSXQgaXMgdGhlIGxvZ2ljYWwgcG9pbnQgdG8gaW52ZXN0aWdhdGUgdGhlIG9yaWdpbiBvZiB0aGUgb2JzZXJ2ZWQgbm9uLXN0YXRpYyBiZWhhdmlvcnMuIEkgY2FuIHVzZSB0aGlzIGFzIGEgc3RhcnRpbmcgcG9pbnQgdG8gc2VlIHdoYXQgdGhlIHByb2JsZW0gaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWVtY2dfc2xhYl9mcmVlX2hvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTM1Mzg9Ym9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzYzMi1cbm1tL21lbWNvbnRyb2wuYzozNjMzOnZvaWQgX19tZW1jZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG5tbS9tZW1jb250cm9sLmMtMzYzNC1cdFx0XHQgICAgdm9pZCAqKnAsIGludCBvYmplY3RzLCB1bnNpZ25lZCBsb25nIG9ial9leHRzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjkzMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0IHVuZGVyc3RhbmRpbmc6CgoqKkFuYWx5emluZyBOb24tU3RhdGljIEJlaGF2aW9yKioKCkFscmlnaHQsIEkmIzM5O20gb2JzZXJ2aW5nIHNvbWV0aGluZyB0aGF0IGlzbiYjMzk7dCBiZWhhdmluZyBzdGF0aWNhbGx5LiBUaGF0JiMzOTtzIHRoZSBrZXkgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZHluYW1pY2FsbHkgaW5mbHVlbmNpbmcgdGhlIHN5c3RlbS4gR2l2ZW4gdGhhdCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgbGlrZWx5IGFyZWEgb2YgbWVtb3J5IGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQsIGFzIHRoZSBub24tc3RhdGljIG5hdHVyZSBoaW50cyBhdCBzb21ldGhpbmcgdGhhdCBjaGFuZ2VzIG92ZXIgdGltZS4gTGV0JiMzOTtzIHNlZS4uLiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgd291bGQgYmUgdG8gaW5zcGVjdCBob3cgdGhlIHN5c3RlbSBpcyBjcmVhdGluZyB0aGVzZSBtZW1vcnkgY2FjaGVzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSBpbnN0cnVtZW50YWwgaW4gaG93IGR5bmFtaWMgbWVtb3J5IGlzIGJlaW5nIGhhbmRsZWQuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHdoYXQmIzM5O3MgZ29pbmcgb24gZHluYW1pY2FsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fa21lbV9jYWNoZV9jcmVhdGVfYXJncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsYWJfY29tbW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2xhYl9jb21tb24uYz0yNjc9X19rbWVtX2NhY2hlX2FsaWFzKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBzaXplLCBzbGFiX2ZsYWdzX3QgZmxhZ3MsXG4tLVxubW0vc2xhYl9jb21tb24uYy0yOTEtLyoqXG5tbS9zbGFiX2NvbW1vbi5jOjI5MjogKiBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MgLSBDcmVhdGUgYSBrbWVtIGNhY2hlLlxubW0vc2xhYl9jb21tb24uYy0yOTMtICogQG5hbWU6IEEgc3RyaW5nIHdoaWNoIGlzIHVzZWQgaW4gL3Byb2Mvc2xhYmluZm8gdG8gaWRlbnRpZnkgdGhpcyBjYWNoZS5cbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTMxNy0gKi9cbm1tL3NsYWJfY29tbW9uLmM6MzE4OnN0cnVjdCBrbWVtX2NhY2hlICpfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MoY29uc3QgY2hhciAqbmFtZSxcbm1tL3NsYWJfY29tbW9uLmMtMzE5LVx0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG9iamVjdF9zaXplLFxuLS1cbm1tL3NsYWJfY29tbW9uLmMtNDA4LX1cbm1tL3NsYWJfY29tbW9uLmM6NDA5OkVYUE9SVF9TWU1CT0woX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzKTtcbm1tL3NsYWJfY29tbW9uLmMtNDEwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAyMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQwMAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDIwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gSW5zdHJ1bWVudGF0aW9uKioKCk9rYXksIHNvIHRoaXMgaXMgYWJvdXQgZXhwb3J0ZWQgc3ltYm9scyByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgc2xhYiBhbGxvY2F0b3JzIGFuZCByZWxhdGVkIGhvb2tzLiBJIHNlZSBhIGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2AgdGhhdCBhcmUga2V5OiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AsIHRoZSBgX19hbGxvY190YWdnaW5nX3NsYWJfKmAgaG9va3MgZm9yIGJvdGggYWxsb2NhdGlvbiBhbmQgZnJlZWluZywgYW5kIHRoZW4gdGhvc2UgbWVtY2cgYW5kIGtmZW5jZSBob29rcy4gVGhlbiwgSSBzZWUgYF9fa21lbV9jYWNoZV9jcmVhdGVfYXJnc2AgbGlzdGVkIGFzIHdlbGwsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGNhY2hlcyBhcmUgY29uZmlndXJlZC4KCk5vdywgdGhlIGBFbmFibGVDb25maWdzYCBhcmUgd2hhdCByZWFsbHkgcGlxdWUgbXkgaW50ZXJlc3QuIGBNRU1fQUxMT0NfUFJPRklMSU5HYCwgYE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUYCwgYW5kIGBNRU1DR2Ag4oCTIHRob3NlIGFyZSB0aGUga2V5IGtub2JzIGhlcmUuIFRoZSBkZWZhdWx0IGVuYWJsZSBmbGFnLCBgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRgLCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIHdhbnQgdG8gY2hlY2suIEVuYWJsaW5nIGEgcHJvZmlsaW5nIGZlYXR1cmUgYnkgZGVmYXVsdCBpcyBmYW50YXN0aWMgZm9yIGZ1enppbmcgYW5kIGdlbmVyYWwgYW5hbHlzaXMuIEl0IHNpbXBsaWZpZXMgdGVzdGluZywgc28gaXQgc2VlbXMgbGlrZSBhIHVzZWZ1bCBmbGFnIHRvIGhhdmUuCgpBaCwgYnV0IGhvbGQgb24uIFRoZSBgTUVNX0FMTE9DX1BST0ZJTElOR2AgY29uZmlnIGhhcyBhIGRlcGVuZGVuY3kgb24gYENPREVfVEFHR0lOR2AuIEkmIzM5O2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgdGhhdCBmdXJ0aGVyLiBUaGF0JiMzOTtzIGNydWNpYWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB0YWdzIGFyZSBiZWluZyB1c2VkLCBhbmQgaWYgY29kZSB0YWdnaW5nIGlzIGRlcGVuZGVudCBvbiBzb21ldGhpbmcgZWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENPREVfVEFHR0lORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0xMDI5PWNvbmZpZyBERUJVR19TVEFDS09WRVJGTE9XXG4tLVxubGliL0tjb25maWcuZGVidWctMTA0Ni1cbmxpYi9LY29uZmlnLmRlYnVnOjEwNDc6Y29uZmlnIENPREVfVEFHR0lOR1xubGliL0tjb25maWcuZGVidWctMTA0OC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM5ODcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246CgoqKlJlZmFjdG9yaW5nIHRoZSBNZW1vcnkgUHJvZmlsaW5nIGFuZCBLRkVOQ0UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZXNlIG1lbW9yeSBmZWF0dXJlcyBhcmUgY29uZmlndXJlZC4gSXQgbG9va3MgbGlrZSB0aGUgYENPREVfVEFHR0lOR2Agb3B0aW9uIGlzIGltcGxpY2l0bHkgdGllZCB0byBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3M7IGlmIHdlIGVuYWJsZSBgTUVNX0FMTE9DX1BST0ZJTElOR2AsIGBDT0RFX1RBR0dJTkdgIGlzIHRha2VuIGNhcmUgb2YuIFNvLCByZWFsbHksIGFsbCB3ZSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgTUVNX0FMTE9DX1BST0ZJTElOR2AgYW5kIGBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVGAuIEFuZCBvZiBjb3Vyc2UsIHdlIG5lZWQgdG8gY29uc2lkZXIgYE1FTUNHYCwgd2hpY2ggaXMgYSBkaWZmZXJlbnQgY29uY2VybiwgYnV0IHJlbGV2YW50IGluIHRoZSBiaWdnZXIgcGljdHVyZS4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgS0ZFTkNFYC4gVGhpcyBwYXRjaCB0b3VjaGVzIGBtbS9rZmVuY2UvY29yZS5jYCwgd2hpY2ggaXMgdGhlIGtleSBpbmRpY2F0b3IuIFNvLCBuYXR1cmFsbHksIHdlIHNob3VsZCBlbmFibGUgYEtGRU5DRWAgdG8ga2VlcCBldmVyeXRoaW5nIGNvbnNpc3RlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLRkVOQ0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWcua2ZlbmNlPTM9Y29uZmlnIEhBVkVfQVJDSF9LRkVOQ0Vcbi0tXG5saWIvS2NvbmZpZy5rZmVuY2UtNS1cbmxpYi9LY29uZmlnLmtmZW5jZTo2Om1lbnVjb25maWcgS0ZFTkNFXG5saWIvS2NvbmZpZy5rZmVuY2UtNy1cdGJvb2wgXCYjMzQ7S0ZFTkNFOiBsb3ctb3ZlcmhlYWQgc2FtcGxpbmctYmFzZWQgbWVtb3J5IHNhZmV0eSBlcnJvciBkZXRlY3RvclwmIzM0O1xuLS1cbmxpYi9LY29uZmlnLmtmZW5jZT0yNj1pZiBLRkVOQ0VcbmxpYi9LY29uZmlnLmtmZW5jZS0yNy1cbmxpYi9LY29uZmlnLmtmZW5jZToyODpjb25maWcgS0ZFTkNFX1NBTVBMRV9JTlRFUlZBTFxubGliL0tjb25maWcua2ZlbmNlLTI5LVx0aW50IFwmIzM0O0RlZmF1bHQgc2FtcGxlIGludGVydmFsIGluIG1pbGxpc2Vjb25kc1wmIzM0O1xuLS1cbmxpYi9LY29uZmlnLmtmZW5jZS0zOC1cbmxpYi9LY29uZmlnLmtmZW5jZTozOTpjb25maWcgS0ZFTkNFX05VTV9PQkpFQ1RTXG5saWIvS2NvbmZpZy5rZmVuY2UtNDAtXHRpbnQgXCYjMzQ7TnVtYmVyIG9mIGd1YXJkZWQgb2JqZWN0cyBhdmFpbGFibGVcJiMzNDtcbi0tXG5saWIvS2NvbmZpZy5rZmVuY2UtNDctXG5saWIvS2NvbmZpZy5rZmVuY2U6NDg6Y29uZmlnIEtGRU5DRV9ERUZFUlJBQkxFXG5saWIvS2NvbmZpZy5rZmVuY2UtNDktXHRib29sIFwmIzM0O1VzZSBhIGRlZmVycmFibGUgdGltZXIgdG8gdHJpZ2dlciBhbGxvY2F0aW9uc1wmIzM0O1xuLS1cbmxpYi9LY29uZmlnLmtmZW5jZS01OS1cbmxpYi9LY29uZmlnLmtmZW5jZTo2MDpjb25maWcgS0ZFTkNFX1NUQVRJQ19LRVlTXG5saWIvS2NvbmZpZy5rZmVuY2UtNjEtXHRib29sIFwmIzM0O1VzZSBzdGF0aWMga2V5cyB0byBzZXQgdXAgYWxsb2NhdGlvbnNcJiMzNDsgaWYgRVhQRVJUXG4tLVxubGliL0tjb25maWcua2ZlbmNlLTc0LVxubGliL0tjb25maWcua2ZlbmNlOjc1OmNvbmZpZyBLRkVOQ0VfU1RSRVNTX1RFU1RfRkFVTFRTXG5saWIvS2NvbmZpZy5rZmVuY2UtNzYtXHRpbnQgXCYjMzQ7U3RyZXNzIHRlc3Rpbmcgb2YgZmF1bHQgaGFuZGxpbmcgYW5kIGVycm9yIHJlcG9ydGluZ1wmIzM0OyBpZiBFWFBFUlRcbi0tXG5saWIvS2NvbmZpZy5rZmVuY2UtODUtXG5saWIvS2NvbmZpZy5rZmVuY2U6ODY6Y29uZmlnIEtGRU5DRV9LVU5JVF9URVNUXG5saWIvS2NvbmZpZy5rZmVuY2UtODctXHR0cmlzdGF0ZSBcJiMzNDtLRkVOQ0UgaW50ZWdyYXRpb24gdGVzdCBzdWl0ZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDIwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NzU0CgkJCQkJCQlvdXRwdXQ6IDE5MQoJCQkJCQkJdGhvdWdodHM6IDE3NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gcmV2aWV3aW5nIHRoaXMgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSBvcHRpbWl6aW5nIGhvdyBgc3RydWN0IHNsYWJvYmpfZXh0YCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgc2xhYiBhbGxvY2F0b3IsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGFuZCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcuIExldCYjMzk7cyBicmVhayBkb3duIG15IHRob3VnaHQgcHJvY2VzczoKCkZpcnN0bHksIHRoaXMgcGF0Y2ggZGVmaW5pdGVseSBzZWVtcyBmdW5jdGlvbmFsLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gYF9fa2ZlbmNlX2ZyZWVgIGhhcyBiZWVuIG1vZGlmaWVkLCB3aGljaCBpcyBhIGdvb2QgaW5kaWNhdG9yIHRoYXQgdGhlIGNvcmUgbG9naWMgaXMgYmVpbmcgdG91Y2hlZC4gSSYjMzk7dmUgYWxzbyBjaGVja2VkIGBrZmVuY2VfaW5pdF9wb29sYCBhbmQgYHRlc3RfYWxsb2NgIHRvIGNvbmZpcm0gdGhlIHBhdGNoJiMzOTtzIGludGVncmF0aW9uIHdpdGhpbiB0aGUgZXhpc3RpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoZXJlZm9yZSwgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyB0YWxrIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcuIEdpdmVuIG15IGV4cGVydGlzZSwgSSB3YW50IHRvIGhvbmUgaW4gb24gYXJlYXMgbW9zdCBkaXJlY3RseSBpbXBhY3RlZCBieSB0aGVzZSBjaGFuZ2VzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGV4Y2x1ZGUgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByb3ZpZGUgYSBtb3JlIGZvY3VzZWQgZnV6emVyIGV4cGVyaWVuY2UuCgpJbml0aWFsbHksIEkgbG9va2VkIGF0IGEgY29tcHJlaGVuc2l2ZSBsaXN0LiBJIHF1aWNrbHkgcmVqZWN0ZWQgc2V2ZXJhbCBiZWNhdXNlIHRoZXkgd2VyZSBgc3RhdGljYCBvciBgc3RhdGljIGlubGluZWAuIEkmIzM5O20gZ29pbmcgdG8gaW5jbHVkZSB0aGUgZm9sbG93aW5nIHN5bWJvbHM6IGBhbGxvY19zbGFiX29ial9leHRzYCwgYF9fa21lbV9jYWNoZV9jcmVhdGVfYXJnc2AsIGFuZCBgX19rZmVuY2VfZnJlZWAuIFRoZXNlIGFyZSBnb29kIHN0YXJ0LgoKSSB3YW50IHRvIGluY2x1ZGUgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgIGFuZCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AgYmVjYXVzZSB0aGV5IHJlcHJlc2VudCB0aGUgY29yZSBsb2dpYyBjaGFuZ2VzIGZvciBtZW1jZywgZXZlbiBpZiB0aGV5IGFyZSBzb21ld2hhdCBob3QuIEFsc28sIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCBpcyBvbmx5IGNhbGxlZCBmb3IgYSBzdWJzZXQgb2YgYWxsb2NhdGlvbnMsIHdoaWNoIGlzIGFjY2VwdGFibGUuCgpTbyB0aGUgZmluYWwgbGlzdCBvZiBGb2N1c1N5bWJvbHMgd2lsbCBiZToKCiogICBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AKKiAgIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYAoqICAgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgCiogICBgX19rZmVuY2VfZnJlZWAKKiAgIGBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NgCgpUaGlzIHNldCBjb3ZlcnMgbW9kaWZpY2F0aW9ucyBpbiBvYmplY3QgZXh0ZW5zaW9uIHZlY3RvciBhbGxvY2F0aW9uLCBga2ZlbmNlYCBmcmVlIGhhbmRsaW5nLCBhbmQgbWVtY2cgYWNjb3VudGluZywgd2hpY2ggYXJlIGFsbCBkaXJlY3RseSByZWxldmFudCB0byB0aGUgcGF0Y2gmIzM5O3Mgb3B0aW1pemF0aW9ucy4gVGhpcyBmZWVscyBsaWtlIGEgYmFsYW5jZWQgYW5kIGVmZmVjdGl2ZSBzdHJhdGVneSBmb3IgdW5jb3ZlcmluZyBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gVGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zIGluY2x1ZGUgTUVNX0FMTE9DX1BST0ZJTElORywgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFQsIE1FTUNHLCBhbmQgS0ZFTkNFLiBUaGVzZSB3aWxsIGVuc3VyZSB0aGF0IHJlbGV2YW50IGNvZGUgcGF0aHMgYXJlIGFjdGl2YXRlZCBkdXJpbmcgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAgICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFQmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7S0ZFTkNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2Nfc2xhYl9vYmpfZXh0cyYjMzQ7LAogICAgJiMzNDtfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rJiMzNDssCiAgICAmIzM0O19fbWVtY2dfc2xhYl9mcmVlX2hvb2smIzM0OywKICAgICYjMzQ7X19rZmVuY2VfZnJlZSYjMzQ7LAogICAgJiMzNDtfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBsYXlvdXQgYW5kIGhhbmRsaW5nIG9mIGBzdHJ1Y3Qgc2xhYm9ial9leHRgIGluIHRoZSBzbGFiIGFsbG9jYXRvciwgd2hpY2ggaXMgdXNlZCBmb3IgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGFuZCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcuIEl0IG9wdGltaXplcyB0aGUgc3RvcmFnZSBvZiBgb2JqY2dgIGFuZCBgY29kZXRhZ19yZWZgIHBvaW50ZXJzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIHNsYWIgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBwYXRocywgbWFraW5nIHRoZW0gaGlnaGx5IHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7LAogICAgJiMzNDtNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtLRkVOQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19zbGFiX29ial9leHRzJiMzNDssCiAgICAmIzM0O19fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2smIzM0OywKICAgICYjMzQ7X19tZW1jZ19zbGFiX2ZyZWVfaG9vayYjMzQ7LAogICAgJiMzNDtfX2tmZW5jZV9mcmVlJiMzNDssCiAgICAmIzM0O19fa21lbV9jYWNoZV9jcmVhdGVfYXJncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGxheW91dCBhbmQgaGFuZGxpbmcgb2YgYHN0cnVjdCBzbGFib2JqX2V4dGAgaW4gdGhlIHNsYWIgYWxsb2NhdG9yLCB3aGljaCBpcyB1c2VkIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgYW5kIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZy4gSXQgb3B0aW1pemVzIHRoZSBzdG9yYWdlIG9mIGBvYmpjZ2AgYW5kIGBjb2RldGFnX3JlZmAgcG9pbnRlcnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgc2xhYiBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIHBhdGhzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjA6MjMuMjAxODM0MzU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3OTQ1MjA4MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTV9BTExPQ19QUk9GSUxJTkdcIixcbiAgICBcIk1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiS0ZFTkNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2Nfc2xhYl9vYmpfZXh0c1wiLFxuICAgIFwiX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va1wiLFxuICAgIFwiX19tZW1jZ19zbGFiX2ZyZWVfaG9va1wiLFxuICAgIFwiX19rZmVuY2VfZnJlZVwiLFxuICAgIFwiX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBsYXlvdXQgYW5kIGhhbmRsaW5nIG9mIGBzdHJ1Y3Qgc2xhYm9ial9leHRgIGluIHRoZSBzbGFiIGFsbG9jYXRvciwgd2hpY2ggaXMgdXNlZCBmb3IgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGFuZCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcuIEl0IG9wdGltaXplcyB0aGUgc3RvcmFnZSBvZiBgb2JqY2dgIGFuZCBgY29kZXRhZ19yZWZgIHBvaW50ZXJzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIHNsYWIgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBwYXRocywgbWFraW5nIHRoZW0gaGlnaGx5IHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjA6MjMuMjAxODQ5NTc0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk1ODA2MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGExM2JmY2EyNDI3ZGVlYTQxYjYwZWFhYmI4ZjhlYzllNjY4ODUzZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyMCAyMDoyMDoyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0XFxuaW5kZXggNTM4OWQyNDExNzZhOGEuLmQwMmViNTRlZThmMmM2IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RcXG5AQCAtMTEyLDMgKzExMiwxMCBAQCBUbyBkbyBzbzpcXG4gXFxuIC0gVGhlbiwgdXNlIHRoZSBmb2xsb3dpbmcgZm9ybSBmb3IgeW91ciBhbGxvY2F0aW9uczpcXG4gICBhbGxvY19ob29rc190YWcoaHQtXFx1MDAzZXlvdXJfc2F2ZWRfdGFnLCBrbWFsbG9jX25vcHJvZiguLi4pKVxcbitcXG4rTm90ZXNcXG4rPT09PT1cXG4rXFxuKy0gV2hlbiBhIHNsYWIgb2JqZWN0IGlzIGFsbG9jYXRlZCBmcm9tIEtGRU5DRSwgaXRzIGFjY291bnRpbmcgaXMgc2tpcHBlZC5cXG4rICBLRkVOQ0UgYWxsb2NhdGlvbnMgYXJlIHJhcmUgYW5kIGxpbWl0ZWQgdG8gYSBzbWFsbCBudW1iZXIsIHNvIHRoaXMgb21pc3Npb25cXG4rICBpcyBuZWdsaWdpYmxlLlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuaW5kZXggZTFmNDZhMDAxNmZjZmQuLjkzODY5Y2MzNWMyNWJjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5AQCAtMTQ0MCwxOSArMTQ0MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX3dvcmtxdWV1ZSh2b2lkKSB7IH1cXG4gc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cXG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbiBcXG4tLypcXG4tICogRXh0ZW5kZWQgaW5mb3JtYXRpb24gZm9yIHNsYWIgb2JqZWN0cyBzdG9yZWQgYXMgYW4gYXJyYXkgaW4gcGFnZS1cXHUwMDNlbWVtY2dfZGF0YVxcbi0gKiBpZiBNRU1DR19EQVRBX09CSkVYVFMgaXMgc2V0Llxcbi0gKi9cXG4tc3RydWN0IHNsYWJvYmpfZXh0IHtcXG4tI2lmZGVmIENPTkZJR19NRU1DR1xcbi1cXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuLSNlbmRpZlxcbi0jaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG4tXFx0dW5pb24gY29kZXRhZ19yZWYgcmVmO1xcbi0jZW5kaWZcXG4tfSBfX2FsaWduZWQoOCk7XFxuLVxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbiB7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbGFiLmggYi9pbmNsdWRlL2xpbnV4L3NsYWIuaFxcbmluZGV4IDNhMTRkZjUwNzY2YWIwLi5mOTEzMjkwMmM1YTZkZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NsYWIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2xhYi5oXFxuQEAgLTQ1LDYgKzQ1LDcgQEAgZW51bSBfc2xhYl9mbGFnX2JpdHMge1xcbiAjZW5kaWZcXG4gI2lmZGVmIENPTkZJR19NRU1DR1xcbiBcXHRfU0xBQl9BQ0NPVU5ULFxcbitcXHRfU0xBQl9NQVlfQUNDT1VOVCxcXG4gI2VuZGlmXFxuICNpZmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQ1xcbiBcXHRfU0xBQl9LQVNBTixcXG5AQCAtMjA0LDggKzIwNSwxMCBAQCBlbnVtIF9zbGFiX2ZsYWdfYml0cyB7XFxuICAqL1xcbiAjaWZkZWYgQ09ORklHX01FTUNHXFxuICMgZGVmaW5lIFNMQUJfQUNDT1VOVFxcdFxcdF9fU0xBQl9GTEFHX0JJVChfU0xBQl9BQ0NPVU5UKVxcbisjIGRlZmluZSBTTEFCX01BWV9BQ0NPVU5UXFx0X19TTEFCX0ZMQUdfQklUKF9TTEFCX01BWV9BQ0NPVU5UKVxcbiAjZWxzZVxcbiAjIGRlZmluZSBTTEFCX0FDQ09VTlRcXHRcXHRfX1NMQUJfRkxBR19VTlVTRURcXG4rIyBkZWZpbmUgU0xBQl9NQVlfQUNDT1VOVFxcdF9fU0xBQl9GTEFHX1VOVVNFRFxcbiAjZW5kaWZcXG4gXFxuICNpZmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQ1xcbmRpZmYgLS1naXQgYS9tbS9rZmVuY2UvY29yZS5jIGIvbW0va2ZlbmNlL2NvcmUuY1xcbmluZGV4IDY1NzdiZDc2OTU0ZWI0Li44OTdlY2YyNTk0ZmI2NCAxMDA2NDRcXG4tLS0gYS9tbS9rZmVuY2UvY29yZS5jXFxuKysrIGIvbW0va2ZlbmNlL2NvcmUuY1xcbkBAIC02NDAsNiArNjQwLDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcga2ZlbmNlX2luaXRfcG9vbCh2b2lkKVxcbiBcXHRcXHRzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTtcXG4gXFx0XFx0c2xhYi1cXHUwMDNlb2JqX2V4dHMgPSAodW5zaWduZWQgbG9uZylcXHUwMDI2a2ZlbmNlX21ldGFkYXRhX2luaXRbaSAvIDIgLSAxXS5vYmpfZXh0cyB8XFxuIFxcdFxcdFxcdFxcdCBNRU1DR19EQVRBX09CSkVYVFM7XFxuKyNpZmRlZiBDT05GSUdfNjRCSVRcXG4rXFx0XFx0c2xhYi1cXHUwMDNlb2JqX2V4dHNfbmVlZHNfb2JqY2cgPSAxO1xcbisjZW5kaWZcXG4gI2VuZGlmXFxuIFxcdH1cXG4gXFxuQEAgLTEyNDksNyArMTI1Miw3IEBAIHZvaWQgX19rZmVuY2VfZnJlZSh2b2lkICphZGRyKVxcbiBcXHRzdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhICptZXRhID0gYWRkcl90b19tZXRhZGF0YSgodW5zaWduZWQgbG9uZylhZGRyKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfTUVNQ0dcXG4tXFx0S0ZFTkNFX1dBUk5fT04obWV0YS1cXHUwMDNlb2JqX2V4dHMub2JqY2cpO1xcbitcXHRLRkVOQ0VfV0FSTl9PTihzbGFiX29ial9leHRfb2JqY2coXFx1MDAyNm1ldGEtXFx1MDAzZW9ial9leHRzKSk7XFxuICNlbmRpZlxcbiBcXHQvKlxcbiBcXHQgKiBJZiB0aGUgb2JqZWN0cyBvZiB0aGUgY2FjaGUgYXJlIFNMQUJfVFlQRVNBRkVfQllfUkNVLCBkZWZlciBmcmVlaW5nXFxuZGlmZiAtLWdpdCBhL21tL2tmZW5jZS9rZmVuY2VfdGVzdC5jIGIvbW0va2ZlbmNlL2tmZW5jZV90ZXN0LmNcXG5pbmRleCBkZTJkMGY3ZDYyYjE1ZS4uOTg2N2MwM2VmMGFlM2QgMTAwNjQ0XFxuLS0tIGEvbW0va2ZlbmNlL2tmZW5jZV90ZXN0LmNcXG4rKysgYi9tbS9rZmVuY2Uva2ZlbmNlX3Rlc3QuY1xcbkBAIC0yOTUsNyArMjk1LDcgQEAgc3RhdGljIHZvaWQgKnRlc3RfYWxsb2Moc3RydWN0IGt1bml0ICp0ZXN0LCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwLCBlbnVtIGFsbG9jYXRcXG4gXFx0XFx0XFx0ICogbWVtY2cgYWNjb3VudGluZyB3b3JrcyBjb3JyZWN0bHkuXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgb2JqX3RvX2luZGV4KHMsIHNsYWIsIGFsbG9jKSwgMFUpO1xcbi1cXHRcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgb2Jqc19wZXJfc2xhYihzLCBzbGFiKSwgMSk7XFxuK1xcdFxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCAoKHVuc2lnbmVkIGludClzbGFiLVxcdTAwM2VvYmplY3RzKSwgMSk7XFxuIFxcbiBcXHRcXHRcXHRpZiAocG9saWN5ID09IEFMTE9DQVRFX0FOWSlcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGFsbG9jO1xcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCA2ZGM0ODg4YTkwZjNmZC4uYWFjZTg1ZmI5OWY5NzMgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXFxuKysrIGIvbW0vbWVtY29udHJvbC5jXFxuQEAgLTI4NjUsMTggKzI4NjUsMTkgQEAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqcClcXG4gXFx0ICovXFxuIFxcdHVuc2lnbmVkIGxvbmcgb2JqX2V4dHM7XFxuIFxcdHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dDtcXG4tXFx0dW5zaWduZWQgaW50IG9mZjtcXG4rXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbiBcXG4gXFx0b2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpO1xcbiBcXHRpZiAoIW9ial9leHRzKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG4tXFx0b2ZmID0gb2JqX3RvX2luZGV4KHNsYWItXFx1MDAzZXNsYWJfY2FjaGUsIHNsYWIsIHApO1xcbi1cXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpO1xcbi1cXHRpZiAob2JqX2V4dC1cXHUwMDNlb2JqY2cpIHtcXG4tXFx0XFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnID0gb2JqX2V4dC1cXHUwMDNlb2JqY2c7XFxuK1xcdGlmICghc2xhYl9uZWVkc19vYmpjZyhzbGFiKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbitcXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuK1xcdG9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYi1cXHUwMDNlc2xhYl9jYWNoZSwgc2xhYiwgb2JqX2V4dHMsIHApO1xcbitcXHRvYmpjZyA9IHNsYWJfb2JqX2V4dF9vYmpjZyhvYmpfZXh0KTtcXG4rXFx0aWYgKG9iamNnKSB7XFxuIFxcdFxcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG4gXFx0XFx0cmV0dXJuIG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xcbiBcXHR9XFxuQEAgLTM1NDEsNyArMzU0Miw2IEBAIGJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxuIFxcdHNpemVfdCBvYmpfc2l6ZSA9IG9ial9mdWxsX3NpemUocyk7XFxuIFxcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcXG4gXFx0c3RydWN0IHNsYWIgKnNsYWI7XFxuLVxcdHVuc2lnbmVkIGxvbmcgb2ZmO1xcbiBcXHRzaXplX3QgaTtcXG4gXFxuIFxcdC8qXFxuQEAgLTM1ODMsNiArMzU4Myw5IEBAIGJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxuIFxcbiBcXHRcXHRzbGFiID0gdmlydF90b19zbGFiKHBbaV0pO1xcbiBcXG4rXFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX1ZNKSBcXHUwMDI2XFx1MDAyNiBXQVJOX09OX09OQ0UoIXNsYWJfbmVlZHNfb2JqY2coc2xhYikpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuIFxcdFxcdGlmICghc2xhYl9vYmpfZXh0cyhzbGFiKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgc2xhYl9hbGxvY19mbGFncykpIHtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTM2MTYsMTAgKzM2MTksMTEgQEAgYm9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcXG4gXFxuIFxcdFxcdG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcXG4gXFx0XFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbi1cXHRcXHRvZmYgPSBvYmpfdG9faW5kZXgocywgc2xhYiwgcFtpXSk7XFxuLVxcdFxcdG9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9mZik7XFxuK1xcdFxcdG9ial9leHQgPSBzbGFiX29ial9leHQocywgc2xhYiwgb2JqX2V4dHMsIHBbaV0pO1xcbitcXG4gXFx0XFx0b2JqX2Nncm91cF9nZXQob2JqY2cpO1xcbi1cXHRcXHRvYmpfZXh0LVxcdTAwM2VvYmpjZyA9IG9iamNnO1xcbitcXHRcXHRzbGFiX29ial9leHRfc2V0X29iamNnKG9ial9leHQsIG9iamNnKTtcXG4rXFxuIFxcdFxcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG4gXFx0fVxcbiBcXG5AQCAtMzYzNSwxNSArMzYzOSwxMyBAQCB2b2lkIF9fbWVtY2dfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbiBcXHRcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuIFxcdFxcdHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dDtcXG4gXFx0XFx0c3RydWN0IG9ial9zdG9ja19wY3AgKnN0b2NrO1xcbi1cXHRcXHR1bnNpZ25lZCBpbnQgb2ZmO1xcbiBcXG4tXFx0XFx0b2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHBbaV0pO1xcbi1cXHRcXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpO1xcbi1cXHRcXHRvYmpjZyA9IG9ial9leHQtXFx1MDAzZW9iamNnO1xcbitcXHRcXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwW2ldKTtcXG4rXFx0XFx0b2JqY2cgPSBzbGFiX29ial9leHRfb2JqY2cob2JqX2V4dCk7XFxuIFxcdFxcdGlmICghb2JqY2cpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0b2JqX2V4dC1cXHUwMDNlb2JqY2cgPSBOVUxMO1xcbitcXHRcXHRzbGFiX29ial9leHRfc2V0X29iamNnKG9ial9leHQsIE5VTEwpO1xcbiBcXG4gXFx0XFx0c3RvY2sgPSB0cnlsb2NrX3N0b2NrKCk7XFxuIFxcdFxcdF9fcmVmaWxsX29ial9zdG9jayhvYmpjZywgc3RvY2ssIG9ial9zaXplLCB0cnVlKTtcXG5kaWZmIC0tZ2l0IGEvbW0vc2xhYi5oIGIvbW0vc2xhYi5oXFxuaW5kZXggZjVlMzM2YjZiNmIwNGMuLjE4YzJhODA3ZjAyM2NlIDEwMDY0NFxcbi0tLSBhL21tL3NsYWIuaFxcbisrKyBiL21tL3NsYWIuaFxcbkBAIC04MSwxMCArODEsMTEgQEAgc3RydWN0IGZyZWVsaXN0X2NvdW50ZXJzIHtcXG4gI2lmZGVmIENPTkZJR182NEJJVFxcbiBcXHRcXHRcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHRcXHRcXHQgKiBTb21lIG9wdGltaXphdGlvbnMgdXNlIGZyZWUgYml0cyBpbiAnY291bnRlcnMnIGZpZWxkXFxuLVxcdFxcdFxcdFxcdFxcdCAqIHRvIHNhdmUgbWVtb3J5LiBJbiBjYXNlIC1cXHUwMDNlc3RyaWRlIGZpZWxkIGlzIG5vdCBhdmFpbGFibGUsXFxuLVxcdFxcdFxcdFxcdFxcdCAqIHN1Y2ggb3B0aW1pemF0aW9ucyBhcmUgZGlzYWJsZWQuXFxuK1xcdFxcdFxcdFxcdFxcdCAqIHRvIHNhdmUgbWVtb3J5IG9yIENQVS4gSWYgdGhlc2UgZnJlZSBiaXRzIGFyZSBub3RcXG4rXFx0XFx0XFx0XFx0XFx0ICogYXZhaWxhYmxlLCBzdWNoIG9wdGltaXphdGlvbnMgYXJlIGRpc2FibGVkLlxcbiBcXHRcXHRcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IHN0cmlkZTtcXG4rXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgb2JqX2V4dHNfaW5fb2JqZWN0OjE7XFxuK1xcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIG9ial9leHRzX25lZWRzX29iamNnOjE7XFxuICNlbmRpZlxcbiBcXHRcXHRcXHRcXHR9O1xcbiBcXHRcXHRcXHR9O1xcbkBAIC0zMzAsMTIgKzMzMSw2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial90b19pbmRleChjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsXFxuIFxcdHJldHVybiBfX29ial90b19pbmRleChjYWNoZSwgc2xhYl9hZGRyZXNzKHNsYWIpLCBvYmopO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBvYmpzX3Blcl9zbGFiKGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSxcXG4tXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpXFxuLXtcXG4tXFx0cmV0dXJuIHNsYWItXFx1MDAzZW9iamVjdHM7XFxuLX1cXG4tXFxuIC8qXFxuICAqIFN0YXRlIG9mIHRoZSBzbGFiIGFsbG9jYXRvci5cXG4gICpcXG5AQCAtNTU1LDYgKzU1MCw5MyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9rbWFsbG9jX25vX29iamV4dCh2b2lkKVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIEV4dGVuZGVkIGluZm9ybWF0aW9uIGZvciBzbGFiIG9iamVjdHMgc3RvcmVkIGFzIGEgcG9pbnRlciB0byBhbiBhcnJheSBpblxcbisgKiBzbGFiLVxcdTAwM2VvYmpfZXh0cyAoYWxpYXNpbmcgcGFnZS1cXHUwMDNlbWVtY2dfZGF0YSkgaWYgTUVNQ0dfREFUQV9PQkpFWFRTIGlzIHNldC5cXG4rICovXFxuK3N0cnVjdCBzbGFib2JqX2V4dCB7XFxuK1xcdC8qXFxuK1xcdCAqIEFsbCBlbGVtZW50cyBvZiB0aGUgdW5pb24gc2hvdWxkIGJlIHBvaW50ZXItc2l6ZWQgdG8gYXZvaWQgbWVtb3J5XFxuK1xcdCAqIHdhc3RlXFxuK1xcdCAqL1xcbitcXHR1bmlvbiB7XFxuKyNpZmRlZiBDT05GSUdfTUVNQ0dcXG4rXFx0XFx0c3RydWN0IG9ial9jZ3JvdXAgKl9vYmpjZztcXG4rI2VuZGlmXFxuKyNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xcbitcXHRcXHR1bmlvbiBjb2RldGFnX3JlZiBfY3RyZWY7XFxuKyNlbmRpZlxcbitcXHR9O1xcbit9IF9fYWxpZ25lZCg4KTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xcbitERUNMQVJFX1NUQVRJQ19LRVlfTUFZQkUoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxULFxcbitcXHRcXHRcXHQgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIHN0YXRpY19icmFuY2hfbWF5YmUoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxULFxcbitcXHRcXHRcXHRcXHQgICBcXHUwMDI2c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSBib29sIHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZyh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuKyNpZmRlZiBDT05GSUdfTUVNQ0dcXG4rc3RhdGljIGlubGluZSBib29sIGNhY2hlX25lZWRzX29iamNnKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSlcXG4re1xcbitcXHRyZXR1cm4gKGNhY2hlLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNMQUJfTUFZX0FDQ09VTlQpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgc2xhYl9uZWVkc19vYmpjZyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4re1xcbisjaWZkZWYgQ09ORklHXzY0QklUXFxuK1xcdHJldHVybiBzbGFiLVxcdTAwM2VvYmpfZXh0c19uZWVkc19vYmpjZztcXG4rI2Vsc2VcXG4rXFx0cmV0dXJuIGNhY2hlX25lZWRzX29iamNnKHNsYWItXFx1MDAzZXNsYWJfY2FjaGUpO1xcbisjZW5kaWZcXG4rfVxcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIGJvb2wgY2FjaGVfbmVlZHNfb2JqY2coc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIHNsYWJfbmVlZHNfb2JqY2coc3RydWN0IHNsYWIgKnNsYWIpXFxuK3tcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuKyNlbmRpZlxcbitcXG4rc3RhdGljIGlubGluZSBzaXplX3QgY2FjaGVfb2JqX2V4dF9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbit7XFxuK1xcdHNpemVfdCBzeiA9IDA7XFxuK1xcbitcXHRpZiAoY2FjaGVfbmVlZHNfb2JqY2cocykpXFxuK1xcdFxcdHN6ICs9IDE7XFxuK1xcbitcXHRpZiAoc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKCkpXFxuK1xcdFxcdHN6ICs9IDE7XFxuK1xcbitcXHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkgKiBzejtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9vYmpfZXh0X3NpemUoc3RydWN0IHNsYWIgKnNsYWIpXFxuK3tcXG4rXFx0c2l6ZV90IHN6ID0gMDtcXG4rXFxuK1xcdGlmIChzbGFiX25lZWRzX29iamNnKHNsYWIpKVxcbitcXHRcXHRzeiArPSAxO1xcbitcXG4rXFx0aWYgKHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZygpKVxcbitcXHRcXHRzeiArPSAxO1xcbitcXG4rXFx0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc3o7XFxuK31cXG4rXFxuICNpZmRlZiBDT05GSUdfU0xBQl9PQkpfRVhUXFxuIFxcbiAvKlxcbkBAIC01NzIsNyArNjU0LDcgQEAgc3RhdGljIGlubGluZSBib29sIG5lZWRfa21hbGxvY19ub19vYmpleHQodm9pZClcXG4gICogb2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpO1xcbiAgKiBpZiAob2JqX2V4dHMpIHtcXG4gICogICAgICAgICBnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuLSAqICAgICAgICAgb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2JqX3RvX2luZGV4KHMsIHNsYWIsIG9iaikpO1xcbisgKiAgICAgICAgIG9ial9leHQgPSBzbGFiX29ial9leHQocywgc2xhYiwgb2JqX2V4dHMsIG9iaik7XFxuICAqICAgICAgICAgLy8gZG8gc29tZXRoaW5nIHdpdGggb2JqX2V4dFxcbiAgKiAgICAgICAgIHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG4gICogfVxcbkBAIC02MTAsNDggKzY5Miw4MiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3NsYWJfb2JqX2V4dHModW5zaWduZWQgbG9uZyBvYmpfZXh0cylcXG4gfVxcbiBcXG4gI2lmZGVmIENPTkZJR182NEJJVFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBpbnQgc3RyaWRlKVxcbi17XFxuLVxcdHNsYWItXFx1MDAzZXN0cmlkZSA9IHN0cmlkZTtcXG4tfVxcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbGFiX2dldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXFxuIHtcXG4tXFx0cmV0dXJuIHNsYWItXFx1MDAzZXN0cmlkZTtcXG4rXFx0LypcXG4rXFx0ICogTm90ZSB3ZSBjYW5ub3QgcmVseSBvbiB0aGUgU0xBQl9PQkpfRVhUX0lOX09CSiBmbGFnIGhlcmUgYW5kIG5lZWQgdG9cXG4rXFx0ICogY2hlY2sgdGhlIHBlci1zbGFiIGJpdC4gQSBjYWNoZSBjYW4gaGF2ZSBTTEFCX09CSl9FWFRfSU5fT0JKIHNldCwgYnV0XFxuK1xcdCAqIGFsbG9jYXRpb25zIHdpdGhpbl9zbGFiX2xlZnRvdmVyIGFyZSBwcmVmZXJyZWQuIEFuZCB0aG9zZSBtYXkgYmVcXG4rXFx0ICogcG9zc2libGUgb3Igbm90IGRlcGVuZGluZyBvbiB0aGUgcGFydGljdWxhciBzbGFiJ3Mgc2l6ZS5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBzbGFiLVxcdTAwM2VvYmpfZXh0c19pbl9vYmplY3Q7XFxuIH1cXG4gI2Vsc2VcXG4tc3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgaW50IHN0cmlkZSlcXG4rc3RhdGljIGlubGluZSBib29sIG9ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4ge1xcbi1cXHRWTV9XQVJOX09OX09OQ0Uoc3RyaWRlICE9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKTtcXG4tfVxcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbGFiX2dldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIpXFxuLXtcXG4tXFx0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpO1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gI2VuZGlmXFxuIFxcbiAvKlxcbiAgKiBzbGFiX29ial9leHQgLSBnZXQgdGhlIHBvaW50ZXIgdG8gdGhlIHNsYWIgb2JqZWN0IGV4dGVuc2lvbiBtZXRhZGF0YVxcbiAgKiBhc3NvY2lhdGVkIHdpdGggYW4gb2JqZWN0IGluIGEgc2xhYi5cXG4rICogQHM6IGNhY2hlIHRoYXQgdGhlIHNsYWIgYmxvbmdzIHRvXFxuICAqIEBzbGFiOiBhIHBvaW50ZXIgdG8gdGhlIHNsYWIgc3RydWN0XFxuICAqIEBvYmpfZXh0czogYSBwb2ludGVyIHRvIHRoZSBvYmplY3QgZXh0ZW5zaW9uIHZlY3Rvclxcbi0gKiBAaW5kZXg6IGFuIGluZGV4IG9mIHRoZSBvYmplY3RcXG4rICogQG9iajogYSBwb2ludGVyIHRvIHRoZSBvYmplY3RcXG4gICpcXG4gICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCBleHRlbnNpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBvYmplY3QuXFxuICAqIE11c3QgYmUgY2FsbGVkIHdpdGhpbiBhIHNlY3Rpb24gY292ZXJlZCBieSBnZXQvcHV0X3NsYWJfb2JqX2V4dHMoKS5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpzbGFiX29ial9leHQoc3RydWN0IHNsYWIgKnNsYWIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIG9ial9leHRzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGluZGV4KVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqXFxuK3NsYWJfb2JqX2V4dChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXFxuK1xcdCAgICAgY29uc3Qgdm9pZCAqb2JqKVxcbiB7XFxuIFxcdHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dDtcXG4rXFx0dW5zaWduZWQgaW50IGluZGV4O1xcbitcXHR1bnNpZ25lZCBpbnQgc3RyaWRlO1xcbiBcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKG9ial9leHRzICE9IHNsYWJfb2JqX2V4dHMoc2xhYikpO1xcbiBcXG4tXFx0b2JqX2V4dCA9IChzdHJ1Y3Qgc2xhYm9ial9leHQgKikob2JqX2V4dHMgK1xcbi1cXHRcXHRcXHRcXHRcXHQgc2xhYl9nZXRfc3RyaWRlKHNsYWIpICogaW5kZXgpO1xcbitcXHRpbmRleCA9IG9ial90b19pbmRleChzLCBzbGFiLCBvYmopO1xcbitcXG4rXFx0aWYgKCFvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpXFxuK1xcdFxcdHN0cmlkZSA9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHN0cmlkZSA9IHMtXFx1MDAzZXNpemU7XFxuK1xcbitcXHRvYmpfZXh0ID0gKHN0cnVjdCBzbGFib2JqX2V4dCAqKShvYmpfZXh0cyArIGluZGV4ICogc3RyaWRlKTtcXG4rXFxuIFxcdHJldHVybiBrYXNhbl9yZXNldF90YWcob2JqX2V4dCk7XFxuIH1cXG4gXFxuKyNpZmRlZiBDT05GSUdfTUVNQ0dcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqc2xhYl9vYmpfZXh0X29iamNnKHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dClcXG4re1xcbitcXHQvKiBpZiBvYmpjZyBleGlzdHMsIGl0IGNvbWVzIGZpcnN0LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nICovXFxuK1xcdHJldHVybiBvYmpfZXh0LVxcdTAwM2Vfb2JqY2c7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX29ial9leHRfc2V0X29iamNnKHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXFxuK3tcXG4rXFx0LyogaWYgb2JqY2cgZXhpc3RzLCBpdCBjb21lcyBmaXJzdCwgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyAqL1xcbitcXHRvYmpfZXh0LVxcdTAwM2Vfb2JqY2cgPSBvYmpjZztcXG4rfVxcbisjZW5kaWZcXG4rXFxuKyNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xcbitzdGF0aWMgaW5saW5lIHVuaW9uIGNvZGV0YWdfcmVmICpcXG4rc2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQpXFxuK3tcXG4rXFx0aWYgKHNsYWJfbmVlZHNfb2JqY2coc2xhYikpXFxuK1xcdFxcdG9ial9leHQgKz0gMTtcXG4rXFxuK1xcdHJldHVybiBcXHUwMDI2b2JqX2V4dC1cXHUwMDNlX2N0cmVmO1xcbit9XFxuKyNlbmRpZlxcbitcXG4gaW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbiBcXHRcXHRcXHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyk7XFxuIFxcbkBAIC02NjIsMTYgKzc3OCwxNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpzbGFiX29ial9leHQoc3RydWN0IHNsYWIgKnNsYWIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIG9ial9leHRzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGluZGV4KVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqXFxuK3NsYWJfb2JqX2V4dChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXFxuK1xcdCAgICAgY29uc3Qgdm9pZCAqb2JqKVxcbiB7XFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBpbnQgc3RyaWRlKSB7IH1cXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2xhYl9nZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiKSB7IHJldHVybiAwOyB9XFxuLVxcbitzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBzbGFiICpzbGFiKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbiBcXG4gI2VuZGlmIC8qIENPTkZJR19TTEFCX09CSl9FWFQgKi9cXG4gXFxuZGlmZiAtLWdpdCBhL21tL3NsYWJfY29tbW9uLmMgYi9tbS9zbGFiX2NvbW1vbi5jXFxuaW5kZXggMDNlY2FjMTJjZDg2NWYuLjRlOTgzZTI1MDMzODdhIDEwMDY0NFxcbi0tLSBhL21tL3NsYWJfY29tbW9uLmNcXG4rKysgYi9tbS9zbGFiX2NvbW1vbi5jXFxuQEAgLTUyLDcgKzUyLDcgQEAgc3RydWN0IGttZW1fY2FjaGUgKmttZW1fY2FjaGU7XFxuIFxcdFxcdFNMQUJfT0JKX0VYVF9JTl9PQkopXFxuIFxcbiAjZGVmaW5lIFNMQUJfTUVSR0VfU0FNRSAoU0xBQl9SRUNMQUlNX0FDQ09VTlQgfCBTTEFCX0NBQ0hFX0RNQSB8IFxcXFxcXG4tXFx0XFx0XFx0IFNMQUJfQ0FDSEVfRE1BMzIgfCBTTEFCX0FDQ09VTlQpXFxuK1xcdFxcdFxcdCBTTEFCX0NBQ0hFX0RNQTMyIHwgU0xBQl9BQ0NPVU5UIHwgU0xBQl9NQVlfQUNDT1VOVClcXG4gXFxuIC8qXFxuICAqIE1lcmdlIGNvbnRyb2wuIElmIHRoaXMgaXMgc2V0IHRoZW4gbm8gbWVyZ2luZyBvZiBzbGFiIGNhY2hlcyB3aWxsIG9jY3VyLlxcbkBAIC0zNTksNiArMzU5LDEzIEBAIHN0cnVjdCBrbWVtX2NhY2hlICpfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MoY29uc3QgY2hhciAqbmFtZSxcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbitcXHQvKlxcbitcXHQgKiBGb3Igbm93IHdlIGFzc3VtZSBhbnkgY2FjaGUgY2FuIGJlIHVzZWQgd2l0aCBfX0dGUF9BQ0NPVU5UIGFuZCB0aHVzXFxuK1xcdCAqIG1heSBuZWVkIHRvIHN0b3JlIG9iamNnIHBvaW50ZXJzIGZvciBvYmplY3RzXFxuK1xcdCAqL1xcbitcXHRpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxcbitcXHRcXHRmbGFncyB8PSBTTEFCX01BWV9BQ0NPVU5UO1xcbitcXG4gXFx0LyogRmFpbCBjbG9zZWQgb24gYmFkIHVzZXJzaXplIG9mIHVzZXJvZmZzZXQgdmFsdWVzLiAqL1xcbiBcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZKSB8fFxcbiBcXHQgICAgV0FSTl9PTighYXJncy1cXHUwMDNldXNlcnNpemUgXFx1MDAyNlxcdTAwMjYgYXJncy1cXHUwMDNldXNlcm9mZnNldCkgfHxcXG5AQCAtOTg0LDExICs5OTEsMTkgQEAgbmV3X2ttYWxsb2NfY2FjaGUoaW50IGlkeCwgZW51bSBrbWFsbG9jX2NhY2hlX3R5cGUgdHlwZSlcXG4gI2VuZGlmXFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBJZiBDT05GSUdfTUVNQ0cgaXMgZW5hYmxlZCwgZGlzYWJsZSBjYWNoZSBtZXJnaW5nIGZvclxcbi1cXHQgKiBLTUFMTE9DX05PUk1BTCBjYWNoZXMuXFxuK1xcdCAqIElmIG1lbWNnX2ttZW0gaXMgZW5hYmxlZCBhbmQgdGhpcyBpcyBhIEtNQUxMT0NfTk9STUFMIGNhY2hlIGFuZCAgbm90XFxuK1xcdCAqIGFsaWFzZWQgd2l0aCBhbnkgb3RoZXIgdHlwZSwgbWFrZSBzdXJlIGl0J3MgbmV2ZXIgbWVyZ2VkIHdpdGggYW55IG90aGVyXFxuK1xcdCAqIGNhY2hlLlxcbitcXHQgKlxcbitcXHQgKiBJbiBvdGhlciBjYXNlcyB0aGUga21hbGxvYyBjYWNoZSBtYXkgZW5kIHVwIGJlaW5nIHVzZWQgZm9yIGFcXG4rXFx0ICogX19HRlBfQUNDT1VOVCBhbGxvY2F0aW9uIHNvIG1hcmsgaXQgYXMgc3VjaFxcbiBcXHQgKi9cXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX01FTUNHKSBcXHUwMDI2XFx1MDAyNiAodHlwZSA9PSBLTUFMTE9DX05PUk1BTCkpXFxuLVxcdFxcdGZsYWdzIHw9IFNMQUJfTk9fTUVSR0U7XFxuK1xcdGlmICghbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKCkpIHtcXG4rXFx0XFx0aWYgKHR5cGUgPT0gS01BTExPQ19OT1JNQUwgXFx1MDAyNlxcdTAwMjYgS01BTExPQ19SRUNMQUlNICE9IEtNQUxMT0NfTk9STUFMKVxcbitcXHRcXHRcXHRmbGFncyB8PSBTTEFCX05PX01FUkdFO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGZsYWdzIHw9IFNMQUJfTUFZX0FDQ09VTlQ7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChtaW5hbGlnbiBcXHUwMDNlIEFSQ0hfS01BTExPQ19NSU5BTElHTikge1xcbiBcXHRcXHRhbGlnbmVkX3NpemUgPSBBTElHTihhbGlnbmVkX3NpemUsIG1pbmFsaWduKTtcXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXFxuaW5kZXggMDMzN2U2MGRiNWFjZTAuLmU2MTQ4YjczYjkyZjg4IDEwMDY0NFxcbi0tLSBhL21tL3NsdWIuY1xcbisrKyBiL21tL3NsdWIuY1xcbkBAIC0yMTMsNiArMjEzLDExIEBAIERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHNsdWJfZGVidWdfZW5hYmxlZCk7XFxuIHN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShzdHJpY3RfbnVtYSk7XFxuICNlbmRpZlxcbiBcXG4rI2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxuK0RFRklORV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcXG4rXFx0XFx0XFx0c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XFxuKyNlbmRpZlxcbitcXG4gLyogU3RydWN0dXJlIGhvbGRpbmcgZXh0cmEgcGFyYW1ldGVycyBmb3Igc2xhYiBhbGxvY2F0aW9ucyAqL1xcbiBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0IHtcXG4gXFx0dW5zaWduZWQgbG9uZyBjYWxsZXJfYWRkcjtcXG5AQCAtODAzLDcgKzgwOCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX3NsYWJfb2JqX2V4dHMoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuIFxcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfZXh0c19zaXplX2luX3NsYWIoc3RydWN0IHNsYWIgKnNsYWIpXFxuIHtcXG4tXFx0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc2xhYi1cXHUwMDNlb2JqZWN0cztcXG4rXFx0cmV0dXJuIHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpICogc2xhYi1cXHUwMDNlb2JqZWN0cztcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG9ial9leHRzX29mZnNldF9pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbkBAIC04NzAsMTggKzg3NSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4gI2VuZGlmXFxuIFxcbiAjaWYgZGVmaW5lZChDT05GSUdfU0xBQl9PQkpfRVhUKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcXG4tc3RhdGljIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4te1xcbi1cXHQvKlxcbi1cXHQgKiBOb3RlIHdlIGNhbm5vdCByZWx5IG9uIHRoZSBTTEFCX09CSl9FWFRfSU5fT0JKIGZsYWcgaGVyZSBhbmQgbmVlZCB0b1xcbi1cXHQgKiBjaGVjayB0aGUgc3RyaWRlLiBBIGNhY2hlIGNhbiBoYXZlIFNMQUJfT0JKX0VYVF9JTl9PQkogc2V0LCBidXRcXG4tXFx0ICogYWxsb2NhdGlvbnMgd2l0aGluX3NsYWJfbGVmdG92ZXIgYXJlIHByZWZlcnJlZC4gQW5kIHRob3NlIG1heSBiZVxcbi1cXHQgKiBwb3NzaWJsZSBvciBub3QgZGVwZW5kaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIHNsYWIncyBzaXplLlxcbi1cXHQgKi9cXG4tXFx0cmV0dXJuIG9ial9leHRzX2luX3NsYWIocywgc2xhYikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICAgIChzbGFiX2dldF9zdHJpZGUoc2xhYikgPT0gcy1cXHUwMDNlc2l6ZSk7XFxuLX1cXG4tXFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgb2JqX2V4dHNfb2Zmc2V0X2luX29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gZ2V0X2luZm9fZW5kKHMpO1xcbkBAIC04OTYsMTYgKzg4OSwyMCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuIFxcbiBcXHRyZXR1cm4gb2Zmc2V0O1xcbiB9XFxuLSNlbHNlXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X29ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4ge1xcbi1cXHRyZXR1cm4gZmFsc2U7XFxuK1xcdHNsYWItXFx1MDAzZW9ial9leHRzX2luX29iamVjdCA9IDE7XFxuIH1cXG4tXFxuKyNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXFxuK3tcXG4rfVxcbiAjZW5kaWZcXG4gXFxuICNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbkBAIC0xMjA2LDggKzEyMDMsOCBAQCBzdGF0aWMgdm9pZCBwcmludF90cmFpbGVyKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdTggKnApXFxuIFxcbiBcXHRvZmYgKz0ga2FzYW5fbWV0YWRhdGFfc2l6ZShzLCBmYWxzZSk7XFxuIFxcbi1cXHRpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKVxcbi1cXHRcXHRvZmYgKz0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCk7XFxuK1xcdGlmIChvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpXFxuK1xcdFxcdG9mZiArPSBzbGFiX29ial9leHRfc2l6ZShzbGFiKTtcXG4gXFxuIFxcdGlmIChvZmYgIT0gc2l6ZV9mcm9tX29iamVjdChzKSlcXG4gXFx0XFx0LyogQmVnaW5uaW5nIG9mIHRoZSBmaWxsZXIgaXMgdGhlIGZyZWUgcG9pbnRlciAqL1xcbkBAIC0xNDExLDggKzE0MDgsOCBAQCBzdGF0aWMgaW50IGNoZWNrX3BhZF9ieXRlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHU4ICpwKVxcbiBcXG4gXFx0b2ZmICs9IGthc2FuX21ldGFkYXRhX3NpemUocywgZmFsc2UpO1xcbiBcXG4tXFx0aWYgKG9ial9leHRzX2luX29iamVjdChzLCBzbGFiKSlcXG4tXFx0XFx0b2ZmICs9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpO1xcbitcXHRpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKVxcbitcXHRcXHRvZmYgKz0gc2xhYl9vYmpfZXh0X3NpemUoc2xhYik7XFxuIFxcbiBcXHRpZiAoc2l6ZV9mcm9tX29iamVjdChzKSA9PSBvZmYpXFxuIFxcdFxcdHJldHVybiAxO1xcbkBAIC0xNDM5LDcgKzE0MzYsNyBAQCBzbGFiX3BhZF9jaGVjayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXFxuIFxcdGxlbmd0aCA9IHNsYWJfc2l6ZShzbGFiKTtcXG4gXFx0ZW5kID0gc3RhcnQgKyBsZW5ndGg7XFxuIFxcbi1cXHRpZiAob2JqX2V4dHNfaW5fc2xhYihzLCBzbGFiKSBcXHUwMDI2XFx1MDAyNiAhb2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKSB7XFxuK1xcdGlmIChvYmpfZXh0c19pbl9zbGFiKHMsIHNsYWIpIFxcdTAwMjZcXHUwMDI2ICFvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpIHtcXG4gXFx0XFx0cmVtYWluZGVyID0gbGVuZ3RoO1xcbiBcXHRcXHRyZW1haW5kZXIgLT0gb2JqX2V4dHNfb2Zmc2V0X2luX3NsYWIocywgc2xhYik7XFxuIFxcdFxcdHJlbWFpbmRlciAtPSBvYmpfZXh0c19zaXplX2luX3NsYWIoc2xhYik7XFxuQEAgLTIwNzAsMjAgKzIwNjcsMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoY29uc3Qgdm9pZCAqb2JqKVxcbiBcXHRvYmpfc2xhYiA9IHZpcnRfdG9fc2xhYihvYmopO1xcbiBcXHRzbGFiX2V4dHMgPSBzbGFiX29ial9leHRzKG9ial9zbGFiKTtcXG4gXFx0aWYgKHNsYWJfZXh0cykge1xcbitcXHRcXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKmV4dDtcXG4rXFx0XFx0dW5pb24gY29kZXRhZ19yZWYgKnJlZjtcXG4rXFxuIFxcdFxcdGdldF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XFxuLVxcdFxcdHVuc2lnbmVkIGludCBvZmZzID0gb2JqX3RvX2luZGV4KG9ial9zbGFiLVxcdTAwM2VzbGFiX2NhY2hlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgb2JqX3NsYWIsIG9iaik7XFxuLVxcdFxcdHN0cnVjdCBzbGFib2JqX2V4dCAqZXh0ID0gc2xhYl9vYmpfZXh0KG9ial9zbGFiLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc2xhYl9leHRzLCBvZmZzKTtcXG4rXFx0XFx0ZXh0ID0gc2xhYl9vYmpfZXh0KG9ial9zbGFiLVxcdTAwM2VzbGFiX2NhY2hlLCBvYmpfc2xhYiwgc2xhYl9leHRzLCBvYmopO1xcbitcXHRcXHRyZWYgPSBzbGFiX29ial9leHRfY29kZXRhZ19yZWYob2JqX3NsYWIsIGV4dCk7XFxuK1xcbitcXHRcXHRpZiAoaXNfa2ZlbmNlX2FkZHJlc3Mob2JqKSkge1xcbitcXHRcXHRcXHRwdXRfc2xhYl9vYmpfZXh0cyhzbGFiX2V4dHMpO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4gXFxuLVxcdFxcdGlmICh1bmxpa2VseShpc19jb2RldGFnX2VtcHR5KFxcdTAwMjZleHQtXFx1MDAzZXJlZikpKSB7XFxuK1xcdFxcdGlmICh1bmxpa2VseShpc19jb2RldGFnX2VtcHR5KHJlZikpKSB7XFxuIFxcdFxcdFxcdHB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0LyogY29kZXRhZyBzaG91bGQgYmUgTlVMTCBoZXJlICovXFxuLVxcdFxcdFdBUk5fT04oZXh0LVxcdTAwM2VyZWYuY3QpO1xcbi1cXHRcXHRzZXRfY29kZXRhZ19lbXB0eShcXHUwMDI2ZXh0LVxcdTAwM2VyZWYpO1xcbitcXHRcXHRXQVJOX09OKHJlZi1cXHUwMDNlY3QpO1xcbitcXHRcXHRzZXRfY29kZXRhZ19lbXB0eShyZWYpO1xcbiBcXHRcXHRwdXRfc2xhYl9vYmpfZXh0cyhzbGFiX2V4dHMpO1xcbiBcXHR9XFxuIH1cXG5AQCAtMjA5MywxOSArMjA5NiwyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFya19mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4gXFx0cmV0dXJuIGNtcHhjaGcoXFx1MDAyNnNsYWItXFx1MDAzZW9ial9leHRzLCAwLCBPQkpFWFRTX0FMTE9DX0ZBSUwpID09IDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcXG4tXFx0XFx0XFx0c3RydWN0IHNsYWJvYmpfZXh0ICp2ZWMsIHVuc2lnbmVkIGludCBvYmplY3RzKVxcbitzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIG9ial9leHRzLCBzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYylcXG4ge1xcbitcXHR1bnNpZ25lZCBpbnQgc3RyaWRlO1xcbitcXG4rXFx0aWYgKCFtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0LypcXG4gXFx0ICogSWYgdmVjdG9yIHByZXZpb3VzbHkgZmFpbGVkIHRvIGFsbG9jYXRlIHRoZW4gd2UgaGF2ZSBsaXZlXFxuIFxcdCAqIG9iamVjdHMgd2l0aCBubyB0YWcgcmVmZXJlbmNlLiBNYXJrIGFsbCByZWZlcmVuY2VzIGluIHRoaXNcXG4gXFx0ICogdmVjdG9yIGFzIGVtcHR5IHRvIGF2b2lkIHdhcm5pbmdzIGxhdGVyIG9uLlxcbiBcXHQgKi9cXG4tXFx0aWYgKG9ial9leHRzID09IE9CSkVYVFNfQUxMT0NfRkFJTCkge1xcbi1cXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFx0aWYgKG9ial9leHRzICE9IE9CSkVYVFNfQUxMT0NfRkFJTClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c3RyaWRlID0gc2xhYl9vYmpfZXh0X3NpemUoc2xhYikgLyBzaXplb2YoKnZlYyk7XFxuK1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIHNsYWItXFx1MDAzZW9iamVjdHM7IGkrKykge1xcbitcXHRcXHR1bmlvbiBjb2RldGFnX3JlZiAqcmVmID0gc2xhYl9vYmpfZXh0X2NvZGV0YWdfcmVmKHNsYWIsIHZlYyk7XFxuIFxcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgb2JqZWN0czsgaSsrKVxcbi1cXHRcXHRcXHRzZXRfY29kZXRhZ19lbXB0eShcXHUwMDI2dmVjW2ldLnJlZik7XFxuK1xcdFxcdHNldF9jb2RldGFnX2VtcHR5KHJlZik7XFxuK1xcdFxcdHZlYyArPSBzdHJpZGU7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMjExMyw4ICsyMTI2LDggQEAgc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyh1bnNpZ25lZCBsb25nIG9ial9leHRzLFxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoY29uc3Qgdm9pZCAqb2JqKSB7fVxcbiBzdGF0aWMgaW5saW5lIGJvb2wgbWFya19mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYikgeyByZXR1cm4gZmFsc2U7IH1cXG4tc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyh1bnNpZ25lZCBsb25nIG9ial9leHRzLFxcbi1cXHRcXHRcXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYywgdW5zaWduZWQgaW50IG9iamVjdHMpIHt9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsIHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjKSB7fVxcbiBcXG4gI2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXFxuIFxcbkBAIC0yMTI3LDEyICsyMTQwLDExIEBAIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4gXFx0XFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuIHtcXG4gXFx0Y29uc3QgYm9vbCBhbGxvd19zcGluID0gYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWxsb2NfZmxhZ3MpO1xcbi1cXHR1bnNpZ25lZCBpbnQgb2JqZWN0cyA9IG9ianNfcGVyX3NsYWIocywgc2xhYik7XFxuIFxcdGJvb2wgbmV3X3NsYWIgPSBhbGxvY19mbGFncyBcXHUwMDI2IFNMQUJfQUxMT0NfTkVXX1NMQUI7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbmV3X2V4dHM7XFxuIFxcdHVuc2lnbmVkIGxvbmcgb2xkX2V4dHM7XFxuIFxcdHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjO1xcbi1cXHRzaXplX3Qgc3ogPSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHNsYWItXFx1MDAzZW9iamVjdHM7XFxuK1xcdHNpemVfdCBzeiA9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpICogc2xhYi1cXHUwMDNlb2JqZWN0cztcXG4gXFxuIFxcdGdmcCBcXHUwMDI2PSB+T0JKQ0dTX0NMRUFSX01BU0s7XFxuIFxcdC8qXFxuQEAgLTIxODMsNyArMjE5NSw3IEBAIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4gI2VuZGlmXFxuIHJldHJ5OlxcbiBcXHRvbGRfZXh0cyA9IFJFQURfT05DRShzbGFiLVxcdTAwM2VvYmpfZXh0cyk7XFxuLVxcdGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhvbGRfZXh0cywgdmVjLCBvYmplY3RzKTtcXG4rXFx0aGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHNsYWIsIG9sZF9leHRzLCB2ZWMpO1xcbiBcXG4gXFx0aWYgKG5ld19zbGFiKSB7XFxuIFxcdFxcdC8qXFxuQEAgLTIyNTAsOSArMjI2Miw2IEBAIHN0YXRpYyB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxcbiBcXHR2b2lkICphZGRyO1xcbiBcXHR1bnNpZ25lZCBsb25nIG9ial9leHRzO1xcbiBcXG4tXFx0LyogSW5pdGlhbGl6ZSBzdHJpZGUgZWFybHkgdG8gYXZvaWQgbWVtb3J5IG9yZGVyaW5nIGlzc3VlcyAqL1xcbi1cXHRzbGFiX3NldF9zdHJpZGUoc2xhYiwgc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkpO1xcbi1cXG4gXFx0aWYgKCFuZWVkX3NsYWJfb2JqX2V4dHMocykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuQEAgLTIyNzgsMTUgKzIyODcsMTQgQEAgc3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXFxuIFxcbiBcXHRcXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuIFxcdFxcdGZvcl9lYWNoX29iamVjdChhZGRyLCBzLCBzbGFiX2FkZHJlc3Moc2xhYiksIHNsYWItXFx1MDAzZW9iamVjdHMpXFxuLVxcdFxcdFxcdG1lbXNldChrYXNhbl9yZXNldF90YWcoYWRkcikgKyBvZmZzZXQsIDAsXFxuLVxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSk7XFxuK1xcdFxcdFxcdG1lbXNldChrYXNhbl9yZXNldF90YWcoYWRkcikgKyBvZmZzZXQsIDAsIHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpKTtcXG4gXFx0XFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19NRU1DR1xcbiBcXHRcXHRvYmpfZXh0cyB8PSBNRU1DR19EQVRBX09CSkVYVFM7XFxuICNlbmRpZlxcbiBcXHRcXHRzbGFiLVxcdTAwM2VvYmpfZXh0cyA9IG9ial9leHRzO1xcbi1cXHRcXHRzbGFiX3NldF9zdHJpZGUoc2xhYiwgcy1cXHUwMDNlc2l6ZSk7XFxuK1xcdFxcdHNsYWJfc2V0X29ial9leHRzX2luX29iamVjdChzbGFiKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0yMzUyLDYgKzIzNjAsOSBAQCBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIGdmcF90IGZsYWdzLFxcbiBcXHRpZiAoYWxsb2NfZmxhZ3MgXFx1MDAyNiBTTEFCX0FMTE9DX05PX1JFQ1VSU0UpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdGlmIChpc19rZmVuY2VfYWRkcmVzcyhvYmplY3QpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRzbGFiID0gdmlydF90b19zbGFiKG9iamVjdCk7XFxuIFxcdG9ial9leHRzID0gcHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2socywgc2xhYiwgZmxhZ3MsIGFsbG9jX2ZsYWdzLCBvYmplY3QpO1xcbiBcXHQvKlxcbkBAIC0yMzYwLDExICsyMzcxLDE1IEBAIF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgZ2ZwX3QgZmxhZ3MsXFxuIFxcdCAqIGNoZWNrIHNob3VsZCBiZSBhZGRlZCBiZWZvcmUgYWxsb2NfdGFnX2FkZCgpLlxcbiBcXHQgKi9cXG4gXFx0aWYgKG9ial9leHRzKSB7XFxuLVxcdFxcdHVuc2lnbmVkIGludCBvYmpfaWR4ID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIG9iamVjdCk7XFxuK1xcdFxcdHVuaW9uIGNvZGV0YWdfcmVmICpyZWY7XFxuIFxcbiBcXHRcXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuLVxcdFxcdG9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9ial9pZHgpO1xcbi1cXHRcXHRhbGxvY190YWdfYWRkKFxcdTAwMjZvYmpfZXh0LVxcdTAwM2VyZWYsIGN1cnJlbnQtXFx1MDAzZWFsbG9jX3RhZywgcy1cXHUwMDNlc2l6ZSk7XFxuK1xcbitcXHRcXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBvYmplY3QpO1xcbitcXHRcXHRyZWYgPSBzbGFiX29ial9leHRfY29kZXRhZ19yZWYoc2xhYiwgb2JqX2V4dCk7XFxuK1xcbitcXHRcXHRhbGxvY190YWdfYWRkKHJlZiwgY3VycmVudC1cXHUwMDNlYWxsb2NfdGFnLCBzLVxcdTAwM2VzaXplKTtcXG4rXFxuIFxcdFxcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0YWxsb2NfdGFnX3NldF9pbmFjY3VyYXRlKGN1cnJlbnQtXFx1MDAzZWFsbG9jX3RhZyk7XFxuQEAgLTIzODQsNyArMjM5OSw2IEBAIHN0YXRpYyBub2lubGluZSB2b2lkXFxuIF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxcbiBcXHRcXHRcXHQgICAgICAgaW50IG9iamVjdHMpXFxuIHtcXG4tXFx0aW50IGk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgb2JqX2V4dHM7XFxuIFxcbiBcXHQvKiBzbGFiLVxcdTAwM2VvYmpfZXh0cyBtaWdodCBub3QgYmUgTlVMTCBpZiBpdCB3YXMgY3JlYXRlZCBmb3IgTUVNQ0cgYWNjb3VudGluZy4gKi9cXG5AQCAtMjM5NiwxMCArMjQxMCwxNCBAQCBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcFxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBvYmplY3RzOyBpKyspIHtcXG4tXFx0XFx0dW5zaWduZWQgaW50IG9mZiA9IG9ial90b19pbmRleChzLCBzbGFiLCBwW2ldKTtcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBvYmplY3RzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHNsYWJvYmpfZXh0ICpleHQ7XFxuK1xcbitcXHRcXHRpZiAoaXNfa2ZlbmNlX2FkZHJlc3MocFtpXSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0YWxsb2NfdGFnX3N1YihcXHUwMDI2c2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpLVxcdTAwM2VyZWYsIHMtXFx1MDAzZXNpemUpO1xcbitcXHRcXHRleHQgPSBzbGFiX29ial9leHQocywgc2xhYiwgb2JqX2V4dHMsIHBbaV0pO1xcbitcXHRcXHRhbGxvY190YWdfc3ViKHNsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihzbGFiLCBleHQpLCBzLVxcdTAwM2VzaXplKTtcXG4gXFx0fVxcbiBcXHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuIH1cXG5AQCAtMjQxMiw2ICsyNDMwLDI1IEBAIGFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcXG4gXFx0XFx0X19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAsIG9iamVjdHMpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBNYWtlIHN1cmUgdGhlIHN0YXRpYyBrZXkgdXNlZCBieSBzbGFiX29ial9leHRfaGFzX2NvZGV0YWcoKSByZWZsZWN0cyB0aGVcXG4rICogdmFsdWUgb2YgIW1lbV9hbGxvY19wcm9maWxpbmdfcGVybWFuZW50bHlfZGlzYWJsZWQoKVxcbisgKlxcbisgKiBBbnkgbGF0ZXIgbWVtIGFsbG9jIHByb2ZpbGluZyBzaHV0ZG93biB3b24ndCBiZSByZWZsZWN0ZWQgaW4gdGhlIHN0YXRpYyBrZXlcXG4rICogYmVjYXVzZSBvYmpfZXh0cyB3aXRoIGNvZGV0YWdzIG1pZ2h0IGFscmVhZHkgZXhpc3QuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBfX2luaXQgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXQodm9pZClcXG4re1xcbitcXHRib29sIG5lZWRfY29kZXRhZyA9ICFtZW1fYWxsb2NfcHJvZmlsaW5nX3Blcm1hbmVudGx5X2Rpc2FibGVkKCk7XFxuK1xcbitcXHRpZiAobmVlZF9jb2RldGFnICE9IHN0YXRpY19rZXlfZW5hYmxlZChcXHUwMDI2c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSkpIHtcXG4rXFx0XFx0aWYgKG5lZWRfY29kZXRhZylcXG4rXFx0XFx0XFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHN0YXRpY19icmFuY2hfZGlzYWJsZShcXHUwMDI2c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XFxuK1xcdH1cXG4rfVxcbitcXG4gI2Vsc2UgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcgKi9cXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZFxcbkBAIC0yNDI2LDYgKzI0NjMsMTAgQEAgYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxcbiB7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCh2b2lkKVxcbit7XFxuK31cXG4rXFxuICNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xcbiBcXG4gXFxuQEAgLTI0NzEsNiArMjUxMiw5IEBAIHZvaWQgbWVtY2dfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcXG4gXFx0aWYgKGxpa2VseSghb2JqX2V4dHMpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRpZiAoIXNsYWJfbmVlZHNfb2JqY2coc2xhYikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG4gXFx0X19tZW1jZ19zbGFiX2ZyZWVfaG9vayhzLCBzbGFiLCBwLCBvYmplY3RzLCBvYmpfZXh0cyk7XFxuIFxcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG5AQCAtMjQ4NCw3ICsyNTI4LDYgQEAgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxcbiBcXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIFxcdHN0cnVjdCBzbGFiICpzbGFiO1xcbi1cXHR1bnNpZ25lZCBsb25nIG9mZjtcXG4gXFxuIFxcdHBhZ2UgPSB2aXJ0X3RvX3BhZ2UocCk7XFxuIFxcdGlmIChQYWdlTGFyZ2VLbWFsbG9jKHBhZ2UpKSB7XFxuQEAgLTI1MTcsMTYgKzI1NjAsMTUgQEAgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxcbiBcXHQgKiBvZiBzbGFiX29ial9leHRzIGJlaW5nIGFsbG9jYXRlZCBmcm9tIHRoZSBzYW1lIHNsYWIgYW5kIHRodXMgdGhlIHNsYWJcXG4gXFx0ICogYmVjb21pbmcgZWZmZWN0aXZlbHkgdW5mcmVlYWJsZS5cXG4gXFx0ICovXFxuLVxcdGlmIChpc19rbWFsbG9jX25vcm1hbChzKSlcXG4rXFx0aWYgKCFjYWNoZV9uZWVkc19vYmpjZyhzKSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHQvKiBJZ25vcmUgYWxyZWFkeSBjaGFyZ2VkIG9iamVjdHMuICovXFxuIFxcdG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcXG4gXFx0aWYgKG9ial9leHRzKSB7XFxuIFxcdFxcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG4tXFx0XFx0b2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHApO1xcbi1cXHRcXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpO1xcbi1cXHRcXHRpZiAodW5saWtlbHkob2JqX2V4dC1cXHUwMDNlb2JqY2cpKSB7XFxuK1xcdFxcdG9ial9leHQgPSBzbGFiX29ial9leHQocywgc2xhYiwgb2JqX2V4dHMsIHApO1xcbitcXHRcXHRpZiAodW5saWtlbHkoc2xhYl9vYmpfZXh0X29iamNnKG9ial9leHQpKSkge1xcbiBcXHRcXHRcXHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRcXHR9XFxuQEAgLTMzOTEsMTAgKzM0MzMsMTUgQEAgc3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4gXFx0XFx0c3RhdChzLCBPUkRFUl9GQUxMQkFDSyk7XFxuIFxcdH1cXG4gXFxuK1xcdC8qIEluaXRpYWxpemVzIGZyb3plbiwgaW51c2UsIGFuZCBhbnkgZXh0cmEgNjRiaXQtb25seSBmbGFncyAqL1xcbitcXHRzbGFiLVxcdTAwM2Vjb3VudGVycyA9IDA7XFxuK1xcbiBcXHRzbGFiLVxcdTAwM2VvYmplY3RzID0gb29fb2JqZWN0cyhvbyk7XFxuLVxcdHNsYWItXFx1MDAzZWludXNlID0gMDtcXG4tXFx0c2xhYi1cXHUwMDNlZnJvemVuID0gMDtcXG4gXFxuKyNpZmRlZiBDT05GSUdfNjRCSVRcXG4rXFx0aWYgKGNhY2hlX25lZWRzX29iamNnKHMpKVxcbitcXHRcXHRzbGFiLVxcdTAwM2VvYmpfZXh0c19uZWVkc19vYmpjZyA9IDE7XFxuKyNlbmRpZlxcbiBcXHRzbGFiLVxcdTAwM2VzbGFiX2NhY2hlID0gcztcXG4gXFxuIFxcdGthc2FuX3BvaXNvbl9zbGFiKHNsYWIpO1xcbkBAIC02NTI2LDcgKzY1NzMsNyBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBzbGFiX2tzaXplKHN0cnVjdCBzbGFiICpzbGFiKVxcbiBcXHQgKi9cXG4gXFx0aWYgKHMtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKFNMQUJfVFlQRVNBRkVfQllfUkNVIHwgU0xBQl9TVE9SRV9VU0VSKSlcXG4gXFx0XFx0cmV0dXJuIHMtXFx1MDAzZWludXNlO1xcbi1cXHRlbHNlIGlmIChvYmpfZXh0c19pbl9vYmplY3Qocywgc2xhYikpXFxuK1xcdGVsc2UgaWYgKG9ial9leHRzX2luX29iamVjdChzbGFiKSlcXG4gXFx0XFx0cmV0dXJuIHMtXFx1MDAzZWludXNlO1xcbiBcXHQvKlxcbiBcXHQgKiBFbHNlIHdlIGNhbiB1c2UgYWxsIHRoZSBwYWRkaW5nIGV0YyBmb3IgdGhlIGFsbG9jYXRpb25cXG5AQCAtNzkyOSw3ICs3OTc2LDcgQEAgc3RhdGljIGludCBjYWxjdWxhdGVfc2l6ZXMoc3RydWN0IGttZW1fY2FjaGVfYXJncyAqYXJncywgc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuIFxcdGFsaWduZWRfc2l6ZSA9IEFMSUdOKHNpemUsIHMtXFx1MDAzZWFsaWduKTtcXG4gI2lmIGRlZmluZWQoQ09ORklHX1NMQUJfT0JKX0VYVCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXFxuIFxcdGlmIChzbGFiX2FyZ3NfdW5tZXJnZWFibGUoYXJncywgcy1cXHUwMDNlZmxhZ3MpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdChhbGlnbmVkX3NpemUgLSBzaXplIFxcdTAwM2U9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKSlcXG4rXFx0XFx0XFx0KGFsaWduZWRfc2l6ZSAtIHNpemUgXFx1MDAzZT0gY2FjaGVfb2JqX2V4dF9zaXplKHMpKSlcXG4gXFx0XFx0cy1cXHUwMDNlZmxhZ3MgfD0gU0xBQl9PQkpfRVhUX0lOX09CSjtcXG4gI2VuZGlmXFxuIFxcdHNpemUgPSBhbGlnbmVkX3NpemU7XFxuQEAgLTg1MzksNiArODU4Niw4IEBAIHZvaWQgX19pbml0IGttZW1fY2FjaGVfaW5pdCh2b2lkKVxcbiBcXHRcXHRib290X2ttZW1fY2FjaGVfbm9kZTtcXG4gXFx0aW50IG5vZGU7XFxuIFxcbitcXHRzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCgpO1xcbitcXG4gXFx0aWYgKGRlYnVnX2d1YXJkcGFnZV9taW5vcmRlcigpKVxcbiBcXHRcXHRzbHViX21heF9vcmRlciA9IDA7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMDoyNC4yOTg4Mzg5MzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMDY4NDgxODU4MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR1wiLFxuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJLRkVOQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zbGFiX29ial9leHRzXCIsXG4gICAgXCJfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rXCIsXG4gICAgXCJfX21lbWNnX3NsYWJfZnJlZV9ob29rXCIsXG4gICAgXCJfX2tmZW5jZV9mcmVlXCIsXG4gICAgXCJfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGxheW91dCBhbmQgaGFuZGxpbmcgb2YgYHN0cnVjdCBzbGFib2JqX2V4dGAgaW4gdGhlIHNsYWIgYWxsb2NhdG9yLCB3aGljaCBpcyB1c2VkIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgYW5kIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZy4gSXQgb3B0aW1pemVzIHRoZSBzdG9yYWdlIG9mIGBvYmpjZ2AgYW5kIGBjb2RldGFnX3JlZmAgcG9pbnRlcnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgc2xhYiBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIHBhdGhzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRhMTNiZmNhMjQyN2RlZWE0MWI2MGVhYWJiOGY4ZWM5ZTY2ODg1M2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAyMDoyMDoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9hbGxvY2F0aW9uLXByb2ZpbGluZy5yc3RcbmluZGV4IDUzODlkMjQxMTc2YThhLi5kMDJlYjU0ZWU4ZjJjNiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vYWxsb2NhdGlvbi1wcm9maWxpbmcucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL2FsbG9jYXRpb24tcHJvZmlsaW5nLnJzdFxuQEAgLTExMiwzICsxMTIsMTAgQEAgVG8gZG8gc286XG4gXG4gLSBUaGVuLCB1c2UgdGhlIGZvbGxvd2luZyBmb3JtIGZvciB5b3VyIGFsbG9jYXRpb25zOlxuICAgYWxsb2NfaG9va3NfdGFnKGh0LVx1MDAzZXlvdXJfc2F2ZWRfdGFnLCBrbWFsbG9jX25vcHJvZiguLi4pKVxuK1xuK05vdGVzXG4rPT09PT1cbitcbistIFdoZW4gYSBzbGFiIG9iamVjdCBpcyBhbGxvY2F0ZWQgZnJvbSBLRkVOQ0UsIGl0cyBhY2NvdW50aW5nIGlzIHNraXBwZWQuXG4rICBLRkVOQ0UgYWxsb2NhdGlvbnMgYXJlIHJhcmUgYW5kIGxpbWl0ZWQgdG8gYSBzbWFsbCBudW1iZXIsIHNvIHRoaXMgb21pc3Npb25cbisgIGlzIG5lZ2xpZ2libGUuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggZTFmNDZhMDAxNmZjZmQuLjkzODY5Y2MzNWMyNWJjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMTQ0MCwxOSArMTQ0MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX3dvcmtxdWV1ZSh2b2lkKSB7IH1cbiBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfVxuICNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbiBcbi0vKlxuLSAqIEV4dGVuZGVkIGluZm9ybWF0aW9uIGZvciBzbGFiIG9iamVjdHMgc3RvcmVkIGFzIGFuIGFycmF5IGluIHBhZ2UtXHUwMDNlbWVtY2dfZGF0YVxuLSAqIGlmIE1FTUNHX0RBVEFfT0JKRVhUUyBpcyBzZXQuXG4tICovXG4tc3RydWN0IHNsYWJvYmpfZXh0IHtcbi0jaWZkZWYgQ09ORklHX01FTUNHXG4tXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4tI2VuZGlmXG4tI2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG4tXHR1bmlvbiBjb2RldGFnX3JlZiByZWY7XG4tI2VuZGlmXG4tfSBfX2FsaWduZWQoOCk7XG4tXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbGFiLmggYi9pbmNsdWRlL2xpbnV4L3NsYWIuaFxuaW5kZXggM2ExNGRmNTA3NjZhYjAuLmY5MTMyOTAyYzVhNmRkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zbGFiLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2xhYi5oXG5AQCAtNDUsNiArNDUsNyBAQCBlbnVtIF9zbGFiX2ZsYWdfYml0cyB7XG4gI2VuZGlmXG4gI2lmZGVmIENPTkZJR19NRU1DR1xuIFx0X1NMQUJfQUNDT1VOVCxcbitcdF9TTEFCX01BWV9BQ0NPVU5ULFxuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQ1xuIFx0X1NMQUJfS0FTQU4sXG5AQCAtMjA0LDggKzIwNSwxMCBAQCBlbnVtIF9zbGFiX2ZsYWdfYml0cyB7XG4gICovXG4gI2lmZGVmIENPTkZJR19NRU1DR1xuICMgZGVmaW5lIFNMQUJfQUNDT1VOVFx0XHRfX1NMQUJfRkxBR19CSVQoX1NMQUJfQUNDT1VOVClcbisjIGRlZmluZSBTTEFCX01BWV9BQ0NPVU5UXHRfX1NMQUJfRkxBR19CSVQoX1NMQUJfTUFZX0FDQ09VTlQpXG4gI2Vsc2VcbiAjIGRlZmluZSBTTEFCX0FDQ09VTlRcdFx0X19TTEFCX0ZMQUdfVU5VU0VEXG4rIyBkZWZpbmUgU0xBQl9NQVlfQUNDT1VOVFx0X19TTEFCX0ZMQUdfVU5VU0VEXG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19LQVNBTl9HRU5FUklDXG5kaWZmIC0tZ2l0IGEvbW0va2ZlbmNlL2NvcmUuYyBiL21tL2tmZW5jZS9jb3JlLmNcbmluZGV4IDY1NzdiZDc2OTU0ZWI0Li44OTdlY2YyNTk0ZmI2NCAxMDA2NDRcbi0tLSBhL21tL2tmZW5jZS9jb3JlLmNcbisrKyBiL21tL2tmZW5jZS9jb3JlLmNcbkBAIC02NDAsNiArNjQwLDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcga2ZlbmNlX2luaXRfcG9vbCh2b2lkKVxuIFx0XHRzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTtcbiBcdFx0c2xhYi1cdTAwM2VvYmpfZXh0cyA9ICh1bnNpZ25lZCBsb25nKVx1MDAyNmtmZW5jZV9tZXRhZGF0YV9pbml0W2kgLyAyIC0gMV0ub2JqX2V4dHMgfFxuIFx0XHRcdFx0IE1FTUNHX0RBVEFfT0JKRVhUUztcbisjaWZkZWYgQ09ORklHXzY0QklUXG4rXHRcdHNsYWItXHUwMDNlb2JqX2V4dHNfbmVlZHNfb2JqY2cgPSAxO1xuKyNlbmRpZlxuICNlbmRpZlxuIFx0fVxuIFxuQEAgLTEyNDksNyArMTI1Miw3IEBAIHZvaWQgX19rZmVuY2VfZnJlZSh2b2lkICphZGRyKVxuIFx0c3RydWN0IGtmZW5jZV9tZXRhZGF0YSAqbWV0YSA9IGFkZHJfdG9fbWV0YWRhdGEoKHVuc2lnbmVkIGxvbmcpYWRkcik7XG4gXG4gI2lmZGVmIENPTkZJR19NRU1DR1xuLVx0S0ZFTkNFX1dBUk5fT04obWV0YS1cdTAwM2VvYmpfZXh0cy5vYmpjZyk7XG4rXHRLRkVOQ0VfV0FSTl9PTihzbGFiX29ial9leHRfb2JqY2coXHUwMDI2bWV0YS1cdTAwM2VvYmpfZXh0cykpO1xuICNlbmRpZlxuIFx0LypcbiBcdCAqIElmIHRoZSBvYmplY3RzIG9mIHRoZSBjYWNoZSBhcmUgU0xBQl9UWVBFU0FGRV9CWV9SQ1UsIGRlZmVyIGZyZWVpbmdcbmRpZmYgLS1naXQgYS9tbS9rZmVuY2Uva2ZlbmNlX3Rlc3QuYyBiL21tL2tmZW5jZS9rZmVuY2VfdGVzdC5jXG5pbmRleCBkZTJkMGY3ZDYyYjE1ZS4uOTg2N2MwM2VmMGFlM2QgMTAwNjQ0XG4tLS0gYS9tbS9rZmVuY2Uva2ZlbmNlX3Rlc3QuY1xuKysrIGIvbW0va2ZlbmNlL2tmZW5jZV90ZXN0LmNcbkBAIC0yOTUsNyArMjk1LDcgQEAgc3RhdGljIHZvaWQgKnRlc3RfYWxsb2Moc3RydWN0IGt1bml0ICp0ZXN0LCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwLCBlbnVtIGFsbG9jYXRcbiBcdFx0XHQgKiBtZW1jZyBhY2NvdW50aW5nIHdvcmtzIGNvcnJlY3RseS5cbiBcdFx0XHQgKi9cbiBcdFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgb2JqX3RvX2luZGV4KHMsIHNsYWIsIGFsbG9jKSwgMFUpO1xuLVx0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBvYmpzX3Blcl9zbGFiKHMsIHNsYWIpLCAxKTtcbitcdFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgKCh1bnNpZ25lZCBpbnQpc2xhYi1cdTAwM2VvYmplY3RzKSwgMSk7XG4gXG4gXHRcdFx0aWYgKHBvbGljeSA9PSBBTExPQ0FURV9BTlkpXG4gXHRcdFx0XHRyZXR1cm4gYWxsb2M7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA2ZGM0ODg4YTkwZjNmZC4uYWFjZTg1ZmI5OWY5NzMgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTI4NjUsMTggKzI4NjUsMTkgQEAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqcClcbiBcdCAqL1xuIFx0dW5zaWduZWQgbG9uZyBvYmpfZXh0cztcbiBcdHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dDtcbi1cdHVuc2lnbmVkIGludCBvZmY7XG4rXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4gXG4gXHRvYmpfZXh0cyA9IHNsYWJfb2JqX2V4dHMoc2xhYik7XG4gXHRpZiAoIW9ial9leHRzKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbi1cdG9mZiA9IG9ial90b19pbmRleChzbGFiLVx1MDAzZXNsYWJfY2FjaGUsIHNsYWIsIHApO1xuLVx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKTtcbi1cdGlmIChvYmpfZXh0LVx1MDAzZW9iamNnKSB7XG4tXHRcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyA9IG9ial9leHQtXHUwMDNlb2JqY2c7XG4rXHRpZiAoIXNsYWJfbmVlZHNfb2JqY2coc2xhYikpXG4rXHRcdHJldHVybiBOVUxMO1xuIFxuK1x0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuK1x0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLVx1MDAzZXNsYWJfY2FjaGUsIHNsYWIsIG9ial9leHRzLCBwKTtcbitcdG9iamNnID0gc2xhYl9vYmpfZXh0X29iamNnKG9ial9leHQpO1xuK1x0aWYgKG9iamNnKSB7XG4gXHRcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbiBcdFx0cmV0dXJuIG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xuIFx0fVxuQEAgLTM1NDEsNyArMzU0Miw2IEBAIGJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXG4gXHRzaXplX3Qgb2JqX3NpemUgPSBvYmpfZnVsbF9zaXplKHMpO1xuIFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0c3RydWN0IHNsYWIgKnNsYWI7XG4tXHR1bnNpZ25lZCBsb25nIG9mZjtcbiBcdHNpemVfdCBpO1xuIFxuIFx0LypcbkBAIC0zNTgzLDYgKzM1ODMsOSBAQCBib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxuIFxuIFx0XHRzbGFiID0gdmlydF90b19zbGFiKHBbaV0pO1xuIFxuK1x0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfREVCVUdfVk0pIFx1MDAyNlx1MDAyNiBXQVJOX09OX09OQ0UoIXNsYWJfbmVlZHNfb2JqY2coc2xhYikpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBzbGFiX2FsbG9jX2ZsYWdzKSkge1xuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTM2MTYsMTAgKzM2MTksMTEgQEAgYm9vbCBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgbGlzdF9scnUgKmxydSxcbiBcbiBcdFx0b2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpO1xuIFx0XHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG4tXHRcdG9mZiA9IG9ial90b19pbmRleChzLCBzbGFiLCBwW2ldKTtcbi1cdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2ZmKTtcbitcdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgcFtpXSk7XG4rXG4gXHRcdG9ial9jZ3JvdXBfZ2V0KG9iamNnKTtcbi1cdFx0b2JqX2V4dC1cdTAwM2VvYmpjZyA9IG9iamNnO1xuK1x0XHRzbGFiX29ial9leHRfc2V0X29iamNnKG9ial9leHQsIG9iamNnKTtcbitcbiBcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0fVxuIFxuQEAgLTM2MzUsMTUgKzM2MzksMTMgQEAgdm9pZCBfX21lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbiBcdFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIFx0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQ7XG4gXHRcdHN0cnVjdCBvYmpfc3RvY2tfcGNwICpzdG9jaztcbi1cdFx0dW5zaWduZWQgaW50IG9mZjtcbiBcbi1cdFx0b2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHBbaV0pO1xuLVx0XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpO1xuLVx0XHRvYmpjZyA9IG9ial9leHQtXHUwMDNlb2JqY2c7XG4rXHRcdG9ial9leHQgPSBzbGFiX29ial9leHQocywgc2xhYiwgb2JqX2V4dHMsIHBbaV0pO1xuK1x0XHRvYmpjZyA9IHNsYWJfb2JqX2V4dF9vYmpjZyhvYmpfZXh0KTtcbiBcdFx0aWYgKCFvYmpjZylcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0b2JqX2V4dC1cdTAwM2VvYmpjZyA9IE5VTEw7XG4rXHRcdHNsYWJfb2JqX2V4dF9zZXRfb2JqY2cob2JqX2V4dCwgTlVMTCk7XG4gXG4gXHRcdHN0b2NrID0gdHJ5bG9ja19zdG9jaygpO1xuIFx0XHRfX3JlZmlsbF9vYmpfc3RvY2sob2JqY2csIHN0b2NrLCBvYmpfc2l6ZSwgdHJ1ZSk7XG5kaWZmIC0tZ2l0IGEvbW0vc2xhYi5oIGIvbW0vc2xhYi5oXG5pbmRleCBmNWUzMzZiNmI2YjA0Yy4uMThjMmE4MDdmMDIzY2UgMTAwNjQ0XG4tLS0gYS9tbS9zbGFiLmhcbisrKyBiL21tL3NsYWIuaFxuQEAgLTgxLDEwICs4MSwxMSBAQCBzdHJ1Y3QgZnJlZWxpc3RfY291bnRlcnMge1xuICNpZmRlZiBDT05GSUdfNjRCSVRcbiBcdFx0XHRcdFx0LypcbiBcdFx0XHRcdFx0ICogU29tZSBvcHRpbWl6YXRpb25zIHVzZSBmcmVlIGJpdHMgaW4gJ2NvdW50ZXJzJyBmaWVsZFxuLVx0XHRcdFx0XHQgKiB0byBzYXZlIG1lbW9yeS4gSW4gY2FzZSAtXHUwMDNlc3RyaWRlIGZpZWxkIGlzIG5vdCBhdmFpbGFibGUsXG4tXHRcdFx0XHRcdCAqIHN1Y2ggb3B0aW1pemF0aW9ucyBhcmUgZGlzYWJsZWQuXG4rXHRcdFx0XHRcdCAqIHRvIHNhdmUgbWVtb3J5IG9yIENQVS4gSWYgdGhlc2UgZnJlZSBiaXRzIGFyZSBub3RcbitcdFx0XHRcdFx0ICogYXZhaWxhYmxlLCBzdWNoIG9wdGltaXphdGlvbnMgYXJlIGRpc2FibGVkLlxuIFx0XHRcdFx0XHQgKi9cbi1cdFx0XHRcdFx0dW5zaWduZWQgaW50IHN0cmlkZTtcbitcdFx0XHRcdFx0dW5zaWduZWQgb2JqX2V4dHNfaW5fb2JqZWN0OjE7XG4rXHRcdFx0XHRcdHVuc2lnbmVkIG9ial9leHRzX25lZWRzX29iamNnOjE7XG4gI2VuZGlmXG4gXHRcdFx0XHR9O1xuIFx0XHRcdH07XG5AQCAtMzMwLDEyICszMzEsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfdG9faW5kZXgoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLFxuIFx0cmV0dXJuIF9fb2JqX3RvX2luZGV4KGNhY2hlLCBzbGFiX2FkZHJlc3Moc2xhYiksIG9iaik7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG9ianNfcGVyX3NsYWIoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLFxuLVx0XHRcdFx0Y29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpXG4te1xuLVx0cmV0dXJuIHNsYWItXHUwMDNlb2JqZWN0cztcbi19XG4tXG4gLypcbiAgKiBTdGF0ZSBvZiB0aGUgc2xhYiBhbGxvY2F0b3IuXG4gICpcbkBAIC01NTUsNiArNTUwLDkzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX2ttYWxsb2Nfbm9fb2JqZXh0KHZvaWQpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuKy8qXG4rICogRXh0ZW5kZWQgaW5mb3JtYXRpb24gZm9yIHNsYWIgb2JqZWN0cyBzdG9yZWQgYXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IGluXG4rICogc2xhYi1cdTAwM2VvYmpfZXh0cyAoYWxpYXNpbmcgcGFnZS1cdTAwM2VtZW1jZ19kYXRhKSBpZiBNRU1DR19EQVRBX09CSkVYVFMgaXMgc2V0LlxuKyAqL1xuK3N0cnVjdCBzbGFib2JqX2V4dCB7XG4rXHQvKlxuK1x0ICogQWxsIGVsZW1lbnRzIG9mIHRoZSB1bmlvbiBzaG91bGQgYmUgcG9pbnRlci1zaXplZCB0byBhdm9pZCBtZW1vcnlcbitcdCAqIHdhc3RlXG4rXHQgKi9cbitcdHVuaW9uIHtcbisjaWZkZWYgQ09ORklHX01FTUNHXG4rXHRcdHN0cnVjdCBvYmpfY2dyb3VwICpfb2JqY2c7XG4rI2VuZGlmXG4rI2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG4rXHRcdHVuaW9uIGNvZGV0YWdfcmVmIF9jdHJlZjtcbisjZW5kaWZcbitcdH07XG4rfSBfX2FsaWduZWQoOCk7XG4rXG4rI2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG4rREVDTEFSRV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcbitcdFx0XHQgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XG4rXG4rc3RhdGljIGlubGluZSBib29sIHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZyh2b2lkKVxuK3tcbitcdHJldHVybiBzdGF0aWNfYnJhbmNoX21heWJlKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcbitcdFx0XHRcdCAgIFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xuK31cbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWcodm9pZClcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuKyNlbmRpZlxuK1xuKyNpZmRlZiBDT05GSUdfTUVNQ0dcbitzdGF0aWMgaW5saW5lIGJvb2wgY2FjaGVfbmVlZHNfb2JqY2coc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlKVxuK3tcbitcdHJldHVybiAoY2FjaGUtXHUwMDNlZmxhZ3MgXHUwMDI2IFNMQUJfTUFZX0FDQ09VTlQpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgc2xhYl9uZWVkc19vYmpjZyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbit7XG4rI2lmZGVmIENPTkZJR182NEJJVFxuK1x0cmV0dXJuIHNsYWItXHUwMDNlb2JqX2V4dHNfbmVlZHNfb2JqY2c7XG4rI2Vsc2VcbitcdHJldHVybiBjYWNoZV9uZWVkc19vYmpjZyhzbGFiLVx1MDAzZXNsYWJfY2FjaGUpO1xuKyNlbmRpZlxuK31cbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBjYWNoZV9uZWVkc19vYmpjZyhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgc2xhYl9uZWVkc19vYmpjZyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuKyNlbmRpZlxuK1xuK3N0YXRpYyBpbmxpbmUgc2l6ZV90IGNhY2hlX29ial9leHRfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbit7XG4rXHRzaXplX3Qgc3ogPSAwO1xuK1xuK1x0aWYgKGNhY2hlX25lZWRzX29iamNnKHMpKVxuK1x0XHRzeiArPSAxO1xuK1xuK1x0aWYgKHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZygpKVxuK1x0XHRzeiArPSAxO1xuK1xuK1x0cmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc3o7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHNsYWJfb2JqX2V4dF9zaXplKHN0cnVjdCBzbGFiICpzbGFiKVxuK3tcbitcdHNpemVfdCBzeiA9IDA7XG4rXG4rXHRpZiAoc2xhYl9uZWVkc19vYmpjZyhzbGFiKSlcbitcdFx0c3ogKz0gMTtcbitcbitcdGlmIChzbGFiX29ial9leHRfaGFzX2NvZGV0YWcoKSlcbitcdFx0c3ogKz0gMTtcbitcbitcdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHN6O1xuK31cbitcbiAjaWZkZWYgQ09ORklHX1NMQUJfT0JKX0VYVFxuIFxuIC8qXG5AQCAtNTcyLDcgKzY1NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX2ttYWxsb2Nfbm9fb2JqZXh0KHZvaWQpXG4gICogb2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpO1xuICAqIGlmIChvYmpfZXh0cykge1xuICAqICAgICAgICAgZ2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuLSAqICAgICAgICAgb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2JqX3RvX2luZGV4KHMsIHNsYWIsIG9iaikpO1xuKyAqICAgICAgICAgb2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgb2JqKTtcbiAgKiAgICAgICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIG9ial9leHRcbiAgKiAgICAgICAgIHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbiAgKiB9XG5AQCAtNjEwLDQ4ICs2OTIsODIgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dF9zbGFiX29ial9leHRzKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMpXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfNjRCSVRcbi1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBpbnQgc3RyaWRlKVxuLXtcbi1cdHNsYWItXHUwMDNlc3RyaWRlID0gc3RyaWRlO1xuLX1cbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbGFiX2dldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIpXG4rc3RhdGljIGlubGluZSBib29sIG9ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYilcbiB7XG4tXHRyZXR1cm4gc2xhYi1cdTAwM2VzdHJpZGU7XG4rXHQvKlxuK1x0ICogTm90ZSB3ZSBjYW5ub3QgcmVseSBvbiB0aGUgU0xBQl9PQkpfRVhUX0lOX09CSiBmbGFnIGhlcmUgYW5kIG5lZWQgdG9cbitcdCAqIGNoZWNrIHRoZSBwZXItc2xhYiBiaXQuIEEgY2FjaGUgY2FuIGhhdmUgU0xBQl9PQkpfRVhUX0lOX09CSiBzZXQsIGJ1dFxuK1x0ICogYWxsb2NhdGlvbnMgd2l0aGluX3NsYWJfbGVmdG92ZXIgYXJlIHByZWZlcnJlZC4gQW5kIHRob3NlIG1heSBiZVxuK1x0ICogcG9zc2libGUgb3Igbm90IGRlcGVuZGluZyBvbiB0aGUgcGFydGljdWxhciBzbGFiJ3Mgc2l6ZS5cbitcdCAqL1xuK1x0cmV0dXJuIHNsYWItXHUwMDNlb2JqX2V4dHNfaW5fb2JqZWN0O1xuIH1cbiAjZWxzZVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGludCBzdHJpZGUpXG4rc3RhdGljIGlubGluZSBib29sIG9ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYilcbiB7XG4tXHRWTV9XQVJOX09OX09OQ0Uoc3RyaWRlICE9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKTtcbi19XG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2xhYl9nZXRfc3RyaWRlKHN0cnVjdCBzbGFiICpzbGFiKVxuLXtcbi1cdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KTtcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gI2VuZGlmXG4gXG4gLypcbiAgKiBzbGFiX29ial9leHQgLSBnZXQgdGhlIHBvaW50ZXIgdG8gdGhlIHNsYWIgb2JqZWN0IGV4dGVuc2lvbiBtZXRhZGF0YVxuICAqIGFzc29jaWF0ZWQgd2l0aCBhbiBvYmplY3QgaW4gYSBzbGFiLlxuKyAqIEBzOiBjYWNoZSB0aGF0IHRoZSBzbGFiIGJsb25ncyB0b1xuICAqIEBzbGFiOiBhIHBvaW50ZXIgdG8gdGhlIHNsYWIgc3RydWN0XG4gICogQG9ial9leHRzOiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCBleHRlbnNpb24gdmVjdG9yXG4tICogQGluZGV4OiBhbiBpbmRleCBvZiB0aGUgb2JqZWN0XG4rICogQG9iajogYSBwb2ludGVyIHRvIHRoZSBvYmplY3RcbiAgKlxuICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBvYmplY3QgZXh0ZW5zaW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgb2JqZWN0LlxuICAqIE11c3QgYmUgY2FsbGVkIHdpdGhpbiBhIHNlY3Rpb24gY292ZXJlZCBieSBnZXQvcHV0X3NsYWJfb2JqX2V4dHMoKS5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqc2xhYl9vYmpfZXh0KHN0cnVjdCBzbGFiICpzbGFiLFxuLVx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbi1cdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBpbmRleClcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqXG4rc2xhYl9vYmpfZXh0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbitcdCAgICAgY29uc3Qgdm9pZCAqb2JqKVxuIHtcbiBcdHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dDtcbitcdHVuc2lnbmVkIGludCBpbmRleDtcbitcdHVuc2lnbmVkIGludCBzdHJpZGU7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0Uob2JqX2V4dHMgIT0gc2xhYl9vYmpfZXh0cyhzbGFiKSk7XG4gXG4tXHRvYmpfZXh0ID0gKHN0cnVjdCBzbGFib2JqX2V4dCAqKShvYmpfZXh0cyArXG4tXHRcdFx0XHRcdCBzbGFiX2dldF9zdHJpZGUoc2xhYikgKiBpbmRleCk7XG4rXHRpbmRleCA9IG9ial90b19pbmRleChzLCBzbGFiLCBvYmopO1xuK1xuK1x0aWYgKCFvYmpfZXh0c19pbl9vYmplY3Qoc2xhYikpXG4rXHRcdHN0cmlkZSA9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpO1xuK1x0ZWxzZVxuK1x0XHRzdHJpZGUgPSBzLVx1MDAzZXNpemU7XG4rXG4rXHRvYmpfZXh0ID0gKHN0cnVjdCBzbGFib2JqX2V4dCAqKShvYmpfZXh0cyArIGluZGV4ICogc3RyaWRlKTtcbitcbiBcdHJldHVybiBrYXNhbl9yZXNldF90YWcob2JqX2V4dCk7XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfTUVNQ0dcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpzbGFiX29ial9leHRfb2JqY2coc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0KVxuK3tcbitcdC8qIGlmIG9iamNnIGV4aXN0cywgaXQgY29tZXMgZmlyc3QsIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgKi9cbitcdHJldHVybiBvYmpfZXh0LVx1MDAzZV9vYmpjZztcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHNsYWJfb2JqX2V4dF9zZXRfb2JqY2coc3RydWN0IHNsYWJvYmpfZXh0ICpvYmpfZXh0LFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbit7XG4rXHQvKiBpZiBvYmpjZyBleGlzdHMsIGl0IGNvbWVzIGZpcnN0LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nICovXG4rXHRvYmpfZXh0LVx1MDAzZV9vYmpjZyA9IG9iamNnO1xuK31cbisjZW5kaWZcbitcbisjaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcbitzdGF0aWMgaW5saW5lIHVuaW9uIGNvZGV0YWdfcmVmICpcbitzbGFiX29ial9leHRfY29kZXRhZ19yZWYoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dClcbit7XG4rXHRpZiAoc2xhYl9uZWVkc19vYmpjZyhzbGFiKSlcbitcdFx0b2JqX2V4dCArPSAxO1xuK1xuK1x0cmV0dXJuIFx1MDAyNm9ial9leHQtXHUwMDNlX2N0cmVmO1xuK31cbisjZW5kaWZcbitcbiBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpO1xuIFxuQEAgLTY2MiwxNiArNzc4LDE3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpzbGFiX29ial9leHQoc3RydWN0IHNsYWIgKnNsYWIsXG4tXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9ial9leHRzLFxuLVx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGluZGV4KVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJvYmpfZXh0ICpcbitzbGFiX29ial9leHQoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBsb25nIG9ial9leHRzLFxuK1x0ICAgICBjb25zdCB2b2lkICpvYmopXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9zdHJpZGUoc3RydWN0IHNsYWIgKnNsYWIsIHVuc2lnbmVkIGludCBzdHJpZGUpIHsgfVxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNsYWJfZ2V0X3N0cmlkZShzdHJ1Y3Qgc2xhYiAqc2xhYikgeyByZXR1cm4gMDsgfVxuLVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbiBcbiAjZW5kaWYgLyogQ09ORklHX1NMQUJfT0JKX0VYVCAqL1xuIFxuZGlmZiAtLWdpdCBhL21tL3NsYWJfY29tbW9uLmMgYi9tbS9zbGFiX2NvbW1vbi5jXG5pbmRleCAwM2VjYWMxMmNkODY1Zi4uNGU5ODNlMjUwMzM4N2EgMTAwNjQ0XG4tLS0gYS9tbS9zbGFiX2NvbW1vbi5jXG4rKysgYi9tbS9zbGFiX2NvbW1vbi5jXG5AQCAtNTIsNyArNTIsNyBAQCBzdHJ1Y3Qga21lbV9jYWNoZSAqa21lbV9jYWNoZTtcbiBcdFx0U0xBQl9PQkpfRVhUX0lOX09CSilcbiBcbiAjZGVmaW5lIFNMQUJfTUVSR0VfU0FNRSAoU0xBQl9SRUNMQUlNX0FDQ09VTlQgfCBTTEFCX0NBQ0hFX0RNQSB8IFxcXG4tXHRcdFx0IFNMQUJfQ0FDSEVfRE1BMzIgfCBTTEFCX0FDQ09VTlQpXG4rXHRcdFx0IFNMQUJfQ0FDSEVfRE1BMzIgfCBTTEFCX0FDQ09VTlQgfCBTTEFCX01BWV9BQ0NPVU5UKVxuIFxuIC8qXG4gICogTWVyZ2UgY29udHJvbC4gSWYgdGhpcyBpcyBzZXQgdGhlbiBubyBtZXJnaW5nIG9mIHNsYWIgY2FjaGVzIHdpbGwgb2NjdXIuXG5AQCAtMzU5LDYgKzM1OSwxMyBAQCBzdHJ1Y3Qga21lbV9jYWNoZSAqX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzKGNvbnN0IGNoYXIgKm5hbWUsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBGb3Igbm93IHdlIGFzc3VtZSBhbnkgY2FjaGUgY2FuIGJlIHVzZWQgd2l0aCBfX0dGUF9BQ0NPVU5UIGFuZCB0aHVzXG4rXHQgKiBtYXkgbmVlZCB0byBzdG9yZSBvYmpjZyBwb2ludGVycyBmb3Igb2JqZWN0c1xuK1x0ICovXG4rXHRpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxuK1x0XHRmbGFncyB8PSBTTEFCX01BWV9BQ0NPVU5UO1xuK1xuIFx0LyogRmFpbCBjbG9zZWQgb24gYmFkIHVzZXJzaXplIG9mIHVzZXJvZmZzZXQgdmFsdWVzLiAqL1xuIFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgfHxcbiBcdCAgICBXQVJOX09OKCFhcmdzLVx1MDAzZXVzZXJzaXplIFx1MDAyNlx1MDAyNiBhcmdzLVx1MDAzZXVzZXJvZmZzZXQpIHx8XG5AQCAtOTg0LDExICs5OTEsMTkgQEAgbmV3X2ttYWxsb2NfY2FjaGUoaW50IGlkeCwgZW51bSBrbWFsbG9jX2NhY2hlX3R5cGUgdHlwZSlcbiAjZW5kaWZcbiBcbiBcdC8qXG4tXHQgKiBJZiBDT05GSUdfTUVNQ0cgaXMgZW5hYmxlZCwgZGlzYWJsZSBjYWNoZSBtZXJnaW5nIGZvclxuLVx0ICogS01BTExPQ19OT1JNQUwgY2FjaGVzLlxuK1x0ICogSWYgbWVtY2dfa21lbSBpcyBlbmFibGVkIGFuZCB0aGlzIGlzIGEgS01BTExPQ19OT1JNQUwgY2FjaGUgYW5kICBub3RcbitcdCAqIGFsaWFzZWQgd2l0aCBhbnkgb3RoZXIgdHlwZSwgbWFrZSBzdXJlIGl0J3MgbmV2ZXIgbWVyZ2VkIHdpdGggYW55IG90aGVyXG4rXHQgKiBjYWNoZS5cbitcdCAqXG4rXHQgKiBJbiBvdGhlciBjYXNlcyB0aGUga21hbGxvYyBjYWNoZSBtYXkgZW5kIHVwIGJlaW5nIHVzZWQgZm9yIGFcbitcdCAqIF9fR0ZQX0FDQ09VTlQgYWxsb2NhdGlvbiBzbyBtYXJrIGl0IGFzIHN1Y2hcbiBcdCAqL1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX01FTUNHKSBcdTAwMjZcdTAwMjYgKHR5cGUgPT0gS01BTExPQ19OT1JNQUwpKVxuLVx0XHRmbGFncyB8PSBTTEFCX05PX01FUkdFO1xuK1x0aWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSkge1xuK1x0XHRpZiAodHlwZSA9PSBLTUFMTE9DX05PUk1BTCBcdTAwMjZcdTAwMjYgS01BTExPQ19SRUNMQUlNICE9IEtNQUxMT0NfTk9STUFMKVxuK1x0XHRcdGZsYWdzIHw9IFNMQUJfTk9fTUVSR0U7XG4rXHRcdGVsc2VcbitcdFx0XHRmbGFncyB8PSBTTEFCX01BWV9BQ0NPVU5UO1xuK1x0fVxuIFxuIFx0aWYgKG1pbmFsaWduIFx1MDAzZSBBUkNIX0tNQUxMT0NfTUlOQUxJR04pIHtcbiBcdFx0YWxpZ25lZF9zaXplID0gQUxJR04oYWxpZ25lZF9zaXplLCBtaW5hbGlnbik7XG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXG5pbmRleCAwMzM3ZTYwZGI1YWNlMC4uZTYxNDhiNzNiOTJmODggMTAwNjQ0XG4tLS0gYS9tbS9zbHViLmNcbisrKyBiL21tL3NsdWIuY1xuQEAgLTIxMyw2ICsyMTMsMTEgQEAgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc2x1Yl9kZWJ1Z19lbmFibGVkKTtcbiBzdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc3RyaWN0X251bWEpO1xuICNlbmRpZlxuIFxuKyNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xuK0RFRklORV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcbitcdFx0XHRzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfa2V5KTtcbisjZW5kaWZcbitcbiAvKiBTdHJ1Y3R1cmUgaG9sZGluZyBleHRyYSBwYXJhbWV0ZXJzIGZvciBzbGFiIGFsbG9jYXRpb25zICovXG4gc3RydWN0IHNsYWJfYWxsb2NfY29udGV4dCB7XG4gXHR1bnNpZ25lZCBsb25nIGNhbGxlcl9hZGRyO1xuQEAgLTgwMyw3ICs4MDgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9zbGFiX29ial9leHRzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuIFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial9leHRzX3NpemVfaW5fc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYilcbiB7XG4tXHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkgKiBzbGFiLVx1MDAzZW9iamVjdHM7XG4rXHRyZXR1cm4gc2xhYl9vYmpfZXh0X3NpemUoc2xhYikgKiBzbGFiLVx1MDAzZW9iamVjdHM7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBvYmpfZXh0c19vZmZzZXRfaW5fc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbkBAIC04NzAsMTggKzg3NSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbiAjZW5kaWZcbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfU0xBQl9PQkpfRVhUKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXG4tc3RhdGljIGJvb2wgb2JqX2V4dHNfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi17XG4tXHQvKlxuLVx0ICogTm90ZSB3ZSBjYW5ub3QgcmVseSBvbiB0aGUgU0xBQl9PQkpfRVhUX0lOX09CSiBmbGFnIGhlcmUgYW5kIG5lZWQgdG9cbi1cdCAqIGNoZWNrIHRoZSBzdHJpZGUuIEEgY2FjaGUgY2FuIGhhdmUgU0xBQl9PQkpfRVhUX0lOX09CSiBzZXQsIGJ1dFxuLVx0ICogYWxsb2NhdGlvbnMgd2l0aGluX3NsYWJfbGVmdG92ZXIgYXJlIHByZWZlcnJlZC4gQW5kIHRob3NlIG1heSBiZVxuLVx0ICogcG9zc2libGUgb3Igbm90IGRlcGVuZGluZyBvbiB0aGUgcGFydGljdWxhciBzbGFiJ3Mgc2l6ZS5cbi1cdCAqL1xuLVx0cmV0dXJuIG9ial9leHRzX2luX3NsYWIocywgc2xhYikgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgKHNsYWJfZ2V0X3N0cmlkZShzbGFiKSA9PSBzLVx1MDAzZXNpemUpO1xuLX1cbi1cbiBzdGF0aWMgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4ge1xuIFx0dW5zaWduZWQgaW50IG9mZnNldCA9IGdldF9pbmZvX2VuZChzKTtcbkBAIC04OTYsMTYgKzg4OSwyMCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4gXG4gXHRyZXR1cm4gb2Zmc2V0O1xuIH1cbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4ge1xuLVx0cmV0dXJuIGZhbHNlO1xuK1x0c2xhYi1cdTAwM2VvYmpfZXh0c19pbl9vYmplY3QgPSAxO1xuIH1cbi1cbisjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4re1xuK31cbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbkBAIC0xMjA2LDggKzEyMDMsOCBAQCBzdGF0aWMgdm9pZCBwcmludF90cmFpbGVyKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdTggKnApXG4gXG4gXHRvZmYgKz0ga2FzYW5fbWV0YWRhdGFfc2l6ZShzLCBmYWxzZSk7XG4gXG4tXHRpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKVxuLVx0XHRvZmYgKz0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCk7XG4rXHRpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKVxuK1x0XHRvZmYgKz0gc2xhYl9vYmpfZXh0X3NpemUoc2xhYik7XG4gXG4gXHRpZiAob2ZmICE9IHNpemVfZnJvbV9vYmplY3QocykpXG4gXHRcdC8qIEJlZ2lubmluZyBvZiB0aGUgZmlsbGVyIGlzIHRoZSBmcmVlIHBvaW50ZXIgKi9cbkBAIC0xNDExLDggKzE0MDgsOCBAQCBzdGF0aWMgaW50IGNoZWNrX3BhZF9ieXRlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHU4ICpwKVxuIFxuIFx0b2ZmICs9IGthc2FuX21ldGFkYXRhX3NpemUocywgZmFsc2UpO1xuIFxuLVx0aWYgKG9ial9leHRzX2luX29iamVjdChzLCBzbGFiKSlcbi1cdFx0b2ZmICs9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpO1xuK1x0aWYgKG9ial9leHRzX2luX29iamVjdChzbGFiKSlcbitcdFx0b2ZmICs9IHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpO1xuIFxuIFx0aWYgKHNpemVfZnJvbV9vYmplY3QocykgPT0gb2ZmKVxuIFx0XHRyZXR1cm4gMTtcbkBAIC0xNDM5LDcgKzE0MzYsNyBAQCBzbGFiX3BhZF9jaGVjayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4gXHRsZW5ndGggPSBzbGFiX3NpemUoc2xhYik7XG4gXHRlbmQgPSBzdGFydCArIGxlbmd0aDtcbiBcbi1cdGlmIChvYmpfZXh0c19pbl9zbGFiKHMsIHNsYWIpIFx1MDAyNlx1MDAyNiAhb2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKSB7XG4rXHRpZiAob2JqX2V4dHNfaW5fc2xhYihzLCBzbGFiKSBcdTAwMjZcdTAwMjYgIW9ial9leHRzX2luX29iamVjdChzbGFiKSkge1xuIFx0XHRyZW1haW5kZXIgPSBsZW5ndGg7XG4gXHRcdHJlbWFpbmRlciAtPSBvYmpfZXh0c19vZmZzZXRfaW5fc2xhYihzLCBzbGFiKTtcbiBcdFx0cmVtYWluZGVyIC09IG9ial9leHRzX3NpemVfaW5fc2xhYihzbGFiKTtcbkBAIC0yMDcwLDIwICsyMDY3LDI2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX29ial9jb2RldGFnX2VtcHR5KGNvbnN0IHZvaWQgKm9iailcbiBcdG9ial9zbGFiID0gdmlydF90b19zbGFiKG9iaik7XG4gXHRzbGFiX2V4dHMgPSBzbGFiX29ial9leHRzKG9ial9zbGFiKTtcbiBcdGlmIChzbGFiX2V4dHMpIHtcbitcdFx0c3RydWN0IHNsYWJvYmpfZXh0ICpleHQ7XG4rXHRcdHVuaW9uIGNvZGV0YWdfcmVmICpyZWY7XG4rXG4gXHRcdGdldF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XG4tXHRcdHVuc2lnbmVkIGludCBvZmZzID0gb2JqX3RvX2luZGV4KG9ial9zbGFiLVx1MDAzZXNsYWJfY2FjaGUsXG4tXHRcdFx0XHRcdFx0IG9ial9zbGFiLCBvYmopO1xuLVx0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKmV4dCA9IHNsYWJfb2JqX2V4dChvYmpfc2xhYixcbi1cdFx0XHRcdFx0XHQgICAgICAgc2xhYl9leHRzLCBvZmZzKTtcbitcdFx0ZXh0ID0gc2xhYl9vYmpfZXh0KG9ial9zbGFiLVx1MDAzZXNsYWJfY2FjaGUsIG9ial9zbGFiLCBzbGFiX2V4dHMsIG9iaik7XG4rXHRcdHJlZiA9IHNsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihvYmpfc2xhYiwgZXh0KTtcbitcbitcdFx0aWYgKGlzX2tmZW5jZV9hZGRyZXNzKG9iaikpIHtcbitcdFx0XHRwdXRfc2xhYl9vYmpfZXh0cyhzbGFiX2V4dHMpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuIFxuLVx0XHRpZiAodW5saWtlbHkoaXNfY29kZXRhZ19lbXB0eShcdTAwMjZleHQtXHUwMDNlcmVmKSkpIHtcbitcdFx0aWYgKHVubGlrZWx5KGlzX2NvZGV0YWdfZW1wdHkocmVmKSkpIHtcbiBcdFx0XHRwdXRfc2xhYl9vYmpfZXh0cyhzbGFiX2V4dHMpO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFxuIFx0XHQvKiBjb2RldGFnIHNob3VsZCBiZSBOVUxMIGhlcmUgKi9cbi1cdFx0V0FSTl9PTihleHQtXHUwMDNlcmVmLmN0KTtcbi1cdFx0c2V0X2NvZGV0YWdfZW1wdHkoXHUwMDI2ZXh0LVx1MDAzZXJlZik7XG4rXHRcdFdBUk5fT04ocmVmLVx1MDAzZWN0KTtcbitcdFx0c2V0X2NvZGV0YWdfZW1wdHkocmVmKTtcbiBcdFx0cHV0X3NsYWJfb2JqX2V4dHMoc2xhYl9leHRzKTtcbiBcdH1cbiB9XG5AQCAtMjA5MywxOSArMjA5NiwyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFya19mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcdHJldHVybiBjbXB4Y2hnKFx1MDAyNnNsYWItXHUwMDNlb2JqX2V4dHMsIDAsIE9CSkVYVFNfQUxMT0NfRkFJTCkgPT0gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyh1bnNpZ25lZCBsb25nIG9ial9leHRzLFxuLVx0XHRcdHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjLCB1bnNpZ25lZCBpbnQgb2JqZWN0cylcbitzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiLFxuK1x0XHR1bnNpZ25lZCBsb25nIG9ial9leHRzLCBzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYylcbiB7XG4rXHR1bnNpZ25lZCBpbnQgc3RyaWRlO1xuK1xuK1x0aWYgKCFtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0LypcbiBcdCAqIElmIHZlY3RvciBwcmV2aW91c2x5IGZhaWxlZCB0byBhbGxvY2F0ZSB0aGVuIHdlIGhhdmUgbGl2ZVxuIFx0ICogb2JqZWN0cyB3aXRoIG5vIHRhZyByZWZlcmVuY2UuIE1hcmsgYWxsIHJlZmVyZW5jZXMgaW4gdGhpc1xuIFx0ICogdmVjdG9yIGFzIGVtcHR5IHRvIGF2b2lkIHdhcm5pbmdzIGxhdGVyIG9uLlxuIFx0ICovXG4tXHRpZiAob2JqX2V4dHMgPT0gT0JKRVhUU19BTExPQ19GQUlMKSB7XG4tXHRcdHVuc2lnbmVkIGludCBpO1xuK1x0aWYgKG9ial9leHRzICE9IE9CSkVYVFNfQUxMT0NfRkFJTClcbitcdFx0cmV0dXJuO1xuK1xuK1x0c3RyaWRlID0gc2xhYl9vYmpfZXh0X3NpemUoc2xhYikgLyBzaXplb2YoKnZlYyk7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2Mgc2xhYi1cdTAwM2VvYmplY3RzOyBpKyspIHtcbitcdFx0dW5pb24gY29kZXRhZ19yZWYgKnJlZiA9IHNsYWJfb2JqX2V4dF9jb2RldGFnX3JlZihzbGFiLCB2ZWMpO1xuIFxuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBvYmplY3RzOyBpKyspXG4tXHRcdFx0c2V0X2NvZGV0YWdfZW1wdHkoXHUwMDI2dmVjW2ldLnJlZik7XG4rXHRcdHNldF9jb2RldGFnX2VtcHR5KHJlZik7XG4rXHRcdHZlYyArPSBzdHJpZGU7XG4gXHR9XG4gfVxuIFxuQEAgLTIxMTMsOCArMjEyNiw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWFya19vYmpfY29kZXRhZ19lbXB0eShjb25zdCB2b2lkICpvYmopIHt9XG4gc3RhdGljIGlubGluZSBib29sIG1hcmtfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIpIHsgcmV0dXJuIGZhbHNlOyB9XG4tc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyh1bnNpZ25lZCBsb25nIG9ial9leHRzLFxuLVx0XHRcdHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjLCB1bnNpZ25lZCBpbnQgb2JqZWN0cykge31cbitzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiLFxuK1x0XHR1bnNpZ25lZCBsb25nIG9ial9leHRzLCBzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYykge31cbiBcbiAjZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cbiBcbkBAIC0yMTI3LDEyICsyMTQwLDExIEBAIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdFx0XHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbiB7XG4gXHRjb25zdCBib29sIGFsbG93X3NwaW4gPSBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhbGxvY19mbGFncyk7XG4tXHR1bnNpZ25lZCBpbnQgb2JqZWN0cyA9IG9ianNfcGVyX3NsYWIocywgc2xhYik7XG4gXHRib29sIG5ld19zbGFiID0gYWxsb2NfZmxhZ3MgXHUwMDI2IFNMQUJfQUxMT0NfTkVXX1NMQUI7XG4gXHR1bnNpZ25lZCBsb25nIG5ld19leHRzO1xuIFx0dW5zaWduZWQgbG9uZyBvbGRfZXh0cztcbiBcdHN0cnVjdCBzbGFib2JqX2V4dCAqdmVjO1xuLVx0c2l6ZV90IHN6ID0gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkgKiBzbGFiLVx1MDAzZW9iamVjdHM7XG4rXHRzaXplX3Qgc3ogPSBzbGFiX29ial9leHRfc2l6ZShzbGFiKSAqIHNsYWItXHUwMDNlb2JqZWN0cztcbiBcbiBcdGdmcCBcdTAwMjY9IH5PQkpDR1NfQ0xFQVJfTUFTSztcbiBcdC8qXG5AQCAtMjE4Myw3ICsyMTk1LDcgQEAgaW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuICNlbmRpZlxuIHJldHJ5OlxuIFx0b2xkX2V4dHMgPSBSRUFEX09OQ0Uoc2xhYi1cdTAwM2VvYmpfZXh0cyk7XG4tXHRoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Mob2xkX2V4dHMsIHZlYywgb2JqZWN0cyk7XG4rXHRoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Moc2xhYiwgb2xkX2V4dHMsIHZlYyk7XG4gXG4gXHRpZiAobmV3X3NsYWIpIHtcbiBcdFx0LypcbkBAIC0yMjUwLDkgKzIyNjIsNiBAQCBzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcdHZvaWQgKmFkZHI7XG4gXHR1bnNpZ25lZCBsb25nIG9ial9leHRzO1xuIFxuLVx0LyogSW5pdGlhbGl6ZSBzdHJpZGUgZWFybHkgdG8gYXZvaWQgbWVtb3J5IG9yZGVyaW5nIGlzc3VlcyAqL1xuLVx0c2xhYl9zZXRfc3RyaWRlKHNsYWIsIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKTtcbi1cbiBcdGlmICghbmVlZF9zbGFiX29ial9leHRzKHMpKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMjI3OCwxNSArMjI4NywxNCBAQCBzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcbiBcdFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0XHRmb3JfZWFjaF9vYmplY3QoYWRkciwgcywgc2xhYl9hZGRyZXNzKHNsYWIpLCBzbGFiLVx1MDAzZW9iamVjdHMpXG4tXHRcdFx0bWVtc2V0KGthc2FuX3Jlc2V0X3RhZyhhZGRyKSArIG9mZnNldCwgMCxcbi1cdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkpO1xuK1x0XHRcdG1lbXNldChrYXNhbl9yZXNldF90YWcoYWRkcikgKyBvZmZzZXQsIDAsIHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpKTtcbiBcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFxuICNpZmRlZiBDT05GSUdfTUVNQ0dcbiBcdFx0b2JqX2V4dHMgfD0gTUVNQ0dfREFUQV9PQkpFWFRTO1xuICNlbmRpZlxuIFx0XHRzbGFiLVx1MDAzZW9ial9leHRzID0gb2JqX2V4dHM7XG4tXHRcdHNsYWJfc2V0X3N0cmlkZShzbGFiLCBzLVx1MDAzZXNpemUpO1xuK1x0XHRzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc2xhYik7XG4gXHR9XG4gfVxuIFxuQEAgLTIzNTIsNiArMjM2MCw5IEBAIF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgZ2ZwX3QgZmxhZ3MsXG4gXHRpZiAoYWxsb2NfZmxhZ3MgXHUwMDI2IFNMQUJfQUxMT0NfTk9fUkVDVVJTRSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0aWYgKGlzX2tmZW5jZV9hZGRyZXNzKG9iamVjdCkpXG4rXHRcdHJldHVybjtcbitcbiBcdHNsYWIgPSB2aXJ0X3RvX3NsYWIob2JqZWN0KTtcbiBcdG9ial9leHRzID0gcHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2socywgc2xhYiwgZmxhZ3MsIGFsbG9jX2ZsYWdzLCBvYmplY3QpO1xuIFx0LypcbkBAIC0yMzYwLDExICsyMzcxLDE1IEBAIF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgZ2ZwX3QgZmxhZ3MsXG4gXHQgKiBjaGVjayBzaG91bGQgYmUgYWRkZWQgYmVmb3JlIGFsbG9jX3RhZ19hZGQoKS5cbiBcdCAqL1xuIFx0aWYgKG9ial9leHRzKSB7XG4tXHRcdHVuc2lnbmVkIGludCBvYmpfaWR4ID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIG9iamVjdCk7XG4rXHRcdHVuaW9uIGNvZGV0YWdfcmVmICpyZWY7XG4gXG4gXHRcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbi1cdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzbGFiLCBvYmpfZXh0cywgb2JqX2lkeCk7XG4tXHRcdGFsbG9jX3RhZ19hZGQoXHUwMDI2b2JqX2V4dC1cdTAwM2VyZWYsIGN1cnJlbnQtXHUwMDNlYWxsb2NfdGFnLCBzLVx1MDAzZXNpemUpO1xuK1xuK1x0XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBvYmplY3QpO1xuK1x0XHRyZWYgPSBzbGFiX29ial9leHRfY29kZXRhZ19yZWYoc2xhYiwgb2JqX2V4dCk7XG4rXG4rXHRcdGFsbG9jX3RhZ19hZGQocmVmLCBjdXJyZW50LVx1MDAzZWFsbG9jX3RhZywgcy1cdTAwM2VzaXplKTtcbitcbiBcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0fSBlbHNlIHtcbiBcdFx0YWxsb2NfdGFnX3NldF9pbmFjY3VyYXRlKGN1cnJlbnQtXHUwMDNlYWxsb2NfdGFnKTtcbkBAIC0yMzg0LDcgKzIzOTksNiBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZFxuIF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxuIFx0XHRcdCAgICAgICBpbnQgb2JqZWN0cylcbiB7XG4tXHRpbnQgaTtcbiBcdHVuc2lnbmVkIGxvbmcgb2JqX2V4dHM7XG4gXG4gXHQvKiBzbGFiLVx1MDAzZW9ial9leHRzIG1pZ2h0IG5vdCBiZSBOVUxMIGlmIGl0IHdhcyBjcmVhdGVkIGZvciBNRU1DRyBhY2NvdW50aW5nLiAqL1xuQEAgLTIzOTYsMTAgKzI0MTAsMTQgQEAgX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnBcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb2JqZWN0czsgaSsrKSB7XG4tXHRcdHVuc2lnbmVkIGludCBvZmYgPSBvYmpfdG9faW5kZXgocywgc2xhYiwgcFtpXSk7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mgb2JqZWN0czsgaSsrKSB7XG4rXHRcdHN0cnVjdCBzbGFib2JqX2V4dCAqZXh0O1xuK1xuK1x0XHRpZiAoaXNfa2ZlbmNlX2FkZHJlc3MocFtpXSkpXG4rXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGFsbG9jX3RhZ19zdWIoXHUwMDI2c2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpLVx1MDAzZXJlZiwgcy1cdTAwM2VzaXplKTtcbitcdFx0ZXh0ID0gc2xhYl9vYmpfZXh0KHMsIHNsYWIsIG9ial9leHRzLCBwW2ldKTtcbitcdFx0YWxsb2NfdGFnX3N1YihzbGFiX29ial9leHRfY29kZXRhZ19yZWYoc2xhYiwgZXh0KSwgcy1cdTAwM2VzaXplKTtcbiBcdH1cbiBcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbiB9XG5AQCAtMjQxMiw2ICsyNDMwLDI1IEBAIGFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbiBcdFx0X19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAsIG9iamVjdHMpO1xuIH1cbiBcbisvKlxuKyAqIE1ha2Ugc3VyZSB0aGUgc3RhdGljIGtleSB1c2VkIGJ5IHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZygpIHJlZmxlY3RzIHRoZVxuKyAqIHZhbHVlIG9mICFtZW1fYWxsb2NfcHJvZmlsaW5nX3Blcm1hbmVudGx5X2Rpc2FibGVkKClcbisgKlxuKyAqIEFueSBsYXRlciBtZW0gYWxsb2MgcHJvZmlsaW5nIHNodXRkb3duIHdvbid0IGJlIHJlZmxlY3RlZCBpbiB0aGUgc3RhdGljIGtleVxuKyAqIGJlY2F1c2Ugb2JqX2V4dHMgd2l0aCBjb2RldGFncyBtaWdodCBhbHJlYWR5IGV4aXN0LlxuKyAqL1xuK3N0YXRpYyB2b2lkIF9faW5pdCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCh2b2lkKVxuK3tcbitcdGJvb2wgbmVlZF9jb2RldGFnID0gIW1lbV9hbGxvY19wcm9maWxpbmdfcGVybWFuZW50bHlfZGlzYWJsZWQoKTtcbitcbitcdGlmIChuZWVkX2NvZGV0YWcgIT0gc3RhdGljX2tleV9lbmFibGVkKFx1MDAyNnNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpKSB7XG4rXHRcdGlmIChuZWVkX2NvZGV0YWcpXG4rXHRcdFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XG4rXHRcdGVsc2VcbitcdFx0XHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXHUwMDI2c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XG4rXHR9XG4rfVxuK1xuICNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXG4gXG4gc3RhdGljIGlubGluZSB2b2lkXG5AQCAtMjQyNiw2ICsyNDYzLDEwIEBAIGFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbiB7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCh2b2lkKVxuK3tcbit9XG4rXG4gI2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXG4gXG4gXG5AQCAtMjQ3MSw2ICsyNTEyLDkgQEAgdm9pZCBtZW1jZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxuIFx0aWYgKGxpa2VseSghb2JqX2V4dHMpKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRpZiAoIXNsYWJfbmVlZHNfb2JqY2coc2xhYikpXG4rXHRcdHJldHVybjtcbitcbiBcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbiBcdF9fbWVtY2dfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCwgb2JqZWN0cywgb2JqX2V4dHMpO1xuIFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuQEAgLTI0ODQsNyArMjUyOCw2IEBAIGJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcbiBcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcbi1cdHVuc2lnbmVkIGxvbmcgb2ZmO1xuIFxuIFx0cGFnZSA9IHZpcnRfdG9fcGFnZShwKTtcbiBcdGlmIChQYWdlTGFyZ2VLbWFsbG9jKHBhZ2UpKSB7XG5AQCAtMjUxNywxNiArMjU2MCwxNSBAQCBib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXG4gXHQgKiBvZiBzbGFiX29ial9leHRzIGJlaW5nIGFsbG9jYXRlZCBmcm9tIHRoZSBzYW1lIHNsYWIgYW5kIHRodXMgdGhlIHNsYWJcbiBcdCAqIGJlY29taW5nIGVmZmVjdGl2ZWx5IHVuZnJlZWFibGUuXG4gXHQgKi9cbi1cdGlmIChpc19rbWFsbG9jX25vcm1hbChzKSlcbitcdGlmICghY2FjaGVfbmVlZHNfb2JqY2cocykpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0LyogSWdub3JlIGFscmVhZHkgY2hhcmdlZCBvYmplY3RzLiAqL1xuIFx0b2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpO1xuIFx0aWYgKG9ial9leHRzKSB7XG4gXHRcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbi1cdFx0b2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHApO1xuLVx0XHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvZmYpO1xuLVx0XHRpZiAodW5saWtlbHkob2JqX2V4dC1cdTAwM2VvYmpjZykpIHtcbitcdFx0b2JqX2V4dCA9IHNsYWJfb2JqX2V4dChzLCBzbGFiLCBvYmpfZXh0cywgcCk7XG4rXHRcdGlmICh1bmxpa2VseShzbGFiX29ial9leHRfb2JqY2cob2JqX2V4dCkpKSB7XG4gXHRcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHR9XG5AQCAtMzM5MSwxMCArMzQzMywxNSBAQCBzdGF0aWMgc3RydWN0IHNsYWIgKmFsbG9jYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuIFx0XHRzdGF0KHMsIE9SREVSX0ZBTExCQUNLKTtcbiBcdH1cbiBcbitcdC8qIEluaXRpYWxpemVzIGZyb3plbiwgaW51c2UsIGFuZCBhbnkgZXh0cmEgNjRiaXQtb25seSBmbGFncyAqL1xuK1x0c2xhYi1cdTAwM2Vjb3VudGVycyA9IDA7XG4rXG4gXHRzbGFiLVx1MDAzZW9iamVjdHMgPSBvb19vYmplY3RzKG9vKTtcbi1cdHNsYWItXHUwMDNlaW51c2UgPSAwO1xuLVx0c2xhYi1cdTAwM2Vmcm96ZW4gPSAwO1xuIFxuKyNpZmRlZiBDT05GSUdfNjRCSVRcbitcdGlmIChjYWNoZV9uZWVkc19vYmpjZyhzKSlcbitcdFx0c2xhYi1cdTAwM2VvYmpfZXh0c19uZWVkc19vYmpjZyA9IDE7XG4rI2VuZGlmXG4gXHRzbGFiLVx1MDAzZXNsYWJfY2FjaGUgPSBzO1xuIFxuIFx0a2FzYW5fcG9pc29uX3NsYWIoc2xhYik7XG5AQCAtNjUyNiw3ICs2NTczLDcgQEAgc3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9rc2l6ZShzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcdCAqL1xuIFx0aWYgKHMtXHUwMDNlZmxhZ3MgXHUwMDI2IChTTEFCX1RZUEVTQUZFX0JZX1JDVSB8IFNMQUJfU1RPUkVfVVNFUikpXG4gXHRcdHJldHVybiBzLVx1MDAzZWludXNlO1xuLVx0ZWxzZSBpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHMsIHNsYWIpKVxuK1x0ZWxzZSBpZiAob2JqX2V4dHNfaW5fb2JqZWN0KHNsYWIpKVxuIFx0XHRyZXR1cm4gcy1cdTAwM2VpbnVzZTtcbiBcdC8qXG4gXHQgKiBFbHNlIHdlIGNhbiB1c2UgYWxsIHRoZSBwYWRkaW5nIGV0YyBmb3IgdGhlIGFsbG9jYXRpb25cbkBAIC03OTI5LDcgKzc5NzYsNyBAQCBzdGF0aWMgaW50IGNhbGN1bGF0ZV9zaXplcyhzdHJ1Y3Qga21lbV9jYWNoZV9hcmdzICphcmdzLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbiBcdGFsaWduZWRfc2l6ZSA9IEFMSUdOKHNpemUsIHMtXHUwMDNlYWxpZ24pO1xuICNpZiBkZWZpbmVkKENPTkZJR19TTEFCX09CSl9FWFQpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcbiBcdGlmIChzbGFiX2FyZ3NfdW5tZXJnZWFibGUoYXJncywgcy1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4tXHRcdFx0KGFsaWduZWRfc2l6ZSAtIHNpemUgXHUwMDNlPSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSkpXG4rXHRcdFx0KGFsaWduZWRfc2l6ZSAtIHNpemUgXHUwMDNlPSBjYWNoZV9vYmpfZXh0X3NpemUocykpKVxuIFx0XHRzLVx1MDAzZWZsYWdzIHw9IFNMQUJfT0JKX0VYVF9JTl9PQko7XG4gI2VuZGlmXG4gXHRzaXplID0gYWxpZ25lZF9zaXplO1xuQEAgLTg1MzksNiArODU4Niw4IEBAIHZvaWQgX19pbml0IGttZW1fY2FjaGVfaW5pdCh2b2lkKVxuIFx0XHRib290X2ttZW1fY2FjaGVfbm9kZTtcbiBcdGludCBub2RlO1xuIFxuK1x0c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXQoKTtcbitcbiBcdGlmIChkZWJ1Z19ndWFyZHBhZ2VfbWlub3JkZXIoKSlcbiBcdFx0c2x1Yl9tYXhfb3JkZXIgPSAwO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjA6MjQuMjk4ODQxNzYyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg4MTczNTY5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTbGFiIE9iamVjdCBFeHRlbnNpb24gT3B0aW1pemF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyB0d2Vha2luZyBob3cgYHN0cnVjdCBzbGFib2JqX2V4dGAgaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGFuZCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcg4oCTIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZSBnb2FsIGlzIHRvIG9wdGltaXplIHRoZSBzdHJ1Y3R1cmUgYnkgdXNpbmcgYSB1bmlvbiB0byBzdG9yZSBwb2ludGVycyB0byBgb2JqY2dgIGFuZCBgY29kZXRhZ19yZWZgLCBvciBhbGxvY2F0aW5nIHNwYWNlIGZvciB0aGVtIG9ubHkgd2hlbiB0aGV5J3JlIGFjdHVhbGx5IG5lZWRlZC4gVGhpcyBtYWtlcyBzZW5zZTsgaXQncyBhIGNvbW1vbiBzdHJhdGVneSBmb3IgcmVkdWNpbmcgbWVtb3J5IG92ZXJoZWFkIGluIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGFyZWFzIGxpa2UgdGhlIHNsYWIgYWxsb2NhdG9yLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBTTEFCX01BWV9BQ0NPVU5UYCBpcyBhIG5pY2UgdG91Y2gsIHRvbzsgaXQgYWRkcyBhIGJpdCBtb3JlIGZpbmUtZ3JhaW5lZCBjb250cm9sLlxuXG5GdW5jdGlvbmFsbHksIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgcGF0Y2ggZG9lc24ndCBicmVhayBhbnl0aGluZy4gSXQgZGVmaW5pdGVseSB0b3VjaGVzIGNvcmUgc2xhYiBhbGxvY2F0b3IgbG9naWMgYW5kIG1lbWNnIGFjY291bnRpbmcsIHNvIGFueSBtaXNzdGVwcyBoZXJlIGNvdWxkIGhhdmUgcHJldHR5IHdpZGUtcmVhY2hpbmcgY29uc2VxdWVuY2VzLiBBbmQsIHllYWgsIGdpdmVuIGhvdyBoZWF2aWx5IHNsYWIgYWxsb2NhdGlvbiBpcyB1c2VkIHRocm91Z2hvdXQgdGhlIGtlcm5lbCwgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlLiBXb3J0aCBhIGZ1enppbmcgY2FtcGFpZ24gdG8gc2VlIGlmIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9ycyBhcmlzZS5cblxuTm93LCBsZXTigJlzIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBhcmVhcyB0byBzY3J1dGluaXplLiBJJ3ZlIGdvdCBhIGxpc3Qgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczogYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBgX19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9va2AsIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2tgLCBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAsIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCwgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgLCBga2ZlbmNlX2luaXRfcG9vbGAsIGBfX2tmZW5jZV9mcmVlYCwgYG1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYmAsIGBrbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYCwgYW5kIGBuZXdfa21hbGxvY19jYWNoZWAuIEFscmlnaHQsIGxldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgbW0vc2x1Yi5jYCBhbmQgc3BlY2lmaWNhbGx5LCB0aGF0IGBhbGxvY19zbGFiX29ial9leHRzYCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5MDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMDozMS4xODA1ODI2NDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0OTkyOTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3NsYWJfb2JqX2V4dHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsdWIuYz0yMTM0PXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmMtMjEzOC1cXG5tbS9zbHViLmM6MjEzOTppbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIxNDAtXFx0XFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjIyOD1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuLS1cXG5tbS9zbHViLmMtMjI1OS0gKi9cXG5tbS9zbHViLmM6MjI2MDpzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG5tbS9zbHViLmMtMjI2MS17XFxuLS1cXG5tbS9zbHViLmM9MjMwNz1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTIzMTAtXFxubW0vc2x1Yi5jOjIzMTE6c3RhdGljIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjMxMi1cXHRcXHRcXHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjMxNz1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuLS1cXG5tbS9zbHViLmMtMjMyMC1cXG5tbS9zbHViLmM6MjMyMTpzdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjMyMi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmM9MjMzMT1wcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuLS1cXG5tbS9zbHViLmMtMjMzNC1cXHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXFx1MDAyNlxcdTAwMjZcXG5tbS9zbHViLmM6MjMzNTpcXHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XFxubW0vc2x1Yi5jLTIzMzYtXFx0XFx0cHJfd2Fybl9vbmNlKFxcXCIlcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxcXFxuXFxcIixcXG4tLVxcbm1tL3NsdWIuYz0zMzcyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhY2NvdW50X3NsYWIoc3RydWN0IHNsYWIgKnNsYWIsIGludCBvcmRlcixcXG4tLVxcbm1tL3NsdWIuYy0zMzc4LVxcdFxcdFxcdCFzbGFiX29ial9leHRzKHNsYWIpKVxcbm1tL3NsdWIuYzozMzc5OlxcdFxcdGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZ2ZwLFxcbm1tL3NsdWIuYy0zMzgwLVxcdFxcdFxcdFxcdCAgICBhbGxvY19mbGFncyB8IFNMQUJfQUxMT0NfTkVXX1NMQUIpO1xcbi0tXFxubW0vc2x1Yi5jPTM0MDE9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0zNDU2LVxcdCAqL1xcbm1tL3NsdWIuYzozNDU3OlxcdGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkocywgc2xhYik7XFxubW0vc2x1Yi5jLTM0NTgtXFx0YWNjb3VudF9zbGFiKHNsYWIsIG9vX29yZGVyKG9vKSwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjA6MzEuNDE1NTg3NTM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwMDgzOTE2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIFNsYWIgQWxsb2NhdG9yIEhvb2tzIGluIG1lbWNvbnRyb2wuYyoqXG5cbkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgKG1lbWNnKSBzeXN0ZW0gYW5kIHRoZSBzbGFiIGFsbG9jYXRvci4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gcGlucG9pbnQgd2hlcmUgbWVtY2cgaG9va3MgaW50byB0aGUgc2xhYiBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIHByb2Nlc3Nlcy4gVGhhdCBtZWFucyBkaWdnaW5nIGludG8gYG1tL21lbWNvbnRyb2wuY2AsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgY29yZSBtZW1jZyBsb2dpYyByZXNpZGVzLCBhcyBhIHN0YXJ0aW5nIHBvaW50LlxuXG5NeSBwcmltYXJ5IHRhcmdldHMgYXJlIHRoZSBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AgYW5kIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYCBmdW5jdGlvbnMuIFRoZSBuYW1lcyB0aGVtc2VsdmVzIGFyZSBhIHN0cm9uZyBjbHVlLiBgcG9zdF9hbGxvY2AgaW1wbGllcyBzb21ldGhpbmcgdGhhdCBoYXBwZW5zIGFmdGVyIGEgc2xhYiBvYmplY3QgaXMgYWxsb2NhdGVkLiBUaGUgYGZyZWVfaG9va2AgaXMgd2hhdCBydW5zIGFmdGVyIGEgc2xhYiBpcyBmcmVlZC4gVGhlc2UgaG9va3MgYXJlIGxpa2VseSB0aGUgZW50cnkgcG9pbnRzIHdoZXJlIG1lbWNnIHRyYWNrcyBtZW1vcnkgdXNhZ2UgdGllZCB0byBzbGFicywgYWNjb3VudGluZyBmb3IgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHdpdGhpbiBkaWZmZXJlbnQgY29udHJvbCBncm91cHMuIEknbGwgbmVlZCB0byBzZWUgKmhvdyogdGhlc2UgaG9va3MgYXJlIHVzZWQgYW5kIHdoYXQgY29udGV4dCB0aGV5IG9wZXJhdGUgd2l0aGluLiBJdCdsbCBiZSBlc3NlbnRpYWwgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgaG9va3MgYXJlIHJlZ2lzdGVyZWQgYW5kIGNhbGxlZCBpbiB0aGUgc2xhYiBhbGxvY2F0b3IncyBmdW5jdGlvbnMuIEkgYW50aWNpcGF0ZSB0aGUgZGV0YWlscyBhcmUgZW1iZWRkZWQgaW5zaWRlIHRoZSBhbGxvY2F0b3IncyBzb3VyY2UgY29kZSwgcG9zc2libHkgaW4gZnVuY3Rpb25zIGxpa2UgYGttZW1fY2FjaGVfYWxsb2NgIG9yIGBrbWVtX2NhY2hlX2ZyZWVgLiBJIGV4cGVjdCB0aGF0IGZpbmRpbmcgYW5kIHN0dWR5aW5nIGhvdyB0aGVzZSBob29rcyBhcmUgcmVnaXN0ZXJlZCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgYWxsb2NhdGlvbiBjaGFuZ2VzIGFyZSB0cmFja2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUxNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIwOjM1LjYxNjQzMTg4MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjI1NDIwMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTM1Mjk9c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2Z1bGxfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTM3LVxcbm1tL21lbWNvbnRyb2wuYzozNTM4OmJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxubW0vbWVtY29udHJvbC5jLTM1MzktXFx0XFx0XFx0XFx0ICBnZnBfdCBmbGFncywgdW5zaWduZWQgaW50IHNsYWJfYWxsb2NfZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIwOjM1Ljg3ODk4NDY2NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzkzMjkyNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIFNsYWIgQWxsb2NhdGlvbiBpbiB0aGUgTWVtb3J5IENvbnRyb2xsZXIqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IG1lbW9yeSBjb250cm9sLCBzcGVjaWZpY2FsbHkgaG93IHNsYWJzIGFyZSBtYW5hZ2VkIHdpdGhpbiBhIG1lbWNnIGNvbnRleHQuIFRoZSB0YXNrIGF0IGhhbmQgbGlrZWx5IGludm9sdmVzIGZyZWVpbmcgc29tZSBzbGFiIG9iamVjdHMsIGFuZCB0aGF0IG1lYW5zIGRpdmluZyBpbnRvIHRoZSBtZWNoYW5pY3Mgb2YgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgLiBUaGF0IGZ1bmN0aW9uJ3MgbmFtZSBpcyBhIHByZXR0eSBnb29kIGluZGljYXRvciB0aGF0IGl0J3MgaW52b2x2ZWQgaW4sIHdlbGwsICpob29raW5nKiBpbnRvIHRoZSBzbGFiIGZyZWVpbmcgcHJvY2VzcywgbGlrZWx5IHRvIHBlcmZvcm0gYWNjb3VudGluZyBvciBlbmZvcmNlbWVudCByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXBzLiBMZXQncyBzdGFydCBieSBjcmFja2luZyBvcGVuIGBtbS9tZW1jb250cm9sLmNgIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyBpbnNpZGUgdGhhdCBmdW5jdGlvbi4gVGhhdCBmaWxlIGlzIHRoZSBjZW50cmFsIHBsYWNlIHRvIGJlIGZvciB0aGlzIGtpbmQgb2YgaW52ZXN0aWdhdGlvbi4gSXQgd2lsbCBiZSBpbnRlcmVzdGluZyB0byBzZWUgaG93IHRoZSBtZW1jZyBzdHJ1Y3R1cmUgYW5kIGFzc29jaWF0ZWQgYm9va2tlZXBpbmcgYXJlIGludGVncmF0ZWQgaW50byB0aGUgc3RhbmRhcmQgc2xhYiBmcmVlaW5nIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDM1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjA6MzkuNjU4MzE3NTQzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjgxNjcyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21lbWNnX3NsYWJfZnJlZV9ob29rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MzUzOD1ib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM2MzItXFxubW0vbWVtY29udHJvbC5jOjM2MzM6dm9pZCBfX21lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG5tbS9tZW1jb250cm9sLmMtMzYzNC1cXHRcXHRcXHQgICAgdm9pZCAqKnAsIGludCBvYmplY3RzLCB1bnNpZ25lZCBsb25nIG9ial9leHRzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMDozOS43ODUxNDY3MzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjc4MDA5NDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBTbGFiIEFsbG9jYXRpb24gVGFnZ2luZyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzbGFiIGFsbG9jYXRvcidzIHRhZ2dpbmcgaG9va3MuIExldCdzIGhlYWQgc3RyYWlnaHQgZm9yIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBtbS9zbHViLmNgLiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rYCBhbmQgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2AgZnVuY3Rpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGhvb2tzIGZvciBtZW1vcnkgdGFnZ2luZyBhcmUgYWN0dWFsbHkgaW1wbGVtZW50ZWQgYXQgdGhlIHNsYWIgbGV2ZWwuIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gZXhhbWluZSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSBob29rcyBhbmQgdGhlIHVuZGVybHlpbmcgc2xhYiBtYW5hZ2VtZW50LiBBcmUgdGhleSBpbnRlZ3JhdGVkIGRpcmVjdGx5IGludG8gdGhlIGBrbWVtX2NhY2hlYCBzdHJ1Y3R1cmVzPyBBcmUgdGhleSBjYWxsZWQgaW5saW5lLCBvciBhcmUgdGhleSBtYW5hZ2VkIHZpYSBhIGRpZmZlcmVudCBtZWNoYW5pc20/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIHNlcXVlbmNlIG9mIGV2ZW50cyB3aGVuIG1lbW9yeSB0YWdnaW5nIGlzIGludm9sdmVkIGluIHNsYWIgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLiBJJ20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBIb3cgbXVjaCBvdmVyaGVhZCBkbyB0aGVzZSBob29rcyBpbnRyb2R1Y2U/IEFyZSB0aGVyZSBhbnkgb3B0aW1pemF0aW9ucyBpbiBwbGFjZSB0byBtaW5pbWl6ZSB0aGUgcGVyZm9ybWFuY2UgaGl0PyBUaGlzIGlzIHdoZXJlIHRoZSBkZXZpbCBpcyBpbiB0aGUgZGV0YWlscy4gSSBrbm93IGBzbHViLmNgIGlzIHdoZXJlIEknbGwgZmluZCB0aG9zZSBhbnN3ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQxMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIwOjQ1LjA2MzE2NDUwNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5OTY1NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsdWIuYz0yMzQ2PXN0YXRpYyBub2lubGluZSB2b2lkXFxubW0vc2x1Yi5jOjIzNDc6X19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCBnZnBfdCBmbGFncyxcXG5tbS9zbHViLmMtMjM0OC1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjM5MD1hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0yMzkzLVxcdGlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSlcXG5tbS9zbHViLmM6MjM5NDpcXHRcXHRfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHMsIG9iamVjdCwgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcXG5tbS9zbHViLmMtMjM5NS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIwOjQ1LjIxMzE2NTEwNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzc4OTY0MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gU2xhYiBBbGxvY2F0aW9uIFRhZ2dpbmcqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIHRhZ2dpbmcgbWVjaGFuaXNtcyB3aXRoaW4gdGhlIHNsYWIgYWxsb2NhdG9yLCBzcGVjaWZpY2FsbHkgaG93IGZyZWVpbmcgbWVtb3J5IGlzIGhhbmRsZWQuIFRoZSBxdWlja2VzdCByb3V0ZSBpcyB1c3VhbGx5IHRvIGp1bXAgZGlyZWN0bHkgaW50byB0aGUgc291cmNlIGNvZGUsIHNvIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBtbS9zbHViLmNgLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2tgIGZ1bmN0aW9uLiBUaGlzIGhvb2sgbGlrZWx5IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIHRoZSBzcGVjaWZpYyBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiB0YWdnaW5nIHRoYXQgSSdtIGludGVyZXN0ZWQgaW4uIFVuZGVyc3RhbmRpbmcgaXRzIGltcGxlbWVudGF0aW9uIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHRhZ2dpbmcgc3RyYXRlZ3kgYW5kIGxpa2VseSBzaGVkcyBsaWdodCBvbiBob3cgYWxsb2NhdGlvbiB0cmFja2luZyBhbmQgaW50ZWdyaXR5IGNoZWNraW5nIGFyZSBwZXJmb3JtZWQgZHVyaW5nIHNsYWIgZnJlZWluZy4gSSBleHBlY3QgaXQncyBnb2luZyB0byBiZSBhIGtleSBmdW5jdGlvbiBpbiBoYW5kbGluZyB0YWdnZWQgc2xhYnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTU4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjA6NDguNTkyMTM2NTY0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE2MTk5OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9MjM5OD1zdGF0aWMgbm9pbmxpbmUgdm9pZFxcbm1tL3NsdWIuYzoyMzk5Ol9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxcbm1tL3NsdWIuYy0yNDAwLVxcdFxcdFxcdCAgICAgICBpbnQgb2JqZWN0cylcXG4tLVxcbm1tL3NsdWIuYz0yNDI2PWFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcXG4tLVxcbm1tL3NsdWIuYy0yNDI5LVxcdGlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSlcXG5tbS9zbHViLmM6MjQzMDpcXHRcXHRfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCwgb2JqZWN0cyk7XFxubW0vc2x1Yi5jLTI0MzEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMDo0OC43MzM3NzE3OTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2NjI3MzI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkRpdmluZyBpbnRvIFNsYWIgQWNjb3VudGluZyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgc2xhYiBhY2NvdW50aW5nIHdpdGhpbiB0aGUgbWVtb3J5IGNvbnRyb2xsZXIsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAuIFRoaXMgaXMgd2hlcmUgdGhlIGNydWNpYWwgd29yayBoYXBwZW5zICphZnRlciogYSBzbGFiIGFsbG9jYXRpb24gaGFzIGNvbXBsZXRlZC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IG1lbW9yeSBjb250cm9sIGdyb3VwcyBhcmUgdXBkYXRlZCBhZnRlciBtZW1vcnkgaGFzIGJlZW4gY2xhaW1lZCBmcm9tIHRoZSBzbGFiIGFsbG9jYXRvci4gSXMgaXQgYSBnb29kIGlkZWEgdG8gY2hlY2sgdGhpcyBmaWxlIGZpcnN0PyBZZXMsIHRoYXQgaXMgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LiBMZXQncyBzZWUgaG93IG1lbW9yeSB1c2FnZSBhbmQgbGltaXRzIGFyZSBiZWluZyBhZGp1c3RlZC4gSSB3YW50IHRvIHNlZSB0aGUgZGV0YWlscyBvZiB0aGUgcG9zdC1jaGFyZ2UgYWNjb3VudGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzOTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMDo1MS43MDAxMDcwMDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODc1MzkxNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY2dfc2xhYl9wb3N0X2NoYXJnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIwOjUxLjg1ODg3NDY4N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTUwMDczNzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIGV4cHJlc3NlZCBhcyB0aG91Z2ggSSdtIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIE1lbW9yeSBBY2NvdW50aW5nIHdpdGhpbiB0aGUgS2VybmVsKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGludG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgYWNjb3VudGluZyByZWxhdGVkIHRvIFNMVUIgY2FjaGVzIGFuZCBjb250cm9sIGdyb3Vwcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG1lbW9yeSBjaGFyZ2VzIGFyZSBoYW5kbGVkIGFmdGVyIGFuIGFsbG9jYXRpb24uIE15IGluaXRpYWwgaHVudCBsZWFkcyBtZSB0byBgbW0vc2x1Yi5jYC4gTm93LCB3aGVyZSBleGFjdGx5IGRvZXMgdGhlIHBvc3QtY2hhcmdlIGxvZ2ljIHJlc2lkZT8gVGhlIGZ1bmN0aW9uIG5hbWUsIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYCwgc3VnZ2VzdHMgdGhpcyBpcyBwcmVjaXNlbHkgd2hhdCBJJ20gYWZ0ZXIuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBvZiB0cmFja2luZyBtZW1vcnkgdXNhZ2Ugd2l0aGluIGNvbnRyb2wgZ3JvdXBzIGhhcHBlbnMgYWZ0ZXIgYSBzbGFiIGFsbG9jYXRpb24gb3IgZnJlZWluZy4gVGltZSB0byBkaXZlIGludG8gdGhpcyBmdW5jdGlvbiBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBtZW1jZyBpbmZyYXN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1OTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMDo1NS4wMDg5NTIzNDhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NDM2OTMyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9MjUyMz1zdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVcXG5tbS9zbHViLmM6MjUyNDpib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXFxubW0vc2x1Yi5jLTI1MjUte1xcbi0tXFxubW0vc2x1Yi5jPTI1OTE9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4tLVxcbm1tL3NsdWIuYy0yNTk1LVxcbm1tL3NsdWIuYzoyNTk2OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxcbm1tL3NsdWIuYy0yNTk3LXtcXG4tLVxcbm1tL3NsdWIuYz01MDA1PWJvb2wga21lbV9jYWNoZV9jaGFyZ2Uodm9pZCAqb2JqcCwgZ2ZwX3QgZ2ZwZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmMtNTAwOS1cXG5tbS9zbHViLmM6NTAxMDpcXHRyZXR1cm4gbWVtY2dfc2xhYl9wb3N0X2NoYXJnZShvYmpwLCBnZnBmbGFncyk7XFxubW0vc2x1Yi5jLTUwMTEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMDo1NS4yNzMzMzY5NjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5MzkzNDkxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqS0ZFTkNFIERlZXAgRGl2ZTogSW5pdGlhbGl6YXRpb24gYW5kIERlYWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBLRkVOQ0UncyBjb3JlIHdvcmtpbmdzLCBzcGVjaWZpY2FsbHkgaG93IGl0IGluaXRpYWxpemVzIGl0cyBtZW1vcnkgcG9vbCBhbmQgdGhlIG1lY2hhbmlzbXMgaXQgdXNlcyBmb3IgZnJlZWluZyBtZW1vcnkuIFRoZSBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhvc2UgZnVuY3Rpb25zIGlzIGluIHRoZSBgbW0va2ZlbmNlL2NvcmUuY2AgZmlsZS4gSSdtIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhlIGBrZmVuY2VfaW5pdF9wb29sYCBmdW5jdGlvbiwgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHBvb2wgaXRzZWxmIGlzIHNldCB1cCwgYW5kIEkgd2lsbCBhbHNvIG5lZWQgdG8gcmV2aWV3IGBfX2tmZW5jZV9mcmVlYCB0byBnZXQgdGhlIHJ1bmRvd24gb24gaG93IG1lbW9yeSBpcyBhY3R1YWxseSByZWxpbnF1aXNoZWQgYnkgS0ZFTkNFLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIHBpY3R1cmUgSSBuZWVkIHRvIGFuYWx5emUgaXRzIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA5MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIwOjU5LjE2NzI3ODQ3MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwMTMwOTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmZW5jZV9pbml0X3Bvb2xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va2ZlbmNlL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9rZmVuY2UvY29yZS5jPTU5OT1zdGF0aWMgdm9pZCByY3VfZ3VhcmRlZF9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaClcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmMtNjEwLSAqL1xcbm1tL2tmZW5jZS9jb3JlLmM6NjExOnN0YXRpYyB1bnNpZ25lZCBsb25nIGtmZW5jZV9pbml0X3Bvb2wodm9pZClcXG5tbS9rZmVuY2UvY29yZS5jLTYxMi1cXHRfX2NvbnRleHRfdW5zYWZlKC8qIGNvbnN0cnVjdG9yICovKVxcbi0tXFxubW0va2ZlbmNlL2NvcmUuYy02MTYtXFxubW0va2ZlbmNlL2NvcmUuYzo2MTc6XFx0aWYgKCFhcmNoX2tmZW5jZV9pbml0X3Bvb2woKSlcXG5tbS9rZmVuY2UvY29yZS5jLTYxOC1cXHRcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX19rZmVuY2VfcG9vbDtcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmMtNzE5LVxcbm1tL2tmZW5jZS9jb3JlLmM6NzIwOnN0YXRpYyBib29sIF9faW5pdCBrZmVuY2VfaW5pdF9wb29sX2Vhcmx5KHZvaWQpXFxubW0va2ZlbmNlL2NvcmUuYy03MjEte1xcbi0tXFxubW0va2ZlbmNlL2NvcmUuYy03MjYtXFxubW0va2ZlbmNlL2NvcmUuYzo3Mjc6XFx0YWRkciA9IGtmZW5jZV9pbml0X3Bvb2woKTtcXG5tbS9rZmVuY2UvY29yZS5jLTcyOC1cXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmM9OTk0PXZvaWQgX19pbml0IGtmZW5jZV9pbml0KHZvaWQpXFxuLS1cXG5tbS9rZmVuY2UvY29yZS5jLTEwMDEtXFxubW0va2ZlbmNlL2NvcmUuYzoxMDAyOlxcdGlmICgha2ZlbmNlX2luaXRfcG9vbF9lYXJseSgpKSB7XFxubW0va2ZlbmNlL2NvcmUuYy0xMDAzLVxcdFxcdHByX2VycihcXFwiJXMgZmFpbGVkXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuLS1cXG5tbS9rZmVuY2UvY29yZS5jPTEwMTA9c3RhdGljIGludCBrZmVuY2VfaW5pdF9sYXRlKHZvaWQpXFxuLS1cXG5tbS9rZmVuY2UvY29yZS5jLTEwNTAtXFx0bWVtemVyb19leHBsaWNpdChrZmVuY2VfbWV0YWRhdGFfaW5pdCwgS0ZFTkNFX01FVEFEQVRBX1NJWkUpO1xcbm1tL2tmZW5jZS9jb3JlLmM6MTA1MTpcXHRhZGRyID0ga2ZlbmNlX2luaXRfcG9vbCgpO1xcbm1tL2tmZW5jZS9jb3JlLmMtMTA1Mi1cXHRpZiAoIWFkZHIpIHtcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmM9MTA5MD12b2lkIGtmZW5jZV9zaHV0ZG93bl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmMtMTA5NS1cXG5tbS9rZmVuY2UvY29yZS5jOjEwOTY6XFx0LyogUGFpcnMgd2l0aCByZWxlYXNlIGluIGtmZW5jZV9pbml0X3Bvb2woKS4gKi9cXG5tbS9rZmVuY2UvY29yZS5jLTEwOTctXFx0aWYgKCFzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZrZmVuY2VfbWV0YWRhdGEpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMDo1OS4zNzc0MjU5NThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3MTMwMjY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpZ2dpbmcgaW50byBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYF9fa2ZlbmNlX2ZyZWVgIHdvcmtzLiBJIGtub3cgdGhhdCdzIHBhcnQgb2YgdGhlIEtGRU5DRSAoS2VybmVsIEVsZWN0cmljIEZlbmNlKSBwcm9qZWN0LCBzbyB0aGUgbGlrZWx5IHN0YXJ0aW5nIHBvaW50IGlzIGluIHRoZSBjb3JlIEtGRU5DRSBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ2xsIG5hdmlnYXRlIHRvIHRoZSBgbW0va2ZlbmNlL2AgZGlyZWN0b3J5IGFuZCBmaW5kIGBjb3JlLmNgLiBUaGF0IHNob3VsZCBjb250YWluIHRoZSBkZWZpbml0aW9uIGZvciBgX19rZmVuY2VfZnJlZWAsIGFuZCBsaWtlbHkgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgSSBuZWVkLiBUaW1lIHRvIGRpdmUgaW4gYW5kIGdldCBhIGhhbmRsZSBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgbWVtb3J5IGRlYWxsb2NhdGlvbiBwYXRoIHdpdGhpbiBLRkVOQ0UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTI4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjE6MDIuNDQ4NzM0MjhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTUyNTU4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2tmZW5jZV9mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2tmZW5jZS9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2ZlbmNlL2NvcmUuYz0xMjM5PXZvaWQgKmtmZW5jZV9vYmplY3Rfc3RhcnQoY29uc3Qgdm9pZCAqYWRkcilcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmMtMTI0OS1cXG5tbS9rZmVuY2UvY29yZS5jOjEyNTA6dm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXFxubW0va2ZlbmNlL2NvcmUuYy0xMjUxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjE6MDIuNTgwMjc1ODM3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDQ1NDExOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIE1lbW9yeSBDb250cm9sIHdpdGggYG1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYmAqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IGNncm91cHMgYW5kIHNwZWNpZmljYWxseSBob3cgdGhlIGtlcm5lbCB0cmFja3MgbWVtb3J5IHVzYWdlIGZyb20gc2xhYiBhbGxvY2F0aW9ucy4gVG8gdW5kZXJzdGFuZCB0aGlzIHByb3Blcmx5LCB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgbWUgaXMgYG1tL21lbWNvbnRyb2wuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUga2VybmVsIGFzc29jaWF0ZXMgYSBzbGFiIG9iamVjdCB3aXRoIGl0cyBjb3JyZXNwb25kaW5nIG1lbW9yeSBjZ3JvdXAsIGFuZCBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYCBpcyB0aGUgb2J2aW91cyBmdW5jdGlvbiB0byBpbnZlc3RpZ2F0ZS4gSXQgc2VlbXMgbGlrZWx5IHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIHRoZSB0cmFja2luZyBwcm9jZXNzOyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IHRvIHNlZSBleGFjdGx5IGhvdyBpdCBtYXBzIGEgc2xhYiBvYmplY3QncyBhbGxvY2F0aW9uIGJhY2sgdG8gYSBzcGVjaWZpYyBjZ3JvdXAuIElzIGl0IHVzaW5nIHRoZSBzbGFiJ3MgbWV0YWRhdGE/IE9yIGlzIHRoZXJlIHNvbWUgb3RoZXIgbWFnaWMgaW52b2x2ZWQ/IEkgZXhwZWN0IHRvIGZpbmQgc29tZSBjcml0aWNhbCBwb2ludGVycyBvciBsb29rdXBzIGhlcmUuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGEgY29ybmVyc3RvbmUgZm9yIGFjY3VyYXRlIGFjY291bnRpbmcsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGlubmVyIHdvcmtpbmdzIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudC4gTGV0J3Mgc2VlIGhvdyBpdCB3b3JrcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTgyMTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMTowNi4wODQ4MjE5NjVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDYzMDgxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0yODU4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXG5tbS9tZW1jb250cm9sLmM6Mjg1OTpzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX29ial9zbGFiKHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICpwKVxcbm1tL21lbWNvbnRyb2wuYy0yODYwLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yODk4PXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fdmlydCh2b2lkICpwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI5MDYtXFx0aWYgKHNsYWIpXFxubW0vbWVtY29udHJvbC5jOjI5MDc6XFx0XFx0cmV0dXJuIG1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYihzbGFiLCBwKTtcXG5tbS9tZW1jb250cm9sLmMtMjkwOC1cXHRyZXR1cm4gZm9saW9fbWVtY2dfY2hlY2sodmlydF90b19mb2xpbyhwKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIxOjA2LjI5NTQ5MDUzMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjMzOTU5MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiB0aGUgS2VybmVsKipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYG1tL3NsYWJfY29tbW9uLmNgLiBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBzbGFiIGFsbG9jYXRvciBmdW5jdGlvbnMgcmVzaWRlLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIGhvdyBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYCBhbmQgYG5ld19rbWFsbG9jX2NhY2hlYCB3b3JrLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciByb2xlcyBpbiBpbml0aWFsaXppbmcgYW5kIG1hbmFnaW5nIHRoZXNlIGttZW0gY2FjaGVzIGJlY2F1c2UgdGhvc2UgYXJlIHRoZSBmb3VuZGF0aW9uIGZvciBlZmZpY2llbnQga2VybmVsIG1lbW9yeSBhbGxvY2F0aW9uLiBVbmRlcnN0YW5kaW5nIGhvdyB0aG9zZSBjYWNoZXMgYXJlIHNldHVwIGlzIGtleSB0byBpZGVudGlmeWluZyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIG1lbW9yeS1yZWxhdGVkIGJ1Z3MuIExldCdzIHNlZSBob3cgdGhleSBpbnRlcmFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2OTQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMTowOS45Mjk0ODE5NzZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDYwNjgyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2xhYl9jb21tb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbGFiX2NvbW1vbi5jPTI2Nz1fX2ttZW1fY2FjaGVfYWxpYXMoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IHNpemUsIHNsYWJfZmxhZ3NfdCBmbGFncyxcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMjkxLS8qKlxcbm1tL3NsYWJfY29tbW9uLmM6MjkyOiAqIF9fa21lbV9jYWNoZV9jcmVhdGVfYXJncyAtIENyZWF0ZSBhIGttZW0gY2FjaGUuXFxubW0vc2xhYl9jb21tb24uYy0yOTMtICogQG5hbWU6IEEgc3RyaW5nIHdoaWNoIGlzIHVzZWQgaW4gL3Byb2Mvc2xhYmluZm8gdG8gaWRlbnRpZnkgdGhpcyBjYWNoZS5cXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMzE3LSAqL1xcbm1tL3NsYWJfY29tbW9uLmM6MzE4OnN0cnVjdCBrbWVtX2NhY2hlICpfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MoY29uc3QgY2hhciAqbmFtZSxcXG5tbS9zbGFiX2NvbW1vbi5jLTMxOS1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG9iamVjdF9zaXplLFxcbi0tXFxubW0vc2xhYl9jb21tb24uYy00MDgtfVxcbm1tL3NsYWJfY29tbW9uLmM6NDA5OkVYUE9SVF9TWU1CT0woX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzKTtcXG5tbS9zbGFiX2NvbW1vbi5jLTQxMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjE6MTAuMDQ0MTA1MTNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1NTQyMDg4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IEV4YW1pbmluZyBhIGBrbWFsbG9jYCBDYWNoZSoqXG5cbkFscmlnaHQsIEknbSBsb29raW5nIGF0IGEgbmV3IGBrbWFsbG9jX2NhY2hlYCwgYW5kIGltbWVkaWF0ZWx5LCBteSBtaW5kIHN0YXJ0cyB0aWNraW5nLiBUaGUgaW1wbGljYXRpb25zIGFyZSBjbGVhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudC4gSXMgdGhpcyBmb3IgYSBzcGVjaWZpYyBkcml2ZXIsIGEgY29yZSBzdWJzeXN0ZW0sIG9yIGEgbW9yZSBnZW5lcmFsIHVzZSBjYXNlPyBUaGUgbmFtZSBpdHNlbGYgb2Z0ZW4gb2ZmZXJzIGNsdWVzLCBzbyBJJ2xsIGJlIGRpc3NlY3RpbmcgdGhhdCB2ZXJ5IGNhcmVmdWxseSB0byBpZGVudGlmeSBpdHMgcm9sZS4gSSBuZWVkIHRvIGJlIGFza2luZyBteXNlbGYgYWJvdXQgdGhlIGludGVuZGVkIHNpemUgY2xhc3MgYW5kIGl0cyByZWxhdGlvbiB0byBzbGFiIGNhY2hlcyBpbiB1c2UgZWxzZXdoZXJlLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybnMgYXJlIGFyb3VuZCBlZmZpY2llbmN5IGFuZCBmcmFnbWVudGF0aW9uLiBJcyB0aGlzIGNhY2hlIGFwcHJvcHJpYXRlbHkgc2l6ZWQgZm9yIGl0cyBleHBlY3RlZCB3b3JrbG9hZD8gSGFzIHRoZSBkZXNpZ24gY29uc2lkZXJlZCB0aGUgcG90ZW50aWFsIGZvciBpbnRlcm5hbCBmcmFnbWVudGF0aW9uIGJhc2VkIG9uIHRoZSBvYmplY3Qgc2l6ZT8gQXJlIHRoZXJlIHBvdGVudGlhbCBvdmVybGFwcyB3aXRoIGV4aXN0aW5nIGNhY2hlcywgYW5kIGNvdWxkIHdlIGNvbnNvbGlkYXRlIHRvIGltcHJvdmUgb3ZlcmFsbCBtZW1vcnkgdXRpbGl6YXRpb24/IFdoYXQgaXMgdGhlIGltcGFjdCBvbiBjYWNoZSBsaW5lIHV0aWxpemF0aW9uPyBEb2VzIHRoZSBjYWNoZSBtYWtlIHVzZSBvZiBOVU1BIG5vZGVzIGVmZmVjdGl2ZWx5PyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhhdCwgdG9vLlxuXG5JJ20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIHBhdHRlcm5zLiBJcyB0aGlzIGNhY2hlIGJlaW5nIGhlYXZpbHkgY29udGVuZGVkLCBvciBpcyBpdCByZWxhdGl2ZWx5IHN0YXRpYz8gRnJlcXVlbnQgYWxsb2NhdGlvbnMgYW5kIGRlYWxsb2NhdGlvbnMgY2FuIGxlYWQgdG8gcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIHNvIEkgaGF2ZSB0byBiZSB0aGlua2luZyBhYm91dCBob3cgaXQgaXMgYmVpbmcgdXNlZCwgaXRzIGxvY2sgY29udGVudGlvbiwgYW5kIHRoZSBpbXBhY3Qgb24gb3RoZXIga2VybmVsIG9wZXJhdGlvbnMuIEFyZSB0aGVyZSBhbnkgY29udGVudGlvbiBpc3N1ZXM/IEFyZSB0aGVyZSBtdXRleGVzIG9yIHNwaW5sb2NrcyBpbiBwbGFjZT8gSG93IGFyZSB0aGV5IGNvbmZpZ3VyZWQ/XG5cbkZpbmFsbHksIHdoYXQgYXJlIHRoZSBlcnJvci1oYW5kbGluZyBtZWNoYW5pc21zIGluIHBsYWNlPyBBIGBrbWFsbG9jYCBjYWNoZSBpcyBhIGNyaXRpY2FsIHJlc291cmNlLCBhbmQgSSdsbCB3YW50IHRvIHNlZSBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMsIG9yIGV2ZW4gaWYgdGhlIGNhY2hlIGJlY29tZXMgY29ycnVwdGVkLiBEb2VzIGl0IGhhdmUgYXBwcm9wcmlhdGUgY2hlY2tzIGFuZCBiYWxhbmNlcyB0byBwcmV2ZW50IGNhc2NhZGluZyBmYWlsdXJlcz8gQXJlIHRoZXJlIGluc3RydW1lbnRhdGlvbiBob29rcyBmb3IgZGVidWdnaW5nPyBUaGUgYW5zd2VycyB0byB0aGVzZSBxdWVzdGlvbnMgYXJlIGVzc2VudGlhbC4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGRlc2lnbiBpcyByb2J1c3Qgb3IgZnJhZ2lsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxNzMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIxOjE0LjI5OTUzMDY1NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQxNTU5MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ld19rbWFsbG9jX2NhY2hlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsYWJfY29tbW9uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2xhYl9jb21tb24uYz05NjI9c3RhdGljIHZvaWQgX19pbml0XFxubW0vc2xhYl9jb21tb24uYzo5NjM6bmV3X2ttYWxsb2NfY2FjaGUoaW50IGlkeCwgZW51bSBrbWFsbG9jX2NhY2hlX3R5cGUgdHlwZSlcXG5tbS9zbGFiX2NvbW1vbi5jLTk2NC17XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTEwMjY9dm9pZCBfX2luaXQgY3JlYXRlX2ttYWxsb2NfY2FjaGVzKHZvaWQpXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTEwMzYtXFx0XFx0aWYgKEtNQUxMT0NfTUlOX1NJWkUgXFx1MDAzYz0gMzIpXFxubW0vc2xhYl9jb21tb24uYzoxMDM3OlxcdFxcdFxcdG5ld19rbWFsbG9jX2NhY2hlKDEsIHR5cGUpO1xcbm1tL3NsYWJfY29tbW9uLmMtMTAzOC1cXHRcXHRpZiAoS01BTExPQ19NSU5fU0laRSBcXHUwMDNjPSA2NClcXG5tbS9zbGFiX2NvbW1vbi5jOjEwMzk6XFx0XFx0XFx0bmV3X2ttYWxsb2NfY2FjaGUoMiwgdHlwZSk7XFxubW0vc2xhYl9jb21tb24uYy0xMDQwLVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xMDQyLVxcdFxcdGZvciAoaSA9IEtNQUxMT0NfU0hJRlRfTE9XOyBpIFxcdTAwM2M9IEtNQUxMT0NfU0hJRlRfSElHSDsgaSsrKVxcbm1tL3NsYWJfY29tbW9uLmM6MTA0MzpcXHRcXHRcXHRuZXdfa21hbGxvY19jYWNoZShpLCB0eXBlKTtcXG5tbS9zbGFiX2NvbW1vbi5jLTEwNDQtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMToxNC41NDExMDA3MThaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgwMDcyMjA3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU2xhYiBBbGxvY2F0aW9uIEhvb2tzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyB0b3VjaGluZyBhIHdob2xlIGJ1bmNoIG9mIGNvcmUgc2xhYiBhbGxvY2F0aW9uIGhvb2tzOiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AsIGBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5YCwgYW5kIGEgZmV3IG90aGVycyBJIHJlY29nbml6ZSwgbmFtZWx5IGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rYCwgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2AsIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYCwgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgLCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AsIGFuZCBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYC4gU2VlbXMgcHJldHR5IGNlbnRyYWwgdG8gaG93IHRoZSBzbGFiIGFsbG9jYXRvciB3b3Jrcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoaXMgaW1wYWN0cyB0aGUgc3lzdGVtLlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgaGVyZSBuZWVkcyB0byBiZSBvbjogYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBgX19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9va2AsIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2tgLCBgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZWAsIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCwgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgLCBhbmQgYG1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYmAuIFRob3NlIGFyZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLlxuXG5XYWl0IGEgc2Vjb25kLCB0aGVyZSBhcmUgc29tZSBwcmVwcm9jZXNzb3IgY29uZGl0aW9uYWxzIEkgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudC4gYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2tgIGFuZCBgX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rYCBhcmUgb25seSBwcmVzZW50IGlmIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgZW5hYmxlZC4gQWxzbywgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgIGFuZCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AgYXJlIGRlcGVuZGVudCBvbiBgQ09ORklHX01FTUNHYC4gR290dGEga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBJJ20gYXNzZXNzaW5nIHRoZSBvdmVyYWxsIGltcGFjdC4gVG8gYmUgc3VyZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG1tL3NsdWIuY2AgZm9yIGBhbGxvY19zbGFiX29ial9leHRzYC4gSnVzdCB3YW50IHRvIGhhdmUgdGhlIGNvbnRleHQgZnVsbHkgaW4gbXkgaGVhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5MTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjE6MjAuMzQxODI3NzcxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjA3MzYyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2Nfc2xhYl9vYmpfZXh0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTIxMzQ9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy0yMTM4LVxcbm1tL3NsdWIuYzoyMTM5OmludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjE0MC1cXHRcXHRcXHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcXG4tLVxcbm1tL3NsdWIuYz0yMjI4PXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgYWxsb3dfc3BpbilcXG4tLVxcbm1tL3NsdWIuYy0yMjU5LSAqL1xcbm1tL3NsdWIuYzoyMjYwOnN0YXRpYyB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxcbm1tL3NsdWIuYy0yMjYxLXtcXG4tLVxcbm1tL3NsdWIuYz0yMzA3PXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmMtMjMxMC1cXG5tbS9zbHViLmM6MjMxMTpzdGF0aWMgaW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbm1tL3NsdWIuYy0yMzEyLVxcdFxcdFxcdCAgICAgICBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcXG4tLVxcbm1tL3NsdWIuYz0yMzE3PXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIGJvb2wgYWxsb3dfc3BpbilcXG4tLVxcbm1tL3NsdWIuYy0yMzIwLVxcbm1tL3NsdWIuYzoyMzIxOnN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbm1tL3NsdWIuYy0yMzIyLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYz0yMzMxPXByZXBhcmVfc2xhYl9vYmpfZXh0c19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4tLVxcbm1tL3NsdWIuYy0yMzM0LVxcdGlmICghc2xhYl9vYmpfZXh0cyhzbGFiKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3NsdWIuYzoyMzM1OlxcdCAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBhbGxvY19mbGFncykpIHtcXG5tbS9zbHViLmMtMjMzNi1cXHRcXHRwcl93YXJuX29uY2UoXFxcIiVzLCAlczogRmFpbGVkIHRvIGNyZWF0ZSBzbGFiIGV4dGVuc2lvbiB2ZWN0b3IhXFxcXG5cXFwiLFxcbi0tXFxubW0vc2x1Yi5jPTMzNzI9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGFjY291bnRfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgaW50IG9yZGVyLFxcbi0tXFxubW0vc2x1Yi5jLTMzNzgtXFx0XFx0XFx0IXNsYWJfb2JqX2V4dHMoc2xhYikpXFxubW0vc2x1Yi5jOjMzNzk6XFx0XFx0YWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBnZnAsXFxubW0vc2x1Yi5jLTMzODAtXFx0XFx0XFx0XFx0ICAgIGFsbG9jX2ZsYWdzIHwgU0xBQl9BTExPQ19ORVdfU0xBQik7XFxuLS1cXG5tbS9zbHViLmM9MzQwMT1zdGF0aWMgc3RydWN0IHNsYWIgKmFsbG9jYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTM0NTYtXFx0ICovXFxubW0vc2x1Yi5jOjM0NTc6XFx0YWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzLCBzbGFiKTtcXG5tbS9zbHViLmMtMzQ1OC1cXHRhY2NvdW50X3NsYWIoc2xhYiwgb29fb3JkZXIob28pLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMToyMS4wNjI1NzQzMTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5ODc2MzQwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkNoZWNraW5nIFNsYWIgT2JqZWN0IEV4dGVuc2lvbiBBdmFpbGFiaWxpdHkqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGludG8gYW55IG1vcmUgZGV0YWlsZWQgYW5hbHlzaXMsIEkgbmVlZCB0byBtYWtlIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzIGFjdHVhbGx5IGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gVGhpcyBlc3NlbnRpYWxseSBtZWFucyBJJ20gY2hlY2tpbmcgaWYgdGhlIGBDT05GSUdfU0xBQl9PQkpfRVhUYCBmZWF0dXJlIGlzIGVuYWJsZWQuIEl0J3MgYSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGUuIFdpdGhvdXQgdGhpcywgdGhlIGZ1bmN0aW9uIHdvbid0IGJlIGluIHRoZSBrZXJuZWwncyBzeW1ib2wgdGFibGUsIGFuZCBhbnkgYXR0ZW1wdCB0byB1c2UgaXQgd291bGQgYmUgZnV0aWxlLCBsZWFkaW5nIHRvIHVuZGVmaW5lZCBiZWhhdmlvciBvciBjb21waWxlLXRpbWUgZXJyb3JzLiBTbywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEknbGwgY29uZmlybSB0aGF0IHRoaXMgaXMgYSB2YWxpZCBwYXJ0IG9mIHRoZSBhdmFpbGFibGUgdG9vbHNldC4gVGhpcyBzYXZlcyBtZSB0aW1lIGluIHRoZSBsb25nIHJ1bi4gSSBkb24ndCB3YW50IHRvIGNoYXNlIGRvd24gYSByYWJiaXQgaG9sZSBvZiBkZWJ1Z2dpbmcgaWYgdGhlIHJvb3QgY2F1c2UgaXMgc2ltcGx5IGEgZGlzYWJsZWQgZmVhdHVyZS4gVGhpcyBhbHNvIGhlbHBzIGVuc3VyZSBhbnkgYXNzdW1wdGlvbnMgSSBtYWtlIGRvd24gdGhlIGxpbmUgcmVnYXJkaW5nIHRoaXMgZnVuY3Rpb25hbGl0eSBhcmUgdmFsaWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDkwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjE6MjUuNjYxMzQzNzk4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE4NDMzOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1NMQUJfT0JKX0VYVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTc2Nj1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X29yaWdfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0KVxcbi0tXFxubW0vc2x1Yi5jLTc4MS1cXG5tbS9zbHViLmM6NzgyOiNpZmRlZiBDT05GSUdfU0xBQl9PQkpfRVhUXFxubW0vc2x1Yi5jLTc4My1cXG4tLVxcbm1tL3NsdWIuYz04NzA9c3RhdGljIGlubGluZSBib29sIG9ial9leHRzX2luX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTg3Ni1cXG5tbS9zbHViLmM6ODc3OiNpZiBkZWZpbmVkKENPTkZJR19TTEFCX09CSl9FWFQpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHXzY0QklUKVxcbm1tL3NsdWIuYy04Nzgtc3RhdGljIHVuc2lnbmVkIGludCBvYmpfZXh0c19vZmZzZXRfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2x1Yi5jPTIwNDI9c3RhdGljIGlubGluZSB2b2lkIGRlY19zbGFic19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBpbnQgbm9kZSxcXG4tLVxcbm1tL3NsdWIuYy0yMDU3LVxcbm1tL3NsdWIuYzoyMDU4OiNpZmRlZiBDT05GSUdfU0xBQl9PQkpfRVhUXFxubW0vc2x1Yi5jLTIwNTktXFxuLS1cXG5tbS9zbHViLmM9MjI2MD1zdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy0yMzAwLVxcbm1tL3NsdWIuYzoyMzAxOiNlbHNlIC8qIENPTkZJR19TTEFCX09CSl9FWFQgKi9cXG5tbS9zbHViLmMtMjMwMi1cXG4tLVxcbm1tL3NsdWIuYz0yMzIxPXN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbi0tXFxubW0vc2x1Yi5jLTIzMjUtXFxubW0vc2x1Yi5jOjIzMjY6I2VuZGlmIC8qIENPTkZJR19TTEFCX09CSl9FWFQgKi9cXG5tbS9zbHViLmMtMjMyNy1cXG4tLVxcbm1tL3NsdWIuYz03ODYyPXN0YXRpYyBpbnQgY2FsY3VsYXRlX3NpemVzKHN0cnVjdCBrbWVtX2NhY2hlX2FyZ3MgKmFyZ3MsIHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2x1Yi5jLTc5NzYtXFx0YWxpZ25lZF9zaXplID0gQUxJR04oc2l6ZSwgcy1cXHUwMDNlYWxpZ24pO1xcbm1tL3NsdWIuYzo3OTc3OiNpZiBkZWZpbmVkKENPTkZJR19TTEFCX09CSl9FWFQpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHXzY0QklUKVxcbm1tL3NsdWIuYy03OTc4LVxcdGlmIChzbGFiX2FyZ3NfdW5tZXJnZWFibGUoYXJncywgcy1cXHUwMDNlZmxhZ3MpIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIxOjI1Ljg5MzIwMDE2NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTc0NDM3NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgRGVwZW5kZW5jaWVzIGZvciBTbGFib2JqX2V4dCBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdGFyZ2V0aW5nIG9wdGltaXphdGlvbiBvZiBgc3RydWN0IHNsYWJvYmpfZXh0YC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYENPTkZJR19TTEFCX09CSl9FWFRgIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQuIE5vIHN1cnByaXNlcyB0aGVyZS4gQnV0IG5vdyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gU2luY2UgdGhpcyBzdHJ1Y3R1cmUgaXMgYmVpbmcgb3B0aW1pemVkLCBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHRoZSBwbGFjZXMgaXQncyB1c2VkLiBSaWdodCwgaXQncyB1c2VkIGJ5IGJvdGggYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBhbmQgYENPTkZJR19NRU1DR2AuIFRob3NlIGFyZSB0aGUgdHdvIGtleSBjb25zdW1lcnMgb2YgdGhpcyBzdHJ1Y3R1cmUuIEdvdCBpdC4gTm93LCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGl0J3MgdGltZSB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQncyBwdWxsIHVwIGBtbS9zbGFiLmhgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHNsYWJvYmpfZXh0YCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBtZW1vcnkgbGF5b3V0IHRoYXQncyBiZWluZyB0d2Vha2VkLiBUaGF0J2xsIGdpdmUgbWUgdGhlIGZ1bGwgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzODcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMTozMC4wNjc2NDE1OTNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDI1ODYxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qgc2xhYm9ial9leHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2xhYi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsYWIuaD01NDE9c3RhdGljIGlubGluZSBib29sIG5lZWRfa21hbGxvY19ub19vYmpleHQodm9pZClcXG4tLVxcbm1tL3NsYWIuaC01NTYtICovXFxubW0vc2xhYi5oOjU1NzpzdHJ1Y3Qgc2xhYm9ial9leHQge1xcbm1tL3NsYWIuaC01NTgtXFx0LypcXG4tLVxcbm1tL3NsYWIuaD02MTQ9c3RhdGljIGlubGluZSBzaXplX3QgY2FjaGVfb2JqX2V4dF9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2xhYi5oLTYyMy1cXG5tbS9zbGFiLmg6NjI0OlxcdHJldHVybiBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHN6O1xcbm1tL3NsYWIuaC02MjUtfVxcbi0tXFxubW0vc2xhYi5oPTYyNz1zdGF0aWMgaW5saW5lIHNpemVfdCBzbGFiX29ial9leHRfc2l6ZShzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsYWIuaC02MzYtXFxubW0vc2xhYi5oOjYzNzpcXHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBzbGFib2JqX2V4dCkgKiBzejtcXG5tbS9zbGFiLmgtNjM4LX1cXG4tLVxcbm1tL3NsYWIuaD03MDY9c3RhdGljIGlubGluZSBib29sIG9ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsYWIuaC03MjItICovXFxubW0vc2xhYi5oOjcyMzpzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFib2JqX2V4dCAqXFxubW0vc2xhYi5oLTcyNC1zbGFiX29ial9leHQoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB1bnNpZ25lZCBsb25nIG9ial9leHRzLFxcbi0tXFxubW0vc2xhYi5oLTcyNi17XFxubW0vc2xhYi5oOjcyNzpcXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQ7XFxubW0vc2xhYi5oLTcyOC1cXHR1bnNpZ25lZCBpbnQgaW5kZXg7XFxuLS1cXG5tbS9zbGFiLmgtNzM5LVxcbm1tL3NsYWIuaDo3NDA6XFx0b2JqX2V4dCA9IChzdHJ1Y3Qgc2xhYm9ial9leHQgKikob2JqX2V4dHMgKyBpbmRleCAqIHN0cmlkZSk7XFxubW0vc2xhYi5oLTc0MS1cXG4tLVxcbm1tL3NsYWIuaC03NDUtI2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3NsYWIuaDo3NDY6c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqc2xhYl9vYmpfZXh0X29iamNnKHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dClcXG5tbS9zbGFiLmgtNzQ3LXtcXG4tLVxcbm1tL3NsYWIuaC03NTEtXFxubW0vc2xhYi5oOjc1MjpzdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9vYmpfZXh0X3NldF9vYmpjZyhzdHJ1Y3Qgc2xhYm9ial9leHQgKm9ial9leHQsXFxubW0vc2xhYi5oLTc1My1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4tLVxcbm1tL3NsYWIuaD03NjE9c3RhdGljIGlubGluZSB1bmlvbiBjb2RldGFnX3JlZiAqXFxubW0vc2xhYi5oOjc2MjpzbGFiX29ial9leHRfY29kZXRhZ19yZWYoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dClcXG5tbS9zbGFiLmgtNzYzLXtcXG4tLVxcbm1tL3NsYWIuaD03NzY9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbGFiLmgtNzgwLVxcbm1tL3NsYWIuaDo3ODE6c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYm9ial9leHQgKlxcbm1tL3NsYWIuaC03ODItc2xhYl9vYmpfZXh0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjE6MzAuMjExOTQ2MjE0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2Mjk1NjQ0OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNsYWIgQWxsb2NhdGlvbiBhbmQgVGFnZ2luZyBIb29rcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gc2xhYiBhbGxvY2F0aW9uLCBvYmplY3QgZXh0ZW5zaW9ucywgYW5kIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gSSBzZWUgYSBjb25zdGVsbGF0aW9uIG9mIHN5bWJvbHMgdGhhdCBzZWVtIGNlbnRyYWwgdG8gdGhpczogYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseWAsIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rYCwgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2AsIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYCwgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgLCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AsIGFuZCBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYC4gSXQncyBhIGJpdCBvZiBhIGRhbmNlLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHN0ZXBzLlxuXG5XYWl0IGEgc2Vjb25kLCB3YXNuJ3QgYGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHlgIGRlY2xhcmVkIGFzIGBzdGF0aWMgaW5saW5lYCBvciBgc3RhdGljIHZvaWRgPyBUaGF0J3MgaW50ZXJlc3RpbmcsIGFzIHRoaXMgd291bGQgbWFrZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGhvb2sgZGVwZW5kZW50IG9uIGlubGluaW5nL2NvbXBpbGUtdGltZSBvcHRpbWl6YXRpb24uIFRoYXQgaW1wbGllcyBpdCBtaWdodCBiZSB1c2VkIHRvIG9wdGltaXplIHNvbWV0aGluZyB0aGF0J3Mgb3RoZXJ3aXNlIGRvbmUgbGF0ZXIuIE9rYXksIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIGVhcmx5IHN0YWdlIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGF0IGFjdHVhbGx5IGRvZXMgd2l0aGluIGBtbS9zbHViLmNgLiBJIHdpbGwgZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciBhIGJldHRlciB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQ1NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMTozNC44NDE1MTYzMTlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODQ2MzgwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9MjIyOD1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuLS1cXG5tbS9zbHViLmMtMjI1OS0gKi9cXG5tbS9zbHViLmM6MjI2MDpzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG5tbS9zbHViLmMtMjI2MS17XFxuLS1cXG5tbS9zbHViLmM9MjMxNz1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuLS1cXG5tbS9zbHViLmMtMjMyMC1cXG5tbS9zbHViLmM6MjMyMTpzdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjMyMi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmM9MzQwMT1zdGF0aWMgc3RydWN0IHNsYWIgKmFsbG9jYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTM0NTYtXFx0ICovXFxubW0vc2x1Yi5jOjM0NTc6XFx0YWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzLCBzbGFiKTtcXG5tbS9zbHViLmMtMzQ1OC1cXHRhY2NvdW50X3NsYWIoc2xhYiwgb29fb3JkZXIob28pLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMTozNS4wNjAwMDA1OTFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY3NjI0MTY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gdGhpcyBpcyBzdGF0aWMsIG5vdCBjaGFuZ2luZy4gTXkgZm9jdXMgc3ltYm9scyBoZXJlIGFyZSBhbGwgcmVsYXRlZCB0byBzbGFiIG9iamVjdCBleHRlbnNpb25zOiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AsIGBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5YCwgYW5kIHRoZSB2YXJpb3VzIGhvb2tpbmcgZnVuY3Rpb25zIChgX19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9va2AsIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2tgLCBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AsIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYCksIGFsb25nIHdpdGggYG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VgIGFuZCBgbWVtX2Nncm91cF9mcm9tX29ial9zbGFiYC4gVGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gYW5kLCBtb3JlIHNwZWNpZmljYWxseSwgaG93IHRoZXNlIGV4dGVuc2lvbnMgaW50ZXJhY3Qgd2l0aCBtZW1vcnkgY29udHJvbCBncm91cHMgKG1lbWNncykgYW5kL29yIG1lbW9yeSBwcm9maWxpbmcuXG5cblRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGFyZSBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIGFuZCBgQ09ORklHX01FTUNHYCBwcmVyZXF1aXNpdGVzIGhlcmU/IFllcywgaXQgc2VlbXMgdGhlIHBhdGNoIGlzIG9wdGltaXppbmcgdGhlIG1lbW9yeSBsYXlvdXQgb2YgYHN0cnVjdCBzbGFib2JqX2V4dGAgd2hpY2ggaXMgdXNlZCB3aGVuICplaXRoZXIqIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2Agb3IgYENPTkZJR19NRU1DR2AgaXMgc2V0LiBTbywgZm9yIHByb3BlciBjb25maWd1cmF0aW9uLCBJJ2xsIG5lZWQgdG8gaW5jbHVkZSBgTUVNX0FMTE9DX1BST0ZJTElOR2AgYW5kIGBNRU1DR2AgaW4gYEVuYWJsZUNvbmZpZ3NgLlxuXG5Ib2xkIG9uLCBJIHJlY2FsbCBgTUVNQ0dgIGlzIGZyZXF1ZW50bHkgZW5hYmxlZCBieSBkZWZhdWx0LiBIb3dldmVyLCBpdCB3b3VsZG4ndCBodXJ0IHRvIGJlIGV4cGxpY2l0IGFuZCBsaXN0IGl0LiBgTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgZGVmaW5pdGVseSBhIGRlZGljYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nLCBhbmQgb25lIHRoYXQgaXMgcHJvYmFibHkgbGVzcyBvZnRlbiBlbmFibGVkIGJ5IGRlZmF1bHQuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYEtjb25maWdgIGZpbGUgZm9yIGBNRU1fQUxMT0NfUFJPRklMSU5HYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYW5kIGFueSByZWxldmFudCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MjcxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIxOjQwLjczNjI0NjUwNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEzMjg2MTM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcuZGVidWc9MTA0Nz1jb25maWcgQ09ERV9UQUdHSU5HXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDUwLVxcbmxpYi9LY29uZmlnLmRlYnVnOjEwNTE6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDUyLVxcdGJvb2wgXFxcIkVuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmdcXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDY0LVxcbmxpYi9LY29uZmlnLmRlYnVnOjEwNjU6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXFxubGliL0tjb25maWcuZGVidWctMTA2Ni1cXHRib29sIFxcXCJFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDY5LVxcbmxpYi9LY29uZmlnLmRlYnVnOjEwNzA6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDcxLVxcdGJvb2wgXFxcIk1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGVyIGRlYnVnZ2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjE6NDYuODY5MTE5MzczWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTU4NTQ5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgdGhpbmtpbmcgaXM6XG5cbioqTWVtb3J5IEFsbG9jYXRpb24gUHJvZmlsaW5nIGFuZCBDb250cm9sIEdyb3VwIEludGVncmF0aW9uKipcblxuUmlnaHQsIHNvIHRvIGdldCBhIHJlYWxseSBnb29kIGhhbmRsZSBvbiB0aGlzLCBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBmbGlwIG9uIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBhbmQgaXRzIGRlZmF1bHQtZW5hYmxlZCBjb3VudGVycGFydCBgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRgLiBUaGF0J3MgZ29pbmcgdG8gZ2l2ZSB1cyBhIGdyYW51bGFyIHZpZXcgaW50byB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBvcHRpbWl6YXRpb24uIFdlICpuZWVkKiB0aGF0IGRhdGEuXG5cbkFuZCB3aGlsZSB3ZSdyZSBhdCBpdCwgYE1FTUNHYCBoYXMgZ290IHRvIGJlIGluIHRoZSBtaXguIENvbnRyb2wgZ3JvdXBzIGFyZSBpbmRpc3BlbnNhYmxlIGZvciBpc29sYXRpbmcgYW5kIG1hbmFnaW5nIHJlc291cmNlIGNvbnN1bXB0aW9uLCBhbmQgbWVtb3J5IGlzIG9idmlvdXNseSBhIGJpZyBwYXJ0IG9mIHRoYXQgZXF1YXRpb24uIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBlZmZlY3RpdmVseSBpc29sYXRlIHRoZSBwcm9jZXNzZXMgYW5kIHVuZGVyc3RhbmQgdGhlaXIgYmVoYXZpb3IuXG5cbkZpbmFsbHksIGp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2s6IEknbGwgYWxzbyB3YW50IHRvIGNvbmZpcm0gdGhhdCBgU0xBQl9PQkpfRVhUYCBpcyBleHBvc2VkIGFzIGEgY29uZmlndXJhYmxlIG9wdGlvbiB0byB0aGUgZW5kLXVzZXJzLiBTb21ldGltZXMgdGhlc2UgXCJpbnRlcm5hbFwiIGZsYWdzIGFyZSBoaWRkZW4gYW5kIGl0IGlzIHVzZWZ1bCB0byBrbm93IGlmIHdlIGNhbiBjb250cm9sIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTE0MSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIxOjUwLjM2NDk3OTE1NVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI1NjI5NjE3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0xBQl9PQkpfRVhUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTAzMz1jb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXFxuLS1cXG5pbml0L0tjb25maWctMTA0MC1cXG5pbml0L0tjb25maWc6MTA0MTpjb25maWcgU0xBQl9PQkpfRVhUXFxuaW5pdC9LY29uZmlnLTEwNDItXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMTo1NC42MjEzMTA4NFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDY5NzYwNTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGBTTEFCX09CSl9FWFRgIEJvb2xlYW4qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBTTEFCX09CSl9FWFRgIGZsYWcgYW5kIGl0J3MgZmxhZ2dlZCBhcyBhIGhpZGRlbiBib29sZWFuLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIE15IGludHVpdGlvbiB0ZWxscyBtZSBpdCdzIHByb2JhYmx5IHRyaWdnZXJlZCBieSBlaXRoZXIgYE1FTUNHYCBvciBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIFRob3NlIHR3byBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBpbmZsdWVuY2luZyBsb3ctbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQgYmVoYXZpb3JzLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IHNlbGVjdGlvbiBjcml0ZXJpYSBmb3IgdGhpcyBmbGFnLiBLbm93aW5nIHdoYXQgZW5hYmxlcyBgU0xBQl9PQkpfRVhUYCBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uIFRpbWUgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1MjAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMTo1OS42OTEwNzcxMDdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwODYxOTkzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFNMQUJfT0JKX0VYVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNzM9Y29uZmlnIE1FTUNHXFxuLS1cXG5pbml0L0tjb25maWctMTA3Ni1cXHRzZWxlY3QgRVZFTlRGRFxcbmluaXQvS2NvbmZpZzoxMDc3OlxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG5pbml0L0tjb25maWctMTA3OC1cXHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnPTEwNTE9Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTEwNTgtXFx0c2VsZWN0IFBBR0VfRVhURU5TSU9OXFxubGliL0tjb25maWcuZGVidWc6MTA1OTpcXHRzZWxlY3QgU0xBQl9PQkpfRVhUXFxubGliL0tjb25maWcuZGVidWctMTA2MC1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIyOjA0Ljc3NzI5MTgxN1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDk3MjU5MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBiYXNlZCBvbiB0aGUga2VybmVsIGNvZGUsIGVuYWJsaW5nIGJvdGggYE1FTUNHYCBhbmQgYE1FTV9BTExPQ19QUk9GSUxJTkdgIGF1dG9tYXRpY2FsbHkgYnJpbmdzIGluIGBTTEFCX09CSl9FWFRgLiBUaGVyZWZvcmUsIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBkZWZpbml0ZWx5IG5lZWRzIHRvIGluY2x1ZGUgYm90aCBgTUVNQ0dgIGFuZCBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIFRoYXQncyBzdHJhaWdodGZvcndhcmQuXG5cbk5vdywgSSBuZWVkIHRvIHBpY2sgYSBnb29kIGZvY3VzIHN5bWJvbC4gSSB3YXMgaW5pdGlhbGx5IHRoaW5raW5nIGFib3V0IGBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5YCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgcmlnaHQgY2hvaWNlLCBzbyBsZXQncyBkaWcgYSBiaXQgZGVlcGVyLiBJdCdzIHN0YXRpYywgd2hpY2ggaXMgYSBjb25jZXJuLCBidXQgc3l6a2FsbGVyICptaWdodCogYmUgYWJsZSB0byBmdXp6IGl0IGlmIGl0IGlzbid0IGlubGluZWQsIHNvIGl0IG1heSBzdGlsbCBiZSB2aWFibGUuIFRoYW5rZnVsbHksIGBhbGxvY19zbGFiX29ial9leHRzYCBpdHNlbGYgaXMgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IGl0IGlzbid0IHN0YXRpYywgd2hpY2ggbG9va3MgYmV0dGVyLiBFeGNlbGxlbnQuIFRoZW4gSSBzZWUgdGhhdCBgX19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9va2AgYW5kIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2tgIGFyZSBhbHNvIG5vbi1zdGF0aWMuIEdvb2Qgc2lnbnMgZm9yIGZ1enppbmcgdGFyZ2V0cyEgRnVydGhlciwgYG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VgLCBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AsIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYCwgYW5kIGBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWJgIGFyZSBhbGwgbm9uLXN0YXRpYyBhcyB3ZWxsLiBUaGVzZSBhcmUgYWxsIGdvb2QgY2FuZGlkYXRlcy5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzIGluZGVlZCBleHBvcnRlZC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTg4OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMjowOS44NzQ1NTU5NDNaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NjgxNTMwNDYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmFsbG9jX3NsYWJfb2JqX2V4dHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMjoxNS41NDI3MjQ5NDlaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg5NjU0MDYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNMVUIgQWxsb2NhdG9yKipcblxuT2theSwgc28gSSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGV4cG9ydGluZyB0aGlzIHRoaW5nOyBpdCBqdXN0IG5lZWRzIHRvIGJlIG5vbi1zdGF0aWMuIFRoZSBrZXkgaGVyZSBpcyB0byBmaWd1cmUgb3V0IHdoZXJlIGl0J3MgYmVpbmcgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uIExldCBtZSBzZWUuLi4gSSByZWNhbGwgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGJlaW5nIGNhbGxlZCBmcm9tIGJvdGggYG1tL3NsdWIuY2Ag4oCTIHRoYXQncyB0aGUgU0xVQiBhbGxvY2F0b3IgaXRzZWxmLCBvYnZpb3VzbHkg4oCTIGFuZCBhbHNvIGZyb20gYG1tL21lbWNvbnRyb2wuY2AuIFRoYXQncyBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gd2l0aCBtZW1vcnkgY29udHJvbCBncm91cHMuIE5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYG1tL3NsYWIuaGAuIFRoYXQncyB3aGVyZSB0aGUgcmVsZXZhbnQgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHNob3VsZCBiZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyZmFjZXMgYW5kIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY1MDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMjoyMC40MzkyNzA0OTVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMzE5Nzg0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbGFiLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2xhYi5oPTc2Mj1zbGFiX29ial9leHRfY29kZXRhZ19yZWYoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dClcXG4tLVxcbm1tL3NsYWIuaC03NzAtXFxubW0vc2xhYi5oOjc3MTppbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2xhYi5oLTc3Mi1cXHRcXHRcXHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIyOjIxLjA3MjQ3ODg3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNTQ5NTAxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtGRU5DRSBhbmQgU0xVQiBTeW1ib2xzKipcblxuT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IG5vdCBhIHN0YXRpYyBzaXR1YXRpb24sIGdvb2QuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBoZXJlLiBMZXQncyBkaWcgaW50byB0aGUgY29kZSBhbmQgbG9vayBhdCBga2ZlbmNlX2luaXRfcG9vbGAgYW5kIGBfX2tmZW5jZV9mcmVlYCBzcGVjaWZpY2FsbHkuIEFscmlnaHQsIGBrZmVuY2VfaW5pdF9wb29sYCBpcyBkZWZpbmVkIGFzIHN0YXRpYywgdGhhdCBtYWtlcyBzZW5zZS4gQnV0IGBfX2tmZW5jZV9mcmVlYC4uLiB0aGF0J3Mgbm9uLXN0YXRpYy4gQmluZ28hIFdlIGNhbiBhZGQgYF9fa2ZlbmNlX2ZyZWVgIHRvIGBGb2N1c1N5bWJvbHNgLCB0aGF0J3Mgd2hhdCB3ZSB3YW50LlxuXG5Ob3csIGxldCdzIHRha2UgYSBsb29rIGF0IHdoYXQgZWxzZSBpcyBpbiBgRm9jdXNTeW1ib2xzYCBjdXJyZW50bHkuIExldCdzIHNlZS4uLiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AsIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rYCwgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2AsIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYCwgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgLCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AsIGBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWJgLCBhbmQgbm93LCBgX19rZmVuY2VfZnJlZWAuXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gYXJlIHRob3NlIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rYCBhbmQgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va2AgZnVuY3Rpb25zIGFsc28gc3RhdGljPyBZZXMsIHRoZXkgYXJlISBJJ20gbG9va2luZyByaWdodCBhdCBpdCBpbiBgbW0vc2x1Yi5jYCBub3csIGFuZCB0aGV5IGFyZSBzdGF0aWMgbm9pbmxpbmUgZnVuY3Rpb25zLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBwcm9jZXNzIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODgyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIyOjI2LjEyNzQzNTQ1M1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NzcwNTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsdWIuYz0yMzQ2PXN0YXRpYyBub2lubGluZSB2b2lkXFxubW0vc2x1Yi5jOjIzNDc6X19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCBnZnBfdCBmbGFncyxcXG5tbS9zbHViLmMtMjM0OC1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjM5MD1hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0yMzkzLVxcdGlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSlcXG5tbS9zbHViLmM6MjM5NDpcXHRcXHRfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rKHMsIG9iamVjdCwgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcXG5tbS9zbHViLmMtMjM5NS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIyOjI2LjMxNDIxNjE2OFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzIxODczODcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFyZ2V0cyB3ZSdyZSBsb29raW5nIGF0IGFyZSBtYXJrZWQgYXMgYHN0YXRpYyBub2lubGluZWAuIEZpbmUsIHRoYXQncyBub3QgYSBzaG93c3RvcHBlcjsgU3l6a2FsbGVyIGNhbiBzdGlsbCBwb3RlbnRpYWxseSBnZXQgYXQgdGhlbS4gTm8gcHJvYmxlbSB0aGVyZS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgbGlrZWx5IGFyZWFzIG9mIGludGVyZXN0LiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIG91dCB0aGUgcG90ZW50aWFsIGhvb2tzOiBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AgYW5kIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSdtIG1vc3QgaW50ZXJlc3RlZCBpbiBhdCB0aGlzIGp1bmN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzY3MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIyOjI5LjYzNjA5NDY1WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI3Mjc2NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTM1Mjk9c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2Z1bGxfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTM3LVxcbm1tL21lbWNvbnRyb2wuYzozNTM4OmJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxubW0vbWVtY29udHJvbC5jLTM1MzktXFx0XFx0XFx0XFx0ICBnZnBfdCBmbGFncywgdW5zaWduZWQgaW50IHNsYWJfYWxsb2NfZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIyOjI5Ljc0ODg4NTQzNFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODEyMTg1NzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgRHluYW1pYyBNZW1vcnkgQWxsb2NhdGlvbioqXG5cbk15IG1pbmQgaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhlIGluaGVyZW50IGR5bmFtaXNtIG9mIHRoZSB0b3BpYy4gVGhlIHZlcnkgbmF0dXJlIG9mIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gcHJvY2VzcyBzdWdnZXN0cyB0aGF0IGl0J3MgKm5vdCogYSBzdGF0aWMgcHJvYmxlbS4gSXTigJlzIGZsdWlkLCBjb25zdGFudGx5IGNoYW5naW5nLCBhbmQgdGhhdCdzIHRoZSBjb3JlIGNoYWxsZW5nZS4gVGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFyZSBzaWduaWZpY2FudCBhbmQgbXVzdCBiZSBrZXB0IGluIG1pbmQuXG5cblRvIHRhY2tsZSB0aGlzLCBhIG5hdHVyYWwgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWJgIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgbWVtb3J5IGNncm91cCBpbnRlcmFjdHMgd2l0aCBvYmplY3Qgc2xhYnMgaXMgcGFyYW1vdW50IGhlcmUuIFRoaXMgZnVuY3Rpb24gbGlrZWx5IHByb3ZpZGVzIGEgY3J1Y2lhbCBlbnRyeSBwb2ludCB0byBkaXNzZWN0aW5nIHRoZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBtZWNoYW5pY3MgYXQgYSBncmFudWxhciBsZXZlbC4gRGVsdmluZyBpbnRvIGl0cyBsb2dpYyB3aWxsIHJldmVhbCBrZXkgaW5zaWdodHMgaW50byBob3cgbWVtb3J5IGlzIGJlaW5nIG1hbmFnZWQgYW5kIHBvdGVudGlhbGx5IHdoZXJlIGluZWZmaWNpZW5jaWVzIG9yIGxlYWtzIG1pZ2h0IGJlIGx1cmtpbmcgd2l0aGluIHRoZSBzeXN0ZW0uIEl0J3MgYSBmdW5kYW1lbnRhbCBwaWVjZSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwdXp6bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDIxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjI6MzQuNTYxMDc1NDE2WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODgwOTUxMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9mcm9tX29ial9zbGFiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9Mjg1OD1zdGF0aWMgX19hbHdheXNfaW5saW5lXFxubW0vbWVtY29udHJvbC5jOjI4NTk6c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9vYmpfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqcClcXG5tbS9tZW1jb250cm9sLmMtMjg2MC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mjg5OD1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ZpcnQodm9pZCAqcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yOTA2LVxcdGlmIChzbGFiKVxcbm1tL21lbWNvbnRyb2wuYzoyOTA3OlxcdFxcdHJldHVybiBtZW1fY2dyb3VwX2Zyb21fb2JqX3NsYWIoc2xhYiwgcCk7XFxubW0vbWVtY29udHJvbC5jLTI5MDgtXFx0cmV0dXJuIGZvbGlvX21lbWNnX2NoZWNrKHZpcnRfdG9fZm9saW8ocCkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMjozNC43NDkxODc2NVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQ2ODAwMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipFeGNsdXNpb25hcnkgUmVhc29uaW5nIGluIEZ1enppbmcgQ29udGV4dCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyBzb21ldGhpbmcgbWFya2VkIGFzIGBzdGF0aWMgX19hbHdheXNfaW5saW5lYC4gVGhhdCBpbnN0YW50bHkgdGhyb3dzIHVwIGEgcmVkIGZsYWcgaW4gdGhlIGNvbnRleHQgb2YgZnV6emluZywgcGFydGljdWxhcmx5IHdpdGggU3l6a2FsbGVyLiBCZWNhdXNlIGl0J3MgaW5saW5lLCBpdCdzIGJha2VkIGludG8gb3RoZXIgY29kZSBkdXJpbmcgY29tcGlsYXRpb24gYW5kIGRvZXNuJ3QgZXhpc3QgYXMgYSBzdGFuZGFsb25lIGZ1bmN0aW9uIHRoYXQgU3l6a2FsbGVyIGNhbiBkaXJlY3RseSB0YXJnZXQuIEF0dGVtcHRpbmcgdG8gZG8gc28gd291bGQgYmUgZnV0aWxlLiBUaGVyZWZvcmUsIG15IGltbWVkaWF0ZSByZWFjdGlvbiBpcywgXCJXZSBuZWVkIHRvIGV4Y2x1ZGUgdGhpcyBmcm9tIGZ1enppbmcuXCIgSXQncyBhIGRlYWQgZW5kIGFzIGEgZnV6emluZyB0YXJnZXQsIGxpa2VseSBqdXN0IGlubGluZWQgYXMgcGFydCBvZiBhIGxhcmdlciwgbW9yZSBpbnRlcmVzdGluZyBmdW5jdGlvbi4gTm8gcG9pbnQgd2FzdGluZyB0aW1lIG9uIGl0LlxuXG5Ob3csIGxldCdzIHBpdm90LiBTaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIG9mZiB0aGUgdGFibGUsIEkgbmVlZCB0byBmaW5kIGl0cyBjYWxsZXJzLiBXaGljaCBtZWFucyBJIG5lZWQgdG8gZXhwbG9yZSB3aGF0IGZ1bmN0aW9uIHRoYXQgbWFrZXMgc2Vuc2UgdG8gc3R1ZHkgaW4gdGhlIHBsYWNlIG9mIHRoaXMgZnVuY3Rpb24uIExldCdzIHNlZS4uLiBJJ2xsIGNoZWNrIGBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlYC4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBuZXh0IHN0ZXAsIGdpdmVuIHRoZSBjb250ZXh0LiBJdCBsaWtlbHkgcmVwcmVzZW50cyBhIHBvaW50IHdoZXJlIG1lbW9yeSBhY2NvdW50aW5nLCByZWxhdGVkIHRvIHNsYWIgY2FjaGVzIGFuZCBtZW1vcnkgY29udHJvbCBncm91cHMsIGlzIGhhbmRsZWQuIEFuZCBpZiB0aGlzIGlubGluZWQgZnVuY3Rpb24gaXMgcGFydCBvZiBzb21lIGNydWNpYWwgYWNjb3VudGluZyBwcm9jZXNzLCB0aGVuIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGlzIGxpa2VseSB0byBiZSBhbiBpbXBvcnRhbnQgZW50cnkgcG9pbnQgb3IgcG9pbnQgb2YgZmFpbHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0NjcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMjozOC43OTU5OTM5NloiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzNDg4MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNnX3NsYWJfcG9zdF9jaGFyZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsdWIuYz0yNTIzPXN0YXRpYyBfX2Zhc3RwYXRoX2lubGluZVxcbm1tL3NsdWIuYzoyNTI0OmJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcXG5tbS9zbHViLmMtMjUyNS17XFxuLS1cXG5tbS9zbHViLmM9MjU5MT1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbi0tXFxubW0vc2x1Yi5jLTI1OTUtXFxubW0vc2x1Yi5jOjI1OTY6c3RhdGljIGlubGluZSBib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXFxubW0vc2x1Yi5jLTI1OTcte1xcbi0tXFxubW0vc2x1Yi5jPTUwMDU9Ym9vbCBrbWVtX2NhY2hlX2NoYXJnZSh2b2lkICpvYmpwLCBnZnBfdCBnZnBmbGFncylcXG4tLVxcbm1tL3NsdWIuYy01MDA5LVxcbm1tL3NsdWIuYzo1MDEwOlxcdHJldHVybiBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKG9ianAsIGdmcGZsYWdzKTtcXG5tbS9zbHViLmMtNTAxMS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIyOjM4Ljk5OTQ5NTY2N1oiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc1NTM1MjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqRmlsdGVyaW5nIEtlcm5lbCBDb2RlOiBBIFF1aWNrIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gRmlyc3Qgb2ZmLCB0aGF0IGBzdGF0aWMgX19mYXN0cGF0aF9pbmxpbmVgIGRpcmVjdGl2ZSBpcyBhIGNsZWFyIGV4Y2x1c2lvbi4gTm8gbmVlZCB0byBzcGVuZCBhbnkgdGltZSBvbiB0aGF0LiBJdCdzIGVzc2VudGlhbGx5IGFuIGludGVybmFsLCBvcHRpbWl6ZWQgaGVscGVyIGZ1bmN0aW9uLiBNb3Zpbmcgb24uLi5cblxuTm93LCBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYC4uLiBUaGF0J3MgYSBsaXR0bGUgbW9yZSBpbnRlcmVzdGluZywgaXNuJ3QgaXQ/IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpZiBpdCdzIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IHRhc2suIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaXQgYWN0dWFsbHkgKmRvZXMqIHdpdGhpbiB0aGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZSBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgaXQncyBzb21ldGhpbmcgdGhhdCBuZWVkcyB0byBiZSBjb25zaWRlcmVkLCBvciBpZiBpdCdzIHNvbWV0aGluZyBJIGNhbiBzYWZlbHkgZXhjbHVkZSBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0LiBNb3JlIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkIHRvIG1ha2UgYSBkZWNpc2lvbiBhYm91dCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTEwNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIyOjQyLjI3NTAzNTQ0OFoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MDQ4ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fa21lbV9jYWNoZV9jcmVhdGVfYXJnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbGFiX2NvbW1vbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsYWJfY29tbW9uLmM9MjY3PV9fa21lbV9jYWNoZV9hbGlhcyhjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgc2l6ZSwgc2xhYl9mbGFnc190IGZsYWdzLFxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0yOTEtLyoqXFxubW0vc2xhYl9jb21tb24uYzoyOTI6ICogX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzIC0gQ3JlYXRlIGEga21lbSBjYWNoZS5cXG5tbS9zbGFiX2NvbW1vbi5jLTI5My0gKiBAbmFtZTogQSBzdHJpbmcgd2hpY2ggaXMgdXNlZCBpbiAvcHJvYy9zbGFiaW5mbyB0byBpZGVudGlmeSB0aGlzIGNhY2hlLlxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0zMTctICovXFxubW0vc2xhYl9jb21tb24uYzozMTg6c3RydWN0IGttZW1fY2FjaGUgKl9fa21lbV9jYWNoZV9jcmVhdGVfYXJncyhjb25zdCBjaGFyICpuYW1lLFxcbm1tL3NsYWJfY29tbW9uLmMtMzE5LVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgb2JqZWN0X3NpemUsXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTQwOC19XFxubW0vc2xhYl9jb21tb24uYzo0MDk6RVhQT1JUX1NZTUJPTChfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MpO1xcbm1tL3NsYWJfY29tbW9uLmMtNDEwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMjo0Mi40NjIwOTczMTJaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2MjczODU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIHRoZXNlIGFyZSBteSB0aG91Z2h0cywga2VlcGluZyBpbiBtaW5kIEknbSBhbiBleHBlcnQgaW4gbXkgZmllbGQ6XG5cbioqSW50ZXJuYWwgQ29kZSBSZXZpZXc6IEluY2x1c2lvbiBcdTAwMjYgUmVmaW5lbWVudCoqXG5cbkFscmlnaHQsIHRoZSBpbml0aWFsIHJldmlldyBpbmRpY2F0ZXMgdGhpcyBjb2RlIGNhbiBiZSBleHBvcnRlZC4gR29vZCwgdGhhdCdzIGEgcG9zaXRpdmUgc3RhcnQuIFdlIGNhbiBpbmNsdWRlIGl0IGluIHRoZSBicm9hZGVyIHByb2plY3QsIHdoaWNoIGlzIHdoYXQgd2UgbmVlZC5cblxuQnV0IGhvbGQgb24sIGJlZm9yZSB3ZSBnaXZlIHRoaXMgdGhlIGdyZWVuIGxpZ2h0LCBJIG5lZWQgdG8gem9vbSBpbi4gVGhlIHVzZSBvZiBgbmV3X2ttYWxsb2NfY2FjaGVgIGhhcyBtZSBzbGlnaHRseSBjb25jZXJuZWQuIElzIHRoaXMgdGhlIHJpZ2h0IGltcGxlbWVudGF0aW9uPyBBbSBJIGdvaW5nIHRvIGJlIGRlYWxpbmcgd2l0aCB0aGUgY29tcGxleGl0eSBvZiBhIGN1c3RvbSBjYWNoZT8gT3IgaXMgaXQgb2theSBiZWNhdXNlIGl0J3MgbWFuYWdlZCBjb3JyZWN0bHkgZWxzZXdoZXJlPyBUaGUgdXNlIGNhc2UgaXNuJ3QgY2xlYXIgZnJvbSBqdXN0IHRoaXMgc25pcHBldC4gSXQgY291bGQgYmUgZmluZS4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byBpdHMgaW1wbGVtZW50YXRpb24gYW5kIGludGVncmF0aW9uIHBvaW50cy4gVGhpcyBuZWVkcyBhIGNsb3NlciBsb29rIGJlZm9yZSBJIHNpZ24gb2ZmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTYwMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIyOjQ1LjkyNDg0MDYxN1oiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNTk5MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ld19rbWFsbG9jX2NhY2hlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsYWJfY29tbW9uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2xhYl9jb21tb24uYz05NjI9c3RhdGljIHZvaWQgX19pbml0XFxubW0vc2xhYl9jb21tb24uYzo5NjM6bmV3X2ttYWxsb2NfY2FjaGUoaW50IGlkeCwgZW51bSBrbWFsbG9jX2NhY2hlX3R5cGUgdHlwZSlcXG5tbS9zbGFiX2NvbW1vbi5jLTk2NC17XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTEwMjY9dm9pZCBfX2luaXQgY3JlYXRlX2ttYWxsb2NfY2FjaGVzKHZvaWQpXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTEwMzYtXFx0XFx0aWYgKEtNQUxMT0NfTUlOX1NJWkUgXFx1MDAzYz0gMzIpXFxubW0vc2xhYl9jb21tb24uYzoxMDM3OlxcdFxcdFxcdG5ld19rbWFsbG9jX2NhY2hlKDEsIHR5cGUpO1xcbm1tL3NsYWJfY29tbW9uLmMtMTAzOC1cXHRcXHRpZiAoS01BTExPQ19NSU5fU0laRSBcXHUwMDNjPSA2NClcXG5tbS9zbGFiX2NvbW1vbi5jOjEwMzk6XFx0XFx0XFx0bmV3X2ttYWxsb2NfY2FjaGUoMiwgdHlwZSk7XFxubW0vc2xhYl9jb21tb24uYy0xMDQwLVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xMDQyLVxcdFxcdGZvciAoaSA9IEtNQUxMT0NfU0hJRlRfTE9XOyBpIFxcdTAwM2M9IEtNQUxMT0NfU0hJRlRfSElHSDsgaSsrKVxcbm1tL3NsYWJfY29tbW9uLmM6MTA0MzpcXHRcXHRcXHRuZXdfa21hbGxvY19jYWNoZShpLCB0eXBlKTtcXG5tbS9zbGFiX2NvbW1vbi5jLTEwNDQtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMjo0Ni4xMzg0NTA5OTFaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMzY2NzUyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgU3ltYm9sIExpc3QqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZ2l2ZW4gYSBsaXN0IG9mIHN5bWJvbHMgdG8gZm9jdXMgb24uIEZpcnN0LCBJJ20gZ29pbmcgdG8gcXVpY2tseSBlbGltaW5hdGUgdGhhdCBgc3RhdGljIHZvaWQgX19pbml0YCBvbmU7IGl0J3MgaW5pdGlhbGl6YXRpb24gY29kZSBhbmQgbm90IHJlbGV2YW50IHRvIG15IGNvcmUgYW5hbHlzaXMuIE5vdywgdGhlIGZpbmFsIGxpc3QgaW5jbHVkZXM6IGBhbGxvY19zbGFiX29ial9leHRzYCwgYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2tgLCBgX19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rYCwgYF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tgLCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AsIGBfX2tmZW5jZV9mcmVlYCwgYW5kIGBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NgLiBOb3cgSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhbmQgZGVjaWRlIGlmIHRob3NlIGFyZSBleHBvcnRlZCBvciBub24tc3RhdGljLiBUaGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgd2hldGhlciBgX19rZmVuY2VfZnJlZWAgaXMgZXhwb3J0ZWQgb3Igbm90LCBvciBpZiBpdCBpcyBub24tc3RhdGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDE1MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMjo1MC4wNDIxMjM4NThaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTQ2NjQ1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2tmZW5jZV9mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2tmZW5jZS9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2ZlbmNlL2NvcmUuYz0xMjM5PXZvaWQgKmtmZW5jZV9vYmplY3Rfc3RhcnQoY29uc3Qgdm9pZCAqYWRkcilcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmMtMTI0OS1cXG5tbS9rZmVuY2UvY29yZS5jOjEyNTA6dm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXFxubW0va2ZlbmNlL2NvcmUuYy0xMjUxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjI6NTAuMTgxNjAxMTIyWiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjMxMjU2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqQXNzZXNzaW5nIHRoZSBEeW5hbWljIE5hdHVyZSoqXG5cblJpZ2h0LCBzbyBpdCdzIG5vdCBzdGF0aWMuIFRoYXQncyB0aGUga2V5IHRha2Vhd2F5IGhlcmUuIFRoZSBiZWhhdmlvciBvciBzdGF0ZSB3ZSdyZSBleGFtaW5pbmcgaXNuJ3QgZml4ZWQ7IGl0J3MgY2hhbmdpbmcsIGV2b2x2aW5nLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGR5bmFtaXNtLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuIEl0J3Mgb2Z0ZW4gd2hlcmUgeW91J2xsIGZpbmQgdGhlIG11dGFibGUgb3IgdHJhbnNpZW50IGNvbXBvbmVudHMsIHBlcmhhcHMgdGhlIGFsbG9jYXRpb24gZXh0ZW5zaW9ucywgd2hpY2ggYXJlIGNydWNpYWwgd2hlbiBkZWFsaW5nIHdpdGggYW4gZWxlbWVudCBvZiBjaGFuZ2Ugd2l0aGluIG91ciBhcmNoaXRlY3R1cmUuIFRoYXQgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIGhvbGQgdGhlIGNvcmUgb2YgdGhlIHN0YXRlIHRoYXQncyByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgdGhpcyBsYWNrIG9mIHN0YXRpYyBiZWhhdmlvci4gVGltZSB0byBkaWcgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNjAwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjI6NTMuNzQ0NzMzMzk2WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTUwMTQ3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGFsbG9jX3NsYWJfb2JqX2V4dHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsdWIuYz0yMTM0PXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmMtMjEzOC1cXG5tbS9zbHViLmM6MjEzOTppbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIxNDAtXFx0XFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjMwNz1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTIzMTAtXFxubW0vc2x1Yi5jOjIzMTE6c3RhdGljIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjMxMi1cXHRcXHRcXHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIyOjUzLjk5OTc1NzU4M1oiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE1Nzg0NzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBEeW5hbWljIFNsYWIgT2JqZWN0IEV4dGVuc2lvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIGNvbmNlcHQgaGVyZSBpcyB0aGF0IHRoZSBzbGFiIGFsbG9jYXRvcidzIGJlaGF2aW9yIGlzbid0IGZpeGVkLCBhbmQgaXQgY2hhbmdlcyB3aGVuIGBDT05GSUdfU0xBQl9PQkpfRVhUYCBpcyBlbmFibGVkLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdCDigJMgYSBkeW5hbWljIGNvbmRpdGlvbiBhbHdheXMgZGVtYW5kcyBhIGNsb3NlciBsb29rLiBJJ20gYXNzdW1pbmcgd2UncmUgdGFsa2luZyBhYm91dCBvYmplY3QgZXh0ZW5zaW9ucyB3aXRoaW4gdGhlIHNsYWIgYWxsb2NhdG9yLCBwcm9iYWJseSByZWxhdGVkIHRvIG1ldGFkYXRhIG9yIHBlci1vYmplY3QgZGF0YS5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBhbGxvY2F0aW9uIGhvb2suIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gYF9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2tgLiBUaGlzIGhvb2sgbGlrZWx5IHByb3ZpZGVzIGNydWNpYWwgaW5zaWdodHMuIEl0J3MgcHJvYmFibHkgdGhlIHBvaW50IHdoZXJlIHRoZSBkeW5hbWljIGJlaGF2aW9yIG1hbmlmZXN0cyBpdHNlbGYuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MgaXMgbW9kaWZpZWQuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIG9iamVjdCBleHRlbnNpb25zIGFyZSBpbnRlZ3JhdGVkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNoYW5nZXMgaW4gZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVnaWVzLCBvciBwb3RlbnRpYWxseSBldmVuIGFsbG9jYXRpb24gYWxnb3JpdGhtcyBzcGVjaWZpYyB0byB0aGlzIGNvbmZpZ3VyYXRpb24uIEl0IGNvdWxkIGludm9sdmUgdGFnZ2luZyBvYmplY3RzIGZvciBsYXRlciByZXRyaWV2YWwgb3Igc29tZSBvdGhlciBraW5kIG9mIGluc3RydW1lbnRhdGlvbi4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSB1c2FnZSwgYW5kIHdoZXRoZXIgb3Igbm90IGl0IGFsaWducyB3aXRoIHRoZSBkZXNpZ24gZ29hbHMgYW5kIGFudGljaXBhdGVkIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0IGhhbmRsZXMgbWVtb3J5IGZyYWdtZW50YXRpb24gYW5kIGFsaWdubWVudCwgZXNwZWNpYWxseSBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gXCJleHRlbmRlZFwiIG9iamVjdC4gRXNzZW50aWFsbHksIEkgbmVlZCB0byBkZXRlcm1pbmUgKmhvdyogdGhlIHNsYWIgYWxsb2NhdG9yIGlzIGR5bmFtaWNhbGx5IGFkYXB0aW5nIGFuZCB3aGF0IGltcGxpY2F0aW9ucyB0aGF0IGhhcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEwNTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMjo1OC4zMTU1NDkzMDRaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzUzNDIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9MjM0Nj1zdGF0aWMgbm9pbmxpbmUgdm9pZFxcbm1tL3NsdWIuYzoyMzQ3Ol9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgZ2ZwX3QgZmxhZ3MsXFxubW0vc2x1Yi5jLTIzNDgtXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jPTIzOTA9YWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtMjM5My1cXHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkpXFxubW0vc2x1Yi5jOjIzOTQ6XFx0XFx0X19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9vayhzLCBvYmplY3QsIGZsYWdzLCBhbGxvY19mbGFncyk7XFxubW0vc2x1Yi5jLTIzOTUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMjo1OC40ODkwOTM2NDRaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2ODA4MjE4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gZGlzY3Vzc2luZyB0aGlzIHdpdGggYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBjbHVlIHBvaW50cyB0b3dhcmRzIGEgZnVuY3Rpb24gZGVjbGFyZWQgYXMgYHN0YXRpYyBub2lubGluZSB2b2lkYC4gSW50ZXJlc3Rpbmcg4oCTIHRoYXQgYG5vaW5saW5lYCBpcyBvZnRlbiBhIHJlZCBmbGFnIGZvciBmdXp6aW5nIG9wcG9ydHVuaXRpZXMuIFN5emthbGxlciwgZ2l2ZW4gaXRzIGNhcGFiaWxpdGllcywgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgbG9vayBhdCBpdC5cblxuTm93LCBsZXQncyBkaWcgZGVlcGVyIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZCB3aXRoIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2tgLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTY1MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIzOjAxLjY1NzE4MDk3OFoiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MTg5NzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9va1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTIzOTg9c3RhdGljIG5vaW5saW5lIHZvaWRcXG5tbS9zbHViLmM6MjM5OTpfX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcXG5tbS9zbHViLmMtMjQwMC1cXHRcXHRcXHQgICAgICAgaW50IG9iamVjdHMpXFxuLS1cXG5tbS9zbHViLmM9MjQyNj1hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXFxuLS1cXG5tbS9zbHViLmMtMjQyOS1cXHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkpXFxubW0vc2x1Yi5jOjI0MzA6XFx0XFx0X19hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAsIG9iamVjdHMpO1xcbm1tL3NsdWIuYy0yNDMxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjM6MDEuOTAzNDEzNDE4WiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTYxNjk4NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEZ1enogVGFyZ2V0KipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgZnVuY3Rpb24sIGlkZW50aWZpZWQgYXMgYSBgc3RhdGljIG5vaW5saW5lIHZvaWRgLCBpcyBhIHZpYWJsZSBjYW5kaWRhdGUgZm9yIFN5emthbGxlciBmdXp6aW5nLiBUaGUgYHN0YXRpYyBub2lubGluZWAgYXR0cmlidXRlcyBpbW1lZGlhdGVseSBjYXRjaCBteSBleWU7IHRoZXkgaGludCBhdCBwb3RlbnRpYWwgaXNvbGF0aW9uLCBhbmQgdGhlIGFic2VuY2Ugb2YgaW5saW5pbmcgY2FuIGJlIHBhcnRpY3VsYXJseSBiZW5lZmljaWFsIGZvciBmdXp6aW5nIGFzIGl0IHNpbXBsaWZpZXMgY29udHJvbCBmbG93IGFuYWx5c2lzLiBUaGUgZmFjdCB0aGF0IFN5emthbGxlciBpcyBiZWluZyBjb25zaWRlcmVkIHN1Z2dlc3RzIGl0J3MgbGlrZWx5IGEgcmVsYXRpdmVseSBzaW1wbGUgZnVuY3Rpb24gd2l0aCBkaXJlY3QgZXh0ZXJuYWwgaW5wdXQuXG5cbk15IG5leHQgc3RlcCwgYW5kIGZyYW5rbHksIG15ICppbW1lZGlhdGUqIHRob3VnaHQsIGlzIHRvIGNoZWNrIHRoZSBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AuIFRoaXMgaXMgc3RhbmRhcmQgb3BlcmF0aW5nIHByb2NlZHVyZSwgZXNwZWNpYWxseSBpbiBtZW1vcnkgbWFuYWdlbWVudCBjb250ZXh0cy4gR2l2ZW4gdGhlIFwicG9zdC1hbGxvY1wiIGRlc2lnbmF0aW9uLCBpdCdzIGxpa2VseSBhIGNhbGxiYWNrIGludm9rZWQgYWZ0ZXIgYSBzbGFiIGFsbG9jYXRpb24gaGFzIG9jY3VycmVkLiBNeSBtZW50YWwgZ2VhcnMgYXJlIGFscmVhZHkgdHVybmluZyDigJMgd2hhdCBpbnB1dHMgZG9lcyB0aGlzIGhvb2sgcmVjZWl2ZT8gV2hhdCBpcyBpdCAqc3VwcG9zZWQqIHRvIGRvIHdpdGggdGhlIG5ld2x5IGFsbG9jYXRlZCBtZW1vcnk/IElzIHRoZXJlIGEgc3VidGxlIHJhY2UgY29uZGl0aW9uIGluIHRoaXMgY2FsbGJhY2ssIG9yIGEgcG9zc2liaWxpdHkgb2YgbWVtb3J5IGNvcnJ1cHRpb24gZHVlIHRvIGluY29ycmVjdCBpbml0aWFsaXphdGlvbiwgb3IgdGhlIGxhY2sgb2YgaXQsIG9yIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8/IFRoZXNlIGFyZSB0aGUgcHJpbWFyeSBxdWVzdGlvbnMgSSBoYXZlIGJhc2VkIG9uIGp1c3QgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIGFuZCB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50LiBUaGlzIGlzIHdoZXJlIEknbGwgYmVnaW4gbXkgZGVlcGVyIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjA1OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIzOjA2LjExOTU5MDk4WiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQxMDA1OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTM1Mjk9c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2Z1bGxfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNTM3LVxcbm1tL21lbWNvbnRyb2wuYzozNTM4OmJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxubW0vbWVtY29udHJvbC5jLTM1MzktXFx0XFx0XFx0XFx0ICBnZnBfdCBmbGFncywgdW5zaWduZWQgaW50IHNsYWJfYWxsb2NfZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIzOjA2LjI5MzcwMTYyWiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzg3MzE3NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgRXBoZW1lcmFsOiBBIER5bmFtaWMgTWVtb3J5IExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBzaXR1YXRpb24gaXNuJ3Qgc3RyYWlnaHRmb3J3YXJkLiBJdCdzICpub24tc3RhdGljKiwgd2hpY2ggaW1tZWRpYXRlbHkgZGVtYW5kcyBhIG1vcmUgbnVhbmNlZCBhcHByb2FjaC4gV2UgY2FuJ3QgcmVseSBvbiBhc3N1bXB0aW9ucyBvZiBzdGFiaWxpdHkgaGVyZTsgd2UgbmVlZCB0byBhY2NvdW50IGZvciB2b2xhdGlsaXR5LiBJdCdzIGdvdCB0aGUgd2hpZmYgb2YgYSByYWNlIGNvbmRpdGlvbiwgb3IgcGVyaGFwcyBzb21ldGhpbmcgbW9yZSBkZWVwbHkgcm9vdGVkIGluIGEgZHluYW1pYyBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBjeWNsZS5cblxuTXkgaW5pdGlhbCBodW5jaCBpcyBzb21ldGhpbmcgc2xhYi1yZWxhdGVkIGlzIGNhdXNpbmcgdGhpcy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgX19tZW1jZ19zbGFiX2ZyZWVfaG9va2AuIFRoYXQgZnVuY3Rpb24gb2Z0ZW4gZ2l2ZXMgZ29vZCB2aXNpYmlsaXR5IGludG8gdGhlIGxpZmVjeWNsZSBvZiBzbGFiIGFsbG9jYXRpb25zLCBzcGVjaWZpY2FsbHkgZnJvbSBhIG1lbW9yeSBjb250cm9sIGdyb3VwIHBlcnNwZWN0aXZlLiBJdCBpcyB0aGUgbG9naWNhbCBwb2ludCB0byBpbnZlc3RpZ2F0ZSB0aGUgb3JpZ2luIG9mIHRoZSBvYnNlcnZlZCBub24tc3RhdGljIGJlaGF2aW9ycy4gSSBjYW4gdXNlIHRoaXMgYXMgYSBzdGFydGluZyBwb2ludCB0byBzZWUgd2hhdCB0aGUgcHJvYmxlbSBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1NDgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMzowOS42MzI0MzkwMTRaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTgyMTY1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21lbWNnX3NsYWJfZnJlZV9ob29rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MzUzOD1ib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM2MzItXFxubW0vbWVtY29udHJvbC5jOjM2MzM6dm9pZCBfX21lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG5tbS9tZW1jb250cm9sLmMtMzYzNC1cXHRcXHRcXHQgICAgdm9pZCAqKnAsIGludCBvYmplY3RzLCB1bnNpZ25lZCBsb25nIG9ial9leHRzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMzowOS44NTgyNzcxOTNaIiwiU2VxIjo2OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwODE4MDMzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0IHVuZGVyc3RhbmRpbmc6XG5cbioqQW5hbHl6aW5nIE5vbi1TdGF0aWMgQmVoYXZpb3IqKlxuXG5BbHJpZ2h0LCBJJ20gb2JzZXJ2aW5nIHNvbWV0aGluZyB0aGF0IGlzbid0IGJlaGF2aW5nIHN0YXRpY2FsbHkuIFRoYXQncyB0aGUga2V5IHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZHluYW1pY2FsbHkgaW5mbHVlbmNpbmcgdGhlIHN5c3RlbS4gR2l2ZW4gdGhhdCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBsaWtlbHkgYXJlYSBvZiBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudCwgYXMgdGhlIG5vbi1zdGF0aWMgbmF0dXJlIGhpbnRzIGF0IHNvbWV0aGluZyB0aGF0IGNoYW5nZXMgb3ZlciB0aW1lLiBMZXQncyBzZWUuLi4gYSBnb29kIHN0YXJ0aW5nIHBvaW50IHdvdWxkIGJlIHRvIGluc3BlY3QgaG93IHRoZSBzeXN0ZW0gaXMgY3JlYXRpbmcgdGhlc2UgbWVtb3J5IGNhY2hlcy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSBpbnN0cnVtZW50YWwgaW4gaG93IGR5bmFtaWMgbWVtb3J5IGlzIGJlaW5nIGhhbmRsZWQuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHdoYXQncyBnb2luZyBvbiBkeW5hbWljYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI5MzMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMzoxMy4xNjY0NjI1M1oiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwNjg5MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fa21lbV9jYWNoZV9jcmVhdGVfYXJnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbGFiX2NvbW1vbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsYWJfY29tbW9uLmM9MjY3PV9fa21lbV9jYWNoZV9hbGlhcyhjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgc2l6ZSwgc2xhYl9mbGFnc190IGZsYWdzLFxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0yOTEtLyoqXFxubW0vc2xhYl9jb21tb24uYzoyOTI6ICogX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzIC0gQ3JlYXRlIGEga21lbSBjYWNoZS5cXG5tbS9zbGFiX2NvbW1vbi5jLTI5My0gKiBAbmFtZTogQSBzdHJpbmcgd2hpY2ggaXMgdXNlZCBpbiAvcHJvYy9zbGFiaW5mbyB0byBpZGVudGlmeSB0aGlzIGNhY2hlLlxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0zMTctICovXFxubW0vc2xhYl9jb21tb24uYzozMTg6c3RydWN0IGttZW1fY2FjaGUgKl9fa21lbV9jYWNoZV9jcmVhdGVfYXJncyhjb25zdCBjaGFyICpuYW1lLFxcbm1tL3NsYWJfY29tbW9uLmMtMzE5LVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgb2JqZWN0X3NpemUsXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTQwOC19XFxubW0vc2xhYl9jb21tb24uYzo0MDk6RVhQT1JUX1NZTUJPTChfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MpO1xcbm1tL3NsYWJfY29tbW9uLmMtNDEwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMzoxMy40MTcxNjE5NDlaIiwiU2VxIjo3MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc0NjczOTEyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gSW5zdHJ1bWVudGF0aW9uKipcblxuT2theSwgc28gdGhpcyBpcyBhYm91dCBleHBvcnRlZCBzeW1ib2xzIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSBzbGFiIGFsbG9jYXRvcnMgYW5kIHJlbGF0ZWQgaG9va3MuIEkgc2VlIGEgbGlzdCBvZiBgRm9jdXNTeW1ib2xzYCB0aGF0IGFyZSBrZXk6IGBhbGxvY19zbGFiX29ial9leHRzYCwgdGhlIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl8qYCBob29rcyBmb3IgYm90aCBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nLCBhbmQgdGhlbiB0aG9zZSBtZW1jZyBhbmQga2ZlbmNlIGhvb2tzLiBUaGVuLCBJIHNlZSBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYCBsaXN0ZWQgYXMgd2VsbCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgY2FjaGVzIGFyZSBjb25maWd1cmVkLlxuXG5Ob3csIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIHdoYXQgcmVhbGx5IHBpcXVlIG15IGludGVyZXN0LiBgTUVNX0FMTE9DX1BST0ZJTElOR2AsIGBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVGAsIGFuZCBgTUVNQ0dgIOKAkyB0aG9zZSBhcmUgdGhlIGtleSBrbm9icyBoZXJlLiBUaGUgZGVmYXVsdCBlbmFibGUgZmxhZywgYE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUYCwgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgSSB3YW50IHRvIGNoZWNrLiBFbmFibGluZyBhIHByb2ZpbGluZyBmZWF0dXJlIGJ5IGRlZmF1bHQgaXMgZmFudGFzdGljIGZvciBmdXp6aW5nIGFuZCBnZW5lcmFsIGFuYWx5c2lzLiBJdCBzaW1wbGlmaWVzIHRlc3RpbmcsIHNvIGl0IHNlZW1zIGxpa2UgYSB1c2VmdWwgZmxhZyB0byBoYXZlLlxuXG5BaCwgYnV0IGhvbGQgb24uIFRoZSBgTUVNX0FMTE9DX1BST0ZJTElOR2AgY29uZmlnIGhhcyBhIGRlcGVuZGVuY3kgb24gYENPREVfVEFHR0lOR2AuIEknbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGF0IGZ1cnRoZXIuIFRoYXQncyBjcnVjaWFsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdGFncyBhcmUgYmVpbmcgdXNlZCwgYW5kIGlmIGNvZGUgdGFnZ2luZyBpcyBkZXBlbmRlbnQgb24gc29tZXRoaW5nIGVsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDAwLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDIwOjIzOjE4LjE2MzkwNzc3NloiLCJTZXEiOjcyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI1MTczNjUyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ09ERV9UQUdHSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0xMDI5PWNvbmZpZyBERUJVR19TVEFDS09WRVJGTE9XXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDQ2LVxcbmxpYi9LY29uZmlnLmRlYnVnOjEwNDc6Y29uZmlnIENPREVfVEFHR0lOR1xcbmxpYi9LY29uZmlnLmRlYnVnLTEwNDgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMzoyMy40MTU2NTQxOFoiLCJTZXEiOjczLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTIyNTUzMTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOlxuXG4qKlJlZmFjdG9yaW5nIHRoZSBNZW1vcnkgUHJvZmlsaW5nIGFuZCBLRkVOQ0UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGVzZSBtZW1vcnkgZmVhdHVyZXMgYXJlIGNvbmZpZ3VyZWQuIEl0IGxvb2tzIGxpa2UgdGhlIGBDT0RFX1RBR0dJTkdgIG9wdGlvbiBpcyBpbXBsaWNpdGx5IHRpZWQgdG8gYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzOyBpZiB3ZSBlbmFibGUgYE1FTV9BTExPQ19QUk9GSUxJTkdgLCBgQ09ERV9UQUdHSU5HYCBpcyB0YWtlbiBjYXJlIG9mLiBTbywgcmVhbGx5LCBhbGwgd2UgbmVlZCB0byBmb2N1cyBvbiBhcmUgYE1FTV9BTExPQ19QUk9GSUxJTkdgIGFuZCBgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRgLiBBbmQgb2YgY291cnNlLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIGBNRU1DR2AsIHdoaWNoIGlzIGEgZGlmZmVyZW50IGNvbmNlcm4sIGJ1dCByZWxldmFudCBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IGBLRkVOQ0VgLiBUaGlzIHBhdGNoIHRvdWNoZXMgYG1tL2tmZW5jZS9jb3JlLmNgLCB3aGljaCBpcyB0aGUga2V5IGluZGljYXRvci4gU28sIG5hdHVyYWxseSwgd2Ugc2hvdWxkIGVuYWJsZSBgS0ZFTkNFYCB0byBrZWVwIGV2ZXJ5dGhpbmcgY29uc2lzdGVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM5ODcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQyMDoyMzoyNy45MzgyMTcwMThaIiwiU2VxIjo3NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNTkzMTU3ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtGRU5DRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcua2ZlbmNlPTM9Y29uZmlnIEhBVkVfQVJDSF9LRkVOQ0VcXG4tLVxcbmxpYi9LY29uZmlnLmtmZW5jZS01LVxcbmxpYi9LY29uZmlnLmtmZW5jZTo2Om1lbnVjb25maWcgS0ZFTkNFXFxubGliL0tjb25maWcua2ZlbmNlLTctXFx0Ym9vbCBcXFwiS0ZFTkNFOiBsb3ctb3ZlcmhlYWQgc2FtcGxpbmctYmFzZWQgbWVtb3J5IHNhZmV0eSBlcnJvciBkZXRlY3RvclxcXCJcXG4tLVxcbmxpYi9LY29uZmlnLmtmZW5jZT0yNj1pZiBLRkVOQ0VcXG5saWIvS2NvbmZpZy5rZmVuY2UtMjctXFxubGliL0tjb25maWcua2ZlbmNlOjI4OmNvbmZpZyBLRkVOQ0VfU0FNUExFX0lOVEVSVkFMXFxubGliL0tjb25maWcua2ZlbmNlLTI5LVxcdGludCBcXFwiRGVmYXVsdCBzYW1wbGUgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzXFxcIlxcbi0tXFxubGliL0tjb25maWcua2ZlbmNlLTM4LVxcbmxpYi9LY29uZmlnLmtmZW5jZTozOTpjb25maWcgS0ZFTkNFX05VTV9PQkpFQ1RTXFxubGliL0tjb25maWcua2ZlbmNlLTQwLVxcdGludCBcXFwiTnVtYmVyIG9mIGd1YXJkZWQgb2JqZWN0cyBhdmFpbGFibGVcXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5rZmVuY2UtNDctXFxubGliL0tjb25maWcua2ZlbmNlOjQ4OmNvbmZpZyBLRkVOQ0VfREVGRVJSQUJMRVxcbmxpYi9LY29uZmlnLmtmZW5jZS00OS1cXHRib29sIFxcXCJVc2UgYSBkZWZlcnJhYmxlIHRpbWVyIHRvIHRyaWdnZXIgYWxsb2NhdGlvbnNcXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5rZmVuY2UtNTktXFxubGliL0tjb25maWcua2ZlbmNlOjYwOmNvbmZpZyBLRkVOQ0VfU1RBVElDX0tFWVNcXG5saWIvS2NvbmZpZy5rZmVuY2UtNjEtXFx0Ym9vbCBcXFwiVXNlIHN0YXRpYyBrZXlzIHRvIHNldCB1cCBhbGxvY2F0aW9uc1xcXCIgaWYgRVhQRVJUXFxuLS1cXG5saWIvS2NvbmZpZy5rZmVuY2UtNzQtXFxubGliL0tjb25maWcua2ZlbmNlOjc1OmNvbmZpZyBLRkVOQ0VfU1RSRVNTX1RFU1RfRkFVTFRTXFxubGliL0tjb25maWcua2ZlbmNlLTc2LVxcdGludCBcXFwiU3RyZXNzIHRlc3Rpbmcgb2YgZmF1bHQgaGFuZGxpbmcgYW5kIGVycm9yIHJlcG9ydGluZ1xcXCIgaWYgRVhQRVJUXFxuLS1cXG5saWIvS2NvbmZpZy5rZmVuY2UtODUtXFxubGliL0tjb25maWcua2ZlbmNlOjg2OmNvbmZpZyBLRkVOQ0VfS1VOSVRfVEVTVFxcbmxpYi9LY29uZmlnLmtmZW5jZS04Ny1cXHR0cmlzdGF0ZSBcXFwiS0ZFTkNFIGludGVncmF0aW9uIHRlc3Qgc3VpdGVcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjM6MzMuMTk3NTQzOTY5WiIsIlNlcSI6NzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3NzQ5OTAzNTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiByZXZpZXdpbmcgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIG9wdGltaXppbmcgaG93IGBzdHJ1Y3Qgc2xhYm9ial9leHRgIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBzbGFiIGFsbG9jYXRvciwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgYW5kIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZy4gTGV0J3MgYnJlYWsgZG93biBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbkZpcnN0bHksIHRoaXMgcGF0Y2ggZGVmaW5pdGVseSBzZWVtcyBmdW5jdGlvbmFsLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBjcml0aWNhbCBmdW5jdGlvbiBgX19rZmVuY2VfZnJlZWAgaGFzIGJlZW4gbW9kaWZpZWQsIHdoaWNoIGlzIGEgZ29vZCBpbmRpY2F0b3IgdGhhdCB0aGUgY29yZSBsb2dpYyBpcyBiZWluZyB0b3VjaGVkLiBJJ3ZlIGFsc28gY2hlY2tlZCBga2ZlbmNlX2luaXRfcG9vbGAgYW5kIGB0ZXN0X2FsbG9jYCB0byBjb25maXJtIHRoZSBwYXRjaCdzIGludGVncmF0aW9uIHdpdGhpbiB0aGUgZXhpc3RpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoZXJlZm9yZSwgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgdGFsayBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgd2FudCB0byBob25lIGluIG9uIGFyZWFzIG1vc3QgZGlyZWN0bHkgaW1wYWN0ZWQgYnkgdGhlc2UgY2hhbmdlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBleGNsdWRlIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcm92aWRlIGEgbW9yZSBmb2N1c2VkIGZ1enplciBleHBlcmllbmNlLlxuXG5Jbml0aWFsbHksIEkgbG9va2VkIGF0IGEgY29tcHJlaGVuc2l2ZSBsaXN0LiBJIHF1aWNrbHkgcmVqZWN0ZWQgc2V2ZXJhbCBiZWNhdXNlIHRoZXkgd2VyZSBgc3RhdGljYCBvciBgc3RhdGljIGlubGluZWAuIEknbSBnb2luZyB0byBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBgX19rbWVtX2NhY2hlX2NyZWF0ZV9hcmdzYCwgYW5kIGBfX2tmZW5jZV9mcmVlYC4gVGhlc2UgYXJlIGdvb2Qgc3RhcnQuXG5cbkkgd2FudCB0byBpbmNsdWRlIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYCBhbmQgYF9fbWVtY2dfc2xhYl9mcmVlX2hvb2tgIGJlY2F1c2UgdGhleSByZXByZXNlbnQgdGhlIGNvcmUgbG9naWMgY2hhbmdlcyBmb3IgbWVtY2csIGV2ZW4gaWYgdGhleSBhcmUgc29tZXdoYXQgaG90LiBBbHNvLCBgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9va2AgaXMgb25seSBjYWxsZWQgZm9yIGEgc3Vic2V0IG9mIGFsbG9jYXRpb25zLCB3aGljaCBpcyBhY2NlcHRhYmxlLlxuXG5TbyB0aGUgZmluYWwgbGlzdCBvZiBGb2N1c1N5bWJvbHMgd2lsbCBiZTpcblxuKiAgIGBhbGxvY19zbGFiX29ial9leHRzYFxuKiAgIGBfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rYFxuKiAgIGBfX21lbWNnX3NsYWJfZnJlZV9ob29rYFxuKiAgIGBfX2tmZW5jZV9mcmVlYFxuKiAgIGBfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NgXG5cblRoaXMgc2V0IGNvdmVycyBtb2RpZmljYXRpb25zIGluIG9iamVjdCBleHRlbnNpb24gdmVjdG9yIGFsbG9jYXRpb24sIGBrZmVuY2VgIGZyZWUgaGFuZGxpbmcsIGFuZCBtZW1jZyBhY2NvdW50aW5nLCB3aGljaCBhcmUgYWxsIGRpcmVjdGx5IHJlbGV2YW50IHRvIHRoZSBwYXRjaCdzIG9wdGltaXphdGlvbnMuIFRoaXMgZmVlbHMgbGlrZSBhIGJhbGFuY2VkIGFuZCBlZmZlY3RpdmUgc3RyYXRlZ3kgZm9yIHVuY292ZXJpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMuIFRoZSBlbmFibGluZyBjb25maWd1cmF0aW9ucyBpbmNsdWRlIE1FTV9BTExPQ19QUk9GSUxJTkcsIE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxULCBNRU1DRywgYW5kIEtGRU5DRS4gVGhlc2Ugd2lsbCBlbnN1cmUgdGhhdCByZWxldmFudCBjb2RlIHBhdGhzIGFyZSBhY3RpdmF0ZWQgZHVyaW5nIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NzU0LCJPdXRwdXRUb2tlbnMiOjE5MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMjA6MjM6NTAuOTQ3NDUzMDM3WiIsIlNlcSI6NzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5NTUyOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCIsXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIktGRU5DRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX3NsYWJfb2JqX2V4dHNcIixcbiAgICBcIl9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2tcIixcbiAgICBcIl9fbWVtY2dfc2xhYl9mcmVlX2hvb2tcIixcbiAgICBcIl9fa2ZlbmNlX2ZyZWVcIixcbiAgICBcIl9fa21lbV9jYWNoZV9jcmVhdGVfYXJnc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgbGF5b3V0IGFuZCBoYW5kbGluZyBvZiBgc3RydWN0IHNsYWJvYmpfZXh0YCBpbiB0aGUgc2xhYiBhbGxvY2F0b3IsIHdoaWNoIGlzIHVzZWQgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBhbmQgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nLiBJdCBvcHRpbWl6ZXMgdGhlIHN0b3JhZ2Ugb2YgYG9iamNnYCBhbmQgYGNvZGV0YWdfcmVmYCBwb2ludGVycy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBzbGFiIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgcGF0aHMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR1wiLFxuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJLRkVOQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zbGFiX29ial9leHRzXCIsXG4gICAgXCJfX21lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rXCIsXG4gICAgXCJfX21lbWNnX3NsYWJfZnJlZV9ob29rXCIsXG4gICAgXCJfX2tmZW5jZV9mcmVlXCIsXG4gICAgXCJfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGxheW91dCBhbmQgaGFuZGxpbmcgb2YgYHN0cnVjdCBzbGFib2JqX2V4dGAgaW4gdGhlIHNsYWIgYWxsb2NhdG9yLCB3aGljaCBpcyB1c2VkIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgYW5kIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZy4gSXQgb3B0aW1pemVzIHRoZSBzdG9yYWdlIG9mIGBvYmpjZ2AgYW5kIGBjb2RldGFnX3JlZmAgcG9pbnRlcnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgc2xhYiBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIHBhdGhzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowtp68z[1] Phase: Succeeded StartedAt: 2026-07-20 20:24:03 +0000 UTC FinishedAt: 2026-07-20 20:24:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtp68z[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-20 20:24:03 +0000 UTC FinishedAt: 2026-07-20 20:24:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtp68z[2] Phase: Succeeded StartedAt: 2026-07-20 20:24:03 +0000 UTC FinishedAt: 2026-07-21 00:29:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-20 20:24:03 +0000 UTC FinishedAt: 2026-07-21 00:29:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-20 20:24:03 +0000 UTC FinishedAt: 2026-07-20 20:24:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-20 20:24:03 +0000 UTC FinishedAt: 2026-07-20 20:24:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowtp68z/series-workflowtp68z-convert-artifact-2245213534/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-20 20:24:13 +0000 UTC FinishedAt: 2026-07-20 20:53:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-20 20:24:13 +0000 UTC FinishedAt: 2026-07-20 20:53:08 +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:*29547dee-f8fa-41ff-8c06-ccd112bbb862,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-workflowtp68z/series-workflowtp68z-convert-artifact-2245213534/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": "a0426bf3-df5c-4477-b1c3-7f4fb2cbe1be", "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-workflowtp68z/series-workflowtp68z-build-action-1531928132/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-20 20:24:13 +0000 UTC FinishedAt: 2026-07-20 20:52:43 +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:*29547dee-f8fa-41ff-8c06-ccd112bbb862,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-workflowtp68z/series-workflowtp68z-convert-artifact-2245213534/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": "a0426bf3-df5c-4477-b1c3-7f4fb2cbe1be", "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-workflowtp68z/series-workflowtp68z-build-action-1531928132/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-20 20:53:08 +0000 UTC FinishedAt: 2026-07-20 20:53:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-20 20:53:08 +0000 UTC FinishedAt: 2026-07-20 20:53:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-20 20:53:08 +0000 UTC FinishedAt: 2026-07-20 20:53:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-20 20:53:08 +0000 UTC FinishedAt: 2026-07-20 20:53:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowtp68z/series-workflowtp68z-convert-artifact-113837073/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-20 20:53:19 +0000 UTC FinishedAt: 2026-07-20 20:56:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-20 20:53:19 +0000 UTC FinishedAt: 2026-07-20 20:56:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a0426bf3-df5c-4477-b1c3-7f4fb2cbe1be,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-workflowtp68z/series-workflowtp68z-build-action-1531928132/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-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-20 20:56:43 +0000 UTC FinishedAt: 2026-07-20 20:56:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-20 20:56:43 +0000 UTC FinishedAt: 2026-07-20 20:56:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-20 20:56:43 +0000 UTC FinishedAt: 2026-07-20 21:23:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-20 20:56:43 +0000 UTC FinishedAt: 2026-07-20 21:23:15 +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:*29547dee-f8fa-41ff-8c06-ccd112bbb862,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-workflowtp68z/series-workflowtp68z-convert-artifact-113837073/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": "a36474ec-9499-4125-bf41-c67c9079cf60", "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-workflowtp68z/series-workflowtp68z-build-action-3168793565/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-20 20:56:43 +0000 UTC FinishedAt: 2026-07-20 21:23:05 +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:*29547dee-f8fa-41ff-8c06-ccd112bbb862,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-workflowtp68z/series-workflowtp68z-convert-artifact-113837073/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": "a36474ec-9499-4125-bf41-c67c9079cf60", "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-workflowtp68z/series-workflowtp68z-build-action-3168793565/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-20 21:23:15 +0000 UTC FinishedAt: 2026-07-20 21:23:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-20 21:23:15 +0000 UTC FinishedAt: 2026-07-20 21:23:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-20 21:23:15 +0000 UTC FinishedAt: 2026-07-20 21:25:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-20 21:23:15 +0000 UTC FinishedAt: 2026-07-20 21:25:23 +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:*a36474ec-9499-4125-bf41-c67c9079cf60,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-workflowtp68z/series-workflowtp68z-build-action-3168793565/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-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-20 21:25:33 +0000 UTC FinishedAt: 2026-07-21 00:29:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-20 21:25:33 +0000 UTC FinishedAt: 2026-07-21 00:29:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},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:*a0426bf3-df5c-4477-b1c3-7f4fb2cbe1be,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a36474ec-9499-4125-bf41-c67c9079cf60,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-workflowtp68z/series-workflowtp68z-build-action-1531928132/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-workflowtp68z/series-workflowtp68z-build-action-3168793565/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-20 21:25:33 +0000 UTC FinishedAt: 2026-07-20 21:26:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-20 21:25:33 +0000 UTC FinishedAt: 2026-07-20 21:25:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},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-workflowtp68z/series-workflowtp68z-convert-artifact-2466054214/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-20 21:25:33 +0000 UTC FinishedAt: 2026-07-20 21:25:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-20 21:25:33 +0000 UTC FinishedAt: 2026-07-20 21:25:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-20 21:25:33 +0000 UTC FinishedAt: 2026-07-20 21:25:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-20 21:26:06 +0000 UTC FinishedAt: 2026-07-21 00:29:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtp68z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","__memcg_slab_post_alloc_hook","__memcg_slab_free_hook","__kfence_free","__kmem_cache_create_args"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d9e6a7623938968e3752b67e37eaff097e559a54","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT","MEMCG","KFENCE"],"series_id":"0fd7084c-401f-4f77-b4a6-156a8024ba85","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-20 21:26:06 +0000 UTC FinishedAt: 2026-07-21 00:29:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a0426bf3-df5c-4477-b1c3-7f4fb2cbe1be,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a36474ec-9499-4125-bf41-c67c9079cf60,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-workflowtp68z/series-workflowtp68z-build-action-1531928132/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-workflowtp68z/series-workflowtp68z-build-action-3168793565/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-workflowtp68z/series-workflowtp68z-convert-artifact-2466054214/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,}