Name: series-workflow4tt5c Phase: Succeeded StartedAt: 2026-09-06 07:31:57 +0000 UTC FinishedAt: 2026-09-06 11:38:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tt5c[0] Phase: Succeeded StartedAt: 2026-09-06 07:31:57 +0000 UTC FinishedAt: 2026-09-06 07:57:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tt5c[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 07:31:57 +0000 UTC FinishedAt: 2026-09-06 07:57:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "01c15a8b936d319f3daf7ffaddfe44ca5bd40504", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "CFG80211", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "01c15a8b936d319f3daf7ffaddfe44ca5bd40504", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "CFG80211", "MAC80211_HWSIM" ], "series_id": "7ba6c3bf-e40a-4b43-8597-e8c3cd57787a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ieee80211_do_stop", "ieee80211_adjust_monitor_flags", "ieee80211_stop", "ieee80211_runtime_change_iftype", "ieee80211_set_mon_options" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX2RvX3N0b3AmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9zdG9wJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9ydW50aW1lX2NoYW5nZV9pZnR5cGUmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3NldF9tb25fb3B0aW9ucyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGFjY291bnRpbmcgYnVnIGluIG1hYzgwMjExIG1vbml0b3IgaW50ZXJmYWNlIGhhbmRsaW5nIGJ5IG1vdmluZyBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSlgIG91dHNpZGUgdGhlIGNvbmRpdGlvbmFsIGNoZWNrIGluIGBpZWVlODAyMTFfZG9fc3RvcCgpYCwgcHJvcGVybHkgYmFsYW5jaW5nIHRoZSB1bmNvbmRpdGlvbmFsIGNhbGwgdG8gYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgMSlgIGluIGBpZWVlODAyMTFfZG9fb3BlbigpYC4gXG5cblRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBpbnRlcm5hbCBtb25pdG9yIGZsYWcgY291bnRlcnMgb24gYHN0cnVjdCBpZWVlODAyMTFfbG9jYWxgIChzdWNoIGFzIGBsb2NhbC1cdTAwM2VmaWZfZmNzZmFpbGAsIGBsb2NhbC1cdTAwM2V0eF9tbnRyc2AsIGV0Yy4pLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBpbml0aWFsaXphdGlvbiBsb2dpYy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLCBhbmQgc3RhbmRhcmQgS0FTQU4vdGVzdGluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtb25pdG9yIGludGVyZmFjZSB0ZWFyZG93biBoYW5kbGluZyBpbiBuZXQvbWFjODAyMTEvaWZhY2UuYyAoaWVlZTgwMjExX2RvX3N0b3ApIGJ5IGVuc3VyaW5nIHRoYXQgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKCkgaXMgYWx3YXlzIGludm9rZWQgdG8gZGVjcmVtZW50IG1vbml0b3IgZmxhZ3Mgd2hlbiBzdG9wcGluZyBhIG1vbml0b3IgaW50ZXJmYWNlLCByZWdhcmRsZXNzIG9mIHRoZSB2aXJ0dWFsIG1vbml0b3Igc3RhdHVzLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBtYWM4MDIxMV9od3NpbSBhbmQgbmw4MDIxMS9ydG5ldGxpbmsgaW50ZXJmYWNlIGNvbnRyb2wgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDlkODg3YjlhMDBmOTc0NzUwYTIxNTgwYmJlOTY5YWU2MTZjNzIzZGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDA3OjU1OjQwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbmluZGV4IDQzNDYwYTcwNWE2YmQuLjliNDAwY2FmMjc2NTIgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbkBAIC02MzAsOCAmIzQzOzYzMCw5IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9kb19zdG9wKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBib29sIGdvaW5nX2RvXG4gXHRcdFx0XHRod19yZWNvbmZfZmxhZ3MgfD0gSUVFRTgwMjExX0NPTkZfQ0hBTkdFX01PTklUT1I7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpO1xuIFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU46XG4gXHRcdC8qIENoZWNrIGlmIGFueSBvcGVuIE5BTl9EQVRBIGludGVyZmFjZXMgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2llZWU4MDIxMV9kb19zdG9wJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfc3RvcCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfcnVudGltZV9jaGFuZ2VfaWZ0eXBlJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9zZXRfbW9uX29wdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbW9uaXRvciBpbnRlcmZhY2UgdGVhcmRvd24gaGFuZGxpbmcgaW4gbmV0L21hYzgwMjExL2lmYWNlLmMgKGllZWU4MDIxMV9kb19zdG9wKSBieSBlbnN1cmluZyB0aGF0IGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncygpIGlzIGFsd2F5cyBpbnZva2VkIHRvIGRlY3JlbWVudCBtb25pdG9yIGZsYWdzIHdoZW4gc3RvcHBpbmcgYSBtb25pdG9yIGludGVyZmFjZSwgcmVnYXJkbGVzcyBvZiB0aGUgdmlydHVhbCBtb25pdG9yIHN0YXR1cy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWFjODAyMTFfaHdzaW0gYW5kIG5sODAyMTEvcnRuZXRsaW5rIGludGVyZmFjZSBjb250cm9sIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZDg4N2I5YTAwZjk3NDc1MGEyMTU4MGJiZTk2OWFlNjE2YzcyM2RmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAwNzo1NTo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmMKaW5kZXggNDM0NjBhNzA1YTZiZC4uOWI0MDBjYWYyNzY1MiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2lmYWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2lmYWNlLmMKQEAgLTYzMCw4ICYjNDM7NjMwLDkgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2RvX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGJvb2wgZ29pbmdfZG8KIAkJCQlod19yZWNvbmZfZmxhZ3MgfD0gSUVFRTgwMjExX0NPTkZfQ0hBTkdFX01PTklUT1I7CiAJCQl9CiAKLQkJCWllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpOwogCQl9CiYjNDM7CiYjNDM7CQlpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9OQU46CiAJCS8qIENoZWNrIGlmIGFueSBvcGVuIE5BTl9EQVRBIGludGVyZmFjZXMgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzMAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBNQUM4MDIxMSBJbnRlcmZhY2UgQ29kZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCwgd2hpY2ggZnJvbSB0aGUgY29udGV4dCBjbHVlcywgc2VlbXMgdG8gYmUgZm9jdXNlZCBvbiB0aGUgbmV0d29yayBpbnRlcmZhY2Ugd2l0aGluIHRoZSBNQUM4MDIxMSBzdWJzeXN0ZW0uIFRoZSBmaWxlIG9mIGludGVyZXN0IGlzIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AuIEkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIHRoYXQgYXJlYSwgc28gbXkgZmlyc3Qgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGF0IGZpbGUgYW5kIGdldCBhIGZlZWwgZm9yIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBNeSBndXQgdGVsbHMgbWUgdGhpcyB3aWxsIGJlIGF0LCBvciBhcm91bmQsIGxpbmUgNjMwLiBJdCYjMzk7cyB0aW1lIHRvIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBpbiB0aGF0IHBhcnRpY3VsYXIgc3BvdCBvZiBgaWZhY2UuY2AuIFRoaXMgY29udGV4dCBpcyBjcnVjaWFsLCBiZWZvcmUgSSBldmVuIHN0YXJ0IHRvIHRydWx5IGFuYWx5emUgdGhlIGltcGFjdCBvZiB0aGUgY2hhbmdlcy4gVGhpcyBzaG91bGQgcHJvdmlkZSBtZSB3aXRoIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBnaXZlIG1lIGEgZmVlbCBmb3IgdGhlIHNwZWNpZmljIHBpZWNlLiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCB0byBmb3JtIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9pZmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MTA6XHRcdGlmIChnb2luZ19kb3duKVxuIDYxMTpcdFx0XHRsb2NhbC1cdTAwM2VvcGVuX2NvdW50LS07XG4gNjEyOlx0XG4gNjEzOlx0XHRzd2l0Y2ggKHNkYXRhLVx1MDAzZXZpZi50eXBlKSB7XG4gNjE0Olx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQX1ZMQU46XG4gNjE1Olx0XHRcdGxpc3RfZGVsKFx1MDAyNnNkYXRhLVx1MDAzZXUudmxhbi5saXN0KTtcbiA2MTY6XHRcdFx0UkNVX0lOSVRfUE9JTlRFUihzZGF0YS1cdTAwM2V2aWYuYnNzX2NvbmYuY2hhbmN0eF9jb25mLCBOVUxMKTtcbiA2MTc6XHRcdFx0Lyogc2VlIGNvbW1lbnQgaW4gdGhlIGRlZmF1bHQgY2FzZSBiZWxvdyAqL1xuIDYxODpcdFx0XHRpZWVlODAyMTFfZnJlZV9rZXlzKHNkYXRhLCB0cnVlKTtcbiA2MTk6XHRcdFx0Lyogbm8gbmVlZCB0byB0ZWxsIGRyaXZlciAqL1xuIDYyMDpcdFx0XHRicmVhaztcbiA2MjE6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjpcbiA2MjI6XHRcdFx0bG9jYWwtXHUwMDNlbW9uaXRvcnMtLTtcbiA2MjM6XHRcbiA2MjQ6XHRcdFx0aWYgKCEoc2RhdGEtXHUwMDNldS5tbnRyLmZsYWdzIFx1MDAyNiBNT05JVE9SX0ZMQUdfQUNUSVZFKSBcdTAwMjZcdTAwMjZcbiA2MjU6XHRcdFx0ICAgICFpZWVlODAyMTFfaHdfY2hlY2soXHUwMDI2bG9jYWwtXHUwMDNlaHcsIE5PX1ZJUlRVQUxfTU9OSVRPUikpIHtcbiA2MjY6XHRcbiA2Mjc6XHRcdFx0XHRsb2NhbC1cdTAwM2V2aXJ0X21vbml0b3JzLS07XG4gNjI4Olx0XHRcdFx0aWYgKGxvY2FsLVx1MDAzZXZpcnRfbW9uaXRvcnMgPT0gMCkge1xuIDYyOTpcdFx0XHRcdFx0bG9jYWwtXHUwMDNlaHcuY29uZi5mbGFncyBcdTAwMjY9IH5JRUVFODAyMTFfQ09ORl9NT05JVE9SO1xuIDYzMDpcdFx0XHRcdFx0aHdfcmVjb25mX2ZsYWdzIHw9IElFRUU4MDIxMV9DT05GX0NIQU5HRV9NT05JVE9SO1xuIDYzMTpcdFx0XHRcdH1cbiA2MzI6XHRcbiA2MzM6XHRcdFx0fVxuIDYzNDpcdFxuIDYzNTpcdFx0XHRpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKTtcbiA2MzY6XHRcdFx0YnJlYWs7XG4gNjM3Olx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX05BTjpcbiA2Mzg6XHRcdFx0LyogQ2hlY2sgaWYgYW55IG9wZW4gTkFOX0RBVEEgaW50ZXJmYWNlcyAqL1xuIDYzOTpcdFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbiA2NDA6XHRcdFx0XHRXQVJOX09OKGl0ZXItXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEEgXHUwMDI2XHUwMDI2XG4gNjQxOlx0XHRcdFx0XHRpZWVlODAyMTFfc2RhdGFfcnVubmluZyhpdGVyKSk7XG4gNjQyOlx0XHRcdH1cbiA2NDM6XHRcbiA2NDQ6XHRcdFx0LyogY2xlYW4gYWxsIHRoZSBmdW5jdGlvbnMgKi9cbiA2NDU6XHRcdFx0aWYgKCEobG9jYWwtXHUwMDNlaHcud2lwaHktXHUwMDNlbmFuX2NhcGEuZmxhZ3MgXHUwMDI2XG4gNjQ2Olx0XHRcdCAgICAgIFdJUEhZX05BTl9GTEFHU19VU0VSU1BBQ0VfREUpKSB7XG4gNjQ3Olx0XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNkYXRhLVx1MDAzZXUubmFuLmRlLmZ1bmNfbG9jayk7XG4gNjQ4Olx0XG4gNjQ5Olx0XHRcdFx0aWRyX2Zvcl9lYWNoX2VudHJ5KFx1MDAyNnNkYXRhLVx1MDAzZXUubmFuLmRlLmZ1bmN0aW9uX2luc3RfaWRzLFxuIDY1MDpcdFx0XHRcdFx0XHQgICBmdW5jLCBpKSB7XG4gNjUxOlx0XHRcdFx0XHRpZHJfcmVtb3ZlKFx1MDAyNnNkYXRhLVx1MDAzZXUubmFuLmRlLmZ1bmN0aW9uX2luc3RfaWRzLCBpKTtcbiA2NTI6XHRcdFx0XHRcdGNmZzgwMjExX2ZyZWVfbmFuX2Z1bmMoZnVuYyk7XG4gNjUzOlx0XHRcdFx0fVxuIDY1NDpcdFx0XHRcdGlkcl9kZXN0cm95KFx1MDAyNnNkYXRhLVx1MDAzZXUubmFuLmRlLmZ1bmN0aW9uX2luc3RfaWRzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDc2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzYCBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBvZiBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2Ugd2hlcmUgaXQmIzM5O3MgY2FsbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGludGVyZmFjZSBvcGVyYXRpb25zLiBTaW5jZSBpdCBzb3VuZHMgbGlrZSB0aGlzIGZ1bmN0aW9uIGlzIHJlbGF0ZWQgdG8gbW9uaXRvcmluZyBtb2RlLCBJJiMzOTtsbCBmb2N1cyBvbiBgaWVlZTgwMjExX2RvX29wZW5gLCBgaWVlZTgwMjExX2RvX3N0b3BgLCBhbmQgb3RoZXIgcGxhY2VzIHdoZXJlIGludGVyZmFjZSBjb25maWd1cmF0aW9uIGhhcHBlbnMuIFRob3NlIGZ1bmN0aW9ucyBhcmUgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZXMuIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBmb3IgYG5ldC9tYWM4MDIxMS9pZmFjZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyA1MDAgdG8gNjEwLiBUaGF0IGJsb2NrIHNob3VsZCBjb250YWluIHRoZSBjb3JlIGxvZ2ljIGZvciBpbnRlcmZhY2UgbWFuYWdlbWVudCwgc28gaXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGlkZW50aWZ5IGFueSBjYWxscyB0byB0aGF0IGZ1bmN0aW9uIGFuZCB3aGF0IHBhcmFtZXRlcnMgaXQmIzM5O3MgbGlrZWx5IGJlaW5nIHBhc3NlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRob3NlIGZsYWdzIGFyZSBiZWluZyBhZGp1c3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9pZmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTAwOlx0XHRcdGllZWU4MDIxMV9zY2FuX2NhbmNlbChsb2NhbCk7XG4gNTAxOlx0XG4gNTAyOlx0XHRpZWVlODAyMTFfcm9jX3B1cmdlKGxvY2FsLCBzZGF0YSk7XG4gNTAzOlx0XG4gNTA0Olx0XHRzd2l0Y2ggKHNkYXRhLVx1MDAzZXZpZi50eXBlKSB7XG4gNTA1Olx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046XG4gNTA2Olx0XHRcdGllZWU4MDIxMV9tZ2Rfc3RvcChzZGF0YSk7XG4gNTA3Olx0XHRcdGJyZWFrO1xuIDUwODpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzpcbiA1MDk6XHRcdFx0aWVlZTgwMjExX2lic3Nfc3RvcChzZGF0YSk7XG4gNTEwOlx0XHRcdGJyZWFrO1xuIDUxMTpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOlxuIDUxMjpcdFx0XHRsaXN0X2RlbF9yY3UoXHUwMDI2c2RhdGEtXHUwMDNldS5tbnRyLmxpc3QpO1xuIDUxMzpcdFx0XHRicmVhaztcbiA1MTQ6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTjpcbiA1MTU6XHRcdFx0aWVlZTgwMjExX2Fwdmxhbl9saW5rX2NsZWFyKHNkYXRhKTtcbiA1MTY6XHRcdFx0YnJlYWs7XG4gNTE3Olx0XHRkZWZhdWx0OlxuIDUxODpcdFx0XHRicmVhaztcbiA1MTk6XHRcdH1cbiA1MjA6XHRcbiA1MjE6XHRcdC8qXG4gNTIyOlx0XHQgKiBSZW1vdmUgYWxsIHN0YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGludGVyZmFjZS5cbiA1MjM6XHRcdCAqXG4gNTI0Olx0XHQgKiBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgY2FsbGluZyBvcHMtXHUwMDNlcmVtb3ZlX2ludGVyZmFjZSgpXG4gNTI1Olx0XHQgKiBiZWNhdXNlIG90aGVyd2lzZSB3ZSBjYW4gbGF0ZXIgaW52b2tlIG9wcy1cdTAwM2VzdGFfbm90aWZ5KClcbiA1MjY6XHRcdCAqIHdoZW5ldmVyIHRoZSBTVEFzIGFyZSByZW1vdmVkLCBhbmQgdGhhdCBpbnZhbGlkYXRlcyBkcml2ZXJcbiA1Mjc6XHRcdCAqIGFzc3VtcHRpb25zIGFib3V0IGFsd2F5cyBnZXR0aW5nIGEgdmlmIHBvaW50ZXIgdGhhdCBpcyB2YWxpZFxuIDUyODpcdFx0ICogKGJlY2F1c2UgaWYgd2UgcmVtb3ZlIGEgU1RBIGFmdGVyIG9wcy1cdTAwM2VyZW1vdmVfaW50ZXJmYWNlKClcbiA1Mjk6XHRcdCAqIHRoZSBkcml2ZXIgd2lsbCBoYXZlIHJlbW92ZWQgdGhlIHZpZiBpbmZvIGFscmVhZHkhKVxuIDUzMDpcdFx0ICpcbiA1MzE6XHRcdCAqIEZvciBBUF9WTEFOcywgTkFOIGFuZCBOQU5fREFUQSBzdGF0aW9ucyBtYXkgZXhpc3Qgc2luY2UgdGhlcmUmIzM5O3NcbiA1MzI6XHRcdCAqIG5vdGhpbmcgZWxzZSB0aGF0IHdvdWxkIGhhdmUgcmVtb3ZlZCB0aGVtLCBidXQgaW4gb3RoZXIgbW9kZXMgdGhlcmVcbiA1MzM6XHRcdCAqIHNob3VsZG4mIzM5O3QgYmUgYW55IHN0YXRpb25zLlxuIDUzNDpcdFx0ICovXG4gNTM1Olx0XHRmbHVzaGVkID0gc3RhX2luZm9fZmx1c2goc2RhdGEsIC0xKTtcbiA1MzY6XHRcdFdBUk5fT05fT05DRShzZGF0YS1cdTAwM2V2aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOIFx1MDAyNlx1MDAyNlxuIDUzNzpcdFx0XHQgICAgIHNkYXRhLVx1MDAzZXZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTiBcdTAwMjZcdTAwMjZcbiA1Mzg6XHRcdFx0ICAgICBzZGF0YS1cdTAwM2V2aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSBcdTAwMjZcdTAwMjYgZmx1c2hlZCBcdTAwM2UgMCk7XG4gNTM5Olx0XG4gNTQwOlx0XHQvKiBkb24mIzM5O3QgY291bnQgdGhpcyBpbnRlcmZhY2UgZm9yIGFsbG11bHRpIHdoaWxlIGl0IGlzIGRvd24gKi9cbiA1NDE6XHRcdGlmIChzZGF0YS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1NEQVRBX0FMTE1VTFRJKVxuIDU0MjpcdFx0XHRhdG9taWNfZGVjKFx1MDAyNmxvY2FsLVx1MDAzZWlmZl9hbGxtdWx0aXMpO1xuIDU0MzpcdFxuIDU0NDpcdFx0aWYgKHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7XG4gNTQ1Olx0XHRcdGxvY2FsLVx1MDAzZWZpZl9wc3BvbGwtLTtcbiA1NDY6XHRcdFx0bG9jYWwtXHUwMDNlZmlmX3Byb2JlX3JlcS0tO1xuIDU0NzpcdFx0fSBlbHNlIGlmIChzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykge1xuIDU0ODpcdFx0XHRsb2NhbC1cdTAwM2VmaWZfcHJvYmVfcmVxLS07XG4gNTQ5Olx0XHR9XG4gNTUwOlx0XG4gNTUxOlx0XHRpZiAoc2RhdGEtXHUwMDNlZGV2KSB7XG4gNTUyOlx0XHRcdG5ldGlmX2FkZHJfbG9ja19iaChzZGF0YS1cdTAwM2VkZXYpO1xuIDU1MzpcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlZmlsdGVyX2xvY2spO1xuIDU1NDpcdFx0XHRfX2h3X2FkZHJfdW5zeW5jKFx1MDAyNmxvY2FsLVx1MDAzZW1jX2xpc3QsIFx1MDAyNnNkYXRhLVx1MDAzZWRldi1cdTAwM2VtYyxcbiA1NTU6XHRcdFx0XHRcdCBzZGF0YS1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4pO1xuIDU1NjpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VmaWx0ZXJfbG9jayk7XG4gNTU3Olx0XHRcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKHNkYXRhLVx1MDAzZWRldik7XG4gNTU4Olx0XHR9XG4gNTU5Olx0XG4gNTYwOlx0XHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZsb2NhbC1cdTAwM2VkeW5hbWljX3BzX3RpbWVyKTtcbiA1NjE6XHRcdHdpcGh5X3dvcmtfY2FuY2VsKGxvY2FsLVx1MDAzZWh3LndpcGh5LCBcdTAwMjZsb2NhbC1cdTAwM2VkeW5hbWljX3BzX2VuYWJsZV93b3JrKTtcbiA1NjI6XHRcbiA1NjM6XHRcdFdBUk4oaWVlZTgwMjExX3ZpZl9pc19tbGQoXHUwMDI2c2RhdGEtXHUwMDNldmlmKSxcbiA1NjQ6XHRcdCAgICAgXCYjMzQ7ZGVzdHJveWluZyBpbnRlcmZhY2Ugd2l0aCB2YWxpZCBsaW5rcyAweCUwNHhcXG5cJiMzNDssXG4gNTY1Olx0XHQgICAgIHNkYXRhLVx1MDAzZXZpZi52YWxpZF9saW5rcyk7XG4gNTY2Olx0XG4gNTY3Olx0XHRzZGF0YS1cdTAwM2V2aWYuYnNzX2NvbmYuY3NhX2FjdGl2ZSA9IGZhbHNlO1xuIDU2ODpcdFx0aWYgKHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pXG4gNTY5Olx0XHRcdHNkYXRhLVx1MDAzZWRlZmxpbmsudS5tZ2QuY3NhLndhaXRpbmdfYmNuID0gZmFsc2U7XG4gNTcwOlx0XHRpZWVlODAyMTFfdmlmX3VuYmxvY2tfcXVldWVzX2NzYShzZGF0YSk7XG4gNTcxOlx0XG4gNTcyOlx0XHR3aXBoeV93b3JrX2NhbmNlbChsb2NhbC1cdTAwM2Vody53aXBoeSwgXHUwMDI2c2RhdGEtXHUwMDNlZGVmbGluay5jc2EuZmluYWxpemVfd29yayk7XG4gNTczOlx0XHR3aXBoeV93b3JrX2NhbmNlbChsb2NhbC1cdTAwM2Vody53aXBoeSxcbiA1NzQ6XHRcdFx0XHQgIFx1MDAyNnNkYXRhLVx1MDAzZWRlZmxpbmsuY29sb3JfY2hhbmdlX2ZpbmFsaXplX3dvcmspO1xuIDU3NTpcdFx0d2lwaHlfaHJ0aW1lcl93b3JrX2NhbmNlbChsb2NhbC1cdTAwM2Vody53aXBoeSxcbiA1NzY6XHRcdFx0XHRcdCAgXHUwMDI2c2RhdGEtXHUwMDNlZGVmbGluay5kZnNfY2FjX3RpbWVyX3dvcmspO1xuIDU3NzpcdFxuIDU3ODpcdFx0aWYgKHNkYXRhLVx1MDAzZXdkZXYubGlua3NbMF0uY2FjX3N0YXJ0ZWQpIHtcbiA1Nzk6XHRcdFx0Y2hhbmRlZiA9IHNkYXRhLVx1MDAzZXZpZi5ic3NfY29uZi5jaGFucmVxLm9wZXI7XG4gNTgwOlx0XHRcdFdBUk5fT04obG9jYWwtXHUwMDNlc3VzcGVuZGVkKTtcbiA1ODE6XHRcdFx0aWVlZTgwMjExX2xpbmtfcmVsZWFzZV9jaGFubmVsKFx1MDAyNnNkYXRhLVx1MDAzZWRlZmxpbmspO1xuIDU4MjpcdFx0XHRjZmc4MDIxMV9jYWNfZXZlbnQoc2RhdGEtXHUwMDNlZGV2LCBcdTAwMjZjaGFuZGVmLFxuIDU4MzpcdFx0XHRcdFx0ICAgTkw4MDIxMV9SQURBUl9DQUNfQUJPUlRFRCxcbiA1ODQ6XHRcdFx0XHRcdCAgIEdGUF9LRVJORUwsIDApO1xuIDU4NTpcdFx0fVxuIDU4NjpcdFxuIDU4NzpcdFx0aWYgKHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7XG4gNTg4Olx0XHRcdFdBUk5fT04oIWxpc3RfZW1wdHkoXHUwMDI2c2RhdGEtXHUwMDNldS5hcC52bGFucykpO1xuIDU4OTpcdFx0fSBlbHNlIGlmIChzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKSB7XG4gNTkwOlx0XHRcdC8qIHJlbW92ZSBhbGwgcGFja2V0cyBpbiBwYXJlbnQgYmNfYnVmIHBvaW50aW5nIHRvIHRoaXMgZGV2ICovXG4gNTkxOlx0XHRcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZmcmVlcSk7XG4gNTkyOlx0XHRcdHBzID0gXHUwMDI2c2RhdGEtXHUwMDNlYnNzLVx1MDAzZXBzO1xuIDU5MzpcdFxuIDU5NDpcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwcy1cdTAwM2ViY19idWYubG9jaywgZmxhZ3MpO1xuIDU5NTpcdFx0XHRza2JfcXVldWVfd2Fsa19zYWZlKFx1MDAyNnBzLVx1MDAzZWJjX2J1Ziwgc2tiLCB0bXApIHtcbiA1OTY6XHRcdFx0XHRpZiAoc2tiLVx1MDAzZWRldiA9PSBzZGF0YS1cdTAwM2VkZXYpIHtcbiA1OTc6XHRcdFx0XHRcdF9fc2tiX3VubGluayhza2IsIFx1MDAyNnBzLVx1MDAzZWJjX2J1Zik7XG4gNTk4Olx0XHRcdFx0XHRsb2NhbC1cdTAwM2V0b3RhbF9wc19idWZmZXJlZC0tO1xuIDU5OTpcdFx0XHRcdFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZmcmVlcSwgc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzI2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbWFjODAyMTEgTW9uaXRvciBNb2RlIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIGBpZWVlODAyMTFfZG9fc3RvcCgpYCwgSSBzZWUgdGhhdCB0aGUgY2FsbCB0byBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSlgIGhhcyBiZWVuIG1vdmVkIG91dHNpZGUgb2YgdGhhdCBjb25kaXRpb25hbCBibG9jay4gVGhhdCYjMzk7cyBhIGtleSBjaGFuZ2UsIGFuZCBpdCBoYXMgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zLiBCZWZvcmUsIHRoaXMgZGVjcmVtZW50IGluIG1vbml0b3IgZmxhZ3Mgd2FzIG9ubHkgaGFwcGVuaW5nIGlmIHRoZSBtb25pdG9yIGludGVyZmFjZSB3YXNuJiMzOTt0IGFjdGl2ZWx5IHVzZWQgYW5kIHRoZXJlIHdlcmUgbm8gdmlydHVhbCBtb25pdG9ycyByZW1haW5pbmcuIE5vdywgaXQgaGFwcGVucyB1bmNvbmRpdGlvbmFsbHkuCgpTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgd2FzIGRvbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYWx3YXlzIGRlY3JlbWVudGluZyB0aGUgbW9uaXRvciBmbGFncywgcmVnYXJkbGVzcyBvZiB0aGUgYWN0aXZlIHN0YXRlIG9yIHRoZSB2aXJ0dWFsIG1vbml0b3IgY291bnQuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgZmxhZ3MgYXJlICphZGp1c3RlZCogb24gdGhlIG9wZW4vc3RhcnQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgdGhhdCBvcGVucyBvciBzdGFydHMgYW4gaW50ZXJmYWNlLCBzbyBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgYGllZWU4MDIxMV9kb19vcGVuYCBpbiBgbmV0L21hYzgwMjExL2lmYWNlLmNgLiBTZWVpbmcgaG93IHRoZSBmbGFncyBhcmUgdXNlZCBpbiB0aGUgb3Blbi9zdGFydCBvcGVyYXRpb24gd2lsbCBob3BlZnVsbHkgc2hlZCBsaWdodCBvbiB3aGF0IHRoaXMgdW5jb25kaXRpb25hbCBkZWNyZW1lbnQgaXMgZGVzaWduZWQgdG8gYWNoaWV2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZGp1c3RfbW9uaXRvcl9mbGFncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvY2ZnLmM9OTY9c3RhdGljIGludCBpZWVlODAyMTFfc2V0X21vbl9vcHRpb25zKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy0xNDItXHRcdGlmIChpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpIHtcbm5ldC9tYWM4MDIxMS9jZmcuYzoxNDM6XHRcdFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtMTQ0LVx0XHRcdHNkYXRhLVx1MDAzZXUubW50ci5mbGFncyA9IHBhcmFtcy1cdTAwM2VmbGFncztcbm5ldC9tYWM4MDIxMS9jZmcuYzoxNDU6XHRcdFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAxKTtcbm5ldC9tYWM4MDIxMS9jZmcuYy0xNDYtXG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MjIwMj12b2lkIGllZWU4MDIxMV9yZWNhbGNfaWRsZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyMjAzOnZvaWQgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjIwNC1cdFx0XHRcdCAgICBjb25zdCBpbnQgb2Zmc2V0KTtcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz00Nzk9c3RhdGljIHZvaWQgaWVlZTgwMjExX2RvX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGJvb2wgZ29pbmdfZG93bilcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy02MzQtXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo2MzU6XHRcdGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpO1xubmV0L21hYzgwMjExL2lmYWNlLmMtNjM2LVx0XHRicmVhaztcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xMTU2PXZvaWQgaWVlZTgwMjExX3JlY2FsY19vZmZsb2FkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTExNzItXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoxMTczOnZvaWQgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL2lmYWNlLmMtMTE3NC1cdFx0XHRcdCAgICBjb25zdCBpbnQgb2Zmc2V0KVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTEzNjY9aW50IGllZWU4MDIxMV9kb19vcGVuKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGJvb2wgY29taW5nX3VwKVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTE1MDYtXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoxNTA3Olx0XHRpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIDEpO1xubmV0L21hYzgwMjExL2lmYWNlLmMtMTUwOC1cdFx0aWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIobG9jYWwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3NzcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTUFDODAyMTEgSW50ZXJmYWNlIE9wZW5pbmcqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyZmFjZSBvcGVuaW5nIHByb2NlZHVyZSB3aXRoaW4gdGhlIG1hYzgwMjExIGZyYW1ld29yay4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGl0JiMzOTtzIGhhbmRsZWQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBqdW1wIGludG8gdGhlIGBpZWVlODAyMTFfZG9fb3BlbmAgZnVuY3Rpb24sIHdoaWNoIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgZW50cnkgcG9pbnQgZm9yIHRoaXMgcHJvY2Vzcy4gSSYjMzk7bSBnb2luZyB0byBoZWFkIG92ZXIgdG8gdGhlIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AgZmlsZSBhbmQgemVybyBpbiBvbiB0aGUgdmljaW5pdHkgb2YgbGluZSAxNTAwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgY2FsbCBmbG93IGFuZCBzZWUgd2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kIHdoZW4gYSB3aXJlbGVzcyBpbnRlcmZhY2UgaXMgYnJvdWdodCB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvaWZhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ5NTpcdFxuMTQ5NjpcdFx0XHRcdGxvY2FsLVx1MDAzZXZpcnRfbW9uaXRvcnMmIzQzOyYjNDM7O1xuMTQ5NzpcdFxuMTQ5ODpcdFx0XHRcdC8qIG11c3QgYmUgYmVmb3JlIHRoZSBjYWxsIHRvIGllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyICovXG4xNDk5Olx0XHRcdFx0aWYgKGxvY2FsLVx1MDAzZXZpcnRfbW9uaXRvcnMgPT0gMSkge1xuMTUwMDpcdFx0XHRcdFx0bG9jYWwtXHUwMDNlaHcuY29uZi5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9NT05JVE9SO1xuMTUwMTpcdFx0XHRcdFx0aHdfcmVjb25mX2ZsYWdzIHw9IElFRUU4MDIxMV9DT05GX0NIQU5HRV9NT05JVE9SO1xuMTUwMjpcdFx0XHRcdH1cbjE1MDM6XHRcdFx0fVxuMTUwNDpcdFxuMTUwNTpcdFx0XHRsb2NhbC1cdTAwM2Vtb25pdG9ycyYjNDM7JiM0Mzs7XG4xNTA2Olx0XG4xNTA3Olx0XHRcdGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgMSk7XG4xNTA4Olx0XHRcdGllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTtcbjE1MDk6XHRcdFx0aWVlZTgwMjExX3JlY2FsY19vZmZsb2FkKGxvY2FsKTtcbjE1MTA6XHRcdFx0aWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTtcbjE1MTE6XHRcbjE1MTI6XHRcdFx0bmV0aWZfY2Fycmllcl9vbihkZXYpO1xuMTUxMzpcdFx0XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZzZGF0YS1cdTAwM2V1Lm1udHIubGlzdCwgXHUwMDI2bG9jYWwtXHUwMDNlbW9uX2xpc3QpO1xuMTUxNDpcdFx0XHRicmVhaztcbjE1MTU6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6XG4xNTE2Olx0XHRcdHNkYXRhLVx1MDAzZWJzcyA9IFx1MDAyNnNkYXRhLVx1MDAzZXUuYXA7XG4xNTE3Olx0XHRcdGZhbGx0aHJvdWdoO1xuMTUxODpcdFx0ZGVmYXVsdDpcbjE1MTk6XHRcdFx0aWYgKGNvbWluZ191cCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDM2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBtYWM4MDIxMSBCdWcgRml4IGFuZCBSZWFjaGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIGEgc3BlY2lmaWMgYnVnIGZpeCByZWxhdGVkIHRvIGhvdyBtb25pdG9yIGZsYWdzIGFyZSBtYW5hZ2VkIGluIGBtYWM4MDIxMWAuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGF0IGBpZWVlODAyMTFfZG9fb3BlbmAgYW5kIGBpZWVlODAyMTFfZG9fc3RvcGAuIFRoZSBpc3N1ZSBzdGVtcyBmcm9tIHRoZSBmYWN0IHRoYXQgYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgMSlgIHdhcyBiZWluZyBjYWxsZWQgdW5jb25kaXRpb25hbGx5IGluIGBpZWVlODAyMTFfZG9fb3BlbmAgZm9yIGFsbCBtb25pdG9ycy4gSG93ZXZlciwgdGhlIGRlY3JlbWVudGluZyBjb3VudGVycGFydCwgYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpYCwgaW4gYGllZWU4MDIxMV9kb19zdG9wYCB3YXMgY29uZGl0aW9uYWwsIG9ubHkgZXhlY3V0ZWQgd2hlbiBgIShzZGF0YS0mZ3Q7dS5tbnRyLmZsYWdzICZhbXA7IE1PTklUT1JfRkxBR19BQ1RJVkUpYC4gVGhpcyBtZWFucyB0aGF0IGFjdGl2ZSBtb25pdG9ycyBvciBkZXZpY2VzIHdpdGhvdXQgdmlydHVhbCBtb25pdG9ycyB3ZXJlIG5vdCBoYXZpbmcgdGhlaXIgbW9uaXRvciBmbGFncyBkZWNyZW1lbnRlZCBjb3JyZWN0bHkgb24gc3RvcC4gVGhpcyBjb3JyZWN0aW9uIGxpa2VseSBlbnN1cmVzIHRoZSBmbGFncyBhcmUgaGFuZGxlZCBjb25zaXN0ZW50bHkgZHVyaW5nIHN0YXJ0IGFuZCBzdG9wIG9wZXJhdGlvbnMsIHJlZ2FyZGxlc3Mgb2YgdGhlIG1vbml0b3ImIzM5O3MgYWN0aXZlIHN0YXRlLgoKTm93LCByZWFjaGFiaWxpdHkgaXMgY3J1Y2lhbC4gV2UgbmVlZCB0byBrbm93IGhvdyBlYXNpbHkgd2UgY2FuIGdldCBhdCB0aGlzIGNvZGUgd2l0aCBvdXIgdG9vbHMuIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIGBtYWM4MDIxMWAgY2FuIGJlIHRlc3RlZCB1c2luZyBgbWFjODAyMTFfaHdzaW1gIChhIHZpcnR1YWwgODAyLjExIGRldmljZSkgb3IgdGhyb3VnaCB0aGUgYG5sODAyMTFgIGFuZCBgY2ZnODAyMTFgIGludGVyZmFjZXMsIHdoaWNoIG1lYW5zIHN5c2NhbGxzIGFuZCBuZXRsaW5rIGNvbW1hbmRzLiBUaGlzIGlzIHByb21pc2luZy4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZSB3aXRoaW4gU3l6a2FsbGVyJiMzOTtzIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gVGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgKnllcyouIFN5emthbGxlciBoZWF2aWx5IGxldmVyYWdlcyBgbWFjODAyMTFfaHdzaW1gIHZpYSBgbmw4MDIxMWAgbmV0bGluayBjb21tYW5kcy4gSXQgY3JlYXRlcyB2aXJ0dWFsIGludGVyZmFjZXMsIHNldHMgbW9uaXRvciBtb2RlLCBhbmQgc3RhcnRzL3N0b3BzIHRoZXNlIGludGVyZmFjZXMgdXNpbmcgdGhlIHN0YW5kYXJkIGBydG5ldGxpbmtgLCBgU0lPQ1NJRkZMQUdTYCwgYW5kIGBubDgwMjExYCBtZWNoYW5pc21zLiBUaGlzIGNsZWFybHkgZXN0YWJsaXNoZXMgdGhhdCB3ZSBjYW4gbW9kaWZ5IHRoZSBjb3JlIHdpcmVsZXNzIG5ldHdvcmtpbmcgc3Vic3lzdGVtIChzcGVjaWZpY2FsbHksIHRoZSBgbmV0L21hYzgwMjExYCBtb2R1bGUpIGFuZCBtYW5pcHVsYXRlIGV4ZWN1dGFibGUgY29udHJvbCBmbG93LiBUaGlzIHNwZWNpZmljIGJ1ZyBmaXgsIHRoZSBtb3ZlIG9mIHRoZSBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSlgIGNhbGwsIHNob3VsZCB0aGVyZWZvcmUgYmUgZWZmZWN0aXZlbHkgZXhlcmNpc2FibGUgYnkgU3l6a2FsbGVyLgoKRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgYG1hYzgwMjExYC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFyb3VuZCBgbmV0L21hYzgwMjExYCB0byBpZGVudGlmeSBhbnkgc3BlY2lmaWMgY29uZmlnIG9wdGlvbnMgdGhhdCBtaWdodCBiZSBjcml0aWNhbCBmb3IgdHJpZ2dlcmluZyBvciBleHBvc2luZyB0aGlzIHZ1bG5lcmFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxubmV0L21hYzgwMjExL0tjb25maWc6MjE6Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xubmV0L21hYzgwMjExL0tjb25maWctMjItXHRib29sXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMy1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQwLVxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxubmV0L21hYzgwMjExL0tjb25maWctNDktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1MDpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXHRzdHJpbmdcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFwmIzM0O1NvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxubmV0L21hYzgwMjExL0tjb25maWc6NjA6Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1Rcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIG1hYzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNzgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xubmV0L21hYzgwMjExL0tjb25maWctODAtXHRib29sIFwmIzM0O0VuYWJsZSBMRUQgdHJpZ2dlcnNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjg4OmNvbmZpZyBNQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7RXhwb3J0IG1hYzgwMjExIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctOTYtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7VHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTExLVx0Ym9vbCBcJiMzNDtTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxubmV0L21hYzgwMjExL0tjb25maWc6MTE2OmNvbmZpZyBNQUM4MDIxMV9OT0lOTElORVxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtEbyBub3QgaW5saW5lIFRYL1JYIGhhbmRsZXJzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTMxLVxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXHRib29sIFwmIzM0O1ZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTQ0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNTQ6Y29uZmlnIE1BQzgwMjExX1NUQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHN0YXRpb24gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTYyLVxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTY0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIEhUIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgT0NCIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4Njpjb25maWcgTUFDODAyMTFfSUJTU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTg3LVx0Ym9vbCBcJiMzNDtWZXJib3NlIElCU1MgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTk2LVxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTk4LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxubmV0L21hYzgwMjExL0tjb25maWc6MjIyOmNvbmZpZyBNQUM4MDIxMV9NUEFUSF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjIzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcGF0aCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzQtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTk6Y29uZmlnIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBjaGFubmVsIHN3aXRjaCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4Mi1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBURExTIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5Mzpjb25maWcgTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cdGJvb2wgXCYjMzQ7RXh0cmEgc3RhdGlzdGljcyBmb3IgVFgvUlggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMzA3LVxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVx0aW50IFwmIzM0O1N0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcJiMzNDsgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY0NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgTUFDODAyMTFgIERlcGVuZGVuY2llcyoqCgpSaWdodCwgbGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZ3V0cyBvZiB0aGlzIGBNQUM4MDIxMWAgc2l0dWF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBvdXQgdGhlIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCB1bndpbmRpbmcgdGhlIGRlcGVuZGVuY3kgdHJlZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IG90aGVyIGtlcm5lbCBjb21wb25lbnRzIGFyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCBgTUFDODAyMTFgLCB0aGUgYnVpbGQgb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBpdCwgYW5kIGFueSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBwaXRmYWxscy4gVGhpcyBLY29uZmlnIGZpbGUgc2hvdWxkIGlsbHVtaW5hdGUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLCBzbyBJIGNhbiBzdGFydCBmb3JtaW5nIGEgbWVudGFsIG1vZGVsIG9mIGhvdyBpdCBhbGwgaW50ZXJhY3RzLiBIb3BlZnVsbHksIGl04oCZbGwgYmUgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCB0byBzZWUgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcyBhbmQgZmxhZ3MgYXQgYSBnbGFuY2UsIGFsbG93aW5nIG1lIHRvIGZvY3VzIG9uIHRoZSBhcmVhIG9mIGNvbmNlcm4uIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTUFDODAyMTFcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExXG4gICA1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gICA2Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfQ0JDX01BQ1NcbiAgIDc6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FSQzRcbiAgIDg6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4gICA5Olx0XHRzZWxlY3QgQ1JZUFRPX0NDTVxuICAxMDpcdFx0c2VsZWN0IENSWVBUT19HQ01cbiAgMTE6XHRcdHNlbGVjdCBDUkMzMlxuICAxMjpcdFx0aGVscFxuICAxMzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBoYXJkd2FyZSBpbmRlcGVuZGVudCBJRUVFIDgwMi4xMVxuICAxNDpcdFx0ICBuZXR3b3JraW5nIHN0YWNrLlxuICAxNTpcdFxuICAxNjpcdGNvbW1lbnQgXCYjMzQ7Q0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTFcJiMzNDtcbiAgMTc6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTE9blxuICAxODpcdFxuICAxOTpcdGlmIE1BQzgwMjExICE9IG5cbiAgMjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxODQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyB0aGUgYG1hYzgwMjExX2h3c2ltYCBLY29uZmlnKioKCk9rYXksIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFdoaWxlIEkmIzM5O20gd29ya2luZyB3aXRoIHRoaXMgYXJlYSwgaXQmIzM5O3Mgd2lzZSB0byByZXZpZXcgYWxsIHRoZSByZWxldmFudCBjb21wb25lbnRzLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHBydWRlbnQgdG8gZG91YmxlLWNoZWNrIHRoZSBgbWFjODAyMTFfaHdzaW1gIEtjb25maWcgZmlsZS4gSSYjMzk7bSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLCBidXQgdGhpcyBzdGVwIHdpbGwgaGVscCBtZSB0byByZWZyZXNoIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGFueSBkZXBlbmRlbmNpZXMgb3IgZGVmYXVsdCBzZXR0aW5ncyB0aGF0IG1pZ2h0IGJlIGNydWNpYWwgdG8gd2hhdGV2ZXIgaXNzdWUgSSYjMzk7bSBjdXJyZW50bHkgZm9jdXNlZCBvbi4gSXTigJlzIGEgZ29vZCBwcmFjdGljZSB0byBiZSBtZXRpY3Vsb3VzIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gZW5zdXJlIHRoZSBpbnRlbmRlZCBiZWhhdmlvdXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMV9IV1NJTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZzoxOmNvbmZpZyBNQUM4MDIxMV9IV1NJTVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ2MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgVmlydHVhbCBXaXJlbGVzcyBLY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgdmlydHVhbCB3aXJlbGVzcyBzZXR1cCBpbiB0aGlzIGtlcm5lbC4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgdGV4dCBtZW50aW9ucyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnYC4gUmlnaHQsIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBzdWJzeXN0ZW0uIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYEtjb25maWdgIG5vdyB0byBzZWUgd2hhdCYjMzk7cyBkZWZpbmVkLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyB0aGlzIGFsbCBwaWVjZXMgdG9nZXRoZXIuIFRoYXQmIzM5O2xsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSByZXN0IG9mIHRoZSBjb2RlLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdGNvbmZpZyBNQUM4MDIxMV9IV1NJTVxuICAgMjpcdFx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgIDQ6XHRcdGhlbHBcbiAgIDU6XHRcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdFxuICAgNjpcdFx0ICBJRUVFIDgwMi4xMSBuZXR3b3JraW5nIHN0YWNrIChtYWM4MDIxMSkgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBub3RcbiAgIDc6XHRcdCAgbmVlZGVkIGZvciBub3JtYWwgd2lyZWxlc3MgTEFOIHVzYWdlIGFuZCBpcyBvbmx5IGZvciB0ZXN0aW5nLiBTZWVcbiAgIDg6XHRcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21hYzgwMjExX2h3c2ltIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvd1xuICAgOTpcdFx0ICB0byB1c2UgdGhpcyB0b29sLlxuICAxMDpcdFxuICAxMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbiAgMTI6XHRcdCAgY2FsbGVkIG1hYzgwMjExX2h3c2ltLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgVklSVF9XSUZJXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtXaWZpIHdyYXBwZXIgZm9yIGV0aGVybmV0IGRyaXZlcnNcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBldGhlcm5ldCBjb25uZWN0aW9ucyB0byBhcHBlYXIgYXMgaWYgdGhleVxuICAxOTpcdFx0ICBhcmUgd2lmaSBjb25uZWN0aW9ucyB0aHJvdWdoIGEgc3BlY2lhbCBydG5ldGxpbmsgZGV2aWNlLlxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk5MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gQ0ZHODAyMTEgRGVwZW5kZW5jaWVzKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSYjMzk7bSBzdGFydGluZyB3aXRoIGBDRkc4MDIxMWAuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIHF1aWNrbHkgZ2V0IGEgaGFuZGxlIG9uIGFsbCBpdHMgZGVwZW5kZW5jaWVzLiBXaGF0IG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIG9yIGV4dGVybmFsIGxpYnJhcmllcyBpcyBpdCB0aWdodGx5IGNvdXBsZWQgd2l0aD8gSSYjMzk7bSB0aGlua2luZywgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgdGhpbmdzIGxpa2UgcmVndWxhdG9yeSBkYXRhYmFzZXMsIHdpcmVsZXNzIGV4dGVuc2lvbnMsIGFuZCwgb2YgY291cnNlLCB0aGUgdmFyaW91cyBkcml2ZXIgaW50ZXJmYWNlcy4gSSBuZWVkIGEgY2xlYXIgbWVudGFsIG1hcCwgc28gSSBjYW4gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHNjb3BlIG9mIGFueSBwb3RlbnRpYWwgY2hhbmdlcyBJJiMzOTttIGFib3V0IHRvIG1ha2UsIG9yIGFueSB2dWxuZXJhYmlsaXRpZXMgSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyLiBJJiMzOTttIGdvaW5nIHRvIG1hcCBvdXQgdGhlIGRlcGVuZGVuY3kgdHJlZSB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCByZWdyZXNzaW9ucyBvciBpbnRlZ3JhdGlvbiBwcm9ibGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENGRzgwMjExJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWc9Mzg9Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01MS1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjUyOmNvbmZpZyBDRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1Ncbm5ldC93aXJlbGVzcy9LY29uZmlnLTUzLVx0Ym9vbCBcJiMzNDtlbmFibGUgZGV2ZWxvcGVyIHdhcm5pbmdzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNjctXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo2ODpjb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctODgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo4OTpjb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDtyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjk5OmNvbmZpZyBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMC1cdGJvb2wgXCYjMzQ7YWxsb3cgcmVnZGIga2V5cyBzaGlwcGVkIHdpdGggdGhlIGtlcm5lbFwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTE6Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxubmV0L3dpcmVsZXNzL0tjb25maWctMTEyLVx0c3RyaW5nIFwmIzM0O2FkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjI6Y29uZmlnIENGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSByZWd1bGF0b3J5IHN1cHBvcnQgZm9yIGNlbGx1bGFyIGJhc2Ugc3RhdGlvbiBoaW50c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0O2NmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2MC1cdGJvb2wgXCYjMzQ7ZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTY5OmNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXHRib29sIFwmIzM0O2NmZzgwMjExIERlYnVnRlMgZW50cmllc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3Ni1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O3N1cHBvcnQgQ1JEQVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk0OmNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDEzMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkRpdmluZyBpbnRvIHRoZSBgaWVlZTgwMjExX2RvX3N0b3AoKWAgUGF0Y2gqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgYGllZWU4MDIxMV9kb19zdG9wKClgIHdpdGhpbiBgbmV0L21hYzgwMjExL2lmYWNlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gVG8gcHJvcGVybHkgYXNzZXNzIHRoaXMsIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBncmFwaC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgY2FsbCBgaWVlZTgwMjExX2RvX3N0b3AoKWAuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYWxsIHRoZSBjYWxsZXJzLiBJdCBpcyBhbHNvIGltcG9ydGFudCB0byBpZGVudGlmeSB3aGVyZSBgaWVlZTgwMjExX2RvX3N0b3AoKWAgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGludGVyZmFjZSBsaWZlY3ljbGUgd2l0aGluIGBtYWM4MDIxMWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBtaWdodCBicmVhay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWVlZTgwMjExX2RvX3N0b3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2NmZy5jPTk2PXN0YXRpYyBpbnQgaWVlZTgwMjExX3NldF9tb25fb3B0aW9ucyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMTQ5LVx0XHRcdC8qXG5uZXQvbWFjODAyMTEvY2ZnLmM6MTUwOlx0XHRcdCAqIEJlY2F1c2UgdGhlIGludGVyZmFjZSBpcyBkb3duLCBpZWVlODAyMTFfZG9fc3RvcFxubmV0L21hYzgwMjExL2NmZy5jLTE1MS1cdFx0XHQgKiBhbmQgaWVlZTgwMjExX2RvX29wZW4gdGFrZSBjYXJlIG9mIFwmIzM0O2V2ZXJ5dGhpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz00NjE9c3RhdGljIGludCBpZWVlODAyMTFfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTQ3OC1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjQ3OTpzdGF0aWMgdm9pZCBpZWVlODAyMTFfZG9fc3RvcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgYm9vbCBnb2luZ19kb3duKVxubmV0L21hYzgwMjExL2lmYWNlLmMtNDgwLXtcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz04NDY9c3RhdGljIGludCBpZWVlODAyMTFfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTg2OC1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjg2OTpcdGllZWU4MDIxMV9kb19zdG9wKHNkYXRhLCB0cnVlKTtcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTg3MC1cbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xOTgxPXN0YXRpYyBpbnQgaWVlZTgwMjExX3J1bnRpbWVfY2hhbmdlX2lmdHlwZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yMDQ1LVx0LyogZG9fc3RvcCB3aWxsIHN5bmNocm9uaXplX3JjdSgpIGZpcnN0IHRoaW5nICovXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoyMDQ2Olx0aWVlZTgwMjExX2RvX3N0b3Aoc2RhdGEsIGZhbHNlKTtcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTIwNDctXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmM9MjQ0MT12b2lkIGllZWU4MDIxMV9zZGF0YV9zdG9wKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0NDQtXHRcdHJldHVybjtcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjI0NDU6XHRpZWVlODAyMTFfZG9fc3RvcChzZGF0YSwgdHJ1ZSk7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDQ2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMjgKCQkJCQkJCW91dHB1dDogMjQzCgkJCQkJCQl0aG91Z2h0czogNTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQ6IG1hYzgwMjExIE1vbml0b3IgSW50ZXJmYWNlIFN0b3AgQ2xlYW51cCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTt2ZSBpZGVudGlmaWVkIGEgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0IHdpdGhpbiB0aGUgbWFjODAyMTEgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgY2xlYW51cCBsb2dpYyB3aGVuIGEgbW9uaXRvciBpbnRlcmZhY2UgaXMgc3RvcHBlZC4gTXkgaW5pdGlhbCBzY2FuIGhhcyB5aWVsZGVkIGEgaGFuZGZ1bCBvZiBrZXkgZnVuY3Rpb25zIGFzIGZvY3VzIHN5bWJvbHM6IGBpZWVlODAyMTFfZG9fc3RvcGAgKGRlZmluZWQgYXMgc3RhdGljIHdpdGhpbiBuZXQvbWFjODAyMTEvaWZhY2UuYyksIGBpZWVlODAyMTFfc3RvcGAsIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3NgLCBgaWVlZTgwMjExX3J1bnRpbWVfY2hhbmdlX2lmdHlwZWAsIGFuZCBgaWVlZTgwMjExX3NldF9tb25fb3B0aW9uc2AuIEdvb2QsIHRoZXNlIHNlZW0gZmVhdHVyZS1zcGVjaWZpYyBlbm91Z2ggYW5kIG5vdCBvdmVybHkgdWJpcXVpdG91cyB0byBiZSB1c2VmdWwgYXMgZm9jdXMgc3ltYm9scy4KCkkmIzM5O3ZlIGFsc28gY2hlY2tlZCB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgd291bGQgbWFrZSB0aGlzIHRhcmdldCByZWFjaGFibGUuIEl0IGxvb2tzIGxpa2Ugd2UgbmVlZCBgTUFDODAyMTFgLCBgQ0ZHODAyMTFgLCBhbmQgYE1BQzgwMjExX0hXU0lNYCBlbmFibGVkLiAgVGhlIHJlYWNoYWJpbGl0eSBsb29rcyBzb2xpZCAtIHdlIGNhbiBoaXQgdGhpcyB3aXRoIHN0YW5kYXJkIFFFTVUvc3l6a2FsbGVyIHNldHVwcyB1c2luZyBubDgwMjExIGFuZCBtYWM4MDIxMV9od3NpbS4KClRoaXMgdGFyZ2V0IGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZzsgaXQmIzM5O3MgYSAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsgc2l0dWF0aW9uLiBUaGUgY29yZSBvZiB0aGlzIGlzIGNlbnRlcmVkIGFyb3VuZCB0aGUgY29ycmVjdCBpbnZvY2F0aW9uIG9mIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKWAgZHVyaW5nIG1vbml0b3IgaW50ZXJmYWNlIHN0b3AuIFRoZSBwYXRjaCBpbiBxdWVzdGlvbiBzZWVtcyB0byBmb2N1cyBvbiBlbnN1cmluZyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYSBtb25pdG9yIGludGVyZmFjZSBpcyBhY3R1YWxseSBhY3RpdmUgb3IgaWYgdmlydHVhbCBtb25pdG9yIHN1cHBvcnQgaXMgcHJlc2VudC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgYXJlYSBmb3Igc3VidGxlIGJ1Z3MgcmVsYXRlZCB0byBzdGF0ZSBtYW5hZ2VtZW50LgoKQWxyaWdodCwgZG91YmxlLWNoZWNraW5nIGV2ZXJ5dGhpbmc6CgoqICAgKipDb25maWdzOioqIE1BQzgwMjExLCBDRkc4MDIxMSwgTUFDODAyMTFfSFdTSU0KKiAgICoqRm9jdXNTeW1ib2xzOioqIGBpZWVlODAyMTFfZG9fc3RvcGAsIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3NgLCBgaWVlZTgwMjExX3N0b3BgLCBgaWVlZTgwMjExX3J1bnRpbWVfY2hhbmdlX2lmdHlwZWAsIGBpZWVlODAyMTFfc2V0X21vbl9vcHRpb25zYAoKKiAgICoqUmVhc29uaW5nOioqIFRoZSBidWcgZml4IGludm9sdmVzIHRoZSBjbGVhbnVwIGxvZ2ljIG9mIG1vbml0b3IgaW50ZXJmYWNlczsgaXQgc2hvdWxkIGJlIHdvcnRoIGZ1enppbmcgYmVjYXVzZSBpdCBtb2RpZmllcyBtb25pdG9yIHN0b3AgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB3aXRoIHN0YW5kYXJkIFFFTVUvc3l6a2FsbGVyLgoKTGV0JiMzOTtzIGludm9rZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZWVlODAyMTFfZG9fc3RvcCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3MmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3N0b3AmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3J1bnRpbWVfY2hhbmdlX2lmdHlwZSYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfc2V0X21vbl9vcHRpb25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1vbml0b3IgaW50ZXJmYWNlIHRlYXJkb3duIGhhbmRsaW5nIGluIG5ldC9tYWM4MDIxMS9pZmFjZS5jIChpZWVlODAyMTFfZG9fc3RvcCkgYnkgZW5zdXJpbmcgdGhhdCBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3MoKSBpcyBhbHdheXMgaW52b2tlZCB0byBkZWNyZW1lbnQgbW9uaXRvciBmbGFncyB3aGVuIHN0b3BwaW5nIGEgbW9uaXRvciBpbnRlcmZhY2UsIHJlZ2FyZGxlc3Mgb2YgdGhlIHZpcnR1YWwgbW9uaXRvciBzdGF0dXMuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIG1hYzgwMjExX2h3c2ltIGFuZCBubDgwMjExL3J0bmV0bGluayBpbnRlcmZhY2UgY29udHJvbCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2llZWU4MDIxMV9kb19zdG9wJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfc3RvcCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfcnVudGltZV9jaGFuZ2VfaWZ0eXBlJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9zZXRfbW9uX29wdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbW9uaXRvciBpbnRlcmZhY2UgdGVhcmRvd24gaGFuZGxpbmcgaW4gbmV0L21hYzgwMjExL2lmYWNlLmMgKGllZWU4MDIxMV9kb19zdG9wKSBieSBlbnN1cmluZyB0aGF0IGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncygpIGlzIGFsd2F5cyBpbnZva2VkIHRvIGRlY3JlbWVudCBtb25pdG9yIGZsYWdzIHdoZW4gc3RvcHBpbmcgYSBtb25pdG9yIGludGVyZmFjZSwgcmVnYXJkbGVzcyBvZiB0aGUgdmlydHVhbCBtb25pdG9yIHN0YXR1cy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWFjODAyMTFfaHdzaW0gYW5kIG5sODAyMTEvcnRuZXRsaW5rIGludGVyZmFjZSBjb250cm9sIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBhY2NvdW50aW5nIGJ1ZyBpbiBtYWM4MDIxMSBtb25pdG9yIGludGVyZmFjZSBoYW5kbGluZyBieSBtb3ZpbmcgYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpYCBvdXRzaWRlIHRoZSBjb25kaXRpb25hbCBjaGVjayBpbiBgaWVlZTgwMjExX2RvX3N0b3AoKWAsIHByb3Blcmx5IGJhbGFuY2luZyB0aGUgdW5jb25kaXRpb25hbCBjYWxsIHRvIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIDEpYCBpbiBgaWVlZTgwMjExX2RvX29wZW4oKWAuIFxuXG5UaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgaW50ZXJuYWwgbW9uaXRvciBmbGFnIGNvdW50ZXJzIG9uIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYCAoc3VjaCBhcyBgbG9jYWwtXHUwMDNlZmlmX2Zjc2ZhaWxgLCBgbG9jYWwtXHUwMDNldHhfbW50cnNgLCBldGMuKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiwgYW5kIHN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDlkODg3YjlhMDBmOTc0NzUwYTIxNTgwYmJlOTY5YWU2MTZjNzIzZGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDA3OjU1OjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lmYWNlLmMgYi9uZXQvbWFjODAyMTEvaWZhY2UuYwppbmRleCA0MzQ2MGE3MDVhNmJkLi45YjQwMGNhZjI3NjUyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvaWZhY2UuYwpAQCAtNjMwLDggJiM0Mzs2MzAsOSBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfZG9fc3RvcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgYm9vbCBnb2luZ19kbwogCQkJCWh3X3JlY29uZl9mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9DSEFOR0VfTU9OSVRPUjsKIAkJCX0KIAotCQkJaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSk7CiAJCX0KJiM0MzsKJiM0MzsJCWllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX05BTjoKIAkJLyogQ2hlY2sgaWYgYW55IG9wZW4gTkFOX0RBVEEgaW50ZXJmYWNlcyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbWFjODAyMTEgSW50ZXJmYWNlIENvZGUqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcyBkaWZmLiBUbyBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbiwgbXkgZmlyc3QgbW92ZSBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLCB3aGljaCBsb29rcyBsaWtlIGl0JiMzOTtzIGluIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBzbyBJJiMzOTtsbCBzdGFydCBieSByZWFkaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGF0IEkgbmVlZCB0byB6b29tIGluIG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDYzMC4gTGV0JiMzOTtzIHVzZSBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIHRoYXQgc2VjdGlvbiBhbmQgZ2V0IGEgZ29vZCBvdmVydmlldyBvZiB0aGUgYmVoYXZpb3IuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGZvdW5kYXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2lmYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwMDpcdFx0XHRcdH1cbiA2MDE6XHRcdFx0fVxuIDYwMjpcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBzLVx1MDAzZWJjX2J1Zi5sb2NrLCBmbGFncyk7XG4gNjAzOlx0XG4gNjA0Olx0XHRcdHNrYl9xdWV1ZV93YWxrX3NhZmUoXHUwMDI2ZnJlZXEsIHNrYiwgdG1wKSB7XG4gNjA1Olx0XHRcdFx0X19za2JfdW5saW5rKHNrYiwgXHUwMDI2ZnJlZXEpO1xuIDYwNjpcdFx0XHRcdGllZWU4MDIxMV9mcmVlX3R4c2tiKFx1MDAyNmxvY2FsLVx1MDAzZWh3LCBza2IpO1xuIDYwNzpcdFx0XHR9XG4gNjA4Olx0XHR9XG4gNjA5Olx0XG4gNjEwOlx0XHRpZiAoZ29pbmdfZG93bilcbiA2MTE6XHRcdFx0bG9jYWwtXHUwMDNlb3Blbl9jb3VudC0tO1xuIDYxMjpcdFxuIDYxMzpcdFx0c3dpdGNoIChzZGF0YS1cdTAwM2V2aWYudHlwZSkge1xuIDYxNDpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOlxuIDYxNTpcdFx0XHRsaXN0X2RlbChcdTAwMjZzZGF0YS1cdTAwM2V1LnZsYW4ubGlzdCk7XG4gNjE2Olx0XHRcdFJDVV9JTklUX1BPSU5URVIoc2RhdGEtXHUwMDNldmlmLmJzc19jb25mLmNoYW5jdHhfY29uZiwgTlVMTCk7XG4gNjE3Olx0XHRcdC8qIHNlZSBjb21tZW50IGluIHRoZSBkZWZhdWx0IGNhc2UgYmVsb3cgKi9cbiA2MTg6XHRcdFx0aWVlZTgwMjExX2ZyZWVfa2V5cyhzZGF0YSwgdHJ1ZSk7XG4gNjE5Olx0XHRcdC8qIG5vIG5lZWQgdG8gdGVsbCBkcml2ZXIgKi9cbiA2MjA6XHRcdFx0YnJlYWs7XG4gNjIxOlx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6XG4gNjIyOlx0XHRcdGxvY2FsLVx1MDAzZW1vbml0b3JzLS07XG4gNjIzOlx0XG4gNjI0Olx0XHRcdGlmICghKHNkYXRhLVx1MDAzZXUubW50ci5mbGFncyBcdTAwMjYgTU9OSVRPUl9GTEFHX0FDVElWRSkgXHUwMDI2XHUwMDI2XG4gNjI1Olx0XHRcdCAgICAhaWVlZTgwMjExX2h3X2NoZWNrKFx1MDAyNmxvY2FsLVx1MDAzZWh3LCBOT19WSVJUVUFMX01PTklUT1IpKSB7XG4gNjI2Olx0XG4gNjI3Olx0XHRcdFx0bG9jYWwtXHUwMDNldmlydF9tb25pdG9ycy0tO1xuIDYyODpcdFx0XHRcdGlmIChsb2NhbC1cdTAwM2V2aXJ0X21vbml0b3JzID09IDApIHtcbiA2Mjk6XHRcdFx0XHRcdGxvY2FsLVx1MDAzZWh3LmNvbmYuZmxhZ3MgXHUwMDI2PSB+SUVFRTgwMjExX0NPTkZfTU9OSVRPUjtcbiA2MzA6XHRcdFx0XHRcdGh3X3JlY29uZl9mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9DSEFOR0VfTU9OSVRPUjtcbiA2MzE6XHRcdFx0XHR9XG4gNjMyOlx0XG4gNjMzOlx0XHRcdH1cbiA2MzQ6XHRcbiA2MzU6XHRcdFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSk7XG4gNjM2Olx0XHRcdGJyZWFrO1xuIDYzNzpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU46XG4gNjM4Olx0XHRcdC8qIENoZWNrIGlmIGFueSBvcGVuIE5BTl9EQVRBIGludGVyZmFjZXMgKi9cbiA2Mzk6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG4gNjQwOlx0XHRcdFx0V0FSTl9PTihpdGVyLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBIFx1MDAyNlx1MDAyNlxuIDY0MTpcdFx0XHRcdFx0aWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoaXRlcikpO1xuIDY0MjpcdFx0XHR9XG4gNjQzOlx0XG4gNjQ0Olx0XHRcdC8qIGNsZWFuIGFsbCB0aGUgZnVuY3Rpb25zICovXG4gNjQ1Olx0XHRcdGlmICghKGxvY2FsLVx1MDAzZWh3LndpcGh5LVx1MDAzZW5hbl9jYXBhLmZsYWdzIFx1MDAyNlxuIDY0NjpcdFx0XHQgICAgICBXSVBIWV9OQU5fRkxBR1NfVVNFUlNQQUNFX0RFKSkge1xuIDY0NzpcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZzZGF0YS1cdTAwM2V1Lm5hbi5kZS5mdW5jX2xvY2spO1xuIDY0ODpcdFxuIDY0OTpcdFx0XHRcdGlkcl9mb3JfZWFjaF9lbnRyeShcdTAwMjZzZGF0YS1cdTAwM2V1Lm5hbi5kZS5mdW5jdGlvbl9pbnN0X2lkcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBEcml2ZXImIzM5O3MgSW5pdGlhbGl6YXRpb24gYW5kIFNodXRkb3duKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyB0aGlzIGRyaXZlciBoYW5kbGVzIG1vbml0b3IgbW9kZSwgYW5kIGhvdyBpdCYjMzk7cyBpbml0aWFsaXplZCBhbmQgc2h1dCBkb3duLiBUaGUga2V5IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3NgLCBgaWVlZTgwMjExX2RvX3N0b3BgLCBhbmQgYGllZWU4MDIxMV9kb19vcGVuYCBvciBwb3RlbnRpYWxseSBzdGFydC1yZWxhdGVkIGZ1bmN0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgc29saWQgb3ZlcnZpZXcgb2YgdGhlIGNvZGUgaW4gdGhhdCByZWdpb24sIHNvIEkmIzM5O20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIG9uIGxpbmVzIDUwMCB0byA2MDAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBUbyBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyByZWxldmFudCwgSSYjMzk7bSBnb2luZyB0byBkbyBhIHF1aWNrIGdyZXAgZm9yIGFueSBvdGhlciByZWZlcmVuY2VzIHRvIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3NgLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gdHJhY2sgZG93biBhbGwgY2FsbHMsIHRvIHNlZSBob3cgdGhhdCBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkIGZyb20gZWxzZXdoZXJlIGluIHRoZSBjb2RlYmFzZS4gVGhpcyBpcyBzdGFuZGFyZCBvcGVyYXRpbmcgcHJvY2VkdXJlIGZvciBtZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9jZmcuYz05Nj1zdGF0aWMgaW50IGllZWU4MDIxMV9zZXRfbW9uX29wdGlvbnMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTE0Mi1cdFx0aWYgKGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkge1xubmV0L21hYzgwMjExL2NmZy5jOjE0MzpcdFx0XHRpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKTtcbm5ldC9tYWM4MDIxMS9jZmcuYy0xNDQtXHRcdFx0c2RhdGEtXHUwMDNldS5tbnRyLmZsYWdzID0gcGFyYW1zLVx1MDAzZWZsYWdzO1xubmV0L21hYzgwMjExL2NmZy5jOjE0NTpcdFx0XHRpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIDEpO1xubmV0L21hYzgwMjExL2NmZy5jLTE0Ni1cbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0yMjAyPXZvaWQgaWVlZTgwMjExX3JlY2FsY19pZGxlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTtcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjIyMDM6dm9pZCBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMjA0LVx0XHRcdFx0ICAgIGNvbnN0IGludCBvZmZzZXQpO1xuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTQ3OT1zdGF0aWMgdm9pZCBpZWVlODAyMTFfZG9fc3RvcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgYm9vbCBnb2luZ19kb3duKVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTYzNC1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjYzNTpcdFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSk7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy02MzYtXHRcdGJyZWFrO1xuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTExNTY9dm9pZCBpZWVlODAyMTFfcmVjYWxjX29mZmxvYWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtMTE3Mi1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjExNzM6dm9pZCBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMTc0LVx0XHRcdFx0ICAgIGNvbnN0IGludCBvZmZzZXQpXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmM9MTM2Nj1pbnQgaWVlZTgwMjExX2RvX29wZW4oc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgYm9vbCBjb21pbmdfdXApXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtMTUwNi1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjE1MDc6XHRcdGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgMSk7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xNTA4LVx0XHRpZWVlODAyMTFfY29uZmlndXJlX2ZpbHRlcihsb2NhbCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MjMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSA4MDIuMTEgSW50ZXJmYWNlIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIDgwMi4xMSBpbnRlcmZhY2UuIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCBmb3IgYGllZWU4MDIxMV9kb19vcGVuYCBpbiBgbmV0L21hYzgwMjExL2lmYWNlLmNgIOKAkyBzcGVjaWZpY2FsbHksIGFyb3VuZCBsaW5lIDE1MDAuIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBicmluZ2luZyB1cCBhbiBpbnRlcmZhY2UuIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoZSBwb2ludCBvZiBpbnRlcmZhY2UgYnJpbmctdXAgLSB3aGF0IGFyZSB0aGUga2V5IHN0ZXBzLCByZXNvdXJjZSBhbGxvY2F0aW9ucywgYW5kIGluaXRpYWxpemF0aW9ucy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlIGxvd2VyIE1BQyBsYXllciBhbmQgdGhlIGhpZ2hlciBsYXllcnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZToKLSAqKkFzc29jaWF0aW9uKio6IHRoZSBpbnRlcmZhY2UgYXNzb2NpYXRpbmcgd2l0aCB0aGUgbmV0d29yay4KLSAqKkJlYWNvbiBTZXR1cCoqOiBoYW5kbGluZyBvZiBiZWFjb25zIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb24uCi0gKipQb3dlciBNYW5hZ2VtZW50Kio6IHNldHRpbmcgdGhlIG5lY2Vzc2FyeSBQTSBmbGFncy4KLSAqKlJhdGUgY29udHJvbCoqOiBkZXRlcm1pbmluZyBzdGFydGluZyB0cmFuc21pdCByYXRlcy4KLSAqKlNlY3VyaXR5IGFzc29jaWF0aW9ucyoqOiB0aGUgc2V0dGluZyB1cCBhbmQvb3IgY2hlY2tpbmcgb2Ygc2VjdXJpdHkgcG9saWNpZXMuCgpGcm9tIGV4cGVyaWVuY2UsIEkga25vdyB0aGF0IHRoaXMgaXMgYSBjcml0aWNhbCBzZWN0aW9uIGZvciBicmluZ2luZyB1cCB0aGUgaW50ZXJmYWNlLCBhbmQgdGhhdCB0aGUgb3JkZXIgb2YgdGhlIGFjdGlvbnMgY2FuIGJlIGNyaXRpY2FsIGZvciBjb3JyZWN0IG9wZXJhdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgc2V0dGluZ3MgYXJlIGNvcnJlY3RseSBjb25maWd1cmVkIGJlZm9yZSB0aGUgaW50ZXJmYWNlIGlzIGFjY2Vzc2libGUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9pZmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDkwOlx0XHRcdFx0aWYgKGxvY2FsLVx1MDAzZXZpcnRfbW9uaXRvcnMgPT0gbG9jYWwtXHUwMDNlb3Blbl9jb3VudCkge1xuMTQ5MTpcdFx0XHRcdFx0cmVzID0gaWVlZTgwMjExX2FkZF92aXJ0dWFsX21vbml0b3IobG9jYWwsIHNkYXRhKTtcbjE0OTI6XHRcdFx0XHRcdGlmIChyZXMpXG4xNDkzOlx0XHRcdFx0XHRcdGdvdG8gZXJyX3N0b3A7XG4xNDk0Olx0XHRcdFx0fVxuMTQ5NTpcdFxuMTQ5NjpcdFx0XHRcdGxvY2FsLVx1MDAzZXZpcnRfbW9uaXRvcnMmIzQzOyYjNDM7O1xuMTQ5NzpcdFxuMTQ5ODpcdFx0XHRcdC8qIG11c3QgYmUgYmVmb3JlIHRoZSBjYWxsIHRvIGllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyICovXG4xNDk5Olx0XHRcdFx0aWYgKGxvY2FsLVx1MDAzZXZpcnRfbW9uaXRvcnMgPT0gMSkge1xuMTUwMDpcdFx0XHRcdFx0bG9jYWwtXHUwMDNlaHcuY29uZi5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9NT05JVE9SO1xuMTUwMTpcdFx0XHRcdFx0aHdfcmVjb25mX2ZsYWdzIHw9IElFRUU4MDIxMV9DT05GX0NIQU5HRV9NT05JVE9SO1xuMTUwMjpcdFx0XHRcdH1cbjE1MDM6XHRcdFx0fVxuMTUwNDpcdFxuMTUwNTpcdFx0XHRsb2NhbC1cdTAwM2Vtb25pdG9ycyYjNDM7JiM0Mzs7XG4xNTA2Olx0XG4xNTA3Olx0XHRcdGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgMSk7XG4xNTA4Olx0XHRcdGllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTtcbjE1MDk6XHRcdFx0aWVlZTgwMjExX3JlY2FsY19vZmZsb2FkKGxvY2FsKTtcbjE1MTA6XHRcdFx0aWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTtcbjE1MTE6XHRcbjE1MTI6XHRcdFx0bmV0aWZfY2Fycmllcl9vbihkZXYpO1xuMTUxMzpcdFx0XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZzZGF0YS1cdTAwM2V1Lm1udHIubGlzdCwgXHUwMDI2bG9jYWwtXHUwMDNlbW9uX2xpc3QpO1xuMTUxNDpcdFx0XHRicmVhaztcbjE1MTU6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6XG4xNTE2Olx0XHRcdHNkYXRhLVx1MDAzZWJzcyA9IFx1MDAyNnNkYXRhLVx1MDAzZXUuYXA7XG4xNTE3Olx0XHRcdGZhbGx0aHJvdWdoO1xuMTUxODpcdFx0ZGVmYXVsdDpcbjE1MTk6XHRcdFx0aWYgKGNvbWluZ191cCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzAwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTW9uaXRvciBJbnRlcmZhY2UgRmxhZyBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgaWVlZTgwMjExX2RvX29wZW5gLCBmb3IgKmV2ZXJ5KiBtb25pdG9yIGludGVyZmFjZSwgcmVnYXJkbGVzcyBvZiB0aGUgYE1PTklUT1JfRkxBR19BQ1RJVkVgIHN0YXRlLCBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAxKWAgaXMgdHJpZ2dlcmVkLiAgVGhhdCYjMzk7cyB0aGUgaW5pdGlhbCBzZXR1cCwgcmlnaHQ/ICBUaGUgaW5jcmVtZW50LCBzbyB0byBzcGVhay4KCk5vdywgdGhlIHByb2JsZW0gYXJpc2VzIGluIGBpZWVlODAyMTFfZG9fc3RvcGAuICBQcmV2aW91c2x5LCB0aGUgZGVjcmVtZW50LCBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSlgLCB3YXMgKmNvbmRpdGlvbmFsbHkqIGV4ZWN1dGVkLiBJdCB3YXMgdHJhcHBlZCAqd2l0aGluKiBhbiBgaWZgIHN0YXRlbWVudC4gU3BlY2lmaWNhbGx5LCBpdCB3YXMgb25seSBleGVjdXRlZCBpZiAqYm90aCogYE1PTklUT1JfRkxBR19BQ1RJVkVgIHdhc24mIzM5O3Qgc2V0LCAqYW5kKiBpZiBgTk9fVklSVFVBTF9NT05JVE9SYCB3YXNuJiMzOTt0IHRydWUsIHdoaWNoIGlzIGRldGVybWluZWQgYnkgYGllZWU4MDIxMV9od19jaGVja2AuCgpUaGUga2V5IGhlcmUgaXMgdGhhdCBpZiBgTU9OSVRPUl9GTEFHX0FDVElWRWAgd2FzIGFscmVhZHkgc2V0IG9yIGBOT19WSVJUVUFMX01PTklUT1JgIHdhcyB0cnVlLCB0aGUgY29ycmVzcG9uZGluZyBkZWNyZW1lbnQgd2FzbiYjMzk7dCBoYXBwZW5pbmcgaW4gYGllZWU4MDIxMV9kb19zdG9wYC4gIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBpbWJhbGFuY2UuICBUaGlzIG1lYW50IHdlIHdlcmUgbGVha2luZyBvdXIgcmVmY291bnRpbmcsIG9yLCBtb3JlIGFjY3VyYXRlbHksIHRoZSAmIzM5O2FjdGl2ZSBtb25pdG9yIGZsYWcmIzM5Oy4KClNvLCB0aGUgZml4IGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYW5kIGVsZWdhbnQuIE1vdmluZyB0aGF0IGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKWAgY2FsbCAqb3V0c2lkZSogdGhlIGBpZmAgaW4gYGllZWU4MDIxMV9kb19zdG9wYCB3aWxsIGVuc3VyZSB0aGF0IGZvciAqZXZlcnkqIGluY3JlbWVudCBpbiBgb3BlbmAsIHRoZXJlJiMzOTtzIGEgY29ycmVzcG9uZGluZyBkZWNyZW1lbnQgaW4gYHN0b3BgLCBubyBtYXR0ZXIgd2hhdCB0aGUgbW9uaXRvciYjMzk7cyBzdGF0ZSBpcy4gIFRoaXMgYmFsYW5jZXMgdGhlIGZsYWcgcmVmY291bnRpbmcgYW5kIGtlZXBzIHVzIGZyb20gcnVubmluZyBpbnRvIHBvdGVudGlhbCBpc3N1ZXMuICBOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgcmV2aWV3IGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3NgIGl0c2VsZiB0byBtYWtlIHN1cmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvaWZhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE3MDpcdFx0fVxuMTE3MTpcdH1cbjExNzI6XHRcbjExNzM6XHR2b2lkIGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbjExNzQ6XHRcdFx0XHRcdCAgICBjb25zdCBpbnQgb2Zmc2V0KVxuMTE3NTpcdHtcbjExNzY6XHRcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXHUwMDNlbG9jYWw7XG4xMTc3Olx0XHR1MzIgZmxhZ3MgPSBzZGF0YS1cdTAwM2V1Lm1udHIuZmxhZ3M7XG4xMTc4Olx0XG4xMTc5Olx0I2RlZmluZSBBREpVU1QoX2YsIF9zKVx0ZG8ge1x0XHRcdFx0XHRcXFxuMTE4MDpcdFx0aWYgKGZsYWdzIFx1MDAyNiBNT05JVE9SX0ZMQUdfIyNfZilcdFx0XHRcdFxcXG4xMTgxOlx0XHRcdGxvY2FsLVx1MDAzZWZpZl8jI19zICYjNDM7PSBvZmZzZXQ7XHRcdFx0XFxcbjExODI6XHRcdH0gd2hpbGUgKDApXG4xMTgzOlx0XG4xMTg0Olx0XHRBREpVU1QoRkNTRkFJTCwgZmNzZmFpbCk7XG4xMTg1Olx0XHRBREpVU1QoUExDUEZBSUwsIHBsY3BmYWlsKTtcbjExODY6XHRcdEFESlVTVChDT05UUk9MLCBjb250cm9sKTtcbjExODc6XHRcdEFESlVTVChDT05UUk9MLCBwc3BvbGwpO1xuMTE4ODpcdFx0QURKVVNUKE9USEVSX0JTUywgb3RoZXJfYnNzKTtcbjExODk6XHRcdGlmICghKGZsYWdzIFx1MDAyNiBNT05JVE9SX0ZMQUdfU0tJUF9UWCkpXG4xMTkwOlx0XHRcdGxvY2FsLVx1MDAzZXR4X21udHJzICYjNDM7PSBvZmZzZXQ7XG4xMTkxOlx0XG4xMTkyOlx0I3VuZGVmIEFESlVTVFxuMTE5MzpcdH1cbjExOTQ6XHRcbjExOTU6XHRzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2V0X2RlZmF1bHRfcXVldWVzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuMTE5NjpcdHtcbjExOTc6XHRcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXHUwMDNlbG9jYWw7XG4xMTk4Olx0XHRpbnQgaTtcbjExOTk6XHRcbjEyMDA6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElFRUU4MDIxMV9OVU1fQUNTOyBpJiM0MzsmIzQzOykge1xuMTIwMTpcdFx0XHRpZiAoaWVlZTgwMjExX2h3X2NoZWNrKFx1MDAyNmxvY2FsLVx1MDAzZWh3LCBRVUVVRV9DT05UUk9MKSlcbjEyMDI6XHRcdFx0XHRzZGF0YS1cdTAwM2V2aWYuaHdfcXVldWVbaV0gPSBJRUVFODAyMTFfSU5WQUxfSFdfUVVFVUU7XG4xMjAzOlx0XHRcdGVsc2UgaWYgKGxvY2FsLVx1MDAzZWh3LnF1ZXVlcyBcdTAwM2U9IElFRUU4MDIxMV9OVU1fQUNTKVxuMTIwNDpcdFx0XHRcdHNkYXRhLVx1MDAzZXZpZi5od19xdWV1ZVtpXSA9IGk7XG4xMjA1Olx0XHRcdGVsc2VcbjEyMDY6XHRcdFx0XHRzZGF0YS1cdTAwM2V2aWYuaHdfcXVldWVbaV0gPSAwO1xuMTIwNzpcdFx0fVxuMTIwODpcdFx0c2RhdGEtXHUwMDNldmlmLmNhYl9xdWV1ZSA9IElFRUU4MDIxMV9JTlZBTF9IV19RVUVVRTtcbjEyMDk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3ODYKCQkJCQkJCW91dHB1dDogMjI1CgkJCQkJCQl0aG91Z2h0czogMzUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IFNhZmV0eSBJbXBhY3Qgb2YgYSBDb2RlIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGNoYW5nZSBhbmQgaW1tZWRpYXRlbHkgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbWVtb3J5IHNhZmV0eSBpbXBsaWNhdGlvbnMuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIG1vdmluZyB0aGlzIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKWAgY2FsbCBvdXQgb2YgYSBjb25kaXRpb25hbCBibG9jayBpbiBgaWVlZTgwMjExX2RvX3N0b3AoKWAuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpbiBgaWVlZTgwMjExX2RvX29wZW4oKWAgd2UgKmFsd2F5cyogY2FsbCBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAxKWAgZm9yIG1vbml0b3IgaW50ZXJmYWNlcywgd2hpY2ggaXMgZmluZS4gVGhlIHByZXZpb3VzIHNldHVwIGhhZCBhIGZsYXc6IHdoZW4gc3RvcHBpbmcgYSBtb25pdG9yIGludGVyZmFjZSB0aGF0IHdhcyBhY3RpdmUsIG9yIG9uIGhhcmR3YXJlIHRoYXQgKmRpZG4mIzM5O3QqIHN1cHBvcnQgYSB2aXJ0dWFsIG1vbml0b3IsIHRoaXMgY2FsbCB3YXNuJiMzOTt0IG1hZGUsIG1lYW5pbmcgdGhvc2UgaW50ZXJuYWwgY291bnRlcnMgaW4gYGxvY2FsYCB3ZXJlbiYjMzk7dCBnZXR0aW5nIGRlY3JlbWVudGVkIHByb3Blcmx5LiBUaGF0IG1lYW5zIHRoZSBgbG9jYWxgIHN0cnVjdCwgd2hpY2ggdHJhY2tzIGFsbCB0aGVzZSBzdGF0aXN0aWNzLCB3b3VsZCBiZSBpbmNvbnNpc3RlbnQgYW5kIHBvdGVudGlhbGx5IGxlYWQgdG8gaW5hY2N1cmF0ZSBzdGF0ZSB0cmFja2luZyBpbiB0aGUgZHJpdmVyLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdGllcz8gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246CgoqICAgTm8ga2VybmVsIHRvIHVzZXIgbWVtb3J5IGNvcHkgaGFwcGVuaW5nIGhlcmUuIEdvb2QuCiogICBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIG9yIGJ1ZmZlcnMgaW50cm9kdWNlZC4gVGhhdCYjMzk7cyBhIHJlbGllZi4KKiAgIE5vIHJlYWRpbmcgb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgYnJhbmNoaW5nIG9uIHRoZW0uIENoZWNrLgoqICAgVGhlIGNoYW5nZSBkb2VzbiYjMzk7dCB0b3VjaCBib3VuZHMgY2hlY2tzLCBidWZmZXIgbGVuZ3Rocywgb3IgYW55IGRhdGEgY29weWluZyBsb2dpYy4gRXhjZWxsZW50LgoqICAgQW5kIHRob3NlIGNvdW50ZXJzIHRoYXQgYXJlIGJlaW5nIGFkanVzdGVkPyBUaGV5JiMzOTtyZSBqdXN0IGludGVnZXJzIHdpdGhpbiB0aGUgYGllZWU4MDIxMV9sb2NhbGAgc3RydWN0dXJlLiBTbywgd2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggYW55IHJhdyBwb2ludGVycyBvciBjb21wbGV4IG1lbW9yeSBtYW5pcHVsYXRpb25zLgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IHRoYXQgdGhpcyBjaGFuZ2UgKmRvZXNuJiMzOTt0KiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBTdGFuZGFyZCBmdXp6aW5nLCBLQVNBTiwgYW5kIHJlZ3VsYXIgdGVzdGluZyBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgaXNzdWVzLiBObyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaGVyZS4KCk9rYXksIG5vdyBsZXQmIzM5O3MgZ2V0IHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gYWNjb3VudGluZyBidWcgaW4gbWFjODAyMTEgbW9uaXRvciBpbnRlcmZhY2UgaGFuZGxpbmcgYnkgbW92aW5nIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKWAgb3V0c2lkZSB0aGUgY29uZGl0aW9uYWwgY2hlY2sgaW4gYGllZWU4MDIxMV9kb19zdG9wKClgLCBwcm9wZXJseSBiYWxhbmNpbmcgdGhlIHVuY29uZGl0aW9uYWwgY2FsbCB0byBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAxKWAgaW4gYGllZWU4MDIxMV9kb19vcGVuKClgLiBcblxuVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGludGVybmFsIG1vbml0b3IgZmxhZyBjb3VudGVycyBvbiBgc3RydWN0IGllZWU4MDIxMV9sb2NhbGAgKHN1Y2ggYXMgYGxvY2FsLVx1MDAzZWZpZl9mY3NmYWlsYCwgYGxvY2FsLVx1MDAzZXR4X21udHJzYCwgZXRjLikuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGNvcHkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGhzIG9yIGluaXRpYWxpemF0aW9uIGxvZ2ljLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4sIGFuZCBzdGFuZGFyZCBLQVNBTi90ZXN0aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBhY2NvdW50aW5nIGJ1ZyBpbiBtYWM4MDIxMSBtb25pdG9yIGludGVyZmFjZSBoYW5kbGluZyBieSBtb3ZpbmcgYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpYCBvdXRzaWRlIHRoZSBjb25kaXRpb25hbCBjaGVjayBpbiBgaWVlZTgwMjExX2RvX3N0b3AoKWAsIHByb3Blcmx5IGJhbGFuY2luZyB0aGUgdW5jb25kaXRpb25hbCBjYWxsIHRvIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIDEpYCBpbiBgaWVlZTgwMjExX2RvX29wZW4oKWAuIFxuXG5UaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgaW50ZXJuYWwgbW9uaXRvciBmbGFnIGNvdW50ZXJzIG9uIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYCAoc3VjaCBhcyBgbG9jYWwtXHUwMDNlZmlmX2Zjc2ZhaWxgLCBgbG9jYWwtXHUwMDNldHhfbW50cnNgLCBldGMuKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiwgYW5kIHN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTU6NDEuNDQ3MzUwOTM2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzOTA3NzY5OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImllZWU4MDIxMV9kb19zdG9wXCIsXG4gICAgXCJpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3NcIixcbiAgICBcImllZWU4MDIxMV9zdG9wXCIsXG4gICAgXCJpZWVlODAyMTFfcnVudGltZV9jaGFuZ2VfaWZ0eXBlXCIsXG4gICAgXCJpZWVlODAyMTFfc2V0X21vbl9vcHRpb25zXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBhY2NvdW50aW5nIGJ1ZyBpbiBtYWM4MDIxMSBtb25pdG9yIGludGVyZmFjZSBoYW5kbGluZyBieSBtb3ZpbmcgYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpYCBvdXRzaWRlIHRoZSBjb25kaXRpb25hbCBjaGVjayBpbiBgaWVlZTgwMjExX2RvX3N0b3AoKWAsIHByb3Blcmx5IGJhbGFuY2luZyB0aGUgdW5jb25kaXRpb25hbCBjYWxsIHRvIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIDEpYCBpbiBgaWVlZTgwMjExX2RvX29wZW4oKWAuIFxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBpbnRlcm5hbCBtb25pdG9yIGZsYWcgY291bnRlcnMgb24gYHN0cnVjdCBpZWVlODAyMTFfbG9jYWxgIChzdWNoIGFzIGBsb2NhbC1cXHUwMDNlZmlmX2Zjc2ZhaWxgLCBgbG9jYWwtXFx1MDAzZXR4X21udHJzYCwgZXRjLikuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGNvcHkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGhzIG9yIGluaXRpYWxpemF0aW9uIGxvZ2ljLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4sIGFuZCBzdGFuZGFyZCBLQVNBTi90ZXN0aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbW9uaXRvciBpbnRlcmZhY2UgdGVhcmRvd24gaGFuZGxpbmcgaW4gbmV0L21hYzgwMjExL2lmYWNlLmMgKGllZWU4MDIxMV9kb19zdG9wKSBieSBlbnN1cmluZyB0aGF0IGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncygpIGlzIGFsd2F5cyBpbnZva2VkIHRvIGRlY3JlbWVudCBtb25pdG9yIGZsYWdzIHdoZW4gc3RvcHBpbmcgYSBtb25pdG9yIGludGVyZmFjZSwgcmVnYXJkbGVzcyBvZiB0aGUgdmlydHVhbCBtb25pdG9yIHN0YXR1cy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWFjODAyMTFfaHdzaW0gYW5kIG5sODAyMTEvcnRuZXRsaW5rIGludGVyZmFjZSBjb250cm9sIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU1OjQxLjQ0NzM1Njk5NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg5NTQzMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWQ4ODdiOWEwMGY5NzQ3NTBhMjE1ODBiYmU5NjlhZTYxNmM3MjNkZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDA3OjU1OjQwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcXG5pbmRleCA0MzQ2MGE3MDVhNmJkLi45YjQwMGNhZjI3NjUyIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jXFxuKysrIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcXG5AQCAtNjMwLDggKzYzMCw5IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9kb19zdG9wKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBib29sIGdvaW5nX2RvXFxuIFxcdFxcdFxcdFxcdGh3X3JlY29uZl9mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9DSEFOR0VfTU9OSVRPUjtcXG4gXFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSk7XFxuIFxcdFxcdH1cXG4rXFxuK1xcdFxcdGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU46XFxuIFxcdFxcdC8qIENoZWNrIGlmIGFueSBvcGVuIE5BTl9EQVRBIGludGVyZmFjZXMgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTU6NDIuMDM3NjA5MDA2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjE1NDI1MjEyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWVlZTgwMjExX2RvX3N0b3BcIixcbiAgICBcImllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFnc1wiLFxuICAgIFwiaWVlZTgwMjExX3N0b3BcIixcbiAgICBcImllZWU4MDIxMV9ydW50aW1lX2NoYW5nZV9pZnR5cGVcIixcbiAgICBcImllZWU4MDIxMV9zZXRfbW9uX29wdGlvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtb25pdG9yIGludGVyZmFjZSB0ZWFyZG93biBoYW5kbGluZyBpbiBuZXQvbWFjODAyMTEvaWZhY2UuYyAoaWVlZTgwMjExX2RvX3N0b3ApIGJ5IGVuc3VyaW5nIHRoYXQgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKCkgaXMgYWx3YXlzIGludm9rZWQgdG8gZGVjcmVtZW50IG1vbml0b3IgZmxhZ3Mgd2hlbiBzdG9wcGluZyBhIG1vbml0b3IgaW50ZXJmYWNlLCByZWdhcmRsZXNzIG9mIHRoZSB2aXJ0dWFsIG1vbml0b3Igc3RhdHVzLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBtYWM4MDIxMV9od3NpbSBhbmQgbmw4MDIxMS9ydG5ldGxpbmsgaW50ZXJmYWNlIGNvbnRyb2wgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5ZDg4N2I5YTAwZjk3NDc1MGEyMTU4MGJiZTk2OWFlNjE2YzcyM2RmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwNzo1NTo0MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbmluZGV4IDQzNDYwYTcwNWE2YmQuLjliNDAwY2FmMjc2NTIgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuY1xuKysrIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbkBAIC02MzAsOCArNjMwLDkgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2RvX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGJvb2wgZ29pbmdfZG9cbiBcdFx0XHRcdGh3X3JlY29uZl9mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9DSEFOR0VfTU9OSVRPUjtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSk7XG4gXHRcdH1cbitcbitcdFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU46XG4gXHRcdC8qIENoZWNrIGlmIGFueSBvcGVuIE5BTl9EQVRBIGludGVyZmFjZXMgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU1OjQyLjAzNzYxMDE2NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzNDk3MTUxMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIE1BQzgwMjExIEludGVyZmFjZSBDb2RlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoLCB3aGljaCBmcm9tIHRoZSBjb250ZXh0IGNsdWVzLCBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIHRoZSBuZXR3b3JrIGludGVyZmFjZSB3aXRoaW4gdGhlIE1BQzgwMjExIHN1YnN5c3RlbS4gVGhlIGZpbGUgb2YgaW50ZXJlc3QgaXMgYG5ldC9tYWM4MDIxMS9pZmFjZS5jYC4gSSBoYXZlIGEgZ29vZCBoYW5kbGUgb24gdGhhdCBhcmVhLCBzbyBteSBmaXJzdCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIHRoYXQgZmlsZSBhbmQgZ2V0IGEgZmVlbCBmb3IgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIE15IGd1dCB0ZWxscyBtZSB0aGlzIHdpbGwgYmUgYXQsIG9yIGFyb3VuZCwgbGluZSA2MzAuIEl0J3MgdGltZSB0byB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQgaW4gdGhhdCBwYXJ0aWN1bGFyIHNwb3Qgb2YgYGlmYWNlLmNgLiBUaGlzIGNvbnRleHQgaXMgY3J1Y2lhbCwgYmVmb3JlIEkgZXZlbiBzdGFydCB0byB0cnVseSBhbmFseXplIHRoZSBpbXBhY3Qgb2YgdGhlIGNoYW5nZXMuIFRoaXMgc2hvdWxkIHByb3ZpZGUgbWUgd2l0aCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgZ2l2ZSBtZSBhIGZlZWwgZm9yIHRoZSBzcGVjaWZpYyBwaWVjZS4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gZm9ybSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU1OjQ2LjM4NzMyOTMyMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvaWZhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MTAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MTA6XFx0XFx0aWYgKGdvaW5nX2Rvd24pXFxuIDYxMTpcXHRcXHRcXHRsb2NhbC1cXHUwMDNlb3Blbl9jb3VudC0tO1xcbiA2MTI6XFx0XFxuIDYxMzpcXHRcXHRzd2l0Y2ggKHNkYXRhLVxcdTAwM2V2aWYudHlwZSkge1xcbiA2MTQ6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOlxcbiA2MTU6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnNkYXRhLVxcdTAwM2V1LnZsYW4ubGlzdCk7XFxuIDYxNjpcXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKHNkYXRhLVxcdTAwM2V2aWYuYnNzX2NvbmYuY2hhbmN0eF9jb25mLCBOVUxMKTtcXG4gNjE3OlxcdFxcdFxcdC8qIHNlZSBjb21tZW50IGluIHRoZSBkZWZhdWx0IGNhc2UgYmVsb3cgKi9cXG4gNjE4OlxcdFxcdFxcdGllZWU4MDIxMV9mcmVlX2tleXMoc2RhdGEsIHRydWUpO1xcbiA2MTk6XFx0XFx0XFx0Lyogbm8gbmVlZCB0byB0ZWxsIGRyaXZlciAqL1xcbiA2MjA6XFx0XFx0XFx0YnJlYWs7XFxuIDYyMTpcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6XFxuIDYyMjpcXHRcXHRcXHRsb2NhbC1cXHUwMDNlbW9uaXRvcnMtLTtcXG4gNjIzOlxcdFxcbiA2MjQ6XFx0XFx0XFx0aWYgKCEoc2RhdGEtXFx1MDAzZXUubW50ci5mbGFncyBcXHUwMDI2IE1PTklUT1JfRkxBR19BQ1RJVkUpIFxcdTAwMjZcXHUwMDI2XFxuIDYyNTpcXHRcXHRcXHQgICAgIWllZWU4MDIxMV9od19jaGVjayhcXHUwMDI2bG9jYWwtXFx1MDAzZWh3LCBOT19WSVJUVUFMX01PTklUT1IpKSB7XFxuIDYyNjpcXHRcXG4gNjI3OlxcdFxcdFxcdFxcdGxvY2FsLVxcdTAwM2V2aXJ0X21vbml0b3JzLS07XFxuIDYyODpcXHRcXHRcXHRcXHRpZiAobG9jYWwtXFx1MDAzZXZpcnRfbW9uaXRvcnMgPT0gMCkge1xcbiA2Mjk6XFx0XFx0XFx0XFx0XFx0bG9jYWwtXFx1MDAzZWh3LmNvbmYuZmxhZ3MgXFx1MDAyNj0gfklFRUU4MDIxMV9DT05GX01PTklUT1I7XFxuIDYzMDpcXHRcXHRcXHRcXHRcXHRod19yZWNvbmZfZmxhZ3MgfD0gSUVFRTgwMjExX0NPTkZfQ0hBTkdFX01PTklUT1I7XFxuIDYzMTpcXHRcXHRcXHRcXHR9XFxuIDYzMjpcXHRcXG4gNjMzOlxcdFxcdFxcdH1cXG4gNjM0OlxcdFxcbiA2MzU6XFx0XFx0XFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSk7XFxuIDYzNjpcXHRcXHRcXHRicmVhaztcXG4gNjM3OlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTkFOOlxcbiA2Mzg6XFx0XFx0XFx0LyogQ2hlY2sgaWYgYW55IG9wZW4gTkFOX0RBVEEgaW50ZXJmYWNlcyAqL1xcbiA2Mzk6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcXG4gNjQwOlxcdFxcdFxcdFxcdFdBUk5fT04oaXRlci1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEEgXFx1MDAyNlxcdTAwMjZcXG4gNjQxOlxcdFxcdFxcdFxcdFxcdGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKGl0ZXIpKTtcXG4gNjQyOlxcdFxcdFxcdH1cXG4gNjQzOlxcdFxcbiA2NDQ6XFx0XFx0XFx0LyogY2xlYW4gYWxsIHRoZSBmdW5jdGlvbnMgKi9cXG4gNjQ1OlxcdFxcdFxcdGlmICghKGxvY2FsLVxcdTAwM2Vody53aXBoeS1cXHUwMDNlbmFuX2NhcGEuZmxhZ3MgXFx1MDAyNlxcbiA2NDY6XFx0XFx0XFx0ICAgICAgV0lQSFlfTkFOX0ZMQUdTX1VTRVJTUEFDRV9ERSkpIHtcXG4gNjQ3OlxcdFxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2c2RhdGEtXFx1MDAzZXUubmFuLmRlLmZ1bmNfbG9jayk7XFxuIDY0ODpcXHRcXG4gNjQ5OlxcdFxcdFxcdFxcdGlkcl9mb3JfZWFjaF9lbnRyeShcXHUwMDI2c2RhdGEtXFx1MDAzZXUubmFuLmRlLmZ1bmN0aW9uX2luc3RfaWRzLFxcbiA2NTA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgZnVuYywgaSkge1xcbiA2NTE6XFx0XFx0XFx0XFx0XFx0aWRyX3JlbW92ZShcXHUwMDI2c2RhdGEtXFx1MDAzZXUubmFuLmRlLmZ1bmN0aW9uX2luc3RfaWRzLCBpKTtcXG4gNjUyOlxcdFxcdFxcdFxcdFxcdGNmZzgwMjExX2ZyZWVfbmFuX2Z1bmMoZnVuYyk7XFxuIDY1MzpcXHRcXHRcXHRcXHR9XFxuIDY1NDpcXHRcXHRcXHRcXHRpZHJfZGVzdHJveShcXHUwMDI2c2RhdGEtXFx1MDAzZXUubmFuLmRlLmZ1bmN0aW9uX2luc3RfaWRzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTU6NDYuMzg3NTAyOTQyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM0MzczOTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3NgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBvZiBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2Ugd2hlcmUgaXQncyBjYWxsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgaW50ZXJmYWNlIG9wZXJhdGlvbnMuIFNpbmNlIGl0IHNvdW5kcyBsaWtlIHRoaXMgZnVuY3Rpb24gaXMgcmVsYXRlZCB0byBtb25pdG9yaW5nIG1vZGUsIEknbGwgZm9jdXMgb24gYGllZWU4MDIxMV9kb19vcGVuYCwgYGllZWU4MDIxMV9kb19zdG9wYCwgYW5kIG90aGVyIHBsYWNlcyB3aGVyZSBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBoYXBwZW5zLiBUaG9zZSBmdW5jdGlvbnMgYXJlIHRoZSBtb3N0IGxpa2VseSBjYW5kaWRhdGVzLiBJJ20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBmb3IgYG5ldC9tYWM4MDIxMS9pZmFjZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyA1MDAgdG8gNjEwLiBUaGF0IGJsb2NrIHNob3VsZCBjb250YWluIHRoZSBjb3JlIGxvZ2ljIGZvciBpbnRlcmZhY2UgbWFuYWdlbWVudCwgc28gaXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaWRlbnRpZnkgYW55IGNhbGxzIHRvIHRoYXQgZnVuY3Rpb24gYW5kIHdoYXQgcGFyYW1ldGVycyBpdCdzIGxpa2VseSBiZWluZyBwYXNzZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSBmbGFncyBhcmUgYmVpbmcgYWRqdXN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNzYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU1OjQ4LjczMTI0NDA3MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvaWZhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAwOlxcdFxcdFxcdGllZWU4MDIxMV9zY2FuX2NhbmNlbChsb2NhbCk7XFxuIDUwMTpcXHRcXG4gNTAyOlxcdFxcdGllZWU4MDIxMV9yb2NfcHVyZ2UobG9jYWwsIHNkYXRhKTtcXG4gNTAzOlxcdFxcbiA1MDQ6XFx0XFx0c3dpdGNoIChzZGF0YS1cXHUwMDNldmlmLnR5cGUpIHtcXG4gNTA1OlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjpcXG4gNTA2OlxcdFxcdFxcdGllZWU4MDIxMV9tZ2Rfc3RvcChzZGF0YSk7XFxuIDUwNzpcXHRcXHRcXHRicmVhaztcXG4gNTA4OlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6XFxuIDUwOTpcXHRcXHRcXHRpZWVlODAyMTFfaWJzc19zdG9wKHNkYXRhKTtcXG4gNTEwOlxcdFxcdFxcdGJyZWFrO1xcbiA1MTE6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOlxcbiA1MTI6XFx0XFx0XFx0bGlzdF9kZWxfcmN1KFxcdTAwMjZzZGF0YS1cXHUwMDNldS5tbnRyLmxpc3QpO1xcbiA1MTM6XFx0XFx0XFx0YnJlYWs7XFxuIDUxNDpcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQX1ZMQU46XFxuIDUxNTpcXHRcXHRcXHRpZWVlODAyMTFfYXB2bGFuX2xpbmtfY2xlYXIoc2RhdGEpO1xcbiA1MTY6XFx0XFx0XFx0YnJlYWs7XFxuIDUxNzpcXHRcXHRkZWZhdWx0OlxcbiA1MTg6XFx0XFx0XFx0YnJlYWs7XFxuIDUxOTpcXHRcXHR9XFxuIDUyMDpcXHRcXG4gNTIxOlxcdFxcdC8qXFxuIDUyMjpcXHRcXHQgKiBSZW1vdmUgYWxsIHN0YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGludGVyZmFjZS5cXG4gNTIzOlxcdFxcdCAqXFxuIDUyNDpcXHRcXHQgKiBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgY2FsbGluZyBvcHMtXFx1MDAzZXJlbW92ZV9pbnRlcmZhY2UoKVxcbiA1MjU6XFx0XFx0ICogYmVjYXVzZSBvdGhlcndpc2Ugd2UgY2FuIGxhdGVyIGludm9rZSBvcHMtXFx1MDAzZXN0YV9ub3RpZnkoKVxcbiA1MjY6XFx0XFx0ICogd2hlbmV2ZXIgdGhlIFNUQXMgYXJlIHJlbW92ZWQsIGFuZCB0aGF0IGludmFsaWRhdGVzIGRyaXZlclxcbiA1Mjc6XFx0XFx0ICogYXNzdW1wdGlvbnMgYWJvdXQgYWx3YXlzIGdldHRpbmcgYSB2aWYgcG9pbnRlciB0aGF0IGlzIHZhbGlkXFxuIDUyODpcXHRcXHQgKiAoYmVjYXVzZSBpZiB3ZSByZW1vdmUgYSBTVEEgYWZ0ZXIgb3BzLVxcdTAwM2VyZW1vdmVfaW50ZXJmYWNlKClcXG4gNTI5OlxcdFxcdCAqIHRoZSBkcml2ZXIgd2lsbCBoYXZlIHJlbW92ZWQgdGhlIHZpZiBpbmZvIGFscmVhZHkhKVxcbiA1MzA6XFx0XFx0ICpcXG4gNTMxOlxcdFxcdCAqIEZvciBBUF9WTEFOcywgTkFOIGFuZCBOQU5fREFUQSBzdGF0aW9ucyBtYXkgZXhpc3Qgc2luY2UgdGhlcmUnc1xcbiA1MzI6XFx0XFx0ICogbm90aGluZyBlbHNlIHRoYXQgd291bGQgaGF2ZSByZW1vdmVkIHRoZW0sIGJ1dCBpbiBvdGhlciBtb2RlcyB0aGVyZVxcbiA1MzM6XFx0XFx0ICogc2hvdWxkbid0IGJlIGFueSBzdGF0aW9ucy5cXG4gNTM0OlxcdFxcdCAqL1xcbiA1MzU6XFx0XFx0Zmx1c2hlZCA9IHN0YV9pbmZvX2ZsdXNoKHNkYXRhLCAtMSk7XFxuIDUzNjpcXHRcXHRXQVJOX09OX09OQ0Uoc2RhdGEtXFx1MDAzZXZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4gXFx1MDAyNlxcdTAwMjZcXG4gNTM3OlxcdFxcdFxcdCAgICAgc2RhdGEtXFx1MDAzZXZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTiBcXHUwMDI2XFx1MDAyNlxcbiA1Mzg6XFx0XFx0XFx0ICAgICBzZGF0YS1cXHUwMDNldmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEEgXFx1MDAyNlxcdTAwMjYgZmx1c2hlZCBcXHUwMDNlIDApO1xcbiA1Mzk6XFx0XFxuIDU0MDpcXHRcXHQvKiBkb24ndCBjb3VudCB0aGlzIGludGVyZmFjZSBmb3IgYWxsbXVsdGkgd2hpbGUgaXQgaXMgZG93biAqL1xcbiA1NDE6XFx0XFx0aWYgKHNkYXRhLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9TREFUQV9BTExNVUxUSSlcXG4gNTQyOlxcdFxcdFxcdGF0b21pY19kZWMoXFx1MDAyNmxvY2FsLVxcdTAwM2VpZmZfYWxsbXVsdGlzKTtcXG4gNTQzOlxcdFxcbiA1NDQ6XFx0XFx0aWYgKHNkYXRhLVxcdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkge1xcbiA1NDU6XFx0XFx0XFx0bG9jYWwtXFx1MDAzZWZpZl9wc3BvbGwtLTtcXG4gNTQ2OlxcdFxcdFxcdGxvY2FsLVxcdTAwM2VmaWZfcHJvYmVfcmVxLS07XFxuIDU0NzpcXHRcXHR9IGVsc2UgaWYgKHNkYXRhLVxcdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykge1xcbiA1NDg6XFx0XFx0XFx0bG9jYWwtXFx1MDAzZWZpZl9wcm9iZV9yZXEtLTtcXG4gNTQ5OlxcdFxcdH1cXG4gNTUwOlxcdFxcbiA1NTE6XFx0XFx0aWYgKHNkYXRhLVxcdTAwM2VkZXYpIHtcXG4gNTUyOlxcdFxcdFxcdG5ldGlmX2FkZHJfbG9ja19iaChzZGF0YS1cXHUwMDNlZGV2KTtcXG4gNTUzOlxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bG9jYWwtXFx1MDAzZWZpbHRlcl9sb2NrKTtcXG4gNTU0OlxcdFxcdFxcdF9faHdfYWRkcl91bnN5bmMoXFx1MDAyNmxvY2FsLVxcdTAwM2VtY19saXN0LCBcXHUwMDI2c2RhdGEtXFx1MDAzZWRldi1cXHUwMDNlbWMsXFxuIDU1NTpcXHRcXHRcXHRcXHRcXHQgc2RhdGEtXFx1MDAzZWRldi1cXHUwMDNlYWRkcl9sZW4pO1xcbiA1NTY6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmxvY2FsLVxcdTAwM2VmaWx0ZXJfbG9jayk7XFxuIDU1NzpcXHRcXHRcXHRuZXRpZl9hZGRyX3VubG9ja19iaChzZGF0YS1cXHUwMDNlZGV2KTtcXG4gNTU4OlxcdFxcdH1cXG4gNTU5OlxcdFxcbiA1NjA6XFx0XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNmxvY2FsLVxcdTAwM2VkeW5hbWljX3BzX3RpbWVyKTtcXG4gNTYxOlxcdFxcdHdpcGh5X3dvcmtfY2FuY2VsKGxvY2FsLVxcdTAwM2Vody53aXBoeSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VkeW5hbWljX3BzX2VuYWJsZV93b3JrKTtcXG4gNTYyOlxcdFxcbiA1NjM6XFx0XFx0V0FSTihpZWVlODAyMTFfdmlmX2lzX21sZChcXHUwMDI2c2RhdGEtXFx1MDAzZXZpZiksXFxuIDU2NDpcXHRcXHQgICAgIFxcXCJkZXN0cm95aW5nIGludGVyZmFjZSB3aXRoIHZhbGlkIGxpbmtzIDB4JTA0eFxcXFxuXFxcIixcXG4gNTY1OlxcdFxcdCAgICAgc2RhdGEtXFx1MDAzZXZpZi52YWxpZF9saW5rcyk7XFxuIDU2NjpcXHRcXG4gNTY3OlxcdFxcdHNkYXRhLVxcdTAwM2V2aWYuYnNzX2NvbmYuY3NhX2FjdGl2ZSA9IGZhbHNlO1xcbiA1Njg6XFx0XFx0aWYgKHNkYXRhLVxcdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKVxcbiA1Njk6XFx0XFx0XFx0c2RhdGEtXFx1MDAzZWRlZmxpbmsudS5tZ2QuY3NhLndhaXRpbmdfYmNuID0gZmFsc2U7XFxuIDU3MDpcXHRcXHRpZWVlODAyMTFfdmlmX3VuYmxvY2tfcXVldWVzX2NzYShzZGF0YSk7XFxuIDU3MTpcXHRcXG4gNTcyOlxcdFxcdHdpcGh5X3dvcmtfY2FuY2VsKGxvY2FsLVxcdTAwM2Vody53aXBoeSwgXFx1MDAyNnNkYXRhLVxcdTAwM2VkZWZsaW5rLmNzYS5maW5hbGl6ZV93b3JrKTtcXG4gNTczOlxcdFxcdHdpcGh5X3dvcmtfY2FuY2VsKGxvY2FsLVxcdTAwM2Vody53aXBoeSxcXG4gNTc0OlxcdFxcdFxcdFxcdCAgXFx1MDAyNnNkYXRhLVxcdTAwM2VkZWZsaW5rLmNvbG9yX2NoYW5nZV9maW5hbGl6ZV93b3JrKTtcXG4gNTc1OlxcdFxcdHdpcGh5X2hydGltZXJfd29ya19jYW5jZWwobG9jYWwtXFx1MDAzZWh3LndpcGh5LFxcbiA1NzY6XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2c2RhdGEtXFx1MDAzZWRlZmxpbmsuZGZzX2NhY190aW1lcl93b3JrKTtcXG4gNTc3OlxcdFxcbiA1Nzg6XFx0XFx0aWYgKHNkYXRhLVxcdTAwM2V3ZGV2LmxpbmtzWzBdLmNhY19zdGFydGVkKSB7XFxuIDU3OTpcXHRcXHRcXHRjaGFuZGVmID0gc2RhdGEtXFx1MDAzZXZpZi5ic3NfY29uZi5jaGFucmVxLm9wZXI7XFxuIDU4MDpcXHRcXHRcXHRXQVJOX09OKGxvY2FsLVxcdTAwM2VzdXNwZW5kZWQpO1xcbiA1ODE6XFx0XFx0XFx0aWVlZTgwMjExX2xpbmtfcmVsZWFzZV9jaGFubmVsKFxcdTAwMjZzZGF0YS1cXHUwMDNlZGVmbGluayk7XFxuIDU4MjpcXHRcXHRcXHRjZmc4MDIxMV9jYWNfZXZlbnQoc2RhdGEtXFx1MDAzZWRldiwgXFx1MDAyNmNoYW5kZWYsXFxuIDU4MzpcXHRcXHRcXHRcXHRcXHQgICBOTDgwMjExX1JBREFSX0NBQ19BQk9SVEVELFxcbiA1ODQ6XFx0XFx0XFx0XFx0XFx0ICAgR0ZQX0tFUk5FTCwgMCk7XFxuIDU4NTpcXHRcXHR9XFxuIDU4NjpcXHRcXG4gNTg3OlxcdFxcdGlmIChzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHtcXG4gNTg4OlxcdFxcdFxcdFdBUk5fT04oIWxpc3RfZW1wdHkoXFx1MDAyNnNkYXRhLVxcdTAwM2V1LmFwLnZsYW5zKSk7XFxuIDU4OTpcXHRcXHR9IGVsc2UgaWYgKHNkYXRhLVxcdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKSB7XFxuIDU5MDpcXHRcXHRcXHQvKiByZW1vdmUgYWxsIHBhY2tldHMgaW4gcGFyZW50IGJjX2J1ZiBwb2ludGluZyB0byB0aGlzIGRldiAqL1xcbiA1OTE6XFx0XFx0XFx0X19za2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZmcmVlcSk7XFxuIDU5MjpcXHRcXHRcXHRwcyA9IFxcdTAwMjZzZGF0YS1cXHUwMDNlYnNzLVxcdTAwM2VwcztcXG4gNTkzOlxcdFxcbiA1OTQ6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnBzLVxcdTAwM2ViY19idWYubG9jaywgZmxhZ3MpO1xcbiA1OTU6XFx0XFx0XFx0c2tiX3F1ZXVlX3dhbGtfc2FmZShcXHUwMDI2cHMtXFx1MDAzZWJjX2J1Ziwgc2tiLCB0bXApIHtcXG4gNTk2OlxcdFxcdFxcdFxcdGlmIChza2ItXFx1MDAzZWRldiA9PSBzZGF0YS1cXHUwMDNlZGV2KSB7XFxuIDU5NzpcXHRcXHRcXHRcXHRcXHRfX3NrYl91bmxpbmsoc2tiLCBcXHUwMDI2cHMtXFx1MDAzZWJjX2J1Zik7XFxuIDU5ODpcXHRcXHRcXHRcXHRcXHRsb2NhbC1cXHUwMDNldG90YWxfcHNfYnVmZmVyZWQtLTtcXG4gNTk5OlxcdFxcdFxcdFxcdFxcdF9fc2tiX3F1ZXVlX3RhaWwoXFx1MDAyNmZyZWVxLCBza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo1NTo0OC43MzEzNzMyODJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTI1NjI5MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgbWFjODAyMTEgTW9uaXRvciBNb2RlIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgaWVlZTgwMjExX2RvX3N0b3AoKWAsIEkgc2VlIHRoYXQgdGhlIGNhbGwgdG8gYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpYCBoYXMgYmVlbiBtb3ZlZCBvdXRzaWRlIG9mIHRoYXQgY29uZGl0aW9uYWwgYmxvY2suIFRoYXQncyBhIGtleSBjaGFuZ2UsIGFuZCBpdCBoYXMgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zLiBCZWZvcmUsIHRoaXMgZGVjcmVtZW50IGluIG1vbml0b3IgZmxhZ3Mgd2FzIG9ubHkgaGFwcGVuaW5nIGlmIHRoZSBtb25pdG9yIGludGVyZmFjZSB3YXNuJ3QgYWN0aXZlbHkgdXNlZCBhbmQgdGhlcmUgd2VyZSBubyB2aXJ0dWFsIG1vbml0b3JzIHJlbWFpbmluZy4gTm93LCBpdCBoYXBwZW5zIHVuY29uZGl0aW9uYWxseS5cblxuU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBkb25lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFsd2F5cyBkZWNyZW1lbnRpbmcgdGhlIG1vbml0b3IgZmxhZ3MsIHJlZ2FyZGxlc3Mgb2YgdGhlIGFjdGl2ZSBzdGF0ZSBvciB0aGUgdmlydHVhbCBtb25pdG9yIGNvdW50LiBUbyBnZXQgYSBoYW5kbGUgb24gdGhpcywgSSBuZWVkIHRvIHNlZSBob3cgdGhlIGZsYWdzIGFyZSAqYWRqdXN0ZWQqIG9uIHRoZSBvcGVuL3N0YXJ0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgdGhhdCBvcGVucyBvciBzdGFydHMgYW4gaW50ZXJmYWNlLCBzbyBJJ20gZ29pbmcgdG8gbG9vayBhdCBgaWVlZTgwMjExX2RvX29wZW5gIGluIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AuIFNlZWluZyBob3cgdGhlIGZsYWdzIGFyZSB1c2VkIGluIHRoZSBvcGVuL3N0YXJ0IG9wZXJhdGlvbiB3aWxsIGhvcGVmdWxseSBzaGVkIGxpZ2h0IG9uIHdoYXQgdGhpcyB1bmNvbmRpdGlvbmFsIGRlY3JlbWVudCBpcyBkZXNpZ25lZCB0byBhY2hpZXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzI2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTU6NTIuMjU3MDA1MDEyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MzE5MjQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZGp1c3RfbW9uaXRvcl9mbGFnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL2NmZy5jPTk2PXN0YXRpYyBpbnQgaWVlZTgwMjExX3NldF9tb25fb3B0aW9ucyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy0xNDItXFx0XFx0aWYgKGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkge1xcbm5ldC9tYWM4MDIxMS9jZmcuYzoxNDM6XFx0XFx0XFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSk7XFxubmV0L21hYzgwMjExL2NmZy5jLTE0NC1cXHRcXHRcXHRzZGF0YS1cXHUwMDNldS5tbnRyLmZsYWdzID0gcGFyYW1zLVxcdTAwM2VmbGFncztcXG5uZXQvbWFjODAyMTEvY2ZnLmM6MTQ1OlxcdFxcdFxcdGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgMSk7XFxubmV0L21hYzgwMjExL2NmZy5jLTE0Ni1cXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTIyMDI9dm9pZCBpZWVlODAyMTFfcmVjYWxjX2lkbGUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpO1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjIyMDM6dm9pZCBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjIwNC1cXHRcXHRcXHRcXHQgICAgY29uc3QgaW50IG9mZnNldCk7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz00Nzk9c3RhdGljIHZvaWQgaWVlZTgwMjExX2RvX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGJvb2wgZ29pbmdfZG93bilcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTYzNC1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo2MzU6XFx0XFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSk7XFxubmV0L21hYzgwMjExL2lmYWNlLmMtNjM2LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmM9MTE1Nj12b2lkIGllZWU4MDIxMV9yZWNhbGNfb2ZmbG9hZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTExNzItXFxubmV0L21hYzgwMjExL2lmYWNlLmM6MTE3Mzp2b2lkIGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMTc0LVxcdFxcdFxcdFxcdCAgICBjb25zdCBpbnQgb2Zmc2V0KVxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmM9MTM2Nj1pbnQgaWVlZTgwMjExX2RvX29wZW4oc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgYm9vbCBjb21pbmdfdXApXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xNTA2LVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjE1MDc6XFx0XFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAxKTtcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xNTA4LVxcdFxcdGllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTU6NTIuNjIwMjAxNTk2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1MDU2OTg2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1BQzgwMjExIEludGVyZmFjZSBPcGVuaW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyZmFjZSBvcGVuaW5nIHByb2NlZHVyZSB3aXRoaW4gdGhlIG1hYzgwMjExIGZyYW1ld29yay4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiBob3cgaXQncyBoYW5kbGVkLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8ganVtcCBpbnRvIHRoZSBgaWVlZTgwMjExX2RvX29wZW5gIGZ1bmN0aW9uLCB3aGljaCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIGVudHJ5IHBvaW50IGZvciB0aGlzIHByb2Nlc3MuIEknbSBnb2luZyB0byBoZWFkIG92ZXIgdG8gdGhlIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AgZmlsZSBhbmQgemVybyBpbiBvbiB0aGUgdmljaW5pdHkgb2YgbGluZSAxNTAwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgY2FsbCBmbG93IGFuZCBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2Qgd2hlbiBhIHdpcmVsZXNzIGludGVyZmFjZSBpcyBicm91Z2h0IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Nzc3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTU6NTQuODcwNzc2NTA4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvaWZhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDk1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDk1OlxcdFxcbjE0OTY6XFx0XFx0XFx0XFx0bG9jYWwtXFx1MDAzZXZpcnRfbW9uaXRvcnMrKztcXG4xNDk3OlxcdFxcbjE0OTg6XFx0XFx0XFx0XFx0LyogbXVzdCBiZSBiZWZvcmUgdGhlIGNhbGwgdG8gaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIgKi9cXG4xNDk5OlxcdFxcdFxcdFxcdGlmIChsb2NhbC1cXHUwMDNldmlydF9tb25pdG9ycyA9PSAxKSB7XFxuMTUwMDpcXHRcXHRcXHRcXHRcXHRsb2NhbC1cXHUwMDNlaHcuY29uZi5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9NT05JVE9SO1xcbjE1MDE6XFx0XFx0XFx0XFx0XFx0aHdfcmVjb25mX2ZsYWdzIHw9IElFRUU4MDIxMV9DT05GX0NIQU5HRV9NT05JVE9SO1xcbjE1MDI6XFx0XFx0XFx0XFx0fVxcbjE1MDM6XFx0XFx0XFx0fVxcbjE1MDQ6XFx0XFxuMTUwNTpcXHRcXHRcXHRsb2NhbC1cXHUwMDNlbW9uaXRvcnMrKztcXG4xNTA2OlxcdFxcbjE1MDc6XFx0XFx0XFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAxKTtcXG4xNTA4OlxcdFxcdFxcdGllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTtcXG4xNTA5OlxcdFxcdFxcdGllZWU4MDIxMV9yZWNhbGNfb2ZmbG9hZChsb2NhbCk7XFxuMTUxMDpcXHRcXHRcXHRpZWVlODAyMTFfcmVjYWxjX2lkbGUobG9jYWwpO1xcbjE1MTE6XFx0XFxuMTUxMjpcXHRcXHRcXHRuZXRpZl9jYXJyaWVyX29uKGRldik7XFxuMTUxMzpcXHRcXHRcXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2c2RhdGEtXFx1MDAzZXUubW50ci5saXN0LCBcXHUwMDI2bG9jYWwtXFx1MDAzZW1vbl9saXN0KTtcXG4xNTE0OlxcdFxcdFxcdGJyZWFrO1xcbjE1MTU6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUDpcXG4xNTE2OlxcdFxcdFxcdHNkYXRhLVxcdTAwM2Vic3MgPSBcXHUwMDI2c2RhdGEtXFx1MDAzZXUuYXA7XFxuMTUxNzpcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4xNTE4OlxcdFxcdGRlZmF1bHQ6XFxuMTUxOTpcXHRcXHRcXHRpZiAoY29taW5nX3VwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU1OjU0Ljg3MDk2MjcwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjIyMDk0NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBtYWM4MDIxMSBCdWcgRml4IGFuZCBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBhIHNwZWNpZmljIGJ1ZyBmaXggcmVsYXRlZCB0byBob3cgbW9uaXRvciBmbGFncyBhcmUgbWFuYWdlZCBpbiBgbWFjODAyMTFgLiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGF0IGBpZWVlODAyMTFfZG9fb3BlbmAgYW5kIGBpZWVlODAyMTFfZG9fc3RvcGAuIFRoZSBpc3N1ZSBzdGVtcyBmcm9tIHRoZSBmYWN0IHRoYXQgYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgMSlgIHdhcyBiZWluZyBjYWxsZWQgdW5jb25kaXRpb25hbGx5IGluIGBpZWVlODAyMTFfZG9fb3BlbmAgZm9yIGFsbCBtb25pdG9ycy4gSG93ZXZlciwgdGhlIGRlY3JlbWVudGluZyBjb3VudGVycGFydCwgYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpYCwgaW4gYGllZWU4MDIxMV9kb19zdG9wYCB3YXMgY29uZGl0aW9uYWwsIG9ubHkgZXhlY3V0ZWQgd2hlbiBgIShzZGF0YS1cdTAwM2V1Lm1udHIuZmxhZ3MgXHUwMDI2IE1PTklUT1JfRkxBR19BQ1RJVkUpYC4gVGhpcyBtZWFucyB0aGF0IGFjdGl2ZSBtb25pdG9ycyBvciBkZXZpY2VzIHdpdGhvdXQgdmlydHVhbCBtb25pdG9ycyB3ZXJlIG5vdCBoYXZpbmcgdGhlaXIgbW9uaXRvciBmbGFncyBkZWNyZW1lbnRlZCBjb3JyZWN0bHkgb24gc3RvcC4gVGhpcyBjb3JyZWN0aW9uIGxpa2VseSBlbnN1cmVzIHRoZSBmbGFncyBhcmUgaGFuZGxlZCBjb25zaXN0ZW50bHkgZHVyaW5nIHN0YXJ0IGFuZCBzdG9wIG9wZXJhdGlvbnMsIHJlZ2FyZGxlc3Mgb2YgdGhlIG1vbml0b3IncyBhY3RpdmUgc3RhdGUuXG5cbk5vdywgcmVhY2hhYmlsaXR5IGlzIGNydWNpYWwuIFdlIG5lZWQgdG8ga25vdyBob3cgZWFzaWx5IHdlIGNhbiBnZXQgYXQgdGhpcyBjb2RlIHdpdGggb3VyIHRvb2xzLiBGcm9tIHdoYXQgSSB1bmRlcnN0YW5kLCBgbWFjODAyMTFgIGNhbiBiZSB0ZXN0ZWQgdXNpbmcgYG1hYzgwMjExX2h3c2ltYCAoYSB2aXJ0dWFsIDgwMi4xMSBkZXZpY2UpIG9yIHRocm91Z2ggdGhlIGBubDgwMjExYCBhbmQgYGNmZzgwMjExYCBpbnRlcmZhY2VzLCB3aGljaCBtZWFucyBzeXNjYWxscyBhbmQgbmV0bGluayBjb21tYW5kcy4gVGhpcyBpcyBwcm9taXNpbmcuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyByZWFjaGFibGUgd2l0aGluIFN5emthbGxlcidzIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gVGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgKnllcyouIFN5emthbGxlciBoZWF2aWx5IGxldmVyYWdlcyBgbWFjODAyMTFfaHdzaW1gIHZpYSBgbmw4MDIxMWAgbmV0bGluayBjb21tYW5kcy4gSXQgY3JlYXRlcyB2aXJ0dWFsIGludGVyZmFjZXMsIHNldHMgbW9uaXRvciBtb2RlLCBhbmQgc3RhcnRzL3N0b3BzIHRoZXNlIGludGVyZmFjZXMgdXNpbmcgdGhlIHN0YW5kYXJkIGBydG5ldGxpbmtgLCBgU0lPQ1NJRkZMQUdTYCwgYW5kIGBubDgwMjExYCBtZWNoYW5pc21zLiBUaGlzIGNsZWFybHkgZXN0YWJsaXNoZXMgdGhhdCB3ZSBjYW4gbW9kaWZ5IHRoZSBjb3JlIHdpcmVsZXNzIG5ldHdvcmtpbmcgc3Vic3lzdGVtIChzcGVjaWZpY2FsbHksIHRoZSBgbmV0L21hYzgwMjExYCBtb2R1bGUpIGFuZCBtYW5pcHVsYXRlIGV4ZWN1dGFibGUgY29udHJvbCBmbG93LiBUaGlzIHNwZWNpZmljIGJ1ZyBmaXgsIHRoZSBtb3ZlIG9mIHRoZSBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSlgIGNhbGwsIHNob3VsZCB0aGVyZWZvcmUgYmUgZWZmZWN0aXZlbHkgZXhlcmNpc2FibGUgYnkgU3l6a2FsbGVyLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciBgbWFjODAyMTFgLiBMZXQncyBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhcm91bmQgYG5ldC9tYWM4MDIxMWAgdG8gaWRlbnRpZnkgYW55IHNwZWNpZmljIGNvbmZpZyBvcHRpb25zIHRoYXQgbWlnaHQgYmUgY3JpdGljYWwgZm9yIHRyaWdnZXJpbmcgb3IgZXhwb3NpbmcgdGhpcyB2dWxuZXJhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDM2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTU6NTkuMDkzMDYwMjQ2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQyNTU4NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjExXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI6Y29uZmlnIE1BQzgwMjExXFxubmV0L21hYzgwMjExL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBJRUVFIDgwMi4xMSBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxMSlcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0xOT1pZiBNQUM4MDIxMSAhPSBuXFxubmV0L21hYzgwMjExL0tjb25maWctMjAtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjE6Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyLVxcdGJvb2xcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMy1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDpjb25maWcgTUFDODAyMTFfUkNfTUlOU1RSRUxcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJNaW5zdHJlbFxcXCIgaWYgRVhQRVJUXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0zMT1jaG9pY2VcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQwLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjQxOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMXFxubmV0L21hYzgwMjExL0tjb25maWctNDItXFx0Ym9vbCBcXFwiTWluc3RyZWxcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz00OD1lbmRjaG9pY2VcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1MDpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTUxLVxcdHN0cmluZ1xcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9NTc9Y29tbWVudCBcXFwiU29tZSB3aXJlbGVzcyBkcml2ZXJzIHJlcXVpcmUgYSByYXRlIGNvbnRyb2wgYWxnb3JpdGhtXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNTktXFxubmV0L21hYzgwMjExL0tjb25maWc6NjA6Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1RcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02MS1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIG1hYzgwMjExXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3MDpjb25maWcgTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTcxLVxcdGJvb2wgXFxcIkVuYWJsZSBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTc4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjc5OmNvbmZpZyBNQUM4MDIxMV9MRURTXFxubmV0L21hYzgwMjExL0tjb25maWctODAtXFx0Ym9vbCBcXFwiRW5hYmxlIExFRCB0cmlnZ2Vyc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTg3LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjg4OmNvbmZpZyBNQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL0tjb25maWctODktXFx0Ym9vbCBcXFwiRXhwb3J0IG1hYzgwMjExIGludGVybmFscyBpbiBEZWJ1Z0ZTXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctOTYtXFxubmV0L21hYzgwMjExL0tjb25maWc6OTc6Y29uZmlnIE1BQzgwMjExX01FU1NBR0VfVFJBQ0lOR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk4LVxcdGJvb2wgXFxcIlRyYWNlIGFsbCBtYWM4MDIxMSBkZWJ1ZyBtZXNzYWdlc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEwOS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTA6bWVudWNvbmZpZyBNQUM4MDIxMV9ERUJVR19NRU5VXFxubmV0L21hYzgwMjExL0tjb25maWctMTExLVxcdGJvb2wgXFxcIlNlbGVjdCBtYWM4MDIxMSBkZWJ1Z2dpbmcgZmVhdHVyZXNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTUtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTE2OmNvbmZpZyBNQUM4MDIxMV9OT0lOTElORVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNy1cXHRib29sIFxcXCJEbyBub3QgaW5saW5lIFRYL1JYIGhhbmRsZXJzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTMxLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjEzMjpjb25maWcgTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMy1cXHRib29sIFxcXCJWZXJib3NlIGRlYnVnZ2luZyBvdXRwdXRcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDItXFxubmV0L21hYzgwMjExL0tjb25maWc6MTQzOmNvbmZpZyBNQUM4MDIxMV9NTE1FX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTQ0LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWFuYWdlZCBNTE1FIG91dHB1dFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1My1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNTQ6Y29uZmlnIE1BQzgwMjExX1NUQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1NS1cXHRib29sIFxcXCJWZXJib3NlIHN0YXRpb24gZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTYyLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE2Mzpjb25maWcgTUFDODAyMTFfSFRfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjQtXFx0Ym9vbCBcXFwiVmVyYm9zZSBIVCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzQtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTc1OmNvbmZpZyBNQUM4MDIxMV9PQ0JfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzYtXFx0Ym9vbCBcXFwiVmVyYm9zZSBPQ0IgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTg1LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4Njpjb25maWcgTUFDODAyMTFfSUJTU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4Ny1cXHRib29sIFxcXCJWZXJib3NlIElCU1MgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTk2LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE5Nzpjb25maWcgTUFDODAyMTFfUFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTgtXFx0Ym9vbCBcXFwiVmVyYm9zZSBwb3dlcnNhdmUgbW9kZSBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMDgtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjA5OmNvbmZpZyBNQUM4MDIxMV9NUExfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTAtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBlZXIgbGluayBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjEtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjIyOmNvbmZpZyBNQUM4MDIxMV9NUEFUSF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMy1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcGF0aCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzQtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjM1OmNvbmZpZyBNQUM4MDIxMV9NSFdNUF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNi1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggSFdNUCByb3V0aW5nIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0Ny1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDg6Y29uZmlnIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggc3luY2hyb25pemF0aW9uIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1OC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTk6Y29uZmlnIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjYwLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBjaGFubmVsIHN3aXRjaCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjktXFxubmV0L21hYzgwMjExL0tjb25maWc6MjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIX1BTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjcxLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwb3dlcnNhdmUgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjgwLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI4MTpjb25maWcgTUFDODAyMTFfVERMU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4Mi1cXHRib29sIFxcXCJWZXJib3NlIFRETFMgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjkyLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5Mzpjb25maWcgTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTQtXFx0Ym9vbCBcXFwiRXh0cmEgc3RhdGlzdGljcyBmb3IgVFgvUlggZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMzA3LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjMwODpjb25maWcgTUFDODAyMTFfU1RBX0hBU0hfTUFYX1NJWkVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDktXFx0aW50IFxcXCJTdGF0aW9uIGhhc2ggdGFibGUgbWF4aW11bSBzaXplXFxcIiBpZiBNQUM4MDIxMV9ERUJVR19NRU5VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU1OjU5LjIyNzMyMjE0NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTkyNTA3Njc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYE1BQzgwMjExYCBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgbGV0J3Mgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBndXRzIG9mIHRoaXMgYE1BQzgwMjExYCBzaXR1YXRpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIG91dCB0aGUgYG5ldC9tYWM4MDIxMS9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgdW53aW5kaW5nIHRoZSBkZXBlbmRlbmN5IHRyZWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBhcmUgdGlnaHRseSBjb3VwbGVkIHdpdGggYE1BQzgwMjExYCwgdGhlIGJ1aWxkIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgaXQsIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gcGl0ZmFsbHMuIFRoaXMgS2NvbmZpZyBmaWxlIHNob3VsZCBpbGx1bWluYXRlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcywgc28gSSBjYW4gc3RhcnQgZm9ybWluZyBhIG1lbnRhbCBtb2RlbCBvZiBob3cgaXQgYWxsIGludGVyYWN0cy4gSG9wZWZ1bGx5LCBpdOKAmWxsIGJlIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggdG8gc2VlIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgYW5kIGZsYWdzIGF0IGEgZ2xhbmNlLCBhbGxvd2luZyBtZSB0byBmb2N1cyBvbiB0aGUgYXJlYSBvZiBjb25jZXJuLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjQ0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTY6MDEuODE5ODMzMDg5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTUFDODAyMTFcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gICA1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gICA2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQVJDNFxcbiAgIDg6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fQ0NNXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgMTE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAxMjpcXHRcXHRoZWxwXFxuICAxMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IElFRUUgODAyLjExXFxuICAxNDpcXHRcXHQgIG5ldHdvcmtpbmcgc3RhY2suXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbW1lbnQgXFxcIkNGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXFxcIlxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMT1uXFxuICAxODpcXHRcXG4gIDE5OlxcdGlmIE1BQzgwMjExICE9IG5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo1NjowMS44MTk5MjA5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1MDQxODA4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIHRoZSBgbWFjODAyMTFfaHdzaW1gIEtjb25maWcqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFdoaWxlIEknbSB3b3JraW5nIHdpdGggdGhpcyBhcmVhLCBpdCdzIHdpc2UgdG8gcmV2aWV3IGFsbCB0aGUgcmVsZXZhbnQgY29tcG9uZW50cy4gU3BlY2lmaWNhbGx5LCBpdCdzIHBydWRlbnQgdG8gZG91YmxlLWNoZWNrIHRoZSBgbWFjODAyMTFfaHdzaW1gIEtjb25maWcgZmlsZS4gSSdtIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUsIGJ1dCB0aGlzIHN0ZXAgd2lsbCBoZWxwIG1lIHRvIHJlZnJlc2ggdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgYW55IGRlcGVuZGVuY2llcyBvciBkZWZhdWx0IHNldHRpbmdzIHRoYXQgbWlnaHQgYmUgY3J1Y2lhbCB0byB3aGF0ZXZlciBpc3N1ZSBJJ20gY3VycmVudGx5IGZvY3VzZWQgb24uIEl04oCZcyBhIGdvb2QgcHJhY3RpY2UgdG8gYmUgbWV0aWN1bG91cyB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGVuc3VyZSB0aGUgaW50ZW5kZWQgYmVoYXZpb3VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE4NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTY6MDMuMzI0MTA0MTU0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUwNTM2NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjExX0hXU0lNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZzoxOmNvbmZpZyBNQUM4MDIxMV9IV1NJTVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0yLVxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTY6MDMuNDQ5MTY0MjEyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MjQyNTg4NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWaXJ0dWFsIFdpcmVsZXNzIEtjb25maWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhlIHZpcnR1YWwgd2lyZWxlc3Mgc2V0dXAgaW4gdGhpcyBrZXJuZWwuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuIExldCdzIHNlZS4uLiB0aGUgdGV4dCBtZW50aW9ucyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnYC4gUmlnaHQsIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgc3Vic3lzdGVtLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYEtjb25maWdgIG5vdyB0byBzZWUgd2hhdCdzIGRlZmluZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGV4aXN0LCBhbmQgaG93IHRoaXMgYWxsIHBpZWNlcyB0b2dldGhlci4gVGhhdCdsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcmVzdCBvZiB0aGUgY29kZS4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ2MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU2OjA1LjI3MzQyNjE3MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Y29uZmlnIE1BQzgwMjExX0hXU0lNXFxuICAgMjpcXHRcXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcXFwiXFxuICAgMzpcXHRcXHRkZXBlbmRzIG9uIE1BQzgwMjExXFxuICAgNDpcXHRcXHRoZWxwXFxuICAgNTpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIGEgZGV2ZWxvcGVyIHRlc3RpbmcgdG9vbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHRlc3RcXG4gICA2OlxcdFxcdCAgSUVFRSA4MDIuMTEgbmV0d29ya2luZyBzdGFjayAobWFjODAyMTEpIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgbm90XFxuICAgNzpcXHRcXHQgIG5lZWRlZCBmb3Igbm9ybWFsIHdpcmVsZXNzIExBTiB1c2FnZSBhbmQgaXMgb25seSBmb3IgdGVzdGluZy4gU2VlXFxuICAgODpcXHRcXHQgIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9tYWM4MDIxMV9od3NpbSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3dcXG4gICA5OlxcdFxcdCAgdG8gdXNlIHRoaXMgdG9vbC5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcXG4gIDEyOlxcdFxcdCAgY2FsbGVkIG1hYzgwMjExX2h3c2ltLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFZJUlRfV0lGSVxcbiAgMTU6XFx0XFx0dHJpc3RhdGUgXFxcIldpZmkgd3JhcHBlciBmb3IgZXRoZXJuZXQgZHJpdmVyc1xcXCJcXG4gIDE2OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBldGhlcm5ldCBjb25uZWN0aW9ucyB0byBhcHBlYXIgYXMgaWYgdGhleVxcbiAgMTk6XFx0XFx0ICBhcmUgd2lmaSBjb25uZWN0aW9ucyB0aHJvdWdoIGEgc3BlY2lhbCBydG5ldGxpbmsgZGV2aWNlLlxcbiAgMjA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU2OjA1LjI3MzUzMTA5MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTEzODc2NjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIENGRzgwMjExIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSdtIHN0YXJ0aW5nIHdpdGggYENGRzgwMjExYC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gcXVpY2tseSBnZXQgYSBoYW5kbGUgb24gYWxsIGl0cyBkZXBlbmRlbmNpZXMuIFdoYXQgb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgb3IgZXh0ZXJuYWwgbGlicmFyaWVzIGlzIGl0IHRpZ2h0bHkgY291cGxlZCB3aXRoPyBJJ20gdGhpbmtpbmcsIG9mZiB0aGUgdG9wIG9mIG15IGhlYWQsIHRoaW5ncyBsaWtlIHJlZ3VsYXRvcnkgZGF0YWJhc2VzLCB3aXJlbGVzcyBleHRlbnNpb25zLCBhbmQsIG9mIGNvdXJzZSwgdGhlIHZhcmlvdXMgZHJpdmVyIGludGVyZmFjZXMuIEkgbmVlZCBhIGNsZWFyIG1lbnRhbCBtYXAsIHNvIEkgY2FuIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSBzY29wZSBvZiBhbnkgcG90ZW50aWFsIGNoYW5nZXMgSSdtIGFib3V0IHRvIG1ha2UsIG9yIGFueSB2dWxuZXJhYmlsaXRpZXMgSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyLiBJJ20gZ29pbmcgdG8gbWFwIG91dCB0aGUgZGVwZW5kZW5jeSB0cmVlIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgcmVncmVzc2lvbnMgb3IgaW50ZWdyYXRpb24gcHJvYmxlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTkzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo1NjowNy4xODc0MTMyNzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODc1NzYyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0ZHODAyMTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWc9Mzg9Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTUxLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjUyOmNvbmZpZyBDRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1NcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01My1cXHRib29sIFxcXCJlbmFibGUgZGV2ZWxvcGVyIHdhcm5pbmdzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctNjctXFxubmV0L3dpcmVsZXNzL0tjb25maWc6Njg6Y29uZmlnIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY5LVxcdGJvb2wgXFxcImNmZzgwMjExIGNlcnRpZmljYXRpb24gb251c1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTg4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjg5OmNvbmZpZyBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTkwLVxcdGJvb2wgXFxcInJlcXVpcmUgcmVnZGIgc2lnbmF0dXJlXFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTk4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjk5OmNvbmZpZyBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDAtXFx0Ym9vbCBcXFwiYWxsb3cgcmVnZGIga2V5cyBzaGlwcGVkIHdpdGggdGhlIGtlcm5lbFxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTExOmNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTItXFx0c3RyaW5nIFxcXCJhZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTIxLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEyMjpjb25maWcgQ0ZHODAyMTFfUkVHX0NFTExVTEFSX0hJTlRTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVxcdGJvb2wgXFxcImNmZzgwMjExIHJlZ3VsYXRvcnkgc3VwcG9ydCBmb3IgY2VsbHVsYXIgYmFzZSBzdGF0aW9uIGhpbnRzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM0LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM2LVxcdGJvb2wgXFxcImNmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTU5OmNvbmZpZyBDRkc4MDIxMV9ERUZBVUxUX1BTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTYwLVxcdGJvb2wgXFxcImVuYWJsZSBwb3dlcnNhdmUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNjk6Y29uZmlnIENGRzgwMjExX0RFQlVHRlNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgRGVidWdGUyBlbnRyaWVzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc4LVxcdGJvb2wgXFxcInN1cHBvcnQgQ1JEQVxcXCIgaWYgRVhQRVJUXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg4LVxcdGJvb2wgXFxcImNmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5My1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxOTQ6Y29uZmlnIENGRzgwMjExX0tVTklUX1RFU1RcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBjZmc4MDIxMVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo1NjowNy4zMDYxNzc2NjZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAxNzg2NTc1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqRGl2aW5nIGludG8gdGhlIGBpZWVlODAyMTFfZG9fc3RvcCgpYCBQYXRjaCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgaWVlZTgwMjExX2RvX3N0b3AoKWAgd2l0aGluIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIFRvIHByb3Blcmx5IGFzc2VzcyB0aGlzLCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGguIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25zIGNhbGwgYGllZWU4MDIxMV9kb19zdG9wKClgLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYWxsIHRoZSBjYWxsZXJzLiBJdCBpcyBhbHNvIGltcG9ydGFudCB0byBpZGVudGlmeSB3aGVyZSBgaWVlZTgwMjExX2RvX3N0b3AoKWAgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGludGVyZmFjZSBsaWZlY3ljbGUgd2l0aGluIGBtYWM4MDIxMWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBtaWdodCBicmVhay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMzEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo1NjowOS4zMjQwNDY0NDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjMzNjM3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZWVlODAyMTFfZG9fc3RvcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL2NmZy5jPTk2PXN0YXRpYyBpbnQgaWVlZTgwMjExX3NldF9tb25fb3B0aW9ucyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy0xNDktXFx0XFx0XFx0LypcXG5uZXQvbWFjODAyMTEvY2ZnLmM6MTUwOlxcdFxcdFxcdCAqIEJlY2F1c2UgdGhlIGludGVyZmFjZSBpcyBkb3duLCBpZWVlODAyMTFfZG9fc3RvcFxcbm5ldC9tYWM4MDIxMS9jZmcuYy0xNTEtXFx0XFx0XFx0ICogYW5kIGllZWU4MDIxMV9kb19vcGVuIHRha2UgY2FyZSBvZiBcXFwiZXZlcnl0aGluZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTQ2MT1zdGF0aWMgaW50IGllZWU4MDIxMV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy00NzgtXFxubmV0L21hYzgwMjExL2lmYWNlLmM6NDc5OnN0YXRpYyB2b2lkIGllZWU4MDIxMV9kb19zdG9wKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBib29sIGdvaW5nX2Rvd24pXFxubmV0L21hYzgwMjExL2lmYWNlLmMtNDgwLXtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTg0Nj1zdGF0aWMgaW50IGllZWU4MDIxMV9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy04NjgtXFxubmV0L21hYzgwMjExL2lmYWNlLmM6ODY5OlxcdGllZWU4MDIxMV9kb19zdG9wKHNkYXRhLCB0cnVlKTtcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy04NzAtXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xOTgxPXN0YXRpYyBpbnQgaWVlZTgwMjExX3J1bnRpbWVfY2hhbmdlX2lmdHlwZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTIwNDUtXFx0LyogZG9fc3RvcCB3aWxsIHN5bmNocm9uaXplX3JjdSgpIGZpcnN0IHRoaW5nICovXFxubmV0L21hYzgwMjExL2lmYWNlLmM6MjA0NjpcXHRpZWVlODAyMTFfZG9fc3RvcChzZGF0YSwgZmFsc2UpO1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTIwNDctXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0yNDQxPXZvaWQgaWVlZTgwMjExX3NkYXRhX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDQ0LVxcdFxcdHJldHVybjtcXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoyNDQ1OlxcdGllZWU4MDIxMV9kb19zdG9wKHNkYXRhLCB0cnVlKTtcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDQ2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTY6MDkuNDMwMzkwNzZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDYwNTQzNDg5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBBc3Nlc3NtZW50OiBtYWM4MDIxMSBNb25pdG9yIEludGVyZmFjZSBTdG9wIENsZWFudXAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkndmUgaWRlbnRpZmllZCBhIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldCB3aXRoaW4gdGhlIG1hYzgwMjExIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGNsZWFudXAgbG9naWMgd2hlbiBhIG1vbml0b3IgaW50ZXJmYWNlIGlzIHN0b3BwZWQuIE15IGluaXRpYWwgc2NhbiBoYXMgeWllbGRlZCBhIGhhbmRmdWwgb2Yga2V5IGZ1bmN0aW9ucyBhcyBmb2N1cyBzeW1ib2xzOiBgaWVlZTgwMjExX2RvX3N0b3BgIChkZWZpbmVkIGFzIHN0YXRpYyB3aXRoaW4gbmV0L21hYzgwMjExL2lmYWNlLmMpLCBgaWVlZTgwMjExX3N0b3BgLCBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzYCwgYGllZWU4MDIxMV9ydW50aW1lX2NoYW5nZV9pZnR5cGVgLCBhbmQgYGllZWU4MDIxMV9zZXRfbW9uX29wdGlvbnNgLiBHb29kLCB0aGVzZSBzZWVtIGZlYXR1cmUtc3BlY2lmaWMgZW5vdWdoIGFuZCBub3Qgb3Zlcmx5IHViaXF1aXRvdXMgdG8gYmUgdXNlZnVsIGFzIGZvY3VzIHN5bWJvbHMuXG5cbkkndmUgYWxzbyBjaGVja2VkIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCB3b3VsZCBtYWtlIHRoaXMgdGFyZ2V0IHJlYWNoYWJsZS4gSXQgbG9va3MgbGlrZSB3ZSBuZWVkIGBNQUM4MDIxMWAsIGBDRkc4MDIxMWAsIGFuZCBgTUFDODAyMTFfSFdTSU1gIGVuYWJsZWQuICBUaGUgcmVhY2hhYmlsaXR5IGxvb2tzIHNvbGlkIC0gd2UgY2FuIGhpdCB0aGlzIHdpdGggc3RhbmRhcmQgUUVNVS9zeXprYWxsZXIgc2V0dXBzIHVzaW5nIG5sODAyMTEgYW5kIG1hYzgwMjExX2h3c2ltLlxuXG5UaGlzIHRhcmdldCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmc7IGl0J3MgYSBcIldvcnRoRnV6emluZz10cnVlXCIgc2l0dWF0aW9uLiBUaGUgY29yZSBvZiB0aGlzIGlzIGNlbnRlcmVkIGFyb3VuZCB0aGUgY29ycmVjdCBpbnZvY2F0aW9uIG9mIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKWAgZHVyaW5nIG1vbml0b3IgaW50ZXJmYWNlIHN0b3AuIFRoZSBwYXRjaCBpbiBxdWVzdGlvbiBzZWVtcyB0byBmb2N1cyBvbiBlbnN1cmluZyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYSBtb25pdG9yIGludGVyZmFjZSBpcyBhY3R1YWxseSBhY3RpdmUgb3IgaWYgdmlydHVhbCBtb25pdG9yIHN1cHBvcnQgaXMgcHJlc2VudC4gVGhhdCdzIGEgY2xhc3NpYyBhcmVhIGZvciBzdWJ0bGUgYnVncyByZWxhdGVkIHRvIHN0YXRlIG1hbmFnZW1lbnQuXG5cbkFscmlnaHQsIGRvdWJsZS1jaGVja2luZyBldmVyeXRoaW5nOlxuXG4qICAgKipDb25maWdzOioqIE1BQzgwMjExLCBDRkc4MDIxMSwgTUFDODAyMTFfSFdTSU1cbiogICAqKkZvY3VzU3ltYm9sczoqKiBgaWVlZTgwMjExX2RvX3N0b3BgLCBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzYCwgYGllZWU4MDIxMV9zdG9wYCwgYGllZWU4MDIxMV9ydW50aW1lX2NoYW5nZV9pZnR5cGVgLCBgaWVlZTgwMjExX3NldF9tb25fb3B0aW9uc2BcblxuKiAgICoqUmVhc29uaW5nOioqIFRoZSBidWcgZml4IGludm9sdmVzIHRoZSBjbGVhbnVwIGxvZ2ljIG9mIG1vbml0b3IgaW50ZXJmYWNlczsgaXQgc2hvdWxkIGJlIHdvcnRoIGZ1enppbmcgYmVjYXVzZSBpdCBtb2RpZmllcyBtb25pdG9yIHN0b3AgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB3aXRoIHN0YW5kYXJkIFFFTVUvc3l6a2FsbGVyLlxuXG5MZXQncyBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxMjgsIk91dHB1dFRva2VucyI6MjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU2OjE0LjAzNTgyODAxMloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjAyNzgwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImllZWU4MDIxMV9kb19zdG9wXCIsXG4gICAgXCJpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3NcIixcbiAgICBcImllZWU4MDIxMV9zdG9wXCIsXG4gICAgXCJpZWVlODAyMTFfcnVudGltZV9jaGFuZ2VfaWZ0eXBlXCIsXG4gICAgXCJpZWVlODAyMTFfc2V0X21vbl9vcHRpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbW9uaXRvciBpbnRlcmZhY2UgdGVhcmRvd24gaGFuZGxpbmcgaW4gbmV0L21hYzgwMjExL2lmYWNlLmMgKGllZWU4MDIxMV9kb19zdG9wKSBieSBlbnN1cmluZyB0aGF0IGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncygpIGlzIGFsd2F5cyBpbnZva2VkIHRvIGRlY3JlbWVudCBtb25pdG9yIGZsYWdzIHdoZW4gc3RvcHBpbmcgYSBtb25pdG9yIGludGVyZmFjZSwgcmVnYXJkbGVzcyBvZiB0aGUgdmlydHVhbCBtb25pdG9yIHN0YXR1cy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWFjODAyMTFfaHdzaW0gYW5kIG5sODAyMTEvcnRuZXRsaW5rIGludGVyZmFjZSBjb250cm9sIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImllZWU4MDIxMV9kb19zdG9wXCIsXG4gICAgXCJpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3NcIixcbiAgICBcImllZWU4MDIxMV9zdG9wXCIsXG4gICAgXCJpZWVlODAyMTFfcnVudGltZV9jaGFuZ2VfaWZ0eXBlXCIsXG4gICAgXCJpZWVlODAyMTFfc2V0X21vbl9vcHRpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbW9uaXRvciBpbnRlcmZhY2UgdGVhcmRvd24gaGFuZGxpbmcgaW4gbmV0L21hYzgwMjExL2lmYWNlLmMgKGllZWU4MDIxMV9kb19zdG9wKSBieSBlbnN1cmluZyB0aGF0IGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncygpIGlzIGFsd2F5cyBpbnZva2VkIHRvIGRlY3JlbWVudCBtb25pdG9yIGZsYWdzIHdoZW4gc3RvcHBpbmcgYSBtb25pdG9yIGludGVyZmFjZSwgcmVnYXJkbGVzcyBvZiB0aGUgdmlydHVhbCBtb25pdG9yIHN0YXR1cy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWFjODAyMTFfaHdzaW0gYW5kIG5sODAyMTEvcnRuZXRsaW5rIGludGVyZmFjZSBjb250cm9sIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU2OjE0LjE5MTg2Njg3OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2NDYyNDkwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo1NjoxNC4xOTI3MTU3MjlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNzY0NTM5NDkyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gYWNjb3VudGluZyBidWcgaW4gbWFjODAyMTEgbW9uaXRvciBpbnRlcmZhY2UgaGFuZGxpbmcgYnkgbW92aW5nIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKWAgb3V0c2lkZSB0aGUgY29uZGl0aW9uYWwgY2hlY2sgaW4gYGllZWU4MDIxMV9kb19zdG9wKClgLCBwcm9wZXJseSBiYWxhbmNpbmcgdGhlIHVuY29uZGl0aW9uYWwgY2FsbCB0byBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAxKWAgaW4gYGllZWU4MDIxMV9kb19vcGVuKClgLiBcXG5cXG5UaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgaW50ZXJuYWwgbW9uaXRvciBmbGFnIGNvdW50ZXJzIG9uIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYCAoc3VjaCBhcyBgbG9jYWwtXFx1MDAzZWZpZl9mY3NmYWlsYCwgYGxvY2FsLVxcdTAwM2V0eF9tbnRyc2AsIGV0Yy4pLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBpbml0aWFsaXphdGlvbiBsb2dpYy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLCBhbmQgc3RhbmRhcmQgS0FTQU4vdGVzdGluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDlkODg3YjlhMDBmOTc0NzUwYTIxNTgwYmJlOTY5YWU2MTZjNzIzZGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDA3OjU1OjQwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lmYWNlLmMgYi9uZXQvbWFjODAyMTEvaWZhY2UuY1xuaW5kZXggNDM0NjBhNzA1YTZiZC4uOWI0MDBjYWYyNzY1MiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jXG4rKysgYi9uZXQvbWFjODAyMTEvaWZhY2UuY1xuQEAgLTYzMCw4ICs2MzAsOSBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfZG9fc3RvcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgYm9vbCBnb2luZ19kb1xuIFx0XHRcdFx0aHdfcmVjb25mX2ZsYWdzIHw9IElFRUU4MDIxMV9DT05GX0NIQU5HRV9NT05JVE9SO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKTtcbiBcdFx0fVxuK1xuK1x0XHRpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIE5MODAyMTFfSUZUWVBFX05BTjpcbiBcdFx0LyogQ2hlY2sgaWYgYW55IG9wZW4gTkFOX0RBVEEgaW50ZXJmYWNlcyAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTY6MTQuMTkyNzE4Njc5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzNDA5ODA0OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBtYWM4MDIxMSBJbnRlcmZhY2UgQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMgZGlmZi4gVG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiwgbXkgZmlyc3QgbW92ZSBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLCB3aGljaCBsb29rcyBsaWtlIGl0J3MgaW4gYG5ldC9tYWM4MDIxMS9pZmFjZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIHNvIEknbGwgc3RhcnQgYnkgcmVhZGluZyB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhhdCBJIG5lZWQgdG8gem9vbSBpbiBvbiB3aGF0J3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDYzMC4gTGV0J3MgdXNlIGByZWFkLWZpbGVgIHRvIHplcm8gaW4gb24gdGhhdCBzZWN0aW9uIGFuZCBnZXQgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBiZWhhdmlvci4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZm91bmRhdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0MiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTY6MTkuNTMzNzAyMTM4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvaWZhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MDA6XFx0XFx0XFx0XFx0fVxcbiA2MDE6XFx0XFx0XFx0fVxcbiA2MDI6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cHMtXFx1MDAzZWJjX2J1Zi5sb2NrLCBmbGFncyk7XFxuIDYwMzpcXHRcXG4gNjA0OlxcdFxcdFxcdHNrYl9xdWV1ZV93YWxrX3NhZmUoXFx1MDAyNmZyZWVxLCBza2IsIHRtcCkge1xcbiA2MDU6XFx0XFx0XFx0XFx0X19za2JfdW5saW5rKHNrYiwgXFx1MDAyNmZyZWVxKTtcXG4gNjA2OlxcdFxcdFxcdFxcdGllZWU4MDIxMV9mcmVlX3R4c2tiKFxcdTAwMjZsb2NhbC1cXHUwMDNlaHcsIHNrYik7XFxuIDYwNzpcXHRcXHRcXHR9XFxuIDYwODpcXHRcXHR9XFxuIDYwOTpcXHRcXG4gNjEwOlxcdFxcdGlmIChnb2luZ19kb3duKVxcbiA2MTE6XFx0XFx0XFx0bG9jYWwtXFx1MDAzZW9wZW5fY291bnQtLTtcXG4gNjEyOlxcdFxcbiA2MTM6XFx0XFx0c3dpdGNoIChzZGF0YS1cXHUwMDNldmlmLnR5cGUpIHtcXG4gNjE0OlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTjpcXG4gNjE1OlxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZzZGF0YS1cXHUwMDNldS52bGFuLmxpc3QpO1xcbiA2MTY6XFx0XFx0XFx0UkNVX0lOSVRfUE9JTlRFUihzZGF0YS1cXHUwMDNldmlmLmJzc19jb25mLmNoYW5jdHhfY29uZiwgTlVMTCk7XFxuIDYxNzpcXHRcXHRcXHQvKiBzZWUgY29tbWVudCBpbiB0aGUgZGVmYXVsdCBjYXNlIGJlbG93ICovXFxuIDYxODpcXHRcXHRcXHRpZWVlODAyMTFfZnJlZV9rZXlzKHNkYXRhLCB0cnVlKTtcXG4gNjE5OlxcdFxcdFxcdC8qIG5vIG5lZWQgdG8gdGVsbCBkcml2ZXIgKi9cXG4gNjIwOlxcdFxcdFxcdGJyZWFrO1xcbiA2MjE6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOlxcbiA2MjI6XFx0XFx0XFx0bG9jYWwtXFx1MDAzZW1vbml0b3JzLS07XFxuIDYyMzpcXHRcXG4gNjI0OlxcdFxcdFxcdGlmICghKHNkYXRhLVxcdTAwM2V1Lm1udHIuZmxhZ3MgXFx1MDAyNiBNT05JVE9SX0ZMQUdfQUNUSVZFKSBcXHUwMDI2XFx1MDAyNlxcbiA2MjU6XFx0XFx0XFx0ICAgICFpZWVlODAyMTFfaHdfY2hlY2soXFx1MDAyNmxvY2FsLVxcdTAwM2VodywgTk9fVklSVFVBTF9NT05JVE9SKSkge1xcbiA2MjY6XFx0XFxuIDYyNzpcXHRcXHRcXHRcXHRsb2NhbC1cXHUwMDNldmlydF9tb25pdG9ycy0tO1xcbiA2Mjg6XFx0XFx0XFx0XFx0aWYgKGxvY2FsLVxcdTAwM2V2aXJ0X21vbml0b3JzID09IDApIHtcXG4gNjI5OlxcdFxcdFxcdFxcdFxcdGxvY2FsLVxcdTAwM2Vody5jb25mLmZsYWdzIFxcdTAwMjY9IH5JRUVFODAyMTFfQ09ORl9NT05JVE9SO1xcbiA2MzA6XFx0XFx0XFx0XFx0XFx0aHdfcmVjb25mX2ZsYWdzIHw9IElFRUU4MDIxMV9DT05GX0NIQU5HRV9NT05JVE9SO1xcbiA2MzE6XFx0XFx0XFx0XFx0fVxcbiA2MzI6XFx0XFxuIDYzMzpcXHRcXHRcXHR9XFxuIDYzNDpcXHRcXG4gNjM1OlxcdFxcdFxcdGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpO1xcbiA2MzY6XFx0XFx0XFx0YnJlYWs7XFxuIDYzNzpcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX05BTjpcXG4gNjM4OlxcdFxcdFxcdC8qIENoZWNrIGlmIGFueSBvcGVuIE5BTl9EQVRBIGludGVyZmFjZXMgKi9cXG4gNjM5OlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXRlciwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxuIDY0MDpcXHRcXHRcXHRcXHRXQVJOX09OKGl0ZXItXFx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBIFxcdTAwMjZcXHUwMDI2XFxuIDY0MTpcXHRcXHRcXHRcXHRcXHRpZWVlODAyMTFfc2RhdGFfcnVubmluZyhpdGVyKSk7XFxuIDY0MjpcXHRcXHRcXHR9XFxuIDY0MzpcXHRcXG4gNjQ0OlxcdFxcdFxcdC8qIGNsZWFuIGFsbCB0aGUgZnVuY3Rpb25zICovXFxuIDY0NTpcXHRcXHRcXHRpZiAoIShsb2NhbC1cXHUwMDNlaHcud2lwaHktXFx1MDAzZW5hbl9jYXBhLmZsYWdzIFxcdTAwMjZcXG4gNjQ2OlxcdFxcdFxcdCAgICAgIFdJUEhZX05BTl9GTEFHU19VU0VSU1BBQ0VfREUpKSB7XFxuIDY0NzpcXHRcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNkYXRhLVxcdTAwM2V1Lm5hbi5kZS5mdW5jX2xvY2spO1xcbiA2NDg6XFx0XFxuIDY0OTpcXHRcXHRcXHRcXHRpZHJfZm9yX2VhY2hfZW50cnkoXFx1MDAyNnNkYXRhLVxcdTAwM2V1Lm5hbi5kZS5mdW5jdGlvbl9pbnN0X2lkcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTY6MTkuNTMzODQwOTA4WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMDI2NjAzMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIERyaXZlcidzIEluaXRpYWxpemF0aW9uIGFuZCBTaHV0ZG93bioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyB0aGlzIGRyaXZlciBoYW5kbGVzIG1vbml0b3IgbW9kZSwgYW5kIGhvdyBpdCdzIGluaXRpYWxpemVkIGFuZCBzaHV0IGRvd24uIFRoZSBrZXkgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFnc2AsIGBpZWVlODAyMTFfZG9fc3RvcGAsIGFuZCBgaWVlZTgwMjExX2RvX29wZW5gIG9yIHBvdGVudGlhbGx5IHN0YXJ0LXJlbGF0ZWQgZnVuY3Rpb25zLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIHNvbGlkIG92ZXJ2aWV3IG9mIHRoZSBjb2RlIGluIHRoYXQgcmVnaW9uLCBzbyBJJ20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIG9uIGxpbmVzIDUwMCB0byA2MDAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBUbyBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nIHJlbGV2YW50LCBJJ20gZ29pbmcgdG8gZG8gYSBxdWljayBncmVwIGZvciBhbnkgb3RoZXIgcmVmZXJlbmNlcyB0byBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzYC4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIHRyYWNrIGRvd24gYWxsIGNhbGxzLCB0byBzZWUgaG93IHRoYXQgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZCBmcm9tIGVsc2V3aGVyZSBpbiB0aGUgY29kZWJhc2UuIFRoaXMgaXMgc3RhbmRhcmQgb3BlcmF0aW5nIHByb2NlZHVyZSBmb3IgbWUuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjUzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo1NjoyMS41MzY1MDM3MzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMjUwMTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9jZmcuYz05Nj1zdGF0aWMgaW50IGllZWU4MDIxMV9zZXRfbW9uX29wdGlvbnMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtMTQyLVxcdFxcdGlmIChpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpIHtcXG5uZXQvbWFjODAyMTEvY2ZnLmM6MTQzOlxcdFxcdFxcdGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy0xNDQtXFx0XFx0XFx0c2RhdGEtXFx1MDAzZXUubW50ci5mbGFncyA9IHBhcmFtcy1cXHUwMDNlZmxhZ3M7XFxubmV0L21hYzgwMjExL2NmZy5jOjE0NTpcXHRcXHRcXHRpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIDEpO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy0xNDYtXFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0yMjAyPXZvaWQgaWVlZTgwMjExX3JlY2FsY19pZGxlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTtcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyMjAzOnZvaWQgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTIyMDQtXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGludCBvZmZzZXQpO1xcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmM9NDc5PXN0YXRpYyB2b2lkIGllZWU4MDIxMV9kb19zdG9wKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBib29sIGdvaW5nX2Rvd24pXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy02MzQtXFxubmV0L21hYzgwMjExL2lmYWNlLmM6NjM1OlxcdFxcdGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpO1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTYzNi1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTExNTY9dm9pZCBpZWVlODAyMTFfcmVjYWxjX29mZmxvYWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMTcyLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjExNzM6dm9pZCBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMTE3NC1cXHRcXHRcXHRcXHQgICAgY29uc3QgaW50IG9mZnNldClcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTEzNjY9aW50IGllZWU4MDIxMV9kb19vcGVuKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGJvb2wgY29taW5nX3VwKVxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMTUwNi1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoxNTA3OlxcdFxcdGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgMSk7XFxubmV0L21hYzgwMjExL2lmYWNlLmMtMTUwOC1cXHRcXHRpZWVlODAyMTFfY29uZmlndXJlX2ZpbHRlcihsb2NhbCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU2OjIxLjYyOTc1OTcxM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzgzODA0NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSA4MDIuMTEgSW50ZXJmYWNlIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSA4MDIuMTEgaW50ZXJmYWNlLiBJJ20gaGVhZGluZyBzdHJhaWdodCBmb3IgYGllZWU4MDIxMV9kb19vcGVuYCBpbiBgbmV0L21hYzgwMjExL2lmYWNlLmNgIOKAkyBzcGVjaWZpY2FsbHksIGFyb3VuZCBsaW5lIDE1MDAuIFRoYXQncyB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGJyaW5naW5nIHVwIGFuIGludGVyZmFjZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhdCB0aGUgcG9pbnQgb2YgaW50ZXJmYWNlIGJyaW5nLXVwIC0gd2hhdCBhcmUgdGhlIGtleSBzdGVwcywgcmVzb3VyY2UgYWxsb2NhdGlvbnMsIGFuZCBpbml0aWFsaXphdGlvbnMuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlIGxvd2VyIE1BQyBsYXllciBhbmQgdGhlIGhpZ2hlciBsYXllcnMuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlOlxuLSAqKkFzc29jaWF0aW9uKio6IHRoZSBpbnRlcmZhY2UgYXNzb2NpYXRpbmcgd2l0aCB0aGUgbmV0d29yay5cbi0gKipCZWFjb24gU2V0dXAqKjogaGFuZGxpbmcgb2YgYmVhY29ucyBiYXNlZCBvbiBjb25maWd1cmF0aW9uLlxuLSAqKlBvd2VyIE1hbmFnZW1lbnQqKjogc2V0dGluZyB0aGUgbmVjZXNzYXJ5IFBNIGZsYWdzLlxuLSAqKlJhdGUgY29udHJvbCoqOiBkZXRlcm1pbmluZyBzdGFydGluZyB0cmFuc21pdCByYXRlcy5cbi0gKipTZWN1cml0eSBhc3NvY2lhdGlvbnMqKjogdGhlIHNldHRpbmcgdXAgYW5kL29yIGNoZWNraW5nIG9mIHNlY3VyaXR5IHBvbGljaWVzLlxuXG5Gcm9tIGV4cGVyaWVuY2UsIEkga25vdyB0aGF0IHRoaXMgaXMgYSBjcml0aWNhbCBzZWN0aW9uIGZvciBicmluZ2luZyB1cCB0aGUgaW50ZXJmYWNlLCBhbmQgdGhhdCB0aGUgb3JkZXIgb2YgdGhlIGFjdGlvbnMgY2FuIGJlIGNyaXRpY2FsIGZvciBjb3JyZWN0IG9wZXJhdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgc2V0dGluZ3MgYXJlIGNvcnJlY3RseSBjb25maWd1cmVkIGJlZm9yZSB0aGUgaW50ZXJmYWNlIGlzIGFjY2Vzc2libGUuIExldCdzIHNlZSB3aGF0J3MgcmVhbGx5IGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQyMywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU2OjI0LjAxMzU2NzUwMloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL2lmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ5MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ5MDpcXHRcXHRcXHRcXHRpZiAobG9jYWwtXFx1MDAzZXZpcnRfbW9uaXRvcnMgPT0gbG9jYWwtXFx1MDAzZW9wZW5fY291bnQpIHtcXG4xNDkxOlxcdFxcdFxcdFxcdFxcdHJlcyA9IGllZWU4MDIxMV9hZGRfdmlydHVhbF9tb25pdG9yKGxvY2FsLCBzZGF0YSk7XFxuMTQ5MjpcXHRcXHRcXHRcXHRcXHRpZiAocmVzKVxcbjE0OTM6XFx0XFx0XFx0XFx0XFx0XFx0Z290byBlcnJfc3RvcDtcXG4xNDk0OlxcdFxcdFxcdFxcdH1cXG4xNDk1OlxcdFxcbjE0OTY6XFx0XFx0XFx0XFx0bG9jYWwtXFx1MDAzZXZpcnRfbW9uaXRvcnMrKztcXG4xNDk3OlxcdFxcbjE0OTg6XFx0XFx0XFx0XFx0LyogbXVzdCBiZSBiZWZvcmUgdGhlIGNhbGwgdG8gaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIgKi9cXG4xNDk5OlxcdFxcdFxcdFxcdGlmIChsb2NhbC1cXHUwMDNldmlydF9tb25pdG9ycyA9PSAxKSB7XFxuMTUwMDpcXHRcXHRcXHRcXHRcXHRsb2NhbC1cXHUwMDNlaHcuY29uZi5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9NT05JVE9SO1xcbjE1MDE6XFx0XFx0XFx0XFx0XFx0aHdfcmVjb25mX2ZsYWdzIHw9IElFRUU4MDIxMV9DT05GX0NIQU5HRV9NT05JVE9SO1xcbjE1MDI6XFx0XFx0XFx0XFx0fVxcbjE1MDM6XFx0XFx0XFx0fVxcbjE1MDQ6XFx0XFxuMTUwNTpcXHRcXHRcXHRsb2NhbC1cXHUwMDNlbW9uaXRvcnMrKztcXG4xNTA2OlxcdFxcbjE1MDc6XFx0XFx0XFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAxKTtcXG4xNTA4OlxcdFxcdFxcdGllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTtcXG4xNTA5OlxcdFxcdFxcdGllZWU4MDIxMV9yZWNhbGNfb2ZmbG9hZChsb2NhbCk7XFxuMTUxMDpcXHRcXHRcXHRpZWVlODAyMTFfcmVjYWxjX2lkbGUobG9jYWwpO1xcbjE1MTE6XFx0XFxuMTUxMjpcXHRcXHRcXHRuZXRpZl9jYXJyaWVyX29uKGRldik7XFxuMTUxMzpcXHRcXHRcXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2c2RhdGEtXFx1MDAzZXUubW50ci5saXN0LCBcXHUwMDI2bG9jYWwtXFx1MDAzZW1vbl9saXN0KTtcXG4xNTE0OlxcdFxcdFxcdGJyZWFrO1xcbjE1MTU6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUDpcXG4xNTE2OlxcdFxcdFxcdHNkYXRhLVxcdTAwM2Vic3MgPSBcXHUwMDI2c2RhdGEtXFx1MDAzZXUuYXA7XFxuMTUxNzpcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4xNTE4OlxcdFxcdGRlZmF1bHQ6XFxuMTUxOTpcXHRcXHRcXHRpZiAoY29taW5nX3VwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU2OjI0LjAxMzc1NzE5MloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjU1MTk4ODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTW9uaXRvciBJbnRlcmZhY2UgRmxhZyBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGllZWU4MDIxMV9kb19vcGVuYCwgZm9yICpldmVyeSogbW9uaXRvciBpbnRlcmZhY2UsIHJlZ2FyZGxlc3Mgb2YgdGhlIGBNT05JVE9SX0ZMQUdfQUNUSVZFYCBzdGF0ZSwgYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgMSlgIGlzIHRyaWdnZXJlZC4gIFRoYXQncyB0aGUgaW5pdGlhbCBzZXR1cCwgcmlnaHQ/ICBUaGUgaW5jcmVtZW50LCBzbyB0byBzcGVhay5cblxuTm93LCB0aGUgcHJvYmxlbSBhcmlzZXMgaW4gYGllZWU4MDIxMV9kb19zdG9wYC4gIFByZXZpb3VzbHksIHRoZSBkZWNyZW1lbnQsIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKWAsIHdhcyAqY29uZGl0aW9uYWxseSogZXhlY3V0ZWQuIEl0IHdhcyB0cmFwcGVkICp3aXRoaW4qIGFuIGBpZmAgc3RhdGVtZW50LiBTcGVjaWZpY2FsbHksIGl0IHdhcyBvbmx5IGV4ZWN1dGVkIGlmICpib3RoKiBgTU9OSVRPUl9GTEFHX0FDVElWRWAgd2Fzbid0IHNldCwgKmFuZCogaWYgYE5PX1ZJUlRVQUxfTU9OSVRPUmAgd2Fzbid0IHRydWUsIHdoaWNoIGlzIGRldGVybWluZWQgYnkgYGllZWU4MDIxMV9od19jaGVja2AuXG5cblRoZSBrZXkgaGVyZSBpcyB0aGF0IGlmIGBNT05JVE9SX0ZMQUdfQUNUSVZFYCB3YXMgYWxyZWFkeSBzZXQgb3IgYE5PX1ZJUlRVQUxfTU9OSVRPUmAgd2FzIHRydWUsIHRoZSBjb3JyZXNwb25kaW5nIGRlY3JlbWVudCB3YXNuJ3QgaGFwcGVuaW5nIGluIGBpZWVlODAyMTFfZG9fc3RvcGAuICBUaGF0J3MgYSBkZWZpbml0ZSBpbWJhbGFuY2UuICBUaGlzIG1lYW50IHdlIHdlcmUgbGVha2luZyBvdXIgcmVmY291bnRpbmcsIG9yLCBtb3JlIGFjY3VyYXRlbHksIHRoZSAnYWN0aXZlIG1vbml0b3IgZmxhZycuXG5cblNvLCB0aGUgZml4IGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYW5kIGVsZWdhbnQuIE1vdmluZyB0aGF0IGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKWAgY2FsbCAqb3V0c2lkZSogdGhlIGBpZmAgaW4gYGllZWU4MDIxMV9kb19zdG9wYCB3aWxsIGVuc3VyZSB0aGF0IGZvciAqZXZlcnkqIGluY3JlbWVudCBpbiBgb3BlbmAsIHRoZXJlJ3MgYSBjb3JyZXNwb25kaW5nIGRlY3JlbWVudCBpbiBgc3RvcGAsIG5vIG1hdHRlciB3aGF0IHRoZSBtb25pdG9yJ3Mgc3RhdGUgaXMuICBUaGlzIGJhbGFuY2VzIHRoZSBmbGFnIHJlZmNvdW50aW5nIGFuZCBrZWVwcyB1cyBmcm9tIHJ1bm5pbmcgaW50byBwb3RlbnRpYWwgaXNzdWVzLiAgTm93LCBsZXQgbWUganVzdCBxdWlja2x5IHJldmlldyBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzYCBpdHNlbGYgdG8gbWFrZSBzdXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMDAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo1NjoyNy42Njg5NTg5NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDMzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL2lmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE3MDpcXHRcXHR9XFxuMTE3MTpcXHR9XFxuMTE3MjpcXHRcXG4xMTczOlxcdHZvaWQgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbjExNzQ6XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IGludCBvZmZzZXQpXFxuMTE3NTpcXHR7XFxuMTE3NjpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLVxcdTAwM2Vsb2NhbDtcXG4xMTc3OlxcdFxcdHUzMiBmbGFncyA9IHNkYXRhLVxcdTAwM2V1Lm1udHIuZmxhZ3M7XFxuMTE3ODpcXHRcXG4xMTc5OlxcdCNkZWZpbmUgQURKVVNUKF9mLCBfcylcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjExODA6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTU9OSVRPUl9GTEFHXyMjX2YpXFx0XFx0XFx0XFx0XFxcXFxcbjExODE6XFx0XFx0XFx0bG9jYWwtXFx1MDAzZWZpZl8jI19zICs9IG9mZnNldDtcXHRcXHRcXHRcXFxcXFxuMTE4MjpcXHRcXHR9IHdoaWxlICgwKVxcbjExODM6XFx0XFxuMTE4NDpcXHRcXHRBREpVU1QoRkNTRkFJTCwgZmNzZmFpbCk7XFxuMTE4NTpcXHRcXHRBREpVU1QoUExDUEZBSUwsIHBsY3BmYWlsKTtcXG4xMTg2OlxcdFxcdEFESlVTVChDT05UUk9MLCBjb250cm9sKTtcXG4xMTg3OlxcdFxcdEFESlVTVChDT05UUk9MLCBwc3BvbGwpO1xcbjExODg6XFx0XFx0QURKVVNUKE9USEVSX0JTUywgb3RoZXJfYnNzKTtcXG4xMTg5OlxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgTU9OSVRPUl9GTEFHX1NLSVBfVFgpKVxcbjExOTA6XFx0XFx0XFx0bG9jYWwtXFx1MDAzZXR4X21udHJzICs9IG9mZnNldDtcXG4xMTkxOlxcdFxcbjExOTI6XFx0I3VuZGVmIEFESlVTVFxcbjExOTM6XFx0fVxcbjExOTQ6XFx0XFxuMTE5NTpcXHRzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2V0X2RlZmF1bHRfcXVldWVzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbjExOTY6XFx0e1xcbjExOTc6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cXHUwMDNlbG9jYWw7XFxuMTE5ODpcXHRcXHRpbnQgaTtcXG4xMTk5OlxcdFxcbjEyMDA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElFRUU4MDIxMV9OVU1fQUNTOyBpKyspIHtcXG4xMjAxOlxcdFxcdFxcdGlmIChpZWVlODAyMTFfaHdfY2hlY2soXFx1MDAyNmxvY2FsLVxcdTAwM2VodywgUVVFVUVfQ09OVFJPTCkpXFxuMTIwMjpcXHRcXHRcXHRcXHRzZGF0YS1cXHUwMDNldmlmLmh3X3F1ZXVlW2ldID0gSUVFRTgwMjExX0lOVkFMX0hXX1FVRVVFO1xcbjEyMDM6XFx0XFx0XFx0ZWxzZSBpZiAobG9jYWwtXFx1MDAzZWh3LnF1ZXVlcyBcXHUwMDNlPSBJRUVFODAyMTFfTlVNX0FDUylcXG4xMjA0OlxcdFxcdFxcdFxcdHNkYXRhLVxcdTAwM2V2aWYuaHdfcXVldWVbaV0gPSBpO1xcbjEyMDU6XFx0XFx0XFx0ZWxzZVxcbjEyMDY6XFx0XFx0XFx0XFx0c2RhdGEtXFx1MDAzZXZpZi5od19xdWV1ZVtpXSA9IDA7XFxuMTIwNzpcXHRcXHR9XFxuMTIwODpcXHRcXHRzZGF0YS1cXHUwMDNldmlmLmNhYl9xdWV1ZSA9IElFRUU4MDIxMV9JTlZBTF9IV19RVUVVRTtcXG4xMjA5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTY6MjcuNjY5MjcyODhaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE2ODgxODUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBTYWZldHkgSW1wYWN0IG9mIGEgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgY2hhbmdlIGFuZCBpbW1lZGlhdGVseSBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIG1lbW9yeSBzYWZldHkgaW1wbGljYXRpb25zLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBtb3ZpbmcgdGhpcyBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSlgIGNhbGwgb3V0IG9mIGEgY29uZGl0aW9uYWwgYmxvY2sgaW4gYGllZWU4MDIxMV9kb19zdG9wKClgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaW4gYGllZWU4MDIxMV9kb19vcGVuKClgIHdlICphbHdheXMqIGNhbGwgYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgMSlgIGZvciBtb25pdG9yIGludGVyZmFjZXMsIHdoaWNoIGlzIGZpbmUuIFRoZSBwcmV2aW91cyBzZXR1cCBoYWQgYSBmbGF3OiB3aGVuIHN0b3BwaW5nIGEgbW9uaXRvciBpbnRlcmZhY2UgdGhhdCB3YXMgYWN0aXZlLCBvciBvbiBoYXJkd2FyZSB0aGF0ICpkaWRuJ3QqIHN1cHBvcnQgYSB2aXJ0dWFsIG1vbml0b3IsIHRoaXMgY2FsbCB3YXNuJ3QgbWFkZSwgbWVhbmluZyB0aG9zZSBpbnRlcm5hbCBjb3VudGVycyBpbiBgbG9jYWxgIHdlcmVuJ3QgZ2V0dGluZyBkZWNyZW1lbnRlZCBwcm9wZXJseS4gVGhhdCBtZWFucyB0aGUgYGxvY2FsYCBzdHJ1Y3QsIHdoaWNoIHRyYWNrcyBhbGwgdGhlc2Ugc3RhdGlzdGljcywgd291bGQgYmUgaW5jb25zaXN0ZW50IGFuZCBwb3RlbnRpYWxseSBsZWFkIHRvIGluYWNjdXJhdGUgc3RhdGUgdHJhY2tpbmcgaW4gdGhlIGRyaXZlci5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdGllcz8gTGV0J3MgYnJlYWsgaXQgZG93bjpcblxuKiAgIE5vIGtlcm5lbCB0byB1c2VyIG1lbW9yeSBjb3B5IGhhcHBlbmluZyBoZXJlLiBHb29kLlxuKiAgIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgYnVmZmVycyBpbnRyb2R1Y2VkLiBUaGF0J3MgYSByZWxpZWYuXG4qICAgTm8gcmVhZGluZyBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBicmFuY2hpbmcgb24gdGhlbS4gQ2hlY2suXG4qICAgVGhlIGNoYW5nZSBkb2Vzbid0IHRvdWNoIGJvdW5kcyBjaGVja3MsIGJ1ZmZlciBsZW5ndGhzLCBvciBhbnkgZGF0YSBjb3B5aW5nIGxvZ2ljLiBFeGNlbGxlbnQuXG4qICAgQW5kIHRob3NlIGNvdW50ZXJzIHRoYXQgYXJlIGJlaW5nIGFkanVzdGVkPyBUaGV5J3JlIGp1c3QgaW50ZWdlcnMgd2l0aGluIHRoZSBgaWVlZTgwMjExX2xvY2FsYCBzdHJ1Y3R1cmUuIFNvLCB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGFueSByYXcgcG9pbnRlcnMgb3IgY29tcGxleCBtZW1vcnkgbWFuaXB1bGF0aW9ucy5cblxuQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSdtIHByZXR0eSBjb25maWRlbnQgdGhhdCB0aGlzIGNoYW5nZSAqZG9lc24ndCogaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU3RhbmRhcmQgZnV6emluZywgS0FTQU4sIGFuZCByZWd1bGFyIHRlc3Rpbmcgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3Vlcy4gTm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGhlcmUuXG5cbk9rYXksIG5vdyBsZXQncyBnZXQgcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Nzg2LCJPdXRwdXRUb2tlbnMiOjIyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU2OjMxLjgzODA5MzY4OVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gYWNjb3VudGluZyBidWcgaW4gbWFjODAyMTEgbW9uaXRvciBpbnRlcmZhY2UgaGFuZGxpbmcgYnkgbW92aW5nIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKWAgb3V0c2lkZSB0aGUgY29uZGl0aW9uYWwgY2hlY2sgaW4gYGllZWU4MDIxMV9kb19zdG9wKClgLCBwcm9wZXJseSBiYWxhbmNpbmcgdGhlIHVuY29uZGl0aW9uYWwgY2FsbCB0byBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAxKWAgaW4gYGllZWU4MDIxMV9kb19vcGVuKClgLiBcXG5cXG5UaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgaW50ZXJuYWwgbW9uaXRvciBmbGFnIGNvdW50ZXJzIG9uIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYCAoc3VjaCBhcyBgbG9jYWwtXFx1MDAzZWZpZl9mY3NmYWlsYCwgYGxvY2FsLVxcdTAwM2V0eF9tbnRyc2AsIGV0Yy4pLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBpbml0aWFsaXphdGlvbiBsb2dpYy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLCBhbmQgc3RhbmRhcmQgS0FTQU4vdGVzdGluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGFjY291bnRpbmcgYnVnIGluIG1hYzgwMjExIG1vbml0b3IgaW50ZXJmYWNlIGhhbmRsaW5nIGJ5IG1vdmluZyBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSlgIG91dHNpZGUgdGhlIGNvbmRpdGlvbmFsIGNoZWNrIGluIGBpZWVlODAyMTFfZG9fc3RvcCgpYCwgcHJvcGVybHkgYmFsYW5jaW5nIHRoZSB1bmNvbmRpdGlvbmFsIGNhbGwgdG8gYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgMSlgIGluIGBpZWVlODAyMTFfZG9fb3BlbigpYC4gXFxuXFxuVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGludGVybmFsIG1vbml0b3IgZmxhZyBjb3VudGVycyBvbiBgc3RydWN0IGllZWU4MDIxMV9sb2NhbGAgKHN1Y2ggYXMgYGxvY2FsLVxcdTAwM2VmaWZfZmNzZmFpbGAsIGBsb2NhbC1cXHUwMDNldHhfbW50cnNgLCBldGMuKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiwgYW5kIHN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4tt5c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 07:31:57 +0000 UTC FinishedAt: 2026-09-06 07:56:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "01c15a8b936d319f3daf7ffaddfe44ca5bd40504", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "CFG80211", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "01c15a8b936d319f3daf7ffaddfe44ca5bd40504", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "CFG80211", "MAC80211_HWSIM" ], "series_id": "7ba6c3bf-e40a-4b43-8597-e8c3cd57787a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ieee80211_do_stop", "ieee80211_adjust_monitor_flags", "ieee80211_stop", "ieee80211_runtime_change_iftype", "ieee80211_set_mon_options" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX2RvX3N0b3AmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9zdG9wJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9ydW50aW1lX2NoYW5nZV9pZnR5cGUmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3NldF9tb25fb3B0aW9ucyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGFjY291bnRpbmcgYnVnIGluIG1hYzgwMjExIG1vbml0b3IgaW50ZXJmYWNlIGhhbmRsaW5nIGJ5IG1vdmluZyBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSlgIG91dHNpZGUgdGhlIGNvbmRpdGlvbmFsIGNoZWNrIGluIGBpZWVlODAyMTFfZG9fc3RvcCgpYCwgcHJvcGVybHkgYmFsYW5jaW5nIHRoZSB1bmNvbmRpdGlvbmFsIGNhbGwgdG8gYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgMSlgIGluIGBpZWVlODAyMTFfZG9fb3BlbigpYC4gXG5cblRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBpbnRlcm5hbCBtb25pdG9yIGZsYWcgY291bnRlcnMgb24gYHN0cnVjdCBpZWVlODAyMTFfbG9jYWxgIChzdWNoIGFzIGBsb2NhbC1cdTAwM2VmaWZfZmNzZmFpbGAsIGBsb2NhbC1cdTAwM2V0eF9tbnRyc2AsIGV0Yy4pLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBpbml0aWFsaXphdGlvbiBsb2dpYy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLCBhbmQgc3RhbmRhcmQgS0FTQU4vdGVzdGluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtb25pdG9yIGludGVyZmFjZSB0ZWFyZG93biBoYW5kbGluZyBpbiBuZXQvbWFjODAyMTEvaWZhY2UuYyAoaWVlZTgwMjExX2RvX3N0b3ApIGJ5IGVuc3VyaW5nIHRoYXQgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKCkgaXMgYWx3YXlzIGludm9rZWQgdG8gZGVjcmVtZW50IG1vbml0b3IgZmxhZ3Mgd2hlbiBzdG9wcGluZyBhIG1vbml0b3IgaW50ZXJmYWNlLCByZWdhcmRsZXNzIG9mIHRoZSB2aXJ0dWFsIG1vbml0b3Igc3RhdHVzLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBtYWM4MDIxMV9od3NpbSBhbmQgbmw4MDIxMS9ydG5ldGxpbmsgaW50ZXJmYWNlIGNvbnRyb2wgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDlkODg3YjlhMDBmOTc0NzUwYTIxNTgwYmJlOTY5YWU2MTZjNzIzZGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDA3OjU1OjQwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbmluZGV4IDQzNDYwYTcwNWE2YmQuLjliNDAwY2FmMjc2NTIgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbkBAIC02MzAsOCAmIzQzOzYzMCw5IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9kb19zdG9wKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBib29sIGdvaW5nX2RvXG4gXHRcdFx0XHRod19yZWNvbmZfZmxhZ3MgfD0gSUVFRTgwMjExX0NPTkZfQ0hBTkdFX01PTklUT1I7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpO1xuIFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU46XG4gXHRcdC8qIENoZWNrIGlmIGFueSBvcGVuIE5BTl9EQVRBIGludGVyZmFjZXMgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2llZWU4MDIxMV9kb19zdG9wJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfc3RvcCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfcnVudGltZV9jaGFuZ2VfaWZ0eXBlJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9zZXRfbW9uX29wdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbW9uaXRvciBpbnRlcmZhY2UgdGVhcmRvd24gaGFuZGxpbmcgaW4gbmV0L21hYzgwMjExL2lmYWNlLmMgKGllZWU4MDIxMV9kb19zdG9wKSBieSBlbnN1cmluZyB0aGF0IGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncygpIGlzIGFsd2F5cyBpbnZva2VkIHRvIGRlY3JlbWVudCBtb25pdG9yIGZsYWdzIHdoZW4gc3RvcHBpbmcgYSBtb25pdG9yIGludGVyZmFjZSwgcmVnYXJkbGVzcyBvZiB0aGUgdmlydHVhbCBtb25pdG9yIHN0YXR1cy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWFjODAyMTFfaHdzaW0gYW5kIG5sODAyMTEvcnRuZXRsaW5rIGludGVyZmFjZSBjb250cm9sIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZDg4N2I5YTAwZjk3NDc1MGEyMTU4MGJiZTk2OWFlNjE2YzcyM2RmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAwNzo1NTo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmMKaW5kZXggNDM0NjBhNzA1YTZiZC4uOWI0MDBjYWYyNzY1MiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2lmYWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2lmYWNlLmMKQEAgLTYzMCw4ICYjNDM7NjMwLDkgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2RvX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGJvb2wgZ29pbmdfZG8KIAkJCQlod19yZWNvbmZfZmxhZ3MgfD0gSUVFRTgwMjExX0NPTkZfQ0hBTkdFX01PTklUT1I7CiAJCQl9CiAKLQkJCWllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpOwogCQl9CiYjNDM7CiYjNDM7CQlpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9OQU46CiAJCS8qIENoZWNrIGlmIGFueSBvcGVuIE5BTl9EQVRBIGludGVyZmFjZXMgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzMAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHRoZSBNQUM4MDIxMSBJbnRlcmZhY2UgQ29kZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCwgd2hpY2ggZnJvbSB0aGUgY29udGV4dCBjbHVlcywgc2VlbXMgdG8gYmUgZm9jdXNlZCBvbiB0aGUgbmV0d29yayBpbnRlcmZhY2Ugd2l0aGluIHRoZSBNQUM4MDIxMSBzdWJzeXN0ZW0uIFRoZSBmaWxlIG9mIGludGVyZXN0IGlzIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AuIEkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIHRoYXQgYXJlYSwgc28gbXkgZmlyc3Qgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGF0IGZpbGUgYW5kIGdldCBhIGZlZWwgZm9yIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBNeSBndXQgdGVsbHMgbWUgdGhpcyB3aWxsIGJlIGF0LCBvciBhcm91bmQsIGxpbmUgNjMwLiBJdCYjMzk7cyB0aW1lIHRvIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBpbiB0aGF0IHBhcnRpY3VsYXIgc3BvdCBvZiBgaWZhY2UuY2AuIFRoaXMgY29udGV4dCBpcyBjcnVjaWFsLCBiZWZvcmUgSSBldmVuIHN0YXJ0IHRvIHRydWx5IGFuYWx5emUgdGhlIGltcGFjdCBvZiB0aGUgY2hhbmdlcy4gVGhpcyBzaG91bGQgcHJvdmlkZSBtZSB3aXRoIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBnaXZlIG1lIGEgZmVlbCBmb3IgdGhlIHNwZWNpZmljIHBpZWNlLiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCB0byBmb3JtIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9pZmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MTA6XHRcdGlmIChnb2luZ19kb3duKVxuIDYxMTpcdFx0XHRsb2NhbC1cdTAwM2VvcGVuX2NvdW50LS07XG4gNjEyOlx0XG4gNjEzOlx0XHRzd2l0Y2ggKHNkYXRhLVx1MDAzZXZpZi50eXBlKSB7XG4gNjE0Olx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQX1ZMQU46XG4gNjE1Olx0XHRcdGxpc3RfZGVsKFx1MDAyNnNkYXRhLVx1MDAzZXUudmxhbi5saXN0KTtcbiA2MTY6XHRcdFx0UkNVX0lOSVRfUE9JTlRFUihzZGF0YS1cdTAwM2V2aWYuYnNzX2NvbmYuY2hhbmN0eF9jb25mLCBOVUxMKTtcbiA2MTc6XHRcdFx0Lyogc2VlIGNvbW1lbnQgaW4gdGhlIGRlZmF1bHQgY2FzZSBiZWxvdyAqL1xuIDYxODpcdFx0XHRpZWVlODAyMTFfZnJlZV9rZXlzKHNkYXRhLCB0cnVlKTtcbiA2MTk6XHRcdFx0Lyogbm8gbmVlZCB0byB0ZWxsIGRyaXZlciAqL1xuIDYyMDpcdFx0XHRicmVhaztcbiA2MjE6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjpcbiA2MjI6XHRcdFx0bG9jYWwtXHUwMDNlbW9uaXRvcnMtLTtcbiA2MjM6XHRcbiA2MjQ6XHRcdFx0aWYgKCEoc2RhdGEtXHUwMDNldS5tbnRyLmZsYWdzIFx1MDAyNiBNT05JVE9SX0ZMQUdfQUNUSVZFKSBcdTAwMjZcdTAwMjZcbiA2MjU6XHRcdFx0ICAgICFpZWVlODAyMTFfaHdfY2hlY2soXHUwMDI2bG9jYWwtXHUwMDNlaHcsIE5PX1ZJUlRVQUxfTU9OSVRPUikpIHtcbiA2MjY6XHRcbiA2Mjc6XHRcdFx0XHRsb2NhbC1cdTAwM2V2aXJ0X21vbml0b3JzLS07XG4gNjI4Olx0XHRcdFx0aWYgKGxvY2FsLVx1MDAzZXZpcnRfbW9uaXRvcnMgPT0gMCkge1xuIDYyOTpcdFx0XHRcdFx0bG9jYWwtXHUwMDNlaHcuY29uZi5mbGFncyBcdTAwMjY9IH5JRUVFODAyMTFfQ09ORl9NT05JVE9SO1xuIDYzMDpcdFx0XHRcdFx0aHdfcmVjb25mX2ZsYWdzIHw9IElFRUU4MDIxMV9DT05GX0NIQU5HRV9NT05JVE9SO1xuIDYzMTpcdFx0XHRcdH1cbiA2MzI6XHRcbiA2MzM6XHRcdFx0fVxuIDYzNDpcdFxuIDYzNTpcdFx0XHRpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKTtcbiA2MzY6XHRcdFx0YnJlYWs7XG4gNjM3Olx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX05BTjpcbiA2Mzg6XHRcdFx0LyogQ2hlY2sgaWYgYW55IG9wZW4gTkFOX0RBVEEgaW50ZXJmYWNlcyAqL1xuIDYzOTpcdFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbiA2NDA6XHRcdFx0XHRXQVJOX09OKGl0ZXItXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEEgXHUwMDI2XHUwMDI2XG4gNjQxOlx0XHRcdFx0XHRpZWVlODAyMTFfc2RhdGFfcnVubmluZyhpdGVyKSk7XG4gNjQyOlx0XHRcdH1cbiA2NDM6XHRcbiA2NDQ6XHRcdFx0LyogY2xlYW4gYWxsIHRoZSBmdW5jdGlvbnMgKi9cbiA2NDU6XHRcdFx0aWYgKCEobG9jYWwtXHUwMDNlaHcud2lwaHktXHUwMDNlbmFuX2NhcGEuZmxhZ3MgXHUwMDI2XG4gNjQ2Olx0XHRcdCAgICAgIFdJUEhZX05BTl9GTEFHU19VU0VSU1BBQ0VfREUpKSB7XG4gNjQ3Olx0XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNkYXRhLVx1MDAzZXUubmFuLmRlLmZ1bmNfbG9jayk7XG4gNjQ4Olx0XG4gNjQ5Olx0XHRcdFx0aWRyX2Zvcl9lYWNoX2VudHJ5KFx1MDAyNnNkYXRhLVx1MDAzZXUubmFuLmRlLmZ1bmN0aW9uX2luc3RfaWRzLFxuIDY1MDpcdFx0XHRcdFx0XHQgICBmdW5jLCBpKSB7XG4gNjUxOlx0XHRcdFx0XHRpZHJfcmVtb3ZlKFx1MDAyNnNkYXRhLVx1MDAzZXUubmFuLmRlLmZ1bmN0aW9uX2luc3RfaWRzLCBpKTtcbiA2NTI6XHRcdFx0XHRcdGNmZzgwMjExX2ZyZWVfbmFuX2Z1bmMoZnVuYyk7XG4gNjUzOlx0XHRcdFx0fVxuIDY1NDpcdFx0XHRcdGlkcl9kZXN0cm95KFx1MDAyNnNkYXRhLVx1MDAzZXUubmFuLmRlLmZ1bmN0aW9uX2luc3RfaWRzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDc2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzYCBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBvZiBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2Ugd2hlcmUgaXQmIzM5O3MgY2FsbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGludGVyZmFjZSBvcGVyYXRpb25zLiBTaW5jZSBpdCBzb3VuZHMgbGlrZSB0aGlzIGZ1bmN0aW9uIGlzIHJlbGF0ZWQgdG8gbW9uaXRvcmluZyBtb2RlLCBJJiMzOTtsbCBmb2N1cyBvbiBgaWVlZTgwMjExX2RvX29wZW5gLCBgaWVlZTgwMjExX2RvX3N0b3BgLCBhbmQgb3RoZXIgcGxhY2VzIHdoZXJlIGludGVyZmFjZSBjb25maWd1cmF0aW9uIGhhcHBlbnMuIFRob3NlIGZ1bmN0aW9ucyBhcmUgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZXMuIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBmb3IgYG5ldC9tYWM4MDIxMS9pZmFjZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyA1MDAgdG8gNjEwLiBUaGF0IGJsb2NrIHNob3VsZCBjb250YWluIHRoZSBjb3JlIGxvZ2ljIGZvciBpbnRlcmZhY2UgbWFuYWdlbWVudCwgc28gaXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGlkZW50aWZ5IGFueSBjYWxscyB0byB0aGF0IGZ1bmN0aW9uIGFuZCB3aGF0IHBhcmFtZXRlcnMgaXQmIzM5O3MgbGlrZWx5IGJlaW5nIHBhc3NlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRob3NlIGZsYWdzIGFyZSBiZWluZyBhZGp1c3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9pZmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTAwOlx0XHRcdGllZWU4MDIxMV9zY2FuX2NhbmNlbChsb2NhbCk7XG4gNTAxOlx0XG4gNTAyOlx0XHRpZWVlODAyMTFfcm9jX3B1cmdlKGxvY2FsLCBzZGF0YSk7XG4gNTAzOlx0XG4gNTA0Olx0XHRzd2l0Y2ggKHNkYXRhLVx1MDAzZXZpZi50eXBlKSB7XG4gNTA1Olx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046XG4gNTA2Olx0XHRcdGllZWU4MDIxMV9tZ2Rfc3RvcChzZGF0YSk7XG4gNTA3Olx0XHRcdGJyZWFrO1xuIDUwODpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzpcbiA1MDk6XHRcdFx0aWVlZTgwMjExX2lic3Nfc3RvcChzZGF0YSk7XG4gNTEwOlx0XHRcdGJyZWFrO1xuIDUxMTpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOlxuIDUxMjpcdFx0XHRsaXN0X2RlbF9yY3UoXHUwMDI2c2RhdGEtXHUwMDNldS5tbnRyLmxpc3QpO1xuIDUxMzpcdFx0XHRicmVhaztcbiA1MTQ6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTjpcbiA1MTU6XHRcdFx0aWVlZTgwMjExX2Fwdmxhbl9saW5rX2NsZWFyKHNkYXRhKTtcbiA1MTY6XHRcdFx0YnJlYWs7XG4gNTE3Olx0XHRkZWZhdWx0OlxuIDUxODpcdFx0XHRicmVhaztcbiA1MTk6XHRcdH1cbiA1MjA6XHRcbiA1MjE6XHRcdC8qXG4gNTIyOlx0XHQgKiBSZW1vdmUgYWxsIHN0YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGludGVyZmFjZS5cbiA1MjM6XHRcdCAqXG4gNTI0Olx0XHQgKiBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgY2FsbGluZyBvcHMtXHUwMDNlcmVtb3ZlX2ludGVyZmFjZSgpXG4gNTI1Olx0XHQgKiBiZWNhdXNlIG90aGVyd2lzZSB3ZSBjYW4gbGF0ZXIgaW52b2tlIG9wcy1cdTAwM2VzdGFfbm90aWZ5KClcbiA1MjY6XHRcdCAqIHdoZW5ldmVyIHRoZSBTVEFzIGFyZSByZW1vdmVkLCBhbmQgdGhhdCBpbnZhbGlkYXRlcyBkcml2ZXJcbiA1Mjc6XHRcdCAqIGFzc3VtcHRpb25zIGFib3V0IGFsd2F5cyBnZXR0aW5nIGEgdmlmIHBvaW50ZXIgdGhhdCBpcyB2YWxpZFxuIDUyODpcdFx0ICogKGJlY2F1c2UgaWYgd2UgcmVtb3ZlIGEgU1RBIGFmdGVyIG9wcy1cdTAwM2VyZW1vdmVfaW50ZXJmYWNlKClcbiA1Mjk6XHRcdCAqIHRoZSBkcml2ZXIgd2lsbCBoYXZlIHJlbW92ZWQgdGhlIHZpZiBpbmZvIGFscmVhZHkhKVxuIDUzMDpcdFx0ICpcbiA1MzE6XHRcdCAqIEZvciBBUF9WTEFOcywgTkFOIGFuZCBOQU5fREFUQSBzdGF0aW9ucyBtYXkgZXhpc3Qgc2luY2UgdGhlcmUmIzM5O3NcbiA1MzI6XHRcdCAqIG5vdGhpbmcgZWxzZSB0aGF0IHdvdWxkIGhhdmUgcmVtb3ZlZCB0aGVtLCBidXQgaW4gb3RoZXIgbW9kZXMgdGhlcmVcbiA1MzM6XHRcdCAqIHNob3VsZG4mIzM5O3QgYmUgYW55IHN0YXRpb25zLlxuIDUzNDpcdFx0ICovXG4gNTM1Olx0XHRmbHVzaGVkID0gc3RhX2luZm9fZmx1c2goc2RhdGEsIC0xKTtcbiA1MzY6XHRcdFdBUk5fT05fT05DRShzZGF0YS1cdTAwM2V2aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOIFx1MDAyNlx1MDAyNlxuIDUzNzpcdFx0XHQgICAgIHNkYXRhLVx1MDAzZXZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTiBcdTAwMjZcdTAwMjZcbiA1Mzg6XHRcdFx0ICAgICBzZGF0YS1cdTAwM2V2aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSBcdTAwMjZcdTAwMjYgZmx1c2hlZCBcdTAwM2UgMCk7XG4gNTM5Olx0XG4gNTQwOlx0XHQvKiBkb24mIzM5O3QgY291bnQgdGhpcyBpbnRlcmZhY2UgZm9yIGFsbG11bHRpIHdoaWxlIGl0IGlzIGRvd24gKi9cbiA1NDE6XHRcdGlmIChzZGF0YS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1NEQVRBX0FMTE1VTFRJKVxuIDU0MjpcdFx0XHRhdG9taWNfZGVjKFx1MDAyNmxvY2FsLVx1MDAzZWlmZl9hbGxtdWx0aXMpO1xuIDU0MzpcdFxuIDU0NDpcdFx0aWYgKHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7XG4gNTQ1Olx0XHRcdGxvY2FsLVx1MDAzZWZpZl9wc3BvbGwtLTtcbiA1NDY6XHRcdFx0bG9jYWwtXHUwMDNlZmlmX3Byb2JlX3JlcS0tO1xuIDU0NzpcdFx0fSBlbHNlIGlmIChzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykge1xuIDU0ODpcdFx0XHRsb2NhbC1cdTAwM2VmaWZfcHJvYmVfcmVxLS07XG4gNTQ5Olx0XHR9XG4gNTUwOlx0XG4gNTUxOlx0XHRpZiAoc2RhdGEtXHUwMDNlZGV2KSB7XG4gNTUyOlx0XHRcdG5ldGlmX2FkZHJfbG9ja19iaChzZGF0YS1cdTAwM2VkZXYpO1xuIDU1MzpcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bG9jYWwtXHUwMDNlZmlsdGVyX2xvY2spO1xuIDU1NDpcdFx0XHRfX2h3X2FkZHJfdW5zeW5jKFx1MDAyNmxvY2FsLVx1MDAzZW1jX2xpc3QsIFx1MDAyNnNkYXRhLVx1MDAzZWRldi1cdTAwM2VtYyxcbiA1NTU6XHRcdFx0XHRcdCBzZGF0YS1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4pO1xuIDU1NjpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZsb2NhbC1cdTAwM2VmaWx0ZXJfbG9jayk7XG4gNTU3Olx0XHRcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKHNkYXRhLVx1MDAzZWRldik7XG4gNTU4Olx0XHR9XG4gNTU5Olx0XG4gNTYwOlx0XHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZsb2NhbC1cdTAwM2VkeW5hbWljX3BzX3RpbWVyKTtcbiA1NjE6XHRcdHdpcGh5X3dvcmtfY2FuY2VsKGxvY2FsLVx1MDAzZWh3LndpcGh5LCBcdTAwMjZsb2NhbC1cdTAwM2VkeW5hbWljX3BzX2VuYWJsZV93b3JrKTtcbiA1NjI6XHRcbiA1NjM6XHRcdFdBUk4oaWVlZTgwMjExX3ZpZl9pc19tbGQoXHUwMDI2c2RhdGEtXHUwMDNldmlmKSxcbiA1NjQ6XHRcdCAgICAgXCYjMzQ7ZGVzdHJveWluZyBpbnRlcmZhY2Ugd2l0aCB2YWxpZCBsaW5rcyAweCUwNHhcXG5cJiMzNDssXG4gNTY1Olx0XHQgICAgIHNkYXRhLVx1MDAzZXZpZi52YWxpZF9saW5rcyk7XG4gNTY2Olx0XG4gNTY3Olx0XHRzZGF0YS1cdTAwM2V2aWYuYnNzX2NvbmYuY3NhX2FjdGl2ZSA9IGZhbHNlO1xuIDU2ODpcdFx0aWYgKHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pXG4gNTY5Olx0XHRcdHNkYXRhLVx1MDAzZWRlZmxpbmsudS5tZ2QuY3NhLndhaXRpbmdfYmNuID0gZmFsc2U7XG4gNTcwOlx0XHRpZWVlODAyMTFfdmlmX3VuYmxvY2tfcXVldWVzX2NzYShzZGF0YSk7XG4gNTcxOlx0XG4gNTcyOlx0XHR3aXBoeV93b3JrX2NhbmNlbChsb2NhbC1cdTAwM2Vody53aXBoeSwgXHUwMDI2c2RhdGEtXHUwMDNlZGVmbGluay5jc2EuZmluYWxpemVfd29yayk7XG4gNTczOlx0XHR3aXBoeV93b3JrX2NhbmNlbChsb2NhbC1cdTAwM2Vody53aXBoeSxcbiA1NzQ6XHRcdFx0XHQgIFx1MDAyNnNkYXRhLVx1MDAzZWRlZmxpbmsuY29sb3JfY2hhbmdlX2ZpbmFsaXplX3dvcmspO1xuIDU3NTpcdFx0d2lwaHlfaHJ0aW1lcl93b3JrX2NhbmNlbChsb2NhbC1cdTAwM2Vody53aXBoeSxcbiA1NzY6XHRcdFx0XHRcdCAgXHUwMDI2c2RhdGEtXHUwMDNlZGVmbGluay5kZnNfY2FjX3RpbWVyX3dvcmspO1xuIDU3NzpcdFxuIDU3ODpcdFx0aWYgKHNkYXRhLVx1MDAzZXdkZXYubGlua3NbMF0uY2FjX3N0YXJ0ZWQpIHtcbiA1Nzk6XHRcdFx0Y2hhbmRlZiA9IHNkYXRhLVx1MDAzZXZpZi5ic3NfY29uZi5jaGFucmVxLm9wZXI7XG4gNTgwOlx0XHRcdFdBUk5fT04obG9jYWwtXHUwMDNlc3VzcGVuZGVkKTtcbiA1ODE6XHRcdFx0aWVlZTgwMjExX2xpbmtfcmVsZWFzZV9jaGFubmVsKFx1MDAyNnNkYXRhLVx1MDAzZWRlZmxpbmspO1xuIDU4MjpcdFx0XHRjZmc4MDIxMV9jYWNfZXZlbnQoc2RhdGEtXHUwMDNlZGV2LCBcdTAwMjZjaGFuZGVmLFxuIDU4MzpcdFx0XHRcdFx0ICAgTkw4MDIxMV9SQURBUl9DQUNfQUJPUlRFRCxcbiA1ODQ6XHRcdFx0XHRcdCAgIEdGUF9LRVJORUwsIDApO1xuIDU4NTpcdFx0fVxuIDU4NjpcdFxuIDU4NzpcdFx0aWYgKHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7XG4gNTg4Olx0XHRcdFdBUk5fT04oIWxpc3RfZW1wdHkoXHUwMDI2c2RhdGEtXHUwMDNldS5hcC52bGFucykpO1xuIDU4OTpcdFx0fSBlbHNlIGlmIChzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKSB7XG4gNTkwOlx0XHRcdC8qIHJlbW92ZSBhbGwgcGFja2V0cyBpbiBwYXJlbnQgYmNfYnVmIHBvaW50aW5nIHRvIHRoaXMgZGV2ICovXG4gNTkxOlx0XHRcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZmcmVlcSk7XG4gNTkyOlx0XHRcdHBzID0gXHUwMDI2c2RhdGEtXHUwMDNlYnNzLVx1MDAzZXBzO1xuIDU5MzpcdFxuIDU5NDpcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwcy1cdTAwM2ViY19idWYubG9jaywgZmxhZ3MpO1xuIDU5NTpcdFx0XHRza2JfcXVldWVfd2Fsa19zYWZlKFx1MDAyNnBzLVx1MDAzZWJjX2J1Ziwgc2tiLCB0bXApIHtcbiA1OTY6XHRcdFx0XHRpZiAoc2tiLVx1MDAzZWRldiA9PSBzZGF0YS1cdTAwM2VkZXYpIHtcbiA1OTc6XHRcdFx0XHRcdF9fc2tiX3VubGluayhza2IsIFx1MDAyNnBzLVx1MDAzZWJjX2J1Zik7XG4gNTk4Olx0XHRcdFx0XHRsb2NhbC1cdTAwM2V0b3RhbF9wc19idWZmZXJlZC0tO1xuIDU5OTpcdFx0XHRcdFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZmcmVlcSwgc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzI2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbWFjODAyMTEgTW9uaXRvciBNb2RlIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIGBpZWVlODAyMTFfZG9fc3RvcCgpYCwgSSBzZWUgdGhhdCB0aGUgY2FsbCB0byBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSlgIGhhcyBiZWVuIG1vdmVkIG91dHNpZGUgb2YgdGhhdCBjb25kaXRpb25hbCBibG9jay4gVGhhdCYjMzk7cyBhIGtleSBjaGFuZ2UsIGFuZCBpdCBoYXMgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zLiBCZWZvcmUsIHRoaXMgZGVjcmVtZW50IGluIG1vbml0b3IgZmxhZ3Mgd2FzIG9ubHkgaGFwcGVuaW5nIGlmIHRoZSBtb25pdG9yIGludGVyZmFjZSB3YXNuJiMzOTt0IGFjdGl2ZWx5IHVzZWQgYW5kIHRoZXJlIHdlcmUgbm8gdmlydHVhbCBtb25pdG9ycyByZW1haW5pbmcuIE5vdywgaXQgaGFwcGVucyB1bmNvbmRpdGlvbmFsbHkuCgpTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgd2FzIGRvbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYWx3YXlzIGRlY3JlbWVudGluZyB0aGUgbW9uaXRvciBmbGFncywgcmVnYXJkbGVzcyBvZiB0aGUgYWN0aXZlIHN0YXRlIG9yIHRoZSB2aXJ0dWFsIG1vbml0b3IgY291bnQuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgZmxhZ3MgYXJlICphZGp1c3RlZCogb24gdGhlIG9wZW4vc3RhcnQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgdGhhdCBvcGVucyBvciBzdGFydHMgYW4gaW50ZXJmYWNlLCBzbyBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgYGllZWU4MDIxMV9kb19vcGVuYCBpbiBgbmV0L21hYzgwMjExL2lmYWNlLmNgLiBTZWVpbmcgaG93IHRoZSBmbGFncyBhcmUgdXNlZCBpbiB0aGUgb3Blbi9zdGFydCBvcGVyYXRpb24gd2lsbCBob3BlZnVsbHkgc2hlZCBsaWdodCBvbiB3aGF0IHRoaXMgdW5jb25kaXRpb25hbCBkZWNyZW1lbnQgaXMgZGVzaWduZWQgdG8gYWNoaWV2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZGp1c3RfbW9uaXRvcl9mbGFncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvY2ZnLmM9OTY9c3RhdGljIGludCBpZWVlODAyMTFfc2V0X21vbl9vcHRpb25zKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy0xNDItXHRcdGlmIChpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpIHtcbm5ldC9tYWM4MDIxMS9jZmcuYzoxNDM6XHRcdFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtMTQ0LVx0XHRcdHNkYXRhLVx1MDAzZXUubW50ci5mbGFncyA9IHBhcmFtcy1cdTAwM2VmbGFncztcbm5ldC9tYWM4MDIxMS9jZmcuYzoxNDU6XHRcdFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAxKTtcbm5ldC9tYWM4MDIxMS9jZmcuYy0xNDYtXG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MjIwMj12b2lkIGllZWU4MDIxMV9yZWNhbGNfaWRsZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyMjAzOnZvaWQgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjIwNC1cdFx0XHRcdCAgICBjb25zdCBpbnQgb2Zmc2V0KTtcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz00Nzk9c3RhdGljIHZvaWQgaWVlZTgwMjExX2RvX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGJvb2wgZ29pbmdfZG93bilcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy02MzQtXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo2MzU6XHRcdGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpO1xubmV0L21hYzgwMjExL2lmYWNlLmMtNjM2LVx0XHRicmVhaztcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xMTU2PXZvaWQgaWVlZTgwMjExX3JlY2FsY19vZmZsb2FkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTExNzItXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoxMTczOnZvaWQgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL2lmYWNlLmMtMTE3NC1cdFx0XHRcdCAgICBjb25zdCBpbnQgb2Zmc2V0KVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTEzNjY9aW50IGllZWU4MDIxMV9kb19vcGVuKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGJvb2wgY29taW5nX3VwKVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTE1MDYtXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoxNTA3Olx0XHRpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIDEpO1xubmV0L21hYzgwMjExL2lmYWNlLmMtMTUwOC1cdFx0aWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIobG9jYWwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3NzcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTUFDODAyMTEgSW50ZXJmYWNlIE9wZW5pbmcqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyZmFjZSBvcGVuaW5nIHByb2NlZHVyZSB3aXRoaW4gdGhlIG1hYzgwMjExIGZyYW1ld29yay4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGl0JiMzOTtzIGhhbmRsZWQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBqdW1wIGludG8gdGhlIGBpZWVlODAyMTFfZG9fb3BlbmAgZnVuY3Rpb24sIHdoaWNoIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgZW50cnkgcG9pbnQgZm9yIHRoaXMgcHJvY2Vzcy4gSSYjMzk7bSBnb2luZyB0byBoZWFkIG92ZXIgdG8gdGhlIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AgZmlsZSBhbmQgemVybyBpbiBvbiB0aGUgdmljaW5pdHkgb2YgbGluZSAxNTAwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgY2FsbCBmbG93IGFuZCBzZWUgd2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kIHdoZW4gYSB3aXJlbGVzcyBpbnRlcmZhY2UgaXMgYnJvdWdodCB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvaWZhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ5NTpcdFxuMTQ5NjpcdFx0XHRcdGxvY2FsLVx1MDAzZXZpcnRfbW9uaXRvcnMmIzQzOyYjNDM7O1xuMTQ5NzpcdFxuMTQ5ODpcdFx0XHRcdC8qIG11c3QgYmUgYmVmb3JlIHRoZSBjYWxsIHRvIGllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyICovXG4xNDk5Olx0XHRcdFx0aWYgKGxvY2FsLVx1MDAzZXZpcnRfbW9uaXRvcnMgPT0gMSkge1xuMTUwMDpcdFx0XHRcdFx0bG9jYWwtXHUwMDNlaHcuY29uZi5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9NT05JVE9SO1xuMTUwMTpcdFx0XHRcdFx0aHdfcmVjb25mX2ZsYWdzIHw9IElFRUU4MDIxMV9DT05GX0NIQU5HRV9NT05JVE9SO1xuMTUwMjpcdFx0XHRcdH1cbjE1MDM6XHRcdFx0fVxuMTUwNDpcdFxuMTUwNTpcdFx0XHRsb2NhbC1cdTAwM2Vtb25pdG9ycyYjNDM7JiM0Mzs7XG4xNTA2Olx0XG4xNTA3Olx0XHRcdGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgMSk7XG4xNTA4Olx0XHRcdGllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTtcbjE1MDk6XHRcdFx0aWVlZTgwMjExX3JlY2FsY19vZmZsb2FkKGxvY2FsKTtcbjE1MTA6XHRcdFx0aWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTtcbjE1MTE6XHRcbjE1MTI6XHRcdFx0bmV0aWZfY2Fycmllcl9vbihkZXYpO1xuMTUxMzpcdFx0XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZzZGF0YS1cdTAwM2V1Lm1udHIubGlzdCwgXHUwMDI2bG9jYWwtXHUwMDNlbW9uX2xpc3QpO1xuMTUxNDpcdFx0XHRicmVhaztcbjE1MTU6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6XG4xNTE2Olx0XHRcdHNkYXRhLVx1MDAzZWJzcyA9IFx1MDAyNnNkYXRhLVx1MDAzZXUuYXA7XG4xNTE3Olx0XHRcdGZhbGx0aHJvdWdoO1xuMTUxODpcdFx0ZGVmYXVsdDpcbjE1MTk6XHRcdFx0aWYgKGNvbWluZ191cCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDM2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBtYWM4MDIxMSBCdWcgRml4IGFuZCBSZWFjaGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIGEgc3BlY2lmaWMgYnVnIGZpeCByZWxhdGVkIHRvIGhvdyBtb25pdG9yIGZsYWdzIGFyZSBtYW5hZ2VkIGluIGBtYWM4MDIxMWAuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGF0IGBpZWVlODAyMTFfZG9fb3BlbmAgYW5kIGBpZWVlODAyMTFfZG9fc3RvcGAuIFRoZSBpc3N1ZSBzdGVtcyBmcm9tIHRoZSBmYWN0IHRoYXQgYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgMSlgIHdhcyBiZWluZyBjYWxsZWQgdW5jb25kaXRpb25hbGx5IGluIGBpZWVlODAyMTFfZG9fb3BlbmAgZm9yIGFsbCBtb25pdG9ycy4gSG93ZXZlciwgdGhlIGRlY3JlbWVudGluZyBjb3VudGVycGFydCwgYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpYCwgaW4gYGllZWU4MDIxMV9kb19zdG9wYCB3YXMgY29uZGl0aW9uYWwsIG9ubHkgZXhlY3V0ZWQgd2hlbiBgIShzZGF0YS0mZ3Q7dS5tbnRyLmZsYWdzICZhbXA7IE1PTklUT1JfRkxBR19BQ1RJVkUpYC4gVGhpcyBtZWFucyB0aGF0IGFjdGl2ZSBtb25pdG9ycyBvciBkZXZpY2VzIHdpdGhvdXQgdmlydHVhbCBtb25pdG9ycyB3ZXJlIG5vdCBoYXZpbmcgdGhlaXIgbW9uaXRvciBmbGFncyBkZWNyZW1lbnRlZCBjb3JyZWN0bHkgb24gc3RvcC4gVGhpcyBjb3JyZWN0aW9uIGxpa2VseSBlbnN1cmVzIHRoZSBmbGFncyBhcmUgaGFuZGxlZCBjb25zaXN0ZW50bHkgZHVyaW5nIHN0YXJ0IGFuZCBzdG9wIG9wZXJhdGlvbnMsIHJlZ2FyZGxlc3Mgb2YgdGhlIG1vbml0b3ImIzM5O3MgYWN0aXZlIHN0YXRlLgoKTm93LCByZWFjaGFiaWxpdHkgaXMgY3J1Y2lhbC4gV2UgbmVlZCB0byBrbm93IGhvdyBlYXNpbHkgd2UgY2FuIGdldCBhdCB0aGlzIGNvZGUgd2l0aCBvdXIgdG9vbHMuIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIGBtYWM4MDIxMWAgY2FuIGJlIHRlc3RlZCB1c2luZyBgbWFjODAyMTFfaHdzaW1gIChhIHZpcnR1YWwgODAyLjExIGRldmljZSkgb3IgdGhyb3VnaCB0aGUgYG5sODAyMTFgIGFuZCBgY2ZnODAyMTFgIGludGVyZmFjZXMsIHdoaWNoIG1lYW5zIHN5c2NhbGxzIGFuZCBuZXRsaW5rIGNvbW1hbmRzLiBUaGlzIGlzIHByb21pc2luZy4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZSB3aXRoaW4gU3l6a2FsbGVyJiMzOTtzIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gVGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgKnllcyouIFN5emthbGxlciBoZWF2aWx5IGxldmVyYWdlcyBgbWFjODAyMTFfaHdzaW1gIHZpYSBgbmw4MDIxMWAgbmV0bGluayBjb21tYW5kcy4gSXQgY3JlYXRlcyB2aXJ0dWFsIGludGVyZmFjZXMsIHNldHMgbW9uaXRvciBtb2RlLCBhbmQgc3RhcnRzL3N0b3BzIHRoZXNlIGludGVyZmFjZXMgdXNpbmcgdGhlIHN0YW5kYXJkIGBydG5ldGxpbmtgLCBgU0lPQ1NJRkZMQUdTYCwgYW5kIGBubDgwMjExYCBtZWNoYW5pc21zLiBUaGlzIGNsZWFybHkgZXN0YWJsaXNoZXMgdGhhdCB3ZSBjYW4gbW9kaWZ5IHRoZSBjb3JlIHdpcmVsZXNzIG5ldHdvcmtpbmcgc3Vic3lzdGVtIChzcGVjaWZpY2FsbHksIHRoZSBgbmV0L21hYzgwMjExYCBtb2R1bGUpIGFuZCBtYW5pcHVsYXRlIGV4ZWN1dGFibGUgY29udHJvbCBmbG93LiBUaGlzIHNwZWNpZmljIGJ1ZyBmaXgsIHRoZSBtb3ZlIG9mIHRoZSBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSlgIGNhbGwsIHNob3VsZCB0aGVyZWZvcmUgYmUgZWZmZWN0aXZlbHkgZXhlcmNpc2FibGUgYnkgU3l6a2FsbGVyLgoKRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgYG1hYzgwMjExYC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFyb3VuZCBgbmV0L21hYzgwMjExYCB0byBpZGVudGlmeSBhbnkgc3BlY2lmaWMgY29uZmlnIG9wdGlvbnMgdGhhdCBtaWdodCBiZSBjcml0aWNhbCBmb3IgdHJpZ2dlcmluZyBvciBleHBvc2luZyB0aGlzIHZ1bG5lcmFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxubmV0L21hYzgwMjExL0tjb25maWc6MjE6Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xubmV0L21hYzgwMjExL0tjb25maWctMjItXHRib29sXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMy1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQwLVxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxubmV0L21hYzgwMjExL0tjb25maWctNDktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1MDpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXHRzdHJpbmdcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFwmIzM0O1NvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxubmV0L21hYzgwMjExL0tjb25maWc6NjA6Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1Rcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIG1hYzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNzgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xubmV0L21hYzgwMjExL0tjb25maWctODAtXHRib29sIFwmIzM0O0VuYWJsZSBMRUQgdHJpZ2dlcnNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjg4OmNvbmZpZyBNQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7RXhwb3J0IG1hYzgwMjExIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctOTYtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7VHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTExLVx0Ym9vbCBcJiMzNDtTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxubmV0L21hYzgwMjExL0tjb25maWc6MTE2OmNvbmZpZyBNQUM4MDIxMV9OT0lOTElORVxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtEbyBub3QgaW5saW5lIFRYL1JYIGhhbmRsZXJzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTMxLVxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXHRib29sIFwmIzM0O1ZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTQ0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNTQ6Y29uZmlnIE1BQzgwMjExX1NUQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHN0YXRpb24gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTYyLVxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTY0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIEhUIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgT0NCIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4Njpjb25maWcgTUFDODAyMTFfSUJTU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTg3LVx0Ym9vbCBcJiMzNDtWZXJib3NlIElCU1MgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTk2LVxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTk4LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxubmV0L21hYzgwMjExL0tjb25maWc6MjIyOmNvbmZpZyBNQUM4MDIxMV9NUEFUSF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjIzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcGF0aCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzQtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTk6Y29uZmlnIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBjaGFubmVsIHN3aXRjaCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4Mi1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBURExTIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5Mzpjb25maWcgTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cdGJvb2wgXCYjMzQ7RXh0cmEgc3RhdGlzdGljcyBmb3IgVFgvUlggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMzA3LVxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVx0aW50IFwmIzM0O1N0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcJiMzNDsgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY0NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgTUFDODAyMTFgIERlcGVuZGVuY2llcyoqCgpSaWdodCwgbGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZ3V0cyBvZiB0aGlzIGBNQUM4MDIxMWAgc2l0dWF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBvdXQgdGhlIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCB1bndpbmRpbmcgdGhlIGRlcGVuZGVuY3kgdHJlZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IG90aGVyIGtlcm5lbCBjb21wb25lbnRzIGFyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCBgTUFDODAyMTFgLCB0aGUgYnVpbGQgb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBpdCwgYW5kIGFueSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBwaXRmYWxscy4gVGhpcyBLY29uZmlnIGZpbGUgc2hvdWxkIGlsbHVtaW5hdGUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLCBzbyBJIGNhbiBzdGFydCBmb3JtaW5nIGEgbWVudGFsIG1vZGVsIG9mIGhvdyBpdCBhbGwgaW50ZXJhY3RzLiBIb3BlZnVsbHksIGl04oCZbGwgYmUgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCB0byBzZWUgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcyBhbmQgZmxhZ3MgYXQgYSBnbGFuY2UsIGFsbG93aW5nIG1lIHRvIGZvY3VzIG9uIHRoZSBhcmVhIG9mIGNvbmNlcm4uIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTUFDODAyMTFcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExXG4gICA1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gICA2Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfQ0JDX01BQ1NcbiAgIDc6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FSQzRcbiAgIDg6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4gICA5Olx0XHRzZWxlY3QgQ1JZUFRPX0NDTVxuICAxMDpcdFx0c2VsZWN0IENSWVBUT19HQ01cbiAgMTE6XHRcdHNlbGVjdCBDUkMzMlxuICAxMjpcdFx0aGVscFxuICAxMzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBoYXJkd2FyZSBpbmRlcGVuZGVudCBJRUVFIDgwMi4xMVxuICAxNDpcdFx0ICBuZXR3b3JraW5nIHN0YWNrLlxuICAxNTpcdFxuICAxNjpcdGNvbW1lbnQgXCYjMzQ7Q0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTFcJiMzNDtcbiAgMTc6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTE9blxuICAxODpcdFxuICAxOTpcdGlmIE1BQzgwMjExICE9IG5cbiAgMjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxODQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyB0aGUgYG1hYzgwMjExX2h3c2ltYCBLY29uZmlnKioKCk9rYXksIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFdoaWxlIEkmIzM5O20gd29ya2luZyB3aXRoIHRoaXMgYXJlYSwgaXQmIzM5O3Mgd2lzZSB0byByZXZpZXcgYWxsIHRoZSByZWxldmFudCBjb21wb25lbnRzLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHBydWRlbnQgdG8gZG91YmxlLWNoZWNrIHRoZSBgbWFjODAyMTFfaHdzaW1gIEtjb25maWcgZmlsZS4gSSYjMzk7bSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLCBidXQgdGhpcyBzdGVwIHdpbGwgaGVscCBtZSB0byByZWZyZXNoIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGFueSBkZXBlbmRlbmNpZXMgb3IgZGVmYXVsdCBzZXR0aW5ncyB0aGF0IG1pZ2h0IGJlIGNydWNpYWwgdG8gd2hhdGV2ZXIgaXNzdWUgSSYjMzk7bSBjdXJyZW50bHkgZm9jdXNlZCBvbi4gSXTigJlzIGEgZ29vZCBwcmFjdGljZSB0byBiZSBtZXRpY3Vsb3VzIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gZW5zdXJlIHRoZSBpbnRlbmRlZCBiZWhhdmlvdXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMV9IV1NJTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZzoxOmNvbmZpZyBNQUM4MDIxMV9IV1NJTVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ2MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgVmlydHVhbCBXaXJlbGVzcyBLY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgdmlydHVhbCB3aXJlbGVzcyBzZXR1cCBpbiB0aGlzIGtlcm5lbC4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgdGV4dCBtZW50aW9ucyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnYC4gUmlnaHQsIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBzdWJzeXN0ZW0uIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYEtjb25maWdgIG5vdyB0byBzZWUgd2hhdCYjMzk7cyBkZWZpbmVkLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyB0aGlzIGFsbCBwaWVjZXMgdG9nZXRoZXIuIFRoYXQmIzM5O2xsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSByZXN0IG9mIHRoZSBjb2RlLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdGNvbmZpZyBNQUM4MDIxMV9IV1NJTVxuICAgMjpcdFx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgIDQ6XHRcdGhlbHBcbiAgIDU6XHRcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdFxuICAgNjpcdFx0ICBJRUVFIDgwMi4xMSBuZXR3b3JraW5nIHN0YWNrIChtYWM4MDIxMSkgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBub3RcbiAgIDc6XHRcdCAgbmVlZGVkIGZvciBub3JtYWwgd2lyZWxlc3MgTEFOIHVzYWdlIGFuZCBpcyBvbmx5IGZvciB0ZXN0aW5nLiBTZWVcbiAgIDg6XHRcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21hYzgwMjExX2h3c2ltIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvd1xuICAgOTpcdFx0ICB0byB1c2UgdGhpcyB0b29sLlxuICAxMDpcdFxuICAxMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbiAgMTI6XHRcdCAgY2FsbGVkIG1hYzgwMjExX2h3c2ltLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgVklSVF9XSUZJXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtXaWZpIHdyYXBwZXIgZm9yIGV0aGVybmV0IGRyaXZlcnNcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBldGhlcm5ldCBjb25uZWN0aW9ucyB0byBhcHBlYXIgYXMgaWYgdGhleVxuICAxOTpcdFx0ICBhcmUgd2lmaSBjb25uZWN0aW9ucyB0aHJvdWdoIGEgc3BlY2lhbCBydG5ldGxpbmsgZGV2aWNlLlxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk5MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gQ0ZHODAyMTEgRGVwZW5kZW5jaWVzKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSYjMzk7bSBzdGFydGluZyB3aXRoIGBDRkc4MDIxMWAuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIHF1aWNrbHkgZ2V0IGEgaGFuZGxlIG9uIGFsbCBpdHMgZGVwZW5kZW5jaWVzLiBXaGF0IG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIG9yIGV4dGVybmFsIGxpYnJhcmllcyBpcyBpdCB0aWdodGx5IGNvdXBsZWQgd2l0aD8gSSYjMzk7bSB0aGlua2luZywgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgdGhpbmdzIGxpa2UgcmVndWxhdG9yeSBkYXRhYmFzZXMsIHdpcmVsZXNzIGV4dGVuc2lvbnMsIGFuZCwgb2YgY291cnNlLCB0aGUgdmFyaW91cyBkcml2ZXIgaW50ZXJmYWNlcy4gSSBuZWVkIGEgY2xlYXIgbWVudGFsIG1hcCwgc28gSSBjYW4gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHNjb3BlIG9mIGFueSBwb3RlbnRpYWwgY2hhbmdlcyBJJiMzOTttIGFib3V0IHRvIG1ha2UsIG9yIGFueSB2dWxuZXJhYmlsaXRpZXMgSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyLiBJJiMzOTttIGdvaW5nIHRvIG1hcCBvdXQgdGhlIGRlcGVuZGVuY3kgdHJlZSB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCByZWdyZXNzaW9ucyBvciBpbnRlZ3JhdGlvbiBwcm9ibGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENGRzgwMjExJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWc9Mzg9Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01MS1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjUyOmNvbmZpZyBDRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1Ncbm5ldC93aXJlbGVzcy9LY29uZmlnLTUzLVx0Ym9vbCBcJiMzNDtlbmFibGUgZGV2ZWxvcGVyIHdhcm5pbmdzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNjctXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo2ODpjb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctODgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo4OTpjb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDtyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjk5OmNvbmZpZyBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMC1cdGJvb2wgXCYjMzQ7YWxsb3cgcmVnZGIga2V5cyBzaGlwcGVkIHdpdGggdGhlIGtlcm5lbFwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTE6Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxubmV0L3dpcmVsZXNzL0tjb25maWctMTEyLVx0c3RyaW5nIFwmIzM0O2FkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjI6Y29uZmlnIENGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSByZWd1bGF0b3J5IHN1cHBvcnQgZm9yIGNlbGx1bGFyIGJhc2Ugc3RhdGlvbiBoaW50c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0O2NmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2MC1cdGJvb2wgXCYjMzQ7ZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTY5OmNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXHRib29sIFwmIzM0O2NmZzgwMjExIERlYnVnRlMgZW50cmllc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3Ni1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O3N1cHBvcnQgQ1JEQVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk0OmNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDEzMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkRpdmluZyBpbnRvIHRoZSBgaWVlZTgwMjExX2RvX3N0b3AoKWAgUGF0Y2gqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgYGllZWU4MDIxMV9kb19zdG9wKClgIHdpdGhpbiBgbmV0L21hYzgwMjExL2lmYWNlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gVG8gcHJvcGVybHkgYXNzZXNzIHRoaXMsIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBncmFwaC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgY2FsbCBgaWVlZTgwMjExX2RvX3N0b3AoKWAuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYWxsIHRoZSBjYWxsZXJzLiBJdCBpcyBhbHNvIGltcG9ydGFudCB0byBpZGVudGlmeSB3aGVyZSBgaWVlZTgwMjExX2RvX3N0b3AoKWAgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGludGVyZmFjZSBsaWZlY3ljbGUgd2l0aGluIGBtYWM4MDIxMWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBtaWdodCBicmVhay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWVlZTgwMjExX2RvX3N0b3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2NmZy5jPTk2PXN0YXRpYyBpbnQgaWVlZTgwMjExX3NldF9tb25fb3B0aW9ucyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMTQ5LVx0XHRcdC8qXG5uZXQvbWFjODAyMTEvY2ZnLmM6MTUwOlx0XHRcdCAqIEJlY2F1c2UgdGhlIGludGVyZmFjZSBpcyBkb3duLCBpZWVlODAyMTFfZG9fc3RvcFxubmV0L21hYzgwMjExL2NmZy5jLTE1MS1cdFx0XHQgKiBhbmQgaWVlZTgwMjExX2RvX29wZW4gdGFrZSBjYXJlIG9mIFwmIzM0O2V2ZXJ5dGhpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz00NjE9c3RhdGljIGludCBpZWVlODAyMTFfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTQ3OC1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjQ3OTpzdGF0aWMgdm9pZCBpZWVlODAyMTFfZG9fc3RvcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgYm9vbCBnb2luZ19kb3duKVxubmV0L21hYzgwMjExL2lmYWNlLmMtNDgwLXtcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz04NDY9c3RhdGljIGludCBpZWVlODAyMTFfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTg2OC1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjg2OTpcdGllZWU4MDIxMV9kb19zdG9wKHNkYXRhLCB0cnVlKTtcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTg3MC1cbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xOTgxPXN0YXRpYyBpbnQgaWVlZTgwMjExX3J1bnRpbWVfY2hhbmdlX2lmdHlwZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yMDQ1LVx0LyogZG9fc3RvcCB3aWxsIHN5bmNocm9uaXplX3JjdSgpIGZpcnN0IHRoaW5nICovXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoyMDQ2Olx0aWVlZTgwMjExX2RvX3N0b3Aoc2RhdGEsIGZhbHNlKTtcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTIwNDctXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmM9MjQ0MT12b2lkIGllZWU4MDIxMV9zZGF0YV9zdG9wKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTI0NDQtXHRcdHJldHVybjtcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjI0NDU6XHRpZWVlODAyMTFfZG9fc3RvcChzZGF0YSwgdHJ1ZSk7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDQ2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMjgKCQkJCQkJCW91dHB1dDogMjQzCgkJCQkJCQl0aG91Z2h0czogNTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQ6IG1hYzgwMjExIE1vbml0b3IgSW50ZXJmYWNlIFN0b3AgQ2xlYW51cCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTt2ZSBpZGVudGlmaWVkIGEgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0IHdpdGhpbiB0aGUgbWFjODAyMTEgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgY2xlYW51cCBsb2dpYyB3aGVuIGEgbW9uaXRvciBpbnRlcmZhY2UgaXMgc3RvcHBlZC4gTXkgaW5pdGlhbCBzY2FuIGhhcyB5aWVsZGVkIGEgaGFuZGZ1bCBvZiBrZXkgZnVuY3Rpb25zIGFzIGZvY3VzIHN5bWJvbHM6IGBpZWVlODAyMTFfZG9fc3RvcGAgKGRlZmluZWQgYXMgc3RhdGljIHdpdGhpbiBuZXQvbWFjODAyMTEvaWZhY2UuYyksIGBpZWVlODAyMTFfc3RvcGAsIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3NgLCBgaWVlZTgwMjExX3J1bnRpbWVfY2hhbmdlX2lmdHlwZWAsIGFuZCBgaWVlZTgwMjExX3NldF9tb25fb3B0aW9uc2AuIEdvb2QsIHRoZXNlIHNlZW0gZmVhdHVyZS1zcGVjaWZpYyBlbm91Z2ggYW5kIG5vdCBvdmVybHkgdWJpcXVpdG91cyB0byBiZSB1c2VmdWwgYXMgZm9jdXMgc3ltYm9scy4KCkkmIzM5O3ZlIGFsc28gY2hlY2tlZCB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgd291bGQgbWFrZSB0aGlzIHRhcmdldCByZWFjaGFibGUuIEl0IGxvb2tzIGxpa2Ugd2UgbmVlZCBgTUFDODAyMTFgLCBgQ0ZHODAyMTFgLCBhbmQgYE1BQzgwMjExX0hXU0lNYCBlbmFibGVkLiAgVGhlIHJlYWNoYWJpbGl0eSBsb29rcyBzb2xpZCAtIHdlIGNhbiBoaXQgdGhpcyB3aXRoIHN0YW5kYXJkIFFFTVUvc3l6a2FsbGVyIHNldHVwcyB1c2luZyBubDgwMjExIGFuZCBtYWM4MDIxMV9od3NpbS4KClRoaXMgdGFyZ2V0IGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZzsgaXQmIzM5O3MgYSAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsgc2l0dWF0aW9uLiBUaGUgY29yZSBvZiB0aGlzIGlzIGNlbnRlcmVkIGFyb3VuZCB0aGUgY29ycmVjdCBpbnZvY2F0aW9uIG9mIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKWAgZHVyaW5nIG1vbml0b3IgaW50ZXJmYWNlIHN0b3AuIFRoZSBwYXRjaCBpbiBxdWVzdGlvbiBzZWVtcyB0byBmb2N1cyBvbiBlbnN1cmluZyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYSBtb25pdG9yIGludGVyZmFjZSBpcyBhY3R1YWxseSBhY3RpdmUgb3IgaWYgdmlydHVhbCBtb25pdG9yIHN1cHBvcnQgaXMgcHJlc2VudC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgYXJlYSBmb3Igc3VidGxlIGJ1Z3MgcmVsYXRlZCB0byBzdGF0ZSBtYW5hZ2VtZW50LgoKQWxyaWdodCwgZG91YmxlLWNoZWNraW5nIGV2ZXJ5dGhpbmc6CgoqICAgKipDb25maWdzOioqIE1BQzgwMjExLCBDRkc4MDIxMSwgTUFDODAyMTFfSFdTSU0KKiAgICoqRm9jdXNTeW1ib2xzOioqIGBpZWVlODAyMTFfZG9fc3RvcGAsIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3NgLCBgaWVlZTgwMjExX3N0b3BgLCBgaWVlZTgwMjExX3J1bnRpbWVfY2hhbmdlX2lmdHlwZWAsIGBpZWVlODAyMTFfc2V0X21vbl9vcHRpb25zYAoKKiAgICoqUmVhc29uaW5nOioqIFRoZSBidWcgZml4IGludm9sdmVzIHRoZSBjbGVhbnVwIGxvZ2ljIG9mIG1vbml0b3IgaW50ZXJmYWNlczsgaXQgc2hvdWxkIGJlIHdvcnRoIGZ1enppbmcgYmVjYXVzZSBpdCBtb2RpZmllcyBtb25pdG9yIHN0b3AgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB3aXRoIHN0YW5kYXJkIFFFTVUvc3l6a2FsbGVyLgoKTGV0JiMzOTtzIGludm9rZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZWVlODAyMTFfZG9fc3RvcCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3MmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3N0b3AmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3J1bnRpbWVfY2hhbmdlX2lmdHlwZSYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfc2V0X21vbl9vcHRpb25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1vbml0b3IgaW50ZXJmYWNlIHRlYXJkb3duIGhhbmRsaW5nIGluIG5ldC9tYWM4MDIxMS9pZmFjZS5jIChpZWVlODAyMTFfZG9fc3RvcCkgYnkgZW5zdXJpbmcgdGhhdCBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3MoKSBpcyBhbHdheXMgaW52b2tlZCB0byBkZWNyZW1lbnQgbW9uaXRvciBmbGFncyB3aGVuIHN0b3BwaW5nIGEgbW9uaXRvciBpbnRlcmZhY2UsIHJlZ2FyZGxlc3Mgb2YgdGhlIHZpcnR1YWwgbW9uaXRvciBzdGF0dXMuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIG1hYzgwMjExX2h3c2ltIGFuZCBubDgwMjExL3J0bmV0bGluayBpbnRlcmZhY2UgY29udHJvbCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2llZWU4MDIxMV9kb19zdG9wJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfc3RvcCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfcnVudGltZV9jaGFuZ2VfaWZ0eXBlJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9zZXRfbW9uX29wdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbW9uaXRvciBpbnRlcmZhY2UgdGVhcmRvd24gaGFuZGxpbmcgaW4gbmV0L21hYzgwMjExL2lmYWNlLmMgKGllZWU4MDIxMV9kb19zdG9wKSBieSBlbnN1cmluZyB0aGF0IGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncygpIGlzIGFsd2F5cyBpbnZva2VkIHRvIGRlY3JlbWVudCBtb25pdG9yIGZsYWdzIHdoZW4gc3RvcHBpbmcgYSBtb25pdG9yIGludGVyZmFjZSwgcmVnYXJkbGVzcyBvZiB0aGUgdmlydHVhbCBtb25pdG9yIHN0YXR1cy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWFjODAyMTFfaHdzaW0gYW5kIG5sODAyMTEvcnRuZXRsaW5rIGludGVyZmFjZSBjb250cm9sIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBhY2NvdW50aW5nIGJ1ZyBpbiBtYWM4MDIxMSBtb25pdG9yIGludGVyZmFjZSBoYW5kbGluZyBieSBtb3ZpbmcgYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpYCBvdXRzaWRlIHRoZSBjb25kaXRpb25hbCBjaGVjayBpbiBgaWVlZTgwMjExX2RvX3N0b3AoKWAsIHByb3Blcmx5IGJhbGFuY2luZyB0aGUgdW5jb25kaXRpb25hbCBjYWxsIHRvIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIDEpYCBpbiBgaWVlZTgwMjExX2RvX29wZW4oKWAuIFxuXG5UaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgaW50ZXJuYWwgbW9uaXRvciBmbGFnIGNvdW50ZXJzIG9uIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYCAoc3VjaCBhcyBgbG9jYWwtXHUwMDNlZmlmX2Zjc2ZhaWxgLCBgbG9jYWwtXHUwMDNldHhfbW50cnNgLCBldGMuKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiwgYW5kIHN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDlkODg3YjlhMDBmOTc0NzUwYTIxNTgwYmJlOTY5YWU2MTZjNzIzZGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDA3OjU1OjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lmYWNlLmMgYi9uZXQvbWFjODAyMTEvaWZhY2UuYwppbmRleCA0MzQ2MGE3MDVhNmJkLi45YjQwMGNhZjI3NjUyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvaWZhY2UuYwpAQCAtNjMwLDggJiM0Mzs2MzAsOSBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfZG9fc3RvcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgYm9vbCBnb2luZ19kbwogCQkJCWh3X3JlY29uZl9mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9DSEFOR0VfTU9OSVRPUjsKIAkJCX0KIAotCQkJaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSk7CiAJCX0KJiM0MzsKJiM0MzsJCWllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX05BTjoKIAkJLyogQ2hlY2sgaWYgYW55IG9wZW4gTkFOX0RBVEEgaW50ZXJmYWNlcyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbWFjODAyMTEgSW50ZXJmYWNlIENvZGUqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcyBkaWZmLiBUbyBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbiwgbXkgZmlyc3QgbW92ZSBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLCB3aGljaCBsb29rcyBsaWtlIGl0JiMzOTtzIGluIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBzbyBJJiMzOTtsbCBzdGFydCBieSByZWFkaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGF0IEkgbmVlZCB0byB6b29tIGluIG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDYzMC4gTGV0JiMzOTtzIHVzZSBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIHRoYXQgc2VjdGlvbiBhbmQgZ2V0IGEgZ29vZCBvdmVydmlldyBvZiB0aGUgYmVoYXZpb3IuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGZvdW5kYXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2lmYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwMDpcdFx0XHRcdH1cbiA2MDE6XHRcdFx0fVxuIDYwMjpcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBzLVx1MDAzZWJjX2J1Zi5sb2NrLCBmbGFncyk7XG4gNjAzOlx0XG4gNjA0Olx0XHRcdHNrYl9xdWV1ZV93YWxrX3NhZmUoXHUwMDI2ZnJlZXEsIHNrYiwgdG1wKSB7XG4gNjA1Olx0XHRcdFx0X19za2JfdW5saW5rKHNrYiwgXHUwMDI2ZnJlZXEpO1xuIDYwNjpcdFx0XHRcdGllZWU4MDIxMV9mcmVlX3R4c2tiKFx1MDAyNmxvY2FsLVx1MDAzZWh3LCBza2IpO1xuIDYwNzpcdFx0XHR9XG4gNjA4Olx0XHR9XG4gNjA5Olx0XG4gNjEwOlx0XHRpZiAoZ29pbmdfZG93bilcbiA2MTE6XHRcdFx0bG9jYWwtXHUwMDNlb3Blbl9jb3VudC0tO1xuIDYxMjpcdFxuIDYxMzpcdFx0c3dpdGNoIChzZGF0YS1cdTAwM2V2aWYudHlwZSkge1xuIDYxNDpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOlxuIDYxNTpcdFx0XHRsaXN0X2RlbChcdTAwMjZzZGF0YS1cdTAwM2V1LnZsYW4ubGlzdCk7XG4gNjE2Olx0XHRcdFJDVV9JTklUX1BPSU5URVIoc2RhdGEtXHUwMDNldmlmLmJzc19jb25mLmNoYW5jdHhfY29uZiwgTlVMTCk7XG4gNjE3Olx0XHRcdC8qIHNlZSBjb21tZW50IGluIHRoZSBkZWZhdWx0IGNhc2UgYmVsb3cgKi9cbiA2MTg6XHRcdFx0aWVlZTgwMjExX2ZyZWVfa2V5cyhzZGF0YSwgdHJ1ZSk7XG4gNjE5Olx0XHRcdC8qIG5vIG5lZWQgdG8gdGVsbCBkcml2ZXIgKi9cbiA2MjA6XHRcdFx0YnJlYWs7XG4gNjIxOlx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6XG4gNjIyOlx0XHRcdGxvY2FsLVx1MDAzZW1vbml0b3JzLS07XG4gNjIzOlx0XG4gNjI0Olx0XHRcdGlmICghKHNkYXRhLVx1MDAzZXUubW50ci5mbGFncyBcdTAwMjYgTU9OSVRPUl9GTEFHX0FDVElWRSkgXHUwMDI2XHUwMDI2XG4gNjI1Olx0XHRcdCAgICAhaWVlZTgwMjExX2h3X2NoZWNrKFx1MDAyNmxvY2FsLVx1MDAzZWh3LCBOT19WSVJUVUFMX01PTklUT1IpKSB7XG4gNjI2Olx0XG4gNjI3Olx0XHRcdFx0bG9jYWwtXHUwMDNldmlydF9tb25pdG9ycy0tO1xuIDYyODpcdFx0XHRcdGlmIChsb2NhbC1cdTAwM2V2aXJ0X21vbml0b3JzID09IDApIHtcbiA2Mjk6XHRcdFx0XHRcdGxvY2FsLVx1MDAzZWh3LmNvbmYuZmxhZ3MgXHUwMDI2PSB+SUVFRTgwMjExX0NPTkZfTU9OSVRPUjtcbiA2MzA6XHRcdFx0XHRcdGh3X3JlY29uZl9mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9DSEFOR0VfTU9OSVRPUjtcbiA2MzE6XHRcdFx0XHR9XG4gNjMyOlx0XG4gNjMzOlx0XHRcdH1cbiA2MzQ6XHRcbiA2MzU6XHRcdFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSk7XG4gNjM2Olx0XHRcdGJyZWFrO1xuIDYzNzpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU46XG4gNjM4Olx0XHRcdC8qIENoZWNrIGlmIGFueSBvcGVuIE5BTl9EQVRBIGludGVyZmFjZXMgKi9cbiA2Mzk6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCBcdTAwMjZsb2NhbC1cdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XG4gNjQwOlx0XHRcdFx0V0FSTl9PTihpdGVyLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBIFx1MDAyNlx1MDAyNlxuIDY0MTpcdFx0XHRcdFx0aWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoaXRlcikpO1xuIDY0MjpcdFx0XHR9XG4gNjQzOlx0XG4gNjQ0Olx0XHRcdC8qIGNsZWFuIGFsbCB0aGUgZnVuY3Rpb25zICovXG4gNjQ1Olx0XHRcdGlmICghKGxvY2FsLVx1MDAzZWh3LndpcGh5LVx1MDAzZW5hbl9jYXBhLmZsYWdzIFx1MDAyNlxuIDY0NjpcdFx0XHQgICAgICBXSVBIWV9OQU5fRkxBR1NfVVNFUlNQQUNFX0RFKSkge1xuIDY0NzpcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZzZGF0YS1cdTAwM2V1Lm5hbi5kZS5mdW5jX2xvY2spO1xuIDY0ODpcdFxuIDY0OTpcdFx0XHRcdGlkcl9mb3JfZWFjaF9lbnRyeShcdTAwMjZzZGF0YS1cdTAwM2V1Lm5hbi5kZS5mdW5jdGlvbl9pbnN0X2lkcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBEcml2ZXImIzM5O3MgSW5pdGlhbGl6YXRpb24gYW5kIFNodXRkb3duKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyB0aGlzIGRyaXZlciBoYW5kbGVzIG1vbml0b3IgbW9kZSwgYW5kIGhvdyBpdCYjMzk7cyBpbml0aWFsaXplZCBhbmQgc2h1dCBkb3duLiBUaGUga2V5IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3NgLCBgaWVlZTgwMjExX2RvX3N0b3BgLCBhbmQgYGllZWU4MDIxMV9kb19vcGVuYCBvciBwb3RlbnRpYWxseSBzdGFydC1yZWxhdGVkIGZ1bmN0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgc29saWQgb3ZlcnZpZXcgb2YgdGhlIGNvZGUgaW4gdGhhdCByZWdpb24sIHNvIEkmIzM5O20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIG9uIGxpbmVzIDUwMCB0byA2MDAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBUbyBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyByZWxldmFudCwgSSYjMzk7bSBnb2luZyB0byBkbyBhIHF1aWNrIGdyZXAgZm9yIGFueSBvdGhlciByZWZlcmVuY2VzIHRvIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3NgLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gdHJhY2sgZG93biBhbGwgY2FsbHMsIHRvIHNlZSBob3cgdGhhdCBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkIGZyb20gZWxzZXdoZXJlIGluIHRoZSBjb2RlYmFzZS4gVGhpcyBpcyBzdGFuZGFyZCBvcGVyYXRpbmcgcHJvY2VkdXJlIGZvciBtZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9jZmcuYz05Nj1zdGF0aWMgaW50IGllZWU4MDIxMV9zZXRfbW9uX29wdGlvbnMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTE0Mi1cdFx0aWYgKGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkge1xubmV0L21hYzgwMjExL2NmZy5jOjE0MzpcdFx0XHRpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKTtcbm5ldC9tYWM4MDIxMS9jZmcuYy0xNDQtXHRcdFx0c2RhdGEtXHUwMDNldS5tbnRyLmZsYWdzID0gcGFyYW1zLVx1MDAzZWZsYWdzO1xubmV0L21hYzgwMjExL2NmZy5jOjE0NTpcdFx0XHRpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIDEpO1xubmV0L21hYzgwMjExL2NmZy5jLTE0Ni1cbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0yMjAyPXZvaWQgaWVlZTgwMjExX3JlY2FsY19pZGxlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTtcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjIyMDM6dm9pZCBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMjA0LVx0XHRcdFx0ICAgIGNvbnN0IGludCBvZmZzZXQpO1xuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTQ3OT1zdGF0aWMgdm9pZCBpZWVlODAyMTFfZG9fc3RvcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgYm9vbCBnb2luZ19kb3duKVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTYzNC1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjYzNTpcdFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSk7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy02MzYtXHRcdGJyZWFrO1xuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTExNTY9dm9pZCBpZWVlODAyMTFfcmVjYWxjX29mZmxvYWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtMTE3Mi1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjExNzM6dm9pZCBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMTc0LVx0XHRcdFx0ICAgIGNvbnN0IGludCBvZmZzZXQpXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmM9MTM2Nj1pbnQgaWVlZTgwMjExX2RvX29wZW4oc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgYm9vbCBjb21pbmdfdXApXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtMTUwNi1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjE1MDc6XHRcdGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgMSk7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xNTA4LVx0XHRpZWVlODAyMTFfY29uZmlndXJlX2ZpbHRlcihsb2NhbCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MjMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSA4MDIuMTEgSW50ZXJmYWNlIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIDgwMi4xMSBpbnRlcmZhY2UuIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCBmb3IgYGllZWU4MDIxMV9kb19vcGVuYCBpbiBgbmV0L21hYzgwMjExL2lmYWNlLmNgIOKAkyBzcGVjaWZpY2FsbHksIGFyb3VuZCBsaW5lIDE1MDAuIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBicmluZ2luZyB1cCBhbiBpbnRlcmZhY2UuIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoZSBwb2ludCBvZiBpbnRlcmZhY2UgYnJpbmctdXAgLSB3aGF0IGFyZSB0aGUga2V5IHN0ZXBzLCByZXNvdXJjZSBhbGxvY2F0aW9ucywgYW5kIGluaXRpYWxpemF0aW9ucy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlIGxvd2VyIE1BQyBsYXllciBhbmQgdGhlIGhpZ2hlciBsYXllcnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZToKLSAqKkFzc29jaWF0aW9uKio6IHRoZSBpbnRlcmZhY2UgYXNzb2NpYXRpbmcgd2l0aCB0aGUgbmV0d29yay4KLSAqKkJlYWNvbiBTZXR1cCoqOiBoYW5kbGluZyBvZiBiZWFjb25zIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb24uCi0gKipQb3dlciBNYW5hZ2VtZW50Kio6IHNldHRpbmcgdGhlIG5lY2Vzc2FyeSBQTSBmbGFncy4KLSAqKlJhdGUgY29udHJvbCoqOiBkZXRlcm1pbmluZyBzdGFydGluZyB0cmFuc21pdCByYXRlcy4KLSAqKlNlY3VyaXR5IGFzc29jaWF0aW9ucyoqOiB0aGUgc2V0dGluZyB1cCBhbmQvb3IgY2hlY2tpbmcgb2Ygc2VjdXJpdHkgcG9saWNpZXMuCgpGcm9tIGV4cGVyaWVuY2UsIEkga25vdyB0aGF0IHRoaXMgaXMgYSBjcml0aWNhbCBzZWN0aW9uIGZvciBicmluZ2luZyB1cCB0aGUgaW50ZXJmYWNlLCBhbmQgdGhhdCB0aGUgb3JkZXIgb2YgdGhlIGFjdGlvbnMgY2FuIGJlIGNyaXRpY2FsIGZvciBjb3JyZWN0IG9wZXJhdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgc2V0dGluZ3MgYXJlIGNvcnJlY3RseSBjb25maWd1cmVkIGJlZm9yZSB0aGUgaW50ZXJmYWNlIGlzIGFjY2Vzc2libGUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9pZmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDkwOlx0XHRcdFx0aWYgKGxvY2FsLVx1MDAzZXZpcnRfbW9uaXRvcnMgPT0gbG9jYWwtXHUwMDNlb3Blbl9jb3VudCkge1xuMTQ5MTpcdFx0XHRcdFx0cmVzID0gaWVlZTgwMjExX2FkZF92aXJ0dWFsX21vbml0b3IobG9jYWwsIHNkYXRhKTtcbjE0OTI6XHRcdFx0XHRcdGlmIChyZXMpXG4xNDkzOlx0XHRcdFx0XHRcdGdvdG8gZXJyX3N0b3A7XG4xNDk0Olx0XHRcdFx0fVxuMTQ5NTpcdFxuMTQ5NjpcdFx0XHRcdGxvY2FsLVx1MDAzZXZpcnRfbW9uaXRvcnMmIzQzOyYjNDM7O1xuMTQ5NzpcdFxuMTQ5ODpcdFx0XHRcdC8qIG11c3QgYmUgYmVmb3JlIHRoZSBjYWxsIHRvIGllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyICovXG4xNDk5Olx0XHRcdFx0aWYgKGxvY2FsLVx1MDAzZXZpcnRfbW9uaXRvcnMgPT0gMSkge1xuMTUwMDpcdFx0XHRcdFx0bG9jYWwtXHUwMDNlaHcuY29uZi5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9NT05JVE9SO1xuMTUwMTpcdFx0XHRcdFx0aHdfcmVjb25mX2ZsYWdzIHw9IElFRUU4MDIxMV9DT05GX0NIQU5HRV9NT05JVE9SO1xuMTUwMjpcdFx0XHRcdH1cbjE1MDM6XHRcdFx0fVxuMTUwNDpcdFxuMTUwNTpcdFx0XHRsb2NhbC1cdTAwM2Vtb25pdG9ycyYjNDM7JiM0Mzs7XG4xNTA2Olx0XG4xNTA3Olx0XHRcdGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgMSk7XG4xNTA4Olx0XHRcdGllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTtcbjE1MDk6XHRcdFx0aWVlZTgwMjExX3JlY2FsY19vZmZsb2FkKGxvY2FsKTtcbjE1MTA6XHRcdFx0aWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTtcbjE1MTE6XHRcbjE1MTI6XHRcdFx0bmV0aWZfY2Fycmllcl9vbihkZXYpO1xuMTUxMzpcdFx0XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZzZGF0YS1cdTAwM2V1Lm1udHIubGlzdCwgXHUwMDI2bG9jYWwtXHUwMDNlbW9uX2xpc3QpO1xuMTUxNDpcdFx0XHRicmVhaztcbjE1MTU6XHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6XG4xNTE2Olx0XHRcdHNkYXRhLVx1MDAzZWJzcyA9IFx1MDAyNnNkYXRhLVx1MDAzZXUuYXA7XG4xNTE3Olx0XHRcdGZhbGx0aHJvdWdoO1xuMTUxODpcdFx0ZGVmYXVsdDpcbjE1MTk6XHRcdFx0aWYgKGNvbWluZ191cCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzAwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTW9uaXRvciBJbnRlcmZhY2UgRmxhZyBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgaWVlZTgwMjExX2RvX29wZW5gLCBmb3IgKmV2ZXJ5KiBtb25pdG9yIGludGVyZmFjZSwgcmVnYXJkbGVzcyBvZiB0aGUgYE1PTklUT1JfRkxBR19BQ1RJVkVgIHN0YXRlLCBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAxKWAgaXMgdHJpZ2dlcmVkLiAgVGhhdCYjMzk7cyB0aGUgaW5pdGlhbCBzZXR1cCwgcmlnaHQ/ICBUaGUgaW5jcmVtZW50LCBzbyB0byBzcGVhay4KCk5vdywgdGhlIHByb2JsZW0gYXJpc2VzIGluIGBpZWVlODAyMTFfZG9fc3RvcGAuICBQcmV2aW91c2x5LCB0aGUgZGVjcmVtZW50LCBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSlgLCB3YXMgKmNvbmRpdGlvbmFsbHkqIGV4ZWN1dGVkLiBJdCB3YXMgdHJhcHBlZCAqd2l0aGluKiBhbiBgaWZgIHN0YXRlbWVudC4gU3BlY2lmaWNhbGx5LCBpdCB3YXMgb25seSBleGVjdXRlZCBpZiAqYm90aCogYE1PTklUT1JfRkxBR19BQ1RJVkVgIHdhc24mIzM5O3Qgc2V0LCAqYW5kKiBpZiBgTk9fVklSVFVBTF9NT05JVE9SYCB3YXNuJiMzOTt0IHRydWUsIHdoaWNoIGlzIGRldGVybWluZWQgYnkgYGllZWU4MDIxMV9od19jaGVja2AuCgpUaGUga2V5IGhlcmUgaXMgdGhhdCBpZiBgTU9OSVRPUl9GTEFHX0FDVElWRWAgd2FzIGFscmVhZHkgc2V0IG9yIGBOT19WSVJUVUFMX01PTklUT1JgIHdhcyB0cnVlLCB0aGUgY29ycmVzcG9uZGluZyBkZWNyZW1lbnQgd2FzbiYjMzk7dCBoYXBwZW5pbmcgaW4gYGllZWU4MDIxMV9kb19zdG9wYC4gIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBpbWJhbGFuY2UuICBUaGlzIG1lYW50IHdlIHdlcmUgbGVha2luZyBvdXIgcmVmY291bnRpbmcsIG9yLCBtb3JlIGFjY3VyYXRlbHksIHRoZSAmIzM5O2FjdGl2ZSBtb25pdG9yIGZsYWcmIzM5Oy4KClNvLCB0aGUgZml4IGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYW5kIGVsZWdhbnQuIE1vdmluZyB0aGF0IGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKWAgY2FsbCAqb3V0c2lkZSogdGhlIGBpZmAgaW4gYGllZWU4MDIxMV9kb19zdG9wYCB3aWxsIGVuc3VyZSB0aGF0IGZvciAqZXZlcnkqIGluY3JlbWVudCBpbiBgb3BlbmAsIHRoZXJlJiMzOTtzIGEgY29ycmVzcG9uZGluZyBkZWNyZW1lbnQgaW4gYHN0b3BgLCBubyBtYXR0ZXIgd2hhdCB0aGUgbW9uaXRvciYjMzk7cyBzdGF0ZSBpcy4gIFRoaXMgYmFsYW5jZXMgdGhlIGZsYWcgcmVmY291bnRpbmcgYW5kIGtlZXBzIHVzIGZyb20gcnVubmluZyBpbnRvIHBvdGVudGlhbCBpc3N1ZXMuICBOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgcmV2aWV3IGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3NgIGl0c2VsZiB0byBtYWtlIHN1cmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvaWZhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE3MDpcdFx0fVxuMTE3MTpcdH1cbjExNzI6XHRcbjExNzM6XHR2b2lkIGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbjExNzQ6XHRcdFx0XHRcdCAgICBjb25zdCBpbnQgb2Zmc2V0KVxuMTE3NTpcdHtcbjExNzY6XHRcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXHUwMDNlbG9jYWw7XG4xMTc3Olx0XHR1MzIgZmxhZ3MgPSBzZGF0YS1cdTAwM2V1Lm1udHIuZmxhZ3M7XG4xMTc4Olx0XG4xMTc5Olx0I2RlZmluZSBBREpVU1QoX2YsIF9zKVx0ZG8ge1x0XHRcdFx0XHRcXFxuMTE4MDpcdFx0aWYgKGZsYWdzIFx1MDAyNiBNT05JVE9SX0ZMQUdfIyNfZilcdFx0XHRcdFxcXG4xMTgxOlx0XHRcdGxvY2FsLVx1MDAzZWZpZl8jI19zICYjNDM7PSBvZmZzZXQ7XHRcdFx0XFxcbjExODI6XHRcdH0gd2hpbGUgKDApXG4xMTgzOlx0XG4xMTg0Olx0XHRBREpVU1QoRkNTRkFJTCwgZmNzZmFpbCk7XG4xMTg1Olx0XHRBREpVU1QoUExDUEZBSUwsIHBsY3BmYWlsKTtcbjExODY6XHRcdEFESlVTVChDT05UUk9MLCBjb250cm9sKTtcbjExODc6XHRcdEFESlVTVChDT05UUk9MLCBwc3BvbGwpO1xuMTE4ODpcdFx0QURKVVNUKE9USEVSX0JTUywgb3RoZXJfYnNzKTtcbjExODk6XHRcdGlmICghKGZsYWdzIFx1MDAyNiBNT05JVE9SX0ZMQUdfU0tJUF9UWCkpXG4xMTkwOlx0XHRcdGxvY2FsLVx1MDAzZXR4X21udHJzICYjNDM7PSBvZmZzZXQ7XG4xMTkxOlx0XG4xMTkyOlx0I3VuZGVmIEFESlVTVFxuMTE5MzpcdH1cbjExOTQ6XHRcbjExOTU6XHRzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2V0X2RlZmF1bHRfcXVldWVzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuMTE5NjpcdHtcbjExOTc6XHRcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtXHUwMDNlbG9jYWw7XG4xMTk4Olx0XHRpbnQgaTtcbjExOTk6XHRcbjEyMDA6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElFRUU4MDIxMV9OVU1fQUNTOyBpJiM0MzsmIzQzOykge1xuMTIwMTpcdFx0XHRpZiAoaWVlZTgwMjExX2h3X2NoZWNrKFx1MDAyNmxvY2FsLVx1MDAzZWh3LCBRVUVVRV9DT05UUk9MKSlcbjEyMDI6XHRcdFx0XHRzZGF0YS1cdTAwM2V2aWYuaHdfcXVldWVbaV0gPSBJRUVFODAyMTFfSU5WQUxfSFdfUVVFVUU7XG4xMjAzOlx0XHRcdGVsc2UgaWYgKGxvY2FsLVx1MDAzZWh3LnF1ZXVlcyBcdTAwM2U9IElFRUU4MDIxMV9OVU1fQUNTKVxuMTIwNDpcdFx0XHRcdHNkYXRhLVx1MDAzZXZpZi5od19xdWV1ZVtpXSA9IGk7XG4xMjA1Olx0XHRcdGVsc2VcbjEyMDY6XHRcdFx0XHRzZGF0YS1cdTAwM2V2aWYuaHdfcXVldWVbaV0gPSAwO1xuMTIwNzpcdFx0fVxuMTIwODpcdFx0c2RhdGEtXHUwMDNldmlmLmNhYl9xdWV1ZSA9IElFRUU4MDIxMV9JTlZBTF9IV19RVUVVRTtcbjEyMDk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3ODYKCQkJCQkJCW91dHB1dDogMjI1CgkJCQkJCQl0aG91Z2h0czogMzUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IFNhZmV0eSBJbXBhY3Qgb2YgYSBDb2RlIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGNoYW5nZSBhbmQgaW1tZWRpYXRlbHkgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbWVtb3J5IHNhZmV0eSBpbXBsaWNhdGlvbnMuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIG1vdmluZyB0aGlzIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKWAgY2FsbCBvdXQgb2YgYSBjb25kaXRpb25hbCBibG9jayBpbiBgaWVlZTgwMjExX2RvX3N0b3AoKWAuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpbiBgaWVlZTgwMjExX2RvX29wZW4oKWAgd2UgKmFsd2F5cyogY2FsbCBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAxKWAgZm9yIG1vbml0b3IgaW50ZXJmYWNlcywgd2hpY2ggaXMgZmluZS4gVGhlIHByZXZpb3VzIHNldHVwIGhhZCBhIGZsYXc6IHdoZW4gc3RvcHBpbmcgYSBtb25pdG9yIGludGVyZmFjZSB0aGF0IHdhcyBhY3RpdmUsIG9yIG9uIGhhcmR3YXJlIHRoYXQgKmRpZG4mIzM5O3QqIHN1cHBvcnQgYSB2aXJ0dWFsIG1vbml0b3IsIHRoaXMgY2FsbCB3YXNuJiMzOTt0IG1hZGUsIG1lYW5pbmcgdGhvc2UgaW50ZXJuYWwgY291bnRlcnMgaW4gYGxvY2FsYCB3ZXJlbiYjMzk7dCBnZXR0aW5nIGRlY3JlbWVudGVkIHByb3Blcmx5LiBUaGF0IG1lYW5zIHRoZSBgbG9jYWxgIHN0cnVjdCwgd2hpY2ggdHJhY2tzIGFsbCB0aGVzZSBzdGF0aXN0aWNzLCB3b3VsZCBiZSBpbmNvbnNpc3RlbnQgYW5kIHBvdGVudGlhbGx5IGxlYWQgdG8gaW5hY2N1cmF0ZSBzdGF0ZSB0cmFja2luZyBpbiB0aGUgZHJpdmVyLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdGllcz8gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246CgoqICAgTm8ga2VybmVsIHRvIHVzZXIgbWVtb3J5IGNvcHkgaGFwcGVuaW5nIGhlcmUuIEdvb2QuCiogICBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIG9yIGJ1ZmZlcnMgaW50cm9kdWNlZC4gVGhhdCYjMzk7cyBhIHJlbGllZi4KKiAgIE5vIHJlYWRpbmcgb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgYnJhbmNoaW5nIG9uIHRoZW0uIENoZWNrLgoqICAgVGhlIGNoYW5nZSBkb2VzbiYjMzk7dCB0b3VjaCBib3VuZHMgY2hlY2tzLCBidWZmZXIgbGVuZ3Rocywgb3IgYW55IGRhdGEgY29weWluZyBsb2dpYy4gRXhjZWxsZW50LgoqICAgQW5kIHRob3NlIGNvdW50ZXJzIHRoYXQgYXJlIGJlaW5nIGFkanVzdGVkPyBUaGV5JiMzOTtyZSBqdXN0IGludGVnZXJzIHdpdGhpbiB0aGUgYGllZWU4MDIxMV9sb2NhbGAgc3RydWN0dXJlLiBTbywgd2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggYW55IHJhdyBwb2ludGVycyBvciBjb21wbGV4IG1lbW9yeSBtYW5pcHVsYXRpb25zLgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IHRoYXQgdGhpcyBjaGFuZ2UgKmRvZXNuJiMzOTt0KiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBTdGFuZGFyZCBmdXp6aW5nLCBLQVNBTiwgYW5kIHJlZ3VsYXIgdGVzdGluZyBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgaXNzdWVzLiBObyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaGVyZS4KCk9rYXksIG5vdyBsZXQmIzM5O3MgZ2V0IHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gYWNjb3VudGluZyBidWcgaW4gbWFjODAyMTEgbW9uaXRvciBpbnRlcmZhY2UgaGFuZGxpbmcgYnkgbW92aW5nIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKWAgb3V0c2lkZSB0aGUgY29uZGl0aW9uYWwgY2hlY2sgaW4gYGllZWU4MDIxMV9kb19zdG9wKClgLCBwcm9wZXJseSBiYWxhbmNpbmcgdGhlIHVuY29uZGl0aW9uYWwgY2FsbCB0byBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAxKWAgaW4gYGllZWU4MDIxMV9kb19vcGVuKClgLiBcblxuVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGludGVybmFsIG1vbml0b3IgZmxhZyBjb3VudGVycyBvbiBgc3RydWN0IGllZWU4MDIxMV9sb2NhbGAgKHN1Y2ggYXMgYGxvY2FsLVx1MDAzZWZpZl9mY3NmYWlsYCwgYGxvY2FsLVx1MDAzZXR4X21udHJzYCwgZXRjLikuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGNvcHkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGhzIG9yIGluaXRpYWxpemF0aW9uIGxvZ2ljLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4sIGFuZCBzdGFuZGFyZCBLQVNBTi90ZXN0aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBhY2NvdW50aW5nIGJ1ZyBpbiBtYWM4MDIxMSBtb25pdG9yIGludGVyZmFjZSBoYW5kbGluZyBieSBtb3ZpbmcgYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpYCBvdXRzaWRlIHRoZSBjb25kaXRpb25hbCBjaGVjayBpbiBgaWVlZTgwMjExX2RvX3N0b3AoKWAsIHByb3Blcmx5IGJhbGFuY2luZyB0aGUgdW5jb25kaXRpb25hbCBjYWxsIHRvIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIDEpYCBpbiBgaWVlZTgwMjExX2RvX29wZW4oKWAuIFxuXG5UaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgaW50ZXJuYWwgbW9uaXRvciBmbGFnIGNvdW50ZXJzIG9uIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYCAoc3VjaCBhcyBgbG9jYWwtXHUwMDNlZmlmX2Zjc2ZhaWxgLCBgbG9jYWwtXHUwMDNldHhfbW50cnNgLCBldGMuKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiwgYW5kIHN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTU6NDEuNDQ3MzUwOTM2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzOTA3NzY5OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImllZWU4MDIxMV9kb19zdG9wXCIsXG4gICAgXCJpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3NcIixcbiAgICBcImllZWU4MDIxMV9zdG9wXCIsXG4gICAgXCJpZWVlODAyMTFfcnVudGltZV9jaGFuZ2VfaWZ0eXBlXCIsXG4gICAgXCJpZWVlODAyMTFfc2V0X21vbl9vcHRpb25zXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBhY2NvdW50aW5nIGJ1ZyBpbiBtYWM4MDIxMSBtb25pdG9yIGludGVyZmFjZSBoYW5kbGluZyBieSBtb3ZpbmcgYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpYCBvdXRzaWRlIHRoZSBjb25kaXRpb25hbCBjaGVjayBpbiBgaWVlZTgwMjExX2RvX3N0b3AoKWAsIHByb3Blcmx5IGJhbGFuY2luZyB0aGUgdW5jb25kaXRpb25hbCBjYWxsIHRvIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIDEpYCBpbiBgaWVlZTgwMjExX2RvX29wZW4oKWAuIFxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBpbnRlcm5hbCBtb25pdG9yIGZsYWcgY291bnRlcnMgb24gYHN0cnVjdCBpZWVlODAyMTFfbG9jYWxgIChzdWNoIGFzIGBsb2NhbC1cXHUwMDNlZmlmX2Zjc2ZhaWxgLCBgbG9jYWwtXFx1MDAzZXR4X21udHJzYCwgZXRjLikuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGNvcHkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGhzIG9yIGluaXRpYWxpemF0aW9uIGxvZ2ljLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4sIGFuZCBzdGFuZGFyZCBLQVNBTi90ZXN0aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbW9uaXRvciBpbnRlcmZhY2UgdGVhcmRvd24gaGFuZGxpbmcgaW4gbmV0L21hYzgwMjExL2lmYWNlLmMgKGllZWU4MDIxMV9kb19zdG9wKSBieSBlbnN1cmluZyB0aGF0IGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncygpIGlzIGFsd2F5cyBpbnZva2VkIHRvIGRlY3JlbWVudCBtb25pdG9yIGZsYWdzIHdoZW4gc3RvcHBpbmcgYSBtb25pdG9yIGludGVyZmFjZSwgcmVnYXJkbGVzcyBvZiB0aGUgdmlydHVhbCBtb25pdG9yIHN0YXR1cy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWFjODAyMTFfaHdzaW0gYW5kIG5sODAyMTEvcnRuZXRsaW5rIGludGVyZmFjZSBjb250cm9sIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU1OjQxLjQ0NzM1Njk5NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg5NTQzMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWQ4ODdiOWEwMGY5NzQ3NTBhMjE1ODBiYmU5NjlhZTYxNmM3MjNkZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDA3OjU1OjQwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcXG5pbmRleCA0MzQ2MGE3MDVhNmJkLi45YjQwMGNhZjI3NjUyIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jXFxuKysrIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcXG5AQCAtNjMwLDggKzYzMCw5IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9kb19zdG9wKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBib29sIGdvaW5nX2RvXFxuIFxcdFxcdFxcdFxcdGh3X3JlY29uZl9mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9DSEFOR0VfTU9OSVRPUjtcXG4gXFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSk7XFxuIFxcdFxcdH1cXG4rXFxuK1xcdFxcdGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU46XFxuIFxcdFxcdC8qIENoZWNrIGlmIGFueSBvcGVuIE5BTl9EQVRBIGludGVyZmFjZXMgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTU6NDIuMDM3NjA5MDA2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjE1NDI1MjEyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWVlZTgwMjExX2RvX3N0b3BcIixcbiAgICBcImllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFnc1wiLFxuICAgIFwiaWVlZTgwMjExX3N0b3BcIixcbiAgICBcImllZWU4MDIxMV9ydW50aW1lX2NoYW5nZV9pZnR5cGVcIixcbiAgICBcImllZWU4MDIxMV9zZXRfbW9uX29wdGlvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtb25pdG9yIGludGVyZmFjZSB0ZWFyZG93biBoYW5kbGluZyBpbiBuZXQvbWFjODAyMTEvaWZhY2UuYyAoaWVlZTgwMjExX2RvX3N0b3ApIGJ5IGVuc3VyaW5nIHRoYXQgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKCkgaXMgYWx3YXlzIGludm9rZWQgdG8gZGVjcmVtZW50IG1vbml0b3IgZmxhZ3Mgd2hlbiBzdG9wcGluZyBhIG1vbml0b3IgaW50ZXJmYWNlLCByZWdhcmRsZXNzIG9mIHRoZSB2aXJ0dWFsIG1vbml0b3Igc3RhdHVzLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBtYWM4MDIxMV9od3NpbSBhbmQgbmw4MDIxMS9ydG5ldGxpbmsgaW50ZXJmYWNlIGNvbnRyb2wgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5ZDg4N2I5YTAwZjk3NDc1MGEyMTU4MGJiZTk2OWFlNjE2YzcyM2RmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwNzo1NTo0MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbmluZGV4IDQzNDYwYTcwNWE2YmQuLjliNDAwY2FmMjc2NTIgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuY1xuKysrIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbkBAIC02MzAsOCArNjMwLDkgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2RvX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGJvb2wgZ29pbmdfZG9cbiBcdFx0XHRcdGh3X3JlY29uZl9mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9DSEFOR0VfTU9OSVRPUjtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSk7XG4gXHRcdH1cbitcbitcdFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9OQU46XG4gXHRcdC8qIENoZWNrIGlmIGFueSBvcGVuIE5BTl9EQVRBIGludGVyZmFjZXMgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU1OjQyLjAzNzYxMDE2NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzNDk3MTUxMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIE1BQzgwMjExIEludGVyZmFjZSBDb2RlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoLCB3aGljaCBmcm9tIHRoZSBjb250ZXh0IGNsdWVzLCBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIHRoZSBuZXR3b3JrIGludGVyZmFjZSB3aXRoaW4gdGhlIE1BQzgwMjExIHN1YnN5c3RlbS4gVGhlIGZpbGUgb2YgaW50ZXJlc3QgaXMgYG5ldC9tYWM4MDIxMS9pZmFjZS5jYC4gSSBoYXZlIGEgZ29vZCBoYW5kbGUgb24gdGhhdCBhcmVhLCBzbyBteSBmaXJzdCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIHRoYXQgZmlsZSBhbmQgZ2V0IGEgZmVlbCBmb3IgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIE15IGd1dCB0ZWxscyBtZSB0aGlzIHdpbGwgYmUgYXQsIG9yIGFyb3VuZCwgbGluZSA2MzAuIEl0J3MgdGltZSB0byB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQgaW4gdGhhdCBwYXJ0aWN1bGFyIHNwb3Qgb2YgYGlmYWNlLmNgLiBUaGlzIGNvbnRleHQgaXMgY3J1Y2lhbCwgYmVmb3JlIEkgZXZlbiBzdGFydCB0byB0cnVseSBhbmFseXplIHRoZSBpbXBhY3Qgb2YgdGhlIGNoYW5nZXMuIFRoaXMgc2hvdWxkIHByb3ZpZGUgbWUgd2l0aCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgZ2l2ZSBtZSBhIGZlZWwgZm9yIHRoZSBzcGVjaWZpYyBwaWVjZS4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgdG8gZm9ybSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU1OjQ2LjM4NzMyOTMyMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvaWZhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MTAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MTA6XFx0XFx0aWYgKGdvaW5nX2Rvd24pXFxuIDYxMTpcXHRcXHRcXHRsb2NhbC1cXHUwMDNlb3Blbl9jb3VudC0tO1xcbiA2MTI6XFx0XFxuIDYxMzpcXHRcXHRzd2l0Y2ggKHNkYXRhLVxcdTAwM2V2aWYudHlwZSkge1xcbiA2MTQ6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOlxcbiA2MTU6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnNkYXRhLVxcdTAwM2V1LnZsYW4ubGlzdCk7XFxuIDYxNjpcXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKHNkYXRhLVxcdTAwM2V2aWYuYnNzX2NvbmYuY2hhbmN0eF9jb25mLCBOVUxMKTtcXG4gNjE3OlxcdFxcdFxcdC8qIHNlZSBjb21tZW50IGluIHRoZSBkZWZhdWx0IGNhc2UgYmVsb3cgKi9cXG4gNjE4OlxcdFxcdFxcdGllZWU4MDIxMV9mcmVlX2tleXMoc2RhdGEsIHRydWUpO1xcbiA2MTk6XFx0XFx0XFx0Lyogbm8gbmVlZCB0byB0ZWxsIGRyaXZlciAqL1xcbiA2MjA6XFx0XFx0XFx0YnJlYWs7XFxuIDYyMTpcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6XFxuIDYyMjpcXHRcXHRcXHRsb2NhbC1cXHUwMDNlbW9uaXRvcnMtLTtcXG4gNjIzOlxcdFxcbiA2MjQ6XFx0XFx0XFx0aWYgKCEoc2RhdGEtXFx1MDAzZXUubW50ci5mbGFncyBcXHUwMDI2IE1PTklUT1JfRkxBR19BQ1RJVkUpIFxcdTAwMjZcXHUwMDI2XFxuIDYyNTpcXHRcXHRcXHQgICAgIWllZWU4MDIxMV9od19jaGVjayhcXHUwMDI2bG9jYWwtXFx1MDAzZWh3LCBOT19WSVJUVUFMX01PTklUT1IpKSB7XFxuIDYyNjpcXHRcXG4gNjI3OlxcdFxcdFxcdFxcdGxvY2FsLVxcdTAwM2V2aXJ0X21vbml0b3JzLS07XFxuIDYyODpcXHRcXHRcXHRcXHRpZiAobG9jYWwtXFx1MDAzZXZpcnRfbW9uaXRvcnMgPT0gMCkge1xcbiA2Mjk6XFx0XFx0XFx0XFx0XFx0bG9jYWwtXFx1MDAzZWh3LmNvbmYuZmxhZ3MgXFx1MDAyNj0gfklFRUU4MDIxMV9DT05GX01PTklUT1I7XFxuIDYzMDpcXHRcXHRcXHRcXHRcXHRod19yZWNvbmZfZmxhZ3MgfD0gSUVFRTgwMjExX0NPTkZfQ0hBTkdFX01PTklUT1I7XFxuIDYzMTpcXHRcXHRcXHRcXHR9XFxuIDYzMjpcXHRcXG4gNjMzOlxcdFxcdFxcdH1cXG4gNjM0OlxcdFxcbiA2MzU6XFx0XFx0XFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSk7XFxuIDYzNjpcXHRcXHRcXHRicmVhaztcXG4gNjM3OlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTkFOOlxcbiA2Mzg6XFx0XFx0XFx0LyogQ2hlY2sgaWYgYW55IG9wZW4gTkFOX0RBVEEgaW50ZXJmYWNlcyAqL1xcbiA2Mzk6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcXG4gNjQwOlxcdFxcdFxcdFxcdFdBUk5fT04oaXRlci1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEEgXFx1MDAyNlxcdTAwMjZcXG4gNjQxOlxcdFxcdFxcdFxcdFxcdGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKGl0ZXIpKTtcXG4gNjQyOlxcdFxcdFxcdH1cXG4gNjQzOlxcdFxcbiA2NDQ6XFx0XFx0XFx0LyogY2xlYW4gYWxsIHRoZSBmdW5jdGlvbnMgKi9cXG4gNjQ1OlxcdFxcdFxcdGlmICghKGxvY2FsLVxcdTAwM2Vody53aXBoeS1cXHUwMDNlbmFuX2NhcGEuZmxhZ3MgXFx1MDAyNlxcbiA2NDY6XFx0XFx0XFx0ICAgICAgV0lQSFlfTkFOX0ZMQUdTX1VTRVJTUEFDRV9ERSkpIHtcXG4gNjQ3OlxcdFxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2c2RhdGEtXFx1MDAzZXUubmFuLmRlLmZ1bmNfbG9jayk7XFxuIDY0ODpcXHRcXG4gNjQ5OlxcdFxcdFxcdFxcdGlkcl9mb3JfZWFjaF9lbnRyeShcXHUwMDI2c2RhdGEtXFx1MDAzZXUubmFuLmRlLmZ1bmN0aW9uX2luc3RfaWRzLFxcbiA2NTA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgZnVuYywgaSkge1xcbiA2NTE6XFx0XFx0XFx0XFx0XFx0aWRyX3JlbW92ZShcXHUwMDI2c2RhdGEtXFx1MDAzZXUubmFuLmRlLmZ1bmN0aW9uX2luc3RfaWRzLCBpKTtcXG4gNjUyOlxcdFxcdFxcdFxcdFxcdGNmZzgwMjExX2ZyZWVfbmFuX2Z1bmMoZnVuYyk7XFxuIDY1MzpcXHRcXHRcXHRcXHR9XFxuIDY1NDpcXHRcXHRcXHRcXHRpZHJfZGVzdHJveShcXHUwMDI2c2RhdGEtXFx1MDAzZXUubmFuLmRlLmZ1bmN0aW9uX2luc3RfaWRzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTU6NDYuMzg3NTAyOTQyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM0MzczOTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3NgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBvZiBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2Ugd2hlcmUgaXQncyBjYWxsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgaW50ZXJmYWNlIG9wZXJhdGlvbnMuIFNpbmNlIGl0IHNvdW5kcyBsaWtlIHRoaXMgZnVuY3Rpb24gaXMgcmVsYXRlZCB0byBtb25pdG9yaW5nIG1vZGUsIEknbGwgZm9jdXMgb24gYGllZWU4MDIxMV9kb19vcGVuYCwgYGllZWU4MDIxMV9kb19zdG9wYCwgYW5kIG90aGVyIHBsYWNlcyB3aGVyZSBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBoYXBwZW5zLiBUaG9zZSBmdW5jdGlvbnMgYXJlIHRoZSBtb3N0IGxpa2VseSBjYW5kaWRhdGVzLiBJJ20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBmb3IgYG5ldC9tYWM4MDIxMS9pZmFjZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyA1MDAgdG8gNjEwLiBUaGF0IGJsb2NrIHNob3VsZCBjb250YWluIHRoZSBjb3JlIGxvZ2ljIGZvciBpbnRlcmZhY2UgbWFuYWdlbWVudCwgc28gaXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaWRlbnRpZnkgYW55IGNhbGxzIHRvIHRoYXQgZnVuY3Rpb24gYW5kIHdoYXQgcGFyYW1ldGVycyBpdCdzIGxpa2VseSBiZWluZyBwYXNzZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSBmbGFncyBhcmUgYmVpbmcgYWRqdXN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNzYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU1OjQ4LjczMTI0NDA3MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvaWZhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAwOlxcdFxcdFxcdGllZWU4MDIxMV9zY2FuX2NhbmNlbChsb2NhbCk7XFxuIDUwMTpcXHRcXG4gNTAyOlxcdFxcdGllZWU4MDIxMV9yb2NfcHVyZ2UobG9jYWwsIHNkYXRhKTtcXG4gNTAzOlxcdFxcbiA1MDQ6XFx0XFx0c3dpdGNoIChzZGF0YS1cXHUwMDNldmlmLnR5cGUpIHtcXG4gNTA1OlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjpcXG4gNTA2OlxcdFxcdFxcdGllZWU4MDIxMV9tZ2Rfc3RvcChzZGF0YSk7XFxuIDUwNzpcXHRcXHRcXHRicmVhaztcXG4gNTA4OlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6XFxuIDUwOTpcXHRcXHRcXHRpZWVlODAyMTFfaWJzc19zdG9wKHNkYXRhKTtcXG4gNTEwOlxcdFxcdFxcdGJyZWFrO1xcbiA1MTE6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOlxcbiA1MTI6XFx0XFx0XFx0bGlzdF9kZWxfcmN1KFxcdTAwMjZzZGF0YS1cXHUwMDNldS5tbnRyLmxpc3QpO1xcbiA1MTM6XFx0XFx0XFx0YnJlYWs7XFxuIDUxNDpcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQX1ZMQU46XFxuIDUxNTpcXHRcXHRcXHRpZWVlODAyMTFfYXB2bGFuX2xpbmtfY2xlYXIoc2RhdGEpO1xcbiA1MTY6XFx0XFx0XFx0YnJlYWs7XFxuIDUxNzpcXHRcXHRkZWZhdWx0OlxcbiA1MTg6XFx0XFx0XFx0YnJlYWs7XFxuIDUxOTpcXHRcXHR9XFxuIDUyMDpcXHRcXG4gNTIxOlxcdFxcdC8qXFxuIDUyMjpcXHRcXHQgKiBSZW1vdmUgYWxsIHN0YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGludGVyZmFjZS5cXG4gNTIzOlxcdFxcdCAqXFxuIDUyNDpcXHRcXHQgKiBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgY2FsbGluZyBvcHMtXFx1MDAzZXJlbW92ZV9pbnRlcmZhY2UoKVxcbiA1MjU6XFx0XFx0ICogYmVjYXVzZSBvdGhlcndpc2Ugd2UgY2FuIGxhdGVyIGludm9rZSBvcHMtXFx1MDAzZXN0YV9ub3RpZnkoKVxcbiA1MjY6XFx0XFx0ICogd2hlbmV2ZXIgdGhlIFNUQXMgYXJlIHJlbW92ZWQsIGFuZCB0aGF0IGludmFsaWRhdGVzIGRyaXZlclxcbiA1Mjc6XFx0XFx0ICogYXNzdW1wdGlvbnMgYWJvdXQgYWx3YXlzIGdldHRpbmcgYSB2aWYgcG9pbnRlciB0aGF0IGlzIHZhbGlkXFxuIDUyODpcXHRcXHQgKiAoYmVjYXVzZSBpZiB3ZSByZW1vdmUgYSBTVEEgYWZ0ZXIgb3BzLVxcdTAwM2VyZW1vdmVfaW50ZXJmYWNlKClcXG4gNTI5OlxcdFxcdCAqIHRoZSBkcml2ZXIgd2lsbCBoYXZlIHJlbW92ZWQgdGhlIHZpZiBpbmZvIGFscmVhZHkhKVxcbiA1MzA6XFx0XFx0ICpcXG4gNTMxOlxcdFxcdCAqIEZvciBBUF9WTEFOcywgTkFOIGFuZCBOQU5fREFUQSBzdGF0aW9ucyBtYXkgZXhpc3Qgc2luY2UgdGhlcmUnc1xcbiA1MzI6XFx0XFx0ICogbm90aGluZyBlbHNlIHRoYXQgd291bGQgaGF2ZSByZW1vdmVkIHRoZW0sIGJ1dCBpbiBvdGhlciBtb2RlcyB0aGVyZVxcbiA1MzM6XFx0XFx0ICogc2hvdWxkbid0IGJlIGFueSBzdGF0aW9ucy5cXG4gNTM0OlxcdFxcdCAqL1xcbiA1MzU6XFx0XFx0Zmx1c2hlZCA9IHN0YV9pbmZvX2ZsdXNoKHNkYXRhLCAtMSk7XFxuIDUzNjpcXHRcXHRXQVJOX09OX09OQ0Uoc2RhdGEtXFx1MDAzZXZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4gXFx1MDAyNlxcdTAwMjZcXG4gNTM3OlxcdFxcdFxcdCAgICAgc2RhdGEtXFx1MDAzZXZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX05BTiBcXHUwMDI2XFx1MDAyNlxcbiA1Mzg6XFx0XFx0XFx0ICAgICBzZGF0YS1cXHUwMDNldmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEEgXFx1MDAyNlxcdTAwMjYgZmx1c2hlZCBcXHUwMDNlIDApO1xcbiA1Mzk6XFx0XFxuIDU0MDpcXHRcXHQvKiBkb24ndCBjb3VudCB0aGlzIGludGVyZmFjZSBmb3IgYWxsbXVsdGkgd2hpbGUgaXQgaXMgZG93biAqL1xcbiA1NDE6XFx0XFx0aWYgKHNkYXRhLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9TREFUQV9BTExNVUxUSSlcXG4gNTQyOlxcdFxcdFxcdGF0b21pY19kZWMoXFx1MDAyNmxvY2FsLVxcdTAwM2VpZmZfYWxsbXVsdGlzKTtcXG4gNTQzOlxcdFxcbiA1NDQ6XFx0XFx0aWYgKHNkYXRhLVxcdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkge1xcbiA1NDU6XFx0XFx0XFx0bG9jYWwtXFx1MDAzZWZpZl9wc3BvbGwtLTtcXG4gNTQ2OlxcdFxcdFxcdGxvY2FsLVxcdTAwM2VmaWZfcHJvYmVfcmVxLS07XFxuIDU0NzpcXHRcXHR9IGVsc2UgaWYgKHNkYXRhLVxcdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykge1xcbiA1NDg6XFx0XFx0XFx0bG9jYWwtXFx1MDAzZWZpZl9wcm9iZV9yZXEtLTtcXG4gNTQ5OlxcdFxcdH1cXG4gNTUwOlxcdFxcbiA1NTE6XFx0XFx0aWYgKHNkYXRhLVxcdTAwM2VkZXYpIHtcXG4gNTUyOlxcdFxcdFxcdG5ldGlmX2FkZHJfbG9ja19iaChzZGF0YS1cXHUwMDNlZGV2KTtcXG4gNTUzOlxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bG9jYWwtXFx1MDAzZWZpbHRlcl9sb2NrKTtcXG4gNTU0OlxcdFxcdFxcdF9faHdfYWRkcl91bnN5bmMoXFx1MDAyNmxvY2FsLVxcdTAwM2VtY19saXN0LCBcXHUwMDI2c2RhdGEtXFx1MDAzZWRldi1cXHUwMDNlbWMsXFxuIDU1NTpcXHRcXHRcXHRcXHRcXHQgc2RhdGEtXFx1MDAzZWRldi1cXHUwMDNlYWRkcl9sZW4pO1xcbiA1NTY6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmxvY2FsLVxcdTAwM2VmaWx0ZXJfbG9jayk7XFxuIDU1NzpcXHRcXHRcXHRuZXRpZl9hZGRyX3VubG9ja19iaChzZGF0YS1cXHUwMDNlZGV2KTtcXG4gNTU4OlxcdFxcdH1cXG4gNTU5OlxcdFxcbiA1NjA6XFx0XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNmxvY2FsLVxcdTAwM2VkeW5hbWljX3BzX3RpbWVyKTtcXG4gNTYxOlxcdFxcdHdpcGh5X3dvcmtfY2FuY2VsKGxvY2FsLVxcdTAwM2Vody53aXBoeSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VkeW5hbWljX3BzX2VuYWJsZV93b3JrKTtcXG4gNTYyOlxcdFxcbiA1NjM6XFx0XFx0V0FSTihpZWVlODAyMTFfdmlmX2lzX21sZChcXHUwMDI2c2RhdGEtXFx1MDAzZXZpZiksXFxuIDU2NDpcXHRcXHQgICAgIFxcXCJkZXN0cm95aW5nIGludGVyZmFjZSB3aXRoIHZhbGlkIGxpbmtzIDB4JTA0eFxcXFxuXFxcIixcXG4gNTY1OlxcdFxcdCAgICAgc2RhdGEtXFx1MDAzZXZpZi52YWxpZF9saW5rcyk7XFxuIDU2NjpcXHRcXG4gNTY3OlxcdFxcdHNkYXRhLVxcdTAwM2V2aWYuYnNzX2NvbmYuY3NhX2FjdGl2ZSA9IGZhbHNlO1xcbiA1Njg6XFx0XFx0aWYgKHNkYXRhLVxcdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKVxcbiA1Njk6XFx0XFx0XFx0c2RhdGEtXFx1MDAzZWRlZmxpbmsudS5tZ2QuY3NhLndhaXRpbmdfYmNuID0gZmFsc2U7XFxuIDU3MDpcXHRcXHRpZWVlODAyMTFfdmlmX3VuYmxvY2tfcXVldWVzX2NzYShzZGF0YSk7XFxuIDU3MTpcXHRcXG4gNTcyOlxcdFxcdHdpcGh5X3dvcmtfY2FuY2VsKGxvY2FsLVxcdTAwM2Vody53aXBoeSwgXFx1MDAyNnNkYXRhLVxcdTAwM2VkZWZsaW5rLmNzYS5maW5hbGl6ZV93b3JrKTtcXG4gNTczOlxcdFxcdHdpcGh5X3dvcmtfY2FuY2VsKGxvY2FsLVxcdTAwM2Vody53aXBoeSxcXG4gNTc0OlxcdFxcdFxcdFxcdCAgXFx1MDAyNnNkYXRhLVxcdTAwM2VkZWZsaW5rLmNvbG9yX2NoYW5nZV9maW5hbGl6ZV93b3JrKTtcXG4gNTc1OlxcdFxcdHdpcGh5X2hydGltZXJfd29ya19jYW5jZWwobG9jYWwtXFx1MDAzZWh3LndpcGh5LFxcbiA1NzY6XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2c2RhdGEtXFx1MDAzZWRlZmxpbmsuZGZzX2NhY190aW1lcl93b3JrKTtcXG4gNTc3OlxcdFxcbiA1Nzg6XFx0XFx0aWYgKHNkYXRhLVxcdTAwM2V3ZGV2LmxpbmtzWzBdLmNhY19zdGFydGVkKSB7XFxuIDU3OTpcXHRcXHRcXHRjaGFuZGVmID0gc2RhdGEtXFx1MDAzZXZpZi5ic3NfY29uZi5jaGFucmVxLm9wZXI7XFxuIDU4MDpcXHRcXHRcXHRXQVJOX09OKGxvY2FsLVxcdTAwM2VzdXNwZW5kZWQpO1xcbiA1ODE6XFx0XFx0XFx0aWVlZTgwMjExX2xpbmtfcmVsZWFzZV9jaGFubmVsKFxcdTAwMjZzZGF0YS1cXHUwMDNlZGVmbGluayk7XFxuIDU4MjpcXHRcXHRcXHRjZmc4MDIxMV9jYWNfZXZlbnQoc2RhdGEtXFx1MDAzZWRldiwgXFx1MDAyNmNoYW5kZWYsXFxuIDU4MzpcXHRcXHRcXHRcXHRcXHQgICBOTDgwMjExX1JBREFSX0NBQ19BQk9SVEVELFxcbiA1ODQ6XFx0XFx0XFx0XFx0XFx0ICAgR0ZQX0tFUk5FTCwgMCk7XFxuIDU4NTpcXHRcXHR9XFxuIDU4NjpcXHRcXG4gNTg3OlxcdFxcdGlmIChzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHtcXG4gNTg4OlxcdFxcdFxcdFdBUk5fT04oIWxpc3RfZW1wdHkoXFx1MDAyNnNkYXRhLVxcdTAwM2V1LmFwLnZsYW5zKSk7XFxuIDU4OTpcXHRcXHR9IGVsc2UgaWYgKHNkYXRhLVxcdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKSB7XFxuIDU5MDpcXHRcXHRcXHQvKiByZW1vdmUgYWxsIHBhY2tldHMgaW4gcGFyZW50IGJjX2J1ZiBwb2ludGluZyB0byB0aGlzIGRldiAqL1xcbiA1OTE6XFx0XFx0XFx0X19za2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZmcmVlcSk7XFxuIDU5MjpcXHRcXHRcXHRwcyA9IFxcdTAwMjZzZGF0YS1cXHUwMDNlYnNzLVxcdTAwM2VwcztcXG4gNTkzOlxcdFxcbiA1OTQ6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnBzLVxcdTAwM2ViY19idWYubG9jaywgZmxhZ3MpO1xcbiA1OTU6XFx0XFx0XFx0c2tiX3F1ZXVlX3dhbGtfc2FmZShcXHUwMDI2cHMtXFx1MDAzZWJjX2J1Ziwgc2tiLCB0bXApIHtcXG4gNTk2OlxcdFxcdFxcdFxcdGlmIChza2ItXFx1MDAzZWRldiA9PSBzZGF0YS1cXHUwMDNlZGV2KSB7XFxuIDU5NzpcXHRcXHRcXHRcXHRcXHRfX3NrYl91bmxpbmsoc2tiLCBcXHUwMDI2cHMtXFx1MDAzZWJjX2J1Zik7XFxuIDU5ODpcXHRcXHRcXHRcXHRcXHRsb2NhbC1cXHUwMDNldG90YWxfcHNfYnVmZmVyZWQtLTtcXG4gNTk5OlxcdFxcdFxcdFxcdFxcdF9fc2tiX3F1ZXVlX3RhaWwoXFx1MDAyNmZyZWVxLCBza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo1NTo0OC43MzEzNzMyODJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTI1NjI5MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgbWFjODAyMTEgTW9uaXRvciBNb2RlIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgaWVlZTgwMjExX2RvX3N0b3AoKWAsIEkgc2VlIHRoYXQgdGhlIGNhbGwgdG8gYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpYCBoYXMgYmVlbiBtb3ZlZCBvdXRzaWRlIG9mIHRoYXQgY29uZGl0aW9uYWwgYmxvY2suIFRoYXQncyBhIGtleSBjaGFuZ2UsIGFuZCBpdCBoYXMgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zLiBCZWZvcmUsIHRoaXMgZGVjcmVtZW50IGluIG1vbml0b3IgZmxhZ3Mgd2FzIG9ubHkgaGFwcGVuaW5nIGlmIHRoZSBtb25pdG9yIGludGVyZmFjZSB3YXNuJ3QgYWN0aXZlbHkgdXNlZCBhbmQgdGhlcmUgd2VyZSBubyB2aXJ0dWFsIG1vbml0b3JzIHJlbWFpbmluZy4gTm93LCBpdCBoYXBwZW5zIHVuY29uZGl0aW9uYWxseS5cblxuU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBkb25lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFsd2F5cyBkZWNyZW1lbnRpbmcgdGhlIG1vbml0b3IgZmxhZ3MsIHJlZ2FyZGxlc3Mgb2YgdGhlIGFjdGl2ZSBzdGF0ZSBvciB0aGUgdmlydHVhbCBtb25pdG9yIGNvdW50LiBUbyBnZXQgYSBoYW5kbGUgb24gdGhpcywgSSBuZWVkIHRvIHNlZSBob3cgdGhlIGZsYWdzIGFyZSAqYWRqdXN0ZWQqIG9uIHRoZSBvcGVuL3N0YXJ0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgdGhhdCBvcGVucyBvciBzdGFydHMgYW4gaW50ZXJmYWNlLCBzbyBJJ20gZ29pbmcgdG8gbG9vayBhdCBgaWVlZTgwMjExX2RvX29wZW5gIGluIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AuIFNlZWluZyBob3cgdGhlIGZsYWdzIGFyZSB1c2VkIGluIHRoZSBvcGVuL3N0YXJ0IG9wZXJhdGlvbiB3aWxsIGhvcGVmdWxseSBzaGVkIGxpZ2h0IG9uIHdoYXQgdGhpcyB1bmNvbmRpdGlvbmFsIGRlY3JlbWVudCBpcyBkZXNpZ25lZCB0byBhY2hpZXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzI2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTU6NTIuMjU3MDA1MDEyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MzE5MjQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZGp1c3RfbW9uaXRvcl9mbGFnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL2NmZy5jPTk2PXN0YXRpYyBpbnQgaWVlZTgwMjExX3NldF9tb25fb3B0aW9ucyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy0xNDItXFx0XFx0aWYgKGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkge1xcbm5ldC9tYWM4MDIxMS9jZmcuYzoxNDM6XFx0XFx0XFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSk7XFxubmV0L21hYzgwMjExL2NmZy5jLTE0NC1cXHRcXHRcXHRzZGF0YS1cXHUwMDNldS5tbnRyLmZsYWdzID0gcGFyYW1zLVxcdTAwM2VmbGFncztcXG5uZXQvbWFjODAyMTEvY2ZnLmM6MTQ1OlxcdFxcdFxcdGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgMSk7XFxubmV0L21hYzgwMjExL2NmZy5jLTE0Ni1cXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTIyMDI9dm9pZCBpZWVlODAyMTFfcmVjYWxjX2lkbGUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpO1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjIyMDM6dm9pZCBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjIwNC1cXHRcXHRcXHRcXHQgICAgY29uc3QgaW50IG9mZnNldCk7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz00Nzk9c3RhdGljIHZvaWQgaWVlZTgwMjExX2RvX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGJvb2wgZ29pbmdfZG93bilcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTYzNC1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo2MzU6XFx0XFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSk7XFxubmV0L21hYzgwMjExL2lmYWNlLmMtNjM2LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmM9MTE1Nj12b2lkIGllZWU4MDIxMV9yZWNhbGNfb2ZmbG9hZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbClcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTExNzItXFxubmV0L21hYzgwMjExL2lmYWNlLmM6MTE3Mzp2b2lkIGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMTc0LVxcdFxcdFxcdFxcdCAgICBjb25zdCBpbnQgb2Zmc2V0KVxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmM9MTM2Nj1pbnQgaWVlZTgwMjExX2RvX29wZW4oc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgYm9vbCBjb21pbmdfdXApXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xNTA2LVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjE1MDc6XFx0XFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAxKTtcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xNTA4LVxcdFxcdGllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTU6NTIuNjIwMjAxNTk2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1MDU2OTg2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1BQzgwMjExIEludGVyZmFjZSBPcGVuaW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyZmFjZSBvcGVuaW5nIHByb2NlZHVyZSB3aXRoaW4gdGhlIG1hYzgwMjExIGZyYW1ld29yay4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiBob3cgaXQncyBoYW5kbGVkLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8ganVtcCBpbnRvIHRoZSBgaWVlZTgwMjExX2RvX29wZW5gIGZ1bmN0aW9uLCB3aGljaCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIGVudHJ5IHBvaW50IGZvciB0aGlzIHByb2Nlc3MuIEknbSBnb2luZyB0byBoZWFkIG92ZXIgdG8gdGhlIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AgZmlsZSBhbmQgemVybyBpbiBvbiB0aGUgdmljaW5pdHkgb2YgbGluZSAxNTAwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgY2FsbCBmbG93IGFuZCBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2Qgd2hlbiBhIHdpcmVsZXNzIGludGVyZmFjZSBpcyBicm91Z2h0IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Nzc3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTU6NTQuODcwNzc2NTA4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvaWZhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDk1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDk1OlxcdFxcbjE0OTY6XFx0XFx0XFx0XFx0bG9jYWwtXFx1MDAzZXZpcnRfbW9uaXRvcnMrKztcXG4xNDk3OlxcdFxcbjE0OTg6XFx0XFx0XFx0XFx0LyogbXVzdCBiZSBiZWZvcmUgdGhlIGNhbGwgdG8gaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIgKi9cXG4xNDk5OlxcdFxcdFxcdFxcdGlmIChsb2NhbC1cXHUwMDNldmlydF9tb25pdG9ycyA9PSAxKSB7XFxuMTUwMDpcXHRcXHRcXHRcXHRcXHRsb2NhbC1cXHUwMDNlaHcuY29uZi5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9NT05JVE9SO1xcbjE1MDE6XFx0XFx0XFx0XFx0XFx0aHdfcmVjb25mX2ZsYWdzIHw9IElFRUU4MDIxMV9DT05GX0NIQU5HRV9NT05JVE9SO1xcbjE1MDI6XFx0XFx0XFx0XFx0fVxcbjE1MDM6XFx0XFx0XFx0fVxcbjE1MDQ6XFx0XFxuMTUwNTpcXHRcXHRcXHRsb2NhbC1cXHUwMDNlbW9uaXRvcnMrKztcXG4xNTA2OlxcdFxcbjE1MDc6XFx0XFx0XFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAxKTtcXG4xNTA4OlxcdFxcdFxcdGllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTtcXG4xNTA5OlxcdFxcdFxcdGllZWU4MDIxMV9yZWNhbGNfb2ZmbG9hZChsb2NhbCk7XFxuMTUxMDpcXHRcXHRcXHRpZWVlODAyMTFfcmVjYWxjX2lkbGUobG9jYWwpO1xcbjE1MTE6XFx0XFxuMTUxMjpcXHRcXHRcXHRuZXRpZl9jYXJyaWVyX29uKGRldik7XFxuMTUxMzpcXHRcXHRcXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2c2RhdGEtXFx1MDAzZXUubW50ci5saXN0LCBcXHUwMDI2bG9jYWwtXFx1MDAzZW1vbl9saXN0KTtcXG4xNTE0OlxcdFxcdFxcdGJyZWFrO1xcbjE1MTU6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUDpcXG4xNTE2OlxcdFxcdFxcdHNkYXRhLVxcdTAwM2Vic3MgPSBcXHUwMDI2c2RhdGEtXFx1MDAzZXUuYXA7XFxuMTUxNzpcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4xNTE4OlxcdFxcdGRlZmF1bHQ6XFxuMTUxOTpcXHRcXHRcXHRpZiAoY29taW5nX3VwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU1OjU0Ljg3MDk2MjcwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjIyMDk0NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBtYWM4MDIxMSBCdWcgRml4IGFuZCBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBhIHNwZWNpZmljIGJ1ZyBmaXggcmVsYXRlZCB0byBob3cgbW9uaXRvciBmbGFncyBhcmUgbWFuYWdlZCBpbiBgbWFjODAyMTFgLiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGF0IGBpZWVlODAyMTFfZG9fb3BlbmAgYW5kIGBpZWVlODAyMTFfZG9fc3RvcGAuIFRoZSBpc3N1ZSBzdGVtcyBmcm9tIHRoZSBmYWN0IHRoYXQgYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgMSlgIHdhcyBiZWluZyBjYWxsZWQgdW5jb25kaXRpb25hbGx5IGluIGBpZWVlODAyMTFfZG9fb3BlbmAgZm9yIGFsbCBtb25pdG9ycy4gSG93ZXZlciwgdGhlIGRlY3JlbWVudGluZyBjb3VudGVycGFydCwgYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpYCwgaW4gYGllZWU4MDIxMV9kb19zdG9wYCB3YXMgY29uZGl0aW9uYWwsIG9ubHkgZXhlY3V0ZWQgd2hlbiBgIShzZGF0YS1cdTAwM2V1Lm1udHIuZmxhZ3MgXHUwMDI2IE1PTklUT1JfRkxBR19BQ1RJVkUpYC4gVGhpcyBtZWFucyB0aGF0IGFjdGl2ZSBtb25pdG9ycyBvciBkZXZpY2VzIHdpdGhvdXQgdmlydHVhbCBtb25pdG9ycyB3ZXJlIG5vdCBoYXZpbmcgdGhlaXIgbW9uaXRvciBmbGFncyBkZWNyZW1lbnRlZCBjb3JyZWN0bHkgb24gc3RvcC4gVGhpcyBjb3JyZWN0aW9uIGxpa2VseSBlbnN1cmVzIHRoZSBmbGFncyBhcmUgaGFuZGxlZCBjb25zaXN0ZW50bHkgZHVyaW5nIHN0YXJ0IGFuZCBzdG9wIG9wZXJhdGlvbnMsIHJlZ2FyZGxlc3Mgb2YgdGhlIG1vbml0b3IncyBhY3RpdmUgc3RhdGUuXG5cbk5vdywgcmVhY2hhYmlsaXR5IGlzIGNydWNpYWwuIFdlIG5lZWQgdG8ga25vdyBob3cgZWFzaWx5IHdlIGNhbiBnZXQgYXQgdGhpcyBjb2RlIHdpdGggb3VyIHRvb2xzLiBGcm9tIHdoYXQgSSB1bmRlcnN0YW5kLCBgbWFjODAyMTFgIGNhbiBiZSB0ZXN0ZWQgdXNpbmcgYG1hYzgwMjExX2h3c2ltYCAoYSB2aXJ0dWFsIDgwMi4xMSBkZXZpY2UpIG9yIHRocm91Z2ggdGhlIGBubDgwMjExYCBhbmQgYGNmZzgwMjExYCBpbnRlcmZhY2VzLCB3aGljaCBtZWFucyBzeXNjYWxscyBhbmQgbmV0bGluayBjb21tYW5kcy4gVGhpcyBpcyBwcm9taXNpbmcuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyByZWFjaGFibGUgd2l0aGluIFN5emthbGxlcidzIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gVGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgKnllcyouIFN5emthbGxlciBoZWF2aWx5IGxldmVyYWdlcyBgbWFjODAyMTFfaHdzaW1gIHZpYSBgbmw4MDIxMWAgbmV0bGluayBjb21tYW5kcy4gSXQgY3JlYXRlcyB2aXJ0dWFsIGludGVyZmFjZXMsIHNldHMgbW9uaXRvciBtb2RlLCBhbmQgc3RhcnRzL3N0b3BzIHRoZXNlIGludGVyZmFjZXMgdXNpbmcgdGhlIHN0YW5kYXJkIGBydG5ldGxpbmtgLCBgU0lPQ1NJRkZMQUdTYCwgYW5kIGBubDgwMjExYCBtZWNoYW5pc21zLiBUaGlzIGNsZWFybHkgZXN0YWJsaXNoZXMgdGhhdCB3ZSBjYW4gbW9kaWZ5IHRoZSBjb3JlIHdpcmVsZXNzIG5ldHdvcmtpbmcgc3Vic3lzdGVtIChzcGVjaWZpY2FsbHksIHRoZSBgbmV0L21hYzgwMjExYCBtb2R1bGUpIGFuZCBtYW5pcHVsYXRlIGV4ZWN1dGFibGUgY29udHJvbCBmbG93LiBUaGlzIHNwZWNpZmljIGJ1ZyBmaXgsIHRoZSBtb3ZlIG9mIHRoZSBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSlgIGNhbGwsIHNob3VsZCB0aGVyZWZvcmUgYmUgZWZmZWN0aXZlbHkgZXhlcmNpc2FibGUgYnkgU3l6a2FsbGVyLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciBgbWFjODAyMTFgLiBMZXQncyBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhcm91bmQgYG5ldC9tYWM4MDIxMWAgdG8gaWRlbnRpZnkgYW55IHNwZWNpZmljIGNvbmZpZyBvcHRpb25zIHRoYXQgbWlnaHQgYmUgY3JpdGljYWwgZm9yIHRyaWdnZXJpbmcgb3IgZXhwb3NpbmcgdGhpcyB2dWxuZXJhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDM2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTU6NTkuMDkzMDYwMjQ2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQyNTU4NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjExXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI6Y29uZmlnIE1BQzgwMjExXFxubmV0L21hYzgwMjExL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBJRUVFIDgwMi4xMSBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxMSlcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0xOT1pZiBNQUM4MDIxMSAhPSBuXFxubmV0L21hYzgwMjExL0tjb25maWctMjAtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjE6Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyLVxcdGJvb2xcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMy1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDpjb25maWcgTUFDODAyMTFfUkNfTUlOU1RSRUxcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJNaW5zdHJlbFxcXCIgaWYgRVhQRVJUXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0zMT1jaG9pY2VcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQwLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjQxOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMXFxubmV0L21hYzgwMjExL0tjb25maWctNDItXFx0Ym9vbCBcXFwiTWluc3RyZWxcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz00OD1lbmRjaG9pY2VcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1MDpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTUxLVxcdHN0cmluZ1xcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9NTc9Y29tbWVudCBcXFwiU29tZSB3aXJlbGVzcyBkcml2ZXJzIHJlcXVpcmUgYSByYXRlIGNvbnRyb2wgYWxnb3JpdGhtXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNTktXFxubmV0L21hYzgwMjExL0tjb25maWc6NjA6Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1RcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02MS1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIG1hYzgwMjExXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3MDpjb25maWcgTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTcxLVxcdGJvb2wgXFxcIkVuYWJsZSBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTc4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjc5OmNvbmZpZyBNQUM4MDIxMV9MRURTXFxubmV0L21hYzgwMjExL0tjb25maWctODAtXFx0Ym9vbCBcXFwiRW5hYmxlIExFRCB0cmlnZ2Vyc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTg3LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjg4OmNvbmZpZyBNQUM4MDIxMV9ERUJVR0ZTXFxubmV0L21hYzgwMjExL0tjb25maWctODktXFx0Ym9vbCBcXFwiRXhwb3J0IG1hYzgwMjExIGludGVybmFscyBpbiBEZWJ1Z0ZTXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctOTYtXFxubmV0L21hYzgwMjExL0tjb25maWc6OTc6Y29uZmlnIE1BQzgwMjExX01FU1NBR0VfVFJBQ0lOR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk4LVxcdGJvb2wgXFxcIlRyYWNlIGFsbCBtYWM4MDIxMSBkZWJ1ZyBtZXNzYWdlc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEwOS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTA6bWVudWNvbmZpZyBNQUM4MDIxMV9ERUJVR19NRU5VXFxubmV0L21hYzgwMjExL0tjb25maWctMTExLVxcdGJvb2wgXFxcIlNlbGVjdCBtYWM4MDIxMSBkZWJ1Z2dpbmcgZmVhdHVyZXNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTUtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTE2OmNvbmZpZyBNQUM4MDIxMV9OT0lOTElORVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNy1cXHRib29sIFxcXCJEbyBub3QgaW5saW5lIFRYL1JYIGhhbmRsZXJzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTMxLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjEzMjpjb25maWcgTUFDODAyMTFfVkVSQk9TRV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMy1cXHRib29sIFxcXCJWZXJib3NlIGRlYnVnZ2luZyBvdXRwdXRcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDItXFxubmV0L21hYzgwMjExL0tjb25maWc6MTQzOmNvbmZpZyBNQUM4MDIxMV9NTE1FX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTQ0LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWFuYWdlZCBNTE1FIG91dHB1dFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1My1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNTQ6Y29uZmlnIE1BQzgwMjExX1NUQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1NS1cXHRib29sIFxcXCJWZXJib3NlIHN0YXRpb24gZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTYyLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE2Mzpjb25maWcgTUFDODAyMTFfSFRfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjQtXFx0Ym9vbCBcXFwiVmVyYm9zZSBIVCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzQtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTc1OmNvbmZpZyBNQUM4MDIxMV9PQ0JfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzYtXFx0Ym9vbCBcXFwiVmVyYm9zZSBPQ0IgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTg1LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4Njpjb25maWcgTUFDODAyMTFfSUJTU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4Ny1cXHRib29sIFxcXCJWZXJib3NlIElCU1MgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTk2LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE5Nzpjb25maWcgTUFDODAyMTFfUFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTgtXFx0Ym9vbCBcXFwiVmVyYm9zZSBwb3dlcnNhdmUgbW9kZSBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMDgtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjA5OmNvbmZpZyBNQUM4MDIxMV9NUExfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTAtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBlZXIgbGluayBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjEtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjIyOmNvbmZpZyBNQUM4MDIxMV9NUEFUSF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMy1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcGF0aCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzQtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjM1OmNvbmZpZyBNQUM4MDIxMV9NSFdNUF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNi1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggSFdNUCByb3V0aW5nIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0Ny1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDg6Y29uZmlnIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggc3luY2hyb25pemF0aW9uIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1OC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTk6Y29uZmlnIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjYwLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBjaGFubmVsIHN3aXRjaCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjktXFxubmV0L21hYzgwMjExL0tjb25maWc6MjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIX1BTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjcxLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwb3dlcnNhdmUgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjgwLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI4MTpjb25maWcgTUFDODAyMTFfVERMU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4Mi1cXHRib29sIFxcXCJWZXJib3NlIFRETFMgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjkyLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5Mzpjb25maWcgTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTQtXFx0Ym9vbCBcXFwiRXh0cmEgc3RhdGlzdGljcyBmb3IgVFgvUlggZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMzA3LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjMwODpjb25maWcgTUFDODAyMTFfU1RBX0hBU0hfTUFYX1NJWkVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDktXFx0aW50IFxcXCJTdGF0aW9uIGhhc2ggdGFibGUgbWF4aW11bSBzaXplXFxcIiBpZiBNQUM4MDIxMV9ERUJVR19NRU5VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU1OjU5LjIyNzMyMjE0NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTkyNTA3Njc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYE1BQzgwMjExYCBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgbGV0J3Mgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBndXRzIG9mIHRoaXMgYE1BQzgwMjExYCBzaXR1YXRpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIG91dCB0aGUgYG5ldC9tYWM4MDIxMS9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgdW53aW5kaW5nIHRoZSBkZXBlbmRlbmN5IHRyZWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBhcmUgdGlnaHRseSBjb3VwbGVkIHdpdGggYE1BQzgwMjExYCwgdGhlIGJ1aWxkIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgaXQsIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gcGl0ZmFsbHMuIFRoaXMgS2NvbmZpZyBmaWxlIHNob3VsZCBpbGx1bWluYXRlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcywgc28gSSBjYW4gc3RhcnQgZm9ybWluZyBhIG1lbnRhbCBtb2RlbCBvZiBob3cgaXQgYWxsIGludGVyYWN0cy4gSG9wZWZ1bGx5LCBpdOKAmWxsIGJlIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggdG8gc2VlIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgYW5kIGZsYWdzIGF0IGEgZ2xhbmNlLCBhbGxvd2luZyBtZSB0byBmb2N1cyBvbiB0aGUgYXJlYSBvZiBjb25jZXJuLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjQ0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTY6MDEuODE5ODMzMDg5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTUFDODAyMTFcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gICA1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gICA2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQVJDNFxcbiAgIDg6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fQ0NNXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgMTE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAxMjpcXHRcXHRoZWxwXFxuICAxMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IElFRUUgODAyLjExXFxuICAxNDpcXHRcXHQgIG5ldHdvcmtpbmcgc3RhY2suXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbW1lbnQgXFxcIkNGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXFxcIlxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMT1uXFxuICAxODpcXHRcXG4gIDE5OlxcdGlmIE1BQzgwMjExICE9IG5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo1NjowMS44MTk5MjA5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1MDQxODA4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIHRoZSBgbWFjODAyMTFfaHdzaW1gIEtjb25maWcqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFdoaWxlIEknbSB3b3JraW5nIHdpdGggdGhpcyBhcmVhLCBpdCdzIHdpc2UgdG8gcmV2aWV3IGFsbCB0aGUgcmVsZXZhbnQgY29tcG9uZW50cy4gU3BlY2lmaWNhbGx5LCBpdCdzIHBydWRlbnQgdG8gZG91YmxlLWNoZWNrIHRoZSBgbWFjODAyMTFfaHdzaW1gIEtjb25maWcgZmlsZS4gSSdtIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUsIGJ1dCB0aGlzIHN0ZXAgd2lsbCBoZWxwIG1lIHRvIHJlZnJlc2ggdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgYW55IGRlcGVuZGVuY2llcyBvciBkZWZhdWx0IHNldHRpbmdzIHRoYXQgbWlnaHQgYmUgY3J1Y2lhbCB0byB3aGF0ZXZlciBpc3N1ZSBJJ20gY3VycmVudGx5IGZvY3VzZWQgb24uIEl04oCZcyBhIGdvb2QgcHJhY3RpY2UgdG8gYmUgbWV0aWN1bG91cyB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGVuc3VyZSB0aGUgaW50ZW5kZWQgYmVoYXZpb3VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE4NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTY6MDMuMzI0MTA0MTU0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUwNTM2NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjExX0hXU0lNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZzoxOmNvbmZpZyBNQUM4MDIxMV9IV1NJTVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0yLVxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTY6MDMuNDQ5MTY0MjEyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MjQyNTg4NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWaXJ0dWFsIFdpcmVsZXNzIEtjb25maWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhlIHZpcnR1YWwgd2lyZWxlc3Mgc2V0dXAgaW4gdGhpcyBrZXJuZWwuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuIExldCdzIHNlZS4uLiB0aGUgdGV4dCBtZW50aW9ucyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnYC4gUmlnaHQsIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgc3Vic3lzdGVtLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYEtjb25maWdgIG5vdyB0byBzZWUgd2hhdCdzIGRlZmluZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGV4aXN0LCBhbmQgaG93IHRoaXMgYWxsIHBpZWNlcyB0b2dldGhlci4gVGhhdCdsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcmVzdCBvZiB0aGUgY29kZS4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ2MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU2OjA1LjI3MzQyNjE3MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Y29uZmlnIE1BQzgwMjExX0hXU0lNXFxuICAgMjpcXHRcXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcXFwiXFxuICAgMzpcXHRcXHRkZXBlbmRzIG9uIE1BQzgwMjExXFxuICAgNDpcXHRcXHRoZWxwXFxuICAgNTpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIGEgZGV2ZWxvcGVyIHRlc3RpbmcgdG9vbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHRlc3RcXG4gICA2OlxcdFxcdCAgSUVFRSA4MDIuMTEgbmV0d29ya2luZyBzdGFjayAobWFjODAyMTEpIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgbm90XFxuICAgNzpcXHRcXHQgIG5lZWRlZCBmb3Igbm9ybWFsIHdpcmVsZXNzIExBTiB1c2FnZSBhbmQgaXMgb25seSBmb3IgdGVzdGluZy4gU2VlXFxuICAgODpcXHRcXHQgIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9tYWM4MDIxMV9od3NpbSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3dcXG4gICA5OlxcdFxcdCAgdG8gdXNlIHRoaXMgdG9vbC5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcXG4gIDEyOlxcdFxcdCAgY2FsbGVkIG1hYzgwMjExX2h3c2ltLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFZJUlRfV0lGSVxcbiAgMTU6XFx0XFx0dHJpc3RhdGUgXFxcIldpZmkgd3JhcHBlciBmb3IgZXRoZXJuZXQgZHJpdmVyc1xcXCJcXG4gIDE2OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBldGhlcm5ldCBjb25uZWN0aW9ucyB0byBhcHBlYXIgYXMgaWYgdGhleVxcbiAgMTk6XFx0XFx0ICBhcmUgd2lmaSBjb25uZWN0aW9ucyB0aHJvdWdoIGEgc3BlY2lhbCBydG5ldGxpbmsgZGV2aWNlLlxcbiAgMjA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU2OjA1LjI3MzUzMTA5MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTEzODc2NjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIENGRzgwMjExIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSdtIHN0YXJ0aW5nIHdpdGggYENGRzgwMjExYC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gcXVpY2tseSBnZXQgYSBoYW5kbGUgb24gYWxsIGl0cyBkZXBlbmRlbmNpZXMuIFdoYXQgb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgb3IgZXh0ZXJuYWwgbGlicmFyaWVzIGlzIGl0IHRpZ2h0bHkgY291cGxlZCB3aXRoPyBJJ20gdGhpbmtpbmcsIG9mZiB0aGUgdG9wIG9mIG15IGhlYWQsIHRoaW5ncyBsaWtlIHJlZ3VsYXRvcnkgZGF0YWJhc2VzLCB3aXJlbGVzcyBleHRlbnNpb25zLCBhbmQsIG9mIGNvdXJzZSwgdGhlIHZhcmlvdXMgZHJpdmVyIGludGVyZmFjZXMuIEkgbmVlZCBhIGNsZWFyIG1lbnRhbCBtYXAsIHNvIEkgY2FuIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSBzY29wZSBvZiBhbnkgcG90ZW50aWFsIGNoYW5nZXMgSSdtIGFib3V0IHRvIG1ha2UsIG9yIGFueSB2dWxuZXJhYmlsaXRpZXMgSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyLiBJJ20gZ29pbmcgdG8gbWFwIG91dCB0aGUgZGVwZW5kZW5jeSB0cmVlIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgcmVncmVzc2lvbnMgb3IgaW50ZWdyYXRpb24gcHJvYmxlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTkzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo1NjowNy4xODc0MTMyNzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODc1NzYyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0ZHODAyMTFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWc9Mzg9Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTUxLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjUyOmNvbmZpZyBDRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1NcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01My1cXHRib29sIFxcXCJlbmFibGUgZGV2ZWxvcGVyIHdhcm5pbmdzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctNjctXFxubmV0L3dpcmVsZXNzL0tjb25maWc6Njg6Y29uZmlnIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY5LVxcdGJvb2wgXFxcImNmZzgwMjExIGNlcnRpZmljYXRpb24gb251c1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTg4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjg5OmNvbmZpZyBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTkwLVxcdGJvb2wgXFxcInJlcXVpcmUgcmVnZGIgc2lnbmF0dXJlXFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTk4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjk5OmNvbmZpZyBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDAtXFx0Ym9vbCBcXFwiYWxsb3cgcmVnZGIga2V5cyBzaGlwcGVkIHdpdGggdGhlIGtlcm5lbFxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTExOmNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTItXFx0c3RyaW5nIFxcXCJhZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTIxLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEyMjpjb25maWcgQ0ZHODAyMTFfUkVHX0NFTExVTEFSX0hJTlRTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVxcdGJvb2wgXFxcImNmZzgwMjExIHJlZ3VsYXRvcnkgc3VwcG9ydCBmb3IgY2VsbHVsYXIgYmFzZSBzdGF0aW9uIGhpbnRzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM0LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM2LVxcdGJvb2wgXFxcImNmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTU5OmNvbmZpZyBDRkc4MDIxMV9ERUZBVUxUX1BTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTYwLVxcdGJvb2wgXFxcImVuYWJsZSBwb3dlcnNhdmUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNjk6Y29uZmlnIENGRzgwMjExX0RFQlVHRlNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgRGVidWdGUyBlbnRyaWVzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc4LVxcdGJvb2wgXFxcInN1cHBvcnQgQ1JEQVxcXCIgaWYgRVhQRVJUXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg4LVxcdGJvb2wgXFxcImNmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5My1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxOTQ6Y29uZmlnIENGRzgwMjExX0tVTklUX1RFU1RcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBjZmc4MDIxMVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo1NjowNy4zMDYxNzc2NjZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAxNzg2NTc1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqRGl2aW5nIGludG8gdGhlIGBpZWVlODAyMTFfZG9fc3RvcCgpYCBQYXRjaCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgaWVlZTgwMjExX2RvX3N0b3AoKWAgd2l0aGluIGBuZXQvbWFjODAyMTEvaWZhY2UuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIFRvIHByb3Blcmx5IGFzc2VzcyB0aGlzLCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGguIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25zIGNhbGwgYGllZWU4MDIxMV9kb19zdG9wKClgLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYWxsIHRoZSBjYWxsZXJzLiBJdCBpcyBhbHNvIGltcG9ydGFudCB0byBpZGVudGlmeSB3aGVyZSBgaWVlZTgwMjExX2RvX3N0b3AoKWAgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGludGVyZmFjZSBsaWZlY3ljbGUgd2l0aGluIGBtYWM4MDIxMWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBtaWdodCBicmVhay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMzEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo1NjowOS4zMjQwNDY0NDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjMzNjM3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZWVlODAyMTFfZG9fc3RvcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL2NmZy5jPTk2PXN0YXRpYyBpbnQgaWVlZTgwMjExX3NldF9tb25fb3B0aW9ucyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy0xNDktXFx0XFx0XFx0LypcXG5uZXQvbWFjODAyMTEvY2ZnLmM6MTUwOlxcdFxcdFxcdCAqIEJlY2F1c2UgdGhlIGludGVyZmFjZSBpcyBkb3duLCBpZWVlODAyMTFfZG9fc3RvcFxcbm5ldC9tYWM4MDIxMS9jZmcuYy0xNTEtXFx0XFx0XFx0ICogYW5kIGllZWU4MDIxMV9kb19vcGVuIHRha2UgY2FyZSBvZiBcXFwiZXZlcnl0aGluZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTQ2MT1zdGF0aWMgaW50IGllZWU4MDIxMV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy00NzgtXFxubmV0L21hYzgwMjExL2lmYWNlLmM6NDc5OnN0YXRpYyB2b2lkIGllZWU4MDIxMV9kb19zdG9wKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBib29sIGdvaW5nX2Rvd24pXFxubmV0L21hYzgwMjExL2lmYWNlLmMtNDgwLXtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTg0Nj1zdGF0aWMgaW50IGllZWU4MDIxMV9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy04NjgtXFxubmV0L21hYzgwMjExL2lmYWNlLmM6ODY5OlxcdGllZWU4MDIxMV9kb19zdG9wKHNkYXRhLCB0cnVlKTtcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy04NzAtXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xOTgxPXN0YXRpYyBpbnQgaWVlZTgwMjExX3J1bnRpbWVfY2hhbmdlX2lmdHlwZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTIwNDUtXFx0LyogZG9fc3RvcCB3aWxsIHN5bmNocm9uaXplX3JjdSgpIGZpcnN0IHRoaW5nICovXFxubmV0L21hYzgwMjExL2lmYWNlLmM6MjA0NjpcXHRpZWVlODAyMTFfZG9fc3RvcChzZGF0YSwgZmFsc2UpO1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTIwNDctXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0yNDQxPXZvaWQgaWVlZTgwMjExX3NkYXRhX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDQ0LVxcdFxcdHJldHVybjtcXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoyNDQ1OlxcdGllZWU4MDIxMV9kb19zdG9wKHNkYXRhLCB0cnVlKTtcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0yNDQ2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTY6MDkuNDMwMzkwNzZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDYwNTQzNDg5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBBc3Nlc3NtZW50OiBtYWM4MDIxMSBNb25pdG9yIEludGVyZmFjZSBTdG9wIENsZWFudXAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkndmUgaWRlbnRpZmllZCBhIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldCB3aXRoaW4gdGhlIG1hYzgwMjExIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGNsZWFudXAgbG9naWMgd2hlbiBhIG1vbml0b3IgaW50ZXJmYWNlIGlzIHN0b3BwZWQuIE15IGluaXRpYWwgc2NhbiBoYXMgeWllbGRlZCBhIGhhbmRmdWwgb2Yga2V5IGZ1bmN0aW9ucyBhcyBmb2N1cyBzeW1ib2xzOiBgaWVlZTgwMjExX2RvX3N0b3BgIChkZWZpbmVkIGFzIHN0YXRpYyB3aXRoaW4gbmV0L21hYzgwMjExL2lmYWNlLmMpLCBgaWVlZTgwMjExX3N0b3BgLCBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzYCwgYGllZWU4MDIxMV9ydW50aW1lX2NoYW5nZV9pZnR5cGVgLCBhbmQgYGllZWU4MDIxMV9zZXRfbW9uX29wdGlvbnNgLiBHb29kLCB0aGVzZSBzZWVtIGZlYXR1cmUtc3BlY2lmaWMgZW5vdWdoIGFuZCBub3Qgb3Zlcmx5IHViaXF1aXRvdXMgdG8gYmUgdXNlZnVsIGFzIGZvY3VzIHN5bWJvbHMuXG5cbkkndmUgYWxzbyBjaGVja2VkIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCB3b3VsZCBtYWtlIHRoaXMgdGFyZ2V0IHJlYWNoYWJsZS4gSXQgbG9va3MgbGlrZSB3ZSBuZWVkIGBNQUM4MDIxMWAsIGBDRkc4MDIxMWAsIGFuZCBgTUFDODAyMTFfSFdTSU1gIGVuYWJsZWQuICBUaGUgcmVhY2hhYmlsaXR5IGxvb2tzIHNvbGlkIC0gd2UgY2FuIGhpdCB0aGlzIHdpdGggc3RhbmRhcmQgUUVNVS9zeXprYWxsZXIgc2V0dXBzIHVzaW5nIG5sODAyMTEgYW5kIG1hYzgwMjExX2h3c2ltLlxuXG5UaGlzIHRhcmdldCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmc7IGl0J3MgYSBcIldvcnRoRnV6emluZz10cnVlXCIgc2l0dWF0aW9uLiBUaGUgY29yZSBvZiB0aGlzIGlzIGNlbnRlcmVkIGFyb3VuZCB0aGUgY29ycmVjdCBpbnZvY2F0aW9uIG9mIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKWAgZHVyaW5nIG1vbml0b3IgaW50ZXJmYWNlIHN0b3AuIFRoZSBwYXRjaCBpbiBxdWVzdGlvbiBzZWVtcyB0byBmb2N1cyBvbiBlbnN1cmluZyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYSBtb25pdG9yIGludGVyZmFjZSBpcyBhY3R1YWxseSBhY3RpdmUgb3IgaWYgdmlydHVhbCBtb25pdG9yIHN1cHBvcnQgaXMgcHJlc2VudC4gVGhhdCdzIGEgY2xhc3NpYyBhcmVhIGZvciBzdWJ0bGUgYnVncyByZWxhdGVkIHRvIHN0YXRlIG1hbmFnZW1lbnQuXG5cbkFscmlnaHQsIGRvdWJsZS1jaGVja2luZyBldmVyeXRoaW5nOlxuXG4qICAgKipDb25maWdzOioqIE1BQzgwMjExLCBDRkc4MDIxMSwgTUFDODAyMTFfSFdTSU1cbiogICAqKkZvY3VzU3ltYm9sczoqKiBgaWVlZTgwMjExX2RvX3N0b3BgLCBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzYCwgYGllZWU4MDIxMV9zdG9wYCwgYGllZWU4MDIxMV9ydW50aW1lX2NoYW5nZV9pZnR5cGVgLCBgaWVlZTgwMjExX3NldF9tb25fb3B0aW9uc2BcblxuKiAgICoqUmVhc29uaW5nOioqIFRoZSBidWcgZml4IGludm9sdmVzIHRoZSBjbGVhbnVwIGxvZ2ljIG9mIG1vbml0b3IgaW50ZXJmYWNlczsgaXQgc2hvdWxkIGJlIHdvcnRoIGZ1enppbmcgYmVjYXVzZSBpdCBtb2RpZmllcyBtb25pdG9yIHN0b3AgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB3aXRoIHN0YW5kYXJkIFFFTVUvc3l6a2FsbGVyLlxuXG5MZXQncyBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxMjgsIk91dHB1dFRva2VucyI6MjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU2OjE0LjAzNTgyODAxMloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjAyNzgwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImllZWU4MDIxMV9kb19zdG9wXCIsXG4gICAgXCJpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3NcIixcbiAgICBcImllZWU4MDIxMV9zdG9wXCIsXG4gICAgXCJpZWVlODAyMTFfcnVudGltZV9jaGFuZ2VfaWZ0eXBlXCIsXG4gICAgXCJpZWVlODAyMTFfc2V0X21vbl9vcHRpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbW9uaXRvciBpbnRlcmZhY2UgdGVhcmRvd24gaGFuZGxpbmcgaW4gbmV0L21hYzgwMjExL2lmYWNlLmMgKGllZWU4MDIxMV9kb19zdG9wKSBieSBlbnN1cmluZyB0aGF0IGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncygpIGlzIGFsd2F5cyBpbnZva2VkIHRvIGRlY3JlbWVudCBtb25pdG9yIGZsYWdzIHdoZW4gc3RvcHBpbmcgYSBtb25pdG9yIGludGVyZmFjZSwgcmVnYXJkbGVzcyBvZiB0aGUgdmlydHVhbCBtb25pdG9yIHN0YXR1cy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWFjODAyMTFfaHdzaW0gYW5kIG5sODAyMTEvcnRuZXRsaW5rIGludGVyZmFjZSBjb250cm9sIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImllZWU4MDIxMV9kb19zdG9wXCIsXG4gICAgXCJpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3NcIixcbiAgICBcImllZWU4MDIxMV9zdG9wXCIsXG4gICAgXCJpZWVlODAyMTFfcnVudGltZV9jaGFuZ2VfaWZ0eXBlXCIsXG4gICAgXCJpZWVlODAyMTFfc2V0X21vbl9vcHRpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbW9uaXRvciBpbnRlcmZhY2UgdGVhcmRvd24gaGFuZGxpbmcgaW4gbmV0L21hYzgwMjExL2lmYWNlLmMgKGllZWU4MDIxMV9kb19zdG9wKSBieSBlbnN1cmluZyB0aGF0IGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncygpIGlzIGFsd2F5cyBpbnZva2VkIHRvIGRlY3JlbWVudCBtb25pdG9yIGZsYWdzIHdoZW4gc3RvcHBpbmcgYSBtb25pdG9yIGludGVyZmFjZSwgcmVnYXJkbGVzcyBvZiB0aGUgdmlydHVhbCBtb25pdG9yIHN0YXR1cy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWFjODAyMTFfaHdzaW0gYW5kIG5sODAyMTEvcnRuZXRsaW5rIGludGVyZmFjZSBjb250cm9sIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU2OjE0LjE5MTg2Njg3OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2NDYyNDkwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo1NjoxNC4xOTI3MTU3MjlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNzY0NTM5NDkyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gYWNjb3VudGluZyBidWcgaW4gbWFjODAyMTEgbW9uaXRvciBpbnRlcmZhY2UgaGFuZGxpbmcgYnkgbW92aW5nIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKWAgb3V0c2lkZSB0aGUgY29uZGl0aW9uYWwgY2hlY2sgaW4gYGllZWU4MDIxMV9kb19zdG9wKClgLCBwcm9wZXJseSBiYWxhbmNpbmcgdGhlIHVuY29uZGl0aW9uYWwgY2FsbCB0byBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAxKWAgaW4gYGllZWU4MDIxMV9kb19vcGVuKClgLiBcXG5cXG5UaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgaW50ZXJuYWwgbW9uaXRvciBmbGFnIGNvdW50ZXJzIG9uIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYCAoc3VjaCBhcyBgbG9jYWwtXFx1MDAzZWZpZl9mY3NmYWlsYCwgYGxvY2FsLVxcdTAwM2V0eF9tbnRyc2AsIGV0Yy4pLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBpbml0aWFsaXphdGlvbiBsb2dpYy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLCBhbmQgc3RhbmRhcmQgS0FTQU4vdGVzdGluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDlkODg3YjlhMDBmOTc0NzUwYTIxNTgwYmJlOTY5YWU2MTZjNzIzZGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDA3OjU1OjQwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lmYWNlLmMgYi9uZXQvbWFjODAyMTEvaWZhY2UuY1xuaW5kZXggNDM0NjBhNzA1YTZiZC4uOWI0MDBjYWYyNzY1MiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jXG4rKysgYi9uZXQvbWFjODAyMTEvaWZhY2UuY1xuQEAgLTYzMCw4ICs2MzAsOSBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfZG9fc3RvcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgYm9vbCBnb2luZ19kb1xuIFx0XHRcdFx0aHdfcmVjb25mX2ZsYWdzIHw9IElFRUU4MDIxMV9DT05GX0NIQU5HRV9NT05JVE9SO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKTtcbiBcdFx0fVxuK1xuK1x0XHRpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIE5MODAyMTFfSUZUWVBFX05BTjpcbiBcdFx0LyogQ2hlY2sgaWYgYW55IG9wZW4gTkFOX0RBVEEgaW50ZXJmYWNlcyAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTY6MTQuMTkyNzE4Njc5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzNDA5ODA0OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBtYWM4MDIxMSBJbnRlcmZhY2UgQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMgZGlmZi4gVG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiwgbXkgZmlyc3QgbW92ZSBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLCB3aGljaCBsb29rcyBsaWtlIGl0J3MgaW4gYG5ldC9tYWM4MDIxMS9pZmFjZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIHNvIEknbGwgc3RhcnQgYnkgcmVhZGluZyB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhhdCBJIG5lZWQgdG8gem9vbSBpbiBvbiB3aGF0J3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDYzMC4gTGV0J3MgdXNlIGByZWFkLWZpbGVgIHRvIHplcm8gaW4gb24gdGhhdCBzZWN0aW9uIGFuZCBnZXQgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBiZWhhdmlvci4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZm91bmRhdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0MiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTY6MTkuNTMzNzAyMTM4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvaWZhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MDA6XFx0XFx0XFx0XFx0fVxcbiA2MDE6XFx0XFx0XFx0fVxcbiA2MDI6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cHMtXFx1MDAzZWJjX2J1Zi5sb2NrLCBmbGFncyk7XFxuIDYwMzpcXHRcXG4gNjA0OlxcdFxcdFxcdHNrYl9xdWV1ZV93YWxrX3NhZmUoXFx1MDAyNmZyZWVxLCBza2IsIHRtcCkge1xcbiA2MDU6XFx0XFx0XFx0XFx0X19za2JfdW5saW5rKHNrYiwgXFx1MDAyNmZyZWVxKTtcXG4gNjA2OlxcdFxcdFxcdFxcdGllZWU4MDIxMV9mcmVlX3R4c2tiKFxcdTAwMjZsb2NhbC1cXHUwMDNlaHcsIHNrYik7XFxuIDYwNzpcXHRcXHRcXHR9XFxuIDYwODpcXHRcXHR9XFxuIDYwOTpcXHRcXG4gNjEwOlxcdFxcdGlmIChnb2luZ19kb3duKVxcbiA2MTE6XFx0XFx0XFx0bG9jYWwtXFx1MDAzZW9wZW5fY291bnQtLTtcXG4gNjEyOlxcdFxcbiA2MTM6XFx0XFx0c3dpdGNoIChzZGF0YS1cXHUwMDNldmlmLnR5cGUpIHtcXG4gNjE0OlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTjpcXG4gNjE1OlxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZzZGF0YS1cXHUwMDNldS52bGFuLmxpc3QpO1xcbiA2MTY6XFx0XFx0XFx0UkNVX0lOSVRfUE9JTlRFUihzZGF0YS1cXHUwMDNldmlmLmJzc19jb25mLmNoYW5jdHhfY29uZiwgTlVMTCk7XFxuIDYxNzpcXHRcXHRcXHQvKiBzZWUgY29tbWVudCBpbiB0aGUgZGVmYXVsdCBjYXNlIGJlbG93ICovXFxuIDYxODpcXHRcXHRcXHRpZWVlODAyMTFfZnJlZV9rZXlzKHNkYXRhLCB0cnVlKTtcXG4gNjE5OlxcdFxcdFxcdC8qIG5vIG5lZWQgdG8gdGVsbCBkcml2ZXIgKi9cXG4gNjIwOlxcdFxcdFxcdGJyZWFrO1xcbiA2MjE6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOlxcbiA2MjI6XFx0XFx0XFx0bG9jYWwtXFx1MDAzZW1vbml0b3JzLS07XFxuIDYyMzpcXHRcXG4gNjI0OlxcdFxcdFxcdGlmICghKHNkYXRhLVxcdTAwM2V1Lm1udHIuZmxhZ3MgXFx1MDAyNiBNT05JVE9SX0ZMQUdfQUNUSVZFKSBcXHUwMDI2XFx1MDAyNlxcbiA2MjU6XFx0XFx0XFx0ICAgICFpZWVlODAyMTFfaHdfY2hlY2soXFx1MDAyNmxvY2FsLVxcdTAwM2VodywgTk9fVklSVFVBTF9NT05JVE9SKSkge1xcbiA2MjY6XFx0XFxuIDYyNzpcXHRcXHRcXHRcXHRsb2NhbC1cXHUwMDNldmlydF9tb25pdG9ycy0tO1xcbiA2Mjg6XFx0XFx0XFx0XFx0aWYgKGxvY2FsLVxcdTAwM2V2aXJ0X21vbml0b3JzID09IDApIHtcXG4gNjI5OlxcdFxcdFxcdFxcdFxcdGxvY2FsLVxcdTAwM2Vody5jb25mLmZsYWdzIFxcdTAwMjY9IH5JRUVFODAyMTFfQ09ORl9NT05JVE9SO1xcbiA2MzA6XFx0XFx0XFx0XFx0XFx0aHdfcmVjb25mX2ZsYWdzIHw9IElFRUU4MDIxMV9DT05GX0NIQU5HRV9NT05JVE9SO1xcbiA2MzE6XFx0XFx0XFx0XFx0fVxcbiA2MzI6XFx0XFxuIDYzMzpcXHRcXHRcXHR9XFxuIDYzNDpcXHRcXG4gNjM1OlxcdFxcdFxcdGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpO1xcbiA2MzY6XFx0XFx0XFx0YnJlYWs7XFxuIDYzNzpcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX05BTjpcXG4gNjM4OlxcdFxcdFxcdC8qIENoZWNrIGlmIGFueSBvcGVuIE5BTl9EQVRBIGludGVyZmFjZXMgKi9cXG4gNjM5OlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXRlciwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxuIDY0MDpcXHRcXHRcXHRcXHRXQVJOX09OKGl0ZXItXFx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBIFxcdTAwMjZcXHUwMDI2XFxuIDY0MTpcXHRcXHRcXHRcXHRcXHRpZWVlODAyMTFfc2RhdGFfcnVubmluZyhpdGVyKSk7XFxuIDY0MjpcXHRcXHRcXHR9XFxuIDY0MzpcXHRcXG4gNjQ0OlxcdFxcdFxcdC8qIGNsZWFuIGFsbCB0aGUgZnVuY3Rpb25zICovXFxuIDY0NTpcXHRcXHRcXHRpZiAoIShsb2NhbC1cXHUwMDNlaHcud2lwaHktXFx1MDAzZW5hbl9jYXBhLmZsYWdzIFxcdTAwMjZcXG4gNjQ2OlxcdFxcdFxcdCAgICAgIFdJUEhZX05BTl9GTEFHU19VU0VSU1BBQ0VfREUpKSB7XFxuIDY0NzpcXHRcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNkYXRhLVxcdTAwM2V1Lm5hbi5kZS5mdW5jX2xvY2spO1xcbiA2NDg6XFx0XFxuIDY0OTpcXHRcXHRcXHRcXHRpZHJfZm9yX2VhY2hfZW50cnkoXFx1MDAyNnNkYXRhLVxcdTAwM2V1Lm5hbi5kZS5mdW5jdGlvbl9pbnN0X2lkcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTY6MTkuNTMzODQwOTA4WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMDI2NjAzMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIERyaXZlcidzIEluaXRpYWxpemF0aW9uIGFuZCBTaHV0ZG93bioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyB0aGlzIGRyaXZlciBoYW5kbGVzIG1vbml0b3IgbW9kZSwgYW5kIGhvdyBpdCdzIGluaXRpYWxpemVkIGFuZCBzaHV0IGRvd24uIFRoZSBrZXkgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFnc2AsIGBpZWVlODAyMTFfZG9fc3RvcGAsIGFuZCBgaWVlZTgwMjExX2RvX29wZW5gIG9yIHBvdGVudGlhbGx5IHN0YXJ0LXJlbGF0ZWQgZnVuY3Rpb25zLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIHNvbGlkIG92ZXJ2aWV3IG9mIHRoZSBjb2RlIGluIHRoYXQgcmVnaW9uLCBzbyBJJ20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIG9uIGxpbmVzIDUwMCB0byA2MDAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBUbyBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nIHJlbGV2YW50LCBJJ20gZ29pbmcgdG8gZG8gYSBxdWljayBncmVwIGZvciBhbnkgb3RoZXIgcmVmZXJlbmNlcyB0byBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzYC4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIHRyYWNrIGRvd24gYWxsIGNhbGxzLCB0byBzZWUgaG93IHRoYXQgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZCBmcm9tIGVsc2V3aGVyZSBpbiB0aGUgY29kZWJhc2UuIFRoaXMgaXMgc3RhbmRhcmQgb3BlcmF0aW5nIHByb2NlZHVyZSBmb3IgbWUuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjUzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo1NjoyMS41MzY1MDM3MzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMjUwMTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9jZmcuYz05Nj1zdGF0aWMgaW50IGllZWU4MDIxMV9zZXRfbW9uX29wdGlvbnMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtMTQyLVxcdFxcdGlmIChpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpIHtcXG5uZXQvbWFjODAyMTEvY2ZnLmM6MTQzOlxcdFxcdFxcdGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy0xNDQtXFx0XFx0XFx0c2RhdGEtXFx1MDAzZXUubW50ci5mbGFncyA9IHBhcmFtcy1cXHUwMDNlZmxhZ3M7XFxubmV0L21hYzgwMjExL2NmZy5jOjE0NTpcXHRcXHRcXHRpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIDEpO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy0xNDYtXFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0yMjAyPXZvaWQgaWVlZTgwMjExX3JlY2FsY19pZGxlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTtcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyMjAzOnZvaWQgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTIyMDQtXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGludCBvZmZzZXQpO1xcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmM9NDc5PXN0YXRpYyB2b2lkIGllZWU4MDIxMV9kb19zdG9wKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBib29sIGdvaW5nX2Rvd24pXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy02MzQtXFxubmV0L21hYzgwMjExL2lmYWNlLmM6NjM1OlxcdFxcdGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpO1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTYzNi1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTExNTY9dm9pZCBpZWVlODAyMTFfcmVjYWxjX29mZmxvYWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMTcyLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjExNzM6dm9pZCBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMTE3NC1cXHRcXHRcXHRcXHQgICAgY29uc3QgaW50IG9mZnNldClcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTEzNjY9aW50IGllZWU4MDIxMV9kb19vcGVuKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGJvb2wgY29taW5nX3VwKVxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMTUwNi1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYzoxNTA3OlxcdFxcdGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgMSk7XFxubmV0L21hYzgwMjExL2lmYWNlLmMtMTUwOC1cXHRcXHRpZWVlODAyMTFfY29uZmlndXJlX2ZpbHRlcihsb2NhbCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU2OjIxLjYyOTc1OTcxM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzgzODA0NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSA4MDIuMTEgSW50ZXJmYWNlIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSA4MDIuMTEgaW50ZXJmYWNlLiBJJ20gaGVhZGluZyBzdHJhaWdodCBmb3IgYGllZWU4MDIxMV9kb19vcGVuYCBpbiBgbmV0L21hYzgwMjExL2lmYWNlLmNgIOKAkyBzcGVjaWZpY2FsbHksIGFyb3VuZCBsaW5lIDE1MDAuIFRoYXQncyB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGJyaW5naW5nIHVwIGFuIGludGVyZmFjZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhdCB0aGUgcG9pbnQgb2YgaW50ZXJmYWNlIGJyaW5nLXVwIC0gd2hhdCBhcmUgdGhlIGtleSBzdGVwcywgcmVzb3VyY2UgYWxsb2NhdGlvbnMsIGFuZCBpbml0aWFsaXphdGlvbnMuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlIGxvd2VyIE1BQyBsYXllciBhbmQgdGhlIGhpZ2hlciBsYXllcnMuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlOlxuLSAqKkFzc29jaWF0aW9uKio6IHRoZSBpbnRlcmZhY2UgYXNzb2NpYXRpbmcgd2l0aCB0aGUgbmV0d29yay5cbi0gKipCZWFjb24gU2V0dXAqKjogaGFuZGxpbmcgb2YgYmVhY29ucyBiYXNlZCBvbiBjb25maWd1cmF0aW9uLlxuLSAqKlBvd2VyIE1hbmFnZW1lbnQqKjogc2V0dGluZyB0aGUgbmVjZXNzYXJ5IFBNIGZsYWdzLlxuLSAqKlJhdGUgY29udHJvbCoqOiBkZXRlcm1pbmluZyBzdGFydGluZyB0cmFuc21pdCByYXRlcy5cbi0gKipTZWN1cml0eSBhc3NvY2lhdGlvbnMqKjogdGhlIHNldHRpbmcgdXAgYW5kL29yIGNoZWNraW5nIG9mIHNlY3VyaXR5IHBvbGljaWVzLlxuXG5Gcm9tIGV4cGVyaWVuY2UsIEkga25vdyB0aGF0IHRoaXMgaXMgYSBjcml0aWNhbCBzZWN0aW9uIGZvciBicmluZ2luZyB1cCB0aGUgaW50ZXJmYWNlLCBhbmQgdGhhdCB0aGUgb3JkZXIgb2YgdGhlIGFjdGlvbnMgY2FuIGJlIGNyaXRpY2FsIGZvciBjb3JyZWN0IG9wZXJhdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgc2V0dGluZ3MgYXJlIGNvcnJlY3RseSBjb25maWd1cmVkIGJlZm9yZSB0aGUgaW50ZXJmYWNlIGlzIGFjY2Vzc2libGUuIExldCdzIHNlZSB3aGF0J3MgcmVhbGx5IGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQyMywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU2OjI0LjAxMzU2NzUwMloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL2lmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ5MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ5MDpcXHRcXHRcXHRcXHRpZiAobG9jYWwtXFx1MDAzZXZpcnRfbW9uaXRvcnMgPT0gbG9jYWwtXFx1MDAzZW9wZW5fY291bnQpIHtcXG4xNDkxOlxcdFxcdFxcdFxcdFxcdHJlcyA9IGllZWU4MDIxMV9hZGRfdmlydHVhbF9tb25pdG9yKGxvY2FsLCBzZGF0YSk7XFxuMTQ5MjpcXHRcXHRcXHRcXHRcXHRpZiAocmVzKVxcbjE0OTM6XFx0XFx0XFx0XFx0XFx0XFx0Z290byBlcnJfc3RvcDtcXG4xNDk0OlxcdFxcdFxcdFxcdH1cXG4xNDk1OlxcdFxcbjE0OTY6XFx0XFx0XFx0XFx0bG9jYWwtXFx1MDAzZXZpcnRfbW9uaXRvcnMrKztcXG4xNDk3OlxcdFxcbjE0OTg6XFx0XFx0XFx0XFx0LyogbXVzdCBiZSBiZWZvcmUgdGhlIGNhbGwgdG8gaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIgKi9cXG4xNDk5OlxcdFxcdFxcdFxcdGlmIChsb2NhbC1cXHUwMDNldmlydF9tb25pdG9ycyA9PSAxKSB7XFxuMTUwMDpcXHRcXHRcXHRcXHRcXHRsb2NhbC1cXHUwMDNlaHcuY29uZi5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9NT05JVE9SO1xcbjE1MDE6XFx0XFx0XFx0XFx0XFx0aHdfcmVjb25mX2ZsYWdzIHw9IElFRUU4MDIxMV9DT05GX0NIQU5HRV9NT05JVE9SO1xcbjE1MDI6XFx0XFx0XFx0XFx0fVxcbjE1MDM6XFx0XFx0XFx0fVxcbjE1MDQ6XFx0XFxuMTUwNTpcXHRcXHRcXHRsb2NhbC1cXHUwMDNlbW9uaXRvcnMrKztcXG4xNTA2OlxcdFxcbjE1MDc6XFx0XFx0XFx0aWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAxKTtcXG4xNTA4OlxcdFxcdFxcdGllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTtcXG4xNTA5OlxcdFxcdFxcdGllZWU4MDIxMV9yZWNhbGNfb2ZmbG9hZChsb2NhbCk7XFxuMTUxMDpcXHRcXHRcXHRpZWVlODAyMTFfcmVjYWxjX2lkbGUobG9jYWwpO1xcbjE1MTE6XFx0XFxuMTUxMjpcXHRcXHRcXHRuZXRpZl9jYXJyaWVyX29uKGRldik7XFxuMTUxMzpcXHRcXHRcXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2c2RhdGEtXFx1MDAzZXUubW50ci5saXN0LCBcXHUwMDI2bG9jYWwtXFx1MDAzZW1vbl9saXN0KTtcXG4xNTE0OlxcdFxcdFxcdGJyZWFrO1xcbjE1MTU6XFx0XFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUDpcXG4xNTE2OlxcdFxcdFxcdHNkYXRhLVxcdTAwM2Vic3MgPSBcXHUwMDI2c2RhdGEtXFx1MDAzZXUuYXA7XFxuMTUxNzpcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4xNTE4OlxcdFxcdGRlZmF1bHQ6XFxuMTUxOTpcXHRcXHRcXHRpZiAoY29taW5nX3VwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU2OjI0LjAxMzc1NzE5MloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjU1MTk4ODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTW9uaXRvciBJbnRlcmZhY2UgRmxhZyBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGllZWU4MDIxMV9kb19vcGVuYCwgZm9yICpldmVyeSogbW9uaXRvciBpbnRlcmZhY2UsIHJlZ2FyZGxlc3Mgb2YgdGhlIGBNT05JVE9SX0ZMQUdfQUNUSVZFYCBzdGF0ZSwgYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgMSlgIGlzIHRyaWdnZXJlZC4gIFRoYXQncyB0aGUgaW5pdGlhbCBzZXR1cCwgcmlnaHQ/ICBUaGUgaW5jcmVtZW50LCBzbyB0byBzcGVhay5cblxuTm93LCB0aGUgcHJvYmxlbSBhcmlzZXMgaW4gYGllZWU4MDIxMV9kb19zdG9wYC4gIFByZXZpb3VzbHksIHRoZSBkZWNyZW1lbnQsIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKWAsIHdhcyAqY29uZGl0aW9uYWxseSogZXhlY3V0ZWQuIEl0IHdhcyB0cmFwcGVkICp3aXRoaW4qIGFuIGBpZmAgc3RhdGVtZW50LiBTcGVjaWZpY2FsbHksIGl0IHdhcyBvbmx5IGV4ZWN1dGVkIGlmICpib3RoKiBgTU9OSVRPUl9GTEFHX0FDVElWRWAgd2Fzbid0IHNldCwgKmFuZCogaWYgYE5PX1ZJUlRVQUxfTU9OSVRPUmAgd2Fzbid0IHRydWUsIHdoaWNoIGlzIGRldGVybWluZWQgYnkgYGllZWU4MDIxMV9od19jaGVja2AuXG5cblRoZSBrZXkgaGVyZSBpcyB0aGF0IGlmIGBNT05JVE9SX0ZMQUdfQUNUSVZFYCB3YXMgYWxyZWFkeSBzZXQgb3IgYE5PX1ZJUlRVQUxfTU9OSVRPUmAgd2FzIHRydWUsIHRoZSBjb3JyZXNwb25kaW5nIGRlY3JlbWVudCB3YXNuJ3QgaGFwcGVuaW5nIGluIGBpZWVlODAyMTFfZG9fc3RvcGAuICBUaGF0J3MgYSBkZWZpbml0ZSBpbWJhbGFuY2UuICBUaGlzIG1lYW50IHdlIHdlcmUgbGVha2luZyBvdXIgcmVmY291bnRpbmcsIG9yLCBtb3JlIGFjY3VyYXRlbHksIHRoZSAnYWN0aXZlIG1vbml0b3IgZmxhZycuXG5cblNvLCB0aGUgZml4IGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYW5kIGVsZWdhbnQuIE1vdmluZyB0aGF0IGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKWAgY2FsbCAqb3V0c2lkZSogdGhlIGBpZmAgaW4gYGllZWU4MDIxMV9kb19zdG9wYCB3aWxsIGVuc3VyZSB0aGF0IGZvciAqZXZlcnkqIGluY3JlbWVudCBpbiBgb3BlbmAsIHRoZXJlJ3MgYSBjb3JyZXNwb25kaW5nIGRlY3JlbWVudCBpbiBgc3RvcGAsIG5vIG1hdHRlciB3aGF0IHRoZSBtb25pdG9yJ3Mgc3RhdGUgaXMuICBUaGlzIGJhbGFuY2VzIHRoZSBmbGFnIHJlZmNvdW50aW5nIGFuZCBrZWVwcyB1cyBmcm9tIHJ1bm5pbmcgaW50byBwb3RlbnRpYWwgaXNzdWVzLiAgTm93LCBsZXQgbWUganVzdCBxdWlja2x5IHJldmlldyBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzYCBpdHNlbGYgdG8gbWFrZSBzdXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMDAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNzo1NjoyNy42Njg5NTg5NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDMzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL2lmYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE3MDpcXHRcXHR9XFxuMTE3MTpcXHR9XFxuMTE3MjpcXHRcXG4xMTczOlxcdHZvaWQgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbjExNzQ6XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IGludCBvZmZzZXQpXFxuMTE3NTpcXHR7XFxuMTE3NjpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLVxcdTAwM2Vsb2NhbDtcXG4xMTc3OlxcdFxcdHUzMiBmbGFncyA9IHNkYXRhLVxcdTAwM2V1Lm1udHIuZmxhZ3M7XFxuMTE3ODpcXHRcXG4xMTc5OlxcdCNkZWZpbmUgQURKVVNUKF9mLCBfcylcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjExODA6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTU9OSVRPUl9GTEFHXyMjX2YpXFx0XFx0XFx0XFx0XFxcXFxcbjExODE6XFx0XFx0XFx0bG9jYWwtXFx1MDAzZWZpZl8jI19zICs9IG9mZnNldDtcXHRcXHRcXHRcXFxcXFxuMTE4MjpcXHRcXHR9IHdoaWxlICgwKVxcbjExODM6XFx0XFxuMTE4NDpcXHRcXHRBREpVU1QoRkNTRkFJTCwgZmNzZmFpbCk7XFxuMTE4NTpcXHRcXHRBREpVU1QoUExDUEZBSUwsIHBsY3BmYWlsKTtcXG4xMTg2OlxcdFxcdEFESlVTVChDT05UUk9MLCBjb250cm9sKTtcXG4xMTg3OlxcdFxcdEFESlVTVChDT05UUk9MLCBwc3BvbGwpO1xcbjExODg6XFx0XFx0QURKVVNUKE9USEVSX0JTUywgb3RoZXJfYnNzKTtcXG4xMTg5OlxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgTU9OSVRPUl9GTEFHX1NLSVBfVFgpKVxcbjExOTA6XFx0XFx0XFx0bG9jYWwtXFx1MDAzZXR4X21udHJzICs9IG9mZnNldDtcXG4xMTkxOlxcdFxcbjExOTI6XFx0I3VuZGVmIEFESlVTVFxcbjExOTM6XFx0fVxcbjExOTQ6XFx0XFxuMTE5NTpcXHRzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2V0X2RlZmF1bHRfcXVldWVzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbjExOTY6XFx0e1xcbjExOTc6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS1cXHUwMDNlbG9jYWw7XFxuMTE5ODpcXHRcXHRpbnQgaTtcXG4xMTk5OlxcdFxcbjEyMDA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElFRUU4MDIxMV9OVU1fQUNTOyBpKyspIHtcXG4xMjAxOlxcdFxcdFxcdGlmIChpZWVlODAyMTFfaHdfY2hlY2soXFx1MDAyNmxvY2FsLVxcdTAwM2VodywgUVVFVUVfQ09OVFJPTCkpXFxuMTIwMjpcXHRcXHRcXHRcXHRzZGF0YS1cXHUwMDNldmlmLmh3X3F1ZXVlW2ldID0gSUVFRTgwMjExX0lOVkFMX0hXX1FVRVVFO1xcbjEyMDM6XFx0XFx0XFx0ZWxzZSBpZiAobG9jYWwtXFx1MDAzZWh3LnF1ZXVlcyBcXHUwMDNlPSBJRUVFODAyMTFfTlVNX0FDUylcXG4xMjA0OlxcdFxcdFxcdFxcdHNkYXRhLVxcdTAwM2V2aWYuaHdfcXVldWVbaV0gPSBpO1xcbjEyMDU6XFx0XFx0XFx0ZWxzZVxcbjEyMDY6XFx0XFx0XFx0XFx0c2RhdGEtXFx1MDAzZXZpZi5od19xdWV1ZVtpXSA9IDA7XFxuMTIwNzpcXHRcXHR9XFxuMTIwODpcXHRcXHRzZGF0YS1cXHUwMDNldmlmLmNhYl9xdWV1ZSA9IElFRUU4MDIxMV9JTlZBTF9IV19RVUVVRTtcXG4xMjA5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDc6NTY6MjcuNjY5MjcyODhaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE2ODgxODUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBTYWZldHkgSW1wYWN0IG9mIGEgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgY2hhbmdlIGFuZCBpbW1lZGlhdGVseSBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIG1lbW9yeSBzYWZldHkgaW1wbGljYXRpb25zLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBtb3ZpbmcgdGhpcyBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSlgIGNhbGwgb3V0IG9mIGEgY29uZGl0aW9uYWwgYmxvY2sgaW4gYGllZWU4MDIxMV9kb19zdG9wKClgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaW4gYGllZWU4MDIxMV9kb19vcGVuKClgIHdlICphbHdheXMqIGNhbGwgYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgMSlgIGZvciBtb25pdG9yIGludGVyZmFjZXMsIHdoaWNoIGlzIGZpbmUuIFRoZSBwcmV2aW91cyBzZXR1cCBoYWQgYSBmbGF3OiB3aGVuIHN0b3BwaW5nIGEgbW9uaXRvciBpbnRlcmZhY2UgdGhhdCB3YXMgYWN0aXZlLCBvciBvbiBoYXJkd2FyZSB0aGF0ICpkaWRuJ3QqIHN1cHBvcnQgYSB2aXJ0dWFsIG1vbml0b3IsIHRoaXMgY2FsbCB3YXNuJ3QgbWFkZSwgbWVhbmluZyB0aG9zZSBpbnRlcm5hbCBjb3VudGVycyBpbiBgbG9jYWxgIHdlcmVuJ3QgZ2V0dGluZyBkZWNyZW1lbnRlZCBwcm9wZXJseS4gVGhhdCBtZWFucyB0aGUgYGxvY2FsYCBzdHJ1Y3QsIHdoaWNoIHRyYWNrcyBhbGwgdGhlc2Ugc3RhdGlzdGljcywgd291bGQgYmUgaW5jb25zaXN0ZW50IGFuZCBwb3RlbnRpYWxseSBsZWFkIHRvIGluYWNjdXJhdGUgc3RhdGUgdHJhY2tpbmcgaW4gdGhlIGRyaXZlci5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdGllcz8gTGV0J3MgYnJlYWsgaXQgZG93bjpcblxuKiAgIE5vIGtlcm5lbCB0byB1c2VyIG1lbW9yeSBjb3B5IGhhcHBlbmluZyBoZXJlLiBHb29kLlxuKiAgIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgYnVmZmVycyBpbnRyb2R1Y2VkLiBUaGF0J3MgYSByZWxpZWYuXG4qICAgTm8gcmVhZGluZyBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBicmFuY2hpbmcgb24gdGhlbS4gQ2hlY2suXG4qICAgVGhlIGNoYW5nZSBkb2Vzbid0IHRvdWNoIGJvdW5kcyBjaGVja3MsIGJ1ZmZlciBsZW5ndGhzLCBvciBhbnkgZGF0YSBjb3B5aW5nIGxvZ2ljLiBFeGNlbGxlbnQuXG4qICAgQW5kIHRob3NlIGNvdW50ZXJzIHRoYXQgYXJlIGJlaW5nIGFkanVzdGVkPyBUaGV5J3JlIGp1c3QgaW50ZWdlcnMgd2l0aGluIHRoZSBgaWVlZTgwMjExX2xvY2FsYCBzdHJ1Y3R1cmUuIFNvLCB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGFueSByYXcgcG9pbnRlcnMgb3IgY29tcGxleCBtZW1vcnkgbWFuaXB1bGF0aW9ucy5cblxuQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSdtIHByZXR0eSBjb25maWRlbnQgdGhhdCB0aGlzIGNoYW5nZSAqZG9lc24ndCogaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU3RhbmRhcmQgZnV6emluZywgS0FTQU4sIGFuZCByZWd1bGFyIHRlc3Rpbmcgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3Vlcy4gTm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGhlcmUuXG5cbk9rYXksIG5vdyBsZXQncyBnZXQgcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Nzg2LCJPdXRwdXRUb2tlbnMiOjIyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA3OjU2OjMxLjgzODA5MzY4OVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gYWNjb3VudGluZyBidWcgaW4gbWFjODAyMTEgbW9uaXRvciBpbnRlcmZhY2UgaGFuZGxpbmcgYnkgbW92aW5nIGBpZWVlODAyMTFfYWRqdXN0X21vbml0b3JfZmxhZ3Moc2RhdGEsIC0xKWAgb3V0c2lkZSB0aGUgY29uZGl0aW9uYWwgY2hlY2sgaW4gYGllZWU4MDIxMV9kb19zdG9wKClgLCBwcm9wZXJseSBiYWxhbmNpbmcgdGhlIHVuY29uZGl0aW9uYWwgY2FsbCB0byBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAxKWAgaW4gYGllZWU4MDIxMV9kb19vcGVuKClgLiBcXG5cXG5UaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgaW50ZXJuYWwgbW9uaXRvciBmbGFnIGNvdW50ZXJzIG9uIGBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsYCAoc3VjaCBhcyBgbG9jYWwtXFx1MDAzZWZpZl9mY3NmYWlsYCwgYGxvY2FsLVxcdTAwM2V0eF9tbnRyc2AsIGV0Yy4pLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBpbml0aWFsaXphdGlvbiBsb2dpYy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLCBhbmQgc3RhbmRhcmQgS0FTQU4vdGVzdGluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGFjY291bnRpbmcgYnVnIGluIG1hYzgwMjExIG1vbml0b3IgaW50ZXJmYWNlIGhhbmRsaW5nIGJ5IG1vdmluZyBgaWVlZTgwMjExX2FkanVzdF9tb25pdG9yX2ZsYWdzKHNkYXRhLCAtMSlgIG91dHNpZGUgdGhlIGNvbmRpdGlvbmFsIGNoZWNrIGluIGBpZWVlODAyMTFfZG9fc3RvcCgpYCwgcHJvcGVybHkgYmFsYW5jaW5nIHRoZSB1bmNvbmRpdGlvbmFsIGNhbGwgdG8gYGllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgMSlgIGluIGBpZWVlODAyMTFfZG9fb3BlbigpYC4gXFxuXFxuVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIGludGVybmFsIG1vbml0b3IgZmxhZyBjb3VudGVycyBvbiBgc3RydWN0IGllZWU4MDIxMV9sb2NhbGAgKHN1Y2ggYXMgYGxvY2FsLVxcdTAwM2VmaWZfZmNzZmFpbGAsIGBsb2NhbC1cXHUwMDNldHhfbW50cnNgLCBldGMuKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiwgYW5kIHN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4tt5c[1] Phase: Succeeded StartedAt: 2026-09-06 07:57:12 +0000 UTC FinishedAt: 2026-09-06 07:57:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tt5c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 07:57:12 +0000 UTC FinishedAt: 2026-09-06 07:57:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tt5c[2] Phase: Succeeded StartedAt: 2026-09-06 07:57:12 +0000 UTC FinishedAt: 2026-09-06 11:38:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 07:57:12 +0000 UTC FinishedAt: 2026-09-06 11:38:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 07:57:12 +0000 UTC FinishedAt: 2026-09-06 07:57:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 07:57:12 +0000 UTC FinishedAt: 2026-09-06 07:57:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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-workflow4tt5c/series-workflow4tt5c-convert-artifact-3135787712/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 07:57:22 +0000 UTC FinishedAt: 2026-09-06 08:16:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 07:57:22 +0000 UTC FinishedAt: 2026-09-06 08:16:19 +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:*dd34fbac-a19e-4936-9a84-ecf53729561f,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-workflow4tt5c/series-workflow4tt5c-convert-artifact-3135787712/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": "6fe0bec5-d7f4-4193-a8cf-fceb1976c15f", "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-workflow4tt5c/series-workflow4tt5c-build-action-1599814278/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 07:57:22 +0000 UTC FinishedAt: 2026-09-06 08:16:10 +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:*dd34fbac-a19e-4936-9a84-ecf53729561f,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-workflow4tt5c/series-workflow4tt5c-convert-artifact-3135787712/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": "6fe0bec5-d7f4-4193-a8cf-fceb1976c15f", "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-workflow4tt5c/series-workflow4tt5c-build-action-1599814278/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 08:16:19 +0000 UTC FinishedAt: 2026-09-06 08:16:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 08:16:19 +0000 UTC FinishedAt: 2026-09-06 08:16:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 08:16:19 +0000 UTC FinishedAt: 2026-09-06 08:16:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 08:16:19 +0000 UTC FinishedAt: 2026-09-06 08:16:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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-workflow4tt5c/series-workflow4tt5c-convert-artifact-997057383/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 08:16:30 +0000 UTC FinishedAt: 2026-09-06 08:18:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 08:16:30 +0000 UTC FinishedAt: 2026-09-06 08:18:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6fe0bec5-d7f4-4193-a8cf-fceb1976c15f,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-workflow4tt5c/series-workflow4tt5c-build-action-1599814278/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-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 08:18:21 +0000 UTC FinishedAt: 2026-09-06 08:18:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 08:18:21 +0000 UTC FinishedAt: 2026-09-06 08:18:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 08:18:21 +0000 UTC FinishedAt: 2026-09-06 08:34:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 08:18:21 +0000 UTC FinishedAt: 2026-09-06 08:34:19 +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:*dd34fbac-a19e-4936-9a84-ecf53729561f,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-workflow4tt5c/series-workflow4tt5c-convert-artifact-997057383/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": "a207d087-40f6-4a61-bc9d-f1087f5d4ff7", "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-workflow4tt5c/series-workflow4tt5c-build-action-574266091/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 08:18:21 +0000 UTC FinishedAt: 2026-09-06 08:34:09 +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:*dd34fbac-a19e-4936-9a84-ecf53729561f,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-workflow4tt5c/series-workflow4tt5c-convert-artifact-997057383/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": "a207d087-40f6-4a61-bc9d-f1087f5d4ff7", "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-workflow4tt5c/series-workflow4tt5c-build-action-574266091/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 08:34:19 +0000 UTC FinishedAt: 2026-09-06 08:34:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 08:34:19 +0000 UTC FinishedAt: 2026-09-06 08:34:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 08:34:19 +0000 UTC FinishedAt: 2026-09-06 08:36:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 08:34:19 +0000 UTC FinishedAt: 2026-09-06 08:36:14 +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:*a207d087-40f6-4a61-bc9d-f1087f5d4ff7,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-workflow4tt5c/series-workflow4tt5c-build-action-574266091/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-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 08:36:23 +0000 UTC FinishedAt: 2026-09-06 11:38:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 08:36:23 +0000 UTC FinishedAt: 2026-09-06 11:38:01 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"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:*6fe0bec5-d7f4-4193-a8cf-fceb1976c15f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a207d087-40f6-4a61-bc9d-f1087f5d4ff7,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-workflow4tt5c/series-workflow4tt5c-build-action-1599814278/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-workflow4tt5c/series-workflow4tt5c-build-action-574266091/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 08:36:23 +0000 UTC FinishedAt: 2026-09-06 08:36:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 08:36:23 +0000 UTC FinishedAt: 2026-09-06 08:36: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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"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-workflow4tt5c/series-workflow4tt5c-convert-artifact-1876041664/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 08:36:23 +0000 UTC FinishedAt: 2026-09-06 08:36:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 08:36:23 +0000 UTC FinishedAt: 2026-09-06 08:36:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 08:36:23 +0000 UTC FinishedAt: 2026-09-06 08:36:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 08:36:33 +0000 UTC FinishedAt: 2026-09-06 11:38:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tt5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_do_stop","ieee80211_adjust_monitor_flags","ieee80211_stop","ieee80211_runtime_change_iftype","ieee80211_set_mon_options"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"01c15a8b936d319f3daf7ffaddfe44ca5bd40504","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"7ba6c3bf-e40a-4b43-8597-e8c3cd57787a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 08:36:33 +0000 UTC FinishedAt: 2026-09-06 11:37:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6fe0bec5-d7f4-4193-a8cf-fceb1976c15f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a207d087-40f6-4a61-bc9d-f1087f5d4ff7,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-workflow4tt5c/series-workflow4tt5c-build-action-1599814278/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-workflow4tt5c/series-workflow4tt5c-build-action-574266091/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-workflow4tt5c/series-workflow4tt5c-convert-artifact-1876041664/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,}