Zum Inhalt springen

4 Gewinnt Ultra PRO: Unterschied zwischen den Versionen

Aus MOOCsWiki Staging
K Schützte „4 Gewinnt Ultra PRO“: Auto-Spielschutz-Admin-only ([Bearbeiten=Nur Administratoren erlauben] (unbeschränkt) [Verschieben=Nur Administratoren erlauben] (unbeschränkt))
Spiele-ZIP-Metadaten in Diskussion verschoben
 
Zeile 6: Zeile 6:
PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImRlIj4KPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+CiAgPHRpdGxlPjQgR2V3aW5udDogU3RyYXRlZ2llLUFyZW5hPC90aXRsZT4KICAKPHN0eWxlPgoqe2JveC1zaXppbmc6Ym9yZGVyLWJveH1odG1sLGJvZHl7bWFyZ2luOjA7bWluLWhlaWdodDoxMDAlO2ZvbnQtZmFtaWx5OnN5c3RlbS11aSwtYXBwbGUtc3lzdGVtLFNlZ29lIFVJLFJvYm90byxBcmlhbCxzYW5zLXNlcmlmO2JhY2tncm91bmQ6cmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAyMCUgMTAlLCMzNDRjYTAgMCwjMTExYTNjIDM4JSwjMDcxMDIzIDEwMCUpO2NvbG9yOiNmN2Y5ZmZ9YnV0dG9uLHNlbGVjdCxpbnB1dHtmb250OmluaGVyaXR9YnV0dG9uLHNlbGVjdHtib3JkZXI6MH1idXR0b257Y3Vyc29yOnBvaW50ZXJ9YnV0dG9uOmZvY3VzLXZpc2libGUsc2VsZWN0OmZvY3VzLXZpc2libGUsaW5wdXQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjRweCBzb2xpZCAjZmZmMjZhO291dGxpbmUtb2Zmc2V0OjNweH0uYXBwe21pbi1oZWlnaHQ6MTAwdmg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOmNsYW1wKDEycHgsMnZ3LDI4cHgpO2dhcDoxNnB4fS50b3BiYXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTZweH0ua2lja2Vye21hcmdpbjowIDAgNHB4O2NvbG9yOiM5ZWQ2ZmY7Zm9udC13ZWlnaHQ6ODAwO2xldHRlci1zcGFjaW5nOi4wOGVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtmb250LXNpemU6Ljc4cmVtfWgxLGgyLGgzLHB7bWFyZ2luLXRvcDowfWgxe2ZvbnQtc2l6ZTpjbGFtcCgxLjQ1cmVtLDMuNHZ3LDNyZW0pO21hcmdpbi1ib3R0b206MH0udG9wLWFjdGlvbnMsLnN0YXJ0LWFjdGlvbnMsLmdhbWUtYWN0aW9uc3tkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7ZmxleC13cmFwOndyYXB9Lm1haW57ZmxleDoxO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXJ9LnBhbmVse3dpZHRoOm1pbigxMTIwcHgsMTAwJSk7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xMSk7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4yMik7Ym94LXNoYWRvdzowIDIwcHggNTVweCByZ2JhKDAsMCwwLC4zKTtib3JkZXItcmFkaXVzOjI4cHg7cGFkZGluZzpjbGFtcCgxNnB4LDIuNnZ3LDMycHgpO2JhY2tkcm9wLWZpbHRlcjpibHVyKDEycHgpfS5oaWRkZW57ZGlzcGxheTpub25lIWltcG9ydGFudH0uaGVyb3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvO2dhcDoyMHB4O2FsaWduLWl0ZW1zOmNlbnRlcn0uYmFkZ2V7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZDojZmZlNzZhO2NvbG9yOiMxNzIwNDQ7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjhweCAxM3B4O2ZvbnQtd2VpZ2h0OjkwMH0uaW50cm97Zm9udC1zaXplOjEuMXJlbTtjb2xvcjojZGZlOGZmO21heC13aWR0aDo3ODBweH0udG9rZW4tc3RhY2t7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMiw3MnB4KTtnYXA6MTBweH0udG9rZW4tc3RhY2sgc3Bhbnt3aWR0aDo3MnB4O2hlaWdodDo3MnB4O2JvcmRlci1yYWRpdXM6NTAlO2JveC1zaGFkb3c6aW5zZXQgMCAtOXB4IDAgcmdiYSgwLDAsMCwuMTgpLDAgMTBweCAyNHB4IHJnYmEoMCwwLDAsLjI1KX0udG9rZW4tc3RhY2sgc3BhbjpudGgtY2hpbGQoMSl7YmFja2dyb3VuZDojZmZjZjM2fS50b2tlbi1zdGFjayBzcGFuOm50aC1jaGlsZCgyKXtiYWNrZ3JvdW5kOiNmZjVjN2F9LnRva2VuLXN0YWNrIHNwYW46bnRoLWNoaWxkKDMpe2JhY2tncm91bmQ6IzUwZTNhNH0udG9rZW4tc3RhY2sgc3BhbjpudGgtY2hpbGQoNCl7YmFja2dyb3VuZDojNzhiN2ZmfS5zZXR0aW5ncy1ncmlke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDQsMWZyKTtnYXA6MTRweDttYXJnaW46MjJweCAwfS5zZXR0aW5ne2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweDtmb250LXdlaWdodDo4MDB9LnNldHRpbmcgc2VsZWN0e3dpZHRoOjEwMCU7cGFkZGluZzoxM3B4IDE0cHg7Ym9yZGVyLXJhZGl1czoxNXB4O2JhY2tncm91bmQ6I2Y3ZjlmZjtjb2xvcjojMTExYTNjO2ZvbnQtd2VpZ2h0Ojc1MH0uc3dpdGNoZXN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDoxOHB4O21hcmdpbi1ib3R0b206MjJweH0uc3dpdGNoZXMgbGFiZWx7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xKTtwYWRkaW5nOjEycHggMTRweDtib3JkZXItcmFkaXVzOjE2cHh9LnByaW1hcnktYnRuLC5zZWNvbmRhcnktYnRuLC5naG9zdC1idG57bWluLWhlaWdodDo0OHB4O2JvcmRlci1yYWRpdXM6MTZweDtwYWRkaW5nOjEycHggMThweDtmb250LXdlaWdodDo5MDB9LnByaW1hcnktYnRue2JhY2tncm91bmQ6I2ZmZTc2YTtjb2xvcjojMTExYTNjfS5zZWNvbmRhcnktYnRue2JhY2tncm91bmQ6Izc4YjdmZjtjb2xvcjojMDcxMDIzfS5naG9zdC1idG57YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xNCk7Y29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjM1KX0ucnVsZXN7bWFyZ2luLXRvcDoxOHB4O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMik7Ym9yZGVyLXJhZGl1czoxOHB4O3BhZGRpbmc6MTZweH0uZ2FtZS1zY3JlZW57d2lkdGg6bWluKDEyNDBweCwxMDAlKTtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCgyNTBweCwzMjBweCkgMWZyO2dhcDoxNnB4O2FsaWduLWl0ZW1zOnN0YXJ0fS5zaWRlYmFye3dpZHRoOjEwMCU7cG9zaXRpb246c3RpY2t5O3RvcDoxMnB4fS5zdGF0dXMtYm94e2ZvbnQtc2l6ZToxLjFyZW07Zm9udC13ZWlnaHQ6OTAwO2JhY2tncm91bmQ6I2Y3ZjlmZjtjb2xvcjojMTExYTNjO2JvcmRlci1yYWRpdXM6MThweDtwYWRkaW5nOjE2cHg7bWFyZ2luLWJvdHRvbToxNHB4fS5zY29yZS1ib2FyZHtkaXNwbGF5OmdyaWQ7Z2FwOjEwcHh9LnNjb3JlLXJvd3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xKTtib3JkZXItcmFkaXVzOjE2cHg7cGFkZGluZzoxMXB4IDEycHh9LnBsYXllci1jaGlwe2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXdlaWdodDo5MDB9LmRvdHt3aWR0aDoyMnB4O2hlaWdodDoyMnB4O2JvcmRlci1yYWRpdXM6NTAlO2JveC1zaGFkb3c6aW5zZXQgMCAtNHB4IDAgcmdiYSgwLDAsMCwuMTgpfS5hY3RpdmUtcm93e291dGxpbmU6M3B4IHNvbGlkICNmZmU3NmF9Lm1ldGVye21hcmdpbjoxOHB4IDB9Lm1ldGVyIHNwYW57Zm9udC13ZWlnaHQ6ODAwfS5tZXRlci10cmFja3toZWlnaHQ6MTRweDtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjE4KTtib3JkZXItcmFkaXVzOjk5OXB4O292ZXJmbG93OmhpZGRlbjttYXJnaW4tdG9wOjdweH0ubWV0ZXItZmlsbHtoZWlnaHQ6MTAwJTt3aWR0aDowO2JhY2tncm91bmQ6I2ZmZTc2YTtib3JkZXItcmFkaXVzOjk5OXB4O3RyYW5zaXRpb246d2lkdGggLjI1c30uaGludC1ib3h7bWFyZ2luLXRvcDoxNHB4O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMjMpO2JvcmRlci1yYWRpdXM6MTZweDtwYWRkaW5nOjE0cHg7Y29sb3I6I2VhZjFmZn0uYm9hcmQtd3JhcHtkaXNwbGF5OmdyaWQ7Z2FwOjEwcHh9LmNvbHVtbi1jb250cm9sc3tkaXNwbGF5OmdyaWQ7Z2FwOjhweH0uY29sdW1uLWJ0bnttaW4taGVpZ2h0OjQ0cHg7Ym9yZGVyLXJhZGl1czoxNHB4O2JhY2tncm91bmQ6I2ZmZTc2YTtjb2xvcjojMTExYTNjO2ZvbnQtd2VpZ2h0Ojk1MH0uY29sdW1uLWJ0bjpkaXNhYmxlZHtvcGFjaXR5Oi4zNTtjdXJzb3I6bm90LWFsbG93ZWR9LmJvYXJke2Rpc3BsYXk6Z3JpZDtnYXA6OHB4O2JhY2tncm91bmQ6IzEyNGRhNDtwYWRkaW5nOmNsYW1wKDhweCwxLjR2dywxNnB4KTtib3JkZXItcmFkaXVzOjI0cHg7Ym94LXNoYWRvdzppbnNldCAwIC0xMnB4IDAgcmdiYSgwLDAsMCwuMTgpfS5jZWxse2FzcGVjdC1yYXRpbzoxLzE7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDojMDcxMDIzO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7Ym94LXNoYWRvdzppbnNldCAwIDhweCAxMnB4IHJnYmEoMCwwLDAsLjM4KX0ucGllY2V7d2lkdGg6ODYlO2hlaWdodDo4NiU7Ym9yZGVyLXJhZGl1czo1MCU7Ym94LXNoYWRvdzppbnNldCAwIC04cHggMCByZ2JhKDAsMCwwLC4xOCksMCAzcHggMTJweCByZ2JhKDAsMCwwLC4yNSk7dHJhbnNmb3JtOnNjYWxlKC45OCl9LmhpbnQtY2VsbHtvdXRsaW5lOjRweCBzb2xpZCAjZmZmMjZhO291dGxpbmUtb2Zmc2V0Oi00cHh9LmRhbmdlci1jZWxse2JveC1zaGFkb3c6aW5zZXQgMCA4cHggMTJweCByZ2JhKDAsMCwwLC4zOCksMCAwIDAgNHB4ICNmZjlhM2R9Lndpbi1jZWxse2FuaW1hdGlvbjpwdWxzZSAuNjVzIGVhc2UtaW4tb3V0IGluZmluaXRlIGFsdGVybmF0ZX1Aa2V5ZnJhbWVzIHB1bHNle2Zyb217ZmlsdGVyOmJyaWdodG5lc3MoMSl9dG97ZmlsdGVyOmJyaWdodG5lc3MoMS40NSl9fS5lbmQtc2NyZWVue3RleHQtYWxpZ246Y2VudGVyfS5lbmQtc3RhdHN7ZGlzcGxheTpncmlkO2dhcDo4cHg7bWF4LXdpZHRoOjUyMHB4O21hcmdpbjoxOHB4IGF1dG99LnN0YXQtbGluZXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEpO2JvcmRlci1yYWRpdXM6MTRweDtwYWRkaW5nOjEwcHh9QG1lZGlhIChtYXgtd2lkdGg6OTAwcHgpey5zZXR0aW5ncy1ncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMiwxZnIpfS5nYW1lLXNjcmVlbntncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfS5zaWRlYmFye3Bvc2l0aW9uOnN0YXRpY30uaGVyb3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfS50b2tlbi1zdGFja3tkaXNwbGF5Om5vbmV9fUBtZWRpYSAobWF4LXdpZHRoOjU2MHB4KXsuYXBwe3BhZGRpbmc6MTBweH0udG9wYmFye2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5zZXR0aW5ncy1ncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9LnBhbmVse2JvcmRlci1yYWRpdXM6MjBweDtwYWRkaW5nOjE0cHh9LmJvYXJke2dhcDo1cHg7Ym9yZGVyLXJhZGl1czoxOHB4fS5jb2x1bW4tY29udHJvbHN7Z2FwOjVweH0ucHJpbWFyeS1idG4sLnNlY29uZGFyeS1idG4sLmdob3N0LWJ0bnt3aWR0aDoxMDAlO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LnRvcC1hY3Rpb25zLC5zdGFydC1hY3Rpb25zLC5nYW1lLWFjdGlvbnN7d2lkdGg6MTAwJX19QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7YW5pbWF0aW9uOm5vbmUhaW1wb3J0YW50O3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9fQo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgogIDxkaXYgaWQ9ImdhbWVSb290IiBjbGFzcz0iYXBwIj4KICAgIDxoZWFkZXIgY2xhc3M9InRvcGJhciI+CiAgICAgIDxkaXY+CiAgICAgICAgPHAgY2xhc3M9ImtpY2tlciI+TU9PQ3dpa2kgU3BpZWxlPC9wPgogICAgICAgIDxoMT40IEdld2lubnQ6IFN0cmF0ZWdpZS1BcmVuYTwvaDE+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ0b3AtYWN0aW9ucyI+CiAgICAgICAgPGJ1dHRvbiBpZD0iZnVsbHNjcmVlbkJ0biIgY2xhc3M9Imdob3N0LWJ0biIgdHlwZT0iYnV0dG9uIj5Wb2xsYmlsZDwvYnV0dG9uPgogICAgICAgIDxidXR0b24gaWQ9Im1lbnVCdG4iIGNsYXNzPSJnaG9zdC1idG4iIHR5cGU9ImJ1dHRvbiI+TWVuw7w8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L2hlYWRlcj4KCiAgICA8bWFpbiBjbGFzcz0ibWFpbiI+CiAgICAgIDxzZWN0aW9uIGlkPSJzdGFydFNjcmVlbiIgY2xhc3M9InBhbmVsIHN0YXJ0LXNjcmVlbiIgYXJpYS1sYWJlbGxlZGJ5PSJzdGFydFRpdGxlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZXJvIj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxwIGNsYXNzPSJiYWRnZSI+VGFrdGlrIOKAoiBNdXN0ZXIgZXJrZW5uZW4g4oCiIFZvcmF1c2RlbmtlbjwvcD4KICAgICAgICAgICAgPGgyIGlkPSJzdGFydFRpdGxlIj5WZXJiaW5kZSB2aWVyIFN0ZWluZSwgYmV2b3IgZXMgZGllIGFuZGVyZW4gdHVuLjwvaDI+CiAgICAgICAgICAgIDxwIGNsYXNzPSJpbnRybyI+V8OkaGxlIFNwaWVsbW9kdXMsIEZlbGRncsO2w59lIHVuZCBIaWxmZW4uIFNwaWVsZSBnZWdlbiBGcmV1bmRpbm5lbiB1bmQgRnJldW5kZSBvZGVyIGdlZ2VuIGRlbiBDb21wdXRlci48L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLXN0YWNrIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj48c3Bhbj48L3NwYW4+PHNwYW4+PC9zcGFuPjxzcGFuPjwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncy1ncmlkIj4KICAgICAgICAgIDxsYWJlbCBjbGFzcz0ic2V0dGluZyI+CiAgICAgICAgICAgIDxzcGFuPlNwaWVsZW5kZTwvc3Bhbj4KICAgICAgICAgICAgPHNlbGVjdCBpZD0icGxheWVyc1NlbGVjdCI+CiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSI+MSBTcGllbGVyIGdlZ2VuIENvbXB1dGVyPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMiIgc2VsZWN0ZWQ+MiBTcGllbGVyPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMyI+MyBTcGllbGVyPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNCI+NCBTcGllbGVyPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNSI+NSBTcGllbGVyPC9vcHRpb24+CiAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgPC9sYWJlbD4KCiAgICAgICAgICA8bGFiZWwgY2xhc3M9InNldHRpbmciPgogICAgICAgICAgICA8c3Bhbj5GZWxkZ3LDtsOfZTwvc3Bhbj4KICAgICAgICAgICAgPHNlbGVjdCBpZD0iYm9hcmRTZWxlY3QiPgogICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Ijd4NiIgc2VsZWN0ZWQ+S2xhc3Npc2NoOiA3IMOXIDY8L29wdGlvbj4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI4eDciPkdyb8OfOiA4IMOXIDc8L29wdGlvbj4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI5eDciPkJyZWl0OiA5IMOXIDc8L29wdGlvbj4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxMHg4Ij5NZWdhOiAxMCDDlyA4PC9vcHRpb24+CiAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgPC9sYWJlbD4KCiAgICAgICAgICA8bGFiZWwgY2xhc3M9InNldHRpbmciPgogICAgICAgICAgICA8c3Bhbj5LSS1TY2h3aWVyaWdrZWl0PC9zcGFuPgogICAgICAgICAgICA8c2VsZWN0IGlkPSJkaWZmaWN1bHR5U2VsZWN0Ij4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJlYXN5Ij5MZWljaHQ8L29wdGlvbj4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJtZWRpdW0iIHNlbGVjdGVkPk1pdHRlbDwvb3B0aW9uPgogICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImhhcmQiPlNjaHdlcjwvb3B0aW9uPgogICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgIDwvbGFiZWw+CgogICAgICAgICAgPGxhYmVsIGNsYXNzPSJzZXR0aW5nIj4KICAgICAgICAgICAgPHNwYW4+WmllbDwvc3Bhbj4KICAgICAgICAgICAgPHNlbGVjdCBpZD0idGFyZ2V0U2VsZWN0Ij4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI0IiBzZWxlY3RlZD40IGluIGVpbmVyIFJlaWhlPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNSI+NSBpbiBlaW5lciBSZWloZTwvb3B0aW9uPgogICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InN3aXRjaGVzIj4KICAgICAgICAgIDxsYWJlbD48aW5wdXQgaWQ9ImhpbnRzVG9nZ2xlIiB0eXBlPSJjaGVja2JveCIgY2hlY2tlZD4gVGlwcHMgZXJsYXViZW48L2xhYmVsPgogICAgICAgICAgPGxhYmVsPjxpbnB1dCBpZD0iYXNzaXN0VG9nZ2xlIiB0eXBlPSJjaGVja2JveCIgY2hlY2tlZD4gRHJvaHVuZ2VuIG1hcmtpZXJlbjwvbGFiZWw+CiAgICAgICAgICA8bGFiZWw+PGlucHV0IGlkPSJzb3VuZFRvZ2dsZSIgdHlwZT0iY2hlY2tib3giPiBTYW5mdGUgU2lnbmFsdMO2bmU8L2xhYmVsPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJzdGFydC1hY3Rpb25zIj4KICAgICAgICAgIDxidXR0b24gaWQ9InN0YXJ0QnRuIiBjbGFzcz0icHJpbWFyeS1idG4iIHR5cGU9ImJ1dHRvbiI+U3BpZWwgc3RhcnRlbjwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBpZD0icnVsZXNCdG4iIGNsYXNzPSJzZWNvbmRhcnktYnRuIiB0eXBlPSJidXR0b24iPlJlZ2VsbiBhbnplaWdlbjwvYnV0dG9uPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGlkPSJydWxlc0JveCIgY2xhc3M9InJ1bGVzIGhpZGRlbiIgYXJpYS1saXZlPSJwb2xpdGUiPgogICAgICAgICAgPGgzPlJlZ2VsbjwvaDM+CiAgICAgICAgICA8cD5Xw6RobGUgZWluZSBTcGFsdGUuIERlaW4gU3RlaW4gZsOkbGx0IG5hY2ggdW50ZW4uIFdlciB6dWVyc3QgZGllIGdld8OkaGx0ZSBBbnphaGwgenVzYW1tZW5ow6RuZ2VuZGVyIFN0ZWluZSB3YWFnZXJlY2h0LCBzZW5rcmVjaHQgb2RlciBkaWFnb25hbCBiaWxkZXQsIGdld2lubnQuPC9wPgogICAgICAgICAgPHA+QmVpIDPigJM1IFNwaWVsZW5kZW4gYmxlaWJ0IGRpZSBSZWloZW5mb2xnZSBpbW1lciBnbGVpY2guIEJsb2NraWVyZSBzdGFya2UgUmVpaGVuIGRlciBhbmRlcmVuIHVuZCBiYXVlIGVpZ2VuZSBHYWJlbG4gYXVmLjwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9zZWN0aW9uPgoKICAgICAgPHNlY3Rpb24gaWQ9ImdhbWVTY3JlZW4iIGNsYXNzPSJnYW1lLXNjcmVlbiBoaWRkZW4iIGFyaWEtbGFiZWw9IlNwaWVsZmVsZCI+CiAgICAgICAgPGFzaWRlIGNsYXNzPSJzaWRlYmFyIHBhbmVsIj4KICAgICAgICAgIDxkaXYgaWQ9InN0YXR1c0JveCIgY2xhc3M9InN0YXR1cy1ib3giIGFyaWEtbGl2ZT0icG9saXRlIj5CZXJlaXQuPC9kaXY+CiAgICAgICAgICA8ZGl2IGlkPSJzY29yZUJvYXJkIiBjbGFzcz0ic2NvcmUtYm9hcmQiPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibWV0ZXIiPgogICAgICAgICAgICA8c3Bhbj5Gb3J0c2Nocml0dDwvc3Bhbj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWV0ZXItdHJhY2siPjxkaXYgaWQ9InByb2dyZXNzQmFyIiBjbGFzcz0ibWV0ZXItZmlsbCI+PC9kaXY+PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImdhbWUtYWN0aW9ucyI+CiAgICAgICAgICAgIDxidXR0b24gaWQ9ImhpbnRCdG4iIGNsYXNzPSJzZWNvbmRhcnktYnRuIiB0eXBlPSJidXR0b24iPlRpcHA8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbiBpZD0ibmV3Um91bmRCdG4iIGNsYXNzPSJzZWNvbmRhcnktYnRuIiB0eXBlPSJidXR0b24iPk5ldWUgUnVuZGU8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbiBpZD0icmVzZXRCdG4iIGNsYXNzPSJnaG9zdC1idG4iIHR5cGU9ImJ1dHRvbiI+QWxsZXMgenVyw7xja3NldHplbjwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGlkPSJoaW50Qm94IiBjbGFzcz0iaGludC1ib3giIGFyaWEtbGl2ZT0icG9saXRlIj5UaXBwOiBBY2h0ZSBhdWYgb2ZmZW5lIERyZWllcnJlaWhlbi48L2Rpdj4KICAgICAgICA8L2FzaWRlPgoKICAgICAgICA8ZGl2IGNsYXNzPSJib2FyZC13cmFwIHBhbmVsIj4KICAgICAgICAgIDxkaXYgaWQ9ImNvbHVtbkNvbnRyb2xzIiBjbGFzcz0iY29sdW1uLWNvbnRyb2xzIiBhcmlhLWxhYmVsPSJTcGFsdGVud2FobCI+PC9kaXY+CiAgICAgICAgICA8ZGl2IGlkPSJib2FyZCIgY2xhc3M9ImJvYXJkIiByb2xlPSJncmlkIiBhcmlhLWxhYmVsPSI0LUdld2lubnQtU3BpZWxmZWxkIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9zZWN0aW9uPgoKICAgICAgPHNlY3Rpb24gaWQ9ImVuZFNjcmVlbiIgY2xhc3M9InBhbmVsIGVuZC1zY3JlZW4gaGlkZGVuIiBhcmlhLWxhYmVsbGVkYnk9ImVuZFRpdGxlIj4KICAgICAgICA8aDIgaWQ9ImVuZFRpdGxlIj5SdW5kZSBiZWVuZGV0PC9oMj4KICAgICAgICA8cCBpZD0iZW5kVGV4dCI+PC9wPgogICAgICAgIDxkaXYgaWQ9ImVuZFN0YXRzIiBjbGFzcz0iZW5kLXN0YXRzIj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzdGFydC1hY3Rpb25zIj4KICAgICAgICAgIDxidXR0b24gaWQ9InBsYXlBZ2FpbkJ0biIgY2xhc3M9InByaW1hcnktYnRuIiB0eXBlPSJidXR0b24iPk5vY2ggZWluZSBSdW5kZTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBpZD0iZW5kTWVudUJ0biIgY2xhc3M9InNlY29uZGFyeS1idG4iIHR5cGU9ImJ1dHRvbiI+T3B0aW9uZW4gw6RuZGVybjwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L3NlY3Rpb24+CiAgICA8L21haW4+CiAgPC9kaXY+CiAgCjxzY3JpcHQ+CigoKSA9PiB7CiAgInVzZSBzdHJpY3QiOwoKICBjb25zdCBjb2xvcnMgPSBbIiNmZmNmMzYiLCAiI2ZmNWM3YSIsICIjNTBlM2E0IiwgIiM3OGI3ZmYiLCAiI2M5OGJmZiJdOwogIGNvbnN0IG5hbWVzID0gWyJHZWxiIiwgIlJvdCIsICJHcsO8biIsICJCbGF1IiwgIlZpb2xldHQiXTsKICBjb25zdCBzdGF0ZSA9IHsKICAgIHJvd3M6IDYsIGNvbHM6IDcsIHRhcmdldDogNCwgcGxheWVyQ291bnQ6IDIsIGRpZmZpY3VsdHk6ICJtZWRpdW0iLAogICAgaGludHM6IHRydWUsIGFzc2lzdDogdHJ1ZSwgc291bmQ6IGZhbHNlLCBib2FyZDogW10sIGN1cnJlbnQ6IDAsCiAgICBzY29yZXM6IFswLDAsMCwwLDBdLCBtb3ZlczogMCwgYWN0aXZlOiBmYWxzZSwgd2lubmVyOiAtMSwKICAgIHdpbm5pbmdDZWxsczogW10sIGhpbnRDb2x1bW46IC0xLCBhZ2FpbnN0Q29tcHV0ZXI6IGZhbHNlCiAgfTsKCiAgY29uc3QgZWwgPSB7CiAgICBzdGFydFNjcmVlbjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXJ0U2NyZWVuIiksCiAgICBnYW1lU2NyZWVuOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2FtZVNjcmVlbiIpLAogICAgZW5kU2NyZWVuOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZW5kU2NyZWVuIiksCiAgICBwbGF5ZXJzU2VsZWN0OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGxheWVyc1NlbGVjdCIpLAogICAgYm9hcmRTZWxlY3Q6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib2FyZFNlbGVjdCIpLAogICAgZGlmZmljdWx0eVNlbGVjdDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRpZmZpY3VsdHlTZWxlY3QiKSwKICAgIHRhcmdldFNlbGVjdDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhcmdldFNlbGVjdCIpLAogICAgaGludHNUb2dnbGU6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoaW50c1RvZ2dsZSIpLAogICAgYXNzaXN0VG9nZ2xlOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXNzaXN0VG9nZ2xlIiksCiAgICBzb3VuZFRvZ2dsZTogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNvdW5kVG9nZ2xlIiksCiAgICBzdGFydEJ0bjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXJ0QnRuIiksCiAgICBydWxlc0J0bjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJ1bGVzQnRuIiksCiAgICBydWxlc0JveDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJ1bGVzQm94IiksCiAgICBmdWxsc2NyZWVuQnRuOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnVsbHNjcmVlbkJ0biIpLAogICAgbWVudUJ0bjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1lbnVCdG4iKSwKICAgIHN0YXR1c0JveDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXR1c0JveCIpLAogICAgc2NvcmVCb2FyZDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNjb3JlQm9hcmQiKSwKICAgIHByb2dyZXNzQmFyOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZ3Jlc3NCYXIiKSwKICAgIGhpbnRCdG46IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoaW50QnRuIiksCiAgICBuZXdSb3VuZEJ0bjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5ld1JvdW5kQnRuIiksCiAgICByZXNldEJ0bjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc2V0QnRuIiksCiAgICBoaW50Qm94OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGludEJveCIpLAogICAgY29sdW1uQ29udHJvbHM6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2x1bW5Db250cm9scyIpLAogICAgYm9hcmQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib2FyZCIpLAogICAgZW5kVGV4dDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVuZFRleHQiKSwKICAgIGVuZFN0YXRzOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZW5kU3RhdHMiKSwKICAgIHBsYXlBZ2FpbkJ0bjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBsYXlBZ2FpbkJ0biIpLAogICAgZW5kTWVudUJ0bjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVuZE1lbnVCdG4iKQogIH07CgogIGZ1bmN0aW9uIHNob3dTY3JlZW4oc2NyZWVuKSB7CiAgICBlbC5zdGFydFNjcmVlbi5jbGFzc0xpc3QudG9nZ2xlKCJoaWRkZW4iLCBzY3JlZW4gIT09ICJzdGFydCIpOwogICAgZWwuZ2FtZVNjcmVlbi5jbGFzc0xpc3QudG9nZ2xlKCJoaWRkZW4iLCBzY3JlZW4gIT09ICJnYW1lIik7CiAgICBlbC5lbmRTY3JlZW4uY2xhc3NMaXN0LnRvZ2dsZSgiaGlkZGVuIiwgc2NyZWVuICE9PSAiZW5kIik7CiAgfQoKICBmdW5jdGlvbiByZXF1ZXN0RnVsbHNjcmVlblNhZmUoKSB7CiAgICBjb25zdCByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdhbWVSb290Iik7CiAgICBpZiAocm9vdC5yZXF1ZXN0RnVsbHNjcmVlbikgewogICAgICByb290LnJlcXVlc3RGdWxsc2NyZWVuKCkuY2F0Y2goKCkgPT4ge30pOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcmVhZE9wdGlvbnMoKSB7CiAgICBjb25zdCBzaXplID0gZWwuYm9hcmRTZWxlY3QudmFsdWUuc3BsaXQoIngiKS5tYXAoTnVtYmVyKTsKICAgIHN0YXRlLmNvbHMgPSBzaXplWzBdOwogICAgc3RhdGUucm93cyA9IHNpemVbMV07CiAgICBzdGF0ZS50YXJnZXQgPSBOdW1iZXIoZWwudGFyZ2V0U2VsZWN0LnZhbHVlKTsKICAgIHN0YXRlLnBsYXllckNvdW50ID0gTnVtYmVyKGVsLnBsYXllcnNTZWxlY3QudmFsdWUpOwogICAgc3RhdGUuZGlmZmljdWx0eSA9IGVsLmRpZmZpY3VsdHlTZWxlY3QudmFsdWU7CiAgICBzdGF0ZS5oaW50cyA9IGVsLmhpbnRzVG9nZ2xlLmNoZWNrZWQ7CiAgICBzdGF0ZS5hc3Npc3QgPSBlbC5hc3Npc3RUb2dnbGUuY2hlY2tlZDsKICAgIHN0YXRlLnNvdW5kID0gZWwuc291bmRUb2dnbGUuY2hlY2tlZDsKICAgIHN0YXRlLmFnYWluc3RDb21wdXRlciA9IHN0YXRlLnBsYXllckNvdW50ID09PSAxOwogICAgaWYgKHN0YXRlLmFnYWluc3RDb21wdXRlcikgewogICAgICBzdGF0ZS5wbGF5ZXJDb3VudCA9IDI7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBtYWtlRW1wdHlCb2FyZCgpIHsKICAgIHN0YXRlLmJvYXJkID0gW107CiAgICBmb3IgKGxldCByID0gMDsgciA8IHN0YXRlLnJvd3M7IHIgKz0gMSkgewogICAgICBjb25zdCByb3cgPSBbXTsKICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBzdGF0ZS5jb2xzOyBjICs9IDEpIHJvdy5wdXNoKC0xKTsKICAgICAgc3RhdGUuYm9hcmQucHVzaChyb3cpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcmVzZXRHYW1lKCkgewogICAgcmVhZE9wdGlvbnMoKTsKICAgIG1ha2VFbXB0eUJvYXJkKCk7CiAgICBzdGF0ZS5jdXJyZW50ID0gMDsKICAgIHN0YXRlLm1vdmVzID0gMDsKICAgIHN0YXRlLmFjdGl2ZSA9IHRydWU7CiAgICBzdGF0ZS53aW5uZXIgPSAtMTsKICAgIHN0YXRlLndpbm5pbmdDZWxscyA9IFtdOwogICAgc3RhdGUuaGludENvbHVtbiA9IC0xOwogICAgcmVuZGVyQWxsKCk7CiAgICBzaG93U2NyZWVuKCJnYW1lIik7CiAgICB1cGRhdGVTdGF0dXMoIlNwaWVsZXIgIiArIG5hbWVzW3N0YXRlLmN1cnJlbnRdICsgIiBiZWdpbm50LiIpOwogIH0KCiAgZnVuY3Rpb24gcmVzZXRNYXRjaCgpIHsKICAgIHN0YXRlLnNjb3JlcyA9IFswLDAsMCwwLDBdOwogICAgcmVzZXRHYW1lKCk7CiAgfQoKICBmdW5jdGlvbiBhdmFpbGFibGVDb2x1bW5zKGJvYXJkKSB7CiAgICBjb25zdCBsaXN0ID0gW107CiAgICBmb3IgKGxldCBjID0gMDsgYyA8IHN0YXRlLmNvbHM7IGMgKz0gMSkgewogICAgICBpZiAoYm9hcmRbMF1bY10gPT09IC0xKSBsaXN0LnB1c2goYyk7CiAgICB9CiAgICByZXR1cm4gbGlzdDsKICB9CgogIGZ1bmN0aW9uIGRyb3BJbkJvYXJkKGJvYXJkLCBjb2wsIHBsYXllcikgewogICAgZm9yIChsZXQgciA9IHN0YXRlLnJvd3MgLSAxOyByID49IDA7IHIgLT0gMSkgewogICAgICBpZiAoYm9hcmRbcl1bY29sXSA9PT0gLTEpIHsKICAgICAgICBib2FyZFtyXVtjb2xdID0gcGxheWVyOwogICAgICAgIHJldHVybiByOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBmdW5jdGlvbiBjbG9uZUJvYXJkKGJvYXJkKSB7CiAgICByZXR1cm4gYm9hcmQubWFwKHJvdyA9PiByb3cuc2xpY2UoKSk7CiAgfQoKICBmdW5jdGlvbiBjaGVja1dpbihib2FyZCwgcGxheWVyKSB7CiAgICBjb25zdCBkaXJzID0gW1sxLDBdLFswLDFdLFsxLDFdLFsxLC0xXV07CiAgICBmb3IgKGxldCByID0gMDsgciA8IHN0YXRlLnJvd3M7IHIgKz0gMSkgewogICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHN0YXRlLmNvbHM7IGMgKz0gMSkgewogICAgICAgIGlmIChib2FyZFtyXVtjXSAhPT0gcGxheWVyKSBjb250aW51ZTsKICAgICAgICBmb3IgKGNvbnN0IGRpciBvZiBkaXJzKSB7CiAgICAgICAgICBjb25zdCBjZWxscyA9IFtbcixjXV07CiAgICAgICAgICBmb3IgKGxldCBrID0gMTsgayA8IHN0YXRlLnRhcmdldDsgayArPSAxKSB7CiAgICAgICAgICAgIGNvbnN0IG5yID0gciArIGRpclswXSAqIGs7CiAgICAgICAgICAgIGNvbnN0IG5jID0gYyArIGRpclsxXSAqIGs7CiAgICAgICAgICAgIGlmIChuciA8IDAgfHwgbnIgPj0gc3RhdGUucm93cyB8fCBuYyA8IDAgfHwgbmMgPj0gc3RhdGUuY29scyB8fCBib2FyZFtucl1bbmNdICE9PSBwbGF5ZXIpIGJyZWFrOwogICAgICAgICAgICBjZWxscy5wdXNoKFtucixuY10pOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNlbGxzLmxlbmd0aCA+PSBzdGF0ZS50YXJnZXQpIHJldHVybiBjZWxsczsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBbXTsKICB9CgogIGZ1bmN0aW9uIHNjb3JlV2luZG93KGNlbGxzLCBwbGF5ZXIsIGJvYXJkKSB7CiAgICBsZXQgb3duID0gMCwgZW1wdHkgPSAwLCBvdGhlciA9IDA7CiAgICBmb3IgKGNvbnN0IGNlbGwgb2YgY2VsbHMpIHsKICAgICAgY29uc3QgdmFsID0gYm9hcmRbY2VsbFswXV1bY2VsbFsxXV07CiAgICAgIGlmICh2YWwgPT09IHBsYXllcikgb3duICs9IDE7CiAgICAgIGVsc2UgaWYgKHZhbCA9PT0gLTEpIGVtcHR5ICs9IDE7CiAgICAgIGVsc2Ugb3RoZXIgKz0gMTsKICAgIH0KICAgIGlmIChvdGhlciA+IDAgJiYgb3duID4gMCkgcmV0dXJuIDA7CiAgICBpZiAob3duID09PSBzdGF0ZS50YXJnZXQpIHJldHVybiAxMDAwMDA7CiAgICBpZiAob3duID09PSBzdGF0ZS50YXJnZXQgLSAxICYmIGVtcHR5ID09PSAxKSByZXR1cm4gOTAwOwogICAgaWYgKG93biA9PT0gc3RhdGUudGFyZ2V0IC0gMiAmJiBlbXB0eSA9PT0gMikgcmV0dXJuIDkwOwogICAgaWYgKG90aGVyID09PSBzdGF0ZS50YXJnZXQgLSAxICYmIGVtcHR5ID09PSAxKSByZXR1cm4gLTg1MDsKICAgIGlmIChvdGhlciA9PT0gc3RhdGUudGFyZ2V0IC0gMiAmJiBlbXB0eSA9PT0gMikgcmV0dXJuIC02MDsKICAgIHJldHVybiBvd24gKiA1IC0gb3RoZXIgKiA0ICsgZW1wdHk7CiAgfQoKICBmdW5jdGlvbiBldmFsdWF0ZUJvYXJkKGJvYXJkLCBwbGF5ZXIpIHsKICAgIGxldCBzY29yZSA9IDA7CiAgICBjb25zdCBjZW50ZXIgPSBNYXRoLmZsb29yKHN0YXRlLmNvbHMgLyAyKTsKICAgIGZvciAobGV0IHIgPSAwOyByIDwgc3RhdGUucm93czsgciArPSAxKSB7CiAgICAgIGlmIChib2FyZFtyXVtjZW50ZXJdID09PSBwbGF5ZXIpIHNjb3JlICs9IDE4OwogICAgfQogICAgY29uc3QgZGlycyA9IFtbMSwwXSxbMCwxXSxbMSwxXSxbMSwtMV1dOwogICAgZm9yIChsZXQgciA9IDA7IHIgPCBzdGF0ZS5yb3dzOyByICs9IDEpIHsKICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBzdGF0ZS5jb2xzOyBjICs9IDEpIHsKICAgICAgICBmb3IgKGNvbnN0IGRpciBvZiBkaXJzKSB7CiAgICAgICAgICBjb25zdCBjZWxscyA9IFtdOwogICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBzdGF0ZS50YXJnZXQ7IGsgKz0gMSkgewogICAgICAgICAgICBjb25zdCBuciA9IHIgKyBkaXJbMF0gKiBrOwogICAgICAgICAgICBjb25zdCBuYyA9IGMgKyBkaXJbMV0gKiBrOwogICAgICAgICAgICBpZiAobnIgPCAwIHx8IG5yID49IHN0YXRlLnJvd3MgfHwgbmMgPCAwIHx8IG5jID49IHN0YXRlLmNvbHMpIHsKICAgICAgICAgICAgICBjZWxscy5sZW5ndGggPSAwOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNlbGxzLnB1c2goW25yLG5jXSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoY2VsbHMubGVuZ3RoID09PSBzdGF0ZS50YXJnZXQpIHNjb3JlICs9IHNjb3JlV2luZG93KGNlbGxzLCBwbGF5ZXIsIGJvYXJkKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzY29yZTsKICB9CgogIGZ1bmN0aW9uIGZpbmRJbW1lZGlhdGVXaW4ocGxheWVyKSB7CiAgICBmb3IgKGNvbnN0IGNvbCBvZiBhdmFpbGFibGVDb2x1bW5zKHN0YXRlLmJvYXJkKSkgewogICAgICBjb25zdCBjb3B5ID0gY2xvbmVCb2FyZChzdGF0ZS5ib2FyZCk7CiAgICAgIGRyb3BJbkJvYXJkKGNvcHksIGNvbCwgcGxheWVyKTsKICAgICAgaWYgKGNoZWNrV2luKGNvcHksIHBsYXllcikubGVuZ3RoID4gMCkgcmV0dXJuIGNvbDsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIGZ1bmN0aW9uIGJlc3RDb2x1bW5Gb3IocGxheWVyKSB7CiAgICBjb25zdCB2YWxpZCA9IGF2YWlsYWJsZUNvbHVtbnMoc3RhdGUuYm9hcmQpOwogICAgaWYgKHZhbGlkLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xOwogICAgY29uc3Qgd2luID0gZmluZEltbWVkaWF0ZVdpbihwbGF5ZXIpOwogICAgaWYgKHdpbiAhPT0gLTEpIHJldHVybiB3aW47CiAgICBmb3IgKGxldCBwID0gMDsgcCA8IHN0YXRlLnBsYXllckNvdW50OyBwICs9IDEpIHsKICAgICAgaWYgKHAgPT09IHBsYXllcikgY29udGludWU7CiAgICAgIGNvbnN0IGJsb2NrID0gZmluZEltbWVkaWF0ZVdpbihwKTsKICAgICAgaWYgKGJsb2NrICE9PSAtMSkgcmV0dXJuIGJsb2NrOwogICAgfQogICAgaWYgKHN0YXRlLmRpZmZpY3VsdHkgPT09ICJlYXN5IiAmJiBNYXRoLnJhbmRvbSgpIDwgMC41NSkgcmV0dXJuIHZhbGlkW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHZhbGlkLmxlbmd0aCldOwogICAgbGV0IGJlc3QgPSB2YWxpZFswXTsKICAgIGxldCBiZXN0U2NvcmUgPSAtSW5maW5pdHk7CiAgICBmb3IgKGNvbnN0IGNvbCBvZiB2YWxpZCkgewogICAgICBjb25zdCBjb3B5ID0gY2xvbmVCb2FyZChzdGF0ZS5ib2FyZCk7CiAgICAgIGRyb3BJbkJvYXJkKGNvcHksIGNvbCwgcGxheWVyKTsKICAgICAgbGV0IHNjb3JlID0gZXZhbHVhdGVCb2FyZChjb3B5LCBwbGF5ZXIpOwogICAgICBpZiAoc3RhdGUuZGlmZmljdWx0eSA9PT0gImhhcmQiKSB7CiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBzdGF0ZS5wbGF5ZXJDb3VudDsgcCArPSAxKSB7CiAgICAgICAgICBpZiAocCAhPT0gcGxheWVyKSBzY29yZSAtPSBNYXRoLm1heCgwLCBldmFsdWF0ZUJvYXJkKGNvcHksIHApICogMC40Mik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNjb3JlIC09IE1hdGguYWJzKGNvbCAtIE1hdGguZmxvb3Ioc3RhdGUuY29scyAvIDIpKSAqIDI7CiAgICAgIGlmIChzY29yZSA+IGJlc3RTY29yZSkgewogICAgICAgIGJlc3RTY29yZSA9IHNjb3JlOwogICAgICAgIGJlc3QgPSBjb2w7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBiZXN0OwogIH0KCiAgZnVuY3Rpb24gZ2V0RHJvcFJvdyhjb2wpIHsKICAgIGZvciAobGV0IHIgPSBzdGF0ZS5yb3dzIC0gMTsgciA+PSAwOyByIC09IDEpIHsKICAgICAgaWYgKHN0YXRlLmJvYXJkW3JdW2NvbF0gPT09IC0xKSByZXR1cm4gcjsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIGZ1bmN0aW9uIG1ha2VNb3ZlKGNvbCkgewogICAgaWYgKCFzdGF0ZS5hY3RpdmUgfHwgY29sIDwgMCB8fCBjb2wgPj0gc3RhdGUuY29scykgcmV0dXJuOwogICAgY29uc3Qgcm93ID0gZ2V0RHJvcFJvdyhjb2wpOwogICAgaWYgKHJvdyA8IDApIHsKICAgICAgdXBkYXRlU3RhdHVzKCJEaWVzZSBTcGFsdGUgaXN0IHZvbGwuIik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHN0YXRlLmJvYXJkW3Jvd11bY29sXSA9IHN0YXRlLmN1cnJlbnQ7CiAgICBzdGF0ZS5tb3ZlcyArPSAxOwogICAgc3RhdGUuaGludENvbHVtbiA9IC0xOwogICAgcGxheVRvbmUoMjQwICsgc3RhdGUuY3VycmVudCAqIDcwKTsKICAgIGNvbnN0IHdpbkNlbGxzID0gY2hlY2tXaW4oc3RhdGUuYm9hcmQsIHN0YXRlLmN1cnJlbnQpOwogICAgaWYgKHdpbkNlbGxzLmxlbmd0aCA+IDApIHsKICAgICAgc3RhdGUuYWN0aXZlID0gZmFsc2U7CiAgICAgIHN0YXRlLndpbm5lciA9IHN0YXRlLmN1cnJlbnQ7CiAgICAgIHN0YXRlLndpbm5pbmdDZWxscyA9IHdpbkNlbGxzOwogICAgICBzdGF0ZS5zY29yZXNbc3RhdGUuY3VycmVudF0gKz0gMTsKICAgICAgcmVuZGVyQWxsKCk7CiAgICAgIGZpbmlzaFJvdW5kKCJTcGllbGVyICIgKyBuYW1lc1tzdGF0ZS5jdXJyZW50XSArICIgZ2V3aW5udCEiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHN0YXRlLm1vdmVzID49IHN0YXRlLnJvd3MgKiBzdGF0ZS5jb2xzKSB7CiAgICAgIHN0YXRlLmFjdGl2ZSA9IGZhbHNlOwogICAgICByZW5kZXJBbGwoKTsKICAgICAgZmluaXNoUm91bmQoIlVuZW50c2NoaWVkZW4hIERhcyBGZWxkIGlzdCB2b2xsLiIpOwogICAgICByZXR1cm47CiAgICB9CiAgICBzdGF0ZS5jdXJyZW50ID0gKHN0YXRlLmN1cnJlbnQgKyAxKSAlIHN0YXRlLnBsYXllckNvdW50OwogICAgcmVuZGVyQWxsKCk7CiAgICB1cGRhdGVTdGF0dXMoIlNwaWVsZXIgIiArIG5hbWVzW3N0YXRlLmN1cnJlbnRdICsgIiBpc3QgYW0gWnVnLiIpOwogICAgaWYgKHN0YXRlLmFnYWluc3RDb21wdXRlciAmJiBzdGF0ZS5jdXJyZW50ID09PSAxKSB7CiAgICAgIHVwZGF0ZVN0YXR1cygiQ29tcHV0ZXIgZGVua3QgbmFjaC4iKTsKICAgICAgc2V0VGltZW91dCgoKSA9PiBtYWtlTW92ZShiZXN0Q29sdW1uRm9yKDEpKSwgNDIwKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGZpbmlzaFJvdW5kKHRleHQpIHsKICAgIGVsLmVuZFRleHQudGV4dENvbnRlbnQgPSB0ZXh0OwogICAgcmVuZGVyRW5kU3RhdHMoKTsKICAgIHNldFRpbWVvdXQoKCkgPT4gc2hvd1NjcmVlbigiZW5kIiksIDY1MCk7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJBbGwoKSB7CiAgICByZW5kZXJDb250cm9scygpOwogICAgcmVuZGVyQm9hcmQoKTsKICAgIHJlbmRlclNjb3JlcygpOwogICAgdXBkYXRlUHJvZ3Jlc3MoKTsKICAgIGVsLmhpbnRCdG4uZGlzYWJsZWQgPSAhc3RhdGUuaGludHMgfHwgIXN0YXRlLmFjdGl2ZTsKICAgIGVsLmhpbnRCb3gudGV4dENvbnRlbnQgPSBzdGF0ZS5oaW50cyA/ICJUaXBwOiBTdWNoZSB6dWVyc3QgR2V3aW5uesO8Z2UsIGRhbm4gQmxvY2thZGVuLiIgOiAiVGlwcHMgc2luZCBhdXNnZXNjaGFsdGV0LiI7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJDb250cm9scygpIHsKICAgIGVsLmNvbHVtbkNvbnRyb2xzLnN0eWxlLmdyaWRUZW1wbGF0ZUNvbHVtbnMgPSAicmVwZWF0KCIgKyBzdGF0ZS5jb2xzICsgIiwgMWZyKSI7CiAgICBlbC5jb2x1bW5Db250cm9scy50ZXh0Q29udGVudCA9ICIiOwogICAgZm9yIChsZXQgYyA9IDA7IGMgPCBzdGF0ZS5jb2xzOyBjICs9IDEpIHsKICAgICAgY29uc3QgYnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7CiAgICAgIGJ0bi50eXBlID0gImJ1dHRvbiI7CiAgICAgIGJ0bi5jbGFzc05hbWUgPSAiY29sdW1uLWJ0biI7CiAgICAgIGJ0bi50ZXh0Q29udGVudCA9ICLilrwiOwogICAgICBidG4uc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwgIlN0ZWluIGluIFNwYWx0ZSAiICsgKGMgKyAxKSArICIgd2VyZmVuIik7CiAgICAgIGJ0bi5kaXNhYmxlZCA9ICFzdGF0ZS5hY3RpdmUgfHwgc3RhdGUuYm9hcmRbMF1bY10gIT09IC0xIHx8IChzdGF0ZS5hZ2FpbnN0Q29tcHV0ZXIgJiYgc3RhdGUuY3VycmVudCA9PT0gMSk7CiAgICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IG1ha2VNb3ZlKGMpKTsKICAgICAgZWwuY29sdW1uQ29udHJvbHMuYXBwZW5kQ2hpbGQoYnRuKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGlzQ2VsbE1hcmtlZChsaXN0LCByLCBjKSB7CiAgICByZXR1cm4gbGlzdC5zb21lKGl0ZW0gPT4gaXRlbVswXSA9PT0gciAmJiBpdGVtWzFdID09PSBjKTsKICB9CgogIGZ1bmN0aW9uIGRhbmdlcm91c0NvbHVtbnMoKSB7CiAgICBjb25zdCByZXN1bHQgPSBbXTsKICAgIGZvciAobGV0IHAgPSAwOyBwIDwgc3RhdGUucGxheWVyQ291bnQ7IHAgKz0gMSkgewogICAgICBpZiAocCA9PT0gc3RhdGUuY3VycmVudCkgY29udGludWU7CiAgICAgIGNvbnN0IGNvbCA9IGZpbmRJbW1lZGlhdGVXaW4ocCk7CiAgICAgIGlmIChjb2wgIT09IC0xKSByZXN1bHQucHVzaChjb2wpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGZ1bmN0aW9uIHJlbmRlckJvYXJkKCkgewogICAgZWwuYm9hcmQuc3R5bGUuZ3JpZFRlbXBsYXRlQ29sdW1ucyA9ICJyZXBlYXQoIiArIHN0YXRlLmNvbHMgKyAiLCBtaW5tYXgoMjZweCwgMWZyKSkiOwogICAgZWwuYm9hcmQudGV4dENvbnRlbnQgPSAiIjsKICAgIGNvbnN0IGRhbmdlciA9IHN0YXRlLmFzc2lzdCA/IGRhbmdlcm91c0NvbHVtbnMoKSA6IFtdOwogICAgZm9yIChsZXQgciA9IDA7IHIgPCBzdGF0ZS5yb3dzOyByICs9IDEpIHsKICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBzdGF0ZS5jb2xzOyBjICs9IDEpIHsKICAgICAgICBjb25zdCBjZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgY2VsbC5jbGFzc05hbWUgPSAiY2VsbCI7CiAgICAgICAgY2VsbC5zZXRBdHRyaWJ1dGUoInJvbGUiLCAiZ3JpZGNlbGwiKTsKICAgICAgICBpZiAoc3RhdGUuaGludENvbHVtbiA9PT0gYyAmJiBnZXREcm9wUm93KGMpID09PSByKSBjZWxsLmNsYXNzTGlzdC5hZGQoImhpbnQtY2VsbCIpOwogICAgICAgIGlmIChkYW5nZXIuaW5kZXhPZihjKSAhPT0gLTEgJiYgZ2V0RHJvcFJvdyhjKSA9PT0gcikgY2VsbC5jbGFzc0xpc3QuYWRkKCJkYW5nZXItY2VsbCIpOwogICAgICAgIGlmIChpc0NlbGxNYXJrZWQoc3RhdGUud2lubmluZ0NlbGxzLCByLCBjKSkgY2VsbC5jbGFzc0xpc3QuYWRkKCJ3aW4tY2VsbCIpOwogICAgICAgIGNvbnN0IHZhbCA9IHN0YXRlLmJvYXJkW3JdW2NdOwogICAgICAgIGlmICh2YWwgIT09IC0xKSB7CiAgICAgICAgICBjb25zdCBwaWVjZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICAgcGllY2UuY2xhc3NOYW1lID0gInBpZWNlIjsKICAgICAgICAgIHBpZWNlLnN0eWxlLmJhY2tncm91bmQgPSBjb2xvcnNbdmFsXTsKICAgICAgICAgIHBpZWNlLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsICJTdGVpbiAiICsgbmFtZXNbdmFsXSk7CiAgICAgICAgICBjZWxsLmFwcGVuZENoaWxkKHBpZWNlKTsKICAgICAgICB9CiAgICAgICAgZWwuYm9hcmQuYXBwZW5kQ2hpbGQoY2VsbCk7CiAgICAgIH0KICAgIH0KICB9CgogIGZ1bmN0aW9uIHJlbmRlclNjb3JlcygpIHsKICAgIGVsLnNjb3JlQm9hcmQudGV4dENvbnRlbnQgPSAiIjsKICAgIGZvciAobGV0IHAgPSAwOyBwIDwgc3RhdGUucGxheWVyQ291bnQ7IHAgKz0gMSkgewogICAgICBjb25zdCByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgcm93LmNsYXNzTmFtZSA9ICJzY29yZS1yb3ciOwogICAgICBpZiAocCA9PT0gc3RhdGUuY3VycmVudCAmJiBzdGF0ZS5hY3RpdmUpIHJvdy5jbGFzc0xpc3QuYWRkKCJhY3RpdmUtcm93Iik7CiAgICAgIGNvbnN0IGNoaXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgY2hpcC5jbGFzc05hbWUgPSAicGxheWVyLWNoaXAiOwogICAgICBjb25zdCBkb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAgIGRvdC5jbGFzc05hbWUgPSAiZG90IjsKICAgICAgZG90LnN0eWxlLmJhY2tncm91bmQgPSBjb2xvcnNbcF07CiAgICAgIGNvbnN0IGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICBsYWJlbC50ZXh0Q29udGVudCA9IHN0YXRlLmFnYWluc3RDb21wdXRlciAmJiBwID09PSAxID8gIkNvbXB1dGVyIiA6ICJTcGllbGVyICIgKyBuYW1lc1twXTsKICAgICAgY2hpcC5hcHBlbmRDaGlsZChkb3QpOwogICAgICBjaGlwLmFwcGVuZENoaWxkKGxhYmVsKTsKICAgICAgY29uc3Qgc2NvcmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHJvbmciKTsKICAgICAgc2NvcmUudGV4dENvbnRlbnQgPSBTdHJpbmcoc3RhdGUuc2NvcmVzW3BdKTsKICAgICAgcm93LmFwcGVuZENoaWxkKGNoaXApOwogICAgICByb3cuYXBwZW5kQ2hpbGQoc2NvcmUpOwogICAgICBlbC5zY29yZUJvYXJkLmFwcGVuZENoaWxkKHJvdyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiByZW5kZXJFbmRTdGF0cygpIHsKICAgIGVsLmVuZFN0YXRzLnRleHRDb250ZW50ID0gIiI7CiAgICBmb3IgKGxldCBwID0gMDsgcCA8IHN0YXRlLnBsYXllckNvdW50OyBwICs9IDEpIHsKICAgICAgY29uc3QgbGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICBsaW5lLmNsYXNzTmFtZSA9ICJzdGF0LWxpbmUiOwogICAgICBjb25zdCBsYWJlbCA9IHN0YXRlLmFnYWluc3RDb21wdXRlciAmJiBwID09PSAxID8gIkNvbXB1dGVyIiA6ICJTcGllbGVyICIgKyBuYW1lc1twXTsKICAgICAgbGluZS50ZXh0Q29udGVudCA9IGxhYmVsICsgIjogIiArIHN0YXRlLnNjb3Jlc1twXSArICIgUnVuZGVuc2llZ2UiOwogICAgICBlbC5lbmRTdGF0cy5hcHBlbmRDaGlsZChsaW5lKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHVwZGF0ZVByb2dyZXNzKCkgewogICAgY29uc3QgcGVyY2VudCA9IE1hdGgucm91bmQoKHN0YXRlLm1vdmVzIC8gKHN0YXRlLnJvd3MgKiBzdGF0ZS5jb2xzKSkgKiAxMDApOwogICAgZWwucHJvZ3Jlc3NCYXIuc3R5bGUud2lkdGggPSBwZXJjZW50ICsgIiUiOwogIH0KCiAgZnVuY3Rpb24gdXBkYXRlU3RhdHVzKHRleHQpIHsKICAgIGVsLnN0YXR1c0JveC50ZXh0Q29udGVudCA9IHRleHQ7CiAgfQoKICBmdW5jdGlvbiBzaG93SGludCgpIHsKICAgIGlmICghc3RhdGUuYWN0aXZlIHx8ICFzdGF0ZS5oaW50cykgcmV0dXJuOwogICAgY29uc3QgY29sID0gYmVzdENvbHVtbkZvcihzdGF0ZS5jdXJyZW50KTsKICAgIHN0YXRlLmhpbnRDb2x1bW4gPSBjb2w7CiAgICBpZiAoY29sID09PSAtMSkgewogICAgICBlbC5oaW50Qm94LnRleHRDb250ZW50ID0gIktlaW4gc2lubnZvbGxlciBadWcgZ2VmdW5kZW4uIjsKICAgIH0gZWxzZSB7CiAgICAgIGVsLmhpbnRCb3gudGV4dENvbnRlbnQgPSAiVGlwcDogU3BhbHRlICIgKyAoY29sICsgMSkgKyAiIGlzdCBzdHJhdGVnaXNjaCBzdGFyay4iOwogICAgfQogICAgcmVuZGVyQm9hcmQoKTsKICB9CgogIGZ1bmN0aW9uIHBsYXlUb25lKGZyZXEpIHsKICAgIGlmICghc3RhdGUuc291bmQpIHJldHVybjsKICAgIHRyeSB7CiAgICAgIGNvbnN0IEF1ZGlvQ3R4ID0gd2luZG93LkF1ZGlvQ29udGV4dCB8fCB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0OwogICAgICBpZiAoIUF1ZGlvQ3R4KSByZXR1cm47CiAgICAgIGNvbnN0IGN0eCA9IG5ldyBBdWRpb0N0eCgpOwogICAgICBjb25zdCBvc2MgPSBjdHguY3JlYXRlT3NjaWxsYXRvcigpOwogICAgICBjb25zdCBnYWluID0gY3R4LmNyZWF0ZUdhaW4oKTsKICAgICAgb3NjLmZyZXF1ZW5jeS52YWx1ZSA9IGZyZXE7CiAgICAgIGdhaW4uZ2Fpbi52YWx1ZSA9IDAuMDQ7CiAgICAgIG9zYy5jb25uZWN0KGdhaW4pOwogICAgICBnYWluLmNvbm5lY3QoY3R4LmRlc3RpbmF0aW9uKTsKICAgICAgb3NjLnN0YXJ0KCk7CiAgICAgIG9zYy5zdG9wKGN0eC5jdXJyZW50VGltZSArIDAuMDgpOwogICAgfSBjYXRjaCAoZXJyKSB7fQogIH0KCiAgZnVuY3Rpb24gZ29NZW51KCkgewogICAgc3RhdGUuYWN0aXZlID0gZmFsc2U7CiAgICBzaG93U2NyZWVuKCJzdGFydCIpOwogIH0KCiAgZWwuc3RhcnRCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7IHJlcXVlc3RGdWxsc2NyZWVuU2FmZSgpOyByZXNldE1hdGNoKCk7IH0pOwogIGVsLmZ1bGxzY3JlZW5CdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCByZXF1ZXN0RnVsbHNjcmVlblNhZmUpOwogIGVsLnJ1bGVzQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gZWwucnVsZXNCb3guY2xhc3NMaXN0LnRvZ2dsZSgiaGlkZGVuIikpOwogIGVsLm1lbnVCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBnb01lbnUpOwogIGVsLmhpbnRCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBzaG93SGludCk7CiAgZWwubmV3Um91bmRCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCByZXNldEdhbWUpOwogIGVsLnJlc2V0QnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgcmVzZXRNYXRjaCk7CiAgZWwucGxheUFnYWluQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgcmVzZXRHYW1lKTsKICBlbC5lbmRNZW51QnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZ29NZW51KTsKCiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChldmVudCkgPT4gewogICAgaWYgKCFzdGF0ZS5hY3RpdmUpIHJldHVybjsKICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleTsKICAgIGlmICgvXlsxLTldJC8udGVzdChrZXkpKSB7CiAgICAgIGNvbnN0IGNvbCA9IE51bWJlcihrZXkpIC0gMTsKICAgICAgaWYgKGNvbCA8IHN0YXRlLmNvbHMpIG1ha2VNb3ZlKGNvbCk7CiAgICB9CiAgICBpZiAoa2V5ID09PSAiQXJyb3dMZWZ0IikgewogICAgICBzdGF0ZS5oaW50Q29sdW1uID0gTWF0aC5tYXgoMCwgc3RhdGUuaGludENvbHVtbiA9PT0gLTEgPyAwIDogc3RhdGUuaGludENvbHVtbiAtIDEpOwogICAgICByZW5kZXJCb2FyZCgpOwogICAgfQogICAgaWYgKGtleSA9PT0gIkFycm93UmlnaHQiKSB7CiAgICAgIHN0YXRlLmhpbnRDb2x1bW4gPSBNYXRoLm1pbihzdGF0ZS5jb2xzIC0gMSwgc3RhdGUuaGludENvbHVtbiA9PT0gLTEgPyAwIDogc3RhdGUuaGludENvbHVtbiArIDEpOwogICAgICByZW5kZXJCb2FyZCgpOwogICAgfQogICAgaWYgKGtleSA9PT0gIkVudGVyIiAmJiBzdGF0ZS5oaW50Q29sdW1uICE9PSAtMSkgbWFrZU1vdmUoc3RhdGUuaGludENvbHVtbik7CiAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICJ0Iikgc2hvd0hpbnQoKTsKICB9KTsKCiAgc2hvd1NjcmVlbigic3RhcnQiKTsKfSkoKTsKCjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4=
PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImRlIj4KPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+CiAgPHRpdGxlPjQgR2V3aW5udDogU3RyYXRlZ2llLUFyZW5hPC90aXRsZT4KICAKPHN0eWxlPgoqe2JveC1zaXppbmc6Ym9yZGVyLWJveH1odG1sLGJvZHl7bWFyZ2luOjA7bWluLWhlaWdodDoxMDAlO2ZvbnQtZmFtaWx5OnN5c3RlbS11aSwtYXBwbGUtc3lzdGVtLFNlZ29lIFVJLFJvYm90byxBcmlhbCxzYW5zLXNlcmlmO2JhY2tncm91bmQ6cmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAyMCUgMTAlLCMzNDRjYTAgMCwjMTExYTNjIDM4JSwjMDcxMDIzIDEwMCUpO2NvbG9yOiNmN2Y5ZmZ9YnV0dG9uLHNlbGVjdCxpbnB1dHtmb250OmluaGVyaXR9YnV0dG9uLHNlbGVjdHtib3JkZXI6MH1idXR0b257Y3Vyc29yOnBvaW50ZXJ9YnV0dG9uOmZvY3VzLXZpc2libGUsc2VsZWN0OmZvY3VzLXZpc2libGUsaW5wdXQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjRweCBzb2xpZCAjZmZmMjZhO291dGxpbmUtb2Zmc2V0OjNweH0uYXBwe21pbi1oZWlnaHQ6MTAwdmg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOmNsYW1wKDEycHgsMnZ3LDI4cHgpO2dhcDoxNnB4fS50b3BiYXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTZweH0ua2lja2Vye21hcmdpbjowIDAgNHB4O2NvbG9yOiM5ZWQ2ZmY7Zm9udC13ZWlnaHQ6ODAwO2xldHRlci1zcGFjaW5nOi4wOGVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtmb250LXNpemU6Ljc4cmVtfWgxLGgyLGgzLHB7bWFyZ2luLXRvcDowfWgxe2ZvbnQtc2l6ZTpjbGFtcCgxLjQ1cmVtLDMuNHZ3LDNyZW0pO21hcmdpbi1ib3R0b206MH0udG9wLWFjdGlvbnMsLnN0YXJ0LWFjdGlvbnMsLmdhbWUtYWN0aW9uc3tkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7ZmxleC13cmFwOndyYXB9Lm1haW57ZmxleDoxO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXJ9LnBhbmVse3dpZHRoOm1pbigxMTIwcHgsMTAwJSk7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xMSk7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4yMik7Ym94LXNoYWRvdzowIDIwcHggNTVweCByZ2JhKDAsMCwwLC4zKTtib3JkZXItcmFkaXVzOjI4cHg7cGFkZGluZzpjbGFtcCgxNnB4LDIuNnZ3LDMycHgpO2JhY2tkcm9wLWZpbHRlcjpibHVyKDEycHgpfS5oaWRkZW57ZGlzcGxheTpub25lIWltcG9ydGFudH0uaGVyb3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvO2dhcDoyMHB4O2FsaWduLWl0ZW1zOmNlbnRlcn0uYmFkZ2V7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZDojZmZlNzZhO2NvbG9yOiMxNzIwNDQ7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjhweCAxM3B4O2ZvbnQtd2VpZ2h0OjkwMH0uaW50cm97Zm9udC1zaXplOjEuMXJlbTtjb2xvcjojZGZlOGZmO21heC13aWR0aDo3ODBweH0udG9rZW4tc3RhY2t7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMiw3MnB4KTtnYXA6MTBweH0udG9rZW4tc3RhY2sgc3Bhbnt3aWR0aDo3MnB4O2hlaWdodDo3MnB4O2JvcmRlci1yYWRpdXM6NTAlO2JveC1zaGFkb3c6aW5zZXQgMCAtOXB4IDAgcmdiYSgwLDAsMCwuMTgpLDAgMTBweCAyNHB4IHJnYmEoMCwwLDAsLjI1KX0udG9rZW4tc3RhY2sgc3BhbjpudGgtY2hpbGQoMSl7YmFja2dyb3VuZDojZmZjZjM2fS50b2tlbi1zdGFjayBzcGFuOm50aC1jaGlsZCgyKXtiYWNrZ3JvdW5kOiNmZjVjN2F9LnRva2VuLXN0YWNrIHNwYW46bnRoLWNoaWxkKDMpe2JhY2tncm91bmQ6IzUwZTNhNH0udG9rZW4tc3RhY2sgc3BhbjpudGgtY2hpbGQoNCl7YmFja2dyb3VuZDojNzhiN2ZmfS5zZXR0aW5ncy1ncmlke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDQsMWZyKTtnYXA6MTRweDttYXJnaW46MjJweCAwfS5zZXR0aW5ne2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweDtmb250LXdlaWdodDo4MDB9LnNldHRpbmcgc2VsZWN0e3dpZHRoOjEwMCU7cGFkZGluZzoxM3B4IDE0cHg7Ym9yZGVyLXJhZGl1czoxNXB4O2JhY2tncm91bmQ6I2Y3ZjlmZjtjb2xvcjojMTExYTNjO2ZvbnQtd2VpZ2h0Ojc1MH0uc3dpdGNoZXN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDoxOHB4O21hcmdpbi1ib3R0b206MjJweH0uc3dpdGNoZXMgbGFiZWx7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xKTtwYWRkaW5nOjEycHggMTRweDtib3JkZXItcmFkaXVzOjE2cHh9LnByaW1hcnktYnRuLC5zZWNvbmRhcnktYnRuLC5naG9zdC1idG57bWluLWhlaWdodDo0OHB4O2JvcmRlci1yYWRpdXM6MTZweDtwYWRkaW5nOjEycHggMThweDtmb250LXdlaWdodDo5MDB9LnByaW1hcnktYnRue2JhY2tncm91bmQ6I2ZmZTc2YTtjb2xvcjojMTExYTNjfS5zZWNvbmRhcnktYnRue2JhY2tncm91bmQ6Izc4YjdmZjtjb2xvcjojMDcxMDIzfS5naG9zdC1idG57YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xNCk7Y29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjM1KX0ucnVsZXN7bWFyZ2luLXRvcDoxOHB4O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMik7Ym9yZGVyLXJhZGl1czoxOHB4O3BhZGRpbmc6MTZweH0uZ2FtZS1zY3JlZW57d2lkdGg6bWluKDEyNDBweCwxMDAlKTtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCgyNTBweCwzMjBweCkgMWZyO2dhcDoxNnB4O2FsaWduLWl0ZW1zOnN0YXJ0fS5zaWRlYmFye3dpZHRoOjEwMCU7cG9zaXRpb246c3RpY2t5O3RvcDoxMnB4fS5zdGF0dXMtYm94e2ZvbnQtc2l6ZToxLjFyZW07Zm9udC13ZWlnaHQ6OTAwO2JhY2tncm91bmQ6I2Y3ZjlmZjtjb2xvcjojMTExYTNjO2JvcmRlci1yYWRpdXM6MThweDtwYWRkaW5nOjE2cHg7bWFyZ2luLWJvdHRvbToxNHB4fS5zY29yZS1ib2FyZHtkaXNwbGF5OmdyaWQ7Z2FwOjEwcHh9LnNjb3JlLXJvd3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xKTtib3JkZXItcmFkaXVzOjE2cHg7cGFkZGluZzoxMXB4IDEycHh9LnBsYXllci1jaGlwe2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXdlaWdodDo5MDB9LmRvdHt3aWR0aDoyMnB4O2hlaWdodDoyMnB4O2JvcmRlci1yYWRpdXM6NTAlO2JveC1zaGFkb3c6aW5zZXQgMCAtNHB4IDAgcmdiYSgwLDAsMCwuMTgpfS5hY3RpdmUtcm93e291dGxpbmU6M3B4IHNvbGlkICNmZmU3NmF9Lm1ldGVye21hcmdpbjoxOHB4IDB9Lm1ldGVyIHNwYW57Zm9udC13ZWlnaHQ6ODAwfS5tZXRlci10cmFja3toZWlnaHQ6MTRweDtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjE4KTtib3JkZXItcmFkaXVzOjk5OXB4O292ZXJmbG93OmhpZGRlbjttYXJnaW4tdG9wOjdweH0ubWV0ZXItZmlsbHtoZWlnaHQ6MTAwJTt3aWR0aDowO2JhY2tncm91bmQ6I2ZmZTc2YTtib3JkZXItcmFkaXVzOjk5OXB4O3RyYW5zaXRpb246d2lkdGggLjI1c30uaGludC1ib3h7bWFyZ2luLXRvcDoxNHB4O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMjMpO2JvcmRlci1yYWRpdXM6MTZweDtwYWRkaW5nOjE0cHg7Y29sb3I6I2VhZjFmZn0uYm9hcmQtd3JhcHtkaXNwbGF5OmdyaWQ7Z2FwOjEwcHh9LmNvbHVtbi1jb250cm9sc3tkaXNwbGF5OmdyaWQ7Z2FwOjhweH0uY29sdW1uLWJ0bnttaW4taGVpZ2h0OjQ0cHg7Ym9yZGVyLXJhZGl1czoxNHB4O2JhY2tncm91bmQ6I2ZmZTc2YTtjb2xvcjojMTExYTNjO2ZvbnQtd2VpZ2h0Ojk1MH0uY29sdW1uLWJ0bjpkaXNhYmxlZHtvcGFjaXR5Oi4zNTtjdXJzb3I6bm90LWFsbG93ZWR9LmJvYXJke2Rpc3BsYXk6Z3JpZDtnYXA6OHB4O2JhY2tncm91bmQ6IzEyNGRhNDtwYWRkaW5nOmNsYW1wKDhweCwxLjR2dywxNnB4KTtib3JkZXItcmFkaXVzOjI0cHg7Ym94LXNoYWRvdzppbnNldCAwIC0xMnB4IDAgcmdiYSgwLDAsMCwuMTgpfS5jZWxse2FzcGVjdC1yYXRpbzoxLzE7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDojMDcxMDIzO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7Ym94LXNoYWRvdzppbnNldCAwIDhweCAxMnB4IHJnYmEoMCwwLDAsLjM4KX0ucGllY2V7d2lkdGg6ODYlO2hlaWdodDo4NiU7Ym9yZGVyLXJhZGl1czo1MCU7Ym94LXNoYWRvdzppbnNldCAwIC04cHggMCByZ2JhKDAsMCwwLC4xOCksMCAzcHggMTJweCByZ2JhKDAsMCwwLC4yNSk7dHJhbnNmb3JtOnNjYWxlKC45OCl9LmhpbnQtY2VsbHtvdXRsaW5lOjRweCBzb2xpZCAjZmZmMjZhO291dGxpbmUtb2Zmc2V0Oi00cHh9LmRhbmdlci1jZWxse2JveC1zaGFkb3c6aW5zZXQgMCA4cHggMTJweCByZ2JhKDAsMCwwLC4zOCksMCAwIDAgNHB4ICNmZjlhM2R9Lndpbi1jZWxse2FuaW1hdGlvbjpwdWxzZSAuNjVzIGVhc2UtaW4tb3V0IGluZmluaXRlIGFsdGVybmF0ZX1Aa2V5ZnJhbWVzIHB1bHNle2Zyb217ZmlsdGVyOmJyaWdodG5lc3MoMSl9dG97ZmlsdGVyOmJyaWdodG5lc3MoMS40NSl9fS5lbmQtc2NyZWVue3RleHQtYWxpZ246Y2VudGVyfS5lbmQtc3RhdHN7ZGlzcGxheTpncmlkO2dhcDo4cHg7bWF4LXdpZHRoOjUyMHB4O21hcmdpbjoxOHB4IGF1dG99LnN0YXQtbGluZXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEpO2JvcmRlci1yYWRpdXM6MTRweDtwYWRkaW5nOjEwcHh9QG1lZGlhIChtYXgtd2lkdGg6OTAwcHgpey5zZXR0aW5ncy1ncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMiwxZnIpfS5nYW1lLXNjcmVlbntncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfS5zaWRlYmFye3Bvc2l0aW9uOnN0YXRpY30uaGVyb3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfS50b2tlbi1zdGFja3tkaXNwbGF5Om5vbmV9fUBtZWRpYSAobWF4LXdpZHRoOjU2MHB4KXsuYXBwe3BhZGRpbmc6MTBweH0udG9wYmFye2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5zZXR0aW5ncy1ncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9LnBhbmVse2JvcmRlci1yYWRpdXM6MjBweDtwYWRkaW5nOjE0cHh9LmJvYXJke2dhcDo1cHg7Ym9yZGVyLXJhZGl1czoxOHB4fS5jb2x1bW4tY29udHJvbHN7Z2FwOjVweH0ucHJpbWFyeS1idG4sLnNlY29uZGFyeS1idG4sLmdob3N0LWJ0bnt3aWR0aDoxMDAlO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LnRvcC1hY3Rpb25zLC5zdGFydC1hY3Rpb25zLC5nYW1lLWFjdGlvbnN7d2lkdGg6MTAwJX19QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7YW5pbWF0aW9uOm5vbmUhaW1wb3J0YW50O3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9fQo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgogIDxkaXYgaWQ9ImdhbWVSb290IiBjbGFzcz0iYXBwIj4KICAgIDxoZWFkZXIgY2xhc3M9InRvcGJhciI+CiAgICAgIDxkaXY+CiAgICAgICAgPHAgY2xhc3M9ImtpY2tlciI+TU9PQ3dpa2kgU3BpZWxlPC9wPgogICAgICAgIDxoMT40IEdld2lubnQ6IFN0cmF0ZWdpZS1BcmVuYTwvaDE+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ0b3AtYWN0aW9ucyI+CiAgICAgICAgPGJ1dHRvbiBpZD0iZnVsbHNjcmVlbkJ0biIgY2xhc3M9Imdob3N0LWJ0biIgdHlwZT0iYnV0dG9uIj5Wb2xsYmlsZDwvYnV0dG9uPgogICAgICAgIDxidXR0b24gaWQ9Im1lbnVCdG4iIGNsYXNzPSJnaG9zdC1idG4iIHR5cGU9ImJ1dHRvbiI+TWVuw7w8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L2hlYWRlcj4KCiAgICA8bWFpbiBjbGFzcz0ibWFpbiI+CiAgICAgIDxzZWN0aW9uIGlkPSJzdGFydFNjcmVlbiIgY2xhc3M9InBhbmVsIHN0YXJ0LXNjcmVlbiIgYXJpYS1sYWJlbGxlZGJ5PSJzdGFydFRpdGxlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZXJvIj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxwIGNsYXNzPSJiYWRnZSI+VGFrdGlrIOKAoiBNdXN0ZXIgZXJrZW5uZW4g4oCiIFZvcmF1c2RlbmtlbjwvcD4KICAgICAgICAgICAgPGgyIGlkPSJzdGFydFRpdGxlIj5WZXJiaW5kZSB2aWVyIFN0ZWluZSwgYmV2b3IgZXMgZGllIGFuZGVyZW4gdHVuLjwvaDI+CiAgICAgICAgICAgIDxwIGNsYXNzPSJpbnRybyI+V8OkaGxlIFNwaWVsbW9kdXMsIEZlbGRncsO2w59lIHVuZCBIaWxmZW4uIFNwaWVsZSBnZWdlbiBGcmV1bmRpbm5lbiB1bmQgRnJldW5kZSBvZGVyIGdlZ2VuIGRlbiBDb21wdXRlci48L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLXN0YWNrIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj48c3Bhbj48L3NwYW4+PHNwYW4+PC9zcGFuPjxzcGFuPjwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncy1ncmlkIj4KICAgICAgICAgIDxsYWJlbCBjbGFzcz0ic2V0dGluZyI+CiAgICAgICAgICAgIDxzcGFuPlNwaWVsZW5kZTwvc3Bhbj4KICAgICAgICAgICAgPHNlbGVjdCBpZD0icGxheWVyc1NlbGVjdCI+CiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSI+MSBTcGllbGVyIGdlZ2VuIENvbXB1dGVyPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMiIgc2VsZWN0ZWQ+MiBTcGllbGVyPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMyI+MyBTcGllbGVyPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNCI+NCBTcGllbGVyPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNSI+NSBTcGllbGVyPC9vcHRpb24+CiAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgPC9sYWJlbD4KCiAgICAgICAgICA8bGFiZWwgY2xhc3M9InNldHRpbmciPgogICAgICAgICAgICA8c3Bhbj5GZWxkZ3LDtsOfZTwvc3Bhbj4KICAgICAgICAgICAgPHNlbGVjdCBpZD0iYm9hcmRTZWxlY3QiPgogICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Ijd4NiIgc2VsZWN0ZWQ+S2xhc3Npc2NoOiA3IMOXIDY8L29wdGlvbj4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI4eDciPkdyb8OfOiA4IMOXIDc8L29wdGlvbj4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI5eDciPkJyZWl0OiA5IMOXIDc8L29wdGlvbj4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxMHg4Ij5NZWdhOiAxMCDDlyA4PC9vcHRpb24+CiAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgPC9sYWJlbD4KCiAgICAgICAgICA8bGFiZWwgY2xhc3M9InNldHRpbmciPgogICAgICAgICAgICA8c3Bhbj5LSS1TY2h3aWVyaWdrZWl0PC9zcGFuPgogICAgICAgICAgICA8c2VsZWN0IGlkPSJkaWZmaWN1bHR5U2VsZWN0Ij4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJlYXN5Ij5MZWljaHQ8L29wdGlvbj4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJtZWRpdW0iIHNlbGVjdGVkPk1pdHRlbDwvb3B0aW9uPgogICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImhhcmQiPlNjaHdlcjwvb3B0aW9uPgogICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgIDwvbGFiZWw+CgogICAgICAgICAgPGxhYmVsIGNsYXNzPSJzZXR0aW5nIj4KICAgICAgICAgICAgPHNwYW4+WmllbDwvc3Bhbj4KICAgICAgICAgICAgPHNlbGVjdCBpZD0idGFyZ2V0U2VsZWN0Ij4KICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI0IiBzZWxlY3RlZD40IGluIGVpbmVyIFJlaWhlPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNSI+NSBpbiBlaW5lciBSZWloZTwvb3B0aW9uPgogICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InN3aXRjaGVzIj4KICAgICAgICAgIDxsYWJlbD48aW5wdXQgaWQ9ImhpbnRzVG9nZ2xlIiB0eXBlPSJjaGVja2JveCIgY2hlY2tlZD4gVGlwcHMgZXJsYXViZW48L2xhYmVsPgogICAgICAgICAgPGxhYmVsPjxpbnB1dCBpZD0iYXNzaXN0VG9nZ2xlIiB0eXBlPSJjaGVja2JveCIgY2hlY2tlZD4gRHJvaHVuZ2VuIG1hcmtpZXJlbjwvbGFiZWw+CiAgICAgICAgICA8bGFiZWw+PGlucHV0IGlkPSJzb3VuZFRvZ2dsZSIgdHlwZT0iY2hlY2tib3giPiBTYW5mdGUgU2lnbmFsdMO2bmU8L2xhYmVsPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJzdGFydC1hY3Rpb25zIj4KICAgICAgICAgIDxidXR0b24gaWQ9InN0YXJ0QnRuIiBjbGFzcz0icHJpbWFyeS1idG4iIHR5cGU9ImJ1dHRvbiI+U3BpZWwgc3RhcnRlbjwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBpZD0icnVsZXNCdG4iIGNsYXNzPSJzZWNvbmRhcnktYnRuIiB0eXBlPSJidXR0b24iPlJlZ2VsbiBhbnplaWdlbjwvYnV0dG9uPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGlkPSJydWxlc0JveCIgY2xhc3M9InJ1bGVzIGhpZGRlbiIgYXJpYS1saXZlPSJwb2xpdGUiPgogICAgICAgICAgPGgzPlJlZ2VsbjwvaDM+CiAgICAgICAgICA8cD5Xw6RobGUgZWluZSBTcGFsdGUuIERlaW4gU3RlaW4gZsOkbGx0IG5hY2ggdW50ZW4uIFdlciB6dWVyc3QgZGllIGdld8OkaGx0ZSBBbnphaGwgenVzYW1tZW5ow6RuZ2VuZGVyIFN0ZWluZSB3YWFnZXJlY2h0LCBzZW5rcmVjaHQgb2RlciBkaWFnb25hbCBiaWxkZXQsIGdld2lubnQuPC9wPgogICAgICAgICAgPHA+QmVpIDPigJM1IFNwaWVsZW5kZW4gYmxlaWJ0IGRpZSBSZWloZW5mb2xnZSBpbW1lciBnbGVpY2guIEJsb2NraWVyZSBzdGFya2UgUmVpaGVuIGRlciBhbmRlcmVuIHVuZCBiYXVlIGVpZ2VuZSBHYWJlbG4gYXVmLjwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9zZWN0aW9uPgoKICAgICAgPHNlY3Rpb24gaWQ9ImdhbWVTY3JlZW4iIGNsYXNzPSJnYW1lLXNjcmVlbiBoaWRkZW4iIGFyaWEtbGFiZWw9IlNwaWVsZmVsZCI+CiAgICAgICAgPGFzaWRlIGNsYXNzPSJzaWRlYmFyIHBhbmVsIj4KICAgICAgICAgIDxkaXYgaWQ9InN0YXR1c0JveCIgY2xhc3M9InN0YXR1cy1ib3giIGFyaWEtbGl2ZT0icG9saXRlIj5CZXJlaXQuPC9kaXY+CiAgICAgICAgICA8ZGl2IGlkPSJzY29yZUJvYXJkIiBjbGFzcz0ic2NvcmUtYm9hcmQiPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibWV0ZXIiPgogICAgICAgICAgICA8c3Bhbj5Gb3J0c2Nocml0dDwvc3Bhbj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWV0ZXItdHJhY2siPjxkaXYgaWQ9InByb2dyZXNzQmFyIiBjbGFzcz0ibWV0ZXItZmlsbCI+PC9kaXY+PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImdhbWUtYWN0aW9ucyI+CiAgICAgICAgICAgIDxidXR0b24gaWQ9ImhpbnRCdG4iIGNsYXNzPSJzZWNvbmRhcnktYnRuIiB0eXBlPSJidXR0b24iPlRpcHA8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbiBpZD0ibmV3Um91bmRCdG4iIGNsYXNzPSJzZWNvbmRhcnktYnRuIiB0eXBlPSJidXR0b24iPk5ldWUgUnVuZGU8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbiBpZD0icmVzZXRCdG4iIGNsYXNzPSJnaG9zdC1idG4iIHR5cGU9ImJ1dHRvbiI+QWxsZXMgenVyw7xja3NldHplbjwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGlkPSJoaW50Qm94IiBjbGFzcz0iaGludC1ib3giIGFyaWEtbGl2ZT0icG9saXRlIj5UaXBwOiBBY2h0ZSBhdWYgb2ZmZW5lIERyZWllcnJlaWhlbi48L2Rpdj4KICAgICAgICA8L2FzaWRlPgoKICAgICAgICA8ZGl2IGNsYXNzPSJib2FyZC13cmFwIHBhbmVsIj4KICAgICAgICAgIDxkaXYgaWQ9ImNvbHVtbkNvbnRyb2xzIiBjbGFzcz0iY29sdW1uLWNvbnRyb2xzIiBhcmlhLWxhYmVsPSJTcGFsdGVud2FobCI+PC9kaXY+CiAgICAgICAgICA8ZGl2IGlkPSJib2FyZCIgY2xhc3M9ImJvYXJkIiByb2xlPSJncmlkIiBhcmlhLWxhYmVsPSI0LUdld2lubnQtU3BpZWxmZWxkIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9zZWN0aW9uPgoKICAgICAgPHNlY3Rpb24gaWQ9ImVuZFNjcmVlbiIgY2xhc3M9InBhbmVsIGVuZC1zY3JlZW4gaGlkZGVuIiBhcmlhLWxhYmVsbGVkYnk9ImVuZFRpdGxlIj4KICAgICAgICA8aDIgaWQ9ImVuZFRpdGxlIj5SdW5kZSBiZWVuZGV0PC9oMj4KICAgICAgICA8cCBpZD0iZW5kVGV4dCI+PC9wPgogICAgICAgIDxkaXYgaWQ9ImVuZFN0YXRzIiBjbGFzcz0iZW5kLXN0YXRzIj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzdGFydC1hY3Rpb25zIj4KICAgICAgICAgIDxidXR0b24gaWQ9InBsYXlBZ2FpbkJ0biIgY2xhc3M9InByaW1hcnktYnRuIiB0eXBlPSJidXR0b24iPk5vY2ggZWluZSBSdW5kZTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBpZD0iZW5kTWVudUJ0biIgY2xhc3M9InNlY29uZGFyeS1idG4iIHR5cGU9ImJ1dHRvbiI+T3B0aW9uZW4gw6RuZGVybjwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L3NlY3Rpb24+CiAgICA8L21haW4+CiAgPC9kaXY+CiAgCjxzY3JpcHQ+CigoKSA9PiB7CiAgInVzZSBzdHJpY3QiOwoKICBjb25zdCBjb2xvcnMgPSBbIiNmZmNmMzYiLCAiI2ZmNWM3YSIsICIjNTBlM2E0IiwgIiM3OGI3ZmYiLCAiI2M5OGJmZiJdOwogIGNvbnN0IG5hbWVzID0gWyJHZWxiIiwgIlJvdCIsICJHcsO8biIsICJCbGF1IiwgIlZpb2xldHQiXTsKICBjb25zdCBzdGF0ZSA9IHsKICAgIHJvd3M6IDYsIGNvbHM6IDcsIHRhcmdldDogNCwgcGxheWVyQ291bnQ6IDIsIGRpZmZpY3VsdHk6ICJtZWRpdW0iLAogICAgaGludHM6IHRydWUsIGFzc2lzdDogdHJ1ZSwgc291bmQ6IGZhbHNlLCBib2FyZDogW10sIGN1cnJlbnQ6IDAsCiAgICBzY29yZXM6IFswLDAsMCwwLDBdLCBtb3ZlczogMCwgYWN0aXZlOiBmYWxzZSwgd2lubmVyOiAtMSwKICAgIHdpbm5pbmdDZWxsczogW10sIGhpbnRDb2x1bW46IC0xLCBhZ2FpbnN0Q29tcHV0ZXI6IGZhbHNlCiAgfTsKCiAgY29uc3QgZWwgPSB7CiAgICBzdGFydFNjcmVlbjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXJ0U2NyZWVuIiksCiAgICBnYW1lU2NyZWVuOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2FtZVNjcmVlbiIpLAogICAgZW5kU2NyZWVuOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZW5kU2NyZWVuIiksCiAgICBwbGF5ZXJzU2VsZWN0OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGxheWVyc1NlbGVjdCIpLAogICAgYm9hcmRTZWxlY3Q6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib2FyZFNlbGVjdCIpLAogICAgZGlmZmljdWx0eVNlbGVjdDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRpZmZpY3VsdHlTZWxlY3QiKSwKICAgIHRhcmdldFNlbGVjdDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhcmdldFNlbGVjdCIpLAogICAgaGludHNUb2dnbGU6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoaW50c1RvZ2dsZSIpLAogICAgYXNzaXN0VG9nZ2xlOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXNzaXN0VG9nZ2xlIiksCiAgICBzb3VuZFRvZ2dsZTogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNvdW5kVG9nZ2xlIiksCiAgICBzdGFydEJ0bjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXJ0QnRuIiksCiAgICBydWxlc0J0bjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJ1bGVzQnRuIiksCiAgICBydWxlc0JveDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJ1bGVzQm94IiksCiAgICBmdWxsc2NyZWVuQnRuOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnVsbHNjcmVlbkJ0biIpLAogICAgbWVudUJ0bjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1lbnVCdG4iKSwKICAgIHN0YXR1c0JveDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXR1c0JveCIpLAogICAgc2NvcmVCb2FyZDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNjb3JlQm9hcmQiKSwKICAgIHByb2dyZXNzQmFyOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicHJvZ3Jlc3NCYXIiKSwKICAgIGhpbnRCdG46IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoaW50QnRuIiksCiAgICBuZXdSb3VuZEJ0bjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5ld1JvdW5kQnRuIiksCiAgICByZXNldEJ0bjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc2V0QnRuIiksCiAgICBoaW50Qm94OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGludEJveCIpLAogICAgY29sdW1uQ29udHJvbHM6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2x1bW5Db250cm9scyIpLAogICAgYm9hcmQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib2FyZCIpLAogICAgZW5kVGV4dDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVuZFRleHQiKSwKICAgIGVuZFN0YXRzOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZW5kU3RhdHMiKSwKICAgIHBsYXlBZ2FpbkJ0bjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBsYXlBZ2FpbkJ0biIpLAogICAgZW5kTWVudUJ0bjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVuZE1lbnVCdG4iKQogIH07CgogIGZ1bmN0aW9uIHNob3dTY3JlZW4oc2NyZWVuKSB7CiAgICBlbC5zdGFydFNjcmVlbi5jbGFzc0xpc3QudG9nZ2xlKCJoaWRkZW4iLCBzY3JlZW4gIT09ICJzdGFydCIpOwogICAgZWwuZ2FtZVNjcmVlbi5jbGFzc0xpc3QudG9nZ2xlKCJoaWRkZW4iLCBzY3JlZW4gIT09ICJnYW1lIik7CiAgICBlbC5lbmRTY3JlZW4uY2xhc3NMaXN0LnRvZ2dsZSgiaGlkZGVuIiwgc2NyZWVuICE9PSAiZW5kIik7CiAgfQoKICBmdW5jdGlvbiByZXF1ZXN0RnVsbHNjcmVlblNhZmUoKSB7CiAgICBjb25zdCByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdhbWVSb290Iik7CiAgICBpZiAocm9vdC5yZXF1ZXN0RnVsbHNjcmVlbikgewogICAgICByb290LnJlcXVlc3RGdWxsc2NyZWVuKCkuY2F0Y2goKCkgPT4ge30pOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcmVhZE9wdGlvbnMoKSB7CiAgICBjb25zdCBzaXplID0gZWwuYm9hcmRTZWxlY3QudmFsdWUuc3BsaXQoIngiKS5tYXAoTnVtYmVyKTsKICAgIHN0YXRlLmNvbHMgPSBzaXplWzBdOwogICAgc3RhdGUucm93cyA9IHNpemVbMV07CiAgICBzdGF0ZS50YXJnZXQgPSBOdW1iZXIoZWwudGFyZ2V0U2VsZWN0LnZhbHVlKTsKICAgIHN0YXRlLnBsYXllckNvdW50ID0gTnVtYmVyKGVsLnBsYXllcnNTZWxlY3QudmFsdWUpOwogICAgc3RhdGUuZGlmZmljdWx0eSA9IGVsLmRpZmZpY3VsdHlTZWxlY3QudmFsdWU7CiAgICBzdGF0ZS5oaW50cyA9IGVsLmhpbnRzVG9nZ2xlLmNoZWNrZWQ7CiAgICBzdGF0ZS5hc3Npc3QgPSBlbC5hc3Npc3RUb2dnbGUuY2hlY2tlZDsKICAgIHN0YXRlLnNvdW5kID0gZWwuc291bmRUb2dnbGUuY2hlY2tlZDsKICAgIHN0YXRlLmFnYWluc3RDb21wdXRlciA9IHN0YXRlLnBsYXllckNvdW50ID09PSAxOwogICAgaWYgKHN0YXRlLmFnYWluc3RDb21wdXRlcikgewogICAgICBzdGF0ZS5wbGF5ZXJDb3VudCA9IDI7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBtYWtlRW1wdHlCb2FyZCgpIHsKICAgIHN0YXRlLmJvYXJkID0gW107CiAgICBmb3IgKGxldCByID0gMDsgciA8IHN0YXRlLnJvd3M7IHIgKz0gMSkgewogICAgICBjb25zdCByb3cgPSBbXTsKICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBzdGF0ZS5jb2xzOyBjICs9IDEpIHJvdy5wdXNoKC0xKTsKICAgICAgc3RhdGUuYm9hcmQucHVzaChyb3cpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcmVzZXRHYW1lKCkgewogICAgcmVhZE9wdGlvbnMoKTsKICAgIG1ha2VFbXB0eUJvYXJkKCk7CiAgICBzdGF0ZS5jdXJyZW50ID0gMDsKICAgIHN0YXRlLm1vdmVzID0gMDsKICAgIHN0YXRlLmFjdGl2ZSA9IHRydWU7CiAgICBzdGF0ZS53aW5uZXIgPSAtMTsKICAgIHN0YXRlLndpbm5pbmdDZWxscyA9IFtdOwogICAgc3RhdGUuaGludENvbHVtbiA9IC0xOwogICAgcmVuZGVyQWxsKCk7CiAgICBzaG93U2NyZWVuKCJnYW1lIik7CiAgICB1cGRhdGVTdGF0dXMoIlNwaWVsZXIgIiArIG5hbWVzW3N0YXRlLmN1cnJlbnRdICsgIiBiZWdpbm50LiIpOwogIH0KCiAgZnVuY3Rpb24gcmVzZXRNYXRjaCgpIHsKICAgIHN0YXRlLnNjb3JlcyA9IFswLDAsMCwwLDBdOwogICAgcmVzZXRHYW1lKCk7CiAgfQoKICBmdW5jdGlvbiBhdmFpbGFibGVDb2x1bW5zKGJvYXJkKSB7CiAgICBjb25zdCBsaXN0ID0gW107CiAgICBmb3IgKGxldCBjID0gMDsgYyA8IHN0YXRlLmNvbHM7IGMgKz0gMSkgewogICAgICBpZiAoYm9hcmRbMF1bY10gPT09IC0xKSBsaXN0LnB1c2goYyk7CiAgICB9CiAgICByZXR1cm4gbGlzdDsKICB9CgogIGZ1bmN0aW9uIGRyb3BJbkJvYXJkKGJvYXJkLCBjb2wsIHBsYXllcikgewogICAgZm9yIChsZXQgciA9IHN0YXRlLnJvd3MgLSAxOyByID49IDA7IHIgLT0gMSkgewogICAgICBpZiAoYm9hcmRbcl1bY29sXSA9PT0gLTEpIHsKICAgICAgICBib2FyZFtyXVtjb2xdID0gcGxheWVyOwogICAgICAgIHJldHVybiByOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBmdW5jdGlvbiBjbG9uZUJvYXJkKGJvYXJkKSB7CiAgICByZXR1cm4gYm9hcmQubWFwKHJvdyA9PiByb3cuc2xpY2UoKSk7CiAgfQoKICBmdW5jdGlvbiBjaGVja1dpbihib2FyZCwgcGxheWVyKSB7CiAgICBjb25zdCBkaXJzID0gW1sxLDBdLFswLDFdLFsxLDFdLFsxLC0xXV07CiAgICBmb3IgKGxldCByID0gMDsgciA8IHN0YXRlLnJvd3M7IHIgKz0gMSkgewogICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHN0YXRlLmNvbHM7IGMgKz0gMSkgewogICAgICAgIGlmIChib2FyZFtyXVtjXSAhPT0gcGxheWVyKSBjb250aW51ZTsKICAgICAgICBmb3IgKGNvbnN0IGRpciBvZiBkaXJzKSB7CiAgICAgICAgICBjb25zdCBjZWxscyA9IFtbcixjXV07CiAgICAgICAgICBmb3IgKGxldCBrID0gMTsgayA8IHN0YXRlLnRhcmdldDsgayArPSAxKSB7CiAgICAgICAgICAgIGNvbnN0IG5yID0gciArIGRpclswXSAqIGs7CiAgICAgICAgICAgIGNvbnN0IG5jID0gYyArIGRpclsxXSAqIGs7CiAgICAgICAgICAgIGlmIChuciA8IDAgfHwgbnIgPj0gc3RhdGUucm93cyB8fCBuYyA8IDAgfHwgbmMgPj0gc3RhdGUuY29scyB8fCBib2FyZFtucl1bbmNdICE9PSBwbGF5ZXIpIGJyZWFrOwogICAgICAgICAgICBjZWxscy5wdXNoKFtucixuY10pOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNlbGxzLmxlbmd0aCA+PSBzdGF0ZS50YXJnZXQpIHJldHVybiBjZWxsczsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBbXTsKICB9CgogIGZ1bmN0aW9uIHNjb3JlV2luZG93KGNlbGxzLCBwbGF5ZXIsIGJvYXJkKSB7CiAgICBsZXQgb3duID0gMCwgZW1wdHkgPSAwLCBvdGhlciA9IDA7CiAgICBmb3IgKGNvbnN0IGNlbGwgb2YgY2VsbHMpIHsKICAgICAgY29uc3QgdmFsID0gYm9hcmRbY2VsbFswXV1bY2VsbFsxXV07CiAgICAgIGlmICh2YWwgPT09IHBsYXllcikgb3duICs9IDE7CiAgICAgIGVsc2UgaWYgKHZhbCA9PT0gLTEpIGVtcHR5ICs9IDE7CiAgICAgIGVsc2Ugb3RoZXIgKz0gMTsKICAgIH0KICAgIGlmIChvdGhlciA+IDAgJiYgb3duID4gMCkgcmV0dXJuIDA7CiAgICBpZiAob3duID09PSBzdGF0ZS50YXJnZXQpIHJldHVybiAxMDAwMDA7CiAgICBpZiAob3duID09PSBzdGF0ZS50YXJnZXQgLSAxICYmIGVtcHR5ID09PSAxKSByZXR1cm4gOTAwOwogICAgaWYgKG93biA9PT0gc3RhdGUudGFyZ2V0IC0gMiAmJiBlbXB0eSA9PT0gMikgcmV0dXJuIDkwOwogICAgaWYgKG90aGVyID09PSBzdGF0ZS50YXJnZXQgLSAxICYmIGVtcHR5ID09PSAxKSByZXR1cm4gLTg1MDsKICAgIGlmIChvdGhlciA9PT0gc3RhdGUudGFyZ2V0IC0gMiAmJiBlbXB0eSA9PT0gMikgcmV0dXJuIC02MDsKICAgIHJldHVybiBvd24gKiA1IC0gb3RoZXIgKiA0ICsgZW1wdHk7CiAgfQoKICBmdW5jdGlvbiBldmFsdWF0ZUJvYXJkKGJvYXJkLCBwbGF5ZXIpIHsKICAgIGxldCBzY29yZSA9IDA7CiAgICBjb25zdCBjZW50ZXIgPSBNYXRoLmZsb29yKHN0YXRlLmNvbHMgLyAyKTsKICAgIGZvciAobGV0IHIgPSAwOyByIDwgc3RhdGUucm93czsgciArPSAxKSB7CiAgICAgIGlmIChib2FyZFtyXVtjZW50ZXJdID09PSBwbGF5ZXIpIHNjb3JlICs9IDE4OwogICAgfQogICAgY29uc3QgZGlycyA9IFtbMSwwXSxbMCwxXSxbMSwxXSxbMSwtMV1dOwogICAgZm9yIChsZXQgciA9IDA7IHIgPCBzdGF0ZS5yb3dzOyByICs9IDEpIHsKICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBzdGF0ZS5jb2xzOyBjICs9IDEpIHsKICAgICAgICBmb3IgKGNvbnN0IGRpciBvZiBkaXJzKSB7CiAgICAgICAgICBjb25zdCBjZWxscyA9IFtdOwogICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBzdGF0ZS50YXJnZXQ7IGsgKz0gMSkgewogICAgICAgICAgICBjb25zdCBuciA9IHIgKyBkaXJbMF0gKiBrOwogICAgICAgICAgICBjb25zdCBuYyA9IGMgKyBkaXJbMV0gKiBrOwogICAgICAgICAgICBpZiAobnIgPCAwIHx8IG5yID49IHN0YXRlLnJvd3MgfHwgbmMgPCAwIHx8IG5jID49IHN0YXRlLmNvbHMpIHsKICAgICAgICAgICAgICBjZWxscy5sZW5ndGggPSAwOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNlbGxzLnB1c2goW25yLG5jXSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoY2VsbHMubGVuZ3RoID09PSBzdGF0ZS50YXJnZXQpIHNjb3JlICs9IHNjb3JlV2luZG93KGNlbGxzLCBwbGF5ZXIsIGJvYXJkKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzY29yZTsKICB9CgogIGZ1bmN0aW9uIGZpbmRJbW1lZGlhdGVXaW4ocGxheWVyKSB7CiAgICBmb3IgKGNvbnN0IGNvbCBvZiBhdmFpbGFibGVDb2x1bW5zKHN0YXRlLmJvYXJkKSkgewogICAgICBjb25zdCBjb3B5ID0gY2xvbmVCb2FyZChzdGF0ZS5ib2FyZCk7CiAgICAgIGRyb3BJbkJvYXJkKGNvcHksIGNvbCwgcGxheWVyKTsKICAgICAgaWYgKGNoZWNrV2luKGNvcHksIHBsYXllcikubGVuZ3RoID4gMCkgcmV0dXJuIGNvbDsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIGZ1bmN0aW9uIGJlc3RDb2x1bW5Gb3IocGxheWVyKSB7CiAgICBjb25zdCB2YWxpZCA9IGF2YWlsYWJsZUNvbHVtbnMoc3RhdGUuYm9hcmQpOwogICAgaWYgKHZhbGlkLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xOwogICAgY29uc3Qgd2luID0gZmluZEltbWVkaWF0ZVdpbihwbGF5ZXIpOwogICAgaWYgKHdpbiAhPT0gLTEpIHJldHVybiB3aW47CiAgICBmb3IgKGxldCBwID0gMDsgcCA8IHN0YXRlLnBsYXllckNvdW50OyBwICs9IDEpIHsKICAgICAgaWYgKHAgPT09IHBsYXllcikgY29udGludWU7CiAgICAgIGNvbnN0IGJsb2NrID0gZmluZEltbWVkaWF0ZVdpbihwKTsKICAgICAgaWYgKGJsb2NrICE9PSAtMSkgcmV0dXJuIGJsb2NrOwogICAgfQogICAgaWYgKHN0YXRlLmRpZmZpY3VsdHkgPT09ICJlYXN5IiAmJiBNYXRoLnJhbmRvbSgpIDwgMC41NSkgcmV0dXJuIHZhbGlkW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHZhbGlkLmxlbmd0aCldOwogICAgbGV0IGJlc3QgPSB2YWxpZFswXTsKICAgIGxldCBiZXN0U2NvcmUgPSAtSW5maW5pdHk7CiAgICBmb3IgKGNvbnN0IGNvbCBvZiB2YWxpZCkgewogICAgICBjb25zdCBjb3B5ID0gY2xvbmVCb2FyZChzdGF0ZS5ib2FyZCk7CiAgICAgIGRyb3BJbkJvYXJkKGNvcHksIGNvbCwgcGxheWVyKTsKICAgICAgbGV0IHNjb3JlID0gZXZhbHVhdGVCb2FyZChjb3B5LCBwbGF5ZXIpOwogICAgICBpZiAoc3RhdGUuZGlmZmljdWx0eSA9PT0gImhhcmQiKSB7CiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBzdGF0ZS5wbGF5ZXJDb3VudDsgcCArPSAxKSB7CiAgICAgICAgICBpZiAocCAhPT0gcGxheWVyKSBzY29yZSAtPSBNYXRoLm1heCgwLCBldmFsdWF0ZUJvYXJkKGNvcHksIHApICogMC40Mik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNjb3JlIC09IE1hdGguYWJzKGNvbCAtIE1hdGguZmxvb3Ioc3RhdGUuY29scyAvIDIpKSAqIDI7CiAgICAgIGlmIChzY29yZSA+IGJlc3RTY29yZSkgewogICAgICAgIGJlc3RTY29yZSA9IHNjb3JlOwogICAgICAgIGJlc3QgPSBjb2w7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBiZXN0OwogIH0KCiAgZnVuY3Rpb24gZ2V0RHJvcFJvdyhjb2wpIHsKICAgIGZvciAobGV0IHIgPSBzdGF0ZS5yb3dzIC0gMTsgciA+PSAwOyByIC09IDEpIHsKICAgICAgaWYgKHN0YXRlLmJvYXJkW3JdW2NvbF0gPT09IC0xKSByZXR1cm4gcjsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIGZ1bmN0aW9uIG1ha2VNb3ZlKGNvbCkgewogICAgaWYgKCFzdGF0ZS5hY3RpdmUgfHwgY29sIDwgMCB8fCBjb2wgPj0gc3RhdGUuY29scykgcmV0dXJuOwogICAgY29uc3Qgcm93ID0gZ2V0RHJvcFJvdyhjb2wpOwogICAgaWYgKHJvdyA8IDApIHsKICAgICAgdXBkYXRlU3RhdHVzKCJEaWVzZSBTcGFsdGUgaXN0IHZvbGwuIik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHN0YXRlLmJvYXJkW3Jvd11bY29sXSA9IHN0YXRlLmN1cnJlbnQ7CiAgICBzdGF0ZS5tb3ZlcyArPSAxOwogICAgc3RhdGUuaGludENvbHVtbiA9IC0xOwogICAgcGxheVRvbmUoMjQwICsgc3RhdGUuY3VycmVudCAqIDcwKTsKICAgIGNvbnN0IHdpbkNlbGxzID0gY2hlY2tXaW4oc3RhdGUuYm9hcmQsIHN0YXRlLmN1cnJlbnQpOwogICAgaWYgKHdpbkNlbGxzLmxlbmd0aCA+IDApIHsKICAgICAgc3RhdGUuYWN0aXZlID0gZmFsc2U7CiAgICAgIHN0YXRlLndpbm5lciA9IHN0YXRlLmN1cnJlbnQ7CiAgICAgIHN0YXRlLndpbm5pbmdDZWxscyA9IHdpbkNlbGxzOwogICAgICBzdGF0ZS5zY29yZXNbc3RhdGUuY3VycmVudF0gKz0gMTsKICAgICAgcmVuZGVyQWxsKCk7CiAgICAgIGZpbmlzaFJvdW5kKCJTcGllbGVyICIgKyBuYW1lc1tzdGF0ZS5jdXJyZW50XSArICIgZ2V3aW5udCEiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHN0YXRlLm1vdmVzID49IHN0YXRlLnJvd3MgKiBzdGF0ZS5jb2xzKSB7CiAgICAgIHN0YXRlLmFjdGl2ZSA9IGZhbHNlOwogICAgICByZW5kZXJBbGwoKTsKICAgICAgZmluaXNoUm91bmQoIlVuZW50c2NoaWVkZW4hIERhcyBGZWxkIGlzdCB2b2xsLiIpOwogICAgICByZXR1cm47CiAgICB9CiAgICBzdGF0ZS5jdXJyZW50ID0gKHN0YXRlLmN1cnJlbnQgKyAxKSAlIHN0YXRlLnBsYXllckNvdW50OwogICAgcmVuZGVyQWxsKCk7CiAgICB1cGRhdGVTdGF0dXMoIlNwaWVsZXIgIiArIG5hbWVzW3N0YXRlLmN1cnJlbnRdICsgIiBpc3QgYW0gWnVnLiIpOwogICAgaWYgKHN0YXRlLmFnYWluc3RDb21wdXRlciAmJiBzdGF0ZS5jdXJyZW50ID09PSAxKSB7CiAgICAgIHVwZGF0ZVN0YXR1cygiQ29tcHV0ZXIgZGVua3QgbmFjaC4iKTsKICAgICAgc2V0VGltZW91dCgoKSA9PiBtYWtlTW92ZShiZXN0Q29sdW1uRm9yKDEpKSwgNDIwKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGZpbmlzaFJvdW5kKHRleHQpIHsKICAgIGVsLmVuZFRleHQudGV4dENvbnRlbnQgPSB0ZXh0OwogICAgcmVuZGVyRW5kU3RhdHMoKTsKICAgIHNldFRpbWVvdXQoKCkgPT4gc2hvd1NjcmVlbigiZW5kIiksIDY1MCk7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJBbGwoKSB7CiAgICByZW5kZXJDb250cm9scygpOwogICAgcmVuZGVyQm9hcmQoKTsKICAgIHJlbmRlclNjb3JlcygpOwogICAgdXBkYXRlUHJvZ3Jlc3MoKTsKICAgIGVsLmhpbnRCdG4uZGlzYWJsZWQgPSAhc3RhdGUuaGludHMgfHwgIXN0YXRlLmFjdGl2ZTsKICAgIGVsLmhpbnRCb3gudGV4dENvbnRlbnQgPSBzdGF0ZS5oaW50cyA/ICJUaXBwOiBTdWNoZSB6dWVyc3QgR2V3aW5uesO8Z2UsIGRhbm4gQmxvY2thZGVuLiIgOiAiVGlwcHMgc2luZCBhdXNnZXNjaGFsdGV0LiI7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJDb250cm9scygpIHsKICAgIGVsLmNvbHVtbkNvbnRyb2xzLnN0eWxlLmdyaWRUZW1wbGF0ZUNvbHVtbnMgPSAicmVwZWF0KCIgKyBzdGF0ZS5jb2xzICsgIiwgMWZyKSI7CiAgICBlbC5jb2x1bW5Db250cm9scy50ZXh0Q29udGVudCA9ICIiOwogICAgZm9yIChsZXQgYyA9IDA7IGMgPCBzdGF0ZS5jb2xzOyBjICs9IDEpIHsKICAgICAgY29uc3QgYnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7CiAgICAgIGJ0bi50eXBlID0gImJ1dHRvbiI7CiAgICAgIGJ0bi5jbGFzc05hbWUgPSAiY29sdW1uLWJ0biI7CiAgICAgIGJ0bi50ZXh0Q29udGVudCA9ICLilrwiOwogICAgICBidG4uc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwgIlN0ZWluIGluIFNwYWx0ZSAiICsgKGMgKyAxKSArICIgd2VyZmVuIik7CiAgICAgIGJ0bi5kaXNhYmxlZCA9ICFzdGF0ZS5hY3RpdmUgfHwgc3RhdGUuYm9hcmRbMF1bY10gIT09IC0xIHx8IChzdGF0ZS5hZ2FpbnN0Q29tcHV0ZXIgJiYgc3RhdGUuY3VycmVudCA9PT0gMSk7CiAgICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IG1ha2VNb3ZlKGMpKTsKICAgICAgZWwuY29sdW1uQ29udHJvbHMuYXBwZW5kQ2hpbGQoYnRuKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGlzQ2VsbE1hcmtlZChsaXN0LCByLCBjKSB7CiAgICByZXR1cm4gbGlzdC5zb21lKGl0ZW0gPT4gaXRlbVswXSA9PT0gciAmJiBpdGVtWzFdID09PSBjKTsKICB9CgogIGZ1bmN0aW9uIGRhbmdlcm91c0NvbHVtbnMoKSB7CiAgICBjb25zdCByZXN1bHQgPSBbXTsKICAgIGZvciAobGV0IHAgPSAwOyBwIDwgc3RhdGUucGxheWVyQ291bnQ7IHAgKz0gMSkgewogICAgICBpZiAocCA9PT0gc3RhdGUuY3VycmVudCkgY29udGludWU7CiAgICAgIGNvbnN0IGNvbCA9IGZpbmRJbW1lZGlhdGVXaW4ocCk7CiAgICAgIGlmIChjb2wgIT09IC0xKSByZXN1bHQucHVzaChjb2wpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGZ1bmN0aW9uIHJlbmRlckJvYXJkKCkgewogICAgZWwuYm9hcmQuc3R5bGUuZ3JpZFRlbXBsYXRlQ29sdW1ucyA9ICJyZXBlYXQoIiArIHN0YXRlLmNvbHMgKyAiLCBtaW5tYXgoMjZweCwgMWZyKSkiOwogICAgZWwuYm9hcmQudGV4dENvbnRlbnQgPSAiIjsKICAgIGNvbnN0IGRhbmdlciA9IHN0YXRlLmFzc2lzdCA/IGRhbmdlcm91c0NvbHVtbnMoKSA6IFtdOwogICAgZm9yIChsZXQgciA9IDA7IHIgPCBzdGF0ZS5yb3dzOyByICs9IDEpIHsKICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBzdGF0ZS5jb2xzOyBjICs9IDEpIHsKICAgICAgICBjb25zdCBjZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgY2VsbC5jbGFzc05hbWUgPSAiY2VsbCI7CiAgICAgICAgY2VsbC5zZXRBdHRyaWJ1dGUoInJvbGUiLCAiZ3JpZGNlbGwiKTsKICAgICAgICBpZiAoc3RhdGUuaGludENvbHVtbiA9PT0gYyAmJiBnZXREcm9wUm93KGMpID09PSByKSBjZWxsLmNsYXNzTGlzdC5hZGQoImhpbnQtY2VsbCIpOwogICAgICAgIGlmIChkYW5nZXIuaW5kZXhPZihjKSAhPT0gLTEgJiYgZ2V0RHJvcFJvdyhjKSA9PT0gcikgY2VsbC5jbGFzc0xpc3QuYWRkKCJkYW5nZXItY2VsbCIpOwogICAgICAgIGlmIChpc0NlbGxNYXJrZWQoc3RhdGUud2lubmluZ0NlbGxzLCByLCBjKSkgY2VsbC5jbGFzc0xpc3QuYWRkKCJ3aW4tY2VsbCIpOwogICAgICAgIGNvbnN0IHZhbCA9IHN0YXRlLmJvYXJkW3JdW2NdOwogICAgICAgIGlmICh2YWwgIT09IC0xKSB7CiAgICAgICAgICBjb25zdCBwaWVjZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICAgcGllY2UuY2xhc3NOYW1lID0gInBpZWNlIjsKICAgICAgICAgIHBpZWNlLnN0eWxlLmJhY2tncm91bmQgPSBjb2xvcnNbdmFsXTsKICAgICAgICAgIHBpZWNlLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsICJTdGVpbiAiICsgbmFtZXNbdmFsXSk7CiAgICAgICAgICBjZWxsLmFwcGVuZENoaWxkKHBpZWNlKTsKICAgICAgICB9CiAgICAgICAgZWwuYm9hcmQuYXBwZW5kQ2hpbGQoY2VsbCk7CiAgICAgIH0KICAgIH0KICB9CgogIGZ1bmN0aW9uIHJlbmRlclNjb3JlcygpIHsKICAgIGVsLnNjb3JlQm9hcmQudGV4dENvbnRlbnQgPSAiIjsKICAgIGZvciAobGV0IHAgPSAwOyBwIDwgc3RhdGUucGxheWVyQ291bnQ7IHAgKz0gMSkgewogICAgICBjb25zdCByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgcm93LmNsYXNzTmFtZSA9ICJzY29yZS1yb3ciOwogICAgICBpZiAocCA9PT0gc3RhdGUuY3VycmVudCAmJiBzdGF0ZS5hY3RpdmUpIHJvdy5jbGFzc0xpc3QuYWRkKCJhY3RpdmUtcm93Iik7CiAgICAgIGNvbnN0IGNoaXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgY2hpcC5jbGFzc05hbWUgPSAicGxheWVyLWNoaXAiOwogICAgICBjb25zdCBkb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAgIGRvdC5jbGFzc05hbWUgPSAiZG90IjsKICAgICAgZG90LnN0eWxlLmJhY2tncm91bmQgPSBjb2xvcnNbcF07CiAgICAgIGNvbnN0IGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICBsYWJlbC50ZXh0Q29udGVudCA9IHN0YXRlLmFnYWluc3RDb21wdXRlciAmJiBwID09PSAxID8gIkNvbXB1dGVyIiA6ICJTcGllbGVyICIgKyBuYW1lc1twXTsKICAgICAgY2hpcC5hcHBlbmRDaGlsZChkb3QpOwogICAgICBjaGlwLmFwcGVuZENoaWxkKGxhYmVsKTsKICAgICAgY29uc3Qgc2NvcmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHJvbmciKTsKICAgICAgc2NvcmUudGV4dENvbnRlbnQgPSBTdHJpbmcoc3RhdGUuc2NvcmVzW3BdKTsKICAgICAgcm93LmFwcGVuZENoaWxkKGNoaXApOwogICAgICByb3cuYXBwZW5kQ2hpbGQoc2NvcmUpOwogICAgICBlbC5zY29yZUJvYXJkLmFwcGVuZENoaWxkKHJvdyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiByZW5kZXJFbmRTdGF0cygpIHsKICAgIGVsLmVuZFN0YXRzLnRleHRDb250ZW50ID0gIiI7CiAgICBmb3IgKGxldCBwID0gMDsgcCA8IHN0YXRlLnBsYXllckNvdW50OyBwICs9IDEpIHsKICAgICAgY29uc3QgbGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICBsaW5lLmNsYXNzTmFtZSA9ICJzdGF0LWxpbmUiOwogICAgICBjb25zdCBsYWJlbCA9IHN0YXRlLmFnYWluc3RDb21wdXRlciAmJiBwID09PSAxID8gIkNvbXB1dGVyIiA6ICJTcGllbGVyICIgKyBuYW1lc1twXTsKICAgICAgbGluZS50ZXh0Q29udGVudCA9IGxhYmVsICsgIjogIiArIHN0YXRlLnNjb3Jlc1twXSArICIgUnVuZGVuc2llZ2UiOwogICAgICBlbC5lbmRTdGF0cy5hcHBlbmRDaGlsZChsaW5lKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHVwZGF0ZVByb2dyZXNzKCkgewogICAgY29uc3QgcGVyY2VudCA9IE1hdGgucm91bmQoKHN0YXRlLm1vdmVzIC8gKHN0YXRlLnJvd3MgKiBzdGF0ZS5jb2xzKSkgKiAxMDApOwogICAgZWwucHJvZ3Jlc3NCYXIuc3R5bGUud2lkdGggPSBwZXJjZW50ICsgIiUiOwogIH0KCiAgZnVuY3Rpb24gdXBkYXRlU3RhdHVzKHRleHQpIHsKICAgIGVsLnN0YXR1c0JveC50ZXh0Q29udGVudCA9IHRleHQ7CiAgfQoKICBmdW5jdGlvbiBzaG93SGludCgpIHsKICAgIGlmICghc3RhdGUuYWN0aXZlIHx8ICFzdGF0ZS5oaW50cykgcmV0dXJuOwogICAgY29uc3QgY29sID0gYmVzdENvbHVtbkZvcihzdGF0ZS5jdXJyZW50KTsKICAgIHN0YXRlLmhpbnRDb2x1bW4gPSBjb2w7CiAgICBpZiAoY29sID09PSAtMSkgewogICAgICBlbC5oaW50Qm94LnRleHRDb250ZW50ID0gIktlaW4gc2lubnZvbGxlciBadWcgZ2VmdW5kZW4uIjsKICAgIH0gZWxzZSB7CiAgICAgIGVsLmhpbnRCb3gudGV4dENvbnRlbnQgPSAiVGlwcDogU3BhbHRlICIgKyAoY29sICsgMSkgKyAiIGlzdCBzdHJhdGVnaXNjaCBzdGFyay4iOwogICAgfQogICAgcmVuZGVyQm9hcmQoKTsKICB9CgogIGZ1bmN0aW9uIHBsYXlUb25lKGZyZXEpIHsKICAgIGlmICghc3RhdGUuc291bmQpIHJldHVybjsKICAgIHRyeSB7CiAgICAgIGNvbnN0IEF1ZGlvQ3R4ID0gd2luZG93LkF1ZGlvQ29udGV4dCB8fCB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0OwogICAgICBpZiAoIUF1ZGlvQ3R4KSByZXR1cm47CiAgICAgIGNvbnN0IGN0eCA9IG5ldyBBdWRpb0N0eCgpOwogICAgICBjb25zdCBvc2MgPSBjdHguY3JlYXRlT3NjaWxsYXRvcigpOwogICAgICBjb25zdCBnYWluID0gY3R4LmNyZWF0ZUdhaW4oKTsKICAgICAgb3NjLmZyZXF1ZW5jeS52YWx1ZSA9IGZyZXE7CiAgICAgIGdhaW4uZ2Fpbi52YWx1ZSA9IDAuMDQ7CiAgICAgIG9zYy5jb25uZWN0KGdhaW4pOwogICAgICBnYWluLmNvbm5lY3QoY3R4LmRlc3RpbmF0aW9uKTsKICAgICAgb3NjLnN0YXJ0KCk7CiAgICAgIG9zYy5zdG9wKGN0eC5jdXJyZW50VGltZSArIDAuMDgpOwogICAgfSBjYXRjaCAoZXJyKSB7fQogIH0KCiAgZnVuY3Rpb24gZ29NZW51KCkgewogICAgc3RhdGUuYWN0aXZlID0gZmFsc2U7CiAgICBzaG93U2NyZWVuKCJzdGFydCIpOwogIH0KCiAgZWwuc3RhcnRCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7IHJlcXVlc3RGdWxsc2NyZWVuU2FmZSgpOyByZXNldE1hdGNoKCk7IH0pOwogIGVsLmZ1bGxzY3JlZW5CdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCByZXF1ZXN0RnVsbHNjcmVlblNhZmUpOwogIGVsLnJ1bGVzQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gZWwucnVsZXNCb3guY2xhc3NMaXN0LnRvZ2dsZSgiaGlkZGVuIikpOwogIGVsLm1lbnVCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBnb01lbnUpOwogIGVsLmhpbnRCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBzaG93SGludCk7CiAgZWwubmV3Um91bmRCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCByZXNldEdhbWUpOwogIGVsLnJlc2V0QnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgcmVzZXRNYXRjaCk7CiAgZWwucGxheUFnYWluQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgcmVzZXRHYW1lKTsKICBlbC5lbmRNZW51QnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZ29NZW51KTsKCiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChldmVudCkgPT4gewogICAgaWYgKCFzdGF0ZS5hY3RpdmUpIHJldHVybjsKICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleTsKICAgIGlmICgvXlsxLTldJC8udGVzdChrZXkpKSB7CiAgICAgIGNvbnN0IGNvbCA9IE51bWJlcihrZXkpIC0gMTsKICAgICAgaWYgKGNvbCA8IHN0YXRlLmNvbHMpIG1ha2VNb3ZlKGNvbCk7CiAgICB9CiAgICBpZiAoa2V5ID09PSAiQXJyb3dMZWZ0IikgewogICAgICBzdGF0ZS5oaW50Q29sdW1uID0gTWF0aC5tYXgoMCwgc3RhdGUuaGludENvbHVtbiA9PT0gLTEgPyAwIDogc3RhdGUuaGludENvbHVtbiAtIDEpOwogICAgICByZW5kZXJCb2FyZCgpOwogICAgfQogICAgaWYgKGtleSA9PT0gIkFycm93UmlnaHQiKSB7CiAgICAgIHN0YXRlLmhpbnRDb2x1bW4gPSBNYXRoLm1pbihzdGF0ZS5jb2xzIC0gMSwgc3RhdGUuaGludENvbHVtbiA9PT0gLTEgPyAwIDogc3RhdGUuaGludENvbHVtbiArIDEpOwogICAgICByZW5kZXJCb2FyZCgpOwogICAgfQogICAgaWYgKGtleSA9PT0gIkVudGVyIiAmJiBzdGF0ZS5oaW50Q29sdW1uICE9PSAtMSkgbWFrZU1vdmUoc3RhdGUuaGludENvbHVtbik7CiAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICJ0Iikgc2hvd0hpbnQoKTsKICB9KTsKCiAgc2hvd1NjcmVlbigic3RhcnQiKTsKfSkoKTsKCjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4=
</aimoocgame>
</aimoocgame>
== Spiele-ZIP-Metadaten ==
* Format: Spiele
* Fach: Medienbildung / Logik / Strategie
* Klasse/Alter: Klasse 3–10
* Version: 1.0.0
* Sprache: de
* ZIP-SHA256: <code>37bc7c9e95292346ce1def3e2cd91a53cdd7236b547d38e2ac076c46eb0caed5</code>
=== Dateien ===
* <code>index.html</code>
* <code>style.css</code>
* <code>script.js</code>
* <code>manifest.json</code>
* <code>README.md</code>
* <code>assets/cover.png</code>
=== SHA256 ===
* <code>index.html</code>: <code>47c05c0422b845500ba91c5051005a359f45c65ded280f412a5fe93d581caa0f</code>
* <code>style.css</code>: <code>e15487a40547747ef51e13975f7d5da9a026841343708896c46126c026aecc8f</code>
* <code>script.js</code>: <code>644c7f19c535c20600654c4dc2cf61ce440dcacbcb2ed8edaaf002bac03301ad</code>
* <code>manifest.json</code>: <code>27b23d30bd51211844f74292f3d7bb0f3f3af899abfd1a4a9d723dfcd8554da7</code>
* <code>README.md</code>: <code>bcb4aff5d280dd7fc8695641610334902c8fd066fe71207a15deca2421320035</code>
* <code>assets/cover.png</code>: <code>808c2f37a001311aac17e4e28ca053e6627ef960f29eee3c92b7da657b2c4682</code>


[[Kategorie:Spiele]]
[[Kategorie:Spiele]]

Aktuelle Version vom 14. Juni 2026, 10:58 Uhr



4 Gewinnt Ultra PRO


4 Gewinnt Ultra PRO

4 Gewinnt Ultra PRO mit bis zu 5 Personen

MOOCwiki Spiele

4 Gewinnt Ultra PRO





Schulfach+

Prüfungsliteratur 2026
Bundesland Bücher Kurzbeschreibung
Baden-Württemberg

Abitur

  1. Der zerbrochne Krug - Heinrich von Kleist
  2. Heimsuchung - Jenny Erpenbeck

Mittlere Reife

  1. Der Markisenmann - Jan Weiler oder Als die Welt uns gehörte - Liz Kessler
  2. Ein Schatten wie ein Leopard - Myron Levoy oder Pampa Blues - Rolf Lappert

Abitur Dorfrichter-Komödie über Wahrheit/Schuld; Roman über einen Ort und deutsche Geschichte. Mittlere Reife Wahllektüren (Roadtrip-Vater-Sohn / Jugendroman im NS-Kontext / Coming-of-age / Provinzroman).

Bayern

Abitur

  1. Der zerbrochne Krug - Heinrich von Kleist
  2. Heimsuchung - Jenny Erpenbeck

Abitur Lustspiel über Machtmissbrauch und Recht; Roman als Zeitschnitt deutscher Geschichte an einem Haus/Grundstück.

Berlin/Brandenburg

Abitur

  1. Der zerbrochne Krug - Heinrich von Kleist
  2. Woyzeck - Georg Büchner
  3. Der Biberpelz - Gerhart Hauptmann
  4. Heimsuchung - Jenny Erpenbeck

Abitur Gerichtskomödie; soziales Drama um Ausbeutung/Armut; Komödie/Satire um Diebstahl und Obrigkeit; Roman über Erinnerungsräume und Umbrüche.

Bremen

Abitur

  1. Nach Mitternacht - Irmgard Keun
  2. Mario und der Zauberer - Thomas Mann
  3. Emilia Galotti - Gotthold Ephraim Lessing oder Miss Sara Sampson - Gotthold Ephraim Lessing

Abitur Roman in der NS-Zeit (Alltag, Anpassung, Angst); Novelle über Verführung/Massenpsychologie; bürgerliche Trauerspiele (Moral, Macht, Stand).

Hamburg

Abitur

  1. Der zerbrochne Krug - Heinrich von Kleist
  2. Das kunstseidene Mädchen - Irmgard Keun

Abitur Justiz-/Machtkritik als Komödie; Großstadtroman der Weimarer Zeit (Rollenbilder, Aufstiegsträume, soziale Realität).

Hessen

Abitur

  1. Der zerbrochne Krug - Heinrich von Kleist
  2. Woyzeck - Georg Büchner
  3. Heimsuchung - Jenny Erpenbeck
  4. Der Prozess - Franz Kafka

Abitur Gerichtskomödie; Fragmentdrama über Gewalt/Entmenschlichung; Erinnerungsroman über deutsche Brüche; moderner Roman über Schuld, Macht und Bürokratie.

Niedersachsen

Abitur

  1. Der zerbrochene Krug - Heinrich von Kleist
  2. Das kunstseidene Mädchen - Irmgard Keun
  3. Die Marquise von O. - Heinrich von Kleist
  4. Über das Marionettentheater - Heinrich von Kleist

Abitur Schwerpunkt auf Drama/Roman sowie Kleist-Prosatext und Essay (Ehre, Gewalt, Unschuld; Ästhetik/„Anmut“).

Nordrhein-Westfalen

Abitur

  1. Der zerbrochne Krug - Heinrich von Kleist
  2. Heimsuchung - Jenny Erpenbeck

Abitur Komödie über Wahrheit und Autorität; Roman als literarische „Geschichtsschichtung“ an einem Ort.

Saarland

Abitur

  1. Heimsuchung - Jenny Erpenbeck
  2. Furor - Lutz Hübner und Sarah Nemitz
  3. Bahnwärter Thiel - Gerhart Hauptmann

Abitur Erinnerungsroman an einem Ort; zeitgenössisches Drama über Eskalation/Populismus; naturalistische Novelle (Pflicht/Überforderung/Abgrund).

Sachsen (berufliches Gymnasium)

Abitur

  1. Der zerbrochne Krug - Heinrich von Kleist
  2. Woyzeck - Georg Büchner
  3. Irrungen, Wirrungen - Theodor Fontane
  4. Der gute Mensch von Sezuan - Bertolt Brecht
  5. Heimsuchung - Jenny Erpenbeck
  6. Der Trafikant - Robert Seethaler

Abitur Mischung aus Klassiker-Drama, sozialem Drama, realistischem Roman, epischem Theater und Gegenwarts-/Erinnerungsroman; zusätzlich Coming-of-age im historischen Kontext.

Sachsen-Anhalt

Abitur

  1. (keine fest benannte landesweite Pflichtlektüre veröffentlicht; Themenfelder)

Abitur Schwerpunktsetzung über Themenfelder (u. a. Literatur um 1900; Sprache in politisch-gesellschaftlichen Kontexten), ohne feste Einzeltitel.

Schleswig-Holstein

Abitur

  1. Der zerbrochne Krug - Heinrich von Kleist
  2. Heimsuchung - Jenny Erpenbeck

Abitur Recht/Gerechtigkeit und historische Tiefenschichten eines Ortes – umgesetzt über Drama und Gegenwartsroman.

Thüringen

Abitur

  1. (keine fest benannte landesweite Pflichtlektüre veröffentlicht; Orientierung am gemeinsamen Aufgabenpool)

Abitur In der Praxis häufig Orientierung am gemeinsamen Aufgabenpool; landesweite Einzeltitel je nach Vorgabe/Handreichung nicht einheitlich ausgewiesen.

Mecklenburg-Vorpommern

Abitur

  1. (Quelle aktuell technisch nicht abrufbar; Beteiligung am gemeinsamen Aufgabenpool bekannt)

Abitur Land beteiligt sich am länderübergreifenden Aufgabenpool; konkrete, veröffentlichte Einzeltitel konnten hier nicht ausgelesen werden.

Rheinland-Pfalz

Abitur

  1. (keine landesweit einheitliche Pflichtlektüre; schulische Auswahl)

Abitur Keine landesweite Einheitsliste; Auswahl kann schul-/kursbezogen erfolgen.




aiMOOCs



aiMOOC Projekte












THE MONKEY DANCE



{{#ev:youtube | https://youtu.be/rFhZlg38Zf8?si=9KdMNZYRkRD81YTo%7C 500 | center}}

The Monkey DanceaiMOOCs

  1. Trust Me It's True: #Verschwörungstheorie #FakeNews
  2. Gregor Samsa Is You: #Kafka #Verwandlung
  3. Who Owns Who: #Musk #Geld
  4. Lump: #Trump #Manipulation
  5. Filth Like You: #Konsum #Heuchelei
  6. Your Poverty Pisses Me Off: #SozialeUngerechtigkeit #Musk
  7. Hello I'm Pump: #Trump #Kapitalismus
  8. Monkey Dance Party: #Lebensfreude
  9. God Hates You Too: #Religionsfanatiker
  10. You You You: #Klimawandel #Klimaleugner
  11. Monkey Free: #Konformität #Macht #Kontrolle
  12. Pure Blood: #Rassismus
  13. Monkey World: #Chaos #Illusion #Manipulation
  14. Uh Uh Uh Poor You: #Kafka #BerichtAkademie #Doppelmoral
  15. The Monkey Dance Song: #Gesellschaftskritik
  16. Will You Be Mine: #Love
  17. Arbeitsheft
  18. And Thanks for Your Meat: #AntiFactoryFarming #AnimalRights #MeatIndustry


© The Monkey Dance on Spotify, YouTube, Amazon, MOOCit, Deezer, ...

{{#ev:youtube | https://youtu.be/Ob7etf9QuBo?si=t_NBA71bWg3Rq3LI%7C 500 | center}}



Text bearbeiten Bild einfügen Video einbetten Interaktive Aufgaben erstellen

<inputbox>

type=create break=no preload=MOOCit Vorlage default= width=30 placeholder= Dein MOOC Titel buttonlabel=MOOC erstellen </inputbox>