Name: series-workflowm6zft Phase: Succeeded StartedAt: 2026-08-27 23:20:25 +0000 UTC FinishedAt: 2026-08-28 00:08:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6zft[0] Phase: Succeeded StartedAt: 2026-08-27 23:20:25 +0000 UTC FinishedAt: 2026-08-27 23:27:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6zft[0].run-triage Phase: Succeeded StartedAt: 2026-08-27 23:20:25 +0000 UTC FinishedAt: 2026-08-27 23:27:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "series_id": "2e5eac11-f9fe-4075-bc4c-6d3503a7dedd" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "fixup_exception", "do_sea" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zml4dXBfZXhjZXB0aW9uJiMzNDssCiAgICAmIzM0O2RvX3NlYSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBkb19zZWEoKWAgaW4gYGFyY2gvYXJtNjQvbW0vZmF1bHQuY2AgdG8gYXR0ZW1wdCBleGNlcHRpb24gZml4dXAgdmlhIGBmaXh1cF9leGNlcHRpb24oKWAgd2hlbiBhIFN5bmNocm9ub3VzIEV4dGVybmFsIEFib3J0IChTRUEpIG9jY3VycyBpbiBrZXJuZWwgbW9kZSAoYCF1c2VyX21vZGUocmVncylgKSwgYWxsb3dpbmcgZ3JhY2VmdWwgcmVjb3ZlcnkgKGUuZy4sIHJldHVybmluZyAtRUZBVUxUIGZvciB1YWNjZXNzIGZhdWx0cykgaW5zdGVhZCBvZiBkeWluZy5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGxvdy1sZXZlbCBhcmNoaXRlY3R1cmUgZmF1bHQvZXhjZXB0aW9uIGhhbmRsaW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IG1vZGlmeSBkYXRhIHN0cnVjdHVyZSBmaWVsZHMgb3IgcGFkZGluZywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBpbml0aWFsaXphdGlvbiBsb2dpYywgYW5kIGRvZXMgbm90IGNvcHkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZS4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbGxvd3Mga2VybmVsLW1vZGUgc3luY2hyb25vdXMgZXh0ZXJuYWwgYWJvcnRzIChTRUEpIHRvIGJlIHJlY292ZXJlZCB1c2luZyBleGNlcHRpb24gZml4dXAgdGFibGVzIGluc3RlYWQgb2YgaW1tZWRpYXRlbHkgcGFuaWNraW5nLiBUaGlzIG1vZGlmaWVzIGNvcmUgQVJNNjQgZmF1bHQgaGFuZGxpbmcgbG9naWMgcmVhY2hhYmxlIGR1cmluZyBrZXJuZWwgbWVtb3J5IGFjY2Vzc2VzIHRoYXQgZmF1bHQgd2l0aCBTRUEuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmZGE3OGVmN2RjMGY4NDdmN2VmYTRhOTUyMTMyYTI5ODZlMjNlNDMxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMjM6MjQ6MDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9mYXVsdC5jIGIvYXJjaC9hcm02NC9tbS9mYXVsdC5jXG5pbmRleCAwYjUyNTU3NjUyYmU2Li5jYTM5NmI0YmRkYTAzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9tbS9mYXVsdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL2ZhdWx0LmNcbkBAIC04NzgsNiAmIzQzOzg3OCw5IEBAIHN0YXRpYyBpbnQgZG9fc2VhKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuJiM0MztcdGlmICghdXNlcl9tb2RlKHJlZ3MpIFx1MDAyNlx1MDAyNiBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdGlmIChlc3IgXHUwMDI2IEVTUl9FTHhfRm5WKSB7XG4gXHRcdHNpYWRkciA9IDA7XG4gXHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zml4dXBfZXhjZXB0aW9uJiMzNDssCiAgICAmIzM0O2RvX3NlYSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbGxvd3Mga2VybmVsLW1vZGUgc3luY2hyb25vdXMgZXh0ZXJuYWwgYWJvcnRzIChTRUEpIHRvIGJlIHJlY292ZXJlZCB1c2luZyBleGNlcHRpb24gZml4dXAgdGFibGVzIGluc3RlYWQgb2YgaW1tZWRpYXRlbHkgcGFuaWNraW5nLiBUaGlzIG1vZGlmaWVzIGNvcmUgQVJNNjQgZmF1bHQgaGFuZGxpbmcgbG9naWMgcmVhY2hhYmxlIGR1cmluZyBrZXJuZWwgbWVtb3J5IGFjY2Vzc2VzIHRoYXQgZmF1bHQgd2l0aCBTRUEuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmZGE3OGVmN2RjMGY4NDdmN2VmYTRhOTUyMTMyYTI5ODZlMjNlNDMxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjcgMjM6MjQ6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2ZhdWx0LmMgYi9hcmNoL2FybTY0L21tL2ZhdWx0LmMKaW5kZXggMGI1MjU1NzY1MmJlNi4uY2EzOTZiNGJkZGEwMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9mYXVsdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vZmF1bHQuYwpAQCAtODc4LDYgJiM0Mzs4NzgsOSBAQCBzdGF0aWMgaW50IGRvX3NlYSh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCQlyZXR1cm4gMDsKIAl9CiAKJiM0MzsJaWYgKCF1c2VyX21vZGUocmVncykgJmFtcDsmYW1wOyBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCWlmIChlc3IgJmFtcDsgRVNSX0VMeF9GblYpIHsKIAkJc2lhZGRyID0gMDsKIAl9IGVsc2Ugewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmF1bHQgSGFuZGxpbmcgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBkaWZmIHNob3dzIGEgY2hhbmdlIGluIGBhcmNoL2FybTY0L21tL2ZhdWx0LmNgLiBTcGVjaWZpY2FsbHksIHRoZXJlJiMzOTtzIGEgbmV3IGBpZmAgc3RhdGVtZW50IGludHJvZHVjZWQgaW4gdGhlIGBkb19zZWFgIGZ1bmN0aW9uLiBJIHJlY29nbml6ZSB0aGF0IGZ1bmN0aW9uIGFzIHJlbGF0ZWQgdG8gU3lzdGVtIEVycm9yIEFib3J0IChTRUEpIGhhbmRsaW5nIG9uIEFSTTY0LCBkZWFsaW5nIHdpdGggYXN5bmNocm9ub3VzIGFib3J0cy4gVGhlIGFkZGVkIGNvbmRpdGlvbiBjaGVja3MgaWYgdGhlIGV4Y2VwdGlvbiBpcyAqbm90KiBpbiB1c2VyIG1vZGUsIGFuZCB0aGVuIGNhbGxzIGBmaXh1cF9leGNlcHRpb25gIHdpdGggdGhlIHJlZ2lzdGVyIHN0YXRlIGFuZCBFU1IuIElmIGBmaXh1cF9leGNlcHRpb25gIHJldHVybnMgYSBub24temVybyB2YWx1ZSwgdGhlbiB0aGUgY29kZSByZXR1cm5zLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBgZml4dXBfZXhjZXB0aW9uYCBkb2VzLiBJdCBzZWVtcyBsaWtlIHRoZSBuZXcgY29kZSBpcyBhdHRlbXB0aW5nIHRvIGhhbmRsZSBrZXJuZWwgZXhjZXB0aW9ucy4gSSBzaG91bGQgYmUgYWJsZSB0byBkZWR1Y2UgdGhlIGdlbmVyYWwgaWRlYSwgYnV0IHNpbmNlIHRoaXMgZGVhbHMgd2l0aCBrZXJuZWwtbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGVycm9yIGhhbmRsaW5nLCBJIG5lZWQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuIEkmIzM5O2xsIGxvYWQgdGhlIGBhcmNoL2FybTY0L21tL2ZhdWx0LmNgIGZpbGUgZnJvbSB0aGUgc291cmNlIGFuZCBicm93c2UgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGVzcGVjaWFsbHkgbG9va2luZyBhdCB0aGUgZGVmaW5pdGlvbnMgb2YgYHVzZXJfbW9kZWAgYW5kIGBmaXh1cF9leGNlcHRpb25gLCBhbmQgYWxzbyBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGZhdWx0IGhhbmRsaW5nIGxvZ2ljLiBUaGlzIGFkZGl0aW9uIGRlZmluaXRlbHkgc3VnZ2VzdHMgYSBuZWVkIHRvIHBvdGVudGlhbGx5IGhhbmRsZSBvciBjb3JyZWN0IHNwZWNpZmljIGtlcm5lbCBleGNlcHRpb25zIGJlZm9yZSByZXNvcnRpbmcgdG8gYSBtb3JlIGRyYXN0aWMgZXJyb3IgaGFuZGxpbmcgcHJvY2VkdXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGVycm9ycyBpdCYjMzk7cyB0cnlpbmcgdG8gbWl0aWdhdGUsIGFuZCB3aHkgaXQgd2FzbiYjMzk7dCB0aGVyZSBiZWZvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL2FybTY0L21tL2ZhdWx0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg1MDpcdFxuIDg1MTpcdHN0YXRpYyBpbnQgZG9fYWxpZ25tZW50X2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcbiA4NTI6XHRcdFx0XHQgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiA4NTM6XHR7XG4gODU0Olx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ09NUEFUX0FMSUdOTUVOVF9GSVhVUFMpIFx1MDAyNlx1MDAyNlxuIDg1NTpcdFx0ICAgIGNvbXBhdF91c2VyX21vZGUocmVncykpXG4gODU2Olx0XHRcdHJldHVybiBkb19jb21wYXRfYWxpZ25tZW50X2ZpeHVwKGZhciwgcmVncyk7XG4gODU3Olx0XHRkb19iYWRfYXJlYShmYXIsIGVzciwgcmVncyk7XG4gODU4Olx0XHRyZXR1cm4gMDtcbiA4NTk6XHR9XG4gODYwOlx0XG4gODYxOlx0c3RhdGljIGludCBkb19iYWQodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiA4NjI6XHR7XG4gODYzOlx0XHRyZXR1cm4gMTsgLyogXCYjMzQ7ZmF1bHRcJiMzNDsgKi9cbiA4NjQ6XHR9XG4gODY1Olx0XG4gODY2Olx0c3RhdGljIGludCBkb19zZWEodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiA4Njc6XHR7XG4gODY4Olx0XHRjb25zdCBzdHJ1Y3QgZmF1bHRfaW5mbyAqaW5mO1xuIDg2OTpcdFx0dW5zaWduZWQgbG9uZyBzaWFkZHI7XG4gODcwOlx0XG4gODcxOlx0XHRpbmYgPSBlc3JfdG9fZmF1bHRfaW5mbyhlc3IpO1xuIDg3MjpcdFxuIDg3MzpcdFx0aWYgKHVzZXJfbW9kZShyZWdzKSBcdTAwMjZcdTAwMjYgYXBlaV9jbGFpbV9zZWEocmVncykgPT0gMCkge1xuIDg3NDpcdFx0XHQvKlxuIDg3NTpcdFx0XHQgKiBBUEVJIGNsYWltZWQgdGhpcyBhcyBhIGZpcm13YXJlLWZpcnN0IG5vdGlmaWNhdGlvbi5cbiA4NzY6XHRcdFx0ICogU29tZSBwcm9jZXNzaW5nIGRlZmVycmVkIHRvIHRhc2tfd29yayBiZWZvcmUgcmV0X3RvX3VzZXIoKS5cbiA4Nzc6XHRcdFx0ICovXG4gODc4Olx0XHRcdHJldHVybiAwO1xuIDg3OTpcdFx0fVxuIDg4MDpcdFxuIDg4MTpcdFx0aWYgKCF1c2VyX21vZGUocmVncykgXHUwMDI2XHUwMDI2IGZpeHVwX2V4Y2VwdGlvbihyZWdzLCBlc3IpKVxuIDg4MjpcdFx0XHRyZXR1cm4gMDtcbiA4ODM6XHRcbiA4ODQ6XHRcdGlmIChlc3IgXHUwMDI2IEVTUl9FTHhfRm5WKSB7XG4gODg1Olx0XHRcdHNpYWRkciA9IDA7XG4gODg2Olx0XHR9IGVsc2Uge1xuIDg4NzpcdFx0XHQvKlxuIDg4ODpcdFx0XHQgKiBUaGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmllcyB0aGF0IHRoZSB0YWcgYml0cyBvZiBGQVJfRUwxIGFyZVxuIDg4OTpcdFx0XHQgKiBVTktOT1dOIGZvciBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydHMuIE1hc2sgdGhlbSBvdXQgbm93XG4gODkwOlx0XHRcdCAqIHNvIHRoYXQgdXNlcnNwYWNlIGRvZXNuJiMzOTt0IHNlZSB0aGVtLlxuIDg5MTpcdFx0XHQgKi9cbiA4OTI6XHRcdFx0c2lhZGRyICA9IHVudGFnZ2VkX2FkZHIoZmFyKTtcbiA4OTM6XHRcdH1cbiA4OTQ6XHRcdGFkZF90YWludChUQUlOVF9NQUNISU5FX0NIRUNLLCBMT0NLREVQX1NUSUxMX09LKTtcbiA4OTU6XHRcdGFybTY0X25vdGlmeV9kaWUoaW5mLVx1MDAzZW5hbWUsIHJlZ3MsIGluZi1cdTAwM2VzaWcsIGluZi1cdTAwM2Vjb2RlLCBzaWFkZHIsIGVzcik7XG4gODk2Olx0XG4gODk3Olx0XHRyZXR1cm4gMDtcbiA4OTg6XHR9XG4gODk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQzMgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIENvZGUgQ2hhbmdlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UgYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpcyB0aGUgY29udGV4dC4gSSBzZWUgYGZpeHVwX2V4Y2VwdGlvbmAgYW5kIGBkb19zZWFgIG1lbnRpb25lZC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlaXIgcm9sZS4gQXJlIHdlIGZpeGluZyBhbiBleGNlcHRpb24gaGFuZGxpbmcgaXNzdWU/IElzIHRoaXMgcmVsYXRlZCB0byBzb21lIFNlYSBvYmplY3QgaW50ZXJhY3Rpb25zPyBXaGF0JiMzOTtzIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBhbHRlcmF0aW9uPwoKTXkgYnJhaW4mIzM5O3MgYWxyZWFkeSBmaXJpbmcgdXAgdGhlIHNlYXJjaCB0b29scy4gSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCwgaG93IHRoZXkmIzM5O3JlIHVzZWQsIGFuZCB3aGF0JiMzOTtzIGNoYW5nZWQgaW4gdGhlaXIgYmVoYXZpb3IuIEEgcXVpY2sgYGdyZXBgIGZvciBib3RoIGZ1bmN0aW9uIG5hbWVzIGFjcm9zcyB0aGUgY29kZWJhc2UgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcC4gVGhhdCBzaG91bGQgcHJvdmlkZSB0aGUgaW1tZWRpYXRlIGNvbnRleHQuIEhvcGVmdWxseSwgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCB0ZWxsIHRoZSBzdG9yeS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBncmVwIHJlc3VsdHMgdW5jb3Zlci4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX3NlYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rZXJuZWwvYWNwaS5jPTI5NT12b2lkIF9faW9tZW0gKmFjcGlfb3NfaW9yZW1hcChhY3BpX3BoeXNpY2FsX2FkZHJlc3MgcGh5cywgYWNwaV9zaXplIHNpemUpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvYWNwaS5jLTM4NS0gKlxuYXJjaC9hcm02NC9rZXJuZWwvYWNwaS5jOjM4NjogKiBVc2VkIGJ5IEtWTSBhbmQgdGhlIGFyY2ggZG9fc2VhIGhhbmRsZXIuXG5hcmNoL2FybTY0L2tlcm5lbC9hY3BpLmMtMzg3LSAqIEByZWdzIG1heSBiZSBOVUxMIHdoZW4gY2FsbGVkIGZyb20gcHJvY2VzcyBjb250ZXh0LlxuLS1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz04NjE9c3RhdGljIGludCBkb19iYWQodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtODY1LVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjg2NjpzdGF0aWMgaW50IGRvX3NlYSh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTg2Ny17XG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jPTkxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGZhdWx0X2luZm8gZmF1bHRfaW5mb1tdID0ge1xuLS1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05MzItXHR7IGRvX3BhZ2VfZmF1bHQsXHRTSUdTRUdWLCBTRUdWX0FDQ0VSUixcdFwmIzM0O2xldmVsIDMgcGVybWlzc2lvbiBmYXVsdFwmIzM0O1x0fSxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5MzM6XHR7IGRvX3NlYSxcdFx0U0lHQlVTLCAgQlVTX09CSkVSUixcdFwmIzM0O3N5bmNocm9ub3VzIGV4dGVybmFsIGFib3J0XCYjMzQ7XHR9LFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTkzNC1cdHsgZG9fdGFnX2NoZWNrX2ZhdWx0LFx0U0lHU0VHViwgU0VHVl9NVEVTRVJSLFx0XCYjMzQ7c3luY2hyb25vdXMgdGFnIGNoZWNrIGZhdWx0XCYjMzQ7XHR9LFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTkzNS1cdHsgZG9fYmFkLFx0XHRTSUdLSUxMLCBTSV9LRVJORUwsXHRcJiMzNDt1bmtub3duIDE4XCYjMzQ7XHRcdFx0fSxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5MzY6XHR7IGRvX3NlYSxcdFx0U0lHS0lMTCwgU0lfS0VSTkVMLFx0XCYjMzQ7bGV2ZWwgLTEgKHRyYW5zbGF0aW9uIHRhYmxlIHdhbGspXCYjMzQ7XHR9LFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjkzNzpcdHsgZG9fc2VhLFx0XHRTSUdLSUxMLCBTSV9LRVJORUwsXHRcJiMzNDtsZXZlbCAwICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVwmIzM0O1x0fSxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5Mzg6XHR7IGRvX3NlYSxcdFx0U0lHS0lMTCwgU0lfS0VSTkVMLFx0XCYjMzQ7bGV2ZWwgMSAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcJiMzNDtcdH0sXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTM5Olx0eyBkb19zZWEsXHRcdFNJR0tJTEwsIFNJX0tFUk5FTCxcdFwmIzM0O2xldmVsIDIgKHRyYW5zbGF0aW9uIHRhYmxlIHdhbGspXCYjMzQ7XHR9LFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjk0MDpcdHsgZG9fc2VhLFx0XHRTSUdLSUxMLCBTSV9LRVJORUwsXHRcJiMzNDtsZXZlbCAzICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVwmIzM0O1x0fSxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5NDE6XHR7IGRvX3NlYSxcdFx0U0lHQlVTLCAgQlVTX09CSkVSUixcdFwmIzM0O3N5bmNocm9ub3VzIHBhcml0eSBvciBFQ0MgZXJyb3JcJiMzNDsgfSxcdC8vIFJlc2VydmVkIHdoZW4gUkFTIGlzIGltcGxlbWVudGVkXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtOTQyLVx0eyBkb19iYWQsXHRcdFNJR0tJTEwsIFNJX0tFUk5FTCxcdFwmIzM0O3Vua25vd24gMjVcJiMzNDtcdFx0XHR9LFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTk0My1cdHsgZG9fYmFkLFx0XHRTSUdLSUxMLCBTSV9LRVJORUwsXHRcJiMzNDt1bmtub3duIDI2XCYjMzQ7XHRcdFx0fSxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5NDQ6XHR7IGRvX3NlYSxcdFx0U0lHS0lMTCwgU0lfS0VSTkVMLFx0XCYjMzQ7bGV2ZWwgLTEgc3luY2hyb25vdXMgcGFyaXR5IGVycm9yICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVwmIzM0O1x0fSxcdC8vIFJlc2VydmVkIHdoZW4gUkFTIGlzIGltcGxlbWVudGVkXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTQ1Olx0eyBkb19zZWEsXHRcdFNJR0tJTEwsIFNJX0tFUk5FTCxcdFwmIzM0O2xldmVsIDAgc3luY2hyb25vdXMgcGFyaXR5IGVycm9yICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVwmIzM0O1x0fSxcdC8vIFJlc2VydmVkIHdoZW4gUkFTIGlzIGltcGxlbWVudGVkXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTQ2Olx0eyBkb19zZWEsXHRcdFNJR0tJTEwsIFNJX0tFUk5FTCxcdFwmIzM0O2xldmVsIDEgc3luY2hyb25vdXMgcGFyaXR5IGVycm9yICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVwmIzM0O1x0fSxcdC8vIFJlc2VydmVkIHdoZW4gUkFTIGlzIGltcGxlbWVudGVkXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTQ3Olx0eyBkb19zZWEsXHRcdFNJR0tJTEwsIFNJX0tFUk5FTCxcdFwmIzM0O2xldmVsIDIgc3luY2hyb25vdXMgcGFyaXR5IGVycm9yICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVwmIzM0O1x0fSxcdC8vIFJlc2VydmVkIHdoZW4gUkFTIGlzIGltcGxlbWVudGVkXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTQ4Olx0eyBkb19zZWEsXHRcdFNJR0tJTEwsIFNJX0tFUk5FTCxcdFwmIzM0O2xldmVsIDMgc3luY2hyb25vdXMgcGFyaXR5IGVycm9yICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVwmIzM0O1x0fSxcdC8vIFJlc2VydmVkIHdoZW4gUkFTIGlzIGltcGxlbWVudGVkXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtOTQ5LVx0eyBkb19iYWQsXHRcdFNJR0tJTEwsIFNJX0tFUk5FTCxcdFwmIzM0O3Vua25vd24gMzJcJiMzNDtcdFx0XHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MTkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYGZpeHVwX2V4Y2VwdGlvbmAgaW4gdGhlIEFSTTY0IEV4Y2VwdGlvbiBIYW5kbGluZyBQYXRoKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcy4gVGhlIGNvbnRleHQgY2xlYXJseSBzdWdnZXN0cyBhIHBvdGVudGlhbCBleGNlcHRpb24gaGFuZGxpbmcgc2NlbmFyaW8gd2l0aGluIHRoZSBBUk02NCBhcmNoaXRlY3R1cmUsIGFuZCB0aGUgbWVudGlvbiBvZiBgZml4dXBfZXhjZXB0aW9uYCBpbW1lZGlhdGVseSBkaXJlY3RzIG15IGF0dGVudGlvbiB0b3dhcmRzIHRoZSBsaWtlbHkgZXhjZXB0aW9uIHRhYmxlIG1lY2hhbmlzbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBkZWZpbmVkIGFuZCB1c2VkLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSBgZml4dXBfZXhjZXB0aW9uYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBzdGFydCBpbiB0aGUgYGFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jYCBmaWxlIHNpbmNlIHRoZSBleHRlbnNpb24gdGFibGUgaXMgbGlrZWx5IHdoZXJlIHRoZSBmaXh1cCBpcyBpbXBsZW1lbnRlZC4gSWYgaXQmIzM5O3Mgbm90IHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIHdpZGVuIHRoZSBzZWFyY2guIEkgZXhwZWN0IHRoaXMgZnVuY3Rpb24gaGFzIGEgdmVyeSBzcGVjaWZpYyBwdXJwb3NlIHJlbGF0ZWQgdG8gdGhlIGNvbnRyb2wgZmxvdyBvciBkYXRhIHRoYXQgaXMgZXhwZWN0ZWQgdG8gZml4IGFuIGV4Y2VwdGlvbiB0aGF0IG9jY3VycmVkIGluIGEgc3BlY2lmaWMgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBleGNlcHRpb24gaGFuZGxpbmcgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBvbiBBUk02NC4gVGhlIGdvYWwgaXMgdG8gZWl0aGVyIGNvbmZpcm0gbXkgc3VzcGljaW9uIG9yIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNvcnJlY3QgZnVuY3Rpb24gZGVmaW5pdGlvbiBhbmQgdW5kZXJzdGFuZCBpdHMgb3ZlcmFsbCByb2xlIGluIGV4Y2VwdGlvbiBwcm9jZXNzaW5nLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBkaXNzZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpdHMgc3BlY2lmaWMgZnVuY3Rpb24gYW5kIGl0cyByZWxhdGlvbnNoaXBzIHRvIG90aGVyIGV4Y2VwdGlvbiBoYW5kbGluZyBmdW5jdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zml4dXBfZXhjZXB0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VmaS5oPTE2PWV4dGVybiB2b2lkIGVmaV9pbml0KHZvaWQpO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lZmkuaC0xNy1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWZpLmg6MTg6Ym9vbCBlZmlfcnVudGltZV9maXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGNvbnN0IGNoYXIgKm1zZyk7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VmaS5oLTE5LSNlbHNlXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lZmkuaD0yMj1zdGF0aWMgaW5saW5lXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VmaS5oOjIzOmJvb2wgZWZpX3J1bnRpbWVfZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBjb25zdCBjaGFyICptc2cpXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VmaS5oLTI0LXtcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2V4dGFibGUuaD00Mz1ib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXh0YWJsZS5oLTQ5LVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9leHRhYmxlLmg6NTA6Ym9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXNyKTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXh0YWJsZS5oLTUxLSNlbmRpZlxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2VmaS5jPTIyMD1hc21saW5rYWdlIGVmaV9zdGF0dXNfdCBfX2VmaV9ydF9hc21fcmVjb3Zlcih2b2lkKTtcbmFyY2gvYXJtNjQva2VybmVsL2VmaS5jLTIyMS1cbmFyY2gvYXJtNjQva2VybmVsL2VmaS5jOjIyMjpib29sIGVmaV9ydW50aW1lX2ZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgY29uc3QgY2hhciAqbXNnKVxuYXJjaC9hcm02NC9rZXJuZWwvZWZpLmMtMjIzLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMva3Byb2Jlcy5jPTMwMT1pbnQgX19rcHJvYmVzIGtwcm9iZV9mYXVsdF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgZnNyKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL3Byb2Jlcy9rcHJvYmVzLmMtMzEwLVx0ICogbXVzdCBiZSBsZWZ0IGFsb25lIGZvciB0aGUgbm9ybWFsIHBhZ2UgZmF1bHQgaGFuZGxlciwgaW5jbHVkaW5nXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMva3Byb2Jlcy5jOjMxMTpcdCAqIGZpeHVwX2V4Y2VwdGlvbi5cbmFyY2gvYXJtNjQva2VybmVsL3Byb2Jlcy9rcHJvYmVzLmMtMzEyLVx0ICovXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvdHJhcHMuYz00OTU9dm9pZCBkb19lbDFfYnRpKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVzcilcbmFyY2gvYXJtNjQva2VybmVsL3RyYXBzLmMtNDk2LXtcbmFyY2gvYXJtNjQva2VybmVsL3RyYXBzLmM6NDk3Olx0aWYgKGVmaV9ydW50aW1lX2ZpeHVwX2V4Y2VwdGlvbihyZWdzLCBcJiMzNDtCVEkgdmlvbGF0aW9uXCYjMzQ7KSkge1xuYXJjaC9hcm02NC9rZXJuZWwvdHJhcHMuYy00OTgtXHRcdHJlZ3MtXHUwMDNlcHN0YXRlIFx1MDAyNj0gflBTUl9CVFlQRV9NQVNLO1xuLS1cbmFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jPTY5PWV4X2hhbmRsZXJfbG9hZF91bmFsaWduZWRfemVyb3BhZChjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcbi0tXG5hcmNoL2FybTY0L21tL2V4dGFibGUuYy05NC1cbmFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jOjk1OmJvb2wgZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVzcilcbmFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jLTk2LXtcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9NDA1PXN0YXRpYyB2b2lkIF9fZG9fa2VybmVsX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlc3IsXG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTQxMy1cdCAqL1xuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjQxNDpcdGlmICghaXNfZWwxX2luc3RydWN0aW9uX2Fib3J0KGVzcikgXHUwMDI2XHUwMDI2IGZpeHVwX2V4Y2VwdGlvbihyZWdzLCBlc3IpKVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTQxNS1cdFx0cmV0dXJuO1xuLS1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy00NTAtXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6NDUxOlx0aWYgKGVmaV9ydW50aW1lX2ZpeHVwX2V4Y2VwdGlvbihyZWdzLCBtc2cpKVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTQ1Mi1cdFx0cmV0dXJuO1xuLS1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz04NjY9c3RhdGljIGludCBkb19zZWEodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtODgwLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjg4MTpcdGlmICghdXNlcl9tb2RlKHJlZ3MpIFx1MDAyNlx1MDAyNiBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSlcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy04ODItXHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNjYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBDb21taXQmIzM5O3MgUHVycG9zZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNvbW1pdCBiZXR0ZXIuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgR2l0IGhpc3RvcnkuIExldCBtZSBzdGFydCB3aXRoIHNvbWV0aGluZyBsaWtlIGBnaXQgbG9nIC0xYCDigJMgdGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgbW9zdCByZWNlbnQgY29tbWl0IGluZm9ybWF0aW9uLCByaWdodD8gT3IgbWF5YmUgSSYjMzk7bGwgZ28gZm9yIHRoZSBmdWxsIGhpc3RvcnksIGxvb2tpbmcgYXQgc2ltaWxhciBjb21taXRzIHRvIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aGF0KiB0aGlzIGNvbW1pdCBjaGFuZ2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouIENvbnRleHQgaXMgZXZlcnl0aGluZy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIHN1cnJvdW5kaW5nIGNpcmN1bXN0YW5jZXMuCgpBZnRlciByZXZpZXdpbmcgdGhlIGNvbW1pdCBsb2csIGxpbmUgOTUgaW4gYGFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jYCBpcyBjYWxsaW5nIHRvIG1lLiBUaGF0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMsIG9yIGF0IGxlYXN0IGEgcG9pbnQgb2YgaW50ZXJlc3QgdG8gZnVydGhlciBkZWx2ZSBpbnRvLiBTbywgbGV0JiMzOTtzIGdvIHJlYWQgdGhhdCBsaW5lLCBhbmQgZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGUgY29kZSBpcyBkb2luZyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL2FybTY0L21tL2V4dGFibGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcbiAgODE6XHRcdGRhdGEgPSAqKHVuc2lnbmVkIGxvbmcqKWFkZHI7XG4gIDgyOlx0XG4gIDgzOlx0I2lmbmRlZiBfX0FBUkNINjRFQl9fXG4gIDg0Olx0XHRkYXRhIFx1MDAzZVx1MDAzZT0gOCAqIG9mZnNldDtcbiAgODU6XHQjZWxzZVxuICA4NjpcdFx0ZGF0YSBcdTAwM2NcdTAwM2M9IDggKiBvZmZzZXQ7XG4gIDg3Olx0I2VuZGlmXG4gIDg4Olx0XG4gIDg5Olx0XHRwdF9yZWdzX3dyaXRlX3JlZyhyZWdzLCByZWdfZGF0YSwgZGF0YSk7XG4gIDkwOlx0XG4gIDkxOlx0XHRyZWdzLVx1MDAzZXBjID0gZ2V0X2V4X2ZpeHVwKGV4KTtcbiAgOTI6XHRcdHJldHVybiB0cnVlO1xuICA5MzpcdH1cbiAgOTQ6XHRcbiAgOTU6XHRib29sIGZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlc3IpXG4gIDk2Olx0e1xuICA5NzpcdFx0Y29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXg7XG4gIDk4Olx0XG4gIDk5Olx0XHRleCA9IHNlYXJjaF9leGNlcHRpb25fdGFibGVzKGluc3RydWN0aW9uX3BvaW50ZXIocmVncykpO1xuIDEwMDpcdFx0aWYgKCFleClcbiAxMDE6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDEwMjpcdFxuIDEwMzpcdFx0c3dpdGNoIChleC1cdTAwM2V0eXBlKSB7XG4gMTA0Olx0XHRjYXNlIEVYX1RZUEVfQlBGOlxuIDEwNTpcdFx0XHRyZXR1cm4gZXhfaGFuZGxlcl9icGYoZXgsIHJlZ3MpO1xuIDEwNjpcdFx0Y2FzZSBFWF9UWVBFX1VBQ0NFU1NfRVJSX1pFUk86XG4gMTA3Olx0XHRjYXNlIEVYX1RZUEVfS0FDQ0VTU19FUlJfWkVSTzpcbiAxMDg6XHRcdFx0cmV0dXJuIGV4X2hhbmRsZXJfdWFjY2Vzc19lcnJfemVybyhleCwgcmVncyk7XG4gMTA5Olx0XHRjYXNlIEVYX1RZUEVfVUFDQ0VTU19DUFk6XG4gMTEwOlx0XHRcdHJldHVybiBleF9oYW5kbGVyX3VhY2Nlc3NfY3B5KGV4LCByZWdzLCBlc3IpO1xuIDExMTpcdFx0Y2FzZSBFWF9UWVBFX0xPQURfVU5BTElHTkVEX1pFUk9QQUQ6XG4gMTEyOlx0XHRcdHJldHVybiBleF9oYW5kbGVyX2xvYWRfdW5hbGlnbmVkX3plcm9wYWQoZXgsIHJlZ3MpO1xuIDExMzpcdFx0fVxuIDExNDpcdFxuIDExNTpcdFx0QlVHKCk7XG4gMTE2Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDUzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogODQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3luY2hyb25vdXMgRXh0ZXJuYWwgQWJvcnQgSGFuZGxpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIGZ1enotd29ydGh5IGFuZCBob3cgaXQgZml0cyBpbnRvIFN5emthbGxlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgd2hhdCBgZG9fc2VhYCBpbiB0aGUga2VybmVsIGhhbmRsZXMsIHdoaWNoIGlzIHN5bmNocm9ub3VzIGV4dGVybmFsIGFib3J0cy4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCYjMzk7cyBkZWFsaW5nIHdpdGggY2FzZXMgbGlrZSBkYXRhIGFib3J0cywgaW5zdHJ1Y3Rpb24gYWJvcnRzIGxlYWRpbmcgdG8gU0VBcywgdHJhbnNsYXRpb24gdGFibGUgd2FsayBhYm9ydHMsIGFuZCwgY3J1Y2lhbGx5LCBrZXJuZWwgbWVtb3J5IGFjY2Vzc2VzICh0aGluayBgY29weV9mcm9tX3VzZXJgLCBgdWFjY2Vzc2AsIG9yIGBrYWNjZXNzYCkuIFByZXZpb3VzbHksIGl0IGxvb2tzIGxpa2UgaWYgdGhlcmUgd2FzIGFuIFNFQSBkdXJpbmcga2VybmVsIGV4ZWN1dGlvbiwgYGRvX3NlYWAgd291bGQganVzdCBwYW5pYyB0aHJvdWdoIGBhcm02NF9ub3RpZnlfZGllYCBhbmQgYGRpZSgpYC4KCk5vdywgdGhpcyBwYXRjaCBhZGRzIGEgY2hlY2sgd2l0aGluIGBkb19zZWFgIGZvciBleGNlcHRpb24gZml4dXBzOgoKYGBgYwoJaWYgKCF1c2VyX21vZGUocmVncykgJmFtcDsmYW1wOyBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSkKCQlyZXR1cm4gMDsKYGBgCgpUaGlzIGlzIGltcG9ydGFudCEgTm93LCBpZiBhbiBTRUEgKmR1cmluZyBrZXJuZWwgZXhlY3V0aW9uKiBoaXRzIGFuIGV4Y2VwdGlvbi10YWJsZSBwcm90ZWN0ZWQgbG9hZC9zdG9yZSwgYGZpeHVwX2V4Y2VwdGlvbigpYCBpcyBjYWxsZWQuIElmIHRoZXJlJiMzOTtzIGFuIGV4Y2VwdGlvbiB0YWJsZSBlbnRyeSwgYGZpeHVwX2V4Y2VwdGlvbigpYCBmaXhlcyB0aGUgaXNzdWUgYnkgc2V0dGluZyB0aGUgYHJlZ3MtJmd0O3BjYCB0byB0aGUgZml4dXAgaGFuZGxlciBhbmQgaGFuZGxpbmcgdGhlIGVycm9yIHJldHVybiwgYW5kIGBkb19zZWFgIGp1c3QgcmV0dXJucy4KCk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgYXNraW5nIG1lIHRvIGV2YWx1YXRlIHdoZXRoZXIgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiBzb21lIHNwZWNpZmljIGNyaXRlcmlhLiBMZXQgbWUgcmVjYXAgdGhvc2UgY3JpdGVyaWE6CgoqICAgKipOb3QgRnV6emFibGU6KiogRG9jdW1lbnRhdGlvbi9LY29uZmlnIGNoYW5nZXMsIGRlY29yYXRpdmUgY2hhbmdlcyAobG9nZ2luZy90cmFjZXBvaW50cyksIG51bWVyaWMgY29uc3RhbnRzL21hY3JvcyB0aGF0IGRvbiYjMzk7dCBjaGFuZ2UgZXhlY3V0aW9uLCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoL1NtYXJ0TklDL0dQVSBkcml2ZXJzIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSwgYW5kIHRlYXJkb3duIGNhbGxiYWNrcyBsaWtlIGAucmVtb3ZlYCwgYC5zaHV0ZG93bmAsIG9yIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoqICAgKipGdXp6YWJsZToqKiBJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsICphbmQqIEkgY2FuIHZlcmlmeSB0aGUgY29kZSBpcyByZWFjaGFibGUuCgpJZiBpdCAqaXMqIGZ1enphYmxlLCBJIG5lZWQgdG86CgoxLiAgSWRlbnRpZnkgZnVuY3Rpb25zIGZvciBgRm9jdXNTeW1ib2xzYCwgYXZvaWRpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIGZvY3VzaW5nIG9uIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4KMi4gIElkZW50aWZ5IHJlcXVpcmVkIGBDT05GSUdfYCBvcHRpb25zIGZvciB0ZXN0aW5nIGFuZCBwdXQgdGhlbSBpbiBgRW5hYmxlQ29uZmlnc2AuCgpTbywgaXQgc2VlbXMgdGhpcyBpcyByZWFjaGFibGUsIGJ1dCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlcjoKCkxldCYjMzk7cyBjaGVjayBgZG9fc2VhYCBpbiBgYXJjaC9hcm02NC9tbS9mYXVsdC5jYCB0byBzZWUgaG93IHRoZSBmYXVsdHMgYXJlIHJvdXRlZCBhbmQgd2hlcmUgdGhlIGZpeHVwcyBhcmUgY2FsbGVkLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBjYWxsIGBkb19zZWFgIGFuZCBob3cgYGZhdWx0X2luZm9gIGlzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZhdWx0X2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0zMDk9c3RydWN0IGt2bV9hcmNoIHtcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNDI4LVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjQyOTpzdHJ1Y3Qga3ZtX3ZjcHVfZmF1bHRfaW5mbyB7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNDMwLVx0dTY0IGVzcl9lbDI7XHRcdC8qIEh5cCBTeW5kcm9tIFJlZ2lzdGVyICovXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oPTg0Mz1zdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7XG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTg3My1cdC8qIEV4Y2VwdGlvbiBJbmZvcm1hdGlvbiAqL1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjg3NDpcdHN0cnVjdCBrdm1fdmNwdV9mYXVsdF9pbmZvIGZhdWx0O1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTg3NS1cbi0tXG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvZmF1bHQuaD02MD1zdGF0aWMgaW5saW5lIGJvb2wgX19ocGZhcl92YWxpZCh1NjQgZXNyKVxuLS1cbmFyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9mYXVsdC5oLTgxLVxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL2ZhdWx0Lmg6ODI6c3RhdGljIGlubGluZSBib29sIF9fZ2V0X2ZhdWx0X2luZm8odTY0IGVzciwgc3RydWN0IGt2bV92Y3B1X2ZhdWx0X2luZm8gKmZhdWx0KVxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL2ZhdWx0LmgtODMte1xuLS1cbmFyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zd2l0Y2guaD00MjA9c3RhdGljIGlubGluZSB2b2lkIF9fX2RlYWN0aXZhdGVfdHJhcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zd2l0Y2guaC00NDMtXG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmg6NDQ0OnN0YXRpYyBpbmxpbmUgYm9vbCBfX3BvcHVsYXRlX2ZhdWx0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oLTQ0NS17XG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmg6NDQ2Olx0cmV0dXJuIF9fZ2V0X2ZhdWx0X2luZm8odmNwdS1cdTAwM2VhcmNoLmZhdWx0LmVzcl9lbDIsIFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5mYXVsdCk7XG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmgtNDQ3LX1cbi0tXG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmg9ODM3PXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faHlwX2hhbmRsZV9tZW1vcnlfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zd2l0Y2guaC04Mzkte1xuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oOjg0MDpcdGlmICghX19wb3B1bGF0ZV9mYXVsdF9pbmZvKHZjcHUpKVxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oLTg0MS1cdFx0cmV0dXJuIHRydWU7XG4tLVxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvbWVtX3Byb3RlY3QuYz03NDg9dm9pZCBoYW5kbGVfaG9zdF9tZW1fYWJvcnQoc3RydWN0IGt2bV9jcHVfY29udGV4dCAqaG9zdF9jdHh0KVxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvbWVtX3Byb3RlY3QuYy03NDkte1xuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvbWVtX3Byb3RlY3QuYzo3NTA6XHRzdHJ1Y3Qga3ZtX3ZjcHVfZmF1bHRfaW5mbyBmYXVsdDtcbmFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL21lbV9wcm90ZWN0LmMtNzUxLVx0dTY0IGVzciwgYWRkcjtcbi0tXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9tZW1fcHJvdGVjdC5jLTc1My1cdGVzciA9IHJlYWRfc3lzcmVnX2VsMihTWVNfRVNSKTtcbmFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL21lbV9wcm90ZWN0LmM6NzU0Olx0aWYgKCFfX2dldF9mYXVsdF9pbmZvKGVzciwgXHUwMDI2ZmF1bHQpKSB7XG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9tZW1fcHJvdGVjdC5jLTc1NS1cdFx0Lypcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNDgtXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6NDk6c3RydWN0IGZhdWx0X2luZm8ge1xuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTUwLVx0aW50XHQoKmZuKSh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsXG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTU2LVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjU3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmF1bHRfaW5mbyBmYXVsdF9pbmZvW107XG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNTgtXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6NTk6c3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgZmF1bHRfaW5mbyAqZXNyX3RvX2ZhdWx0X2luZm8odW5zaWduZWQgbG9uZyBlc3IpXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNjAte1xuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjYxOlx0cmV0dXJuIGZhdWx0X2luZm8gJiM0MzsgKGVzciBcdTAwMjYgRVNSX0VMeF9GU0MpO1xuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTYyLX1cbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9OTg9c3RhdGljIHZvaWQgbWVtX2Fib3J0X2RlY29kZSh1bnNpZ25lZCBsb25nIGVzcilcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtMTEyLVx0cHJfYWxlcnQoXCYjMzQ7ICBGU0MgPSAweCUwMmx4OiAlc1xcblwmIzM0OywgKGVzciBcdTAwMjYgRVNSX0VMeF9GU0MpLFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjExMzpcdFx0IGVzcl90b19mYXVsdF9pbmZvKGVzciktXHUwMDNlbmFtZSk7XG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtMTE0LVxuLS1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz01MTQ9c3RhdGljIHZvaWQgZG9fYmFkX2FyZWEodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLFxuLS1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy01MjMtXHRpZiAodXNlcl9tb2RlKHJlZ3MpKSB7XG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6NTI0Olx0XHRjb25zdCBzdHJ1Y3QgZmF1bHRfaW5mbyAqaW5mID0gZXNyX3RvX2ZhdWx0X2luZm8oZXNyKTtcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy01MjUtXG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jPTYwMT1zdGF0aWMgaW50IF9fa3Byb2JlcyBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNjAzLXtcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo2MDQ6XHRjb25zdCBzdHJ1Y3QgZmF1bHRfaW5mbyAqaW5mO1xuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTYwNS1cdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNzk0LVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjc5NTpcdGluZiA9IGVzcl90b19mYXVsdF9pbmZvKGVzcik7XG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNzk2LVx0c2V0X3RocmVhZF9lc3IoYWRkciwgZXNyKTtcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9ODY2PXN0YXRpYyBpbnQgZG9fc2VhKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtODY3LXtcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo4Njg6XHRjb25zdCBzdHJ1Y3QgZmF1bHRfaW5mbyAqaW5mO1xuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTg2OS1cdHVuc2lnbmVkIGxvbmcgc2lhZGRyO1xuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTg3MC1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo4NzE6XHRpbmYgPSBlc3JfdG9fZmF1bHRfaW5mbyhlc3IpO1xuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTg3Mi1cbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9OTAwPXN0YXRpYyBpbnQgZG9fdGFnX2NoZWNrX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtOTE1LVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjkxNjpzdGF0aWMgY29uc3Qgc3RydWN0IGZhdWx0X2luZm8gZmF1bHRfaW5mb1tdID0ge1xuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTkxNy1cdHsgZG9fYmFkLFx0XHRTSUdLSUxMLCBTSV9LRVJORUwsXHRcJiMzNDt0dGJyIGFkZHJlc3Mgc2l6ZSBmYXVsdFwmIzM0O1x0fSxcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9OTgzPXZvaWQgZG9fbWVtX2Fib3J0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtOTg0LXtcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5ODU6XHRjb25zdCBzdHJ1Y3QgZmF1bHRfaW5mbyAqaW5mID0gZXNyX3RvX2ZhdWx0X2luZm8oZXNyKTtcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05ODYtXHR1bnNpZ25lZCBsb25nIGFkZHIgPSB1bnRhZ2dlZF9hZGRyKGZhcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjM4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IHF1ZXJ5LCBhcyBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBkb19tZW1fYWJvcnRgIENhbGxlcnMgaW4gQVJNNjQqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIGBkb19tZW1fYWJvcnRgIGluIHRoZSBBUk02NCBhcmNoaXRlY3R1cmUuIFRoYXQgZnVuY3Rpb24gaXMgcHJldHR5IGNyaXRpY2FsIOKAkyBpdCBoYW5kbGVzIHRob3NlIG1lbW9yeSBhYm9ydCBleGNlcHRpb25zLCB3aGljaCBhcmUgdXN1YWxseSBhIHNpZ24gb2Ygc29tZXRoaW5nIGdvaW5nIHdyb25nLiBTbywgSSBuZWVkIHRvIGtub3cgKndoYXQqJiMzOTtzIGNhbGxpbmcgaXQgdG8gZGlhZ25vc2UgdGhlIHNvdXJjZSBvZiBwb3RlbnRpYWwgbWVtb3J5IGlzc3Vlcy4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIHplcm8gaW4gb24gdGhlIGRpcmVjdCBjYWxscy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGdyZXAgdGhlIGBhcmNoL2FybTY0YCBkaXJlY3RvcnkgZm9yIHRoZSBmdW5jdGlvbiBuYW1lIGBkb19tZW1fYWJvcnRgLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgbGlzdCBvZiBhbGwgdGhlIGZpbGVzIGFuZCBsaW5lcyBvZiBjb2RlIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgaW52b2tlZC4gVGhhdCYjMzk7bGwgYmUgbXkgc3RhcnRpbmcgcG9pbnQgdG8gZXhhbWluZSB0aGUgY2FsbCBzaXRlcyBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHByb3ZpZGluZyB0aGUgbmVjZXNzYXJ5IGNvbnRleHQuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gd29yayBiYWNrd2FyZCwgdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBmbG93IGFuZCBpbnZlc3RpZ2F0ZSBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gVGhlbiwgSSBjYW4gc3RhcnQgbG9va2luZyBhdCBhcmd1bWVudHMsIGNvbnRleHQgYW5kIGxpa2VseSBjdWxwcml0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fbWVtX2Fib3J0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2luY2x1ZGUvYXNtL2V4Y2VwdGlvbi5oPTUzPWFzbWxpbmthZ2Ugdm9pZCBhc21fZXhpdF90b191c2VyX21vZGUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9leGNlcHRpb24uaC01NC1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXhjZXB0aW9uLmg6NTU6dm9pZCBkb19tZW1fYWJvcnQodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2V4Y2VwdGlvbi5oLTU2LXZvaWQgZG9fZWwwX3VuZGVmKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVzcik7XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvZW50cnktY29tbW9uLmM9MzE1PXN0YXRpYyB2b2lkIG5vaW5zdHIgZWwxX2Fib3J0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVzcilcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9lbnRyeS1jb21tb24uYy0zMjEtXHRsb2NhbF9kYWlmX2luaGVyaXQocmVncyk7XG5hcmNoL2FybTY0L2tlcm5lbC9lbnRyeS1jb21tb24uYzozMjI6XHRkb19tZW1fYWJvcnQoZmFyLCBlc3IsIHJlZ3MpO1xuYXJjaC9hcm02NC9rZXJuZWwvZW50cnktY29tbW9uLmMtMzIzLVx0YXJtNjRfZXhpdF90b19rZXJuZWxfbW9kZShyZWdzLCBzdGF0ZSk7XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvZW50cnktY29tbW9uLmM9NTQ2PXN0YXRpYyB2b2lkIG5vaW5zdHIgZWwwX2RhKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVzcilcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9lbnRyeS1jb21tb24uYy01NTEtXHRsb2NhbF9kYWlmX3Jlc3RvcmUoREFJRl9QUk9DQ1RYKTtcbmFyY2gvYXJtNjQva2VybmVsL2VudHJ5LWNvbW1vbi5jOjU1MjpcdGRvX21lbV9hYm9ydChmYXIsIGVzciwgcmVncyk7XG5hcmNoL2FybTY0L2tlcm5lbC9lbnRyeS1jb21tb24uYy01NTMtXHRhcm02NF9leGl0X3RvX3VzZXJfbW9kZShyZWdzKTtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9lbnRyeS1jb21tb24uYz01NTY9c3RhdGljIHZvaWQgbm9pbnN0ciBlbDBfaWEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXNyKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2VudHJ5LWNvbW1vbi5jLTU2OS1cdGxvY2FsX2RhaWZfcmVzdG9yZShEQUlGX1BST0NDVFgpO1xuYXJjaC9hcm02NC9rZXJuZWwvZW50cnktY29tbW9uLmM6NTcwOlx0ZG9fbWVtX2Fib3J0KGZhciwgZXNyLCByZWdzKTtcbmFyY2gvYXJtNjQva2VybmVsL2VudHJ5LWNvbW1vbi5jLTU3MS1cdGFybTY0X2V4aXRfdG9fdXNlcl9tb2RlKHJlZ3MpO1xuLS1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz05MTY9c3RhdGljIGNvbnN0IHN0cnVjdCBmYXVsdF9pbmZvIGZhdWx0X2luZm9bXSA9IHtcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtOTgyLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjk4Mzp2b2lkIGRvX21lbV9hYm9ydCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTk4NC17XG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTEwMDAtfVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjEwMDE6Tk9LUFJPQkVfU1lNQk9MKGRvX21lbV9hYm9ydCk7XG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtMTAwMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2OTcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEV4Y2VwdGlvbiBIYW5kbGluZyBpbiBBUk02NCBLZXJuZWwgTWVtb3J5IEFjY2VzcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGlkZW50aWZ5IGtleSBmdW5jdGlvbnMgZm9yIGZ1enppbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbWVtb3J5IGFjY2VzcyBleGNlcHRpb25zIG9uIEFSTTY0LiBUaGUgY29udGV4dCBpcyBhbiBFTDEgYWJvcnQsIHdoZXJlIGtlcm5lbCBjb2RlIGFjY2Vzc2luZyBtZW1vcnkgdHJpZ2dlcnMgYSBzeW5jaHJvbm91cyBhYm9ydC4gVGhpcyBjYW4gc3RlbSBmcm9tIGBjb3B5X2Zyb21fdXNlcmAsIGV4Y2VwdGlvbi1oYW5kbGVkIGxvYWRzL3N0b3Jlcywgb3Igb3RoZXIgb3BlcmF0aW9ucy4KClRoZSBmbG93IGlzOiBgZWwxX2Fib3J0YCAtJmd0OyBgZG9fbWVtX2Fib3J0YCAtJmd0OyBgaW5mLSZndDtmbihmYXIsIGVzciwgcmVncylgLiBDcml0aWNhbGx5LCBpZiBpdCYjMzk7cyBhIHBhZ2UgZmF1bHQsIGBkb19wYWdlX2ZhdWx0YCBraWNrcyBpbi4gS2VybmVsLW1vZGUgcGFnZSBmYXVsdHMgZXZlbnR1YWxseSBsZWFkIHRvIGBfX2RvX2tlcm5lbF9mYXVsdGAgYW5kIGBmaXh1cF9leGNlcHRpb25gLgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgYml0OiBTeW5jaHJvbm91cyBFeHRlcm5hbCBBYm9ydHMgKFNFQSkgd2l0aCBGU0MgPSAweDEwIChvciB0cmFuc2xhdGlvbiB0YWJsZSB3YWxrIFNFQXMpIGFyZSBoYW5kbGVkIGJ5IGBkb19zZWFgLiAgUHJldmlvdXNseSwgYGRvX3NlYWAgb25seSBoYWQgYSBjaGVjayBmb3IgdXNlciBtb2RlIGFuZCBBUEVJIGNsYWltcy4gTm93LCB0aGVyZSBpcyBhIGNoZWNrIG9uIG5vbi11c2VyIG1vZGUgZXhlY3V0aW9uIGFuZCBgZml4dXBfZXhjZXB0aW9uYCBpcyBjYWxsZWQuCgpUaGUga2V5IHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZSBpbiBRRU1VLCBHQ0UsIG9yIGZ1enppbmc/IFllcywgb24gQVJNNjQsIGFueSBFTDEgYWJvcnQgdHJpZ2dlcmluZyBTRUEgb24gYW4gYWRkcmVzcyBhY2Nlc3NlZCB3aXRoIGZpeHVwIGhhbmRsZXJzICh0aGluayB1YWNjZXNzIG9uIGFuIHVubWFwcGVkIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3Mgb3IgU0VBIGluamVjdGlvbiB2aWEgUENJZS9kZXZtZW0sIGV0Yy4pIHdpbGwgZXhlY3V0ZSB0aGlzIG5ldyBwYXRoOiBgZG9fc2VhYCAtJmd0OyBgZml4dXBfZXhjZXB0aW9uYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBmb2N1czogZXhjZXB0aW9uIGhhbmRsaW5nIGZvciBrZXJuZWwgbWVtb3J5IGFjY2Vzc2VzIQoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBvbiBGb2N1c1N5bWJvbHMuIEkga25vdyBJIHdhbnQgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIGBkb19tZW1fYWJvcnRgIGhhbmRsZXMgYWxsIGRhdGEgYW5kIGluc3RydWN0aW9uIGFib3J0cyAocGFnZSBmYXVsdHMsIGV0Yy4pIHNvIHRoYXQmIzM5O3MgYSAqdmVyeSogZ2VuZXJpYyBoYW5kbGVyLiBUaGlzIGlzbiYjMzk7dCB0aGUgZnVuY3Rpb24gSSYjMzk7bSBsb29raW5nIGZvci4KCmBkb19zZWFgIGlzIHN0YXRpYyBpbiBgZmF1bHQuY2AsIGFuZCBJJiMzOTttIGF3YXJlIHRoYXQgc3RhdGljIGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIHBvdGVudGlhbGx5IG1ha2luZyB0aGVtIGxlc3Mgc3VpdGFibGUgZm9yIGRpcmVjdCBmdXp6aW5nIHRhcmdldHMgaWYgdGhleSBsYWNrIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIEhvd2V2ZXIsIGJlY2F1c2UgYGRvX3NlYWAgaXMgaW4gdGhlIGBmYXVsdF9pbmZvYCB0YWJsZSwgaXQgaXMgbm90IGlubGluZWQgYW5kIGhhcyBhbiBhc3NvY2lhdGVkIHN5bWJvbC4KCmBmaXh1cF9leGNlcHRpb25gIGxvb2tzIHByb21pc2luZzogaXQmIzM5O3Mgbm90IGEgZ2VuZXJpYyBob3QgcGF0aC4gSXQgaXMgb25seSBjYWxsZWQgd2hlbiBhbiBleGNlcHRpb24vZmF1bHQgaGFwcGVucyBpbiBrZXJuZWwgbW9kZS4gQWxzbywgSSBzZWUgaXQmIzM5O3MgZGVmaW5lZCBpbiBgYXJjaC9hcm02NC9tbS9leHRhYmxlLmNgLCBhbmQgZGVjbGFyZWQgaW4gYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXh0YWJsZS5oYC4gIFRoaXMgaXMgb25seSB0cmlnZ2VyZWQgZm9yIEVMMSBleGNlcHRpb25zIChrZXJuZWwgbW9kZSBmYXVsdHMpLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gYEZvY3VzU3ltYm9sc2AuCgpJIHJldmlld2VkIHRoZSBjb2RlIGFyb3VuZCBgZG9fc2VhYC4gVGhlcmUgYXJlIG5vIGNvbmRpdGlvbmFsIGNvbXBpbGVzLiBUaGUgY29kZSBpcyBhbHdheXMgYnVpbHQgd2l0aCBgQ09ORklHX0FSTTY0PXlgLgoKVGhlcmVmb3JlLCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZSBgZG9fc2VhYCBhbmQgYGZpeHVwX2V4Y2VwdGlvbmAgYXMgdGhlc2UgYXJlIGJvdGggc3BlY2lmaWMgYW5kIGFyZSBub3QgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIEhvd2V2ZXIsIGBkb19tZW1fYWJvcnRgIGlzIGRlZmluaXRlbHkgTk9UIHRoZSBmb2N1cyBhcyBpdCBpcyB0b28gZ2VuZXJpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmF1bHQubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnPTEyNzM9Y29uZmlnIEZVSklUU1VfRVJSQVRVTV8wMTAwMDFcbi0tXG5hcmNoL2FybTY0L0tjb25maWctMTI3OS1cdCAgYWNjZXNzZXMgbWF5IGNhdXNlIHVuZGVmaW5lZCBmYXVsdCAoRGF0YSBhYm9ydCwgREZTQz0wYjExMTExMSkuXG5hcmNoL2FybTY0L0tjb25maWc6MTI4MDpcdCAgVGhpcyBmYXVsdCBvY2N1cnMgdW5kZXIgYSBzcGVjaWZpYyBoYXJkd2FyZSBjb25kaXRpb24gd2hlbiBhXG5hcmNoL2FybTY0L0tjb25maWctMTI4MS1cdCAgbG9hZC9zdG9yZSBpbnN0cnVjdGlvbiBwZXJmb3JtcyBhbiBhZGRyZXNzIHRyYW5zbGF0aW9uIHVzaW5nOlxuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvYWxsd2lubmVyL3N1bjUwaS1oNjQtcmVtaXgtbWluaS1wYy5kdHM9MjM1PVx1MDAyNnJlZ19kY2RjNSB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9hbGx3aW5uZXIvc3VuNTBpLWg2NC1yZW1peC1taW5pLXBjLmR0cy0yNDEtXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2FsbHdpbm5lci9zdW41MGktaDY0LXJlbWl4LW1pbmktcGMuZHRzOjI0MjovKiBEZXZpYXRlcyBmcm9tIHRoZSByZXNldCBkZWZhdWx0IG9mIDEuMVYuICovXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2FsbHdpbm5lci9zdW41MGktaDY0LXJlbWl4LW1pbmktcGMuZHRzLTI0My1cdTAwMjZyZWdfZGNkYzYge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1neGwtczkwNXgta2hhZGFzLXZpbS5kdHM9NDg9XHRcdGxlZC0xIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2FtbG9naWMvbWVzb24tZ3hsLXM5MDV4LWtoYWRhcy12aW0uZHRzLTUxLVx0XHRcdG1heC1icmlnaHRuZXNzID0gXHUwMDNjMjU1XHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9hbWxvZ2ljL21lc29uLWd4bC1zOTA1eC1raGFkYXMtdmltLmR0czo1MjpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9hbWxvZ2ljL21lc29uLWd4bC1zOTA1eC1raGFkYXMtdmltLmR0cy01My1cdFx0fTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2FtbG9naWMvbWVzb24tZ3htLWtoYWRhcy12aW0yLmR0cz04OD1cdFx0bGVkLTEge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1neG0ta2hhZGFzLXZpbTIuZHRzLTkxLVx0XHRcdG1heC1icmlnaHRuZXNzID0gXHUwMDNjMjU1XHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9hbWxvZ2ljL21lc29uLWd4bS1raGFkYXMtdmltMi5kdHM6OTI6XHRcdFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXCYjMzQ7ZGVmYXVsdC1vblwmIzM0OztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1neG0ta2hhZGFzLXZpbTIuZHRzLTkzLVx0XHR9O1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1saWJyZXRlY2gtY290dG9ud29vZC5kdHNpPTgxPVx0XHRsZWQge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1saWJyZXRlY2gtY290dG9ud29vZC5kdHNpLTgzLVx0XHRcdGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX1NUQVRVUztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1saWJyZXRlY2gtY290dG9ud29vZC5kdHNpOjg0Olx0XHRcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFwmIzM0O2RlZmF1bHQtb25cJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2FtbG9naWMvbWVzb24tbGlicmV0ZWNoLWNvdHRvbndvb2QuZHRzaS04NS1cdFx0XHRtYXgtYnJpZ2h0bmVzcyA9IFx1MDAzYzI1NVx1MDAzZTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2FtbG9naWMvbWVzb24tc20xLXNlaTYxMC5kdHM9MTE2PVx0XHRsZWQtMiB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9hbWxvZ2ljL21lc29uLXNtMS1zZWk2MTAuZHRzLTExOS1cdFx0XHRtYXgtYnJpZ2h0bmVzcyA9IFx1MDAzYzI1NVx1MDAzZTtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1zbTEtc2VpNjEwLmR0czoxMjA6XHRcdFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXCYjMzQ7ZGVmYXVsdC1vblwmIzM0OztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1zbTEtc2VpNjEwLmR0cy0xMjEtXHRcdFx0YWN0aXZlLWxvdztcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2Jyb2FkY29tL2JjbWJjYS9iY200OTA2LXp5eGVsLWV4MzUxMGIuZHRzPTcwPVx0bGVkQGEge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvYnJvYWRjb20vYmNtYmNhL2JjbTQ5MDYtenl4ZWwtZXgzNTEwYi5kdHMtNzMtXHRcdGNvbG9yID0gXHUwMDNjTEVEX0NPTE9SX0lEX0dSRUVOXHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9icm9hZGNvbS9iY21iY2EvYmNtNDkwNi16eXhlbC1leDM1MTBiLmR0czo3NDpcdFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXCYjMzQ7ZGVmYXVsdC1vblwmIzM0OztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYnJvYWRjb20vYmNtYmNhL2JjbTQ5MDYtenl4ZWwtZXgzNTEwYi5kdHMtNzUtXHR9O1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2ZzbC1sczEwMTJhLXRxbWxzMTAxMmFsLW1ibHMxMDEyYWwuZHRzPTcwPVx0XHRsZWQtMSB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvZnNsLWxzMTAxMmEtdHFtbHMxMDEyYWwtbWJsczEwMTJhbC5kdHMtNzMtXHRcdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvX2V4cF8zcDN2IDE1IEdQSU9fQUNUSVZFX0xPV1x1MDAzZTtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2ZzbC1sczEwMTJhLXRxbWxzMTAxMmFsLW1ibHMxMDEyYWwuZHRzOjc0Olx0XHRcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFwmIzM0O2RlZmF1bHQtb25cJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9mc2wtbHMxMDEyYS10cW1sczEwMTJhbC1tYmxzMTAxMmFsLmR0cy03NS1cdFx0fTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9mc2wtbHMxMDI4YS1rb250cm9uLWtib3gtYS0yMzAtbHMuZHRzPTMwPVx0XHRwb3dlci1sZWQge1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvZnNsLWxzMTAyOGEta29udHJvbi1rYm94LWEtMjMwLWxzLmR0czozMTpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvZnNsLWxzMTAyOGEta29udHJvbi1rYm94LWEtMjMwLWxzLmR0cy0zMi1cdFx0XHRmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9QT1dFUjtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9mc2wtbHMxMDI4YS10cW1sczEwMjhhLW1ibHMxMDI4YS5kdHM9NDU9XHRcdGxlZC0xIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9mc2wtbHMxMDI4YS10cW1sczEwMjhhLW1ibHMxMDI4YS5kdHMtNDktXHRcdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvX2V4cF8zdjMgMTQgR1BJT19BQ1RJVkVfSElHSFx1MDAzZTtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2ZzbC1sczEwMjhhLXRxbWxzMTAyOGEtbWJsczEwMjhhLmR0czo1MDpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvZnNsLWxzMTAyOGEtdHFtbHMxMDI4YS1tYmxzMTAyOGEuZHRzLTUxLVx0XHR9O1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhtcC1odW1taW5nYm9hcmQtaWlvdC5kdHM9MTA3PVx0c3BpX211eDogbXV4LWNvbnRyb2xsZXItMSB7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4bXAtaHVtbWluZ2JvYXJkLWlpb3QuZHRzLTEwOC1cdFx0Y29tcGF0aWJsZSA9IFwmIzM0O2dwaW8tbXV4XCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OG1wLWh1bW1pbmdib2FyZC1paW90LmR0czoxMDk6XHRcdC8qIGRlZmF1bHQgb24tYm9hcmQgKi9cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhtcC1odW1taW5nYm9hcmQtaWlvdC5kdHMtMTEwLVx0XHRpZGxlLXN0YXRlID0gXHUwMDNjMFx1MDAzZTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4bXAtaHVtbWluZ2JvYXJkLWlpb3QuZHRzPTExOT1cdHVhcnQzX3VhcnQ0X2IyYl9tdXg6IG11eC1jb250cm9sbGVyLTIge1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OG1wLWh1bW1pbmdib2FyZC1paW90LmR0cy0xMjAtXHRcdGNvbXBhdGlibGUgPSBcJiMzNDtncGlvLW11eFwmIzM0OztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhtcC1odW1taW5nYm9hcmQtaWlvdC5kdHM6MTIxOlx0XHQvKiBkZWZhdWx0IG9uLWJvYXJkICovXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4bXAtaHVtbWluZ2JvYXJkLWlpb3QuZHRzLTEyMi1cdFx0aWRsZS1zdGF0ZSA9IFx1MDAzYzBcdTAwM2U7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OG1wLXRxbWE4bXBxbC1tYmE4bXB4bC5kdHM9MTE2PVx0XHRsZWQtMCB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OG1wLXRxbWE4bXBxbC1tYmE4bXB4bC5kdHMtMTIwLVx0XHRcdGdwaW9zID0gXHUwMDNjXHUwMDI2Z3BpbzUgNSBHUElPX0FDVElWRV9ISUdIXHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OG1wLXRxbWE4bXBxbC1tYmE4bXB4bC5kdHM6MTIxOlx0XHRcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFwmIzM0O2RlZmF1bHQtb25cJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4bXAtdHFtYThtcHFsLW1iYThtcHhsLmR0cy0xMjItXHRcdH07XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTEtdHFtYTkxMzEtbWJhOTF4eGNhLmR0cz0xMDE9XHRcdGxlZC0xIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg5MS10cW1hOTEzMS1tYmE5MXh4Y2EuZHRzLTEwNC1cdFx0XHRncGlvcyA9IFx1MDAzY1x1MDAyNmV4cGFuZGVyMiA2IEdQSU9fQUNUSVZFX0hJR0hcdTAwM2U7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg5MS10cW1hOTEzMS1tYmE5MXh4Y2EuZHRzOjEwNTpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTEtdHFtYTkxMzEtbWJhOTF4eGNhLmR0cy0xMDYtXHRcdH07XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTMtdHFtYTkzNTItbWJhOTF4eGNhLmR0cz0xMDE9XHRcdGxlZC0xIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg5My10cW1hOTM1Mi1tYmE5MXh4Y2EuZHRzLTEwNC1cdFx0XHRncGlvcyA9IFx1MDAzY1x1MDAyNmV4cGFuZGVyMiA2IEdQSU9fQUNUSVZFX0hJR0hcdTAwM2U7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg5My10cW1hOTM1Mi1tYmE5MXh4Y2EuZHRzOjEwNTpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTMtdHFtYTkzNTItbWJhOTF4eGNhLmR0cy0xMDYtXHRcdH07XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTMtdHFtYTkzNTItbWJhOTN4eGNhLmR0cz0xMDc9XHRcdGxlZC0xIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg5My10cW1hOTM1Mi1tYmE5M3h4Y2EuZHRzLTExMC1cdFx0XHRncGlvcyA9IFx1MDAzY1x1MDAyNmV4cGFuZGVyMiA2IEdQSU9fQUNUSVZFX0hJR0hcdTAwM2U7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg5My10cW1hOTM1Mi1tYmE5M3h4Y2EuZHRzOjExMTpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTMtdHFtYTkzNTItbWJhOTN4eGNhLmR0cy0xMTItXHRcdH07XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTMtdHFtYTkzNTItbWJhOTN4eGxhLmR0cz05OD1cdFx0bGVkLTEge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDkzLXRxbWE5MzUyLW1iYTkzeHhsYS5kdHMtMTAxLVx0XHRcdGdwaW9zID0gXHUwMDNjXHUwMDI2ZXhwYW5kZXIyIDYgR1BJT19BQ1RJVkVfSElHSFx1MDAzZTtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDkzLXRxbWE5MzUyLW1iYTkzeHhsYS5kdHM6MTAyOlx0XHRcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFwmIzM0O2RlZmF1bHQtb25cJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg5My10cW1hOTM1Mi1tYmE5M3h4bGEuZHRzLTEwMy1cdFx0fTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9tYmE4bXguZHRzaT03MT1cdFx0bGVkMSB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvbWJhOG14LmR0c2ktNzMtXHRcdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvMSAwIEdQSU9fQUNUSVZFX0hJR0hcdTAwM2U7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9tYmE4bXguZHRzaTo3NDpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvbWJhOG14LmR0c2ktNzUtXHRcdH07XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvbWJhOHh4LmR0c2k9Njg9XHRcdGxlZDEge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL21iYTh4eC5kdHNpLTcxLVx0XHRcdGdwaW9zID0gXHUwMDNjXHUwMDI2ZXhwYW5kZXIgMSBHUElPX0FDVElWRV9ISUdIXHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvbWJhOHh4LmR0c2k6NzI6XHRcdFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXCYjMzQ7ZGVmYXVsdC1vblwmIzM0OztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL21iYTh4eC5kdHNpLTczLVx0XHR9O1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvbWFydmVsbC9hcm1hZGEtMzcyMC1hdGxhcy12NS5kdHM9MzY9XHRcdGxlZCB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zNzIwLWF0bGFzLXY1LmR0cy0zOS1cdFx0XHRjb2xvciA9IFx1MDAzY0xFRF9DT0xPUl9JRF9SRURcdTAwM2U7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM3MjAtYXRsYXMtdjUuZHRzOjQwOlx0XHRcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFwmIzM0O2RlZmF1bHQtb25cJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM3MjAtYXRsYXMtdjUuZHRzLTQxLVx0XHR9O1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvbWFydmVsbC9hcm1hZGEtMzcyMC10dXJyaXMtbW94LmR0cz0zOD1cdFx0bGVkIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM3MjAtdHVycmlzLW1veC5kdHMtNDAtXHRcdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvc2IgMjEgR1BJT19BQ1RJVkVfTE9XXHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zNzIwLXR1cnJpcy1tb3guZHRzOjQxOlx0XHRcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFwmIzM0O2RlZmF1bHQtb25cJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM3MjAtdHVycmlzLW1veC5kdHMtNDItXHRcdH07XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zN3h4LmR0c2k9MjM9XHRyZXNlcnZlZC1tZW1vcnkge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvbWFydmVsbC9hcm1hZGEtMzd4eC5kdHNpLTI4LVx0XHQvKlxuYXJjaC9hcm02NC9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zN3h4LmR0c2k6Mjk6XHRcdCAqIFRoZSBQU0NJIGZpcm13YXJlIHJlZ2lvbiBkZXBpY3RlZCBiZWxvdyBpcyB0aGUgZGVmYXVsdCBvbmVcbmFyY2gvYXJtNjQvYm9vdC9kdHMvbWFydmVsbC9hcm1hZGEtMzd4eC5kdHNpLTMwLVx0XHQgKiBhbmQgc2hvdWxkIGJlIHVwZGF0ZWQgYnkgdGhlIGJvb3Rsb2FkZXIuXG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL3NkbTQ1MC1sZW5vdm8tdGJ4NjA1Zi5kdHM9NDk9XHRiYWNrbGlnaHQ6IGdwaW8tYmFja2xpZ2h0IHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vc2RtNDUwLWxlbm92by10Yng2MDVmLmR0cy01My1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9zZG00NTAtbGVub3ZvLXRieDYwNWYuZHRzOjU0Olx0XHRkZWZhdWx0LW9uO1xuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL3NkbTQ1MC1sZW5vdm8tdGJ4NjA1Zi5kdHMtNTUtXG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL3RhbG9zLWV2ay1sdmRzLWF1byxnMTMzaGFuMDEuZHRzbz0xMT1cdGJhY2tsaWdodDogYmFja2xpZ2h0IHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vdGFsb3MtZXZrLWx2ZHMtYXVvLGcxMzNoYW4wMS5kdHNvLTEzLVx0XHRncGlvcyA9IFx1MDAzY1x1MDAyNnRsbW0gMTE1IEdQSU9fQUNUSVZFX0hJR0hcdTAwM2U7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vdGFsb3MtZXZrLWx2ZHMtYXVvLGcxMzNoYW4wMS5kdHNvOjE0Olx0XHRkZWZhdWx0LW9uO1xuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL3RhbG9zLWV2ay1sdmRzLWF1byxnMTMzaGFuMDEuZHRzby0xNS1cdH07XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9weDMwLWNvYnJhLmR0c2k9MTIwPVx1MDAyNmVtbWMge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcHgzMC1jb2JyYS5kdHNpLTEyNC1cdCAqIEZvciBoczIwMCBzdXBwb3J0LCBVLUJvb3Qgd291bGQgaGF2ZSB0byBzZXQgdGhlIFJLODA5IERDREM0XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3B4MzAtY29icmEuZHRzaToxMjU6XHQgKiByYWlsIHRvIDEuOFYgZnJvbSB0aGUgZGVmYXVsdCBvZiAzLjBWLiBJdCBkb2VzbiYjMzk7dCBkbyB0aGF0IG9uXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3B4MzAtY29icmEuZHRzaS0xMjYtXHQgKiBkZXZpY2VzIG91dCBpbiB0aGUgZmllbGQsIHNvIGRpc2FibGUgaHMyMDAuXG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9weDMwLWZpcmVmbHktamQ0LWNvcmUtbWIuZHRzPTY0PVx0XHRncmVlbi1sZWQge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcHgzMC1maXJlZmx5LWpkNC1jb3JlLW1iLmR0cy02OS1cdFx0XHRsYWJlbCA9IFwmIzM0O3B4MzAtbWItamQ0OmJsdWU6ZGl5XCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9weDMwLWZpcmVmbHktamQ0LWNvcmUtbWIuZHRzOjcwOlx0XHRcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFwmIzM0O2RlZmF1bHQtb25cJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3B4MzAtZmlyZWZseS1qZDQtY29yZS1tYi5kdHMtNzEtXHRcdH07XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9weDMwLXBwMTUxNi5kdHNpPTE0OD1cdTAwMjZlbW1jIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3B4MzAtcHAxNTE2LmR0c2ktMTUyLVx0ICogRm9yIGhzMjAwIHN1cHBvcnQsIFUtQm9vdCB3b3VsZCBoYXZlIHRvIHNldCB0aGUgUks4MDkgRENEQzRcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcHgzMC1wcDE1MTYuZHRzaToxNTM6XHQgKiByYWlsIHRvIDEuOFYgZnJvbSB0aGUgZGVmYXVsdCBvZiAzLjBWLiBJdCBkb2VzbiYjMzk7dCBkbyB0aGF0IG9uXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3B4MzAtcHAxNTE2LmR0c2ktMTU0LVx0ICogZGV2aWNlcyBvdXQgaW4gdGhlIGZpZWxkLCBzbyBkaXNhYmxlIGhzMjAwLlxuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzA4LWJwaS1wMi1wcm8uZHRzPTUyPVx0XHRibHVlLWxlZCB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzMDgtYnBpLXAyLXByby5kdHMtNTctXHRcdFx0bGFiZWwgPSBcJiMzNDtibHVlOnBvd2VyXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzMDgtYnBpLXAyLXByby5kdHM6NTg6XHRcdFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXCYjMzQ7ZGVmYXVsdC1vblwmIzM0OztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzA4LWJwaS1wMi1wcm8uZHRzLTU5LVx0XHR9O1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzA4LXJvYy1jYy5kdHM9Mzc9XHRcdHBvd2VyX2xlZDogbGVkLTAge1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzMDgtcm9jLWNjLmR0cy0zOC1cdFx0XHRsYWJlbCA9IFwmIzM0O2ZpcmVmbHk6cmVkOnBvd2VyXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzMDgtcm9jLWNjLmR0czozOTpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzMDgtcm9jLWNjLmR0cy00MC1cdFx0XHRkZWZhdWx0LXN0YXRlID0gXCYjMzQ7b25cJiMzNDs7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktaHVnc3VuLXg5OS5kdHM9NTE9XHRcdHBvd2VyX2xlZDogbGVkLTAge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5LWh1Z3N1bi14OTkuZHRzLTU0LVx0XHRcdGRlZmF1bHQtc3RhdGUgPSBcJiMzNDtvblwmIzM0OztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5LWh1Z3N1bi14OTkuZHRzOjU1Olx0XHRcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFwmIzM0O2RlZmF1bHQtb25cJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1odWdzdW4teDk5LmR0cy01Ni1cdFx0fTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzUyOC1hcm1zb20tc2lnZTEuZHRzPTU1PVx0XHRsZWQtMSB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1MjgtYXJtc29tLXNpZ2UxLmR0cy01OS1cdFx0XHRncGlvcyA9IFx1MDAzY1x1MDAyNmdwaW8zIFJLX1BCMiBHUElPX0FDVElWRV9ISUdIXHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1MjgtYXJtc29tLXNpZ2UxLmR0czo2MDpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1MjgtYXJtc29tLXNpZ2UxLmR0cy02MS1cdFx0fTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzUyOC1uYW5vcGktemVybzIuZHRzPTY3PVx0XHRsZWQtMSB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1MjgtbmFub3BpLXplcm8yLmR0cy03MS1cdFx0XHRncGlvcyA9IFx1MDAzY1x1MDAyNmdwaW80IFJLX1BCMSBHUElPX0FDVElWRV9ISUdIXHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1MjgtbmFub3BpLXplcm8yLmR0czo3MjpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1MjgtbmFub3BpLXplcm8yLmR0cy03My1cdFx0fTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2Ni1iaWd0cmVldGVjaC1jYjIuZHRzaT01MD1cdFx0bGVkLTAge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY2LWJpZ3RyZWV0ZWNoLWNiMi5kdHNpLTUzLVx0XHRcdGdwaW9zID0gXHUwMDNjXHUwMDI2Z3BpbzQgUktfUEExIEdQSU9fQUNUSVZFX0xPV1x1MDAzZTtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY2LWJpZ3RyZWV0ZWNoLWNiMi5kdHNpOjU0Olx0XHRcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFwmIzM0O2RlZmF1bHQtb25cJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2Ni1iaWd0cmVldGVjaC1jYjIuZHRzaS01NS1cdFx0XHRwaW5jdHJsLW5hbWVzID0gXCYjMzQ7ZGVmYXVsdFwmIzM0Oztcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2Ni1vZHJvaWQtbTFzLmR0cz00MT1cdFx0bGVkX3B3cjogbGVkLTAge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY2LW9kcm9pZC1tMXMuZHRzLTQ1LVx0XHRcdGdwaW9zID0gXHUwMDNjXHUwMDI2Z3BpbzAgUktfUEM2IEdQSU9fQUNUSVZFX0xPV1x1MDAzZTtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY2LW9kcm9pZC1tMXMuZHRzOjQ2Olx0XHRcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFwmIzM0O2RlZmF1bHQtb25cJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2Ni1vZHJvaWQtbTFzLmR0cy00Ny1cdFx0fTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1oaW5saW5rLW9wYy5kdHNpPTY5PVx0XHRsZWQtMiB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtaGlubGluay1vcGMuZHRzaS03Mi1cdFx0XHRncGlvcyA9IFx1MDAzY1x1MDAyNmdwaW8zIFJLX1BCMCBHUElPX0FDVElWRV9ISUdIXHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtaGlubGluay1vcGMuZHRzaTo3MzpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtaGlubGluay1vcGMuZHRzaS03NC1cdFx0fTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1vZHJvaWQtbTEuZHRzPTYyPVx0XHRsZWRfcG93ZXI6IGxlZC0wIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1vZHJvaWQtbTEuZHRzLTY2LVx0XHRcdGRlZmF1bHQtc3RhdGUgPSBcJiMzNDtrZWVwXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1Njgtb2Ryb2lkLW0xLmR0czo2NzpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1Njgtb2Ryb2lkLW0xLmR0cy02OC1cdFx0XHRwaW5jdHJsLW5hbWVzID0gXCYjMzQ7ZGVmYXVsdFwmIzM0Oztcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU3Ni1hcm1zb20tc2lnZTUuZHRzPTUzPVx0XHRyZWRfbGVkOiByZWQtbGVkIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU3Ni1hcm1zb20tc2lnZTUuZHRzLTU2LVx0XHRcdGdwaW9zID0gXHUwMDNjXHUwMDI2Z3BpbzQgUktfUEIxIEdQSU9fQUNUSVZFX0hJR0hcdTAwM2U7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU3Ni1hcm1zb20tc2lnZTUuZHRzOjU3Olx0XHRcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFwmIzM0O2RlZmF1bHQtb25cJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU3Ni1hcm1zb20tc2lnZTUuZHRzLTU4LVx0XHR9O1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LXJvYy1ydC5kdHM9MTI0PVx0XHRwb3dlcl9sZWQge1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtcm9jLXJ0LmR0cy0xMjUtXHRcdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvMSBSS19QRDMgR1BJT19BQ1RJVkVfSElHSFx1MDAzZTtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LXJvYy1ydC5kdHM6MTI2Olx0XHRcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFwmIzM0O2RlZmF1bHQtb25cJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1yb2MtcnQuZHRzLTEyNy1cdFx0fTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OHMta2hhZGFzLWVkZ2UyLmR0cz03MD1cdFx0Z3JlZW5fbGVkOiBsZWQtMSB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODhzLWtoYWRhcy1lZGdlMi5kdHMtNzQtXHRcdFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fUE9XRVI7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OHMta2hhZGFzLWVkZ2UyLmR0czo3NTpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODhzLWtoYWRhcy1lZGdlMi5kdHMtNzYtXHRcdFx0bWF4LWJyaWdodG5lc3MgPSBcdTAwM2MyNTVcdTAwM2U7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODhzLW9kcm9pZC1tMi5kdHM9NDI9XHRcdGxlZF9wd3I6IGxlZC0wIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OHMtb2Ryb2lkLW0yLmR0cy00Ni1cdFx0XHRncGlvcyA9IFx1MDAzY1x1MDAyNmdwaW8xIFJLX1BCNSBHUElPX0FDVElWRV9ISUdIXHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODhzLW9kcm9pZC1tMi5kdHM6NDc6XHRcdFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXCYjMzQ7ZGVmYXVsdC1vblwmIzM0OztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4cy1vZHJvaWQtbTIuZHRzLTQ4LVx0XHR9O1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvc3Qvc3RtMzJtcDIzNWYtZGsuZHRzPTEwOT1cdHBhbmVsX2x2ZHNfYmFja2xpZ2h0OiBiYWNrbGlnaHQge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvc3Qvc3RtMzJtcDIzNWYtZGsuZHRzLTExMS1cdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvaSA0IEdQSU9fQUNUSVZFX0hJR0hcdTAwM2U7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3N0L3N0bTMybXAyMzVmLWRrLmR0czoxMTI6XHRcdGRlZmF1bHQtb247XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3N0L3N0bTMybXAyMzVmLWRrLmR0cy0xMTMtXHRcdHN0YXR1cyA9IFwmIzM0O29rYXlcJiMzNDs7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9zdC9zdG0zMm1wMjU3Zi1kay5kdHM9MTE2PVx0cGFuZWxfbHZkc19iYWNrbGlnaHQ6IGJhY2tsaWdodCB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9zdC9zdG0zMm1wMjU3Zi1kay5kdHMtMTE4LVx0XHRncGlvcyA9IFx1MDAzY1x1MDAyNmdwaW9pIDQgR1BJT19BQ1RJVkVfSElHSFx1MDAzZTtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvc3Qvc3RtMzJtcDI1N2YtZGsuZHRzOjExOTpcdFx0ZGVmYXVsdC1vbjtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvc3Qvc3RtMzJtcDI1N2YtZGsuZHRzLTEyMC1cdFx0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0Oztcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3N0L3N0bTMybXAyNTdmLWV2MS5kdHM9MTQwPVx0cGFuZWxfbHZkc19iYWNrbGlnaHQ6IGJhY2tsaWdodCB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9zdC9zdG0zMm1wMjU3Zi1ldjEuZHRzLTE0Mi1cdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvaSA1IEdQSU9fQUNUSVZFX0hJR0hcdTAwM2U7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3N0L3N0bTMybXAyNTdmLWV2MS5kdHM6MTQzOlx0XHRkZWZhdWx0LW9uO1xuYXJjaC9hcm02NC9ib290L2R0cy9zdC9zdG0zMm1wMjU3Zi1ldjEuZHRzLTE0NC1cdFx0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0Oztcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2Jyay1pbW0uaC0xNS0gKiBBbGxvd2VkIHZhbHVlcyBmb3Iga2dkYiBhcmUgMHg0MDAgLSAweDdmZlxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9icmstaW1tLmg6MTY6ICogMHgxMDA6IGZvciB0cmlnZ2VyaW5nIGEgZmF1bHQgb24gcHVycG9zZSAocmVzZXJ2ZWQpXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2Jyay1pbW0uaC0xNy0gKiAweDQwMDogZm9yIGR5bmFtaWMgQlJLIGluc3RydWN0aW9uXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLWRlZi5oLTE3LS8qXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24tZGVmLmg6MTg6ICogQlJLIGluc3RydWN0aW9uIGZvciBwcm92b2tpbmcgYSBmYXVsdCBvbiBwdXJwb3NlXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24tZGVmLmgtMTktICogVW5saWtlIGtnZGIsICNpbW0xNiB2YWx1ZSB3aXRoIHVuYWxsb2NhdGVkIGhhbmRsZXIgaXMgdXNlZCBmb3IgZmF1bHRpbmcuXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oPTQ4MD1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2lzX3dyaXRlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgtNDgzLVx0XHQvKlxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oOjQ4NDpcdFx0ICogT25seSBhIHBlcm1pc3Npb24gZmF1bHQgb24gYSBTMVBUVyBzaG91bGQgYmVcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaC00ODUtXHRcdCAqIGNvbnNpZGVyZWQgYXMgYSB3cml0ZS4gT3RoZXJ3aXNlLCBwYWdlIHRhYmxlcyBiYWtlZFxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbXRlLWthc2FuLmg9NjA9c3RhdGljIGlubGluZSB2b2lkIG10ZV9lbmFibGVfdGNvKHZvaWQpXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tdGUta2FzYW4uaC02OC0gKiBzaW5jZSB0aGUgc3luYyBtb2RlIGdlbmVyYXRlcyBleGNlcHRpb25zIHN5bmNocm9ub3VzbHkgYW5kIHRoZVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tdGUta2FzYW4uaDo2OTogKiBub2ZhdWx0IG9yIGxvYWRfdW5hbGlnbmVkX3plcm9wYWQgY2FuIGhhbmRsZSB0aGVtLlxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tdGUta2FzYW4uaC03MC0gKi9cbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYz04Njc9aW50IHZlY19zZXRfdmVjdG9yX2xlbmd0aChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGVudW0gdmVjX3R5cGUgdHlwZSxcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYy04OTgtXHRlbHNlXG5hcmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYzo4OTk6XHRcdC8qIFJlc2V0IFZMIHRvIHN5c3RlbSBkZWZhdWx0IG9uIG5leHQgZXhlYzogKi9cbmFyY2gvYXJtNjQva2VybmVsL2Zwc2ltZC5jLTkwMC1cdFx0dGFza19zZXRfdmxfb25leGVjKHRhc2ssIHR5cGUsIDApO1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2h3X2JyZWFrcG9pbnQuYz02MzE9dm9pZCBkb19icmVha3BvaW50KHVuc2lnbmVkIGxvbmcgZXNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9od19icmVha3BvaW50LmMtNjY2LVx0XHQvKiBEbyB3ZSBuZWVkIHRvIGhhbmRsZSB0aGUgc3RlcHBpbmc/ICovXG5hcmNoL2FybTY0L2tlcm5lbC9od19icmVha3BvaW50LmM6NjY3Olx0XHRpZiAoaXNfZGVmYXVsdF9vdmVyZmxvd19oYW5kbGVyKGJwKSlcbmFyY2gvYXJtNjQva2VybmVsL2h3X2JyZWFrcG9pbnQuYy02NjgtXHRcdFx0c3RlcCA9IDE7XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvaHdfYnJlYWtwb2ludC5jPTc0MT1zdGF0aWMgaW50IHdhdGNocG9pbnRfcmVwb3J0KHN0cnVjdCBwZXJmX2V2ZW50ICp3cCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2h3X2JyZWFrcG9pbnQuYy03NDMte1xuYXJjaC9hcm02NC9rZXJuZWwvaHdfYnJlYWtwb2ludC5jOjc0NDpcdGludCBzdGVwID0gaXNfZGVmYXVsdF9vdmVyZmxvd19oYW5kbGVyKHdwKTtcbmFyY2gvYXJtNjQva2VybmVsL2h3X2JyZWFrcG9pbnQuYy03NDUtXHRzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvID0gY291bnRlcl9hcmNoX2JwKHdwKTtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9tdGUuYz0yMDQ9c3RhdGljIHZvaWQgbXRlX3VwZGF0ZV9zY3Rscl91c2VyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9tdGUuYy0yMjUtXHQgKiBzZXQgYml0cyBhbmQgbWFwIGludG8gcmVnaXN0ZXIgdmFsdWVzIGRldGVybWluZXMgb3VyXG5hcmNoL2FybTY0L2tlcm5lbC9tdGUuYzoyMjY6XHQgKiBkZWZhdWx0IG9yZGVyLlxuYXJjaC9hcm02NC9rZXJuZWwvbXRlLmMtMjI3LVx0ICovXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL2twcm9iZXMuYz0zMDE9aW50IF9fa3Byb2JlcyBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGZzcilcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMva3Byb2Jlcy5jLTMyMi1cdFx0ICogc2luZ2xlLXN0ZXBwaW5nIGlmIHRoZSBmYXVsdGluZyBQQyBwb2ludHMgdG8gdGhlXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMva3Byb2Jlcy5jOjMyMzpcdFx0ICogY3VycmVudCBrcHJvYmUmIzM5O3MgWE9MIGluc3RydWN0aW9uLiBJZiB0aGUgZmF1bHQgb2NjdXJyZWRcbmFyY2gvYXJtNjQva2VybmVsL3Byb2Jlcy9rcHJvYmVzLmMtMzI0LVx0XHQgKiBlbHNld2hlcmUgKGUuZy4gaW4gcGVyZiBvciB0cmFjaW5nIGNvZGUgaW52b2tlZCBmcm9tIHRoZVxuLS1cbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlPTE2PWt2bS15ICYjNDM7PSBhcm0ubyBtbXUubyBtbWlvLm8gcHNjaS5vIGh5cGVyY2FsbHMubyBwdnRpbWUubyBcXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU6MTc6XHQgaW5qZWN0X2ZhdWx0Lm8gdmFfbGF5b3V0Lm8gaGFuZGxlX2V4aXQubyBjb25maWcubyBcXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUtMTgtXHQgZ3Vlc3QubyBkZWJ1Zy5vIHJlc2V0Lm8gc3lzX3JlZ3MubyBzdGFja3RyYWNlLm8gXFxcbi0tXG5hcmNoL2FybTY0L2t2bS9hcm0uYz02MD1lbnVtIGt2bV93ZnhfdHJhcF9wb2xpY3kge1xuYXJjaC9hcm02NC9rdm0vYXJtLmM6NjE6XHRLVk1fV0ZYX05PVFJBUF9TSU5HTEVfVEFTSywgLyogRGVmYXVsdCBvcHRpb24gKi9cbmFyY2gvYXJtNjQva3ZtL2FybS5jLTYyLVx0S1ZNX1dGWF9OT1RSQVAsXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmM9MTY0ND1zdGF0aWMgaW50IGt2bV9zZXR1cF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0xNjUwLVx0ICogV2hlbiB0aGUgdkNQVSBoYXMgYSBQTVUsIGJ1dCBubyBQTVUgaXMgc2V0IGZvciB0aGUgZ3Vlc3RcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjE2NTE6XHQgKiB5ZXQsIHNldCB0aGUgZGVmYXVsdCBvbmUuXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0xNjUyLVx0ICovXG4tLVxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL2ZhdWx0Lmg9NjA9c3RhdGljIGlubGluZSBib29sIF9faHBmYXJfdmFsaWQodTY0IGVzcilcbi0tXG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvZmF1bHQuaC02My1cdCAqIENQVXMgYWZmZWN0ZWQgYnkgQVJNIGVycmF0dW0gIzgzNDIyMCBtYXkgaW5jb3JyZWN0bHkgcmVwb3J0IGFcbmFyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9mYXVsdC5oOjY0Olx0ICogc3RhZ2UtMiB0cmFuc2xhdGlvbiBmYXVsdCB3aGVuIGEgc3RhZ2UtMSBwZXJtaXNzaW9uIGZhdWx0IG9jY3Vycy5cbmFyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9mYXVsdC5oLTY1LVx0ICpcbi0tXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9wa3ZtLmM9MTA1Mz1zdGF0aWMgdTY0IF9fcGt2bV9tZW1zaGFyZV9wYWdlX3JlcShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBpcGEpXG4tLVxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvcGt2bS5jLTEwNTYtXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9wa3ZtLmM6MTA1NzpcdC8qIEZha2UgdXAgYSBkYXRhIGFib3J0IChsZXZlbCAzIHRyYW5zbGF0aW9uIGZhdWx0IG9uIHdyaXRlKSAqL1xuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvcGt2bS5jLTEwNTgtXHR2Y3B1LVx1MDAzZWFyY2guZmF1bHQuZXNyX2VsMiA9IChFU1JfRUx4X0VDX0RBQlRfTE9XIFx1MDAzY1x1MDAzYyBFU1JfRUx4X0VDX1NISUZUKSB8XG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9MjI0Nz1pbnQga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjI5MS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jOjIyOTI6XHQvKiBDaGVjayB0aGUgc3RhZ2UtMiBmYXVsdCBpcyB0cmFucy4gZmF1bHQgb3Igd3JpdGUgZmF1bHQgKi9cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTIyOTMtXHRpZiAoIWVzcl9mc2NfaXNfdHJhbnNsYXRpb25fZmF1bHQoZXNyKSBcdTAwMjZcdTAwMjZcbi0tXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jPTEwNDM9c3RhdGljIHZvaWQga3ZtX2FybV9zZXRfcG11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpXG4tLVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xMDUxLS8qKlxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYzoxMDUyOiAqIGt2bV9hcm1fc2V0X2RlZmF1bHRfcG11IC0gTm8gUE1VIHNldCwgZ2V0IHRoZSBkZWZhdWx0IG9uZS5cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtMTA1My0gKiBAa3ZtOiBUaGUga3ZtIHBvaW50ZXJcbi0tXG5hcmNoL2FybTY0L21tL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuYXJjaC9hcm02NC9tbS9NYWtlZmlsZToyOm9iai15XHRcdFx0XHQ6PSBkbWEtbWFwcGluZy5vIGV4dGFibGUubyBmYXVsdC5vIGluaXQubyBcXFxuYXJjaC9hcm02NC9tbS9NYWtlZmlsZS0zLVx0XHRcdFx0ICAgY2FjaGUubyBjb3B5cGFnZS5vIGZsdXNoLm8gXFxcbi0tXG5hcmNoL2FybTY0L21tL2NvbnRwdGUuYz02OT1zdGF0aWMgdm9pZCBjb250cHRlX2NvbnZlcnQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5hcmNoL2FybTY0L21tL2NvbnRwdGUuYy0xNTctXHQgKiAgSWYgYm90aCB0aGUgb2xkIHNpbmdsZSAoUlcsbikgYW5kIG5ldyBjb250aWd1b3VzIChSTyxjKSBUTEIgZW50cmllc1xuYXJjaC9hcm02NC9tbS9jb250cHRlLmM6MTU4Olx0ICogIGFyZSBwcmVzZW50LCBhbmQgYSB3cml0ZSBpcyBtYWRlIHRvIHRoaXMgYWRkcmVzcywgZG8gd2UgZmF1bHQgb3JcbmFyY2gvYXJtNjQvbW0vY29udHB0ZS5jLTE1OS1cdCAqICBpcyB0aGUgd3JpdGUgcGVybWl0dGVkICh2aWEgYW1hbGdhbWF0aW9uKT9cbi0tXG5hcmNoL2FybTY0L21tL2V4dGFibGUuYz0xND1zdGF0aWMgYm9vbCBjcHlfZmF1bHRlZF9vbl91YWNjZXNzKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxuLS1cbmFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jLTE3LVx0Ym9vbCB1YWNjZXNzX2lzX3dyaXRlID0gRklFTERfR0VUKEVYX0RBVEFfVUFDQ0VTU19XUklURSwgZXgtXHUwMDNlZGF0YSk7XG5hcmNoL2FybTY0L21tL2V4dGFibGUuYzoxODpcdGJvb2wgZmF1bHRfb25fd3JpdGUgPSBlc3IgXHUwMDI2IEVTUl9FTHhfV05SO1xuYXJjaC9hcm02NC9tbS9leHRhYmxlLmMtMTktXG5hcmNoL2FybTY0L21tL2V4dGFibGUuYzoyMDpcdHJldHVybiB1YWNjZXNzX2lzX3dyaXRlID09IGZhdWx0X29uX3dyaXRlO1xuYXJjaC9hcm02NC9tbS9leHRhYmxlLmMtMjEtfVxuLS1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz02MDE9c3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsXG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTc5MC1cdFx0ICovXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6NzkxOlx0XHRwYWdlZmF1bHRfb3V0X29mX21lbW9yeSgpO1xuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTc5Mi1cdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MjExCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEFSTTY0IEZhdWx0IEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlIEFSTTY0IGtlcm5lbCBoYW5kbGVzIG1lbW9yeSBmYXVsdHMuIEkgc2VlIHRoYXQgYGZhdWx0Lm9gIGFuZCBgZXh0YWJsZS5vYCBhcmUgYnVpbHQgYWxvbmdzaWRlIGBkbWEtbWFwcGluZy5vYCBhbmQgb3RoZXJzLCBhbGwgcGFydCBvZiB0aGUgc3RhbmRhcmQgYnVpbGQgcHJvY2VzcyB2aWEgYG9iai15YC4gVGhlIGFyY2hpdGVjdHVyZSBjb25maWcgaXMgYENPTkZJR19BUk02NGAg4oCTIG5vdGhpbmcgdG9vIHVudXN1YWwgaGVyZSB1bmxlc3Mgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgc3BlY2lmaWMsIHNvIG5vIG5lZWQgdG8gZGVsdmUgaW50byBzcGVjaWZpYyBFbmFibGVDb25maWdzLCBgW11gIGlzIGZpbmUgYW5kIGBJU19FTkFCTEVEKENPTkZJR19BUk02NClgIGlzIGltcGxpZWQuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3c7IEkgc2hvdWxkIGNoZWNrIG91dCBgZml4dXBfZXhjZXB0aW9uYCwgYGRvX3NlYWAsIGFuZCBgZG9fbWVtX2Fib3J0YC4gSSYjMzk7bGwgYWxzbyBnbGFuY2UgdGhyb3VnaCBvdGhlciBzeW1ib2xzIGFuZCBjb25maWdzLgoKQWhhISBMb29raW5nIGF0IGBmYXVsdC5jYCBkaXJlY3RseSwgSSBjYW4gc2VlIHNvbWUgcmVsZXZhbnQgYENPTkZJR19gIG9wdGlvbnMgaW4gcGxheTogYENPTkZJR19DT01QQVRfQUxJR05NRU5UX0ZJWFVQU2Ag4oCTIHRoYXQmIzM5O3MgZm9yIGhhbmRsaW5nIGFsaWdubWVudCBmYXVsdHMsIG9idmlvdXNseS4gYENPTkZJR19IQVJERU5fRUwyX1ZFQ1RPUlNgIGlzbiYjMzk7dCBwZXJ0aW5lbnQgaW4gdGhpcyBjb250ZXh0LiBBbmQgdGhlbiwgdGhlcmUmIzM5O3MgYENPTkZJR19BQ1BJX0FQRUlfU0VBYCBhbmQgYENPTkZJR19BQ1BJX0FQRUlgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhcyB0aGF0IGludm9sdmVzIGBhcGVpX2NsYWltX3NlYWAuIEkgc2hvdWxkIGNoZWNrIG91dCBgYXBlaV9jbGFpbV9zZWFgIGluIGBhcmNoL2FybTY0YCB0byBzZWUgaG93IHRoYXQmIzM5O3MgdGllZCBpbnRvIHRoZSBmYXVsdCBoYW5kbGluZyBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcGVpX2NsYWltX3NlYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hY3BpLmg9MTIwPXZvaWQgX19pbml0IGFjcGlfaW5pdF9jcHVzKHZvaWQpO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hY3BpLmg6MTIxOmludCBhcGVpX2NsYWltX3NlYShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FjcGkuaC0xMjItI2Vsc2VcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWNwaS5oPTEyMz1zdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9pbml0X2NwdXModm9pZCkgeyB9XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FjcGkuaDoxMjQ6c3RhdGljIGlubGluZSBpbnQgYXBlaV9jbGFpbV9zZWEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgcmV0dXJuIC1FTk9FTlQ7IH1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWNwaS5oLTEyNS0jZW5kaWYgLyogQ09ORklHX0FDUEkgKi9cbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9hY3BpLmM9Mjk1PXZvaWQgX19pb21lbSAqYWNwaV9vc19pb3JlbWFwKGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBwaHlzLCBhY3BpX3NpemUgc2l6ZSlcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9hY3BpLmMtMzg4LSAqL1xuYXJjaC9hcm02NC9rZXJuZWwvYWNwaS5jOjM4OTppbnQgYXBlaV9jbGFpbV9zZWEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG5hcmNoL2FybTY0L2tlcm5lbC9hY3BpLmMtMzkwLXtcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0yMTg1PWludCBrdm1faGFuZGxlX2d1ZXN0X3NlYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjIwMC1cdCAqIEdpdmUgQVBFSSB0aGUgb3Bwb3J0dW5pdHkgdG8gY2xhaW0gdGhlIGFib3J0IGJlZm9yZSBoYW5kbGluZyBpdFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjIwMTpcdCAqIHdpdGhpbiBLVk0uIGFwZWlfY2xhaW1fc2VhKCkgZXhwZWN0cyB0byBiZSBjYWxsZWQgd2l0aCBJUlFzIGVuYWJsZWQuXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yMjAyLVx0ICovXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yMjAzLVx0bG9ja2RlcF9hc3NlcnRfaXJxc19lbmFibGVkKCk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYzoyMjA0Olx0aWYgKGFwZWlfY2xhaW1fc2VhKE5VTEwpID09IDApXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yMjA1LVx0XHRyZXR1cm4gMTtcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9ODY2PXN0YXRpYyBpbnQgZG9fc2VhKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTg3Mi1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo4NzM6XHRpZiAodXNlcl9tb2RlKHJlZ3MpIFx1MDAyNlx1MDAyNiBhcGVpX2NsYWltX3NlYShyZWdzKSA9PSAwKSB7XG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtODc0LVx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTUwMwoJCQkJCQkJb3V0cHV0OiA4OQoJCQkJCQkJdGhvdWdodHM6IDQxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGBhcmNoL2FybTY0L21tL2ZhdWx0LmNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFkZGluZyBhIGNoZWNrIHdpdGhpbiBgZG9fc2VhKClgLCB0aGUgU3luY2hyb25vdXMgRXh0ZXJuYWwgQWJvcnQgKFNFQSkgaGFuZGxlciwgbGlrZSB0aGlzOgoKYGBgYwoJaWYgKCF1c2VyX21vZGUocmVncykgJmFtcDsmYW1wOyBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSkKCQlyZXR1cm4gMDsKYGBgCgpFc3NlbnRpYWxseSwgaWYgYSBTRUEgaGFwcGVucyBpbiBrZXJuZWwgbW9kZSAoRUwxKSwgaW5zdGVhZCBvZiBpbW1lZGlhdGVseSBjcmFzaGluZyDigJMgYXMgd291bGQgaGFwcGVuIHdpdGggYGFybTY0X25vdGlmeV9kaWVgIOKAkyB0aGUgY29kZSBpcyBub3cgY2hlY2tpbmcgaWYgYGZpeHVwX2V4Y2VwdGlvbigpYCBjYW4gaGFuZGxlIGl0LiAgSWYgYGZpeHVwX2V4Y2VwdGlvbmAgcmV0dXJucyB0cnVlLCB0aGUgZXhjZXB0aW9uIGlzICYjMzQ7Zml4ZWQgdXAmIzM0OyAoaGFuZGxlZCkuIFRoaXMgaXMgaW50ZXJlc3RpbmcuCgpJcyB0aGlzIGZ1enppbmctd29ydGh5PyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGNvcmUgQVJNNjQgbWVtb3J5IGFib3J0L2V4Y2VwdGlvbiBoYW5kbGluZy4gQSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBoZXJlIGNvdWxkIGxlYWQgdG8gc29tZSBuYXN0eSBleHBsb2l0cywgaWYgYSBiYWQgYWN0b3IgY2FuIHRyaWdnZXIgdGhlIGNvZGUgcGF0aC4KClNvLCB0aGUga2V5IHN5bWJvbHMgaGVyZSBhcmUgYGZpeHVwX2V4Y2VwdGlvbmAgKHdoaWNoLCBpbXBvcnRhbnRseSwgaXMgYSBnbG9iYWwsIG5vbi1zdGF0aWMgZnVuY3Rpb24gZGVmaW5lZCBpbiBgYXJjaC9hcm02NC9tbS9leHRhYmxlLmNgKSBhbmQgYGRvX3NlYWAgKHRoZSBTRUEgaGFuZGxlciB0aGlzIHBhdGNoIG1vZGlmaWVzKS4gYGRvX3NlYWAgaXMgc3RhdGljIGJ1dCBpcyB1c2VkIGluIGBmYXVsdF9pbmZvYCB0YWJsZSwgc28gaXQgKnNob3VsZCogYmUgYWRkcmVzcy10YWtlbiBhbmQgYWNjZXNzaWJsZSBpbiBrYWxsc3ltcyBpZiBDT05GSUdfS0FMTFNZTVMgaXMgZW5hYmxlZC4gSSBzaG91bGQgcHJvYmFibHkga2VlcCBhbiBleWUgb24gYGRvX21lbV9hYm9ydGAgdG9vLCBhcyBpdCYjMzk7cyB0aGUgZ2VuZXJhbCBlbnRyeSBwb2ludCBmb3IgbWVtb3J5IGFib3J0cy4KCkFuZCB0aGFua2Z1bGx5LCBubyBzcGVjaWFsIEtjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQgYmVjYXVzZSB0aGlzIGlzIHVuY29uZGl0aW9uYWwgaW4gYGFyY2gvYXJtNjQvbW0vZmF1bHQuY2AuIFRoaXMgbWFrZXMgdGhpbmdzIG11Y2ggc2ltcGxlci4KClNvLCB0byBzdW1tYXJpemU6CgoqICAgKipXb3J0aEZ1enppbmcqKjogVHJ1ZQoqICAgKipGb2N1c1N5bWJvbHMqKjogYFsmIzM0O2ZpeHVwX2V4Y2VwdGlvbiYjMzQ7LCAmIzM0O2RvX3NlYSYjMzQ7XWAKKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgW11gCgpUaGUgcmVhc29uaW5nPyBJdCYjMzk7cyBhbGwgYWJvdXQgcHJvYmluZyB0aGUgY3JpdGljYWwga2VybmVsIGV4Y2VwdGlvbiBoYW5kbGluZyBsb2dpYy4gVGhpcyBsb29rcyBnb29kLiBSZWFkeSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZpeHVwX2V4Y2VwdGlvbiYjMzQ7LAogICAgJiMzNDtkb19zZWEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWxsb3dzIGtlcm5lbC1tb2RlIHN5bmNocm9ub3VzIGV4dGVybmFsIGFib3J0cyAoU0VBKSB0byBiZSByZWNvdmVyZWQgdXNpbmcgZXhjZXB0aW9uIGZpeHVwIHRhYmxlcyBpbnN0ZWFkIG9mIGltbWVkaWF0ZWx5IHBhbmlja2luZy4gVGhpcyBtb2RpZmllcyBjb3JlIEFSTTY0IGZhdWx0IGhhbmRsaW5nIGxvZ2ljIHJlYWNoYWJsZSBkdXJpbmcga2VybmVsIG1lbW9yeSBhY2Nlc3NlcyB0aGF0IGZhdWx0IHdpdGggU0VBLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZpeHVwX2V4Y2VwdGlvbiYjMzQ7LAogICAgJiMzNDtkb19zZWEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWxsb3dzIGtlcm5lbC1tb2RlIHN5bmNocm9ub3VzIGV4dGVybmFsIGFib3J0cyAoU0VBKSB0byBiZSByZWNvdmVyZWQgdXNpbmcgZXhjZXB0aW9uIGZpeHVwIHRhYmxlcyBpbnN0ZWFkIG9mIGltbWVkaWF0ZWx5IHBhbmlja2luZy4gVGhpcyBtb2RpZmllcyBjb3JlIEFSTTY0IGZhdWx0IGhhbmRsaW5nIGxvZ2ljIHJlYWNoYWJsZSBkdXJpbmcga2VybmVsIG1lbW9yeSBhY2Nlc3NlcyB0aGF0IGZhdWx0IHdpdGggU0VBLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzoyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGRvX3NlYSgpYCBpbiBgYXJjaC9hcm02NC9tbS9mYXVsdC5jYCB0byBhdHRlbXB0IGV4Y2VwdGlvbiBmaXh1cCB2aWEgYGZpeHVwX2V4Y2VwdGlvbigpYCB3aGVuIGEgU3luY2hyb25vdXMgRXh0ZXJuYWwgQWJvcnQgKFNFQSkgb2NjdXJzIGluIGtlcm5lbCBtb2RlIChgIXVzZXJfbW9kZShyZWdzKWApLCBhbGxvd2luZyBncmFjZWZ1bCByZWNvdmVyeSAoZS5nLiwgcmV0dXJuaW5nIC1FRkFVTFQgZm9yIHVhY2Nlc3MgZmF1bHRzKSBpbnN0ZWFkIG9mIGR5aW5nLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgbG93LWxldmVsIGFyY2hpdGVjdHVyZSBmYXVsdC9leGNlcHRpb24gaGFuZGxpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgc3RydWN0dXJlIGZpZWxkcyBvciBwYWRkaW5nLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGluaXRpYWxpemF0aW9uIGxvZ2ljLCBhbmQgZG9lcyBub3QgY29weSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZkYTc4ZWY3ZGMwZjg0N2Y3ZWZhNGE5NTIxMzJhMjk4NmUyM2U0MzEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAyMzoyNDowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vZmF1bHQuYyBiL2FyY2gvYXJtNjQvbW0vZmF1bHQuYwppbmRleCAwYjUyNTU3NjUyYmU2Li5jYTM5NmI0YmRkYTAzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL2ZhdWx0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9mYXVsdC5jCkBAIC04NzgsNiAmIzQzOzg3OCw5IEBAIHN0YXRpYyBpbnQgZG9fc2VhKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiAJCXJldHVybiAwOwogCX0KIAomIzQzOwlpZiAoIXVzZXJfbW9kZShyZWdzKSAmYW1wOyZhbXA7IGZpeHVwX2V4Y2VwdGlvbihyZWdzLCBlc3IpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJaWYgKGVzciAmYW1wOyBFU1JfRUx4X0ZuVikgewogCQlzaWFkZHIgPSAwOwogCX0gZWxzZSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDcxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBcm02NCBGYXVsdCBIYW5kbGluZyBpbiBgZmF1bHQuY2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBzbyBJJiMzOTttIGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXI6IGBhcmNoL2FybTY0L21tL2ZhdWx0LmNgLiBUaGUgZmF1bHQgaGFuZGxpbmcgY29kZSBpcyBjcml0aWNhbCwgc28gYSBjaGFuZ2UgaGVyZSBhbHdheXMgd2FycmFudHMgY2FyZWZ1bCBzY3J1dGlueS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiBgZG9fc2VhYCBhbmQgYGZpeHVwX2V4Y2VwdGlvbmAuIFRoZXNlIGFyZSB0aGUgbGlrZWx5IGVudHJ5IHBvaW50cyBmb3IgYW55IGZhdWx0LXJlbGF0ZWQgcHJvY2Vzc2luZywgYW5kIHVuZGVyc3RhbmRpbmcgdGhlaXIgaW50ZXJhY3Rpb24gaXMga2V5LiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBwYXRocyB0aHJvdWdoIHRoZW0sIHNlZSBob3cgdGhleSBpbnRlcmFjdCwgYW5kIGlkZW50aWZ5IGV4YWN0bHkgd2hhdCYjMzk7cyBiZWluZyBtb2RpZmllZCBieSB0aGlzIHBhdGNoLiBJIGV4cGVjdCB0byBzZWUgZGV0YWlsZWQgY2hlY2tzIGZvciB0aGUgZmF1bHQgdHlwZSBhbmQgYWRkcmVzcywgYW5kIGEgY29uZGl0aW9uYWwgc2VxdWVuY2UgYmFzZWQgb24gdGhlIHN5c3RlbSBzdGF0ZSBhbmQgdGhlIGZhdWx0JiMzOTtzIG5hdHVyZS4gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBjaGFuZ2UgaW1wYWN0cyB0aGUgZXhpc3RpbmcgZXhjZXB0aW9uIGhhbmRsaW5nIGxvZ2ljIHdpbGwgYmUgY3JpdGljYWwgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgaXMgY29ycmVjdCBhbmQgd2hhdCB0aGUgcGVyZm9ybWFuY2UgYW5kL29yIHNlY3VyaXR5IGltcGFjdHMgb2YgdGhlIHByb3Bvc2VkIGNoYW5nZXMgbWlnaHQgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX3NlYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbW0vZmF1bHQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L21tL2ZhdWx0LmM9ODYxPXN0YXRpYyBpbnQgZG9fYmFkKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTg2NS1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo4NjY6c3RhdGljIGludCBkb19zZWEodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy04Njcte1xuLS1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz05MTY9c3RhdGljIGNvbnN0IHN0cnVjdCBmYXVsdF9pbmZvIGZhdWx0X2luZm9bXSA9IHtcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtOTMyLVx0eyBkb19wYWdlX2ZhdWx0LFx0U0lHU0VHViwgU0VHVl9BQ0NFUlIsXHRcJiMzNDtsZXZlbCAzIHBlcm1pc3Npb24gZmF1bHRcJiMzNDtcdH0sXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTMzOlx0eyBkb19zZWEsXHRcdFNJR0JVUywgIEJVU19PQkpFUlIsXHRcJiMzNDtzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydFwmIzM0O1x0fSxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05MzQtXHR7IGRvX3RhZ19jaGVja19mYXVsdCxcdFNJR1NFR1YsIFNFR1ZfTVRFU0VSUixcdFwmIzM0O3N5bmNocm9ub3VzIHRhZyBjaGVjayBmYXVsdFwmIzM0O1x0fSxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05MzUtXHR7IGRvX2JhZCxcdFx0U0lHS0lMTCwgU0lfS0VSTkVMLFx0XCYjMzQ7dW5rbm93biAxOFwmIzM0O1x0XHRcdH0sXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTM2Olx0eyBkb19zZWEsXHRcdFNJR0tJTEwsIFNJX0tFUk5FTCxcdFwmIzM0O2xldmVsIC0xICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVwmIzM0O1x0fSxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5Mzc6XHR7IGRvX3NlYSxcdFx0U0lHS0lMTCwgU0lfS0VSTkVMLFx0XCYjMzQ7bGV2ZWwgMCAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcJiMzNDtcdH0sXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTM4Olx0eyBkb19zZWEsXHRcdFNJR0tJTEwsIFNJX0tFUk5FTCxcdFwmIzM0O2xldmVsIDEgKHRyYW5zbGF0aW9uIHRhYmxlIHdhbGspXCYjMzQ7XHR9LFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjkzOTpcdHsgZG9fc2VhLFx0XHRTSUdLSUxMLCBTSV9LRVJORUwsXHRcJiMzNDtsZXZlbCAyICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVwmIzM0O1x0fSxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5NDA6XHR7IGRvX3NlYSxcdFx0U0lHS0lMTCwgU0lfS0VSTkVMLFx0XCYjMzQ7bGV2ZWwgMyAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcJiMzNDtcdH0sXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTQxOlx0eyBkb19zZWEsXHRcdFNJR0JVUywgIEJVU19PQkpFUlIsXHRcJiMzNDtzeW5jaHJvbm91cyBwYXJpdHkgb3IgRUNDIGVycm9yXCYjMzQ7IH0sXHQvLyBSZXNlcnZlZCB3aGVuIFJBUyBpcyBpbXBsZW1lbnRlZFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTk0Mi1cdHsgZG9fYmFkLFx0XHRTSUdLSUxMLCBTSV9LRVJORUwsXHRcJiMzNDt1bmtub3duIDI1XCYjMzQ7XHRcdFx0fSxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05NDMtXHR7IGRvX2JhZCxcdFx0U0lHS0lMTCwgU0lfS0VSTkVMLFx0XCYjMzQ7dW5rbm93biAyNlwmIzM0O1x0XHRcdH0sXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTQ0Olx0eyBkb19zZWEsXHRcdFNJR0tJTEwsIFNJX0tFUk5FTCxcdFwmIzM0O2xldmVsIC0xIHN5bmNocm9ub3VzIHBhcml0eSBlcnJvciAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcJiMzNDtcdH0sXHQvLyBSZXNlcnZlZCB3aGVuIFJBUyBpcyBpbXBsZW1lbnRlZFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjk0NTpcdHsgZG9fc2VhLFx0XHRTSUdLSUxMLCBTSV9LRVJORUwsXHRcJiMzNDtsZXZlbCAwIHN5bmNocm9ub3VzIHBhcml0eSBlcnJvciAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcJiMzNDtcdH0sXHQvLyBSZXNlcnZlZCB3aGVuIFJBUyBpcyBpbXBsZW1lbnRlZFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjk0NjpcdHsgZG9fc2VhLFx0XHRTSUdLSUxMLCBTSV9LRVJORUwsXHRcJiMzNDtsZXZlbCAxIHN5bmNocm9ub3VzIHBhcml0eSBlcnJvciAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcJiMzNDtcdH0sXHQvLyBSZXNlcnZlZCB3aGVuIFJBUyBpcyBpbXBsZW1lbnRlZFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjk0NzpcdHsgZG9fc2VhLFx0XHRTSUdLSUxMLCBTSV9LRVJORUwsXHRcJiMzNDtsZXZlbCAyIHN5bmNocm9ub3VzIHBhcml0eSBlcnJvciAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcJiMzNDtcdH0sXHQvLyBSZXNlcnZlZCB3aGVuIFJBUyBpcyBpbXBsZW1lbnRlZFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjk0ODpcdHsgZG9fc2VhLFx0XHRTSUdLSUxMLCBTSV9LRVJORUwsXHRcJiMzNDtsZXZlbCAzIHN5bmNocm9ub3VzIHBhcml0eSBlcnJvciAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcJiMzNDtcdH0sXHQvLyBSZXNlcnZlZCB3aGVuIFJBUyBpcyBpbXBsZW1lbnRlZFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTk0OS1cdHsgZG9fYmFkLFx0XHRTSUdLSUxMLCBTSV9LRVJORUwsXHRcJiMzNDt1bmtub3duIDMyXCYjMzQ7XHRcdFx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM0MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEFybTY0IEZhdWx0IEhhbmRsZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGNyYWNrIG9wZW4gYGFyY2gvYXJtNjQvbW0vZmF1bHQuY2AgYW5kIHplcm8gaW4gYXJvdW5kIGxpbmUgODY2LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIGFyY2hpdGVjdHVyZSBoYW5kbGVzIG1lbW9yeSBmYXVsdHMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgdGhlIGZhdWx0IGhhbmRsZXIgYW5kIGhvdyBpdCBkaWZmZXJlbnRpYXRlcyBiZXR3ZWVuIGRpZmZlcmVudCBmYXVsdCBzY2VuYXJpb3MgYW5kIHByaXZpbGVnZSBsZXZlbHMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgZmlndXJlcyBvdXQgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHBhZ2UgZmF1bHQsIGEgZGF0YSBhYm9ydCwgaW5zdHJ1Y3Rpb24gYWJvcnQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5LiBJJiMzOTttIGtlZW4gb24gdHJhY2luZyB0aGUgZGVjaXNpb24gcHJvY2VzczsgaG93IGRvZXMgdGhlIGNvZGUgZGV0ZXJtaW5lIHRoZSBjYXVzZSBvZiB0aGUgYWNjZXNzIHZpb2xhdGlvbiwgYW5kIHRoZW4sIGhvdyBkb2VzIGl0IHJlYWN0PwpJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGxvb2tpbmcgYXQgdGhlIHdheSB0aGUgTU1VIGlzIGludGVycm9nYXRlZCB0byB0cnkgdG8gZGVkdWNlIHRoZSBjYXVzZSBvZiB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL2FybTY0L21tL2ZhdWx0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg2MDpcdFxuIDg2MTpcdHN0YXRpYyBpbnQgZG9fYmFkKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gODYyOlx0e1xuIDg2MzpcdFx0cmV0dXJuIDE7IC8qIFwmIzM0O2ZhdWx0XCYjMzQ7ICovXG4gODY0Olx0fVxuIDg2NTpcdFxuIDg2NjpcdHN0YXRpYyBpbnQgZG9fc2VhKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gODY3Olx0e1xuIDg2ODpcdFx0Y29uc3Qgc3RydWN0IGZhdWx0X2luZm8gKmluZjtcbiA4Njk6XHRcdHVuc2lnbmVkIGxvbmcgc2lhZGRyO1xuIDg3MDpcdFxuIDg3MTpcdFx0aW5mID0gZXNyX3RvX2ZhdWx0X2luZm8oZXNyKTtcbiA4NzI6XHRcbiA4NzM6XHRcdGlmICh1c2VyX21vZGUocmVncykgXHUwMDI2XHUwMDI2IGFwZWlfY2xhaW1fc2VhKHJlZ3MpID09IDApIHtcbiA4NzQ6XHRcdFx0LypcbiA4NzU6XHRcdFx0ICogQVBFSSBjbGFpbWVkIHRoaXMgYXMgYSBmaXJtd2FyZS1maXJzdCBub3RpZmljYXRpb24uXG4gODc2Olx0XHRcdCAqIFNvbWUgcHJvY2Vzc2luZyBkZWZlcnJlZCB0byB0YXNrX3dvcmsgYmVmb3JlIHJldF90b191c2VyKCkuXG4gODc3Olx0XHRcdCAqL1xuIDg3ODpcdFx0XHRyZXR1cm4gMDtcbiA4Nzk6XHRcdH1cbiA4ODA6XHRcbiA4ODE6XHRcdGlmICghdXNlcl9tb2RlKHJlZ3MpIFx1MDAyNlx1MDAyNiBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSlcbiA4ODI6XHRcdFx0cmV0dXJuIDA7XG4gODgzOlx0XG4gODg0Olx0XHRpZiAoZXNyIFx1MDAyNiBFU1JfRUx4X0ZuVikge1xuIDg4NTpcdFx0XHRzaWFkZHIgPSAwO1xuIDg4NjpcdFx0fSBlbHNlIHtcbiA4ODc6XHRcdFx0LypcbiA4ODg6XHRcdFx0ICogVGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpZXMgdGhhdCB0aGUgdGFnIGJpdHMgb2YgRkFSX0VMMSBhcmVcbiA4ODk6XHRcdFx0ICogVU5LTk9XTiBmb3Igc3luY2hyb25vdXMgZXh0ZXJuYWwgYWJvcnRzLiBNYXNrIHRoZW0gb3V0IG5vd1xuIDg5MDpcdFx0XHQgKiBzbyB0aGF0IHVzZXJzcGFjZSBkb2VzbiYjMzk7dCBzZWUgdGhlbS5cbiA4OTE6XHRcdFx0ICovXG4gODkyOlx0XHRcdHNpYWRkciAgPSB1bnRhZ2dlZF9hZGRyKGZhcik7XG4gODkzOlx0XHR9XG4gODk0Olx0XHRhZGRfdGFpbnQoVEFJTlRfTUFDSElORV9DSEVDSywgTE9DS0RFUF9TVElMTF9PSyk7XG4gODk1Olx0XHRhcm02NF9ub3RpZnlfZGllKGluZi1cdTAwM2VuYW1lLCByZWdzLCBpbmYtXHUwMDNlc2lnLCBpbmYtXHUwMDNlY29kZSwgc2lhZGRyLCBlc3IpO1xuIDg5NjpcdFxuIDg5NzpcdFx0cmV0dXJuIDA7XG4gODk4Olx0fVxuIDg5OTpcdFxuIDkwMDpcdHN0YXRpYyBpbnQgZG9fdGFnX2NoZWNrX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcbiA5MDE6XHRcdFx0XHQgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiA5MDI6XHR7XG4gOTAzOlx0XHQvKlxuIDkwNDpcdFx0ICogVGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpZXMgdGhhdCBiaXRzIDYzOjYwIG9mIEZBUl9FTDEgYXJlIFVOS05PV05cbiA5MDU6XHRcdCAqIGZvciB0YWcgY2hlY2sgZmF1bHRzLiBTZXQgdGhlbSB0byBjb3JyZXNwb25kaW5nIGJpdHMgaW4gdGhlIHVudGFnZ2VkXG4gOTA2Olx0XHQgKiBhZGRyZXNzIGlmIEFSTTY0X01URV9GQVIgaXNuJiMzOTt0IHN1cHBvcnRlZC5cbiA5MDc6XHRcdCAqIE90aGVyd2lzZSwgYml0cyA2Mzo2MCBvZiBGQVJfRUwxIGFyZSBub3QgVU5LTk9XTi5cbiA5MDg6XHRcdCAqL1xuIDkwOTpcdFx0aWYgKCFjcHVzX2hhdmVfY2FwKEFSTTY0X01URV9GQVIpKVxuIDkxMDpcdFx0XHRmYXIgPSAoX191bnRhZ2dlZF9hZGRyKGZhcikgXHUwMDI2IH5NVEVfVEFHX01BU0spIHwgKGZhciBcdTAwMjYgTVRFX1RBR19NQVNLKTtcbiA5MTE6XHRcbiA5MTI6XHRcdGRvX2JhZF9hcmVhKGZhciwgZXNyLCByZWdzKTtcbiA5MTM6XHRcdHJldHVybiAwO1xuIDkxNDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ1MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGlzIFBhdGNoOiBBIFF1aWNrIERpdmUgaW50byBFeGNlcHRpb24gSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGdldCByaWdodCBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYGRvX3NlYWAsIHRoZSBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydCBoYW5kbGVyIG9uIGFybTY0LiBJJiMzOTttIHNlZWluZyBpdCBhZGRzIGEgY3J1Y2lhbCBjaGVjazoKCmBgYGMKCWlmICghdXNlcl9tb2RlKHJlZ3MpICZhbXA7JmFtcDsgZml4dXBfZXhjZXB0aW9uKHJlZ3MsIGVzcikpCgkJcmV0dXJuIDA7CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBgZml4dXBfZXhjZXB0aW9uYCBpcyBhY3R1YWxseSAqZG9pbmcqLiBCYXNlZCBvbiB0aGUgY29udGV4dCwgSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0IGl0JiMzOTtzIGhhbmRsaW5nIHNvbWUgc29ydCBvZiBleGNlcHRpb24gZml4LXVwIG1lY2hhbmlzbS4gV2hlcmUmIzM5O3MgaXQgZGVmaW5lZD8gSSYjMzk7bGwgcXVpY2tseSBsb29rIGl0IHVwLCBsaWtlbHkgaW4gYGFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jYCBvciBhIHJlbGF0ZWQgZmlsZS4gSSYjMzk7bSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gcmVzb2x2aW5nIG9yIG1hc2tpbmcgc29tZSBzb3J0IG9mIGV4Y2VwdGlvbiwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0JiMzOTtzIGludm9rZWQgYW5kIHdoYXQgaXQgcmV0dXJucy4gVGhpcyBjb3VsZCBpbnZvbHZlIGFuIGV4Y2VwdGlvbiB0YWJsZSBsb29rdXAsIHBlcmhhcHMgc29tZSByZWdpc3RlciBtYW5pcHVsYXRpb24sIGFuZCBhIHBvc3NpYmxlIHJldHVybiB0byBub3JtYWwgZXhlY3V0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciBpdHMgaGFuZGxpbmcgYWZmZWN0cyB1c2Vyc3BhY2Ugb3IgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zml4dXBfZXhjZXB0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lZmkuaD0xNj1leHRlcm4gdm9pZCBlZmlfaW5pdCh2b2lkKTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWZpLmgtMTctXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VmaS5oOjE4OmJvb2wgZWZpX3J1bnRpbWVfZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBjb25zdCBjaGFyICptc2cpO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lZmkuaC0xOS0jZWxzZVxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWZpLmg9MjI9c3RhdGljIGlubGluZVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lZmkuaDoyMzpib29sIGVmaV9ydW50aW1lX2ZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgY29uc3QgY2hhciAqbXNnKVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lZmkuaC0yNC17XG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9leHRhYmxlLmg9NDM9Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2V4dGFibGUuaC00OS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXh0YWJsZS5oOjUwOmJvb2wgZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVzcik7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2V4dGFibGUuaC01MS0jZW5kaWZcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9lZmkuYz0yMjA9YXNtbGlua2FnZSBlZmlfc3RhdHVzX3QgX19lZmlfcnRfYXNtX3JlY292ZXIodm9pZCk7XG5hcmNoL2FybTY0L2tlcm5lbC9lZmkuYy0yMjEtXG5hcmNoL2FybTY0L2tlcm5lbC9lZmkuYzoyMjI6Ym9vbCBlZmlfcnVudGltZV9maXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGNvbnN0IGNoYXIgKm1zZylcbmFyY2gvYXJtNjQva2VybmVsL2VmaS5jLTIyMy17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL2twcm9iZXMuYz0zMDE9aW50IF9fa3Byb2JlcyBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGZzcilcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMva3Byb2Jlcy5jLTMxMC1cdCAqIG11c3QgYmUgbGVmdCBhbG9uZSBmb3IgdGhlIG5vcm1hbCBwYWdlIGZhdWx0IGhhbmRsZXIsIGluY2x1ZGluZ1xuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL2twcm9iZXMuYzozMTE6XHQgKiBmaXh1cF9leGNlcHRpb24uXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMva3Byb2Jlcy5jLTMxMi1cdCAqL1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL3RyYXBzLmM9NDk1PXZvaWQgZG9fZWwxX2J0aShzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlc3IpXG5hcmNoL2FybTY0L2tlcm5lbC90cmFwcy5jLTQ5Ni17XG5hcmNoL2FybTY0L2tlcm5lbC90cmFwcy5jOjQ5NzpcdGlmIChlZmlfcnVudGltZV9maXh1cF9leGNlcHRpb24ocmVncywgXCYjMzQ7QlRJIHZpb2xhdGlvblwmIzM0OykpIHtcbmFyY2gvYXJtNjQva2VybmVsL3RyYXBzLmMtNDk4LVx0XHRyZWdzLVx1MDAzZXBzdGF0ZSBcdTAwMjY9IH5QU1JfQlRZUEVfTUFTSztcbi0tXG5hcmNoL2FybTY0L21tL2V4dGFibGUuYz02OT1leF9oYW5kbGVyX2xvYWRfdW5hbGlnbmVkX3plcm9wYWQoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsXG4tLVxuYXJjaC9hcm02NC9tbS9leHRhYmxlLmMtOTQtXG5hcmNoL2FybTY0L21tL2V4dGFibGUuYzo5NTpib29sIGZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlc3IpXG5hcmNoL2FybTY0L21tL2V4dGFibGUuYy05Ni17XG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jPTQwNT1zdGF0aWMgdm9pZCBfX2RvX2tlcm5lbF9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZXNyLFxuLS1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy00MTMtXHQgKi9cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo0MTQ6XHRpZiAoIWlzX2VsMV9pbnN0cnVjdGlvbl9hYm9ydChlc3IpIFx1MDAyNlx1MDAyNiBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSlcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy00MTUtXHRcdHJldHVybjtcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNDUwLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjQ1MTpcdGlmIChlZmlfcnVudGltZV9maXh1cF9leGNlcHRpb24ocmVncywgbXNnKSlcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy00NTItXHRcdHJldHVybjtcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9ODY2PXN0YXRpYyBpbnQgZG9fc2VhKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTg4MC1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo4ODE6XHRpZiAoIXVzZXJfbW9kZShyZWdzKSBcdTAwMjZcdTAwMjYgZml4dXBfZXhjZXB0aW9uKHJlZ3MsIGVzcikpXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtODgyLVx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk0NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgZml4dXBfZXhjZXB0aW9uYCBpbiBgZXh0YWJsZS5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGZpeHVwX2V4Y2VwdGlvbmAgaXMgYWN0dWFsbHkgZG9pbmcgd2l0aGluIGBhcmNoL2FybTY0L21tL2V4dGFibGUuY2AuIEkmIzM5O20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgZXhjZXB0aW9uIHRhYmxlIG1lY2hhbmlzbXMgaW4gdGhlIGtlcm5lbCwgZXNwZWNpYWxseSBvbiBBUk02NCwgYnV0IEkgd2FudCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgKnRoaXMqIHNwZWNpZmljIGZ1bmN0aW9uLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIGV4Y2VwdGlvbnMgdGhhdCBhcmlzZSB3aXRoaW4gZXhjZXB0aW9uIHRhYmxlcyAtIGVzc2VudGlhbGx5LCB0aGUgZXhjZXB0aW9uIHRvIHRoZSBleGNlcHRpb24gaGFuZGxpbmcsIGlmIHlvdSB3aWxsLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgaG93IHRoZSBjb2RlIGRldGVybWluZXMgaWYgYW4gZXhjZXB0aW9uIGNhbiBiZSByZWNvdmVyZWQgZnJvbSwgYW5kIGlmIHNvLCBob3cgaXQganVtcHMgdG8gdGhlIGFwcHJvcHJpYXRlIGZpeHVwIGhhbmRsZXIuIEkmIzM5O20ga2VlbiB0byBzcG90IGFueSBlZGdlIGNhc2VzIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGludGVyYWN0aW9ucyB3aXRoIGNvbmN1cnJlbnQgcHJvY2Vzc2VzIGFuZCBpbnRlcnJ1cHRzLCBzaW5jZSB3ZSBhcmUgdGFsa2luZyBhYm91dCBleGNlcHRpb24gaGFuZGxpbmcgYXQgc3VjaCBhIGxvdyBsZXZlbC4gQXJlIHRoZXJlIGFueSB1bnVzdWFsIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgb3IgaW5zdHJ1Y3Rpb24gb3JkZXJpbmcgdGhhdCBhcmUgd29ydGggbm90aW5nPyBJIGhvcGUgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZnVuY3Rpb24mIzM5O3MgbG9naWMgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIGNvZGUsIHNvIEkgY2FuIGVuc3VyZSB0aGUgY29kZSB0aGF0IHVzZXMgdGhpcyBmdW5jdGlvbiBpcyBvcHRpbWl6ZWQgYW5kIGRvZXMgbm90IGNhdXNlIHVuZXhwZWN0ZWQgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbW0vZXh0YWJsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5MDpcdFxuICA5MTpcdFx0cmVncy1cdTAwM2VwYyA9IGdldF9leF9maXh1cChleCk7XG4gIDkyOlx0XHRyZXR1cm4gdHJ1ZTtcbiAgOTM6XHR9XG4gIDk0Olx0XG4gIDk1Olx0Ym9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXNyKVxuICA5NjpcdHtcbiAgOTc6XHRcdGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4O1xuICA5ODpcdFxuICA5OTpcdFx0ZXggPSBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpKTtcbiAxMDA6XHRcdGlmICghZXgpXG4gMTAxOlx0XHRcdHJldHVybiBmYWxzZTtcbiAxMDI6XHRcbiAxMDM6XHRcdHN3aXRjaCAoZXgtXHUwMDNldHlwZSkge1xuIDEwNDpcdFx0Y2FzZSBFWF9UWVBFX0JQRjpcbiAxMDU6XHRcdFx0cmV0dXJuIGV4X2hhbmRsZXJfYnBmKGV4LCByZWdzKTtcbiAxMDY6XHRcdGNhc2UgRVhfVFlQRV9VQUNDRVNTX0VSUl9aRVJPOlxuIDEwNzpcdFx0Y2FzZSBFWF9UWVBFX0tBQ0NFU1NfRVJSX1pFUk86XG4gMTA4Olx0XHRcdHJldHVybiBleF9oYW5kbGVyX3VhY2Nlc3NfZXJyX3plcm8oZXgsIHJlZ3MpO1xuIDEwOTpcdFx0Y2FzZSBFWF9UWVBFX1VBQ0NFU1NfQ1BZOlxuIDExMDpcdFx0XHRyZXR1cm4gZXhfaGFuZGxlcl91YWNjZXNzX2NweShleCwgcmVncywgZXNyKTtcbiAxMTE6XHRcdGNhc2UgRVhfVFlQRV9MT0FEX1VOQUxJR05FRF9aRVJPUEFEOlxuIDExMjpcdFx0XHRyZXR1cm4gZXhfaGFuZGxlcl9sb2FkX3VuYWxpZ25lZF96ZXJvcGFkKGV4LCByZWdzKTtcbiAxMTM6XHRcdH1cbiAxMTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY1OAoJCQkJCQkJb3V0cHV0OiAxNzkKCQkJCQkJCXRob3VnaHRzOiA4MzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXBwbGljYWJpbGl0eSBBc3Nlc3NtZW50IGZvciBTeW5jaHJvbm91cyBFeHRlcm5hbCBBYm9ydCBGaXgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIEtNU0FOIGlzIHJlbGV2YW50IGhlcmUuIEZpcnN0LCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaXMgYWJvdXQgaGFuZGxpbmcgU3luY2hyb25vdXMgRXh0ZXJuYWwgQWJvcnRzIChTRUFzKSBvbiBFTDEsIHNwZWNpZmljYWxseSBpbiBgYXJjaC9hcm02NC9tbS9mYXVsdC5jYC4gV2hlbiBhbiBTRUEgaGFwcGVucyAobGlrZSBkdXJpbmcga2VybmVsIG9yIHVhY2Nlc3MgbWVtb3J5IGFjY2VzcywgdGhpbmsgYGNvcHlfZnJvbV91c2VyYCBvciB0aGUgbGlrZSksIHRoZSBgZG9fc2VhYCBmdW5jdGlvbiBub3cgY2hlY2tzIGlmIHRoZSBmYXVsdCBvY2N1cnJlZCBpbiBrZXJuZWwgbW9kZS4gSWYgc28sIGl0IGNhbGxzIGBmaXh1cF9leGNlcHRpb25gIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbiBleGNlcHRpb24gaGFuZGxlciBhdmFpbGFibGUuIElmIGEgaGFuZGxlciBleGlzdHMgKHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGhhbmRsZXJzIGZvciB0aGluZ3MgbGlrZSB1YWNjZXNzLCBCUEYsIG9yIGBnZXRfdXNlcmAgc2NlbmFyaW9zKSwgYGZpeHVwX2V4Y2VwdGlvbmAgZG9lcyBpdHMgam9iOiBpdCBmaXhlcyB0aGUgcmVnaXN0ZXJzICh6ZXJvaW5nIHRoZSBkZXN0aW5hdGlvbiwgc2V0dGluZyBhbiBlcnJvciByZXR1cm4sIGFuZCBhZGp1c3RpbmcgdGhlIHByb2dyYW0gY291bnRlciB0byB0aGUgZml4dXAgYWRkcmVzcykuIFRoaXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ3JhY2VmdWxseSBoYW5kbGUgdGhlIGZhdWx0IChsaWtlIHJldHVybmluZyBgLUVGQVVMVGApIGluc3RlYWQgb2YgaW1tZWRpYXRlbHkgcGFuaWNraW5nIHZpYSBgYXJtNjRfbm90aWZ5X2RpZWAuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBLTVNBTiBjb25jZXJucyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeT8gTGV0JiMzOTtzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC4KCjEuICAqKktlcm5lbCBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlOioqIE5vcGUuIFRoaXMgcGF0Y2ggaXNuJiMzOTt0IG1vZGlmeWluZyBvciBpbnRyb2R1Y2luZyBhbnkgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHRoZW4gcGFzc2VkIHRvIHVzZXJzcGFjZSB2aWEgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIGBuZXRsaW5rYCwgYGlvY3RsYCwgb3IgYW55dGhpbmcgc2ltaWxhci4gTm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZmllbGRzLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBOb3BlLiBUaGUgdmFyaWFibGVzIGludm9sdmVkIGluIGBkb19zZWFgIChgcmVnc2AgYW5kIGBlc3JgKSBhcmUgcGFyYW1ldGVycyBwcm92aWRlZCBieSBsb3ctbGV2ZWwgZXhjZXB0aW9uIGVudHJ5LiBUaGV5IGFyZSBub3QgdW5pbml0aWFsaXplZC4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uczoqKiBOb3BlLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgaW52b2x2ZWQgaW4gdGhpcyBwYXRjaCBhdCBhbGwuCjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgbG9naWMgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBieXRlczoqKiBOb3BlLiBUaGlzIGlzbiYjMzk7dCBtYW5pcHVsYXRpbmcgYnVmZmVycyBvciBhbHRlcmluZyBob3cgYm91bmRzIGNoZWNrcyBhcmUgcGVyZm9ybWVkIGluIGEgd2F5IHRoYXQgd291bGQgaW50cm9kdWNlIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLgo1LiAgKipFeGNlcHRpb24gZml4dXA6KiogU3BlY2lmaWNhbGx5LCBzdGFuZGFyZCBmaXh1cCByb3V0aW5lcyB6ZXJvIG91dCB0aGUgcmVtYWluaW5nIGRlc3RpbmF0aW9uIGJ1ZmZlciBvciBzZXQgdGhlIGVycm9yIHJlZ2lzdGVyLiBLTVNBTiBhbHNvIGRvZXNuJiMzOTt0IHN1cHBvcnQgYXJtNjQgaW4gb2xkZXIga2VybmVscyBvciBydW5zIG9uIHg4Nl82NCwgYnV0IGV2ZW4gY29uY2VwdHVhbGx5LCBleGNlcHRpb24gdGFibGUgZml4dXAgZm9yIHN5bmNocm9ub3VzIGV4dGVybmFsIGFib3J0cyBpcyBhbiBhcmNoaXRlY3R1cmUgZXhjZXB0aW9uIGhhbmRsaW5nIC8gZmF1bHQgcmVjb3ZlcnkgbWVjaGFuaXNtLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3Mgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpTbywgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayBhZ2Fpbi4gV2hhdCB3YXMgdGhpcyAqYWN0dWFsbHkqIGZpeGluZz8gSXQmIzM5O3MgZml4aW5nIGEgc2l0dWF0aW9uIHdoZXJlIGFuIFNFQSBkdXJpbmcgRUwxIHVhY2Nlc3Mgb3IgbWVtb3J5IGFjY2VzcyB3YXMgY2F1c2luZyBhIGtlcm5lbCBwYW5pYywgd2hlbiBpbnN0ZWFkIGl0IHNob3VsZCBiZSB0YWtpbmcgdGhlIGV4Y2VwdGlvbiB0YWJsZSBmaXh1cCBwYXRoICh3aGljaCB3aWxsIHJldHVybiBgLUVGQVVMVGApLgoKS0FTQU4sIExPQ0tERVAsIG90aGVyIGRldGVjdG9ycyB2cy4gS01TQU46IFRoaXMgaXMgbG93LWxldmVsIEFSTTY0IGV4Y2VwdGlvbiBoYW5kbGluZyBsb2dpYy4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcywgbm8gbWVtb3J5IGFsbG9jYXRpb25zLCBubyBidWZmZXIgaGFuZGxpbmcsIG5vIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gS01TQU4gaXMganVzdCBub3QgYXBwbGljYWJsZSBoZXJlLiBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLgoKTXkgcmVhc29uaW5nLCBzdHJ1Y3R1cmVkIGNsZWFybHksIGlzIHRoaXM6CgoqICAgKipQYXRjaCBTdW1tYXJ5OioqIFRoZSBwYXRjaCB1cGRhdGVzIGBhcmNoL2FybTY0L21tL2ZhdWx0LmNgIHRvIGludm9rZSBgZml4dXBfZXhjZXB0aW9uKClgIGluIGBkb19zZWEoKWAgd2hlbiBhbiBFTDEgU0VBIG9jY3Vycy4gVGhpcyBlbmFibGVzIGtlcm5lbCBleGNlcHRpb24gZml4dXAgaGFuZGxlcnMgKHBhcnRpY3VsYXJseSBmb3IgdWFjY2VzcykgdG8gaGFuZGxlIHRoZSBmYXVsdCwgYXZvaWRpbmcgYSBrZXJuZWwgcGFuaWMuCiogICAqKktNU0FOIENvbnRyYXN0OioqIEtNU0FOIGlzIGZvciBkZXRlY3RpbmcgdXNlcyBhbmQgbGVha3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgcGF0Y2ggKmRvZXNuJiMzOTt0KiBpbnRyb2R1Y2UgbmV3IHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiwgb3IgY3JlYXRlIHBhdGhzIHRoYXQgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGNoYW5nZSBvbmx5IGFmZmVjdHMgZXhjZXB0aW9uIHJvdXRpbmcgZm9yIFNFQXMgb24gQVJNNjQuIFRoZXJlZm9yZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIHJpc2ssIG5vIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgbm8gbmVlZCBmb3IgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIG15IGFzc2Vzc21lbnQuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBkb19zZWEoKWAgaW4gYGFyY2gvYXJtNjQvbW0vZmF1bHQuY2AgdG8gYXR0ZW1wdCBleGNlcHRpb24gZml4dXAgdmlhIGBmaXh1cF9leGNlcHRpb24oKWAgd2hlbiBhIFN5bmNocm9ub3VzIEV4dGVybmFsIEFib3J0IChTRUEpIG9jY3VycyBpbiBrZXJuZWwgbW9kZSAoYCF1c2VyX21vZGUocmVncylgKSwgYWxsb3dpbmcgZ3JhY2VmdWwgcmVjb3ZlcnkgKGUuZy4sIHJldHVybmluZyAtRUZBVUxUIGZvciB1YWNjZXNzIGZhdWx0cykgaW5zdGVhZCBvZiBkeWluZy5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGxvdy1sZXZlbCBhcmNoaXRlY3R1cmUgZmF1bHQvZXhjZXB0aW9uIGhhbmRsaW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IG1vZGlmeSBkYXRhIHN0cnVjdHVyZSBmaWVsZHMgb3IgcGFkZGluZywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBpbml0aWFsaXphdGlvbiBsb2dpYywgYW5kIGRvZXMgbm90IGNvcHkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZS4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGRvX3NlYSgpYCBpbiBgYXJjaC9hcm02NC9tbS9mYXVsdC5jYCB0byBhdHRlbXB0IGV4Y2VwdGlvbiBmaXh1cCB2aWEgYGZpeHVwX2V4Y2VwdGlvbigpYCB3aGVuIGEgU3luY2hyb25vdXMgRXh0ZXJuYWwgQWJvcnQgKFNFQSkgb2NjdXJzIGluIGtlcm5lbCBtb2RlIChgIXVzZXJfbW9kZShyZWdzKWApLCBhbGxvd2luZyBncmFjZWZ1bCByZWNvdmVyeSAoZS5nLiwgcmV0dXJuaW5nIC1FRkFVTFQgZm9yIHVhY2Nlc3MgZmF1bHRzKSBpbnN0ZWFkIG9mIGR5aW5nLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgbG93LWxldmVsIGFyY2hpdGVjdHVyZSBmYXVsdC9leGNlcHRpb24gaGFuZGxpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgc3RydWN0dXJlIGZpZWxkcyBvciBwYWRkaW5nLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGluaXRpYWxpemF0aW9uIGxvZ2ljLCBhbmQgZG9lcyBub3QgY29weSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjI0OjA2LjY3NzQ3NjcwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjM2MTQwMTYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmaXh1cF9leGNlcHRpb25cIixcbiAgICBcImRvX3NlYVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGRvX3NlYSgpYCBpbiBgYXJjaC9hcm02NC9tbS9mYXVsdC5jYCB0byBhdHRlbXB0IGV4Y2VwdGlvbiBmaXh1cCB2aWEgYGZpeHVwX2V4Y2VwdGlvbigpYCB3aGVuIGEgU3luY2hyb25vdXMgRXh0ZXJuYWwgQWJvcnQgKFNFQSkgb2NjdXJzIGluIGtlcm5lbCBtb2RlIChgIXVzZXJfbW9kZShyZWdzKWApLCBhbGxvd2luZyBncmFjZWZ1bCByZWNvdmVyeSAoZS5nLiwgcmV0dXJuaW5nIC1FRkFVTFQgZm9yIHVhY2Nlc3MgZmF1bHRzKSBpbnN0ZWFkIG9mIGR5aW5nLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBsb3ctbGV2ZWwgYXJjaGl0ZWN0dXJlIGZhdWx0L2V4Y2VwdGlvbiBoYW5kbGluZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmUgZmllbGRzIG9yIHBhZGRpbmcsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMsIGFuZCBkb2VzIG5vdCBjb3B5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UuIENvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbGxvd3Mga2VybmVsLW1vZGUgc3luY2hyb25vdXMgZXh0ZXJuYWwgYWJvcnRzIChTRUEpIHRvIGJlIHJlY292ZXJlZCB1c2luZyBleGNlcHRpb24gZml4dXAgdGFibGVzIGluc3RlYWQgb2YgaW1tZWRpYXRlbHkgcGFuaWNraW5nLiBUaGlzIG1vZGlmaWVzIGNvcmUgQVJNNjQgZmF1bHQgaGFuZGxpbmcgbG9naWMgcmVhY2hhYmxlIGR1cmluZyBrZXJuZWwgbWVtb3J5IGFjY2Vzc2VzIHRoYXQgZmF1bHQgd2l0aCBTRUEuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjI0OjA2LjY3NzQ4ODUyMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5OTk3ODg1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZkYTc4ZWY3ZGMwZjg0N2Y3ZWZhNGE5NTIxMzJhMjk4NmUyM2U0MzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjcgMjM6MjQ6MDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9mYXVsdC5jIGIvYXJjaC9hcm02NC9tbS9mYXVsdC5jXFxuaW5kZXggMGI1MjU1NzY1MmJlNi4uY2EzOTZiNGJkZGEwMyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L21tL2ZhdWx0LmNcXG4rKysgYi9hcmNoL2FybTY0L21tL2ZhdWx0LmNcXG5AQCAtODc4LDYgKzg3OCw5IEBAIHN0YXRpYyBpbnQgZG9fc2VhKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoIXVzZXJfbW9kZShyZWdzKSBcXHUwMDI2XFx1MDAyNiBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHRpZiAoZXNyIFxcdTAwMjYgRVNSX0VMeF9GblYpIHtcXG4gXFx0XFx0c2lhZGRyID0gMDtcXG4gXFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6MjQ6MDguMTc4MTM0NDY4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo5NzEzODkwNTE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmaXh1cF9leGNlcHRpb25cIixcbiAgICBcImRvX3NlYVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsbG93cyBrZXJuZWwtbW9kZSBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydHMgKFNFQSkgdG8gYmUgcmVjb3ZlcmVkIHVzaW5nIGV4Y2VwdGlvbiBmaXh1cCB0YWJsZXMgaW5zdGVhZCBvZiBpbW1lZGlhdGVseSBwYW5pY2tpbmcuIFRoaXMgbW9kaWZpZXMgY29yZSBBUk02NCBmYXVsdCBoYW5kbGluZyBsb2dpYyByZWFjaGFibGUgZHVyaW5nIGtlcm5lbCBtZW1vcnkgYWNjZXNzZXMgdGhhdCBmYXVsdCB3aXRoIFNFQS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmRhNzhlZjdkYzBmODQ3ZjdlZmE0YTk1MjEzMmEyOTg2ZTIzZTQzMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDIzOjI0OjA0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9mYXVsdC5jIGIvYXJjaC9hcm02NC9tbS9mYXVsdC5jXG5pbmRleCAwYjUyNTU3NjUyYmU2Li5jYTM5NmI0YmRkYTAzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9tbS9mYXVsdC5jXG4rKysgYi9hcmNoL2FybTY0L21tL2ZhdWx0LmNcbkBAIC04NzgsNiArODc4LDkgQEAgc3RhdGljIGludCBkb19zZWEodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4rXHRpZiAoIXVzZXJfbW9kZShyZWdzKSBcdTAwMjZcdTAwMjYgZml4dXBfZXhjZXB0aW9uKHJlZ3MsIGVzcikpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0aWYgKGVzciBcdTAwMjYgRVNSX0VMeF9GblYpIHtcbiBcdFx0c2lhZGRyID0gMDtcbiBcdH0gZWxzZSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzoyNDowOC4xNzgxMzU4NzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDE3ODIwODU3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZhdWx0IEhhbmRsaW5nIENvZGUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGRpZmYgc2hvd3MgYSBjaGFuZ2UgaW4gYGFyY2gvYXJtNjQvbW0vZmF1bHQuY2AuIFNwZWNpZmljYWxseSwgdGhlcmUncyBhIG5ldyBgaWZgIHN0YXRlbWVudCBpbnRyb2R1Y2VkIGluIHRoZSBgZG9fc2VhYCBmdW5jdGlvbi4gSSByZWNvZ25pemUgdGhhdCBmdW5jdGlvbiBhcyByZWxhdGVkIHRvIFN5c3RlbSBFcnJvciBBYm9ydCAoU0VBKSBoYW5kbGluZyBvbiBBUk02NCwgZGVhbGluZyB3aXRoIGFzeW5jaHJvbm91cyBhYm9ydHMuIFRoZSBhZGRlZCBjb25kaXRpb24gY2hlY2tzIGlmIHRoZSBleGNlcHRpb24gaXMgKm5vdCogaW4gdXNlciBtb2RlLCBhbmQgdGhlbiBjYWxscyBgZml4dXBfZXhjZXB0aW9uYCB3aXRoIHRoZSByZWdpc3RlciBzdGF0ZSBhbmQgRVNSLiBJZiBgZml4dXBfZXhjZXB0aW9uYCByZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUsIHRoZW4gdGhlIGNvZGUgcmV0dXJucy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBgZml4dXBfZXhjZXB0aW9uYCBkb2VzLiBJdCBzZWVtcyBsaWtlIHRoZSBuZXcgY29kZSBpcyBhdHRlbXB0aW5nIHRvIGhhbmRsZSBrZXJuZWwgZXhjZXB0aW9ucy4gSSBzaG91bGQgYmUgYWJsZSB0byBkZWR1Y2UgdGhlIGdlbmVyYWwgaWRlYSwgYnV0IHNpbmNlIHRoaXMgZGVhbHMgd2l0aCBrZXJuZWwtbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGVycm9yIGhhbmRsaW5nLCBJIG5lZWQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuIEknbGwgbG9hZCB0aGUgYGFyY2gvYXJtNjQvbW0vZmF1bHQuY2AgZmlsZSBmcm9tIHRoZSBzb3VyY2UgYW5kIGJyb3dzZSB0aGUgc3Vycm91bmRpbmcgY29kZSwgZXNwZWNpYWxseSBsb29raW5nIGF0IHRoZSBkZWZpbml0aW9ucyBvZiBgdXNlcl9tb2RlYCBhbmQgYGZpeHVwX2V4Y2VwdGlvbmAsIGFuZCBhbHNvIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZmF1bHQgaGFuZGxpbmcgbG9naWMuIFRoaXMgYWRkaXRpb24gZGVmaW5pdGVseSBzdWdnZXN0cyBhIG5lZWQgdG8gcG90ZW50aWFsbHkgaGFuZGxlIG9yIGNvcnJlY3Qgc3BlY2lmaWMga2VybmVsIGV4Y2VwdGlvbnMgYmVmb3JlIHJlc29ydGluZyB0byBhIG1vcmUgZHJhc3RpYyBlcnJvciBoYW5kbGluZyBwcm9jZWR1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgZXJyb3JzIGl0J3MgdHJ5aW5nIHRvIG1pdGlnYXRlLCBhbmQgd2h5IGl0IHdhc24ndCB0aGVyZSBiZWZvcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzoyNDoxOC4zNTYzNTEzMjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTUxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9hcm02NC9tbS9mYXVsdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg1MDpcXHRcXG4gODUxOlxcdHN0YXRpYyBpbnQgZG9fYWxpZ25tZW50X2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcXG4gODUyOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiA4NTM6XFx0e1xcbiA4NTQ6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NPTVBBVF9BTElHTk1FTlRfRklYVVBTKSBcXHUwMDI2XFx1MDAyNlxcbiA4NTU6XFx0XFx0ICAgIGNvbXBhdF91c2VyX21vZGUocmVncykpXFxuIDg1NjpcXHRcXHRcXHRyZXR1cm4gZG9fY29tcGF0X2FsaWdubWVudF9maXh1cChmYXIsIHJlZ3MpO1xcbiA4NTc6XFx0XFx0ZG9fYmFkX2FyZWEoZmFyLCBlc3IsIHJlZ3MpO1xcbiA4NTg6XFx0XFx0cmV0dXJuIDA7XFxuIDg1OTpcXHR9XFxuIDg2MDpcXHRcXG4gODYxOlxcdHN0YXRpYyBpbnQgZG9fYmFkKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIDg2MjpcXHR7XFxuIDg2MzpcXHRcXHRyZXR1cm4gMTsgLyogXFxcImZhdWx0XFxcIiAqL1xcbiA4NjQ6XFx0fVxcbiA4NjU6XFx0XFxuIDg2NjpcXHRzdGF0aWMgaW50IGRvX3NlYSh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiA4Njc6XFx0e1xcbiA4Njg6XFx0XFx0Y29uc3Qgc3RydWN0IGZhdWx0X2luZm8gKmluZjtcXG4gODY5OlxcdFxcdHVuc2lnbmVkIGxvbmcgc2lhZGRyO1xcbiA4NzA6XFx0XFxuIDg3MTpcXHRcXHRpbmYgPSBlc3JfdG9fZmF1bHRfaW5mbyhlc3IpO1xcbiA4NzI6XFx0XFxuIDg3MzpcXHRcXHRpZiAodXNlcl9tb2RlKHJlZ3MpIFxcdTAwMjZcXHUwMDI2IGFwZWlfY2xhaW1fc2VhKHJlZ3MpID09IDApIHtcXG4gODc0OlxcdFxcdFxcdC8qXFxuIDg3NTpcXHRcXHRcXHQgKiBBUEVJIGNsYWltZWQgdGhpcyBhcyBhIGZpcm13YXJlLWZpcnN0IG5vdGlmaWNhdGlvbi5cXG4gODc2OlxcdFxcdFxcdCAqIFNvbWUgcHJvY2Vzc2luZyBkZWZlcnJlZCB0byB0YXNrX3dvcmsgYmVmb3JlIHJldF90b191c2VyKCkuXFxuIDg3NzpcXHRcXHRcXHQgKi9cXG4gODc4OlxcdFxcdFxcdHJldHVybiAwO1xcbiA4Nzk6XFx0XFx0fVxcbiA4ODA6XFx0XFxuIDg4MTpcXHRcXHRpZiAoIXVzZXJfbW9kZShyZWdzKSBcXHUwMDI2XFx1MDAyNiBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSlcXG4gODgyOlxcdFxcdFxcdHJldHVybiAwO1xcbiA4ODM6XFx0XFxuIDg4NDpcXHRcXHRpZiAoZXNyIFxcdTAwMjYgRVNSX0VMeF9GblYpIHtcXG4gODg1OlxcdFxcdFxcdHNpYWRkciA9IDA7XFxuIDg4NjpcXHRcXHR9IGVsc2Uge1xcbiA4ODc6XFx0XFx0XFx0LypcXG4gODg4OlxcdFxcdFxcdCAqIFRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWVzIHRoYXQgdGhlIHRhZyBiaXRzIG9mIEZBUl9FTDEgYXJlXFxuIDg4OTpcXHRcXHRcXHQgKiBVTktOT1dOIGZvciBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydHMuIE1hc2sgdGhlbSBvdXQgbm93XFxuIDg5MDpcXHRcXHRcXHQgKiBzbyB0aGF0IHVzZXJzcGFjZSBkb2Vzbid0IHNlZSB0aGVtLlxcbiA4OTE6XFx0XFx0XFx0ICovXFxuIDg5MjpcXHRcXHRcXHRzaWFkZHIgID0gdW50YWdnZWRfYWRkcihmYXIpO1xcbiA4OTM6XFx0XFx0fVxcbiA4OTQ6XFx0XFx0YWRkX3RhaW50KFRBSU5UX01BQ0hJTkVfQ0hFQ0ssIExPQ0tERVBfU1RJTExfT0spO1xcbiA4OTU6XFx0XFx0YXJtNjRfbm90aWZ5X2RpZShpbmYtXFx1MDAzZW5hbWUsIHJlZ3MsIGluZi1cXHUwMDNlc2lnLCBpbmYtXFx1MDAzZWNvZGUsIHNpYWRkciwgZXNyKTtcXG4gODk2OlxcdFxcbiA4OTc6XFx0XFx0cmV0dXJuIDA7XFxuIDg5ODpcXHR9XFxuIDg5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6MjQ6MTguMzU2NDY4MjM4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTUxNjkxMTE5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgQ29kZSBDaGFuZ2UqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UgYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpcyB0aGUgY29udGV4dC4gSSBzZWUgYGZpeHVwX2V4Y2VwdGlvbmAgYW5kIGBkb19zZWFgIG1lbnRpb25lZC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlaXIgcm9sZS4gQXJlIHdlIGZpeGluZyBhbiBleGNlcHRpb24gaGFuZGxpbmcgaXNzdWU/IElzIHRoaXMgcmVsYXRlZCB0byBzb21lIFNlYSBvYmplY3QgaW50ZXJhY3Rpb25zPyBXaGF0J3MgdGhlICp3aHkqIGJlaGluZCB0aGlzIGFsdGVyYXRpb24/XG5cbk15IGJyYWluJ3MgYWxyZWFkeSBmaXJpbmcgdXAgdGhlIHNlYXJjaCB0b29scy4gSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCwgaG93IHRoZXkncmUgdXNlZCwgYW5kIHdoYXQncyBjaGFuZ2VkIGluIHRoZWlyIGJlaGF2aW9yLiBBIHF1aWNrIGBncmVwYCBmb3IgYm90aCBmdW5jdGlvbiBuYW1lcyBhY3Jvc3MgdGhlIGNvZGViYXNlIGlzIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAuIFRoYXQgc2hvdWxkIHByb3ZpZGUgdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBIb3BlZnVsbHksIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgdGVsbCB0aGUgc3RvcnkuIExldCdzIHNlZSB3aGF0IHRoZSBncmVwIHJlc3VsdHMgdW5jb3Zlci4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDMyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzoyNDoyNy44NzMzODE4MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODMyMjk2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19zZWFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2tlcm5lbC9hY3BpLmM9Mjk1PXZvaWQgX19pb21lbSAqYWNwaV9vc19pb3JlbWFwKGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBwaHlzLCBhY3BpX3NpemUgc2l6ZSlcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2FjcGkuYy0zODUtICpcXG5hcmNoL2FybTY0L2tlcm5lbC9hY3BpLmM6Mzg2OiAqIFVzZWQgYnkgS1ZNIGFuZCB0aGUgYXJjaCBkb19zZWEgaGFuZGxlci5cXG5hcmNoL2FybTY0L2tlcm5lbC9hY3BpLmMtMzg3LSAqIEByZWdzIG1heSBiZSBOVUxMIHdoZW4gY2FsbGVkIGZyb20gcHJvY2VzcyBjb250ZXh0Llxcbi0tXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jPTg2MT1zdGF0aWMgaW50IGRvX2JhZCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTg2NS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6ODY2OnN0YXRpYyBpbnQgZG9fc2VhKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTg2Ny17XFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9OTE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmF1bHRfaW5mbyBmYXVsdF9pbmZvW10gPSB7XFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtOTMyLVxcdHsgZG9fcGFnZV9mYXVsdCxcXHRTSUdTRUdWLCBTRUdWX0FDQ0VSUixcXHRcXFwibGV2ZWwgMyBwZXJtaXNzaW9uIGZhdWx0XFxcIlxcdH0sXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjkzMzpcXHR7IGRvX3NlYSxcXHRcXHRTSUdCVVMsICBCVVNfT0JKRVJSLFxcdFxcXCJzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydFxcXCJcXHR9LFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05MzQtXFx0eyBkb190YWdfY2hlY2tfZmF1bHQsXFx0U0lHU0VHViwgU0VHVl9NVEVTRVJSLFxcdFxcXCJzeW5jaHJvbm91cyB0YWcgY2hlY2sgZmF1bHRcXFwiXFx0fSxcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtOTM1LVxcdHsgZG9fYmFkLFxcdFxcdFNJR0tJTEwsIFNJX0tFUk5FTCxcXHRcXFwidW5rbm93biAxOFxcXCJcXHRcXHRcXHR9LFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5MzY6XFx0eyBkb19zZWEsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJsZXZlbCAtMSAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcXFwiXFx0fSxcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTM3OlxcdHsgZG9fc2VhLFxcdFxcdFNJR0tJTEwsIFNJX0tFUk5FTCxcXHRcXFwibGV2ZWwgMCAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcXFwiXFx0fSxcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTM4OlxcdHsgZG9fc2VhLFxcdFxcdFNJR0tJTEwsIFNJX0tFUk5FTCxcXHRcXFwibGV2ZWwgMSAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcXFwiXFx0fSxcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTM5OlxcdHsgZG9fc2VhLFxcdFxcdFNJR0tJTEwsIFNJX0tFUk5FTCxcXHRcXFwibGV2ZWwgMiAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcXFwiXFx0fSxcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTQwOlxcdHsgZG9fc2VhLFxcdFxcdFNJR0tJTEwsIFNJX0tFUk5FTCxcXHRcXFwibGV2ZWwgMyAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcXFwiXFx0fSxcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTQxOlxcdHsgZG9fc2VhLFxcdFxcdFNJR0JVUywgIEJVU19PQkpFUlIsXFx0XFxcInN5bmNocm9ub3VzIHBhcml0eSBvciBFQ0MgZXJyb3JcXFwiIH0sXFx0Ly8gUmVzZXJ2ZWQgd2hlbiBSQVMgaXMgaW1wbGVtZW50ZWRcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtOTQyLVxcdHsgZG9fYmFkLFxcdFxcdFNJR0tJTEwsIFNJX0tFUk5FTCxcXHRcXFwidW5rbm93biAyNVxcXCJcXHRcXHRcXHR9LFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05NDMtXFx0eyBkb19iYWQsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJ1bmtub3duIDI2XFxcIlxcdFxcdFxcdH0sXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjk0NDpcXHR7IGRvX3NlYSxcXHRcXHRTSUdLSUxMLCBTSV9LRVJORUwsXFx0XFxcImxldmVsIC0xIHN5bmNocm9ub3VzIHBhcml0eSBlcnJvciAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcXFwiXFx0fSxcXHQvLyBSZXNlcnZlZCB3aGVuIFJBUyBpcyBpbXBsZW1lbnRlZFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5NDU6XFx0eyBkb19zZWEsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJsZXZlbCAwIHN5bmNocm9ub3VzIHBhcml0eSBlcnJvciAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcXFwiXFx0fSxcXHQvLyBSZXNlcnZlZCB3aGVuIFJBUyBpcyBpbXBsZW1lbnRlZFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5NDY6XFx0eyBkb19zZWEsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJsZXZlbCAxIHN5bmNocm9ub3VzIHBhcml0eSBlcnJvciAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcXFwiXFx0fSxcXHQvLyBSZXNlcnZlZCB3aGVuIFJBUyBpcyBpbXBsZW1lbnRlZFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5NDc6XFx0eyBkb19zZWEsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJsZXZlbCAyIHN5bmNocm9ub3VzIHBhcml0eSBlcnJvciAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcXFwiXFx0fSxcXHQvLyBSZXNlcnZlZCB3aGVuIFJBUyBpcyBpbXBsZW1lbnRlZFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5NDg6XFx0eyBkb19zZWEsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJsZXZlbCAzIHN5bmNocm9ub3VzIHBhcml0eSBlcnJvciAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcXFwiXFx0fSxcXHQvLyBSZXNlcnZlZCB3aGVuIFJBUyBpcyBpbXBsZW1lbnRlZFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05NDktXFx0eyBkb19iYWQsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJ1bmtub3duIDMyXFxcIlxcdFxcdFxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjI0OjI3Ljk2MTcxMTY1OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc1MzU2Nzk5MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgZml4dXBfZXhjZXB0aW9uYCBpbiB0aGUgQVJNNjQgRXhjZXB0aW9uIEhhbmRsaW5nIFBhdGgqKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGludG8gdGhpcy4gVGhlIGNvbnRleHQgY2xlYXJseSBzdWdnZXN0cyBhIHBvdGVudGlhbCBleGNlcHRpb24gaGFuZGxpbmcgc2NlbmFyaW8gd2l0aGluIHRoZSBBUk02NCBhcmNoaXRlY3R1cmUsIGFuZCB0aGUgbWVudGlvbiBvZiBgZml4dXBfZXhjZXB0aW9uYCBpbW1lZGlhdGVseSBkaXJlY3RzIG15IGF0dGVudGlvbiB0b3dhcmRzIHRoZSBsaWtlbHkgZXhjZXB0aW9uIHRhYmxlIG1lY2hhbmlzbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBkZWZpbmVkIGFuZCB1c2VkLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIGBmaXh1cF9leGNlcHRpb25gLiBTcGVjaWZpY2FsbHksIEknbGwgc3RhcnQgaW4gdGhlIGBhcmNoL2FybTY0L21tL2V4dGFibGUuY2AgZmlsZSBzaW5jZSB0aGUgZXh0ZW5zaW9uIHRhYmxlIGlzIGxpa2VseSB3aGVyZSB0aGUgZml4dXAgaXMgaW1wbGVtZW50ZWQuIElmIGl0J3Mgbm90IHRoZXJlLCBJJ2xsIG5lZWQgdG8gd2lkZW4gdGhlIHNlYXJjaC4gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiBoYXMgYSB2ZXJ5IHNwZWNpZmljIHB1cnBvc2UgcmVsYXRlZCB0byB0aGUgY29udHJvbCBmbG93IG9yIGRhdGEgdGhhdCBpcyBleHBlY3RlZCB0byBmaXggYW4gZXhjZXB0aW9uIHRoYXQgb2NjdXJyZWQgaW4gYSBzcGVjaWZpYyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGV4Y2VwdGlvbiBoYW5kbGluZyBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgb24gQVJNNjQuIFRoZSBnb2FsIGlzIHRvIGVpdGhlciBjb25maXJtIG15IHN1c3BpY2lvbiBvciBxdWlja2x5IGlkZW50aWZ5IHRoZSBjb3JyZWN0IGZ1bmN0aW9uIGRlZmluaXRpb24gYW5kIHVuZGVyc3RhbmQgaXRzIG92ZXJhbGwgcm9sZSBpbiBleGNlcHRpb24gcHJvY2Vzc2luZy4gRnJvbSB0aGVyZSwgSSdsbCBkaXNzZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpdHMgc3BlY2lmaWMgZnVuY3Rpb24gYW5kIGl0cyByZWxhdGlvbnNoaXBzIHRvIG90aGVyIGV4Y2VwdGlvbiBoYW5kbGluZyBmdW5jdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MTksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzoyNDozNS40OTczOTU3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA3NDM2NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZml4dXBfZXhjZXB0aW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lZmkuaD0xNj1leHRlcm4gdm9pZCBlZmlfaW5pdCh2b2lkKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VmaS5oLTE3LVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWZpLmg6MTg6Ym9vbCBlZmlfcnVudGltZV9maXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGNvbnN0IGNoYXIgKm1zZyk7XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lZmkuaC0xOS0jZWxzZVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lZmkuaD0yMj1zdGF0aWMgaW5saW5lXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lZmkuaDoyMzpib29sIGVmaV9ydW50aW1lX2ZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgY29uc3QgY2hhciAqbXNnKVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWZpLmgtMjQte1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9leHRhYmxlLmg9NDM9Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXh0YWJsZS5oLTQ5LVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXh0YWJsZS5oOjUwOmJvb2wgZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVzcik7XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9leHRhYmxlLmgtNTEtI2VuZGlmXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9lZmkuYz0yMjA9YXNtbGlua2FnZSBlZmlfc3RhdHVzX3QgX19lZmlfcnRfYXNtX3JlY292ZXIodm9pZCk7XFxuYXJjaC9hcm02NC9rZXJuZWwvZWZpLmMtMjIxLVxcbmFyY2gvYXJtNjQva2VybmVsL2VmaS5jOjIyMjpib29sIGVmaV9ydW50aW1lX2ZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgY29uc3QgY2hhciAqbXNnKVxcbmFyY2gvYXJtNjQva2VybmVsL2VmaS5jLTIyMy17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMva3Byb2Jlcy5jPTMwMT1pbnQgX19rcHJvYmVzIGtwcm9iZV9mYXVsdF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgZnNyKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL2twcm9iZXMuYy0zMTAtXFx0ICogbXVzdCBiZSBsZWZ0IGFsb25lIGZvciB0aGUgbm9ybWFsIHBhZ2UgZmF1bHQgaGFuZGxlciwgaW5jbHVkaW5nXFxuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL2twcm9iZXMuYzozMTE6XFx0ICogZml4dXBfZXhjZXB0aW9uLlxcbmFyY2gvYXJtNjQva2VybmVsL3Byb2Jlcy9rcHJvYmVzLmMtMzEyLVxcdCAqL1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvdHJhcHMuYz00OTU9dm9pZCBkb19lbDFfYnRpKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVzcilcXG5hcmNoL2FybTY0L2tlcm5lbC90cmFwcy5jLTQ5Ni17XFxuYXJjaC9hcm02NC9rZXJuZWwvdHJhcHMuYzo0OTc6XFx0aWYgKGVmaV9ydW50aW1lX2ZpeHVwX2V4Y2VwdGlvbihyZWdzLCBcXFwiQlRJIHZpb2xhdGlvblxcXCIpKSB7XFxuYXJjaC9hcm02NC9rZXJuZWwvdHJhcHMuYy00OTgtXFx0XFx0cmVncy1cXHUwMDNlcHN0YXRlIFxcdTAwMjY9IH5QU1JfQlRZUEVfTUFTSztcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jPTY5PWV4X2hhbmRsZXJfbG9hZF91bmFsaWduZWRfemVyb3BhZChjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jLTk0LVxcbmFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jOjk1OmJvb2wgZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVzcilcXG5hcmNoL2FybTY0L21tL2V4dGFibGUuYy05Ni17XFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9NDA1PXN0YXRpYyB2b2lkIF9fZG9fa2VybmVsX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlc3IsXFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNDEzLVxcdCAqL1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo0MTQ6XFx0aWYgKCFpc19lbDFfaW5zdHJ1Y3Rpb25fYWJvcnQoZXNyKSBcXHUwMDI2XFx1MDAyNiBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSlcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNDE1LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy00NTAtXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjQ1MTpcXHRpZiAoZWZpX3J1bnRpbWVfZml4dXBfZXhjZXB0aW9uKHJlZ3MsIG1zZykpXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTQ1Mi1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9ODY2PXN0YXRpYyBpbnQgZG9fc2VhKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtODgwLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo4ODE6XFx0aWYgKCF1c2VyX21vZGUocmVncykgXFx1MDAyNlxcdTAwMjYgZml4dXBfZXhjZXB0aW9uKHJlZ3MsIGVzcikpXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTg4Mi1cXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6MjQ6MzUuNjc4MTQ4NTg3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQzOTc3NDA4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBDb21taXQncyBQdXJwb3NlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb21taXQgYmV0dGVyLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIEdpdCBoaXN0b3J5LiBMZXQgbWUgc3RhcnQgd2l0aCBzb21ldGhpbmcgbGlrZSBgZ2l0IGxvZyAtMWAg4oCTIHRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCBpbmZvcm1hdGlvbiwgcmlnaHQ/IE9yIG1heWJlIEknbGwgZ28gZm9yIHRoZSBmdWxsIGhpc3RvcnksIGxvb2tpbmcgYXQgc2ltaWxhciBjb21taXRzIHRvIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aGF0KiB0aGlzIGNvbW1pdCBjaGFuZ2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouIENvbnRleHQgaXMgZXZlcnl0aGluZy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgc3Vycm91bmRpbmcgY2lyY3Vtc3RhbmNlcy5cblxuQWZ0ZXIgcmV2aWV3aW5nIHRoZSBjb21taXQgbG9nLCBsaW5lIDk1IGluIGBhcmNoL2FybTY0L21tL2V4dGFibGUuY2AgaXMgY2FsbGluZyB0byBtZS4gVGhhdCdzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMsIG9yIGF0IGxlYXN0IGEgcG9pbnQgb2YgaW50ZXJlc3QgdG8gZnVydGhlciBkZWx2ZSBpbnRvLiBTbywgbGV0J3MgZ28gcmVhZCB0aGF0IGxpbmUsIGFuZCBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZSBjb2RlIGlzIGRvaW5nIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjY2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6MjQ6MzkuMTE3OTI0NjIzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdFxcbiAgODE6XFx0XFx0ZGF0YSA9ICoodW5zaWduZWQgbG9uZyopYWRkcjtcXG4gIDgyOlxcdFxcbiAgODM6XFx0I2lmbmRlZiBfX0FBUkNINjRFQl9fXFxuICA4NDpcXHRcXHRkYXRhIFxcdTAwM2VcXHUwMDNlPSA4ICogb2Zmc2V0O1xcbiAgODU6XFx0I2Vsc2VcXG4gIDg2OlxcdFxcdGRhdGEgXFx1MDAzY1xcdTAwM2M9IDggKiBvZmZzZXQ7XFxuICA4NzpcXHQjZW5kaWZcXG4gIDg4OlxcdFxcbiAgODk6XFx0XFx0cHRfcmVnc193cml0ZV9yZWcocmVncywgcmVnX2RhdGEsIGRhdGEpO1xcbiAgOTA6XFx0XFxuICA5MTpcXHRcXHRyZWdzLVxcdTAwM2VwYyA9IGdldF9leF9maXh1cChleCk7XFxuICA5MjpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gIDkzOlxcdH1cXG4gIDk0OlxcdFxcbiAgOTU6XFx0Ym9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXNyKVxcbiAgOTY6XFx0e1xcbiAgOTc6XFx0XFx0Y29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXg7XFxuICA5ODpcXHRcXG4gIDk5OlxcdFxcdGV4ID0gc2VhcmNoX2V4Y2VwdGlvbl90YWJsZXMoaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSk7XFxuIDEwMDpcXHRcXHRpZiAoIWV4KVxcbiAxMDE6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxMDI6XFx0XFxuIDEwMzpcXHRcXHRzd2l0Y2ggKGV4LVxcdTAwM2V0eXBlKSB7XFxuIDEwNDpcXHRcXHRjYXNlIEVYX1RZUEVfQlBGOlxcbiAxMDU6XFx0XFx0XFx0cmV0dXJuIGV4X2hhbmRsZXJfYnBmKGV4LCByZWdzKTtcXG4gMTA2OlxcdFxcdGNhc2UgRVhfVFlQRV9VQUNDRVNTX0VSUl9aRVJPOlxcbiAxMDc6XFx0XFx0Y2FzZSBFWF9UWVBFX0tBQ0NFU1NfRVJSX1pFUk86XFxuIDEwODpcXHRcXHRcXHRyZXR1cm4gZXhfaGFuZGxlcl91YWNjZXNzX2Vycl96ZXJvKGV4LCByZWdzKTtcXG4gMTA5OlxcdFxcdGNhc2UgRVhfVFlQRV9VQUNDRVNTX0NQWTpcXG4gMTEwOlxcdFxcdFxcdHJldHVybiBleF9oYW5kbGVyX3VhY2Nlc3NfY3B5KGV4LCByZWdzLCBlc3IpO1xcbiAxMTE6XFx0XFx0Y2FzZSBFWF9UWVBFX0xPQURfVU5BTElHTkVEX1pFUk9QQUQ6XFxuIDExMjpcXHRcXHRcXHRyZXR1cm4gZXhfaGFuZGxlcl9sb2FkX3VuYWxpZ25lZF96ZXJvcGFkKGV4LCByZWdzKTtcXG4gMTEzOlxcdFxcdH1cXG4gMTE0OlxcdFxcbiAxMTU6XFx0XFx0QlVHKCk7XFxuIDExNjpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjI0OjM5LjExNzk4NDg5M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzU0NjE1ODEyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN5bmNocm9ub3VzIEV4dGVybmFsIEFib3J0IEhhbmRsaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBmdXp6LXdvcnRoeSBhbmQgaG93IGl0IGZpdHMgaW50byBTeXprYWxsZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgYGRvX3NlYWAgaW4gdGhlIGtlcm5lbCBoYW5kbGVzLCB3aGljaCBpcyBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydHMuIFNwZWNpZmljYWxseSwgSSBzZWUgaXQncyBkZWFsaW5nIHdpdGggY2FzZXMgbGlrZSBkYXRhIGFib3J0cywgaW5zdHJ1Y3Rpb24gYWJvcnRzIGxlYWRpbmcgdG8gU0VBcywgdHJhbnNsYXRpb24gdGFibGUgd2FsayBhYm9ydHMsIGFuZCwgY3J1Y2lhbGx5LCBrZXJuZWwgbWVtb3J5IGFjY2Vzc2VzICh0aGluayBgY29weV9mcm9tX3VzZXJgLCBgdWFjY2Vzc2AsIG9yIGBrYWNjZXNzYCkuIFByZXZpb3VzbHksIGl0IGxvb2tzIGxpa2UgaWYgdGhlcmUgd2FzIGFuIFNFQSBkdXJpbmcga2VybmVsIGV4ZWN1dGlvbiwgYGRvX3NlYWAgd291bGQganVzdCBwYW5pYyB0aHJvdWdoIGBhcm02NF9ub3RpZnlfZGllYCBhbmQgYGRpZSgpYC5cblxuTm93LCB0aGlzIHBhdGNoIGFkZHMgYSBjaGVjayB3aXRoaW4gYGRvX3NlYWAgZm9yIGV4Y2VwdGlvbiBmaXh1cHM6XG5cbmBgYGNcblx0aWYgKCF1c2VyX21vZGUocmVncykgXHUwMDI2XHUwMDI2IGZpeHVwX2V4Y2VwdGlvbihyZWdzLCBlc3IpKVxuXHRcdHJldHVybiAwO1xuYGBgXG5cblRoaXMgaXMgaW1wb3J0YW50ISBOb3csIGlmIGFuIFNFQSAqZHVyaW5nIGtlcm5lbCBleGVjdXRpb24qIGhpdHMgYW4gZXhjZXB0aW9uLXRhYmxlIHByb3RlY3RlZCBsb2FkL3N0b3JlLCBgZml4dXBfZXhjZXB0aW9uKClgIGlzIGNhbGxlZC4gSWYgdGhlcmUncyBhbiBleGNlcHRpb24gdGFibGUgZW50cnksIGBmaXh1cF9leGNlcHRpb24oKWAgZml4ZXMgdGhlIGlzc3VlIGJ5IHNldHRpbmcgdGhlIGByZWdzLVx1MDAzZXBjYCB0byB0aGUgZml4dXAgaGFuZGxlciBhbmQgaGFuZGxpbmcgdGhlIGVycm9yIHJldHVybiwgYW5kIGBkb19zZWFgIGp1c3QgcmV0dXJucy5cblxuT2theSwgc28gdGhlIHByb21wdCBpcyBhc2tpbmcgbWUgdG8gZXZhbHVhdGUgd2hldGhlciB0aGlzIGlzIHdvcnRoIGZ1enppbmcsIGJhc2VkIG9uIHNvbWUgc3BlY2lmaWMgY3JpdGVyaWEuIExldCBtZSByZWNhcCB0aG9zZSBjcml0ZXJpYTpcblxuKiAgICoqTm90IEZ1enphYmxlOioqIERvY3VtZW50YXRpb24vS2NvbmZpZyBjaGFuZ2VzLCBkZWNvcmF0aXZlIGNoYW5nZXMgKGxvZ2dpbmcvdHJhY2Vwb2ludHMpLCBudW1lcmljIGNvbnN0YW50cy9tYWNyb3MgdGhhdCBkb24ndCBjaGFuZ2UgZXhlY3V0aW9uLCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoL1NtYXJ0TklDL0dQVSBkcml2ZXJzIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSwgYW5kIHRlYXJkb3duIGNhbGxiYWNrcyBsaWtlIGAucmVtb3ZlYCwgYC5zaHV0ZG93bmAsIG9yIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuKiAgICoqRnV6emFibGU6KiogSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCAqYW5kKiBJIGNhbiB2ZXJpZnkgdGhlIGNvZGUgaXMgcmVhY2hhYmxlLlxuXG5JZiBpdCAqaXMqIGZ1enphYmxlLCBJIG5lZWQgdG86XG5cbjEuICBJZGVudGlmeSBmdW5jdGlvbnMgZm9yIGBGb2N1c1N5bWJvbHNgLCBhdm9pZGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgZm9jdXNpbmcgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLlxuMi4gIElkZW50aWZ5IHJlcXVpcmVkIGBDT05GSUdfYCBvcHRpb25zIGZvciB0ZXN0aW5nIGFuZCBwdXQgdGhlbSBpbiBgRW5hYmxlQ29uZmlnc2AuXG5cblNvLCBpdCBzZWVtcyB0aGlzIGlzIHJlYWNoYWJsZSwgYnV0IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyOlxuXG5MZXQncyBjaGVjayBgZG9fc2VhYCBpbiBgYXJjaC9hcm02NC9tbS9mYXVsdC5jYCB0byBzZWUgaG93IHRoZSBmYXVsdHMgYXJlIHJvdXRlZCBhbmQgd2hlcmUgdGhlIGZpeHVwcyBhcmUgY2FsbGVkLiBJJ2xsIG5lZWQgdG8gc2VlIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGNhbGwgYGRvX3NlYWAgYW5kIGhvdyBgZmF1bHRfaW5mb2AgaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA1MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjI0OjUyLjY2NDE0NjE5MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY4OTE5MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZhdWx0X2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MzA5PXN0cnVjdCBrdm1fYXJjaCB7XFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNDI4LVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDo0Mjk6c3RydWN0IGt2bV92Y3B1X2ZhdWx0X2luZm8ge1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC00MzAtXFx0dTY0IGVzcl9lbDI7XFx0XFx0LyogSHlwIFN5bmRyb20gUmVnaXN0ZXIgKi9cXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD04NDM9c3RydWN0IGt2bV92Y3B1X2FyY2gge1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTg3My1cXHQvKiBFeGNlcHRpb24gSW5mb3JtYXRpb24gKi9cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6ODc0OlxcdHN0cnVjdCBrdm1fdmNwdV9mYXVsdF9pbmZvIGZhdWx0O1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC04NzUtXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvZmF1bHQuaD02MD1zdGF0aWMgaW5saW5lIGJvb2wgX19ocGZhcl92YWxpZCh1NjQgZXNyKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL2ZhdWx0LmgtODEtXFxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL2ZhdWx0Lmg6ODI6c3RhdGljIGlubGluZSBib29sIF9fZ2V0X2ZhdWx0X2luZm8odTY0IGVzciwgc3RydWN0IGt2bV92Y3B1X2ZhdWx0X2luZm8gKmZhdWx0KVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9mYXVsdC5oLTgzLXtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zd2l0Y2guaD00MjA9c3RhdGljIGlubGluZSB2b2lkIF9fX2RlYWN0aXZhdGVfdHJhcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oLTQ0My1cXG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmg6NDQ0OnN0YXRpYyBpbmxpbmUgYm9vbCBfX3BvcHVsYXRlX2ZhdWx0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zd2l0Y2guaC00NDUte1xcbmFyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zd2l0Y2guaDo0NDY6XFx0cmV0dXJuIF9fZ2V0X2ZhdWx0X2luZm8odmNwdS1cXHUwMDNlYXJjaC5mYXVsdC5lc3JfZWwyLCBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5mYXVsdCk7XFxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oLTQ0Ny19XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmg9ODM3PXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faHlwX2hhbmRsZV9tZW1vcnlfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oLTgzOS17XFxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oOjg0MDpcXHRpZiAoIV9fcG9wdWxhdGVfZmF1bHRfaW5mbyh2Y3B1KSlcXG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmgtODQxLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvbWVtX3Byb3RlY3QuYz03NDg9dm9pZCBoYW5kbGVfaG9zdF9tZW1fYWJvcnQoc3RydWN0IGt2bV9jcHVfY29udGV4dCAqaG9zdF9jdHh0KVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL21lbV9wcm90ZWN0LmMtNzQ5LXtcXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9tZW1fcHJvdGVjdC5jOjc1MDpcXHRzdHJ1Y3Qga3ZtX3ZjcHVfZmF1bHRfaW5mbyBmYXVsdDtcXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9tZW1fcHJvdGVjdC5jLTc1MS1cXHR1NjQgZXNyLCBhZGRyO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvbWVtX3Byb3RlY3QuYy03NTMtXFx0ZXNyID0gcmVhZF9zeXNyZWdfZWwyKFNZU19FU1IpO1xcbmFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL21lbV9wcm90ZWN0LmM6NzU0OlxcdGlmICghX19nZXRfZmF1bHRfaW5mbyhlc3IsIFxcdTAwMjZmYXVsdCkpIHtcXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9tZW1fcHJvdGVjdC5jLTc1NS1cXHRcXHQvKlxcbi0tXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTQ4LVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo0OTpzdHJ1Y3QgZmF1bHRfaW5mbyB7XFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTUwLVxcdGludFxcdCgqZm4pKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy01Ni1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6NTc6c3RhdGljIGNvbnN0IHN0cnVjdCBmYXVsdF9pbmZvIGZhdWx0X2luZm9bXTtcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNTgtXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjU5OnN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGZhdWx0X2luZm8gKmVzcl90b19mYXVsdF9pbmZvKHVuc2lnbmVkIGxvbmcgZXNyKVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy02MC17XFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjYxOlxcdHJldHVybiBmYXVsdF9pbmZvICsgKGVzciBcXHUwMDI2IEVTUl9FTHhfRlNDKTtcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNjItfVxcbi0tXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jPTk4PXN0YXRpYyB2b2lkIG1lbV9hYm9ydF9kZWNvZGUodW5zaWduZWQgbG9uZyBlc3IpXFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtMTEyLVxcdHByX2FsZXJ0KFxcXCIgIEZTQyA9IDB4JTAybHg6ICVzXFxcXG5cXFwiLCAoZXNyIFxcdTAwMjYgRVNSX0VMeF9GU0MpLFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzoxMTM6XFx0XFx0IGVzcl90b19mYXVsdF9pbmZvKGVzciktXFx1MDAzZW5hbWUpO1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy0xMTQtXFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9NTE0PXN0YXRpYyB2b2lkIGRvX2JhZF9hcmVhKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy01MjMtXFx0aWYgKHVzZXJfbW9kZShyZWdzKSkge1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo1MjQ6XFx0XFx0Y29uc3Qgc3RydWN0IGZhdWx0X2luZm8gKmluZiA9IGVzcl90b19mYXVsdF9pbmZvKGVzcik7XFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTUyNS1cXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz02MDE9c3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsXFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNjAzLXtcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6NjA0OlxcdGNvbnN0IHN0cnVjdCBmYXVsdF9pbmZvICppbmY7XFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTYwNS1cXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtXFx1MDAzZW1tO1xcbi0tXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTc5NC1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6Nzk1OlxcdGluZiA9IGVzcl90b19mYXVsdF9pbmZvKGVzcik7XFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTc5Ni1cXHRzZXRfdGhyZWFkX2VzcihhZGRyLCBlc3IpO1xcbi0tXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jPTg2Nj1zdGF0aWMgaW50IGRvX3NlYSh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy04Njcte1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo4Njg6XFx0Y29uc3Qgc3RydWN0IGZhdWx0X2luZm8gKmluZjtcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtODY5LVxcdHVuc2lnbmVkIGxvbmcgc2lhZGRyO1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy04NzAtXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjg3MTpcXHRpbmYgPSBlc3JfdG9fZmF1bHRfaW5mbyhlc3IpO1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy04NzItXFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9OTAwPXN0YXRpYyBpbnQgZG9fdGFnX2NoZWNrX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05MTUtXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjkxNjpzdGF0aWMgY29uc3Qgc3RydWN0IGZhdWx0X2luZm8gZmF1bHRfaW5mb1tdID0ge1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05MTctXFx0eyBkb19iYWQsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJ0dGJyIGFkZHJlc3Mgc2l6ZSBmYXVsdFxcXCJcXHR9LFxcbi0tXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jPTk4Mz12b2lkIGRvX21lbV9hYm9ydCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05ODQte1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5ODU6XFx0Y29uc3Qgc3RydWN0IGZhdWx0X2luZm8gKmluZiA9IGVzcl90b19mYXVsdF9pbmZvKGVzcik7XFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTk4Ni1cXHR1bnNpZ25lZCBsb25nIGFkZHIgPSB1bnRhZ2dlZF9hZGRyKGZhcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjI0OjUzLjAzMzA2OTg3NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MzYzMzgxOTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBxdWVyeSwgYXMgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBkb19tZW1fYWJvcnRgIENhbGxlcnMgaW4gQVJNNjQqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgdHJpZ2dlcmluZyBgZG9fbWVtX2Fib3J0YCBpbiB0aGUgQVJNNjQgYXJjaGl0ZWN0dXJlLiBUaGF0IGZ1bmN0aW9uIGlzIHByZXR0eSBjcml0aWNhbCDigJMgaXQgaGFuZGxlcyB0aG9zZSBtZW1vcnkgYWJvcnQgZXhjZXB0aW9ucywgd2hpY2ggYXJlIHVzdWFsbHkgYSBzaWduIG9mIHNvbWV0aGluZyBnb2luZyB3cm9uZy4gU28sIEkgbmVlZCB0byBrbm93ICp3aGF0KidzIGNhbGxpbmcgaXQgdG8gZGlhZ25vc2UgdGhlIHNvdXJjZSBvZiBwb3RlbnRpYWwgbWVtb3J5IGlzc3Vlcy4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIHplcm8gaW4gb24gdGhlIGRpcmVjdCBjYWxscy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgZ3JlcCB0aGUgYGFyY2gvYXJtNjRgIGRpcmVjdG9yeSBmb3IgdGhlIGZ1bmN0aW9uIG5hbWUgYGRvX21lbV9hYm9ydGAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBsaXN0IG9mIGFsbCB0aGUgZmlsZXMgYW5kIGxpbmVzIG9mIGNvZGUgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBpbnZva2VkLiBUaGF0J2xsIGJlIG15IHN0YXJ0aW5nIHBvaW50IHRvIGV4YW1pbmUgdGhlIGNhbGwgc2l0ZXMgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBwcm92aWRpbmcgdGhlIG5lY2Vzc2FyeSBjb250ZXh0LiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gd29yayBiYWNrd2FyZCwgdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBmbG93IGFuZCBpbnZlc3RpZ2F0ZSBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gVGhlbiwgSSBjYW4gc3RhcnQgbG9va2luZyBhdCBhcmd1bWVudHMsIGNvbnRleHQgYW5kIGxpa2VseSBjdWxwcml0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MzgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzoyNTowMC4zOTY0NTQ2NzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTA5MDk0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fbWVtX2Fib3J0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9leGNlcHRpb24uaD01Mz1hc21saW5rYWdlIHZvaWQgYXNtX2V4aXRfdG9fdXNlcl9tb2RlKHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2V4Y2VwdGlvbi5oLTU0LVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXhjZXB0aW9uLmg6NTU6dm9pZCBkb19tZW1fYWJvcnQodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9leGNlcHRpb24uaC01Ni12b2lkIGRvX2VsMF91bmRlZihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlc3IpO1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvZW50cnktY29tbW9uLmM9MzE1PXN0YXRpYyB2b2lkIG5vaW5zdHIgZWwxX2Fib3J0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVzcilcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2VudHJ5LWNvbW1vbi5jLTMyMS1cXHRsb2NhbF9kYWlmX2luaGVyaXQocmVncyk7XFxuYXJjaC9hcm02NC9rZXJuZWwvZW50cnktY29tbW9uLmM6MzIyOlxcdGRvX21lbV9hYm9ydChmYXIsIGVzciwgcmVncyk7XFxuYXJjaC9hcm02NC9rZXJuZWwvZW50cnktY29tbW9uLmMtMzIzLVxcdGFybTY0X2V4aXRfdG9fa2VybmVsX21vZGUocmVncywgc3RhdGUpO1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvZW50cnktY29tbW9uLmM9NTQ2PXN0YXRpYyB2b2lkIG5vaW5zdHIgZWwwX2RhKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVzcilcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2VudHJ5LWNvbW1vbi5jLTU1MS1cXHRsb2NhbF9kYWlmX3Jlc3RvcmUoREFJRl9QUk9DQ1RYKTtcXG5hcmNoL2FybTY0L2tlcm5lbC9lbnRyeS1jb21tb24uYzo1NTI6XFx0ZG9fbWVtX2Fib3J0KGZhciwgZXNyLCByZWdzKTtcXG5hcmNoL2FybTY0L2tlcm5lbC9lbnRyeS1jb21tb24uYy01NTMtXFx0YXJtNjRfZXhpdF90b191c2VyX21vZGUocmVncyk7XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9lbnRyeS1jb21tb24uYz01NTY9c3RhdGljIHZvaWQgbm9pbnN0ciBlbDBfaWEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXNyKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvZW50cnktY29tbW9uLmMtNTY5LVxcdGxvY2FsX2RhaWZfcmVzdG9yZShEQUlGX1BST0NDVFgpO1xcbmFyY2gvYXJtNjQva2VybmVsL2VudHJ5LWNvbW1vbi5jOjU3MDpcXHRkb19tZW1fYWJvcnQoZmFyLCBlc3IsIHJlZ3MpO1xcbmFyY2gvYXJtNjQva2VybmVsL2VudHJ5LWNvbW1vbi5jLTU3MS1cXHRhcm02NF9leGl0X3RvX3VzZXJfbW9kZShyZWdzKTtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz05MTY9c3RhdGljIGNvbnN0IHN0cnVjdCBmYXVsdF9pbmZvIGZhdWx0X2luZm9bXSA9IHtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05ODItXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjk4Mzp2b2lkIGRvX21lbV9hYm9ydCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05ODQte1xcbi0tXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTEwMDAtfVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzoxMDAxOk5PS1BST0JFX1NZTUJPTChkb19tZW1fYWJvcnQpO1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy0xMDAyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzoyNTowMS42ODczNjk5N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjUxODI0Mzk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBFeGNlcHRpb24gSGFuZGxpbmcgaW4gQVJNNjQgS2VybmVsIE1lbW9yeSBBY2Nlc3MqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gaWRlbnRpZnkga2V5IGZ1bmN0aW9ucyBmb3IgZnV6emluZywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkgYWNjZXNzIGV4Y2VwdGlvbnMgb24gQVJNNjQuIFRoZSBjb250ZXh0IGlzIGFuIEVMMSBhYm9ydCwgd2hlcmUga2VybmVsIGNvZGUgYWNjZXNzaW5nIG1lbW9yeSB0cmlnZ2VycyBhIHN5bmNocm9ub3VzIGFib3J0LiBUaGlzIGNhbiBzdGVtIGZyb20gYGNvcHlfZnJvbV91c2VyYCwgZXhjZXB0aW9uLWhhbmRsZWQgbG9hZHMvc3RvcmVzLCBvciBvdGhlciBvcGVyYXRpb25zLlxuXG5UaGUgZmxvdyBpczogYGVsMV9hYm9ydGAgLVx1MDAzZSBgZG9fbWVtX2Fib3J0YCAtXHUwMDNlIGBpbmYtXHUwMDNlZm4oZmFyLCBlc3IsIHJlZ3MpYC4gQ3JpdGljYWxseSwgaWYgaXQncyBhIHBhZ2UgZmF1bHQsIGBkb19wYWdlX2ZhdWx0YCBraWNrcyBpbi4gS2VybmVsLW1vZGUgcGFnZSBmYXVsdHMgZXZlbnR1YWxseSBsZWFkIHRvIGBfX2RvX2tlcm5lbF9mYXVsdGAgYW5kIGBmaXh1cF9leGNlcHRpb25gLlxuXG5Ob3csIHRoZSBpbnRlcmVzdGluZyBiaXQ6IFN5bmNocm9ub3VzIEV4dGVybmFsIEFib3J0cyAoU0VBKSB3aXRoIEZTQyA9IDB4MTAgKG9yIHRyYW5zbGF0aW9uIHRhYmxlIHdhbGsgU0VBcykgYXJlIGhhbmRsZWQgYnkgYGRvX3NlYWAuICBQcmV2aW91c2x5LCBgZG9fc2VhYCBvbmx5IGhhZCBhIGNoZWNrIGZvciB1c2VyIG1vZGUgYW5kIEFQRUkgY2xhaW1zLiBOb3csIHRoZXJlIGlzIGEgY2hlY2sgb24gbm9uLXVzZXIgbW9kZSBleGVjdXRpb24gYW5kIGBmaXh1cF9leGNlcHRpb25gIGlzIGNhbGxlZC5cblxuVGhlIGtleSBxdWVzdGlvbiBpcywgaXMgdGhpcyByZWFjaGFibGUgaW4gUUVNVSwgR0NFLCBvciBmdXp6aW5nPyBZZXMsIG9uIEFSTTY0LCBhbnkgRUwxIGFib3J0IHRyaWdnZXJpbmcgU0VBIG9uIGFuIGFkZHJlc3MgYWNjZXNzZWQgd2l0aCBmaXh1cCBoYW5kbGVycyAodGhpbmsgdWFjY2VzcyBvbiBhbiB1bm1hcHBlZCBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIG9yIFNFQSBpbmplY3Rpb24gdmlhIFBDSWUvZGV2bWVtLCBldGMuKSB3aWxsIGV4ZWN1dGUgdGhpcyBuZXcgcGF0aDogYGRvX3NlYWAgLVx1MDAzZSBgZml4dXBfZXhjZXB0aW9uYC4gVGhhdCdzIHRoZSBjb3JlIGZvY3VzOiBleGNlcHRpb24gaGFuZGxpbmcgZm9yIGtlcm5lbCBtZW1vcnkgYWNjZXNzZXMhXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgb24gRm9jdXNTeW1ib2xzLiBJIGtub3cgSSB3YW50IHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLiBgZG9fbWVtX2Fib3J0YCBoYW5kbGVzIGFsbCBkYXRhIGFuZCBpbnN0cnVjdGlvbiBhYm9ydHMgKHBhZ2UgZmF1bHRzLCBldGMuKSBzbyB0aGF0J3MgYSAqdmVyeSogZ2VuZXJpYyBoYW5kbGVyLiBUaGlzIGlzbid0IHRoZSBmdW5jdGlvbiBJJ20gbG9va2luZyBmb3IuXG5cbmBkb19zZWFgIGlzIHN0YXRpYyBpbiBgZmF1bHQuY2AsIGFuZCBJJ20gYXdhcmUgdGhhdCBzdGF0aWMgZnVuY3Rpb25zIGFyZSBvZnRlbiBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciwgcG90ZW50aWFsbHkgbWFraW5nIHRoZW0gbGVzcyBzdWl0YWJsZSBmb3IgZGlyZWN0IGZ1enppbmcgdGFyZ2V0cyBpZiB0aGV5IGxhY2sgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gSG93ZXZlciwgYmVjYXVzZSBgZG9fc2VhYCBpcyBpbiB0aGUgYGZhdWx0X2luZm9gIHRhYmxlLCBpdCBpcyBub3QgaW5saW5lZCBhbmQgaGFzIGFuIGFzc29jaWF0ZWQgc3ltYm9sLlxuXG5gZml4dXBfZXhjZXB0aW9uYCBsb29rcyBwcm9taXNpbmc6IGl0J3Mgbm90IGEgZ2VuZXJpYyBob3QgcGF0aC4gSXQgaXMgb25seSBjYWxsZWQgd2hlbiBhbiBleGNlcHRpb24vZmF1bHQgaGFwcGVucyBpbiBrZXJuZWwgbW9kZS4gQWxzbywgSSBzZWUgaXQncyBkZWZpbmVkIGluIGBhcmNoL2FybTY0L21tL2V4dGFibGUuY2AsIGFuZCBkZWNsYXJlZCBpbiBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9leHRhYmxlLmhgLiAgVGhpcyBpcyBvbmx5IHRyaWdnZXJlZCBmb3IgRUwxIGV4Y2VwdGlvbnMgKGtlcm5lbCBtb2RlIGZhdWx0cykuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIGBGb2N1c1N5bWJvbHNgLlxuXG5JIHJldmlld2VkIHRoZSBjb2RlIGFyb3VuZCBgZG9fc2VhYC4gVGhlcmUgYXJlIG5vIGNvbmRpdGlvbmFsIGNvbXBpbGVzLiBUaGUgY29kZSBpcyBhbHdheXMgYnVpbHQgd2l0aCBgQ09ORklHX0FSTTY0PXlgLlxuXG5UaGVyZWZvcmUsIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlIGBkb19zZWFgIGFuZCBgZml4dXBfZXhjZXB0aW9uYCBhcyB0aGVzZSBhcmUgYm90aCBzcGVjaWZpYyBhbmQgYXJlIG5vdCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gSG93ZXZlciwgYGRvX21lbV9hYm9ydGAgaXMgZGVmaW5pdGVseSBOT1QgdGhlIGZvY3VzIGFzIGl0IGlzIHRvbyBnZW5lcmljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY5NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6MjU6MjQuMjA1NjE3NjQxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjM1NzgyNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmF1bHQub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvS2NvbmZpZz0xMjczPWNvbmZpZyBGVUpJVFNVX0VSUkFUVU1fMDEwMDAxXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMTI3OS1cXHQgIGFjY2Vzc2VzIG1heSBjYXVzZSB1bmRlZmluZWQgZmF1bHQgKERhdGEgYWJvcnQsIERGU0M9MGIxMTExMTEpLlxcbmFyY2gvYXJtNjQvS2NvbmZpZzoxMjgwOlxcdCAgVGhpcyBmYXVsdCBvY2N1cnMgdW5kZXIgYSBzcGVjaWZpYyBoYXJkd2FyZSBjb25kaXRpb24gd2hlbiBhXFxuYXJjaC9hcm02NC9LY29uZmlnLTEyODEtXFx0ICBsb2FkL3N0b3JlIGluc3RydWN0aW9uIHBlcmZvcm1zIGFuIGFkZHJlc3MgdHJhbnNsYXRpb24gdXNpbmc6XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2FsbHdpbm5lci9zdW41MGktaDY0LXJlbWl4LW1pbmktcGMuZHRzPTIzNT1cXHUwMDI2cmVnX2RjZGM1IHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYWxsd2lubmVyL3N1bjUwaS1oNjQtcmVtaXgtbWluaS1wYy5kdHMtMjQxLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYWxsd2lubmVyL3N1bjUwaS1oNjQtcmVtaXgtbWluaS1wYy5kdHM6MjQyOi8qIERldmlhdGVzIGZyb20gdGhlIHJlc2V0IGRlZmF1bHQgb2YgMS4xVi4gKi9cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2FsbHdpbm5lci9zdW41MGktaDY0LXJlbWl4LW1pbmktcGMuZHRzLTI0My1cXHUwMDI2cmVnX2RjZGM2IHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1neGwtczkwNXgta2hhZGFzLXZpbS5kdHM9NDg9XFx0XFx0bGVkLTEge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9hbWxvZ2ljL21lc29uLWd4bC1zOTA1eC1raGFkYXMtdmltLmR0cy01MS1cXHRcXHRcXHRtYXgtYnJpZ2h0bmVzcyA9IFxcdTAwM2MyNTVcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1neGwtczkwNXgta2hhZGFzLXZpbS5kdHM6NTI6XFx0XFx0XFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXFxcImRlZmF1bHQtb25cXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1neGwtczkwNXgta2hhZGFzLXZpbS5kdHMtNTMtXFx0XFx0fTtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1neG0ta2hhZGFzLXZpbTIuZHRzPTg4PVxcdFxcdGxlZC0xIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1neG0ta2hhZGFzLXZpbTIuZHRzLTkxLVxcdFxcdFxcdG1heC1icmlnaHRuZXNzID0gXFx1MDAzYzI1NVxcdTAwM2U7XFxuYXJjaC9hcm02NC9ib290L2R0cy9hbWxvZ2ljL21lc29uLWd4bS1raGFkYXMtdmltMi5kdHM6OTI6XFx0XFx0XFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXFxcImRlZmF1bHQtb25cXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1neG0ta2hhZGFzLXZpbTIuZHRzLTkzLVxcdFxcdH07XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2FtbG9naWMvbWVzb24tbGlicmV0ZWNoLWNvdHRvbndvb2QuZHRzaT04MT1cXHRcXHRsZWQge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9hbWxvZ2ljL21lc29uLWxpYnJldGVjaC1jb3R0b253b29kLmR0c2ktODMtXFx0XFx0XFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fU1RBVFVTO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1saWJyZXRlY2gtY290dG9ud29vZC5kdHNpOjg0OlxcdFxcdFxcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFxcXCJkZWZhdWx0LW9uXFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2FtbG9naWMvbWVzb24tbGlicmV0ZWNoLWNvdHRvbndvb2QuZHRzaS04NS1cXHRcXHRcXHRtYXgtYnJpZ2h0bmVzcyA9IFxcdTAwM2MyNTVcXHUwMDNlO1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9hbWxvZ2ljL21lc29uLXNtMS1zZWk2MTAuZHRzPTExNj1cXHRcXHRsZWQtMiB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2FtbG9naWMvbWVzb24tc20xLXNlaTYxMC5kdHMtMTE5LVxcdFxcdFxcdG1heC1icmlnaHRuZXNzID0gXFx1MDAzYzI1NVxcdTAwM2U7XFxuYXJjaC9hcm02NC9ib290L2R0cy9hbWxvZ2ljL21lc29uLXNtMS1zZWk2MTAuZHRzOjEyMDpcXHRcXHRcXHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcXFwiZGVmYXVsdC1vblxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9hbWxvZ2ljL21lc29uLXNtMS1zZWk2MTAuZHRzLTEyMS1cXHRcXHRcXHRhY3RpdmUtbG93O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9icm9hZGNvbS9iY21iY2EvYmNtNDkwNi16eXhlbC1leDM1MTBiLmR0cz03MD1cXHRsZWRAYSB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2Jyb2FkY29tL2JjbWJjYS9iY200OTA2LXp5eGVsLWV4MzUxMGIuZHRzLTczLVxcdFxcdGNvbG9yID0gXFx1MDAzY0xFRF9DT0xPUl9JRF9HUkVFTlxcdTAwM2U7XFxuYXJjaC9hcm02NC9ib290L2R0cy9icm9hZGNvbS9iY21iY2EvYmNtNDkwNi16eXhlbC1leDM1MTBiLmR0czo3NDpcXHRcXHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcXFwiZGVmYXVsdC1vblxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9icm9hZGNvbS9iY21iY2EvYmNtNDkwNi16eXhlbC1leDM1MTBiLmR0cy03NS1cXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvZnNsLWxzMTAxMmEtdHFtbHMxMDEyYWwtbWJsczEwMTJhbC5kdHM9NzA9XFx0XFx0bGVkLTEge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvZnNsLWxzMTAxMmEtdHFtbHMxMDEyYWwtbWJsczEwMTJhbC5kdHMtNzMtXFx0XFx0XFx0Z3Bpb3MgPSBcXHUwMDNjXFx1MDAyNmdwaW9fZXhwXzNwM3YgMTUgR1BJT19BQ1RJVkVfTE9XXFx1MDAzZTtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9mc2wtbHMxMDEyYS10cW1sczEwMTJhbC1tYmxzMTAxMmFsLmR0czo3NDpcXHRcXHRcXHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcXFwiZGVmYXVsdC1vblxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvZnNsLWxzMTAxMmEtdHFtbHMxMDEyYWwtbWJsczEwMTJhbC5kdHMtNzUtXFx0XFx0fTtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2ZzbC1sczEwMjhhLWtvbnRyb24ta2JveC1hLTIzMC1scy5kdHM9MzA9XFx0XFx0cG93ZXItbGVkIHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9mc2wtbHMxMDI4YS1rb250cm9uLWtib3gtYS0yMzAtbHMuZHRzOjMxOlxcdFxcdFxcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFxcXCJkZWZhdWx0LW9uXFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9mc2wtbHMxMDI4YS1rb250cm9uLWtib3gtYS0yMzAtbHMuZHRzLTMyLVxcdFxcdFxcdGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX1BPV0VSO1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvZnNsLWxzMTAyOGEtdHFtbHMxMDI4YS1tYmxzMTAyOGEuZHRzPTQ1PVxcdFxcdGxlZC0xIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2ZzbC1sczEwMjhhLXRxbWxzMTAyOGEtbWJsczEwMjhhLmR0cy00OS1cXHRcXHRcXHRncGlvcyA9IFxcdTAwM2NcXHUwMDI2Z3Bpb19leHBfM3YzIDE0IEdQSU9fQUNUSVZFX0hJR0hcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2ZzbC1sczEwMjhhLXRxbWxzMTAyOGEtbWJsczEwMjhhLmR0czo1MDpcXHRcXHRcXHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcXFwiZGVmYXVsdC1vblxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvZnNsLWxzMTAyOGEtdHFtbHMxMDI4YS1tYmxzMTAyOGEuZHRzLTUxLVxcdFxcdH07XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4bXAtaHVtbWluZ2JvYXJkLWlpb3QuZHRzPTEwNz1cXHRzcGlfbXV4OiBtdXgtY29udHJvbGxlci0xIHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4bXAtaHVtbWluZ2JvYXJkLWlpb3QuZHRzLTEwOC1cXHRcXHRjb21wYXRpYmxlID0gXFxcImdwaW8tbXV4XFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4bXAtaHVtbWluZ2JvYXJkLWlpb3QuZHRzOjEwOTpcXHRcXHQvKiBkZWZhdWx0IG9uLWJvYXJkICovXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OG1wLWh1bW1pbmdib2FyZC1paW90LmR0cy0xMTAtXFx0XFx0aWRsZS1zdGF0ZSA9IFxcdTAwM2MwXFx1MDAzZTtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhtcC1odW1taW5nYm9hcmQtaWlvdC5kdHM9MTE5PVxcdHVhcnQzX3VhcnQ0X2IyYl9tdXg6IG11eC1jb250cm9sbGVyLTIge1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhtcC1odW1taW5nYm9hcmQtaWlvdC5kdHMtMTIwLVxcdFxcdGNvbXBhdGlibGUgPSBcXFwiZ3Bpby1tdXhcXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhtcC1odW1taW5nYm9hcmQtaWlvdC5kdHM6MTIxOlxcdFxcdC8qIGRlZmF1bHQgb24tYm9hcmQgKi9cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4bXAtaHVtbWluZ2JvYXJkLWlpb3QuZHRzLTEyMi1cXHRcXHRpZGxlLXN0YXRlID0gXFx1MDAzYzBcXHUwMDNlO1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OG1wLXRxbWE4bXBxbC1tYmE4bXB4bC5kdHM9MTE2PVxcdFxcdGxlZC0wIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhtcC10cW1hOG1wcWwtbWJhOG1weGwuZHRzLTEyMC1cXHRcXHRcXHRncGlvcyA9IFxcdTAwM2NcXHUwMDI2Z3BpbzUgNSBHUElPX0FDVElWRV9ISUdIXFx1MDAzZTtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4bXAtdHFtYThtcHFsLW1iYThtcHhsLmR0czoxMjE6XFx0XFx0XFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXFxcImRlZmF1bHQtb25cXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhtcC10cW1hOG1wcWwtbWJhOG1weGwuZHRzLTEyMi1cXHRcXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTEtdHFtYTkxMzEtbWJhOTF4eGNhLmR0cz0xMDE9XFx0XFx0bGVkLTEge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTEtdHFtYTkxMzEtbWJhOTF4eGNhLmR0cy0xMDQtXFx0XFx0XFx0Z3Bpb3MgPSBcXHUwMDNjXFx1MDAyNmV4cGFuZGVyMiA2IEdQSU9fQUNUSVZFX0hJR0hcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDkxLXRxbWE5MTMxLW1iYTkxeHhjYS5kdHM6MTA1OlxcdFxcdFxcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFxcXCJkZWZhdWx0LW9uXFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg5MS10cW1hOTEzMS1tYmE5MXh4Y2EuZHRzLTEwNi1cXHRcXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTMtdHFtYTkzNTItbWJhOTF4eGNhLmR0cz0xMDE9XFx0XFx0bGVkLTEge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTMtdHFtYTkzNTItbWJhOTF4eGNhLmR0cy0xMDQtXFx0XFx0XFx0Z3Bpb3MgPSBcXHUwMDNjXFx1MDAyNmV4cGFuZGVyMiA2IEdQSU9fQUNUSVZFX0hJR0hcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDkzLXRxbWE5MzUyLW1iYTkxeHhjYS5kdHM6MTA1OlxcdFxcdFxcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFxcXCJkZWZhdWx0LW9uXFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg5My10cW1hOTM1Mi1tYmE5MXh4Y2EuZHRzLTEwNi1cXHRcXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTMtdHFtYTkzNTItbWJhOTN4eGNhLmR0cz0xMDc9XFx0XFx0bGVkLTEge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTMtdHFtYTkzNTItbWJhOTN4eGNhLmR0cy0xMTAtXFx0XFx0XFx0Z3Bpb3MgPSBcXHUwMDNjXFx1MDAyNmV4cGFuZGVyMiA2IEdQSU9fQUNUSVZFX0hJR0hcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDkzLXRxbWE5MzUyLW1iYTkzeHhjYS5kdHM6MTExOlxcdFxcdFxcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFxcXCJkZWZhdWx0LW9uXFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg5My10cW1hOTM1Mi1tYmE5M3h4Y2EuZHRzLTExMi1cXHRcXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTMtdHFtYTkzNTItbWJhOTN4eGxhLmR0cz05OD1cXHRcXHRsZWQtMSB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg5My10cW1hOTM1Mi1tYmE5M3h4bGEuZHRzLTEwMS1cXHRcXHRcXHRncGlvcyA9IFxcdTAwM2NcXHUwMDI2ZXhwYW5kZXIyIDYgR1BJT19BQ1RJVkVfSElHSFxcdTAwM2U7XFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTMtdHFtYTkzNTItbWJhOTN4eGxhLmR0czoxMDI6XFx0XFx0XFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXFxcImRlZmF1bHQtb25cXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDkzLXRxbWE5MzUyLW1iYTkzeHhsYS5kdHMtMTAzLVxcdFxcdH07XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9tYmE4bXguZHRzaT03MT1cXHRcXHRsZWQxIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL21iYThteC5kdHNpLTczLVxcdFxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZncGlvMSAwIEdQSU9fQUNUSVZFX0hJR0hcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL21iYThteC5kdHNpOjc0OlxcdFxcdFxcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFxcXCJkZWZhdWx0LW9uXFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9tYmE4bXguZHRzaS03NS1cXHRcXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvbWJhOHh4LmR0c2k9Njg9XFx0XFx0bGVkMSB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9tYmE4eHguZHRzaS03MS1cXHRcXHRcXHRncGlvcyA9IFxcdTAwM2NcXHUwMDI2ZXhwYW5kZXIgMSBHUElPX0FDVElWRV9ISUdIXFx1MDAzZTtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9tYmE4eHguZHRzaTo3MjpcXHRcXHRcXHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcXFwiZGVmYXVsdC1vblxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvbWJhOHh4LmR0c2ktNzMtXFx0XFx0fTtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvbWFydmVsbC9hcm1hZGEtMzcyMC1hdGxhcy12NS5kdHM9MzY9XFx0XFx0bGVkIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvbWFydmVsbC9hcm1hZGEtMzcyMC1hdGxhcy12NS5kdHMtMzktXFx0XFx0XFx0Y29sb3IgPSBcXHUwMDNjTEVEX0NPTE9SX0lEX1JFRFxcdTAwM2U7XFxuYXJjaC9hcm02NC9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zNzIwLWF0bGFzLXY1LmR0czo0MDpcXHRcXHRcXHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcXFwiZGVmYXVsdC1vblxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zNzIwLWF0bGFzLXY1LmR0cy00MS1cXHRcXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zNzIwLXR1cnJpcy1tb3guZHRzPTM4PVxcdFxcdGxlZCB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM3MjAtdHVycmlzLW1veC5kdHMtNDAtXFx0XFx0XFx0Z3Bpb3MgPSBcXHUwMDNjXFx1MDAyNmdwaW9zYiAyMSBHUElPX0FDVElWRV9MT1dcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvbWFydmVsbC9hcm1hZGEtMzcyMC10dXJyaXMtbW94LmR0czo0MTpcXHRcXHRcXHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcXFwiZGVmYXVsdC1vblxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zNzIwLXR1cnJpcy1tb3guZHRzLTQyLVxcdFxcdH07XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM3eHguZHRzaT0yMz1cXHRyZXNlcnZlZC1tZW1vcnkge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zN3h4LmR0c2ktMjgtXFx0XFx0LypcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM3eHguZHRzaToyOTpcXHRcXHQgKiBUaGUgUFNDSSBmaXJtd2FyZSByZWdpb24gZGVwaWN0ZWQgYmVsb3cgaXMgdGhlIGRlZmF1bHQgb25lXFxuYXJjaC9hcm02NC9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zN3h4LmR0c2ktMzAtXFx0XFx0ICogYW5kIHNob3VsZCBiZSB1cGRhdGVkIGJ5IHRoZSBib290bG9hZGVyLlxcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL3NkbTQ1MC1sZW5vdm8tdGJ4NjA1Zi5kdHM9NDk9XFx0YmFja2xpZ2h0OiBncGlvLWJhY2tsaWdodCB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vc2RtNDUwLWxlbm92by10Yng2MDVmLmR0cy01My1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vc2RtNDUwLWxlbm92by10Yng2MDVmLmR0czo1NDpcXHRcXHRkZWZhdWx0LW9uO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9zZG00NTAtbGVub3ZvLXRieDYwNWYuZHRzLTU1LVxcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL3RhbG9zLWV2ay1sdmRzLWF1byxnMTMzaGFuMDEuZHRzbz0xMT1cXHRiYWNrbGlnaHQ6IGJhY2tsaWdodCB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vdGFsb3MtZXZrLWx2ZHMtYXVvLGcxMzNoYW4wMS5kdHNvLTEzLVxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZ0bG1tIDExNSBHUElPX0FDVElWRV9ISUdIXFx1MDAzZTtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vdGFsb3MtZXZrLWx2ZHMtYXVvLGcxMzNoYW4wMS5kdHNvOjE0OlxcdFxcdGRlZmF1bHQtb247XFxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL3RhbG9zLWV2ay1sdmRzLWF1byxnMTMzaGFuMDEuZHRzby0xNS1cXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9weDMwLWNvYnJhLmR0c2k9MTIwPVxcdTAwMjZlbW1jIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcHgzMC1jb2JyYS5kdHNpLTEyNC1cXHQgKiBGb3IgaHMyMDAgc3VwcG9ydCwgVS1Cb290IHdvdWxkIGhhdmUgdG8gc2V0IHRoZSBSSzgwOSBEQ0RDNFxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcHgzMC1jb2JyYS5kdHNpOjEyNTpcXHQgKiByYWlsIHRvIDEuOFYgZnJvbSB0aGUgZGVmYXVsdCBvZiAzLjBWLiBJdCBkb2Vzbid0IGRvIHRoYXQgb25cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3B4MzAtY29icmEuZHRzaS0xMjYtXFx0ICogZGV2aWNlcyBvdXQgaW4gdGhlIGZpZWxkLCBzbyBkaXNhYmxlIGhzMjAwLlxcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9weDMwLWZpcmVmbHktamQ0LWNvcmUtbWIuZHRzPTY0PVxcdFxcdGdyZWVuLWxlZCB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3B4MzAtZmlyZWZseS1qZDQtY29yZS1tYi5kdHMtNjktXFx0XFx0XFx0bGFiZWwgPSBcXFwicHgzMC1tYi1qZDQ6Ymx1ZTpkaXlcXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcHgzMC1maXJlZmx5LWpkNC1jb3JlLW1iLmR0czo3MDpcXHRcXHRcXHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcXFwiZGVmYXVsdC1vblxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9weDMwLWZpcmVmbHktamQ0LWNvcmUtbWIuZHRzLTcxLVxcdFxcdH07XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3B4MzAtcHAxNTE2LmR0c2k9MTQ4PVxcdTAwMjZlbW1jIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcHgzMC1wcDE1MTYuZHRzaS0xNTItXFx0ICogRm9yIGhzMjAwIHN1cHBvcnQsIFUtQm9vdCB3b3VsZCBoYXZlIHRvIHNldCB0aGUgUks4MDkgRENEQzRcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3B4MzAtcHAxNTE2LmR0c2k6MTUzOlxcdCAqIHJhaWwgdG8gMS44ViBmcm9tIHRoZSBkZWZhdWx0IG9mIDMuMFYuIEl0IGRvZXNuJ3QgZG8gdGhhdCBvblxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcHgzMC1wcDE1MTYuZHRzaS0xNTQtXFx0ICogZGV2aWNlcyBvdXQgaW4gdGhlIGZpZWxkLCBzbyBkaXNhYmxlIGhzMjAwLlxcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzMDgtYnBpLXAyLXByby5kdHM9NTI9XFx0XFx0Ymx1ZS1sZWQge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzMDgtYnBpLXAyLXByby5kdHMtNTctXFx0XFx0XFx0bGFiZWwgPSBcXFwiYmx1ZTpwb3dlclxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzMDgtYnBpLXAyLXByby5kdHM6NTg6XFx0XFx0XFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXFxcImRlZmF1bHQtb25cXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzA4LWJwaS1wMi1wcm8uZHRzLTU5LVxcdFxcdH07XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzMwOC1yb2MtY2MuZHRzPTM3PVxcdFxcdHBvd2VyX2xlZDogbGVkLTAge1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzA4LXJvYy1jYy5kdHMtMzgtXFx0XFx0XFx0bGFiZWwgPSBcXFwiZmlyZWZseTpyZWQ6cG93ZXJcXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzA4LXJvYy1jYy5kdHM6Mzk6XFx0XFx0XFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXFxcImRlZmF1bHQtb25cXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzA4LXJvYy1jYy5kdHMtNDAtXFx0XFx0XFx0ZGVmYXVsdC1zdGF0ZSA9IFxcXCJvblxcXCI7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1odWdzdW4teDk5LmR0cz01MT1cXHRcXHRwb3dlcl9sZWQ6IGxlZC0wIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5LWh1Z3N1bi14OTkuZHRzLTU0LVxcdFxcdFxcdGRlZmF1bHQtc3RhdGUgPSBcXFwib25cXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5LWh1Z3N1bi14OTkuZHRzOjU1OlxcdFxcdFxcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFxcXCJkZWZhdWx0LW9uXFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1odWdzdW4teDk5LmR0cy01Ni1cXHRcXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1MjgtYXJtc29tLXNpZ2UxLmR0cz01NT1cXHRcXHRsZWQtMSB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzUyOC1hcm1zb20tc2lnZTEuZHRzLTU5LVxcdFxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZncGlvMyBSS19QQjIgR1BJT19BQ1RJVkVfSElHSFxcdTAwM2U7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1MjgtYXJtc29tLXNpZ2UxLmR0czo2MDpcXHRcXHRcXHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcXFwiZGVmYXVsdC1vblxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1MjgtYXJtc29tLXNpZ2UxLmR0cy02MS1cXHRcXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1MjgtbmFub3BpLXplcm8yLmR0cz02Nz1cXHRcXHRsZWQtMSB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzUyOC1uYW5vcGktemVybzIuZHRzLTcxLVxcdFxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZncGlvNCBSS19QQjEgR1BJT19BQ1RJVkVfSElHSFxcdTAwM2U7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1MjgtbmFub3BpLXplcm8yLmR0czo3MjpcXHRcXHRcXHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcXFwiZGVmYXVsdC1vblxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1MjgtbmFub3BpLXplcm8yLmR0cy03My1cXHRcXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjYtYmlndHJlZXRlY2gtY2IyLmR0c2k9NTA9XFx0XFx0bGVkLTAge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjYtYmlndHJlZXRlY2gtY2IyLmR0c2ktNTMtXFx0XFx0XFx0Z3Bpb3MgPSBcXHUwMDNjXFx1MDAyNmdwaW80IFJLX1BBMSBHUElPX0FDVElWRV9MT1dcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY2LWJpZ3RyZWV0ZWNoLWNiMi5kdHNpOjU0OlxcdFxcdFxcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFxcXCJkZWZhdWx0LW9uXFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2Ni1iaWd0cmVldGVjaC1jYjIuZHRzaS01NS1cXHRcXHRcXHRwaW5jdHJsLW5hbWVzID0gXFxcImRlZmF1bHRcXFwiO1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjYtb2Ryb2lkLW0xcy5kdHM9NDE9XFx0XFx0bGVkX3B3cjogbGVkLTAge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjYtb2Ryb2lkLW0xcy5kdHMtNDUtXFx0XFx0XFx0Z3Bpb3MgPSBcXHUwMDNjXFx1MDAyNmdwaW8wIFJLX1BDNiBHUElPX0FDVElWRV9MT1dcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY2LW9kcm9pZC1tMXMuZHRzOjQ2OlxcdFxcdFxcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFxcXCJkZWZhdWx0LW9uXFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2Ni1vZHJvaWQtbTFzLmR0cy00Ny1cXHRcXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtaGlubGluay1vcGMuZHRzaT02OT1cXHRcXHRsZWQtMiB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1oaW5saW5rLW9wYy5kdHNpLTcyLVxcdFxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZncGlvMyBSS19QQjAgR1BJT19BQ1RJVkVfSElHSFxcdTAwM2U7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtaGlubGluay1vcGMuZHRzaTo3MzpcXHRcXHRcXHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcXFwiZGVmYXVsdC1vblxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtaGlubGluay1vcGMuZHRzaS03NC1cXHRcXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1Njgtb2Ryb2lkLW0xLmR0cz02Mj1cXHRcXHRsZWRfcG93ZXI6IGxlZC0wIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LW9kcm9pZC1tMS5kdHMtNjYtXFx0XFx0XFx0ZGVmYXVsdC1zdGF0ZSA9IFxcXCJrZWVwXFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1vZHJvaWQtbTEuZHRzOjY3OlxcdFxcdFxcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFxcXCJkZWZhdWx0LW9uXFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1vZHJvaWQtbTEuZHRzLTY4LVxcdFxcdFxcdHBpbmN0cmwtbmFtZXMgPSBcXFwiZGVmYXVsdFxcXCI7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU3Ni1hcm1zb20tc2lnZTUuZHRzPTUzPVxcdFxcdHJlZF9sZWQ6IHJlZC1sZWQge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NzYtYXJtc29tLXNpZ2U1LmR0cy01Ni1cXHRcXHRcXHRncGlvcyA9IFxcdTAwM2NcXHUwMDI2Z3BpbzQgUktfUEIxIEdQSU9fQUNUSVZFX0hJR0hcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTc2LWFybXNvbS1zaWdlNS5kdHM6NTc6XFx0XFx0XFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXFxcImRlZmF1bHQtb25cXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTc2LWFybXNvbS1zaWdlNS5kdHMtNTgtXFx0XFx0fTtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LXJvYy1ydC5kdHM9MTI0PVxcdFxcdHBvd2VyX2xlZCB7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtcm9jLXJ0LmR0cy0xMjUtXFx0XFx0XFx0Z3Bpb3MgPSBcXHUwMDNjXFx1MDAyNmdwaW8xIFJLX1BEMyBHUElPX0FDVElWRV9ISUdIXFx1MDAzZTtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1yb2MtcnQuZHRzOjEyNjpcXHRcXHRcXHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcXFwiZGVmYXVsdC1vblxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtcm9jLXJ0LmR0cy0xMjctXFx0XFx0fTtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4cy1raGFkYXMtZWRnZTIuZHRzPTcwPVxcdFxcdGdyZWVuX2xlZDogbGVkLTEge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODhzLWtoYWRhcy1lZGdlMi5kdHMtNzQtXFx0XFx0XFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fUE9XRVI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODhzLWtoYWRhcy1lZGdlMi5kdHM6NzU6XFx0XFx0XFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXFxcImRlZmF1bHQtb25cXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4cy1raGFkYXMtZWRnZTIuZHRzLTc2LVxcdFxcdFxcdG1heC1icmlnaHRuZXNzID0gXFx1MDAzYzI1NVxcdTAwM2U7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OHMtb2Ryb2lkLW0yLmR0cz00Mj1cXHRcXHRsZWRfcHdyOiBsZWQtMCB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OHMtb2Ryb2lkLW0yLmR0cy00Ni1cXHRcXHRcXHRncGlvcyA9IFxcdTAwM2NcXHUwMDI2Z3BpbzEgUktfUEI1IEdQSU9fQUNUSVZFX0hJR0hcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4cy1vZHJvaWQtbTIuZHRzOjQ3OlxcdFxcdFxcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFxcXCJkZWZhdWx0LW9uXFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OHMtb2Ryb2lkLW0yLmR0cy00OC1cXHRcXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9zdC9zdG0zMm1wMjM1Zi1kay5kdHM9MTA5PVxcdHBhbmVsX2x2ZHNfYmFja2xpZ2h0OiBiYWNrbGlnaHQge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9zdC9zdG0zMm1wMjM1Zi1kay5kdHMtMTExLVxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZncGlvaSA0IEdQSU9fQUNUSVZFX0hJR0hcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvc3Qvc3RtMzJtcDIzNWYtZGsuZHRzOjExMjpcXHRcXHRkZWZhdWx0LW9uO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvc3Qvc3RtMzJtcDIzNWYtZGsuZHRzLTExMy1cXHRcXHRzdGF0dXMgPSBcXFwib2theVxcXCI7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3N0L3N0bTMybXAyNTdmLWRrLmR0cz0xMTY9XFx0cGFuZWxfbHZkc19iYWNrbGlnaHQ6IGJhY2tsaWdodCB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3N0L3N0bTMybXAyNTdmLWRrLmR0cy0xMTgtXFx0XFx0Z3Bpb3MgPSBcXHUwMDNjXFx1MDAyNmdwaW9pIDQgR1BJT19BQ1RJVkVfSElHSFxcdTAwM2U7XFxuYXJjaC9hcm02NC9ib290L2R0cy9zdC9zdG0zMm1wMjU3Zi1kay5kdHM6MTE5OlxcdFxcdGRlZmF1bHQtb247XFxuYXJjaC9hcm02NC9ib290L2R0cy9zdC9zdG0zMm1wMjU3Zi1kay5kdHMtMTIwLVxcdFxcdHN0YXR1cyA9IFxcXCJva2F5XFxcIjtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvc3Qvc3RtMzJtcDI1N2YtZXYxLmR0cz0xNDA9XFx0cGFuZWxfbHZkc19iYWNrbGlnaHQ6IGJhY2tsaWdodCB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3N0L3N0bTMybXAyNTdmLWV2MS5kdHMtMTQyLVxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZncGlvaSA1IEdQSU9fQUNUSVZFX0hJR0hcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvc3Qvc3RtMzJtcDI1N2YtZXYxLmR0czoxNDM6XFx0XFx0ZGVmYXVsdC1vbjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3N0L3N0bTMybXAyNTdmLWV2MS5kdHMtMTQ0LVxcdFxcdHN0YXR1cyA9IFxcXCJva2F5XFxcIjtcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vYnJrLWltbS5oLTE1LSAqIEFsbG93ZWQgdmFsdWVzIGZvciBrZ2RiIGFyZSAweDQwMCAtIDB4N2ZmXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9icmstaW1tLmg6MTY6ICogMHgxMDA6IGZvciB0cmlnZ2VyaW5nIGEgZmF1bHQgb24gcHVycG9zZSAocmVzZXJ2ZWQpXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9icmstaW1tLmgtMTctICogMHg0MDA6IGZvciBkeW5hbWljIEJSSyBpbnN0cnVjdGlvblxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLWRlZi5oLTE3LS8qXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLWRlZi5oOjE4OiAqIEJSSyBpbnN0cnVjdGlvbiBmb3IgcHJvdm9raW5nIGEgZmF1bHQgb24gcHVycG9zZVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi1kZWYuaC0xOS0gKiBVbmxpa2Uga2dkYiwgI2ltbTE2IHZhbHVlIHdpdGggdW5hbGxvY2F0ZWQgaGFuZGxlciBpcyB1c2VkIGZvciBmYXVsdGluZy5cXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaD00ODA9c3RhdGljIGlubGluZSBib29sIGt2bV9pc193cml0ZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgtNDgzLVxcdFxcdC8qXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oOjQ4NDpcXHRcXHQgKiBPbmx5IGEgcGVybWlzc2lvbiBmYXVsdCBvbiBhIFMxUFRXIHNob3VsZCBiZVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaC00ODUtXFx0XFx0ICogY29uc2lkZXJlZCBhcyBhIHdyaXRlLiBPdGhlcndpc2UsIHBhZ2UgdGFibGVzIGJha2VkXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL210ZS1rYXNhbi5oPTYwPXN0YXRpYyBpbmxpbmUgdm9pZCBtdGVfZW5hYmxlX3Rjbyh2b2lkKVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tdGUta2FzYW4uaC02OC0gKiBzaW5jZSB0aGUgc3luYyBtb2RlIGdlbmVyYXRlcyBleGNlcHRpb25zIHN5bmNocm9ub3VzbHkgYW5kIHRoZVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbXRlLWthc2FuLmg6Njk6ICogbm9mYXVsdCBvciBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkIGNhbiBoYW5kbGUgdGhlbS5cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL210ZS1rYXNhbi5oLTcwLSAqL1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvZnBzaW1kLmM9ODY3PWludCB2ZWNfc2V0X3ZlY3Rvcl9sZW5ndGgoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBlbnVtIHZlY190eXBlIHR5cGUsXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYy04OTgtXFx0ZWxzZVxcbmFyY2gvYXJtNjQva2VybmVsL2Zwc2ltZC5jOjg5OTpcXHRcXHQvKiBSZXNldCBWTCB0byBzeXN0ZW0gZGVmYXVsdCBvbiBuZXh0IGV4ZWM6ICovXFxuYXJjaC9hcm02NC9rZXJuZWwvZnBzaW1kLmMtOTAwLVxcdFxcdHRhc2tfc2V0X3ZsX29uZXhlYyh0YXNrLCB0eXBlLCAwKTtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2h3X2JyZWFrcG9pbnQuYz02MzE9dm9pZCBkb19icmVha3BvaW50KHVuc2lnbmVkIGxvbmcgZXNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2h3X2JyZWFrcG9pbnQuYy02NjYtXFx0XFx0LyogRG8gd2UgbmVlZCB0byBoYW5kbGUgdGhlIHN0ZXBwaW5nPyAqL1xcbmFyY2gvYXJtNjQva2VybmVsL2h3X2JyZWFrcG9pbnQuYzo2Njc6XFx0XFx0aWYgKGlzX2RlZmF1bHRfb3ZlcmZsb3dfaGFuZGxlcihicCkpXFxuYXJjaC9hcm02NC9rZXJuZWwvaHdfYnJlYWtwb2ludC5jLTY2OC1cXHRcXHRcXHRzdGVwID0gMTtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2h3X2JyZWFrcG9pbnQuYz03NDE9c3RhdGljIGludCB3YXRjaHBvaW50X3JlcG9ydChzdHJ1Y3QgcGVyZl9ldmVudCAqd3AsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2h3X2JyZWFrcG9pbnQuYy03NDMte1xcbmFyY2gvYXJtNjQva2VybmVsL2h3X2JyZWFrcG9pbnQuYzo3NDQ6XFx0aW50IHN0ZXAgPSBpc19kZWZhdWx0X292ZXJmbG93X2hhbmRsZXIod3ApO1xcbmFyY2gvYXJtNjQva2VybmVsL2h3X2JyZWFrcG9pbnQuYy03NDUtXFx0c3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCAqaW5mbyA9IGNvdW50ZXJfYXJjaF9icCh3cCk7XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9tdGUuYz0yMDQ9c3RhdGljIHZvaWQgbXRlX3VwZGF0ZV9zY3Rscl91c2VyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL210ZS5jLTIyNS1cXHQgKiBzZXQgYml0cyBhbmQgbWFwIGludG8gcmVnaXN0ZXIgdmFsdWVzIGRldGVybWluZXMgb3VyXFxuYXJjaC9hcm02NC9rZXJuZWwvbXRlLmM6MjI2OlxcdCAqIGRlZmF1bHQgb3JkZXIuXFxuYXJjaC9hcm02NC9rZXJuZWwvbXRlLmMtMjI3LVxcdCAqL1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL2twcm9iZXMuYz0zMDE9aW50IF9fa3Byb2JlcyBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGZzcilcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3Byb2Jlcy9rcHJvYmVzLmMtMzIyLVxcdFxcdCAqIHNpbmdsZS1zdGVwcGluZyBpZiB0aGUgZmF1bHRpbmcgUEMgcG9pbnRzIHRvIHRoZVxcbmFyY2gvYXJtNjQva2VybmVsL3Byb2Jlcy9rcHJvYmVzLmM6MzIzOlxcdFxcdCAqIGN1cnJlbnQga3Byb2JlJ3MgWE9MIGluc3RydWN0aW9uLiBJZiB0aGUgZmF1bHQgb2NjdXJyZWRcXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMva3Byb2Jlcy5jLTMyNC1cXHRcXHQgKiBlbHNld2hlcmUgKGUuZy4gaW4gcGVyZiBvciB0cmFjaW5nIGNvZGUgaW52b2tlZCBmcm9tIHRoZVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU9MTY9a3ZtLXkgKz0gYXJtLm8gbW11Lm8gbW1pby5vIHBzY2kubyBoeXBlcmNhbGxzLm8gcHZ0aW1lLm8gXFxcXFxcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlOjE3OlxcdCBpbmplY3RfZmF1bHQubyB2YV9sYXlvdXQubyBoYW5kbGVfZXhpdC5vIGNvbmZpZy5vIFxcXFxcXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZS0xOC1cXHQgZ3Vlc3QubyBkZWJ1Zy5vIHJlc2V0Lm8gc3lzX3JlZ3MubyBzdGFja3RyYWNlLm8gXFxcXFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vYXJtLmM9NjA9ZW51bSBrdm1fd2Z4X3RyYXBfcG9saWN5IHtcXG5hcmNoL2FybTY0L2t2bS9hcm0uYzo2MTpcXHRLVk1fV0ZYX05PVFJBUF9TSU5HTEVfVEFTSywgLyogRGVmYXVsdCBvcHRpb24gKi9cXG5hcmNoL2FybTY0L2t2bS9hcm0uYy02Mi1cXHRLVk1fV0ZYX05PVFJBUCxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jPTE2NDQ9c3RhdGljIGludCBrdm1fc2V0dXBfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0xNjUwLVxcdCAqIFdoZW4gdGhlIHZDUFUgaGFzIGEgUE1VLCBidXQgbm8gUE1VIGlzIHNldCBmb3IgdGhlIGd1ZXN0XFxuYXJjaC9hcm02NC9rdm0vYXJtLmM6MTY1MTpcXHQgKiB5ZXQsIHNldCB0aGUgZGVmYXVsdCBvbmUuXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMTY1Mi1cXHQgKi9cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9mYXVsdC5oPTYwPXN0YXRpYyBpbmxpbmUgYm9vbCBfX2hwZmFyX3ZhbGlkKHU2NCBlc3IpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvZmF1bHQuaC02My1cXHQgKiBDUFVzIGFmZmVjdGVkIGJ5IEFSTSBlcnJhdHVtICM4MzQyMjAgbWF5IGluY29ycmVjdGx5IHJlcG9ydCBhXFxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL2ZhdWx0Lmg6NjQ6XFx0ICogc3RhZ2UtMiB0cmFuc2xhdGlvbiBmYXVsdCB3aGVuIGEgc3RhZ2UtMSBwZXJtaXNzaW9uIGZhdWx0IG9jY3Vycy5cXG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvZmF1bHQuaC02NS1cXHQgKlxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvcGt2bS5jPTEwNTM9c3RhdGljIHU2NCBfX3Brdm1fbWVtc2hhcmVfcGFnZV9yZXEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgaXBhKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvcGt2bS5jLTEwNTYtXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvcGt2bS5jOjEwNTc6XFx0LyogRmFrZSB1cCBhIGRhdGEgYWJvcnQgKGxldmVsIDMgdHJhbnNsYXRpb24gZmF1bHQgb24gd3JpdGUpICovXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvcGt2bS5jLTEwNTgtXFx0dmNwdS1cXHUwMDNlYXJjaC5mYXVsdC5lc3JfZWwyID0gKEVTUl9FTHhfRUNfREFCVF9MT1cgXFx1MDAzY1xcdTAwM2MgRVNSX0VMeF9FQ19TSElGVCkgfFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9MjI0Nz1pbnQga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yMjkxLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjIyOTI6XFx0LyogQ2hlY2sgdGhlIHN0YWdlLTIgZmF1bHQgaXMgdHJhbnMuIGZhdWx0IG9yIHdyaXRlIGZhdWx0ICovXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjI5My1cXHRpZiAoIWVzcl9mc2NfaXNfdHJhbnNsYXRpb25fZmF1bHQoZXNyKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYz0xMDQzPXN0YXRpYyB2b2lkIGt2bV9hcm1fc2V0X3BtdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBhcm1fcG11ICphcm1fcG11KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xMDUxLS8qKlxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM6MTA1MjogKiBrdm1fYXJtX3NldF9kZWZhdWx0X3BtdSAtIE5vIFBNVSBzZXQsIGdldCB0aGUgZGVmYXVsdCBvbmUuXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xMDUzLSAqIEBrdm06IFRoZSBrdm0gcG9pbnRlclxcbi0tXFxuYXJjaC9hcm02NC9tbS9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5hcmNoL2FybTY0L21tL01ha2VmaWxlOjI6b2JqLXlcXHRcXHRcXHRcXHQ6PSBkbWEtbWFwcGluZy5vIGV4dGFibGUubyBmYXVsdC5vIGluaXQubyBcXFxcXFxuYXJjaC9hcm02NC9tbS9NYWtlZmlsZS0zLVxcdFxcdFxcdFxcdCAgIGNhY2hlLm8gY29weXBhZ2UubyBmbHVzaC5vIFxcXFxcXG4tLVxcbmFyY2gvYXJtNjQvbW0vY29udHB0ZS5jPTY5PXN0YXRpYyB2b2lkIGNvbnRwdGVfY29udmVydChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC9hcm02NC9tbS9jb250cHRlLmMtMTU3LVxcdCAqICBJZiBib3RoIHRoZSBvbGQgc2luZ2xlIChSVyxuKSBhbmQgbmV3IGNvbnRpZ3VvdXMgKFJPLGMpIFRMQiBlbnRyaWVzXFxuYXJjaC9hcm02NC9tbS9jb250cHRlLmM6MTU4OlxcdCAqICBhcmUgcHJlc2VudCwgYW5kIGEgd3JpdGUgaXMgbWFkZSB0byB0aGlzIGFkZHJlc3MsIGRvIHdlIGZhdWx0IG9yXFxuYXJjaC9hcm02NC9tbS9jb250cHRlLmMtMTU5LVxcdCAqICBpcyB0aGUgd3JpdGUgcGVybWl0dGVkICh2aWEgYW1hbGdhbWF0aW9uKT9cXG4tLVxcbmFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jPTE0PXN0YXRpYyBib29sIGNweV9mYXVsdGVkX29uX3VhY2Nlc3MoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsXFxuLS1cXG5hcmNoL2FybTY0L21tL2V4dGFibGUuYy0xNy1cXHRib29sIHVhY2Nlc3NfaXNfd3JpdGUgPSBGSUVMRF9HRVQoRVhfREFUQV9VQUNDRVNTX1dSSVRFLCBleC1cXHUwMDNlZGF0YSk7XFxuYXJjaC9hcm02NC9tbS9leHRhYmxlLmM6MTg6XFx0Ym9vbCBmYXVsdF9vbl93cml0ZSA9IGVzciBcXHUwMDI2IEVTUl9FTHhfV05SO1xcbmFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jLTE5LVxcbmFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jOjIwOlxcdHJldHVybiB1YWNjZXNzX2lzX3dyaXRlID09IGZhdWx0X29uX3dyaXRlO1xcbmFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jLTIxLX1cXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz02MDE9c3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsXFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNzkwLVxcdFxcdCAqL1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo3OTE6XFx0XFx0cGFnZWZhdWx0X291dF9vZl9tZW1vcnkoKTtcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNzkyLVxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzoyNToyNC41MjkyMDAwNDZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA2ODk0MDcxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQVJNNjQgRmF1bHQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhlIEFSTTY0IGtlcm5lbCBoYW5kbGVzIG1lbW9yeSBmYXVsdHMuIEkgc2VlIHRoYXQgYGZhdWx0Lm9gIGFuZCBgZXh0YWJsZS5vYCBhcmUgYnVpbHQgYWxvbmdzaWRlIGBkbWEtbWFwcGluZy5vYCBhbmQgb3RoZXJzLCBhbGwgcGFydCBvZiB0aGUgc3RhbmRhcmQgYnVpbGQgcHJvY2VzcyB2aWEgYG9iai15YC4gVGhlIGFyY2hpdGVjdHVyZSBjb25maWcgaXMgYENPTkZJR19BUk02NGAg4oCTIG5vdGhpbmcgdG9vIHVudXN1YWwgaGVyZSB1bmxlc3Mgd2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBzcGVjaWZpYywgc28gbm8gbmVlZCB0byBkZWx2ZSBpbnRvIHNwZWNpZmljIEVuYWJsZUNvbmZpZ3MsIGBbXWAgaXMgZmluZSBhbmQgYElTX0VOQUJMRUQoQ09ORklHX0FSTTY0KWAgaXMgaW1wbGllZC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93OyBJIHNob3VsZCBjaGVjayBvdXQgYGZpeHVwX2V4Y2VwdGlvbmAsIGBkb19zZWFgLCBhbmQgYGRvX21lbV9hYm9ydGAuIEknbGwgYWxzbyBnbGFuY2UgdGhyb3VnaCBvdGhlciBzeW1ib2xzIGFuZCBjb25maWdzLlxuXG5BaGEhIExvb2tpbmcgYXQgYGZhdWx0LmNgIGRpcmVjdGx5LCBJIGNhbiBzZWUgc29tZSByZWxldmFudCBgQ09ORklHX2Agb3B0aW9ucyBpbiBwbGF5OiBgQ09ORklHX0NPTVBBVF9BTElHTk1FTlRfRklYVVBTYCDigJMgdGhhdCdzIGZvciBoYW5kbGluZyBhbGlnbm1lbnQgZmF1bHRzLCBvYnZpb3VzbHkuIGBDT05GSUdfSEFSREVOX0VMMl9WRUNUT1JTYCBpc24ndCBwZXJ0aW5lbnQgaW4gdGhpcyBjb250ZXh0LiBBbmQgdGhlbiwgdGhlcmUncyBgQ09ORklHX0FDUElfQVBFSV9TRUFgIGFuZCBgQ09ORklHX0FDUElfQVBFSWAuIFRoYXQncyBpbnRlcmVzdGluZywgYXMgdGhhdCBpbnZvbHZlcyBgYXBlaV9jbGFpbV9zZWFgLiBJIHNob3VsZCBjaGVjayBvdXQgYGFwZWlfY2xhaW1fc2VhYCBpbiBgYXJjaC9hcm02NGAgdG8gc2VlIGhvdyB0aGF0J3MgdGllZCBpbnRvIHRoZSBmYXVsdCBoYW5kbGluZyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDIxMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzoyNTozNS4yMTg2MTAyOTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjgzMjU1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcGVpX2NsYWltX3NlYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWNwaS5oPTEyMD12b2lkIF9faW5pdCBhY3BpX2luaXRfY3B1cyh2b2lkKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FjcGkuaDoxMjE6aW50IGFwZWlfY2xhaW1fc2VhKHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FjcGkuaC0xMjItI2Vsc2VcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FjcGkuaD0xMjM9c3RhdGljIGlubGluZSB2b2lkIGFjcGlfaW5pdF9jcHVzKHZvaWQpIHsgfVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWNwaS5oOjEyNDpzdGF0aWMgaW5saW5lIGludCBhcGVpX2NsYWltX3NlYShzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyByZXR1cm4gLUVOT0VOVDsgfVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWNwaS5oLTEyNS0jZW5kaWYgLyogQ09ORklHX0FDUEkgKi9cXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2FjcGkuYz0yOTU9dm9pZCBfX2lvbWVtICphY3BpX29zX2lvcmVtYXAoYWNwaV9waHlzaWNhbF9hZGRyZXNzIHBoeXMsIGFjcGlfc2l6ZSBzaXplKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvYWNwaS5jLTM4OC0gKi9cXG5hcmNoL2FybTY0L2tlcm5lbC9hY3BpLmM6Mzg5OmludCBhcGVpX2NsYWltX3NlYShzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG5hcmNoL2FybTY0L2tlcm5lbC9hY3BpLmMtMzkwLXtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTIxODU9aW50IGt2bV9oYW5kbGVfZ3Vlc3Rfc2VhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTIyMDAtXFx0ICogR2l2ZSBBUEVJIHRoZSBvcHBvcnR1bml0eSB0byBjbGFpbSB0aGUgYWJvcnQgYmVmb3JlIGhhbmRsaW5nIGl0XFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjIwMTpcXHQgKiB3aXRoaW4gS1ZNLiBhcGVpX2NsYWltX3NlYSgpIGV4cGVjdHMgdG8gYmUgY2FsbGVkIHdpdGggSVJRcyBlbmFibGVkLlxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTIyMDItXFx0ICovXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjIwMy1cXHRsb2NrZGVwX2Fzc2VydF9pcnFzX2VuYWJsZWQoKTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoyMjA0OlxcdGlmIChhcGVpX2NsYWltX3NlYShOVUxMKSA9PSAwKVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTIyMDUtXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9ODY2PXN0YXRpYyBpbnQgZG9fc2VhKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtODcyLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo4NzM6XFx0aWYgKHVzZXJfbW9kZShyZWdzKSBcXHUwMDI2XFx1MDAyNiBhcGVpX2NsYWltX3NlYShyZWdzKSA9PSAwKSB7XFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTg3NC1cXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzoyNTozNS4zODE0NTMxNjdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTkzNTU1NzgwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBgYXJjaC9hcm02NC9tbS9mYXVsdC5jYC4gU3BlY2lmaWNhbGx5LCBpdCdzIGFkZGluZyBhIGNoZWNrIHdpdGhpbiBgZG9fc2VhKClgLCB0aGUgU3luY2hyb25vdXMgRXh0ZXJuYWwgQWJvcnQgKFNFQSkgaGFuZGxlciwgbGlrZSB0aGlzOlxuXG5gYGBjXG5cdGlmICghdXNlcl9tb2RlKHJlZ3MpIFx1MDAyNlx1MDAyNiBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSlcblx0XHRyZXR1cm4gMDtcbmBgYFxuXG5Fc3NlbnRpYWxseSwgaWYgYSBTRUEgaGFwcGVucyBpbiBrZXJuZWwgbW9kZSAoRUwxKSwgaW5zdGVhZCBvZiBpbW1lZGlhdGVseSBjcmFzaGluZyDigJMgYXMgd291bGQgaGFwcGVuIHdpdGggYGFybTY0X25vdGlmeV9kaWVgIOKAkyB0aGUgY29kZSBpcyBub3cgY2hlY2tpbmcgaWYgYGZpeHVwX2V4Y2VwdGlvbigpYCBjYW4gaGFuZGxlIGl0LiAgSWYgYGZpeHVwX2V4Y2VwdGlvbmAgcmV0dXJucyB0cnVlLCB0aGUgZXhjZXB0aW9uIGlzIFwiZml4ZWQgdXBcIiAoaGFuZGxlZCkuIFRoaXMgaXMgaW50ZXJlc3RpbmcuXG5cbklzIHRoaXMgZnV6emluZy13b3J0aHk/IEFic29sdXRlbHkuIFRoaXMgaXMgY29yZSBBUk02NCBtZW1vcnkgYWJvcnQvZXhjZXB0aW9uIGhhbmRsaW5nLiBBIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGhlcmUgY291bGQgbGVhZCB0byBzb21lIG5hc3R5IGV4cGxvaXRzLCBpZiBhIGJhZCBhY3RvciBjYW4gdHJpZ2dlciB0aGUgY29kZSBwYXRoLlxuXG5TbywgdGhlIGtleSBzeW1ib2xzIGhlcmUgYXJlIGBmaXh1cF9leGNlcHRpb25gICh3aGljaCwgaW1wb3J0YW50bHksIGlzIGEgZ2xvYmFsLCBub24tc3RhdGljIGZ1bmN0aW9uIGRlZmluZWQgaW4gYGFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jYCkgYW5kIGBkb19zZWFgICh0aGUgU0VBIGhhbmRsZXIgdGhpcyBwYXRjaCBtb2RpZmllcykuIGBkb19zZWFgIGlzIHN0YXRpYyBidXQgaXMgdXNlZCBpbiBgZmF1bHRfaW5mb2AgdGFibGUsIHNvIGl0ICpzaG91bGQqIGJlIGFkZHJlc3MtdGFrZW4gYW5kIGFjY2Vzc2libGUgaW4ga2FsbHN5bXMgaWYgQ09ORklHX0tBTExTWU1TIGlzIGVuYWJsZWQuIEkgc2hvdWxkIHByb2JhYmx5IGtlZXAgYW4gZXllIG9uIGBkb19tZW1fYWJvcnRgIHRvbywgYXMgaXQncyB0aGUgZ2VuZXJhbCBlbnRyeSBwb2ludCBmb3IgbWVtb3J5IGFib3J0cy5cblxuQW5kIHRoYW5rZnVsbHksIG5vIHNwZWNpYWwgS2NvbmZpZyBvcHRpb25zIGFyZSByZXF1aXJlZCBiZWNhdXNlIHRoaXMgaXMgdW5jb25kaXRpb25hbCBpbiBgYXJjaC9hcm02NC9tbS9mYXVsdC5jYC4gVGhpcyBtYWtlcyB0aGluZ3MgbXVjaCBzaW1wbGVyLlxuXG5TbywgdG8gc3VtbWFyaXplOlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogVHJ1ZVxuKiAgICoqRm9jdXNTeW1ib2xzKio6IGBbXCJmaXh1cF9leGNlcHRpb25cIiwgXCJkb19zZWFcIl1gXG4qICAgKipFbmFibGVDb25maWdzKio6IGBbXWBcblxuVGhlIHJlYXNvbmluZz8gSXQncyBhbGwgYWJvdXQgcHJvYmluZyB0aGUgY3JpdGljYWwga2VybmVsIGV4Y2VwdGlvbiBoYW5kbGluZyBsb2dpYy4gVGhpcyBsb29rcyBnb29kLiBSZWFkeSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1MDMsIk91dHB1dFRva2VucyI6ODksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6MjU6NDUuMzE3MDEzMjIyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmaXh1cF9leGNlcHRpb25cIixcbiAgICBcImRvX3NlYVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsbG93cyBrZXJuZWwtbW9kZSBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydHMgKFNFQSkgdG8gYmUgcmVjb3ZlcmVkIHVzaW5nIGV4Y2VwdGlvbiBmaXh1cCB0YWJsZXMgaW5zdGVhZCBvZiBpbW1lZGlhdGVseSBwYW5pY2tpbmcuIFRoaXMgbW9kaWZpZXMgY29yZSBBUk02NCBmYXVsdCBoYW5kbGluZyBsb2dpYyByZWFjaGFibGUgZHVyaW5nIGtlcm5lbCBtZW1vcnkgYWNjZXNzZXMgdGhhdCBmYXVsdCB3aXRoIFNFQS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmaXh1cF9leGNlcHRpb25cIixcbiAgICBcImRvX3NlYVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsbG93cyBrZXJuZWwtbW9kZSBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydHMgKFNFQSkgdG8gYmUgcmVjb3ZlcmVkIHVzaW5nIGV4Y2VwdGlvbiBmaXh1cCB0YWJsZXMgaW5zdGVhZCBvZiBpbW1lZGlhdGVseSBwYW5pY2tpbmcuIFRoaXMgbW9kaWZpZXMgY29yZSBBUk02NCBmYXVsdCBoYW5kbGluZyBsb2dpYyByZWFjaGFibGUgZHVyaW5nIGtlcm5lbCBtZW1vcnkgYWNjZXNzZXMgdGhhdCBmYXVsdCB3aXRoIFNFQS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6MjU6NDUuMzE3MDQxNjgyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzcyMTgyNjczNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjI1OjQ1LjMxNzQ4OTEwMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjczNzIxMzc1OTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZG9fc2VhKClgIGluIGBhcmNoL2FybTY0L21tL2ZhdWx0LmNgIHRvIGF0dGVtcHQgZXhjZXB0aW9uIGZpeHVwIHZpYSBgZml4dXBfZXhjZXB0aW9uKClgIHdoZW4gYSBTeW5jaHJvbm91cyBFeHRlcm5hbCBBYm9ydCAoU0VBKSBvY2N1cnMgaW4ga2VybmVsIG1vZGUgKGAhdXNlcl9tb2RlKHJlZ3MpYCksIGFsbG93aW5nIGdyYWNlZnVsIHJlY292ZXJ5IChlLmcuLCByZXR1cm5pbmcgLUVGQVVMVCBmb3IgdWFjY2VzcyBmYXVsdHMpIGluc3RlYWQgb2YgZHlpbmcuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGxvdy1sZXZlbCBhcmNoaXRlY3R1cmUgZmF1bHQvZXhjZXB0aW9uIGhhbmRsaW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IG1vZGlmeSBkYXRhIHN0cnVjdHVyZSBmaWVsZHMgb3IgcGFkZGluZywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBpbml0aWFsaXphdGlvbiBsb2dpYywgYW5kIGRvZXMgbm90IGNvcHkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZS4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZkYTc4ZWY3ZGMwZjg0N2Y3ZWZhNGE5NTIxMzJhMjk4NmUyM2U0MzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAyMzoyNDowNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vZmF1bHQuYyBiL2FyY2gvYXJtNjQvbW0vZmF1bHQuY1xuaW5kZXggMGI1MjU1NzY1MmJlNi4uY2EzOTZiNGJkZGEwMyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vZmF1bHQuY1xuKysrIGIvYXJjaC9hcm02NC9tbS9mYXVsdC5jXG5AQCAtODc4LDYgKzg3OCw5IEBAIHN0YXRpYyBpbnQgZG9fc2VhKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuK1x0aWYgKCF1c2VyX21vZGUocmVncykgXHUwMDI2XHUwMDI2IGZpeHVwX2V4Y2VwdGlvbihyZWdzLCBlc3IpKVxuK1x0XHRyZXR1cm4gMDtcbitcbiBcdGlmIChlc3IgXHUwMDI2IEVTUl9FTHhfRm5WKSB7XG4gXHRcdHNpYWRkciA9IDA7XG4gXHR9IGVsc2Uge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6MjU6NDUuMzE3NDkwMDgyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY5MTUxNzIyNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBcm02NCBGYXVsdCBIYW5kbGluZyBpbiBgZmF1bHQuY2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucywgc28gSSdtIGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXI6IGBhcmNoL2FybTY0L21tL2ZhdWx0LmNgLiBUaGUgZmF1bHQgaGFuZGxpbmcgY29kZSBpcyBjcml0aWNhbCwgc28gYSBjaGFuZ2UgaGVyZSBhbHdheXMgd2FycmFudHMgY2FyZWZ1bCBzY3J1dGlueS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiBgZG9fc2VhYCBhbmQgYGZpeHVwX2V4Y2VwdGlvbmAuIFRoZXNlIGFyZSB0aGUgbGlrZWx5IGVudHJ5IHBvaW50cyBmb3IgYW55IGZhdWx0LXJlbGF0ZWQgcHJvY2Vzc2luZywgYW5kIHVuZGVyc3RhbmRpbmcgdGhlaXIgaW50ZXJhY3Rpb24gaXMga2V5LiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIHBhdGhzIHRocm91Z2ggdGhlbSwgc2VlIGhvdyB0aGV5IGludGVyYWN0LCBhbmQgaWRlbnRpZnkgZXhhY3RseSB3aGF0J3MgYmVpbmcgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaC4gSSBleHBlY3QgdG8gc2VlIGRldGFpbGVkIGNoZWNrcyBmb3IgdGhlIGZhdWx0IHR5cGUgYW5kIGFkZHJlc3MsIGFuZCBhIGNvbmRpdGlvbmFsIHNlcXVlbmNlIGJhc2VkIG9uIHRoZSBzeXN0ZW0gc3RhdGUgYW5kIHRoZSBmYXVsdCdzIG5hdHVyZS4gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBjaGFuZ2UgaW1wYWN0cyB0aGUgZXhpc3RpbmcgZXhjZXB0aW9uIGhhbmRsaW5nIGxvZ2ljIHdpbGwgYmUgY3JpdGljYWwgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgaXMgY29ycmVjdCBhbmQgd2hhdCB0aGUgcGVyZm9ybWFuY2UgYW5kL29yIHNlY3VyaXR5IGltcGFjdHMgb2YgdGhlIHByb3Bvc2VkIGNoYW5nZXMgbWlnaHQgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjI1OjUyLjIzMjY2NTM5NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIxMzQ1MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fc2VhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQvbW0vZmF1bHQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L21tL2ZhdWx0LmM9ODYxPXN0YXRpYyBpbnQgZG9fYmFkKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtODY1LVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo4NjY6c3RhdGljIGludCBkb19zZWEodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtODY3LXtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz05MTY9c3RhdGljIGNvbnN0IHN0cnVjdCBmYXVsdF9pbmZvIGZhdWx0X2luZm9bXSA9IHtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05MzItXFx0eyBkb19wYWdlX2ZhdWx0LFxcdFNJR1NFR1YsIFNFR1ZfQUNDRVJSLFxcdFxcXCJsZXZlbCAzIHBlcm1pc3Npb24gZmF1bHRcXFwiXFx0fSxcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTMzOlxcdHsgZG9fc2VhLFxcdFxcdFNJR0JVUywgIEJVU19PQkpFUlIsXFx0XFxcInN5bmNocm9ub3VzIGV4dGVybmFsIGFib3J0XFxcIlxcdH0sXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTkzNC1cXHR7IGRvX3RhZ19jaGVja19mYXVsdCxcXHRTSUdTRUdWLCBTRUdWX01URVNFUlIsXFx0XFxcInN5bmNocm9ub3VzIHRhZyBjaGVjayBmYXVsdFxcXCJcXHR9LFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05MzUtXFx0eyBkb19iYWQsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJ1bmtub3duIDE4XFxcIlxcdFxcdFxcdH0sXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjkzNjpcXHR7IGRvX3NlYSxcXHRcXHRTSUdLSUxMLCBTSV9LRVJORUwsXFx0XFxcImxldmVsIC0xICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVxcXCJcXHR9LFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5Mzc6XFx0eyBkb19zZWEsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJsZXZlbCAwICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVxcXCJcXHR9LFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5Mzg6XFx0eyBkb19zZWEsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJsZXZlbCAxICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVxcXCJcXHR9LFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5Mzk6XFx0eyBkb19zZWEsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJsZXZlbCAyICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVxcXCJcXHR9LFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5NDA6XFx0eyBkb19zZWEsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJsZXZlbCAzICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVxcXCJcXHR9LFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5NDE6XFx0eyBkb19zZWEsXFx0XFx0U0lHQlVTLCAgQlVTX09CSkVSUixcXHRcXFwic3luY2hyb25vdXMgcGFyaXR5IG9yIEVDQyBlcnJvclxcXCIgfSxcXHQvLyBSZXNlcnZlZCB3aGVuIFJBUyBpcyBpbXBsZW1lbnRlZFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05NDItXFx0eyBkb19iYWQsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJ1bmtub3duIDI1XFxcIlxcdFxcdFxcdH0sXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTk0My1cXHR7IGRvX2JhZCxcXHRcXHRTSUdLSUxMLCBTSV9LRVJORUwsXFx0XFxcInVua25vd24gMjZcXFwiXFx0XFx0XFx0fSxcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTQ0OlxcdHsgZG9fc2VhLFxcdFxcdFNJR0tJTEwsIFNJX0tFUk5FTCxcXHRcXFwibGV2ZWwgLTEgc3luY2hyb25vdXMgcGFyaXR5IGVycm9yICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVxcXCJcXHR9LFxcdC8vIFJlc2VydmVkIHdoZW4gUkFTIGlzIGltcGxlbWVudGVkXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjk0NTpcXHR7IGRvX3NlYSxcXHRcXHRTSUdLSUxMLCBTSV9LRVJORUwsXFx0XFxcImxldmVsIDAgc3luY2hyb25vdXMgcGFyaXR5IGVycm9yICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVxcXCJcXHR9LFxcdC8vIFJlc2VydmVkIHdoZW4gUkFTIGlzIGltcGxlbWVudGVkXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjk0NjpcXHR7IGRvX3NlYSxcXHRcXHRTSUdLSUxMLCBTSV9LRVJORUwsXFx0XFxcImxldmVsIDEgc3luY2hyb25vdXMgcGFyaXR5IGVycm9yICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVxcXCJcXHR9LFxcdC8vIFJlc2VydmVkIHdoZW4gUkFTIGlzIGltcGxlbWVudGVkXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjk0NzpcXHR7IGRvX3NlYSxcXHRcXHRTSUdLSUxMLCBTSV9LRVJORUwsXFx0XFxcImxldmVsIDIgc3luY2hyb25vdXMgcGFyaXR5IGVycm9yICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVxcXCJcXHR9LFxcdC8vIFJlc2VydmVkIHdoZW4gUkFTIGlzIGltcGxlbWVudGVkXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjk0ODpcXHR7IGRvX3NlYSxcXHRcXHRTSUdLSUxMLCBTSV9LRVJORUwsXFx0XFxcImxldmVsIDMgc3luY2hyb25vdXMgcGFyaXR5IGVycm9yICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVxcXCJcXHR9LFxcdC8vIFJlc2VydmVkIHdoZW4gUkFTIGlzIGltcGxlbWVudGVkXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTk0OS1cXHR7IGRvX2JhZCxcXHRcXHRTSUdLSUxMLCBTSV9LRVJORUwsXFx0XFxcInVua25vd24gMzJcXFwiXFx0XFx0XFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6MjU6NTIuMzI0ODA1NTEzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0ODA1Nzc4NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBBcm02NCBGYXVsdCBIYW5kbGVyKipcblxuQWxyaWdodCwgbGV0J3MgY3JhY2sgb3BlbiBgYXJjaC9hcm02NC9tbS9mYXVsdC5jYCBhbmQgemVybyBpbiBhcm91bmQgbGluZSA4NjYuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGUgYXJjaGl0ZWN0dXJlIGhhbmRsZXMgbWVtb3J5IGZhdWx0cy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIHRoZSBmYXVsdCBoYW5kbGVyIGFuZCBob3cgaXQgZGlmZmVyZW50aWF0ZXMgYmV0d2VlbiBkaWZmZXJlbnQgZmF1bHQgc2NlbmFyaW9zIGFuZCBwcml2aWxlZ2UgbGV2ZWxzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIGZpZ3VyZXMgb3V0IGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBwYWdlIGZhdWx0LCBhIGRhdGEgYWJvcnQsIGluc3RydWN0aW9uIGFib3J0LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gSSdtIGtlZW4gb24gdHJhY2luZyB0aGUgZGVjaXNpb24gcHJvY2VzczsgaG93IGRvZXMgdGhlIGNvZGUgZGV0ZXJtaW5lIHRoZSBjYXVzZSBvZiB0aGUgYWNjZXNzIHZpb2xhdGlvbiwgYW5kIHRoZW4sIGhvdyBkb2VzIGl0IHJlYWN0P1xuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGxvb2tpbmcgYXQgdGhlIHdheSB0aGUgTU1VIGlzIGludGVycm9nYXRlZCB0byB0cnkgdG8gZGVkdWNlIHRoZSBjYXVzZSBvZiB0aGUgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM0MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjI2OjA3LjEzMDU4NjM3NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9hcm02NC9tbS9mYXVsdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg2MCxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg2MDpcXHRcXG4gODYxOlxcdHN0YXRpYyBpbnQgZG9fYmFkKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIDg2MjpcXHR7XFxuIDg2MzpcXHRcXHRyZXR1cm4gMTsgLyogXFxcImZhdWx0XFxcIiAqL1xcbiA4NjQ6XFx0fVxcbiA4NjU6XFx0XFxuIDg2NjpcXHRzdGF0aWMgaW50IGRvX3NlYSh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiA4Njc6XFx0e1xcbiA4Njg6XFx0XFx0Y29uc3Qgc3RydWN0IGZhdWx0X2luZm8gKmluZjtcXG4gODY5OlxcdFxcdHVuc2lnbmVkIGxvbmcgc2lhZGRyO1xcbiA4NzA6XFx0XFxuIDg3MTpcXHRcXHRpbmYgPSBlc3JfdG9fZmF1bHRfaW5mbyhlc3IpO1xcbiA4NzI6XFx0XFxuIDg3MzpcXHRcXHRpZiAodXNlcl9tb2RlKHJlZ3MpIFxcdTAwMjZcXHUwMDI2IGFwZWlfY2xhaW1fc2VhKHJlZ3MpID09IDApIHtcXG4gODc0OlxcdFxcdFxcdC8qXFxuIDg3NTpcXHRcXHRcXHQgKiBBUEVJIGNsYWltZWQgdGhpcyBhcyBhIGZpcm13YXJlLWZpcnN0IG5vdGlmaWNhdGlvbi5cXG4gODc2OlxcdFxcdFxcdCAqIFNvbWUgcHJvY2Vzc2luZyBkZWZlcnJlZCB0byB0YXNrX3dvcmsgYmVmb3JlIHJldF90b191c2VyKCkuXFxuIDg3NzpcXHRcXHRcXHQgKi9cXG4gODc4OlxcdFxcdFxcdHJldHVybiAwO1xcbiA4Nzk6XFx0XFx0fVxcbiA4ODA6XFx0XFxuIDg4MTpcXHRcXHRpZiAoIXVzZXJfbW9kZShyZWdzKSBcXHUwMDI2XFx1MDAyNiBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSlcXG4gODgyOlxcdFxcdFxcdHJldHVybiAwO1xcbiA4ODM6XFx0XFxuIDg4NDpcXHRcXHRpZiAoZXNyIFxcdTAwMjYgRVNSX0VMeF9GblYpIHtcXG4gODg1OlxcdFxcdFxcdHNpYWRkciA9IDA7XFxuIDg4NjpcXHRcXHR9IGVsc2Uge1xcbiA4ODc6XFx0XFx0XFx0LypcXG4gODg4OlxcdFxcdFxcdCAqIFRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWVzIHRoYXQgdGhlIHRhZyBiaXRzIG9mIEZBUl9FTDEgYXJlXFxuIDg4OTpcXHRcXHRcXHQgKiBVTktOT1dOIGZvciBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydHMuIE1hc2sgdGhlbSBvdXQgbm93XFxuIDg5MDpcXHRcXHRcXHQgKiBzbyB0aGF0IHVzZXJzcGFjZSBkb2Vzbid0IHNlZSB0aGVtLlxcbiA4OTE6XFx0XFx0XFx0ICovXFxuIDg5MjpcXHRcXHRcXHRzaWFkZHIgID0gdW50YWdnZWRfYWRkcihmYXIpO1xcbiA4OTM6XFx0XFx0fVxcbiA4OTQ6XFx0XFx0YWRkX3RhaW50KFRBSU5UX01BQ0hJTkVfQ0hFQ0ssIExPQ0tERVBfU1RJTExfT0spO1xcbiA4OTU6XFx0XFx0YXJtNjRfbm90aWZ5X2RpZShpbmYtXFx1MDAzZW5hbWUsIHJlZ3MsIGluZi1cXHUwMDNlc2lnLCBpbmYtXFx1MDAzZWNvZGUsIHNpYWRkciwgZXNyKTtcXG4gODk2OlxcdFxcbiA4OTc6XFx0XFx0cmV0dXJuIDA7XFxuIDg5ODpcXHR9XFxuIDg5OTpcXHRcXG4gOTAwOlxcdHN0YXRpYyBpbnQgZG9fdGFnX2NoZWNrX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcXG4gOTAxOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiA5MDI6XFx0e1xcbiA5MDM6XFx0XFx0LypcXG4gOTA0OlxcdFxcdCAqIFRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWVzIHRoYXQgYml0cyA2Mzo2MCBvZiBGQVJfRUwxIGFyZSBVTktOT1dOXFxuIDkwNTpcXHRcXHQgKiBmb3IgdGFnIGNoZWNrIGZhdWx0cy4gU2V0IHRoZW0gdG8gY29ycmVzcG9uZGluZyBiaXRzIGluIHRoZSB1bnRhZ2dlZFxcbiA5MDY6XFx0XFx0ICogYWRkcmVzcyBpZiBBUk02NF9NVEVfRkFSIGlzbid0IHN1cHBvcnRlZC5cXG4gOTA3OlxcdFxcdCAqIE90aGVyd2lzZSwgYml0cyA2Mzo2MCBvZiBGQVJfRUwxIGFyZSBub3QgVU5LTk9XTi5cXG4gOTA4OlxcdFxcdCAqL1xcbiA5MDk6XFx0XFx0aWYgKCFjcHVzX2hhdmVfY2FwKEFSTTY0X01URV9GQVIpKVxcbiA5MTA6XFx0XFx0XFx0ZmFyID0gKF9fdW50YWdnZWRfYWRkcihmYXIpIFxcdTAwMjYgfk1URV9UQUdfTUFTSykgfCAoZmFyIFxcdTAwMjYgTVRFX1RBR19NQVNLKTtcXG4gOTExOlxcdFxcbiA5MTI6XFx0XFx0ZG9fYmFkX2FyZWEoZmFyLCBlc3IsIHJlZ3MpO1xcbiA5MTM6XFx0XFx0cmV0dXJuIDA7XFxuIDkxNDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjI2OjA3LjEzMDY5MTA2M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTUyMjM0ODE2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhpcyBQYXRjaDogQSBRdWljayBEaXZlIGludG8gRXhjZXB0aW9uIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgZ2V0IHJpZ2h0IGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSwgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBgZG9fc2VhYCwgdGhlIHN5bmNocm9ub3VzIGV4dGVybmFsIGFib3J0IGhhbmRsZXIgb24gYXJtNjQuIEknbSBzZWVpbmcgaXQgYWRkcyBhIGNydWNpYWwgY2hlY2s6XG5cbmBgYGNcblx0aWYgKCF1c2VyX21vZGUocmVncykgXHUwMDI2XHUwMDI2IGZpeHVwX2V4Y2VwdGlvbihyZWdzLCBlc3IpKVxuXHRcdHJldHVybiAwO1xuYGBgXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHdoYXQgYGZpeHVwX2V4Y2VwdGlvbmAgaXMgYWN0dWFsbHkgKmRvaW5nKi4gQmFzZWQgb24gdGhlIGNvbnRleHQsIEknbSBwcmV0dHkgc3VyZSB0aGF0IGl0J3MgaGFuZGxpbmcgc29tZSBzb3J0IG9mIGV4Y2VwdGlvbiBmaXgtdXAgbWVjaGFuaXNtLiBXaGVyZSdzIGl0IGRlZmluZWQ/IEknbGwgcXVpY2tseSBsb29rIGl0IHVwLCBsaWtlbHkgaW4gYGFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jYCBvciBhIHJlbGF0ZWQgZmlsZS4gSSdtIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgY2VudHJhbCB0byByZXNvbHZpbmcgb3IgbWFza2luZyBzb21lIHNvcnQgb2YgZXhjZXB0aW9uLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQncyBpbnZva2VkIGFuZCB3aGF0IGl0IHJldHVybnMuIFRoaXMgY291bGQgaW52b2x2ZSBhbiBleGNlcHRpb24gdGFibGUgbG9va3VwLCBwZXJoYXBzIHNvbWUgcmVnaXN0ZXIgbWFuaXB1bGF0aW9uLCBhbmQgYSBwb3NzaWJsZSByZXR1cm4gdG8gbm9ybWFsIGV4ZWN1dGlvbi4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciBpdHMgaGFuZGxpbmcgYWZmZWN0cyB1c2Vyc3BhY2Ugb3IgdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ1MSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6MjY6MjIuNjUzMDQxOTMyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDgyNDY4NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpeHVwX2V4Y2VwdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VmaS5oPTE2PWV4dGVybiB2b2lkIGVmaV9pbml0KHZvaWQpO1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWZpLmgtMTctXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lZmkuaDoxODpib29sIGVmaV9ydW50aW1lX2ZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgY29uc3QgY2hhciAqbXNnKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VmaS5oLTE5LSNlbHNlXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VmaS5oPTIyPXN0YXRpYyBpbmxpbmVcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VmaS5oOjIzOmJvb2wgZWZpX3J1bnRpbWVfZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBjb25zdCBjaGFyICptc2cpXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lZmkuaC0yNC17XFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2V4dGFibGUuaD00Mz1ib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9leHRhYmxlLmgtNDktXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9leHRhYmxlLmg6NTA6Ym9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXNyKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2V4dGFibGUuaC01MS0jZW5kaWZcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2VmaS5jPTIyMD1hc21saW5rYWdlIGVmaV9zdGF0dXNfdCBfX2VmaV9ydF9hc21fcmVjb3Zlcih2b2lkKTtcXG5hcmNoL2FybTY0L2tlcm5lbC9lZmkuYy0yMjEtXFxuYXJjaC9hcm02NC9rZXJuZWwvZWZpLmM6MjIyOmJvb2wgZWZpX3J1bnRpbWVfZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBjb25zdCBjaGFyICptc2cpXFxuYXJjaC9hcm02NC9rZXJuZWwvZWZpLmMtMjIzLXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3Byb2Jlcy9rcHJvYmVzLmM9MzAxPWludCBfX2twcm9iZXMga3Byb2JlX2ZhdWx0X2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBmc3IpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMva3Byb2Jlcy5jLTMxMC1cXHQgKiBtdXN0IGJlIGxlZnQgYWxvbmUgZm9yIHRoZSBub3JtYWwgcGFnZSBmYXVsdCBoYW5kbGVyLCBpbmNsdWRpbmdcXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMva3Byb2Jlcy5jOjMxMTpcXHQgKiBmaXh1cF9leGNlcHRpb24uXFxuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL2twcm9iZXMuYy0zMTItXFx0ICovXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC90cmFwcy5jPTQ5NT12b2lkIGRvX2VsMV9idGkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXNyKVxcbmFyY2gvYXJtNjQva2VybmVsL3RyYXBzLmMtNDk2LXtcXG5hcmNoL2FybTY0L2tlcm5lbC90cmFwcy5jOjQ5NzpcXHRpZiAoZWZpX3J1bnRpbWVfZml4dXBfZXhjZXB0aW9uKHJlZ3MsIFxcXCJCVEkgdmlvbGF0aW9uXFxcIikpIHtcXG5hcmNoL2FybTY0L2tlcm5lbC90cmFwcy5jLTQ5OC1cXHRcXHRyZWdzLVxcdTAwM2Vwc3RhdGUgXFx1MDAyNj0gflBTUl9CVFlQRV9NQVNLO1xcbi0tXFxuYXJjaC9hcm02NC9tbS9leHRhYmxlLmM9Njk9ZXhfaGFuZGxlcl9sb2FkX3VuYWxpZ25lZF96ZXJvcGFkKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxcbi0tXFxuYXJjaC9hcm02NC9tbS9leHRhYmxlLmMtOTQtXFxuYXJjaC9hcm02NC9tbS9leHRhYmxlLmM6OTU6Ym9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXNyKVxcbmFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jLTk2LXtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz00MDU9c3RhdGljIHZvaWQgX19kb19rZXJuZWxfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVzcixcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy00MTMtXFx0ICovXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjQxNDpcXHRpZiAoIWlzX2VsMV9pbnN0cnVjdGlvbl9hYm9ydChlc3IpIFxcdTAwMjZcXHUwMDI2IGZpeHVwX2V4Y2VwdGlvbihyZWdzLCBlc3IpKVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy00MTUtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTQ1MC1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6NDUxOlxcdGlmIChlZmlfcnVudGltZV9maXh1cF9leGNlcHRpb24ocmVncywgbXNnKSlcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNDUyLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz04NjY9c3RhdGljIGludCBkb19zZWEodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy04ODAtXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjg4MTpcXHRpZiAoIXVzZXJfbW9kZShyZWdzKSBcXHUwMDI2XFx1MDAyNiBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSlcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtODgyLVxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzoyNjoyNC4xMzU1MTQxNTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA0NDM4MzcwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBmaXh1cF9leGNlcHRpb25gIGluIGBleHRhYmxlLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGZpeHVwX2V4Y2VwdGlvbmAgaXMgYWN0dWFsbHkgZG9pbmcgd2l0aGluIGBhcmNoL2FybTY0L21tL2V4dGFibGUuY2AuIEknbSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBleGNlcHRpb24gdGFibGUgbWVjaGFuaXNtcyBpbiB0aGUga2VybmVsLCBlc3BlY2lhbGx5IG9uIEFSTTY0LCBidXQgSSB3YW50IHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiAqdGhpcyogc3BlY2lmaWMgZnVuY3Rpb24uIEknbSBwcm9iYWJseSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyBleGNlcHRpb25zIHRoYXQgYXJpc2Ugd2l0aGluIGV4Y2VwdGlvbiB0YWJsZXMgLSBlc3NlbnRpYWxseSwgdGhlIGV4Y2VwdGlvbiB0byB0aGUgZXhjZXB0aW9uIGhhbmRsaW5nLCBpZiB5b3Ugd2lsbC4gSSdtIGV4cGVjdGluZyB0byBzZWUgaG93IHRoZSBjb2RlIGRldGVybWluZXMgaWYgYW4gZXhjZXB0aW9uIGNhbiBiZSByZWNvdmVyZWQgZnJvbSwgYW5kIGlmIHNvLCBob3cgaXQganVtcHMgdG8gdGhlIGFwcHJvcHJpYXRlIGZpeHVwIGhhbmRsZXIuIEknbSBrZWVuIHRvIHNwb3QgYW55IGVkZ2UgY2FzZXMgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgaW50ZXJhY3Rpb25zIHdpdGggY29uY3VycmVudCBwcm9jZXNzZXMgYW5kIGludGVycnVwdHMsIHNpbmNlIHdlIGFyZSB0YWxraW5nIGFib3V0IGV4Y2VwdGlvbiBoYW5kbGluZyBhdCBzdWNoIGEgbG93IGxldmVsLiBBcmUgdGhlcmUgYW55IHVudXN1YWwgbWVtb3J5IGFjY2VzcyBwYXR0ZXJucyBvciBpbnN0cnVjdGlvbiBvcmRlcmluZyB0aGF0IGFyZSB3b3J0aCBub3Rpbmc/IEkgaG9wZSB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBmdW5jdGlvbidzIGxvZ2ljIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyBjb2RlLCBzbyBJIGNhbiBlbnN1cmUgdGhlIGNvZGUgdGhhdCB1c2VzIHRoaXMgZnVuY3Rpb24gaXMgb3B0aW1pemVkIGFuZCBkb2VzIG5vdCBjYXVzZSB1bmV4cGVjdGVkIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk0NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjI2OjI3LjE3OTkwMDQxMVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL2FybTY0L21tL2V4dGFibGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5MDpcXHRcXG4gIDkxOlxcdFxcdHJlZ3MtXFx1MDAzZXBjID0gZ2V0X2V4X2ZpeHVwKGV4KTtcXG4gIDkyOlxcdFxcdHJldHVybiB0cnVlO1xcbiAgOTM6XFx0fVxcbiAgOTQ6XFx0XFxuICA5NTpcXHRib29sIGZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlc3IpXFxuICA5NjpcXHR7XFxuICA5NzpcXHRcXHRjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleDtcXG4gIDk4OlxcdFxcbiAgOTk6XFx0XFx0ZXggPSBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpKTtcXG4gMTAwOlxcdFxcdGlmICghZXgpXFxuIDEwMTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdHN3aXRjaCAoZXgtXFx1MDAzZXR5cGUpIHtcXG4gMTA0OlxcdFxcdGNhc2UgRVhfVFlQRV9CUEY6XFxuIDEwNTpcXHRcXHRcXHRyZXR1cm4gZXhfaGFuZGxlcl9icGYoZXgsIHJlZ3MpO1xcbiAxMDY6XFx0XFx0Y2FzZSBFWF9UWVBFX1VBQ0NFU1NfRVJSX1pFUk86XFxuIDEwNzpcXHRcXHRjYXNlIEVYX1RZUEVfS0FDQ0VTU19FUlJfWkVSTzpcXG4gMTA4OlxcdFxcdFxcdHJldHVybiBleF9oYW5kbGVyX3VhY2Nlc3NfZXJyX3plcm8oZXgsIHJlZ3MpO1xcbiAxMDk6XFx0XFx0Y2FzZSBFWF9UWVBFX1VBQ0NFU1NfQ1BZOlxcbiAxMTA6XFx0XFx0XFx0cmV0dXJuIGV4X2hhbmRsZXJfdWFjY2Vzc19jcHkoZXgsIHJlZ3MsIGVzcik7XFxuIDExMTpcXHRcXHRjYXNlIEVYX1RZUEVfTE9BRF9VTkFMSUdORURfWkVST1BBRDpcXG4gMTEyOlxcdFxcdFxcdHJldHVybiBleF9oYW5kbGVyX2xvYWRfdW5hbGlnbmVkX3plcm9wYWQoZXgsIHJlZ3MpO1xcbiAxMTM6XFx0XFx0fVxcbiAxMTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjI2OjI3LjE3OTk4OTIwMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTg1ODg0OTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBcHBsaWNhYmlsaXR5IEFzc2Vzc21lbnQgZm9yIFN5bmNocm9ub3VzIEV4dGVybmFsIEFib3J0IEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIEtNU0FOIGlzIHJlbGV2YW50IGhlcmUuIEZpcnN0LCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaXMgYWJvdXQgaGFuZGxpbmcgU3luY2hyb25vdXMgRXh0ZXJuYWwgQWJvcnRzIChTRUFzKSBvbiBFTDEsIHNwZWNpZmljYWxseSBpbiBgYXJjaC9hcm02NC9tbS9mYXVsdC5jYC4gV2hlbiBhbiBTRUEgaGFwcGVucyAobGlrZSBkdXJpbmcga2VybmVsIG9yIHVhY2Nlc3MgbWVtb3J5IGFjY2VzcywgdGhpbmsgYGNvcHlfZnJvbV91c2VyYCBvciB0aGUgbGlrZSksIHRoZSBgZG9fc2VhYCBmdW5jdGlvbiBub3cgY2hlY2tzIGlmIHRoZSBmYXVsdCBvY2N1cnJlZCBpbiBrZXJuZWwgbW9kZS4gSWYgc28sIGl0IGNhbGxzIGBmaXh1cF9leGNlcHRpb25gIHRvIHNlZSBpZiB0aGVyZSdzIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIGF2YWlsYWJsZS4gSWYgYSBoYW5kbGVyIGV4aXN0cyAod2UncmUgdGFsa2luZyBhYm91dCBoYW5kbGVycyBmb3IgdGhpbmdzIGxpa2UgdWFjY2VzcywgQlBGLCBvciBgZ2V0X3VzZXJgIHNjZW5hcmlvcyksIGBmaXh1cF9leGNlcHRpb25gIGRvZXMgaXRzIGpvYjogaXQgZml4ZXMgdGhlIHJlZ2lzdGVycyAoemVyb2luZyB0aGUgZGVzdGluYXRpb24sIHNldHRpbmcgYW4gZXJyb3IgcmV0dXJuLCBhbmQgYWRqdXN0aW5nIHRoZSBwcm9ncmFtIGNvdW50ZXIgdG8gdGhlIGZpeHVwIGFkZHJlc3MpLiBUaGlzIGFsbG93cyB0aGUga2VybmVsIHRvIGdyYWNlZnVsbHkgaGFuZGxlIHRoZSBmYXVsdCAobGlrZSByZXR1cm5pbmcgYC1FRkFVTFRgKSBpbnN0ZWFkIG9mIGltbWVkaWF0ZWx5IHBhbmlja2luZyB2aWEgYGFybTY0X25vdGlmeV9kaWVgLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBLTVNBTiBjb25jZXJucyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeT8gTGV0J3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LlxuXG4xLiAgKipLZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZToqKiBOb3BlLiBUaGlzIHBhdGNoIGlzbid0IG1vZGlmeWluZyBvciBpbnRyb2R1Y2luZyBhbnkgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHRoZW4gcGFzc2VkIHRvIHVzZXJzcGFjZSB2aWEgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIGBuZXRsaW5rYCwgYGlvY3RsYCwgb3IgYW55dGhpbmcgc2ltaWxhci4gTm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogTm9wZS4gVGhlIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiBgZG9fc2VhYCAoYHJlZ3NgIGFuZCBgZXNyYCkgYXJlIHBhcmFtZXRlcnMgcHJvdmlkZWQgYnkgbG93LWxldmVsIGV4Y2VwdGlvbiBlbnRyeS4gVGhleSBhcmUgbm90IHVuaW5pdGlhbGl6ZWQuXG4zLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zOioqIE5vcGUuIFRoZXJlIGFyZSBubyBhbGxvY2F0aW9ucyBpbnZvbHZlZCBpbiB0aGlzIHBhdGNoIGF0IGFsbC5cbjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgbG9naWMgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBieXRlczoqKiBOb3BlLiBUaGlzIGlzbid0IG1hbmlwdWxhdGluZyBidWZmZXJzIG9yIGFsdGVyaW5nIGhvdyBib3VuZHMgY2hlY2tzIGFyZSBwZXJmb3JtZWQgaW4gYSB3YXkgdGhhdCB3b3VsZCBpbnRyb2R1Y2UgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuXG41LiAgKipFeGNlcHRpb24gZml4dXA6KiogU3BlY2lmaWNhbGx5LCBzdGFuZGFyZCBmaXh1cCByb3V0aW5lcyB6ZXJvIG91dCB0aGUgcmVtYWluaW5nIGRlc3RpbmF0aW9uIGJ1ZmZlciBvciBzZXQgdGhlIGVycm9yIHJlZ2lzdGVyLiBLTVNBTiBhbHNvIGRvZXNuJ3Qgc3VwcG9ydCBhcm02NCBpbiBvbGRlciBrZXJuZWxzIG9yIHJ1bnMgb24geDg2XzY0LCBidXQgZXZlbiBjb25jZXB0dWFsbHksIGV4Y2VwdGlvbiB0YWJsZSBmaXh1cCBmb3Igc3luY2hyb25vdXMgZXh0ZXJuYWwgYWJvcnRzIGlzIGFuIGFyY2hpdGVjdHVyZSBleGNlcHRpb24gaGFuZGxpbmcgLyBmYXVsdCByZWNvdmVyeSBtZWNoYW5pc20uIEl0IGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuU28sIGxldCdzIGRvdWJsZS1jaGVjayBhZ2Fpbi4gV2hhdCB3YXMgdGhpcyAqYWN0dWFsbHkqIGZpeGluZz8gSXQncyBmaXhpbmcgYSBzaXR1YXRpb24gd2hlcmUgYW4gU0VBIGR1cmluZyBFTDEgdWFjY2VzcyBvciBtZW1vcnkgYWNjZXNzIHdhcyBjYXVzaW5nIGEga2VybmVsIHBhbmljLCB3aGVuIGluc3RlYWQgaXQgc2hvdWxkIGJlIHRha2luZyB0aGUgZXhjZXB0aW9uIHRhYmxlIGZpeHVwIHBhdGggKHdoaWNoIHdpbGwgcmV0dXJuIGAtRUZBVUxUYCkuXG5cbktBU0FOLCBMT0NLREVQLCBvdGhlciBkZXRlY3RvcnMgdnMuIEtNU0FOOiBUaGlzIGlzIGxvdy1sZXZlbCBBUk02NCBleGNlcHRpb24gaGFuZGxpbmcgbG9naWMuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG5vIG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gYnVmZmVyIGhhbmRsaW5nLCBubyBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIEtNU0FOIGlzIGp1c3Qgbm90IGFwcGxpY2FibGUgaGVyZS4gYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS5cblxuTXkgcmVhc29uaW5nLCBzdHJ1Y3R1cmVkIGNsZWFybHksIGlzIHRoaXM6XG5cbiogICAqKlBhdGNoIFN1bW1hcnk6KiogVGhlIHBhdGNoIHVwZGF0ZXMgYGFyY2gvYXJtNjQvbW0vZmF1bHQuY2AgdG8gaW52b2tlIGBmaXh1cF9leGNlcHRpb24oKWAgaW4gYGRvX3NlYSgpYCB3aGVuIGFuIEVMMSBTRUEgb2NjdXJzLiBUaGlzIGVuYWJsZXMga2VybmVsIGV4Y2VwdGlvbiBmaXh1cCBoYW5kbGVycyAocGFydGljdWxhcmx5IGZvciB1YWNjZXNzKSB0byBoYW5kbGUgdGhlIGZhdWx0LCBhdm9pZGluZyBhIGtlcm5lbCBwYW5pYy5cbiogICAqKktNU0FOIENvbnRyYXN0OioqIEtNU0FOIGlzIGZvciBkZXRlY3RpbmcgdXNlcyBhbmQgbGVha3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgcGF0Y2ggKmRvZXNuJ3QqIGludHJvZHVjZSBuZXcgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uLCBvciBjcmVhdGUgcGF0aHMgdGhhdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY2hhbmdlIG9ubHkgYWZmZWN0cyBleGNlcHRpb24gcm91dGluZyBmb3IgU0VBcyBvbiBBUk02NC4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgcmlzaywgbm8ga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBubyBuZWVkIGZvciBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cblxuQWxyaWdodCwgdGhhdCdzIG15IGFzc2Vzc21lbnQuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY1OCwiT3V0cHV0VG9rZW5zIjoxNzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzoyNjo1OS4wMzg4NDE4NTdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBkb19zZWEoKWAgaW4gYGFyY2gvYXJtNjQvbW0vZmF1bHQuY2AgdG8gYXR0ZW1wdCBleGNlcHRpb24gZml4dXAgdmlhIGBmaXh1cF9leGNlcHRpb24oKWAgd2hlbiBhIFN5bmNocm9ub3VzIEV4dGVybmFsIEFib3J0IChTRUEpIG9jY3VycyBpbiBrZXJuZWwgbW9kZSAoYCF1c2VyX21vZGUocmVncylgKSwgYWxsb3dpbmcgZ3JhY2VmdWwgcmVjb3ZlcnkgKGUuZy4sIHJldHVybmluZyAtRUZBVUxUIGZvciB1YWNjZXNzIGZhdWx0cykgaW5zdGVhZCBvZiBkeWluZy5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgbG93LWxldmVsIGFyY2hpdGVjdHVyZSBmYXVsdC9leGNlcHRpb24gaGFuZGxpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgc3RydWN0dXJlIGZpZWxkcyBvciBwYWRkaW5nLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGluaXRpYWxpemF0aW9uIGxvZ2ljLCBhbmQgZG9lcyBub3QgY29weSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGRvX3NlYSgpYCBpbiBgYXJjaC9hcm02NC9tbS9mYXVsdC5jYCB0byBhdHRlbXB0IGV4Y2VwdGlvbiBmaXh1cCB2aWEgYGZpeHVwX2V4Y2VwdGlvbigpYCB3aGVuIGEgU3luY2hyb25vdXMgRXh0ZXJuYWwgQWJvcnQgKFNFQSkgb2NjdXJzIGluIGtlcm5lbCBtb2RlIChgIXVzZXJfbW9kZShyZWdzKWApLCBhbGxvd2luZyBncmFjZWZ1bCByZWNvdmVyeSAoZS5nLiwgcmV0dXJuaW5nIC1FRkFVTFQgZm9yIHVhY2Nlc3MgZmF1bHRzKSBpbnN0ZWFkIG9mIGR5aW5nLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBsb3ctbGV2ZWwgYXJjaGl0ZWN0dXJlIGZhdWx0L2V4Y2VwdGlvbiBoYW5kbGluZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmUgZmllbGRzIG9yIHBhZGRpbmcsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMsIGFuZCBkb2VzIG5vdCBjb3B5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UuIENvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowm6zft[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-27 23:20:25 +0000 UTC FinishedAt: 2026-08-27 23:27:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "series_id": "2e5eac11-f9fe-4075-bc4c-6d3503a7dedd" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "fixup_exception", "do_sea" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zml4dXBfZXhjZXB0aW9uJiMzNDssCiAgICAmIzM0O2RvX3NlYSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBkb19zZWEoKWAgaW4gYGFyY2gvYXJtNjQvbW0vZmF1bHQuY2AgdG8gYXR0ZW1wdCBleGNlcHRpb24gZml4dXAgdmlhIGBmaXh1cF9leGNlcHRpb24oKWAgd2hlbiBhIFN5bmNocm9ub3VzIEV4dGVybmFsIEFib3J0IChTRUEpIG9jY3VycyBpbiBrZXJuZWwgbW9kZSAoYCF1c2VyX21vZGUocmVncylgKSwgYWxsb3dpbmcgZ3JhY2VmdWwgcmVjb3ZlcnkgKGUuZy4sIHJldHVybmluZyAtRUZBVUxUIGZvciB1YWNjZXNzIGZhdWx0cykgaW5zdGVhZCBvZiBkeWluZy5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGxvdy1sZXZlbCBhcmNoaXRlY3R1cmUgZmF1bHQvZXhjZXB0aW9uIGhhbmRsaW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IG1vZGlmeSBkYXRhIHN0cnVjdHVyZSBmaWVsZHMgb3IgcGFkZGluZywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBpbml0aWFsaXphdGlvbiBsb2dpYywgYW5kIGRvZXMgbm90IGNvcHkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZS4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbGxvd3Mga2VybmVsLW1vZGUgc3luY2hyb25vdXMgZXh0ZXJuYWwgYWJvcnRzIChTRUEpIHRvIGJlIHJlY292ZXJlZCB1c2luZyBleGNlcHRpb24gZml4dXAgdGFibGVzIGluc3RlYWQgb2YgaW1tZWRpYXRlbHkgcGFuaWNraW5nLiBUaGlzIG1vZGlmaWVzIGNvcmUgQVJNNjQgZmF1bHQgaGFuZGxpbmcgbG9naWMgcmVhY2hhYmxlIGR1cmluZyBrZXJuZWwgbWVtb3J5IGFjY2Vzc2VzIHRoYXQgZmF1bHQgd2l0aCBTRUEuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmZGE3OGVmN2RjMGY4NDdmN2VmYTRhOTUyMTMyYTI5ODZlMjNlNDMxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMjM6MjQ6MDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9mYXVsdC5jIGIvYXJjaC9hcm02NC9tbS9mYXVsdC5jXG5pbmRleCAwYjUyNTU3NjUyYmU2Li5jYTM5NmI0YmRkYTAzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9tbS9mYXVsdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL2ZhdWx0LmNcbkBAIC04NzgsNiAmIzQzOzg3OCw5IEBAIHN0YXRpYyBpbnQgZG9fc2VhKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuJiM0MztcdGlmICghdXNlcl9tb2RlKHJlZ3MpIFx1MDAyNlx1MDAyNiBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdGlmIChlc3IgXHUwMDI2IEVTUl9FTHhfRm5WKSB7XG4gXHRcdHNpYWRkciA9IDA7XG4gXHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zml4dXBfZXhjZXB0aW9uJiMzNDssCiAgICAmIzM0O2RvX3NlYSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbGxvd3Mga2VybmVsLW1vZGUgc3luY2hyb25vdXMgZXh0ZXJuYWwgYWJvcnRzIChTRUEpIHRvIGJlIHJlY292ZXJlZCB1c2luZyBleGNlcHRpb24gZml4dXAgdGFibGVzIGluc3RlYWQgb2YgaW1tZWRpYXRlbHkgcGFuaWNraW5nLiBUaGlzIG1vZGlmaWVzIGNvcmUgQVJNNjQgZmF1bHQgaGFuZGxpbmcgbG9naWMgcmVhY2hhYmxlIGR1cmluZyBrZXJuZWwgbWVtb3J5IGFjY2Vzc2VzIHRoYXQgZmF1bHQgd2l0aCBTRUEuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmZGE3OGVmN2RjMGY4NDdmN2VmYTRhOTUyMTMyYTI5ODZlMjNlNDMxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjcgMjM6MjQ6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2ZhdWx0LmMgYi9hcmNoL2FybTY0L21tL2ZhdWx0LmMKaW5kZXggMGI1MjU1NzY1MmJlNi4uY2EzOTZiNGJkZGEwMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9mYXVsdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vZmF1bHQuYwpAQCAtODc4LDYgJiM0Mzs4NzgsOSBAQCBzdGF0aWMgaW50IGRvX3NlYSh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCQlyZXR1cm4gMDsKIAl9CiAKJiM0MzsJaWYgKCF1c2VyX21vZGUocmVncykgJmFtcDsmYW1wOyBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCWlmIChlc3IgJmFtcDsgRVNSX0VMeF9GblYpIHsKIAkJc2lhZGRyID0gMDsKIAl9IGVsc2Ugewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmF1bHQgSGFuZGxpbmcgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBkaWZmIHNob3dzIGEgY2hhbmdlIGluIGBhcmNoL2FybTY0L21tL2ZhdWx0LmNgLiBTcGVjaWZpY2FsbHksIHRoZXJlJiMzOTtzIGEgbmV3IGBpZmAgc3RhdGVtZW50IGludHJvZHVjZWQgaW4gdGhlIGBkb19zZWFgIGZ1bmN0aW9uLiBJIHJlY29nbml6ZSB0aGF0IGZ1bmN0aW9uIGFzIHJlbGF0ZWQgdG8gU3lzdGVtIEVycm9yIEFib3J0IChTRUEpIGhhbmRsaW5nIG9uIEFSTTY0LCBkZWFsaW5nIHdpdGggYXN5bmNocm9ub3VzIGFib3J0cy4gVGhlIGFkZGVkIGNvbmRpdGlvbiBjaGVja3MgaWYgdGhlIGV4Y2VwdGlvbiBpcyAqbm90KiBpbiB1c2VyIG1vZGUsIGFuZCB0aGVuIGNhbGxzIGBmaXh1cF9leGNlcHRpb25gIHdpdGggdGhlIHJlZ2lzdGVyIHN0YXRlIGFuZCBFU1IuIElmIGBmaXh1cF9leGNlcHRpb25gIHJldHVybnMgYSBub24temVybyB2YWx1ZSwgdGhlbiB0aGUgY29kZSByZXR1cm5zLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBgZml4dXBfZXhjZXB0aW9uYCBkb2VzLiBJdCBzZWVtcyBsaWtlIHRoZSBuZXcgY29kZSBpcyBhdHRlbXB0aW5nIHRvIGhhbmRsZSBrZXJuZWwgZXhjZXB0aW9ucy4gSSBzaG91bGQgYmUgYWJsZSB0byBkZWR1Y2UgdGhlIGdlbmVyYWwgaWRlYSwgYnV0IHNpbmNlIHRoaXMgZGVhbHMgd2l0aCBrZXJuZWwtbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGVycm9yIGhhbmRsaW5nLCBJIG5lZWQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuIEkmIzM5O2xsIGxvYWQgdGhlIGBhcmNoL2FybTY0L21tL2ZhdWx0LmNgIGZpbGUgZnJvbSB0aGUgc291cmNlIGFuZCBicm93c2UgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGVzcGVjaWFsbHkgbG9va2luZyBhdCB0aGUgZGVmaW5pdGlvbnMgb2YgYHVzZXJfbW9kZWAgYW5kIGBmaXh1cF9leGNlcHRpb25gLCBhbmQgYWxzbyBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGZhdWx0IGhhbmRsaW5nIGxvZ2ljLiBUaGlzIGFkZGl0aW9uIGRlZmluaXRlbHkgc3VnZ2VzdHMgYSBuZWVkIHRvIHBvdGVudGlhbGx5IGhhbmRsZSBvciBjb3JyZWN0IHNwZWNpZmljIGtlcm5lbCBleGNlcHRpb25zIGJlZm9yZSByZXNvcnRpbmcgdG8gYSBtb3JlIGRyYXN0aWMgZXJyb3IgaGFuZGxpbmcgcHJvY2VkdXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGVycm9ycyBpdCYjMzk7cyB0cnlpbmcgdG8gbWl0aWdhdGUsIGFuZCB3aHkgaXQgd2FzbiYjMzk7dCB0aGVyZSBiZWZvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL2FybTY0L21tL2ZhdWx0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg1MDpcdFxuIDg1MTpcdHN0YXRpYyBpbnQgZG9fYWxpZ25tZW50X2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcbiA4NTI6XHRcdFx0XHQgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiA4NTM6XHR7XG4gODU0Olx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ09NUEFUX0FMSUdOTUVOVF9GSVhVUFMpIFx1MDAyNlx1MDAyNlxuIDg1NTpcdFx0ICAgIGNvbXBhdF91c2VyX21vZGUocmVncykpXG4gODU2Olx0XHRcdHJldHVybiBkb19jb21wYXRfYWxpZ25tZW50X2ZpeHVwKGZhciwgcmVncyk7XG4gODU3Olx0XHRkb19iYWRfYXJlYShmYXIsIGVzciwgcmVncyk7XG4gODU4Olx0XHRyZXR1cm4gMDtcbiA4NTk6XHR9XG4gODYwOlx0XG4gODYxOlx0c3RhdGljIGludCBkb19iYWQodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiA4NjI6XHR7XG4gODYzOlx0XHRyZXR1cm4gMTsgLyogXCYjMzQ7ZmF1bHRcJiMzNDsgKi9cbiA4NjQ6XHR9XG4gODY1Olx0XG4gODY2Olx0c3RhdGljIGludCBkb19zZWEodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiA4Njc6XHR7XG4gODY4Olx0XHRjb25zdCBzdHJ1Y3QgZmF1bHRfaW5mbyAqaW5mO1xuIDg2OTpcdFx0dW5zaWduZWQgbG9uZyBzaWFkZHI7XG4gODcwOlx0XG4gODcxOlx0XHRpbmYgPSBlc3JfdG9fZmF1bHRfaW5mbyhlc3IpO1xuIDg3MjpcdFxuIDg3MzpcdFx0aWYgKHVzZXJfbW9kZShyZWdzKSBcdTAwMjZcdTAwMjYgYXBlaV9jbGFpbV9zZWEocmVncykgPT0gMCkge1xuIDg3NDpcdFx0XHQvKlxuIDg3NTpcdFx0XHQgKiBBUEVJIGNsYWltZWQgdGhpcyBhcyBhIGZpcm13YXJlLWZpcnN0IG5vdGlmaWNhdGlvbi5cbiA4NzY6XHRcdFx0ICogU29tZSBwcm9jZXNzaW5nIGRlZmVycmVkIHRvIHRhc2tfd29yayBiZWZvcmUgcmV0X3RvX3VzZXIoKS5cbiA4Nzc6XHRcdFx0ICovXG4gODc4Olx0XHRcdHJldHVybiAwO1xuIDg3OTpcdFx0fVxuIDg4MDpcdFxuIDg4MTpcdFx0aWYgKCF1c2VyX21vZGUocmVncykgXHUwMDI2XHUwMDI2IGZpeHVwX2V4Y2VwdGlvbihyZWdzLCBlc3IpKVxuIDg4MjpcdFx0XHRyZXR1cm4gMDtcbiA4ODM6XHRcbiA4ODQ6XHRcdGlmIChlc3IgXHUwMDI2IEVTUl9FTHhfRm5WKSB7XG4gODg1Olx0XHRcdHNpYWRkciA9IDA7XG4gODg2Olx0XHR9IGVsc2Uge1xuIDg4NzpcdFx0XHQvKlxuIDg4ODpcdFx0XHQgKiBUaGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmllcyB0aGF0IHRoZSB0YWcgYml0cyBvZiBGQVJfRUwxIGFyZVxuIDg4OTpcdFx0XHQgKiBVTktOT1dOIGZvciBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydHMuIE1hc2sgdGhlbSBvdXQgbm93XG4gODkwOlx0XHRcdCAqIHNvIHRoYXQgdXNlcnNwYWNlIGRvZXNuJiMzOTt0IHNlZSB0aGVtLlxuIDg5MTpcdFx0XHQgKi9cbiA4OTI6XHRcdFx0c2lhZGRyICA9IHVudGFnZ2VkX2FkZHIoZmFyKTtcbiA4OTM6XHRcdH1cbiA4OTQ6XHRcdGFkZF90YWludChUQUlOVF9NQUNISU5FX0NIRUNLLCBMT0NLREVQX1NUSUxMX09LKTtcbiA4OTU6XHRcdGFybTY0X25vdGlmeV9kaWUoaW5mLVx1MDAzZW5hbWUsIHJlZ3MsIGluZi1cdTAwM2VzaWcsIGluZi1cdTAwM2Vjb2RlLCBzaWFkZHIsIGVzcik7XG4gODk2Olx0XG4gODk3Olx0XHRyZXR1cm4gMDtcbiA4OTg6XHR9XG4gODk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQzMgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIENvZGUgQ2hhbmdlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UgYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpcyB0aGUgY29udGV4dC4gSSBzZWUgYGZpeHVwX2V4Y2VwdGlvbmAgYW5kIGBkb19zZWFgIG1lbnRpb25lZC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlaXIgcm9sZS4gQXJlIHdlIGZpeGluZyBhbiBleGNlcHRpb24gaGFuZGxpbmcgaXNzdWU/IElzIHRoaXMgcmVsYXRlZCB0byBzb21lIFNlYSBvYmplY3QgaW50ZXJhY3Rpb25zPyBXaGF0JiMzOTtzIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBhbHRlcmF0aW9uPwoKTXkgYnJhaW4mIzM5O3MgYWxyZWFkeSBmaXJpbmcgdXAgdGhlIHNlYXJjaCB0b29scy4gSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCwgaG93IHRoZXkmIzM5O3JlIHVzZWQsIGFuZCB3aGF0JiMzOTtzIGNoYW5nZWQgaW4gdGhlaXIgYmVoYXZpb3IuIEEgcXVpY2sgYGdyZXBgIGZvciBib3RoIGZ1bmN0aW9uIG5hbWVzIGFjcm9zcyB0aGUgY29kZWJhc2UgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcC4gVGhhdCBzaG91bGQgcHJvdmlkZSB0aGUgaW1tZWRpYXRlIGNvbnRleHQuIEhvcGVmdWxseSwgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCB0ZWxsIHRoZSBzdG9yeS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBncmVwIHJlc3VsdHMgdW5jb3Zlci4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX3NlYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rZXJuZWwvYWNwaS5jPTI5NT12b2lkIF9faW9tZW0gKmFjcGlfb3NfaW9yZW1hcChhY3BpX3BoeXNpY2FsX2FkZHJlc3MgcGh5cywgYWNwaV9zaXplIHNpemUpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvYWNwaS5jLTM4NS0gKlxuYXJjaC9hcm02NC9rZXJuZWwvYWNwaS5jOjM4NjogKiBVc2VkIGJ5IEtWTSBhbmQgdGhlIGFyY2ggZG9fc2VhIGhhbmRsZXIuXG5hcmNoL2FybTY0L2tlcm5lbC9hY3BpLmMtMzg3LSAqIEByZWdzIG1heSBiZSBOVUxMIHdoZW4gY2FsbGVkIGZyb20gcHJvY2VzcyBjb250ZXh0LlxuLS1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz04NjE9c3RhdGljIGludCBkb19iYWQodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtODY1LVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjg2NjpzdGF0aWMgaW50IGRvX3NlYSh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTg2Ny17XG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jPTkxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGZhdWx0X2luZm8gZmF1bHRfaW5mb1tdID0ge1xuLS1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05MzItXHR7IGRvX3BhZ2VfZmF1bHQsXHRTSUdTRUdWLCBTRUdWX0FDQ0VSUixcdFwmIzM0O2xldmVsIDMgcGVybWlzc2lvbiBmYXVsdFwmIzM0O1x0fSxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5MzM6XHR7IGRvX3NlYSxcdFx0U0lHQlVTLCAgQlVTX09CSkVSUixcdFwmIzM0O3N5bmNocm9ub3VzIGV4dGVybmFsIGFib3J0XCYjMzQ7XHR9LFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTkzNC1cdHsgZG9fdGFnX2NoZWNrX2ZhdWx0LFx0U0lHU0VHViwgU0VHVl9NVEVTRVJSLFx0XCYjMzQ7c3luY2hyb25vdXMgdGFnIGNoZWNrIGZhdWx0XCYjMzQ7XHR9LFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTkzNS1cdHsgZG9fYmFkLFx0XHRTSUdLSUxMLCBTSV9LRVJORUwsXHRcJiMzNDt1bmtub3duIDE4XCYjMzQ7XHRcdFx0fSxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5MzY6XHR7IGRvX3NlYSxcdFx0U0lHS0lMTCwgU0lfS0VSTkVMLFx0XCYjMzQ7bGV2ZWwgLTEgKHRyYW5zbGF0aW9uIHRhYmxlIHdhbGspXCYjMzQ7XHR9LFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjkzNzpcdHsgZG9fc2VhLFx0XHRTSUdLSUxMLCBTSV9LRVJORUwsXHRcJiMzNDtsZXZlbCAwICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVwmIzM0O1x0fSxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5Mzg6XHR7IGRvX3NlYSxcdFx0U0lHS0lMTCwgU0lfS0VSTkVMLFx0XCYjMzQ7bGV2ZWwgMSAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcJiMzNDtcdH0sXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTM5Olx0eyBkb19zZWEsXHRcdFNJR0tJTEwsIFNJX0tFUk5FTCxcdFwmIzM0O2xldmVsIDIgKHRyYW5zbGF0aW9uIHRhYmxlIHdhbGspXCYjMzQ7XHR9LFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjk0MDpcdHsgZG9fc2VhLFx0XHRTSUdLSUxMLCBTSV9LRVJORUwsXHRcJiMzNDtsZXZlbCAzICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVwmIzM0O1x0fSxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5NDE6XHR7IGRvX3NlYSxcdFx0U0lHQlVTLCAgQlVTX09CSkVSUixcdFwmIzM0O3N5bmNocm9ub3VzIHBhcml0eSBvciBFQ0MgZXJyb3JcJiMzNDsgfSxcdC8vIFJlc2VydmVkIHdoZW4gUkFTIGlzIGltcGxlbWVudGVkXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtOTQyLVx0eyBkb19iYWQsXHRcdFNJR0tJTEwsIFNJX0tFUk5FTCxcdFwmIzM0O3Vua25vd24gMjVcJiMzNDtcdFx0XHR9LFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTk0My1cdHsgZG9fYmFkLFx0XHRTSUdLSUxMLCBTSV9LRVJORUwsXHRcJiMzNDt1bmtub3duIDI2XCYjMzQ7XHRcdFx0fSxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5NDQ6XHR7IGRvX3NlYSxcdFx0U0lHS0lMTCwgU0lfS0VSTkVMLFx0XCYjMzQ7bGV2ZWwgLTEgc3luY2hyb25vdXMgcGFyaXR5IGVycm9yICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVwmIzM0O1x0fSxcdC8vIFJlc2VydmVkIHdoZW4gUkFTIGlzIGltcGxlbWVudGVkXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTQ1Olx0eyBkb19zZWEsXHRcdFNJR0tJTEwsIFNJX0tFUk5FTCxcdFwmIzM0O2xldmVsIDAgc3luY2hyb25vdXMgcGFyaXR5IGVycm9yICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVwmIzM0O1x0fSxcdC8vIFJlc2VydmVkIHdoZW4gUkFTIGlzIGltcGxlbWVudGVkXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTQ2Olx0eyBkb19zZWEsXHRcdFNJR0tJTEwsIFNJX0tFUk5FTCxcdFwmIzM0O2xldmVsIDEgc3luY2hyb25vdXMgcGFyaXR5IGVycm9yICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVwmIzM0O1x0fSxcdC8vIFJlc2VydmVkIHdoZW4gUkFTIGlzIGltcGxlbWVudGVkXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTQ3Olx0eyBkb19zZWEsXHRcdFNJR0tJTEwsIFNJX0tFUk5FTCxcdFwmIzM0O2xldmVsIDIgc3luY2hyb25vdXMgcGFyaXR5IGVycm9yICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVwmIzM0O1x0fSxcdC8vIFJlc2VydmVkIHdoZW4gUkFTIGlzIGltcGxlbWVudGVkXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTQ4Olx0eyBkb19zZWEsXHRcdFNJR0tJTEwsIFNJX0tFUk5FTCxcdFwmIzM0O2xldmVsIDMgc3luY2hyb25vdXMgcGFyaXR5IGVycm9yICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVwmIzM0O1x0fSxcdC8vIFJlc2VydmVkIHdoZW4gUkFTIGlzIGltcGxlbWVudGVkXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtOTQ5LVx0eyBkb19iYWQsXHRcdFNJR0tJTEwsIFNJX0tFUk5FTCxcdFwmIzM0O3Vua25vd24gMzJcJiMzNDtcdFx0XHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MTkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYGZpeHVwX2V4Y2VwdGlvbmAgaW4gdGhlIEFSTTY0IEV4Y2VwdGlvbiBIYW5kbGluZyBQYXRoKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcy4gVGhlIGNvbnRleHQgY2xlYXJseSBzdWdnZXN0cyBhIHBvdGVudGlhbCBleGNlcHRpb24gaGFuZGxpbmcgc2NlbmFyaW8gd2l0aGluIHRoZSBBUk02NCBhcmNoaXRlY3R1cmUsIGFuZCB0aGUgbWVudGlvbiBvZiBgZml4dXBfZXhjZXB0aW9uYCBpbW1lZGlhdGVseSBkaXJlY3RzIG15IGF0dGVudGlvbiB0b3dhcmRzIHRoZSBsaWtlbHkgZXhjZXB0aW9uIHRhYmxlIG1lY2hhbmlzbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBkZWZpbmVkIGFuZCB1c2VkLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSBgZml4dXBfZXhjZXB0aW9uYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBzdGFydCBpbiB0aGUgYGFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jYCBmaWxlIHNpbmNlIHRoZSBleHRlbnNpb24gdGFibGUgaXMgbGlrZWx5IHdoZXJlIHRoZSBmaXh1cCBpcyBpbXBsZW1lbnRlZC4gSWYgaXQmIzM5O3Mgbm90IHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIHdpZGVuIHRoZSBzZWFyY2guIEkgZXhwZWN0IHRoaXMgZnVuY3Rpb24gaGFzIGEgdmVyeSBzcGVjaWZpYyBwdXJwb3NlIHJlbGF0ZWQgdG8gdGhlIGNvbnRyb2wgZmxvdyBvciBkYXRhIHRoYXQgaXMgZXhwZWN0ZWQgdG8gZml4IGFuIGV4Y2VwdGlvbiB0aGF0IG9jY3VycmVkIGluIGEgc3BlY2lmaWMgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBleGNlcHRpb24gaGFuZGxpbmcgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBvbiBBUk02NC4gVGhlIGdvYWwgaXMgdG8gZWl0aGVyIGNvbmZpcm0gbXkgc3VzcGljaW9uIG9yIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNvcnJlY3QgZnVuY3Rpb24gZGVmaW5pdGlvbiBhbmQgdW5kZXJzdGFuZCBpdHMgb3ZlcmFsbCByb2xlIGluIGV4Y2VwdGlvbiBwcm9jZXNzaW5nLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBkaXNzZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpdHMgc3BlY2lmaWMgZnVuY3Rpb24gYW5kIGl0cyByZWxhdGlvbnNoaXBzIHRvIG90aGVyIGV4Y2VwdGlvbiBoYW5kbGluZyBmdW5jdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zml4dXBfZXhjZXB0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VmaS5oPTE2PWV4dGVybiB2b2lkIGVmaV9pbml0KHZvaWQpO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lZmkuaC0xNy1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWZpLmg6MTg6Ym9vbCBlZmlfcnVudGltZV9maXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGNvbnN0IGNoYXIgKm1zZyk7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VmaS5oLTE5LSNlbHNlXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lZmkuaD0yMj1zdGF0aWMgaW5saW5lXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VmaS5oOjIzOmJvb2wgZWZpX3J1bnRpbWVfZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBjb25zdCBjaGFyICptc2cpXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VmaS5oLTI0LXtcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2V4dGFibGUuaD00Mz1ib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXh0YWJsZS5oLTQ5LVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9leHRhYmxlLmg6NTA6Ym9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXNyKTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXh0YWJsZS5oLTUxLSNlbmRpZlxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2VmaS5jPTIyMD1hc21saW5rYWdlIGVmaV9zdGF0dXNfdCBfX2VmaV9ydF9hc21fcmVjb3Zlcih2b2lkKTtcbmFyY2gvYXJtNjQva2VybmVsL2VmaS5jLTIyMS1cbmFyY2gvYXJtNjQva2VybmVsL2VmaS5jOjIyMjpib29sIGVmaV9ydW50aW1lX2ZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgY29uc3QgY2hhciAqbXNnKVxuYXJjaC9hcm02NC9rZXJuZWwvZWZpLmMtMjIzLXtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMva3Byb2Jlcy5jPTMwMT1pbnQgX19rcHJvYmVzIGtwcm9iZV9mYXVsdF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgZnNyKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL3Byb2Jlcy9rcHJvYmVzLmMtMzEwLVx0ICogbXVzdCBiZSBsZWZ0IGFsb25lIGZvciB0aGUgbm9ybWFsIHBhZ2UgZmF1bHQgaGFuZGxlciwgaW5jbHVkaW5nXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMva3Byb2Jlcy5jOjMxMTpcdCAqIGZpeHVwX2V4Y2VwdGlvbi5cbmFyY2gvYXJtNjQva2VybmVsL3Byb2Jlcy9rcHJvYmVzLmMtMzEyLVx0ICovXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvdHJhcHMuYz00OTU9dm9pZCBkb19lbDFfYnRpKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVzcilcbmFyY2gvYXJtNjQva2VybmVsL3RyYXBzLmMtNDk2LXtcbmFyY2gvYXJtNjQva2VybmVsL3RyYXBzLmM6NDk3Olx0aWYgKGVmaV9ydW50aW1lX2ZpeHVwX2V4Y2VwdGlvbihyZWdzLCBcJiMzNDtCVEkgdmlvbGF0aW9uXCYjMzQ7KSkge1xuYXJjaC9hcm02NC9rZXJuZWwvdHJhcHMuYy00OTgtXHRcdHJlZ3MtXHUwMDNlcHN0YXRlIFx1MDAyNj0gflBTUl9CVFlQRV9NQVNLO1xuLS1cbmFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jPTY5PWV4X2hhbmRsZXJfbG9hZF91bmFsaWduZWRfemVyb3BhZChjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcbi0tXG5hcmNoL2FybTY0L21tL2V4dGFibGUuYy05NC1cbmFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jOjk1OmJvb2wgZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVzcilcbmFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jLTk2LXtcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9NDA1PXN0YXRpYyB2b2lkIF9fZG9fa2VybmVsX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlc3IsXG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTQxMy1cdCAqL1xuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjQxNDpcdGlmICghaXNfZWwxX2luc3RydWN0aW9uX2Fib3J0KGVzcikgXHUwMDI2XHUwMDI2IGZpeHVwX2V4Y2VwdGlvbihyZWdzLCBlc3IpKVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTQxNS1cdFx0cmV0dXJuO1xuLS1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy00NTAtXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6NDUxOlx0aWYgKGVmaV9ydW50aW1lX2ZpeHVwX2V4Y2VwdGlvbihyZWdzLCBtc2cpKVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTQ1Mi1cdFx0cmV0dXJuO1xuLS1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz04NjY9c3RhdGljIGludCBkb19zZWEodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtODgwLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjg4MTpcdGlmICghdXNlcl9tb2RlKHJlZ3MpIFx1MDAyNlx1MDAyNiBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSlcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy04ODItXHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNjYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBDb21taXQmIzM5O3MgUHVycG9zZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNvbW1pdCBiZXR0ZXIuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgR2l0IGhpc3RvcnkuIExldCBtZSBzdGFydCB3aXRoIHNvbWV0aGluZyBsaWtlIGBnaXQgbG9nIC0xYCDigJMgdGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgbW9zdCByZWNlbnQgY29tbWl0IGluZm9ybWF0aW9uLCByaWdodD8gT3IgbWF5YmUgSSYjMzk7bGwgZ28gZm9yIHRoZSBmdWxsIGhpc3RvcnksIGxvb2tpbmcgYXQgc2ltaWxhciBjb21taXRzIHRvIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aGF0KiB0aGlzIGNvbW1pdCBjaGFuZ2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouIENvbnRleHQgaXMgZXZlcnl0aGluZy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIHN1cnJvdW5kaW5nIGNpcmN1bXN0YW5jZXMuCgpBZnRlciByZXZpZXdpbmcgdGhlIGNvbW1pdCBsb2csIGxpbmUgOTUgaW4gYGFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jYCBpcyBjYWxsaW5nIHRvIG1lLiBUaGF0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMsIG9yIGF0IGxlYXN0IGEgcG9pbnQgb2YgaW50ZXJlc3QgdG8gZnVydGhlciBkZWx2ZSBpbnRvLiBTbywgbGV0JiMzOTtzIGdvIHJlYWQgdGhhdCBsaW5lLCBhbmQgZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGUgY29kZSBpcyBkb2luZyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL2FybTY0L21tL2V4dGFibGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcbiAgODE6XHRcdGRhdGEgPSAqKHVuc2lnbmVkIGxvbmcqKWFkZHI7XG4gIDgyOlx0XG4gIDgzOlx0I2lmbmRlZiBfX0FBUkNINjRFQl9fXG4gIDg0Olx0XHRkYXRhIFx1MDAzZVx1MDAzZT0gOCAqIG9mZnNldDtcbiAgODU6XHQjZWxzZVxuICA4NjpcdFx0ZGF0YSBcdTAwM2NcdTAwM2M9IDggKiBvZmZzZXQ7XG4gIDg3Olx0I2VuZGlmXG4gIDg4Olx0XG4gIDg5Olx0XHRwdF9yZWdzX3dyaXRlX3JlZyhyZWdzLCByZWdfZGF0YSwgZGF0YSk7XG4gIDkwOlx0XG4gIDkxOlx0XHRyZWdzLVx1MDAzZXBjID0gZ2V0X2V4X2ZpeHVwKGV4KTtcbiAgOTI6XHRcdHJldHVybiB0cnVlO1xuICA5MzpcdH1cbiAgOTQ6XHRcbiAgOTU6XHRib29sIGZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlc3IpXG4gIDk2Olx0e1xuICA5NzpcdFx0Y29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXg7XG4gIDk4Olx0XG4gIDk5Olx0XHRleCA9IHNlYXJjaF9leGNlcHRpb25fdGFibGVzKGluc3RydWN0aW9uX3BvaW50ZXIocmVncykpO1xuIDEwMDpcdFx0aWYgKCFleClcbiAxMDE6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDEwMjpcdFxuIDEwMzpcdFx0c3dpdGNoIChleC1cdTAwM2V0eXBlKSB7XG4gMTA0Olx0XHRjYXNlIEVYX1RZUEVfQlBGOlxuIDEwNTpcdFx0XHRyZXR1cm4gZXhfaGFuZGxlcl9icGYoZXgsIHJlZ3MpO1xuIDEwNjpcdFx0Y2FzZSBFWF9UWVBFX1VBQ0NFU1NfRVJSX1pFUk86XG4gMTA3Olx0XHRjYXNlIEVYX1RZUEVfS0FDQ0VTU19FUlJfWkVSTzpcbiAxMDg6XHRcdFx0cmV0dXJuIGV4X2hhbmRsZXJfdWFjY2Vzc19lcnJfemVybyhleCwgcmVncyk7XG4gMTA5Olx0XHRjYXNlIEVYX1RZUEVfVUFDQ0VTU19DUFk6XG4gMTEwOlx0XHRcdHJldHVybiBleF9oYW5kbGVyX3VhY2Nlc3NfY3B5KGV4LCByZWdzLCBlc3IpO1xuIDExMTpcdFx0Y2FzZSBFWF9UWVBFX0xPQURfVU5BTElHTkVEX1pFUk9QQUQ6XG4gMTEyOlx0XHRcdHJldHVybiBleF9oYW5kbGVyX2xvYWRfdW5hbGlnbmVkX3plcm9wYWQoZXgsIHJlZ3MpO1xuIDExMzpcdFx0fVxuIDExNDpcdFxuIDExNTpcdFx0QlVHKCk7XG4gMTE2Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDUzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogODQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3luY2hyb25vdXMgRXh0ZXJuYWwgQWJvcnQgSGFuZGxpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIGZ1enotd29ydGh5IGFuZCBob3cgaXQgZml0cyBpbnRvIFN5emthbGxlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgd2hhdCBgZG9fc2VhYCBpbiB0aGUga2VybmVsIGhhbmRsZXMsIHdoaWNoIGlzIHN5bmNocm9ub3VzIGV4dGVybmFsIGFib3J0cy4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCYjMzk7cyBkZWFsaW5nIHdpdGggY2FzZXMgbGlrZSBkYXRhIGFib3J0cywgaW5zdHJ1Y3Rpb24gYWJvcnRzIGxlYWRpbmcgdG8gU0VBcywgdHJhbnNsYXRpb24gdGFibGUgd2FsayBhYm9ydHMsIGFuZCwgY3J1Y2lhbGx5LCBrZXJuZWwgbWVtb3J5IGFjY2Vzc2VzICh0aGluayBgY29weV9mcm9tX3VzZXJgLCBgdWFjY2Vzc2AsIG9yIGBrYWNjZXNzYCkuIFByZXZpb3VzbHksIGl0IGxvb2tzIGxpa2UgaWYgdGhlcmUgd2FzIGFuIFNFQSBkdXJpbmcga2VybmVsIGV4ZWN1dGlvbiwgYGRvX3NlYWAgd291bGQganVzdCBwYW5pYyB0aHJvdWdoIGBhcm02NF9ub3RpZnlfZGllYCBhbmQgYGRpZSgpYC4KCk5vdywgdGhpcyBwYXRjaCBhZGRzIGEgY2hlY2sgd2l0aGluIGBkb19zZWFgIGZvciBleGNlcHRpb24gZml4dXBzOgoKYGBgYwoJaWYgKCF1c2VyX21vZGUocmVncykgJmFtcDsmYW1wOyBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSkKCQlyZXR1cm4gMDsKYGBgCgpUaGlzIGlzIGltcG9ydGFudCEgTm93LCBpZiBhbiBTRUEgKmR1cmluZyBrZXJuZWwgZXhlY3V0aW9uKiBoaXRzIGFuIGV4Y2VwdGlvbi10YWJsZSBwcm90ZWN0ZWQgbG9hZC9zdG9yZSwgYGZpeHVwX2V4Y2VwdGlvbigpYCBpcyBjYWxsZWQuIElmIHRoZXJlJiMzOTtzIGFuIGV4Y2VwdGlvbiB0YWJsZSBlbnRyeSwgYGZpeHVwX2V4Y2VwdGlvbigpYCBmaXhlcyB0aGUgaXNzdWUgYnkgc2V0dGluZyB0aGUgYHJlZ3MtJmd0O3BjYCB0byB0aGUgZml4dXAgaGFuZGxlciBhbmQgaGFuZGxpbmcgdGhlIGVycm9yIHJldHVybiwgYW5kIGBkb19zZWFgIGp1c3QgcmV0dXJucy4KCk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgYXNraW5nIG1lIHRvIGV2YWx1YXRlIHdoZXRoZXIgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiBzb21lIHNwZWNpZmljIGNyaXRlcmlhLiBMZXQgbWUgcmVjYXAgdGhvc2UgY3JpdGVyaWE6CgoqICAgKipOb3QgRnV6emFibGU6KiogRG9jdW1lbnRhdGlvbi9LY29uZmlnIGNoYW5nZXMsIGRlY29yYXRpdmUgY2hhbmdlcyAobG9nZ2luZy90cmFjZXBvaW50cyksIG51bWVyaWMgY29uc3RhbnRzL21hY3JvcyB0aGF0IGRvbiYjMzk7dCBjaGFuZ2UgZXhlY3V0aW9uLCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoL1NtYXJ0TklDL0dQVSBkcml2ZXJzIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSwgYW5kIHRlYXJkb3duIGNhbGxiYWNrcyBsaWtlIGAucmVtb3ZlYCwgYC5zaHV0ZG93bmAsIG9yIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoqICAgKipGdXp6YWJsZToqKiBJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsICphbmQqIEkgY2FuIHZlcmlmeSB0aGUgY29kZSBpcyByZWFjaGFibGUuCgpJZiBpdCAqaXMqIGZ1enphYmxlLCBJIG5lZWQgdG86CgoxLiAgSWRlbnRpZnkgZnVuY3Rpb25zIGZvciBgRm9jdXNTeW1ib2xzYCwgYXZvaWRpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIGZvY3VzaW5nIG9uIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4KMi4gIElkZW50aWZ5IHJlcXVpcmVkIGBDT05GSUdfYCBvcHRpb25zIGZvciB0ZXN0aW5nIGFuZCBwdXQgdGhlbSBpbiBgRW5hYmxlQ29uZmlnc2AuCgpTbywgaXQgc2VlbXMgdGhpcyBpcyByZWFjaGFibGUsIGJ1dCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlcjoKCkxldCYjMzk7cyBjaGVjayBgZG9fc2VhYCBpbiBgYXJjaC9hcm02NC9tbS9mYXVsdC5jYCB0byBzZWUgaG93IHRoZSBmYXVsdHMgYXJlIHJvdXRlZCBhbmQgd2hlcmUgdGhlIGZpeHVwcyBhcmUgY2FsbGVkLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBjYWxsIGBkb19zZWFgIGFuZCBob3cgYGZhdWx0X2luZm9gIGlzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZhdWx0X2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0zMDk9c3RydWN0IGt2bV9hcmNoIHtcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNDI4LVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjQyOTpzdHJ1Y3Qga3ZtX3ZjcHVfZmF1bHRfaW5mbyB7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNDMwLVx0dTY0IGVzcl9lbDI7XHRcdC8qIEh5cCBTeW5kcm9tIFJlZ2lzdGVyICovXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oPTg0Mz1zdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7XG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTg3My1cdC8qIEV4Y2VwdGlvbiBJbmZvcm1hdGlvbiAqL1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjg3NDpcdHN0cnVjdCBrdm1fdmNwdV9mYXVsdF9pbmZvIGZhdWx0O1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTg3NS1cbi0tXG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvZmF1bHQuaD02MD1zdGF0aWMgaW5saW5lIGJvb2wgX19ocGZhcl92YWxpZCh1NjQgZXNyKVxuLS1cbmFyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9mYXVsdC5oLTgxLVxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL2ZhdWx0Lmg6ODI6c3RhdGljIGlubGluZSBib29sIF9fZ2V0X2ZhdWx0X2luZm8odTY0IGVzciwgc3RydWN0IGt2bV92Y3B1X2ZhdWx0X2luZm8gKmZhdWx0KVxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL2ZhdWx0LmgtODMte1xuLS1cbmFyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zd2l0Y2guaD00MjA9c3RhdGljIGlubGluZSB2b2lkIF9fX2RlYWN0aXZhdGVfdHJhcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zd2l0Y2guaC00NDMtXG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmg6NDQ0OnN0YXRpYyBpbmxpbmUgYm9vbCBfX3BvcHVsYXRlX2ZhdWx0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oLTQ0NS17XG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmg6NDQ2Olx0cmV0dXJuIF9fZ2V0X2ZhdWx0X2luZm8odmNwdS1cdTAwM2VhcmNoLmZhdWx0LmVzcl9lbDIsIFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5mYXVsdCk7XG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmgtNDQ3LX1cbi0tXG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmg9ODM3PXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faHlwX2hhbmRsZV9tZW1vcnlfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zd2l0Y2guaC04Mzkte1xuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oOjg0MDpcdGlmICghX19wb3B1bGF0ZV9mYXVsdF9pbmZvKHZjcHUpKVxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oLTg0MS1cdFx0cmV0dXJuIHRydWU7XG4tLVxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvbWVtX3Byb3RlY3QuYz03NDg9dm9pZCBoYW5kbGVfaG9zdF9tZW1fYWJvcnQoc3RydWN0IGt2bV9jcHVfY29udGV4dCAqaG9zdF9jdHh0KVxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvbWVtX3Byb3RlY3QuYy03NDkte1xuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvbWVtX3Byb3RlY3QuYzo3NTA6XHRzdHJ1Y3Qga3ZtX3ZjcHVfZmF1bHRfaW5mbyBmYXVsdDtcbmFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL21lbV9wcm90ZWN0LmMtNzUxLVx0dTY0IGVzciwgYWRkcjtcbi0tXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9tZW1fcHJvdGVjdC5jLTc1My1cdGVzciA9IHJlYWRfc3lzcmVnX2VsMihTWVNfRVNSKTtcbmFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL21lbV9wcm90ZWN0LmM6NzU0Olx0aWYgKCFfX2dldF9mYXVsdF9pbmZvKGVzciwgXHUwMDI2ZmF1bHQpKSB7XG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9tZW1fcHJvdGVjdC5jLTc1NS1cdFx0Lypcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNDgtXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6NDk6c3RydWN0IGZhdWx0X2luZm8ge1xuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTUwLVx0aW50XHQoKmZuKSh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsXG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTU2LVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjU3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmF1bHRfaW5mbyBmYXVsdF9pbmZvW107XG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNTgtXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6NTk6c3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgZmF1bHRfaW5mbyAqZXNyX3RvX2ZhdWx0X2luZm8odW5zaWduZWQgbG9uZyBlc3IpXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNjAte1xuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjYxOlx0cmV0dXJuIGZhdWx0X2luZm8gJiM0MzsgKGVzciBcdTAwMjYgRVNSX0VMeF9GU0MpO1xuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTYyLX1cbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9OTg9c3RhdGljIHZvaWQgbWVtX2Fib3J0X2RlY29kZSh1bnNpZ25lZCBsb25nIGVzcilcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtMTEyLVx0cHJfYWxlcnQoXCYjMzQ7ICBGU0MgPSAweCUwMmx4OiAlc1xcblwmIzM0OywgKGVzciBcdTAwMjYgRVNSX0VMeF9GU0MpLFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjExMzpcdFx0IGVzcl90b19mYXVsdF9pbmZvKGVzciktXHUwMDNlbmFtZSk7XG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtMTE0LVxuLS1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz01MTQ9c3RhdGljIHZvaWQgZG9fYmFkX2FyZWEodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLFxuLS1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy01MjMtXHRpZiAodXNlcl9tb2RlKHJlZ3MpKSB7XG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6NTI0Olx0XHRjb25zdCBzdHJ1Y3QgZmF1bHRfaW5mbyAqaW5mID0gZXNyX3RvX2ZhdWx0X2luZm8oZXNyKTtcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy01MjUtXG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jPTYwMT1zdGF0aWMgaW50IF9fa3Byb2JlcyBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNjAzLXtcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo2MDQ6XHRjb25zdCBzdHJ1Y3QgZmF1bHRfaW5mbyAqaW5mO1xuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTYwNS1cdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNzk0LVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjc5NTpcdGluZiA9IGVzcl90b19mYXVsdF9pbmZvKGVzcik7XG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNzk2LVx0c2V0X3RocmVhZF9lc3IoYWRkciwgZXNyKTtcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9ODY2PXN0YXRpYyBpbnQgZG9fc2VhKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtODY3LXtcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo4Njg6XHRjb25zdCBzdHJ1Y3QgZmF1bHRfaW5mbyAqaW5mO1xuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTg2OS1cdHVuc2lnbmVkIGxvbmcgc2lhZGRyO1xuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTg3MC1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo4NzE6XHRpbmYgPSBlc3JfdG9fZmF1bHRfaW5mbyhlc3IpO1xuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTg3Mi1cbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9OTAwPXN0YXRpYyBpbnQgZG9fdGFnX2NoZWNrX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtOTE1LVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjkxNjpzdGF0aWMgY29uc3Qgc3RydWN0IGZhdWx0X2luZm8gZmF1bHRfaW5mb1tdID0ge1xuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTkxNy1cdHsgZG9fYmFkLFx0XHRTSUdLSUxMLCBTSV9LRVJORUwsXHRcJiMzNDt0dGJyIGFkZHJlc3Mgc2l6ZSBmYXVsdFwmIzM0O1x0fSxcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9OTgzPXZvaWQgZG9fbWVtX2Fib3J0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtOTg0LXtcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5ODU6XHRjb25zdCBzdHJ1Y3QgZmF1bHRfaW5mbyAqaW5mID0gZXNyX3RvX2ZhdWx0X2luZm8oZXNyKTtcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05ODYtXHR1bnNpZ25lZCBsb25nIGFkZHIgPSB1bnRhZ2dlZF9hZGRyKGZhcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjM4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IHF1ZXJ5LCBhcyBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBkb19tZW1fYWJvcnRgIENhbGxlcnMgaW4gQVJNNjQqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIGBkb19tZW1fYWJvcnRgIGluIHRoZSBBUk02NCBhcmNoaXRlY3R1cmUuIFRoYXQgZnVuY3Rpb24gaXMgcHJldHR5IGNyaXRpY2FsIOKAkyBpdCBoYW5kbGVzIHRob3NlIG1lbW9yeSBhYm9ydCBleGNlcHRpb25zLCB3aGljaCBhcmUgdXN1YWxseSBhIHNpZ24gb2Ygc29tZXRoaW5nIGdvaW5nIHdyb25nLiBTbywgSSBuZWVkIHRvIGtub3cgKndoYXQqJiMzOTtzIGNhbGxpbmcgaXQgdG8gZGlhZ25vc2UgdGhlIHNvdXJjZSBvZiBwb3RlbnRpYWwgbWVtb3J5IGlzc3Vlcy4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIHplcm8gaW4gb24gdGhlIGRpcmVjdCBjYWxscy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGdyZXAgdGhlIGBhcmNoL2FybTY0YCBkaXJlY3RvcnkgZm9yIHRoZSBmdW5jdGlvbiBuYW1lIGBkb19tZW1fYWJvcnRgLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgbGlzdCBvZiBhbGwgdGhlIGZpbGVzIGFuZCBsaW5lcyBvZiBjb2RlIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgaW52b2tlZC4gVGhhdCYjMzk7bGwgYmUgbXkgc3RhcnRpbmcgcG9pbnQgdG8gZXhhbWluZSB0aGUgY2FsbCBzaXRlcyBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHByb3ZpZGluZyB0aGUgbmVjZXNzYXJ5IGNvbnRleHQuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gd29yayBiYWNrd2FyZCwgdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBmbG93IGFuZCBpbnZlc3RpZ2F0ZSBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gVGhlbiwgSSBjYW4gc3RhcnQgbG9va2luZyBhdCBhcmd1bWVudHMsIGNvbnRleHQgYW5kIGxpa2VseSBjdWxwcml0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fbWVtX2Fib3J0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2luY2x1ZGUvYXNtL2V4Y2VwdGlvbi5oPTUzPWFzbWxpbmthZ2Ugdm9pZCBhc21fZXhpdF90b191c2VyX21vZGUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9leGNlcHRpb24uaC01NC1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXhjZXB0aW9uLmg6NTU6dm9pZCBkb19tZW1fYWJvcnQodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2V4Y2VwdGlvbi5oLTU2LXZvaWQgZG9fZWwwX3VuZGVmKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVzcik7XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvZW50cnktY29tbW9uLmM9MzE1PXN0YXRpYyB2b2lkIG5vaW5zdHIgZWwxX2Fib3J0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVzcilcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9lbnRyeS1jb21tb24uYy0zMjEtXHRsb2NhbF9kYWlmX2luaGVyaXQocmVncyk7XG5hcmNoL2FybTY0L2tlcm5lbC9lbnRyeS1jb21tb24uYzozMjI6XHRkb19tZW1fYWJvcnQoZmFyLCBlc3IsIHJlZ3MpO1xuYXJjaC9hcm02NC9rZXJuZWwvZW50cnktY29tbW9uLmMtMzIzLVx0YXJtNjRfZXhpdF90b19rZXJuZWxfbW9kZShyZWdzLCBzdGF0ZSk7XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvZW50cnktY29tbW9uLmM9NTQ2PXN0YXRpYyB2b2lkIG5vaW5zdHIgZWwwX2RhKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVzcilcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9lbnRyeS1jb21tb24uYy01NTEtXHRsb2NhbF9kYWlmX3Jlc3RvcmUoREFJRl9QUk9DQ1RYKTtcbmFyY2gvYXJtNjQva2VybmVsL2VudHJ5LWNvbW1vbi5jOjU1MjpcdGRvX21lbV9hYm9ydChmYXIsIGVzciwgcmVncyk7XG5hcmNoL2FybTY0L2tlcm5lbC9lbnRyeS1jb21tb24uYy01NTMtXHRhcm02NF9leGl0X3RvX3VzZXJfbW9kZShyZWdzKTtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9lbnRyeS1jb21tb24uYz01NTY9c3RhdGljIHZvaWQgbm9pbnN0ciBlbDBfaWEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXNyKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2VudHJ5LWNvbW1vbi5jLTU2OS1cdGxvY2FsX2RhaWZfcmVzdG9yZShEQUlGX1BST0NDVFgpO1xuYXJjaC9hcm02NC9rZXJuZWwvZW50cnktY29tbW9uLmM6NTcwOlx0ZG9fbWVtX2Fib3J0KGZhciwgZXNyLCByZWdzKTtcbmFyY2gvYXJtNjQva2VybmVsL2VudHJ5LWNvbW1vbi5jLTU3MS1cdGFybTY0X2V4aXRfdG9fdXNlcl9tb2RlKHJlZ3MpO1xuLS1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz05MTY9c3RhdGljIGNvbnN0IHN0cnVjdCBmYXVsdF9pbmZvIGZhdWx0X2luZm9bXSA9IHtcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtOTgyLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjk4Mzp2b2lkIGRvX21lbV9hYm9ydCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTk4NC17XG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTEwMDAtfVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjEwMDE6Tk9LUFJPQkVfU1lNQk9MKGRvX21lbV9hYm9ydCk7XG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtMTAwMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2OTcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEV4Y2VwdGlvbiBIYW5kbGluZyBpbiBBUk02NCBLZXJuZWwgTWVtb3J5IEFjY2VzcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGlkZW50aWZ5IGtleSBmdW5jdGlvbnMgZm9yIGZ1enppbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbWVtb3J5IGFjY2VzcyBleGNlcHRpb25zIG9uIEFSTTY0LiBUaGUgY29udGV4dCBpcyBhbiBFTDEgYWJvcnQsIHdoZXJlIGtlcm5lbCBjb2RlIGFjY2Vzc2luZyBtZW1vcnkgdHJpZ2dlcnMgYSBzeW5jaHJvbm91cyBhYm9ydC4gVGhpcyBjYW4gc3RlbSBmcm9tIGBjb3B5X2Zyb21fdXNlcmAsIGV4Y2VwdGlvbi1oYW5kbGVkIGxvYWRzL3N0b3Jlcywgb3Igb3RoZXIgb3BlcmF0aW9ucy4KClRoZSBmbG93IGlzOiBgZWwxX2Fib3J0YCAtJmd0OyBgZG9fbWVtX2Fib3J0YCAtJmd0OyBgaW5mLSZndDtmbihmYXIsIGVzciwgcmVncylgLiBDcml0aWNhbGx5LCBpZiBpdCYjMzk7cyBhIHBhZ2UgZmF1bHQsIGBkb19wYWdlX2ZhdWx0YCBraWNrcyBpbi4gS2VybmVsLW1vZGUgcGFnZSBmYXVsdHMgZXZlbnR1YWxseSBsZWFkIHRvIGBfX2RvX2tlcm5lbF9mYXVsdGAgYW5kIGBmaXh1cF9leGNlcHRpb25gLgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgYml0OiBTeW5jaHJvbm91cyBFeHRlcm5hbCBBYm9ydHMgKFNFQSkgd2l0aCBGU0MgPSAweDEwIChvciB0cmFuc2xhdGlvbiB0YWJsZSB3YWxrIFNFQXMpIGFyZSBoYW5kbGVkIGJ5IGBkb19zZWFgLiAgUHJldmlvdXNseSwgYGRvX3NlYWAgb25seSBoYWQgYSBjaGVjayBmb3IgdXNlciBtb2RlIGFuZCBBUEVJIGNsYWltcy4gTm93LCB0aGVyZSBpcyBhIGNoZWNrIG9uIG5vbi11c2VyIG1vZGUgZXhlY3V0aW9uIGFuZCBgZml4dXBfZXhjZXB0aW9uYCBpcyBjYWxsZWQuCgpUaGUga2V5IHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZSBpbiBRRU1VLCBHQ0UsIG9yIGZ1enppbmc/IFllcywgb24gQVJNNjQsIGFueSBFTDEgYWJvcnQgdHJpZ2dlcmluZyBTRUEgb24gYW4gYWRkcmVzcyBhY2Nlc3NlZCB3aXRoIGZpeHVwIGhhbmRsZXJzICh0aGluayB1YWNjZXNzIG9uIGFuIHVubWFwcGVkIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3Mgb3IgU0VBIGluamVjdGlvbiB2aWEgUENJZS9kZXZtZW0sIGV0Yy4pIHdpbGwgZXhlY3V0ZSB0aGlzIG5ldyBwYXRoOiBgZG9fc2VhYCAtJmd0OyBgZml4dXBfZXhjZXB0aW9uYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBmb2N1czogZXhjZXB0aW9uIGhhbmRsaW5nIGZvciBrZXJuZWwgbWVtb3J5IGFjY2Vzc2VzIQoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBvbiBGb2N1c1N5bWJvbHMuIEkga25vdyBJIHdhbnQgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIGBkb19tZW1fYWJvcnRgIGhhbmRsZXMgYWxsIGRhdGEgYW5kIGluc3RydWN0aW9uIGFib3J0cyAocGFnZSBmYXVsdHMsIGV0Yy4pIHNvIHRoYXQmIzM5O3MgYSAqdmVyeSogZ2VuZXJpYyBoYW5kbGVyLiBUaGlzIGlzbiYjMzk7dCB0aGUgZnVuY3Rpb24gSSYjMzk7bSBsb29raW5nIGZvci4KCmBkb19zZWFgIGlzIHN0YXRpYyBpbiBgZmF1bHQuY2AsIGFuZCBJJiMzOTttIGF3YXJlIHRoYXQgc3RhdGljIGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIHBvdGVudGlhbGx5IG1ha2luZyB0aGVtIGxlc3Mgc3VpdGFibGUgZm9yIGRpcmVjdCBmdXp6aW5nIHRhcmdldHMgaWYgdGhleSBsYWNrIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIEhvd2V2ZXIsIGJlY2F1c2UgYGRvX3NlYWAgaXMgaW4gdGhlIGBmYXVsdF9pbmZvYCB0YWJsZSwgaXQgaXMgbm90IGlubGluZWQgYW5kIGhhcyBhbiBhc3NvY2lhdGVkIHN5bWJvbC4KCmBmaXh1cF9leGNlcHRpb25gIGxvb2tzIHByb21pc2luZzogaXQmIzM5O3Mgbm90IGEgZ2VuZXJpYyBob3QgcGF0aC4gSXQgaXMgb25seSBjYWxsZWQgd2hlbiBhbiBleGNlcHRpb24vZmF1bHQgaGFwcGVucyBpbiBrZXJuZWwgbW9kZS4gQWxzbywgSSBzZWUgaXQmIzM5O3MgZGVmaW5lZCBpbiBgYXJjaC9hcm02NC9tbS9leHRhYmxlLmNgLCBhbmQgZGVjbGFyZWQgaW4gYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXh0YWJsZS5oYC4gIFRoaXMgaXMgb25seSB0cmlnZ2VyZWQgZm9yIEVMMSBleGNlcHRpb25zIChrZXJuZWwgbW9kZSBmYXVsdHMpLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gYEZvY3VzU3ltYm9sc2AuCgpJIHJldmlld2VkIHRoZSBjb2RlIGFyb3VuZCBgZG9fc2VhYC4gVGhlcmUgYXJlIG5vIGNvbmRpdGlvbmFsIGNvbXBpbGVzLiBUaGUgY29kZSBpcyBhbHdheXMgYnVpbHQgd2l0aCBgQ09ORklHX0FSTTY0PXlgLgoKVGhlcmVmb3JlLCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZSBgZG9fc2VhYCBhbmQgYGZpeHVwX2V4Y2VwdGlvbmAgYXMgdGhlc2UgYXJlIGJvdGggc3BlY2lmaWMgYW5kIGFyZSBub3QgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIEhvd2V2ZXIsIGBkb19tZW1fYWJvcnRgIGlzIGRlZmluaXRlbHkgTk9UIHRoZSBmb2N1cyBhcyBpdCBpcyB0b28gZ2VuZXJpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmF1bHQubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnPTEyNzM9Y29uZmlnIEZVSklUU1VfRVJSQVRVTV8wMTAwMDFcbi0tXG5hcmNoL2FybTY0L0tjb25maWctMTI3OS1cdCAgYWNjZXNzZXMgbWF5IGNhdXNlIHVuZGVmaW5lZCBmYXVsdCAoRGF0YSBhYm9ydCwgREZTQz0wYjExMTExMSkuXG5hcmNoL2FybTY0L0tjb25maWc6MTI4MDpcdCAgVGhpcyBmYXVsdCBvY2N1cnMgdW5kZXIgYSBzcGVjaWZpYyBoYXJkd2FyZSBjb25kaXRpb24gd2hlbiBhXG5hcmNoL2FybTY0L0tjb25maWctMTI4MS1cdCAgbG9hZC9zdG9yZSBpbnN0cnVjdGlvbiBwZXJmb3JtcyBhbiBhZGRyZXNzIHRyYW5zbGF0aW9uIHVzaW5nOlxuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvYWxsd2lubmVyL3N1bjUwaS1oNjQtcmVtaXgtbWluaS1wYy5kdHM9MjM1PVx1MDAyNnJlZ19kY2RjNSB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9hbGx3aW5uZXIvc3VuNTBpLWg2NC1yZW1peC1taW5pLXBjLmR0cy0yNDEtXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2FsbHdpbm5lci9zdW41MGktaDY0LXJlbWl4LW1pbmktcGMuZHRzOjI0MjovKiBEZXZpYXRlcyBmcm9tIHRoZSByZXNldCBkZWZhdWx0IG9mIDEuMVYuICovXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2FsbHdpbm5lci9zdW41MGktaDY0LXJlbWl4LW1pbmktcGMuZHRzLTI0My1cdTAwMjZyZWdfZGNkYzYge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1neGwtczkwNXgta2hhZGFzLXZpbS5kdHM9NDg9XHRcdGxlZC0xIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2FtbG9naWMvbWVzb24tZ3hsLXM5MDV4LWtoYWRhcy12aW0uZHRzLTUxLVx0XHRcdG1heC1icmlnaHRuZXNzID0gXHUwMDNjMjU1XHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9hbWxvZ2ljL21lc29uLWd4bC1zOTA1eC1raGFkYXMtdmltLmR0czo1MjpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9hbWxvZ2ljL21lc29uLWd4bC1zOTA1eC1raGFkYXMtdmltLmR0cy01My1cdFx0fTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2FtbG9naWMvbWVzb24tZ3htLWtoYWRhcy12aW0yLmR0cz04OD1cdFx0bGVkLTEge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1neG0ta2hhZGFzLXZpbTIuZHRzLTkxLVx0XHRcdG1heC1icmlnaHRuZXNzID0gXHUwMDNjMjU1XHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9hbWxvZ2ljL21lc29uLWd4bS1raGFkYXMtdmltMi5kdHM6OTI6XHRcdFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXCYjMzQ7ZGVmYXVsdC1vblwmIzM0OztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1neG0ta2hhZGFzLXZpbTIuZHRzLTkzLVx0XHR9O1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1saWJyZXRlY2gtY290dG9ud29vZC5kdHNpPTgxPVx0XHRsZWQge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1saWJyZXRlY2gtY290dG9ud29vZC5kdHNpLTgzLVx0XHRcdGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX1NUQVRVUztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1saWJyZXRlY2gtY290dG9ud29vZC5kdHNpOjg0Olx0XHRcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFwmIzM0O2RlZmF1bHQtb25cJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2FtbG9naWMvbWVzb24tbGlicmV0ZWNoLWNvdHRvbndvb2QuZHRzaS04NS1cdFx0XHRtYXgtYnJpZ2h0bmVzcyA9IFx1MDAzYzI1NVx1MDAzZTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2FtbG9naWMvbWVzb24tc20xLXNlaTYxMC5kdHM9MTE2PVx0XHRsZWQtMiB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9hbWxvZ2ljL21lc29uLXNtMS1zZWk2MTAuZHRzLTExOS1cdFx0XHRtYXgtYnJpZ2h0bmVzcyA9IFx1MDAzYzI1NVx1MDAzZTtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1zbTEtc2VpNjEwLmR0czoxMjA6XHRcdFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXCYjMzQ7ZGVmYXVsdC1vblwmIzM0OztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1zbTEtc2VpNjEwLmR0cy0xMjEtXHRcdFx0YWN0aXZlLWxvdztcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2Jyb2FkY29tL2JjbWJjYS9iY200OTA2LXp5eGVsLWV4MzUxMGIuZHRzPTcwPVx0bGVkQGEge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvYnJvYWRjb20vYmNtYmNhL2JjbTQ5MDYtenl4ZWwtZXgzNTEwYi5kdHMtNzMtXHRcdGNvbG9yID0gXHUwMDNjTEVEX0NPTE9SX0lEX0dSRUVOXHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9icm9hZGNvbS9iY21iY2EvYmNtNDkwNi16eXhlbC1leDM1MTBiLmR0czo3NDpcdFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXCYjMzQ7ZGVmYXVsdC1vblwmIzM0OztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYnJvYWRjb20vYmNtYmNhL2JjbTQ5MDYtenl4ZWwtZXgzNTEwYi5kdHMtNzUtXHR9O1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2ZzbC1sczEwMTJhLXRxbWxzMTAxMmFsLW1ibHMxMDEyYWwuZHRzPTcwPVx0XHRsZWQtMSB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvZnNsLWxzMTAxMmEtdHFtbHMxMDEyYWwtbWJsczEwMTJhbC5kdHMtNzMtXHRcdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvX2V4cF8zcDN2IDE1IEdQSU9fQUNUSVZFX0xPV1x1MDAzZTtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2ZzbC1sczEwMTJhLXRxbWxzMTAxMmFsLW1ibHMxMDEyYWwuZHRzOjc0Olx0XHRcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFwmIzM0O2RlZmF1bHQtb25cJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9mc2wtbHMxMDEyYS10cW1sczEwMTJhbC1tYmxzMTAxMmFsLmR0cy03NS1cdFx0fTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9mc2wtbHMxMDI4YS1rb250cm9uLWtib3gtYS0yMzAtbHMuZHRzPTMwPVx0XHRwb3dlci1sZWQge1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvZnNsLWxzMTAyOGEta29udHJvbi1rYm94LWEtMjMwLWxzLmR0czozMTpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvZnNsLWxzMTAyOGEta29udHJvbi1rYm94LWEtMjMwLWxzLmR0cy0zMi1cdFx0XHRmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9QT1dFUjtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9mc2wtbHMxMDI4YS10cW1sczEwMjhhLW1ibHMxMDI4YS5kdHM9NDU9XHRcdGxlZC0xIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9mc2wtbHMxMDI4YS10cW1sczEwMjhhLW1ibHMxMDI4YS5kdHMtNDktXHRcdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvX2V4cF8zdjMgMTQgR1BJT19BQ1RJVkVfSElHSFx1MDAzZTtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2ZzbC1sczEwMjhhLXRxbWxzMTAyOGEtbWJsczEwMjhhLmR0czo1MDpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvZnNsLWxzMTAyOGEtdHFtbHMxMDI4YS1tYmxzMTAyOGEuZHRzLTUxLVx0XHR9O1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhtcC1odW1taW5nYm9hcmQtaWlvdC5kdHM9MTA3PVx0c3BpX211eDogbXV4LWNvbnRyb2xsZXItMSB7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4bXAtaHVtbWluZ2JvYXJkLWlpb3QuZHRzLTEwOC1cdFx0Y29tcGF0aWJsZSA9IFwmIzM0O2dwaW8tbXV4XCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OG1wLWh1bW1pbmdib2FyZC1paW90LmR0czoxMDk6XHRcdC8qIGRlZmF1bHQgb24tYm9hcmQgKi9cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhtcC1odW1taW5nYm9hcmQtaWlvdC5kdHMtMTEwLVx0XHRpZGxlLXN0YXRlID0gXHUwMDNjMFx1MDAzZTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4bXAtaHVtbWluZ2JvYXJkLWlpb3QuZHRzPTExOT1cdHVhcnQzX3VhcnQ0X2IyYl9tdXg6IG11eC1jb250cm9sbGVyLTIge1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OG1wLWh1bW1pbmdib2FyZC1paW90LmR0cy0xMjAtXHRcdGNvbXBhdGlibGUgPSBcJiMzNDtncGlvLW11eFwmIzM0OztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhtcC1odW1taW5nYm9hcmQtaWlvdC5kdHM6MTIxOlx0XHQvKiBkZWZhdWx0IG9uLWJvYXJkICovXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4bXAtaHVtbWluZ2JvYXJkLWlpb3QuZHRzLTEyMi1cdFx0aWRsZS1zdGF0ZSA9IFx1MDAzYzBcdTAwM2U7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OG1wLXRxbWE4bXBxbC1tYmE4bXB4bC5kdHM9MTE2PVx0XHRsZWQtMCB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OG1wLXRxbWE4bXBxbC1tYmE4bXB4bC5kdHMtMTIwLVx0XHRcdGdwaW9zID0gXHUwMDNjXHUwMDI2Z3BpbzUgNSBHUElPX0FDVElWRV9ISUdIXHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OG1wLXRxbWE4bXBxbC1tYmE4bXB4bC5kdHM6MTIxOlx0XHRcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFwmIzM0O2RlZmF1bHQtb25cJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4bXAtdHFtYThtcHFsLW1iYThtcHhsLmR0cy0xMjItXHRcdH07XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTEtdHFtYTkxMzEtbWJhOTF4eGNhLmR0cz0xMDE9XHRcdGxlZC0xIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg5MS10cW1hOTEzMS1tYmE5MXh4Y2EuZHRzLTEwNC1cdFx0XHRncGlvcyA9IFx1MDAzY1x1MDAyNmV4cGFuZGVyMiA2IEdQSU9fQUNUSVZFX0hJR0hcdTAwM2U7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg5MS10cW1hOTEzMS1tYmE5MXh4Y2EuZHRzOjEwNTpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTEtdHFtYTkxMzEtbWJhOTF4eGNhLmR0cy0xMDYtXHRcdH07XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTMtdHFtYTkzNTItbWJhOTF4eGNhLmR0cz0xMDE9XHRcdGxlZC0xIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg5My10cW1hOTM1Mi1tYmE5MXh4Y2EuZHRzLTEwNC1cdFx0XHRncGlvcyA9IFx1MDAzY1x1MDAyNmV4cGFuZGVyMiA2IEdQSU9fQUNUSVZFX0hJR0hcdTAwM2U7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg5My10cW1hOTM1Mi1tYmE5MXh4Y2EuZHRzOjEwNTpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTMtdHFtYTkzNTItbWJhOTF4eGNhLmR0cy0xMDYtXHRcdH07XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTMtdHFtYTkzNTItbWJhOTN4eGNhLmR0cz0xMDc9XHRcdGxlZC0xIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg5My10cW1hOTM1Mi1tYmE5M3h4Y2EuZHRzLTExMC1cdFx0XHRncGlvcyA9IFx1MDAzY1x1MDAyNmV4cGFuZGVyMiA2IEdQSU9fQUNUSVZFX0hJR0hcdTAwM2U7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg5My10cW1hOTM1Mi1tYmE5M3h4Y2EuZHRzOjExMTpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTMtdHFtYTkzNTItbWJhOTN4eGNhLmR0cy0xMTItXHRcdH07XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTMtdHFtYTkzNTItbWJhOTN4eGxhLmR0cz05OD1cdFx0bGVkLTEge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDkzLXRxbWE5MzUyLW1iYTkzeHhsYS5kdHMtMTAxLVx0XHRcdGdwaW9zID0gXHUwMDNjXHUwMDI2ZXhwYW5kZXIyIDYgR1BJT19BQ1RJVkVfSElHSFx1MDAzZTtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDkzLXRxbWE5MzUyLW1iYTkzeHhsYS5kdHM6MTAyOlx0XHRcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFwmIzM0O2RlZmF1bHQtb25cJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg5My10cW1hOTM1Mi1tYmE5M3h4bGEuZHRzLTEwMy1cdFx0fTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9tYmE4bXguZHRzaT03MT1cdFx0bGVkMSB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvbWJhOG14LmR0c2ktNzMtXHRcdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvMSAwIEdQSU9fQUNUSVZFX0hJR0hcdTAwM2U7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9tYmE4bXguZHRzaTo3NDpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvbWJhOG14LmR0c2ktNzUtXHRcdH07XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvbWJhOHh4LmR0c2k9Njg9XHRcdGxlZDEge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL21iYTh4eC5kdHNpLTcxLVx0XHRcdGdwaW9zID0gXHUwMDNjXHUwMDI2ZXhwYW5kZXIgMSBHUElPX0FDVElWRV9ISUdIXHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvbWJhOHh4LmR0c2k6NzI6XHRcdFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXCYjMzQ7ZGVmYXVsdC1vblwmIzM0OztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL21iYTh4eC5kdHNpLTczLVx0XHR9O1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvbWFydmVsbC9hcm1hZGEtMzcyMC1hdGxhcy12NS5kdHM9MzY9XHRcdGxlZCB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zNzIwLWF0bGFzLXY1LmR0cy0zOS1cdFx0XHRjb2xvciA9IFx1MDAzY0xFRF9DT0xPUl9JRF9SRURcdTAwM2U7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM3MjAtYXRsYXMtdjUuZHRzOjQwOlx0XHRcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFwmIzM0O2RlZmF1bHQtb25cJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM3MjAtYXRsYXMtdjUuZHRzLTQxLVx0XHR9O1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvbWFydmVsbC9hcm1hZGEtMzcyMC10dXJyaXMtbW94LmR0cz0zOD1cdFx0bGVkIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM3MjAtdHVycmlzLW1veC5kdHMtNDAtXHRcdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvc2IgMjEgR1BJT19BQ1RJVkVfTE9XXHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zNzIwLXR1cnJpcy1tb3guZHRzOjQxOlx0XHRcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFwmIzM0O2RlZmF1bHQtb25cJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM3MjAtdHVycmlzLW1veC5kdHMtNDItXHRcdH07XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zN3h4LmR0c2k9MjM9XHRyZXNlcnZlZC1tZW1vcnkge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvbWFydmVsbC9hcm1hZGEtMzd4eC5kdHNpLTI4LVx0XHQvKlxuYXJjaC9hcm02NC9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zN3h4LmR0c2k6Mjk6XHRcdCAqIFRoZSBQU0NJIGZpcm13YXJlIHJlZ2lvbiBkZXBpY3RlZCBiZWxvdyBpcyB0aGUgZGVmYXVsdCBvbmVcbmFyY2gvYXJtNjQvYm9vdC9kdHMvbWFydmVsbC9hcm1hZGEtMzd4eC5kdHNpLTMwLVx0XHQgKiBhbmQgc2hvdWxkIGJlIHVwZGF0ZWQgYnkgdGhlIGJvb3Rsb2FkZXIuXG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL3NkbTQ1MC1sZW5vdm8tdGJ4NjA1Zi5kdHM9NDk9XHRiYWNrbGlnaHQ6IGdwaW8tYmFja2xpZ2h0IHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vc2RtNDUwLWxlbm92by10Yng2MDVmLmR0cy01My1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9zZG00NTAtbGVub3ZvLXRieDYwNWYuZHRzOjU0Olx0XHRkZWZhdWx0LW9uO1xuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL3NkbTQ1MC1sZW5vdm8tdGJ4NjA1Zi5kdHMtNTUtXG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL3RhbG9zLWV2ay1sdmRzLWF1byxnMTMzaGFuMDEuZHRzbz0xMT1cdGJhY2tsaWdodDogYmFja2xpZ2h0IHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vdGFsb3MtZXZrLWx2ZHMtYXVvLGcxMzNoYW4wMS5kdHNvLTEzLVx0XHRncGlvcyA9IFx1MDAzY1x1MDAyNnRsbW0gMTE1IEdQSU9fQUNUSVZFX0hJR0hcdTAwM2U7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vdGFsb3MtZXZrLWx2ZHMtYXVvLGcxMzNoYW4wMS5kdHNvOjE0Olx0XHRkZWZhdWx0LW9uO1xuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL3RhbG9zLWV2ay1sdmRzLWF1byxnMTMzaGFuMDEuZHRzby0xNS1cdH07XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9weDMwLWNvYnJhLmR0c2k9MTIwPVx1MDAyNmVtbWMge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcHgzMC1jb2JyYS5kdHNpLTEyNC1cdCAqIEZvciBoczIwMCBzdXBwb3J0LCBVLUJvb3Qgd291bGQgaGF2ZSB0byBzZXQgdGhlIFJLODA5IERDREM0XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3B4MzAtY29icmEuZHRzaToxMjU6XHQgKiByYWlsIHRvIDEuOFYgZnJvbSB0aGUgZGVmYXVsdCBvZiAzLjBWLiBJdCBkb2VzbiYjMzk7dCBkbyB0aGF0IG9uXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3B4MzAtY29icmEuZHRzaS0xMjYtXHQgKiBkZXZpY2VzIG91dCBpbiB0aGUgZmllbGQsIHNvIGRpc2FibGUgaHMyMDAuXG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9weDMwLWZpcmVmbHktamQ0LWNvcmUtbWIuZHRzPTY0PVx0XHRncmVlbi1sZWQge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcHgzMC1maXJlZmx5LWpkNC1jb3JlLW1iLmR0cy02OS1cdFx0XHRsYWJlbCA9IFwmIzM0O3B4MzAtbWItamQ0OmJsdWU6ZGl5XCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9weDMwLWZpcmVmbHktamQ0LWNvcmUtbWIuZHRzOjcwOlx0XHRcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFwmIzM0O2RlZmF1bHQtb25cJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3B4MzAtZmlyZWZseS1qZDQtY29yZS1tYi5kdHMtNzEtXHRcdH07XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9weDMwLXBwMTUxNi5kdHNpPTE0OD1cdTAwMjZlbW1jIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3B4MzAtcHAxNTE2LmR0c2ktMTUyLVx0ICogRm9yIGhzMjAwIHN1cHBvcnQsIFUtQm9vdCB3b3VsZCBoYXZlIHRvIHNldCB0aGUgUks4MDkgRENEQzRcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcHgzMC1wcDE1MTYuZHRzaToxNTM6XHQgKiByYWlsIHRvIDEuOFYgZnJvbSB0aGUgZGVmYXVsdCBvZiAzLjBWLiBJdCBkb2VzbiYjMzk7dCBkbyB0aGF0IG9uXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3B4MzAtcHAxNTE2LmR0c2ktMTU0LVx0ICogZGV2aWNlcyBvdXQgaW4gdGhlIGZpZWxkLCBzbyBkaXNhYmxlIGhzMjAwLlxuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzA4LWJwaS1wMi1wcm8uZHRzPTUyPVx0XHRibHVlLWxlZCB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzMDgtYnBpLXAyLXByby5kdHMtNTctXHRcdFx0bGFiZWwgPSBcJiMzNDtibHVlOnBvd2VyXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzMDgtYnBpLXAyLXByby5kdHM6NTg6XHRcdFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXCYjMzQ7ZGVmYXVsdC1vblwmIzM0OztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzA4LWJwaS1wMi1wcm8uZHRzLTU5LVx0XHR9O1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzA4LXJvYy1jYy5kdHM9Mzc9XHRcdHBvd2VyX2xlZDogbGVkLTAge1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzMDgtcm9jLWNjLmR0cy0zOC1cdFx0XHRsYWJlbCA9IFwmIzM0O2ZpcmVmbHk6cmVkOnBvd2VyXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzMDgtcm9jLWNjLmR0czozOTpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzMDgtcm9jLWNjLmR0cy00MC1cdFx0XHRkZWZhdWx0LXN0YXRlID0gXCYjMzQ7b25cJiMzNDs7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktaHVnc3VuLXg5OS5kdHM9NTE9XHRcdHBvd2VyX2xlZDogbGVkLTAge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5LWh1Z3N1bi14OTkuZHRzLTU0LVx0XHRcdGRlZmF1bHQtc3RhdGUgPSBcJiMzNDtvblwmIzM0OztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5LWh1Z3N1bi14OTkuZHRzOjU1Olx0XHRcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFwmIzM0O2RlZmF1bHQtb25cJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1odWdzdW4teDk5LmR0cy01Ni1cdFx0fTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzUyOC1hcm1zb20tc2lnZTEuZHRzPTU1PVx0XHRsZWQtMSB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1MjgtYXJtc29tLXNpZ2UxLmR0cy01OS1cdFx0XHRncGlvcyA9IFx1MDAzY1x1MDAyNmdwaW8zIFJLX1BCMiBHUElPX0FDVElWRV9ISUdIXHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1MjgtYXJtc29tLXNpZ2UxLmR0czo2MDpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1MjgtYXJtc29tLXNpZ2UxLmR0cy02MS1cdFx0fTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzUyOC1uYW5vcGktemVybzIuZHRzPTY3PVx0XHRsZWQtMSB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1MjgtbmFub3BpLXplcm8yLmR0cy03MS1cdFx0XHRncGlvcyA9IFx1MDAzY1x1MDAyNmdwaW80IFJLX1BCMSBHUElPX0FDVElWRV9ISUdIXHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1MjgtbmFub3BpLXplcm8yLmR0czo3MjpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1MjgtbmFub3BpLXplcm8yLmR0cy03My1cdFx0fTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2Ni1iaWd0cmVldGVjaC1jYjIuZHRzaT01MD1cdFx0bGVkLTAge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY2LWJpZ3RyZWV0ZWNoLWNiMi5kdHNpLTUzLVx0XHRcdGdwaW9zID0gXHUwMDNjXHUwMDI2Z3BpbzQgUktfUEExIEdQSU9fQUNUSVZFX0xPV1x1MDAzZTtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY2LWJpZ3RyZWV0ZWNoLWNiMi5kdHNpOjU0Olx0XHRcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFwmIzM0O2RlZmF1bHQtb25cJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2Ni1iaWd0cmVldGVjaC1jYjIuZHRzaS01NS1cdFx0XHRwaW5jdHJsLW5hbWVzID0gXCYjMzQ7ZGVmYXVsdFwmIzM0Oztcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2Ni1vZHJvaWQtbTFzLmR0cz00MT1cdFx0bGVkX3B3cjogbGVkLTAge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY2LW9kcm9pZC1tMXMuZHRzLTQ1LVx0XHRcdGdwaW9zID0gXHUwMDNjXHUwMDI2Z3BpbzAgUktfUEM2IEdQSU9fQUNUSVZFX0xPV1x1MDAzZTtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY2LW9kcm9pZC1tMXMuZHRzOjQ2Olx0XHRcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFwmIzM0O2RlZmF1bHQtb25cJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2Ni1vZHJvaWQtbTFzLmR0cy00Ny1cdFx0fTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1oaW5saW5rLW9wYy5kdHNpPTY5PVx0XHRsZWQtMiB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtaGlubGluay1vcGMuZHRzaS03Mi1cdFx0XHRncGlvcyA9IFx1MDAzY1x1MDAyNmdwaW8zIFJLX1BCMCBHUElPX0FDVElWRV9ISUdIXHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtaGlubGluay1vcGMuZHRzaTo3MzpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtaGlubGluay1vcGMuZHRzaS03NC1cdFx0fTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1vZHJvaWQtbTEuZHRzPTYyPVx0XHRsZWRfcG93ZXI6IGxlZC0wIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1vZHJvaWQtbTEuZHRzLTY2LVx0XHRcdGRlZmF1bHQtc3RhdGUgPSBcJiMzNDtrZWVwXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1Njgtb2Ryb2lkLW0xLmR0czo2NzpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1Njgtb2Ryb2lkLW0xLmR0cy02OC1cdFx0XHRwaW5jdHJsLW5hbWVzID0gXCYjMzQ7ZGVmYXVsdFwmIzM0Oztcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU3Ni1hcm1zb20tc2lnZTUuZHRzPTUzPVx0XHRyZWRfbGVkOiByZWQtbGVkIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU3Ni1hcm1zb20tc2lnZTUuZHRzLTU2LVx0XHRcdGdwaW9zID0gXHUwMDNjXHUwMDI2Z3BpbzQgUktfUEIxIEdQSU9fQUNUSVZFX0hJR0hcdTAwM2U7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU3Ni1hcm1zb20tc2lnZTUuZHRzOjU3Olx0XHRcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFwmIzM0O2RlZmF1bHQtb25cJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU3Ni1hcm1zb20tc2lnZTUuZHRzLTU4LVx0XHR9O1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LXJvYy1ydC5kdHM9MTI0PVx0XHRwb3dlcl9sZWQge1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtcm9jLXJ0LmR0cy0xMjUtXHRcdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvMSBSS19QRDMgR1BJT19BQ1RJVkVfSElHSFx1MDAzZTtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LXJvYy1ydC5kdHM6MTI2Olx0XHRcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFwmIzM0O2RlZmF1bHQtb25cJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1yb2MtcnQuZHRzLTEyNy1cdFx0fTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OHMta2hhZGFzLWVkZ2UyLmR0cz03MD1cdFx0Z3JlZW5fbGVkOiBsZWQtMSB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODhzLWtoYWRhcy1lZGdlMi5kdHMtNzQtXHRcdFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fUE9XRVI7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OHMta2hhZGFzLWVkZ2UyLmR0czo3NTpcdFx0XHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcJiMzNDtkZWZhdWx0LW9uXCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODhzLWtoYWRhcy1lZGdlMi5kdHMtNzYtXHRcdFx0bWF4LWJyaWdodG5lc3MgPSBcdTAwM2MyNTVcdTAwM2U7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODhzLW9kcm9pZC1tMi5kdHM9NDI9XHRcdGxlZF9wd3I6IGxlZC0wIHtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OHMtb2Ryb2lkLW0yLmR0cy00Ni1cdFx0XHRncGlvcyA9IFx1MDAzY1x1MDAyNmdwaW8xIFJLX1BCNSBHUElPX0FDVElWRV9ISUdIXHUwMDNlO1xuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODhzLW9kcm9pZC1tMi5kdHM6NDc6XHRcdFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXCYjMzQ7ZGVmYXVsdC1vblwmIzM0OztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4cy1vZHJvaWQtbTIuZHRzLTQ4LVx0XHR9O1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvc3Qvc3RtMzJtcDIzNWYtZGsuZHRzPTEwOT1cdHBhbmVsX2x2ZHNfYmFja2xpZ2h0OiBiYWNrbGlnaHQge1xuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvc3Qvc3RtMzJtcDIzNWYtZGsuZHRzLTExMS1cdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvaSA0IEdQSU9fQUNUSVZFX0hJR0hcdTAwM2U7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3N0L3N0bTMybXAyMzVmLWRrLmR0czoxMTI6XHRcdGRlZmF1bHQtb247XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3N0L3N0bTMybXAyMzVmLWRrLmR0cy0xMTMtXHRcdHN0YXR1cyA9IFwmIzM0O29rYXlcJiMzNDs7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9zdC9zdG0zMm1wMjU3Zi1kay5kdHM9MTE2PVx0cGFuZWxfbHZkc19iYWNrbGlnaHQ6IGJhY2tsaWdodCB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9zdC9zdG0zMm1wMjU3Zi1kay5kdHMtMTE4LVx0XHRncGlvcyA9IFx1MDAzY1x1MDAyNmdwaW9pIDQgR1BJT19BQ1RJVkVfSElHSFx1MDAzZTtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvc3Qvc3RtMzJtcDI1N2YtZGsuZHRzOjExOTpcdFx0ZGVmYXVsdC1vbjtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvc3Qvc3RtMzJtcDI1N2YtZGsuZHRzLTEyMC1cdFx0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0Oztcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3N0L3N0bTMybXAyNTdmLWV2MS5kdHM9MTQwPVx0cGFuZWxfbHZkc19iYWNrbGlnaHQ6IGJhY2tsaWdodCB7XG4tLVxuYXJjaC9hcm02NC9ib290L2R0cy9zdC9zdG0zMm1wMjU3Zi1ldjEuZHRzLTE0Mi1cdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvaSA1IEdQSU9fQUNUSVZFX0hJR0hcdTAwM2U7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3N0L3N0bTMybXAyNTdmLWV2MS5kdHM6MTQzOlx0XHRkZWZhdWx0LW9uO1xuYXJjaC9hcm02NC9ib290L2R0cy9zdC9zdG0zMm1wMjU3Zi1ldjEuZHRzLTE0NC1cdFx0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0Oztcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2Jyay1pbW0uaC0xNS0gKiBBbGxvd2VkIHZhbHVlcyBmb3Iga2dkYiBhcmUgMHg0MDAgLSAweDdmZlxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9icmstaW1tLmg6MTY6ICogMHgxMDA6IGZvciB0cmlnZ2VyaW5nIGEgZmF1bHQgb24gcHVycG9zZSAocmVzZXJ2ZWQpXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2Jyay1pbW0uaC0xNy0gKiAweDQwMDogZm9yIGR5bmFtaWMgQlJLIGluc3RydWN0aW9uXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLWRlZi5oLTE3LS8qXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24tZGVmLmg6MTg6ICogQlJLIGluc3RydWN0aW9uIGZvciBwcm92b2tpbmcgYSBmYXVsdCBvbiBwdXJwb3NlXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24tZGVmLmgtMTktICogVW5saWtlIGtnZGIsICNpbW0xNiB2YWx1ZSB3aXRoIHVuYWxsb2NhdGVkIGhhbmRsZXIgaXMgdXNlZCBmb3IgZmF1bHRpbmcuXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oPTQ4MD1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2lzX3dyaXRlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgtNDgzLVx0XHQvKlxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oOjQ4NDpcdFx0ICogT25seSBhIHBlcm1pc3Npb24gZmF1bHQgb24gYSBTMVBUVyBzaG91bGQgYmVcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaC00ODUtXHRcdCAqIGNvbnNpZGVyZWQgYXMgYSB3cml0ZS4gT3RoZXJ3aXNlLCBwYWdlIHRhYmxlcyBiYWtlZFxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbXRlLWthc2FuLmg9NjA9c3RhdGljIGlubGluZSB2b2lkIG10ZV9lbmFibGVfdGNvKHZvaWQpXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tdGUta2FzYW4uaC02OC0gKiBzaW5jZSB0aGUgc3luYyBtb2RlIGdlbmVyYXRlcyBleGNlcHRpb25zIHN5bmNocm9ub3VzbHkgYW5kIHRoZVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tdGUta2FzYW4uaDo2OTogKiBub2ZhdWx0IG9yIGxvYWRfdW5hbGlnbmVkX3plcm9wYWQgY2FuIGhhbmRsZSB0aGVtLlxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tdGUta2FzYW4uaC03MC0gKi9cbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYz04Njc9aW50IHZlY19zZXRfdmVjdG9yX2xlbmd0aChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGVudW0gdmVjX3R5cGUgdHlwZSxcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYy04OTgtXHRlbHNlXG5hcmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYzo4OTk6XHRcdC8qIFJlc2V0IFZMIHRvIHN5c3RlbSBkZWZhdWx0IG9uIG5leHQgZXhlYzogKi9cbmFyY2gvYXJtNjQva2VybmVsL2Zwc2ltZC5jLTkwMC1cdFx0dGFza19zZXRfdmxfb25leGVjKHRhc2ssIHR5cGUsIDApO1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2h3X2JyZWFrcG9pbnQuYz02MzE9dm9pZCBkb19icmVha3BvaW50KHVuc2lnbmVkIGxvbmcgZXNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9od19icmVha3BvaW50LmMtNjY2LVx0XHQvKiBEbyB3ZSBuZWVkIHRvIGhhbmRsZSB0aGUgc3RlcHBpbmc/ICovXG5hcmNoL2FybTY0L2tlcm5lbC9od19icmVha3BvaW50LmM6NjY3Olx0XHRpZiAoaXNfZGVmYXVsdF9vdmVyZmxvd19oYW5kbGVyKGJwKSlcbmFyY2gvYXJtNjQva2VybmVsL2h3X2JyZWFrcG9pbnQuYy02NjgtXHRcdFx0c3RlcCA9IDE7XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvaHdfYnJlYWtwb2ludC5jPTc0MT1zdGF0aWMgaW50IHdhdGNocG9pbnRfcmVwb3J0KHN0cnVjdCBwZXJmX2V2ZW50ICp3cCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2h3X2JyZWFrcG9pbnQuYy03NDMte1xuYXJjaC9hcm02NC9rZXJuZWwvaHdfYnJlYWtwb2ludC5jOjc0NDpcdGludCBzdGVwID0gaXNfZGVmYXVsdF9vdmVyZmxvd19oYW5kbGVyKHdwKTtcbmFyY2gvYXJtNjQva2VybmVsL2h3X2JyZWFrcG9pbnQuYy03NDUtXHRzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvID0gY291bnRlcl9hcmNoX2JwKHdwKTtcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9tdGUuYz0yMDQ9c3RhdGljIHZvaWQgbXRlX3VwZGF0ZV9zY3Rscl91c2VyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9tdGUuYy0yMjUtXHQgKiBzZXQgYml0cyBhbmQgbWFwIGludG8gcmVnaXN0ZXIgdmFsdWVzIGRldGVybWluZXMgb3VyXG5hcmNoL2FybTY0L2tlcm5lbC9tdGUuYzoyMjY6XHQgKiBkZWZhdWx0IG9yZGVyLlxuYXJjaC9hcm02NC9rZXJuZWwvbXRlLmMtMjI3LVx0ICovXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL2twcm9iZXMuYz0zMDE9aW50IF9fa3Byb2JlcyBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGZzcilcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMva3Byb2Jlcy5jLTMyMi1cdFx0ICogc2luZ2xlLXN0ZXBwaW5nIGlmIHRoZSBmYXVsdGluZyBQQyBwb2ludHMgdG8gdGhlXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMva3Byb2Jlcy5jOjMyMzpcdFx0ICogY3VycmVudCBrcHJvYmUmIzM5O3MgWE9MIGluc3RydWN0aW9uLiBJZiB0aGUgZmF1bHQgb2NjdXJyZWRcbmFyY2gvYXJtNjQva2VybmVsL3Byb2Jlcy9rcHJvYmVzLmMtMzI0LVx0XHQgKiBlbHNld2hlcmUgKGUuZy4gaW4gcGVyZiBvciB0cmFjaW5nIGNvZGUgaW52b2tlZCBmcm9tIHRoZVxuLS1cbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlPTE2PWt2bS15ICYjNDM7PSBhcm0ubyBtbXUubyBtbWlvLm8gcHNjaS5vIGh5cGVyY2FsbHMubyBwdnRpbWUubyBcXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU6MTc6XHQgaW5qZWN0X2ZhdWx0Lm8gdmFfbGF5b3V0Lm8gaGFuZGxlX2V4aXQubyBjb25maWcubyBcXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUtMTgtXHQgZ3Vlc3QubyBkZWJ1Zy5vIHJlc2V0Lm8gc3lzX3JlZ3MubyBzdGFja3RyYWNlLm8gXFxcbi0tXG5hcmNoL2FybTY0L2t2bS9hcm0uYz02MD1lbnVtIGt2bV93ZnhfdHJhcF9wb2xpY3kge1xuYXJjaC9hcm02NC9rdm0vYXJtLmM6NjE6XHRLVk1fV0ZYX05PVFJBUF9TSU5HTEVfVEFTSywgLyogRGVmYXVsdCBvcHRpb24gKi9cbmFyY2gvYXJtNjQva3ZtL2FybS5jLTYyLVx0S1ZNX1dGWF9OT1RSQVAsXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmM9MTY0ND1zdGF0aWMgaW50IGt2bV9zZXR1cF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0xNjUwLVx0ICogV2hlbiB0aGUgdkNQVSBoYXMgYSBQTVUsIGJ1dCBubyBQTVUgaXMgc2V0IGZvciB0aGUgZ3Vlc3RcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjE2NTE6XHQgKiB5ZXQsIHNldCB0aGUgZGVmYXVsdCBvbmUuXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0xNjUyLVx0ICovXG4tLVxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL2ZhdWx0Lmg9NjA9c3RhdGljIGlubGluZSBib29sIF9faHBmYXJfdmFsaWQodTY0IGVzcilcbi0tXG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvZmF1bHQuaC02My1cdCAqIENQVXMgYWZmZWN0ZWQgYnkgQVJNIGVycmF0dW0gIzgzNDIyMCBtYXkgaW5jb3JyZWN0bHkgcmVwb3J0IGFcbmFyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9mYXVsdC5oOjY0Olx0ICogc3RhZ2UtMiB0cmFuc2xhdGlvbiBmYXVsdCB3aGVuIGEgc3RhZ2UtMSBwZXJtaXNzaW9uIGZhdWx0IG9jY3Vycy5cbmFyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9mYXVsdC5oLTY1LVx0ICpcbi0tXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9wa3ZtLmM9MTA1Mz1zdGF0aWMgdTY0IF9fcGt2bV9tZW1zaGFyZV9wYWdlX3JlcShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBpcGEpXG4tLVxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvcGt2bS5jLTEwNTYtXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9wa3ZtLmM6MTA1NzpcdC8qIEZha2UgdXAgYSBkYXRhIGFib3J0IChsZXZlbCAzIHRyYW5zbGF0aW9uIGZhdWx0IG9uIHdyaXRlKSAqL1xuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvcGt2bS5jLTEwNTgtXHR2Y3B1LVx1MDAzZWFyY2guZmF1bHQuZXNyX2VsMiA9IChFU1JfRUx4X0VDX0RBQlRfTE9XIFx1MDAzY1x1MDAzYyBFU1JfRUx4X0VDX1NISUZUKSB8XG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9MjI0Nz1pbnQga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjI5MS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jOjIyOTI6XHQvKiBDaGVjayB0aGUgc3RhZ2UtMiBmYXVsdCBpcyB0cmFucy4gZmF1bHQgb3Igd3JpdGUgZmF1bHQgKi9cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTIyOTMtXHRpZiAoIWVzcl9mc2NfaXNfdHJhbnNsYXRpb25fZmF1bHQoZXNyKSBcdTAwMjZcdTAwMjZcbi0tXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jPTEwNDM9c3RhdGljIHZvaWQga3ZtX2FybV9zZXRfcG11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGFybV9wbXUgKmFybV9wbXUpXG4tLVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xMDUxLS8qKlxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYzoxMDUyOiAqIGt2bV9hcm1fc2V0X2RlZmF1bHRfcG11IC0gTm8gUE1VIHNldCwgZ2V0IHRoZSBkZWZhdWx0IG9uZS5cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtMTA1My0gKiBAa3ZtOiBUaGUga3ZtIHBvaW50ZXJcbi0tXG5hcmNoL2FybTY0L21tL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuYXJjaC9hcm02NC9tbS9NYWtlZmlsZToyOm9iai15XHRcdFx0XHQ6PSBkbWEtbWFwcGluZy5vIGV4dGFibGUubyBmYXVsdC5vIGluaXQubyBcXFxuYXJjaC9hcm02NC9tbS9NYWtlZmlsZS0zLVx0XHRcdFx0ICAgY2FjaGUubyBjb3B5cGFnZS5vIGZsdXNoLm8gXFxcbi0tXG5hcmNoL2FybTY0L21tL2NvbnRwdGUuYz02OT1zdGF0aWMgdm9pZCBjb250cHRlX2NvbnZlcnQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5hcmNoL2FybTY0L21tL2NvbnRwdGUuYy0xNTctXHQgKiAgSWYgYm90aCB0aGUgb2xkIHNpbmdsZSAoUlcsbikgYW5kIG5ldyBjb250aWd1b3VzIChSTyxjKSBUTEIgZW50cmllc1xuYXJjaC9hcm02NC9tbS9jb250cHRlLmM6MTU4Olx0ICogIGFyZSBwcmVzZW50LCBhbmQgYSB3cml0ZSBpcyBtYWRlIHRvIHRoaXMgYWRkcmVzcywgZG8gd2UgZmF1bHQgb3JcbmFyY2gvYXJtNjQvbW0vY29udHB0ZS5jLTE1OS1cdCAqICBpcyB0aGUgd3JpdGUgcGVybWl0dGVkICh2aWEgYW1hbGdhbWF0aW9uKT9cbi0tXG5hcmNoL2FybTY0L21tL2V4dGFibGUuYz0xND1zdGF0aWMgYm9vbCBjcHlfZmF1bHRlZF9vbl91YWNjZXNzKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxuLS1cbmFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jLTE3LVx0Ym9vbCB1YWNjZXNzX2lzX3dyaXRlID0gRklFTERfR0VUKEVYX0RBVEFfVUFDQ0VTU19XUklURSwgZXgtXHUwMDNlZGF0YSk7XG5hcmNoL2FybTY0L21tL2V4dGFibGUuYzoxODpcdGJvb2wgZmF1bHRfb25fd3JpdGUgPSBlc3IgXHUwMDI2IEVTUl9FTHhfV05SO1xuYXJjaC9hcm02NC9tbS9leHRhYmxlLmMtMTktXG5hcmNoL2FybTY0L21tL2V4dGFibGUuYzoyMDpcdHJldHVybiB1YWNjZXNzX2lzX3dyaXRlID09IGZhdWx0X29uX3dyaXRlO1xuYXJjaC9hcm02NC9tbS9leHRhYmxlLmMtMjEtfVxuLS1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz02MDE9c3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsXG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTc5MC1cdFx0ICovXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6NzkxOlx0XHRwYWdlZmF1bHRfb3V0X29mX21lbW9yeSgpO1xuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTc5Mi1cdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MjExCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEFSTTY0IEZhdWx0IEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlIEFSTTY0IGtlcm5lbCBoYW5kbGVzIG1lbW9yeSBmYXVsdHMuIEkgc2VlIHRoYXQgYGZhdWx0Lm9gIGFuZCBgZXh0YWJsZS5vYCBhcmUgYnVpbHQgYWxvbmdzaWRlIGBkbWEtbWFwcGluZy5vYCBhbmQgb3RoZXJzLCBhbGwgcGFydCBvZiB0aGUgc3RhbmRhcmQgYnVpbGQgcHJvY2VzcyB2aWEgYG9iai15YC4gVGhlIGFyY2hpdGVjdHVyZSBjb25maWcgaXMgYENPTkZJR19BUk02NGAg4oCTIG5vdGhpbmcgdG9vIHVudXN1YWwgaGVyZSB1bmxlc3Mgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgc3BlY2lmaWMsIHNvIG5vIG5lZWQgdG8gZGVsdmUgaW50byBzcGVjaWZpYyBFbmFibGVDb25maWdzLCBgW11gIGlzIGZpbmUgYW5kIGBJU19FTkFCTEVEKENPTkZJR19BUk02NClgIGlzIGltcGxpZWQuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3c7IEkgc2hvdWxkIGNoZWNrIG91dCBgZml4dXBfZXhjZXB0aW9uYCwgYGRvX3NlYWAsIGFuZCBgZG9fbWVtX2Fib3J0YC4gSSYjMzk7bGwgYWxzbyBnbGFuY2UgdGhyb3VnaCBvdGhlciBzeW1ib2xzIGFuZCBjb25maWdzLgoKQWhhISBMb29raW5nIGF0IGBmYXVsdC5jYCBkaXJlY3RseSwgSSBjYW4gc2VlIHNvbWUgcmVsZXZhbnQgYENPTkZJR19gIG9wdGlvbnMgaW4gcGxheTogYENPTkZJR19DT01QQVRfQUxJR05NRU5UX0ZJWFVQU2Ag4oCTIHRoYXQmIzM5O3MgZm9yIGhhbmRsaW5nIGFsaWdubWVudCBmYXVsdHMsIG9idmlvdXNseS4gYENPTkZJR19IQVJERU5fRUwyX1ZFQ1RPUlNgIGlzbiYjMzk7dCBwZXJ0aW5lbnQgaW4gdGhpcyBjb250ZXh0LiBBbmQgdGhlbiwgdGhlcmUmIzM5O3MgYENPTkZJR19BQ1BJX0FQRUlfU0VBYCBhbmQgYENPTkZJR19BQ1BJX0FQRUlgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhcyB0aGF0IGludm9sdmVzIGBhcGVpX2NsYWltX3NlYWAuIEkgc2hvdWxkIGNoZWNrIG91dCBgYXBlaV9jbGFpbV9zZWFgIGluIGBhcmNoL2FybTY0YCB0byBzZWUgaG93IHRoYXQmIzM5O3MgdGllZCBpbnRvIHRoZSBmYXVsdCBoYW5kbGluZyBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcGVpX2NsYWltX3NlYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hY3BpLmg9MTIwPXZvaWQgX19pbml0IGFjcGlfaW5pdF9jcHVzKHZvaWQpO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hY3BpLmg6MTIxOmludCBhcGVpX2NsYWltX3NlYShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FjcGkuaC0xMjItI2Vsc2VcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWNwaS5oPTEyMz1zdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9pbml0X2NwdXModm9pZCkgeyB9XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FjcGkuaDoxMjQ6c3RhdGljIGlubGluZSBpbnQgYXBlaV9jbGFpbV9zZWEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgcmV0dXJuIC1FTk9FTlQ7IH1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWNwaS5oLTEyNS0jZW5kaWYgLyogQ09ORklHX0FDUEkgKi9cbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9hY3BpLmM9Mjk1PXZvaWQgX19pb21lbSAqYWNwaV9vc19pb3JlbWFwKGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBwaHlzLCBhY3BpX3NpemUgc2l6ZSlcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9hY3BpLmMtMzg4LSAqL1xuYXJjaC9hcm02NC9rZXJuZWwvYWNwaS5jOjM4OTppbnQgYXBlaV9jbGFpbV9zZWEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG5hcmNoL2FybTY0L2tlcm5lbC9hY3BpLmMtMzkwLXtcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0yMTg1PWludCBrdm1faGFuZGxlX2d1ZXN0X3NlYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjIwMC1cdCAqIEdpdmUgQVBFSSB0aGUgb3Bwb3J0dW5pdHkgdG8gY2xhaW0gdGhlIGFib3J0IGJlZm9yZSBoYW5kbGluZyBpdFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjIwMTpcdCAqIHdpdGhpbiBLVk0uIGFwZWlfY2xhaW1fc2VhKCkgZXhwZWN0cyB0byBiZSBjYWxsZWQgd2l0aCBJUlFzIGVuYWJsZWQuXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yMjAyLVx0ICovXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yMjAzLVx0bG9ja2RlcF9hc3NlcnRfaXJxc19lbmFibGVkKCk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYzoyMjA0Olx0aWYgKGFwZWlfY2xhaW1fc2VhKE5VTEwpID09IDApXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yMjA1LVx0XHRyZXR1cm4gMTtcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9ODY2PXN0YXRpYyBpbnQgZG9fc2VhKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTg3Mi1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo4NzM6XHRpZiAodXNlcl9tb2RlKHJlZ3MpIFx1MDAyNlx1MDAyNiBhcGVpX2NsYWltX3NlYShyZWdzKSA9PSAwKSB7XG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtODc0LVx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTUwMwoJCQkJCQkJb3V0cHV0OiA4OQoJCQkJCQkJdGhvdWdodHM6IDQxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGBhcmNoL2FybTY0L21tL2ZhdWx0LmNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFkZGluZyBhIGNoZWNrIHdpdGhpbiBgZG9fc2VhKClgLCB0aGUgU3luY2hyb25vdXMgRXh0ZXJuYWwgQWJvcnQgKFNFQSkgaGFuZGxlciwgbGlrZSB0aGlzOgoKYGBgYwoJaWYgKCF1c2VyX21vZGUocmVncykgJmFtcDsmYW1wOyBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSkKCQlyZXR1cm4gMDsKYGBgCgpFc3NlbnRpYWxseSwgaWYgYSBTRUEgaGFwcGVucyBpbiBrZXJuZWwgbW9kZSAoRUwxKSwgaW5zdGVhZCBvZiBpbW1lZGlhdGVseSBjcmFzaGluZyDigJMgYXMgd291bGQgaGFwcGVuIHdpdGggYGFybTY0X25vdGlmeV9kaWVgIOKAkyB0aGUgY29kZSBpcyBub3cgY2hlY2tpbmcgaWYgYGZpeHVwX2V4Y2VwdGlvbigpYCBjYW4gaGFuZGxlIGl0LiAgSWYgYGZpeHVwX2V4Y2VwdGlvbmAgcmV0dXJucyB0cnVlLCB0aGUgZXhjZXB0aW9uIGlzICYjMzQ7Zml4ZWQgdXAmIzM0OyAoaGFuZGxlZCkuIFRoaXMgaXMgaW50ZXJlc3RpbmcuCgpJcyB0aGlzIGZ1enppbmctd29ydGh5PyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGNvcmUgQVJNNjQgbWVtb3J5IGFib3J0L2V4Y2VwdGlvbiBoYW5kbGluZy4gQSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBoZXJlIGNvdWxkIGxlYWQgdG8gc29tZSBuYXN0eSBleHBsb2l0cywgaWYgYSBiYWQgYWN0b3IgY2FuIHRyaWdnZXIgdGhlIGNvZGUgcGF0aC4KClNvLCB0aGUga2V5IHN5bWJvbHMgaGVyZSBhcmUgYGZpeHVwX2V4Y2VwdGlvbmAgKHdoaWNoLCBpbXBvcnRhbnRseSwgaXMgYSBnbG9iYWwsIG5vbi1zdGF0aWMgZnVuY3Rpb24gZGVmaW5lZCBpbiBgYXJjaC9hcm02NC9tbS9leHRhYmxlLmNgKSBhbmQgYGRvX3NlYWAgKHRoZSBTRUEgaGFuZGxlciB0aGlzIHBhdGNoIG1vZGlmaWVzKS4gYGRvX3NlYWAgaXMgc3RhdGljIGJ1dCBpcyB1c2VkIGluIGBmYXVsdF9pbmZvYCB0YWJsZSwgc28gaXQgKnNob3VsZCogYmUgYWRkcmVzcy10YWtlbiBhbmQgYWNjZXNzaWJsZSBpbiBrYWxsc3ltcyBpZiBDT05GSUdfS0FMTFNZTVMgaXMgZW5hYmxlZC4gSSBzaG91bGQgcHJvYmFibHkga2VlcCBhbiBleWUgb24gYGRvX21lbV9hYm9ydGAgdG9vLCBhcyBpdCYjMzk7cyB0aGUgZ2VuZXJhbCBlbnRyeSBwb2ludCBmb3IgbWVtb3J5IGFib3J0cy4KCkFuZCB0aGFua2Z1bGx5LCBubyBzcGVjaWFsIEtjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQgYmVjYXVzZSB0aGlzIGlzIHVuY29uZGl0aW9uYWwgaW4gYGFyY2gvYXJtNjQvbW0vZmF1bHQuY2AuIFRoaXMgbWFrZXMgdGhpbmdzIG11Y2ggc2ltcGxlci4KClNvLCB0byBzdW1tYXJpemU6CgoqICAgKipXb3J0aEZ1enppbmcqKjogVHJ1ZQoqICAgKipGb2N1c1N5bWJvbHMqKjogYFsmIzM0O2ZpeHVwX2V4Y2VwdGlvbiYjMzQ7LCAmIzM0O2RvX3NlYSYjMzQ7XWAKKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgW11gCgpUaGUgcmVhc29uaW5nPyBJdCYjMzk7cyBhbGwgYWJvdXQgcHJvYmluZyB0aGUgY3JpdGljYWwga2VybmVsIGV4Y2VwdGlvbiBoYW5kbGluZyBsb2dpYy4gVGhpcyBsb29rcyBnb29kLiBSZWFkeSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZpeHVwX2V4Y2VwdGlvbiYjMzQ7LAogICAgJiMzNDtkb19zZWEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWxsb3dzIGtlcm5lbC1tb2RlIHN5bmNocm9ub3VzIGV4dGVybmFsIGFib3J0cyAoU0VBKSB0byBiZSByZWNvdmVyZWQgdXNpbmcgZXhjZXB0aW9uIGZpeHVwIHRhYmxlcyBpbnN0ZWFkIG9mIGltbWVkaWF0ZWx5IHBhbmlja2luZy4gVGhpcyBtb2RpZmllcyBjb3JlIEFSTTY0IGZhdWx0IGhhbmRsaW5nIGxvZ2ljIHJlYWNoYWJsZSBkdXJpbmcga2VybmVsIG1lbW9yeSBhY2Nlc3NlcyB0aGF0IGZhdWx0IHdpdGggU0VBLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZpeHVwX2V4Y2VwdGlvbiYjMzQ7LAogICAgJiMzNDtkb19zZWEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWxsb3dzIGtlcm5lbC1tb2RlIHN5bmNocm9ub3VzIGV4dGVybmFsIGFib3J0cyAoU0VBKSB0byBiZSByZWNvdmVyZWQgdXNpbmcgZXhjZXB0aW9uIGZpeHVwIHRhYmxlcyBpbnN0ZWFkIG9mIGltbWVkaWF0ZWx5IHBhbmlja2luZy4gVGhpcyBtb2RpZmllcyBjb3JlIEFSTTY0IGZhdWx0IGhhbmRsaW5nIGxvZ2ljIHJlYWNoYWJsZSBkdXJpbmcga2VybmVsIG1lbW9yeSBhY2Nlc3NlcyB0aGF0IGZhdWx0IHdpdGggU0VBLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzoyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGRvX3NlYSgpYCBpbiBgYXJjaC9hcm02NC9tbS9mYXVsdC5jYCB0byBhdHRlbXB0IGV4Y2VwdGlvbiBmaXh1cCB2aWEgYGZpeHVwX2V4Y2VwdGlvbigpYCB3aGVuIGEgU3luY2hyb25vdXMgRXh0ZXJuYWwgQWJvcnQgKFNFQSkgb2NjdXJzIGluIGtlcm5lbCBtb2RlIChgIXVzZXJfbW9kZShyZWdzKWApLCBhbGxvd2luZyBncmFjZWZ1bCByZWNvdmVyeSAoZS5nLiwgcmV0dXJuaW5nIC1FRkFVTFQgZm9yIHVhY2Nlc3MgZmF1bHRzKSBpbnN0ZWFkIG9mIGR5aW5nLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgbG93LWxldmVsIGFyY2hpdGVjdHVyZSBmYXVsdC9leGNlcHRpb24gaGFuZGxpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgc3RydWN0dXJlIGZpZWxkcyBvciBwYWRkaW5nLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGluaXRpYWxpemF0aW9uIGxvZ2ljLCBhbmQgZG9lcyBub3QgY29weSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZkYTc4ZWY3ZGMwZjg0N2Y3ZWZhNGE5NTIxMzJhMjk4NmUyM2U0MzEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAyMzoyNDowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vZmF1bHQuYyBiL2FyY2gvYXJtNjQvbW0vZmF1bHQuYwppbmRleCAwYjUyNTU3NjUyYmU2Li5jYTM5NmI0YmRkYTAzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL2ZhdWx0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9mYXVsdC5jCkBAIC04NzgsNiAmIzQzOzg3OCw5IEBAIHN0YXRpYyBpbnQgZG9fc2VhKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiAJCXJldHVybiAwOwogCX0KIAomIzQzOwlpZiAoIXVzZXJfbW9kZShyZWdzKSAmYW1wOyZhbXA7IGZpeHVwX2V4Y2VwdGlvbihyZWdzLCBlc3IpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJaWYgKGVzciAmYW1wOyBFU1JfRUx4X0ZuVikgewogCQlzaWFkZHIgPSAwOwogCX0gZWxzZSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDcxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBcm02NCBGYXVsdCBIYW5kbGluZyBpbiBgZmF1bHQuY2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBzbyBJJiMzOTttIGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXI6IGBhcmNoL2FybTY0L21tL2ZhdWx0LmNgLiBUaGUgZmF1bHQgaGFuZGxpbmcgY29kZSBpcyBjcml0aWNhbCwgc28gYSBjaGFuZ2UgaGVyZSBhbHdheXMgd2FycmFudHMgY2FyZWZ1bCBzY3J1dGlueS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiBgZG9fc2VhYCBhbmQgYGZpeHVwX2V4Y2VwdGlvbmAuIFRoZXNlIGFyZSB0aGUgbGlrZWx5IGVudHJ5IHBvaW50cyBmb3IgYW55IGZhdWx0LXJlbGF0ZWQgcHJvY2Vzc2luZywgYW5kIHVuZGVyc3RhbmRpbmcgdGhlaXIgaW50ZXJhY3Rpb24gaXMga2V5LiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBwYXRocyB0aHJvdWdoIHRoZW0sIHNlZSBob3cgdGhleSBpbnRlcmFjdCwgYW5kIGlkZW50aWZ5IGV4YWN0bHkgd2hhdCYjMzk7cyBiZWluZyBtb2RpZmllZCBieSB0aGlzIHBhdGNoLiBJIGV4cGVjdCB0byBzZWUgZGV0YWlsZWQgY2hlY2tzIGZvciB0aGUgZmF1bHQgdHlwZSBhbmQgYWRkcmVzcywgYW5kIGEgY29uZGl0aW9uYWwgc2VxdWVuY2UgYmFzZWQgb24gdGhlIHN5c3RlbSBzdGF0ZSBhbmQgdGhlIGZhdWx0JiMzOTtzIG5hdHVyZS4gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBjaGFuZ2UgaW1wYWN0cyB0aGUgZXhpc3RpbmcgZXhjZXB0aW9uIGhhbmRsaW5nIGxvZ2ljIHdpbGwgYmUgY3JpdGljYWwgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgaXMgY29ycmVjdCBhbmQgd2hhdCB0aGUgcGVyZm9ybWFuY2UgYW5kL29yIHNlY3VyaXR5IGltcGFjdHMgb2YgdGhlIHByb3Bvc2VkIGNoYW5nZXMgbWlnaHQgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX3NlYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbW0vZmF1bHQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L21tL2ZhdWx0LmM9ODYxPXN0YXRpYyBpbnQgZG9fYmFkKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTg2NS1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo4NjY6c3RhdGljIGludCBkb19zZWEodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy04Njcte1xuLS1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz05MTY9c3RhdGljIGNvbnN0IHN0cnVjdCBmYXVsdF9pbmZvIGZhdWx0X2luZm9bXSA9IHtcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtOTMyLVx0eyBkb19wYWdlX2ZhdWx0LFx0U0lHU0VHViwgU0VHVl9BQ0NFUlIsXHRcJiMzNDtsZXZlbCAzIHBlcm1pc3Npb24gZmF1bHRcJiMzNDtcdH0sXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTMzOlx0eyBkb19zZWEsXHRcdFNJR0JVUywgIEJVU19PQkpFUlIsXHRcJiMzNDtzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydFwmIzM0O1x0fSxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05MzQtXHR7IGRvX3RhZ19jaGVja19mYXVsdCxcdFNJR1NFR1YsIFNFR1ZfTVRFU0VSUixcdFwmIzM0O3N5bmNocm9ub3VzIHRhZyBjaGVjayBmYXVsdFwmIzM0O1x0fSxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05MzUtXHR7IGRvX2JhZCxcdFx0U0lHS0lMTCwgU0lfS0VSTkVMLFx0XCYjMzQ7dW5rbm93biAxOFwmIzM0O1x0XHRcdH0sXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTM2Olx0eyBkb19zZWEsXHRcdFNJR0tJTEwsIFNJX0tFUk5FTCxcdFwmIzM0O2xldmVsIC0xICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVwmIzM0O1x0fSxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5Mzc6XHR7IGRvX3NlYSxcdFx0U0lHS0lMTCwgU0lfS0VSTkVMLFx0XCYjMzQ7bGV2ZWwgMCAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcJiMzNDtcdH0sXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTM4Olx0eyBkb19zZWEsXHRcdFNJR0tJTEwsIFNJX0tFUk5FTCxcdFwmIzM0O2xldmVsIDEgKHRyYW5zbGF0aW9uIHRhYmxlIHdhbGspXCYjMzQ7XHR9LFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjkzOTpcdHsgZG9fc2VhLFx0XHRTSUdLSUxMLCBTSV9LRVJORUwsXHRcJiMzNDtsZXZlbCAyICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVwmIzM0O1x0fSxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5NDA6XHR7IGRvX3NlYSxcdFx0U0lHS0lMTCwgU0lfS0VSTkVMLFx0XCYjMzQ7bGV2ZWwgMyAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcJiMzNDtcdH0sXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTQxOlx0eyBkb19zZWEsXHRcdFNJR0JVUywgIEJVU19PQkpFUlIsXHRcJiMzNDtzeW5jaHJvbm91cyBwYXJpdHkgb3IgRUNDIGVycm9yXCYjMzQ7IH0sXHQvLyBSZXNlcnZlZCB3aGVuIFJBUyBpcyBpbXBsZW1lbnRlZFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTk0Mi1cdHsgZG9fYmFkLFx0XHRTSUdLSUxMLCBTSV9LRVJORUwsXHRcJiMzNDt1bmtub3duIDI1XCYjMzQ7XHRcdFx0fSxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05NDMtXHR7IGRvX2JhZCxcdFx0U0lHS0lMTCwgU0lfS0VSTkVMLFx0XCYjMzQ7dW5rbm93biAyNlwmIzM0O1x0XHRcdH0sXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTQ0Olx0eyBkb19zZWEsXHRcdFNJR0tJTEwsIFNJX0tFUk5FTCxcdFwmIzM0O2xldmVsIC0xIHN5bmNocm9ub3VzIHBhcml0eSBlcnJvciAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcJiMzNDtcdH0sXHQvLyBSZXNlcnZlZCB3aGVuIFJBUyBpcyBpbXBsZW1lbnRlZFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjk0NTpcdHsgZG9fc2VhLFx0XHRTSUdLSUxMLCBTSV9LRVJORUwsXHRcJiMzNDtsZXZlbCAwIHN5bmNocm9ub3VzIHBhcml0eSBlcnJvciAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcJiMzNDtcdH0sXHQvLyBSZXNlcnZlZCB3aGVuIFJBUyBpcyBpbXBsZW1lbnRlZFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjk0NjpcdHsgZG9fc2VhLFx0XHRTSUdLSUxMLCBTSV9LRVJORUwsXHRcJiMzNDtsZXZlbCAxIHN5bmNocm9ub3VzIHBhcml0eSBlcnJvciAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcJiMzNDtcdH0sXHQvLyBSZXNlcnZlZCB3aGVuIFJBUyBpcyBpbXBsZW1lbnRlZFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjk0NzpcdHsgZG9fc2VhLFx0XHRTSUdLSUxMLCBTSV9LRVJORUwsXHRcJiMzNDtsZXZlbCAyIHN5bmNocm9ub3VzIHBhcml0eSBlcnJvciAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcJiMzNDtcdH0sXHQvLyBSZXNlcnZlZCB3aGVuIFJBUyBpcyBpbXBsZW1lbnRlZFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjk0ODpcdHsgZG9fc2VhLFx0XHRTSUdLSUxMLCBTSV9LRVJORUwsXHRcJiMzNDtsZXZlbCAzIHN5bmNocm9ub3VzIHBhcml0eSBlcnJvciAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcJiMzNDtcdH0sXHQvLyBSZXNlcnZlZCB3aGVuIFJBUyBpcyBpbXBsZW1lbnRlZFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTk0OS1cdHsgZG9fYmFkLFx0XHRTSUdLSUxMLCBTSV9LRVJORUwsXHRcJiMzNDt1bmtub3duIDMyXCYjMzQ7XHRcdFx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM0MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEFybTY0IEZhdWx0IEhhbmRsZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGNyYWNrIG9wZW4gYGFyY2gvYXJtNjQvbW0vZmF1bHQuY2AgYW5kIHplcm8gaW4gYXJvdW5kIGxpbmUgODY2LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIGFyY2hpdGVjdHVyZSBoYW5kbGVzIG1lbW9yeSBmYXVsdHMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgdGhlIGZhdWx0IGhhbmRsZXIgYW5kIGhvdyBpdCBkaWZmZXJlbnRpYXRlcyBiZXR3ZWVuIGRpZmZlcmVudCBmYXVsdCBzY2VuYXJpb3MgYW5kIHByaXZpbGVnZSBsZXZlbHMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgZmlndXJlcyBvdXQgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHBhZ2UgZmF1bHQsIGEgZGF0YSBhYm9ydCwgaW5zdHJ1Y3Rpb24gYWJvcnQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5LiBJJiMzOTttIGtlZW4gb24gdHJhY2luZyB0aGUgZGVjaXNpb24gcHJvY2VzczsgaG93IGRvZXMgdGhlIGNvZGUgZGV0ZXJtaW5lIHRoZSBjYXVzZSBvZiB0aGUgYWNjZXNzIHZpb2xhdGlvbiwgYW5kIHRoZW4sIGhvdyBkb2VzIGl0IHJlYWN0PwpJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGxvb2tpbmcgYXQgdGhlIHdheSB0aGUgTU1VIGlzIGludGVycm9nYXRlZCB0byB0cnkgdG8gZGVkdWNlIHRoZSBjYXVzZSBvZiB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL2FybTY0L21tL2ZhdWx0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg2MDpcdFxuIDg2MTpcdHN0YXRpYyBpbnQgZG9fYmFkKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gODYyOlx0e1xuIDg2MzpcdFx0cmV0dXJuIDE7IC8qIFwmIzM0O2ZhdWx0XCYjMzQ7ICovXG4gODY0Olx0fVxuIDg2NTpcdFxuIDg2NjpcdHN0YXRpYyBpbnQgZG9fc2VhKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gODY3Olx0e1xuIDg2ODpcdFx0Y29uc3Qgc3RydWN0IGZhdWx0X2luZm8gKmluZjtcbiA4Njk6XHRcdHVuc2lnbmVkIGxvbmcgc2lhZGRyO1xuIDg3MDpcdFxuIDg3MTpcdFx0aW5mID0gZXNyX3RvX2ZhdWx0X2luZm8oZXNyKTtcbiA4NzI6XHRcbiA4NzM6XHRcdGlmICh1c2VyX21vZGUocmVncykgXHUwMDI2XHUwMDI2IGFwZWlfY2xhaW1fc2VhKHJlZ3MpID09IDApIHtcbiA4NzQ6XHRcdFx0LypcbiA4NzU6XHRcdFx0ICogQVBFSSBjbGFpbWVkIHRoaXMgYXMgYSBmaXJtd2FyZS1maXJzdCBub3RpZmljYXRpb24uXG4gODc2Olx0XHRcdCAqIFNvbWUgcHJvY2Vzc2luZyBkZWZlcnJlZCB0byB0YXNrX3dvcmsgYmVmb3JlIHJldF90b191c2VyKCkuXG4gODc3Olx0XHRcdCAqL1xuIDg3ODpcdFx0XHRyZXR1cm4gMDtcbiA4Nzk6XHRcdH1cbiA4ODA6XHRcbiA4ODE6XHRcdGlmICghdXNlcl9tb2RlKHJlZ3MpIFx1MDAyNlx1MDAyNiBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSlcbiA4ODI6XHRcdFx0cmV0dXJuIDA7XG4gODgzOlx0XG4gODg0Olx0XHRpZiAoZXNyIFx1MDAyNiBFU1JfRUx4X0ZuVikge1xuIDg4NTpcdFx0XHRzaWFkZHIgPSAwO1xuIDg4NjpcdFx0fSBlbHNlIHtcbiA4ODc6XHRcdFx0LypcbiA4ODg6XHRcdFx0ICogVGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpZXMgdGhhdCB0aGUgdGFnIGJpdHMgb2YgRkFSX0VMMSBhcmVcbiA4ODk6XHRcdFx0ICogVU5LTk9XTiBmb3Igc3luY2hyb25vdXMgZXh0ZXJuYWwgYWJvcnRzLiBNYXNrIHRoZW0gb3V0IG5vd1xuIDg5MDpcdFx0XHQgKiBzbyB0aGF0IHVzZXJzcGFjZSBkb2VzbiYjMzk7dCBzZWUgdGhlbS5cbiA4OTE6XHRcdFx0ICovXG4gODkyOlx0XHRcdHNpYWRkciAgPSB1bnRhZ2dlZF9hZGRyKGZhcik7XG4gODkzOlx0XHR9XG4gODk0Olx0XHRhZGRfdGFpbnQoVEFJTlRfTUFDSElORV9DSEVDSywgTE9DS0RFUF9TVElMTF9PSyk7XG4gODk1Olx0XHRhcm02NF9ub3RpZnlfZGllKGluZi1cdTAwM2VuYW1lLCByZWdzLCBpbmYtXHUwMDNlc2lnLCBpbmYtXHUwMDNlY29kZSwgc2lhZGRyLCBlc3IpO1xuIDg5NjpcdFxuIDg5NzpcdFx0cmV0dXJuIDA7XG4gODk4Olx0fVxuIDg5OTpcdFxuIDkwMDpcdHN0YXRpYyBpbnQgZG9fdGFnX2NoZWNrX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcbiA5MDE6XHRcdFx0XHQgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiA5MDI6XHR7XG4gOTAzOlx0XHQvKlxuIDkwNDpcdFx0ICogVGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpZXMgdGhhdCBiaXRzIDYzOjYwIG9mIEZBUl9FTDEgYXJlIFVOS05PV05cbiA5MDU6XHRcdCAqIGZvciB0YWcgY2hlY2sgZmF1bHRzLiBTZXQgdGhlbSB0byBjb3JyZXNwb25kaW5nIGJpdHMgaW4gdGhlIHVudGFnZ2VkXG4gOTA2Olx0XHQgKiBhZGRyZXNzIGlmIEFSTTY0X01URV9GQVIgaXNuJiMzOTt0IHN1cHBvcnRlZC5cbiA5MDc6XHRcdCAqIE90aGVyd2lzZSwgYml0cyA2Mzo2MCBvZiBGQVJfRUwxIGFyZSBub3QgVU5LTk9XTi5cbiA5MDg6XHRcdCAqL1xuIDkwOTpcdFx0aWYgKCFjcHVzX2hhdmVfY2FwKEFSTTY0X01URV9GQVIpKVxuIDkxMDpcdFx0XHRmYXIgPSAoX191bnRhZ2dlZF9hZGRyKGZhcikgXHUwMDI2IH5NVEVfVEFHX01BU0spIHwgKGZhciBcdTAwMjYgTVRFX1RBR19NQVNLKTtcbiA5MTE6XHRcbiA5MTI6XHRcdGRvX2JhZF9hcmVhKGZhciwgZXNyLCByZWdzKTtcbiA5MTM6XHRcdHJldHVybiAwO1xuIDkxNDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ1MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGlzIFBhdGNoOiBBIFF1aWNrIERpdmUgaW50byBFeGNlcHRpb24gSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGdldCByaWdodCBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYGRvX3NlYWAsIHRoZSBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydCBoYW5kbGVyIG9uIGFybTY0LiBJJiMzOTttIHNlZWluZyBpdCBhZGRzIGEgY3J1Y2lhbCBjaGVjazoKCmBgYGMKCWlmICghdXNlcl9tb2RlKHJlZ3MpICZhbXA7JmFtcDsgZml4dXBfZXhjZXB0aW9uKHJlZ3MsIGVzcikpCgkJcmV0dXJuIDA7CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBgZml4dXBfZXhjZXB0aW9uYCBpcyBhY3R1YWxseSAqZG9pbmcqLiBCYXNlZCBvbiB0aGUgY29udGV4dCwgSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0IGl0JiMzOTtzIGhhbmRsaW5nIHNvbWUgc29ydCBvZiBleGNlcHRpb24gZml4LXVwIG1lY2hhbmlzbS4gV2hlcmUmIzM5O3MgaXQgZGVmaW5lZD8gSSYjMzk7bGwgcXVpY2tseSBsb29rIGl0IHVwLCBsaWtlbHkgaW4gYGFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jYCBvciBhIHJlbGF0ZWQgZmlsZS4gSSYjMzk7bSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gcmVzb2x2aW5nIG9yIG1hc2tpbmcgc29tZSBzb3J0IG9mIGV4Y2VwdGlvbiwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0JiMzOTtzIGludm9rZWQgYW5kIHdoYXQgaXQgcmV0dXJucy4gVGhpcyBjb3VsZCBpbnZvbHZlIGFuIGV4Y2VwdGlvbiB0YWJsZSBsb29rdXAsIHBlcmhhcHMgc29tZSByZWdpc3RlciBtYW5pcHVsYXRpb24sIGFuZCBhIHBvc3NpYmxlIHJldHVybiB0byBub3JtYWwgZXhlY3V0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciBpdHMgaGFuZGxpbmcgYWZmZWN0cyB1c2Vyc3BhY2Ugb3IgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zml4dXBfZXhjZXB0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lZmkuaD0xNj1leHRlcm4gdm9pZCBlZmlfaW5pdCh2b2lkKTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWZpLmgtMTctXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VmaS5oOjE4OmJvb2wgZWZpX3J1bnRpbWVfZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBjb25zdCBjaGFyICptc2cpO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lZmkuaC0xOS0jZWxzZVxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWZpLmg9MjI9c3RhdGljIGlubGluZVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lZmkuaDoyMzpib29sIGVmaV9ydW50aW1lX2ZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgY29uc3QgY2hhciAqbXNnKVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lZmkuaC0yNC17XG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9leHRhYmxlLmg9NDM9Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2V4dGFibGUuaC00OS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXh0YWJsZS5oOjUwOmJvb2wgZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVzcik7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2V4dGFibGUuaC01MS0jZW5kaWZcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9lZmkuYz0yMjA9YXNtbGlua2FnZSBlZmlfc3RhdHVzX3QgX19lZmlfcnRfYXNtX3JlY292ZXIodm9pZCk7XG5hcmNoL2FybTY0L2tlcm5lbC9lZmkuYy0yMjEtXG5hcmNoL2FybTY0L2tlcm5lbC9lZmkuYzoyMjI6Ym9vbCBlZmlfcnVudGltZV9maXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGNvbnN0IGNoYXIgKm1zZylcbmFyY2gvYXJtNjQva2VybmVsL2VmaS5jLTIyMy17XG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL2twcm9iZXMuYz0zMDE9aW50IF9fa3Byb2JlcyBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGZzcilcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMva3Byb2Jlcy5jLTMxMC1cdCAqIG11c3QgYmUgbGVmdCBhbG9uZSBmb3IgdGhlIG5vcm1hbCBwYWdlIGZhdWx0IGhhbmRsZXIsIGluY2x1ZGluZ1xuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL2twcm9iZXMuYzozMTE6XHQgKiBmaXh1cF9leGNlcHRpb24uXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMva3Byb2Jlcy5jLTMxMi1cdCAqL1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL3RyYXBzLmM9NDk1PXZvaWQgZG9fZWwxX2J0aShzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlc3IpXG5hcmNoL2FybTY0L2tlcm5lbC90cmFwcy5jLTQ5Ni17XG5hcmNoL2FybTY0L2tlcm5lbC90cmFwcy5jOjQ5NzpcdGlmIChlZmlfcnVudGltZV9maXh1cF9leGNlcHRpb24ocmVncywgXCYjMzQ7QlRJIHZpb2xhdGlvblwmIzM0OykpIHtcbmFyY2gvYXJtNjQva2VybmVsL3RyYXBzLmMtNDk4LVx0XHRyZWdzLVx1MDAzZXBzdGF0ZSBcdTAwMjY9IH5QU1JfQlRZUEVfTUFTSztcbi0tXG5hcmNoL2FybTY0L21tL2V4dGFibGUuYz02OT1leF9oYW5kbGVyX2xvYWRfdW5hbGlnbmVkX3plcm9wYWQoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsXG4tLVxuYXJjaC9hcm02NC9tbS9leHRhYmxlLmMtOTQtXG5hcmNoL2FybTY0L21tL2V4dGFibGUuYzo5NTpib29sIGZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlc3IpXG5hcmNoL2FybTY0L21tL2V4dGFibGUuYy05Ni17XG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jPTQwNT1zdGF0aWMgdm9pZCBfX2RvX2tlcm5lbF9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZXNyLFxuLS1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy00MTMtXHQgKi9cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo0MTQ6XHRpZiAoIWlzX2VsMV9pbnN0cnVjdGlvbl9hYm9ydChlc3IpIFx1MDAyNlx1MDAyNiBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSlcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy00MTUtXHRcdHJldHVybjtcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNDUwLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjQ1MTpcdGlmIChlZmlfcnVudGltZV9maXh1cF9leGNlcHRpb24ocmVncywgbXNnKSlcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy00NTItXHRcdHJldHVybjtcbi0tXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9ODY2PXN0YXRpYyBpbnQgZG9fc2VhKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTg4MC1cbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo4ODE6XHRpZiAoIXVzZXJfbW9kZShyZWdzKSBcdTAwMjZcdTAwMjYgZml4dXBfZXhjZXB0aW9uKHJlZ3MsIGVzcikpXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtODgyLVx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk0NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgZml4dXBfZXhjZXB0aW9uYCBpbiBgZXh0YWJsZS5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGZpeHVwX2V4Y2VwdGlvbmAgaXMgYWN0dWFsbHkgZG9pbmcgd2l0aGluIGBhcmNoL2FybTY0L21tL2V4dGFibGUuY2AuIEkmIzM5O20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgZXhjZXB0aW9uIHRhYmxlIG1lY2hhbmlzbXMgaW4gdGhlIGtlcm5lbCwgZXNwZWNpYWxseSBvbiBBUk02NCwgYnV0IEkgd2FudCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgKnRoaXMqIHNwZWNpZmljIGZ1bmN0aW9uLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIGV4Y2VwdGlvbnMgdGhhdCBhcmlzZSB3aXRoaW4gZXhjZXB0aW9uIHRhYmxlcyAtIGVzc2VudGlhbGx5LCB0aGUgZXhjZXB0aW9uIHRvIHRoZSBleGNlcHRpb24gaGFuZGxpbmcsIGlmIHlvdSB3aWxsLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgaG93IHRoZSBjb2RlIGRldGVybWluZXMgaWYgYW4gZXhjZXB0aW9uIGNhbiBiZSByZWNvdmVyZWQgZnJvbSwgYW5kIGlmIHNvLCBob3cgaXQganVtcHMgdG8gdGhlIGFwcHJvcHJpYXRlIGZpeHVwIGhhbmRsZXIuIEkmIzM5O20ga2VlbiB0byBzcG90IGFueSBlZGdlIGNhc2VzIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGludGVyYWN0aW9ucyB3aXRoIGNvbmN1cnJlbnQgcHJvY2Vzc2VzIGFuZCBpbnRlcnJ1cHRzLCBzaW5jZSB3ZSBhcmUgdGFsa2luZyBhYm91dCBleGNlcHRpb24gaGFuZGxpbmcgYXQgc3VjaCBhIGxvdyBsZXZlbC4gQXJlIHRoZXJlIGFueSB1bnVzdWFsIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgb3IgaW5zdHJ1Y3Rpb24gb3JkZXJpbmcgdGhhdCBhcmUgd29ydGggbm90aW5nPyBJIGhvcGUgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZnVuY3Rpb24mIzM5O3MgbG9naWMgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIGNvZGUsIHNvIEkgY2FuIGVuc3VyZSB0aGUgY29kZSB0aGF0IHVzZXMgdGhpcyBmdW5jdGlvbiBpcyBvcHRpbWl6ZWQgYW5kIGRvZXMgbm90IGNhdXNlIHVuZXhwZWN0ZWQgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbW0vZXh0YWJsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5MDpcdFxuICA5MTpcdFx0cmVncy1cdTAwM2VwYyA9IGdldF9leF9maXh1cChleCk7XG4gIDkyOlx0XHRyZXR1cm4gdHJ1ZTtcbiAgOTM6XHR9XG4gIDk0Olx0XG4gIDk1Olx0Ym9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXNyKVxuICA5NjpcdHtcbiAgOTc6XHRcdGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4O1xuICA5ODpcdFxuICA5OTpcdFx0ZXggPSBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpKTtcbiAxMDA6XHRcdGlmICghZXgpXG4gMTAxOlx0XHRcdHJldHVybiBmYWxzZTtcbiAxMDI6XHRcbiAxMDM6XHRcdHN3aXRjaCAoZXgtXHUwMDNldHlwZSkge1xuIDEwNDpcdFx0Y2FzZSBFWF9UWVBFX0JQRjpcbiAxMDU6XHRcdFx0cmV0dXJuIGV4X2hhbmRsZXJfYnBmKGV4LCByZWdzKTtcbiAxMDY6XHRcdGNhc2UgRVhfVFlQRV9VQUNDRVNTX0VSUl9aRVJPOlxuIDEwNzpcdFx0Y2FzZSBFWF9UWVBFX0tBQ0NFU1NfRVJSX1pFUk86XG4gMTA4Olx0XHRcdHJldHVybiBleF9oYW5kbGVyX3VhY2Nlc3NfZXJyX3plcm8oZXgsIHJlZ3MpO1xuIDEwOTpcdFx0Y2FzZSBFWF9UWVBFX1VBQ0NFU1NfQ1BZOlxuIDExMDpcdFx0XHRyZXR1cm4gZXhfaGFuZGxlcl91YWNjZXNzX2NweShleCwgcmVncywgZXNyKTtcbiAxMTE6XHRcdGNhc2UgRVhfVFlQRV9MT0FEX1VOQUxJR05FRF9aRVJPUEFEOlxuIDExMjpcdFx0XHRyZXR1cm4gZXhfaGFuZGxlcl9sb2FkX3VuYWxpZ25lZF96ZXJvcGFkKGV4LCByZWdzKTtcbiAxMTM6XHRcdH1cbiAxMTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY1OAoJCQkJCQkJb3V0cHV0OiAxNzkKCQkJCQkJCXRob3VnaHRzOiA4MzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXBwbGljYWJpbGl0eSBBc3Nlc3NtZW50IGZvciBTeW5jaHJvbm91cyBFeHRlcm5hbCBBYm9ydCBGaXgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIEtNU0FOIGlzIHJlbGV2YW50IGhlcmUuIEZpcnN0LCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaXMgYWJvdXQgaGFuZGxpbmcgU3luY2hyb25vdXMgRXh0ZXJuYWwgQWJvcnRzIChTRUFzKSBvbiBFTDEsIHNwZWNpZmljYWxseSBpbiBgYXJjaC9hcm02NC9tbS9mYXVsdC5jYC4gV2hlbiBhbiBTRUEgaGFwcGVucyAobGlrZSBkdXJpbmcga2VybmVsIG9yIHVhY2Nlc3MgbWVtb3J5IGFjY2VzcywgdGhpbmsgYGNvcHlfZnJvbV91c2VyYCBvciB0aGUgbGlrZSksIHRoZSBgZG9fc2VhYCBmdW5jdGlvbiBub3cgY2hlY2tzIGlmIHRoZSBmYXVsdCBvY2N1cnJlZCBpbiBrZXJuZWwgbW9kZS4gSWYgc28sIGl0IGNhbGxzIGBmaXh1cF9leGNlcHRpb25gIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbiBleGNlcHRpb24gaGFuZGxlciBhdmFpbGFibGUuIElmIGEgaGFuZGxlciBleGlzdHMgKHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGhhbmRsZXJzIGZvciB0aGluZ3MgbGlrZSB1YWNjZXNzLCBCUEYsIG9yIGBnZXRfdXNlcmAgc2NlbmFyaW9zKSwgYGZpeHVwX2V4Y2VwdGlvbmAgZG9lcyBpdHMgam9iOiBpdCBmaXhlcyB0aGUgcmVnaXN0ZXJzICh6ZXJvaW5nIHRoZSBkZXN0aW5hdGlvbiwgc2V0dGluZyBhbiBlcnJvciByZXR1cm4sIGFuZCBhZGp1c3RpbmcgdGhlIHByb2dyYW0gY291bnRlciB0byB0aGUgZml4dXAgYWRkcmVzcykuIFRoaXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ3JhY2VmdWxseSBoYW5kbGUgdGhlIGZhdWx0IChsaWtlIHJldHVybmluZyBgLUVGQVVMVGApIGluc3RlYWQgb2YgaW1tZWRpYXRlbHkgcGFuaWNraW5nIHZpYSBgYXJtNjRfbm90aWZ5X2RpZWAuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBLTVNBTiBjb25jZXJucyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeT8gTGV0JiMzOTtzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC4KCjEuICAqKktlcm5lbCBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlOioqIE5vcGUuIFRoaXMgcGF0Y2ggaXNuJiMzOTt0IG1vZGlmeWluZyBvciBpbnRyb2R1Y2luZyBhbnkgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHRoZW4gcGFzc2VkIHRvIHVzZXJzcGFjZSB2aWEgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIGBuZXRsaW5rYCwgYGlvY3RsYCwgb3IgYW55dGhpbmcgc2ltaWxhci4gTm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZmllbGRzLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBOb3BlLiBUaGUgdmFyaWFibGVzIGludm9sdmVkIGluIGBkb19zZWFgIChgcmVnc2AgYW5kIGBlc3JgKSBhcmUgcGFyYW1ldGVycyBwcm92aWRlZCBieSBsb3ctbGV2ZWwgZXhjZXB0aW9uIGVudHJ5LiBUaGV5IGFyZSBub3QgdW5pbml0aWFsaXplZC4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uczoqKiBOb3BlLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgaW52b2x2ZWQgaW4gdGhpcyBwYXRjaCBhdCBhbGwuCjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgbG9naWMgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBieXRlczoqKiBOb3BlLiBUaGlzIGlzbiYjMzk7dCBtYW5pcHVsYXRpbmcgYnVmZmVycyBvciBhbHRlcmluZyBob3cgYm91bmRzIGNoZWNrcyBhcmUgcGVyZm9ybWVkIGluIGEgd2F5IHRoYXQgd291bGQgaW50cm9kdWNlIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLgo1LiAgKipFeGNlcHRpb24gZml4dXA6KiogU3BlY2lmaWNhbGx5LCBzdGFuZGFyZCBmaXh1cCByb3V0aW5lcyB6ZXJvIG91dCB0aGUgcmVtYWluaW5nIGRlc3RpbmF0aW9uIGJ1ZmZlciBvciBzZXQgdGhlIGVycm9yIHJlZ2lzdGVyLiBLTVNBTiBhbHNvIGRvZXNuJiMzOTt0IHN1cHBvcnQgYXJtNjQgaW4gb2xkZXIga2VybmVscyBvciBydW5zIG9uIHg4Nl82NCwgYnV0IGV2ZW4gY29uY2VwdHVhbGx5LCBleGNlcHRpb24gdGFibGUgZml4dXAgZm9yIHN5bmNocm9ub3VzIGV4dGVybmFsIGFib3J0cyBpcyBhbiBhcmNoaXRlY3R1cmUgZXhjZXB0aW9uIGhhbmRsaW5nIC8gZmF1bHQgcmVjb3ZlcnkgbWVjaGFuaXNtLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3Mgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpTbywgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayBhZ2Fpbi4gV2hhdCB3YXMgdGhpcyAqYWN0dWFsbHkqIGZpeGluZz8gSXQmIzM5O3MgZml4aW5nIGEgc2l0dWF0aW9uIHdoZXJlIGFuIFNFQSBkdXJpbmcgRUwxIHVhY2Nlc3Mgb3IgbWVtb3J5IGFjY2VzcyB3YXMgY2F1c2luZyBhIGtlcm5lbCBwYW5pYywgd2hlbiBpbnN0ZWFkIGl0IHNob3VsZCBiZSB0YWtpbmcgdGhlIGV4Y2VwdGlvbiB0YWJsZSBmaXh1cCBwYXRoICh3aGljaCB3aWxsIHJldHVybiBgLUVGQVVMVGApLgoKS0FTQU4sIExPQ0tERVAsIG90aGVyIGRldGVjdG9ycyB2cy4gS01TQU46IFRoaXMgaXMgbG93LWxldmVsIEFSTTY0IGV4Y2VwdGlvbiBoYW5kbGluZyBsb2dpYy4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcywgbm8gbWVtb3J5IGFsbG9jYXRpb25zLCBubyBidWZmZXIgaGFuZGxpbmcsIG5vIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gS01TQU4gaXMganVzdCBub3QgYXBwbGljYWJsZSBoZXJlLiBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLgoKTXkgcmVhc29uaW5nLCBzdHJ1Y3R1cmVkIGNsZWFybHksIGlzIHRoaXM6CgoqICAgKipQYXRjaCBTdW1tYXJ5OioqIFRoZSBwYXRjaCB1cGRhdGVzIGBhcmNoL2FybTY0L21tL2ZhdWx0LmNgIHRvIGludm9rZSBgZml4dXBfZXhjZXB0aW9uKClgIGluIGBkb19zZWEoKWAgd2hlbiBhbiBFTDEgU0VBIG9jY3Vycy4gVGhpcyBlbmFibGVzIGtlcm5lbCBleGNlcHRpb24gZml4dXAgaGFuZGxlcnMgKHBhcnRpY3VsYXJseSBmb3IgdWFjY2VzcykgdG8gaGFuZGxlIHRoZSBmYXVsdCwgYXZvaWRpbmcgYSBrZXJuZWwgcGFuaWMuCiogICAqKktNU0FOIENvbnRyYXN0OioqIEtNU0FOIGlzIGZvciBkZXRlY3RpbmcgdXNlcyBhbmQgbGVha3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgcGF0Y2ggKmRvZXNuJiMzOTt0KiBpbnRyb2R1Y2UgbmV3IHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiwgb3IgY3JlYXRlIHBhdGhzIHRoYXQgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGNoYW5nZSBvbmx5IGFmZmVjdHMgZXhjZXB0aW9uIHJvdXRpbmcgZm9yIFNFQXMgb24gQVJNNjQuIFRoZXJlZm9yZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIHJpc2ssIG5vIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgbm8gbmVlZCBmb3IgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIG15IGFzc2Vzc21lbnQuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBkb19zZWEoKWAgaW4gYGFyY2gvYXJtNjQvbW0vZmF1bHQuY2AgdG8gYXR0ZW1wdCBleGNlcHRpb24gZml4dXAgdmlhIGBmaXh1cF9leGNlcHRpb24oKWAgd2hlbiBhIFN5bmNocm9ub3VzIEV4dGVybmFsIEFib3J0IChTRUEpIG9jY3VycyBpbiBrZXJuZWwgbW9kZSAoYCF1c2VyX21vZGUocmVncylgKSwgYWxsb3dpbmcgZ3JhY2VmdWwgcmVjb3ZlcnkgKGUuZy4sIHJldHVybmluZyAtRUZBVUxUIGZvciB1YWNjZXNzIGZhdWx0cykgaW5zdGVhZCBvZiBkeWluZy5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGxvdy1sZXZlbCBhcmNoaXRlY3R1cmUgZmF1bHQvZXhjZXB0aW9uIGhhbmRsaW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IG1vZGlmeSBkYXRhIHN0cnVjdHVyZSBmaWVsZHMgb3IgcGFkZGluZywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBpbml0aWFsaXphdGlvbiBsb2dpYywgYW5kIGRvZXMgbm90IGNvcHkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZS4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGRvX3NlYSgpYCBpbiBgYXJjaC9hcm02NC9tbS9mYXVsdC5jYCB0byBhdHRlbXB0IGV4Y2VwdGlvbiBmaXh1cCB2aWEgYGZpeHVwX2V4Y2VwdGlvbigpYCB3aGVuIGEgU3luY2hyb25vdXMgRXh0ZXJuYWwgQWJvcnQgKFNFQSkgb2NjdXJzIGluIGtlcm5lbCBtb2RlIChgIXVzZXJfbW9kZShyZWdzKWApLCBhbGxvd2luZyBncmFjZWZ1bCByZWNvdmVyeSAoZS5nLiwgcmV0dXJuaW5nIC1FRkFVTFQgZm9yIHVhY2Nlc3MgZmF1bHRzKSBpbnN0ZWFkIG9mIGR5aW5nLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgbG93LWxldmVsIGFyY2hpdGVjdHVyZSBmYXVsdC9leGNlcHRpb24gaGFuZGxpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgc3RydWN0dXJlIGZpZWxkcyBvciBwYWRkaW5nLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGluaXRpYWxpemF0aW9uIGxvZ2ljLCBhbmQgZG9lcyBub3QgY29weSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjI0OjA2LjY3NzQ3NjcwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjM2MTQwMTYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmaXh1cF9leGNlcHRpb25cIixcbiAgICBcImRvX3NlYVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGRvX3NlYSgpYCBpbiBgYXJjaC9hcm02NC9tbS9mYXVsdC5jYCB0byBhdHRlbXB0IGV4Y2VwdGlvbiBmaXh1cCB2aWEgYGZpeHVwX2V4Y2VwdGlvbigpYCB3aGVuIGEgU3luY2hyb25vdXMgRXh0ZXJuYWwgQWJvcnQgKFNFQSkgb2NjdXJzIGluIGtlcm5lbCBtb2RlIChgIXVzZXJfbW9kZShyZWdzKWApLCBhbGxvd2luZyBncmFjZWZ1bCByZWNvdmVyeSAoZS5nLiwgcmV0dXJuaW5nIC1FRkFVTFQgZm9yIHVhY2Nlc3MgZmF1bHRzKSBpbnN0ZWFkIG9mIGR5aW5nLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBsb3ctbGV2ZWwgYXJjaGl0ZWN0dXJlIGZhdWx0L2V4Y2VwdGlvbiBoYW5kbGluZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmUgZmllbGRzIG9yIHBhZGRpbmcsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMsIGFuZCBkb2VzIG5vdCBjb3B5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UuIENvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbGxvd3Mga2VybmVsLW1vZGUgc3luY2hyb25vdXMgZXh0ZXJuYWwgYWJvcnRzIChTRUEpIHRvIGJlIHJlY292ZXJlZCB1c2luZyBleGNlcHRpb24gZml4dXAgdGFibGVzIGluc3RlYWQgb2YgaW1tZWRpYXRlbHkgcGFuaWNraW5nLiBUaGlzIG1vZGlmaWVzIGNvcmUgQVJNNjQgZmF1bHQgaGFuZGxpbmcgbG9naWMgcmVhY2hhYmxlIGR1cmluZyBrZXJuZWwgbWVtb3J5IGFjY2Vzc2VzIHRoYXQgZmF1bHQgd2l0aCBTRUEuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjI0OjA2LjY3NzQ4ODUyMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5OTk3ODg1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZkYTc4ZWY3ZGMwZjg0N2Y3ZWZhNGE5NTIxMzJhMjk4NmUyM2U0MzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjcgMjM6MjQ6MDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9mYXVsdC5jIGIvYXJjaC9hcm02NC9tbS9mYXVsdC5jXFxuaW5kZXggMGI1MjU1NzY1MmJlNi4uY2EzOTZiNGJkZGEwMyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L21tL2ZhdWx0LmNcXG4rKysgYi9hcmNoL2FybTY0L21tL2ZhdWx0LmNcXG5AQCAtODc4LDYgKzg3OCw5IEBAIHN0YXRpYyBpbnQgZG9fc2VhKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoIXVzZXJfbW9kZShyZWdzKSBcXHUwMDI2XFx1MDAyNiBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHRpZiAoZXNyIFxcdTAwMjYgRVNSX0VMeF9GblYpIHtcXG4gXFx0XFx0c2lhZGRyID0gMDtcXG4gXFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6MjQ6MDguMTc4MTM0NDY4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo5NzEzODkwNTE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmaXh1cF9leGNlcHRpb25cIixcbiAgICBcImRvX3NlYVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsbG93cyBrZXJuZWwtbW9kZSBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydHMgKFNFQSkgdG8gYmUgcmVjb3ZlcmVkIHVzaW5nIGV4Y2VwdGlvbiBmaXh1cCB0YWJsZXMgaW5zdGVhZCBvZiBpbW1lZGlhdGVseSBwYW5pY2tpbmcuIFRoaXMgbW9kaWZpZXMgY29yZSBBUk02NCBmYXVsdCBoYW5kbGluZyBsb2dpYyByZWFjaGFibGUgZHVyaW5nIGtlcm5lbCBtZW1vcnkgYWNjZXNzZXMgdGhhdCBmYXVsdCB3aXRoIFNFQS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmRhNzhlZjdkYzBmODQ3ZjdlZmE0YTk1MjEzMmEyOTg2ZTIzZTQzMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDIzOjI0OjA0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9mYXVsdC5jIGIvYXJjaC9hcm02NC9tbS9mYXVsdC5jXG5pbmRleCAwYjUyNTU3NjUyYmU2Li5jYTM5NmI0YmRkYTAzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9tbS9mYXVsdC5jXG4rKysgYi9hcmNoL2FybTY0L21tL2ZhdWx0LmNcbkBAIC04NzgsNiArODc4LDkgQEAgc3RhdGljIGludCBkb19zZWEodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4rXHRpZiAoIXVzZXJfbW9kZShyZWdzKSBcdTAwMjZcdTAwMjYgZml4dXBfZXhjZXB0aW9uKHJlZ3MsIGVzcikpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0aWYgKGVzciBcdTAwMjYgRVNSX0VMeF9GblYpIHtcbiBcdFx0c2lhZGRyID0gMDtcbiBcdH0gZWxzZSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzoyNDowOC4xNzgxMzU4NzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDE3ODIwODU3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZhdWx0IEhhbmRsaW5nIENvZGUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGRpZmYgc2hvd3MgYSBjaGFuZ2UgaW4gYGFyY2gvYXJtNjQvbW0vZmF1bHQuY2AuIFNwZWNpZmljYWxseSwgdGhlcmUncyBhIG5ldyBgaWZgIHN0YXRlbWVudCBpbnRyb2R1Y2VkIGluIHRoZSBgZG9fc2VhYCBmdW5jdGlvbi4gSSByZWNvZ25pemUgdGhhdCBmdW5jdGlvbiBhcyByZWxhdGVkIHRvIFN5c3RlbSBFcnJvciBBYm9ydCAoU0VBKSBoYW5kbGluZyBvbiBBUk02NCwgZGVhbGluZyB3aXRoIGFzeW5jaHJvbm91cyBhYm9ydHMuIFRoZSBhZGRlZCBjb25kaXRpb24gY2hlY2tzIGlmIHRoZSBleGNlcHRpb24gaXMgKm5vdCogaW4gdXNlciBtb2RlLCBhbmQgdGhlbiBjYWxscyBgZml4dXBfZXhjZXB0aW9uYCB3aXRoIHRoZSByZWdpc3RlciBzdGF0ZSBhbmQgRVNSLiBJZiBgZml4dXBfZXhjZXB0aW9uYCByZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUsIHRoZW4gdGhlIGNvZGUgcmV0dXJucy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBgZml4dXBfZXhjZXB0aW9uYCBkb2VzLiBJdCBzZWVtcyBsaWtlIHRoZSBuZXcgY29kZSBpcyBhdHRlbXB0aW5nIHRvIGhhbmRsZSBrZXJuZWwgZXhjZXB0aW9ucy4gSSBzaG91bGQgYmUgYWJsZSB0byBkZWR1Y2UgdGhlIGdlbmVyYWwgaWRlYSwgYnV0IHNpbmNlIHRoaXMgZGVhbHMgd2l0aCBrZXJuZWwtbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGVycm9yIGhhbmRsaW5nLCBJIG5lZWQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuIEknbGwgbG9hZCB0aGUgYGFyY2gvYXJtNjQvbW0vZmF1bHQuY2AgZmlsZSBmcm9tIHRoZSBzb3VyY2UgYW5kIGJyb3dzZSB0aGUgc3Vycm91bmRpbmcgY29kZSwgZXNwZWNpYWxseSBsb29raW5nIGF0IHRoZSBkZWZpbml0aW9ucyBvZiBgdXNlcl9tb2RlYCBhbmQgYGZpeHVwX2V4Y2VwdGlvbmAsIGFuZCBhbHNvIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZmF1bHQgaGFuZGxpbmcgbG9naWMuIFRoaXMgYWRkaXRpb24gZGVmaW5pdGVseSBzdWdnZXN0cyBhIG5lZWQgdG8gcG90ZW50aWFsbHkgaGFuZGxlIG9yIGNvcnJlY3Qgc3BlY2lmaWMga2VybmVsIGV4Y2VwdGlvbnMgYmVmb3JlIHJlc29ydGluZyB0byBhIG1vcmUgZHJhc3RpYyBlcnJvciBoYW5kbGluZyBwcm9jZWR1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgZXJyb3JzIGl0J3MgdHJ5aW5nIHRvIG1pdGlnYXRlLCBhbmQgd2h5IGl0IHdhc24ndCB0aGVyZSBiZWZvcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzoyNDoxOC4zNTYzNTEzMjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTUxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9hcm02NC9tbS9mYXVsdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg1MDpcXHRcXG4gODUxOlxcdHN0YXRpYyBpbnQgZG9fYWxpZ25tZW50X2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcXG4gODUyOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiA4NTM6XFx0e1xcbiA4NTQ6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NPTVBBVF9BTElHTk1FTlRfRklYVVBTKSBcXHUwMDI2XFx1MDAyNlxcbiA4NTU6XFx0XFx0ICAgIGNvbXBhdF91c2VyX21vZGUocmVncykpXFxuIDg1NjpcXHRcXHRcXHRyZXR1cm4gZG9fY29tcGF0X2FsaWdubWVudF9maXh1cChmYXIsIHJlZ3MpO1xcbiA4NTc6XFx0XFx0ZG9fYmFkX2FyZWEoZmFyLCBlc3IsIHJlZ3MpO1xcbiA4NTg6XFx0XFx0cmV0dXJuIDA7XFxuIDg1OTpcXHR9XFxuIDg2MDpcXHRcXG4gODYxOlxcdHN0YXRpYyBpbnQgZG9fYmFkKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIDg2MjpcXHR7XFxuIDg2MzpcXHRcXHRyZXR1cm4gMTsgLyogXFxcImZhdWx0XFxcIiAqL1xcbiA4NjQ6XFx0fVxcbiA4NjU6XFx0XFxuIDg2NjpcXHRzdGF0aWMgaW50IGRvX3NlYSh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiA4Njc6XFx0e1xcbiA4Njg6XFx0XFx0Y29uc3Qgc3RydWN0IGZhdWx0X2luZm8gKmluZjtcXG4gODY5OlxcdFxcdHVuc2lnbmVkIGxvbmcgc2lhZGRyO1xcbiA4NzA6XFx0XFxuIDg3MTpcXHRcXHRpbmYgPSBlc3JfdG9fZmF1bHRfaW5mbyhlc3IpO1xcbiA4NzI6XFx0XFxuIDg3MzpcXHRcXHRpZiAodXNlcl9tb2RlKHJlZ3MpIFxcdTAwMjZcXHUwMDI2IGFwZWlfY2xhaW1fc2VhKHJlZ3MpID09IDApIHtcXG4gODc0OlxcdFxcdFxcdC8qXFxuIDg3NTpcXHRcXHRcXHQgKiBBUEVJIGNsYWltZWQgdGhpcyBhcyBhIGZpcm13YXJlLWZpcnN0IG5vdGlmaWNhdGlvbi5cXG4gODc2OlxcdFxcdFxcdCAqIFNvbWUgcHJvY2Vzc2luZyBkZWZlcnJlZCB0byB0YXNrX3dvcmsgYmVmb3JlIHJldF90b191c2VyKCkuXFxuIDg3NzpcXHRcXHRcXHQgKi9cXG4gODc4OlxcdFxcdFxcdHJldHVybiAwO1xcbiA4Nzk6XFx0XFx0fVxcbiA4ODA6XFx0XFxuIDg4MTpcXHRcXHRpZiAoIXVzZXJfbW9kZShyZWdzKSBcXHUwMDI2XFx1MDAyNiBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSlcXG4gODgyOlxcdFxcdFxcdHJldHVybiAwO1xcbiA4ODM6XFx0XFxuIDg4NDpcXHRcXHRpZiAoZXNyIFxcdTAwMjYgRVNSX0VMeF9GblYpIHtcXG4gODg1OlxcdFxcdFxcdHNpYWRkciA9IDA7XFxuIDg4NjpcXHRcXHR9IGVsc2Uge1xcbiA4ODc6XFx0XFx0XFx0LypcXG4gODg4OlxcdFxcdFxcdCAqIFRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWVzIHRoYXQgdGhlIHRhZyBiaXRzIG9mIEZBUl9FTDEgYXJlXFxuIDg4OTpcXHRcXHRcXHQgKiBVTktOT1dOIGZvciBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydHMuIE1hc2sgdGhlbSBvdXQgbm93XFxuIDg5MDpcXHRcXHRcXHQgKiBzbyB0aGF0IHVzZXJzcGFjZSBkb2Vzbid0IHNlZSB0aGVtLlxcbiA4OTE6XFx0XFx0XFx0ICovXFxuIDg5MjpcXHRcXHRcXHRzaWFkZHIgID0gdW50YWdnZWRfYWRkcihmYXIpO1xcbiA4OTM6XFx0XFx0fVxcbiA4OTQ6XFx0XFx0YWRkX3RhaW50KFRBSU5UX01BQ0hJTkVfQ0hFQ0ssIExPQ0tERVBfU1RJTExfT0spO1xcbiA4OTU6XFx0XFx0YXJtNjRfbm90aWZ5X2RpZShpbmYtXFx1MDAzZW5hbWUsIHJlZ3MsIGluZi1cXHUwMDNlc2lnLCBpbmYtXFx1MDAzZWNvZGUsIHNpYWRkciwgZXNyKTtcXG4gODk2OlxcdFxcbiA4OTc6XFx0XFx0cmV0dXJuIDA7XFxuIDg5ODpcXHR9XFxuIDg5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6MjQ6MTguMzU2NDY4MjM4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTUxNjkxMTE5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgQ29kZSBDaGFuZ2UqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UgYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpcyB0aGUgY29udGV4dC4gSSBzZWUgYGZpeHVwX2V4Y2VwdGlvbmAgYW5kIGBkb19zZWFgIG1lbnRpb25lZC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlaXIgcm9sZS4gQXJlIHdlIGZpeGluZyBhbiBleGNlcHRpb24gaGFuZGxpbmcgaXNzdWU/IElzIHRoaXMgcmVsYXRlZCB0byBzb21lIFNlYSBvYmplY3QgaW50ZXJhY3Rpb25zPyBXaGF0J3MgdGhlICp3aHkqIGJlaGluZCB0aGlzIGFsdGVyYXRpb24/XG5cbk15IGJyYWluJ3MgYWxyZWFkeSBmaXJpbmcgdXAgdGhlIHNlYXJjaCB0b29scy4gSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCwgaG93IHRoZXkncmUgdXNlZCwgYW5kIHdoYXQncyBjaGFuZ2VkIGluIHRoZWlyIGJlaGF2aW9yLiBBIHF1aWNrIGBncmVwYCBmb3IgYm90aCBmdW5jdGlvbiBuYW1lcyBhY3Jvc3MgdGhlIGNvZGViYXNlIGlzIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAuIFRoYXQgc2hvdWxkIHByb3ZpZGUgdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBIb3BlZnVsbHksIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgdGVsbCB0aGUgc3RvcnkuIExldCdzIHNlZSB3aGF0IHRoZSBncmVwIHJlc3VsdHMgdW5jb3Zlci4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDMyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzoyNDoyNy44NzMzODE4MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODMyMjk2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19zZWFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2tlcm5lbC9hY3BpLmM9Mjk1PXZvaWQgX19pb21lbSAqYWNwaV9vc19pb3JlbWFwKGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBwaHlzLCBhY3BpX3NpemUgc2l6ZSlcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2FjcGkuYy0zODUtICpcXG5hcmNoL2FybTY0L2tlcm5lbC9hY3BpLmM6Mzg2OiAqIFVzZWQgYnkgS1ZNIGFuZCB0aGUgYXJjaCBkb19zZWEgaGFuZGxlci5cXG5hcmNoL2FybTY0L2tlcm5lbC9hY3BpLmMtMzg3LSAqIEByZWdzIG1heSBiZSBOVUxMIHdoZW4gY2FsbGVkIGZyb20gcHJvY2VzcyBjb250ZXh0Llxcbi0tXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jPTg2MT1zdGF0aWMgaW50IGRvX2JhZCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTg2NS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6ODY2OnN0YXRpYyBpbnQgZG9fc2VhKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTg2Ny17XFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9OTE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmF1bHRfaW5mbyBmYXVsdF9pbmZvW10gPSB7XFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtOTMyLVxcdHsgZG9fcGFnZV9mYXVsdCxcXHRTSUdTRUdWLCBTRUdWX0FDQ0VSUixcXHRcXFwibGV2ZWwgMyBwZXJtaXNzaW9uIGZhdWx0XFxcIlxcdH0sXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjkzMzpcXHR7IGRvX3NlYSxcXHRcXHRTSUdCVVMsICBCVVNfT0JKRVJSLFxcdFxcXCJzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydFxcXCJcXHR9LFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05MzQtXFx0eyBkb190YWdfY2hlY2tfZmF1bHQsXFx0U0lHU0VHViwgU0VHVl9NVEVTRVJSLFxcdFxcXCJzeW5jaHJvbm91cyB0YWcgY2hlY2sgZmF1bHRcXFwiXFx0fSxcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtOTM1LVxcdHsgZG9fYmFkLFxcdFxcdFNJR0tJTEwsIFNJX0tFUk5FTCxcXHRcXFwidW5rbm93biAxOFxcXCJcXHRcXHRcXHR9LFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5MzY6XFx0eyBkb19zZWEsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJsZXZlbCAtMSAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcXFwiXFx0fSxcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTM3OlxcdHsgZG9fc2VhLFxcdFxcdFNJR0tJTEwsIFNJX0tFUk5FTCxcXHRcXFwibGV2ZWwgMCAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcXFwiXFx0fSxcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTM4OlxcdHsgZG9fc2VhLFxcdFxcdFNJR0tJTEwsIFNJX0tFUk5FTCxcXHRcXFwibGV2ZWwgMSAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcXFwiXFx0fSxcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTM5OlxcdHsgZG9fc2VhLFxcdFxcdFNJR0tJTEwsIFNJX0tFUk5FTCxcXHRcXFwibGV2ZWwgMiAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcXFwiXFx0fSxcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTQwOlxcdHsgZG9fc2VhLFxcdFxcdFNJR0tJTEwsIFNJX0tFUk5FTCxcXHRcXFwibGV2ZWwgMyAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcXFwiXFx0fSxcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTQxOlxcdHsgZG9fc2VhLFxcdFxcdFNJR0JVUywgIEJVU19PQkpFUlIsXFx0XFxcInN5bmNocm9ub3VzIHBhcml0eSBvciBFQ0MgZXJyb3JcXFwiIH0sXFx0Ly8gUmVzZXJ2ZWQgd2hlbiBSQVMgaXMgaW1wbGVtZW50ZWRcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtOTQyLVxcdHsgZG9fYmFkLFxcdFxcdFNJR0tJTEwsIFNJX0tFUk5FTCxcXHRcXFwidW5rbm93biAyNVxcXCJcXHRcXHRcXHR9LFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05NDMtXFx0eyBkb19iYWQsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJ1bmtub3duIDI2XFxcIlxcdFxcdFxcdH0sXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjk0NDpcXHR7IGRvX3NlYSxcXHRcXHRTSUdLSUxMLCBTSV9LRVJORUwsXFx0XFxcImxldmVsIC0xIHN5bmNocm9ub3VzIHBhcml0eSBlcnJvciAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcXFwiXFx0fSxcXHQvLyBSZXNlcnZlZCB3aGVuIFJBUyBpcyBpbXBsZW1lbnRlZFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5NDU6XFx0eyBkb19zZWEsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJsZXZlbCAwIHN5bmNocm9ub3VzIHBhcml0eSBlcnJvciAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcXFwiXFx0fSxcXHQvLyBSZXNlcnZlZCB3aGVuIFJBUyBpcyBpbXBsZW1lbnRlZFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5NDY6XFx0eyBkb19zZWEsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJsZXZlbCAxIHN5bmNocm9ub3VzIHBhcml0eSBlcnJvciAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcXFwiXFx0fSxcXHQvLyBSZXNlcnZlZCB3aGVuIFJBUyBpcyBpbXBsZW1lbnRlZFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5NDc6XFx0eyBkb19zZWEsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJsZXZlbCAyIHN5bmNocm9ub3VzIHBhcml0eSBlcnJvciAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcXFwiXFx0fSxcXHQvLyBSZXNlcnZlZCB3aGVuIFJBUyBpcyBpbXBsZW1lbnRlZFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5NDg6XFx0eyBkb19zZWEsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJsZXZlbCAzIHN5bmNocm9ub3VzIHBhcml0eSBlcnJvciAodHJhbnNsYXRpb24gdGFibGUgd2FsaylcXFwiXFx0fSxcXHQvLyBSZXNlcnZlZCB3aGVuIFJBUyBpcyBpbXBsZW1lbnRlZFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05NDktXFx0eyBkb19iYWQsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJ1bmtub3duIDMyXFxcIlxcdFxcdFxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjI0OjI3Ljk2MTcxMTY1OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc1MzU2Nzk5MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgZml4dXBfZXhjZXB0aW9uYCBpbiB0aGUgQVJNNjQgRXhjZXB0aW9uIEhhbmRsaW5nIFBhdGgqKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGludG8gdGhpcy4gVGhlIGNvbnRleHQgY2xlYXJseSBzdWdnZXN0cyBhIHBvdGVudGlhbCBleGNlcHRpb24gaGFuZGxpbmcgc2NlbmFyaW8gd2l0aGluIHRoZSBBUk02NCBhcmNoaXRlY3R1cmUsIGFuZCB0aGUgbWVudGlvbiBvZiBgZml4dXBfZXhjZXB0aW9uYCBpbW1lZGlhdGVseSBkaXJlY3RzIG15IGF0dGVudGlvbiB0b3dhcmRzIHRoZSBsaWtlbHkgZXhjZXB0aW9uIHRhYmxlIG1lY2hhbmlzbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBkZWZpbmVkIGFuZCB1c2VkLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIGBmaXh1cF9leGNlcHRpb25gLiBTcGVjaWZpY2FsbHksIEknbGwgc3RhcnQgaW4gdGhlIGBhcmNoL2FybTY0L21tL2V4dGFibGUuY2AgZmlsZSBzaW5jZSB0aGUgZXh0ZW5zaW9uIHRhYmxlIGlzIGxpa2VseSB3aGVyZSB0aGUgZml4dXAgaXMgaW1wbGVtZW50ZWQuIElmIGl0J3Mgbm90IHRoZXJlLCBJJ2xsIG5lZWQgdG8gd2lkZW4gdGhlIHNlYXJjaC4gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiBoYXMgYSB2ZXJ5IHNwZWNpZmljIHB1cnBvc2UgcmVsYXRlZCB0byB0aGUgY29udHJvbCBmbG93IG9yIGRhdGEgdGhhdCBpcyBleHBlY3RlZCB0byBmaXggYW4gZXhjZXB0aW9uIHRoYXQgb2NjdXJyZWQgaW4gYSBzcGVjaWZpYyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGV4Y2VwdGlvbiBoYW5kbGluZyBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgb24gQVJNNjQuIFRoZSBnb2FsIGlzIHRvIGVpdGhlciBjb25maXJtIG15IHN1c3BpY2lvbiBvciBxdWlja2x5IGlkZW50aWZ5IHRoZSBjb3JyZWN0IGZ1bmN0aW9uIGRlZmluaXRpb24gYW5kIHVuZGVyc3RhbmQgaXRzIG92ZXJhbGwgcm9sZSBpbiBleGNlcHRpb24gcHJvY2Vzc2luZy4gRnJvbSB0aGVyZSwgSSdsbCBkaXNzZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpdHMgc3BlY2lmaWMgZnVuY3Rpb24gYW5kIGl0cyByZWxhdGlvbnNoaXBzIHRvIG90aGVyIGV4Y2VwdGlvbiBoYW5kbGluZyBmdW5jdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MTksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzoyNDozNS40OTczOTU3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA3NDM2NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZml4dXBfZXhjZXB0aW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lZmkuaD0xNj1leHRlcm4gdm9pZCBlZmlfaW5pdCh2b2lkKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VmaS5oLTE3LVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWZpLmg6MTg6Ym9vbCBlZmlfcnVudGltZV9maXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGNvbnN0IGNoYXIgKm1zZyk7XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lZmkuaC0xOS0jZWxzZVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lZmkuaD0yMj1zdGF0aWMgaW5saW5lXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lZmkuaDoyMzpib29sIGVmaV9ydW50aW1lX2ZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgY29uc3QgY2hhciAqbXNnKVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWZpLmgtMjQte1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9leHRhYmxlLmg9NDM9Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXh0YWJsZS5oLTQ5LVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXh0YWJsZS5oOjUwOmJvb2wgZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVzcik7XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9leHRhYmxlLmgtNTEtI2VuZGlmXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9lZmkuYz0yMjA9YXNtbGlua2FnZSBlZmlfc3RhdHVzX3QgX19lZmlfcnRfYXNtX3JlY292ZXIodm9pZCk7XFxuYXJjaC9hcm02NC9rZXJuZWwvZWZpLmMtMjIxLVxcbmFyY2gvYXJtNjQva2VybmVsL2VmaS5jOjIyMjpib29sIGVmaV9ydW50aW1lX2ZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgY29uc3QgY2hhciAqbXNnKVxcbmFyY2gvYXJtNjQva2VybmVsL2VmaS5jLTIyMy17XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMva3Byb2Jlcy5jPTMwMT1pbnQgX19rcHJvYmVzIGtwcm9iZV9mYXVsdF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgZnNyKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL2twcm9iZXMuYy0zMTAtXFx0ICogbXVzdCBiZSBsZWZ0IGFsb25lIGZvciB0aGUgbm9ybWFsIHBhZ2UgZmF1bHQgaGFuZGxlciwgaW5jbHVkaW5nXFxuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL2twcm9iZXMuYzozMTE6XFx0ICogZml4dXBfZXhjZXB0aW9uLlxcbmFyY2gvYXJtNjQva2VybmVsL3Byb2Jlcy9rcHJvYmVzLmMtMzEyLVxcdCAqL1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvdHJhcHMuYz00OTU9dm9pZCBkb19lbDFfYnRpKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVzcilcXG5hcmNoL2FybTY0L2tlcm5lbC90cmFwcy5jLTQ5Ni17XFxuYXJjaC9hcm02NC9rZXJuZWwvdHJhcHMuYzo0OTc6XFx0aWYgKGVmaV9ydW50aW1lX2ZpeHVwX2V4Y2VwdGlvbihyZWdzLCBcXFwiQlRJIHZpb2xhdGlvblxcXCIpKSB7XFxuYXJjaC9hcm02NC9rZXJuZWwvdHJhcHMuYy00OTgtXFx0XFx0cmVncy1cXHUwMDNlcHN0YXRlIFxcdTAwMjY9IH5QU1JfQlRZUEVfTUFTSztcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jPTY5PWV4X2hhbmRsZXJfbG9hZF91bmFsaWduZWRfemVyb3BhZChjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jLTk0LVxcbmFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jOjk1OmJvb2wgZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVzcilcXG5hcmNoL2FybTY0L21tL2V4dGFibGUuYy05Ni17XFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9NDA1PXN0YXRpYyB2b2lkIF9fZG9fa2VybmVsX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlc3IsXFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNDEzLVxcdCAqL1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo0MTQ6XFx0aWYgKCFpc19lbDFfaW5zdHJ1Y3Rpb25fYWJvcnQoZXNyKSBcXHUwMDI2XFx1MDAyNiBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSlcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNDE1LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy00NTAtXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjQ1MTpcXHRpZiAoZWZpX3J1bnRpbWVfZml4dXBfZXhjZXB0aW9uKHJlZ3MsIG1zZykpXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTQ1Mi1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9ODY2PXN0YXRpYyBpbnQgZG9fc2VhKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtODgwLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo4ODE6XFx0aWYgKCF1c2VyX21vZGUocmVncykgXFx1MDAyNlxcdTAwMjYgZml4dXBfZXhjZXB0aW9uKHJlZ3MsIGVzcikpXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTg4Mi1cXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6MjQ6MzUuNjc4MTQ4NTg3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQzOTc3NDA4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBDb21taXQncyBQdXJwb3NlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb21taXQgYmV0dGVyLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIEdpdCBoaXN0b3J5LiBMZXQgbWUgc3RhcnQgd2l0aCBzb21ldGhpbmcgbGlrZSBgZ2l0IGxvZyAtMWAg4oCTIHRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCBpbmZvcm1hdGlvbiwgcmlnaHQ/IE9yIG1heWJlIEknbGwgZ28gZm9yIHRoZSBmdWxsIGhpc3RvcnksIGxvb2tpbmcgYXQgc2ltaWxhciBjb21taXRzIHRvIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aGF0KiB0aGlzIGNvbW1pdCBjaGFuZ2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouIENvbnRleHQgaXMgZXZlcnl0aGluZy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgc3Vycm91bmRpbmcgY2lyY3Vtc3RhbmNlcy5cblxuQWZ0ZXIgcmV2aWV3aW5nIHRoZSBjb21taXQgbG9nLCBsaW5lIDk1IGluIGBhcmNoL2FybTY0L21tL2V4dGFibGUuY2AgaXMgY2FsbGluZyB0byBtZS4gVGhhdCdzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMsIG9yIGF0IGxlYXN0IGEgcG9pbnQgb2YgaW50ZXJlc3QgdG8gZnVydGhlciBkZWx2ZSBpbnRvLiBTbywgbGV0J3MgZ28gcmVhZCB0aGF0IGxpbmUsIGFuZCBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZSBjb2RlIGlzIGRvaW5nIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjY2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6MjQ6MzkuMTE3OTI0NjIzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdFxcbiAgODE6XFx0XFx0ZGF0YSA9ICoodW5zaWduZWQgbG9uZyopYWRkcjtcXG4gIDgyOlxcdFxcbiAgODM6XFx0I2lmbmRlZiBfX0FBUkNINjRFQl9fXFxuICA4NDpcXHRcXHRkYXRhIFxcdTAwM2VcXHUwMDNlPSA4ICogb2Zmc2V0O1xcbiAgODU6XFx0I2Vsc2VcXG4gIDg2OlxcdFxcdGRhdGEgXFx1MDAzY1xcdTAwM2M9IDggKiBvZmZzZXQ7XFxuICA4NzpcXHQjZW5kaWZcXG4gIDg4OlxcdFxcbiAgODk6XFx0XFx0cHRfcmVnc193cml0ZV9yZWcocmVncywgcmVnX2RhdGEsIGRhdGEpO1xcbiAgOTA6XFx0XFxuICA5MTpcXHRcXHRyZWdzLVxcdTAwM2VwYyA9IGdldF9leF9maXh1cChleCk7XFxuICA5MjpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gIDkzOlxcdH1cXG4gIDk0OlxcdFxcbiAgOTU6XFx0Ym9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXNyKVxcbiAgOTY6XFx0e1xcbiAgOTc6XFx0XFx0Y29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXg7XFxuICA5ODpcXHRcXG4gIDk5OlxcdFxcdGV4ID0gc2VhcmNoX2V4Y2VwdGlvbl90YWJsZXMoaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSk7XFxuIDEwMDpcXHRcXHRpZiAoIWV4KVxcbiAxMDE6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxMDI6XFx0XFxuIDEwMzpcXHRcXHRzd2l0Y2ggKGV4LVxcdTAwM2V0eXBlKSB7XFxuIDEwNDpcXHRcXHRjYXNlIEVYX1RZUEVfQlBGOlxcbiAxMDU6XFx0XFx0XFx0cmV0dXJuIGV4X2hhbmRsZXJfYnBmKGV4LCByZWdzKTtcXG4gMTA2OlxcdFxcdGNhc2UgRVhfVFlQRV9VQUNDRVNTX0VSUl9aRVJPOlxcbiAxMDc6XFx0XFx0Y2FzZSBFWF9UWVBFX0tBQ0NFU1NfRVJSX1pFUk86XFxuIDEwODpcXHRcXHRcXHRyZXR1cm4gZXhfaGFuZGxlcl91YWNjZXNzX2Vycl96ZXJvKGV4LCByZWdzKTtcXG4gMTA5OlxcdFxcdGNhc2UgRVhfVFlQRV9VQUNDRVNTX0NQWTpcXG4gMTEwOlxcdFxcdFxcdHJldHVybiBleF9oYW5kbGVyX3VhY2Nlc3NfY3B5KGV4LCByZWdzLCBlc3IpO1xcbiAxMTE6XFx0XFx0Y2FzZSBFWF9UWVBFX0xPQURfVU5BTElHTkVEX1pFUk9QQUQ6XFxuIDExMjpcXHRcXHRcXHRyZXR1cm4gZXhfaGFuZGxlcl9sb2FkX3VuYWxpZ25lZF96ZXJvcGFkKGV4LCByZWdzKTtcXG4gMTEzOlxcdFxcdH1cXG4gMTE0OlxcdFxcbiAxMTU6XFx0XFx0QlVHKCk7XFxuIDExNjpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjI0OjM5LjExNzk4NDg5M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzU0NjE1ODEyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN5bmNocm9ub3VzIEV4dGVybmFsIEFib3J0IEhhbmRsaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBmdXp6LXdvcnRoeSBhbmQgaG93IGl0IGZpdHMgaW50byBTeXprYWxsZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgYGRvX3NlYWAgaW4gdGhlIGtlcm5lbCBoYW5kbGVzLCB3aGljaCBpcyBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydHMuIFNwZWNpZmljYWxseSwgSSBzZWUgaXQncyBkZWFsaW5nIHdpdGggY2FzZXMgbGlrZSBkYXRhIGFib3J0cywgaW5zdHJ1Y3Rpb24gYWJvcnRzIGxlYWRpbmcgdG8gU0VBcywgdHJhbnNsYXRpb24gdGFibGUgd2FsayBhYm9ydHMsIGFuZCwgY3J1Y2lhbGx5LCBrZXJuZWwgbWVtb3J5IGFjY2Vzc2VzICh0aGluayBgY29weV9mcm9tX3VzZXJgLCBgdWFjY2Vzc2AsIG9yIGBrYWNjZXNzYCkuIFByZXZpb3VzbHksIGl0IGxvb2tzIGxpa2UgaWYgdGhlcmUgd2FzIGFuIFNFQSBkdXJpbmcga2VybmVsIGV4ZWN1dGlvbiwgYGRvX3NlYWAgd291bGQganVzdCBwYW5pYyB0aHJvdWdoIGBhcm02NF9ub3RpZnlfZGllYCBhbmQgYGRpZSgpYC5cblxuTm93LCB0aGlzIHBhdGNoIGFkZHMgYSBjaGVjayB3aXRoaW4gYGRvX3NlYWAgZm9yIGV4Y2VwdGlvbiBmaXh1cHM6XG5cbmBgYGNcblx0aWYgKCF1c2VyX21vZGUocmVncykgXHUwMDI2XHUwMDI2IGZpeHVwX2V4Y2VwdGlvbihyZWdzLCBlc3IpKVxuXHRcdHJldHVybiAwO1xuYGBgXG5cblRoaXMgaXMgaW1wb3J0YW50ISBOb3csIGlmIGFuIFNFQSAqZHVyaW5nIGtlcm5lbCBleGVjdXRpb24qIGhpdHMgYW4gZXhjZXB0aW9uLXRhYmxlIHByb3RlY3RlZCBsb2FkL3N0b3JlLCBgZml4dXBfZXhjZXB0aW9uKClgIGlzIGNhbGxlZC4gSWYgdGhlcmUncyBhbiBleGNlcHRpb24gdGFibGUgZW50cnksIGBmaXh1cF9leGNlcHRpb24oKWAgZml4ZXMgdGhlIGlzc3VlIGJ5IHNldHRpbmcgdGhlIGByZWdzLVx1MDAzZXBjYCB0byB0aGUgZml4dXAgaGFuZGxlciBhbmQgaGFuZGxpbmcgdGhlIGVycm9yIHJldHVybiwgYW5kIGBkb19zZWFgIGp1c3QgcmV0dXJucy5cblxuT2theSwgc28gdGhlIHByb21wdCBpcyBhc2tpbmcgbWUgdG8gZXZhbHVhdGUgd2hldGhlciB0aGlzIGlzIHdvcnRoIGZ1enppbmcsIGJhc2VkIG9uIHNvbWUgc3BlY2lmaWMgY3JpdGVyaWEuIExldCBtZSByZWNhcCB0aG9zZSBjcml0ZXJpYTpcblxuKiAgICoqTm90IEZ1enphYmxlOioqIERvY3VtZW50YXRpb24vS2NvbmZpZyBjaGFuZ2VzLCBkZWNvcmF0aXZlIGNoYW5nZXMgKGxvZ2dpbmcvdHJhY2Vwb2ludHMpLCBudW1lcmljIGNvbnN0YW50cy9tYWNyb3MgdGhhdCBkb24ndCBjaGFuZ2UgZXhlY3V0aW9uLCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoL1NtYXJ0TklDL0dQVSBkcml2ZXJzIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSwgYW5kIHRlYXJkb3duIGNhbGxiYWNrcyBsaWtlIGAucmVtb3ZlYCwgYC5zaHV0ZG93bmAsIG9yIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuKiAgICoqRnV6emFibGU6KiogSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCAqYW5kKiBJIGNhbiB2ZXJpZnkgdGhlIGNvZGUgaXMgcmVhY2hhYmxlLlxuXG5JZiBpdCAqaXMqIGZ1enphYmxlLCBJIG5lZWQgdG86XG5cbjEuICBJZGVudGlmeSBmdW5jdGlvbnMgZm9yIGBGb2N1c1N5bWJvbHNgLCBhdm9pZGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgZm9jdXNpbmcgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLlxuMi4gIElkZW50aWZ5IHJlcXVpcmVkIGBDT05GSUdfYCBvcHRpb25zIGZvciB0ZXN0aW5nIGFuZCBwdXQgdGhlbSBpbiBgRW5hYmxlQ29uZmlnc2AuXG5cblNvLCBpdCBzZWVtcyB0aGlzIGlzIHJlYWNoYWJsZSwgYnV0IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyOlxuXG5MZXQncyBjaGVjayBgZG9fc2VhYCBpbiBgYXJjaC9hcm02NC9tbS9mYXVsdC5jYCB0byBzZWUgaG93IHRoZSBmYXVsdHMgYXJlIHJvdXRlZCBhbmQgd2hlcmUgdGhlIGZpeHVwcyBhcmUgY2FsbGVkLiBJJ2xsIG5lZWQgdG8gc2VlIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGNhbGwgYGRvX3NlYWAgYW5kIGhvdyBgZmF1bHRfaW5mb2AgaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA1MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjI0OjUyLjY2NDE0NjE5MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY4OTE5MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZhdWx0X2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MzA5PXN0cnVjdCBrdm1fYXJjaCB7XFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNDI4LVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDo0Mjk6c3RydWN0IGt2bV92Y3B1X2ZhdWx0X2luZm8ge1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC00MzAtXFx0dTY0IGVzcl9lbDI7XFx0XFx0LyogSHlwIFN5bmRyb20gUmVnaXN0ZXIgKi9cXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD04NDM9c3RydWN0IGt2bV92Y3B1X2FyY2gge1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTg3My1cXHQvKiBFeGNlcHRpb24gSW5mb3JtYXRpb24gKi9cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6ODc0OlxcdHN0cnVjdCBrdm1fdmNwdV9mYXVsdF9pbmZvIGZhdWx0O1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC04NzUtXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvZmF1bHQuaD02MD1zdGF0aWMgaW5saW5lIGJvb2wgX19ocGZhcl92YWxpZCh1NjQgZXNyKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL2ZhdWx0LmgtODEtXFxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL2ZhdWx0Lmg6ODI6c3RhdGljIGlubGluZSBib29sIF9fZ2V0X2ZhdWx0X2luZm8odTY0IGVzciwgc3RydWN0IGt2bV92Y3B1X2ZhdWx0X2luZm8gKmZhdWx0KVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9mYXVsdC5oLTgzLXtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zd2l0Y2guaD00MjA9c3RhdGljIGlubGluZSB2b2lkIF9fX2RlYWN0aXZhdGVfdHJhcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oLTQ0My1cXG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmg6NDQ0OnN0YXRpYyBpbmxpbmUgYm9vbCBfX3BvcHVsYXRlX2ZhdWx0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zd2l0Y2guaC00NDUte1xcbmFyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zd2l0Y2guaDo0NDY6XFx0cmV0dXJuIF9fZ2V0X2ZhdWx0X2luZm8odmNwdS1cXHUwMDNlYXJjaC5mYXVsdC5lc3JfZWwyLCBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5mYXVsdCk7XFxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oLTQ0Ny19XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmg9ODM3PXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faHlwX2hhbmRsZV9tZW1vcnlfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oLTgzOS17XFxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oOjg0MDpcXHRpZiAoIV9fcG9wdWxhdGVfZmF1bHRfaW5mbyh2Y3B1KSlcXG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmgtODQxLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvbWVtX3Byb3RlY3QuYz03NDg9dm9pZCBoYW5kbGVfaG9zdF9tZW1fYWJvcnQoc3RydWN0IGt2bV9jcHVfY29udGV4dCAqaG9zdF9jdHh0KVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL21lbV9wcm90ZWN0LmMtNzQ5LXtcXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9tZW1fcHJvdGVjdC5jOjc1MDpcXHRzdHJ1Y3Qga3ZtX3ZjcHVfZmF1bHRfaW5mbyBmYXVsdDtcXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9tZW1fcHJvdGVjdC5jLTc1MS1cXHR1NjQgZXNyLCBhZGRyO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvbWVtX3Byb3RlY3QuYy03NTMtXFx0ZXNyID0gcmVhZF9zeXNyZWdfZWwyKFNZU19FU1IpO1xcbmFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL21lbV9wcm90ZWN0LmM6NzU0OlxcdGlmICghX19nZXRfZmF1bHRfaW5mbyhlc3IsIFxcdTAwMjZmYXVsdCkpIHtcXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9tZW1fcHJvdGVjdC5jLTc1NS1cXHRcXHQvKlxcbi0tXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTQ4LVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo0OTpzdHJ1Y3QgZmF1bHRfaW5mbyB7XFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTUwLVxcdGludFxcdCgqZm4pKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy01Ni1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6NTc6c3RhdGljIGNvbnN0IHN0cnVjdCBmYXVsdF9pbmZvIGZhdWx0X2luZm9bXTtcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNTgtXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjU5OnN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGZhdWx0X2luZm8gKmVzcl90b19mYXVsdF9pbmZvKHVuc2lnbmVkIGxvbmcgZXNyKVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy02MC17XFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjYxOlxcdHJldHVybiBmYXVsdF9pbmZvICsgKGVzciBcXHUwMDI2IEVTUl9FTHhfRlNDKTtcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNjItfVxcbi0tXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jPTk4PXN0YXRpYyB2b2lkIG1lbV9hYm9ydF9kZWNvZGUodW5zaWduZWQgbG9uZyBlc3IpXFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtMTEyLVxcdHByX2FsZXJ0KFxcXCIgIEZTQyA9IDB4JTAybHg6ICVzXFxcXG5cXFwiLCAoZXNyIFxcdTAwMjYgRVNSX0VMeF9GU0MpLFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzoxMTM6XFx0XFx0IGVzcl90b19mYXVsdF9pbmZvKGVzciktXFx1MDAzZW5hbWUpO1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy0xMTQtXFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9NTE0PXN0YXRpYyB2b2lkIGRvX2JhZF9hcmVhKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy01MjMtXFx0aWYgKHVzZXJfbW9kZShyZWdzKSkge1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo1MjQ6XFx0XFx0Y29uc3Qgc3RydWN0IGZhdWx0X2luZm8gKmluZiA9IGVzcl90b19mYXVsdF9pbmZvKGVzcik7XFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTUyNS1cXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz02MDE9c3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsXFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNjAzLXtcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6NjA0OlxcdGNvbnN0IHN0cnVjdCBmYXVsdF9pbmZvICppbmY7XFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTYwNS1cXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtXFx1MDAzZW1tO1xcbi0tXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTc5NC1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6Nzk1OlxcdGluZiA9IGVzcl90b19mYXVsdF9pbmZvKGVzcik7XFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTc5Ni1cXHRzZXRfdGhyZWFkX2VzcihhZGRyLCBlc3IpO1xcbi0tXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jPTg2Nj1zdGF0aWMgaW50IGRvX3NlYSh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy04Njcte1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo4Njg6XFx0Y29uc3Qgc3RydWN0IGZhdWx0X2luZm8gKmluZjtcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtODY5LVxcdHVuc2lnbmVkIGxvbmcgc2lhZGRyO1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy04NzAtXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjg3MTpcXHRpbmYgPSBlc3JfdG9fZmF1bHRfaW5mbyhlc3IpO1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy04NzItXFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9OTAwPXN0YXRpYyBpbnQgZG9fdGFnX2NoZWNrX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05MTUtXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjkxNjpzdGF0aWMgY29uc3Qgc3RydWN0IGZhdWx0X2luZm8gZmF1bHRfaW5mb1tdID0ge1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05MTctXFx0eyBkb19iYWQsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJ0dGJyIGFkZHJlc3Mgc2l6ZSBmYXVsdFxcXCJcXHR9LFxcbi0tXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jPTk4Mz12b2lkIGRvX21lbV9hYm9ydCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05ODQte1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5ODU6XFx0Y29uc3Qgc3RydWN0IGZhdWx0X2luZm8gKmluZiA9IGVzcl90b19mYXVsdF9pbmZvKGVzcik7XFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTk4Ni1cXHR1bnNpZ25lZCBsb25nIGFkZHIgPSB1bnRhZ2dlZF9hZGRyKGZhcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjI0OjUzLjAzMzA2OTg3NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MzYzMzgxOTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBxdWVyeSwgYXMgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBkb19tZW1fYWJvcnRgIENhbGxlcnMgaW4gQVJNNjQqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgdHJpZ2dlcmluZyBgZG9fbWVtX2Fib3J0YCBpbiB0aGUgQVJNNjQgYXJjaGl0ZWN0dXJlLiBUaGF0IGZ1bmN0aW9uIGlzIHByZXR0eSBjcml0aWNhbCDigJMgaXQgaGFuZGxlcyB0aG9zZSBtZW1vcnkgYWJvcnQgZXhjZXB0aW9ucywgd2hpY2ggYXJlIHVzdWFsbHkgYSBzaWduIG9mIHNvbWV0aGluZyBnb2luZyB3cm9uZy4gU28sIEkgbmVlZCB0byBrbm93ICp3aGF0KidzIGNhbGxpbmcgaXQgdG8gZGlhZ25vc2UgdGhlIHNvdXJjZSBvZiBwb3RlbnRpYWwgbWVtb3J5IGlzc3Vlcy4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIHplcm8gaW4gb24gdGhlIGRpcmVjdCBjYWxscy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgZ3JlcCB0aGUgYGFyY2gvYXJtNjRgIGRpcmVjdG9yeSBmb3IgdGhlIGZ1bmN0aW9uIG5hbWUgYGRvX21lbV9hYm9ydGAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBsaXN0IG9mIGFsbCB0aGUgZmlsZXMgYW5kIGxpbmVzIG9mIGNvZGUgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBpbnZva2VkLiBUaGF0J2xsIGJlIG15IHN0YXJ0aW5nIHBvaW50IHRvIGV4YW1pbmUgdGhlIGNhbGwgc2l0ZXMgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBwcm92aWRpbmcgdGhlIG5lY2Vzc2FyeSBjb250ZXh0LiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gd29yayBiYWNrd2FyZCwgdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBmbG93IGFuZCBpbnZlc3RpZ2F0ZSBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gVGhlbiwgSSBjYW4gc3RhcnQgbG9va2luZyBhdCBhcmd1bWVudHMsIGNvbnRleHQgYW5kIGxpa2VseSBjdWxwcml0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MzgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzoyNTowMC4zOTY0NTQ2NzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTA5MDk0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fbWVtX2Fib3J0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9leGNlcHRpb24uaD01Mz1hc21saW5rYWdlIHZvaWQgYXNtX2V4aXRfdG9fdXNlcl9tb2RlKHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2V4Y2VwdGlvbi5oLTU0LVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXhjZXB0aW9uLmg6NTU6dm9pZCBkb19tZW1fYWJvcnQodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9leGNlcHRpb24uaC01Ni12b2lkIGRvX2VsMF91bmRlZihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlc3IpO1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvZW50cnktY29tbW9uLmM9MzE1PXN0YXRpYyB2b2lkIG5vaW5zdHIgZWwxX2Fib3J0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVzcilcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2VudHJ5LWNvbW1vbi5jLTMyMS1cXHRsb2NhbF9kYWlmX2luaGVyaXQocmVncyk7XFxuYXJjaC9hcm02NC9rZXJuZWwvZW50cnktY29tbW9uLmM6MzIyOlxcdGRvX21lbV9hYm9ydChmYXIsIGVzciwgcmVncyk7XFxuYXJjaC9hcm02NC9rZXJuZWwvZW50cnktY29tbW9uLmMtMzIzLVxcdGFybTY0X2V4aXRfdG9fa2VybmVsX21vZGUocmVncywgc3RhdGUpO1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvZW50cnktY29tbW9uLmM9NTQ2PXN0YXRpYyB2b2lkIG5vaW5zdHIgZWwwX2RhKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVzcilcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2VudHJ5LWNvbW1vbi5jLTU1MS1cXHRsb2NhbF9kYWlmX3Jlc3RvcmUoREFJRl9QUk9DQ1RYKTtcXG5hcmNoL2FybTY0L2tlcm5lbC9lbnRyeS1jb21tb24uYzo1NTI6XFx0ZG9fbWVtX2Fib3J0KGZhciwgZXNyLCByZWdzKTtcXG5hcmNoL2FybTY0L2tlcm5lbC9lbnRyeS1jb21tb24uYy01NTMtXFx0YXJtNjRfZXhpdF90b191c2VyX21vZGUocmVncyk7XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9lbnRyeS1jb21tb24uYz01NTY9c3RhdGljIHZvaWQgbm9pbnN0ciBlbDBfaWEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXNyKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvZW50cnktY29tbW9uLmMtNTY5LVxcdGxvY2FsX2RhaWZfcmVzdG9yZShEQUlGX1BST0NDVFgpO1xcbmFyY2gvYXJtNjQva2VybmVsL2VudHJ5LWNvbW1vbi5jOjU3MDpcXHRkb19tZW1fYWJvcnQoZmFyLCBlc3IsIHJlZ3MpO1xcbmFyY2gvYXJtNjQva2VybmVsL2VudHJ5LWNvbW1vbi5jLTU3MS1cXHRhcm02NF9leGl0X3RvX3VzZXJfbW9kZShyZWdzKTtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz05MTY9c3RhdGljIGNvbnN0IHN0cnVjdCBmYXVsdF9pbmZvIGZhdWx0X2luZm9bXSA9IHtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05ODItXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjk4Mzp2b2lkIGRvX21lbV9hYm9ydCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05ODQte1xcbi0tXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTEwMDAtfVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzoxMDAxOk5PS1BST0JFX1NZTUJPTChkb19tZW1fYWJvcnQpO1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy0xMDAyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzoyNTowMS42ODczNjk5N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjUxODI0Mzk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBFeGNlcHRpb24gSGFuZGxpbmcgaW4gQVJNNjQgS2VybmVsIE1lbW9yeSBBY2Nlc3MqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gaWRlbnRpZnkga2V5IGZ1bmN0aW9ucyBmb3IgZnV6emluZywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkgYWNjZXNzIGV4Y2VwdGlvbnMgb24gQVJNNjQuIFRoZSBjb250ZXh0IGlzIGFuIEVMMSBhYm9ydCwgd2hlcmUga2VybmVsIGNvZGUgYWNjZXNzaW5nIG1lbW9yeSB0cmlnZ2VycyBhIHN5bmNocm9ub3VzIGFib3J0LiBUaGlzIGNhbiBzdGVtIGZyb20gYGNvcHlfZnJvbV91c2VyYCwgZXhjZXB0aW9uLWhhbmRsZWQgbG9hZHMvc3RvcmVzLCBvciBvdGhlciBvcGVyYXRpb25zLlxuXG5UaGUgZmxvdyBpczogYGVsMV9hYm9ydGAgLVx1MDAzZSBgZG9fbWVtX2Fib3J0YCAtXHUwMDNlIGBpbmYtXHUwMDNlZm4oZmFyLCBlc3IsIHJlZ3MpYC4gQ3JpdGljYWxseSwgaWYgaXQncyBhIHBhZ2UgZmF1bHQsIGBkb19wYWdlX2ZhdWx0YCBraWNrcyBpbi4gS2VybmVsLW1vZGUgcGFnZSBmYXVsdHMgZXZlbnR1YWxseSBsZWFkIHRvIGBfX2RvX2tlcm5lbF9mYXVsdGAgYW5kIGBmaXh1cF9leGNlcHRpb25gLlxuXG5Ob3csIHRoZSBpbnRlcmVzdGluZyBiaXQ6IFN5bmNocm9ub3VzIEV4dGVybmFsIEFib3J0cyAoU0VBKSB3aXRoIEZTQyA9IDB4MTAgKG9yIHRyYW5zbGF0aW9uIHRhYmxlIHdhbGsgU0VBcykgYXJlIGhhbmRsZWQgYnkgYGRvX3NlYWAuICBQcmV2aW91c2x5LCBgZG9fc2VhYCBvbmx5IGhhZCBhIGNoZWNrIGZvciB1c2VyIG1vZGUgYW5kIEFQRUkgY2xhaW1zLiBOb3csIHRoZXJlIGlzIGEgY2hlY2sgb24gbm9uLXVzZXIgbW9kZSBleGVjdXRpb24gYW5kIGBmaXh1cF9leGNlcHRpb25gIGlzIGNhbGxlZC5cblxuVGhlIGtleSBxdWVzdGlvbiBpcywgaXMgdGhpcyByZWFjaGFibGUgaW4gUUVNVSwgR0NFLCBvciBmdXp6aW5nPyBZZXMsIG9uIEFSTTY0LCBhbnkgRUwxIGFib3J0IHRyaWdnZXJpbmcgU0VBIG9uIGFuIGFkZHJlc3MgYWNjZXNzZWQgd2l0aCBmaXh1cCBoYW5kbGVycyAodGhpbmsgdWFjY2VzcyBvbiBhbiB1bm1hcHBlZCBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIG9yIFNFQSBpbmplY3Rpb24gdmlhIFBDSWUvZGV2bWVtLCBldGMuKSB3aWxsIGV4ZWN1dGUgdGhpcyBuZXcgcGF0aDogYGRvX3NlYWAgLVx1MDAzZSBgZml4dXBfZXhjZXB0aW9uYC4gVGhhdCdzIHRoZSBjb3JlIGZvY3VzOiBleGNlcHRpb24gaGFuZGxpbmcgZm9yIGtlcm5lbCBtZW1vcnkgYWNjZXNzZXMhXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgb24gRm9jdXNTeW1ib2xzLiBJIGtub3cgSSB3YW50IHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLiBgZG9fbWVtX2Fib3J0YCBoYW5kbGVzIGFsbCBkYXRhIGFuZCBpbnN0cnVjdGlvbiBhYm9ydHMgKHBhZ2UgZmF1bHRzLCBldGMuKSBzbyB0aGF0J3MgYSAqdmVyeSogZ2VuZXJpYyBoYW5kbGVyLiBUaGlzIGlzbid0IHRoZSBmdW5jdGlvbiBJJ20gbG9va2luZyBmb3IuXG5cbmBkb19zZWFgIGlzIHN0YXRpYyBpbiBgZmF1bHQuY2AsIGFuZCBJJ20gYXdhcmUgdGhhdCBzdGF0aWMgZnVuY3Rpb25zIGFyZSBvZnRlbiBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciwgcG90ZW50aWFsbHkgbWFraW5nIHRoZW0gbGVzcyBzdWl0YWJsZSBmb3IgZGlyZWN0IGZ1enppbmcgdGFyZ2V0cyBpZiB0aGV5IGxhY2sgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gSG93ZXZlciwgYmVjYXVzZSBgZG9fc2VhYCBpcyBpbiB0aGUgYGZhdWx0X2luZm9gIHRhYmxlLCBpdCBpcyBub3QgaW5saW5lZCBhbmQgaGFzIGFuIGFzc29jaWF0ZWQgc3ltYm9sLlxuXG5gZml4dXBfZXhjZXB0aW9uYCBsb29rcyBwcm9taXNpbmc6IGl0J3Mgbm90IGEgZ2VuZXJpYyBob3QgcGF0aC4gSXQgaXMgb25seSBjYWxsZWQgd2hlbiBhbiBleGNlcHRpb24vZmF1bHQgaGFwcGVucyBpbiBrZXJuZWwgbW9kZS4gQWxzbywgSSBzZWUgaXQncyBkZWZpbmVkIGluIGBhcmNoL2FybTY0L21tL2V4dGFibGUuY2AsIGFuZCBkZWNsYXJlZCBpbiBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9leHRhYmxlLmhgLiAgVGhpcyBpcyBvbmx5IHRyaWdnZXJlZCBmb3IgRUwxIGV4Y2VwdGlvbnMgKGtlcm5lbCBtb2RlIGZhdWx0cykuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIGBGb2N1c1N5bWJvbHNgLlxuXG5JIHJldmlld2VkIHRoZSBjb2RlIGFyb3VuZCBgZG9fc2VhYC4gVGhlcmUgYXJlIG5vIGNvbmRpdGlvbmFsIGNvbXBpbGVzLiBUaGUgY29kZSBpcyBhbHdheXMgYnVpbHQgd2l0aCBgQ09ORklHX0FSTTY0PXlgLlxuXG5UaGVyZWZvcmUsIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlIGBkb19zZWFgIGFuZCBgZml4dXBfZXhjZXB0aW9uYCBhcyB0aGVzZSBhcmUgYm90aCBzcGVjaWZpYyBhbmQgYXJlIG5vdCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gSG93ZXZlciwgYGRvX21lbV9hYm9ydGAgaXMgZGVmaW5pdGVseSBOT1QgdGhlIGZvY3VzIGFzIGl0IGlzIHRvbyBnZW5lcmljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY5NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6MjU6MjQuMjA1NjE3NjQxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjM1NzgyNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmF1bHQub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvS2NvbmZpZz0xMjczPWNvbmZpZyBGVUpJVFNVX0VSUkFUVU1fMDEwMDAxXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMTI3OS1cXHQgIGFjY2Vzc2VzIG1heSBjYXVzZSB1bmRlZmluZWQgZmF1bHQgKERhdGEgYWJvcnQsIERGU0M9MGIxMTExMTEpLlxcbmFyY2gvYXJtNjQvS2NvbmZpZzoxMjgwOlxcdCAgVGhpcyBmYXVsdCBvY2N1cnMgdW5kZXIgYSBzcGVjaWZpYyBoYXJkd2FyZSBjb25kaXRpb24gd2hlbiBhXFxuYXJjaC9hcm02NC9LY29uZmlnLTEyODEtXFx0ICBsb2FkL3N0b3JlIGluc3RydWN0aW9uIHBlcmZvcm1zIGFuIGFkZHJlc3MgdHJhbnNsYXRpb24gdXNpbmc6XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2FsbHdpbm5lci9zdW41MGktaDY0LXJlbWl4LW1pbmktcGMuZHRzPTIzNT1cXHUwMDI2cmVnX2RjZGM1IHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYWxsd2lubmVyL3N1bjUwaS1oNjQtcmVtaXgtbWluaS1wYy5kdHMtMjQxLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYWxsd2lubmVyL3N1bjUwaS1oNjQtcmVtaXgtbWluaS1wYy5kdHM6MjQyOi8qIERldmlhdGVzIGZyb20gdGhlIHJlc2V0IGRlZmF1bHQgb2YgMS4xVi4gKi9cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2FsbHdpbm5lci9zdW41MGktaDY0LXJlbWl4LW1pbmktcGMuZHRzLTI0My1cXHUwMDI2cmVnX2RjZGM2IHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1neGwtczkwNXgta2hhZGFzLXZpbS5kdHM9NDg9XFx0XFx0bGVkLTEge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9hbWxvZ2ljL21lc29uLWd4bC1zOTA1eC1raGFkYXMtdmltLmR0cy01MS1cXHRcXHRcXHRtYXgtYnJpZ2h0bmVzcyA9IFxcdTAwM2MyNTVcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1neGwtczkwNXgta2hhZGFzLXZpbS5kdHM6NTI6XFx0XFx0XFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXFxcImRlZmF1bHQtb25cXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1neGwtczkwNXgta2hhZGFzLXZpbS5kdHMtNTMtXFx0XFx0fTtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1neG0ta2hhZGFzLXZpbTIuZHRzPTg4PVxcdFxcdGxlZC0xIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1neG0ta2hhZGFzLXZpbTIuZHRzLTkxLVxcdFxcdFxcdG1heC1icmlnaHRuZXNzID0gXFx1MDAzYzI1NVxcdTAwM2U7XFxuYXJjaC9hcm02NC9ib290L2R0cy9hbWxvZ2ljL21lc29uLWd4bS1raGFkYXMtdmltMi5kdHM6OTI6XFx0XFx0XFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXFxcImRlZmF1bHQtb25cXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1neG0ta2hhZGFzLXZpbTIuZHRzLTkzLVxcdFxcdH07XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2FtbG9naWMvbWVzb24tbGlicmV0ZWNoLWNvdHRvbndvb2QuZHRzaT04MT1cXHRcXHRsZWQge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9hbWxvZ2ljL21lc29uLWxpYnJldGVjaC1jb3R0b253b29kLmR0c2ktODMtXFx0XFx0XFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fU1RBVFVTO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvYW1sb2dpYy9tZXNvbi1saWJyZXRlY2gtY290dG9ud29vZC5kdHNpOjg0OlxcdFxcdFxcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFxcXCJkZWZhdWx0LW9uXFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2FtbG9naWMvbWVzb24tbGlicmV0ZWNoLWNvdHRvbndvb2QuZHRzaS04NS1cXHRcXHRcXHRtYXgtYnJpZ2h0bmVzcyA9IFxcdTAwM2MyNTVcXHUwMDNlO1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9hbWxvZ2ljL21lc29uLXNtMS1zZWk2MTAuZHRzPTExNj1cXHRcXHRsZWQtMiB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2FtbG9naWMvbWVzb24tc20xLXNlaTYxMC5kdHMtMTE5LVxcdFxcdFxcdG1heC1icmlnaHRuZXNzID0gXFx1MDAzYzI1NVxcdTAwM2U7XFxuYXJjaC9hcm02NC9ib290L2R0cy9hbWxvZ2ljL21lc29uLXNtMS1zZWk2MTAuZHRzOjEyMDpcXHRcXHRcXHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcXFwiZGVmYXVsdC1vblxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9hbWxvZ2ljL21lc29uLXNtMS1zZWk2MTAuZHRzLTEyMS1cXHRcXHRcXHRhY3RpdmUtbG93O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9icm9hZGNvbS9iY21iY2EvYmNtNDkwNi16eXhlbC1leDM1MTBiLmR0cz03MD1cXHRsZWRAYSB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2Jyb2FkY29tL2JjbWJjYS9iY200OTA2LXp5eGVsLWV4MzUxMGIuZHRzLTczLVxcdFxcdGNvbG9yID0gXFx1MDAzY0xFRF9DT0xPUl9JRF9HUkVFTlxcdTAwM2U7XFxuYXJjaC9hcm02NC9ib290L2R0cy9icm9hZGNvbS9iY21iY2EvYmNtNDkwNi16eXhlbC1leDM1MTBiLmR0czo3NDpcXHRcXHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcXFwiZGVmYXVsdC1vblxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9icm9hZGNvbS9iY21iY2EvYmNtNDkwNi16eXhlbC1leDM1MTBiLmR0cy03NS1cXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvZnNsLWxzMTAxMmEtdHFtbHMxMDEyYWwtbWJsczEwMTJhbC5kdHM9NzA9XFx0XFx0bGVkLTEge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvZnNsLWxzMTAxMmEtdHFtbHMxMDEyYWwtbWJsczEwMTJhbC5kdHMtNzMtXFx0XFx0XFx0Z3Bpb3MgPSBcXHUwMDNjXFx1MDAyNmdwaW9fZXhwXzNwM3YgMTUgR1BJT19BQ1RJVkVfTE9XXFx1MDAzZTtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9mc2wtbHMxMDEyYS10cW1sczEwMTJhbC1tYmxzMTAxMmFsLmR0czo3NDpcXHRcXHRcXHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcXFwiZGVmYXVsdC1vblxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvZnNsLWxzMTAxMmEtdHFtbHMxMDEyYWwtbWJsczEwMTJhbC5kdHMtNzUtXFx0XFx0fTtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2ZzbC1sczEwMjhhLWtvbnRyb24ta2JveC1hLTIzMC1scy5kdHM9MzA9XFx0XFx0cG93ZXItbGVkIHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9mc2wtbHMxMDI4YS1rb250cm9uLWtib3gtYS0yMzAtbHMuZHRzOjMxOlxcdFxcdFxcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFxcXCJkZWZhdWx0LW9uXFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9mc2wtbHMxMDI4YS1rb250cm9uLWtib3gtYS0yMzAtbHMuZHRzLTMyLVxcdFxcdFxcdGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX1BPV0VSO1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvZnNsLWxzMTAyOGEtdHFtbHMxMDI4YS1tYmxzMTAyOGEuZHRzPTQ1PVxcdFxcdGxlZC0xIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2ZzbC1sczEwMjhhLXRxbWxzMTAyOGEtbWJsczEwMjhhLmR0cy00OS1cXHRcXHRcXHRncGlvcyA9IFxcdTAwM2NcXHUwMDI2Z3Bpb19leHBfM3YzIDE0IEdQSU9fQUNUSVZFX0hJR0hcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2ZzbC1sczEwMjhhLXRxbWxzMTAyOGEtbWJsczEwMjhhLmR0czo1MDpcXHRcXHRcXHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcXFwiZGVmYXVsdC1vblxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvZnNsLWxzMTAyOGEtdHFtbHMxMDI4YS1tYmxzMTAyOGEuZHRzLTUxLVxcdFxcdH07XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4bXAtaHVtbWluZ2JvYXJkLWlpb3QuZHRzPTEwNz1cXHRzcGlfbXV4OiBtdXgtY29udHJvbGxlci0xIHtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4bXAtaHVtbWluZ2JvYXJkLWlpb3QuZHRzLTEwOC1cXHRcXHRjb21wYXRpYmxlID0gXFxcImdwaW8tbXV4XFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4bXAtaHVtbWluZ2JvYXJkLWlpb3QuZHRzOjEwOTpcXHRcXHQvKiBkZWZhdWx0IG9uLWJvYXJkICovXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OG1wLWh1bW1pbmdib2FyZC1paW90LmR0cy0xMTAtXFx0XFx0aWRsZS1zdGF0ZSA9IFxcdTAwM2MwXFx1MDAzZTtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhtcC1odW1taW5nYm9hcmQtaWlvdC5kdHM9MTE5PVxcdHVhcnQzX3VhcnQ0X2IyYl9tdXg6IG11eC1jb250cm9sbGVyLTIge1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhtcC1odW1taW5nYm9hcmQtaWlvdC5kdHMtMTIwLVxcdFxcdGNvbXBhdGlibGUgPSBcXFwiZ3Bpby1tdXhcXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhtcC1odW1taW5nYm9hcmQtaWlvdC5kdHM6MTIxOlxcdFxcdC8qIGRlZmF1bHQgb24tYm9hcmQgKi9cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4bXAtaHVtbWluZ2JvYXJkLWlpb3QuZHRzLTEyMi1cXHRcXHRpZGxlLXN0YXRlID0gXFx1MDAzYzBcXHUwMDNlO1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OG1wLXRxbWE4bXBxbC1tYmE4bXB4bC5kdHM9MTE2PVxcdFxcdGxlZC0wIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhtcC10cW1hOG1wcWwtbWJhOG1weGwuZHRzLTEyMC1cXHRcXHRcXHRncGlvcyA9IFxcdTAwM2NcXHUwMDI2Z3BpbzUgNSBHUElPX0FDVElWRV9ISUdIXFx1MDAzZTtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4bXAtdHFtYThtcHFsLW1iYThtcHhsLmR0czoxMjE6XFx0XFx0XFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXFxcImRlZmF1bHQtb25cXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhtcC10cW1hOG1wcWwtbWJhOG1weGwuZHRzLTEyMi1cXHRcXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTEtdHFtYTkxMzEtbWJhOTF4eGNhLmR0cz0xMDE9XFx0XFx0bGVkLTEge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTEtdHFtYTkxMzEtbWJhOTF4eGNhLmR0cy0xMDQtXFx0XFx0XFx0Z3Bpb3MgPSBcXHUwMDNjXFx1MDAyNmV4cGFuZGVyMiA2IEdQSU9fQUNUSVZFX0hJR0hcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDkxLXRxbWE5MTMxLW1iYTkxeHhjYS5kdHM6MTA1OlxcdFxcdFxcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFxcXCJkZWZhdWx0LW9uXFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg5MS10cW1hOTEzMS1tYmE5MXh4Y2EuZHRzLTEwNi1cXHRcXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTMtdHFtYTkzNTItbWJhOTF4eGNhLmR0cz0xMDE9XFx0XFx0bGVkLTEge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTMtdHFtYTkzNTItbWJhOTF4eGNhLmR0cy0xMDQtXFx0XFx0XFx0Z3Bpb3MgPSBcXHUwMDNjXFx1MDAyNmV4cGFuZGVyMiA2IEdQSU9fQUNUSVZFX0hJR0hcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDkzLXRxbWE5MzUyLW1iYTkxeHhjYS5kdHM6MTA1OlxcdFxcdFxcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFxcXCJkZWZhdWx0LW9uXFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg5My10cW1hOTM1Mi1tYmE5MXh4Y2EuZHRzLTEwNi1cXHRcXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTMtdHFtYTkzNTItbWJhOTN4eGNhLmR0cz0xMDc9XFx0XFx0bGVkLTEge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTMtdHFtYTkzNTItbWJhOTN4eGNhLmR0cy0xMTAtXFx0XFx0XFx0Z3Bpb3MgPSBcXHUwMDNjXFx1MDAyNmV4cGFuZGVyMiA2IEdQSU9fQUNUSVZFX0hJR0hcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDkzLXRxbWE5MzUyLW1iYTkzeHhjYS5kdHM6MTExOlxcdFxcdFxcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFxcXCJkZWZhdWx0LW9uXFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg5My10cW1hOTM1Mi1tYmE5M3h4Y2EuZHRzLTExMi1cXHRcXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTMtdHFtYTkzNTItbWJhOTN4eGxhLmR0cz05OD1cXHRcXHRsZWQtMSB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg5My10cW1hOTM1Mi1tYmE5M3h4bGEuZHRzLTEwMS1cXHRcXHRcXHRncGlvcyA9IFxcdTAwM2NcXHUwMDI2ZXhwYW5kZXIyIDYgR1BJT19BQ1RJVkVfSElHSFxcdTAwM2U7XFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OTMtdHFtYTkzNTItbWJhOTN4eGxhLmR0czoxMDI6XFx0XFx0XFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXFxcImRlZmF1bHQtb25cXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDkzLXRxbWE5MzUyLW1iYTkzeHhsYS5kdHMtMTAzLVxcdFxcdH07XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9tYmE4bXguZHRzaT03MT1cXHRcXHRsZWQxIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL21iYThteC5kdHNpLTczLVxcdFxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZncGlvMSAwIEdQSU9fQUNUSVZFX0hJR0hcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL21iYThteC5kdHNpOjc0OlxcdFxcdFxcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFxcXCJkZWZhdWx0LW9uXFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9tYmE4bXguZHRzaS03NS1cXHRcXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvbWJhOHh4LmR0c2k9Njg9XFx0XFx0bGVkMSB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9tYmE4eHguZHRzaS03MS1cXHRcXHRcXHRncGlvcyA9IFxcdTAwM2NcXHUwMDI2ZXhwYW5kZXIgMSBHUElPX0FDVElWRV9ISUdIXFx1MDAzZTtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9tYmE4eHguZHRzaTo3MjpcXHRcXHRcXHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcXFwiZGVmYXVsdC1vblxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvbWJhOHh4LmR0c2ktNzMtXFx0XFx0fTtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvbWFydmVsbC9hcm1hZGEtMzcyMC1hdGxhcy12NS5kdHM9MzY9XFx0XFx0bGVkIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvbWFydmVsbC9hcm1hZGEtMzcyMC1hdGxhcy12NS5kdHMtMzktXFx0XFx0XFx0Y29sb3IgPSBcXHUwMDNjTEVEX0NPTE9SX0lEX1JFRFxcdTAwM2U7XFxuYXJjaC9hcm02NC9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zNzIwLWF0bGFzLXY1LmR0czo0MDpcXHRcXHRcXHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcXFwiZGVmYXVsdC1vblxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zNzIwLWF0bGFzLXY1LmR0cy00MS1cXHRcXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zNzIwLXR1cnJpcy1tb3guZHRzPTM4PVxcdFxcdGxlZCB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM3MjAtdHVycmlzLW1veC5kdHMtNDAtXFx0XFx0XFx0Z3Bpb3MgPSBcXHUwMDNjXFx1MDAyNmdwaW9zYiAyMSBHUElPX0FDVElWRV9MT1dcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvbWFydmVsbC9hcm1hZGEtMzcyMC10dXJyaXMtbW94LmR0czo0MTpcXHRcXHRcXHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcXFwiZGVmYXVsdC1vblxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zNzIwLXR1cnJpcy1tb3guZHRzLTQyLVxcdFxcdH07XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM3eHguZHRzaT0yMz1cXHRyZXNlcnZlZC1tZW1vcnkge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zN3h4LmR0c2ktMjgtXFx0XFx0LypcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL21hcnZlbGwvYXJtYWRhLTM3eHguZHRzaToyOTpcXHRcXHQgKiBUaGUgUFNDSSBmaXJtd2FyZSByZWdpb24gZGVwaWN0ZWQgYmVsb3cgaXMgdGhlIGRlZmF1bHQgb25lXFxuYXJjaC9hcm02NC9ib290L2R0cy9tYXJ2ZWxsL2FybWFkYS0zN3h4LmR0c2ktMzAtXFx0XFx0ICogYW5kIHNob3VsZCBiZSB1cGRhdGVkIGJ5IHRoZSBib290bG9hZGVyLlxcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL3NkbTQ1MC1sZW5vdm8tdGJ4NjA1Zi5kdHM9NDk9XFx0YmFja2xpZ2h0OiBncGlvLWJhY2tsaWdodCB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vc2RtNDUwLWxlbm92by10Yng2MDVmLmR0cy01My1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vc2RtNDUwLWxlbm92by10Yng2MDVmLmR0czo1NDpcXHRcXHRkZWZhdWx0LW9uO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9zZG00NTAtbGVub3ZvLXRieDYwNWYuZHRzLTU1LVxcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL3RhbG9zLWV2ay1sdmRzLWF1byxnMTMzaGFuMDEuZHRzbz0xMT1cXHRiYWNrbGlnaHQ6IGJhY2tsaWdodCB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vdGFsb3MtZXZrLWx2ZHMtYXVvLGcxMzNoYW4wMS5kdHNvLTEzLVxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZ0bG1tIDExNSBHUElPX0FDVElWRV9ISUdIXFx1MDAzZTtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vdGFsb3MtZXZrLWx2ZHMtYXVvLGcxMzNoYW4wMS5kdHNvOjE0OlxcdFxcdGRlZmF1bHQtb247XFxuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL3RhbG9zLWV2ay1sdmRzLWF1byxnMTMzaGFuMDEuZHRzby0xNS1cXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9weDMwLWNvYnJhLmR0c2k9MTIwPVxcdTAwMjZlbW1jIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcHgzMC1jb2JyYS5kdHNpLTEyNC1cXHQgKiBGb3IgaHMyMDAgc3VwcG9ydCwgVS1Cb290IHdvdWxkIGhhdmUgdG8gc2V0IHRoZSBSSzgwOSBEQ0RDNFxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcHgzMC1jb2JyYS5kdHNpOjEyNTpcXHQgKiByYWlsIHRvIDEuOFYgZnJvbSB0aGUgZGVmYXVsdCBvZiAzLjBWLiBJdCBkb2Vzbid0IGRvIHRoYXQgb25cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3B4MzAtY29icmEuZHRzaS0xMjYtXFx0ICogZGV2aWNlcyBvdXQgaW4gdGhlIGZpZWxkLCBzbyBkaXNhYmxlIGhzMjAwLlxcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9weDMwLWZpcmVmbHktamQ0LWNvcmUtbWIuZHRzPTY0PVxcdFxcdGdyZWVuLWxlZCB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3B4MzAtZmlyZWZseS1qZDQtY29yZS1tYi5kdHMtNjktXFx0XFx0XFx0bGFiZWwgPSBcXFwicHgzMC1tYi1qZDQ6Ymx1ZTpkaXlcXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcHgzMC1maXJlZmx5LWpkNC1jb3JlLW1iLmR0czo3MDpcXHRcXHRcXHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcXFwiZGVmYXVsdC1vblxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9weDMwLWZpcmVmbHktamQ0LWNvcmUtbWIuZHRzLTcxLVxcdFxcdH07XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3B4MzAtcHAxNTE2LmR0c2k9MTQ4PVxcdTAwMjZlbW1jIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcHgzMC1wcDE1MTYuZHRzaS0xNTItXFx0ICogRm9yIGhzMjAwIHN1cHBvcnQsIFUtQm9vdCB3b3VsZCBoYXZlIHRvIHNldCB0aGUgUks4MDkgRENEQzRcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3B4MzAtcHAxNTE2LmR0c2k6MTUzOlxcdCAqIHJhaWwgdG8gMS44ViBmcm9tIHRoZSBkZWZhdWx0IG9mIDMuMFYuIEl0IGRvZXNuJ3QgZG8gdGhhdCBvblxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcHgzMC1wcDE1MTYuZHRzaS0xNTQtXFx0ICogZGV2aWNlcyBvdXQgaW4gdGhlIGZpZWxkLCBzbyBkaXNhYmxlIGhzMjAwLlxcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzMDgtYnBpLXAyLXByby5kdHM9NTI9XFx0XFx0Ymx1ZS1sZWQge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzMDgtYnBpLXAyLXByby5kdHMtNTctXFx0XFx0XFx0bGFiZWwgPSBcXFwiYmx1ZTpwb3dlclxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzMDgtYnBpLXAyLXByby5kdHM6NTg6XFx0XFx0XFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXFxcImRlZmF1bHQtb25cXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzA4LWJwaS1wMi1wcm8uZHRzLTU5LVxcdFxcdH07XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzMwOC1yb2MtY2MuZHRzPTM3PVxcdFxcdHBvd2VyX2xlZDogbGVkLTAge1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzA4LXJvYy1jYy5kdHMtMzgtXFx0XFx0XFx0bGFiZWwgPSBcXFwiZmlyZWZseTpyZWQ6cG93ZXJcXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzA4LXJvYy1jYy5kdHM6Mzk6XFx0XFx0XFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXFxcImRlZmF1bHQtb25cXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzA4LXJvYy1jYy5kdHMtNDAtXFx0XFx0XFx0ZGVmYXVsdC1zdGF0ZSA9IFxcXCJvblxcXCI7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1odWdzdW4teDk5LmR0cz01MT1cXHRcXHRwb3dlcl9sZWQ6IGxlZC0wIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5LWh1Z3N1bi14OTkuZHRzLTU0LVxcdFxcdFxcdGRlZmF1bHQtc3RhdGUgPSBcXFwib25cXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszMzk5LWh1Z3N1bi14OTkuZHRzOjU1OlxcdFxcdFxcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFxcXCJkZWZhdWx0LW9uXFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5OS1odWdzdW4teDk5LmR0cy01Ni1cXHRcXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1MjgtYXJtc29tLXNpZ2UxLmR0cz01NT1cXHRcXHRsZWQtMSB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzUyOC1hcm1zb20tc2lnZTEuZHRzLTU5LVxcdFxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZncGlvMyBSS19QQjIgR1BJT19BQ1RJVkVfSElHSFxcdTAwM2U7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1MjgtYXJtc29tLXNpZ2UxLmR0czo2MDpcXHRcXHRcXHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcXFwiZGVmYXVsdC1vblxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1MjgtYXJtc29tLXNpZ2UxLmR0cy02MS1cXHRcXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1MjgtbmFub3BpLXplcm8yLmR0cz02Nz1cXHRcXHRsZWQtMSB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzUyOC1uYW5vcGktemVybzIuZHRzLTcxLVxcdFxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZncGlvNCBSS19QQjEgR1BJT19BQ1RJVkVfSElHSFxcdTAwM2U7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1MjgtbmFub3BpLXplcm8yLmR0czo3MjpcXHRcXHRcXHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcXFwiZGVmYXVsdC1vblxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1MjgtbmFub3BpLXplcm8yLmR0cy03My1cXHRcXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjYtYmlndHJlZXRlY2gtY2IyLmR0c2k9NTA9XFx0XFx0bGVkLTAge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjYtYmlndHJlZXRlY2gtY2IyLmR0c2ktNTMtXFx0XFx0XFx0Z3Bpb3MgPSBcXHUwMDNjXFx1MDAyNmdwaW80IFJLX1BBMSBHUElPX0FDVElWRV9MT1dcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY2LWJpZ3RyZWV0ZWNoLWNiMi5kdHNpOjU0OlxcdFxcdFxcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFxcXCJkZWZhdWx0LW9uXFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2Ni1iaWd0cmVldGVjaC1jYjIuZHRzaS01NS1cXHRcXHRcXHRwaW5jdHJsLW5hbWVzID0gXFxcImRlZmF1bHRcXFwiO1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjYtb2Ryb2lkLW0xcy5kdHM9NDE9XFx0XFx0bGVkX3B3cjogbGVkLTAge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjYtb2Ryb2lkLW0xcy5kdHMtNDUtXFx0XFx0XFx0Z3Bpb3MgPSBcXHUwMDNjXFx1MDAyNmdwaW8wIFJLX1BDNiBHUElPX0FDVElWRV9MT1dcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY2LW9kcm9pZC1tMXMuZHRzOjQ2OlxcdFxcdFxcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFxcXCJkZWZhdWx0LW9uXFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2Ni1vZHJvaWQtbTFzLmR0cy00Ny1cXHRcXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtaGlubGluay1vcGMuZHRzaT02OT1cXHRcXHRsZWQtMiB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1oaW5saW5rLW9wYy5kdHNpLTcyLVxcdFxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZncGlvMyBSS19QQjAgR1BJT19BQ1RJVkVfSElHSFxcdTAwM2U7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtaGlubGluay1vcGMuZHRzaTo3MzpcXHRcXHRcXHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcXFwiZGVmYXVsdC1vblxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtaGlubGluay1vcGMuZHRzaS03NC1cXHRcXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1Njgtb2Ryb2lkLW0xLmR0cz02Mj1cXHRcXHRsZWRfcG93ZXI6IGxlZC0wIHtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LW9kcm9pZC1tMS5kdHMtNjYtXFx0XFx0XFx0ZGVmYXVsdC1zdGF0ZSA9IFxcXCJrZWVwXFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1vZHJvaWQtbTEuZHRzOjY3OlxcdFxcdFxcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFxcXCJkZWZhdWx0LW9uXFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1vZHJvaWQtbTEuZHRzLTY4LVxcdFxcdFxcdHBpbmN0cmwtbmFtZXMgPSBcXFwiZGVmYXVsdFxcXCI7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU3Ni1hcm1zb20tc2lnZTUuZHRzPTUzPVxcdFxcdHJlZF9sZWQ6IHJlZC1sZWQge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NzYtYXJtc29tLXNpZ2U1LmR0cy01Ni1cXHRcXHRcXHRncGlvcyA9IFxcdTAwM2NcXHUwMDI2Z3BpbzQgUktfUEIxIEdQSU9fQUNUSVZFX0hJR0hcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTc2LWFybXNvbS1zaWdlNS5kdHM6NTc6XFx0XFx0XFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXFxcImRlZmF1bHQtb25cXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTc2LWFybXNvbS1zaWdlNS5kdHMtNTgtXFx0XFx0fTtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LXJvYy1ydC5kdHM9MTI0PVxcdFxcdHBvd2VyX2xlZCB7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtcm9jLXJ0LmR0cy0xMjUtXFx0XFx0XFx0Z3Bpb3MgPSBcXHUwMDNjXFx1MDAyNmdwaW8xIFJLX1BEMyBHUElPX0FDVElWRV9ISUdIXFx1MDAzZTtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1yb2MtcnQuZHRzOjEyNjpcXHRcXHRcXHRsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSBcXFwiZGVmYXVsdC1vblxcXCI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODgtcm9jLXJ0LmR0cy0xMjctXFx0XFx0fTtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4cy1raGFkYXMtZWRnZTIuZHRzPTcwPVxcdFxcdGdyZWVuX2xlZDogbGVkLTEge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODhzLWtoYWRhcy1lZGdlMi5kdHMtNzQtXFx0XFx0XFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fUE9XRVI7XFxuYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1ODhzLWtoYWRhcy1lZGdlMi5kdHM6NzU6XFx0XFx0XFx0bGludXgsZGVmYXVsdC10cmlnZ2VyID0gXFxcImRlZmF1bHQtb25cXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4cy1raGFkYXMtZWRnZTIuZHRzLTc2LVxcdFxcdFxcdG1heC1icmlnaHRuZXNzID0gXFx1MDAzYzI1NVxcdTAwM2U7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OHMtb2Ryb2lkLW0yLmR0cz00Mj1cXHRcXHRsZWRfcHdyOiBsZWQtMCB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OHMtb2Ryb2lkLW0yLmR0cy00Ni1cXHRcXHRcXHRncGlvcyA9IFxcdTAwM2NcXHUwMDI2Z3BpbzEgUktfUEI1IEdQSU9fQUNUSVZFX0hJR0hcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4cy1vZHJvaWQtbTIuZHRzOjQ3OlxcdFxcdFxcdGxpbnV4LGRlZmF1bHQtdHJpZ2dlciA9IFxcXCJkZWZhdWx0LW9uXFxcIjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OHMtb2Ryb2lkLW0yLmR0cy00OC1cXHRcXHR9O1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9zdC9zdG0zMm1wMjM1Zi1kay5kdHM9MTA5PVxcdHBhbmVsX2x2ZHNfYmFja2xpZ2h0OiBiYWNrbGlnaHQge1xcbi0tXFxuYXJjaC9hcm02NC9ib290L2R0cy9zdC9zdG0zMm1wMjM1Zi1kay5kdHMtMTExLVxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZncGlvaSA0IEdQSU9fQUNUSVZFX0hJR0hcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvc3Qvc3RtMzJtcDIzNWYtZGsuZHRzOjExMjpcXHRcXHRkZWZhdWx0LW9uO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvc3Qvc3RtMzJtcDIzNWYtZGsuZHRzLTExMy1cXHRcXHRzdGF0dXMgPSBcXFwib2theVxcXCI7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3N0L3N0bTMybXAyNTdmLWRrLmR0cz0xMTY9XFx0cGFuZWxfbHZkc19iYWNrbGlnaHQ6IGJhY2tsaWdodCB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3N0L3N0bTMybXAyNTdmLWRrLmR0cy0xMTgtXFx0XFx0Z3Bpb3MgPSBcXHUwMDNjXFx1MDAyNmdwaW9pIDQgR1BJT19BQ1RJVkVfSElHSFxcdTAwM2U7XFxuYXJjaC9hcm02NC9ib290L2R0cy9zdC9zdG0zMm1wMjU3Zi1kay5kdHM6MTE5OlxcdFxcdGRlZmF1bHQtb247XFxuYXJjaC9hcm02NC9ib290L2R0cy9zdC9zdG0zMm1wMjU3Zi1kay5kdHMtMTIwLVxcdFxcdHN0YXR1cyA9IFxcXCJva2F5XFxcIjtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvc3Qvc3RtMzJtcDI1N2YtZXYxLmR0cz0xNDA9XFx0cGFuZWxfbHZkc19iYWNrbGlnaHQ6IGJhY2tsaWdodCB7XFxuLS1cXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3N0L3N0bTMybXAyNTdmLWV2MS5kdHMtMTQyLVxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZncGlvaSA1IEdQSU9fQUNUSVZFX0hJR0hcXHUwMDNlO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvc3Qvc3RtMzJtcDI1N2YtZXYxLmR0czoxNDM6XFx0XFx0ZGVmYXVsdC1vbjtcXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3N0L3N0bTMybXAyNTdmLWV2MS5kdHMtMTQ0LVxcdFxcdHN0YXR1cyA9IFxcXCJva2F5XFxcIjtcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vYnJrLWltbS5oLTE1LSAqIEFsbG93ZWQgdmFsdWVzIGZvciBrZ2RiIGFyZSAweDQwMCAtIDB4N2ZmXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9icmstaW1tLmg6MTY6ICogMHgxMDA6IGZvciB0cmlnZ2VyaW5nIGEgZmF1bHQgb24gcHVycG9zZSAocmVzZXJ2ZWQpXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9icmstaW1tLmgtMTctICogMHg0MDA6IGZvciBkeW5hbWljIEJSSyBpbnN0cnVjdGlvblxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLWRlZi5oLTE3LS8qXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLWRlZi5oOjE4OiAqIEJSSyBpbnN0cnVjdGlvbiBmb3IgcHJvdm9raW5nIGEgZmF1bHQgb24gcHVycG9zZVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi1kZWYuaC0xOS0gKiBVbmxpa2Uga2dkYiwgI2ltbTE2IHZhbHVlIHdpdGggdW5hbGxvY2F0ZWQgaGFuZGxlciBpcyB1c2VkIGZvciBmYXVsdGluZy5cXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaD00ODA9c3RhdGljIGlubGluZSBib29sIGt2bV9pc193cml0ZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgtNDgzLVxcdFxcdC8qXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oOjQ4NDpcXHRcXHQgKiBPbmx5IGEgcGVybWlzc2lvbiBmYXVsdCBvbiBhIFMxUFRXIHNob3VsZCBiZVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaC00ODUtXFx0XFx0ICogY29uc2lkZXJlZCBhcyBhIHdyaXRlLiBPdGhlcndpc2UsIHBhZ2UgdGFibGVzIGJha2VkXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL210ZS1rYXNhbi5oPTYwPXN0YXRpYyBpbmxpbmUgdm9pZCBtdGVfZW5hYmxlX3Rjbyh2b2lkKVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tdGUta2FzYW4uaC02OC0gKiBzaW5jZSB0aGUgc3luYyBtb2RlIGdlbmVyYXRlcyBleGNlcHRpb25zIHN5bmNocm9ub3VzbHkgYW5kIHRoZVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbXRlLWthc2FuLmg6Njk6ICogbm9mYXVsdCBvciBsb2FkX3VuYWxpZ25lZF96ZXJvcGFkIGNhbiBoYW5kbGUgdGhlbS5cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL210ZS1rYXNhbi5oLTcwLSAqL1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvZnBzaW1kLmM9ODY3PWludCB2ZWNfc2V0X3ZlY3Rvcl9sZW5ndGgoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBlbnVtIHZlY190eXBlIHR5cGUsXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYy04OTgtXFx0ZWxzZVxcbmFyY2gvYXJtNjQva2VybmVsL2Zwc2ltZC5jOjg5OTpcXHRcXHQvKiBSZXNldCBWTCB0byBzeXN0ZW0gZGVmYXVsdCBvbiBuZXh0IGV4ZWM6ICovXFxuYXJjaC9hcm02NC9rZXJuZWwvZnBzaW1kLmMtOTAwLVxcdFxcdHRhc2tfc2V0X3ZsX29uZXhlYyh0YXNrLCB0eXBlLCAwKTtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2h3X2JyZWFrcG9pbnQuYz02MzE9dm9pZCBkb19icmVha3BvaW50KHVuc2lnbmVkIGxvbmcgZXNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2h3X2JyZWFrcG9pbnQuYy02NjYtXFx0XFx0LyogRG8gd2UgbmVlZCB0byBoYW5kbGUgdGhlIHN0ZXBwaW5nPyAqL1xcbmFyY2gvYXJtNjQva2VybmVsL2h3X2JyZWFrcG9pbnQuYzo2Njc6XFx0XFx0aWYgKGlzX2RlZmF1bHRfb3ZlcmZsb3dfaGFuZGxlcihicCkpXFxuYXJjaC9hcm02NC9rZXJuZWwvaHdfYnJlYWtwb2ludC5jLTY2OC1cXHRcXHRcXHRzdGVwID0gMTtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2h3X2JyZWFrcG9pbnQuYz03NDE9c3RhdGljIGludCB3YXRjaHBvaW50X3JlcG9ydChzdHJ1Y3QgcGVyZl9ldmVudCAqd3AsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2h3X2JyZWFrcG9pbnQuYy03NDMte1xcbmFyY2gvYXJtNjQva2VybmVsL2h3X2JyZWFrcG9pbnQuYzo3NDQ6XFx0aW50IHN0ZXAgPSBpc19kZWZhdWx0X292ZXJmbG93X2hhbmRsZXIod3ApO1xcbmFyY2gvYXJtNjQva2VybmVsL2h3X2JyZWFrcG9pbnQuYy03NDUtXFx0c3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCAqaW5mbyA9IGNvdW50ZXJfYXJjaF9icCh3cCk7XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9tdGUuYz0yMDQ9c3RhdGljIHZvaWQgbXRlX3VwZGF0ZV9zY3Rscl91c2VyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL210ZS5jLTIyNS1cXHQgKiBzZXQgYml0cyBhbmQgbWFwIGludG8gcmVnaXN0ZXIgdmFsdWVzIGRldGVybWluZXMgb3VyXFxuYXJjaC9hcm02NC9rZXJuZWwvbXRlLmM6MjI2OlxcdCAqIGRlZmF1bHQgb3JkZXIuXFxuYXJjaC9hcm02NC9rZXJuZWwvbXRlLmMtMjI3LVxcdCAqL1xcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL2twcm9iZXMuYz0zMDE9aW50IF9fa3Byb2JlcyBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGZzcilcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3Byb2Jlcy9rcHJvYmVzLmMtMzIyLVxcdFxcdCAqIHNpbmdsZS1zdGVwcGluZyBpZiB0aGUgZmF1bHRpbmcgUEMgcG9pbnRzIHRvIHRoZVxcbmFyY2gvYXJtNjQva2VybmVsL3Byb2Jlcy9rcHJvYmVzLmM6MzIzOlxcdFxcdCAqIGN1cnJlbnQga3Byb2JlJ3MgWE9MIGluc3RydWN0aW9uLiBJZiB0aGUgZmF1bHQgb2NjdXJyZWRcXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMva3Byb2Jlcy5jLTMyNC1cXHRcXHQgKiBlbHNld2hlcmUgKGUuZy4gaW4gcGVyZiBvciB0cmFjaW5nIGNvZGUgaW52b2tlZCBmcm9tIHRoZVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU9MTY9a3ZtLXkgKz0gYXJtLm8gbW11Lm8gbW1pby5vIHBzY2kubyBoeXBlcmNhbGxzLm8gcHZ0aW1lLm8gXFxcXFxcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlOjE3OlxcdCBpbmplY3RfZmF1bHQubyB2YV9sYXlvdXQubyBoYW5kbGVfZXhpdC5vIGNvbmZpZy5vIFxcXFxcXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZS0xOC1cXHQgZ3Vlc3QubyBkZWJ1Zy5vIHJlc2V0Lm8gc3lzX3JlZ3MubyBzdGFja3RyYWNlLm8gXFxcXFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vYXJtLmM9NjA9ZW51bSBrdm1fd2Z4X3RyYXBfcG9saWN5IHtcXG5hcmNoL2FybTY0L2t2bS9hcm0uYzo2MTpcXHRLVk1fV0ZYX05PVFJBUF9TSU5HTEVfVEFTSywgLyogRGVmYXVsdCBvcHRpb24gKi9cXG5hcmNoL2FybTY0L2t2bS9hcm0uYy02Mi1cXHRLVk1fV0ZYX05PVFJBUCxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jPTE2NDQ9c3RhdGljIGludCBrdm1fc2V0dXBfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0xNjUwLVxcdCAqIFdoZW4gdGhlIHZDUFUgaGFzIGEgUE1VLCBidXQgbm8gUE1VIGlzIHNldCBmb3IgdGhlIGd1ZXN0XFxuYXJjaC9hcm02NC9rdm0vYXJtLmM6MTY1MTpcXHQgKiB5ZXQsIHNldCB0aGUgZGVmYXVsdCBvbmUuXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMTY1Mi1cXHQgKi9cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9mYXVsdC5oPTYwPXN0YXRpYyBpbmxpbmUgYm9vbCBfX2hwZmFyX3ZhbGlkKHU2NCBlc3IpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvZmF1bHQuaC02My1cXHQgKiBDUFVzIGFmZmVjdGVkIGJ5IEFSTSBlcnJhdHVtICM4MzQyMjAgbWF5IGluY29ycmVjdGx5IHJlcG9ydCBhXFxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL2ZhdWx0Lmg6NjQ6XFx0ICogc3RhZ2UtMiB0cmFuc2xhdGlvbiBmYXVsdCB3aGVuIGEgc3RhZ2UtMSBwZXJtaXNzaW9uIGZhdWx0IG9jY3Vycy5cXG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvZmF1bHQuaC02NS1cXHQgKlxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvcGt2bS5jPTEwNTM9c3RhdGljIHU2NCBfX3Brdm1fbWVtc2hhcmVfcGFnZV9yZXEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgaXBhKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvcGt2bS5jLTEwNTYtXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvcGt2bS5jOjEwNTc6XFx0LyogRmFrZSB1cCBhIGRhdGEgYWJvcnQgKGxldmVsIDMgdHJhbnNsYXRpb24gZmF1bHQgb24gd3JpdGUpICovXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvcGt2bS5jLTEwNTgtXFx0dmNwdS1cXHUwMDNlYXJjaC5mYXVsdC5lc3JfZWwyID0gKEVTUl9FTHhfRUNfREFCVF9MT1cgXFx1MDAzY1xcdTAwM2MgRVNSX0VMeF9FQ19TSElGVCkgfFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9MjI0Nz1pbnQga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yMjkxLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjIyOTI6XFx0LyogQ2hlY2sgdGhlIHN0YWdlLTIgZmF1bHQgaXMgdHJhbnMuIGZhdWx0IG9yIHdyaXRlIGZhdWx0ICovXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjI5My1cXHRpZiAoIWVzcl9mc2NfaXNfdHJhbnNsYXRpb25fZmF1bHQoZXNyKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYz0xMDQzPXN0YXRpYyB2b2lkIGt2bV9hcm1fc2V0X3BtdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBhcm1fcG11ICphcm1fcG11KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xMDUxLS8qKlxcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM6MTA1MjogKiBrdm1fYXJtX3NldF9kZWZhdWx0X3BtdSAtIE5vIFBNVSBzZXQsIGdldCB0aGUgZGVmYXVsdCBvbmUuXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy0xMDUzLSAqIEBrdm06IFRoZSBrdm0gcG9pbnRlclxcbi0tXFxuYXJjaC9hcm02NC9tbS9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5hcmNoL2FybTY0L21tL01ha2VmaWxlOjI6b2JqLXlcXHRcXHRcXHRcXHQ6PSBkbWEtbWFwcGluZy5vIGV4dGFibGUubyBmYXVsdC5vIGluaXQubyBcXFxcXFxuYXJjaC9hcm02NC9tbS9NYWtlZmlsZS0zLVxcdFxcdFxcdFxcdCAgIGNhY2hlLm8gY29weXBhZ2UubyBmbHVzaC5vIFxcXFxcXG4tLVxcbmFyY2gvYXJtNjQvbW0vY29udHB0ZS5jPTY5PXN0YXRpYyB2b2lkIGNvbnRwdGVfY29udmVydChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC9hcm02NC9tbS9jb250cHRlLmMtMTU3LVxcdCAqICBJZiBib3RoIHRoZSBvbGQgc2luZ2xlIChSVyxuKSBhbmQgbmV3IGNvbnRpZ3VvdXMgKFJPLGMpIFRMQiBlbnRyaWVzXFxuYXJjaC9hcm02NC9tbS9jb250cHRlLmM6MTU4OlxcdCAqICBhcmUgcHJlc2VudCwgYW5kIGEgd3JpdGUgaXMgbWFkZSB0byB0aGlzIGFkZHJlc3MsIGRvIHdlIGZhdWx0IG9yXFxuYXJjaC9hcm02NC9tbS9jb250cHRlLmMtMTU5LVxcdCAqICBpcyB0aGUgd3JpdGUgcGVybWl0dGVkICh2aWEgYW1hbGdhbWF0aW9uKT9cXG4tLVxcbmFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jPTE0PXN0YXRpYyBib29sIGNweV9mYXVsdGVkX29uX3VhY2Nlc3MoY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXgsXFxuLS1cXG5hcmNoL2FybTY0L21tL2V4dGFibGUuYy0xNy1cXHRib29sIHVhY2Nlc3NfaXNfd3JpdGUgPSBGSUVMRF9HRVQoRVhfREFUQV9VQUNDRVNTX1dSSVRFLCBleC1cXHUwMDNlZGF0YSk7XFxuYXJjaC9hcm02NC9tbS9leHRhYmxlLmM6MTg6XFx0Ym9vbCBmYXVsdF9vbl93cml0ZSA9IGVzciBcXHUwMDI2IEVTUl9FTHhfV05SO1xcbmFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jLTE5LVxcbmFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jOjIwOlxcdHJldHVybiB1YWNjZXNzX2lzX3dyaXRlID09IGZhdWx0X29uX3dyaXRlO1xcbmFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jLTIxLX1cXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz02MDE9c3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsXFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNzkwLVxcdFxcdCAqL1xcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo3OTE6XFx0XFx0cGFnZWZhdWx0X291dF9vZl9tZW1vcnkoKTtcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNzkyLVxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzoyNToyNC41MjkyMDAwNDZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA2ODk0MDcxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQVJNNjQgRmF1bHQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhlIEFSTTY0IGtlcm5lbCBoYW5kbGVzIG1lbW9yeSBmYXVsdHMuIEkgc2VlIHRoYXQgYGZhdWx0Lm9gIGFuZCBgZXh0YWJsZS5vYCBhcmUgYnVpbHQgYWxvbmdzaWRlIGBkbWEtbWFwcGluZy5vYCBhbmQgb3RoZXJzLCBhbGwgcGFydCBvZiB0aGUgc3RhbmRhcmQgYnVpbGQgcHJvY2VzcyB2aWEgYG9iai15YC4gVGhlIGFyY2hpdGVjdHVyZSBjb25maWcgaXMgYENPTkZJR19BUk02NGAg4oCTIG5vdGhpbmcgdG9vIHVudXN1YWwgaGVyZSB1bmxlc3Mgd2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBzcGVjaWZpYywgc28gbm8gbmVlZCB0byBkZWx2ZSBpbnRvIHNwZWNpZmljIEVuYWJsZUNvbmZpZ3MsIGBbXWAgaXMgZmluZSBhbmQgYElTX0VOQUJMRUQoQ09ORklHX0FSTTY0KWAgaXMgaW1wbGllZC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93OyBJIHNob3VsZCBjaGVjayBvdXQgYGZpeHVwX2V4Y2VwdGlvbmAsIGBkb19zZWFgLCBhbmQgYGRvX21lbV9hYm9ydGAuIEknbGwgYWxzbyBnbGFuY2UgdGhyb3VnaCBvdGhlciBzeW1ib2xzIGFuZCBjb25maWdzLlxuXG5BaGEhIExvb2tpbmcgYXQgYGZhdWx0LmNgIGRpcmVjdGx5LCBJIGNhbiBzZWUgc29tZSByZWxldmFudCBgQ09ORklHX2Agb3B0aW9ucyBpbiBwbGF5OiBgQ09ORklHX0NPTVBBVF9BTElHTk1FTlRfRklYVVBTYCDigJMgdGhhdCdzIGZvciBoYW5kbGluZyBhbGlnbm1lbnQgZmF1bHRzLCBvYnZpb3VzbHkuIGBDT05GSUdfSEFSREVOX0VMMl9WRUNUT1JTYCBpc24ndCBwZXJ0aW5lbnQgaW4gdGhpcyBjb250ZXh0LiBBbmQgdGhlbiwgdGhlcmUncyBgQ09ORklHX0FDUElfQVBFSV9TRUFgIGFuZCBgQ09ORklHX0FDUElfQVBFSWAuIFRoYXQncyBpbnRlcmVzdGluZywgYXMgdGhhdCBpbnZvbHZlcyBgYXBlaV9jbGFpbV9zZWFgLiBJIHNob3VsZCBjaGVjayBvdXQgYGFwZWlfY2xhaW1fc2VhYCBpbiBgYXJjaC9hcm02NGAgdG8gc2VlIGhvdyB0aGF0J3MgdGllZCBpbnRvIHRoZSBmYXVsdCBoYW5kbGluZyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDIxMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzoyNTozNS4yMTg2MTAyOTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjgzMjU1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcGVpX2NsYWltX3NlYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWNwaS5oPTEyMD12b2lkIF9faW5pdCBhY3BpX2luaXRfY3B1cyh2b2lkKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FjcGkuaDoxMjE6aW50IGFwZWlfY2xhaW1fc2VhKHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FjcGkuaC0xMjItI2Vsc2VcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FjcGkuaD0xMjM9c3RhdGljIGlubGluZSB2b2lkIGFjcGlfaW5pdF9jcHVzKHZvaWQpIHsgfVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWNwaS5oOjEyNDpzdGF0aWMgaW5saW5lIGludCBhcGVpX2NsYWltX3NlYShzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyByZXR1cm4gLUVOT0VOVDsgfVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWNwaS5oLTEyNS0jZW5kaWYgLyogQ09ORklHX0FDUEkgKi9cXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2FjcGkuYz0yOTU9dm9pZCBfX2lvbWVtICphY3BpX29zX2lvcmVtYXAoYWNwaV9waHlzaWNhbF9hZGRyZXNzIHBoeXMsIGFjcGlfc2l6ZSBzaXplKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvYWNwaS5jLTM4OC0gKi9cXG5hcmNoL2FybTY0L2tlcm5lbC9hY3BpLmM6Mzg5OmludCBhcGVpX2NsYWltX3NlYShzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG5hcmNoL2FybTY0L2tlcm5lbC9hY3BpLmMtMzkwLXtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTIxODU9aW50IGt2bV9oYW5kbGVfZ3Vlc3Rfc2VhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTIyMDAtXFx0ICogR2l2ZSBBUEVJIHRoZSBvcHBvcnR1bml0eSB0byBjbGFpbSB0aGUgYWJvcnQgYmVmb3JlIGhhbmRsaW5nIGl0XFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjIwMTpcXHQgKiB3aXRoaW4gS1ZNLiBhcGVpX2NsYWltX3NlYSgpIGV4cGVjdHMgdG8gYmUgY2FsbGVkIHdpdGggSVJRcyBlbmFibGVkLlxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTIyMDItXFx0ICovXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjIwMy1cXHRsb2NrZGVwX2Fzc2VydF9pcnFzX2VuYWJsZWQoKTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoyMjA0OlxcdGlmIChhcGVpX2NsYWltX3NlYShOVUxMKSA9PSAwKVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTIyMDUtXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM9ODY2PXN0YXRpYyBpbnQgZG9fc2VhKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtODcyLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo4NzM6XFx0aWYgKHVzZXJfbW9kZShyZWdzKSBcXHUwMDI2XFx1MDAyNiBhcGVpX2NsYWltX3NlYShyZWdzKSA9PSAwKSB7XFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTg3NC1cXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzoyNTozNS4zODE0NTMxNjdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTkzNTU1NzgwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBgYXJjaC9hcm02NC9tbS9mYXVsdC5jYC4gU3BlY2lmaWNhbGx5LCBpdCdzIGFkZGluZyBhIGNoZWNrIHdpdGhpbiBgZG9fc2VhKClgLCB0aGUgU3luY2hyb25vdXMgRXh0ZXJuYWwgQWJvcnQgKFNFQSkgaGFuZGxlciwgbGlrZSB0aGlzOlxuXG5gYGBjXG5cdGlmICghdXNlcl9tb2RlKHJlZ3MpIFx1MDAyNlx1MDAyNiBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSlcblx0XHRyZXR1cm4gMDtcbmBgYFxuXG5Fc3NlbnRpYWxseSwgaWYgYSBTRUEgaGFwcGVucyBpbiBrZXJuZWwgbW9kZSAoRUwxKSwgaW5zdGVhZCBvZiBpbW1lZGlhdGVseSBjcmFzaGluZyDigJMgYXMgd291bGQgaGFwcGVuIHdpdGggYGFybTY0X25vdGlmeV9kaWVgIOKAkyB0aGUgY29kZSBpcyBub3cgY2hlY2tpbmcgaWYgYGZpeHVwX2V4Y2VwdGlvbigpYCBjYW4gaGFuZGxlIGl0LiAgSWYgYGZpeHVwX2V4Y2VwdGlvbmAgcmV0dXJucyB0cnVlLCB0aGUgZXhjZXB0aW9uIGlzIFwiZml4ZWQgdXBcIiAoaGFuZGxlZCkuIFRoaXMgaXMgaW50ZXJlc3RpbmcuXG5cbklzIHRoaXMgZnV6emluZy13b3J0aHk/IEFic29sdXRlbHkuIFRoaXMgaXMgY29yZSBBUk02NCBtZW1vcnkgYWJvcnQvZXhjZXB0aW9uIGhhbmRsaW5nLiBBIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGhlcmUgY291bGQgbGVhZCB0byBzb21lIG5hc3R5IGV4cGxvaXRzLCBpZiBhIGJhZCBhY3RvciBjYW4gdHJpZ2dlciB0aGUgY29kZSBwYXRoLlxuXG5TbywgdGhlIGtleSBzeW1ib2xzIGhlcmUgYXJlIGBmaXh1cF9leGNlcHRpb25gICh3aGljaCwgaW1wb3J0YW50bHksIGlzIGEgZ2xvYmFsLCBub24tc3RhdGljIGZ1bmN0aW9uIGRlZmluZWQgaW4gYGFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jYCkgYW5kIGBkb19zZWFgICh0aGUgU0VBIGhhbmRsZXIgdGhpcyBwYXRjaCBtb2RpZmllcykuIGBkb19zZWFgIGlzIHN0YXRpYyBidXQgaXMgdXNlZCBpbiBgZmF1bHRfaW5mb2AgdGFibGUsIHNvIGl0ICpzaG91bGQqIGJlIGFkZHJlc3MtdGFrZW4gYW5kIGFjY2Vzc2libGUgaW4ga2FsbHN5bXMgaWYgQ09ORklHX0tBTExTWU1TIGlzIGVuYWJsZWQuIEkgc2hvdWxkIHByb2JhYmx5IGtlZXAgYW4gZXllIG9uIGBkb19tZW1fYWJvcnRgIHRvbywgYXMgaXQncyB0aGUgZ2VuZXJhbCBlbnRyeSBwb2ludCBmb3IgbWVtb3J5IGFib3J0cy5cblxuQW5kIHRoYW5rZnVsbHksIG5vIHNwZWNpYWwgS2NvbmZpZyBvcHRpb25zIGFyZSByZXF1aXJlZCBiZWNhdXNlIHRoaXMgaXMgdW5jb25kaXRpb25hbCBpbiBgYXJjaC9hcm02NC9tbS9mYXVsdC5jYC4gVGhpcyBtYWtlcyB0aGluZ3MgbXVjaCBzaW1wbGVyLlxuXG5TbywgdG8gc3VtbWFyaXplOlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogVHJ1ZVxuKiAgICoqRm9jdXNTeW1ib2xzKio6IGBbXCJmaXh1cF9leGNlcHRpb25cIiwgXCJkb19zZWFcIl1gXG4qICAgKipFbmFibGVDb25maWdzKio6IGBbXWBcblxuVGhlIHJlYXNvbmluZz8gSXQncyBhbGwgYWJvdXQgcHJvYmluZyB0aGUgY3JpdGljYWwga2VybmVsIGV4Y2VwdGlvbiBoYW5kbGluZyBsb2dpYy4gVGhpcyBsb29rcyBnb29kLiBSZWFkeSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1MDMsIk91dHB1dFRva2VucyI6ODksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6MjU6NDUuMzE3MDEzMjIyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmaXh1cF9leGNlcHRpb25cIixcbiAgICBcImRvX3NlYVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsbG93cyBrZXJuZWwtbW9kZSBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydHMgKFNFQSkgdG8gYmUgcmVjb3ZlcmVkIHVzaW5nIGV4Y2VwdGlvbiBmaXh1cCB0YWJsZXMgaW5zdGVhZCBvZiBpbW1lZGlhdGVseSBwYW5pY2tpbmcuIFRoaXMgbW9kaWZpZXMgY29yZSBBUk02NCBmYXVsdCBoYW5kbGluZyBsb2dpYyByZWFjaGFibGUgZHVyaW5nIGtlcm5lbCBtZW1vcnkgYWNjZXNzZXMgdGhhdCBmYXVsdCB3aXRoIFNFQS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmaXh1cF9leGNlcHRpb25cIixcbiAgICBcImRvX3NlYVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsbG93cyBrZXJuZWwtbW9kZSBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydHMgKFNFQSkgdG8gYmUgcmVjb3ZlcmVkIHVzaW5nIGV4Y2VwdGlvbiBmaXh1cCB0YWJsZXMgaW5zdGVhZCBvZiBpbW1lZGlhdGVseSBwYW5pY2tpbmcuIFRoaXMgbW9kaWZpZXMgY29yZSBBUk02NCBmYXVsdCBoYW5kbGluZyBsb2dpYyByZWFjaGFibGUgZHVyaW5nIGtlcm5lbCBtZW1vcnkgYWNjZXNzZXMgdGhhdCBmYXVsdCB3aXRoIFNFQS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6MjU6NDUuMzE3MDQxNjgyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzcyMTgyNjczNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjI1OjQ1LjMxNzQ4OTEwMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjczNzIxMzc1OTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZG9fc2VhKClgIGluIGBhcmNoL2FybTY0L21tL2ZhdWx0LmNgIHRvIGF0dGVtcHQgZXhjZXB0aW9uIGZpeHVwIHZpYSBgZml4dXBfZXhjZXB0aW9uKClgIHdoZW4gYSBTeW5jaHJvbm91cyBFeHRlcm5hbCBBYm9ydCAoU0VBKSBvY2N1cnMgaW4ga2VybmVsIG1vZGUgKGAhdXNlcl9tb2RlKHJlZ3MpYCksIGFsbG93aW5nIGdyYWNlZnVsIHJlY292ZXJ5IChlLmcuLCByZXR1cm5pbmcgLUVGQVVMVCBmb3IgdWFjY2VzcyBmYXVsdHMpIGluc3RlYWQgb2YgZHlpbmcuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGxvdy1sZXZlbCBhcmNoaXRlY3R1cmUgZmF1bHQvZXhjZXB0aW9uIGhhbmRsaW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IG1vZGlmeSBkYXRhIHN0cnVjdHVyZSBmaWVsZHMgb3IgcGFkZGluZywgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBpbml0aWFsaXphdGlvbiBsb2dpYywgYW5kIGRvZXMgbm90IGNvcHkgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZS4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZkYTc4ZWY3ZGMwZjg0N2Y3ZWZhNGE5NTIxMzJhMjk4NmUyM2U0MzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAyMzoyNDowNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vZmF1bHQuYyBiL2FyY2gvYXJtNjQvbW0vZmF1bHQuY1xuaW5kZXggMGI1MjU1NzY1MmJlNi4uY2EzOTZiNGJkZGEwMyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vZmF1bHQuY1xuKysrIGIvYXJjaC9hcm02NC9tbS9mYXVsdC5jXG5AQCAtODc4LDYgKzg3OCw5IEBAIHN0YXRpYyBpbnQgZG9fc2VhKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuK1x0aWYgKCF1c2VyX21vZGUocmVncykgXHUwMDI2XHUwMDI2IGZpeHVwX2V4Y2VwdGlvbihyZWdzLCBlc3IpKVxuK1x0XHRyZXR1cm4gMDtcbitcbiBcdGlmIChlc3IgXHUwMDI2IEVTUl9FTHhfRm5WKSB7XG4gXHRcdHNpYWRkciA9IDA7XG4gXHR9IGVsc2Uge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6MjU6NDUuMzE3NDkwMDgyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY5MTUxNzIyNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBcm02NCBGYXVsdCBIYW5kbGluZyBpbiBgZmF1bHQuY2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucywgc28gSSdtIGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXI6IGBhcmNoL2FybTY0L21tL2ZhdWx0LmNgLiBUaGUgZmF1bHQgaGFuZGxpbmcgY29kZSBpcyBjcml0aWNhbCwgc28gYSBjaGFuZ2UgaGVyZSBhbHdheXMgd2FycmFudHMgY2FyZWZ1bCBzY3J1dGlueS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiBgZG9fc2VhYCBhbmQgYGZpeHVwX2V4Y2VwdGlvbmAuIFRoZXNlIGFyZSB0aGUgbGlrZWx5IGVudHJ5IHBvaW50cyBmb3IgYW55IGZhdWx0LXJlbGF0ZWQgcHJvY2Vzc2luZywgYW5kIHVuZGVyc3RhbmRpbmcgdGhlaXIgaW50ZXJhY3Rpb24gaXMga2V5LiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIHBhdGhzIHRocm91Z2ggdGhlbSwgc2VlIGhvdyB0aGV5IGludGVyYWN0LCBhbmQgaWRlbnRpZnkgZXhhY3RseSB3aGF0J3MgYmVpbmcgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaC4gSSBleHBlY3QgdG8gc2VlIGRldGFpbGVkIGNoZWNrcyBmb3IgdGhlIGZhdWx0IHR5cGUgYW5kIGFkZHJlc3MsIGFuZCBhIGNvbmRpdGlvbmFsIHNlcXVlbmNlIGJhc2VkIG9uIHRoZSBzeXN0ZW0gc3RhdGUgYW5kIHRoZSBmYXVsdCdzIG5hdHVyZS4gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBjaGFuZ2UgaW1wYWN0cyB0aGUgZXhpc3RpbmcgZXhjZXB0aW9uIGhhbmRsaW5nIGxvZ2ljIHdpbGwgYmUgY3JpdGljYWwgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgaXMgY29ycmVjdCBhbmQgd2hhdCB0aGUgcGVyZm9ybWFuY2UgYW5kL29yIHNlY3VyaXR5IGltcGFjdHMgb2YgdGhlIHByb3Bvc2VkIGNoYW5nZXMgbWlnaHQgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjI1OjUyLjIzMjY2NTM5NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIxMzQ1MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fc2VhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQvbW0vZmF1bHQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L21tL2ZhdWx0LmM9ODYxPXN0YXRpYyBpbnQgZG9fYmFkKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtODY1LVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo4NjY6c3RhdGljIGludCBkb19zZWEodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtODY3LXtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz05MTY9c3RhdGljIGNvbnN0IHN0cnVjdCBmYXVsdF9pbmZvIGZhdWx0X2luZm9bXSA9IHtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05MzItXFx0eyBkb19wYWdlX2ZhdWx0LFxcdFNJR1NFR1YsIFNFR1ZfQUNDRVJSLFxcdFxcXCJsZXZlbCAzIHBlcm1pc3Npb24gZmF1bHRcXFwiXFx0fSxcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTMzOlxcdHsgZG9fc2VhLFxcdFxcdFNJR0JVUywgIEJVU19PQkpFUlIsXFx0XFxcInN5bmNocm9ub3VzIGV4dGVybmFsIGFib3J0XFxcIlxcdH0sXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTkzNC1cXHR7IGRvX3RhZ19jaGVja19mYXVsdCxcXHRTSUdTRUdWLCBTRUdWX01URVNFUlIsXFx0XFxcInN5bmNocm9ub3VzIHRhZyBjaGVjayBmYXVsdFxcXCJcXHR9LFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05MzUtXFx0eyBkb19iYWQsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJ1bmtub3duIDE4XFxcIlxcdFxcdFxcdH0sXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjkzNjpcXHR7IGRvX3NlYSxcXHRcXHRTSUdLSUxMLCBTSV9LRVJORUwsXFx0XFxcImxldmVsIC0xICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVxcXCJcXHR9LFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5Mzc6XFx0eyBkb19zZWEsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJsZXZlbCAwICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVxcXCJcXHR9LFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5Mzg6XFx0eyBkb19zZWEsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJsZXZlbCAxICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVxcXCJcXHR9LFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5Mzk6XFx0eyBkb19zZWEsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJsZXZlbCAyICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVxcXCJcXHR9LFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5NDA6XFx0eyBkb19zZWEsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJsZXZlbCAzICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVxcXCJcXHR9LFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYzo5NDE6XFx0eyBkb19zZWEsXFx0XFx0U0lHQlVTLCAgQlVTX09CSkVSUixcXHRcXFwic3luY2hyb25vdXMgcGFyaXR5IG9yIEVDQyBlcnJvclxcXCIgfSxcXHQvLyBSZXNlcnZlZCB3aGVuIFJBUyBpcyBpbXBsZW1lbnRlZFxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy05NDItXFx0eyBkb19iYWQsXFx0XFx0U0lHS0lMTCwgU0lfS0VSTkVMLFxcdFxcXCJ1bmtub3duIDI1XFxcIlxcdFxcdFxcdH0sXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTk0My1cXHR7IGRvX2JhZCxcXHRcXHRTSUdLSUxMLCBTSV9LRVJORUwsXFx0XFxcInVua25vd24gMjZcXFwiXFx0XFx0XFx0fSxcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6OTQ0OlxcdHsgZG9fc2VhLFxcdFxcdFNJR0tJTEwsIFNJX0tFUk5FTCxcXHRcXFwibGV2ZWwgLTEgc3luY2hyb25vdXMgcGFyaXR5IGVycm9yICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVxcXCJcXHR9LFxcdC8vIFJlc2VydmVkIHdoZW4gUkFTIGlzIGltcGxlbWVudGVkXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjk0NTpcXHR7IGRvX3NlYSxcXHRcXHRTSUdLSUxMLCBTSV9LRVJORUwsXFx0XFxcImxldmVsIDAgc3luY2hyb25vdXMgcGFyaXR5IGVycm9yICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVxcXCJcXHR9LFxcdC8vIFJlc2VydmVkIHdoZW4gUkFTIGlzIGltcGxlbWVudGVkXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjk0NjpcXHR7IGRvX3NlYSxcXHRcXHRTSUdLSUxMLCBTSV9LRVJORUwsXFx0XFxcImxldmVsIDEgc3luY2hyb25vdXMgcGFyaXR5IGVycm9yICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVxcXCJcXHR9LFxcdC8vIFJlc2VydmVkIHdoZW4gUkFTIGlzIGltcGxlbWVudGVkXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjk0NzpcXHR7IGRvX3NlYSxcXHRcXHRTSUdLSUxMLCBTSV9LRVJORUwsXFx0XFxcImxldmVsIDIgc3luY2hyb25vdXMgcGFyaXR5IGVycm9yICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVxcXCJcXHR9LFxcdC8vIFJlc2VydmVkIHdoZW4gUkFTIGlzIGltcGxlbWVudGVkXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjk0ODpcXHR7IGRvX3NlYSxcXHRcXHRTSUdLSUxMLCBTSV9LRVJORUwsXFx0XFxcImxldmVsIDMgc3luY2hyb25vdXMgcGFyaXR5IGVycm9yICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKVxcXCJcXHR9LFxcdC8vIFJlc2VydmVkIHdoZW4gUkFTIGlzIGltcGxlbWVudGVkXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTk0OS1cXHR7IGRvX2JhZCxcXHRcXHRTSUdLSUxMLCBTSV9LRVJORUwsXFx0XFxcInVua25vd24gMzJcXFwiXFx0XFx0XFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6MjU6NTIuMzI0ODA1NTEzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0ODA1Nzc4NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBBcm02NCBGYXVsdCBIYW5kbGVyKipcblxuQWxyaWdodCwgbGV0J3MgY3JhY2sgb3BlbiBgYXJjaC9hcm02NC9tbS9mYXVsdC5jYCBhbmQgemVybyBpbiBhcm91bmQgbGluZSA4NjYuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGUgYXJjaGl0ZWN0dXJlIGhhbmRsZXMgbWVtb3J5IGZhdWx0cy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIHRoZSBmYXVsdCBoYW5kbGVyIGFuZCBob3cgaXQgZGlmZmVyZW50aWF0ZXMgYmV0d2VlbiBkaWZmZXJlbnQgZmF1bHQgc2NlbmFyaW9zIGFuZCBwcml2aWxlZ2UgbGV2ZWxzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIGZpZ3VyZXMgb3V0IGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBwYWdlIGZhdWx0LCBhIGRhdGEgYWJvcnQsIGluc3RydWN0aW9uIGFib3J0LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gSSdtIGtlZW4gb24gdHJhY2luZyB0aGUgZGVjaXNpb24gcHJvY2VzczsgaG93IGRvZXMgdGhlIGNvZGUgZGV0ZXJtaW5lIHRoZSBjYXVzZSBvZiB0aGUgYWNjZXNzIHZpb2xhdGlvbiwgYW5kIHRoZW4sIGhvdyBkb2VzIGl0IHJlYWN0P1xuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGxvb2tpbmcgYXQgdGhlIHdheSB0aGUgTU1VIGlzIGludGVycm9nYXRlZCB0byB0cnkgdG8gZGVkdWNlIHRoZSBjYXVzZSBvZiB0aGUgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM0MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjI2OjA3LjEzMDU4NjM3NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9hcm02NC9tbS9mYXVsdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg2MCxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg2MDpcXHRcXG4gODYxOlxcdHN0YXRpYyBpbnQgZG9fYmFkKHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIDg2MjpcXHR7XFxuIDg2MzpcXHRcXHRyZXR1cm4gMTsgLyogXFxcImZhdWx0XFxcIiAqL1xcbiA4NjQ6XFx0fVxcbiA4NjU6XFx0XFxuIDg2NjpcXHRzdGF0aWMgaW50IGRvX3NlYSh1bnNpZ25lZCBsb25nIGZhciwgdW5zaWduZWQgbG9uZyBlc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiA4Njc6XFx0e1xcbiA4Njg6XFx0XFx0Y29uc3Qgc3RydWN0IGZhdWx0X2luZm8gKmluZjtcXG4gODY5OlxcdFxcdHVuc2lnbmVkIGxvbmcgc2lhZGRyO1xcbiA4NzA6XFx0XFxuIDg3MTpcXHRcXHRpbmYgPSBlc3JfdG9fZmF1bHRfaW5mbyhlc3IpO1xcbiA4NzI6XFx0XFxuIDg3MzpcXHRcXHRpZiAodXNlcl9tb2RlKHJlZ3MpIFxcdTAwMjZcXHUwMDI2IGFwZWlfY2xhaW1fc2VhKHJlZ3MpID09IDApIHtcXG4gODc0OlxcdFxcdFxcdC8qXFxuIDg3NTpcXHRcXHRcXHQgKiBBUEVJIGNsYWltZWQgdGhpcyBhcyBhIGZpcm13YXJlLWZpcnN0IG5vdGlmaWNhdGlvbi5cXG4gODc2OlxcdFxcdFxcdCAqIFNvbWUgcHJvY2Vzc2luZyBkZWZlcnJlZCB0byB0YXNrX3dvcmsgYmVmb3JlIHJldF90b191c2VyKCkuXFxuIDg3NzpcXHRcXHRcXHQgKi9cXG4gODc4OlxcdFxcdFxcdHJldHVybiAwO1xcbiA4Nzk6XFx0XFx0fVxcbiA4ODA6XFx0XFxuIDg4MTpcXHRcXHRpZiAoIXVzZXJfbW9kZShyZWdzKSBcXHUwMDI2XFx1MDAyNiBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSlcXG4gODgyOlxcdFxcdFxcdHJldHVybiAwO1xcbiA4ODM6XFx0XFxuIDg4NDpcXHRcXHRpZiAoZXNyIFxcdTAwMjYgRVNSX0VMeF9GblYpIHtcXG4gODg1OlxcdFxcdFxcdHNpYWRkciA9IDA7XFxuIDg4NjpcXHRcXHR9IGVsc2Uge1xcbiA4ODc6XFx0XFx0XFx0LypcXG4gODg4OlxcdFxcdFxcdCAqIFRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWVzIHRoYXQgdGhlIHRhZyBiaXRzIG9mIEZBUl9FTDEgYXJlXFxuIDg4OTpcXHRcXHRcXHQgKiBVTktOT1dOIGZvciBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydHMuIE1hc2sgdGhlbSBvdXQgbm93XFxuIDg5MDpcXHRcXHRcXHQgKiBzbyB0aGF0IHVzZXJzcGFjZSBkb2Vzbid0IHNlZSB0aGVtLlxcbiA4OTE6XFx0XFx0XFx0ICovXFxuIDg5MjpcXHRcXHRcXHRzaWFkZHIgID0gdW50YWdnZWRfYWRkcihmYXIpO1xcbiA4OTM6XFx0XFx0fVxcbiA4OTQ6XFx0XFx0YWRkX3RhaW50KFRBSU5UX01BQ0hJTkVfQ0hFQ0ssIExPQ0tERVBfU1RJTExfT0spO1xcbiA4OTU6XFx0XFx0YXJtNjRfbm90aWZ5X2RpZShpbmYtXFx1MDAzZW5hbWUsIHJlZ3MsIGluZi1cXHUwMDNlc2lnLCBpbmYtXFx1MDAzZWNvZGUsIHNpYWRkciwgZXNyKTtcXG4gODk2OlxcdFxcbiA4OTc6XFx0XFx0cmV0dXJuIDA7XFxuIDg5ODpcXHR9XFxuIDg5OTpcXHRcXG4gOTAwOlxcdHN0YXRpYyBpbnQgZG9fdGFnX2NoZWNrX2ZhdWx0KHVuc2lnbmVkIGxvbmcgZmFyLCB1bnNpZ25lZCBsb25nIGVzcixcXG4gOTAxOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiA5MDI6XFx0e1xcbiA5MDM6XFx0XFx0LypcXG4gOTA0OlxcdFxcdCAqIFRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWVzIHRoYXQgYml0cyA2Mzo2MCBvZiBGQVJfRUwxIGFyZSBVTktOT1dOXFxuIDkwNTpcXHRcXHQgKiBmb3IgdGFnIGNoZWNrIGZhdWx0cy4gU2V0IHRoZW0gdG8gY29ycmVzcG9uZGluZyBiaXRzIGluIHRoZSB1bnRhZ2dlZFxcbiA5MDY6XFx0XFx0ICogYWRkcmVzcyBpZiBBUk02NF9NVEVfRkFSIGlzbid0IHN1cHBvcnRlZC5cXG4gOTA3OlxcdFxcdCAqIE90aGVyd2lzZSwgYml0cyA2Mzo2MCBvZiBGQVJfRUwxIGFyZSBub3QgVU5LTk9XTi5cXG4gOTA4OlxcdFxcdCAqL1xcbiA5MDk6XFx0XFx0aWYgKCFjcHVzX2hhdmVfY2FwKEFSTTY0X01URV9GQVIpKVxcbiA5MTA6XFx0XFx0XFx0ZmFyID0gKF9fdW50YWdnZWRfYWRkcihmYXIpIFxcdTAwMjYgfk1URV9UQUdfTUFTSykgfCAoZmFyIFxcdTAwMjYgTVRFX1RBR19NQVNLKTtcXG4gOTExOlxcdFxcbiA5MTI6XFx0XFx0ZG9fYmFkX2FyZWEoZmFyLCBlc3IsIHJlZ3MpO1xcbiA5MTM6XFx0XFx0cmV0dXJuIDA7XFxuIDkxNDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjI2OjA3LjEzMDY5MTA2M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTUyMjM0ODE2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhpcyBQYXRjaDogQSBRdWljayBEaXZlIGludG8gRXhjZXB0aW9uIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgZ2V0IHJpZ2h0IGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSwgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBgZG9fc2VhYCwgdGhlIHN5bmNocm9ub3VzIGV4dGVybmFsIGFib3J0IGhhbmRsZXIgb24gYXJtNjQuIEknbSBzZWVpbmcgaXQgYWRkcyBhIGNydWNpYWwgY2hlY2s6XG5cbmBgYGNcblx0aWYgKCF1c2VyX21vZGUocmVncykgXHUwMDI2XHUwMDI2IGZpeHVwX2V4Y2VwdGlvbihyZWdzLCBlc3IpKVxuXHRcdHJldHVybiAwO1xuYGBgXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHdoYXQgYGZpeHVwX2V4Y2VwdGlvbmAgaXMgYWN0dWFsbHkgKmRvaW5nKi4gQmFzZWQgb24gdGhlIGNvbnRleHQsIEknbSBwcmV0dHkgc3VyZSB0aGF0IGl0J3MgaGFuZGxpbmcgc29tZSBzb3J0IG9mIGV4Y2VwdGlvbiBmaXgtdXAgbWVjaGFuaXNtLiBXaGVyZSdzIGl0IGRlZmluZWQ/IEknbGwgcXVpY2tseSBsb29rIGl0IHVwLCBsaWtlbHkgaW4gYGFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jYCBvciBhIHJlbGF0ZWQgZmlsZS4gSSdtIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgY2VudHJhbCB0byByZXNvbHZpbmcgb3IgbWFza2luZyBzb21lIHNvcnQgb2YgZXhjZXB0aW9uLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQncyBpbnZva2VkIGFuZCB3aGF0IGl0IHJldHVybnMuIFRoaXMgY291bGQgaW52b2x2ZSBhbiBleGNlcHRpb24gdGFibGUgbG9va3VwLCBwZXJoYXBzIHNvbWUgcmVnaXN0ZXIgbWFuaXB1bGF0aW9uLCBhbmQgYSBwb3NzaWJsZSByZXR1cm4gdG8gbm9ybWFsIGV4ZWN1dGlvbi4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciBpdHMgaGFuZGxpbmcgYWZmZWN0cyB1c2Vyc3BhY2Ugb3IgdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ1MSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6MjY6MjIuNjUzMDQxOTMyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDgyNDY4NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpeHVwX2V4Y2VwdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VmaS5oPTE2PWV4dGVybiB2b2lkIGVmaV9pbml0KHZvaWQpO1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWZpLmgtMTctXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lZmkuaDoxODpib29sIGVmaV9ydW50aW1lX2ZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgY29uc3QgY2hhciAqbXNnKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VmaS5oLTE5LSNlbHNlXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VmaS5oPTIyPXN0YXRpYyBpbmxpbmVcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VmaS5oOjIzOmJvb2wgZWZpX3J1bnRpbWVfZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBjb25zdCBjaGFyICptc2cpXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lZmkuaC0yNC17XFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2V4dGFibGUuaD00Mz1ib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9leHRhYmxlLmgtNDktXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9leHRhYmxlLmg6NTA6Ym9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXNyKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2V4dGFibGUuaC01MS0jZW5kaWZcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2VmaS5jPTIyMD1hc21saW5rYWdlIGVmaV9zdGF0dXNfdCBfX2VmaV9ydF9hc21fcmVjb3Zlcih2b2lkKTtcXG5hcmNoL2FybTY0L2tlcm5lbC9lZmkuYy0yMjEtXFxuYXJjaC9hcm02NC9rZXJuZWwvZWZpLmM6MjIyOmJvb2wgZWZpX3J1bnRpbWVfZml4dXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBjb25zdCBjaGFyICptc2cpXFxuYXJjaC9hcm02NC9rZXJuZWwvZWZpLmMtMjIzLXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3Byb2Jlcy9rcHJvYmVzLmM9MzAxPWludCBfX2twcm9iZXMga3Byb2JlX2ZhdWx0X2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBmc3IpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMva3Byb2Jlcy5jLTMxMC1cXHQgKiBtdXN0IGJlIGxlZnQgYWxvbmUgZm9yIHRoZSBub3JtYWwgcGFnZSBmYXVsdCBoYW5kbGVyLCBpbmNsdWRpbmdcXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMva3Byb2Jlcy5jOjMxMTpcXHQgKiBmaXh1cF9leGNlcHRpb24uXFxuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL2twcm9iZXMuYy0zMTItXFx0ICovXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC90cmFwcy5jPTQ5NT12b2lkIGRvX2VsMV9idGkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXNyKVxcbmFyY2gvYXJtNjQva2VybmVsL3RyYXBzLmMtNDk2LXtcXG5hcmNoL2FybTY0L2tlcm5lbC90cmFwcy5jOjQ5NzpcXHRpZiAoZWZpX3J1bnRpbWVfZml4dXBfZXhjZXB0aW9uKHJlZ3MsIFxcXCJCVEkgdmlvbGF0aW9uXFxcIikpIHtcXG5hcmNoL2FybTY0L2tlcm5lbC90cmFwcy5jLTQ5OC1cXHRcXHRyZWdzLVxcdTAwM2Vwc3RhdGUgXFx1MDAyNj0gflBTUl9CVFlQRV9NQVNLO1xcbi0tXFxuYXJjaC9hcm02NC9tbS9leHRhYmxlLmM9Njk9ZXhfaGFuZGxlcl9sb2FkX3VuYWxpZ25lZF96ZXJvcGFkKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxcbi0tXFxuYXJjaC9hcm02NC9tbS9leHRhYmxlLmMtOTQtXFxuYXJjaC9hcm02NC9tbS9leHRhYmxlLmM6OTU6Ym9vbCBmaXh1cF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXNyKVxcbmFyY2gvYXJtNjQvbW0vZXh0YWJsZS5jLTk2LXtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz00MDU9c3RhdGljIHZvaWQgX19kb19rZXJuZWxfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVzcixcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy00MTMtXFx0ICovXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjQxNDpcXHRpZiAoIWlzX2VsMV9pbnN0cnVjdGlvbl9hYm9ydChlc3IpIFxcdTAwMjZcXHUwMDI2IGZpeHVwX2V4Y2VwdGlvbihyZWdzLCBlc3IpKVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy00MTUtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jLTQ1MC1cXG5hcmNoL2FybTY0L21tL2ZhdWx0LmM6NDUxOlxcdGlmIChlZmlfcnVudGltZV9maXh1cF9leGNlcHRpb24ocmVncywgbXNnKSlcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtNDUyLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYz04NjY9c3RhdGljIGludCBkb19zZWEodW5zaWduZWQgbG9uZyBmYXIsIHVuc2lnbmVkIGxvbmcgZXNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmFyY2gvYXJtNjQvbW0vZmF1bHQuYy04ODAtXFxuYXJjaC9hcm02NC9tbS9mYXVsdC5jOjg4MTpcXHRpZiAoIXVzZXJfbW9kZShyZWdzKSBcXHUwMDI2XFx1MDAyNiBmaXh1cF9leGNlcHRpb24ocmVncywgZXNyKSlcXG5hcmNoL2FybTY0L21tL2ZhdWx0LmMtODgyLVxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzoyNjoyNC4xMzU1MTQxNTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA0NDM4MzcwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBmaXh1cF9leGNlcHRpb25gIGluIGBleHRhYmxlLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGZpeHVwX2V4Y2VwdGlvbmAgaXMgYWN0dWFsbHkgZG9pbmcgd2l0aGluIGBhcmNoL2FybTY0L21tL2V4dGFibGUuY2AuIEknbSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBleGNlcHRpb24gdGFibGUgbWVjaGFuaXNtcyBpbiB0aGUga2VybmVsLCBlc3BlY2lhbGx5IG9uIEFSTTY0LCBidXQgSSB3YW50IHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiAqdGhpcyogc3BlY2lmaWMgZnVuY3Rpb24uIEknbSBwcm9iYWJseSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyBleGNlcHRpb25zIHRoYXQgYXJpc2Ugd2l0aGluIGV4Y2VwdGlvbiB0YWJsZXMgLSBlc3NlbnRpYWxseSwgdGhlIGV4Y2VwdGlvbiB0byB0aGUgZXhjZXB0aW9uIGhhbmRsaW5nLCBpZiB5b3Ugd2lsbC4gSSdtIGV4cGVjdGluZyB0byBzZWUgaG93IHRoZSBjb2RlIGRldGVybWluZXMgaWYgYW4gZXhjZXB0aW9uIGNhbiBiZSByZWNvdmVyZWQgZnJvbSwgYW5kIGlmIHNvLCBob3cgaXQganVtcHMgdG8gdGhlIGFwcHJvcHJpYXRlIGZpeHVwIGhhbmRsZXIuIEknbSBrZWVuIHRvIHNwb3QgYW55IGVkZ2UgY2FzZXMgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgaW50ZXJhY3Rpb25zIHdpdGggY29uY3VycmVudCBwcm9jZXNzZXMgYW5kIGludGVycnVwdHMsIHNpbmNlIHdlIGFyZSB0YWxraW5nIGFib3V0IGV4Y2VwdGlvbiBoYW5kbGluZyBhdCBzdWNoIGEgbG93IGxldmVsLiBBcmUgdGhlcmUgYW55IHVudXN1YWwgbWVtb3J5IGFjY2VzcyBwYXR0ZXJucyBvciBpbnN0cnVjdGlvbiBvcmRlcmluZyB0aGF0IGFyZSB3b3J0aCBub3Rpbmc/IEkgaG9wZSB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBmdW5jdGlvbidzIGxvZ2ljIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyBjb2RlLCBzbyBJIGNhbiBlbnN1cmUgdGhlIGNvZGUgdGhhdCB1c2VzIHRoaXMgZnVuY3Rpb24gaXMgb3B0aW1pemVkIGFuZCBkb2VzIG5vdCBjYXVzZSB1bmV4cGVjdGVkIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk0NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjI2OjI3LjE3OTkwMDQxMVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL2FybTY0L21tL2V4dGFibGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5MDpcXHRcXG4gIDkxOlxcdFxcdHJlZ3MtXFx1MDAzZXBjID0gZ2V0X2V4X2ZpeHVwKGV4KTtcXG4gIDkyOlxcdFxcdHJldHVybiB0cnVlO1xcbiAgOTM6XFx0fVxcbiAgOTQ6XFx0XFxuICA5NTpcXHRib29sIGZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlc3IpXFxuICA5NjpcXHR7XFxuICA5NzpcXHRcXHRjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleDtcXG4gIDk4OlxcdFxcbiAgOTk6XFx0XFx0ZXggPSBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpKTtcXG4gMTAwOlxcdFxcdGlmICghZXgpXFxuIDEwMTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdHN3aXRjaCAoZXgtXFx1MDAzZXR5cGUpIHtcXG4gMTA0OlxcdFxcdGNhc2UgRVhfVFlQRV9CUEY6XFxuIDEwNTpcXHRcXHRcXHRyZXR1cm4gZXhfaGFuZGxlcl9icGYoZXgsIHJlZ3MpO1xcbiAxMDY6XFx0XFx0Y2FzZSBFWF9UWVBFX1VBQ0NFU1NfRVJSX1pFUk86XFxuIDEwNzpcXHRcXHRjYXNlIEVYX1RZUEVfS0FDQ0VTU19FUlJfWkVSTzpcXG4gMTA4OlxcdFxcdFxcdHJldHVybiBleF9oYW5kbGVyX3VhY2Nlc3NfZXJyX3plcm8oZXgsIHJlZ3MpO1xcbiAxMDk6XFx0XFx0Y2FzZSBFWF9UWVBFX1VBQ0NFU1NfQ1BZOlxcbiAxMTA6XFx0XFx0XFx0cmV0dXJuIGV4X2hhbmRsZXJfdWFjY2Vzc19jcHkoZXgsIHJlZ3MsIGVzcik7XFxuIDExMTpcXHRcXHRjYXNlIEVYX1RZUEVfTE9BRF9VTkFMSUdORURfWkVST1BBRDpcXG4gMTEyOlxcdFxcdFxcdHJldHVybiBleF9oYW5kbGVyX2xvYWRfdW5hbGlnbmVkX3plcm9wYWQoZXgsIHJlZ3MpO1xcbiAxMTM6XFx0XFx0fVxcbiAxMTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjI2OjI3LjE3OTk4OTIwMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTg1ODg0OTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBcHBsaWNhYmlsaXR5IEFzc2Vzc21lbnQgZm9yIFN5bmNocm9ub3VzIEV4dGVybmFsIEFib3J0IEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIEtNU0FOIGlzIHJlbGV2YW50IGhlcmUuIEZpcnN0LCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaXMgYWJvdXQgaGFuZGxpbmcgU3luY2hyb25vdXMgRXh0ZXJuYWwgQWJvcnRzIChTRUFzKSBvbiBFTDEsIHNwZWNpZmljYWxseSBpbiBgYXJjaC9hcm02NC9tbS9mYXVsdC5jYC4gV2hlbiBhbiBTRUEgaGFwcGVucyAobGlrZSBkdXJpbmcga2VybmVsIG9yIHVhY2Nlc3MgbWVtb3J5IGFjY2VzcywgdGhpbmsgYGNvcHlfZnJvbV91c2VyYCBvciB0aGUgbGlrZSksIHRoZSBgZG9fc2VhYCBmdW5jdGlvbiBub3cgY2hlY2tzIGlmIHRoZSBmYXVsdCBvY2N1cnJlZCBpbiBrZXJuZWwgbW9kZS4gSWYgc28sIGl0IGNhbGxzIGBmaXh1cF9leGNlcHRpb25gIHRvIHNlZSBpZiB0aGVyZSdzIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIGF2YWlsYWJsZS4gSWYgYSBoYW5kbGVyIGV4aXN0cyAod2UncmUgdGFsa2luZyBhYm91dCBoYW5kbGVycyBmb3IgdGhpbmdzIGxpa2UgdWFjY2VzcywgQlBGLCBvciBgZ2V0X3VzZXJgIHNjZW5hcmlvcyksIGBmaXh1cF9leGNlcHRpb25gIGRvZXMgaXRzIGpvYjogaXQgZml4ZXMgdGhlIHJlZ2lzdGVycyAoemVyb2luZyB0aGUgZGVzdGluYXRpb24sIHNldHRpbmcgYW4gZXJyb3IgcmV0dXJuLCBhbmQgYWRqdXN0aW5nIHRoZSBwcm9ncmFtIGNvdW50ZXIgdG8gdGhlIGZpeHVwIGFkZHJlc3MpLiBUaGlzIGFsbG93cyB0aGUga2VybmVsIHRvIGdyYWNlZnVsbHkgaGFuZGxlIHRoZSBmYXVsdCAobGlrZSByZXR1cm5pbmcgYC1FRkFVTFRgKSBpbnN0ZWFkIG9mIGltbWVkaWF0ZWx5IHBhbmlja2luZyB2aWEgYGFybTY0X25vdGlmeV9kaWVgLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBLTVNBTiBjb25jZXJucyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeT8gTGV0J3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LlxuXG4xLiAgKipLZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZToqKiBOb3BlLiBUaGlzIHBhdGNoIGlzbid0IG1vZGlmeWluZyBvciBpbnRyb2R1Y2luZyBhbnkgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHRoZW4gcGFzc2VkIHRvIHVzZXJzcGFjZSB2aWEgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIGBuZXRsaW5rYCwgYGlvY3RsYCwgb3IgYW55dGhpbmcgc2ltaWxhci4gTm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogTm9wZS4gVGhlIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiBgZG9fc2VhYCAoYHJlZ3NgIGFuZCBgZXNyYCkgYXJlIHBhcmFtZXRlcnMgcHJvdmlkZWQgYnkgbG93LWxldmVsIGV4Y2VwdGlvbiBlbnRyeS4gVGhleSBhcmUgbm90IHVuaW5pdGlhbGl6ZWQuXG4zLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zOioqIE5vcGUuIFRoZXJlIGFyZSBubyBhbGxvY2F0aW9ucyBpbnZvbHZlZCBpbiB0aGlzIHBhdGNoIGF0IGFsbC5cbjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgbG9naWMgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBieXRlczoqKiBOb3BlLiBUaGlzIGlzbid0IG1hbmlwdWxhdGluZyBidWZmZXJzIG9yIGFsdGVyaW5nIGhvdyBib3VuZHMgY2hlY2tzIGFyZSBwZXJmb3JtZWQgaW4gYSB3YXkgdGhhdCB3b3VsZCBpbnRyb2R1Y2UgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuXG41LiAgKipFeGNlcHRpb24gZml4dXA6KiogU3BlY2lmaWNhbGx5LCBzdGFuZGFyZCBmaXh1cCByb3V0aW5lcyB6ZXJvIG91dCB0aGUgcmVtYWluaW5nIGRlc3RpbmF0aW9uIGJ1ZmZlciBvciBzZXQgdGhlIGVycm9yIHJlZ2lzdGVyLiBLTVNBTiBhbHNvIGRvZXNuJ3Qgc3VwcG9ydCBhcm02NCBpbiBvbGRlciBrZXJuZWxzIG9yIHJ1bnMgb24geDg2XzY0LCBidXQgZXZlbiBjb25jZXB0dWFsbHksIGV4Y2VwdGlvbiB0YWJsZSBmaXh1cCBmb3Igc3luY2hyb25vdXMgZXh0ZXJuYWwgYWJvcnRzIGlzIGFuIGFyY2hpdGVjdHVyZSBleGNlcHRpb24gaGFuZGxpbmcgLyBmYXVsdCByZWNvdmVyeSBtZWNoYW5pc20uIEl0IGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuU28sIGxldCdzIGRvdWJsZS1jaGVjayBhZ2Fpbi4gV2hhdCB3YXMgdGhpcyAqYWN0dWFsbHkqIGZpeGluZz8gSXQncyBmaXhpbmcgYSBzaXR1YXRpb24gd2hlcmUgYW4gU0VBIGR1cmluZyBFTDEgdWFjY2VzcyBvciBtZW1vcnkgYWNjZXNzIHdhcyBjYXVzaW5nIGEga2VybmVsIHBhbmljLCB3aGVuIGluc3RlYWQgaXQgc2hvdWxkIGJlIHRha2luZyB0aGUgZXhjZXB0aW9uIHRhYmxlIGZpeHVwIHBhdGggKHdoaWNoIHdpbGwgcmV0dXJuIGAtRUZBVUxUYCkuXG5cbktBU0FOLCBMT0NLREVQLCBvdGhlciBkZXRlY3RvcnMgdnMuIEtNU0FOOiBUaGlzIGlzIGxvdy1sZXZlbCBBUk02NCBleGNlcHRpb24gaGFuZGxpbmcgbG9naWMuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG5vIG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gYnVmZmVyIGhhbmRsaW5nLCBubyBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIEtNU0FOIGlzIGp1c3Qgbm90IGFwcGxpY2FibGUgaGVyZS4gYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS5cblxuTXkgcmVhc29uaW5nLCBzdHJ1Y3R1cmVkIGNsZWFybHksIGlzIHRoaXM6XG5cbiogICAqKlBhdGNoIFN1bW1hcnk6KiogVGhlIHBhdGNoIHVwZGF0ZXMgYGFyY2gvYXJtNjQvbW0vZmF1bHQuY2AgdG8gaW52b2tlIGBmaXh1cF9leGNlcHRpb24oKWAgaW4gYGRvX3NlYSgpYCB3aGVuIGFuIEVMMSBTRUEgb2NjdXJzLiBUaGlzIGVuYWJsZXMga2VybmVsIGV4Y2VwdGlvbiBmaXh1cCBoYW5kbGVycyAocGFydGljdWxhcmx5IGZvciB1YWNjZXNzKSB0byBoYW5kbGUgdGhlIGZhdWx0LCBhdm9pZGluZyBhIGtlcm5lbCBwYW5pYy5cbiogICAqKktNU0FOIENvbnRyYXN0OioqIEtNU0FOIGlzIGZvciBkZXRlY3RpbmcgdXNlcyBhbmQgbGVha3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgcGF0Y2ggKmRvZXNuJ3QqIGludHJvZHVjZSBuZXcgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uLCBvciBjcmVhdGUgcGF0aHMgdGhhdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY2hhbmdlIG9ubHkgYWZmZWN0cyBleGNlcHRpb24gcm91dGluZyBmb3IgU0VBcyBvbiBBUk02NC4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgcmlzaywgbm8ga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBubyBuZWVkIGZvciBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cblxuQWxyaWdodCwgdGhhdCdzIG15IGFzc2Vzc21lbnQuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY1OCwiT3V0cHV0VG9rZW5zIjoxNzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzoyNjo1OS4wMzg4NDE4NTdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBkb19zZWEoKWAgaW4gYGFyY2gvYXJtNjQvbW0vZmF1bHQuY2AgdG8gYXR0ZW1wdCBleGNlcHRpb24gZml4dXAgdmlhIGBmaXh1cF9leGNlcHRpb24oKWAgd2hlbiBhIFN5bmNocm9ub3VzIEV4dGVybmFsIEFib3J0IChTRUEpIG9jY3VycyBpbiBrZXJuZWwgbW9kZSAoYCF1c2VyX21vZGUocmVncylgKSwgYWxsb3dpbmcgZ3JhY2VmdWwgcmVjb3ZlcnkgKGUuZy4sIHJldHVybmluZyAtRUZBVUxUIGZvciB1YWNjZXNzIGZhdWx0cykgaW5zdGVhZCBvZiBkeWluZy5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgbG93LWxldmVsIGFyY2hpdGVjdHVyZSBmYXVsdC9leGNlcHRpb24gaGFuZGxpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgc3RydWN0dXJlIGZpZWxkcyBvciBwYWRkaW5nLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGluaXRpYWxpemF0aW9uIGxvZ2ljLCBhbmQgZG9lcyBub3QgY29weSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGRvX3NlYSgpYCBpbiBgYXJjaC9hcm02NC9tbS9mYXVsdC5jYCB0byBhdHRlbXB0IGV4Y2VwdGlvbiBmaXh1cCB2aWEgYGZpeHVwX2V4Y2VwdGlvbigpYCB3aGVuIGEgU3luY2hyb25vdXMgRXh0ZXJuYWwgQWJvcnQgKFNFQSkgb2NjdXJzIGluIGtlcm5lbCBtb2RlIChgIXVzZXJfbW9kZShyZWdzKWApLCBhbGxvd2luZyBncmFjZWZ1bCByZWNvdmVyeSAoZS5nLiwgcmV0dXJuaW5nIC1FRkFVTFQgZm9yIHVhY2Nlc3MgZmF1bHRzKSBpbnN0ZWFkIG9mIGR5aW5nLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBsb3ctbGV2ZWwgYXJjaGl0ZWN0dXJlIGZhdWx0L2V4Y2VwdGlvbiBoYW5kbGluZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmUgZmllbGRzIG9yIHBhZGRpbmcsIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMsIGFuZCBkb2VzIG5vdCBjb3B5IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UuIENvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowm6zft[1] Phase: Succeeded StartedAt: 2026-08-27 23:27:10 +0000 UTC FinishedAt: 2026-08-27 23:27:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6zft[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-27 23:27:10 +0000 UTC FinishedAt: 2026-08-27 23:27:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6zft[2] Phase: Succeeded StartedAt: 2026-08-27 23:27:10 +0000 UTC FinishedAt: 2026-08-28 00:08:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-27 23:27:10 +0000 UTC FinishedAt: 2026-08-28 00:08:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-27 23:27:10 +0000 UTC FinishedAt: 2026-08-27 23:27:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-27 23:27:10 +0000 UTC FinishedAt: 2026-08-27 23:27:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm6zft/series-workflowm6zft-convert-artifact-2403317843/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-27 23:27:20 +0000 UTC FinishedAt: 2026-08-27 23:43:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-27 23:27:20 +0000 UTC FinishedAt: 2026-08-27 23:43:14 +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:*8d441ec9-bddd-4812-b25f-8d358c1c30ab,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-workflowm6zft/series-workflowm6zft-convert-artifact-2403317843/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": "b997ae7c-4fb6-4a6e-857e-69f5fa576c51", "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-workflowm6zft/series-workflowm6zft-build-action-1596914561/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-27 23:27:20 +0000 UTC FinishedAt: 2026-08-27 23:43:04 +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:*8d441ec9-bddd-4812-b25f-8d358c1c30ab,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-workflowm6zft/series-workflowm6zft-convert-artifact-2403317843/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": "b997ae7c-4fb6-4a6e-857e-69f5fa576c51", "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-workflowm6zft/series-workflowm6zft-build-action-1596914561/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-27 23:43:14 +0000 UTC FinishedAt: 2026-08-27 23:43:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-27 23:43:14 +0000 UTC FinishedAt: 2026-08-27 23:43:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-27 23:43:14 +0000 UTC FinishedAt: 2026-08-27 23:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-27 23:43:14 +0000 UTC FinishedAt: 2026-08-27 23:43:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm6zft/series-workflowm6zft-convert-artifact-1355154506/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-27 23:43:24 +0000 UTC FinishedAt: 2026-08-27 23:45:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-27 23:43:24 +0000 UTC FinishedAt: 2026-08-27 23:45:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b997ae7c-4fb6-4a6e-857e-69f5fa576c51,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-workflowm6zft/series-workflowm6zft-build-action-1596914561/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-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-27 23:45:19 +0000 UTC FinishedAt: 2026-08-27 23:45:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-27 23:45:19 +0000 UTC FinishedAt: 2026-08-27 23:45:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-27 23:45:19 +0000 UTC FinishedAt: 2026-08-28 00:03:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-27 23:45:19 +0000 UTC FinishedAt: 2026-08-28 00:03:01 +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:*8d441ec9-bddd-4812-b25f-8d358c1c30ab,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-workflowm6zft/series-workflowm6zft-convert-artifact-1355154506/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": "c81163a3-0d85-49ac-aa39-de6d2dfd906d", "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-workflowm6zft/series-workflowm6zft-build-action-2183030894/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-27 23:45:19 +0000 UTC FinishedAt: 2026-08-28 00:02:51 +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:*8d441ec9-bddd-4812-b25f-8d358c1c30ab,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-workflowm6zft/series-workflowm6zft-convert-artifact-1355154506/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": "c81163a3-0d85-49ac-aa39-de6d2dfd906d", "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-workflowm6zft/series-workflowm6zft-build-action-2183030894/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-28 00:03:01 +0000 UTC FinishedAt: 2026-08-28 00:03:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-28 00:03:01 +0000 UTC FinishedAt: 2026-08-28 00:03:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-28 00:03:01 +0000 UTC FinishedAt: 2026-08-28 00:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-28 00:03:01 +0000 UTC FinishedAt: 2026-08-28 00:05:18 +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:*c81163a3-0d85-49ac-aa39-de6d2dfd906d,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-workflowm6zft/series-workflowm6zft-build-action-2183030894/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-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-28 00:05:28 +0000 UTC FinishedAt: 2026-08-28 00:08:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-28 00:05:28 +0000 UTC FinishedAt: 2026-08-28 00:08:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"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:*b997ae7c-4fb6-4a6e-857e-69f5fa576c51,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c81163a3-0d85-49ac-aa39-de6d2dfd906d,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-workflowm6zft/series-workflowm6zft-build-action-1596914561/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-workflowm6zft/series-workflowm6zft-build-action-2183030894/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-28 00:05:28 +0000 UTC FinishedAt: 2026-08-28 00:05:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-28 00:05:28 +0000 UTC FinishedAt: 2026-08-28 00:05:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"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-workflowm6zft/series-workflowm6zft-convert-artifact-1683597279/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-28 00:05:28 +0000 UTC FinishedAt: 2026-08-28 00:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-28 00:05:28 +0000 UTC FinishedAt: 2026-08-28 00:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-28 00:05:28 +0000 UTC FinishedAt: 2026-08-28 00:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-28 00:05:49 +0000 UTC FinishedAt: 2026-08-28 00:08:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6zft[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_exception","do_sea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","series_id":"2e5eac11-f9fe-4075-bc4c-6d3503a7dedd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-28 00:05:49 +0000 UTC FinishedAt: 2026-08-28 00:08:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b997ae7c-4fb6-4a6e-857e-69f5fa576c51,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c81163a3-0d85-49ac-aa39-de6d2dfd906d,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-workflowm6zft/series-workflowm6zft-build-action-1596914561/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-workflowm6zft/series-workflowm6zft-build-action-2183030894/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-workflowm6zft/series-workflowm6zft-convert-artifact-1683597279/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,}