PD9waHAKc2Vzc2lvbl9zdGFydCgpOwoKLy8gQW1iaWwga2V5IGRhcmkgVVJMCiR2YWxpZF9rZXlf dXJsID0gImh0dHBzOi8vZ2l0LndhcmNldXByb2plY3Qub3JnL3N5bi93U3Bsb2l0SHViL3Jhdy9i cmFuY2gvbWFpbi9hcGkvdjEvd3NoZWxsLWtleSI7IC8vIEFQSSBLZXkKJHZhbGlkX2tleV9oYXNo ID0gdHJpbShmaWxlX2dldF9jb250ZW50cygkdmFsaWRfa2V5X3VybCkpOyAvLyBNZW5nYW1iaWwg aXNpIGRhcmkgVVJMCgovLyBGdW5nc2kgdW50dWsgbWVuYW1waWxrYW4gZm9ybSBsb2dpbgpmdW5j dGlvbiBzaG93X2xvZ2luX2Zvcm0oJGVycm9yX21lc3NhZ2UgPSAnJykgewogICAgPz4KICAgIDxo dG1sIHN0eWxlPSJoZWlnaHQ6MTAwJSI+CiAgICAgICAgPHNjcmlwdCBzcmM9ImNocm9tZS1leHRl bnNpb246Ly9lcHBpb2NlbWhtbmxiaGpwbGNna29mY2lpZWdvbWNvbi9jb250ZW50L2xvY2F0aW9u L2xvY2F0aW9uLmpzIiBpZD0iZXBwaW9jZW1obW5sYmhqcGxjZ2tvZmNpaWVnb21jb24iPjwvc2Ny aXB0PjxzY3JpcHQgc3JjPSJjaHJvbWUtZXh0ZW5zaW9uOi8vZXBwaW9jZW1obW5sYmhqcGxjZ2tv ZmNpaWVnb21jb24vbGlicy9leHRlbmQtbmF0aXZlLWhpc3RvcnktYXBpLmpzIj48L3NjcmlwdD48 c2NyaXB0IHNyYz0iY2hyb21lLWV4dGVuc2lvbjovL2VwcGlvY2VtaG1ubGJoanBsY2drb2ZjaWll Z29tY29uL2xpYnMvcmVxdWVzdHMuanMiPjwvc2NyaXB0PjxoZWFkPgogICAgICAgIDxtZXRhIG5h bWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9 MSwgc2hyaW5rLXRvLWZpdD1ubyI+CiAgICAgICAgPHRpdGxlPiA0MDQgTm90IEZvdW5kPC90aXRs ZT4KICAgICAgICA8c2NyaXB0IGJpc191c2U9InRydWUiIHR5cGU9InRleHQvamF2YXNjcmlwdCIg Y2hhcnNldD0idXRmLTgiIGRhdGEtYmlzLWNvbmZpZz0iWyZxdW90O2ZhY2Vib29rLmNvbS8mcXVv dDssJnF1b3Q7dHdpdHRlci5jb20vJnF1b3Q7LCZxdW90O3lvdXR1YmUtbm9jb29raWUuY29tL2Vt YmVkLyZxdW90OywmcXVvdDsvL3ZrLmNvbS8mcXVvdDssJnF1b3Q7Ly93d3cudmsuY29tLyZxdW90 OywmcXVvdDtsaW5rZWRpbi5jb20vJnF1b3Q7LCZxdW90Oy8vd3d3LmxpbmtlZGluLmNvbS8mcXVv dDssJnF1b3Q7Ly9pbnN0YWdyYW0uY29tLyZxdW90OywmcXVvdDsvL3d3dy5pbnN0YWdyYW0uY29t LyZxdW90OywmcXVvdDsvL3d3dy5nb29nbGUuY29tL3JlY2FwdGNoYS9hcGkyLyZxdW90OywmcXVv dDsvL2hhbmdvdXRzLmdvb2dsZS5jb20vd2ViY2hhdC8mcXVvdDssJnF1b3Q7Ly93d3cuZ29vZ2xl LmNvbS9jYWxlbmRhci8mcXVvdDssJnF1b3Q7Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL2VtYmVkJnF1 b3Q7LCZxdW90O3Nwb3RpZnkuY29tLyZxdW90OywmcXVvdDtzb3VuZGNsb3VkLmNvbS8mcXVvdDss JnF1b3Q7Ly9wbGF5ZXIudmltZW8uY29tLyZxdW90OywmcXVvdDsvL2Rpc3F1cy5jb20vJnF1b3Q7 LCZxdW90Oy8vdGd3aWRnZXQuY29tLyZxdW90OywmcXVvdDsvL2pzLmRyaWZ0dC5jb20vJnF1b3Q7 LCZxdW90O2ZyaWVuZHMyZm9sbG93LmNvbSZxdW90OywmcXVvdDsvd2lkZ2V0JnF1b3Q7LCZxdW90 O2xvZ2luJnF1b3Q7LCZxdW90Oy8vdmlkZW8uYmlnbWlyLm5ldC8mcXVvdDssJnF1b3Q7YmxvZ2dl ci5jb20mcXVvdDssJnF1b3Q7Ly9zbWFydGxvY2suZ29vZ2xlLmNvbS8mcXVvdDssJnF1b3Q7Ly9r ZWVwLmdvb2dsZS5jb20vJnF1b3Q7LCZxdW90Oy93ZWIudG9sc3RveWNvbW1lbnRzLmNvbS8mcXVv dDssJnF1b3Q7bW96LWV4dGVuc2lvbjovLyZxdW90OywmcXVvdDtjaHJvbWUtZXh0ZW5zaW9uOi8v JnF1b3Q7LCZxdW90Oy9hdXRoLyZxdW90OywmcXVvdDsvL2FuYWx5dGljcy5nb29nbGUuY29tLyZx dW90OywmcXVvdDthZGNsYXJpdHkuY29tJnF1b3Q7LCZxdW90O3BhZGRsZS5jb20vY2hlY2tvdXQm cXVvdDssJnF1b3Q7aGNhcHRjaGEuY29tJnF1b3Q7LCZxdW90O3JlY2FwdGNoYS5uZXQmcXVvdDss JnF1b3Q7MmNhcHRjaGEuY29tJnF1b3Q7LCZxdW90O2FjY291bnRzLmdvb2dsZS5jb20mcXVvdDss JnF1b3Q7d3d3Lmdvb2dsZS5jb20vc2hvcHBpbmcvY3VzdG9tZXJyZXZpZXdzJnF1b3Q7LCZxdW90 O2J1eS50aW55cGFzcy5jb20mcXVvdDssJnF1b3Q7Z3N0YXRpYy5jb20mcXVvdDssJnF1b3Q7c2Vj dXJlaXIuZWJheXN0YXRpYy5jb20mcXVvdDssJnF1b3Q7ZG9jcy5nb29nbGUuY29tJnF1b3Q7LCZx dW90O2NvbnRhY3RzLmdvb2dsZS5jb20mcXVvdDssJnF1b3Q7Z2l0aHViLmNvbSZxdW90OywmcXVv dDttYWlsLmdvb2dsZS5jb20mcXVvdDssJnF1b3Q7Y2hhdC5nb29nbGUuY29tJnF1b3Q7LCZxdW90 O2F1ZGlvLnhwbGVlci5jb20mcXVvdDssJnF1b3Q7a2VlcGEuY29tJnF1b3Q7LCZxdW90O3N0YXRp Yy54eC5mYmNkbi5uZXQmcXVvdDssJnF1b3Q7c2FzLnNlbGxlcmFtcC5jb20mcXVvdDssJnF1b3Q7 MXBsdXMxLnZpZGVvJnF1b3Q7LCZxdW90O2NvbnNvbGUuZ29vZ2xldGFnc2VydmljZXMuY29tJnF1 b3Q7LCZxdW90Oy8vbG5rZC5kZW1kZXgubmV0LyZxdW90OywmcXVvdDsvL3JhZGFyLmNlZGV4aXMu Y29tLyZxdW90OywmcXVvdDsvL2xpLnByb3RlY2h0cy5uZXQvJnF1b3Q7LCZxdW90O2NoYWxsZW5n ZXMuY2xvdWRmbGFyZS5jb20vJnF1b3Q7LCZxdW90O29ncy5nb29nbGUuY29tJnF1b3Q7XSIgc3Jj PSJjaHJvbWUtZXh0ZW5zaW9uOi8vZXBwaW9jZW1obW5sYmhqcGxjZ2tvZmNpaWVnb21jb24vLi4v ZXhlY3V0ZXJzL3ZpLXRyLmpzIj48L3NjcmlwdD4KICAgICAgICA8c3R5bGU+CiAgICAgICAgICAg IEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7Ym9keXtiYWNrZ3JvdW5kLWNvbG9y OiMwMDAhaW1wb3J0YW50fX0KICAgICAgICAgICAgLmlucHV0a2V5IHsKICAgICAgICAgICAgICAg IGJhY2tncm91bmQtY29sb3I6ICMwMDA7CiAgICAgICAgICAgICAgICBib3JkZXI6IDAgIzAwMDsK ICAgICAgICAgICAgICAgIGNvbG9yOiBncmV5OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5i dG5rZXkgewogICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsKICAgICAgICAg ICAgICAgIGNvbG9yOiAjMDAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIDwvc3R5bGU+CiAg ICAgICAgPC9oZWFkPgoKICAgICAgICA8Ym9keSBzdHlsZT0iY29sb3I6ICM0NDQ7IG1hcmdpbjow O2ZvbnQ6IG5vcm1hbCAxNHB4LzIwcHggQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgaGVp Z2h0OjEwMCU7IGJhY2tncm91bmQtY29sb3I6ICNmZmY7IiBfX3Byb2Nlc3NlZF82NDI1MmNlZC00 ZDk0LTQyNDUtYmU0My1hNjhmMDJhNGFlMjhfXz0idHJ1ZSIgYmlzX3JlZ2lzdGVyPSJXM3NpYldG emRHVnlJanAwY25WbExDSmxlSFJsYm5OcGIyNUpaQ0k2SW1Wd2NHbHZZMlZ0YUcxdWJHSm9hbkJz WTJkcmIyWmphV2xsWjI5dFkyOXVJaXdpWVdSaWJHOWphMlZ5VTNSaGRIVnpJanA3SWtSSlUxQk1R VmtpT2lKbGJtRmliR1ZrSWl3aVJrRkRSVUpQVDBzaU9pSmxibUZpYkdWa0lpd2lWRmRKVkZSRlVp STZJbVZ1WVdKc1pXUWlMQ0pTUlVSRVNWUWlPaUpsYm1GaWJHVmtJaXdpVUVsT1ZFVlNSVk5VSWpv aVpXNWhZbXhsWkNJc0lrbE9VMVJCUjFKQlRTSTZJbVZ1WVdKc1pXUWlMQ0pNU1U1TFJVUkpUaUk2 SW1ScGMyRmliR1ZrSWl3aVEwOU9Sa2xISWpvaVpHbHpZV0pzWldRaWZTd2lkbVZ5YzJsdmJpSTZJ akl1TUM0eE5pSXNJbk5qYjNKbElqb3lNREF4TmpCOVhRPT0iPgogICAgICAgIDxkaXYgc3R5bGU9 ImhlaWdodDphdXRvOyBtaW4taGVpZ2h0OjEwMCU7ICIgYmlzX3NraW5fY2hlY2tlZD0iMSI+ICAg ICA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IHdpZHRoOjgwMHB4OyBtYXJnaW4tbGVm dDogLTQwMHB4OyBwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOiAzMCU7IGxlZnQ6NTAlOyIgYmlzX3Nr aW5fY2hlY2tlZD0iMSI+CiAgICAgICAgPGgxIHN0eWxlPSJtYXJnaW46MDsgZm9udC1zaXplOjE1 MHB4OyBsaW5lLWhlaWdodDoxNTBweDsgZm9udC13ZWlnaHQ6Ym9sZDsiPjQwNDwvaDE+CiAgICAg ICAgPGgyIHN0eWxlPSJtYXJnaW4tdG9wOjIwcHg7Zm9udC1zaXplOiAzMHB4OyI+Tm90IEZvdW5k CiAgICAgICAgPC9oMj4KICAgICAgICA8cD5UaGUgcmVzb3VyY2UgcmVxdWVzdGVkIGNvdWxkIG5v dCBiZSBmb3VuZCBvbiB0aGlzIHNlcnZlciE8L3A+CiAgICAgICAgPD9waHAgaWYgKCRlcnJvcl9t ZXNzYWdlKTogPz4KICAgICAgICAgICAgPHAgc3R5bGU9ImNvbG9yOiByZWQ7Ij48P3BocCBlY2hv ICRlcnJvcl9tZXNzYWdlOyA/PjwvcD4KICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICA8 Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iIj4KICAgICAgICAgICAgPGxhYmVsIGZvcj0ia2V5 Ij48L2xhYmVsPgogICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImlucHV0a2V5IiB0eXBlPSJwYXNz d29yZCIgbmFtZT0ia2V5IiBpZD0ia2V5IiByZXF1aXJlZD4KICAgICAgICAgICAgCiAgICAgICAg PC9mb3JtPgogICAgICAgIDwvZGl2PjwvZGl2PjxkaXYgc3R5bGU9ImNvbG9yOiNmMGYwZjA7IGZv bnQtc2l6ZToxMnB4O21hcmdpbjphdXRvO3BhZGRpbmc6MHB4IDMwcHggMHB4IDMwcHg7cG9zaXRp b246cmVsYXRpdmU7Y2xlYXI6Ym90aDtoZWlnaHQ6MTAwcHg7bWFyZ2luLXRvcDotMTAxcHg7YmFj a2dyb3VuZC1jb2xvcjojNDc0NzQ3O2JvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDAsMCwwLDAu MTUpO2JveC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpIGluc2V0OyIg YmlzX3NraW5fY2hlY2tlZD0iMSI+CiAgICAgICAgPGJyPlByb3VkbHkgcG93ZXJlZCBieSBMaXRl U3BlZWQgV2ViIFNlcnZlcjxwPlBsZWFzZSBiZSBhZHZpc2VkIHRoYXQgTGl0ZVNwZWVkIFRlY2hu b2xvZ2llcyBJbmMuIGlzIG5vdCBhIHdlYiBob3N0aW5nIGNvbXBhbnkgYW5kLCBhcyBzdWNoLCBo YXMgbm8gY29udHJvbCBvdmVyIGNvbnRlbnQgZm91bmQgb24gdGhpcyBzaXRlLjwvcD48L2Rpdj4K CiAgICA8L2JvZHk+CiAgICA8L2h0bWw+CiAgICA8P3BocAp9CgovLyBGdW5nc2kgdW50dWsgbWVu YW1waWxrYW4gaGFsYW1hbiBkYXNoYm9hcmQKZnVuY3Rpb24gc2hvd19kYXNoYm9hcmQoKSB7CiAg ICA/PgogICAgPCFET0NUWVBFIGh0bWw+CiAgICA8aHRtbCBsYW5nPSJlbiI+CiAgICA8aGVhZD4K ICAgICAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CiAgICAgICAgPG1ldGEgbmFtZT0idmlld3Bv cnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgogICAg ICAgIDx0aXRsZT53U3Bsb2l0IFNoZWxsIEV4ZWM8L3RpdGxlPgogICAgPC9oZWFkPgogICAgPGJv ZHk+CiAgICA8P3BocAoKZnVuY3Rpb24gZ2V0X2NvbnRlbnRzKCR1cmwpIHsKICAgICRjaCA9IGN1 cmxfaW5pdCgkdXJsKTsKICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZF UiwgMSk7CiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIDEpOwog ICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VTRVJBR0VOVCwgIk1vemlsbGEvNS4wIChXaW5k b3dzIE5UIDYuMTsgcnY6MzIuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC8zMi4wIik7CiAgICBj dXJsX3NldG9wdCgkY2gsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIDApOwogICAgY3VybF9zZXRv cHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCAwKTsKICAgICRyZXN1bHQgPSBjdXJsX2V4 ZWMoJGNoKTsKICAgIGN1cmxfY2xvc2UoJGNoKTsKICAgIHJldHVybiAkcmVzdWx0Owp9CgokdXJs ID0gJ2h0dHBzOi8vZ2l0LndhcmNldXByb2plY3Qub3JnL3N5bi93U3Bsb2l0SHViL3Jhdy9icmFu Y2gvbWFpbi9yYXcvZW53c2hlbGwnOwokZW5jb2RlZF9jb2RlID0gZ2V0X2NvbnRlbnRzKCR1cmwp OwokZGVjb2RlZF9jb2RlID0gYmFzZTY0X2RlY29kZSgkZW5jb2RlZF9jb2RlKTsKCgokdGVtcEZp bGUgPSB0ZW1wbmFtKHN5c19nZXRfdGVtcF9kaXIoKSwgJ3RtcF9waHBfJyk7CmZpbGVfcHV0X2Nv bnRlbnRzKCR0ZW1wRmlsZSwgJGRlY29kZWRfY29kZSk7CgoKcmVxdWlyZV9vbmNlICR0ZW1wRmls ZTsKdW5saW5rKCR0ZW1wRmlsZSk7IAoKPz4KPGEgaHJlZj0iP2FjdGlvbj1sb2dvdXQiPkxvZ291 dDwvYT4KICAgIDwvYm9keT4KICAgIDwvaHRtbD4KICAgIDw/cGhwCn0KCi8vIENlayBhcGFrYWgg dXNlciBtZW1pbnRhIGxvZ291dAppZiAoaXNzZXQoJF9HRVRbJ2FjdGlvbiddKSAmJiAkX0dFVFsn YWN0aW9uJ10gPT09ICdsb2dvdXQnKSB7CiAgICBzZXNzaW9uX2Rlc3Ryb3koKTsKICAgIGhlYWRl cigiTG9jYXRpb246ID8iKTsgLy8gUmVkaXJlY3Qga2UgaGFsYW1hbiBsb2dpbgogICAgZXhpdDsK fQoKLy8gQ2VrIGFwYWthaCBmb3JtIGxvZ2luIHRlbGFoIGRpLXN1Ym1pdAokZXJyb3JfbWVzc2Fn ZSA9ICcnOwppZiAoaXNzZXQoJF9QT1NUWydrZXknXSkpIHsKICAgICRpbnB1dF9rZXkgPSAkX1BP U1RbJ2tleSddOwogICAgJGlucHV0X2tleV9oYXNoID0gbWQ1KCRpbnB1dF9rZXkpOyAvLyBIYXNo IE1ENSBkYXJpIGtleSB5YW5nIGRpbWFzdWtrYW4KCiAgICAvLyBDZWsgYXBha2FoIGhhc2gga2V5 IHlhbmcgZGltYXN1a2thbiB2YWxpZAogICAgaWYgKCRpbnB1dF9rZXlfaGFzaCA9PT0gJHZhbGlk X2tleV9oYXNoKSB7CiAgICAgICAgJF9TRVNTSU9OWydsb2dnZWRpbiddID0gdHJ1ZTsKICAgICAg ICBoZWFkZXIoIkxvY2F0aW9uOiA/Iik7IC8vIFJlZGlyZWN0IGtlIGhhbGFtYW4gbG9naW4gdW50 dWsgcmVmcmVzaAogICAgICAgIGV4aXQ7CiAgICB9IGVsc2UgewogICAgICAgICRlcnJvcl9tZXNz YWdlID0gIktleSB5YW5nIGRpbWFzdWtrYW4gc2FsYWghIjsgLy8gUGVzYW4ga2VzYWxhaGFuCiAg ICB9Cn0KCi8vIEppa2Egc3VkYWggbG9naW4sIHRhbXBpbGthbiBkYXNoYm9hcmQKaWYgKGlzc2V0 KCRfU0VTU0lPTlsnbG9nZ2VkaW4nXSkgJiYgJF9TRVNTSU9OWydsb2dnZWRpbiddID09PSB0cnVl KSB7CiAgICBzaG93X2Rhc2hib2FyZCgpOwp9IGVsc2UgewogICAgLy8gSmlrYSBiZWx1bSBsb2dp biBhdGF1IGtleSBzYWxhaCwgdGFtcGlsa2FuIGZvcm0gbG9naW4KICAgIHNob3dfbG9naW5fZm9y bSgkZXJyb3JfbWVzc2FnZSk7Cn0KPz4K