# Name: smd_prognostics v0.13 # Type: Admin/Public side plugin # Pro-active diagnostics that alarm when things have changed in TXP # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 1 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE1OiJzbWRfcHJvZ25vc3RpY3MiO3M6NjoiYXV0aG9yIjtz OjExOiJTdGVmIERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZk YXdzb24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuMTMiO3M6MTE6ImRlc2NyaXB0aW9u IjtzOjY1OiJQcm8tYWN0aXZlIGRpYWdub3N0aWNzIHRoYXQgYWxhcm0gd2hlbiB0aGluZ3Mg aGF2ZSBjaGFuZ2VkIGluIFRYUCI7czo0OiJjb2RlIjtzOjYwNDAzOiJnbG9iYWwgJHNtZF9w cm9nbm9zdGljc19ldmVudCwgJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXMsICRzbWRfcHJv Z25vc3RpY3Nfc3FscHJvdDsNCiRzbWRfcHJvZ25vc3RpY3NfZXZlbnQgPSAnc21kX3Byb2du b3N0aWNzJzsNCiRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zID0gcnRyaW0oZ2V0X3ByZWYo J3NtZF9wcm9nbm9zdGljc19kaXInLCB0eHBhdGgsIDEpLCBEUykgLiBEUyAuIGdldF9wcmVm KCdzbWRfcHJvZ25vc3RpY3NfcHJlZml4JywgJycpLidzbWRfcHJvZ25vc3RpY3NfY2hlY2tz dW1zLnR4dCc7DQokaGRyb24gPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3JlcV9oZWFk ZXJzJywgJycpOw0KJHNtZF9wcm9nbm9zdGljc19zcWxwcm90ID0gbmV3IHNtZF9wcm9nX1Bo UHJvdGVjdG9yKGZhbHNlKTsNCg0KaWYgKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgew0K CWdsb2JhbCAkc21kX3Byb2dub3N0aWNzX3N0eWxlLCAkdHhwX3VzZXI7DQoNCgkkc21kX3By b2dub3N0aWNzX3ByaXZzID0gJzEsMic7DQoJJHNtZF9wcm9nbm9zdGljc19zdXBwcmVzcyA9 IGdwcygnc21kX3Byb2dub3N0aWNzX3N1cHByZXNzJyk7DQoJJHNtZF9wcm9nbm9zdGljc19z dHlsZSA9IGFycmF5KA0KCQknbXNnJyA9Pg0KICAgICAgICAgJy5zbWRfcHJvZ193YXJuIHsg bWFyZ2luOjAgYXV0byAxMHB4OyB3aWR0aDo1MDBweDsgYmFja2dyb3VuZDojZmZjOyBib3Jk ZXI6MnB4IGRhc2hlZCByZWQ7IHBhZGRpbmc6MTBweDsgY29sb3I6IzQ0NDsgfQ0KICAgICAg ICAgIC5zbWRfcHJvZ193YXJuIGEgeyBmb250LXdlaWdodDpib2xkOyBjb2xvcjojOTYzOyB9 DQogICAgICAgICAgLnNtZF9wcm9nX3dhcm4gc3BhbiB7IGZvbnQtd2VpZ2h0OmJvbGQ7IH0N CiAgICAgICAgICAuc21kX3Byb2dfd2FybiBkaXYgeyBmb250LXdlaWdodDpib2xkOyBwYWRk aW5nLWJvdHRvbToxMHB4OyB9JywNCgkJJ3NldHVwJyA9Pg0KICAgICAgICAgJy5zbWRfbGFi ZWwgeyB0ZXh0LWFsaWduOnJpZ2h0IWltcG9ydGFudDsgdmVydGljYWwtYWxpZ246bWlkZGxl OyB9DQogICAgICAgICAgLnNtZF9wcm9nX2J0bnMgZm9ybSB7IGRpc3BsYXk6aW5saW5lOyB9 DQogICAgICAgICAgLnNtZF9wcm9nbm9zdGljc19zZXR1cCBoMyB7IG1hcmdpbjoyNXB4IDAg MDsgfScsDQoJCSdtZXRlcicgPT4NCiAgICAgICAgICcjc21kX3Byb2dfbWV0ZXIgeyBtYXJn aW46MCBhdXRvOyBib3JkZXI6MXB4IHNvbGlkICNjY2M7IHdpZHRoOjM2MHB4OyBwYWRkaW5n OjVweDsgZm9udC1zaXplOjEyMCU7IH0NCiAgICAgICAgICAuc21kX3Byb2dfcGFzc19zdHJl bmd0aCB7IGNvbG9yOmdyZWVuOyBmb250LXdlaWdodDpib2xkOyB9JywNCgkJJ2FkdmljZScg PT4NCiAgICAgICAgICcuc21kX3Byb2dfYWR2aWNlIHsgd2lkdGg6NzUwcHg7IH0NCiAgICAg ICAgICAjbGlzdC5zbWRfcHJvZ19hZHZpY2UgdGQgeyBwYWRkaW5nOjVweDsgfQ0KICAgICAg ICAgIC5zbWRfcHJvZ19idG5zIHsgd2lkdGg6MTQwcHg7IH0nLA0KCSk7DQoNCglhZGRfcHJp dnMoJHNtZF9wcm9nbm9zdGljc19ldmVudCwgJHNtZF9wcm9nbm9zdGljc19wcml2cyk7DQoJ YWRkX3ByaXZzKCdwbHVnaW5fcHJlZnMuJy4kc21kX3Byb2dub3N0aWNzX2V2ZW50LCAkc21k X3Byb2dub3N0aWNzX3ByaXZzKTsNCglyZWdpc3Rlcl90YWIoJ2V4dGVuc2lvbnMnLCAkc21k X3Byb2dub3N0aWNzX2V2ZW50LCBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0 aWNzJykpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfcHJvZ25vc3RpY3Nfc2V0dXAnLCAn cGx1Z2luX3ByZWZzLicuJHNtZF9wcm9nbm9zdGljc19ldmVudCk7DQoJcmVnaXN0ZXJfY2Fs bGJhY2soJ3NtZF9wcm9nbm9zdGljc19kaXNwYXRjaGVyJywgJHNtZF9wcm9nbm9zdGljc19l dmVudCk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9wcm9nbm9zdGljc19jaHJvbm9zdHJl bmd0aCcsICdhZG1pbl9zaWRlJywgJ2hlYWRfZW5kJyk7DQoJaWYgKCRoZHJvbikgew0KCQly ZWdpc3Rlcl9jYWxsYmFjaygnc21kX3Byb2dub3N0aWNzX3JlcXVlc3RfaGVhZGVycycsICdh ZG1pbl9zaWRlJywgJ2hlYWRfZW5kJyk7DQoJfQ0KDQoJJHByaXZzID0gc2FmZV9maWVsZCgi cHJpdnMiLCAidHhwX3VzZXJzIiwgIm5hbWUgPSAnIi5kb1NsYXNoKCR0eHBfdXNlcikuIici KTsNCg0KCS8vIEFkbWluIHNpZGUgY2FsbGJhY2sNCglpZiAoISRzbWRfcHJvZ25vc3RpY3Nf c3VwcHJlc3MgJiYgaW5fYXJyYXkoJHByaXZzLCBkb19saXN0KCRzbWRfcHJvZ25vc3RpY3Nf cHJpdnMpKSkgew0KCQlyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3Byb2dub3N0aWNzJywgJ2Fk bWluX3NpZGUnLCAncGFnZXRvcF9lbmQnKTsNCgl9DQp9DQoNCi8vIFB1YmxpYyBzaWRlIGNh bGxiYWNrcw0KaWYgKHN0cnBvcyhnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2NoZWNrX3do ZXJlJywgJycpLCAncHVibGljJykgIT09IGZhbHNlKSB7DQoJcmVnaXN0ZXJfY2FsbGJhY2so J3NtZF9wcm9nbm9zdGljcycsICdwcmV0ZXh0Jyk7DQp9DQppZiAoJGhkcm9uKSB7DQoJcmVn aXN0ZXJfY2FsbGJhY2soJ3NtZF9wcm9nbm9zdGljc19yZXF1ZXN0X2hlYWRlcnMnLCAncHJl dGV4dCcpOw0KfQ0KaWYgKHN0cnBvcyhnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3NxbF9p bmplY3QnLCAnMCcpLCAnMScpICE9PSBmYWxzZSkgew0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdz bWRfcHJvZ25vc3RpY3Nfc3FsX2luamVjdCcsICdwcmV0ZXh0Jyk7DQp9DQoNCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX2Rpc3BhdGNo ZXIoJGV2dCwgJHN0cCkgew0KCWlmKCEkc3RwIG9yICFpbl9hcnJheSgkc3RwLCBhcnJheSgN CgkJCSdzbWRfcHJvZ25vc3RpY3NfZmlsZXMnLA0KCQkJJ3NtZF9wcm9nbm9zdGljc19zZXR1 cCcsDQoJCQknc21kX3Byb2dub3N0aWNzX2FkdmljZScsDQoJCQknc21kX3Byb2dub3N0aWNz X2FjaycsDQoJCSkpKSB7DQoJCXNtZF9wcm9nbm9zdGljc19zZXR1cCgnJyk7DQoJfSBlbHNl ICRzdHAoKTsNCn0NCg0KLy8gU3R1YiB0byBjYWxsIHRoZSB2ZXJpZmljYXRpb24gY29kZSBm cm9tIHRoZSBVUkwNCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljcygkZXZ0LCAkc3RwKSB7DQoJ cmV0dXJuIHNtZF9kb19wcm9nbm9zdGljcygpOw0KfQ0KDQovLyBWZXJpZnkgdGhlIGZpbGUg Y2hlY2tzdW1zDQovLyAkbW9kZSA9IDA6IG5vcm1hbCAvIDE6IG5vIHVwZGF0ZSAocmV0dXJu IGFycmF5cyBvbmx5KSAvIDI6IHNpbGVudCB1cGRhdGUNCmZ1bmN0aW9uIHNtZF9kb19wcm9n bm9zdGljcygkbW9kZT0wKSB7DQoJZ2xvYmFsICRzbWRfcHJvZ25vc3RpY3NfZXZlbnQsICRz bWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zLCAkc21kX3Byb2dub3N0aWNzX3N0eWxlOw0KDQoJ JG5vdyA9IHRpbWUoKTsNCgkkbm9rID0gJG1pc3MgPSAkYWRkZWQgPSAkYWxsZmlsZXMgPSAk aGFzaGRvd24gPSAkaGFzaG1vZCA9IGFycmF5KCk7DQoJJHRpbWVub3cgPSBkYXRlKCdIOmk6 cycsICRub3cpOw0KCWxpc3QoJGJlZywgJGVuZCkgPSBkb19saXN0KGdldF9wcmVmKCdzbWRf cHJvZ25vc3RpY3NfY2hlY2tfYmV0d2VlbicsICd8JyksICd8Jyk7IC8vIERlZmF1bHQgaXMg cGlwZSBzbyB3ZSBjYW4gZ3VhcmFudGVlIHR3byByZXR1cm4gdmFscw0KCSR0ZGlmZiA9ICgk bW9kZT09MSB8fCAoJG5vdyAtIGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbGFzdGNoZWNr JywgMCkgPiBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZyZXEnLCAzNjAwKSkg JiYgKCR0aW1lbm93PiRiZWcpICYmICgkdGltZW5vdzwkZW5kKSApID8gdHJ1ZSA6IGZhbHNl Ow0KDQoJLy8gUGFydHMgc2hhbWVsZXNzbHkgcGxhZ2lhcmlzZWQgZnJvbSB0eHBfZGlhZw0K CWlmICgkdGRpZmYpIHsNCgkJJHN1bWhhc2ggPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNz X3N1bWhhc2gnLCBOVUxMLCAoJG1vZGU9PTEgPyAxIDogMCkpOw0KCQkkbG9va2F0ID0gZ2V0 X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19jaGVja19mb3InLCAnJyk7DQoJCSRhZGRzID0gKHN0 cnBvcygkbG9va2F0LCAnYWRkJykgIT09IGZhbHNlKTsNCgkJJGRlbHMgPSAoc3RycG9zKCRs b29rYXQsICdkZWxldGUnKSAhPT0gZmFsc2UpOw0KCQkkbW9kcyA9IChzdHJwb3MoJGxvb2th dCwgJ21vZGlmeScpICE9PSBmYWxzZSk7DQoNCgkJaWYgKCRjcyA9IEBmaWxlKCRzbWRfcHJv Z25vc3RpY3NfY2hlY2tzdW1zKSkgew0KCQkJJGhhc2ggPSBtZDUoc21kX3Byb2dub3N0aWNz X3ByZXBfZmlsZSgkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtcykpOw0KCQkJaWYgKCRoYXNo ICE9ICRzdW1oYXNoKSB7DQoJCQkJJGhhc2htb2RbXSA9ICRzbWRfcHJvZ25vc3RpY3NfY2hl Y2tzdW1zOw0KCQkJfSBlbHNlIHsNCgkJCQkkY3RyID0gMDsNCgkJCQkkcXR5X3BlciA9ICgo JHF0eSA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfcXR5JywgJycpKSA9PSAn JykgPyBjb3VudCgkY3MpIDogJHF0eTsNCgkJCQkkc29fZmFyID0gZ2V0X3ByZWYoJ3NtZF9w cm9nbm9zdGljc19xdHlfc29fZmFyJywgMCk7DQoJCQkJJHVudGlsID0gJHNvX2ZhciArICRx dHlfcGVyOw0KCQkJCWZvcmVhY2ggKCRjcyBhcyAkYykgew0KCQkJCQlpZiAocHJlZ19tYXRj aCgnQF4oXFMrKTogXCgoLiopXCkkQCcsIHRyaW0oJGMpLCAkbSkpIHsNCgkJCQkJCWxpc3Qo LCRmaWxlLCRtZDUpID0gJG07DQoJCQkJCQlpZiAoJGRlbHMgJiYgIWZpbGVfZXhpc3RzKCRm aWxlKSkgew0KCQkJCQkJCSRtaXNzW10gPSAkZmlsZTsNCgkJCQkJCX0gZWxzZSBpZiAoJG1v ZHMgJiYgJG1kNSAhPSAnTlVMTCcpIHsNCgkJCQkJCQlpZiAoIGZpbGVfZXhpc3RzKCRmaWxl KSAmJiAoICgoJGN0ciA+PSAkc29fZmFyKSAmJiAoJGN0ciA8ICR1bnRpbCkgfHwgJG1vZGUg PT0gMSkgKSApIHsNCgkJCQkJCQkJJGNvbnRlbnQgPSBzbWRfcHJvZ25vc3RpY3NfcHJlcF9m aWxlKCRmaWxlKTsNCgkJCQkJCQkJaWYgKChtZDUoJGNvbnRlbnQpICE9ICRtZDUpICYmICgk ZmlsZSAhPSAkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtcykpIHsNCgkJCQkJCQkJCSRub2tb XSA9ICRmaWxlOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJCSRjdHIrKzsNCgkJCQkJ CX0NCgkJCQkJCSRhbGxmaWxlc1tdID0gJGZpbGU7DQoJCQkJCX0NCgkJCQl9DQoNCgkJCQkv LyBTdGFzaCB0aGUgc3Rvcnkgc28gZmFyIHJlYWR5IGZvciBuZXh0IHRpbWUgdGhlIGZ1bmN0 aW9uIGlzIGNhbGxlZA0KCQkJCWlmICgkbW9kZSAhPSAxKSB7DQoJCQkJCXNldF9wcmVmKCdz bWRfcHJvZ25vc3RpY3NfcXR5X3NvX2ZhcicsICgoJHVudGlsIDwgJGN0cikgPyAkdW50aWwg OiAwKSwgJ3NtZF9wcm9nbm9zJywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJCQkJ fQ0KCQkJCWlmICgkYWRkcykgew0KCQkJCQkkZmlsZWxpc3QgPSBzbWRfcHJvZ25vc3RpY3Nf cmVhZGZpbGVzKCk7DQoJCQkJCSRhZGRlZCA9IGFycmF5X2RpZmYoJGZpbGVsaXN0LCAkYWxs ZmlsZXMpOw0KCQkJCX0NCg0KCQkJCWlmICgkbW9kZSAhPSAxKSB7DQoJCQkJCXNldF9wcmVm KCdzbWRfcHJvZ25vc3RpY3NfbGFzdGNoZWNrJywgJG5vdywgJ3NtZF9wcm9nbm9zJywgUFJF Rl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJCQkJfQ0KCQkJfQ0KCQl9IGVsc2Ugew0KCQkJ Ly8gRmlsZSBkb2Vzbid0IGV4aXN0DQoJCQkkaGFzaGRvd25bXSA9ICRzbWRfcHJvZ25vc3Rp Y3NfY2hlY2tzdW1zOw0KCQl9DQoJfQ0KDQoJLy8gQXNzZW1ibGUgbWVzc2FnZQ0KCWlmICgk bm9rIHx8ICRtaXNzIHx8ICRhZGRlZCB8fCAkaGFzaGRvd24gfHwgJGhhc2htb2QpIHsNCgkJ aWYgKCRtb2RlPT0xKSB7DQoJCQlyZXR1cm4gYXJyYXkoJG5vaywgJG1pc3MsICRhZGRlZCwg JGhhc2hkb3duLCAkaGFzaG1vZCk7DQoJCX0gZWxzZSB7DQoJCQkkdmlhID0gZ2V0X3ByZWYo J3NtZF9wcm9nbm9zdGljc19ub3RpZnlfdmlhJywgJycpOw0KCQkJJGRldGVjdCA9IGdldF9w cmVmKCdzbWRfcHJvZ25vc3RpY3NfbGFzdGRldGVjdCcsICcnKTsNCgkJCSRsYXN0cyA9IGV4 cGxvZGUoJywnLCBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2xhc3RhY3QnLCAwKSk7DQoJ CQkkZnJlcXMgPSBleHBsb2RlKCcsJywgZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19hbGFy bV9mcmVxJywgODY0MDApKTsNCgkJCWlmICghaXNzZXQoJGxhc3RzWzFdKSkgew0KCQkJCSRs YXN0c1sxXSA9ICRsYXN0c1swXTsNCgkJCX0NCgkJCWlmICghaXNzZXQoJGZyZXFzWzFdKSkg ew0KCQkJCSRmcmVxc1sxXSA9ICRmcmVxc1swXTsNCgkJCX0NCg0KCQkJJGxhc3RhY3RfdHhw ID0gKCRtb2RlIDwgMiAmJiAoJG5vdyAtICRsYXN0c1swXSA+ICRmcmVxc1swXSkpID8gdHJ1 ZSA6IGZhbHNlOw0KCQkJJGxhc3RhY3RfbWFpbCA9ICgkbW9kZSA8IDIgJiYgKCRub3cgLSAk bGFzdHNbMV0gPiAkZnJlcXNbMV0pKSA/IHRydWUgOiBmYWxzZTsNCgkJCSRsYXN0bXNnID0g Z2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19sYXN0bXNnJywgJycpOw0KDQoJCQkkc3ViamVj dCA9IHNtZF9wcm9nbm9zdGljc19nVHh0KCdzdWJqZWN0Jyk7DQoJCQkkbXNnID0gam9pbign fCcsIGFycmF5X21lcmdlKCRoYXNoZG93biwgJGhhc2htb2QsICRub2ssICRtaXNzLCAkYWRk ZWQpKTsNCg0KCQkJaWYgKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJyAmJiBzdHJwb3MoJHZp YSwgJ3R4cCcpICE9PSBmYWxzZSkgew0KCQkJCWlmICgkbGFzdGFjdF90eHAgfHwgKCRsYXN0 bXNnICE9IG1kNSgkbXNnKSkpIHsNCgkJCQkJJGFkbWluZGlyID0gc21kX3Byb2dub3N0aWNz X2d1ZXNzX2FkbWluX2RpcigpOw0KCQkJCQkkb3V0ID0gJzxzdHlsZSB0eXBlPSJ0ZXh0L2Nz cyI+Jy4kc21kX3Byb2dub3N0aWNzX3N0eWxlWydtc2cnXS4nPC9zdHlsZT48ZGl2IGNsYXNz PSJzbWRfcHJvZ193YXJuIj48ZGl2PicuJHN1YmplY3QuJzwvZGl2PicuDQoJCQkJCQkoKCRo YXNoZG93bikgPyAnPHA+Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHJlYW1ibGVfaGFzaGRv d24nKS4nPC9wPjx1bD48bGk+Jy5qb2luKCc8L2xpPjxsaT4nLCRoYXNoZG93bikuJzwvbGk+ PC91bD4nIDogJycpLg0KCQkJCQkJKCgkaGFzaG1vZCkgPyAnPHA+Jy5zbWRfcHJvZ25vc3Rp Y3NfZ1R4dCgncHJlYW1ibGVfaGFzaG1vZCcpLic8L3A+PHVsPjxsaT4nLmpvaW4oJzwvbGk+ PGxpPicsJGhhc2htb2QpLic8L2xpPjwvdWw+JyA6ICcnKS4NCgkJCQkJCSgoJG5vaykgPyAn PHA+Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHJlYW1ibGVfbm9rJykuJzwvcD48dWw+PGxp Picuam9pbignPC9saT48bGk+Jywkbm9rKS4nPC9saT48L3VsPicgOiAnJykuDQoJCQkJCQko KCRtaXNzKSA/ICc8cD4nLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJsZV9taXNzJyku JzwvcD48dWw+PGxpPicuam9pbignPC9saT48bGk+JywkbWlzcykuJzwvbGk+PC91bD4nIDog JycpLg0KCQkJCQkJKCgkYWRkZWQpID8gJzxwPicuc21kX3Byb2dub3N0aWNzX2dUeHQoJ3By ZWFtYmxlX2FkZGVkJykuJzwvcD48dWw+PGxpPicuam9pbignPC9saT48bGk+JywkYWRkZWQp Lic8L2xpPjwvdWw+JyA6ICcnKS4NCgkJCQkJCSc8cD48YSBocmVmPSInLmh1LiRhZG1pbmRp ci4nL2luZGV4LnBocD9ldmVudD0nLiRzbWRfcHJvZ25vc3RpY3NfZXZlbnQuJyYjMzg7c3Rl cD1zbWRfcHJvZ25vc3RpY3NfYWNrJnNtZF9wcm9nbm9zdGljc19zdXBwcmVzcz0xIj4nLg0K CQkJCQkJc21kX3Byb2dub3N0aWNzX2dUeHQoJ3Bvc3RhbWJsZScpLic8L2E+PC9wPjwvZGl2 Pic7DQoNCgkJCQkJc2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19sYXN0YWN0JywgJG5vdy4n LCcuJGxhc3RzWzFdLCAnc21kX3Byb2dub3MnLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQn KTsNCgkJCQkJZWNobyAkb3V0Ow0KCQkJCX0NCgkJCX0NCg0KCQkJaWYgKHN0cnBvcygkdmlh LCAnZW1haWwnKSAhPT0gZmFsc2UpIHsNCgkJCQlpZiAoJGxhc3RhY3RfbWFpbCB8fCAoJGxh c3Rtc2cgIT0gbWQ1KCRtc2cpKSkgew0KCQkJCQkkdG8gPSBnZXRfcHJlZignc21kX3Byb2du b3N0aWNzX21haWx0bycsICcnKTsNCgkJCQkJaWYgKCR0bykgew0KCQkJCQkJJGhkcnMgPSBz bWRfcHJvZ25vc3RpY3NfaGVhZGVyX2luZm8oJ3NtZF9wcm9nbm9zdGljcycpOw0KCQkJCQkJ JGJvZHkgPQ0KCQkJCQkJCSgoJGhhc2hkb3duKSA/IG4uc21kX3Byb2dub3N0aWNzX2dUeHQo J3ByZWFtYmxlX2hhc2hkb3duJykubi5uLmpvaW4obiwkaGFzaGRvd24pIDogJycpLg0KCQkJ CQkJCSgoJGhhc2htb2QpID8gbi5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHJlYW1ibGVfaGFz aG1vZCcpLm4ubi5qb2luKG4sJGhhc2htb2QpIDogJycpLg0KCQkJCQkJCSgoJG5vaykgPyBu LnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJsZV9ub2snKS5uLm4uam9pbihuLCRub2sp IDogJycpLg0KCQkJCQkJCSgoJG1pc3MpID8gbi5uLnNtZF9wcm9nbm9zdGljc19nVHh0KCdw cmVhbWJsZV9taXNzJykubi5uLmpvaW4obiwkbWlzcykgOiAnJykuDQoJCQkJCQkJKCgkYWRk ZWQpID8gbi5uLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJsZV9hZGRlZCcpLm4ubi5q b2luKG4sJGFkZGVkKSA6ICcnKS4NCgkJCQkJCQluLm4uJzxhIGhyZWY9IicuJGhkcnNbJ3R4 cGRpciddLicvaW5kZXgucGhwP2V2ZW50PScuJHNtZF9wcm9nbm9zdGljc19ldmVudC4nJnN0 ZXA9c21kX3Byb2dub3N0aWNzX2FjayZzbWRfcHJvZ25vc3RpY3Nfc3VwcHJlc3M9MSI+Jy5z bWRfcHJvZ25vc3RpY3NfZ1R4dCgncG9zdGFtYmxlJykuJzwvYT4nOw0KCQkJCQkJbWFpbCgk dG8sICRzdWJqZWN0LCAkYm9keSwgJGhkcnNbJ2hlYWRlcnMnXSk7DQoJCQkJCX0NCgkJCQkJ c2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19sYXN0YWN0JywgJGxhc3RzWzBdLicsJy4kbm93 LCAnc21kX3Byb2dub3MnLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCgkJCQl9DQoJ CQl9DQoJCQlzZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2xhc3Rtc2cnLCBtZDUoJG1zZyks ICdzbWRfcHJvZ25vcycsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcpOw0KCQkJaWYgKCRs YXN0bXNnICE9IG1kNSgkbXNnKSkgew0KCQkJCWlmICgkZGV0ZWN0ID09ICcnKSB7DQoJCQkJ CXNldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbGFzdGRldGVjdCcsICRub3csICdzbWRfcHJv Z25vcycsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcpOw0KCQkJCX0gZWxzZSB7DQoJCQkJ CSRkZXRlY3QgPSBleHBsb2RlKCcsJywkZGV0ZWN0KTsNCgkJCQkJc2V0X3ByZWYoJ3NtZF9w cm9nbm9zdGljc19sYXN0ZGV0ZWN0JywgJGRldGVjdFswXS4nLCcuJG5vdywgJ3NtZF9wcm9n bm9zJywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJ fQ0KfQ0KDQovLyAtLS0tLS0tLS0tICBDYXRjaCB1bmV4cGVjdGVkIHJlcXVlc3QgaGVhZGVy cw0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX3JlcXVlc3RfaGVhZGVycygkZXZ0LCAkc3Rw KSB7DQoJJGJsb2NrID0gZXhwbG9kZSgnfCcsIGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3Nf cmVxX2hlYWRlcnMnLCAnJykpOw0KCSRoZHIgPSBzZXJ2ZXJTZXQoJ1JFUVVFU1RfTUVUSE9E Jyk7DQoNCglpZiAoaW5fYXJyYXkoJGhkciwgJGJsb2NrKSkgew0KCQllY2hvIHNtZF9wcm9n bm9zdGljc19nVHh0KCduaWNlX3RyeV9oZWFkZXInKTsNCgkJZXhpdCgxKTsNCi8qDQoJCS8v IFNlbmQgdGhlIGZvcmVuc2ljcyBvZmYNCgkJJHRvID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9z dGljc19tYWlsdG9fY3NpJywgJycpOw0KCQkkc3ViamVjdCA9IHNtZF9wcm9nbm9zdGljc19n VHh0KCdzdWJqZWN0X2NzaScpOw0KCQkkaGRycyA9IHNtZF9wcm9nbm9zdGljc19oZWFkZXJf aW5mbygnc21kX2Zyb2dub3N0aWNzJyk7DQoJCSRib2R5ID0gbi5zbWRfcHJvZ25vc3RpY3Nf Z1R4dCgncmVxX25vdF9hbGxvd2VkJywgYXJyYXkoJ3tyZXF9JyA9PiAkaGRyKSkubjsNCgkJ Zm9yZWFjaCAoJF9TRVJWRVIgKyAkX1JFUVVFU1QgKyAkX0VOViBhcyAka2V5ID0+ICR2YXIp IHsNCgkJCSRib2R5IC49IG4uJGtleS4nOiAnLiR2YXI7DQoJCX0NCg0KCQltYWlsKCR0bywg JHN1YmplY3QsICRib2R5LCAkaGRyc1snaGVhZGVycyddKTsNCiovDQoJfQ0KDQp9DQoNCi8v IC0tLS0tLS0tLS0gIFNRTCBpbmplY3Rpb24gZGV0ZWN0aW9uDQpmdW5jdGlvbiBzbWRfcHJv Z25vc3RpY3Nfc3FsX2luamVjdCgpIHsNCglnbG9iYWwgJHNtZF9wcm9nbm9zdGljc19zcWxw cm90Ow0KCWlmKCRzbWRfcHJvZ25vc3RpY3Nfc3FscHJvdC0+aXNNYWxpY2lvdXMoKSkgew0K CQllY2hvIHNtZF9wcm9nbm9zdGljc19nVHh0KCduaWNlX3RyeV9pbmplY3QnKTsNCg0KCQkv LyBTZW5kIHRoZSBmb3JlbnNpY3Mgb2ZmDQoJCSR0byA9IGdldF9wcmVmKCdzbWRfcHJvZ25v c3RpY3NfbWFpbHRvX2NzaScsICcnKTsNCgkJaWYgKCR0bykgew0KCQkJJHN1YmplY3QgPSBz bWRfcHJvZ25vc3RpY3NfZ1R4dCgnc3ViamVjdF9jc2knKTsNCgkJCSRoZHJzID0gc21kX3By b2dub3N0aWNzX2hlYWRlcl9pbmZvKCdzbWRfZnJvZ25vc3RpY3MnKTsNCgkJCSRib2R5ID0g bi5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHJlYW1ibGVfc3FsX2luamVjdCcpLm47DQoJCQkk Ym9keSAuPSAnVFhQOiAnIC4gdHhwX3ZlcnNpb24gLm4uICdQSFA6ICcgLiBwaHB2ZXJzaW9u KCkgLm4uICdNeVNRTDogJyAuIG15c3FsX2dldF9zZXJ2ZXJfaW5mbygpIC5uLiAoKGlzX2Nh bGxhYmxlKCdhcGFjaGVfZ2V0X3ZlcnNpb24nKSkgPyAnQXBhY2hlOiAnIC4gYXBhY2hlX2dl dF92ZXJzaW9uKCkubiA6ICcnKTsNCgkJCWZvcmVhY2ggKCRfU0VSVkVSICsgJF9SRVFVRVNU ICsgJF9FTlYgYXMgJGtleSA9PiAkdmFyKSB7DQoJCQkJJGJvZHkgLj0gbi4ka2V5Lic6ICcu JHZhcjsNCgkJCX0NCg0KCQkJbWFpbCgkdG8sICRzdWJqZWN0LCAkYm9keSwgJGhkcnNbJ2hl YWRlcnMnXSk7DQoJCX0NCgkJZXhpdCgxKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tDQovLyBBZG1pbi1zaWRlIHBhbmVscw0KLy8gLS0tLS0tLS0tLS0tLS0tLS0NCi8vIC0t LS0tLS0tLS0gIEFsYXJtIGFja25vd2xlZGdlbWVudA0KZnVuY3Rpb24gc21kX3Byb2dub3N0 aWNzX2FjaygkbXNnPScnKSB7DQoJZ2xvYmFsICRzbWRfcHJvZ25vc3RpY3NfZXZlbnQsICRz bWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zLCAkcHJlZnM7DQoNCgkkc3VibWl0ID0gZ3BzKCdz dWJtaXQnKTsNCgkkaWdub3JlID0gZ3BzKCdpZ25vcmUnKTsNCgkkY3NpID0gZ3BzKCdjc2kn KTsNCg0KCSRhY2sgPSBncHMoJ3NlbGVjdGVkJyk7DQoJJHNtZF9wcm9nX2FjayA9IChpc19h cnJheSgkYWNrKSkgPyAkYWNrIDogKCgkYWNrKSA/IGFycmF5KCRhY2spIDogYXJyYXkoKSk7 DQoNCgkkb3V0ID0gYXJyYXkoKTsNCg0KCWlmICgkc3VibWl0ID09ICdBY2tub3dsZWRnZScg fHwgJGlnbm9yZSA9PSAnSWdub3JlJykgew0KCQlpZiAoJGNzID0gQGZpbGUoJHNtZF9wcm9n bm9zdGljc19jaGVja3N1bXMpKSB7DQoJCQlmb3JlYWNoICgkY3MgYXMgJGMpIHsNCgkJCQlp ZiAocHJlZ19tYXRjaCgnQF4oXFMrKTogXCgoLiopXCkkQCcsIHRyaW0oJGMpLCAkbSkpIHsN CgkJCQkJbGlzdCgsJGZpbGUsJG1kNSkgPSAkbTsNCgkJCQkJaWYgKCgka2V5ID0gYXJyYXlf c2VhcmNoKCRmaWxlLCAkc21kX3Byb2dfYWNrKSkgIT09IGZhbHNlKSB7DQoJCQkJCQlpZiAo ZmlsZV9leGlzdHMoJGZpbGUpKSB7DQoJCQkJCQkJJGNvbnRlbnQgPSBzbWRfcHJvZ25vc3Rp Y3NfcHJlcF9maWxlKCRmaWxlKTsNCgkJCQkJCQkkb3V0W10gPSAkZmlsZS4nOiAoJy4oICgk aWdub3JlID09ICdJZ25vcmUnKSA/ICdOVUxMJyA6IG1kNSgkY29udGVudCkgKS4nKSc7DQoJ CQkJCQl9DQoJCQkJCQkvLyBSZW1vdmUgZmlsZXMgdGhhdCBhbHJlYWR5IGhhdmUgY2hlY2tz dW1zIHNvIHdlJ3JlIGxlZnQgd2l0aCBhZGRpdGlvbnMNCgkJCQkJCXVuc2V0KCRzbWRfcHJv Z19hY2tbJGtleV0pOw0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJJG91dFtdID0gdHJpbSgkYyk7 DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoNCgkJCS8vIFRhY2sgb24gYW55IG5ldyBmaWxlcw0K CQkJZm9yZWFjaCAoJHNtZF9wcm9nX2FjayBhcyAkZmlsZSkgew0KCQkJCWlmIChmaWxlX2V4 aXN0cygkZmlsZSkgJiYgJGZpbGUgIT0gJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXMpIHsN CgkJCQkJJGNvbnRlbnQgPSBzbWRfcHJvZ25vc3RpY3NfcHJlcF9maWxlKCRmaWxlKTsNCgkJ CQkJJG91dFtdID0gJGZpbGUuJzogKCcuKCAoJGlnbm9yZSA9PSAnSWdub3JlJykgPyAnTlVM TCcgOiBtZDUoJGNvbnRlbnQpICkuJyknOw0KCQkJCX0NCgkJCX0NCgkJCSRmaCA9IGZvcGVu KCRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zLCAidyIpOw0KCQkJZndyaXRlKCRmaCwgam9p bihuLCAkb3V0KSk7DQoJCQlmY2xvc2UoJGZoKTsNCgkJCXNtZF9wcm9nbm9zdGljc19zZWxm X2hhc2goKTsNCgkJCSRtc2cgPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnYWNrZWQnKTsNCgkJ fQ0KCX0NCglpZiAoJGNzaSAmJiAkc21kX3Byb2dfYWNrKSB7DQoJCSAkbXNnID0gc21kX3By b2dub3N0aWNzX2dUeHQoJ2NzaV9zZW50Jyk7DQoJfSBlbHNlIGlmICgkY3NpKSB7DQoJCSAk bXNnID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ25vbmVfc2VsZWN0ZWQnKTsNCgl9DQoNCglw YWdldG9wKHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3MnKSwgJG1zZyk7 DQoJZXh0cmFjdChzbWRfcHJvZ25vc3RpY3NfYnV0dG9ucygpKTsNCg0KCWxpc3QoJG5vaywg JG1pc3MsICRhZGRlZCwgJGhhc2hkb3duLCAkaGFzaG1vZCkgPSBzbWRfZG9fcHJvZ25vc3Rp Y3MoMSk7DQoJJG5vayA9IGlzX2FycmF5KCRub2spID8gJG5vayA6IGFycmF5KCk7DQoJJG1p c3MgPSBpc19hcnJheSgkbWlzcykgPyAkbWlzcyA6IGFycmF5KCk7DQoJJGFkZGVkID0gaXNf YXJyYXkoJGFkZGVkKSA/ICRhZGRlZCA6IGFycmF5KCk7DQoJJGhhc2htb2QgPSBpc19hcnJh eSgkaGFzaG1vZCkgPyAkaGFzaG1vZCA6IGFycmF5KCk7DQoJJGVycm51bSA9IGNvdW50KGFy cmF5X21lcmdlKCRub2ssICRtaXNzLCAkYWRkZWQsICRoYXNobW9kKSk7DQoJJGZvcmVuc2lj cyA9IGFycmF5KCk7DQoJJGxmb3JtID0gJ1ktbS1kIEg6aTpzJzsNCg0KCWVjaG8gJGJ0bkNT Uy5zdGFydFRhYmxlKCdsaXN0Jyk7DQoJZWNobyB0cih0ZGEoc3Ryb25nKHNtZF9wcm9nbm9z dGljc19nVHh0KCd0dGxfYWNrJykpLCAnIGNvbHNwYW49IjMiJykgLiB0ZGEoJGJ0blNldHVw LiRidG5GaWxlcy4kYnRuQWR2aWNlLCAkYnRuU3R5bGUpICk7DQoJZWNobyAnPGZvcm0gbmFt ZT0ibG9uZ2Zvcm0iIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21kX3Byb2du b3N0aWNzX2V2ZW50LicmIzM4O3N0ZXA9c21kX3Byb2dub3N0aWNzX2FjayZzbWRfcHJvZ25v c3RpY3Nfc3VwcHJlc3M9MSI+JzsNCglpZiAoJGVycm51bSA+IDApIHsNCgkJZm9yZWFjaCgk aGFzaG1vZCBhcyAkbmF1Z2h0eSkgew0KCQkJJHNlbCA9IGluX2FycmF5KCRuYXVnaHR5LCAk c21kX3Byb2dfYWNrKTsNCgkJCWVjaG8gdHIodGQoY2hlY2tib3goJ3NlbGVjdGVkW10nLCAk bmF1Z2h0eSwgJHNlbCksICcnLCAnbXVsdGktZWRpdCcpLnRkYShzbWRfcHJvZ25vc3RpY3Nf Z1R4dCgnbGJsX2hhc2htb2QnKSkudGRhKCRuYXVnaHR5KSk7DQoJCX0NCgkJZm9yZWFjaCgk bm9rIGFzICRuYXVnaHR5KSB7DQoJCQkkc2VsID0gaW5fYXJyYXkoJG5hdWdodHksICRzbWRf cHJvZ19hY2spOw0KCQkJZWNobyB0cih0ZChjaGVja2JveCgnc2VsZWN0ZWRbXScsICRuYXVn aHR5LCAkc2VsKSwgJycsICdtdWx0aS1lZGl0JykudGRhKHNtZF9wcm9nbm9zdGljc19nVHh0 KCdsYmxfY2hhbmdlZCcpKS50ZGEoJG5hdWdodHkpKTsNCgkJCWlmICgkc2VsKSB7DQoJCQkJ JGZpID0gc3RhdCgkbmF1Z2h0eSk7DQoJCQkJJGZvcmVuc2ljc1snbm9rJ11bXSA9IHNtZF9w cm9nbm9zdGljc19mb3JlbnNpY19vdXRwdXQoJG5hdWdodHksICRmaSk7DQoJCQkJJGZvcmVu c2ljc1snZmlsZXMnXVskbmF1Z2h0eV0gPSBjaHVua19zcGxpdChiYXNlNjRfZW5jb2RlKGZp bGVfZ2V0X2NvbnRlbnRzKCRuYXVnaHR5KSkpOw0KCQkJfQ0KCQl9DQoJCWZvcmVhY2goJG1p c3MgYXMgJG5hdWdodHkpIHsNCgkJCSRzZWwgPSBpbl9hcnJheSgkbmF1Z2h0eSwgJHNtZF9w cm9nX2Fjayk7DQoJCQllY2hvIHRyKHRkKGNoZWNrYm94KCdzZWxlY3RlZFtdJywgJG5hdWdo dHksICRzZWwpLCAnJywgJ211bHRpLWVkaXQnKS50ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQo J2xibF9taXNzaW5nJykpLnRkYSgkbmF1Z2h0eSkpOw0KCQkJaWYgKCRzZWwpIHsNCgkJCQkk Zm9yZW5zaWNzWydtaXNzJ11bXSA9ICRuYXVnaHR5Ow0KCQkJfQ0KCQl9DQoJCWZvcmVhY2go JGFkZGVkIGFzICRuYXVnaHR5KSB7DQoJCQkkc2VsID0gaW5fYXJyYXkoJG5hdWdodHksICRz bWRfcHJvZ19hY2spOw0KCQkJZWNobyB0cih0ZChjaGVja2JveCgnc2VsZWN0ZWRbXScsICRu YXVnaHR5LCAkc2VsKSwgJycsICdtdWx0aS1lZGl0JykudGRhKHNtZF9wcm9nbm9zdGljc19n VHh0KCdsYmxfYWRkZWQnKSkudGRhKCRuYXVnaHR5KSk7DQoJCQlpZiAoJHNlbCkgew0KCQkJ CSRmaSA9IHN0YXQoJG5hdWdodHkpOw0KCQkJCSRmb3JlbnNpY3NbJ2FkZGVkJ11bXSA9IHNt ZF9wcm9nbm9zdGljc19mb3JlbnNpY19vdXRwdXQoJG5hdWdodHksICRmaSk7DQoJCQkJJGZv cmVuc2ljc1snZmlsZXMnXVskbmF1Z2h0eV0gPSBjaHVua19zcGxpdChiYXNlNjRfZW5jb2Rl KGZpbGVfZ2V0X2NvbnRlbnRzKCRuYXVnaHR5KSkpOw0KCQkJfQ0KCQl9DQoJCWlmICgkc21k X3Byb2dfYWNrICYmICRwcmVmc1snbG9nZ2luZyddICE9ICdub25lJykgew0KCQkJJGRldGVj dCA9IGV4cGxvZGUoJywnLGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbGFzdGRldGVjdCcs IHRpbWUoKSkpOw0KCQkJaWYgKCFpc3NldCgkZGV0ZWN0WzFdKSkgew0KCQkJCSRkZXRlY3Rb MV0gPSAkZGV0ZWN0WzBdOw0KCQkJfQ0KCQkJJHJzID0gc2FmZV9yb3dzKCcqJywgJ3R4cF9s b2cnLCAidGltZSBCRVRXRUVOICciIC4gZGF0ZSgkbGZvcm0sICgkZGV0ZWN0WzBdIC0gJHBy ZWZzWydzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZnJlcSddKSkgLiAiJyBBTkQgJyIgLiBkYXRl KCRsZm9ybSwgKCRkZXRlY3RbMV0gKyA1KSkgLiAiJyIpOw0KCQkJZm9yZWFjaCAoJHJzIGFz ICRyb3cpIHsNCgkJCQkkZm9yZW5zaWNzWyd0eHBfbG9nJ11bXSA9IGpvaW4oJywnLCRyb3cp Ow0KCQkJfQ0KCQl9DQoJCWVjaG8gdHIodGRhKA0KCQkJCXNlbGVjdF9idXR0b25zKCkNCgkJ CSwnIGNsYXNzPSJtdWx0aS1lZGl0IiBjb2xzcGFuPSIzIiBzdHlsZT0idGV4dC1hbGlnbjog cmlnaHQ7IGJvcmRlcjogbm9uZTsiJykpOw0KCQllY2hvIHRyKHRkYSgkYnRuQWNrSXQuJGJ0 bklnbm9yZS4oKGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbWFpbHRvX2NzaScsICcnKSkg PyAkYnRuQ1NJIDogJycpLCAkYnRuU3R5bGUpKTsNCgl9IGVsc2Ugew0KCQllY2hvIHRyKHRk KHNtZF9wcm9nbm9zdGljc19nVHh0KCdub19hbGFybXMnKSkpOw0KCQlzZXRfcHJlZignc21k X3Byb2dub3N0aWNzX2xhc3RkZXRlY3QnLCAnJywgJ3NtZF9wcm9nbm9zJywgUFJFRl9ISURE RU4sICd0ZXh0X2lucHV0Jyk7DQoJfQ0KCWVjaG8gJzwvZm9ybT4nOw0KCWVjaG8gZW5kVGFi bGUoKTsNCg0KCWlmICgkY3NpICYmICRmb3JlbnNpY3MpIHsNCgkJLy8gU2VuZCB0aGUgZm9y ZW5zaWNzIG9mZg0KCQkkdG8gPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX21haWx0b19j c2knLCAnJyk7DQoJCWlmICgkdG8pIHsNCgkJCSRzdWJqZWN0ID0gc21kX3Byb2dub3N0aWNz X2dUeHQoJ3N1YmplY3RfY3NpJyk7DQoJCQkkaGRycyA9IHNtZF9wcm9nbm9zdGljc19oZWFk ZXJfaW5mbygnc21kX2Zyb2dub3N0aWNzJyk7DQoJCQkkYm9keSA9DQoJCQkJbi4nVFhQOiAn IC4gdHhwX3ZlcnNpb24gLm4uICdQSFA6ICcgLiBwaHB2ZXJzaW9uKCkgLm4uICdNeVNRTDog JyAuIG15c3FsX2dldF9zZXJ2ZXJfaW5mbygpIC5uLiAoKGlzX2NhbGxhYmxlKCdhcGFjaGVf Z2V0X3ZlcnNpb24nKSkgPyAnQXBhY2hlOiAnIC4gYXBhY2hlX2dldF92ZXJzaW9uKCkubiA6 ICcnKS4NCgkJCQkoKGlzc2V0KCRmb3JlbnNpY3NbJ25vayddKSkgPyBuLnNtZF9wcm9nbm9z dGljc19nVHh0KCdwcmVhbWJsZV9ub2snKS5uLmpvaW4obiwkZm9yZW5zaWNzWydub2snXSkg OiAnJykuDQoJCQkJKChpc3NldCgkZm9yZW5zaWNzWydtaXNzJ10pKSA/IG4ubi5zbWRfcHJv Z25vc3RpY3NfZ1R4dCgncHJlYW1ibGVfbWlzcycpLm4uam9pbihuLCRmb3JlbnNpY3NbJ21p c3MnXSkgOiAnJykuDQoJCQkJKChpc3NldCgkZm9yZW5zaWNzWydhZGRlZCddKSkgPyBuLm4u c21kX3Byb2dub3N0aWNzX2dUeHQoJ3ByZWFtYmxlX2FkZGVkJykubi5qb2luKG4sJGZvcmVu c2ljc1snYWRkZWQnXSkgOiAnJykuDQoJCQkJKChpc3NldCgkZm9yZW5zaWNzWyd0eHBfbG9n J10pKSA/IG4ubi5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHJlYW1ibGVfdHhwbG9nJykubi5q b2luKG4sJGZvcmVuc2ljc1sndHhwX2xvZyddKSA6IG4ubi5zbWRfcHJvZ25vc3RpY3NfZ1R4 dCgnbm9fbG9nX2VudHJpZXMnKSk7DQoJCQlpZiAoaXNzZXQoJGZvcmVuc2ljc1snZmlsZXMn XSkpIHsNCgkJCQkkYm9keSAuPSBuLm4uc21kX3Byb2dub3N0aWNzX2dUeHQoJ3ByZWFtYmxl X2ZpbGVzJyk7DQoJCQkJZm9yZWFjaCAoJGZvcmVuc2ljc1snZmlsZXMnXSBhcyAkZm4gPT4g JGNvbnRlbnQpIHsNCgkJCQkJJGJvZHkgLj0gbi5uLiRmbi5uLm4uJGNvbnRlbnQubjsNCgkJ CQl9DQoJCQl9DQoNCgkJCW1haWwoJHRvLCAkc3ViamVjdCwgJGJvZHksICRoZHJzWydoZWFk ZXJzJ10pOw0KCQl9DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tIEZpbGUgbWFuYWdlbWVudA0K ZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX2ZpbGVzKCRtc2c9JycpIHsNCglnbG9iYWwgJHNt ZF9wcm9nbm9zdGljc19ldmVudCwgJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXM7DQoNCgll eHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc3VibWl0JykpKSk7DQoJJHNtZF9wcm9nbm9z dGljc19maWxlcyA9IGdwcygnc21kX3Byb2dub3N0aWNzX2ZpbGVzJyk7DQoJaWYgKCFpc19h cnJheSgkc21kX3Byb2dub3N0aWNzX2ZpbGVzKSkgew0KCQkkc21kX3Byb2dub3N0aWNzX2Zp bGVzID0gYXJyYXkoKTsNCgl9DQoNCgkkYWRkcyA9IChzdHJwb3MoZ2V0X3ByZWYoJ3NtZF9w cm9nbm9zdGljc19jaGVja19mb3InKSwgJ2FkZCcpICE9PSBmYWxzZSk7DQoJJGZpbGVsaXN0 ID0gc21kX3Byb2dub3N0aWNzX3JlYWRmaWxlcygpOw0KCSRhbGxjb3VudCA9IGNvdW50KCRm aWxlbGlzdCk7DQoNCglpZiAoJHN1Ym1pdCA9PSAnU2F2ZScpIHsNCgkJJG91dGZpbGUgPSBh cnJheSgpOw0KCQlmb3JlYWNoICgkc21kX3Byb2dub3N0aWNzX2ZpbGVzIGFzICRmaWxlKSB7 DQoJCQkkY29udGVudCA9IHNtZF9wcm9nbm9zdGljc19wcmVwX2ZpbGUoJGZpbGUpOw0KCQkJ JG91dGZpbGVbXSA9ICRmaWxlLic6ICgnLm1kNSgkY29udGVudCkuJyknOw0KCQl9DQoNCgkJ JGZoID0gZm9wZW4oJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXMsICJ3Iik7DQoJCWZ3cml0 ZSgkZmgsIGpvaW4obiwgJG91dGZpbGUpKTsNCg0KCQlpZiAoJGFkZHMpIHsNCgkJCSRhZGRp dGlvbnMgPSBhcnJheV9kaWZmKCRmaWxlbGlzdCwgJHNtZF9wcm9nbm9zdGljc19maWxlcyk7 DQoJCQkkYWRkZWQgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGFkZGl0aW9ucyBhcyAkYWRk aXRpb24pIHsNCgkJCQkkYWRkZWRbXSA9ICRhZGRpdGlvbi4nOiAoTlVMTCknOw0KCQkJfQ0K CQkJZndyaXRlKCRmaCwgbi5qb2luKG4sICRhZGRlZCkpOw0KCQl9DQoJCWZjbG9zZSgkZmgp Ow0KCQlzbWRfcHJvZ25vc3RpY3Nfc2VsZl9oYXNoKCk7DQoJCXNtZF9kb19wcm9nbm9zdGlj cygyKTsgLy8gU2lsZW50bHkgYWNrbm93bGVkZ2UgYWxsIHRoZSBmaWxlcw0KCQlzZXRfcHJl Zignc21kX3Byb2dub3N0aWNzX2xhc3RkZXRlY3QnLCAnJywgJ3NtZF9wcm9nbm9zJywgUFJF Rl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJCSRtc2cgPSBzbWRfcHJvZ25vc3RpY3NfZ1R4 dCgnZmlsZXNfdXBkYXRlZCcpOw0KCX0NCg0KCXBhZ2V0b3Aoc21kX3Byb2dub3N0aWNzX2dU eHQoJ3NtZF9wcm9nbm9zdGljcycpLCAkbXNnKTsNCglleHRyYWN0KHNtZF9wcm9nbm9zdGlj c19idXR0b25zKCkpOw0KDQoJJHNtZF9wcm9nbm9zdGljc19maWxlcyA9IGFycmF5KCk7DQoJ aWYgKCRjcyA9IEBmaWxlKCRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zKSkgew0KCQlmb3Jl YWNoICgkY3MgYXMgJGMpIHsNCgkJCWlmIChwcmVnX21hdGNoKCdAXihcUyspOiBcKCguKilc KSRAJywgdHJpbSgkYyksICRtKSkgew0KCQkJCWxpc3QoLCRmaWxlLCRtZDUpID0gJG07DQoJ CQkJaWYgKCRtZDUgIT0gJ05VTEwnKSB7DQoJCQkJCSRzbWRfcHJvZ25vc3RpY3NfZmlsZXNb XSA9ICRmaWxlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCSRtb25jb3VudCA9IGNvdW50 KCRzbWRfcHJvZ25vc3RpY3NfZmlsZXMpOw0KDQoJaWYgKCRmaWxlbGlzdCkgew0KCQkkZmls ZXogPSBhcnJheSgpOw0KCQlmb3JlYWNoKCRmaWxlbGlzdCBhcyAka2V5ID0+ICR2YWwpIHsN CgkJCSRmaWxlelskdmFsXSA9ICRmaWxlbGlzdFska2V5XTsNCgkgICB9DQoJCSRmaWxlc2Vs ID0gc21kX3Byb2dub3N0aWNzX211bHRpc2VsKCdzbWRfcHJvZ25vc3RpY3NfZmlsZXMnLCAk ZmlsZXosICRzbWRfcHJvZ25vc3RpY3NfZmlsZXMpOw0KCX0NCgkkc2hvd2ZpbGVzID0gKGlz c2V0KCRmaWxlc2VsKSAmJiAkZmlsZXNlbCk7DQoNCgllY2hvICRidG5DU1Muc3RhcnRUYWJs ZSgnbGlzdCcpOw0KCWVjaG8gdHIodGRhKHN0cm9uZyhzbWRfcHJvZ25vc3RpY3NfZ1R4dCgn dHRsX2ZpbGVzJykpKSAuIHRkYSgkYnRuU2V0dXAuJGJ0bkFjay4kYnRuQWR2aWNlLCAkYnRu U3R5bGUpICk7DQoJZWNobyB0cih0ZGNzKHNtZF9wcm9nbm9zdGljc19nVHh0KCdjdXJybW9u JywgYXJyYXkoJ3tjdXJyfScgPT4gJG1vbmNvdW50LCAne291dG9mfScgPT4gJGFsbGNvdW50 KSkgLigoJHNob3dmaWxlcykgPyBici5ici4gc21kX3Byb2dub3N0aWNzX2dUeHQoJ21vbmZp bGVzX2V4cGxhaW4nKSA6ICcnKSwgMSwgNDAwKSk7DQoJZWNobyAnPGZvcm0gbWV0aG9kPSJw b3N0IiBhY3Rpb249Ij9ldmVudD0nLiRzbWRfcHJvZ25vc3RpY3NfZXZlbnQuJyYjMzg7c3Rl cD1zbWRfcHJvZ25vc3RpY3NfZmlsZXMiPic7DQoJZWNobyAoJHNob3dmaWxlcykgPyB0cih0 ZGEoJGZpbGVzZWwpKSA6IHRyKHRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnbm9fZmlsZXMn KSkpOw0KCWVjaG8gdHIodGRhKGZJbnB1dCgnaGlkZGVuJywgJ3NtZF9wcm9nbm9zdGljc19z dXBwcmVzcycsIDEpLiRidG5TYXZlLCAkYnRuU3R5bGUpKTsNCgllY2hvICc8L2Zvcm0+JzsN CgllY2hvIGVuZFRhYmxlKCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0gU2V0dXAgLyBwcmVmcw0K ZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX3NldHVwKCRtc2c9JycpIHsNCglnbG9iYWwgJHNt ZF9wcm9nbm9zdGljc19ldmVudCwgJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXMsICRwcmVm czsNCg0KCXBhZ2V0b3Aoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljcycp LCAkbXNnKTsNCg0KCSRvcmlnbG9jID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19saXN0 bG9jJywgcmVhbHBhdGgodHhwYXRoLkRTLicuLicuRFMpLkRTLCAxKTsNCgkkb3JpZ2RpciA9 IHJ0cmltKGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfZGlyJywgcmVhbHBhdGgodHhwYXRo KSwgMSksIERTKTsNCgkkb3JpZ3BmeCA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfcHJl Zml4JywgJycsIDEpOw0KDQoJJHByZWZsaXN0ID0gYXJyYXkoDQoJCSdzbWRfcHJvZ25vc3Rp Y3NfY2hlY2tfZnJlcScsDQoJCSdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfcXR5JywNCgkJJ3Nt ZF9wcm9nbm9zdGljc19hbGFybV9mcmVxJywNCgkJJ3NtZF9wcm9nbm9zdGljc19jaGVja193 aGVyZScsDQoJCSdzbWRfcHJvZ25vc3RpY3NfbWFpbHRvJywNCgkJJ3NtZF9wcm9nbm9zdGlj c19tYWlsdG9fY3NpJywNCgkJJ3NtZF9wcm9nbm9zdGljc19kaXInLA0KCQknc21kX3Byb2du b3N0aWNzX3ByZWZpeCcsDQoJCSdzbWRfcHJvZ25vc3RpY3NfbGlzdGxvYycsDQoJCSdzbWRf cHJvZ25vc3RpY3NfZXhjbHVkaXInLA0KCQknc21kX3Byb2dub3N0aWNzX2lnbm9yZXMnLA0K CQknc21kX3Byb2dub3N0aWNzX3NxbF9pbmplY3QnLA0KCSk7DQoJJHdhcm5sb2MgPSAnJzsN Cgkkbm90aWZ5ID0gZ3BzKCdzbWRfcHJvZ25vc3RpY3Nfbm90aWZ5X3ZpYScpOw0KCSRjaGZv ciA9IGdwcygnc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZvcicpOw0KCSRyZXFzID0gZ3BzKCdz bWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnMnKTsNCgkkdHdlZW4gPSBncHMoJ3NtZF9wcm9n bm9zdGljc19jaGVja19iZXR3ZWVuJyk7DQoJZm9yZWFjaCAoJHR3ZWVuIGFzICRpZHggPT4g JHZhbCkgew0KCQlpZiAoZW1wdHkoJHZhbCkpIHsNCgkJCSR0d2VlblskaWR4XSA9ICgkaWR4 PT0wKSA/ICcwMDowMCcgOiAnMjM6NTknOw0KCQl9IGVsc2Ugew0KCQkJJHRpbWVwYXJ0cyA9 IGRvX2xpc3QoJHZhbCwgJzonKTsNCgkJCWZvcmVhY2ggKCR0aW1lcGFydHMgYXMgJG51bSkg ew0KCQkJCWlmICghaXNfbnVtZXJpYygkbnVtKSkgew0KCQkJCQkkdHdlZW5bJGlkeF0gPSAo JGlkeD09MCkgPyAnMDA6MDAnIDogJzIzOjU5JzsNCgkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJ fQ0KCQl9DQoJfQ0KDQoJJHNtZF9wcm9nbm9zdGljc19ub3RpZnlfdmlhID0gam9pbignfCcs ICgoaXNfYXJyYXkoJG5vdGlmeSkpID8gJG5vdGlmeSA6IGFycmF5KCRub3RpZnkpKSk7DQoJ JHNtZF9wcm9nbm9zdGljc19jaGVja19mb3IgPSBqb2luKCd8JywgKChpc19hcnJheSgkY2hm b3IpKSA/ICRjaGZvciA6IGFycmF5KCRjaGZvcikpKTsNCgkkc21kX3Byb2dub3N0aWNzX3Jl cV9oZWFkZXJzID0gam9pbignfCcsICgoaXNfYXJyYXkoJHJlcXMpKSA/ICRyZXFzIDogYXJy YXkoJHJlcXMpKSk7DQoJJHNtZF9wcm9nbm9zdGljc19jaGVja19iZXR3ZWVuID0gam9pbign fCcsICgoaXNfYXJyYXkoJHR3ZWVuKSkgPyAkdHdlZW4gOiBhcnJheSgkdHdlZW4pKSk7DQoN CgkvLyBHcmFiIHRoZSBzYXZlZCBwcmVmIHZhbHVlcyBhbmQgdGFjayBvbiB0aGUgYXJyYXkg aXRlbShzKQ0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5X21lcmdlKGFycmF5KCdzdWJt aXQnKSwgJHByZWZsaXN0KSkpKTsNCgkkcHJlZmxpc3RbXSA9ICdzbWRfcHJvZ25vc3RpY3Nf bm90aWZ5X3ZpYSc7DQoJJHByZWZsaXN0W10gPSAnc21kX3Byb2dub3N0aWNzX2NoZWNrX2Zv cic7DQoJJHByZWZsaXN0W10gPSAnc21kX3Byb2dub3N0aWNzX3JlcV9oZWFkZXJzJzsNCgkk cHJlZmxpc3RbXSA9ICdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfYmV0d2Vlbic7DQoJJHNtZF9w cm9nbm9zdGljc19kaXIgPSBydHJpbSgkc21kX3Byb2dub3N0aWNzX2RpciwgRFMpOw0KDQoJ aWYgKCRzdWJtaXQgPT0gJ1NhdmUnKSB7DQoJCWlmICgoJHNtZF9wcm9nbm9zdGljc19kaXIg IT0gJG9yaWdkaXIpIHx8ICgkc21kX3Byb2dub3N0aWNzX3ByZWZpeCAhPSAkb3JpZ3BmeCkp IHsNCgkJCWlmIChpc19kaXIoJHNtZF9wcm9nbm9zdGljc19kaXIpICYmIGlzX3dyaXRhYmxl KCRzbWRfcHJvZ25vc3RpY3NfZGlyKSkgew0KCQkJCS8vIEV2ZXJ5dGhpbmcgT0sgc28gZG8g bm90aGluZyBmb3Igbm93DQoJCQl9IGVsc2Ugew0KCQkJCS8vIElnbm9yZSBuZXcgZGlyIGFu ZCByZXNldCBpdCB0byB3aGF0IGl0IHdhcyBiZWZvcmUNCgkJCQkkc21kX3Byb2dub3N0aWNz X2RpciA9ICRvcmlnZGlyOw0KCQkJfQ0KDQoJCQkvLyBSb29tIGZvciBtb3JlIGNvbmZpZyBm aWxlcyBhcyBhbmQgd2hlbiB0aGV5IGFyZSByZXF1aXJlZA0KCQkJJGZpbGVsaXN0W10gPSAk c21kX3Byb2dub3N0aWNzX2NoZWNrc3VtczsNCg0KCQkJZm9yZWFjaCAoJGZpbGVsaXN0IGFz ICRmaWxlKSB7DQoJCQkJJGZpbGVuYW1lID0gJHNtZF9wcm9nbm9zdGljc19wcmVmaXgubHRy aW0oYmFzZW5hbWUoJGZpbGUpLCAkb3JpZ3BmeCk7DQoJCQkJcmVuYW1lKCRmaWxlLCBydHJp bSgkc21kX3Byb2dub3N0aWNzX2RpciwgRFMpLkRTLiRmaWxlbmFtZSk7DQoJCQl9DQoJCX0N Cg0KCQkvLyBXcml0ZSBhbGwgdGhlIHByZWZzDQoJCWZvcmVhY2ggKCRwcmVmbGlzdCBhcyAk cHJlZnZhbCkgew0KCQkJc2V0X3ByZWYoJHByZWZ2YWwsICQkcHJlZnZhbCwgJ3NtZF9wcm9n bm9zJywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJCX0NCgkJaWYgKCRzbWRfcHJv Z25vc3RpY3NfbGlzdGxvYyAhPSAkb3JpZ2xvYykgew0KCQkJJHdhcm5sb2MgPSBzbWRfcHJv Z25vc3RpY3NfZ1R4dCgnd2Fybl9sb2MnKTsNCgkJfQ0KDQoJfQ0KDQoJJHNtZF9wcm9nbm9z dGljc19kaXIgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2RpcicsIHR4cGF0aCwgMSk7 DQoJJHNtZF9wcm9nbm9zdGljc19wcmVmaXggPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNz X3ByZWZpeCcsICcnLCAxKTsNCgkkc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZvciA9IGdldF9w cmVmKCdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZm9yJywgJ2RlbGV0ZXxtb2RpZnknLCAxKTsN Cgkkc21kX3Byb2dub3N0aWNzX2NoZWNrX3doZXJlID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9z dGljc19jaGVja193aGVyZScsICdhZG1pbicsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3NfY2hl Y2tfZnJlcSA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZnJlcScsIDEwLCAx KTsNCgkkc21kX3Byb2dub3N0aWNzX2NoZWNrX2JldHdlZW4gPSBnZXRfcHJlZignc21kX3By b2dub3N0aWNzX2NoZWNrX2JldHdlZW4nLCAnMDA6MDB8MjM6NTknLCAxKTsNCgkkc21kX3By b2dub3N0aWNzX2NoZWNrX3F0eSA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfY2hlY2tf cXR5JywgJzMwJywgMSk7DQoJJHNtZF9wcm9nbm9zdGljc19hbGFybV9mcmVxID0gZ2V0X3By ZWYoJ3NtZF9wcm9nbm9zdGljc19hbGFybV9mcmVxJywgODY0MDAsIDEpOw0KCSRzbWRfcHJv Z25vc3RpY3Nfbm90aWZ5X3ZpYSA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3Nfbm90aWZ5 X3ZpYScsICcnLCAxKTsNCgkkc21kX3Byb2dub3N0aWNzX21haWx0byA9IGdldF9wcmVmKCdz bWRfcHJvZ25vc3RpY3NfbWFpbHRvJywgJycsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3NfbWFp bHRvX2NzaSA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbWFpbHRvX2NzaScsICcnLCAx KTsNCgkkc21kX3Byb2dub3N0aWNzX2xpc3Rsb2MgPSBnZXRfcHJlZignc21kX3Byb2dub3N0 aWNzX2xpc3Rsb2MnLCByZWFscGF0aCh0eHBhdGguRFMuJy4uJy5EUykuRFMsIDEpOw0KCSRz bWRfcHJvZ25vc3RpY3NfZXhjbHVkaXIgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2V4 Y2x1ZGlyJywgJ2ltYWdlcywgZmlsZXMsIHRtcCcsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3Nf aWdub3JlcyA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfaWdub3JlcycsICdlcnJvcl9s b2cnLCAxKTsNCgkkc21kX3Byb2dub3N0aWNzX3JlcV9oZWFkZXJzID0gZ2V0X3ByZWYoJ3Nt ZF9wcm9nbm9zdGljc19yZXFfaGVhZGVycycsICdUUkFDRXxQVVR8REVMRVRFJywgMSk7DQoJ JHNtZF9wcm9nbm9zdGljc19zcWxfaW5qZWN0ID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGlj c19zcWxfaW5qZWN0JywgJzAnLCAxKTsNCg0KCWV4dHJhY3Qoc21kX3Byb2dub3N0aWNzX2J1 dHRvbnMoKSk7DQoNCgkkYWRkcyA9IChzdHJwb3MoJHNtZF9wcm9nbm9zdGljc19jaGVja19m b3IsICdhZGQnKSAhPT0gZmFsc2UpOw0KCSRkZWxzID0gKHN0cnBvcygkc21kX3Byb2dub3N0 aWNzX2NoZWNrX2ZvciwgJ2RlbGV0ZScpICE9PSBmYWxzZSk7DQoJJG1vZHMgPSAoc3RycG9z KCRzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZm9yLCAnbW9kaWZ5JykgIT09IGZhbHNlKTsNCgkk cmhfdHJhY2UgPSAoc3RycG9zKCRzbWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnMsICdUUkFD RScpICE9PSBmYWxzZSk7DQoJJHJoX3B1dCA9IChzdHJwb3MoJHNtZF9wcm9nbm9zdGljc19y ZXFfaGVhZGVycywgJ1BVVCcpICE9PSBmYWxzZSk7DQoJJHJoX2RlbCA9IChzdHJwb3MoJHNt ZF9wcm9nbm9zdGljc19yZXFfaGVhZGVycywgJ0RFTEVURScpICE9PSBmYWxzZSk7DQoJJHR3 ZWVucyA9IGRvX2xpc3QoJHNtZF9wcm9nbm9zdGljc19jaGVja19iZXR3ZWVuLCAnfCcpOw0K CSRoZWxwTGluayA9ICI/ZXZlbnQ9cGx1Z2luJnN0ZXA9cGx1Z2luX2hlbHAmbmFtZT0kc21k X3Byb2dub3N0aWNzX2V2ZW50I3NtZF9zZXR1cCI7DQoNCgllY2hvICRidG5DU1Muc3RhcnRU YWJsZSgnbGlzdCcsICcnLCAnc21kX3Byb2dub3N0aWNzX3NldHVwJyk7DQoJZWNobyB0cih0 ZGNzKHN0cm9uZyhzbWRfcHJvZ25vc3RpY3NfZ1R4dCgndHRsX3NldHVwJykpLnNwLnNtZF9w cm9nbm9zdGljc19nVHh0KCdoZWxwX2xpbmsnLCBhcnJheSgne2xpbmt9JyA9PiAkaGVscExp bmspKSwgMikgLiB0ZGEoJGJ0bkZpbGVzLiRidG5BY2suJGJ0bkFkdmljZSwgJGJ0blN0eWxl KSApOw0KCWVjaG8gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21k X3Byb2dub3N0aWNzX2V2ZW50LicmIzM4O3N0ZXA9c21kX3Byb2dub3N0aWNzX3NldHVwIj4n Ow0KCWVjaG8gdHIodGRjcyhoZWQoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3R0bF9tb25vcHRz JyksIDMpICwyKSk7DQoJZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdj aGVja193aGVyZScpLCAnIGNsYXNzPSJzbWRfbGFiZWwiJykuDQoJCXRkYShyYWRpb1NldChh cnJheSgnYWRtaW4nID0+IGdUeHQoJ25vJyksICdhZG1pbnxwdWJsaWMnID0+IGdUeHQoJ3ll cycpKSwgJ3NtZF9wcm9nbm9zdGljc19jaGVja193aGVyZScsICRzbWRfcHJvZ25vc3RpY3Nf Y2hlY2tfd2hlcmUpLCAnIGlkPSJzbWRfcHJvZ25vc3RpY3NfY2hlY2tfd2hlcmUiJykNCgkp Ow0KCWVjaG8gdHIoDQoJCXRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY2hlY2tfZnJlcScp LCAnIGNsYXNzPSJzbWRfbGFiZWwiJykuDQoJCXRkYShmSW5wdXQoJ3RleHQnLCAnc21kX3By b2dub3N0aWNzX2NoZWNrX2ZyZXEnLCAkc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZyZXEsICcn LCcnLCcnLDE1KS5zcC5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc2Vjb25kcycpKQ0KCSk7DQoJ ZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdjaGVja19iZXR3ZWVuJyks ICcgY2xhc3M9InNtZF9sYWJlbCInKS4NCgkJdGRhKA0KCQkJZklucHV0KCd0ZXh0JywgJ3Nt ZF9wcm9nbm9zdGljc19jaGVja19iZXR3ZWVuW10nLCAkdHdlZW5zWzBdLCAnJywnJywnJywx NSkuDQoJCQlzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnYW5kJykuDQoJCQlmSW5wdXQoJ3RleHQn LCAnc21kX3Byb2dub3N0aWNzX2NoZWNrX2JldHdlZW5bXScsICR0d2VlbnNbMV0sICcnLCcn LCcnLDE1KS5zcC5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnaG1zJykNCgkJKQ0KCSk7DQoJZWNo byB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdjaGVja19xdHknKSwgJyBjbGFz cz0ic21kX2xhYmVsIicpLg0KCQl0ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF9wcm9nbm9zdGlj c19jaGVja19xdHknLCAkc21kX3Byb2dub3N0aWNzX2NoZWNrX3F0eSwgJycsJycsJycsMTUp KQ0KCSk7DQoJZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdhbGFybV9m cmVxJyksICcgY2xhc3M9InNtZF9sYWJlbCInKS4NCgkJdGRhKGZJbnB1dCgndGV4dCcsICdz bWRfcHJvZ25vc3RpY3NfYWxhcm1fZnJlcScsICRzbWRfcHJvZ25vc3RpY3NfYWxhcm1fZnJl cSwgJycsJycsJycsMTUpLnNwLnNtZF9wcm9nbm9zdGljc19nVHh0KCdzZWNvbmRzJykpDQoJ KTsNCgllY2hvIHRyKA0KCQl0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ25vdGlmeV92aWEn KSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0ZGEoDQoJCQljaGVja2JveCgnc21kX3By b2dub3N0aWNzX25vdGlmeV92aWFbXScsICd0eHAnLCBzdHJwb3MoJHNtZF9wcm9nbm9zdGlj c19ub3RpZnlfdmlhLCAndHhwJykgIT09IGZhbHNlKSAuDQoJCQknPGxhYmVsPicuc21kX3By b2dub3N0aWNzX2dUeHQoJ25vdGlmeV90eHAnKS4nPC9sYWJlbD4nLg0KCQkJY2hlY2tib3go J3NtZF9wcm9nbm9zdGljc19ub3RpZnlfdmlhW10nLCAnZW1haWwnLCBzdHJwb3MoJHNtZF9w cm9nbm9zdGljc19ub3RpZnlfdmlhLCAnZW1haWwnKSAhPT0gZmFsc2UpLg0KCQkJJzxsYWJl bD4nLnNtZF9wcm9nbm9zdGljc19nVHh0KCdub3RpZnlfZW1haWwnKS4nPC9sYWJlbD4nDQoJ CSkNCgkpOw0KCWVjaG8gdHIoDQoJCXRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnbWFpbHRv JyksICcgY2xhc3M9InNtZF9sYWJlbCInKS4NCgkJdGRhKGZJbnB1dCgndGV4dCcsICdzbWRf cHJvZ25vc3RpY3NfbWFpbHRvJywgJHNtZF9wcm9nbm9zdGljc19tYWlsdG8sICcnLCcnLCcn LDYwKS5zcC5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY3N2JykpDQoJKTsNCgllY2hvIHRyKA0K CQl0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ21haWx0b19jc2knKSwgJyBjbGFzcz0ic21k X2xhYmVsIicpLg0KCQl0ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF9wcm9nbm9zdGljc19tYWls dG9fY3NpJywgJHNtZF9wcm9nbm9zdGljc19tYWlsdG9fY3NpLCAnJywnJywnJyw2MCkuc3Au c21kX3Byb2dub3N0aWNzX2dUeHQoJ2NzdicpKQ0KCSk7DQoJZWNobyB0cih0ZGNzKGhlZChz bWRfcHJvZ25vc3RpY3NfZ1R4dCgndHRsX3JlYWxvcHRzJyksIDMpLCAyKSk7DQoJZWNobyB0 cigNCgkJdGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdyZXFfaGVhZGVycycpLCAnIGNsYXNz PSJzbWRfbGFiZWwiJykuDQoJCXRkYSgNCgkJCWNoZWNrYm94KCdzbWRfcHJvZ25vc3RpY3Nf cmVxX2hlYWRlcnNbXScsICdUUkFDRScsICRyaF90cmFjZSkuDQoJCQknPGxhYmVsPicuc21k X3Byb2dub3N0aWNzX2dUeHQoJ3JoX3RyYWNlJykuJzwvbGFiZWw+Jy4NCgkJCWNoZWNrYm94 KCdzbWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnNbXScsICdQVVQnLCAkcmhfcHV0KS4NCgkJ CSc8bGFiZWw+Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncmhfcHV0JykuJzwvbGFiZWw+Jy4N CgkJCWNoZWNrYm94KCdzbWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnNbXScsICdERUxFVEUn LCAkcmhfZGVsKS4NCgkJCSc8bGFiZWw+Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncmhfZGVs JykuJzwvbGFiZWw+Jw0KCQkpDQoJKTsNCgllY2hvIHRyKA0KCQl0ZGEoc21kX3Byb2dub3N0 aWNzX2dUeHQoJ3NxbF9pbmplY3QnKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0ZGEo eWVzbm9SYWRpbygnc21kX3Byb2dub3N0aWNzX3NxbF9pbmplY3QnLCAkc21kX3Byb2dub3N0 aWNzX3NxbF9pbmplY3QpLCAnIGlkPSJzbWRfcHJvZ25vc3RpY3Nfc3FsX2luamVjdCInKQ0K CSk7DQoNCgllY2hvIHRyKHRkY3MoaGVkKHNtZF9wcm9nbm9zdGljc19nVHh0KCd0dGxfZmls ZW9wdHMnKSwgMyksIDIpKTsNCgllY2hvIHRyKA0KCQl0ZGEoc21kX3Byb2dub3N0aWNzX2dU eHQoJ2NoZWNrX2ZvcicpLCAnIGNsYXNzPSJzbWRfbGFiZWwiJykuDQoJCXRkYSgNCgkJCWNo ZWNrYm94KCdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZm9yW10nLCAnYWRkJywgJGFkZHMpIC4N CgkJCSc8bGFiZWw+Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY2hfYWRkJykuJzwvbGFiZWw+ Jy4NCgkJCWNoZWNrYm94KCdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZm9yW10nLCAnZGVsZXRl JywgJGRlbHMpLg0KCQkJJzxsYWJlbD4nLnNtZF9wcm9nbm9zdGljc19nVHh0KCdjaF9kZWwn KS4nPC9sYWJlbD4nLg0KCQkJY2hlY2tib3goJ3NtZF9wcm9nbm9zdGljc19jaGVja19mb3Jb XScsICdtb2RpZnknLCAkbW9kcykuDQoJCQknPGxhYmVsPicuc21kX3Byb2dub3N0aWNzX2dU eHQoJ2NoX21vZCcpLic8L2xhYmVsPicNCgkJKQ0KCSk7DQoJZWNobyB0cigNCgkJdGRhKHNt ZF9wcm9nbm9zdGljc19nVHh0KCdsaXN0bG9jJyksICcgY2xhc3M9InNtZF9sYWJlbCInKS4N CgkJdGRhKGZJbnB1dCgndGV4dCcsICdzbWRfcHJvZ25vc3RpY3NfbGlzdGxvYycsICRzbWRf cHJvZ25vc3RpY3NfbGlzdGxvYywgJycsJycsJycsNjApLnNwLnNtZF9wcm9nbm9zdGljc19n VHh0KCdjc3YnKSkNCgkpOw0KCWVjaG8gdHIoDQoJCXRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4 dCgnZXhjbHVkaXInKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0ZGEoZklucHV0KCd0 ZXh0JywgJ3NtZF9wcm9nbm9zdGljc19leGNsdWRpcicsICRzbWRfcHJvZ25vc3RpY3NfZXhj bHVkaXIsICcnLCcnLCcnLDYwKS5zcC5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY3N2JykpDQoJ KTsNCgllY2hvIHRyKA0KCQl0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ2lnbm9yZXMnKSwg JyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF9wcm9n bm9zdGljc19pZ25vcmVzJywgJHNtZF9wcm9nbm9zdGljc19pZ25vcmVzLCAnJywnJywnJyw2 MCkuc3Auc21kX3Byb2dub3N0aWNzX2dUeHQoJ2NzdicpKQ0KCSk7DQoJZWNobyAoJHdhcm5s b2MpID8gdHIodGQoJyZuYnNwOycpLnRkYSgnPHN0cm9uZz4nLiR3YXJubG9jLic8L3N0cm9u Zz4nKSkgOiAnJzsNCgllY2hvIHRyKA0KCQl0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3By b2dsb2MnKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0ZGEoZklucHV0KCd0ZXh0Jywg J3NtZF9wcm9nbm9zdGljc19kaXInLCAkc21kX3Byb2dub3N0aWNzX2RpciwgJycsJycsJycs NjApKQ0KCSk7DQoJZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdwcm9n cGZ4JyksICcgY2xhc3M9InNtZF9sYWJlbCInKS4NCgkJdGRhKGZJbnB1dCgndGV4dCcsICdz bWRfcHJvZ25vc3RpY3NfcHJlZml4JywgJHNtZF9wcm9nbm9zdGljc19wcmVmaXgsICcnLCcn LCcnLDYwKSkNCgkpOw0KCWVjaG8gdHIodGRhKCRidG5TYXZlLCAkYnRuU3R5bGUpKTsNCgll Y2hvICc8L2Zvcm0+JzsNCgllY2hvIGVuZFRhYmxlKCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0g IFNlY3VyaXR5IGFkdmljZQ0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX2FkdmljZSgkbXNn PScnKSB7DQoJZ2xvYmFsICRzbWRfcHJvZ25vc3RpY3NfZXZlbnQsICRzbWRfcHJvZ25vc3Rp Y3Nfc3R5bGUsICRwcmVmczsNCglyZXF1aXJlX29uY2UgdHhwYXRoLicvbGliL0lYUkNsYXNz LnBocCc7DQoNCglwYWdldG9wKHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3Rp Y3MnKSwgJG1zZyk7DQoJZXh0cmFjdChzbWRfcHJvZ25vc3RpY3NfYnV0dG9ucygpKTsNCg0K CSRjaGVja3MgPSBhcnJheSgpOw0KDQoJLy8gUHJvZ25vc3RpY3MgZGlyIGluIGRvY3Jvb3Q/ DQoJaWYgKHN0cnBvcyhnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2RpcicsIHR4cGF0aCks ICRwcmVmc1sncGF0aF90b19zaXRlJ10pICE9PSBmYWxzZSkgew0KCQkkY2hlY2tzW10gPSBz bWRfcHJvZ25vc3RpY3NfZ1R4dCgnZG9jcm9vdF9wcm9nbm9zdGljcycpOw0KCX0NCg0KCS8v IFNldHVwIHN0aWxsIGV4aXN0cz8NCglpZiAoQGlzX2Rpcih0eHBhdGggLiBEUy4gJ3NldHVw JykpIHsNCgkJJGNoZWNrc1tdID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NldHVwX2V4aXN0 cycpOw0KCX0NCg0KCS8vIE5ldyBUWFAgdmVyc2lvbi9icmFuY2ggYXZhaWxhYmxlPyBBZGFw dGVkIGZyb20gdHhwbGliX3VwZGF0ZS5waHANCgkkY2xpZW50ID0gbmV3IElYUl9DbGllbnQo J2h0dHA6Ly9ycGMudGV4dHBhdHRlcm4uY29tJyk7DQoJJHVpZCA9IGdldF9wcmVmKCdibG9n X3VpZCcsIG1kNSh1bmlxaWQobXRfcmFuZCgpLHRydWUpKSk7DQoJaWYgKCRjbGllbnQtPnF1 ZXJ5KCd0dXBzLmdldFRYUFZlcnNpb24nLCR1aWQpKSB7DQoJCSRyZXNwb25zZSA9ICRjbGll bnQtPmdldFJlc3BvbnNlKCk7DQoNCgkJaWYgKGlzX2FycmF5KCRyZXNwb25zZSkpIHsNCgkJ CWtzb3J0KCRyZXNwb25zZSk7DQoJCQkkdmVyc2lvbiA9IGdldF9wcmVmKCd2ZXJzaW9uJywg JycpOw0KCQkJJGx2ZXJzaW9uID0gZXhwbG9kZSgnLicsJHZlcnNpb24pOw0KCQkJJGJyYW5j aCA9IHN1YnN0cigkdmVyc2lvbiwwLDMpOw0KDQoJCQlmb3JlYWNoICgkcmVzcG9uc2UgYXMg JGtleSA9PiAkdmFsKSB7DQoJCQkJJHJ2ZXJzaW9uID0gZXhwbG9kZSgnLicsJHZhbCk7DQoJ CQkJaWYgKCRrZXkgPT0gJ3R4cF9jdXJyZW50X3ZlcnNpb25fJy4kYnJhbmNoKSB7DQoJCQkJ CWlmIChpc3NldCgkbHZlcnNpb25bMl0pICYmIGlzc2V0KCRydmVyc2lvblsyXSkgJiYgKGlu dHZhbCgkcnZlcnNpb25bMl0pPmludHZhbCgkbHZlcnNpb25bMl0pKSkgew0KCQkJCQkJJG1v c3RfcmVjZW50ID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ2F2YWlsX2JyYW5jaCcpLic6ICcu JHZhbDsNCgkJCQkJfQ0KCQkJCX0gZWxzZSB7DQoJCQkJCWlmIChpbnR2YWwoJHJ2ZXJzaW9u WzBdKT5pbnR2YWwoJGx2ZXJzaW9uWzBdKSB8fCBpbnR2YWwoJHJ2ZXJzaW9uWzFdKT5pbnR2 YWwoJGx2ZXJzaW9uWzFdKSkgew0KCQkJCQkJJG1vc3RfcmVjZW50ID0gc21kX3Byb2dub3N0 aWNzX2dUeHQoJ2F2YWlsX3R4cCcpLic6ICcuJHZhbDsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0N CgkJCWlmIChpc3NldCgkbW9zdF9yZWNlbnQpKSB7DQoJCQkJJGNoZWNrc1tdID0gJG1vc3Rf cmVjZW50Ow0KCQkJfQ0KCQl9DQoJfQ0KDQoJLy8gRmlsZXMgZGlyIGluIGRvY3Jvb3Q/DQoJ aWYgKHN0cnBvcygkcHJlZnNbJ2ZpbGVfYmFzZV9wYXRoJ10sICRwcmVmc1sncGF0aF90b19z aXRlJ10pICE9PSBmYWxzZSkgew0KCQkkY2hlY2tzW10gPSBzbWRfcHJvZ25vc3RpY3NfZ1R4 dCgnZG9jcm9vdF9maWxlcycpOw0KCX0NCg0KCS8vIFRtcCBkaXIgaW4gZG9jcm9vdD8NCglp ZiAoc3RycG9zKCRwcmVmc1sndGVtcGRpciddLCAkcHJlZnNbJ3BhdGhfdG9fc2l0ZSddKSAh PT0gZmFsc2UpIHsNCgkJJGNoZWNrc1tdID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ2RvY3Jv b3RfdG1wJyk7DQoJfQ0KDQovKg0KCS8vIFRPRE86IGNoZWNrIHdoYXQgU0hPVyBHUkFOVFMg cmV0dXJucyBhbmQgZGV0ZXJtaW5lIGlmIGl0IGNvdWxkIGJlIGEgc2VjdXJpdHkgcmlzaw0K CSRyZXMgPSBzYWZlX3F1ZXJ5KCdTSE9XIEdSQU5UUycpOw0KCWlmIChudW1Sb3dzKCRyZXMp ID4gMCkgew0KCQkkY2hlY2tzW10gPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc2hvd19ncmFu dHMnKTsNCgl9DQoqLw0KDQoJLy8gRG9lcyB0aGlzIE15U1FMIHVzZXIgaGF2ZSBGSUxFUyBw cml2cz8NCgkkcmFuZGZpbGUgPSAkcHJlZnNbJ3RlbXBkaXInXS5EUy5yYW5kKCkudGltZSgp Licuc3FsJzsNCgkkcmVzID0gQHNhZmVfcXVlcnkoJ1NFTEVDVCBpZCBJTlRPIE9VVEZJTEUg IicuJHJhbmRmaWxlLiciIEZJRUxEUyBURVJNSU5BVEVEIEJZICJcdCIgTElORVMgVEVSTUlO QVRFRCBCWSAiXG4iIEZST00gdHhwX2ltYWdlIFdIRVJFIDEgTElNSVQgMScpOw0KCWlmICht eXNxbF9lcnJvcigpID09ICcnKSB7DQoJCSRjaGVja3NbXSA9IHNtZF9wcm9nbm9zdGljc19n VHh0KCdzcWxfZmlsZV9wcml2cycpOw0KCQlpZiAoaXNfZmlsZSgkcmFuZGZpbGUpKSB7DQoJ CQlAdW5saW5rKCRyYW5kZmlsZSk7DQoJCX0NCgl9DQoNCgllY2hvICc8c3R5bGUgdHlwZT0i dGV4dC9jc3MiPicuJHNtZF9wcm9nbm9zdGljc19zdHlsZVsnYWR2aWNlJ10uJHNtZF9wcm9n bm9zdGljc19zdHlsZVsnc2V0dXAnXS4nPC9zdHlsZT4nLnN0YXJ0VGFibGUoJ2xpc3QnLCAn JywgJ3NtZF9wcm9nX2FkdmljZScpOw0KCWVjaG8gdHIodGRhKHN0cm9uZyhzbWRfcHJvZ25v c3RpY3NfZ1R4dCgndHRsX2FkdmljZScpKSkgLiB0ZGEoJGJ0blNldHVwLiRidG5GaWxlcy4k YnRuQWNrLCAkYnRuU3R5bGUpICk7DQoJaWYgKCRjaGVja3MpIHsNCgkJZm9yZWFjaCgkY2hl Y2tzIGFzICRjaGVjaykgew0KCQkJZWNobyB0cih0ZGEoJGNoZWNrKSk7DQoJCX0NCgl9IGVs c2Ugew0KCQlzbWRfcHJvZ25vc3RpY3NfZ1R4dCgndGlnaHQnKTsNCgl9DQoJZWNobyBlbmRU YWJsZSgpOw0KfQ0KDQovLyAtLS0tLS0tLS0tIEhhc2ggdGhlIGhhc2hmaWxlDQpmdW5jdGlv biBzbWRfcHJvZ25vc3RpY3Nfc2VsZl9oYXNoKCkgew0KCWdsb2JhbCAkc21kX3Byb2dub3N0 aWNzX2NoZWNrc3VtczsNCg0KCWlmIChmaWxlX2V4aXN0cygkc21kX3Byb2dub3N0aWNzX2No ZWNrc3VtcykpIHsNCgkJJGNvbnRlbnQgPSBzbWRfcHJvZ25vc3RpY3NfcHJlcF9maWxlKCRz bWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zKTsNCgkJJGhhc2ggPSBtZDUoJGNvbnRlbnQpOw0K CX0gZWxzZSB7DQoJCSRoYXNoID0gTlVMTDsNCgl9DQoJc2V0X3ByZWYoJ3NtZF9wcm9nbm9z dGljc19zdW1oYXNoJywgJGhhc2gsICdzbWRfcHJvZ25vcycsIFBSRUZfSElEREVOLCAndGV4 dF9pbnB1dCcpOw0KfQ0KDQovLyAtLS0tLS0tLS0tIENvbXBpbGUgbGlzdCBvZiBmaWxlcyB0 byBtb25pdG9yDQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3NfcmVhZGZpbGVzKCkgew0KCSRm aWxlbGlzdCA9IGFycmF5KCk7DQoNCgkkc21kX3Byb2dub3N0aWNzX2xpc3Rsb2MgPSBnZXRf cHJlZignc21kX3Byb2dub3N0aWNzX2xpc3Rsb2MnLCAnJyk7DQoJJHNtZF9wcm9nbm9zdGlj c19leGNsdWRpciA9IGRvX2xpc3QoZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19leGNsdWRp cicsICcnKSk7DQoJJHNtZF9wcm9nbm9zdGljc19pZ25vcmVzID0gZ2V0X3ByZWYoJ3NtZF9w cm9nbm9zdGljc19pZ25vcmVzJywgJycpOw0KCWlmICgkc21kX3Byb2dub3N0aWNzX2xpc3Rs b2MpIHsNCgkJZm9yZWFjaCAoZG9fbGlzdCgkc21kX3Byb2dub3N0aWNzX2xpc3Rsb2MpIGFz ICRsb2MpIHsNCgkJCS8vIE5PVEU6IG5vdCB1c2luZyBHTE9CX0JSQUNFIHRvIGdyYWIgcmVn dWxhciBhbmQgZG90IGZpbGVzLCBzaW5jZSBpdCdzIG5vdCBhbHdheXMgYXZhaWxhYmxlIGNy b3NzLU9TDQoJCQkkZmlsZWxpc3QgPSBhcnJheV9tZXJnZSgkZmlsZWxpc3QsIHNtZF9wcm9n bm9zdGljc19yZ2xvYigiKiIsIEdMT0JfTUFSSywgJGxvYywgJHNtZF9wcm9nbm9zdGljc19l eGNsdWRpciwgJHNtZF9wcm9nbm9zdGljc19pZ25vcmVzKSwgc21kX3Byb2dub3N0aWNzX3Jn bG9iKCIuKiIsIEdMT0JfTUFSSywgJGxvYywgJHNtZF9wcm9nbm9zdGljc19leGNsdWRpciwg JHNtZF9wcm9nbm9zdGljc19pZ25vcmVzKSk7DQoJCX0NCgl9DQoJcmV0dXJuICRmaWxlbGlz dDsNCn0NCg0KLy8gLS0tLS0tLS0tLSBQcmVwYXJlIGZpbGUgY29udGVudHMgZm9yIG1kNS4g QXNzdW1lcyBmaWxlIGV4aXN0cw0KLy8gQ2hlY2tzIHRvIHNlZSBpZiBsYXJnZSBmaWxlcyBh cmUgYmluYXJ5IGJlZm9yZSB3YXN0aW5nIHRpbWUgc3RyaXBwaW5nIG5ld2xpbmVzIGFuZCBz dHVmZg0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX3ByZXBfZmlsZSgkZmlsZSkgew0KCSRj b250ZW50ID0gZmlsZV9nZXRfY29udGVudHMoJGZpbGUpOw0KCSRzdGF0ID0gc3RhdCgkZmls ZSk7DQoJJGRvc3RyaXAgPSB0cnVlOw0KCS8vIFBlcmZvcm0gdGhlIHN0cmlwIHJlZ2FyZGxl c3Mgb24gZmlsZXMgPCAxS2IgYXMgaXQgaGFzIGxpdHRsZSBpbXBhY3QNCglpZiAoJHN0YXRb J3NpemUnXSA+IDEwMjQwMDApIHsNCgkJJHBhcnQgPSBzdWJzdHIoJGNvbnRlbnQsIDAsIDE1 MzYwMDApOyAvLyBGaXJzdCAxLjVLQg0KCQlpZiAoc3RycG9zKCRwYXJ0LCAweDAwKSB8fCAo c3RycG9zKCRwYXJ0LCAweDBEKSAhPT0gZmFsc2UpIHx8IChzdHJwb3MoJHBhcnQsIDB4MEEp ICE9PSBmYWxzZSkpIHsNCgkJCS8vIExpa2VseSBhIGJpbmFyeSBmaWxlOiBsZWF2ZSBpdCBi ZQ0KCQkJJGRvc3RyaXAgPSBmYWxzZTsNCgkJfQ0KCX0NCglpZiAoJGRvc3RyaXApIHsNCgkJ JGNvbnRlbnQgPSBzdHJ0ciggJGNvbnRlbnQsIGFycmF5KCJcclxuIiA9PiAiXG4iLCAiXCRI ZWFkVVJMOiBodHRwOiIgPT4gIlwkSGVhZFVSTDogaHR0cHM6IikgKTsNCgl9DQoJcmV0dXJu ICRjb250ZW50Ow0KfQ0KCQ0KLy8gRnJhbmtlbnN0ZWluZWQgZnJvbSBodHRwOi8vc25pcHBs ci5jb20vdmlldy8xNjIzMy9yZWN1cnNpdmUtZ2xvYi8NCmZ1bmN0aW9uIHNtZF9wcm9nbm9z dGljc19yZ2xvYigkcGF0dGVybiwgJGZsYWdzPTAsICRwYXRoPScnLCAkZXhjbD1hcnJheSgp LCAkaWduPScnKSB7DQoJZ2xvYmFsICRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zOw0KDQoJ Ly8gQWRkIGFueSBmaWxlcyB0byBwZXJtYW5lbnRseSBleGNsdWRlIGhlcmUgKE5PVCBkaXJz OiB0aGV5J3JlIGlnbm9yZWQgYXV0b21hdGljYWxseSkNCgkkaWduYXJyID0gKCRpZ24pID8g ZG9fbGlzdCgkaWduKSA6IGFycmF5KCk7DQoJJHBlcm1leGNsdWRlID0gYXJyYXlfbWVyZ2Uo YXJyYXkoYmFzZW5hbWUoJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXMpKSwgJGlnbmFycik7 DQoNCglpZiAoISRwYXRoICYmICgkZGlyID0gZGlybmFtZSgkcGF0dGVybikpICE9ICcuJykg ew0KCQlpZiAoJGRpciA9PSAnXFwnIHx8ICRkaXIgPT0gRFMpICRkaXIgPSAnJzsNCgkJcmV0 dXJuIHNtZF9wcm9nbm9zdGljc19yZ2xvYihiYXNlbmFtZSgkcGF0dGVybiksICRmbGFncywg JGRpciAuIERTLCAkZXhjbCwgJGlnbik7DQoJfQ0KCSRwYXRocyA9IGdsb2IoJHBhdGggLiAn KicsIEdMT0JfT05MWURJUiB8IEdMT0JfTk9TT1JUKTsNCgkkZmlsZXMgPSBnbG9iKCRwYXRo IC4gJHBhdHRlcm4sICRmbGFncyk7DQoJZm9yZWFjaCAoJHBhdGhzIGFzICRwKSB7DQoJCSRw aW5mbyA9IGFycmF5X3BvcChleHBsb2RlKERTLCAkcCkpOw0KCQlpZiAoIWluX2FycmF5KCRw aW5mbywgJGV4Y2wpKSB7DQoJCQkkZmlsZXMgPSBhcnJheV9tZXJnZSgkZmlsZXMsIHNtZF9w cm9nbm9zdGljc19yZ2xvYigkcGF0dGVybiwgJGZsYWdzLCAkcCAuIERTLCAkZXhjbCwgJGln bikpOw0KCQkJZm9yZWFjaCgkZmlsZXMgYXMgJGlkeCA9PiAkdGhlRmlsZSkgew0KCQkJCSRm ZXggPSBhcnJheV9wb3AoZXhwbG9kZShEUywgJHRoZUZpbGUpKTsNCgkJCQlpZigkZmV4PT0n JyB8fCBpbl9hcnJheSgkZmV4LCAkcGVybWV4Y2x1ZGUpKSB7DQoJCQkJCXVuc2V0KCRmaWxl c1skaWR4XSk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KCXJldHVybiAkZmlsZXM7DQp9DQoN Ci8vIEZvcm1hdCBmb3JlbnNpYyBkYXRhIGZvciBhIGZpbGUNCmZ1bmN0aW9uIHNtZF9wcm9n bm9zdGljc19mb3JlbnNpY19vdXRwdXQoJGZpbGUsICRmaSkgew0KCWdsb2JhbCAkcHJlZnM7 DQoNCgkkZGZvcm0gPSAkcHJlZnNbJ2RhdGVmb3JtYXQnXTsNCgkkc2VwID0gbjsNCgkkb3V0 ID0gJyc7DQoNCgkkb3V0IC49ICRzZXAgLiBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc3RhdF9u YW1lJykgLiAkZmlsZTsNCgkkb3V0IC49ICRzZXAgLiBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgn c3RhdF9zaXplJykgLiAkZmlbJ3NpemUnXTsNCgkkb3V0IC49ICRzZXAgLiBzbWRfcHJvZ25v c3RpY3NfZ1R4dCgnc3RhdF9tb2QnKSAuIHN0cmZ0aW1lKCRkZm9ybSwgJGZpWydtdGltZSdd KTsNCgkkb3V0IC49ICRzZXAgLiBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc3RhdF91aWQnKSAu ICRmaVsndWlkJ107DQoJJG91dCAuPSAkc2VwIC4gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3N0 YXRfZ2lkJykgLiAkZmlbJ2dpZCddOw0KDQoJcmV0dXJuICRvdXQ7DQp9DQoNCi8vIC0tLS0t LS0tLS0gRG9lcyB3aGF0IGl0IHNheXMgb24gdGhlIHRpbg0KLy8gQXNzdW1lcyAndGV4dHBh dHRlcm4nIGlzIHRoZSBhZG1pbi1zaWRlIGRpcmVjdG9yeSBpZiBzZXJ2ZXIgdmFyIG5vdCBz ZXQuIE11c3QgZml4IGluIGNvcmUgb25lIGRheSB3aXRoIHRydWUgY29uc3RhbnQNCmZ1bmN0 aW9uIHNtZF9wcm9nbm9zdGljc19ndWVzc19hZG1pbl9kaXIoKSB7DQoJJGFkbWluZGlyID0g dHJpbShkaXJuYW1lKCRfU0VSVkVSWydQSFBfU0VMRiddKSwgJy9cXCcpOw0KCSRhZG1pbmRp ciA9IChlbXB0eSgkYWRtaW5kaXIpKSA/ICd0ZXh0cGF0dGVybicgOiAkYWRtaW5kaXI7DQoJ cmV0dXJuICRhZG1pbmRpcjsNCn0NCg0KLy8gLS0tLS0tLS0tLSBHZXQgY29tbW9uIHNlcnZl ciBpbmZvIGZvciBtYWlsIGhlYWRlcnMsIGV0Yw0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNz X2hlYWRlcl9pbmZvKCRmcm9tbmFtZSkgew0KCSRkb21haW5wYXJ0cyA9IGRvX2xpc3QoZG9T dHJpcChzZXJ2ZXJTZXQoJ1NFUlZFUl9OQU1FJykpLCAnLicpOw0KCSRudW1wYXJ0cyA9IGNv dW50KCRkb21haW5wYXJ0cyk7DQoJJGRvbWFpbiA9ICRkb21haW5wYXJ0c1skbnVtcGFydHMt Ml0gLiAnLicgLiAkZG9tYWlucGFydHNbJG51bXBhcnRzLTFdOw0KCSRyZXBseV90byA9ICdu b3JlcGx5QCcuJGRvbWFpbjsNCgkkYWRtaW5kaXIgPSBzbWRfcHJvZ25vc3RpY3NfZ3Vlc3Nf YWRtaW5fZGlyKCk7DQoJJHR4cGRpciA9IGh1IC4gJGFkbWluZGlyOw0KCSRzZXAgPSBpc193 aW5kb3dzKCkgPyAiXHJcbiIgOiAiXG4iOw0KCSRoZWFkZXJzID0gIkZyb206ICRmcm9tbmFt ZSA8JHJlcGx5X3RvPiIuDQoJCSRzZXAuJ1JlcGx5LVRvOiAnLiRyZXBseV90by4NCgkJJHNl cC4nWC1NYWlsZXI6IFRleHRwYXR0ZXJuJy4NCgkJJHNlcC4nQ29udGVudC1UcmFuc2Zlci1F bmNvZGluZzogOGJpdCcuDQoJCSRzZXAuJ0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hh cnNldD0iVVRGLTgiJy4NCgkJJHNlcDsNCg0KCSRvdXQgPSBhcnJheSgNCgkJJ2RvbWFpbicg PT4gJGRvbWFpbiwNCgkJJ3JlcGx5X3RvJyA9PiAkcmVwbHlfdG8sDQoJCSdhZG1pbmRpcicg PT4gJGFkbWluZGlyLA0KCQkndHhwZGlyJyA9PiAkdHhwZGlyLA0KCQknc2VwJyA9PiAkc2Vw LA0KCQknaGVhZGVycycgPT4gJGhlYWRlcnMsDQoJKTsNCg0KCXJldHVybiAkb3V0Ow0KfQ0K DQovLyBDb21tb24gYnV0dG9ucw0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX2J1dHRvbnMo KSB7DQoJZ2xvYmFsICRzbWRfcHJvZ25vc3RpY3NfZXZlbnQsICRzbWRfcHJvZ25vc3RpY3Nf c3R5bGU7DQoNCgkkcmV0ID0gYXJyYXkgKA0KCQknYnRuU2F2ZScgPT4gZklucHV0KCdzdWJt aXQnLCAnc3VibWl0JywgZ1R4dCgnc2F2ZScpLCAncHVibGlzaCcpLA0KCQknYnRuQWNrJyA9 PiAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD0nLiRzbWRfcHJvZ25vc3Rp Y3NfZXZlbnQuJyYjMzg7c3RlcD1zbWRfcHJvZ25vc3RpY3NfYWNrJiMzODtzbWRfcHJvZ25v c3RpY3Nfc3VwcHJlc3M9MSI+Jy5mSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBzbWRfcHJv Z25vc3RpY3NfZ1R4dCgncG5sX2FjaycpLCAnc21hbGxlcmJveCcpLic8L2Zvcm0+JywNCgkJ J2J0bkFja0l0JyA9PiBmSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBzbWRfcHJvZ25vc3Rp Y3NfZ1R4dCgncG5sX2Fja2l0JyksICdwdWJsaXNoJyksDQoJCSdidG5JZ25vcmUnID0+IGZJ bnB1dCgnc3VibWl0JywgJ2lnbm9yZScsIHNtZF9wcm9nbm9zdGljc19nVHh0KCdwbmxfaWdu b3JlJyksICdwdWJsaXNoJyksDQoJCSdidG5DU0knID0+IGZJbnB1dCgnc3VibWl0JywgJ2Nz aScsIHNtZF9wcm9nbm9zdGljc19nVHh0KCdwbmxfY3NpJyksICdwdWJsaXNoJyksDQoJCSdi dG5BZHZpY2UnID0+ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PScuJHNt ZF9wcm9nbm9zdGljc19ldmVudC4nJiMzODtzdGVwPXNtZF9wcm9nbm9zdGljc19hZHZpY2Ui PicuZklucHV0KCdzdWJtaXQnLCAnc3VibWl0Jywgc21kX3Byb2dub3N0aWNzX2dUeHQoJ3Bu bF9hZHZpY2UnKSwgJ3NtYWxsZXJib3gnKS4nPC9mb3JtPicsDQoJCSdidG5GaWxlcycgPT4g Jzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21kX3Byb2dub3N0aWNz X2V2ZW50LicmIzM4O3N0ZXA9c21kX3Byb2dub3N0aWNzX2ZpbGVzIj4nLmZJbnB1dCgnc3Vi bWl0JywgJ3N1Ym1pdCcsIHNtZF9wcm9nbm9zdGljc19nVHh0KCdwbmxfZmlsZXMnKSwgJ3Nt YWxsZXJib3gnKS4nPC9mb3JtPicsDQoJCSdidG5TZXR1cCcgPT4gJzxmb3JtIG1ldGhvZD0i cG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21kX3Byb2dub3N0aWNzX2V2ZW50LicmIzM4O3N0 ZXA9c21kX3Byb2dub3N0aWNzX3NldHVwIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcs IHNtZF9wcm9nbm9zdGljc19nVHh0KCdwbmxfc2V0dXAnKSwgJ3NtYWxsZXJib3gnKS4nPC9m b3JtPicsDQoJCSdidG5TdHlsZScgPT4gJyBjbGFzcz0ic21kX3Byb2dfYnRucyIgc3R5bGU9 ImJvcmRlcjowO2hlaWdodDoyNXB4OyInLA0KCQknYnRuQ1NTJyA9PiAnPHN0eWxlIHR5cGU9 InRleHQvY3NzIj4nLiRzbWRfcHJvZ25vc3RpY3Nfc3R5bGVbJ3NldHVwJ10uJzwvc3R5bGU+ JywNCgkpOw0KCXJldHVybiAkcmV0Ow0KfQ0KDQovLyBNdWx0aS1maWxlIGRyb3Bkb3duIHNl bGVjdGlvbg0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX211bHRpc2VsKCRzZWxuYW1lPScn LCAkdHJlZT1hcnJheSgpLCAkc2VsPWFycmF5KCkpIHsNCgkkb3V0W10gPSAnPHNlbGVjdCBp ZD0iJy4kc2VsbmFtZS4nIiBuYW1lPSInLiRzZWxuYW1lLidbXSIgY2xhc3M9Imxpc3QiIHN0 eWxlPSJoZWlnaHQ6NDAwcHg7IiBtdWx0aXBsZT0ibXVsdGlwbGUiPic7DQoJZm9yZWFjaCAo JHRyZWUgYXMgJGxlYWYpIHsNCgkJJHNlbGVjdGVkPScnOw0KCQlpZiAoaW5fYXJyYXkoJGxl YWYsICRzZWwpKSB7DQoJCQkkc2VsZWN0ZWQgPSAnIHNlbGVjdGVkPSJzZWxlY3RlZCInOw0K CQl9DQoNCgkJJG91dFtdID0gdC4nPG9wdGlvbicuJHNlbGVjdGVkLic+Jy5odG1sc3BlY2lh bGNoYXJzKCRsZWFmKS4nPC9vcHRpb24+Jy5uOw0KCX0NCgkkb3V0W10gPSAnPC9zZWxlY3Q+ JzsNCglyZXR1cm4gam9pbignJywkb3V0KTsNCn0NCg0KLy8gUGFzc3dvcmQgc3RyZW5ndGgg bWV0ZXINCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19jaHJvbm9zdHJlbmd0aCgkZXZ0LCAk c3RwKSB7DQoJZ2xvYmFsICRldmVudCwgJHNtZF9wcm9nbm9zdGljc19zdHlsZTsNCg0KCWlm ICgkZXZlbnQgIT0gJ2FkbWluJykgew0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJZWNobyA8 PDxFT1MNCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+eyRzbWRfcHJvZ25vc3RpY3Nfc3R5bGVb J21ldGVyJ119PC9zdHlsZT4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCi8v PCFbQ0RBVEFbDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqDQoqKg0KKiogICBGcmFua2Vuc3RlaW5lZCBmcm9tIGFu IG9yaWdpbmFsIChHUEwpIHNjcmlwdA0KKiogICBieSBTbWFsbCBIYWRyb24gQ29sbGlkZXIg LS0gVGhhbmtzIQ0KKiogICBodHRwOi8vd3d3LnNtYWxsaGFkcm9uY29sbGlkZXIuY29tDQoq Kg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLw0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX2dUeHQod2hhdCkgew0K CXZhciBsYW5nID0gbmV3IEFycmF5KCk7DQoJbGFuZ1snYWJvdXQnXSA9ICdhYm91dCAnOw0K CWxhbmdbJ2RpZ2l0c2VwJ10gPSAnLCc7DQoJbGFuZ1sncGx1cmFsJ10gPSAncyc7DQoJbGFu Z1sncHdfY29tbW9uJ10gPSAnb25lIG9mIHRoZSA1MDAgbW9zdCBjb21tb24gcGFzc3dvcmRz JzsNCglsYW5nWydwd19wb3N0YW1ibGUnXSA9ICdJdCB3b3VsZCBiZSBjcmFja2VkIGFsbW9z dCBpbnN0YW50bHknOw0KCWxhbmdbJ3B3X3ByZWFtYmxlJ10gPSAnWW91ciBwYXNzd29yZCBp cyc7DQoJbGFuZ1sncHdfdGFrZSddID0gJ0l0IHdvdWxkIHRha2UnOw0KCWxhbmdbJ3B3X2Ny YWNrJ10gPSAnZm9yIGEgZGVza3RvcCBQQyB0byBjcmFjayB5b3VyIHBhc3MgYnkgYnJ1dGUg Zm9yY2U8YnIgLz4odW5sZXNzIHlvdSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20v YmxvZy9jaG9vc2luZy1hLWJyaWxsaWFudC1wYXNzd29yZC8iPmJyb2tlIHRoZSBydWxlczwv YT4sIGluIHdoaWNoIGNhc2UgaXRcJ2QgYmUgY3JhY2tlZCBhbG1vc3QgaW5zdGFudGx5KSc7 DQoJbGFuZ1snc2VjcyddID0gJyBzZWNvbmRzJzsNCglsYW5nWyd0X3NlYyddID0gJ3NlY29u ZCc7DQoJbGFuZ1sndF9taW4nXSA9ICdtaW51dGUnOw0KCWxhbmdbJ3RfaHInXSA9ICdob3Vy JzsNCglsYW5nWyd0X2RheSddID0gJ2RheSc7DQoJbGFuZ1sndF95ciddID0gJ3llYXInOw0K CWxhbmdbJ3RfdGhvX3knXSA9ICd0aG91c2FuZCB5ZWFycyc7DQoJbGFuZ1sndF9taWxfeSdd ID0gJ21pbGxpb24geWVhcnMnOw0KCWxhbmdbJ3RfYmlsX3knXSA9ICdiaWxsaW9uIHllYXJz JzsNCglsYW5nWyd0X3RyaV95J10gPSAndHJsbGlvbiB5ZWFycyc7DQoJbGFuZ1sndF9xdWFf eSddID0gJ3F1YWRyaWxsaW9uIHllYXJzJzsNCglsYW5nWyd0X3F1aV95J10gPSAncXVpbnRp bGxpb24geWVhcnMnOw0KCWxhbmdbJ3Rfc2V4X3knXSA9ICdzZXh0aWxsaW9uIHllYXJzJzsN CglsYW5nWyd0X3NlcF95J10gPSAnc2VwdGlsbGlvbiB5ZWFycyc7DQoJbGFuZ1sndF9vY3Rf eSddID0gJ29jdGlsbGlvbiB5ZWFycyc7DQoJbGFuZ1sndF9ub25feSddID0gJ25vbmlsbGlv biB5ZWFycyc7DQoJcmV0dXJuIGxhbmdbd2hhdF07DQp9DQoNCmZ1bmN0aW9uIHNtZF9wcm9n X2Nocm9ub1N0cmVuZ3RoKHB3KSB7DQoJdmFyIHNpemUgPSBwdy5sZW5ndGg7DQoJdmFyIHNt ZF9wcm9nX2NvbW1vbl9wdyA9IG5ldyBBcnJheSgpOw0KCXZhciBwcmVjaXNpb24gPSA3Ow0K CXNtZF9wcm9nX2NvbW1vbl9wd1szXSA9IFsnZ29kJywnc2V4J107DQoJc21kX3Byb2dfY29t bW9uX3B3WzRdID0gWycxMjM0JywnY29vbCcsJzEzMTMnLCdzdGFyJywnZ29sZicsJ2JlYXIn LCdkYXZlJywncGFzcycsJ2FhYWEnLCc2OTY5JywnamFrZScsJ21hdHQnLCcxMjEyJywnZmlz aCcsJ2Z1Y2snLCdwb3JuJywnNDMyMScsJzIwMDAnLCc0MTI4JywndGVzdCcsJ3NoaXQnLCds b3ZlJywnYmFieScsJ2N1bnQnLCdtYXJrJywnMzMzMycsJ2pvaG4nLCdzZXh5JywnNTE1MCcs JzQ0NDQnLCcyMTEyJywnZnJlZCcsJ21pa2UnLCcxMTExJywndGl0cycsJ3BhdWwnLCdtaW5l Jywna2luZycsJ2ZpcmUnLCc1NTU1Jywnc2x1dCcsJ2dpcmwnLCcyMjIyJywnYXNkZicsJ3Rp bWUnLCc3Nzc3Jywncm9jaycsJ3h4eHgnLCdmb3JkJywnZGljaycsJ2JpbGwnLCd3b2xmJywn Ymx1ZScsJ2FsZXgnLCdjb2NrJywnYmVlcicsJ2VyaWMnLCc2NjY2JywnamFjayddOw0KCXNt ZF9wcm9nX2NvbW1vbl9wd1s1XSA9IFsnYmVhY2gnLCdncmVhdCcsJ2JsYWNrJywncHVzc3kn LCcxMjM0NScsJ2ZyYW5rJywndGlnZXInLCdqYXBhbicsJ21vbmV5JywnbmFrZWQnLCcxMTEx MScsJ2FuZ2VsJywnc3RhcnMnLCdhcHBsZScsJ3Bvcm5vJywnc3RldmUnLCd2aXBlcicsJ2hv cm55Jywnb3U4MTInLCdrZXZpbicsJ2J1ZGR5JywndGVlbnMnLCd5b3VuZycsJ2phc29uJywn bHVja3knLCdnaXJscycsJ2xvdmVyJywnYnJpYW4nLCdraXR0eScsJ2J1YmJhJywnaGFwcHkn LCdjcmVhbScsJ2phbWVzJywneHh4eHgnLCdib290eScsJ2tlbGx5JywnYm9vYnMnLCdwZW5p cycsJ2VhZ2xlJywnd2hpdGUnLCdlbnRlcicsJ2NoZXZ5Jywnc21pdGgnLCdjaHJpcycsJ2dy ZWVuJywnc2FtbXknLCdzdXBlcicsJ21hZ2ljJywncG93ZXInLCdlbmpveScsJ3Njb3R0Jywn ZGF2aWQnLCd2aWRlbycsJ3F3ZXJ0JywncGFyaXMnLCd3b21lbicsJ2p1aWNlJywnZGlydHkn LCdtdXNpYycsJ3BldGVyJywnYml0Y2gnLCdob3VzZScsJ2hlbGxvJywnYmlsbHknLCdtb3Zp ZSddOw0KCXNtZF9wcm9nX2NvbW1vbl9wd1s2XSA9IFsnMTIzNDU2JywncHJpbmNlJywnZ3Vp dGFyJywnYnV0dGVyJywnamFndWFyJywndW5pdGVkJywndHVydGxlJywnbXVmZmluJywnY29v cGVyJywnbmFzY2FyJywncmVkc294JywnZHJhZ29uJywnenhjdmJuJywncXdlcnR5JywndG9t Y2F0JywnNjk2OTY5JywnNjU0MzIxJywnbXVycGh5JywnOTg3NjU0JywnYW1hbmRhJywnYnJh emlsJywnd2l6YXJkJywnaGFubmFoJywnbGF1cmVuJywnbWFzdGVyJywnZG9jdG9yJywnZWFn bGUxJywnZ2F0b3JzJywnc3F1aXJ0Jywnc2hhZG93JywnbWlja2V5JywnbW90aGVyJywnbW9u a2V5JywnYmFpbGV5JywnanVuaW9yJywnbmF0aGFuJywnYWJjMTIzJywna25pZ2h0JywnYWxl eGlzJywnaWNlbWFuJywnZnVja21lJywndGlnZXJzJywnYmFkYm95JywnYm9ubmllJywncHVy cGxlJywnZGViYmllJywnYW5nZWxhJywnam9yZGFuJywnYW5kcmVhJywnc3BpZGVyJywnaGFy bGV5JywncmFuZ2VyJywnZGFrb3RhJywnYm9vZ2VyJywnaXdhbnR1JywnYWFhYWFhJywnbG92 ZXJzJywncGxheWVyJywnZmx5ZXJzJywnc3Vja2l0JywnaHVudGVyJywnYmVhdmVyJywnbW9y Z2FuJywnbWF0cml4JywnYm9vbWVyJywncnVubmVyJywnYmF0bWFuJywnc2Nvb2J5JywnZWR3 YXJkJywndGhvbWFzJywnd2FsdGVyJywnaGVscG1lJywnZ29yZG9uJywndGlnZ2VyJywnamFj a2llJywnY2FzcGVyJywncm9iZXJ0JywnYm9vYm9vJywnYm9zdG9uJywnbW9uaWNhJywnc3R1 cGlkJywnYWNjZXNzJywnY29mZmVlJywnYnJhdmVzJywneHh4eHh4JywneWFua2VlJywnc2F0 dXJuJywnYnVzdGVyJywnZ2VtaW5pJywnYmFybmV5JywnYXBwbGVzJywnc29jY2VyJywncmFi Yml0JywndmljdG9yJywnYXVndXN0JywnaG9ja2V5JywncGVhbnV0JywndHVja2VyJywna2ls bGVyJywnY2FuYWRhJywnZ2VvcmdlJywnam9obm55Jywnc2llcnJhJywnYmxhemVyJywnYW5k cmV3Jywnc3Bhbmt5JywnZG9nZ2llJywnMjMyMzIzJywnd2ludGVyJywnenp6enp6JywnYnJh bmR5JywnZ3VubmVyJywnYmVhdmlzJywnY29tcGFxJywnaG9ybmV5JywnMTEyMjMzJywnY2Fy bG9zJywnYXJ0aHVyJywnZGFsbGFzJywndGVubmlzJywnc29waGllJywnbGFkaWVzJywnY2Fs dmluJywnc2hhdmVkJywncGVwcGVyJywnZ2lhbnRzJywnc3VyZmVyJywnZmVuZGVyJywnc2Ft c29uJywnYXVzdGluJywnbWVtYmVyJywnYmxvbmRlJywnYmxvd21lJywnZnVja2VkJywnZGFu aWVsJywnZG9uYWxkJywnZ29sZGVuJywnZ29sZmVyJywnY29va2llJywnc3VtbWVyJywnYnJv bmNvJywncmFjaW5nJywnc2FuZHJhJywnaGFtbWVyJywncG9va2llJywnam9zZXBoJywnaGVu dGFpJywnam9zaHVhJywnZGlhYmxvJywnYmlyZGllJywnbWFnZ2llJywnc2V4c2V4JywnbGl0 dGxlJywnYml0ZW1lJywnNjY2NjY2JywndG9wZ3VuJywnYXNobGV5Jywnd2lsbGllJywnc3Rp Y2t5JywnY293Ym95JywnYW5pbWFsJywnc2lsdmVyJywneWFtYWhhJywncWF6d3N4JywnZnVj a2VyJywnanVzdGluJywnc2tpcHB5Jywnb3JhbmdlJywnYmFuYW5hJywnbGFrZXJzJywnbWFy dmluJywnbWVybGluJywnZHJpdmVyJywncmFjaGVsJywnbWFyaW5lJywnc2xheWVyJywnYW5n ZWxzJywnYXNkZmdoJywnYmlnZG9nJywndmFnaW5hJywnYXBvbGxvJywnY2hlZXNlJywndG95 b3RhJywncGFya2VyJywnbWFkZG9nJywndHJhdmlzJywnMTIxMjEyJywnbG9uZG9uJywnaG90 ZG9nJywnd2lsc29uJywnc3lkbmV5JywnbWFydGluJywnZGVubmlzJywndm9vZG9vJywnZ2lu Z2VyJywnbWFnbnVtJywnYWN0aW9uJywnbmljb2xlJywnY2FydGVyJywnZXJvdGljJywnc3Bh cmt5JywnamFzcGVyJywnNzc3Nzc3JywneWVsbG93Jywnc21va2V5JywnZHJlYW1zJywnY2Ft YXJvJywneGF2aWVyJywndGVyZXNhJywnZnJlZGR5Jywnc2VjcmV0Jywnc3RldmVuJywnamVy ZW15JywndmlraW5nJywnZmFsY29uJywnc25vb3B5JywncnVzc2lhJywndGF5bG9yJywnbmlw cGxlJywnMTExMTExJywnZWFnbGVzJywnMTMxMzEzJywnd2lubmVyJywndGVzdGVyJywnMTIz MTIzJywnbWlsbGVyJywncm9ja2V0JywnbGVnZW5kJywnZmxvd2VyJywndGhlbWFuJywncGxl YXNlJywnb2xpdmVyJywnYWxiZXJ0J107DQoJc21kX3Byb2dfY29tbW9uX3B3WzddID0gWydw b3JzY2hlJywncm9zZWJ1ZCcsJ2NoZWxzZWEnLCdhbWF0ZXVyJywnNzc3Nzc3NycsJ2RpYW1v bmQnLCd0aWZmYW55JywnamFja3NvbicsJ3Njb3JwaW8nLCdjYW1lcm9uJywndGVzdGluZycs J3NoYW5ub24nLCdtYWRpc29uJywnbXVzdGFuZycsJ2JvbmQwMDcnLCdsZXRtZWluJywnbWlj aGFlbCcsJ2dhdGV3YXknLCdwaG9lbml4JywndGh4MTEzOCcsJ3JhaWRlcnMnLCdmb3JldmVy JywncGVhY2hlcycsJ2phc21pbmUnLCdtZWxpc3NhJywnZ3JlZ29yeScsJ2Nvd2JveXMnLCdk b2xwaGluJywnY2hhcmxlcycsJ2N1bXNob3QnLCdjb2xsZWdlJywnYnVsbGRvZycsJzEyMzQ1 NjcnLCduY2MxNzAxJywnZ2FuZGFsZicsJ2xlYXRoZXInLCdjdW1taW5nJywnaHVudGluZycs J2NoYXJsaWUnLCdyYWluYm93JywnYXNzaG9sZScsJ2JpZ2NvY2snLCdmdWNreW91JywnamVz c2ljYScsJ3BhbnRpZXMnLCdqb2huc29uJywnbmF1Z2h0eScsJ2JyYW5kb24nLCdhbnRob255 Jywnd2lsbGlhbScsJ2ZlcnJhcmknLCdjaGlja2VuJywnaGVhdGhlcicsJ2NoaWNhZ28nLCd2 b3lhZ2VyJywneWFua2VlcycsJ3JhbmdlcnMnLCdwYWNrZXJzJywnbmV3eW9yaycsJ3Ryb3Vi bGUnLCdiaWd0aXRzJywnd2luc3RvbicsJ3RodW5kZXInLCd3ZWxjb21lJywnYml0Y2hlcycs J3dhcnJpb3InLCdwYW50aGVyJywnYnJvbmNvcycsJ3JpY2hhcmQnLCc4Njc1MzA5JywncHJp dmF0ZScsJ3p4Y3Zibm0nLCduaXBwbGVzJywnYmxvbmRlcycsJ2Zpc2hpbmcnLCdtYXR0aGV3 JywnaG9vdGVycycsJ3BhdHJpY2snLCdmcmVlZG9tJywnZnVja2luZycsJ2V4dHJlbWUnLCdi bG93am9iJywnY2FwdGFpbicsJ2JpZ2RpY2snLCdhYmdydHl1JywnY2hlc3RlcicsJ21vbnN0 ZXInLCdtYXh3ZWxsJywnYXJzZW5hbCcsJ2NyeXN0YWwnLCdyZWJlY2NhJywncHVzc2llcycs J2Zsb3JpZGEnLCdwaGFudG9tJywnc2Nvb3RlcicsJ3N1Y2Nlc3MnXTsNCglzbWRfcHJvZ19j b21tb25fcHdbOF0gPSBbJ2ZpcmViaXJkJywncGFzc3dvcmQnLCcxMjM0NTY3OCcsJ3N0ZWVs ZXJzJywnbW91bnRhaW4nLCdjb21wdXRlcicsJ2Jhc2ViYWxsJywneHh4eHh4eHgnLCdmb290 YmFsbCcsJ3F3ZXJ0eXVpJywnamVubmlmZXInLCdkYW5pZWxsZScsJ3N1bnNoaW5lJywnc3Rh cndhcnMnLCd3aGF0ZXZlcicsJ25pY2hvbGFzJywnc3dpbW1pbmcnLCd0cnVzdG5vMScsJ21p ZG5pZ2h0JywncHJpbmNlc3MnLCdzdGFydHJlaycsJ21lcmNlZGVzJywnc3VwZXJtYW4nLCdi aWdkYWRkeScsJ21hdmVyaWNrJywnZWluc3RlaW4nLCdkb2xwaGlucycsJ2hhcmRjb3JlJywn cmVkd2luZ3MnLCdjb2NhY29sYScsJ21pY2hlbGxlJywndmljdG9yaWEnLCdjb3J2ZXR0ZScs J2J1dHRoZWFkJywnbWFybGJvcm8nLCdzcmluaXZhcycsJ2ludGVybmV0JywncmVkc2tpbnMn LCcxMTExMTExMScsJ2FjY2VzczE0JywncnVzaDIxMTInLCdzY29ycGlvbicsJ2lsb3ZleW91 Jywnc2FtYW50aGEnLCdtaXN0cmVzcyddOw0KDQoJLy8gQ2hlY2sgcHcgYWdhaW5zdCBjb21t b24gcGFzc3dvcmRzIG9mIHRoYXQgbGVuZ3RoIHRvIHNlZSBpZiBpdCdzIGluIHRvcCA1MDAN CglpZiAoc2l6ZSA+IDIgJiYgc2l6ZSA8IDkpIHsNCgkJdmFyIHdpZHRoID0gc21kX3Byb2df Y29tbW9uX3B3W3NpemVdLmxlbmd0aDsNCgkJZm9yICh2YXIgaWR4PTA7IGlkeCA8IHdpZHRo OyBpZHgrKykgew0KCQkJaWYgKHB3LnRvTG93ZXJDYXNlKCkgPT0gc21kX3Byb2dfY29tbW9u X3B3W3NpemVdW2lkeF0pIHsNCgkJCQlyZXR1cm4gLTE7DQoJCQl9DQoJCX0NCgl9DQoNCgkv LyBDYWxjdWxhdGlvbnMgcGVyIHNlY29uZC4gVGVuIG1pbGxpb24gaXMgcm91Z2hseSB0aGUg bnVtYmVyIGEgZGVjZW50IFBDIGNvdWxkIG1hbmFnZSB1bmluaGliaXRlZCBpbiAyMDEwLg0K CS8vIEF1dG9tYXRpY2FsbHkgZG91YmxlZCBldmVyeSAxOCBtb250aHMgYWNjb3JkaW5nIHRv IE1vb3JlJ3MgbGF3LCBhbW9ydGlzZWQgYnkgbW9udGgNCgl2YXIgY2FsY3NQZXJTZWMgPSAx MDAwMDAwMDsNCgl2YXIgZHQgPSBuZXcgRGF0ZSgpOw0KCXZhciBiYXNlWWVhciA9ICcyMDEw JzsNCgl2YXIgdGhpc1llYXIgPSBkdC5nZXRGdWxsWWVhcigpOw0KCXZhciB0aGlzTW9udGgg PSBkdC5nZXRNb250aCgpOyAvLyAwLTExDQoJdmFyIG1vbnRoc1NpbmNlQmFzZSA9ICgodGhp c1llYXIgLSBiYXNlWWVhcikgKiAxMikgKyB0aGlzTW9udGg7DQoJdmFyIG1vb3JlUGVyaW9k cyA9IE1hdGguZmxvb3IobW9udGhzU2luY2VCYXNlIC8gMTgpICsgMTsNCgljYWxjc1BlclNl YyAqPSBtb29yZVBlcmlvZHM7DQoJdmFyIGluY3JlbWVudFBlck1vbnRoID0gY2FsY3NQZXJT ZWMgLyAxODsgLy8gSG93IG1hbnkgY2FsY3MgaXQgZ29lcyB1cCBieSBpbiB0aGlzIE1vb3Jl IHBlcmlvZCwgcGVyIG1vbnRoDQoJY2FsY3NQZXJTZWMgKz0gKGluY3JlbWVudFBlck1vbnRo ICogKG1vbnRoc1NpbmNlQmFzZSUxOCkpOw0KDQoJLy8gS2VlcCB0cmFjayBvZiBob3cgbWFu eSBjaGFyYWN0ZXIgc2V0cyBhcmUgdXNlZA0KCXZhciBwb3NzQ2hhcnMgPSAwOw0KCS8vIExv d2VyY2FzZQ0KCWlmIChwdy5tYXRjaCgvW2Etel0vKSkgeyBwb3NzQ2hhcnMgKz0gMjY7IH0N CgkvLyBVcHBlcmNhc2UNCglpZiAocHcubWF0Y2goL1tBLVpdLykpIHsgcG9zc0NoYXJzICs9 IDI2OyB9DQoJLy8gTnVtYmVycw0KCWlmIChwdy5tYXRjaCgvXGQrLykpIHsgcG9zc0NoYXJz ICs9IDEwOyB9DQoJLy8gU3ltYm9scw0KCWlmIChwdy5tYXRjaCgvWyEsQCwjLMKjLCQs4oKs LMKlLCUsXiwmLCosKyw9LD8sXyx+LFwtLCgsKSw8LD4sXCwsXC4sXFssXF0sXHssXH0sXHws XDosXDssXCcsXCIsXGAsXC8sXFxcLFzCrF0vKSApIHtwb3NzQ2hhcnMgKz0gMzZ9Ow0KDQoJ Ly8gV29yayBvdXQgdGhlIG51bWJlciBvZiBwb3NzaWJsZSBjb21iaW5hdGlvbnM6IHBvc3Np YmxlIGNoYXJhY3RlcnMgdG8gdGhlIHBvd2VyIG9mIHRoZSBwYXNzd29yZCBsZW5ndGgNCgl2 YXIgcG9zc0NvbWJvcyA9IE1hdGgucG93KHBvc3NDaGFycywgc2l6ZSk7DQoNCgkvLyBEaXZp ZGUgdGhlIG51bWJlciBvZiBwb3NzaWJsZSBjb21iaW5hdGlvbnMgYnkgdGhlIGNhbGN1bGF0 aW9ucyBhIFBDIGNhbiBkbyBwZXIgc2Vjb25kDQoJdmFyIGNyYWNrVGltZUluU2VjcyA9IHBv c3NDb21ib3MgLyBjYWxjc1BlclNlYzsNCg0KCS8vIFNldCB1cCBhbiBhcnJheSBvZiBwZXJp b2RzIHdpdGggdGhlaXIgbGVuZ3RocyBpbiBzZWNvbmRzDQoJdmFyIHNtZF9wZXJpb2RzID0g bmV3IEFycmF5KCk7DQoJc21kX3BlcmlvZHNbJ3RfbWluJ10gPSA2MDsNCglzbWRfcGVyaW9k c1sndF9ociddID0gc21kX3BlcmlvZHNbJ3RfbWluJ10gKiA2MDsNCglzbWRfcGVyaW9kc1sn dF9kYXknXSA9IHNtZF9wZXJpb2RzWyd0X2hyJ10gKiAyNDsNCglzbWRfcGVyaW9kc1sndF95 ciddID0gc21kX3BlcmlvZHNbJ3RfZGF5J10gKiAzNjUuMjU7DQoJc21kX3BlcmlvZHNbJ3Rf dGhvX3knXSA9IHNtZF9wZXJpb2RzWyd0X3lyJ10gKiAxMDAwOw0KCXNtZF9wZXJpb2RzWyd0 X21pbF95J10gPSBzbWRfcGVyaW9kc1sndF90aG9feSddICogMTAwMDsNCglzbWRfcGVyaW9k c1sndF9iaWxfeSddID0gc21kX3BlcmlvZHNbJ3RfbWlsX3knXSAqIDEwMDA7DQoJc21kX3Bl cmlvZHNbJ3RfdHJpX3knXSA9IHNtZF9wZXJpb2RzWyd0X2JpbF95J10gKiAxMDAwOw0KCXNt ZF9wZXJpb2RzWyd0X3F1YV95J10gPSBzbWRfcGVyaW9kc1sndF90cmlfeSddICogMTAwMDsN CglzbWRfcGVyaW9kc1sndF9xdWlfeSddID0gc21kX3BlcmlvZHNbJ3RfcXVhX3knXSAqIDEw MDA7DQoJc21kX3BlcmlvZHNbJ3Rfc2V4X3knXSA9IHNtZF9wZXJpb2RzWyd0X3F1aV95J10g KiAxMDAwOw0KCXNtZF9wZXJpb2RzWyd0X3NlcF95J10gPSBzbWRfcGVyaW9kc1sndF9zZXhf eSddICogMTAwMDsNCglzbWRfcGVyaW9kc1sndF9vY3RfeSddID0gc21kX3BlcmlvZHNbJ3Rf c2VwX3knXSAqIDEwMDA7DQoJc21kX3BlcmlvZHNbJ3Rfbm9uX3knXSA9IHNtZF9wZXJpb2Rz Wyd0X29jdF95J10gKiAxMDAwOw0KDQoJLy8gUGVyaW9kIHR5cGUgaXMgJ3NlY29uZHMnIGJ5 IGRlZmF1bHQNCgl2YXIgcGVyaW9kVHlwZSA9ICd0X3NlYyc7DQoJdmFyIHN0cmVuZ3RoID0g Jyc7DQoNCgkvLyBJZiBpdCB3aWxsIHRha2UgbGVzcyB0aGFuIGEgc2Vjb25kIHRvIGNyYWNr IHRoZSBwYXNzd29yZCwgc2hvdyBleGFjdGx5IGhvdyBsb25nDQoJaWYgKGNyYWNrVGltZUlu U2VjcyA8IDEpIHsNCgkJc3RyZW5ndGggPSBjcmFja1RpbWVJblNlY3MudG9GaXhlZChwcmVj aXNpb24pICsgc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NlY3MnKTsNCgl9IGVsc2Ugew0KCQkv LyBPdGhlcndpc2Ugc2hvdyBhIHJvdW5kZWQtZG93biBudW1iZXINCgkJLy8gQWRkcyB0aGUg cGx1cmFsIG9udG8gYW55dGhpbmcgYmVmb3JlIGEgdGhvdXNhbmQgeWVhcnMNCgkJdmFyIGlu dG9UaG91c2FuZHMgPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgncGx1cmFsJyk7DQoNCgkJLy8g QWRkcyB0aGUgJ0Fib3V0JyB0byBhbnl0aGluZyBhZnRlciBzZWNvbmRzDQoJCXZhciBpbnRv TWludXRlcyA9ICcnOw0KDQoJCS8vIFJvdW5kIGRvd24gdGhlIHRpbWUNCgkJdmFyIG5ld1Rp bWUgPSBNYXRoLmZsb29yKGNyYWNrVGltZUluU2Vjcyk7DQoNCgkJLy8gR28gdGhyb3VnaCBk aWZmZXJlbnQgcGVyaW9kIGxlbmd0aHMNCgkJZm9yICh2YXIgamR4IGluIHNtZF9wZXJpb2Rz KSB7DQoJCQkvLyBTdG9wIHdoZW4gdGhlIHJpZ2h0IHBlcmlvZCBpcyByZWFjaGVkDQoJCQlp ZiAoY3JhY2tUaW1lSW5TZWNzIDwgc21kX3BlcmlvZHNbamR4XSkgeyBicmVhazsgfQ0KCQkJ ZWxzZSB7DQoJCQkJaWYgKGpkeCA9PSAidF90aG9feSIpIHsgaW50b1Rob3VzYW5kcyA9ICcn OyB9DQoJCQkJaWYgKGpkeCA9PSAidF9taW4iKSB7IGludG9NaW51dGVzID0gc21kX3Byb2du b3N0aWNzX2dUeHQoJ2Fib3V0Jyk7IH0NCgkJCQluZXdUaW1lID0gTWF0aC5mbG9vcihjcmFj a1RpbWVJblNlY3MgLyBzbWRfcGVyaW9kc1tqZHhdKTsNCgkJCQlwZXJpb2RUeXBlID0gamR4 Ow0KCQkJfQ0KCQl9DQoNCgkJLy8gSWYgc2luZ3VsYXINCgkJaWYgKG5ld1RpbWUgPT0gMSkg ew0KCQkJc3RyZW5ndGggPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnYWJvdXQnKSArICcxICcg KyBzbWRfcHJvZ25vc3RpY3NfZ1R4dChwZXJpb2RUeXBlKTsNCgkJfSBlbHNlIHsNCgkJCS8v IENvbnZlcnQgbmV3VGltZSB0byBzdHJpbmcNCgkJCW5ld1RpbWUgKz0gJyc7DQoNCgkJCS8v IFNwbGl0IHdpdGggY29tbWFzIGV2ZXJ5IHRocmVlIGRpZ2l0cw0KCQkJdmFyIHJlZ2V4ID0g LyhcZCspKFxkezN9KS87DQoNCgkJCXdoaWxlIChyZWdleC50ZXN0KG5ld1RpbWUpKSB7DQoJ CQkJbmV3VGltZSA9IG5ld1RpbWUucmVwbGFjZShyZWdleCwgJyQxJyArIHNtZF9wcm9nbm9z dGljc19nVHh0KCdkaWdpdHNlcCcpICsgJyQyJyk7DQoJCQl9DQoNCgkJCS8vIENvbWJpbmUg d2l0aCAnYWJvdXQnIGlmIG5lZWRlZCwgdGhlIHRpbWUgaXQgd2lsbCB0YWtlLCB0aGUgcGVy aW9kIHR5cGUsIGFuZCB0aGUgJ3MnIGlmIG5lZWRlZA0KCQkJc3RyZW5ndGggPSBpbnRvTWlu dXRlcyArIG5ld1RpbWUgKyAiICIgKyBzbWRfcHJvZ25vc3RpY3NfZ1R4dChwZXJpb2RUeXBl KSArIGludG9UaG91c2FuZHM7DQoJCX0NCgl9DQoNCglyZXR1cm4gc3RyZW5ndGg7DQp9DQoN CmZ1bmN0aW9uIHBhc3N3b3JkQ2hlY2sodGhhdCwgZSkgew0KCWlmIChlLmtleUNvZGUgPT0g MjcgfHwgZS5jaGFyQ29kZSA9PSAyNykgew0KCQlqUXVlcnkodGhhdCkudmFsKCIiKTsNCgl9 DQoNCgl2YXIgcGFzc3dvcmQgPSBqUXVlcnkodGhhdCkudmFsKCk7DQoNCglpZiAocGFzc3dv cmQgIT0gIiIpIHsNCgkJdmFyIHN0cmVuZ3RoID0gc21kX3Byb2dfY2hyb25vU3RyZW5ndGgo cGFzc3dvcmQpOw0KDQoJCS8vVE9ETzogZ1R4dCgpDQoJCWlmIChzdHJlbmd0aCA9PSAtMSkg ew0KCQkJalF1ZXJ5KCIjc21kX3Byb2dfbWV0ZXIiKS5odG1sKHNtZF9wcm9nbm9zdGljc19n VHh0KCdwd19wcmVhbWJsZScpICsgJyA8ZGl2IGNsYXNzPSJzbWRfcHJvZ19wYXNzX3N0cmVu Z3RoIj4nICsgc21kX3Byb2dub3N0aWNzX2dUeHQoJ3B3X2NvbW1vbicpICsgJzwvZGl2PiAn KyBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHdfcG9zdGFtYmxlJykpLmZhZGVJbig1MDApOw0K CQl9IGVsc2Ugew0KCQkJalF1ZXJ5KCIjc21kX3Byb2dfbWV0ZXIiKS5odG1sKHNtZF9wcm9n bm9zdGljc19nVHh0KCdwd190YWtlJykgKyAnIDxkaXYgY2xhc3M9InNtZF9wcm9nX3Bhc3Nf c3RyZW5ndGgiPicgKyBzdHJlbmd0aCArICc8L2Rpdj4gJyArIHNtZF9wcm9nbm9zdGljc19n VHh0KCdwd19jcmFjaycpKS5mYWRlSW4oNTAwKTsNCgkJfQ0KCX0gZWxzZSB7DQoJCWpRdWVy eSgiI3NtZF9wcm9nX21ldGVyIikuaGlkZSgpOw0KCX0NCn0NCmpRdWVyeShmdW5jdGlvbigp IHsNCgl2YXIgc21kX3Byb2dfbWV0ZXIgPSAnPGRpdiBpZD0ic21kX3Byb2dfbWV0ZXIiPjwv ZGl2Pic7DQoJalF1ZXJ5KCIjY2hhbmdlX3Bhc3N3b3JkIikuYXBwZW5kKHNtZF9wcm9nX21l dGVyKTsNCglqUXVlcnkoIiNzbWRfcHJvZ19tZXRlciIpLmhpZGUoKTsNCglqUXVlcnkoIiNu ZXdfcGFzcyIpLmtleWRvd24oZnVuY3Rpb24oZSkgew0KCQlpZiAoZS5rZXlDb2RlID09IDEz IHx8IGUuY2hhckNvZGUgPT0gMTMpIHsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCX0pOw0K CWpRdWVyeSgiI25ld19wYXNzIikua2V5dXAoZnVuY3Rpb24oZSl7DQoJCXBhc3N3b3JkQ2hl Y2sodGhpcywgZSk7DQoJfSk7DQp9KTsNCi8vXV0+DQo8L3NjcmlwdD4NCkVPUzsNCn0NCg0K Ly8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqDQovLyBXZWIgcGFnZQkJIDogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9w L3BocHJvdGVjdG9yDQovLyBBdXRvcgkJCQk6IEh1Z28gU291c2EgCQlhZGFtYXN0b3I2NjZA Z21haWwuY29tDQovLyBEYXRlCQkJCSA6IDIwMTAtMDMtMjUNCi8vIFZlcnNpb24JCQk6IDAu My4xLjENCi8vDQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKg0KY2xhc3Mgc21kX3Byb2dfUGhQcm90ZWN0b3Igew0K CXZhciAkU0hPV19FUlJPUlM7DQoNCglwdWJsaWMgZnVuY3Rpb24gc21kX3Byb2dfUGhQcm90 ZWN0b3IoJHNob3dfZXJyb3JzKSB7DQoJCSR0aGlzLT5TSE9XX0VSUk9SUz0kc2hvd19lcnJv cnM7DQoJCWlmICgkdGhpcy0+U0hPV19FUlJPUlMpIHsNCgkJCWVycm9yX3JlcG9ydGluZyhF X0VSUk9SIHwgRV9XQVJOSU5HIHwgRV9QQVJTRSk7CSAvL1Nob3cgZXJyb3JzDQoJCQlpbmlf c2V0KCdkaXNwbGF5X2Vycm9ycycsICIxIik7CS8vZGlzcGxheSBlcnJvcnMNCgkJfSBlbHNl IHsNCgkJCWluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgIjAiKTsgLy9kaXNwbGF5IGVycm9y cw0KCQkJaW5pX3NldCgnbG9nX2Vycm9ycycsICIxIik7CS8vbG9nX2Vycm9ycw0KCQl9DQoJ fQ0KDQoJLyoNCgkqIE1haW4gZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGluIGEgaW5kZXggcGFn ZSB0aGF0IHJlZGlyZWN0cyB0byBvdGhlciBwYWdlcw0KCSoNCgkqLw0KCXB1YmxpYyBmdW5j dGlvbiBpc01hbGljaW91cygpIHsNCgkJJHNxbGkgPSBmYWxzZTsNCg0KCQkkbnVtX2JhZF93 b3JkczEgPSAkdGhpcy0+Q2hlY2tHZXQoKTsNCgkJJG51bV9iYWRfd29yZHMyID0gJHRoaXMt PkNoZWNrUG9zdCgpOw0KDQoJCWlmICgkbnVtX2JhZF93b3JkczEgPiAwKSB7DQoJCQkkc3Fs aSA9IHRydWU7DQoJCX0NCg0KCQlpZiAoJG51bV9iYWRfd29yZHMyID4gMCkgew0KCQkJJHNx bGkgPSB0cnVlOw0KCQl9DQoNCgkJcmV0dXJuICRzcWxpOw0KCX0NCg0KCS8vY2hlY2sgZm9y IHNxbCBpbmplY3Rpb24gYW5kIFhTUyBpbiBQb3N0IHZhcmlhYmxlcw0KCXByaXZhdGUgZnVu Y3Rpb24gQ2hlY2tQb3N0KCkgew0KCQkkbnVtX2JhZF93b3JkcyA9IDA7DQoNCgkJZm9yZWFj aCgkX1BPU1QgYXMgJGNhbXBvID0+ICRpbnB1dCkgew0KCQkJJF9QT1NUWyRjYW1wb109IGRv QXJyYXkoJF9QT1NUWyRjYW1wb10sICdodG1sZW50aXRpZXMnKTsgLy8gWFNTIFBST1RFQ1RJ T04NCgkJCSRudW1fYmFkX3dvcmRzID0gJG51bV9iYWRfd29yZHMgKyAkdGhpcy0+d29yZEV4 aXN0cygkaW5wdXQpOyAvL1NRTCBJTkpFQ1RJT04NCgkJfQ0KDQoJCXJldHVybiAkbnVtX2Jh ZF93b3JkczsNCgl9DQoNCgkvL2NoZWNrIGZvciBzcWwgaW5qZWN0aW9uIGFuZCBYU1MgaW4g R0VUIHZhcmlhYmxlcw0KCXByaXZhdGUgZnVuY3Rpb24gQ2hlY2tHZXQoKSB7DQoJCSRudW1f YmFkX3dvcmRzID0gMDsNCg0KCQlmb3JlYWNoKCRfR0VUIGFzICRjYW1wbyA9PiAkaW5wdXQp ew0KCQkJJF9HRVRbJGNhbXBvXT0gZG9BcnJheSgkX0dFVFskY2FtcG9dLCAnaHRtbGVudGl0 aWVzJyk7IC8vIFhTUyBQUk9URUNUSU9ODQoNCgkJCWlmKCR0aGlzLT5pc0lkSW5qZWN0aW9u KCRjYW1wbywkaW5wdXQpKXsgLy9TUUwgSUQgSU5KRUNUSU9ODQoJCQkJJG51bV9iYWRfd29y ZHMgPQkkbnVtX2JhZF93b3JkcyArIDAuNTsNCgkJCX0NCg0KCQkJJG51bV9iYWRfd29yZHMg PSAkbnVtX2JhZF93b3JkcyArICR0aGlzLT53b3JkRXhpc3RzKCRpbnB1dCk7IC8vU1FMIElO SkVDVElPTg0KCQl9DQoNCgkJcmV0dXJuICRudW1fYmFkX3dvcmRzOw0KCX0NCg0KCS8qKg0K CSoJcmV0dXJuIHRydWUgaWYgaW5qZWN0aW9uIHNxbCB3b3JkIGlzIGZvdW5kLg0KCSoJVGhl IGlucHV0IGlzIHRlc3RlZCBpZiBpcyBlcXVhbCB0byBhIHNxbCBpbmplY3Rpb24gcGF0dGVy bg0KCSoJXGJbXmEtel0qP2Ryb3BbXmEtel0qP1xiDQoJKgkgaHR0cDovL3d3dy5wYWdlY29s dW1uLmNvbS90b29sL3JlZ3Rlc3QuaHRtDQoJKiovLyoJCSAiLyoiLCIrIgkJCQkqLw0KCXBy aXZhdGUgZnVuY3Rpb24gd29yZEV4aXN0cygkaW5wdXQpIHsNCgkJJG51bV9iYWRfd29yZHMg PSAwOw0KDQoJCS8qDQoJCSBXT1JEIEFGVEVSDQoJCSovDQoJCSRiYWRkZWxpbTEgPSAiW15h LXpdKiI7CS8vdGhlIGRlbGltIHNob3VsZCBiZSBmcm9tICJhIiB0byAiYiIgYW55dGhpbmcg ZWxzZSBpcyBjb25zaWRlcmVkIHNxbCBpbmplY3Rpb24gOikNCgkJJGJhZGRlbGltMiA9ICJb XmEtel0rIjsNCgkJJGJhZHdvcmRzPSBhcnJheSgidW5pb24iLCAic2VsZWN0IiwgInNob3ci LCAiaW5zZXJ0IiwgInVwZGF0ZSIsICJkZWxldGUiLCAiZHJvcCIsICJ0cnVuY2F0ZSIsICJj cmVhdGUiLCAibG9hZF9maWxlIiwgImV4ZWMiLCAiIyIsICItLSIpOw0KCQkvLyIvKiINCgkJ Zm9yZWFjaCgkYmFkd29yZHMgYXMgJGJhZHdvcmQpIHsNCgkJCSRleHByZXNzaW9uID0gIi8i LiRiYWRkZWxpbTEuc3RydG9sb3dlcigkYmFkd29yZCkuJGJhZGRlbGltMi4iLyI7DQoJCQlp ZiAocHJlZ19tYXRjaCAoJGV4cHJlc3Npb24sIHN0cnRvbG93ZXIoJGlucHV0KSkpIHsNCi8v ZG1wKCcqV0EqJywkYmFkd29yZCwgJGlucHV0KTsNCgkJCQkvL2RpZSgic3FsIGluamVjdGlv biEiKTsNCgkJCQkkbnVtX2JhZF93b3JkcysrOw0KCQkJfQ0KCQl9DQoNCgkJLyoNCgkJQkVG T1JFIFdPUkQNCgkJKi8NCgkJJGJhZGRlbGltMSA9ICJbXmEtel0rIjsJLy90aGUgZGVsaW0g c2hvdWxkIGJlIGZyb20gImEiIHRvICJiIiBhbnl0aGluZyBlbHNlIGlzIGNvbnNpZGVyZWQg c3FsIGluamVjdGlvbiA6KQ0KCQkkYmFkZGVsaW0yID0gIlteYS16XSoiOw0KCQkkYmFkd29y ZHM9IGFycmF5KCJAQHZlcnNpb24iLCAiQEBkYXRhZGlyIiwgInVzZXIiLCAidmVyc2lvbiIp Ow0KDQoJCWZvcmVhY2goJGJhZHdvcmRzIGFzICRiYWR3b3JkKSB7DQoJCQkkZXhwcmVzc2lv biA9ICIvIi4kYmFkZGVsaW0xLnN0cnRvbG93ZXIoJGJhZHdvcmQpLiRiYWRkZWxpbTIuIi8i Ow0KCQkJaWYgKHByZWdfbWF0Y2ggKCRleHByZXNzaW9uLCBzdHJ0b2xvd2VyKCRpbnB1dCkp KSB7DQovL2RtcCgnKkJXKicsJGJhZHdvcmQsICRpbnB1dCk7DQoJCQkJLy9kaWUoInNxbCBp bmplY3Rpb24hIik7DQoJCQkJJG51bV9iYWRfd29yZHMrKzsNCgkJCX0NCgkJfQ0KDQoJCS8q DQoJCUJFRk9SRSBXT1JEIEFGVEVSDQoJCSovDQoJCSRiYWRkZWxpbTEgPSAiW15hLXpdKyI7 CS8vdGhlIGRlbGltIHNob3VsZCBiZSBmcm9tICJhIiB0byAiYiIgYW55dGhpbmcgZWxzZSBp cyBjb25zaWRlcmVkIHNxbCBpbmplY3Rpb24gOikNCgkJJGJhZGRlbGltMiA9ICJbXmEtel0r IjsNCgkJJGJhZHdvcmRzPSBhcnJheSgiYmVuY2htYXJrIiwgIi0tIiwgInZhcmNoYXIiLCAi Y29udmVydCIsICJjaGFyIiwgImxpbWl0IiwgImluZm9ybWF0aW9uX3NjaGVtYSIsInRhYmxl X25hbWUiLCAiZnJvbSIsICJ3aGVyZSIsICJvcmRlciIpOw0KDQoJCWZvcmVhY2goJGJhZHdv cmRzIGFzICRiYWR3b3JkKSB7DQoJCQkkZXhwcmVzc2lvbiA9ICIvIi4kYmFkZGVsaW0xLnN0 cnRvbG93ZXIoJGJhZHdvcmQpLiRiYWRkZWxpbTIuIi8iOw0KCQkJaWYgKHByZWdfbWF0Y2gg KCRleHByZXNzaW9uLCBzdHJ0b2xvd2VyKCRpbnB1dCkpKSB7DQovL2RtcCgnKkItVy1BKics JGJhZHdvcmQsICRpbnB1dCk7DQoJCQkJLy9kaWUoInNxbCBpbmplY3Rpb24hIik7DQoJCQkJ JG51bV9iYWRfd29yZHMrKzsNCgkJCX0NCgkJfQ0KLy9kbXAoJG51bV9iYWRfd29yZHMpOw0K CQlyZXR1cm4gJG51bV9iYWRfd29yZHM7DQoJfQ0KDQoJLyoqDQoJKglyZXR1cm4gdHJ1ZSBp ZiBhbiBJRCBpcyBub3QgcmVhbGx5IGFuIElEDQoJKg0KCSoqLw0KCXByaXZhdGUgZnVuY3Rp b24gaXNJREluamVjdGlvbigkY2FtcG8sJGlucHV0KSB7DQoJCSRyZWc9Ii9eaWQvIjsNCg0K CQlpZihwcmVnX21hdGNoKCRyZWcsICRjYW1wbykpIHsNCgkJCWlmKCEkdGhpcy0+c3RyaW5n SXNOdW1iZXJOb3RaZXJvKCRpbnB1dCkpIHsNCgkJCQlyZXR1cm4gdHJ1ZTsJIC8vIGlmIGlz IElEIGFuZCBOT1QgSU5URUdFUiBvciBOVUxMIC0+IFNRTCBJTkpFQ1RJT04hIQ0KCQkJfQ0K CQl9DQoNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSoJcmV0dXJuIHRydWUgaWYg dGhlIHN0cmluZyBpcyBhIG51bWJlciAoZGlmZmVyZW50IGZyb20gMCwgdGhlIGlkIGNvdWxk IG5vdCBiZSB6ZXJvISkNCgkqICBUT0RPOiBjaGVjayBpZiAqYWxsKiBjaGFycyBhcmUgemVy byBhbmQgZmFpbCwgZS5nLiBpZD0wMDAwDQoJKiovDQoJcHJpdmF0ZSBmdW5jdGlvbiBzdHJp bmdJc051bWJlck5vdFplcm8oICRzdHJpbmcgKSB7DQoJCWlmIChlbXB0eSgkc3RyaW5nKSkg ew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCXJldHVybiBjdHlwZV9kaWdpdCgkc3RyaW5n KTsNCgl9DQp9IC8vZW5kIGNsYXNzDQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K Ly8gUGx1Z2luLXNwZWNpZmljIHJlcGxhY2VtZW50IHN0cmluZ3MgLSBsb2NhbGlzZSBhcyBy ZXF1aXJlZA0KLy8gVE9ETzogVGV4dHBhY2sgdGhpcw0KZnVuY3Rpb24gc21kX3Byb2dub3N0 aWNzX2dUeHQoJHdoYXQsICRhdHRzID0gYXJyYXkoKSkgew0KCWdsb2JhbCAkcHJlZnMsICRz bWRfcHJvZ25vc3RpY3NfZXZlbnQ7DQoJJGxhbmcgPSBhcnJheSgNCgkJJ2Fja2VkJyA9PiAn QWxhcm1zIGFja25vd2xlZGdlZC4nLA0KCQknYWxhcm1fZnJlcScgPT4gJ0FsYXJtIG9uIGRl dGVjdGlvbiBhbmQgZXZlcnk6ICcsDQoJCSdhbmQnID0+ICcgYW5kICcsDQoJCSdhdmFpbF9i cmFuY2gnID0+ICdBbiA8YSBocmVmPSJodHRwOi8vdGV4dHBhdHRlcm4uY29tL2Rvd25sb2Fk Ij51cGRhdGUgdG8gdGhpcyBUZXh0cGF0dGVybiBzZXJpZXMgaXMgYXZhaWxhYmxlPC9hPics DQoJCSdhdmFpbF90eHAnID0+ICdBIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5jb20v ZG93bmxvYWQiPm5ldyB2ZXJzaW9uIG9mIFRleHRwYXR0ZXJuIGlzIGF2YWlsYWJsZTwvYT4n LA0KCQknY2hfYWRkJyA9PiAnQWRkaXRpb25zJywNCgkJJ2NoX2RlbCcgPT4gJ0RlbGV0aW9u cycsDQoJCSdjaF9tb2QnID0+ICdNb2RpZmljYXRpb25zJywNCgkJJ2NoZWNrX2JldHdlZW4n ID0+ICdDaGVjayBmaWxlcyBiZXR3ZWVuOiAnLA0KCQknY2hlY2tfZm9yJyA9PiAnQ2hlY2sg ZmlsZXMgZm9yOiAnLA0KCQknY2hlY2tfZnJlcScgPT4gJ0NoZWNrIGZpbGVzIChhdCBtb3N0 KSBldmVyeTogJywNCgkJJ2NoZWNrX3F0eScgPT4gJ0NoZWNrIHRoaXMgbWFueSBmaWxlcyBl YWNoIHRpbWU6ICcsDQoJCSdjaGVja193aGVyZScgPT4gJ0NoZWNrIGZpbGVzIG9uIHB1Ymxp YyBzaWRlIGNsaWNrczogJywNCgkJJ2NzaScgPT4gJ0dhdGhlciBmb3JlbnNpY3MgYW5kIHNl bmQgZm9yIGFuYWx5c2lzJywNCgkJJ2NzaV9zZW50JyA9PiAnIEZvcmVuc2ljcyBkYXRhIHNl bnQnLA0KCQknY3N2JyA9PiAnKGNvbW1hLXNlcGFyYXRlZCknLA0KCQknY3Vycm1vbicgPT4g J1lvdSBhcmUgY3VycmVudGx5IG1vbml0b3Jpbmcge2N1cnJ9IG91dCBvZiB7b3V0b2Z9IGF2 YWlsYWJsZSBmaWxlcy4nLA0KCQknZG9jcm9vdF9maWxlcycgPT4gJ0NvbnNpZGVyIG1vdmlu ZyB0aGUgImZpbGVzIiBmb2xkZXIgb3V0c2lkZSBvZiB5b3VyIHNpdGUgcm9vdCBmb2xkZXIu IFlvdSBjYW4gZG8gdGhpcyB2aWEgdGhlICJBZG1pbiA+IFByZWZzID4gQWR2YW5jZWQgPiBG aWxlIGRpcmVjdG9yeSBwYXRoIiBzZXR0aW5nLicsDQoJCSdkb2Nyb290X3Byb2dub3N0aWNz JyA9PiAnUGxlYXNlIGNoYW5nZSB0aGUgIlByb2dub3N0aWNzIGZvbGRlciIgc2V0dGluZyB0 byBhIGRpcmVjdG9yeSBvdXRzaWRlIHlvdXIgc2l0ZSByb290IGZvbGRlci4nLA0KCQknZG9j cm9vdF90bXAnID0+ICdDb25zaWRlciBtb3ZpbmcgdGhlICJ0bXAiIGZvbGRlciBvdXRzaWRl IG9mIHlvdXIgc2l0ZSByb290IGZvbGRlci4gWW91IGNhbiBkbyB0aGlzIHZpYSB0aGUgIkFk bWluID4gUHJlZnMgPiBBZHZhbmNlZCA+IFRlbXBvcmFyeSBkaXJlY3RvcnkgcGF0aCIgc2V0 dGluZy4nLA0KCQknZXhjbHVkaXInID0+ICdFeGNsdWRlIGZvbGRlcnM6ICcsDQoJCSdmaWxl c191cGRhdGVkJyA9PiAnRmlsZSBsaXN0IHVwZGF0ZWQnLA0KCQknaGVscF9saW5rJyA9PiAn KDxhIGhyZWY9IntsaW5rfSI+SGVscDwvYT4pJywNCgkJJ2htcycgPT4gJyhocnM6bWluczpz ZWNzKScsDQoJCSdpZ25vcmVzJyA9PiAnSWdub3JlIGZpbGVzOiAnLA0KCQknbGJsX2NoYW5n ZWQnID0+ICdDaGFuZ2VkJywNCgkJJ2xibF9oYXNobW9kJyA9PiAnQ09NUFJPTUlTRUQnLA0K CQknbGJsX21pc3NpbmcnID0+ICdNaXNzaW5nJywNCgkJJ2xibF9hZGRlZCcgPT4gJ0FkZGVk IChub3QgbW9uaXRvcmVkKScsDQoJCSdsaXN0bG9jJyA9PiAnRmlsZSBsb2NhdGlvbnM6ICcs DQoJCSdtYWlsdG8nID0+ICdTZW5kIGUtbWFpbCB0bzogJywNCgkJJ21haWx0b19jc2knID0+ ICdTZW5kIGZvcmVuc2ljcyB0bzogJywNCgkJJ21vbmZpbGVzX2V4cGxhaW4nID0+ICdTZWxl Y3QgYWxsIHRoZSBmaWxlcyB5b3Ugd2lzaCB0byBtb25pdG9yIGFuZCBjbGljayBTYXZlLiBB bHRlcmluZyB0aGlzIGxpc3Qgd2lsbCBhdXRvbWF0aWNhbGx5IGFja25vd2xlZGdlIGFueSBv dXRzdGFuZGluZyBhbGFybXMgYWdhaW5zdCB0aGUgc2VsZWN0ZWQgZmlsZXMuJywNCgkJJ25p Y2VfdHJ5X2hlYWRlcicgPT4gJ05pY2UgdHJ5LCBidXQgdGhhdCBIVFRQIHJlcXVlc3QgaXMg YmxvY2tlZC4nLA0KCQknbmljZV90cnlfaW5qZWN0JyA9PiAnWW91ciByZXF1ZXN0IGhhcyBi ZWVuIGRlbmllZCBieSBzbWRfcHJvZ25vc3RpY3MuIE5pY2UgdHJ5LicsDQoJCSdub19hbGFy bXMnID0+ICdObyBhbGFybXMgdG8gYWNrbm93bGVkZ2UgYXQgcHJlc2VudC4nLA0KCQknbm9f ZmlsZXMnID0+ICdObyBmaWxlcyB0byBsaXN0LiBDaGVjayB0aGUgcGx1Z2luIHNldHVwIChh bmQgU2F2ZSBpdCkuJywNCgkJJ25vX2xvZ19lbnRyaWVzJyA9PiAnTm8gbG9nIGFjdGl2aXR5 IGFyb3VuZCB0aGUgdGltZSBvZiB0aGUgZGlmZmVyZW5jZXMuJywNCgkJJ25vbmVfc2VsZWN0 ZWQnID0+ICdObyBmaWxlcyBzZWxlY3RlZCcsDQoJCSdub3RpZnlfZW1haWwnID0+ICdFLW1h aWwnLA0KCQknbm90aWZ5X3R4cCcgPT4gJ1RYUCBpbnRlcmZhY2UnLA0KCQknbm90aWZ5X3Zp YScgPT4gJ05vdGlmeSB2aWE6ICcsDQoJCSdwcmVhbWJsZV9hZGRlZCcgPT4gJ1RoZXNlIGZp bGVzIGhhdmUgYmVlbiBhZGRlZDogJywNCgkJJ3ByZWFtYmxlX2ZpbGVzJyA9PiAnRmlsZSBj b250ZW50cyBmb2xsb3dzOiAnLA0KCQkncHJlYW1ibGVfaGFzaGRvd24nID0+ICdXQVJOSU5H ISBUaGUgY2hlY2tzdW1zIGZpbGUgaXMgbWlzc2luZy4nLA0KCQkncHJlYW1ibGVfaGFzaG1v ZCcgPT4gJ1dBUk5JTkchIFRoZSBjaGVja3N1bXMgZmlsZSBoYXMgYmVlbiBhbHRlcmVkOiAn LA0KCQkncHJlYW1ibGVfbWlzcycgPT4gJ1RoZXNlIGZpbGVzIGFyZSBtaXNzaW5nOiAnLA0K CQkncHJlYW1ibGVfbm9rJyA9PiAnVGhlc2UgZmlsZXMgZGlmZmVyIGZyb20gdGhlaXIgZXhw ZWN0ZWQgY29udGVudDogJywNCgkJJ3ByZWFtYmxlX3NxbF9pbmplY3QnID0+ICdQb3NzaWJs ZSBTUUwgaW5qZWN0aW9uIGRldGVjdGVkJywNCgkJJ3ByZWFtYmxlX3R4cGxvZycgPT4gJ0xv ZyBlbnRyaWVzIHByaW9yIHRvIHRoaXMgZGV0ZWN0aW9uOiAnLA0KCQkncHJvZ2xvYycgPT4g J1Byb2dub3N0aWNzIGZvbGRlcjogJywNCgkJJ3Byb2dwZngnID0+ICdVbmlxdWUgcHJlZml4 OiAnLA0KCQkncG5sX2FjaycgPT4gJ0FsYXJtcycsDQoJCSdwbmxfYWNraXQnID0+ICdBY2tu b3dsZWRnZScsDQoJCSdwbmxfYWR2aWNlJyA9PiAnQWR2aWNlJywNCgkJJ3BubF9jc2knID0+ ICdTZW5kIEZvcmVuc2ljcycsDQoJCSdwbmxfZmlsZXMnID0+ICdGaWxlcycsDQoJCSdwbmxf aWdub3JlJyA9PiAnSWdub3JlJywNCgkJJ3BubF9zZXR1cCcgPT4gJ1NldHVwJywNCgkJJ3Bv c3RhbWJsZScgPT4gJ0Fja25vd2xlZGdlIGFsYXJtcycsDQoJCSdyZXFfaGVhZGVycycgPT4g J0Jsb2NrIHJlcXVlc3QgaGVhZGVyczogJywNCgkJJ3JlcV9ub3RfYWxsb3dlZCcgPT4gJ1JF UVVFU1RfTUVUSE9EIG5vdCBhbGxvd2VkOiB7cmVxfScsDQoJCSdyaF9kZWwnID0+ICdERUxF VEUnLA0KCQkncmhfcHV0JyA9PiAnUFVUJywNCgkJJ3JoX3RyYWNlJyA9PiAnVFJBQ0UnLA0K CQkndHRsX2FjaycgPT4gJ1Byb2dub3N0aWMgYWxhcm0gYWNrbm93bGVkZ2VtZW50JywNCgkJ J3R0bF9hZHZpY2UnID0+ICdQcm9nbm9zdGljIGFkdmljZScsDQoJCSd0dGxfZmlsZXMnID0+ ICdQcm9nbm9zdGljIGZpbGUgbW9uaXRvcmluZycsDQoJCSd0dGxfZmlsZW9wdHMnID0+ICdG aWxlc3lzdGVtIG9wdGlvbnMnLA0KCQkndHRsX21vbm9wdHMnID0+ICdNb25pdG9yaW5nIG9w dGlvbnMnLA0KCQkndHRsX3JlYWxvcHRzJyA9PiAnUmVhbHRpbWUgb3B0aW9ucycsDQoJCSd0 dGxfc2V0dXAnID0+ICdQcm9nbm9zdGljIHNldHVwJywNCgkJJ3NtZF9wcm9nbm9zdGljcycg PT4gJ1Byb2dub3N0aWNzJywNCgkJJ3NlY29uZHMnID0+ICcoc2Vjb25kcyknLA0KCQknc2V0 dXBfZXhpc3RzJyA9PiAnVGhlIHNldHVwIGRpcmVjdG9yeSBzdGlsbCBleGlzdHMuIFBsZWFz ZSBkZWxldGUgaXQuJywNCgkJJ3Nob3dfZ3JhbnRzJyA9PiAnWW91ciBUWFAgdXNlciBjYW4g YWNjZXNzIHRoZSBNeVNRTCBwcml2aWxlZ2VzIGluIHRoZSBEQi4gQ29uc2lkZXIgYWNjZXNz aW5nIHRoZSBEQiB1c2luZyBhIGxlc3MgcHJpdmlsZWdlZCB1c2VyLicsDQoJCSdzcWxfZmls ZV9wcml2cycgPT4gJ1lvdXIgTXlTUUwgdXNlciBoYXMgRklMRSBwcml2aWxlZ2VzLiBDb25z aWRlciByZXZva2luZyB0aGlzIHJpZ2h0IHVubGVzcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4n LA0KCQknc3FsX2luamVjdCcgPT4gJ0RldGVjdCBTUUwgaW5qZWN0aW9uIGF0dGFja3M6ICcs DQoJCSdzdGF0X2dpZCcgPT4gJ0dyb3VwIElEOiAnLA0KCQknc3RhdF9tb2QnID0+ICdNb2Rp ZmllZDogJywNCgkJJ3N0YXRfbmFtZScgPT4gJ0ZpbGVuYW1lOiAnLA0KCQknc3RhdF9zaXpl JyA9PiAnU2l6ZTogJywNCgkJJ3N0YXRfdWlkJyA9PiAnVXNlciBJRDogJywNCgkJJ3N1Ympl Y3QnID0+ICdQcm9nbm9zdGljcyAoJy4kcHJlZnNbJ3NpdGV1cmwnXS4nKScsDQoJCSdzdWJq ZWN0X2NzaScgPT4gJ1Byb2dub3N0aWNzICgnLiRwcmVmc1snc2l0ZXVybCddLicpIGZvcmVu c2ljcycsDQoJCSd0aWdodCcgPT4gJ1lvdSBydW4gYSBwcmV0dHkgdGlnaHQgc2hpcC4gU3Rh eSBmcm9zdHkuJywNCgkJJ3dhcm5fbG9jJyA9PiAnRmlsZSBsb2NhdGlvbnMgaGF2ZSBjaGFu Z2VkLiBFbnN1cmUgeW91IHVwZGF0ZSB5b3VyIDxhIGhyZWY9ImluZGV4LnBocD9ldmVudD0n LiRzbWRfcHJvZ25vc3RpY3NfZXZlbnQuJyYjMzg7c3RlcD1zbWRfcHJvZ25vc3RpY3NfZmls ZXMiPmxpc3Qgb2YgZmlsZXM8L2E+IG5vdycsDQoJKTsNCglyZXR1cm4gc3RydHIoJGxhbmdb JHdoYXRdLCAkYXR0cyk7DQp9IjtzOjQ6InR5cGUiO3M6MToiMSI7czo1OiJvcmRlciI7czox OiIxIjtzOjU6ImZsYWdzIjtzOjE6IjEiO3M6NDoiaGVscCI7czoyMjEwMDoiPGRpdiBpZD0i c21kX2hlbHAiPgoKCTxoMT5zbWRfcHJvZ25vc3RpY3M8L2gxPgoKCTxwPlRoZSA8ZW0+QWRt aW4gLSZndDsgRGlhZ25vc3RpY3M8L2VtPiB0YWIgaXMgZ3JlYXQgaWYgeW91IHJlbWVtYmVy IHRvIGxvb2sgYXQgaXQgZnJvbSB0aW1lIHRvIHRpbWUuIEJ1dCBpZiB5b3VyIHNlcnZlciBp cyBjb21wcm9taXNlZCwgaG93IHdvdWxkIHlvdSBrbm93IGFib3V0IGEgc25lYWt5IFRyb2ph biBvciBtYWx3YXJlIHVudGlsIHlvdXIgdmlzaXRvcnMgY29tcGxhaW4gb3IgdGhlIHNlYXJj aCBlbmdpbmVzIGJsb2NrIHlvdXIgc2l0ZT88L3A+CgoJPHA+VGhlIGFuc3dlciBpcyB0byB1 c2Ugc21kX3Byb2dub3N0aWNzIHRvIHRlbGwgeW91IHdoZW4gdGhpbmdzIGhhdmUgY2hhbmdl ZCBzbyB5b3UgY2FuIHRha2UgYWN0aW9uIGltbWVkaWF0ZWx5LjwvcD4KCgk8aDI+RmVhdHVy ZXM8L2gyPgoKCTx1bD4KCQk8bGk+TW9uaXRvciBmaWxlcyBhbmQgYXR0YWNrcyBpbiBhbmQg YXJvdW5kIHlvdXIgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gaW5zdGFsbGF0aW9u PC9saT4KCQk8bGk+QXV0b21hdGljYWxseSBkZXRlY3QgYW55IGNoYW5nZXMgYW5kIGRpc3Bs YXkvc2VuZCBub3RpZmljYXRpb24gdG8gZGVzaWduYXRlZCB1c2VyKHMpPC9saT4KCQk8bGk+ Q3VzdG9taXNlIHdoZXJlYWJvdXRzIGFuZCBob3cgb2Z0ZW4gdGhlIGNoZWNrcyBhcmUgcGVy Zm9ybWVkPC9saT4KCQk8bGk+QWNrbm93bGVkZ2Uga25vd24gYWx0ZXJhdGlvbnMgYW5kIGNv bmZpZ3VyZSByZXBlYXQgYWxhcm1zIGlmIHRoZSBzaXR1YXRpb24gcmVtYWlucyB1bmNoZWNr ZWQ8L2xpPgoJCTxsaT5SdWRpbWVudGFyeSBwYXNzd29yZCBzdHJlbmd0aCBtZXRlciBpbmNs dWRlZDwvbGk+Cgk8L3VsPgoKCTxoMj5BdXRob3IgLyBjcmVkaXRzPC9oMj4KCgk8cD5Xcml0 dGVuIGJ5IDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9jb250YWN0Ij5TdGVmIERh d3NvbjwvYT4uIE1hbnkgdGhhbmtzIHRvIEtldmluIFBvdHRzIGFuZCBTdGV2ZSBEaWNraW5z b24gZm9yIGJldGEgdGVzdGluZyBhbmQgZmVhdHVyZSBlbmhhbmNlbWVudHMuIEFsc28ga3Vk b3MgdG8gc21hbGxoYWRyb25jb2xsaWRlciBmb3IgdGhlIGJhc2lzIG9mIHRoZSBwYXNzd29y ZCBzdHJlbmd0aCBjYWxjdWxhdG9yIGFuZCBIdWdvIFNvdXNhIGZvciB0aGUgcGhQcm90ZWN0 b3IgY2xhc3MuPC9wPgoKCTxoMj5JbnN0YWxsYXRpb24gLyB1bmluc3RhbGxhdGlvbjwvaDI+ CgoJPHAgY2xhc3M9ImltcG9ydGFudCI+UmVxdWlyZXMgPHNwYW4gY2xhc3M9ImNhcHMiPlRY UDwvc3Bhbj4gNC4zLjArIGFuZCA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiA1PC9w PgoKCTxwPkRvd25sb2FkIHRoZSBwbHVnaW4gZnJvbSBlaXRoZXIgPGEgaHJlZj0iaHR0cDov L3RleHRwYXR0ZXJuLm9yZy9wbHVnaW5zLzExOTUvc21kX3Byb2dub3N0aWNzIj50ZXh0cGF0 dGVybi5vcmc8L2E+LCBvciB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3N3 Ij5zb2Z0d2FyZSBwYWdlPC9hPiwgcGFzdGUgdGhlIGNvZGUgaW50byB0aGUgPHNwYW4gY2xh c3M9ImNhcHMiPlRYUDwvc3Bhbj4gQWRtaW4gLSZndDsgUGx1Z2lucyBwYW5lLCBpbnN0YWxs IGFuZCBlbmFibGUgdGhlIHBsdWdpbi4gTm90ZSB0aGF0IGl0IGlzIHJlY29tbWVuZGVkIHRo YXQgdGhlIHBsdWdpbiBydW5zIGFzIHByaW9yaXR5IDEgc28gaXQgY2FuIGRldGVjdCB0aGlu Z3MgYmVmb3JlIG90aGVyIHBsdWdpbnMuPC9wPgoKCTxwPlRvIHVuaW5zdGFsbCwgZGVsZXRl IGZyb20gdGhlIDxlbT5BZG1pbiAtJmd0OyBQbHVnaW5zPC9lbT4gcGFnZS4gWW91IG1heSB1 c2Ugc21kX3ByZWZhbGl6ZXIgdG8gcmVtb3ZlIGFueSA8Y29kZT5zbWRfcHJvZ25vc3RpY3Nf KjwvY29kZT4gcHJlZmVyZW5jZXMgdGhhdCB0aGUgcGx1Z2luIGNyZWF0ZWQuPC9wPgoKCTxw PlZpc2l0IHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0 b3BpYy5waHA/aWQ9MzQ5MzgiPmZvcnVtIHRocmVhZDwvYT4gZm9yIG1vcmUgaW5mbyBvciB0 byByZXBvcnQgb24gdGhlIHN1Y2Nlc3Mgb3Igb3RoZXJ3aXNlIG9mIHRoZSBwbHVnaW4uPC9w PgoKCTxoMj5RdWljayBzdGFydDogdGhlIHRocmVlIHN0ZXBzIHRvIGRldGVjdGlvbjwvaDI+ CgoJPG9sPgoJCTxsaT5WaXNpdCA8ZW0+RXh0ZW5zaW9ucyAtJmd0OyBQcm9nbm9zdGljczwv ZW0+LCBhbHRlciB0aGUgc2V0dXAgaW5mb3JtYXRpb24gdG8gdGFzdGUgYW5kIDxzdHJvbmc+ bWFrZSBzdXJlIHlvdSA8ZW0+U2F2ZTwvZW0+IGl0PC9zdHJvbmc+PC9saT4KCQk8bGk+Q2xp Y2sgdGhlIFByb2dub3N0aWMgdGFiJiM4MjE3O3MgPGVtPkZpbGVzPC9lbT4gYnV0dG9uIChp Z25vcmUgYW55IHdhcm5pbmcgYWJvdXQgbWlzc2luZyBjaGVja3N1bXMgZm9yIG5vdzogdGhl eSYjODIxNzt2ZSBub3QgYmVlbiBjcmVhdGVkIHlldCkgYW5kIGNob29zZSB0aGUgZmlsZXMg eW91IHdpc2ggdG8gbW9uaXRvci4gPHN0cm9uZz5NYWtlIHN1cmUgeW91IDxlbT5TYXZlPC9l bT4gdGhlIGNoYW5nZXM8L3N0cm9uZz48L2xpPgoJCTxsaT5HbyBhYm91dCB5b3VyIGJ1c2lu ZXNzLiBJZiB0aGUgZmlsZXN5c3RlbSBjaGFuZ2VzIHlvdSYjODIxNztsbCBiZSB0b2xkIGFi b3V0IGl0LiBQbGVhc2UgY29uc2lkZXIgaGVscGluZyB0byA8YSBocmVmPSIjc21kX2JldHRl ciI+bWFrZSB0aGUgcGx1Z2luIGJldHRlcjwvYT48L2xpPgoJPC9vbD4KCgk8aDIgaWQ9InNt ZF9zZXR1cCI+U2V0dXA8L2gyPgoKCTxwPlRoZSA8ZW0+UHJvZ25vc3RpYyBzZXR1cDwvZW0+ IHBhZ2UgaG91c2VzIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zOjwvcD4K Cgk8aDM+TW9uaXRvcmluZyBvcHRpb25zPC9oMz4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5jaGVjayBmaWxlcyBvbiBwdWJsaWMgc2lkZSBjbGlja3M8L3NwYW4+IDogY2hl Y2tzIGFyZSBhbHdheXMgcGVyZm9ybWVkIHdoZW4gcGVvcGxlIHZpc2l0IGFkbWluIHNpZGUg dGFicy4gWW91IG1heSBhbHNvIGVsZWN0IHRvIGNoZWNrIHRoZSBmaWxlcyB3aGVuIHZpc2l0 b3JzL2JvdHMgYnJvd3NlIHlvdXIgd2ViIHNpdGUgaWYgeW91IHByZWZlciAoc2VlIDxhIGhy ZWY9IiNzbWRfaG93aXR3b3JrcyI+aG93IGl0IHdvcmtzPC9hPiBmb3IgZGV0YWlscykuPC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNoZWNrIGZpbGVzIChhdCBtb3N0KSBldmVy eTwvc3Bhbj4gOiB0aGUgcGx1Z2luIGRvZXMgbm90IGNoZWNrIHRoZSBmaWxlcyBldmVyeSBj bGljayBiZWNhdXNlIHRoYXQgd291bGQgcGxhY2UgdW5uZWNlc3Nhcnkgc3RyYWluIG9uIHRo ZSBzZXJ2ZXIuIEluc3RlYWQgeW91IGNob29zZSBhIGNvbmZpZ3VyYWJsZSB0aW1lICYjODIx MjsgaW4gc2Vjb25kcyAmIzgyMTI7IGFmdGVyIHdoaWNoIHRoZSB2ZXJ5IG5leHQgYWRtaW4t IG9yIHB1YmxpYy1zaWRlIGNsaWNrIHdpbGwgdHJpZ2dlciB0aGUgY2hlY2suPC9saT4KCQk8 bGk+JShhdG5tKWNoZWNrIGZpbGVzIGJldHdlZW4gJSA6IHR3byB0aW1lcyBvZiBkYXkgYmV0 d2VlbiB3aGljaCB0aGUgZmlsZXMgd2lsbCBiZSBjaGVja2VkLiBZb3UgY291bGQgc2V0IHRo aXMgdG8gb2ZmLXBlYWsgaG91cnMgaWYgeW91IHByZWZlcnJlZCB0byBtaW5pbWlzZSB0aGUg cGx1Z2luJiM4MjE3O3MgaW1wYWN0IG9uIGRheXRpbWUgdmlzaXRvcnMuIERlZmF1bHQ6IDxj b2RlPjAwOjAwID0mZ3Q7IDIzOjU5PC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5jaGVjayB0aGlzIG1hbnkgZmlsZXMgZWFjaCB0aW1lPC9zcGFuPiA6IGluc3RlYWQg b2YgdGVzdGluZyBldmVyeSBzaW5nbGUgZmlsZSBlYWNoIHRpbWUgJiM4MjEyOyB3aGljaCB3 aWxsIHNsb3cgZG93biB5b3VyIHNpdGUgLyBhZG1pbiBzaWRlICYjODIxMjsgaXQgaXMgZ29v ZCBwcmFjdGljZSB0byBvbmx5IGNoZWNrIGEgc3Vic2V0IG9mIGZpbGVzIGV2ZXJ5IHRpbWUg dGhlIHBsdWdpbiBpcyB0cmlnZ2VyZWQuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i PmFsYXJtIG9uIGRldGVjdGlvbiBhbmQgZXZlcnk8L3NwYW4+IDogd2hlbiBzb21ldGhpbmcg aGFzIGNoYW5nZWQgYW5kIGl0JiM4MjE3O3MgZGV0ZWN0ZWQsIGFuIGFsYXJtIGFjdGlvbiBp cyBhbHdheXMgdGFrZW4uIEJ1dCBpZiB0aGUgcGx1Z2luIGNvbnRpbnVhbGx5IGJvbWJhcmRl ZCB5b3Ugd2l0aCBpbmZvcm1hdGlvbiBpdCB3b3VsZCBiZSBhbm5veWluZyBhbmQgbm90IGFz IHVzZWZ1bC4gVGhpcyBzZXR0aW5nIGFsbG93cyB5b3UgdG8gY29uZmlndXJlIHRoZSBpbnRl cnZhbCBiZXR3ZWVuIHJlcGVhdCBuYWdzIG9mIHRoZSBzYW1lIG1lc3NhZ2UuIE9uY2UgYSBk YXkgKHRoZSBkZWZhdWx0IG9mIDg2NDAwIHNlY29uZHMpIGJ5IGUtbWFpbCBpcyB1c3VhbGx5 IGVub3VnaCB1bmxlc3MgeW91JiM4MjE3O3JlIGEgbWFzb2NoaXN0LiBOb3RlIHRoYXQgaWYg bW9yZSBmaWxlcyBhcmUgY2hhbmdlZCAmIzgyMTI7IGV2ZW4gd2hlbiB0aGUgdGltZW91dCBw ZXJpb2QgaGFzIHlldCB0byBlbGFwc2UgJiM4MjEyOyB5b3Ugd2lsbCByZWNlaXZlIGFub3Ro ZXIgYWxlcnQuPGRpdiBjbGFzcz0ic21kX2JyZWFrIj5Zb3UgbWF5IHNwZWNpZnkgdHdvIHZh bHVlcyAoY29tbWEtc2VwYXJhdGVkKSBpZiB5b3Ugd2lzaDogdGhlIGZpcnN0IGlzIHRoZSB0 aW1lIGJldHdlZW4gbm90aWZpY2F0aW9ucyB0byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRY UDwvc3Bhbj4gYWRtaW4gc2lkZTsgdGhlIHNlY29uZCBpcyB0aGUgdGltZSBiZXR3ZWVuIGUt bWFpbHMuIElmIHlvdSB1c2Ugb25seSBvbmUgdmFsdWUgdGhlbiBpdCB3aWxsIGJlIGFwcGxp ZWQgdG8gYm90aC48L2Rpdj48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bm90aWZ5 IHZpYTwvc3Bhbj4gOiBjaG9vc2UgaG93IHlvdSB3aXNoIHRvIGJlIG5vdGlmaWVkOgoJPHVs PgoJCTxsaT48c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBJbnRlcmZhY2Ugd2lsbCBk aXNwbGF5IGEgbWVzc2FnZSBvbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4g YWRtaW4gc2lkZSB3aGVuIGEgY2hhbmdlIGlzIGRldGVjdGVkLjwvbGk+CgkJPGxpPkUtbWFp bCB3aWxsIHNlbmQgb3V0IGFuIGUtbWFpbCBhYm91dCB0aGUgY2hhbmdlcy48L2xpPgoJPC91 bD48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c2VuZCBlLW1haWwgdG88L3NwYW4+ IDogY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZS1tYWlsIGFkZHJlc3MgcmVjaXBpZW50cy4g SWYgdGhpcyBpcyBlbXB0eSBubyBlLW1haWxzIHdpbGwgYmUgc2VudCBldmVuIGlmIHlvdSBj aG9vc2UgdG8gYmUgbm90aWZpZWQgdmlhIGUtbWFpbC48L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+c2VuZCBmb3JlbnNpY3MgdG88L3NwYW4+IDogY29tbWEtc2VwYXJhdGVkIGxp c3Qgb2YgZS1tYWlsIGFkZHJlc3MgcmVjaXBpZW50cyB0byByZWNlaXZlIGZvcmVuc2ljcyBk YXRhICh0aGUgbmF0dGlseS10aXRsZWQgPGVtPmZyb2dub3N0aWNzPC9lbT4pLiBZb3UgY2Fu IGNob29zZSBub2JvZHkgaWYgeW91IHdpc2ggdG8gZGlzYWJsZSB0aGlzIGZlYXR1cmUsIG9y IHNlbmQgdGhlbSB0byB5b3Vyc2VsZiwgb3IgPGEgaHJlZj0iI3NtZF9iZXR0ZXIiPnRvIG1l IGZvciBhbmFsYXlzaXM8L2E+LiA8c3Ryb25nPlBsZWFzZSBub3RlIHRoYXQgc29tZSBkYXRh IGlzIHF1aXRlIHNlbnNpdGl2ZSBhbmQgbWF5IGRpdnVsZ2UgcGF0aHMgdG8geW91ciBmaWxl cyBvciBzaXRlPC9zdHJvbmc+LiBJZiB5b3UgcHJlZmVyIHRvIGtlZXAgc3R1ZmYgcHJpdmF0 ZSBieSBhbGwgbWVhbnMgc2FuaXRpemUgdGhlIGZvcmVuc2ljcyBhbmQgc2VuZCB0aGUgZWRp dGVkIGhpZ2hsaWdodHMgdG8gbWUgZm9yIGFuYWx5c2lzIGlmIHlvdSB3aXNoLjwvbGk+Cgk8 L3VsPgoKCTxoMz5SZWFsdGltZSBvcHRpb25zPC9oMz4KCgk8dWw+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5ibG9jayByZXF1ZXN0IGhlYWRlcnM8L3NwYW4+IDogaWYgeW91IGVuYWJs ZSB0aGlzIGZhY2lsaXR5IHlvdSBjYW4gZWxlY3QgdG8gYmxvY2sgb3IgYWxsb3cgY2VydGFp biB0eXBlcyBvZiBzcGVpY2FsIDxzcGFuIGNsYXNzPSJjYXBzIj5IVFRQPC9zcGFuPiByZXF1 ZXN0LiBBbnkgcmVxdWVzdCBvZiBhIGNoZWNrZWQgdHlwZSB3aWxsIGJlIGJsb2NrZWQgYW5k IGEgbWVzc2FnZSB3aWxsIGJlIHJldHVybmVkIGluc3RlYWQgb2YgdGhlIHBhZ2UuIFRoZSBj b3JlIHR5cGVzIDxzcGFuIGNsYXNzPSJjYXBzIj5HRVQ8L3NwYW4+LCA8c3BhbiBjbGFzcz0i Y2FwcyI+UE9TVDwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJjYXBzIj5IRUFEPC9zcGFuPiBhbmQg PHNwYW4gY2xhc3M9ImNhcHMiPk9QVElPTlM8L3NwYW4+IGFyZSBhdXRvbWF0aWNhbGx5IGFs bG93ZWQgYmVjYXVzZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiByZXF1aXJlcyB0 aGVtLiBUaGUgcmVtYWluaW5nIHRocmVlICYjODIxMjsgPHNwYW4gY2xhc3M9ImNhcHMiPlRS QUNFPC9zcGFuPiwgPHNwYW4gY2xhc3M9ImNhcHMiPlBVVDwvc3Bhbj4gYW5kIDxzcGFuIGNs YXNzPSJjYXBzIj5ERUxFVEU8L3NwYW4+ICYjODIxMjsgYXJlIHNwZWNpYWxpc3QgaGVhZGVy cyB0aGF0IGFyZW4mIzgyMTc7dCB1c2VkIGJ5IHRoZSBjb3JlIGJ1dCBtYXkgYmUgcmVxdWly ZWQgYnkgc29tZSBwbHVnaW5zLiBQZXJtaXQgdGhlbSBpZiB5b3Ugd2lzaCBieSBjbGVhcmlu ZyB0aGUgcmVsZXZhbnQgY2hlY2sgYm94KGVzKSwgb3RoZXJ3aXNlIGZvciBtYXhpbXVtIHBy b3RlY3Rpb24ga2VlcCB0aGlzIGZlYXR1cmUgc3dpdGNoZWQgb24gd2l0aCBhbGwgdGhyZWUg dHlwZXMgb2YgaGVhZGVyIGNoZWNrZWQuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i PmNoZWNrIGZvciA8c3BhbiBjbGFzcz0iY2FwcyI+U1FMPC9zcGFuPiBpbmplY3Rpb24gYXR0 YWNrczwvc3Bhbj4gOiBtb25pdG9yIGluY29taW5nIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8 L3NwYW4+cyBmb3IgPHNwYW4gY2xhc3M9ImNhcHMiPlNRTDwvc3Bhbj4gaW5qZWN0aW9uIGF0 dGFja3MgYW5kIGJsb2NrIHRoZW0uIFdoZW4gYW4gYXR0YWNrIGlzIGRldGVjdGVkIHRoZSBy ZXF1ZXN0IGlzIGJsb2NrZWQgd2l0aCBhICYjODIxNjtOaWNlIHRyeSYjODIxNzsgbWVzc2Fn ZSBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHNlcnZlciBlbnZpcm9ubWVudCBpcyBh dXRvbWF0aWNhbGx5IHNlbnQgdG8gdGhlIGZvcmVuc2ljcyBlLW1haWwgc28geW91IGNhbiBz ZWUgd2hhdCB3YXMgc3VibWl0dGVkLjwvbGk+Cgk8L3VsPgoKCTxoMz5GaWxlc3lzdGVtIG9w dGlvbnM8L2gzPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNoZWNrIGZpbGVz IGZvcjwvc3Bhbj4gOiBjaG9vc2Ugd2hhdCB0eXBlIG9mIGFsdGVyYXRpb25zIHlvdSB3aXNo IHRvIG1vbml0b3I6IG5ldyBmaWxlcyBhZGRlZCwgZmlsZXMgZGVsZXRlZCBvciBmaWxlcyBt b2RpZmllZC4gQnkgZGVmYXVsdCwgYWRkaXRpb25zIGFyZSBub3Qgc2VsZWN0ZWQgYmVjYXVz ZSBpdCBpbmN1cnMgYSAodGlueSkgZXh0cmEgcHJvY2Vzc2luZyBwZW5hbHR5IHRvIHRoZSBj aGVja3MuIFRoZXJlZm9yZSBpZiB5b3Ugd2FudCB0byBtb25pdG9yIGZvciBhZGRpdGlvbnMs IHlvdSBuZWVkIHRvIG9wdC1pbi48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Zmls ZSBsb2NhdGlvbnM8L3NwYW4+IDogY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZGlyZWN0b3Jp ZXMgZnJvbSB3aGljaCB5b3Ugd2lzaCB0byBiZSBhYmxlIHRvIHNlbGVjdCBmaWxlcyBmb3Ig bW9uaXRvcmluZy4gQ2hvb3NlIG9ubHkgdGhlIHRvcC1sZXZlbCBmb2xkZXI7IGV2ZXJ5dGhp bmcgYmVuZWF0aCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2VsZWN0ZWQuIEl0IGRlZmF1bHRz IHRvIHlvdXIgc2l0ZSByb290LiBJZiB1c2luZyBhIG11bHRpLXNpdGUgc2V0dXAgeW91IG1h eSBoYXZlIHRvIGFsdGVyIHRoaXMuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmV4 Y2x1ZGUgZm9sZGVyczwvc3Bhbj4gOiBzaW5jZSB0aGUgbGlzdCBvZiBmaWxlcyB1bmRlciB5 b3VyIFRleHRwYXR0ZXJuIGluc3RhbGxhdGlvbiBtYXkgcG90ZW50aWFsbHkgYmUgbGFyZ2Ug eW91IGNhbiBkZXNpZ25hdGUgc29tZSBmb2xkZXJzIHRvIGJlIGF1dG9tYXRpY2FsbHkgZXhj bHVkZWQsIHdoaWNoIG1ha2VzIHRoZSBmaWxlIGxpc3Qgc2hvcnRlci4gRGVmYXVsdDogPGNv ZGU+aW1hZ2VzLCBmaWxlcywgdG1wPC9jb2RlPi48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+aWdub3JlIGZpbGVzPC9zcGFuPiA6IHNvbWUgZmlsZXMsIHN1Y2ggYXMgdGhlIGVy cm9yX2xvZyBmaWxlIG9uIHR5cGljYWwgTGludXggaG9zdHMsIHBvcCB1cCB1bmFubm91bmNl ZCBhbmQgeW91IG1heSBwZXJpb2RpY2FsbHkgZGVsZXRlIHRoZW0uIE9uIGRldmVsb3BtZW50 IHNpdGVzIHRoaXMgY2FuIGNhdXNlIGV4Y2Vzc2l2ZSBhbGFybXMgZHVyaW5nIGRlYnVnZ2lu Zy4gVG8gbWluaW1pc2UgdGhpcywgeW91IGNhbiBsaXN0IGZpbGVzIGhlcmUgdGhhdCB5b3Ug YWx3YXlzIHdpc2ggdG8gaWdub3JlLiBObyBwYXRocyBhcmUgbmVjZXNzYXJ5OiBqdXN0IHN1 cHBseSBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZpbGUgbmFtZXMuIE5vdGUgdGhhdCB0 aGUgcHJvZ25vc3RpY3MgY2hlY2tzdW1zIGZpbGUgaXMgYWx3YXlzIHRyZWF0ZWQgYXMgYSBz cGVjaWFsIGNhc2Ugc28gdGhlcmUmIzgyMTc7cyBubyBuZWVkIHRvIGxpc3QgaXQgZXhwbGlj aXRseS48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+cHJvZ25vc3RpY3MgZGlyPC9z cGFuPiA6IFRoZSBmb2xkZXIgd2hlcmUgdGhlIHByb2dub3N0aWNzIGNoZWNrc3VtcyBmaWxl IHdpbGwgcmVzaWRlLiBUaGUgZGlyZWN0b3J5IG11c3QgYWxyZWFkeSBleGlzdCBhbmQgYmUg d3JpdGFibGUgb3IgeW91ciBjaG9zZW4gbG9jYXRpb24gd2lsbCBiZSBpZ25vcmVkLjwvbGk+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj51bmlxdWUgcHJlZml4PC9zcGFuPiA6IHByZWZp eCB0aGUgY2hlY2tzdW1zIGZpbGUgd2l0aCB0aGlzIHN0cmluZy4gVXNlZnVsIHRvIGF2b2lk IGZpbGVzIGNsYXNoaW5nIGlmIHlvdSBhcmUgdXNpbmcgdGhlIHNhbWUgKG5vbi1kb2Nyb290 KSBmb2xkZXIgdG8gc3RvcmUgdGhlIGNoZWNrc3VtcyBmcm9tIG1vcmUgdGhhbiBvbmUgc2l0 ZS48L2xpPgoJPC91bD4KCgk8aDIgaWQ9InNtZF9ob3dpdHdvcmtzIj5Ib3cgaXQgd29ya3M8 L2gyPgoKCTxwPklkZWFsbHksIHRoZSBwbHVnaW4gd291bGQgYmUgYSB0aW1lZCBzY3JpcHQg dGhhdCBydW5zIGV2ZXJ5IE4gc2Vjb25kcy4gQnV0IHRoYXQgcmVxdWlyZXMgYSBwYXJ0aWN1 bGFyIHBpZWNlIG9mIHNvZnR3YXJlIChjcm9uKSBvbiB5b3VyIGhvc3QgYW5kIHRoZXJlJiM4 MjE3O3Mgbm8gZ3VhcmFudGVlIGl0IGV4aXN0cy4gVGh1cyB0aGUgb25seSB0aGluZyB0aGF0 IGNhbiAmIzgyMTY7dHJpZ2dlciYjODIxNzsgdGhlIHBsdWdpbiBpcyBUZXh0cGF0dGVybiBp dHNlbGYuIFRoZSBwbHVnaW4gcnVucyBldmVyeSB0aW1lIHlvdSBpbnRlcmFjdCB3aXRoIHRo ZSBhZG1pbiBzaWRlLCBidXQgaWYgaXQgY2hlY2tlZCBhbGwgdGhlIGZpbGVzIGFnYWluc3Qg YWxsIHRoZSBjaGVja3N1bXMgeW91IGhhdmUgY2hvc2VuIG9uIGV2ZXJ5IGNsaWNrLCB5b3Vy IGFkbWluIHNpZGUgd291bGQgc2xvdyBkb3duIGEgbG90LiBUaGUgY29tcHJvbWlzZSBpcyB0 byBzcGVjaWZ5IGEgdGltZW91dCB2YWx1ZSBhbmQgYSBudW1iZXIgb2YgZmlsZXMgdG8gY2hl Y2suIFRoaXMgaXMgaG93IGl0IHdvcmtzOjwvcD4KCgk8b2w+CgkJPGxpPldoZW4geW91IGNs aWNrIGEgdGFiIG9yIGludGVyYWN0IHdpdGggdGhlIGFkbWluIHNpZGUsIHRoZSBwbHVnaW4g bG9va3MgYXQgd2hlbiB5b3UgPGVtPmxhc3Q8L2VtPiBjbGlja2VkIHNvbWV0aGluZyBhbmQg YXNrcyAmIzgyMjA7aXMgaXQgZ3JlYXRlciB0aGFuIE4gKHNlY29uZHMpPyYjODIyMTsgd2hl cmUgTiBpcyB0aGUgdmFsdWUgb2YgPGNvZGU+Q2hlY2sgZmlsZXMgKGF0IG1vc3QpIGV2ZXJ5 PC9jb2RlPiBvbiB0aGUgU2V0dXAgcGFuZWwuIEl0IGFsc28gY2hlY2tzIGlmIHRoZSBjdXJy ZW50IHRpbWUgb2YgZGF5IGlzIGJldHdlZW4gdGhlIHZhbHVlcyBzcGVjaWZpZWQgaW4gPGNv ZGU+Q2hlY2sgZmlsZXMgYmV0d2VlbjwvY29kZT48L2xpPgoJCTxsaT5JZiBzbywgaXQgZ3Jh YnMgYXMgbWFueSBmaWxlcyBhcyB5b3UgaGF2ZSBzcGVjaWZpZWQgaW4gPGNvZGU+Q2hlY2sg dGhpcyBtYW55IGZpbGVzIGVhY2ggdGltZTwvY29kZT4sIHRlc3RzIHRoZW0gYW5kIHJlc2V0 cyB0aGUgdGltZXIuIEl0IGtlZXBzIGEgbm90ZSBvZiBob3cgZmFyIGl0IGhhcyB3b3JrZWQg dGhyb3VnaCB5b3VyIGxpc3Qgb2YgZmlsZXMgYW5kIGNvbnRpbnVlcyB3aGVyZSBpdCBsZWZ0 IG9mZiBuZXh0IHRpbWUgaXQgcnVuczwvbGk+CgkJPGxpPklmIHRoZSB2YWx1ZSBvZiBOIGhh cyBub3QgeWV0IGJlZW4gcmVhY2hlZCwgaXQgZG9lcyBub3RoaW5nLCB0aHVzIHNhdmluZyB5 b3UgcHJlY2lvdXMgcHJvY2Vzc29yIGN5Y2xlczwvbGk+Cgk8L29sPgoKCTxwPkFsbCB0aGF0 IGlzIGdyZWF0IGlmIHlvdSYjODIxNztyZSBjb250aW51YWxseSB1c2luZyB0aGUgYWRtaW4g c2lkZSBhbmQgcHJvZHVjaW5nIGNsaWNrcyBmb3IgdGhlIHBsdWdpbiB0byBydW4uIEJ1dCBv bmNlIHlvdSBoYW5kIG92ZXIgdGhlIHNpdGUgdG8geW91ciBjbGllbnQsIHRoZXkgbWF5IG5v dCB1c2UgdGhlIGFkbWluIHNpZGUgYXMgb2Z0ZW4gYXMgeW91ICYjODIxMjsgaWYgYXQgYWxs LiBUaHVzIHlvdXIgZmlsZXMgd291bGQgcmFyZWx5L25ldmVyIGJlIGNoZWNrZWQuIFRvIGNv dW50ZXJhY3QgdGhpcywgeW91IGNhbiBhc2sgdGhlIHBsdWdpbiB0byByZXNwb25kIHRvIHB1 YmxpYyBzaWRlIGNsaWNrcyBhcyB3ZWxsIHNvIHRoYXQgYW55IHRpbWUgYSB2aXNpdG9yIChv ciBib3QpIGNyYXdscyB5b3VyIHBhZ2VzIHRoZSBwbHVnaW4gcnVucywgY2hlY2tzIGlmIHRo ZSB0aW1lb3V0IGhhcyBiZWVuIGV4Y2VlZGVkIGFuZCwgaWYgc28sIGNoZWNrcyBzb21lIGZp bGVzIGFuZCByZXNldHMgdGhlIHRpbWVyIChleGFjdGx5IGFzIGl0IHdvdWxkIGRvIG9uIHRo ZSBhZG1pbiBzaWRlKS48L3A+CgoJPHA+VGhpcyB3aWxsIHB1c2ggdGhlIHByb2Nlc3Npbmcg bG9hZCBvbnRvIHlvdXIgcHVibGljIHNpdGUsIGJ1dCBzaW5jZSBpdCYjODIxNztzIG9ubHkg cnVuIGF0IG1vc3Qgb25jZSBldmVyeSBOIHNlY29uZHMgYW5kIHlvdSBzcGVjaWZ5IGhvdyBt YW55IGZpbGVzIHRvIHJlYWQgZWFjaCB0aW1lLCB5b3UgY2FuIGNvbnRyb2wgaG93IG11Y2gg b2YgYW4gaW1wYWN0IGl0IGhhcyBieSBtYXRjaGluZyB0aGF0IHdpdGggeW91ciBkZXNpcmUg dG8ga25vdyAmIzgyMTY7aW5zdGFudGx5JiM4MjE3OyB0aGF0IHNvbWV0aGluZyBoYXMgY2hh bmdlZCB2ZXJzdXMgdGhlIHZvbHVtZSBvZiB0cmFmZmljIC8gdmlzaXRvcnMgdG8gdGhlIHNp dGUgYW5kIGhvdyBvZnRlbiB5b3Ugd2FudCB0byBkZWxheSB0aGVpciBicm93c2luZy48L3A+ CgoJPHA+VGhlIGdvb2QgdGhpbmcgYWJvdXQgYmVpbmcgYWJsZSB0byBzcGVjaWZ5IGJvdGgg dGhlIHRpbWVvdXQsIHRoZSB0aW1lIG9mIGRheSBhbmQgdGhlIHF1YW50aXR5IG9mIGZpbGVz IGlzIHRoYXQgeW91IGNhbiBkZXRlcm1pbmUgaWYgdGhlIHBsdWdpbiBydW5zICYjODIxNjts aXR0bGUgYW5kIG9mdGVuJiM4MjE3OyBvciB0YWtlcyBtb3JlIG9mIHlvdXIgcmVzb3VyY2Vz IHdoZW4gaXQgcnVucyBsZXNzIGZyZXF1ZW50bHkgb3IgZHVyaW5nIG9mZi1wZWFrIHRpbWVz LiBUaGUgcmVjb21tZW5kYXRpb24gaXMgdG8gcnVuIGZhaXJseSBmcmVxdWVudGx5ICYjODIx MjsgYmV0d2VlbiAxMCBhbmQgNjAgc2Vjb25kcyBpcyBnb29kICYjODIxMjsgYW5kIG9ubHkg cHJvY2Vzc2luZyBhIHNtYWxsIG51bWJlciBvZiBmaWxlcywgc2F5IDIwIG9yIDMwIGVhY2gg dGltZS48L3A+CgoJPHA+QXMgYW4gZXhhbXBsZSwgaWYgeW91IG1vbml0b3JlZCBldmVyeSBm aWxlIGluIGEgc3RvY2sgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gaW5zdGFsbGF0 aW9uIHdpdGggYSB0ZW4tc2Vjb25kIHRpbWVvdXQgYW5kIGNoZWNrZWQgMzAgZmlsZXMgZWFj aCB0aW1lLCB0aGVuICYjODIxMjsgYXNzdW1pbmcgeW91IGhhZCBhdCBsZWFzdCBmaXZlIGNs aWNrcyBwZXIgbWludXRlICYjODIxMjsgeW91IHdvdWxkIGN5Y2xlIHRocm91Z2ggdGhlbSBp biB1bmRlciBhIG1pbnV0ZS4gQW5kIHlvdXIgdmlzaXRvcnMgcHJvYmFibHkgd29uJiM4MjE3 O3Qgbm90aWNlIHRoZSBkZWxheS4gSWYgeW91IGhhdmUgZmV3ZXIgdGhhbiBmaXZlIGNsaWNr cyBwZXIgbWludXRlIHRoZW4gaXQgd2lsbCB0YWtlIGxvbmdlciB0byBjeWNsZSB0aHJvdWdo IHRoZSBmaWxlcyBhbmQgdGhlIGNoYW5jZSBvZiBjYXRjaGluZyBjaGFuZ2VzIGFzIHRoZXkg aGFwcGVuIHJlZHVjZXMuIEJ1dCBpZiB5b3UgcnVuIHRvbyBvZnRlbiAoc2F5LCBldmVyeSBv bmUgb3IgdHdvIHNlY29uZHMpIHlvdSBhcmUgd2FzdGluZyB5b3VyIHZpc2l0b3JzJiM4MjE3 OyB0aW1lLCB5b3VyIHNlcnZlciYjODIxNztzIHJlc291cmNlcyBhbmQgaW5jcmVhc2luZyB0 aGUgY2hhbmNlIG9mIHRoZSBwbHVnaW4gbWlzaW5mb3JtaW5nIHlvdSBvZiBhbHRlcmF0aW9u cyAoaXQgbWF5IHN0aWxsIGJlIHBhcnR3YXkgdGhyb3VnaCB0aGUgcHJldmlvdXMgcnVuIHdo ZW4gdGhlIG5leHQgb2NjdXJzIGFuZCB0cmlnZ2VyIGEgd2FybmluZykuPC9wPgoKCTxwPlRo ZSBwbHVnaW4gaXMgd3JpdHRlbiB0byBiZSBhcyBxdWljayBhbmQgZWZmaWNpZW50IGFzIGl0 IHBvc3NpYmx5IGNhbiB0byBhdm9pZCBhbnkgZGVsYXlzOyB0aGVyZSBtYXkgYmUgPGEgaHJl Zj0iI3NtZF9iZXR0ZXIiPnJvb20gZm9yIGltcHJvdmVtZW50PC9hPiBvZiBjb3Vyc2UhIFBs ZWFzZSBiZSBhd2FyZSB0aGF0IG5vIGRldGVjdGlvbiBzeXN0ZW0gaXMgZm9vbHByb29mIGFu ZCB0aGVyZSBpcyBubyBzdWJzdGl0dXRlIGZvciB2aWdpbGFuY2UgYW5kIDxhIGhyZWY9IiNz bWRfcHdzdHJlbmd0aCI+Z29vZCBwYXNzd29yZHM8L2E+IDotKTwvcD4KCgk8aDIgaWQ9InNt ZF9tb25maWxlcyI+TW9uaXRvcmluZyBmaWxlczwvaDI+CgoJPHA+Q2xpY2tpbmcgdGhlIDxl bT5GaWxlczwvZW0+IGJ1dHRvbiB0YWtlcyB5b3UgdG8gYSBzY3JlZW4gd2l0aCBhIHRleHRh cmVhIGluIGl0IHRoYXQgYWxsb3dzIHlvdSB0byBjaG9vc2UgdGhlIGZpbGVzIHlvdSB3aXNo IHRvIG1vbml0b3IuIEEgY291bnQgb2YgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIG1vbml0b3Jl ZCBmaWxlcyBpcyBzaG93biBhdCB0aGUgdG9wLCBhbG9uZyB3aXRoIHRoZSBudW1iZXIgb2Yg ZmlsZXMgYXZhaWxhYmxlIGluIHlvdXIgY2hvc2VuIGZpbGUgbG9jYXRpb24ocykuIFRoZSBm b2xsb3dpbmcgZmlsZXMgd2lsbCBiZSBpbiB0aGUgbGlzdDo8L3A+CgoJPG9sPgoJCTxsaT5h bGwgZmlsZXMgaW4gYWxsIHN1YmRpcmVjdG9yaWVzIGZyb20gYWxsIDxjb2RlPkZpbGUgbG9j YXRpb25zPC9jb2RlPiB5b3Ugc3BlY2lmaWVkIHRvIG1vbml0b3IgaW4gdGhlIFNldHVwIHNj cmVlbjwvbGk+CgkJPGxpPjxlbT5leGNlcHQ8L2VtPiBhbnkgZmlsZXMgYmVsb3cgdGhlIGRp cmVjdG9yaWVzIHlvdSBjaG9zZSB0byBleGNsdWRlPC9saT4KCQk8bGk+PGVtPmV4Y2VwdDwv ZW0+IGFueSBmaWxlIG5hbWVzIHlvdSBleHBsaWNpdGx5IGNob3NlIHRvIGlnbm9yZTwvbGk+ CgkJPGxpPjxlbT5leGNlcHQ8L2VtPiB0aGUgcHJvZ25vc3RpY3MgY2hlY2tzdW1zIGZpbGU8 L2xpPgoJPC9vbD4KCgk8cD5BdCBmaXJzdCwgbm8gZmlsZXMgd2lsbCBiZSBzZWxlY3RlZCBz byB5b3Ugd2lsbCBiZSBtb25pdG9yaW5nIG5vdGhpbmcuIENob29zZSB3aGljaCBmaWxlcyB5 b3Ugd2lzaCB0byBtb25pdG9yIGFuZCBzYXZlIHRoZSBjaGFuZ2VzLiBUaGUgcGx1Z2luIHdp bGwga2VlcCB0YWJzIG9uIHRob3NlIGZpbGVzLjwvcD4KCgk8cD5JZiB5b3UgaGF2ZSBlbGVj dGVkIHRvIHdhdGNoIGZvciBhZGRpdGlvbnMgdG8gdGhlIGZpbGUgc3lzdGVtLCBhbnkgZmls ZXMgaW4gYW55IG9mIHlvdXIgY2hvc2VuIGxvY2F0aW9ucyB0aGF0IGFyZSBub3QgY3VycmVu dGx5IGluIHRoZSBsaXN0IGF0IHRoZSB0aW1lIHlvdSBoaXQgPGVtPlNhdmU8L2VtPiAocmVn YXJkbGVzcyBvZiB3aGV0aGVyIHlvdSBhcmUgbW9uaXRvcmluZyB0aGVtIG9yIG5vdCkgd2ls bCB0cmlnZ2VyIGFuIGFsYXJtLiBHbyBhaGVhZCBhbmQgdHJ5IGl0OiBhZGQgc29tZSBmaWxl cyB0byB5b3VyIHNlcnZlciBvciBpbnN0YWxsIGEgbmV3IHRoZW1lIG9yIHNvbWV0aGluZyBh bmQgdGhlIHBsdWdpbiB3aWxsIHRlbGwgeW91LjwvcD4KCgk8aDIgaWQ9InNtZF9hY2siPkFj a25vd2xlZGdpbmcgYWxhcm1zPC9oMj4KCgk8cD5JZiBvbmUgb3IgbW9yZSBmaWxlcyBhcmUg YWx0ZXJlZCwgZGVsZXRlZCwgb3IgbmV3IGZpbGVzIGhhdmUgYmVlbiBhZGRlZCAoZGVwZW5k aW5nIG9uIHdoaWNoIGFjdGlvbnMgeW91IGhhdmUgZWxlY3RlZCB0byBtb25pdG9yKSB0aGUg cGx1Z2luIHdpbGwgZGV0ZWN0IHRoaXMgd2hlbiB0aGUgbmV4dCBhZG1pbi0gb3IgcHVibGlj LXNpZGUgY2xpY2sgaXMgcmVjZWl2ZWQgYW5kIHRoZSB0aW1lb3V0IGN5Y2xlIGlzIGV4Y2Vl ZGVkLiBJdCB3aWxsIHRoZW4gdGFrZSB0aGUgYWN0aW9uIHlvdSBjaG9zZS4gTm90ZSBvZiBj b3Vyc2UgdGhhdCB5b3Ugd29uJiM4MjE3O3Qgc2VlIHRoZSBhZG1pbi1zaWRlIHdhcm5pbmcg aWYgbm90IGxvZ2dlZCBpbiE8L3A+CgoJPHA+VGhlIG1lc3NhZ2UgZGVsaXZlcmVkIHRvIHlv dSBjb250YWlucyBhIGxpbmsgdG8gdGhlIEFja25vd2xlZGdlbWVudCBwYWdlICh3aGljaCBj YW4gYWxzbyBiZSByZWFjaGVkIGJ5IGNsaWNraW5nIHRoZSA8ZW0+QWxhcm1zPC9lbT4gYnV0 dG9uIGZyb20gdGhlIFByb2dub3N0aWNzIHRhYikuIFlvdSBhcmUgcHJlc2VudGVkIHdpdGgg YSBsaXN0IG9mIGFsbCB0aGUgZmlsZXN5c3RlbSBhbHRlcmF0aW9ucy4gSWYgeW91IGtub3cg YWJvdXQgdGhlIGNoYW5nZXMgJiM4MjEyOyBlLmcuIHlvdSBpbml0aWF0ZWQgdGhlbSBieSB1 cGxvYWRpbmcgc29tZSBuZXcgZmlsZSB2ZXJzaW9uKHMpICYjODIxMjsgdGhlbiB5b3UgY2Fu IGFja25vd2xlZ2RlIHRoaXMgYnkgcGxhY2luZyBhIGNoZWNrIG1hcmsgbmV4dCB0byB0aGUg ZmlsZXMgeW91IGtub3cgY29udGFpbiBsZWdpdGltYXRlIGFsdGVyYXRpb25zLiBXaGVuIHlv dSBjbGljayB0aGUgPGVtPkFja25vd2xlZGdlPC9lbT4gYnV0dG9uIHlvdSBzaWduaWZ5IHRv IHRoZSBwbHVnaW4gdGhhdCB5b3UgYWNjZXB0IHRoZSBjaGFuZ2VzLiBUaHVzIHRoZSBuZXcg ZmlsZShzKSBiZWNvbWUgdGhlIGJhc2VsaW5lLjwvcD4KCgk8cD5JZiB5b3UgYXJlIG1vbml0 b3JpbmcgZmlsZSBzeXN0ZW0gYWRkaXRpb25zLCB0aGUgYWN0IG9mIGFja25vd2xlZGdpbmcg dGhlIGFsYXJtIGluZGljYXRlcyB0aGF0IHlvdSBhcmUgaGFwcHkgZm9yIHRoZSBuZXcgZmls ZShzKSB0byBiZSBtb25pdG9yZWQuIFRoZXkgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGFkZGVk IHRvIHRoZSBsaXN0IG9mIEZpbGVzIHRvIG1vbml0b3IgKHlvdSBjYW4gdmVyaWZ5IHRoaXMg YnkgdmlzaXRpbmcgdGhlIFByb2dub3N0aWMgdGFiJiM4MjE3O3MgPGVtPkZpbGVzPC9lbT4g bGlzdCkuIElmIHlvdSBrbm93IGFib3V0IHNvbWUgb2YgdGhlIGZpbGVzIChwZXJoYXBzIHRo ZXkgYXJlIG5ldyBhZGRpdGlvbnMpIGFuZCB5b3UgZG9uJiM4MjE3O3Qgd2FudCB0byBtb25p dG9yIHRoZW0sIHNlbGVjdCB0aGUgZmlsZShzKSBhbmQgY2xpY2sgPGVtPklnbm9yZTwvZW0+ LiBUaGUgYWxhcm0gd2lsbCBiZSBhY2tub3dsZWRnZWQgYnV0IHlvdSB3aWxsIG5vdCBiZSBt b25pdG9yaW5nIHRoZSBmaWxlKHMpLjwvcD4KCgk8cD5JZiB5b3UgY2hvb3NlIG5vdCB0byBh Y2tub3dsZWRnZS9pZ25vcmUgc29tZSBvciBhbGwgb2YgdGhlIGZpbGVzLCB5b3Ugd2lsbCBj b250aW51ZSB0byBiZSBuYWdnZWQgYXQgeW91ciBkZXNpZ25hdGVkIGFsYXJtIGZyZXF1ZW5j eSB1bnRpbCB5b3UgYWNrbm93bGVkZ2UgdGhlIHByb2JsZW1zIG9yIGZpeCB0aGUgZmlsZXN5 c3RlbSB0byBpdHMgb3JpZ2luYWwgc3RhdGUuIERvIGJlYXIgaW4gbWluZCB3aGVuIGNvbmZp Z3VyaW5nIHRoZSBmcmVxdWVuY3kgdGhhdCBhbGVydGluZyB0b28gb2Z0ZW4gY2FuIGFsaWVu YXRlIHVzZXJzIGFuZCBtYWtlIGFuIGFsYXJtIHNpdHVhdGlvbiBsZXNzIGVmZmVjdGl2ZS48 L3A+CgoJPGgyIGlkPSJzbWRfY3NpIj5Gb3JlbnNpY3M8L2gyPgoKCTxwPjxzdHJvbmc+QmVm b3JlPC9zdHJvbmc+IGFja25vd2xlZGdpbmcgYWxhcm1zLCB5b3UgbWF5IGNob29zZSB0byBz ZW5kIG9mZiBmb3JlbnNpY3MgaW5mb3JtYXRpb24gdG8gYSBkZXNpZ25hdGVkIGUtbWFpbCBh ZGRyZXNzLiBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIHNlbnQ6PC9wPgoKCTx1bD4K CQk8bGk+RmlsZSBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIGNoYW5nZWQvYWRkZWQgZmlsZSwg c3VjaCBhcyBpdHMgc2l6ZSwgbW9kaWZpY2F0aW9uIHRpbWUsIGFuZCB1c2VyIC8gZ3JvdXAg b3duZXJzaGlwPC9saT4KCQk8bGk+VGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlcyB0aGVtc2Vs dmVzLCA8c3BhbiBjbGFzcz0iY2FwcyI+QkFTRTwvc3Bhbj4tNjQgZW5jb2RlZCBpbiB0aGUg Ym9keSBvZiB0aGUgZS1tYWlsPC9saT4KCQk8bGk+VGhlIG5hbWVzICZhbXA7IHBhdGhzIG9m IGFueSBkZWxldGVkIGZpbGVzPC9saT4KCQk8bGk+QW55IDxzcGFuIGNsYXNzPSJjYXBzIj5U WFA8L3NwYW4+IGxvZyBlbnRyaWVzIHRoYXQgb2NjdXJyZWQgZWl0aGVyIHNpZGUgb2YgdGhl IGFsYXJtIGNvbmRpdGlvbiAoPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gbG9nZ2lu ZyBtdXN0IGJlIGVuYWJsZWQgaW4geW91ciA8ZW0+QWRtaW4gLSZndDsgUHJlZmVyZW5jZXM8 L2VtPik8L2xpPgoJPC91bD4KCgk8cD5Zb3UgY2FuIHNlbGVjdCB3aGljaCBmaWxlIGluZm9y bWF0aW9uIHRvIHNlbmQgb2ZmIHZpYSB0aGUgY2hlY2sgYm94ZXMuIFRoZSBvbmVzIHlvdSBz ZWxlY3RlZCB3aWxsIHJlbWFpbiBzZWxlY3RlZCBmb3IgY29udmVuaWVuY2UgYWZ0ZXIgdGhl IGZvcmVuc2ljcyBoYXZlIGJlZW4gc2VudCwgc28geW91IG1heSBpbW1lZGlhdGVseSBoaXQg PGVtPkFja25vd2xlZGdlPC9lbT4gdG8gYWNrbm93bGVkZ2UgdGhlIG9uZXMgeW91IG5vdGlm aWVkLjwvcD4KCgk8aDIgaWQ9InNtZF9hZHZpY2UiPkFkdmljZTwvaDI+CgoJPHA+Q2xpY2tp bmcgdGhlIDxlbT5BZHZpY2U8L2VtPiBidXR0b24gd2lsbCBydW4gdGhyb3VnaCBhIHNlcmll cyBvZiBjaGVja3MgYW5kIG9mZmVyIHN1Z2dlc3Rpb25zIG9uIGhvdyB0byBoYXJkZW4geW91 ciBpbnN0YWxsYXRpb24uIFRoZSBtb3N0IGltcG9ydGFudCBvbmUgdG8gZm9sbG93IGlzIGlm IHlvdSBhcmUgd2FybmVkIGFib3V0IHRoZSBwcm9nbm9zdGljcyBjaGVja3N1bXMgZmlsZSBi ZWluZyBpbiBkb2Nyb290LiBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gbW92ZSBpdCBz b21ld2hlcmUgbm9uLXdlYiBhY2Nlc3NpYmxlLjwvcD4KCgk8aDIgaWQ9InNtZF9wd3N0cmVu Z3RoIj5QYXNzd29yZCBzdHJlbmd0aDwvaDI+CgoJPHA+QXMgYW4gYWlkIHRvIHlvdXIgdXNl cnMsIGEgcGFzc3dvcmQgc3RyZW5ndGggbWV0ZXIgaXMgYXV0b21hdGljYWxseSBpbmNsdWRl ZCBvbiB0aGUgPGVtPkFkbWluIC0mZ3Q7IFVzZXJzPC9lbT4gdGFiLiBXaGVuIHlvdSB0eXBl IHRvIGNoYW5nZSB5b3VyIHBhc3N3b3JkLCBhbiBpbmRpY2F0aW9uIG9mIHRoZSB0aW1lIGEg Y3VycmVudCBkZXNrdG9wIFBDIHdvdWxkIHRha2UgdG8gY3JhY2sgaXQgaXMgZ2l2ZW4uIEl0 JiM4MjE3O3MgYSB2ZXJ5IHJvdWdoIGNhbGN1bGF0aW9uLCBhbHRob3VnaCBNb29yZSYjODIx NztzIExhdyBpcyBhdXRvbWF0aWNhbGx5IHRha2VuIGludG8gYWNjb3VudCAodGh1cyB5b3Vy IHBhc3N3b3JkIHdpbGwgYmVjb21lIHdlYWtlciBvdmVyIHRpbWUgaWYgeW91IGRvIG5vdCBj aGFuZ2UgaXQpLjwvcD4KCgk8cD5Zb3Ugd2lsbCBkbyB5b3Vyc2VsZiBhbmQgeW91ciBzeXN0 ZW0gYSBodWdlIGZhdm91ciB0byBjaG9vc2UgYSBwYXNzcGhyYXNlIHRoYXQgdGFrZXMgaW4g ZXhjZXNzIG9mIGEgZmV3IHRob3VzYW5kIHllYXJzIHRvIGNyYWNrLiBUaGUgbG9uZ2VyIHRo ZSBiZXR0ZXIuIFJlbWVtYmVyIHRoaXMgaXMgYmFzZWQgb24gYSBicnV0ZSBmb3JjZSBhdHRh Y2sgdXNpbmcgYSBzaW5nbGUgZGVza3RvcCBQQyAmIzgyMTI7IG5vdCBhIG1haW5mcmFtZSBv ciBhIFBDIGZhcm0gJiM4MjEyOyBhbmQgaXQgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQg aG93IGVhc3kgdGhlIHBhc3N3b3JkIGlzIHRvIGd1ZXNzIGlmIHlvdSB1c2UgZGljdGlvbmFy eSB3b3JkcyBvciA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vYmxvZy9jaG9vc2lu Zy1hLWJyaWxsaWFudC1wYXNzd29yZCI+c29tZSBvdGhlciBiYWQgcGFzc3dvcmQ8L2E+LiBD aG9vc2UgYSBnb29kIG9uZSBhbmQgeW91IDxzdHJvbmc+c2lnbmlmaWNhbnRseTwvc3Ryb25n PiByZWR1Y2UgdGhlIHByb2JhYmlsaXR5IG9mIGEgc3VjY2Vzc2Z1bCBhdHRhY2suPC9wPgoK CTxoMiBpZD0ic21kX2JldHRlciI+SGVscCBtYWtlIHRoZSBwbHVnaW4gYmV0dGVyPC9oMj4K Cgk8cD5JZiBzbWRfcHJvZ25vc3RpY3MgZG9lcyBkZXRlY3Qgc29tZSByb2d1ZSBlbGVtZW50 cyBpbiB5b3VyIGZpbGVzeXN0ZW0sIHBsZWFzZSBjb25zaWRlciBzZW5kaW5nIHRoZSBmb3Jl bnNpY3MgdG8gcHJvZ25vc3RpY3MgW2F0XSBzdGVmZGF3c29uIFtkb3RdIGNvbSB3aXRoIGFz IG11Y2ggaW5mb3JtYXRpb24gYXMgeW91IHBvc3NpYmx5IGNhbi4gWW91IGNhbiBlaXRoZXIg ZG8gdGhpcyBhdXRvbWF0aWNhbGx5IGZyb20gd2l0aGluIHRoZSBwbHVnaW4gKHNlZSB0aGUg c2V0dXAgcGFnZSwgdGhvdWdoIG5vdGUgdGhlIHNlbnNpdGl2aXR5IG9mIHNvbWUgb2YgdGhl IGRhdGEgc2VudCkgb3IgY29weSBhbmQgcGFzdGUgcmVsZXZhbnQgaW5mb3JtYXRpb24gaW50 byBhbiBlLW1haWwuIFRoZSBzb3J0IG9mIHN0dWZmIHRoYXQgbWlnaHQgYmUgdXNlZnVsIGlz OjwvcD4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IChhbmQv b3Igc2VydmVyKSBsb2dzIGZvciB0aGUgdGltZSBvZiB0aGUgYXR0YWNrPC9saT4KCQk8bGk+ VGhlIGxpbmVzIG9mIHRoZSBmaWxlKHMpIHRoYXQgd2VyZSBhZmZlY3RlZCAob3IgdGhlIGZp bGVzIGluIHRoZWlyIGVudGlyZXR5KTwvbGk+CgkJPGxpPlRoZSBjb250ZW50IG9mIGFueSBh ZGRpdGlvbmFsIGxpbmVzIGFkZGVkIG9yIGFsdGVyZWQgaW4gdGhlIGZpbGVzPC9saT4KCQk8 bGk+WW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiwgPHNwYW4gY2xhc3M9ImNh cHMiPlBIUDwvc3Bhbj4sIE15U1FMIGFuZCBBcGFjaGUgdmVyc2lvbnM8L2xpPgoJCTxsaT5Z b3VyIGhvc3RlciBjb21wYW55IG5hbWU8L2xpPgoJPC91bD4KCgk8cD5hbmQgc28gb24uIEFu eSBhbmQgYWxsIGluZm9ybWF0aW9uIHdpbGwgYmUgdHJlYXRlZCBpbiB0aGUgc3RyaWN0ZXN0 IGNvbmZpZGVuY2Ugb2YgY291cnNlLiBBbmFseXNpbmcgdGhpcyBkYXRhIG1heSBhbGxvdyBt ZSB0byBpbXByb3ZlIHRoZSBwbHVnaW4gYW5kIHBlcmhhcHMgY2xvc2UgYW55IHNlY3VyaXR5 IGhvbGVzIGluIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGl0c2VsZiwgb3IgZXZl biBoZWxwIG1ha2UgdGhlIHBsdWdpbiBtb3JlIHByby1hY3RpdmUgYnkgZGV0ZWN0aW5nIHRo ZSB2YXJpb3VzIGtpbmRzIG9mIGF0dGFjayBpbiBwcm9ncmVzcyBhbmQgbWluaW1pc2luZyBk YW1hZ2UgdG8geW91ciBmaWxlIHN5c3RlbS4gVGhhbmtzIGluIGFkdmFuY2UgZm9yIHlvdSBo ZWxwLjwvcD4KCgk8aDIgaWQ9ImNoYW5nZWxvZyI+Q2hhbmdlbG9nPC9oMj4KCgk8dWw+CgkJ PGxpPjExIE5vdiAxMCB8IDAuMTAgfCBJbml0aWFsIHJlbGVhc2U8L2xpPgoJCTxsaT4xMSBO b3YgMTAgfCAwLjExIHwgQWRkZWQgSWdub3JlIGJ1dHRvbjwvbGk+CgkJPGxpPjEyIE5vdiAx MCB8IDAuMTIgfCBGaXhlZCB3aGl0ZSBzY3JlZW4gb2YgZGVhdGggb24gRmlsZXMgPGVtPlNh dmU8L2VtPiAoYmluYXJ5IGZpbGVzIGFyZSBub3cgbGVmdCB1bnByb2Nlc3NlZCkgOyBpbXBy b3ZlZCBwZXJmb3JtYW5jZSA7IGFkZGVkIGZpbGUgcXVhbnRpdHkgY2hlY2s8L2xpPgoJCTxs aT4xNSBOb3YgMTAgfCAwLjEzIHwgQWxhcm1zIHBhbmVsIG5vdyBhbHdheXMgZGlzcGxheXMg YWxsIGFsZXJ0cyBhbmQgZG9lc24mIzgyMTc7dCBpbnRlcmZlcmUgd2l0aCBmaWxlIGNoZWNr aW5nIHJvdGF0aW9uIDsgZml4ZWQgaW5jb3JyZWN0IDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8 L3NwYW4+IGluIGFja25vd2xlZGdlIG1lc3NhZ2VzICh0aGFua3MgdGhlYm9tYnNpdGUpIHRo b3VnaCBtdWx0aS1zaXRlIGluc3RhbGxhdGlvbnMgbWF5IHN0aWxsIGJlIHdyb25nIDsgcmVt b3ZlZCBkdW1iIGFkbWluLXNpZGUgPHNwYW4gY2xhc3M9ImNhcHMiPlNRTDwvc3Bhbj4gaW5q ZWN0aW9uLCBhZGRlZCA8Y29kZT5DaGVjayBmaWxlcyBiZXR3ZWVuPC9jb2RlPiBhbmQgPHNw YW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gdmVyc2lvbiBhZHZpY2UgKGFsbCB0aGFua3Mg cnV1ZCkgOyB0d2Vha2VkIGluamVjdGlvbiBkZXRlY3RvciA7IHJlZmFjdG9yZWQgZS1tYWls IGhlYWRlciBjb2RlPC9saT4KCTwvdWw+Cgo8L2Rpdj4KPCEtLSAqKiogQkVHSU4gUExVR0lO IENTUyAqKiogLS0+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiNzbWRfaGVscCB7IGxpbmUt aGVpZ2h0OjEuNSA7fQojc21kX2hlbHAgY29kZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6 IDEwNSUvMTMwJSAiQ291cmllciBOZXciLCBjb3VyaWVyLCBtb25vc3BhY2U7IGJhY2tncm91 bmQtY29sb3I6ICNmMGU2OGM7IGNvbG9yOiMzMzM7IH0KI3NtZF9oZWxwIGNvZGUuYmxvY2sg eyBmb250LXdlaWdodDpub3JtYWw7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IGRpc3BsYXk6 YmxvY2s7IG1hcmdpbjoxMHB4IDEwcHggMjBweDsgcGFkZGluZzoxMHB4OyB9CiNzbWRfaGVs cCBoMSB7IGZvbnQ6IDIwcHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0ZXh0 LWFsaWduOiBjZW50ZXI7IH0KI3NtZF9oZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNv bGlkIGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBmb250OiAxN3B4IEdlb3JnaWEsIHNhbnMt c2VyaWY7IH0KI3NtZF9oZWxwIGgzIHsgZm9udDogYm9sZCAxMnB4IEFyaWFsLCBzYW5zLXNl cmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAwO3RleHQtdHJhbnNm b3JtOiB1cHBlcmNhc2U7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQojc21kX2hlbHAg aDQgeyBmb250OiBib2xkIDExcHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5n OiAxcHg7IG1hcmdpbjogMTBweCAwIDAgO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH0K I3NtZF9oZWxwIC5hdG5tIHsgZm9udC13ZWlnaHQ6Ym9sZDsgfQojc21kX2hlbHAgLm1hbmQg eyBiYWNrZ3JvdW5kOiNlZWU7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IH0KI3NtZF9oZWxw IHRhYmxlIHsgd2lkdGg6OTAlOyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZy1ib3R0b206 MWVtOyB9CiNzbWRfaGVscCB0ZCwgI3NtZF9oZWxwIHRoIHsgYm9yZGVyOjFweCBzb2xpZCAj OTk5OyBwYWRkaW5nOi41ZW0gMDsgfQojc21kX2hlbHAgdWwgeyBsaXN0LXN0eWxlLXR5cGU6 c3F1YXJlOyB9CiNzbWRfaGVscCAuaW1wb3J0YW50IHsgY29sb3I6cmVkOyB9CiNzbWRfaGVs cCBsaSB7IG1hcmdpbjo1cHggMjBweCA1cHggMzBweDsgfQojc21kX2hlbHAgLmJyZWFrIHsg bWFyZ2luLXRvcDo1cHg7IH0KPC9zdHlsZT4KPCEtLSAqKiogRU5EIFBMVUdJTiBDU1MgKioq IC0tPgoiO3M6MzoibWQ1IjtzOjMyOiI2NmExN2M4NjVhMzdlMDhjZTZjNTQ5NmRiOTgyNWJm NiI7fQ==