Name: series-workflowrvxwp Phase: Succeeded StartedAt: 2026-09-02 20:29:15 +0000 UTC FinishedAt: 2026-09-03 00:30:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrvxwp[0] Phase: Succeeded StartedAt: 2026-09-02 20:29:15 +0000 UTC FinishedAt: 2026-09-02 20:47:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrvxwp[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 20:29:15 +0000 UTC FinishedAt: 2026-09-02 20:47:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "73ae59e975966d24e32926247ddb45a537ebe184", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "73ae59e975966d24e32926247ddb45a537ebe184", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "ee0ea3a3-2d50-4009-9667-0e124ec7769c" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_mark_chain_precision", "bpf_check" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uJiMzNDssCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBzY2FsYXIgcHJlY2lzaW9uIGJhY2t0cmFja2luZyBsb2dpYyBpbiBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AgdG8gcHJvcGVybHkgdXBkYXRlIHRoZSBzdWJwcm9ncmFtIGNhbGwgZnJhbWUgKGBidF9zdWJwcm9nX2VudGVyYCkgd2hlbiBiYWNrdHJhY2tpbmcgdGhlIGltcGxpY2l0IGVhcmx5IGV4aXQgcGF0aCBvZiBgQlBGX0xEIHwgQlBGX0FCU2AgYW5kIGBCUEZfTEQgfCBCUEZfSU5EYCBpbnN0cnVjdGlvbnMuIFxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHZlcmlmaWVyIGJyYW5jaGVzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdGhzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gZnJhbWUgaW5kZXhpbmcgZXJyb3JzIG9yIHZlcmlmaWVyIHN0YXRlIGNvcnJ1cHRpb24gd291bGQgbWFuaWZlc3QgYXMgY29udHJvbCBmbG93IGZhdWx0cywgYXNzZXJ0aW9ucywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aGljaCBhcmUgYWxyZWFkeSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBzY2FsYXIgcHJlY2lzaW9uIGJhY2t0cmFja2luZyBsb2dpYyBpbiBiYWNrdHJhY2tfaW5zbigpIGZvciBCUEZfTEQgKHNwZWNpZmljYWxseSBCUEZfQUJTL0JQRl9JTkQgaW5zdHJ1Y3Rpb25zIHdpdGggaW1wbGljaXQgc3VicHJvZ3JhbSBleGl0IGJyYW5jaGVzKSB0byBwcm9wZXJseSBhZGp1c3QgdGhlIGJhY2t0cmFjayBjYWxsIGZyYW1lIGFuZCBwcmV2ZW50IHZlcmlmaWVyIGNyYXNoZXMvc2VnZmF1bHRzLiBUaGlzIGlzIGNvcmUgdmVyaWZpZXIgbG9naWMgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQpIHN5c2NhbGwgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwNjM1OWU0NzQ4MWNmMjM3MzBjNTkyMGFjMmRiYmUwNmQ1YTRmODEyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMDo0NTo0NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jIGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xuaW5kZXggYTJiMThhOWYxNjk0Yy4uZWFmNzQzOGI5ZWJmOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbkBAIC01ODIsMTYgJiM0Mzs1ODIsMjkgQEAgc3RhdGljIGludCBiYWNrdHJhY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LCBpbnQgc3Vic2VxX2lkeCxcbiBcdFx0XHQgICovXG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEKSB7XG4tXHRcdGlmICghYnRfaXNfcmVnX3NldChidCwgZHJlZykpXG4tXHRcdFx0cmV0dXJuIDA7XG4tXHRcdGJ0X2NsZWFyX3JlZyhidCwgZHJlZyk7XG4gXHRcdC8qIEl0JiMzOTtzIGxkX2ltbTY0IG9yIGxkX2FicyBvciBsZF9pbmQuXG4gXHRcdCAqIEZvciBsZF9pbW02NCBubyBmdXJ0aGVyIHRyYWNraW5nIG9mIHByZWNpc2lvblxuIFx0XHQgKiBpbnRvIHBhcmVudCBpcyBuZWNlc3NhcnlcbiBcdFx0ICovXG4tXHRcdGlmIChtb2RlID09IEJQRl9JTkQgfHwgbW9kZSA9PSBCUEZfQUJTKVxuLVx0XHRcdC8qIHRvIGJlIGFuYWx5emVkICovXG4tXHRcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbiYjNDM7XHRcdGlmIChtb2RlID09IEJQRl9JTU0pIHtcbiYjNDM7XHRcdFx0YnRfY2xlYXJfcmVnKGJ0LCBkcmVnKTtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQlBGX3tJTkQsQUJTfSBhcmUgbW9kZWxsZWQgYXMgdHdvIGJyYW5jaGVzOlxuJiM0MztcdFx0ICogLSBmYWxsdGhyb3VnaDtcbiYjNDM7XHRcdCAqIC0gaW1wbGljaXQgc3VicHJvZ3JhbSBleGl0LlxuJiM0MztcdFx0ICogSXQgaXMgbmVjZXNzYXJ5IHRvIHN3aXRjaCBjdXJyZW50IGZyYW1lIGlmXG4mIzQzO1x0XHQgKiBpbXBsaWNpdCBzdWJwcm9ncmFtIGV4aXQgYnJhbmNoIGlzIGJhY2t0cmFja2VkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAobW9kZSA9PSBCUEZfSU5EIHx8IG1vZGUgPT0gQlBGX0FCUykge1xuJiM0MztcdFx0XHRpZiAoYnRfaXNfcmVnX3NldChidCwgZHJlZykpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbiYjNDM7XHRcdFx0aWYgKHN1YnNlcV9pZHggIT0gaWR4ICYjNDM7IDEpXG4mIzQzO1x0XHRcdFx0aWYgKGJ0X3N1YnByb2dfZW50ZXIoYnQpKVxuJiM0MztcdFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0fVxuIFx0fVxuIFx0LyogUHJvcGFnYXRlIHByZWNpc2lvbiBtYXJrcyB0byBsaW5rZWQgcmVnaXN0ZXJzLCB0byBhY2NvdW50IGZvclxuIFx0ICogcmVnaXN0ZXJzIG1hcmtlZCBhcyBwcmVjaXNlIGluIHRoaXMgZnVuY3Rpb24uXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3N1YnByb2dfcHJlY2lzaW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3VicHJvZ19wcmVjaXNpb24uY1xuaW5kZXggZDIxZDMyZjZhNjc2MC4uZTE3NGE5MDVjNTYyOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zdWJwcm9nX3ByZWNpc2lvbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3VicHJvZ19wcmVjaXNpb24uY1xuQEAgLTg0Niw0ICYjNDM7ODQ2LDU1IEBAIF9fbmFrZWQgaW50IHN1YnByb2dfcmVzdWx0X3RhaWxfY2FsbCh2b2lkKVxuIFx0KTtcbiB9XG4gXG4mIzQzO19fbmFrZWQgX19ub2lubGluZSBfX3VzZWRcbiYjNDM7c3RhdGljIGludCBsZF9hYnNfc3VicHJvZyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcbiYjNDM7XHRcdFwmIzM0O3I2ID0gcjE7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtyNyA9IHIxO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7LjhieXRlICVbbGRfYWJzXTtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O2V4aXQ7XCYjMzQ7XG4mIzQzO1x0XHQ6XG4mIzQzO1x0XHQ6IF9faW1tX2luc24obGRfYWJzLCBCUEZfTERfQUJTKEJQRl9XLCAwKSlcbiYjNDM7XHRcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEJ1Z2d5IHZlcmlmaWVyIGRpZCBub3QgcHJvcGVybHkgYmFja3RyYWNrIGVhcmx5IHN1YnByb2dyYW0gZXhpdFxuJiM0MzsgKiBtb2RlbGxlZCBmb3IgQlBGX0xEIHwgQlBGX0FCUyBpbnN0cnVjdGlvbiwgY2F1c2luZyBhIHNlZ2ZhdWx0LlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO19fbG9nX2xldmVsKDIpXG4mIzQzOy8qIGVhcmx5IGV4aXQgcGF0aCAqL1xuJiM0MztfX21zZyhcJiMzNDszOiAoMGYpIHIxICYjNDM7PSByN1wmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSAyOiAoYmYpIHIxID0gcjEwXCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDttYXJrX3ByZWNpc2U6IGZyYW1lMDogcmVncz1yNyBzdGFjaz0gYmVmb3JlIDk6ICgyMCkgcjAgPSAqKHUzMiAqKXNrYlswXVwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgODogKGJmKSByNyA9IHIxXCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDttYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSA3OiAoYmYpIHI2ID0gcjFcJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDE6ICg4NSkgY2FsbCBwYyYjNDM7NVwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSAwOiAoYjcpIHI3ID0gLThcJiMzNDspXG4mIzQzOy8qIGZhbGx0aHJvdWdoIHBhdGggKi9cbiYjNDM7X19tc2coXCYjMzQ7MzogKDBmKSByMSAmIzQzOz0gcjdcJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUwOiByZWdzPXI3IHN0YWNrPSBiZWZvcmUgMjogKGJmKSByMSA9IHIxMFwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSAxMDogKDk1KSBleGl0XCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDttYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSA5OiAoMjApIHIwID0gKih1MzIgKilza2JbMF1cJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDg6IChiZikgcjcgPSByMVwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgNzogKGJmKSByNiA9IHIxXCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDttYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSAxOiAoODUpIGNhbGwgcGMmIzQzOzVcJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUwOiByZWdzPXI3IHN0YWNrPSBiZWZvcmUgMDogKGI3KSByNyA9IC04XCYjMzQ7KVxuJiM0MztfX25ha2VkIGludCBsZF9hYnNfYmFja3RyYWNrX2JvdGhfcGF0aHModm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXG4mIzQzO1x0XHRcJiMzNDtyNyA9IC04O1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7Y2FsbCBsZF9hYnNfc3VicHJvZztcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O3IxID0gcjEwO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjEgJiM0Mzs9IHI3O1wmIzM0OyAvKiBtYXJrIHI3IGFzIHByZWNpc2UgKi9cbiYjNDM7XHRcdFwmIzM0OyoodTY0ICopKHIxICYjNDM7IDApID0gMDtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O3IwID0gMDtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O2V4aXQ7XCYjMzQ7XG4mIzQzO1x0XHQ6OjogX19jbG9iYmVyX2FsbFxuJiM0MztcdCk7XG4mIzQzO31cbiYjNDM7XG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9tYXJrX2NoYWluX3ByZWNpc2lvbiYjMzQ7LAogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBzY2FsYXIgcHJlY2lzaW9uIGJhY2t0cmFja2luZyBsb2dpYyBpbiBiYWNrdHJhY2tfaW5zbigpIGZvciBCUEZfTEQgKHNwZWNpZmljYWxseSBCUEZfQUJTL0JQRl9JTkQgaW5zdHJ1Y3Rpb25zIHdpdGggaW1wbGljaXQgc3VicHJvZ3JhbSBleGl0IGJyYW5jaGVzKSB0byBwcm9wZXJseSBhZGp1c3QgdGhlIGJhY2t0cmFjayBjYWxsIGZyYW1lIGFuZCBwcmV2ZW50IHZlcmlmaWVyIGNyYXNoZXMvc2VnZmF1bHRzLiBUaGlzIGlzIGNvcmUgdmVyaWZpZXIgbG9naWMgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQpIHN5c2NhbGwgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNjM1OWU0NzQ4MWNmMjM3MzBjNTkyMGFjMmRiYmUwNmQ1YTRmODEyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAyMDo0NTo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYmFja3RyYWNrLmMgYi9rZXJuZWwvYnBmL2JhY2t0cmFjay5jCmluZGV4IGEyYjE4YTlmMTY5NGMuLmVhZjc0MzhiOWViZjkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvYmFja3RyYWNrLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9iYWNrdHJhY2suYwpAQCAtNTgyLDE2ICYjNDM7NTgyLDI5IEBAIHN0YXRpYyBpbnQgYmFja3RyYWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCwgaW50IHN1YnNlcV9pZHgsCiAJCQkgICovCiAJCX0KIAl9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9MRCkgewotCQlpZiAoIWJ0X2lzX3JlZ19zZXQoYnQsIGRyZWcpKQotCQkJcmV0dXJuIDA7Ci0JCWJ0X2NsZWFyX3JlZyhidCwgZHJlZyk7CiAJCS8qIEl0JiMzOTtzIGxkX2ltbTY0IG9yIGxkX2FicyBvciBsZF9pbmQuCiAJCSAqIEZvciBsZF9pbW02NCBubyBmdXJ0aGVyIHRyYWNraW5nIG9mIHByZWNpc2lvbgogCQkgKiBpbnRvIHBhcmVudCBpcyBuZWNlc3NhcnkKIAkJICovCi0JCWlmIChtb2RlID09IEJQRl9JTkQgfHwgbW9kZSA9PSBCUEZfQUJTKQotCQkJLyogdG8gYmUgYW5hbHl6ZWQgKi8KLQkJCXJldHVybiAtRU5PVFNVUFA7CiYjNDM7CQlpZiAobW9kZSA9PSBCUEZfSU1NKSB7CiYjNDM7CQkJYnRfY2xlYXJfcmVnKGJ0LCBkcmVnKTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsJCS8qCiYjNDM7CQkgKiBCUEZfe0lORCxBQlN9IGFyZSBtb2RlbGxlZCBhcyB0d28gYnJhbmNoZXM6CiYjNDM7CQkgKiAtIGZhbGx0aHJvdWdoOwomIzQzOwkJICogLSBpbXBsaWNpdCBzdWJwcm9ncmFtIGV4aXQuCiYjNDM7CQkgKiBJdCBpcyBuZWNlc3NhcnkgdG8gc3dpdGNoIGN1cnJlbnQgZnJhbWUgaWYKJiM0MzsJCSAqIGltcGxpY2l0IHN1YnByb2dyYW0gZXhpdCBicmFuY2ggaXMgYmFja3RyYWNrZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChtb2RlID09IEJQRl9JTkQgfHwgbW9kZSA9PSBCUEZfQUJTKSB7CiYjNDM7CQkJaWYgKGJ0X2lzX3JlZ19zZXQoYnQsIGRyZWcpKQomIzQzOwkJCQlyZXR1cm4gLUVOT1RTVVBQOwomIzQzOwkJCWlmIChzdWJzZXFfaWR4ICE9IGlkeCAmIzQzOyAxKQomIzQzOwkJCQlpZiAoYnRfc3VicHJvZ19lbnRlcihidCkpCiYjNDM7CQkJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KIAl9CiAJLyogUHJvcGFnYXRlIHByZWNpc2lvbiBtYXJrcyB0byBsaW5rZWQgcmVnaXN0ZXJzLCB0byBhY2NvdW50IGZvcgogCSAqIHJlZ2lzdGVycyBtYXJrZWQgYXMgcHJlY2lzZSBpbiB0aGlzIGZ1bmN0aW9uLgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3N1YnByb2dfcHJlY2lzaW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3VicHJvZ19wcmVjaXNpb24uYwppbmRleCBkMjFkMzJmNmE2NzYwLi5lMTc0YTkwNWM1NjI4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3VicHJvZ19wcmVjaXNpb24uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3VicHJvZ19wcmVjaXNpb24uYwpAQCAtODQ2LDQgJiM0Mzs4NDYsNTUgQEAgX19uYWtlZCBpbnQgc3VicHJvZ19yZXN1bHRfdGFpbF9jYWxsKHZvaWQpCiAJKTsKIH0KIAomIzQzO19fbmFrZWQgX19ub2lubGluZSBfX3VzZWQKJiM0MztzdGF0aWMgaW50IGxkX2Fic19zdWJwcm9nKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkJJiMzNDtyNiA9IHIxOyYjMzQ7CiYjNDM7CQkmIzM0O3I3ID0gcjE7JiMzNDsKJiM0MzsJCSYjMzQ7LjhieXRlICVbbGRfYWJzXTsmIzM0OwomIzQzOwkJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CQk6CiYjNDM7CQk6IF9faW1tX2luc24obGRfYWJzLCBCUEZfTERfQUJTKEJQRl9XLCAwKSkKJiM0MzsJCTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQnVnZ3kgdmVyaWZpZXIgZGlkIG5vdCBwcm9wZXJseSBiYWNrdHJhY2sgZWFybHkgc3VicHJvZ3JhbSBleGl0CiYjNDM7ICogbW9kZWxsZWQgZm9yIEJQRl9MRCB8IEJQRl9BQlMgaW5zdHJ1Y3Rpb24sIGNhdXNpbmcgYSBzZWdmYXVsdC4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztfX2xvZ19sZXZlbCgyKQomIzQzOy8qIGVhcmx5IGV4aXQgcGF0aCAqLwomIzQzO19fbXNnKCYjMzQ7MzogKDBmKSByMSAmIzQzOz0gcjcmIzM0OykKJiM0MztfX21zZygmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUwOiByZWdzPXI3IHN0YWNrPSBiZWZvcmUgMjogKGJmKSByMSA9IHIxMCYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSA5OiAoMjApIHIwID0gKih1MzIgKilza2JbMF0mIzM0OykKJiM0MztfX21zZygmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDg6IChiZikgcjcgPSByMSYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgNzogKGJmKSByNiA9IHIxJiMzNDspCiYjNDM7X19tc2coJiMzNDttYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSAxOiAoODUpIGNhbGwgcGMmIzQzOzUmIzM0OykKJiM0MztfX21zZygmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUwOiByZWdzPXI3IHN0YWNrPSBiZWZvcmUgMDogKGI3KSByNyA9IC04JiMzNDspCiYjNDM7LyogZmFsbHRocm91Z2ggcGF0aCAqLwomIzQzO19fbXNnKCYjMzQ7MzogKDBmKSByMSAmIzQzOz0gcjcmIzM0OykKJiM0MztfX21zZygmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUwOiByZWdzPXI3IHN0YWNrPSBiZWZvcmUgMjogKGJmKSByMSA9IHIxMCYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSAxMDogKDk1KSBleGl0JiMzNDspCiYjNDM7X19tc2coJiMzNDttYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSA5OiAoMjApIHIwID0gKih1MzIgKilza2JbMF0mIzM0OykKJiM0MztfX21zZygmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDg6IChiZikgcjcgPSByMSYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgNzogKGJmKSByNiA9IHIxJiMzNDspCiYjNDM7X19tc2coJiMzNDttYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSAxOiAoODUpIGNhbGwgcGMmIzQzOzUmIzM0OykKJiM0MztfX21zZygmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUwOiByZWdzPXI3IHN0YWNrPSBiZWZvcmUgMDogKGI3KSByNyA9IC04JiMzNDspCiYjNDM7X19uYWtlZCBpbnQgbGRfYWJzX2JhY2t0cmFja19ib3RoX3BhdGhzKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkJJiMzNDtyNyA9IC04OyYjMzQ7CiYjNDM7CQkmIzM0O2NhbGwgbGRfYWJzX3N1YnByb2c7JiMzNDsKJiM0MzsJCSYjMzQ7cjEgPSByMTA7JiMzNDsKJiM0MzsJCSYjMzQ7cjEgJiM0Mzs9IHI3OyYjMzQ7IC8qIG1hcmsgcjcgYXMgcHJlY2lzZSAqLwomIzQzOwkJJiMzNDsqKHU2NCAqKShyMSAmIzQzOyAwKSA9IDA7JiMzNDsKJiM0MzsJCSYjMzQ7cjAgPSAwOyYjMzQ7CiYjNDM7CQkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJCTo6OiBfX2Nsb2JiZXJfYWxsCiYjNDM7CSk7CiYjNDM7fQomIzQzOwogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzMyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIEJhY2t0cmFjayBJbXBsZW1lbnRhdGlvbioqCgpSaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBnZXQgYSBoYW5kbGUgb24gdGhpcyAmIzM0O2JhY2t0cmFjayYjMzQ7IGxvZ2ljLiBJIGtub3cgdGhlIHBhdGNoIGlzIGluIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYCwgYW5kIHRoYXQgdGhlcmUgc2hvdWxkIGJlIHNvbWUgc2VsZnRlc3RzIGFzc29jaWF0ZWQgd2l0aCBpdC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBnZXR0aW5nIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpdHNlbGYsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgQlBGIHZlcmlmaWVyIGFuZCBLY29uZmlnIHN5c3RlbS4KCk15IHBsYW4gaXMgdG8gZGlnIGludG8gYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgIGRpcmVjdGx5LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSBzdGFuZGFyZCB0b29sa2l0IGZvciB0aGlzIOKAkyBlaXRoZXIgZ3JlcHBpbmcgdGhyb3VnaCB0aGUgY29kZSBmb3IgZnVuY3Rpb24gY2FsbHMgYW5kIGRlcGVuZGVuY2llcywgb3IgSSBtaWdodCBzaW1wbHkgcmVhZCB0aGUgZmlsZSBkaXJlY3RseSwgZGVwZW5kaW5nIG9uIGhvdyBjb21wbGV4IGl0IGlzLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgbG9va2luZyBmb3IgdGhlIGVudHJ5IHBvaW50cyB0aGF0IHRyaWdnZXIgdGhlIGJhY2t0cmFjayBsb2dpYyB3aXRoaW4gdGhlIHZlcmlmaWVyIGFuZCBhbnkgS2NvbmZpZyBvcHRpb25zIHRoYXQgZW5hYmxlIG9yIGRpc2FibGUgaXQuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGVsZW1lbnRzIGFyZSBjb25uZWN0ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIHdpbGwgYmUgY3J1Y2lhbDsgaXTigJlzIGxpa2VseSB0aGF0IHRoZSBiYWNrdHJhY2sgZnVuY3Rpb25hbGl0eSBpcyBjb25kaXRpb25hbCBvbiBjZXJ0YWluIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWFya19jaGFpbl9wcmVjaXNpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYmFja3RyYWNrLmM9NjY4PXZvaWQgYnBmX21hcmtfYWxsX3NjYWxhcnNfcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNjgzLVx0ICogYmVjYXVzZSBwcmVjaXNpb24gbWFya2luZ3MgaW4gY3VycmVudCBub24tY2hlY2twb2ludGVkIHN0YXRlIGFyZVxua2VybmVsL2JwZi9iYWNrdHJhY2suYzo2ODQ6XHQgKiBub3QgbmVlZGVkLiBTZWUgd2h5IGluIHRoZSBjb21tZW50IGluIF9fbWFya19jaGFpbl9wcmVjaXNpb24gYmVsb3cuXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTY4NS1cdCAqL1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9MTIzOT1pbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTU2OC1cbmtlcm5lbC9icGYvc3RhdGVzLmM6MTU2OTpcdC8qIGZvcmdldCBwcmVjaXNlIG1hcmtpbmdzIHdlIGluaGVyaXRlZCwgc2VlIF9fbWFya19jaGFpbl9wcmVjaXNpb24gKi9cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTU3MC1cdGlmIChlbnYtXHUwMDNlYnBmX2NhcGFibGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkyOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZmlsZXMsIGFzIGlmIEkmIzM5O20gdGhpbmtpbmcgaXQgdGhyb3VnaDoKCioqQW5hbHl6aW5nIEJQRiBCYWNrdHJhY2tpbmcgYW5kIFZlcmlmaWNhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AgYW5kIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBMZXQmIzM5O3MgcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZSBCUEYgdmVyaWZpZXIgaGFuZGxlcyBwb3RlbnRpYWxseSBjb21wbGV4IEJQRiBwcm9ncmFtcyBhbmQgd2hhdCBvcHRpbWl6YXRpb25zIG9yIGJhY2t0cmFja2luZyBtZXRob2RzIGFyZSBpbiBwbGF5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHZlcmlmaWVyJiMzOTtzIGxvZ2ljIGludGVyYWN0cyB3aXRoIHRoZSBiYWNrdHJhY2tpbmcgbWVjaGFuaXNtcy4KCkkgc3VzcGVjdCB0aGF0IGBiYWNrdHJhY2suY2AgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyBzaXR1YXRpb25zIHdoZXJlIHRoZSBpbml0aWFsIGFuYWx5c2lzIGlzIHRvbyBjb25zZXJ2YXRpdmUgb3IgZW5jb3VudGVycyBjb250cm9sIGZsb3cgdGhhdCBpdCBzdHJ1Z2dsZXMgd2l0aCBkdXJpbmcgaW5pdGlhbCBzdGF0aWMgYW5hbHlzaXMuIElzIGl0IGJhc2VkIG9uIGEgbGltaXRlZCBleHBsb3JhdGlvbiBvZiBwb3NzaWJsZSBleGVjdXRpb24gcGF0aHM/IElzIGl0IHNvbWUgc29ydCBvZiBhIGxpbWl0ZWQgZm9ybSBvZiBzeW1ib2xpYyBleGVjdXRpb24/IEl0IHNob3VsZCB0cnkgdG8gZmluZCB3YXlzIHRvIG1ha2UgaXQgbW9yZSBwcmVjaXNlLgoKQW5kIHRoZW4gdGhlIGB2ZXJpZmllci5jYCBmaWxlIOKAkyB0aGF0JiMzOTtzIHRoZSBjb3JlLiBJIGV4cGVjdCB0byBzZWUgdGhlIG1haW4gc3RhdGUgbWFjaGluZXMgYW5kIGRhdGEgc3RydWN0dXJlcyBvZiB0aGUgdmVyaWZpZXIgaW4gdGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgYmFja3RyYWNraW5nIGludGVyZmFjZXMgd2l0aCB0aGUgcmVndWxhciB2ZXJpZmljYXRpb24gcHJvY2Vzcy4gSXMgaXQgY2FsbGVkIGluIHJlc3BvbnNlIHRvIGEgc3BlY2lmaWMgY29uZGl0aW9uLCBvciBpcyBpdCBtb3JlIGludGVncmF0ZWQ/IElzIHRoZSBiYWNrdHJhY2tpbmcgdXNlZCB0byByZXNvbHZlIGluZGlyZWN0IGp1bXBzIG9yIGNvbXBsZXggbG9vcCBzdHJ1Y3R1cmVzPyBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgdmVyaWZpZXIgZW5zdXJlcyB0aGF0IHRoZSBCUEYgcHJvZ3JhbSBpcyBzYWZlIHRvIGV4ZWN1dGUsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgbWVtb3J5IGFjY2VzcyBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSXQmIzM5O3MgcHJvYmFibHkgYSBzdGF0ZWZ1bCBwcm9jZXNzLiBEb2VzIGl0IGNoZWNrIGZvciB0aGluZ3MgbGlrZSBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcywgdW5pbml0aWFsaXplZCBkYXRhIGFjY2VzcywgYW5kIGluZmluaXRlIGxvb3BzPwoKSSBhbSBhbHNvIGludGVyZXN0ZWQgaW4gdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgYmFja3RyYWNraW5nIHN0cmF0ZWdpZXMgb24gcGVyZm9ybWFuY2UuIEFyZSB0aGVyZSB0cmFkZS1vZmZzIGJldHdlZW4gdGhvcm91Z2huZXNzIGFuZCBzcGVlZD8gSG93IGFyZSB0aGVzZSB0cmFkZS1vZmZzIG1hbmFnZWQgaW4gdGhlIGNvZGU/IElzIHRoZXJlIGEgd2F5IHRvIHR3ZWFrIHRoZSBiYWNrdHJhY2tpbmcgYmVoYXZpb3I/CgpUaW1lIHRvIGRpZyBpbi4gVGhpcyBpcyBnb2luZyB0byBiZSBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYmFja3RyYWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU4MDpcdFx0XHRcdCAgKiB0aGlzIGluc24sIHNvIGZvciB0aGUgSy1iYXNlZCBjb25kaXRpb25hbFxuIDU4MTpcdFx0XHRcdCAgKiB0aGVyZSBpcyBub3RoaW5nIG5ldyB0byBiZSBtYXJrZWQuXG4gNTgyOlx0XHRcdFx0ICAqL1xuIDU4MzpcdFx0XHR9XG4gNTg0Olx0XHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9MRCkge1xuIDU4NTpcdFx0XHQvKiBJdCYjMzk7cyBsZF9pbW02NCBvciBsZF9hYnMgb3IgbGRfaW5kLlxuIDU4NjpcdFx0XHQgKiBGb3IgbGRfaW1tNjQgbm8gZnVydGhlciB0cmFja2luZyBvZiBwcmVjaXNpb25cbiA1ODc6XHRcdFx0ICogaW50byBwYXJlbnQgaXMgbmVjZXNzYXJ5XG4gNTg4Olx0XHRcdCAqL1xuIDU4OTpcdFx0XHRpZiAobW9kZSA9PSBCUEZfSU1NKSB7XG4gNTkwOlx0XHRcdFx0YnRfY2xlYXJfcmVnKGJ0LCBkcmVnKTtcbiA1OTE6XHRcdFx0XHRyZXR1cm4gMDtcbiA1OTI6XHRcdFx0fVxuIDU5MzpcdFx0XHQvKlxuIDU5NDpcdFx0XHQgKiBCUEZfe0lORCxBQlN9IGFyZSBtb2RlbGxlZCBhcyB0d28gYnJhbmNoZXM6XG4gNTk1Olx0XHRcdCAqIC0gZmFsbHRocm91Z2g7XG4gNTk2Olx0XHRcdCAqIC0gaW1wbGljaXQgc3VicHJvZ3JhbSBleGl0LlxuIDU5NzpcdFx0XHQgKiBJdCBpcyBuZWNlc3NhcnkgdG8gc3dpdGNoIGN1cnJlbnQgZnJhbWUgaWZcbiA1OTg6XHRcdFx0ICogaW1wbGljaXQgc3VicHJvZ3JhbSBleGl0IGJyYW5jaCBpcyBiYWNrdHJhY2tlZC5cbiA1OTk6XHRcdFx0ICovXG4gNjAwOlx0XHRcdGlmIChtb2RlID09IEJQRl9JTkQgfHwgbW9kZSA9PSBCUEZfQUJTKSB7XG4gNjAxOlx0XHRcdFx0aWYgKGJ0X2lzX3JlZ19zZXQoYnQsIGRyZWcpKVxuIDYwMjpcdFx0XHRcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbiA2MDM6XHRcdFx0XHRpZiAoc3Vic2VxX2lkeCAhPSBpZHggJiM0MzsgMSlcbiA2MDQ6XHRcdFx0XHRcdGlmIChidF9zdWJwcm9nX2VudGVyKGJ0KSlcbiA2MDU6XHRcdFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gNjA2Olx0XHRcdFx0cmV0dXJuIDA7XG4gNjA3Olx0XHRcdH1cbiA2MDg6XHRcdH1cbiA2MDk6XHRcdC8qIFByb3BhZ2F0ZSBwcmVjaXNpb24gbWFya3MgdG8gbGlua2VkIHJlZ2lzdGVycywgdG8gYWNjb3VudCBmb3JcbiA2MTA6XHRcdCAqIHJlZ2lzdGVycyBtYXJrZWQgYXMgcHJlY2lzZSBpbiB0aGlzIGZ1bmN0aW9uLlxuIDYxMTpcdFx0ICovXG4gNjEyOlx0XHRicGZfYnRfc3luY19saW5rZWRfcmVncyhidCwgaGlzdCk7XG4gNjEzOlx0XHRyZXR1cm4gMDtcbiA2MTQ6XHR9XG4gNjE1Olx0XG4gNjE2Olx0LyogdGhlIHNjYWxhciBwcmVjaXNpb24gdHJhY2tpbmcgYWxnb3JpdGhtOlxuIDYxNzpcdCAqIC4gYXQgdGhlIHN0YXJ0IGFsbCByZWdpc3RlcnMgaGF2ZSBwcmVjaXNlPWZhbHNlLlxuIDYxODpcdCAqIC4gc2NhbGFyIHJhbmdlcyBhcmUgdHJhY2tlZCBhcyBub3JtYWwgdGhyb3VnaCBhbHUgYW5kIGptcCBpbnNucy5cbiA2MTk6XHQgKiAuIG9uY2UgcHJlY2lzZSB2YWx1ZSBvZiB0aGUgc2NhbGFyIHJlZ2lzdGVyIGlzIHVzZWQgaW46XG4gNjIwOlx0ICogICAuICBwdHIgJiM0Mzsgc2NhbGFyIGFsdVxuIDYyMTpcdCAqICAgLiBpZiAoc2NhbGFyIGNvbmQgS3xzY2FsYXIpXG4gNjIyOlx0ICogICAuICBoZWxwZXJfY2FsbCguLiwgc2NhbGFyLCAuLi4pIHdoZXJlIEFSR19DT05TVCBpcyBleHBlY3RlZFxuIDYyMzpcdCAqICAgYmFja3RyYWNrIHRocm91Z2ggdGhlIHZlcmlmaWVyIHN0YXRlcyBhbmQgbWFyayBhbGwgcmVnaXN0ZXJzIGFuZFxuIDYyNDpcdCAqICAgc3RhY2sgc2xvdHMgd2l0aCBzcGlsbGVkIGNvbnN0YW50cyB0aGF0IHRoZXNlIHNjYWxhciByZWdpc3RlcnNcbiA2MjU6XHQgKiAgIHNob3VsZCBiZSBwcmVjaXNlLlxuIDYyNjpcdCAqIC4gZHVyaW5nIHN0YXRlIHBydW5pbmcgdHdvIHJlZ2lzdGVycyAob3Igc3BpbGxlZCBzdGFjayBzbG90cylcbiA2Mjc6XHQgKiAgIGFyZSBlcXVpdmFsZW50IGlmIGJvdGggYXJlIG5vdCBwcmVjaXNlLlxuIDYyODpcdCAqXG4gNjI5Olx0ICogTm90ZSB0aGUgdmVyaWZpZXIgY2Fubm90IHNpbXBseSB3YWxrIHJlZ2lzdGVyIHBhcmVudGFnZSBjaGFpbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTU2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYCoqCgpBbHJpZ2h0LCBJJiMzOTttIGhlYWRpbmcgaW50byBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AuIE15IGdvYWwgaGVyZSBpcyBzdHJhaWdodGZvcndhcmQ6IEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRoZSByZWxldmFudCBBUEkgc3VyZmFjZSBvZiB0aGlzIG1vZHVsZS4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gaWRlbnRpZnkgdGhvc2UgY3J1Y2lhbCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgb3IgYXJlIGludGVuZGVkIGFzIHRoZSBpbml0aWFsIGVudHJ5IHBvaW50LiBTbywgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZXhwb3J0ZWQgc3ltYm9scywgdGhlIG5vbi1zdGF0aWMgb25lcywgYW5kIGFueSBvYnZpb3VzIGVudHJ5IHBvaW50cy4gSSYjMzk7bSBza2lwcGluZyB0aGUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3Igbm93OyBJIGNhbiBhbHdheXMgY29tZSBiYWNrIHRvIHRob3NlIGlmIHRoZSBoaWdoLWxldmVsIHBpY3R1cmUgaXNuJiMzOTt0IGNsZWFyIGVub3VnaC4gVGhpcyBpcyBhYm91dCBlZmZpY2llbnQgY29kZSBuYXZpZ2F0aW9uLCBub3QgYSBkZWVwIGRpdmUgaW50byBldmVyeSBsaW5lIGp1c3QgeWV0LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYmFja3RyYWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NjA6XHQgKlxuIDY2MTpcdCAqIEFsc28gaWYgcGFyZW50JiMzOTtzIGN1cmZyYW1lIFx1MDAzZSBmcmFtZSB3aGVyZSBiYWNrdHJhY2tpbmcgc3RhcnRlZCxcbiA2NjI6XHQgKiB0aGUgdmVyaWZpZXIgbmVlZCB0byBtYXJrIHJlZ2lzdGVycyBpbiBib3RoIGZyYW1lcywgb3RoZXJ3aXNlIGNhbGxlZXNcbiA2NjM6XHQgKiBtYXkgaW5jb3JyZWN0bHkgcHJ1bmUgY2FsbGVycy4gVGhpcyBpcyBzaW1pbGFyIHRvXG4gNjY0Olx0ICogY29tbWl0IDc2NDBlYWQ5MzkyNCAoXCYjMzQ7YnBmOiB2ZXJpZmllcjogbWFrZSBzdXJlIGNhbGxlZXMgZG9uJiMzOTt0IHBydW5lIHdpdGggY2FsbGVyIGRpZmZlcmVuY2VzXCYjMzQ7KVxuIDY2NTpcdCAqXG4gNjY2Olx0ICogRm9yIG5vdyBiYWNrdHJhY2tpbmcgZmFsbHMgYmFjayBpbnRvIGNvbnNlcnZhdGl2ZSBtYXJraW5nLlxuIDY2NzpcdCAqL1xuIDY2ODpcdHZvaWQgYnBmX21hcmtfYWxsX3NjYWxhcnNfcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIDY2OTpcdFx0XHRcdFx0IHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0KVxuIDY3MDpcdHtcbiA2NzE6XHRcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqZnVuYztcbiA2NzI6XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XG4gNjczOlx0XHRpbnQgaSwgajtcbiA2NzQ6XHRcbiA2NzU6XHRcdGlmIChlbnYtXHUwMDNlbG9nLmxldmVsIFx1MDAyNiBCUEZfTE9HX0xFVkVMMikge1xuIDY3NjpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZSVkOiBmYWxsaW5nIGJhY2sgdG8gZm9yY2luZyBhbGwgc2NhbGFycyBwcmVjaXNlXFxuXCYjMzQ7LFxuIDY3NzpcdFx0XHRcdHN0LVx1MDAzZWN1cmZyYW1lKTtcbiA2Nzg6XHRcdH1cbiA2Nzk6XHRcbiA2ODA6XHRcdC8qIGJpZyBoYW1tZXI6IG1hcmsgYWxsIHNjYWxhcnMgcHJlY2lzZSBpbiB0aGlzIHBhdGguXG4gNjgxOlx0XHQgKiBwb3Bfc3RhY2sgbWF5IHN0aWxsIGdldCAhcHJlY2lzZSBzY2FsYXJzLlxuIDY4MjpcdFx0ICogV2UgYWxzbyBza2lwIGN1cnJlbnQgc3RhdGUgYW5kIGdvIHN0cmFpZ2h0IHRvIGZpcnN0IHBhcmVudCBzdGF0ZSxcbiA2ODM6XHRcdCAqIGJlY2F1c2UgcHJlY2lzaW9uIG1hcmtpbmdzIGluIGN1cnJlbnQgbm9uLWNoZWNrcG9pbnRlZCBzdGF0ZSBhcmVcbiA2ODQ6XHRcdCAqIG5vdCBuZWVkZWQuIFNlZSB3aHkgaW4gdGhlIGNvbW1lbnQgaW4gX19tYXJrX2NoYWluX3ByZWNpc2lvbiBiZWxvdy5cbiA2ODU6XHRcdCAqL1xuIDY4NjpcdFx0Zm9yIChzdCA9IHN0LVx1MDAzZXBhcmVudDsgc3Q7IHN0ID0gc3QtXHUwMDNlcGFyZW50KSB7XG4gNjg3Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBzdC1cdTAwM2VjdXJmcmFtZTsgaSYjNDM7JiM0MzspIHtcbiA2ODg6XHRcdFx0XHRmdW5jID0gc3QtXHUwMDNlZnJhbWVbaV07XG4gNjg5Olx0XHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgQlBGX1JFR19GUDsgaiYjNDM7JiM0MzspIHtcbiA2OTA6XHRcdFx0XHRcdHJlZyA9IFx1MDAyNmZ1bmMtXHUwMDNlcmVnc1tqXTtcbiA2OTE6XHRcdFx0XHRcdGlmIChyZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUgfHwgcmVnLVx1MDAzZXByZWNpc2UpXG4gNjkyOlx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDY5MzpcdFx0XHRcdFx0cmVnLVx1MDAzZXByZWNpc2UgPSB0cnVlO1xuIDY5NDpcdFx0XHRcdFx0aWYgKGVudi1cdTAwM2Vsb2cubGV2ZWwgXHUwMDI2IEJQRl9MT0dfTEVWRUwyKSB7XG4gNjk1Olx0XHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtmb3JjZV9wcmVjaXNlOiBmcmFtZSVkOiBmb3JjaW5nIHIlZCB0byBiZSBwcmVjaXNlXFxuXCYjMzQ7LFxuIDY5NjpcdFx0XHRcdFx0XHRcdGksIGopO1xuIDY5NzpcdFx0XHRcdFx0fVxuIDY5ODpcdFx0XHRcdH1cbiA2OTk6XHRcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBmdW5jLVx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRTsgaiYjNDM7JiM0MzspIHtcbiA3MDA6XHRcdFx0XHRcdGlmICghYnBmX2lzX3NwaWxsZWRfcmVnKFx1MDAyNmZ1bmMtXHUwMDNlc3RhY2tbal0pKVxuIDcwMTpcdFx0XHRcdFx0XHRjb250aW51ZTtcbiA3MDI6XHRcdFx0XHRcdHJlZyA9IFx1MDAyNmZ1bmMtXHUwMDNlc3RhY2tbal0uc3BpbGxlZF9wdHI7XG4gNzAzOlx0XHRcdFx0XHRpZiAocmVnLVx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFIHx8IHJlZy1cdTAwM2VwcmVjaXNlKVxuIDcwNDpcdFx0XHRcdFx0XHRjb250aW51ZTtcbiA3MDU6XHRcdFx0XHRcdHJlZy1cdTAwM2VwcmVjaXNlID0gdHJ1ZTtcbiA3MDY6XHRcdFx0XHRcdGlmIChlbnYtXHUwMDNlbG9nLmxldmVsIFx1MDAyNiBCUEZfTE9HX0xFVkVMMikge1xuIDcwNzpcdFx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Zm9yY2VfcHJlY2lzZTogZnJhbWUlZDogZm9yY2luZyBmcCVkIHRvIGJlIHByZWNpc2VcXG5cJiMzNDssXG4gNzA4Olx0XHRcdFx0XHRcdFx0aSwgLShqICYjNDM7IDEpICogOCk7XG4gNzA5Olx0XHRcdFx0XHR9XG4gNzEwOlx0XHRcdFx0fVxuIDcxMTpcdFx0XHR9XG4gNzEyOlx0XHR9XG4gNzEzOlx0fVxuIDcxNDpcdFxuIDcxNTpcdC8qXG4gNzE2Olx0ICogYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKCkgYmFja3RyYWNrcyBCUEYgcHJvZ3JhbSBpbnN0cnVjdGlvbiBzZXF1ZW5jZSBhbmRcbiA3MTc6XHQgKiBjaGFpbiBvZiB2ZXJpZmllciBzdGF0ZXMgbWFraW5nIHN1cmUgdGhhdCByZWdpc3RlciAqcmVnbm8qIChpZiByZWdubyBcdTAwM2U9IDApXG4gNzE4Olx0ICogYW5kL29yIHN0YWNrIHNsb3QgKnNwaSogKGlmIHNwaSBcdTAwM2U9IDApIGFyZSBtYXJrZWQgYXMgcHJlY2lzZWx5IHRyYWNrZWRcbiA3MTk6XHQgKiBTQ0FMQVJTLCBhcyB3ZWxsIGFzIGFueSBvdGhlciByZWdpc3RlcnMgYW5kIHNsb3RzIHRoYXQgY29udHJpYnV0ZSB0b1xuIDcyMDpcdCAqIGEgdHJhY2tlZCBzdGF0ZSBvZiBnaXZlbiByZWdpc3RlcnMvc3RhY2sgc2xvdHMsIGRlcGVuZGluZyBvbiBzcGVjaWZpYyBCUEZcbiA3MjE6XHQgKiBhc3NlbWJseSBpbnN0cnVjdGlvbnMgKHNlZSBiYWNrdHJhY2tfaW5zbnMoKSBmb3IgZXhhY3QgaW5zdHJ1Y3Rpb24gaGFuZGxpbmdcbiA3MjI6XHQgKiBsb2dpYykuIFRoaXMgYmFja3RyYWNraW5nIHJlbGllcyBvbiByZWNvcmRlZCBqbXBfaGlzdG9yeSBhbmQgaXMgYWJsZSB0b1xuIDcyMzpcdCAqIHRyYXZlcnNlIGVudGlyZSBjaGFpbiBvZiBwYXJlbnQgc3RhdGVzLiBUaGlzIHByb2Nlc3MgZW5kcyBvbmx5IHdoZW4gYWxsIHRoZVxuIDcyNDpcdCAqIG5lY2Vzc2FyeSByZWdpc3RlcnMvc2xvdHMgYW5kIHRoZWlyIHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzIGFyZSBtYXJrZWQgYXNcbiA3MjU6XHQgKiBwcmVjaXNlLlxuIDcyNjpcdCAqXG4gNzI3Olx0ICogT25lIGltcG9ydGFudCBhbmQgc3VidGxlIGFzcGVjdCBpcyB0aGF0IHByZWNpc2UgbWFya3MgKmRvIG5vdCBtYXR0ZXIqIGluXG4gNzI4Olx0ICogdGhlIGN1cnJlbnRseSB2ZXJpZmllZCBzdGF0ZSAoY3VycmVudCBzdGF0ZSkuIEl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kXG4gNzI5Olx0ICogd2h5IHRoaXMgaXMgdGhlIGNhc2UuXG4gNzMwOlx0ICpcbiA3MzE6XHQgKiBGaXJzdCwgbm90ZSB0aGF0IGN1cnJlbnQgc3RhdGUgaXMgdGhlIHN0YXRlIHRoYXQgaXMgbm90IHlldCBcJiMzNDtjaGVja3BvaW50ZWRcJiMzNDssXG4gNzMyOlx0ICogaS5lLiwgaXQgaXMgbm90IHlldCBwdXQgaW50byBlbnYtXHUwMDNlZXhwbG9yZWRfc3RhdGVzLCBhbmQgaXQgaGFzIG5vIGNoaWxkcmVuXG4gNzMzOlx0ICogc3RhdGVzIGFzIHdlbGwuIEl0JiMzOTtzIGVwaGVtZXJhbCwgYW5kIGNhbiBlbmQgdXAgZWl0aGVyIGEpIGJlaW5nIGRpc2NhcmRlZCBpZlxuIDczNDpcdCAqIGNvbXBhdGlibGUgZXhwbG9yZWQgc3RhdGUgaXMgZm91bmQgYXQgc29tZSBwb2ludCBvciBCUEZfRVhJVCBpbnN0cnVjdGlvbiBpc1xuIDczNTpcdCAqIHJlYWNoZWQgb3IgYikgY2hlY2twb2ludGVkIGFuZCBwdXQgaW50byBlbnYtXHUwMDNlZXhwbG9yZWRfc3RhdGVzLCBicmFuY2hpbmcgb3V0XG4gNzM2Olx0ICogaW50byBvbmUgb3IgbW9yZSBjaGlsZHJlbiBzdGF0ZXMuXG4gNzM3Olx0ICpcbiA3Mzg6XHQgKiBJbiB0aGUgZm9ybWVyIGNhc2UsIHByZWNpc2UgbWFya2luZ3MgaW4gY3VycmVudCBzdGF0ZSBhcmUgY29tcGxldGVseVxuIDczOTpcdCAqIGlnbm9yZWQgYnkgc3RhdGUgY29tcGFyaXNvbiBjb2RlIChzZWUgcmVnc2FmZSgpIGZvciBkZXRhaWxzKS4gT25seVxuIDc0MDpcdCAqIGNoZWNrcG9pbnRlZCAoXCYjMzQ7b2xkXCYjMzQ7KSBzdGF0ZSBwcmVjaXNlIG1hcmtpbmdzIGFyZSBpbXBvcnRhbnQsIGFuZCBpZiBvbGRcbiA3NDE6XHQgKiBzdGF0ZSYjMzk7cyByZWdpc3Rlci9zbG90IGlzIHByZWNpc2UsIHJlZ3NhZmUoKSBhc3N1bWVzIGN1cnJlbnQgc3RhdGUmIzM5O3NcbiA3NDI6XHQgKiByZWdpc3Rlci9zbG90IGFzIHByZWNpc2UgYW5kIGNoZWNrcyB2YWx1ZSByYW5nZXMgZXhhY3RseSBhbmQgcHJlY2lzZWx5LiBJZlxuIDc0MzpcdCAqIHN0YXRlcyB0dXJuIG91dCB0byBiZSBjb21wYXRpYmxlLCBjdXJyZW50IHN0YXRlJiMzOTtzIG5lY2Vzc2FyeSBwcmVjaXNlXG4gNzQ0Olx0ICogbWFya2luZ3MgYW5kIGFueSByZXF1aXJlZCBwYXJlbnQgc3RhdGVzJiMzOTsgcHJlY2lzZSBtYXJraW5ncyBhcmUgZW5mb3JjZWRcbiA3NDU6XHQgKiBhZnRlciB0aGUgZmFjdCB3aXRoIHByb3BhZ2F0ZV9wcmVjaXNpb24oKSBsb2dpYywgYWZ0ZXIgdGhlIGZhY3QuIEJ1dCBpdCYjMzk7c1xuIDc0NjpcdCAqIGltcG9ydGFudCB0byByZWFsaXplIHRoYXQgaW4gdGhpcyBjYXNlLCBldmVuIGFmdGVyIG1hcmtpbmcgY3VycmVudCBzdGF0ZVxuIDc0NzpcdCAqIHJlZ2lzdGVycy9zbG90cyBhcyBwcmVjaXNlLCB3ZSBpbW1lZGlhdGVseSBkaXNjYXJkIGN1cnJlbnQgc3RhdGUuIFNvIHdoYXRcbiA3NDg6XHQgKiBhY3R1YWxseSBtYXR0ZXJzIGlzIGFueSBvZiB0aGUgcHJlY2lzZSBtYXJraW5ncyBwcm9wYWdhdGVkIGludG8gY3VycmVudFxuIDc0OTpcdCAqIHN0YXRlJiMzOTtzIHBhcmVudCBzdGF0ZXMsIHdoaWNoIGFyZSBhbHdheXMgY2hlY2twb2ludGVkIChkdWUgdG8gYikgY2FzZSBhYm92ZSkuXG4gNzUwOlx0ICogQXMgc3VjaCwgZm9yIHNjZW5hcmlvIGEpIGl0IGRvZXNuJiMzOTt0IG1hdHRlciBpZiBjdXJyZW50IHN0YXRlIGhhcyBwcmVjaXNlXG4gNzUxOlx0ICogbWFya2luZ3Mgc2V0IG9yIG5vdC5cbiA3NTI6XHQgKlxuIDc1MzpcdCAqIE5vdywgZm9yIHRoZSBzY2VuYXJpbyBiKSwgY2hlY2twb2ludGluZyBhbmQgZm9ya2luZyBpbnRvIGNoaWxkKHJlbilcbiA3NTQ6XHQgKiBzdGF0ZShzKS4gTm90ZSB0aGF0IGJlZm9yZSBjdXJyZW50IHN0YXRlIGdldHMgdG8gY2hlY2twb2ludGluZyBzdGVwLCBhbnlcbiA3NTU6XHQgKiBwcm9jZXNzZWQgaW5zdHJ1Y3Rpb24gYWx3YXlzIGFzc3VtZXMgcHJlY2lzZSBTQ0FMQVIgcmVnaXN0ZXIvc2xvdFxuIDc1NjpcdCAqIGtub3dsZWRnZTogaWYgcHJlY2lzZSB2YWx1ZSBvciByYW5nZSBpcyB1c2VmdWwgdG8gcHJ1bmUganVtcCBicmFuY2gsIEJQRlxuIDc1NzpcdCAqIHZlcmlmaWVyIHRha2VzIHRoaXMgb3Bwb3J0dW5pdHkgZW50aHVzaWFzdGljYWxseS4gU2ltaWxhcmx5LCB3aGVuXG4gNzU4Olx0ICogcmVnaXN0ZXImIzM5O3MgdmFsdWUgaXMgdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0IG9yIG1lbW9yeSBhZGRyZXNzLCBleGFjdFxuIDc1OTpcdCAqIGtub3dsZWRnZSBvZiBTQ0FMQVIgcmFuZ2UgaXMgYXNzdW1lZCwgY2hlY2tlZCwgYW5kIGVuZm9yY2VkLiBTbywgc2ltaWxhciB0b1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNzAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgQmFja3RyYWNrIExvZ2ljKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGUgY29kZSBhcm91bmQgbGluZXMgNzYwIHRvIDg1MC4gSSByZWNhbGwgdGhhdCBzZWN0aW9uIGJlaW5nIHBhcnRpY3VsYXJseSBpbnZvbHZlZCB3aXRoIHRoZSBiYWNrdHJhY2tpbmcgYWxnb3JpdGhtLiBJIGtub3cgaXQmIzM5O3MgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBCUEYgdmVyaWZpZXIsIGFuZCBhbnkgcG90ZW50aWFsIGluZWZmaWNpZW5jaWVzIG9yIHN1YnRsZSBidWdzIGluIHRoaXMgYXJlYSBjYW4gaGF2ZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIG9yIHdvcnNlLCBvcGVuIHVwIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGV4YWN0bHkgaG93IGl0JiMzOTtzIGhhbmRsaW5nIHRoZSB0cmF2ZXJzYWwgYW5kIHN0YXRlIG1hbmFnZW1lbnQgZHVyaW5nIHRoZSBieXRlY29kZSBhbmFseXNpcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhbnkgbG9naWMgcmVsYXRlZCB0byBkZXRlY3RpbmcgbG9vcHMsIGhhbmRsaW5nIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHRoYXQgY291bGQgbGVhZCB0byBtdWx0aXBsZSBwYXRocywgYW5kIGhvdyBpdCBkZWFscyB3aXRoIHBvdGVudGlhbCBkZWFkIGNvZGUgcGF0aHMuIEkgd2FudCB0byBwYXkgc3BlY2lhbCBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzIHRvIG1haW50YWluIHN0YXRlIGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgYSBiYWNrdHJhY2suIFRpbWUgdG8gZ2V0IHRoZSBnZGIgdXAgYW5kIHJ1bm5pbmcgaWYgSSBuZWVkIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYmFja3RyYWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc2MDpcdCAqIHdoYXQgd2UgbWVudGlvbmVkIGFib3ZlIGFib3V0IHN0YXRlIGNvbXBhcmlzb24gaWdub3JpbmcgcHJlY2lzZSBtYXJraW5nc1xuIDc2MTpcdCAqIGR1cmluZyBzdGF0ZSBjb21wYXJpc29uLCBCUEYgdmVyaWZpZXIgaWdub3JlcyBhbmQgYWxzbyBhc3N1bWVzIHByZWNpc2VcbiA3NjI6XHQgKiBtYXJraW5ncyAqYXQgd2lsbCogZHVyaW5nIGluc3RydWN0aW9uIHZlcmlmaWNhdGlvbiBwcm9jZXNzLiBCdXQgYXMgdmVyaWZpZXJcbiA3NjM6XHQgKiBhc3N1bWVzIHByZWNpc2lvbiwgaXQgYWxzbyBwcm9wYWdhdGVzIGFueSBwcmVjaXNpb24gZGVwZW5kZW5jaWVzIGFjcm9zc1xuIDc2NDpcdCAqIHBhcmVudCBzdGF0ZXMsIHdoaWNoIGFyZSBub3QgeWV0IGZpbmFsaXplZCwgc28gY2FuIGJlIGZ1cnRoZXIgcmVzdHJpY3RlZFxuIDc2NTpcdCAqIGJhc2VkIG9uIG5ldyBrbm93bGVkZ2UgZ2FpbmVkIGZyb20gcmVzdHJpY3Rpb25zIGVuZm9yY2VkIGJ5IHRoZWlyIGNoaWxkcmVuXG4gNzY2Olx0ICogc3RhdGVzLiBUaGlzIGlzIHNvIHRoYXQgb25jZSB0aG9zZSBwYXJlbnQgc3RhdGVzIGFyZSBmaW5hbGl6ZWQsIGkuZS4sIHdoZW5cbiA3Njc6XHQgKiB0aGV5IGhhdmUgbm8gbW9yZSBhY3RpdmUgY2hpbGRyZW4gc3RhdGUsIHN0YXRlIGNvbXBhcmlzb24gbG9naWMgaW5cbiA3Njg6XHQgKiBpc19zdGF0ZV92aXNpdGVkKCkgd291bGQgZW5mb3JjZSBzdHJpY3QgYW5kIHByZWNpc2UgU0NBTEFSIHJhbmdlcywgaWZcbiA3Njk6XHQgKiByZXF1aXJlZCBmb3IgY29ycmVjdG5lc3MuXG4gNzcwOlx0ICpcbiA3NzE6XHQgKiBUbyBidWlsZCBhIGJpdCBtb3JlIGludHVpdGlvbiwgbm90ZSBhbHNvIHRoYXQgb25jZSBhIHN0YXRlIGlzIGNoZWNrcG9pbnRlZCxcbiA3NzI6XHQgKiB0aGUgcGF0aCB3ZSB0b29rIHRvIGdldCB0byB0aGF0IHN0YXRlIGlzIG5vdCBpbXBvcnRhbnQuIFRoaXMgaXMgY3J1Y2lhbFxuIDc3MzpcdCAqIHByb3BlcnR5IGZvciBzdGF0ZSBwcnVuaW5nLiBXaGVuIHN0YXRlIGlzIGNoZWNrcG9pbnRlZCBhbmQgZmluYWxpemVkIGF0XG4gNzc0Olx0ICogc29tZSBpbnN0cnVjdGlvbiBpbmRleCwgaXQgY2FuIGJlIGNvcnJlY3RseSBhbmQgc2FmZWx5IHVzZWQgdG8gXCYjMzQ7c2hvcnRcbiA3NzU6XHQgKiBjaXJjdWl0XCYjMzQ7IGFueSAqY29tcGF0aWJsZSogc3RhdGUgdGhhdCByZWFjaGVzIGV4YWN0bHkgdGhlIHNhbWUgaW5zdHJ1Y3Rpb25cbiA3NzY6XHQgKiBpbmRleC4gSS5lLiwgaWYgd2UganVtcGVkIHRvIHRoYXQgaW5zdHJ1Y3Rpb24gZnJvbSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50XG4gNzc3Olx0ICogY29kZSBwYXRoIHRoYW4gb3JpZ2luYWwgZmluYWxpemVkIHN0YXRlIHdhcyBkZXJpdmVkIGZyb20sIGl0IGRvZXNuJiMzOTt0XG4gNzc4Olx0ICogbWF0dGVyLCBjdXJyZW50IHN0YXRlIGNhbiBiZSBkaXNjYXJkZWQgYmVjYXVzZSBmcm9tIHRoYXQgaW5zdHJ1Y3Rpb25cbiA3Nzk6XHQgKiBmb3J3YXJkIGhhdmluZyBhIGNvbXBhdGlibGUgc3RhdGUgd2lsbCBlbnN1cmUgd2Ugd2lsbCBzYWZlbHkgcmVhY2ggdGhlXG4gNzgwOlx0ICogZXhpdC4gU3RhdGVzIGRlc2NyaWJlIHByZWNvbmRpdGlvbnMgZm9yIGZ1cnRoZXIgZXhwbG9yYXRpb24sIGJ1dCBjb21wbGV0ZWx5XG4gNzgxOlx0ICogZm9yZ2V0IHRoZSBoaXN0b3J5IG9mIGhvdyB3ZSBnb3QgaGVyZS5cbiA3ODI6XHQgKlxuIDc4MzpcdCAqIFRoaXMgYWxzbyBtZWFucyB0aGF0IGV2ZW4gaWYgd2UgbmVlZGVkIHByZWNpc2UgU0NBTEFSIHJhbmdlIHRvIGdldCB0b1xuIDc4NDpcdCAqIGZpbmFsaXplZCBzdGF0ZSwgYnV0IGZyb20gdGhhdCBwb2ludCBmb3J3YXJkICp0aGF0IHNhbWUqIFNDQUxBUiByZWdpc3RlciBpc1xuIDc4NTpcdCAqIG5ldmVyIHVzZWQgaW4gYSBwcmVjaXNlIGNvbnRleHQgKGkuZS4sIGl0JiMzOTtzIHByZWNpc2UgdmFsdWUgaXMgbm90IG5lZWRlZCBmb3JcbiA3ODY6XHQgKiBjb3JyZWN0bmVzcyksIGl0JiMzOTtzIGNvcnJlY3QgYW5kIHNhZmUgdG8gbWFyayBzdWNoIHJlZ2lzdGVyIGFzIFwmIzM0O2ltcHJlY2lzZVwmIzM0O1xuIDc4NzpcdCAqIChpLmUuLCBwcmVjaXNlIG1hcmtpbmcgc2V0IHRvIGZhbHNlKS4gVGhpcyBpcyB3aGF0IHdlIHJlbHkgb24gd2hlbiB3ZSBkb1xuIDc4ODpcdCAqIG5vdCBzZXQgcHJlY2lzZSBtYXJraW5nIGluIGN1cnJlbnQgc3RhdGUuIElmIG5vIGNoaWxkIHN0YXRlIHJlcXVpcmVzXG4gNzg5Olx0ICogcHJlY2lzaW9uIGZvciBhbnkgZ2l2ZW4gU0NBTEFSIHJlZ2lzdGVyLCBpdCYjMzk7cyBzYWZlIHRvIGRpY3RhdGUgdGhhdCBpdCBjYW5cbiA3OTA6XHQgKiBiZSBpbXByZWNpc2UuIElmIGFueSBjaGlsZCBzdGF0ZSBkb2VzIHJlcXVpcmUgdGhpcyByZWdpc3RlciB0byBiZSBwcmVjaXNlLFxuIDc5MTpcdCAqIHdlJiMzOTtsbCBtYXJrIGl0IHByZWNpc2UgbGF0ZXIgcmV0cm9hY3RpdmVseSBkdXJpbmcgcHJlY2lzZSBtYXJraW5nc1xuIDc5MjpcdCAqIHByb3BhZ2F0aW9uIGZyb20gY2hpbGQgc3RhdGUgdG8gcGFyZW50IHN0YXRlcy5cbiA3OTM6XHQgKlxuIDc5NDpcdCAqIFNraXBwaW5nIHByZWNpc2UgbWFya2luZyBzZXR0aW5nIGluIGN1cnJlbnQgc3RhdGUgaXMgYSBtaWxkIHZlcnNpb24gb2ZcbiA3OTU6XHQgKiByZWx5aW5nIG9uIHRoZSBhYm92ZSBvYnNlcnZhdGlvbi4gQnV0IHdlIGNhbiB1dGlsaXplIHRoaXMgcHJvcGVydHkgZXZlblxuIDc5NjpcdCAqIG1vcmUgYWdncmVzc2l2ZWx5IGJ5IHByb2FjdGl2ZWx5IGZvcmdldHRpbmcgYW55IHByZWNpc2UgbWFya2luZyBpbiB0aGVcbiA3OTc6XHQgKiBjdXJyZW50IHN0YXRlICh3aGljaCB3ZSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IHN0YXRlKSwgcmlnaHQgYmVmb3JlIHdlXG4gNzk4Olx0ICogY2hlY2twb2ludCBpdCBhbmQgYnJhbmNoIG9mZiBpbnRvIG5ldyBjaGlsZCBzdGF0ZS4gVGhpcyBpcyBkb25lIGJ5XG4gNzk5Olx0ICogbWFya19hbGxfc2NhbGFyc19pbXByZWNpc2UoKSB0byBob3BlZnVsbHkgZ2V0IG1vcmUgcGVybWlzc2l2ZSBhbmQgZ2VuZXJpY1xuIDgwMDpcdCAqIGZpbmFsaXplZCBzdGF0ZXMgd2hpY2ggaGVscCBpbiBzaG9ydCBjaXJjdWl0aW5nIG1vcmUgZnV0dXJlIHN0YXRlcy5cbiA4MDE6XHQgKi9cbiA4MDI6XHRpbnQgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gODAzOlx0XHRcdFx0ICAgIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0YXJ0aW5nX3N0YXRlLFxuIDgwNDpcdFx0XHRcdCAgICBpbnQgcmVnbm8sXG4gODA1Olx0XHRcdFx0ICAgIGJvb2wgKmNoYW5nZWQpXG4gODA2Olx0e1xuIDgwNzpcdFx0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QgPSBzdGFydGluZ19zdGF0ZTtcbiA4MDg6XHRcdHN0cnVjdCBiYWNrdHJhY2tfc3RhdGUgKmJ0ID0gXHUwMDI2ZW52LVx1MDAzZWJ0O1xuIDgwOTpcdFx0aW50IGZpcnN0X2lkeCA9IHN0LVx1MDAzZWZpcnN0X2luc25faWR4O1xuIDgxMDpcdFx0aW50IGxhc3RfaWR4ID0gc3RhcnRpbmdfc3RhdGUtXHUwMDNlaW5zbl9pZHg7XG4gODExOlx0XHRpbnQgc3Vic2VxX2lkeCA9IC0xO1xuIDgxMjpcdFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpmdW5jO1xuIDgxMzpcdFx0Ym9vbCB0bXAsIHNraXBfZmlyc3QgPSB0cnVlO1xuIDgxNDpcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbiA4MTU6XHRcdGludCBpLCBmciwgZXJyO1xuIDgxNjpcdFxuIDgxNzpcdFx0aWYgKCFlbnYtXHUwMDNlYnBmX2NhcGFibGUpXG4gODE4Olx0XHRcdHJldHVybiAwO1xuIDgxOTpcdFxuIDgyMDpcdFx0Y2hhbmdlZCA9IGNoYW5nZWQgPzogXHUwMDI2dG1wO1xuIDgyMTpcdFx0Lyogc2V0IGZyYW1lIG51bWJlciBmcm9tIHdoaWNoIHdlIGFyZSBzdGFydGluZyB0byBiYWNrdHJhY2sgKi9cbiA4MjI6XHRcdGJ0X2luaXQoYnQsIHN0YXJ0aW5nX3N0YXRlLVx1MDAzZWN1cmZyYW1lKTtcbiA4MjM6XHRcbiA4MjQ6XHRcdC8qIERvIHNhbml0eSBjaGVja3MgYWdhaW5zdCBjdXJyZW50IHN0YXRlIG9mIHJlZ2lzdGVyIGFuZC9vciBzdGFja1xuIDgyNTpcdFx0ICogc2xvdCwgYnV0IGRvbiYjMzk7dCBzZXQgcHJlY2lzZSBmbGFnIGluIGN1cnJlbnQgc3RhdGUsIGFzIHByZWNpc2lvblxuIDgyNjpcdFx0ICogdHJhY2tpbmcgaW4gdGhlIGN1cnJlbnQgc3RhdGUgaXMgdW5uZWNlc3NhcnkuXG4gODI3Olx0XHQgKi9cbiA4Mjg6XHRcdGZ1bmMgPSBzdC1cdTAwM2VmcmFtZVtidC1cdTAwM2VmcmFtZV07XG4gODI5Olx0XHRpZiAocmVnbm8gXHUwMDNlPSAwKSB7XG4gODMwOlx0XHRcdHJlZyA9IFx1MDAyNmZ1bmMtXHUwMDNlcmVnc1tyZWdub107XG4gODMxOlx0XHRcdGlmIChyZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUpIHtcbiA4MzI6XHRcdFx0XHR2ZXJpZmllcl9idWcoZW52LCBcJiMzNDtiYWNrdHJhY2tpbmcgbWlzdXNlXCYjMzQ7KTtcbiA4MzM6XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiA4MzQ6XHRcdFx0fVxuIDgzNTpcdFx0XHRidF9zZXRfcmVnKGJ0LCByZWdubyk7XG4gODM2Olx0XHR9XG4gODM3Olx0XG4gODM4Olx0XHRpZiAoYnRfZW1wdHkoYnQpKVxuIDgzOTpcdFx0XHRyZXR1cm4gMDtcbiA4NDA6XHRcbiA4NDE6XHRcdGZvciAoOzspIHtcbiA4NDI6XHRcdFx0REVDTEFSRV9CSVRNQVAobWFzaywgNjQpO1xuIDg0MzpcdFx0XHR1MzIgaGlzdG9yeSA9IHN0LVx1MDAzZWptcF9oaXN0b3J5X2NudDtcbiA4NDQ6XHRcdFx0c3RydWN0IGJwZl9qbXBfaGlzdG9yeV9lbnRyeSAqaGlzdDtcbiA4NDU6XHRcbiA4NDY6XHRcdFx0aWYgKGVudi1cdTAwM2Vsb2cubGV2ZWwgXHUwMDI2IEJQRl9MT0dfTEVWRUwyKSB7XG4gODQ3Olx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUlZDogbGFzdF9pZHggJWQgZmlyc3RfaWR4ICVkIHN1YnNlcV9pZHggJWQgXFxuXCYjMzQ7LFxuIDg0ODpcdFx0XHRcdFx0YnQtXHUwMDNlZnJhbWUsIGxhc3RfaWR4LCBmaXJzdF9pZHgsIHN1YnNlcV9pZHgpO1xuIDg0OTpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNjUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCUEYgTW9kdWxlIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb2YgYGJwZl9jaGVja2AgYW5kIGBicGZfcHJvZ19sb2FkYCB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIG5hdmlnYXRlIHRoZSBzb3VyY2UuIEkmIzM5O2xsIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBsaXZlIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIEJQRiBpbmZyYXN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBLY29uZmlnIGFuZCBNYWtlZmlsZXMuCgpJJiMzOTtsbCBjaGVjayB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIGFuZCBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGFuZCB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgYXJlIHJlc3BvbnNpYmxlIGZvciBpbmNsdWRpbmcsIG9yIGV4Y2x1ZGluZywgdGhlIHJlbGV2YW50IGNvZGUuIEFybWVkIHdpdGggdGhpcyBpbmZvcm1hdGlvbiwgSSBjYW4gYmV0dGVyIHJlYXNvbiBhYm91dCB0aGUgdmFyaW91cyBjb25maWd1cmF0aW9uIGZsYWdzIHRoYXQgYWZmZWN0IGhvdyB0aGUgQlBGIHN1YnN5c3RlbSBpcyBidWlsdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmFja3RyYWNrXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0xMz1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cdCAgJiM0Mzs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU0NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBCUEYgQmFja3RyYWNraW5nIExvZ2ljKioKCk9rYXksIHNvIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYCBpcyBjbGVhcmx5IHBhcnQgb2YgdGhlIEJQRiBzeXN0ZW0sIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29tcGlsYXRpb24gY29udGV4dC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGBDT05GSUdfQlBGX1NZU0NBTExgIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgcmVsYXRlZCB0byB0aGUgQlBGIHN5c2NhbGwgaW50ZXJmYWNlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBvdGhlciBkZXBlbmRlbmNpZXMgb3IgaW1wbGljYXRpb25zIHRoaXMgaGFzLiBNeSBuZXh0IG1vdmUgaXMgdG8gY2hlY2sgdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEJQRiwgaW5jbHVkaW5nIGBCUEZfU1lTQ0FMTGAsIGFyZSBkZWZpbmVkLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGRlcGVuZGVuY2llcyBhc3NvY2lhdGVkIHdpdGggYEJQRl9TWVNDQUxMYCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoaXMgYmFja3RyYWNraW5nIGNvZGUgZml0cyBpbnRvIHRoZSBiaWdnZXIgQlBGIHBpY3R1cmUuIFRoaXMgd2lsbCBsaWtlbHkgc2hvdyBtZSBhbnkgb3RoZXIgZGVwZW5kZW50IGZlYXR1cmVzIG9yIHJlcXVpcmVtZW50cyB0aGF0IEkgc2hvdWxkIHRha2Ugbm90ZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTE4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyB0aGUgcHJvdmlkZWQgdGV4dDoKCioqQlBGIENvbmZpZ3VyYXRpb24gVGhvdWdodHMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIHN1YnN5c3RlbSBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIHRoZSBjb3JlIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB0aGF0IGRlZmluZSB3aGF0IEJQRiBmdW5jdGlvbmFsaXR5IGdldHMgYnVpbHQgaW50byB0aGUga2VybmVsLCB3aGF0IG1vZHVsZXMgYXJlIGF2YWlsYWJsZSwgYW5kIHBvdGVudGlhbGx5IGhvdyB0aGV5IGludGVyYWN0IHdpdGggZWFjaCBvdGhlci4gTGluZSAyNSBtaWdodCBiZSBpbnRyb2R1Y2luZyBhIG5ldyBmZWF0dXJlLCBlbmFibGluZyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBwZXJoYXBzIHNldHRpbmcgdXAgYSBkZXBlbmRlbmN5IHJlbGF0aW9uc2hpcC4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgZmluZGluZyBzb21lIGRldGFpbHMgb24gd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSBhbHNvIHVzaW5nIEJQRiwgb3Igd2hhdCBhcmUgZGVwZW5kZW50IG9uIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjU6XHRtZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgQlBGX1NZU0NBTExcbiAgMjg6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4gIDI5Olx0XHRzZWxlY3QgQlBGXG4gIDMwOlx0XHRzZWxlY3QgSVJRX1dPUktcbiAgMzE6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuICAzMjpcdFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxuICAzMzpcdFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbiAgMzQ6XHRcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG4gIDM1Olx0XHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbiAgMzY6XHRcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXG4gIDM3Olx0XHRkZWZhdWx0IG5cbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xuICA0MDpcdFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cbiAgNDE6XHRcbiAgNDI6XHRjb25maWcgQlBGX0pJVFxuICA0MzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuICA0NDpcdFx0ZGVwZW5kcyBvbiBCUEZcbiAgNDU6XHRcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXG4gIDQ2Olx0XHRzZWxlY3QgRVhFQ01FTVxuICA0NzpcdFx0aGVscFxuICA0ODpcdFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXG4gIDQ5Olx0XHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxuICA1MDpcdFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXG4gIDUxOlx0XHQgIHByb2dyYW1zLlxuICA1MjpcdFxuICA1MzpcdFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcbiAgNTQ6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXG4gIDU1Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcbiAgNTY6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfa2FsbHN5bXMgKG9wdGlvbmFsKVxuICA1NzpcdFxuICA1ODpcdGNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxuICA1OTpcdFx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xuICA2MDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgSEFWRV9FQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX0pJVFxuICA2MTpcdFx0aGVscFxuICA2MjpcdFx0ICBFbmFibGVzIEJQRiBKSVQgYW5kIHJlbW92ZXMgQlBGIGludGVycHJldGVyIHRvIGF2b2lkIHNwZWN1bGF0aXZlXG4gIDYzOlx0XHQgIGV4ZWN1dGlvbiBvZiBCUEYgaW5zdHJ1Y3Rpb25zIGJ5IHRoZSBpbnRlcnByZXRlci5cbiAgNjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MTMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2ODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIEJhY2t0cmFja2luZyBhbmQgVmVyaWZpZXIgSW1wcm92ZW1lbnQgQW5hbHlzaXMqKgoKT2theSwgc28gdGhlIGBCUEZfU1lTQ0FMTGAgY29uZmlnIG9wdGlvbiBpcyByZWxldmFudCBoZXJlLiBMZXQmIzM5O3MgZGlnIGludG8gdGhpcyBwYXRjaC4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoaXMgY2hhbmdlIGluIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYCBpcyBhZGRyZXNzaW5nIGFuIGlzc3VlIGluIHRoZSBCUEYgdmVyaWZpZXImIzM5O3Mgc2NhbGFyIHByZWNpc2lvbiBiYWNrdHJhY2tpbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBCUEZfTERgIGluc3RydWN0aW9ucywgYW5kIHBhcnRpY3VsYXJseSB3aGVuIHRob3NlIGFyZSB1c2VkIHdpdGggYEJQRl9BQlNgIG9yIGBCUEZfSU5EYCB3aXRoaW4gc3VicHJvZ3JhbXMuCgpQcmV2aW91c2x5LCB0aGUgY29kZSB3YXMgaGFuZGxpbmcgdGhlIGBCUEZfTERgIGluc3RydWN0aW9ucywgYW5kIGZvciB0aGUgYGxkX2ltbTY0YCBjYXNlLCBubyBmdXJ0aGVyIHByZWNpc2lvbiB0cmFja2luZyB3YXMgbmVlZGVkLiBIb3dldmVyLCB3aGVuIHdlIHdlcmUgZGVhbGluZyB3aXRoIGBCUEZfSU5EYCBvciBgQlBGX0FCU2AsIHRoZXJlIHdhcyBhIGAtRU5PVFNVUFBgIGVycm9yIHRoYXQgd2FzIHJldHVybmVkLiBOb3csIHRoZXJlIGFyZSBjaGFuZ2VzIHRvIGhvdyB0aGVzZSBhcmUgaGFuZGxlZC4gYEJQRl9JTU1gIGNhc2VzIGFyZSBub3cgaGFuZGxlZCBieSBjbGVhcmluZyB0aGUgcmVnaXN0ZXIuIENydWNpYWxseSwgdGhlIHBhdGNoIG5vdyBtb2RlbHMgYEJQRl97SU5ELCBBQlN9YCBhcyB0d28gYnJhbmNoZXM6IGEgZmFsbHRocm91Z2ggYnJhbmNoIGFuZCBhbiBpbXBsaWNpdCBzdWJwcm9ncmFtIGV4aXQuIFdoZW4gdGhlIGltcGxpY2l0IHN1YnByb2dyYW0gZXhpdCBicmFuY2ggaXMgYmFja3RyYWNrZWQsIHRoZSBjdXJyZW50IGZyYW1lIG5lZWRzIHRvIGJlIHN3aXRjaGVkLgoKRWZmZWN0aXZlbHksIHRoaXMgcGF0Y2ggc2VlbXMgdG8gZml4IGEgYnVnIHdoZXJlIHRoZSB2ZXJpZmllciB3YXNuJiMzOTt0IHByb3Blcmx5IGJhY2t0cmFja2luZyB3aGVuIGEgc3VicHJvZ3JhbSBleGl0ZWQgZWFybHkgZHVlIHRvIGBCUEZfTEQgfCBCUEZfQUJTYCwgbGVhZGluZyB0byBhIHNlZ21lbnRhdGlvbiBmYXVsdC4gVGhpcyBtYWtlcyB0b3RhbCBzZW5zZTsgSSBjYW4gc2VlIGhvdyB0aGlzIHdvdWxkIGNhdXNlIHByb2JsZW1zLgoKR2l2ZW4gdGhpcyBjb250ZXh0LCBhbmQgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgdmVyaWZpZXImIzM5O3Mgcm9sZSBhcyBhIGNyaXRpY2FsIHNlY3VyaXR5IGJvdW5kYXJ5LCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlIG5lZWQgdG8gYmUgZnV6emluZy4gVGhlIEJQRiB2ZXJpZmllciBpcyBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXIgc3BhY2UgdGhyb3VnaCB0aGUgYGJwZigpYCBzeXNjYWxsIGFuZCBjYW4gYmUgbGV2ZXJhZ2VkIGJ5IGJvdGggdW5wcml2aWxlZ2VkIHVzZXJzIGFuZCB0aG9zZSB3aXRoIGNhcGFiaWxpdGllcyBsaWtlIGBDQVBfQlBGYCBvciBgQ0FQX1NZU19BRE1JTmAuIEkgc2hvdWxkIGFic29sdXRlbHkgcHJpb3JpdGl6ZSBmdXp6aW5nIHRoZSBCUEYgdmVyaWZpY2F0aW9uIHByb2Nlc3MsIHBlcmhhcHMgd2l0aCBzb21ldGhpbmcgbGlrZSBTeXprYWxsZXIuCgpOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IHdoYXQgdGhlIGJlc3QgZm9jdXMgc3ltYm9scyBhcmUgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBjaGVjayB0aGUgZXhwb3J0ZWQgYW5kIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cyBpbiBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AgYW5kIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJJiMzOTtsbCBzdGFydCBieSBzZWFyY2hpbmcgZm9yIGZ1bmN0aW9ucyB3aXRoaW4gdGhvc2UgdHdvIGZpbGVzIHNwZWNpZmljYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBicGZfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgODM4IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MzI1PXN0YXRpYyB2b2lkICpwZXJjcHVfYXJyYXlfbWFwX2xvb2t1cF9wZXJjcHVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHUzMiBjcHUpXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTMzOC1cbmtlcm5lbC9icGYvYXJyYXltYXAuYzozMzk6aW50IGJwZl9wZXJjcHVfYXJyYXlfY29weShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTM0MC17XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTM3My0vKiBDYWxsZWQgZnJvbSBzeXNjYWxsICovXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6Mzc0OmludCBicGZfYXJyYXlfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMzc1LXtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MzkyPXN0YXRpYyBsb25nIGFycmF5X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy00MzAtXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6NDMxOmludCBicGZfcGVyY3B1X2FycmF5X3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTQzMi1cdFx0XHQgICAgdTY0IG1hcF9mbGFncylcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9OTMyPXN0YXRpYyB2b2lkICpmZF9hcnJheV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy05MzctLyogb25seSBjYWxsZWQgZnJvbSBzeXNjYWxsICovXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6OTM4OmludCBicGZfZmRfYXJyYXlfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdTMyICp2YWx1ZSlcbmtlcm5lbC9icGYvYXJyYXltYXAuYy05Mzkte1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy05NTctLyogb25seSBjYWxsZWQgZnJvbSBzeXNjYWxsICovXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6OTU4OmludCBicGZfZmRfYXJyYXlfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy05NTktXHRcdFx0XHQgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncylcbi0tXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTEwLS8qIGZvciBhbnkgYnJhbmNoLCBjYWxsLCBleGl0IHJlY29yZCB0aGUgaGlzdG9yeSBvZiBqbXBzIGluIHRoZSBnaXZlbiBzdGF0ZSAqL1xua2VybmVsL2JwZi9iYWNrdHJhY2suYzoxMTppbnQgYnBmX3B1c2hfam1wX2hpc3Rvcnkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyLFxua2VybmVsL2JwZi9iYWNrdHJhY2suYy0xMi1cdFx0XHQgaW50IGluc25fZmxhZ3MsIGludCBzcGksIGludCBmcmFtZSwgdTY0IGxpbmtlZF9yZWdzKVxuLS1cbmtlcm5lbC9icGYvYmFja3RyYWNrLmM9NjY4PXZvaWQgYnBmX21hcmtfYWxsX3NjYWxhcnNfcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtODAxLSAqL1xua2VybmVsL2JwZi9iYWNrdHJhY2suYzo4MDI6aW50IGJwZl9tYXJrX2NoYWluX3ByZWNpc2lvbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi9iYWNrdHJhY2suYy04MDMtXHRcdFx0ICAgIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0YXJ0aW5nX3N0YXRlLFxuLS1cbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYz0xNjI9c3RhdGljIGlubGluZSBib29sIHZhbGlkX29mZnNldHMoY29uc3Qgc3RydWN0IGJwZl9pbnNuX2FycmF5ICppbnNuX2FycmF5LFxuLS1cbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy0xODItXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmM6MTgzOmludCBicGZfaW5zbl9hcnJheV9pbml0KHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy0xODQte1xuLS1cbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy0yMTEtXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmM6MjEyOmludCBicGZfaW5zbl9hcnJheV9yZWFkeShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jLTIxMy17XG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jPTI4Mz1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJwZl9pdGVyX2ZvcHMgPSB7XG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jLTI5My0gKi9cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzoyOTQ6aW50IGJwZl9pdGVyX3JlZ190YXJnZXQoY29uc3Qgc3RydWN0IGJwZl9pdGVyX3JlZyAqcmVnX2luZm8pXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtMjk1LXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9MzMxPXN0YXRpYyB2b2lkIGNhY2hlX2J0Zl9pZChzdHJ1Y3QgYnBmX2l0ZXJfdGFyZ2V0X2luZm8gKnRpbmZvLFxuLS1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy0zMzYtXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6MzM3OmludCBicGZfaXRlcl9wcm9nX3N1cHBvcnRlZChzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtMzM4LXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9NDk5PWJvb2wgYnBmX2xpbmtfaXNfaXRlcihzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jLTUwMy1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo1MDQ6aW50IGJwZl9pdGVyX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy01MDUtXHRcdFx0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9NTg5PXN0YXRpYyBpbnQgcHJlcGFyZV9zZXFfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJwZl9pdGVyX2xpbmsgKmxpbmspXG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jLTYzMy1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo2MzQ6aW50IGJwZl9pdGVyX25ld19mZChzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNjM1LXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9NjU3PXN0cnVjdCBicGZfcHJvZyAqYnBmX2l0ZXJfZ2V0X2luZm8oc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsIGJvb2wgaW5fc3RvcClcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNjc5LVxua2VybmVsL2JwZi9icGZfaXRlci5jOjY4MDppbnQgYnBmX2l0ZXJfcnVuX3Byb2coc3RydWN0IGJwZl9wcm9nICpwcm9nLCB2b2lkICpjdHgpXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNjgxLXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM9MjY1PXN0YXRpYyB2b2lkIGJwZl9zZWxlbV91bmxpbmtfbWFwX25vbG9jayhzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZWxlbSAqc2VsZW0pXG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTI2OS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzoyNzA6aW50IGJwZl9zZWxlbV9saW5rX21hcChzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwICpzbWFwLFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTI3MS1cdFx0ICAgICAgIHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZSAqbG9jYWxfc3RvcmFnZSxcbi0tXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM9MjkwPXN0YXRpYyB2b2lkIGJwZl9zZWxlbV9saW5rX21hcF9ub2xvY2soc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX21hcF9idWNrZXQgKmIsXG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTI5OS0gKi9cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzozMDA6aW50IGJwZl9zZWxlbV91bmxpbmsoc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2VsZW0gKnNlbGVtKVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTMwMS17XG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jPTQ2Mj1zdGF0aWMgaW50IGNoZWNrX2ZsYWdzKGNvbnN0IHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9kYXRhICpvbGRfc2RhdGEsXG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTQ3NS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzo0NzY6aW50IGJwZl9sb2NhbF9zdG9yYWdlX2FsbG9jKHZvaWQgKm93bmVyLFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTQ3Ny1cdFx0XHQgICAgc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX21hcCAqc21hcCxcbi0tXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM9Njk0PXN0YXRpYyB2b2lkIGJwZl9sb2NhbF9zdG9yYWdlX2NhY2hlX2lkeF9mcmVlKHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9jYWNoZSAqY2FjaGUsXG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTcwMS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzo3MDI6aW50IGJwZl9sb2NhbF9zdG9yYWdlX21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy03MDMte1xuLS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy03MTctXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6NzE4OmludCBicGZfbG9jYWxfc3RvcmFnZV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNzE5LVx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jPTY2Nj1zdGF0aWMgdm9pZCBicGZfbHJ1X2xpc3RfaW5pdChzdHJ1Y3QgYnBmX2xydV9saXN0ICpsKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNjgwLVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYzo2ODE6aW50IGJwZl9scnVfaW5pdChzdHJ1Y3QgYnBmX2xydSAqbHJ1LCBib29sIHBlcmNwdSwgdTMyIGhhc2hfb2Zmc2V0LFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy02ODItXHRcdCBkZWxfZnJvbV9odGFiX2Z1bmMgZGVsX2Zyb21faHRhYiwgdm9pZCAqZGVsX2FyZylcbi0tXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5oPTc5PXN0YXRpYyBpbmxpbmUgdm9pZCBicGZfbHJ1X25vZGVfc2V0X3JlZihzdHJ1Y3QgYnBmX2xydV9ub2RlICpub2RlKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmgtODQtXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5oOjg1OmludCBicGZfbHJ1X2luaXQoc3RydWN0IGJwZl9scnUgKmxydSwgYm9vbCBwZXJjcHUsIHUzMiBoYXNoX29mZnNldCxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmgtODYtXHRcdCBkZWxfZnJvbV9odGFiX2Z1bmMgZGVsX2Zyb21faHRhYiwgdm9pZCAqZGVsZXRlX2FyZyk7XG4tLVxua2VybmVsL2JwZi9icGZfbHNtLmM9OTQ9dm9pZCBicGZfbHNtX2ZpbmRfY2dyb3VwX3NoaW0oY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvYnBmX2xzbS5jLTExOC1cbmtlcm5lbC9icGYvYnBmX2xzbS5jOjExOTppbnQgYnBmX2xzbV92ZXJpZnlfcHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqdmxvZyxcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTEyMC1cdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9icGZfbHNtLmM9NDQzPWJvb2wgYnBmX2xzbV9ob29rX3JldHVybnNfZXJybm8odTMyIGJ0Zl9pZClcbi0tXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00NTEtXG5rZXJuZWwvYnBmL2JwZl9sc20uYzo0NTI6aW50IGJwZl9sc21fZ2V0X3JldHZhbF9yYW5nZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00NTMtXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3JldHZhbF9yYW5nZSAqcmV0dmFsX3JhbmdlKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xzbV9wcm90by5jLTE0LSAqL1xua2VybmVsL2JwZi9icGZfbHNtX3Byb3RvLmM6MTU6aW50IGJwZl9sc21fbW1hcF9maWxlKHN0cnVjdCBmaWxlICpmaWxlX19udWxsYWJsZSwgdW5zaWduZWQgbG9uZyByZXFwcm90LFxua2VybmVsL2JwZi9icGZfbHNtX3Byb3RvLmMtMTYtXHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncylcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MzM3PXN0YXRpYyBib29sIGlzX21vZHVsZV9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgaWQpXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTM1MC1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzozNTE6aW50IGJwZl9zdHJ1Y3Rfb3BzX3N1cHBvcnRlZChjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgKnN0X29wcywgdTMyIG1vZmYpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzUyLXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzU3LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjM1ODppbnQgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0KHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYyxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zNTktXHRcdFx0ICAgICBzdHJ1Y3QgYnRmICpidGYsXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTUxMT1zdGF0aWMgaW50IGJwZl9zdHJ1Y3Rfb3BzX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01MjAtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NTIxOmludCBicGZfc3RydWN0X29wc19tYXBfc3lzX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01MjItXHRcdFx0XHQgICAgICAgdm9pZCAqdmFsdWUpXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTYzMj1jb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9zdHJ1Y3Rfb3BzX2xpbmtfbG9wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjM2LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjYzNzppbnQgYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcyxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02MzgtXHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTEyNDY9RVhQT1JUX1NZTUJPTF9HUEwoYnBmX3N0cnVjdF9vcHNfaWQpO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjYwLSAqL1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyNjE6aW50IGJwZl9zdHJ1Y3Rfb3BzX2Zvcl9lYWNoX3Byb2coY29uc3Qgdm9pZCAqa2RhdGEsXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI2Mi1cdFx0XHRcdCBpbnQgKCpjYikoc3RydWN0IGJwZl9wcm9nICpwcm9nLCB2b2lkICpkYXRhKSxcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MTQyOD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfc3RydWN0X29wc19tYXBfbG9wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQzNi1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDM3OmludCBicGZfc3RydWN0X29wc19saW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDM4LXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQ5MS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDkyOmludCBicGZfcHJvZ19hc3NvY19zdHJ1Y3Rfb3BzKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9tYXAgKm1hcClcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDkzLXtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTkzNjk9RVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTkzOTEtICovXG5rZXJuZWwvYnBmL2J0Zi5jOjkzOTI6aW50IGJwZl9jb3JlX3R5cGVzX2FyZV9jb21wYXQoY29uc3Qgc3RydWN0IGJ0ZiAqbG9jYWxfYnRmLCBfX3UzMiBsb2NhbF9pZCxcbmtlcm5lbC9icGYvYnRmLmMtOTM5My1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmICp0YXJnX2J0ZiwgX191MzIgdGFyZ19pZClcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTk0MDAtXG5rZXJuZWwvYnBmL2J0Zi5jOjk0MDE6aW50IGJwZl9jb3JlX3R5cGVzX21hdGNoKGNvbnN0IHN0cnVjdCBidGYgKmxvY2FsX2J0ZiwgdTMyIGxvY2FsX2lkLFxua2VybmVsL2JwZi9idGYuYy05NDAyLVx0XHRcdCBjb25zdCBzdHJ1Y3QgYnRmICp0YXJnX2J0ZiwgdTMyIHRhcmdfaWQpXG4tLVxua2VybmVsL2JwZi9idGYuYz05NjIxPWJwZl9jb3JlX2ZpbmRfY2FuZHMoc3RydWN0IGJwZl9jb3JlX2N0eCAqY3R4LCB1MzIgbG9jYWxfdHlwZV9pZClcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTk3MDctXG5rZXJuZWwvYnBmL2J0Zi5jOjk3MDg6aW50IGJwZl9jb3JlX2FwcGx5KHN0cnVjdCBicGZfY29yZV9jdHggKmN0eCwgY29uc3Qgc3RydWN0IGJwZl9jb3JlX3JlbG8gKnJlbG8sXG5rZXJuZWwvYnBmL2J0Zi5jLTk3MDktXHRcdCAgIGludCByZWxvX2lkeCwgdm9pZCAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL2NmZy5jPTIyNj1zdGF0aWMgaW50IHNvcnRfaW5zbl9hcnJheV91bmlxKHUzMiAqaXRlbXMsIGludCBjbnQpXG4tLVxua2VybmVsL2JwZi9jZmcuYy0yNDItICovXG5rZXJuZWwvYnBmL2NmZy5jOjI0MzppbnQgYnBmX2NvcHlfaW5zbl9hcnJheV91bmlxKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBzdGFydCwgdTMyIGVuZCwgdTMyICpvZmYpXG5rZXJuZWwvYnBmL2NmZy5jLTI0NC17XG4tLVxua2VybmVsL2JwZi9jZmcuYz00NTE9c3RhdGljIGludCB2aXNpdF9pbnNuKGludCB0LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvY2ZnLmMtNTg2LSAqL1xua2VybmVsL2JwZi9jZmcuYzo1ODc6aW50IGJwZl9jaGVja19jZmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvY2ZnLmMtNTg4LXtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jLTY4OC0gKi9cbmtlcm5lbC9icGYvY2ZnLmM6Njg5OmludCBicGZfY29tcHV0ZV9wb3N0b3JkZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvY2ZnLmMtNjkwLXtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jLTc0MS0gKi9cbmtlcm5lbC9icGYvY2ZnLmM6NzQyOmludCBicGZfY29tcHV0ZV9zY2Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvY2ZnLmMtNzQzLXtcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jPTM0MT1zdGF0aWMgaW50IGNoZWNrX2NvcmVfcmVsbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNDA5LVxua2VybmVsL2JwZi9jaGVja19idGYuYzo0MTA6aW50IGJwZl9wcmVwYXJlX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQxMS1cdFx0XHQgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYy00MzctXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjQzODppbnQgYnBmX2NoZWNrX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQzOS1cdFx0ICAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvY29uc3RfZm9sZC5jPTIwOT1zdGF0aWMgYm9vbCBjb25zdF9yZWdfam9pbihzdHJ1Y3QgY29uc3RfYXJnX2luZm8gKmNpX3RhcmdldCxcbi0tXG5rZXJuZWwvYnBmL2NvbnN0X2ZvbGQuYy0yMzEtXG5rZXJuZWwvYnBmL2NvbnN0X2ZvbGQuYzoyMzI6aW50IGJwZl9jb21wdXRlX2NvbnN0X3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvY29uc3RfZm9sZC5jLTIzMy17XG4tLVxua2VybmVsL2JwZi9jb25zdF9mb2xkLmM9MzE1PXN0YXRpYyBpbnQgZXZhbF9jb25zdF9icmFuY2godTggb3Bjb2RlLCB1NjQgZHN0X3ZhbCwgdTY0IHNyY192YWwpXG4tLVxua2VybmVsL2JwZi9jb25zdF9mb2xkLmMtMzM4LSAqL1xua2VybmVsL2JwZi9jb25zdF9mb2xkLmM6MzM5OmludCBicGZfcHJ1bmVfZGVhZF9icmFuY2hlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9jb25zdF9mb2xkLmMtMzQwLXtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0xNzc9RVhQT1JUX1NZTUJPTF9HUEwoYnBmX3Byb2dfYWxsb2MpO1xua2VybmVsL2JwZi9jb3JlLmMtMTc4LVxua2VybmVsL2JwZi9jb3JlLmM6MTc5OmludCBicGZfcHJvZ19hbGxvY19qaXRlZF9saW5mbyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5rZXJuZWwvYnBmL2NvcmUuYy0xODAte1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTI4OD12b2lkIF9fYnBmX3Byb2dfZnJlZShzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTMwMS1cbmtlcm5lbC9icGYvY29yZS5jOjMwMjppbnQgYnBmX3Byb2dfY2FsY190YWcoc3RydWN0IGJwZl9wcm9nICpmcClcbmtlcm5lbC9icGYvY29yZS5jLTMwMy17XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9NDU2PXN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fc2luZ2xlKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIG9mZixcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy01MTYtXG5rZXJuZWwvYnBmL2NvcmUuYzo1MTc6aW50IGJwZl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgY250KVxua2VybmVsL2JwZi9jb3JlLmMtNTE4LXtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz01NDE9dm9pZCBicGZfcHJvZ19rYWxsc3ltc19kZWxfYWxsKHN0cnVjdCBicGZfcHJvZyAqZnApXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtNTQ4LS8qIEFsbCBCUEYgSklUIHN5c2N0bCBrbm9icyBoZXJlLiAqL1xua2VybmVsL2JwZi9jb3JlLmM6NTQ5OmludCBicGZfaml0X2VuYWJsZSAgIF9fcmVhZF9tb3N0bHkgPSBJU19CVUlMVElOKENPTkZJR19CUEZfSklUX0RFRkFVTFRfT04pO1xua2VybmVsL2JwZi9jb3JlLmM6NTUwOmludCBicGZfaml0X2thbGxzeW1zIF9fcmVhZF9tb3N0bHkgPSBJU19CVUlMVElOKENPTkZJR19CUEZfSklUX0RFRkFVTFRfT04pO1xua2VybmVsL2JwZi9jb3JlLmM6NTUxOmludCBicGZfaml0X2hhcmRlbiAgIF9fcmVhZF9tb3N0bHk7XG5rZXJuZWwvYnBmL2NvcmUuYy01NTItbG9uZyBicGZfaml0X2xpbWl0ICAgX19yZWFkX21vc3RseTtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz03MTM9c3RhdGljIHN0cnVjdCBicGZfa3N5bSAqYnBmX2tzeW1fZmluZCh1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtNzIwLVxua2VybmVsL2JwZi9jb3JlLmM6NzIxOmludCBicGZfYWRkcmVzc19sb29rdXAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nICpzaXplLFxua2VybmVsL2JwZi9jb3JlLmMtNzIyLVx0XHQgICAgICAgdW5zaWduZWQgbG9uZyAqb2ZmLCBjaGFyICpzeW0pXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9Nzg0PWNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKnNlYXJjaF9icGZfZXh0YWJsZXModW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTgwMS1cbmtlcm5lbC9icGYvY29yZS5jOjgwMjppbnQgYnBmX2dldF9rYWxsc3ltKHVuc2lnbmVkIGludCBzeW1udW0sIHVuc2lnbmVkIGxvbmcgKnZhbHVlLCBjaGFyICp0eXBlLFxua2VybmVsL2JwZi9jb3JlLmMtODAzLVx0XHQgICAgY2hhciAqc3ltKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTgyOS1cbmtlcm5lbC9icGYvY29yZS5jOjgzMDppbnQgYnBmX2ppdF9hZGRfcG9rZV9kZXNjcmlwdG9yKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbmtlcm5lbC9icGYvY29yZS5jLTgzMS1cdFx0XHRcdHN0cnVjdCBicGZfaml0X3Bva2VfZGVzY3JpcHRvciAqcG9rZSlcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0xMTA3PXB1cmVfaW5pdGNhbGwoYnBmX2ppdF9jaGFyZ2VfaW5pdCk7XG5rZXJuZWwvYnBmL2NvcmUuYy0xMTA4LVxua2VybmVsL2JwZi9jb3JlLmM6MTEwOTppbnQgYnBmX2ppdF9jaGFyZ2VfbW9kbWVtKHUzMiBzaXplKVxua2VybmVsL2JwZi9jb3JlLmMtMTExMC17XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MTE5Nz1icGZfaml0X2JpbmFyeV9wYWNrX2FsbG9jKHVuc2lnbmVkIGludCBwcm9nbGVuLCB1OCAqKmltYWdlX3B0cixcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xMjQyLS8qIENvcHkgSklUZWQgdGV4dCBmcm9tIHJ3X2hlYWRlciB0byBpdHMgZmluYWwgbG9jYXRpb24sIHRoZSByb19oZWFkZXIuICovXG5rZXJuZWwvYnBmL2NvcmUuYzoxMjQzOmludCBicGZfaml0X2JpbmFyeV9wYWNrX2ZpbmFsaXplKHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqcm9faGVhZGVyLFxua2VybmVsL2JwZi9jb3JlLmMtMTI0NC1cdFx0XHRcdCBzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKnJ3X2hlYWRlcilcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0xMzAzPXZvaWQgX193ZWFrIGJwZl9qaXRfZnJlZShzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTEzMTQtXG5rZXJuZWwvYnBmL2NvcmUuYzoxMzE1OmludCBicGZfaml0X2dldF9mdW5jX2FkZHIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxua2VybmVsL2JwZi9jb3JlLmMtMTMxNi1cdFx0XHQgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBleHRyYV9wYXNzLFxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTI0NzM9RVZBTDQoUFJPR19OQU1FX0xJU1QsIDQxNiwgNDQ4LCA0ODAsIDUxMilcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDc3LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jOjI0Nzg6aW50IGJwZl9wYXRjaF9jYWxsX2FyZ3Moc3RydWN0IGJwZl9pbnNuICppbnNuLCB1MzIgc3RhY2tfZGVwdGgpXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDc5LXtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0yNzg1PXZvaWQgYnBmX3Byb2dfYXJyYXlfZnJlZV9zbGVlcGFibGUoc3RydWN0IGJwZl9wcm9nX2FycmF5ICpwcm9ncylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNzkxLVxua2VybmVsL2JwZi9jb3JlLmM6Mjc5MjppbnQgYnBmX3Byb2dfYXJyYXlfbGVuZ3RoKHN0cnVjdCBicGZfcHJvZ19hcnJheSAqYXJyYXkpXG5rZXJuZWwvYnBmL2NvcmUuYy0yNzkzLXtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0yODEzPXN0YXRpYyBib29sIGJwZl9wcm9nX2FycmF5X2NvcHlfY29yZShzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKmFycmF5LFxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI4MzItXG5rZXJuZWwvYnBmL2NvcmUuYzoyODMzOmludCBicGZfcHJvZ19hcnJheV9jb3B5X3RvX3VzZXIoc3RydWN0IGJwZl9wcm9nX2FycmF5ICphcnJheSxcbmtlcm5lbC9icGYvY29yZS5jLTI4MzQtXHRcdFx0XHRfX3UzMiBfX3VzZXIgKnByb2dfaWRzLCB1MzIgY250KVxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTI4NTk9dm9pZCBicGZfcHJvZ19hcnJheV9kZWxldGVfc2FmZShzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKmFycmF5LFxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI4ODUtICovXG5rZXJuZWwvYnBmL2NvcmUuYzoyODg2OmludCBicGZfcHJvZ19hcnJheV9kZWxldGVfc2FmZV9hdChzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKmFycmF5LCBpbnQgaW5kZXgpXG5rZXJuZWwvYnBmL2NvcmUuYy0yODg3LXtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yOTA1LSAqL1xua2VybmVsL2JwZi9jb3JlLmM6MjkwNjppbnQgYnBmX3Byb2dfYXJyYXlfdXBkYXRlX2F0KHN0cnVjdCBicGZfcHJvZ19hcnJheSAqYXJyYXksIGludCBpbmRleCxcbmtlcm5lbC9icGYvY29yZS5jLTI5MDctXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjkyNS1cbmtlcm5lbC9icGYvY29yZS5jOjI5MjY6aW50IGJwZl9wcm9nX2FycmF5X2NvcHkoc3RydWN0IGJwZl9wcm9nX2FycmF5ICpvbGRfYXJyYXksXG5rZXJuZWwvYnBmL2NvcmUuYy0yOTI3LVx0XHRcdHN0cnVjdCBicGZfcHJvZyAqZXhjbHVkZV9wcm9nLFxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI5OTYtXG5rZXJuZWwvYnBmL2NvcmUuYzoyOTk3OmludCBicGZfcHJvZ19hcnJheV9jb3B5X2luZm8oc3RydWN0IGJwZl9wcm9nX2FycmF5ICphcnJheSxcbmtlcm5lbC9icGYvY29yZS5jLTI5OTgtXHRcdFx0ICAgICB1MzIgKnByb2dfaWRzLCB1MzIgcmVxdWVzdF9jbnQsXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzQ3ND1jb25zdCBzdHJ1Y3QgYnBmX2xpbmVfaW5mbyAqYnBmX2ZpbmRfbGluZm8oY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgaW5zbl9vZmYpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMzUxMC1cbmtlcm5lbC9icGYvY29yZS5jOjM1MTE6aW50IGJwZl9wcm9nX2dldF9maWxlX2xpbmUoc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1bnNpZ25lZCBsb25nIGlwLCBjb25zdCBjaGFyICoqZmlsZXAsXG5rZXJuZWwvYnBmL2NvcmUuYy0zNTEyLVx0XHRcdCAgIGNvbnN0IGNoYXIgKipsaW5lcCwgaW50ICpudW1wKVxuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmM9NTI9c3RydWN0IGJwZl9jcnlwdG9fY3R4IHtcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jLTU5LVxua2VybmVsL2JwZi9jcnlwdG8uYzo2MDppbnQgYnBmX2NyeXB0b19yZWdpc3Rlcl90eXBlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUpXG5rZXJuZWwvYnBmL2NyeXB0by5jLTYxLXtcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jPTg1PUVYUE9SVF9TWU1CT0xfR1BMKGJwZl9jcnlwdG9fcmVnaXN0ZXJfdHlwZSk7XG5rZXJuZWwvYnBmL2NyeXB0by5jLTg2LVxua2VybmVsL2JwZi9jcnlwdG8uYzo4NzppbnQgYnBmX2NyeXB0b191bnJlZ2lzdGVyX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZSlcbmtlcm5lbC9icGYvY3J5cHRvLmMtODgte1xuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0yMzA9c3RhdGljIHZvaWQgZGlhZ193cml0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBjaGFyICpmbXQsIC4uLikgX19wcmludGYoMiwgMyk7XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMjMxLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjIzMjppbnQgYnBmX2RpYWdfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTIzMy17XG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oPTQ1PWJvb2wgYnBmX2RpYWdfZW5hYmxlZChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuaDo0NjppbnQgYnBmX2RpYWdfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuaC00Ny12b2lkIGJwZl9kaWFnX2luaXRfZnJhbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz02Mz1zdGF0aWMgYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xMDMtICovXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEwNDppbnQgYnBmX2luc25fZGVmMzIoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEwNS17XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz01NjQ9dm9pZCBicGZfb3B0X2hhcmRfd2lyZV9kZWFkX2NvZGVfYnJhbmNoZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTU4OS1cbmtlcm5lbC9icGYvZml4dXBzLmM6NTkwOmludCBicGZfb3B0X3JlbW92ZV9kZWFkX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvZml4dXBzLmMtNTkxLXtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTYxMy1cbmtlcm5lbC9icGYvZml4dXBzLmM6NjE0OmludCBicGZfb3B0X3JlbW92ZV9ub3BzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTYxNS17XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy02MzgtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjYzOTppbnQgYnBmX29wdF9zdWJyZWdfemV4dF9sbzMyX3JuZF9oaTMyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTY0MC1cdFx0XHRcdFx0IGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNzQwLSAqL1xua2VybmVsL2JwZi9maXh1cHMuYzo3NDE6aW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9maXh1cHMuYy03NDIte1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9MTA2Nj1zdGF0aWMgaW50IGppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTMzMy1cbmtlcm5lbC9icGYvZml4dXBzLmM6MTMzNDppbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9maXh1cHMuYy0xMzM1LXtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE0MDQtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE0MDU6aW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvZml4dXBzLmMtMTQwNi17XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0xNDc5PXN0YXRpYyBpbnQgYWRkX2hpZGRlbl9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIGludCBsZW4pXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xNTA3LSAqL1xua2VybmVsL2JwZi9maXh1cHMuYzoxNTA4OmludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUwOS17XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0yNTcwPXN0YXRpYyBib29sIGlzX2JwZl9sb29wX2NhbGwoc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjU4NS0gKi9cbmtlcm5lbC9icGYvZml4dXBzLmM6MjU4NjppbnQgYnBmX29wdGltaXplX2JwZl9sb29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI1ODcte1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjYzMy0gKi9cbmtlcm5lbC9icGYvZml4dXBzLmM6MjYzNDppbnQgYnBmX3JlbW92ZV9mYXN0Y2FsbF9zcGlsbHNfZmlsbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvZml4dXBzLmMtMjYzNS17XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjQ1OT1zdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1MzIgY3B1KVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0NzQtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNDc1OmludCBicGZfcGVyY3B1X2hhc2hfY29weShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjQ3Ni17XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjUxMi1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI1MTM6aW50IGJwZl9wZXJjcHVfaGFzaF91cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1MTQtXHRcdFx0ICAgdTY0IG1hcF9mbGFncylcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNjEwPXN0YXRpYyB2b2lkIGZkX2h0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNjMxLS8qIG9ubHkgY2FsbGVkIGZyb20gc3lzY2FsbCAqL1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjYzMjppbnQgYnBmX2ZkX2h0YWJfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdTMyICp2YWx1ZSlcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI2MzMte1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI2NTEtLyogT25seSBjYWxsZWQgZnJvbSBzeXNjYWxsICovXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNjUyOmludCBicGZfZmRfaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjY1My1cdFx0XHRcdHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NzcxPXN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIGJwZl9icHJpbnRmX25lc3RfbGV2ZWwpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNzcyLVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NzczOmludCBicGZfdHJ5X2dldF9idWZmZXJzKHN0cnVjdCBicGZfYnByaW50Zl9idWZmZXJzICoqYnVmcylcbmtlcm5lbC9icGYvaGVscGVycy5jLTc3NC17XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9Nzk3PXZvaWQgYnBmX2JwcmludGZfY2xlYW51cChzdHJ1Y3QgYnBmX2JwcmludGZfZGF0YSAqZGF0YSlcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy04MTctICovXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo4MTg6aW50IGJwZl9icHJpbnRmX3ByZXBhcmUoY29uc3QgY2hhciAqZm10LCB1MzIgZm10X3NpemUsIGNvbnN0IHU2NCAqcmF3X2FyZ3MsXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy04MTktXHRcdFx0dTMyIG51bV9hcmdzLCBzdHJ1Y3QgYnBmX2JwcmludGZfZGF0YSAqZGF0YSlcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0xODEwPXN0YXRpYyB2b2lkIGJwZl9keW5wdHJfc2V0X3NpemUoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqcHRyLCB1NjQgbmV3X3NpemUpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTgyMi1cbmtlcm5lbC9icGYvaGVscGVycy5jOjE4MjM6aW50IGJwZl9keW5wdHJfY2hlY2tfc2l6ZSh1NjQgc2l6ZSlcbmtlcm5lbC9icGYvaGVscGVycy5jLTE4MjQte1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ3MDM9X19icGZfa2Z1bmMgaW50IGJwZl9keW5wdHJfZnJvbV9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCB1MzIgZmxhZ3MsIHN0cnVjdCBicGZfZHlucHRyICpwdHJfX3VuaW5pdClcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NzA3LVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDcwODppbnQgYnBmX2R5bnB0cl9mcm9tX2ZpbGVfc2xlZXBhYmxlKHN0cnVjdCBmaWxlICpmaWxlLCB1MzIgZmxhZ3MsIHN0cnVjdCBicGZfZHlucHRyICpwdHJfX3VuaW5pdClcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ3MDkte1xuLS1cbmtlcm5lbC9icGYvaW5vZGUuYz00OTE9c3RhdGljIGludCBicGZfb2JqX2RvX3BpbihpbnQgcGF0aF9mZCwgY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLCB2b2lkICpyYXcsXG4tLVxua2VybmVsL2JwZi9pbm9kZS5jLTUzMi1cbmtlcm5lbC9icGYvaW5vZGUuYzo1MzM6aW50IGJwZl9vYmpfcGluX3VzZXIodTMyIHVmZCwgaW50IHBhdGhfZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSlcbmtlcm5lbC9icGYvaW5vZGUuYy01MzQte1xuLS1cbmtlcm5lbC9icGYvaW5vZGUuYz01NTA9c3RhdGljIHZvaWQgKmJwZl9vYmpfZG9fZ2V0KGludCBwYXRoX2ZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXG4tLVxua2VybmVsL2JwZi9pbm9kZS5jLTU4MS1cbmtlcm5lbC9icGYvaW5vZGUuYzo1ODI6aW50IGJwZl9vYmpfZ2V0X3VzZXIoaW50IHBhdGhfZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSwgaW50IGZsYWdzKVxua2VybmVsL2JwZi9pbm9kZS5jLTU4My17XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jPTEwMT1zdGF0aWMgc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmxvb2t1cF9pbnN0YW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTktXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTIwOmludCBicGZfc3RhY2tfbGl2ZW5lc3NfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEyMS17XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jPTE5MD1zdGF0aWMgaW50IG1hcmtfc3RhY2tfd3JpdGUoc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmluc3RhbmNlLCB1MzIgZnJhbWUsIHUzMiBpbnNuX2lkeCwgc3Bpc190IG1hc2spXG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTIwMC1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoyMDE6aW50IGJwZl9qbXBfb2Zmc2V0KHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0yMDIte1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0zMzA9c3RhdGljIGJvb2wgaXNfbGl2ZV9iZWZvcmUoc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmluc3RhbmNlLCB1MzIgaW5zbl9pZHgsIHUzMiBmcmFtZW5vLCB1MzIgaGFsZl9zcGkpXG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTMzNy1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzozMzg6aW50IGJwZl9saXZlX3N0YWNrX3F1ZXJ5X2luaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QpXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMzM5LXtcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MTg0MD1zdGF0aWMgaW50IGFuYWx5emVfc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xOTg0LVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE5ODU6aW50IGJwZl9jb21wdXRlX3N1YnByb2dfYXJnX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE5ODYte1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0yMDYxPXN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjIyMy0gKi9cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoyMjI0OmludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTIyMjUte1xuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jPTE0ND1zdGF0aWMgbG9uZyBjZ3JvdXBfc3RvcmFnZV91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTgxLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTgyOmludCBicGZfcGVyY3B1X2Nncm91cF9zdG9yYWdlX2NvcHkoc3RydWN0IGJwZl9tYXAgKl9tYXAsIHZvaWQgKmtleSxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTE4My1cdFx0XHRcdCAgIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTIxNS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjIxNjppbnQgYnBmX3BlcmNwdV9jZ3JvdXBfc3RvcmFnZV91cGRhdGUoc3RydWN0IGJwZl9tYXAgKl9tYXAsIHZvaWQgKmtleSxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTIxNy1cdFx0XHRcdCAgICAgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM9NDYxPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBjZ3JvdXBfc3RvcmFnZV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQ3My1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ3NDppbnQgYnBmX2Nncm91cF9zdG9yYWdlX2Fzc2lnbihzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgsIHN0cnVjdCBicGZfbWFwICpfbWFwKVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDc1LXtcbi0tXG5rZXJuZWwvYnBmL2xvZy5jPTE2PXN0YXRpYyBib29sIGJwZl92ZXJpZmllcl9sb2dfYXR0cl92YWxpZCh1MzIgbG9nX2xldmVsLCBjaGFyIF9fdXNlciAqbG9nX2J1ZiwgdTMyIGxvZ19zaXplKVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzU3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvcmUgb2YgdGhpcyBCUEYgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIFRoZSBmaWxlcyB0byBzdGFydCB3aXRoIGFyZSBvYnZpb3VzbHkgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYC4gRnJvbSBtZW1vcnksIEkgcmVjYWxsIHNvbWUga2V5IGZ1bmN0aW9ucyBpbiBgYmFja3RyYWNrLmNgIHRoYXQgd2lsbCBiZSByZWxldmFudCB0byB0cmFja2luZyBhbmQgZW5zdXJpbmcgdGhlIHByZWNpc2lvbiBvZiB0aGUgYW5hbHlzaXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBvZiBgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uYCwgYGJwZl9tYXJrX2FsbF9zY2FsYXJzX3ByZWNpc2VgLCBhbmQgYGJwZl9wdXNoX2ptcF9oaXN0b3J5YC4gVGhlc2UgbGlrZWx5IGRlYWwgd2l0aCBtYWludGFpbmluZyB0aGUgc3RhdGUgYW5kIGhpc3Rvcnkgb2YgdGhlIGp1bXAgaW5zdHJ1Y3Rpb25zLCBjcnVjaWFsIGZvciBwcmVjaXNlIHNjYWxhciBhbmFseXNpcy4KCk5vdywgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSB2ZXJpZmljYXRpb24gaXRzZWxmIHdpbGwgYmUgaW4gYHZlcmlmaWVyLmNgLiBMZXQmIzM5O3MgemVybyBpbiBvbiBgYnBmX2NoZWNrYC4gSSBzaG91bGQgY2hlY2sgdGhhdCBkZWZpbml0aW9uIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFuZCBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGludm9sdmVkLiBUaGF0JiMzOTtzIHRoZSBnYXRla2VlcGVyLCBzbyB0aGF0JiMzOTtzIHdoZXJlIHRoZSB2ZXJpZmljYXRpb24gbG9naWMgaXMgZ29pbmcgdG8ga2ljayBpbi4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCBvcmNoZXN0cmF0ZXMgdGhlIG92ZXJhbGwgcHJvY2Vzcywgd2hhdCBpdCBjb25zaWRlcnMsIHdoYXQgaXQgdmVyaWZpZXMsIGFuZCBob3cgaXQgY2FsbHMgb24gdGhlIG90aGVyIHN1cHBvcnQgZnVuY3Rpb25zIHRvIHRyYWNrIHRoZSBwcm9ncmFtIHN0YXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgYnBmX2NoZWNrXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA4NTk9c3RhdGljIGludCBicGZfcHJvZ192ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTc1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwOTc2OmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTc3LVx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTIwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKk5hdmlnYXRpbmcgdGhlIEJQRiBWZXJpZmllcioqCgpPa2F5LCBzbyBgYnBmX2NoZWNrYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyLCBnb3QgaXQuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIGd1bi4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHByZWNpc2lvbiB0cmFja2luZyB3b3JrcywgYW5kIGl0IGxvb2tzIGxpa2UgYGJwZl9tYXJrX2NoYWluX3ByZWNpc2lvbmAgaW4gYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgIGlzIHRoZSBrZXkuIFRoYXQgZnVuY3Rpb24gc2VlbXMgdG8gYmUgdGhlIG9uZSB0aGF0IGFjdHVhbGx5IGNhbGxzIHRoZSB1cGRhdGVkIGBiYWNrdHJhY2tfaW5zbmAgbG9naWMgZGlyZWN0bHkuICBJIG5lZWQgdG8gZ28gbG9vayBhdCBob3cgYGJwZl9wcm9nX2xvYWRgIGlzIGNhbGxlZCwgc28gSSBuZWVkIHRvIGNoZWNrIGBzeXNjYWxsLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcHJvZ19sb2FkXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz0yOTEyPUJURl9JRF9MSVNUX0dMT0JBTF9TSU5HTEUoYnBmX211bHRpX2Z1bmNfYnRmX2lkLCBmdW5jLCBicGZfbXVsdGlfZnVuYylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yOTE2LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjkxNzpzdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI5MTgte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzMDM9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzNjYtXHRcdFx0XHRcdHNpemVfY29tbW9uKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzNjc6XHRcdGVyciA9IGVyciA/OiBicGZfcHJvZ19sb2FkKFx1MDAyNmF0dHIsIHVhdHRyLCBcdTAwMjZhdHRyX2xvZyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzY4LVx0XHRicmVhaztcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA5NzY9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDMyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMDMzOlx0cmV0ID0gc2VjdXJpdHlfYnBmX3Byb2dfbG9hZChlbnYtXHUwMDNlcHJvZywgYXR0ciwgZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZXRva2VuLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDM0LVx0XHRcdFx0ICAgICB1YXR0ci5pc19rZXJuZWwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzU3MAoJCQkJCQkJb3V0cHV0OiAxNDQKCQkJCQkJCXRob3VnaHRzOiA0NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZSBldmVyeXRoaW5nIHJpZ2h0IGZvciB0aGlzIGZ1enppbmcgc2V0dXAuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIEl0IHNlZW1zIGxpa2UgYEJQRl9TWVNDQUxMYCBpcyBzdGFuZGFyZCBmb3IgdGhpcyBjb250ZXh0LiBOb3csIEkgd2FudCB0byBjb25maXJtIHRoYXQgYGJwZl9jaGVja2AgaXMgYWN0dWFsbHkgaW52b2x2ZWQgZHVyaW5nIHRoZSBgYnBmX3Byb2dfbG9hZGAgcHJvY2Vzcy4gQWgsIHllcywgaXQgbG9va3MgbGlrZSBgYnBmX3Byb2dfbG9hZCgpYCBkb2VzIGluZGVlZCBjYWxsIGBicGZfY2hlY2soKWAuIEFuZCwgYXMgSSBzdXNwZWN0ZWQsIGBicGZfY2hlY2soKWAgaXMgcmVzcG9uc2libGUgZm9yIHZlcmlmaWNhdGlvbiwgd2hpY2ggdGhlbiBjYWxscyBgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKClgIHdpdGhpbiBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AuIFRoaXMgZnVuY3Rpb24gaXMga2V5IGJlY2F1c2UgaXQgcnVucyB0aGUgYmFja3RyYWNraW5nIGxvb3AsIGFuZCB0aGF0IGxvb3AsIGluIHR1cm4sIGNhbGxzIGBiYWNrdHJhY2tfaW5zbigpYC4KCkFscmlnaHQsIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCB0aGUgaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIHByb21wdCBhbGlnbnM6Ci0gICBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLCBnb29kLgotICAgYEVuYWJsZUNvbmZpZ3NgIGluY2x1ZGVzIGAmIzM0O0JQRl9TWVNDQUxMJiMzNDtgLgotICAgYEZvY3VzU3ltYm9sc2AgbGlzdHMgYCYjMzQ7YnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uJiMzNDtgIGFuZCBgJiMzNDticGZfY2hlY2smIzM0O2AuCi0gICBUaGUgaW5zdHJ1Y3Rpb24gaXMgdG8gZ2l2ZSBhIGNvbmNpc2UgZXhwbGFuYXRpb24uCgpOb3csIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBXZSBoYXZlIHRvIGVuc3VyZSB0aGF0IGBCUEZfU1lTQ0FMTGAgaXMgYWN0dWFsbHkgcmVxdWlyZWQsIHNvIEkmIzM5O2xsIHZlcmlmeSBpZiBgYmFja3RyYWNrLm9gIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzZXQuIExvb2tzIGxpa2UgdGhhdCYjMzk7cyB0aGUgY2FzZS4gQWxzbywgSSBoYXZlIHRvIGJlIHN1cmUgdGhhdCBgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uYCBhbmQgYGJwZl9jaGVja2AgYXJlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBMZXQgbWUgY2hlY2sgdGhlIHNvdXJjZSBjb2RlOgoKSW4gYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgLCB0aGUgZGVjbGFyYXRpb24gZm9yIGBicGZfbWFya19jaGFpbl9wcmVjaXNpb25gIGlzIGBpbnQgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0YXJ0aW5nX3N0YXRlLCBpbnQgcmVnbm8sIGJvb2wgKmNoYW5nZWQpYC4gU28sIGl0JiMzOTtzIG5vdCBzdGF0aWMuCkluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCB0aGUgZGVjbGFyYXRpb24gZm9yIGBicGZfY2hlY2tgIGlzIGBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpYCwgYWxzbyBub24tc3RhdGljLgoKRmluYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHBhcmFtZXRlcnMgbWF0Y2g6IGBFbmFibGVDb25maWdzYCBpcyBhbiBhcnJheSBvZiBzdHJpbmdzIHdpdGhvdXQgdGhlIGBDT05GSUdfYCBwcmVmaXguIFdlIGhhdmUgYFsmIzM0O0JQRl9TWVNDQUxMJiMzNDtdYC4gYEZvY3VzU3ltYm9sc2AgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy4gV2UgaGF2ZSBgWyYjMzQ7YnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uJiMzNDssICYjMzQ7YnBmX2NoZWNrJiMzNDtdYC4gYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYC4gQW5kIHRoZSBpbnN0cnVjdGlvbnMgcmVxdWlyZSBhIGNvbmNpc2UgZXhwbGFuYXRpb24sIHdoaWNoIEkgaGF2ZSBpbiBtaW5kLgoKQWxsIGNoZWNrcyBhcmUgZ29vZCB0byBnbywgYW5kIEkmIzM5O20gcmVhZHkgdG8gY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfbWFya19jaGFpbl9wcmVjaXNpb24mIzM0OywKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3Mgc2NhbGFyIHByZWNpc2lvbiBiYWNrdHJhY2tpbmcgbG9naWMgaW4gYmFja3RyYWNrX2luc24oKSBmb3IgQlBGX0xEIChzcGVjaWZpY2FsbHkgQlBGX0FCUy9CUEZfSU5EIGluc3RydWN0aW9ucyB3aXRoIGltcGxpY2l0IHN1YnByb2dyYW0gZXhpdCBicmFuY2hlcykgdG8gcHJvcGVybHkgYWRqdXN0IHRoZSBiYWNrdHJhY2sgY2FsbCBmcmFtZSBhbmQgcHJldmVudCB2ZXJpZmllciBjcmFzaGVzL3NlZ2ZhdWx0cy4gVGhpcyBpcyBjb3JlIHZlcmlmaWVyIGxvZ2ljIHJlYWNoYWJsZSB2aWEgdGhlIGJwZihCUEZfUFJPR19MT0FEKSBzeXNjYWxsIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9tYXJrX2NoYWluX3ByZWNpc2lvbiYjMzQ7LAogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBzY2FsYXIgcHJlY2lzaW9uIGJhY2t0cmFja2luZyBsb2dpYyBpbiBiYWNrdHJhY2tfaW5zbigpIGZvciBCUEZfTEQgKHNwZWNpZmljYWxseSBCUEZfQUJTL0JQRl9JTkQgaW5zdHJ1Y3Rpb25zIHdpdGggaW1wbGljaXQgc3VicHJvZ3JhbSBleGl0IGJyYW5jaGVzKSB0byBwcm9wZXJseSBhZGp1c3QgdGhlIGJhY2t0cmFjayBjYWxsIGZyYW1lIGFuZCBwcmV2ZW50IHZlcmlmaWVyIGNyYXNoZXMvc2VnZmF1bHRzLiBUaGlzIGlzIGNvcmUgdmVyaWZpZXIgbG9naWMgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQpIHN5c2NhbGwgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgc2NhbGFyIHByZWNpc2lvbiBiYWNrdHJhY2tpbmcgbG9naWMgaW4gYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgIHRvIHByb3Blcmx5IHVwZGF0ZSB0aGUgc3VicHJvZ3JhbSBjYWxsIGZyYW1lIChgYnRfc3VicHJvZ19lbnRlcmApIHdoZW4gYmFja3RyYWNraW5nIHRoZSBpbXBsaWNpdCBlYXJseSBleGl0IHBhdGggb2YgYEJQRl9MRCB8IEJQRl9BQlNgIGFuZCBgQlBGX0xEIHwgQlBGX0lORGAgaW5zdHJ1Y3Rpb25zLiBcblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB2ZXJpZmllciBicmFuY2hlcywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zIG9yIG1lbW9yeSBpbml0aWFsaXphdGlvbiBwYXRocy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIGZyYW1lIGluZGV4aW5nIGVycm9ycyBvciB2ZXJpZmllciBzdGF0ZSBjb3JydXB0aW9uIHdvdWxkIG1hbmlmZXN0IGFzIGNvbnRyb2wgZmxvdyBmYXVsdHMsIGFzc2VydGlvbnMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd2hpY2ggYXJlIGFscmVhZHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA2MzU5ZTQ3NDgxY2YyMzczMGM1OTIwYWMyZGJiZTA2ZDVhNGY4MTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDIwOjQ1OjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9iYWNrdHJhY2suYyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmMKaW5kZXggYTJiMThhOWYxNjk0Yy4uZWFmNzQzOGI5ZWJmOSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9iYWNrdHJhY2suYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2JhY2t0cmFjay5jCkBAIC01ODIsMTYgJiM0Mzs1ODIsMjkgQEAgc3RhdGljIGludCBiYWNrdHJhY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LCBpbnQgc3Vic2VxX2lkeCwKIAkJCSAgKi8KIAkJfQogCX0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEKSB7Ci0JCWlmICghYnRfaXNfcmVnX3NldChidCwgZHJlZykpCi0JCQlyZXR1cm4gMDsKLQkJYnRfY2xlYXJfcmVnKGJ0LCBkcmVnKTsKIAkJLyogSXQmIzM5O3MgbGRfaW1tNjQgb3IgbGRfYWJzIG9yIGxkX2luZC4KIAkJICogRm9yIGxkX2ltbTY0IG5vIGZ1cnRoZXIgdHJhY2tpbmcgb2YgcHJlY2lzaW9uCiAJCSAqIGludG8gcGFyZW50IGlzIG5lY2Vzc2FyeQogCQkgKi8KLQkJaWYgKG1vZGUgPT0gQlBGX0lORCB8fCBtb2RlID09IEJQRl9BQlMpCi0JCQkvKiB0byBiZSBhbmFseXplZCAqLwotCQkJcmV0dXJuIC1FTk9UU1VQUDsKJiM0MzsJCWlmIChtb2RlID09IEJQRl9JTU0pIHsKJiM0MzsJCQlidF9jbGVhcl9yZWcoYnQsIGRyZWcpOwomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJfQomIzQzOwkJLyoKJiM0MzsJCSAqIEJQRl97SU5ELEFCU30gYXJlIG1vZGVsbGVkIGFzIHR3byBicmFuY2hlczoKJiM0MzsJCSAqIC0gZmFsbHRocm91Z2g7CiYjNDM7CQkgKiAtIGltcGxpY2l0IHN1YnByb2dyYW0gZXhpdC4KJiM0MzsJCSAqIEl0IGlzIG5lY2Vzc2FyeSB0byBzd2l0Y2ggY3VycmVudCBmcmFtZSBpZgomIzQzOwkJICogaW1wbGljaXQgc3VicHJvZ3JhbSBleGl0IGJyYW5jaCBpcyBiYWNrdHJhY2tlZC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG1vZGUgPT0gQlBGX0lORCB8fCBtb2RlID09IEJQRl9BQlMpIHsKJiM0MzsJCQlpZiAoYnRfaXNfcmVnX3NldChidCwgZHJlZykpCiYjNDM7CQkJCXJldHVybiAtRU5PVFNVUFA7CiYjNDM7CQkJaWYgKHN1YnNlcV9pZHggIT0gaWR4ICYjNDM7IDEpCiYjNDM7CQkJCWlmIChidF9zdWJwcm9nX2VudGVyKGJ0KSkKJiM0MzsJCQkJCXJldHVybiAtRUZBVUxUOwomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJfQogCX0KIAkvKiBQcm9wYWdhdGUgcHJlY2lzaW9uIG1hcmtzIHRvIGxpbmtlZCByZWdpc3RlcnMsIHRvIGFjY291bnQgZm9yCiAJICogcmVnaXN0ZXJzIG1hcmtlZCBhcyBwcmVjaXNlIGluIHRoaXMgZnVuY3Rpb24uCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3VicHJvZ19wcmVjaXNpb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zdWJwcm9nX3ByZWNpc2lvbi5jCmluZGV4IGQyMWQzMmY2YTY3NjAuLmUxNzRhOTA1YzU2MjggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zdWJwcm9nX3ByZWNpc2lvbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zdWJwcm9nX3ByZWNpc2lvbi5jCkBAIC04NDYsNCAmIzQzOzg0Niw1NSBAQCBfX25ha2VkIGludCBzdWJwcm9nX3Jlc3VsdF90YWlsX2NhbGwodm9pZCkKIAkpOwogfQogCiYjNDM7X19uYWtlZCBfX25vaW5saW5lIF9fdXNlZAomIzQzO3N0YXRpYyBpbnQgbGRfYWJzX3N1YnByb2codm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoCiYjNDM7CQkmIzM0O3I2ID0gcjE7JiMzNDsKJiM0MzsJCSYjMzQ7cjcgPSByMTsmIzM0OwomIzQzOwkJJiMzNDsuOGJ5dGUgJVtsZF9hYnNdOyYjMzQ7CiYjNDM7CQkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJCToKJiM0MzsJCTogX19pbW1faW5zbihsZF9hYnMsIEJQRl9MRF9BQlMoQlBGX1csIDApKQomIzQzOwkJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBCdWdneSB2ZXJpZmllciBkaWQgbm90IHByb3Blcmx5IGJhY2t0cmFjayBlYXJseSBzdWJwcm9ncmFtIGV4aXQKJiM0MzsgKiBtb2RlbGxlZCBmb3IgQlBGX0xEIHwgQlBGX0FCUyBpbnN0cnVjdGlvbiwgY2F1c2luZyBhIHNlZ2ZhdWx0LgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO19fbG9nX2xldmVsKDIpCiYjNDM7LyogZWFybHkgZXhpdCBwYXRoICovCiYjNDM7X19tc2coJiMzNDszOiAoMGYpIHIxICYjNDM7PSByNyYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSAyOiAoYmYpIHIxID0gcjEwJiMzNDspCiYjNDM7X19tc2coJiMzNDttYXJrX3ByZWNpc2U6IGZyYW1lMDogcmVncz1yNyBzdGFjaz0gYmVmb3JlIDk6ICgyMCkgcjAgPSAqKHUzMiAqKXNrYlswXSYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgODogKGJmKSByNyA9IHIxJiMzNDspCiYjNDM7X19tc2coJiMzNDttYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSA3OiAoYmYpIHI2ID0gcjEmIzM0OykKJiM0MztfX21zZygmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDE6ICg4NSkgY2FsbCBwYyYjNDM7NSYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSAwOiAoYjcpIHI3ID0gLTgmIzM0OykKJiM0MzsvKiBmYWxsdGhyb3VnaCBwYXRoICovCiYjNDM7X19tc2coJiMzNDszOiAoMGYpIHIxICYjNDM7PSByNyYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSAyOiAoYmYpIHIxID0gcjEwJiMzNDspCiYjNDM7X19tc2coJiMzNDttYXJrX3ByZWNpc2U6IGZyYW1lMDogcmVncz1yNyBzdGFjaz0gYmVmb3JlIDEwOiAoOTUpIGV4aXQmIzM0OykKJiM0MztfX21zZygmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDk6ICgyMCkgcjAgPSAqKHUzMiAqKXNrYlswXSYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgODogKGJmKSByNyA9IHIxJiMzNDspCiYjNDM7X19tc2coJiMzNDttYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSA3OiAoYmYpIHI2ID0gcjEmIzM0OykKJiM0MztfX21zZygmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDE6ICg4NSkgY2FsbCBwYyYjNDM7NSYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSAwOiAoYjcpIHI3ID0gLTgmIzM0OykKJiM0MztfX25ha2VkIGludCBsZF9hYnNfYmFja3RyYWNrX2JvdGhfcGF0aHModm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoCiYjNDM7CQkmIzM0O3I3ID0gLTg7JiMzNDsKJiM0MzsJCSYjMzQ7Y2FsbCBsZF9hYnNfc3VicHJvZzsmIzM0OwomIzQzOwkJJiMzNDtyMSA9IHIxMDsmIzM0OwomIzQzOwkJJiMzNDtyMSAmIzQzOz0gcjc7JiMzNDsgLyogbWFyayByNyBhcyBwcmVjaXNlICovCiYjNDM7CQkmIzM0OyoodTY0ICopKHIxICYjNDM7IDApID0gMDsmIzM0OwomIzQzOwkJJiMzNDtyMCA9IDA7JiMzNDsKJiM0MzsJCSYjMzQ7ZXhpdDsmIzM0OwomIzQzOwkJOjo6IF9fY2xvYmJlcl9hbGwKJiM0MzsJKTsKJiM0Mzt9CiYjNDM7CiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzI5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29kZSBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlcmUmIzM5O3MgYSBtb2RpZmljYXRpb24gaW4gYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgYmFja3RyYWNrX2luc24oKWAgZnVuY3Rpb24uIFNpbXVsdGFuZW91c2x5LCBhIG5ldyBzZWxmdGVzdCBoYXMgYmVlbiBpbnRyb2R1Y2VkIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3VicHJvZ19wcmVjaXNpb24uY2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZml4IG9yIGVuaGFuY2VtZW50IHJlbGF0ZWQgdG8gQlBGIGluc3RydWN0aW9uIGJhY2t0cmFja2luZywgbGlrZWx5IGltcGFjdGluZyB0aGUgdmVyaWZpZXImIzM5O3MgcHJlY2lzaW9uLgoKVG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgY2hhbmdlZCwgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIGBiYWNrdHJhY2tfaW5zbigpYCB3aXRoaW4gdGhlIGtlcm5lbC4gVGltZSB0byBncmFiIHRoZSBjb2RlLiBJJiMzOTtsbCBwcm9iYWJseSB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIEJQRiB2ZXJpZmljYXRpb24gcHJvY2Vzcy4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2JhY2t0cmFjay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NzA6XHRcdFx0XHQgKiBiZWZvcmUgaXQgd291bGQgYmUgZXF1YWxseSBuZWNlc3NhcnkgdG9cbiA1NzE6XHRcdFx0XHQgKiBwcm9wYWdhdGUgaXQgdG8gZHJlZy5cbiA1NzI6XHRcdFx0XHQgKi9cbiA1NzM6XHRcdFx0XHRpZiAoIWhpc3QgfHwgIShoaXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJTlNOX0ZfU1JDX1JFR19TVEFDSykpXG4gNTc0Olx0XHRcdFx0XHRidF9zZXRfcmVnKGJ0LCBzcmVnKTtcbiA1NzU6XHRcdFx0XHRpZiAoIWhpc3QgfHwgIShoaXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJTlNOX0ZfRFNUX1JFR19TVEFDSykpXG4gNTc2Olx0XHRcdFx0XHRidF9zZXRfcmVnKGJ0LCBkcmVnKTtcbiA1Nzc6XHRcdFx0fSBlbHNlIGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0spIHtcbiA1Nzg6XHRcdFx0XHQgLyogZHJlZyBcdTAwM2Njb25kXHUwMDNlIEtcbiA1Nzk6XHRcdFx0XHQgICogT25seSBkcmVnIHN0aWxsIG5lZWRzIHByZWNpc2lvbiBiZWZvcmVcbiA1ODA6XHRcdFx0XHQgICogdGhpcyBpbnNuLCBzbyBmb3IgdGhlIEstYmFzZWQgY29uZGl0aW9uYWxcbiA1ODE6XHRcdFx0XHQgICogdGhlcmUgaXMgbm90aGluZyBuZXcgdG8gYmUgbWFya2VkLlxuIDU4MjpcdFx0XHRcdCAgKi9cbiA1ODM6XHRcdFx0fVxuIDU4NDpcdFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfTEQpIHtcbiA1ODU6XHRcdFx0LyogSXQmIzM5O3MgbGRfaW1tNjQgb3IgbGRfYWJzIG9yIGxkX2luZC5cbiA1ODY6XHRcdFx0ICogRm9yIGxkX2ltbTY0IG5vIGZ1cnRoZXIgdHJhY2tpbmcgb2YgcHJlY2lzaW9uXG4gNTg3Olx0XHRcdCAqIGludG8gcGFyZW50IGlzIG5lY2Vzc2FyeVxuIDU4ODpcdFx0XHQgKi9cbiA1ODk6XHRcdFx0aWYgKG1vZGUgPT0gQlBGX0lNTSkge1xuIDU5MDpcdFx0XHRcdGJ0X2NsZWFyX3JlZyhidCwgZHJlZyk7XG4gNTkxOlx0XHRcdFx0cmV0dXJuIDA7XG4gNTkyOlx0XHRcdH1cbiA1OTM6XHRcdFx0LypcbiA1OTQ6XHRcdFx0ICogQlBGX3tJTkQsQUJTfSBhcmUgbW9kZWxsZWQgYXMgdHdvIGJyYW5jaGVzOlxuIDU5NTpcdFx0XHQgKiAtIGZhbGx0aHJvdWdoO1xuIDU5NjpcdFx0XHQgKiAtIGltcGxpY2l0IHN1YnByb2dyYW0gZXhpdC5cbiA1OTc6XHRcdFx0ICogSXQgaXMgbmVjZXNzYXJ5IHRvIHN3aXRjaCBjdXJyZW50IGZyYW1lIGlmXG4gNTk4Olx0XHRcdCAqIGltcGxpY2l0IHN1YnByb2dyYW0gZXhpdCBicmFuY2ggaXMgYmFja3RyYWNrZWQuXG4gNTk5Olx0XHRcdCAqL1xuIDYwMDpcdFx0XHRpZiAobW9kZSA9PSBCUEZfSU5EIHx8IG1vZGUgPT0gQlBGX0FCUykge1xuIDYwMTpcdFx0XHRcdGlmIChidF9pc19yZWdfc2V0KGJ0LCBkcmVnKSlcbiA2MDI6XHRcdFx0XHRcdHJldHVybiAtRU5PVFNVUFA7XG4gNjAzOlx0XHRcdFx0aWYgKHN1YnNlcV9pZHggIT0gaWR4ICYjNDM7IDEpXG4gNjA0Olx0XHRcdFx0XHRpZiAoYnRfc3VicHJvZ19lbnRlcihidCkpXG4gNjA1Olx0XHRcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDYwNjpcdFx0XHRcdHJldHVybiAwO1xuIDYwNzpcdFx0XHR9XG4gNjA4Olx0XHR9XG4gNjA5Olx0XHQvKiBQcm9wYWdhdGUgcHJlY2lzaW9uIG1hcmtzIHRvIGxpbmtlZCByZWdpc3RlcnMsIHRvIGFjY291bnQgZm9yXG4gNjEwOlx0XHQgKiByZWdpc3RlcnMgbWFya2VkIGFzIHByZWNpc2UgaW4gdGhpcyBmdW5jdGlvbi5cbiA2MTE6XHRcdCAqL1xuIDYxMjpcdFx0YnBmX2J0X3N5bmNfbGlua2VkX3JlZ3MoYnQsIGhpc3QpO1xuIDYxMzpcdFx0cmV0dXJuIDA7XG4gNjE0Olx0fVxuIDYxNTpcdFxuIDYxNjpcdC8qIHRoZSBzY2FsYXIgcHJlY2lzaW9uIHRyYWNraW5nIGFsZ29yaXRobTpcbiA2MTc6XHQgKiAuIGF0IHRoZSBzdGFydCBhbGwgcmVnaXN0ZXJzIGhhdmUgcHJlY2lzZT1mYWxzZS5cbiA2MTg6XHQgKiAuIHNjYWxhciByYW5nZXMgYXJlIHRyYWNrZWQgYXMgbm9ybWFsIHRocm91Z2ggYWx1IGFuZCBqbXAgaW5zbnMuXG4gNjE5Olx0ICogLiBvbmNlIHByZWNpc2UgdmFsdWUgb2YgdGhlIHNjYWxhciByZWdpc3RlciBpcyB1c2VkIGluOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDU2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFZlcmlmaWVyIEJhY2t0cmFja2luZyBCdWcgRml4KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYmFja3RyYWNraW5nIHdoZW4gaGFuZGxpbmcgZWFybHkgc3VicHJvZ3JhbSBleGl0cywgbW9kZWxlZCBmb3IgYEJQRl9MRCB8IEJQRl9BQlNgIGluc3RydWN0aW9ucywgd2hpY2ggd2FzIGxlYWRpbmcgdG8gYSBzZWdmYXVsdC4gVGhlIGNvbW1pdCBjb21tZW50IHBvaW50cyBtZSB0byB0aGUgYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgIGZpbGUgYW5kIHRoZSBiYWNrdHJhY2tpbmcgYWxnb3JpdGhtLgoKTG9va2luZyBhdCB0aGUgY29kZSwgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIHNlZW1zIHRvIGJlIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyBwcmVjaXNpb24gZHVyaW5nIGJhY2t0cmFja2luZywgcGFydGljdWxhcmx5IHdpdGggdGhlIGBCUEZfTERgIGNsYXNzIG9mIGluc3RydWN0aW9ucy4gVGhlIG9yaWdpbmFsIGNvZGUmIzM5O3MgbG9naWMgaGVyZSB3YXMgcHJvYmxlbWF0aWMuIFdoZW4gZW5jb3VudGVyaW5nIGBCUEZfTERgIGluc3RydWN0aW9ucywgaXQgd291bGQgaGFuZGxlIGBsZF9pbW02NGAsIGBsZF9hYnNgLCBhbmQgYGxkX2luZGAgZGlmZmVyZW50bHkuIFRoZSBgbGRfaW1tNjRgIGNhc2Ugc2VlbWVkIGZpbmUsIGJ1dCB0aGUgaGFuZGxpbmcgb2YgYEJQRl9JTkRgIG9yIGBCUEZfQUJTYCBpbnN0cnVjdGlvbnMgaW52b2x2ZWQgY2xlYXJpbmcgcmVnaXN0ZXIgcHJlY2lzaW9uIGFuZCB0aGVuIHJldHVybmluZy4KCk5vdywgd2l0aCB0aGlzIHBhdGNoLCB0aGVyZSBhcmUgc29tZSBzaWduaWZpY2FudCBjaGFuZ2VzLiBJZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgYEJQRl9JTU1gLCB0aGUgY29kZSBzaW1wbHkgY2xlYXJzIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciYjMzk7cyBwcmVjaXNpb24gYW5kIHJldHVybnMuIEhvd2V2ZXIsIHdpdGggYEJQRl9JTkRgIG9yIGBCUEZfQUJTYCwgdGhlcmUmIzM5O3Mgbm93IGEgY2hlY2s6IGBpZiAoYnRfaXNfcmVnX3NldChidCwgZHJlZykpIHJldHVybiAtRU5PVFNVUFA7YC4gQWRkaXRpb25hbGx5LCB0aGVyZSYjMzk7cyBhIGNvbmRpdGlvbmFsIGBidF9zdWJwcm9nX2VudGVyYCBjYWxsIGJhc2VkIG9uIGBzdWJzZXFfaWR4YCBhbmQgYGlkeGAsIHRoYXQgbG9va3MgcHJldHR5IGNydWNpYWwsIGFuZCBpZiBpdCBzdWNjZWVkcywgdGhlcmUmIzM5O3MgYW4gYC1FRkFVTFRgIHJldHVybi4gVGhpcyBsb29rcyBsaWtlIHRoZSBtYWluIGNoYW5nZS4KClNvIHRoZSBtYWluIGNoYW5nZSBpcyB0aGF0IGJlZm9yZSwgdGhlcmUgd2FzIG5vIHByb3RlY3Rpb24gb2YgYSByZWdpc3RlciB0aGF0IG1pZ2h0IHN0aWxsIGJlIHNldC4gTm93IHRoZSBwYXRjaCBmaXJzdCBjaGVja3MgaWYgdGhlIHJlZ2lzdGVyIGlzIHNldCwgYW5kIGlmIGl0IGlzLCB0aGUgdmVyaWZpZXIgcmV0dXJucyB0aGF0IHRoaXMgaW5zdHJ1Y3Rpb24gdHlwZSBpcyBub3Qgc3VwcG9ydGVkLiBPdGhlcndpc2UsIGl0IGNvbmRpdGlvbmFsbHkgY2FsbHMgYGJ0X3N1YnByb2dfZW50ZXJgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGJ0X3N1YnByb2dfZW50ZXJgIGRvZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBiYWNrdHJhY2sgc3RydWN0dXJlIGFuZCBob3cgaXQmIzM5O3MgdXNlZC4gQmFzZWQgb24gdGhlc2UgY2hhbmdlcywgSSYjMzk7bSBndWVzc2luZyB0aGlzIHByZXZlbnRzIHByZW1hdHVyZSBiYWNrdHJhY2tpbmcgYW5kIGFsbG93cyBwcm9wZXIgcHJlY2lzaW9uIHRyYWNraW5nIHRocm91Z2ggc3VicHJvZ3JhbSBleGl0cywgdGh1cyBhdmVydGluZyB0aGUgc2VnZmF1bHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2J0X3N1YnByb2dfZW50ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9iYWNrdHJhY2suYz0xNDI9c3RhdGljIGlubGluZSBib29sIGJ0X2lzX2ZyYW1lX3N0YWNrX2FyZ19zbG90X3NldChzdHJ1Y3QgYmFja3RyYWNrX3N0YXRlICpidCwgdTMyIGZyYW1lLCB1MzIgc2xvdClcbi0tXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTE0Ni1cbmtlcm5lbC9icGYvYmFja3RyYWNrLmM6MTQ3OnN0YXRpYyBpbmxpbmUgaW50IGJ0X3N1YnByb2dfZW50ZXIoc3RydWN0IGJhY2t0cmFja19zdGF0ZSAqYnQpXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTE0OC17XG4tLVxua2VybmVsL2JwZi9iYWNrdHJhY2suYz0yNjU9c3RhdGljIGludCBiYWNrdHJhY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LCBpbnQgc3Vic2VxX2lkeCxcbi0tXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTUxOC1cdFx0XHQgICAgXHUwMDI2XHUwMDI2IHN1YnNlcV9pZHggLSBpZHggIT0gMSkge1xua2VybmVsL2JwZi9iYWNrdHJhY2suYzo1MTk6XHRcdFx0XHRpZiAoYnRfc3VicHJvZ19lbnRlcihidCkpXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTUyMC1cdFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4tLVxua2VybmVsL2JwZi9iYWNrdHJhY2suYy01NTQtXHRcdFx0YnRfY2xlYXJfcmVnKGJ0LCBCUEZfUkVHXzApO1xua2VybmVsL2JwZi9iYWNrdHJhY2suYzo1NTU6XHRcdFx0aWYgKGJ0X3N1YnByb2dfZW50ZXIoYnQpKVxua2VybmVsL2JwZi9iYWNrdHJhY2suYy01NTYtXHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTYwMy1cdFx0XHRpZiAoc3Vic2VxX2lkeCAhPSBpZHggJiM0MzsgMSlcbmtlcm5lbC9icGYvYmFja3RyYWNrLmM6NjA0Olx0XHRcdFx0aWYgKGJ0X3N1YnByb2dfZW50ZXIoYnQpKVxua2VybmVsL2JwZi9iYWNrdHJhY2suYy02MDUtXHRcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzExCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHN0cnVjdHVyZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkRpdmluZyBpbnRvIGBidF9zdWJwcm9nX2VudGVyYCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgYnRfc3VicHJvZ19lbnRlcmAgd2l0aGluIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGNvbnNpZGVyIGl0cyByb2xlIGluIHRoZSBCUEYgYmFja3RyYWNrIG1lY2hhbmlzbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gY29udHJpYnV0ZXMgdG8gdHJhY2luZyBwcm9ncmFtIGV4ZWN1dGlvbiBhbmQgbWFuYWdpbmcgbmVzdGVkIGNhbGxzLiBXaGF0IGxldmVsIG9mIGRldGFpbCBkb2VzIGl0IHByb3ZpZGU/IERvZXMgaXQgc3RvcmUgcmVnaXN0ZXJzLCBwcm9ncmFtIGNvdW50ZXJzLCBvciBwZXJoYXBzIHRoZSBzdGFjayBmcmFtZSBvZiB0aGUgc3VicHJvZ3JhbSBpdCBpcyBlbnRlcmluZz8gVGhpbmtpbmcgYmFjayB0byBteSBleHBlcmllbmNlLCB0aGlzIGlzIGxpa2VseSBhIGNydWNpYWwgZnVuY3Rpb24gZm9yIGRlYnVnZ2luZyBhbmQgYW5hbHl6aW5nIEJQRiBwcm9ncmFtcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBjb21wbGV4LCBtdWx0aS1sYXllcmVkIGFwcGxpY2F0aW9ucy4gV2UgYXJlIHRhbGtpbmcgYWJvdXQgYmFja3RyYWNrLCBzbyB0aGlzIGNvZGUgaXMgc3VyZWx5IGNyaXRpY2FsIGZvciByZWNvdmVyeSBvciBlcnJvciBoYW5kbGluZy4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBiYWNrdHJhY2sgaW5mcmFzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSBob3cgdGhpcyB0aWVzIGludG8gYW55IGFzc29jaWF0ZWQgc3RhY2sgbWFuYWdlbWVudCBvciBzdGF0ZSBzYXZpbmcuIElzIHRoZXJlIGFueSBwb3RlbnRpYWwgb3ZlcmhlYWQgZnJvbSB0aGlzPyBHaXZlbiB0aGUgcGVyZm9ybWFuY2UtY3JpdGljYWwgbmF0dXJlIG9mIEJQRiwgdW5kZXJzdGFuZGluZyB0aGUgZWZmaWNpZW5jeSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHBhcmFtb3VudC4gQW5kLCBjb25zaWRlcmluZyB0aGUgY29udGV4dCBvZiBgYmFja3RyYWNrLmNgLCB0aGlzIGNvZGUgaXMgcHJvYmFibHkgcHJldHR5IGltcG9ydGFudCB3aGVuIHRoZSBzeXN0ZW0gZW5jb3VudGVycyBhbiBlcnJvciBvciBhIHBvdGVudGlhbGx5IGJhZCBwcm9ncmFtLCB3aGljaCB3b3VsZCBhbGxvdyBmb3IgZWFzaWVyIGRlYnVnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2JhY2t0cmFjay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDU6XHR9XG4gMTQ2Olx0XG4gMTQ3Olx0c3RhdGljIGlubGluZSBpbnQgYnRfc3VicHJvZ19lbnRlcihzdHJ1Y3QgYmFja3RyYWNrX3N0YXRlICpidClcbiAxNDg6XHR7XG4gMTQ5Olx0XHRpZiAoYnQtXHUwMDNlZnJhbWUgPT0gTUFYX0NBTExfRlJBTUVTIC0gMSkge1xuIDE1MDpcdFx0XHR2ZXJpZmllcl9idWcoYnQtXHUwMDNlZW52LCBcJiMzNDtzdWJwcm9nIGVudGVyIGZyb20gZnJhbWUgJWRcJiMzNDssIGJ0LVx1MDAzZWZyYW1lKTtcbiAxNTE6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gMTUyOlx0XHR9XG4gMTUzOlx0XHRidC1cdTAwM2VmcmFtZSYjNDM7JiM0Mzs7XG4gMTU0Olx0XHRyZXR1cm4gMDtcbiAxNTU6XHR9XG4gMTU2Olx0XG4gMTU3Olx0c3RhdGljIGlubGluZSBpbnQgYnRfc3VicHJvZ19leGl0KHN0cnVjdCBiYWNrdHJhY2tfc3RhdGUgKmJ0KVxuIDE1ODpcdHtcbiAxNTk6XHRcdGlmIChidC1cdTAwM2VmcmFtZSA9PSAwKSB7XG4gMTYwOlx0XHRcdHZlcmlmaWVyX2J1ZyhidC1cdTAwM2VlbnYsIFwmIzM0O3N1YnByb2cgZXhpdCBmcm9tIGZyYW1lIDBcJiMzNDspO1xuIDE2MTpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAxNjI6XHRcdH1cbiAxNjM6XHRcdGJ0LVx1MDAzZWZyYW1lLS07XG4gMTY0Olx0XHRyZXR1cm4gMDtcbiAxNjU6XHR9XG4gMTY2Olx0XG4gMTY3Olx0c3RhdGljIGlubGluZSB2b2lkIGJ0X2NsZWFyX2ZyYW1lX3JlZyhzdHJ1Y3QgYmFja3RyYWNrX3N0YXRlICpidCwgdTMyIGZyYW1lLCB1MzIgcmVnKVxuIDE2ODpcdHtcbiAxNjk6XHRcdGJ0LVx1MDAzZXJlZ19tYXNrc1tmcmFtZV0gXHUwMDI2PSB+KDEgXHUwMDNjXHUwMDNjIHJlZyk7XG4gMTcwOlx0fVxuIDE3MTpcdFxuIDE3MjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBidF9zZXRfcmVnKHN0cnVjdCBiYWNrdHJhY2tfc3RhdGUgKmJ0LCB1MzIgcmVnKVxuIDE3MzpcdHtcbiAxNzQ6XHRcdGJwZl9idF9zZXRfZnJhbWVfcmVnKGJ0LCBidC1cdTAwM2VmcmFtZSwgcmVnKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ3OQoJCQkJCQkJb3V0cHV0OiAxOTIKCQkJCQkJCXRob3VnaHRzOiA2NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBmb3IgS01TQU4gaW4gdGhpcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBhbmFseXNpcyBvZiB0aGlzIHBhdGNoLCBmb2N1c2VkIG9uIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYCBhbmQgYSBuZXcgQlBGIHNlbGZ0ZXN0LCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBLTVNBTiBpc3N1ZXMg4oCTIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIOKAkyBhbmQgSSBkb24mIzM5O3Qgc2VlIGFueSBoZXJlLgoKRmlyc3QsIEkmIzM5O3ZlIGNoZWNrZWQgZm9yIGFueSBpbnRlcmFjdGlvbiB3aXRoIHVzZXIgc3BhY2UuIFRoZXJlJiMzOTtzIG5vdGhpbmcgYmVpbmcgc2VudCBvdXQgdGhhdCBjb3VsZCBoYXZlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcuIE5vdGhpbmcmIzM5O3MgZXhwb3NlZCB2aWEgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmssIGlvY3Rscywgc29ja2V0IG9wdGlvbnMgb3IgQlBGIGJ1ZmZlcnMgdGhhdCBhcmUgdW5kZXIgc3VzcGljaW9uLiBUaGUgdmFyaWFibGVzIGludm9sdmVkIGluIHRoZSBiYWNrdHJhY2tpbmcgbG9naWMg4oCTIGBidGAsIGBkcmVnYCwgYHN1YnNlcV9pZHhgLCBgaWR4YCwgZXRjLiDigJMgYXJlIGFsbCBwcm9wZXJseSBpbml0aWFsaXplZCB3aXRoaW4gdGhlIHZlcmlmaWVyIHN0YXRlIHRyYWNraW5nLCBzbyBubyBjb25jZXJucyB0aGVyZS4KCk5leHQsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIGxhdGVyIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIEFuZCBjcml0aWNhbGx5LCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IG1lc3Mgd2l0aCBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIHBhcnRzIG9mIGJ1ZmZlcnMuIFRoaXMgaXMgYWxsIGFib3V0IGJhY2t0cmFja2luZyBwcmVjaXNpb24gd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuCgpUaGUgZml4IGl0c2VsZiBhZGRyZXNzZXMgYW4gaXNzdWUgaW4gaG93IHRoZSBiYWNrdHJhY2tpbmcgaGFuZGxlcyBlYXJseSBleGl0cyBmcm9tIHN1YnByb2dyYW1zLiBUaGUgcHJvYmxlbSB3YXMgdGhhdCwgZm9yIGBCUEZfTEQgfCBCUEZfQUJTYCBpbnN0cnVjdGlvbnMsIHRoZSBjYWxsIGZyYW1lcyBpbiBgYmFja3RyYWNrX3N0YXRlYCAoYGJ0LSZndDtmcmFtZWApIHdlcmVuJiMzOTt0IGJlaW5nIHN3aXRjaGVkIGNvcnJlY3RseSBvbiBlYXJseSBleGl0LCB3aGljaCBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBzdGF0ZSBhbmQgcG90ZW50aWFsIGNyYXNoZXMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEJ1dCB0aGUgcmVzdWx0aW5nIHByb2JsZW1zIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4KClRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIHdvdWxkIGJlIGNvbXBsZXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHN1Y2ggYXMgS0FTQU4sIExPQ0tERVAuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHNpdHVhdGlvbiB3aGVyZSBgTmVlZHNLTVNBTj1mYWxzZWAgaXMgdGhlIHJpZ2h0IGNhbGwuIFRoZSBidWcsIGlmIGFueSwgd2lsbCBiZSBjYXVnaHQgYnkgS0FTQU4uCgpJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgYW0gcmVhZHkgdG8gY2xlYXJseSBhcnRpY3VsYXRlIHRoZSBLTVNBTlJlYXNvbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHZlcmlmaWVyIHNjYWxhciBwcmVjaXNpb24gYmFja3RyYWNraW5nIGxvZ2ljIGluIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYCB0byBwcm9wZXJseSB1cGRhdGUgdGhlIHN1YnByb2dyYW0gY2FsbCBmcmFtZSAoYGJ0X3N1YnByb2dfZW50ZXJgKSB3aGVuIGJhY2t0cmFja2luZyB0aGUgaW1wbGljaXQgZWFybHkgZXhpdCBwYXRoIG9mIGBCUEZfTEQgfCBCUEZfQUJTYCBhbmQgYEJQRl9MRCB8IEJQRl9JTkRgIGluc3RydWN0aW9ucy4gXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdmVyaWZpZXIgYnJhbmNoZXMsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucyBvciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcGF0aHMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSBmcmFtZSBpbmRleGluZyBlcnJvcnMgb3IgdmVyaWZpZXIgc3RhdGUgY29ycnVwdGlvbiB3b3VsZCBtYW5pZmVzdCBhcyBjb250cm9sIGZsb3cgZmF1bHRzLCBhc3NlcnRpb25zLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHdoaWNoIGFyZSBhbHJlYWR5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHZlcmlmaWVyIHNjYWxhciBwcmVjaXNpb24gYmFja3RyYWNraW5nIGxvZ2ljIGluIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYCB0byBwcm9wZXJseSB1cGRhdGUgdGhlIHN1YnByb2dyYW0gY2FsbCBmcmFtZSAoYGJ0X3N1YnByb2dfZW50ZXJgKSB3aGVuIGJhY2t0cmFja2luZyB0aGUgaW1wbGljaXQgZWFybHkgZXhpdCBwYXRoIG9mIGBCUEZfTEQgfCBCUEZfQUJTYCBhbmQgYEJQRl9MRCB8IEJQRl9JTkRgIGluc3RydWN0aW9ucy4gXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdmVyaWZpZXIgYnJhbmNoZXMsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucyBvciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcGF0aHMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSBmcmFtZSBpbmRleGluZyBlcnJvcnMgb3IgdmVyaWZpZXIgc3RhdGUgY29ycnVwdGlvbiB3b3VsZCBtYW5pZmVzdCBhcyBjb250cm9sIGZsb3cgZmF1bHRzLCBhc3NlcnRpb25zLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHdoaWNoIGFyZSBhbHJlYWR5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0NTo0Ny4zMTk4MzIzMDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODUyODkwNzY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9tYXJrX2NoYWluX3ByZWNpc2lvblwiLFxuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgc2NhbGFyIHByZWNpc2lvbiBiYWNrdHJhY2tpbmcgbG9naWMgaW4gYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgIHRvIHByb3Blcmx5IHVwZGF0ZSB0aGUgc3VicHJvZ3JhbSBjYWxsIGZyYW1lIChgYnRfc3VicHJvZ19lbnRlcmApIHdoZW4gYmFja3RyYWNraW5nIHRoZSBpbXBsaWNpdCBlYXJseSBleGl0IHBhdGggb2YgYEJQRl9MRCB8IEJQRl9BQlNgIGFuZCBgQlBGX0xEIHwgQlBGX0lORGAgaW5zdHJ1Y3Rpb25zLiBcXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHZlcmlmaWVyIGJyYW5jaGVzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdGhzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gZnJhbWUgaW5kZXhpbmcgZXJyb3JzIG9yIHZlcmlmaWVyIHN0YXRlIGNvcnJ1cHRpb24gd291bGQgbWFuaWZlc3QgYXMgY29udHJvbCBmbG93IGZhdWx0cywgYXNzZXJ0aW9ucywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aGljaCBhcmUgYWxyZWFkeSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJ3Mgc2NhbGFyIHByZWNpc2lvbiBiYWNrdHJhY2tpbmcgbG9naWMgaW4gYmFja3RyYWNrX2luc24oKSBmb3IgQlBGX0xEIChzcGVjaWZpY2FsbHkgQlBGX0FCUy9CUEZfSU5EIGluc3RydWN0aW9ucyB3aXRoIGltcGxpY2l0IHN1YnByb2dyYW0gZXhpdCBicmFuY2hlcykgdG8gcHJvcGVybHkgYWRqdXN0IHRoZSBiYWNrdHJhY2sgY2FsbCBmcmFtZSBhbmQgcHJldmVudCB2ZXJpZmllciBjcmFzaGVzL3NlZ2ZhdWx0cy4gVGhpcyBpcyBjb3JlIHZlcmlmaWVyIGxvZ2ljIHJlYWNoYWJsZSB2aWEgdGhlIGJwZihCUEZfUFJPR19MT0FEKSBzeXNjYWxsIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0NTo0Ny4zMTk4Mzk1MzZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMjY4Mzg4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA2MzU5ZTQ3NDgxY2YyMzczMGM1OTIwYWMyZGJiZTA2ZDVhNGY4MTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgMiAyMDo0NTo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jIGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xcbmluZGV4IGEyYjE4YTlmMTY5NGMuLmVhZjc0MzhiOWViZjkgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9iYWNrdHJhY2suY1xcbisrKyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcXG5AQCAtNTgyLDE2ICs1ODIsMjkgQEAgc3RhdGljIGludCBiYWNrdHJhY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LCBpbnQgc3Vic2VxX2lkeCxcXG4gXFx0XFx0XFx0ICAqL1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEKSB7XFxuLVxcdFxcdGlmICghYnRfaXNfcmVnX3NldChidCwgZHJlZykpXFxuLVxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRidF9jbGVhcl9yZWcoYnQsIGRyZWcpO1xcbiBcXHRcXHQvKiBJdCdzIGxkX2ltbTY0IG9yIGxkX2FicyBvciBsZF9pbmQuXFxuIFxcdFxcdCAqIEZvciBsZF9pbW02NCBubyBmdXJ0aGVyIHRyYWNraW5nIG9mIHByZWNpc2lvblxcbiBcXHRcXHQgKiBpbnRvIHBhcmVudCBpcyBuZWNlc3NhcnlcXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmIChtb2RlID09IEJQRl9JTkQgfHwgbW9kZSA9PSBCUEZfQUJTKVxcbi1cXHRcXHRcXHQvKiB0byBiZSBhbmFseXplZCAqL1xcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbitcXHRcXHRpZiAobW9kZSA9PSBCUEZfSU1NKSB7XFxuK1xcdFxcdFxcdGJ0X2NsZWFyX3JlZyhidCwgZHJlZyk7XFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHR9XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEJQRl97SU5ELEFCU30gYXJlIG1vZGVsbGVkIGFzIHR3byBicmFuY2hlczpcXG4rXFx0XFx0ICogLSBmYWxsdGhyb3VnaDtcXG4rXFx0XFx0ICogLSBpbXBsaWNpdCBzdWJwcm9ncmFtIGV4aXQuXFxuK1xcdFxcdCAqIEl0IGlzIG5lY2Vzc2FyeSB0byBzd2l0Y2ggY3VycmVudCBmcmFtZSBpZlxcbitcXHRcXHQgKiBpbXBsaWNpdCBzdWJwcm9ncmFtIGV4aXQgYnJhbmNoIGlzIGJhY2t0cmFja2VkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKG1vZGUgPT0gQlBGX0lORCB8fCBtb2RlID09IEJQRl9BQlMpIHtcXG4rXFx0XFx0XFx0aWYgKGJ0X2lzX3JlZ19zZXQoYnQsIGRyZWcpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbitcXHRcXHRcXHRpZiAoc3Vic2VxX2lkeCAhPSBpZHggKyAxKVxcbitcXHRcXHRcXHRcXHRpZiAoYnRfc3VicHJvZ19lbnRlcihidCkpXFxuK1xcdFxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcdC8qIFByb3BhZ2F0ZSBwcmVjaXNpb24gbWFya3MgdG8gbGlua2VkIHJlZ2lzdGVycywgdG8gYWNjb3VudCBmb3JcXG4gXFx0ICogcmVnaXN0ZXJzIG1hcmtlZCBhcyBwcmVjaXNlIGluIHRoaXMgZnVuY3Rpb24uXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zdWJwcm9nX3ByZWNpc2lvbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3N1YnByb2dfcHJlY2lzaW9uLmNcXG5pbmRleCBkMjFkMzJmNmE2NzYwLi5lMTc0YTkwNWM1NjI4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zdWJwcm9nX3ByZWNpc2lvbi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3N1YnByb2dfcHJlY2lzaW9uLmNcXG5AQCAtODQ2LDQgKzg0Niw1NSBAQCBfX25ha2VkIGludCBzdWJwcm9nX3Jlc3VsdF90YWlsX2NhbGwodm9pZClcXG4gXFx0KTtcXG4gfVxcbiBcXG4rX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZFxcbitzdGF0aWMgaW50IGxkX2Fic19zdWJwcm9nKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXG4rXFx0XFx0XFxcInI2ID0gcjE7XFxcIlxcbitcXHRcXHRcXFwicjcgPSByMTtcXFwiXFxuK1xcdFxcdFxcXCIuOGJ5dGUgJVtsZF9hYnNdO1xcXCJcXG4rXFx0XFx0XFxcImV4aXQ7XFxcIlxcbitcXHRcXHQ6XFxuK1xcdFxcdDogX19pbW1faW5zbihsZF9hYnMsIEJQRl9MRF9BQlMoQlBGX1csIDApKVxcbitcXHRcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisvKlxcbisgKiBCdWdneSB2ZXJpZmllciBkaWQgbm90IHByb3Blcmx5IGJhY2t0cmFjayBlYXJseSBzdWJwcm9ncmFtIGV4aXRcXG4rICogbW9kZWxsZWQgZm9yIEJQRl9MRCB8IEJQRl9BQlMgaW5zdHJ1Y3Rpb24sIGNhdXNpbmcgYSBzZWdmYXVsdC5cXG4rICovXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19zdWNjZXNzXFxuK19fbG9nX2xldmVsKDIpXFxuKy8qIGVhcmx5IGV4aXQgcGF0aCAqL1xcbitfX21zZyhcXFwiMzogKDBmKSByMSArPSByN1xcXCIpXFxuK19fbXNnKFxcXCJtYXJrX3ByZWNpc2U6IGZyYW1lMDogcmVncz1yNyBzdGFjaz0gYmVmb3JlIDI6IChiZikgcjEgPSByMTBcXFwiKVxcbitfX21zZyhcXFwibWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSA5OiAoMjApIHIwID0gKih1MzIgKilza2JbMF1cXFwiKVxcbitfX21zZyhcXFwibWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgODogKGJmKSByNyA9IHIxXFxcIilcXG4rX19tc2coXFxcIm1hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDc6IChiZikgcjYgPSByMVxcXCIpXFxuK19fbXNnKFxcXCJtYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSAxOiAoODUpIGNhbGwgcGMrNVxcXCIpXFxuK19fbXNnKFxcXCJtYXJrX3ByZWNpc2U6IGZyYW1lMDogcmVncz1yNyBzdGFjaz0gYmVmb3JlIDA6IChiNykgcjcgPSAtOFxcXCIpXFxuKy8qIGZhbGx0aHJvdWdoIHBhdGggKi9cXG4rX19tc2coXFxcIjM6ICgwZikgcjEgKz0gcjdcXFwiKVxcbitfX21zZyhcXFwibWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSAyOiAoYmYpIHIxID0gcjEwXFxcIilcXG4rX19tc2coXFxcIm1hcmtfcHJlY2lzZTogZnJhbWUwOiByZWdzPXI3IHN0YWNrPSBiZWZvcmUgMTA6ICg5NSkgZXhpdFxcXCIpXFxuK19fbXNnKFxcXCJtYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSA5OiAoMjApIHIwID0gKih1MzIgKilza2JbMF1cXFwiKVxcbitfX21zZyhcXFwibWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgODogKGJmKSByNyA9IHIxXFxcIilcXG4rX19tc2coXFxcIm1hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDc6IChiZikgcjYgPSByMVxcXCIpXFxuK19fbXNnKFxcXCJtYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSAxOiAoODUpIGNhbGwgcGMrNVxcXCIpXFxuK19fbXNnKFxcXCJtYXJrX3ByZWNpc2U6IGZyYW1lMDogcmVncz1yNyBzdGFjaz0gYmVmb3JlIDA6IChiNykgcjcgPSAtOFxcXCIpXFxuK19fbmFrZWQgaW50IGxkX2Fic19iYWNrdHJhY2tfYm90aF9wYXRocyh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxuK1xcdFxcdFxcXCJyNyA9IC04O1xcXCJcXG4rXFx0XFx0XFxcImNhbGwgbGRfYWJzX3N1YnByb2c7XFxcIlxcbitcXHRcXHRcXFwicjEgPSByMTA7XFxcIlxcbitcXHRcXHRcXFwicjEgKz0gcjc7XFxcIiAvKiBtYXJrIHI3IGFzIHByZWNpc2UgKi9cXG4rXFx0XFx0XFxcIioodTY0ICopKHIxICsgMCkgPSAwO1xcXCJcXG4rXFx0XFx0XFxcInIwID0gMDtcXFwiXFxuK1xcdFxcdFxcXCJleGl0O1xcXCJcXG4rXFx0XFx0Ojo6IF9fY2xvYmJlcl9hbGxcXG4rXFx0KTtcXG4rfVxcbitcXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ1OjQ3Ljc0MzczNDQzNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDQwMzg3MDYzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfbWFya19jaGFpbl9wcmVjaXNpb25cIixcbiAgICBcImJwZl9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBzY2FsYXIgcHJlY2lzaW9uIGJhY2t0cmFja2luZyBsb2dpYyBpbiBiYWNrdHJhY2tfaW5zbigpIGZvciBCUEZfTEQgKHNwZWNpZmljYWxseSBCUEZfQUJTL0JQRl9JTkQgaW5zdHJ1Y3Rpb25zIHdpdGggaW1wbGljaXQgc3VicHJvZ3JhbSBleGl0IGJyYW5jaGVzKSB0byBwcm9wZXJseSBhZGp1c3QgdGhlIGJhY2t0cmFjayBjYWxsIGZyYW1lIGFuZCBwcmV2ZW50IHZlcmlmaWVyIGNyYXNoZXMvc2VnZmF1bHRzLiBUaGlzIGlzIGNvcmUgdmVyaWZpZXIgbG9naWMgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQpIHN5c2NhbGwgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA2MzU5ZTQ3NDgxY2YyMzczMGM1OTIwYWMyZGJiZTA2ZDVhNGY4MTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDIwOjQ1OjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9iYWNrdHJhY2suYyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbmluZGV4IGEyYjE4YTlmMTY5NGMuLmVhZjc0MzhiOWViZjkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jXG4rKysgYi9rZXJuZWwvYnBmL2JhY2t0cmFjay5jXG5AQCAtNTgyLDE2ICs1ODIsMjkgQEAgc3RhdGljIGludCBiYWNrdHJhY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LCBpbnQgc3Vic2VxX2lkeCxcbiBcdFx0XHQgICovXG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEKSB7XG4tXHRcdGlmICghYnRfaXNfcmVnX3NldChidCwgZHJlZykpXG4tXHRcdFx0cmV0dXJuIDA7XG4tXHRcdGJ0X2NsZWFyX3JlZyhidCwgZHJlZyk7XG4gXHRcdC8qIEl0J3MgbGRfaW1tNjQgb3IgbGRfYWJzIG9yIGxkX2luZC5cbiBcdFx0ICogRm9yIGxkX2ltbTY0IG5vIGZ1cnRoZXIgdHJhY2tpbmcgb2YgcHJlY2lzaW9uXG4gXHRcdCAqIGludG8gcGFyZW50IGlzIG5lY2Vzc2FyeVxuIFx0XHQgKi9cbi1cdFx0aWYgKG1vZGUgPT0gQlBGX0lORCB8fCBtb2RlID09IEJQRl9BQlMpXG4tXHRcdFx0LyogdG8gYmUgYW5hbHl6ZWQgKi9cbi1cdFx0XHRyZXR1cm4gLUVOT1RTVVBQO1xuK1x0XHRpZiAobW9kZSA9PSBCUEZfSU1NKSB7XG4rXHRcdFx0YnRfY2xlYXJfcmVnKGJ0LCBkcmVnKTtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1x0XHQvKlxuK1x0XHQgKiBCUEZfe0lORCxBQlN9IGFyZSBtb2RlbGxlZCBhcyB0d28gYnJhbmNoZXM6XG4rXHRcdCAqIC0gZmFsbHRocm91Z2g7XG4rXHRcdCAqIC0gaW1wbGljaXQgc3VicHJvZ3JhbSBleGl0LlxuK1x0XHQgKiBJdCBpcyBuZWNlc3NhcnkgdG8gc3dpdGNoIGN1cnJlbnQgZnJhbWUgaWZcbitcdFx0ICogaW1wbGljaXQgc3VicHJvZ3JhbSBleGl0IGJyYW5jaCBpcyBiYWNrdHJhY2tlZC5cbitcdFx0ICovXG4rXHRcdGlmIChtb2RlID09IEJQRl9JTkQgfHwgbW9kZSA9PSBCUEZfQUJTKSB7XG4rXHRcdFx0aWYgKGJ0X2lzX3JlZ19zZXQoYnQsIGRyZWcpKVxuK1x0XHRcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbitcdFx0XHRpZiAoc3Vic2VxX2lkeCAhPSBpZHggKyAxKVxuK1x0XHRcdFx0aWYgKGJ0X3N1YnByb2dfZW50ZXIoYnQpKVxuK1x0XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuIFx0fVxuIFx0LyogUHJvcGFnYXRlIHByZWNpc2lvbiBtYXJrcyB0byBsaW5rZWQgcmVnaXN0ZXJzLCB0byBhY2NvdW50IGZvclxuIFx0ICogcmVnaXN0ZXJzIG1hcmtlZCBhcyBwcmVjaXNlIGluIHRoaXMgZnVuY3Rpb24uXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3N1YnByb2dfcHJlY2lzaW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3VicHJvZ19wcmVjaXNpb24uY1xuaW5kZXggZDIxZDMyZjZhNjc2MC4uZTE3NGE5MDVjNTYyOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zdWJwcm9nX3ByZWNpc2lvbi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3VicHJvZ19wcmVjaXNpb24uY1xuQEAgLTg0Niw0ICs4NDYsNTUgQEAgX19uYWtlZCBpbnQgc3VicHJvZ19yZXN1bHRfdGFpbF9jYWxsKHZvaWQpXG4gXHQpO1xuIH1cbiBcbitfX25ha2VkIF9fbm9pbmxpbmUgX191c2VkXG4rc3RhdGljIGludCBsZF9hYnNfc3VicHJvZyh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcdFwicjYgPSByMTtcIlxuK1x0XHRcInI3ID0gcjE7XCJcbitcdFx0XCIuOGJ5dGUgJVtsZF9hYnNdO1wiXG4rXHRcdFwiZXhpdDtcIlxuK1x0XHQ6XG4rXHRcdDogX19pbW1faW5zbihsZF9hYnMsIEJQRl9MRF9BQlMoQlBGX1csIDApKVxuK1x0XHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKlxuKyAqIEJ1Z2d5IHZlcmlmaWVyIGRpZCBub3QgcHJvcGVybHkgYmFja3RyYWNrIGVhcmx5IHN1YnByb2dyYW0gZXhpdFxuKyAqIG1vZGVsbGVkIGZvciBCUEZfTEQgfCBCUEZfQUJTIGluc3RydWN0aW9uLCBjYXVzaW5nIGEgc2VnZmF1bHQuXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19zdWNjZXNzXG4rX19sb2dfbGV2ZWwoMilcbisvKiBlYXJseSBleGl0IHBhdGggKi9cbitfX21zZyhcIjM6ICgwZikgcjEgKz0gcjdcIilcbitfX21zZyhcIm1hcmtfcHJlY2lzZTogZnJhbWUwOiByZWdzPXI3IHN0YWNrPSBiZWZvcmUgMjogKGJmKSByMSA9IHIxMFwiKVxuK19fbXNnKFwibWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSA5OiAoMjApIHIwID0gKih1MzIgKilza2JbMF1cIilcbitfX21zZyhcIm1hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDg6IChiZikgcjcgPSByMVwiKVxuK19fbXNnKFwibWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgNzogKGJmKSByNiA9IHIxXCIpXG4rX19tc2coXCJtYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSAxOiAoODUpIGNhbGwgcGMrNVwiKVxuK19fbXNnKFwibWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSAwOiAoYjcpIHI3ID0gLThcIilcbisvKiBmYWxsdGhyb3VnaCBwYXRoICovXG4rX19tc2coXCIzOiAoMGYpIHIxICs9IHI3XCIpXG4rX19tc2coXCJtYXJrX3ByZWNpc2U6IGZyYW1lMDogcmVncz1yNyBzdGFjaz0gYmVmb3JlIDI6IChiZikgcjEgPSByMTBcIilcbitfX21zZyhcIm1hcmtfcHJlY2lzZTogZnJhbWUwOiByZWdzPXI3IHN0YWNrPSBiZWZvcmUgMTA6ICg5NSkgZXhpdFwiKVxuK19fbXNnKFwibWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgOTogKDIwKSByMCA9ICoodTMyICopc2tiWzBdXCIpXG4rX19tc2coXCJtYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSA4OiAoYmYpIHI3ID0gcjFcIilcbitfX21zZyhcIm1hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDc6IChiZikgcjYgPSByMVwiKVxuK19fbXNnKFwibWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgMTogKDg1KSBjYWxsIHBjKzVcIilcbitfX21zZyhcIm1hcmtfcHJlY2lzZTogZnJhbWUwOiByZWdzPXI3IHN0YWNrPSBiZWZvcmUgMDogKGI3KSByNyA9IC04XCIpXG4rX19uYWtlZCBpbnQgbGRfYWJzX2JhY2t0cmFja19ib3RoX3BhdGhzKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcbitcdFx0XCJyNyA9IC04O1wiXG4rXHRcdFwiY2FsbCBsZF9hYnNfc3VicHJvZztcIlxuK1x0XHRcInIxID0gcjEwO1wiXG4rXHRcdFwicjEgKz0gcjc7XCIgLyogbWFyayByNyBhcyBwcmVjaXNlICovXG4rXHRcdFwiKih1NjQgKikocjEgKyAwKSA9IDA7XCJcbitcdFx0XCJyMCA9IDA7XCJcbitcdFx0XCJleGl0O1wiXG4rXHRcdDo6OiBfX2Nsb2JiZXJfYWxsXG4rXHQpO1xuK31cbitcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0NTo0Ny43NDM3MzYzNzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTMwMzY0OTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgQmFja3RyYWNrIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IGEgaGFuZGxlIG9uIHRoaXMgXCJiYWNrdHJhY2tcIiBsb2dpYy4gSSBrbm93IHRoZSBwYXRjaCBpcyBpbiBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AsIGFuZCB0aGF0IHRoZXJlIHNob3VsZCBiZSBzb21lIHNlbGZ0ZXN0cyBhc3NvY2lhdGVkIHdpdGggaXQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gZ2V0dGluZyBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGVtZW50YXRpb24gaXRzZWxmLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIEJQRiB2ZXJpZmllciBhbmQgS2NvbmZpZyBzeXN0ZW0uXG5cbk15IHBsYW4gaXMgdG8gZGlnIGludG8gYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgIGRpcmVjdGx5LiBJJ2xsIG5lZWQgdG8gdXNlIG15IHN0YW5kYXJkIHRvb2xraXQgZm9yIHRoaXMg4oCTIGVpdGhlciBncmVwcGluZyB0aHJvdWdoIHRoZSBjb2RlIGZvciBmdW5jdGlvbiBjYWxscyBhbmQgZGVwZW5kZW5jaWVzLCBvciBJIG1pZ2h0IHNpbXBseSByZWFkIHRoZSBmaWxlIGRpcmVjdGx5LCBkZXBlbmRpbmcgb24gaG93IGNvbXBsZXggaXQgaXMuIEknbGwgYmUgcGFydGljdWxhcmx5IGxvb2tpbmcgZm9yIHRoZSBlbnRyeSBwb2ludHMgdGhhdCB0cmlnZ2VyIHRoZSBiYWNrdHJhY2sgbG9naWMgd2l0aGluIHRoZSB2ZXJpZmllciBhbmQgYW55IEtjb25maWcgb3B0aW9ucyB0aGF0IGVuYWJsZSBvciBkaXNhYmxlIGl0LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBlbGVtZW50cyBhcmUgY29ubmVjdGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyB3aWxsIGJlIGNydWNpYWw7IGl04oCZcyBsaWtlbHkgdGhhdCB0aGUgYmFja3RyYWNrIGZ1bmN0aW9uYWxpdHkgaXMgY29uZGl0aW9uYWwgb24gY2VydGFpbiBidWlsZCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMzMiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDU6NTQuNjc0MTA0NDE3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTgzNzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbWFya19jaGFpbl9wcmVjaXNpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2JhY2t0cmFjay5jPTY2OD12b2lkIGJwZl9tYXJrX2FsbF9zY2FsYXJzX3ByZWNpc2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNjgzLVxcdCAqIGJlY2F1c2UgcHJlY2lzaW9uIG1hcmtpbmdzIGluIGN1cnJlbnQgbm9uLWNoZWNrcG9pbnRlZCBzdGF0ZSBhcmVcXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jOjY4NDpcXHQgKiBub3QgbmVlZGVkLiBTZWUgd2h5IGluIHRoZSBjb21tZW50IGluIF9fbWFya19jaGFpbl9wcmVjaXNpb24gYmVsb3cuXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYy02ODUtXFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTEyMzk9aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTU2OC1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjE1Njk6XFx0LyogZm9yZ2V0IHByZWNpc2UgbWFya2luZ3Mgd2UgaW5oZXJpdGVkLCBzZWUgX19tYXJrX2NoYWluX3ByZWNpc2lvbiAqL1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTU3MC1cXHRpZiAoZW52LVxcdTAwM2VicGZfY2FwYWJsZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDU6NTQuNzIyMDk4NDczWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA0ODI4NTc3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZmlsZXMsIGFzIGlmIEknbSB0aGlua2luZyBpdCB0aHJvdWdoOlxuXG4qKkFuYWx5emluZyBCUEYgQmFja3RyYWNraW5nIGFuZCBWZXJpZmljYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AgYW5kIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBMZXQncyByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIEJQRiB2ZXJpZmllciBoYW5kbGVzIHBvdGVudGlhbGx5IGNvbXBsZXggQlBGIHByb2dyYW1zIGFuZCB3aGF0IG9wdGltaXphdGlvbnMgb3IgYmFja3RyYWNraW5nIG1ldGhvZHMgYXJlIGluIHBsYXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdmVyaWZpZXIncyBsb2dpYyBpbnRlcmFjdHMgd2l0aCB0aGUgYmFja3RyYWNraW5nIG1lY2hhbmlzbXMuXG5cbkkgc3VzcGVjdCB0aGF0IGBiYWNrdHJhY2suY2AgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyBzaXR1YXRpb25zIHdoZXJlIHRoZSBpbml0aWFsIGFuYWx5c2lzIGlzIHRvbyBjb25zZXJ2YXRpdmUgb3IgZW5jb3VudGVycyBjb250cm9sIGZsb3cgdGhhdCBpdCBzdHJ1Z2dsZXMgd2l0aCBkdXJpbmcgaW5pdGlhbCBzdGF0aWMgYW5hbHlzaXMuIElzIGl0IGJhc2VkIG9uIGEgbGltaXRlZCBleHBsb3JhdGlvbiBvZiBwb3NzaWJsZSBleGVjdXRpb24gcGF0aHM/IElzIGl0IHNvbWUgc29ydCBvZiBhIGxpbWl0ZWQgZm9ybSBvZiBzeW1ib2xpYyBleGVjdXRpb24/IEl0IHNob3VsZCB0cnkgdG8gZmluZCB3YXlzIHRvIG1ha2UgaXQgbW9yZSBwcmVjaXNlLlxuXG5BbmQgdGhlbiB0aGUgYHZlcmlmaWVyLmNgIGZpbGUg4oCTIHRoYXQncyB0aGUgY29yZS4gSSBleHBlY3QgdG8gc2VlIHRoZSBtYWluIHN0YXRlIG1hY2hpbmVzIGFuZCBkYXRhIHN0cnVjdHVyZXMgb2YgdGhlIHZlcmlmaWVyIGluIHRoZXJlLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgYmFja3RyYWNraW5nIGludGVyZmFjZXMgd2l0aCB0aGUgcmVndWxhciB2ZXJpZmljYXRpb24gcHJvY2Vzcy4gSXMgaXQgY2FsbGVkIGluIHJlc3BvbnNlIHRvIGEgc3BlY2lmaWMgY29uZGl0aW9uLCBvciBpcyBpdCBtb3JlIGludGVncmF0ZWQ/IElzIHRoZSBiYWNrdHJhY2tpbmcgdXNlZCB0byByZXNvbHZlIGluZGlyZWN0IGp1bXBzIG9yIGNvbXBsZXggbG9vcCBzdHJ1Y3R1cmVzPyBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgdmVyaWZpZXIgZW5zdXJlcyB0aGF0IHRoZSBCUEYgcHJvZ3JhbSBpcyBzYWZlIHRvIGV4ZWN1dGUsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgbWVtb3J5IGFjY2VzcyBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSXQncyBwcm9iYWJseSBhIHN0YXRlZnVsIHByb2Nlc3MuIERvZXMgaXQgY2hlY2sgZm9yIHRoaW5ncyBsaWtlIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzLCB1bmluaXRpYWxpemVkIGRhdGEgYWNjZXNzLCBhbmQgaW5maW5pdGUgbG9vcHM/XG5cbkkgYW0gYWxzbyBpbnRlcmVzdGVkIGluIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IGJhY2t0cmFja2luZyBzdHJhdGVnaWVzIG9uIHBlcmZvcm1hbmNlLiBBcmUgdGhlcmUgdHJhZGUtb2ZmcyBiZXR3ZWVuIHRob3JvdWdobmVzcyBhbmQgc3BlZWQ/IEhvdyBhcmUgdGhlc2UgdHJhZGUtb2ZmcyBtYW5hZ2VkIGluIHRoZSBjb2RlPyBJcyB0aGVyZSBhIHdheSB0byB0d2VhayB0aGUgYmFja3RyYWNraW5nIGJlaGF2aW9yP1xuXG5UaW1lIHRvIGRpZyBpbi4gVGhpcyBpcyBnb2luZyB0byBiZSBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkyOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ1OjU3Ljc3MDM4NzQ3MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvYmFja3RyYWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTgwOlxcdFxcdFxcdFxcdCAgKiB0aGlzIGluc24sIHNvIGZvciB0aGUgSy1iYXNlZCBjb25kaXRpb25hbFxcbiA1ODE6XFx0XFx0XFx0XFx0ICAqIHRoZXJlIGlzIG5vdGhpbmcgbmV3IHRvIGJlIG1hcmtlZC5cXG4gNTgyOlxcdFxcdFxcdFxcdCAgKi9cXG4gNTgzOlxcdFxcdFxcdH1cXG4gNTg0OlxcdFxcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEKSB7XFxuIDU4NTpcXHRcXHRcXHQvKiBJdCdzIGxkX2ltbTY0IG9yIGxkX2FicyBvciBsZF9pbmQuXFxuIDU4NjpcXHRcXHRcXHQgKiBGb3IgbGRfaW1tNjQgbm8gZnVydGhlciB0cmFja2luZyBvZiBwcmVjaXNpb25cXG4gNTg3OlxcdFxcdFxcdCAqIGludG8gcGFyZW50IGlzIG5lY2Vzc2FyeVxcbiA1ODg6XFx0XFx0XFx0ICovXFxuIDU4OTpcXHRcXHRcXHRpZiAobW9kZSA9PSBCUEZfSU1NKSB7XFxuIDU5MDpcXHRcXHRcXHRcXHRidF9jbGVhcl9yZWcoYnQsIGRyZWcpO1xcbiA1OTE6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDU5MjpcXHRcXHRcXHR9XFxuIDU5MzpcXHRcXHRcXHQvKlxcbiA1OTQ6XFx0XFx0XFx0ICogQlBGX3tJTkQsQUJTfSBhcmUgbW9kZWxsZWQgYXMgdHdvIGJyYW5jaGVzOlxcbiA1OTU6XFx0XFx0XFx0ICogLSBmYWxsdGhyb3VnaDtcXG4gNTk2OlxcdFxcdFxcdCAqIC0gaW1wbGljaXQgc3VicHJvZ3JhbSBleGl0LlxcbiA1OTc6XFx0XFx0XFx0ICogSXQgaXMgbmVjZXNzYXJ5IHRvIHN3aXRjaCBjdXJyZW50IGZyYW1lIGlmXFxuIDU5ODpcXHRcXHRcXHQgKiBpbXBsaWNpdCBzdWJwcm9ncmFtIGV4aXQgYnJhbmNoIGlzIGJhY2t0cmFja2VkLlxcbiA1OTk6XFx0XFx0XFx0ICovXFxuIDYwMDpcXHRcXHRcXHRpZiAobW9kZSA9PSBCUEZfSU5EIHx8IG1vZGUgPT0gQlBGX0FCUykge1xcbiA2MDE6XFx0XFx0XFx0XFx0aWYgKGJ0X2lzX3JlZ19zZXQoYnQsIGRyZWcpKVxcbiA2MDI6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9UU1VQUDtcXG4gNjAzOlxcdFxcdFxcdFxcdGlmIChzdWJzZXFfaWR4ICE9IGlkeCArIDEpXFxuIDYwNDpcXHRcXHRcXHRcXHRcXHRpZiAoYnRfc3VicHJvZ19lbnRlcihidCkpXFxuIDYwNTpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gNjA2OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiA2MDc6XFx0XFx0XFx0fVxcbiA2MDg6XFx0XFx0fVxcbiA2MDk6XFx0XFx0LyogUHJvcGFnYXRlIHByZWNpc2lvbiBtYXJrcyB0byBsaW5rZWQgcmVnaXN0ZXJzLCB0byBhY2NvdW50IGZvclxcbiA2MTA6XFx0XFx0ICogcmVnaXN0ZXJzIG1hcmtlZCBhcyBwcmVjaXNlIGluIHRoaXMgZnVuY3Rpb24uXFxuIDYxMTpcXHRcXHQgKi9cXG4gNjEyOlxcdFxcdGJwZl9idF9zeW5jX2xpbmtlZF9yZWdzKGJ0LCBoaXN0KTtcXG4gNjEzOlxcdFxcdHJldHVybiAwO1xcbiA2MTQ6XFx0fVxcbiA2MTU6XFx0XFxuIDYxNjpcXHQvKiB0aGUgc2NhbGFyIHByZWNpc2lvbiB0cmFja2luZyBhbGdvcml0aG06XFxuIDYxNzpcXHQgKiAuIGF0IHRoZSBzdGFydCBhbGwgcmVnaXN0ZXJzIGhhdmUgcHJlY2lzZT1mYWxzZS5cXG4gNjE4OlxcdCAqIC4gc2NhbGFyIHJhbmdlcyBhcmUgdHJhY2tlZCBhcyBub3JtYWwgdGhyb3VnaCBhbHUgYW5kIGptcCBpbnNucy5cXG4gNjE5OlxcdCAqIC4gb25jZSBwcmVjaXNlIHZhbHVlIG9mIHRoZSBzY2FsYXIgcmVnaXN0ZXIgaXMgdXNlZCBpbjpcXG4gNjIwOlxcdCAqICAgLiAgcHRyICsgc2NhbGFyIGFsdVxcbiA2MjE6XFx0ICogICAuIGlmIChzY2FsYXIgY29uZCBLfHNjYWxhcilcXG4gNjIyOlxcdCAqICAgLiAgaGVscGVyX2NhbGwoLi4sIHNjYWxhciwgLi4uKSB3aGVyZSBBUkdfQ09OU1QgaXMgZXhwZWN0ZWRcXG4gNjIzOlxcdCAqICAgYmFja3RyYWNrIHRocm91Z2ggdGhlIHZlcmlmaWVyIHN0YXRlcyBhbmQgbWFyayBhbGwgcmVnaXN0ZXJzIGFuZFxcbiA2MjQ6XFx0ICogICBzdGFjayBzbG90cyB3aXRoIHNwaWxsZWQgY29uc3RhbnRzIHRoYXQgdGhlc2Ugc2NhbGFyIHJlZ2lzdGVyc1xcbiA2MjU6XFx0ICogICBzaG91bGQgYmUgcHJlY2lzZS5cXG4gNjI2OlxcdCAqIC4gZHVyaW5nIHN0YXRlIHBydW5pbmcgdHdvIHJlZ2lzdGVycyAob3Igc3BpbGxlZCBzdGFjayBzbG90cylcXG4gNjI3OlxcdCAqICAgYXJlIGVxdWl2YWxlbnQgaWYgYm90aCBhcmUgbm90IHByZWNpc2UuXFxuIDYyODpcXHQgKlxcbiA2Mjk6XFx0ICogTm90ZSB0aGUgdmVyaWZpZXIgY2Fubm90IHNpbXBseSB3YWxrIHJlZ2lzdGVyIHBhcmVudGFnZSBjaGFpbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDU6NTcuNzcwNDc5NTAxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM2NDA0NzA0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgKipcblxuQWxyaWdodCwgSSdtIGhlYWRpbmcgaW50byBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AuIE15IGdvYWwgaGVyZSBpcyBzdHJhaWdodGZvcndhcmQ6IEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRoZSByZWxldmFudCBBUEkgc3VyZmFjZSBvZiB0aGlzIG1vZHVsZS4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gaWRlbnRpZnkgdGhvc2UgY3J1Y2lhbCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgb3IgYXJlIGludGVuZGVkIGFzIHRoZSBpbml0aWFsIGVudHJ5IHBvaW50LiBTbywgSSdtIGxvb2tpbmcgZm9yIHRoZSBleHBvcnRlZCBzeW1ib2xzLCB0aGUgbm9uLXN0YXRpYyBvbmVzLCBhbmQgYW55IG9idmlvdXMgZW50cnkgcG9pbnRzLiBJJ20gc2tpcHBpbmcgdGhlIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9yIG5vdzsgSSBjYW4gYWx3YXlzIGNvbWUgYmFjayB0byB0aG9zZSBpZiB0aGUgaGlnaC1sZXZlbCBwaWN0dXJlIGlzbid0IGNsZWFyIGVub3VnaC4gVGhpcyBpcyBhYm91dCBlZmZpY2llbnQgY29kZSBuYXZpZ2F0aW9uLCBub3QgYSBkZWVwIGRpdmUgaW50byBldmVyeSBsaW5lIGp1c3QgeWV0LiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNTYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ2OjAwLjEzNDUyODY0MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2JhY2t0cmFjay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY2MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjA6XFx0ICpcXG4gNjYxOlxcdCAqIEFsc28gaWYgcGFyZW50J3MgY3VyZnJhbWUgXFx1MDAzZSBmcmFtZSB3aGVyZSBiYWNrdHJhY2tpbmcgc3RhcnRlZCxcXG4gNjYyOlxcdCAqIHRoZSB2ZXJpZmllciBuZWVkIHRvIG1hcmsgcmVnaXN0ZXJzIGluIGJvdGggZnJhbWVzLCBvdGhlcndpc2UgY2FsbGVlc1xcbiA2NjM6XFx0ICogbWF5IGluY29ycmVjdGx5IHBydW5lIGNhbGxlcnMuIFRoaXMgaXMgc2ltaWxhciB0b1xcbiA2NjQ6XFx0ICogY29tbWl0IDc2NDBlYWQ5MzkyNCAoXFxcImJwZjogdmVyaWZpZXI6IG1ha2Ugc3VyZSBjYWxsZWVzIGRvbid0IHBydW5lIHdpdGggY2FsbGVyIGRpZmZlcmVuY2VzXFxcIilcXG4gNjY1OlxcdCAqXFxuIDY2NjpcXHQgKiBGb3Igbm93IGJhY2t0cmFja2luZyBmYWxscyBiYWNrIGludG8gY29uc2VydmF0aXZlIG1hcmtpbmcuXFxuIDY2NzpcXHQgKi9cXG4gNjY4OlxcdHZvaWQgYnBmX21hcmtfYWxsX3NjYWxhcnNfcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiA2Njk6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0KVxcbiA2NzA6XFx0e1xcbiA2NzE6XFx0XFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpmdW5jO1xcbiA2NzI6XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcXG4gNjczOlxcdFxcdGludCBpLCBqO1xcbiA2NzQ6XFx0XFxuIDY3NTpcXHRcXHRpZiAoZW52LVxcdTAwM2Vsb2cubGV2ZWwgXFx1MDAyNiBCUEZfTE9HX0xFVkVMMikge1xcbiA2NzY6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJtYXJrX3ByZWNpc2U6IGZyYW1lJWQ6IGZhbGxpbmcgYmFjayB0byBmb3JjaW5nIGFsbCBzY2FsYXJzIHByZWNpc2VcXFxcblxcXCIsXFxuIDY3NzpcXHRcXHRcXHRcXHRzdC1cXHUwMDNlY3VyZnJhbWUpO1xcbiA2Nzg6XFx0XFx0fVxcbiA2Nzk6XFx0XFxuIDY4MDpcXHRcXHQvKiBiaWcgaGFtbWVyOiBtYXJrIGFsbCBzY2FsYXJzIHByZWNpc2UgaW4gdGhpcyBwYXRoLlxcbiA2ODE6XFx0XFx0ICogcG9wX3N0YWNrIG1heSBzdGlsbCBnZXQgIXByZWNpc2Ugc2NhbGFycy5cXG4gNjgyOlxcdFxcdCAqIFdlIGFsc28gc2tpcCBjdXJyZW50IHN0YXRlIGFuZCBnbyBzdHJhaWdodCB0byBmaXJzdCBwYXJlbnQgc3RhdGUsXFxuIDY4MzpcXHRcXHQgKiBiZWNhdXNlIHByZWNpc2lvbiBtYXJraW5ncyBpbiBjdXJyZW50IG5vbi1jaGVja3BvaW50ZWQgc3RhdGUgYXJlXFxuIDY4NDpcXHRcXHQgKiBub3QgbmVlZGVkLiBTZWUgd2h5IGluIHRoZSBjb21tZW50IGluIF9fbWFya19jaGFpbl9wcmVjaXNpb24gYmVsb3cuXFxuIDY4NTpcXHRcXHQgKi9cXG4gNjg2OlxcdFxcdGZvciAoc3QgPSBzdC1cXHUwMDNlcGFyZW50OyBzdDsgc3QgPSBzdC1cXHUwMDNlcGFyZW50KSB7XFxuIDY4NzpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IHN0LVxcdTAwM2VjdXJmcmFtZTsgaSsrKSB7XFxuIDY4ODpcXHRcXHRcXHRcXHRmdW5jID0gc3QtXFx1MDAzZWZyYW1lW2ldO1xcbiA2ODk6XFx0XFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIEJQRl9SRUdfRlA7IGorKykge1xcbiA2OTA6XFx0XFx0XFx0XFx0XFx0cmVnID0gXFx1MDAyNmZ1bmMtXFx1MDAzZXJlZ3Nbal07XFxuIDY5MTpcXHRcXHRcXHRcXHRcXHRpZiAocmVnLVxcdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSB8fCByZWctXFx1MDAzZXByZWNpc2UpXFxuIDY5MjpcXHRcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNjkzOlxcdFxcdFxcdFxcdFxcdHJlZy1cXHUwMDNlcHJlY2lzZSA9IHRydWU7XFxuIDY5NDpcXHRcXHRcXHRcXHRcXHRpZiAoZW52LVxcdTAwM2Vsb2cubGV2ZWwgXFx1MDAyNiBCUEZfTE9HX0xFVkVMMikge1xcbiA2OTU6XFx0XFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJmb3JjZV9wcmVjaXNlOiBmcmFtZSVkOiBmb3JjaW5nIHIlZCB0byBiZSBwcmVjaXNlXFxcXG5cXFwiLFxcbiA2OTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0aSwgaik7XFxuIDY5NzpcXHRcXHRcXHRcXHRcXHR9XFxuIDY5ODpcXHRcXHRcXHRcXHR9XFxuIDY5OTpcXHRcXHRcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgZnVuYy1cXHUwMDNlYWxsb2NhdGVkX3N0YWNrIC8gQlBGX1JFR19TSVpFOyBqKyspIHtcXG4gNzAwOlxcdFxcdFxcdFxcdFxcdGlmICghYnBmX2lzX3NwaWxsZWRfcmVnKFxcdTAwMjZmdW5jLVxcdTAwM2VzdGFja1tqXSkpXFxuIDcwMTpcXHRcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzAyOlxcdFxcdFxcdFxcdFxcdHJlZyA9IFxcdTAwMjZmdW5jLVxcdTAwM2VzdGFja1tqXS5zcGlsbGVkX3B0cjtcXG4gNzAzOlxcdFxcdFxcdFxcdFxcdGlmIChyZWctXFx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFIHx8IHJlZy1cXHUwMDNlcHJlY2lzZSlcXG4gNzA0OlxcdFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA3MDU6XFx0XFx0XFx0XFx0XFx0cmVnLVxcdTAwM2VwcmVjaXNlID0gdHJ1ZTtcXG4gNzA2OlxcdFxcdFxcdFxcdFxcdGlmIChlbnYtXFx1MDAzZWxvZy5sZXZlbCBcXHUwMDI2IEJQRl9MT0dfTEVWRUwyKSB7XFxuIDcwNzpcXHRcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImZvcmNlX3ByZWNpc2U6IGZyYW1lJWQ6IGZvcmNpbmcgZnAlZCB0byBiZSBwcmVjaXNlXFxcXG5cXFwiLFxcbiA3MDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0aSwgLShqICsgMSkgKiA4KTtcXG4gNzA5OlxcdFxcdFxcdFxcdFxcdH1cXG4gNzEwOlxcdFxcdFxcdFxcdH1cXG4gNzExOlxcdFxcdFxcdH1cXG4gNzEyOlxcdFxcdH1cXG4gNzEzOlxcdH1cXG4gNzE0OlxcdFxcbiA3MTU6XFx0LypcXG4gNzE2OlxcdCAqIGJwZl9tYXJrX2NoYWluX3ByZWNpc2lvbigpIGJhY2t0cmFja3MgQlBGIHByb2dyYW0gaW5zdHJ1Y3Rpb24gc2VxdWVuY2UgYW5kXFxuIDcxNzpcXHQgKiBjaGFpbiBvZiB2ZXJpZmllciBzdGF0ZXMgbWFraW5nIHN1cmUgdGhhdCByZWdpc3RlciAqcmVnbm8qIChpZiByZWdubyBcXHUwMDNlPSAwKVxcbiA3MTg6XFx0ICogYW5kL29yIHN0YWNrIHNsb3QgKnNwaSogKGlmIHNwaSBcXHUwMDNlPSAwKSBhcmUgbWFya2VkIGFzIHByZWNpc2VseSB0cmFja2VkXFxuIDcxOTpcXHQgKiBTQ0FMQVJTLCBhcyB3ZWxsIGFzIGFueSBvdGhlciByZWdpc3RlcnMgYW5kIHNsb3RzIHRoYXQgY29udHJpYnV0ZSB0b1xcbiA3MjA6XFx0ICogYSB0cmFja2VkIHN0YXRlIG9mIGdpdmVuIHJlZ2lzdGVycy9zdGFjayBzbG90cywgZGVwZW5kaW5nIG9uIHNwZWNpZmljIEJQRlxcbiA3MjE6XFx0ICogYXNzZW1ibHkgaW5zdHJ1Y3Rpb25zIChzZWUgYmFja3RyYWNrX2luc25zKCkgZm9yIGV4YWN0IGluc3RydWN0aW9uIGhhbmRsaW5nXFxuIDcyMjpcXHQgKiBsb2dpYykuIFRoaXMgYmFja3RyYWNraW5nIHJlbGllcyBvbiByZWNvcmRlZCBqbXBfaGlzdG9yeSBhbmQgaXMgYWJsZSB0b1xcbiA3MjM6XFx0ICogdHJhdmVyc2UgZW50aXJlIGNoYWluIG9mIHBhcmVudCBzdGF0ZXMuIFRoaXMgcHJvY2VzcyBlbmRzIG9ubHkgd2hlbiBhbGwgdGhlXFxuIDcyNDpcXHQgKiBuZWNlc3NhcnkgcmVnaXN0ZXJzL3Nsb3RzIGFuZCB0aGVpciB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcyBhcmUgbWFya2VkIGFzXFxuIDcyNTpcXHQgKiBwcmVjaXNlLlxcbiA3MjY6XFx0ICpcXG4gNzI3OlxcdCAqIE9uZSBpbXBvcnRhbnQgYW5kIHN1YnRsZSBhc3BlY3QgaXMgdGhhdCBwcmVjaXNlIG1hcmtzICpkbyBub3QgbWF0dGVyKiBpblxcbiA3Mjg6XFx0ICogdGhlIGN1cnJlbnRseSB2ZXJpZmllZCBzdGF0ZSAoY3VycmVudCBzdGF0ZSkuIEl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kXFxuIDcyOTpcXHQgKiB3aHkgdGhpcyBpcyB0aGUgY2FzZS5cXG4gNzMwOlxcdCAqXFxuIDczMTpcXHQgKiBGaXJzdCwgbm90ZSB0aGF0IGN1cnJlbnQgc3RhdGUgaXMgdGhlIHN0YXRlIHRoYXQgaXMgbm90IHlldCBcXFwiY2hlY2twb2ludGVkXFxcIixcXG4gNzMyOlxcdCAqIGkuZS4sIGl0IGlzIG5vdCB5ZXQgcHV0IGludG8gZW52LVxcdTAwM2VleHBsb3JlZF9zdGF0ZXMsIGFuZCBpdCBoYXMgbm8gY2hpbGRyZW5cXG4gNzMzOlxcdCAqIHN0YXRlcyBhcyB3ZWxsLiBJdCdzIGVwaGVtZXJhbCwgYW5kIGNhbiBlbmQgdXAgZWl0aGVyIGEpIGJlaW5nIGRpc2NhcmRlZCBpZlxcbiA3MzQ6XFx0ICogY29tcGF0aWJsZSBleHBsb3JlZCBzdGF0ZSBpcyBmb3VuZCBhdCBzb21lIHBvaW50IG9yIEJQRl9FWElUIGluc3RydWN0aW9uIGlzXFxuIDczNTpcXHQgKiByZWFjaGVkIG9yIGIpIGNoZWNrcG9pbnRlZCBhbmQgcHV0IGludG8gZW52LVxcdTAwM2VleHBsb3JlZF9zdGF0ZXMsIGJyYW5jaGluZyBvdXRcXG4gNzM2OlxcdCAqIGludG8gb25lIG9yIG1vcmUgY2hpbGRyZW4gc3RhdGVzLlxcbiA3Mzc6XFx0ICpcXG4gNzM4OlxcdCAqIEluIHRoZSBmb3JtZXIgY2FzZSwgcHJlY2lzZSBtYXJraW5ncyBpbiBjdXJyZW50IHN0YXRlIGFyZSBjb21wbGV0ZWx5XFxuIDczOTpcXHQgKiBpZ25vcmVkIGJ5IHN0YXRlIGNvbXBhcmlzb24gY29kZSAoc2VlIHJlZ3NhZmUoKSBmb3IgZGV0YWlscykuIE9ubHlcXG4gNzQwOlxcdCAqIGNoZWNrcG9pbnRlZCAoXFxcIm9sZFxcXCIpIHN0YXRlIHByZWNpc2UgbWFya2luZ3MgYXJlIGltcG9ydGFudCwgYW5kIGlmIG9sZFxcbiA3NDE6XFx0ICogc3RhdGUncyByZWdpc3Rlci9zbG90IGlzIHByZWNpc2UsIHJlZ3NhZmUoKSBhc3N1bWVzIGN1cnJlbnQgc3RhdGUnc1xcbiA3NDI6XFx0ICogcmVnaXN0ZXIvc2xvdCBhcyBwcmVjaXNlIGFuZCBjaGVja3MgdmFsdWUgcmFuZ2VzIGV4YWN0bHkgYW5kIHByZWNpc2VseS4gSWZcXG4gNzQzOlxcdCAqIHN0YXRlcyB0dXJuIG91dCB0byBiZSBjb21wYXRpYmxlLCBjdXJyZW50IHN0YXRlJ3MgbmVjZXNzYXJ5IHByZWNpc2VcXG4gNzQ0OlxcdCAqIG1hcmtpbmdzIGFuZCBhbnkgcmVxdWlyZWQgcGFyZW50IHN0YXRlcycgcHJlY2lzZSBtYXJraW5ncyBhcmUgZW5mb3JjZWRcXG4gNzQ1OlxcdCAqIGFmdGVyIHRoZSBmYWN0IHdpdGggcHJvcGFnYXRlX3ByZWNpc2lvbigpIGxvZ2ljLCBhZnRlciB0aGUgZmFjdC4gQnV0IGl0J3NcXG4gNzQ2OlxcdCAqIGltcG9ydGFudCB0byByZWFsaXplIHRoYXQgaW4gdGhpcyBjYXNlLCBldmVuIGFmdGVyIG1hcmtpbmcgY3VycmVudCBzdGF0ZVxcbiA3NDc6XFx0ICogcmVnaXN0ZXJzL3Nsb3RzIGFzIHByZWNpc2UsIHdlIGltbWVkaWF0ZWx5IGRpc2NhcmQgY3VycmVudCBzdGF0ZS4gU28gd2hhdFxcbiA3NDg6XFx0ICogYWN0dWFsbHkgbWF0dGVycyBpcyBhbnkgb2YgdGhlIHByZWNpc2UgbWFya2luZ3MgcHJvcGFnYXRlZCBpbnRvIGN1cnJlbnRcXG4gNzQ5OlxcdCAqIHN0YXRlJ3MgcGFyZW50IHN0YXRlcywgd2hpY2ggYXJlIGFsd2F5cyBjaGVja3BvaW50ZWQgKGR1ZSB0byBiKSBjYXNlIGFib3ZlKS5cXG4gNzUwOlxcdCAqIEFzIHN1Y2gsIGZvciBzY2VuYXJpbyBhKSBpdCBkb2Vzbid0IG1hdHRlciBpZiBjdXJyZW50IHN0YXRlIGhhcyBwcmVjaXNlXFxuIDc1MTpcXHQgKiBtYXJraW5ncyBzZXQgb3Igbm90LlxcbiA3NTI6XFx0ICpcXG4gNzUzOlxcdCAqIE5vdywgZm9yIHRoZSBzY2VuYXJpbyBiKSwgY2hlY2twb2ludGluZyBhbmQgZm9ya2luZyBpbnRvIGNoaWxkKHJlbilcXG4gNzU0OlxcdCAqIHN0YXRlKHMpLiBOb3RlIHRoYXQgYmVmb3JlIGN1cnJlbnQgc3RhdGUgZ2V0cyB0byBjaGVja3BvaW50aW5nIHN0ZXAsIGFueVxcbiA3NTU6XFx0ICogcHJvY2Vzc2VkIGluc3RydWN0aW9uIGFsd2F5cyBhc3N1bWVzIHByZWNpc2UgU0NBTEFSIHJlZ2lzdGVyL3Nsb3RcXG4gNzU2OlxcdCAqIGtub3dsZWRnZTogaWYgcHJlY2lzZSB2YWx1ZSBvciByYW5nZSBpcyB1c2VmdWwgdG8gcHJ1bmUganVtcCBicmFuY2gsIEJQRlxcbiA3NTc6XFx0ICogdmVyaWZpZXIgdGFrZXMgdGhpcyBvcHBvcnR1bml0eSBlbnRodXNpYXN0aWNhbGx5LiBTaW1pbGFybHksIHdoZW5cXG4gNzU4OlxcdCAqIHJlZ2lzdGVyJ3MgdmFsdWUgaXMgdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0IG9yIG1lbW9yeSBhZGRyZXNzLCBleGFjdFxcbiA3NTk6XFx0ICoga25vd2xlZGdlIG9mIFNDQUxBUiByYW5nZSBpcyBhc3N1bWVkLCBjaGVja2VkLCBhbmQgZW5mb3JjZWQuIFNvLCBzaW1pbGFyIHRvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ2OjAwLjEzNDY0NTU3MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTA1MTkwNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBCYWNrdHJhY2sgTG9naWMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDc2MCB0byA4NTAuIEkgcmVjYWxsIHRoYXQgc2VjdGlvbiBiZWluZyBwYXJ0aWN1bGFybHkgaW52b2x2ZWQgd2l0aCB0aGUgYmFja3RyYWNraW5nIGFsZ29yaXRobS4gSSBrbm93IGl0J3MgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBCUEYgdmVyaWZpZXIsIGFuZCBhbnkgcG90ZW50aWFsIGluZWZmaWNpZW5jaWVzIG9yIHN1YnRsZSBidWdzIGluIHRoaXMgYXJlYSBjYW4gaGF2ZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIG9yIHdvcnNlLCBvcGVuIHVwIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGV4YWN0bHkgaG93IGl0J3MgaGFuZGxpbmcgdGhlIHRyYXZlcnNhbCBhbmQgc3RhdGUgbWFuYWdlbWVudCBkdXJpbmcgdGhlIGJ5dGVjb2RlIGFuYWx5c2lzLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGxvZ2ljIHJlbGF0ZWQgdG8gZGV0ZWN0aW5nIGxvb3BzLCBoYW5kbGluZyBjb25kaXRpb25hbCBicmFuY2hlcyB0aGF0IGNvdWxkIGxlYWQgdG8gbXVsdGlwbGUgcGF0aHMsIGFuZCBob3cgaXQgZGVhbHMgd2l0aCBwb3RlbnRpYWwgZGVhZCBjb2RlIHBhdGhzLiBJIHdhbnQgdG8gcGF5IHNwZWNpYWwgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgdXNlcyB0byBtYWludGFpbiBzdGF0ZSBhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIGEgYmFja3RyYWNrLiBUaW1lIHRvIGdldCB0aGUgZ2RiIHVwIGFuZCBydW5uaW5nIGlmIEkgbmVlZCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI3MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6MDIuMzQ1MTY3MTUzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2JhY2t0cmFjay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc2MDpcXHQgKiB3aGF0IHdlIG1lbnRpb25lZCBhYm92ZSBhYm91dCBzdGF0ZSBjb21wYXJpc29uIGlnbm9yaW5nIHByZWNpc2UgbWFya2luZ3NcXG4gNzYxOlxcdCAqIGR1cmluZyBzdGF0ZSBjb21wYXJpc29uLCBCUEYgdmVyaWZpZXIgaWdub3JlcyBhbmQgYWxzbyBhc3N1bWVzIHByZWNpc2VcXG4gNzYyOlxcdCAqIG1hcmtpbmdzICphdCB3aWxsKiBkdXJpbmcgaW5zdHJ1Y3Rpb24gdmVyaWZpY2F0aW9uIHByb2Nlc3MuIEJ1dCBhcyB2ZXJpZmllclxcbiA3NjM6XFx0ICogYXNzdW1lcyBwcmVjaXNpb24sIGl0IGFsc28gcHJvcGFnYXRlcyBhbnkgcHJlY2lzaW9uIGRlcGVuZGVuY2llcyBhY3Jvc3NcXG4gNzY0OlxcdCAqIHBhcmVudCBzdGF0ZXMsIHdoaWNoIGFyZSBub3QgeWV0IGZpbmFsaXplZCwgc28gY2FuIGJlIGZ1cnRoZXIgcmVzdHJpY3RlZFxcbiA3NjU6XFx0ICogYmFzZWQgb24gbmV3IGtub3dsZWRnZSBnYWluZWQgZnJvbSByZXN0cmljdGlvbnMgZW5mb3JjZWQgYnkgdGhlaXIgY2hpbGRyZW5cXG4gNzY2OlxcdCAqIHN0YXRlcy4gVGhpcyBpcyBzbyB0aGF0IG9uY2UgdGhvc2UgcGFyZW50IHN0YXRlcyBhcmUgZmluYWxpemVkLCBpLmUuLCB3aGVuXFxuIDc2NzpcXHQgKiB0aGV5IGhhdmUgbm8gbW9yZSBhY3RpdmUgY2hpbGRyZW4gc3RhdGUsIHN0YXRlIGNvbXBhcmlzb24gbG9naWMgaW5cXG4gNzY4OlxcdCAqIGlzX3N0YXRlX3Zpc2l0ZWQoKSB3b3VsZCBlbmZvcmNlIHN0cmljdCBhbmQgcHJlY2lzZSBTQ0FMQVIgcmFuZ2VzLCBpZlxcbiA3Njk6XFx0ICogcmVxdWlyZWQgZm9yIGNvcnJlY3RuZXNzLlxcbiA3NzA6XFx0ICpcXG4gNzcxOlxcdCAqIFRvIGJ1aWxkIGEgYml0IG1vcmUgaW50dWl0aW9uLCBub3RlIGFsc28gdGhhdCBvbmNlIGEgc3RhdGUgaXMgY2hlY2twb2ludGVkLFxcbiA3NzI6XFx0ICogdGhlIHBhdGggd2UgdG9vayB0byBnZXQgdG8gdGhhdCBzdGF0ZSBpcyBub3QgaW1wb3J0YW50LiBUaGlzIGlzIGNydWNpYWxcXG4gNzczOlxcdCAqIHByb3BlcnR5IGZvciBzdGF0ZSBwcnVuaW5nLiBXaGVuIHN0YXRlIGlzIGNoZWNrcG9pbnRlZCBhbmQgZmluYWxpemVkIGF0XFxuIDc3NDpcXHQgKiBzb21lIGluc3RydWN0aW9uIGluZGV4LCBpdCBjYW4gYmUgY29ycmVjdGx5IGFuZCBzYWZlbHkgdXNlZCB0byBcXFwic2hvcnRcXG4gNzc1OlxcdCAqIGNpcmN1aXRcXFwiIGFueSAqY29tcGF0aWJsZSogc3RhdGUgdGhhdCByZWFjaGVzIGV4YWN0bHkgdGhlIHNhbWUgaW5zdHJ1Y3Rpb25cXG4gNzc2OlxcdCAqIGluZGV4LiBJLmUuLCBpZiB3ZSBqdW1wZWQgdG8gdGhhdCBpbnN0cnVjdGlvbiBmcm9tIGEgY29tcGxldGVseSBkaWZmZXJlbnRcXG4gNzc3OlxcdCAqIGNvZGUgcGF0aCB0aGFuIG9yaWdpbmFsIGZpbmFsaXplZCBzdGF0ZSB3YXMgZGVyaXZlZCBmcm9tLCBpdCBkb2Vzbid0XFxuIDc3ODpcXHQgKiBtYXR0ZXIsIGN1cnJlbnQgc3RhdGUgY2FuIGJlIGRpc2NhcmRlZCBiZWNhdXNlIGZyb20gdGhhdCBpbnN0cnVjdGlvblxcbiA3Nzk6XFx0ICogZm9yd2FyZCBoYXZpbmcgYSBjb21wYXRpYmxlIHN0YXRlIHdpbGwgZW5zdXJlIHdlIHdpbGwgc2FmZWx5IHJlYWNoIHRoZVxcbiA3ODA6XFx0ICogZXhpdC4gU3RhdGVzIGRlc2NyaWJlIHByZWNvbmRpdGlvbnMgZm9yIGZ1cnRoZXIgZXhwbG9yYXRpb24sIGJ1dCBjb21wbGV0ZWx5XFxuIDc4MTpcXHQgKiBmb3JnZXQgdGhlIGhpc3Rvcnkgb2YgaG93IHdlIGdvdCBoZXJlLlxcbiA3ODI6XFx0ICpcXG4gNzgzOlxcdCAqIFRoaXMgYWxzbyBtZWFucyB0aGF0IGV2ZW4gaWYgd2UgbmVlZGVkIHByZWNpc2UgU0NBTEFSIHJhbmdlIHRvIGdldCB0b1xcbiA3ODQ6XFx0ICogZmluYWxpemVkIHN0YXRlLCBidXQgZnJvbSB0aGF0IHBvaW50IGZvcndhcmQgKnRoYXQgc2FtZSogU0NBTEFSIHJlZ2lzdGVyIGlzXFxuIDc4NTpcXHQgKiBuZXZlciB1c2VkIGluIGEgcHJlY2lzZSBjb250ZXh0IChpLmUuLCBpdCdzIHByZWNpc2UgdmFsdWUgaXMgbm90IG5lZWRlZCBmb3JcXG4gNzg2OlxcdCAqIGNvcnJlY3RuZXNzKSwgaXQncyBjb3JyZWN0IGFuZCBzYWZlIHRvIG1hcmsgc3VjaCByZWdpc3RlciBhcyBcXFwiaW1wcmVjaXNlXFxcIlxcbiA3ODc6XFx0ICogKGkuZS4sIHByZWNpc2UgbWFya2luZyBzZXQgdG8gZmFsc2UpLiBUaGlzIGlzIHdoYXQgd2UgcmVseSBvbiB3aGVuIHdlIGRvXFxuIDc4ODpcXHQgKiBub3Qgc2V0IHByZWNpc2UgbWFya2luZyBpbiBjdXJyZW50IHN0YXRlLiBJZiBubyBjaGlsZCBzdGF0ZSByZXF1aXJlc1xcbiA3ODk6XFx0ICogcHJlY2lzaW9uIGZvciBhbnkgZ2l2ZW4gU0NBTEFSIHJlZ2lzdGVyLCBpdCdzIHNhZmUgdG8gZGljdGF0ZSB0aGF0IGl0IGNhblxcbiA3OTA6XFx0ICogYmUgaW1wcmVjaXNlLiBJZiBhbnkgY2hpbGQgc3RhdGUgZG9lcyByZXF1aXJlIHRoaXMgcmVnaXN0ZXIgdG8gYmUgcHJlY2lzZSxcXG4gNzkxOlxcdCAqIHdlJ2xsIG1hcmsgaXQgcHJlY2lzZSBsYXRlciByZXRyb2FjdGl2ZWx5IGR1cmluZyBwcmVjaXNlIG1hcmtpbmdzXFxuIDc5MjpcXHQgKiBwcm9wYWdhdGlvbiBmcm9tIGNoaWxkIHN0YXRlIHRvIHBhcmVudCBzdGF0ZXMuXFxuIDc5MzpcXHQgKlxcbiA3OTQ6XFx0ICogU2tpcHBpbmcgcHJlY2lzZSBtYXJraW5nIHNldHRpbmcgaW4gY3VycmVudCBzdGF0ZSBpcyBhIG1pbGQgdmVyc2lvbiBvZlxcbiA3OTU6XFx0ICogcmVseWluZyBvbiB0aGUgYWJvdmUgb2JzZXJ2YXRpb24uIEJ1dCB3ZSBjYW4gdXRpbGl6ZSB0aGlzIHByb3BlcnR5IGV2ZW5cXG4gNzk2OlxcdCAqIG1vcmUgYWdncmVzc2l2ZWx5IGJ5IHByb2FjdGl2ZWx5IGZvcmdldHRpbmcgYW55IHByZWNpc2UgbWFya2luZyBpbiB0aGVcXG4gNzk3OlxcdCAqIGN1cnJlbnQgc3RhdGUgKHdoaWNoIHdlIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgc3RhdGUpLCByaWdodCBiZWZvcmUgd2VcXG4gNzk4OlxcdCAqIGNoZWNrcG9pbnQgaXQgYW5kIGJyYW5jaCBvZmYgaW50byBuZXcgY2hpbGQgc3RhdGUuIFRoaXMgaXMgZG9uZSBieVxcbiA3OTk6XFx0ICogbWFya19hbGxfc2NhbGFyc19pbXByZWNpc2UoKSB0byBob3BlZnVsbHkgZ2V0IG1vcmUgcGVybWlzc2l2ZSBhbmQgZ2VuZXJpY1xcbiA4MDA6XFx0ICogZmluYWxpemVkIHN0YXRlcyB3aGljaCBoZWxwIGluIHNob3J0IGNpcmN1aXRpbmcgbW9yZSBmdXR1cmUgc3RhdGVzLlxcbiA4MDE6XFx0ICovXFxuIDgwMjpcXHRpbnQgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIDgwMzpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3RhcnRpbmdfc3RhdGUsXFxuIDgwNDpcXHRcXHRcXHRcXHQgICAgaW50IHJlZ25vLFxcbiA4MDU6XFx0XFx0XFx0XFx0ICAgIGJvb2wgKmNoYW5nZWQpXFxuIDgwNjpcXHR7XFxuIDgwNzpcXHRcXHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdCA9IHN0YXJ0aW5nX3N0YXRlO1xcbiA4MDg6XFx0XFx0c3RydWN0IGJhY2t0cmFja19zdGF0ZSAqYnQgPSBcXHUwMDI2ZW52LVxcdTAwM2VidDtcXG4gODA5OlxcdFxcdGludCBmaXJzdF9pZHggPSBzdC1cXHUwMDNlZmlyc3RfaW5zbl9pZHg7XFxuIDgxMDpcXHRcXHRpbnQgbGFzdF9pZHggPSBzdGFydGluZ19zdGF0ZS1cXHUwMDNlaW5zbl9pZHg7XFxuIDgxMTpcXHRcXHRpbnQgc3Vic2VxX2lkeCA9IC0xO1xcbiA4MTI6XFx0XFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpmdW5jO1xcbiA4MTM6XFx0XFx0Ym9vbCB0bXAsIHNraXBfZmlyc3QgPSB0cnVlO1xcbiA4MTQ6XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcXG4gODE1OlxcdFxcdGludCBpLCBmciwgZXJyO1xcbiA4MTY6XFx0XFxuIDgxNzpcXHRcXHRpZiAoIWVudi1cXHUwMDNlYnBmX2NhcGFibGUpXFxuIDgxODpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODE5OlxcdFxcbiA4MjA6XFx0XFx0Y2hhbmdlZCA9IGNoYW5nZWQgPzogXFx1MDAyNnRtcDtcXG4gODIxOlxcdFxcdC8qIHNldCBmcmFtZSBudW1iZXIgZnJvbSB3aGljaCB3ZSBhcmUgc3RhcnRpbmcgdG8gYmFja3RyYWNrICovXFxuIDgyMjpcXHRcXHRidF9pbml0KGJ0LCBzdGFydGluZ19zdGF0ZS1cXHUwMDNlY3VyZnJhbWUpO1xcbiA4MjM6XFx0XFxuIDgyNDpcXHRcXHQvKiBEbyBzYW5pdHkgY2hlY2tzIGFnYWluc3QgY3VycmVudCBzdGF0ZSBvZiByZWdpc3RlciBhbmQvb3Igc3RhY2tcXG4gODI1OlxcdFxcdCAqIHNsb3QsIGJ1dCBkb24ndCBzZXQgcHJlY2lzZSBmbGFnIGluIGN1cnJlbnQgc3RhdGUsIGFzIHByZWNpc2lvblxcbiA4MjY6XFx0XFx0ICogdHJhY2tpbmcgaW4gdGhlIGN1cnJlbnQgc3RhdGUgaXMgdW5uZWNlc3NhcnkuXFxuIDgyNzpcXHRcXHQgKi9cXG4gODI4OlxcdFxcdGZ1bmMgPSBzdC1cXHUwMDNlZnJhbWVbYnQtXFx1MDAzZWZyYW1lXTtcXG4gODI5OlxcdFxcdGlmIChyZWdubyBcXHUwMDNlPSAwKSB7XFxuIDgzMDpcXHRcXHRcXHRyZWcgPSBcXHUwMDI2ZnVuYy1cXHUwMDNlcmVnc1tyZWdub107XFxuIDgzMTpcXHRcXHRcXHRpZiAocmVnLVxcdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSkge1xcbiA4MzI6XFx0XFx0XFx0XFx0dmVyaWZpZXJfYnVnKGVudiwgXFxcImJhY2t0cmFja2luZyBtaXN1c2VcXFwiKTtcXG4gODMzOlxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA4MzQ6XFx0XFx0XFx0fVxcbiA4MzU6XFx0XFx0XFx0YnRfc2V0X3JlZyhidCwgcmVnbm8pO1xcbiA4MzY6XFx0XFx0fVxcbiA4Mzc6XFx0XFxuIDgzODpcXHRcXHRpZiAoYnRfZW1wdHkoYnQpKVxcbiA4Mzk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDg0MDpcXHRcXG4gODQxOlxcdFxcdGZvciAoOzspIHtcXG4gODQyOlxcdFxcdFxcdERFQ0xBUkVfQklUTUFQKG1hc2ssIDY0KTtcXG4gODQzOlxcdFxcdFxcdHUzMiBoaXN0b3J5ID0gc3QtXFx1MDAzZWptcF9oaXN0b3J5X2NudDtcXG4gODQ0OlxcdFxcdFxcdHN0cnVjdCBicGZfam1wX2hpc3RvcnlfZW50cnkgKmhpc3Q7XFxuIDg0NTpcXHRcXG4gODQ2OlxcdFxcdFxcdGlmIChlbnYtXFx1MDAzZWxvZy5sZXZlbCBcXHUwMDI2IEJQRl9MT0dfTEVWRUwyKSB7XFxuIDg0NzpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIm1hcmtfcHJlY2lzZTogZnJhbWUlZDogbGFzdF9pZHggJWQgZmlyc3RfaWR4ICVkIHN1YnNlcV9pZHggJWQgXFxcXG5cXFwiLFxcbiA4NDg6XFx0XFx0XFx0XFx0XFx0YnQtXFx1MDAzZWZyYW1lLCBsYXN0X2lkeCwgZmlyc3RfaWR4LCBzdWJzZXFfaWR4KTtcXG4gODQ5OlxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6MDIuMzQ1MzA1OTQzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NTI1MDc1MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIE1vZHVsZSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb2YgYGJwZl9jaGVja2AgYW5kIGBicGZfcHJvZ19sb2FkYCB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIG5hdmlnYXRlIHRoZSBzb3VyY2UuIEknbGwgc3RhcnQgYnkgZm9jdXNpbmcgb24gd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGxpdmUgd2l0aGluIHRoZSBrZXJuZWwncyBCUEYgaW5mcmFzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIEtjb25maWcgYW5kIE1ha2VmaWxlcy5cblxuSSdsbCBjaGVjayB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIGFuZCBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGFuZCB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgYXJlIHJlc3BvbnNpYmxlIGZvciBpbmNsdWRpbmcsIG9yIGV4Y2x1ZGluZywgdGhlIHJlbGV2YW50IGNvZGUuIEFybWVkIHdpdGggdGhpcyBpbmZvcm1hdGlvbiwgSSBjYW4gYmV0dGVyIHJlYXNvbiBhYm91dCB0aGUgdmFyaW91cyBjb25maWd1cmF0aW9uIGZsYWdzIHRoYXQgYWZmZWN0IGhvdyB0aGUgQlBGIHN1YnN5c3RlbSBpcyBidWlsdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE2NSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6MDQuODk3ODE2MzY5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDA3MjQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiYWNrdHJhY2tcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTEzPW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2xvY2FsX3N0b3JhZ2UubyBicGZfdGFza19zdG9yYWdlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZml4dXBzLm8gY2ZnLm8gc3RhdGVzLm8gYmFja3RyYWNrLm8gY2hlY2tfYnRmLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE1LW9iai0ke0NPTkZJR19CUEZfTFNNfVxcdCAgKz0gYnBmX2lub2RlX3N0b3JhZ2Uub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0NjowNC45NDc4OTUzMTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM3MTEwNTIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gQlBGIEJhY2t0cmFja2luZyBMb2dpYyoqXG5cbk9rYXksIHNvIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYCBpcyBjbGVhcmx5IHBhcnQgb2YgdGhlIEJQRiBzeXN0ZW0sIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29tcGlsYXRpb24gY29udGV4dC4gVGhlIGZhY3QgdGhhdCBpdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyByZWxhdGVkIHRvIHRoZSBCUEYgc3lzY2FsbCBpbnRlcmZhY2UuIEknbGwgbmVlZCB0byBjb25maXJtIHdoYXQgb3RoZXIgZGVwZW5kZW5jaWVzIG9yIGltcGxpY2F0aW9ucyB0aGlzIGhhcy4gTXkgbmV4dCBtb3ZlIGlzIHRvIGNoZWNrIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEJQRiwgaW5jbHVkaW5nIGBCUEZfU1lTQ0FMTGAsIGFyZSBkZWZpbmVkLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBgQlBGX1NZU0NBTExgIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhpcyBiYWNrdHJhY2tpbmcgY29kZSBmaXRzIGludG8gdGhlIGJpZ2dlciBCUEYgcGljdHVyZS4gVGhpcyB3aWxsIGxpa2VseSBzaG93IG1lIGFueSBvdGhlciBkZXBlbmRlbnQgZmVhdHVyZXMgb3IgcmVxdWlyZW1lbnRzIHRoYXQgSSBzaG91bGQgdGFrZSBub3RlIG9mLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTQ3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6MDcuMzE5MDA0MTA1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE2NzE3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ2OjA3LjM2NTE3NjEwMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTQxOTIwNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIHRoZSBwcm92aWRlZCB0ZXh0OlxuXG4qKkJQRiBDb25maWd1cmF0aW9uIFRob3VnaHRzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBJJ20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI1LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJQRiBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHRoZSBjb3JlIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB0aGF0IGRlZmluZSB3aGF0IEJQRiBmdW5jdGlvbmFsaXR5IGdldHMgYnVpbHQgaW50byB0aGUga2VybmVsLCB3aGF0IG1vZHVsZXMgYXJlIGF2YWlsYWJsZSwgYW5kIHBvdGVudGlhbGx5IGhvdyB0aGV5IGludGVyYWN0IHdpdGggZWFjaCBvdGhlci4gTGluZSAyNSBtaWdodCBiZSBpbnRyb2R1Y2luZyBhIG5ldyBmZWF0dXJlLCBlbmFibGluZyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBwZXJoYXBzIHNldHRpbmcgdXAgYSBkZXBlbmRlbmN5IHJlbGF0aW9uc2hpcC4gSSdtIGFudGljaXBhdGluZyBmaW5kaW5nIHNvbWUgZGV0YWlscyBvbiB3aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGFsc28gdXNpbmcgQlBGLCBvciB3aGF0IGFyZSBkZXBlbmRlbnQgb24gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0NjowOS41MDcwOTkwNzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdG1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMjg6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMjk6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzA6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzMTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDMyOlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDMzOlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzNDpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzU6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICAzNjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgMzc6XFx0XFx0ZGVmYXVsdCBuXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG4gIDQwOlxcdFxcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXFxuICA0MTpcXHRcXG4gIDQyOlxcdGNvbmZpZyBCUEZfSklUXFxuICA0MzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4gIDQ0OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuICA0NTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxcbiAgNDY6XFx0XFx0c2VsZWN0IEVYRUNNRU1cXG4gIDQ3OlxcdFxcdGhlbHBcXG4gIDQ4OlxcdFxcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxcbiAgNDk6XFx0XFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcXG4gIDUwOlxcdFxcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxcbiAgNTE6XFx0XFx0ICBwcm9ncmFtcy5cXG4gIDUyOlxcdFxcbiAgNTM6XFx0XFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcXG4gIDU0OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXFxuICA1NTpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcXG4gIDU2OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfa2FsbHN5bXMgKG9wdGlvbmFsKVxcbiAgNTc6XFx0XFxuICA1ODpcXHRjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG4gIDU5OlxcdFxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbiAgNjA6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBIQVZFX0VCUEZfSklUIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVRcXG4gIDYxOlxcdFxcdGhlbHBcXG4gIDYyOlxcdFxcdCAgRW5hYmxlcyBCUEYgSklUIGFuZCByZW1vdmVzIEJQRiBpbnRlcnByZXRlciB0byBhdm9pZCBzcGVjdWxhdGl2ZVxcbiAgNjM6XFx0XFx0ICBleGVjdXRpb24gb2YgQlBGIGluc3RydWN0aW9ucyBieSB0aGUgaW50ZXJwcmV0ZXIuXFxuICA2NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6MDkuNTA3MTYwODA4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyNzU4NDI2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIEJhY2t0cmFja2luZyBhbmQgVmVyaWZpZXIgSW1wcm92ZW1lbnQgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWcgb3B0aW9uIGlzIHJlbGV2YW50IGhlcmUuIExldCdzIGRpZyBpbnRvIHRoaXMgcGF0Y2guIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGlzIGNoYW5nZSBpbiBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AgaXMgYWRkcmVzc2luZyBhbiBpc3N1ZSBpbiB0aGUgQlBGIHZlcmlmaWVyJ3Mgc2NhbGFyIHByZWNpc2lvbiBiYWNrdHJhY2tpbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBCUEZfTERgIGluc3RydWN0aW9ucywgYW5kIHBhcnRpY3VsYXJseSB3aGVuIHRob3NlIGFyZSB1c2VkIHdpdGggYEJQRl9BQlNgIG9yIGBCUEZfSU5EYCB3aXRoaW4gc3VicHJvZ3JhbXMuXG5cblByZXZpb3VzbHksIHRoZSBjb2RlIHdhcyBoYW5kbGluZyB0aGUgYEJQRl9MRGAgaW5zdHJ1Y3Rpb25zLCBhbmQgZm9yIHRoZSBgbGRfaW1tNjRgIGNhc2UsIG5vIGZ1cnRoZXIgcHJlY2lzaW9uIHRyYWNraW5nIHdhcyBuZWVkZWQuIEhvd2V2ZXIsIHdoZW4gd2Ugd2VyZSBkZWFsaW5nIHdpdGggYEJQRl9JTkRgIG9yIGBCUEZfQUJTYCwgdGhlcmUgd2FzIGEgYC1FTk9UU1VQUGAgZXJyb3IgdGhhdCB3YXMgcmV0dXJuZWQuIE5vdywgdGhlcmUgYXJlIGNoYW5nZXMgdG8gaG93IHRoZXNlIGFyZSBoYW5kbGVkLiBgQlBGX0lNTWAgY2FzZXMgYXJlIG5vdyBoYW5kbGVkIGJ5IGNsZWFyaW5nIHRoZSByZWdpc3Rlci4gQ3J1Y2lhbGx5LCB0aGUgcGF0Y2ggbm93IG1vZGVscyBgQlBGX3tJTkQsIEFCU31gIGFzIHR3byBicmFuY2hlczogYSBmYWxsdGhyb3VnaCBicmFuY2ggYW5kIGFuIGltcGxpY2l0IHN1YnByb2dyYW0gZXhpdC4gV2hlbiB0aGUgaW1wbGljaXQgc3VicHJvZ3JhbSBleGl0IGJyYW5jaCBpcyBiYWNrdHJhY2tlZCwgdGhlIGN1cnJlbnQgZnJhbWUgbmVlZHMgdG8gYmUgc3dpdGNoZWQuXG5cbkVmZmVjdGl2ZWx5LCB0aGlzIHBhdGNoIHNlZW1zIHRvIGZpeCBhIGJ1ZyB3aGVyZSB0aGUgdmVyaWZpZXIgd2Fzbid0IHByb3Blcmx5IGJhY2t0cmFja2luZyB3aGVuIGEgc3VicHJvZ3JhbSBleGl0ZWQgZWFybHkgZHVlIHRvIGBCUEZfTEQgfCBCUEZfQUJTYCwgbGVhZGluZyB0byBhIHNlZ21lbnRhdGlvbiBmYXVsdC4gVGhpcyBtYWtlcyB0b3RhbCBzZW5zZTsgSSBjYW4gc2VlIGhvdyB0aGlzIHdvdWxkIGNhdXNlIHByb2JsZW1zLlxuXG5HaXZlbiB0aGlzIGNvbnRleHQsIGFuZCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSB2ZXJpZmllcidzIHJvbGUgYXMgYSBjcml0aWNhbCBzZWN1cml0eSBib3VuZGFyeSwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGJlIGZ1enppbmcuIFRoZSBCUEYgdmVyaWZpZXIgaXMgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHRocm91Z2ggdGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgY2FuIGJlIGxldmVyYWdlZCBieSBib3RoIHVucHJpdmlsZWdlZCB1c2VycyBhbmQgdGhvc2Ugd2l0aCBjYXBhYmlsaXRpZXMgbGlrZSBgQ0FQX0JQRmAgb3IgYENBUF9TWVNfQURNSU5gLiBJIHNob3VsZCBhYnNvbHV0ZWx5IHByaW9yaXRpemUgZnV6emluZyB0aGUgQlBGIHZlcmlmaWNhdGlvbiBwcm9jZXNzLCBwZXJoYXBzIHdpdGggc29tZXRoaW5nIGxpa2UgU3l6a2FsbGVyLlxuXG5Ob3csIGxldCdzIGZpZ3VyZSBvdXQgd2hhdCB0aGUgYmVzdCBmb2N1cyBzeW1ib2xzIGFyZSBmb3IgZnV6emluZy4gSSBuZWVkIHRvIGNoZWNrIHRoZSBleHBvcnRlZCBhbmQgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzIGluIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYCBhbmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEknbGwgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciBmdW5jdGlvbnMgd2l0aGluIHRob3NlIHR3byBmaWxlcyBzcGVjaWZpY2FsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzEzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6MTQuNzgzMDA1NTY3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTU3Nzk5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGJwZl9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDgzOCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTMyNT1zdGF0aWMgdm9pZCAqcGVyY3B1X2FycmF5X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1MzIgY3B1KVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTMzOC1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MzM5OmludCBicGZfcGVyY3B1X2FycmF5X2NvcHkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncylcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMzQwLXtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0zNzMtLyogQ2FsbGVkIGZyb20gc3lzY2FsbCAqL1xcbmtlcm5lbC9icGYvYXJyYXltYXAuYzozNzQ6aW50IGJwZl9hcnJheV9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMzc1LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz0zOTI9c3RhdGljIGxvbmcgYXJyYXlfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtNDMwLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo0MzE6aW50IGJwZl9wZXJjcHVfYXJyYXlfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTQzMi1cXHRcXHRcXHQgICAgdTY0IG1hcF9mbGFncylcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz05MzI9c3RhdGljIHZvaWQgKmZkX2FycmF5X21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtOTM3LS8qIG9ubHkgY2FsbGVkIGZyb20gc3lzY2FsbCAqL1xcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo5Mzg6aW50IGJwZl9mZF9hcnJheV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1MzIgKnZhbHVlKVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy05Mzkte1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTk1Ny0vKiBvbmx5IGNhbGxlZCBmcm9tIHN5c2NhbGwgKi9cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6OTU4OmludCBicGZfZmRfYXJyYXlfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtOTU5LVxcdFxcdFxcdFxcdCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYy0xMC0vKiBmb3IgYW55IGJyYW5jaCwgY2FsbCwgZXhpdCByZWNvcmQgdGhlIGhpc3Rvcnkgb2Ygam1wcyBpbiB0aGUgZ2l2ZW4gc3RhdGUgKi9cXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jOjExOmludCBicGZfcHVzaF9qbXBfaGlzdG9yeShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIsXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYy0xMi1cXHRcXHRcXHQgaW50IGluc25fZmxhZ3MsIGludCBzcGksIGludCBmcmFtZSwgdTY0IGxpbmtlZF9yZWdzKVxcbi0tXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYz02Njg9dm9pZCBicGZfbWFya19hbGxfc2NhbGFyc19wcmVjaXNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTgwMS0gKi9cXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jOjgwMjppbnQgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYy04MDMtXFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0YXJ0aW5nX3N0YXRlLFxcbi0tXFxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jPTE2Mj1zdGF0aWMgaW5saW5lIGJvb2wgdmFsaWRfb2Zmc2V0cyhjb25zdCBzdHJ1Y3QgYnBmX2luc25fYXJyYXkgKmluc25fYXJyYXksXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmMtMTgyLVxcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYzoxODM6aW50IGJwZl9pbnNuX2FycmF5X2luaXQoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy0xODQte1xcbi0tXFxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jLTIxMS1cXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmM6MjEyOmludCBicGZfaW5zbl9hcnJheV9yZWFkeShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy0yMTMte1xcbi0tXFxua2VybmVsL2JwZi9icGZfaXRlci5jPTI4Mz1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJwZl9pdGVyX2ZvcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtMjkzLSAqL1xcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzoyOTQ6aW50IGJwZl9pdGVyX3JlZ190YXJnZXQoY29uc3Qgc3RydWN0IGJwZl9pdGVyX3JlZyAqcmVnX2luZm8pXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTI5NS17XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9MzMxPXN0YXRpYyB2b2lkIGNhY2hlX2J0Zl9pZChzdHJ1Y3QgYnBmX2l0ZXJfdGFyZ2V0X2luZm8gKnRpbmZvLFxcbi0tXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTMzNi1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6MzM3OmludCBicGZfaXRlcl9wcm9nX3N1cHBvcnRlZChzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTMzOC17XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9NDk5PWJvb2wgYnBmX2xpbmtfaXNfaXRlcihzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNTAzLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo1MDQ6aW50IGJwZl9pdGVyX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNTA1LVxcdFxcdFxcdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9NTg5PXN0YXRpYyBpbnQgcHJlcGFyZV9zZXFfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJwZl9pdGVyX2xpbmsgKmxpbmspXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNjMzLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo2MzQ6aW50IGJwZl9pdGVyX25ld19mZChzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTYzNS17XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9NjU3PXN0cnVjdCBicGZfcHJvZyAqYnBmX2l0ZXJfZ2V0X2luZm8oc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsIGJvb2wgaW5fc3RvcClcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy02NzktXFxua2VybmVsL2JwZi9icGZfaXRlci5jOjY4MDppbnQgYnBmX2l0ZXJfcnVuX3Byb2coc3RydWN0IGJwZl9wcm9nICpwcm9nLCB2b2lkICpjdHgpXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTY4MS17XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM9MjY1PXN0YXRpYyB2b2lkIGJwZl9zZWxlbV91bmxpbmtfbWFwX25vbG9jayhzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZWxlbSAqc2VsZW0pXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtMjY5LVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzoyNzA6aW50IGJwZl9zZWxlbV9saW5rX21hcChzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwICpzbWFwLFxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0yNzEtXFx0XFx0ICAgICAgIHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZSAqbG9jYWxfc3RvcmFnZSxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYz0yOTA9c3RhdGljIHZvaWQgYnBmX3NlbGVtX2xpbmtfbWFwX25vbG9jayhzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwX2J1Y2tldCAqYixcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0yOTktICovXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jOjMwMDppbnQgYnBmX3NlbGVtX3VubGluayhzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZWxlbSAqc2VsZW0pXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTMwMS17XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM9NDYyPXN0YXRpYyBpbnQgY2hlY2tfZmxhZ3MoY29uc3Qgc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2RhdGEgKm9sZF9zZGF0YSxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy00NzUtXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jOjQ3NjppbnQgYnBmX2xvY2FsX3N0b3JhZ2VfYWxsb2Modm9pZCAqb3duZXIsXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTQ3Ny1cXHRcXHRcXHQgICAgc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX21hcCAqc21hcCxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYz02OTQ9c3RhdGljIHZvaWQgYnBmX2xvY2FsX3N0b3JhZ2VfY2FjaGVfaWR4X2ZyZWUoc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2NhY2hlICpjYWNoZSxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy03MDEtXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jOjcwMjppbnQgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy03MDMte1xcbi0tXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTcxNy1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6NzE4OmludCBicGZfbG9jYWxfc3RvcmFnZV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTcxOS1cXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYz02NjY9c3RhdGljIHZvaWQgYnBmX2xydV9saXN0X2luaXQoc3RydWN0IGJwZl9scnVfbGlzdCAqbClcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNjgwLVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6NjgxOmludCBicGZfbHJ1X2luaXQoc3RydWN0IGJwZl9scnUgKmxydSwgYm9vbCBwZXJjcHUsIHUzMiBoYXNoX29mZnNldCxcXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTY4Mi1cXHRcXHQgZGVsX2Zyb21faHRhYl9mdW5jIGRlbF9mcm9tX2h0YWIsIHZvaWQgKmRlbF9hcmcpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5oPTc5PXN0YXRpYyBpbmxpbmUgdm9pZCBicGZfbHJ1X25vZGVfc2V0X3JlZihzdHJ1Y3QgYnBmX2xydV9ub2RlICpub2RlKVxcbi0tXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuaC04NC1cXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5oOjg1OmludCBicGZfbHJ1X2luaXQoc3RydWN0IGJwZl9scnUgKmxydSwgYm9vbCBwZXJjcHUsIHUzMiBoYXNoX29mZnNldCxcXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5oLTg2LVxcdFxcdCBkZWxfZnJvbV9odGFiX2Z1bmMgZGVsX2Zyb21faHRhYiwgdm9pZCAqZGVsZXRlX2FyZyk7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYz05ND12b2lkIGJwZl9sc21fZmluZF9jZ3JvdXBfc2hpbShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYy0xMTgtXFxua2VybmVsL2JwZi9icGZfbHNtLmM6MTE5OmludCBicGZfbHNtX3ZlcmlmeV9wcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICp2bG9nLFxcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTEyMC1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYz00NDM9Ym9vbCBicGZfbHNtX2hvb2tfcmV0dXJuc19lcnJubyh1MzIgYnRmX2lkKVxcbi0tXFxua2VybmVsL2JwZi9icGZfbHNtLmMtNDUxLVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jOjQ1MjppbnQgYnBmX2xzbV9nZXRfcmV0dmFsX3JhbmdlKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00NTMtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3JldHZhbF9yYW5nZSAqcmV0dmFsX3JhbmdlKVxcbi0tXFxua2VybmVsL2JwZi9icGZfbHNtX3Byb3RvLmMtMTQtICovXFxua2VybmVsL2JwZi9icGZfbHNtX3Byb3RvLmM6MTU6aW50IGJwZl9sc21fbW1hcF9maWxlKHN0cnVjdCBmaWxlICpmaWxlX19udWxsYWJsZSwgdW5zaWduZWQgbG9uZyByZXFwcm90LFxcbmtlcm5lbC9icGYvYnBmX2xzbV9wcm90by5jLTE2LVxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0zMzc9c3RhdGljIGJvb2wgaXNfbW9kdWxlX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBpZClcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zNTAtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjM1MTppbnQgYnBmX3N0cnVjdF9vcHNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzLCB1MzIgbW9mZilcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzUyLXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zNTctXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjM1ODppbnQgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0KHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYyxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzU5LVxcdFxcdFxcdCAgICAgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTUxMT1zdGF0aWMgaW50IGJwZl9zdHJ1Y3Rfb3BzX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTUyMC1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NTIxOmludCBicGZfc3RydWN0X29wc19tYXBfc3lzX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTIyLVxcdFxcdFxcdFxcdCAgICAgICB2b2lkICp2YWx1ZSlcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz02MzI9Y29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfc3RydWN0X29wc19saW5rX2xvcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjM2LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2Mzc6aW50IGJwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTYzOC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MTI0Nj1FWFBPUlRfU1lNQk9MX0dQTChicGZfc3RydWN0X29wc19pZCk7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI2MC0gKi9cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI2MTppbnQgYnBmX3N0cnVjdF9vcHNfZm9yX2VhY2hfcHJvZyhjb25zdCB2b2lkICprZGF0YSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI2Mi1cXHRcXHRcXHRcXHQgaW50ICgqY2IpKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdm9pZCAqZGF0YSksXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MTQyOD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfc3RydWN0X29wc19tYXBfbG9wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDM2LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDM3OmludCBicGZfc3RydWN0X29wc19saW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQzOC17XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQ5MS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQ5MjppbnQgYnBmX3Byb2dfYXNzb2Nfc3RydWN0X29wcyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfbWFwICptYXApXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0OTMte1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz05MzY5PUVYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyk7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTkzOTEtICovXFxua2VybmVsL2JwZi9idGYuYzo5MzkyOmludCBicGZfY29yZV90eXBlc19hcmVfY29tcGF0KGNvbnN0IHN0cnVjdCBidGYgKmxvY2FsX2J0ZiwgX191MzIgbG9jYWxfaWQsXFxua2VybmVsL2JwZi9idGYuYy05MzkzLVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBidGYgKnRhcmdfYnRmLCBfX3UzMiB0YXJnX2lkKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy05NDAwLVxcbmtlcm5lbC9icGYvYnRmLmM6OTQwMTppbnQgYnBmX2NvcmVfdHlwZXNfbWF0Y2goY29uc3Qgc3RydWN0IGJ0ZiAqbG9jYWxfYnRmLCB1MzIgbG9jYWxfaWQsXFxua2VybmVsL2JwZi9idGYuYy05NDAyLVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYnRmICp0YXJnX2J0ZiwgdTMyIHRhcmdfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTk2MjE9YnBmX2NvcmVfZmluZF9jYW5kcyhzdHJ1Y3QgYnBmX2NvcmVfY3R4ICpjdHgsIHUzMiBsb2NhbF90eXBlX2lkKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy05NzA3LVxcbmtlcm5lbC9icGYvYnRmLmM6OTcwODppbnQgYnBmX2NvcmVfYXBwbHkoc3RydWN0IGJwZl9jb3JlX2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3QgYnBmX2NvcmVfcmVsbyAqcmVsbyxcXG5rZXJuZWwvYnBmL2J0Zi5jLTk3MDktXFx0XFx0ICAgaW50IHJlbG9faWR4LCB2b2lkICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi9jZmcuYz0yMjY9c3RhdGljIGludCBzb3J0X2luc25fYXJyYXlfdW5pcSh1MzIgKml0ZW1zLCBpbnQgY250KVxcbi0tXFxua2VybmVsL2JwZi9jZmcuYy0yNDItICovXFxua2VybmVsL2JwZi9jZmcuYzoyNDM6aW50IGJwZl9jb3B5X2luc25fYXJyYXlfdW5pcShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIgc3RhcnQsIHUzMiBlbmQsIHUzMiAqb2ZmKVxcbmtlcm5lbC9icGYvY2ZnLmMtMjQ0LXtcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmM9NDUxPXN0YXRpYyBpbnQgdmlzaXRfaW5zbihpbnQgdCwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtNTg2LSAqL1xcbmtlcm5lbC9icGYvY2ZnLmM6NTg3OmludCBicGZfY2hlY2tfY2ZnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9jZmcuYy01ODgte1xcbi0tXFxua2VybmVsL2JwZi9jZmcuYy02ODgtICovXFxua2VybmVsL2JwZi9jZmcuYzo2ODk6aW50IGJwZl9jb21wdXRlX3Bvc3RvcmRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvY2ZnLmMtNjkwLXtcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtNzQxLSAqL1xcbmtlcm5lbC9icGYvY2ZnLmM6NzQyOmludCBicGZfY29tcHV0ZV9zY2Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2NmZy5jLTc0My17XFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jPTM0MT1zdGF0aWMgaW50IGNoZWNrX2NvcmVfcmVsbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYy00MDktXFxua2VybmVsL2JwZi9jaGVja19idGYuYzo0MTA6aW50IGJwZl9wcmVwYXJlX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9jaGVja19idGYuYy00MTEtXFx0XFx0XFx0IGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYy00MzctXFxua2VybmVsL2JwZi9jaGVja19idGYuYzo0Mzg6aW50IGJwZl9jaGVja19idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNDM5LVxcdFxcdCAgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvY29uc3RfZm9sZC5jPTIwOT1zdGF0aWMgYm9vbCBjb25zdF9yZWdfam9pbihzdHJ1Y3QgY29uc3RfYXJnX2luZm8gKmNpX3RhcmdldCxcXG4tLVxcbmtlcm5lbC9icGYvY29uc3RfZm9sZC5jLTIzMS1cXG5rZXJuZWwvYnBmL2NvbnN0X2ZvbGQuYzoyMzI6aW50IGJwZl9jb21wdXRlX2NvbnN0X3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2NvbnN0X2ZvbGQuYy0yMzMte1xcbi0tXFxua2VybmVsL2JwZi9jb25zdF9mb2xkLmM9MzE1PXN0YXRpYyBpbnQgZXZhbF9jb25zdF9icmFuY2godTggb3Bjb2RlLCB1NjQgZHN0X3ZhbCwgdTY0IHNyY192YWwpXFxuLS1cXG5rZXJuZWwvYnBmL2NvbnN0X2ZvbGQuYy0zMzgtICovXFxua2VybmVsL2JwZi9jb25zdF9mb2xkLmM6MzM5OmludCBicGZfcHJ1bmVfZGVhZF9icmFuY2hlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvY29uc3RfZm9sZC5jLTM0MC17XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0xNzc9RVhQT1JUX1NZTUJPTF9HUEwoYnBmX3Byb2dfYWxsb2MpO1xcbmtlcm5lbC9icGYvY29yZS5jLTE3OC1cXG5rZXJuZWwvYnBmL2NvcmUuYzoxNzk6aW50IGJwZl9wcm9nX2FsbG9jX2ppdGVkX2xpbmZvKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5rZXJuZWwvYnBmL2NvcmUuYy0xODAte1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9Mjg4PXZvaWQgX19icGZfcHJvZ19mcmVlKHN0cnVjdCBicGZfcHJvZyAqZnApXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDEtXFxua2VybmVsL2JwZi9jb3JlLmM6MzAyOmludCBicGZfcHJvZ19jYWxjX3RhZyhzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxcbmtlcm5lbC9icGYvY29yZS5jLTMwMy17XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz00NTY9c3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9zaW5nbGUoc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtNTE2LVxcbmtlcm5lbC9icGYvY29yZS5jOjUxNzppbnQgYnBmX3JlbW92ZV9pbnNucyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsIHUzMiBjbnQpXFxua2VybmVsL2JwZi9jb3JlLmMtNTE4LXtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTU0MT12b2lkIGJwZl9wcm9nX2thbGxzeW1zX2RlbF9hbGwoc3RydWN0IGJwZl9wcm9nICpmcClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTU0OC0vKiBBbGwgQlBGIEpJVCBzeXNjdGwga25vYnMgaGVyZS4gKi9cXG5rZXJuZWwvYnBmL2NvcmUuYzo1NDk6aW50IGJwZl9qaXRfZW5hYmxlICAgX19yZWFkX21vc3RseSA9IElTX0JVSUxUSU4oQ09ORklHX0JQRl9KSVRfREVGQVVMVF9PTik7XFxua2VybmVsL2JwZi9jb3JlLmM6NTUwOmludCBicGZfaml0X2thbGxzeW1zIF9fcmVhZF9tb3N0bHkgPSBJU19CVUlMVElOKENPTkZJR19CUEZfSklUX0RFRkFVTFRfT04pO1xcbmtlcm5lbC9icGYvY29yZS5jOjU1MTppbnQgYnBmX2ppdF9oYXJkZW4gICBfX3JlYWRfbW9zdGx5O1xcbmtlcm5lbC9icGYvY29yZS5jLTU1Mi1sb25nIGJwZl9qaXRfbGltaXQgICBfX3JlYWRfbW9zdGx5O1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9NzEzPXN0YXRpYyBzdHJ1Y3QgYnBmX2tzeW0gKmJwZl9rc3ltX2ZpbmQodW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtNzIwLVxcbmtlcm5lbC9icGYvY29yZS5jOjcyMTppbnQgYnBmX2FkZHJlc3NfbG9va3VwKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyAqc2l6ZSxcXG5rZXJuZWwvYnBmL2NvcmUuYy03MjItXFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKm9mZiwgY2hhciAqc3ltKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9Nzg0PWNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKnNlYXJjaF9icGZfZXh0YWJsZXModW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtODAxLVxcbmtlcm5lbC9icGYvY29yZS5jOjgwMjppbnQgYnBmX2dldF9rYWxsc3ltKHVuc2lnbmVkIGludCBzeW1udW0sIHVuc2lnbmVkIGxvbmcgKnZhbHVlLCBjaGFyICp0eXBlLFxcbmtlcm5lbC9icGYvY29yZS5jLTgwMy1cXHRcXHQgICAgY2hhciAqc3ltKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtODI5LVxcbmtlcm5lbC9icGYvY29yZS5jOjgzMDppbnQgYnBmX2ppdF9hZGRfcG9rZV9kZXNjcmlwdG9yKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG5rZXJuZWwvYnBmL2NvcmUuYy04MzEtXFx0XFx0XFx0XFx0c3RydWN0IGJwZl9qaXRfcG9rZV9kZXNjcmlwdG9yICpwb2tlKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MTEwNz1wdXJlX2luaXRjYWxsKGJwZl9qaXRfY2hhcmdlX2luaXQpO1xcbmtlcm5lbC9icGYvY29yZS5jLTExMDgtXFxua2VybmVsL2JwZi9jb3JlLmM6MTEwOTppbnQgYnBmX2ppdF9jaGFyZ2VfbW9kbWVtKHUzMiBzaXplKVxcbmtlcm5lbC9icGYvY29yZS5jLTExMTAte1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MTE5Nz1icGZfaml0X2JpbmFyeV9wYWNrX2FsbG9jKHVuc2lnbmVkIGludCBwcm9nbGVuLCB1OCAqKmltYWdlX3B0cixcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTEyNDItLyogQ29weSBKSVRlZCB0ZXh0IGZyb20gcndfaGVhZGVyIHRvIGl0cyBmaW5hbCBsb2NhdGlvbiwgdGhlIHJvX2hlYWRlci4gKi9cXG5rZXJuZWwvYnBmL2NvcmUuYzoxMjQzOmludCBicGZfaml0X2JpbmFyeV9wYWNrX2ZpbmFsaXplKHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqcm9faGVhZGVyLFxcbmtlcm5lbC9icGYvY29yZS5jLTEyNDQtXFx0XFx0XFx0XFx0IHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqcndfaGVhZGVyKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MTMwMz12b2lkIF9fd2VhayBicGZfaml0X2ZyZWUoc3RydWN0IGJwZl9wcm9nICpmcClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTEzMTQtXFxua2VybmVsL2JwZi9jb3JlLmM6MTMxNTppbnQgYnBmX2ppdF9nZXRfZnVuY19hZGRyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG5rZXJuZWwvYnBmL2NvcmUuYy0xMzE2LVxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBib29sIGV4dHJhX3Bhc3MsXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNDczPUVWQUw0KFBST0dfTkFNRV9MSVNULCA0MTYsIDQ0OCwgNDgwLCA1MTIpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDc3LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYzoyNDc4OmludCBicGZfcGF0Y2hfY2FsbF9hcmdzKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgdTMyIHN0YWNrX2RlcHRoKVxcbmtlcm5lbC9icGYvY29yZS5jLTI0Nzkte1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9Mjc4NT12b2lkIGJwZl9wcm9nX2FycmF5X2ZyZWVfc2xlZXBhYmxlKHN0cnVjdCBicGZfcHJvZ19hcnJheSAqcHJvZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNzkxLVxcbmtlcm5lbC9icGYvY29yZS5jOjI3OTI6aW50IGJwZl9wcm9nX2FycmF5X2xlbmd0aChzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKmFycmF5KVxcbmtlcm5lbC9icGYvY29yZS5jLTI3OTMte1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MjgxMz1zdGF0aWMgYm9vbCBicGZfcHJvZ19hcnJheV9jb3B5X2NvcmUoc3RydWN0IGJwZl9wcm9nX2FycmF5ICphcnJheSxcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTI4MzItXFxua2VybmVsL2JwZi9jb3JlLmM6MjgzMzppbnQgYnBmX3Byb2dfYXJyYXlfY29weV90b191c2VyKHN0cnVjdCBicGZfcHJvZ19hcnJheSAqYXJyYXksXFxua2VybmVsL2JwZi9jb3JlLmMtMjgzNC1cXHRcXHRcXHRcXHRfX3UzMiBfX3VzZXIgKnByb2dfaWRzLCB1MzIgY250KVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9Mjg1OT12b2lkIGJwZl9wcm9nX2FycmF5X2RlbGV0ZV9zYWZlKHN0cnVjdCBicGZfcHJvZ19hcnJheSAqYXJyYXksXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yODg1LSAqL1xcbmtlcm5lbC9icGYvY29yZS5jOjI4ODY6aW50IGJwZl9wcm9nX2FycmF5X2RlbGV0ZV9zYWZlX2F0KHN0cnVjdCBicGZfcHJvZ19hcnJheSAqYXJyYXksIGludCBpbmRleClcXG5rZXJuZWwvYnBmL2NvcmUuYy0yODg3LXtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTI5MDUtICovXFxua2VybmVsL2JwZi9jb3JlLmM6MjkwNjppbnQgYnBmX3Byb2dfYXJyYXlfdXBkYXRlX2F0KHN0cnVjdCBicGZfcHJvZ19hcnJheSAqYXJyYXksIGludCBpbmRleCxcXG5rZXJuZWwvYnBmL2NvcmUuYy0yOTA3LVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjkyNS1cXG5rZXJuZWwvYnBmL2NvcmUuYzoyOTI2OmludCBicGZfcHJvZ19hcnJheV9jb3B5KHN0cnVjdCBicGZfcHJvZ19hcnJheSAqb2xkX2FycmF5LFxcbmtlcm5lbC9icGYvY29yZS5jLTI5MjctXFx0XFx0XFx0c3RydWN0IGJwZl9wcm9nICpleGNsdWRlX3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yOTk2LVxcbmtlcm5lbC9icGYvY29yZS5jOjI5OTc6aW50IGJwZl9wcm9nX2FycmF5X2NvcHlfaW5mbyhzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKmFycmF5LFxcbmtlcm5lbC9icGYvY29yZS5jLTI5OTgtXFx0XFx0XFx0ICAgICB1MzIgKnByb2dfaWRzLCB1MzIgcmVxdWVzdF9jbnQsXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zNDc0PWNvbnN0IHN0cnVjdCBicGZfbGluZV9pbmZvICpicGZfZmluZF9saW5mbyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBpbnNuX29mZilcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTM1MTAtXFxua2VybmVsL2JwZi9jb3JlLmM6MzUxMTppbnQgYnBmX3Byb2dfZ2V0X2ZpbGVfbGluZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKipmaWxlcCxcXG5rZXJuZWwvYnBmL2NvcmUuYy0zNTEyLVxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKipsaW5lcCwgaW50ICpudW1wKVxcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYz01Mj1zdHJ1Y3QgYnBmX2NyeXB0b19jdHgge1xcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYy01OS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjYwOmludCBicGZfY3J5cHRvX3JlZ2lzdGVyX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZSlcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTYxLXtcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmM9ODU9RVhQT1JUX1NZTUJPTF9HUEwoYnBmX2NyeXB0b19yZWdpc3Rlcl90eXBlKTtcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTg2LVxcbmtlcm5lbC9icGYvY3J5cHRvLmM6ODc6aW50IGJwZl9jcnlwdG9fdW5yZWdpc3Rlcl90eXBlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUpXFxua2VybmVsL2JwZi9jcnlwdG8uYy04OC17XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9MjMwPXN0YXRpYyB2b2lkIGRpYWdfd3JpdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3QgY2hhciAqZm10LCAuLi4pIF9fcHJpbnRmKDIsIDMpO1xcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0yMzEtXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjIzMjppbnQgYnBmX2RpYWdfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0yMzMte1xcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oPTQ1PWJvb2wgYnBmX2RpYWdfZW5hYmxlZChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmg6NDY6aW50IGJwZl9kaWFnX2luaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oLTQ3LXZvaWQgYnBmX2RpYWdfaW5pdF9mcmFtZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9NjM9c3RhdGljIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xMDMtICovXFxua2VybmVsL2JwZi9maXh1cHMuYzoxMDQ6aW50IGJwZl9pbnNuX2RlZjMyKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTA1LXtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9NTY0PXZvaWQgYnBmX29wdF9oYXJkX3dpcmVfZGVhZF9jb2RlX2JyYW5jaGVzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTU4OS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjU5MDppbnQgYnBmX29wdF9yZW1vdmVfZGVhZF9jb2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9maXh1cHMuYy01OTEte1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy02MTMtXFxua2VybmVsL2JwZi9maXh1cHMuYzo2MTQ6aW50IGJwZl9vcHRfcmVtb3ZlX25vcHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTYxNS17XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTYzOC1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjYzOTppbnQgYnBmX29wdF9zdWJyZWdfemV4dF9sbzMyX3JuZF9oaTMyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9maXh1cHMuYy02NDAtXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy03NDAtICovXFxua2VybmVsL2JwZi9maXh1cHMuYzo3NDE6aW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvZml4dXBzLmMtNzQyLXtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MTA2Nj1zdGF0aWMgaW50IGppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xMzMzLVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MTMzNDppbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTMzNS17XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE0MDQtXFxua2VybmVsL2JwZi9maXh1cHMuYzoxNDA1OmludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNDA2LXtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MTQ3OT1zdGF0aWMgaW50IGFkZF9oaWRkZW5fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCBpbnQgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNTA3LSAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTUwODppbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNTA5LXtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MjU3MD1zdGF0aWMgYm9vbCBpc19icGZfbG9vcF9jYWxsKHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjU4NS0gKi9cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjI1ODY6aW50IGJwZl9vcHRpbWl6ZV9icGZfbG9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjU4Ny17XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI2MzMtICovXFxua2VybmVsL2JwZi9maXh1cHMuYzoyNjM0OmludCBicGZfcmVtb3ZlX2Zhc3RjYWxsX3NwaWxsc19maWxscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjYzNS17XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNDU5PXN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9wZXJjcHVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHUzMiBjcHUpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDc0LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI0NzU6aW50IGJwZl9wZXJjcHVfaGFzaF9jb3B5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxhZ3MpXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjQ3Ni17XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTEyLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI1MTM6aW50IGJwZl9wZXJjcHVfaGFzaF91cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTE0LVxcdFxcdFxcdCAgIHU2NCBtYXBfZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNjEwPXN0YXRpYyB2b2lkIGZkX2h0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI2MzEtLyogb25seSBjYWxsZWQgZnJvbSBzeXNjYWxsICovXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjYzMjppbnQgYnBmX2ZkX2h0YWJfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdTMyICp2YWx1ZSlcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNjMzLXtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI2NTEtLyogT25seSBjYWxsZWQgZnJvbSBzeXNjYWxsICovXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjY1MjppbnQgYnBmX2ZkX2h0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNjUzLVxcdFxcdFxcdFxcdHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz03NzE9c3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgYnBmX2JwcmludGZfbmVzdF9sZXZlbCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNzcyLVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjc3MzppbnQgYnBmX3RyeV9nZXRfYnVmZmVycyhzdHJ1Y3QgYnBmX2JwcmludGZfYnVmZmVycyAqKmJ1ZnMpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNzc0LXtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTc5Nz12b2lkIGJwZl9icHJpbnRmX2NsZWFudXAoc3RydWN0IGJwZl9icHJpbnRmX2RhdGEgKmRhdGEpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy04MTctICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6ODE4OmludCBicGZfYnByaW50Zl9wcmVwYXJlKGNvbnN0IGNoYXIgKmZtdCwgdTMyIGZtdF9zaXplLCBjb25zdCB1NjQgKnJhd19hcmdzLFxcbmtlcm5lbC9icGYvaGVscGVycy5jLTgxOS1cXHRcXHRcXHR1MzIgbnVtX2FyZ3MsIHN0cnVjdCBicGZfYnByaW50Zl9kYXRhICpkYXRhKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9MTgxMD1zdGF0aWMgdm9pZCBicGZfZHlucHRyX3NldF9zaXplKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnB0ciwgdTY0IG5ld19zaXplKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTgyMi1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoxODIzOmludCBicGZfZHlucHRyX2NoZWNrX3NpemUodTY0IHNpemUpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTgyNC17XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00NzAzPV9fYnBmX2tmdW5jIGludCBicGZfZHlucHRyX2Zyb21fZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdTMyIGZsYWdzLCBzdHJ1Y3QgYnBmX2R5bnB0ciAqcHRyX191bmluaXQpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NzA3LVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ3MDg6aW50IGJwZl9keW5wdHJfZnJvbV9maWxlX3NsZWVwYWJsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdTMyIGZsYWdzLCBzdHJ1Y3QgYnBmX2R5bnB0ciAqcHRyX191bmluaXQpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDcwOS17XFxuLS1cXG5rZXJuZWwvYnBmL2lub2RlLmM9NDkxPXN0YXRpYyBpbnQgYnBmX29ial9kb19waW4oaW50IHBhdGhfZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSwgdm9pZCAqcmF3LFxcbi0tXFxua2VybmVsL2JwZi9pbm9kZS5jLTUzMi1cXG5rZXJuZWwvYnBmL2lub2RlLmM6NTMzOmludCBicGZfb2JqX3Bpbl91c2VyKHUzMiB1ZmQsIGludCBwYXRoX2ZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUpXFxua2VybmVsL2JwZi9pbm9kZS5jLTUzNC17XFxuLS1cXG5rZXJuZWwvYnBmL2lub2RlLmM9NTUwPXN0YXRpYyB2b2lkICpicGZfb2JqX2RvX2dldChpbnQgcGF0aF9mZCwgY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLFxcbi0tXFxua2VybmVsL2JwZi9pbm9kZS5jLTU4MS1cXG5rZXJuZWwvYnBmL2lub2RlLmM6NTgyOmludCBicGZfb2JqX2dldF91c2VyKGludCBwYXRoX2ZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsIGludCBmbGFncylcXG5rZXJuZWwvYnBmL2lub2RlLmMtNTgzLXtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0xMDE9c3RhdGljIHN0cnVjdCBmdW5jX2luc3RhbmNlICpsb29rdXBfaW5zdGFuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTktXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjEyMDppbnQgYnBmX3N0YWNrX2xpdmVuZXNzX2luaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTIxLXtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0xOTA9c3RhdGljIGludCBtYXJrX3N0YWNrX3dyaXRlKHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSwgdTMyIGZyYW1lLCB1MzIgaW5zbl9pZHgsIHNwaXNfdCBtYXNrKVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTIwMC1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MjAxOmludCBicGZfam1wX29mZnNldChzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTIwMi17XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MzMwPXN0YXRpYyBib29sIGlzX2xpdmVfYmVmb3JlKHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSwgdTMyIGluc25faWR4LCB1MzIgZnJhbWVubywgdTMyIGhhbGZfc3BpKVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTMzNy1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MzM4OmludCBicGZfbGl2ZV9zdGFja19xdWVyeV9pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0KVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0zMzkte1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jPTE4NDA9c3RhdGljIGludCBhbmFseXplX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xOTg0LVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxOTg1OmludCBicGZfY29tcHV0ZV9zdWJwcm9nX2FyZ19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTk4Ni17XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MjA2MT1zdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjIyMy0gKi9cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MjIyNDppbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjIyNS17XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYz0xNDQ9c3RhdGljIGxvbmcgY2dyb3VwX3N0b3JhZ2VfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTgxLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjE4MjppbnQgYnBmX3BlcmNwdV9jZ3JvdXBfc3RvcmFnZV9jb3B5KHN0cnVjdCBicGZfbWFwICpfbWFwLCB2b2lkICprZXksXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTgzLVxcdFxcdFxcdFxcdCAgIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMjE1LVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjIxNjppbnQgYnBmX3BlcmNwdV9jZ3JvdXBfc3RvcmFnZV91cGRhdGUoc3RydWN0IGJwZl9tYXAgKl9tYXAsIHZvaWQgKmtleSxcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yMTctXFx0XFx0XFx0XFx0ICAgICB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncylcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jPTQ2MT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgY2dyb3VwX3N0b3JhZ2VfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQ3My1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0NzQ6aW50IGJwZl9jZ3JvdXBfc3RvcmFnZV9hc3NpZ24oc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4LCBzdHJ1Y3QgYnBmX21hcCAqX21hcClcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00NzUte1xcbi0tXFxua2VybmVsL2JwZi9sb2cuYz0xNj1zdGF0aWMgYm9vbCBicGZfdmVyaWZpZXJfbG9nX2F0dHJfdmFsaWQodTMyIGxvZ19sZXZlbCwgY2hhciBfX3VzZXIgKmxvZ19idWYsIHUzMiBsb2dfc2l6ZSlcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6MTQuODM0NTkwMzEzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMDEwMDg0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvcmUgb2YgdGhpcyBCUEYgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIFRoZSBmaWxlcyB0byBzdGFydCB3aXRoIGFyZSBvYnZpb3VzbHkgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYC4gRnJvbSBtZW1vcnksIEkgcmVjYWxsIHNvbWUga2V5IGZ1bmN0aW9ucyBpbiBgYmFja3RyYWNrLmNgIHRoYXQgd2lsbCBiZSByZWxldmFudCB0byB0cmFja2luZyBhbmQgZW5zdXJpbmcgdGhlIHByZWNpc2lvbiBvZiB0aGUgYW5hbHlzaXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIG9mIGBicGZfbWFya19jaGFpbl9wcmVjaXNpb25gLCBgYnBmX21hcmtfYWxsX3NjYWxhcnNfcHJlY2lzZWAsIGFuZCBgYnBmX3B1c2hfam1wX2hpc3RvcnlgLiBUaGVzZSBsaWtlbHkgZGVhbCB3aXRoIG1haW50YWluaW5nIHRoZSBzdGF0ZSBhbmQgaGlzdG9yeSBvZiB0aGUganVtcCBpbnN0cnVjdGlvbnMsIGNydWNpYWwgZm9yIHByZWNpc2Ugc2NhbGFyIGFuYWx5c2lzLlxuXG5Ob3csIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgdmVyaWZpY2F0aW9uIGl0c2VsZiB3aWxsIGJlIGluIGB2ZXJpZmllci5jYC4gTGV0J3MgemVybyBpbiBvbiBgYnBmX2NoZWNrYC4gSSBzaG91bGQgY2hlY2sgdGhhdCBkZWZpbml0aW9uIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFuZCBzZWUgZXhhY3RseSB3aGF0J3MgaW52b2x2ZWQuIFRoYXQncyB0aGUgZ2F0ZWtlZXBlciwgc28gdGhhdCdzIHdoZXJlIHRoZSB2ZXJpZmljYXRpb24gbG9naWMgaXMgZ29pbmcgdG8ga2ljayBpbi4gTGV0J3Mgc2VlIGhvdyB0aGF0IG9yY2hlc3RyYXRlcyB0aGUgb3ZlcmFsbCBwcm9jZXNzLCB3aGF0IGl0IGNvbnNpZGVycywgd2hhdCBpdCB2ZXJpZmllcywgYW5kIGhvdyBpdCBjYWxscyBvbiB0aGUgb3RoZXIgc3VwcG9ydCBmdW5jdGlvbnMgdG8gdHJhY2sgdGhlIHByb2dyYW0gc3RhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzU3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ2OjE3LjgzNTYwMTg4NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAwMTUxMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGJwZl9jaGVja1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTIwODU5PXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTc1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDk3NjppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5NzctXFx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ2OjE3Ljg4NTYyMzE4MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzIzNDMwMjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqTmF2aWdhdGluZyB0aGUgQlBGIFZlcmlmaWVyKipcblxuT2theSwgc28gYGJwZl9jaGVja2AgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSB2ZXJpZmllciwgZ290IGl0LiBUaGF0J3MgdGhlIHN0YXJ0aW5nIGd1bi4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHByZWNpc2lvbiB0cmFja2luZyB3b3JrcywgYW5kIGl0IGxvb2tzIGxpa2UgYGJwZl9tYXJrX2NoYWluX3ByZWNpc2lvbmAgaW4gYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgIGlzIHRoZSBrZXkuIFRoYXQgZnVuY3Rpb24gc2VlbXMgdG8gYmUgdGhlIG9uZSB0aGF0IGFjdHVhbGx5IGNhbGxzIHRoZSB1cGRhdGVkIGBiYWNrdHJhY2tfaW5zbmAgbG9naWMgZGlyZWN0bHkuICBJIG5lZWQgdG8gZ28gbG9vayBhdCBob3cgYGJwZl9wcm9nX2xvYWRgIGlzIGNhbGxlZCwgc28gSSBuZWVkIHRvIGNoZWNrIGBzeXNjYWxsLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjkyMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ2OjIwLjYwOTA1NTkyM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyMDIzMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3Byb2dfbG9hZFxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9MjkxMj1CVEZfSURfTElTVF9HTE9CQUxfU0lOR0xFKGJwZl9tdWx0aV9mdW5jX2J0Zl9pZCwgZnVuYywgYnBmX211bHRpX2Z1bmMpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yOTE2LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjI5MTc6c3RhdGljIGludCBicGZfcHJvZ19sb2FkKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjkxOC17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MzAzPXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzNjYtXFx0XFx0XFx0XFx0XFx0c2l6ZV9jb21tb24pO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzNjc6XFx0XFx0ZXJyID0gZXJyID86IGJwZl9wcm9nX2xvYWQoXFx1MDAyNmF0dHIsIHVhdHRyLCBcXHUwMDI2YXR0cl9sb2cpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzNjgtXFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA5NzY9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEwMzItXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMDMzOlxcdHJldCA9IHNlY3VyaXR5X2JwZl9wcm9nX2xvYWQoZW52LVxcdTAwM2Vwcm9nLCBhdHRyLCBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNldG9rZW4sXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDM0LVxcdFxcdFxcdFxcdCAgICAgdWF0dHIuaXNfa2VybmVsKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6MjAuNjU3MjYzOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTA0NzQzNTg4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBtYWtlIHN1cmUgd2UgaGF2ZSBldmVyeXRoaW5nIHJpZ2h0IGZvciB0aGlzIGZ1enppbmcgc2V0dXAuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIEl0IHNlZW1zIGxpa2UgYEJQRl9TWVNDQUxMYCBpcyBzdGFuZGFyZCBmb3IgdGhpcyBjb250ZXh0LiBOb3csIEkgd2FudCB0byBjb25maXJtIHRoYXQgYGJwZl9jaGVja2AgaXMgYWN0dWFsbHkgaW52b2x2ZWQgZHVyaW5nIHRoZSBgYnBmX3Byb2dfbG9hZGAgcHJvY2Vzcy4gQWgsIHllcywgaXQgbG9va3MgbGlrZSBgYnBmX3Byb2dfbG9hZCgpYCBkb2VzIGluZGVlZCBjYWxsIGBicGZfY2hlY2soKWAuIEFuZCwgYXMgSSBzdXNwZWN0ZWQsIGBicGZfY2hlY2soKWAgaXMgcmVzcG9uc2libGUgZm9yIHZlcmlmaWNhdGlvbiwgd2hpY2ggdGhlbiBjYWxscyBgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKClgIHdpdGhpbiBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AuIFRoaXMgZnVuY3Rpb24gaXMga2V5IGJlY2F1c2UgaXQgcnVucyB0aGUgYmFja3RyYWNraW5nIGxvb3AsIGFuZCB0aGF0IGxvb3AsIGluIHR1cm4sIGNhbGxzIGBiYWNrdHJhY2tfaW5zbigpYC5cblxuQWxyaWdodCwgbGV0J3MgdmVyaWZ5IHRoYXQgdGhlIGluc3RydWN0aW9ucyBmcm9tIHRoZSBwcm9tcHQgYWxpZ25zOlxuLSAgIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIGdvb2QuXG4tICAgYEVuYWJsZUNvbmZpZ3NgIGluY2x1ZGVzIGBcIkJQRl9TWVNDQUxMXCJgLlxuLSAgIGBGb2N1c1N5bWJvbHNgIGxpc3RzIGBcImJwZl9tYXJrX2NoYWluX3ByZWNpc2lvblwiYCBhbmQgYFwiYnBmX2NoZWNrXCJgLlxuLSAgIFRoZSBpbnN0cnVjdGlvbiBpcyB0byBnaXZlIGEgY29uY2lzZSBleHBsYW5hdGlvbi5cblxuTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjay4gV2UgaGF2ZSB0byBlbnN1cmUgdGhhdCBgQlBGX1NZU0NBTExgIGlzIGFjdHVhbGx5IHJlcXVpcmVkLCBzbyBJJ2xsIHZlcmlmeSBpZiBgYmFja3RyYWNrLm9gIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzZXQuIExvb2tzIGxpa2UgdGhhdCdzIHRoZSBjYXNlLiBBbHNvLCBJIGhhdmUgdG8gYmUgc3VyZSB0aGF0IGBicGZfbWFya19jaGFpbl9wcmVjaXNpb25gIGFuZCBgYnBmX2NoZWNrYCBhcmUgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIExldCBtZSBjaGVjayB0aGUgc291cmNlIGNvZGU6XG5cbkluIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYCwgdGhlIGRlY2xhcmF0aW9uIGZvciBgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uYCBpcyBgaW50IGJwZl9tYXJrX2NoYWluX3ByZWNpc2lvbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdGFydGluZ19zdGF0ZSwgaW50IHJlZ25vLCBib29sICpjaGFuZ2VkKWAuIFNvLCBpdCdzIG5vdCBzdGF0aWMuXG5JbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgdGhlIGRlY2xhcmF0aW9uIGZvciBgYnBmX2NoZWNrYCBpcyBgaW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKWAsIGFsc28gbm9uLXN0YXRpYy5cblxuRmluYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHBhcmFtZXRlcnMgbWF0Y2g6IGBFbmFibGVDb25maWdzYCBpcyBhbiBhcnJheSBvZiBzdHJpbmdzIHdpdGhvdXQgdGhlIGBDT05GSUdfYCBwcmVmaXguIFdlIGhhdmUgYFtcIkJQRl9TWVNDQUxMXCJdYC4gYEZvY3VzU3ltYm9sc2AgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy4gV2UgaGF2ZSBgW1wiYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uXCIsIFwiYnBmX2NoZWNrXCJdYC4gYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYC4gQW5kIHRoZSBpbnN0cnVjdGlvbnMgcmVxdWlyZSBhIGNvbmNpc2UgZXhwbGFuYXRpb24sIHdoaWNoIEkgaGF2ZSBpbiBtaW5kLlxuXG5BbGwgY2hlY2tzIGFyZSBnb29kIHRvIGdvLCBhbmQgSSdtIHJlYWR5IHRvIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1NzAsIk91dHB1dFRva2VucyI6MTQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ2OjMxLjcwNDcwMjQ5OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NzMxODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9tYXJrX2NoYWluX3ByZWNpc2lvblwiLFxuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIHNjYWxhciBwcmVjaXNpb24gYmFja3RyYWNraW5nIGxvZ2ljIGluIGJhY2t0cmFja19pbnNuKCkgZm9yIEJQRl9MRCAoc3BlY2lmaWNhbGx5IEJQRl9BQlMvQlBGX0lORCBpbnN0cnVjdGlvbnMgd2l0aCBpbXBsaWNpdCBzdWJwcm9ncmFtIGV4aXQgYnJhbmNoZXMpIHRvIHByb3Blcmx5IGFkanVzdCB0aGUgYmFja3RyYWNrIGNhbGwgZnJhbWUgYW5kIHByZXZlbnQgdmVyaWZpZXIgY3Jhc2hlcy9zZWdmYXVsdHMuIFRoaXMgaXMgY29yZSB2ZXJpZmllciBsb2dpYyByZWFjaGFibGUgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCkgc3lzY2FsbCBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9tYXJrX2NoYWluX3ByZWNpc2lvblwiLFxuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIHNjYWxhciBwcmVjaXNpb24gYmFja3RyYWNraW5nIGxvZ2ljIGluIGJhY2t0cmFja19pbnNuKCkgZm9yIEJQRl9MRCAoc3BlY2lmaWNhbGx5IEJQRl9BQlMvQlBGX0lORCBpbnN0cnVjdGlvbnMgd2l0aCBpbXBsaWNpdCBzdWJwcm9ncmFtIGV4aXQgYnJhbmNoZXMpIHRvIHByb3Blcmx5IGFkanVzdCB0aGUgYmFja3RyYWNrIGNhbGwgZnJhbWUgYW5kIHByZXZlbnQgdmVyaWZpZXIgY3Jhc2hlcy9zZWdmYXVsdHMuIFRoaXMgaXMgY29yZSB2ZXJpZmllciBsb2dpYyByZWFjaGFibGUgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCkgc3lzY2FsbCBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6MzEuNzgyNDQ0NzgzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA2NjI4NTU5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ2OjMxLjc4MjkyNzc1M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0MDY1Nzk3OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgc2NhbGFyIHByZWNpc2lvbiBiYWNrdHJhY2tpbmcgbG9naWMgaW4gYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgIHRvIHByb3Blcmx5IHVwZGF0ZSB0aGUgc3VicHJvZ3JhbSBjYWxsIGZyYW1lIChgYnRfc3VicHJvZ19lbnRlcmApIHdoZW4gYmFja3RyYWNraW5nIHRoZSBpbXBsaWNpdCBlYXJseSBleGl0IHBhdGggb2YgYEJQRl9MRCB8IEJQRl9BQlNgIGFuZCBgQlBGX0xEIHwgQlBGX0lORGAgaW5zdHJ1Y3Rpb25zLiBcXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHZlcmlmaWVyIGJyYW5jaGVzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdGhzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gZnJhbWUgaW5kZXhpbmcgZXJyb3JzIG9yIHZlcmlmaWVyIHN0YXRlIGNvcnJ1cHRpb24gd291bGQgbWFuaWZlc3QgYXMgY29udHJvbCBmbG93IGZhdWx0cywgYXNzZXJ0aW9ucywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aGljaCBhcmUgYWxyZWFkeSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNjM1OWU0NzQ4MWNmMjM3MzBjNTkyMGFjMmRiYmUwNmQ1YTRmODEyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMDo0NTo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYmFja3RyYWNrLmMgYi9rZXJuZWwvYnBmL2JhY2t0cmFjay5jXG5pbmRleCBhMmIxOGE5ZjE2OTRjLi5lYWY3NDM4YjllYmY5IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9iYWNrdHJhY2suY1xuKysrIGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xuQEAgLTU4MiwxNiArNTgyLDI5IEBAIHN0YXRpYyBpbnQgYmFja3RyYWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCwgaW50IHN1YnNlcV9pZHgsXG4gXHRcdFx0ICAqL1xuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9MRCkge1xuLVx0XHRpZiAoIWJ0X2lzX3JlZ19zZXQoYnQsIGRyZWcpKVxuLVx0XHRcdHJldHVybiAwO1xuLVx0XHRidF9jbGVhcl9yZWcoYnQsIGRyZWcpO1xuIFx0XHQvKiBJdCdzIGxkX2ltbTY0IG9yIGxkX2FicyBvciBsZF9pbmQuXG4gXHRcdCAqIEZvciBsZF9pbW02NCBubyBmdXJ0aGVyIHRyYWNraW5nIG9mIHByZWNpc2lvblxuIFx0XHQgKiBpbnRvIHBhcmVudCBpcyBuZWNlc3NhcnlcbiBcdFx0ICovXG4tXHRcdGlmIChtb2RlID09IEJQRl9JTkQgfHwgbW9kZSA9PSBCUEZfQUJTKVxuLVx0XHRcdC8qIHRvIGJlIGFuYWx5emVkICovXG4tXHRcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbitcdFx0aWYgKG1vZGUgPT0gQlBGX0lNTSkge1xuK1x0XHRcdGJ0X2NsZWFyX3JlZyhidCwgZHJlZyk7XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcdFx0LypcbitcdFx0ICogQlBGX3tJTkQsQUJTfSBhcmUgbW9kZWxsZWQgYXMgdHdvIGJyYW5jaGVzOlxuK1x0XHQgKiAtIGZhbGx0aHJvdWdoO1xuK1x0XHQgKiAtIGltcGxpY2l0IHN1YnByb2dyYW0gZXhpdC5cbitcdFx0ICogSXQgaXMgbmVjZXNzYXJ5IHRvIHN3aXRjaCBjdXJyZW50IGZyYW1lIGlmXG4rXHRcdCAqIGltcGxpY2l0IHN1YnByb2dyYW0gZXhpdCBicmFuY2ggaXMgYmFja3RyYWNrZWQuXG4rXHRcdCAqL1xuK1x0XHRpZiAobW9kZSA9PSBCUEZfSU5EIHx8IG1vZGUgPT0gQlBGX0FCUykge1xuK1x0XHRcdGlmIChidF9pc19yZWdfc2V0KGJ0LCBkcmVnKSlcbitcdFx0XHRcdHJldHVybiAtRU5PVFNVUFA7XG4rXHRcdFx0aWYgKHN1YnNlcV9pZHggIT0gaWR4ICsgMSlcbitcdFx0XHRcdGlmIChidF9zdWJwcm9nX2VudGVyKGJ0KSlcbitcdFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbiBcdH1cbiBcdC8qIFByb3BhZ2F0ZSBwcmVjaXNpb24gbWFya3MgdG8gbGlua2VkIHJlZ2lzdGVycywgdG8gYWNjb3VudCBmb3JcbiBcdCAqIHJlZ2lzdGVycyBtYXJrZWQgYXMgcHJlY2lzZSBpbiB0aGlzIGZ1bmN0aW9uLlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zdWJwcm9nX3ByZWNpc2lvbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3N1YnByb2dfcHJlY2lzaW9uLmNcbmluZGV4IGQyMWQzMmY2YTY3NjAuLmUxNzRhOTA1YzU2MjggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3VicHJvZ19wcmVjaXNpb24uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3N1YnByb2dfcHJlY2lzaW9uLmNcbkBAIC04NDYsNCArODQ2LDU1IEBAIF9fbmFrZWQgaW50IHN1YnByb2dfcmVzdWx0X3RhaWxfY2FsbCh2b2lkKVxuIFx0KTtcbiB9XG4gXG4rX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZFxuK3N0YXRpYyBpbnQgbGRfYWJzX3N1YnByb2codm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XHRcInI2ID0gcjE7XCJcbitcdFx0XCJyNyA9IHIxO1wiXG4rXHRcdFwiLjhieXRlICVbbGRfYWJzXTtcIlxuK1x0XHRcImV4aXQ7XCJcbitcdFx0OlxuK1x0XHQ6IF9faW1tX2luc24obGRfYWJzLCBCUEZfTERfQUJTKEJQRl9XLCAwKSlcbitcdFx0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLypcbisgKiBCdWdneSB2ZXJpZmllciBkaWQgbm90IHByb3Blcmx5IGJhY2t0cmFjayBlYXJseSBzdWJwcm9ncmFtIGV4aXRcbisgKiBtb2RlbGxlZCBmb3IgQlBGX0xEIHwgQlBGX0FCUyBpbnN0cnVjdGlvbiwgY2F1c2luZyBhIHNlZ2ZhdWx0LlxuKyAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fc3VjY2Vzc1xuK19fbG9nX2xldmVsKDIpXG4rLyogZWFybHkgZXhpdCBwYXRoICovXG4rX19tc2coXCIzOiAoMGYpIHIxICs9IHI3XCIpXG4rX19tc2coXCJtYXJrX3ByZWNpc2U6IGZyYW1lMDogcmVncz1yNyBzdGFjaz0gYmVmb3JlIDI6IChiZikgcjEgPSByMTBcIilcbitfX21zZyhcIm1hcmtfcHJlY2lzZTogZnJhbWUwOiByZWdzPXI3IHN0YWNrPSBiZWZvcmUgOTogKDIwKSByMCA9ICoodTMyICopc2tiWzBdXCIpXG4rX19tc2coXCJtYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSA4OiAoYmYpIHI3ID0gcjFcIilcbitfX21zZyhcIm1hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDc6IChiZikgcjYgPSByMVwiKVxuK19fbXNnKFwibWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgMTogKDg1KSBjYWxsIHBjKzVcIilcbitfX21zZyhcIm1hcmtfcHJlY2lzZTogZnJhbWUwOiByZWdzPXI3IHN0YWNrPSBiZWZvcmUgMDogKGI3KSByNyA9IC04XCIpXG4rLyogZmFsbHRocm91Z2ggcGF0aCAqL1xuK19fbXNnKFwiMzogKDBmKSByMSArPSByN1wiKVxuK19fbXNnKFwibWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSAyOiAoYmYpIHIxID0gcjEwXCIpXG4rX19tc2coXCJtYXJrX3ByZWNpc2U6IGZyYW1lMDogcmVncz1yNyBzdGFjaz0gYmVmb3JlIDEwOiAoOTUpIGV4aXRcIilcbitfX21zZyhcIm1hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDk6ICgyMCkgcjAgPSAqKHUzMiAqKXNrYlswXVwiKVxuK19fbXNnKFwibWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgODogKGJmKSByNyA9IHIxXCIpXG4rX19tc2coXCJtYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSA3OiAoYmYpIHI2ID0gcjFcIilcbitfX21zZyhcIm1hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDE6ICg4NSkgY2FsbCBwYys1XCIpXG4rX19tc2coXCJtYXJrX3ByZWNpc2U6IGZyYW1lMDogcmVncz1yNyBzdGFjaz0gYmVmb3JlIDA6IChiNykgcjcgPSAtOFwiKVxuK19fbmFrZWQgaW50IGxkX2Fic19iYWNrdHJhY2tfYm90aF9wYXRocyh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcdFwicjcgPSAtODtcIlxuK1x0XHRcImNhbGwgbGRfYWJzX3N1YnByb2c7XCJcbitcdFx0XCJyMSA9IHIxMDtcIlxuK1x0XHRcInIxICs9IHI3O1wiIC8qIG1hcmsgcjcgYXMgcHJlY2lzZSAqL1xuK1x0XHRcIioodTY0ICopKHIxICsgMCkgPSAwO1wiXG4rXHRcdFwicjAgPSAwO1wiXG4rXHRcdFwiZXhpdDtcIlxuK1x0XHQ6OjogX19jbG9iYmVyX2FsbFxuK1x0KTtcbit9XG4rXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6MzEuNzgyOTI4NjAzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2NjE5MjgyODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlcmUncyBhIG1vZGlmaWNhdGlvbiBpbiBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBiYWNrdHJhY2tfaW5zbigpYCBmdW5jdGlvbi4gU2ltdWx0YW5lb3VzbHksIGEgbmV3IHNlbGZ0ZXN0IGhhcyBiZWVuIGludHJvZHVjZWQgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zdWJwcm9nX3ByZWNpc2lvbi5jYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBhIHBvdGVudGlhbCBmaXggb3IgZW5oYW5jZW1lbnQgcmVsYXRlZCB0byBCUEYgaW5zdHJ1Y3Rpb24gYmFja3RyYWNraW5nLCBsaWtlbHkgaW1wYWN0aW5nIHRoZSB2ZXJpZmllcidzIHByZWNpc2lvbi5cblxuVG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBjaGFuZ2VkLCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcm9sZSBvZiBgYmFja3RyYWNrX2luc24oKWAgd2l0aGluIHRoZSBrZXJuZWwuIFRpbWUgdG8gZ3JhYiB0aGUgY29kZS4gSSdsbCBwcm9iYWJseSB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSBmdW5jdGlvbidzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgQlBGIHZlcmlmaWNhdGlvbiBwcm9jZXNzLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzI5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6MzguNDQ0ODYwOTY2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2JhY2t0cmFjay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3MDpcXHRcXHRcXHRcXHQgKiBiZWZvcmUgaXQgd291bGQgYmUgZXF1YWxseSBuZWNlc3NhcnkgdG9cXG4gNTcxOlxcdFxcdFxcdFxcdCAqIHByb3BhZ2F0ZSBpdCB0byBkcmVnLlxcbiA1NzI6XFx0XFx0XFx0XFx0ICovXFxuIDU3MzpcXHRcXHRcXHRcXHRpZiAoIWhpc3QgfHwgIShoaXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IElOU05fRl9TUkNfUkVHX1NUQUNLKSlcXG4gNTc0OlxcdFxcdFxcdFxcdFxcdGJ0X3NldF9yZWcoYnQsIHNyZWcpO1xcbiA1NzU6XFx0XFx0XFx0XFx0aWYgKCFoaXN0IHx8ICEoaGlzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJTlNOX0ZfRFNUX1JFR19TVEFDSykpXFxuIDU3NjpcXHRcXHRcXHRcXHRcXHRidF9zZXRfcmVnKGJ0LCBkcmVnKTtcXG4gNTc3OlxcdFxcdFxcdH0gZWxzZSBpZiAoQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfSykge1xcbiA1Nzg6XFx0XFx0XFx0XFx0IC8qIGRyZWcgXFx1MDAzY2NvbmRcXHUwMDNlIEtcXG4gNTc5OlxcdFxcdFxcdFxcdCAgKiBPbmx5IGRyZWcgc3RpbGwgbmVlZHMgcHJlY2lzaW9uIGJlZm9yZVxcbiA1ODA6XFx0XFx0XFx0XFx0ICAqIHRoaXMgaW5zbiwgc28gZm9yIHRoZSBLLWJhc2VkIGNvbmRpdGlvbmFsXFxuIDU4MTpcXHRcXHRcXHRcXHQgICogdGhlcmUgaXMgbm90aGluZyBuZXcgdG8gYmUgbWFya2VkLlxcbiA1ODI6XFx0XFx0XFx0XFx0ICAqL1xcbiA1ODM6XFx0XFx0XFx0fVxcbiA1ODQ6XFx0XFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfTEQpIHtcXG4gNTg1OlxcdFxcdFxcdC8qIEl0J3MgbGRfaW1tNjQgb3IgbGRfYWJzIG9yIGxkX2luZC5cXG4gNTg2OlxcdFxcdFxcdCAqIEZvciBsZF9pbW02NCBubyBmdXJ0aGVyIHRyYWNraW5nIG9mIHByZWNpc2lvblxcbiA1ODc6XFx0XFx0XFx0ICogaW50byBwYXJlbnQgaXMgbmVjZXNzYXJ5XFxuIDU4ODpcXHRcXHRcXHQgKi9cXG4gNTg5OlxcdFxcdFxcdGlmIChtb2RlID09IEJQRl9JTU0pIHtcXG4gNTkwOlxcdFxcdFxcdFxcdGJ0X2NsZWFyX3JlZyhidCwgZHJlZyk7XFxuIDU5MTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTkyOlxcdFxcdFxcdH1cXG4gNTkzOlxcdFxcdFxcdC8qXFxuIDU5NDpcXHRcXHRcXHQgKiBCUEZfe0lORCxBQlN9IGFyZSBtb2RlbGxlZCBhcyB0d28gYnJhbmNoZXM6XFxuIDU5NTpcXHRcXHRcXHQgKiAtIGZhbGx0aHJvdWdoO1xcbiA1OTY6XFx0XFx0XFx0ICogLSBpbXBsaWNpdCBzdWJwcm9ncmFtIGV4aXQuXFxuIDU5NzpcXHRcXHRcXHQgKiBJdCBpcyBuZWNlc3NhcnkgdG8gc3dpdGNoIGN1cnJlbnQgZnJhbWUgaWZcXG4gNTk4OlxcdFxcdFxcdCAqIGltcGxpY2l0IHN1YnByb2dyYW0gZXhpdCBicmFuY2ggaXMgYmFja3RyYWNrZWQuXFxuIDU5OTpcXHRcXHRcXHQgKi9cXG4gNjAwOlxcdFxcdFxcdGlmIChtb2RlID09IEJQRl9JTkQgfHwgbW9kZSA9PSBCUEZfQUJTKSB7XFxuIDYwMTpcXHRcXHRcXHRcXHRpZiAoYnRfaXNfcmVnX3NldChidCwgZHJlZykpXFxuIDYwMjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbiA2MDM6XFx0XFx0XFx0XFx0aWYgKHN1YnNlcV9pZHggIT0gaWR4ICsgMSlcXG4gNjA0OlxcdFxcdFxcdFxcdFxcdGlmIChidF9zdWJwcm9nX2VudGVyKGJ0KSlcXG4gNjA1OlxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA2MDY6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDYwNzpcXHRcXHRcXHR9XFxuIDYwODpcXHRcXHR9XFxuIDYwOTpcXHRcXHQvKiBQcm9wYWdhdGUgcHJlY2lzaW9uIG1hcmtzIHRvIGxpbmtlZCByZWdpc3RlcnMsIHRvIGFjY291bnQgZm9yXFxuIDYxMDpcXHRcXHQgKiByZWdpc3RlcnMgbWFya2VkIGFzIHByZWNpc2UgaW4gdGhpcyBmdW5jdGlvbi5cXG4gNjExOlxcdFxcdCAqL1xcbiA2MTI6XFx0XFx0YnBmX2J0X3N5bmNfbGlua2VkX3JlZ3MoYnQsIGhpc3QpO1xcbiA2MTM6XFx0XFx0cmV0dXJuIDA7XFxuIDYxNDpcXHR9XFxuIDYxNTpcXHRcXG4gNjE2OlxcdC8qIHRoZSBzY2FsYXIgcHJlY2lzaW9uIHRyYWNraW5nIGFsZ29yaXRobTpcXG4gNjE3OlxcdCAqIC4gYXQgdGhlIHN0YXJ0IGFsbCByZWdpc3RlcnMgaGF2ZSBwcmVjaXNlPWZhbHNlLlxcbiA2MTg6XFx0ICogLiBzY2FsYXIgcmFuZ2VzIGFyZSB0cmFja2VkIGFzIG5vcm1hbCB0aHJvdWdoIGFsdSBhbmQgam1wIGluc25zLlxcbiA2MTk6XFx0ICogLiBvbmNlIHByZWNpc2UgdmFsdWUgb2YgdGhlIHNjYWxhciByZWdpc3RlciBpcyB1c2VkIGluOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0NjozOC40NDQ5ODY3MTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzE5NjU3NDQ4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBCYWNrdHJhY2tpbmcgQnVnIEZpeCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGJ1ZyBpbiB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBiYWNrdHJhY2tpbmcgd2hlbiBoYW5kbGluZyBlYXJseSBzdWJwcm9ncmFtIGV4aXRzLCBtb2RlbGVkIGZvciBgQlBGX0xEIHwgQlBGX0FCU2AgaW5zdHJ1Y3Rpb25zLCB3aGljaCB3YXMgbGVhZGluZyB0byBhIHNlZ2ZhdWx0LiBUaGUgY29tbWl0IGNvbW1lbnQgcG9pbnRzIG1lIHRvIHRoZSBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AgZmlsZSBhbmQgdGhlIGJhY2t0cmFja2luZyBhbGdvcml0aG0uXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBzZWVtcyB0byBiZSBob3cgdGhlIHZlcmlmaWVyIGhhbmRsZXMgcHJlY2lzaW9uIGR1cmluZyBiYWNrdHJhY2tpbmcsIHBhcnRpY3VsYXJseSB3aXRoIHRoZSBgQlBGX0xEYCBjbGFzcyBvZiBpbnN0cnVjdGlvbnMuIFRoZSBvcmlnaW5hbCBjb2RlJ3MgbG9naWMgaGVyZSB3YXMgcHJvYmxlbWF0aWMuIFdoZW4gZW5jb3VudGVyaW5nIGBCUEZfTERgIGluc3RydWN0aW9ucywgaXQgd291bGQgaGFuZGxlIGBsZF9pbW02NGAsIGBsZF9hYnNgLCBhbmQgYGxkX2luZGAgZGlmZmVyZW50bHkuIFRoZSBgbGRfaW1tNjRgIGNhc2Ugc2VlbWVkIGZpbmUsIGJ1dCB0aGUgaGFuZGxpbmcgb2YgYEJQRl9JTkRgIG9yIGBCUEZfQUJTYCBpbnN0cnVjdGlvbnMgaW52b2x2ZWQgY2xlYXJpbmcgcmVnaXN0ZXIgcHJlY2lzaW9uIGFuZCB0aGVuIHJldHVybmluZy5cblxuTm93LCB3aXRoIHRoaXMgcGF0Y2gsIHRoZXJlIGFyZSBzb21lIHNpZ25pZmljYW50IGNoYW5nZXMuIElmIHRoZSBpbnN0cnVjdGlvbiBpcyBgQlBGX0lNTWAsIHRoZSBjb2RlIHNpbXBseSBjbGVhcnMgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyJ3MgcHJlY2lzaW9uIGFuZCByZXR1cm5zLiBIb3dldmVyLCB3aXRoIGBCUEZfSU5EYCBvciBgQlBGX0FCU2AsIHRoZXJlJ3Mgbm93IGEgY2hlY2s6IGBpZiAoYnRfaXNfcmVnX3NldChidCwgZHJlZykpIHJldHVybiAtRU5PVFNVUFA7YC4gQWRkaXRpb25hbGx5LCB0aGVyZSdzIGEgY29uZGl0aW9uYWwgYGJ0X3N1YnByb2dfZW50ZXJgIGNhbGwgYmFzZWQgb24gYHN1YnNlcV9pZHhgIGFuZCBgaWR4YCwgdGhhdCBsb29rcyBwcmV0dHkgY3J1Y2lhbCwgYW5kIGlmIGl0IHN1Y2NlZWRzLCB0aGVyZSdzIGFuIGAtRUZBVUxUYCByZXR1cm4uIFRoaXMgbG9va3MgbGlrZSB0aGUgbWFpbiBjaGFuZ2UuXG5cblNvIHRoZSBtYWluIGNoYW5nZSBpcyB0aGF0IGJlZm9yZSwgdGhlcmUgd2FzIG5vIHByb3RlY3Rpb24gb2YgYSByZWdpc3RlciB0aGF0IG1pZ2h0IHN0aWxsIGJlIHNldC4gTm93IHRoZSBwYXRjaCBmaXJzdCBjaGVja3MgaWYgdGhlIHJlZ2lzdGVyIGlzIHNldCwgYW5kIGlmIGl0IGlzLCB0aGUgdmVyaWZpZXIgcmV0dXJucyB0aGF0IHRoaXMgaW5zdHJ1Y3Rpb24gdHlwZSBpcyBub3Qgc3VwcG9ydGVkLiBPdGhlcndpc2UsIGl0IGNvbmRpdGlvbmFsbHkgY2FsbHMgYGJ0X3N1YnByb2dfZW50ZXJgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGJ0X3N1YnByb2dfZW50ZXJgIGRvZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBiYWNrdHJhY2sgc3RydWN0dXJlIGFuZCBob3cgaXQncyB1c2VkLiBCYXNlZCBvbiB0aGVzZSBjaGFuZ2VzLCBJJ20gZ3Vlc3NpbmcgdGhpcyBwcmV2ZW50cyBwcmVtYXR1cmUgYmFja3RyYWNraW5nIGFuZCBhbGxvd3MgcHJvcGVyIHByZWNpc2lvbiB0cmFja2luZyB0aHJvdWdoIHN1YnByb2dyYW0gZXhpdHMsIHRodXMgYXZlcnRpbmcgdGhlIHNlZ2ZhdWx0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDU2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6NDUuNjQxNTY0Nzg5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk3MDYxMzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ0X3N1YnByb2dfZW50ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9iYWNrdHJhY2suYz0xNDI9c3RhdGljIGlubGluZSBib29sIGJ0X2lzX2ZyYW1lX3N0YWNrX2FyZ19zbG90X3NldChzdHJ1Y3QgYmFja3RyYWNrX3N0YXRlICpidCwgdTMyIGZyYW1lLCB1MzIgc2xvdClcXG4tLVxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtMTQ2LVxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmM6MTQ3OnN0YXRpYyBpbmxpbmUgaW50IGJ0X3N1YnByb2dfZW50ZXIoc3RydWN0IGJhY2t0cmFja19zdGF0ZSAqYnQpXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYy0xNDgte1xcbi0tXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYz0yNjU9c3RhdGljIGludCBiYWNrdHJhY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LCBpbnQgc3Vic2VxX2lkeCxcXG4tLVxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNTE4LVxcdFxcdFxcdCAgICBcXHUwMDI2XFx1MDAyNiBzdWJzZXFfaWR4IC0gaWR4ICE9IDEpIHtcXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jOjUxOTpcXHRcXHRcXHRcXHRpZiAoYnRfc3VicHJvZ19lbnRlcihidCkpXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYy01MjAtXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLS1cXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTU1NC1cXHRcXHRcXHRidF9jbGVhcl9yZWcoYnQsIEJQRl9SRUdfMCk7XFxua2VybmVsL2JwZi9iYWNrdHJhY2suYzo1NTU6XFx0XFx0XFx0aWYgKGJ0X3N1YnByb2dfZW50ZXIoYnQpKVxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNTU2LVxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYy02MDMtXFx0XFx0XFx0aWYgKHN1YnNlcV9pZHggIT0gaWR4ICsgMSlcXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jOjYwNDpcXHRcXHRcXHRcXHRpZiAoYnRfc3VicHJvZ19lbnRlcihidCkpXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYy02MDUtXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ2OjQ3LjQzODY0MzA2MloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDI2ODA3ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHN0cnVjdHVyZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqRGl2aW5nIGludG8gYGJ0X3N1YnByb2dfZW50ZXJgKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBgYnRfc3VicHJvZ19lbnRlcmAgd2l0aGluIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGNvbnNpZGVyIGl0cyByb2xlIGluIHRoZSBCUEYgYmFja3RyYWNrIG1lY2hhbmlzbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gY29udHJpYnV0ZXMgdG8gdHJhY2luZyBwcm9ncmFtIGV4ZWN1dGlvbiBhbmQgbWFuYWdpbmcgbmVzdGVkIGNhbGxzLiBXaGF0IGxldmVsIG9mIGRldGFpbCBkb2VzIGl0IHByb3ZpZGU/IERvZXMgaXQgc3RvcmUgcmVnaXN0ZXJzLCBwcm9ncmFtIGNvdW50ZXJzLCBvciBwZXJoYXBzIHRoZSBzdGFjayBmcmFtZSBvZiB0aGUgc3VicHJvZ3JhbSBpdCBpcyBlbnRlcmluZz8gVGhpbmtpbmcgYmFjayB0byBteSBleHBlcmllbmNlLCB0aGlzIGlzIGxpa2VseSBhIGNydWNpYWwgZnVuY3Rpb24gZm9yIGRlYnVnZ2luZyBhbmQgYW5hbHl6aW5nIEJQRiBwcm9ncmFtcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBjb21wbGV4LCBtdWx0aS1sYXllcmVkIGFwcGxpY2F0aW9ucy4gV2UgYXJlIHRhbGtpbmcgYWJvdXQgYmFja3RyYWNrLCBzbyB0aGlzIGNvZGUgaXMgc3VyZWx5IGNyaXRpY2FsIGZvciByZWNvdmVyeSBvciBlcnJvciBoYW5kbGluZy4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIGJhY2t0cmFjayBpbmZyYXN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGhvdyB0aGlzIHRpZXMgaW50byBhbnkgYXNzb2NpYXRlZCBzdGFjayBtYW5hZ2VtZW50IG9yIHN0YXRlIHNhdmluZy4gSXMgdGhlcmUgYW55IHBvdGVudGlhbCBvdmVyaGVhZCBmcm9tIHRoaXM/IEdpdmVuIHRoZSBwZXJmb3JtYW5jZS1jcml0aWNhbCBuYXR1cmUgb2YgQlBGLCB1bmRlcnN0YW5kaW5nIHRoZSBlZmZpY2llbmN5IG9mIHRoaXMgZnVuY3Rpb24gaXMgcGFyYW1vdW50LiBBbmQsIGNvbnNpZGVyaW5nIHRoZSBjb250ZXh0IG9mIGBiYWNrdHJhY2suY2AsIHRoaXMgY29kZSBpcyBwcm9iYWJseSBwcmV0dHkgaW1wb3J0YW50IHdoZW4gdGhlIHN5c3RlbSBlbmNvdW50ZXJzIGFuIGVycm9yIG9yIGEgcG90ZW50aWFsbHkgYmFkIHByb2dyYW0sIHdoaWNoIHdvdWxkIGFsbG93IGZvciBlYXNpZXIgZGVidWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzExLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6NTAuNDY1NDUyNzMyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2JhY2t0cmFjay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0NTpcXHR9XFxuIDE0NjpcXHRcXG4gMTQ3OlxcdHN0YXRpYyBpbmxpbmUgaW50IGJ0X3N1YnByb2dfZW50ZXIoc3RydWN0IGJhY2t0cmFja19zdGF0ZSAqYnQpXFxuIDE0ODpcXHR7XFxuIDE0OTpcXHRcXHRpZiAoYnQtXFx1MDAzZWZyYW1lID09IE1BWF9DQUxMX0ZSQU1FUyAtIDEpIHtcXG4gMTUwOlxcdFxcdFxcdHZlcmlmaWVyX2J1ZyhidC1cXHUwMDNlZW52LCBcXFwic3VicHJvZyBlbnRlciBmcm9tIGZyYW1lICVkXFxcIiwgYnQtXFx1MDAzZWZyYW1lKTtcXG4gMTUxOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAxNTI6XFx0XFx0fVxcbiAxNTM6XFx0XFx0YnQtXFx1MDAzZWZyYW1lKys7XFxuIDE1NDpcXHRcXHRyZXR1cm4gMDtcXG4gMTU1OlxcdH1cXG4gMTU2OlxcdFxcbiAxNTc6XFx0c3RhdGljIGlubGluZSBpbnQgYnRfc3VicHJvZ19leGl0KHN0cnVjdCBiYWNrdHJhY2tfc3RhdGUgKmJ0KVxcbiAxNTg6XFx0e1xcbiAxNTk6XFx0XFx0aWYgKGJ0LVxcdTAwM2VmcmFtZSA9PSAwKSB7XFxuIDE2MDpcXHRcXHRcXHR2ZXJpZmllcl9idWcoYnQtXFx1MDAzZWVudiwgXFxcInN1YnByb2cgZXhpdCBmcm9tIGZyYW1lIDBcXFwiKTtcXG4gMTYxOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAxNjI6XFx0XFx0fVxcbiAxNjM6XFx0XFx0YnQtXFx1MDAzZWZyYW1lLS07XFxuIDE2NDpcXHRcXHRyZXR1cm4gMDtcXG4gMTY1OlxcdH1cXG4gMTY2OlxcdFxcbiAxNjc6XFx0c3RhdGljIGlubGluZSB2b2lkIGJ0X2NsZWFyX2ZyYW1lX3JlZyhzdHJ1Y3QgYmFja3RyYWNrX3N0YXRlICpidCwgdTMyIGZyYW1lLCB1MzIgcmVnKVxcbiAxNjg6XFx0e1xcbiAxNjk6XFx0XFx0YnQtXFx1MDAzZXJlZ19tYXNrc1tmcmFtZV0gXFx1MDAyNj0gfigxIFxcdTAwM2NcXHUwMDNjIHJlZyk7XFxuIDE3MDpcXHR9XFxuIDE3MTpcXHRcXG4gMTcyOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBidF9zZXRfcmVnKHN0cnVjdCBiYWNrdHJhY2tfc3RhdGUgKmJ0LCB1MzIgcmVnKVxcbiAxNzM6XFx0e1xcbiAxNzQ6XFx0XFx0YnBmX2J0X3NldF9mcmFtZV9yZWcoYnQsIGJ0LVxcdTAwM2VmcmFtZSwgcmVnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6NTAuNDY1NTg1NDYyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzODMxMjAzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBmb3IgS01TQU4gaW4gdGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgYW5hbHlzaXMgb2YgdGhpcyBwYXRjaCwgZm9jdXNlZCBvbiBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AgYW5kIGEgbmV3IEJQRiBzZWxmdGVzdCwgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSSdtIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBLTVNBTiBpc3N1ZXMg4oCTIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIOKAkyBhbmQgSSBkb24ndCBzZWUgYW55IGhlcmUuXG5cbkZpcnN0LCBJJ3ZlIGNoZWNrZWQgZm9yIGFueSBpbnRlcmFjdGlvbiB3aXRoIHVzZXIgc3BhY2UuIFRoZXJlJ3Mgbm90aGluZyBiZWluZyBzZW50IG91dCB0aGF0IGNvdWxkIGhhdmUgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZy4gTm90aGluZydzIGV4cG9zZWQgdmlhIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rLCBpb2N0bHMsIHNvY2tldCBvcHRpb25zIG9yIEJQRiBidWZmZXJzIHRoYXQgYXJlIHVuZGVyIHN1c3BpY2lvbi4gVGhlIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiB0aGUgYmFja3RyYWNraW5nIGxvZ2ljIOKAkyBgYnRgLCBgZHJlZ2AsIGBzdWJzZXFfaWR4YCwgYGlkeGAsIGV0Yy4g4oCTIGFyZSBhbGwgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSB2ZXJpZmllciBzdGF0ZSB0cmFja2luZywgc28gbm8gY29uY2VybnMgdGhlcmUuXG5cbk5leHQsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIGxhdGVyIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIEFuZCBjcml0aWNhbGx5LCB0aGlzIHBhdGNoIGRvZXNuJ3QgbWVzcyB3aXRoIGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgcGFydHMgb2YgYnVmZmVycy4gVGhpcyBpcyBhbGwgYWJvdXQgYmFja3RyYWNraW5nIHByZWNpc2lvbiB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllci5cblxuVGhlIGZpeCBpdHNlbGYgYWRkcmVzc2VzIGFuIGlzc3VlIGluIGhvdyB0aGUgYmFja3RyYWNraW5nIGhhbmRsZXMgZWFybHkgZXhpdHMgZnJvbSBzdWJwcm9ncmFtcy4gVGhlIHByb2JsZW0gd2FzIHRoYXQsIGZvciBgQlBGX0xEIHwgQlBGX0FCU2AgaW5zdHJ1Y3Rpb25zLCB0aGUgY2FsbCBmcmFtZXMgaW4gYGJhY2t0cmFja19zdGF0ZWAgKGBidC1cdTAwM2VmcmFtZWApIHdlcmVuJ3QgYmVpbmcgc3dpdGNoZWQgY29ycmVjdGx5IG9uIGVhcmx5IGV4aXQsIHdoaWNoIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHN0YXRlIGFuZCBwb3RlbnRpYWwgY3Jhc2hlcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gQnV0IHRoZSByZXN1bHRpbmcgcHJvYmxlbXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLlxuXG5UaGVyZWZvcmUsIHRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIHdvdWxkIGJlIGNvbXBsZXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHN1Y2ggYXMgS0FTQU4sIExPQ0tERVAuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHNpdHVhdGlvbiB3aGVyZSBgTmVlZHNLTVNBTj1mYWxzZWAgaXMgdGhlIHJpZ2h0IGNhbGwuIFRoZSBidWcsIGlmIGFueSwgd2lsbCBiZSBjYXVnaHQgYnkgS0FTQU4uXG5cbkknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgYW5kIGFtIHJlYWR5IHRvIGNsZWFybHkgYXJ0aWN1bGF0ZSB0aGUgS01TQU5SZWFzb25pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NzksIk91dHB1dFRva2VucyI6MTkyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6NTUuODQ4NzA4MTUyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgc2NhbGFyIHByZWNpc2lvbiBiYWNrdHJhY2tpbmcgbG9naWMgaW4gYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgIHRvIHByb3Blcmx5IHVwZGF0ZSB0aGUgc3VicHJvZ3JhbSBjYWxsIGZyYW1lIChgYnRfc3VicHJvZ19lbnRlcmApIHdoZW4gYmFja3RyYWNraW5nIHRoZSBpbXBsaWNpdCBlYXJseSBleGl0IHBhdGggb2YgYEJQRl9MRCB8IEJQRl9BQlNgIGFuZCBgQlBGX0xEIHwgQlBGX0lORGAgaW5zdHJ1Y3Rpb25zLiBcXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHZlcmlmaWVyIGJyYW5jaGVzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdGhzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gZnJhbWUgaW5kZXhpbmcgZXJyb3JzIG9yIHZlcmlmaWVyIHN0YXRlIGNvcnJ1cHRpb24gd291bGQgbWFuaWZlc3QgYXMgY29udHJvbCBmbG93IGZhdWx0cywgYXNzZXJ0aW9ucywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aGljaCBhcmUgYWxyZWFkeSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgc2NhbGFyIHByZWNpc2lvbiBiYWNrdHJhY2tpbmcgbG9naWMgaW4gYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgIHRvIHByb3Blcmx5IHVwZGF0ZSB0aGUgc3VicHJvZ3JhbSBjYWxsIGZyYW1lIChgYnRfc3VicHJvZ19lbnRlcmApIHdoZW4gYmFja3RyYWNraW5nIHRoZSBpbXBsaWNpdCBlYXJseSBleGl0IHBhdGggb2YgYEJQRl9MRCB8IEJQRl9BQlNgIGFuZCBgQlBGX0xEIHwgQlBGX0lORGAgaW5zdHJ1Y3Rpb25zLiBcXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHZlcmlmaWVyIGJyYW5jaGVzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdGhzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gZnJhbWUgaW5kZXhpbmcgZXJyb3JzIG9yIHZlcmlmaWVyIHN0YXRlIGNvcnJ1cHRpb24gd291bGQgbWFuaWZlc3QgYXMgY29udHJvbCBmbG93IGZhdWx0cywgYXNzZXJ0aW9ucywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aGljaCBhcmUgYWxyZWFkeSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowrvxwp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 20:29:15 +0000 UTC FinishedAt: 2026-09-02 20:46:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "73ae59e975966d24e32926247ddb45a537ebe184", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "73ae59e975966d24e32926247ddb45a537ebe184", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "ee0ea3a3-2d50-4009-9667-0e124ec7769c" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_mark_chain_precision", "bpf_check" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uJiMzNDssCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB2ZXJpZmllciBzY2FsYXIgcHJlY2lzaW9uIGJhY2t0cmFja2luZyBsb2dpYyBpbiBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AgdG8gcHJvcGVybHkgdXBkYXRlIHRoZSBzdWJwcm9ncmFtIGNhbGwgZnJhbWUgKGBidF9zdWJwcm9nX2VudGVyYCkgd2hlbiBiYWNrdHJhY2tpbmcgdGhlIGltcGxpY2l0IGVhcmx5IGV4aXQgcGF0aCBvZiBgQlBGX0xEIHwgQlBGX0FCU2AgYW5kIGBCUEZfTEQgfCBCUEZfSU5EYCBpbnN0cnVjdGlvbnMuIFxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHZlcmlmaWVyIGJyYW5jaGVzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdGhzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gZnJhbWUgaW5kZXhpbmcgZXJyb3JzIG9yIHZlcmlmaWVyIHN0YXRlIGNvcnJ1cHRpb24gd291bGQgbWFuaWZlc3QgYXMgY29udHJvbCBmbG93IGZhdWx0cywgYXNzZXJ0aW9ucywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aGljaCBhcmUgYWxyZWFkeSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBzY2FsYXIgcHJlY2lzaW9uIGJhY2t0cmFja2luZyBsb2dpYyBpbiBiYWNrdHJhY2tfaW5zbigpIGZvciBCUEZfTEQgKHNwZWNpZmljYWxseSBCUEZfQUJTL0JQRl9JTkQgaW5zdHJ1Y3Rpb25zIHdpdGggaW1wbGljaXQgc3VicHJvZ3JhbSBleGl0IGJyYW5jaGVzKSB0byBwcm9wZXJseSBhZGp1c3QgdGhlIGJhY2t0cmFjayBjYWxsIGZyYW1lIGFuZCBwcmV2ZW50IHZlcmlmaWVyIGNyYXNoZXMvc2VnZmF1bHRzLiBUaGlzIGlzIGNvcmUgdmVyaWZpZXIgbG9naWMgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQpIHN5c2NhbGwgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwNjM1OWU0NzQ4MWNmMjM3MzBjNTkyMGFjMmRiYmUwNmQ1YTRmODEyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMDo0NTo0NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jIGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xuaW5kZXggYTJiMThhOWYxNjk0Yy4uZWFmNzQzOGI5ZWJmOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbkBAIC01ODIsMTYgJiM0Mzs1ODIsMjkgQEAgc3RhdGljIGludCBiYWNrdHJhY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LCBpbnQgc3Vic2VxX2lkeCxcbiBcdFx0XHQgICovXG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEKSB7XG4tXHRcdGlmICghYnRfaXNfcmVnX3NldChidCwgZHJlZykpXG4tXHRcdFx0cmV0dXJuIDA7XG4tXHRcdGJ0X2NsZWFyX3JlZyhidCwgZHJlZyk7XG4gXHRcdC8qIEl0JiMzOTtzIGxkX2ltbTY0IG9yIGxkX2FicyBvciBsZF9pbmQuXG4gXHRcdCAqIEZvciBsZF9pbW02NCBubyBmdXJ0aGVyIHRyYWNraW5nIG9mIHByZWNpc2lvblxuIFx0XHQgKiBpbnRvIHBhcmVudCBpcyBuZWNlc3NhcnlcbiBcdFx0ICovXG4tXHRcdGlmIChtb2RlID09IEJQRl9JTkQgfHwgbW9kZSA9PSBCUEZfQUJTKVxuLVx0XHRcdC8qIHRvIGJlIGFuYWx5emVkICovXG4tXHRcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbiYjNDM7XHRcdGlmIChtb2RlID09IEJQRl9JTU0pIHtcbiYjNDM7XHRcdFx0YnRfY2xlYXJfcmVnKGJ0LCBkcmVnKTtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQlBGX3tJTkQsQUJTfSBhcmUgbW9kZWxsZWQgYXMgdHdvIGJyYW5jaGVzOlxuJiM0MztcdFx0ICogLSBmYWxsdGhyb3VnaDtcbiYjNDM7XHRcdCAqIC0gaW1wbGljaXQgc3VicHJvZ3JhbSBleGl0LlxuJiM0MztcdFx0ICogSXQgaXMgbmVjZXNzYXJ5IHRvIHN3aXRjaCBjdXJyZW50IGZyYW1lIGlmXG4mIzQzO1x0XHQgKiBpbXBsaWNpdCBzdWJwcm9ncmFtIGV4aXQgYnJhbmNoIGlzIGJhY2t0cmFja2VkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAobW9kZSA9PSBCUEZfSU5EIHx8IG1vZGUgPT0gQlBGX0FCUykge1xuJiM0MztcdFx0XHRpZiAoYnRfaXNfcmVnX3NldChidCwgZHJlZykpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbiYjNDM7XHRcdFx0aWYgKHN1YnNlcV9pZHggIT0gaWR4ICYjNDM7IDEpXG4mIzQzO1x0XHRcdFx0aWYgKGJ0X3N1YnByb2dfZW50ZXIoYnQpKVxuJiM0MztcdFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0fVxuIFx0fVxuIFx0LyogUHJvcGFnYXRlIHByZWNpc2lvbiBtYXJrcyB0byBsaW5rZWQgcmVnaXN0ZXJzLCB0byBhY2NvdW50IGZvclxuIFx0ICogcmVnaXN0ZXJzIG1hcmtlZCBhcyBwcmVjaXNlIGluIHRoaXMgZnVuY3Rpb24uXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3N1YnByb2dfcHJlY2lzaW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3VicHJvZ19wcmVjaXNpb24uY1xuaW5kZXggZDIxZDMyZjZhNjc2MC4uZTE3NGE5MDVjNTYyOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zdWJwcm9nX3ByZWNpc2lvbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3VicHJvZ19wcmVjaXNpb24uY1xuQEAgLTg0Niw0ICYjNDM7ODQ2LDU1IEBAIF9fbmFrZWQgaW50IHN1YnByb2dfcmVzdWx0X3RhaWxfY2FsbCh2b2lkKVxuIFx0KTtcbiB9XG4gXG4mIzQzO19fbmFrZWQgX19ub2lubGluZSBfX3VzZWRcbiYjNDM7c3RhdGljIGludCBsZF9hYnNfc3VicHJvZyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcbiYjNDM7XHRcdFwmIzM0O3I2ID0gcjE7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtyNyA9IHIxO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7LjhieXRlICVbbGRfYWJzXTtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O2V4aXQ7XCYjMzQ7XG4mIzQzO1x0XHQ6XG4mIzQzO1x0XHQ6IF9faW1tX2luc24obGRfYWJzLCBCUEZfTERfQUJTKEJQRl9XLCAwKSlcbiYjNDM7XHRcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEJ1Z2d5IHZlcmlmaWVyIGRpZCBub3QgcHJvcGVybHkgYmFja3RyYWNrIGVhcmx5IHN1YnByb2dyYW0gZXhpdFxuJiM0MzsgKiBtb2RlbGxlZCBmb3IgQlBGX0xEIHwgQlBGX0FCUyBpbnN0cnVjdGlvbiwgY2F1c2luZyBhIHNlZ2ZhdWx0LlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO19fbG9nX2xldmVsKDIpXG4mIzQzOy8qIGVhcmx5IGV4aXQgcGF0aCAqL1xuJiM0MztfX21zZyhcJiMzNDszOiAoMGYpIHIxICYjNDM7PSByN1wmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSAyOiAoYmYpIHIxID0gcjEwXCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDttYXJrX3ByZWNpc2U6IGZyYW1lMDogcmVncz1yNyBzdGFjaz0gYmVmb3JlIDk6ICgyMCkgcjAgPSAqKHUzMiAqKXNrYlswXVwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgODogKGJmKSByNyA9IHIxXCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDttYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSA3OiAoYmYpIHI2ID0gcjFcJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDE6ICg4NSkgY2FsbCBwYyYjNDM7NVwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSAwOiAoYjcpIHI3ID0gLThcJiMzNDspXG4mIzQzOy8qIGZhbGx0aHJvdWdoIHBhdGggKi9cbiYjNDM7X19tc2coXCYjMzQ7MzogKDBmKSByMSAmIzQzOz0gcjdcJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUwOiByZWdzPXI3IHN0YWNrPSBiZWZvcmUgMjogKGJmKSByMSA9IHIxMFwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSAxMDogKDk1KSBleGl0XCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDttYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSA5OiAoMjApIHIwID0gKih1MzIgKilza2JbMF1cJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDg6IChiZikgcjcgPSByMVwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgNzogKGJmKSByNiA9IHIxXCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDttYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSAxOiAoODUpIGNhbGwgcGMmIzQzOzVcJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUwOiByZWdzPXI3IHN0YWNrPSBiZWZvcmUgMDogKGI3KSByNyA9IC04XCYjMzQ7KVxuJiM0MztfX25ha2VkIGludCBsZF9hYnNfYmFja3RyYWNrX2JvdGhfcGF0aHModm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXG4mIzQzO1x0XHRcJiMzNDtyNyA9IC04O1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7Y2FsbCBsZF9hYnNfc3VicHJvZztcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O3IxID0gcjEwO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjEgJiM0Mzs9IHI3O1wmIzM0OyAvKiBtYXJrIHI3IGFzIHByZWNpc2UgKi9cbiYjNDM7XHRcdFwmIzM0OyoodTY0ICopKHIxICYjNDM7IDApID0gMDtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O3IwID0gMDtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O2V4aXQ7XCYjMzQ7XG4mIzQzO1x0XHQ6OjogX19jbG9iYmVyX2FsbFxuJiM0MztcdCk7XG4mIzQzO31cbiYjNDM7XG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9tYXJrX2NoYWluX3ByZWNpc2lvbiYjMzQ7LAogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBzY2FsYXIgcHJlY2lzaW9uIGJhY2t0cmFja2luZyBsb2dpYyBpbiBiYWNrdHJhY2tfaW5zbigpIGZvciBCUEZfTEQgKHNwZWNpZmljYWxseSBCUEZfQUJTL0JQRl9JTkQgaW5zdHJ1Y3Rpb25zIHdpdGggaW1wbGljaXQgc3VicHJvZ3JhbSBleGl0IGJyYW5jaGVzKSB0byBwcm9wZXJseSBhZGp1c3QgdGhlIGJhY2t0cmFjayBjYWxsIGZyYW1lIGFuZCBwcmV2ZW50IHZlcmlmaWVyIGNyYXNoZXMvc2VnZmF1bHRzLiBUaGlzIGlzIGNvcmUgdmVyaWZpZXIgbG9naWMgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQpIHN5c2NhbGwgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNjM1OWU0NzQ4MWNmMjM3MzBjNTkyMGFjMmRiYmUwNmQ1YTRmODEyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAyMDo0NTo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYmFja3RyYWNrLmMgYi9rZXJuZWwvYnBmL2JhY2t0cmFjay5jCmluZGV4IGEyYjE4YTlmMTY5NGMuLmVhZjc0MzhiOWViZjkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvYmFja3RyYWNrLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9iYWNrdHJhY2suYwpAQCAtNTgyLDE2ICYjNDM7NTgyLDI5IEBAIHN0YXRpYyBpbnQgYmFja3RyYWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCwgaW50IHN1YnNlcV9pZHgsCiAJCQkgICovCiAJCX0KIAl9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9MRCkgewotCQlpZiAoIWJ0X2lzX3JlZ19zZXQoYnQsIGRyZWcpKQotCQkJcmV0dXJuIDA7Ci0JCWJ0X2NsZWFyX3JlZyhidCwgZHJlZyk7CiAJCS8qIEl0JiMzOTtzIGxkX2ltbTY0IG9yIGxkX2FicyBvciBsZF9pbmQuCiAJCSAqIEZvciBsZF9pbW02NCBubyBmdXJ0aGVyIHRyYWNraW5nIG9mIHByZWNpc2lvbgogCQkgKiBpbnRvIHBhcmVudCBpcyBuZWNlc3NhcnkKIAkJICovCi0JCWlmIChtb2RlID09IEJQRl9JTkQgfHwgbW9kZSA9PSBCUEZfQUJTKQotCQkJLyogdG8gYmUgYW5hbHl6ZWQgKi8KLQkJCXJldHVybiAtRU5PVFNVUFA7CiYjNDM7CQlpZiAobW9kZSA9PSBCUEZfSU1NKSB7CiYjNDM7CQkJYnRfY2xlYXJfcmVnKGJ0LCBkcmVnKTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsJCS8qCiYjNDM7CQkgKiBCUEZfe0lORCxBQlN9IGFyZSBtb2RlbGxlZCBhcyB0d28gYnJhbmNoZXM6CiYjNDM7CQkgKiAtIGZhbGx0aHJvdWdoOwomIzQzOwkJICogLSBpbXBsaWNpdCBzdWJwcm9ncmFtIGV4aXQuCiYjNDM7CQkgKiBJdCBpcyBuZWNlc3NhcnkgdG8gc3dpdGNoIGN1cnJlbnQgZnJhbWUgaWYKJiM0MzsJCSAqIGltcGxpY2l0IHN1YnByb2dyYW0gZXhpdCBicmFuY2ggaXMgYmFja3RyYWNrZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChtb2RlID09IEJQRl9JTkQgfHwgbW9kZSA9PSBCUEZfQUJTKSB7CiYjNDM7CQkJaWYgKGJ0X2lzX3JlZ19zZXQoYnQsIGRyZWcpKQomIzQzOwkJCQlyZXR1cm4gLUVOT1RTVVBQOwomIzQzOwkJCWlmIChzdWJzZXFfaWR4ICE9IGlkeCAmIzQzOyAxKQomIzQzOwkJCQlpZiAoYnRfc3VicHJvZ19lbnRlcihidCkpCiYjNDM7CQkJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KIAl9CiAJLyogUHJvcGFnYXRlIHByZWNpc2lvbiBtYXJrcyB0byBsaW5rZWQgcmVnaXN0ZXJzLCB0byBhY2NvdW50IGZvcgogCSAqIHJlZ2lzdGVycyBtYXJrZWQgYXMgcHJlY2lzZSBpbiB0aGlzIGZ1bmN0aW9uLgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3N1YnByb2dfcHJlY2lzaW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3VicHJvZ19wcmVjaXNpb24uYwppbmRleCBkMjFkMzJmNmE2NzYwLi5lMTc0YTkwNWM1NjI4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3VicHJvZ19wcmVjaXNpb24uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3VicHJvZ19wcmVjaXNpb24uYwpAQCAtODQ2LDQgJiM0Mzs4NDYsNTUgQEAgX19uYWtlZCBpbnQgc3VicHJvZ19yZXN1bHRfdGFpbF9jYWxsKHZvaWQpCiAJKTsKIH0KIAomIzQzO19fbmFrZWQgX19ub2lubGluZSBfX3VzZWQKJiM0MztzdGF0aWMgaW50IGxkX2Fic19zdWJwcm9nKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkJJiMzNDtyNiA9IHIxOyYjMzQ7CiYjNDM7CQkmIzM0O3I3ID0gcjE7JiMzNDsKJiM0MzsJCSYjMzQ7LjhieXRlICVbbGRfYWJzXTsmIzM0OwomIzQzOwkJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CQk6CiYjNDM7CQk6IF9faW1tX2luc24obGRfYWJzLCBCUEZfTERfQUJTKEJQRl9XLCAwKSkKJiM0MzsJCTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQnVnZ3kgdmVyaWZpZXIgZGlkIG5vdCBwcm9wZXJseSBiYWNrdHJhY2sgZWFybHkgc3VicHJvZ3JhbSBleGl0CiYjNDM7ICogbW9kZWxsZWQgZm9yIEJQRl9MRCB8IEJQRl9BQlMgaW5zdHJ1Y3Rpb24sIGNhdXNpbmcgYSBzZWdmYXVsdC4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztfX2xvZ19sZXZlbCgyKQomIzQzOy8qIGVhcmx5IGV4aXQgcGF0aCAqLwomIzQzO19fbXNnKCYjMzQ7MzogKDBmKSByMSAmIzQzOz0gcjcmIzM0OykKJiM0MztfX21zZygmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUwOiByZWdzPXI3IHN0YWNrPSBiZWZvcmUgMjogKGJmKSByMSA9IHIxMCYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSA5OiAoMjApIHIwID0gKih1MzIgKilza2JbMF0mIzM0OykKJiM0MztfX21zZygmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDg6IChiZikgcjcgPSByMSYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgNzogKGJmKSByNiA9IHIxJiMzNDspCiYjNDM7X19tc2coJiMzNDttYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSAxOiAoODUpIGNhbGwgcGMmIzQzOzUmIzM0OykKJiM0MztfX21zZygmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUwOiByZWdzPXI3IHN0YWNrPSBiZWZvcmUgMDogKGI3KSByNyA9IC04JiMzNDspCiYjNDM7LyogZmFsbHRocm91Z2ggcGF0aCAqLwomIzQzO19fbXNnKCYjMzQ7MzogKDBmKSByMSAmIzQzOz0gcjcmIzM0OykKJiM0MztfX21zZygmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUwOiByZWdzPXI3IHN0YWNrPSBiZWZvcmUgMjogKGJmKSByMSA9IHIxMCYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSAxMDogKDk1KSBleGl0JiMzNDspCiYjNDM7X19tc2coJiMzNDttYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSA5OiAoMjApIHIwID0gKih1MzIgKilza2JbMF0mIzM0OykKJiM0MztfX21zZygmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDg6IChiZikgcjcgPSByMSYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgNzogKGJmKSByNiA9IHIxJiMzNDspCiYjNDM7X19tc2coJiMzNDttYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSAxOiAoODUpIGNhbGwgcGMmIzQzOzUmIzM0OykKJiM0MztfX21zZygmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUwOiByZWdzPXI3IHN0YWNrPSBiZWZvcmUgMDogKGI3KSByNyA9IC04JiMzNDspCiYjNDM7X19uYWtlZCBpbnQgbGRfYWJzX2JhY2t0cmFja19ib3RoX3BhdGhzKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkJJiMzNDtyNyA9IC04OyYjMzQ7CiYjNDM7CQkmIzM0O2NhbGwgbGRfYWJzX3N1YnByb2c7JiMzNDsKJiM0MzsJCSYjMzQ7cjEgPSByMTA7JiMzNDsKJiM0MzsJCSYjMzQ7cjEgJiM0Mzs9IHI3OyYjMzQ7IC8qIG1hcmsgcjcgYXMgcHJlY2lzZSAqLwomIzQzOwkJJiMzNDsqKHU2NCAqKShyMSAmIzQzOyAwKSA9IDA7JiMzNDsKJiM0MzsJCSYjMzQ7cjAgPSAwOyYjMzQ7CiYjNDM7CQkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJCTo6OiBfX2Nsb2JiZXJfYWxsCiYjNDM7CSk7CiYjNDM7fQomIzQzOwogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzMyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIEJhY2t0cmFjayBJbXBsZW1lbnRhdGlvbioqCgpSaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBnZXQgYSBoYW5kbGUgb24gdGhpcyAmIzM0O2JhY2t0cmFjayYjMzQ7IGxvZ2ljLiBJIGtub3cgdGhlIHBhdGNoIGlzIGluIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYCwgYW5kIHRoYXQgdGhlcmUgc2hvdWxkIGJlIHNvbWUgc2VsZnRlc3RzIGFzc29jaWF0ZWQgd2l0aCBpdC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBnZXR0aW5nIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpdHNlbGYsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgQlBGIHZlcmlmaWVyIGFuZCBLY29uZmlnIHN5c3RlbS4KCk15IHBsYW4gaXMgdG8gZGlnIGludG8gYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgIGRpcmVjdGx5LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSBzdGFuZGFyZCB0b29sa2l0IGZvciB0aGlzIOKAkyBlaXRoZXIgZ3JlcHBpbmcgdGhyb3VnaCB0aGUgY29kZSBmb3IgZnVuY3Rpb24gY2FsbHMgYW5kIGRlcGVuZGVuY2llcywgb3IgSSBtaWdodCBzaW1wbHkgcmVhZCB0aGUgZmlsZSBkaXJlY3RseSwgZGVwZW5kaW5nIG9uIGhvdyBjb21wbGV4IGl0IGlzLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgbG9va2luZyBmb3IgdGhlIGVudHJ5IHBvaW50cyB0aGF0IHRyaWdnZXIgdGhlIGJhY2t0cmFjayBsb2dpYyB3aXRoaW4gdGhlIHZlcmlmaWVyIGFuZCBhbnkgS2NvbmZpZyBvcHRpb25zIHRoYXQgZW5hYmxlIG9yIGRpc2FibGUgaXQuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGVsZW1lbnRzIGFyZSBjb25uZWN0ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIHdpbGwgYmUgY3J1Y2lhbDsgaXTigJlzIGxpa2VseSB0aGF0IHRoZSBiYWNrdHJhY2sgZnVuY3Rpb25hbGl0eSBpcyBjb25kaXRpb25hbCBvbiBjZXJ0YWluIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWFya19jaGFpbl9wcmVjaXNpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYmFja3RyYWNrLmM9NjY4PXZvaWQgYnBmX21hcmtfYWxsX3NjYWxhcnNfcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNjgzLVx0ICogYmVjYXVzZSBwcmVjaXNpb24gbWFya2luZ3MgaW4gY3VycmVudCBub24tY2hlY2twb2ludGVkIHN0YXRlIGFyZVxua2VybmVsL2JwZi9iYWNrdHJhY2suYzo2ODQ6XHQgKiBub3QgbmVlZGVkLiBTZWUgd2h5IGluIHRoZSBjb21tZW50IGluIF9fbWFya19jaGFpbl9wcmVjaXNpb24gYmVsb3cuXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTY4NS1cdCAqL1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9MTIzOT1pbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTU2OC1cbmtlcm5lbC9icGYvc3RhdGVzLmM6MTU2OTpcdC8qIGZvcmdldCBwcmVjaXNlIG1hcmtpbmdzIHdlIGluaGVyaXRlZCwgc2VlIF9fbWFya19jaGFpbl9wcmVjaXNpb24gKi9cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTU3MC1cdGlmIChlbnYtXHUwMDNlYnBmX2NhcGFibGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkyOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZmlsZXMsIGFzIGlmIEkmIzM5O20gdGhpbmtpbmcgaXQgdGhyb3VnaDoKCioqQW5hbHl6aW5nIEJQRiBCYWNrdHJhY2tpbmcgYW5kIFZlcmlmaWNhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AgYW5kIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBMZXQmIzM5O3MgcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZSBCUEYgdmVyaWZpZXIgaGFuZGxlcyBwb3RlbnRpYWxseSBjb21wbGV4IEJQRiBwcm9ncmFtcyBhbmQgd2hhdCBvcHRpbWl6YXRpb25zIG9yIGJhY2t0cmFja2luZyBtZXRob2RzIGFyZSBpbiBwbGF5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHZlcmlmaWVyJiMzOTtzIGxvZ2ljIGludGVyYWN0cyB3aXRoIHRoZSBiYWNrdHJhY2tpbmcgbWVjaGFuaXNtcy4KCkkgc3VzcGVjdCB0aGF0IGBiYWNrdHJhY2suY2AgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyBzaXR1YXRpb25zIHdoZXJlIHRoZSBpbml0aWFsIGFuYWx5c2lzIGlzIHRvbyBjb25zZXJ2YXRpdmUgb3IgZW5jb3VudGVycyBjb250cm9sIGZsb3cgdGhhdCBpdCBzdHJ1Z2dsZXMgd2l0aCBkdXJpbmcgaW5pdGlhbCBzdGF0aWMgYW5hbHlzaXMuIElzIGl0IGJhc2VkIG9uIGEgbGltaXRlZCBleHBsb3JhdGlvbiBvZiBwb3NzaWJsZSBleGVjdXRpb24gcGF0aHM/IElzIGl0IHNvbWUgc29ydCBvZiBhIGxpbWl0ZWQgZm9ybSBvZiBzeW1ib2xpYyBleGVjdXRpb24/IEl0IHNob3VsZCB0cnkgdG8gZmluZCB3YXlzIHRvIG1ha2UgaXQgbW9yZSBwcmVjaXNlLgoKQW5kIHRoZW4gdGhlIGB2ZXJpZmllci5jYCBmaWxlIOKAkyB0aGF0JiMzOTtzIHRoZSBjb3JlLiBJIGV4cGVjdCB0byBzZWUgdGhlIG1haW4gc3RhdGUgbWFjaGluZXMgYW5kIGRhdGEgc3RydWN0dXJlcyBvZiB0aGUgdmVyaWZpZXIgaW4gdGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgYmFja3RyYWNraW5nIGludGVyZmFjZXMgd2l0aCB0aGUgcmVndWxhciB2ZXJpZmljYXRpb24gcHJvY2Vzcy4gSXMgaXQgY2FsbGVkIGluIHJlc3BvbnNlIHRvIGEgc3BlY2lmaWMgY29uZGl0aW9uLCBvciBpcyBpdCBtb3JlIGludGVncmF0ZWQ/IElzIHRoZSBiYWNrdHJhY2tpbmcgdXNlZCB0byByZXNvbHZlIGluZGlyZWN0IGp1bXBzIG9yIGNvbXBsZXggbG9vcCBzdHJ1Y3R1cmVzPyBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgdmVyaWZpZXIgZW5zdXJlcyB0aGF0IHRoZSBCUEYgcHJvZ3JhbSBpcyBzYWZlIHRvIGV4ZWN1dGUsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgbWVtb3J5IGFjY2VzcyBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSXQmIzM5O3MgcHJvYmFibHkgYSBzdGF0ZWZ1bCBwcm9jZXNzLiBEb2VzIGl0IGNoZWNrIGZvciB0aGluZ3MgbGlrZSBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcywgdW5pbml0aWFsaXplZCBkYXRhIGFjY2VzcywgYW5kIGluZmluaXRlIGxvb3BzPwoKSSBhbSBhbHNvIGludGVyZXN0ZWQgaW4gdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgYmFja3RyYWNraW5nIHN0cmF0ZWdpZXMgb24gcGVyZm9ybWFuY2UuIEFyZSB0aGVyZSB0cmFkZS1vZmZzIGJldHdlZW4gdGhvcm91Z2huZXNzIGFuZCBzcGVlZD8gSG93IGFyZSB0aGVzZSB0cmFkZS1vZmZzIG1hbmFnZWQgaW4gdGhlIGNvZGU/IElzIHRoZXJlIGEgd2F5IHRvIHR3ZWFrIHRoZSBiYWNrdHJhY2tpbmcgYmVoYXZpb3I/CgpUaW1lIHRvIGRpZyBpbi4gVGhpcyBpcyBnb2luZyB0byBiZSBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYmFja3RyYWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU4MDpcdFx0XHRcdCAgKiB0aGlzIGluc24sIHNvIGZvciB0aGUgSy1iYXNlZCBjb25kaXRpb25hbFxuIDU4MTpcdFx0XHRcdCAgKiB0aGVyZSBpcyBub3RoaW5nIG5ldyB0byBiZSBtYXJrZWQuXG4gNTgyOlx0XHRcdFx0ICAqL1xuIDU4MzpcdFx0XHR9XG4gNTg0Olx0XHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9MRCkge1xuIDU4NTpcdFx0XHQvKiBJdCYjMzk7cyBsZF9pbW02NCBvciBsZF9hYnMgb3IgbGRfaW5kLlxuIDU4NjpcdFx0XHQgKiBGb3IgbGRfaW1tNjQgbm8gZnVydGhlciB0cmFja2luZyBvZiBwcmVjaXNpb25cbiA1ODc6XHRcdFx0ICogaW50byBwYXJlbnQgaXMgbmVjZXNzYXJ5XG4gNTg4Olx0XHRcdCAqL1xuIDU4OTpcdFx0XHRpZiAobW9kZSA9PSBCUEZfSU1NKSB7XG4gNTkwOlx0XHRcdFx0YnRfY2xlYXJfcmVnKGJ0LCBkcmVnKTtcbiA1OTE6XHRcdFx0XHRyZXR1cm4gMDtcbiA1OTI6XHRcdFx0fVxuIDU5MzpcdFx0XHQvKlxuIDU5NDpcdFx0XHQgKiBCUEZfe0lORCxBQlN9IGFyZSBtb2RlbGxlZCBhcyB0d28gYnJhbmNoZXM6XG4gNTk1Olx0XHRcdCAqIC0gZmFsbHRocm91Z2g7XG4gNTk2Olx0XHRcdCAqIC0gaW1wbGljaXQgc3VicHJvZ3JhbSBleGl0LlxuIDU5NzpcdFx0XHQgKiBJdCBpcyBuZWNlc3NhcnkgdG8gc3dpdGNoIGN1cnJlbnQgZnJhbWUgaWZcbiA1OTg6XHRcdFx0ICogaW1wbGljaXQgc3VicHJvZ3JhbSBleGl0IGJyYW5jaCBpcyBiYWNrdHJhY2tlZC5cbiA1OTk6XHRcdFx0ICovXG4gNjAwOlx0XHRcdGlmIChtb2RlID09IEJQRl9JTkQgfHwgbW9kZSA9PSBCUEZfQUJTKSB7XG4gNjAxOlx0XHRcdFx0aWYgKGJ0X2lzX3JlZ19zZXQoYnQsIGRyZWcpKVxuIDYwMjpcdFx0XHRcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbiA2MDM6XHRcdFx0XHRpZiAoc3Vic2VxX2lkeCAhPSBpZHggJiM0MzsgMSlcbiA2MDQ6XHRcdFx0XHRcdGlmIChidF9zdWJwcm9nX2VudGVyKGJ0KSlcbiA2MDU6XHRcdFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gNjA2Olx0XHRcdFx0cmV0dXJuIDA7XG4gNjA3Olx0XHRcdH1cbiA2MDg6XHRcdH1cbiA2MDk6XHRcdC8qIFByb3BhZ2F0ZSBwcmVjaXNpb24gbWFya3MgdG8gbGlua2VkIHJlZ2lzdGVycywgdG8gYWNjb3VudCBmb3JcbiA2MTA6XHRcdCAqIHJlZ2lzdGVycyBtYXJrZWQgYXMgcHJlY2lzZSBpbiB0aGlzIGZ1bmN0aW9uLlxuIDYxMTpcdFx0ICovXG4gNjEyOlx0XHRicGZfYnRfc3luY19saW5rZWRfcmVncyhidCwgaGlzdCk7XG4gNjEzOlx0XHRyZXR1cm4gMDtcbiA2MTQ6XHR9XG4gNjE1Olx0XG4gNjE2Olx0LyogdGhlIHNjYWxhciBwcmVjaXNpb24gdHJhY2tpbmcgYWxnb3JpdGhtOlxuIDYxNzpcdCAqIC4gYXQgdGhlIHN0YXJ0IGFsbCByZWdpc3RlcnMgaGF2ZSBwcmVjaXNlPWZhbHNlLlxuIDYxODpcdCAqIC4gc2NhbGFyIHJhbmdlcyBhcmUgdHJhY2tlZCBhcyBub3JtYWwgdGhyb3VnaCBhbHUgYW5kIGptcCBpbnNucy5cbiA2MTk6XHQgKiAuIG9uY2UgcHJlY2lzZSB2YWx1ZSBvZiB0aGUgc2NhbGFyIHJlZ2lzdGVyIGlzIHVzZWQgaW46XG4gNjIwOlx0ICogICAuICBwdHIgJiM0Mzsgc2NhbGFyIGFsdVxuIDYyMTpcdCAqICAgLiBpZiAoc2NhbGFyIGNvbmQgS3xzY2FsYXIpXG4gNjIyOlx0ICogICAuICBoZWxwZXJfY2FsbCguLiwgc2NhbGFyLCAuLi4pIHdoZXJlIEFSR19DT05TVCBpcyBleHBlY3RlZFxuIDYyMzpcdCAqICAgYmFja3RyYWNrIHRocm91Z2ggdGhlIHZlcmlmaWVyIHN0YXRlcyBhbmQgbWFyayBhbGwgcmVnaXN0ZXJzIGFuZFxuIDYyNDpcdCAqICAgc3RhY2sgc2xvdHMgd2l0aCBzcGlsbGVkIGNvbnN0YW50cyB0aGF0IHRoZXNlIHNjYWxhciByZWdpc3RlcnNcbiA2MjU6XHQgKiAgIHNob3VsZCBiZSBwcmVjaXNlLlxuIDYyNjpcdCAqIC4gZHVyaW5nIHN0YXRlIHBydW5pbmcgdHdvIHJlZ2lzdGVycyAob3Igc3BpbGxlZCBzdGFjayBzbG90cylcbiA2Mjc6XHQgKiAgIGFyZSBlcXVpdmFsZW50IGlmIGJvdGggYXJlIG5vdCBwcmVjaXNlLlxuIDYyODpcdCAqXG4gNjI5Olx0ICogTm90ZSB0aGUgdmVyaWZpZXIgY2Fubm90IHNpbXBseSB3YWxrIHJlZ2lzdGVyIHBhcmVudGFnZSBjaGFpbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTU2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYCoqCgpBbHJpZ2h0LCBJJiMzOTttIGhlYWRpbmcgaW50byBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AuIE15IGdvYWwgaGVyZSBpcyBzdHJhaWdodGZvcndhcmQ6IEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRoZSByZWxldmFudCBBUEkgc3VyZmFjZSBvZiB0aGlzIG1vZHVsZS4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gaWRlbnRpZnkgdGhvc2UgY3J1Y2lhbCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgb3IgYXJlIGludGVuZGVkIGFzIHRoZSBpbml0aWFsIGVudHJ5IHBvaW50LiBTbywgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZXhwb3J0ZWQgc3ltYm9scywgdGhlIG5vbi1zdGF0aWMgb25lcywgYW5kIGFueSBvYnZpb3VzIGVudHJ5IHBvaW50cy4gSSYjMzk7bSBza2lwcGluZyB0aGUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3Igbm93OyBJIGNhbiBhbHdheXMgY29tZSBiYWNrIHRvIHRob3NlIGlmIHRoZSBoaWdoLWxldmVsIHBpY3R1cmUgaXNuJiMzOTt0IGNsZWFyIGVub3VnaC4gVGhpcyBpcyBhYm91dCBlZmZpY2llbnQgY29kZSBuYXZpZ2F0aW9uLCBub3QgYSBkZWVwIGRpdmUgaW50byBldmVyeSBsaW5lIGp1c3QgeWV0LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYmFja3RyYWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NjA6XHQgKlxuIDY2MTpcdCAqIEFsc28gaWYgcGFyZW50JiMzOTtzIGN1cmZyYW1lIFx1MDAzZSBmcmFtZSB3aGVyZSBiYWNrdHJhY2tpbmcgc3RhcnRlZCxcbiA2NjI6XHQgKiB0aGUgdmVyaWZpZXIgbmVlZCB0byBtYXJrIHJlZ2lzdGVycyBpbiBib3RoIGZyYW1lcywgb3RoZXJ3aXNlIGNhbGxlZXNcbiA2NjM6XHQgKiBtYXkgaW5jb3JyZWN0bHkgcHJ1bmUgY2FsbGVycy4gVGhpcyBpcyBzaW1pbGFyIHRvXG4gNjY0Olx0ICogY29tbWl0IDc2NDBlYWQ5MzkyNCAoXCYjMzQ7YnBmOiB2ZXJpZmllcjogbWFrZSBzdXJlIGNhbGxlZXMgZG9uJiMzOTt0IHBydW5lIHdpdGggY2FsbGVyIGRpZmZlcmVuY2VzXCYjMzQ7KVxuIDY2NTpcdCAqXG4gNjY2Olx0ICogRm9yIG5vdyBiYWNrdHJhY2tpbmcgZmFsbHMgYmFjayBpbnRvIGNvbnNlcnZhdGl2ZSBtYXJraW5nLlxuIDY2NzpcdCAqL1xuIDY2ODpcdHZvaWQgYnBmX21hcmtfYWxsX3NjYWxhcnNfcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIDY2OTpcdFx0XHRcdFx0IHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0KVxuIDY3MDpcdHtcbiA2NzE6XHRcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqZnVuYztcbiA2NzI6XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XG4gNjczOlx0XHRpbnQgaSwgajtcbiA2NzQ6XHRcbiA2NzU6XHRcdGlmIChlbnYtXHUwMDNlbG9nLmxldmVsIFx1MDAyNiBCUEZfTE9HX0xFVkVMMikge1xuIDY3NjpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZSVkOiBmYWxsaW5nIGJhY2sgdG8gZm9yY2luZyBhbGwgc2NhbGFycyBwcmVjaXNlXFxuXCYjMzQ7LFxuIDY3NzpcdFx0XHRcdHN0LVx1MDAzZWN1cmZyYW1lKTtcbiA2Nzg6XHRcdH1cbiA2Nzk6XHRcbiA2ODA6XHRcdC8qIGJpZyBoYW1tZXI6IG1hcmsgYWxsIHNjYWxhcnMgcHJlY2lzZSBpbiB0aGlzIHBhdGguXG4gNjgxOlx0XHQgKiBwb3Bfc3RhY2sgbWF5IHN0aWxsIGdldCAhcHJlY2lzZSBzY2FsYXJzLlxuIDY4MjpcdFx0ICogV2UgYWxzbyBza2lwIGN1cnJlbnQgc3RhdGUgYW5kIGdvIHN0cmFpZ2h0IHRvIGZpcnN0IHBhcmVudCBzdGF0ZSxcbiA2ODM6XHRcdCAqIGJlY2F1c2UgcHJlY2lzaW9uIG1hcmtpbmdzIGluIGN1cnJlbnQgbm9uLWNoZWNrcG9pbnRlZCBzdGF0ZSBhcmVcbiA2ODQ6XHRcdCAqIG5vdCBuZWVkZWQuIFNlZSB3aHkgaW4gdGhlIGNvbW1lbnQgaW4gX19tYXJrX2NoYWluX3ByZWNpc2lvbiBiZWxvdy5cbiA2ODU6XHRcdCAqL1xuIDY4NjpcdFx0Zm9yIChzdCA9IHN0LVx1MDAzZXBhcmVudDsgc3Q7IHN0ID0gc3QtXHUwMDNlcGFyZW50KSB7XG4gNjg3Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBzdC1cdTAwM2VjdXJmcmFtZTsgaSYjNDM7JiM0MzspIHtcbiA2ODg6XHRcdFx0XHRmdW5jID0gc3QtXHUwMDNlZnJhbWVbaV07XG4gNjg5Olx0XHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgQlBGX1JFR19GUDsgaiYjNDM7JiM0MzspIHtcbiA2OTA6XHRcdFx0XHRcdHJlZyA9IFx1MDAyNmZ1bmMtXHUwMDNlcmVnc1tqXTtcbiA2OTE6XHRcdFx0XHRcdGlmIChyZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUgfHwgcmVnLVx1MDAzZXByZWNpc2UpXG4gNjkyOlx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDY5MzpcdFx0XHRcdFx0cmVnLVx1MDAzZXByZWNpc2UgPSB0cnVlO1xuIDY5NDpcdFx0XHRcdFx0aWYgKGVudi1cdTAwM2Vsb2cubGV2ZWwgXHUwMDI2IEJQRl9MT0dfTEVWRUwyKSB7XG4gNjk1Olx0XHRcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtmb3JjZV9wcmVjaXNlOiBmcmFtZSVkOiBmb3JjaW5nIHIlZCB0byBiZSBwcmVjaXNlXFxuXCYjMzQ7LFxuIDY5NjpcdFx0XHRcdFx0XHRcdGksIGopO1xuIDY5NzpcdFx0XHRcdFx0fVxuIDY5ODpcdFx0XHRcdH1cbiA2OTk6XHRcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBmdW5jLVx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRTsgaiYjNDM7JiM0MzspIHtcbiA3MDA6XHRcdFx0XHRcdGlmICghYnBmX2lzX3NwaWxsZWRfcmVnKFx1MDAyNmZ1bmMtXHUwMDNlc3RhY2tbal0pKVxuIDcwMTpcdFx0XHRcdFx0XHRjb250aW51ZTtcbiA3MDI6XHRcdFx0XHRcdHJlZyA9IFx1MDAyNmZ1bmMtXHUwMDNlc3RhY2tbal0uc3BpbGxlZF9wdHI7XG4gNzAzOlx0XHRcdFx0XHRpZiAocmVnLVx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFIHx8IHJlZy1cdTAwM2VwcmVjaXNlKVxuIDcwNDpcdFx0XHRcdFx0XHRjb250aW51ZTtcbiA3MDU6XHRcdFx0XHRcdHJlZy1cdTAwM2VwcmVjaXNlID0gdHJ1ZTtcbiA3MDY6XHRcdFx0XHRcdGlmIChlbnYtXHUwMDNlbG9nLmxldmVsIFx1MDAyNiBCUEZfTE9HX0xFVkVMMikge1xuIDcwNzpcdFx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Zm9yY2VfcHJlY2lzZTogZnJhbWUlZDogZm9yY2luZyBmcCVkIHRvIGJlIHByZWNpc2VcXG5cJiMzNDssXG4gNzA4Olx0XHRcdFx0XHRcdFx0aSwgLShqICYjNDM7IDEpICogOCk7XG4gNzA5Olx0XHRcdFx0XHR9XG4gNzEwOlx0XHRcdFx0fVxuIDcxMTpcdFx0XHR9XG4gNzEyOlx0XHR9XG4gNzEzOlx0fVxuIDcxNDpcdFxuIDcxNTpcdC8qXG4gNzE2Olx0ICogYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKCkgYmFja3RyYWNrcyBCUEYgcHJvZ3JhbSBpbnN0cnVjdGlvbiBzZXF1ZW5jZSBhbmRcbiA3MTc6XHQgKiBjaGFpbiBvZiB2ZXJpZmllciBzdGF0ZXMgbWFraW5nIHN1cmUgdGhhdCByZWdpc3RlciAqcmVnbm8qIChpZiByZWdubyBcdTAwM2U9IDApXG4gNzE4Olx0ICogYW5kL29yIHN0YWNrIHNsb3QgKnNwaSogKGlmIHNwaSBcdTAwM2U9IDApIGFyZSBtYXJrZWQgYXMgcHJlY2lzZWx5IHRyYWNrZWRcbiA3MTk6XHQgKiBTQ0FMQVJTLCBhcyB3ZWxsIGFzIGFueSBvdGhlciByZWdpc3RlcnMgYW5kIHNsb3RzIHRoYXQgY29udHJpYnV0ZSB0b1xuIDcyMDpcdCAqIGEgdHJhY2tlZCBzdGF0ZSBvZiBnaXZlbiByZWdpc3RlcnMvc3RhY2sgc2xvdHMsIGRlcGVuZGluZyBvbiBzcGVjaWZpYyBCUEZcbiA3MjE6XHQgKiBhc3NlbWJseSBpbnN0cnVjdGlvbnMgKHNlZSBiYWNrdHJhY2tfaW5zbnMoKSBmb3IgZXhhY3QgaW5zdHJ1Y3Rpb24gaGFuZGxpbmdcbiA3MjI6XHQgKiBsb2dpYykuIFRoaXMgYmFja3RyYWNraW5nIHJlbGllcyBvbiByZWNvcmRlZCBqbXBfaGlzdG9yeSBhbmQgaXMgYWJsZSB0b1xuIDcyMzpcdCAqIHRyYXZlcnNlIGVudGlyZSBjaGFpbiBvZiBwYXJlbnQgc3RhdGVzLiBUaGlzIHByb2Nlc3MgZW5kcyBvbmx5IHdoZW4gYWxsIHRoZVxuIDcyNDpcdCAqIG5lY2Vzc2FyeSByZWdpc3RlcnMvc2xvdHMgYW5kIHRoZWlyIHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzIGFyZSBtYXJrZWQgYXNcbiA3MjU6XHQgKiBwcmVjaXNlLlxuIDcyNjpcdCAqXG4gNzI3Olx0ICogT25lIGltcG9ydGFudCBhbmQgc3VidGxlIGFzcGVjdCBpcyB0aGF0IHByZWNpc2UgbWFya3MgKmRvIG5vdCBtYXR0ZXIqIGluXG4gNzI4Olx0ICogdGhlIGN1cnJlbnRseSB2ZXJpZmllZCBzdGF0ZSAoY3VycmVudCBzdGF0ZSkuIEl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kXG4gNzI5Olx0ICogd2h5IHRoaXMgaXMgdGhlIGNhc2UuXG4gNzMwOlx0ICpcbiA3MzE6XHQgKiBGaXJzdCwgbm90ZSB0aGF0IGN1cnJlbnQgc3RhdGUgaXMgdGhlIHN0YXRlIHRoYXQgaXMgbm90IHlldCBcJiMzNDtjaGVja3BvaW50ZWRcJiMzNDssXG4gNzMyOlx0ICogaS5lLiwgaXQgaXMgbm90IHlldCBwdXQgaW50byBlbnYtXHUwMDNlZXhwbG9yZWRfc3RhdGVzLCBhbmQgaXQgaGFzIG5vIGNoaWxkcmVuXG4gNzMzOlx0ICogc3RhdGVzIGFzIHdlbGwuIEl0JiMzOTtzIGVwaGVtZXJhbCwgYW5kIGNhbiBlbmQgdXAgZWl0aGVyIGEpIGJlaW5nIGRpc2NhcmRlZCBpZlxuIDczNDpcdCAqIGNvbXBhdGlibGUgZXhwbG9yZWQgc3RhdGUgaXMgZm91bmQgYXQgc29tZSBwb2ludCBvciBCUEZfRVhJVCBpbnN0cnVjdGlvbiBpc1xuIDczNTpcdCAqIHJlYWNoZWQgb3IgYikgY2hlY2twb2ludGVkIGFuZCBwdXQgaW50byBlbnYtXHUwMDNlZXhwbG9yZWRfc3RhdGVzLCBicmFuY2hpbmcgb3V0XG4gNzM2Olx0ICogaW50byBvbmUgb3IgbW9yZSBjaGlsZHJlbiBzdGF0ZXMuXG4gNzM3Olx0ICpcbiA3Mzg6XHQgKiBJbiB0aGUgZm9ybWVyIGNhc2UsIHByZWNpc2UgbWFya2luZ3MgaW4gY3VycmVudCBzdGF0ZSBhcmUgY29tcGxldGVseVxuIDczOTpcdCAqIGlnbm9yZWQgYnkgc3RhdGUgY29tcGFyaXNvbiBjb2RlIChzZWUgcmVnc2FmZSgpIGZvciBkZXRhaWxzKS4gT25seVxuIDc0MDpcdCAqIGNoZWNrcG9pbnRlZCAoXCYjMzQ7b2xkXCYjMzQ7KSBzdGF0ZSBwcmVjaXNlIG1hcmtpbmdzIGFyZSBpbXBvcnRhbnQsIGFuZCBpZiBvbGRcbiA3NDE6XHQgKiBzdGF0ZSYjMzk7cyByZWdpc3Rlci9zbG90IGlzIHByZWNpc2UsIHJlZ3NhZmUoKSBhc3N1bWVzIGN1cnJlbnQgc3RhdGUmIzM5O3NcbiA3NDI6XHQgKiByZWdpc3Rlci9zbG90IGFzIHByZWNpc2UgYW5kIGNoZWNrcyB2YWx1ZSByYW5nZXMgZXhhY3RseSBhbmQgcHJlY2lzZWx5LiBJZlxuIDc0MzpcdCAqIHN0YXRlcyB0dXJuIG91dCB0byBiZSBjb21wYXRpYmxlLCBjdXJyZW50IHN0YXRlJiMzOTtzIG5lY2Vzc2FyeSBwcmVjaXNlXG4gNzQ0Olx0ICogbWFya2luZ3MgYW5kIGFueSByZXF1aXJlZCBwYXJlbnQgc3RhdGVzJiMzOTsgcHJlY2lzZSBtYXJraW5ncyBhcmUgZW5mb3JjZWRcbiA3NDU6XHQgKiBhZnRlciB0aGUgZmFjdCB3aXRoIHByb3BhZ2F0ZV9wcmVjaXNpb24oKSBsb2dpYywgYWZ0ZXIgdGhlIGZhY3QuIEJ1dCBpdCYjMzk7c1xuIDc0NjpcdCAqIGltcG9ydGFudCB0byByZWFsaXplIHRoYXQgaW4gdGhpcyBjYXNlLCBldmVuIGFmdGVyIG1hcmtpbmcgY3VycmVudCBzdGF0ZVxuIDc0NzpcdCAqIHJlZ2lzdGVycy9zbG90cyBhcyBwcmVjaXNlLCB3ZSBpbW1lZGlhdGVseSBkaXNjYXJkIGN1cnJlbnQgc3RhdGUuIFNvIHdoYXRcbiA3NDg6XHQgKiBhY3R1YWxseSBtYXR0ZXJzIGlzIGFueSBvZiB0aGUgcHJlY2lzZSBtYXJraW5ncyBwcm9wYWdhdGVkIGludG8gY3VycmVudFxuIDc0OTpcdCAqIHN0YXRlJiMzOTtzIHBhcmVudCBzdGF0ZXMsIHdoaWNoIGFyZSBhbHdheXMgY2hlY2twb2ludGVkIChkdWUgdG8gYikgY2FzZSBhYm92ZSkuXG4gNzUwOlx0ICogQXMgc3VjaCwgZm9yIHNjZW5hcmlvIGEpIGl0IGRvZXNuJiMzOTt0IG1hdHRlciBpZiBjdXJyZW50IHN0YXRlIGhhcyBwcmVjaXNlXG4gNzUxOlx0ICogbWFya2luZ3Mgc2V0IG9yIG5vdC5cbiA3NTI6XHQgKlxuIDc1MzpcdCAqIE5vdywgZm9yIHRoZSBzY2VuYXJpbyBiKSwgY2hlY2twb2ludGluZyBhbmQgZm9ya2luZyBpbnRvIGNoaWxkKHJlbilcbiA3NTQ6XHQgKiBzdGF0ZShzKS4gTm90ZSB0aGF0IGJlZm9yZSBjdXJyZW50IHN0YXRlIGdldHMgdG8gY2hlY2twb2ludGluZyBzdGVwLCBhbnlcbiA3NTU6XHQgKiBwcm9jZXNzZWQgaW5zdHJ1Y3Rpb24gYWx3YXlzIGFzc3VtZXMgcHJlY2lzZSBTQ0FMQVIgcmVnaXN0ZXIvc2xvdFxuIDc1NjpcdCAqIGtub3dsZWRnZTogaWYgcHJlY2lzZSB2YWx1ZSBvciByYW5nZSBpcyB1c2VmdWwgdG8gcHJ1bmUganVtcCBicmFuY2gsIEJQRlxuIDc1NzpcdCAqIHZlcmlmaWVyIHRha2VzIHRoaXMgb3Bwb3J0dW5pdHkgZW50aHVzaWFzdGljYWxseS4gU2ltaWxhcmx5LCB3aGVuXG4gNzU4Olx0ICogcmVnaXN0ZXImIzM5O3MgdmFsdWUgaXMgdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0IG9yIG1lbW9yeSBhZGRyZXNzLCBleGFjdFxuIDc1OTpcdCAqIGtub3dsZWRnZSBvZiBTQ0FMQVIgcmFuZ2UgaXMgYXNzdW1lZCwgY2hlY2tlZCwgYW5kIGVuZm9yY2VkLiBTbywgc2ltaWxhciB0b1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNzAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgQmFja3RyYWNrIExvZ2ljKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGUgY29kZSBhcm91bmQgbGluZXMgNzYwIHRvIDg1MC4gSSByZWNhbGwgdGhhdCBzZWN0aW9uIGJlaW5nIHBhcnRpY3VsYXJseSBpbnZvbHZlZCB3aXRoIHRoZSBiYWNrdHJhY2tpbmcgYWxnb3JpdGhtLiBJIGtub3cgaXQmIzM5O3MgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBCUEYgdmVyaWZpZXIsIGFuZCBhbnkgcG90ZW50aWFsIGluZWZmaWNpZW5jaWVzIG9yIHN1YnRsZSBidWdzIGluIHRoaXMgYXJlYSBjYW4gaGF2ZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIG9yIHdvcnNlLCBvcGVuIHVwIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGV4YWN0bHkgaG93IGl0JiMzOTtzIGhhbmRsaW5nIHRoZSB0cmF2ZXJzYWwgYW5kIHN0YXRlIG1hbmFnZW1lbnQgZHVyaW5nIHRoZSBieXRlY29kZSBhbmFseXNpcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhbnkgbG9naWMgcmVsYXRlZCB0byBkZXRlY3RpbmcgbG9vcHMsIGhhbmRsaW5nIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHRoYXQgY291bGQgbGVhZCB0byBtdWx0aXBsZSBwYXRocywgYW5kIGhvdyBpdCBkZWFscyB3aXRoIHBvdGVudGlhbCBkZWFkIGNvZGUgcGF0aHMuIEkgd2FudCB0byBwYXkgc3BlY2lhbCBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzIHRvIG1haW50YWluIHN0YXRlIGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgYSBiYWNrdHJhY2suIFRpbWUgdG8gZ2V0IHRoZSBnZGIgdXAgYW5kIHJ1bm5pbmcgaWYgSSBuZWVkIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYmFja3RyYWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc2MDpcdCAqIHdoYXQgd2UgbWVudGlvbmVkIGFib3ZlIGFib3V0IHN0YXRlIGNvbXBhcmlzb24gaWdub3JpbmcgcHJlY2lzZSBtYXJraW5nc1xuIDc2MTpcdCAqIGR1cmluZyBzdGF0ZSBjb21wYXJpc29uLCBCUEYgdmVyaWZpZXIgaWdub3JlcyBhbmQgYWxzbyBhc3N1bWVzIHByZWNpc2VcbiA3NjI6XHQgKiBtYXJraW5ncyAqYXQgd2lsbCogZHVyaW5nIGluc3RydWN0aW9uIHZlcmlmaWNhdGlvbiBwcm9jZXNzLiBCdXQgYXMgdmVyaWZpZXJcbiA3NjM6XHQgKiBhc3N1bWVzIHByZWNpc2lvbiwgaXQgYWxzbyBwcm9wYWdhdGVzIGFueSBwcmVjaXNpb24gZGVwZW5kZW5jaWVzIGFjcm9zc1xuIDc2NDpcdCAqIHBhcmVudCBzdGF0ZXMsIHdoaWNoIGFyZSBub3QgeWV0IGZpbmFsaXplZCwgc28gY2FuIGJlIGZ1cnRoZXIgcmVzdHJpY3RlZFxuIDc2NTpcdCAqIGJhc2VkIG9uIG5ldyBrbm93bGVkZ2UgZ2FpbmVkIGZyb20gcmVzdHJpY3Rpb25zIGVuZm9yY2VkIGJ5IHRoZWlyIGNoaWxkcmVuXG4gNzY2Olx0ICogc3RhdGVzLiBUaGlzIGlzIHNvIHRoYXQgb25jZSB0aG9zZSBwYXJlbnQgc3RhdGVzIGFyZSBmaW5hbGl6ZWQsIGkuZS4sIHdoZW5cbiA3Njc6XHQgKiB0aGV5IGhhdmUgbm8gbW9yZSBhY3RpdmUgY2hpbGRyZW4gc3RhdGUsIHN0YXRlIGNvbXBhcmlzb24gbG9naWMgaW5cbiA3Njg6XHQgKiBpc19zdGF0ZV92aXNpdGVkKCkgd291bGQgZW5mb3JjZSBzdHJpY3QgYW5kIHByZWNpc2UgU0NBTEFSIHJhbmdlcywgaWZcbiA3Njk6XHQgKiByZXF1aXJlZCBmb3IgY29ycmVjdG5lc3MuXG4gNzcwOlx0ICpcbiA3NzE6XHQgKiBUbyBidWlsZCBhIGJpdCBtb3JlIGludHVpdGlvbiwgbm90ZSBhbHNvIHRoYXQgb25jZSBhIHN0YXRlIGlzIGNoZWNrcG9pbnRlZCxcbiA3NzI6XHQgKiB0aGUgcGF0aCB3ZSB0b29rIHRvIGdldCB0byB0aGF0IHN0YXRlIGlzIG5vdCBpbXBvcnRhbnQuIFRoaXMgaXMgY3J1Y2lhbFxuIDc3MzpcdCAqIHByb3BlcnR5IGZvciBzdGF0ZSBwcnVuaW5nLiBXaGVuIHN0YXRlIGlzIGNoZWNrcG9pbnRlZCBhbmQgZmluYWxpemVkIGF0XG4gNzc0Olx0ICogc29tZSBpbnN0cnVjdGlvbiBpbmRleCwgaXQgY2FuIGJlIGNvcnJlY3RseSBhbmQgc2FmZWx5IHVzZWQgdG8gXCYjMzQ7c2hvcnRcbiA3NzU6XHQgKiBjaXJjdWl0XCYjMzQ7IGFueSAqY29tcGF0aWJsZSogc3RhdGUgdGhhdCByZWFjaGVzIGV4YWN0bHkgdGhlIHNhbWUgaW5zdHJ1Y3Rpb25cbiA3NzY6XHQgKiBpbmRleC4gSS5lLiwgaWYgd2UganVtcGVkIHRvIHRoYXQgaW5zdHJ1Y3Rpb24gZnJvbSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50XG4gNzc3Olx0ICogY29kZSBwYXRoIHRoYW4gb3JpZ2luYWwgZmluYWxpemVkIHN0YXRlIHdhcyBkZXJpdmVkIGZyb20sIGl0IGRvZXNuJiMzOTt0XG4gNzc4Olx0ICogbWF0dGVyLCBjdXJyZW50IHN0YXRlIGNhbiBiZSBkaXNjYXJkZWQgYmVjYXVzZSBmcm9tIHRoYXQgaW5zdHJ1Y3Rpb25cbiA3Nzk6XHQgKiBmb3J3YXJkIGhhdmluZyBhIGNvbXBhdGlibGUgc3RhdGUgd2lsbCBlbnN1cmUgd2Ugd2lsbCBzYWZlbHkgcmVhY2ggdGhlXG4gNzgwOlx0ICogZXhpdC4gU3RhdGVzIGRlc2NyaWJlIHByZWNvbmRpdGlvbnMgZm9yIGZ1cnRoZXIgZXhwbG9yYXRpb24sIGJ1dCBjb21wbGV0ZWx5XG4gNzgxOlx0ICogZm9yZ2V0IHRoZSBoaXN0b3J5IG9mIGhvdyB3ZSBnb3QgaGVyZS5cbiA3ODI6XHQgKlxuIDc4MzpcdCAqIFRoaXMgYWxzbyBtZWFucyB0aGF0IGV2ZW4gaWYgd2UgbmVlZGVkIHByZWNpc2UgU0NBTEFSIHJhbmdlIHRvIGdldCB0b1xuIDc4NDpcdCAqIGZpbmFsaXplZCBzdGF0ZSwgYnV0IGZyb20gdGhhdCBwb2ludCBmb3J3YXJkICp0aGF0IHNhbWUqIFNDQUxBUiByZWdpc3RlciBpc1xuIDc4NTpcdCAqIG5ldmVyIHVzZWQgaW4gYSBwcmVjaXNlIGNvbnRleHQgKGkuZS4sIGl0JiMzOTtzIHByZWNpc2UgdmFsdWUgaXMgbm90IG5lZWRlZCBmb3JcbiA3ODY6XHQgKiBjb3JyZWN0bmVzcyksIGl0JiMzOTtzIGNvcnJlY3QgYW5kIHNhZmUgdG8gbWFyayBzdWNoIHJlZ2lzdGVyIGFzIFwmIzM0O2ltcHJlY2lzZVwmIzM0O1xuIDc4NzpcdCAqIChpLmUuLCBwcmVjaXNlIG1hcmtpbmcgc2V0IHRvIGZhbHNlKS4gVGhpcyBpcyB3aGF0IHdlIHJlbHkgb24gd2hlbiB3ZSBkb1xuIDc4ODpcdCAqIG5vdCBzZXQgcHJlY2lzZSBtYXJraW5nIGluIGN1cnJlbnQgc3RhdGUuIElmIG5vIGNoaWxkIHN0YXRlIHJlcXVpcmVzXG4gNzg5Olx0ICogcHJlY2lzaW9uIGZvciBhbnkgZ2l2ZW4gU0NBTEFSIHJlZ2lzdGVyLCBpdCYjMzk7cyBzYWZlIHRvIGRpY3RhdGUgdGhhdCBpdCBjYW5cbiA3OTA6XHQgKiBiZSBpbXByZWNpc2UuIElmIGFueSBjaGlsZCBzdGF0ZSBkb2VzIHJlcXVpcmUgdGhpcyByZWdpc3RlciB0byBiZSBwcmVjaXNlLFxuIDc5MTpcdCAqIHdlJiMzOTtsbCBtYXJrIGl0IHByZWNpc2UgbGF0ZXIgcmV0cm9hY3RpdmVseSBkdXJpbmcgcHJlY2lzZSBtYXJraW5nc1xuIDc5MjpcdCAqIHByb3BhZ2F0aW9uIGZyb20gY2hpbGQgc3RhdGUgdG8gcGFyZW50IHN0YXRlcy5cbiA3OTM6XHQgKlxuIDc5NDpcdCAqIFNraXBwaW5nIHByZWNpc2UgbWFya2luZyBzZXR0aW5nIGluIGN1cnJlbnQgc3RhdGUgaXMgYSBtaWxkIHZlcnNpb24gb2ZcbiA3OTU6XHQgKiByZWx5aW5nIG9uIHRoZSBhYm92ZSBvYnNlcnZhdGlvbi4gQnV0IHdlIGNhbiB1dGlsaXplIHRoaXMgcHJvcGVydHkgZXZlblxuIDc5NjpcdCAqIG1vcmUgYWdncmVzc2l2ZWx5IGJ5IHByb2FjdGl2ZWx5IGZvcmdldHRpbmcgYW55IHByZWNpc2UgbWFya2luZyBpbiB0aGVcbiA3OTc6XHQgKiBjdXJyZW50IHN0YXRlICh3aGljaCB3ZSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IHN0YXRlKSwgcmlnaHQgYmVmb3JlIHdlXG4gNzk4Olx0ICogY2hlY2twb2ludCBpdCBhbmQgYnJhbmNoIG9mZiBpbnRvIG5ldyBjaGlsZCBzdGF0ZS4gVGhpcyBpcyBkb25lIGJ5XG4gNzk5Olx0ICogbWFya19hbGxfc2NhbGFyc19pbXByZWNpc2UoKSB0byBob3BlZnVsbHkgZ2V0IG1vcmUgcGVybWlzc2l2ZSBhbmQgZ2VuZXJpY1xuIDgwMDpcdCAqIGZpbmFsaXplZCBzdGF0ZXMgd2hpY2ggaGVscCBpbiBzaG9ydCBjaXJjdWl0aW5nIG1vcmUgZnV0dXJlIHN0YXRlcy5cbiA4MDE6XHQgKi9cbiA4MDI6XHRpbnQgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gODAzOlx0XHRcdFx0ICAgIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0YXJ0aW5nX3N0YXRlLFxuIDgwNDpcdFx0XHRcdCAgICBpbnQgcmVnbm8sXG4gODA1Olx0XHRcdFx0ICAgIGJvb2wgKmNoYW5nZWQpXG4gODA2Olx0e1xuIDgwNzpcdFx0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QgPSBzdGFydGluZ19zdGF0ZTtcbiA4MDg6XHRcdHN0cnVjdCBiYWNrdHJhY2tfc3RhdGUgKmJ0ID0gXHUwMDI2ZW52LVx1MDAzZWJ0O1xuIDgwOTpcdFx0aW50IGZpcnN0X2lkeCA9IHN0LVx1MDAzZWZpcnN0X2luc25faWR4O1xuIDgxMDpcdFx0aW50IGxhc3RfaWR4ID0gc3RhcnRpbmdfc3RhdGUtXHUwMDNlaW5zbl9pZHg7XG4gODExOlx0XHRpbnQgc3Vic2VxX2lkeCA9IC0xO1xuIDgxMjpcdFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpmdW5jO1xuIDgxMzpcdFx0Ym9vbCB0bXAsIHNraXBfZmlyc3QgPSB0cnVlO1xuIDgxNDpcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbiA4MTU6XHRcdGludCBpLCBmciwgZXJyO1xuIDgxNjpcdFxuIDgxNzpcdFx0aWYgKCFlbnYtXHUwMDNlYnBmX2NhcGFibGUpXG4gODE4Olx0XHRcdHJldHVybiAwO1xuIDgxOTpcdFxuIDgyMDpcdFx0Y2hhbmdlZCA9IGNoYW5nZWQgPzogXHUwMDI2dG1wO1xuIDgyMTpcdFx0Lyogc2V0IGZyYW1lIG51bWJlciBmcm9tIHdoaWNoIHdlIGFyZSBzdGFydGluZyB0byBiYWNrdHJhY2sgKi9cbiA4MjI6XHRcdGJ0X2luaXQoYnQsIHN0YXJ0aW5nX3N0YXRlLVx1MDAzZWN1cmZyYW1lKTtcbiA4MjM6XHRcbiA4MjQ6XHRcdC8qIERvIHNhbml0eSBjaGVja3MgYWdhaW5zdCBjdXJyZW50IHN0YXRlIG9mIHJlZ2lzdGVyIGFuZC9vciBzdGFja1xuIDgyNTpcdFx0ICogc2xvdCwgYnV0IGRvbiYjMzk7dCBzZXQgcHJlY2lzZSBmbGFnIGluIGN1cnJlbnQgc3RhdGUsIGFzIHByZWNpc2lvblxuIDgyNjpcdFx0ICogdHJhY2tpbmcgaW4gdGhlIGN1cnJlbnQgc3RhdGUgaXMgdW5uZWNlc3NhcnkuXG4gODI3Olx0XHQgKi9cbiA4Mjg6XHRcdGZ1bmMgPSBzdC1cdTAwM2VmcmFtZVtidC1cdTAwM2VmcmFtZV07XG4gODI5Olx0XHRpZiAocmVnbm8gXHUwMDNlPSAwKSB7XG4gODMwOlx0XHRcdHJlZyA9IFx1MDAyNmZ1bmMtXHUwMDNlcmVnc1tyZWdub107XG4gODMxOlx0XHRcdGlmIChyZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUpIHtcbiA4MzI6XHRcdFx0XHR2ZXJpZmllcl9idWcoZW52LCBcJiMzNDtiYWNrdHJhY2tpbmcgbWlzdXNlXCYjMzQ7KTtcbiA4MzM6XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiA4MzQ6XHRcdFx0fVxuIDgzNTpcdFx0XHRidF9zZXRfcmVnKGJ0LCByZWdubyk7XG4gODM2Olx0XHR9XG4gODM3Olx0XG4gODM4Olx0XHRpZiAoYnRfZW1wdHkoYnQpKVxuIDgzOTpcdFx0XHRyZXR1cm4gMDtcbiA4NDA6XHRcbiA4NDE6XHRcdGZvciAoOzspIHtcbiA4NDI6XHRcdFx0REVDTEFSRV9CSVRNQVAobWFzaywgNjQpO1xuIDg0MzpcdFx0XHR1MzIgaGlzdG9yeSA9IHN0LVx1MDAzZWptcF9oaXN0b3J5X2NudDtcbiA4NDQ6XHRcdFx0c3RydWN0IGJwZl9qbXBfaGlzdG9yeV9lbnRyeSAqaGlzdDtcbiA4NDU6XHRcbiA4NDY6XHRcdFx0aWYgKGVudi1cdTAwM2Vsb2cubGV2ZWwgXHUwMDI2IEJQRl9MT0dfTEVWRUwyKSB7XG4gODQ3Olx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUlZDogbGFzdF9pZHggJWQgZmlyc3RfaWR4ICVkIHN1YnNlcV9pZHggJWQgXFxuXCYjMzQ7LFxuIDg0ODpcdFx0XHRcdFx0YnQtXHUwMDNlZnJhbWUsIGxhc3RfaWR4LCBmaXJzdF9pZHgsIHN1YnNlcV9pZHgpO1xuIDg0OTpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNjUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCUEYgTW9kdWxlIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb2YgYGJwZl9jaGVja2AgYW5kIGBicGZfcHJvZ19sb2FkYCB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIG5hdmlnYXRlIHRoZSBzb3VyY2UuIEkmIzM5O2xsIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBsaXZlIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIEJQRiBpbmZyYXN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBLY29uZmlnIGFuZCBNYWtlZmlsZXMuCgpJJiMzOTtsbCBjaGVjayB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIGFuZCBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGFuZCB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgYXJlIHJlc3BvbnNpYmxlIGZvciBpbmNsdWRpbmcsIG9yIGV4Y2x1ZGluZywgdGhlIHJlbGV2YW50IGNvZGUuIEFybWVkIHdpdGggdGhpcyBpbmZvcm1hdGlvbiwgSSBjYW4gYmV0dGVyIHJlYXNvbiBhYm91dCB0aGUgdmFyaW91cyBjb25maWd1cmF0aW9uIGZsYWdzIHRoYXQgYWZmZWN0IGhvdyB0aGUgQlBGIHN1YnN5c3RlbSBpcyBidWlsdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmFja3RyYWNrXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0xMz1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNS1vYmotJHtDT05GSUdfQlBGX0xTTX1cdCAgJiM0Mzs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU0NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBCUEYgQmFja3RyYWNraW5nIExvZ2ljKioKCk9rYXksIHNvIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYCBpcyBjbGVhcmx5IHBhcnQgb2YgdGhlIEJQRiBzeXN0ZW0sIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29tcGlsYXRpb24gY29udGV4dC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGBDT05GSUdfQlBGX1NZU0NBTExgIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgcmVsYXRlZCB0byB0aGUgQlBGIHN5c2NhbGwgaW50ZXJmYWNlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBvdGhlciBkZXBlbmRlbmNpZXMgb3IgaW1wbGljYXRpb25zIHRoaXMgaGFzLiBNeSBuZXh0IG1vdmUgaXMgdG8gY2hlY2sgdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEJQRiwgaW5jbHVkaW5nIGBCUEZfU1lTQ0FMTGAsIGFyZSBkZWZpbmVkLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGRlcGVuZGVuY2llcyBhc3NvY2lhdGVkIHdpdGggYEJQRl9TWVNDQUxMYCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoaXMgYmFja3RyYWNraW5nIGNvZGUgZml0cyBpbnRvIHRoZSBiaWdnZXIgQlBGIHBpY3R1cmUuIFRoaXMgd2lsbCBsaWtlbHkgc2hvdyBtZSBhbnkgb3RoZXIgZGVwZW5kZW50IGZlYXR1cmVzIG9yIHJlcXVpcmVtZW50cyB0aGF0IEkgc2hvdWxkIHRha2Ugbm90ZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTE4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyB0aGUgcHJvdmlkZWQgdGV4dDoKCioqQlBGIENvbmZpZ3VyYXRpb24gVGhvdWdodHMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIHN1YnN5c3RlbSBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIHRoZSBjb3JlIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB0aGF0IGRlZmluZSB3aGF0IEJQRiBmdW5jdGlvbmFsaXR5IGdldHMgYnVpbHQgaW50byB0aGUga2VybmVsLCB3aGF0IG1vZHVsZXMgYXJlIGF2YWlsYWJsZSwgYW5kIHBvdGVudGlhbGx5IGhvdyB0aGV5IGludGVyYWN0IHdpdGggZWFjaCBvdGhlci4gTGluZSAyNSBtaWdodCBiZSBpbnRyb2R1Y2luZyBhIG5ldyBmZWF0dXJlLCBlbmFibGluZyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBwZXJoYXBzIHNldHRpbmcgdXAgYSBkZXBlbmRlbmN5IHJlbGF0aW9uc2hpcC4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgZmluZGluZyBzb21lIGRldGFpbHMgb24gd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSBhbHNvIHVzaW5nIEJQRiwgb3Igd2hhdCBhcmUgZGVwZW5kZW50IG9uIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjU6XHRtZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgQlBGX1NZU0NBTExcbiAgMjg6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4gIDI5Olx0XHRzZWxlY3QgQlBGXG4gIDMwOlx0XHRzZWxlY3QgSVJRX1dPUktcbiAgMzE6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuICAzMjpcdFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxuICAzMzpcdFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbiAgMzQ6XHRcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG4gIDM1Olx0XHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbiAgMzY6XHRcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXG4gIDM3Olx0XHRkZWZhdWx0IG5cbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xuICA0MDpcdFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cbiAgNDE6XHRcbiAgNDI6XHRjb25maWcgQlBGX0pJVFxuICA0MzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuICA0NDpcdFx0ZGVwZW5kcyBvbiBCUEZcbiAgNDU6XHRcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXG4gIDQ2Olx0XHRzZWxlY3QgRVhFQ01FTVxuICA0NzpcdFx0aGVscFxuICA0ODpcdFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXG4gIDQ5Olx0XHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxuICA1MDpcdFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXG4gIDUxOlx0XHQgIHByb2dyYW1zLlxuICA1MjpcdFxuICA1MzpcdFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcbiAgNTQ6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXG4gIDU1Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcbiAgNTY6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfa2FsbHN5bXMgKG9wdGlvbmFsKVxuICA1NzpcdFxuICA1ODpcdGNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxuICA1OTpcdFx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xuICA2MDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgSEFWRV9FQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX0pJVFxuICA2MTpcdFx0aGVscFxuICA2MjpcdFx0ICBFbmFibGVzIEJQRiBKSVQgYW5kIHJlbW92ZXMgQlBGIGludGVycHJldGVyIHRvIGF2b2lkIHNwZWN1bGF0aXZlXG4gIDYzOlx0XHQgIGV4ZWN1dGlvbiBvZiBCUEYgaW5zdHJ1Y3Rpb25zIGJ5IHRoZSBpbnRlcnByZXRlci5cbiAgNjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MTMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2ODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIEJhY2t0cmFja2luZyBhbmQgVmVyaWZpZXIgSW1wcm92ZW1lbnQgQW5hbHlzaXMqKgoKT2theSwgc28gdGhlIGBCUEZfU1lTQ0FMTGAgY29uZmlnIG9wdGlvbiBpcyByZWxldmFudCBoZXJlLiBMZXQmIzM5O3MgZGlnIGludG8gdGhpcyBwYXRjaC4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoaXMgY2hhbmdlIGluIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYCBpcyBhZGRyZXNzaW5nIGFuIGlzc3VlIGluIHRoZSBCUEYgdmVyaWZpZXImIzM5O3Mgc2NhbGFyIHByZWNpc2lvbiBiYWNrdHJhY2tpbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBCUEZfTERgIGluc3RydWN0aW9ucywgYW5kIHBhcnRpY3VsYXJseSB3aGVuIHRob3NlIGFyZSB1c2VkIHdpdGggYEJQRl9BQlNgIG9yIGBCUEZfSU5EYCB3aXRoaW4gc3VicHJvZ3JhbXMuCgpQcmV2aW91c2x5LCB0aGUgY29kZSB3YXMgaGFuZGxpbmcgdGhlIGBCUEZfTERgIGluc3RydWN0aW9ucywgYW5kIGZvciB0aGUgYGxkX2ltbTY0YCBjYXNlLCBubyBmdXJ0aGVyIHByZWNpc2lvbiB0cmFja2luZyB3YXMgbmVlZGVkLiBIb3dldmVyLCB3aGVuIHdlIHdlcmUgZGVhbGluZyB3aXRoIGBCUEZfSU5EYCBvciBgQlBGX0FCU2AsIHRoZXJlIHdhcyBhIGAtRU5PVFNVUFBgIGVycm9yIHRoYXQgd2FzIHJldHVybmVkLiBOb3csIHRoZXJlIGFyZSBjaGFuZ2VzIHRvIGhvdyB0aGVzZSBhcmUgaGFuZGxlZC4gYEJQRl9JTU1gIGNhc2VzIGFyZSBub3cgaGFuZGxlZCBieSBjbGVhcmluZyB0aGUgcmVnaXN0ZXIuIENydWNpYWxseSwgdGhlIHBhdGNoIG5vdyBtb2RlbHMgYEJQRl97SU5ELCBBQlN9YCBhcyB0d28gYnJhbmNoZXM6IGEgZmFsbHRocm91Z2ggYnJhbmNoIGFuZCBhbiBpbXBsaWNpdCBzdWJwcm9ncmFtIGV4aXQuIFdoZW4gdGhlIGltcGxpY2l0IHN1YnByb2dyYW0gZXhpdCBicmFuY2ggaXMgYmFja3RyYWNrZWQsIHRoZSBjdXJyZW50IGZyYW1lIG5lZWRzIHRvIGJlIHN3aXRjaGVkLgoKRWZmZWN0aXZlbHksIHRoaXMgcGF0Y2ggc2VlbXMgdG8gZml4IGEgYnVnIHdoZXJlIHRoZSB2ZXJpZmllciB3YXNuJiMzOTt0IHByb3Blcmx5IGJhY2t0cmFja2luZyB3aGVuIGEgc3VicHJvZ3JhbSBleGl0ZWQgZWFybHkgZHVlIHRvIGBCUEZfTEQgfCBCUEZfQUJTYCwgbGVhZGluZyB0byBhIHNlZ21lbnRhdGlvbiBmYXVsdC4gVGhpcyBtYWtlcyB0b3RhbCBzZW5zZTsgSSBjYW4gc2VlIGhvdyB0aGlzIHdvdWxkIGNhdXNlIHByb2JsZW1zLgoKR2l2ZW4gdGhpcyBjb250ZXh0LCBhbmQgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgdmVyaWZpZXImIzM5O3Mgcm9sZSBhcyBhIGNyaXRpY2FsIHNlY3VyaXR5IGJvdW5kYXJ5LCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlIG5lZWQgdG8gYmUgZnV6emluZy4gVGhlIEJQRiB2ZXJpZmllciBpcyBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXIgc3BhY2UgdGhyb3VnaCB0aGUgYGJwZigpYCBzeXNjYWxsIGFuZCBjYW4gYmUgbGV2ZXJhZ2VkIGJ5IGJvdGggdW5wcml2aWxlZ2VkIHVzZXJzIGFuZCB0aG9zZSB3aXRoIGNhcGFiaWxpdGllcyBsaWtlIGBDQVBfQlBGYCBvciBgQ0FQX1NZU19BRE1JTmAuIEkgc2hvdWxkIGFic29sdXRlbHkgcHJpb3JpdGl6ZSBmdXp6aW5nIHRoZSBCUEYgdmVyaWZpY2F0aW9uIHByb2Nlc3MsIHBlcmhhcHMgd2l0aCBzb21ldGhpbmcgbGlrZSBTeXprYWxsZXIuCgpOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IHdoYXQgdGhlIGJlc3QgZm9jdXMgc3ltYm9scyBhcmUgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBjaGVjayB0aGUgZXhwb3J0ZWQgYW5kIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cyBpbiBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AgYW5kIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJJiMzOTtsbCBzdGFydCBieSBzZWFyY2hpbmcgZm9yIGZ1bmN0aW9ucyB3aXRoaW4gdGhvc2UgdHdvIGZpbGVzIHNwZWNpZmljYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBicGZfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgODM4IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MzI1PXN0YXRpYyB2b2lkICpwZXJjcHVfYXJyYXlfbWFwX2xvb2t1cF9wZXJjcHVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHUzMiBjcHUpXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTMzOC1cbmtlcm5lbC9icGYvYXJyYXltYXAuYzozMzk6aW50IGJwZl9wZXJjcHVfYXJyYXlfY29weShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTM0MC17XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTM3My0vKiBDYWxsZWQgZnJvbSBzeXNjYWxsICovXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6Mzc0OmludCBicGZfYXJyYXlfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMzc1LXtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MzkyPXN0YXRpYyBsb25nIGFycmF5X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy00MzAtXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6NDMxOmludCBicGZfcGVyY3B1X2FycmF5X3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTQzMi1cdFx0XHQgICAgdTY0IG1hcF9mbGFncylcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9OTMyPXN0YXRpYyB2b2lkICpmZF9hcnJheV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy05MzctLyogb25seSBjYWxsZWQgZnJvbSBzeXNjYWxsICovXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6OTM4OmludCBicGZfZmRfYXJyYXlfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdTMyICp2YWx1ZSlcbmtlcm5lbC9icGYvYXJyYXltYXAuYy05Mzkte1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy05NTctLyogb25seSBjYWxsZWQgZnJvbSBzeXNjYWxsICovXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6OTU4OmludCBicGZfZmRfYXJyYXlfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy05NTktXHRcdFx0XHQgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncylcbi0tXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTEwLS8qIGZvciBhbnkgYnJhbmNoLCBjYWxsLCBleGl0IHJlY29yZCB0aGUgaGlzdG9yeSBvZiBqbXBzIGluIHRoZSBnaXZlbiBzdGF0ZSAqL1xua2VybmVsL2JwZi9iYWNrdHJhY2suYzoxMTppbnQgYnBmX3B1c2hfam1wX2hpc3Rvcnkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyLFxua2VybmVsL2JwZi9iYWNrdHJhY2suYy0xMi1cdFx0XHQgaW50IGluc25fZmxhZ3MsIGludCBzcGksIGludCBmcmFtZSwgdTY0IGxpbmtlZF9yZWdzKVxuLS1cbmtlcm5lbC9icGYvYmFja3RyYWNrLmM9NjY4PXZvaWQgYnBmX21hcmtfYWxsX3NjYWxhcnNfcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtODAxLSAqL1xua2VybmVsL2JwZi9iYWNrdHJhY2suYzo4MDI6aW50IGJwZl9tYXJrX2NoYWluX3ByZWNpc2lvbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi9iYWNrdHJhY2suYy04MDMtXHRcdFx0ICAgIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0YXJ0aW5nX3N0YXRlLFxuLS1cbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYz0xNjI9c3RhdGljIGlubGluZSBib29sIHZhbGlkX29mZnNldHMoY29uc3Qgc3RydWN0IGJwZl9pbnNuX2FycmF5ICppbnNuX2FycmF5LFxuLS1cbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy0xODItXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmM6MTgzOmludCBicGZfaW5zbl9hcnJheV9pbml0KHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy0xODQte1xuLS1cbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy0yMTEtXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmM6MjEyOmludCBicGZfaW5zbl9hcnJheV9yZWFkeShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jLTIxMy17XG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jPTI4Mz1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJwZl9pdGVyX2ZvcHMgPSB7XG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jLTI5My0gKi9cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzoyOTQ6aW50IGJwZl9pdGVyX3JlZ190YXJnZXQoY29uc3Qgc3RydWN0IGJwZl9pdGVyX3JlZyAqcmVnX2luZm8pXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtMjk1LXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9MzMxPXN0YXRpYyB2b2lkIGNhY2hlX2J0Zl9pZChzdHJ1Y3QgYnBmX2l0ZXJfdGFyZ2V0X2luZm8gKnRpbmZvLFxuLS1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy0zMzYtXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6MzM3OmludCBicGZfaXRlcl9wcm9nX3N1cHBvcnRlZChzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtMzM4LXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9NDk5PWJvb2wgYnBmX2xpbmtfaXNfaXRlcihzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jLTUwMy1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo1MDQ6aW50IGJwZl9pdGVyX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy01MDUtXHRcdFx0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9NTg5PXN0YXRpYyBpbnQgcHJlcGFyZV9zZXFfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJwZl9pdGVyX2xpbmsgKmxpbmspXG4tLVxua2VybmVsL2JwZi9icGZfaXRlci5jLTYzMy1cbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo2MzQ6aW50IGJwZl9pdGVyX25ld19mZChzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNjM1LXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9NjU3PXN0cnVjdCBicGZfcHJvZyAqYnBmX2l0ZXJfZ2V0X2luZm8oc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsIGJvb2wgaW5fc3RvcClcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNjc5LVxua2VybmVsL2JwZi9icGZfaXRlci5jOjY4MDppbnQgYnBmX2l0ZXJfcnVuX3Byb2coc3RydWN0IGJwZl9wcm9nICpwcm9nLCB2b2lkICpjdHgpXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNjgxLXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM9MjY1PXN0YXRpYyB2b2lkIGJwZl9zZWxlbV91bmxpbmtfbWFwX25vbG9jayhzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZWxlbSAqc2VsZW0pXG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTI2OS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzoyNzA6aW50IGJwZl9zZWxlbV9saW5rX21hcChzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwICpzbWFwLFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTI3MS1cdFx0ICAgICAgIHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZSAqbG9jYWxfc3RvcmFnZSxcbi0tXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM9MjkwPXN0YXRpYyB2b2lkIGJwZl9zZWxlbV9saW5rX21hcF9ub2xvY2soc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX21hcF9idWNrZXQgKmIsXG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTI5OS0gKi9cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzozMDA6aW50IGJwZl9zZWxlbV91bmxpbmsoc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2VsZW0gKnNlbGVtKVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTMwMS17XG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jPTQ2Mj1zdGF0aWMgaW50IGNoZWNrX2ZsYWdzKGNvbnN0IHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9kYXRhICpvbGRfc2RhdGEsXG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTQ3NS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzo0NzY6aW50IGJwZl9sb2NhbF9zdG9yYWdlX2FsbG9jKHZvaWQgKm93bmVyLFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTQ3Ny1cdFx0XHQgICAgc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX21hcCAqc21hcCxcbi0tXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM9Njk0PXN0YXRpYyB2b2lkIGJwZl9sb2NhbF9zdG9yYWdlX2NhY2hlX2lkeF9mcmVlKHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9jYWNoZSAqY2FjaGUsXG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTcwMS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzo3MDI6aW50IGJwZl9sb2NhbF9zdG9yYWdlX21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy03MDMte1xuLS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy03MTctXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6NzE4OmludCBicGZfbG9jYWxfc3RvcmFnZV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNzE5LVx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jPTY2Nj1zdGF0aWMgdm9pZCBicGZfbHJ1X2xpc3RfaW5pdChzdHJ1Y3QgYnBmX2xydV9saXN0ICpsKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNjgwLVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYzo2ODE6aW50IGJwZl9scnVfaW5pdChzdHJ1Y3QgYnBmX2xydSAqbHJ1LCBib29sIHBlcmNwdSwgdTMyIGhhc2hfb2Zmc2V0LFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy02ODItXHRcdCBkZWxfZnJvbV9odGFiX2Z1bmMgZGVsX2Zyb21faHRhYiwgdm9pZCAqZGVsX2FyZylcbi0tXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5oPTc5PXN0YXRpYyBpbmxpbmUgdm9pZCBicGZfbHJ1X25vZGVfc2V0X3JlZihzdHJ1Y3QgYnBmX2xydV9ub2RlICpub2RlKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmgtODQtXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5oOjg1OmludCBicGZfbHJ1X2luaXQoc3RydWN0IGJwZl9scnUgKmxydSwgYm9vbCBwZXJjcHUsIHUzMiBoYXNoX29mZnNldCxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmgtODYtXHRcdCBkZWxfZnJvbV9odGFiX2Z1bmMgZGVsX2Zyb21faHRhYiwgdm9pZCAqZGVsZXRlX2FyZyk7XG4tLVxua2VybmVsL2JwZi9icGZfbHNtLmM9OTQ9dm9pZCBicGZfbHNtX2ZpbmRfY2dyb3VwX3NoaW0oY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvYnBmX2xzbS5jLTExOC1cbmtlcm5lbC9icGYvYnBmX2xzbS5jOjExOTppbnQgYnBmX2xzbV92ZXJpZnlfcHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqdmxvZyxcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTEyMC1cdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9icGZfbHNtLmM9NDQzPWJvb2wgYnBmX2xzbV9ob29rX3JldHVybnNfZXJybm8odTMyIGJ0Zl9pZClcbi0tXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00NTEtXG5rZXJuZWwvYnBmL2JwZl9sc20uYzo0NTI6aW50IGJwZl9sc21fZ2V0X3JldHZhbF9yYW5nZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00NTMtXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3JldHZhbF9yYW5nZSAqcmV0dmFsX3JhbmdlKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xzbV9wcm90by5jLTE0LSAqL1xua2VybmVsL2JwZi9icGZfbHNtX3Byb3RvLmM6MTU6aW50IGJwZl9sc21fbW1hcF9maWxlKHN0cnVjdCBmaWxlICpmaWxlX19udWxsYWJsZSwgdW5zaWduZWQgbG9uZyByZXFwcm90LFxua2VybmVsL2JwZi9icGZfbHNtX3Byb3RvLmMtMTYtXHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncylcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MzM3PXN0YXRpYyBib29sIGlzX21vZHVsZV9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgaWQpXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTM1MC1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzozNTE6aW50IGJwZl9zdHJ1Y3Rfb3BzX3N1cHBvcnRlZChjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgKnN0X29wcywgdTMyIG1vZmYpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzUyLXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzU3LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjM1ODppbnQgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0KHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYyxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zNTktXHRcdFx0ICAgICBzdHJ1Y3QgYnRmICpidGYsXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTUxMT1zdGF0aWMgaW50IGJwZl9zdHJ1Y3Rfb3BzX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01MjAtXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NTIxOmludCBicGZfc3RydWN0X29wc19tYXBfc3lzX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy01MjItXHRcdFx0XHQgICAgICAgdm9pZCAqdmFsdWUpXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTYzMj1jb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9zdHJ1Y3Rfb3BzX2xpbmtfbG9wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjM2LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjYzNzppbnQgYnBmX3N0cnVjdF9vcHNfcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcyxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy02MzgtXHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTEyNDY9RVhQT1JUX1NZTUJPTF9HUEwoYnBmX3N0cnVjdF9vcHNfaWQpO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjYwLSAqL1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyNjE6aW50IGJwZl9zdHJ1Y3Rfb3BzX2Zvcl9lYWNoX3Byb2coY29uc3Qgdm9pZCAqa2RhdGEsXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI2Mi1cdFx0XHRcdCBpbnQgKCpjYikoc3RydWN0IGJwZl9wcm9nICpwcm9nLCB2b2lkICpkYXRhKSxcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MTQyOD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfc3RydWN0X29wc19tYXBfbG9wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQzNi1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDM3OmludCBicGZfc3RydWN0X29wc19saW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDM4LXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQ5MS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDkyOmludCBicGZfcHJvZ19hc3NvY19zdHJ1Y3Rfb3BzKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9tYXAgKm1hcClcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDkzLXtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTkzNjk9RVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTkzOTEtICovXG5rZXJuZWwvYnBmL2J0Zi5jOjkzOTI6aW50IGJwZl9jb3JlX3R5cGVzX2FyZV9jb21wYXQoY29uc3Qgc3RydWN0IGJ0ZiAqbG9jYWxfYnRmLCBfX3UzMiBsb2NhbF9pZCxcbmtlcm5lbC9icGYvYnRmLmMtOTM5My1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmICp0YXJnX2J0ZiwgX191MzIgdGFyZ19pZClcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTk0MDAtXG5rZXJuZWwvYnBmL2J0Zi5jOjk0MDE6aW50IGJwZl9jb3JlX3R5cGVzX21hdGNoKGNvbnN0IHN0cnVjdCBidGYgKmxvY2FsX2J0ZiwgdTMyIGxvY2FsX2lkLFxua2VybmVsL2JwZi9idGYuYy05NDAyLVx0XHRcdCBjb25zdCBzdHJ1Y3QgYnRmICp0YXJnX2J0ZiwgdTMyIHRhcmdfaWQpXG4tLVxua2VybmVsL2JwZi9idGYuYz05NjIxPWJwZl9jb3JlX2ZpbmRfY2FuZHMoc3RydWN0IGJwZl9jb3JlX2N0eCAqY3R4LCB1MzIgbG9jYWxfdHlwZV9pZClcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTk3MDctXG5rZXJuZWwvYnBmL2J0Zi5jOjk3MDg6aW50IGJwZl9jb3JlX2FwcGx5KHN0cnVjdCBicGZfY29yZV9jdHggKmN0eCwgY29uc3Qgc3RydWN0IGJwZl9jb3JlX3JlbG8gKnJlbG8sXG5rZXJuZWwvYnBmL2J0Zi5jLTk3MDktXHRcdCAgIGludCByZWxvX2lkeCwgdm9pZCAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL2NmZy5jPTIyNj1zdGF0aWMgaW50IHNvcnRfaW5zbl9hcnJheV91bmlxKHUzMiAqaXRlbXMsIGludCBjbnQpXG4tLVxua2VybmVsL2JwZi9jZmcuYy0yNDItICovXG5rZXJuZWwvYnBmL2NmZy5jOjI0MzppbnQgYnBmX2NvcHlfaW5zbl9hcnJheV91bmlxKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBzdGFydCwgdTMyIGVuZCwgdTMyICpvZmYpXG5rZXJuZWwvYnBmL2NmZy5jLTI0NC17XG4tLVxua2VybmVsL2JwZi9jZmcuYz00NTE9c3RhdGljIGludCB2aXNpdF9pbnNuKGludCB0LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvY2ZnLmMtNTg2LSAqL1xua2VybmVsL2JwZi9jZmcuYzo1ODc6aW50IGJwZl9jaGVja19jZmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvY2ZnLmMtNTg4LXtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jLTY4OC0gKi9cbmtlcm5lbC9icGYvY2ZnLmM6Njg5OmludCBicGZfY29tcHV0ZV9wb3N0b3JkZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvY2ZnLmMtNjkwLXtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jLTc0MS0gKi9cbmtlcm5lbC9icGYvY2ZnLmM6NzQyOmludCBicGZfY29tcHV0ZV9zY2Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvY2ZnLmMtNzQzLXtcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jPTM0MT1zdGF0aWMgaW50IGNoZWNrX2NvcmVfcmVsbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNDA5LVxua2VybmVsL2JwZi9jaGVja19idGYuYzo0MTA6aW50IGJwZl9wcmVwYXJlX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQxMS1cdFx0XHQgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYy00MzctXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjQzODppbnQgYnBmX2NoZWNrX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQzOS1cdFx0ICAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvY29uc3RfZm9sZC5jPTIwOT1zdGF0aWMgYm9vbCBjb25zdF9yZWdfam9pbihzdHJ1Y3QgY29uc3RfYXJnX2luZm8gKmNpX3RhcmdldCxcbi0tXG5rZXJuZWwvYnBmL2NvbnN0X2ZvbGQuYy0yMzEtXG5rZXJuZWwvYnBmL2NvbnN0X2ZvbGQuYzoyMzI6aW50IGJwZl9jb21wdXRlX2NvbnN0X3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvY29uc3RfZm9sZC5jLTIzMy17XG4tLVxua2VybmVsL2JwZi9jb25zdF9mb2xkLmM9MzE1PXN0YXRpYyBpbnQgZXZhbF9jb25zdF9icmFuY2godTggb3Bjb2RlLCB1NjQgZHN0X3ZhbCwgdTY0IHNyY192YWwpXG4tLVxua2VybmVsL2JwZi9jb25zdF9mb2xkLmMtMzM4LSAqL1xua2VybmVsL2JwZi9jb25zdF9mb2xkLmM6MzM5OmludCBicGZfcHJ1bmVfZGVhZF9icmFuY2hlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9jb25zdF9mb2xkLmMtMzQwLXtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0xNzc9RVhQT1JUX1NZTUJPTF9HUEwoYnBmX3Byb2dfYWxsb2MpO1xua2VybmVsL2JwZi9jb3JlLmMtMTc4LVxua2VybmVsL2JwZi9jb3JlLmM6MTc5OmludCBicGZfcHJvZ19hbGxvY19qaXRlZF9saW5mbyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5rZXJuZWwvYnBmL2NvcmUuYy0xODAte1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTI4OD12b2lkIF9fYnBmX3Byb2dfZnJlZShzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTMwMS1cbmtlcm5lbC9icGYvY29yZS5jOjMwMjppbnQgYnBmX3Byb2dfY2FsY190YWcoc3RydWN0IGJwZl9wcm9nICpmcClcbmtlcm5lbC9icGYvY29yZS5jLTMwMy17XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9NDU2PXN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fc2luZ2xlKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIG9mZixcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy01MTYtXG5rZXJuZWwvYnBmL2NvcmUuYzo1MTc6aW50IGJwZl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgY250KVxua2VybmVsL2JwZi9jb3JlLmMtNTE4LXtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz01NDE9dm9pZCBicGZfcHJvZ19rYWxsc3ltc19kZWxfYWxsKHN0cnVjdCBicGZfcHJvZyAqZnApXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtNTQ4LS8qIEFsbCBCUEYgSklUIHN5c2N0bCBrbm9icyBoZXJlLiAqL1xua2VybmVsL2JwZi9jb3JlLmM6NTQ5OmludCBicGZfaml0X2VuYWJsZSAgIF9fcmVhZF9tb3N0bHkgPSBJU19CVUlMVElOKENPTkZJR19CUEZfSklUX0RFRkFVTFRfT04pO1xua2VybmVsL2JwZi9jb3JlLmM6NTUwOmludCBicGZfaml0X2thbGxzeW1zIF9fcmVhZF9tb3N0bHkgPSBJU19CVUlMVElOKENPTkZJR19CUEZfSklUX0RFRkFVTFRfT04pO1xua2VybmVsL2JwZi9jb3JlLmM6NTUxOmludCBicGZfaml0X2hhcmRlbiAgIF9fcmVhZF9tb3N0bHk7XG5rZXJuZWwvYnBmL2NvcmUuYy01NTItbG9uZyBicGZfaml0X2xpbWl0ICAgX19yZWFkX21vc3RseTtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz03MTM9c3RhdGljIHN0cnVjdCBicGZfa3N5bSAqYnBmX2tzeW1fZmluZCh1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtNzIwLVxua2VybmVsL2JwZi9jb3JlLmM6NzIxOmludCBicGZfYWRkcmVzc19sb29rdXAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nICpzaXplLFxua2VybmVsL2JwZi9jb3JlLmMtNzIyLVx0XHQgICAgICAgdW5zaWduZWQgbG9uZyAqb2ZmLCBjaGFyICpzeW0pXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9Nzg0PWNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKnNlYXJjaF9icGZfZXh0YWJsZXModW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTgwMS1cbmtlcm5lbC9icGYvY29yZS5jOjgwMjppbnQgYnBmX2dldF9rYWxsc3ltKHVuc2lnbmVkIGludCBzeW1udW0sIHVuc2lnbmVkIGxvbmcgKnZhbHVlLCBjaGFyICp0eXBlLFxua2VybmVsL2JwZi9jb3JlLmMtODAzLVx0XHQgICAgY2hhciAqc3ltKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTgyOS1cbmtlcm5lbC9icGYvY29yZS5jOjgzMDppbnQgYnBmX2ppdF9hZGRfcG9rZV9kZXNjcmlwdG9yKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbmtlcm5lbC9icGYvY29yZS5jLTgzMS1cdFx0XHRcdHN0cnVjdCBicGZfaml0X3Bva2VfZGVzY3JpcHRvciAqcG9rZSlcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0xMTA3PXB1cmVfaW5pdGNhbGwoYnBmX2ppdF9jaGFyZ2VfaW5pdCk7XG5rZXJuZWwvYnBmL2NvcmUuYy0xMTA4LVxua2VybmVsL2JwZi9jb3JlLmM6MTEwOTppbnQgYnBmX2ppdF9jaGFyZ2VfbW9kbWVtKHUzMiBzaXplKVxua2VybmVsL2JwZi9jb3JlLmMtMTExMC17XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MTE5Nz1icGZfaml0X2JpbmFyeV9wYWNrX2FsbG9jKHVuc2lnbmVkIGludCBwcm9nbGVuLCB1OCAqKmltYWdlX3B0cixcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xMjQyLS8qIENvcHkgSklUZWQgdGV4dCBmcm9tIHJ3X2hlYWRlciB0byBpdHMgZmluYWwgbG9jYXRpb24sIHRoZSByb19oZWFkZXIuICovXG5rZXJuZWwvYnBmL2NvcmUuYzoxMjQzOmludCBicGZfaml0X2JpbmFyeV9wYWNrX2ZpbmFsaXplKHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqcm9faGVhZGVyLFxua2VybmVsL2JwZi9jb3JlLmMtMTI0NC1cdFx0XHRcdCBzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKnJ3X2hlYWRlcilcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0xMzAzPXZvaWQgX193ZWFrIGJwZl9qaXRfZnJlZShzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTEzMTQtXG5rZXJuZWwvYnBmL2NvcmUuYzoxMzE1OmludCBicGZfaml0X2dldF9mdW5jX2FkZHIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxua2VybmVsL2JwZi9jb3JlLmMtMTMxNi1cdFx0XHQgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBleHRyYV9wYXNzLFxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTI0NzM9RVZBTDQoUFJPR19OQU1FX0xJU1QsIDQxNiwgNDQ4LCA0ODAsIDUxMilcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDc3LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvY29yZS5jOjI0Nzg6aW50IGJwZl9wYXRjaF9jYWxsX2FyZ3Moc3RydWN0IGJwZl9pbnNuICppbnNuLCB1MzIgc3RhY2tfZGVwdGgpXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDc5LXtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0yNzg1PXZvaWQgYnBmX3Byb2dfYXJyYXlfZnJlZV9zbGVlcGFibGUoc3RydWN0IGJwZl9wcm9nX2FycmF5ICpwcm9ncylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNzkxLVxua2VybmVsL2JwZi9jb3JlLmM6Mjc5MjppbnQgYnBmX3Byb2dfYXJyYXlfbGVuZ3RoKHN0cnVjdCBicGZfcHJvZ19hcnJheSAqYXJyYXkpXG5rZXJuZWwvYnBmL2NvcmUuYy0yNzkzLXtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0yODEzPXN0YXRpYyBib29sIGJwZl9wcm9nX2FycmF5X2NvcHlfY29yZShzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKmFycmF5LFxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI4MzItXG5rZXJuZWwvYnBmL2NvcmUuYzoyODMzOmludCBicGZfcHJvZ19hcnJheV9jb3B5X3RvX3VzZXIoc3RydWN0IGJwZl9wcm9nX2FycmF5ICphcnJheSxcbmtlcm5lbC9icGYvY29yZS5jLTI4MzQtXHRcdFx0XHRfX3UzMiBfX3VzZXIgKnByb2dfaWRzLCB1MzIgY250KVxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTI4NTk9dm9pZCBicGZfcHJvZ19hcnJheV9kZWxldGVfc2FmZShzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKmFycmF5LFxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI4ODUtICovXG5rZXJuZWwvYnBmL2NvcmUuYzoyODg2OmludCBicGZfcHJvZ19hcnJheV9kZWxldGVfc2FmZV9hdChzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKmFycmF5LCBpbnQgaW5kZXgpXG5rZXJuZWwvYnBmL2NvcmUuYy0yODg3LXtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yOTA1LSAqL1xua2VybmVsL2JwZi9jb3JlLmM6MjkwNjppbnQgYnBmX3Byb2dfYXJyYXlfdXBkYXRlX2F0KHN0cnVjdCBicGZfcHJvZ19hcnJheSAqYXJyYXksIGludCBpbmRleCxcbmtlcm5lbC9icGYvY29yZS5jLTI5MDctXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjkyNS1cbmtlcm5lbC9icGYvY29yZS5jOjI5MjY6aW50IGJwZl9wcm9nX2FycmF5X2NvcHkoc3RydWN0IGJwZl9wcm9nX2FycmF5ICpvbGRfYXJyYXksXG5rZXJuZWwvYnBmL2NvcmUuYy0yOTI3LVx0XHRcdHN0cnVjdCBicGZfcHJvZyAqZXhjbHVkZV9wcm9nLFxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI5OTYtXG5rZXJuZWwvYnBmL2NvcmUuYzoyOTk3OmludCBicGZfcHJvZ19hcnJheV9jb3B5X2luZm8oc3RydWN0IGJwZl9wcm9nX2FycmF5ICphcnJheSxcbmtlcm5lbC9icGYvY29yZS5jLTI5OTgtXHRcdFx0ICAgICB1MzIgKnByb2dfaWRzLCB1MzIgcmVxdWVzdF9jbnQsXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzQ3ND1jb25zdCBzdHJ1Y3QgYnBmX2xpbmVfaW5mbyAqYnBmX2ZpbmRfbGluZm8oY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgaW5zbl9vZmYpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMzUxMC1cbmtlcm5lbC9icGYvY29yZS5jOjM1MTE6aW50IGJwZl9wcm9nX2dldF9maWxlX2xpbmUoc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1bnNpZ25lZCBsb25nIGlwLCBjb25zdCBjaGFyICoqZmlsZXAsXG5rZXJuZWwvYnBmL2NvcmUuYy0zNTEyLVx0XHRcdCAgIGNvbnN0IGNoYXIgKipsaW5lcCwgaW50ICpudW1wKVxuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmM9NTI9c3RydWN0IGJwZl9jcnlwdG9fY3R4IHtcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jLTU5LVxua2VybmVsL2JwZi9jcnlwdG8uYzo2MDppbnQgYnBmX2NyeXB0b19yZWdpc3Rlcl90eXBlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUpXG5rZXJuZWwvYnBmL2NyeXB0by5jLTYxLXtcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jPTg1PUVYUE9SVF9TWU1CT0xfR1BMKGJwZl9jcnlwdG9fcmVnaXN0ZXJfdHlwZSk7XG5rZXJuZWwvYnBmL2NyeXB0by5jLTg2LVxua2VybmVsL2JwZi9jcnlwdG8uYzo4NzppbnQgYnBmX2NyeXB0b191bnJlZ2lzdGVyX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZSlcbmtlcm5lbC9icGYvY3J5cHRvLmMtODgte1xuLS1cbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz0yMzA9c3RhdGljIHZvaWQgZGlhZ193cml0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBjaGFyICpmbXQsIC4uLikgX19wcmludGYoMiwgMyk7XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtMjMxLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjIzMjppbnQgYnBmX2RpYWdfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTIzMy17XG4tLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oPTQ1PWJvb2wgYnBmX2RpYWdfZW5hYmxlZChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuaDo0NjppbnQgYnBmX2RpYWdfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuaC00Ny12b2lkIGJwZl9kaWFnX2luaXRfZnJhbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz02Mz1zdGF0aWMgYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xMDMtICovXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEwNDppbnQgYnBmX2luc25fZGVmMzIoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEwNS17XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz01NjQ9dm9pZCBicGZfb3B0X2hhcmRfd2lyZV9kZWFkX2NvZGVfYnJhbmNoZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTU4OS1cbmtlcm5lbC9icGYvZml4dXBzLmM6NTkwOmludCBicGZfb3B0X3JlbW92ZV9kZWFkX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvZml4dXBzLmMtNTkxLXtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTYxMy1cbmtlcm5lbC9icGYvZml4dXBzLmM6NjE0OmludCBicGZfb3B0X3JlbW92ZV9ub3BzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTYxNS17XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy02MzgtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjYzOTppbnQgYnBmX29wdF9zdWJyZWdfemV4dF9sbzMyX3JuZF9oaTMyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTY0MC1cdFx0XHRcdFx0IGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNzQwLSAqL1xua2VybmVsL2JwZi9maXh1cHMuYzo3NDE6aW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9maXh1cHMuYy03NDIte1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9MTA2Nj1zdGF0aWMgaW50IGppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTMzMy1cbmtlcm5lbC9icGYvZml4dXBzLmM6MTMzNDppbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9maXh1cHMuYy0xMzM1LXtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE0MDQtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE0MDU6aW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvZml4dXBzLmMtMTQwNi17XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0xNDc5PXN0YXRpYyBpbnQgYWRkX2hpZGRlbl9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIGludCBsZW4pXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xNTA3LSAqL1xua2VybmVsL2JwZi9maXh1cHMuYzoxNTA4OmludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUwOS17XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0yNTcwPXN0YXRpYyBib29sIGlzX2JwZl9sb29wX2NhbGwoc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjU4NS0gKi9cbmtlcm5lbC9icGYvZml4dXBzLmM6MjU4NjppbnQgYnBmX29wdGltaXplX2JwZl9sb29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI1ODcte1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjYzMy0gKi9cbmtlcm5lbC9icGYvZml4dXBzLmM6MjYzNDppbnQgYnBmX3JlbW92ZV9mYXN0Y2FsbF9zcGlsbHNfZmlsbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvZml4dXBzLmMtMjYzNS17XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjQ1OT1zdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1MzIgY3B1KVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0NzQtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNDc1OmludCBicGZfcGVyY3B1X2hhc2hfY29weShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjQ3Ni17XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjUxMi1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI1MTM6aW50IGJwZl9wZXJjcHVfaGFzaF91cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI1MTQtXHRcdFx0ICAgdTY0IG1hcF9mbGFncylcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNjEwPXN0YXRpYyB2b2lkIGZkX2h0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNjMxLS8qIG9ubHkgY2FsbGVkIGZyb20gc3lzY2FsbCAqL1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjYzMjppbnQgYnBmX2ZkX2h0YWJfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdTMyICp2YWx1ZSlcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI2MzMte1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI2NTEtLyogT25seSBjYWxsZWQgZnJvbSBzeXNjYWxsICovXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNjUyOmludCBicGZfZmRfaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjY1My1cdFx0XHRcdHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NzcxPXN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIGJwZl9icHJpbnRmX25lc3RfbGV2ZWwpO1xua2VybmVsL2JwZi9oZWxwZXJzLmMtNzcyLVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NzczOmludCBicGZfdHJ5X2dldF9idWZmZXJzKHN0cnVjdCBicGZfYnByaW50Zl9idWZmZXJzICoqYnVmcylcbmtlcm5lbC9icGYvaGVscGVycy5jLTc3NC17XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9Nzk3PXZvaWQgYnBmX2JwcmludGZfY2xlYW51cChzdHJ1Y3QgYnBmX2JwcmludGZfZGF0YSAqZGF0YSlcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy04MTctICovXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo4MTg6aW50IGJwZl9icHJpbnRmX3ByZXBhcmUoY29uc3QgY2hhciAqZm10LCB1MzIgZm10X3NpemUsIGNvbnN0IHU2NCAqcmF3X2FyZ3MsXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy04MTktXHRcdFx0dTMyIG51bV9hcmdzLCBzdHJ1Y3QgYnBmX2JwcmludGZfZGF0YSAqZGF0YSlcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0xODEwPXN0YXRpYyB2b2lkIGJwZl9keW5wdHJfc2V0X3NpemUoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqcHRyLCB1NjQgbmV3X3NpemUpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTgyMi1cbmtlcm5lbC9icGYvaGVscGVycy5jOjE4MjM6aW50IGJwZl9keW5wdHJfY2hlY2tfc2l6ZSh1NjQgc2l6ZSlcbmtlcm5lbC9icGYvaGVscGVycy5jLTE4MjQte1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ3MDM9X19icGZfa2Z1bmMgaW50IGJwZl9keW5wdHJfZnJvbV9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCB1MzIgZmxhZ3MsIHN0cnVjdCBicGZfZHlucHRyICpwdHJfX3VuaW5pdClcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NzA3LVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDcwODppbnQgYnBmX2R5bnB0cl9mcm9tX2ZpbGVfc2xlZXBhYmxlKHN0cnVjdCBmaWxlICpmaWxlLCB1MzIgZmxhZ3MsIHN0cnVjdCBicGZfZHlucHRyICpwdHJfX3VuaW5pdClcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ3MDkte1xuLS1cbmtlcm5lbC9icGYvaW5vZGUuYz00OTE9c3RhdGljIGludCBicGZfb2JqX2RvX3BpbihpbnQgcGF0aF9mZCwgY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLCB2b2lkICpyYXcsXG4tLVxua2VybmVsL2JwZi9pbm9kZS5jLTUzMi1cbmtlcm5lbC9icGYvaW5vZGUuYzo1MzM6aW50IGJwZl9vYmpfcGluX3VzZXIodTMyIHVmZCwgaW50IHBhdGhfZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSlcbmtlcm5lbC9icGYvaW5vZGUuYy01MzQte1xuLS1cbmtlcm5lbC9icGYvaW5vZGUuYz01NTA9c3RhdGljIHZvaWQgKmJwZl9vYmpfZG9fZ2V0KGludCBwYXRoX2ZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsXG4tLVxua2VybmVsL2JwZi9pbm9kZS5jLTU4MS1cbmtlcm5lbC9icGYvaW5vZGUuYzo1ODI6aW50IGJwZl9vYmpfZ2V0X3VzZXIoaW50IHBhdGhfZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSwgaW50IGZsYWdzKVxua2VybmVsL2JwZi9pbm9kZS5jLTU4My17XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jPTEwMT1zdGF0aWMgc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmxvb2t1cF9pbnN0YW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTktXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTIwOmludCBicGZfc3RhY2tfbGl2ZW5lc3NfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEyMS17XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jPTE5MD1zdGF0aWMgaW50IG1hcmtfc3RhY2tfd3JpdGUoc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmluc3RhbmNlLCB1MzIgZnJhbWUsIHUzMiBpbnNuX2lkeCwgc3Bpc190IG1hc2spXG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTIwMC1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoyMDE6aW50IGJwZl9qbXBfb2Zmc2V0KHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0yMDIte1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0zMzA9c3RhdGljIGJvb2wgaXNfbGl2ZV9iZWZvcmUoc3RydWN0IGZ1bmNfaW5zdGFuY2UgKmluc3RhbmNlLCB1MzIgaW5zbl9pZHgsIHUzMiBmcmFtZW5vLCB1MzIgaGFsZl9zcGkpXG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTMzNy1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzozMzg6aW50IGJwZl9saXZlX3N0YWNrX3F1ZXJ5X2luaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3QpXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMzM5LXtcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MTg0MD1zdGF0aWMgaW50IGFuYWx5emVfc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xOTg0LVxua2VybmVsL2JwZi9saXZlbmVzcy5jOjE5ODU6aW50IGJwZl9jb21wdXRlX3N1YnByb2dfYXJnX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTE5ODYte1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0yMDYxPXN0YXRpYyB2b2lkIGNvbXB1dGVfaW5zbl9saXZlX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjIyMy0gKi9cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoyMjI0OmludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTIyMjUte1xuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jPTE0ND1zdGF0aWMgbG9uZyBjZ3JvdXBfc3RvcmFnZV91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTgxLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTgyOmludCBicGZfcGVyY3B1X2Nncm91cF9zdG9yYWdlX2NvcHkoc3RydWN0IGJwZl9tYXAgKl9tYXAsIHZvaWQgKmtleSxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTE4My1cdFx0XHRcdCAgIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTIxNS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjIxNjppbnQgYnBmX3BlcmNwdV9jZ3JvdXBfc3RvcmFnZV91cGRhdGUoc3RydWN0IGJwZl9tYXAgKl9tYXAsIHZvaWQgKmtleSxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTIxNy1cdFx0XHRcdCAgICAgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM9NDYxPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBjZ3JvdXBfc3RvcmFnZV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQ3My1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ3NDppbnQgYnBmX2Nncm91cF9zdG9yYWdlX2Fzc2lnbihzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgsIHN0cnVjdCBicGZfbWFwICpfbWFwKVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDc1LXtcbi0tXG5rZXJuZWwvYnBmL2xvZy5jPTE2PXN0YXRpYyBib29sIGJwZl92ZXJpZmllcl9sb2dfYXR0cl92YWxpZCh1MzIgbG9nX2xldmVsLCBjaGFyIF9fdXNlciAqbG9nX2J1ZiwgdTMyIGxvZ19zaXplKVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzU3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvcmUgb2YgdGhpcyBCUEYgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIFRoZSBmaWxlcyB0byBzdGFydCB3aXRoIGFyZSBvYnZpb3VzbHkgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYC4gRnJvbSBtZW1vcnksIEkgcmVjYWxsIHNvbWUga2V5IGZ1bmN0aW9ucyBpbiBgYmFja3RyYWNrLmNgIHRoYXQgd2lsbCBiZSByZWxldmFudCB0byB0cmFja2luZyBhbmQgZW5zdXJpbmcgdGhlIHByZWNpc2lvbiBvZiB0aGUgYW5hbHlzaXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBvZiBgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uYCwgYGJwZl9tYXJrX2FsbF9zY2FsYXJzX3ByZWNpc2VgLCBhbmQgYGJwZl9wdXNoX2ptcF9oaXN0b3J5YC4gVGhlc2UgbGlrZWx5IGRlYWwgd2l0aCBtYWludGFpbmluZyB0aGUgc3RhdGUgYW5kIGhpc3Rvcnkgb2YgdGhlIGp1bXAgaW5zdHJ1Y3Rpb25zLCBjcnVjaWFsIGZvciBwcmVjaXNlIHNjYWxhciBhbmFseXNpcy4KCk5vdywgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSB2ZXJpZmljYXRpb24gaXRzZWxmIHdpbGwgYmUgaW4gYHZlcmlmaWVyLmNgLiBMZXQmIzM5O3MgemVybyBpbiBvbiBgYnBmX2NoZWNrYC4gSSBzaG91bGQgY2hlY2sgdGhhdCBkZWZpbml0aW9uIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFuZCBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGludm9sdmVkLiBUaGF0JiMzOTtzIHRoZSBnYXRla2VlcGVyLCBzbyB0aGF0JiMzOTtzIHdoZXJlIHRoZSB2ZXJpZmljYXRpb24gbG9naWMgaXMgZ29pbmcgdG8ga2ljayBpbi4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCBvcmNoZXN0cmF0ZXMgdGhlIG92ZXJhbGwgcHJvY2Vzcywgd2hhdCBpdCBjb25zaWRlcnMsIHdoYXQgaXQgdmVyaWZpZXMsIGFuZCBob3cgaXQgY2FsbHMgb24gdGhlIG90aGVyIHN1cHBvcnQgZnVuY3Rpb25zIHRvIHRyYWNrIHRoZSBwcm9ncmFtIHN0YXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgYnBmX2NoZWNrXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA4NTk9c3RhdGljIGludCBicGZfcHJvZ192ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTc1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwOTc2OmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTc3LVx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTIwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKk5hdmlnYXRpbmcgdGhlIEJQRiBWZXJpZmllcioqCgpPa2F5LCBzbyBgYnBmX2NoZWNrYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyLCBnb3QgaXQuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIGd1bi4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHByZWNpc2lvbiB0cmFja2luZyB3b3JrcywgYW5kIGl0IGxvb2tzIGxpa2UgYGJwZl9tYXJrX2NoYWluX3ByZWNpc2lvbmAgaW4gYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgIGlzIHRoZSBrZXkuIFRoYXQgZnVuY3Rpb24gc2VlbXMgdG8gYmUgdGhlIG9uZSB0aGF0IGFjdHVhbGx5IGNhbGxzIHRoZSB1cGRhdGVkIGBiYWNrdHJhY2tfaW5zbmAgbG9naWMgZGlyZWN0bHkuICBJIG5lZWQgdG8gZ28gbG9vayBhdCBob3cgYGJwZl9wcm9nX2xvYWRgIGlzIGNhbGxlZCwgc28gSSBuZWVkIHRvIGNoZWNrIGBzeXNjYWxsLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcHJvZ19sb2FkXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz0yOTEyPUJURl9JRF9MSVNUX0dMT0JBTF9TSU5HTEUoYnBmX211bHRpX2Z1bmNfYnRmX2lkLCBmdW5jLCBicGZfbXVsdGlfZnVuYylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yOTE2LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjkxNzpzdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI5MTgte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzMDM9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzNjYtXHRcdFx0XHRcdHNpemVfY29tbW9uKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzNjc6XHRcdGVyciA9IGVyciA/OiBicGZfcHJvZ19sb2FkKFx1MDAyNmF0dHIsIHVhdHRyLCBcdTAwMjZhdHRyX2xvZyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzY4LVx0XHRicmVhaztcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA5NzY9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDMyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMDMzOlx0cmV0ID0gc2VjdXJpdHlfYnBmX3Byb2dfbG9hZChlbnYtXHUwMDNlcHJvZywgYXR0ciwgZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZXRva2VuLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDM0LVx0XHRcdFx0ICAgICB1YXR0ci5pc19rZXJuZWwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzU3MAoJCQkJCQkJb3V0cHV0OiAxNDQKCQkJCQkJCXRob3VnaHRzOiA0NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZSBldmVyeXRoaW5nIHJpZ2h0IGZvciB0aGlzIGZ1enppbmcgc2V0dXAuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIEl0IHNlZW1zIGxpa2UgYEJQRl9TWVNDQUxMYCBpcyBzdGFuZGFyZCBmb3IgdGhpcyBjb250ZXh0LiBOb3csIEkgd2FudCB0byBjb25maXJtIHRoYXQgYGJwZl9jaGVja2AgaXMgYWN0dWFsbHkgaW52b2x2ZWQgZHVyaW5nIHRoZSBgYnBmX3Byb2dfbG9hZGAgcHJvY2Vzcy4gQWgsIHllcywgaXQgbG9va3MgbGlrZSBgYnBmX3Byb2dfbG9hZCgpYCBkb2VzIGluZGVlZCBjYWxsIGBicGZfY2hlY2soKWAuIEFuZCwgYXMgSSBzdXNwZWN0ZWQsIGBicGZfY2hlY2soKWAgaXMgcmVzcG9uc2libGUgZm9yIHZlcmlmaWNhdGlvbiwgd2hpY2ggdGhlbiBjYWxscyBgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKClgIHdpdGhpbiBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AuIFRoaXMgZnVuY3Rpb24gaXMga2V5IGJlY2F1c2UgaXQgcnVucyB0aGUgYmFja3RyYWNraW5nIGxvb3AsIGFuZCB0aGF0IGxvb3AsIGluIHR1cm4sIGNhbGxzIGBiYWNrdHJhY2tfaW5zbigpYC4KCkFscmlnaHQsIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCB0aGUgaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIHByb21wdCBhbGlnbnM6Ci0gICBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLCBnb29kLgotICAgYEVuYWJsZUNvbmZpZ3NgIGluY2x1ZGVzIGAmIzM0O0JQRl9TWVNDQUxMJiMzNDtgLgotICAgYEZvY3VzU3ltYm9sc2AgbGlzdHMgYCYjMzQ7YnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uJiMzNDtgIGFuZCBgJiMzNDticGZfY2hlY2smIzM0O2AuCi0gICBUaGUgaW5zdHJ1Y3Rpb24gaXMgdG8gZ2l2ZSBhIGNvbmNpc2UgZXhwbGFuYXRpb24uCgpOb3csIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBXZSBoYXZlIHRvIGVuc3VyZSB0aGF0IGBCUEZfU1lTQ0FMTGAgaXMgYWN0dWFsbHkgcmVxdWlyZWQsIHNvIEkmIzM5O2xsIHZlcmlmeSBpZiBgYmFja3RyYWNrLm9gIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzZXQuIExvb2tzIGxpa2UgdGhhdCYjMzk7cyB0aGUgY2FzZS4gQWxzbywgSSBoYXZlIHRvIGJlIHN1cmUgdGhhdCBgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uYCBhbmQgYGJwZl9jaGVja2AgYXJlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBMZXQgbWUgY2hlY2sgdGhlIHNvdXJjZSBjb2RlOgoKSW4gYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgLCB0aGUgZGVjbGFyYXRpb24gZm9yIGBicGZfbWFya19jaGFpbl9wcmVjaXNpb25gIGlzIGBpbnQgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0YXJ0aW5nX3N0YXRlLCBpbnQgcmVnbm8sIGJvb2wgKmNoYW5nZWQpYC4gU28sIGl0JiMzOTtzIG5vdCBzdGF0aWMuCkluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCB0aGUgZGVjbGFyYXRpb24gZm9yIGBicGZfY2hlY2tgIGlzIGBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpYCwgYWxzbyBub24tc3RhdGljLgoKRmluYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHBhcmFtZXRlcnMgbWF0Y2g6IGBFbmFibGVDb25maWdzYCBpcyBhbiBhcnJheSBvZiBzdHJpbmdzIHdpdGhvdXQgdGhlIGBDT05GSUdfYCBwcmVmaXguIFdlIGhhdmUgYFsmIzM0O0JQRl9TWVNDQUxMJiMzNDtdYC4gYEZvY3VzU3ltYm9sc2AgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy4gV2UgaGF2ZSBgWyYjMzQ7YnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uJiMzNDssICYjMzQ7YnBmX2NoZWNrJiMzNDtdYC4gYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYC4gQW5kIHRoZSBpbnN0cnVjdGlvbnMgcmVxdWlyZSBhIGNvbmNpc2UgZXhwbGFuYXRpb24sIHdoaWNoIEkgaGF2ZSBpbiBtaW5kLgoKQWxsIGNoZWNrcyBhcmUgZ29vZCB0byBnbywgYW5kIEkmIzM5O20gcmVhZHkgdG8gY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfbWFya19jaGFpbl9wcmVjaXNpb24mIzM0OywKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3Mgc2NhbGFyIHByZWNpc2lvbiBiYWNrdHJhY2tpbmcgbG9naWMgaW4gYmFja3RyYWNrX2luc24oKSBmb3IgQlBGX0xEIChzcGVjaWZpY2FsbHkgQlBGX0FCUy9CUEZfSU5EIGluc3RydWN0aW9ucyB3aXRoIGltcGxpY2l0IHN1YnByb2dyYW0gZXhpdCBicmFuY2hlcykgdG8gcHJvcGVybHkgYWRqdXN0IHRoZSBiYWNrdHJhY2sgY2FsbCBmcmFtZSBhbmQgcHJldmVudCB2ZXJpZmllciBjcmFzaGVzL3NlZ2ZhdWx0cy4gVGhpcyBpcyBjb3JlIHZlcmlmaWVyIGxvZ2ljIHJlYWNoYWJsZSB2aWEgdGhlIGJwZihCUEZfUFJPR19MT0FEKSBzeXNjYWxsIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9tYXJrX2NoYWluX3ByZWNpc2lvbiYjMzQ7LAogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBzY2FsYXIgcHJlY2lzaW9uIGJhY2t0cmFja2luZyBsb2dpYyBpbiBiYWNrdHJhY2tfaW5zbigpIGZvciBCUEZfTEQgKHNwZWNpZmljYWxseSBCUEZfQUJTL0JQRl9JTkQgaW5zdHJ1Y3Rpb25zIHdpdGggaW1wbGljaXQgc3VicHJvZ3JhbSBleGl0IGJyYW5jaGVzKSB0byBwcm9wZXJseSBhZGp1c3QgdGhlIGJhY2t0cmFjayBjYWxsIGZyYW1lIGFuZCBwcmV2ZW50IHZlcmlmaWVyIGNyYXNoZXMvc2VnZmF1bHRzLiBUaGlzIGlzIGNvcmUgdmVyaWZpZXIgbG9naWMgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQpIHN5c2NhbGwgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgc2NhbGFyIHByZWNpc2lvbiBiYWNrdHJhY2tpbmcgbG9naWMgaW4gYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgIHRvIHByb3Blcmx5IHVwZGF0ZSB0aGUgc3VicHJvZ3JhbSBjYWxsIGZyYW1lIChgYnRfc3VicHJvZ19lbnRlcmApIHdoZW4gYmFja3RyYWNraW5nIHRoZSBpbXBsaWNpdCBlYXJseSBleGl0IHBhdGggb2YgYEJQRl9MRCB8IEJQRl9BQlNgIGFuZCBgQlBGX0xEIHwgQlBGX0lORGAgaW5zdHJ1Y3Rpb25zLiBcblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB2ZXJpZmllciBicmFuY2hlcywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zIG9yIG1lbW9yeSBpbml0aWFsaXphdGlvbiBwYXRocy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIGZyYW1lIGluZGV4aW5nIGVycm9ycyBvciB2ZXJpZmllciBzdGF0ZSBjb3JydXB0aW9uIHdvdWxkIG1hbmlmZXN0IGFzIGNvbnRyb2wgZmxvdyBmYXVsdHMsIGFzc2VydGlvbnMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd2hpY2ggYXJlIGFscmVhZHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA2MzU5ZTQ3NDgxY2YyMzczMGM1OTIwYWMyZGJiZTA2ZDVhNGY4MTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDIwOjQ1OjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9iYWNrdHJhY2suYyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmMKaW5kZXggYTJiMThhOWYxNjk0Yy4uZWFmNzQzOGI5ZWJmOSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9iYWNrdHJhY2suYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2JhY2t0cmFjay5jCkBAIC01ODIsMTYgJiM0Mzs1ODIsMjkgQEAgc3RhdGljIGludCBiYWNrdHJhY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LCBpbnQgc3Vic2VxX2lkeCwKIAkJCSAgKi8KIAkJfQogCX0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEKSB7Ci0JCWlmICghYnRfaXNfcmVnX3NldChidCwgZHJlZykpCi0JCQlyZXR1cm4gMDsKLQkJYnRfY2xlYXJfcmVnKGJ0LCBkcmVnKTsKIAkJLyogSXQmIzM5O3MgbGRfaW1tNjQgb3IgbGRfYWJzIG9yIGxkX2luZC4KIAkJICogRm9yIGxkX2ltbTY0IG5vIGZ1cnRoZXIgdHJhY2tpbmcgb2YgcHJlY2lzaW9uCiAJCSAqIGludG8gcGFyZW50IGlzIG5lY2Vzc2FyeQogCQkgKi8KLQkJaWYgKG1vZGUgPT0gQlBGX0lORCB8fCBtb2RlID09IEJQRl9BQlMpCi0JCQkvKiB0byBiZSBhbmFseXplZCAqLwotCQkJcmV0dXJuIC1FTk9UU1VQUDsKJiM0MzsJCWlmIChtb2RlID09IEJQRl9JTU0pIHsKJiM0MzsJCQlidF9jbGVhcl9yZWcoYnQsIGRyZWcpOwomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJfQomIzQzOwkJLyoKJiM0MzsJCSAqIEJQRl97SU5ELEFCU30gYXJlIG1vZGVsbGVkIGFzIHR3byBicmFuY2hlczoKJiM0MzsJCSAqIC0gZmFsbHRocm91Z2g7CiYjNDM7CQkgKiAtIGltcGxpY2l0IHN1YnByb2dyYW0gZXhpdC4KJiM0MzsJCSAqIEl0IGlzIG5lY2Vzc2FyeSB0byBzd2l0Y2ggY3VycmVudCBmcmFtZSBpZgomIzQzOwkJICogaW1wbGljaXQgc3VicHJvZ3JhbSBleGl0IGJyYW5jaCBpcyBiYWNrdHJhY2tlZC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG1vZGUgPT0gQlBGX0lORCB8fCBtb2RlID09IEJQRl9BQlMpIHsKJiM0MzsJCQlpZiAoYnRfaXNfcmVnX3NldChidCwgZHJlZykpCiYjNDM7CQkJCXJldHVybiAtRU5PVFNVUFA7CiYjNDM7CQkJaWYgKHN1YnNlcV9pZHggIT0gaWR4ICYjNDM7IDEpCiYjNDM7CQkJCWlmIChidF9zdWJwcm9nX2VudGVyKGJ0KSkKJiM0MzsJCQkJCXJldHVybiAtRUZBVUxUOwomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJfQogCX0KIAkvKiBQcm9wYWdhdGUgcHJlY2lzaW9uIG1hcmtzIHRvIGxpbmtlZCByZWdpc3RlcnMsIHRvIGFjY291bnQgZm9yCiAJICogcmVnaXN0ZXJzIG1hcmtlZCBhcyBwcmVjaXNlIGluIHRoaXMgZnVuY3Rpb24uCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3VicHJvZ19wcmVjaXNpb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zdWJwcm9nX3ByZWNpc2lvbi5jCmluZGV4IGQyMWQzMmY2YTY3NjAuLmUxNzRhOTA1YzU2MjggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zdWJwcm9nX3ByZWNpc2lvbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zdWJwcm9nX3ByZWNpc2lvbi5jCkBAIC04NDYsNCAmIzQzOzg0Niw1NSBAQCBfX25ha2VkIGludCBzdWJwcm9nX3Jlc3VsdF90YWlsX2NhbGwodm9pZCkKIAkpOwogfQogCiYjNDM7X19uYWtlZCBfX25vaW5saW5lIF9fdXNlZAomIzQzO3N0YXRpYyBpbnQgbGRfYWJzX3N1YnByb2codm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoCiYjNDM7CQkmIzM0O3I2ID0gcjE7JiMzNDsKJiM0MzsJCSYjMzQ7cjcgPSByMTsmIzM0OwomIzQzOwkJJiMzNDsuOGJ5dGUgJVtsZF9hYnNdOyYjMzQ7CiYjNDM7CQkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJCToKJiM0MzsJCTogX19pbW1faW5zbihsZF9hYnMsIEJQRl9MRF9BQlMoQlBGX1csIDApKQomIzQzOwkJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBCdWdneSB2ZXJpZmllciBkaWQgbm90IHByb3Blcmx5IGJhY2t0cmFjayBlYXJseSBzdWJwcm9ncmFtIGV4aXQKJiM0MzsgKiBtb2RlbGxlZCBmb3IgQlBGX0xEIHwgQlBGX0FCUyBpbnN0cnVjdGlvbiwgY2F1c2luZyBhIHNlZ2ZhdWx0LgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO19fbG9nX2xldmVsKDIpCiYjNDM7LyogZWFybHkgZXhpdCBwYXRoICovCiYjNDM7X19tc2coJiMzNDszOiAoMGYpIHIxICYjNDM7PSByNyYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSAyOiAoYmYpIHIxID0gcjEwJiMzNDspCiYjNDM7X19tc2coJiMzNDttYXJrX3ByZWNpc2U6IGZyYW1lMDogcmVncz1yNyBzdGFjaz0gYmVmb3JlIDk6ICgyMCkgcjAgPSAqKHUzMiAqKXNrYlswXSYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgODogKGJmKSByNyA9IHIxJiMzNDspCiYjNDM7X19tc2coJiMzNDttYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSA3OiAoYmYpIHI2ID0gcjEmIzM0OykKJiM0MztfX21zZygmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDE6ICg4NSkgY2FsbCBwYyYjNDM7NSYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSAwOiAoYjcpIHI3ID0gLTgmIzM0OykKJiM0MzsvKiBmYWxsdGhyb3VnaCBwYXRoICovCiYjNDM7X19tc2coJiMzNDszOiAoMGYpIHIxICYjNDM7PSByNyYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSAyOiAoYmYpIHIxID0gcjEwJiMzNDspCiYjNDM7X19tc2coJiMzNDttYXJrX3ByZWNpc2U6IGZyYW1lMDogcmVncz1yNyBzdGFjaz0gYmVmb3JlIDEwOiAoOTUpIGV4aXQmIzM0OykKJiM0MztfX21zZygmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDk6ICgyMCkgcjAgPSAqKHUzMiAqKXNrYlswXSYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgODogKGJmKSByNyA9IHIxJiMzNDspCiYjNDM7X19tc2coJiMzNDttYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSA3OiAoYmYpIHI2ID0gcjEmIzM0OykKJiM0MztfX21zZygmIzM0O21hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDE6ICg4NSkgY2FsbCBwYyYjNDM7NSYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSAwOiAoYjcpIHI3ID0gLTgmIzM0OykKJiM0MztfX25ha2VkIGludCBsZF9hYnNfYmFja3RyYWNrX2JvdGhfcGF0aHModm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoCiYjNDM7CQkmIzM0O3I3ID0gLTg7JiMzNDsKJiM0MzsJCSYjMzQ7Y2FsbCBsZF9hYnNfc3VicHJvZzsmIzM0OwomIzQzOwkJJiMzNDtyMSA9IHIxMDsmIzM0OwomIzQzOwkJJiMzNDtyMSAmIzQzOz0gcjc7JiMzNDsgLyogbWFyayByNyBhcyBwcmVjaXNlICovCiYjNDM7CQkmIzM0OyoodTY0ICopKHIxICYjNDM7IDApID0gMDsmIzM0OwomIzQzOwkJJiMzNDtyMCA9IDA7JiMzNDsKJiM0MzsJCSYjMzQ7ZXhpdDsmIzM0OwomIzQzOwkJOjo6IF9fY2xvYmJlcl9hbGwKJiM0MzsJKTsKJiM0Mzt9CiYjNDM7CiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzI5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29kZSBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlcmUmIzM5O3MgYSBtb2RpZmljYXRpb24gaW4gYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgYmFja3RyYWNrX2luc24oKWAgZnVuY3Rpb24uIFNpbXVsdGFuZW91c2x5LCBhIG5ldyBzZWxmdGVzdCBoYXMgYmVlbiBpbnRyb2R1Y2VkIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3VicHJvZ19wcmVjaXNpb24uY2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZml4IG9yIGVuaGFuY2VtZW50IHJlbGF0ZWQgdG8gQlBGIGluc3RydWN0aW9uIGJhY2t0cmFja2luZywgbGlrZWx5IGltcGFjdGluZyB0aGUgdmVyaWZpZXImIzM5O3MgcHJlY2lzaW9uLgoKVG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgY2hhbmdlZCwgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIGBiYWNrdHJhY2tfaW5zbigpYCB3aXRoaW4gdGhlIGtlcm5lbC4gVGltZSB0byBncmFiIHRoZSBjb2RlLiBJJiMzOTtsbCBwcm9iYWJseSB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIEJQRiB2ZXJpZmljYXRpb24gcHJvY2Vzcy4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2JhY2t0cmFjay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NzA6XHRcdFx0XHQgKiBiZWZvcmUgaXQgd291bGQgYmUgZXF1YWxseSBuZWNlc3NhcnkgdG9cbiA1NzE6XHRcdFx0XHQgKiBwcm9wYWdhdGUgaXQgdG8gZHJlZy5cbiA1NzI6XHRcdFx0XHQgKi9cbiA1NzM6XHRcdFx0XHRpZiAoIWhpc3QgfHwgIShoaXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJTlNOX0ZfU1JDX1JFR19TVEFDSykpXG4gNTc0Olx0XHRcdFx0XHRidF9zZXRfcmVnKGJ0LCBzcmVnKTtcbiA1NzU6XHRcdFx0XHRpZiAoIWhpc3QgfHwgIShoaXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBJTlNOX0ZfRFNUX1JFR19TVEFDSykpXG4gNTc2Olx0XHRcdFx0XHRidF9zZXRfcmVnKGJ0LCBkcmVnKTtcbiA1Nzc6XHRcdFx0fSBlbHNlIGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0spIHtcbiA1Nzg6XHRcdFx0XHQgLyogZHJlZyBcdTAwM2Njb25kXHUwMDNlIEtcbiA1Nzk6XHRcdFx0XHQgICogT25seSBkcmVnIHN0aWxsIG5lZWRzIHByZWNpc2lvbiBiZWZvcmVcbiA1ODA6XHRcdFx0XHQgICogdGhpcyBpbnNuLCBzbyBmb3IgdGhlIEstYmFzZWQgY29uZGl0aW9uYWxcbiA1ODE6XHRcdFx0XHQgICogdGhlcmUgaXMgbm90aGluZyBuZXcgdG8gYmUgbWFya2VkLlxuIDU4MjpcdFx0XHRcdCAgKi9cbiA1ODM6XHRcdFx0fVxuIDU4NDpcdFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfTEQpIHtcbiA1ODU6XHRcdFx0LyogSXQmIzM5O3MgbGRfaW1tNjQgb3IgbGRfYWJzIG9yIGxkX2luZC5cbiA1ODY6XHRcdFx0ICogRm9yIGxkX2ltbTY0IG5vIGZ1cnRoZXIgdHJhY2tpbmcgb2YgcHJlY2lzaW9uXG4gNTg3Olx0XHRcdCAqIGludG8gcGFyZW50IGlzIG5lY2Vzc2FyeVxuIDU4ODpcdFx0XHQgKi9cbiA1ODk6XHRcdFx0aWYgKG1vZGUgPT0gQlBGX0lNTSkge1xuIDU5MDpcdFx0XHRcdGJ0X2NsZWFyX3JlZyhidCwgZHJlZyk7XG4gNTkxOlx0XHRcdFx0cmV0dXJuIDA7XG4gNTkyOlx0XHRcdH1cbiA1OTM6XHRcdFx0LypcbiA1OTQ6XHRcdFx0ICogQlBGX3tJTkQsQUJTfSBhcmUgbW9kZWxsZWQgYXMgdHdvIGJyYW5jaGVzOlxuIDU5NTpcdFx0XHQgKiAtIGZhbGx0aHJvdWdoO1xuIDU5NjpcdFx0XHQgKiAtIGltcGxpY2l0IHN1YnByb2dyYW0gZXhpdC5cbiA1OTc6XHRcdFx0ICogSXQgaXMgbmVjZXNzYXJ5IHRvIHN3aXRjaCBjdXJyZW50IGZyYW1lIGlmXG4gNTk4Olx0XHRcdCAqIGltcGxpY2l0IHN1YnByb2dyYW0gZXhpdCBicmFuY2ggaXMgYmFja3RyYWNrZWQuXG4gNTk5Olx0XHRcdCAqL1xuIDYwMDpcdFx0XHRpZiAobW9kZSA9PSBCUEZfSU5EIHx8IG1vZGUgPT0gQlBGX0FCUykge1xuIDYwMTpcdFx0XHRcdGlmIChidF9pc19yZWdfc2V0KGJ0LCBkcmVnKSlcbiA2MDI6XHRcdFx0XHRcdHJldHVybiAtRU5PVFNVUFA7XG4gNjAzOlx0XHRcdFx0aWYgKHN1YnNlcV9pZHggIT0gaWR4ICYjNDM7IDEpXG4gNjA0Olx0XHRcdFx0XHRpZiAoYnRfc3VicHJvZ19lbnRlcihidCkpXG4gNjA1Olx0XHRcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDYwNjpcdFx0XHRcdHJldHVybiAwO1xuIDYwNzpcdFx0XHR9XG4gNjA4Olx0XHR9XG4gNjA5Olx0XHQvKiBQcm9wYWdhdGUgcHJlY2lzaW9uIG1hcmtzIHRvIGxpbmtlZCByZWdpc3RlcnMsIHRvIGFjY291bnQgZm9yXG4gNjEwOlx0XHQgKiByZWdpc3RlcnMgbWFya2VkIGFzIHByZWNpc2UgaW4gdGhpcyBmdW5jdGlvbi5cbiA2MTE6XHRcdCAqL1xuIDYxMjpcdFx0YnBmX2J0X3N5bmNfbGlua2VkX3JlZ3MoYnQsIGhpc3QpO1xuIDYxMzpcdFx0cmV0dXJuIDA7XG4gNjE0Olx0fVxuIDYxNTpcdFxuIDYxNjpcdC8qIHRoZSBzY2FsYXIgcHJlY2lzaW9uIHRyYWNraW5nIGFsZ29yaXRobTpcbiA2MTc6XHQgKiAuIGF0IHRoZSBzdGFydCBhbGwgcmVnaXN0ZXJzIGhhdmUgcHJlY2lzZT1mYWxzZS5cbiA2MTg6XHQgKiAuIHNjYWxhciByYW5nZXMgYXJlIHRyYWNrZWQgYXMgbm9ybWFsIHRocm91Z2ggYWx1IGFuZCBqbXAgaW5zbnMuXG4gNjE5Olx0ICogLiBvbmNlIHByZWNpc2UgdmFsdWUgb2YgdGhlIHNjYWxhciByZWdpc3RlciBpcyB1c2VkIGluOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDU2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFZlcmlmaWVyIEJhY2t0cmFja2luZyBCdWcgRml4KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYmFja3RyYWNraW5nIHdoZW4gaGFuZGxpbmcgZWFybHkgc3VicHJvZ3JhbSBleGl0cywgbW9kZWxlZCBmb3IgYEJQRl9MRCB8IEJQRl9BQlNgIGluc3RydWN0aW9ucywgd2hpY2ggd2FzIGxlYWRpbmcgdG8gYSBzZWdmYXVsdC4gVGhlIGNvbW1pdCBjb21tZW50IHBvaW50cyBtZSB0byB0aGUgYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgIGZpbGUgYW5kIHRoZSBiYWNrdHJhY2tpbmcgYWxnb3JpdGhtLgoKTG9va2luZyBhdCB0aGUgY29kZSwgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIHNlZW1zIHRvIGJlIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyBwcmVjaXNpb24gZHVyaW5nIGJhY2t0cmFja2luZywgcGFydGljdWxhcmx5IHdpdGggdGhlIGBCUEZfTERgIGNsYXNzIG9mIGluc3RydWN0aW9ucy4gVGhlIG9yaWdpbmFsIGNvZGUmIzM5O3MgbG9naWMgaGVyZSB3YXMgcHJvYmxlbWF0aWMuIFdoZW4gZW5jb3VudGVyaW5nIGBCUEZfTERgIGluc3RydWN0aW9ucywgaXQgd291bGQgaGFuZGxlIGBsZF9pbW02NGAsIGBsZF9hYnNgLCBhbmQgYGxkX2luZGAgZGlmZmVyZW50bHkuIFRoZSBgbGRfaW1tNjRgIGNhc2Ugc2VlbWVkIGZpbmUsIGJ1dCB0aGUgaGFuZGxpbmcgb2YgYEJQRl9JTkRgIG9yIGBCUEZfQUJTYCBpbnN0cnVjdGlvbnMgaW52b2x2ZWQgY2xlYXJpbmcgcmVnaXN0ZXIgcHJlY2lzaW9uIGFuZCB0aGVuIHJldHVybmluZy4KCk5vdywgd2l0aCB0aGlzIHBhdGNoLCB0aGVyZSBhcmUgc29tZSBzaWduaWZpY2FudCBjaGFuZ2VzLiBJZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgYEJQRl9JTU1gLCB0aGUgY29kZSBzaW1wbHkgY2xlYXJzIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciYjMzk7cyBwcmVjaXNpb24gYW5kIHJldHVybnMuIEhvd2V2ZXIsIHdpdGggYEJQRl9JTkRgIG9yIGBCUEZfQUJTYCwgdGhlcmUmIzM5O3Mgbm93IGEgY2hlY2s6IGBpZiAoYnRfaXNfcmVnX3NldChidCwgZHJlZykpIHJldHVybiAtRU5PVFNVUFA7YC4gQWRkaXRpb25hbGx5LCB0aGVyZSYjMzk7cyBhIGNvbmRpdGlvbmFsIGBidF9zdWJwcm9nX2VudGVyYCBjYWxsIGJhc2VkIG9uIGBzdWJzZXFfaWR4YCBhbmQgYGlkeGAsIHRoYXQgbG9va3MgcHJldHR5IGNydWNpYWwsIGFuZCBpZiBpdCBzdWNjZWVkcywgdGhlcmUmIzM5O3MgYW4gYC1FRkFVTFRgIHJldHVybi4gVGhpcyBsb29rcyBsaWtlIHRoZSBtYWluIGNoYW5nZS4KClNvIHRoZSBtYWluIGNoYW5nZSBpcyB0aGF0IGJlZm9yZSwgdGhlcmUgd2FzIG5vIHByb3RlY3Rpb24gb2YgYSByZWdpc3RlciB0aGF0IG1pZ2h0IHN0aWxsIGJlIHNldC4gTm93IHRoZSBwYXRjaCBmaXJzdCBjaGVja3MgaWYgdGhlIHJlZ2lzdGVyIGlzIHNldCwgYW5kIGlmIGl0IGlzLCB0aGUgdmVyaWZpZXIgcmV0dXJucyB0aGF0IHRoaXMgaW5zdHJ1Y3Rpb24gdHlwZSBpcyBub3Qgc3VwcG9ydGVkLiBPdGhlcndpc2UsIGl0IGNvbmRpdGlvbmFsbHkgY2FsbHMgYGJ0X3N1YnByb2dfZW50ZXJgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGJ0X3N1YnByb2dfZW50ZXJgIGRvZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBiYWNrdHJhY2sgc3RydWN0dXJlIGFuZCBob3cgaXQmIzM5O3MgdXNlZC4gQmFzZWQgb24gdGhlc2UgY2hhbmdlcywgSSYjMzk7bSBndWVzc2luZyB0aGlzIHByZXZlbnRzIHByZW1hdHVyZSBiYWNrdHJhY2tpbmcgYW5kIGFsbG93cyBwcm9wZXIgcHJlY2lzaW9uIHRyYWNraW5nIHRocm91Z2ggc3VicHJvZ3JhbSBleGl0cywgdGh1cyBhdmVydGluZyB0aGUgc2VnZmF1bHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIwOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2J0X3N1YnByb2dfZW50ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9iYWNrdHJhY2suYz0xNDI9c3RhdGljIGlubGluZSBib29sIGJ0X2lzX2ZyYW1lX3N0YWNrX2FyZ19zbG90X3NldChzdHJ1Y3QgYmFja3RyYWNrX3N0YXRlICpidCwgdTMyIGZyYW1lLCB1MzIgc2xvdClcbi0tXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTE0Ni1cbmtlcm5lbC9icGYvYmFja3RyYWNrLmM6MTQ3OnN0YXRpYyBpbmxpbmUgaW50IGJ0X3N1YnByb2dfZW50ZXIoc3RydWN0IGJhY2t0cmFja19zdGF0ZSAqYnQpXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTE0OC17XG4tLVxua2VybmVsL2JwZi9iYWNrdHJhY2suYz0yNjU9c3RhdGljIGludCBiYWNrdHJhY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LCBpbnQgc3Vic2VxX2lkeCxcbi0tXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTUxOC1cdFx0XHQgICAgXHUwMDI2XHUwMDI2IHN1YnNlcV9pZHggLSBpZHggIT0gMSkge1xua2VybmVsL2JwZi9iYWNrdHJhY2suYzo1MTk6XHRcdFx0XHRpZiAoYnRfc3VicHJvZ19lbnRlcihidCkpXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTUyMC1cdFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4tLVxua2VybmVsL2JwZi9iYWNrdHJhY2suYy01NTQtXHRcdFx0YnRfY2xlYXJfcmVnKGJ0LCBCUEZfUkVHXzApO1xua2VybmVsL2JwZi9iYWNrdHJhY2suYzo1NTU6XHRcdFx0aWYgKGJ0X3N1YnByb2dfZW50ZXIoYnQpKVxua2VybmVsL2JwZi9iYWNrdHJhY2suYy01NTYtXHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTYwMy1cdFx0XHRpZiAoc3Vic2VxX2lkeCAhPSBpZHggJiM0MzsgMSlcbmtlcm5lbC9icGYvYmFja3RyYWNrLmM6NjA0Olx0XHRcdFx0aWYgKGJ0X3N1YnByb2dfZW50ZXIoYnQpKVxua2VybmVsL2JwZi9iYWNrdHJhY2suYy02MDUtXHRcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzExCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHN0cnVjdHVyZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkRpdmluZyBpbnRvIGBidF9zdWJwcm9nX2VudGVyYCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgYnRfc3VicHJvZ19lbnRlcmAgd2l0aGluIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGNvbnNpZGVyIGl0cyByb2xlIGluIHRoZSBCUEYgYmFja3RyYWNrIG1lY2hhbmlzbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gY29udHJpYnV0ZXMgdG8gdHJhY2luZyBwcm9ncmFtIGV4ZWN1dGlvbiBhbmQgbWFuYWdpbmcgbmVzdGVkIGNhbGxzLiBXaGF0IGxldmVsIG9mIGRldGFpbCBkb2VzIGl0IHByb3ZpZGU/IERvZXMgaXQgc3RvcmUgcmVnaXN0ZXJzLCBwcm9ncmFtIGNvdW50ZXJzLCBvciBwZXJoYXBzIHRoZSBzdGFjayBmcmFtZSBvZiB0aGUgc3VicHJvZ3JhbSBpdCBpcyBlbnRlcmluZz8gVGhpbmtpbmcgYmFjayB0byBteSBleHBlcmllbmNlLCB0aGlzIGlzIGxpa2VseSBhIGNydWNpYWwgZnVuY3Rpb24gZm9yIGRlYnVnZ2luZyBhbmQgYW5hbHl6aW5nIEJQRiBwcm9ncmFtcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBjb21wbGV4LCBtdWx0aS1sYXllcmVkIGFwcGxpY2F0aW9ucy4gV2UgYXJlIHRhbGtpbmcgYWJvdXQgYmFja3RyYWNrLCBzbyB0aGlzIGNvZGUgaXMgc3VyZWx5IGNyaXRpY2FsIGZvciByZWNvdmVyeSBvciBlcnJvciBoYW5kbGluZy4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBiYWNrdHJhY2sgaW5mcmFzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSBob3cgdGhpcyB0aWVzIGludG8gYW55IGFzc29jaWF0ZWQgc3RhY2sgbWFuYWdlbWVudCBvciBzdGF0ZSBzYXZpbmcuIElzIHRoZXJlIGFueSBwb3RlbnRpYWwgb3ZlcmhlYWQgZnJvbSB0aGlzPyBHaXZlbiB0aGUgcGVyZm9ybWFuY2UtY3JpdGljYWwgbmF0dXJlIG9mIEJQRiwgdW5kZXJzdGFuZGluZyB0aGUgZWZmaWNpZW5jeSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHBhcmFtb3VudC4gQW5kLCBjb25zaWRlcmluZyB0aGUgY29udGV4dCBvZiBgYmFja3RyYWNrLmNgLCB0aGlzIGNvZGUgaXMgcHJvYmFibHkgcHJldHR5IGltcG9ydGFudCB3aGVuIHRoZSBzeXN0ZW0gZW5jb3VudGVycyBhbiBlcnJvciBvciBhIHBvdGVudGlhbGx5IGJhZCBwcm9ncmFtLCB3aGljaCB3b3VsZCBhbGxvdyBmb3IgZWFzaWVyIGRlYnVnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2JhY2t0cmFjay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDU6XHR9XG4gMTQ2Olx0XG4gMTQ3Olx0c3RhdGljIGlubGluZSBpbnQgYnRfc3VicHJvZ19lbnRlcihzdHJ1Y3QgYmFja3RyYWNrX3N0YXRlICpidClcbiAxNDg6XHR7XG4gMTQ5Olx0XHRpZiAoYnQtXHUwMDNlZnJhbWUgPT0gTUFYX0NBTExfRlJBTUVTIC0gMSkge1xuIDE1MDpcdFx0XHR2ZXJpZmllcl9idWcoYnQtXHUwMDNlZW52LCBcJiMzNDtzdWJwcm9nIGVudGVyIGZyb20gZnJhbWUgJWRcJiMzNDssIGJ0LVx1MDAzZWZyYW1lKTtcbiAxNTE6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gMTUyOlx0XHR9XG4gMTUzOlx0XHRidC1cdTAwM2VmcmFtZSYjNDM7JiM0Mzs7XG4gMTU0Olx0XHRyZXR1cm4gMDtcbiAxNTU6XHR9XG4gMTU2Olx0XG4gMTU3Olx0c3RhdGljIGlubGluZSBpbnQgYnRfc3VicHJvZ19leGl0KHN0cnVjdCBiYWNrdHJhY2tfc3RhdGUgKmJ0KVxuIDE1ODpcdHtcbiAxNTk6XHRcdGlmIChidC1cdTAwM2VmcmFtZSA9PSAwKSB7XG4gMTYwOlx0XHRcdHZlcmlmaWVyX2J1ZyhidC1cdTAwM2VlbnYsIFwmIzM0O3N1YnByb2cgZXhpdCBmcm9tIGZyYW1lIDBcJiMzNDspO1xuIDE2MTpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAxNjI6XHRcdH1cbiAxNjM6XHRcdGJ0LVx1MDAzZWZyYW1lLS07XG4gMTY0Olx0XHRyZXR1cm4gMDtcbiAxNjU6XHR9XG4gMTY2Olx0XG4gMTY3Olx0c3RhdGljIGlubGluZSB2b2lkIGJ0X2NsZWFyX2ZyYW1lX3JlZyhzdHJ1Y3QgYmFja3RyYWNrX3N0YXRlICpidCwgdTMyIGZyYW1lLCB1MzIgcmVnKVxuIDE2ODpcdHtcbiAxNjk6XHRcdGJ0LVx1MDAzZXJlZ19tYXNrc1tmcmFtZV0gXHUwMDI2PSB+KDEgXHUwMDNjXHUwMDNjIHJlZyk7XG4gMTcwOlx0fVxuIDE3MTpcdFxuIDE3MjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBidF9zZXRfcmVnKHN0cnVjdCBiYWNrdHJhY2tfc3RhdGUgKmJ0LCB1MzIgcmVnKVxuIDE3MzpcdHtcbiAxNzQ6XHRcdGJwZl9idF9zZXRfZnJhbWVfcmVnKGJ0LCBidC1cdTAwM2VmcmFtZSwgcmVnKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ3OQoJCQkJCQkJb3V0cHV0OiAxOTIKCQkJCQkJCXRob3VnaHRzOiA2NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBmb3IgS01TQU4gaW4gdGhpcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBhbmFseXNpcyBvZiB0aGlzIHBhdGNoLCBmb2N1c2VkIG9uIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYCBhbmQgYSBuZXcgQlBGIHNlbGZ0ZXN0LCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBLTVNBTiBpc3N1ZXMg4oCTIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIOKAkyBhbmQgSSBkb24mIzM5O3Qgc2VlIGFueSBoZXJlLgoKRmlyc3QsIEkmIzM5O3ZlIGNoZWNrZWQgZm9yIGFueSBpbnRlcmFjdGlvbiB3aXRoIHVzZXIgc3BhY2UuIFRoZXJlJiMzOTtzIG5vdGhpbmcgYmVpbmcgc2VudCBvdXQgdGhhdCBjb3VsZCBoYXZlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcuIE5vdGhpbmcmIzM5O3MgZXhwb3NlZCB2aWEgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmssIGlvY3Rscywgc29ja2V0IG9wdGlvbnMgb3IgQlBGIGJ1ZmZlcnMgdGhhdCBhcmUgdW5kZXIgc3VzcGljaW9uLiBUaGUgdmFyaWFibGVzIGludm9sdmVkIGluIHRoZSBiYWNrdHJhY2tpbmcgbG9naWMg4oCTIGBidGAsIGBkcmVnYCwgYHN1YnNlcV9pZHhgLCBgaWR4YCwgZXRjLiDigJMgYXJlIGFsbCBwcm9wZXJseSBpbml0aWFsaXplZCB3aXRoaW4gdGhlIHZlcmlmaWVyIHN0YXRlIHRyYWNraW5nLCBzbyBubyBjb25jZXJucyB0aGVyZS4KCk5leHQsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIGxhdGVyIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIEFuZCBjcml0aWNhbGx5LCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IG1lc3Mgd2l0aCBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIHBhcnRzIG9mIGJ1ZmZlcnMuIFRoaXMgaXMgYWxsIGFib3V0IGJhY2t0cmFja2luZyBwcmVjaXNpb24gd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuCgpUaGUgZml4IGl0c2VsZiBhZGRyZXNzZXMgYW4gaXNzdWUgaW4gaG93IHRoZSBiYWNrdHJhY2tpbmcgaGFuZGxlcyBlYXJseSBleGl0cyBmcm9tIHN1YnByb2dyYW1zLiBUaGUgcHJvYmxlbSB3YXMgdGhhdCwgZm9yIGBCUEZfTEQgfCBCUEZfQUJTYCBpbnN0cnVjdGlvbnMsIHRoZSBjYWxsIGZyYW1lcyBpbiBgYmFja3RyYWNrX3N0YXRlYCAoYGJ0LSZndDtmcmFtZWApIHdlcmVuJiMzOTt0IGJlaW5nIHN3aXRjaGVkIGNvcnJlY3RseSBvbiBlYXJseSBleGl0LCB3aGljaCBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBzdGF0ZSBhbmQgcG90ZW50aWFsIGNyYXNoZXMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEJ1dCB0aGUgcmVzdWx0aW5nIHByb2JsZW1zIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4KClRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIHdvdWxkIGJlIGNvbXBsZXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHN1Y2ggYXMgS0FTQU4sIExPQ0tERVAuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHNpdHVhdGlvbiB3aGVyZSBgTmVlZHNLTVNBTj1mYWxzZWAgaXMgdGhlIHJpZ2h0IGNhbGwuIFRoZSBidWcsIGlmIGFueSwgd2lsbCBiZSBjYXVnaHQgYnkgS0FTQU4uCgpJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgYW0gcmVhZHkgdG8gY2xlYXJseSBhcnRpY3VsYXRlIHRoZSBLTVNBTlJlYXNvbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjA6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHZlcmlmaWVyIHNjYWxhciBwcmVjaXNpb24gYmFja3RyYWNraW5nIGxvZ2ljIGluIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYCB0byBwcm9wZXJseSB1cGRhdGUgdGhlIHN1YnByb2dyYW0gY2FsbCBmcmFtZSAoYGJ0X3N1YnByb2dfZW50ZXJgKSB3aGVuIGJhY2t0cmFja2luZyB0aGUgaW1wbGljaXQgZWFybHkgZXhpdCBwYXRoIG9mIGBCUEZfTEQgfCBCUEZfQUJTYCBhbmQgYEJQRl9MRCB8IEJQRl9JTkRgIGluc3RydWN0aW9ucy4gXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdmVyaWZpZXIgYnJhbmNoZXMsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucyBvciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcGF0aHMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSBmcmFtZSBpbmRleGluZyBlcnJvcnMgb3IgdmVyaWZpZXIgc3RhdGUgY29ycnVwdGlvbiB3b3VsZCBtYW5pZmVzdCBhcyBjb250cm9sIGZsb3cgZmF1bHRzLCBhc3NlcnRpb25zLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHdoaWNoIGFyZSBhbHJlYWR5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHZlcmlmaWVyIHNjYWxhciBwcmVjaXNpb24gYmFja3RyYWNraW5nIGxvZ2ljIGluIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYCB0byBwcm9wZXJseSB1cGRhdGUgdGhlIHN1YnByb2dyYW0gY2FsbCBmcmFtZSAoYGJ0X3N1YnByb2dfZW50ZXJgKSB3aGVuIGJhY2t0cmFja2luZyB0aGUgaW1wbGljaXQgZWFybHkgZXhpdCBwYXRoIG9mIGBCUEZfTEQgfCBCUEZfQUJTYCBhbmQgYEJQRl9MRCB8IEJQRl9JTkRgIGluc3RydWN0aW9ucy4gXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdmVyaWZpZXIgYnJhbmNoZXMsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucyBvciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcGF0aHMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSBmcmFtZSBpbmRleGluZyBlcnJvcnMgb3IgdmVyaWZpZXIgc3RhdGUgY29ycnVwdGlvbiB3b3VsZCBtYW5pZmVzdCBhcyBjb250cm9sIGZsb3cgZmF1bHRzLCBhc3NlcnRpb25zLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHdoaWNoIGFyZSBhbHJlYWR5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0NTo0Ny4zMTk4MzIzMDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODUyODkwNzY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9tYXJrX2NoYWluX3ByZWNpc2lvblwiLFxuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgc2NhbGFyIHByZWNpc2lvbiBiYWNrdHJhY2tpbmcgbG9naWMgaW4gYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgIHRvIHByb3Blcmx5IHVwZGF0ZSB0aGUgc3VicHJvZ3JhbSBjYWxsIGZyYW1lIChgYnRfc3VicHJvZ19lbnRlcmApIHdoZW4gYmFja3RyYWNraW5nIHRoZSBpbXBsaWNpdCBlYXJseSBleGl0IHBhdGggb2YgYEJQRl9MRCB8IEJQRl9BQlNgIGFuZCBgQlBGX0xEIHwgQlBGX0lORGAgaW5zdHJ1Y3Rpb25zLiBcXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHZlcmlmaWVyIGJyYW5jaGVzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdGhzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gZnJhbWUgaW5kZXhpbmcgZXJyb3JzIG9yIHZlcmlmaWVyIHN0YXRlIGNvcnJ1cHRpb24gd291bGQgbWFuaWZlc3QgYXMgY29udHJvbCBmbG93IGZhdWx0cywgYXNzZXJ0aW9ucywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aGljaCBhcmUgYWxyZWFkeSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJ3Mgc2NhbGFyIHByZWNpc2lvbiBiYWNrdHJhY2tpbmcgbG9naWMgaW4gYmFja3RyYWNrX2luc24oKSBmb3IgQlBGX0xEIChzcGVjaWZpY2FsbHkgQlBGX0FCUy9CUEZfSU5EIGluc3RydWN0aW9ucyB3aXRoIGltcGxpY2l0IHN1YnByb2dyYW0gZXhpdCBicmFuY2hlcykgdG8gcHJvcGVybHkgYWRqdXN0IHRoZSBiYWNrdHJhY2sgY2FsbCBmcmFtZSBhbmQgcHJldmVudCB2ZXJpZmllciBjcmFzaGVzL3NlZ2ZhdWx0cy4gVGhpcyBpcyBjb3JlIHZlcmlmaWVyIGxvZ2ljIHJlYWNoYWJsZSB2aWEgdGhlIGJwZihCUEZfUFJPR19MT0FEKSBzeXNjYWxsIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0NTo0Ny4zMTk4Mzk1MzZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMjY4Mzg4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA2MzU5ZTQ3NDgxY2YyMzczMGM1OTIwYWMyZGJiZTA2ZDVhNGY4MTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgMiAyMDo0NTo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jIGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xcbmluZGV4IGEyYjE4YTlmMTY5NGMuLmVhZjc0MzhiOWViZjkgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9iYWNrdHJhY2suY1xcbisrKyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcXG5AQCAtNTgyLDE2ICs1ODIsMjkgQEAgc3RhdGljIGludCBiYWNrdHJhY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LCBpbnQgc3Vic2VxX2lkeCxcXG4gXFx0XFx0XFx0ICAqL1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEKSB7XFxuLVxcdFxcdGlmICghYnRfaXNfcmVnX3NldChidCwgZHJlZykpXFxuLVxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRidF9jbGVhcl9yZWcoYnQsIGRyZWcpO1xcbiBcXHRcXHQvKiBJdCdzIGxkX2ltbTY0IG9yIGxkX2FicyBvciBsZF9pbmQuXFxuIFxcdFxcdCAqIEZvciBsZF9pbW02NCBubyBmdXJ0aGVyIHRyYWNraW5nIG9mIHByZWNpc2lvblxcbiBcXHRcXHQgKiBpbnRvIHBhcmVudCBpcyBuZWNlc3NhcnlcXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmIChtb2RlID09IEJQRl9JTkQgfHwgbW9kZSA9PSBCUEZfQUJTKVxcbi1cXHRcXHRcXHQvKiB0byBiZSBhbmFseXplZCAqL1xcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbitcXHRcXHRpZiAobW9kZSA9PSBCUEZfSU1NKSB7XFxuK1xcdFxcdFxcdGJ0X2NsZWFyX3JlZyhidCwgZHJlZyk7XFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHR9XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEJQRl97SU5ELEFCU30gYXJlIG1vZGVsbGVkIGFzIHR3byBicmFuY2hlczpcXG4rXFx0XFx0ICogLSBmYWxsdGhyb3VnaDtcXG4rXFx0XFx0ICogLSBpbXBsaWNpdCBzdWJwcm9ncmFtIGV4aXQuXFxuK1xcdFxcdCAqIEl0IGlzIG5lY2Vzc2FyeSB0byBzd2l0Y2ggY3VycmVudCBmcmFtZSBpZlxcbitcXHRcXHQgKiBpbXBsaWNpdCBzdWJwcm9ncmFtIGV4aXQgYnJhbmNoIGlzIGJhY2t0cmFja2VkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKG1vZGUgPT0gQlBGX0lORCB8fCBtb2RlID09IEJQRl9BQlMpIHtcXG4rXFx0XFx0XFx0aWYgKGJ0X2lzX3JlZ19zZXQoYnQsIGRyZWcpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbitcXHRcXHRcXHRpZiAoc3Vic2VxX2lkeCAhPSBpZHggKyAxKVxcbitcXHRcXHRcXHRcXHRpZiAoYnRfc3VicHJvZ19lbnRlcihidCkpXFxuK1xcdFxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcdC8qIFByb3BhZ2F0ZSBwcmVjaXNpb24gbWFya3MgdG8gbGlua2VkIHJlZ2lzdGVycywgdG8gYWNjb3VudCBmb3JcXG4gXFx0ICogcmVnaXN0ZXJzIG1hcmtlZCBhcyBwcmVjaXNlIGluIHRoaXMgZnVuY3Rpb24uXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zdWJwcm9nX3ByZWNpc2lvbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3N1YnByb2dfcHJlY2lzaW9uLmNcXG5pbmRleCBkMjFkMzJmNmE2NzYwLi5lMTc0YTkwNWM1NjI4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zdWJwcm9nX3ByZWNpc2lvbi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3N1YnByb2dfcHJlY2lzaW9uLmNcXG5AQCAtODQ2LDQgKzg0Niw1NSBAQCBfX25ha2VkIGludCBzdWJwcm9nX3Jlc3VsdF90YWlsX2NhbGwodm9pZClcXG4gXFx0KTtcXG4gfVxcbiBcXG4rX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZFxcbitzdGF0aWMgaW50IGxkX2Fic19zdWJwcm9nKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXG4rXFx0XFx0XFxcInI2ID0gcjE7XFxcIlxcbitcXHRcXHRcXFwicjcgPSByMTtcXFwiXFxuK1xcdFxcdFxcXCIuOGJ5dGUgJVtsZF9hYnNdO1xcXCJcXG4rXFx0XFx0XFxcImV4aXQ7XFxcIlxcbitcXHRcXHQ6XFxuK1xcdFxcdDogX19pbW1faW5zbihsZF9hYnMsIEJQRl9MRF9BQlMoQlBGX1csIDApKVxcbitcXHRcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisvKlxcbisgKiBCdWdneSB2ZXJpZmllciBkaWQgbm90IHByb3Blcmx5IGJhY2t0cmFjayBlYXJseSBzdWJwcm9ncmFtIGV4aXRcXG4rICogbW9kZWxsZWQgZm9yIEJQRl9MRCB8IEJQRl9BQlMgaW5zdHJ1Y3Rpb24sIGNhdXNpbmcgYSBzZWdmYXVsdC5cXG4rICovXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19zdWNjZXNzXFxuK19fbG9nX2xldmVsKDIpXFxuKy8qIGVhcmx5IGV4aXQgcGF0aCAqL1xcbitfX21zZyhcXFwiMzogKDBmKSByMSArPSByN1xcXCIpXFxuK19fbXNnKFxcXCJtYXJrX3ByZWNpc2U6IGZyYW1lMDogcmVncz1yNyBzdGFjaz0gYmVmb3JlIDI6IChiZikgcjEgPSByMTBcXFwiKVxcbitfX21zZyhcXFwibWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSA5OiAoMjApIHIwID0gKih1MzIgKilza2JbMF1cXFwiKVxcbitfX21zZyhcXFwibWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgODogKGJmKSByNyA9IHIxXFxcIilcXG4rX19tc2coXFxcIm1hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDc6IChiZikgcjYgPSByMVxcXCIpXFxuK19fbXNnKFxcXCJtYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSAxOiAoODUpIGNhbGwgcGMrNVxcXCIpXFxuK19fbXNnKFxcXCJtYXJrX3ByZWNpc2U6IGZyYW1lMDogcmVncz1yNyBzdGFjaz0gYmVmb3JlIDA6IChiNykgcjcgPSAtOFxcXCIpXFxuKy8qIGZhbGx0aHJvdWdoIHBhdGggKi9cXG4rX19tc2coXFxcIjM6ICgwZikgcjEgKz0gcjdcXFwiKVxcbitfX21zZyhcXFwibWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSAyOiAoYmYpIHIxID0gcjEwXFxcIilcXG4rX19tc2coXFxcIm1hcmtfcHJlY2lzZTogZnJhbWUwOiByZWdzPXI3IHN0YWNrPSBiZWZvcmUgMTA6ICg5NSkgZXhpdFxcXCIpXFxuK19fbXNnKFxcXCJtYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSA5OiAoMjApIHIwID0gKih1MzIgKilza2JbMF1cXFwiKVxcbitfX21zZyhcXFwibWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgODogKGJmKSByNyA9IHIxXFxcIilcXG4rX19tc2coXFxcIm1hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDc6IChiZikgcjYgPSByMVxcXCIpXFxuK19fbXNnKFxcXCJtYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSAxOiAoODUpIGNhbGwgcGMrNVxcXCIpXFxuK19fbXNnKFxcXCJtYXJrX3ByZWNpc2U6IGZyYW1lMDogcmVncz1yNyBzdGFjaz0gYmVmb3JlIDA6IChiNykgcjcgPSAtOFxcXCIpXFxuK19fbmFrZWQgaW50IGxkX2Fic19iYWNrdHJhY2tfYm90aF9wYXRocyh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxuK1xcdFxcdFxcXCJyNyA9IC04O1xcXCJcXG4rXFx0XFx0XFxcImNhbGwgbGRfYWJzX3N1YnByb2c7XFxcIlxcbitcXHRcXHRcXFwicjEgPSByMTA7XFxcIlxcbitcXHRcXHRcXFwicjEgKz0gcjc7XFxcIiAvKiBtYXJrIHI3IGFzIHByZWNpc2UgKi9cXG4rXFx0XFx0XFxcIioodTY0ICopKHIxICsgMCkgPSAwO1xcXCJcXG4rXFx0XFx0XFxcInIwID0gMDtcXFwiXFxuK1xcdFxcdFxcXCJleGl0O1xcXCJcXG4rXFx0XFx0Ojo6IF9fY2xvYmJlcl9hbGxcXG4rXFx0KTtcXG4rfVxcbitcXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ1OjQ3Ljc0MzczNDQzNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDQwMzg3MDYzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfbWFya19jaGFpbl9wcmVjaXNpb25cIixcbiAgICBcImJwZl9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBzY2FsYXIgcHJlY2lzaW9uIGJhY2t0cmFja2luZyBsb2dpYyBpbiBiYWNrdHJhY2tfaW5zbigpIGZvciBCUEZfTEQgKHNwZWNpZmljYWxseSBCUEZfQUJTL0JQRl9JTkQgaW5zdHJ1Y3Rpb25zIHdpdGggaW1wbGljaXQgc3VicHJvZ3JhbSBleGl0IGJyYW5jaGVzKSB0byBwcm9wZXJseSBhZGp1c3QgdGhlIGJhY2t0cmFjayBjYWxsIGZyYW1lIGFuZCBwcmV2ZW50IHZlcmlmaWVyIGNyYXNoZXMvc2VnZmF1bHRzLiBUaGlzIGlzIGNvcmUgdmVyaWZpZXIgbG9naWMgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKEJQRl9QUk9HX0xPQUQpIHN5c2NhbGwgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA2MzU5ZTQ3NDgxY2YyMzczMGM1OTIwYWMyZGJiZTA2ZDVhNGY4MTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDIwOjQ1OjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9iYWNrdHJhY2suYyBiL2tlcm5lbC9icGYvYmFja3RyYWNrLmNcbmluZGV4IGEyYjE4YTlmMTY5NGMuLmVhZjc0MzhiOWViZjkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2JhY2t0cmFjay5jXG4rKysgYi9rZXJuZWwvYnBmL2JhY2t0cmFjay5jXG5AQCAtNTgyLDE2ICs1ODIsMjkgQEAgc3RhdGljIGludCBiYWNrdHJhY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LCBpbnQgc3Vic2VxX2lkeCxcbiBcdFx0XHQgICovXG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEKSB7XG4tXHRcdGlmICghYnRfaXNfcmVnX3NldChidCwgZHJlZykpXG4tXHRcdFx0cmV0dXJuIDA7XG4tXHRcdGJ0X2NsZWFyX3JlZyhidCwgZHJlZyk7XG4gXHRcdC8qIEl0J3MgbGRfaW1tNjQgb3IgbGRfYWJzIG9yIGxkX2luZC5cbiBcdFx0ICogRm9yIGxkX2ltbTY0IG5vIGZ1cnRoZXIgdHJhY2tpbmcgb2YgcHJlY2lzaW9uXG4gXHRcdCAqIGludG8gcGFyZW50IGlzIG5lY2Vzc2FyeVxuIFx0XHQgKi9cbi1cdFx0aWYgKG1vZGUgPT0gQlBGX0lORCB8fCBtb2RlID09IEJQRl9BQlMpXG4tXHRcdFx0LyogdG8gYmUgYW5hbHl6ZWQgKi9cbi1cdFx0XHRyZXR1cm4gLUVOT1RTVVBQO1xuK1x0XHRpZiAobW9kZSA9PSBCUEZfSU1NKSB7XG4rXHRcdFx0YnRfY2xlYXJfcmVnKGJ0LCBkcmVnKTtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1x0XHQvKlxuK1x0XHQgKiBCUEZfe0lORCxBQlN9IGFyZSBtb2RlbGxlZCBhcyB0d28gYnJhbmNoZXM6XG4rXHRcdCAqIC0gZmFsbHRocm91Z2g7XG4rXHRcdCAqIC0gaW1wbGljaXQgc3VicHJvZ3JhbSBleGl0LlxuK1x0XHQgKiBJdCBpcyBuZWNlc3NhcnkgdG8gc3dpdGNoIGN1cnJlbnQgZnJhbWUgaWZcbitcdFx0ICogaW1wbGljaXQgc3VicHJvZ3JhbSBleGl0IGJyYW5jaCBpcyBiYWNrdHJhY2tlZC5cbitcdFx0ICovXG4rXHRcdGlmIChtb2RlID09IEJQRl9JTkQgfHwgbW9kZSA9PSBCUEZfQUJTKSB7XG4rXHRcdFx0aWYgKGJ0X2lzX3JlZ19zZXQoYnQsIGRyZWcpKVxuK1x0XHRcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbitcdFx0XHRpZiAoc3Vic2VxX2lkeCAhPSBpZHggKyAxKVxuK1x0XHRcdFx0aWYgKGJ0X3N1YnByb2dfZW50ZXIoYnQpKVxuK1x0XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuIFx0fVxuIFx0LyogUHJvcGFnYXRlIHByZWNpc2lvbiBtYXJrcyB0byBsaW5rZWQgcmVnaXN0ZXJzLCB0byBhY2NvdW50IGZvclxuIFx0ICogcmVnaXN0ZXJzIG1hcmtlZCBhcyBwcmVjaXNlIGluIHRoaXMgZnVuY3Rpb24uXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3N1YnByb2dfcHJlY2lzaW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3VicHJvZ19wcmVjaXNpb24uY1xuaW5kZXggZDIxZDMyZjZhNjc2MC4uZTE3NGE5MDVjNTYyOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zdWJwcm9nX3ByZWNpc2lvbi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3VicHJvZ19wcmVjaXNpb24uY1xuQEAgLTg0Niw0ICs4NDYsNTUgQEAgX19uYWtlZCBpbnQgc3VicHJvZ19yZXN1bHRfdGFpbF9jYWxsKHZvaWQpXG4gXHQpO1xuIH1cbiBcbitfX25ha2VkIF9fbm9pbmxpbmUgX191c2VkXG4rc3RhdGljIGludCBsZF9hYnNfc3VicHJvZyh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcdFwicjYgPSByMTtcIlxuK1x0XHRcInI3ID0gcjE7XCJcbitcdFx0XCIuOGJ5dGUgJVtsZF9hYnNdO1wiXG4rXHRcdFwiZXhpdDtcIlxuK1x0XHQ6XG4rXHRcdDogX19pbW1faW5zbihsZF9hYnMsIEJQRl9MRF9BQlMoQlBGX1csIDApKVxuK1x0XHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKlxuKyAqIEJ1Z2d5IHZlcmlmaWVyIGRpZCBub3QgcHJvcGVybHkgYmFja3RyYWNrIGVhcmx5IHN1YnByb2dyYW0gZXhpdFxuKyAqIG1vZGVsbGVkIGZvciBCUEZfTEQgfCBCUEZfQUJTIGluc3RydWN0aW9uLCBjYXVzaW5nIGEgc2VnZmF1bHQuXG4rICovXG4rU0VDKFwic29ja2V0XCIpXG4rX19zdWNjZXNzXG4rX19sb2dfbGV2ZWwoMilcbisvKiBlYXJseSBleGl0IHBhdGggKi9cbitfX21zZyhcIjM6ICgwZikgcjEgKz0gcjdcIilcbitfX21zZyhcIm1hcmtfcHJlY2lzZTogZnJhbWUwOiByZWdzPXI3IHN0YWNrPSBiZWZvcmUgMjogKGJmKSByMSA9IHIxMFwiKVxuK19fbXNnKFwibWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSA5OiAoMjApIHIwID0gKih1MzIgKilza2JbMF1cIilcbitfX21zZyhcIm1hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDg6IChiZikgcjcgPSByMVwiKVxuK19fbXNnKFwibWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgNzogKGJmKSByNiA9IHIxXCIpXG4rX19tc2coXCJtYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSAxOiAoODUpIGNhbGwgcGMrNVwiKVxuK19fbXNnKFwibWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSAwOiAoYjcpIHI3ID0gLThcIilcbisvKiBmYWxsdGhyb3VnaCBwYXRoICovXG4rX19tc2coXCIzOiAoMGYpIHIxICs9IHI3XCIpXG4rX19tc2coXCJtYXJrX3ByZWNpc2U6IGZyYW1lMDogcmVncz1yNyBzdGFjaz0gYmVmb3JlIDI6IChiZikgcjEgPSByMTBcIilcbitfX21zZyhcIm1hcmtfcHJlY2lzZTogZnJhbWUwOiByZWdzPXI3IHN0YWNrPSBiZWZvcmUgMTA6ICg5NSkgZXhpdFwiKVxuK19fbXNnKFwibWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgOTogKDIwKSByMCA9ICoodTMyICopc2tiWzBdXCIpXG4rX19tc2coXCJtYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSA4OiAoYmYpIHI3ID0gcjFcIilcbitfX21zZyhcIm1hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDc6IChiZikgcjYgPSByMVwiKVxuK19fbXNnKFwibWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgMTogKDg1KSBjYWxsIHBjKzVcIilcbitfX21zZyhcIm1hcmtfcHJlY2lzZTogZnJhbWUwOiByZWdzPXI3IHN0YWNrPSBiZWZvcmUgMDogKGI3KSByNyA9IC04XCIpXG4rX19uYWtlZCBpbnQgbGRfYWJzX2JhY2t0cmFja19ib3RoX3BhdGhzKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcbitcdFx0XCJyNyA9IC04O1wiXG4rXHRcdFwiY2FsbCBsZF9hYnNfc3VicHJvZztcIlxuK1x0XHRcInIxID0gcjEwO1wiXG4rXHRcdFwicjEgKz0gcjc7XCIgLyogbWFyayByNyBhcyBwcmVjaXNlICovXG4rXHRcdFwiKih1NjQgKikocjEgKyAwKSA9IDA7XCJcbitcdFx0XCJyMCA9IDA7XCJcbitcdFx0XCJleGl0O1wiXG4rXHRcdDo6OiBfX2Nsb2JiZXJfYWxsXG4rXHQpO1xuK31cbitcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0NTo0Ny43NDM3MzYzNzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTMwMzY0OTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgQmFja3RyYWNrIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IGEgaGFuZGxlIG9uIHRoaXMgXCJiYWNrdHJhY2tcIiBsb2dpYy4gSSBrbm93IHRoZSBwYXRjaCBpcyBpbiBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AsIGFuZCB0aGF0IHRoZXJlIHNob3VsZCBiZSBzb21lIHNlbGZ0ZXN0cyBhc3NvY2lhdGVkIHdpdGggaXQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gZ2V0dGluZyBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGVtZW50YXRpb24gaXRzZWxmLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIEJQRiB2ZXJpZmllciBhbmQgS2NvbmZpZyBzeXN0ZW0uXG5cbk15IHBsYW4gaXMgdG8gZGlnIGludG8gYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgIGRpcmVjdGx5LiBJJ2xsIG5lZWQgdG8gdXNlIG15IHN0YW5kYXJkIHRvb2xraXQgZm9yIHRoaXMg4oCTIGVpdGhlciBncmVwcGluZyB0aHJvdWdoIHRoZSBjb2RlIGZvciBmdW5jdGlvbiBjYWxscyBhbmQgZGVwZW5kZW5jaWVzLCBvciBJIG1pZ2h0IHNpbXBseSByZWFkIHRoZSBmaWxlIGRpcmVjdGx5LCBkZXBlbmRpbmcgb24gaG93IGNvbXBsZXggaXQgaXMuIEknbGwgYmUgcGFydGljdWxhcmx5IGxvb2tpbmcgZm9yIHRoZSBlbnRyeSBwb2ludHMgdGhhdCB0cmlnZ2VyIHRoZSBiYWNrdHJhY2sgbG9naWMgd2l0aGluIHRoZSB2ZXJpZmllciBhbmQgYW55IEtjb25maWcgb3B0aW9ucyB0aGF0IGVuYWJsZSBvciBkaXNhYmxlIGl0LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBlbGVtZW50cyBhcmUgY29ubmVjdGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyB3aWxsIGJlIGNydWNpYWw7IGl04oCZcyBsaWtlbHkgdGhhdCB0aGUgYmFja3RyYWNrIGZ1bmN0aW9uYWxpdHkgaXMgY29uZGl0aW9uYWwgb24gY2VydGFpbiBidWlsZCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMzMiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDU6NTQuNjc0MTA0NDE3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTgzNzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbWFya19jaGFpbl9wcmVjaXNpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2JhY2t0cmFjay5jPTY2OD12b2lkIGJwZl9tYXJrX2FsbF9zY2FsYXJzX3ByZWNpc2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNjgzLVxcdCAqIGJlY2F1c2UgcHJlY2lzaW9uIG1hcmtpbmdzIGluIGN1cnJlbnQgbm9uLWNoZWNrcG9pbnRlZCBzdGF0ZSBhcmVcXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jOjY4NDpcXHQgKiBub3QgbmVlZGVkLiBTZWUgd2h5IGluIHRoZSBjb21tZW50IGluIF9fbWFya19jaGFpbl9wcmVjaXNpb24gYmVsb3cuXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYy02ODUtXFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTEyMzk9aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTU2OC1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjE1Njk6XFx0LyogZm9yZ2V0IHByZWNpc2UgbWFya2luZ3Mgd2UgaW5oZXJpdGVkLCBzZWUgX19tYXJrX2NoYWluX3ByZWNpc2lvbiAqL1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTU3MC1cXHRpZiAoZW52LVxcdTAwM2VicGZfY2FwYWJsZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDU6NTQuNzIyMDk4NDczWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA0ODI4NTc3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZmlsZXMsIGFzIGlmIEknbSB0aGlua2luZyBpdCB0aHJvdWdoOlxuXG4qKkFuYWx5emluZyBCUEYgQmFja3RyYWNraW5nIGFuZCBWZXJpZmljYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AgYW5kIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBMZXQncyByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIEJQRiB2ZXJpZmllciBoYW5kbGVzIHBvdGVudGlhbGx5IGNvbXBsZXggQlBGIHByb2dyYW1zIGFuZCB3aGF0IG9wdGltaXphdGlvbnMgb3IgYmFja3RyYWNraW5nIG1ldGhvZHMgYXJlIGluIHBsYXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdmVyaWZpZXIncyBsb2dpYyBpbnRlcmFjdHMgd2l0aCB0aGUgYmFja3RyYWNraW5nIG1lY2hhbmlzbXMuXG5cbkkgc3VzcGVjdCB0aGF0IGBiYWNrdHJhY2suY2AgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyBzaXR1YXRpb25zIHdoZXJlIHRoZSBpbml0aWFsIGFuYWx5c2lzIGlzIHRvbyBjb25zZXJ2YXRpdmUgb3IgZW5jb3VudGVycyBjb250cm9sIGZsb3cgdGhhdCBpdCBzdHJ1Z2dsZXMgd2l0aCBkdXJpbmcgaW5pdGlhbCBzdGF0aWMgYW5hbHlzaXMuIElzIGl0IGJhc2VkIG9uIGEgbGltaXRlZCBleHBsb3JhdGlvbiBvZiBwb3NzaWJsZSBleGVjdXRpb24gcGF0aHM/IElzIGl0IHNvbWUgc29ydCBvZiBhIGxpbWl0ZWQgZm9ybSBvZiBzeW1ib2xpYyBleGVjdXRpb24/IEl0IHNob3VsZCB0cnkgdG8gZmluZCB3YXlzIHRvIG1ha2UgaXQgbW9yZSBwcmVjaXNlLlxuXG5BbmQgdGhlbiB0aGUgYHZlcmlmaWVyLmNgIGZpbGUg4oCTIHRoYXQncyB0aGUgY29yZS4gSSBleHBlY3QgdG8gc2VlIHRoZSBtYWluIHN0YXRlIG1hY2hpbmVzIGFuZCBkYXRhIHN0cnVjdHVyZXMgb2YgdGhlIHZlcmlmaWVyIGluIHRoZXJlLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgYmFja3RyYWNraW5nIGludGVyZmFjZXMgd2l0aCB0aGUgcmVndWxhciB2ZXJpZmljYXRpb24gcHJvY2Vzcy4gSXMgaXQgY2FsbGVkIGluIHJlc3BvbnNlIHRvIGEgc3BlY2lmaWMgY29uZGl0aW9uLCBvciBpcyBpdCBtb3JlIGludGVncmF0ZWQ/IElzIHRoZSBiYWNrdHJhY2tpbmcgdXNlZCB0byByZXNvbHZlIGluZGlyZWN0IGp1bXBzIG9yIGNvbXBsZXggbG9vcCBzdHJ1Y3R1cmVzPyBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgdmVyaWZpZXIgZW5zdXJlcyB0aGF0IHRoZSBCUEYgcHJvZ3JhbSBpcyBzYWZlIHRvIGV4ZWN1dGUsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgbWVtb3J5IGFjY2VzcyBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSXQncyBwcm9iYWJseSBhIHN0YXRlZnVsIHByb2Nlc3MuIERvZXMgaXQgY2hlY2sgZm9yIHRoaW5ncyBsaWtlIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzLCB1bmluaXRpYWxpemVkIGRhdGEgYWNjZXNzLCBhbmQgaW5maW5pdGUgbG9vcHM/XG5cbkkgYW0gYWxzbyBpbnRlcmVzdGVkIGluIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IGJhY2t0cmFja2luZyBzdHJhdGVnaWVzIG9uIHBlcmZvcm1hbmNlLiBBcmUgdGhlcmUgdHJhZGUtb2ZmcyBiZXR3ZWVuIHRob3JvdWdobmVzcyBhbmQgc3BlZWQ/IEhvdyBhcmUgdGhlc2UgdHJhZGUtb2ZmcyBtYW5hZ2VkIGluIHRoZSBjb2RlPyBJcyB0aGVyZSBhIHdheSB0byB0d2VhayB0aGUgYmFja3RyYWNraW5nIGJlaGF2aW9yP1xuXG5UaW1lIHRvIGRpZyBpbi4gVGhpcyBpcyBnb2luZyB0byBiZSBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkyOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ1OjU3Ljc3MDM4NzQ3MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvYmFja3RyYWNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTgwOlxcdFxcdFxcdFxcdCAgKiB0aGlzIGluc24sIHNvIGZvciB0aGUgSy1iYXNlZCBjb25kaXRpb25hbFxcbiA1ODE6XFx0XFx0XFx0XFx0ICAqIHRoZXJlIGlzIG5vdGhpbmcgbmV3IHRvIGJlIG1hcmtlZC5cXG4gNTgyOlxcdFxcdFxcdFxcdCAgKi9cXG4gNTgzOlxcdFxcdFxcdH1cXG4gNTg0OlxcdFxcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEKSB7XFxuIDU4NTpcXHRcXHRcXHQvKiBJdCdzIGxkX2ltbTY0IG9yIGxkX2FicyBvciBsZF9pbmQuXFxuIDU4NjpcXHRcXHRcXHQgKiBGb3IgbGRfaW1tNjQgbm8gZnVydGhlciB0cmFja2luZyBvZiBwcmVjaXNpb25cXG4gNTg3OlxcdFxcdFxcdCAqIGludG8gcGFyZW50IGlzIG5lY2Vzc2FyeVxcbiA1ODg6XFx0XFx0XFx0ICovXFxuIDU4OTpcXHRcXHRcXHRpZiAobW9kZSA9PSBCUEZfSU1NKSB7XFxuIDU5MDpcXHRcXHRcXHRcXHRidF9jbGVhcl9yZWcoYnQsIGRyZWcpO1xcbiA1OTE6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDU5MjpcXHRcXHRcXHR9XFxuIDU5MzpcXHRcXHRcXHQvKlxcbiA1OTQ6XFx0XFx0XFx0ICogQlBGX3tJTkQsQUJTfSBhcmUgbW9kZWxsZWQgYXMgdHdvIGJyYW5jaGVzOlxcbiA1OTU6XFx0XFx0XFx0ICogLSBmYWxsdGhyb3VnaDtcXG4gNTk2OlxcdFxcdFxcdCAqIC0gaW1wbGljaXQgc3VicHJvZ3JhbSBleGl0LlxcbiA1OTc6XFx0XFx0XFx0ICogSXQgaXMgbmVjZXNzYXJ5IHRvIHN3aXRjaCBjdXJyZW50IGZyYW1lIGlmXFxuIDU5ODpcXHRcXHRcXHQgKiBpbXBsaWNpdCBzdWJwcm9ncmFtIGV4aXQgYnJhbmNoIGlzIGJhY2t0cmFja2VkLlxcbiA1OTk6XFx0XFx0XFx0ICovXFxuIDYwMDpcXHRcXHRcXHRpZiAobW9kZSA9PSBCUEZfSU5EIHx8IG1vZGUgPT0gQlBGX0FCUykge1xcbiA2MDE6XFx0XFx0XFx0XFx0aWYgKGJ0X2lzX3JlZ19zZXQoYnQsIGRyZWcpKVxcbiA2MDI6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9UU1VQUDtcXG4gNjAzOlxcdFxcdFxcdFxcdGlmIChzdWJzZXFfaWR4ICE9IGlkeCArIDEpXFxuIDYwNDpcXHRcXHRcXHRcXHRcXHRpZiAoYnRfc3VicHJvZ19lbnRlcihidCkpXFxuIDYwNTpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gNjA2OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiA2MDc6XFx0XFx0XFx0fVxcbiA2MDg6XFx0XFx0fVxcbiA2MDk6XFx0XFx0LyogUHJvcGFnYXRlIHByZWNpc2lvbiBtYXJrcyB0byBsaW5rZWQgcmVnaXN0ZXJzLCB0byBhY2NvdW50IGZvclxcbiA2MTA6XFx0XFx0ICogcmVnaXN0ZXJzIG1hcmtlZCBhcyBwcmVjaXNlIGluIHRoaXMgZnVuY3Rpb24uXFxuIDYxMTpcXHRcXHQgKi9cXG4gNjEyOlxcdFxcdGJwZl9idF9zeW5jX2xpbmtlZF9yZWdzKGJ0LCBoaXN0KTtcXG4gNjEzOlxcdFxcdHJldHVybiAwO1xcbiA2MTQ6XFx0fVxcbiA2MTU6XFx0XFxuIDYxNjpcXHQvKiB0aGUgc2NhbGFyIHByZWNpc2lvbiB0cmFja2luZyBhbGdvcml0aG06XFxuIDYxNzpcXHQgKiAuIGF0IHRoZSBzdGFydCBhbGwgcmVnaXN0ZXJzIGhhdmUgcHJlY2lzZT1mYWxzZS5cXG4gNjE4OlxcdCAqIC4gc2NhbGFyIHJhbmdlcyBhcmUgdHJhY2tlZCBhcyBub3JtYWwgdGhyb3VnaCBhbHUgYW5kIGptcCBpbnNucy5cXG4gNjE5OlxcdCAqIC4gb25jZSBwcmVjaXNlIHZhbHVlIG9mIHRoZSBzY2FsYXIgcmVnaXN0ZXIgaXMgdXNlZCBpbjpcXG4gNjIwOlxcdCAqICAgLiAgcHRyICsgc2NhbGFyIGFsdVxcbiA2MjE6XFx0ICogICAuIGlmIChzY2FsYXIgY29uZCBLfHNjYWxhcilcXG4gNjIyOlxcdCAqICAgLiAgaGVscGVyX2NhbGwoLi4sIHNjYWxhciwgLi4uKSB3aGVyZSBBUkdfQ09OU1QgaXMgZXhwZWN0ZWRcXG4gNjIzOlxcdCAqICAgYmFja3RyYWNrIHRocm91Z2ggdGhlIHZlcmlmaWVyIHN0YXRlcyBhbmQgbWFyayBhbGwgcmVnaXN0ZXJzIGFuZFxcbiA2MjQ6XFx0ICogICBzdGFjayBzbG90cyB3aXRoIHNwaWxsZWQgY29uc3RhbnRzIHRoYXQgdGhlc2Ugc2NhbGFyIHJlZ2lzdGVyc1xcbiA2MjU6XFx0ICogICBzaG91bGQgYmUgcHJlY2lzZS5cXG4gNjI2OlxcdCAqIC4gZHVyaW5nIHN0YXRlIHBydW5pbmcgdHdvIHJlZ2lzdGVycyAob3Igc3BpbGxlZCBzdGFjayBzbG90cylcXG4gNjI3OlxcdCAqICAgYXJlIGVxdWl2YWxlbnQgaWYgYm90aCBhcmUgbm90IHByZWNpc2UuXFxuIDYyODpcXHQgKlxcbiA2Mjk6XFx0ICogTm90ZSB0aGUgdmVyaWZpZXIgY2Fubm90IHNpbXBseSB3YWxrIHJlZ2lzdGVyIHBhcmVudGFnZSBjaGFpbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDU6NTcuNzcwNDc5NTAxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM2NDA0NzA0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgKipcblxuQWxyaWdodCwgSSdtIGhlYWRpbmcgaW50byBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AuIE15IGdvYWwgaGVyZSBpcyBzdHJhaWdodGZvcndhcmQ6IEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRoZSByZWxldmFudCBBUEkgc3VyZmFjZSBvZiB0aGlzIG1vZHVsZS4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gaWRlbnRpZnkgdGhvc2UgY3J1Y2lhbCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgb3IgYXJlIGludGVuZGVkIGFzIHRoZSBpbml0aWFsIGVudHJ5IHBvaW50LiBTbywgSSdtIGxvb2tpbmcgZm9yIHRoZSBleHBvcnRlZCBzeW1ib2xzLCB0aGUgbm9uLXN0YXRpYyBvbmVzLCBhbmQgYW55IG9idmlvdXMgZW50cnkgcG9pbnRzLiBJJ20gc2tpcHBpbmcgdGhlIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9yIG5vdzsgSSBjYW4gYWx3YXlzIGNvbWUgYmFjayB0byB0aG9zZSBpZiB0aGUgaGlnaC1sZXZlbCBwaWN0dXJlIGlzbid0IGNsZWFyIGVub3VnaC4gVGhpcyBpcyBhYm91dCBlZmZpY2llbnQgY29kZSBuYXZpZ2F0aW9uLCBub3QgYSBkZWVwIGRpdmUgaW50byBldmVyeSBsaW5lIGp1c3QgeWV0LiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNTYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ2OjAwLjEzNDUyODY0MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2JhY2t0cmFjay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY2MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjA6XFx0ICpcXG4gNjYxOlxcdCAqIEFsc28gaWYgcGFyZW50J3MgY3VyZnJhbWUgXFx1MDAzZSBmcmFtZSB3aGVyZSBiYWNrdHJhY2tpbmcgc3RhcnRlZCxcXG4gNjYyOlxcdCAqIHRoZSB2ZXJpZmllciBuZWVkIHRvIG1hcmsgcmVnaXN0ZXJzIGluIGJvdGggZnJhbWVzLCBvdGhlcndpc2UgY2FsbGVlc1xcbiA2NjM6XFx0ICogbWF5IGluY29ycmVjdGx5IHBydW5lIGNhbGxlcnMuIFRoaXMgaXMgc2ltaWxhciB0b1xcbiA2NjQ6XFx0ICogY29tbWl0IDc2NDBlYWQ5MzkyNCAoXFxcImJwZjogdmVyaWZpZXI6IG1ha2Ugc3VyZSBjYWxsZWVzIGRvbid0IHBydW5lIHdpdGggY2FsbGVyIGRpZmZlcmVuY2VzXFxcIilcXG4gNjY1OlxcdCAqXFxuIDY2NjpcXHQgKiBGb3Igbm93IGJhY2t0cmFja2luZyBmYWxscyBiYWNrIGludG8gY29uc2VydmF0aXZlIG1hcmtpbmcuXFxuIDY2NzpcXHQgKi9cXG4gNjY4OlxcdHZvaWQgYnBmX21hcmtfYWxsX3NjYWxhcnNfcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiA2Njk6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0KVxcbiA2NzA6XFx0e1xcbiA2NzE6XFx0XFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpmdW5jO1xcbiA2NzI6XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcXG4gNjczOlxcdFxcdGludCBpLCBqO1xcbiA2NzQ6XFx0XFxuIDY3NTpcXHRcXHRpZiAoZW52LVxcdTAwM2Vsb2cubGV2ZWwgXFx1MDAyNiBCUEZfTE9HX0xFVkVMMikge1xcbiA2NzY6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJtYXJrX3ByZWNpc2U6IGZyYW1lJWQ6IGZhbGxpbmcgYmFjayB0byBmb3JjaW5nIGFsbCBzY2FsYXJzIHByZWNpc2VcXFxcblxcXCIsXFxuIDY3NzpcXHRcXHRcXHRcXHRzdC1cXHUwMDNlY3VyZnJhbWUpO1xcbiA2Nzg6XFx0XFx0fVxcbiA2Nzk6XFx0XFxuIDY4MDpcXHRcXHQvKiBiaWcgaGFtbWVyOiBtYXJrIGFsbCBzY2FsYXJzIHByZWNpc2UgaW4gdGhpcyBwYXRoLlxcbiA2ODE6XFx0XFx0ICogcG9wX3N0YWNrIG1heSBzdGlsbCBnZXQgIXByZWNpc2Ugc2NhbGFycy5cXG4gNjgyOlxcdFxcdCAqIFdlIGFsc28gc2tpcCBjdXJyZW50IHN0YXRlIGFuZCBnbyBzdHJhaWdodCB0byBmaXJzdCBwYXJlbnQgc3RhdGUsXFxuIDY4MzpcXHRcXHQgKiBiZWNhdXNlIHByZWNpc2lvbiBtYXJraW5ncyBpbiBjdXJyZW50IG5vbi1jaGVja3BvaW50ZWQgc3RhdGUgYXJlXFxuIDY4NDpcXHRcXHQgKiBub3QgbmVlZGVkLiBTZWUgd2h5IGluIHRoZSBjb21tZW50IGluIF9fbWFya19jaGFpbl9wcmVjaXNpb24gYmVsb3cuXFxuIDY4NTpcXHRcXHQgKi9cXG4gNjg2OlxcdFxcdGZvciAoc3QgPSBzdC1cXHUwMDNlcGFyZW50OyBzdDsgc3QgPSBzdC1cXHUwMDNlcGFyZW50KSB7XFxuIDY4NzpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IHN0LVxcdTAwM2VjdXJmcmFtZTsgaSsrKSB7XFxuIDY4ODpcXHRcXHRcXHRcXHRmdW5jID0gc3QtXFx1MDAzZWZyYW1lW2ldO1xcbiA2ODk6XFx0XFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIEJQRl9SRUdfRlA7IGorKykge1xcbiA2OTA6XFx0XFx0XFx0XFx0XFx0cmVnID0gXFx1MDAyNmZ1bmMtXFx1MDAzZXJlZ3Nbal07XFxuIDY5MTpcXHRcXHRcXHRcXHRcXHRpZiAocmVnLVxcdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSB8fCByZWctXFx1MDAzZXByZWNpc2UpXFxuIDY5MjpcXHRcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNjkzOlxcdFxcdFxcdFxcdFxcdHJlZy1cXHUwMDNlcHJlY2lzZSA9IHRydWU7XFxuIDY5NDpcXHRcXHRcXHRcXHRcXHRpZiAoZW52LVxcdTAwM2Vsb2cubGV2ZWwgXFx1MDAyNiBCUEZfTE9HX0xFVkVMMikge1xcbiA2OTU6XFx0XFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJmb3JjZV9wcmVjaXNlOiBmcmFtZSVkOiBmb3JjaW5nIHIlZCB0byBiZSBwcmVjaXNlXFxcXG5cXFwiLFxcbiA2OTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0aSwgaik7XFxuIDY5NzpcXHRcXHRcXHRcXHRcXHR9XFxuIDY5ODpcXHRcXHRcXHRcXHR9XFxuIDY5OTpcXHRcXHRcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgZnVuYy1cXHUwMDNlYWxsb2NhdGVkX3N0YWNrIC8gQlBGX1JFR19TSVpFOyBqKyspIHtcXG4gNzAwOlxcdFxcdFxcdFxcdFxcdGlmICghYnBmX2lzX3NwaWxsZWRfcmVnKFxcdTAwMjZmdW5jLVxcdTAwM2VzdGFja1tqXSkpXFxuIDcwMTpcXHRcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzAyOlxcdFxcdFxcdFxcdFxcdHJlZyA9IFxcdTAwMjZmdW5jLVxcdTAwM2VzdGFja1tqXS5zcGlsbGVkX3B0cjtcXG4gNzAzOlxcdFxcdFxcdFxcdFxcdGlmIChyZWctXFx1MDAzZXR5cGUgIT0gU0NBTEFSX1ZBTFVFIHx8IHJlZy1cXHUwMDNlcHJlY2lzZSlcXG4gNzA0OlxcdFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA3MDU6XFx0XFx0XFx0XFx0XFx0cmVnLVxcdTAwM2VwcmVjaXNlID0gdHJ1ZTtcXG4gNzA2OlxcdFxcdFxcdFxcdFxcdGlmIChlbnYtXFx1MDAzZWxvZy5sZXZlbCBcXHUwMDI2IEJQRl9MT0dfTEVWRUwyKSB7XFxuIDcwNzpcXHRcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImZvcmNlX3ByZWNpc2U6IGZyYW1lJWQ6IGZvcmNpbmcgZnAlZCB0byBiZSBwcmVjaXNlXFxcXG5cXFwiLFxcbiA3MDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0aSwgLShqICsgMSkgKiA4KTtcXG4gNzA5OlxcdFxcdFxcdFxcdFxcdH1cXG4gNzEwOlxcdFxcdFxcdFxcdH1cXG4gNzExOlxcdFxcdFxcdH1cXG4gNzEyOlxcdFxcdH1cXG4gNzEzOlxcdH1cXG4gNzE0OlxcdFxcbiA3MTU6XFx0LypcXG4gNzE2OlxcdCAqIGJwZl9tYXJrX2NoYWluX3ByZWNpc2lvbigpIGJhY2t0cmFja3MgQlBGIHByb2dyYW0gaW5zdHJ1Y3Rpb24gc2VxdWVuY2UgYW5kXFxuIDcxNzpcXHQgKiBjaGFpbiBvZiB2ZXJpZmllciBzdGF0ZXMgbWFraW5nIHN1cmUgdGhhdCByZWdpc3RlciAqcmVnbm8qIChpZiByZWdubyBcXHUwMDNlPSAwKVxcbiA3MTg6XFx0ICogYW5kL29yIHN0YWNrIHNsb3QgKnNwaSogKGlmIHNwaSBcXHUwMDNlPSAwKSBhcmUgbWFya2VkIGFzIHByZWNpc2VseSB0cmFja2VkXFxuIDcxOTpcXHQgKiBTQ0FMQVJTLCBhcyB3ZWxsIGFzIGFueSBvdGhlciByZWdpc3RlcnMgYW5kIHNsb3RzIHRoYXQgY29udHJpYnV0ZSB0b1xcbiA3MjA6XFx0ICogYSB0cmFja2VkIHN0YXRlIG9mIGdpdmVuIHJlZ2lzdGVycy9zdGFjayBzbG90cywgZGVwZW5kaW5nIG9uIHNwZWNpZmljIEJQRlxcbiA3MjE6XFx0ICogYXNzZW1ibHkgaW5zdHJ1Y3Rpb25zIChzZWUgYmFja3RyYWNrX2luc25zKCkgZm9yIGV4YWN0IGluc3RydWN0aW9uIGhhbmRsaW5nXFxuIDcyMjpcXHQgKiBsb2dpYykuIFRoaXMgYmFja3RyYWNraW5nIHJlbGllcyBvbiByZWNvcmRlZCBqbXBfaGlzdG9yeSBhbmQgaXMgYWJsZSB0b1xcbiA3MjM6XFx0ICogdHJhdmVyc2UgZW50aXJlIGNoYWluIG9mIHBhcmVudCBzdGF0ZXMuIFRoaXMgcHJvY2VzcyBlbmRzIG9ubHkgd2hlbiBhbGwgdGhlXFxuIDcyNDpcXHQgKiBuZWNlc3NhcnkgcmVnaXN0ZXJzL3Nsb3RzIGFuZCB0aGVpciB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcyBhcmUgbWFya2VkIGFzXFxuIDcyNTpcXHQgKiBwcmVjaXNlLlxcbiA3MjY6XFx0ICpcXG4gNzI3OlxcdCAqIE9uZSBpbXBvcnRhbnQgYW5kIHN1YnRsZSBhc3BlY3QgaXMgdGhhdCBwcmVjaXNlIG1hcmtzICpkbyBub3QgbWF0dGVyKiBpblxcbiA3Mjg6XFx0ICogdGhlIGN1cnJlbnRseSB2ZXJpZmllZCBzdGF0ZSAoY3VycmVudCBzdGF0ZSkuIEl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kXFxuIDcyOTpcXHQgKiB3aHkgdGhpcyBpcyB0aGUgY2FzZS5cXG4gNzMwOlxcdCAqXFxuIDczMTpcXHQgKiBGaXJzdCwgbm90ZSB0aGF0IGN1cnJlbnQgc3RhdGUgaXMgdGhlIHN0YXRlIHRoYXQgaXMgbm90IHlldCBcXFwiY2hlY2twb2ludGVkXFxcIixcXG4gNzMyOlxcdCAqIGkuZS4sIGl0IGlzIG5vdCB5ZXQgcHV0IGludG8gZW52LVxcdTAwM2VleHBsb3JlZF9zdGF0ZXMsIGFuZCBpdCBoYXMgbm8gY2hpbGRyZW5cXG4gNzMzOlxcdCAqIHN0YXRlcyBhcyB3ZWxsLiBJdCdzIGVwaGVtZXJhbCwgYW5kIGNhbiBlbmQgdXAgZWl0aGVyIGEpIGJlaW5nIGRpc2NhcmRlZCBpZlxcbiA3MzQ6XFx0ICogY29tcGF0aWJsZSBleHBsb3JlZCBzdGF0ZSBpcyBmb3VuZCBhdCBzb21lIHBvaW50IG9yIEJQRl9FWElUIGluc3RydWN0aW9uIGlzXFxuIDczNTpcXHQgKiByZWFjaGVkIG9yIGIpIGNoZWNrcG9pbnRlZCBhbmQgcHV0IGludG8gZW52LVxcdTAwM2VleHBsb3JlZF9zdGF0ZXMsIGJyYW5jaGluZyBvdXRcXG4gNzM2OlxcdCAqIGludG8gb25lIG9yIG1vcmUgY2hpbGRyZW4gc3RhdGVzLlxcbiA3Mzc6XFx0ICpcXG4gNzM4OlxcdCAqIEluIHRoZSBmb3JtZXIgY2FzZSwgcHJlY2lzZSBtYXJraW5ncyBpbiBjdXJyZW50IHN0YXRlIGFyZSBjb21wbGV0ZWx5XFxuIDczOTpcXHQgKiBpZ25vcmVkIGJ5IHN0YXRlIGNvbXBhcmlzb24gY29kZSAoc2VlIHJlZ3NhZmUoKSBmb3IgZGV0YWlscykuIE9ubHlcXG4gNzQwOlxcdCAqIGNoZWNrcG9pbnRlZCAoXFxcIm9sZFxcXCIpIHN0YXRlIHByZWNpc2UgbWFya2luZ3MgYXJlIGltcG9ydGFudCwgYW5kIGlmIG9sZFxcbiA3NDE6XFx0ICogc3RhdGUncyByZWdpc3Rlci9zbG90IGlzIHByZWNpc2UsIHJlZ3NhZmUoKSBhc3N1bWVzIGN1cnJlbnQgc3RhdGUnc1xcbiA3NDI6XFx0ICogcmVnaXN0ZXIvc2xvdCBhcyBwcmVjaXNlIGFuZCBjaGVja3MgdmFsdWUgcmFuZ2VzIGV4YWN0bHkgYW5kIHByZWNpc2VseS4gSWZcXG4gNzQzOlxcdCAqIHN0YXRlcyB0dXJuIG91dCB0byBiZSBjb21wYXRpYmxlLCBjdXJyZW50IHN0YXRlJ3MgbmVjZXNzYXJ5IHByZWNpc2VcXG4gNzQ0OlxcdCAqIG1hcmtpbmdzIGFuZCBhbnkgcmVxdWlyZWQgcGFyZW50IHN0YXRlcycgcHJlY2lzZSBtYXJraW5ncyBhcmUgZW5mb3JjZWRcXG4gNzQ1OlxcdCAqIGFmdGVyIHRoZSBmYWN0IHdpdGggcHJvcGFnYXRlX3ByZWNpc2lvbigpIGxvZ2ljLCBhZnRlciB0aGUgZmFjdC4gQnV0IGl0J3NcXG4gNzQ2OlxcdCAqIGltcG9ydGFudCB0byByZWFsaXplIHRoYXQgaW4gdGhpcyBjYXNlLCBldmVuIGFmdGVyIG1hcmtpbmcgY3VycmVudCBzdGF0ZVxcbiA3NDc6XFx0ICogcmVnaXN0ZXJzL3Nsb3RzIGFzIHByZWNpc2UsIHdlIGltbWVkaWF0ZWx5IGRpc2NhcmQgY3VycmVudCBzdGF0ZS4gU28gd2hhdFxcbiA3NDg6XFx0ICogYWN0dWFsbHkgbWF0dGVycyBpcyBhbnkgb2YgdGhlIHByZWNpc2UgbWFya2luZ3MgcHJvcGFnYXRlZCBpbnRvIGN1cnJlbnRcXG4gNzQ5OlxcdCAqIHN0YXRlJ3MgcGFyZW50IHN0YXRlcywgd2hpY2ggYXJlIGFsd2F5cyBjaGVja3BvaW50ZWQgKGR1ZSB0byBiKSBjYXNlIGFib3ZlKS5cXG4gNzUwOlxcdCAqIEFzIHN1Y2gsIGZvciBzY2VuYXJpbyBhKSBpdCBkb2Vzbid0IG1hdHRlciBpZiBjdXJyZW50IHN0YXRlIGhhcyBwcmVjaXNlXFxuIDc1MTpcXHQgKiBtYXJraW5ncyBzZXQgb3Igbm90LlxcbiA3NTI6XFx0ICpcXG4gNzUzOlxcdCAqIE5vdywgZm9yIHRoZSBzY2VuYXJpbyBiKSwgY2hlY2twb2ludGluZyBhbmQgZm9ya2luZyBpbnRvIGNoaWxkKHJlbilcXG4gNzU0OlxcdCAqIHN0YXRlKHMpLiBOb3RlIHRoYXQgYmVmb3JlIGN1cnJlbnQgc3RhdGUgZ2V0cyB0byBjaGVja3BvaW50aW5nIHN0ZXAsIGFueVxcbiA3NTU6XFx0ICogcHJvY2Vzc2VkIGluc3RydWN0aW9uIGFsd2F5cyBhc3N1bWVzIHByZWNpc2UgU0NBTEFSIHJlZ2lzdGVyL3Nsb3RcXG4gNzU2OlxcdCAqIGtub3dsZWRnZTogaWYgcHJlY2lzZSB2YWx1ZSBvciByYW5nZSBpcyB1c2VmdWwgdG8gcHJ1bmUganVtcCBicmFuY2gsIEJQRlxcbiA3NTc6XFx0ICogdmVyaWZpZXIgdGFrZXMgdGhpcyBvcHBvcnR1bml0eSBlbnRodXNpYXN0aWNhbGx5LiBTaW1pbGFybHksIHdoZW5cXG4gNzU4OlxcdCAqIHJlZ2lzdGVyJ3MgdmFsdWUgaXMgdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0IG9yIG1lbW9yeSBhZGRyZXNzLCBleGFjdFxcbiA3NTk6XFx0ICoga25vd2xlZGdlIG9mIFNDQUxBUiByYW5nZSBpcyBhc3N1bWVkLCBjaGVja2VkLCBhbmQgZW5mb3JjZWQuIFNvLCBzaW1pbGFyIHRvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ2OjAwLjEzNDY0NTU3MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTA1MTkwNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBCYWNrdHJhY2sgTG9naWMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDc2MCB0byA4NTAuIEkgcmVjYWxsIHRoYXQgc2VjdGlvbiBiZWluZyBwYXJ0aWN1bGFybHkgaW52b2x2ZWQgd2l0aCB0aGUgYmFja3RyYWNraW5nIGFsZ29yaXRobS4gSSBrbm93IGl0J3MgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBCUEYgdmVyaWZpZXIsIGFuZCBhbnkgcG90ZW50aWFsIGluZWZmaWNpZW5jaWVzIG9yIHN1YnRsZSBidWdzIGluIHRoaXMgYXJlYSBjYW4gaGF2ZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIG9yIHdvcnNlLCBvcGVuIHVwIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGV4YWN0bHkgaG93IGl0J3MgaGFuZGxpbmcgdGhlIHRyYXZlcnNhbCBhbmQgc3RhdGUgbWFuYWdlbWVudCBkdXJpbmcgdGhlIGJ5dGVjb2RlIGFuYWx5c2lzLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGxvZ2ljIHJlbGF0ZWQgdG8gZGV0ZWN0aW5nIGxvb3BzLCBoYW5kbGluZyBjb25kaXRpb25hbCBicmFuY2hlcyB0aGF0IGNvdWxkIGxlYWQgdG8gbXVsdGlwbGUgcGF0aHMsIGFuZCBob3cgaXQgZGVhbHMgd2l0aCBwb3RlbnRpYWwgZGVhZCBjb2RlIHBhdGhzLiBJIHdhbnQgdG8gcGF5IHNwZWNpYWwgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgdXNlcyB0byBtYWludGFpbiBzdGF0ZSBhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIGEgYmFja3RyYWNrLiBUaW1lIHRvIGdldCB0aGUgZ2RiIHVwIGFuZCBydW5uaW5nIGlmIEkgbmVlZCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI3MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6MDIuMzQ1MTY3MTUzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2JhY2t0cmFjay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc2MDpcXHQgKiB3aGF0IHdlIG1lbnRpb25lZCBhYm92ZSBhYm91dCBzdGF0ZSBjb21wYXJpc29uIGlnbm9yaW5nIHByZWNpc2UgbWFya2luZ3NcXG4gNzYxOlxcdCAqIGR1cmluZyBzdGF0ZSBjb21wYXJpc29uLCBCUEYgdmVyaWZpZXIgaWdub3JlcyBhbmQgYWxzbyBhc3N1bWVzIHByZWNpc2VcXG4gNzYyOlxcdCAqIG1hcmtpbmdzICphdCB3aWxsKiBkdXJpbmcgaW5zdHJ1Y3Rpb24gdmVyaWZpY2F0aW9uIHByb2Nlc3MuIEJ1dCBhcyB2ZXJpZmllclxcbiA3NjM6XFx0ICogYXNzdW1lcyBwcmVjaXNpb24sIGl0IGFsc28gcHJvcGFnYXRlcyBhbnkgcHJlY2lzaW9uIGRlcGVuZGVuY2llcyBhY3Jvc3NcXG4gNzY0OlxcdCAqIHBhcmVudCBzdGF0ZXMsIHdoaWNoIGFyZSBub3QgeWV0IGZpbmFsaXplZCwgc28gY2FuIGJlIGZ1cnRoZXIgcmVzdHJpY3RlZFxcbiA3NjU6XFx0ICogYmFzZWQgb24gbmV3IGtub3dsZWRnZSBnYWluZWQgZnJvbSByZXN0cmljdGlvbnMgZW5mb3JjZWQgYnkgdGhlaXIgY2hpbGRyZW5cXG4gNzY2OlxcdCAqIHN0YXRlcy4gVGhpcyBpcyBzbyB0aGF0IG9uY2UgdGhvc2UgcGFyZW50IHN0YXRlcyBhcmUgZmluYWxpemVkLCBpLmUuLCB3aGVuXFxuIDc2NzpcXHQgKiB0aGV5IGhhdmUgbm8gbW9yZSBhY3RpdmUgY2hpbGRyZW4gc3RhdGUsIHN0YXRlIGNvbXBhcmlzb24gbG9naWMgaW5cXG4gNzY4OlxcdCAqIGlzX3N0YXRlX3Zpc2l0ZWQoKSB3b3VsZCBlbmZvcmNlIHN0cmljdCBhbmQgcHJlY2lzZSBTQ0FMQVIgcmFuZ2VzLCBpZlxcbiA3Njk6XFx0ICogcmVxdWlyZWQgZm9yIGNvcnJlY3RuZXNzLlxcbiA3NzA6XFx0ICpcXG4gNzcxOlxcdCAqIFRvIGJ1aWxkIGEgYml0IG1vcmUgaW50dWl0aW9uLCBub3RlIGFsc28gdGhhdCBvbmNlIGEgc3RhdGUgaXMgY2hlY2twb2ludGVkLFxcbiA3NzI6XFx0ICogdGhlIHBhdGggd2UgdG9vayB0byBnZXQgdG8gdGhhdCBzdGF0ZSBpcyBub3QgaW1wb3J0YW50LiBUaGlzIGlzIGNydWNpYWxcXG4gNzczOlxcdCAqIHByb3BlcnR5IGZvciBzdGF0ZSBwcnVuaW5nLiBXaGVuIHN0YXRlIGlzIGNoZWNrcG9pbnRlZCBhbmQgZmluYWxpemVkIGF0XFxuIDc3NDpcXHQgKiBzb21lIGluc3RydWN0aW9uIGluZGV4LCBpdCBjYW4gYmUgY29ycmVjdGx5IGFuZCBzYWZlbHkgdXNlZCB0byBcXFwic2hvcnRcXG4gNzc1OlxcdCAqIGNpcmN1aXRcXFwiIGFueSAqY29tcGF0aWJsZSogc3RhdGUgdGhhdCByZWFjaGVzIGV4YWN0bHkgdGhlIHNhbWUgaW5zdHJ1Y3Rpb25cXG4gNzc2OlxcdCAqIGluZGV4LiBJLmUuLCBpZiB3ZSBqdW1wZWQgdG8gdGhhdCBpbnN0cnVjdGlvbiBmcm9tIGEgY29tcGxldGVseSBkaWZmZXJlbnRcXG4gNzc3OlxcdCAqIGNvZGUgcGF0aCB0aGFuIG9yaWdpbmFsIGZpbmFsaXplZCBzdGF0ZSB3YXMgZGVyaXZlZCBmcm9tLCBpdCBkb2Vzbid0XFxuIDc3ODpcXHQgKiBtYXR0ZXIsIGN1cnJlbnQgc3RhdGUgY2FuIGJlIGRpc2NhcmRlZCBiZWNhdXNlIGZyb20gdGhhdCBpbnN0cnVjdGlvblxcbiA3Nzk6XFx0ICogZm9yd2FyZCBoYXZpbmcgYSBjb21wYXRpYmxlIHN0YXRlIHdpbGwgZW5zdXJlIHdlIHdpbGwgc2FmZWx5IHJlYWNoIHRoZVxcbiA3ODA6XFx0ICogZXhpdC4gU3RhdGVzIGRlc2NyaWJlIHByZWNvbmRpdGlvbnMgZm9yIGZ1cnRoZXIgZXhwbG9yYXRpb24sIGJ1dCBjb21wbGV0ZWx5XFxuIDc4MTpcXHQgKiBmb3JnZXQgdGhlIGhpc3Rvcnkgb2YgaG93IHdlIGdvdCBoZXJlLlxcbiA3ODI6XFx0ICpcXG4gNzgzOlxcdCAqIFRoaXMgYWxzbyBtZWFucyB0aGF0IGV2ZW4gaWYgd2UgbmVlZGVkIHByZWNpc2UgU0NBTEFSIHJhbmdlIHRvIGdldCB0b1xcbiA3ODQ6XFx0ICogZmluYWxpemVkIHN0YXRlLCBidXQgZnJvbSB0aGF0IHBvaW50IGZvcndhcmQgKnRoYXQgc2FtZSogU0NBTEFSIHJlZ2lzdGVyIGlzXFxuIDc4NTpcXHQgKiBuZXZlciB1c2VkIGluIGEgcHJlY2lzZSBjb250ZXh0IChpLmUuLCBpdCdzIHByZWNpc2UgdmFsdWUgaXMgbm90IG5lZWRlZCBmb3JcXG4gNzg2OlxcdCAqIGNvcnJlY3RuZXNzKSwgaXQncyBjb3JyZWN0IGFuZCBzYWZlIHRvIG1hcmsgc3VjaCByZWdpc3RlciBhcyBcXFwiaW1wcmVjaXNlXFxcIlxcbiA3ODc6XFx0ICogKGkuZS4sIHByZWNpc2UgbWFya2luZyBzZXQgdG8gZmFsc2UpLiBUaGlzIGlzIHdoYXQgd2UgcmVseSBvbiB3aGVuIHdlIGRvXFxuIDc4ODpcXHQgKiBub3Qgc2V0IHByZWNpc2UgbWFya2luZyBpbiBjdXJyZW50IHN0YXRlLiBJZiBubyBjaGlsZCBzdGF0ZSByZXF1aXJlc1xcbiA3ODk6XFx0ICogcHJlY2lzaW9uIGZvciBhbnkgZ2l2ZW4gU0NBTEFSIHJlZ2lzdGVyLCBpdCdzIHNhZmUgdG8gZGljdGF0ZSB0aGF0IGl0IGNhblxcbiA3OTA6XFx0ICogYmUgaW1wcmVjaXNlLiBJZiBhbnkgY2hpbGQgc3RhdGUgZG9lcyByZXF1aXJlIHRoaXMgcmVnaXN0ZXIgdG8gYmUgcHJlY2lzZSxcXG4gNzkxOlxcdCAqIHdlJ2xsIG1hcmsgaXQgcHJlY2lzZSBsYXRlciByZXRyb2FjdGl2ZWx5IGR1cmluZyBwcmVjaXNlIG1hcmtpbmdzXFxuIDc5MjpcXHQgKiBwcm9wYWdhdGlvbiBmcm9tIGNoaWxkIHN0YXRlIHRvIHBhcmVudCBzdGF0ZXMuXFxuIDc5MzpcXHQgKlxcbiA3OTQ6XFx0ICogU2tpcHBpbmcgcHJlY2lzZSBtYXJraW5nIHNldHRpbmcgaW4gY3VycmVudCBzdGF0ZSBpcyBhIG1pbGQgdmVyc2lvbiBvZlxcbiA3OTU6XFx0ICogcmVseWluZyBvbiB0aGUgYWJvdmUgb2JzZXJ2YXRpb24uIEJ1dCB3ZSBjYW4gdXRpbGl6ZSB0aGlzIHByb3BlcnR5IGV2ZW5cXG4gNzk2OlxcdCAqIG1vcmUgYWdncmVzc2l2ZWx5IGJ5IHByb2FjdGl2ZWx5IGZvcmdldHRpbmcgYW55IHByZWNpc2UgbWFya2luZyBpbiB0aGVcXG4gNzk3OlxcdCAqIGN1cnJlbnQgc3RhdGUgKHdoaWNoIHdlIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgc3RhdGUpLCByaWdodCBiZWZvcmUgd2VcXG4gNzk4OlxcdCAqIGNoZWNrcG9pbnQgaXQgYW5kIGJyYW5jaCBvZmYgaW50byBuZXcgY2hpbGQgc3RhdGUuIFRoaXMgaXMgZG9uZSBieVxcbiA3OTk6XFx0ICogbWFya19hbGxfc2NhbGFyc19pbXByZWNpc2UoKSB0byBob3BlZnVsbHkgZ2V0IG1vcmUgcGVybWlzc2l2ZSBhbmQgZ2VuZXJpY1xcbiA4MDA6XFx0ICogZmluYWxpemVkIHN0YXRlcyB3aGljaCBoZWxwIGluIHNob3J0IGNpcmN1aXRpbmcgbW9yZSBmdXR1cmUgc3RhdGVzLlxcbiA4MDE6XFx0ICovXFxuIDgwMjpcXHRpbnQgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIDgwMzpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqc3RhcnRpbmdfc3RhdGUsXFxuIDgwNDpcXHRcXHRcXHRcXHQgICAgaW50IHJlZ25vLFxcbiA4MDU6XFx0XFx0XFx0XFx0ICAgIGJvb2wgKmNoYW5nZWQpXFxuIDgwNjpcXHR7XFxuIDgwNzpcXHRcXHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdCA9IHN0YXJ0aW5nX3N0YXRlO1xcbiA4MDg6XFx0XFx0c3RydWN0IGJhY2t0cmFja19zdGF0ZSAqYnQgPSBcXHUwMDI2ZW52LVxcdTAwM2VidDtcXG4gODA5OlxcdFxcdGludCBmaXJzdF9pZHggPSBzdC1cXHUwMDNlZmlyc3RfaW5zbl9pZHg7XFxuIDgxMDpcXHRcXHRpbnQgbGFzdF9pZHggPSBzdGFydGluZ19zdGF0ZS1cXHUwMDNlaW5zbl9pZHg7XFxuIDgxMTpcXHRcXHRpbnQgc3Vic2VxX2lkeCA9IC0xO1xcbiA4MTI6XFx0XFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpmdW5jO1xcbiA4MTM6XFx0XFx0Ym9vbCB0bXAsIHNraXBfZmlyc3QgPSB0cnVlO1xcbiA4MTQ6XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcXG4gODE1OlxcdFxcdGludCBpLCBmciwgZXJyO1xcbiA4MTY6XFx0XFxuIDgxNzpcXHRcXHRpZiAoIWVudi1cXHUwMDNlYnBmX2NhcGFibGUpXFxuIDgxODpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gODE5OlxcdFxcbiA4MjA6XFx0XFx0Y2hhbmdlZCA9IGNoYW5nZWQgPzogXFx1MDAyNnRtcDtcXG4gODIxOlxcdFxcdC8qIHNldCBmcmFtZSBudW1iZXIgZnJvbSB3aGljaCB3ZSBhcmUgc3RhcnRpbmcgdG8gYmFja3RyYWNrICovXFxuIDgyMjpcXHRcXHRidF9pbml0KGJ0LCBzdGFydGluZ19zdGF0ZS1cXHUwMDNlY3VyZnJhbWUpO1xcbiA4MjM6XFx0XFxuIDgyNDpcXHRcXHQvKiBEbyBzYW5pdHkgY2hlY2tzIGFnYWluc3QgY3VycmVudCBzdGF0ZSBvZiByZWdpc3RlciBhbmQvb3Igc3RhY2tcXG4gODI1OlxcdFxcdCAqIHNsb3QsIGJ1dCBkb24ndCBzZXQgcHJlY2lzZSBmbGFnIGluIGN1cnJlbnQgc3RhdGUsIGFzIHByZWNpc2lvblxcbiA4MjY6XFx0XFx0ICogdHJhY2tpbmcgaW4gdGhlIGN1cnJlbnQgc3RhdGUgaXMgdW5uZWNlc3NhcnkuXFxuIDgyNzpcXHRcXHQgKi9cXG4gODI4OlxcdFxcdGZ1bmMgPSBzdC1cXHUwMDNlZnJhbWVbYnQtXFx1MDAzZWZyYW1lXTtcXG4gODI5OlxcdFxcdGlmIChyZWdubyBcXHUwMDNlPSAwKSB7XFxuIDgzMDpcXHRcXHRcXHRyZWcgPSBcXHUwMDI2ZnVuYy1cXHUwMDNlcmVnc1tyZWdub107XFxuIDgzMTpcXHRcXHRcXHRpZiAocmVnLVxcdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSkge1xcbiA4MzI6XFx0XFx0XFx0XFx0dmVyaWZpZXJfYnVnKGVudiwgXFxcImJhY2t0cmFja2luZyBtaXN1c2VcXFwiKTtcXG4gODMzOlxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA4MzQ6XFx0XFx0XFx0fVxcbiA4MzU6XFx0XFx0XFx0YnRfc2V0X3JlZyhidCwgcmVnbm8pO1xcbiA4MzY6XFx0XFx0fVxcbiA4Mzc6XFx0XFxuIDgzODpcXHRcXHRpZiAoYnRfZW1wdHkoYnQpKVxcbiA4Mzk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDg0MDpcXHRcXG4gODQxOlxcdFxcdGZvciAoOzspIHtcXG4gODQyOlxcdFxcdFxcdERFQ0xBUkVfQklUTUFQKG1hc2ssIDY0KTtcXG4gODQzOlxcdFxcdFxcdHUzMiBoaXN0b3J5ID0gc3QtXFx1MDAzZWptcF9oaXN0b3J5X2NudDtcXG4gODQ0OlxcdFxcdFxcdHN0cnVjdCBicGZfam1wX2hpc3RvcnlfZW50cnkgKmhpc3Q7XFxuIDg0NTpcXHRcXG4gODQ2OlxcdFxcdFxcdGlmIChlbnYtXFx1MDAzZWxvZy5sZXZlbCBcXHUwMDI2IEJQRl9MT0dfTEVWRUwyKSB7XFxuIDg0NzpcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIm1hcmtfcHJlY2lzZTogZnJhbWUlZDogbGFzdF9pZHggJWQgZmlyc3RfaWR4ICVkIHN1YnNlcV9pZHggJWQgXFxcXG5cXFwiLFxcbiA4NDg6XFx0XFx0XFx0XFx0XFx0YnQtXFx1MDAzZWZyYW1lLCBsYXN0X2lkeCwgZmlyc3RfaWR4LCBzdWJzZXFfaWR4KTtcXG4gODQ5OlxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6MDIuMzQ1MzA1OTQzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NTI1MDc1MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIE1vZHVsZSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb2YgYGJwZl9jaGVja2AgYW5kIGBicGZfcHJvZ19sb2FkYCB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIG5hdmlnYXRlIHRoZSBzb3VyY2UuIEknbGwgc3RhcnQgYnkgZm9jdXNpbmcgb24gd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGxpdmUgd2l0aGluIHRoZSBrZXJuZWwncyBCUEYgaW5mcmFzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIEtjb25maWcgYW5kIE1ha2VmaWxlcy5cblxuSSdsbCBjaGVjayB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIGFuZCBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGFuZCB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgYXJlIHJlc3BvbnNpYmxlIGZvciBpbmNsdWRpbmcsIG9yIGV4Y2x1ZGluZywgdGhlIHJlbGV2YW50IGNvZGUuIEFybWVkIHdpdGggdGhpcyBpbmZvcm1hdGlvbiwgSSBjYW4gYmV0dGVyIHJlYXNvbiBhYm91dCB0aGUgdmFyaW91cyBjb25maWd1cmF0aW9uIGZsYWdzIHRoYXQgYWZmZWN0IGhvdyB0aGUgQlBGIHN1YnN5c3RlbSBpcyBidWlsdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE2NSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6MDQuODk3ODE2MzY5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDA3MjQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiYWNrdHJhY2tcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTEzPW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2xvY2FsX3N0b3JhZ2UubyBicGZfdGFza19zdG9yYWdlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZml4dXBzLm8gY2ZnLm8gc3RhdGVzLm8gYmFja3RyYWNrLm8gY2hlY2tfYnRmLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE1LW9iai0ke0NPTkZJR19CUEZfTFNNfVxcdCAgKz0gYnBmX2lub2RlX3N0b3JhZ2Uub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0NjowNC45NDc4OTUzMTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM3MTEwNTIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gQlBGIEJhY2t0cmFja2luZyBMb2dpYyoqXG5cbk9rYXksIHNvIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYCBpcyBjbGVhcmx5IHBhcnQgb2YgdGhlIEJQRiBzeXN0ZW0sIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29tcGlsYXRpb24gY29udGV4dC4gVGhlIGZhY3QgdGhhdCBpdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyByZWxhdGVkIHRvIHRoZSBCUEYgc3lzY2FsbCBpbnRlcmZhY2UuIEknbGwgbmVlZCB0byBjb25maXJtIHdoYXQgb3RoZXIgZGVwZW5kZW5jaWVzIG9yIGltcGxpY2F0aW9ucyB0aGlzIGhhcy4gTXkgbmV4dCBtb3ZlIGlzIHRvIGNoZWNrIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEJQRiwgaW5jbHVkaW5nIGBCUEZfU1lTQ0FMTGAsIGFyZSBkZWZpbmVkLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBgQlBGX1NZU0NBTExgIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhpcyBiYWNrdHJhY2tpbmcgY29kZSBmaXRzIGludG8gdGhlIGJpZ2dlciBCUEYgcGljdHVyZS4gVGhpcyB3aWxsIGxpa2VseSBzaG93IG1lIGFueSBvdGhlciBkZXBlbmRlbnQgZmVhdHVyZXMgb3IgcmVxdWlyZW1lbnRzIHRoYXQgSSBzaG91bGQgdGFrZSBub3RlIG9mLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTQ3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6MDcuMzE5MDA0MTA1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE2NzE3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ2OjA3LjM2NTE3NjEwMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTQxOTIwNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIHRoZSBwcm92aWRlZCB0ZXh0OlxuXG4qKkJQRiBDb25maWd1cmF0aW9uIFRob3VnaHRzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBJJ20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI1LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJQRiBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHRoZSBjb3JlIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB0aGF0IGRlZmluZSB3aGF0IEJQRiBmdW5jdGlvbmFsaXR5IGdldHMgYnVpbHQgaW50byB0aGUga2VybmVsLCB3aGF0IG1vZHVsZXMgYXJlIGF2YWlsYWJsZSwgYW5kIHBvdGVudGlhbGx5IGhvdyB0aGV5IGludGVyYWN0IHdpdGggZWFjaCBvdGhlci4gTGluZSAyNSBtaWdodCBiZSBpbnRyb2R1Y2luZyBhIG5ldyBmZWF0dXJlLCBlbmFibGluZyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBwZXJoYXBzIHNldHRpbmcgdXAgYSBkZXBlbmRlbmN5IHJlbGF0aW9uc2hpcC4gSSdtIGFudGljaXBhdGluZyBmaW5kaW5nIHNvbWUgZGV0YWlscyBvbiB3aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGFsc28gdXNpbmcgQlBGLCBvciB3aGF0IGFyZSBkZXBlbmRlbnQgb24gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0NjowOS41MDcwOTkwNzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdG1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMjg6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMjk6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzA6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzMTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDMyOlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDMzOlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzNDpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzU6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICAzNjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgMzc6XFx0XFx0ZGVmYXVsdCBuXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG4gIDQwOlxcdFxcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXFxuICA0MTpcXHRcXG4gIDQyOlxcdGNvbmZpZyBCUEZfSklUXFxuICA0MzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4gIDQ0OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuICA0NTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxcbiAgNDY6XFx0XFx0c2VsZWN0IEVYRUNNRU1cXG4gIDQ3OlxcdFxcdGhlbHBcXG4gIDQ4OlxcdFxcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxcbiAgNDk6XFx0XFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcXG4gIDUwOlxcdFxcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxcbiAgNTE6XFx0XFx0ICBwcm9ncmFtcy5cXG4gIDUyOlxcdFxcbiAgNTM6XFx0XFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcXG4gIDU0OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXFxuICA1NTpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcXG4gIDU2OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfa2FsbHN5bXMgKG9wdGlvbmFsKVxcbiAgNTc6XFx0XFxuICA1ODpcXHRjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG4gIDU5OlxcdFxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbiAgNjA6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBIQVZFX0VCUEZfSklUIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVRcXG4gIDYxOlxcdFxcdGhlbHBcXG4gIDYyOlxcdFxcdCAgRW5hYmxlcyBCUEYgSklUIGFuZCByZW1vdmVzIEJQRiBpbnRlcnByZXRlciB0byBhdm9pZCBzcGVjdWxhdGl2ZVxcbiAgNjM6XFx0XFx0ICBleGVjdXRpb24gb2YgQlBGIGluc3RydWN0aW9ucyBieSB0aGUgaW50ZXJwcmV0ZXIuXFxuICA2NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6MDkuNTA3MTYwODA4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyNzU4NDI2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIEJhY2t0cmFja2luZyBhbmQgVmVyaWZpZXIgSW1wcm92ZW1lbnQgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWcgb3B0aW9uIGlzIHJlbGV2YW50IGhlcmUuIExldCdzIGRpZyBpbnRvIHRoaXMgcGF0Y2guIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGlzIGNoYW5nZSBpbiBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AgaXMgYWRkcmVzc2luZyBhbiBpc3N1ZSBpbiB0aGUgQlBGIHZlcmlmaWVyJ3Mgc2NhbGFyIHByZWNpc2lvbiBiYWNrdHJhY2tpbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBCUEZfTERgIGluc3RydWN0aW9ucywgYW5kIHBhcnRpY3VsYXJseSB3aGVuIHRob3NlIGFyZSB1c2VkIHdpdGggYEJQRl9BQlNgIG9yIGBCUEZfSU5EYCB3aXRoaW4gc3VicHJvZ3JhbXMuXG5cblByZXZpb3VzbHksIHRoZSBjb2RlIHdhcyBoYW5kbGluZyB0aGUgYEJQRl9MRGAgaW5zdHJ1Y3Rpb25zLCBhbmQgZm9yIHRoZSBgbGRfaW1tNjRgIGNhc2UsIG5vIGZ1cnRoZXIgcHJlY2lzaW9uIHRyYWNraW5nIHdhcyBuZWVkZWQuIEhvd2V2ZXIsIHdoZW4gd2Ugd2VyZSBkZWFsaW5nIHdpdGggYEJQRl9JTkRgIG9yIGBCUEZfQUJTYCwgdGhlcmUgd2FzIGEgYC1FTk9UU1VQUGAgZXJyb3IgdGhhdCB3YXMgcmV0dXJuZWQuIE5vdywgdGhlcmUgYXJlIGNoYW5nZXMgdG8gaG93IHRoZXNlIGFyZSBoYW5kbGVkLiBgQlBGX0lNTWAgY2FzZXMgYXJlIG5vdyBoYW5kbGVkIGJ5IGNsZWFyaW5nIHRoZSByZWdpc3Rlci4gQ3J1Y2lhbGx5LCB0aGUgcGF0Y2ggbm93IG1vZGVscyBgQlBGX3tJTkQsIEFCU31gIGFzIHR3byBicmFuY2hlczogYSBmYWxsdGhyb3VnaCBicmFuY2ggYW5kIGFuIGltcGxpY2l0IHN1YnByb2dyYW0gZXhpdC4gV2hlbiB0aGUgaW1wbGljaXQgc3VicHJvZ3JhbSBleGl0IGJyYW5jaCBpcyBiYWNrdHJhY2tlZCwgdGhlIGN1cnJlbnQgZnJhbWUgbmVlZHMgdG8gYmUgc3dpdGNoZWQuXG5cbkVmZmVjdGl2ZWx5LCB0aGlzIHBhdGNoIHNlZW1zIHRvIGZpeCBhIGJ1ZyB3aGVyZSB0aGUgdmVyaWZpZXIgd2Fzbid0IHByb3Blcmx5IGJhY2t0cmFja2luZyB3aGVuIGEgc3VicHJvZ3JhbSBleGl0ZWQgZWFybHkgZHVlIHRvIGBCUEZfTEQgfCBCUEZfQUJTYCwgbGVhZGluZyB0byBhIHNlZ21lbnRhdGlvbiBmYXVsdC4gVGhpcyBtYWtlcyB0b3RhbCBzZW5zZTsgSSBjYW4gc2VlIGhvdyB0aGlzIHdvdWxkIGNhdXNlIHByb2JsZW1zLlxuXG5HaXZlbiB0aGlzIGNvbnRleHQsIGFuZCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSB2ZXJpZmllcidzIHJvbGUgYXMgYSBjcml0aWNhbCBzZWN1cml0eSBib3VuZGFyeSwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGJlIGZ1enppbmcuIFRoZSBCUEYgdmVyaWZpZXIgaXMgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHRocm91Z2ggdGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgY2FuIGJlIGxldmVyYWdlZCBieSBib3RoIHVucHJpdmlsZWdlZCB1c2VycyBhbmQgdGhvc2Ugd2l0aCBjYXBhYmlsaXRpZXMgbGlrZSBgQ0FQX0JQRmAgb3IgYENBUF9TWVNfQURNSU5gLiBJIHNob3VsZCBhYnNvbHV0ZWx5IHByaW9yaXRpemUgZnV6emluZyB0aGUgQlBGIHZlcmlmaWNhdGlvbiBwcm9jZXNzLCBwZXJoYXBzIHdpdGggc29tZXRoaW5nIGxpa2UgU3l6a2FsbGVyLlxuXG5Ob3csIGxldCdzIGZpZ3VyZSBvdXQgd2hhdCB0aGUgYmVzdCBmb2N1cyBzeW1ib2xzIGFyZSBmb3IgZnV6emluZy4gSSBuZWVkIHRvIGNoZWNrIHRoZSBleHBvcnRlZCBhbmQgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzIGluIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYCBhbmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEknbGwgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciBmdW5jdGlvbnMgd2l0aGluIHRob3NlIHR3byBmaWxlcyBzcGVjaWZpY2FsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzEzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6MTQuNzgzMDA1NTY3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTU3Nzk5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGJwZl9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDgzOCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTMyNT1zdGF0aWMgdm9pZCAqcGVyY3B1X2FycmF5X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1MzIgY3B1KVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTMzOC1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MzM5OmludCBicGZfcGVyY3B1X2FycmF5X2NvcHkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncylcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMzQwLXtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0zNzMtLyogQ2FsbGVkIGZyb20gc3lzY2FsbCAqL1xcbmtlcm5lbC9icGYvYXJyYXltYXAuYzozNzQ6aW50IGJwZl9hcnJheV9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMzc1LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz0zOTI9c3RhdGljIGxvbmcgYXJyYXlfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtNDMwLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo0MzE6aW50IGJwZl9wZXJjcHVfYXJyYXlfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTQzMi1cXHRcXHRcXHQgICAgdTY0IG1hcF9mbGFncylcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz05MzI9c3RhdGljIHZvaWQgKmZkX2FycmF5X21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtOTM3LS8qIG9ubHkgY2FsbGVkIGZyb20gc3lzY2FsbCAqL1xcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo5Mzg6aW50IGJwZl9mZF9hcnJheV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1MzIgKnZhbHVlKVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy05Mzkte1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTk1Ny0vKiBvbmx5IGNhbGxlZCBmcm9tIHN5c2NhbGwgKi9cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6OTU4OmludCBicGZfZmRfYXJyYXlfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtOTU5LVxcdFxcdFxcdFxcdCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYy0xMC0vKiBmb3IgYW55IGJyYW5jaCwgY2FsbCwgZXhpdCByZWNvcmQgdGhlIGhpc3Rvcnkgb2Ygam1wcyBpbiB0aGUgZ2l2ZW4gc3RhdGUgKi9cXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jOjExOmludCBicGZfcHVzaF9qbXBfaGlzdG9yeShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIsXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYy0xMi1cXHRcXHRcXHQgaW50IGluc25fZmxhZ3MsIGludCBzcGksIGludCBmcmFtZSwgdTY0IGxpbmtlZF9yZWdzKVxcbi0tXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYz02Njg9dm9pZCBicGZfbWFya19hbGxfc2NhbGFyc19wcmVjaXNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTgwMS0gKi9cXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jOjgwMjppbnQgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYy04MDMtXFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0YXJ0aW5nX3N0YXRlLFxcbi0tXFxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jPTE2Mj1zdGF0aWMgaW5saW5lIGJvb2wgdmFsaWRfb2Zmc2V0cyhjb25zdCBzdHJ1Y3QgYnBmX2luc25fYXJyYXkgKmluc25fYXJyYXksXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmMtMTgyLVxcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYzoxODM6aW50IGJwZl9pbnNuX2FycmF5X2luaXQoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy0xODQte1xcbi0tXFxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jLTIxMS1cXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmM6MjEyOmludCBicGZfaW5zbl9hcnJheV9yZWFkeShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy0yMTMte1xcbi0tXFxua2VybmVsL2JwZi9icGZfaXRlci5jPTI4Mz1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJwZl9pdGVyX2ZvcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtMjkzLSAqL1xcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzoyOTQ6aW50IGJwZl9pdGVyX3JlZ190YXJnZXQoY29uc3Qgc3RydWN0IGJwZl9pdGVyX3JlZyAqcmVnX2luZm8pXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTI5NS17XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9MzMxPXN0YXRpYyB2b2lkIGNhY2hlX2J0Zl9pZChzdHJ1Y3QgYnBmX2l0ZXJfdGFyZ2V0X2luZm8gKnRpbmZvLFxcbi0tXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTMzNi1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6MzM3OmludCBicGZfaXRlcl9wcm9nX3N1cHBvcnRlZChzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTMzOC17XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9NDk5PWJvb2wgYnBmX2xpbmtfaXNfaXRlcihzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNTAzLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo1MDQ6aW50IGJwZl9pdGVyX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNTA1LVxcdFxcdFxcdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9NTg5PXN0YXRpYyBpbnQgcHJlcGFyZV9zZXFfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJwZl9pdGVyX2xpbmsgKmxpbmspXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNjMzLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo2MzQ6aW50IGJwZl9pdGVyX25ld19mZChzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTYzNS17XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM9NjU3PXN0cnVjdCBicGZfcHJvZyAqYnBmX2l0ZXJfZ2V0X2luZm8oc3RydWN0IGJwZl9pdGVyX21ldGEgKm1ldGEsIGJvb2wgaW5fc3RvcClcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy02NzktXFxua2VybmVsL2JwZi9icGZfaXRlci5jOjY4MDppbnQgYnBmX2l0ZXJfcnVuX3Byb2coc3RydWN0IGJwZl9wcm9nICpwcm9nLCB2b2lkICpjdHgpXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTY4MS17XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM9MjY1PXN0YXRpYyB2b2lkIGJwZl9zZWxlbV91bmxpbmtfbWFwX25vbG9jayhzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZWxlbSAqc2VsZW0pXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtMjY5LVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzoyNzA6aW50IGJwZl9zZWxlbV9saW5rX21hcChzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwICpzbWFwLFxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0yNzEtXFx0XFx0ICAgICAgIHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZSAqbG9jYWxfc3RvcmFnZSxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYz0yOTA9c3RhdGljIHZvaWQgYnBmX3NlbGVtX2xpbmtfbWFwX25vbG9jayhzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwX2J1Y2tldCAqYixcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0yOTktICovXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jOjMwMDppbnQgYnBmX3NlbGVtX3VubGluayhzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZWxlbSAqc2VsZW0pXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTMwMS17XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM9NDYyPXN0YXRpYyBpbnQgY2hlY2tfZmxhZ3MoY29uc3Qgc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2RhdGEgKm9sZF9zZGF0YSxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy00NzUtXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jOjQ3NjppbnQgYnBmX2xvY2FsX3N0b3JhZ2VfYWxsb2Modm9pZCAqb3duZXIsXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTQ3Ny1cXHRcXHRcXHQgICAgc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX21hcCAqc21hcCxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYz02OTQ9c3RhdGljIHZvaWQgYnBmX2xvY2FsX3N0b3JhZ2VfY2FjaGVfaWR4X2ZyZWUoc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2NhY2hlICpjYWNoZSxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy03MDEtXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jOjcwMjppbnQgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy03MDMte1xcbi0tXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTcxNy1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6NzE4OmludCBicGZfbG9jYWxfc3RvcmFnZV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTcxOS1cXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYz02NjY9c3RhdGljIHZvaWQgYnBmX2xydV9saXN0X2luaXQoc3RydWN0IGJwZl9scnVfbGlzdCAqbClcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNjgwLVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6NjgxOmludCBicGZfbHJ1X2luaXQoc3RydWN0IGJwZl9scnUgKmxydSwgYm9vbCBwZXJjcHUsIHUzMiBoYXNoX29mZnNldCxcXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTY4Mi1cXHRcXHQgZGVsX2Zyb21faHRhYl9mdW5jIGRlbF9mcm9tX2h0YWIsIHZvaWQgKmRlbF9hcmcpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5oPTc5PXN0YXRpYyBpbmxpbmUgdm9pZCBicGZfbHJ1X25vZGVfc2V0X3JlZihzdHJ1Y3QgYnBmX2xydV9ub2RlICpub2RlKVxcbi0tXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuaC04NC1cXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5oOjg1OmludCBicGZfbHJ1X2luaXQoc3RydWN0IGJwZl9scnUgKmxydSwgYm9vbCBwZXJjcHUsIHUzMiBoYXNoX29mZnNldCxcXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5oLTg2LVxcdFxcdCBkZWxfZnJvbV9odGFiX2Z1bmMgZGVsX2Zyb21faHRhYiwgdm9pZCAqZGVsZXRlX2FyZyk7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYz05ND12b2lkIGJwZl9sc21fZmluZF9jZ3JvdXBfc2hpbShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYy0xMTgtXFxua2VybmVsL2JwZi9icGZfbHNtLmM6MTE5OmludCBicGZfbHNtX3ZlcmlmeV9wcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICp2bG9nLFxcbmtlcm5lbC9icGYvYnBmX2xzbS5jLTEyMC1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYz00NDM9Ym9vbCBicGZfbHNtX2hvb2tfcmV0dXJuc19lcnJubyh1MzIgYnRmX2lkKVxcbi0tXFxua2VybmVsL2JwZi9icGZfbHNtLmMtNDUxLVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jOjQ1MjppbnQgYnBmX2xzbV9nZXRfcmV0dmFsX3JhbmdlKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG5rZXJuZWwvYnBmL2JwZl9sc20uYy00NTMtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3JldHZhbF9yYW5nZSAqcmV0dmFsX3JhbmdlKVxcbi0tXFxua2VybmVsL2JwZi9icGZfbHNtX3Byb3RvLmMtMTQtICovXFxua2VybmVsL2JwZi9icGZfbHNtX3Byb3RvLmM6MTU6aW50IGJwZl9sc21fbW1hcF9maWxlKHN0cnVjdCBmaWxlICpmaWxlX19udWxsYWJsZSwgdW5zaWduZWQgbG9uZyByZXFwcm90LFxcbmtlcm5lbC9icGYvYnBmX2xzbV9wcm90by5jLTE2LVxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0zMzc9c3RhdGljIGJvb2wgaXNfbW9kdWxlX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBpZClcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zNTAtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjM1MTppbnQgYnBmX3N0cnVjdF9vcHNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzLCB1MzIgbW9mZilcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzUyLXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zNTctXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjM1ODppbnQgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0KHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYyxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzU5LVxcdFxcdFxcdCAgICAgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTUxMT1zdGF0aWMgaW50IGJwZl9zdHJ1Y3Rfb3BzX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTUyMC1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6NTIxOmludCBicGZfc3RydWN0X29wc19tYXBfc3lzX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNTIyLVxcdFxcdFxcdFxcdCAgICAgICB2b2lkICp2YWx1ZSlcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz02MzI9Y29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfc3RydWN0X29wc19saW5rX2xvcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNjM2LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzo2Mzc6aW50IGJwZl9zdHJ1Y3Rfb3BzX3ByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTYzOC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MTI0Nj1FWFBPUlRfU1lNQk9MX0dQTChicGZfc3RydWN0X29wc19pZCk7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI2MC0gKi9cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTI2MTppbnQgYnBmX3N0cnVjdF9vcHNfZm9yX2VhY2hfcHJvZyhjb25zdCB2b2lkICprZGF0YSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTI2Mi1cXHRcXHRcXHRcXHQgaW50ICgqY2IpKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdm9pZCAqZGF0YSksXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MTQyOD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfc3RydWN0X29wc19tYXBfbG9wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xNDM2LVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxNDM3OmludCBicGZfc3RydWN0X29wc19saW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQzOC17XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTQ5MS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTQ5MjppbnQgYnBmX3Byb2dfYXNzb2Nfc3RydWN0X29wcyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfbWFwICptYXApXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTE0OTMte1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz05MzY5PUVYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyk7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTkzOTEtICovXFxua2VybmVsL2JwZi9idGYuYzo5MzkyOmludCBicGZfY29yZV90eXBlc19hcmVfY29tcGF0KGNvbnN0IHN0cnVjdCBidGYgKmxvY2FsX2J0ZiwgX191MzIgbG9jYWxfaWQsXFxua2VybmVsL2JwZi9idGYuYy05MzkzLVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBidGYgKnRhcmdfYnRmLCBfX3UzMiB0YXJnX2lkKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy05NDAwLVxcbmtlcm5lbC9icGYvYnRmLmM6OTQwMTppbnQgYnBmX2NvcmVfdHlwZXNfbWF0Y2goY29uc3Qgc3RydWN0IGJ0ZiAqbG9jYWxfYnRmLCB1MzIgbG9jYWxfaWQsXFxua2VybmVsL2JwZi9idGYuYy05NDAyLVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYnRmICp0YXJnX2J0ZiwgdTMyIHRhcmdfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTk2MjE9YnBmX2NvcmVfZmluZF9jYW5kcyhzdHJ1Y3QgYnBmX2NvcmVfY3R4ICpjdHgsIHUzMiBsb2NhbF90eXBlX2lkKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy05NzA3LVxcbmtlcm5lbC9icGYvYnRmLmM6OTcwODppbnQgYnBmX2NvcmVfYXBwbHkoc3RydWN0IGJwZl9jb3JlX2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3QgYnBmX2NvcmVfcmVsbyAqcmVsbyxcXG5rZXJuZWwvYnBmL2J0Zi5jLTk3MDktXFx0XFx0ICAgaW50IHJlbG9faWR4LCB2b2lkICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi9jZmcuYz0yMjY9c3RhdGljIGludCBzb3J0X2luc25fYXJyYXlfdW5pcSh1MzIgKml0ZW1zLCBpbnQgY250KVxcbi0tXFxua2VybmVsL2JwZi9jZmcuYy0yNDItICovXFxua2VybmVsL2JwZi9jZmcuYzoyNDM6aW50IGJwZl9jb3B5X2luc25fYXJyYXlfdW5pcShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIgc3RhcnQsIHUzMiBlbmQsIHUzMiAqb2ZmKVxcbmtlcm5lbC9icGYvY2ZnLmMtMjQ0LXtcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmM9NDUxPXN0YXRpYyBpbnQgdmlzaXRfaW5zbihpbnQgdCwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtNTg2LSAqL1xcbmtlcm5lbC9icGYvY2ZnLmM6NTg3OmludCBicGZfY2hlY2tfY2ZnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9jZmcuYy01ODgte1xcbi0tXFxua2VybmVsL2JwZi9jZmcuYy02ODgtICovXFxua2VybmVsL2JwZi9jZmcuYzo2ODk6aW50IGJwZl9jb21wdXRlX3Bvc3RvcmRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvY2ZnLmMtNjkwLXtcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtNzQxLSAqL1xcbmtlcm5lbC9icGYvY2ZnLmM6NzQyOmludCBicGZfY29tcHV0ZV9zY2Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2NmZy5jLTc0My17XFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jPTM0MT1zdGF0aWMgaW50IGNoZWNrX2NvcmVfcmVsbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYy00MDktXFxua2VybmVsL2JwZi9jaGVja19idGYuYzo0MTA6aW50IGJwZl9wcmVwYXJlX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9jaGVja19idGYuYy00MTEtXFx0XFx0XFx0IGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYy00MzctXFxua2VybmVsL2JwZi9jaGVja19idGYuYzo0Mzg6aW50IGJwZl9jaGVja19idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNDM5LVxcdFxcdCAgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvY29uc3RfZm9sZC5jPTIwOT1zdGF0aWMgYm9vbCBjb25zdF9yZWdfam9pbihzdHJ1Y3QgY29uc3RfYXJnX2luZm8gKmNpX3RhcmdldCxcXG4tLVxcbmtlcm5lbC9icGYvY29uc3RfZm9sZC5jLTIzMS1cXG5rZXJuZWwvYnBmL2NvbnN0X2ZvbGQuYzoyMzI6aW50IGJwZl9jb21wdXRlX2NvbnN0X3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2NvbnN0X2ZvbGQuYy0yMzMte1xcbi0tXFxua2VybmVsL2JwZi9jb25zdF9mb2xkLmM9MzE1PXN0YXRpYyBpbnQgZXZhbF9jb25zdF9icmFuY2godTggb3Bjb2RlLCB1NjQgZHN0X3ZhbCwgdTY0IHNyY192YWwpXFxuLS1cXG5rZXJuZWwvYnBmL2NvbnN0X2ZvbGQuYy0zMzgtICovXFxua2VybmVsL2JwZi9jb25zdF9mb2xkLmM6MzM5OmludCBicGZfcHJ1bmVfZGVhZF9icmFuY2hlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvY29uc3RfZm9sZC5jLTM0MC17XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0xNzc9RVhQT1JUX1NZTUJPTF9HUEwoYnBmX3Byb2dfYWxsb2MpO1xcbmtlcm5lbC9icGYvY29yZS5jLTE3OC1cXG5rZXJuZWwvYnBmL2NvcmUuYzoxNzk6aW50IGJwZl9wcm9nX2FsbG9jX2ppdGVkX2xpbmZvKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5rZXJuZWwvYnBmL2NvcmUuYy0xODAte1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9Mjg4PXZvaWQgX19icGZfcHJvZ19mcmVlKHN0cnVjdCBicGZfcHJvZyAqZnApXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMDEtXFxua2VybmVsL2JwZi9jb3JlLmM6MzAyOmludCBicGZfcHJvZ19jYWxjX3RhZyhzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxcbmtlcm5lbC9icGYvY29yZS5jLTMwMy17XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz00NTY9c3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9zaW5nbGUoc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtNTE2LVxcbmtlcm5lbC9icGYvY29yZS5jOjUxNzppbnQgYnBmX3JlbW92ZV9pbnNucyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsIHUzMiBjbnQpXFxua2VybmVsL2JwZi9jb3JlLmMtNTE4LXtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTU0MT12b2lkIGJwZl9wcm9nX2thbGxzeW1zX2RlbF9hbGwoc3RydWN0IGJwZl9wcm9nICpmcClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTU0OC0vKiBBbGwgQlBGIEpJVCBzeXNjdGwga25vYnMgaGVyZS4gKi9cXG5rZXJuZWwvYnBmL2NvcmUuYzo1NDk6aW50IGJwZl9qaXRfZW5hYmxlICAgX19yZWFkX21vc3RseSA9IElTX0JVSUxUSU4oQ09ORklHX0JQRl9KSVRfREVGQVVMVF9PTik7XFxua2VybmVsL2JwZi9jb3JlLmM6NTUwOmludCBicGZfaml0X2thbGxzeW1zIF9fcmVhZF9tb3N0bHkgPSBJU19CVUlMVElOKENPTkZJR19CUEZfSklUX0RFRkFVTFRfT04pO1xcbmtlcm5lbC9icGYvY29yZS5jOjU1MTppbnQgYnBmX2ppdF9oYXJkZW4gICBfX3JlYWRfbW9zdGx5O1xcbmtlcm5lbC9icGYvY29yZS5jLTU1Mi1sb25nIGJwZl9qaXRfbGltaXQgICBfX3JlYWRfbW9zdGx5O1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9NzEzPXN0YXRpYyBzdHJ1Y3QgYnBmX2tzeW0gKmJwZl9rc3ltX2ZpbmQodW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtNzIwLVxcbmtlcm5lbC9icGYvY29yZS5jOjcyMTppbnQgYnBmX2FkZHJlc3NfbG9va3VwKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyAqc2l6ZSxcXG5rZXJuZWwvYnBmL2NvcmUuYy03MjItXFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKm9mZiwgY2hhciAqc3ltKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9Nzg0PWNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKnNlYXJjaF9icGZfZXh0YWJsZXModW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtODAxLVxcbmtlcm5lbC9icGYvY29yZS5jOjgwMjppbnQgYnBmX2dldF9rYWxsc3ltKHVuc2lnbmVkIGludCBzeW1udW0sIHVuc2lnbmVkIGxvbmcgKnZhbHVlLCBjaGFyICp0eXBlLFxcbmtlcm5lbC9icGYvY29yZS5jLTgwMy1cXHRcXHQgICAgY2hhciAqc3ltKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtODI5LVxcbmtlcm5lbC9icGYvY29yZS5jOjgzMDppbnQgYnBmX2ppdF9hZGRfcG9rZV9kZXNjcmlwdG9yKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG5rZXJuZWwvYnBmL2NvcmUuYy04MzEtXFx0XFx0XFx0XFx0c3RydWN0IGJwZl9qaXRfcG9rZV9kZXNjcmlwdG9yICpwb2tlKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MTEwNz1wdXJlX2luaXRjYWxsKGJwZl9qaXRfY2hhcmdlX2luaXQpO1xcbmtlcm5lbC9icGYvY29yZS5jLTExMDgtXFxua2VybmVsL2JwZi9jb3JlLmM6MTEwOTppbnQgYnBmX2ppdF9jaGFyZ2VfbW9kbWVtKHUzMiBzaXplKVxcbmtlcm5lbC9icGYvY29yZS5jLTExMTAte1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MTE5Nz1icGZfaml0X2JpbmFyeV9wYWNrX2FsbG9jKHVuc2lnbmVkIGludCBwcm9nbGVuLCB1OCAqKmltYWdlX3B0cixcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTEyNDItLyogQ29weSBKSVRlZCB0ZXh0IGZyb20gcndfaGVhZGVyIHRvIGl0cyBmaW5hbCBsb2NhdGlvbiwgdGhlIHJvX2hlYWRlci4gKi9cXG5rZXJuZWwvYnBmL2NvcmUuYzoxMjQzOmludCBicGZfaml0X2JpbmFyeV9wYWNrX2ZpbmFsaXplKHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqcm9faGVhZGVyLFxcbmtlcm5lbC9icGYvY29yZS5jLTEyNDQtXFx0XFx0XFx0XFx0IHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqcndfaGVhZGVyKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MTMwMz12b2lkIF9fd2VhayBicGZfaml0X2ZyZWUoc3RydWN0IGJwZl9wcm9nICpmcClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTEzMTQtXFxua2VybmVsL2JwZi9jb3JlLmM6MTMxNTppbnQgYnBmX2ppdF9nZXRfZnVuY19hZGRyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG5rZXJuZWwvYnBmL2NvcmUuYy0xMzE2LVxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBib29sIGV4dHJhX3Bhc3MsXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNDczPUVWQUw0KFBST0dfTkFNRV9MSVNULCA0MTYsIDQ0OCwgNDgwLCA1MTIpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDc3LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL2NvcmUuYzoyNDc4OmludCBicGZfcGF0Y2hfY2FsbF9hcmdzKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgdTMyIHN0YWNrX2RlcHRoKVxcbmtlcm5lbC9icGYvY29yZS5jLTI0Nzkte1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9Mjc4NT12b2lkIGJwZl9wcm9nX2FycmF5X2ZyZWVfc2xlZXBhYmxlKHN0cnVjdCBicGZfcHJvZ19hcnJheSAqcHJvZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNzkxLVxcbmtlcm5lbC9icGYvY29yZS5jOjI3OTI6aW50IGJwZl9wcm9nX2FycmF5X2xlbmd0aChzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKmFycmF5KVxcbmtlcm5lbC9icGYvY29yZS5jLTI3OTMte1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MjgxMz1zdGF0aWMgYm9vbCBicGZfcHJvZ19hcnJheV9jb3B5X2NvcmUoc3RydWN0IGJwZl9wcm9nX2FycmF5ICphcnJheSxcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTI4MzItXFxua2VybmVsL2JwZi9jb3JlLmM6MjgzMzppbnQgYnBmX3Byb2dfYXJyYXlfY29weV90b191c2VyKHN0cnVjdCBicGZfcHJvZ19hcnJheSAqYXJyYXksXFxua2VybmVsL2JwZi9jb3JlLmMtMjgzNC1cXHRcXHRcXHRcXHRfX3UzMiBfX3VzZXIgKnByb2dfaWRzLCB1MzIgY250KVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9Mjg1OT12b2lkIGJwZl9wcm9nX2FycmF5X2RlbGV0ZV9zYWZlKHN0cnVjdCBicGZfcHJvZ19hcnJheSAqYXJyYXksXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yODg1LSAqL1xcbmtlcm5lbC9icGYvY29yZS5jOjI4ODY6aW50IGJwZl9wcm9nX2FycmF5X2RlbGV0ZV9zYWZlX2F0KHN0cnVjdCBicGZfcHJvZ19hcnJheSAqYXJyYXksIGludCBpbmRleClcXG5rZXJuZWwvYnBmL2NvcmUuYy0yODg3LXtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTI5MDUtICovXFxua2VybmVsL2JwZi9jb3JlLmM6MjkwNjppbnQgYnBmX3Byb2dfYXJyYXlfdXBkYXRlX2F0KHN0cnVjdCBicGZfcHJvZ19hcnJheSAqYXJyYXksIGludCBpbmRleCxcXG5rZXJuZWwvYnBmL2NvcmUuYy0yOTA3LVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjkyNS1cXG5rZXJuZWwvYnBmL2NvcmUuYzoyOTI2OmludCBicGZfcHJvZ19hcnJheV9jb3B5KHN0cnVjdCBicGZfcHJvZ19hcnJheSAqb2xkX2FycmF5LFxcbmtlcm5lbC9icGYvY29yZS5jLTI5MjctXFx0XFx0XFx0c3RydWN0IGJwZl9wcm9nICpleGNsdWRlX3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yOTk2LVxcbmtlcm5lbC9icGYvY29yZS5jOjI5OTc6aW50IGJwZl9wcm9nX2FycmF5X2NvcHlfaW5mbyhzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKmFycmF5LFxcbmtlcm5lbC9icGYvY29yZS5jLTI5OTgtXFx0XFx0XFx0ICAgICB1MzIgKnByb2dfaWRzLCB1MzIgcmVxdWVzdF9jbnQsXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zNDc0PWNvbnN0IHN0cnVjdCBicGZfbGluZV9pbmZvICpicGZfZmluZF9saW5mbyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBpbnNuX29mZilcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTM1MTAtXFxua2VybmVsL2JwZi9jb3JlLmM6MzUxMTppbnQgYnBmX3Byb2dfZ2V0X2ZpbGVfbGluZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKipmaWxlcCxcXG5rZXJuZWwvYnBmL2NvcmUuYy0zNTEyLVxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKipsaW5lcCwgaW50ICpudW1wKVxcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYz01Mj1zdHJ1Y3QgYnBmX2NyeXB0b19jdHgge1xcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYy01OS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjYwOmludCBicGZfY3J5cHRvX3JlZ2lzdGVyX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZSlcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTYxLXtcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmM9ODU9RVhQT1JUX1NZTUJPTF9HUEwoYnBmX2NyeXB0b19yZWdpc3Rlcl90eXBlKTtcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTg2LVxcbmtlcm5lbC9icGYvY3J5cHRvLmM6ODc6aW50IGJwZl9jcnlwdG9fdW5yZWdpc3Rlcl90eXBlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUpXFxua2VybmVsL2JwZi9jcnlwdG8uYy04OC17XFxuLS1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM9MjMwPXN0YXRpYyB2b2lkIGRpYWdfd3JpdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3QgY2hhciAqZm10LCAuLi4pIF9fcHJpbnRmKDIsIDMpO1xcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0yMzEtXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjIzMjppbnQgYnBmX2RpYWdfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvZGlhZ25vc3RpY3MuYy0yMzMte1xcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oPTQ1PWJvb2wgYnBmX2RpYWdfZW5hYmxlZChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmg6NDY6aW50IGJwZl9kaWFnX2luaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5oLTQ3LXZvaWQgYnBmX2RpYWdfaW5pdF9mcmFtZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9NjM9c3RhdGljIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xMDMtICovXFxua2VybmVsL2JwZi9maXh1cHMuYzoxMDQ6aW50IGJwZl9pbnNuX2RlZjMyKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTA1LXtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9NTY0PXZvaWQgYnBmX29wdF9oYXJkX3dpcmVfZGVhZF9jb2RlX2JyYW5jaGVzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTU4OS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjU5MDppbnQgYnBmX29wdF9yZW1vdmVfZGVhZF9jb2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9maXh1cHMuYy01OTEte1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy02MTMtXFxua2VybmVsL2JwZi9maXh1cHMuYzo2MTQ6aW50IGJwZl9vcHRfcmVtb3ZlX25vcHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTYxNS17XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTYzOC1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjYzOTppbnQgYnBmX29wdF9zdWJyZWdfemV4dF9sbzMyX3JuZF9oaTMyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9maXh1cHMuYy02NDAtXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy03NDAtICovXFxua2VybmVsL2JwZi9maXh1cHMuYzo3NDE6aW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvZml4dXBzLmMtNzQyLXtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MTA2Nj1zdGF0aWMgaW50IGppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xMzMzLVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MTMzNDppbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTMzNS17XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE0MDQtXFxua2VybmVsL2JwZi9maXh1cHMuYzoxNDA1OmludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNDA2LXtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MTQ3OT1zdGF0aWMgaW50IGFkZF9oaWRkZW5fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCBpbnQgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNTA3LSAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTUwODppbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNTA5LXtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MjU3MD1zdGF0aWMgYm9vbCBpc19icGZfbG9vcF9jYWxsKHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjU4NS0gKi9cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjI1ODY6aW50IGJwZl9vcHRpbWl6ZV9icGZfbG9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjU4Ny17XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI2MzMtICovXFxua2VybmVsL2JwZi9maXh1cHMuYzoyNjM0OmludCBicGZfcmVtb3ZlX2Zhc3RjYWxsX3NwaWxsc19maWxscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjYzNS17XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNDU5PXN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9wZXJjcHVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHUzMiBjcHUpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDc0LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI0NzU6aW50IGJwZl9wZXJjcHVfaGFzaF9jb3B5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxhZ3MpXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjQ3Ni17XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTEyLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI1MTM6aW50IGJwZl9wZXJjcHVfaGFzaF91cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNTE0LVxcdFxcdFxcdCAgIHU2NCBtYXBfZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNjEwPXN0YXRpYyB2b2lkIGZkX2h0YWJfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI2MzEtLyogb25seSBjYWxsZWQgZnJvbSBzeXNjYWxsICovXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjYzMjppbnQgYnBmX2ZkX2h0YWJfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdTMyICp2YWx1ZSlcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNjMzLXtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI2NTEtLyogT25seSBjYWxsZWQgZnJvbSBzeXNjYWxsICovXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjY1MjppbnQgYnBmX2ZkX2h0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNjUzLVxcdFxcdFxcdFxcdHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz03NzE9c3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgYnBmX2JwcmludGZfbmVzdF9sZXZlbCk7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNzcyLVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjc3MzppbnQgYnBmX3RyeV9nZXRfYnVmZmVycyhzdHJ1Y3QgYnBmX2JwcmludGZfYnVmZmVycyAqKmJ1ZnMpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNzc0LXtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTc5Nz12b2lkIGJwZl9icHJpbnRmX2NsZWFudXAoc3RydWN0IGJwZl9icHJpbnRmX2RhdGEgKmRhdGEpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy04MTctICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6ODE4OmludCBicGZfYnByaW50Zl9wcmVwYXJlKGNvbnN0IGNoYXIgKmZtdCwgdTMyIGZtdF9zaXplLCBjb25zdCB1NjQgKnJhd19hcmdzLFxcbmtlcm5lbC9icGYvaGVscGVycy5jLTgxOS1cXHRcXHRcXHR1MzIgbnVtX2FyZ3MsIHN0cnVjdCBicGZfYnByaW50Zl9kYXRhICpkYXRhKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9MTgxMD1zdGF0aWMgdm9pZCBicGZfZHlucHRyX3NldF9zaXplKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnB0ciwgdTY0IG5ld19zaXplKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTgyMi1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoxODIzOmludCBicGZfZHlucHRyX2NoZWNrX3NpemUodTY0IHNpemUpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTgyNC17XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00NzAzPV9fYnBmX2tmdW5jIGludCBicGZfZHlucHRyX2Zyb21fZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdTMyIGZsYWdzLCBzdHJ1Y3QgYnBmX2R5bnB0ciAqcHRyX191bmluaXQpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00NzA3LVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ3MDg6aW50IGJwZl9keW5wdHJfZnJvbV9maWxlX3NsZWVwYWJsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdTMyIGZsYWdzLCBzdHJ1Y3QgYnBmX2R5bnB0ciAqcHRyX191bmluaXQpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDcwOS17XFxuLS1cXG5rZXJuZWwvYnBmL2lub2RlLmM9NDkxPXN0YXRpYyBpbnQgYnBmX29ial9kb19waW4oaW50IHBhdGhfZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSwgdm9pZCAqcmF3LFxcbi0tXFxua2VybmVsL2JwZi9pbm9kZS5jLTUzMi1cXG5rZXJuZWwvYnBmL2lub2RlLmM6NTMzOmludCBicGZfb2JqX3Bpbl91c2VyKHUzMiB1ZmQsIGludCBwYXRoX2ZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUpXFxua2VybmVsL2JwZi9pbm9kZS5jLTUzNC17XFxuLS1cXG5rZXJuZWwvYnBmL2lub2RlLmM9NTUwPXN0YXRpYyB2b2lkICpicGZfb2JqX2RvX2dldChpbnQgcGF0aF9mZCwgY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLFxcbi0tXFxua2VybmVsL2JwZi9pbm9kZS5jLTU4MS1cXG5rZXJuZWwvYnBmL2lub2RlLmM6NTgyOmludCBicGZfb2JqX2dldF91c2VyKGludCBwYXRoX2ZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsIGludCBmbGFncylcXG5rZXJuZWwvYnBmL2lub2RlLmMtNTgzLXtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0xMDE9c3RhdGljIHN0cnVjdCBmdW5jX2luc3RhbmNlICpsb29rdXBfaW5zdGFuY2Uoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMTktXFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjEyMDppbnQgYnBmX3N0YWNrX2xpdmVuZXNzX2luaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTIxLXtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0xOTA9c3RhdGljIGludCBtYXJrX3N0YWNrX3dyaXRlKHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSwgdTMyIGZyYW1lLCB1MzIgaW5zbl9pZHgsIHNwaXNfdCBtYXNrKVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTIwMC1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MjAxOmludCBicGZfam1wX29mZnNldChzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTIwMi17XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MzMwPXN0YXRpYyBib29sIGlzX2xpdmVfYmVmb3JlKHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSwgdTMyIGluc25faWR4LCB1MzIgZnJhbWVubywgdTMyIGhhbGZfc3BpKVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTMzNy1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MzM4OmludCBicGZfbGl2ZV9zdGFja19xdWVyeV9pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0KVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0zMzkte1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jPTE4NDA9c3RhdGljIGludCBhbmFseXplX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xOTg0LVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxOTg1OmludCBicGZfY29tcHV0ZV9zdWJwcm9nX2FyZ19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTk4Ni17XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9MjA2MT1zdGF0aWMgdm9pZCBjb21wdXRlX2luc25fbGl2ZV9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjIyMy0gKi9cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MjIyNDppbnQgYnBmX2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjIyNS17XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYz0xNDQ9c3RhdGljIGxvbmcgY2dyb3VwX3N0b3JhZ2VfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTgxLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjE4MjppbnQgYnBmX3BlcmNwdV9jZ3JvdXBfc3RvcmFnZV9jb3B5KHN0cnVjdCBicGZfbWFwICpfbWFwLCB2b2lkICprZXksXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTgzLVxcdFxcdFxcdFxcdCAgIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMjE1LVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjIxNjppbnQgYnBmX3BlcmNwdV9jZ3JvdXBfc3RvcmFnZV91cGRhdGUoc3RydWN0IGJwZl9tYXAgKl9tYXAsIHZvaWQgKmtleSxcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yMTctXFx0XFx0XFx0XFx0ICAgICB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncylcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jPTQ2MT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgY2dyb3VwX3N0b3JhZ2VfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQ3My1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0NzQ6aW50IGJwZl9jZ3JvdXBfc3RvcmFnZV9hc3NpZ24oc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4LCBzdHJ1Y3QgYnBmX21hcCAqX21hcClcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00NzUte1xcbi0tXFxua2VybmVsL2JwZi9sb2cuYz0xNj1zdGF0aWMgYm9vbCBicGZfdmVyaWZpZXJfbG9nX2F0dHJfdmFsaWQodTMyIGxvZ19sZXZlbCwgY2hhciBfX3VzZXIgKmxvZ19idWYsIHUzMiBsb2dfc2l6ZSlcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6MTQuODM0NTkwMzEzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMDEwMDg0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvcmUgb2YgdGhpcyBCUEYgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIFRoZSBmaWxlcyB0byBzdGFydCB3aXRoIGFyZSBvYnZpb3VzbHkgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYC4gRnJvbSBtZW1vcnksIEkgcmVjYWxsIHNvbWUga2V5IGZ1bmN0aW9ucyBpbiBgYmFja3RyYWNrLmNgIHRoYXQgd2lsbCBiZSByZWxldmFudCB0byB0cmFja2luZyBhbmQgZW5zdXJpbmcgdGhlIHByZWNpc2lvbiBvZiB0aGUgYW5hbHlzaXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIG9mIGBicGZfbWFya19jaGFpbl9wcmVjaXNpb25gLCBgYnBmX21hcmtfYWxsX3NjYWxhcnNfcHJlY2lzZWAsIGFuZCBgYnBmX3B1c2hfam1wX2hpc3RvcnlgLiBUaGVzZSBsaWtlbHkgZGVhbCB3aXRoIG1haW50YWluaW5nIHRoZSBzdGF0ZSBhbmQgaGlzdG9yeSBvZiB0aGUganVtcCBpbnN0cnVjdGlvbnMsIGNydWNpYWwgZm9yIHByZWNpc2Ugc2NhbGFyIGFuYWx5c2lzLlxuXG5Ob3csIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgdmVyaWZpY2F0aW9uIGl0c2VsZiB3aWxsIGJlIGluIGB2ZXJpZmllci5jYC4gTGV0J3MgemVybyBpbiBvbiBgYnBmX2NoZWNrYC4gSSBzaG91bGQgY2hlY2sgdGhhdCBkZWZpbml0aW9uIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFuZCBzZWUgZXhhY3RseSB3aGF0J3MgaW52b2x2ZWQuIFRoYXQncyB0aGUgZ2F0ZWtlZXBlciwgc28gdGhhdCdzIHdoZXJlIHRoZSB2ZXJpZmljYXRpb24gbG9naWMgaXMgZ29pbmcgdG8ga2ljayBpbi4gTGV0J3Mgc2VlIGhvdyB0aGF0IG9yY2hlc3RyYXRlcyB0aGUgb3ZlcmFsbCBwcm9jZXNzLCB3aGF0IGl0IGNvbnNpZGVycywgd2hhdCBpdCB2ZXJpZmllcywgYW5kIGhvdyBpdCBjYWxscyBvbiB0aGUgb3RoZXIgc3VwcG9ydCBmdW5jdGlvbnMgdG8gdHJhY2sgdGhlIHByb2dyYW0gc3RhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzU3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ2OjE3LjgzNTYwMTg4NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAwMTUxMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGJwZl9jaGVja1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTIwODU5PXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTc1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDk3NjppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5NzctXFx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ2OjE3Ljg4NTYyMzE4MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzIzNDMwMjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqTmF2aWdhdGluZyB0aGUgQlBGIFZlcmlmaWVyKipcblxuT2theSwgc28gYGJwZl9jaGVja2AgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSB2ZXJpZmllciwgZ290IGl0LiBUaGF0J3MgdGhlIHN0YXJ0aW5nIGd1bi4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHByZWNpc2lvbiB0cmFja2luZyB3b3JrcywgYW5kIGl0IGxvb2tzIGxpa2UgYGJwZl9tYXJrX2NoYWluX3ByZWNpc2lvbmAgaW4gYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgIGlzIHRoZSBrZXkuIFRoYXQgZnVuY3Rpb24gc2VlbXMgdG8gYmUgdGhlIG9uZSB0aGF0IGFjdHVhbGx5IGNhbGxzIHRoZSB1cGRhdGVkIGBiYWNrdHJhY2tfaW5zbmAgbG9naWMgZGlyZWN0bHkuICBJIG5lZWQgdG8gZ28gbG9vayBhdCBob3cgYGJwZl9wcm9nX2xvYWRgIGlzIGNhbGxlZCwgc28gSSBuZWVkIHRvIGNoZWNrIGBzeXNjYWxsLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjkyMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ2OjIwLjYwOTA1NTkyM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyMDIzMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3Byb2dfbG9hZFxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9MjkxMj1CVEZfSURfTElTVF9HTE9CQUxfU0lOR0xFKGJwZl9tdWx0aV9mdW5jX2J0Zl9pZCwgZnVuYywgYnBmX211bHRpX2Z1bmMpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yOTE2LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjI5MTc6c3RhdGljIGludCBicGZfcHJvZ19sb2FkKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjkxOC17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MzAzPXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzNjYtXFx0XFx0XFx0XFx0XFx0c2l6ZV9jb21tb24pO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzNjc6XFx0XFx0ZXJyID0gZXJyID86IGJwZl9wcm9nX2xvYWQoXFx1MDAyNmF0dHIsIHVhdHRyLCBcXHUwMDI2YXR0cl9sb2cpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzNjgtXFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA5NzY9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEwMzItXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMDMzOlxcdHJldCA9IHNlY3VyaXR5X2JwZl9wcm9nX2xvYWQoZW52LVxcdTAwM2Vwcm9nLCBhdHRyLCBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNldG9rZW4sXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMDM0LVxcdFxcdFxcdFxcdCAgICAgdWF0dHIuaXNfa2VybmVsKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6MjAuNjU3MjYzOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTA0NzQzNTg4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBtYWtlIHN1cmUgd2UgaGF2ZSBldmVyeXRoaW5nIHJpZ2h0IGZvciB0aGlzIGZ1enppbmcgc2V0dXAuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIEl0IHNlZW1zIGxpa2UgYEJQRl9TWVNDQUxMYCBpcyBzdGFuZGFyZCBmb3IgdGhpcyBjb250ZXh0LiBOb3csIEkgd2FudCB0byBjb25maXJtIHRoYXQgYGJwZl9jaGVja2AgaXMgYWN0dWFsbHkgaW52b2x2ZWQgZHVyaW5nIHRoZSBgYnBmX3Byb2dfbG9hZGAgcHJvY2Vzcy4gQWgsIHllcywgaXQgbG9va3MgbGlrZSBgYnBmX3Byb2dfbG9hZCgpYCBkb2VzIGluZGVlZCBjYWxsIGBicGZfY2hlY2soKWAuIEFuZCwgYXMgSSBzdXNwZWN0ZWQsIGBicGZfY2hlY2soKWAgaXMgcmVzcG9uc2libGUgZm9yIHZlcmlmaWNhdGlvbiwgd2hpY2ggdGhlbiBjYWxscyBgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKClgIHdpdGhpbiBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AuIFRoaXMgZnVuY3Rpb24gaXMga2V5IGJlY2F1c2UgaXQgcnVucyB0aGUgYmFja3RyYWNraW5nIGxvb3AsIGFuZCB0aGF0IGxvb3AsIGluIHR1cm4sIGNhbGxzIGBiYWNrdHJhY2tfaW5zbigpYC5cblxuQWxyaWdodCwgbGV0J3MgdmVyaWZ5IHRoYXQgdGhlIGluc3RydWN0aW9ucyBmcm9tIHRoZSBwcm9tcHQgYWxpZ25zOlxuLSAgIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIGdvb2QuXG4tICAgYEVuYWJsZUNvbmZpZ3NgIGluY2x1ZGVzIGBcIkJQRl9TWVNDQUxMXCJgLlxuLSAgIGBGb2N1c1N5bWJvbHNgIGxpc3RzIGBcImJwZl9tYXJrX2NoYWluX3ByZWNpc2lvblwiYCBhbmQgYFwiYnBmX2NoZWNrXCJgLlxuLSAgIFRoZSBpbnN0cnVjdGlvbiBpcyB0byBnaXZlIGEgY29uY2lzZSBleHBsYW5hdGlvbi5cblxuTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjay4gV2UgaGF2ZSB0byBlbnN1cmUgdGhhdCBgQlBGX1NZU0NBTExgIGlzIGFjdHVhbGx5IHJlcXVpcmVkLCBzbyBJJ2xsIHZlcmlmeSBpZiBgYmFja3RyYWNrLm9gIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzZXQuIExvb2tzIGxpa2UgdGhhdCdzIHRoZSBjYXNlLiBBbHNvLCBJIGhhdmUgdG8gYmUgc3VyZSB0aGF0IGBicGZfbWFya19jaGFpbl9wcmVjaXNpb25gIGFuZCBgYnBmX2NoZWNrYCBhcmUgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIExldCBtZSBjaGVjayB0aGUgc291cmNlIGNvZGU6XG5cbkluIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYCwgdGhlIGRlY2xhcmF0aW9uIGZvciBgYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uYCBpcyBgaW50IGJwZl9tYXJrX2NoYWluX3ByZWNpc2lvbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdGFydGluZ19zdGF0ZSwgaW50IHJlZ25vLCBib29sICpjaGFuZ2VkKWAuIFNvLCBpdCdzIG5vdCBzdGF0aWMuXG5JbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgdGhlIGRlY2xhcmF0aW9uIGZvciBgYnBmX2NoZWNrYCBpcyBgaW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKWAsIGFsc28gbm9uLXN0YXRpYy5cblxuRmluYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHBhcmFtZXRlcnMgbWF0Y2g6IGBFbmFibGVDb25maWdzYCBpcyBhbiBhcnJheSBvZiBzdHJpbmdzIHdpdGhvdXQgdGhlIGBDT05GSUdfYCBwcmVmaXguIFdlIGhhdmUgYFtcIkJQRl9TWVNDQUxMXCJdYC4gYEZvY3VzU3ltYm9sc2AgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy4gV2UgaGF2ZSBgW1wiYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uXCIsIFwiYnBmX2NoZWNrXCJdYC4gYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYC4gQW5kIHRoZSBpbnN0cnVjdGlvbnMgcmVxdWlyZSBhIGNvbmNpc2UgZXhwbGFuYXRpb24sIHdoaWNoIEkgaGF2ZSBpbiBtaW5kLlxuXG5BbGwgY2hlY2tzIGFyZSBnb29kIHRvIGdvLCBhbmQgSSdtIHJlYWR5IHRvIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1NzAsIk91dHB1dFRva2VucyI6MTQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ2OjMxLjcwNDcwMjQ5OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NzMxODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9tYXJrX2NoYWluX3ByZWNpc2lvblwiLFxuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIHNjYWxhciBwcmVjaXNpb24gYmFja3RyYWNraW5nIGxvZ2ljIGluIGJhY2t0cmFja19pbnNuKCkgZm9yIEJQRl9MRCAoc3BlY2lmaWNhbGx5IEJQRl9BQlMvQlBGX0lORCBpbnN0cnVjdGlvbnMgd2l0aCBpbXBsaWNpdCBzdWJwcm9ncmFtIGV4aXQgYnJhbmNoZXMpIHRvIHByb3Blcmx5IGFkanVzdCB0aGUgYmFja3RyYWNrIGNhbGwgZnJhbWUgYW5kIHByZXZlbnQgdmVyaWZpZXIgY3Jhc2hlcy9zZWdmYXVsdHMuIFRoaXMgaXMgY29yZSB2ZXJpZmllciBsb2dpYyByZWFjaGFibGUgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCkgc3lzY2FsbCBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9tYXJrX2NoYWluX3ByZWNpc2lvblwiLFxuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIHNjYWxhciBwcmVjaXNpb24gYmFja3RyYWNraW5nIGxvZ2ljIGluIGJhY2t0cmFja19pbnNuKCkgZm9yIEJQRl9MRCAoc3BlY2lmaWNhbGx5IEJQRl9BQlMvQlBGX0lORCBpbnN0cnVjdGlvbnMgd2l0aCBpbXBsaWNpdCBzdWJwcm9ncmFtIGV4aXQgYnJhbmNoZXMpIHRvIHByb3Blcmx5IGFkanVzdCB0aGUgYmFja3RyYWNrIGNhbGwgZnJhbWUgYW5kIHByZXZlbnQgdmVyaWZpZXIgY3Jhc2hlcy9zZWdmYXVsdHMuIFRoaXMgaXMgY29yZSB2ZXJpZmllciBsb2dpYyByZWFjaGFibGUgdmlhIHRoZSBicGYoQlBGX1BST0dfTE9BRCkgc3lzY2FsbCBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6MzEuNzgyNDQ0NzgzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA2NjI4NTU5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ2OjMxLjc4MjkyNzc1M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0MDY1Nzk3OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgc2NhbGFyIHByZWNpc2lvbiBiYWNrdHJhY2tpbmcgbG9naWMgaW4gYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgIHRvIHByb3Blcmx5IHVwZGF0ZSB0aGUgc3VicHJvZ3JhbSBjYWxsIGZyYW1lIChgYnRfc3VicHJvZ19lbnRlcmApIHdoZW4gYmFja3RyYWNraW5nIHRoZSBpbXBsaWNpdCBlYXJseSBleGl0IHBhdGggb2YgYEJQRl9MRCB8IEJQRl9BQlNgIGFuZCBgQlBGX0xEIHwgQlBGX0lORGAgaW5zdHJ1Y3Rpb25zLiBcXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHZlcmlmaWVyIGJyYW5jaGVzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdGhzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gZnJhbWUgaW5kZXhpbmcgZXJyb3JzIG9yIHZlcmlmaWVyIHN0YXRlIGNvcnJ1cHRpb24gd291bGQgbWFuaWZlc3QgYXMgY29udHJvbCBmbG93IGZhdWx0cywgYXNzZXJ0aW9ucywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aGljaCBhcmUgYWxyZWFkeSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNjM1OWU0NzQ4MWNmMjM3MzBjNTkyMGFjMmRiYmUwNmQ1YTRmODEyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMDo0NTo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYmFja3RyYWNrLmMgYi9rZXJuZWwvYnBmL2JhY2t0cmFjay5jXG5pbmRleCBhMmIxOGE5ZjE2OTRjLi5lYWY3NDM4YjllYmY5IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9iYWNrdHJhY2suY1xuKysrIGIva2VybmVsL2JwZi9iYWNrdHJhY2suY1xuQEAgLTU4MiwxNiArNTgyLDI5IEBAIHN0YXRpYyBpbnQgYmFja3RyYWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCwgaW50IHN1YnNlcV9pZHgsXG4gXHRcdFx0ICAqL1xuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9MRCkge1xuLVx0XHRpZiAoIWJ0X2lzX3JlZ19zZXQoYnQsIGRyZWcpKVxuLVx0XHRcdHJldHVybiAwO1xuLVx0XHRidF9jbGVhcl9yZWcoYnQsIGRyZWcpO1xuIFx0XHQvKiBJdCdzIGxkX2ltbTY0IG9yIGxkX2FicyBvciBsZF9pbmQuXG4gXHRcdCAqIEZvciBsZF9pbW02NCBubyBmdXJ0aGVyIHRyYWNraW5nIG9mIHByZWNpc2lvblxuIFx0XHQgKiBpbnRvIHBhcmVudCBpcyBuZWNlc3NhcnlcbiBcdFx0ICovXG4tXHRcdGlmIChtb2RlID09IEJQRl9JTkQgfHwgbW9kZSA9PSBCUEZfQUJTKVxuLVx0XHRcdC8qIHRvIGJlIGFuYWx5emVkICovXG4tXHRcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbitcdFx0aWYgKG1vZGUgPT0gQlBGX0lNTSkge1xuK1x0XHRcdGJ0X2NsZWFyX3JlZyhidCwgZHJlZyk7XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcdFx0LypcbitcdFx0ICogQlBGX3tJTkQsQUJTfSBhcmUgbW9kZWxsZWQgYXMgdHdvIGJyYW5jaGVzOlxuK1x0XHQgKiAtIGZhbGx0aHJvdWdoO1xuK1x0XHQgKiAtIGltcGxpY2l0IHN1YnByb2dyYW0gZXhpdC5cbitcdFx0ICogSXQgaXMgbmVjZXNzYXJ5IHRvIHN3aXRjaCBjdXJyZW50IGZyYW1lIGlmXG4rXHRcdCAqIGltcGxpY2l0IHN1YnByb2dyYW0gZXhpdCBicmFuY2ggaXMgYmFja3RyYWNrZWQuXG4rXHRcdCAqL1xuK1x0XHRpZiAobW9kZSA9PSBCUEZfSU5EIHx8IG1vZGUgPT0gQlBGX0FCUykge1xuK1x0XHRcdGlmIChidF9pc19yZWdfc2V0KGJ0LCBkcmVnKSlcbitcdFx0XHRcdHJldHVybiAtRU5PVFNVUFA7XG4rXHRcdFx0aWYgKHN1YnNlcV9pZHggIT0gaWR4ICsgMSlcbitcdFx0XHRcdGlmIChidF9zdWJwcm9nX2VudGVyKGJ0KSlcbitcdFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbiBcdH1cbiBcdC8qIFByb3BhZ2F0ZSBwcmVjaXNpb24gbWFya3MgdG8gbGlua2VkIHJlZ2lzdGVycywgdG8gYWNjb3VudCBmb3JcbiBcdCAqIHJlZ2lzdGVycyBtYXJrZWQgYXMgcHJlY2lzZSBpbiB0aGlzIGZ1bmN0aW9uLlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zdWJwcm9nX3ByZWNpc2lvbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3N1YnByb2dfcHJlY2lzaW9uLmNcbmluZGV4IGQyMWQzMmY2YTY3NjAuLmUxNzRhOTA1YzU2MjggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3VicHJvZ19wcmVjaXNpb24uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3N1YnByb2dfcHJlY2lzaW9uLmNcbkBAIC04NDYsNCArODQ2LDU1IEBAIF9fbmFrZWQgaW50IHN1YnByb2dfcmVzdWx0X3RhaWxfY2FsbCh2b2lkKVxuIFx0KTtcbiB9XG4gXG4rX19uYWtlZCBfX25vaW5saW5lIF9fdXNlZFxuK3N0YXRpYyBpbnQgbGRfYWJzX3N1YnByb2codm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XHRcInI2ID0gcjE7XCJcbitcdFx0XCJyNyA9IHIxO1wiXG4rXHRcdFwiLjhieXRlICVbbGRfYWJzXTtcIlxuK1x0XHRcImV4aXQ7XCJcbitcdFx0OlxuK1x0XHQ6IF9faW1tX2luc24obGRfYWJzLCBCUEZfTERfQUJTKEJQRl9XLCAwKSlcbitcdFx0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rLypcbisgKiBCdWdneSB2ZXJpZmllciBkaWQgbm90IHByb3Blcmx5IGJhY2t0cmFjayBlYXJseSBzdWJwcm9ncmFtIGV4aXRcbisgKiBtb2RlbGxlZCBmb3IgQlBGX0xEIHwgQlBGX0FCUyBpbnN0cnVjdGlvbiwgY2F1c2luZyBhIHNlZ2ZhdWx0LlxuKyAqL1xuK1NFQyhcInNvY2tldFwiKVxuK19fc3VjY2Vzc1xuK19fbG9nX2xldmVsKDIpXG4rLyogZWFybHkgZXhpdCBwYXRoICovXG4rX19tc2coXCIzOiAoMGYpIHIxICs9IHI3XCIpXG4rX19tc2coXCJtYXJrX3ByZWNpc2U6IGZyYW1lMDogcmVncz1yNyBzdGFjaz0gYmVmb3JlIDI6IChiZikgcjEgPSByMTBcIilcbitfX21zZyhcIm1hcmtfcHJlY2lzZTogZnJhbWUwOiByZWdzPXI3IHN0YWNrPSBiZWZvcmUgOTogKDIwKSByMCA9ICoodTMyICopc2tiWzBdXCIpXG4rX19tc2coXCJtYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSA4OiAoYmYpIHI3ID0gcjFcIilcbitfX21zZyhcIm1hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDc6IChiZikgcjYgPSByMVwiKVxuK19fbXNnKFwibWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgMTogKDg1KSBjYWxsIHBjKzVcIilcbitfX21zZyhcIm1hcmtfcHJlY2lzZTogZnJhbWUwOiByZWdzPXI3IHN0YWNrPSBiZWZvcmUgMDogKGI3KSByNyA9IC04XCIpXG4rLyogZmFsbHRocm91Z2ggcGF0aCAqL1xuK19fbXNnKFwiMzogKDBmKSByMSArPSByN1wiKVxuK19fbXNnKFwibWFya19wcmVjaXNlOiBmcmFtZTA6IHJlZ3M9cjcgc3RhY2s9IGJlZm9yZSAyOiAoYmYpIHIxID0gcjEwXCIpXG4rX19tc2coXCJtYXJrX3ByZWNpc2U6IGZyYW1lMDogcmVncz1yNyBzdGFjaz0gYmVmb3JlIDEwOiAoOTUpIGV4aXRcIilcbitfX21zZyhcIm1hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDk6ICgyMCkgcjAgPSAqKHUzMiAqKXNrYlswXVwiKVxuK19fbXNnKFwibWFya19wcmVjaXNlOiBmcmFtZTE6IHJlZ3M9IHN0YWNrPSBiZWZvcmUgODogKGJmKSByNyA9IHIxXCIpXG4rX19tc2coXCJtYXJrX3ByZWNpc2U6IGZyYW1lMTogcmVncz0gc3RhY2s9IGJlZm9yZSA3OiAoYmYpIHI2ID0gcjFcIilcbitfX21zZyhcIm1hcmtfcHJlY2lzZTogZnJhbWUxOiByZWdzPSBzdGFjaz0gYmVmb3JlIDE6ICg4NSkgY2FsbCBwYys1XCIpXG4rX19tc2coXCJtYXJrX3ByZWNpc2U6IGZyYW1lMDogcmVncz1yNyBzdGFjaz0gYmVmb3JlIDA6IChiNykgcjcgPSAtOFwiKVxuK19fbmFrZWQgaW50IGxkX2Fic19iYWNrdHJhY2tfYm90aF9wYXRocyh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcdFwicjcgPSAtODtcIlxuK1x0XHRcImNhbGwgbGRfYWJzX3N1YnByb2c7XCJcbitcdFx0XCJyMSA9IHIxMDtcIlxuK1x0XHRcInIxICs9IHI3O1wiIC8qIG1hcmsgcjcgYXMgcHJlY2lzZSAqL1xuK1x0XHRcIioodTY0ICopKHIxICsgMCkgPSAwO1wiXG4rXHRcdFwicjAgPSAwO1wiXG4rXHRcdFwiZXhpdDtcIlxuK1x0XHQ6OjogX19jbG9iYmVyX2FsbFxuK1x0KTtcbit9XG4rXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6MzEuNzgyOTI4NjAzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2NjE5MjgyODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlcmUncyBhIG1vZGlmaWNhdGlvbiBpbiBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBiYWNrdHJhY2tfaW5zbigpYCBmdW5jdGlvbi4gU2ltdWx0YW5lb3VzbHksIGEgbmV3IHNlbGZ0ZXN0IGhhcyBiZWVuIGludHJvZHVjZWQgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zdWJwcm9nX3ByZWNpc2lvbi5jYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBhIHBvdGVudGlhbCBmaXggb3IgZW5oYW5jZW1lbnQgcmVsYXRlZCB0byBCUEYgaW5zdHJ1Y3Rpb24gYmFja3RyYWNraW5nLCBsaWtlbHkgaW1wYWN0aW5nIHRoZSB2ZXJpZmllcidzIHByZWNpc2lvbi5cblxuVG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBjaGFuZ2VkLCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcm9sZSBvZiBgYmFja3RyYWNrX2luc24oKWAgd2l0aGluIHRoZSBrZXJuZWwuIFRpbWUgdG8gZ3JhYiB0aGUgY29kZS4gSSdsbCBwcm9iYWJseSB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSBmdW5jdGlvbidzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgQlBGIHZlcmlmaWNhdGlvbiBwcm9jZXNzLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzI5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6MzguNDQ0ODYwOTY2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2JhY2t0cmFjay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3MDpcXHRcXHRcXHRcXHQgKiBiZWZvcmUgaXQgd291bGQgYmUgZXF1YWxseSBuZWNlc3NhcnkgdG9cXG4gNTcxOlxcdFxcdFxcdFxcdCAqIHByb3BhZ2F0ZSBpdCB0byBkcmVnLlxcbiA1NzI6XFx0XFx0XFx0XFx0ICovXFxuIDU3MzpcXHRcXHRcXHRcXHRpZiAoIWhpc3QgfHwgIShoaXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IElOU05fRl9TUkNfUkVHX1NUQUNLKSlcXG4gNTc0OlxcdFxcdFxcdFxcdFxcdGJ0X3NldF9yZWcoYnQsIHNyZWcpO1xcbiA1NzU6XFx0XFx0XFx0XFx0aWYgKCFoaXN0IHx8ICEoaGlzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJTlNOX0ZfRFNUX1JFR19TVEFDSykpXFxuIDU3NjpcXHRcXHRcXHRcXHRcXHRidF9zZXRfcmVnKGJ0LCBkcmVnKTtcXG4gNTc3OlxcdFxcdFxcdH0gZWxzZSBpZiAoQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfSykge1xcbiA1Nzg6XFx0XFx0XFx0XFx0IC8qIGRyZWcgXFx1MDAzY2NvbmRcXHUwMDNlIEtcXG4gNTc5OlxcdFxcdFxcdFxcdCAgKiBPbmx5IGRyZWcgc3RpbGwgbmVlZHMgcHJlY2lzaW9uIGJlZm9yZVxcbiA1ODA6XFx0XFx0XFx0XFx0ICAqIHRoaXMgaW5zbiwgc28gZm9yIHRoZSBLLWJhc2VkIGNvbmRpdGlvbmFsXFxuIDU4MTpcXHRcXHRcXHRcXHQgICogdGhlcmUgaXMgbm90aGluZyBuZXcgdG8gYmUgbWFya2VkLlxcbiA1ODI6XFx0XFx0XFx0XFx0ICAqL1xcbiA1ODM6XFx0XFx0XFx0fVxcbiA1ODQ6XFx0XFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfTEQpIHtcXG4gNTg1OlxcdFxcdFxcdC8qIEl0J3MgbGRfaW1tNjQgb3IgbGRfYWJzIG9yIGxkX2luZC5cXG4gNTg2OlxcdFxcdFxcdCAqIEZvciBsZF9pbW02NCBubyBmdXJ0aGVyIHRyYWNraW5nIG9mIHByZWNpc2lvblxcbiA1ODc6XFx0XFx0XFx0ICogaW50byBwYXJlbnQgaXMgbmVjZXNzYXJ5XFxuIDU4ODpcXHRcXHRcXHQgKi9cXG4gNTg5OlxcdFxcdFxcdGlmIChtb2RlID09IEJQRl9JTU0pIHtcXG4gNTkwOlxcdFxcdFxcdFxcdGJ0X2NsZWFyX3JlZyhidCwgZHJlZyk7XFxuIDU5MTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTkyOlxcdFxcdFxcdH1cXG4gNTkzOlxcdFxcdFxcdC8qXFxuIDU5NDpcXHRcXHRcXHQgKiBCUEZfe0lORCxBQlN9IGFyZSBtb2RlbGxlZCBhcyB0d28gYnJhbmNoZXM6XFxuIDU5NTpcXHRcXHRcXHQgKiAtIGZhbGx0aHJvdWdoO1xcbiA1OTY6XFx0XFx0XFx0ICogLSBpbXBsaWNpdCBzdWJwcm9ncmFtIGV4aXQuXFxuIDU5NzpcXHRcXHRcXHQgKiBJdCBpcyBuZWNlc3NhcnkgdG8gc3dpdGNoIGN1cnJlbnQgZnJhbWUgaWZcXG4gNTk4OlxcdFxcdFxcdCAqIGltcGxpY2l0IHN1YnByb2dyYW0gZXhpdCBicmFuY2ggaXMgYmFja3RyYWNrZWQuXFxuIDU5OTpcXHRcXHRcXHQgKi9cXG4gNjAwOlxcdFxcdFxcdGlmIChtb2RlID09IEJQRl9JTkQgfHwgbW9kZSA9PSBCUEZfQUJTKSB7XFxuIDYwMTpcXHRcXHRcXHRcXHRpZiAoYnRfaXNfcmVnX3NldChidCwgZHJlZykpXFxuIDYwMjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbiA2MDM6XFx0XFx0XFx0XFx0aWYgKHN1YnNlcV9pZHggIT0gaWR4ICsgMSlcXG4gNjA0OlxcdFxcdFxcdFxcdFxcdGlmIChidF9zdWJwcm9nX2VudGVyKGJ0KSlcXG4gNjA1OlxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA2MDY6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDYwNzpcXHRcXHRcXHR9XFxuIDYwODpcXHRcXHR9XFxuIDYwOTpcXHRcXHQvKiBQcm9wYWdhdGUgcHJlY2lzaW9uIG1hcmtzIHRvIGxpbmtlZCByZWdpc3RlcnMsIHRvIGFjY291bnQgZm9yXFxuIDYxMDpcXHRcXHQgKiByZWdpc3RlcnMgbWFya2VkIGFzIHByZWNpc2UgaW4gdGhpcyBmdW5jdGlvbi5cXG4gNjExOlxcdFxcdCAqL1xcbiA2MTI6XFx0XFx0YnBmX2J0X3N5bmNfbGlua2VkX3JlZ3MoYnQsIGhpc3QpO1xcbiA2MTM6XFx0XFx0cmV0dXJuIDA7XFxuIDYxNDpcXHR9XFxuIDYxNTpcXHRcXG4gNjE2OlxcdC8qIHRoZSBzY2FsYXIgcHJlY2lzaW9uIHRyYWNraW5nIGFsZ29yaXRobTpcXG4gNjE3OlxcdCAqIC4gYXQgdGhlIHN0YXJ0IGFsbCByZWdpc3RlcnMgaGF2ZSBwcmVjaXNlPWZhbHNlLlxcbiA2MTg6XFx0ICogLiBzY2FsYXIgcmFuZ2VzIGFyZSB0cmFja2VkIGFzIG5vcm1hbCB0aHJvdWdoIGFsdSBhbmQgam1wIGluc25zLlxcbiA2MTk6XFx0ICogLiBvbmNlIHByZWNpc2UgdmFsdWUgb2YgdGhlIHNjYWxhciByZWdpc3RlciBpcyB1c2VkIGluOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMDo0NjozOC40NDQ5ODY3MTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzE5NjU3NDQ4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBCYWNrdHJhY2tpbmcgQnVnIEZpeCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGJ1ZyBpbiB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBiYWNrdHJhY2tpbmcgd2hlbiBoYW5kbGluZyBlYXJseSBzdWJwcm9ncmFtIGV4aXRzLCBtb2RlbGVkIGZvciBgQlBGX0xEIHwgQlBGX0FCU2AgaW5zdHJ1Y3Rpb25zLCB3aGljaCB3YXMgbGVhZGluZyB0byBhIHNlZ2ZhdWx0LiBUaGUgY29tbWl0IGNvbW1lbnQgcG9pbnRzIG1lIHRvIHRoZSBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AgZmlsZSBhbmQgdGhlIGJhY2t0cmFja2luZyBhbGdvcml0aG0uXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBzZWVtcyB0byBiZSBob3cgdGhlIHZlcmlmaWVyIGhhbmRsZXMgcHJlY2lzaW9uIGR1cmluZyBiYWNrdHJhY2tpbmcsIHBhcnRpY3VsYXJseSB3aXRoIHRoZSBgQlBGX0xEYCBjbGFzcyBvZiBpbnN0cnVjdGlvbnMuIFRoZSBvcmlnaW5hbCBjb2RlJ3MgbG9naWMgaGVyZSB3YXMgcHJvYmxlbWF0aWMuIFdoZW4gZW5jb3VudGVyaW5nIGBCUEZfTERgIGluc3RydWN0aW9ucywgaXQgd291bGQgaGFuZGxlIGBsZF9pbW02NGAsIGBsZF9hYnNgLCBhbmQgYGxkX2luZGAgZGlmZmVyZW50bHkuIFRoZSBgbGRfaW1tNjRgIGNhc2Ugc2VlbWVkIGZpbmUsIGJ1dCB0aGUgaGFuZGxpbmcgb2YgYEJQRl9JTkRgIG9yIGBCUEZfQUJTYCBpbnN0cnVjdGlvbnMgaW52b2x2ZWQgY2xlYXJpbmcgcmVnaXN0ZXIgcHJlY2lzaW9uIGFuZCB0aGVuIHJldHVybmluZy5cblxuTm93LCB3aXRoIHRoaXMgcGF0Y2gsIHRoZXJlIGFyZSBzb21lIHNpZ25pZmljYW50IGNoYW5nZXMuIElmIHRoZSBpbnN0cnVjdGlvbiBpcyBgQlBGX0lNTWAsIHRoZSBjb2RlIHNpbXBseSBjbGVhcnMgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyJ3MgcHJlY2lzaW9uIGFuZCByZXR1cm5zLiBIb3dldmVyLCB3aXRoIGBCUEZfSU5EYCBvciBgQlBGX0FCU2AsIHRoZXJlJ3Mgbm93IGEgY2hlY2s6IGBpZiAoYnRfaXNfcmVnX3NldChidCwgZHJlZykpIHJldHVybiAtRU5PVFNVUFA7YC4gQWRkaXRpb25hbGx5LCB0aGVyZSdzIGEgY29uZGl0aW9uYWwgYGJ0X3N1YnByb2dfZW50ZXJgIGNhbGwgYmFzZWQgb24gYHN1YnNlcV9pZHhgIGFuZCBgaWR4YCwgdGhhdCBsb29rcyBwcmV0dHkgY3J1Y2lhbCwgYW5kIGlmIGl0IHN1Y2NlZWRzLCB0aGVyZSdzIGFuIGAtRUZBVUxUYCByZXR1cm4uIFRoaXMgbG9va3MgbGlrZSB0aGUgbWFpbiBjaGFuZ2UuXG5cblNvIHRoZSBtYWluIGNoYW5nZSBpcyB0aGF0IGJlZm9yZSwgdGhlcmUgd2FzIG5vIHByb3RlY3Rpb24gb2YgYSByZWdpc3RlciB0aGF0IG1pZ2h0IHN0aWxsIGJlIHNldC4gTm93IHRoZSBwYXRjaCBmaXJzdCBjaGVja3MgaWYgdGhlIHJlZ2lzdGVyIGlzIHNldCwgYW5kIGlmIGl0IGlzLCB0aGUgdmVyaWZpZXIgcmV0dXJucyB0aGF0IHRoaXMgaW5zdHJ1Y3Rpb24gdHlwZSBpcyBub3Qgc3VwcG9ydGVkLiBPdGhlcndpc2UsIGl0IGNvbmRpdGlvbmFsbHkgY2FsbHMgYGJ0X3N1YnByb2dfZW50ZXJgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGJ0X3N1YnByb2dfZW50ZXJgIGRvZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBiYWNrdHJhY2sgc3RydWN0dXJlIGFuZCBob3cgaXQncyB1c2VkLiBCYXNlZCBvbiB0aGVzZSBjaGFuZ2VzLCBJJ20gZ3Vlc3NpbmcgdGhpcyBwcmV2ZW50cyBwcmVtYXR1cmUgYmFja3RyYWNraW5nIGFuZCBhbGxvd3MgcHJvcGVyIHByZWNpc2lvbiB0cmFja2luZyB0aHJvdWdoIHN1YnByb2dyYW0gZXhpdHMsIHRodXMgYXZlcnRpbmcgdGhlIHNlZ2ZhdWx0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDU2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6NDUuNjQxNTY0Nzg5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk3MDYxMzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ0X3N1YnByb2dfZW50ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9iYWNrdHJhY2suYz0xNDI9c3RhdGljIGlubGluZSBib29sIGJ0X2lzX2ZyYW1lX3N0YWNrX2FyZ19zbG90X3NldChzdHJ1Y3QgYmFja3RyYWNrX3N0YXRlICpidCwgdTMyIGZyYW1lLCB1MzIgc2xvdClcXG4tLVxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtMTQ2LVxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmM6MTQ3OnN0YXRpYyBpbmxpbmUgaW50IGJ0X3N1YnByb2dfZW50ZXIoc3RydWN0IGJhY2t0cmFja19zdGF0ZSAqYnQpXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYy0xNDgte1xcbi0tXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYz0yNjU9c3RhdGljIGludCBiYWNrdHJhY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LCBpbnQgc3Vic2VxX2lkeCxcXG4tLVxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNTE4LVxcdFxcdFxcdCAgICBcXHUwMDI2XFx1MDAyNiBzdWJzZXFfaWR4IC0gaWR4ICE9IDEpIHtcXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jOjUxOTpcXHRcXHRcXHRcXHRpZiAoYnRfc3VicHJvZ19lbnRlcihidCkpXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYy01MjAtXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLS1cXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTU1NC1cXHRcXHRcXHRidF9jbGVhcl9yZWcoYnQsIEJQRl9SRUdfMCk7XFxua2VybmVsL2JwZi9iYWNrdHJhY2suYzo1NTU6XFx0XFx0XFx0aWYgKGJ0X3N1YnByb2dfZW50ZXIoYnQpKVxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtNTU2LVxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYy02MDMtXFx0XFx0XFx0aWYgKHN1YnNlcV9pZHggIT0gaWR4ICsgMSlcXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jOjYwNDpcXHRcXHRcXHRcXHRpZiAoYnRfc3VicHJvZ19lbnRlcihidCkpXFxua2VybmVsL2JwZi9iYWNrdHJhY2suYy02MDUtXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIwOjQ2OjQ3LjQzODY0MzA2MloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDI2ODA3ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHN0cnVjdHVyZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqRGl2aW5nIGludG8gYGJ0X3N1YnByb2dfZW50ZXJgKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBgYnRfc3VicHJvZ19lbnRlcmAgd2l0aGluIGBrZXJuZWwvYnBmL2JhY2t0cmFjay5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGNvbnNpZGVyIGl0cyByb2xlIGluIHRoZSBCUEYgYmFja3RyYWNrIG1lY2hhbmlzbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gY29udHJpYnV0ZXMgdG8gdHJhY2luZyBwcm9ncmFtIGV4ZWN1dGlvbiBhbmQgbWFuYWdpbmcgbmVzdGVkIGNhbGxzLiBXaGF0IGxldmVsIG9mIGRldGFpbCBkb2VzIGl0IHByb3ZpZGU/IERvZXMgaXQgc3RvcmUgcmVnaXN0ZXJzLCBwcm9ncmFtIGNvdW50ZXJzLCBvciBwZXJoYXBzIHRoZSBzdGFjayBmcmFtZSBvZiB0aGUgc3VicHJvZ3JhbSBpdCBpcyBlbnRlcmluZz8gVGhpbmtpbmcgYmFjayB0byBteSBleHBlcmllbmNlLCB0aGlzIGlzIGxpa2VseSBhIGNydWNpYWwgZnVuY3Rpb24gZm9yIGRlYnVnZ2luZyBhbmQgYW5hbHl6aW5nIEJQRiBwcm9ncmFtcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBjb21wbGV4LCBtdWx0aS1sYXllcmVkIGFwcGxpY2F0aW9ucy4gV2UgYXJlIHRhbGtpbmcgYWJvdXQgYmFja3RyYWNrLCBzbyB0aGlzIGNvZGUgaXMgc3VyZWx5IGNyaXRpY2FsIGZvciByZWNvdmVyeSBvciBlcnJvciBoYW5kbGluZy4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIGJhY2t0cmFjayBpbmZyYXN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGhvdyB0aGlzIHRpZXMgaW50byBhbnkgYXNzb2NpYXRlZCBzdGFjayBtYW5hZ2VtZW50IG9yIHN0YXRlIHNhdmluZy4gSXMgdGhlcmUgYW55IHBvdGVudGlhbCBvdmVyaGVhZCBmcm9tIHRoaXM/IEdpdmVuIHRoZSBwZXJmb3JtYW5jZS1jcml0aWNhbCBuYXR1cmUgb2YgQlBGLCB1bmRlcnN0YW5kaW5nIHRoZSBlZmZpY2llbmN5IG9mIHRoaXMgZnVuY3Rpb24gaXMgcGFyYW1vdW50LiBBbmQsIGNvbnNpZGVyaW5nIHRoZSBjb250ZXh0IG9mIGBiYWNrdHJhY2suY2AsIHRoaXMgY29kZSBpcyBwcm9iYWJseSBwcmV0dHkgaW1wb3J0YW50IHdoZW4gdGhlIHN5c3RlbSBlbmNvdW50ZXJzIGFuIGVycm9yIG9yIGEgcG90ZW50aWFsbHkgYmFkIHByb2dyYW0sIHdoaWNoIHdvdWxkIGFsbG93IGZvciBlYXNpZXIgZGVidWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzExLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6NTAuNDY1NDUyNzMyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2JhY2t0cmFjay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0NTpcXHR9XFxuIDE0NjpcXHRcXG4gMTQ3OlxcdHN0YXRpYyBpbmxpbmUgaW50IGJ0X3N1YnByb2dfZW50ZXIoc3RydWN0IGJhY2t0cmFja19zdGF0ZSAqYnQpXFxuIDE0ODpcXHR7XFxuIDE0OTpcXHRcXHRpZiAoYnQtXFx1MDAzZWZyYW1lID09IE1BWF9DQUxMX0ZSQU1FUyAtIDEpIHtcXG4gMTUwOlxcdFxcdFxcdHZlcmlmaWVyX2J1ZyhidC1cXHUwMDNlZW52LCBcXFwic3VicHJvZyBlbnRlciBmcm9tIGZyYW1lICVkXFxcIiwgYnQtXFx1MDAzZWZyYW1lKTtcXG4gMTUxOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAxNTI6XFx0XFx0fVxcbiAxNTM6XFx0XFx0YnQtXFx1MDAzZWZyYW1lKys7XFxuIDE1NDpcXHRcXHRyZXR1cm4gMDtcXG4gMTU1OlxcdH1cXG4gMTU2OlxcdFxcbiAxNTc6XFx0c3RhdGljIGlubGluZSBpbnQgYnRfc3VicHJvZ19leGl0KHN0cnVjdCBiYWNrdHJhY2tfc3RhdGUgKmJ0KVxcbiAxNTg6XFx0e1xcbiAxNTk6XFx0XFx0aWYgKGJ0LVxcdTAwM2VmcmFtZSA9PSAwKSB7XFxuIDE2MDpcXHRcXHRcXHR2ZXJpZmllcl9idWcoYnQtXFx1MDAzZWVudiwgXFxcInN1YnByb2cgZXhpdCBmcm9tIGZyYW1lIDBcXFwiKTtcXG4gMTYxOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAxNjI6XFx0XFx0fVxcbiAxNjM6XFx0XFx0YnQtXFx1MDAzZWZyYW1lLS07XFxuIDE2NDpcXHRcXHRyZXR1cm4gMDtcXG4gMTY1OlxcdH1cXG4gMTY2OlxcdFxcbiAxNjc6XFx0c3RhdGljIGlubGluZSB2b2lkIGJ0X2NsZWFyX2ZyYW1lX3JlZyhzdHJ1Y3QgYmFja3RyYWNrX3N0YXRlICpidCwgdTMyIGZyYW1lLCB1MzIgcmVnKVxcbiAxNjg6XFx0e1xcbiAxNjk6XFx0XFx0YnQtXFx1MDAzZXJlZ19tYXNrc1tmcmFtZV0gXFx1MDAyNj0gfigxIFxcdTAwM2NcXHUwMDNjIHJlZyk7XFxuIDE3MDpcXHR9XFxuIDE3MTpcXHRcXG4gMTcyOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBidF9zZXRfcmVnKHN0cnVjdCBiYWNrdHJhY2tfc3RhdGUgKmJ0LCB1MzIgcmVnKVxcbiAxNzM6XFx0e1xcbiAxNzQ6XFx0XFx0YnBmX2J0X3NldF9mcmFtZV9yZWcoYnQsIGJ0LVxcdTAwM2VmcmFtZSwgcmVnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6NTAuNDY1NTg1NDYyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzODMxMjAzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBmb3IgS01TQU4gaW4gdGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgYW5hbHlzaXMgb2YgdGhpcyBwYXRjaCwgZm9jdXNlZCBvbiBga2VybmVsL2JwZi9iYWNrdHJhY2suY2AgYW5kIGEgbmV3IEJQRiBzZWxmdGVzdCwgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSSdtIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBLTVNBTiBpc3N1ZXMg4oCTIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIOKAkyBhbmQgSSBkb24ndCBzZWUgYW55IGhlcmUuXG5cbkZpcnN0LCBJJ3ZlIGNoZWNrZWQgZm9yIGFueSBpbnRlcmFjdGlvbiB3aXRoIHVzZXIgc3BhY2UuIFRoZXJlJ3Mgbm90aGluZyBiZWluZyBzZW50IG91dCB0aGF0IGNvdWxkIGhhdmUgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZy4gTm90aGluZydzIGV4cG9zZWQgdmlhIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rLCBpb2N0bHMsIHNvY2tldCBvcHRpb25zIG9yIEJQRiBidWZmZXJzIHRoYXQgYXJlIHVuZGVyIHN1c3BpY2lvbi4gVGhlIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiB0aGUgYmFja3RyYWNraW5nIGxvZ2ljIOKAkyBgYnRgLCBgZHJlZ2AsIGBzdWJzZXFfaWR4YCwgYGlkeGAsIGV0Yy4g4oCTIGFyZSBhbGwgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSB2ZXJpZmllciBzdGF0ZSB0cmFja2luZywgc28gbm8gY29uY2VybnMgdGhlcmUuXG5cbk5leHQsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIGxhdGVyIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIEFuZCBjcml0aWNhbGx5LCB0aGlzIHBhdGNoIGRvZXNuJ3QgbWVzcyB3aXRoIGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgcGFydHMgb2YgYnVmZmVycy4gVGhpcyBpcyBhbGwgYWJvdXQgYmFja3RyYWNraW5nIHByZWNpc2lvbiB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllci5cblxuVGhlIGZpeCBpdHNlbGYgYWRkcmVzc2VzIGFuIGlzc3VlIGluIGhvdyB0aGUgYmFja3RyYWNraW5nIGhhbmRsZXMgZWFybHkgZXhpdHMgZnJvbSBzdWJwcm9ncmFtcy4gVGhlIHByb2JsZW0gd2FzIHRoYXQsIGZvciBgQlBGX0xEIHwgQlBGX0FCU2AgaW5zdHJ1Y3Rpb25zLCB0aGUgY2FsbCBmcmFtZXMgaW4gYGJhY2t0cmFja19zdGF0ZWAgKGBidC1cdTAwM2VmcmFtZWApIHdlcmVuJ3QgYmVpbmcgc3dpdGNoZWQgY29ycmVjdGx5IG9uIGVhcmx5IGV4aXQsIHdoaWNoIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHN0YXRlIGFuZCBwb3RlbnRpYWwgY3Jhc2hlcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gQnV0IHRoZSByZXN1bHRpbmcgcHJvYmxlbXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLlxuXG5UaGVyZWZvcmUsIHRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIHdvdWxkIGJlIGNvbXBsZXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHN1Y2ggYXMgS0FTQU4sIExPQ0tERVAuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHNpdHVhdGlvbiB3aGVyZSBgTmVlZHNLTVNBTj1mYWxzZWAgaXMgdGhlIHJpZ2h0IGNhbGwuIFRoZSBidWcsIGlmIGFueSwgd2lsbCBiZSBjYXVnaHQgYnkgS0FTQU4uXG5cbkknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgYW5kIGFtIHJlYWR5IHRvIGNsZWFybHkgYXJ0aWN1bGF0ZSB0aGUgS01TQU5SZWFzb25pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NzksIk91dHB1dFRva2VucyI6MTkyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjA6NDY6NTUuODQ4NzA4MTUyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgc2NhbGFyIHByZWNpc2lvbiBiYWNrdHJhY2tpbmcgbG9naWMgaW4gYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgIHRvIHByb3Blcmx5IHVwZGF0ZSB0aGUgc3VicHJvZ3JhbSBjYWxsIGZyYW1lIChgYnRfc3VicHJvZ19lbnRlcmApIHdoZW4gYmFja3RyYWNraW5nIHRoZSBpbXBsaWNpdCBlYXJseSBleGl0IHBhdGggb2YgYEJQRl9MRCB8IEJQRl9BQlNgIGFuZCBgQlBGX0xEIHwgQlBGX0lORGAgaW5zdHJ1Y3Rpb25zLiBcXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHZlcmlmaWVyIGJyYW5jaGVzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdGhzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gZnJhbWUgaW5kZXhpbmcgZXJyb3JzIG9yIHZlcmlmaWVyIHN0YXRlIGNvcnJ1cHRpb24gd291bGQgbWFuaWZlc3QgYXMgY29udHJvbCBmbG93IGZhdWx0cywgYXNzZXJ0aW9ucywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aGljaCBhcmUgYWxyZWFkeSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgc2NhbGFyIHByZWNpc2lvbiBiYWNrdHJhY2tpbmcgbG9naWMgaW4gYGtlcm5lbC9icGYvYmFja3RyYWNrLmNgIHRvIHByb3Blcmx5IHVwZGF0ZSB0aGUgc3VicHJvZ3JhbSBjYWxsIGZyYW1lIChgYnRfc3VicHJvZ19lbnRlcmApIHdoZW4gYmFja3RyYWNraW5nIHRoZSBpbXBsaWNpdCBlYXJseSBleGl0IHBhdGggb2YgYEJQRl9MRCB8IEJQRl9BQlNgIGFuZCBgQlBGX0xEIHwgQlBGX0lORGAgaW5zdHJ1Y3Rpb25zLiBcXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHZlcmlmaWVyIGJyYW5jaGVzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgbWVtb3J5IGluaXRpYWxpemF0aW9uIHBhdGhzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gZnJhbWUgaW5kZXhpbmcgZXJyb3JzIG9yIHZlcmlmaWVyIHN0YXRlIGNvcnJ1cHRpb24gd291bGQgbWFuaWZlc3QgYXMgY29udHJvbCBmbG93IGZhdWx0cywgYXNzZXJ0aW9ucywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aGljaCBhcmUgYWxyZWFkeSBkZXRlY3RlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowrvxwp[1] Phase: Succeeded StartedAt: 2026-09-02 20:47:06 +0000 UTC FinishedAt: 2026-09-02 20:47:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrvxwp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 20:47:06 +0000 UTC FinishedAt: 2026-09-02 20:47:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrvxwp[2] Phase: Succeeded StartedAt: 2026-09-02 20:47:06 +0000 UTC FinishedAt: 2026-09-03 00:30:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-02 20:47:06 +0000 UTC FinishedAt: 2026-09-03 00:30:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-02 20:47:06 +0000 UTC FinishedAt: 2026-09-02 20:47:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-02 20:47:06 +0000 UTC FinishedAt: 2026-09-02 20:47:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowrvxwp/series-workflowrvxwp-convert-artifact-506205793/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-02 20:47:17 +0000 UTC FinishedAt: 2026-09-02 21:06:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-02 20:47:17 +0000 UTC FinishedAt: 2026-09-02 21:06:02 +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:*57ca526c-47f1-4fbf-a1a2-74c09e2d300d,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-workflowrvxwp/series-workflowrvxwp-convert-artifact-506205793/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": "4327f02b-4575-460a-9418-ff288d77adef", "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-workflowrvxwp/series-workflowrvxwp-build-action-1592517519/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-02 20:47:17 +0000 UTC FinishedAt: 2026-09-02 21:05:52 +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:*57ca526c-47f1-4fbf-a1a2-74c09e2d300d,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-workflowrvxwp/series-workflowrvxwp-convert-artifact-506205793/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": "4327f02b-4575-460a-9418-ff288d77adef", "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-workflowrvxwp/series-workflowrvxwp-build-action-1592517519/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-02 21:06:02 +0000 UTC FinishedAt: 2026-09-02 21:06:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-02 21:06:02 +0000 UTC FinishedAt: 2026-09-02 21:06:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-02 21:06:02 +0000 UTC FinishedAt: 2026-09-02 21:06:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-02 21:06:02 +0000 UTC FinishedAt: 2026-09-02 21:06:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowrvxwp/series-workflowrvxwp-convert-artifact-3526473140/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-02 21:06:13 +0000 UTC FinishedAt: 2026-09-02 21:08:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-02 21:06:13 +0000 UTC FinishedAt: 2026-09-02 21:07:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4327f02b-4575-460a-9418-ff288d77adef,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-workflowrvxwp/series-workflowrvxwp-build-action-1592517519/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-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-02 21:08:06 +0000 UTC FinishedAt: 2026-09-02 21:08:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-02 21:08:06 +0000 UTC FinishedAt: 2026-09-02 21:08:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-02 21:08:06 +0000 UTC FinishedAt: 2026-09-02 21:26:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-02 21:08:06 +0000 UTC FinishedAt: 2026-09-02 21:26:41 +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:*57ca526c-47f1-4fbf-a1a2-74c09e2d300d,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-workflowrvxwp/series-workflowrvxwp-convert-artifact-3526473140/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": "f021a700-a14f-4e82-86cc-e7189b274371", "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-workflowrvxwp/series-workflowrvxwp-build-action-1115428736/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-02 21:08:06 +0000 UTC FinishedAt: 2026-09-02 21:26:31 +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:*57ca526c-47f1-4fbf-a1a2-74c09e2d300d,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-workflowrvxwp/series-workflowrvxwp-convert-artifact-3526473140/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": "f021a700-a14f-4e82-86cc-e7189b274371", "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-workflowrvxwp/series-workflowrvxwp-build-action-1115428736/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-02 21:26:41 +0000 UTC FinishedAt: 2026-09-02 21:26:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-02 21:26:41 +0000 UTC FinishedAt: 2026-09-02 21:26:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-02 21:26:41 +0000 UTC FinishedAt: 2026-09-02 21:28:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-02 21:26:41 +0000 UTC FinishedAt: 2026-09-02 21:28:26 +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:*f021a700-a14f-4e82-86cc-e7189b274371,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-workflowrvxwp/series-workflowrvxwp-build-action-1115428736/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-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-02 21:28:38 +0000 UTC FinishedAt: 2026-09-03 00:30:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-02 21:28:38 +0000 UTC FinishedAt: 2026-09-03 00:30:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*4327f02b-4575-460a-9418-ff288d77adef,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f021a700-a14f-4e82-86cc-e7189b274371,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-workflowrvxwp/series-workflowrvxwp-build-action-1592517519/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-workflowrvxwp/series-workflowrvxwp-build-action-1115428736/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-02 21:28:38 +0000 UTC FinishedAt: 2026-09-02 21:28:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-02 21:28:38 +0000 UTC FinishedAt: 2026-09-02 21:28:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrvxwp/series-workflowrvxwp-convert-artifact-4160868573/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-02 21:28:38 +0000 UTC FinishedAt: 2026-09-02 21:28:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-02 21:28:38 +0000 UTC FinishedAt: 2026-09-02 21:28:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-02 21:28:38 +0000 UTC FinishedAt: 2026-09-02 21:28:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-02 21:28:59 +0000 UTC FinishedAt: 2026-09-03 00:30:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrvxwp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_mark_chain_precision","bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ee0ea3a3-2d50-4009-9667-0e124ec7769c","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-02 21:28:59 +0000 UTC FinishedAt: 2026-09-03 00:29:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4327f02b-4575-460a-9418-ff288d77adef,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f021a700-a14f-4e82-86cc-e7189b274371,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-workflowrvxwp/series-workflowrvxwp-build-action-1592517519/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-workflowrvxwp/series-workflowrvxwp-build-action-1115428736/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-workflowrvxwp/series-workflowrvxwp-convert-artifact-4160868573/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,}