Name: series-workflowcw5db Phase: Succeeded StartedAt: 2026-09-04 19:32:34 +0000 UTC FinishedAt: 2026-09-04 23:42:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5db[0] Phase: Succeeded StartedAt: 2026-09-04 19:32:34 +0000 UTC FinishedAt: 2026-09-04 20:00:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5db[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 19:32:34 +0000 UTC FinishedAt: 2026-09-04 20:00:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "7bf591f26545f5776a4e42d08c06fd94469766dd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "7bf591f26545f5776a4e42d08c06fd94469766dd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "ed8485eb-f35c-47c6-a8db-2ebdb188da85" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "print_bpf_insn", "bpf_verbose_insn" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHJpbnRfYnBmX2luc24mIzM0OywKICAgICYjMzQ7YnBmX3ZlcmJvc2VfaW5zbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByZXZlbnRzIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgcmVhZCBpbiBrZXJuZWwvYnBmL2Rpc2FzbS5jIGJ5IGFkZGluZyBhIGNoZWNrIGZvciBCUEZfTERYIGluc3RydWN0aW9ucyB3aXRoIEJQRl9NRU1TWCBtb2RlIGFuZCBCUEZfRFcgc2l6ZSBiZWZvcmUgaW5kZXhpbmcgaW50byBicGZfbGRzeF9zdHJpbmdbXS4gU2luY2UgYnBmX2xkc3hfc3RyaW5nIG9ubHkgZGVmaW5lcyBlbnRyaWVzIGZvciBCUEZfQiwgQlBGX0gsIGFuZCBCUEZfVyAoaW5kaWNlcyAwLi4yKSwgaW5kZXhpbmcgd2l0aCBCUEZfRFcgKGluZGV4IDMpIHJlc3VsdGVkIGluIGEgZ2xvYmFsLW91dC1vZi1ib3VuZHMgYWNjZXNzLiBHbG9iYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgcG90ZW50aWFsIE5VTEwgZGVyZWZlcmVuY2VzIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcywgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBkYXRhIHByb3BhZ2F0aW9uLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kYXJ5L3ZhbGlkaXR5IGNoZWNrIGluIHByaW50X2JwZl9pbnNuKCkgd2l0aGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdG8gaGFuZGxlIGludmFsaWQgc2lnbi1leHRlbmRlZCA2NC1iaXQgbG9hZHMgKEJQRl9NRU1TWCB3aXRoIEJQRl9EVykgYW5kIHByZXZlbnQgYWNjZXNzaW5nIHVuZGVmaW5lZCBhcnJheSBpbmRpY2VzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgZXhlY3V0ZWQgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiBhbmQgZGlzYXNzZW1ibHkgdmlhIHN5c19icGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2MWQ0MzQ5NTk5NjE2MmNhZWY5ZTk3OGUxNzNiMDhkY2YwN2ZlNjMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxOTo1OToyNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Rpc2FzbS5jIGIva2VybmVsL2JwZi9kaXNhc20uY1xuaW5kZXggNTBiM2NhNTE0OWEwYS4uNzBjMmIyODFjZmU5NCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvZGlzYXNtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZGlzYXNtLmNcbkBAIC0yOTksNiAmIzQzOzI5OSwxMCBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0O0JVR19sZHhfJTAyeFwmIzM0OywgaW5zbi1cdTAwM2Vjb2RlKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbiYjNDM7XHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU1TWCBcdTAwMjZcdTAwMjYgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfRFcpIHtcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDtCVUdfbGRzeF8lMDJ4XCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR9XG4gXHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIlZCA9ICooJXMgKikociVkICUmIzQzO2QpXCYjMzQ7LFxuIFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRcdEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX01FTSA/XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcmludF9icGZfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfdmVyYm9zZV9pbnNuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZGFyeS92YWxpZGl0eSBjaGVjayBpbiBwcmludF9icGZfaW5zbigpIHdpdGhpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRvIGhhbmRsZSBpbnZhbGlkIHNpZ24tZXh0ZW5kZWQgNjQtYml0IGxvYWRzIChCUEZfTUVNU1ggd2l0aCBCUEZfRFcpIGFuZCBwcmV2ZW50IGFjY2Vzc2luZyB1bmRlZmluZWQgYXJyYXkgaW5kaWNlcy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUga2VybmVsIGxvZ2ljIGV4ZWN1dGVkIGR1cmluZyBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24gYW5kIGRpc2Fzc2VtYmx5IHZpYSBzeXNfYnBmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjFkNDM0OTU5OTYxNjJjYWVmOWU5NzhlMTczYjA4ZGNmMDdmZTYzMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMTk6NTk6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Rpc2FzbS5jIGIva2VybmVsL2JwZi9kaXNhc20uYwppbmRleCA1MGIzY2E1MTQ5YTBhLi43MGMyYjI4MWNmZTk0IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2Rpc2FzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZGlzYXNtLmMKQEAgLTI5OSw2ICYjNDM7Mjk5LDEwIEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLAogCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDtCVUdfbGR4XyUwMngmIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiAJCQlyZXR1cm47CiAJCX0KJiM0MzsJCWlmIChCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfTUVNU1ggJmFtcDsmYW1wOyBCUEZfU0laRShpbnNuLSZndDtjb2RlKSA9PSBCUEZfRFcpIHsKJiM0MzsJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0O0JVR19sZHN4XyUwMngmIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQogCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSByJWQgPSAqKCVzICopKHIlZCAlJiM0MztkKSYjMzQ7LAogCQkJaW5zbi0mZ3Q7Y29kZSwgaW5zbi0mZ3Q7ZHN0X3JlZywKIAkJCUJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9NRU0gPwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTYzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEZ1enppbmcgVHJpYWdlIFBhdGNoIGZvciBTeXprYWxsZXIqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkmIzM5O3ZlIGJlZW4gYXNrZWQgdG8gZXZhbHVhdGUgYSBwYXRjaCBpbnRlbmRlZCB0byBpbXByb3ZlIGZ1enppbmcgdHJpYWdlIHdpdGggU3l6a2FsbGVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGFuYWx5emUgdGhlIHBhdGNoIGl0c2VsZiBhbmQgdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBCUEYgZGlzYXNzZW1ibHkgY29kZS4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBga2VybmVsL2JwZi9kaXNhc20uY2AgYXMgdGhlIHByb3ZpZGVkIGRpZmYgcG9pbnRzIHRvIGNoYW5nZXMgdGhlcmUuCgpMb29raW5nIGF0IHRoZSBkaWZmLCBpdCBzZWVtcyBhIG5ldyBjaGVjayBoYXMgYmVlbiBhZGRlZCB3aXRoaW4gdGhlIGBwcmludF9icGZfaW5zbmAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgY2hlY2tpbmcgZm9yIGEgY29tYmluYXRpb24gb2YgYEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9NRU1TWGAgYW5kIGBCUEZfU0laRShpbnNuLSZndDtjb2RlKSA9PSBCUEZfRFdgLiAgVGhpcyBjb21iaW5hdGlvbiBub3cgdHJpZ2dlcnMgYSBuZXcgZGVidWcgbWVzc2FnZSwgJiMzNDtCVUdfbGRzeF8lMDJ4JiMzNDsuIFNvLCBpdCBsb29rcyBsaWtlIHRoaXMgbmV3IGNvZGUgcGF0aCBpcyBpbnRlbmRlZCB0byBmbGFnIG9yIGhpZ2hsaWdodCBhIHNwZWNpZmljIEJQRiBpbnN0cnVjdGlvbiB2YXJpYW50IGR1cmluZyBkaXNhc3NlbWJseS4KCk15IG5leHQgc3RlcCBpcyB0byB1c2UgdGhlIHRvb2xzIGF2YWlsYWJsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHNwZWNpZmljIEJQRiBpbnN0cnVjdGlvbiB2YXJpYW50IChgQlBGX01FTVNYYCBhbmQgYEJQRl9EV2ApIHJlcHJlc2VudHMgYW5kIHdoeSBpdCBtaWdodCBiZSByZWxldmFudCB0byBmdXp6aW5nIHRyaWFnZS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGludG8gdGhlIGJyb2FkZXIgY29udGV4dCBvZiBCUEYgZGlzYXNzZW1ibHkgaW4gdGhlIGtlcm5lbCB0byBmdWxseSBncmFzcCBpdHMgaW1wYWN0LiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gdHJhY2Ugd2hlcmUgYHByaW50X2JwZl9pbnNuYCBpcyBjYWxsZWQgZnJvbS4gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gZmluZCB0aGUgY2FsbHNpdGVzIG9mIHRoYXQgZnVuY3Rpb24sIGFuZCB0aGVuIHVuZGVyc3RhbmQgaG93IHRoYXQgZGlzYXNzZW1ibHkgaXMgdXNlZC4gSXMgaXQgYSBsaXZlIGRpc2Fzc2VtYmx5LCBvciBpcyBpdCB1c2VkIGR1cmluZyBjcmFzaCBhbmFseXNpcywgZm9yIGV4YW1wbGU/IEZpZ3VyaW5nIG91dCB0aGUgZXhlY3V0aW9uIGNvbnRleHQgd2lsbCBwcm92aWRlIHZpdGFsIGluZm9ybWF0aW9uLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBhc3Nlc3Mgd2hldGhlciB0aGUgYWRkZWQgZGVidWcgbWVzc2FnZSBpcyBsaWtlbHkgdG8gY2F0Y2ggb3IgaGlnaGxpZ2h0IGludGVyZXN0aW5nIEJQRiBpbnN0cnVjdGlvbiBzZXF1ZW5jZXMgdGhhdCBtYXkgY29udHJpYnV0ZSB0byBmaW5kaW5nIGJ1Z3MuIEkmIzM5O2xsIGFsc28gYmUgY29uc2lkZXJpbmcgd2hldGhlciBpdCBnZW5lcmF0ZXMgZXhjZXNzaXZlIG5vaXNlLCBvciBpcyBwcmVjaXNlIGVub3VnaCB0byBiZSB1c2VmdWwuIE15IG9iamVjdGl2ZSBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBhZGRpdGlvbiBpcyBlZmZlY3RpdmUgaW4gaGVscGluZyBTeXprYWxsZXIgdHJpYWdlIGZ1enppbmcgcmVzdWx0cywgYW5kIHdoZXRoZXIgaXQgaW50cm9kdWNlcyBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZGlzYXNtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4NTpcdFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfU1QpIHtcbiAyODY6XHRcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX01FTSkge1xuIDI4NzpcdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpICooJXMgKikociVkICUmIzQzO2QpID0gJWRcJiMzNDssXG4gMjg4Olx0XHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gMjg5Olx0XHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gMjkwOlx0XHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsXG4gMjkxOlx0XHRcdFx0XHRpbnNuLVx1MDAzZW9mZiwgaW5zbi1cdTAwM2VpbW0pO1xuIDI5MjpcdFx0XHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gMHhjMCAvKiBCUEZfTk9TUEVDLCBubyBVQVBJICovKSB7XG4gMjkzOlx0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgbm9zcGVjXCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuIDI5NDpcdFx0XHR9IGVsc2Uge1xuIDI5NTpcdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHX3N0XyUwMnhcJiMzNDssIGluc24tXHUwMDNlY29kZSk7XG4gMjk2Olx0XHRcdH1cbiAyOTc6XHRcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEWCkge1xuIDI5ODpcdFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTUVNIFx1MDAyNlx1MDAyNiBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9NRU1TWCkge1xuIDI5OTpcdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHX2xkeF8lMDJ4XCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuIDMwMDpcdFx0XHRcdHJldHVybjtcbiAzMDE6XHRcdFx0fVxuIDMwMjpcdFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNU1ggXHUwMDI2XHUwMDI2IEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0RXKSB7XG4gMzAzOlx0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDtCVUdfbGRzeF8lMDJ4XCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuIDMwNDpcdFx0XHRcdHJldHVybjtcbiAzMDU6XHRcdFx0fVxuIDMwNjpcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSAqKCVzICopKHIlZCAlJiM0MztkKVwmIzM0OyxcbiAzMDc6XHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiAzMDg6XHRcdFx0XHRCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU0gP1xuIDMwOTpcdFx0XHRcdFx0IGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSA6XG4gMzEwOlx0XHRcdFx0XHQgYnBmX2xkc3hfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIDMxMTpcdFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuIDMxMjpcdFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfTEQpIHtcbiAzMTM6XHRcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FCUykge1xuIDMxNDpcdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYlslZF1cJiMzNDssXG4gMzE1Olx0XHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gMzE2Olx0XHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gMzE3Olx0XHRcdFx0XHRpbnNuLVx1MDAzZWltbSk7XG4gMzE4Olx0XHRcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSU5EKSB7XG4gMzE5Olx0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgcjAgPSAqKCVzICopc2tiW3IlZCAmIzQzOyAlZF1cJiMzNDssXG4gMzIwOlx0XHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gMzIxOlx0XHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gMzIyOlx0XHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlaW1tKTtcbiAzMjM6XHRcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9JTU0gXHUwMDI2XHUwMDI2XG4gMzI0Olx0XHRcdFx0ICAgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfRFcpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzcyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gQlBGIERpc2Fzc2VtYmx5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGJwZl9sZHN4X3N0cmluZ2AgYXJyYXksIHNwZWNpZmljYWxseSBpbiBga2VybmVsL2JwZi9kaXNhc20uY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGtlcm5lbCYjMzk7cyBCUEYgZGlzYXNzZW1ibGVyIGxpdmVzLCBzbyBJJiMzOTttIGxpa2VseSBpbnRlcmVzdGVkIGluIGhvdyBpdCByZXByZXNlbnRzIHRoZSBsb2FkL3N0b3JlIGluc3RydWN0aW9ucyBhcyBzdHJpbmdzLiBJdCBsb29rcyBsaWtlIEkgbmVlZCB0byBsb29rIHVwIGhvdyB0aGUgYXJyYXkgaXMgaW1wbGVtZW50ZWQuIEkmIzM5O2xsIGZvY3VzIG9uIGxpbmVzIDEtMTAwIHRvIGdldCBhbiBvdmVydmlldyBvZiB0aGUgc2VjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZGlzYXNtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4gICAyOlx0LyogQ29weXJpZ2h0IChjKSAyMDExLTIwMTQgUExVTWdyaWQsIGh0dHA6Ly9wbHVtZ3JpZC5jb21cbiAgIDM6XHQgKiBDb3B5cmlnaHQgKGMpIDIwMTYgRmFjZWJvb2tcbiAgIDQ6XHQgKi9cbiAgIDU6XHRcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICAgNzpcdFxuICAgODpcdCNpbmNsdWRlIFwmIzM0O2Rpc2FzbS5oXCYjMzQ7XG4gICA5Olx0XG4gIDEwOlx0I2RlZmluZSBfX0JQRl9GVU5DX1NUUl9GTih4KSBbQlBGX0ZVTkNfICMjIHhdID0gX19zdHJpbmdpZnkoYnBmXyAjIyB4KVxuICAxMTpcdHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZnVuY19pZF9zdHJbXSA9IHtcbiAgMTI6XHRcdF9fQlBGX0ZVTkNfTUFQUEVSKF9fQlBGX0ZVTkNfU1RSX0ZOKVxuICAxMzpcdH07XG4gIDE0Olx0I3VuZGVmIF9fQlBGX0ZVTkNfU1RSX0ZOXG4gIDE1Olx0XG4gIDE2Olx0c3RhdGljIGNvbnN0IGNoYXIgKl9fZnVuY19nZXRfbmFtZShjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gIDE3Olx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gIDE4Olx0XHRcdFx0XHQgICBjaGFyICpidWZmLCBzaXplX3QgbGVuKVxuICAxOTpcdHtcbiAgMjA6XHRcdEJVSUxEX0JVR19PTihBUlJBWV9TSVpFKGZ1bmNfaWRfc3RyKSAhPSBfX0JQRl9GVU5DX01BWF9JRCk7XG4gIDIxOlx0XG4gIDIyOlx0XHRpZiAoIWluc24tXHUwMDNlc3JjX3JlZyBcdTAwMjZcdTAwMjZcbiAgMjM6XHRcdCAgICBpbnNuLVx1MDAzZWltbSBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlaW1tIFx1MDAzYyBfX0JQRl9GVU5DX01BWF9JRCBcdTAwMjZcdTAwMjZcbiAgMjQ6XHRcdCAgICBmdW5jX2lkX3N0cltpbnNuLVx1MDAzZWltbV0pXG4gIDI1Olx0XHRcdHJldHVybiBmdW5jX2lkX3N0cltpbnNuLVx1MDAzZWltbV07XG4gIDI2Olx0XG4gIDI3Olx0XHRpZiAoY2JzIFx1MDAyNlx1MDAyNiBjYnMtXHUwMDNlY2JfY2FsbCkge1xuICAyODpcdFx0XHRjb25zdCBjaGFyICpyZXM7XG4gIDI5Olx0XG4gIDMwOlx0XHRcdHJlcyA9IGNicy1cdTAwM2VjYl9jYWxsKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIGluc24pO1xuICAzMTpcdFx0XHRpZiAocmVzKVxuICAzMjpcdFx0XHRcdHJldHVybiByZXM7XG4gIDMzOlx0XHR9XG4gIDM0Olx0XG4gIDM1Olx0XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fQ0FMTClcbiAgMzY6XHRcdFx0c25wcmludGYoYnVmZiwgbGVuLCBcJiMzNDslJiM0MztkXCYjMzQ7LCBpbnNuLVx1MDAzZWltbSk7XG4gIDM3Olx0XHRlbHNlIGlmIChpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKVxuICAzODpcdFx0XHRzbnByaW50ZihidWZmLCBsZW4sIFwmIzM0O2tlcm5lbC1mdW5jdGlvblwmIzM0Oyk7XG4gIDM5Olx0XG4gIDQwOlx0XHRyZXR1cm4gYnVmZjtcbiAgNDE6XHR9XG4gIDQyOlx0XG4gIDQzOlx0c3RhdGljIGNvbnN0IGNoYXIgKl9fZnVuY19pbW1fbmFtZShjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gIDQ0Olx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gIDQ1Olx0XHRcdFx0XHQgICB1NjQgZnVsbF9pbW0sIGNoYXIgKmJ1ZmYsIHNpemVfdCBsZW4pXG4gIDQ2Olx0e1xuICA0NzpcdFx0aWYgKGNicyBcdTAwMjZcdTAwMjYgY2JzLVx1MDAzZWNiX2ltbSlcbiAgNDg6XHRcdFx0cmV0dXJuIGNicy1cdTAwM2VjYl9pbW0oY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgaW5zbiwgZnVsbF9pbW0pO1xuICA0OTpcdFxuICA1MDpcdFx0c25wcmludGYoYnVmZiwgbGVuLCBcJiMzNDsweCVsbHhcJiMzNDssICh1bnNpZ25lZCBsb25nIGxvbmcpZnVsbF9pbW0pO1xuICA1MTpcdFx0cmV0dXJuIGJ1ZmY7XG4gIDUyOlx0fVxuICA1MzpcdFxuICA1NDpcdGNvbnN0IGNoYXIgKmZ1bmNfaWRfbmFtZShpbnQgaWQpXG4gIDU1Olx0e1xuICA1NjpcdFx0aWYgKGlkIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgaWQgXHUwMDNjIF9fQlBGX0ZVTkNfTUFYX0lEIFx1MDAyNlx1MDAyNiBmdW5jX2lkX3N0cltpZF0pXG4gIDU3Olx0XHRcdHJldHVybiBmdW5jX2lkX3N0cltpZF07XG4gIDU4Olx0XHRlbHNlXG4gIDU5Olx0XHRcdHJldHVybiBcJiMzNDt1bmtub3duXCYjMzQ7O1xuICA2MDpcdH1cbiAgNjE6XHRcbiAgNjI6XHRjb25zdCBjaGFyICpjb25zdCBicGZfY2xhc3Nfc3RyaW5nWzhdID0ge1xuICA2MzpcdFx0W0JQRl9MRF0gICAgPSBcJiMzNDtsZFwmIzM0OyxcbiAgNjQ6XHRcdFtCUEZfTERYXSAgID0gXCYjMzQ7bGR4XCYjMzQ7LFxuICA2NTpcdFx0W0JQRl9TVF0gICAgPSBcJiMzNDtzdFwmIzM0OyxcbiAgNjY6XHRcdFtCUEZfU1RYXSAgID0gXCYjMzQ7c3R4XCYjMzQ7LFxuICA2NzpcdFx0W0JQRl9BTFVdICAgPSBcJiMzNDthbHVcJiMzNDssXG4gIDY4Olx0XHRbQlBGX0pNUF0gICA9IFwmIzM0O2ptcFwmIzM0OyxcbiAgNjk6XHRcdFtCUEZfSk1QMzJdID0gXCYjMzQ7am1wMzJcJiMzNDssXG4gIDcwOlx0XHRbQlBGX0FMVTY0XSA9IFwmIzM0O2FsdTY0XCYjMzQ7LFxuICA3MTpcdH07XG4gIDcyOlx0XG4gIDczOlx0Y29uc3QgY2hhciAqY29uc3QgYnBmX2FsdV9zdHJpbmdbMTZdID0ge1xuICA3NDpcdFx0W0JQRl9BREQgXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0OyYjNDM7PVwmIzM0OyxcbiAgNzU6XHRcdFtCUEZfU1VCIFx1MDAzZVx1MDAzZSA0XSAgPSBcJiMzNDstPVwmIzM0OyxcbiAgNzY6XHRcdFtCUEZfTVVMIFx1MDAzZVx1MDAzZSA0XSAgPSBcJiMzNDsqPVwmIzM0OyxcbiAgNzc6XHRcdFtCUEZfRElWIFx1MDAzZVx1MDAzZSA0XSAgPSBcJiMzNDsvPVwmIzM0OyxcbiAgNzg6XHRcdFtCUEZfT1IgIFx1MDAzZVx1MDAzZSA0XSAgPSBcJiMzNDt8PVwmIzM0OyxcbiAgNzk6XHRcdFtCUEZfQU5EIFx1MDAzZVx1MDAzZSA0XSAgPSBcJiMzNDtcdTAwMjY9XCYjMzQ7LFxuICA4MDpcdFx0W0JQRl9MU0ggXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0O1x1MDAzY1x1MDAzYz1cJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI2MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5IHRvIGRpdmUgaW50byB0aGF0IHRleHQgYW5kIHN1bW1hcml6ZSB0aGUgdGhvdWdodCBwcm9jZXNzLiBIZXJlJiMzOTtzIG15IHRha2U6CgoqKkFuYWx5emluZyB0aGUgUmVsZXZhbnQgU2VjdGlvbioqCgpBbHJpZ2h0LCBteSBpbml0aWFsIHJlYWQtdGhyb3VnaCBzdWdnZXN0ZWQgdGhhdCB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIHNlZ21lbnQgb2YgdGhlIHRleHQgdGhhdCBkZXNlcnZlcyBjbG9zZXIgYXR0ZW50aW9uIOKAkyBsaW5lcyA4MCB0aHJvdWdoIDEyMC4gQmFzZWQgb24gbXkgZXhpc3Rpbmcga25vd2xlZGdlIGFuZCB0aGUgY29udGV4dCwgSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIHNlY3Rpb24gbGlrZWx5IGhvdXNlcyB0aGUgY29yZSBvZiB0aGUgYXJndW1lbnQsIHRoZSBjcnVjaWFsIG1ldGhvZG9sb2d5LCBvciBwZXJoYXBzIHRoZSBrZXkgcmVzdWx0cyB0aGF0IGRlbWFuZCBhIGRlZXBlciBleGFtaW5hdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZGlzc2VjdCB0aGF0IHBvcnRpb24gdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBhbmQgZHJhdyBjb25uZWN0aW9ucy4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgY3JpdGljYWwgcGllY2VzIG9mIHRoZSBwdXp6bGUgcmVzaWRlLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZW0uIEkgZXhwZWN0IGl0IHRvIGJlIGEga2V5IGVsZW1lbnQgZm9yIHRoZSBhcnRpY2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9kaXNhc20uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcdFtCUEZfTFNIIFx1MDAzZVx1MDAzZSA0XSAgPSBcJiMzNDtcdTAwM2NcdTAwM2M9XCYjMzQ7LFxuICA4MTpcdFx0W0JQRl9SU0ggXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0O1x1MDAzZVx1MDAzZT1cJiMzNDssXG4gIDgyOlx0XHRbQlBGX05FRyBcdTAwM2VcdTAwM2UgNF0gID0gXCYjMzQ7bmVnXCYjMzQ7LFxuICA4MzpcdFx0W0JQRl9NT0QgXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0OyU9XCYjMzQ7LFxuICA4NDpcdFx0W0JQRl9YT1IgXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0O149XCYjMzQ7LFxuICA4NTpcdFx0W0JQRl9NT1YgXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0Oz1cJiMzNDssXG4gIDg2Olx0XHRbQlBGX0FSU0ggXHUwMDNlXHUwMDNlIDRdID0gXCYjMzQ7c1x1MDAzZVx1MDAzZT1cJiMzNDssXG4gIDg3Olx0XHRbQlBGX0VORCBcdTAwM2VcdTAwM2UgNF0gID0gXCYjMzQ7ZW5kaWFuXCYjMzQ7LFxuICA4ODpcdH07XG4gIDg5Olx0XG4gIDkwOlx0c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGJwZl9hbHVfc2lnbl9zdHJpbmdbMTZdID0ge1xuICA5MTpcdFx0W0JQRl9ESVYgXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0O3MvPVwmIzM0OyxcbiAgOTI6XHRcdFtCUEZfTU9EIFx1MDAzZVx1MDAzZSA0XSAgPSBcJiMzNDtzJT1cJiMzNDssXG4gIDkzOlx0fTtcbiAgOTQ6XHRcbiAgOTU6XHRzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYnBmX21vdnN4X3N0cmluZ1s0XSA9IHtcbiAgOTY6XHRcdFswXSA9IFwmIzM0OyhzOClcJiMzNDssXG4gIDk3Olx0XHRbMV0gPSBcJiMzNDsoczE2KVwmIzM0OyxcbiAgOTg6XHRcdFszXSA9IFwmIzM0OyhzMzIpXCYjMzQ7LFxuICA5OTpcdH07XG4gMTAwOlx0XG4gMTAxOlx0c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGJwZl9hdG9taWNfYWx1X3N0cmluZ1sxNl0gPSB7XG4gMTAyOlx0XHRbQlBGX0FERCBcdTAwM2VcdTAwM2UgNF0gID0gXCYjMzQ7YWRkXCYjMzQ7LFxuIDEwMzpcdFx0W0JQRl9BTkQgXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0O2FuZFwmIzM0OyxcbiAxMDQ6XHRcdFtCUEZfT1IgXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0O29yXCYjMzQ7LFxuIDEwNTpcdFx0W0JQRl9YT1IgXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0O3hvclwmIzM0OyxcbiAxMDY6XHR9O1xuIDEwNzpcdFxuIDEwODpcdHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBicGZfbGRzdF9zdHJpbmdbXSA9IHtcbiAxMDk6XHRcdFtCUEZfVyBcdTAwM2VcdTAwM2UgM10gID0gXCYjMzQ7dTMyXCYjMzQ7LFxuIDExMDpcdFx0W0JQRl9IIFx1MDAzZVx1MDAzZSAzXSAgPSBcJiMzNDt1MTZcJiMzNDssXG4gMTExOlx0XHRbQlBGX0IgXHUwMDNlXHUwMDNlIDNdICA9IFwmIzM0O3U4XCYjMzQ7LFxuIDExMjpcdFx0W0JQRl9EVyBcdTAwM2VcdTAwM2UgM10gPSBcJiMzNDt1NjRcJiMzNDssXG4gMTEzOlx0fTtcbiAxMTQ6XHRcbiAxMTU6XHRzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYnBmX2xkc3hfc3RyaW5nW10gPSB7XG4gMTE2Olx0XHRbQlBGX1cgXHUwMDNlXHUwMDNlIDNdICA9IFwmIzM0O3MzMlwmIzM0OyxcbiAxMTc6XHRcdFtCUEZfSCBcdTAwM2VcdTAwM2UgM10gID0gXCYjMzQ7czE2XCYjMzQ7LFxuIDExODpcdFx0W0JQRl9CIFx1MDAzZVx1MDAzZSAzXSAgPSBcJiMzNDtzOFwmIzM0OyxcbiAxMTk6XHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNjMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIEluc3RydWN0aW9uIFByaW50IEJ1ZyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGJwZl9sZHN4X3N0cmluZ2Agc3RydWN0dXJlLiBJJiMzOTttIGltbWVkaWF0ZWx5IG5vdGljaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZy4gSXQgYXBwZWFycyB0byBiZSBkZWZpbmluZyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9ucyBmb3Igc2lnbmVkIGxvYWRzIGJhc2VkIG9uIHNpemU6IGBzMzJgLCBgczE2YCwgYW5kIGBzOGAuIEJ1dCBob2xkIG9uLi4uIHRoZXJlJiMzOTtzIG5vIGVudHJ5IGZvciBgQlBGX0RXYCwgd2hpY2ggaXMgZG91YmxlLXdvcmQgb3IgNjQtYml0IGxvYWQuIEkgcXVpY2tseSBzZWUgdGhhdCBgQlBGX0RXICZndDsmZ3Q7IDNgIGV2YWx1YXRlcyB0byAzLCB3aGljaCBsYW5kcyBzcXVhcmVseSBpbiB0aGUgTlVMTCBzcGFjZSBvZiB0aGF0IGFycmF5LgoKTm93LCBpZiBgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSlgIGlzIGBCUEZfTUVNU1hgIGFuZCBgQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSlgIGlzIGBCUEZfRFdgLCB0aGVuIHRoZSBjb2RlIGlzIHRyeWluZyB0byBhY2Nlc3MgYSA2NC1iaXQgc2lnbmVkIGxvYWQuIFRoYXQgd291bGQgbWVhbiB3ZSYjMzk7cmUgaW5kZXhpbmcgaW50byBgYnBmX2xkc3hfc3RyaW5nYCBhdCBpbmRleCAzLCB3aGljaCwgYXMgd2UmIzM5O3ZlIGVzdGFibGlzaGVkLCBpcyBgTlVMTGAuIFRoZSBwcm9ibGVtIGlzIHJpZ2h0IHRoZXJlLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGEgY3Jhc2ggaWYgdGhlIGtlcm5lbCB0cmllcyB0byBgcHJpbnRrYCBvciBgdmVyYm9zZWAgbG9nIHRoaXMgdmFsdWUgYXMgYSBzdHJpbmcuIERlcGVuZGluZyBvbiB0aGUgYHZzbnByaW50ZmAgaW1wbGVtZW50YXRpb24sIHRoaXMgY291bGQgZWl0aGVyIGNyYXNoIG9yIHByaW50IGAobnVsbClgLiBOb3QgZ29vZC4KClNvLCB3aGVyZSBpcyBgcHJpbnRfYnBmX2luc25gIGNhbGxlZD8gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxsIHNpdGVzIHRvIHNlZSB3aGVyZSB0aGlzIHBvdGVudGlhbCBidWcgaXMgZXhwb3NlZC4gTGV0JiMzOTtzIGZpbmQgdGhvc2UgY2FsbGVycyBhbmQgc2VlIGhvdyBhbmQgd2hlbiBgcHJpbnRfYnBmX2luc25gIGlzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ByaW50X2JwZl9pbnNuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz02MDg9c3RhdGljIHZvaWQgZm9ybWF0X2Rpc2FzbV9saW5lKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCxcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtNjMyLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjYzMzpcdHByaW50X2JwZl9pbnNuKFx1MDAyNmNicywgaW5zbiwgZW52LVx1MDAzZWFsbG93X3B0cl9sZWFrcyk7XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtNjM0LVx0c2VxX2J1Zl9zdHIoXHUwMDI2Y3R4LnNlcSk7XG4tLVxua2VybmVsL2JwZi9kaXNhc20uYz0xODE9c3RhdGljIGlubGluZSBib29sIGlzX21vdl9wZXJjcHVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi9kaXNhc20uYy0xODUtXG5rZXJuZWwvYnBmL2Rpc2FzbS5jOjE4Njp2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbmtlcm5lbC9icGYvZGlzYXNtLmMtMTg3LVx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvZGlzYXNtLmg9MzA9c3RydWN0IGJwZl9pbnNuX2NicyB7XG4tLVxua2VybmVsL2JwZi9kaXNhc20uaC0zNi1cbmtlcm5lbC9icGYvZGlzYXNtLmg6Mzc6dm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG5rZXJuZWwvYnBmL2Rpc2FzbS5oLTM4LVx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMzc3PXZvaWQgYnBmX3ZlcmJvc2VfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzODQtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzM4NTpcdHByaW50X2JwZl9pbnNuKFx1MDAyNmNicywgaW5zbiwgZW52LVx1MDAzZWFsbG93X3B0cl9sZWFrcyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzM4Ni19XG4tLVxudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jPTIwNT12b2lkIGR1bXBfeGxhdGVkX2pzb24oc3RydWN0IGR1bXBfZGF0YSAqZGQsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbixcbi0tXG50b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmMtMjU3LVx0XHRqc29ud19uYW1lKGpzb25fd3RyLCBcJiMzNDtkaXNhc21cJiMzNDspO1xudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jOjI1ODpcdFx0cHJpbnRfYnBmX2luc24oXHUwMDI2Y2JzLCBpbnNuICYjNDM7IGksIHRydWUpO1xudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jLTI1OS1cbi0tXG50b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmM9MjkwPXZvaWQgZHVtcF94bGF0ZWRfcGxhaW4oc3RydWN0IGR1bXBfZGF0YSAqZGQsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbixcbi0tXG50b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmMtMzM5LVx0XHRwcmludGYoXCYjMzQ7JTR1OiBcJiMzNDssIGkpO1xudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jOjM0MDpcdFx0cHJpbnRfYnBmX2luc24oXHUwMDI2Y2JzLCBpbnNuICYjNDM7IGksIHRydWUpO1xudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jLTM0MS1cdFx0cHJpbnRmKFwmIzM0O1xcblwmIzM0Oyk7XG4tLVxudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jPTM1NT12b2lkIGR1bXBfeGxhdGVkX2Zvcl9ncmFwaChzdHJ1Y3QgZHVtcF9kYXRhICpkZCwgdm9pZCAqYnVmX3N0YXJ0LCB2b2lkICpidWZfZW5kLFxuLS1cbnRvb2xzL2JwZi9icGZ0b29sL3hsYXRlZF9kdW1wZXIuYy00MDYtXHRcdHByaW50ZihcJiMzNDsldTogXCYjMzQ7LCBpbnNuX29mZik7XG50b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmM6NDA3Olx0XHRwcmludF9icGZfaW5zbihcdTAwMjZjYnMsIGN1ciwgdHJ1ZSk7XG50b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmMtNDA4LVx0XHRwcmludGYoXCYjMzQ7XFxcXGxcXFxcXFxuXCYjMzQ7KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuYz0zOD1zdHJ1Y3QgYnBmX2luc24gKmRpc2FzbV9pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgY2hhciAqYnVmLCBzaXplX3QgYnVmX3N6KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jLTUyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmM6NTM6XHRwcmludF9icGZfaW5zbihcdTAwMjZjYnMsIGluc24sIHRydWUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmMtNTQtXHQvKiBXZSBzaGFyZSBjb2RlIHdpdGgga2VybmVsIEJQRiBkaXNhc3NlbWJsZXIsIGl0IGFkZHMgJiMzOTsoRkYpICYjMzk7IHByZWZpeFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODgyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZToKCioqQlBGIEluc3RydWN0aW9uIERpc2Fzc2VtYmx5IGFuZCBWZXJib3NlIExvZ2dpbmcqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIHZlcmJvc2UgbG9nZ2luZyBvZiBCUEYgaW5zdHJ1Y3Rpb25zIHdpdGhpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gcHJldHR5IHN1cmUgSSByZW1lbWJlciBgYnBmX3ZlcmJvc2VfaW5zbmAgYmVpbmcgdGhlIGtleSBmdW5jdGlvbiBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gQW5kIHRoZW4sIG9uIHRoZSBkaXNwbGF5IHNpZGUsIEkgaGF2ZSBgZm9ybWF0X2Rpc2FzbV9saW5lYCBpbiBga2VybmVsL2JwZi9kaWFnbm9zdGljcy5jYCB0byBmb3JtYXQgaXQgYWxsLgoKVGhlIHJlYWwgcXVlc3Rpb24gaXMsIHdoZW4gKmV4YWN0bHkqIGRvZXMgYGJwZl92ZXJib3NlX2luc25gIGdldCBjYWxsZWQgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXI/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHRyaWdnZXJpbmcgdGhhdCBsZXZlbCBvZiBkZXRhaWwuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgc2VhcmNoaW5nIHRoZSBjb2RlIGJhc2UgZm9yIGNhbGxzIHRvIGBicGZfdmVyYm9zZV9pbnNuYCBhbmQgc2VlIHdoYXQgY29tZXMgdXAuIEkmIzM5O2xsIGFsc28gY29uc2lkZXIgc2VhcmNoZXMgYXJvdW5kIHZlcmJvc2UgbG9nZ2luZyBzcGVjaWZpY2FsbHkgZHVyaW5nIEJQRiBwcm9ncmFtIGxvYWRpbmcsIHNpbmNlIHRoYXQmIzM5O3Mgb2Z0ZW4gd2hlbiB5b3Ugd2FudCB0aGUgbW9zdCBkZXRhaWxlZCBpbnNwZWN0aW9uLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gd2hlcmUgYW5kIHdoZW4gdGhlc2UgdmVyYm9zZSBsb2dzIGFyZSBnZW5lcmF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl92ZXJib3NlX2luc24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xNjI3PWJvb2wgYnBmX2lzX21heV9nb3RvX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuKTtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTYyOC1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTYyOTp2b2lkIGJwZl92ZXJib3NlX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKTtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTYzMC1ib29sIGJwZl9nZXRfY2FsbF9zdW1tYXJ5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqY2FsbCxcbi0tXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jPTI2NT1zdGF0aWMgaW50IGJhY2t0cmFja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZHgsIGludCBzdWJzZXFfaWR4LFxuLS1cbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtMjg0LVx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JWQ6IFwmIzM0OywgaWR4KTtcbmtlcm5lbC9icGYvYmFja3RyYWNrLmM6Mjg1Olx0XHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTI4Ni1cdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcblwmIzM0Oyk7XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jPTQ3Nz1zdGF0aWMgdm9pZCBwcmludF9pbnN0YW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgZnVuY19pbnN0YW5jZSAqaW5zdGFuY2UpXG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTQ5Ny1cdFx0dmVyYm9zZShlbnYsIFwmIzM0OyUzZDogXCYjMzQ7LCBpbnNuX2lkeCk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NDk4Olx0XHRicGZfdmVyYm9zZV9pbnNuKGVudiwgXHUwMDI2aW5zbnNbaW5zbl9pZHhdKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy00OTktXHRcdGluc25fcG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0xMDI5PXN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgaWR4LFxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDQyLVx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslM2Q6IFwmIzM0OywgaWR4KTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDQzOlx0XHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDQ0LVx0XHRcdHByaW50ZWQgPSB0cnVlO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDU2LVx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslM2Q6IFwmIzM0OywgaWR4KTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDU3Olx0XHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDU4LVx0XHRcdHByaW50ZWQgPSB0cnVlO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDY3LVx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslM2Q6IFwmIzM0OywgaWR4KTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDY4Olx0XHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDY5LVx0XHRcdHByaW50ZWQgPSB0cnVlO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0xNTE3PXN0YXRpYyB2b2lkIHByaW50X3N1YnByb2dfYXJnX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNTM4LVx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JTNkOiBcJiMzNDssIGlkeCk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTUzOTpcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIFx1MDAyNmluc25zW2lkeF0pO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTE1NDAtXHRcdHZlcmJvc2UoZW52LCBcJiMzNDtcXG5cJiMzNDspO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0yMjI2PWludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0yMzI2LVx0XHRcdHBvcyA9IGVudi1cdTAwM2Vsb2cuZW5kX3Bvcztcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoyMzI3Olx0XHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBcdTAwMjZpbnNuc1tpXSk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjMyOC1cdFx0XHRpbnNuX3BvcyA9IGVudi1cdTAwM2Vsb2cuZW5kX3Bvcztcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzM1OT1jb25zdCBjaGFyICpicGZfZGlzYXNtX2tmdW5jX25hbWUodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzc2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjMzNzc6dm9pZCBicGZfdmVyYm9zZV9pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzc4LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg0NjY9c3RhdGljIGludCBkb19jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODU3Mi1cdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JWQ6IFwmIzM0OywgZW52LVx1MDAzZWluc25faWR4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODU3MzpcdFx0XHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg1NzQtXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDQxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJQRiBJbnN0cnVjdGlvbiBIYW5kbGluZyBWdWxuZXJhYmlsaXR5IEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBCUEYgaW5zdHJ1Y3Rpb24gaXNzdWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBicGZfdmVyYm9zZV9pbnNuYCBnZXRzIGNhbGxlZCB3aGVuIGxvYWRpbmcgYSBCUEYgcHJvZ3JhbSB3aXRoIGxvZ2dpbmcgZW5hYmxlZCwgb3IgZHVyaW5nIHZlcmlmaWNhdGlvbiBwcm9jZXNzZXMuIEl0IHNlZW1zIGxpa2UgdGhlIHZlcmlmaWVyIGNhbiBlbmNvdW50ZXIgYW55IEJQRiBpbnN0cnVjdGlvbiwgZXZlbiBjb21wbGV0ZWx5IGludmFsaWQgb25lcyBsaWtlIGBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX0RXYC4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIHZlcmlmaWVyIGhhbmRsZXMgdGhlc2UgaW5zdHJ1Y3Rpb25zLiBTcGVjaWZpY2FsbHksIGR1cmluZyBjaGVja3MgbGlrZSBgY2hlY2tfbWVtX2FjY2Vzc2AsIGBkb19jaGVja2AsIGFuZCBgY2hlY2tfY2ZnYC4gSXQgc2VlbXMgdGhhdCB3aGVuIGBicGYoQlBGX1BST0dfTE9BRClgIGlzIGNhbGxlZCB3aXRoIGEgbG9nZ2luZyBsZXZlbCBzZXQsIGBicGZfdmVyYm9zZV9pbnNuYCBwcmludHMgZWFjaCBpbnN0cnVjdGlvbiBiZWZvcmUgaXQgZ2V0cyB2ZXJpZmllZC4KCk5vdyBoZXJlJiMzOTtzIHRoZSBjcnVjaWFsIGJpdC4gSWYgYW4gaW5zdHJ1Y3Rpb24gaGFzIHRoZSBpbnZhbGlkIGNvbWJpbmF0aW9uIEkgbWVudGlvbmVkICgweDk5KSwgYHByaW50X2JwZl9pbnNuYCBub3cgcHJpbnRzIGAmIzM0O0JVR19sZHN4Xzk5JiMzNDtgIGFuZCByZXR1cm5zLiBJdCBwcmV2ZW50cyB3aGF0IHdvdWxkIGhhdmUgYmVlbiBhIE5VTEwgZGVyZWZlcmVuY2UgaW4gdGhlIGZvcm1hdHRpbmcgb2YgdGhpcyBpbnN0cnVjdGlvbiEgUHJldmlvdXNseSwgaXQgd291bGQgdHJ5IHRvIHJlYWQgYSBOVUxMIHBvaW50ZXIgYW5kIGZvcm1hdCB0aGUgc3RyaW5nLiBTbyB0aGUgcGF0Y2ggZG9lcyBwcmV2ZW50IGEgTlVMTCBkZXJlZmVyZW5jZS4KCklzIHRoaXMgY29kZSBhY3R1YWxseSByZWFjaGFibGUgd2l0aGluIHRoZSBrZXJuZWw/IFllcywgYGtlcm5lbC9icGYvZGlzYXNtLmNgIGlzIHBhcnQgb2YgdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSwgd2hpY2ggaXMgZGVmaW5pdGVseSBwYXJ0IG9mIHRoZSBrZXJuZWwsIGFuZCBjYW4gYmUgYWNjZXNzZWQgdmlhIHRoZSBgc3lzX2JwZmAgc3lzY2FsbC4KCk5vdyBJIG5lZWQgdG8gZXZhbHVhdGUgdGhpcyBpbiB0ZXJtcyBvZiBmdXp6aW5nIHBvdGVudGlhbC4gQWNjb3JkaW5nIHRvIHRoZSBjcml0ZXJpYSBJJiMzOTttIHVzaW5nLCBTZWN0aW9uIDMgc3RhdGVzIHRoYXQgJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZSYjMzQ7IGlmIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGNvcmUgc3Vic3lzdGVtcyBsaWtlIEJQRi4KClNlY3Rpb24gMiBzYXlzICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgaWYgaXQmIzM5O3MgcHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZywgZG9jdW1lbnRhdGlvbiwgb3IgYnVpbGQgc3lzdGVtIGNoYW5nZXMuIFRoaXMgaXMgd2hlcmUgSSBoYXZlIHRvIGJlIGNhcmVmdWwuCgpUaGlzIGlzbiYjMzk7dCBwdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nLiBJdCYjMzk7cyBtb2RpZnlpbmcgaG93IGFuIGludmFsaWQgaW5zdHJ1Y3Rpb24gaXMgZGVjb2RlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2VybmVsL2JwZi9kaXNhc20uY2AsIHdoaWNoIGlzIHRoZSBpbnZhbGlkIGluc3RydWN0aW9uIGhhbmRsaW5nIGxvZ2ljLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYGtlcm5lbC9icGYvZGlzYXNtLmNgIGlzIGNvbXBpbGVkIGludG8gYHZtbGludXhgLiBJIHNob3VsZCBjaGVjayB0aGUgTWFrZWZpbGUgaW4gYGtlcm5lbC9icGYvYCB0byB2ZXJpZnkgdGhhdC4KClNvLCB0aGlzIGxvb2tzIGxpa2UgYSBkZWZpbml0ZSAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsgc2l0dWF0aW9uLiBUaGUgcGF0Y2ggY2xlYXJseSB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gYSBjb3JlIEJQRiBzdWJzeXN0ZW0gYnkgbW9kaWZ5aW5nIGhvdyBpdCBoYW5kbGVzIGludmFsaWQgaW5zdHJ1Y3Rpb25zLiBJdCYjMzk7cyBub3QganVzdCBhIG1lc3NhZ2UgY2hhbmdlOyBpdCBjaGFuZ2VzIGNvbnRyb2wgZmxvdyB0byBwcmV2ZW50IGEgTlVMTCBkZXJlZmVyZW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG9iai15IDo9IGNvcmUub1xuICAgMzpcdGlmbmVxICgkKENPTkZJR19CUEZfSklUX0FMV0FZU19PTikseSlcbiAgIDQ6XHQjIF9fX2JwZl9wcm9nX3J1bigpIG5lZWRzIEdDU0UgZGlzYWJsZWQgb24geDg2OyBzZWUgMzE5M2MwODM2ZjIwMyBmb3IgZGV0YWlsc1xuICAgNTpcdGNmbGFncy1ub2djc2UtJChDT05GSUdfWDg2KSQoQ09ORklHX0NDX0lTX0dDQykgOj0gLWZuby1nY3NlXG4gICA2Olx0ZW5kaWZcbiAgIDc6XHRDRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxuICAgODpcdFxuICAgOTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXG4gIDEwOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG4gIDExOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbiAgMTI6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXG4gIDEzOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2xvY2FsX3N0b3JhZ2UubyBicGZfdGFza19zdG9yYWdlLm9cbiAgMTQ6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xuICAxNTpcdG9iai0ke0NPTkZJR19CUEZfTFNNfVx0ICAmIzQzOz0gYnBmX2lub2RlX3N0b3JhZ2Uub1xuICAxNjpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRpc2FzbS5vIG1wcm9nLm9cbiAgMTc6XHRvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xuICAxODpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXG4gIDE5Olx0aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcbiAgMjA6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBhcmVuYS5vIHJhbmdlX3RyZWUub1xuICAyMTpcdGVuZGlmXG4gIDIyOlx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSBkaXNwYXRjaGVyLm9cbiAgMjM6XHRpZmVxICgkKENPTkZJR19ORVQpLHkpXG4gIDI0Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGV2bWFwLm9cbiAgMjU6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXAub1xuICAyNjpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IG9mZmxvYWQub1xuICAyNzpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IG5ldF9uYW1lc3BhY2Uub1xuICAyODpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHRjeC5vXG4gIDI5Olx0ZW5kaWZcbiAgMzA6XHRpZmVxICgkKENPTkZJR19LRVlTKSx5KVxuICAzMTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGtleXMub1xuICAzMjpcdGVuZGlmXG4gIDMzOlx0aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXG4gIDM0Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3RhY2ttYXAub1xuICAzNTpcdGVuZGlmXG4gIDM2Olx0aWZlcSAoJChDT05GSUdfQ0dST1VQUykseSlcbiAgMzc6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xuICAzODpcdGVuZGlmXG4gIDM5Olx0b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICYjNDM7PSBjZ3JvdXAub1xuICA0MDpcdGlmZXEgKCQoQ09ORklHX0lORVQpLHkpXG4gIDQxOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gcmV1c2Vwb3J0X2FycmF5Lm9cbiAgNDI6XHRlbmRpZlxuICA0MzpcdGlmZXEgKCQoQ09ORklHX1NZU0ZTKSx5KVxuICA0NDpcdG9iai0kKENPTkZJR19ERUJVR19JTkZPX0JURikgJiM0Mzs9IHN5c2ZzX2J0Zi5vXG4gIDQ1Olx0ZW5kaWZcbiAgNDY6XHRpZmVxICgkKENPTkZJR19CUEZfSklUKSx5KVxuICA0NzpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9zdHJ1Y3Rfb3BzLm9cbiAgNDg6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXNrLm9cbiAgNDk6XHQjIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcbiAgNTA6XHQjIGRlZHVwbGljYXRlcyBmdW5jdGlvbiBwcm90b3R5cGVzIHdpdGhpblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg5MQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQlBGIERpc2Fzc2VtYmxlciBCdWlsZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRpc2FzbS5vYC4gUmlnaHQsIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgdGhlIGRpc2Fzc2VtYmxlciBvYmplY3QgZmlsZSwgYGRpc2FzbS5vYCwgaXMgb25seSBpbmNsdWRlZCBpbiB0aGUgYnVpbGQgaWYgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IHRvIGVuc3VyZSB0aGUgZGlzYXNzZW1ibGVyIGlzbiYjMzk7dCBidWlsdCB1bmxlc3MgdGhlIGNvcmUgQlBGIHN5c3RlbSBjYWxsIGZ1bmN0aW9uYWxpdHkgaXMgYWxzbyBhdmFpbGFibGUuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpOb3csIEkgbmVlZCB0byBjaGVjayBmb3IgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgc3lzdGVtIGNhbGwgaXMgc2V0IHVwIHByb3Blcmx5LiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgaW5pdC9LY29uZmlnYCBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgcGxhY2VzIGZvciB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIGFuZCB0aGUgQlBGIGNvbmZpZ3VyYXRpb24sIHJlc3BlY3RpdmVseS4gSSBjYW4gcXVpY2tseSBzY2FuIHRoZW0gdG8gc2VlIGlmIGBDT05GSUdfQlBGX1NZU0NBTExgIGRlcGVuZHMgb24gYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGltcGFjdCBvdXIgYnVpbGQgb3IgaGF2ZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgdGhpcyB0byBiZSBzdXJlIHRoaXMgYnVpbGQgd2lsbCBzdWNjZWVkLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBoYXZpbmcgdGhpcyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMDIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlOgoKKipOYXZpZ2F0aW5nIHRoZSBCUEYgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIExldCYjMzk7cyB6ZXJvIGluIG9uIGxpbmUgMjUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlc2UgQlBGIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc3RydWN0dXJlZCwgYW5kIHRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50LiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBkaWZmZXJlbnQgQlBGIGZlYXR1cmVzLiBLbm93aW5nIHRoZSBleGFjdCBvcHRpb25zIGFuZCB0aGVpciBpbnRlcmFjdGlvbnMgaXMgY3J1Y2lhbCBmb3Igb3B0aW1pemluZyB0aGUgY29uZmlndXJhdGlvbiBmb3Igc3BlY2lmaWMgdXNlIGNhc2VzIGFuZCBhcmNoaXRlY3R1cmVzLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBhbGxvdyBtZSB0byBhc3Nlc3MgdGhlIGltcGFjdHMgb2YgZW5hYmxpbmcvZGlzYWJsaW5nIHZhcmlvdXMgQlBGIGZlYXR1cmVzLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBnZXR0aW5nIHRoZSByaWdodCBiYWxhbmNlIG9mIGZ1bmN0aW9uYWxpdHksIHNlY3VyaXR5LCBhbmQgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc2MwoJCQkJCQkJb3V0cHV0OiAxMzIKCQkJCQkJCXRob3VnaHRzOiA0MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIERpc2Fzc2VtYmx5IGFuZCBWZXJpZmljYXRpb24gQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb24sIHNvIEkmIzM5O2xsIGNoZWNrIHRoZSBmb2N1cyBzeW1ib2xzLiBMb29rcyBsaWtlIHRoZSBtb2RpZmljYXRpb24gY2VudGVycyBhcm91bmQgYHByaW50X2JwZl9pbnNuYCBpbiBga2VybmVsL2JwZi9kaXNhc20uY2AuIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uLiBSZWxldmFudCBjYWxsZXJzIHNlZW0gdG8gYmUgYGJwZl92ZXJib3NlX2luc25gIGFuZCBgZm9ybWF0X2Rpc2FzbV9saW5lYC4KCk5vdywgaXMgYHByaW50X2JwZl9pbnNuYCBhIHN0YXRpYyBoZWxwZXIgb3IgYSBnbG9iYWw/IExldCBtZSBjaGVjayBsaW5lIDE4Ni4uLiBBaCwgaXQmIzM5O3MgZ2xvYmFsLiBHb29kLiBUaGF0IGNsYXJpZmllcyBpdHMgc2NvcGUuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgb3RoZXIgc3ltYm9scy4gSSBzZWUgYGJwZl92ZXJib3NlX2luc25gIGFsc28gYXBwZWFycyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gVGhpcyBpcyB0eXBpY2FsOyBJJiMzOTtkIGV4cGVjdCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkgYWNyb3NzIHRob3NlIGRvbWFpbnMuCgpUaW1lIHRvIGFwcGx5IG15IEZvY3VzU3ltYm9scyBydWxlcy4gSSBuZWVkIHRvIGF2b2lkIGxpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoZXNlIGZ1bmN0aW9ucywgYHByaW50X2JwZl9pbnNuYCwgYW5kIGBicGZfdmVyYm9zZV9pbnNuYCwgYXJlIHByZXR0eSBzcGVjaWZpYyB0byBCUEYgZGlzYXNzZW1ibHkgYW5kIHZlcmlmaWVyIGxvZ2dpbmcsIHNvIHRoZXkgbWVldCB0aGUgY3JpdGVyaWEgZm9yIGEgdGFyZ2V0ZWQgZW50cnlwb2ludC4gVGhhdCYjMzk7cyBnb29kLgoKTmV4dCwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgRW5hYmxlQ29uZmlncy4gTGV0JiMzOTtzIHNlZS4uLiBZZXAsIGBCUEZfU1lTQ0FMTGAgaXMgcmVsZXZhbnQgaGVyZS4KCkZpbmFsbHksIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBteSByZWFzb25pbmcuIFRoZSBwYXRjaCBpbXBsZW1lbnRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgcHJpbnRfYnBmX2luc24oKWAgdG8gYWRkcmVzcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2l0aGluIGBicGZfbGRzeF9zdHJpbmdgIHdoZW4gZGVhbGluZyB3aXRoIHNpZ24tZXh0ZW5kZWQgNjQtYml0IGxvYWQgb3BlcmF0aW9ucyAoc3BlY2lmaWNhbGx5IGBCUEZfTUVNU1hgIHdpdGggYEJQRl9EV2ApLiBUaGlzIGNvZGUgaXMgY29yZSBCUEYsIGFuZCBpdCYjMzk7cyByZWFjaGVkIHZpYSBgYnBmKEJQRl9QUk9HX0xPQUQpYCBkdXJpbmcgdmVyaWZpY2F0aW9uL2xvZ2dpbmcuIFRoaXMgaXMgYWxsIHN0YW5kYXJkLgoKQWxyaWdodCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHJpbnRfYnBmX2luc24mIzM0OywKICAgICYjMzQ7YnBmX3ZlcmJvc2VfaW5zbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRhcnkvdmFsaWRpdHkgY2hlY2sgaW4gcHJpbnRfYnBmX2luc24oKSB3aXRoaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSB0byBoYW5kbGUgaW52YWxpZCBzaWduLWV4dGVuZGVkIDY0LWJpdCBsb2FkcyAoQlBGX01FTVNYIHdpdGggQlBGX0RXKSBhbmQgcHJldmVudCBhY2Nlc3NpbmcgdW5kZWZpbmVkIGFycmF5IGluZGljZXMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyBleGVjdXRlZCBkdXJpbmcgQlBGIHByb2dyYW0gdmVyaWZpY2F0aW9uIGFuZCBkaXNhc3NlbWJseSB2aWEgc3lzX2JwZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcmludF9icGZfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfdmVyYm9zZV9pbnNuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZGFyeS92YWxpZGl0eSBjaGVjayBpbiBwcmludF9icGZfaW5zbigpIHdpdGhpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRvIGhhbmRsZSBpbnZhbGlkIHNpZ24tZXh0ZW5kZWQgNjQtYml0IGxvYWRzIChCUEZfTUVNU1ggd2l0aCBCUEZfRFcpIGFuZCBwcmV2ZW50IGFjY2Vzc2luZyB1bmRlZmluZWQgYXJyYXkgaW5kaWNlcy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUga2VybmVsIGxvZ2ljIGV4ZWN1dGVkIGR1cmluZyBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24gYW5kIGRpc2Fzc2VtYmx5IHZpYSBzeXNfYnBmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcHJldmVudHMgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSByZWFkIGluIGtlcm5lbC9icGYvZGlzYXNtLmMgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIEJQRl9MRFggaW5zdHJ1Y3Rpb25zIHdpdGggQlBGX01FTVNYIG1vZGUgYW5kIEJQRl9EVyBzaXplIGJlZm9yZSBpbmRleGluZyBpbnRvIGJwZl9sZHN4X3N0cmluZ1tdLiBTaW5jZSBicGZfbGRzeF9zdHJpbmcgb25seSBkZWZpbmVzIGVudHJpZXMgZm9yIEJQRl9CLCBCUEZfSCwgYW5kIEJQRl9XIChpbmRpY2VzIDAuLjIpLCBpbmRleGluZyB3aXRoIEJQRl9EVyAoaW5kZXggMykgcmVzdWx0ZWQgaW4gYSBnbG9iYWwtb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEdsb2JhbCBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBwb3RlbnRpYWwgTlVMTCBkZXJlZmVyZW5jZXMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGRhdGEgcHJvcGFnYXRpb24uIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjFkNDM0OTU5OTYxNjJjYWVmOWU5NzhlMTczYjA4ZGNmMDdmZTYzMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMTk6NTk6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Rpc2FzbS5jIGIva2VybmVsL2JwZi9kaXNhc20uYwppbmRleCA1MGIzY2E1MTQ5YTBhLi43MGMyYjI4MWNmZTk0IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2Rpc2FzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZGlzYXNtLmMKQEAgLTI5OSw2ICYjNDM7Mjk5LDEwIEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLAogCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDtCVUdfbGR4XyUwMngmIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiAJCQlyZXR1cm47CiAJCX0KJiM0MzsJCWlmIChCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfTUVNU1ggJmFtcDsmYW1wOyBCUEZfU0laRShpbnNuLSZndDtjb2RlKSA9PSBCUEZfRFcpIHsKJiM0MzsJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0O0JVR19sZHN4XyUwMngmIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQogCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSByJWQgPSAqKCVzICopKHIlZCAlJiM0MztkKSYjMzQ7LAogCQkJaW5zbi0mZ3Q7Y29kZSwgaW5zbi0mZ3Q7ZHN0X3JlZywKIAkJCUJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9NRU0gPwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXNzZWN0aW5nIHRoZSBCUEYgRGlzYXNzZW1ibHkgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIHNwZWNpZmljIGNoYW5nZSBhbmQgdGhlIGNvZGUgYXJvdW5kIGl0IGluIGBrZXJuZWwvYnBmL2Rpc2FzbS5jYC4gVGhlIGRpZmYgaXRzZWxmIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDsgaXQmIzM5O3MgYWRkaW5nIGEgbmV3IGNoZWNrLiBJIHF1aWNrbHkgemVybyBpbiBvbiB0aGUgYWRkZWQgYGlmYCBzdGF0ZW1lbnQuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgYnVnIGluIHRoZSBkaXNhc3NlbWJsZXIsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBCUEZfTUVNU1hgIGluc3RydWN0aW9ucyB3aXRoIGEgYEJQRl9EV2Agc2l6ZS4gVGhlIGNvbW1lbnQgJiMzNDtCVUdfbGRzeF8lMDJ4JiMzNDsgc3VnZ2VzdHMgYW4gZXJyb3IgY29uZGl0aW9uIGlzIGJlaW5nIGlkZW50aWZpZWQsIHByb2JhYmx5IHJlbGF0ZWQgdG8gc2lnbiBleHRlbnNpb24gZHVyaW5nIG1lbW9yeSBsb2FkIG9wZXJhdGlvbnMuCgpNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBpcyBndWFyZGluZyBhZ2FpbnN0IGFuIHVuZGVmaW5lZCBiZWhhdmlvci4gVGhpcyBhZGRpdGlvbmFsIGNoZWNrIGlzIGxpa2VseSBhaW1lZCBhdCBwcmV2ZW50aW5nIGNyYXNoZXMgb3IgaW5jb3JyZWN0IGludGVycHJldGF0aW9ucyB3aGVuIGhhbmRsaW5nIGNlcnRhaW4gQlBGIGluc3RydWN0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGUgYWRkZWQgY2hlY2sgYWRkcmVzc2VzIGBCUEZfTUVNU1hgIG1vZGUgd2l0aCBhIGRvdWJsZS13b3JkIHNpemUuIFRoZSBmb3JtYXR0aW5nIG9mIHRoZSBgdmVyYm9zZWAgY2FsbCBpcyBjb25zaXN0ZW50IHdpdGggZXhpc3RpbmcgZGVidWdnaW5nIG91dHB1dHMsIHNvIHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGFkZGl0aW9uIGZvciBlcnJvciByZXBvcnRpbmcgZHVyaW5nIGRpc2Fzc2VtYmx5LiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTtkIHNheSB0aGlzIGlzIGEgZGVmZW5zaXZlIG1lYXN1cmUgdG8gZW5zdXJlIHRoZSBkaXNhc3NlbWJsZXIgaXMgcm9idXN0IHdoZW4gZmFjaW5nIHRoZXNlIHR5cGVzIG9mIG1lbW9yeSBsb2FkIGluc3RydWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Rpc2FzbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzA6XHRcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4gMjcxOlx0XHRcdFx0ICAgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRKSB7XG4gMjcyOlx0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gbG9hZF9hY3F1aXJlKCglcyAqKShyJWQgJSYjNDM7ZCkpXCYjMzQ7LFxuIDI3MzpcdFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZWRzdF9yZWcsXG4gMjc0Olx0XHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gMjc1Olx0XHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlb2ZmKTtcbiAyNzY6XHRcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4gMjc3Olx0XHRcdFx0ICAgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX1NUT1JFX1JFTCkge1xuIDI3ODpcdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHN0b3JlX3JlbGVhc2UoKCVzICopKHIlZCAlJiM0MztkKSwgciVkKVwmIzM0OyxcbiAyNzk6XHRcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiAyODA6XHRcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbiAyODE6XHRcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYsIGluc24tXHUwMDNlc3JjX3JlZyk7XG4gMjgyOlx0XHRcdH0gZWxzZSB7XG4gMjgzOlx0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDtCVUdfJTAyeFwmIzM0OywgaW5zbi1cdTAwM2Vjb2RlKTtcbiAyODQ6XHRcdFx0fVxuIDI4NTpcdFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfU1QpIHtcbiAyODY6XHRcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX01FTSkge1xuIDI4NzpcdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpICooJXMgKikociVkICUmIzQzO2QpID0gJWRcJiMzNDssXG4gMjg4Olx0XHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gMjg5Olx0XHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gMjkwOlx0XHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsXG4gMjkxOlx0XHRcdFx0XHRpbnNuLVx1MDAzZW9mZiwgaW5zbi1cdTAwM2VpbW0pO1xuIDI5MjpcdFx0XHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gMHhjMCAvKiBCUEZfTk9TUEVDLCBubyBVQVBJICovKSB7XG4gMjkzOlx0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgbm9zcGVjXCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuIDI5NDpcdFx0XHR9IGVsc2Uge1xuIDI5NTpcdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHX3N0XyUwMnhcJiMzNDssIGluc24tXHUwMDNlY29kZSk7XG4gMjk2Olx0XHRcdH1cbiAyOTc6XHRcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEWCkge1xuIDI5ODpcdFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTUVNIFx1MDAyNlx1MDAyNiBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9NRU1TWCkge1xuIDI5OTpcdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHX2xkeF8lMDJ4XCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuIDMwMDpcdFx0XHRcdHJldHVybjtcbiAzMDE6XHRcdFx0fVxuIDMwMjpcdFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNU1ggXHUwMDI2XHUwMDI2IEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0RXKSB7XG4gMzAzOlx0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDtCVUdfbGRzeF8lMDJ4XCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuIDMwNDpcdFx0XHRcdHJldHVybjtcbiAzMDU6XHRcdFx0fVxuIDMwNjpcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSAqKCVzICopKHIlZCAlJiM0MztkKVwmIzM0OyxcbiAzMDc6XHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiAzMDg6XHRcdFx0XHRCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU0gP1xuIDMwOTpcdFx0XHRcdFx0IGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSA6XG4gMzEwOlx0XHRcdFx0XHQgYnBmX2xkc3hfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIDMxMTpcdFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuIDMxMjpcdFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfTEQpIHtcbiAzMTM6XHRcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FCUykge1xuIDMxNDpcdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYlslZF1cJiMzNDssXG4gMzE1Olx0XHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gMzE2Olx0XHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gMzE3Olx0XHRcdFx0XHRpbnNuLVx1MDAzZWltbSk7XG4gMzE4Olx0XHRcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSU5EKSB7XG4gMzE5Olx0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgcjAgPSAqKCVzICopc2tiW3IlZCAmIzQzOyAlZF1cJiMzNDssXG4gMzIwOlx0XHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gMzIxOlx0XHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gMzIyOlx0XHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlaW1tKTtcbiAzMjM6XHRcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9JTU0gXHUwMDI2XHUwMDI2XG4gMzI0Olx0XHRcdFx0ICAgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfRFcpIHtcbiAzMjU6XHRcdFx0XHQvKiBBdCB0aGlzIHBvaW50LCB3ZSBhbHJlYWR5IG1hZGUgc3VyZSB0aGF0IHRoZSBzZWNvbmRcbiAzMjY6XHRcdFx0XHQgKiBwYXJ0IG9mIHRoZSBsZGltbTY0IGluc24gaXMgYWNjZXNzaWJsZS5cbiAzMjc6XHRcdFx0XHQgKi9cbiAzMjg6XHRcdFx0XHR1NjQgaW1tID0gKCh1NjQpKGluc24gJiM0MzsgMSktXHUwMDNlaW1tIFx1MDAzY1x1MDAzYyAzMikgfCAodTMyKWluc24tXHUwMDNlaW1tO1xuIDMyOTpcdFx0XHRcdGJvb2wgaXNfcHRyID0gaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fTUFQX0ZEIHx8XG4gMzMwOlx0XHRcdFx0XHQgICAgICBpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19NQVBfVkFMVUUgfHxcbiAzMzE6XHRcdFx0XHRcdCAgICAgIGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9JRFggfHxcbiAzMzI6XHRcdFx0XHRcdCAgICAgIGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9JRFhfVkFMVUUgfHxcbiAzMzM6XHRcdFx0XHRcdCAgICAgIGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0JURl9JRDtcbiAzMzQ6XHRcdFx0XHRjaGFyIHRtcFs2NF07XG4gMzM1Olx0XG4gMzM2Olx0XHRcdFx0aWYgKGlzX3B0ciBcdTAwMjZcdTAwMjYgIWFsbG93X3B0cl9sZWFrcylcbiAzMzc6XHRcdFx0XHRcdGltbSA9IDA7XG4gMzM4Olx0XG4gMzM5Olx0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gJXNcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MzkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIEJQRiBEaXNhc3NlbWJseSBGdW5jdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgYnBmX2xkc3hfc3RyaW5nYCBsaXZlcyBpbiB0aGUga2VybmVsJiMzOTtzIEJQRiBkaXNhc3NlbWJseSBjb2RlLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgYGtlcm5lbC9icGYvZGlzYXNtLmNgLiBUaGF0IGZpbGUgaXMgdGhlIG1vc3QgbGlrZWx5IGxvY2F0aW9uIGZvciB0aGF0IHR5cGUgb2YgZnVuY3Rpb24sIGVzcGVjaWFsbHkgZ2l2ZW4gaXRzIG5hbWUuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbiB0aGVyZSBhbmQgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhlIGRlZmluaXRpb24uIEl0IHdpbGwgYmUgaGVscGZ1bCB0byBzZWUgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZCB0b28uIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29tcGlsYXRpb24gZmxhZ3MgSSBzaG91bGQgbG9vayBvdXQgZm9yLCBvciBwZXJoYXBzIGlmIHRoZXJlIGFyZSBhbnkgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucy4gSSB3aWxsIHN0YXJ0IGJ5IGZpbmRpbmcgdGhlIGRlZmluaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9kaXNhc20uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbiAgIDI6XHQvKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxNCBQTFVNZ3JpZCwgaHR0cDovL3BsdW1ncmlkLmNvbVxuICAgMzpcdCAqIENvcHlyaWdodCAoYykgMjAxNiBGYWNlYm9va1xuICAgNDpcdCAqL1xuICAgNTpcdFxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4gICA3Olx0XG4gICA4Olx0I2luY2x1ZGUgXCYjMzQ7ZGlzYXNtLmhcJiMzNDtcbiAgIDk6XHRcbiAgMTA6XHQjZGVmaW5lIF9fQlBGX0ZVTkNfU1RSX0ZOKHgpIFtCUEZfRlVOQ18gIyMgeF0gPSBfX3N0cmluZ2lmeShicGZfICMjIHgpXG4gIDExOlx0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmdW5jX2lkX3N0cltdID0ge1xuICAxMjpcdFx0X19CUEZfRlVOQ19NQVBQRVIoX19CUEZfRlVOQ19TVFJfRk4pXG4gIDEzOlx0fTtcbiAgMTQ6XHQjdW5kZWYgX19CUEZfRlVOQ19TVFJfRk5cbiAgMTU6XHRcbiAgMTY6XHRzdGF0aWMgY29uc3QgY2hhciAqX19mdW5jX2dldF9uYW1lKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiAgMTc6XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiAgMTg6XHRcdFx0XHRcdCAgIGNoYXIgKmJ1ZmYsIHNpemVfdCBsZW4pXG4gIDE5Olx0e1xuICAyMDpcdFx0QlVJTERfQlVHX09OKEFSUkFZX1NJWkUoZnVuY19pZF9zdHIpICE9IF9fQlBGX0ZVTkNfTUFYX0lEKTtcbiAgMjE6XHRcbiAgMjI6XHRcdGlmICghaW5zbi1cdTAwM2VzcmNfcmVnIFx1MDAyNlx1MDAyNlxuICAyMzpcdFx0ICAgIGluc24tXHUwMDNlaW1tIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VpbW0gXHUwMDNjIF9fQlBGX0ZVTkNfTUFYX0lEIFx1MDAyNlx1MDAyNlxuICAyNDpcdFx0ICAgIGZ1bmNfaWRfc3RyW2luc24tXHUwMDNlaW1tXSlcbiAgMjU6XHRcdFx0cmV0dXJuIGZ1bmNfaWRfc3RyW2luc24tXHUwMDNlaW1tXTtcbiAgMjY6XHRcbiAgMjc6XHRcdGlmIChjYnMgXHUwMDI2XHUwMDI2IGNicy1cdTAwM2VjYl9jYWxsKSB7XG4gIDI4Olx0XHRcdGNvbnN0IGNoYXIgKnJlcztcbiAgMjk6XHRcbiAgMzA6XHRcdFx0cmVzID0gY2JzLVx1MDAzZWNiX2NhbGwoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgaW5zbik7XG4gIDMxOlx0XHRcdGlmIChyZXMpXG4gIDMyOlx0XHRcdFx0cmV0dXJuIHJlcztcbiAgMzM6XHRcdH1cbiAgMzQ6XHRcbiAgMzU6XHRcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19DQUxMKVxuICAzNjpcdFx0XHRzbnByaW50ZihidWZmLCBsZW4sIFwmIzM0OyUmIzQzO2RcJiMzNDssIGluc24tXHUwMDNlaW1tKTtcbiAgMzc6XHRcdGVsc2UgaWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpXG4gIDM4Olx0XHRcdHNucHJpbnRmKGJ1ZmYsIGxlbiwgXCYjMzQ7a2VybmVsLWZ1bmN0aW9uXCYjMzQ7KTtcbiAgMzk6XHRcbiAgNDA6XHRcdHJldHVybiBidWZmO1xuICA0MTpcdH1cbiAgNDI6XHRcbiAgNDM6XHRzdGF0aWMgY29uc3QgY2hhciAqX19mdW5jX2ltbV9uYW1lKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiAgNDQ6XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiAgNDU6XHRcdFx0XHRcdCAgIHU2NCBmdWxsX2ltbSwgY2hhciAqYnVmZiwgc2l6ZV90IGxlbilcbiAgNDY6XHR7XG4gIDQ3Olx0XHRpZiAoY2JzIFx1MDAyNlx1MDAyNiBjYnMtXHUwMDNlY2JfaW1tKVxuICA0ODpcdFx0XHRyZXR1cm4gY2JzLVx1MDAzZWNiX2ltbShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBpbnNuLCBmdWxsX2ltbSk7XG4gIDQ5Olx0XG4gIDUwOlx0XHRzbnByaW50ZihidWZmLCBsZW4sIFwmIzM0OzB4JWxseFwmIzM0OywgKHVuc2lnbmVkIGxvbmcgbG9uZylmdWxsX2ltbSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NzcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkh1bnRpbmcgRG93biBgYnBmX2xkc3hfc3RyaW5nYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGJwZl9sZHN4X3N0cmluZ2AuIFRoaXMgbWVhbnMgSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBpbiBgZGlzYXNtLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRpc2Fzc2VtYmx5LXJlbGF0ZWQgY29kZSwgYW5kIGl0JiMzOTtzIGEgcHJldHR5IGdvb2QgYmV0IHRoYXQgYW55IGxvZ2ljIHNwZWNpZmljIHRvIHN0cmluZy1yZWxhdGVkIEJQRiBpbnN0cnVjdGlvbnMgd291bGQgcmVzaWRlIHRoZXJlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgYGRpc2FzbS5jYCByZXZlYWxzLiBIb3BlZnVsbHksIHRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiB3aWxsIGJlIGEgZGVhZCBnaXZlYXdheSwgYnV0IEkmIzM5O2xsIGJlIHJlYWR5IHRvIGxvb2sgZm9yIHJlbGF0ZWQgbG9naWMgaWYgaXQmIzM5O3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfbGRzeF9zdHJpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9kaXNhc20uYz0xMDg9c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGJwZl9sZHN0X3N0cmluZ1tdID0ge1xuLS1cbmtlcm5lbC9icGYvZGlzYXNtLmMtMTE0LVxua2VybmVsL2JwZi9kaXNhc20uYzoxMTU6c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGJwZl9sZHN4X3N0cmluZ1tdID0ge1xua2VybmVsL2JwZi9kaXNhc20uYy0xMTYtXHRbQlBGX1cgXHUwMDNlXHUwMDNlIDNdICA9IFwmIzM0O3MzMlwmIzM0Oyxcbi0tXG5rZXJuZWwvYnBmL2Rpc2FzbS5jPTE4Nj12b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbi0tXG5rZXJuZWwvYnBmL2Rpc2FzbS5jLTMwOS1cdFx0XHRcdCBicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10gOlxua2VybmVsL2JwZi9kaXNhc20uYzozMTA6XHRcdFx0XHQgYnBmX2xkc3hfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxua2VybmVsL2JwZi9kaXNhc20uYy0zMTEtXHRcdFx0aW5zbi1cdTAwM2VzcmNfcmVnLCBpbnNuLVx1MDAzZW9mZik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NDgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGBrZXJuZWwvYnBmL2Rpc2FzbS5jYCwga2VlcGluZyBpbiBtaW5kIG15IG93biBkZWVwIGtub3dsZWRnZSBvZiBCUEY6CgoqKkRpc3NlY3RpbmcgdGhlIEJQRiBEaXNhc3NlbWJseSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGxpbmVzIDEwNS0xMzAgb2YgYGtlcm5lbC9icGYvZGlzYXNtLmNgLiBNeSBpbml0aWFsIGFzc3VtcHRpb24sIGdpdmVuIHRoZSBjb250ZXh0LCBpcyB0aGF0IHRoaXMgc2VjdGlvbiBmb2N1c2VzIG9uIGEgc3BlY2lmaWMgYXNwZWN0IG9mIHRoZSBCUEYgZGlzYXNzZW1ibHkgcHJvY2VzcywgcHJvYmFibHkgcmVsYXRlZCB0byBpbnN0cnVjdGlvbiBkZWNvZGluZyBvciBvdXRwdXQgZm9ybWF0dGluZy4gSSYjMzk7bSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBrZXkgZnVuY3Rpb24gY2FsbHMgb3IgdmFyaWFibGVzIHRoYXQgaGludCBhdCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgc29tZXRoaW5nIHRoYXQgYnJpZGdlcyB0aGUgZ2FwIGJldHdlZW4gdGhlIHJhdyBpbnN0cnVjdGlvbiBiaXRzIGFuZCBhIGh1bWFuLXJlYWRhYmxlIHJlcHJlc2VudGF0aW9uLgoKSSB3YW50IHRvIGtub3cgaWYgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhpbmdzIGxpa2UgaW5zdHJ1Y3Rpb24gcHJlZml4ZXMsIGFkZHJlc3NpbmcgbW9kZXMsIG9yIG1heWJlIGV2ZW4gb3BlcmFuZCBkZWNvZGluZyBpbiB0aGlzIGNodW5rLiBBcmUgdGhleSB1c2luZyBhIGxvb2t1cCB0YWJsZSBmb3Igb3Bjb2RlIG1uZW1vbmljcz8gQXJlIHRoZXJlIGNhbGxzIHRvIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBwcmludGluZyBvZiBzb3VyY2UvZGVzdGluYXRpb24gcmVnaXN0ZXJzPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGxvZ2ljIGNvbnRyb2xsaW5nIGluc3RydWN0aW9uIHJlcHJlc2VudGF0aW9uIG91dHB1dC4gSWYgdGhlcmUmIzM5O3MgYW4gYWR2YW5jZWQgZmVhdHVyZSBsaWtlIEpJVCBvcHRpbWl6YXRpb24sIHRoaXMgaXMgcHJvYmFibHkgd2hlcmUgaXTigJlzIGhhbmRsZWQuCgpJJiMzOTtsbCBiZSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55IG9wdGltaXphdGlvbnMgdGhlIGRldmVsb3BlciBtaWdodCBoYXZlIGltcGxlbWVudGVkIHRoYXQgSSYjMzk7bSBhd2FyZSBvZiBvciBtaWdodCB3YW50IHRvIGxldmVyYWdlLCBmb3IgdGhlIHdvcmsgdGhhdCBJJiMzOTttIGRvaW5nLiBGcm9tIHRoaXMsIEkmIzM5O2xsIGFzc2VzcyB3aGV0aGVyIGl0IGRvZXMgYSBnb29kIGpvYiBvZiBwcm9wZXJseSBoYW5kbGluZyBhbGwgdGhlIGluc3RydWN0aW9uIHByZWZpeGVzLCBhZGRyZXNzaW5nIG1vZGVzLCBhbmQgYW55IG1vcmUgYWR2YW5jZWQgZmVhdHVyZXMgdGhlIHByb2dyYW0gbWF5IGJlIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZGlzYXNtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwNTpcdFx0W0JQRl9YT1IgXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0O3hvclwmIzM0OyxcbiAxMDY6XHR9O1xuIDEwNzpcdFxuIDEwODpcdHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBicGZfbGRzdF9zdHJpbmdbXSA9IHtcbiAxMDk6XHRcdFtCUEZfVyBcdTAwM2VcdTAwM2UgM10gID0gXCYjMzQ7dTMyXCYjMzQ7LFxuIDExMDpcdFx0W0JQRl9IIFx1MDAzZVx1MDAzZSAzXSAgPSBcJiMzNDt1MTZcJiMzNDssXG4gMTExOlx0XHRbQlBGX0IgXHUwMDNlXHUwMDNlIDNdICA9IFwmIzM0O3U4XCYjMzQ7LFxuIDExMjpcdFx0W0JQRl9EVyBcdTAwM2VcdTAwM2UgM10gPSBcJiMzNDt1NjRcJiMzNDssXG4gMTEzOlx0fTtcbiAxMTQ6XHRcbiAxMTU6XHRzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYnBmX2xkc3hfc3RyaW5nW10gPSB7XG4gMTE2Olx0XHRbQlBGX1cgXHUwMDNlXHUwMDNlIDNdICA9IFwmIzM0O3MzMlwmIzM0OyxcbiAxMTc6XHRcdFtCUEZfSCBcdTAwM2VcdTAwM2UgM10gID0gXCYjMzQ7czE2XCYjMzQ7LFxuIDExODpcdFx0W0JQRl9CIFx1MDAzZVx1MDAzZSAzXSAgPSBcJiMzNDtzOFwmIzM0OyxcbiAxMTk6XHR9O1xuIDEyMDpcdFxuIDEyMTpcdHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBicGZfam1wX3N0cmluZ1sxNl0gPSB7XG4gMTIyOlx0XHRbQlBGX0pBIFx1MDAzZVx1MDAzZSA0XSAgID0gXCYjMzQ7am1wXCYjMzQ7LFxuIDEyMzpcdFx0W0JQRl9KRVEgXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0Oz09XCYjMzQ7LFxuIDEyNDpcdFx0W0JQRl9KR1QgXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0O1x1MDAzZVwmIzM0OyxcbiAxMjU6XHRcdFtCUEZfSkxUIFx1MDAzZVx1MDAzZSA0XSAgPSBcJiMzNDtcdTAwM2NcJiMzNDssXG4gMTI2Olx0XHRbQlBGX0pHRSBcdTAwM2VcdTAwM2UgNF0gID0gXCYjMzQ7XHUwMDNlPVwmIzM0OyxcbiAxMjc6XHRcdFtCUEZfSkxFIFx1MDAzZVx1MDAzZSA0XSAgPSBcJiMzNDtcdTAwM2M9XCYjMzQ7LFxuIDEyODpcdFx0W0JQRl9KU0VUIFx1MDAzZVx1MDAzZSA0XSA9IFwmIzM0O1x1MDAyNlwmIzM0OyxcbiAxMjk6XHRcdFtCUEZfSk5FIFx1MDAzZVx1MDAzZSA0XSAgPSBcJiMzNDshPVwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc4NwoJCQkJCQkJb3V0cHV0OiAyMDIKCQkJCQkJCXRob3VnaHRzOiAxMzE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEJQRiBEaXNhc3NlbWJseSBQYXRjaCBmb3IgS0FTQU4gSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgYnJhaW4mIzM5O3MgZ29pbmcgdG8gdGhlIEJQRiBpbnN0cnVjdGlvbiBkaXNhc3NlbWJseSBsb2dpYy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgYnBmX2xkc3hfc3RyaW5nYCBhcnJheS4gSSBzZWUgaXQgZGVmaW5lcyBzdHJpbmcgcmVwcmVzZW50YXRpb25zIGZvciBzaWduZWQgOC1iaXQsIDE2LWJpdCwgYW5kIDMyLWJpdCBsb2Fkcy4gQnV0IHdhaXQgYSBtaW51dGUuLi4gd2hlcmUmIzM5O3MgdGhlIGVudHJ5IGZvciBhIDY0LWJpdCBkb3VibGUtd29yZCAoYEJQRl9EV2ApIGxvYWQ/IFRoZSBjb2RlIGNsZWFybHkgaW1wbGllcyB0aGF0IHRoZSBhcnJheSBpcyBpbmRleGVkIGJ5IHRoZSBzaXplLCBzaGlmdGVkIHJpZ2h0IGJ5IDMgYml0cy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgc2l6ZXMgYXJlIHdoYXQgSSBleHBlY3QgdGhlbSB0byBiZSAtIGNoZWNraW5nIEJQRiBzaXplcyBjb25maXJtcyB0aGF0IEJQRl9XIGlzIDB4MDAsIEJQRl9IIGlzIDB4MDgsIEJQRl9CIGlzIDB4MTAgYW5kIEJQRl9EVyBpcyAweDE4LCBjb25maXJtaW5nIHRoYXQgQlBGX0RXICZndDsmZ3Q7IDMgaXMgaW5kZWVkIDMuIFRoaXMgYGJwZl9sZHN4X3N0cmluZ2AgYXJyYXkgaGFzIGEgbWF4aW11bSBpbmRleCBvZiAyLiBTbywgYW55IGF0dGVtcHQgdG8gYWNjZXNzIGBicGZfbGRzeF9zdHJpbmdbM11gIHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzISBUaGF0JiMzOTtzIGEgY2xhc3NpYyBnbG9iYWwgYXJyYXkgb3V0LW9mLWJvdW5kcyByZWFkLiBUaGlzIGlzIGEgYmlnIHJlZCBmbGFnIOKAkyBhbnkgYWNjZXNzIHRvIGBicGZfbGRzeF9zdHJpbmdbM11gIHdvdWxkIGJlIG91dCBvZiB0aGUgYXJyYXkmIzM5O3MgZGVmaW5lZCBib3VuZHMuCgpOb3csIHByZXZpb3VzbHksIHRoZSBjb2RlIHdvdWxkIGZhbGwgdGhyb3VnaCB0byB0aGUgdmVyYm9zZSBvdXRwdXQgY29kZSwgYXR0ZW1wdGluZyB0byBwcmludCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgaW5zdHJ1Y3Rpb24sIGluY2x1ZGluZyB0aGlzIGBicGZfbGRzeF9zdHJpbmdgLiBUaHVzLCB0aGUgb3V0LW9mLWJvdW5kcyByZWFkIG9yIE5VTEwgZGVyZWZlcmVuY2Ugd2FzIG9jY3VycmluZy4KClRoZSBwYXRjaCYjMzk7cyBpbnRlbnQgaXMgY2xlYXI6IGl0IGFkZHMgYSBjb25kaXRpb25hbCBjaGVjayB0byBwcmV2ZW50IHRoaXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEl0JiMzOTtzIGVzc2VudGlhbGx5IHNob3J0LWNpcmN1aXRpbmcgdGhlIGZhdWx0eSBpbmRleGluZyBieSBhZGRpbmcgYW4gZWFybHkgcmV0dXJuIGlmIHRoZSBpbnN0cnVjdGlvbiBpcyBgQlBGX0xEWGAgd2l0aCBgQlBGX01FTVNYYCBtb2RlIGFuZCBgQlBGX0RXYCBzaXplLCB0aHVzIHByZXZlbnRpbmcgdGhlIGJhZCBhY2Nlc3MuIEl0IGludHJvZHVjZXMgYSBtZXNzYWdlLCBpbmRpY2F0aW5nIHRoYXQgdGhlIGRldmVsb3BlciBoYXMgaWRlbnRpZmllZCBhIGJ1ZyByZWxhdGVkIHRvIGBCUEZfRFdgLgoKU28sIHRoZSBrZXkgcXVlc3Rpb24gZm9yIG1lIGlzOiBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IHNhZmV0eSByaXNrcywgKmVzcGVjaWFsbHkqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzPyBBZnRlciBjYXJlZnVsbHkgcmV2aWV3aW5nIHRoZSBjb2RlLCB0aGUgYW5zd2VyIGlzIGEgZmlybSAmIzM0O25vLiYjMzQ7IFRoaXMgcGF0Y2ggb25seSBhZGRyZXNzZXMgKmV4aXN0aW5nKiBtZW1vcnkgY29ycnVwdGlvbi4gVGhlcmUmIzM5O3Mgbm8gbmV3IGFsbG9jYXRpb24sIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBmaWVsZHMsIG5vIGBjb3B5X3RvX3VzZXJgLCBubyBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZSBidWcgaXMgYSBzdHJhaWdodGZvcndhcmQgb3V0LW9mLWJvdW5kcyByZWFkIG9mIGEgY29uc3RhbnQgc3RyaW5nIGFycmF5IChvciBOVUxMIGRlcmVmZXJlbmNlKSwgd2hpY2ggS0FTQU4gd291bGQgaW1tZWRpYXRlbHkgY2F0Y2guCgpJJiMzOTttIGNvbmZpZGVudCB0aGF0IEtBU0FOIGFscmVhZHkgY292ZXJzIHRoaXMgbWVtb3J5IHNhZmV0eSBidWcuIFRoZSBwYXRjaCBkaXJlY3RseSBhZGRyZXNzZXMgYSAqZ2xvYmFsKiBvdXQtb2YtYm91bmRzIHJlYWQuIEkmIzM5O20gbm90IHNlZWluZyBhbnkgbmV3IEtNU0FOLXNwZWNpZmljIGNvbmNlcm5zIGhlcmUuIFRoZSBgcHJpbnRfYnBmX2luc25gIGZ1bmN0aW9uIGl0c2VsZiB0YWtlcyBhIGBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc25gLCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhpcyBtYXRjaGVzIHRoZSBlc3RhYmxpc2hlZCBjcml0ZXJpYS4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCB3YXJyYW50IGEgYE5lZWRzS01TQU4gPSB0cnVlYC4gVGhpcyBpcyBhIGNsZWFyIGNhc2Ugb2YgJiMzNDtLQVNBTiBhbHJlYWR5IGNvdmVycyB0aGlzLiYjMzQ7IFRoZSBwYXRjaCBpcyBhY3R1YWxseSAqZml4aW5nKiBhIEtBU0FOLWRldGVjdGFibGUgYnVnLgoKT2theSwgbGV0JiMzOTtzIGZvcm11bGF0ZSBteSByZWFzb25pbmc6IFRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gYHByaW50X2JwZl9pbnNuKClgIHRoYXQgb2NjdXJzIHdoZW4gZW5jb3VudGVyaW5nIGBCUEZfTERYYCBpbnN0cnVjdGlvbnMgd2l0aCBgQlBGX01FTVNYYCBtb2RlIGFuZCBgQlBGX0RXYCBzaXplLiBUaGlzIG91dC1vZi1ib3VuZHMgcmVhZCBpcyBhIGRpcmVjdCBjb25zZXF1ZW5jZSBvZiBpbmRleGluZyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIGBicGZfbGRzeF9zdHJpbmdbXWAgYXJyYXksIGEgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSBpc3N1ZSB0aGF0IEtBU0FOIChzcGVjaWZpY2FsbHkgZ2xvYmFsIG91dC1vZi1ib3VuZHMpIGVmZmVjdGl2ZWx5IGRldGVjdHMuIFRoZSBwYXRjaCBvbmx5ICpmaXhlcyogdGhpcyBidWcgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBoZWFwIGNvcnJ1cHRpb24sIGluZm9ybWF0aW9uIGxlYWtzLCBvciBhbnkgb3RoZXIga2luZCBvZiBLTVNBTi1zcGVjaWZpYyBpc3N1ZS4gVGh1cywgYE5lZWRzS01TQU4gPSBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByZXZlbnRzIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgcmVhZCBpbiBrZXJuZWwvYnBmL2Rpc2FzbS5jIGJ5IGFkZGluZyBhIGNoZWNrIGZvciBCUEZfTERYIGluc3RydWN0aW9ucyB3aXRoIEJQRl9NRU1TWCBtb2RlIGFuZCBCUEZfRFcgc2l6ZSBiZWZvcmUgaW5kZXhpbmcgaW50byBicGZfbGRzeF9zdHJpbmdbXS4gU2luY2UgYnBmX2xkc3hfc3RyaW5nIG9ubHkgZGVmaW5lcyBlbnRyaWVzIGZvciBCUEZfQiwgQlBGX0gsIGFuZCBCUEZfVyAoaW5kaWNlcyAwLi4yKSwgaW5kZXhpbmcgd2l0aCBCUEZfRFcgKGluZGV4IDMpIHJlc3VsdGVkIGluIGEgZ2xvYmFsLW91dC1vZi1ib3VuZHMgYWNjZXNzLiBHbG9iYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgcG90ZW50aWFsIE5VTEwgZGVyZWZlcmVuY2VzIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcywgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBkYXRhIHByb3BhZ2F0aW9uLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByZXZlbnRzIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgcmVhZCBpbiBrZXJuZWwvYnBmL2Rpc2FzbS5jIGJ5IGFkZGluZyBhIGNoZWNrIGZvciBCUEZfTERYIGluc3RydWN0aW9ucyB3aXRoIEJQRl9NRU1TWCBtb2RlIGFuZCBCUEZfRFcgc2l6ZSBiZWZvcmUgaW5kZXhpbmcgaW50byBicGZfbGRzeF9zdHJpbmdbXS4gU2luY2UgYnBmX2xkc3hfc3RyaW5nIG9ubHkgZGVmaW5lcyBlbnRyaWVzIGZvciBCUEZfQiwgQlBGX0gsIGFuZCBCUEZfVyAoaW5kaWNlcyAwLi4yKSwgaW5kZXhpbmcgd2l0aCBCUEZfRFcgKGluZGV4IDMpIHJlc3VsdGVkIGluIGEgZ2xvYmFsLW91dC1vZi1ib3VuZHMgYWNjZXNzLiBHbG9iYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgcG90ZW50aWFsIE5VTEwgZGVyZWZlcmVuY2VzIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcywgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBkYXRhIHByb3BhZ2F0aW9uLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6NTk6MjYuOTU2NzUzMTgxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg2MzY1MjMyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcmludF9icGZfaW5zblwiLFxuICAgIFwiYnBmX3ZlcmJvc2VfaW5zblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcHJldmVudHMgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSByZWFkIGluIGtlcm5lbC9icGYvZGlzYXNtLmMgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIEJQRl9MRFggaW5zdHJ1Y3Rpb25zIHdpdGggQlBGX01FTVNYIG1vZGUgYW5kIEJQRl9EVyBzaXplIGJlZm9yZSBpbmRleGluZyBpbnRvIGJwZl9sZHN4X3N0cmluZ1tdLiBTaW5jZSBicGZfbGRzeF9zdHJpbmcgb25seSBkZWZpbmVzIGVudHJpZXMgZm9yIEJQRl9CLCBCUEZfSCwgYW5kIEJQRl9XIChpbmRpY2VzIDAuLjIpLCBpbmRleGluZyB3aXRoIEJQRl9EVyAoaW5kZXggMykgcmVzdWx0ZWQgaW4gYSBnbG9iYWwtb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEdsb2JhbCBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBwb3RlbnRpYWwgTlVMTCBkZXJlZmVyZW5jZXMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGRhdGEgcHJvcGFnYXRpb24uIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZGFyeS92YWxpZGl0eSBjaGVjayBpbiBwcmludF9icGZfaW5zbigpIHdpdGhpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRvIGhhbmRsZSBpbnZhbGlkIHNpZ24tZXh0ZW5kZWQgNjQtYml0IGxvYWRzIChCUEZfTUVNU1ggd2l0aCBCUEZfRFcpIGFuZCBwcmV2ZW50IGFjY2Vzc2luZyB1bmRlZmluZWQgYXJyYXkgaW5kaWNlcy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUga2VybmVsIGxvZ2ljIGV4ZWN1dGVkIGR1cmluZyBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24gYW5kIGRpc2Fzc2VtYmx5IHZpYSBzeXNfYnBmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTo1OToyNi45NTY3NTk2MDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMjgzOTM2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYxZDQzNDk1OTk2MTYyY2FlZjllOTc4ZTE3M2IwOGRjZjA3ZmU2MzJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAxOTo1OToyNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Rpc2FzbS5jIGIva2VybmVsL2JwZi9kaXNhc20uY1xcbmluZGV4IDUwYjNjYTUxNDlhMGEuLjcwYzJiMjgxY2ZlOTQgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9kaXNhc20uY1xcbisrKyBiL2tlcm5lbC9icGYvZGlzYXNtLmNcXG5AQCAtMjk5LDYgKzI5OSwxMCBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcXG4gXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIkJVR19sZHhfJTAyeFxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcdFxcdH1cXG4rXFx0XFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9NRU1TWCBcXHUwMDI2XFx1MDAyNiBCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfRFcpIHtcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIkJVR19sZHN4XyUwMnhcXFwiLCBpbnNuLVxcdTAwM2Vjb2RlKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuIFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gKiglcyAqKShyJWQgJStkKVxcXCIsXFxuIFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdFxcdEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9NRU0gP1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTo1OToyNy41NzA1MjU0NDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUxNjgwMjU3MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHJpbnRfYnBmX2luc25cIixcbiAgICBcImJwZl92ZXJib3NlX2luc25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRhcnkvdmFsaWRpdHkgY2hlY2sgaW4gcHJpbnRfYnBmX2luc24oKSB3aXRoaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSB0byBoYW5kbGUgaW52YWxpZCBzaWduLWV4dGVuZGVkIDY0LWJpdCBsb2FkcyAoQlBGX01FTVNYIHdpdGggQlBGX0RXKSBhbmQgcHJldmVudCBhY2Nlc3NpbmcgdW5kZWZpbmVkIGFycmF5IGluZGljZXMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyBleGVjdXRlZCBkdXJpbmcgQlBGIHByb2dyYW0gdmVyaWZpY2F0aW9uIGFuZCBkaXNhc3NlbWJseSB2aWEgc3lzX2JwZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MWQ0MzQ5NTk5NjE2MmNhZWY5ZTk3OGUxNzNiMDhkY2YwN2ZlNjMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxOTo1OToyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZGlzYXNtLmMgYi9rZXJuZWwvYnBmL2Rpc2FzbS5jXG5pbmRleCA1MGIzY2E1MTQ5YTBhLi43MGMyYjI4MWNmZTk0IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9kaXNhc20uY1xuKysrIGIva2VybmVsL2JwZi9kaXNhc20uY1xuQEAgLTI5OSw2ICsyOTksMTAgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIkJVR19sZHhfJTAyeFwiLCBpbnNuLVx1MDAzZWNvZGUpO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuK1x0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNU1ggXHUwMDI2XHUwMDI2IEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0RXKSB7XG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIkJVR19sZHN4XyUwMnhcIiwgaW5zbi1cdTAwM2Vjb2RlKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbiBcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSAqKCVzICopKHIlZCAlK2QpXCIsXG4gXHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0QlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNID9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjU5OjI3LjU3MDUzMjIzNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMDY5Mjg2NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEZ1enppbmcgVHJpYWdlIFBhdGNoIGZvciBTeXprYWxsZXIqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJJ3ZlIGJlZW4gYXNrZWQgdG8gZXZhbHVhdGUgYSBwYXRjaCBpbnRlbmRlZCB0byBpbXByb3ZlIGZ1enppbmcgdHJpYWdlIHdpdGggU3l6a2FsbGVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGFuYWx5emUgdGhlIHBhdGNoIGl0c2VsZiBhbmQgdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCdzIEJQRiBkaXNhc3NlbWJseSBjb2RlLiBJJ20gZ29pbmcgdG8gZm9jdXMgb24gYGtlcm5lbC9icGYvZGlzYXNtLmNgIGFzIHRoZSBwcm92aWRlZCBkaWZmIHBvaW50cyB0byBjaGFuZ2VzIHRoZXJlLlxuXG5Mb29raW5nIGF0IHRoZSBkaWZmLCBpdCBzZWVtcyBhIG5ldyBjaGVjayBoYXMgYmVlbiBhZGRlZCB3aXRoaW4gdGhlIGBwcmludF9icGZfaW5zbmAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQncyBjaGVja2luZyBmb3IgYSBjb21iaW5hdGlvbiBvZiBgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNU1hgIGFuZCBgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfRFdgLiAgVGhpcyBjb21iaW5hdGlvbiBub3cgdHJpZ2dlcnMgYSBuZXcgZGVidWcgbWVzc2FnZSwgXCJCVUdfbGRzeF8lMDJ4XCIuIFNvLCBpdCBsb29rcyBsaWtlIHRoaXMgbmV3IGNvZGUgcGF0aCBpcyBpbnRlbmRlZCB0byBmbGFnIG9yIGhpZ2hsaWdodCBhIHNwZWNpZmljIEJQRiBpbnN0cnVjdGlvbiB2YXJpYW50IGR1cmluZyBkaXNhc3NlbWJseS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHVzZSB0aGUgdG9vbHMgYXZhaWxhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgc3BlY2lmaWMgQlBGIGluc3RydWN0aW9uIHZhcmlhbnQgKGBCUEZfTUVNU1hgIGFuZCBgQlBGX0RXYCkgcmVwcmVzZW50cyBhbmQgd2h5IGl0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIGZ1enppbmcgdHJpYWdlLiBJJ2xsIG5lZWQgdG8gbG9vayBpbnRvIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgQlBGIGRpc2Fzc2VtYmx5IGluIHRoZSBrZXJuZWwgdG8gZnVsbHkgZ3Jhc3AgaXRzIGltcGFjdC4gSSdsbCBhbHNvIHdhbnQgdG8gdHJhY2Ugd2hlcmUgYHByaW50X2JwZl9pbnNuYCBpcyBjYWxsZWQgZnJvbS4gSSdtIHRoaW5raW5nIEkgbmVlZCB0byBmaW5kIHRoZSBjYWxsc2l0ZXMgb2YgdGhhdCBmdW5jdGlvbiwgYW5kIHRoZW4gdW5kZXJzdGFuZCBob3cgdGhhdCBkaXNhc3NlbWJseSBpcyB1c2VkLiBJcyBpdCBhIGxpdmUgZGlzYXNzZW1ibHksIG9yIGlzIGl0IHVzZWQgZHVyaW5nIGNyYXNoIGFuYWx5c2lzLCBmb3IgZXhhbXBsZT8gRmlndXJpbmcgb3V0IHRoZSBleGVjdXRpb24gY29udGV4dCB3aWxsIHByb3ZpZGUgdml0YWwgaW5mb3JtYXRpb24uIEZyb20gdGhlcmUsIEknbGwgYXNzZXNzIHdoZXRoZXIgdGhlIGFkZGVkIGRlYnVnIG1lc3NhZ2UgaXMgbGlrZWx5IHRvIGNhdGNoIG9yIGhpZ2hsaWdodCBpbnRlcmVzdGluZyBCUEYgaW5zdHJ1Y3Rpb24gc2VxdWVuY2VzIHRoYXQgbWF5IGNvbnRyaWJ1dGUgdG8gZmluZGluZyBidWdzLiBJJ2xsIGFsc28gYmUgY29uc2lkZXJpbmcgd2hldGhlciBpdCBnZW5lcmF0ZXMgZXhjZXNzaXZlIG5vaXNlLCBvciBpcyBwcmVjaXNlIGVub3VnaCB0byBiZSB1c2VmdWwuIE15IG9iamVjdGl2ZSBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBhZGRpdGlvbiBpcyBlZmZlY3RpdmUgaW4gaGVscGluZyBTeXprYWxsZXIgdHJpYWdlIGZ1enppbmcgcmVzdWx0cywgYW5kIHdoZXRoZXIgaXQgaW50cm9kdWNlcyBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk2MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjU5OjQwLjYzOTgyMjkzM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvZGlzYXNtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjg1OlxcdFxcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX1NUKSB7XFxuIDI4NjpcXHRcXHRcXHRpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX01FTSkge1xcbiAyODc6XFx0XFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSAqKCVzICopKHIlZCAlK2QpID0gJWRcXFwiLFxcbiAyODg6XFx0XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gMjg5OlxcdFxcdFxcdFxcdFxcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSBcXHUwMDNlXFx1MDAzZSAzXSxcXG4gMjkwOlxcdFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIDI5MTpcXHRcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VvZmYsIGluc24tXFx1MDAzZWltbSk7XFxuIDI5MjpcXHRcXHRcXHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IDB4YzAgLyogQlBGX05PU1BFQywgbm8gVUFQSSAqLykge1xcbiAyOTM6XFx0XFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBub3NwZWNcXFwiLCBpbnNuLVxcdTAwM2Vjb2RlKTtcXG4gMjk0OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDI5NTpcXHRcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiQlVHX3N0XyUwMnhcXFwiLCBpbnNuLVxcdTAwM2Vjb2RlKTtcXG4gMjk2OlxcdFxcdFxcdH1cXG4gMjk3OlxcdFxcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEWCkge1xcbiAyOTg6XFx0XFx0XFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9NRU0gXFx1MDAyNlxcdTAwMjYgQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX01FTVNYKSB7XFxuIDI5OTpcXHRcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiQlVHX2xkeF8lMDJ4XFxcIiwgaW5zbi1cXHUwMDNlY29kZSk7XFxuIDMwMDpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDMwMTpcXHRcXHRcXHR9XFxuIDMwMjpcXHRcXHRcXHRpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX01FTVNYIFxcdTAwMjZcXHUwMDI2IEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9EVykge1xcbiAzMDM6XFx0XFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIkJVR19sZHN4XyUwMnhcXFwiLCBpbnNuLVxcdTAwM2Vjb2RlKTtcXG4gMzA0OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMzA1OlxcdFxcdFxcdH1cXG4gMzA2OlxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gKiglcyAqKShyJWQgJStkKVxcXCIsXFxuIDMwNzpcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbiAzMDg6XFx0XFx0XFx0XFx0QlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX01FTSA/XFxuIDMwOTpcXHRcXHRcXHRcXHRcXHQgYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdIDpcXG4gMzEwOlxcdFxcdFxcdFxcdFxcdCBicGZfbGRzeF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuIDMxMTpcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VzcmNfcmVnLCBpbnNuLVxcdTAwM2VvZmYpO1xcbiAzMTI6XFx0XFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfTEQpIHtcXG4gMzEzOlxcdFxcdFxcdGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQUJTKSB7XFxuIDMxNDpcXHRcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIwID0gKiglcyAqKXNrYlslZF1cXFwiLFxcbiAzMTU6XFx0XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gMzE2OlxcdFxcdFxcdFxcdFxcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSBcXHUwMDNlXFx1MDAzZSAzXSxcXG4gMzE3OlxcdFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWltbSk7XFxuIDMxODpcXHRcXHRcXHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9JTkQpIHtcXG4gMzE5OlxcdFxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgcjAgPSAqKCVzICopc2tiW3IlZCArICVkXVxcXCIsXFxuIDMyMDpcXHRcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLFxcbiAzMjE6XFx0XFx0XFx0XFx0XFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdLFxcbiAzMjI6XFx0XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlc3JjX3JlZywgaW5zbi1cXHUwMDNlaW1tKTtcXG4gMzIzOlxcdFxcdFxcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0lNTSBcXHUwMDI2XFx1MDAyNlxcbiAzMjQ6XFx0XFx0XFx0XFx0ICAgQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0RXKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjU5OjQwLjYzOTkxNjk0M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxOTM5MDM4MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEJQRiBEaXNhc3NlbWJseSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgYnBmX2xkc3hfc3RyaW5nYCBhcnJheSwgc3BlY2lmaWNhbGx5IGluIGBrZXJuZWwvYnBmL2Rpc2FzbS5jYC4gVGhhdCdzIHdoZXJlIHRoZSBrZXJuZWwncyBCUEYgZGlzYXNzZW1ibGVyIGxpdmVzLCBzbyBJJ20gbGlrZWx5IGludGVyZXN0ZWQgaW4gaG93IGl0IHJlcHJlc2VudHMgdGhlIGxvYWQvc3RvcmUgaW5zdHJ1Y3Rpb25zIGFzIHN0cmluZ3MuIEl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIGxvb2sgdXAgaG93IHRoZSBhcnJheSBpcyBpbXBsZW1lbnRlZC4gSSdsbCBmb2N1cyBvbiBsaW5lcyAxLTEwMCB0byBnZXQgYW4gb3ZlcnZpZXcgb2YgdGhlIHNlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NzIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjU5OjQyLjgzMzgyNTIwOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvZGlzYXNtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuICAgMjpcXHQvKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxNCBQTFVNZ3JpZCwgaHR0cDovL3BsdW1ncmlkLmNvbVxcbiAgIDM6XFx0ICogQ29weXJpZ2h0IChjKSAyMDE2IEZhY2Vib29rXFxuICAgNDpcXHQgKi9cXG4gICA1OlxcdFxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbiAgIDc6XFx0XFxuICAgODpcXHQjaW5jbHVkZSBcXFwiZGlzYXNtLmhcXFwiXFxuICAgOTpcXHRcXG4gIDEwOlxcdCNkZWZpbmUgX19CUEZfRlVOQ19TVFJfRk4oeCkgW0JQRl9GVU5DXyAjIyB4XSA9IF9fc3RyaW5naWZ5KGJwZl8gIyMgeClcXG4gIDExOlxcdHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZnVuY19pZF9zdHJbXSA9IHtcXG4gIDEyOlxcdFxcdF9fQlBGX0ZVTkNfTUFQUEVSKF9fQlBGX0ZVTkNfU1RSX0ZOKVxcbiAgMTM6XFx0fTtcXG4gIDE0OlxcdCN1bmRlZiBfX0JQRl9GVU5DX1NUUl9GTlxcbiAgMTU6XFx0XFxuICAxNjpcXHRzdGF0aWMgY29uc3QgY2hhciAqX19mdW5jX2dldF9uYW1lKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcXG4gIDE3OlxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gIDE4OlxcdFxcdFxcdFxcdFxcdCAgIGNoYXIgKmJ1ZmYsIHNpemVfdCBsZW4pXFxuICAxOTpcXHR7XFxuICAyMDpcXHRcXHRCVUlMRF9CVUdfT04oQVJSQVlfU0laRShmdW5jX2lkX3N0cikgIT0gX19CUEZfRlVOQ19NQVhfSUQpO1xcbiAgMjE6XFx0XFxuICAyMjpcXHRcXHRpZiAoIWluc24tXFx1MDAzZXNyY19yZWcgXFx1MDAyNlxcdTAwMjZcXG4gIDIzOlxcdFxcdCAgICBpbnNuLVxcdTAwM2VpbW0gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VpbW0gXFx1MDAzYyBfX0JQRl9GVU5DX01BWF9JRCBcXHUwMDI2XFx1MDAyNlxcbiAgMjQ6XFx0XFx0ICAgIGZ1bmNfaWRfc3RyW2luc24tXFx1MDAzZWltbV0pXFxuICAyNTpcXHRcXHRcXHRyZXR1cm4gZnVuY19pZF9zdHJbaW5zbi1cXHUwMDNlaW1tXTtcXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0aWYgKGNicyBcXHUwMDI2XFx1MDAyNiBjYnMtXFx1MDAzZWNiX2NhbGwpIHtcXG4gIDI4OlxcdFxcdFxcdGNvbnN0IGNoYXIgKnJlcztcXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0XFx0cmVzID0gY2JzLVxcdTAwM2VjYl9jYWxsKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBpbnNuKTtcXG4gIDMxOlxcdFxcdFxcdGlmIChyZXMpXFxuICAzMjpcXHRcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbiAgMzM6XFx0XFx0fVxcbiAgMzQ6XFx0XFxuICAzNTpcXHRcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0NBTEwpXFxuICAzNjpcXHRcXHRcXHRzbnByaW50ZihidWZmLCBsZW4sIFxcXCIlK2RcXFwiLCBpbnNuLVxcdTAwM2VpbW0pO1xcbiAgMzc6XFx0XFx0ZWxzZSBpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpXFxuICAzODpcXHRcXHRcXHRzbnByaW50ZihidWZmLCBsZW4sIFxcXCJrZXJuZWwtZnVuY3Rpb25cXFwiKTtcXG4gIDM5OlxcdFxcbiAgNDA6XFx0XFx0cmV0dXJuIGJ1ZmY7XFxuICA0MTpcXHR9XFxuICA0MjpcXHRcXG4gIDQzOlxcdHN0YXRpYyBjb25zdCBjaGFyICpfX2Z1bmNfaW1tX25hbWUoY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxcbiAgNDQ6XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiAgNDU6XFx0XFx0XFx0XFx0XFx0ICAgdTY0IGZ1bGxfaW1tLCBjaGFyICpidWZmLCBzaXplX3QgbGVuKVxcbiAgNDY6XFx0e1xcbiAgNDc6XFx0XFx0aWYgKGNicyBcXHUwMDI2XFx1MDAyNiBjYnMtXFx1MDAzZWNiX2ltbSlcXG4gIDQ4OlxcdFxcdFxcdHJldHVybiBjYnMtXFx1MDAzZWNiX2ltbShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgaW5zbiwgZnVsbF9pbW0pO1xcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHRzbnByaW50ZihidWZmLCBsZW4sIFxcXCIweCVsbHhcXFwiLCAodW5zaWduZWQgbG9uZyBsb25nKWZ1bGxfaW1tKTtcXG4gIDUxOlxcdFxcdHJldHVybiBidWZmO1xcbiAgNTI6XFx0fVxcbiAgNTM6XFx0XFxuICA1NDpcXHRjb25zdCBjaGFyICpmdW5jX2lkX25hbWUoaW50IGlkKVxcbiAgNTU6XFx0e1xcbiAgNTY6XFx0XFx0aWYgKGlkIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgaWQgXFx1MDAzYyBfX0JQRl9GVU5DX01BWF9JRCBcXHUwMDI2XFx1MDAyNiBmdW5jX2lkX3N0cltpZF0pXFxuICA1NzpcXHRcXHRcXHRyZXR1cm4gZnVuY19pZF9zdHJbaWRdO1xcbiAgNTg6XFx0XFx0ZWxzZVxcbiAgNTk6XFx0XFx0XFx0cmV0dXJuIFxcXCJ1bmtub3duXFxcIjtcXG4gIDYwOlxcdH1cXG4gIDYxOlxcdFxcbiAgNjI6XFx0Y29uc3QgY2hhciAqY29uc3QgYnBmX2NsYXNzX3N0cmluZ1s4XSA9IHtcXG4gIDYzOlxcdFxcdFtCUEZfTERdICAgID0gXFxcImxkXFxcIixcXG4gIDY0OlxcdFxcdFtCUEZfTERYXSAgID0gXFxcImxkeFxcXCIsXFxuICA2NTpcXHRcXHRbQlBGX1NUXSAgICA9IFxcXCJzdFxcXCIsXFxuICA2NjpcXHRcXHRbQlBGX1NUWF0gICA9IFxcXCJzdHhcXFwiLFxcbiAgNjc6XFx0XFx0W0JQRl9BTFVdICAgPSBcXFwiYWx1XFxcIixcXG4gIDY4OlxcdFxcdFtCUEZfSk1QXSAgID0gXFxcImptcFxcXCIsXFxuICA2OTpcXHRcXHRbQlBGX0pNUDMyXSA9IFxcXCJqbXAzMlxcXCIsXFxuICA3MDpcXHRcXHRbQlBGX0FMVTY0XSA9IFxcXCJhbHU2NFxcXCIsXFxuICA3MTpcXHR9O1xcbiAgNzI6XFx0XFxuICA3MzpcXHRjb25zdCBjaGFyICpjb25zdCBicGZfYWx1X3N0cmluZ1sxNl0gPSB7XFxuICA3NDpcXHRcXHRbQlBGX0FERCBcXHUwMDNlXFx1MDAzZSA0XSAgPSBcXFwiKz1cXFwiLFxcbiAgNzU6XFx0XFx0W0JQRl9TVUIgXFx1MDAzZVxcdTAwM2UgNF0gID0gXFxcIi09XFxcIixcXG4gIDc2OlxcdFxcdFtCUEZfTVVMIFxcdTAwM2VcXHUwMDNlIDRdICA9IFxcXCIqPVxcXCIsXFxuICA3NzpcXHRcXHRbQlBGX0RJViBcXHUwMDNlXFx1MDAzZSA0XSAgPSBcXFwiLz1cXFwiLFxcbiAgNzg6XFx0XFx0W0JQRl9PUiAgXFx1MDAzZVxcdTAwM2UgNF0gID0gXFxcInw9XFxcIixcXG4gIDc5OlxcdFxcdFtCUEZfQU5EIFxcdTAwM2VcXHUwMDNlIDRdICA9IFxcXCJcXHUwMDI2PVxcXCIsXFxuICA4MDpcXHRcXHRbQlBGX0xTSCBcXHUwMDNlXFx1MDAzZSA0XSAgPSBcXFwiXFx1MDAzY1xcdTAwM2M9XFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6NTk6NDIuODMzOTA5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc2MTgxNDE4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIGRpdmUgaW50byB0aGF0IHRleHQgYW5kIHN1bW1hcml6ZSB0aGUgdGhvdWdodCBwcm9jZXNzLiBIZXJlJ3MgbXkgdGFrZTpcblxuKipBbmFseXppbmcgdGhlIFJlbGV2YW50IFNlY3Rpb24qKlxuXG5BbHJpZ2h0LCBteSBpbml0aWFsIHJlYWQtdGhyb3VnaCBzdWdnZXN0ZWQgdGhhdCB0aGVyZSdzIGEgc3BlY2lmaWMgc2VnbWVudCBvZiB0aGUgdGV4dCB0aGF0IGRlc2VydmVzIGNsb3NlciBhdHRlbnRpb24g4oCTIGxpbmVzIDgwIHRocm91Z2ggMTIwLiBCYXNlZCBvbiBteSBleGlzdGluZyBrbm93bGVkZ2UgYW5kIHRoZSBjb250ZXh0LCBJJ20gYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBzZWN0aW9uIGxpa2VseSBob3VzZXMgdGhlIGNvcmUgb2YgdGhlIGFyZ3VtZW50LCB0aGUgY3J1Y2lhbCBtZXRob2RvbG9neSwgb3IgcGVyaGFwcyB0aGUga2V5IHJlc3VsdHMgdGhhdCBkZW1hbmQgYSBkZWVwZXIgZXhhbWluYXRpb24uIEknbGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZGlzc2VjdCB0aGF0IHBvcnRpb24gdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBhbmQgZHJhdyBjb25uZWN0aW9ucy4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgY3JpdGljYWwgcGllY2VzIG9mIHRoZSBwdXp6bGUgcmVzaWRlLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZW0uIEkgZXhwZWN0IGl0IHRvIGJlIGEga2V5IGVsZW1lbnQgZm9yIHRoZSBhcnRpY2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjYzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTo1OTo0NC41OTU3MjcyNTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9kaXNhc20uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHRbQlBGX0xTSCBcXHUwMDNlXFx1MDAzZSA0XSAgPSBcXFwiXFx1MDAzY1xcdTAwM2M9XFxcIixcXG4gIDgxOlxcdFxcdFtCUEZfUlNIIFxcdTAwM2VcXHUwMDNlIDRdICA9IFxcXCJcXHUwMDNlXFx1MDAzZT1cXFwiLFxcbiAgODI6XFx0XFx0W0JQRl9ORUcgXFx1MDAzZVxcdTAwM2UgNF0gID0gXFxcIm5lZ1xcXCIsXFxuICA4MzpcXHRcXHRbQlBGX01PRCBcXHUwMDNlXFx1MDAzZSA0XSAgPSBcXFwiJT1cXFwiLFxcbiAgODQ6XFx0XFx0W0JQRl9YT1IgXFx1MDAzZVxcdTAwM2UgNF0gID0gXFxcIl49XFxcIixcXG4gIDg1OlxcdFxcdFtCUEZfTU9WIFxcdTAwM2VcXHUwMDNlIDRdICA9IFxcXCI9XFxcIixcXG4gIDg2OlxcdFxcdFtCUEZfQVJTSCBcXHUwMDNlXFx1MDAzZSA0XSA9IFxcXCJzXFx1MDAzZVxcdTAwM2U9XFxcIixcXG4gIDg3OlxcdFxcdFtCUEZfRU5EIFxcdTAwM2VcXHUwMDNlIDRdICA9IFxcXCJlbmRpYW5cXFwiLFxcbiAgODg6XFx0fTtcXG4gIDg5OlxcdFxcbiAgOTA6XFx0c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGJwZl9hbHVfc2lnbl9zdHJpbmdbMTZdID0ge1xcbiAgOTE6XFx0XFx0W0JQRl9ESVYgXFx1MDAzZVxcdTAwM2UgNF0gID0gXFxcInMvPVxcXCIsXFxuICA5MjpcXHRcXHRbQlBGX01PRCBcXHUwMDNlXFx1MDAzZSA0XSAgPSBcXFwicyU9XFxcIixcXG4gIDkzOlxcdH07XFxuICA5NDpcXHRcXG4gIDk1OlxcdHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBicGZfbW92c3hfc3RyaW5nWzRdID0ge1xcbiAgOTY6XFx0XFx0WzBdID0gXFxcIihzOClcXFwiLFxcbiAgOTc6XFx0XFx0WzFdID0gXFxcIihzMTYpXFxcIixcXG4gIDk4OlxcdFxcdFszXSA9IFxcXCIoczMyKVxcXCIsXFxuICA5OTpcXHR9O1xcbiAxMDA6XFx0XFxuIDEwMTpcXHRzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYnBmX2F0b21pY19hbHVfc3RyaW5nWzE2XSA9IHtcXG4gMTAyOlxcdFxcdFtCUEZfQUREIFxcdTAwM2VcXHUwMDNlIDRdICA9IFxcXCJhZGRcXFwiLFxcbiAxMDM6XFx0XFx0W0JQRl9BTkQgXFx1MDAzZVxcdTAwM2UgNF0gID0gXFxcImFuZFxcXCIsXFxuIDEwNDpcXHRcXHRbQlBGX09SIFxcdTAwM2VcXHUwMDNlIDRdICA9IFxcXCJvclxcXCIsXFxuIDEwNTpcXHRcXHRbQlBGX1hPUiBcXHUwMDNlXFx1MDAzZSA0XSAgPSBcXFwieG9yXFxcIixcXG4gMTA2OlxcdH07XFxuIDEwNzpcXHRcXG4gMTA4OlxcdHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBicGZfbGRzdF9zdHJpbmdbXSA9IHtcXG4gMTA5OlxcdFxcdFtCUEZfVyBcXHUwMDNlXFx1MDAzZSAzXSAgPSBcXFwidTMyXFxcIixcXG4gMTEwOlxcdFxcdFtCUEZfSCBcXHUwMDNlXFx1MDAzZSAzXSAgPSBcXFwidTE2XFxcIixcXG4gMTExOlxcdFxcdFtCUEZfQiBcXHUwMDNlXFx1MDAzZSAzXSAgPSBcXFwidThcXFwiLFxcbiAxMTI6XFx0XFx0W0JQRl9EVyBcXHUwMDNlXFx1MDAzZSAzXSA9IFxcXCJ1NjRcXFwiLFxcbiAxMTM6XFx0fTtcXG4gMTE0OlxcdFxcbiAxMTU6XFx0c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGJwZl9sZHN4X3N0cmluZ1tdID0ge1xcbiAxMTY6XFx0XFx0W0JQRl9XIFxcdTAwM2VcXHUwMDNlIDNdICA9IFxcXCJzMzJcXFwiLFxcbiAxMTc6XFx0XFx0W0JQRl9IIFxcdTAwM2VcXHUwMDNlIDNdICA9IFxcXCJzMTZcXFwiLFxcbiAxMTg6XFx0XFx0W0JQRl9CIFxcdTAwM2VcXHUwMDNlIDNdICA9IFxcXCJzOFxcXCIsXFxuIDExOTpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTo1OTo0NC41OTU4NjU3MjlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzgxMDc3Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBJbnN0cnVjdGlvbiBQcmludCBCdWcqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYnBmX2xkc3hfc3RyaW5nYCBzdHJ1Y3R1cmUuIEknbSBpbW1lZGlhdGVseSBub3RpY2luZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIEl0IGFwcGVhcnMgdG8gYmUgZGVmaW5pbmcgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbnMgZm9yIHNpZ25lZCBsb2FkcyBiYXNlZCBvbiBzaXplOiBgczMyYCwgYHMxNmAsIGFuZCBgczhgLiBCdXQgaG9sZCBvbi4uLiB0aGVyZSdzIG5vIGVudHJ5IGZvciBgQlBGX0RXYCwgd2hpY2ggaXMgZG91YmxlLXdvcmQgb3IgNjQtYml0IGxvYWQuIEkgcXVpY2tseSBzZWUgdGhhdCBgQlBGX0RXIFx1MDAzZVx1MDAzZSAzYCBldmFsdWF0ZXMgdG8gMywgd2hpY2ggbGFuZHMgc3F1YXJlbHkgaW4gdGhlIE5VTEwgc3BhY2Ugb2YgdGhhdCBhcnJheS5cblxuTm93LCBpZiBgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKWAgaXMgYEJQRl9NRU1TWGAgYW5kIGBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpYCBpcyBgQlBGX0RXYCwgdGhlbiB0aGUgY29kZSBpcyB0cnlpbmcgdG8gYWNjZXNzIGEgNjQtYml0IHNpZ25lZCBsb2FkLiBUaGF0IHdvdWxkIG1lYW4gd2UncmUgaW5kZXhpbmcgaW50byBgYnBmX2xkc3hfc3RyaW5nYCBhdCBpbmRleCAzLCB3aGljaCwgYXMgd2UndmUgZXN0YWJsaXNoZWQsIGlzIGBOVUxMYC4gVGhlIHByb2JsZW0gaXMgcmlnaHQgdGhlcmUsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBjcmFzaCBpZiB0aGUga2VybmVsIHRyaWVzIHRvIGBwcmludGtgIG9yIGB2ZXJib3NlYCBsb2cgdGhpcyB2YWx1ZSBhcyBhIHN0cmluZy4gRGVwZW5kaW5nIG9uIHRoZSBgdnNucHJpbnRmYCBpbXBsZW1lbnRhdGlvbiwgdGhpcyBjb3VsZCBlaXRoZXIgY3Jhc2ggb3IgcHJpbnQgYChudWxsKWAuIE5vdCBnb29kLlxuXG5Tbywgd2hlcmUgaXMgYHByaW50X2JwZl9pbnNuYCBjYWxsZWQ/IEkgbmVlZCB0byB0cmFjayBkb3duIGFsbCB0aGUgY2FsbCBzaXRlcyB0byBzZWUgd2hlcmUgdGhpcyBwb3RlbnRpYWwgYnVnIGlzIGV4cG9zZWQuIExldCdzIGZpbmQgdGhvc2UgY2FsbGVycyBhbmQgc2VlIGhvdyBhbmQgd2hlbiBgcHJpbnRfYnBmX2luc25gIGlzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNjMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTo1OTo0Ny45NzY5NDg0MzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTY2MDc3ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJpbnRfYnBmX2luc25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTYwOD1zdGF0aWMgdm9pZCBmb3JtYXRfZGlzYXNtX2xpbmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LFxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTYzMi1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6NjMzOlxcdHByaW50X2JwZl9pbnNuKFxcdTAwMjZjYnMsIGluc24sIGVudi1cXHUwMDNlYWxsb3dfcHRyX2xlYWtzKTtcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtNjM0LVxcdHNlcV9idWZfc3RyKFxcdTAwMjZjdHguc2VxKTtcXG4tLVxcbmtlcm5lbC9icGYvZGlzYXNtLmM9MTgxPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19tb3ZfcGVyY3B1X2FkZHIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi9kaXNhc20uYy0xODUtXFxua2VybmVsL2JwZi9kaXNhc20uYzoxODY6dm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXFxua2VybmVsL2JwZi9kaXNhc20uYy0xODctXFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvZGlzYXNtLmg9MzA9c3RydWN0IGJwZl9pbnNuX2NicyB7XFxuLS1cXG5rZXJuZWwvYnBmL2Rpc2FzbS5oLTM2LVxcbmtlcm5lbC9icGYvZGlzYXNtLmg6Mzc6dm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXFxua2VybmVsL2JwZi9kaXNhc20uaC0zOC1cXHRcXHQgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTMzNzc9dm9pZCBicGZfdmVyYm9zZV9pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzg0LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMzg1OlxcdHByaW50X2JwZl9pbnNuKFxcdTAwMjZjYnMsIGluc24sIGVudi1cXHUwMDNlYWxsb3dfcHRyX2xlYWtzKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzM4Ni19XFxuLS1cXG50b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmM9MjA1PXZvaWQgZHVtcF94bGF0ZWRfanNvbihzdHJ1Y3QgZHVtcF9kYXRhICpkZCwgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuLFxcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jLTI1Ny1cXHRcXHRqc29ud19uYW1lKGpzb25fd3RyLCBcXFwiZGlzYXNtXFxcIik7XFxudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jOjI1ODpcXHRcXHRwcmludF9icGZfaW5zbihcXHUwMDI2Y2JzLCBpbnNuICsgaSwgdHJ1ZSk7XFxudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jLTI1OS1cXG4tLVxcbnRvb2xzL2JwZi9icGZ0b29sL3hsYXRlZF9kdW1wZXIuYz0yOTA9dm9pZCBkdW1wX3hsYXRlZF9wbGFpbihzdHJ1Y3QgZHVtcF9kYXRhICpkZCwgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuLFxcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jLTMzOS1cXHRcXHRwcmludGYoXFxcIiU0dTogXFxcIiwgaSk7XFxudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jOjM0MDpcXHRcXHRwcmludF9icGZfaW5zbihcXHUwMDI2Y2JzLCBpbnNuICsgaSwgdHJ1ZSk7XFxudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jLTM0MS1cXHRcXHRwcmludGYoXFxcIlxcXFxuXFxcIik7XFxuLS1cXG50b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmM9MzU1PXZvaWQgZHVtcF94bGF0ZWRfZm9yX2dyYXBoKHN0cnVjdCBkdW1wX2RhdGEgKmRkLCB2b2lkICpidWZfc3RhcnQsIHZvaWQgKmJ1Zl9lbmQsXFxuLS1cXG50b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmMtNDA2LVxcdFxcdHByaW50ZihcXFwiJXU6IFxcXCIsIGluc25fb2ZmKTtcXG50b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmM6NDA3OlxcdFxcdHByaW50X2JwZl9pbnNuKFxcdTAwMjZjYnMsIGN1ciwgdHJ1ZSk7XFxudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jLTQwOC1cXHRcXHRwcmludGYoXFxcIlxcXFxcXFxcbFxcXFxcXFxcXFxcXG5cXFwiKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jPTM4PXN0cnVjdCBicGZfaW5zbiAqZGlzYXNtX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuLCBjaGFyICpidWYsIHNpemVfdCBidWZfc3opXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuYy01Mi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuYzo1MzpcXHRwcmludF9icGZfaW5zbihcXHUwMDI2Y2JzLCBpbnNuLCB0cnVlKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuYy01NC1cXHQvKiBXZSBzaGFyZSBjb2RlIHdpdGgga2VybmVsIEJQRiBkaXNhc3NlbWJsZXIsIGl0IGFkZHMgJyhGRikgJyBwcmVmaXhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6NTk6NTAuMzMzNTcwODcxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MDI1NjY1ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOlxuXG4qKkJQRiBJbnN0cnVjdGlvbiBEaXNhc3NlbWJseSBhbmQgVmVyYm9zZSBMb2dnaW5nKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjZSB0aGUgdmVyYm9zZSBsb2dnaW5nIG9mIEJQRiBpbnN0cnVjdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIExldCdzIHNlZS4uLiBJJ20gcHJldHR5IHN1cmUgSSByZW1lbWJlciBgYnBmX3ZlcmJvc2VfaW5zbmAgYmVpbmcgdGhlIGtleSBmdW5jdGlvbiBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gQW5kIHRoZW4sIG9uIHRoZSBkaXNwbGF5IHNpZGUsIEkgaGF2ZSBgZm9ybWF0X2Rpc2FzbV9saW5lYCBpbiBga2VybmVsL2JwZi9kaWFnbm9zdGljcy5jYCB0byBmb3JtYXQgaXQgYWxsLlxuXG5UaGUgcmVhbCBxdWVzdGlvbiBpcywgd2hlbiAqZXhhY3RseSogZG9lcyBgYnBmX3ZlcmJvc2VfaW5zbmAgZ2V0IGNhbGxlZCB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllcj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdHJpZ2dlcmluZyB0aGF0IGxldmVsIG9mIGRldGFpbC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgY29kZSBiYXNlIGZvciBjYWxscyB0byBgYnBmX3ZlcmJvc2VfaW5zbmAgYW5kIHNlZSB3aGF0IGNvbWVzIHVwLiBJJ2xsIGFsc28gY29uc2lkZXIgc2VhcmNoZXMgYXJvdW5kIHZlcmJvc2UgbG9nZ2luZyBzcGVjaWZpY2FsbHkgZHVyaW5nIEJQRiBwcm9ncmFtIGxvYWRpbmcsIHNpbmNlIHRoYXQncyBvZnRlbiB3aGVuIHlvdSB3YW50IHRoZSBtb3N0IGRldGFpbGVkIGluc3BlY3Rpb24uIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGVyZSBhbmQgd2hlbiB0aGVzZSB2ZXJib3NlIGxvZ3MgYXJlIGdlbmVyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg4MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjU5OjUzLjAzNjE0MDQ3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjcwMjE0NTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl92ZXJib3NlX2luc25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xNjI3PWJvb2wgYnBmX2lzX21heV9nb3RvX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuKTtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2MjgtXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxNjI5OnZvaWQgYnBmX3ZlcmJvc2VfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pO1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTYzMC1ib29sIGJwZl9nZXRfY2FsbF9zdW1tYXJ5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqY2FsbCxcXG4tLVxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmM9MjY1PXN0YXRpYyBpbnQgYmFja3RyYWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCwgaW50IHN1YnNlcV9pZHgsXFxuLS1cXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTI4NC1cXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVkOiBcXFwiLCBpZHgpO1xcbmtlcm5lbC9icGYvYmFja3RyYWNrLmM6Mjg1OlxcdFxcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTI4Ni1cXHRcXHR2ZXJib3NlKGVudiwgXFxcIlxcXFxuXFxcIik7XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9NDc3PXN0YXRpYyB2b2lkIHByaW50X2luc3RhbmNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSlcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy00OTctXFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlM2Q6IFxcXCIsIGluc25faWR4KTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NDk4OlxcdFxcdGJwZl92ZXJib3NlX2luc24oZW52LCBcXHUwMDI2aW5zbnNbaW5zbl9pZHhdKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNDk5LVxcdFxcdGluc25fcG9zID0gZW52LVxcdTAwM2Vsb2cuZW5kX3BvcztcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0xMDI5PXN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgaWR4LFxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNDItXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlM2Q6IFxcXCIsIGlkeCk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjEwNDM6XFx0XFx0XFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDQ0LVxcdFxcdFxcdHByaW50ZWQgPSB0cnVlO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNTYtXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlM2Q6IFxcXCIsIGlkeCk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjEwNTc6XFx0XFx0XFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDU4LVxcdFxcdFxcdHByaW50ZWQgPSB0cnVlO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNjctXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlM2Q6IFxcXCIsIGlkeCk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjEwNjg6XFx0XFx0XFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDY5LVxcdFxcdFxcdHByaW50ZWQgPSB0cnVlO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jPTE1MTc9c3RhdGljIHZvaWQgcHJpbnRfc3VicHJvZ19hcmdfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTUzOC1cXHRcXHR2ZXJib3NlKGVudiwgXFxcIiUzZDogXFxcIiwgaWR4KTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTUzOTpcXHRcXHRicGZfdmVyYm9zZV9pbnNuKGVudiwgXFx1MDAyNmluc25zW2lkeF0pO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNTQwLVxcdFxcdHZlcmJvc2UoZW52LCBcXFwiXFxcXG5cXFwiKTtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0yMjI2PWludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTIzMjYtXFx0XFx0XFx0cG9zID0gZW52LVxcdTAwM2Vsb2cuZW5kX3BvcztcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MjMyNzpcXHRcXHRcXHRicGZfdmVyYm9zZV9pbnNuKGVudiwgXFx1MDAyNmluc25zW2ldKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjMyOC1cXHRcXHRcXHRpbnNuX3BvcyA9IGVudi1cXHUwMDNlbG9nLmVuZF9wb3M7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzM1OT1jb25zdCBjaGFyICpicGZfZGlzYXNtX2tmdW5jX25hbWUodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzNzYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMzNzc6dm9pZCBicGZfdmVyYm9zZV9pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzM3OC17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg0NjY9c3RhdGljIGludCBkb19jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NTcyLVxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJWQ6IFxcXCIsIGVudi1cXHUwMDNlaW5zbl9pZHgpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODU3MzpcXHRcXHRcXHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NTc0LVxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiXFxcXG5cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6NTk6NTUuMzA2MzYxNjExWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5NjM2MDg3NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIEluc3RydWN0aW9uIEhhbmRsaW5nIFZ1bG5lcmFiaWxpdHkgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBCUEYgaW5zdHJ1Y3Rpb24gaXNzdWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBicGZfdmVyYm9zZV9pbnNuYCBnZXRzIGNhbGxlZCB3aGVuIGxvYWRpbmcgYSBCUEYgcHJvZ3JhbSB3aXRoIGxvZ2dpbmcgZW5hYmxlZCwgb3IgZHVyaW5nIHZlcmlmaWNhdGlvbiBwcm9jZXNzZXMuIEl0IHNlZW1zIGxpa2UgdGhlIHZlcmlmaWVyIGNhbiBlbmNvdW50ZXIgYW55IEJQRiBpbnN0cnVjdGlvbiwgZXZlbiBjb21wbGV0ZWx5IGludmFsaWQgb25lcyBsaWtlIGBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX0RXYC5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgdmVyaWZpZXIgaGFuZGxlcyB0aGVzZSBpbnN0cnVjdGlvbnMuIFNwZWNpZmljYWxseSwgZHVyaW5nIGNoZWNrcyBsaWtlIGBjaGVja19tZW1fYWNjZXNzYCwgYGRvX2NoZWNrYCwgYW5kIGBjaGVja19jZmdgLiBJdCBzZWVtcyB0aGF0IHdoZW4gYGJwZihCUEZfUFJPR19MT0FEKWAgaXMgY2FsbGVkIHdpdGggYSBsb2dnaW5nIGxldmVsIHNldCwgYGJwZl92ZXJib3NlX2luc25gIHByaW50cyBlYWNoIGluc3RydWN0aW9uIGJlZm9yZSBpdCBnZXRzIHZlcmlmaWVkLlxuXG5Ob3cgaGVyZSdzIHRoZSBjcnVjaWFsIGJpdC4gSWYgYW4gaW5zdHJ1Y3Rpb24gaGFzIHRoZSBpbnZhbGlkIGNvbWJpbmF0aW9uIEkgbWVudGlvbmVkICgweDk5KSwgYHByaW50X2JwZl9pbnNuYCBub3cgcHJpbnRzIGBcIkJVR19sZHN4Xzk5XCJgIGFuZCByZXR1cm5zLiBJdCBwcmV2ZW50cyB3aGF0IHdvdWxkIGhhdmUgYmVlbiBhIE5VTEwgZGVyZWZlcmVuY2UgaW4gdGhlIGZvcm1hdHRpbmcgb2YgdGhpcyBpbnN0cnVjdGlvbiEgUHJldmlvdXNseSwgaXQgd291bGQgdHJ5IHRvIHJlYWQgYSBOVUxMIHBvaW50ZXIgYW5kIGZvcm1hdCB0aGUgc3RyaW5nLiBTbyB0aGUgcGF0Y2ggZG9lcyBwcmV2ZW50IGEgTlVMTCBkZXJlZmVyZW5jZS5cblxuSXMgdGhpcyBjb2RlIGFjdHVhbGx5IHJlYWNoYWJsZSB3aXRoaW4gdGhlIGtlcm5lbD8gWWVzLCBga2VybmVsL2JwZi9kaXNhc20uY2AgaXMgcGFydCBvZiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtLCB3aGljaCBpcyBkZWZpbml0ZWx5IHBhcnQgb2YgdGhlIGtlcm5lbCwgYW5kIGNhbiBiZSBhY2Nlc3NlZCB2aWEgdGhlIGBzeXNfYnBmYCBzeXNjYWxsLlxuXG5Ob3cgSSBuZWVkIHRvIGV2YWx1YXRlIHRoaXMgaW4gdGVybXMgb2YgZnV6emluZyBwb3RlbnRpYWwuIEFjY29yZGluZyB0byB0aGUgY3JpdGVyaWEgSSdtIHVzaW5nLCBTZWN0aW9uIDMgc3RhdGVzIHRoYXQgXCJXb3J0aEZ1enppbmc9dHJ1ZVwiIGlmIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGNvcmUgc3Vic3lzdGVtcyBsaWtlIEJQRi5cblxuU2VjdGlvbiAyIHNheXMgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBpZiBpdCdzIHB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcsIGRvY3VtZW50YXRpb24sIG9yIGJ1aWxkIHN5c3RlbSBjaGFuZ2VzLiBUaGlzIGlzIHdoZXJlIEkgaGF2ZSB0byBiZSBjYXJlZnVsLlxuXG5UaGlzIGlzbid0IHB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcuIEl0J3MgbW9kaWZ5aW5nIGhvdyBhbiBpbnZhbGlkIGluc3RydWN0aW9uIGlzIGRlY29kZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gYGtlcm5lbC9icGYvZGlzYXNtLmNgLCB3aGljaCBpcyB0aGUgaW52YWxpZCBpbnN0cnVjdGlvbiBoYW5kbGluZyBsb2dpYy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBrZXJuZWwvYnBmL2Rpc2FzbS5jYCBpcyBjb21waWxlZCBpbnRvIGB2bWxpbnV4YC4gSSBzaG91bGQgY2hlY2sgdGhlIE1ha2VmaWxlIGluIGBrZXJuZWwvYnBmL2AgdG8gdmVyaWZ5IHRoYXQuXG5cblNvLCB0aGlzIGxvb2tzIGxpa2UgYSBkZWZpbml0ZSBcIldvcnRoRnV6emluZz10cnVlXCIgc2l0dWF0aW9uLiBUaGUgcGF0Y2ggY2xlYXJseSB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gYSBjb3JlIEJQRiBzdWJzeXN0ZW0gYnkgbW9kaWZ5aW5nIGhvdyBpdCBoYW5kbGVzIGludmFsaWQgaW5zdHJ1Y3Rpb25zLiBJdCdzIG5vdCBqdXN0IGEgbWVzc2FnZSBjaGFuZ2U7IGl0IGNoYW5nZXMgY29udHJvbCBmbG93IHRvIHByZXZlbnQgYSBOVUxMIGRlcmVmZXJlbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ0MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDowMDowMS4yNjk5ODE5MzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdG9iai15IDo9IGNvcmUub1xcbiAgIDM6XFx0aWZuZXEgKCQoQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OKSx5KVxcbiAgIDQ6XFx0IyBfX19icGZfcHJvZ19ydW4oKSBuZWVkcyBHQ1NFIGRpc2FibGVkIG9uIHg4Njsgc2VlIDMxOTNjMDgzNmYyMDMgZm9yIGRldGFpbHNcXG4gICA1OlxcdGNmbGFncy1ub2djc2UtJChDT05GSUdfWDg2KSQoQ09ORklHX0NDX0lTX0dDQykgOj0gLWZuby1nY3NlXFxuICAgNjpcXHRlbmRpZlxcbiAgIDc6XFx0Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbiAgIDg6XFx0XFxuICAgOTpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXFxuICAxMDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbiAgMTE6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbiAgMTI6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXFxuICAxMzpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXFxuICAxNDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXFxuICAxNTpcXHRvYmotJHtDT05GSUdfQlBGX0xTTX1cXHQgICs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cXG4gIDE2OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZGlzYXNtLm8gbXByb2cub1xcbiAgMTc6XFx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcbiAgMTg6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xcbiAgMTk6XFx0aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG4gIDIwOlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYXJlbmEubyByYW5nZV90cmVlLm9cXG4gIDIxOlxcdGVuZGlmXFxuICAyMjpcXHRvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gZGlzcGF0Y2hlci5vXFxuICAyMzpcXHRpZmVxICgkKENPTkZJR19ORVQpLHkpXFxuICAyNDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRldm1hcC5vXFxuICAyNTpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNwdW1hcC5vXFxuICAyNjpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IG9mZmxvYWQub1xcbiAgMjc6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBuZXRfbmFtZXNwYWNlLm9cXG4gIDI4OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gdGN4Lm9cXG4gIDI5OlxcdGVuZGlmXFxuICAzMDpcXHRpZmVxICgkKENPTkZJR19LRVlTKSx5KVxcbiAgMzE6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBrZXlzLm9cXG4gIDMyOlxcdGVuZGlmXFxuICAzMzpcXHRpZmVxICgkKENPTkZJR19QRVJGX0VWRU5UUykseSlcXG4gIDM0OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3RhY2ttYXAub1xcbiAgMzU6XFx0ZW5kaWZcXG4gIDM2OlxcdGlmZXEgKCQoQ09ORklHX0NHUk9VUFMpLHkpXFxuICAzNzpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNncm91cF9pdGVyLm8gYnBmX2NncnBfc3RvcmFnZS5vXFxuICAzODpcXHRlbmRpZlxcbiAgMzk6XFx0b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICs9IGNncm91cC5vXFxuICA0MDpcXHRpZmVxICgkKENPTkZJR19JTkVUKSx5KVxcbiAgNDE6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSByZXVzZXBvcnRfYXJyYXkub1xcbiAgNDI6XFx0ZW5kaWZcXG4gIDQzOlxcdGlmZXEgKCQoQ09ORklHX1NZU0ZTKSx5KVxcbiAgNDQ6XFx0b2JqLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSArPSBzeXNmc19idGYub1xcbiAgNDU6XFx0ZW5kaWZcXG4gIDQ2OlxcdGlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXFxuICA0NzpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9zdHJ1Y3Rfb3BzLm9cXG4gIDQ4OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3B1bWFzay5vXFxuICA0OTpcXHQjIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcXG4gIDUwOlxcdCMgZGVkdXBsaWNhdGVzIGZ1bmN0aW9uIHByb3RvdHlwZXMgd2l0aGluXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjAwOjAxLjI3MDA3MTg5N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTU5NTg0MjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgQlBGIERpc2Fzc2VtYmxlciBCdWlsZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkaXNhc20ub2AuIFJpZ2h0LCB0aGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgdGhlIGRpc2Fzc2VtYmxlciBvYmplY3QgZmlsZSwgYGRpc2FzbS5vYCwgaXMgb25seSBpbmNsdWRlZCBpbiB0aGUgYnVpbGQgaWYgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IHRvIGVuc3VyZSB0aGUgZGlzYXNzZW1ibGVyIGlzbid0IGJ1aWx0IHVubGVzcyB0aGUgY29yZSBCUEYgc3lzdGVtIGNhbGwgZnVuY3Rpb25hbGl0eSBpcyBhbHNvIGF2YWlsYWJsZS4gTWFrZXMgcGVyZmVjdCBzZW5zZS5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIHN5c3RlbSBjYWxsIGlzIHNldCB1cCBwcm9wZXJseS4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgaW5pdC9LY29uZmlnYCBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgcGxhY2VzIGZvciB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIGFuZCB0aGUgQlBGIGNvbmZpZ3VyYXRpb24sIHJlc3BlY3RpdmVseS4gSSBjYW4gcXVpY2tseSBzY2FuIHRoZW0gdG8gc2VlIGlmIGBDT05GSUdfQlBGX1NZU0NBTExgIGRlcGVuZHMgb24gYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGltcGFjdCBvdXIgYnVpbGQgb3IgaGF2ZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLiBJJ2xsIG5lZWQgdG8ga25vdyB0aGlzIHRvIGJlIHN1cmUgdGhpcyBidWlsZCB3aWxsIHN1Y2NlZWQsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGhhdmluZyB0aGlzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODkxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDowMDowNS44Mjk2NjEzMThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzU4OTkxNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MDA6MDcuOTA1NTY1NDIzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3NDE5ODk4NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBLY29uZmlnIGZpbGU6XG5cbioqTmF2aWdhdGluZyB0aGUgQlBGIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIExldCdzIHplcm8gaW4gb24gbGluZSAyNS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGVzZSBCUEYgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkLCBhbmQgdGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIGJldHdlZW4gZGlmZmVyZW50IEJQRiBmZWF0dXJlcy4gS25vd2luZyB0aGUgZXhhY3Qgb3B0aW9ucyBhbmQgdGhlaXIgaW50ZXJhY3Rpb25zIGlzIGNydWNpYWwgZm9yIG9wdGltaXppbmcgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHNwZWNpZmljIHVzZSBjYXNlcyBhbmQgYXJjaGl0ZWN0dXJlcy4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIHRoZSBpbXBhY3RzIG9mIGVuYWJsaW5nL2Rpc2FibGluZyB2YXJpb3VzIEJQRiBmZWF0dXJlcy4gVGhpcyBpcyBjcml0aWNhbCBmb3IgZ2V0dGluZyB0aGUgcmlnaHQgYmFsYW5jZSBvZiBmdW5jdGlvbmFsaXR5LCBzZWN1cml0eSwgYW5kIHBlcmZvcm1hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzMwMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjAwOjEyLjY0NzU2MDE0MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAyODpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAyOTpcXHRcXHRzZWxlY3QgQlBGXFxuICAzMDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDMxOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzI6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzM6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICAzNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDA6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MDA6MTIuNjQ3NjQyNjUxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1MTI3Njc0NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIERpc2Fzc2VtYmx5IGFuZCBWZXJpZmljYXRpb24gQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9uLCBzbyBJJ2xsIGNoZWNrIHRoZSBmb2N1cyBzeW1ib2xzLiBMb29rcyBsaWtlIHRoZSBtb2RpZmljYXRpb24gY2VudGVycyBhcm91bmQgYHByaW50X2JwZl9pbnNuYCBpbiBga2VybmVsL2JwZi9kaXNhc20uY2AuIFRoYXQncyB0aGUgZnVuY3Rpb24uIFJlbGV2YW50IGNhbGxlcnMgc2VlbSB0byBiZSBgYnBmX3ZlcmJvc2VfaW5zbmAgYW5kIGBmb3JtYXRfZGlzYXNtX2xpbmVgLlxuXG5Ob3csIGlzIGBwcmludF9icGZfaW5zbmAgYSBzdGF0aWMgaGVscGVyIG9yIGEgZ2xvYmFsPyBMZXQgbWUgY2hlY2sgbGluZSAxODYuLi4gQWgsIGl0J3MgZ2xvYmFsLiBHb29kLiBUaGF0IGNsYXJpZmllcyBpdHMgc2NvcGUuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayBvdGhlciBzeW1ib2xzLiBJIHNlZSBgYnBmX3ZlcmJvc2VfaW5zbmAgYWxzbyBhcHBlYXJzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGlzIGlzIHR5cGljYWw7IEknZCBleHBlY3QgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IGFjcm9zcyB0aG9zZSBkb21haW5zLlxuXG5UaW1lIHRvIGFwcGx5IG15IEZvY3VzU3ltYm9scyBydWxlcy4gSSBuZWVkIHRvIGF2b2lkIGxpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoZXNlIGZ1bmN0aW9ucywgYHByaW50X2JwZl9pbnNuYCwgYW5kIGBicGZfdmVyYm9zZV9pbnNuYCwgYXJlIHByZXR0eSBzcGVjaWZpYyB0byBCUEYgZGlzYXNzZW1ibHkgYW5kIHZlcmlmaWVyIGxvZ2dpbmcsIHNvIHRoZXkgbWVldCB0aGUgY3JpdGVyaWEgZm9yIGEgdGFyZ2V0ZWQgZW50cnlwb2ludC4gVGhhdCdzIGdvb2QuXG5cbk5leHQsIEknbGwgcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgRW5hYmxlQ29uZmlncy4gTGV0J3Mgc2VlLi4uIFllcCwgYEJQRl9TWVNDQUxMYCBpcyByZWxldmFudCBoZXJlLlxuXG5GaW5hbGx5LCBJJ2xsIGRvdWJsZS1jaGVjayBteSByZWFzb25pbmcuIFRoZSBwYXRjaCBpbXBsZW1lbnRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgcHJpbnRfYnBmX2luc24oKWAgdG8gYWRkcmVzcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2l0aGluIGBicGZfbGRzeF9zdHJpbmdgIHdoZW4gZGVhbGluZyB3aXRoIHNpZ24tZXh0ZW5kZWQgNjQtYml0IGxvYWQgb3BlcmF0aW9ucyAoc3BlY2lmaWNhbGx5IGBCUEZfTUVNU1hgIHdpdGggYEJQRl9EV2ApLiBUaGlzIGNvZGUgaXMgY29yZSBCUEYsIGFuZCBpdCdzIHJlYWNoZWQgdmlhIGBicGYoQlBGX1BST0dfTE9BRClgIGR1cmluZyB2ZXJpZmljYXRpb24vbG9nZ2luZy4gVGhpcyBpcyBhbGwgc3RhbmRhcmQuXG5cbkFscmlnaHQsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzYzLCJPdXRwdXRUb2tlbnMiOjEzMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjAwOjE5LjE2MDQxMjYwN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMzY1NDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInByaW50X2JwZl9pbnNuXCIsXG4gICAgXCJicGZfdmVyYm9zZV9pbnNuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kYXJ5L3ZhbGlkaXR5IGNoZWNrIGluIHByaW50X2JwZl9pbnNuKCkgd2l0aGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdG8gaGFuZGxlIGludmFsaWQgc2lnbi1leHRlbmRlZCA2NC1iaXQgbG9hZHMgKEJQRl9NRU1TWCB3aXRoIEJQRl9EVykgYW5kIHByZXZlbnQgYWNjZXNzaW5nIHVuZGVmaW5lZCBhcnJheSBpbmRpY2VzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgZXhlY3V0ZWQgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiBhbmQgZGlzYXNzZW1ibHkgdmlhIHN5c19icGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcmludF9icGZfaW5zblwiLFxuICAgIFwiYnBmX3ZlcmJvc2VfaW5zblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZGFyeS92YWxpZGl0eSBjaGVjayBpbiBwcmludF9icGZfaW5zbigpIHdpdGhpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRvIGhhbmRsZSBpbnZhbGlkIHNpZ24tZXh0ZW5kZWQgNjQtYml0IGxvYWRzIChCUEZfTUVNU1ggd2l0aCBCUEZfRFcpIGFuZCBwcmV2ZW50IGFjY2Vzc2luZyB1bmRlZmluZWQgYXJyYXkgaW5kaWNlcy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUga2VybmVsIGxvZ2ljIGV4ZWN1dGVkIGR1cmluZyBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24gYW5kIGRpc2Fzc2VtYmx5IHZpYSBzeXNfYnBmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDowMDoxOS4yNTA3ODg5NjFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzQyNDczOTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MDA6MTkuMjUxNTE3MTQxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjYzNDE3Mzk2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByZXZlbnRzIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgcmVhZCBpbiBrZXJuZWwvYnBmL2Rpc2FzbS5jIGJ5IGFkZGluZyBhIGNoZWNrIGZvciBCUEZfTERYIGluc3RydWN0aW9ucyB3aXRoIEJQRl9NRU1TWCBtb2RlIGFuZCBCUEZfRFcgc2l6ZSBiZWZvcmUgaW5kZXhpbmcgaW50byBicGZfbGRzeF9zdHJpbmdbXS4gU2luY2UgYnBmX2xkc3hfc3RyaW5nIG9ubHkgZGVmaW5lcyBlbnRyaWVzIGZvciBCUEZfQiwgQlBGX0gsIGFuZCBCUEZfVyAoaW5kaWNlcyAwLi4yKSwgaW5kZXhpbmcgd2l0aCBCUEZfRFcgKGluZGV4IDMpIHJlc3VsdGVkIGluIGEgZ2xvYmFsLW91dC1vZi1ib3VuZHMgYWNjZXNzLiBHbG9iYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgcG90ZW50aWFsIE5VTEwgZGVyZWZlcmVuY2VzIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcywgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBkYXRhIHByb3BhZ2F0aW9uLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MWQ0MzQ5NTk5NjE2MmNhZWY5ZTk3OGUxNzNiMDhkY2YwN2ZlNjMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxOTo1OToyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZGlzYXNtLmMgYi9rZXJuZWwvYnBmL2Rpc2FzbS5jXG5pbmRleCA1MGIzY2E1MTQ5YTBhLi43MGMyYjI4MWNmZTk0IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9kaXNhc20uY1xuKysrIGIva2VybmVsL2JwZi9kaXNhc20uY1xuQEAgLTI5OSw2ICsyOTksMTAgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIkJVR19sZHhfJTAyeFwiLCBpbnNuLVx1MDAzZWNvZGUpO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuK1x0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNU1ggXHUwMDI2XHUwMDI2IEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0RXKSB7XG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIkJVR19sZHN4XyUwMnhcIiwgaW5zbi1cdTAwM2Vjb2RlKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbiBcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSAqKCVzICopKHIlZCAlK2QpXCIsXG4gXHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0QlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNID9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjAwOjE5LjI1MTUxODE0MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDk5MzUyMTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpc3NlY3RpbmcgdGhlIEJQRiBEaXNhc3NlbWJseSBDb2RlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIHNwZWNpZmljIGNoYW5nZSBhbmQgdGhlIGNvZGUgYXJvdW5kIGl0IGluIGBrZXJuZWwvYnBmL2Rpc2FzbS5jYC4gVGhlIGRpZmYgaXRzZWxmIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDsgaXQncyBhZGRpbmcgYSBuZXcgY2hlY2suIEkgcXVpY2tseSB6ZXJvIGluIG9uIHRoZSBhZGRlZCBgaWZgIHN0YXRlbWVudC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGJ1ZyBpbiB0aGUgZGlzYXNzZW1ibGVyLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgQlBGX01FTVNYYCBpbnN0cnVjdGlvbnMgd2l0aCBhIGBCUEZfRFdgIHNpemUuIFRoZSBjb21tZW50IFwiQlVHX2xkc3hfJTAyeFwiIHN1Z2dlc3RzIGFuIGVycm9yIGNvbmRpdGlvbiBpcyBiZWluZyBpZGVudGlmaWVkLCBwcm9iYWJseSByZWxhdGVkIHRvIHNpZ24gZXh0ZW5zaW9uIGR1cmluZyBtZW1vcnkgbG9hZCBvcGVyYXRpb25zLlxuXG5NeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBpcyBndWFyZGluZyBhZ2FpbnN0IGFuIHVuZGVmaW5lZCBiZWhhdmlvci4gVGhpcyBhZGRpdGlvbmFsIGNoZWNrIGlzIGxpa2VseSBhaW1lZCBhdCBwcmV2ZW50aW5nIGNyYXNoZXMgb3IgaW5jb3JyZWN0IGludGVycHJldGF0aW9ucyB3aGVuIGhhbmRsaW5nIGNlcnRhaW4gQlBGIGluc3RydWN0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGUgYWRkZWQgY2hlY2sgYWRkcmVzc2VzIGBCUEZfTUVNU1hgIG1vZGUgd2l0aCBhIGRvdWJsZS13b3JkIHNpemUuIFRoZSBmb3JtYXR0aW5nIG9mIHRoZSBgdmVyYm9zZWAgY2FsbCBpcyBjb25zaXN0ZW50IHdpdGggZXhpc3RpbmcgZGVidWdnaW5nIG91dHB1dHMsIHNvIHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGFkZGl0aW9uIGZvciBlcnJvciByZXBvcnRpbmcgZHVyaW5nIGRpc2Fzc2VtYmx5LiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ2Qgc2F5IHRoaXMgaXMgYSBkZWZlbnNpdmUgbWVhc3VyZSB0byBlbnN1cmUgdGhlIGRpc2Fzc2VtYmxlciBpcyByb2J1c3Qgd2hlbiBmYWNpbmcgdGhlc2UgdHlwZXMgb2YgbWVtb3J5IGxvYWQgaW5zdHJ1Y3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MDA6MjQuMzUwODczNTI5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvZGlzYXNtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjcwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjcwOlxcdFxcdFxcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcXHUwMDI2XFx1MDAyNlxcbiAyNzE6XFx0XFx0XFx0XFx0ICAgaW5zbi1cXHUwMDNlaW1tID09IEJQRl9MT0FEX0FDUSkge1xcbiAyNzI6XFx0XFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByJWQgPSBsb2FkX2FjcXVpcmUoKCVzICopKHIlZCAlK2QpKVxcXCIsXFxuIDI3MzpcXHRcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbiAyNzQ6XFx0XFx0XFx0XFx0XFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdLFxcbiAyNzU6XFx0XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlc3JjX3JlZywgaW5zbi1cXHUwMDNlb2ZmKTtcXG4gMjc2OlxcdFxcdFxcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcXHUwMDI2XFx1MDAyNlxcbiAyNzc6XFx0XFx0XFx0XFx0ICAgaW5zbi1cXHUwMDNlaW1tID09IEJQRl9TVE9SRV9SRUwpIHtcXG4gMjc4OlxcdFxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgc3RvcmVfcmVsZWFzZSgoJXMgKikociVkICUrZCksIHIlZClcXFwiLFxcbiAyNzk6XFx0XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gMjgwOlxcdFxcdFxcdFxcdFxcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSBcXHUwMDNlXFx1MDAzZSAzXSxcXG4gMjgxOlxcdFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcsIGluc24tXFx1MDAzZW9mZiwgaW5zbi1cXHUwMDNlc3JjX3JlZyk7XFxuIDI4MjpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyODM6XFx0XFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIkJVR18lMDJ4XFxcIiwgaW5zbi1cXHUwMDNlY29kZSk7XFxuIDI4NDpcXHRcXHRcXHR9XFxuIDI4NTpcXHRcXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9TVCkge1xcbiAyODY6XFx0XFx0XFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9NRU0pIHtcXG4gMjg3OlxcdFxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgKiglcyAqKShyJWQgJStkKSA9ICVkXFxcIixcXG4gMjg4OlxcdFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsXFxuIDI4OTpcXHRcXHRcXHRcXHRcXHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuIDI5MDpcXHRcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbiAyOTE6XFx0XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlb2ZmLCBpbnNuLVxcdTAwM2VpbW0pO1xcbiAyOTI6XFx0XFx0XFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSAweGMwIC8qIEJQRl9OT1NQRUMsIG5vIFVBUEkgKi8pIHtcXG4gMjkzOlxcdFxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgbm9zcGVjXFxcIiwgaW5zbi1cXHUwMDNlY29kZSk7XFxuIDI5NDpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyOTU6XFx0XFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIkJVR19zdF8lMDJ4XFxcIiwgaW5zbi1cXHUwMDNlY29kZSk7XFxuIDI5NjpcXHRcXHRcXHR9XFxuIDI5NzpcXHRcXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9MRFgpIHtcXG4gMjk4OlxcdFxcdFxcdGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSAhPSBCUEZfTUVNIFxcdTAwMjZcXHUwMDI2IEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9NRU1TWCkge1xcbiAyOTk6XFx0XFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIkJVR19sZHhfJTAyeFxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbiAzMDA6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAzMDE6XFx0XFx0XFx0fVxcbiAzMDI6XFx0XFx0XFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9NRU1TWCBcXHUwMDI2XFx1MDAyNiBCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfRFcpIHtcXG4gMzAzOlxcdFxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCJCVUdfbGRzeF8lMDJ4XFxcIiwgaW5zbi1cXHUwMDNlY29kZSk7XFxuIDMwNDpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDMwNTpcXHRcXHRcXHR9XFxuIDMwNjpcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9ICooJXMgKikociVkICUrZClcXFwiLFxcbiAzMDc6XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSwgaW5zbi1cXHUwMDNlZHN0X3JlZyxcXG4gMzA4OlxcdFxcdFxcdFxcdEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9NRU0gP1xcbiAzMDk6XFx0XFx0XFx0XFx0XFx0IGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSBcXHUwMDNlXFx1MDAzZSAzXSA6XFxuIDMxMDpcXHRcXHRcXHRcXHRcXHQgYnBmX2xkc3hfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdLFxcbiAzMTE6XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlc3JjX3JlZywgaW5zbi1cXHUwMDNlb2ZmKTtcXG4gMzEyOlxcdFxcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEKSB7XFxuIDMxMzpcXHRcXHRcXHRpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FCUykge1xcbiAzMTQ6XFx0XFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByMCA9ICooJXMgKilza2JbJWRdXFxcIixcXG4gMzE1OlxcdFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsXFxuIDMxNjpcXHRcXHRcXHRcXHRcXHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuIDMxNzpcXHRcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VpbW0pO1xcbiAzMTg6XFx0XFx0XFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfSU5EKSB7XFxuIDMxOTpcXHRcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIwID0gKiglcyAqKXNrYltyJWQgKyAlZF1cXFwiLFxcbiAzMjA6XFx0XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gMzIxOlxcdFxcdFxcdFxcdFxcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSBcXHUwMDNlXFx1MDAzZSAzXSxcXG4gMzIyOlxcdFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZXNyY19yZWcsIGluc24tXFx1MDAzZWltbSk7XFxuIDMyMzpcXHRcXHRcXHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9JTU0gXFx1MDAyNlxcdTAwMjZcXG4gMzI0OlxcdFxcdFxcdFxcdCAgIEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9EVykge1xcbiAzMjU6XFx0XFx0XFx0XFx0LyogQXQgdGhpcyBwb2ludCwgd2UgYWxyZWFkeSBtYWRlIHN1cmUgdGhhdCB0aGUgc2Vjb25kXFxuIDMyNjpcXHRcXHRcXHRcXHQgKiBwYXJ0IG9mIHRoZSBsZGltbTY0IGluc24gaXMgYWNjZXNzaWJsZS5cXG4gMzI3OlxcdFxcdFxcdFxcdCAqL1xcbiAzMjg6XFx0XFx0XFx0XFx0dTY0IGltbSA9ICgodTY0KShpbnNuICsgMSktXFx1MDAzZWltbSBcXHUwMDNjXFx1MDAzYyAzMikgfCAodTMyKWluc24tXFx1MDAzZWltbTtcXG4gMzI5OlxcdFxcdFxcdFxcdGJvb2wgaXNfcHRyID0gaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9GRCB8fFxcbiAzMzA6XFx0XFx0XFx0XFx0XFx0ICAgICAgaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9WQUxVRSB8fFxcbiAzMzE6XFx0XFx0XFx0XFx0XFx0ICAgICAgaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9JRFggfHxcXG4gMzMyOlxcdFxcdFxcdFxcdFxcdCAgICAgIGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19NQVBfSURYX1ZBTFVFIHx8XFxuIDMzMzpcXHRcXHRcXHRcXHRcXHQgICAgICBpbnNuLVxcdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fQlRGX0lEO1xcbiAzMzQ6XFx0XFx0XFx0XFx0Y2hhciB0bXBbNjRdO1xcbiAzMzU6XFx0XFxuIDMzNjpcXHRcXHRcXHRcXHRpZiAoaXNfcHRyIFxcdTAwMjZcXHUwMDI2ICFhbGxvd19wdHJfbGVha3MpXFxuIDMzNzpcXHRcXHRcXHRcXHRcXHRpbW0gPSAwO1xcbiAzMzg6XFx0XFxuIDMzOTpcXHRcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9ICVzXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MDA6MjQuMzUwOTY2ODQ5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2ODg0MzgyNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgQlBGIERpc2Fzc2VtYmx5IEZ1bmN0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGJwZl9sZHN4X3N0cmluZ2AgbGl2ZXMgaW4gdGhlIGtlcm5lbCdzIEJQRiBkaXNhc3NlbWJseSBjb2RlLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgYGtlcm5lbC9icGYvZGlzYXNtLmNgLiBUaGF0IGZpbGUgaXMgdGhlIG1vc3QgbGlrZWx5IGxvY2F0aW9uIGZvciB0aGF0IHR5cGUgb2YgZnVuY3Rpb24sIGVzcGVjaWFsbHkgZ2l2ZW4gaXRzIG5hbWUuIEknbSBnb2luZyB0byBqdW1wIGluIHRoZXJlIGFuZCBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZGVmaW5pdGlvbi4gSXQgd2lsbCBiZSBoZWxwZnVsIHRvIHNlZSB3aGVyZSBpdCdzIGJlaW5nIHVzZWQgdG9vLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbXBpbGF0aW9uIGZsYWdzIEkgc2hvdWxkIGxvb2sgb3V0IGZvciwgb3IgcGVyaGFwcyBpZiB0aGVyZSBhcmUgYW55IGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuIEkgd2lsbCBzdGFydCBieSBmaW5kaW5nIHRoZSBkZWZpbml0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDM5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDowMDoyNi4wMzk0MTI4MzRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvZGlzYXNtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuICAgMjpcXHQvKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxNCBQTFVNZ3JpZCwgaHR0cDovL3BsdW1ncmlkLmNvbVxcbiAgIDM6XFx0ICogQ29weXJpZ2h0IChjKSAyMDE2IEZhY2Vib29rXFxuICAgNDpcXHQgKi9cXG4gICA1OlxcdFxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbiAgIDc6XFx0XFxuICAgODpcXHQjaW5jbHVkZSBcXFwiZGlzYXNtLmhcXFwiXFxuICAgOTpcXHRcXG4gIDEwOlxcdCNkZWZpbmUgX19CUEZfRlVOQ19TVFJfRk4oeCkgW0JQRl9GVU5DXyAjIyB4XSA9IF9fc3RyaW5naWZ5KGJwZl8gIyMgeClcXG4gIDExOlxcdHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZnVuY19pZF9zdHJbXSA9IHtcXG4gIDEyOlxcdFxcdF9fQlBGX0ZVTkNfTUFQUEVSKF9fQlBGX0ZVTkNfU1RSX0ZOKVxcbiAgMTM6XFx0fTtcXG4gIDE0OlxcdCN1bmRlZiBfX0JQRl9GVU5DX1NUUl9GTlxcbiAgMTU6XFx0XFxuICAxNjpcXHRzdGF0aWMgY29uc3QgY2hhciAqX19mdW5jX2dldF9uYW1lKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcXG4gIDE3OlxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gIDE4OlxcdFxcdFxcdFxcdFxcdCAgIGNoYXIgKmJ1ZmYsIHNpemVfdCBsZW4pXFxuICAxOTpcXHR7XFxuICAyMDpcXHRcXHRCVUlMRF9CVUdfT04oQVJSQVlfU0laRShmdW5jX2lkX3N0cikgIT0gX19CUEZfRlVOQ19NQVhfSUQpO1xcbiAgMjE6XFx0XFxuICAyMjpcXHRcXHRpZiAoIWluc24tXFx1MDAzZXNyY19yZWcgXFx1MDAyNlxcdTAwMjZcXG4gIDIzOlxcdFxcdCAgICBpbnNuLVxcdTAwM2VpbW0gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VpbW0gXFx1MDAzYyBfX0JQRl9GVU5DX01BWF9JRCBcXHUwMDI2XFx1MDAyNlxcbiAgMjQ6XFx0XFx0ICAgIGZ1bmNfaWRfc3RyW2luc24tXFx1MDAzZWltbV0pXFxuICAyNTpcXHRcXHRcXHRyZXR1cm4gZnVuY19pZF9zdHJbaW5zbi1cXHUwMDNlaW1tXTtcXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0aWYgKGNicyBcXHUwMDI2XFx1MDAyNiBjYnMtXFx1MDAzZWNiX2NhbGwpIHtcXG4gIDI4OlxcdFxcdFxcdGNvbnN0IGNoYXIgKnJlcztcXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0XFx0cmVzID0gY2JzLVxcdTAwM2VjYl9jYWxsKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBpbnNuKTtcXG4gIDMxOlxcdFxcdFxcdGlmIChyZXMpXFxuICAzMjpcXHRcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbiAgMzM6XFx0XFx0fVxcbiAgMzQ6XFx0XFxuICAzNTpcXHRcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0NBTEwpXFxuICAzNjpcXHRcXHRcXHRzbnByaW50ZihidWZmLCBsZW4sIFxcXCIlK2RcXFwiLCBpbnNuLVxcdTAwM2VpbW0pO1xcbiAgMzc6XFx0XFx0ZWxzZSBpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpXFxuICAzODpcXHRcXHRcXHRzbnByaW50ZihidWZmLCBsZW4sIFxcXCJrZXJuZWwtZnVuY3Rpb25cXFwiKTtcXG4gIDM5OlxcdFxcbiAgNDA6XFx0XFx0cmV0dXJuIGJ1ZmY7XFxuICA0MTpcXHR9XFxuICA0MjpcXHRcXG4gIDQzOlxcdHN0YXRpYyBjb25zdCBjaGFyICpfX2Z1bmNfaW1tX25hbWUoY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxcbiAgNDQ6XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiAgNDU6XFx0XFx0XFx0XFx0XFx0ICAgdTY0IGZ1bGxfaW1tLCBjaGFyICpidWZmLCBzaXplX3QgbGVuKVxcbiAgNDY6XFx0e1xcbiAgNDc6XFx0XFx0aWYgKGNicyBcXHUwMDI2XFx1MDAyNiBjYnMtXFx1MDAzZWNiX2ltbSlcXG4gIDQ4OlxcdFxcdFxcdHJldHVybiBjYnMtXFx1MDAzZWNiX2ltbShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgaW5zbiwgZnVsbF9pbW0pO1xcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHRzbnByaW50ZihidWZmLCBsZW4sIFxcXCIweCVsbHhcXFwiLCAodW5zaWduZWQgbG9uZyBsb25nKWZ1bGxfaW1tKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MDA6MjYuMDM5NTUwNDY0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwNDkyNjAzMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSHVudGluZyBEb3duIGBicGZfbGRzeF9zdHJpbmdgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBicGZfbGRzeF9zdHJpbmdgLiBUaGlzIG1lYW5zIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgaW4gYGRpc2FzbS5jYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgZGlzYXNzZW1ibHktcmVsYXRlZCBjb2RlLCBhbmQgaXQncyBhIHByZXR0eSBnb29kIGJldCB0aGF0IGFueSBsb2dpYyBzcGVjaWZpYyB0byBzdHJpbmctcmVsYXRlZCBCUEYgaW5zdHJ1Y3Rpb25zIHdvdWxkIHJlc2lkZSB0aGVyZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IGBkaXNhc20uY2AgcmV2ZWFscy4gSG9wZWZ1bGx5LCB0aGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYgd2lsbCBiZSBhIGRlYWQgZ2l2ZWF3YXksIGJ1dCBJJ2xsIGJlIHJlYWR5IHRvIGxvb2sgZm9yIHJlbGF0ZWQgbG9naWMgaWYgaXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cy4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDc3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDowMDozMC4wODg4MTQ3NjJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDAwMDkxMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2xkc3hfc3RyaW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvZGlzYXNtLmM9MTA4PXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBicGZfbGRzdF9zdHJpbmdbXSA9IHtcXG4tLVxcbmtlcm5lbC9icGYvZGlzYXNtLmMtMTE0LVxcbmtlcm5lbC9icGYvZGlzYXNtLmM6MTE1OnN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBicGZfbGRzeF9zdHJpbmdbXSA9IHtcXG5rZXJuZWwvYnBmL2Rpc2FzbS5jLTExNi1cXHRbQlBGX1cgXFx1MDAzZVxcdTAwM2UgM10gID0gXFxcInMzMlxcXCIsXFxuLS1cXG5rZXJuZWwvYnBmL2Rpc2FzbS5jPTE4Nj12b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcXG4tLVxcbmtlcm5lbC9icGYvZGlzYXNtLmMtMzA5LVxcdFxcdFxcdFxcdCBicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10gOlxcbmtlcm5lbC9icGYvZGlzYXNtLmM6MzEwOlxcdFxcdFxcdFxcdCBicGZfbGRzeF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxua2VybmVsL2JwZi9kaXNhc20uYy0zMTEtXFx0XFx0XFx0aW5zbi1cXHUwMDNlc3JjX3JlZywgaW5zbi1cXHUwMDNlb2ZmKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MDA6MzIuNTI4ODI5OTRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcxMzE3OTU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgYGtlcm5lbC9icGYvZGlzYXNtLmNgLCBrZWVwaW5nIGluIG1pbmQgbXkgb3duIGRlZXAga25vd2xlZGdlIG9mIEJQRjpcblxuKipEaXNzZWN0aW5nIHRoZSBCUEYgRGlzYXNzZW1ibHkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gbGluZXMgMTA1LTEzMCBvZiBga2VybmVsL2JwZi9kaXNhc20uY2AuIE15IGluaXRpYWwgYXNzdW1wdGlvbiwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRoYXQgdGhpcyBzZWN0aW9uIGZvY3VzZXMgb24gYSBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIEJQRiBkaXNhc3NlbWJseSBwcm9jZXNzLCBwcm9iYWJseSByZWxhdGVkIHRvIGluc3RydWN0aW9uIGRlY29kaW5nIG9yIG91dHB1dCBmb3JtYXR0aW5nLiBJJ20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3Iga2V5IGZ1bmN0aW9uIGNhbGxzIG9yIHZhcmlhYmxlcyB0aGF0IGhpbnQgYXQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSdtIGV4cGVjdGluZyB0byBzZWUgc29tZXRoaW5nIHRoYXQgYnJpZGdlcyB0aGUgZ2FwIGJldHdlZW4gdGhlIHJhdyBpbnN0cnVjdGlvbiBiaXRzIGFuZCBhIGh1bWFuLXJlYWRhYmxlIHJlcHJlc2VudGF0aW9uLlxuXG5JIHdhbnQgdG8ga25vdyBpZiB0aGV5J3JlIGhhbmRsaW5nIHRoaW5ncyBsaWtlIGluc3RydWN0aW9uIHByZWZpeGVzLCBhZGRyZXNzaW5nIG1vZGVzLCBvciBtYXliZSBldmVuIG9wZXJhbmQgZGVjb2RpbmcgaW4gdGhpcyBjaHVuay4gQXJlIHRoZXkgdXNpbmcgYSBsb29rdXAgdGFibGUgZm9yIG9wY29kZSBtbmVtb25pY3M/IEFyZSB0aGVyZSBjYWxscyB0byBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgcHJpbnRpbmcgb2Ygc291cmNlL2Rlc3RpbmF0aW9uIHJlZ2lzdGVycz8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGtleSBsb2dpYyBjb250cm9sbGluZyBpbnN0cnVjdGlvbiByZXByZXNlbnRhdGlvbiBvdXRwdXQuIElmIHRoZXJlJ3MgYW4gYWR2YW5jZWQgZmVhdHVyZSBsaWtlIEpJVCBvcHRpbWl6YXRpb24sIHRoaXMgaXMgcHJvYmFibHkgd2hlcmUgaXTigJlzIGhhbmRsZWQuXG5cbkknbGwgYmUgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueSBvcHRpbWl6YXRpb25zIHRoZSBkZXZlbG9wZXIgbWlnaHQgaGF2ZSBpbXBsZW1lbnRlZCB0aGF0IEknbSBhd2FyZSBvZiBvciBtaWdodCB3YW50IHRvIGxldmVyYWdlLCBmb3IgdGhlIHdvcmsgdGhhdCBJJ20gZG9pbmcuIEZyb20gdGhpcywgSSdsbCBhc3Nlc3Mgd2hldGhlciBpdCBkb2VzIGEgZ29vZCBqb2Igb2YgcHJvcGVybHkgaGFuZGxpbmcgYWxsIHRoZSBpbnN0cnVjdGlvbiBwcmVmaXhlcywgYWRkcmVzc2luZyBtb2RlcywgYW5kIGFueSBtb3JlIGFkdmFuY2VkIGZlYXR1cmVzIHRoZSBwcm9ncmFtIG1heSBiZSBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk0OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjAwOjM1LjI0MjAxNTAzOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9kaXNhc20uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDU6XFx0XFx0W0JQRl9YT1IgXFx1MDAzZVxcdTAwM2UgNF0gID0gXFxcInhvclxcXCIsXFxuIDEwNjpcXHR9O1xcbiAxMDc6XFx0XFxuIDEwODpcXHRzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYnBmX2xkc3Rfc3RyaW5nW10gPSB7XFxuIDEwOTpcXHRcXHRbQlBGX1cgXFx1MDAzZVxcdTAwM2UgM10gID0gXFxcInUzMlxcXCIsXFxuIDExMDpcXHRcXHRbQlBGX0ggXFx1MDAzZVxcdTAwM2UgM10gID0gXFxcInUxNlxcXCIsXFxuIDExMTpcXHRcXHRbQlBGX0IgXFx1MDAzZVxcdTAwM2UgM10gID0gXFxcInU4XFxcIixcXG4gMTEyOlxcdFxcdFtCUEZfRFcgXFx1MDAzZVxcdTAwM2UgM10gPSBcXFwidTY0XFxcIixcXG4gMTEzOlxcdH07XFxuIDExNDpcXHRcXG4gMTE1OlxcdHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBicGZfbGRzeF9zdHJpbmdbXSA9IHtcXG4gMTE2OlxcdFxcdFtCUEZfVyBcXHUwMDNlXFx1MDAzZSAzXSAgPSBcXFwiczMyXFxcIixcXG4gMTE3OlxcdFxcdFtCUEZfSCBcXHUwMDNlXFx1MDAzZSAzXSAgPSBcXFwiczE2XFxcIixcXG4gMTE4OlxcdFxcdFtCUEZfQiBcXHUwMDNlXFx1MDAzZSAzXSAgPSBcXFwiczhcXFwiLFxcbiAxMTk6XFx0fTtcXG4gMTIwOlxcdFxcbiAxMjE6XFx0c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGJwZl9qbXBfc3RyaW5nWzE2XSA9IHtcXG4gMTIyOlxcdFxcdFtCUEZfSkEgXFx1MDAzZVxcdTAwM2UgNF0gICA9IFxcXCJqbXBcXFwiLFxcbiAxMjM6XFx0XFx0W0JQRl9KRVEgXFx1MDAzZVxcdTAwM2UgNF0gID0gXFxcIj09XFxcIixcXG4gMTI0OlxcdFxcdFtCUEZfSkdUIFxcdTAwM2VcXHUwMDNlIDRdICA9IFxcXCJcXHUwMDNlXFxcIixcXG4gMTI1OlxcdFxcdFtCUEZfSkxUIFxcdTAwM2VcXHUwMDNlIDRdICA9IFxcXCJcXHUwMDNjXFxcIixcXG4gMTI2OlxcdFxcdFtCUEZfSkdFIFxcdTAwM2VcXHUwMDNlIDRdICA9IFxcXCJcXHUwMDNlPVxcXCIsXFxuIDEyNzpcXHRcXHRbQlBGX0pMRSBcXHUwMDNlXFx1MDAzZSA0XSAgPSBcXFwiXFx1MDAzYz1cXFwiLFxcbiAxMjg6XFx0XFx0W0JQRl9KU0VUIFxcdTAwM2VcXHUwMDNlIDRdID0gXFxcIlxcdTAwMjZcXFwiLFxcbiAxMjk6XFx0XFx0W0JQRl9KTkUgXFx1MDAzZVxcdTAwM2UgNF0gID0gXFxcIiE9XFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MDA6MzUuMjQyMTM0MTU4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMzUxMDg1NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEJQRiBEaXNhc3NlbWJseSBQYXRjaCBmb3IgS0FTQU4gSW1wbGljYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgYnJhaW4ncyBnb2luZyB0byB0aGUgQlBGIGluc3RydWN0aW9uIGRpc2Fzc2VtYmx5IGxvZ2ljLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiB0aGUgYGJwZl9sZHN4X3N0cmluZ2AgYXJyYXkuIEkgc2VlIGl0IGRlZmluZXMgc3RyaW5nIHJlcHJlc2VudGF0aW9ucyBmb3Igc2lnbmVkIDgtYml0LCAxNi1iaXQsIGFuZCAzMi1iaXQgbG9hZHMuIEJ1dCB3YWl0IGEgbWludXRlLi4uIHdoZXJlJ3MgdGhlIGVudHJ5IGZvciBhIDY0LWJpdCBkb3VibGUtd29yZCAoYEJQRl9EV2ApIGxvYWQ/IFRoZSBjb2RlIGNsZWFybHkgaW1wbGllcyB0aGF0IHRoZSBhcnJheSBpcyBpbmRleGVkIGJ5IHRoZSBzaXplLCBzaGlmdGVkIHJpZ2h0IGJ5IDMgYml0cy4gTGV0J3MgbWFrZSBzdXJlIHRoZSBzaXplcyBhcmUgd2hhdCBJIGV4cGVjdCB0aGVtIHRvIGJlIC0gY2hlY2tpbmcgQlBGIHNpemVzIGNvbmZpcm1zIHRoYXQgQlBGX1cgaXMgMHgwMCwgQlBGX0ggaXMgMHgwOCwgQlBGX0IgaXMgMHgxMCBhbmQgQlBGX0RXIGlzIDB4MTgsIGNvbmZpcm1pbmcgdGhhdCBCUEZfRFcgXHUwMDNlXHUwMDNlIDMgaXMgaW5kZWVkIDMuIFRoaXMgYGJwZl9sZHN4X3N0cmluZ2AgYXJyYXkgaGFzIGEgbWF4aW11bSBpbmRleCBvZiAyLiBTbywgYW55IGF0dGVtcHQgdG8gYWNjZXNzIGBicGZfbGRzeF9zdHJpbmdbM11gIHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzISBUaGF0J3MgYSBjbGFzc2ljIGdsb2JhbCBhcnJheSBvdXQtb2YtYm91bmRzIHJlYWQuIFRoaXMgaXMgYSBiaWcgcmVkIGZsYWcg4oCTIGFueSBhY2Nlc3MgdG8gYGJwZl9sZHN4X3N0cmluZ1szXWAgd291bGQgYmUgb3V0IG9mIHRoZSBhcnJheSdzIGRlZmluZWQgYm91bmRzLlxuXG5Ob3csIHByZXZpb3VzbHksIHRoZSBjb2RlIHdvdWxkIGZhbGwgdGhyb3VnaCB0byB0aGUgdmVyYm9zZSBvdXRwdXQgY29kZSwgYXR0ZW1wdGluZyB0byBwcmludCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgaW5zdHJ1Y3Rpb24sIGluY2x1ZGluZyB0aGlzIGBicGZfbGRzeF9zdHJpbmdgLiBUaHVzLCB0aGUgb3V0LW9mLWJvdW5kcyByZWFkIG9yIE5VTEwgZGVyZWZlcmVuY2Ugd2FzIG9jY3VycmluZy5cblxuVGhlIHBhdGNoJ3MgaW50ZW50IGlzIGNsZWFyOiBpdCBhZGRzIGEgY29uZGl0aW9uYWwgY2hlY2sgdG8gcHJldmVudCB0aGlzIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBJdCdzIGVzc2VudGlhbGx5IHNob3J0LWNpcmN1aXRpbmcgdGhlIGZhdWx0eSBpbmRleGluZyBieSBhZGRpbmcgYW4gZWFybHkgcmV0dXJuIGlmIHRoZSBpbnN0cnVjdGlvbiBpcyBgQlBGX0xEWGAgd2l0aCBgQlBGX01FTVNYYCBtb2RlIGFuZCBgQlBGX0RXYCBzaXplLCB0aHVzIHByZXZlbnRpbmcgdGhlIGJhZCBhY2Nlc3MuIEl0IGludHJvZHVjZXMgYSBtZXNzYWdlLCBpbmRpY2F0aW5nIHRoYXQgdGhlIGRldmVsb3BlciBoYXMgaWRlbnRpZmllZCBhIGJ1ZyByZWxhdGVkIHRvIGBCUEZfRFdgLlxuXG5TbywgdGhlIGtleSBxdWVzdGlvbiBmb3IgbWUgaXM6IGRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgc2FmZXR5IHJpc2tzLCAqZXNwZWNpYWxseSogdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3M/IEFmdGVyIGNhcmVmdWxseSByZXZpZXdpbmcgdGhlIGNvZGUsIHRoZSBhbnN3ZXIgaXMgYSBmaXJtIFwibm8uXCIgVGhpcyBwYXRjaCBvbmx5IGFkZHJlc3NlcyAqZXhpc3RpbmcqIG1lbW9yeSBjb3JydXB0aW9uLiBUaGVyZSdzIG5vIG5ldyBhbGxvY2F0aW9uLCBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZmllbGRzLCBubyBgY29weV90b191c2VyYCwgbm8gY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgYnVnIGlzIGEgc3RyYWlnaHRmb3J3YXJkIG91dC1vZi1ib3VuZHMgcmVhZCBvZiBhIGNvbnN0YW50IHN0cmluZyBhcnJheSAob3IgTlVMTCBkZXJlZmVyZW5jZSksIHdoaWNoIEtBU0FOIHdvdWxkIGltbWVkaWF0ZWx5IGNhdGNoLlxuXG5JJ20gY29uZmlkZW50IHRoYXQgS0FTQU4gYWxyZWFkeSBjb3ZlcnMgdGhpcyBtZW1vcnkgc2FmZXR5IGJ1Zy4gVGhlIHBhdGNoIGRpcmVjdGx5IGFkZHJlc3NlcyBhICpnbG9iYWwqIG91dC1vZi1ib3VuZHMgcmVhZC4gSSdtIG5vdCBzZWVpbmcgYW55IG5ldyBLTVNBTi1zcGVjaWZpYyBjb25jZXJucyBoZXJlLiBUaGUgYHByaW50X2JwZl9pbnNuYCBmdW5jdGlvbiBpdHNlbGYgdGFrZXMgYSBgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuYCwgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhpcyBtYXRjaGVzIHRoZSBlc3RhYmxpc2hlZCBjcml0ZXJpYS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IHdhcnJhbnQgYSBgTmVlZHNLTVNBTiA9IHRydWVgLiBUaGlzIGlzIGEgY2xlYXIgY2FzZSBvZiBcIktBU0FOIGFscmVhZHkgY292ZXJzIHRoaXMuXCIgVGhlIHBhdGNoIGlzIGFjdHVhbGx5ICpmaXhpbmcqIGEgS0FTQU4tZGV0ZWN0YWJsZSBidWcuXG5cbk9rYXksIGxldCdzIGZvcm11bGF0ZSBteSByZWFzb25pbmc6IFRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gYHByaW50X2JwZl9pbnNuKClgIHRoYXQgb2NjdXJzIHdoZW4gZW5jb3VudGVyaW5nIGBCUEZfTERYYCBpbnN0cnVjdGlvbnMgd2l0aCBgQlBGX01FTVNYYCBtb2RlIGFuZCBgQlBGX0RXYCBzaXplLiBUaGlzIG91dC1vZi1ib3VuZHMgcmVhZCBpcyBhIGRpcmVjdCBjb25zZXF1ZW5jZSBvZiBpbmRleGluZyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIGBicGZfbGRzeF9zdHJpbmdbXWAgYXJyYXksIGEgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSBpc3N1ZSB0aGF0IEtBU0FOIChzcGVjaWZpY2FsbHkgZ2xvYmFsIG91dC1vZi1ib3VuZHMpIGVmZmVjdGl2ZWx5IGRldGVjdHMuIFRoZSBwYXRjaCBvbmx5ICpmaXhlcyogdGhpcyBidWcgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGhlYXAgY29ycnVwdGlvbiwgaW5mb3JtYXRpb24gbGVha3MsIG9yIGFueSBvdGhlciBraW5kIG9mIEtNU0FOLXNwZWNpZmljIGlzc3VlLiBUaHVzLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc4NywiT3V0cHV0VG9rZW5zIjoyMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MDA6NDUuNTkzMjIzNjE4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBwcmV2ZW50cyBhbiBvdXQtb2YtYm91bmRzIGFycmF5IHJlYWQgaW4ga2VybmVsL2JwZi9kaXNhc20uYyBieSBhZGRpbmcgYSBjaGVjayBmb3IgQlBGX0xEWCBpbnN0cnVjdGlvbnMgd2l0aCBCUEZfTUVNU1ggbW9kZSBhbmQgQlBGX0RXIHNpemUgYmVmb3JlIGluZGV4aW5nIGludG8gYnBmX2xkc3hfc3RyaW5nW10uIFNpbmNlIGJwZl9sZHN4X3N0cmluZyBvbmx5IGRlZmluZXMgZW50cmllcyBmb3IgQlBGX0IsIEJQRl9ILCBhbmQgQlBGX1cgKGluZGljZXMgMC4uMiksIGluZGV4aW5nIHdpdGggQlBGX0RXIChpbmRleCAzKSByZXN1bHRlZCBpbiBhIGdsb2JhbC1vdXQtb2YtYm91bmRzIGFjY2Vzcy4gR2xvYmFsIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIHBvdGVudGlhbCBOVUxMIGRlcmVmZXJlbmNlcyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMsIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBwcm9wYWdhdGlvbi4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcHJldmVudHMgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSByZWFkIGluIGtlcm5lbC9icGYvZGlzYXNtLmMgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIEJQRl9MRFggaW5zdHJ1Y3Rpb25zIHdpdGggQlBGX01FTVNYIG1vZGUgYW5kIEJQRl9EVyBzaXplIGJlZm9yZSBpbmRleGluZyBpbnRvIGJwZl9sZHN4X3N0cmluZ1tdLiBTaW5jZSBicGZfbGRzeF9zdHJpbmcgb25seSBkZWZpbmVzIGVudHJpZXMgZm9yIEJQRl9CLCBCUEZfSCwgYW5kIEJQRl9XIChpbmRpY2VzIDAuLjIpLCBpbmRleGluZyB3aXRoIEJQRl9EVyAoaW5kZXggMykgcmVzdWx0ZWQgaW4gYSBnbG9iYWwtb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEdsb2JhbCBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBwb3RlbnRpYWwgTlVMTCBkZXJlZmVyZW5jZXMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGRhdGEgcHJvcGFnYXRpb24uIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowcw5db[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 19:32:34 +0000 UTC FinishedAt: 2026-09-04 20:00:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "7bf591f26545f5776a4e42d08c06fd94469766dd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "7bf591f26545f5776a4e42d08c06fd94469766dd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "ed8485eb-f35c-47c6-a8db-2ebdb188da85" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "print_bpf_insn", "bpf_verbose_insn" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHJpbnRfYnBmX2luc24mIzM0OywKICAgICYjMzQ7YnBmX3ZlcmJvc2VfaW5zbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByZXZlbnRzIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgcmVhZCBpbiBrZXJuZWwvYnBmL2Rpc2FzbS5jIGJ5IGFkZGluZyBhIGNoZWNrIGZvciBCUEZfTERYIGluc3RydWN0aW9ucyB3aXRoIEJQRl9NRU1TWCBtb2RlIGFuZCBCUEZfRFcgc2l6ZSBiZWZvcmUgaW5kZXhpbmcgaW50byBicGZfbGRzeF9zdHJpbmdbXS4gU2luY2UgYnBmX2xkc3hfc3RyaW5nIG9ubHkgZGVmaW5lcyBlbnRyaWVzIGZvciBCUEZfQiwgQlBGX0gsIGFuZCBCUEZfVyAoaW5kaWNlcyAwLi4yKSwgaW5kZXhpbmcgd2l0aCBCUEZfRFcgKGluZGV4IDMpIHJlc3VsdGVkIGluIGEgZ2xvYmFsLW91dC1vZi1ib3VuZHMgYWNjZXNzLiBHbG9iYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgcG90ZW50aWFsIE5VTEwgZGVyZWZlcmVuY2VzIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcywgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBkYXRhIHByb3BhZ2F0aW9uLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kYXJ5L3ZhbGlkaXR5IGNoZWNrIGluIHByaW50X2JwZl9pbnNuKCkgd2l0aGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdG8gaGFuZGxlIGludmFsaWQgc2lnbi1leHRlbmRlZCA2NC1iaXQgbG9hZHMgKEJQRl9NRU1TWCB3aXRoIEJQRl9EVykgYW5kIHByZXZlbnQgYWNjZXNzaW5nIHVuZGVmaW5lZCBhcnJheSBpbmRpY2VzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgZXhlY3V0ZWQgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiBhbmQgZGlzYXNzZW1ibHkgdmlhIHN5c19icGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2MWQ0MzQ5NTk5NjE2MmNhZWY5ZTk3OGUxNzNiMDhkY2YwN2ZlNjMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxOTo1OToyNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Rpc2FzbS5jIGIva2VybmVsL2JwZi9kaXNhc20uY1xuaW5kZXggNTBiM2NhNTE0OWEwYS4uNzBjMmIyODFjZmU5NCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvZGlzYXNtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZGlzYXNtLmNcbkBAIC0yOTksNiAmIzQzOzI5OSwxMCBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiBcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0O0JVR19sZHhfJTAyeFwmIzM0OywgaW5zbi1cdTAwM2Vjb2RlKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbiYjNDM7XHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU1TWCBcdTAwMjZcdTAwMjYgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfRFcpIHtcbiYjNDM7XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDtCVUdfbGRzeF8lMDJ4XCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR9XG4gXHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIlZCA9ICooJXMgKikociVkICUmIzQzO2QpXCYjMzQ7LFxuIFx0XHRcdGluc24tXHUwMDNlY29kZSwgaW5zbi1cdTAwM2Vkc3RfcmVnLFxuIFx0XHRcdEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX01FTSA/XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcmludF9icGZfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfdmVyYm9zZV9pbnNuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZGFyeS92YWxpZGl0eSBjaGVjayBpbiBwcmludF9icGZfaW5zbigpIHdpdGhpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRvIGhhbmRsZSBpbnZhbGlkIHNpZ24tZXh0ZW5kZWQgNjQtYml0IGxvYWRzIChCUEZfTUVNU1ggd2l0aCBCUEZfRFcpIGFuZCBwcmV2ZW50IGFjY2Vzc2luZyB1bmRlZmluZWQgYXJyYXkgaW5kaWNlcy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUga2VybmVsIGxvZ2ljIGV4ZWN1dGVkIGR1cmluZyBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24gYW5kIGRpc2Fzc2VtYmx5IHZpYSBzeXNfYnBmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjFkNDM0OTU5OTYxNjJjYWVmOWU5NzhlMTczYjA4ZGNmMDdmZTYzMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMTk6NTk6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Rpc2FzbS5jIGIva2VybmVsL2JwZi9kaXNhc20uYwppbmRleCA1MGIzY2E1MTQ5YTBhLi43MGMyYjI4MWNmZTk0IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2Rpc2FzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZGlzYXNtLmMKQEAgLTI5OSw2ICYjNDM7Mjk5LDEwIEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLAogCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDtCVUdfbGR4XyUwMngmIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiAJCQlyZXR1cm47CiAJCX0KJiM0MzsJCWlmIChCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfTUVNU1ggJmFtcDsmYW1wOyBCUEZfU0laRShpbnNuLSZndDtjb2RlKSA9PSBCUEZfRFcpIHsKJiM0MzsJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0O0JVR19sZHN4XyUwMngmIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQogCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSByJWQgPSAqKCVzICopKHIlZCAlJiM0MztkKSYjMzQ7LAogCQkJaW5zbi0mZ3Q7Y29kZSwgaW5zbi0mZ3Q7ZHN0X3JlZywKIAkJCUJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9NRU0gPwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTYzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEZ1enppbmcgVHJpYWdlIFBhdGNoIGZvciBTeXprYWxsZXIqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkmIzM5O3ZlIGJlZW4gYXNrZWQgdG8gZXZhbHVhdGUgYSBwYXRjaCBpbnRlbmRlZCB0byBpbXByb3ZlIGZ1enppbmcgdHJpYWdlIHdpdGggU3l6a2FsbGVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGFuYWx5emUgdGhlIHBhdGNoIGl0c2VsZiBhbmQgdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBCUEYgZGlzYXNzZW1ibHkgY29kZS4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBga2VybmVsL2JwZi9kaXNhc20uY2AgYXMgdGhlIHByb3ZpZGVkIGRpZmYgcG9pbnRzIHRvIGNoYW5nZXMgdGhlcmUuCgpMb29raW5nIGF0IHRoZSBkaWZmLCBpdCBzZWVtcyBhIG5ldyBjaGVjayBoYXMgYmVlbiBhZGRlZCB3aXRoaW4gdGhlIGBwcmludF9icGZfaW5zbmAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgY2hlY2tpbmcgZm9yIGEgY29tYmluYXRpb24gb2YgYEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9NRU1TWGAgYW5kIGBCUEZfU0laRShpbnNuLSZndDtjb2RlKSA9PSBCUEZfRFdgLiAgVGhpcyBjb21iaW5hdGlvbiBub3cgdHJpZ2dlcnMgYSBuZXcgZGVidWcgbWVzc2FnZSwgJiMzNDtCVUdfbGRzeF8lMDJ4JiMzNDsuIFNvLCBpdCBsb29rcyBsaWtlIHRoaXMgbmV3IGNvZGUgcGF0aCBpcyBpbnRlbmRlZCB0byBmbGFnIG9yIGhpZ2hsaWdodCBhIHNwZWNpZmljIEJQRiBpbnN0cnVjdGlvbiB2YXJpYW50IGR1cmluZyBkaXNhc3NlbWJseS4KCk15IG5leHQgc3RlcCBpcyB0byB1c2UgdGhlIHRvb2xzIGF2YWlsYWJsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHNwZWNpZmljIEJQRiBpbnN0cnVjdGlvbiB2YXJpYW50IChgQlBGX01FTVNYYCBhbmQgYEJQRl9EV2ApIHJlcHJlc2VudHMgYW5kIHdoeSBpdCBtaWdodCBiZSByZWxldmFudCB0byBmdXp6aW5nIHRyaWFnZS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGludG8gdGhlIGJyb2FkZXIgY29udGV4dCBvZiBCUEYgZGlzYXNzZW1ibHkgaW4gdGhlIGtlcm5lbCB0byBmdWxseSBncmFzcCBpdHMgaW1wYWN0LiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gdHJhY2Ugd2hlcmUgYHByaW50X2JwZl9pbnNuYCBpcyBjYWxsZWQgZnJvbS4gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gZmluZCB0aGUgY2FsbHNpdGVzIG9mIHRoYXQgZnVuY3Rpb24sIGFuZCB0aGVuIHVuZGVyc3RhbmQgaG93IHRoYXQgZGlzYXNzZW1ibHkgaXMgdXNlZC4gSXMgaXQgYSBsaXZlIGRpc2Fzc2VtYmx5LCBvciBpcyBpdCB1c2VkIGR1cmluZyBjcmFzaCBhbmFseXNpcywgZm9yIGV4YW1wbGU/IEZpZ3VyaW5nIG91dCB0aGUgZXhlY3V0aW9uIGNvbnRleHQgd2lsbCBwcm92aWRlIHZpdGFsIGluZm9ybWF0aW9uLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBhc3Nlc3Mgd2hldGhlciB0aGUgYWRkZWQgZGVidWcgbWVzc2FnZSBpcyBsaWtlbHkgdG8gY2F0Y2ggb3IgaGlnaGxpZ2h0IGludGVyZXN0aW5nIEJQRiBpbnN0cnVjdGlvbiBzZXF1ZW5jZXMgdGhhdCBtYXkgY29udHJpYnV0ZSB0byBmaW5kaW5nIGJ1Z3MuIEkmIzM5O2xsIGFsc28gYmUgY29uc2lkZXJpbmcgd2hldGhlciBpdCBnZW5lcmF0ZXMgZXhjZXNzaXZlIG5vaXNlLCBvciBpcyBwcmVjaXNlIGVub3VnaCB0byBiZSB1c2VmdWwuIE15IG9iamVjdGl2ZSBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBhZGRpdGlvbiBpcyBlZmZlY3RpdmUgaW4gaGVscGluZyBTeXprYWxsZXIgdHJpYWdlIGZ1enppbmcgcmVzdWx0cywgYW5kIHdoZXRoZXIgaXQgaW50cm9kdWNlcyBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZGlzYXNtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4NTpcdFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfU1QpIHtcbiAyODY6XHRcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX01FTSkge1xuIDI4NzpcdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpICooJXMgKikociVkICUmIzQzO2QpID0gJWRcJiMzNDssXG4gMjg4Olx0XHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gMjg5Olx0XHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gMjkwOlx0XHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsXG4gMjkxOlx0XHRcdFx0XHRpbnNuLVx1MDAzZW9mZiwgaW5zbi1cdTAwM2VpbW0pO1xuIDI5MjpcdFx0XHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gMHhjMCAvKiBCUEZfTk9TUEVDLCBubyBVQVBJICovKSB7XG4gMjkzOlx0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgbm9zcGVjXCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuIDI5NDpcdFx0XHR9IGVsc2Uge1xuIDI5NTpcdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHX3N0XyUwMnhcJiMzNDssIGluc24tXHUwMDNlY29kZSk7XG4gMjk2Olx0XHRcdH1cbiAyOTc6XHRcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEWCkge1xuIDI5ODpcdFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTUVNIFx1MDAyNlx1MDAyNiBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9NRU1TWCkge1xuIDI5OTpcdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHX2xkeF8lMDJ4XCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuIDMwMDpcdFx0XHRcdHJldHVybjtcbiAzMDE6XHRcdFx0fVxuIDMwMjpcdFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNU1ggXHUwMDI2XHUwMDI2IEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0RXKSB7XG4gMzAzOlx0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDtCVUdfbGRzeF8lMDJ4XCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuIDMwNDpcdFx0XHRcdHJldHVybjtcbiAzMDU6XHRcdFx0fVxuIDMwNjpcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSAqKCVzICopKHIlZCAlJiM0MztkKVwmIzM0OyxcbiAzMDc6XHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiAzMDg6XHRcdFx0XHRCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU0gP1xuIDMwOTpcdFx0XHRcdFx0IGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSA6XG4gMzEwOlx0XHRcdFx0XHQgYnBmX2xkc3hfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIDMxMTpcdFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuIDMxMjpcdFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfTEQpIHtcbiAzMTM6XHRcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FCUykge1xuIDMxNDpcdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYlslZF1cJiMzNDssXG4gMzE1Olx0XHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gMzE2Olx0XHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gMzE3Olx0XHRcdFx0XHRpbnNuLVx1MDAzZWltbSk7XG4gMzE4Olx0XHRcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSU5EKSB7XG4gMzE5Olx0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgcjAgPSAqKCVzICopc2tiW3IlZCAmIzQzOyAlZF1cJiMzNDssXG4gMzIwOlx0XHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gMzIxOlx0XHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gMzIyOlx0XHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlaW1tKTtcbiAzMjM6XHRcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9JTU0gXHUwMDI2XHUwMDI2XG4gMzI0Olx0XHRcdFx0ICAgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfRFcpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzcyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gQlBGIERpc2Fzc2VtYmx5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGJwZl9sZHN4X3N0cmluZ2AgYXJyYXksIHNwZWNpZmljYWxseSBpbiBga2VybmVsL2JwZi9kaXNhc20uY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGtlcm5lbCYjMzk7cyBCUEYgZGlzYXNzZW1ibGVyIGxpdmVzLCBzbyBJJiMzOTttIGxpa2VseSBpbnRlcmVzdGVkIGluIGhvdyBpdCByZXByZXNlbnRzIHRoZSBsb2FkL3N0b3JlIGluc3RydWN0aW9ucyBhcyBzdHJpbmdzLiBJdCBsb29rcyBsaWtlIEkgbmVlZCB0byBsb29rIHVwIGhvdyB0aGUgYXJyYXkgaXMgaW1wbGVtZW50ZWQuIEkmIzM5O2xsIGZvY3VzIG9uIGxpbmVzIDEtMTAwIHRvIGdldCBhbiBvdmVydmlldyBvZiB0aGUgc2VjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZGlzYXNtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4gICAyOlx0LyogQ29weXJpZ2h0IChjKSAyMDExLTIwMTQgUExVTWdyaWQsIGh0dHA6Ly9wbHVtZ3JpZC5jb21cbiAgIDM6XHQgKiBDb3B5cmlnaHQgKGMpIDIwMTYgRmFjZWJvb2tcbiAgIDQ6XHQgKi9cbiAgIDU6XHRcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICAgNzpcdFxuICAgODpcdCNpbmNsdWRlIFwmIzM0O2Rpc2FzbS5oXCYjMzQ7XG4gICA5Olx0XG4gIDEwOlx0I2RlZmluZSBfX0JQRl9GVU5DX1NUUl9GTih4KSBbQlBGX0ZVTkNfICMjIHhdID0gX19zdHJpbmdpZnkoYnBmXyAjIyB4KVxuICAxMTpcdHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZnVuY19pZF9zdHJbXSA9IHtcbiAgMTI6XHRcdF9fQlBGX0ZVTkNfTUFQUEVSKF9fQlBGX0ZVTkNfU1RSX0ZOKVxuICAxMzpcdH07XG4gIDE0Olx0I3VuZGVmIF9fQlBGX0ZVTkNfU1RSX0ZOXG4gIDE1Olx0XG4gIDE2Olx0c3RhdGljIGNvbnN0IGNoYXIgKl9fZnVuY19nZXRfbmFtZShjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gIDE3Olx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gIDE4Olx0XHRcdFx0XHQgICBjaGFyICpidWZmLCBzaXplX3QgbGVuKVxuICAxOTpcdHtcbiAgMjA6XHRcdEJVSUxEX0JVR19PTihBUlJBWV9TSVpFKGZ1bmNfaWRfc3RyKSAhPSBfX0JQRl9GVU5DX01BWF9JRCk7XG4gIDIxOlx0XG4gIDIyOlx0XHRpZiAoIWluc24tXHUwMDNlc3JjX3JlZyBcdTAwMjZcdTAwMjZcbiAgMjM6XHRcdCAgICBpbnNuLVx1MDAzZWltbSBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlaW1tIFx1MDAzYyBfX0JQRl9GVU5DX01BWF9JRCBcdTAwMjZcdTAwMjZcbiAgMjQ6XHRcdCAgICBmdW5jX2lkX3N0cltpbnNuLVx1MDAzZWltbV0pXG4gIDI1Olx0XHRcdHJldHVybiBmdW5jX2lkX3N0cltpbnNuLVx1MDAzZWltbV07XG4gIDI2Olx0XG4gIDI3Olx0XHRpZiAoY2JzIFx1MDAyNlx1MDAyNiBjYnMtXHUwMDNlY2JfY2FsbCkge1xuICAyODpcdFx0XHRjb25zdCBjaGFyICpyZXM7XG4gIDI5Olx0XG4gIDMwOlx0XHRcdHJlcyA9IGNicy1cdTAwM2VjYl9jYWxsKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIGluc24pO1xuICAzMTpcdFx0XHRpZiAocmVzKVxuICAzMjpcdFx0XHRcdHJldHVybiByZXM7XG4gIDMzOlx0XHR9XG4gIDM0Olx0XG4gIDM1Olx0XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fQ0FMTClcbiAgMzY6XHRcdFx0c25wcmludGYoYnVmZiwgbGVuLCBcJiMzNDslJiM0MztkXCYjMzQ7LCBpbnNuLVx1MDAzZWltbSk7XG4gIDM3Olx0XHRlbHNlIGlmIChpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKVxuICAzODpcdFx0XHRzbnByaW50ZihidWZmLCBsZW4sIFwmIzM0O2tlcm5lbC1mdW5jdGlvblwmIzM0Oyk7XG4gIDM5Olx0XG4gIDQwOlx0XHRyZXR1cm4gYnVmZjtcbiAgNDE6XHR9XG4gIDQyOlx0XG4gIDQzOlx0c3RhdGljIGNvbnN0IGNoYXIgKl9fZnVuY19pbW1fbmFtZShjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gIDQ0Olx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gIDQ1Olx0XHRcdFx0XHQgICB1NjQgZnVsbF9pbW0sIGNoYXIgKmJ1ZmYsIHNpemVfdCBsZW4pXG4gIDQ2Olx0e1xuICA0NzpcdFx0aWYgKGNicyBcdTAwMjZcdTAwMjYgY2JzLVx1MDAzZWNiX2ltbSlcbiAgNDg6XHRcdFx0cmV0dXJuIGNicy1cdTAwM2VjYl9pbW0oY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgaW5zbiwgZnVsbF9pbW0pO1xuICA0OTpcdFxuICA1MDpcdFx0c25wcmludGYoYnVmZiwgbGVuLCBcJiMzNDsweCVsbHhcJiMzNDssICh1bnNpZ25lZCBsb25nIGxvbmcpZnVsbF9pbW0pO1xuICA1MTpcdFx0cmV0dXJuIGJ1ZmY7XG4gIDUyOlx0fVxuICA1MzpcdFxuICA1NDpcdGNvbnN0IGNoYXIgKmZ1bmNfaWRfbmFtZShpbnQgaWQpXG4gIDU1Olx0e1xuICA1NjpcdFx0aWYgKGlkIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgaWQgXHUwMDNjIF9fQlBGX0ZVTkNfTUFYX0lEIFx1MDAyNlx1MDAyNiBmdW5jX2lkX3N0cltpZF0pXG4gIDU3Olx0XHRcdHJldHVybiBmdW5jX2lkX3N0cltpZF07XG4gIDU4Olx0XHRlbHNlXG4gIDU5Olx0XHRcdHJldHVybiBcJiMzNDt1bmtub3duXCYjMzQ7O1xuICA2MDpcdH1cbiAgNjE6XHRcbiAgNjI6XHRjb25zdCBjaGFyICpjb25zdCBicGZfY2xhc3Nfc3RyaW5nWzhdID0ge1xuICA2MzpcdFx0W0JQRl9MRF0gICAgPSBcJiMzNDtsZFwmIzM0OyxcbiAgNjQ6XHRcdFtCUEZfTERYXSAgID0gXCYjMzQ7bGR4XCYjMzQ7LFxuICA2NTpcdFx0W0JQRl9TVF0gICAgPSBcJiMzNDtzdFwmIzM0OyxcbiAgNjY6XHRcdFtCUEZfU1RYXSAgID0gXCYjMzQ7c3R4XCYjMzQ7LFxuICA2NzpcdFx0W0JQRl9BTFVdICAgPSBcJiMzNDthbHVcJiMzNDssXG4gIDY4Olx0XHRbQlBGX0pNUF0gICA9IFwmIzM0O2ptcFwmIzM0OyxcbiAgNjk6XHRcdFtCUEZfSk1QMzJdID0gXCYjMzQ7am1wMzJcJiMzNDssXG4gIDcwOlx0XHRbQlBGX0FMVTY0XSA9IFwmIzM0O2FsdTY0XCYjMzQ7LFxuICA3MTpcdH07XG4gIDcyOlx0XG4gIDczOlx0Y29uc3QgY2hhciAqY29uc3QgYnBmX2FsdV9zdHJpbmdbMTZdID0ge1xuICA3NDpcdFx0W0JQRl9BREQgXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0OyYjNDM7PVwmIzM0OyxcbiAgNzU6XHRcdFtCUEZfU1VCIFx1MDAzZVx1MDAzZSA0XSAgPSBcJiMzNDstPVwmIzM0OyxcbiAgNzY6XHRcdFtCUEZfTVVMIFx1MDAzZVx1MDAzZSA0XSAgPSBcJiMzNDsqPVwmIzM0OyxcbiAgNzc6XHRcdFtCUEZfRElWIFx1MDAzZVx1MDAzZSA0XSAgPSBcJiMzNDsvPVwmIzM0OyxcbiAgNzg6XHRcdFtCUEZfT1IgIFx1MDAzZVx1MDAzZSA0XSAgPSBcJiMzNDt8PVwmIzM0OyxcbiAgNzk6XHRcdFtCUEZfQU5EIFx1MDAzZVx1MDAzZSA0XSAgPSBcJiMzNDtcdTAwMjY9XCYjMzQ7LFxuICA4MDpcdFx0W0JQRl9MU0ggXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0O1x1MDAzY1x1MDAzYz1cJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI2MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5IHRvIGRpdmUgaW50byB0aGF0IHRleHQgYW5kIHN1bW1hcml6ZSB0aGUgdGhvdWdodCBwcm9jZXNzLiBIZXJlJiMzOTtzIG15IHRha2U6CgoqKkFuYWx5emluZyB0aGUgUmVsZXZhbnQgU2VjdGlvbioqCgpBbHJpZ2h0LCBteSBpbml0aWFsIHJlYWQtdGhyb3VnaCBzdWdnZXN0ZWQgdGhhdCB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIHNlZ21lbnQgb2YgdGhlIHRleHQgdGhhdCBkZXNlcnZlcyBjbG9zZXIgYXR0ZW50aW9uIOKAkyBsaW5lcyA4MCB0aHJvdWdoIDEyMC4gQmFzZWQgb24gbXkgZXhpc3Rpbmcga25vd2xlZGdlIGFuZCB0aGUgY29udGV4dCwgSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIHNlY3Rpb24gbGlrZWx5IGhvdXNlcyB0aGUgY29yZSBvZiB0aGUgYXJndW1lbnQsIHRoZSBjcnVjaWFsIG1ldGhvZG9sb2d5LCBvciBwZXJoYXBzIHRoZSBrZXkgcmVzdWx0cyB0aGF0IGRlbWFuZCBhIGRlZXBlciBleGFtaW5hdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZGlzc2VjdCB0aGF0IHBvcnRpb24gdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBhbmQgZHJhdyBjb25uZWN0aW9ucy4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgY3JpdGljYWwgcGllY2VzIG9mIHRoZSBwdXp6bGUgcmVzaWRlLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZW0uIEkgZXhwZWN0IGl0IHRvIGJlIGEga2V5IGVsZW1lbnQgZm9yIHRoZSBhcnRpY2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9kaXNhc20uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcdFtCUEZfTFNIIFx1MDAzZVx1MDAzZSA0XSAgPSBcJiMzNDtcdTAwM2NcdTAwM2M9XCYjMzQ7LFxuICA4MTpcdFx0W0JQRl9SU0ggXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0O1x1MDAzZVx1MDAzZT1cJiMzNDssXG4gIDgyOlx0XHRbQlBGX05FRyBcdTAwM2VcdTAwM2UgNF0gID0gXCYjMzQ7bmVnXCYjMzQ7LFxuICA4MzpcdFx0W0JQRl9NT0QgXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0OyU9XCYjMzQ7LFxuICA4NDpcdFx0W0JQRl9YT1IgXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0O149XCYjMzQ7LFxuICA4NTpcdFx0W0JQRl9NT1YgXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0Oz1cJiMzNDssXG4gIDg2Olx0XHRbQlBGX0FSU0ggXHUwMDNlXHUwMDNlIDRdID0gXCYjMzQ7c1x1MDAzZVx1MDAzZT1cJiMzNDssXG4gIDg3Olx0XHRbQlBGX0VORCBcdTAwM2VcdTAwM2UgNF0gID0gXCYjMzQ7ZW5kaWFuXCYjMzQ7LFxuICA4ODpcdH07XG4gIDg5Olx0XG4gIDkwOlx0c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGJwZl9hbHVfc2lnbl9zdHJpbmdbMTZdID0ge1xuICA5MTpcdFx0W0JQRl9ESVYgXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0O3MvPVwmIzM0OyxcbiAgOTI6XHRcdFtCUEZfTU9EIFx1MDAzZVx1MDAzZSA0XSAgPSBcJiMzNDtzJT1cJiMzNDssXG4gIDkzOlx0fTtcbiAgOTQ6XHRcbiAgOTU6XHRzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYnBmX21vdnN4X3N0cmluZ1s0XSA9IHtcbiAgOTY6XHRcdFswXSA9IFwmIzM0OyhzOClcJiMzNDssXG4gIDk3Olx0XHRbMV0gPSBcJiMzNDsoczE2KVwmIzM0OyxcbiAgOTg6XHRcdFszXSA9IFwmIzM0OyhzMzIpXCYjMzQ7LFxuICA5OTpcdH07XG4gMTAwOlx0XG4gMTAxOlx0c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGJwZl9hdG9taWNfYWx1X3N0cmluZ1sxNl0gPSB7XG4gMTAyOlx0XHRbQlBGX0FERCBcdTAwM2VcdTAwM2UgNF0gID0gXCYjMzQ7YWRkXCYjMzQ7LFxuIDEwMzpcdFx0W0JQRl9BTkQgXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0O2FuZFwmIzM0OyxcbiAxMDQ6XHRcdFtCUEZfT1IgXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0O29yXCYjMzQ7LFxuIDEwNTpcdFx0W0JQRl9YT1IgXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0O3hvclwmIzM0OyxcbiAxMDY6XHR9O1xuIDEwNzpcdFxuIDEwODpcdHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBicGZfbGRzdF9zdHJpbmdbXSA9IHtcbiAxMDk6XHRcdFtCUEZfVyBcdTAwM2VcdTAwM2UgM10gID0gXCYjMzQ7dTMyXCYjMzQ7LFxuIDExMDpcdFx0W0JQRl9IIFx1MDAzZVx1MDAzZSAzXSAgPSBcJiMzNDt1MTZcJiMzNDssXG4gMTExOlx0XHRbQlBGX0IgXHUwMDNlXHUwMDNlIDNdICA9IFwmIzM0O3U4XCYjMzQ7LFxuIDExMjpcdFx0W0JQRl9EVyBcdTAwM2VcdTAwM2UgM10gPSBcJiMzNDt1NjRcJiMzNDssXG4gMTEzOlx0fTtcbiAxMTQ6XHRcbiAxMTU6XHRzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYnBmX2xkc3hfc3RyaW5nW10gPSB7XG4gMTE2Olx0XHRbQlBGX1cgXHUwMDNlXHUwMDNlIDNdICA9IFwmIzM0O3MzMlwmIzM0OyxcbiAxMTc6XHRcdFtCUEZfSCBcdTAwM2VcdTAwM2UgM10gID0gXCYjMzQ7czE2XCYjMzQ7LFxuIDExODpcdFx0W0JQRl9CIFx1MDAzZVx1MDAzZSAzXSAgPSBcJiMzNDtzOFwmIzM0OyxcbiAxMTk6XHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNjMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIEluc3RydWN0aW9uIFByaW50IEJ1ZyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGJwZl9sZHN4X3N0cmluZ2Agc3RydWN0dXJlLiBJJiMzOTttIGltbWVkaWF0ZWx5IG5vdGljaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZy4gSXQgYXBwZWFycyB0byBiZSBkZWZpbmluZyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9ucyBmb3Igc2lnbmVkIGxvYWRzIGJhc2VkIG9uIHNpemU6IGBzMzJgLCBgczE2YCwgYW5kIGBzOGAuIEJ1dCBob2xkIG9uLi4uIHRoZXJlJiMzOTtzIG5vIGVudHJ5IGZvciBgQlBGX0RXYCwgd2hpY2ggaXMgZG91YmxlLXdvcmQgb3IgNjQtYml0IGxvYWQuIEkgcXVpY2tseSBzZWUgdGhhdCBgQlBGX0RXICZndDsmZ3Q7IDNgIGV2YWx1YXRlcyB0byAzLCB3aGljaCBsYW5kcyBzcXVhcmVseSBpbiB0aGUgTlVMTCBzcGFjZSBvZiB0aGF0IGFycmF5LgoKTm93LCBpZiBgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSlgIGlzIGBCUEZfTUVNU1hgIGFuZCBgQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSlgIGlzIGBCUEZfRFdgLCB0aGVuIHRoZSBjb2RlIGlzIHRyeWluZyB0byBhY2Nlc3MgYSA2NC1iaXQgc2lnbmVkIGxvYWQuIFRoYXQgd291bGQgbWVhbiB3ZSYjMzk7cmUgaW5kZXhpbmcgaW50byBgYnBmX2xkc3hfc3RyaW5nYCBhdCBpbmRleCAzLCB3aGljaCwgYXMgd2UmIzM5O3ZlIGVzdGFibGlzaGVkLCBpcyBgTlVMTGAuIFRoZSBwcm9ibGVtIGlzIHJpZ2h0IHRoZXJlLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGEgY3Jhc2ggaWYgdGhlIGtlcm5lbCB0cmllcyB0byBgcHJpbnRrYCBvciBgdmVyYm9zZWAgbG9nIHRoaXMgdmFsdWUgYXMgYSBzdHJpbmcuIERlcGVuZGluZyBvbiB0aGUgYHZzbnByaW50ZmAgaW1wbGVtZW50YXRpb24sIHRoaXMgY291bGQgZWl0aGVyIGNyYXNoIG9yIHByaW50IGAobnVsbClgLiBOb3QgZ29vZC4KClNvLCB3aGVyZSBpcyBgcHJpbnRfYnBmX2luc25gIGNhbGxlZD8gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxsIHNpdGVzIHRvIHNlZSB3aGVyZSB0aGlzIHBvdGVudGlhbCBidWcgaXMgZXhwb3NlZC4gTGV0JiMzOTtzIGZpbmQgdGhvc2UgY2FsbGVycyBhbmQgc2VlIGhvdyBhbmQgd2hlbiBgcHJpbnRfYnBmX2luc25gIGlzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ByaW50X2JwZl9pbnNuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZGlhZ25vc3RpY3MuYz02MDg9c3RhdGljIHZvaWQgZm9ybWF0X2Rpc2FzbV9saW5lKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCxcbi0tXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtNjMyLVxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jOjYzMzpcdHByaW50X2JwZl9pbnNuKFx1MDAyNmNicywgaW5zbiwgZW52LVx1MDAzZWFsbG93X3B0cl9sZWFrcyk7XG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtNjM0LVx0c2VxX2J1Zl9zdHIoXHUwMDI2Y3R4LnNlcSk7XG4tLVxua2VybmVsL2JwZi9kaXNhc20uYz0xODE9c3RhdGljIGlubGluZSBib29sIGlzX21vdl9wZXJjcHVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi9kaXNhc20uYy0xODUtXG5rZXJuZWwvYnBmL2Rpc2FzbS5jOjE4Njp2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbmtlcm5lbC9icGYvZGlzYXNtLmMtMTg3LVx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvZGlzYXNtLmg9MzA9c3RydWN0IGJwZl9pbnNuX2NicyB7XG4tLVxua2VybmVsL2JwZi9kaXNhc20uaC0zNi1cbmtlcm5lbC9icGYvZGlzYXNtLmg6Mzc6dm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG5rZXJuZWwvYnBmL2Rpc2FzbS5oLTM4LVx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMzc3PXZvaWQgYnBmX3ZlcmJvc2VfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzODQtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzM4NTpcdHByaW50X2JwZl9pbnNuKFx1MDAyNmNicywgaW5zbiwgZW52LVx1MDAzZWFsbG93X3B0cl9sZWFrcyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzM4Ni19XG4tLVxudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jPTIwNT12b2lkIGR1bXBfeGxhdGVkX2pzb24oc3RydWN0IGR1bXBfZGF0YSAqZGQsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbixcbi0tXG50b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmMtMjU3LVx0XHRqc29ud19uYW1lKGpzb25fd3RyLCBcJiMzNDtkaXNhc21cJiMzNDspO1xudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jOjI1ODpcdFx0cHJpbnRfYnBmX2luc24oXHUwMDI2Y2JzLCBpbnNuICYjNDM7IGksIHRydWUpO1xudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jLTI1OS1cbi0tXG50b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmM9MjkwPXZvaWQgZHVtcF94bGF0ZWRfcGxhaW4oc3RydWN0IGR1bXBfZGF0YSAqZGQsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbixcbi0tXG50b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmMtMzM5LVx0XHRwcmludGYoXCYjMzQ7JTR1OiBcJiMzNDssIGkpO1xudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jOjM0MDpcdFx0cHJpbnRfYnBmX2luc24oXHUwMDI2Y2JzLCBpbnNuICYjNDM7IGksIHRydWUpO1xudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jLTM0MS1cdFx0cHJpbnRmKFwmIzM0O1xcblwmIzM0Oyk7XG4tLVxudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jPTM1NT12b2lkIGR1bXBfeGxhdGVkX2Zvcl9ncmFwaChzdHJ1Y3QgZHVtcF9kYXRhICpkZCwgdm9pZCAqYnVmX3N0YXJ0LCB2b2lkICpidWZfZW5kLFxuLS1cbnRvb2xzL2JwZi9icGZ0b29sL3hsYXRlZF9kdW1wZXIuYy00MDYtXHRcdHByaW50ZihcJiMzNDsldTogXCYjMzQ7LCBpbnNuX29mZik7XG50b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmM6NDA3Olx0XHRwcmludF9icGZfaW5zbihcdTAwMjZjYnMsIGN1ciwgdHJ1ZSk7XG50b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmMtNDA4LVx0XHRwcmludGYoXCYjMzQ7XFxcXGxcXFxcXFxuXCYjMzQ7KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuYz0zOD1zdHJ1Y3QgYnBmX2luc24gKmRpc2FzbV9pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgY2hhciAqYnVmLCBzaXplX3QgYnVmX3N6KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jLTUyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmM6NTM6XHRwcmludF9icGZfaW5zbihcdTAwMjZjYnMsIGluc24sIHRydWUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Rpc2FzbV9oZWxwZXJzLmMtNTQtXHQvKiBXZSBzaGFyZSBjb2RlIHdpdGgga2VybmVsIEJQRiBkaXNhc3NlbWJsZXIsIGl0IGFkZHMgJiMzOTsoRkYpICYjMzk7IHByZWZpeFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODgyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZToKCioqQlBGIEluc3RydWN0aW9uIERpc2Fzc2VtYmx5IGFuZCBWZXJib3NlIExvZ2dpbmcqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIHZlcmJvc2UgbG9nZ2luZyBvZiBCUEYgaW5zdHJ1Y3Rpb25zIHdpdGhpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gcHJldHR5IHN1cmUgSSByZW1lbWJlciBgYnBmX3ZlcmJvc2VfaW5zbmAgYmVpbmcgdGhlIGtleSBmdW5jdGlvbiBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gQW5kIHRoZW4sIG9uIHRoZSBkaXNwbGF5IHNpZGUsIEkgaGF2ZSBgZm9ybWF0X2Rpc2FzbV9saW5lYCBpbiBga2VybmVsL2JwZi9kaWFnbm9zdGljcy5jYCB0byBmb3JtYXQgaXQgYWxsLgoKVGhlIHJlYWwgcXVlc3Rpb24gaXMsIHdoZW4gKmV4YWN0bHkqIGRvZXMgYGJwZl92ZXJib3NlX2luc25gIGdldCBjYWxsZWQgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXI/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHRyaWdnZXJpbmcgdGhhdCBsZXZlbCBvZiBkZXRhaWwuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgc2VhcmNoaW5nIHRoZSBjb2RlIGJhc2UgZm9yIGNhbGxzIHRvIGBicGZfdmVyYm9zZV9pbnNuYCBhbmQgc2VlIHdoYXQgY29tZXMgdXAuIEkmIzM5O2xsIGFsc28gY29uc2lkZXIgc2VhcmNoZXMgYXJvdW5kIHZlcmJvc2UgbG9nZ2luZyBzcGVjaWZpY2FsbHkgZHVyaW5nIEJQRiBwcm9ncmFtIGxvYWRpbmcsIHNpbmNlIHRoYXQmIzM5O3Mgb2Z0ZW4gd2hlbiB5b3Ugd2FudCB0aGUgbW9zdCBkZXRhaWxlZCBpbnNwZWN0aW9uLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gd2hlcmUgYW5kIHdoZW4gdGhlc2UgdmVyYm9zZSBsb2dzIGFyZSBnZW5lcmF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl92ZXJib3NlX2luc24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xNjI3PWJvb2wgYnBmX2lzX21heV9nb3RvX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuKTtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTYyOC1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTYyOTp2b2lkIGJwZl92ZXJib3NlX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKTtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTYzMC1ib29sIGJwZl9nZXRfY2FsbF9zdW1tYXJ5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqY2FsbCxcbi0tXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jPTI2NT1zdGF0aWMgaW50IGJhY2t0cmFja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZHgsIGludCBzdWJzZXFfaWR4LFxuLS1cbmtlcm5lbC9icGYvYmFja3RyYWNrLmMtMjg0LVx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JWQ6IFwmIzM0OywgaWR4KTtcbmtlcm5lbC9icGYvYmFja3RyYWNrLmM6Mjg1Olx0XHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTI4Ni1cdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcblwmIzM0Oyk7XG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jPTQ3Nz1zdGF0aWMgdm9pZCBwcmludF9pbnN0YW5jZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgZnVuY19pbnN0YW5jZSAqaW5zdGFuY2UpXG4tLVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTQ5Ny1cdFx0dmVyYm9zZShlbnYsIFwmIzM0OyUzZDogXCYjMzQ7LCBpbnNuX2lkeCk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NDk4Olx0XHRicGZfdmVyYm9zZV9pbnNuKGVudiwgXHUwMDI2aW5zbnNbaW5zbl9pZHhdKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy00OTktXHRcdGluc25fcG9zID0gZW52LVx1MDAzZWxvZy5lbmRfcG9zO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0xMDI5PXN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgaWR4LFxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDQyLVx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslM2Q6IFwmIzM0OywgaWR4KTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDQzOlx0XHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDQ0LVx0XHRcdHByaW50ZWQgPSB0cnVlO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDU2LVx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslM2Q6IFwmIzM0OywgaWR4KTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDU3Olx0XHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDU4LVx0XHRcdHByaW50ZWQgPSB0cnVlO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDY3LVx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslM2Q6IFwmIzM0OywgaWR4KTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoxMDY4Olx0XHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDY5LVx0XHRcdHByaW50ZWQgPSB0cnVlO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0xNTE3PXN0YXRpYyB2b2lkIHByaW50X3N1YnByb2dfYXJnX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNTM4LVx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JTNkOiBcJiMzNDssIGlkeCk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTUzOTpcdFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIFx1MDAyNmluc25zW2lkeF0pO1xua2VybmVsL2JwZi9saXZlbmVzcy5jLTE1NDAtXHRcdHZlcmJvc2UoZW52LCBcJiMzNDtcXG5cJiMzNDspO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0yMjI2PWludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0yMzI2LVx0XHRcdHBvcyA9IGVudi1cdTAwM2Vsb2cuZW5kX3Bvcztcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYzoyMzI3Olx0XHRcdGJwZl92ZXJib3NlX2luc24oZW52LCBcdTAwMjZpbnNuc1tpXSk7XG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjMyOC1cdFx0XHRpbnNuX3BvcyA9IGVudi1cdTAwM2Vsb2cuZW5kX3Bvcztcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzM1OT1jb25zdCBjaGFyICpicGZfZGlzYXNtX2tmdW5jX25hbWUodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzc2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjMzNzc6dm9pZCBicGZfdmVyYm9zZV9pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzc4LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg0NjY9c3RhdGljIGludCBkb19jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODU3Mi1cdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JWQ6IFwmIzM0OywgZW52LVx1MDAzZWluc25faWR4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODU3MzpcdFx0XHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg1NzQtXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1xcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDQxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJQRiBJbnN0cnVjdGlvbiBIYW5kbGluZyBWdWxuZXJhYmlsaXR5IEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBCUEYgaW5zdHJ1Y3Rpb24gaXNzdWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBicGZfdmVyYm9zZV9pbnNuYCBnZXRzIGNhbGxlZCB3aGVuIGxvYWRpbmcgYSBCUEYgcHJvZ3JhbSB3aXRoIGxvZ2dpbmcgZW5hYmxlZCwgb3IgZHVyaW5nIHZlcmlmaWNhdGlvbiBwcm9jZXNzZXMuIEl0IHNlZW1zIGxpa2UgdGhlIHZlcmlmaWVyIGNhbiBlbmNvdW50ZXIgYW55IEJQRiBpbnN0cnVjdGlvbiwgZXZlbiBjb21wbGV0ZWx5IGludmFsaWQgb25lcyBsaWtlIGBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX0RXYC4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIHZlcmlmaWVyIGhhbmRsZXMgdGhlc2UgaW5zdHJ1Y3Rpb25zLiBTcGVjaWZpY2FsbHksIGR1cmluZyBjaGVja3MgbGlrZSBgY2hlY2tfbWVtX2FjY2Vzc2AsIGBkb19jaGVja2AsIGFuZCBgY2hlY2tfY2ZnYC4gSXQgc2VlbXMgdGhhdCB3aGVuIGBicGYoQlBGX1BST0dfTE9BRClgIGlzIGNhbGxlZCB3aXRoIGEgbG9nZ2luZyBsZXZlbCBzZXQsIGBicGZfdmVyYm9zZV9pbnNuYCBwcmludHMgZWFjaCBpbnN0cnVjdGlvbiBiZWZvcmUgaXQgZ2V0cyB2ZXJpZmllZC4KCk5vdyBoZXJlJiMzOTtzIHRoZSBjcnVjaWFsIGJpdC4gSWYgYW4gaW5zdHJ1Y3Rpb24gaGFzIHRoZSBpbnZhbGlkIGNvbWJpbmF0aW9uIEkgbWVudGlvbmVkICgweDk5KSwgYHByaW50X2JwZl9pbnNuYCBub3cgcHJpbnRzIGAmIzM0O0JVR19sZHN4Xzk5JiMzNDtgIGFuZCByZXR1cm5zLiBJdCBwcmV2ZW50cyB3aGF0IHdvdWxkIGhhdmUgYmVlbiBhIE5VTEwgZGVyZWZlcmVuY2UgaW4gdGhlIGZvcm1hdHRpbmcgb2YgdGhpcyBpbnN0cnVjdGlvbiEgUHJldmlvdXNseSwgaXQgd291bGQgdHJ5IHRvIHJlYWQgYSBOVUxMIHBvaW50ZXIgYW5kIGZvcm1hdCB0aGUgc3RyaW5nLiBTbyB0aGUgcGF0Y2ggZG9lcyBwcmV2ZW50IGEgTlVMTCBkZXJlZmVyZW5jZS4KCklzIHRoaXMgY29kZSBhY3R1YWxseSByZWFjaGFibGUgd2l0aGluIHRoZSBrZXJuZWw/IFllcywgYGtlcm5lbC9icGYvZGlzYXNtLmNgIGlzIHBhcnQgb2YgdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSwgd2hpY2ggaXMgZGVmaW5pdGVseSBwYXJ0IG9mIHRoZSBrZXJuZWwsIGFuZCBjYW4gYmUgYWNjZXNzZWQgdmlhIHRoZSBgc3lzX2JwZmAgc3lzY2FsbC4KCk5vdyBJIG5lZWQgdG8gZXZhbHVhdGUgdGhpcyBpbiB0ZXJtcyBvZiBmdXp6aW5nIHBvdGVudGlhbC4gQWNjb3JkaW5nIHRvIHRoZSBjcml0ZXJpYSBJJiMzOTttIHVzaW5nLCBTZWN0aW9uIDMgc3RhdGVzIHRoYXQgJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZSYjMzQ7IGlmIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGNvcmUgc3Vic3lzdGVtcyBsaWtlIEJQRi4KClNlY3Rpb24gMiBzYXlzICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgaWYgaXQmIzM5O3MgcHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZywgZG9jdW1lbnRhdGlvbiwgb3IgYnVpbGQgc3lzdGVtIGNoYW5nZXMuIFRoaXMgaXMgd2hlcmUgSSBoYXZlIHRvIGJlIGNhcmVmdWwuCgpUaGlzIGlzbiYjMzk7dCBwdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nLiBJdCYjMzk7cyBtb2RpZnlpbmcgaG93IGFuIGludmFsaWQgaW5zdHJ1Y3Rpb24gaXMgZGVjb2RlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2VybmVsL2JwZi9kaXNhc20uY2AsIHdoaWNoIGlzIHRoZSBpbnZhbGlkIGluc3RydWN0aW9uIGhhbmRsaW5nIGxvZ2ljLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYGtlcm5lbC9icGYvZGlzYXNtLmNgIGlzIGNvbXBpbGVkIGludG8gYHZtbGludXhgLiBJIHNob3VsZCBjaGVjayB0aGUgTWFrZWZpbGUgaW4gYGtlcm5lbC9icGYvYCB0byB2ZXJpZnkgdGhhdC4KClNvLCB0aGlzIGxvb2tzIGxpa2UgYSBkZWZpbml0ZSAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsgc2l0dWF0aW9uLiBUaGUgcGF0Y2ggY2xlYXJseSB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gYSBjb3JlIEJQRiBzdWJzeXN0ZW0gYnkgbW9kaWZ5aW5nIGhvdyBpdCBoYW5kbGVzIGludmFsaWQgaW5zdHJ1Y3Rpb25zLiBJdCYjMzk7cyBub3QganVzdCBhIG1lc3NhZ2UgY2hhbmdlOyBpdCBjaGFuZ2VzIGNvbnRyb2wgZmxvdyB0byBwcmV2ZW50IGEgTlVMTCBkZXJlZmVyZW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG9iai15IDo9IGNvcmUub1xuICAgMzpcdGlmbmVxICgkKENPTkZJR19CUEZfSklUX0FMV0FZU19PTikseSlcbiAgIDQ6XHQjIF9fX2JwZl9wcm9nX3J1bigpIG5lZWRzIEdDU0UgZGlzYWJsZWQgb24geDg2OyBzZWUgMzE5M2MwODM2ZjIwMyBmb3IgZGV0YWlsc1xuICAgNTpcdGNmbGFncy1ub2djc2UtJChDT05GSUdfWDg2KSQoQ09ORklHX0NDX0lTX0dDQykgOj0gLWZuby1nY3NlXG4gICA2Olx0ZW5kaWZcbiAgIDc6XHRDRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxuICAgODpcdFxuICAgOTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXG4gIDEwOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG4gIDExOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbiAgMTI6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXG4gIDEzOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2xvY2FsX3N0b3JhZ2UubyBicGZfdGFza19zdG9yYWdlLm9cbiAgMTQ6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xuICAxNTpcdG9iai0ke0NPTkZJR19CUEZfTFNNfVx0ICAmIzQzOz0gYnBmX2lub2RlX3N0b3JhZ2Uub1xuICAxNjpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRpc2FzbS5vIG1wcm9nLm9cbiAgMTc6XHRvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xuICAxODpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXG4gIDE5Olx0aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcbiAgMjA6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBhcmVuYS5vIHJhbmdlX3RyZWUub1xuICAyMTpcdGVuZGlmXG4gIDIyOlx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSBkaXNwYXRjaGVyLm9cbiAgMjM6XHRpZmVxICgkKENPTkZJR19ORVQpLHkpXG4gIDI0Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGV2bWFwLm9cbiAgMjU6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXAub1xuICAyNjpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IG9mZmxvYWQub1xuICAyNzpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IG5ldF9uYW1lc3BhY2Uub1xuICAyODpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHRjeC5vXG4gIDI5Olx0ZW5kaWZcbiAgMzA6XHRpZmVxICgkKENPTkZJR19LRVlTKSx5KVxuICAzMTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGtleXMub1xuICAzMjpcdGVuZGlmXG4gIDMzOlx0aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXG4gIDM0Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3RhY2ttYXAub1xuICAzNTpcdGVuZGlmXG4gIDM2Olx0aWZlcSAoJChDT05GSUdfQ0dST1VQUykseSlcbiAgMzc6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xuICAzODpcdGVuZGlmXG4gIDM5Olx0b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICYjNDM7PSBjZ3JvdXAub1xuICA0MDpcdGlmZXEgKCQoQ09ORklHX0lORVQpLHkpXG4gIDQxOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gcmV1c2Vwb3J0X2FycmF5Lm9cbiAgNDI6XHRlbmRpZlxuICA0MzpcdGlmZXEgKCQoQ09ORklHX1NZU0ZTKSx5KVxuICA0NDpcdG9iai0kKENPTkZJR19ERUJVR19JTkZPX0JURikgJiM0Mzs9IHN5c2ZzX2J0Zi5vXG4gIDQ1Olx0ZW5kaWZcbiAgNDY6XHRpZmVxICgkKENPTkZJR19CUEZfSklUKSx5KVxuICA0NzpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9zdHJ1Y3Rfb3BzLm9cbiAgNDg6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXNrLm9cbiAgNDk6XHQjIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcbiAgNTA6XHQjIGRlZHVwbGljYXRlcyBmdW5jdGlvbiBwcm90b3R5cGVzIHdpdGhpblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg5MQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQlBGIERpc2Fzc2VtYmxlciBCdWlsZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRpc2FzbS5vYC4gUmlnaHQsIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgdGhlIGRpc2Fzc2VtYmxlciBvYmplY3QgZmlsZSwgYGRpc2FzbS5vYCwgaXMgb25seSBpbmNsdWRlZCBpbiB0aGUgYnVpbGQgaWYgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IHRvIGVuc3VyZSB0aGUgZGlzYXNzZW1ibGVyIGlzbiYjMzk7dCBidWlsdCB1bmxlc3MgdGhlIGNvcmUgQlBGIHN5c3RlbSBjYWxsIGZ1bmN0aW9uYWxpdHkgaXMgYWxzbyBhdmFpbGFibGUuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpOb3csIEkgbmVlZCB0byBjaGVjayBmb3IgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgc3lzdGVtIGNhbGwgaXMgc2V0IHVwIHByb3Blcmx5LiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgaW5pdC9LY29uZmlnYCBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgcGxhY2VzIGZvciB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIGFuZCB0aGUgQlBGIGNvbmZpZ3VyYXRpb24sIHJlc3BlY3RpdmVseS4gSSBjYW4gcXVpY2tseSBzY2FuIHRoZW0gdG8gc2VlIGlmIGBDT05GSUdfQlBGX1NZU0NBTExgIGRlcGVuZHMgb24gYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGltcGFjdCBvdXIgYnVpbGQgb3IgaGF2ZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgdGhpcyB0byBiZSBzdXJlIHRoaXMgYnVpbGQgd2lsbCBzdWNjZWVkLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBoYXZpbmcgdGhpcyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMDIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlOgoKKipOYXZpZ2F0aW5nIHRoZSBCUEYgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIExldCYjMzk7cyB6ZXJvIGluIG9uIGxpbmUgMjUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlc2UgQlBGIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc3RydWN0dXJlZCwgYW5kIHRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50LiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBkaWZmZXJlbnQgQlBGIGZlYXR1cmVzLiBLbm93aW5nIHRoZSBleGFjdCBvcHRpb25zIGFuZCB0aGVpciBpbnRlcmFjdGlvbnMgaXMgY3J1Y2lhbCBmb3Igb3B0aW1pemluZyB0aGUgY29uZmlndXJhdGlvbiBmb3Igc3BlY2lmaWMgdXNlIGNhc2VzIGFuZCBhcmNoaXRlY3R1cmVzLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBhbGxvdyBtZSB0byBhc3Nlc3MgdGhlIGltcGFjdHMgb2YgZW5hYmxpbmcvZGlzYWJsaW5nIHZhcmlvdXMgQlBGIGZlYXR1cmVzLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBnZXR0aW5nIHRoZSByaWdodCBiYWxhbmNlIG9mIGZ1bmN0aW9uYWxpdHksIHNlY3VyaXR5LCBhbmQgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc2MwoJCQkJCQkJb3V0cHV0OiAxMzIKCQkJCQkJCXRob3VnaHRzOiA0MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIERpc2Fzc2VtYmx5IGFuZCBWZXJpZmljYXRpb24gQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb24sIHNvIEkmIzM5O2xsIGNoZWNrIHRoZSBmb2N1cyBzeW1ib2xzLiBMb29rcyBsaWtlIHRoZSBtb2RpZmljYXRpb24gY2VudGVycyBhcm91bmQgYHByaW50X2JwZl9pbnNuYCBpbiBga2VybmVsL2JwZi9kaXNhc20uY2AuIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uLiBSZWxldmFudCBjYWxsZXJzIHNlZW0gdG8gYmUgYGJwZl92ZXJib3NlX2luc25gIGFuZCBgZm9ybWF0X2Rpc2FzbV9saW5lYC4KCk5vdywgaXMgYHByaW50X2JwZl9pbnNuYCBhIHN0YXRpYyBoZWxwZXIgb3IgYSBnbG9iYWw/IExldCBtZSBjaGVjayBsaW5lIDE4Ni4uLiBBaCwgaXQmIzM5O3MgZ2xvYmFsLiBHb29kLiBUaGF0IGNsYXJpZmllcyBpdHMgc2NvcGUuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgb3RoZXIgc3ltYm9scy4gSSBzZWUgYGJwZl92ZXJib3NlX2luc25gIGFsc28gYXBwZWFycyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gVGhpcyBpcyB0eXBpY2FsOyBJJiMzOTtkIGV4cGVjdCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkgYWNyb3NzIHRob3NlIGRvbWFpbnMuCgpUaW1lIHRvIGFwcGx5IG15IEZvY3VzU3ltYm9scyBydWxlcy4gSSBuZWVkIHRvIGF2b2lkIGxpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoZXNlIGZ1bmN0aW9ucywgYHByaW50X2JwZl9pbnNuYCwgYW5kIGBicGZfdmVyYm9zZV9pbnNuYCwgYXJlIHByZXR0eSBzcGVjaWZpYyB0byBCUEYgZGlzYXNzZW1ibHkgYW5kIHZlcmlmaWVyIGxvZ2dpbmcsIHNvIHRoZXkgbWVldCB0aGUgY3JpdGVyaWEgZm9yIGEgdGFyZ2V0ZWQgZW50cnlwb2ludC4gVGhhdCYjMzk7cyBnb29kLgoKTmV4dCwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgRW5hYmxlQ29uZmlncy4gTGV0JiMzOTtzIHNlZS4uLiBZZXAsIGBCUEZfU1lTQ0FMTGAgaXMgcmVsZXZhbnQgaGVyZS4KCkZpbmFsbHksIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBteSByZWFzb25pbmcuIFRoZSBwYXRjaCBpbXBsZW1lbnRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgcHJpbnRfYnBmX2luc24oKWAgdG8gYWRkcmVzcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2l0aGluIGBicGZfbGRzeF9zdHJpbmdgIHdoZW4gZGVhbGluZyB3aXRoIHNpZ24tZXh0ZW5kZWQgNjQtYml0IGxvYWQgb3BlcmF0aW9ucyAoc3BlY2lmaWNhbGx5IGBCUEZfTUVNU1hgIHdpdGggYEJQRl9EV2ApLiBUaGlzIGNvZGUgaXMgY29yZSBCUEYsIGFuZCBpdCYjMzk7cyByZWFjaGVkIHZpYSBgYnBmKEJQRl9QUk9HX0xPQUQpYCBkdXJpbmcgdmVyaWZpY2F0aW9uL2xvZ2dpbmcuIFRoaXMgaXMgYWxsIHN0YW5kYXJkLgoKQWxyaWdodCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHJpbnRfYnBmX2luc24mIzM0OywKICAgICYjMzQ7YnBmX3ZlcmJvc2VfaW5zbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRhcnkvdmFsaWRpdHkgY2hlY2sgaW4gcHJpbnRfYnBmX2luc24oKSB3aXRoaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSB0byBoYW5kbGUgaW52YWxpZCBzaWduLWV4dGVuZGVkIDY0LWJpdCBsb2FkcyAoQlBGX01FTVNYIHdpdGggQlBGX0RXKSBhbmQgcHJldmVudCBhY2Nlc3NpbmcgdW5kZWZpbmVkIGFycmF5IGluZGljZXMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyBleGVjdXRlZCBkdXJpbmcgQlBGIHByb2dyYW0gdmVyaWZpY2F0aW9uIGFuZCBkaXNhc3NlbWJseSB2aWEgc3lzX2JwZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcmludF9icGZfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfdmVyYm9zZV9pbnNuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZGFyeS92YWxpZGl0eSBjaGVjayBpbiBwcmludF9icGZfaW5zbigpIHdpdGhpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRvIGhhbmRsZSBpbnZhbGlkIHNpZ24tZXh0ZW5kZWQgNjQtYml0IGxvYWRzIChCUEZfTUVNU1ggd2l0aCBCUEZfRFcpIGFuZCBwcmV2ZW50IGFjY2Vzc2luZyB1bmRlZmluZWQgYXJyYXkgaW5kaWNlcy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUga2VybmVsIGxvZ2ljIGV4ZWN1dGVkIGR1cmluZyBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24gYW5kIGRpc2Fzc2VtYmx5IHZpYSBzeXNfYnBmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcHJldmVudHMgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSByZWFkIGluIGtlcm5lbC9icGYvZGlzYXNtLmMgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIEJQRl9MRFggaW5zdHJ1Y3Rpb25zIHdpdGggQlBGX01FTVNYIG1vZGUgYW5kIEJQRl9EVyBzaXplIGJlZm9yZSBpbmRleGluZyBpbnRvIGJwZl9sZHN4X3N0cmluZ1tdLiBTaW5jZSBicGZfbGRzeF9zdHJpbmcgb25seSBkZWZpbmVzIGVudHJpZXMgZm9yIEJQRl9CLCBCUEZfSCwgYW5kIEJQRl9XIChpbmRpY2VzIDAuLjIpLCBpbmRleGluZyB3aXRoIEJQRl9EVyAoaW5kZXggMykgcmVzdWx0ZWQgaW4gYSBnbG9iYWwtb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEdsb2JhbCBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBwb3RlbnRpYWwgTlVMTCBkZXJlZmVyZW5jZXMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGRhdGEgcHJvcGFnYXRpb24uIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjFkNDM0OTU5OTYxNjJjYWVmOWU5NzhlMTczYjA4ZGNmMDdmZTYzMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMTk6NTk6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Rpc2FzbS5jIGIva2VybmVsL2JwZi9kaXNhc20uYwppbmRleCA1MGIzY2E1MTQ5YTBhLi43MGMyYjI4MWNmZTk0IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2Rpc2FzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZGlzYXNtLmMKQEAgLTI5OSw2ICYjNDM7Mjk5LDEwIEBAIHZvaWQgcHJpbnRfYnBmX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLAogCQkJdmVyYm9zZShjYnMtJmd0O3ByaXZhdGVfZGF0YSwgJiMzNDtCVUdfbGR4XyUwMngmIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiAJCQlyZXR1cm47CiAJCX0KJiM0MzsJCWlmIChCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfTUVNU1ggJmFtcDsmYW1wOyBCUEZfU0laRShpbnNuLSZndDtjb2RlKSA9PSBCUEZfRFcpIHsKJiM0MzsJCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0O0JVR19sZHN4XyUwMngmIzM0OywgaW5zbi0mZ3Q7Y29kZSk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQogCQl2ZXJib3NlKGNicy0mZ3Q7cHJpdmF0ZV9kYXRhLCAmIzM0OyglMDJ4KSByJWQgPSAqKCVzICopKHIlZCAlJiM0MztkKSYjMzQ7LAogCQkJaW5zbi0mZ3Q7Y29kZSwgaW5zbi0mZ3Q7ZHN0X3JlZywKIAkJCUJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9NRU0gPwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXNzZWN0aW5nIHRoZSBCUEYgRGlzYXNzZW1ibHkgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIHNwZWNpZmljIGNoYW5nZSBhbmQgdGhlIGNvZGUgYXJvdW5kIGl0IGluIGBrZXJuZWwvYnBmL2Rpc2FzbS5jYC4gVGhlIGRpZmYgaXRzZWxmIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDsgaXQmIzM5O3MgYWRkaW5nIGEgbmV3IGNoZWNrLiBJIHF1aWNrbHkgemVybyBpbiBvbiB0aGUgYWRkZWQgYGlmYCBzdGF0ZW1lbnQuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgYnVnIGluIHRoZSBkaXNhc3NlbWJsZXIsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBCUEZfTUVNU1hgIGluc3RydWN0aW9ucyB3aXRoIGEgYEJQRl9EV2Agc2l6ZS4gVGhlIGNvbW1lbnQgJiMzNDtCVUdfbGRzeF8lMDJ4JiMzNDsgc3VnZ2VzdHMgYW4gZXJyb3IgY29uZGl0aW9uIGlzIGJlaW5nIGlkZW50aWZpZWQsIHByb2JhYmx5IHJlbGF0ZWQgdG8gc2lnbiBleHRlbnNpb24gZHVyaW5nIG1lbW9yeSBsb2FkIG9wZXJhdGlvbnMuCgpNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBpcyBndWFyZGluZyBhZ2FpbnN0IGFuIHVuZGVmaW5lZCBiZWhhdmlvci4gVGhpcyBhZGRpdGlvbmFsIGNoZWNrIGlzIGxpa2VseSBhaW1lZCBhdCBwcmV2ZW50aW5nIGNyYXNoZXMgb3IgaW5jb3JyZWN0IGludGVycHJldGF0aW9ucyB3aGVuIGhhbmRsaW5nIGNlcnRhaW4gQlBGIGluc3RydWN0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGUgYWRkZWQgY2hlY2sgYWRkcmVzc2VzIGBCUEZfTUVNU1hgIG1vZGUgd2l0aCBhIGRvdWJsZS13b3JkIHNpemUuIFRoZSBmb3JtYXR0aW5nIG9mIHRoZSBgdmVyYm9zZWAgY2FsbCBpcyBjb25zaXN0ZW50IHdpdGggZXhpc3RpbmcgZGVidWdnaW5nIG91dHB1dHMsIHNvIHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGFkZGl0aW9uIGZvciBlcnJvciByZXBvcnRpbmcgZHVyaW5nIGRpc2Fzc2VtYmx5LiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTtkIHNheSB0aGlzIGlzIGEgZGVmZW5zaXZlIG1lYXN1cmUgdG8gZW5zdXJlIHRoZSBkaXNhc3NlbWJsZXIgaXMgcm9idXN0IHdoZW4gZmFjaW5nIHRoZXNlIHR5cGVzIG9mIG1lbW9yeSBsb2FkIGluc3RydWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Rpc2FzbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzA6XHRcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4gMjcxOlx0XHRcdFx0ICAgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRKSB7XG4gMjcyOlx0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gbG9hZF9hY3F1aXJlKCglcyAqKShyJWQgJSYjNDM7ZCkpXCYjMzQ7LFxuIDI3MzpcdFx0XHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZWRzdF9yZWcsXG4gMjc0Olx0XHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gMjc1Olx0XHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlb2ZmKTtcbiAyNzY6XHRcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgXHUwMDI2XHUwMDI2XG4gMjc3Olx0XHRcdFx0ICAgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX1NUT1JFX1JFTCkge1xuIDI3ODpcdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHN0b3JlX3JlbGVhc2UoKCVzICopKHIlZCAlJiM0MztkKSwgciVkKVwmIzM0OyxcbiAyNzk6XHRcdFx0XHRcdGluc24tXHUwMDNlY29kZSxcbiAyODA6XHRcdFx0XHRcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSxcbiAyODE6XHRcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYsIGluc24tXHUwMDNlc3JjX3JlZyk7XG4gMjgyOlx0XHRcdH0gZWxzZSB7XG4gMjgzOlx0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDtCVUdfJTAyeFwmIzM0OywgaW5zbi1cdTAwM2Vjb2RlKTtcbiAyODQ6XHRcdFx0fVxuIDI4NTpcdFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfU1QpIHtcbiAyODY6XHRcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX01FTSkge1xuIDI4NzpcdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpICooJXMgKikociVkICUmIzQzO2QpID0gJWRcJiMzNDssXG4gMjg4Olx0XHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gMjg5Olx0XHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gMjkwOlx0XHRcdFx0XHRpbnNuLVx1MDAzZWRzdF9yZWcsXG4gMjkxOlx0XHRcdFx0XHRpbnNuLVx1MDAzZW9mZiwgaW5zbi1cdTAwM2VpbW0pO1xuIDI5MjpcdFx0XHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gMHhjMCAvKiBCUEZfTk9TUEVDLCBubyBVQVBJICovKSB7XG4gMjkzOlx0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgbm9zcGVjXCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuIDI5NDpcdFx0XHR9IGVsc2Uge1xuIDI5NTpcdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHX3N0XyUwMnhcJiMzNDssIGluc24tXHUwMDNlY29kZSk7XG4gMjk2Olx0XHRcdH1cbiAyOTc6XHRcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEWCkge1xuIDI5ODpcdFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTUVNIFx1MDAyNlx1MDAyNiBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9NRU1TWCkge1xuIDI5OTpcdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7QlVHX2xkeF8lMDJ4XCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuIDMwMDpcdFx0XHRcdHJldHVybjtcbiAzMDE6XHRcdFx0fVxuIDMwMjpcdFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNU1ggXHUwMDI2XHUwMDI2IEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0RXKSB7XG4gMzAzOlx0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDtCVUdfbGRzeF8lMDJ4XCYjMzQ7LCBpbnNuLVx1MDAzZWNvZGUpO1xuIDMwNDpcdFx0XHRcdHJldHVybjtcbiAzMDU6XHRcdFx0fVxuIDMwNjpcdFx0XHR2ZXJib3NlKGNicy1cdTAwM2Vwcml2YXRlX2RhdGEsIFwmIzM0OyglMDJ4KSByJWQgPSAqKCVzICopKHIlZCAlJiM0MztkKVwmIzM0OyxcbiAzMDc6XHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsIGluc24tXHUwMDNlZHN0X3JlZyxcbiAzMDg6XHRcdFx0XHRCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU0gP1xuIDMwOTpcdFx0XHRcdFx0IGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpIFx1MDAzZVx1MDAzZSAzXSA6XG4gMzEwOlx0XHRcdFx0XHQgYnBmX2xkc3hfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxuIDMxMTpcdFx0XHRcdGluc24tXHUwMDNlc3JjX3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuIDMxMjpcdFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfTEQpIHtcbiAzMTM6XHRcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FCUykge1xuIDMxNDpcdFx0XHRcdHZlcmJvc2UoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgXCYjMzQ7KCUwMngpIHIwID0gKiglcyAqKXNrYlslZF1cJiMzNDssXG4gMzE1Olx0XHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gMzE2Olx0XHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gMzE3Olx0XHRcdFx0XHRpbnNuLVx1MDAzZWltbSk7XG4gMzE4Olx0XHRcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSU5EKSB7XG4gMzE5Olx0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgcjAgPSAqKCVzICopc2tiW3IlZCAmIzQzOyAlZF1cJiMzNDssXG4gMzIwOlx0XHRcdFx0XHRpbnNuLVx1MDAzZWNvZGUsXG4gMzIxOlx0XHRcdFx0XHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10sXG4gMzIyOlx0XHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlaW1tKTtcbiAzMjM6XHRcdFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9JTU0gXHUwMDI2XHUwMDI2XG4gMzI0Olx0XHRcdFx0ICAgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfRFcpIHtcbiAzMjU6XHRcdFx0XHQvKiBBdCB0aGlzIHBvaW50LCB3ZSBhbHJlYWR5IG1hZGUgc3VyZSB0aGF0IHRoZSBzZWNvbmRcbiAzMjY6XHRcdFx0XHQgKiBwYXJ0IG9mIHRoZSBsZGltbTY0IGluc24gaXMgYWNjZXNzaWJsZS5cbiAzMjc6XHRcdFx0XHQgKi9cbiAzMjg6XHRcdFx0XHR1NjQgaW1tID0gKCh1NjQpKGluc24gJiM0MzsgMSktXHUwMDNlaW1tIFx1MDAzY1x1MDAzYyAzMikgfCAodTMyKWluc24tXHUwMDNlaW1tO1xuIDMyOTpcdFx0XHRcdGJvb2wgaXNfcHRyID0gaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fTUFQX0ZEIHx8XG4gMzMwOlx0XHRcdFx0XHQgICAgICBpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19NQVBfVkFMVUUgfHxcbiAzMzE6XHRcdFx0XHRcdCAgICAgIGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9JRFggfHxcbiAzMzI6XHRcdFx0XHRcdCAgICAgIGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9JRFhfVkFMVUUgfHxcbiAzMzM6XHRcdFx0XHRcdCAgICAgIGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0JURl9JRDtcbiAzMzQ6XHRcdFx0XHRjaGFyIHRtcFs2NF07XG4gMzM1Olx0XG4gMzM2Olx0XHRcdFx0aWYgKGlzX3B0ciBcdTAwMjZcdTAwMjYgIWFsbG93X3B0cl9sZWFrcylcbiAzMzc6XHRcdFx0XHRcdGltbSA9IDA7XG4gMzM4Olx0XG4gMzM5Olx0XHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcJiMzNDsoJTAyeCkgciVkID0gJXNcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MzkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIEJQRiBEaXNhc3NlbWJseSBGdW5jdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgYnBmX2xkc3hfc3RyaW5nYCBsaXZlcyBpbiB0aGUga2VybmVsJiMzOTtzIEJQRiBkaXNhc3NlbWJseSBjb2RlLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgYGtlcm5lbC9icGYvZGlzYXNtLmNgLiBUaGF0IGZpbGUgaXMgdGhlIG1vc3QgbGlrZWx5IGxvY2F0aW9uIGZvciB0aGF0IHR5cGUgb2YgZnVuY3Rpb24sIGVzcGVjaWFsbHkgZ2l2ZW4gaXRzIG5hbWUuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbiB0aGVyZSBhbmQgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhlIGRlZmluaXRpb24uIEl0IHdpbGwgYmUgaGVscGZ1bCB0byBzZWUgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZCB0b28uIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29tcGlsYXRpb24gZmxhZ3MgSSBzaG91bGQgbG9vayBvdXQgZm9yLCBvciBwZXJoYXBzIGlmIHRoZXJlIGFyZSBhbnkgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucy4gSSB3aWxsIHN0YXJ0IGJ5IGZpbmRpbmcgdGhlIGRlZmluaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9kaXNhc20uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbiAgIDI6XHQvKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxNCBQTFVNZ3JpZCwgaHR0cDovL3BsdW1ncmlkLmNvbVxuICAgMzpcdCAqIENvcHlyaWdodCAoYykgMjAxNiBGYWNlYm9va1xuICAgNDpcdCAqL1xuICAgNTpcdFxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4gICA3Olx0XG4gICA4Olx0I2luY2x1ZGUgXCYjMzQ7ZGlzYXNtLmhcJiMzNDtcbiAgIDk6XHRcbiAgMTA6XHQjZGVmaW5lIF9fQlBGX0ZVTkNfU1RSX0ZOKHgpIFtCUEZfRlVOQ18gIyMgeF0gPSBfX3N0cmluZ2lmeShicGZfICMjIHgpXG4gIDExOlx0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmdW5jX2lkX3N0cltdID0ge1xuICAxMjpcdFx0X19CUEZfRlVOQ19NQVBQRVIoX19CUEZfRlVOQ19TVFJfRk4pXG4gIDEzOlx0fTtcbiAgMTQ6XHQjdW5kZWYgX19CUEZfRlVOQ19TVFJfRk5cbiAgMTU6XHRcbiAgMTY6XHRzdGF0aWMgY29uc3QgY2hhciAqX19mdW5jX2dldF9uYW1lKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiAgMTc6XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiAgMTg6XHRcdFx0XHRcdCAgIGNoYXIgKmJ1ZmYsIHNpemVfdCBsZW4pXG4gIDE5Olx0e1xuICAyMDpcdFx0QlVJTERfQlVHX09OKEFSUkFZX1NJWkUoZnVuY19pZF9zdHIpICE9IF9fQlBGX0ZVTkNfTUFYX0lEKTtcbiAgMjE6XHRcbiAgMjI6XHRcdGlmICghaW5zbi1cdTAwM2VzcmNfcmVnIFx1MDAyNlx1MDAyNlxuICAyMzpcdFx0ICAgIGluc24tXHUwMDNlaW1tIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VpbW0gXHUwMDNjIF9fQlBGX0ZVTkNfTUFYX0lEIFx1MDAyNlx1MDAyNlxuICAyNDpcdFx0ICAgIGZ1bmNfaWRfc3RyW2luc24tXHUwMDNlaW1tXSlcbiAgMjU6XHRcdFx0cmV0dXJuIGZ1bmNfaWRfc3RyW2luc24tXHUwMDNlaW1tXTtcbiAgMjY6XHRcbiAgMjc6XHRcdGlmIChjYnMgXHUwMDI2XHUwMDI2IGNicy1cdTAwM2VjYl9jYWxsKSB7XG4gIDI4Olx0XHRcdGNvbnN0IGNoYXIgKnJlcztcbiAgMjk6XHRcbiAgMzA6XHRcdFx0cmVzID0gY2JzLVx1MDAzZWNiX2NhbGwoY2JzLVx1MDAzZXByaXZhdGVfZGF0YSwgaW5zbik7XG4gIDMxOlx0XHRcdGlmIChyZXMpXG4gIDMyOlx0XHRcdFx0cmV0dXJuIHJlcztcbiAgMzM6XHRcdH1cbiAgMzQ6XHRcbiAgMzU6XHRcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19DQUxMKVxuICAzNjpcdFx0XHRzbnByaW50ZihidWZmLCBsZW4sIFwmIzM0OyUmIzQzO2RcJiMzNDssIGluc24tXHUwMDNlaW1tKTtcbiAgMzc6XHRcdGVsc2UgaWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpXG4gIDM4Olx0XHRcdHNucHJpbnRmKGJ1ZmYsIGxlbiwgXCYjMzQ7a2VybmVsLWZ1bmN0aW9uXCYjMzQ7KTtcbiAgMzk6XHRcbiAgNDA6XHRcdHJldHVybiBidWZmO1xuICA0MTpcdH1cbiAgNDI6XHRcbiAgNDM6XHRzdGF0aWMgY29uc3QgY2hhciAqX19mdW5jX2ltbV9uYW1lKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbiAgNDQ6XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiAgNDU6XHRcdFx0XHRcdCAgIHU2NCBmdWxsX2ltbSwgY2hhciAqYnVmZiwgc2l6ZV90IGxlbilcbiAgNDY6XHR7XG4gIDQ3Olx0XHRpZiAoY2JzIFx1MDAyNlx1MDAyNiBjYnMtXHUwMDNlY2JfaW1tKVxuICA0ODpcdFx0XHRyZXR1cm4gY2JzLVx1MDAzZWNiX2ltbShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBpbnNuLCBmdWxsX2ltbSk7XG4gIDQ5Olx0XG4gIDUwOlx0XHRzbnByaW50ZihidWZmLCBsZW4sIFwmIzM0OzB4JWxseFwmIzM0OywgKHVuc2lnbmVkIGxvbmcgbG9uZylmdWxsX2ltbSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NzcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkh1bnRpbmcgRG93biBgYnBmX2xkc3hfc3RyaW5nYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGJwZl9sZHN4X3N0cmluZ2AuIFRoaXMgbWVhbnMgSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBpbiBgZGlzYXNtLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRpc2Fzc2VtYmx5LXJlbGF0ZWQgY29kZSwgYW5kIGl0JiMzOTtzIGEgcHJldHR5IGdvb2QgYmV0IHRoYXQgYW55IGxvZ2ljIHNwZWNpZmljIHRvIHN0cmluZy1yZWxhdGVkIEJQRiBpbnN0cnVjdGlvbnMgd291bGQgcmVzaWRlIHRoZXJlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgYGRpc2FzbS5jYCByZXZlYWxzLiBIb3BlZnVsbHksIHRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiB3aWxsIGJlIGEgZGVhZCBnaXZlYXdheSwgYnV0IEkmIzM5O2xsIGJlIHJlYWR5IHRvIGxvb2sgZm9yIHJlbGF0ZWQgbG9naWMgaWYgaXQmIzM5O3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfbGRzeF9zdHJpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9kaXNhc20uYz0xMDg9c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGJwZl9sZHN0X3N0cmluZ1tdID0ge1xuLS1cbmtlcm5lbC9icGYvZGlzYXNtLmMtMTE0LVxua2VybmVsL2JwZi9kaXNhc20uYzoxMTU6c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGJwZl9sZHN4X3N0cmluZ1tdID0ge1xua2VybmVsL2JwZi9kaXNhc20uYy0xMTYtXHRbQlBGX1cgXHUwMDNlXHUwMDNlIDNdICA9IFwmIzM0O3MzMlwmIzM0Oyxcbi0tXG5rZXJuZWwvYnBmL2Rpc2FzbS5jPTE4Nj12b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcbi0tXG5rZXJuZWwvYnBmL2Rpc2FzbS5jLTMwOS1cdFx0XHRcdCBicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSBcdTAwM2VcdTAwM2UgM10gOlxua2VybmVsL2JwZi9kaXNhc20uYzozMTA6XHRcdFx0XHQgYnBmX2xkc3hfc3RyaW5nW0JQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgXHUwMDNlXHUwMDNlIDNdLFxua2VybmVsL2JwZi9kaXNhc20uYy0zMTEtXHRcdFx0aW5zbi1cdTAwM2VzcmNfcmVnLCBpbnNuLVx1MDAzZW9mZik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NDgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGBrZXJuZWwvYnBmL2Rpc2FzbS5jYCwga2VlcGluZyBpbiBtaW5kIG15IG93biBkZWVwIGtub3dsZWRnZSBvZiBCUEY6CgoqKkRpc3NlY3RpbmcgdGhlIEJQRiBEaXNhc3NlbWJseSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGxpbmVzIDEwNS0xMzAgb2YgYGtlcm5lbC9icGYvZGlzYXNtLmNgLiBNeSBpbml0aWFsIGFzc3VtcHRpb24sIGdpdmVuIHRoZSBjb250ZXh0LCBpcyB0aGF0IHRoaXMgc2VjdGlvbiBmb2N1c2VzIG9uIGEgc3BlY2lmaWMgYXNwZWN0IG9mIHRoZSBCUEYgZGlzYXNzZW1ibHkgcHJvY2VzcywgcHJvYmFibHkgcmVsYXRlZCB0byBpbnN0cnVjdGlvbiBkZWNvZGluZyBvciBvdXRwdXQgZm9ybWF0dGluZy4gSSYjMzk7bSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBrZXkgZnVuY3Rpb24gY2FsbHMgb3IgdmFyaWFibGVzIHRoYXQgaGludCBhdCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgc29tZXRoaW5nIHRoYXQgYnJpZGdlcyB0aGUgZ2FwIGJldHdlZW4gdGhlIHJhdyBpbnN0cnVjdGlvbiBiaXRzIGFuZCBhIGh1bWFuLXJlYWRhYmxlIHJlcHJlc2VudGF0aW9uLgoKSSB3YW50IHRvIGtub3cgaWYgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhpbmdzIGxpa2UgaW5zdHJ1Y3Rpb24gcHJlZml4ZXMsIGFkZHJlc3NpbmcgbW9kZXMsIG9yIG1heWJlIGV2ZW4gb3BlcmFuZCBkZWNvZGluZyBpbiB0aGlzIGNodW5rLiBBcmUgdGhleSB1c2luZyBhIGxvb2t1cCB0YWJsZSBmb3Igb3Bjb2RlIG1uZW1vbmljcz8gQXJlIHRoZXJlIGNhbGxzIHRvIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBwcmludGluZyBvZiBzb3VyY2UvZGVzdGluYXRpb24gcmVnaXN0ZXJzPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGxvZ2ljIGNvbnRyb2xsaW5nIGluc3RydWN0aW9uIHJlcHJlc2VudGF0aW9uIG91dHB1dC4gSWYgdGhlcmUmIzM5O3MgYW4gYWR2YW5jZWQgZmVhdHVyZSBsaWtlIEpJVCBvcHRpbWl6YXRpb24sIHRoaXMgaXMgcHJvYmFibHkgd2hlcmUgaXTigJlzIGhhbmRsZWQuCgpJJiMzOTtsbCBiZSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55IG9wdGltaXphdGlvbnMgdGhlIGRldmVsb3BlciBtaWdodCBoYXZlIGltcGxlbWVudGVkIHRoYXQgSSYjMzk7bSBhd2FyZSBvZiBvciBtaWdodCB3YW50IHRvIGxldmVyYWdlLCBmb3IgdGhlIHdvcmsgdGhhdCBJJiMzOTttIGRvaW5nLiBGcm9tIHRoaXMsIEkmIzM5O2xsIGFzc2VzcyB3aGV0aGVyIGl0IGRvZXMgYSBnb29kIGpvYiBvZiBwcm9wZXJseSBoYW5kbGluZyBhbGwgdGhlIGluc3RydWN0aW9uIHByZWZpeGVzLCBhZGRyZXNzaW5nIG1vZGVzLCBhbmQgYW55IG1vcmUgYWR2YW5jZWQgZmVhdHVyZXMgdGhlIHByb2dyYW0gbWF5IGJlIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZGlzYXNtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwNTpcdFx0W0JQRl9YT1IgXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0O3hvclwmIzM0OyxcbiAxMDY6XHR9O1xuIDEwNzpcdFxuIDEwODpcdHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBicGZfbGRzdF9zdHJpbmdbXSA9IHtcbiAxMDk6XHRcdFtCUEZfVyBcdTAwM2VcdTAwM2UgM10gID0gXCYjMzQ7dTMyXCYjMzQ7LFxuIDExMDpcdFx0W0JQRl9IIFx1MDAzZVx1MDAzZSAzXSAgPSBcJiMzNDt1MTZcJiMzNDssXG4gMTExOlx0XHRbQlBGX0IgXHUwMDNlXHUwMDNlIDNdICA9IFwmIzM0O3U4XCYjMzQ7LFxuIDExMjpcdFx0W0JQRl9EVyBcdTAwM2VcdTAwM2UgM10gPSBcJiMzNDt1NjRcJiMzNDssXG4gMTEzOlx0fTtcbiAxMTQ6XHRcbiAxMTU6XHRzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYnBmX2xkc3hfc3RyaW5nW10gPSB7XG4gMTE2Olx0XHRbQlBGX1cgXHUwMDNlXHUwMDNlIDNdICA9IFwmIzM0O3MzMlwmIzM0OyxcbiAxMTc6XHRcdFtCUEZfSCBcdTAwM2VcdTAwM2UgM10gID0gXCYjMzQ7czE2XCYjMzQ7LFxuIDExODpcdFx0W0JQRl9CIFx1MDAzZVx1MDAzZSAzXSAgPSBcJiMzNDtzOFwmIzM0OyxcbiAxMTk6XHR9O1xuIDEyMDpcdFxuIDEyMTpcdHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBicGZfam1wX3N0cmluZ1sxNl0gPSB7XG4gMTIyOlx0XHRbQlBGX0pBIFx1MDAzZVx1MDAzZSA0XSAgID0gXCYjMzQ7am1wXCYjMzQ7LFxuIDEyMzpcdFx0W0JQRl9KRVEgXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0Oz09XCYjMzQ7LFxuIDEyNDpcdFx0W0JQRl9KR1QgXHUwMDNlXHUwMDNlIDRdICA9IFwmIzM0O1x1MDAzZVwmIzM0OyxcbiAxMjU6XHRcdFtCUEZfSkxUIFx1MDAzZVx1MDAzZSA0XSAgPSBcJiMzNDtcdTAwM2NcJiMzNDssXG4gMTI2Olx0XHRbQlBGX0pHRSBcdTAwM2VcdTAwM2UgNF0gID0gXCYjMzQ7XHUwMDNlPVwmIzM0OyxcbiAxMjc6XHRcdFtCUEZfSkxFIFx1MDAzZVx1MDAzZSA0XSAgPSBcJiMzNDtcdTAwM2M9XCYjMzQ7LFxuIDEyODpcdFx0W0JQRl9KU0VUIFx1MDAzZVx1MDAzZSA0XSA9IFwmIzM0O1x1MDAyNlwmIzM0OyxcbiAxMjk6XHRcdFtCUEZfSk5FIFx1MDAzZVx1MDAzZSA0XSAgPSBcJiMzNDshPVwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc4NwoJCQkJCQkJb3V0cHV0OiAyMDIKCQkJCQkJCXRob3VnaHRzOiAxMzE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEJQRiBEaXNhc3NlbWJseSBQYXRjaCBmb3IgS0FTQU4gSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgYnJhaW4mIzM5O3MgZ29pbmcgdG8gdGhlIEJQRiBpbnN0cnVjdGlvbiBkaXNhc3NlbWJseSBsb2dpYy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgYnBmX2xkc3hfc3RyaW5nYCBhcnJheS4gSSBzZWUgaXQgZGVmaW5lcyBzdHJpbmcgcmVwcmVzZW50YXRpb25zIGZvciBzaWduZWQgOC1iaXQsIDE2LWJpdCwgYW5kIDMyLWJpdCBsb2Fkcy4gQnV0IHdhaXQgYSBtaW51dGUuLi4gd2hlcmUmIzM5O3MgdGhlIGVudHJ5IGZvciBhIDY0LWJpdCBkb3VibGUtd29yZCAoYEJQRl9EV2ApIGxvYWQ/IFRoZSBjb2RlIGNsZWFybHkgaW1wbGllcyB0aGF0IHRoZSBhcnJheSBpcyBpbmRleGVkIGJ5IHRoZSBzaXplLCBzaGlmdGVkIHJpZ2h0IGJ5IDMgYml0cy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgc2l6ZXMgYXJlIHdoYXQgSSBleHBlY3QgdGhlbSB0byBiZSAtIGNoZWNraW5nIEJQRiBzaXplcyBjb25maXJtcyB0aGF0IEJQRl9XIGlzIDB4MDAsIEJQRl9IIGlzIDB4MDgsIEJQRl9CIGlzIDB4MTAgYW5kIEJQRl9EVyBpcyAweDE4LCBjb25maXJtaW5nIHRoYXQgQlBGX0RXICZndDsmZ3Q7IDMgaXMgaW5kZWVkIDMuIFRoaXMgYGJwZl9sZHN4X3N0cmluZ2AgYXJyYXkgaGFzIGEgbWF4aW11bSBpbmRleCBvZiAyLiBTbywgYW55IGF0dGVtcHQgdG8gYWNjZXNzIGBicGZfbGRzeF9zdHJpbmdbM11gIHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzISBUaGF0JiMzOTtzIGEgY2xhc3NpYyBnbG9iYWwgYXJyYXkgb3V0LW9mLWJvdW5kcyByZWFkLiBUaGlzIGlzIGEgYmlnIHJlZCBmbGFnIOKAkyBhbnkgYWNjZXNzIHRvIGBicGZfbGRzeF9zdHJpbmdbM11gIHdvdWxkIGJlIG91dCBvZiB0aGUgYXJyYXkmIzM5O3MgZGVmaW5lZCBib3VuZHMuCgpOb3csIHByZXZpb3VzbHksIHRoZSBjb2RlIHdvdWxkIGZhbGwgdGhyb3VnaCB0byB0aGUgdmVyYm9zZSBvdXRwdXQgY29kZSwgYXR0ZW1wdGluZyB0byBwcmludCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgaW5zdHJ1Y3Rpb24sIGluY2x1ZGluZyB0aGlzIGBicGZfbGRzeF9zdHJpbmdgLiBUaHVzLCB0aGUgb3V0LW9mLWJvdW5kcyByZWFkIG9yIE5VTEwgZGVyZWZlcmVuY2Ugd2FzIG9jY3VycmluZy4KClRoZSBwYXRjaCYjMzk7cyBpbnRlbnQgaXMgY2xlYXI6IGl0IGFkZHMgYSBjb25kaXRpb25hbCBjaGVjayB0byBwcmV2ZW50IHRoaXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEl0JiMzOTtzIGVzc2VudGlhbGx5IHNob3J0LWNpcmN1aXRpbmcgdGhlIGZhdWx0eSBpbmRleGluZyBieSBhZGRpbmcgYW4gZWFybHkgcmV0dXJuIGlmIHRoZSBpbnN0cnVjdGlvbiBpcyBgQlBGX0xEWGAgd2l0aCBgQlBGX01FTVNYYCBtb2RlIGFuZCBgQlBGX0RXYCBzaXplLCB0aHVzIHByZXZlbnRpbmcgdGhlIGJhZCBhY2Nlc3MuIEl0IGludHJvZHVjZXMgYSBtZXNzYWdlLCBpbmRpY2F0aW5nIHRoYXQgdGhlIGRldmVsb3BlciBoYXMgaWRlbnRpZmllZCBhIGJ1ZyByZWxhdGVkIHRvIGBCUEZfRFdgLgoKU28sIHRoZSBrZXkgcXVlc3Rpb24gZm9yIG1lIGlzOiBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IHNhZmV0eSByaXNrcywgKmVzcGVjaWFsbHkqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzPyBBZnRlciBjYXJlZnVsbHkgcmV2aWV3aW5nIHRoZSBjb2RlLCB0aGUgYW5zd2VyIGlzIGEgZmlybSAmIzM0O25vLiYjMzQ7IFRoaXMgcGF0Y2ggb25seSBhZGRyZXNzZXMgKmV4aXN0aW5nKiBtZW1vcnkgY29ycnVwdGlvbi4gVGhlcmUmIzM5O3Mgbm8gbmV3IGFsbG9jYXRpb24sIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBmaWVsZHMsIG5vIGBjb3B5X3RvX3VzZXJgLCBubyBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZSBidWcgaXMgYSBzdHJhaWdodGZvcndhcmQgb3V0LW9mLWJvdW5kcyByZWFkIG9mIGEgY29uc3RhbnQgc3RyaW5nIGFycmF5IChvciBOVUxMIGRlcmVmZXJlbmNlKSwgd2hpY2ggS0FTQU4gd291bGQgaW1tZWRpYXRlbHkgY2F0Y2guCgpJJiMzOTttIGNvbmZpZGVudCB0aGF0IEtBU0FOIGFscmVhZHkgY292ZXJzIHRoaXMgbWVtb3J5IHNhZmV0eSBidWcuIFRoZSBwYXRjaCBkaXJlY3RseSBhZGRyZXNzZXMgYSAqZ2xvYmFsKiBvdXQtb2YtYm91bmRzIHJlYWQuIEkmIzM5O20gbm90IHNlZWluZyBhbnkgbmV3IEtNU0FOLXNwZWNpZmljIGNvbmNlcm5zIGhlcmUuIFRoZSBgcHJpbnRfYnBmX2luc25gIGZ1bmN0aW9uIGl0c2VsZiB0YWtlcyBhIGBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc25gLCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhpcyBtYXRjaGVzIHRoZSBlc3RhYmxpc2hlZCBjcml0ZXJpYS4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCB3YXJyYW50IGEgYE5lZWRzS01TQU4gPSB0cnVlYC4gVGhpcyBpcyBhIGNsZWFyIGNhc2Ugb2YgJiMzNDtLQVNBTiBhbHJlYWR5IGNvdmVycyB0aGlzLiYjMzQ7IFRoZSBwYXRjaCBpcyBhY3R1YWxseSAqZml4aW5nKiBhIEtBU0FOLWRldGVjdGFibGUgYnVnLgoKT2theSwgbGV0JiMzOTtzIGZvcm11bGF0ZSBteSByZWFzb25pbmc6IFRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gYHByaW50X2JwZl9pbnNuKClgIHRoYXQgb2NjdXJzIHdoZW4gZW5jb3VudGVyaW5nIGBCUEZfTERYYCBpbnN0cnVjdGlvbnMgd2l0aCBgQlBGX01FTVNYYCBtb2RlIGFuZCBgQlBGX0RXYCBzaXplLiBUaGlzIG91dC1vZi1ib3VuZHMgcmVhZCBpcyBhIGRpcmVjdCBjb25zZXF1ZW5jZSBvZiBpbmRleGluZyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIGBicGZfbGRzeF9zdHJpbmdbXWAgYXJyYXksIGEgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSBpc3N1ZSB0aGF0IEtBU0FOIChzcGVjaWZpY2FsbHkgZ2xvYmFsIG91dC1vZi1ib3VuZHMpIGVmZmVjdGl2ZWx5IGRldGVjdHMuIFRoZSBwYXRjaCBvbmx5ICpmaXhlcyogdGhpcyBidWcgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBoZWFwIGNvcnJ1cHRpb24sIGluZm9ybWF0aW9uIGxlYWtzLCBvciBhbnkgb3RoZXIga2luZCBvZiBLTVNBTi1zcGVjaWZpYyBpc3N1ZS4gVGh1cywgYE5lZWRzS01TQU4gPSBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByZXZlbnRzIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgcmVhZCBpbiBrZXJuZWwvYnBmL2Rpc2FzbS5jIGJ5IGFkZGluZyBhIGNoZWNrIGZvciBCUEZfTERYIGluc3RydWN0aW9ucyB3aXRoIEJQRl9NRU1TWCBtb2RlIGFuZCBCUEZfRFcgc2l6ZSBiZWZvcmUgaW5kZXhpbmcgaW50byBicGZfbGRzeF9zdHJpbmdbXS4gU2luY2UgYnBmX2xkc3hfc3RyaW5nIG9ubHkgZGVmaW5lcyBlbnRyaWVzIGZvciBCUEZfQiwgQlBGX0gsIGFuZCBCUEZfVyAoaW5kaWNlcyAwLi4yKSwgaW5kZXhpbmcgd2l0aCBCUEZfRFcgKGluZGV4IDMpIHJlc3VsdGVkIGluIGEgZ2xvYmFsLW91dC1vZi1ib3VuZHMgYWNjZXNzLiBHbG9iYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgcG90ZW50aWFsIE5VTEwgZGVyZWZlcmVuY2VzIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcywgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBkYXRhIHByb3BhZ2F0aW9uLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByZXZlbnRzIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgcmVhZCBpbiBrZXJuZWwvYnBmL2Rpc2FzbS5jIGJ5IGFkZGluZyBhIGNoZWNrIGZvciBCUEZfTERYIGluc3RydWN0aW9ucyB3aXRoIEJQRl9NRU1TWCBtb2RlIGFuZCBCUEZfRFcgc2l6ZSBiZWZvcmUgaW5kZXhpbmcgaW50byBicGZfbGRzeF9zdHJpbmdbXS4gU2luY2UgYnBmX2xkc3hfc3RyaW5nIG9ubHkgZGVmaW5lcyBlbnRyaWVzIGZvciBCUEZfQiwgQlBGX0gsIGFuZCBCUEZfVyAoaW5kaWNlcyAwLi4yKSwgaW5kZXhpbmcgd2l0aCBCUEZfRFcgKGluZGV4IDMpIHJlc3VsdGVkIGluIGEgZ2xvYmFsLW91dC1vZi1ib3VuZHMgYWNjZXNzLiBHbG9iYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgcG90ZW50aWFsIE5VTEwgZGVyZWZlcmVuY2VzIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcywgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBkYXRhIHByb3BhZ2F0aW9uLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6NTk6MjYuOTU2NzUzMTgxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg2MzY1MjMyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcmludF9icGZfaW5zblwiLFxuICAgIFwiYnBmX3ZlcmJvc2VfaW5zblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcHJldmVudHMgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSByZWFkIGluIGtlcm5lbC9icGYvZGlzYXNtLmMgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIEJQRl9MRFggaW5zdHJ1Y3Rpb25zIHdpdGggQlBGX01FTVNYIG1vZGUgYW5kIEJQRl9EVyBzaXplIGJlZm9yZSBpbmRleGluZyBpbnRvIGJwZl9sZHN4X3N0cmluZ1tdLiBTaW5jZSBicGZfbGRzeF9zdHJpbmcgb25seSBkZWZpbmVzIGVudHJpZXMgZm9yIEJQRl9CLCBCUEZfSCwgYW5kIEJQRl9XIChpbmRpY2VzIDAuLjIpLCBpbmRleGluZyB3aXRoIEJQRl9EVyAoaW5kZXggMykgcmVzdWx0ZWQgaW4gYSBnbG9iYWwtb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEdsb2JhbCBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBwb3RlbnRpYWwgTlVMTCBkZXJlZmVyZW5jZXMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGRhdGEgcHJvcGFnYXRpb24uIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZGFyeS92YWxpZGl0eSBjaGVjayBpbiBwcmludF9icGZfaW5zbigpIHdpdGhpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRvIGhhbmRsZSBpbnZhbGlkIHNpZ24tZXh0ZW5kZWQgNjQtYml0IGxvYWRzIChCUEZfTUVNU1ggd2l0aCBCUEZfRFcpIGFuZCBwcmV2ZW50IGFjY2Vzc2luZyB1bmRlZmluZWQgYXJyYXkgaW5kaWNlcy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUga2VybmVsIGxvZ2ljIGV4ZWN1dGVkIGR1cmluZyBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24gYW5kIGRpc2Fzc2VtYmx5IHZpYSBzeXNfYnBmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTo1OToyNi45NTY3NTk2MDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMjgzOTM2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYxZDQzNDk1OTk2MTYyY2FlZjllOTc4ZTE3M2IwOGRjZjA3ZmU2MzJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAxOTo1OToyNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Rpc2FzbS5jIGIva2VybmVsL2JwZi9kaXNhc20uY1xcbmluZGV4IDUwYjNjYTUxNDlhMGEuLjcwYzJiMjgxY2ZlOTQgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9kaXNhc20uY1xcbisrKyBiL2tlcm5lbC9icGYvZGlzYXNtLmNcXG5AQCAtMjk5LDYgKzI5OSwxMCBAQCB2b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcXG4gXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIkJVR19sZHhfJTAyeFxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcdFxcdH1cXG4rXFx0XFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9NRU1TWCBcXHUwMDI2XFx1MDAyNiBCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfRFcpIHtcXG4rXFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIkJVR19sZHN4XyUwMnhcXFwiLCBpbnNuLVxcdTAwM2Vjb2RlKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuIFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gKiglcyAqKShyJWQgJStkKVxcXCIsXFxuIFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsIGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIFxcdFxcdFxcdEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9NRU0gP1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTo1OToyNy41NzA1MjU0NDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUxNjgwMjU3MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHJpbnRfYnBmX2luc25cIixcbiAgICBcImJwZl92ZXJib3NlX2luc25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRhcnkvdmFsaWRpdHkgY2hlY2sgaW4gcHJpbnRfYnBmX2luc24oKSB3aXRoaW4gdGhlIGNvcmUgQlBGIHN1YnN5c3RlbSB0byBoYW5kbGUgaW52YWxpZCBzaWduLWV4dGVuZGVkIDY0LWJpdCBsb2FkcyAoQlBGX01FTVNYIHdpdGggQlBGX0RXKSBhbmQgcHJldmVudCBhY2Nlc3NpbmcgdW5kZWZpbmVkIGFycmF5IGluZGljZXMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyBleGVjdXRlZCBkdXJpbmcgQlBGIHByb2dyYW0gdmVyaWZpY2F0aW9uIGFuZCBkaXNhc3NlbWJseSB2aWEgc3lzX2JwZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MWQ0MzQ5NTk5NjE2MmNhZWY5ZTk3OGUxNzNiMDhkY2YwN2ZlNjMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxOTo1OToyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZGlzYXNtLmMgYi9rZXJuZWwvYnBmL2Rpc2FzbS5jXG5pbmRleCA1MGIzY2E1MTQ5YTBhLi43MGMyYjI4MWNmZTk0IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9kaXNhc20uY1xuKysrIGIva2VybmVsL2JwZi9kaXNhc20uY1xuQEAgLTI5OSw2ICsyOTksMTAgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIkJVR19sZHhfJTAyeFwiLCBpbnNuLVx1MDAzZWNvZGUpO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuK1x0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNU1ggXHUwMDI2XHUwMDI2IEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0RXKSB7XG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIkJVR19sZHN4XyUwMnhcIiwgaW5zbi1cdTAwM2Vjb2RlKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbiBcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSAqKCVzICopKHIlZCAlK2QpXCIsXG4gXHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0QlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNID9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjU5OjI3LjU3MDUzMjIzNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMDY5Mjg2NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEZ1enppbmcgVHJpYWdlIFBhdGNoIGZvciBTeXprYWxsZXIqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJJ3ZlIGJlZW4gYXNrZWQgdG8gZXZhbHVhdGUgYSBwYXRjaCBpbnRlbmRlZCB0byBpbXByb3ZlIGZ1enppbmcgdHJpYWdlIHdpdGggU3l6a2FsbGVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGFuYWx5emUgdGhlIHBhdGNoIGl0c2VsZiBhbmQgdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCdzIEJQRiBkaXNhc3NlbWJseSBjb2RlLiBJJ20gZ29pbmcgdG8gZm9jdXMgb24gYGtlcm5lbC9icGYvZGlzYXNtLmNgIGFzIHRoZSBwcm92aWRlZCBkaWZmIHBvaW50cyB0byBjaGFuZ2VzIHRoZXJlLlxuXG5Mb29raW5nIGF0IHRoZSBkaWZmLCBpdCBzZWVtcyBhIG5ldyBjaGVjayBoYXMgYmVlbiBhZGRlZCB3aXRoaW4gdGhlIGBwcmludF9icGZfaW5zbmAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQncyBjaGVja2luZyBmb3IgYSBjb21iaW5hdGlvbiBvZiBgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNU1hgIGFuZCBgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfRFdgLiAgVGhpcyBjb21iaW5hdGlvbiBub3cgdHJpZ2dlcnMgYSBuZXcgZGVidWcgbWVzc2FnZSwgXCJCVUdfbGRzeF8lMDJ4XCIuIFNvLCBpdCBsb29rcyBsaWtlIHRoaXMgbmV3IGNvZGUgcGF0aCBpcyBpbnRlbmRlZCB0byBmbGFnIG9yIGhpZ2hsaWdodCBhIHNwZWNpZmljIEJQRiBpbnN0cnVjdGlvbiB2YXJpYW50IGR1cmluZyBkaXNhc3NlbWJseS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHVzZSB0aGUgdG9vbHMgYXZhaWxhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgc3BlY2lmaWMgQlBGIGluc3RydWN0aW9uIHZhcmlhbnQgKGBCUEZfTUVNU1hgIGFuZCBgQlBGX0RXYCkgcmVwcmVzZW50cyBhbmQgd2h5IGl0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIGZ1enppbmcgdHJpYWdlLiBJJ2xsIG5lZWQgdG8gbG9vayBpbnRvIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgQlBGIGRpc2Fzc2VtYmx5IGluIHRoZSBrZXJuZWwgdG8gZnVsbHkgZ3Jhc3AgaXRzIGltcGFjdC4gSSdsbCBhbHNvIHdhbnQgdG8gdHJhY2Ugd2hlcmUgYHByaW50X2JwZl9pbnNuYCBpcyBjYWxsZWQgZnJvbS4gSSdtIHRoaW5raW5nIEkgbmVlZCB0byBmaW5kIHRoZSBjYWxsc2l0ZXMgb2YgdGhhdCBmdW5jdGlvbiwgYW5kIHRoZW4gdW5kZXJzdGFuZCBob3cgdGhhdCBkaXNhc3NlbWJseSBpcyB1c2VkLiBJcyBpdCBhIGxpdmUgZGlzYXNzZW1ibHksIG9yIGlzIGl0IHVzZWQgZHVyaW5nIGNyYXNoIGFuYWx5c2lzLCBmb3IgZXhhbXBsZT8gRmlndXJpbmcgb3V0IHRoZSBleGVjdXRpb24gY29udGV4dCB3aWxsIHByb3ZpZGUgdml0YWwgaW5mb3JtYXRpb24uIEZyb20gdGhlcmUsIEknbGwgYXNzZXNzIHdoZXRoZXIgdGhlIGFkZGVkIGRlYnVnIG1lc3NhZ2UgaXMgbGlrZWx5IHRvIGNhdGNoIG9yIGhpZ2hsaWdodCBpbnRlcmVzdGluZyBCUEYgaW5zdHJ1Y3Rpb24gc2VxdWVuY2VzIHRoYXQgbWF5IGNvbnRyaWJ1dGUgdG8gZmluZGluZyBidWdzLiBJJ2xsIGFsc28gYmUgY29uc2lkZXJpbmcgd2hldGhlciBpdCBnZW5lcmF0ZXMgZXhjZXNzaXZlIG5vaXNlLCBvciBpcyBwcmVjaXNlIGVub3VnaCB0byBiZSB1c2VmdWwuIE15IG9iamVjdGl2ZSBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBhZGRpdGlvbiBpcyBlZmZlY3RpdmUgaW4gaGVscGluZyBTeXprYWxsZXIgdHJpYWdlIGZ1enppbmcgcmVzdWx0cywgYW5kIHdoZXRoZXIgaXQgaW50cm9kdWNlcyBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk2MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjU5OjQwLjYzOTgyMjkzM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvZGlzYXNtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjg1OlxcdFxcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX1NUKSB7XFxuIDI4NjpcXHRcXHRcXHRpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX01FTSkge1xcbiAyODc6XFx0XFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSAqKCVzICopKHIlZCAlK2QpID0gJWRcXFwiLFxcbiAyODg6XFx0XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gMjg5OlxcdFxcdFxcdFxcdFxcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSBcXHUwMDNlXFx1MDAzZSAzXSxcXG4gMjkwOlxcdFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcsXFxuIDI5MTpcXHRcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VvZmYsIGluc24tXFx1MDAzZWltbSk7XFxuIDI5MjpcXHRcXHRcXHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IDB4YzAgLyogQlBGX05PU1BFQywgbm8gVUFQSSAqLykge1xcbiAyOTM6XFx0XFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSBub3NwZWNcXFwiLCBpbnNuLVxcdTAwM2Vjb2RlKTtcXG4gMjk0OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDI5NTpcXHRcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiQlVHX3N0XyUwMnhcXFwiLCBpbnNuLVxcdTAwM2Vjb2RlKTtcXG4gMjk2OlxcdFxcdFxcdH1cXG4gMjk3OlxcdFxcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEWCkge1xcbiAyOTg6XFx0XFx0XFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9NRU0gXFx1MDAyNlxcdTAwMjYgQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX01FTVNYKSB7XFxuIDI5OTpcXHRcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiQlVHX2xkeF8lMDJ4XFxcIiwgaW5zbi1cXHUwMDNlY29kZSk7XFxuIDMwMDpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDMwMTpcXHRcXHRcXHR9XFxuIDMwMjpcXHRcXHRcXHRpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX01FTVNYIFxcdTAwMjZcXHUwMDI2IEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9EVykge1xcbiAzMDM6XFx0XFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIkJVR19sZHN4XyUwMnhcXFwiLCBpbnNuLVxcdTAwM2Vjb2RlKTtcXG4gMzA0OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMzA1OlxcdFxcdFxcdH1cXG4gMzA2OlxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgciVkID0gKiglcyAqKShyJWQgJStkKVxcXCIsXFxuIDMwNzpcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbiAzMDg6XFx0XFx0XFx0XFx0QlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX01FTSA/XFxuIDMwOTpcXHRcXHRcXHRcXHRcXHQgYnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdIDpcXG4gMzEwOlxcdFxcdFxcdFxcdFxcdCBicGZfbGRzeF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuIDMxMTpcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VzcmNfcmVnLCBpbnNuLVxcdTAwM2VvZmYpO1xcbiAzMTI6XFx0XFx0fSBlbHNlIGlmIChjbGFzcyA9PSBCUEZfTEQpIHtcXG4gMzEzOlxcdFxcdFxcdGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQUJTKSB7XFxuIDMxNDpcXHRcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIwID0gKiglcyAqKXNrYlslZF1cXFwiLFxcbiAzMTU6XFx0XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gMzE2OlxcdFxcdFxcdFxcdFxcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSBcXHUwMDNlXFx1MDAzZSAzXSxcXG4gMzE3OlxcdFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWltbSk7XFxuIDMxODpcXHRcXHRcXHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9JTkQpIHtcXG4gMzE5OlxcdFxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgcjAgPSAqKCVzICopc2tiW3IlZCArICVkXVxcXCIsXFxuIDMyMDpcXHRcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLFxcbiAzMjE6XFx0XFx0XFx0XFx0XFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdLFxcbiAzMjI6XFx0XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlc3JjX3JlZywgaW5zbi1cXHUwMDNlaW1tKTtcXG4gMzIzOlxcdFxcdFxcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0lNTSBcXHUwMDI2XFx1MDAyNlxcbiAzMjQ6XFx0XFx0XFx0XFx0ICAgQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0RXKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjU5OjQwLjYzOTkxNjk0M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxOTM5MDM4MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEJQRiBEaXNhc3NlbWJseSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgYnBmX2xkc3hfc3RyaW5nYCBhcnJheSwgc3BlY2lmaWNhbGx5IGluIGBrZXJuZWwvYnBmL2Rpc2FzbS5jYC4gVGhhdCdzIHdoZXJlIHRoZSBrZXJuZWwncyBCUEYgZGlzYXNzZW1ibGVyIGxpdmVzLCBzbyBJJ20gbGlrZWx5IGludGVyZXN0ZWQgaW4gaG93IGl0IHJlcHJlc2VudHMgdGhlIGxvYWQvc3RvcmUgaW5zdHJ1Y3Rpb25zIGFzIHN0cmluZ3MuIEl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIGxvb2sgdXAgaG93IHRoZSBhcnJheSBpcyBpbXBsZW1lbnRlZC4gSSdsbCBmb2N1cyBvbiBsaW5lcyAxLTEwMCB0byBnZXQgYW4gb3ZlcnZpZXcgb2YgdGhlIHNlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NzIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjU5OjQyLjgzMzgyNTIwOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvZGlzYXNtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuICAgMjpcXHQvKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxNCBQTFVNZ3JpZCwgaHR0cDovL3BsdW1ncmlkLmNvbVxcbiAgIDM6XFx0ICogQ29weXJpZ2h0IChjKSAyMDE2IEZhY2Vib29rXFxuICAgNDpcXHQgKi9cXG4gICA1OlxcdFxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbiAgIDc6XFx0XFxuICAgODpcXHQjaW5jbHVkZSBcXFwiZGlzYXNtLmhcXFwiXFxuICAgOTpcXHRcXG4gIDEwOlxcdCNkZWZpbmUgX19CUEZfRlVOQ19TVFJfRk4oeCkgW0JQRl9GVU5DXyAjIyB4XSA9IF9fc3RyaW5naWZ5KGJwZl8gIyMgeClcXG4gIDExOlxcdHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZnVuY19pZF9zdHJbXSA9IHtcXG4gIDEyOlxcdFxcdF9fQlBGX0ZVTkNfTUFQUEVSKF9fQlBGX0ZVTkNfU1RSX0ZOKVxcbiAgMTM6XFx0fTtcXG4gIDE0OlxcdCN1bmRlZiBfX0JQRl9GVU5DX1NUUl9GTlxcbiAgMTU6XFx0XFxuICAxNjpcXHRzdGF0aWMgY29uc3QgY2hhciAqX19mdW5jX2dldF9uYW1lKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcXG4gIDE3OlxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gIDE4OlxcdFxcdFxcdFxcdFxcdCAgIGNoYXIgKmJ1ZmYsIHNpemVfdCBsZW4pXFxuICAxOTpcXHR7XFxuICAyMDpcXHRcXHRCVUlMRF9CVUdfT04oQVJSQVlfU0laRShmdW5jX2lkX3N0cikgIT0gX19CUEZfRlVOQ19NQVhfSUQpO1xcbiAgMjE6XFx0XFxuICAyMjpcXHRcXHRpZiAoIWluc24tXFx1MDAzZXNyY19yZWcgXFx1MDAyNlxcdTAwMjZcXG4gIDIzOlxcdFxcdCAgICBpbnNuLVxcdTAwM2VpbW0gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VpbW0gXFx1MDAzYyBfX0JQRl9GVU5DX01BWF9JRCBcXHUwMDI2XFx1MDAyNlxcbiAgMjQ6XFx0XFx0ICAgIGZ1bmNfaWRfc3RyW2luc24tXFx1MDAzZWltbV0pXFxuICAyNTpcXHRcXHRcXHRyZXR1cm4gZnVuY19pZF9zdHJbaW5zbi1cXHUwMDNlaW1tXTtcXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0aWYgKGNicyBcXHUwMDI2XFx1MDAyNiBjYnMtXFx1MDAzZWNiX2NhbGwpIHtcXG4gIDI4OlxcdFxcdFxcdGNvbnN0IGNoYXIgKnJlcztcXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0XFx0cmVzID0gY2JzLVxcdTAwM2VjYl9jYWxsKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBpbnNuKTtcXG4gIDMxOlxcdFxcdFxcdGlmIChyZXMpXFxuICAzMjpcXHRcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbiAgMzM6XFx0XFx0fVxcbiAgMzQ6XFx0XFxuICAzNTpcXHRcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0NBTEwpXFxuICAzNjpcXHRcXHRcXHRzbnByaW50ZihidWZmLCBsZW4sIFxcXCIlK2RcXFwiLCBpbnNuLVxcdTAwM2VpbW0pO1xcbiAgMzc6XFx0XFx0ZWxzZSBpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpXFxuICAzODpcXHRcXHRcXHRzbnByaW50ZihidWZmLCBsZW4sIFxcXCJrZXJuZWwtZnVuY3Rpb25cXFwiKTtcXG4gIDM5OlxcdFxcbiAgNDA6XFx0XFx0cmV0dXJuIGJ1ZmY7XFxuICA0MTpcXHR9XFxuICA0MjpcXHRcXG4gIDQzOlxcdHN0YXRpYyBjb25zdCBjaGFyICpfX2Z1bmNfaW1tX25hbWUoY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxcbiAgNDQ6XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiAgNDU6XFx0XFx0XFx0XFx0XFx0ICAgdTY0IGZ1bGxfaW1tLCBjaGFyICpidWZmLCBzaXplX3QgbGVuKVxcbiAgNDY6XFx0e1xcbiAgNDc6XFx0XFx0aWYgKGNicyBcXHUwMDI2XFx1MDAyNiBjYnMtXFx1MDAzZWNiX2ltbSlcXG4gIDQ4OlxcdFxcdFxcdHJldHVybiBjYnMtXFx1MDAzZWNiX2ltbShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgaW5zbiwgZnVsbF9pbW0pO1xcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHRzbnByaW50ZihidWZmLCBsZW4sIFxcXCIweCVsbHhcXFwiLCAodW5zaWduZWQgbG9uZyBsb25nKWZ1bGxfaW1tKTtcXG4gIDUxOlxcdFxcdHJldHVybiBidWZmO1xcbiAgNTI6XFx0fVxcbiAgNTM6XFx0XFxuICA1NDpcXHRjb25zdCBjaGFyICpmdW5jX2lkX25hbWUoaW50IGlkKVxcbiAgNTU6XFx0e1xcbiAgNTY6XFx0XFx0aWYgKGlkIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgaWQgXFx1MDAzYyBfX0JQRl9GVU5DX01BWF9JRCBcXHUwMDI2XFx1MDAyNiBmdW5jX2lkX3N0cltpZF0pXFxuICA1NzpcXHRcXHRcXHRyZXR1cm4gZnVuY19pZF9zdHJbaWRdO1xcbiAgNTg6XFx0XFx0ZWxzZVxcbiAgNTk6XFx0XFx0XFx0cmV0dXJuIFxcXCJ1bmtub3duXFxcIjtcXG4gIDYwOlxcdH1cXG4gIDYxOlxcdFxcbiAgNjI6XFx0Y29uc3QgY2hhciAqY29uc3QgYnBmX2NsYXNzX3N0cmluZ1s4XSA9IHtcXG4gIDYzOlxcdFxcdFtCUEZfTERdICAgID0gXFxcImxkXFxcIixcXG4gIDY0OlxcdFxcdFtCUEZfTERYXSAgID0gXFxcImxkeFxcXCIsXFxuICA2NTpcXHRcXHRbQlBGX1NUXSAgICA9IFxcXCJzdFxcXCIsXFxuICA2NjpcXHRcXHRbQlBGX1NUWF0gICA9IFxcXCJzdHhcXFwiLFxcbiAgNjc6XFx0XFx0W0JQRl9BTFVdICAgPSBcXFwiYWx1XFxcIixcXG4gIDY4OlxcdFxcdFtCUEZfSk1QXSAgID0gXFxcImptcFxcXCIsXFxuICA2OTpcXHRcXHRbQlBGX0pNUDMyXSA9IFxcXCJqbXAzMlxcXCIsXFxuICA3MDpcXHRcXHRbQlBGX0FMVTY0XSA9IFxcXCJhbHU2NFxcXCIsXFxuICA3MTpcXHR9O1xcbiAgNzI6XFx0XFxuICA3MzpcXHRjb25zdCBjaGFyICpjb25zdCBicGZfYWx1X3N0cmluZ1sxNl0gPSB7XFxuICA3NDpcXHRcXHRbQlBGX0FERCBcXHUwMDNlXFx1MDAzZSA0XSAgPSBcXFwiKz1cXFwiLFxcbiAgNzU6XFx0XFx0W0JQRl9TVUIgXFx1MDAzZVxcdTAwM2UgNF0gID0gXFxcIi09XFxcIixcXG4gIDc2OlxcdFxcdFtCUEZfTVVMIFxcdTAwM2VcXHUwMDNlIDRdICA9IFxcXCIqPVxcXCIsXFxuICA3NzpcXHRcXHRbQlBGX0RJViBcXHUwMDNlXFx1MDAzZSA0XSAgPSBcXFwiLz1cXFwiLFxcbiAgNzg6XFx0XFx0W0JQRl9PUiAgXFx1MDAzZVxcdTAwM2UgNF0gID0gXFxcInw9XFxcIixcXG4gIDc5OlxcdFxcdFtCUEZfQU5EIFxcdTAwM2VcXHUwMDNlIDRdICA9IFxcXCJcXHUwMDI2PVxcXCIsXFxuICA4MDpcXHRcXHRbQlBGX0xTSCBcXHUwMDNlXFx1MDAzZSA0XSAgPSBcXFwiXFx1MDAzY1xcdTAwM2M9XFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6NTk6NDIuODMzOTA5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc2MTgxNDE4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIGRpdmUgaW50byB0aGF0IHRleHQgYW5kIHN1bW1hcml6ZSB0aGUgdGhvdWdodCBwcm9jZXNzLiBIZXJlJ3MgbXkgdGFrZTpcblxuKipBbmFseXppbmcgdGhlIFJlbGV2YW50IFNlY3Rpb24qKlxuXG5BbHJpZ2h0LCBteSBpbml0aWFsIHJlYWQtdGhyb3VnaCBzdWdnZXN0ZWQgdGhhdCB0aGVyZSdzIGEgc3BlY2lmaWMgc2VnbWVudCBvZiB0aGUgdGV4dCB0aGF0IGRlc2VydmVzIGNsb3NlciBhdHRlbnRpb24g4oCTIGxpbmVzIDgwIHRocm91Z2ggMTIwLiBCYXNlZCBvbiBteSBleGlzdGluZyBrbm93bGVkZ2UgYW5kIHRoZSBjb250ZXh0LCBJJ20gYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBzZWN0aW9uIGxpa2VseSBob3VzZXMgdGhlIGNvcmUgb2YgdGhlIGFyZ3VtZW50LCB0aGUgY3J1Y2lhbCBtZXRob2RvbG9neSwgb3IgcGVyaGFwcyB0aGUga2V5IHJlc3VsdHMgdGhhdCBkZW1hbmQgYSBkZWVwZXIgZXhhbWluYXRpb24uIEknbGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZGlzc2VjdCB0aGF0IHBvcnRpb24gdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBhbmQgZHJhdyBjb25uZWN0aW9ucy4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgY3JpdGljYWwgcGllY2VzIG9mIHRoZSBwdXp6bGUgcmVzaWRlLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZW0uIEkgZXhwZWN0IGl0IHRvIGJlIGEga2V5IGVsZW1lbnQgZm9yIHRoZSBhcnRpY2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjYzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTo1OTo0NC41OTU3MjcyNTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9kaXNhc20uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHRbQlBGX0xTSCBcXHUwMDNlXFx1MDAzZSA0XSAgPSBcXFwiXFx1MDAzY1xcdTAwM2M9XFxcIixcXG4gIDgxOlxcdFxcdFtCUEZfUlNIIFxcdTAwM2VcXHUwMDNlIDRdICA9IFxcXCJcXHUwMDNlXFx1MDAzZT1cXFwiLFxcbiAgODI6XFx0XFx0W0JQRl9ORUcgXFx1MDAzZVxcdTAwM2UgNF0gID0gXFxcIm5lZ1xcXCIsXFxuICA4MzpcXHRcXHRbQlBGX01PRCBcXHUwMDNlXFx1MDAzZSA0XSAgPSBcXFwiJT1cXFwiLFxcbiAgODQ6XFx0XFx0W0JQRl9YT1IgXFx1MDAzZVxcdTAwM2UgNF0gID0gXFxcIl49XFxcIixcXG4gIDg1OlxcdFxcdFtCUEZfTU9WIFxcdTAwM2VcXHUwMDNlIDRdICA9IFxcXCI9XFxcIixcXG4gIDg2OlxcdFxcdFtCUEZfQVJTSCBcXHUwMDNlXFx1MDAzZSA0XSA9IFxcXCJzXFx1MDAzZVxcdTAwM2U9XFxcIixcXG4gIDg3OlxcdFxcdFtCUEZfRU5EIFxcdTAwM2VcXHUwMDNlIDRdICA9IFxcXCJlbmRpYW5cXFwiLFxcbiAgODg6XFx0fTtcXG4gIDg5OlxcdFxcbiAgOTA6XFx0c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGJwZl9hbHVfc2lnbl9zdHJpbmdbMTZdID0ge1xcbiAgOTE6XFx0XFx0W0JQRl9ESVYgXFx1MDAzZVxcdTAwM2UgNF0gID0gXFxcInMvPVxcXCIsXFxuICA5MjpcXHRcXHRbQlBGX01PRCBcXHUwMDNlXFx1MDAzZSA0XSAgPSBcXFwicyU9XFxcIixcXG4gIDkzOlxcdH07XFxuICA5NDpcXHRcXG4gIDk1OlxcdHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBicGZfbW92c3hfc3RyaW5nWzRdID0ge1xcbiAgOTY6XFx0XFx0WzBdID0gXFxcIihzOClcXFwiLFxcbiAgOTc6XFx0XFx0WzFdID0gXFxcIihzMTYpXFxcIixcXG4gIDk4OlxcdFxcdFszXSA9IFxcXCIoczMyKVxcXCIsXFxuICA5OTpcXHR9O1xcbiAxMDA6XFx0XFxuIDEwMTpcXHRzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYnBmX2F0b21pY19hbHVfc3RyaW5nWzE2XSA9IHtcXG4gMTAyOlxcdFxcdFtCUEZfQUREIFxcdTAwM2VcXHUwMDNlIDRdICA9IFxcXCJhZGRcXFwiLFxcbiAxMDM6XFx0XFx0W0JQRl9BTkQgXFx1MDAzZVxcdTAwM2UgNF0gID0gXFxcImFuZFxcXCIsXFxuIDEwNDpcXHRcXHRbQlBGX09SIFxcdTAwM2VcXHUwMDNlIDRdICA9IFxcXCJvclxcXCIsXFxuIDEwNTpcXHRcXHRbQlBGX1hPUiBcXHUwMDNlXFx1MDAzZSA0XSAgPSBcXFwieG9yXFxcIixcXG4gMTA2OlxcdH07XFxuIDEwNzpcXHRcXG4gMTA4OlxcdHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBicGZfbGRzdF9zdHJpbmdbXSA9IHtcXG4gMTA5OlxcdFxcdFtCUEZfVyBcXHUwMDNlXFx1MDAzZSAzXSAgPSBcXFwidTMyXFxcIixcXG4gMTEwOlxcdFxcdFtCUEZfSCBcXHUwMDNlXFx1MDAzZSAzXSAgPSBcXFwidTE2XFxcIixcXG4gMTExOlxcdFxcdFtCUEZfQiBcXHUwMDNlXFx1MDAzZSAzXSAgPSBcXFwidThcXFwiLFxcbiAxMTI6XFx0XFx0W0JQRl9EVyBcXHUwMDNlXFx1MDAzZSAzXSA9IFxcXCJ1NjRcXFwiLFxcbiAxMTM6XFx0fTtcXG4gMTE0OlxcdFxcbiAxMTU6XFx0c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGJwZl9sZHN4X3N0cmluZ1tdID0ge1xcbiAxMTY6XFx0XFx0W0JQRl9XIFxcdTAwM2VcXHUwMDNlIDNdICA9IFxcXCJzMzJcXFwiLFxcbiAxMTc6XFx0XFx0W0JQRl9IIFxcdTAwM2VcXHUwMDNlIDNdICA9IFxcXCJzMTZcXFwiLFxcbiAxMTg6XFx0XFx0W0JQRl9CIFxcdTAwM2VcXHUwMDNlIDNdICA9IFxcXCJzOFxcXCIsXFxuIDExOTpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTo1OTo0NC41OTU4NjU3MjlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzgxMDc3Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBJbnN0cnVjdGlvbiBQcmludCBCdWcqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYnBmX2xkc3hfc3RyaW5nYCBzdHJ1Y3R1cmUuIEknbSBpbW1lZGlhdGVseSBub3RpY2luZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIEl0IGFwcGVhcnMgdG8gYmUgZGVmaW5pbmcgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbnMgZm9yIHNpZ25lZCBsb2FkcyBiYXNlZCBvbiBzaXplOiBgczMyYCwgYHMxNmAsIGFuZCBgczhgLiBCdXQgaG9sZCBvbi4uLiB0aGVyZSdzIG5vIGVudHJ5IGZvciBgQlBGX0RXYCwgd2hpY2ggaXMgZG91YmxlLXdvcmQgb3IgNjQtYml0IGxvYWQuIEkgcXVpY2tseSBzZWUgdGhhdCBgQlBGX0RXIFx1MDAzZVx1MDAzZSAzYCBldmFsdWF0ZXMgdG8gMywgd2hpY2ggbGFuZHMgc3F1YXJlbHkgaW4gdGhlIE5VTEwgc3BhY2Ugb2YgdGhhdCBhcnJheS5cblxuTm93LCBpZiBgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKWAgaXMgYEJQRl9NRU1TWGAgYW5kIGBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpYCBpcyBgQlBGX0RXYCwgdGhlbiB0aGUgY29kZSBpcyB0cnlpbmcgdG8gYWNjZXNzIGEgNjQtYml0IHNpZ25lZCBsb2FkLiBUaGF0IHdvdWxkIG1lYW4gd2UncmUgaW5kZXhpbmcgaW50byBgYnBmX2xkc3hfc3RyaW5nYCBhdCBpbmRleCAzLCB3aGljaCwgYXMgd2UndmUgZXN0YWJsaXNoZWQsIGlzIGBOVUxMYC4gVGhlIHByb2JsZW0gaXMgcmlnaHQgdGhlcmUsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBjcmFzaCBpZiB0aGUga2VybmVsIHRyaWVzIHRvIGBwcmludGtgIG9yIGB2ZXJib3NlYCBsb2cgdGhpcyB2YWx1ZSBhcyBhIHN0cmluZy4gRGVwZW5kaW5nIG9uIHRoZSBgdnNucHJpbnRmYCBpbXBsZW1lbnRhdGlvbiwgdGhpcyBjb3VsZCBlaXRoZXIgY3Jhc2ggb3IgcHJpbnQgYChudWxsKWAuIE5vdCBnb29kLlxuXG5Tbywgd2hlcmUgaXMgYHByaW50X2JwZl9pbnNuYCBjYWxsZWQ/IEkgbmVlZCB0byB0cmFjayBkb3duIGFsbCB0aGUgY2FsbCBzaXRlcyB0byBzZWUgd2hlcmUgdGhpcyBwb3RlbnRpYWwgYnVnIGlzIGV4cG9zZWQuIExldCdzIGZpbmQgdGhvc2UgY2FsbGVycyBhbmQgc2VlIGhvdyBhbmQgd2hlbiBgcHJpbnRfYnBmX2luc25gIGlzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNjMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTo1OTo0Ny45NzY5NDg0MzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTY2MDc3ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJpbnRfYnBmX2luc25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9kaWFnbm9zdGljcy5jPTYwOD1zdGF0aWMgdm9pZCBmb3JtYXRfZGlzYXNtX2xpbmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LFxcbi0tXFxua2VybmVsL2JwZi9kaWFnbm9zdGljcy5jLTYzMi1cXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmM6NjMzOlxcdHByaW50X2JwZl9pbnNuKFxcdTAwMjZjYnMsIGluc24sIGVudi1cXHUwMDNlYWxsb3dfcHRyX2xlYWtzKTtcXG5rZXJuZWwvYnBmL2RpYWdub3N0aWNzLmMtNjM0LVxcdHNlcV9idWZfc3RyKFxcdTAwMjZjdHguc2VxKTtcXG4tLVxcbmtlcm5lbC9icGYvZGlzYXNtLmM9MTgxPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19tb3ZfcGVyY3B1X2FkZHIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi9kaXNhc20uYy0xODUtXFxua2VybmVsL2JwZi9kaXNhc20uYzoxODY6dm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXFxua2VybmVsL2JwZi9kaXNhc20uYy0xODctXFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvZGlzYXNtLmg9MzA9c3RydWN0IGJwZl9pbnNuX2NicyB7XFxuLS1cXG5rZXJuZWwvYnBmL2Rpc2FzbS5oLTM2LVxcbmtlcm5lbC9icGYvZGlzYXNtLmg6Mzc6dm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXFxua2VybmVsL2JwZi9kaXNhc20uaC0zOC1cXHRcXHQgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTMzNzc9dm9pZCBicGZfdmVyYm9zZV9pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzg0LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMzg1OlxcdHByaW50X2JwZl9pbnNuKFxcdTAwMjZjYnMsIGluc24sIGVudi1cXHUwMDNlYWxsb3dfcHRyX2xlYWtzKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzM4Ni19XFxuLS1cXG50b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmM9MjA1PXZvaWQgZHVtcF94bGF0ZWRfanNvbihzdHJ1Y3QgZHVtcF9kYXRhICpkZCwgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuLFxcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jLTI1Ny1cXHRcXHRqc29ud19uYW1lKGpzb25fd3RyLCBcXFwiZGlzYXNtXFxcIik7XFxudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jOjI1ODpcXHRcXHRwcmludF9icGZfaW5zbihcXHUwMDI2Y2JzLCBpbnNuICsgaSwgdHJ1ZSk7XFxudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jLTI1OS1cXG4tLVxcbnRvb2xzL2JwZi9icGZ0b29sL3hsYXRlZF9kdW1wZXIuYz0yOTA9dm9pZCBkdW1wX3hsYXRlZF9wbGFpbihzdHJ1Y3QgZHVtcF9kYXRhICpkZCwgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuLFxcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jLTMzOS1cXHRcXHRwcmludGYoXFxcIiU0dTogXFxcIiwgaSk7XFxudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jOjM0MDpcXHRcXHRwcmludF9icGZfaW5zbihcXHUwMDI2Y2JzLCBpbnNuICsgaSwgdHJ1ZSk7XFxudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jLTM0MS1cXHRcXHRwcmludGYoXFxcIlxcXFxuXFxcIik7XFxuLS1cXG50b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmM9MzU1PXZvaWQgZHVtcF94bGF0ZWRfZm9yX2dyYXBoKHN0cnVjdCBkdW1wX2RhdGEgKmRkLCB2b2lkICpidWZfc3RhcnQsIHZvaWQgKmJ1Zl9lbmQsXFxuLS1cXG50b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmMtNDA2LVxcdFxcdHByaW50ZihcXFwiJXU6IFxcXCIsIGluc25fb2ZmKTtcXG50b29scy9icGYvYnBmdG9vbC94bGF0ZWRfZHVtcGVyLmM6NDA3OlxcdFxcdHByaW50X2JwZl9pbnNuKFxcdTAwMjZjYnMsIGN1ciwgdHJ1ZSk7XFxudG9vbHMvYnBmL2JwZnRvb2wveGxhdGVkX2R1bXBlci5jLTQwOC1cXHRcXHRwcmludGYoXFxcIlxcXFxcXFxcbFxcXFxcXFxcXFxcXG5cXFwiKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9kaXNhc21faGVscGVycy5jPTM4PXN0cnVjdCBicGZfaW5zbiAqZGlzYXNtX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuLCBjaGFyICpidWYsIHNpemVfdCBidWZfc3opXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuYy01Mi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuYzo1MzpcXHRwcmludF9icGZfaW5zbihcXHUwMDI2Y2JzLCBpbnNuLCB0cnVlKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvZGlzYXNtX2hlbHBlcnMuYy01NC1cXHQvKiBXZSBzaGFyZSBjb2RlIHdpdGgga2VybmVsIEJQRiBkaXNhc3NlbWJsZXIsIGl0IGFkZHMgJyhGRikgJyBwcmVmaXhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6NTk6NTAuMzMzNTcwODcxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MDI1NjY1ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOlxuXG4qKkJQRiBJbnN0cnVjdGlvbiBEaXNhc3NlbWJseSBhbmQgVmVyYm9zZSBMb2dnaW5nKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjZSB0aGUgdmVyYm9zZSBsb2dnaW5nIG9mIEJQRiBpbnN0cnVjdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIExldCdzIHNlZS4uLiBJJ20gcHJldHR5IHN1cmUgSSByZW1lbWJlciBgYnBmX3ZlcmJvc2VfaW5zbmAgYmVpbmcgdGhlIGtleSBmdW5jdGlvbiBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gQW5kIHRoZW4sIG9uIHRoZSBkaXNwbGF5IHNpZGUsIEkgaGF2ZSBgZm9ybWF0X2Rpc2FzbV9saW5lYCBpbiBga2VybmVsL2JwZi9kaWFnbm9zdGljcy5jYCB0byBmb3JtYXQgaXQgYWxsLlxuXG5UaGUgcmVhbCBxdWVzdGlvbiBpcywgd2hlbiAqZXhhY3RseSogZG9lcyBgYnBmX3ZlcmJvc2VfaW5zbmAgZ2V0IGNhbGxlZCB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllcj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdHJpZ2dlcmluZyB0aGF0IGxldmVsIG9mIGRldGFpbC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgY29kZSBiYXNlIGZvciBjYWxscyB0byBgYnBmX3ZlcmJvc2VfaW5zbmAgYW5kIHNlZSB3aGF0IGNvbWVzIHVwLiBJJ2xsIGFsc28gY29uc2lkZXIgc2VhcmNoZXMgYXJvdW5kIHZlcmJvc2UgbG9nZ2luZyBzcGVjaWZpY2FsbHkgZHVyaW5nIEJQRiBwcm9ncmFtIGxvYWRpbmcsIHNpbmNlIHRoYXQncyBvZnRlbiB3aGVuIHlvdSB3YW50IHRoZSBtb3N0IGRldGFpbGVkIGluc3BlY3Rpb24uIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGVyZSBhbmQgd2hlbiB0aGVzZSB2ZXJib3NlIGxvZ3MgYXJlIGdlbmVyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg4MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjU5OjUzLjAzNjE0MDQ3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjcwMjE0NTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl92ZXJib3NlX2luc25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xNjI3PWJvb2wgYnBmX2lzX21heV9nb3RvX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuKTtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE2MjgtXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxNjI5OnZvaWQgYnBmX3ZlcmJvc2VfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pO1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTYzMC1ib29sIGJwZl9nZXRfY2FsbF9zdW1tYXJ5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqY2FsbCxcXG4tLVxcbmtlcm5lbC9icGYvYmFja3RyYWNrLmM9MjY1PXN0YXRpYyBpbnQgYmFja3RyYWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCwgaW50IHN1YnNlcV9pZHgsXFxuLS1cXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTI4NC1cXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVkOiBcXFwiLCBpZHgpO1xcbmtlcm5lbC9icGYvYmFja3RyYWNrLmM6Mjg1OlxcdFxcdGJwZl92ZXJib3NlX2luc24oZW52LCBpbnNuKTtcXG5rZXJuZWwvYnBmL2JhY2t0cmFjay5jLTI4Ni1cXHRcXHR2ZXJib3NlKGVudiwgXFxcIlxcXFxuXFxcIik7XFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM9NDc3PXN0YXRpYyB2b2lkIHByaW50X2luc3RhbmNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBmdW5jX2luc3RhbmNlICppbnN0YW5jZSlcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy00OTctXFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlM2Q6IFxcXCIsIGluc25faWR4KTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NDk4OlxcdFxcdGJwZl92ZXJib3NlX2luc24oZW52LCBcXHUwMDI2aW5zbnNbaW5zbl9pZHhdKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtNDk5LVxcdFxcdGluc25fcG9zID0gZW52LVxcdTAwM2Vsb2cuZW5kX3BvcztcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0xMDI5PXN0YXRpYyB2b2lkIGFyZ190cmFja19sb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgaWR4LFxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNDItXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlM2Q6IFxcXCIsIGlkeCk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjEwNDM6XFx0XFx0XFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDQ0LVxcdFxcdFxcdHByaW50ZWQgPSB0cnVlO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNTYtXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlM2Q6IFxcXCIsIGlkeCk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjEwNTc6XFx0XFx0XFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDU4LVxcdFxcdFxcdHByaW50ZWQgPSB0cnVlO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTEwNjctXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlM2Q6IFxcXCIsIGlkeCk7XFxua2VybmVsL2JwZi9saXZlbmVzcy5jOjEwNjg6XFx0XFx0XFx0YnBmX3ZlcmJvc2VfaW5zbihlbnYsIGluc24pO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xMDY5LVxcdFxcdFxcdHByaW50ZWQgPSB0cnVlO1xcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jPTE1MTc9c3RhdGljIHZvaWQgcHJpbnRfc3VicHJvZ19hcmdfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMTUzOC1cXHRcXHR2ZXJib3NlKGVudiwgXFxcIiUzZDogXFxcIiwgaWR4KTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MTUzOTpcXHRcXHRicGZfdmVyYm9zZV9pbnNuKGVudiwgXFx1MDAyNmluc25zW2lkeF0pO1xcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy0xNTQwLVxcdFxcdHZlcmJvc2UoZW52LCBcXFwiXFxcXG5cXFwiKTtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYz0yMjI2PWludCBicGZfY29tcHV0ZV9saXZlX3JlZ2lzdGVycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTIzMjYtXFx0XFx0XFx0cG9zID0gZW52LVxcdTAwM2Vsb2cuZW5kX3BvcztcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6MjMyNzpcXHRcXHRcXHRicGZfdmVyYm9zZV9pbnNuKGVudiwgXFx1MDAyNmluc25zW2ldKTtcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmMtMjMyOC1cXHRcXHRcXHRpbnNuX3BvcyA9IGVudi1cXHUwMDNlbG9nLmVuZF9wb3M7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzM1OT1jb25zdCBjaGFyICpicGZfZGlzYXNtX2tmdW5jX25hbWUodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzNzYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMzNzc6dm9pZCBicGZfdmVyYm9zZV9pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzM3OC17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg0NjY9c3RhdGljIGludCBkb19jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NTcyLVxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJWQ6IFxcXCIsIGVudi1cXHUwMDNlaW5zbl9pZHgpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODU3MzpcXHRcXHRcXHRicGZfdmVyYm9zZV9pbnNuKGVudiwgaW5zbik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NTc0LVxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiXFxcXG5cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6NTk6NTUuMzA2MzYxNjExWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5NjM2MDg3NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIEluc3RydWN0aW9uIEhhbmRsaW5nIFZ1bG5lcmFiaWxpdHkgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBCUEYgaW5zdHJ1Y3Rpb24gaXNzdWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBicGZfdmVyYm9zZV9pbnNuYCBnZXRzIGNhbGxlZCB3aGVuIGxvYWRpbmcgYSBCUEYgcHJvZ3JhbSB3aXRoIGxvZ2dpbmcgZW5hYmxlZCwgb3IgZHVyaW5nIHZlcmlmaWNhdGlvbiBwcm9jZXNzZXMuIEl0IHNlZW1zIGxpa2UgdGhlIHZlcmlmaWVyIGNhbiBlbmNvdW50ZXIgYW55IEJQRiBpbnN0cnVjdGlvbiwgZXZlbiBjb21wbGV0ZWx5IGludmFsaWQgb25lcyBsaWtlIGBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX0RXYC5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgdmVyaWZpZXIgaGFuZGxlcyB0aGVzZSBpbnN0cnVjdGlvbnMuIFNwZWNpZmljYWxseSwgZHVyaW5nIGNoZWNrcyBsaWtlIGBjaGVja19tZW1fYWNjZXNzYCwgYGRvX2NoZWNrYCwgYW5kIGBjaGVja19jZmdgLiBJdCBzZWVtcyB0aGF0IHdoZW4gYGJwZihCUEZfUFJPR19MT0FEKWAgaXMgY2FsbGVkIHdpdGggYSBsb2dnaW5nIGxldmVsIHNldCwgYGJwZl92ZXJib3NlX2luc25gIHByaW50cyBlYWNoIGluc3RydWN0aW9uIGJlZm9yZSBpdCBnZXRzIHZlcmlmaWVkLlxuXG5Ob3cgaGVyZSdzIHRoZSBjcnVjaWFsIGJpdC4gSWYgYW4gaW5zdHJ1Y3Rpb24gaGFzIHRoZSBpbnZhbGlkIGNvbWJpbmF0aW9uIEkgbWVudGlvbmVkICgweDk5KSwgYHByaW50X2JwZl9pbnNuYCBub3cgcHJpbnRzIGBcIkJVR19sZHN4Xzk5XCJgIGFuZCByZXR1cm5zLiBJdCBwcmV2ZW50cyB3aGF0IHdvdWxkIGhhdmUgYmVlbiBhIE5VTEwgZGVyZWZlcmVuY2UgaW4gdGhlIGZvcm1hdHRpbmcgb2YgdGhpcyBpbnN0cnVjdGlvbiEgUHJldmlvdXNseSwgaXQgd291bGQgdHJ5IHRvIHJlYWQgYSBOVUxMIHBvaW50ZXIgYW5kIGZvcm1hdCB0aGUgc3RyaW5nLiBTbyB0aGUgcGF0Y2ggZG9lcyBwcmV2ZW50IGEgTlVMTCBkZXJlZmVyZW5jZS5cblxuSXMgdGhpcyBjb2RlIGFjdHVhbGx5IHJlYWNoYWJsZSB3aXRoaW4gdGhlIGtlcm5lbD8gWWVzLCBga2VybmVsL2JwZi9kaXNhc20uY2AgaXMgcGFydCBvZiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtLCB3aGljaCBpcyBkZWZpbml0ZWx5IHBhcnQgb2YgdGhlIGtlcm5lbCwgYW5kIGNhbiBiZSBhY2Nlc3NlZCB2aWEgdGhlIGBzeXNfYnBmYCBzeXNjYWxsLlxuXG5Ob3cgSSBuZWVkIHRvIGV2YWx1YXRlIHRoaXMgaW4gdGVybXMgb2YgZnV6emluZyBwb3RlbnRpYWwuIEFjY29yZGluZyB0byB0aGUgY3JpdGVyaWEgSSdtIHVzaW5nLCBTZWN0aW9uIDMgc3RhdGVzIHRoYXQgXCJXb3J0aEZ1enppbmc9dHJ1ZVwiIGlmIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGNvcmUgc3Vic3lzdGVtcyBsaWtlIEJQRi5cblxuU2VjdGlvbiAyIHNheXMgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBpZiBpdCdzIHB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcsIGRvY3VtZW50YXRpb24sIG9yIGJ1aWxkIHN5c3RlbSBjaGFuZ2VzLiBUaGlzIGlzIHdoZXJlIEkgaGF2ZSB0byBiZSBjYXJlZnVsLlxuXG5UaGlzIGlzbid0IHB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcuIEl0J3MgbW9kaWZ5aW5nIGhvdyBhbiBpbnZhbGlkIGluc3RydWN0aW9uIGlzIGRlY29kZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gYGtlcm5lbC9icGYvZGlzYXNtLmNgLCB3aGljaCBpcyB0aGUgaW52YWxpZCBpbnN0cnVjdGlvbiBoYW5kbGluZyBsb2dpYy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBrZXJuZWwvYnBmL2Rpc2FzbS5jYCBpcyBjb21waWxlZCBpbnRvIGB2bWxpbnV4YC4gSSBzaG91bGQgY2hlY2sgdGhlIE1ha2VmaWxlIGluIGBrZXJuZWwvYnBmL2AgdG8gdmVyaWZ5IHRoYXQuXG5cblNvLCB0aGlzIGxvb2tzIGxpa2UgYSBkZWZpbml0ZSBcIldvcnRoRnV6emluZz10cnVlXCIgc2l0dWF0aW9uLiBUaGUgcGF0Y2ggY2xlYXJseSB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gYSBjb3JlIEJQRiBzdWJzeXN0ZW0gYnkgbW9kaWZ5aW5nIGhvdyBpdCBoYW5kbGVzIGludmFsaWQgaW5zdHJ1Y3Rpb25zLiBJdCdzIG5vdCBqdXN0IGEgbWVzc2FnZSBjaGFuZ2U7IGl0IGNoYW5nZXMgY29udHJvbCBmbG93IHRvIHByZXZlbnQgYSBOVUxMIGRlcmVmZXJlbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ0MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDowMDowMS4yNjk5ODE5MzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdG9iai15IDo9IGNvcmUub1xcbiAgIDM6XFx0aWZuZXEgKCQoQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OKSx5KVxcbiAgIDQ6XFx0IyBfX19icGZfcHJvZ19ydW4oKSBuZWVkcyBHQ1NFIGRpc2FibGVkIG9uIHg4Njsgc2VlIDMxOTNjMDgzNmYyMDMgZm9yIGRldGFpbHNcXG4gICA1OlxcdGNmbGFncy1ub2djc2UtJChDT05GSUdfWDg2KSQoQ09ORklHX0NDX0lTX0dDQykgOj0gLWZuby1nY3NlXFxuICAgNjpcXHRlbmRpZlxcbiAgIDc6XFx0Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbiAgIDg6XFx0XFxuICAgOTpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXFxuICAxMDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbiAgMTE6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbiAgMTI6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXFxuICAxMzpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXFxuICAxNDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXFxuICAxNTpcXHRvYmotJHtDT05GSUdfQlBGX0xTTX1cXHQgICs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cXG4gIDE2OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZGlzYXNtLm8gbXByb2cub1xcbiAgMTc6XFx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcbiAgMTg6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xcbiAgMTk6XFx0aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG4gIDIwOlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYXJlbmEubyByYW5nZV90cmVlLm9cXG4gIDIxOlxcdGVuZGlmXFxuICAyMjpcXHRvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gZGlzcGF0Y2hlci5vXFxuICAyMzpcXHRpZmVxICgkKENPTkZJR19ORVQpLHkpXFxuICAyNDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRldm1hcC5vXFxuICAyNTpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNwdW1hcC5vXFxuICAyNjpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IG9mZmxvYWQub1xcbiAgMjc6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBuZXRfbmFtZXNwYWNlLm9cXG4gIDI4OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gdGN4Lm9cXG4gIDI5OlxcdGVuZGlmXFxuICAzMDpcXHRpZmVxICgkKENPTkZJR19LRVlTKSx5KVxcbiAgMzE6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBrZXlzLm9cXG4gIDMyOlxcdGVuZGlmXFxuICAzMzpcXHRpZmVxICgkKENPTkZJR19QRVJGX0VWRU5UUykseSlcXG4gIDM0OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3RhY2ttYXAub1xcbiAgMzU6XFx0ZW5kaWZcXG4gIDM2OlxcdGlmZXEgKCQoQ09ORklHX0NHUk9VUFMpLHkpXFxuICAzNzpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNncm91cF9pdGVyLm8gYnBmX2NncnBfc3RvcmFnZS5vXFxuICAzODpcXHRlbmRpZlxcbiAgMzk6XFx0b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICs9IGNncm91cC5vXFxuICA0MDpcXHRpZmVxICgkKENPTkZJR19JTkVUKSx5KVxcbiAgNDE6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSByZXVzZXBvcnRfYXJyYXkub1xcbiAgNDI6XFx0ZW5kaWZcXG4gIDQzOlxcdGlmZXEgKCQoQ09ORklHX1NZU0ZTKSx5KVxcbiAgNDQ6XFx0b2JqLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSArPSBzeXNmc19idGYub1xcbiAgNDU6XFx0ZW5kaWZcXG4gIDQ2OlxcdGlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXFxuICA0NzpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9zdHJ1Y3Rfb3BzLm9cXG4gIDQ4OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3B1bWFzay5vXFxuICA0OTpcXHQjIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcXG4gIDUwOlxcdCMgZGVkdXBsaWNhdGVzIGZ1bmN0aW9uIHByb3RvdHlwZXMgd2l0aGluXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjAwOjAxLjI3MDA3MTg5N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTU5NTg0MjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgQlBGIERpc2Fzc2VtYmxlciBCdWlsZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkaXNhc20ub2AuIFJpZ2h0LCB0aGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgdGhlIGRpc2Fzc2VtYmxlciBvYmplY3QgZmlsZSwgYGRpc2FzbS5vYCwgaXMgb25seSBpbmNsdWRlZCBpbiB0aGUgYnVpbGQgaWYgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IHRvIGVuc3VyZSB0aGUgZGlzYXNzZW1ibGVyIGlzbid0IGJ1aWx0IHVubGVzcyB0aGUgY29yZSBCUEYgc3lzdGVtIGNhbGwgZnVuY3Rpb25hbGl0eSBpcyBhbHNvIGF2YWlsYWJsZS4gTWFrZXMgcGVyZmVjdCBzZW5zZS5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIHN5c3RlbSBjYWxsIGlzIHNldCB1cCBwcm9wZXJseS4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgaW5pdC9LY29uZmlnYCBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgcGxhY2VzIGZvciB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIGFuZCB0aGUgQlBGIGNvbmZpZ3VyYXRpb24sIHJlc3BlY3RpdmVseS4gSSBjYW4gcXVpY2tseSBzY2FuIHRoZW0gdG8gc2VlIGlmIGBDT05GSUdfQlBGX1NZU0NBTExgIGRlcGVuZHMgb24gYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGltcGFjdCBvdXIgYnVpbGQgb3IgaGF2ZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLiBJJ2xsIG5lZWQgdG8ga25vdyB0aGlzIHRvIGJlIHN1cmUgdGhpcyBidWlsZCB3aWxsIHN1Y2NlZWQsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGhhdmluZyB0aGlzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODkxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDowMDowNS44Mjk2NjEzMThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzU4OTkxNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MDA6MDcuOTA1NTY1NDIzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3NDE5ODk4NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBLY29uZmlnIGZpbGU6XG5cbioqTmF2aWdhdGluZyB0aGUgQlBGIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIExldCdzIHplcm8gaW4gb24gbGluZSAyNS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGVzZSBCUEYgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkLCBhbmQgdGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIGJldHdlZW4gZGlmZmVyZW50IEJQRiBmZWF0dXJlcy4gS25vd2luZyB0aGUgZXhhY3Qgb3B0aW9ucyBhbmQgdGhlaXIgaW50ZXJhY3Rpb25zIGlzIGNydWNpYWwgZm9yIG9wdGltaXppbmcgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHNwZWNpZmljIHVzZSBjYXNlcyBhbmQgYXJjaGl0ZWN0dXJlcy4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIHRoZSBpbXBhY3RzIG9mIGVuYWJsaW5nL2Rpc2FibGluZyB2YXJpb3VzIEJQRiBmZWF0dXJlcy4gVGhpcyBpcyBjcml0aWNhbCBmb3IgZ2V0dGluZyB0aGUgcmlnaHQgYmFsYW5jZSBvZiBmdW5jdGlvbmFsaXR5LCBzZWN1cml0eSwgYW5kIHBlcmZvcm1hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzMwMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjAwOjEyLjY0NzU2MDE0MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAyODpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAyOTpcXHRcXHRzZWxlY3QgQlBGXFxuICAzMDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDMxOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzI6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzM6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICAzNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDA6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MDA6MTIuNjQ3NjQyNjUxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1MTI3Njc0NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIERpc2Fzc2VtYmx5IGFuZCBWZXJpZmljYXRpb24gQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9uLCBzbyBJJ2xsIGNoZWNrIHRoZSBmb2N1cyBzeW1ib2xzLiBMb29rcyBsaWtlIHRoZSBtb2RpZmljYXRpb24gY2VudGVycyBhcm91bmQgYHByaW50X2JwZl9pbnNuYCBpbiBga2VybmVsL2JwZi9kaXNhc20uY2AuIFRoYXQncyB0aGUgZnVuY3Rpb24uIFJlbGV2YW50IGNhbGxlcnMgc2VlbSB0byBiZSBgYnBmX3ZlcmJvc2VfaW5zbmAgYW5kIGBmb3JtYXRfZGlzYXNtX2xpbmVgLlxuXG5Ob3csIGlzIGBwcmludF9icGZfaW5zbmAgYSBzdGF0aWMgaGVscGVyIG9yIGEgZ2xvYmFsPyBMZXQgbWUgY2hlY2sgbGluZSAxODYuLi4gQWgsIGl0J3MgZ2xvYmFsLiBHb29kLiBUaGF0IGNsYXJpZmllcyBpdHMgc2NvcGUuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayBvdGhlciBzeW1ib2xzLiBJIHNlZSBgYnBmX3ZlcmJvc2VfaW5zbmAgYWxzbyBhcHBlYXJzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGlzIGlzIHR5cGljYWw7IEknZCBleHBlY3QgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IGFjcm9zcyB0aG9zZSBkb21haW5zLlxuXG5UaW1lIHRvIGFwcGx5IG15IEZvY3VzU3ltYm9scyBydWxlcy4gSSBuZWVkIHRvIGF2b2lkIGxpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoZXNlIGZ1bmN0aW9ucywgYHByaW50X2JwZl9pbnNuYCwgYW5kIGBicGZfdmVyYm9zZV9pbnNuYCwgYXJlIHByZXR0eSBzcGVjaWZpYyB0byBCUEYgZGlzYXNzZW1ibHkgYW5kIHZlcmlmaWVyIGxvZ2dpbmcsIHNvIHRoZXkgbWVldCB0aGUgY3JpdGVyaWEgZm9yIGEgdGFyZ2V0ZWQgZW50cnlwb2ludC4gVGhhdCdzIGdvb2QuXG5cbk5leHQsIEknbGwgcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgRW5hYmxlQ29uZmlncy4gTGV0J3Mgc2VlLi4uIFllcCwgYEJQRl9TWVNDQUxMYCBpcyByZWxldmFudCBoZXJlLlxuXG5GaW5hbGx5LCBJJ2xsIGRvdWJsZS1jaGVjayBteSByZWFzb25pbmcuIFRoZSBwYXRjaCBpbXBsZW1lbnRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgcHJpbnRfYnBmX2luc24oKWAgdG8gYWRkcmVzcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2l0aGluIGBicGZfbGRzeF9zdHJpbmdgIHdoZW4gZGVhbGluZyB3aXRoIHNpZ24tZXh0ZW5kZWQgNjQtYml0IGxvYWQgb3BlcmF0aW9ucyAoc3BlY2lmaWNhbGx5IGBCUEZfTUVNU1hgIHdpdGggYEJQRl9EV2ApLiBUaGlzIGNvZGUgaXMgY29yZSBCUEYsIGFuZCBpdCdzIHJlYWNoZWQgdmlhIGBicGYoQlBGX1BST0dfTE9BRClgIGR1cmluZyB2ZXJpZmljYXRpb24vbG9nZ2luZy4gVGhpcyBpcyBhbGwgc3RhbmRhcmQuXG5cbkFscmlnaHQsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzYzLCJPdXRwdXRUb2tlbnMiOjEzMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjAwOjE5LjE2MDQxMjYwN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMzY1NDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInByaW50X2JwZl9pbnNuXCIsXG4gICAgXCJicGZfdmVyYm9zZV9pbnNuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kYXJ5L3ZhbGlkaXR5IGNoZWNrIGluIHByaW50X2JwZl9pbnNuKCkgd2l0aGluIHRoZSBjb3JlIEJQRiBzdWJzeXN0ZW0gdG8gaGFuZGxlIGludmFsaWQgc2lnbi1leHRlbmRlZCA2NC1iaXQgbG9hZHMgKEJQRl9NRU1TWCB3aXRoIEJQRl9EVykgYW5kIHByZXZlbnQgYWNjZXNzaW5nIHVuZGVmaW5lZCBhcnJheSBpbmRpY2VzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBrZXJuZWwgbG9naWMgZXhlY3V0ZWQgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiBhbmQgZGlzYXNzZW1ibHkgdmlhIHN5c19icGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcmludF9icGZfaW5zblwiLFxuICAgIFwiYnBmX3ZlcmJvc2VfaW5zblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZGFyeS92YWxpZGl0eSBjaGVjayBpbiBwcmludF9icGZfaW5zbigpIHdpdGhpbiB0aGUgY29yZSBCUEYgc3Vic3lzdGVtIHRvIGhhbmRsZSBpbnZhbGlkIHNpZ24tZXh0ZW5kZWQgNjQtYml0IGxvYWRzIChCUEZfTUVNU1ggd2l0aCBCUEZfRFcpIGFuZCBwcmV2ZW50IGFjY2Vzc2luZyB1bmRlZmluZWQgYXJyYXkgaW5kaWNlcy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUga2VybmVsIGxvZ2ljIGV4ZWN1dGVkIGR1cmluZyBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24gYW5kIGRpc2Fzc2VtYmx5IHZpYSBzeXNfYnBmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDowMDoxOS4yNTA3ODg5NjFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzQyNDczOTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MDA6MTkuMjUxNTE3MTQxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjYzNDE3Mzk2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByZXZlbnRzIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgcmVhZCBpbiBrZXJuZWwvYnBmL2Rpc2FzbS5jIGJ5IGFkZGluZyBhIGNoZWNrIGZvciBCUEZfTERYIGluc3RydWN0aW9ucyB3aXRoIEJQRl9NRU1TWCBtb2RlIGFuZCBCUEZfRFcgc2l6ZSBiZWZvcmUgaW5kZXhpbmcgaW50byBicGZfbGRzeF9zdHJpbmdbXS4gU2luY2UgYnBmX2xkc3hfc3RyaW5nIG9ubHkgZGVmaW5lcyBlbnRyaWVzIGZvciBCUEZfQiwgQlBGX0gsIGFuZCBCUEZfVyAoaW5kaWNlcyAwLi4yKSwgaW5kZXhpbmcgd2l0aCBCUEZfRFcgKGluZGV4IDMpIHJlc3VsdGVkIGluIGEgZ2xvYmFsLW91dC1vZi1ib3VuZHMgYWNjZXNzLiBHbG9iYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgcG90ZW50aWFsIE5VTEwgZGVyZWZlcmVuY2VzIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Nlcywgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBkYXRhIHByb3BhZ2F0aW9uLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MWQ0MzQ5NTk5NjE2MmNhZWY5ZTk3OGUxNzNiMDhkY2YwN2ZlNjMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxOTo1OToyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZGlzYXNtLmMgYi9rZXJuZWwvYnBmL2Rpc2FzbS5jXG5pbmRleCA1MGIzY2E1MTQ5YTBhLi43MGMyYjI4MWNmZTk0IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9kaXNhc20uY1xuKysrIGIva2VybmVsL2JwZi9kaXNhc20uY1xuQEAgLTI5OSw2ICsyOTksMTAgQEAgdm9pZCBwcmludF9icGZfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc25fY2JzICpjYnMsXG4gXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIkJVR19sZHhfJTAyeFwiLCBpbnNuLVx1MDAzZWNvZGUpO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuK1x0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNU1ggXHUwMDI2XHUwMDI2IEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0RXKSB7XG4rXHRcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIkJVR19sZHN4XyUwMnhcIiwgaW5zbi1cdTAwM2Vjb2RlKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbiBcdFx0dmVyYm9zZShjYnMtXHUwMDNlcHJpdmF0ZV9kYXRhLCBcIiglMDJ4KSByJWQgPSAqKCVzICopKHIlZCAlK2QpXCIsXG4gXHRcdFx0aW5zbi1cdTAwM2Vjb2RlLCBpbnNuLVx1MDAzZWRzdF9yZWcsXG4gXHRcdFx0QlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNID9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjAwOjE5LjI1MTUxODE0MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDk5MzUyMTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpc3NlY3RpbmcgdGhlIEJQRiBEaXNhc3NlbWJseSBDb2RlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIHNwZWNpZmljIGNoYW5nZSBhbmQgdGhlIGNvZGUgYXJvdW5kIGl0IGluIGBrZXJuZWwvYnBmL2Rpc2FzbS5jYC4gVGhlIGRpZmYgaXRzZWxmIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDsgaXQncyBhZGRpbmcgYSBuZXcgY2hlY2suIEkgcXVpY2tseSB6ZXJvIGluIG9uIHRoZSBhZGRlZCBgaWZgIHN0YXRlbWVudC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGJ1ZyBpbiB0aGUgZGlzYXNzZW1ibGVyLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgQlBGX01FTVNYYCBpbnN0cnVjdGlvbnMgd2l0aCBhIGBCUEZfRFdgIHNpemUuIFRoZSBjb21tZW50IFwiQlVHX2xkc3hfJTAyeFwiIHN1Z2dlc3RzIGFuIGVycm9yIGNvbmRpdGlvbiBpcyBiZWluZyBpZGVudGlmaWVkLCBwcm9iYWJseSByZWxhdGVkIHRvIHNpZ24gZXh0ZW5zaW9uIGR1cmluZyBtZW1vcnkgbG9hZCBvcGVyYXRpb25zLlxuXG5NeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBpcyBndWFyZGluZyBhZ2FpbnN0IGFuIHVuZGVmaW5lZCBiZWhhdmlvci4gVGhpcyBhZGRpdGlvbmFsIGNoZWNrIGlzIGxpa2VseSBhaW1lZCBhdCBwcmV2ZW50aW5nIGNyYXNoZXMgb3IgaW5jb3JyZWN0IGludGVycHJldGF0aW9ucyB3aGVuIGhhbmRsaW5nIGNlcnRhaW4gQlBGIGluc3RydWN0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGUgYWRkZWQgY2hlY2sgYWRkcmVzc2VzIGBCUEZfTUVNU1hgIG1vZGUgd2l0aCBhIGRvdWJsZS13b3JkIHNpemUuIFRoZSBmb3JtYXR0aW5nIG9mIHRoZSBgdmVyYm9zZWAgY2FsbCBpcyBjb25zaXN0ZW50IHdpdGggZXhpc3RpbmcgZGVidWdnaW5nIG91dHB1dHMsIHNvIHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGFkZGl0aW9uIGZvciBlcnJvciByZXBvcnRpbmcgZHVyaW5nIGRpc2Fzc2VtYmx5LiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ2Qgc2F5IHRoaXMgaXMgYSBkZWZlbnNpdmUgbWVhc3VyZSB0byBlbnN1cmUgdGhlIGRpc2Fzc2VtYmxlciBpcyByb2J1c3Qgd2hlbiBmYWNpbmcgdGhlc2UgdHlwZXMgb2YgbWVtb3J5IGxvYWQgaW5zdHJ1Y3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MDA6MjQuMzUwODczNTI5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvZGlzYXNtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjcwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjcwOlxcdFxcdFxcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcXHUwMDI2XFx1MDAyNlxcbiAyNzE6XFx0XFx0XFx0XFx0ICAgaW5zbi1cXHUwMDNlaW1tID09IEJQRl9MT0FEX0FDUSkge1xcbiAyNzI6XFx0XFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByJWQgPSBsb2FkX2FjcXVpcmUoKCVzICopKHIlZCAlK2QpKVxcXCIsXFxuIDI3MzpcXHRcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vjb2RlLCBpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbiAyNzQ6XFx0XFx0XFx0XFx0XFx0YnBmX2xkc3Rfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdLFxcbiAyNzU6XFx0XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlc3JjX3JlZywgaW5zbi1cXHUwMDNlb2ZmKTtcXG4gMjc2OlxcdFxcdFxcdH0gZWxzZSBpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyBcXHUwMDI2XFx1MDAyNlxcbiAyNzc6XFx0XFx0XFx0XFx0ICAgaW5zbi1cXHUwMDNlaW1tID09IEJQRl9TVE9SRV9SRUwpIHtcXG4gMjc4OlxcdFxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgc3RvcmVfcmVsZWFzZSgoJXMgKikociVkICUrZCksIHIlZClcXFwiLFxcbiAyNzk6XFx0XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gMjgwOlxcdFxcdFxcdFxcdFxcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSBcXHUwMDNlXFx1MDAzZSAzXSxcXG4gMjgxOlxcdFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcsIGluc24tXFx1MDAzZW9mZiwgaW5zbi1cXHUwMDNlc3JjX3JlZyk7XFxuIDI4MjpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyODM6XFx0XFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIkJVR18lMDJ4XFxcIiwgaW5zbi1cXHUwMDNlY29kZSk7XFxuIDI4NDpcXHRcXHRcXHR9XFxuIDI4NTpcXHRcXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9TVCkge1xcbiAyODY6XFx0XFx0XFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9NRU0pIHtcXG4gMjg3OlxcdFxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgKiglcyAqKShyJWQgJStkKSA9ICVkXFxcIixcXG4gMjg4OlxcdFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsXFxuIDI4OTpcXHRcXHRcXHRcXHRcXHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuIDI5MDpcXHRcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbiAyOTE6XFx0XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlb2ZmLCBpbnNuLVxcdTAwM2VpbW0pO1xcbiAyOTI6XFx0XFx0XFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSAweGMwIC8qIEJQRl9OT1NQRUMsIG5vIFVBUEkgKi8pIHtcXG4gMjkzOlxcdFxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCIoJTAyeCkgbm9zcGVjXFxcIiwgaW5zbi1cXHUwMDNlY29kZSk7XFxuIDI5NDpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyOTU6XFx0XFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIkJVR19zdF8lMDJ4XFxcIiwgaW5zbi1cXHUwMDNlY29kZSk7XFxuIDI5NjpcXHRcXHRcXHR9XFxuIDI5NzpcXHRcXHR9IGVsc2UgaWYgKGNsYXNzID09IEJQRl9MRFgpIHtcXG4gMjk4OlxcdFxcdFxcdGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSAhPSBCUEZfTUVNIFxcdTAwMjZcXHUwMDI2IEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9NRU1TWCkge1xcbiAyOTk6XFx0XFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIkJVR19sZHhfJTAyeFxcXCIsIGluc24tXFx1MDAzZWNvZGUpO1xcbiAzMDA6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAzMDE6XFx0XFx0XFx0fVxcbiAzMDI6XFx0XFx0XFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9NRU1TWCBcXHUwMDI2XFx1MDAyNiBCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfRFcpIHtcXG4gMzAzOlxcdFxcdFxcdFxcdHZlcmJvc2UoY2JzLVxcdTAwM2Vwcml2YXRlX2RhdGEsIFxcXCJCVUdfbGRzeF8lMDJ4XFxcIiwgaW5zbi1cXHUwMDNlY29kZSk7XFxuIDMwNDpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDMwNTpcXHRcXHRcXHR9XFxuIDMwNjpcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9ICooJXMgKikociVkICUrZClcXFwiLFxcbiAzMDc6XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSwgaW5zbi1cXHUwMDNlZHN0X3JlZyxcXG4gMzA4OlxcdFxcdFxcdFxcdEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9NRU0gP1xcbiAzMDk6XFx0XFx0XFx0XFx0XFx0IGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSBcXHUwMDNlXFx1MDAzZSAzXSA6XFxuIDMxMDpcXHRcXHRcXHRcXHRcXHQgYnBmX2xkc3hfc3RyaW5nW0JQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpIFxcdTAwM2VcXHUwMDNlIDNdLFxcbiAzMTE6XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlc3JjX3JlZywgaW5zbi1cXHUwMDNlb2ZmKTtcXG4gMzEyOlxcdFxcdH0gZWxzZSBpZiAoY2xhc3MgPT0gQlBGX0xEKSB7XFxuIDMxMzpcXHRcXHRcXHRpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FCUykge1xcbiAzMTQ6XFx0XFx0XFx0XFx0dmVyYm9zZShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgXFxcIiglMDJ4KSByMCA9ICooJXMgKilza2JbJWRdXFxcIixcXG4gMzE1OlxcdFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWNvZGUsXFxuIDMxNjpcXHRcXHRcXHRcXHRcXHRicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxuIDMxNzpcXHRcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VpbW0pO1xcbiAzMTg6XFx0XFx0XFx0fSBlbHNlIGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfSU5EKSB7XFxuIDMxOTpcXHRcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIwID0gKiglcyAqKXNrYltyJWQgKyAlZF1cXFwiLFxcbiAzMjA6XFx0XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlY29kZSxcXG4gMzIxOlxcdFxcdFxcdFxcdFxcdGJwZl9sZHN0X3N0cmluZ1tCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSBcXHUwMDNlXFx1MDAzZSAzXSxcXG4gMzIyOlxcdFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZXNyY19yZWcsIGluc24tXFx1MDAzZWltbSk7XFxuIDMyMzpcXHRcXHRcXHR9IGVsc2UgaWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9JTU0gXFx1MDAyNlxcdTAwMjZcXG4gMzI0OlxcdFxcdFxcdFxcdCAgIEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9EVykge1xcbiAzMjU6XFx0XFx0XFx0XFx0LyogQXQgdGhpcyBwb2ludCwgd2UgYWxyZWFkeSBtYWRlIHN1cmUgdGhhdCB0aGUgc2Vjb25kXFxuIDMyNjpcXHRcXHRcXHRcXHQgKiBwYXJ0IG9mIHRoZSBsZGltbTY0IGluc24gaXMgYWNjZXNzaWJsZS5cXG4gMzI3OlxcdFxcdFxcdFxcdCAqL1xcbiAzMjg6XFx0XFx0XFx0XFx0dTY0IGltbSA9ICgodTY0KShpbnNuICsgMSktXFx1MDAzZWltbSBcXHUwMDNjXFx1MDAzYyAzMikgfCAodTMyKWluc24tXFx1MDAzZWltbTtcXG4gMzI5OlxcdFxcdFxcdFxcdGJvb2wgaXNfcHRyID0gaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9GRCB8fFxcbiAzMzA6XFx0XFx0XFx0XFx0XFx0ICAgICAgaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9WQUxVRSB8fFxcbiAzMzE6XFx0XFx0XFx0XFx0XFx0ICAgICAgaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9JRFggfHxcXG4gMzMyOlxcdFxcdFxcdFxcdFxcdCAgICAgIGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19NQVBfSURYX1ZBTFVFIHx8XFxuIDMzMzpcXHRcXHRcXHRcXHRcXHQgICAgICBpbnNuLVxcdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fQlRGX0lEO1xcbiAzMzQ6XFx0XFx0XFx0XFx0Y2hhciB0bXBbNjRdO1xcbiAzMzU6XFx0XFxuIDMzNjpcXHRcXHRcXHRcXHRpZiAoaXNfcHRyIFxcdTAwMjZcXHUwMDI2ICFhbGxvd19wdHJfbGVha3MpXFxuIDMzNzpcXHRcXHRcXHRcXHRcXHRpbW0gPSAwO1xcbiAzMzg6XFx0XFxuIDMzOTpcXHRcXHRcXHRcXHR2ZXJib3NlKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBcXFwiKCUwMngpIHIlZCA9ICVzXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MDA6MjQuMzUwOTY2ODQ5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2ODg0MzgyNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgQlBGIERpc2Fzc2VtYmx5IEZ1bmN0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGJwZl9sZHN4X3N0cmluZ2AgbGl2ZXMgaW4gdGhlIGtlcm5lbCdzIEJQRiBkaXNhc3NlbWJseSBjb2RlLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgYGtlcm5lbC9icGYvZGlzYXNtLmNgLiBUaGF0IGZpbGUgaXMgdGhlIG1vc3QgbGlrZWx5IGxvY2F0aW9uIGZvciB0aGF0IHR5cGUgb2YgZnVuY3Rpb24sIGVzcGVjaWFsbHkgZ2l2ZW4gaXRzIG5hbWUuIEknbSBnb2luZyB0byBqdW1wIGluIHRoZXJlIGFuZCBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZGVmaW5pdGlvbi4gSXQgd2lsbCBiZSBoZWxwZnVsIHRvIHNlZSB3aGVyZSBpdCdzIGJlaW5nIHVzZWQgdG9vLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbXBpbGF0aW9uIGZsYWdzIEkgc2hvdWxkIGxvb2sgb3V0IGZvciwgb3IgcGVyaGFwcyBpZiB0aGVyZSBhcmUgYW55IGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuIEkgd2lsbCBzdGFydCBieSBmaW5kaW5nIHRoZSBkZWZpbml0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDM5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDowMDoyNi4wMzk0MTI4MzRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvZGlzYXNtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuICAgMjpcXHQvKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxNCBQTFVNZ3JpZCwgaHR0cDovL3BsdW1ncmlkLmNvbVxcbiAgIDM6XFx0ICogQ29weXJpZ2h0IChjKSAyMDE2IEZhY2Vib29rXFxuICAgNDpcXHQgKi9cXG4gICA1OlxcdFxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbiAgIDc6XFx0XFxuICAgODpcXHQjaW5jbHVkZSBcXFwiZGlzYXNtLmhcXFwiXFxuICAgOTpcXHRcXG4gIDEwOlxcdCNkZWZpbmUgX19CUEZfRlVOQ19TVFJfRk4oeCkgW0JQRl9GVU5DXyAjIyB4XSA9IF9fc3RyaW5naWZ5KGJwZl8gIyMgeClcXG4gIDExOlxcdHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZnVuY19pZF9zdHJbXSA9IHtcXG4gIDEyOlxcdFxcdF9fQlBGX0ZVTkNfTUFQUEVSKF9fQlBGX0ZVTkNfU1RSX0ZOKVxcbiAgMTM6XFx0fTtcXG4gIDE0OlxcdCN1bmRlZiBfX0JQRl9GVU5DX1NUUl9GTlxcbiAgMTU6XFx0XFxuICAxNjpcXHRzdGF0aWMgY29uc3QgY2hhciAqX19mdW5jX2dldF9uYW1lKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcXG4gIDE3OlxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gIDE4OlxcdFxcdFxcdFxcdFxcdCAgIGNoYXIgKmJ1ZmYsIHNpemVfdCBsZW4pXFxuICAxOTpcXHR7XFxuICAyMDpcXHRcXHRCVUlMRF9CVUdfT04oQVJSQVlfU0laRShmdW5jX2lkX3N0cikgIT0gX19CUEZfRlVOQ19NQVhfSUQpO1xcbiAgMjE6XFx0XFxuICAyMjpcXHRcXHRpZiAoIWluc24tXFx1MDAzZXNyY19yZWcgXFx1MDAyNlxcdTAwMjZcXG4gIDIzOlxcdFxcdCAgICBpbnNuLVxcdTAwM2VpbW0gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VpbW0gXFx1MDAzYyBfX0JQRl9GVU5DX01BWF9JRCBcXHUwMDI2XFx1MDAyNlxcbiAgMjQ6XFx0XFx0ICAgIGZ1bmNfaWRfc3RyW2luc24tXFx1MDAzZWltbV0pXFxuICAyNTpcXHRcXHRcXHRyZXR1cm4gZnVuY19pZF9zdHJbaW5zbi1cXHUwMDNlaW1tXTtcXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0aWYgKGNicyBcXHUwMDI2XFx1MDAyNiBjYnMtXFx1MDAzZWNiX2NhbGwpIHtcXG4gIDI4OlxcdFxcdFxcdGNvbnN0IGNoYXIgKnJlcztcXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0XFx0cmVzID0gY2JzLVxcdTAwM2VjYl9jYWxsKGNicy1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBpbnNuKTtcXG4gIDMxOlxcdFxcdFxcdGlmIChyZXMpXFxuICAzMjpcXHRcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbiAgMzM6XFx0XFx0fVxcbiAgMzQ6XFx0XFxuICAzNTpcXHRcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0NBTEwpXFxuICAzNjpcXHRcXHRcXHRzbnByaW50ZihidWZmLCBsZW4sIFxcXCIlK2RcXFwiLCBpbnNuLVxcdTAwM2VpbW0pO1xcbiAgMzc6XFx0XFx0ZWxzZSBpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpXFxuICAzODpcXHRcXHRcXHRzbnByaW50ZihidWZmLCBsZW4sIFxcXCJrZXJuZWwtZnVuY3Rpb25cXFwiKTtcXG4gIDM5OlxcdFxcbiAgNDA6XFx0XFx0cmV0dXJuIGJ1ZmY7XFxuICA0MTpcXHR9XFxuICA0MjpcXHRcXG4gIDQzOlxcdHN0YXRpYyBjb25zdCBjaGFyICpfX2Z1bmNfaW1tX25hbWUoY29uc3Qgc3RydWN0IGJwZl9pbnNuX2NicyAqY2JzLFxcbiAgNDQ6XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiAgNDU6XFx0XFx0XFx0XFx0XFx0ICAgdTY0IGZ1bGxfaW1tLCBjaGFyICpidWZmLCBzaXplX3QgbGVuKVxcbiAgNDY6XFx0e1xcbiAgNDc6XFx0XFx0aWYgKGNicyBcXHUwMDI2XFx1MDAyNiBjYnMtXFx1MDAzZWNiX2ltbSlcXG4gIDQ4OlxcdFxcdFxcdHJldHVybiBjYnMtXFx1MDAzZWNiX2ltbShjYnMtXFx1MDAzZXByaXZhdGVfZGF0YSwgaW5zbiwgZnVsbF9pbW0pO1xcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHRzbnByaW50ZihidWZmLCBsZW4sIFxcXCIweCVsbHhcXFwiLCAodW5zaWduZWQgbG9uZyBsb25nKWZ1bGxfaW1tKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MDA6MjYuMDM5NTUwNDY0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwNDkyNjAzMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSHVudGluZyBEb3duIGBicGZfbGRzeF9zdHJpbmdgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBicGZfbGRzeF9zdHJpbmdgLiBUaGlzIG1lYW5zIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgaW4gYGRpc2FzbS5jYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgZGlzYXNzZW1ibHktcmVsYXRlZCBjb2RlLCBhbmQgaXQncyBhIHByZXR0eSBnb29kIGJldCB0aGF0IGFueSBsb2dpYyBzcGVjaWZpYyB0byBzdHJpbmctcmVsYXRlZCBCUEYgaW5zdHJ1Y3Rpb25zIHdvdWxkIHJlc2lkZSB0aGVyZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IGBkaXNhc20uY2AgcmV2ZWFscy4gSG9wZWZ1bGx5LCB0aGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYgd2lsbCBiZSBhIGRlYWQgZ2l2ZWF3YXksIGJ1dCBJJ2xsIGJlIHJlYWR5IHRvIGxvb2sgZm9yIHJlbGF0ZWQgbG9naWMgaWYgaXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cy4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDc3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDowMDozMC4wODg4MTQ3NjJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDAwMDkxMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2xkc3hfc3RyaW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvZGlzYXNtLmM9MTA4PXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBicGZfbGRzdF9zdHJpbmdbXSA9IHtcXG4tLVxcbmtlcm5lbC9icGYvZGlzYXNtLmMtMTE0LVxcbmtlcm5lbC9icGYvZGlzYXNtLmM6MTE1OnN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBicGZfbGRzeF9zdHJpbmdbXSA9IHtcXG5rZXJuZWwvYnBmL2Rpc2FzbS5jLTExNi1cXHRbQlBGX1cgXFx1MDAzZVxcdTAwM2UgM10gID0gXFxcInMzMlxcXCIsXFxuLS1cXG5rZXJuZWwvYnBmL2Rpc2FzbS5jPTE4Nj12b2lkIHByaW50X2JwZl9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbl9jYnMgKmNicyxcXG4tLVxcbmtlcm5lbC9icGYvZGlzYXNtLmMtMzA5LVxcdFxcdFxcdFxcdCBicGZfbGRzdF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10gOlxcbmtlcm5lbC9icGYvZGlzYXNtLmM6MzEwOlxcdFxcdFxcdFxcdCBicGZfbGRzeF9zdHJpbmdbQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkgXFx1MDAzZVxcdTAwM2UgM10sXFxua2VybmVsL2JwZi9kaXNhc20uYy0zMTEtXFx0XFx0XFx0aW5zbi1cXHUwMDNlc3JjX3JlZywgaW5zbi1cXHUwMDNlb2ZmKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MDA6MzIuNTI4ODI5OTRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcxMzE3OTU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgYGtlcm5lbC9icGYvZGlzYXNtLmNgLCBrZWVwaW5nIGluIG1pbmQgbXkgb3duIGRlZXAga25vd2xlZGdlIG9mIEJQRjpcblxuKipEaXNzZWN0aW5nIHRoZSBCUEYgRGlzYXNzZW1ibHkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gbGluZXMgMTA1LTEzMCBvZiBga2VybmVsL2JwZi9kaXNhc20uY2AuIE15IGluaXRpYWwgYXNzdW1wdGlvbiwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRoYXQgdGhpcyBzZWN0aW9uIGZvY3VzZXMgb24gYSBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIEJQRiBkaXNhc3NlbWJseSBwcm9jZXNzLCBwcm9iYWJseSByZWxhdGVkIHRvIGluc3RydWN0aW9uIGRlY29kaW5nIG9yIG91dHB1dCBmb3JtYXR0aW5nLiBJJ20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3Iga2V5IGZ1bmN0aW9uIGNhbGxzIG9yIHZhcmlhYmxlcyB0aGF0IGhpbnQgYXQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSdtIGV4cGVjdGluZyB0byBzZWUgc29tZXRoaW5nIHRoYXQgYnJpZGdlcyB0aGUgZ2FwIGJldHdlZW4gdGhlIHJhdyBpbnN0cnVjdGlvbiBiaXRzIGFuZCBhIGh1bWFuLXJlYWRhYmxlIHJlcHJlc2VudGF0aW9uLlxuXG5JIHdhbnQgdG8ga25vdyBpZiB0aGV5J3JlIGhhbmRsaW5nIHRoaW5ncyBsaWtlIGluc3RydWN0aW9uIHByZWZpeGVzLCBhZGRyZXNzaW5nIG1vZGVzLCBvciBtYXliZSBldmVuIG9wZXJhbmQgZGVjb2RpbmcgaW4gdGhpcyBjaHVuay4gQXJlIHRoZXkgdXNpbmcgYSBsb29rdXAgdGFibGUgZm9yIG9wY29kZSBtbmVtb25pY3M/IEFyZSB0aGVyZSBjYWxscyB0byBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgcHJpbnRpbmcgb2Ygc291cmNlL2Rlc3RpbmF0aW9uIHJlZ2lzdGVycz8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGtleSBsb2dpYyBjb250cm9sbGluZyBpbnN0cnVjdGlvbiByZXByZXNlbnRhdGlvbiBvdXRwdXQuIElmIHRoZXJlJ3MgYW4gYWR2YW5jZWQgZmVhdHVyZSBsaWtlIEpJVCBvcHRpbWl6YXRpb24sIHRoaXMgaXMgcHJvYmFibHkgd2hlcmUgaXTigJlzIGhhbmRsZWQuXG5cbkknbGwgYmUgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueSBvcHRpbWl6YXRpb25zIHRoZSBkZXZlbG9wZXIgbWlnaHQgaGF2ZSBpbXBsZW1lbnRlZCB0aGF0IEknbSBhd2FyZSBvZiBvciBtaWdodCB3YW50IHRvIGxldmVyYWdlLCBmb3IgdGhlIHdvcmsgdGhhdCBJJ20gZG9pbmcuIEZyb20gdGhpcywgSSdsbCBhc3Nlc3Mgd2hldGhlciBpdCBkb2VzIGEgZ29vZCBqb2Igb2YgcHJvcGVybHkgaGFuZGxpbmcgYWxsIHRoZSBpbnN0cnVjdGlvbiBwcmVmaXhlcywgYWRkcmVzc2luZyBtb2RlcywgYW5kIGFueSBtb3JlIGFkdmFuY2VkIGZlYXR1cmVzIHRoZSBwcm9ncmFtIG1heSBiZSBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk0OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjAwOjM1LjI0MjAxNTAzOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9kaXNhc20uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDU6XFx0XFx0W0JQRl9YT1IgXFx1MDAzZVxcdTAwM2UgNF0gID0gXFxcInhvclxcXCIsXFxuIDEwNjpcXHR9O1xcbiAxMDc6XFx0XFxuIDEwODpcXHRzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYnBmX2xkc3Rfc3RyaW5nW10gPSB7XFxuIDEwOTpcXHRcXHRbQlBGX1cgXFx1MDAzZVxcdTAwM2UgM10gID0gXFxcInUzMlxcXCIsXFxuIDExMDpcXHRcXHRbQlBGX0ggXFx1MDAzZVxcdTAwM2UgM10gID0gXFxcInUxNlxcXCIsXFxuIDExMTpcXHRcXHRbQlBGX0IgXFx1MDAzZVxcdTAwM2UgM10gID0gXFxcInU4XFxcIixcXG4gMTEyOlxcdFxcdFtCUEZfRFcgXFx1MDAzZVxcdTAwM2UgM10gPSBcXFwidTY0XFxcIixcXG4gMTEzOlxcdH07XFxuIDExNDpcXHRcXG4gMTE1OlxcdHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBicGZfbGRzeF9zdHJpbmdbXSA9IHtcXG4gMTE2OlxcdFxcdFtCUEZfVyBcXHUwMDNlXFx1MDAzZSAzXSAgPSBcXFwiczMyXFxcIixcXG4gMTE3OlxcdFxcdFtCUEZfSCBcXHUwMDNlXFx1MDAzZSAzXSAgPSBcXFwiczE2XFxcIixcXG4gMTE4OlxcdFxcdFtCUEZfQiBcXHUwMDNlXFx1MDAzZSAzXSAgPSBcXFwiczhcXFwiLFxcbiAxMTk6XFx0fTtcXG4gMTIwOlxcdFxcbiAxMjE6XFx0c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGJwZl9qbXBfc3RyaW5nWzE2XSA9IHtcXG4gMTIyOlxcdFxcdFtCUEZfSkEgXFx1MDAzZVxcdTAwM2UgNF0gICA9IFxcXCJqbXBcXFwiLFxcbiAxMjM6XFx0XFx0W0JQRl9KRVEgXFx1MDAzZVxcdTAwM2UgNF0gID0gXFxcIj09XFxcIixcXG4gMTI0OlxcdFxcdFtCUEZfSkdUIFxcdTAwM2VcXHUwMDNlIDRdICA9IFxcXCJcXHUwMDNlXFxcIixcXG4gMTI1OlxcdFxcdFtCUEZfSkxUIFxcdTAwM2VcXHUwMDNlIDRdICA9IFxcXCJcXHUwMDNjXFxcIixcXG4gMTI2OlxcdFxcdFtCUEZfSkdFIFxcdTAwM2VcXHUwMDNlIDRdICA9IFxcXCJcXHUwMDNlPVxcXCIsXFxuIDEyNzpcXHRcXHRbQlBGX0pMRSBcXHUwMDNlXFx1MDAzZSA0XSAgPSBcXFwiXFx1MDAzYz1cXFwiLFxcbiAxMjg6XFx0XFx0W0JQRl9KU0VUIFxcdTAwM2VcXHUwMDNlIDRdID0gXFxcIlxcdTAwMjZcXFwiLFxcbiAxMjk6XFx0XFx0W0JQRl9KTkUgXFx1MDAzZVxcdTAwM2UgNF0gID0gXFxcIiE9XFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MDA6MzUuMjQyMTM0MTU4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMzUxMDg1NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEJQRiBEaXNhc3NlbWJseSBQYXRjaCBmb3IgS0FTQU4gSW1wbGljYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgYnJhaW4ncyBnb2luZyB0byB0aGUgQlBGIGluc3RydWN0aW9uIGRpc2Fzc2VtYmx5IGxvZ2ljLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiB0aGUgYGJwZl9sZHN4X3N0cmluZ2AgYXJyYXkuIEkgc2VlIGl0IGRlZmluZXMgc3RyaW5nIHJlcHJlc2VudGF0aW9ucyBmb3Igc2lnbmVkIDgtYml0LCAxNi1iaXQsIGFuZCAzMi1iaXQgbG9hZHMuIEJ1dCB3YWl0IGEgbWludXRlLi4uIHdoZXJlJ3MgdGhlIGVudHJ5IGZvciBhIDY0LWJpdCBkb3VibGUtd29yZCAoYEJQRl9EV2ApIGxvYWQ/IFRoZSBjb2RlIGNsZWFybHkgaW1wbGllcyB0aGF0IHRoZSBhcnJheSBpcyBpbmRleGVkIGJ5IHRoZSBzaXplLCBzaGlmdGVkIHJpZ2h0IGJ5IDMgYml0cy4gTGV0J3MgbWFrZSBzdXJlIHRoZSBzaXplcyBhcmUgd2hhdCBJIGV4cGVjdCB0aGVtIHRvIGJlIC0gY2hlY2tpbmcgQlBGIHNpemVzIGNvbmZpcm1zIHRoYXQgQlBGX1cgaXMgMHgwMCwgQlBGX0ggaXMgMHgwOCwgQlBGX0IgaXMgMHgxMCBhbmQgQlBGX0RXIGlzIDB4MTgsIGNvbmZpcm1pbmcgdGhhdCBCUEZfRFcgXHUwMDNlXHUwMDNlIDMgaXMgaW5kZWVkIDMuIFRoaXMgYGJwZl9sZHN4X3N0cmluZ2AgYXJyYXkgaGFzIGEgbWF4aW11bSBpbmRleCBvZiAyLiBTbywgYW55IGF0dGVtcHQgdG8gYWNjZXNzIGBicGZfbGRzeF9zdHJpbmdbM11gIHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzISBUaGF0J3MgYSBjbGFzc2ljIGdsb2JhbCBhcnJheSBvdXQtb2YtYm91bmRzIHJlYWQuIFRoaXMgaXMgYSBiaWcgcmVkIGZsYWcg4oCTIGFueSBhY2Nlc3MgdG8gYGJwZl9sZHN4X3N0cmluZ1szXWAgd291bGQgYmUgb3V0IG9mIHRoZSBhcnJheSdzIGRlZmluZWQgYm91bmRzLlxuXG5Ob3csIHByZXZpb3VzbHksIHRoZSBjb2RlIHdvdWxkIGZhbGwgdGhyb3VnaCB0byB0aGUgdmVyYm9zZSBvdXRwdXQgY29kZSwgYXR0ZW1wdGluZyB0byBwcmludCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgaW5zdHJ1Y3Rpb24sIGluY2x1ZGluZyB0aGlzIGBicGZfbGRzeF9zdHJpbmdgLiBUaHVzLCB0aGUgb3V0LW9mLWJvdW5kcyByZWFkIG9yIE5VTEwgZGVyZWZlcmVuY2Ugd2FzIG9jY3VycmluZy5cblxuVGhlIHBhdGNoJ3MgaW50ZW50IGlzIGNsZWFyOiBpdCBhZGRzIGEgY29uZGl0aW9uYWwgY2hlY2sgdG8gcHJldmVudCB0aGlzIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBJdCdzIGVzc2VudGlhbGx5IHNob3J0LWNpcmN1aXRpbmcgdGhlIGZhdWx0eSBpbmRleGluZyBieSBhZGRpbmcgYW4gZWFybHkgcmV0dXJuIGlmIHRoZSBpbnN0cnVjdGlvbiBpcyBgQlBGX0xEWGAgd2l0aCBgQlBGX01FTVNYYCBtb2RlIGFuZCBgQlBGX0RXYCBzaXplLCB0aHVzIHByZXZlbnRpbmcgdGhlIGJhZCBhY2Nlc3MuIEl0IGludHJvZHVjZXMgYSBtZXNzYWdlLCBpbmRpY2F0aW5nIHRoYXQgdGhlIGRldmVsb3BlciBoYXMgaWRlbnRpZmllZCBhIGJ1ZyByZWxhdGVkIHRvIGBCUEZfRFdgLlxuXG5TbywgdGhlIGtleSBxdWVzdGlvbiBmb3IgbWUgaXM6IGRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgc2FmZXR5IHJpc2tzLCAqZXNwZWNpYWxseSogdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3M/IEFmdGVyIGNhcmVmdWxseSByZXZpZXdpbmcgdGhlIGNvZGUsIHRoZSBhbnN3ZXIgaXMgYSBmaXJtIFwibm8uXCIgVGhpcyBwYXRjaCBvbmx5IGFkZHJlc3NlcyAqZXhpc3RpbmcqIG1lbW9yeSBjb3JydXB0aW9uLiBUaGVyZSdzIG5vIG5ldyBhbGxvY2F0aW9uLCBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZmllbGRzLCBubyBgY29weV90b191c2VyYCwgbm8gY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgYnVnIGlzIGEgc3RyYWlnaHRmb3J3YXJkIG91dC1vZi1ib3VuZHMgcmVhZCBvZiBhIGNvbnN0YW50IHN0cmluZyBhcnJheSAob3IgTlVMTCBkZXJlZmVyZW5jZSksIHdoaWNoIEtBU0FOIHdvdWxkIGltbWVkaWF0ZWx5IGNhdGNoLlxuXG5JJ20gY29uZmlkZW50IHRoYXQgS0FTQU4gYWxyZWFkeSBjb3ZlcnMgdGhpcyBtZW1vcnkgc2FmZXR5IGJ1Zy4gVGhlIHBhdGNoIGRpcmVjdGx5IGFkZHJlc3NlcyBhICpnbG9iYWwqIG91dC1vZi1ib3VuZHMgcmVhZC4gSSdtIG5vdCBzZWVpbmcgYW55IG5ldyBLTVNBTi1zcGVjaWZpYyBjb25jZXJucyBoZXJlLiBUaGUgYHByaW50X2JwZl9pbnNuYCBmdW5jdGlvbiBpdHNlbGYgdGFrZXMgYSBgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuYCwgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhpcyBtYXRjaGVzIHRoZSBlc3RhYmxpc2hlZCBjcml0ZXJpYS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IHdhcnJhbnQgYSBgTmVlZHNLTVNBTiA9IHRydWVgLiBUaGlzIGlzIGEgY2xlYXIgY2FzZSBvZiBcIktBU0FOIGFscmVhZHkgY292ZXJzIHRoaXMuXCIgVGhlIHBhdGNoIGlzIGFjdHVhbGx5ICpmaXhpbmcqIGEgS0FTQU4tZGV0ZWN0YWJsZSBidWcuXG5cbk9rYXksIGxldCdzIGZvcm11bGF0ZSBteSByZWFzb25pbmc6IFRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gYHByaW50X2JwZl9pbnNuKClgIHRoYXQgb2NjdXJzIHdoZW4gZW5jb3VudGVyaW5nIGBCUEZfTERYYCBpbnN0cnVjdGlvbnMgd2l0aCBgQlBGX01FTVNYYCBtb2RlIGFuZCBgQlBGX0RXYCBzaXplLiBUaGlzIG91dC1vZi1ib3VuZHMgcmVhZCBpcyBhIGRpcmVjdCBjb25zZXF1ZW5jZSBvZiBpbmRleGluZyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIGBicGZfbGRzeF9zdHJpbmdbXWAgYXJyYXksIGEgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSBpc3N1ZSB0aGF0IEtBU0FOIChzcGVjaWZpY2FsbHkgZ2xvYmFsIG91dC1vZi1ib3VuZHMpIGVmZmVjdGl2ZWx5IGRldGVjdHMuIFRoZSBwYXRjaCBvbmx5ICpmaXhlcyogdGhpcyBidWcgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGhlYXAgY29ycnVwdGlvbiwgaW5mb3JtYXRpb24gbGVha3MsIG9yIGFueSBvdGhlciBraW5kIG9mIEtNU0FOLXNwZWNpZmljIGlzc3VlLiBUaHVzLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc4NywiT3V0cHV0VG9rZW5zIjoyMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MDA6NDUuNTkzMjIzNjE4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBwcmV2ZW50cyBhbiBvdXQtb2YtYm91bmRzIGFycmF5IHJlYWQgaW4ga2VybmVsL2JwZi9kaXNhc20uYyBieSBhZGRpbmcgYSBjaGVjayBmb3IgQlBGX0xEWCBpbnN0cnVjdGlvbnMgd2l0aCBCUEZfTUVNU1ggbW9kZSBhbmQgQlBGX0RXIHNpemUgYmVmb3JlIGluZGV4aW5nIGludG8gYnBmX2xkc3hfc3RyaW5nW10uIFNpbmNlIGJwZl9sZHN4X3N0cmluZyBvbmx5IGRlZmluZXMgZW50cmllcyBmb3IgQlBGX0IsIEJQRl9ILCBhbmQgQlBGX1cgKGluZGljZXMgMC4uMiksIGluZGV4aW5nIHdpdGggQlBGX0RXIChpbmRleCAzKSByZXN1bHRlZCBpbiBhIGdsb2JhbC1vdXQtb2YtYm91bmRzIGFjY2Vzcy4gR2xvYmFsIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIHBvdGVudGlhbCBOVUxMIGRlcmVmZXJlbmNlcyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMsIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBwcm9wYWdhdGlvbi4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcHJldmVudHMgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSByZWFkIGluIGtlcm5lbC9icGYvZGlzYXNtLmMgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIEJQRl9MRFggaW5zdHJ1Y3Rpb25zIHdpdGggQlBGX01FTVNYIG1vZGUgYW5kIEJQRl9EVyBzaXplIGJlZm9yZSBpbmRleGluZyBpbnRvIGJwZl9sZHN4X3N0cmluZ1tdLiBTaW5jZSBicGZfbGRzeF9zdHJpbmcgb25seSBkZWZpbmVzIGVudHJpZXMgZm9yIEJQRl9CLCBCUEZfSCwgYW5kIEJQRl9XIChpbmRpY2VzIDAuLjIpLCBpbmRleGluZyB3aXRoIEJQRl9EVyAoaW5kZXggMykgcmVzdWx0ZWQgaW4gYSBnbG9iYWwtb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEdsb2JhbCBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBwb3RlbnRpYWwgTlVMTCBkZXJlZmVyZW5jZXMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGRhdGEgcHJvcGFnYXRpb24uIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowcw5db[1] Phase: Succeeded StartedAt: 2026-09-04 20:00:56 +0000 UTC FinishedAt: 2026-09-04 20:00:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5db[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 20:00:56 +0000 UTC FinishedAt: 2026-09-04 20:00:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5db[2] Phase: Succeeded StartedAt: 2026-09-04 20:00:56 +0000 UTC FinishedAt: 2026-09-04 23:42:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 20:00:56 +0000 UTC FinishedAt: 2026-09-04 23:42:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 20:00:56 +0000 UTC FinishedAt: 2026-09-04 20:01:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 20:00:56 +0000 UTC FinishedAt: 2026-09-04 20:01:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcw5db/series-workflowcw5db-convert-artifact-2482776370/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 20:01:07 +0000 UTC FinishedAt: 2026-09-04 20:19:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 20:01:07 +0000 UTC FinishedAt: 2026-09-04 20:19:26 +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:*3a7aba4c-73f5-4679-9d3e-22debe0bc397,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-workflowcw5db/series-workflowcw5db-convert-artifact-2482776370/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": "055dafcc-98c4-48ac-aedb-737b2f1a01f5", "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-workflowcw5db/series-workflowcw5db-build-action-662207152/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 20:01:07 +0000 UTC FinishedAt: 2026-09-04 20:19:15 +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:*3a7aba4c-73f5-4679-9d3e-22debe0bc397,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-workflowcw5db/series-workflowcw5db-convert-artifact-2482776370/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": "055dafcc-98c4-48ac-aedb-737b2f1a01f5", "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-workflowcw5db/series-workflowcw5db-build-action-662207152/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 20:19:26 +0000 UTC FinishedAt: 2026-09-04 20:19:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 20:19:26 +0000 UTC FinishedAt: 2026-09-04 20:19:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 20:19:26 +0000 UTC FinishedAt: 2026-09-04 20:19:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 20:19:26 +0000 UTC FinishedAt: 2026-09-04 20:19:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcw5db/series-workflowcw5db-convert-artifact-2551726413/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 20:19:38 +0000 UTC FinishedAt: 2026-09-04 20:21:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 20:19:38 +0000 UTC FinishedAt: 2026-09-04 20:21:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*055dafcc-98c4-48ac-aedb-737b2f1a01f5,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-workflowcw5db/series-workflowcw5db-build-action-662207152/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-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 20:21:29 +0000 UTC FinishedAt: 2026-09-04 20:21:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 20:21:29 +0000 UTC FinishedAt: 2026-09-04 20:21:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 20:21:29 +0000 UTC FinishedAt: 2026-09-04 20:39:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 20:21:29 +0000 UTC FinishedAt: 2026-09-04 20:39: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:*3a7aba4c-73f5-4679-9d3e-22debe0bc397,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-workflowcw5db/series-workflowcw5db-convert-artifact-2551726413/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": "e76631dd-aadf-4b4d-8615-42e772bce062", "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-workflowcw5db/series-workflowcw5db-build-action-2704240425/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 20:21:29 +0000 UTC FinishedAt: 2026-09-04 20:39: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:*3a7aba4c-73f5-4679-9d3e-22debe0bc397,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-workflowcw5db/series-workflowcw5db-convert-artifact-2551726413/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": "e76631dd-aadf-4b4d-8615-42e772bce062", "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-workflowcw5db/series-workflowcw5db-build-action-2704240425/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 20:39:34 +0000 UTC FinishedAt: 2026-09-04 20:39:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 20:39:34 +0000 UTC FinishedAt: 2026-09-04 20:39:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 20:39:34 +0000 UTC FinishedAt: 2026-09-04 20:41:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 20:39:34 +0000 UTC FinishedAt: 2026-09-04 20:41:12 +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:*e76631dd-aadf-4b4d-8615-42e772bce062,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-workflowcw5db/series-workflowcw5db-build-action-2704240425/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-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 20:41:22 +0000 UTC FinishedAt: 2026-09-04 23:42:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 20:41:22 +0000 UTC FinishedAt: 2026-09-04 23:42:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"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:*055dafcc-98c4-48ac-aedb-737b2f1a01f5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e76631dd-aadf-4b4d-8615-42e772bce062,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-workflowcw5db/series-workflowcw5db-build-action-662207152/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-workflowcw5db/series-workflowcw5db-build-action-2704240425/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 20:41:22 +0000 UTC FinishedAt: 2026-09-04 20:41:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 20:41:22 +0000 UTC FinishedAt: 2026-09-04 20:41:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"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-workflowcw5db/series-workflowcw5db-convert-artifact-2590168370/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 20:41:22 +0000 UTC FinishedAt: 2026-09-04 20:41:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 20:41:22 +0000 UTC FinishedAt: 2026-09-04 20:41:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 20:41:22 +0000 UTC FinishedAt: 2026-09-04 20:41:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 20:41:32 +0000 UTC FinishedAt: 2026-09-04 23:42:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5db[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["print_bpf_insn","bpf_verbose_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ed8485eb-f35c-47c6-a8db-2ebdb188da85","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 20:41:32 +0000 UTC FinishedAt: 2026-09-04 23:42:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*055dafcc-98c4-48ac-aedb-737b2f1a01f5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e76631dd-aadf-4b4d-8615-42e772bce062,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-workflowcw5db/series-workflowcw5db-build-action-662207152/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-workflowcw5db/series-workflowcw5db-build-action-2704240425/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-workflowcw5db/series-workflowcw5db-convert-artifact-2590168370/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,}