Name: series-workflowzzfj4 Phase: Succeeded StartedAt: 2026-08-03 02:47:06 +0000 UTC FinishedAt: 2026-08-03 07:07:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzfj4[0] Phase: Succeeded StartedAt: 2026-08-03 02:47:06 +0000 UTC FinishedAt: 2026-08-03 03:15:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzfj4[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 02:47:06 +0000 UTC FinishedAt: 2026-08-03 03:15:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_NET", "VHOST_VSOCK", "VHOST_VDPA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_NET", "VHOST_VSOCK", "VHOST_VDPA" ], "series_id": "7a48d8bd-5340-4e37-a150-802a1aaa2739" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "vhost_vring_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX05FVCYjMzQ7LAogICAgJiMzNDtWSE9TVF9WU09DSyYjMzQ7LAogICAgJiMzNDtWSE9TVF9WRFBBJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3RfdnJpbmdfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcmAgdG8gcmVzZXQgdGhlIG1ldGFkYXRhIGNhY2hlIHdoZW4gdGhlIHZyaW5nIGFkZHJlc3Mgb3Igc2l6ZSBpcyBjaGFuZ2VkLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgYHZob3N0X3ZyaW5nX2lvY3RsYCB3aXRoIGBWSE9TVF9TRVRfVlJJTkdfQUREUmAgb3IgYFZIT1NUX1NFVF9WUklOR19OVU1gIGlvY3Rscywgd2hpY2ggYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIGJ5IHZhcmlvdXMgdmhvc3QgZHJpdmVycyAoZS5nLiwgdmhvc3QtbmV0LCB2aG9zdC12c29jaykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDM6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzYTAwNDBjM2MwZjJkM2VlZDVkNmI4OTIwMDViMWE0MThhNjEyMTRmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMyAwMzoxNDoyNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmMgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcbmluZGV4IDRjNTI1YjNlMTZlYWQuLjc3Yzk2OTkzMTAwYjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuY1xuQEAgLTIxMjYsNiAmIzQzOzIxMjYsMTQgQEAgc3RhdGljIGxvbmcgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyKHN0cnVjdCB2aG9zdF9kZXYgKmQsXG4gXHRcdEJVRygpO1xuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIG1ldGFkYXRhIGNhY2hlIGhvbGRzIHRoZSBJT1RMQiBtYXBwaW5nIHRoYXQgYmFja2VkIHRoZSBwcmV2aW91c1xuJiM0MztcdCAqIGRlc2MvYXZhaWwvdXNlZCBhZGRyZXNzZXMgYW5kIHZyaW5nIHNpemUsIGJvdGggb2Ygd2hpY2ggYXJlIGJlaW5nXG4mIzQzO1x0ICogcmVwbGFjZWQgaGVyZS4gIGlvdGxiX2FjY2Vzc19vaygpIHRha2VzIGEgY2FjaGUgaGl0IGFzIHByb29mIHRoYXQgdGhlXG4mIzQzO1x0ICogcmVnaW9uIHdhcyB2YWxpZGF0ZWQsIHNvIHRoZSBzdGFsZSBlbnRyaWVzIGhhdmUgdG8gZ28uXG4mIzQzO1x0ICovXG4mIzQzO1x0X192aG9zdF92cV9tZXRhX3Jlc2V0KHZxKTtcbiYjNDM7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuIFxuIFx0cmV0dXJuIHI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDM6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX05FVCYjMzQ7LAogICAgJiMzNDtWSE9TVF9WU09DSyYjMzQ7LAogICAgJiMzNDtWSE9TVF9WRFBBJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3RfdnJpbmdfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcmAgdG8gcmVzZXQgdGhlIG1ldGFkYXRhIGNhY2hlIHdoZW4gdGhlIHZyaW5nIGFkZHJlc3Mgb3Igc2l6ZSBpcyBjaGFuZ2VkLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgYHZob3N0X3ZyaW5nX2lvY3RsYCB3aXRoIGBWSE9TVF9TRVRfVlJJTkdfQUREUmAgb3IgYFZIT1NUX1NFVF9WUklOR19OVU1gIGlvY3Rscywgd2hpY2ggYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIGJ5IHZhcmlvdXMgdmhvc3QgZHJpdmVycyAoZS5nLiwgdmhvc3QtbmV0LCB2aG9zdC12c29jaykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYTAwNDBjM2MwZjJkM2VlZDVkNmI4OTIwMDViMWE0MThhNjEyMTRmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMyAwMzoxNDoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYwppbmRleCA0YzUyNWIzZTE2ZWFkLi43N2M5Njk5MzEwMGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC92aG9zdC5jCkBAIC0yMTI2LDYgJiM0MzsyMTI2LDE0IEBAIHN0YXRpYyBsb25nIHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkLAogCQlCVUcoKTsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogVGhlIG1ldGFkYXRhIGNhY2hlIGhvbGRzIHRoZSBJT1RMQiBtYXBwaW5nIHRoYXQgYmFja2VkIHRoZSBwcmV2aW91cwomIzQzOwkgKiBkZXNjL2F2YWlsL3VzZWQgYWRkcmVzc2VzIGFuZCB2cmluZyBzaXplLCBib3RoIG9mIHdoaWNoIGFyZSBiZWluZwomIzQzOwkgKiByZXBsYWNlZCBoZXJlLiAgaW90bGJfYWNjZXNzX29rKCkgdGFrZXMgYSBjYWNoZSBoaXQgYXMgcHJvb2YgdGhhdCB0aGUKJiM0MzsJICogcmVnaW9uIHdhcyB2YWxpZGF0ZWQsIHNvIHRoZSBzdGFsZSBlbnRyaWVzIGhhdmUgdG8gZ28uCiYjNDM7CSAqLwomIzQzOwlfX3Zob3N0X3ZxX21ldGFfcmVzZXQodnEpOwomIzQzOwogCW11dGV4X3VubG9jaygmYW1wO3ZxLSZndDttdXRleCk7CiAKIAlyZXR1cm4gcjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwNQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgYSB2aG9zdCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIGJlZW4gYXBwbGllZCB0byBgZHJpdmVycy92aG9zdC92aG9zdC5jYC4gVGhlIGNvcmUgY2hhbmdlIGlzIHRoaXMgbmV3IGNhbGwgdG8gYF9fdmhvc3RfdnFfbWV0YV9yZXNldCh2cSk7YCB3aXRoaW4gYHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcigpYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBmdWxseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgKndoeSogdGhpcyBjYWxsIHdhcyBpbnRyb2R1Y2VkLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSByZXZpZXcgdGhlIGRlZmluaXRpb25zIGFuZCBpbXBsZW1lbnRhdGlvbnMgb2YgYm90aCBgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyKClgIGFuZCBgX192aG9zdF92cV9tZXRhX3Jlc2V0KClgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGVpciByb2xlcyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyLiBJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBkYXRhIHN0cnVjdHVyZXMgdGhleSBtYW5pcHVsYXRlLCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGV5JiMzOTtyZSBjYWxsZWQsIGFuZCB3aGF0IGtpbmQgb2Ygc3RhdGUgbWFuYWdlbWVudCB0aGV5JiMzOTtyZSByZXNwb25zaWJsZSBmb3IuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgYF9fdmhvc3RfdnFfbWV0YV9yZXNldCgpYCBjYWxsIHRvIGJlIGVzc2VudGlhbC4gSSB3YW50IHRvIHVuY292ZXIgYW55IHBvdGVudGlhbCBjb25zZXF1ZW5jZXMgdGhpcyBoYXMgaW4gcGVyZm9ybWFuY2UsIHNlY3VyaXR5IG9yIGNvcnJlY3RuZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3ZyaW5nX3NldF9udW1fYWRkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvdmhvc3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zob3N0LmM9MjA1Nz1zdGF0aWMgbG9uZyB2aG9zdF92cmluZ19zZXRfYWRkcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkLFxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yMTA4LVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjIxMDk6c3RhdGljIGxvbmcgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyKHN0cnVjdCB2aG9zdF9kZXYgKmQsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjExMC1cdFx0XHRcdCAgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTIxNDE9bG9uZyB2aG9zdF92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfZGV2ICpkLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHZvaWQgX191c2VyICphcmdwKVxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yMTU3LVx0ICAgIGlvY3RsID09IFZIT1NUX1NFVF9WUklOR19BRERSKSB7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MjE1ODpcdFx0cmV0dXJuIHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcihkLCB2cSwgaW9jdGwsIGFyZ3ApO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTIxNTktXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyBhIHZob3N0IGlvY3RsIENhbGwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY2FsbCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgdmhvc3RfdnJpbmdfaW9jdGxgLiBJdCBzZWVtcyB0aGlzIGlzIGdldHRpbmcgdHJpZ2dlcmVkIHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBlaXRoZXIgc2V0dGluZyB0aGUgdnJpbmcgYWRkcmVzcyBvciB0aGUgdnJpbmcgbnVtYmVyLCBuYW1lbHkgd2l0aCB0aGUgYGlvY3RsYCB2YWx1ZXMgYFZIT1NUX1NFVF9WUklOR19BRERSYCBvciBgVkhPU1RfU0VUX1ZSSU5HX05VTWAuIEFscmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIEl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUsIGFuZCBJIGJlbGlldmUgdGhhdCBpdCYjMzk7cyBmdW5jdGlvbmluZyBhcyBpdCBzaG91bGQuCgpOb3csIGxldCYjMzk7cyBqdXN0IGNvbmZpcm0gdGhhdCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlIHdpdGhpbiBgZHJpdmVycy92aG9zdC92aG9zdC5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgZXhwZWN0ZWQgc2V0dGluZ3MgYXJlIGVuYWJsZWQgdG8gZW5zdXJlIHRoaXMgYmVoYXZlcyBhcyBleHBlY3RlZCBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudC4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9NYWtlZmlsZT0xND12aG9zdF92ZHBhLXkgOj0gdmRwYS5vXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlLTE1LVxuZHJpdmVycy92aG9zdC9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfVkhPU1QpXHQmIzQzOz0gdmhvc3Qub1xuZHJpdmVycy92aG9zdC9NYWtlZmlsZS0xNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTAyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgVkhPU1QgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KioKCkFscmlnaHQsIHNvIHdlJiMzOTt2ZSBnb3QgYSBzaXR1YXRpb24gd2hlcmUgd2UmIzM5O3JlIGdvaW5nIHRvIG5lZWQgYENPTkZJR19WSE9TVGAuIFRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBmbGFnIGlzIGRlZmluZWQgYW5kIHdoYXQgaXQgZGVwZW5kcyBvbi4gSSYjMzk7bGwgbmVlZCB0byBnbyBzcGVsdW5raW5nIGluIHRoZSBrZXJuZWwgY29uZmlnIGZpbGVzIGZvciB0aGUgYHZob3N0YCBzdWJzeXN0ZW0g4oCTIHNvIHRoYXQgbWVhbnMgSSYjMzk7bSBnb2luZyBzdHJhaWdodCB0byBgZHJpdmVycy92aG9zdC9LY29uZmlnYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cywgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZ29pbmcgdG8gcGxheSBuaWNlIHdpdGggdGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24gb2YgdGhpcyBzeXN0ZW0uIFRpbWUgdG8gc2VlIHdoYXQgdGhhdCBgS2NvbmZpZ2AgZmlsZSB0ZWxscyB1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkhPU1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL3Zob3N0L0tjb25maWc6Mjpjb25maWcgVkhPU1RfSU9UTEJcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zLVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctOC1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo5OmNvbmZpZyBWSE9TVF9SSU5HXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMTAtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0xNS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzoxNjpjb25maWcgVkhPU1RfVEFTS1xuZHJpdmVycy92aG9zdC9LY29uZmlnLTE3LVx0Ym9vbFxuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0xOS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzoyMDpjb25maWcgVkhPU1RcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0yMS1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTI3LVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjI4Om1lbnVjb25maWcgVkhPU1RfTUVOVVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTI5LVx0Ym9vbCBcJiMzNDtWSE9TVCBkcml2ZXJzXCYjMzQ7XG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnPTMyPWlmIFZIT1NUX01FTlVcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zMy1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzozNDpjb25maWcgVkhPU1RfTkVUXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzUtXHR0cmlzdGF0ZSBcJiMzNDtIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFwmIzM0O1xuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00NS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo0Njpjb25maWcgVkhPU1RfU0NTSVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTQ3LVx0dHJpc3RhdGUgXCYjMzQ7VkhPU1RfU0NTSSBUQ00gZmFicmljIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01NS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo1Njpjb25maWcgVkhPU1RfVlNPQ0tcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01Ny1cdHRyaXN0YXRlIFwmIzM0O3Zob3N0IHZpcnRpby12c29jayBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNjktXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NzA6Y29uZmlnIFZIT1NUX1ZEUEFcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03MS1cdHRyaXN0YXRlIFwmIzM0O1Zob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXCYjMzQ7XG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTgyLVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjgzOmNvbmZpZyBWSE9TVF9DUk9TU19FTkRJQU5fTEVHQUNZXG5kcml2ZXJzL3Zob3N0L0tjb25maWctODQtXHRib29sIFwmIzM0O0Nyb3NzLWVuZGlhbiBzdXBwb3J0IGZvciB2aG9zdFwmIzM0O1xuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy05Ny1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo5ODpjb25maWcgVkhPU1RfRU5BQkxFX0ZPUktfT1dORVJfQ09OVFJPTFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTk5LVx0Ym9vbCBcJiMzNDtFbmFibGUgVkhPU1RfRU5BQkxFX0ZPUktfT1dORVJfQ09OVFJPTFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NDkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYENPTkZJR19WSE9TVGAuIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGlzIGlzIGEgdHJpc3RhdGUgb3B0aW9uLCBsaWtlbHkgYWN0aW5nIGFzIGEgcGFyZW50IGZvciBhIGJ1bmNoIG9mIHZpcnR1YWxpemF0aW9uIGhvc3QgZmVhdHVyZXMuIE15IGh1bmNoIGlzIGl0JiMzOTtzIHNlbGVjdGVkIChlaXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgYnkgdGhpbmdzIGxpa2UgYFZIT1NUX05FVGAsIGBWSE9TVF9TQ1NJYCwgYW5kIGBWSE9TVF9WU09DS2Ag4oCTIGNvbW1vbiB2aG9zdC1iYXNlZCBkcml2ZXJzLiBUbyBjb25maXJtIHRoaXMgcmVsYXRpb25zaGlwLCBJIHJlYWxseSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aG9zZSBkZXBlbmRlbnQgb3B0aW9ucy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHF1aWNrbHkgY2hlY2tpbmcgdGhlIGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGJvdGggYFZIT1NUX05FVGAgYW5kIGBWSE9TVF9NRU5VYCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIHN0cnVjdHVyZS4gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXBlbmRlbmNpZXMgd2lsbCBnaXZlIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgYENPTkZJR19WSE9TVGAgZml0cyBpbnRvIHRoZSBncmVhdGVyIGtlcm5lbCBjb25maWd1cmF0aW9uIHNjaGVtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFZIT1NUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZz05PWNvbmZpZyBWSE9TVF9SSU5HXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMTAtXHR0cmlzdGF0ZVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjExOlx0c2VsZWN0IFZIT1NUX0lPVExCXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMTItXHRoZWxwXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnPTIwPWNvbmZpZyBWSE9TVFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTIxLVx0dHJpc3RhdGVcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzoyMjpcdHNlbGVjdCBWSE9TVF9JT1RMQlxuZHJpdmVycy92aG9zdC9LY29uZmlnOjIzOlx0c2VsZWN0IFZIT1NUX1RBU0tcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0yNC1cdGhlbHBcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9MzQ9Y29uZmlnIFZIT1NUX05FVFxuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zNi1cdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBFVkVOVEZEIFx1MDAyNlx1MDAyNiAoVFVOIHx8ICFUVU4pIFx1MDAyNlx1MDAyNiAoVEFQIHx8ICFUQVApXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6Mzc6XHRzZWxlY3QgVkhPU1RcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zOC1cdGhlbHBcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NDY9Y29uZmlnIFZIT1NUX1NDU0lcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDgtXHRkZXBlbmRzIG9uIFRBUkdFVF9DT1JFIFx1MDAyNlx1MDAyNiBFVkVOVEZEXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NDk6XHRzZWxlY3QgVkhPU1RcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01MC1cdHNlbGVjdCBTR19QT09MXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnPTU2PWNvbmZpZyBWSE9TVF9WU09DS1xuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01OC1cdGRlcGVuZHMgb24gVlNPQ0tFVFMgXHUwMDI2XHUwMDI2IEVWRU5URkRcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo1OTpcdHNlbGVjdCBWSE9TVFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTYwLVx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NzA9Y29uZmlnIFZIT1NUX1ZEUEFcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzItXHRkZXBlbmRzIG9uIEVWRU5URkRcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo3MzpcdHNlbGVjdCBWSE9TVFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTc0LVx0c2VsZWN0IElSUV9CWVBBU1NfTUFOQUdFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Njk2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVkhPU1QgQ29uZmlndXJhdGlvbiBEZWNpc2lvbnMqKgoKT2theSwgc28gSSYjMzk7bSBjb25maWd1cmluZyB0aGUgdmlydHVhbCBob3N0IGZ1bmN0aW9uYWxpdHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHNldHRpbmcgYFZIT1NUX05FVGAgd2lsbCBhdXRvbWF0aWNhbGx5IGhhbmRsZSBzZWxlY3RpbmcgYFZIT1NUYCwgYW5kIHRoZW4gSSBjYW4gbGV2ZXJhZ2UgYm90aCBgVkhPU1RfTkVUYCBhbmQgYFZIT1NUX01FTlVgLiBCdXQgaG9sZCBvbiwgSSByZW1lbWJlciBub3csIGBWSE9TVF9NRU5VYCBpcyBqdXN0IGZvciB0aGUgbWVudSBjb25maWd1cmF0aW9uIGl0c2VsZi4gU28sIHRvIGtlZXAgdGhpbmdzIHN0cmVhbWxpbmVkLCBlbmFibGluZyBgVkhPU1RfTkVUYCBpcyB0aGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggYmVjYXVzZSBpdCBoYW5kbGVzIHRoZSBgVkhPU1RgIHNlbGVjdGlvbiBpbXBsaWNpdGx5LiBKdXN0IHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBhY2N1cmF0ZSBhbmQgY29uc2lkZXIgYW55IHBvdGVudGlhbCBpc3N1ZXMsIHNvIEkgd2lsbCBub3cgZ28gYW5kIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBgVkhPU1RfTUVOVWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnPTM0PWNvbmZpZyBWSE9TVF9ORVRcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zNS1cdHRyaXN0YXRlIFwmIzM0O0hvc3Qga2VybmVsIGFjY2VsZXJhdG9yIGZvciB2aXJ0aW8gbmV0XCYjMzQ7XG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MzY6XHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgRVZFTlRGRCBcdTAwMjZcdTAwMjYgKFRVTiB8fCAhVFVOKSBcdTAwMjZcdTAwMjYgKFRBUCB8fCAhVEFQKVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTM3LVx0c2VsZWN0IFZIT1NUXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnPTQ2PWNvbmZpZyBWSE9TVF9TQ1NJXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDctXHR0cmlzdGF0ZSBcJiMzNDtWSE9TVF9TQ1NJIFRDTSBmYWJyaWMgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NDg6XHRkZXBlbmRzIG9uIFRBUkdFVF9DT1JFIFx1MDAyNlx1MDAyNiBFVkVOVEZEXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDktXHRzZWxlY3QgVkhPU1Rcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NTY9Y29uZmlnIFZIT1NUX1ZTT0NLXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTctXHR0cmlzdGF0ZSBcJiMzNDt2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NTg6XHRkZXBlbmRzIG9uIFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBFVkVOVEZEXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTktXHRzZWxlY3QgVkhPU1Rcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NzA9Y29uZmlnIFZIT1NUX1ZEUEFcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03MS1cdHRyaXN0YXRlIFwmIzM0O1Zob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXCYjMzQ7XG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NzI6XHRkZXBlbmRzIG9uIEVWRU5URkRcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03My1cdHNlbGVjdCBWSE9TVFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTc0LVx0c2VsZWN0IElSUV9CWVBBU1NfTUFOQUdFUlxuZHJpdmVycy92aG9zdC9LY29uZmlnOjc1Olx0ZGVwZW5kcyBvbiBWRFBBXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzYtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNDMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgVkhPU1QqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgbXkgbWVudGFsIGNoZWNrbGlzdCBoZXJlIHN0YXJ0cyB3aXRoIHRoZSBvYnZpb3VzIGRlcGVuZGVuY3kuIFRvIGdldCBgVkhPU1RfTkVUYCBydW5uaW5nLCBJJiMzOTtsbCBuZWVkIGJvdGggYE5FVGAgYW5kIGBFVkVOVEZEYCBlbmFibGVkIOKAkyB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsLiBUaGlua2luZyBhaGVhZCwgYW5kIHNpbmNlIEkmIzM5O20gZ29pbmcgdG8gYmUgdXNpbmcgdmhvc3QsIHRoZXJlJiMzOTtzIG5vIGhhcm0gaW4gZW5hYmxpbmcgYFZIT1NUX01FTlVgIGFuZCBgVkhPU1RfVlNPQ0tgIGFsb25nc2lkZSBgVkhPU1RfTkVUYC4gSXQgY292ZXJzIGEgYnJvYWQgc2V0IG9mIHVzZSBjYXNlcywgYW5kIGxpa2VseSBwcm92aWRlcyBzb21lIGhlbHBmdWwgdXRpbGl0aWVzLgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyYCBmdW5jdGlvbi4gSSBqdXN0IHdhbnQgdG8gZW5zdXJlIHRoYXQgaXQgb3BlcmF0ZXMgY29ycmVjdGx5LiBUaGF0JiMzOTtzIGEgZ29vZCBzYW5pdHkgY2hlY2suIEkgd2FudCB0byBhdm9pZCBhbnkgbWlzY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3ZyaW5nX3NldF9udW1fYWRkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvdmhvc3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zob3N0LmM9MjA1Nz1zdGF0aWMgbG9uZyB2aG9zdF92cmluZ19zZXRfYWRkcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkLFxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yMTA4LVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjIxMDk6c3RhdGljIGxvbmcgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyKHN0cnVjdCB2aG9zdF9kZXYgKmQsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjExMC1cdFx0XHRcdCAgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTIxNDE9bG9uZyB2aG9zdF92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfZGV2ICpkLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHZvaWQgX191c2VyICphcmdwKVxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yMTU3LVx0ICAgIGlvY3RsID09IFZIT1NUX1NFVF9WUklOR19BRERSKSB7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MjE1ODpcdFx0cmV0dXJuIHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcihkLCB2cSwgaW9jdGwsIGFyZ3ApO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTIxNTktXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4OTQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSB2aG9zdF92cmluZ19pb2N0bCBGdW5jdGlvbioqCgpPa2F5LCBzbyBgdmhvc3RfdnJpbmdfaW9jdGxgIGlzIHRoZSBrZXkgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIHZpcnR1YWwgZGV2aWNlIHJpbmdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIHN5c3RlbS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKmNhbGxlZCogZnJvbSB3aXRoaW4gdGhlIGJyb2FkZXIgVkhPU1QgYXJjaGl0ZWN0dXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBjcnVjaWFsIGNvbnRleHQgcmVnYXJkaW5nIGl0cyBwdXJwb3NlIGFuZCB0aGUgZXZlbnRzIHRoYXQgdHJpZ2dlciBpdHMgZXhlY3V0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHN0YWNrIGlzIHRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3ZyaW5nX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmM9MTczOD1zdGF0aWMgbG9uZyB2aG9zdF9uZXRfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4MjktXHRcdGlmIChyID09IC1FTk9JT0NUTENNRClcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTgzMDpcdFx0XHRyID0gdmhvc3RfdnJpbmdfaW9jdGwoXHUwMDI2bi1cdTAwM2VkZXYsIGlvY3RsLCBhcmdwKTtcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTgzMS1cdFx0ZWxzZVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzNjI9dmhvc3Rfc2NzaV9pb2N0bChzdHJ1Y3QgZmlsZSAqZixcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDMwLVx0XHRpZiAociA9PSAtRU5PSU9DVExDTUQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNDMxOlx0XHRcdHIgPSB2aG9zdF92cmluZ19pb2N0bChcdTAwMjZ2cy1cdTAwM2VkZXYsIGlvY3RsLCBhcmdwKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0MzItXHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cy1cdTAwM2VkZXYubXV0ZXgpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jPTMxNz1zdGF0aWMgbG9uZyB2aG9zdF90ZXN0X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzUyLSAgICAgICAgICAgICAgICBpZiAociA9PSAtRU5PSU9DVExDTUQpXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozNTM6ICAgICAgICAgICAgICAgICAgICAgICAgciA9IHZob3N0X3ZyaW5nX2lvY3RsKFx1MDAyNm4tXHUwMDNlZGV2LCBpb2N0bCwgYXJncCk7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNTQtXHRcdHZob3N0X3Rlc3RfZmx1c2gobik7XG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmM9NjMyPXN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtNzIwLVxuZHJpdmVycy92aG9zdC92ZHBhLmM6NzIxOlx0ciA9IHZob3N0X3ZyaW5nX2lvY3RsKFx1MDAyNnYtXHUwMDNldmRldiwgY21kLCBhcmdwKTtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTcyMi1cdGlmIChyKVxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYz0yMTA5PXN0YXRpYyBsb25nIHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkLFxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yMTQwLX1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoyMTQxOmxvbmcgdmhvc3RfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X2RldiAqZCwgdW5zaWduZWQgaW50IGlvY3RsLCB2b2lkIF9fdXNlciAqYXJncClcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yMTQyLXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjI3OC19XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MjI3OTpFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF92cmluZ19pb2N0bCk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjI4MC1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg9MjIyPWxvbmcgdmhvc3RfZGV2X2lvY3RsKHN0cnVjdCB2aG9zdF9kZXYgKiwgdW5zaWduZWQgaW50IGlvY3RsLCB2b2lkIF9fdXNlciAqYXJncCk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg6MjIzOmxvbmcgdmhvc3RfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X2RldiAqZCwgdW5zaWduZWQgaW50IGlvY3RsLCB2b2lkIF9fdXNlciAqYXJncCk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjI0LWxvbmcgdmhvc3Rfd29ya2VyX2lvY3RsKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgdW5zaWduZWQgaW50IGlvY3RsLFxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz04ODk9c3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTkzNS1cdFx0aWYgKHIgPT0gLUVOT0lPQ1RMQ01EKVxuZHJpdmVycy92aG9zdC92c29jay5jOjkzNjpcdFx0XHRyID0gdmhvc3RfdnJpbmdfaW9jdGwoXHUwMDI2dnNvY2stXHUwMDNlZGV2LCBpb2N0bCwgYXJncCk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTM3LVx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5ODMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYnJlYWtkb3duIG9mIHRoaXMuCgoqKkZvY3VzaW5nIG9uIHZob3N0X3ZyaW5nX2lvY3RsKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIGB2aG9zdF92cmluZ19pb2N0bGAgaXMgZ2V0dGluZyBjYWxsZWQgZnJvbSBhIHdob2xlIGJ1bmNoIG9mIHBsYWNlcyB3aXRoaW4gdGhlIHZob3N0IGZyYW1ld29yazogYHZob3N0X25ldF9pb2N0bGAsIGB2aG9zdF9zY3NpX2lvY3RsYCwgYHZob3N0X3Rlc3RfaW9jdGxgLCBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAsIGFuZCBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYC4gVGhhdCBzdWdnZXN0cyBpdCYjMzk7cyBhIHByZXR0eSBjZW50cmFsIGZ1bmN0aW9uLCBoYW5kbGluZyB2aXJ0dWFsIHJpbmcgaW50ZXJhY3Rpb25zLiBJJiMzOTtkIHNheSB0aGF0IG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLiBUaGUgZmFjdCBpdCYjMzk7cyB1c2VkIGFjcm9zcyBzbyBtYW55IGRpZmZlcmVudCBiYWNrZW5kIGRyaXZlcnMgaW5kaWNhdGVzIGEgY2VudHJhbCBwb2ludCBvZiBjb250cm9sLCBzbyBhbnkgaXNzdWVzIGhlcmUgd291bGQgaGF2ZSB3aWRlc3ByZWFkIGltcGFjdC4KCk5vdywgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgbG9naWMgd2l0aGluIHRoaXMgZnVuY3Rpb24sIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgX192aG9zdF92cV9tZXRhX3Jlc2V0YC4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgYSByZXNldCBvcGVyYXRpb24gaXMgYSBjcml0aWNhbCBwYXJ0IG9mIHZyaW5nIGhhbmRsaW5nLCBzbyB0aGlzIGxvb2tzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmRhbWVudGFsIG9wZXJhdGlvbnMgaGFwcGVuaW5nIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdmhvc3RfdnFfbWV0YV9yZXNldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvdmhvc3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zob3N0LmM9MzM3PUVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X3BvbGxfcXVldWUpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTMzOC1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMzk6c3RhdGljIHZvaWQgX192aG9zdF92cV9tZXRhX3Jlc2V0KHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM0MC17XG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTM0Nz1zdGF0aWMgdm9pZCB2aG9zdF92cV9tZXRhX3Jlc2V0KHN0cnVjdCB2aG9zdF9kZXYgKmQpXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGQtXHUwMDNlbnZxczsgJiM0MzsmIzQzO2kpXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzUyOlx0XHRfX3Zob3N0X3ZxX21ldGFfcmVzZXQoZC1cdTAwM2V2cXNbaV0pO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1My19XG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTM2Nz1zdGF0aWMgdm9pZCB2aG9zdF92cV9yZXNldChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM5Ni1cdHZob3N0X3ZyaW5nX2NhbGxfcmVzZXQoXHUwMDI2dnEtXHUwMDNlY2FsbF9jdHgpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jOjM5NzpcdF9fdmhvc3RfdnFfbWV0YV9yZXNldCh2cSk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzk4LX1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9MjEwOT1zdGF0aWMgbG9uZyB2aG9zdF92cmluZ19zZXRfbnVtX2FkZHIoc3RydWN0IHZob3N0X2RldiAqZCxcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjEzNC1cdCAqL1xuZHJpdmVycy92aG9zdC92aG9zdC5jOjIxMzU6XHRfX3Zob3N0X3ZxX21ldGFfcmVzZXQodnEpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTIxMzYtXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTIyODE9aW50IHZob3N0X2luaXRfZGV2aWNlX2lvdGxiKHN0cnVjdCB2aG9zdF9kZXYgKmQpXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTIyOTctXHRcdHZxLVx1MDAzZWlvdGxiID0gbmlvdGxiO1xuZHJpdmVycy92aG9zdC92aG9zdC5jOjIyOTg6XHRcdF9fdmhvc3RfdnFfbWV0YV9yZXNldCh2cSk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjI5OS1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkxMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDYyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIFN0cmF0ZWd5IGZvciBUZXN0aW5nIHZob3N0X3ZyaW5nX2lvY3RsKioKCk9rYXksIGhlcmUmIzM5O3MgbXkgcGxhbiB0byBjb25maWd1cmUgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgZm9yIGB2aG9zdF92cmluZ19pb2N0bGAuIFNpbmNlIGBfX3Zob3N0X3ZxX21ldGFfcmVzZXRgIGFuZCBgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyYCBhcmUgc3RhdGljLCBgdmhvc3RfdnJpbmdfaW9jdGxgIGlzIHRoZSBrZXkgc3ltYm9sIEkgbmVlZCB0byBmb2N1cyBvbi4gSXQmIzM5O3MgZXhwb3J0ZWQsIHNvIGl0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCkkmIzM5O3ZlIGNoZWNrZWQgdGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb25zLiBgVkhPU1RfTkVUYCwgYFZIT1NUX1ZTT0NLYCwgYFZIT1NUX1NDU0lgLCBhbmQgYFZIT1NUX1ZEUEFgIGFsbCBsb29rIHByb21pc2luZy4gSSBjYW4gaWdub3JlIGBWSE9TVF9DUk9TU19FTkRJQU5fTEVHQUNZYCBmb3Igbm93LiBgVkhPU1RfSU9UTEJgIGlzIHNlbGVjdGVkIGJ5IGBWSE9TVGAsIGFuZCBgVkhPU1RgIGlzIHNlbGVjdGVkIGJ5IGBWSE9TVF9ORVRgLiBCdXQgaXMgYFZIT1NUX05FVGAgc3VmZmljaWVudD8KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gYFZIT1NUX05FVGAgcmVsaWVzIG9uIGBORVQgJmFtcDsmYW1wOyBFVkVOVEZEICZhbXA7JmFtcDsgKFRVTiB8fCAhVFVOKSAmYW1wOyZhbXA7IChUQVAgfHwgIVRBUClgLiBTbywgYE5FVGAgYW5kIGBFVkVOVEZEYCBhcmUgZXNzZW50aWFsLiBgVkhPU1RfVlNPQ0tgIGRlcGVuZHMgb24gYFZTT0NLRVRTICZhbXA7JmFtcDsgRVZFTlRGRGAsIGFuZCBgVkhPU1RfU0NTSWAgb24gYFRBUkdFVF9DT1JFICZhbXA7JmFtcDsgRVZFTlRGRGAuIGBWSE9TVF9WRFBBYCBuZWVkcyBgRVZFTlRGRCAmYW1wOyZhbXA7IFZEUEFgLgoKSW5pdGlhbGx5LCBJIHRob3VnaHQgZW5hYmxpbmcgYFZIT1NUX05FVGAsIGBWSE9TVF9WU09DS2AsIGFuZCBgVkhPU1RfVkRQQWAgd291bGQgYmUgdGhlIGJlc3QuIEJ1dCwgc2luY2UgdGhlIGNvcmUgZnVuY3Rpb24gSSYjMzk7bSB0ZXN0aW5nIGlzIGluIHRoZSBjb3JlIHZob3N0IG1vZHVsZSwgbWF5YmUgb25seSBgVkhPU1RfTkVUYCBpcyBlbm91Z2guIEJ1dCBmb3IgYnJvYWRlciBjb3ZlcmFnZSwgSSBzaG91bGQgY29uc2lkZXIgYWRkaW5nIGBWSE9TVF9WU09DS2AgYW5kIGBWSE9TVF9TQ1NJYC4KCldhaXQgYSBtaW51dGUsIGBWSE9TVGAgaXRzZWxmIGlzIGEgdHJpc3RhdGUuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MsIHNvIG5vdyBJIGNhbiBlbmFibGUgYFZIT1NUYCwgYFZIT1NUX05FVGAsIGFuZCBgVkhPU1RfVlNPQ0tgLgoKQSBxdWljayBwZWVrIGF0IGBkcml2ZXJzL3Zob3N0L0tjb25maWdgIHJldmVhbHMgdGhhdCBgVkhPU1RgIGlzIGEgdHJpc3RhdGUgdGhhdCAqc2VsZWN0cyogYFZIT1NUX0lPVExCYCBhbmQgYFZIT1NUX1RBU0tgLiBJdCBkb2VzbiYjMzk7dCBoYXZlIGEgcHJvbXB0LCBtZWFuaW5nIGl0IGNhbiYjMzk7dCBiZSBlbmFibGVkIGRpcmVjdGx5LiBJbnN0ZWFkLCBJIG5lZWQgdG8gZW5hYmxlIGBWSE9TVF9ORVRgIG9yIGBWSE9TVF9WU09DS2AuCgpDb25maXJtZWQ6IGBWSE9TVF9ORVRgIGlzIGEgdHJpc3RhdGUsICYjMzQ7SG9zdCBrZXJuZWwgYWNjZWxlcmF0b3IgZm9yIHZpcnRpbyBuZXQmIzM0OywgYW5kIGBWSE9TVF9WU09DS2AgaXMgYWxzbyBhIHRyaXN0YXRlLCBhbmQgJiMzNDt2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyJiMzNDsuIEFuZCBgVkhPU1RfVkRQQWAgaXMgYWxzbyB0cmlzdGF0ZSwgYXMgdGhlICYjMzQ7Vmhvc3QgZHJpdmVyIGZvciB2RFBBLWJhc2VkIGJhY2tlbmQmIzM0Oy4KClNvLCBJIHRoaW5rIGVuYWJsaW5nIGBWSE9TVF9ORVRgLCBgVkhPU1RfVlNPQ0tgLCBhbmQgYFZIT1NUX1ZEUEFgIGlzIHRoZSBiZXN0IGFwcHJvYWNoIGZvciB0ZXN0aW5nIGB2aG9zdF92cmluZ19pb2N0bGAgYW5kIHRoZSBicm9hZGVyIHZob3N0IGZ1bmN0aW9uYWxpdHkuIEl0IHByb3ZpZGVzIGdvb2QgY292ZXJhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZIT1NUX1RFU1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjExCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgdGhlIFZob3N0IFRlc3QgSW5mcmFzdHJ1Y3R1cmUqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBpc24mIzM5O3QgdGhlcmUgYSB0ZXN0IGZpbGUgc3BlY2lmaWNhbGx5IGZvciB2aG9zdD8gTXkgbWVtb3J5JiMzOTtzIHVzdWFsbHkgcHJldHR5IGdvb2QsIGFuZCBJIHNlZW0gdG8gcmVjYWxsIHNlZWluZyBgZHJpdmVycy92aG9zdC90ZXN0LmNgIHNvbWV3aGVyZS4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIGRlYnVnZ2luZyBvciBzdGFydGluZyBmcm9tIHNjcmF0Y2gsIEkmIzM5O2QgYmV0dGVyIGNvbmZpcm0gdGhhdC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFJpZ2h0LCBzbyBpZiB0aGF0IGZpbGUgKmRvZXMqIGV4aXN0LCBJIHNob3VsZCBrbm93IGhvdyBpdCYjMzk7cyBiZWluZyBidWlsdCBvciBpbmNsdWRlZCBpbiB0aGUgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGlzIHRlc3QgZmlsZS4gTGV0JiMzOTtzIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBNYWtlZmlsZSBpbiB0aGUgYGRyaXZlcnMvdmhvc3RgIGRpcmVjdG9yeSB0byBzZWUgaG93IHRoaXMgdGVzdCBmaWxlIGlzIGludGVncmF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGVzdFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ0MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6CgoqKkRpZ2dpbmcgaW50byBWaG9zdCBUZXN0IEZpbGVzKioKClJpZ2h0LCBhIG1vbWVudC4gSG9sZCBvbi4gSSBqdXN0IHNwb3R0ZWQgc29tZXRoaW5nIGludGVyZXN0aW5nIGluIHRoYXQgZ3JlcCBvdXRwdXQg4oCTIHRoZSBgZHJpdmVycy92aG9zdC90ZXN0LmNgIGZpbGUuIFRoYXQmIzM5O3MgYSBzdHJvbmcgc2lnbmFsLiBHaXZlbiB0aGF0IGZpbmRpbmcsIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gcmV2aXNpdCB0aGUgYGRyaXZlcnMvdmhvc3QvTWFrZWZpbGVgLiBUaGUgdGVzdCBjb2RlIGlzIGxpa2VseSBpbnRlZ3JhdGVkIG9yIHJlZmVyZW5jZWQgaW4gdGhlIGJ1aWxkIHByb2Nlc3MgdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRob3NlIHRlc3RzIGFyZSBiZWluZyBjb21waWxlZCBhbmQgbGlua2VkLiBUaGF0IE1ha2VmaWxlIHdpbGwgZ2l2ZSBtZSBjcnVjaWFsIGNsdWVzIGFib3V0IHRoZSB0ZXN0aW5nIGluZnJhc3RydWN0dXJlIGZvciB2aG9zdC4gVGhpcyBjb3VsZCBsZWFkIHRvIHVuY292ZXJpbmcgc29tZSByZWxldmFudCB0ZXN0IHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NjIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGEgU3VzcGVjdGVkIEZpbGUgUGF0aCBEaXNjcmVwYW5jeSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB0cmFjayBkb3duIHNvbWV0aGluZyByZWxhdGVkIHRvIHZob3N0LCBhbmQgSSAqdGhvdWdodCogdGhlIHJlbGV2YW50IGZpbGUgbWlnaHQgYmUgYGRyaXZlcnMvdmhvc3QvdnJpbmdoLmNgLiBCdXQgdGhlbiBJIHJhbiBhIGBncmVwYCBhbmQgdGhlIG91dHB1dCBwb2ludGVkIG1lIHRvd2FyZHMgYGRyaXZlcnMvdmhvc3QvdGVzdC5jYC4gSG1tLCB0aGF0JiMzOTtzIGEgYml0IG9kZC4gSSBrbm93IHRoZXNlIHN5c3RlbXMgcHJldHR5IHdlbGwsIGFuZCBJIGRvbiYjMzk7dCByZWNhbGwgc2VlaW5nIGFueXRoaW5nIGNyaXRpY2FsIGluIHRoZSBgdGVzdC5jYCBmaWxlIHVzdWFsbHkuIFN0aWxsLCB0aGUgZ3JlcCBkb2VzbiYjMzk7dCBsaWUuIEFscmlnaHQsIGJlc3QgdG8ganVzdCBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL3Zob3N0L3Rlc3QuY2AgZmlsZSBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaW4gdGhlcmUuIEl0JiMzOTtzIHByb2JhYmx5IGEgdGVzdCBjYXNlLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaWYgdGhpcyBpcyB3aGF0JiMzOTtzIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3Rlc3RfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Rlc3QuYz0yNjU9c3RhdGljIGxvbmcgdmhvc3RfdGVzdF9zZXRfYmFja2VuZChzdHJ1Y3Qgdmhvc3RfdGVzdCAqbiwgdW5zaWduZWQgaW5kZXgsIGludCBmZClcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zMTYtXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozMTc6c3RhdGljIGxvbmcgdmhvc3RfdGVzdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzE4LVx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmM9MzYwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3Rlc3RfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNjItXHQucmVsZWFzZSAgICAgICAgPSB2aG9zdF90ZXN0X3JlbGVhc2UsXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozNjM6XHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF90ZXN0X2lvY3RsLFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzY0LVx0LmNvbXBhdF9pb2N0bCAgID0gY29tcGF0X3B0cl9pb2N0bCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNjgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgc3VtbWFyaXplZCwgZ2VhcmVkIHRvd2FyZHMgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSB2aG9zdCBEcml2ZXIgVGVzdCBTdHJ1Y3R1cmUqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHRlc3RpbmcgbGFuZHNjYXBlIGZvciBgdmhvc3RgLiBHaXZlbiBhIGB0ZXN0LmNgIGZpbGUsIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgdGhlIGZpcnN0IHBsYWNlIHRvIGxvb2sgZm9yIGl0cyBidWlsZCBpbnN0cnVjdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB3b3VsZCBiZSB3aXRoaW4gdGhlIGBkcml2ZXJzL3Zob3N0L01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcHJpbWFyeSBidWlsZCBjb25maWd1cmF0aW9ucyBzaG91bGQgcmVzaWRlLCBpbmNsdWRpbmcgaG93IHRoaXMgc3BlY2lmaWMgdGVzdCBwcm9ncmFtIGlzIGNvbXBpbGVkIGFuZCBsaW5rZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0JiMzOTtzIGEgc3RhbmRhbG9uZSB0ZXN0LCBwYXJ0IG9mIGEgbGFyZ2VyIHRlc3Qgc3VpdGUsIG9yIGlmIGl0IHV0aWxpemVzIGFueSBzcGVjaWZpYyB2aG9zdCBpbmZyYXN0cnVjdHVyZSBkdXJpbmcgaXRzIGJ1aWxkIHByb2Nlc3MuIFRoZSBNYWtlZmlsZSB3aWxsIGJlIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGJ1aWxkIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGVzdFxcLmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzg1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmV2aWV3aW5nIHRoaXMgY29kZToKCioqVmhvc3QgVGVzdCBDb2RlIExvY2F0aW9uIENoZWNrKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgYGRyaXZlcnMvdmhvc3QvdGVzdC5jYCBmaWxlIG1lbnRpb25lZC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY29uZmlybSBpdHMgYnVpbGQgcHJvY2Vzcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBxdWljayBjaGVjayBvZiB0aGUgYGRyaXZlcnMvdmhvc3QvTWFrZWZpbGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyB0ZXN0IGlzIGNvbXBpbGVkIGFuZCBsaW5rZWQgd2l0aGluIHRoZSBicm9hZGVyIHZob3N0IGluZnJhc3RydWN0dXJlLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGggdGhlIG90aGVyIHZob3N0IG1vZHVsZXMgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29tcGlsYXRpb24gZmxhZ3Mgb3IgZGVwZW5kZW5jaWVzIEkgc2hvdWxkIGtub3cgYWJvdXQuIFRoaXMgTWFrZWZpbGUgc2hvdWxkIGNvbnRhaW4gdGhlIGFuc3dlcnMgSSYjMzk7bSBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRvYmotJChDT05GSUdfVkhPU1RfTkVUKSAmIzQzOz0gdmhvc3RfbmV0Lm9cbiAgIDM6XHR2aG9zdF9uZXQteSA6PSBuZXQub1xuICAgNDpcdFxuICAgNTpcdG9iai0kKENPTkZJR19WSE9TVF9TQ1NJKSAmIzQzOz0gdmhvc3Rfc2NzaS5vXG4gICA2Olx0dmhvc3Rfc2NzaS15IDo9IHNjc2kub1xuICAgNzpcdFxuICAgODpcdG9iai0kKENPTkZJR19WSE9TVF9WU09DSykgJiM0Mzs9IHZob3N0X3Zzb2NrLm9cbiAgIDk6XHR2aG9zdF92c29jay15IDo9IHZzb2NrLm9cbiAgMTA6XHRcbiAgMTE6XHRvYmotJChDT05GSUdfVkhPU1RfUklORykgJiM0Mzs9IHZyaW5naC5vXG4gIDEyOlx0XG4gIDEzOlx0b2JqLSQoQ09ORklHX1ZIT1NUX1ZEUEEpICYjNDM7PSB2aG9zdF92ZHBhLm9cbiAgMTQ6XHR2aG9zdF92ZHBhLXkgOj0gdmRwYS5vXG4gIDE1Olx0XG4gIDE2Olx0b2JqLSQoQ09ORklHX1ZIT1NUKVx0JiM0Mzs9IHZob3N0Lm9cbiAgMTc6XHRcbiAgMTg6XHRvYmotJChDT05GSUdfVkhPU1RfSU9UTEIpICYjNDM7PSB2aG9zdF9pb3RsYi5vXG4gIDE5Olx0dmhvc3RfaW90bGIteSA6PSBpb3RsYi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODkzCgkJCQkJCQlvdXRwdXQ6IDE3MwoJCQkJCQkJdGhvdWdodHM6IDU1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogdmhvc3RfdnJpbmdfaW9jdGwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgZHJpdmVycy92aG9zdC90ZXN0LmNgIGlzbiYjMzk7dCBpbiB0aGUgTWFrZWZpbGUuIFRoYXQmIzM5O3MgYSB0ZXN0IG1vZHVsZSwgbGlrZWx5IG5vdCBidWlsdCBieSBkZWZhdWx0LCBvciBidWlsdCB2aWEgc29tZSBzZXBhcmF0ZSBjb25maWd1cmF0aW9uLiBUaGUgbWFpbiBmb2N1cyBoZXJlIGlzIGRlZmluaXRlbHkgYFZIT1NUX05FVGAuCgpNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHN1bW1hcml6ZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4gVGhlIHBhdGNoIGFkZHMgYSBjYWxsIHRvIGBfX3Zob3N0X3ZxX21ldGFfcmVzZXQodnEpYCB3aXRoaW4gYHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcigpYC4gVGhpcyBgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyKClgIGZ1bmN0aW9uIGl0c2VsZiBpcyBjYWxsZWQgZnJvbSBgdmhvc3RfdnJpbmdfaW9jdGwoKWAgd2hlbiBzcGVjaWZpYyBpb2N0bHMgYXJlIGludm9rZWQ6IGBWSE9TVF9TRVRfVlJJTkdfQUREUmAgb3IgYFZIT1NUX1NFVF9WUklOR19OVU1gLiBDcml0aWNhbGx5LCBgdmhvc3RfdnJpbmdfaW9jdGwoKWAgaXMgKnRoZSogZnVuY3Rpb24gY2FsbGVkIGJ5IHZhcmlvdXMgdmhvc3QgZHJpdmVycyDigJMgYHZob3N0X25ldGAsIGB2aG9zdF92c29ja2AsIGB2aG9zdF9zY3NpYCwgYHZob3N0X3ZkcGFgLCBhbmQgcHJvYmFibHkgb3RoZXJzLgoKVGhpcyBpcyBhIGNsZWFyLCByZWFjaGFibGUgY29kZSBwYXRoLCBhbmQgaXQgZGVmaW5pdGVseSBzb3VuZHMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gZnV6ei4gVGhlIGlkZWFsIHRhcmdldCBpcyBgdmhvc3RfdnJpbmdfaW9jdGxgLiBUbyBlbmFibGUgaXQsIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBWSE9TVF9ORVRgLCBgVkhPU1RfVlNPQ0tgLCBhbmQgYFZIT1NUX1ZEUEFgLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMuIGBWSE9TVF9ORVRgIHJlbGllcyBvbiBgTkVUICZhbXA7JmFtcDsgRVZFTlRGRCAmYW1wOyZhbXA7IChUVU4gfHwgIVRVTikgJmFtcDsmYW1wOyAoVEFQIHx8ICFUQVApYC4gR29vZCwgSSBjYW4gc2F0aXNmeSB0aG9zZS4gYFZIT1NUX1ZTT0NLYCBuZWVkcyBgVlNPQ0tFVFMgJmFtcDsmYW1wOyBFVkVOVEZEYCwgYW5kIGBWSE9TVF9WRFBBYCBuZWVkcyBgRVZFTlRGRCAmYW1wOyZhbXA7IFZEUEFgLiBJIHRoaW5rIHByb3ZpZGluZyB0aGVzZSB3aWxsIGJlIGVub3VnaC4KCkp1c3QgdG8gYmUgc3VyZSwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYHZob3N0X3ZyaW5nX2lvY3RsYCBpcyB0aGUgbW9zdCBlZmZlY3RpdmUgc3ltYm9sIHRvIGZvY3VzIG9uLiBZZXMsIGl0JiMzOTtzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgaW9jdGxzIHRoYXQgdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC4gYHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcmAgaXRzZWxmIGlzIHN0YXRpYywgc28gaXQgbWlnaHQgYmUgaW5saW5lZCBvciBoYXZlIGEgbm9uLWRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBCdXQgYHZob3N0X3ZyaW5nX2lvY3RsYCBpcyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYy4gSXQmIzM5O3MgdGhlIHJpZ2h0IGNob2ljZS4KCkluIHN1bW1hcnksIHRoZSBwYXRjaCBtb2RpZmllcyBgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyYCB0byByZXNldCB0aGUgbWV0YWRhdGEgY2FjaGUgd2hlbiB0aGUgdnJpbmcgYWRkcmVzcyBvciBzaXplIGlzIHVwZGF0ZWQuIFRoaXMgY2hhbmdlIGlzIGFjY2Vzc2VkIHRocm91Z2ggYHZob3N0X3ZyaW5nX2lvY3RsYCB3aGljaCBoYW5kbGVzIGBWSE9TVF9TRVRfVlJJTkdfQUREUmAgb3IgYFZIT1NUX1NFVF9WUklOR19OVU1gIGlvY3Rscy4gVGhlc2UgaW9jdGxzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSBieSBzZXZlcmFsIHZob3N0IGRyaXZlcnMgc3VjaCBhcyBgdmhvc3QtbmV0YCBhbmQgYHZob3N0LXZzb2NrYC4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIHRoZXJlZm9yZSwgaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIGZ1enouIEkgd2lsbCBzZWxlY3QgYHZob3N0X3ZyaW5nX2lvY3RsYCBhcyB0aGUgZm9jdXMgZm9yIGZ1enppbmcgYW5kIHNldCB0aGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9ORVQmIzM0OywKICAgICYjMzQ7VkhPU1RfVlNPQ0smIzM0OywKICAgICYjMzQ7VkhPU1RfVkRQQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3ZyaW5nX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB2aG9zdF92cmluZ19zZXRfbnVtX2FkZHJgIHRvIHJlc2V0IHRoZSBtZXRhZGF0YSBjYWNoZSB3aGVuIHRoZSB2cmluZyBhZGRyZXNzIG9yIHNpemUgaXMgY2hhbmdlZC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIGB2aG9zdF92cmluZ19pb2N0bGAgd2l0aCBgVkhPU1RfU0VUX1ZSSU5HX0FERFJgIG9yIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCBpb2N0bHMsIHdoaWNoIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSBieSB2YXJpb3VzIHZob3N0IGRyaXZlcnMgKGUuZy4sIHZob3N0LW5ldCwgdmhvc3QtdnNvY2spLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9ORVQmIzM0OywKICAgICYjMzQ7VkhPU1RfVlNPQ0smIzM0OywKICAgICYjMzQ7VkhPU1RfVkRQQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3ZyaW5nX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB2aG9zdF92cmluZ19zZXRfbnVtX2FkZHJgIHRvIHJlc2V0IHRoZSBtZXRhZGF0YSBjYWNoZSB3aGVuIHRoZSB2cmluZyBhZGRyZXNzIG9yIHNpemUgaXMgY2hhbmdlZC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIGB2aG9zdF92cmluZ19pb2N0bGAgd2l0aCBgVkhPU1RfU0VUX1ZSSU5HX0FERFJgIG9yIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCBpb2N0bHMsIHdoaWNoIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSBieSB2YXJpb3VzIHZob3N0IGRyaXZlcnMgKGUuZy4sIHZob3N0LW5ldCwgdmhvc3QtdnNvY2spLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDM6MTQ6MjYuNzY4OTYwNDU5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ5MDA0MDI5MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfTkVUXCIsXG4gICAgXCJWSE9TVF9WU09DS1wiLFxuICAgIFwiVkhPU1RfVkRQQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X3ZyaW5nX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcmAgdG8gcmVzZXQgdGhlIG1ldGFkYXRhIGNhY2hlIHdoZW4gdGhlIHZyaW5nIGFkZHJlc3Mgb3Igc2l6ZSBpcyBjaGFuZ2VkLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgYHZob3N0X3ZyaW5nX2lvY3RsYCB3aXRoIGBWSE9TVF9TRVRfVlJJTkdfQUREUmAgb3IgYFZIT1NUX1NFVF9WUklOR19OVU1gIGlvY3Rscywgd2hpY2ggYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIGJ5IHZhcmlvdXMgdmhvc3QgZHJpdmVycyAoZS5nLiwgdmhvc3QtbmV0LCB2aG9zdC12c29jaykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAzOjE0OjI2Ljc2ODk2ODEwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwODU5MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2EwMDQwYzNjMGYyZDNlZWQ1ZDZiODkyMDA1YjFhNDE4YTYxMjE0ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzIDAzOjE0OjI1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuY1xcbmluZGV4IDRjNTI1YjNlMTZlYWQuLjc3Yzk2OTkzMTAwYjUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5jXFxuKysrIGIvZHJpdmVycy92aG9zdC92aG9zdC5jXFxuQEAgLTIxMjYsNiArMjEyNiwxNCBAQCBzdGF0aWMgbG9uZyB2aG9zdF92cmluZ19zZXRfbnVtX2FkZHIoc3RydWN0IHZob3N0X2RldiAqZCxcXG4gXFx0XFx0QlVHKCk7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBtZXRhZGF0YSBjYWNoZSBob2xkcyB0aGUgSU9UTEIgbWFwcGluZyB0aGF0IGJhY2tlZCB0aGUgcHJldmlvdXNcXG4rXFx0ICogZGVzYy9hdmFpbC91c2VkIGFkZHJlc3NlcyBhbmQgdnJpbmcgc2l6ZSwgYm90aCBvZiB3aGljaCBhcmUgYmVpbmdcXG4rXFx0ICogcmVwbGFjZWQgaGVyZS4gIGlvdGxiX2FjY2Vzc19vaygpIHRha2VzIGEgY2FjaGUgaGl0IGFzIHByb29mIHRoYXQgdGhlXFxuK1xcdCAqIHJlZ2lvbiB3YXMgdmFsaWRhdGVkLCBzbyB0aGUgc3RhbGUgZW50cmllcyBoYXZlIHRvIGdvLlxcbitcXHQgKi9cXG4rXFx0X192aG9zdF92cV9tZXRhX3Jlc2V0KHZxKTtcXG4rXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4gXFxuIFxcdHJldHVybiByO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMzoxNDoyNy4yNTEyNjkyNzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NDQxODA4NjAzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9ORVRcIixcbiAgICBcIlZIT1NUX1ZTT0NLXCIsXG4gICAgXCJWSE9TVF9WRFBBXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfdnJpbmdfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyYCB0byByZXNldCB0aGUgbWV0YWRhdGEgY2FjaGUgd2hlbiB0aGUgdnJpbmcgYWRkcmVzcyBvciBzaXplIGlzIGNoYW5nZWQuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBgdmhvc3RfdnJpbmdfaW9jdGxgIHdpdGggYFZIT1NUX1NFVF9WUklOR19BRERSYCBvciBgVkhPU1RfU0VUX1ZSSU5HX05VTWAgaW9jdGxzLCB3aGljaCBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgYnkgdmFyaW91cyB2aG9zdCBkcml2ZXJzIChlLmcuLCB2aG9zdC1uZXQsIHZob3N0LXZzb2NrKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2EwMDQwYzNjMGYyZDNlZWQ1ZDZiODkyMDA1YjFhNDE4YTYxMjE0ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMDM6MTQ6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmMgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcbmluZGV4IDRjNTI1YjNlMTZlYWQuLjc3Yzk2OTkzMTAwYjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcbisrKyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuY1xuQEAgLTIxMjYsNiArMjEyNiwxNCBAQCBzdGF0aWMgbG9uZyB2aG9zdF92cmluZ19zZXRfbnVtX2FkZHIoc3RydWN0IHZob3N0X2RldiAqZCxcbiBcdFx0QlVHKCk7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogVGhlIG1ldGFkYXRhIGNhY2hlIGhvbGRzIHRoZSBJT1RMQiBtYXBwaW5nIHRoYXQgYmFja2VkIHRoZSBwcmV2aW91c1xuK1x0ICogZGVzYy9hdmFpbC91c2VkIGFkZHJlc3NlcyBhbmQgdnJpbmcgc2l6ZSwgYm90aCBvZiB3aGljaCBhcmUgYmVpbmdcbitcdCAqIHJlcGxhY2VkIGhlcmUuICBpb3RsYl9hY2Nlc3Nfb2soKSB0YWtlcyBhIGNhY2hlIGhpdCBhcyBwcm9vZiB0aGF0IHRoZVxuK1x0ICogcmVnaW9uIHdhcyB2YWxpZGF0ZWQsIHNvIHRoZSBzdGFsZSBlbnRyaWVzIGhhdmUgdG8gZ28uXG4rXHQgKi9cbitcdF9fdmhvc3RfdnFfbWV0YV9yZXNldCh2cSk7XG4rXG4gXHRtdXRleF91bmxvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuIFxuIFx0cmV0dXJuIHI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMzoxNDoyNy4yNTEyNzE4MDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzQyNjI0MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgdmhvc3QgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyBiZWVuIGFwcGxpZWQgdG8gYGRyaXZlcnMvdmhvc3Qvdmhvc3QuY2AuIFRoZSBjb3JlIGNoYW5nZSBpcyB0aGlzIG5ldyBjYWxsIHRvIGBfX3Zob3N0X3ZxX21ldGFfcmVzZXQodnEpO2Agd2l0aGluIGB2aG9zdF92cmluZ19zZXRfbnVtX2FkZHIoKWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgZnVsbHkgdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gaGVyZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgKndoeSogdGhpcyBjYWxsIHdhcyBpbnRyb2R1Y2VkLlxuXG5TcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBkZWZpbml0aW9ucyBhbmQgaW1wbGVtZW50YXRpb25zIG9mIGJvdGggYHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcigpYCBhbmQgYF9fdmhvc3RfdnFfbWV0YV9yZXNldCgpYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlaXIgcm9sZXMgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggZWFjaCBvdGhlci4gSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBkYXRhIHN0cnVjdHVyZXMgdGhleSBtYW5pcHVsYXRlLCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGV5J3JlIGNhbGxlZCwgYW5kIHdoYXQga2luZCBvZiBzdGF0ZSBtYW5hZ2VtZW50IHRoZXkncmUgcmVzcG9uc2libGUgZm9yLiBJJ20gZXhwZWN0aW5nIHRoaXMgYF9fdmhvc3RfdnFfbWV0YV9yZXNldCgpYCBjYWxsIHRvIGJlIGVzc2VudGlhbC4gSSB3YW50IHRvIHVuY292ZXIgYW55IHBvdGVudGlhbCBjb25zZXF1ZW5jZXMgdGhpcyBoYXMgaW4gcGVyZm9ybWFuY2UsIHNlY3VyaXR5IG9yIGNvcnJlY3RuZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTA1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMzoxNDozMC45OTM4OTkwMDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ2NTUyNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdnJpbmdfc2V0X251bV9hZGRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3Qvdmhvc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmM9MjA1Nz1zdGF0aWMgbG9uZyB2aG9zdF92cmluZ19zZXRfYWRkcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkLFxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTIxMDgtXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjIxMDk6c3RhdGljIGxvbmcgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyKHN0cnVjdCB2aG9zdF9kZXYgKmQsXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTIxMTAtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYz0yMTQxPWxvbmcgdmhvc3RfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X2RldiAqZCwgdW5zaWduZWQgaW50IGlvY3RsLCB2b2lkIF9fdXNlciAqYXJncClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yMTU3LVxcdCAgICBpb2N0bCA9PSBWSE9TVF9TRVRfVlJJTkdfQUREUikge1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoyMTU4OlxcdFxcdHJldHVybiB2aG9zdF92cmluZ19zZXRfbnVtX2FkZHIoZCwgdnEsIGlvY3RsLCBhcmdwKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjE1OS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAzOjE0OjMxLjA2ODU2MzQxOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NzE4OTA2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyBhIHZob3N0IGlvY3RsIENhbGwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNhbGwsIHNwZWNpZmljYWxseSB3aXRoaW4gYHZob3N0X3ZyaW5nX2lvY3RsYC4gSXQgc2VlbXMgdGhpcyBpcyBnZXR0aW5nIHRyaWdnZXJlZCB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBlaXRoZXIgc2V0dGluZyB0aGUgdnJpbmcgYWRkcmVzcyBvciB0aGUgdnJpbmcgbnVtYmVyLCBuYW1lbHkgd2l0aCB0aGUgYGlvY3RsYCB2YWx1ZXMgYFZIT1NUX1NFVF9WUklOR19BRERSYCBvciBgVkhPU1RfU0VUX1ZSSU5HX05VTWAuIEFscmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIEl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgY29kZSwgYW5kIEkgYmVsaWV2ZSB0aGF0IGl0J3MgZnVuY3Rpb25pbmcgYXMgaXQgc2hvdWxkLlxuXG5Ob3csIGxldCdzIGp1c3QgY29uZmlybSB0aGF0IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2Ugd2l0aGluIGBkcml2ZXJzL3Zob3N0L3Zob3N0LmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBleHBlY3RlZCBzZXR0aW5ncyBhcmUgZW5hYmxlZCB0byBlbnN1cmUgdGhpcyBiZWhhdmVzIGFzIGV4cGVjdGVkIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LiBUaGF0J3MgdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc0NSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAzOjE0OjMzLjk0MDQ1NjgzN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjI4MjYxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvTWFrZWZpbGU9MTQ9dmhvc3RfdmRwYS15IDo9IHZkcGEub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtMTUtXFxuZHJpdmVycy92aG9zdC9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfVkhPU1QpXFx0Kz0gdmhvc3Qub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtMTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAzOjE0OjM0LjAyMjc1MTI4MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NzQ3MjAxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFZIT1NUIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cbkFscmlnaHQsIHNvIHdlJ3ZlIGdvdCBhIHNpdHVhdGlvbiB3aGVyZSB3ZSdyZSBnb2luZyB0byBuZWVkIGBDT05GSUdfVkhPU1RgLiBUaGUgbG9naWNhbCBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZmxhZyBpcyBkZWZpbmVkIGFuZCB3aGF0IGl0IGRlcGVuZHMgb24uIEknbGwgbmVlZCB0byBnbyBzcGVsdW5raW5nIGluIHRoZSBrZXJuZWwgY29uZmlnIGZpbGVzIGZvciB0aGUgYHZob3N0YCBzdWJzeXN0ZW0g4oCTIHNvIHRoYXQgbWVhbnMgSSdtIGdvaW5nIHN0cmFpZ2h0IHRvIGBkcml2ZXJzL3Zob3N0L0tjb25maWdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLCB0byBtYWtlIHN1cmUgdGhpcyBpcyBnb2luZyB0byBwbGF5IG5pY2Ugd2l0aCB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbiBvZiB0aGlzIHN5c3RlbS4gVGltZSB0byBzZWUgd2hhdCB0aGF0IGBLY29uZmlnYCBmaWxlIHRlbGxzIHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTAyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDM6MTQ6MzcuNTk3NDc0MDA3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NjY0Nzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjI6Y29uZmlnIFZIT1NUX0lPVExCXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy04LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo5OmNvbmZpZyBWSE9TVF9SSU5HXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTEwLVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMTUtXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjE2OmNvbmZpZyBWSE9TVF9UQVNLXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTE3LVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0xOS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MjA6Y29uZmlnIFZIT1NUXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTIxLVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMjctXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjI4Om1lbnVjb25maWcgVkhPU1RfTUVOVVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0yOS1cXHRib29sIFxcXCJWSE9TVCBkcml2ZXJzXFxcIlxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnPTMyPWlmIFZIT1NUX01FTlVcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzMtXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjM0OmNvbmZpZyBWSE9TVF9ORVRcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzUtXFx0dHJpc3RhdGUgXFxcIkhvc3Qga2VybmVsIGFjY2VsZXJhdG9yIGZvciB2aXJ0aW8gbmV0XFxcIlxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTQ1LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo0Njpjb25maWcgVkhPU1RfU0NTSVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00Ny1cXHR0cmlzdGF0ZSBcXFwiVkhPU1RfU0NTSSBUQ00gZmFicmljIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01NS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NTY6Y29uZmlnIFZIT1NUX1ZTT0NLXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU3LVxcdHRyaXN0YXRlIFxcXCJ2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTY5LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo3MDpjb25maWcgVkhPU1RfVkRQQVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03MS1cXHR0cmlzdGF0ZSBcXFwiVmhvc3QgZHJpdmVyIGZvciB2RFBBLWJhc2VkIGJhY2tlbmRcXFwiXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctODItXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjgzOmNvbmZpZyBWSE9TVF9DUk9TU19FTkRJQU5fTEVHQUNZXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkNyb3NzLWVuZGlhbiBzdXBwb3J0IGZvciB2aG9zdFxcXCJcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy05Ny1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6OTg6Y29uZmlnIFZIT1NUX0VOQUJMRV9GT1JLX09XTkVSX0NPTlRST0xcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctOTktXFx0Ym9vbCBcXFwiRW5hYmxlIFZIT1NUX0VOQUJMRV9GT1JLX09XTkVSX0NPTlRST0xcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAzOjE0OjM3LjY3MjE0NTY2MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjE2MTc2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYENPTkZJR19WSE9TVGAuIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGlzIGlzIGEgdHJpc3RhdGUgb3B0aW9uLCBsaWtlbHkgYWN0aW5nIGFzIGEgcGFyZW50IGZvciBhIGJ1bmNoIG9mIHZpcnR1YWxpemF0aW9uIGhvc3QgZmVhdHVyZXMuIE15IGh1bmNoIGlzIGl0J3Mgc2VsZWN0ZWQgKGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5KSBieSB0aGluZ3MgbGlrZSBgVkhPU1RfTkVUYCwgYFZIT1NUX1NDU0lgLCBhbmQgYFZIT1NUX1ZTT0NLYCDigJMgY29tbW9uIHZob3N0LWJhc2VkIGRyaXZlcnMuIFRvIGNvbmZpcm0gdGhpcyByZWxhdGlvbnNoaXAsIEkgcmVhbGx5IG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRob3NlIGRlcGVuZGVudCBvcHRpb25zLiBMZXQncyBzdGFydCBieSBxdWlja2x5IGNoZWNraW5nIHRoZSBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciBib3RoIGBWSE9TVF9ORVRgIGFuZCBgVkhPU1RfTUVOVWAgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZGVwZW5kZW5jaWVzIHdpbGwgZ2l2ZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGBDT05GSUdfVkhPU1RgIGZpdHMgaW50byB0aGUgZ3JlYXRlciBrZXJuZWwgY29uZmlndXJhdGlvbiBzY2hlbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NDksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMzoxNDo0MS4wOTM3NjY1MzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MjU4MTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBWSE9TVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnPTk9Y29uZmlnIFZIT1NUX1JJTkdcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMTAtXFx0dHJpc3RhdGVcXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MTE6XFx0c2VsZWN0IFZIT1NUX0lPVExCXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTEyLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZz0yMD1jb25maWcgVkhPU1RcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMjEtXFx0dHJpc3RhdGVcXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MjI6XFx0c2VsZWN0IFZIT1NUX0lPVExCXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjIzOlxcdHNlbGVjdCBWSE9TVF9UQVNLXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTI0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZz0zND1jb25maWcgVkhPU1RfTkVUXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzYtXFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgRVZFTlRGRCBcXHUwMDI2XFx1MDAyNiAoVFVOIHx8ICFUVU4pIFxcdTAwMjZcXHUwMDI2IChUQVAgfHwgIVRBUClcXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6Mzc6XFx0c2VsZWN0IFZIT1NUXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTM4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZz00Nj1jb25maWcgVkhPU1RfU0NTSVxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTQ4LVxcdGRlcGVuZHMgb24gVEFSR0VUX0NPUkUgXFx1MDAyNlxcdTAwMjYgRVZFTlRGRFxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo0OTpcXHRzZWxlY3QgVkhPU1RcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTAtXFx0c2VsZWN0IFNHX1BPT0xcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZz01Nj1jb25maWcgVkhPU1RfVlNPQ0tcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01OC1cXHRkZXBlbmRzIG9uIFZTT0NLRVRTIFxcdTAwMjZcXHUwMDI2IEVWRU5URkRcXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NTk6XFx0c2VsZWN0IFZIT1NUXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTYwLVxcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NzA9Y29uZmlnIFZIT1NUX1ZEUEFcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03Mi1cXHRkZXBlbmRzIG9uIEVWRU5URkRcXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NzM6XFx0c2VsZWN0IFZIT1NUXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTc0LVxcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDM6MTQ6NDEuMTcwMDMxMzQyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDEyMDE1OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVkhPU1QgQ29uZmlndXJhdGlvbiBEZWNpc2lvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gY29uZmlndXJpbmcgdGhlIHZpcnR1YWwgaG9zdCBmdW5jdGlvbmFsaXR5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzZXR0aW5nIGBWSE9TVF9ORVRgIHdpbGwgYXV0b21hdGljYWxseSBoYW5kbGUgc2VsZWN0aW5nIGBWSE9TVGAsIGFuZCB0aGVuIEkgY2FuIGxldmVyYWdlIGJvdGggYFZIT1NUX05FVGAgYW5kIGBWSE9TVF9NRU5VYC4gQnV0IGhvbGQgb24sIEkgcmVtZW1iZXIgbm93LCBgVkhPU1RfTUVOVWAgaXMganVzdCBmb3IgdGhlIG1lbnUgY29uZmlndXJhdGlvbiBpdHNlbGYuIFNvLCB0byBrZWVwIHRoaW5ncyBzdHJlYW1saW5lZCwgZW5hYmxpbmcgYFZIT1NUX05FVGAgaXMgdGhlIG1vc3QgZGlyZWN0IGFwcHJvYWNoIGJlY2F1c2UgaXQgaGFuZGxlcyB0aGUgYFZIT1NUYCBzZWxlY3Rpb24gaW1wbGljaXRseS4gSnVzdCB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgYWNjdXJhdGUgYW5kIGNvbnNpZGVyIGFueSBwb3RlbnRpYWwgaXNzdWVzLCBzbyBJIHdpbGwgbm93IGdvIGFuZCB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBhc3NvY2lhdGVkIHdpdGggYFZIT1NUX01FTlVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Njk2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDM6MTQ6NDQuNjcxMjM2MTkxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzgyNTI1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWc9MzQ9Y29uZmlnIFZIT1NUX05FVFxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zNS1cXHR0cmlzdGF0ZSBcXFwiSG9zdCBrZXJuZWwgYWNjZWxlcmF0b3IgZm9yIHZpcnRpbyBuZXRcXFwiXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjM2OlxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IEVWRU5URkQgXFx1MDAyNlxcdTAwMjYgKFRVTiB8fCAhVFVOKSBcXHUwMDI2XFx1MDAyNiAoVEFQIHx8ICFUQVApXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTM3LVxcdHNlbGVjdCBWSE9TVFxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnPTQ2PWNvbmZpZyBWSE9TVF9TQ1NJXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTQ3LVxcdHRyaXN0YXRlIFxcXCJWSE9TVF9TQ1NJIFRDTSBmYWJyaWMgZHJpdmVyXFxcIlxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo0ODpcXHRkZXBlbmRzIG9uIFRBUkdFVF9DT1JFIFxcdTAwMjZcXHUwMDI2IEVWRU5URkRcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDktXFx0c2VsZWN0IFZIT1NUXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NTY9Y29uZmlnIFZIT1NUX1ZTT0NLXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU3LVxcdHRyaXN0YXRlIFxcXCJ2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXFxcIlxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo1ODpcXHRkZXBlbmRzIG9uIFZTT0NLRVRTIFxcdTAwMjZcXHUwMDI2IEVWRU5URkRcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTktXFx0c2VsZWN0IFZIT1NUXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NzA9Y29uZmlnIFZIT1NUX1ZEUEFcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzEtXFx0dHJpc3RhdGUgXFxcIlZob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXFxcIlxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo3MjpcXHRkZXBlbmRzIG9uIEVWRU5URkRcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzMtXFx0c2VsZWN0IFZIT1NUXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTc0LVxcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NzU6XFx0ZGVwZW5kcyBvbiBWRFBBXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTc2LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDM6MTQ6NDQuNzQ5MDY3Nzk2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MzE2NjE4MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zIGZvciBWSE9TVCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgbXkgbWVudGFsIGNoZWNrbGlzdCBoZXJlIHN0YXJ0cyB3aXRoIHRoZSBvYnZpb3VzIGRlcGVuZGVuY3kuIFRvIGdldCBgVkhPU1RfTkVUYCBydW5uaW5nLCBJJ2xsIG5lZWQgYm90aCBgTkVUYCBhbmQgYEVWRU5URkRgIGVuYWJsZWQg4oCTIHRoYXQncyBmdW5kYW1lbnRhbC4gVGhpbmtpbmcgYWhlYWQsIGFuZCBzaW5jZSBJJ20gZ29pbmcgdG8gYmUgdXNpbmcgdmhvc3QsIHRoZXJlJ3Mgbm8gaGFybSBpbiBlbmFibGluZyBgVkhPU1RfTUVOVWAgYW5kIGBWSE9TVF9WU09DS2AgYWxvbmdzaWRlIGBWSE9TVF9ORVRgLiBJdCBjb3ZlcnMgYSBicm9hZCBzZXQgb2YgdXNlIGNhc2VzLCBhbmQgbGlrZWx5IHByb3ZpZGVzIHNvbWUgaGVscGZ1bCB1dGlsaXRpZXMuXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyYCBmdW5jdGlvbi4gSSBqdXN0IHdhbnQgdG8gZW5zdXJlIHRoYXQgaXQgb3BlcmF0ZXMgY29ycmVjdGx5LiBUaGF0J3MgYSBnb29kIHNhbml0eSBjaGVjay4gSSB3YW50IHRvIGF2b2lkIGFueSBtaXNjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM0MywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAzOjE0OjQ4LjI4MDczMTY5M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ2MzE3MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdnJpbmdfc2V0X251bV9hZGRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3Qvdmhvc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmM9MjA1Nz1zdGF0aWMgbG9uZyB2aG9zdF92cmluZ19zZXRfYWRkcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkLFxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTIxMDgtXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjIxMDk6c3RhdGljIGxvbmcgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyKHN0cnVjdCB2aG9zdF9kZXYgKmQsXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTIxMTAtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYz0yMTQxPWxvbmcgdmhvc3RfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X2RldiAqZCwgdW5zaWduZWQgaW50IGlvY3RsLCB2b2lkIF9fdXNlciAqYXJncClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yMTU3LVxcdCAgICBpb2N0bCA9PSBWSE9TVF9TRVRfVlJJTkdfQUREUikge1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoyMTU4OlxcdFxcdHJldHVybiB2aG9zdF92cmluZ19zZXRfbnVtX2FkZHIoZCwgdnEsIGlvY3RsLCBhcmdwKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjE1OS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAzOjE0OjQ4LjM3NTM2NzU4OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTc2NTk1NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB2aG9zdF92cmluZ19pb2N0bCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIGB2aG9zdF92cmluZ19pb2N0bGAgaXMgdGhlIGtleSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgdmlydHVhbCBkZXZpY2UgcmluZ3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdHJhY2UgaXRzIHVzYWdlLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpjYWxsZWQqIGZyb20gd2l0aGluIHRoZSBicm9hZGVyIFZIT1NUIGFyY2hpdGVjdHVyZS4gVGhpcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBjb250ZXh0IHJlZ2FyZGluZyBpdHMgcHVycG9zZSBhbmQgdGhlIGV2ZW50cyB0aGF0IHRyaWdnZXIgaXRzIGV4ZWN1dGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayBpcyB0aGUgZmlyc3QgbG9naWNhbCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODk0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDM6MTQ6NTEuMzUxOTY2NzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjE1NjYyNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdnJpbmdfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmM9MTczOD1zdGF0aWMgbG9uZyB2aG9zdF9uZXRfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTgyOS1cXHRcXHRpZiAociA9PSAtRU5PSU9DVExDTUQpXFxuZHJpdmVycy92aG9zdC9uZXQuYzoxODMwOlxcdFxcdFxcdHIgPSB2aG9zdF92cmluZ19pb2N0bChcXHUwMDI2bi1cXHUwMDNlZGV2LCBpb2N0bCwgYXJncCk7XFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODMxLVxcdFxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzNjI9dmhvc3Rfc2NzaV9pb2N0bChzdHJ1Y3QgZmlsZSAqZixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0MzAtXFx0XFx0aWYgKHIgPT0gLUVOT0lPQ1RMQ01EKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0MzE6XFx0XFx0XFx0ciA9IHZob3N0X3ZyaW5nX2lvY3RsKFxcdTAwMjZ2cy1cXHUwMDNlZGV2LCBpb2N0bCwgYXJncCk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQzMi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnZzLVxcdTAwM2VkZXYubXV0ZXgpO1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmM9MzE3PXN0YXRpYyBsb25nIHZob3N0X3Rlc3RfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM1Mi0gICAgICAgICAgICAgICAgaWYgKHIgPT0gLUVOT0lPQ1RMQ01EKVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM1MzogICAgICAgICAgICAgICAgICAgICAgICByID0gdmhvc3RfdnJpbmdfaW9jdGwoXFx1MDAyNm4tXFx1MDAzZWRldiwgaW9jdGwsIGFyZ3ApO1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM1NC1cXHRcXHR2aG9zdF90ZXN0X2ZsdXNoKG4pO1xcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmM9NjMyPXN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy03MjAtXFxuZHJpdmVycy92aG9zdC92ZHBhLmM6NzIxOlxcdHIgPSB2aG9zdF92cmluZ19pb2N0bChcXHUwMDI2di1cXHUwMDNldmRldiwgY21kLCBhcmdwKTtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy03MjItXFx0aWYgKHIpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9MjEwOT1zdGF0aWMgbG9uZyB2aG9zdF92cmluZ19zZXRfbnVtX2FkZHIoc3RydWN0IHZob3N0X2RldiAqZCxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yMTQwLX1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MjE0MTpsb25nIHZob3N0X3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF9kZXYgKmQsIHVuc2lnbmVkIGludCBpb2N0bCwgdm9pZCBfX3VzZXIgKmFyZ3ApXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTIxNDIte1xcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTIyNzgtfVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoyMjc5OkVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X3ZyaW5nX2lvY3RsKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjI4MC1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaD0yMjI9bG9uZyB2aG9zdF9kZXZfaW9jdGwoc3RydWN0IHZob3N0X2RldiAqLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHZvaWQgX191c2VyICphcmdwKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg6MjIzOmxvbmcgdmhvc3RfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X2RldiAqZCwgdW5zaWduZWQgaW50IGlvY3RsLCB2b2lkIF9fdXNlciAqYXJncCk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5oLTIyNC1sb25nIHZob3N0X3dvcmtlcl9pb2N0bChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz04ODk9c3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTM1LVxcdFxcdGlmIChyID09IC1FTk9JT0NUTENNRClcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTM2OlxcdFxcdFxcdHIgPSB2aG9zdF92cmluZ19pb2N0bChcXHUwMDI2dnNvY2stXFx1MDAzZWRldiwgaW9jdGwsIGFyZ3ApO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05MzctXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMzoxNDo1My43NzM1Mzc5MzdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1NDE1OTcyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB0aGlzLlxuXG4qKkZvY3VzaW5nIG9uIHZob3N0X3ZyaW5nX2lvY3RsKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBgdmhvc3RfdnJpbmdfaW9jdGxgIGlzIGdldHRpbmcgY2FsbGVkIGZyb20gYSB3aG9sZSBidW5jaCBvZiBwbGFjZXMgd2l0aGluIHRoZSB2aG9zdCBmcmFtZXdvcms6IGB2aG9zdF9uZXRfaW9jdGxgLCBgdmhvc3Rfc2NzaV9pb2N0bGAsIGB2aG9zdF90ZXN0X2lvY3RsYCwgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgLCBhbmQgYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAuIFRoYXQgc3VnZ2VzdHMgaXQncyBhIHByZXR0eSBjZW50cmFsIGZ1bmN0aW9uLCBoYW5kbGluZyB2aXJ0dWFsIHJpbmcgaW50ZXJhY3Rpb25zLiBJJ2Qgc2F5IHRoYXQgbWFrZXMgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24uIFRoZSBmYWN0IGl0J3MgdXNlZCBhY3Jvc3Mgc28gbWFueSBkaWZmZXJlbnQgYmFja2VuZCBkcml2ZXJzIGluZGljYXRlcyBhIGNlbnRyYWwgcG9pbnQgb2YgY29udHJvbCwgc28gYW55IGlzc3VlcyBoZXJlIHdvdWxkIGhhdmUgd2lkZXNwcmVhZCBpbXBhY3QuXG5cbk5vdywgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgbG9naWMgd2l0aGluIHRoaXMgZnVuY3Rpb24sIGxldCdzIHRha2UgYSBsb29rIGF0IGBfX3Zob3N0X3ZxX21ldGFfcmVzZXRgLiBJdCdzIGxpa2VseSB0aGF0IGEgcmVzZXQgb3BlcmF0aW9uIGlzIGEgY3JpdGljYWwgcGFydCBvZiB2cmluZyBoYW5kbGluZywgc28gdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBvcGVyYXRpb25zIGhhcHBlbmluZyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTgzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAzOjE0OjU3LjYyNzcwMDgxNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg2MzA5MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX192aG9zdF92cV9tZXRhX3Jlc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3Qvdmhvc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmM9MzM3PUVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X3BvbGxfcXVldWUpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMzgtXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMzOTpzdGF0aWMgdm9pZCBfX3Zob3N0X3ZxX21ldGFfcmVzZXQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM0MC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9MzQ3PXN0YXRpYyB2b2lkIHZob3N0X3ZxX21ldGFfcmVzZXQoc3RydWN0IHZob3N0X2RldiAqZClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTEtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGQtXFx1MDAzZW52cXM7ICsraSlcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzUyOlxcdFxcdF9fdmhvc3RfdnFfbWV0YV9yZXNldChkLVxcdTAwM2V2cXNbaV0pO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTMtfVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jPTM2Nz1zdGF0aWMgdm9pZCB2aG9zdF92cV9yZXNldChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzk2LVxcdHZob3N0X3ZyaW5nX2NhbGxfcmVzZXQoXFx1MDAyNnZxLVxcdTAwM2VjYWxsX2N0eCk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjM5NzpcXHRfX3Zob3N0X3ZxX21ldGFfcmVzZXQodnEpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zOTgtfVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jPTIxMDk9c3RhdGljIGxvbmcgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyKHN0cnVjdCB2aG9zdF9kZXYgKmQsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjEzNC1cXHQgKi9cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MjEzNTpcXHRfX3Zob3N0X3ZxX21ldGFfcmVzZXQodnEpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yMTM2LVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jPTIyODE9aW50IHZob3N0X2luaXRfZGV2aWNlX2lvdGxiKHN0cnVjdCB2aG9zdF9kZXYgKmQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjI5Ny1cXHRcXHR2cS1cXHUwMDNlaW90bGIgPSBuaW90bGI7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjIyOTg6XFx0XFx0X192aG9zdF92cV9tZXRhX3Jlc2V0KHZxKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjI5OS1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAzOjE0OjU3LjY4NjM0MTkyMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTkwNjM1NTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gU3RyYXRlZ3kgZm9yIFRlc3Rpbmcgdmhvc3RfdnJpbmdfaW9jdGwqKlxuXG5Pa2F5LCBoZXJlJ3MgbXkgcGxhbiB0byBjb25maWd1cmUgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgZm9yIGB2aG9zdF92cmluZ19pb2N0bGAuIFNpbmNlIGBfX3Zob3N0X3ZxX21ldGFfcmVzZXRgIGFuZCBgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyYCBhcmUgc3RhdGljLCBgdmhvc3RfdnJpbmdfaW9jdGxgIGlzIHRoZSBrZXkgc3ltYm9sIEkgbmVlZCB0byBmb2N1cyBvbi4gSXQncyBleHBvcnRlZCwgc28gaXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cbkkndmUgY2hlY2tlZCB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbnMuIGBWSE9TVF9ORVRgLCBgVkhPU1RfVlNPQ0tgLCBgVkhPU1RfU0NTSWAsIGFuZCBgVkhPU1RfVkRQQWAgYWxsIGxvb2sgcHJvbWlzaW5nLiBJIGNhbiBpZ25vcmUgYFZIT1NUX0NST1NTX0VORElBTl9MRUdBQ1lgIGZvciBub3cuIGBWSE9TVF9JT1RMQmAgaXMgc2VsZWN0ZWQgYnkgYFZIT1NUYCwgYW5kIGBWSE9TVGAgaXMgc2VsZWN0ZWQgYnkgYFZIT1NUX05FVGAuIEJ1dCBpcyBgVkhPU1RfTkVUYCBzdWZmaWNpZW50P1xuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gYFZIT1NUX05FVGAgcmVsaWVzIG9uIGBORVQgXHUwMDI2XHUwMDI2IEVWRU5URkQgXHUwMDI2XHUwMDI2IChUVU4gfHwgIVRVTikgXHUwMDI2XHUwMDI2IChUQVAgfHwgIVRBUClgLiBTbywgYE5FVGAgYW5kIGBFVkVOVEZEYCBhcmUgZXNzZW50aWFsLiBgVkhPU1RfVlNPQ0tgIGRlcGVuZHMgb24gYFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBFVkVOVEZEYCwgYW5kIGBWSE9TVF9TQ1NJYCBvbiBgVEFSR0VUX0NPUkUgXHUwMDI2XHUwMDI2IEVWRU5URkRgLiBgVkhPU1RfVkRQQWAgbmVlZHMgYEVWRU5URkQgXHUwMDI2XHUwMDI2IFZEUEFgLlxuXG5Jbml0aWFsbHksIEkgdGhvdWdodCBlbmFibGluZyBgVkhPU1RfTkVUYCwgYFZIT1NUX1ZTT0NLYCwgYW5kIGBWSE9TVF9WRFBBYCB3b3VsZCBiZSB0aGUgYmVzdC4gQnV0LCBzaW5jZSB0aGUgY29yZSBmdW5jdGlvbiBJJ20gdGVzdGluZyBpcyBpbiB0aGUgY29yZSB2aG9zdCBtb2R1bGUsIG1heWJlIG9ubHkgYFZIT1NUX05FVGAgaXMgZW5vdWdoLiBCdXQgZm9yIGJyb2FkZXIgY292ZXJhZ2UsIEkgc2hvdWxkIGNvbnNpZGVyIGFkZGluZyBgVkhPU1RfVlNPQ0tgIGFuZCBgVkhPU1RfU0NTSWAuXG5cbldhaXQgYSBtaW51dGUsIGBWSE9TVGAgaXRzZWxmIGlzIGEgdHJpc3RhdGUuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MsIHNvIG5vdyBJIGNhbiBlbmFibGUgYFZIT1NUYCwgYFZIT1NUX05FVGAsIGFuZCBgVkhPU1RfVlNPQ0tgLlxuXG5BIHF1aWNrIHBlZWsgYXQgYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AgcmV2ZWFscyB0aGF0IGBWSE9TVGAgaXMgYSB0cmlzdGF0ZSB0aGF0ICpzZWxlY3RzKiBgVkhPU1RfSU9UTEJgIGFuZCBgVkhPU1RfVEFTS2AuIEl0IGRvZXNuJ3QgaGF2ZSBhIHByb21wdCwgbWVhbmluZyBpdCBjYW4ndCBiZSBlbmFibGVkIGRpcmVjdGx5LiBJbnN0ZWFkLCBJIG5lZWQgdG8gZW5hYmxlIGBWSE9TVF9ORVRgIG9yIGBWSE9TVF9WU09DS2AuXG5cbkNvbmZpcm1lZDogYFZIT1NUX05FVGAgaXMgYSB0cmlzdGF0ZSwgXCJIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFwiLCBhbmQgYFZIT1NUX1ZTT0NLYCBpcyBhbHNvIGEgdHJpc3RhdGUsIGFuZCBcInZob3N0IHZpcnRpby12c29jayBkcml2ZXJcIi4gQW5kIGBWSE9TVF9WRFBBYCBpcyBhbHNvIHRyaXN0YXRlLCBhcyB0aGUgXCJWaG9zdCBkcml2ZXIgZm9yIHZEUEEtYmFzZWQgYmFja2VuZFwiLlxuXG5TbywgSSB0aGluayBlbmFibGluZyBgVkhPU1RfTkVUYCwgYFZIT1NUX1ZTT0NLYCwgYW5kIGBWSE9TVF9WRFBBYCBpcyB0aGUgYmVzdCBhcHByb2FjaCBmb3IgdGVzdGluZyBgdmhvc3RfdnJpbmdfaW9jdGxgIGFuZCB0aGUgYnJvYWRlciB2aG9zdCBmdW5jdGlvbmFsaXR5LiBJdCBwcm92aWRlcyBnb29kIGNvdmVyYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTEyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAzOjE1OjA1LjI3Njk4MDEzMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg1NTY0OTQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVF9URVNUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDM6MTU6MDUuMzc1NTQ0NDU2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjM3NTI2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBWaG9zdCBUZXN0IEluZnJhc3RydWN0dXJlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBpc24ndCB0aGVyZSBhIHRlc3QgZmlsZSBzcGVjaWZpY2FsbHkgZm9yIHZob3N0PyBNeSBtZW1vcnkncyB1c3VhbGx5IHByZXR0eSBnb29kLCBhbmQgSSBzZWVtIHRvIHJlY2FsbCBzZWVpbmcgYGRyaXZlcnMvdmhvc3QvdGVzdC5jYCBzb21ld2hlcmUuIEJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byBkZWJ1Z2dpbmcgb3Igc3RhcnRpbmcgZnJvbSBzY3JhdGNoLCBJJ2QgYmV0dGVyIGNvbmZpcm0gdGhhdC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gUmlnaHQsIHNvIGlmIHRoYXQgZmlsZSAqZG9lcyogZXhpc3QsIEkgc2hvdWxkIGtub3cgaG93IGl0J3MgYmVpbmcgYnVpbHQgb3IgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkIHByb2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhpcyB0ZXN0IGZpbGUuIExldCdzIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBNYWtlZmlsZSBpbiB0aGUgYGRyaXZlcnMvdmhvc3RgIGRpcmVjdG9yeSB0byBzZWUgaG93IHRoaXMgdGVzdCBmaWxlIGlzIGludGVncmF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMTEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMzoxNTowOC43OTkyOTk3MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE3NjQxMDYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRlc3RcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDM6MTU6MDguODcxMDcxMjc2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTA5NzEzMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqRGlnZ2luZyBpbnRvIFZob3N0IFRlc3QgRmlsZXMqKlxuXG5SaWdodCwgYSBtb21lbnQuIEhvbGQgb24uIEkganVzdCBzcG90dGVkIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpbiB0aGF0IGdyZXAgb3V0cHV0IOKAkyB0aGUgYGRyaXZlcnMvdmhvc3QvdGVzdC5jYCBmaWxlLiBUaGF0J3MgYSBzdHJvbmcgc2lnbmFsLiBHaXZlbiB0aGF0IGZpbmRpbmcsIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gcmV2aXNpdCB0aGUgYGRyaXZlcnMvdmhvc3QvTWFrZWZpbGVgLiBUaGUgdGVzdCBjb2RlIGlzIGxpa2VseSBpbnRlZ3JhdGVkIG9yIHJlZmVyZW5jZWQgaW4gdGhlIGJ1aWxkIHByb2Nlc3MgdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRob3NlIHRlc3RzIGFyZSBiZWluZyBjb21waWxlZCBhbmQgbGlua2VkLiBUaGF0IE1ha2VmaWxlIHdpbGwgZ2l2ZSBtZSBjcnVjaWFsIGNsdWVzIGFib3V0IHRoZSB0ZXN0aW5nIGluZnJhc3RydWN0dXJlIGZvciB2aG9zdC4gVGhpcyBjb3VsZCBsZWFkIHRvIHVuY292ZXJpbmcgc29tZSByZWxldmFudCB0ZXN0IHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ0MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAzOjE1OjExLjgyMjA0NTc4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjIxMTA5NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGVzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMzoxNToxMS44ODQyNzAwMjZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4OTc4OTQzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGEgU3VzcGVjdGVkIEZpbGUgUGF0aCBEaXNjcmVwYW5jeSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biBzb21ldGhpbmcgcmVsYXRlZCB0byB2aG9zdCwgYW5kIEkgKnRob3VnaHQqIHRoZSByZWxldmFudCBmaWxlIG1pZ2h0IGJlIGBkcml2ZXJzL3Zob3N0L3ZyaW5naC5jYC4gQnV0IHRoZW4gSSByYW4gYSBgZ3JlcGAgYW5kIHRoZSBvdXRwdXQgcG9pbnRlZCBtZSB0b3dhcmRzIGBkcml2ZXJzL3Zob3N0L3Rlc3QuY2AuIEhtbSwgdGhhdCdzIGEgYml0IG9kZC4gSSBrbm93IHRoZXNlIHN5c3RlbXMgcHJldHR5IHdlbGwsIGFuZCBJIGRvbid0IHJlY2FsbCBzZWVpbmcgYW55dGhpbmcgY3JpdGljYWwgaW4gdGhlIGB0ZXN0LmNgIGZpbGUgdXN1YWxseS4gU3RpbGwsIHRoZSBncmVwIGRvZXNuJ3QgbGllLiBBbHJpZ2h0LCBiZXN0IHRvIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBgZHJpdmVycy92aG9zdC90ZXN0LmNgIGZpbGUgYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgaW4gdGhlcmUuIEl0J3MgcHJvYmFibHkgYSB0ZXN0IGNhc2UsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBpZiB0aGlzIGlzIHdoYXQncyByZWxldmFudCB0byB0aGUgY3VycmVudCBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjYyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDM6MTU6MTUuMTc0MDYxNzE4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDMyNTEyOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdGVzdF9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Rlc3QuYz0yNjU9c3RhdGljIGxvbmcgdmhvc3RfdGVzdF9zZXRfYmFja2VuZChzdHJ1Y3Qgdmhvc3RfdGVzdCAqbiwgdW5zaWduZWQgaW5kZXgsIGludCBmZClcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTMxNi1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozMTc6c3RhdGljIGxvbmcgdmhvc3RfdGVzdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTMxOC1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmM9MzYwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3Rlc3RfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM2Mi1cXHQucmVsZWFzZSAgICAgICAgPSB2aG9zdF90ZXN0X3JlbGVhc2UsXFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MzYzOlxcdC51bmxvY2tlZF9pb2N0bCA9IHZob3N0X3Rlc3RfaW9jdGwsXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzY0LVxcdC5jb21wYXRfaW9jdGwgICA9IGNvbXBhdF9wdHJfaW9jdGwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAzOjE1OjE1LjI3NzMxNzgzMloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTgxMTA3NjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQsIGdlYXJlZCB0b3dhcmRzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSB2aG9zdCBEcml2ZXIgVGVzdCBTdHJ1Y3R1cmUqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgdGVzdGluZyBsYW5kc2NhcGUgZm9yIGB2aG9zdGAuIEdpdmVuIGEgYHRlc3QuY2AgZmlsZSwgSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIHRoZSBmaXJzdCBwbGFjZSB0byBsb29rIGZvciBpdHMgYnVpbGQgaW5zdHJ1Y3Rpb25zIGFuZCBkZXBlbmRlbmNpZXMgd291bGQgYmUgd2l0aGluIHRoZSBgZHJpdmVycy92aG9zdC9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgcHJpbWFyeSBidWlsZCBjb25maWd1cmF0aW9ucyBzaG91bGQgcmVzaWRlLCBpbmNsdWRpbmcgaG93IHRoaXMgc3BlY2lmaWMgdGVzdCBwcm9ncmFtIGlzIGNvbXBpbGVkIGFuZCBsaW5rZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0J3MgYSBzdGFuZGFsb25lIHRlc3QsIHBhcnQgb2YgYSBsYXJnZXIgdGVzdCBzdWl0ZSwgb3IgaWYgaXQgdXRpbGl6ZXMgYW55IHNwZWNpZmljIHZob3N0IGluZnJhc3RydWN0dXJlIGR1cmluZyBpdHMgYnVpbGQgcHJvY2Vzcy4gVGhlIE1ha2VmaWxlIHdpbGwgYmUgdGhlIGRlZmluaXRpdmUgc291cmNlIG9mIHRydXRoIGZvciB0aGUgYnVpbGQgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNjgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMzoxNToxOC4yNTg0MjgyNjRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjA4NDMyMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGVzdFxcXFwuY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDM6MTU6MTguMzY0NTE5MDg3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODcwNjI5OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZXZpZXdpbmcgdGhpcyBjb2RlOlxuXG4qKlZob3N0IFRlc3QgQ29kZSBMb2NhdGlvbiBDaGVjayoqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgYGRyaXZlcnMvdmhvc3QvdGVzdC5jYCBmaWxlIG1lbnRpb25lZC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY29uZmlybSBpdHMgYnVpbGQgcHJvY2Vzcy4gTGV0J3Mgc3RhcnQgd2l0aCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBgZHJpdmVycy92aG9zdC9NYWtlZmlsZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHRlc3QgaXMgY29tcGlsZWQgYW5kIGxpbmtlZCB3aXRoaW4gdGhlIGJyb2FkZXIgdmhvc3QgaW5mcmFzdHJ1Y3R1cmUuIEkgd2FudCB0byBzZWUgaG93IGl0J3MgaW50ZWdyYXRlZCB3aXRoIHRoZSBvdGhlciB2aG9zdCBtb2R1bGVzIGFuZCBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbXBpbGF0aW9uIGZsYWdzIG9yIGRlcGVuZGVuY2llcyBJIHNob3VsZCBrbm93IGFib3V0LiBUaGlzIE1ha2VmaWxlIHNob3VsZCBjb250YWluIHRoZSBhbnN3ZXJzIEknbSBsb29raW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzODUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMzoxNToyMS42NTE1ODUzM1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRvYmotJChDT05GSUdfVkhPU1RfTkVUKSArPSB2aG9zdF9uZXQub1xcbiAgIDM6XFx0dmhvc3RfbmV0LXkgOj0gbmV0Lm9cXG4gICA0OlxcdFxcbiAgIDU6XFx0b2JqLSQoQ09ORklHX1ZIT1NUX1NDU0kpICs9IHZob3N0X3Njc2kub1xcbiAgIDY6XFx0dmhvc3Rfc2NzaS15IDo9IHNjc2kub1xcbiAgIDc6XFx0XFxuICAgODpcXHRvYmotJChDT05GSUdfVkhPU1RfVlNPQ0spICs9IHZob3N0X3Zzb2NrLm9cXG4gICA5OlxcdHZob3N0X3Zzb2NrLXkgOj0gdnNvY2sub1xcbiAgMTA6XFx0XFxuICAxMTpcXHRvYmotJChDT05GSUdfVkhPU1RfUklORykgKz0gdnJpbmdoLm9cXG4gIDEyOlxcdFxcbiAgMTM6XFx0b2JqLSQoQ09ORklHX1ZIT1NUX1ZEUEEpICs9IHZob3N0X3ZkcGEub1xcbiAgMTQ6XFx0dmhvc3RfdmRwYS15IDo9IHZkcGEub1xcbiAgMTU6XFx0XFxuICAxNjpcXHRvYmotJChDT05GSUdfVkhPU1QpXFx0Kz0gdmhvc3Qub1xcbiAgMTc6XFx0XFxuICAxODpcXHRvYmotJChDT05GSUdfVkhPU1RfSU9UTEIpICs9IHZob3N0X2lvdGxiLm9cXG4gIDE5OlxcdHZob3N0X2lvdGxiLXkgOj0gaW90bGIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMzoxNToyMS42NTE2OTMzMloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODc0MjU1NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiB2aG9zdF92cmluZ19pb2N0bCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgZHJpdmVycy92aG9zdC90ZXN0LmNgIGlzbid0IGluIHRoZSBNYWtlZmlsZS4gVGhhdCdzIGEgdGVzdCBtb2R1bGUsIGxpa2VseSBub3QgYnVpbHQgYnkgZGVmYXVsdCwgb3IgYnVpbHQgdmlhIHNvbWUgc2VwYXJhdGUgY29uZmlndXJhdGlvbi4gVGhlIG1haW4gZm9jdXMgaGVyZSBpcyBkZWZpbml0ZWx5IGBWSE9TVF9ORVRgLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHN1bW1hcml6ZSB3aGF0J3MgaGFwcGVuaW5nLiBUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYF9fdmhvc3RfdnFfbWV0YV9yZXNldCh2cSlgIHdpdGhpbiBgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyKClgLiBUaGlzIGB2aG9zdF92cmluZ19zZXRfbnVtX2FkZHIoKWAgZnVuY3Rpb24gaXRzZWxmIGlzIGNhbGxlZCBmcm9tIGB2aG9zdF92cmluZ19pb2N0bCgpYCB3aGVuIHNwZWNpZmljIGlvY3RscyBhcmUgaW52b2tlZDogYFZIT1NUX1NFVF9WUklOR19BRERSYCBvciBgVkhPU1RfU0VUX1ZSSU5HX05VTWAuIENyaXRpY2FsbHksIGB2aG9zdF92cmluZ19pb2N0bCgpYCBpcyAqdGhlKiBmdW5jdGlvbiBjYWxsZWQgYnkgdmFyaW91cyB2aG9zdCBkcml2ZXJzIOKAkyBgdmhvc3RfbmV0YCwgYHZob3N0X3Zzb2NrYCwgYHZob3N0X3Njc2lgLCBgdmhvc3RfdmRwYWAsIGFuZCBwcm9iYWJseSBvdGhlcnMuXG5cblRoaXMgaXMgYSBjbGVhciwgcmVhY2hhYmxlIGNvZGUgcGF0aCwgYW5kIGl0IGRlZmluaXRlbHkgc291bmRzIGxpa2UgYSBnb29kIHBsYWNlIHRvIGZ1enouIFRoZSBpZGVhbCB0YXJnZXQgaXMgYHZob3N0X3ZyaW5nX2lvY3RsYC4gVG8gZW5hYmxlIGl0LCBJJ2xsIG5lZWQgdG8gZW5hYmxlIGBWSE9TVF9ORVRgLCBgVkhPU1RfVlNPQ0tgLCBhbmQgYFZIT1NUX1ZEUEFgLlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLiBgVkhPU1RfTkVUYCByZWxpZXMgb24gYE5FVCBcdTAwMjZcdTAwMjYgRVZFTlRGRCBcdTAwMjZcdTAwMjYgKFRVTiB8fCAhVFVOKSBcdTAwMjZcdTAwMjYgKFRBUCB8fCAhVEFQKWAuIEdvb2QsIEkgY2FuIHNhdGlzZnkgdGhvc2UuIGBWSE9TVF9WU09DS2AgbmVlZHMgYFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBFVkVOVEZEYCwgYW5kIGBWSE9TVF9WRFBBYCBuZWVkcyBgRVZFTlRGRCBcdTAwMjZcdTAwMjYgVkRQQWAuIEkgdGhpbmsgcHJvdmlkaW5nIHRoZXNlIHdpbGwgYmUgZW5vdWdoLlxuXG5KdXN0IHRvIGJlIHN1cmUsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IGB2aG9zdF92cmluZ19pb2N0bGAgaXMgdGhlIG1vc3QgZWZmZWN0aXZlIHN5bWJvbCB0byBmb2N1cyBvbi4gWWVzLCBpdCdzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgaW9jdGxzIHRoYXQgdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC4gYHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcmAgaXRzZWxmIGlzIHN0YXRpYywgc28gaXQgbWlnaHQgYmUgaW5saW5lZCBvciBoYXZlIGEgbm9uLWRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBCdXQgYHZob3N0X3ZyaW5nX2lvY3RsYCBpcyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYy4gSXQncyB0aGUgcmlnaHQgY2hvaWNlLlxuXG5JbiBzdW1tYXJ5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcmAgdG8gcmVzZXQgdGhlIG1ldGFkYXRhIGNhY2hlIHdoZW4gdGhlIHZyaW5nIGFkZHJlc3Mgb3Igc2l6ZSBpcyB1cGRhdGVkLiBUaGlzIGNoYW5nZSBpcyBhY2Nlc3NlZCB0aHJvdWdoIGB2aG9zdF92cmluZ19pb2N0bGAgd2hpY2ggaGFuZGxlcyBgVkhPU1RfU0VUX1ZSSU5HX0FERFJgIG9yIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCBpb2N0bHMuIFRoZXNlIGlvY3RscyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgYnkgc2V2ZXJhbCB2aG9zdCBkcml2ZXJzIHN1Y2ggYXMgYHZob3N0LW5ldGAgYW5kIGB2aG9zdC12c29ja2AuIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIHRoZXJlZm9yZSwgaXQncyBhIGdvb2QgcGxhY2UgdG8gZnV6ei4gSSB3aWxsIHNlbGVjdCBgdmhvc3RfdnJpbmdfaW9jdGxgIGFzIHRoZSBmb2N1cyBmb3IgZnV6emluZyBhbmQgc2V0IHRoZSB0YXJnZXQgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4OTMsIk91dHB1dFRva2VucyI6MTczLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDM6MTU6MzEuNTI1OTUyNzM4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMzk5NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9ORVRcIixcbiAgICBcIlZIT1NUX1ZTT0NLXCIsXG4gICAgXCJWSE9TVF9WRFBBXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfdnJpbmdfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyYCB0byByZXNldCB0aGUgbWV0YWRhdGEgY2FjaGUgd2hlbiB0aGUgdnJpbmcgYWRkcmVzcyBvciBzaXplIGlzIGNoYW5nZWQuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBgdmhvc3RfdnJpbmdfaW9jdGxgIHdpdGggYFZIT1NUX1NFVF9WUklOR19BRERSYCBvciBgVkhPU1RfU0VUX1ZSSU5HX05VTWAgaW9jdGxzLCB3aGljaCBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgYnkgdmFyaW91cyB2aG9zdCBkcml2ZXJzIChlLmcuLCB2aG9zdC1uZXQsIHZob3N0LXZzb2NrKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9ORVRcIixcbiAgICBcIlZIT1NUX1ZTT0NLXCIsXG4gICAgXCJWSE9TVF9WRFBBXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfdnJpbmdfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyYCB0byByZXNldCB0aGUgbWV0YWRhdGEgY2FjaGUgd2hlbiB0aGUgdnJpbmcgYWRkcmVzcyBvciBzaXplIGlzIGNoYW5nZWQuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBgdmhvc3RfdnJpbmdfaW9jdGxgIHdpdGggYFZIT1NUX1NFVF9WUklOR19BRERSYCBvciBgVkhPU1RfU0VUX1ZSSU5HX05VTWAgaW9jdGxzLCB3aGljaCBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgYnkgdmFyaW91cyB2aG9zdCBkcml2ZXJzIChlLmcuLCB2aG9zdC1uZXQsIHZob3N0LXZzb2NrKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowzzfj4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 02:47:06 +0000 UTC FinishedAt: 2026-08-03 03:15:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_NET", "VHOST_VSOCK", "VHOST_VDPA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_NET", "VHOST_VSOCK", "VHOST_VDPA" ], "series_id": "7a48d8bd-5340-4e37-a150-802a1aaa2739" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "vhost_vring_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX05FVCYjMzQ7LAogICAgJiMzNDtWSE9TVF9WU09DSyYjMzQ7LAogICAgJiMzNDtWSE9TVF9WRFBBJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3RfdnJpbmdfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcmAgdG8gcmVzZXQgdGhlIG1ldGFkYXRhIGNhY2hlIHdoZW4gdGhlIHZyaW5nIGFkZHJlc3Mgb3Igc2l6ZSBpcyBjaGFuZ2VkLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgYHZob3N0X3ZyaW5nX2lvY3RsYCB3aXRoIGBWSE9TVF9TRVRfVlJJTkdfQUREUmAgb3IgYFZIT1NUX1NFVF9WUklOR19OVU1gIGlvY3Rscywgd2hpY2ggYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIGJ5IHZhcmlvdXMgdmhvc3QgZHJpdmVycyAoZS5nLiwgdmhvc3QtbmV0LCB2aG9zdC12c29jaykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDM6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzYTAwNDBjM2MwZjJkM2VlZDVkNmI4OTIwMDViMWE0MThhNjEyMTRmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMyAwMzoxNDoyNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmMgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcbmluZGV4IDRjNTI1YjNlMTZlYWQuLjc3Yzk2OTkzMTAwYjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuY1xuQEAgLTIxMjYsNiAmIzQzOzIxMjYsMTQgQEAgc3RhdGljIGxvbmcgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyKHN0cnVjdCB2aG9zdF9kZXYgKmQsXG4gXHRcdEJVRygpO1xuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIG1ldGFkYXRhIGNhY2hlIGhvbGRzIHRoZSBJT1RMQiBtYXBwaW5nIHRoYXQgYmFja2VkIHRoZSBwcmV2aW91c1xuJiM0MztcdCAqIGRlc2MvYXZhaWwvdXNlZCBhZGRyZXNzZXMgYW5kIHZyaW5nIHNpemUsIGJvdGggb2Ygd2hpY2ggYXJlIGJlaW5nXG4mIzQzO1x0ICogcmVwbGFjZWQgaGVyZS4gIGlvdGxiX2FjY2Vzc19vaygpIHRha2VzIGEgY2FjaGUgaGl0IGFzIHByb29mIHRoYXQgdGhlXG4mIzQzO1x0ICogcmVnaW9uIHdhcyB2YWxpZGF0ZWQsIHNvIHRoZSBzdGFsZSBlbnRyaWVzIGhhdmUgdG8gZ28uXG4mIzQzO1x0ICovXG4mIzQzO1x0X192aG9zdF92cV9tZXRhX3Jlc2V0KHZxKTtcbiYjNDM7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuIFxuIFx0cmV0dXJuIHI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDM6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX05FVCYjMzQ7LAogICAgJiMzNDtWSE9TVF9WU09DSyYjMzQ7LAogICAgJiMzNDtWSE9TVF9WRFBBJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3RfdnJpbmdfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcmAgdG8gcmVzZXQgdGhlIG1ldGFkYXRhIGNhY2hlIHdoZW4gdGhlIHZyaW5nIGFkZHJlc3Mgb3Igc2l6ZSBpcyBjaGFuZ2VkLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgYHZob3N0X3ZyaW5nX2lvY3RsYCB3aXRoIGBWSE9TVF9TRVRfVlJJTkdfQUREUmAgb3IgYFZIT1NUX1NFVF9WUklOR19OVU1gIGlvY3Rscywgd2hpY2ggYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIGJ5IHZhcmlvdXMgdmhvc3QgZHJpdmVycyAoZS5nLiwgdmhvc3QtbmV0LCB2aG9zdC12c29jaykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYTAwNDBjM2MwZjJkM2VlZDVkNmI4OTIwMDViMWE0MThhNjEyMTRmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMyAwMzoxNDoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYwppbmRleCA0YzUyNWIzZTE2ZWFkLi43N2M5Njk5MzEwMGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC92aG9zdC5jCkBAIC0yMTI2LDYgJiM0MzsyMTI2LDE0IEBAIHN0YXRpYyBsb25nIHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkLAogCQlCVUcoKTsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogVGhlIG1ldGFkYXRhIGNhY2hlIGhvbGRzIHRoZSBJT1RMQiBtYXBwaW5nIHRoYXQgYmFja2VkIHRoZSBwcmV2aW91cwomIzQzOwkgKiBkZXNjL2F2YWlsL3VzZWQgYWRkcmVzc2VzIGFuZCB2cmluZyBzaXplLCBib3RoIG9mIHdoaWNoIGFyZSBiZWluZwomIzQzOwkgKiByZXBsYWNlZCBoZXJlLiAgaW90bGJfYWNjZXNzX29rKCkgdGFrZXMgYSBjYWNoZSBoaXQgYXMgcHJvb2YgdGhhdCB0aGUKJiM0MzsJICogcmVnaW9uIHdhcyB2YWxpZGF0ZWQsIHNvIHRoZSBzdGFsZSBlbnRyaWVzIGhhdmUgdG8gZ28uCiYjNDM7CSAqLwomIzQzOwlfX3Zob3N0X3ZxX21ldGFfcmVzZXQodnEpOwomIzQzOwogCW11dGV4X3VubG9jaygmYW1wO3ZxLSZndDttdXRleCk7CiAKIAlyZXR1cm4gcjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwNQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgYSB2aG9zdCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIGJlZW4gYXBwbGllZCB0byBgZHJpdmVycy92aG9zdC92aG9zdC5jYC4gVGhlIGNvcmUgY2hhbmdlIGlzIHRoaXMgbmV3IGNhbGwgdG8gYF9fdmhvc3RfdnFfbWV0YV9yZXNldCh2cSk7YCB3aXRoaW4gYHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcigpYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBmdWxseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgKndoeSogdGhpcyBjYWxsIHdhcyBpbnRyb2R1Y2VkLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSByZXZpZXcgdGhlIGRlZmluaXRpb25zIGFuZCBpbXBsZW1lbnRhdGlvbnMgb2YgYm90aCBgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyKClgIGFuZCBgX192aG9zdF92cV9tZXRhX3Jlc2V0KClgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGVpciByb2xlcyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyLiBJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBkYXRhIHN0cnVjdHVyZXMgdGhleSBtYW5pcHVsYXRlLCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGV5JiMzOTtyZSBjYWxsZWQsIGFuZCB3aGF0IGtpbmQgb2Ygc3RhdGUgbWFuYWdlbWVudCB0aGV5JiMzOTtyZSByZXNwb25zaWJsZSBmb3IuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgYF9fdmhvc3RfdnFfbWV0YV9yZXNldCgpYCBjYWxsIHRvIGJlIGVzc2VudGlhbC4gSSB3YW50IHRvIHVuY292ZXIgYW55IHBvdGVudGlhbCBjb25zZXF1ZW5jZXMgdGhpcyBoYXMgaW4gcGVyZm9ybWFuY2UsIHNlY3VyaXR5IG9yIGNvcnJlY3RuZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3ZyaW5nX3NldF9udW1fYWRkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvdmhvc3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zob3N0LmM9MjA1Nz1zdGF0aWMgbG9uZyB2aG9zdF92cmluZ19zZXRfYWRkcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkLFxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yMTA4LVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjIxMDk6c3RhdGljIGxvbmcgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyKHN0cnVjdCB2aG9zdF9kZXYgKmQsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjExMC1cdFx0XHRcdCAgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTIxNDE9bG9uZyB2aG9zdF92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfZGV2ICpkLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHZvaWQgX191c2VyICphcmdwKVxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yMTU3LVx0ICAgIGlvY3RsID09IFZIT1NUX1NFVF9WUklOR19BRERSKSB7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MjE1ODpcdFx0cmV0dXJuIHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcihkLCB2cSwgaW9jdGwsIGFyZ3ApO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTIxNTktXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyBhIHZob3N0IGlvY3RsIENhbGwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY2FsbCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgdmhvc3RfdnJpbmdfaW9jdGxgLiBJdCBzZWVtcyB0aGlzIGlzIGdldHRpbmcgdHJpZ2dlcmVkIHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBlaXRoZXIgc2V0dGluZyB0aGUgdnJpbmcgYWRkcmVzcyBvciB0aGUgdnJpbmcgbnVtYmVyLCBuYW1lbHkgd2l0aCB0aGUgYGlvY3RsYCB2YWx1ZXMgYFZIT1NUX1NFVF9WUklOR19BRERSYCBvciBgVkhPU1RfU0VUX1ZSSU5HX05VTWAuIEFscmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIEl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUsIGFuZCBJIGJlbGlldmUgdGhhdCBpdCYjMzk7cyBmdW5jdGlvbmluZyBhcyBpdCBzaG91bGQuCgpOb3csIGxldCYjMzk7cyBqdXN0IGNvbmZpcm0gdGhhdCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlIHdpdGhpbiBgZHJpdmVycy92aG9zdC92aG9zdC5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgZXhwZWN0ZWQgc2V0dGluZ3MgYXJlIGVuYWJsZWQgdG8gZW5zdXJlIHRoaXMgYmVoYXZlcyBhcyBleHBlY3RlZCBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudC4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9NYWtlZmlsZT0xND12aG9zdF92ZHBhLXkgOj0gdmRwYS5vXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlLTE1LVxuZHJpdmVycy92aG9zdC9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfVkhPU1QpXHQmIzQzOz0gdmhvc3Qub1xuZHJpdmVycy92aG9zdC9NYWtlZmlsZS0xNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTAyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgVkhPU1QgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KioKCkFscmlnaHQsIHNvIHdlJiMzOTt2ZSBnb3QgYSBzaXR1YXRpb24gd2hlcmUgd2UmIzM5O3JlIGdvaW5nIHRvIG5lZWQgYENPTkZJR19WSE9TVGAuIFRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBmbGFnIGlzIGRlZmluZWQgYW5kIHdoYXQgaXQgZGVwZW5kcyBvbi4gSSYjMzk7bGwgbmVlZCB0byBnbyBzcGVsdW5raW5nIGluIHRoZSBrZXJuZWwgY29uZmlnIGZpbGVzIGZvciB0aGUgYHZob3N0YCBzdWJzeXN0ZW0g4oCTIHNvIHRoYXQgbWVhbnMgSSYjMzk7bSBnb2luZyBzdHJhaWdodCB0byBgZHJpdmVycy92aG9zdC9LY29uZmlnYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cywgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZ29pbmcgdG8gcGxheSBuaWNlIHdpdGggdGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24gb2YgdGhpcyBzeXN0ZW0uIFRpbWUgdG8gc2VlIHdoYXQgdGhhdCBgS2NvbmZpZ2AgZmlsZSB0ZWxscyB1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkhPU1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL3Zob3N0L0tjb25maWc6Mjpjb25maWcgVkhPU1RfSU9UTEJcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zLVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctOC1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo5OmNvbmZpZyBWSE9TVF9SSU5HXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMTAtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0xNS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzoxNjpjb25maWcgVkhPU1RfVEFTS1xuZHJpdmVycy92aG9zdC9LY29uZmlnLTE3LVx0Ym9vbFxuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0xOS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzoyMDpjb25maWcgVkhPU1RcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0yMS1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTI3LVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjI4Om1lbnVjb25maWcgVkhPU1RfTUVOVVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTI5LVx0Ym9vbCBcJiMzNDtWSE9TVCBkcml2ZXJzXCYjMzQ7XG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnPTMyPWlmIFZIT1NUX01FTlVcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zMy1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzozNDpjb25maWcgVkhPU1RfTkVUXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzUtXHR0cmlzdGF0ZSBcJiMzNDtIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFwmIzM0O1xuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00NS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo0Njpjb25maWcgVkhPU1RfU0NTSVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTQ3LVx0dHJpc3RhdGUgXCYjMzQ7VkhPU1RfU0NTSSBUQ00gZmFicmljIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01NS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo1Njpjb25maWcgVkhPU1RfVlNPQ0tcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01Ny1cdHRyaXN0YXRlIFwmIzM0O3Zob3N0IHZpcnRpby12c29jayBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNjktXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NzA6Y29uZmlnIFZIT1NUX1ZEUEFcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03MS1cdHRyaXN0YXRlIFwmIzM0O1Zob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXCYjMzQ7XG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTgyLVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjgzOmNvbmZpZyBWSE9TVF9DUk9TU19FTkRJQU5fTEVHQUNZXG5kcml2ZXJzL3Zob3N0L0tjb25maWctODQtXHRib29sIFwmIzM0O0Nyb3NzLWVuZGlhbiBzdXBwb3J0IGZvciB2aG9zdFwmIzM0O1xuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy05Ny1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo5ODpjb25maWcgVkhPU1RfRU5BQkxFX0ZPUktfT1dORVJfQ09OVFJPTFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTk5LVx0Ym9vbCBcJiMzNDtFbmFibGUgVkhPU1RfRU5BQkxFX0ZPUktfT1dORVJfQ09OVFJPTFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NDkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYENPTkZJR19WSE9TVGAuIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGlzIGlzIGEgdHJpc3RhdGUgb3B0aW9uLCBsaWtlbHkgYWN0aW5nIGFzIGEgcGFyZW50IGZvciBhIGJ1bmNoIG9mIHZpcnR1YWxpemF0aW9uIGhvc3QgZmVhdHVyZXMuIE15IGh1bmNoIGlzIGl0JiMzOTtzIHNlbGVjdGVkIChlaXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgYnkgdGhpbmdzIGxpa2UgYFZIT1NUX05FVGAsIGBWSE9TVF9TQ1NJYCwgYW5kIGBWSE9TVF9WU09DS2Ag4oCTIGNvbW1vbiB2aG9zdC1iYXNlZCBkcml2ZXJzLiBUbyBjb25maXJtIHRoaXMgcmVsYXRpb25zaGlwLCBJIHJlYWxseSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aG9zZSBkZXBlbmRlbnQgb3B0aW9ucy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHF1aWNrbHkgY2hlY2tpbmcgdGhlIGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGJvdGggYFZIT1NUX05FVGAgYW5kIGBWSE9TVF9NRU5VYCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIHN0cnVjdHVyZS4gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXBlbmRlbmNpZXMgd2lsbCBnaXZlIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgYENPTkZJR19WSE9TVGAgZml0cyBpbnRvIHRoZSBncmVhdGVyIGtlcm5lbCBjb25maWd1cmF0aW9uIHNjaGVtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFZIT1NUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZz05PWNvbmZpZyBWSE9TVF9SSU5HXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMTAtXHR0cmlzdGF0ZVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjExOlx0c2VsZWN0IFZIT1NUX0lPVExCXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMTItXHRoZWxwXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnPTIwPWNvbmZpZyBWSE9TVFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTIxLVx0dHJpc3RhdGVcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzoyMjpcdHNlbGVjdCBWSE9TVF9JT1RMQlxuZHJpdmVycy92aG9zdC9LY29uZmlnOjIzOlx0c2VsZWN0IFZIT1NUX1RBU0tcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0yNC1cdGhlbHBcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9MzQ9Y29uZmlnIFZIT1NUX05FVFxuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zNi1cdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBFVkVOVEZEIFx1MDAyNlx1MDAyNiAoVFVOIHx8ICFUVU4pIFx1MDAyNlx1MDAyNiAoVEFQIHx8ICFUQVApXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6Mzc6XHRzZWxlY3QgVkhPU1RcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zOC1cdGhlbHBcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NDY9Y29uZmlnIFZIT1NUX1NDU0lcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDgtXHRkZXBlbmRzIG9uIFRBUkdFVF9DT1JFIFx1MDAyNlx1MDAyNiBFVkVOVEZEXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NDk6XHRzZWxlY3QgVkhPU1RcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01MC1cdHNlbGVjdCBTR19QT09MXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnPTU2PWNvbmZpZyBWSE9TVF9WU09DS1xuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01OC1cdGRlcGVuZHMgb24gVlNPQ0tFVFMgXHUwMDI2XHUwMDI2IEVWRU5URkRcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo1OTpcdHNlbGVjdCBWSE9TVFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTYwLVx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NzA9Y29uZmlnIFZIT1NUX1ZEUEFcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzItXHRkZXBlbmRzIG9uIEVWRU5URkRcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo3MzpcdHNlbGVjdCBWSE9TVFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTc0LVx0c2VsZWN0IElSUV9CWVBBU1NfTUFOQUdFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Njk2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVkhPU1QgQ29uZmlndXJhdGlvbiBEZWNpc2lvbnMqKgoKT2theSwgc28gSSYjMzk7bSBjb25maWd1cmluZyB0aGUgdmlydHVhbCBob3N0IGZ1bmN0aW9uYWxpdHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHNldHRpbmcgYFZIT1NUX05FVGAgd2lsbCBhdXRvbWF0aWNhbGx5IGhhbmRsZSBzZWxlY3RpbmcgYFZIT1NUYCwgYW5kIHRoZW4gSSBjYW4gbGV2ZXJhZ2UgYm90aCBgVkhPU1RfTkVUYCBhbmQgYFZIT1NUX01FTlVgLiBCdXQgaG9sZCBvbiwgSSByZW1lbWJlciBub3csIGBWSE9TVF9NRU5VYCBpcyBqdXN0IGZvciB0aGUgbWVudSBjb25maWd1cmF0aW9uIGl0c2VsZi4gU28sIHRvIGtlZXAgdGhpbmdzIHN0cmVhbWxpbmVkLCBlbmFibGluZyBgVkhPU1RfTkVUYCBpcyB0aGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggYmVjYXVzZSBpdCBoYW5kbGVzIHRoZSBgVkhPU1RgIHNlbGVjdGlvbiBpbXBsaWNpdGx5LiBKdXN0IHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBhY2N1cmF0ZSBhbmQgY29uc2lkZXIgYW55IHBvdGVudGlhbCBpc3N1ZXMsIHNvIEkgd2lsbCBub3cgZ28gYW5kIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBgVkhPU1RfTUVOVWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnPTM0PWNvbmZpZyBWSE9TVF9ORVRcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zNS1cdHRyaXN0YXRlIFwmIzM0O0hvc3Qga2VybmVsIGFjY2VsZXJhdG9yIGZvciB2aXJ0aW8gbmV0XCYjMzQ7XG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MzY6XHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgRVZFTlRGRCBcdTAwMjZcdTAwMjYgKFRVTiB8fCAhVFVOKSBcdTAwMjZcdTAwMjYgKFRBUCB8fCAhVEFQKVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTM3LVx0c2VsZWN0IFZIT1NUXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnPTQ2PWNvbmZpZyBWSE9TVF9TQ1NJXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDctXHR0cmlzdGF0ZSBcJiMzNDtWSE9TVF9TQ1NJIFRDTSBmYWJyaWMgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NDg6XHRkZXBlbmRzIG9uIFRBUkdFVF9DT1JFIFx1MDAyNlx1MDAyNiBFVkVOVEZEXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDktXHRzZWxlY3QgVkhPU1Rcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NTY9Y29uZmlnIFZIT1NUX1ZTT0NLXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTctXHR0cmlzdGF0ZSBcJiMzNDt2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NTg6XHRkZXBlbmRzIG9uIFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBFVkVOVEZEXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTktXHRzZWxlY3QgVkhPU1Rcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NzA9Y29uZmlnIFZIT1NUX1ZEUEFcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03MS1cdHRyaXN0YXRlIFwmIzM0O1Zob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXCYjMzQ7XG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NzI6XHRkZXBlbmRzIG9uIEVWRU5URkRcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03My1cdHNlbGVjdCBWSE9TVFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTc0LVx0c2VsZWN0IElSUV9CWVBBU1NfTUFOQUdFUlxuZHJpdmVycy92aG9zdC9LY29uZmlnOjc1Olx0ZGVwZW5kcyBvbiBWRFBBXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzYtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNDMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgVkhPU1QqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgbXkgbWVudGFsIGNoZWNrbGlzdCBoZXJlIHN0YXJ0cyB3aXRoIHRoZSBvYnZpb3VzIGRlcGVuZGVuY3kuIFRvIGdldCBgVkhPU1RfTkVUYCBydW5uaW5nLCBJJiMzOTtsbCBuZWVkIGJvdGggYE5FVGAgYW5kIGBFVkVOVEZEYCBlbmFibGVkIOKAkyB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsLiBUaGlua2luZyBhaGVhZCwgYW5kIHNpbmNlIEkmIzM5O20gZ29pbmcgdG8gYmUgdXNpbmcgdmhvc3QsIHRoZXJlJiMzOTtzIG5vIGhhcm0gaW4gZW5hYmxpbmcgYFZIT1NUX01FTlVgIGFuZCBgVkhPU1RfVlNPQ0tgIGFsb25nc2lkZSBgVkhPU1RfTkVUYC4gSXQgY292ZXJzIGEgYnJvYWQgc2V0IG9mIHVzZSBjYXNlcywgYW5kIGxpa2VseSBwcm92aWRlcyBzb21lIGhlbHBmdWwgdXRpbGl0aWVzLgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyYCBmdW5jdGlvbi4gSSBqdXN0IHdhbnQgdG8gZW5zdXJlIHRoYXQgaXQgb3BlcmF0ZXMgY29ycmVjdGx5LiBUaGF0JiMzOTtzIGEgZ29vZCBzYW5pdHkgY2hlY2suIEkgd2FudCB0byBhdm9pZCBhbnkgbWlzY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3ZyaW5nX3NldF9udW1fYWRkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvdmhvc3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zob3N0LmM9MjA1Nz1zdGF0aWMgbG9uZyB2aG9zdF92cmluZ19zZXRfYWRkcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkLFxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yMTA4LVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjIxMDk6c3RhdGljIGxvbmcgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyKHN0cnVjdCB2aG9zdF9kZXYgKmQsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjExMC1cdFx0XHRcdCAgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTIxNDE9bG9uZyB2aG9zdF92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfZGV2ICpkLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHZvaWQgX191c2VyICphcmdwKVxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yMTU3LVx0ICAgIGlvY3RsID09IFZIT1NUX1NFVF9WUklOR19BRERSKSB7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MjE1ODpcdFx0cmV0dXJuIHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcihkLCB2cSwgaW9jdGwsIGFyZ3ApO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTIxNTktXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4OTQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSB2aG9zdF92cmluZ19pb2N0bCBGdW5jdGlvbioqCgpPa2F5LCBzbyBgdmhvc3RfdnJpbmdfaW9jdGxgIGlzIHRoZSBrZXkgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIHZpcnR1YWwgZGV2aWNlIHJpbmdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIHN5c3RlbS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKmNhbGxlZCogZnJvbSB3aXRoaW4gdGhlIGJyb2FkZXIgVkhPU1QgYXJjaGl0ZWN0dXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBjcnVjaWFsIGNvbnRleHQgcmVnYXJkaW5nIGl0cyBwdXJwb3NlIGFuZCB0aGUgZXZlbnRzIHRoYXQgdHJpZ2dlciBpdHMgZXhlY3V0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHN0YWNrIGlzIHRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3ZyaW5nX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmM9MTczOD1zdGF0aWMgbG9uZyB2aG9zdF9uZXRfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4MjktXHRcdGlmIChyID09IC1FTk9JT0NUTENNRClcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTgzMDpcdFx0XHRyID0gdmhvc3RfdnJpbmdfaW9jdGwoXHUwMDI2bi1cdTAwM2VkZXYsIGlvY3RsLCBhcmdwKTtcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTgzMS1cdFx0ZWxzZVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzNjI9dmhvc3Rfc2NzaV9pb2N0bChzdHJ1Y3QgZmlsZSAqZixcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDMwLVx0XHRpZiAociA9PSAtRU5PSU9DVExDTUQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNDMxOlx0XHRcdHIgPSB2aG9zdF92cmluZ19pb2N0bChcdTAwMjZ2cy1cdTAwM2VkZXYsIGlvY3RsLCBhcmdwKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0MzItXHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cy1cdTAwM2VkZXYubXV0ZXgpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jPTMxNz1zdGF0aWMgbG9uZyB2aG9zdF90ZXN0X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzUyLSAgICAgICAgICAgICAgICBpZiAociA9PSAtRU5PSU9DVExDTUQpXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozNTM6ICAgICAgICAgICAgICAgICAgICAgICAgciA9IHZob3N0X3ZyaW5nX2lvY3RsKFx1MDAyNm4tXHUwMDNlZGV2LCBpb2N0bCwgYXJncCk7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNTQtXHRcdHZob3N0X3Rlc3RfZmx1c2gobik7XG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmM9NjMyPXN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtNzIwLVxuZHJpdmVycy92aG9zdC92ZHBhLmM6NzIxOlx0ciA9IHZob3N0X3ZyaW5nX2lvY3RsKFx1MDAyNnYtXHUwMDNldmRldiwgY21kLCBhcmdwKTtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTcyMi1cdGlmIChyKVxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYz0yMTA5PXN0YXRpYyBsb25nIHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkLFxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yMTQwLX1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoyMTQxOmxvbmcgdmhvc3RfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X2RldiAqZCwgdW5zaWduZWQgaW50IGlvY3RsLCB2b2lkIF9fdXNlciAqYXJncClcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yMTQyLXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjI3OC19XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MjI3OTpFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF92cmluZ19pb2N0bCk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjI4MC1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg9MjIyPWxvbmcgdmhvc3RfZGV2X2lvY3RsKHN0cnVjdCB2aG9zdF9kZXYgKiwgdW5zaWduZWQgaW50IGlvY3RsLCB2b2lkIF9fdXNlciAqYXJncCk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg6MjIzOmxvbmcgdmhvc3RfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X2RldiAqZCwgdW5zaWduZWQgaW50IGlvY3RsLCB2b2lkIF9fdXNlciAqYXJncCk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjI0LWxvbmcgdmhvc3Rfd29ya2VyX2lvY3RsKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgdW5zaWduZWQgaW50IGlvY3RsLFxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz04ODk9c3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTkzNS1cdFx0aWYgKHIgPT0gLUVOT0lPQ1RMQ01EKVxuZHJpdmVycy92aG9zdC92c29jay5jOjkzNjpcdFx0XHRyID0gdmhvc3RfdnJpbmdfaW9jdGwoXHUwMDI2dnNvY2stXHUwMDNlZGV2LCBpb2N0bCwgYXJncCk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTM3LVx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5ODMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYnJlYWtkb3duIG9mIHRoaXMuCgoqKkZvY3VzaW5nIG9uIHZob3N0X3ZyaW5nX2lvY3RsKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIGB2aG9zdF92cmluZ19pb2N0bGAgaXMgZ2V0dGluZyBjYWxsZWQgZnJvbSBhIHdob2xlIGJ1bmNoIG9mIHBsYWNlcyB3aXRoaW4gdGhlIHZob3N0IGZyYW1ld29yazogYHZob3N0X25ldF9pb2N0bGAsIGB2aG9zdF9zY3NpX2lvY3RsYCwgYHZob3N0X3Rlc3RfaW9jdGxgLCBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAsIGFuZCBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYC4gVGhhdCBzdWdnZXN0cyBpdCYjMzk7cyBhIHByZXR0eSBjZW50cmFsIGZ1bmN0aW9uLCBoYW5kbGluZyB2aXJ0dWFsIHJpbmcgaW50ZXJhY3Rpb25zLiBJJiMzOTtkIHNheSB0aGF0IG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLiBUaGUgZmFjdCBpdCYjMzk7cyB1c2VkIGFjcm9zcyBzbyBtYW55IGRpZmZlcmVudCBiYWNrZW5kIGRyaXZlcnMgaW5kaWNhdGVzIGEgY2VudHJhbCBwb2ludCBvZiBjb250cm9sLCBzbyBhbnkgaXNzdWVzIGhlcmUgd291bGQgaGF2ZSB3aWRlc3ByZWFkIGltcGFjdC4KCk5vdywgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgbG9naWMgd2l0aGluIHRoaXMgZnVuY3Rpb24sIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgX192aG9zdF92cV9tZXRhX3Jlc2V0YC4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgYSByZXNldCBvcGVyYXRpb24gaXMgYSBjcml0aWNhbCBwYXJ0IG9mIHZyaW5nIGhhbmRsaW5nLCBzbyB0aGlzIGxvb2tzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmRhbWVudGFsIG9wZXJhdGlvbnMgaGFwcGVuaW5nIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdmhvc3RfdnFfbWV0YV9yZXNldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvdmhvc3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zob3N0LmM9MzM3PUVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X3BvbGxfcXVldWUpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTMzOC1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMzk6c3RhdGljIHZvaWQgX192aG9zdF92cV9tZXRhX3Jlc2V0KHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM0MC17XG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTM0Nz1zdGF0aWMgdm9pZCB2aG9zdF92cV9tZXRhX3Jlc2V0KHN0cnVjdCB2aG9zdF9kZXYgKmQpXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1MS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGQtXHUwMDNlbnZxczsgJiM0MzsmIzQzO2kpXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzUyOlx0XHRfX3Zob3N0X3ZxX21ldGFfcmVzZXQoZC1cdTAwM2V2cXNbaV0pO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTM1My19XG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTM2Nz1zdGF0aWMgdm9pZCB2aG9zdF92cV9yZXNldChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM5Ni1cdHZob3N0X3ZyaW5nX2NhbGxfcmVzZXQoXHUwMDI2dnEtXHUwMDNlY2FsbF9jdHgpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jOjM5NzpcdF9fdmhvc3RfdnFfbWV0YV9yZXNldCh2cSk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzk4LX1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9MjEwOT1zdGF0aWMgbG9uZyB2aG9zdF92cmluZ19zZXRfbnVtX2FkZHIoc3RydWN0IHZob3N0X2RldiAqZCxcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjEzNC1cdCAqL1xuZHJpdmVycy92aG9zdC92aG9zdC5jOjIxMzU6XHRfX3Zob3N0X3ZxX21ldGFfcmVzZXQodnEpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTIxMzYtXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTIyODE9aW50IHZob3N0X2luaXRfZGV2aWNlX2lvdGxiKHN0cnVjdCB2aG9zdF9kZXYgKmQpXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTIyOTctXHRcdHZxLVx1MDAzZWlvdGxiID0gbmlvdGxiO1xuZHJpdmVycy92aG9zdC92aG9zdC5jOjIyOTg6XHRcdF9fdmhvc3RfdnFfbWV0YV9yZXNldCh2cSk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjI5OS1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkxMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDYyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIFN0cmF0ZWd5IGZvciBUZXN0aW5nIHZob3N0X3ZyaW5nX2lvY3RsKioKCk9rYXksIGhlcmUmIzM5O3MgbXkgcGxhbiB0byBjb25maWd1cmUgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgZm9yIGB2aG9zdF92cmluZ19pb2N0bGAuIFNpbmNlIGBfX3Zob3N0X3ZxX21ldGFfcmVzZXRgIGFuZCBgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyYCBhcmUgc3RhdGljLCBgdmhvc3RfdnJpbmdfaW9jdGxgIGlzIHRoZSBrZXkgc3ltYm9sIEkgbmVlZCB0byBmb2N1cyBvbi4gSXQmIzM5O3MgZXhwb3J0ZWQsIHNvIGl0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCkkmIzM5O3ZlIGNoZWNrZWQgdGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb25zLiBgVkhPU1RfTkVUYCwgYFZIT1NUX1ZTT0NLYCwgYFZIT1NUX1NDU0lgLCBhbmQgYFZIT1NUX1ZEUEFgIGFsbCBsb29rIHByb21pc2luZy4gSSBjYW4gaWdub3JlIGBWSE9TVF9DUk9TU19FTkRJQU5fTEVHQUNZYCBmb3Igbm93LiBgVkhPU1RfSU9UTEJgIGlzIHNlbGVjdGVkIGJ5IGBWSE9TVGAsIGFuZCBgVkhPU1RgIGlzIHNlbGVjdGVkIGJ5IGBWSE9TVF9ORVRgLiBCdXQgaXMgYFZIT1NUX05FVGAgc3VmZmljaWVudD8KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gYFZIT1NUX05FVGAgcmVsaWVzIG9uIGBORVQgJmFtcDsmYW1wOyBFVkVOVEZEICZhbXA7JmFtcDsgKFRVTiB8fCAhVFVOKSAmYW1wOyZhbXA7IChUQVAgfHwgIVRBUClgLiBTbywgYE5FVGAgYW5kIGBFVkVOVEZEYCBhcmUgZXNzZW50aWFsLiBgVkhPU1RfVlNPQ0tgIGRlcGVuZHMgb24gYFZTT0NLRVRTICZhbXA7JmFtcDsgRVZFTlRGRGAsIGFuZCBgVkhPU1RfU0NTSWAgb24gYFRBUkdFVF9DT1JFICZhbXA7JmFtcDsgRVZFTlRGRGAuIGBWSE9TVF9WRFBBYCBuZWVkcyBgRVZFTlRGRCAmYW1wOyZhbXA7IFZEUEFgLgoKSW5pdGlhbGx5LCBJIHRob3VnaHQgZW5hYmxpbmcgYFZIT1NUX05FVGAsIGBWSE9TVF9WU09DS2AsIGFuZCBgVkhPU1RfVkRQQWAgd291bGQgYmUgdGhlIGJlc3QuIEJ1dCwgc2luY2UgdGhlIGNvcmUgZnVuY3Rpb24gSSYjMzk7bSB0ZXN0aW5nIGlzIGluIHRoZSBjb3JlIHZob3N0IG1vZHVsZSwgbWF5YmUgb25seSBgVkhPU1RfTkVUYCBpcyBlbm91Z2guIEJ1dCBmb3IgYnJvYWRlciBjb3ZlcmFnZSwgSSBzaG91bGQgY29uc2lkZXIgYWRkaW5nIGBWSE9TVF9WU09DS2AgYW5kIGBWSE9TVF9TQ1NJYC4KCldhaXQgYSBtaW51dGUsIGBWSE9TVGAgaXRzZWxmIGlzIGEgdHJpc3RhdGUuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MsIHNvIG5vdyBJIGNhbiBlbmFibGUgYFZIT1NUYCwgYFZIT1NUX05FVGAsIGFuZCBgVkhPU1RfVlNPQ0tgLgoKQSBxdWljayBwZWVrIGF0IGBkcml2ZXJzL3Zob3N0L0tjb25maWdgIHJldmVhbHMgdGhhdCBgVkhPU1RgIGlzIGEgdHJpc3RhdGUgdGhhdCAqc2VsZWN0cyogYFZIT1NUX0lPVExCYCBhbmQgYFZIT1NUX1RBU0tgLiBJdCBkb2VzbiYjMzk7dCBoYXZlIGEgcHJvbXB0LCBtZWFuaW5nIGl0IGNhbiYjMzk7dCBiZSBlbmFibGVkIGRpcmVjdGx5LiBJbnN0ZWFkLCBJIG5lZWQgdG8gZW5hYmxlIGBWSE9TVF9ORVRgIG9yIGBWSE9TVF9WU09DS2AuCgpDb25maXJtZWQ6IGBWSE9TVF9ORVRgIGlzIGEgdHJpc3RhdGUsICYjMzQ7SG9zdCBrZXJuZWwgYWNjZWxlcmF0b3IgZm9yIHZpcnRpbyBuZXQmIzM0OywgYW5kIGBWSE9TVF9WU09DS2AgaXMgYWxzbyBhIHRyaXN0YXRlLCBhbmQgJiMzNDt2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyJiMzNDsuIEFuZCBgVkhPU1RfVkRQQWAgaXMgYWxzbyB0cmlzdGF0ZSwgYXMgdGhlICYjMzQ7Vmhvc3QgZHJpdmVyIGZvciB2RFBBLWJhc2VkIGJhY2tlbmQmIzM0Oy4KClNvLCBJIHRoaW5rIGVuYWJsaW5nIGBWSE9TVF9ORVRgLCBgVkhPU1RfVlNPQ0tgLCBhbmQgYFZIT1NUX1ZEUEFgIGlzIHRoZSBiZXN0IGFwcHJvYWNoIGZvciB0ZXN0aW5nIGB2aG9zdF92cmluZ19pb2N0bGAgYW5kIHRoZSBicm9hZGVyIHZob3N0IGZ1bmN0aW9uYWxpdHkuIEl0IHByb3ZpZGVzIGdvb2QgY292ZXJhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZIT1NUX1RFU1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjExCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgdGhlIFZob3N0IFRlc3QgSW5mcmFzdHJ1Y3R1cmUqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBpc24mIzM5O3QgdGhlcmUgYSB0ZXN0IGZpbGUgc3BlY2lmaWNhbGx5IGZvciB2aG9zdD8gTXkgbWVtb3J5JiMzOTtzIHVzdWFsbHkgcHJldHR5IGdvb2QsIGFuZCBJIHNlZW0gdG8gcmVjYWxsIHNlZWluZyBgZHJpdmVycy92aG9zdC90ZXN0LmNgIHNvbWV3aGVyZS4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIGRlYnVnZ2luZyBvciBzdGFydGluZyBmcm9tIHNjcmF0Y2gsIEkmIzM5O2QgYmV0dGVyIGNvbmZpcm0gdGhhdC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFJpZ2h0LCBzbyBpZiB0aGF0IGZpbGUgKmRvZXMqIGV4aXN0LCBJIHNob3VsZCBrbm93IGhvdyBpdCYjMzk7cyBiZWluZyBidWlsdCBvciBpbmNsdWRlZCBpbiB0aGUgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGlzIHRlc3QgZmlsZS4gTGV0JiMzOTtzIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBNYWtlZmlsZSBpbiB0aGUgYGRyaXZlcnMvdmhvc3RgIGRpcmVjdG9yeSB0byBzZWUgaG93IHRoaXMgdGVzdCBmaWxlIGlzIGludGVncmF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGVzdFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ0MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6CgoqKkRpZ2dpbmcgaW50byBWaG9zdCBUZXN0IEZpbGVzKioKClJpZ2h0LCBhIG1vbWVudC4gSG9sZCBvbi4gSSBqdXN0IHNwb3R0ZWQgc29tZXRoaW5nIGludGVyZXN0aW5nIGluIHRoYXQgZ3JlcCBvdXRwdXQg4oCTIHRoZSBgZHJpdmVycy92aG9zdC90ZXN0LmNgIGZpbGUuIFRoYXQmIzM5O3MgYSBzdHJvbmcgc2lnbmFsLiBHaXZlbiB0aGF0IGZpbmRpbmcsIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gcmV2aXNpdCB0aGUgYGRyaXZlcnMvdmhvc3QvTWFrZWZpbGVgLiBUaGUgdGVzdCBjb2RlIGlzIGxpa2VseSBpbnRlZ3JhdGVkIG9yIHJlZmVyZW5jZWQgaW4gdGhlIGJ1aWxkIHByb2Nlc3MgdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRob3NlIHRlc3RzIGFyZSBiZWluZyBjb21waWxlZCBhbmQgbGlua2VkLiBUaGF0IE1ha2VmaWxlIHdpbGwgZ2l2ZSBtZSBjcnVjaWFsIGNsdWVzIGFib3V0IHRoZSB0ZXN0aW5nIGluZnJhc3RydWN0dXJlIGZvciB2aG9zdC4gVGhpcyBjb3VsZCBsZWFkIHRvIHVuY292ZXJpbmcgc29tZSByZWxldmFudCB0ZXN0IHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NjIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGEgU3VzcGVjdGVkIEZpbGUgUGF0aCBEaXNjcmVwYW5jeSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB0cmFjayBkb3duIHNvbWV0aGluZyByZWxhdGVkIHRvIHZob3N0LCBhbmQgSSAqdGhvdWdodCogdGhlIHJlbGV2YW50IGZpbGUgbWlnaHQgYmUgYGRyaXZlcnMvdmhvc3QvdnJpbmdoLmNgLiBCdXQgdGhlbiBJIHJhbiBhIGBncmVwYCBhbmQgdGhlIG91dHB1dCBwb2ludGVkIG1lIHRvd2FyZHMgYGRyaXZlcnMvdmhvc3QvdGVzdC5jYC4gSG1tLCB0aGF0JiMzOTtzIGEgYml0IG9kZC4gSSBrbm93IHRoZXNlIHN5c3RlbXMgcHJldHR5IHdlbGwsIGFuZCBJIGRvbiYjMzk7dCByZWNhbGwgc2VlaW5nIGFueXRoaW5nIGNyaXRpY2FsIGluIHRoZSBgdGVzdC5jYCBmaWxlIHVzdWFsbHkuIFN0aWxsLCB0aGUgZ3JlcCBkb2VzbiYjMzk7dCBsaWUuIEFscmlnaHQsIGJlc3QgdG8ganVzdCBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL3Zob3N0L3Rlc3QuY2AgZmlsZSBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaW4gdGhlcmUuIEl0JiMzOTtzIHByb2JhYmx5IGEgdGVzdCBjYXNlLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaWYgdGhpcyBpcyB3aGF0JiMzOTtzIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3Rlc3RfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Rlc3QuYz0yNjU9c3RhdGljIGxvbmcgdmhvc3RfdGVzdF9zZXRfYmFja2VuZChzdHJ1Y3Qgdmhvc3RfdGVzdCAqbiwgdW5zaWduZWQgaW5kZXgsIGludCBmZClcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zMTYtXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozMTc6c3RhdGljIGxvbmcgdmhvc3RfdGVzdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzE4LVx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmM9MzYwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3Rlc3RfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNjItXHQucmVsZWFzZSAgICAgICAgPSB2aG9zdF90ZXN0X3JlbGVhc2UsXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozNjM6XHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF90ZXN0X2lvY3RsLFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzY0LVx0LmNvbXBhdF9pb2N0bCAgID0gY29tcGF0X3B0cl9pb2N0bCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNjgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgc3VtbWFyaXplZCwgZ2VhcmVkIHRvd2FyZHMgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSB2aG9zdCBEcml2ZXIgVGVzdCBTdHJ1Y3R1cmUqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHRlc3RpbmcgbGFuZHNjYXBlIGZvciBgdmhvc3RgLiBHaXZlbiBhIGB0ZXN0LmNgIGZpbGUsIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgdGhlIGZpcnN0IHBsYWNlIHRvIGxvb2sgZm9yIGl0cyBidWlsZCBpbnN0cnVjdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB3b3VsZCBiZSB3aXRoaW4gdGhlIGBkcml2ZXJzL3Zob3N0L01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcHJpbWFyeSBidWlsZCBjb25maWd1cmF0aW9ucyBzaG91bGQgcmVzaWRlLCBpbmNsdWRpbmcgaG93IHRoaXMgc3BlY2lmaWMgdGVzdCBwcm9ncmFtIGlzIGNvbXBpbGVkIGFuZCBsaW5rZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0JiMzOTtzIGEgc3RhbmRhbG9uZSB0ZXN0LCBwYXJ0IG9mIGEgbGFyZ2VyIHRlc3Qgc3VpdGUsIG9yIGlmIGl0IHV0aWxpemVzIGFueSBzcGVjaWZpYyB2aG9zdCBpbmZyYXN0cnVjdHVyZSBkdXJpbmcgaXRzIGJ1aWxkIHByb2Nlc3MuIFRoZSBNYWtlZmlsZSB3aWxsIGJlIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGJ1aWxkIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGVzdFxcLmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzg1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmV2aWV3aW5nIHRoaXMgY29kZToKCioqVmhvc3QgVGVzdCBDb2RlIExvY2F0aW9uIENoZWNrKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgYGRyaXZlcnMvdmhvc3QvdGVzdC5jYCBmaWxlIG1lbnRpb25lZC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY29uZmlybSBpdHMgYnVpbGQgcHJvY2Vzcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBxdWljayBjaGVjayBvZiB0aGUgYGRyaXZlcnMvdmhvc3QvTWFrZWZpbGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyB0ZXN0IGlzIGNvbXBpbGVkIGFuZCBsaW5rZWQgd2l0aGluIHRoZSBicm9hZGVyIHZob3N0IGluZnJhc3RydWN0dXJlLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGggdGhlIG90aGVyIHZob3N0IG1vZHVsZXMgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29tcGlsYXRpb24gZmxhZ3Mgb3IgZGVwZW5kZW5jaWVzIEkgc2hvdWxkIGtub3cgYWJvdXQuIFRoaXMgTWFrZWZpbGUgc2hvdWxkIGNvbnRhaW4gdGhlIGFuc3dlcnMgSSYjMzk7bSBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRvYmotJChDT05GSUdfVkhPU1RfTkVUKSAmIzQzOz0gdmhvc3RfbmV0Lm9cbiAgIDM6XHR2aG9zdF9uZXQteSA6PSBuZXQub1xuICAgNDpcdFxuICAgNTpcdG9iai0kKENPTkZJR19WSE9TVF9TQ1NJKSAmIzQzOz0gdmhvc3Rfc2NzaS5vXG4gICA2Olx0dmhvc3Rfc2NzaS15IDo9IHNjc2kub1xuICAgNzpcdFxuICAgODpcdG9iai0kKENPTkZJR19WSE9TVF9WU09DSykgJiM0Mzs9IHZob3N0X3Zzb2NrLm9cbiAgIDk6XHR2aG9zdF92c29jay15IDo9IHZzb2NrLm9cbiAgMTA6XHRcbiAgMTE6XHRvYmotJChDT05GSUdfVkhPU1RfUklORykgJiM0Mzs9IHZyaW5naC5vXG4gIDEyOlx0XG4gIDEzOlx0b2JqLSQoQ09ORklHX1ZIT1NUX1ZEUEEpICYjNDM7PSB2aG9zdF92ZHBhLm9cbiAgMTQ6XHR2aG9zdF92ZHBhLXkgOj0gdmRwYS5vXG4gIDE1Olx0XG4gIDE2Olx0b2JqLSQoQ09ORklHX1ZIT1NUKVx0JiM0Mzs9IHZob3N0Lm9cbiAgMTc6XHRcbiAgMTg6XHRvYmotJChDT05GSUdfVkhPU1RfSU9UTEIpICYjNDM7PSB2aG9zdF9pb3RsYi5vXG4gIDE5Olx0dmhvc3RfaW90bGIteSA6PSBpb3RsYi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODkzCgkJCQkJCQlvdXRwdXQ6IDE3MwoJCQkJCQkJdGhvdWdodHM6IDU1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogdmhvc3RfdnJpbmdfaW9jdGwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgZHJpdmVycy92aG9zdC90ZXN0LmNgIGlzbiYjMzk7dCBpbiB0aGUgTWFrZWZpbGUuIFRoYXQmIzM5O3MgYSB0ZXN0IG1vZHVsZSwgbGlrZWx5IG5vdCBidWlsdCBieSBkZWZhdWx0LCBvciBidWlsdCB2aWEgc29tZSBzZXBhcmF0ZSBjb25maWd1cmF0aW9uLiBUaGUgbWFpbiBmb2N1cyBoZXJlIGlzIGRlZmluaXRlbHkgYFZIT1NUX05FVGAuCgpNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHN1bW1hcml6ZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4gVGhlIHBhdGNoIGFkZHMgYSBjYWxsIHRvIGBfX3Zob3N0X3ZxX21ldGFfcmVzZXQodnEpYCB3aXRoaW4gYHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcigpYC4gVGhpcyBgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyKClgIGZ1bmN0aW9uIGl0c2VsZiBpcyBjYWxsZWQgZnJvbSBgdmhvc3RfdnJpbmdfaW9jdGwoKWAgd2hlbiBzcGVjaWZpYyBpb2N0bHMgYXJlIGludm9rZWQ6IGBWSE9TVF9TRVRfVlJJTkdfQUREUmAgb3IgYFZIT1NUX1NFVF9WUklOR19OVU1gLiBDcml0aWNhbGx5LCBgdmhvc3RfdnJpbmdfaW9jdGwoKWAgaXMgKnRoZSogZnVuY3Rpb24gY2FsbGVkIGJ5IHZhcmlvdXMgdmhvc3QgZHJpdmVycyDigJMgYHZob3N0X25ldGAsIGB2aG9zdF92c29ja2AsIGB2aG9zdF9zY3NpYCwgYHZob3N0X3ZkcGFgLCBhbmQgcHJvYmFibHkgb3RoZXJzLgoKVGhpcyBpcyBhIGNsZWFyLCByZWFjaGFibGUgY29kZSBwYXRoLCBhbmQgaXQgZGVmaW5pdGVseSBzb3VuZHMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gZnV6ei4gVGhlIGlkZWFsIHRhcmdldCBpcyBgdmhvc3RfdnJpbmdfaW9jdGxgLiBUbyBlbmFibGUgaXQsIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBWSE9TVF9ORVRgLCBgVkhPU1RfVlNPQ0tgLCBhbmQgYFZIT1NUX1ZEUEFgLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMuIGBWSE9TVF9ORVRgIHJlbGllcyBvbiBgTkVUICZhbXA7JmFtcDsgRVZFTlRGRCAmYW1wOyZhbXA7IChUVU4gfHwgIVRVTikgJmFtcDsmYW1wOyAoVEFQIHx8ICFUQVApYC4gR29vZCwgSSBjYW4gc2F0aXNmeSB0aG9zZS4gYFZIT1NUX1ZTT0NLYCBuZWVkcyBgVlNPQ0tFVFMgJmFtcDsmYW1wOyBFVkVOVEZEYCwgYW5kIGBWSE9TVF9WRFBBYCBuZWVkcyBgRVZFTlRGRCAmYW1wOyZhbXA7IFZEUEFgLiBJIHRoaW5rIHByb3ZpZGluZyB0aGVzZSB3aWxsIGJlIGVub3VnaC4KCkp1c3QgdG8gYmUgc3VyZSwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYHZob3N0X3ZyaW5nX2lvY3RsYCBpcyB0aGUgbW9zdCBlZmZlY3RpdmUgc3ltYm9sIHRvIGZvY3VzIG9uLiBZZXMsIGl0JiMzOTtzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgaW9jdGxzIHRoYXQgdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC4gYHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcmAgaXRzZWxmIGlzIHN0YXRpYywgc28gaXQgbWlnaHQgYmUgaW5saW5lZCBvciBoYXZlIGEgbm9uLWRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBCdXQgYHZob3N0X3ZyaW5nX2lvY3RsYCBpcyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYy4gSXQmIzM5O3MgdGhlIHJpZ2h0IGNob2ljZS4KCkluIHN1bW1hcnksIHRoZSBwYXRjaCBtb2RpZmllcyBgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyYCB0byByZXNldCB0aGUgbWV0YWRhdGEgY2FjaGUgd2hlbiB0aGUgdnJpbmcgYWRkcmVzcyBvciBzaXplIGlzIHVwZGF0ZWQuIFRoaXMgY2hhbmdlIGlzIGFjY2Vzc2VkIHRocm91Z2ggYHZob3N0X3ZyaW5nX2lvY3RsYCB3aGljaCBoYW5kbGVzIGBWSE9TVF9TRVRfVlJJTkdfQUREUmAgb3IgYFZIT1NUX1NFVF9WUklOR19OVU1gIGlvY3Rscy4gVGhlc2UgaW9jdGxzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSBieSBzZXZlcmFsIHZob3N0IGRyaXZlcnMgc3VjaCBhcyBgdmhvc3QtbmV0YCBhbmQgYHZob3N0LXZzb2NrYC4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIHRoZXJlZm9yZSwgaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIGZ1enouIEkgd2lsbCBzZWxlY3QgYHZob3N0X3ZyaW5nX2lvY3RsYCBhcyB0aGUgZm9jdXMgZm9yIGZ1enppbmcgYW5kIHNldCB0aGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9ORVQmIzM0OywKICAgICYjMzQ7VkhPU1RfVlNPQ0smIzM0OywKICAgICYjMzQ7VkhPU1RfVkRQQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3ZyaW5nX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB2aG9zdF92cmluZ19zZXRfbnVtX2FkZHJgIHRvIHJlc2V0IHRoZSBtZXRhZGF0YSBjYWNoZSB3aGVuIHRoZSB2cmluZyBhZGRyZXNzIG9yIHNpemUgaXMgY2hhbmdlZC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIGB2aG9zdF92cmluZ19pb2N0bGAgd2l0aCBgVkhPU1RfU0VUX1ZSSU5HX0FERFJgIG9yIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCBpb2N0bHMsIHdoaWNoIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSBieSB2YXJpb3VzIHZob3N0IGRyaXZlcnMgKGUuZy4sIHZob3N0LW5ldCwgdmhvc3QtdnNvY2spLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9ORVQmIzM0OywKICAgICYjMzQ7VkhPU1RfVlNPQ0smIzM0OywKICAgICYjMzQ7VkhPU1RfVkRQQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3ZyaW5nX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB2aG9zdF92cmluZ19zZXRfbnVtX2FkZHJgIHRvIHJlc2V0IHRoZSBtZXRhZGF0YSBjYWNoZSB3aGVuIHRoZSB2cmluZyBhZGRyZXNzIG9yIHNpemUgaXMgY2hhbmdlZC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIGB2aG9zdF92cmluZ19pb2N0bGAgd2l0aCBgVkhPU1RfU0VUX1ZSSU5HX0FERFJgIG9yIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCBpb2N0bHMsIHdoaWNoIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSBieSB2YXJpb3VzIHZob3N0IGRyaXZlcnMgKGUuZy4sIHZob3N0LW5ldCwgdmhvc3QtdnNvY2spLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDM6MTQ6MjYuNzY4OTYwNDU5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ5MDA0MDI5MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfTkVUXCIsXG4gICAgXCJWSE9TVF9WU09DS1wiLFxuICAgIFwiVkhPU1RfVkRQQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X3ZyaW5nX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcmAgdG8gcmVzZXQgdGhlIG1ldGFkYXRhIGNhY2hlIHdoZW4gdGhlIHZyaW5nIGFkZHJlc3Mgb3Igc2l6ZSBpcyBjaGFuZ2VkLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgYHZob3N0X3ZyaW5nX2lvY3RsYCB3aXRoIGBWSE9TVF9TRVRfVlJJTkdfQUREUmAgb3IgYFZIT1NUX1NFVF9WUklOR19OVU1gIGlvY3Rscywgd2hpY2ggYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIGJ5IHZhcmlvdXMgdmhvc3QgZHJpdmVycyAoZS5nLiwgdmhvc3QtbmV0LCB2aG9zdC12c29jaykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAzOjE0OjI2Ljc2ODk2ODEwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwODU5MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2EwMDQwYzNjMGYyZDNlZWQ1ZDZiODkyMDA1YjFhNDE4YTYxMjE0ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzIDAzOjE0OjI1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuY1xcbmluZGV4IDRjNTI1YjNlMTZlYWQuLjc3Yzk2OTkzMTAwYjUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5jXFxuKysrIGIvZHJpdmVycy92aG9zdC92aG9zdC5jXFxuQEAgLTIxMjYsNiArMjEyNiwxNCBAQCBzdGF0aWMgbG9uZyB2aG9zdF92cmluZ19zZXRfbnVtX2FkZHIoc3RydWN0IHZob3N0X2RldiAqZCxcXG4gXFx0XFx0QlVHKCk7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBtZXRhZGF0YSBjYWNoZSBob2xkcyB0aGUgSU9UTEIgbWFwcGluZyB0aGF0IGJhY2tlZCB0aGUgcHJldmlvdXNcXG4rXFx0ICogZGVzYy9hdmFpbC91c2VkIGFkZHJlc3NlcyBhbmQgdnJpbmcgc2l6ZSwgYm90aCBvZiB3aGljaCBhcmUgYmVpbmdcXG4rXFx0ICogcmVwbGFjZWQgaGVyZS4gIGlvdGxiX2FjY2Vzc19vaygpIHRha2VzIGEgY2FjaGUgaGl0IGFzIHByb29mIHRoYXQgdGhlXFxuK1xcdCAqIHJlZ2lvbiB3YXMgdmFsaWRhdGVkLCBzbyB0aGUgc3RhbGUgZW50cmllcyBoYXZlIHRvIGdvLlxcbitcXHQgKi9cXG4rXFx0X192aG9zdF92cV9tZXRhX3Jlc2V0KHZxKTtcXG4rXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4gXFxuIFxcdHJldHVybiByO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMzoxNDoyNy4yNTEyNjkyNzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NDQxODA4NjAzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9ORVRcIixcbiAgICBcIlZIT1NUX1ZTT0NLXCIsXG4gICAgXCJWSE9TVF9WRFBBXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfdnJpbmdfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyYCB0byByZXNldCB0aGUgbWV0YWRhdGEgY2FjaGUgd2hlbiB0aGUgdnJpbmcgYWRkcmVzcyBvciBzaXplIGlzIGNoYW5nZWQuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBgdmhvc3RfdnJpbmdfaW9jdGxgIHdpdGggYFZIT1NUX1NFVF9WUklOR19BRERSYCBvciBgVkhPU1RfU0VUX1ZSSU5HX05VTWAgaW9jdGxzLCB3aGljaCBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgYnkgdmFyaW91cyB2aG9zdCBkcml2ZXJzIChlLmcuLCB2aG9zdC1uZXQsIHZob3N0LXZzb2NrKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2EwMDQwYzNjMGYyZDNlZWQ1ZDZiODkyMDA1YjFhNDE4YTYxMjE0ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMDM6MTQ6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmMgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcbmluZGV4IDRjNTI1YjNlMTZlYWQuLjc3Yzk2OTkzMTAwYjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcbisrKyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuY1xuQEAgLTIxMjYsNiArMjEyNiwxNCBAQCBzdGF0aWMgbG9uZyB2aG9zdF92cmluZ19zZXRfbnVtX2FkZHIoc3RydWN0IHZob3N0X2RldiAqZCxcbiBcdFx0QlVHKCk7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogVGhlIG1ldGFkYXRhIGNhY2hlIGhvbGRzIHRoZSBJT1RMQiBtYXBwaW5nIHRoYXQgYmFja2VkIHRoZSBwcmV2aW91c1xuK1x0ICogZGVzYy9hdmFpbC91c2VkIGFkZHJlc3NlcyBhbmQgdnJpbmcgc2l6ZSwgYm90aCBvZiB3aGljaCBhcmUgYmVpbmdcbitcdCAqIHJlcGxhY2VkIGhlcmUuICBpb3RsYl9hY2Nlc3Nfb2soKSB0YWtlcyBhIGNhY2hlIGhpdCBhcyBwcm9vZiB0aGF0IHRoZVxuK1x0ICogcmVnaW9uIHdhcyB2YWxpZGF0ZWQsIHNvIHRoZSBzdGFsZSBlbnRyaWVzIGhhdmUgdG8gZ28uXG4rXHQgKi9cbitcdF9fdmhvc3RfdnFfbWV0YV9yZXNldCh2cSk7XG4rXG4gXHRtdXRleF91bmxvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuIFxuIFx0cmV0dXJuIHI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMzoxNDoyNy4yNTEyNzE4MDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzQyNjI0MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgdmhvc3QgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyBiZWVuIGFwcGxpZWQgdG8gYGRyaXZlcnMvdmhvc3Qvdmhvc3QuY2AuIFRoZSBjb3JlIGNoYW5nZSBpcyB0aGlzIG5ldyBjYWxsIHRvIGBfX3Zob3N0X3ZxX21ldGFfcmVzZXQodnEpO2Agd2l0aGluIGB2aG9zdF92cmluZ19zZXRfbnVtX2FkZHIoKWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgZnVsbHkgdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gaGVyZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgKndoeSogdGhpcyBjYWxsIHdhcyBpbnRyb2R1Y2VkLlxuXG5TcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBkZWZpbml0aW9ucyBhbmQgaW1wbGVtZW50YXRpb25zIG9mIGJvdGggYHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcigpYCBhbmQgYF9fdmhvc3RfdnFfbWV0YV9yZXNldCgpYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlaXIgcm9sZXMgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggZWFjaCBvdGhlci4gSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBkYXRhIHN0cnVjdHVyZXMgdGhleSBtYW5pcHVsYXRlLCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGV5J3JlIGNhbGxlZCwgYW5kIHdoYXQga2luZCBvZiBzdGF0ZSBtYW5hZ2VtZW50IHRoZXkncmUgcmVzcG9uc2libGUgZm9yLiBJJ20gZXhwZWN0aW5nIHRoaXMgYF9fdmhvc3RfdnFfbWV0YV9yZXNldCgpYCBjYWxsIHRvIGJlIGVzc2VudGlhbC4gSSB3YW50IHRvIHVuY292ZXIgYW55IHBvdGVudGlhbCBjb25zZXF1ZW5jZXMgdGhpcyBoYXMgaW4gcGVyZm9ybWFuY2UsIHNlY3VyaXR5IG9yIGNvcnJlY3RuZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTA1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMzoxNDozMC45OTM4OTkwMDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ2NTUyNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdnJpbmdfc2V0X251bV9hZGRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3Qvdmhvc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmM9MjA1Nz1zdGF0aWMgbG9uZyB2aG9zdF92cmluZ19zZXRfYWRkcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkLFxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTIxMDgtXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjIxMDk6c3RhdGljIGxvbmcgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyKHN0cnVjdCB2aG9zdF9kZXYgKmQsXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTIxMTAtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYz0yMTQxPWxvbmcgdmhvc3RfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X2RldiAqZCwgdW5zaWduZWQgaW50IGlvY3RsLCB2b2lkIF9fdXNlciAqYXJncClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yMTU3LVxcdCAgICBpb2N0bCA9PSBWSE9TVF9TRVRfVlJJTkdfQUREUikge1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoyMTU4OlxcdFxcdHJldHVybiB2aG9zdF92cmluZ19zZXRfbnVtX2FkZHIoZCwgdnEsIGlvY3RsLCBhcmdwKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjE1OS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAzOjE0OjMxLjA2ODU2MzQxOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NzE4OTA2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyBhIHZob3N0IGlvY3RsIENhbGwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNhbGwsIHNwZWNpZmljYWxseSB3aXRoaW4gYHZob3N0X3ZyaW5nX2lvY3RsYC4gSXQgc2VlbXMgdGhpcyBpcyBnZXR0aW5nIHRyaWdnZXJlZCB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBlaXRoZXIgc2V0dGluZyB0aGUgdnJpbmcgYWRkcmVzcyBvciB0aGUgdnJpbmcgbnVtYmVyLCBuYW1lbHkgd2l0aCB0aGUgYGlvY3RsYCB2YWx1ZXMgYFZIT1NUX1NFVF9WUklOR19BRERSYCBvciBgVkhPU1RfU0VUX1ZSSU5HX05VTWAuIEFscmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIEl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgY29kZSwgYW5kIEkgYmVsaWV2ZSB0aGF0IGl0J3MgZnVuY3Rpb25pbmcgYXMgaXQgc2hvdWxkLlxuXG5Ob3csIGxldCdzIGp1c3QgY29uZmlybSB0aGF0IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2Ugd2l0aGluIGBkcml2ZXJzL3Zob3N0L3Zob3N0LmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBleHBlY3RlZCBzZXR0aW5ncyBhcmUgZW5hYmxlZCB0byBlbnN1cmUgdGhpcyBiZWhhdmVzIGFzIGV4cGVjdGVkIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LiBUaGF0J3MgdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc0NSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAzOjE0OjMzLjk0MDQ1NjgzN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjI4MjYxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvTWFrZWZpbGU9MTQ9dmhvc3RfdmRwYS15IDo9IHZkcGEub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtMTUtXFxuZHJpdmVycy92aG9zdC9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfVkhPU1QpXFx0Kz0gdmhvc3Qub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtMTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAzOjE0OjM0LjAyMjc1MTI4MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NzQ3MjAxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFZIT1NUIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cbkFscmlnaHQsIHNvIHdlJ3ZlIGdvdCBhIHNpdHVhdGlvbiB3aGVyZSB3ZSdyZSBnb2luZyB0byBuZWVkIGBDT05GSUdfVkhPU1RgLiBUaGUgbG9naWNhbCBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZmxhZyBpcyBkZWZpbmVkIGFuZCB3aGF0IGl0IGRlcGVuZHMgb24uIEknbGwgbmVlZCB0byBnbyBzcGVsdW5raW5nIGluIHRoZSBrZXJuZWwgY29uZmlnIGZpbGVzIGZvciB0aGUgYHZob3N0YCBzdWJzeXN0ZW0g4oCTIHNvIHRoYXQgbWVhbnMgSSdtIGdvaW5nIHN0cmFpZ2h0IHRvIGBkcml2ZXJzL3Zob3N0L0tjb25maWdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLCB0byBtYWtlIHN1cmUgdGhpcyBpcyBnb2luZyB0byBwbGF5IG5pY2Ugd2l0aCB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbiBvZiB0aGlzIHN5c3RlbS4gVGltZSB0byBzZWUgd2hhdCB0aGF0IGBLY29uZmlnYCBmaWxlIHRlbGxzIHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTAyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDM6MTQ6MzcuNTk3NDc0MDA3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NjY0Nzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjI6Y29uZmlnIFZIT1NUX0lPVExCXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy04LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo5OmNvbmZpZyBWSE9TVF9SSU5HXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTEwLVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMTUtXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjE2OmNvbmZpZyBWSE9TVF9UQVNLXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTE3LVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0xOS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MjA6Y29uZmlnIFZIT1NUXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTIxLVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMjctXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjI4Om1lbnVjb25maWcgVkhPU1RfTUVOVVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0yOS1cXHRib29sIFxcXCJWSE9TVCBkcml2ZXJzXFxcIlxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnPTMyPWlmIFZIT1NUX01FTlVcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzMtXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjM0OmNvbmZpZyBWSE9TVF9ORVRcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzUtXFx0dHJpc3RhdGUgXFxcIkhvc3Qga2VybmVsIGFjY2VsZXJhdG9yIGZvciB2aXJ0aW8gbmV0XFxcIlxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTQ1LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo0Njpjb25maWcgVkhPU1RfU0NTSVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00Ny1cXHR0cmlzdGF0ZSBcXFwiVkhPU1RfU0NTSSBUQ00gZmFicmljIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01NS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NTY6Y29uZmlnIFZIT1NUX1ZTT0NLXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU3LVxcdHRyaXN0YXRlIFxcXCJ2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTY5LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo3MDpjb25maWcgVkhPU1RfVkRQQVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03MS1cXHR0cmlzdGF0ZSBcXFwiVmhvc3QgZHJpdmVyIGZvciB2RFBBLWJhc2VkIGJhY2tlbmRcXFwiXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctODItXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjgzOmNvbmZpZyBWSE9TVF9DUk9TU19FTkRJQU5fTEVHQUNZXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkNyb3NzLWVuZGlhbiBzdXBwb3J0IGZvciB2aG9zdFxcXCJcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy05Ny1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6OTg6Y29uZmlnIFZIT1NUX0VOQUJMRV9GT1JLX09XTkVSX0NPTlRST0xcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctOTktXFx0Ym9vbCBcXFwiRW5hYmxlIFZIT1NUX0VOQUJMRV9GT1JLX09XTkVSX0NPTlRST0xcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAzOjE0OjM3LjY3MjE0NTY2MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjE2MTc2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYENPTkZJR19WSE9TVGAuIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGlzIGlzIGEgdHJpc3RhdGUgb3B0aW9uLCBsaWtlbHkgYWN0aW5nIGFzIGEgcGFyZW50IGZvciBhIGJ1bmNoIG9mIHZpcnR1YWxpemF0aW9uIGhvc3QgZmVhdHVyZXMuIE15IGh1bmNoIGlzIGl0J3Mgc2VsZWN0ZWQgKGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5KSBieSB0aGluZ3MgbGlrZSBgVkhPU1RfTkVUYCwgYFZIT1NUX1NDU0lgLCBhbmQgYFZIT1NUX1ZTT0NLYCDigJMgY29tbW9uIHZob3N0LWJhc2VkIGRyaXZlcnMuIFRvIGNvbmZpcm0gdGhpcyByZWxhdGlvbnNoaXAsIEkgcmVhbGx5IG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRob3NlIGRlcGVuZGVudCBvcHRpb25zLiBMZXQncyBzdGFydCBieSBxdWlja2x5IGNoZWNraW5nIHRoZSBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciBib3RoIGBWSE9TVF9ORVRgIGFuZCBgVkhPU1RfTUVOVWAgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZGVwZW5kZW5jaWVzIHdpbGwgZ2l2ZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGBDT05GSUdfVkhPU1RgIGZpdHMgaW50byB0aGUgZ3JlYXRlciBrZXJuZWwgY29uZmlndXJhdGlvbiBzY2hlbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NDksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMzoxNDo0MS4wOTM3NjY1MzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MjU4MTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBWSE9TVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnPTk9Y29uZmlnIFZIT1NUX1JJTkdcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMTAtXFx0dHJpc3RhdGVcXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MTE6XFx0c2VsZWN0IFZIT1NUX0lPVExCXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTEyLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZz0yMD1jb25maWcgVkhPU1RcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMjEtXFx0dHJpc3RhdGVcXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MjI6XFx0c2VsZWN0IFZIT1NUX0lPVExCXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjIzOlxcdHNlbGVjdCBWSE9TVF9UQVNLXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTI0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZz0zND1jb25maWcgVkhPU1RfTkVUXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzYtXFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgRVZFTlRGRCBcXHUwMDI2XFx1MDAyNiAoVFVOIHx8ICFUVU4pIFxcdTAwMjZcXHUwMDI2IChUQVAgfHwgIVRBUClcXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6Mzc6XFx0c2VsZWN0IFZIT1NUXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTM4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZz00Nj1jb25maWcgVkhPU1RfU0NTSVxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTQ4LVxcdGRlcGVuZHMgb24gVEFSR0VUX0NPUkUgXFx1MDAyNlxcdTAwMjYgRVZFTlRGRFxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo0OTpcXHRzZWxlY3QgVkhPU1RcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTAtXFx0c2VsZWN0IFNHX1BPT0xcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZz01Nj1jb25maWcgVkhPU1RfVlNPQ0tcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01OC1cXHRkZXBlbmRzIG9uIFZTT0NLRVRTIFxcdTAwMjZcXHUwMDI2IEVWRU5URkRcXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NTk6XFx0c2VsZWN0IFZIT1NUXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTYwLVxcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NzA9Y29uZmlnIFZIT1NUX1ZEUEFcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03Mi1cXHRkZXBlbmRzIG9uIEVWRU5URkRcXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NzM6XFx0c2VsZWN0IFZIT1NUXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTc0LVxcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDM6MTQ6NDEuMTcwMDMxMzQyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDEyMDE1OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVkhPU1QgQ29uZmlndXJhdGlvbiBEZWNpc2lvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gY29uZmlndXJpbmcgdGhlIHZpcnR1YWwgaG9zdCBmdW5jdGlvbmFsaXR5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzZXR0aW5nIGBWSE9TVF9ORVRgIHdpbGwgYXV0b21hdGljYWxseSBoYW5kbGUgc2VsZWN0aW5nIGBWSE9TVGAsIGFuZCB0aGVuIEkgY2FuIGxldmVyYWdlIGJvdGggYFZIT1NUX05FVGAgYW5kIGBWSE9TVF9NRU5VYC4gQnV0IGhvbGQgb24sIEkgcmVtZW1iZXIgbm93LCBgVkhPU1RfTUVOVWAgaXMganVzdCBmb3IgdGhlIG1lbnUgY29uZmlndXJhdGlvbiBpdHNlbGYuIFNvLCB0byBrZWVwIHRoaW5ncyBzdHJlYW1saW5lZCwgZW5hYmxpbmcgYFZIT1NUX05FVGAgaXMgdGhlIG1vc3QgZGlyZWN0IGFwcHJvYWNoIGJlY2F1c2UgaXQgaGFuZGxlcyB0aGUgYFZIT1NUYCBzZWxlY3Rpb24gaW1wbGljaXRseS4gSnVzdCB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgYWNjdXJhdGUgYW5kIGNvbnNpZGVyIGFueSBwb3RlbnRpYWwgaXNzdWVzLCBzbyBJIHdpbGwgbm93IGdvIGFuZCB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBhc3NvY2lhdGVkIHdpdGggYFZIT1NUX01FTlVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Njk2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDM6MTQ6NDQuNjcxMjM2MTkxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzgyNTI1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWc9MzQ9Y29uZmlnIFZIT1NUX05FVFxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zNS1cXHR0cmlzdGF0ZSBcXFwiSG9zdCBrZXJuZWwgYWNjZWxlcmF0b3IgZm9yIHZpcnRpbyBuZXRcXFwiXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjM2OlxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IEVWRU5URkQgXFx1MDAyNlxcdTAwMjYgKFRVTiB8fCAhVFVOKSBcXHUwMDI2XFx1MDAyNiAoVEFQIHx8ICFUQVApXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTM3LVxcdHNlbGVjdCBWSE9TVFxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnPTQ2PWNvbmZpZyBWSE9TVF9TQ1NJXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTQ3LVxcdHRyaXN0YXRlIFxcXCJWSE9TVF9TQ1NJIFRDTSBmYWJyaWMgZHJpdmVyXFxcIlxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo0ODpcXHRkZXBlbmRzIG9uIFRBUkdFVF9DT1JFIFxcdTAwMjZcXHUwMDI2IEVWRU5URkRcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDktXFx0c2VsZWN0IFZIT1NUXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NTY9Y29uZmlnIFZIT1NUX1ZTT0NLXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU3LVxcdHRyaXN0YXRlIFxcXCJ2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXFxcIlxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo1ODpcXHRkZXBlbmRzIG9uIFZTT0NLRVRTIFxcdTAwMjZcXHUwMDI2IEVWRU5URkRcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTktXFx0c2VsZWN0IFZIT1NUXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NzA9Y29uZmlnIFZIT1NUX1ZEUEFcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzEtXFx0dHJpc3RhdGUgXFxcIlZob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXFxcIlxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo3MjpcXHRkZXBlbmRzIG9uIEVWRU5URkRcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzMtXFx0c2VsZWN0IFZIT1NUXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTc0LVxcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NzU6XFx0ZGVwZW5kcyBvbiBWRFBBXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTc2LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDM6MTQ6NDQuNzQ5MDY3Nzk2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MzE2NjE4MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zIGZvciBWSE9TVCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgbXkgbWVudGFsIGNoZWNrbGlzdCBoZXJlIHN0YXJ0cyB3aXRoIHRoZSBvYnZpb3VzIGRlcGVuZGVuY3kuIFRvIGdldCBgVkhPU1RfTkVUYCBydW5uaW5nLCBJJ2xsIG5lZWQgYm90aCBgTkVUYCBhbmQgYEVWRU5URkRgIGVuYWJsZWQg4oCTIHRoYXQncyBmdW5kYW1lbnRhbC4gVGhpbmtpbmcgYWhlYWQsIGFuZCBzaW5jZSBJJ20gZ29pbmcgdG8gYmUgdXNpbmcgdmhvc3QsIHRoZXJlJ3Mgbm8gaGFybSBpbiBlbmFibGluZyBgVkhPU1RfTUVOVWAgYW5kIGBWSE9TVF9WU09DS2AgYWxvbmdzaWRlIGBWSE9TVF9ORVRgLiBJdCBjb3ZlcnMgYSBicm9hZCBzZXQgb2YgdXNlIGNhc2VzLCBhbmQgbGlrZWx5IHByb3ZpZGVzIHNvbWUgaGVscGZ1bCB1dGlsaXRpZXMuXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyYCBmdW5jdGlvbi4gSSBqdXN0IHdhbnQgdG8gZW5zdXJlIHRoYXQgaXQgb3BlcmF0ZXMgY29ycmVjdGx5LiBUaGF0J3MgYSBnb29kIHNhbml0eSBjaGVjay4gSSB3YW50IHRvIGF2b2lkIGFueSBtaXNjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM0MywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAzOjE0OjQ4LjI4MDczMTY5M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ2MzE3MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdnJpbmdfc2V0X251bV9hZGRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3Qvdmhvc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmM9MjA1Nz1zdGF0aWMgbG9uZyB2aG9zdF92cmluZ19zZXRfYWRkcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkLFxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTIxMDgtXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjIxMDk6c3RhdGljIGxvbmcgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyKHN0cnVjdCB2aG9zdF9kZXYgKmQsXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTIxMTAtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYz0yMTQxPWxvbmcgdmhvc3RfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X2RldiAqZCwgdW5zaWduZWQgaW50IGlvY3RsLCB2b2lkIF9fdXNlciAqYXJncClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yMTU3LVxcdCAgICBpb2N0bCA9PSBWSE9TVF9TRVRfVlJJTkdfQUREUikge1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoyMTU4OlxcdFxcdHJldHVybiB2aG9zdF92cmluZ19zZXRfbnVtX2FkZHIoZCwgdnEsIGlvY3RsLCBhcmdwKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjE1OS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAzOjE0OjQ4LjM3NTM2NzU4OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTc2NTk1NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB2aG9zdF92cmluZ19pb2N0bCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIGB2aG9zdF92cmluZ19pb2N0bGAgaXMgdGhlIGtleSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgdmlydHVhbCBkZXZpY2UgcmluZ3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdHJhY2UgaXRzIHVzYWdlLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpjYWxsZWQqIGZyb20gd2l0aGluIHRoZSBicm9hZGVyIFZIT1NUIGFyY2hpdGVjdHVyZS4gVGhpcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBjb250ZXh0IHJlZ2FyZGluZyBpdHMgcHVycG9zZSBhbmQgdGhlIGV2ZW50cyB0aGF0IHRyaWdnZXIgaXRzIGV4ZWN1dGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayBpcyB0aGUgZmlyc3QgbG9naWNhbCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODk0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDM6MTQ6NTEuMzUxOTY2NzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjE1NjYyNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdnJpbmdfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmM9MTczOD1zdGF0aWMgbG9uZyB2aG9zdF9uZXRfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTgyOS1cXHRcXHRpZiAociA9PSAtRU5PSU9DVExDTUQpXFxuZHJpdmVycy92aG9zdC9uZXQuYzoxODMwOlxcdFxcdFxcdHIgPSB2aG9zdF92cmluZ19pb2N0bChcXHUwMDI2bi1cXHUwMDNlZGV2LCBpb2N0bCwgYXJncCk7XFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODMxLVxcdFxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzNjI9dmhvc3Rfc2NzaV9pb2N0bChzdHJ1Y3QgZmlsZSAqZixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0MzAtXFx0XFx0aWYgKHIgPT0gLUVOT0lPQ1RMQ01EKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0MzE6XFx0XFx0XFx0ciA9IHZob3N0X3ZyaW5nX2lvY3RsKFxcdTAwMjZ2cy1cXHUwMDNlZGV2LCBpb2N0bCwgYXJncCk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQzMi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnZzLVxcdTAwM2VkZXYubXV0ZXgpO1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmM9MzE3PXN0YXRpYyBsb25nIHZob3N0X3Rlc3RfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM1Mi0gICAgICAgICAgICAgICAgaWYgKHIgPT0gLUVOT0lPQ1RMQ01EKVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM1MzogICAgICAgICAgICAgICAgICAgICAgICByID0gdmhvc3RfdnJpbmdfaW9jdGwoXFx1MDAyNm4tXFx1MDAzZWRldiwgaW9jdGwsIGFyZ3ApO1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM1NC1cXHRcXHR2aG9zdF90ZXN0X2ZsdXNoKG4pO1xcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmM9NjMyPXN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy03MjAtXFxuZHJpdmVycy92aG9zdC92ZHBhLmM6NzIxOlxcdHIgPSB2aG9zdF92cmluZ19pb2N0bChcXHUwMDI2di1cXHUwMDNldmRldiwgY21kLCBhcmdwKTtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy03MjItXFx0aWYgKHIpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9MjEwOT1zdGF0aWMgbG9uZyB2aG9zdF92cmluZ19zZXRfbnVtX2FkZHIoc3RydWN0IHZob3N0X2RldiAqZCxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yMTQwLX1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MjE0MTpsb25nIHZob3N0X3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF9kZXYgKmQsIHVuc2lnbmVkIGludCBpb2N0bCwgdm9pZCBfX3VzZXIgKmFyZ3ApXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTIxNDIte1xcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTIyNzgtfVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoyMjc5OkVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X3ZyaW5nX2lvY3RsKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjI4MC1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaD0yMjI9bG9uZyB2aG9zdF9kZXZfaW9jdGwoc3RydWN0IHZob3N0X2RldiAqLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHZvaWQgX191c2VyICphcmdwKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg6MjIzOmxvbmcgdmhvc3RfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X2RldiAqZCwgdW5zaWduZWQgaW50IGlvY3RsLCB2b2lkIF9fdXNlciAqYXJncCk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5oLTIyNC1sb25nIHZob3N0X3dvcmtlcl9pb2N0bChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz04ODk9c3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTM1LVxcdFxcdGlmIChyID09IC1FTk9JT0NUTENNRClcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTM2OlxcdFxcdFxcdHIgPSB2aG9zdF92cmluZ19pb2N0bChcXHUwMDI2dnNvY2stXFx1MDAzZWRldiwgaW9jdGwsIGFyZ3ApO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05MzctXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMzoxNDo1My43NzM1Mzc5MzdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1NDE1OTcyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB0aGlzLlxuXG4qKkZvY3VzaW5nIG9uIHZob3N0X3ZyaW5nX2lvY3RsKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBgdmhvc3RfdnJpbmdfaW9jdGxgIGlzIGdldHRpbmcgY2FsbGVkIGZyb20gYSB3aG9sZSBidW5jaCBvZiBwbGFjZXMgd2l0aGluIHRoZSB2aG9zdCBmcmFtZXdvcms6IGB2aG9zdF9uZXRfaW9jdGxgLCBgdmhvc3Rfc2NzaV9pb2N0bGAsIGB2aG9zdF90ZXN0X2lvY3RsYCwgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgLCBhbmQgYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAuIFRoYXQgc3VnZ2VzdHMgaXQncyBhIHByZXR0eSBjZW50cmFsIGZ1bmN0aW9uLCBoYW5kbGluZyB2aXJ0dWFsIHJpbmcgaW50ZXJhY3Rpb25zLiBJJ2Qgc2F5IHRoYXQgbWFrZXMgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24uIFRoZSBmYWN0IGl0J3MgdXNlZCBhY3Jvc3Mgc28gbWFueSBkaWZmZXJlbnQgYmFja2VuZCBkcml2ZXJzIGluZGljYXRlcyBhIGNlbnRyYWwgcG9pbnQgb2YgY29udHJvbCwgc28gYW55IGlzc3VlcyBoZXJlIHdvdWxkIGhhdmUgd2lkZXNwcmVhZCBpbXBhY3QuXG5cbk5vdywgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgbG9naWMgd2l0aGluIHRoaXMgZnVuY3Rpb24sIGxldCdzIHRha2UgYSBsb29rIGF0IGBfX3Zob3N0X3ZxX21ldGFfcmVzZXRgLiBJdCdzIGxpa2VseSB0aGF0IGEgcmVzZXQgb3BlcmF0aW9uIGlzIGEgY3JpdGljYWwgcGFydCBvZiB2cmluZyBoYW5kbGluZywgc28gdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBvcGVyYXRpb25zIGhhcHBlbmluZyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTgzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAzOjE0OjU3LjYyNzcwMDgxNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg2MzA5MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX192aG9zdF92cV9tZXRhX3Jlc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3Qvdmhvc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmM9MzM3PUVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X3BvbGxfcXVldWUpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMzgtXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMzOTpzdGF0aWMgdm9pZCBfX3Zob3N0X3ZxX21ldGFfcmVzZXQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTM0MC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9MzQ3PXN0YXRpYyB2b2lkIHZob3N0X3ZxX21ldGFfcmVzZXQoc3RydWN0IHZob3N0X2RldiAqZClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTEtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGQtXFx1MDAzZW52cXM7ICsraSlcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzUyOlxcdFxcdF9fdmhvc3RfdnFfbWV0YV9yZXNldChkLVxcdTAwM2V2cXNbaV0pO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zNTMtfVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jPTM2Nz1zdGF0aWMgdm9pZCB2aG9zdF92cV9yZXNldChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzk2LVxcdHZob3N0X3ZyaW5nX2NhbGxfcmVzZXQoXFx1MDAyNnZxLVxcdTAwM2VjYWxsX2N0eCk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjM5NzpcXHRfX3Zob3N0X3ZxX21ldGFfcmVzZXQodnEpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zOTgtfVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jPTIxMDk9c3RhdGljIGxvbmcgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyKHN0cnVjdCB2aG9zdF9kZXYgKmQsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjEzNC1cXHQgKi9cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MjEzNTpcXHRfX3Zob3N0X3ZxX21ldGFfcmVzZXQodnEpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0yMTM2LVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jPTIyODE9aW50IHZob3N0X2luaXRfZGV2aWNlX2lvdGxiKHN0cnVjdCB2aG9zdF9kZXYgKmQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjI5Ny1cXHRcXHR2cS1cXHUwMDNlaW90bGIgPSBuaW90bGI7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjIyOTg6XFx0XFx0X192aG9zdF92cV9tZXRhX3Jlc2V0KHZxKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMjI5OS1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAzOjE0OjU3LjY4NjM0MTkyMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTkwNjM1NTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gU3RyYXRlZ3kgZm9yIFRlc3Rpbmcgdmhvc3RfdnJpbmdfaW9jdGwqKlxuXG5Pa2F5LCBoZXJlJ3MgbXkgcGxhbiB0byBjb25maWd1cmUgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgZm9yIGB2aG9zdF92cmluZ19pb2N0bGAuIFNpbmNlIGBfX3Zob3N0X3ZxX21ldGFfcmVzZXRgIGFuZCBgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyYCBhcmUgc3RhdGljLCBgdmhvc3RfdnJpbmdfaW9jdGxgIGlzIHRoZSBrZXkgc3ltYm9sIEkgbmVlZCB0byBmb2N1cyBvbi4gSXQncyBleHBvcnRlZCwgc28gaXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cbkkndmUgY2hlY2tlZCB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbnMuIGBWSE9TVF9ORVRgLCBgVkhPU1RfVlNPQ0tgLCBgVkhPU1RfU0NTSWAsIGFuZCBgVkhPU1RfVkRQQWAgYWxsIGxvb2sgcHJvbWlzaW5nLiBJIGNhbiBpZ25vcmUgYFZIT1NUX0NST1NTX0VORElBTl9MRUdBQ1lgIGZvciBub3cuIGBWSE9TVF9JT1RMQmAgaXMgc2VsZWN0ZWQgYnkgYFZIT1NUYCwgYW5kIGBWSE9TVGAgaXMgc2VsZWN0ZWQgYnkgYFZIT1NUX05FVGAuIEJ1dCBpcyBgVkhPU1RfTkVUYCBzdWZmaWNpZW50P1xuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gYFZIT1NUX05FVGAgcmVsaWVzIG9uIGBORVQgXHUwMDI2XHUwMDI2IEVWRU5URkQgXHUwMDI2XHUwMDI2IChUVU4gfHwgIVRVTikgXHUwMDI2XHUwMDI2IChUQVAgfHwgIVRBUClgLiBTbywgYE5FVGAgYW5kIGBFVkVOVEZEYCBhcmUgZXNzZW50aWFsLiBgVkhPU1RfVlNPQ0tgIGRlcGVuZHMgb24gYFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBFVkVOVEZEYCwgYW5kIGBWSE9TVF9TQ1NJYCBvbiBgVEFSR0VUX0NPUkUgXHUwMDI2XHUwMDI2IEVWRU5URkRgLiBgVkhPU1RfVkRQQWAgbmVlZHMgYEVWRU5URkQgXHUwMDI2XHUwMDI2IFZEUEFgLlxuXG5Jbml0aWFsbHksIEkgdGhvdWdodCBlbmFibGluZyBgVkhPU1RfTkVUYCwgYFZIT1NUX1ZTT0NLYCwgYW5kIGBWSE9TVF9WRFBBYCB3b3VsZCBiZSB0aGUgYmVzdC4gQnV0LCBzaW5jZSB0aGUgY29yZSBmdW5jdGlvbiBJJ20gdGVzdGluZyBpcyBpbiB0aGUgY29yZSB2aG9zdCBtb2R1bGUsIG1heWJlIG9ubHkgYFZIT1NUX05FVGAgaXMgZW5vdWdoLiBCdXQgZm9yIGJyb2FkZXIgY292ZXJhZ2UsIEkgc2hvdWxkIGNvbnNpZGVyIGFkZGluZyBgVkhPU1RfVlNPQ0tgIGFuZCBgVkhPU1RfU0NTSWAuXG5cbldhaXQgYSBtaW51dGUsIGBWSE9TVGAgaXRzZWxmIGlzIGEgdHJpc3RhdGUuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MsIHNvIG5vdyBJIGNhbiBlbmFibGUgYFZIT1NUYCwgYFZIT1NUX05FVGAsIGFuZCBgVkhPU1RfVlNPQ0tgLlxuXG5BIHF1aWNrIHBlZWsgYXQgYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AgcmV2ZWFscyB0aGF0IGBWSE9TVGAgaXMgYSB0cmlzdGF0ZSB0aGF0ICpzZWxlY3RzKiBgVkhPU1RfSU9UTEJgIGFuZCBgVkhPU1RfVEFTS2AuIEl0IGRvZXNuJ3QgaGF2ZSBhIHByb21wdCwgbWVhbmluZyBpdCBjYW4ndCBiZSBlbmFibGVkIGRpcmVjdGx5LiBJbnN0ZWFkLCBJIG5lZWQgdG8gZW5hYmxlIGBWSE9TVF9ORVRgIG9yIGBWSE9TVF9WU09DS2AuXG5cbkNvbmZpcm1lZDogYFZIT1NUX05FVGAgaXMgYSB0cmlzdGF0ZSwgXCJIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFwiLCBhbmQgYFZIT1NUX1ZTT0NLYCBpcyBhbHNvIGEgdHJpc3RhdGUsIGFuZCBcInZob3N0IHZpcnRpby12c29jayBkcml2ZXJcIi4gQW5kIGBWSE9TVF9WRFBBYCBpcyBhbHNvIHRyaXN0YXRlLCBhcyB0aGUgXCJWaG9zdCBkcml2ZXIgZm9yIHZEUEEtYmFzZWQgYmFja2VuZFwiLlxuXG5TbywgSSB0aGluayBlbmFibGluZyBgVkhPU1RfTkVUYCwgYFZIT1NUX1ZTT0NLYCwgYW5kIGBWSE9TVF9WRFBBYCBpcyB0aGUgYmVzdCBhcHByb2FjaCBmb3IgdGVzdGluZyBgdmhvc3RfdnJpbmdfaW9jdGxgIGFuZCB0aGUgYnJvYWRlciB2aG9zdCBmdW5jdGlvbmFsaXR5LiBJdCBwcm92aWRlcyBnb29kIGNvdmVyYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTEyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAzOjE1OjA1LjI3Njk4MDEzMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg1NTY0OTQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVF9URVNUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDM6MTU6MDUuMzc1NTQ0NDU2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjM3NTI2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBWaG9zdCBUZXN0IEluZnJhc3RydWN0dXJlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBpc24ndCB0aGVyZSBhIHRlc3QgZmlsZSBzcGVjaWZpY2FsbHkgZm9yIHZob3N0PyBNeSBtZW1vcnkncyB1c3VhbGx5IHByZXR0eSBnb29kLCBhbmQgSSBzZWVtIHRvIHJlY2FsbCBzZWVpbmcgYGRyaXZlcnMvdmhvc3QvdGVzdC5jYCBzb21ld2hlcmUuIEJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byBkZWJ1Z2dpbmcgb3Igc3RhcnRpbmcgZnJvbSBzY3JhdGNoLCBJJ2QgYmV0dGVyIGNvbmZpcm0gdGhhdC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gUmlnaHQsIHNvIGlmIHRoYXQgZmlsZSAqZG9lcyogZXhpc3QsIEkgc2hvdWxkIGtub3cgaG93IGl0J3MgYmVpbmcgYnVpbHQgb3IgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkIHByb2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhpcyB0ZXN0IGZpbGUuIExldCdzIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBNYWtlZmlsZSBpbiB0aGUgYGRyaXZlcnMvdmhvc3RgIGRpcmVjdG9yeSB0byBzZWUgaG93IHRoaXMgdGVzdCBmaWxlIGlzIGludGVncmF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMTEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMzoxNTowOC43OTkyOTk3MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE3NjQxMDYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRlc3RcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDM6MTU6MDguODcxMDcxMjc2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTA5NzEzMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqRGlnZ2luZyBpbnRvIFZob3N0IFRlc3QgRmlsZXMqKlxuXG5SaWdodCwgYSBtb21lbnQuIEhvbGQgb24uIEkganVzdCBzcG90dGVkIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpbiB0aGF0IGdyZXAgb3V0cHV0IOKAkyB0aGUgYGRyaXZlcnMvdmhvc3QvdGVzdC5jYCBmaWxlLiBUaGF0J3MgYSBzdHJvbmcgc2lnbmFsLiBHaXZlbiB0aGF0IGZpbmRpbmcsIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gcmV2aXNpdCB0aGUgYGRyaXZlcnMvdmhvc3QvTWFrZWZpbGVgLiBUaGUgdGVzdCBjb2RlIGlzIGxpa2VseSBpbnRlZ3JhdGVkIG9yIHJlZmVyZW5jZWQgaW4gdGhlIGJ1aWxkIHByb2Nlc3MgdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRob3NlIHRlc3RzIGFyZSBiZWluZyBjb21waWxlZCBhbmQgbGlua2VkLiBUaGF0IE1ha2VmaWxlIHdpbGwgZ2l2ZSBtZSBjcnVjaWFsIGNsdWVzIGFib3V0IHRoZSB0ZXN0aW5nIGluZnJhc3RydWN0dXJlIGZvciB2aG9zdC4gVGhpcyBjb3VsZCBsZWFkIHRvIHVuY292ZXJpbmcgc29tZSByZWxldmFudCB0ZXN0IHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ0MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAzOjE1OjExLjgyMjA0NTc4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjIxMTA5NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGVzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMzoxNToxMS44ODQyNzAwMjZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4OTc4OTQzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGEgU3VzcGVjdGVkIEZpbGUgUGF0aCBEaXNjcmVwYW5jeSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biBzb21ldGhpbmcgcmVsYXRlZCB0byB2aG9zdCwgYW5kIEkgKnRob3VnaHQqIHRoZSByZWxldmFudCBmaWxlIG1pZ2h0IGJlIGBkcml2ZXJzL3Zob3N0L3ZyaW5naC5jYC4gQnV0IHRoZW4gSSByYW4gYSBgZ3JlcGAgYW5kIHRoZSBvdXRwdXQgcG9pbnRlZCBtZSB0b3dhcmRzIGBkcml2ZXJzL3Zob3N0L3Rlc3QuY2AuIEhtbSwgdGhhdCdzIGEgYml0IG9kZC4gSSBrbm93IHRoZXNlIHN5c3RlbXMgcHJldHR5IHdlbGwsIGFuZCBJIGRvbid0IHJlY2FsbCBzZWVpbmcgYW55dGhpbmcgY3JpdGljYWwgaW4gdGhlIGB0ZXN0LmNgIGZpbGUgdXN1YWxseS4gU3RpbGwsIHRoZSBncmVwIGRvZXNuJ3QgbGllLiBBbHJpZ2h0LCBiZXN0IHRvIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBgZHJpdmVycy92aG9zdC90ZXN0LmNgIGZpbGUgYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgaW4gdGhlcmUuIEl0J3MgcHJvYmFibHkgYSB0ZXN0IGNhc2UsIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBpZiB0aGlzIGlzIHdoYXQncyByZWxldmFudCB0byB0aGUgY3VycmVudCBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjYyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDM6MTU6MTUuMTc0MDYxNzE4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDMyNTEyOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdGVzdF9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Rlc3QuYz0yNjU9c3RhdGljIGxvbmcgdmhvc3RfdGVzdF9zZXRfYmFja2VuZChzdHJ1Y3Qgdmhvc3RfdGVzdCAqbiwgdW5zaWduZWQgaW5kZXgsIGludCBmZClcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTMxNi1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozMTc6c3RhdGljIGxvbmcgdmhvc3RfdGVzdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTMxOC1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmM9MzYwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3Rlc3RfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM2Mi1cXHQucmVsZWFzZSAgICAgICAgPSB2aG9zdF90ZXN0X3JlbGVhc2UsXFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MzYzOlxcdC51bmxvY2tlZF9pb2N0bCA9IHZob3N0X3Rlc3RfaW9jdGwsXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzY0LVxcdC5jb21wYXRfaW9jdGwgICA9IGNvbXBhdF9wdHJfaW9jdGwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAzOjE1OjE1LjI3NzMxNzgzMloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTgxMTA3NjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQsIGdlYXJlZCB0b3dhcmRzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSB2aG9zdCBEcml2ZXIgVGVzdCBTdHJ1Y3R1cmUqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgdGVzdGluZyBsYW5kc2NhcGUgZm9yIGB2aG9zdGAuIEdpdmVuIGEgYHRlc3QuY2AgZmlsZSwgSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIHRoZSBmaXJzdCBwbGFjZSB0byBsb29rIGZvciBpdHMgYnVpbGQgaW5zdHJ1Y3Rpb25zIGFuZCBkZXBlbmRlbmNpZXMgd291bGQgYmUgd2l0aGluIHRoZSBgZHJpdmVycy92aG9zdC9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgcHJpbWFyeSBidWlsZCBjb25maWd1cmF0aW9ucyBzaG91bGQgcmVzaWRlLCBpbmNsdWRpbmcgaG93IHRoaXMgc3BlY2lmaWMgdGVzdCBwcm9ncmFtIGlzIGNvbXBpbGVkIGFuZCBsaW5rZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0J3MgYSBzdGFuZGFsb25lIHRlc3QsIHBhcnQgb2YgYSBsYXJnZXIgdGVzdCBzdWl0ZSwgb3IgaWYgaXQgdXRpbGl6ZXMgYW55IHNwZWNpZmljIHZob3N0IGluZnJhc3RydWN0dXJlIGR1cmluZyBpdHMgYnVpbGQgcHJvY2Vzcy4gVGhlIE1ha2VmaWxlIHdpbGwgYmUgdGhlIGRlZmluaXRpdmUgc291cmNlIG9mIHRydXRoIGZvciB0aGUgYnVpbGQgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNjgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMzoxNToxOC4yNTg0MjgyNjRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjA4NDMyMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGVzdFxcXFwuY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDM6MTU6MTguMzY0NTE5MDg3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODcwNjI5OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZXZpZXdpbmcgdGhpcyBjb2RlOlxuXG4qKlZob3N0IFRlc3QgQ29kZSBMb2NhdGlvbiBDaGVjayoqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgYGRyaXZlcnMvdmhvc3QvdGVzdC5jYCBmaWxlIG1lbnRpb25lZC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY29uZmlybSBpdHMgYnVpbGQgcHJvY2Vzcy4gTGV0J3Mgc3RhcnQgd2l0aCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBgZHJpdmVycy92aG9zdC9NYWtlZmlsZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHRlc3QgaXMgY29tcGlsZWQgYW5kIGxpbmtlZCB3aXRoaW4gdGhlIGJyb2FkZXIgdmhvc3QgaW5mcmFzdHJ1Y3R1cmUuIEkgd2FudCB0byBzZWUgaG93IGl0J3MgaW50ZWdyYXRlZCB3aXRoIHRoZSBvdGhlciB2aG9zdCBtb2R1bGVzIGFuZCBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbXBpbGF0aW9uIGZsYWdzIG9yIGRlcGVuZGVuY2llcyBJIHNob3VsZCBrbm93IGFib3V0LiBUaGlzIE1ha2VmaWxlIHNob3VsZCBjb250YWluIHRoZSBhbnN3ZXJzIEknbSBsb29raW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzODUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMzoxNToyMS42NTE1ODUzM1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRvYmotJChDT05GSUdfVkhPU1RfTkVUKSArPSB2aG9zdF9uZXQub1xcbiAgIDM6XFx0dmhvc3RfbmV0LXkgOj0gbmV0Lm9cXG4gICA0OlxcdFxcbiAgIDU6XFx0b2JqLSQoQ09ORklHX1ZIT1NUX1NDU0kpICs9IHZob3N0X3Njc2kub1xcbiAgIDY6XFx0dmhvc3Rfc2NzaS15IDo9IHNjc2kub1xcbiAgIDc6XFx0XFxuICAgODpcXHRvYmotJChDT05GSUdfVkhPU1RfVlNPQ0spICs9IHZob3N0X3Zzb2NrLm9cXG4gICA5OlxcdHZob3N0X3Zzb2NrLXkgOj0gdnNvY2sub1xcbiAgMTA6XFx0XFxuICAxMTpcXHRvYmotJChDT05GSUdfVkhPU1RfUklORykgKz0gdnJpbmdoLm9cXG4gIDEyOlxcdFxcbiAgMTM6XFx0b2JqLSQoQ09ORklHX1ZIT1NUX1ZEUEEpICs9IHZob3N0X3ZkcGEub1xcbiAgMTQ6XFx0dmhvc3RfdmRwYS15IDo9IHZkcGEub1xcbiAgMTU6XFx0XFxuICAxNjpcXHRvYmotJChDT05GSUdfVkhPU1QpXFx0Kz0gdmhvc3Qub1xcbiAgMTc6XFx0XFxuICAxODpcXHRvYmotJChDT05GSUdfVkhPU1RfSU9UTEIpICs9IHZob3N0X2lvdGxiLm9cXG4gIDE5OlxcdHZob3N0X2lvdGxiLXkgOj0gaW90bGIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMzoxNToyMS42NTE2OTMzMloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODc0MjU1NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiB2aG9zdF92cmluZ19pb2N0bCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgZHJpdmVycy92aG9zdC90ZXN0LmNgIGlzbid0IGluIHRoZSBNYWtlZmlsZS4gVGhhdCdzIGEgdGVzdCBtb2R1bGUsIGxpa2VseSBub3QgYnVpbHQgYnkgZGVmYXVsdCwgb3IgYnVpbHQgdmlhIHNvbWUgc2VwYXJhdGUgY29uZmlndXJhdGlvbi4gVGhlIG1haW4gZm9jdXMgaGVyZSBpcyBkZWZpbml0ZWx5IGBWSE9TVF9ORVRgLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHN1bW1hcml6ZSB3aGF0J3MgaGFwcGVuaW5nLiBUaGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYF9fdmhvc3RfdnFfbWV0YV9yZXNldCh2cSlgIHdpdGhpbiBgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyKClgLiBUaGlzIGB2aG9zdF92cmluZ19zZXRfbnVtX2FkZHIoKWAgZnVuY3Rpb24gaXRzZWxmIGlzIGNhbGxlZCBmcm9tIGB2aG9zdF92cmluZ19pb2N0bCgpYCB3aGVuIHNwZWNpZmljIGlvY3RscyBhcmUgaW52b2tlZDogYFZIT1NUX1NFVF9WUklOR19BRERSYCBvciBgVkhPU1RfU0VUX1ZSSU5HX05VTWAuIENyaXRpY2FsbHksIGB2aG9zdF92cmluZ19pb2N0bCgpYCBpcyAqdGhlKiBmdW5jdGlvbiBjYWxsZWQgYnkgdmFyaW91cyB2aG9zdCBkcml2ZXJzIOKAkyBgdmhvc3RfbmV0YCwgYHZob3N0X3Zzb2NrYCwgYHZob3N0X3Njc2lgLCBgdmhvc3RfdmRwYWAsIGFuZCBwcm9iYWJseSBvdGhlcnMuXG5cblRoaXMgaXMgYSBjbGVhciwgcmVhY2hhYmxlIGNvZGUgcGF0aCwgYW5kIGl0IGRlZmluaXRlbHkgc291bmRzIGxpa2UgYSBnb29kIHBsYWNlIHRvIGZ1enouIFRoZSBpZGVhbCB0YXJnZXQgaXMgYHZob3N0X3ZyaW5nX2lvY3RsYC4gVG8gZW5hYmxlIGl0LCBJJ2xsIG5lZWQgdG8gZW5hYmxlIGBWSE9TVF9ORVRgLCBgVkhPU1RfVlNPQ0tgLCBhbmQgYFZIT1NUX1ZEUEFgLlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLiBgVkhPU1RfTkVUYCByZWxpZXMgb24gYE5FVCBcdTAwMjZcdTAwMjYgRVZFTlRGRCBcdTAwMjZcdTAwMjYgKFRVTiB8fCAhVFVOKSBcdTAwMjZcdTAwMjYgKFRBUCB8fCAhVEFQKWAuIEdvb2QsIEkgY2FuIHNhdGlzZnkgdGhvc2UuIGBWSE9TVF9WU09DS2AgbmVlZHMgYFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBFVkVOVEZEYCwgYW5kIGBWSE9TVF9WRFBBYCBuZWVkcyBgRVZFTlRGRCBcdTAwMjZcdTAwMjYgVkRQQWAuIEkgdGhpbmsgcHJvdmlkaW5nIHRoZXNlIHdpbGwgYmUgZW5vdWdoLlxuXG5KdXN0IHRvIGJlIHN1cmUsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IGB2aG9zdF92cmluZ19pb2N0bGAgaXMgdGhlIG1vc3QgZWZmZWN0aXZlIHN5bWJvbCB0byBmb2N1cyBvbi4gWWVzLCBpdCdzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgaW9jdGxzIHRoYXQgdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC4gYHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcmAgaXRzZWxmIGlzIHN0YXRpYywgc28gaXQgbWlnaHQgYmUgaW5saW5lZCBvciBoYXZlIGEgbm9uLWRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBCdXQgYHZob3N0X3ZyaW5nX2lvY3RsYCBpcyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYy4gSXQncyB0aGUgcmlnaHQgY2hvaWNlLlxuXG5JbiBzdW1tYXJ5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYHZob3N0X3ZyaW5nX3NldF9udW1fYWRkcmAgdG8gcmVzZXQgdGhlIG1ldGFkYXRhIGNhY2hlIHdoZW4gdGhlIHZyaW5nIGFkZHJlc3Mgb3Igc2l6ZSBpcyB1cGRhdGVkLiBUaGlzIGNoYW5nZSBpcyBhY2Nlc3NlZCB0aHJvdWdoIGB2aG9zdF92cmluZ19pb2N0bGAgd2hpY2ggaGFuZGxlcyBgVkhPU1RfU0VUX1ZSSU5HX0FERFJgIG9yIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCBpb2N0bHMuIFRoZXNlIGlvY3RscyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgYnkgc2V2ZXJhbCB2aG9zdCBkcml2ZXJzIHN1Y2ggYXMgYHZob3N0LW5ldGAgYW5kIGB2aG9zdC12c29ja2AuIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIHRoZXJlZm9yZSwgaXQncyBhIGdvb2QgcGxhY2UgdG8gZnV6ei4gSSB3aWxsIHNlbGVjdCBgdmhvc3RfdnJpbmdfaW9jdGxgIGFzIHRoZSBmb2N1cyBmb3IgZnV6emluZyBhbmQgc2V0IHRoZSB0YXJnZXQgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4OTMsIk91dHB1dFRva2VucyI6MTczLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDM6MTU6MzEuNTI1OTUyNzM4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMzk5NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9ORVRcIixcbiAgICBcIlZIT1NUX1ZTT0NLXCIsXG4gICAgXCJWSE9TVF9WRFBBXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfdnJpbmdfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyYCB0byByZXNldCB0aGUgbWV0YWRhdGEgY2FjaGUgd2hlbiB0aGUgdnJpbmcgYWRkcmVzcyBvciBzaXplIGlzIGNoYW5nZWQuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBgdmhvc3RfdnJpbmdfaW9jdGxgIHdpdGggYFZIT1NUX1NFVF9WUklOR19BRERSYCBvciBgVkhPU1RfU0VUX1ZSSU5HX05VTWAgaW9jdGxzLCB3aGljaCBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgYnkgdmFyaW91cyB2aG9zdCBkcml2ZXJzIChlLmcuLCB2aG9zdC1uZXQsIHZob3N0LXZzb2NrKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9ORVRcIixcbiAgICBcIlZIT1NUX1ZTT0NLXCIsXG4gICAgXCJWSE9TVF9WRFBBXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfdnJpbmdfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdmhvc3RfdnJpbmdfc2V0X251bV9hZGRyYCB0byByZXNldCB0aGUgbWV0YWRhdGEgY2FjaGUgd2hlbiB0aGUgdnJpbmcgYWRkcmVzcyBvciBzaXplIGlzIGNoYW5nZWQuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBgdmhvc3RfdnJpbmdfaW9jdGxgIHdpdGggYFZIT1NUX1NFVF9WUklOR19BRERSYCBvciBgVkhPU1RfU0VUX1ZSSU5HX05VTWAgaW9jdGxzLCB3aGljaCBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgYnkgdmFyaW91cyB2aG9zdCBkcml2ZXJzIChlLmcuLCB2aG9zdC1uZXQsIHZob3N0LXZzb2NrKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowzzfj4[1] Phase: Succeeded StartedAt: 2026-08-03 03:15:43 +0000 UTC FinishedAt: 2026-08-03 03:15:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzfj4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-03 03:15:43 +0000 UTC FinishedAt: 2026-08-03 03:15:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzfj4[2] Phase: Succeeded StartedAt: 2026-08-03 03:15:43 +0000 UTC FinishedAt: 2026-08-03 07:07:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-03 03:15:44 +0000 UTC FinishedAt: 2026-08-03 07:07:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-03 03:15:44 +0000 UTC FinishedAt: 2026-08-03 03:15:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-03 03:15:44 +0000 UTC FinishedAt: 2026-08-03 03:15:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzzfj4/series-workflowzzfj4-convert-artifact-2558099270/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-03 03:15:54 +0000 UTC FinishedAt: 2026-08-03 03:44:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-03 03:15:54 +0000 UTC FinishedAt: 2026-08-03 03:44:11 +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:*5e9a849a-e5e0-4bb3-ab2b-645825c3c122,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-workflowzzfj4/series-workflowzzfj4-convert-artifact-2558099270/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": "4015227e-257d-4376-af8f-6376583902ed", "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-workflowzzfj4/series-workflowzzfj4-build-action-3831909596/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-03 03:15:54 +0000 UTC FinishedAt: 2026-08-03 03:44:01 +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:*5e9a849a-e5e0-4bb3-ab2b-645825c3c122,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-workflowzzfj4/series-workflowzzfj4-convert-artifact-2558099270/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": "4015227e-257d-4376-af8f-6376583902ed", "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-workflowzzfj4/series-workflowzzfj4-build-action-3831909596/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-03 03:44:11 +0000 UTC FinishedAt: 2026-08-03 03:44:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-03 03:44:11 +0000 UTC FinishedAt: 2026-08-03 03:44:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-03 03:44:11 +0000 UTC FinishedAt: 2026-08-03 03:44:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-03 03:44:11 +0000 UTC FinishedAt: 2026-08-03 03:44:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzzfj4/series-workflowzzfj4-convert-artifact-108880025/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-03 03:44:21 +0000 UTC FinishedAt: 2026-08-03 03:46:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-03 03:44:21 +0000 UTC FinishedAt: 2026-08-03 03:46:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4015227e-257d-4376-af8f-6376583902ed,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-workflowzzfj4/series-workflowzzfj4-build-action-3831909596/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-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-03 03:46:23 +0000 UTC FinishedAt: 2026-08-03 03:46:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-03 03:46:23 +0000 UTC FinishedAt: 2026-08-03 03:46:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-03 03:46:23 +0000 UTC FinishedAt: 2026-08-03 04:03:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-03 03:46:23 +0000 UTC FinishedAt: 2026-08-03 04:03:34 +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:*5e9a849a-e5e0-4bb3-ab2b-645825c3c122,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-workflowzzfj4/series-workflowzzfj4-convert-artifact-108880025/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": "8de3a2c2-0403-44cf-8c19-a9a1d8ba2e10", "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-workflowzzfj4/series-workflowzzfj4-build-action-2053599221/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-03 03:46:23 +0000 UTC FinishedAt: 2026-08-03 04:03:24 +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:*5e9a849a-e5e0-4bb3-ab2b-645825c3c122,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-workflowzzfj4/series-workflowzzfj4-convert-artifact-108880025/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": "8de3a2c2-0403-44cf-8c19-a9a1d8ba2e10", "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-workflowzzfj4/series-workflowzzfj4-build-action-2053599221/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-03 04:03:34 +0000 UTC FinishedAt: 2026-08-03 04:03:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-03 04:03:34 +0000 UTC FinishedAt: 2026-08-03 04:03:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-03 04:03:34 +0000 UTC FinishedAt: 2026-08-03 04:05:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-03 04:03:34 +0000 UTC FinishedAt: 2026-08-03 04:05:30 +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:*8de3a2c2-0403-44cf-8c19-a9a1d8ba2e10,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-workflowzzfj4/series-workflowzzfj4-build-action-2053599221/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-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-03 04:05:40 +0000 UTC FinishedAt: 2026-08-03 07:07:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-03 04:05:40 +0000 UTC FinishedAt: 2026-08-03 07:07:35 +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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"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:*4015227e-257d-4376-af8f-6376583902ed,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8de3a2c2-0403-44cf-8c19-a9a1d8ba2e10,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-workflowzzfj4/series-workflowzzfj4-build-action-3831909596/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-workflowzzfj4/series-workflowzzfj4-build-action-2053599221/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-03 04:05:40 +0000 UTC FinishedAt: 2026-08-03 04:05:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-03 04:05:40 +0000 UTC FinishedAt: 2026-08-03 04:05:44 +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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"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-workflowzzfj4/series-workflowzzfj4-convert-artifact-2208596110/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-03 04:05:40 +0000 UTC FinishedAt: 2026-08-03 04:05:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-03 04:05:40 +0000 UTC FinishedAt: 2026-08-03 04:05:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-03 04:05:40 +0000 UTC FinishedAt: 2026-08-03 04:05:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-03 04:05:50 +0000 UTC FinishedAt: 2026-08-03 07:07:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzfj4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vring_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_NET","VHOST_VSOCK","VHOST_VDPA"],"series_id":"7a48d8bd-5340-4e37-a150-802a1aaa2739","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-03 04:05:50 +0000 UTC FinishedAt: 2026-08-03 07:07:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4015227e-257d-4376-af8f-6376583902ed,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8de3a2c2-0403-44cf-8c19-a9a1d8ba2e10,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-workflowzzfj4/series-workflowzzfj4-build-action-3831909596/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-workflowzzfj4/series-workflowzzfj4-build-action-2053599221/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-workflowzzfj4/series-workflowzzfj4-convert-artifact-2208596110/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,}